diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..fabd04819 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,32 @@ +name: Build + +on: + push: + branches: ["main"] + pull_request: + branches: ["main"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Checkout Branch + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version-file: "package.json" + cache: "npm" + + - name: Install Node Packages + run: npm ci + + - name: Build Workloads + run: npm run build:all -- --check diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1ba59d5b7..664a423b0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: CI +name: Test on: push: @@ -12,7 +12,7 @@ on: jobs: linters: name: Linters - runs-on: macos-latest + runs-on: ubuntu-latest steps: - name: Checkout Branch uses: actions/checkout@v4 @@ -60,17 +60,13 @@ jobs: - name: Run Node Unit Tests run: npm test - build: - name: Build + test: + name: Test runs-on: macos-latest strategy: matrix: - browser: [chrome, firefox, safari] + browser: [chrome, firefox] steps: - - name: Install Firefox - if: ${{ matrix.browser == 'firefox' }} - run: brew install --cask firefox - - name: Checkout Branch uses: actions/checkout@v4 diff --git a/package.json b/package.json index a6745b4fa..9a313c318 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,8 @@ "pretty:fix": "prettier --write ./", "format": "node tests/format.mjs", "format:all": "node tests/format.mjs --all", + "build": "node tests/build.mjs", + "build:all": "node tests/build.mjs --all", "test:chrome": "node tests/run-unittests.mjs --browser chrome", "test:firefox": "node tests/run-unittests.mjs --browser firefox", "test:safari": "node tests/run-unittests.mjs --browser safari", diff --git a/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/helpers.mjs b/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/helpers.mjs index b6b004542..9c8df3c5b 100644 --- a/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/helpers.mjs +++ b/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/helpers.mjs @@ -53,3 +53,9 @@ export function forceLayout(body, layoutMode = "getBoundingRectAndElementFromPoi throw Error(`Invalid layoutMode: ${layoutMode}`); } } + +export function skipInShell(context) { + if (typeof window === "undefined" || typeof document === "undefined") + // Skip in non-browser environments + context.skip(); +} diff --git a/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/params.mjs b/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/params.mjs index 5e6246320..f9e0a0541 100644 --- a/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/params.mjs +++ b/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/params.mjs @@ -33,6 +33,10 @@ export class Params { // "generate": generate a random seed // : use the provided integer as a seed shuffleSeed = "off"; + // Param to tweak the relative complexity of all suites. + // The default is 1.0, and for suites supporting this param, the duration + // roughly scales with the complexity. + complexity = 1.0; // Choices: "getBoundingClientRect" or "getBoundingRectAndElementFromPoint" layoutMode = LAYOUT_MODES[0]; // Measure more workload prepare time. @@ -49,8 +53,17 @@ export class Params { } } - _parseInt(value, errorMessage) { + _parseNumber(value, errorMessage, minValue = 0) { const number = Number(value); + if (!Number.isFinite(number) && errorMessage) + throw new Error(`Invalid ${errorMessage} param: '${value}', expected Number.`); + if (number < minValue) + throw new Error(`Invalid ${errorMessage} param: '${value}', value must be >= ${minValue}.`); + return number; + } + + _parseInt(value, errorMessage, minValue = 0) { + const number = this._parseNumber(value, errorMessage, minValue); if (!Number.isInteger(number) && errorMessage) throw new Error(`Invalid ${errorMessage} param: '${value}', expected int.`); return parseInt(number); @@ -71,6 +84,7 @@ export class Params { this.warmupBeforeSync = this._parseIntParam(searchParams, "warmupBeforeSync", 0); this.measurementMethod = this._parseEnumParam(searchParams, "measurementMethod", ["raf"]); this.shuffleSeed = this._parseShuffleSeed(searchParams); + this.complexity = this._parserNumberParam(searchParams, "complexity", 0); this.layoutMode = this._parseEnumParam(searchParams, "layoutMode", LAYOUT_MODES); this.measurePrepare = this._parseBooleanParam(searchParams, "measurePrepare"); this.config = this._parseConfig(searchParams); @@ -89,13 +103,18 @@ export class Params { return true; } - _parseIntParam(searchParams, paramKey, minValue) { + _parserNumberParam(searchParams, paramKey, minValue) { if (!searchParams.has(paramKey)) return defaultParams[paramKey]; + const parsedValue = this._parseNumber(searchParams.get(paramKey), "waitBeforeSync", minValue); + searchParams.delete(paramKey); + return parsedValue; + } - const parsedValue = this._parseInt(searchParams.get(paramKey), "waitBeforeSync"); - if (parsedValue < minValue) - throw new Error(`Invalid ${paramKey} param: '${parsedValue}', value must be >= ${minValue}.`); + _parseIntParam(searchParams, paramKey, minValue) { + if (!searchParams.has(paramKey)) + return defaultParams[paramKey]; + const parsedValue = this._parseInt(searchParams.get(paramKey), "waitBeforeSync", minValue); searchParams.delete(paramKey); return parsedValue; } @@ -211,6 +230,10 @@ export class Params { toSearchParams() { return this.toSearchParamsObject().toString(); } + + isDefault() { + return this === defaultParams; + } } function isValidJsonUrl(url) { diff --git a/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/todomvc-utils.mjs b/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/todomvc-utils.mjs index dca451575..d10da163d 100644 --- a/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/todomvc-utils.mjs +++ b/suites-experimental/javascript-wc-indexeddb/dist/src/speedometer-utils/todomvc-utils.mjs @@ -1 +1,12 @@ -export const numberOfItemsToAdd = 100; +import { params } from "./params.mjs"; + +export const defaultNumberOfItemsToAdd = 100; +export let numberOfItemsToAdd = defaultNumberOfItemsToAdd; + +export function getNumberOfItemsToAdd() { + return numberOfItemsToAdd; +} + +export function handleComplexityChange() { + numberOfItemsToAdd = Math.round(defaultNumberOfItemsToAdd * params.complexity); +} diff --git a/suites-experimental/responsive-design/dist/resources.txt b/suites-experimental/responsive-design/dist/resources.txt deleted file mode 100644 index 67c1ae38c..000000000 --- a/suites-experimental/responsive-design/dist/resources.txt +++ /dev/null @@ -1,39 +0,0 @@ -app.js -index.html -public/images/5-healthy-smoothie.webp -public/images/beef-stroganoff.webp -public/images/beef-tacos.webp -public/images/best-comfort-food.webp -public/images/bread-at-home.webp -public/images/caesar-salad.webp -public/images/chicken-alfredo.webp -public/images/chocolate-cake.webp -public/images/chocolate-chip-cookies.webp -public/images/fruit-salad.webp -public/images/garlic-bread.webp -public/images/gluten-free-baking.webp -public/images/greek-salad.webp -public/images/homemade-pizza.webp -public/images/icons-outline.webp -public/images/lemon-drizzle-cake.webp -public/images/low-carb-desserts.webp -public/images/margherita-pizza.webp -public/images/mastering-art-of-french-cooking.webp -public/images/meal-prepping.webp -public/images/mediterranean-cuisine.webp -public/images/pancakes.webp -public/images/plant-based-protein.webp -public/images/quinoa-stuffed-peppers.webp -public/images/ramen-noodles.webp -public/images/seasonal-salads.webp -public/images/shrimp-paella.webp -public/images/spaghetti-carbonara.webp -public/images/superfoods-you-should-include.webp -public/images/sushi-platter.webp -public/images/thai-green-curry.webp -public/images/tomato-soup.webp -public/images/vegan-burger.webp -public/images/vegan-desserts.webp -public/images/vegetable-stir-fry.webp -public/images/vegetarian-stir-fry.webp -public/images/week-night-dinners.webp diff --git a/suites/charts/dist/assets/chartjs-7fd89fd7.js.map b/suites/charts/dist/assets/chartjs-7fd89fd7.js.map deleted file mode 100644 index 4b6c4aed1..000000000 --- a/suites/charts/dist/assets/chartjs-7fd89fd7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"chartjs-7fd89fd7.js","sources":["../../node_modules/@kurkle/color/dist/color.esm.js","../../node_modules/chart.js/dist/chunks/helpers.segment.js","../../node_modules/chart.js/dist/chart.js","../../node_modules/chart.js/auto/auto.js","../../chartjs.js"],"sourcesContent":["/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.2.1\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for(i = 0, ilen = items.length; i < ilen; ++i){\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n function _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n function clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n function _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\n function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [\n ''\n], rootScopes = scopes, fallback, getTarget = ()=>scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, rootScopes, fallback)\n };\n return new Proxy(cache, {\n deleteProperty (target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\n function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty (target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n set (target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\n function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.2.1\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nexport { aL as Ticks, d as defaults } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const skipNull = (meta)=>{\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing'\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height1 = chartArea.h * weight;\n const width1 = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width1, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width1, height1);\n }\n stack.start = x;\n stack.placed += height1;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n active = false;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID1 = Object.keys(position)[0];\n const value1 = position[positionAxisID1];\n titleX = scales[positionAxisID1].getPixelForValue(value1) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID1 = Object.keys(position)[0];\n const value1 = position[positionAxisID1];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID1].getPixelForValue(value1));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret1 = this._getYAxisLabelAlignment(tl);\n textAlign = ret1.textAlign;\n x = ret1.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID1 = Object.keys(position)[0];\n const value1 = position[positionAxisID1];\n x = this.chart.scales[positionAxisID1].getPixelForValue(value1);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i1 = 0; i1 < local.length; i1++){\n const plugin = local[i1];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n id = scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.length > 1 && determineAxis(id[0].toLowerCase(), scaleOptions);\n if (id) {\n return id;\n }\n throw new Error(`Cannot determine type of '${name}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key)=>acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.2.1\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getDatasetArea(meta) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: xScale.left,\n right: xScale.right,\n top: yScale.top,\n bottom: yScale.bottom\n };\n }\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i1 = 0, ilen1 = this.data.datasets.length; i1 < ilen1; ++i1){\n this._updateDataset(i1, isFunction(mode) ? mode({\n datasetIndex: i1\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta) || this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter1 = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter1.x, pCenter1.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter2.x, pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter3.x, pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox1 of hitboxes){\n if (hitbox1.col !== col) {\n col = hitbox1.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox1.top = top;\n hitbox1.left += this.left + padding;\n hitbox1.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox1.left), hitbox1.width);\n top += hitbox1.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight);\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n ticks.push({\n value: Math.round((niceMin + j * spacing) * factor) / factor\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign , left , top , right , bottom } = scale._pointLabelItems[i];\n const { backdropColor } = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b)=>a - b).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","import Chart from \"chart.js/auto\";\nimport { csvParse } from \"d3-dsv\";\n\n// These 2 imports use some vite machinery to directly import these files as\n// strings. Then they are constants and this reduces the load on the GC.\nimport airportsString from \"./datasets/airports.csv?raw\";\nimport flightsString from \"./datasets/flights-airports.csv?raw\";\n\n/*\n * From https://www.omnicalculator.com/other/latitude-longitude-distance:\n * d = 2R × sin⁻¹(√[sin²((θ₂ - θ₁)/2) + cosθ₁ × cosθ₂ × sin²((φ₂ - φ₁)/2)])\n *\n * where:\n * θ₁, φ₁ – First point latitude and longitude coordinates;\n * θ₂, φ₂ – Second point latitude and longitude coordinates;\n * R – Earth's radius (R = 6371 km); and\n * d – Distance between them along Earth's surface.\n */\nconst R = 6371;\nfunction computeDistance(coords1, coords2) {\n const long1 = toRadian(coords1.longitude);\n const lat1 = toRadian(coords1.latitude);\n const long2 = toRadian(coords2.longitude);\n const lat2 = toRadian(coords2.latitude);\n const longSquareSin = Math.sin((long2 - long1) / 2) ** 2;\n const latSquareSin = Math.sin((lat2 - lat1) / 2) ** 2;\n const d = 2 * R * Math.asin(Math.sqrt(latSquareSin + Math.cos(lat1) * Math.cos(lat2) * longSquareSin));\n return d;\n}\n\nconst RAD = Math.PI / 180;\nfunction toRadian(deg) {\n return deg * RAD;\n}\n\nlet preparedData = null;\nfunction prepare() {\n /**\n * AirportInformation: { state, iata, name, city, country, latitude, longitude }\n * airports: Array\n * flights: Array<{ origin, destination, count }>\n */\n const airports = csvParse(airportsString);\n const flights = csvParse(flightsString);\n const airportMap = new Map(airports.map((airport) => [airport.iata, airport]));\n\n for (const flight of flights) {\n const origAirport = airportMap.get(flight.origin);\n const destAirport = airportMap.get(flight.destination);\n flight.distance = computeDistance(origAirport, destAirport);\n }\n\n preparedData = { flights, airportMap };\n}\n\nconst ROOT = document.getElementById(\"chart\");\nconst opaqueCheckBox = document.getElementById(\"opaque-color\");\n\nlet currentChart = null;\nfunction drawScattered(data) {\n if (!preparedData)\n throw new Error(\"Please prepare the data first.\");\n\n reset();\n\n currentChart = new Chart(ROOT, {\n type: \"scatter\",\n data: {\n datasets: [\n {\n data: preparedData.flights,\n backgroundColor: opaqueCheckBox.checked ? \"rgb(0, 125, 255)\" : \"rgba(0, 125, 255, .20)\",\n },\n ],\n },\n options: {\n animation: false,\n parsing: {\n xAxisKey: \"distance\",\n yAxisKey: \"count\",\n },\n plugins: {\n legend: {\n display: false,\n },\n title: {\n display: true,\n text: \"Number of flights for a distance\",\n position: \"bottom\",\n },\n tooltip: {\n displayColors: false,\n callbacks: {\n label: (item) => {\n const orig = preparedData.airportMap.get(item.raw.origin);\n const dest = preparedData.airportMap.get(item.raw.destination);\n const result = `✈ ${orig.name} (${orig.iata}) → ${dest.name} (${dest.iata}): ${Math.round(item.raw.distance)} km`;\n return result;\n },\n },\n },\n },\n scales: {\n x: {\n title: {\n text: \"distance →\",\n align: \"end\",\n display: true,\n },\n ticks: {\n format: {\n style: \"unit\",\n unit: \"kilometer\",\n },\n },\n },\n y: {\n type: \"logarithmic\",\n title: {\n text: \"# of flights →\",\n align: \"end\",\n display: true,\n },\n },\n },\n },\n });\n}\n\nfunction openTooltip() {\n if (!currentChart)\n throw new Error(\"No chart is present, please draw a chart first\");\n\n const renderedDataset = currentChart.getDatasetMeta(0);\n const node = currentChart.canvas;\n const rect = node.getBoundingClientRect();\n\n // Index 2426 is carefully chosen to display a lot of lines (which depends\n // on the zoom level).\n const point = renderedDataset.data[2426];\n const event = new MouseEvent(\"mousemove\", {\n clientX: rect.left + point.x,\n clientY: rect.top + point.y,\n cancelable: true,\n bubbles: true,\n });\n\n node.dispatchEvent(event);\n}\n\nfunction reset() {\n if (currentChart) {\n currentChart.destroy();\n currentChart = null;\n }\n}\n\nasync function runAllTheThings() {\n [\n // Force prettier to use a multiline formatting\n \"prepare\",\n \"add-scatter-chart-button\",\n \"open-tooltip\",\n ].forEach((id) => document.getElementById(id).click());\n}\n\ndocument.getElementById(\"prepare\").addEventListener(\"click\", prepare);\ndocument.getElementById(\"add-scatter-chart-button\").addEventListener(\"click\", drawScattered);\ndocument.getElementById(\"open-tooltip\").addEventListener(\"click\", openTooltip);\ndocument.getElementById(\"reset\").addEventListener(\"click\", reset);\ndocument.getElementById(\"run-all\").addEventListener(\"click\", runAllTheThings);\n\nif (import.meta.env.DEV)\n runAllTheThings();\n"],"names":["map","interpolate","clone","color","index","set","callback","defaults","name","_descriptors","resolve","descriptors","draw","from","to","scales","elements","names","reset","i","inRange","layouts","positions","validIndex","registry","plugins","listener","alpha","skip","fill","round"],"mappings":"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","x_google_ignoreList":[0,1,2,3]} \ No newline at end of file diff --git a/suites/charts/dist/assets/chartjs-7fd89fd7.js b/suites/charts/dist/assets/chartjs.js similarity index 99% rename from suites/charts/dist/assets/chartjs-7fd89fd7.js rename to suites/charts/dist/assets/chartjs.js index 83f3129f5..d0ebce6ce 100644 --- a/suites/charts/dist/assets/chartjs-7fd89fd7.js +++ b/suites/charts/dist/assets/chartjs.js @@ -4,7 +4,7 @@ var __publicField = (obj, key, value) => { __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); return value; }; -import { c as csvParse, a as airportsString, f as flightsString } from "./flights-airports-9a9e6422.js"; +import { c as csvParse, a as airportsString, f as flightsString } from "./flights-airports.js"; /*! * @kurkle/color v0.3.2 * https://github.com/kurkle/color#readme @@ -14245,4 +14245,4 @@ document.getElementById("add-scatter-chart-button").addEventListener("click", dr document.getElementById("open-tooltip").addEventListener("click", openTooltip); document.getElementById("reset").addEventListener("click", reset); document.getElementById("run-all").addEventListener("click", runAllTheThings); -//# sourceMappingURL=chartjs-7fd89fd7.js.map +//# sourceMappingURL=chartjs.js.map diff --git a/suites/charts/dist/assets/chartjs.js.map b/suites/charts/dist/assets/chartjs.js.map new file mode 100644 index 000000000..d8b52e502 --- /dev/null +++ b/suites/charts/dist/assets/chartjs.js.map @@ -0,0 +1 @@ +{"version":3,"file":"chartjs.js","sources":["../../node_modules/@kurkle/color/dist/color.esm.js","../../node_modules/chart.js/dist/chunks/helpers.segment.js","../../node_modules/chart.js/dist/chart.js","../../node_modules/chart.js/auto/auto.js","../../chartjs.js"],"sourcesContent":["/*!\n * @kurkle/color v0.3.2\n * https://github.com/kurkle/color#readme\n * (c) 2023 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n var len = str.length;\n var ret;\n if (str[0] === '#') {\n if (len === 4 || len === 5) {\n ret = {\n r: 255 & map$1[str[1]] * 17,\n g: 255 & map$1[str[2]] * 17,\n b: 255 & map$1[str[3]] * 17,\n a: len === 5 ? map$1[str[4]] * 17 : 255\n };\n } else if (len === 7 || len === 9) {\n ret = {\n r: map$1[str[1]] << 4 | map$1[str[2]],\n g: map$1[str[3]] << 4 | map$1[str[4]],\n b: map$1[str[5]] << 4 | map$1[str[6]],\n a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n };\n }\n }\n return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n var f = isShort(v) ? h1 : h2;\n return v\n ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n const a = s * Math.min(l, 1 - l);\n const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n const rgb = hsl2rgbn(h, 1, 0.5);\n let i;\n if (w + b > 1) {\n i = 1 / (w + b);\n w *= i;\n b *= i;\n }\n for (i = 0; i < 3; i++) {\n rgb[i] *= 1 - w - b;\n rgb[i] += w;\n }\n return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n if (r === max) {\n return ((g - b) / d) + (g < b ? 6 : 0);\n }\n if (g === max) {\n return (b - r) / d + 2;\n }\n return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n const range = 255;\n const r = v.r / range;\n const g = v.g / range;\n const b = v.b / range;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const l = (max + min) / 2;\n let h, s, d;\n if (max !== min) {\n d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n h = hueValue(r, g, b, d, max);\n h = h * 60 + 0.5;\n }\n return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n return (\n Array.isArray(a)\n ? f(a[0], a[1], a[2])\n : f(a, b, c)\n ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n const m = HUE_RE.exec(str);\n let a = 255;\n let v;\n if (!m) {\n return;\n }\n if (m[5] !== v) {\n a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n }\n const h = hue(+m[2]);\n const p1 = +m[3] / 100;\n const p2 = +m[4] / 100;\n if (m[1] === 'hwb') {\n v = hwb2rgb(h, p1, p2);\n } else if (m[1] === 'hsv') {\n v = hsv2rgb(h, p1, p2);\n } else {\n v = hsl2rgb(h, p1, p2);\n }\n return {\n r: v[0],\n g: v[1],\n b: v[2],\n a: a\n };\n}\nfunction rotate(v, deg) {\n var h = rgb2hsl(v);\n h[0] = hue(h[0] + deg);\n h = hsl2rgb(h);\n v.r = h[0];\n v.g = h[1];\n v.b = h[2];\n}\nfunction hslString(v) {\n if (!v) {\n return;\n }\n const a = rgb2hsl(v);\n const h = a[0];\n const s = n2p(a[1]);\n const l = n2p(a[2]);\n return v.a < 255\n ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n x: 'dark',\n Z: 'light',\n Y: 're',\n X: 'blu',\n W: 'gr',\n V: 'medium',\n U: 'slate',\n A: 'ee',\n T: 'ol',\n S: 'or',\n B: 'ra',\n C: 'lateg',\n D: 'ights',\n R: 'in',\n Q: 'turquois',\n E: 'hi',\n P: 'ro',\n O: 'al',\n N: 'le',\n M: 'de',\n L: 'yello',\n F: 'en',\n K: 'ch',\n G: 'arks',\n H: 'ea',\n I: 'ightg',\n J: 'wh'\n};\nconst names$1 = {\n OiceXe: 'f0f8ff',\n antiquewEte: 'faebd7',\n aqua: 'ffff',\n aquamarRe: '7fffd4',\n azuY: 'f0ffff',\n beige: 'f5f5dc',\n bisque: 'ffe4c4',\n black: '0',\n blanKedOmond: 'ffebcd',\n Xe: 'ff',\n XeviTet: '8a2be2',\n bPwn: 'a52a2a',\n burlywood: 'deb887',\n caMtXe: '5f9ea0',\n KartYuse: '7fff00',\n KocTate: 'd2691e',\n cSO: 'ff7f50',\n cSnflowerXe: '6495ed',\n cSnsilk: 'fff8dc',\n crimson: 'dc143c',\n cyan: 'ffff',\n xXe: '8b',\n xcyan: '8b8b',\n xgTMnPd: 'b8860b',\n xWay: 'a9a9a9',\n xgYF: '6400',\n xgYy: 'a9a9a9',\n xkhaki: 'bdb76b',\n xmagFta: '8b008b',\n xTivegYF: '556b2f',\n xSange: 'ff8c00',\n xScEd: '9932cc',\n xYd: '8b0000',\n xsOmon: 'e9967a',\n xsHgYF: '8fbc8f',\n xUXe: '483d8b',\n xUWay: '2f4f4f',\n xUgYy: '2f4f4f',\n xQe: 'ced1',\n xviTet: '9400d3',\n dAppRk: 'ff1493',\n dApskyXe: 'bfff',\n dimWay: '696969',\n dimgYy: '696969',\n dodgerXe: '1e90ff',\n fiYbrick: 'b22222',\n flSOwEte: 'fffaf0',\n foYstWAn: '228b22',\n fuKsia: 'ff00ff',\n gaRsbSo: 'dcdcdc',\n ghostwEte: 'f8f8ff',\n gTd: 'ffd700',\n gTMnPd: 'daa520',\n Way: '808080',\n gYF: '8000',\n gYFLw: 'adff2f',\n gYy: '808080',\n honeyMw: 'f0fff0',\n hotpRk: 'ff69b4',\n RdianYd: 'cd5c5c',\n Rdigo: '4b0082',\n ivSy: 'fffff0',\n khaki: 'f0e68c',\n lavFMr: 'e6e6fa',\n lavFMrXsh: 'fff0f5',\n lawngYF: '7cfc00',\n NmoncEffon: 'fffacd',\n ZXe: 'add8e6',\n ZcSO: 'f08080',\n Zcyan: 'e0ffff',\n ZgTMnPdLw: 'fafad2',\n ZWay: 'd3d3d3',\n ZgYF: '90ee90',\n ZgYy: 'd3d3d3',\n ZpRk: 'ffb6c1',\n ZsOmon: 'ffa07a',\n ZsHgYF: '20b2aa',\n ZskyXe: '87cefa',\n ZUWay: '778899',\n ZUgYy: '778899',\n ZstAlXe: 'b0c4de',\n ZLw: 'ffffe0',\n lime: 'ff00',\n limegYF: '32cd32',\n lRF: 'faf0e6',\n magFta: 'ff00ff',\n maPon: '800000',\n VaquamarRe: '66cdaa',\n VXe: 'cd',\n VScEd: 'ba55d3',\n VpurpN: '9370db',\n VsHgYF: '3cb371',\n VUXe: '7b68ee',\n VsprRggYF: 'fa9a',\n VQe: '48d1cc',\n VviTetYd: 'c71585',\n midnightXe: '191970',\n mRtcYam: 'f5fffa',\n mistyPse: 'ffe4e1',\n moccasR: 'ffe4b5',\n navajowEte: 'ffdead',\n navy: '80',\n Tdlace: 'fdf5e6',\n Tive: '808000',\n TivedBb: '6b8e23',\n Sange: 'ffa500',\n SangeYd: 'ff4500',\n ScEd: 'da70d6',\n pOegTMnPd: 'eee8aa',\n pOegYF: '98fb98',\n pOeQe: 'afeeee',\n pOeviTetYd: 'db7093',\n papayawEp: 'ffefd5',\n pHKpuff: 'ffdab9',\n peru: 'cd853f',\n pRk: 'ffc0cb',\n plum: 'dda0dd',\n powMrXe: 'b0e0e6',\n purpN: '800080',\n YbeccapurpN: '663399',\n Yd: 'ff0000',\n Psybrown: 'bc8f8f',\n PyOXe: '4169e1',\n saddNbPwn: '8b4513',\n sOmon: 'fa8072',\n sandybPwn: 'f4a460',\n sHgYF: '2e8b57',\n sHshell: 'fff5ee',\n siFna: 'a0522d',\n silver: 'c0c0c0',\n skyXe: '87ceeb',\n UXe: '6a5acd',\n UWay: '708090',\n UgYy: '708090',\n snow: 'fffafa',\n sprRggYF: 'ff7f',\n stAlXe: '4682b4',\n tan: 'd2b48c',\n teO: '8080',\n tEstN: 'd8bfd8',\n tomato: 'ff6347',\n Qe: '40e0d0',\n viTet: 'ee82ee',\n JHt: 'f5deb3',\n wEte: 'ffffff',\n wEtesmoke: 'f5f5f5',\n Lw: 'ffff00',\n LwgYF: '9acd32'\n};\nfunction unpack() {\n const unpacked = {};\n const keys = Object.keys(names$1);\n const tkeys = Object.keys(map);\n let i, j, k, ok, nk;\n for (i = 0; i < keys.length; i++) {\n ok = nk = keys[i];\n for (j = 0; j < tkeys.length; j++) {\n k = tkeys[j];\n nk = nk.replace(k, map[k]);\n }\n k = parseInt(names$1[ok], 16);\n unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n }\n return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n if (!names) {\n names = unpack();\n names.transparent = [0, 0, 0, 0];\n }\n const a = names[str.toLowerCase()];\n return a && {\n r: a[0],\n g: a[1],\n b: a[2],\n a: a.length === 4 ? a[3] : 255\n };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n const m = RGB_RE.exec(str);\n let a = 255;\n let r, g, b;\n if (!m) {\n return;\n }\n if (m[7] !== r) {\n const v = +m[7];\n a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n }\n r = +m[1];\n g = +m[3];\n b = +m[5];\n r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n return {\n r: r,\n g: g,\n b: b,\n a: a\n };\n}\nfunction rgbString(v) {\n return v && (\n v.a < 255\n ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n : `rgb(${v.r}, ${v.g}, ${v.b})`\n );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n const r = from(b2n(rgb1.r));\n const g = from(b2n(rgb1.g));\n const b = from(b2n(rgb1.b));\n return {\n r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n a: rgb1.a + t * (rgb2.a - rgb1.a)\n };\n}\n\nfunction modHSL(v, i, ratio) {\n if (v) {\n let tmp = rgb2hsl(v);\n tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n tmp = hsl2rgb(tmp);\n v.r = tmp[0];\n v.g = tmp[1];\n v.b = tmp[2];\n }\n}\nfunction clone(v, proto) {\n return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n var v = {r: 0, g: 0, b: 0, a: 255};\n if (Array.isArray(input)) {\n if (input.length >= 3) {\n v = {r: input[0], g: input[1], b: input[2], a: 255};\n if (input.length > 3) {\n v.a = n2b(input[3]);\n }\n }\n } else {\n v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n v.a = n2b(v.a);\n }\n return v;\n}\nfunction functionParse(str) {\n if (str.charAt(0) === 'r') {\n return rgbParse(str);\n }\n return hueParse(str);\n}\nclass Color {\n constructor(input) {\n if (input instanceof Color) {\n return input;\n }\n const type = typeof input;\n let v;\n if (type === 'object') {\n v = fromObject(input);\n } else if (type === 'string') {\n v = hexParse(input) || nameParse(input) || functionParse(input);\n }\n this._rgb = v;\n this._valid = !!v;\n }\n get valid() {\n return this._valid;\n }\n get rgb() {\n var v = clone(this._rgb);\n if (v) {\n v.a = b2n(v.a);\n }\n return v;\n }\n set rgb(obj) {\n this._rgb = fromObject(obj);\n }\n rgbString() {\n return this._valid ? rgbString(this._rgb) : undefined;\n }\n hexString() {\n return this._valid ? hexString(this._rgb) : undefined;\n }\n hslString() {\n return this._valid ? hslString(this._rgb) : undefined;\n }\n mix(color, weight) {\n if (color) {\n const c1 = this.rgb;\n const c2 = color.rgb;\n let w2;\n const p = weight === w2 ? 0.5 : weight;\n const w = 2 * p - 1;\n const a = c1.a - c2.a;\n const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n w2 = 1 - w1;\n c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n c1.a = p * c1.a + (1 - p) * c2.a;\n this.rgb = c1;\n }\n return this;\n }\n interpolate(color, t) {\n if (color) {\n this._rgb = interpolate(this._rgb, color._rgb, t);\n }\n return this;\n }\n clone() {\n return new Color(this.rgb);\n }\n alpha(a) {\n this._rgb.a = n2b(a);\n return this;\n }\n clearer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 - ratio;\n return this;\n }\n greyscale() {\n const rgb = this._rgb;\n const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n rgb.r = rgb.g = rgb.b = val;\n return this;\n }\n opaquer(ratio) {\n const rgb = this._rgb;\n rgb.a *= 1 + ratio;\n return this;\n }\n negate() {\n const v = this._rgb;\n v.r = 255 - v.r;\n v.g = 255 - v.g;\n v.b = 255 - v.b;\n return this;\n }\n lighten(ratio) {\n modHSL(this._rgb, 2, ratio);\n return this;\n }\n darken(ratio) {\n modHSL(this._rgb, 2, -ratio);\n return this;\n }\n saturate(ratio) {\n modHSL(this._rgb, 1, ratio);\n return this;\n }\n desaturate(ratio) {\n modHSL(this._rgb, 1, -ratio);\n return this;\n }\n rotate(deg) {\n rotate(this._rgb, deg);\n return this;\n }\n}\n\nfunction index_esm(input) {\n return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","/*!\n * Chart.js v4.2.1\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n let id = 0;\n return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n return value === null || typeof value === 'undefined';\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n if (Array.isArray && Array.isArray(value)) {\n return true;\n }\n const type = Object.prototype.toString.call(value);\n if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n return true;\n }\n return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value - The value to test.\n */ function isNumberFinite(value) {\n return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n if (fn && typeof fn.call === 'function') {\n return fn.apply(thisArg, args);\n }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n let i, len, keys;\n if (isArray(loopable)) {\n len = loopable.length;\n if (reverse) {\n for(i = len - 1; i >= 0; i--){\n fn.call(thisArg, loopable[i], i);\n }\n } else {\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[i], i);\n }\n }\n } else if (isObject(loopable)) {\n keys = Object.keys(loopable);\n len = keys.length;\n for(i = 0; i < len; i++){\n fn.call(thisArg, loopable[keys[i]], keys[i]);\n }\n }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n let i, ilen, v0, v1;\n if (!a0 || !a1 || a0.length !== a1.length) {\n return false;\n }\n for(i = 0, ilen = a0.length; i < ilen; ++i){\n v0 = a0[i];\n v1 = a1[i];\n if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n return false;\n }\n }\n return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n if (isArray(source)) {\n return source.map(clone);\n }\n if (isObject(source)) {\n const target = Object.create(null);\n const keys = Object.keys(source);\n const klen = keys.length;\n let k = 0;\n for(; k < klen; ++k){\n target[keys[k]] = clone(source[keys[k]]);\n }\n return target;\n }\n return source;\n}\nfunction isValidKey(key) {\n return [\n '__proto__',\n 'prototype',\n 'constructor'\n ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n merge(tval, sval, options);\n } else {\n target[key] = clone(sval);\n }\n}\nfunction merge(target, source, options) {\n const sources = isArray(source) ? source : [\n source\n ];\n const ilen = sources.length;\n if (!isObject(target)) {\n return target;\n }\n options = options || {};\n const merger = options.merger || _merger;\n let current;\n for(let i = 0; i < ilen; ++i){\n current = sources[i];\n if (!isObject(current)) {\n continue;\n }\n const keys = Object.keys(current);\n for(let k = 0, klen = keys.length; k < klen; ++k){\n merger(keys[k], target, current, options);\n }\n }\n return target;\n}\nfunction mergeIf(target, source) {\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n return merge(target, source, {\n merger: _mergerIf\n });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n if (!isValidKey(key)) {\n return;\n }\n const tval = target[key];\n const sval = source[key];\n if (isObject(tval) && isObject(sval)) {\n mergeIf(tval, sval);\n } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n target[key] = clone(sval);\n }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n if (value !== undefined) {\n console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n '': (v)=>v,\n // default resolvers\n x: (o)=>o.x,\n y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n const parts = key.split('.');\n const keys = [];\n let tmp = '';\n for (const part of parts){\n tmp += part;\n if (tmp.endsWith('\\\\')) {\n tmp = tmp.slice(0, -1) + '.';\n } else {\n keys.push(tmp);\n tmp = '';\n }\n }\n return keys;\n}\nfunction _getKeyResolver(key) {\n const keys = _splitKey(key);\n return (obj)=>{\n for (const k of keys){\n if (k === '') {\n break;\n }\n obj = obj && obj[k];\n }\n return obj;\n };\n}\nfunction resolveObjectKey(obj, key) {\n const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n if (a.size !== b.size) {\n return false;\n }\n for (const item of a){\n if (!b.has(item)) {\n return false;\n }\n }\n return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n const roundedRange = Math.round(range);\n range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n const niceRange = Math.pow(10, Math.floor(log10(range)));\n const fraction = range / niceRange;\n const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n const result = [];\n const sqrt = Math.sqrt(value);\n let i;\n for(i = 1; i < sqrt; i++){\n if (value % i === 0) {\n result.push(i);\n result.push(value / i);\n }\n }\n if (sqrt === (sqrt | 0)) {\n result.push(sqrt);\n }\n result.sort((a, b)=>a - b).pop();\n return result;\n}\nfunction isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n const rounded = Math.round(x);\n return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n let i, ilen, value;\n for(i = 0, ilen = array.length; i < ilen; i++){\n value = array[i][property];\n if (!isNaN(value)) {\n target.min = Math.min(target.min, value);\n target.max = Math.max(target.max, value);\n }\n }\n}\nfunction toRadians(degrees) {\n return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n if (!isNumberFinite(x)) {\n return;\n }\n let e = 1;\n let p = 0;\n while(Math.round(x * e) / e !== x){\n e *= 10;\n p++;\n }\n return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n const distanceFromXCenter = anglePoint.x - centrePoint.x;\n const distanceFromYCenter = anglePoint.y - centrePoint.y;\n const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n if (angle < -0.5 * PI) {\n angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n }\n return {\n angle,\n distance: radialDistanceFromCenter\n };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n const a = _normalizeAngle(angle);\n const s = _normalizeAngle(start);\n const e = _normalizeAngle(end);\n const angleToStart = _normalizeAngle(s - a);\n const angleToEnd = _normalizeAngle(e - a);\n const startToAngle = _normalizeAngle(a - s);\n const endToAngle = _normalizeAngle(a - e);\n return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n cmp = cmp || ((index)=>table[index] < value);\n let hi = table.length - 1;\n let lo = 0;\n let mid;\n while(hi - lo > 1){\n mid = lo + hi >> 1;\n if (cmp(mid)) {\n lo = mid;\n } else {\n hi = mid;\n }\n }\n return {\n lo,\n hi\n };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n const ti = table[index][key];\n return ti < value || ti === value && table[index + 1][key] === value;\n } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n let start = 0;\n let end = values.length;\n while(start < end && values[start] < min){\n start++;\n }\n while(end > start && values[end - 1] > max){\n end--;\n }\n return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n 'push',\n 'pop',\n 'shift',\n 'splice',\n 'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n if (array._chartjs) {\n array._chartjs.listeners.push(listener);\n return;\n }\n Object.defineProperty(array, '_chartjs', {\n configurable: true,\n enumerable: false,\n value: {\n listeners: [\n listener\n ]\n }\n });\n arrayEvents.forEach((key)=>{\n const method = '_onData' + _capitalize(key);\n const base = array[key];\n Object.defineProperty(array, key, {\n configurable: true,\n enumerable: false,\n value (...args) {\n const res = base.apply(this, args);\n array._chartjs.listeners.forEach((object)=>{\n if (typeof object[method] === 'function') {\n object[method](...args);\n }\n });\n return res;\n }\n });\n });\n}\nfunction unlistenArrayEvents(array, listener) {\n const stub = array._chartjs;\n if (!stub) {\n return;\n }\n const listeners = stub.listeners;\n const index = listeners.indexOf(listener);\n if (index !== -1) {\n listeners.splice(index, 1);\n }\n if (listeners.length > 0) {\n return;\n }\n arrayEvents.forEach((key)=>{\n delete array[key];\n });\n delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n const set = new Set();\n let i, ilen;\n for(i = 0, ilen = items.length; i < ilen; ++i){\n set.add(items[i]);\n }\n if (set.size === ilen) {\n return items;\n }\n return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n if (typeof window === 'undefined') {\n return function(callback) {\n return callback();\n };\n }\n return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n let argsToUse = [];\n let ticking = false;\n return function(...args) {\n // Save the args for use later\n argsToUse = args;\n if (!ticking) {\n ticking = true;\n requestAnimFrame.call(window, ()=>{\n ticking = false;\n fn.apply(thisArg, argsToUse);\n });\n }\n };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n let timeout;\n return function(...args) {\n if (delay) {\n clearTimeout(timeout);\n timeout = setTimeout(fn, delay, args);\n } else {\n fn.apply(this, args);\n }\n return delay;\n };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n const check = rtl ? 'left' : 'right';\n return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n const pointCount = points.length;\n let start = 0;\n let count = pointCount;\n if (meta._sorted) {\n const { iScale , _parsed } = meta;\n const axis = iScale.axis;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(Math.min(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo), 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(Math.max(// @ts-expect-error Need to type _parsed\n _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1), start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n }\n return {\n start,\n count\n };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n const { xScale , yScale , _scaleRanges } = meta;\n const newRanges = {\n xmin: xScale.min,\n xmax: xScale.max,\n ymin: yScale.min,\n ymax: yScale.max\n };\n if (!_scaleRanges) {\n meta._scaleRanges = newRanges;\n return true;\n }\n const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n Object.assign(_scaleRanges, newRanges);\n return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n linear: (t)=>t,\n easeInQuad: (t)=>t * t,\n easeOutQuad: (t)=>-t * (t - 2),\n easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n easeInCubic: (t)=>t * t * t,\n easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n easeInQuart: (t)=>t * t * t * t,\n easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n easeInQuint: (t)=>t * t * t * t * t,\n easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n easeOutSine: (t)=>Math.sin(t * HALF_PI),\n easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n easeInOutElastic (t) {\n const s = 0.1125;\n const p = 0.45;\n return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n },\n easeInBack (t) {\n const s = 1.70158;\n return t * t * ((s + 1) * t - s);\n },\n easeOutBack (t) {\n const s = 1.70158;\n return (t -= 1) * t * ((s + 1) * t + s) + 1;\n },\n easeInOutBack (t) {\n let s = 1.70158;\n if ((t /= 0.5) < 1) {\n return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n }\n return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n },\n easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n easeOutBounce (t) {\n const m = 7.5625;\n const d = 2.75;\n if (t < 1 / d) {\n return m * t * t;\n }\n if (t < 2 / d) {\n return m * (t -= 1.5 / d) * t + 0.75;\n }\n if (t < 2.5 / d) {\n return m * (t -= 2.25 / d) * t + 0.9375;\n }\n return m * (t -= 2.625 / d) * t + 0.984375;\n },\n easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n if (value && typeof value === 'object') {\n const type = value.toString();\n return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n }\n return false;\n}\nfunction color(value) {\n return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n 'x',\n 'y',\n 'borderWidth',\n 'radius',\n 'tension'\n];\nconst colors = [\n 'color',\n 'borderColor',\n 'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n defaults.set('animation', {\n delay: undefined,\n duration: 1000,\n easing: 'easeOutQuart',\n fn: undefined,\n from: undefined,\n loop: undefined,\n to: undefined,\n type: undefined\n });\n defaults.describe('animation', {\n _fallback: false,\n _indexable: false,\n _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n });\n defaults.set('animations', {\n colors: {\n type: 'color',\n properties: colors\n },\n numbers: {\n type: 'number',\n properties: numbers\n }\n });\n defaults.describe('animations', {\n _fallback: 'animation'\n });\n defaults.set('transitions', {\n active: {\n animation: {\n duration: 400\n }\n },\n resize: {\n animation: {\n duration: 0\n }\n },\n show: {\n animations: {\n colors: {\n from: 'transparent'\n },\n visible: {\n type: 'boolean',\n duration: 0\n }\n }\n },\n hide: {\n animations: {\n colors: {\n to: 'transparent'\n },\n visible: {\n type: 'boolean',\n easing: 'linear',\n fn: (v)=>v | 0\n }\n }\n }\n });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n defaults.set('layout', {\n autoPadding: true,\n padding: {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n }\n });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n options = options || {};\n const cacheKey = locale + JSON.stringify(options);\n let formatter = intlCache.get(cacheKey);\n if (!formatter) {\n formatter = new Intl.NumberFormat(locale, options);\n intlCache.set(cacheKey, formatter);\n }\n return formatter;\n}\nfunction formatNumber(num, locale, options) {\n return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n return isArray(value) ? value : '' + value;\n },\n numeric (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const locale = this.chart.options.locale;\n let notation;\n let delta = tickValue;\n if (ticks.length > 1) {\n const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n if (maxTick < 1e-4 || maxTick > 1e+15) {\n notation = 'scientific';\n }\n delta = calculateDelta(tickValue, ticks);\n }\n const logDelta = log10(Math.abs(delta));\n const numDecimal = Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n const options = {\n notation,\n minimumFractionDigits: numDecimal,\n maximumFractionDigits: numDecimal\n };\n Object.assign(options, this.options.ticks.format);\n return formatNumber(tickValue, locale, options);\n },\n logarithmic (tickValue, index, ticks) {\n if (tickValue === 0) {\n return '0';\n }\n const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n if ([\n 1,\n 2,\n 3,\n 5,\n 10,\n 15\n ].includes(remain) || index > 0.8 * ticks.length) {\n return formatters.numeric.call(this, tickValue, index, ticks);\n }\n return '';\n }\n};\nfunction calculateDelta(tickValue, ticks) {\n let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n delta = tickValue - Math.floor(tickValue);\n }\n return delta;\n}\n var Ticks = {\n formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n defaults.set('scale', {\n display: true,\n offset: false,\n reverse: false,\n beginAtZero: false,\n bounds: 'ticks',\n grace: 0,\n grid: {\n display: true,\n lineWidth: 1,\n drawOnChartArea: true,\n drawTicks: true,\n tickLength: 8,\n tickWidth: (_ctx, options)=>options.lineWidth,\n tickColor: (_ctx, options)=>options.color,\n offset: false\n },\n border: {\n display: true,\n dash: [],\n dashOffset: 0.0,\n width: 1\n },\n title: {\n display: false,\n text: '',\n padding: {\n top: 4,\n bottom: 4\n }\n },\n ticks: {\n minRotation: 0,\n maxRotation: 50,\n mirror: false,\n textStrokeWidth: 0,\n textStrokeColor: '',\n padding: 3,\n display: true,\n autoSkip: true,\n autoSkipPadding: 3,\n labelOffset: 0,\n callback: Ticks.formatters.values,\n minor: {},\n major: {},\n align: 'center',\n crossAlign: 'near',\n showLabelBackdrop: false,\n backdropColor: 'rgba(255, 255, 255, 0.75)',\n backdropPadding: 2\n }\n });\n defaults.route('scale.ticks', 'color', '', 'color');\n defaults.route('scale.grid', 'color', '', 'borderColor');\n defaults.route('scale.border', 'color', '', 'borderColor');\n defaults.route('scale.title', 'color', '', 'color');\n defaults.describe('scale', {\n _fallback: false,\n _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n });\n defaults.describe('scales', {\n _fallback: 'scale'\n });\n defaults.describe('scale.ticks', {\n _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n _indexable: (name)=>name !== 'backdropPadding'\n });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n if (!key) {\n return node;\n }\n const keys = key.split('.');\n for(let i = 0, n = keys.length; i < n; ++i){\n const k = keys[i];\n node = node[k] || (node[k] = Object.create(null));\n }\n return node;\n}\nfunction set(root, scope, values) {\n if (typeof scope === 'string') {\n return merge(getScope$1(root, scope), values);\n }\n return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n constructor(_descriptors, _appliers){\n this.animation = undefined;\n this.backgroundColor = 'rgba(0,0,0,0.1)';\n this.borderColor = 'rgba(0,0,0,0.1)';\n this.color = '#666';\n this.datasets = {};\n this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n this.elements = {};\n this.events = [\n 'mousemove',\n 'mouseout',\n 'click',\n 'touchstart',\n 'touchmove'\n ];\n this.font = {\n family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n size: 12,\n style: 'normal',\n lineHeight: 1.2,\n weight: null\n };\n this.hover = {};\n this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n this.indexAxis = 'x';\n this.interaction = {\n mode: 'nearest',\n intersect: true,\n includeInvisible: false\n };\n this.maintainAspectRatio = true;\n this.onHover = null;\n this.onClick = null;\n this.parsing = true;\n this.plugins = {};\n this.responsive = true;\n this.scale = undefined;\n this.scales = {};\n this.showLine = true;\n this.drawActiveElementsOnTop = true;\n this.describe(_descriptors);\n this.apply(_appliers);\n }\n set(scope, values) {\n return set(this, scope, values);\n }\n get(scope) {\n return getScope$1(this, scope);\n }\n describe(scope, values) {\n return set(descriptors, scope, values);\n }\n override(scope, values) {\n return set(overrides, scope, values);\n }\n route(scope, name, targetScope, targetName) {\n const scopeObject = getScope$1(this, scope);\n const targetScopeObject = getScope$1(this, targetScope);\n const privateName = '_' + name;\n Object.defineProperties(scopeObject, {\n [privateName]: {\n value: scopeObject[name],\n writable: true\n },\n [name]: {\n enumerable: true,\n get () {\n const local = this[privateName];\n const target = targetScopeObject[targetName];\n if (isObject(local)) {\n return Object.assign({}, target, local);\n }\n return valueOrDefault(local, target);\n },\n set (value) {\n this[privateName] = value;\n }\n }\n });\n }\n apply(appliers) {\n appliers.forEach((apply)=>apply(this));\n }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n _scriptable: (name)=>!name.startsWith('on'),\n _indexable: (name)=>name !== 'events',\n hover: {\n _fallback: 'interaction'\n },\n interaction: {\n _scriptable: false,\n _indexable: false\n }\n}, [\n applyAnimationsDefaults,\n applyLayoutsDefaults,\n applyScaleDefaults\n]);\n\nfunction toFontString(font) {\n if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n return null;\n }\n return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n function _measureText(ctx, data, gc, longest, string) {\n let textWidth = data[string];\n if (!textWidth) {\n textWidth = data[string] = ctx.measureText(string).width;\n gc.push(string);\n }\n if (textWidth > longest) {\n longest = textWidth;\n }\n return longest;\n}\n function _longestText(ctx, font, arrayOfThings, cache) {\n cache = cache || {};\n let data = cache.data = cache.data || {};\n let gc = cache.garbageCollect = cache.garbageCollect || [];\n if (cache.font !== font) {\n data = cache.data = {};\n gc = cache.garbageCollect = [];\n cache.font = font;\n }\n ctx.save();\n ctx.font = font;\n let longest = 0;\n const ilen = arrayOfThings.length;\n let i, j, jlen, thing, nestedThing;\n for(i = 0; i < ilen; i++){\n thing = arrayOfThings[i];\n if (thing !== undefined && thing !== null && isArray(thing) !== true) {\n longest = _measureText(ctx, data, gc, longest, thing);\n } else if (isArray(thing)) {\n for(j = 0, jlen = thing.length; j < jlen; j++){\n nestedThing = thing[j];\n if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n longest = _measureText(ctx, data, gc, longest, nestedThing);\n }\n }\n }\n }\n ctx.restore();\n const gcLen = gc.length / 2;\n if (gcLen > arrayOfThings.length) {\n for(i = 0; i < gcLen; i++){\n delete data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n return longest;\n}\n function _alignPixel(chart, pixel, width) {\n const devicePixelRatio = chart.currentDevicePixelRatio;\n const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n function clearCanvas(canvas, ctx) {\n ctx = ctx || canvas.getContext('2d');\n ctx.save();\n ctx.resetTransform();\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n drawPointLegend(ctx, options, x, y, null);\n}\nfunction drawPointLegend(ctx, options, x, y, w) {\n let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n const style = options.pointStyle;\n const rotation = options.rotation;\n const radius = options.radius;\n let rad = (rotation || 0) * RAD_PER_DEG;\n if (style && typeof style === 'object') {\n type = style.toString();\n if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n ctx.save();\n ctx.translate(x, y);\n ctx.rotate(rad);\n ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n ctx.restore();\n return;\n }\n }\n if (isNaN(radius) || radius <= 0) {\n return;\n }\n ctx.beginPath();\n switch(style){\n default:\n if (w) {\n ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n } else {\n ctx.arc(x, y, radius, 0, TAU);\n }\n ctx.closePath();\n break;\n case 'triangle':\n width = w ? w / 2 : radius;\n ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n rad += TWO_THIRDS_PI;\n ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n ctx.closePath();\n break;\n case 'rectRounded':\n cornerRadius = radius * 0.516;\n size = radius - cornerRadius;\n xOffset = Math.cos(rad + QUARTER_PI) * size;\n xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n yOffset = Math.sin(rad + QUARTER_PI) * size;\n yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n ctx.closePath();\n break;\n case 'rect':\n if (!rotation) {\n size = Math.SQRT1_2 * radius;\n width = w ? w / 2 : size;\n ctx.rect(x - width, y - size, 2 * width, 2 * size);\n break;\n }\n rad += QUARTER_PI;\n case 'rectRot':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n ctx.closePath();\n break;\n case 'crossRot':\n rad += QUARTER_PI;\n case 'cross':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'star':\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n rad += QUARTER_PI;\n xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n xOffset = Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n ctx.moveTo(x - xOffsetW, y - yOffset);\n ctx.lineTo(x + xOffsetW, y + yOffset);\n ctx.moveTo(x + yOffsetW, y - xOffset);\n ctx.lineTo(x - yOffsetW, y + xOffset);\n break;\n case 'line':\n xOffset = w ? w / 2 : Math.cos(rad) * radius;\n yOffset = Math.sin(rad) * radius;\n ctx.moveTo(x - xOffset, y - yOffset);\n ctx.lineTo(x + xOffset, y + yOffset);\n break;\n case 'dash':\n ctx.moveTo(x, y);\n ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n break;\n case false:\n ctx.closePath();\n break;\n }\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n}\n function _isPointInArea(point, area, margin) {\n margin = margin || 0.5;\n return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n ctx.save();\n ctx.beginPath();\n ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n ctx.clip();\n}\nfunction unclipArea(ctx) {\n ctx.restore();\n}\n function _steppedLineTo(ctx, previous, target, flip, mode) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n if (mode === 'middle') {\n const midpoint = (previous.x + target.x) / 2.0;\n ctx.lineTo(midpoint, previous.y);\n ctx.lineTo(midpoint, target.y);\n } else if (mode === 'after' !== !!flip) {\n ctx.lineTo(previous.x, target.y);\n } else {\n ctx.lineTo(target.x, previous.y);\n }\n ctx.lineTo(target.x, target.y);\n}\n function _bezierCurveTo(ctx, previous, target, flip) {\n if (!previous) {\n return ctx.lineTo(target.x, target.y);\n }\n ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\n function renderText(ctx, text, x, y, font, opts = {}) {\n const lines = isArray(text) ? text : [\n text\n ];\n const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n let i, line;\n ctx.save();\n ctx.font = font.string;\n setRenderOpts(ctx, opts);\n for(i = 0; i < lines.length; ++i){\n line = lines[i];\n if (opts.backdrop) {\n drawBackdrop(ctx, opts.backdrop);\n }\n if (stroke) {\n if (opts.strokeColor) {\n ctx.strokeStyle = opts.strokeColor;\n }\n if (!isNullOrUndef(opts.strokeWidth)) {\n ctx.lineWidth = opts.strokeWidth;\n }\n ctx.strokeText(line, x, y, opts.maxWidth);\n }\n ctx.fillText(line, x, y, opts.maxWidth);\n decorateText(ctx, x, y, line, opts);\n y += font.lineHeight;\n }\n ctx.restore();\n}\nfunction setRenderOpts(ctx, opts) {\n if (opts.translation) {\n ctx.translate(opts.translation[0], opts.translation[1]);\n }\n if (!isNullOrUndef(opts.rotation)) {\n ctx.rotate(opts.rotation);\n }\n if (opts.color) {\n ctx.fillStyle = opts.color;\n }\n if (opts.textAlign) {\n ctx.textAlign = opts.textAlign;\n }\n if (opts.textBaseline) {\n ctx.textBaseline = opts.textBaseline;\n }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n if (opts.strikethrough || opts.underline) {\n const metrics = ctx.measureText(line);\n const left = x - metrics.actualBoundingBoxLeft;\n const right = x + metrics.actualBoundingBoxRight;\n const top = y - metrics.actualBoundingBoxAscent;\n const bottom = y + metrics.actualBoundingBoxDescent;\n const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n ctx.strokeStyle = ctx.fillStyle;\n ctx.beginPath();\n ctx.lineWidth = opts.decorationWidth || 2;\n ctx.moveTo(left, yDecoration);\n ctx.lineTo(right, yDecoration);\n ctx.stroke();\n }\n}\nfunction drawBackdrop(ctx, opts) {\n const oldColor = ctx.fillStyle;\n ctx.fillStyle = opts.color;\n ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n ctx.fillStyle = oldColor;\n}\n function addRoundedRectPath(ctx, rect) {\n const { x , y , w , h , radius } = rect;\n ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, -HALF_PI, PI, true);\n ctx.lineTo(x, y + h - radius.bottomLeft);\n ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n ctx.lineTo(x + w - radius.bottomRight, y + h);\n ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n ctx.lineTo(x + w, y + radius.topRight);\n ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n const matches = ('' + value).match(LINE_HEIGHT);\n if (!matches || matches[1] === 'normal') {\n return size * 1.2;\n }\n value = +matches[2];\n switch(matches[3]){\n case 'px':\n return value;\n case '%':\n value /= 100;\n break;\n }\n return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n const ret = {};\n const objProps = isObject(props);\n const keys = objProps ? Object.keys(props) : props;\n const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n for (const prop of keys){\n ret[prop] = numberOrZero(read(prop));\n }\n return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n return _readValueToProps(value, {\n top: 'y',\n right: 'x',\n bottom: 'y',\n left: 'x'\n });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n return _readValueToProps(value, [\n 'topLeft',\n 'topRight',\n 'bottomLeft',\n 'bottomRight'\n ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n * else, if an object, use defined properties and sets undefined ones to 0.\n * x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n const obj = toTRBL(value);\n obj.width = obj.left + obj.right;\n obj.height = obj.top + obj.bottom;\n return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n options = options || {};\n fallback = fallback || defaults.font;\n let size = valueOrDefault(options.size, fallback.size);\n if (typeof size === 'string') {\n size = parseInt(size, 10);\n }\n let style = valueOrDefault(options.style, fallback.style);\n if (style && !('' + style).match(FONT_STYLE)) {\n console.warn('Invalid font style specified: \"' + style + '\"');\n style = undefined;\n }\n const font = {\n family: valueOrDefault(options.family, fallback.family),\n lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n size,\n style,\n weight: valueOrDefault(options.weight, fallback.weight),\n string: ''\n };\n font.string = toFontString(font);\n return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n let cacheable = true;\n let i, ilen, value;\n for(i = 0, ilen = inputs.length; i < ilen; ++i){\n value = inputs[i];\n if (value === undefined) {\n continue;\n }\n if (context !== undefined && typeof value === 'function') {\n value = value(context);\n cacheable = false;\n }\n if (index !== undefined && isArray(value)) {\n value = value[index % value.length];\n cacheable = false;\n }\n if (value !== undefined) {\n if (info && !cacheable) {\n info.cacheable = false;\n }\n return value;\n }\n }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n const { min , max } = minmax;\n const change = toDimension(grace, (max - min) / 2);\n const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n return {\n min: keepZero(min, -Math.abs(change)),\n max: keepZero(max, change)\n };\n}\nfunction createContext(parentContext, context) {\n return Object.assign(Object.create(parentContext), context);\n}\n\nfunction _createResolver(scopes, prefixes = [\n ''\n], rootScopes = scopes, fallback, getTarget = ()=>scopes[0]) {\n if (!defined(fallback)) {\n fallback = _resolve('_fallback', scopes);\n }\n const cache = {\n [Symbol.toStringTag]: 'Object',\n _cacheable: true,\n _scopes: scopes,\n _rootScopes: rootScopes,\n _fallback: fallback,\n _getTarget: getTarget,\n override: (scope)=>_createResolver([\n scope,\n ...scopes\n ], prefixes, rootScopes, fallback)\n };\n return new Proxy(cache, {\n deleteProperty (target, prop) {\n delete target[prop];\n delete target._keys;\n delete scopes[0][prop];\n return true;\n },\n get (target, prop) {\n return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n },\n getOwnPropertyDescriptor (target, prop) {\n return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n },\n getPrototypeOf () {\n return Reflect.getPrototypeOf(scopes[0]);\n },\n has (target, prop) {\n return getKeysFromAllScopes(target).includes(prop);\n },\n ownKeys (target) {\n return getKeysFromAllScopes(target);\n },\n set (target, prop, value) {\n const storage = target._storage || (target._storage = getTarget());\n target[prop] = storage[prop] = value;\n delete target._keys;\n return true;\n }\n });\n}\n function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n const cache = {\n _cacheable: false,\n _proxy: proxy,\n _context: context,\n _subProxy: subProxy,\n _stack: new Set(),\n _descriptors: _descriptors(proxy, descriptorDefaults),\n setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n };\n return new Proxy(cache, {\n deleteProperty (target, prop) {\n delete target[prop];\n delete proxy[prop];\n return true;\n },\n get (target, prop, receiver) {\n return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n },\n getOwnPropertyDescriptor (target, prop) {\n return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n enumerable: true,\n configurable: true\n } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n },\n getPrototypeOf () {\n return Reflect.getPrototypeOf(proxy);\n },\n has (target, prop) {\n return Reflect.has(proxy, prop);\n },\n ownKeys () {\n return Reflect.ownKeys(proxy);\n },\n set (target, prop, value) {\n proxy[prop] = value;\n delete target[prop];\n return true;\n }\n });\n}\n function _descriptors(proxy, defaults = {\n scriptable: true,\n indexable: true\n}) {\n const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys } = proxy;\n return {\n allKeys: _allKeys,\n scriptable: _scriptable,\n indexable: _indexable,\n isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n if (Object.prototype.hasOwnProperty.call(target, prop)) {\n return target[prop];\n }\n const value = resolve();\n target[prop] = value;\n return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n let value = _proxy[prop];\n if (isFunction(value) && descriptors.isScriptable(prop)) {\n value = _resolveScriptable(prop, value, target, receiver);\n }\n if (isArray(value) && value.length) {\n value = _resolveArray(prop, value, target, descriptors.isIndexable);\n }\n if (needsSubResolver(prop, value)) {\n value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n }\n return value;\n}\nfunction _resolveScriptable(prop, value, target, receiver) {\n const { _proxy , _context , _subProxy , _stack } = target;\n if (_stack.has(prop)) {\n throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n }\n _stack.add(prop);\n value = value(_context, _subProxy || receiver);\n _stack.delete(prop);\n if (needsSubResolver(prop, value)) {\n value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n }\n return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n const { _proxy , _context , _subProxy , _descriptors: descriptors } = target;\n if (defined(_context.index) && isIndexable(prop)) {\n value = value[_context.index % value.length];\n } else if (isObject(value[0])) {\n const arr = value;\n const scopes = _proxy._scopes.filter((s)=>s !== arr);\n value = [];\n for (const item of arr){\n const resolver = createSubResolver(scopes, _proxy, prop, item);\n value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n }\n }\n return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n for (const parent of parentScopes){\n const scope = getScope(key, parent);\n if (scope) {\n set.add(scope);\n const fallback = resolveFallback(scope._fallback, key, value);\n if (defined(fallback) && fallback !== key && fallback !== parentFallback) {\n return fallback;\n }\n } else if (scope === false && defined(parentFallback) && key !== parentFallback) {\n return null;\n }\n }\n return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n const rootScopes = resolver._rootScopes;\n const fallback = resolveFallback(resolver._fallback, prop, value);\n const allScopes = [\n ...parentScopes,\n ...rootScopes\n ];\n const set = new Set();\n set.add(value);\n let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n if (key === null) {\n return false;\n }\n if (defined(fallback) && fallback !== prop) {\n key = addScopesFromKey(set, allScopes, fallback, key, value);\n if (key === null) {\n return false;\n }\n }\n return _createResolver(Array.from(set), [\n ''\n ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n while(key){\n key = addScopes(set, allScopes, key, fallback, item);\n }\n return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n const parent = resolver._getTarget();\n if (!(prop in parent)) {\n parent[prop] = {};\n }\n const target = parent[prop];\n if (isArray(target) && isObject(value)) {\n return value;\n }\n return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n let value;\n for (const prefix of prefixes){\n value = _resolve(readKey(prefix, prop), scopes);\n if (defined(value)) {\n return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n }\n }\n}\nfunction _resolve(key, scopes) {\n for (const scope of scopes){\n if (!scope) {\n continue;\n }\n const value = scope[key];\n if (defined(value)) {\n return value;\n }\n }\n}\nfunction getKeysFromAllScopes(target) {\n let keys = target._keys;\n if (!keys) {\n keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n }\n return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n const set = new Set();\n for (const scope of scopes){\n for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n set.add(key);\n }\n }\n return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n const { iScale } = meta;\n const { key ='r' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n r: iScale.parse(resolveObjectKey(item, key), index)\n };\n }\n return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n // Props to Rob Spencer at scaled innovation for his post on splining between points\n // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n // This function must also respect \"skipped\" points\n const previous = firstPoint.skip ? middlePoint : firstPoint;\n const current = middlePoint;\n const next = afterPoint.skip ? middlePoint : afterPoint;\n const d01 = distanceBetweenPoints(current, previous);\n const d12 = distanceBetweenPoints(next, current);\n let s01 = d01 / (d01 + d12);\n let s12 = d12 / (d01 + d12);\n // If all points are the same, s01 & s02 will be inf\n s01 = isNaN(s01) ? 0 : s01;\n s12 = isNaN(s12) ? 0 : s12;\n const fa = t * s01; // scaling factor for triangle Ta\n const fb = t * s12;\n return {\n previous: {\n x: current.x - fa * (next.x - previous.x),\n y: current.y - fa * (next.y - previous.y)\n },\n next: {\n x: current.x + fb * (next.x - previous.x),\n y: current.y + fb * (next.y - previous.y)\n }\n };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n const pointsLen = points.length;\n let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen - 1; ++i){\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent || !pointAfter) {\n continue;\n }\n if (almostEquals(deltaK[i], 0, EPSILON)) {\n mK[i] = mK[i + 1] = 0;\n continue;\n }\n alphaK = mK[i] / deltaK[i];\n betaK = mK[i + 1] / deltaK[i];\n squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n if (squaredMagnitude <= 9) {\n continue;\n }\n tauK = 3 / Math.sqrt(squaredMagnitude);\n mK[i] = alphaK * tauK * deltaK[i];\n mK[i + 1] = betaK * tauK * deltaK[i];\n }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n let delta, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(let i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n const iPixel = pointCurrent[indexAxis];\n const vPixel = pointCurrent[valueAxis];\n if (pointBefore) {\n delta = (iPixel - pointBefore[indexAxis]) / 3;\n pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n }\n if (pointAfter) {\n delta = (pointAfter[indexAxis] - iPixel) / 3;\n pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n }\n }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n const valueAxis = getValueAxis(indexAxis);\n const pointsLen = points.length;\n const deltaK = Array(pointsLen).fill(0);\n const mK = Array(pointsLen);\n // Calculate slopes (deltaK) and initialize tangents (mK)\n let i, pointBefore, pointCurrent;\n let pointAfter = getPoint(points, 0);\n for(i = 0; i < pointsLen; ++i){\n pointBefore = pointCurrent;\n pointCurrent = pointAfter;\n pointAfter = getPoint(points, i + 1);\n if (!pointCurrent) {\n continue;\n }\n if (pointAfter) {\n const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n }\n mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n }\n monotoneAdjust(points, deltaK, mK);\n monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n let i, ilen, point, inArea, inAreaPrev;\n let inAreaNext = _isPointInArea(points[0], area);\n for(i = 0, ilen = points.length; i < ilen; ++i){\n inAreaPrev = inArea;\n inArea = inAreaNext;\n inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n if (!inArea) {\n continue;\n }\n point = points[i];\n if (inAreaPrev) {\n point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n }\n if (inAreaNext) {\n point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n }\n }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n let i, ilen, point, controlPoints;\n // Only consider points that are drawn in case the spanGaps option is used\n if (options.spanGaps) {\n points = points.filter((pt)=>!pt.skip);\n }\n if (options.cubicInterpolationMode === 'monotone') {\n splineCurveMonotone(points, indexAxis);\n } else {\n let prev = loop ? points[points.length - 1] : points[0];\n for(i = 0, ilen = points.length; i < ilen; ++i){\n point = points[i];\n controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n point.cp1x = controlPoints.previous.x;\n point.cp1y = controlPoints.previous.y;\n point.cp2x = controlPoints.next.x;\n point.cp2y = controlPoints.next.y;\n prev = point;\n }\n }\n if (options.capBezierPoints) {\n capBezierPoints(points, area);\n }\n}\n\n/**\n * Note: typedefs are auto-exported, so use a made-up `dom` namespace where\n * necessary to avoid duplicates with `export * from './helpers`; see\n * https://github.com/microsoft/TypeScript/issues/46011\n * @typedef { import('../core/core.controller.js').default } dom.Chart\n * @typedef { import('../../types').ChartEvent } ChartEvent\n */ /**\n * @private\n */ function _isDomSupported() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n let parent = domNode.parentNode;\n if (parent && parent.toString() === '[object ShadowRoot]') {\n parent = parent.host;\n }\n return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n let valueInPixels;\n if (typeof styleValue === 'string') {\n valueInPixels = parseInt(styleValue, 10);\n if (styleValue.indexOf('%') !== -1) {\n // percentage * size in dimension\n valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n }\n } else {\n valueInPixels = styleValue;\n }\n return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n 'top',\n 'right',\n 'bottom',\n 'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n const result = {};\n suffix = suffix ? '-' + suffix : '';\n for(let i = 0; i < 4; i++){\n const pos = positions[i];\n result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n }\n result.width = result.left + result.right;\n result.height = result.top + result.bottom;\n return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n const touches = e.touches;\n const source = touches && touches.length ? touches[0] : e;\n const { offsetX , offsetY } = source;\n let box = false;\n let x, y;\n if (useOffsetPos(offsetX, offsetY, e.target)) {\n x = offsetX;\n y = offsetY;\n } else {\n const rect = canvas.getBoundingClientRect();\n x = source.clientX - rect.left;\n y = source.clientY - rect.top;\n box = true;\n }\n return {\n x,\n y,\n box\n };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n if ('native' in event) {\n return event;\n }\n const { canvas , currentDevicePixelRatio } = chart;\n const style = getComputedStyle(canvas);\n const borderBox = style.boxSizing === 'border-box';\n const paddings = getPositionedStyle(style, 'padding');\n const borders = getPositionedStyle(style, 'border', 'width');\n const { x , y , box } = getCanvasPosition(event, canvas);\n const xOffset = paddings.left + (box && borders.left);\n const yOffset = paddings.top + (box && borders.top);\n let { width , height } = chart;\n if (borderBox) {\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n return {\n x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n };\n}\nfunction getContainerSize(canvas, width, height) {\n let maxWidth, maxHeight;\n if (width === undefined || height === undefined) {\n const container = _getParentNode(canvas);\n if (!container) {\n width = canvas.clientWidth;\n height = canvas.clientHeight;\n } else {\n const rect = container.getBoundingClientRect(); // this is the border box of the container\n const containerStyle = getComputedStyle(container);\n const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n const containerPadding = getPositionedStyle(containerStyle, 'padding');\n width = rect.width - containerPadding.width - containerBorder.width;\n height = rect.height - containerPadding.height - containerBorder.height;\n maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n }\n }\n return {\n width,\n height,\n maxWidth: maxWidth || INFINITY,\n maxHeight: maxHeight || INFINITY\n };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n const style = getComputedStyle(canvas);\n const margins = getPositionedStyle(style, 'margin');\n const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n let { width , height } = containerSize;\n if (style.boxSizing === 'content-box') {\n const borders = getPositionedStyle(style, 'border', 'width');\n const paddings = getPositionedStyle(style, 'padding');\n width -= paddings.width + borders.width;\n height -= paddings.height + borders.height;\n }\n width = Math.max(0, width - margins.width);\n height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n if (width && !height) {\n // https://github.com/chartjs/Chart.js/issues/4659\n // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n height = round1(width / 2);\n }\n const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n height = containerSize.height;\n width = round1(Math.floor(height * aspectRatio));\n }\n return {\n width,\n height\n };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n const pixelRatio = forceRatio || 1;\n const deviceHeight = Math.floor(chart.height * pixelRatio);\n const deviceWidth = Math.floor(chart.width * pixelRatio);\n chart.height = Math.floor(chart.height);\n chart.width = Math.floor(chart.width);\n const canvas = chart.canvas;\n // If no style has been set on the canvas, the render size is used as display size,\n // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n // See https://github.com/chartjs/Chart.js/issues/3575\n if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n canvas.style.height = `${chart.height}px`;\n canvas.style.width = `${chart.width}px`;\n }\n if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n chart.currentDevicePixelRatio = pixelRatio;\n canvas.height = deviceHeight;\n canvas.width = deviceWidth;\n chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n return true;\n }\n return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n let passiveSupported = false;\n try {\n const options = {\n get passive () {\n passiveSupported = true;\n return false;\n }\n };\n window.addEventListener('test', null, options);\n window.removeEventListener('test', null, options);\n } catch (e) {\n // continue regardless of error\n }\n return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n const value = getStyle(element, property);\n const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: p1.y + t * (p2.y - p1.y)\n };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n return {\n x: p1.x + t * (p2.x - p1.x),\n y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n const cp1 = {\n x: p1.cp2x,\n y: p1.cp2y\n };\n const cp2 = {\n x: p2.cp1x,\n y: p2.cp1y\n };\n const a = _pointInLine(p1, cp1, t);\n const b = _pointInLine(cp1, cp2, t);\n const c = _pointInLine(cp2, p2, t);\n const d = _pointInLine(a, b, t);\n const e = _pointInLine(b, c, t);\n return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n return {\n x (x) {\n return rectX + rectX + width - x;\n },\n setWidth (w) {\n width = w;\n },\n textAlign (align) {\n if (align === 'center') {\n return align;\n }\n return align === 'right' ? 'left' : 'right';\n },\n xPlus (x, value) {\n return x - value;\n },\n leftForLtr (x, itemWidth) {\n return x - itemWidth;\n }\n };\n};\nconst getLeftToRightAdapter = function() {\n return {\n x (x) {\n return x;\n },\n setWidth (w) {},\n textAlign (align) {\n return align;\n },\n xPlus (x, value) {\n return x + value;\n },\n leftForLtr (x, _itemWidth) {\n return x;\n }\n };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n let style, original;\n if (direction === 'ltr' || direction === 'rtl') {\n style = ctx.canvas.style;\n original = [\n style.getPropertyValue('direction'),\n style.getPropertyPriority('direction')\n ];\n style.setProperty('direction', direction, 'important');\n ctx.prevTextDirection = original;\n }\n}\nfunction restoreTextDirection(ctx, original) {\n if (original !== undefined) {\n delete ctx.prevTextDirection;\n ctx.canvas.style.setProperty('direction', original[0], original[1]);\n }\n}\n\nfunction propertyFn(property) {\n if (property === 'angle') {\n return {\n between: _angleBetween,\n compare: _angleDiff,\n normalize: _normalizeAngle\n };\n }\n return {\n between: _isBetween,\n compare: (a, b)=>a - b,\n normalize: (x)=>x\n };\n}\nfunction normalizeSegment({ start , end , count , loop , style }) {\n return {\n start: start % count,\n end: end % count,\n loop: loop && (end - start + 1) % count === 0,\n style\n };\n}\nfunction getSegment(segment, points, bounds) {\n const { property , start: startBound , end: endBound } = bounds;\n const { between , normalize } = propertyFn(property);\n const count = points.length;\n let { start , end , loop } = segment;\n let i, ilen;\n if (loop) {\n start += count;\n end += count;\n for(i = 0, ilen = count; i < ilen; ++i){\n if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n break;\n }\n start--;\n end--;\n }\n start %= count;\n end %= count;\n }\n if (end < start) {\n end += count;\n }\n return {\n start,\n end,\n loop,\n style: segment.style\n };\n}\n function _boundSegment(segment, points, bounds) {\n if (!bounds) {\n return [\n segment\n ];\n }\n const { property , start: startBound , end: endBound } = bounds;\n const count = points.length;\n const { compare , between , normalize } = propertyFn(property);\n const { start , end , loop , style } = getSegment(segment, points, bounds);\n const result = [];\n let inside = false;\n let subStart = null;\n let value, point, prevValue;\n const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n const shouldStart = ()=>inside || startIsBefore();\n const shouldStop = ()=>!inside || endIsBefore();\n for(let i = start, prev = start; i <= end; ++i){\n point = points[i % count];\n if (point.skip) {\n continue;\n }\n value = normalize(point[property]);\n if (value === prevValue) {\n continue;\n }\n inside = between(value, startBound, endBound);\n if (subStart === null && shouldStart()) {\n subStart = compare(value, startBound) === 0 ? i : prev;\n }\n if (subStart !== null && shouldStop()) {\n result.push(normalizeSegment({\n start: subStart,\n end: i,\n loop,\n count,\n style\n }));\n subStart = null;\n }\n prev = i;\n prevValue = value;\n }\n if (subStart !== null) {\n result.push(normalizeSegment({\n start: subStart,\n end,\n loop,\n count,\n style\n }));\n }\n return result;\n}\n function _boundSegments(line, bounds) {\n const result = [];\n const segments = line.segments;\n for(let i = 0; i < segments.length; i++){\n const sub = _boundSegment(segments[i], line.points, bounds);\n if (sub.length) {\n result.push(...sub);\n }\n }\n return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n let start = 0;\n let end = count - 1;\n if (loop && !spanGaps) {\n while(start < count && !points[start].skip){\n start++;\n }\n }\n while(start < count && points[start].skip){\n start++;\n }\n start %= count;\n if (loop) {\n end += start;\n }\n while(end > start && points[end % count].skip){\n end--;\n }\n end %= count;\n return {\n start,\n end\n };\n}\n function solidSegments(points, start, max, loop) {\n const count = points.length;\n const result = [];\n let last = start;\n let prev = points[start];\n let end;\n for(end = start + 1; end <= max; ++end){\n const cur = points[end % count];\n if (cur.skip || cur.stop) {\n if (!prev.skip) {\n loop = false;\n result.push({\n start: start % count,\n end: (end - 1) % count,\n loop\n });\n start = last = cur.stop ? end : null;\n }\n } else {\n last = end;\n if (prev.skip) {\n start = end;\n }\n }\n prev = cur;\n }\n if (last !== null) {\n result.push({\n start: start % count,\n end: last % count,\n loop\n });\n }\n return result;\n}\n function _computeSegments(line, segmentOptions) {\n const points = line.points;\n const spanGaps = line.options.spanGaps;\n const count = points.length;\n if (!count) {\n return [];\n }\n const loop = !!line._loop;\n const { start , end } = findStartAndEnd(points, count, loop, spanGaps);\n if (spanGaps === true) {\n return splitByStyles(line, [\n {\n start,\n end,\n loop\n }\n ], points, segmentOptions);\n }\n const max = end < start ? end + count : end;\n const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n if (!segmentOptions || !segmentOptions.setContext || !points) {\n return segments;\n }\n return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n const chartContext = line._chart.getContext();\n const baseStyle = readStyle(line.options);\n const { _datasetIndex: datasetIndex , options: { spanGaps } } = line;\n const count = points.length;\n const result = [];\n let prevStyle = baseStyle;\n let start = segments[0].start;\n let i = start;\n function addStyle(s, e, l, st) {\n const dir = spanGaps ? -1 : 1;\n if (s === e) {\n return;\n }\n s += count;\n while(points[s % count].skip){\n s -= dir;\n }\n while(points[e % count].skip){\n e += dir;\n }\n if (s % count !== e % count) {\n result.push({\n start: s % count,\n end: e % count,\n loop: l,\n style: st\n });\n prevStyle = st;\n start = e % count;\n }\n }\n for (const segment of segments){\n start = spanGaps ? start : segment.start;\n let prev = points[start % count];\n let style;\n for(i = start + 1; i <= segment.end; i++){\n const pt = points[i % count];\n style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n type: 'segment',\n p0: prev,\n p1: pt,\n p0DataIndex: (i - 1) % count,\n p1DataIndex: i % count,\n datasetIndex\n })));\n if (styleChanged(style, prevStyle)) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n prev = pt;\n prevStyle = style;\n }\n if (start < i - 1) {\n addStyle(start, i - 1, segment.loop, prevStyle);\n }\n }\n return result;\n}\nfunction readStyle(options) {\n return {\n backgroundColor: options.backgroundColor,\n borderCapStyle: options.borderCapStyle,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderJoinStyle: options.borderJoinStyle,\n borderWidth: options.borderWidth,\n borderColor: options.borderColor\n };\n}\nfunction styleChanged(style, prevStyle) {\n return prevStyle && JSON.stringify(style) !== JSON.stringify(prevStyle);\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, fontString as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, overrideTextDirection as aA, _textX as aB, restoreTextDirection as aC, drawPointLegend as aD, distanceBetweenPoints as aE, noop as aF, _setMinAndMaxByKey as aG, niceNum as aH, almostWhole as aI, almostEquals as aJ, _decimalPlaces as aK, Ticks as aL, log10 as aM, _longestText as aN, _filterBetween as aO, _lookup as aP, isPatternOrGradient as aQ, getHoverColor as aR, clone as aS, _merger as aT, _mergerIf as aU, _deprecated as aV, _splitKey as aW, toFontString as aX, splineCurve as aY, splineCurveMonotone as aZ, getStyle as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, _elementsEqual as ah, _isClickEvent as ai, _isBetween as aj, _readValueToProps as ak, _updateBezierControlPoints as al, _computeSegments as am, _boundSegments as an, _steppedInterpolation as ao, _bezierInterpolation as ap, _pointInLine as aq, _steppedLineTo as ar, _bezierCurveTo as as, drawPoint as at, addRoundedRectPath as au, toTRBL as av, toTRBLCorners as aw, _boundSegment as ax, _normalizeAngle as ay, getRtlAdapter as az, isArray as b, toLineHeight as b0, PITAU as b1, INFINITY as b2, RAD_PER_DEG as b3, QUARTER_PI as b4, TWO_THIRDS_PI as b5, _angleDiff as b6, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.segment.js.map\n","/*!\n * Chart.js v4.2.1\n * https://www.chartjs.org\n * (c) 2023 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as _elementsEqual, ai as _isClickEvent, aj as _isBetween, ak as _readValueToProps, al as _updateBezierControlPoints, am as _computeSegments, an as _boundSegments, ao as _steppedInterpolation, ap as _bezierInterpolation, aq as _pointInLine, ar as _steppedLineTo, as as _bezierCurveTo, at as drawPoint, au as addRoundedRectPath, av as toTRBL, aw as toTRBLCorners, ax as _boundSegment, ay as _normalizeAngle, az as getRtlAdapter, aA as overrideTextDirection, aB as _textX, aC as restoreTextDirection, aD as drawPointLegend, aE as distanceBetweenPoints, aF as noop, aG as _setMinAndMaxByKey, aH as niceNum, aI as almostWhole, aJ as almostEquals, aK as _decimalPlaces, aL as Ticks, aM as log10, aN as _longestText, aO as _filterBetween, aP as _lookup } from './chunks/helpers.segment.js';\nexport { aL as Ticks, d as defaults } from './chunks/helpers.segment.js';\nimport '@kurkle/color';\n\nclass Animator {\n constructor(){\n this._request = null;\n this._charts = new Map();\n this._running = false;\n this._lastDate = undefined;\n }\n _notify(chart, anims, date, type) {\n const callbacks = anims.listeners[type];\n const numSteps = anims.duration;\n callbacks.forEach((fn)=>fn({\n chart,\n initial: anims.initial,\n numSteps,\n currentStep: Math.min(date - anims.start, numSteps)\n }));\n }\n _refresh() {\n if (this._request) {\n return;\n }\n this._running = true;\n this._request = requestAnimFrame.call(window, ()=>{\n this._update();\n this._request = null;\n if (this._running) {\n this._refresh();\n }\n });\n }\n _update(date = Date.now()) {\n let remaining = 0;\n this._charts.forEach((anims, chart)=>{\n if (!anims.running || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n let draw = false;\n let item;\n for(; i >= 0; --i){\n item = items[i];\n if (item._active) {\n if (item._total > anims.duration) {\n anims.duration = item._total;\n }\n item.tick(date);\n draw = true;\n } else {\n items[i] = items[items.length - 1];\n items.pop();\n }\n }\n if (draw) {\n chart.draw();\n this._notify(chart, anims, date, 'progress');\n }\n if (!items.length) {\n anims.running = false;\n this._notify(chart, anims, date, 'complete');\n anims.initial = false;\n }\n remaining += items.length;\n });\n this._lastDate = date;\n if (remaining === 0) {\n this._running = false;\n }\n }\n _getAnims(chart) {\n const charts = this._charts;\n let anims = charts.get(chart);\n if (!anims) {\n anims = {\n running: false,\n initial: true,\n items: [],\n listeners: {\n complete: [],\n progress: []\n }\n };\n charts.set(chart, anims);\n }\n return anims;\n }\n listen(chart, event, cb) {\n this._getAnims(chart).listeners[event].push(cb);\n }\n add(chart, items) {\n if (!items || !items.length) {\n return;\n }\n this._getAnims(chart).items.push(...items);\n }\n has(chart) {\n return this._getAnims(chart).items.length > 0;\n }\n start(chart) {\n const anims = this._charts.get(chart);\n if (!anims) {\n return;\n }\n anims.running = true;\n anims.start = Date.now();\n anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n this._refresh();\n }\n running(chart) {\n if (!this._running) {\n return false;\n }\n const anims = this._charts.get(chart);\n if (!anims || !anims.running || !anims.items.length) {\n return false;\n }\n return true;\n }\n stop(chart) {\n const anims = this._charts.get(chart);\n if (!anims || !anims.items.length) {\n return;\n }\n const items = anims.items;\n let i = items.length - 1;\n for(; i >= 0; --i){\n items[i].cancel();\n }\n anims.items = [];\n this._notify(chart, anims, Date.now(), 'complete');\n }\n remove(chart) {\n return this._charts.delete(chart);\n }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n boolean (from, to, factor) {\n return factor > 0.5 ? to : from;\n },\n color (from, to, factor) {\n const c0 = color(from || transparent);\n const c1 = c0.valid && color(to || transparent);\n return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n },\n number (from, to, factor) {\n return from + (to - from) * factor;\n }\n};\nclass Animation {\n constructor(cfg, target, prop, to){\n const currentValue = target[prop];\n to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n const from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n this._active = true;\n this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n this._easing = effects[cfg.easing] || effects.linear;\n this._start = Math.floor(Date.now() + (cfg.delay || 0));\n this._duration = this._total = Math.floor(cfg.duration);\n this._loop = !!cfg.loop;\n this._target = target;\n this._prop = prop;\n this._from = from;\n this._to = to;\n this._promises = undefined;\n }\n active() {\n return this._active;\n }\n update(cfg, to, date) {\n if (this._active) {\n this._notify(false);\n const currentValue = this._target[this._prop];\n const elapsed = date - this._start;\n const remain = this._duration - elapsed;\n this._start = date;\n this._duration = Math.floor(Math.max(remain, cfg.duration));\n this._total += elapsed;\n this._loop = !!cfg.loop;\n this._to = resolve([\n cfg.to,\n to,\n currentValue,\n cfg.from\n ]);\n this._from = resolve([\n cfg.from,\n currentValue,\n to\n ]);\n }\n }\n cancel() {\n if (this._active) {\n this.tick(Date.now());\n this._active = false;\n this._notify(false);\n }\n }\n tick(date) {\n const elapsed = date - this._start;\n const duration = this._duration;\n const prop = this._prop;\n const from = this._from;\n const loop = this._loop;\n const to = this._to;\n let factor;\n this._active = from !== to && (loop || elapsed < duration);\n if (!this._active) {\n this._target[prop] = to;\n this._notify(true);\n return;\n }\n if (elapsed < 0) {\n this._target[prop] = from;\n return;\n }\n factor = elapsed / duration % 2;\n factor = loop && factor > 1 ? 2 - factor : factor;\n factor = this._easing(Math.min(1, Math.max(0, factor)));\n this._target[prop] = this._fn(from, to, factor);\n }\n wait() {\n const promises = this._promises || (this._promises = []);\n return new Promise((res, rej)=>{\n promises.push({\n res,\n rej\n });\n });\n }\n _notify(resolved) {\n const method = resolved ? 'res' : 'rej';\n const promises = this._promises || [];\n for(let i = 0; i < promises.length; i++){\n promises[i][method]();\n }\n }\n}\n\nclass Animations {\n constructor(chart, config){\n this._chart = chart;\n this._properties = new Map();\n this.configure(config);\n }\n configure(config) {\n if (!isObject(config)) {\n return;\n }\n const animationOptions = Object.keys(defaults.animation);\n const animatedProps = this._properties;\n Object.getOwnPropertyNames(config).forEach((key)=>{\n const cfg = config[key];\n if (!isObject(cfg)) {\n return;\n }\n const resolved = {};\n for (const option of animationOptions){\n resolved[option] = cfg[option];\n }\n (isArray(cfg.properties) && cfg.properties || [\n key\n ]).forEach((prop)=>{\n if (prop === key || !animatedProps.has(prop)) {\n animatedProps.set(prop, resolved);\n }\n });\n });\n }\n _animateOptions(target, values) {\n const newOptions = values.options;\n const options = resolveTargetOptions(target, newOptions);\n if (!options) {\n return [];\n }\n const animations = this._createAnimations(options, newOptions);\n if (newOptions.$shared) {\n awaitAll(target.options.$animations, newOptions).then(()=>{\n target.options = newOptions;\n }, ()=>{\n });\n }\n return animations;\n }\n _createAnimations(target, values) {\n const animatedProps = this._properties;\n const animations = [];\n const running = target.$animations || (target.$animations = {});\n const props = Object.keys(values);\n const date = Date.now();\n let i;\n for(i = props.length - 1; i >= 0; --i){\n const prop = props[i];\n if (prop.charAt(0) === '$') {\n continue;\n }\n if (prop === 'options') {\n animations.push(...this._animateOptions(target, values));\n continue;\n }\n const value = values[prop];\n let animation = running[prop];\n const cfg = animatedProps.get(prop);\n if (animation) {\n if (cfg && animation.active()) {\n animation.update(cfg, value, date);\n continue;\n } else {\n animation.cancel();\n }\n }\n if (!cfg || !cfg.duration) {\n target[prop] = value;\n continue;\n }\n running[prop] = animation = new Animation(cfg, target, prop, value);\n animations.push(animation);\n }\n return animations;\n }\n update(target, values) {\n if (this._properties.size === 0) {\n Object.assign(target, values);\n return;\n }\n const animations = this._createAnimations(target, values);\n if (animations.length) {\n animator.add(this._chart, animations);\n return true;\n }\n }\n}\nfunction awaitAll(animations, properties) {\n const running = [];\n const keys = Object.keys(properties);\n for(let i = 0; i < keys.length; i++){\n const anim = animations[keys[i]];\n if (anim && anim.active()) {\n running.push(anim.wait());\n }\n }\n return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n if (!newOptions) {\n return;\n }\n let options = target.options;\n if (!options) {\n target.options = newOptions;\n return;\n }\n if (options.$shared) {\n target.options = options = Object.assign({}, options, {\n $shared: false,\n $animations: {}\n });\n }\n return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n const opts = scale && scale.options || {};\n const reverse = opts.reverse;\n const min = opts.min === undefined ? allowedOverflow : 0;\n const max = opts.max === undefined ? allowedOverflow : 0;\n return {\n start: reverse ? max : min,\n end: reverse ? min : max\n };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n if (allowedOverflow === false) {\n return false;\n }\n const x = scaleClip(xScale, allowedOverflow);\n const y = scaleClip(yScale, allowedOverflow);\n return {\n top: y.end,\n right: x.end,\n bottom: y.start,\n left: x.start\n };\n}\nfunction toClip(value) {\n let t, r, b, l;\n if (isObject(value)) {\n t = value.top;\n r = value.right;\n b = value.bottom;\n l = value.left;\n } else {\n t = r = b = l = value;\n }\n return {\n top: t,\n right: r,\n bottom: b,\n left: l,\n disabled: value === false\n };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n const keys = [];\n const metasets = chart._getSortedDatasetMetas(filterVisible);\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n keys.push(metasets[i].index);\n }\n return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n const keys = stack.keys;\n const singleMode = options.mode === 'single';\n let i, ilen, datasetIndex, otherValue;\n if (value === null) {\n return;\n }\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n datasetIndex = +keys[i];\n if (datasetIndex === dsIndex) {\n if (options.all) {\n continue;\n }\n break;\n }\n otherValue = stack.values[datasetIndex];\n if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n value += otherValue;\n }\n }\n return value;\n}\nfunction convertObjectDataToArray(data) {\n const keys = Object.keys(data);\n const adata = new Array(keys.length);\n let i, ilen, key;\n for(i = 0, ilen = keys.length; i < ilen; ++i){\n key = keys[i];\n adata[i] = {\n x: key,\n y: data[key]\n };\n }\n return adata;\n}\nfunction isStacked(scale, meta) {\n const stacked = scale && scale.options.stacked;\n return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n const { min , max , minDefined , maxDefined } = scale.getUserBounds();\n return {\n min: minDefined ? min : Number.NEGATIVE_INFINITY,\n max: maxDefined ? max : Number.POSITIVE_INFINITY\n };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n const value = stack[meta.index];\n if (positive && value > 0 || !positive && value < 0) {\n return meta.index;\n }\n }\n return null;\n}\nfunction updateStacks(controller, parsed) {\n const { chart , _cachedMeta: meta } = controller;\n const stacks = chart._stacks || (chart._stacks = {});\n const { iScale , vScale , index: datasetIndex } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const key = getStackKey(iScale, vScale, meta);\n const ilen = parsed.length;\n let stack;\n for(let i = 0; i < ilen; ++i){\n const item = parsed[i];\n const { [iAxis]: index , [vAxis]: value } = item;\n const itemStacks = item._stacks || (item._stacks = {});\n stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n stack[datasetIndex] = value;\n stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n const visualValues = stack._visualValues || (stack._visualValues = {});\n visualValues[datasetIndex] = value;\n }\n}\nfunction getFirstScaleId(chart, axis) {\n const scales = chart.scales;\n return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n return createContext(parent, {\n active: false,\n dataset: undefined,\n datasetIndex: index,\n index,\n mode: 'default',\n type: 'dataset'\n });\n}\nfunction createDataContext(parent, index, element) {\n return createContext(parent, {\n active: false,\n dataIndex: index,\n parsed: undefined,\n raw: undefined,\n element,\n index,\n mode: 'default',\n type: 'data'\n });\n}\nfunction clearStacks(meta, items) {\n const datasetIndex = meta.controller.index;\n const axis = meta.vScale && meta.vScale.axis;\n if (!axis) {\n return;\n }\n items = items || meta._parsed;\n for (const parsed of items){\n const stacks = parsed._stacks;\n if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n return;\n }\n delete stacks[axis][datasetIndex];\n if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n delete stacks[axis]._visualValues[datasetIndex];\n }\n }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n keys: getSortedDatasetIndices(chart, true),\n values: null\n };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n this.chart = chart;\n this._ctx = chart.ctx;\n this.index = datasetIndex;\n this._cachedDataOpts = {};\n this._cachedMeta = this.getMeta();\n this._type = this._cachedMeta.type;\n this.options = undefined;\n this._parsing = false;\n this._data = undefined;\n this._objectData = undefined;\n this._sharedOptions = undefined;\n this._drawStart = undefined;\n this._drawCount = undefined;\n this.enableOptionSharing = false;\n this.supportsDecimation = false;\n this.$context = undefined;\n this._syncList = [];\n this.datasetElementType = new.target.datasetElementType;\n this.dataElementType = new.target.dataElementType;\n this.initialize();\n }\n initialize() {\n const meta = this._cachedMeta;\n this.configure();\n this.linkScales();\n meta._stacked = isStacked(meta.vScale, meta);\n this.addElements();\n if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n }\n }\n updateIndex(datasetIndex) {\n if (this.index !== datasetIndex) {\n clearStacks(this._cachedMeta);\n }\n this.index = datasetIndex;\n }\n linkScales() {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n const indexAxis = meta.indexAxis;\n const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n meta.xScale = this.getScaleForId(xid);\n meta.yScale = this.getScaleForId(yid);\n meta.rScale = this.getScaleForId(rid);\n meta.iScale = this.getScaleForId(iid);\n meta.vScale = this.getScaleForId(vid);\n }\n getDataset() {\n return this.chart.data.datasets[this.index];\n }\n getMeta() {\n return this.chart.getDatasetMeta(this.index);\n }\n getScaleForId(scaleID) {\n return this.chart.scales[scaleID];\n }\n _getOtherScale(scale) {\n const meta = this._cachedMeta;\n return scale === meta.iScale ? meta.vScale : meta.iScale;\n }\n reset() {\n this._update('reset');\n }\n _destroy() {\n const meta = this._cachedMeta;\n if (this._data) {\n unlistenArrayEvents(this._data, this);\n }\n if (meta._stacked) {\n clearStacks(meta);\n }\n }\n _dataCheck() {\n const dataset = this.getDataset();\n const data = dataset.data || (dataset.data = []);\n const _data = this._data;\n if (isObject(data)) {\n this._data = convertObjectDataToArray(data);\n } else if (_data !== data) {\n if (_data) {\n unlistenArrayEvents(_data, this);\n const meta = this._cachedMeta;\n clearStacks(meta);\n meta._parsed = [];\n }\n if (data && Object.isExtensible(data)) {\n listenArrayEvents(data, this);\n }\n this._syncList = [];\n this._data = data;\n }\n }\n addElements() {\n const meta = this._cachedMeta;\n this._dataCheck();\n if (this.datasetElementType) {\n meta.dataset = new this.datasetElementType();\n }\n }\n buildOrUpdateElements(resetNewElements) {\n const meta = this._cachedMeta;\n const dataset = this.getDataset();\n let stackChanged = false;\n this._dataCheck();\n const oldStacked = meta._stacked;\n meta._stacked = isStacked(meta.vScale, meta);\n if (meta.stack !== dataset.stack) {\n stackChanged = true;\n clearStacks(meta);\n meta.stack = dataset.stack;\n }\n this._resyncElements(resetNewElements);\n if (stackChanged || oldStacked !== meta._stacked) {\n updateStacks(this, meta._parsed);\n }\n }\n configure() {\n const config = this.chart.config;\n const scopeKeys = config.datasetScopeKeys(this._type);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n this.options = config.createResolver(scopes, this.getContext());\n this._parsing = this.options.parsing;\n this._cachedDataOpts = {};\n }\n parse(start, count) {\n const { _cachedMeta: meta , _data: data } = this;\n const { iScale , _stacked } = meta;\n const iAxis = iScale.axis;\n let sorted = start === 0 && count === data.length ? true : meta._sorted;\n let prev = start > 0 && meta._parsed[start - 1];\n let i, cur, parsed;\n if (this._parsing === false) {\n meta._parsed = data;\n meta._sorted = true;\n parsed = data;\n } else {\n if (isArray(data[start])) {\n parsed = this.parseArrayData(meta, data, start, count);\n } else if (isObject(data[start])) {\n parsed = this.parseObjectData(meta, data, start, count);\n } else {\n parsed = this.parsePrimitiveData(meta, data, start, count);\n }\n const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n for(i = 0; i < count; ++i){\n meta._parsed[i + start] = cur = parsed[i];\n if (sorted) {\n if (isNotInOrderComparedToPrev()) {\n sorted = false;\n }\n prev = cur;\n }\n }\n meta._sorted = sorted;\n }\n if (_stacked) {\n updateStacks(this, parsed);\n }\n }\n parsePrimitiveData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = new Array(count);\n let i, ilen, index;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n parsed[i] = {\n [iAxis]: singleScale || iScale.parse(labels[index], index),\n [vAxis]: vScale.parse(data[index], index)\n };\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(item[0], index),\n y: yScale.parse(item[1], index)\n };\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const { xScale , yScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const parsed = new Array(count);\n let i, ilen, index, item;\n for(i = 0, ilen = count; i < ilen; ++i){\n index = i + start;\n item = data[index];\n parsed[i] = {\n x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n };\n }\n return parsed;\n }\n getParsed(index) {\n return this._cachedMeta._parsed[index];\n }\n getDataElement(index) {\n return this._cachedMeta.data[index];\n }\n applyStack(scale, parsed, mode) {\n const chart = this.chart;\n const meta = this._cachedMeta;\n const value = parsed[scale.axis];\n const stack = {\n keys: getSortedDatasetIndices(chart, true),\n values: parsed._stacks[scale.axis]._visualValues\n };\n return applyStack(stack, value, meta.index, {\n mode\n });\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n const parsedValue = parsed[scale.axis];\n let value = parsedValue === null ? NaN : parsedValue;\n const values = stack && parsed._stacks[scale.axis];\n if (stack && values) {\n stack.values = values;\n value = applyStack(stack, parsedValue, this._cachedMeta.index);\n }\n range.min = Math.min(range.min, value);\n range.max = Math.max(range.max, value);\n }\n getMinMax(scale, canStack) {\n const meta = this._cachedMeta;\n const _parsed = meta._parsed;\n const sorted = meta._sorted && scale === meta.iScale;\n const ilen = _parsed.length;\n const otherScale = this._getOtherScale(scale);\n const stack = createStack(canStack, meta, this.chart);\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n const { min: otherMin , max: otherMax } = getUserBounds(otherScale);\n let i, parsed;\n function _skip() {\n parsed = _parsed[i];\n const otherValue = parsed[otherScale.axis];\n return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n }\n for(i = 0; i < ilen; ++i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n if (sorted) {\n break;\n }\n }\n if (sorted) {\n for(i = ilen - 1; i >= 0; --i){\n if (_skip()) {\n continue;\n }\n this.updateRangeFromParsed(range, scale, parsed, stack);\n break;\n }\n }\n return range;\n }\n getAllParsedValues(scale) {\n const parsed = this._cachedMeta._parsed;\n const values = [];\n let i, ilen, value;\n for(i = 0, ilen = parsed.length; i < ilen; ++i){\n value = parsed[i][scale.axis];\n if (isNumberFinite(value)) {\n values.push(value);\n }\n }\n return values;\n }\n getMaxOverflow() {\n return false;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n };\n }\n _update(mode) {\n const meta = this._cachedMeta;\n this.update(mode || 'default');\n meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n }\n update(mode) {}\n draw() {\n const ctx = this._ctx;\n const chart = this.chart;\n const meta = this._cachedMeta;\n const elements = meta.data || [];\n const area = chart.chartArea;\n const active = [];\n const start = this._drawStart || 0;\n const count = this._drawCount || elements.length - start;\n const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n let i;\n if (meta.dataset) {\n meta.dataset.draw(ctx, area, start, count);\n }\n for(i = start; i < start + count; ++i){\n const element = elements[i];\n if (element.hidden) {\n continue;\n }\n if (element.active && drawActiveElementsOnTop) {\n active.push(element);\n } else {\n element.draw(ctx, area);\n }\n }\n for(i = 0; i < active.length; ++i){\n active[i].draw(ctx, area);\n }\n }\n getStyle(index, active) {\n const mode = active ? 'active' : 'default';\n return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n }\n getContext(index, active, mode) {\n const dataset = this.getDataset();\n let context;\n if (index >= 0 && index < this._cachedMeta.data.length) {\n const element = this._cachedMeta.data[index];\n context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n context.parsed = this.getParsed(index);\n context.raw = dataset.data[index];\n context.index = context.dataIndex = index;\n } else {\n context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n context.dataset = dataset;\n context.index = context.datasetIndex = this.index;\n }\n context.active = !!active;\n context.mode = mode;\n return context;\n }\n resolveDatasetElementOptions(mode) {\n return this._resolveElementOptions(this.datasetElementType.id, mode);\n }\n resolveDataElementOptions(index, mode) {\n return this._resolveElementOptions(this.dataElementType.id, mode, index);\n }\n _resolveElementOptions(elementType, mode = 'default', index) {\n const active = mode === 'active';\n const cache = this._cachedDataOpts;\n const cacheKey = elementType + '-' + mode;\n const cached = cache[cacheKey];\n const sharing = this.enableOptionSharing && defined(index);\n if (cached) {\n return cloneIfNotShared(cached, sharing);\n }\n const config = this.chart.config;\n const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n const prefixes = active ? [\n `${elementType}Hover`,\n 'hover',\n elementType,\n ''\n ] : [\n elementType,\n ''\n ];\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n const names = Object.keys(defaults.elements[elementType]);\n const context = ()=>this.getContext(index, active, mode);\n const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n if (values.$shared) {\n values.$shared = sharing;\n cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n }\n return values;\n }\n _resolveAnimations(index, transition, active) {\n const chart = this.chart;\n const cache = this._cachedDataOpts;\n const cacheKey = `animation-${transition}`;\n const cached = cache[cacheKey];\n if (cached) {\n return cached;\n }\n let options;\n if (chart.options.animation !== false) {\n const config = this.chart.config;\n const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n options = config.createResolver(scopes, this.getContext(index, active, transition));\n }\n const animations = new Animations(chart, options && options.animations);\n if (options && options._cacheable) {\n cache[cacheKey] = Object.freeze(animations);\n }\n return animations;\n }\n getSharedOptions(options) {\n if (!options.$shared) {\n return;\n }\n return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n }\n includeOptions(mode, sharedOptions) {\n return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n }\n _getSharedOptions(start, mode) {\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const previouslySharedOptions = this._sharedOptions;\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n return {\n sharedOptions,\n includeOptions\n };\n }\n updateElement(element, index, properties, mode) {\n if (isDirectUpdateMode(mode)) {\n Object.assign(element, properties);\n } else {\n this._resolveAnimations(index, mode).update(element, properties);\n }\n }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n if (sharedOptions && !isDirectUpdateMode(mode)) {\n this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n }\n }\n _setStyle(element, index, mode, active) {\n element.active = active;\n const options = this.getStyle(index, active);\n this._resolveAnimations(index, mode, active).update(element, {\n options: !active && this.getSharedOptions(options) || options\n });\n }\n removeHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', false);\n }\n setHoverStyle(element, datasetIndex, index) {\n this._setStyle(element, index, 'active', true);\n }\n _removeDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', false);\n }\n }\n _setDatasetHoverStyle() {\n const element = this._cachedMeta.dataset;\n if (element) {\n this._setStyle(element, undefined, 'active', true);\n }\n }\n _resyncElements(resetNewElements) {\n const data = this._data;\n const elements = this._cachedMeta.data;\n for (const [method, arg1, arg2] of this._syncList){\n this[method](arg1, arg2);\n }\n this._syncList = [];\n const numMeta = elements.length;\n const numData = data.length;\n const count = Math.min(numData, numMeta);\n if (count) {\n this.parse(0, count);\n }\n if (numData > numMeta) {\n this._insertElements(numMeta, numData - numMeta, resetNewElements);\n } else if (numData < numMeta) {\n this._removeElements(numData, numMeta - numData);\n }\n }\n _insertElements(start, count, resetNewElements = true) {\n const meta = this._cachedMeta;\n const data = meta.data;\n const end = start + count;\n let i;\n const move = (arr)=>{\n arr.length += count;\n for(i = arr.length - 1; i >= end; i--){\n arr[i] = arr[i - count];\n }\n };\n move(data);\n for(i = start; i < end; ++i){\n data[i] = new this.dataElementType();\n }\n if (this._parsing) {\n move(meta._parsed);\n }\n this.parse(start, count);\n if (resetNewElements) {\n this.updateElements(data, start, count, 'reset');\n }\n }\n updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n const meta = this._cachedMeta;\n if (this._parsing) {\n const removed = meta._parsed.splice(start, count);\n if (meta._stacked) {\n clearStacks(meta, removed);\n }\n }\n meta.data.splice(start, count);\n }\n _sync(args) {\n if (this._parsing) {\n this._syncList.push(args);\n } else {\n const [method, arg1, arg2] = args;\n this[method](arg1, arg2);\n }\n this.chart._dataChanges.push([\n this.index,\n ...args\n ]);\n }\n _onDataPush() {\n const count = arguments.length;\n this._sync([\n '_insertElements',\n this.getDataset().data.length - count,\n count\n ]);\n }\n _onDataPop() {\n this._sync([\n '_removeElements',\n this._cachedMeta.data.length - 1,\n 1\n ]);\n }\n _onDataShift() {\n this._sync([\n '_removeElements',\n 0,\n 1\n ]);\n }\n _onDataSplice(start, count) {\n if (count) {\n this._sync([\n '_removeElements',\n start,\n count\n ]);\n }\n const newCount = arguments.length - 2;\n if (newCount) {\n this._sync([\n '_insertElements',\n start,\n newCount\n ]);\n }\n }\n _onDataUnshift() {\n this._sync([\n '_insertElements',\n 0,\n arguments.length\n ]);\n }\n}\n\nfunction getAllScaleValues(scale, type) {\n if (!scale._cache.$bar) {\n const visibleMetas = scale.getMatchingVisibleMetas(type);\n let values = [];\n for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n }\n scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n }\n return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n const scale = meta.iScale;\n const values = getAllScaleValues(scale, meta.type);\n let min = scale._length;\n let i, ilen, curr, prev;\n const updateMinAndPrev = ()=>{\n if (curr === 32767 || curr === -32768) {\n return;\n }\n if (defined(prev)) {\n min = Math.min(min, Math.abs(curr - prev) || min);\n }\n prev = curr;\n };\n for(i = 0, ilen = values.length; i < ilen; ++i){\n curr = scale.getPixelForValue(values[i]);\n updateMinAndPrev();\n }\n prev = undefined;\n for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n curr = scale.getPixelForTick(i);\n updateMinAndPrev();\n }\n return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n const thickness = options.barThickness;\n let size, ratio;\n if (isNullOrUndef(thickness)) {\n size = ruler.min * options.categoryPercentage;\n ratio = options.barPercentage;\n } else {\n size = thickness * stackCount;\n ratio = 1;\n }\n return {\n chunk: size / stackCount,\n ratio,\n start: ruler.pixels[index] - size / 2\n };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n const pixels = ruler.pixels;\n const curr = pixels[index];\n let prev = index > 0 ? pixels[index - 1] : null;\n let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n const percent = options.categoryPercentage;\n if (prev === null) {\n prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n }\n if (next === null) {\n next = curr + curr - prev;\n }\n const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n const size = Math.abs(next - prev) / 2 * percent;\n return {\n chunk: size / stackCount,\n ratio: options.barPercentage,\n start\n };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n const startValue = vScale.parse(entry[0], i);\n const endValue = vScale.parse(entry[1], i);\n const min = Math.min(startValue, endValue);\n const max = Math.max(startValue, endValue);\n let barStart = min;\n let barEnd = max;\n if (Math.abs(min) > Math.abs(max)) {\n barStart = max;\n barEnd = min;\n }\n item[vScale.axis] = barEnd;\n item._custom = {\n barStart,\n barEnd,\n start: startValue,\n end: endValue,\n min,\n max\n };\n}\nfunction parseValue(entry, item, vScale, i) {\n if (isArray(entry)) {\n parseFloatBar(entry, item, vScale, i);\n } else {\n item[vScale.axis] = vScale.parse(entry, i);\n }\n return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n const iScale = meta.iScale;\n const vScale = meta.vScale;\n const labels = iScale.getLabels();\n const singleScale = iScale === vScale;\n const parsed = [];\n let i, ilen, item, entry;\n for(i = start, ilen = start + count; i < ilen; ++i){\n entry = data[i];\n item = {};\n item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n parsed.push(parseValue(entry, item, vScale, i));\n }\n return parsed;\n}\nfunction isFloatBar(custom) {\n return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n if (size !== 0) {\n return sign(size);\n }\n return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n let reverse, start, end, top, bottom;\n if (properties.horizontal) {\n reverse = properties.base > properties.x;\n start = 'left';\n end = 'right';\n } else {\n reverse = properties.base < properties.y;\n start = 'bottom';\n end = 'top';\n }\n if (reverse) {\n top = 'end';\n bottom = 'start';\n } else {\n top = 'start';\n bottom = 'end';\n }\n return {\n start,\n end,\n reverse,\n top,\n bottom\n };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n let edge = options.borderSkipped;\n const res = {};\n if (!edge) {\n properties.borderSkipped = res;\n return;\n }\n if (edge === true) {\n properties.borderSkipped = {\n top: true,\n right: true,\n bottom: true,\n left: true\n };\n return;\n }\n const { start , end , reverse , top , bottom } = borderProps(properties);\n if (edge === 'middle' && stack) {\n properties.enableBorderRadius = true;\n if ((stack._top || 0) === index) {\n edge = top;\n } else if ((stack._bottom || 0) === index) {\n edge = bottom;\n } else {\n res[parseEdge(bottom, start, end, reverse)] = true;\n edge = top;\n }\n }\n res[parseEdge(edge, start, end, reverse)] = true;\n properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n if (reverse) {\n edge = swap(edge, a, b);\n edge = startEnd(edge, b, a);\n } else {\n edge = startEnd(edge, a, b);\n }\n return edge;\n}\nfunction swap(orig, v1, v2) {\n return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount }, ratio) {\n properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n static id = 'bar';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'bar',\n categoryPercentage: 0.8,\n barPercentage: 0.9,\n grouped: true,\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category',\n offset: true,\n grid: {\n offset: true\n }\n },\n _value_: {\n type: 'linear',\n beginAtZero: true\n }\n }\n };\n parsePrimitiveData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseArrayData(meta, data, start, count) {\n return parseArrayOrPrimitive(meta, data, start, count);\n }\n parseObjectData(meta, data, start, count) {\n const { iScale , vScale } = meta;\n const { xAxisKey ='x' , yAxisKey ='y' } = this._parsing;\n const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n const parsed = [];\n let i, ilen, item, obj;\n for(i = start, ilen = start + count; i < ilen; ++i){\n obj = data[i];\n item = {};\n item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n }\n return parsed;\n }\n updateRangeFromParsed(range, scale, parsed, stack) {\n super.updateRangeFromParsed(range, scale, parsed, stack);\n const custom = parsed._custom;\n if (custom && scale === this._cachedMeta.vScale) {\n range.min = Math.min(range.min, custom.min);\n range.max = Math.max(range.max, custom.max);\n }\n }\n getMaxOverflow() {\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const { iScale , vScale } = meta;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n return {\n label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n value\n };\n }\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n const meta = this._cachedMeta;\n meta.stack = this.getDataset().stack;\n }\n update(mode) {\n const meta = this._cachedMeta;\n this.updateElements(meta.data, 0, meta.data.length, mode);\n }\n updateElements(bars, start, count, mode) {\n const reset = mode === 'reset';\n const { index , _cachedMeta: { vScale } } = this;\n const base = vScale.getBasePixel();\n const horizontal = vScale.isHorizontal();\n const ruler = this._getRuler();\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n for(let i = start; i < start + count; i++){\n const parsed = this.getParsed(i);\n const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n base,\n head: base\n } : this._calculateBarValuePixels(i);\n const ipixels = this._calculateBarIndexPixels(i, ruler);\n const stack = (parsed._stacks || {})[vScale.axis];\n const properties = {\n horizontal,\n base: vpixels.base,\n enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n x: horizontal ? vpixels.head : ipixels.center,\n y: horizontal ? ipixels.center : vpixels.head,\n height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n }\n const options = properties.options || bars[i].options;\n setBorderSkipped(properties, options, stack, index);\n setInflateAmount(properties, options, ruler.ratio);\n this.updateElement(bars[i], i, properties, mode);\n }\n }\n _getStacks(last, dataIndex) {\n const { iScale } = this._cachedMeta;\n const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n const stacked = iScale.options.stacked;\n const stacks = [];\n const skipNull = (meta)=>{\n const parsed = meta.controller.getParsed(dataIndex);\n const val = parsed && parsed[meta.vScale.axis];\n if (isNullOrUndef(val) || isNaN(val)) {\n return true;\n }\n };\n for (const meta of metasets){\n if (dataIndex !== undefined && skipNull(meta)) {\n continue;\n }\n if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n stacks.push(meta.stack);\n }\n if (meta.index === last) {\n break;\n }\n }\n if (!stacks.length) {\n stacks.push(undefined);\n }\n return stacks;\n }\n _getStackCount(index) {\n return this._getStacks(undefined, index).length;\n }\n _getStackIndex(datasetIndex, name, dataIndex) {\n const stacks = this._getStacks(datasetIndex, dataIndex);\n const index = name !== undefined ? stacks.indexOf(name) : -1;\n return index === -1 ? stacks.length - 1 : index;\n }\n _getRuler() {\n const opts = this.options;\n const meta = this._cachedMeta;\n const iScale = meta.iScale;\n const pixels = [];\n let i, ilen;\n for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n }\n const barThickness = opts.barThickness;\n const min = barThickness || computeMinSampleSize(meta);\n return {\n min,\n pixels,\n start: iScale._startPixel,\n end: iScale._endPixel,\n stackCount: this._getStackCount(),\n scale: iScale,\n grouped: opts.grouped,\n ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n };\n }\n _calculateBarValuePixels(index) {\n const { _cachedMeta: { vScale , _stacked , index: datasetIndex } , options: { base: baseValue , minBarLength } } = this;\n const actualBase = baseValue || 0;\n const parsed = this.getParsed(index);\n const custom = parsed._custom;\n const floating = isFloatBar(custom);\n let value = parsed[vScale.axis];\n let start = 0;\n let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n let head, size;\n if (length !== value) {\n start = length - value;\n length = value;\n }\n if (floating) {\n value = custom.barStart;\n length = custom.barEnd - custom.barStart;\n if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n start = 0;\n }\n start += value;\n }\n const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n let base = vScale.getPixelForValue(startValue);\n if (this.chart.getDataVisibility(index)) {\n head = vScale.getPixelForValue(start + length);\n } else {\n head = base;\n }\n size = head - base;\n if (Math.abs(size) < minBarLength) {\n size = barSign(size, vScale, actualBase) * minBarLength;\n if (value === actualBase) {\n base -= size / 2;\n }\n const startPixel = vScale.getPixelForDecimal(0);\n const endPixel = vScale.getPixelForDecimal(1);\n const min = Math.min(startPixel, endPixel);\n const max = Math.max(startPixel, endPixel);\n base = Math.max(Math.min(base, max), min);\n head = base + size;\n if (_stacked && !floating) {\n parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n }\n }\n if (base === vScale.getPixelForValue(actualBase)) {\n const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n base += halfGrid;\n size -= halfGrid;\n }\n return {\n size,\n base,\n head,\n center: head + size / 2\n };\n }\n _calculateBarIndexPixels(index, ruler) {\n const scale = ruler.scale;\n const options = this.options;\n const skipNull = options.skipNull;\n const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n let center, size;\n if (ruler.grouped) {\n const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount) : computeFitCategoryTraits(index, ruler, options, stackCount);\n const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined);\n center = range.start + range.chunk * stackIndex + range.chunk / 2;\n size = Math.min(maxBarThickness, range.chunk * range.ratio);\n } else {\n center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n }\n return {\n base: center - size / 2,\n head: center + size / 2,\n center,\n size\n };\n }\n draw() {\n const meta = this._cachedMeta;\n const vScale = meta.vScale;\n const rects = meta.data;\n const ilen = rects.length;\n let i = 0;\n for(; i < ilen; ++i){\n if (this.getParsed(i)[vScale.axis] !== null) {\n rects[i].draw(this._ctx);\n }\n }\n }\n}\n\nclass BubbleController extends DatasetController {\n static id = 'bubble';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'borderWidth',\n 'radius'\n ]\n }\n }\n };\n static overrides = {\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n super.initialize();\n }\n parsePrimitiveData(meta, data, start, count) {\n const parsed = super.parsePrimitiveData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n }\n return parsed;\n }\n parseArrayData(meta, data, start, count) {\n const parsed = super.parseArrayData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n parseObjectData(meta, data, start, count) {\n const parsed = super.parseObjectData(meta, data, start, count);\n for(let i = 0; i < parsed.length; i++){\n const item = data[start + i];\n parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n }\n return parsed;\n }\n getMaxOverflow() {\n const data = this._cachedMeta.data;\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n const r = parsed._custom;\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n };\n }\n update(mode) {\n const points = this._cachedMeta.data;\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const parsed = !reset && this.getParsed(i);\n const properties = {};\n const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n properties.skip = isNaN(iPixel) || isNaN(vPixel);\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n if (reset) {\n properties.options.radius = 0;\n }\n }\n this.updateElement(point, i, properties, mode);\n }\n }\n resolveDataElementOptions(index, mode) {\n const parsed = this.getParsed(index);\n let values = super.resolveDataElementOptions(index, mode);\n if (values.$shared) {\n values = Object.assign({}, values, {\n $shared: false\n });\n }\n const radius = values.radius;\n if (mode !== 'active') {\n values.radius = 0;\n }\n values.radius += valueOrDefault(parsed && parsed._custom, radius);\n return values;\n }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n let ratioX = 1;\n let ratioY = 1;\n let offsetX = 0;\n let offsetY = 0;\n if (circumference < TAU) {\n const startAngle = rotation;\n const endAngle = startAngle + circumference;\n const startX = Math.cos(startAngle);\n const startY = Math.sin(startAngle);\n const endX = Math.cos(endAngle);\n const endY = Math.sin(endAngle);\n const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n const maxX = calcMax(0, startX, endX);\n const maxY = calcMax(HALF_PI, startY, endY);\n const minX = calcMin(PI, startX, endX);\n const minY = calcMin(PI + HALF_PI, startY, endY);\n ratioX = (maxX - minX) / 2;\n ratioY = (maxY - minY) / 2;\n offsetX = -(maxX + minX) / 2;\n offsetY = -(maxY + minY) / 2;\n }\n return {\n ratioX,\n ratioY,\n offsetX,\n offsetY\n };\n}\nclass DoughnutController extends DatasetController {\n static id = 'doughnut';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: false\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'circumference',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'startAngle',\n 'x',\n 'y',\n 'offset',\n 'borderWidth',\n 'spacing'\n ]\n }\n },\n cutout: '50%',\n rotation: 0,\n circumference: 360,\n radius: '100%',\n spacing: 0,\n indexAxis: 'r'\n };\n static descriptors = {\n _scriptable: (name)=>name !== 'spacing',\n _indexable: (name)=>name !== 'spacing'\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.enableOptionSharing = true;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.offsetX = undefined;\n this.offsetY = undefined;\n }\n linkScales() {}\n parse(start, count) {\n const data = this.getDataset().data;\n const meta = this._cachedMeta;\n if (this._parsing === false) {\n meta._parsed = data;\n } else {\n let getter = (i)=>+data[i];\n if (isObject(data[start])) {\n const { key ='value' } = this._parsing;\n getter = (i)=>+resolveObjectKey(data[i], key);\n }\n let i, ilen;\n for(i = start, ilen = start + count; i < ilen; ++i){\n meta._parsed[i] = getter(i);\n }\n }\n }\n _getRotation() {\n return toRadians(this.options.rotation - 90);\n }\n _getCircumference() {\n return toRadians(this.options.circumference);\n }\n _getRotationExtents() {\n let min = TAU;\n let max = -TAU;\n for(let i = 0; i < this.chart.data.datasets.length; ++i){\n if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n const controller = this.chart.getDatasetMeta(i).controller;\n const rotation = controller._getRotation();\n const circumference = controller._getCircumference();\n min = Math.min(min, rotation);\n max = Math.max(max, rotation + circumference);\n }\n }\n return {\n rotation: min,\n circumference: max - min\n };\n }\n update(mode) {\n const chart = this.chart;\n const { chartArea } = chart;\n const meta = this._cachedMeta;\n const arcs = meta.data;\n const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n const chartWeight = this._getRingWeight(this.index);\n const { circumference , rotation } = this._getRotationExtents();\n const { ratioX , ratioY , offsetX , offsetY } = getRatioAndOffset(rotation, circumference, cutout);\n const maxWidth = (chartArea.width - spacing) / ratioX;\n const maxHeight = (chartArea.height - spacing) / ratioY;\n const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n const outerRadius = toDimension(this.options.radius, maxRadius);\n const innerRadius = Math.max(outerRadius * cutout, 0);\n const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n this.offsetX = offsetX * outerRadius;\n this.offsetY = offsetY * outerRadius;\n meta.total = this.calculateTotal();\n this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n _circumference(i, reset) {\n const opts = this.options;\n const meta = this._cachedMeta;\n const circumference = this._getCircumference();\n if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n return 0;\n }\n return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const centerX = (chartArea.left + chartArea.right) / 2;\n const centerY = (chartArea.top + chartArea.bottom) / 2;\n const animateScale = reset && animationOpts.animateScale;\n const innerRadius = animateScale ? 0 : this.innerRadius;\n const outerRadius = animateScale ? 0 : this.outerRadius;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n let startAngle = this._getRotation();\n let i;\n for(i = 0; i < start; ++i){\n startAngle += this._circumference(i, reset);\n }\n for(i = start; i < start + count; ++i){\n const circumference = this._circumference(i, reset);\n const arc = arcs[i];\n const properties = {\n x: centerX + this.offsetX,\n y: centerY + this.offsetY,\n startAngle,\n endAngle: startAngle + circumference,\n circumference,\n outerRadius,\n innerRadius\n };\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n }\n startAngle += circumference;\n this.updateElement(arc, i, properties, mode);\n }\n }\n calculateTotal() {\n const meta = this._cachedMeta;\n const metaData = meta.data;\n let total = 0;\n let i;\n for(i = 0; i < metaData.length; i++){\n const value = meta._parsed[i];\n if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n total += Math.abs(value);\n }\n }\n return total;\n }\n calculateCircumference(value) {\n const total = this._cachedMeta.total;\n if (total > 0 && !isNaN(value)) {\n return TAU * (Math.abs(value) / total);\n }\n return 0;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index], chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n getMaxBorderWidth(arcs) {\n let max = 0;\n const chart = this.chart;\n let i, ilen, meta, controller, options;\n if (!arcs) {\n for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n if (chart.isDatasetVisible(i)) {\n meta = chart.getDatasetMeta(i);\n arcs = meta.data;\n controller = meta.controller;\n break;\n }\n }\n }\n if (!arcs) {\n return 0;\n }\n for(i = 0, ilen = arcs.length; i < ilen; ++i){\n options = controller.resolveDataElementOptions(i);\n if (options.borderAlign !== 'inner') {\n max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n }\n }\n return max;\n }\n getMaxOffset(arcs) {\n let max = 0;\n for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n const options = this.resolveDataElementOptions(i);\n max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n }\n return max;\n }\n _getRingWeightOffset(datasetIndex) {\n let ringWeightOffset = 0;\n for(let i = 0; i < datasetIndex; ++i){\n if (this.chart.isDatasetVisible(i)) {\n ringWeightOffset += this._getRingWeight(i);\n }\n }\n return ringWeightOffset;\n }\n _getRingWeight(datasetIndex) {\n return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n }\n _getVisibleDatasetWeightTotal() {\n return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n }\n}\n\nclass LineController extends DatasetController {\n static id = 'line';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n showLine: true,\n spanGaps: false\n };\n static overrides = {\n scales: {\n _index_: {\n type: 'category'\n },\n _value_: {\n type: 'linear'\n }\n }\n };\n initialize() {\n this.enableOptionSharing = true;\n this.supportsDecimation = true;\n super.initialize();\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { dataset: line , data: points = [] , _dataset } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n this.updateElements(points, start, count, mode);\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const { sharedOptions , includeOptions } = this._getSharedOptions(start, mode);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n const end = start + count;\n const pointsCount = points.length;\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = 0; i < pointsCount; ++i){\n const point = points[i];\n const properties = directUpdate ? point : {};\n if (i < start || i >= end) {\n properties.skip = true;\n continue;\n }\n const parsed = this.getParsed(i);\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n const data = meta.data || [];\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n draw() {\n const meta = this._cachedMeta;\n meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n super.draw();\n }\n}\n\nclass PolarAreaController extends DatasetController {\n static id = 'polarArea';\n static defaults = {\n dataElementType: 'arc',\n animation: {\n animateRotate: true,\n animateScale: true\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ]\n }\n },\n indexAxis: 'r',\n startAngle: 0\n };\n static overrides = {\n aspectRatio: 1,\n plugins: {\n legend: {\n labels: {\n generateLabels (chart) {\n const data = chart.data;\n if (data.labels.length && data.datasets.length) {\n const { labels: { pointStyle , color } } = chart.legend.options;\n return data.labels.map((label, i)=>{\n const meta = chart.getDatasetMeta(0);\n const style = meta.controller.getStyle(i);\n return {\n text: label,\n fillStyle: style.backgroundColor,\n strokeStyle: style.borderColor,\n fontColor: color,\n lineWidth: style.borderWidth,\n pointStyle: pointStyle,\n hidden: !chart.getDataVisibility(i),\n index: i\n };\n });\n }\n return [];\n }\n },\n onClick (e, legendItem, legend) {\n legend.chart.toggleDataVisibility(legendItem.index);\n legend.chart.update();\n }\n }\n },\n scales: {\n r: {\n type: 'radialLinear',\n angleLines: {\n display: false\n },\n beginAtZero: true,\n grid: {\n circular: true\n },\n pointLabels: {\n display: false\n },\n startAngle: 0\n }\n }\n };\n constructor(chart, datasetIndex){\n super(chart, datasetIndex);\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n }\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const chart = this.chart;\n const labels = chart.data.labels || [];\n const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n return {\n label: labels[index] || '',\n value\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const arcs = this._cachedMeta.data;\n this._updateRadius();\n this.updateElements(arcs, 0, arcs.length, mode);\n }\n getMinMax() {\n const meta = this._cachedMeta;\n const range = {\n min: Number.POSITIVE_INFINITY,\n max: Number.NEGATIVE_INFINITY\n };\n meta.data.forEach((element, index)=>{\n const parsed = this.getParsed(index).r;\n if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n if (parsed < range.min) {\n range.min = parsed;\n }\n if (parsed > range.max) {\n range.max = parsed;\n }\n }\n });\n return range;\n }\n _updateRadius() {\n const chart = this.chart;\n const chartArea = chart.chartArea;\n const opts = chart.options;\n const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n const outerRadius = Math.max(minSize / 2, 0);\n const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n this.outerRadius = outerRadius - radiusLength * this.index;\n this.innerRadius = this.outerRadius - radiusLength;\n }\n updateElements(arcs, start, count, mode) {\n const reset = mode === 'reset';\n const chart = this.chart;\n const opts = chart.options;\n const animationOpts = opts.animation;\n const scale = this._cachedMeta.rScale;\n const centerX = scale.xCenter;\n const centerY = scale.yCenter;\n const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n let angle = datasetStartAngle;\n let i;\n const defaultAngle = 360 / this.countVisibleElements();\n for(i = 0; i < start; ++i){\n angle += this._computeAngle(i, mode, defaultAngle);\n }\n for(i = start; i < start + count; i++){\n const arc = arcs[i];\n let startAngle = angle;\n let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n angle = endAngle;\n if (reset) {\n if (animationOpts.animateScale) {\n outerRadius = 0;\n }\n if (animationOpts.animateRotate) {\n startAngle = endAngle = datasetStartAngle;\n }\n }\n const properties = {\n x: centerX,\n y: centerY,\n innerRadius: 0,\n outerRadius,\n startAngle,\n endAngle,\n options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n };\n this.updateElement(arc, i, properties, mode);\n }\n }\n countVisibleElements() {\n const meta = this._cachedMeta;\n let count = 0;\n meta.data.forEach((element, index)=>{\n if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n count++;\n }\n });\n return count;\n }\n _computeAngle(index, mode, defaultAngle) {\n return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n }\n}\n\nclass PieController extends DoughnutController {\n static id = 'pie';\n static defaults = {\n cutout: 0,\n rotation: 0,\n circumference: 360,\n radius: '100%'\n };\n}\n\nclass RadarController extends DatasetController {\n static id = 'radar';\n static defaults = {\n datasetElementType: 'line',\n dataElementType: 'point',\n indexAxis: 'r',\n showLine: true,\n elements: {\n line: {\n fill: 'start'\n }\n }\n };\n static overrides = {\n aspectRatio: 1,\n scales: {\n r: {\n type: 'radialLinear'\n }\n }\n };\n getLabelAndValue(index) {\n const vScale = this._cachedMeta.vScale;\n const parsed = this.getParsed(index);\n return {\n label: vScale.getLabels()[index],\n value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n };\n }\n parseObjectData(meta, data, start, count) {\n return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n }\n update(mode) {\n const meta = this._cachedMeta;\n const line = meta.dataset;\n const points = meta.data || [];\n const labels = meta.iScale.getLabels();\n line.points = points;\n if (mode !== 'resize') {\n const options = this.resolveDatasetElementOptions(mode);\n if (!this.options.showLine) {\n options.borderWidth = 0;\n }\n const properties = {\n _loop: true,\n _fullLoop: labels.length === points.length,\n options\n };\n this.updateElement(line, undefined, properties, mode);\n }\n this.updateElements(points, 0, points.length, mode);\n }\n updateElements(points, start, count, mode) {\n const scale = this._cachedMeta.rScale;\n const reset = mode === 'reset';\n for(let i = start; i < start + count; i++){\n const point = points[i];\n const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n const x = reset ? scale.xCenter : pointPosition.x;\n const y = reset ? scale.yCenter : pointPosition.y;\n const properties = {\n x,\n y,\n angle: pointPosition.angle,\n skip: isNaN(x) || isNaN(y),\n options\n };\n this.updateElement(point, i, properties, mode);\n }\n }\n}\n\nclass ScatterController extends DatasetController {\n static id = 'scatter';\n static defaults = {\n datasetElementType: false,\n dataElementType: 'point',\n showLine: false,\n fill: false\n };\n static overrides = {\n interaction: {\n mode: 'point'\n },\n scales: {\n x: {\n type: 'linear'\n },\n y: {\n type: 'linear'\n }\n }\n };\n getLabelAndValue(index) {\n const meta = this._cachedMeta;\n const labels = this.chart.data.labels || [];\n const { xScale , yScale } = meta;\n const parsed = this.getParsed(index);\n const x = xScale.getLabelForValue(parsed.x);\n const y = yScale.getLabelForValue(parsed.y);\n return {\n label: labels[index] || '',\n value: '(' + x + ', ' + y + ')'\n };\n }\n update(mode) {\n const meta = this._cachedMeta;\n const { data: points = [] } = meta;\n const animationsDisabled = this.chart._animationsDisabled;\n let { start , count } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n this._drawStart = start;\n this._drawCount = count;\n if (_scaleRangesChanged(meta)) {\n start = 0;\n count = points.length;\n }\n if (this.options.showLine) {\n const { dataset: line , _dataset } = meta;\n line._chart = this.chart;\n line._datasetIndex = this.index;\n line._decimated = !!_dataset._decimated;\n line.points = points;\n const options = this.resolveDatasetElementOptions(mode);\n options.segment = this.options.segment;\n this.updateElement(line, undefined, {\n animated: !animationsDisabled,\n options\n }, mode);\n }\n this.updateElements(points, start, count, mode);\n }\n addElements() {\n const { showLine } = this.options;\n if (!this.datasetElementType && showLine) {\n this.datasetElementType = this.chart.registry.getElement('line');\n }\n super.addElements();\n }\n updateElements(points, start, count, mode) {\n const reset = mode === 'reset';\n const { iScale , vScale , _stacked , _dataset } = this._cachedMeta;\n const firstOpts = this.resolveDataElementOptions(start, mode);\n const sharedOptions = this.getSharedOptions(firstOpts);\n const includeOptions = this.includeOptions(mode, sharedOptions);\n const iAxis = iScale.axis;\n const vAxis = vScale.axis;\n const { spanGaps , segment } = this.options;\n const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n let prevParsed = start > 0 && this.getParsed(start - 1);\n for(let i = start; i < start + count; ++i){\n const point = points[i];\n const parsed = this.getParsed(i);\n const properties = directUpdate ? point : {};\n const nullData = isNullOrUndef(parsed[vAxis]);\n const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n if (segment) {\n properties.parsed = parsed;\n properties.raw = _dataset.data[i];\n }\n if (includeOptions) {\n properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n }\n if (!directUpdate) {\n this.updateElement(point, i, properties, mode);\n }\n prevParsed = parsed;\n }\n this.updateSharedOptions(sharedOptions, mode, firstOpts);\n }\n getMaxOverflow() {\n const meta = this._cachedMeta;\n const data = meta.data || [];\n if (!this.options.showLine) {\n let max = 0;\n for(let i = data.length - 1; i >= 0; --i){\n max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n }\n return max > 0 && max;\n }\n const dataset = meta.dataset;\n const border = dataset.options && dataset.options.borderWidth || 0;\n if (!data.length) {\n return border;\n }\n const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n return Math.max(border, firstPoint, lastPoint) / 2;\n }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPolarAreaController: PolarAreaController,\nPieController: PieController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n /**\n * Override default date adapter methods.\n * Accepts type parameter to define options type.\n * @example\n * Chart._adapters._date.override<{myAdapterOption: string}>({\n * init() {\n * console.log(this.options.myAdapterOption);\n * }\n * })\n */ static override(members) {\n Object.assign(DateAdapterBase.prototype, members);\n }\n constructor(options){\n this.options = options || {};\n }\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n init() {}\n formats() {\n return abstract();\n }\n parse() {\n return abstract();\n }\n format() {\n return abstract();\n }\n add() {\n return abstract();\n }\n diff() {\n return abstract();\n }\n startOf() {\n return abstract();\n }\n endOf() {\n return abstract();\n }\n}\nvar adapters = {\n _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n const { controller , data , _sorted } = metaset;\n const iScale = controller._cachedMeta.iScale;\n if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n if (!intersect) {\n return lookupMethod(data, axis, value);\n } else if (controller._sharedOptions) {\n const el = data[0];\n const range = typeof el.getRange === 'function' && el.getRange(axis);\n if (range) {\n const start = lookupMethod(data, axis, value - range);\n const end = lookupMethod(data, axis, value + range);\n return {\n lo: start.lo,\n hi: end.hi\n };\n }\n }\n }\n return {\n lo: 0,\n hi: data.length - 1\n };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n const metasets = chart.getSortedVisibleDatasetMetas();\n const value = position[axis];\n for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n const { index , data } = metasets[i];\n const { lo , hi } = binarySearch(metasets[i], axis, value, intersect);\n for(let j = lo; j <= hi; ++j){\n const element = data[j];\n if (!element.skip) {\n handler(element, index, j);\n }\n }\n }\n}\n function getDistanceMetricForAxis(axis) {\n const useX = axis.indexOf('x') !== -1;\n const useY = axis.indexOf('y') !== -1;\n return function(pt1, pt2) {\n const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n const items = [];\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return items;\n }\n const evaluationFunc = function(element, datasetIndex, index) {\n if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n return;\n }\n if (element.inRange(position.x, position.y, useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n };\n evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n let items = [];\n function evaluationFunc(element, datasetIndex, index) {\n const { startAngle , endAngle } = element.getProps([\n 'startAngle',\n 'endAngle'\n ], useFinalPosition);\n const { angle } = getAngleFromPoint(element, {\n x: position.x,\n y: position.y\n });\n if (_angleBetween(angle, startAngle, endAngle)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n let items = [];\n const distanceMetric = getDistanceMetricForAxis(axis);\n let minDistance = Number.POSITIVE_INFINITY;\n function evaluationFunc(element, datasetIndex, index) {\n const inRange = element.inRange(position.x, position.y, useFinalPosition);\n if (intersect && !inRange) {\n return;\n }\n const center = element.getCenterPoint(useFinalPosition);\n const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n if (!pointInArea && !inRange) {\n return;\n }\n const distance = distanceMetric(position, center);\n if (distance < minDistance) {\n items = [\n {\n element,\n datasetIndex,\n index\n }\n ];\n minDistance = distance;\n } else if (distance === minDistance) {\n items.push({\n element,\n datasetIndex,\n index\n });\n }\n }\n evaluateInteractionItems(chart, axis, position, evaluationFunc);\n return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n if (!includeInvisible && !chart.isPointInArea(position)) {\n return [];\n }\n return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n const items = [];\n const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n let intersectsItem = false;\n evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n if (element[rangeMethod](position[axis], useFinalPosition)) {\n items.push({\n element,\n datasetIndex,\n index\n });\n intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n }\n });\n if (intersect && !intersectsItem) {\n return [];\n }\n return items;\n}\n var Interaction = {\n evaluateInteractionItems,\n modes: {\n index (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'x';\n const includeInvisible = options.includeInvisible || false;\n const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n const elements = [];\n if (!items.length) {\n return [];\n }\n chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n const index = items[0].index;\n const element = meta.data[index];\n if (element && !element.skip) {\n elements.push({\n element,\n datasetIndex: meta.index,\n index\n });\n }\n });\n return elements;\n },\n dataset (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n if (items.length > 0) {\n const datasetIndex = items[0].datasetIndex;\n const data = chart.getDatasetMeta(datasetIndex).data;\n items = [];\n for(let i = 0; i < data.length; ++i){\n items.push({\n element: data[i],\n datasetIndex,\n index: i\n });\n }\n }\n return items;\n },\n point (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n },\n nearest (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n const axis = options.axis || 'xy';\n const includeInvisible = options.includeInvisible || false;\n return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n },\n x (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n },\n y (chart, e, options, useFinalPosition) {\n const position = getRelativePosition(e, chart);\n return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n }\n }\n};\n\nconst STATIC_POSITIONS = [\n 'left',\n 'top',\n 'right',\n 'bottom'\n];\nfunction filterByPosition(array, position) {\n return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n return array.sort((a, b)=>{\n const v0 = reverse ? b : a;\n const v1 = reverse ? a : b;\n return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n });\n}\nfunction wrapBoxes(boxes) {\n const layoutBoxes = [];\n let i, ilen, box, pos, stack, stackWeight;\n for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n box = boxes[i];\n ({ position: pos , options: { stack , stackWeight =1 } } = box);\n layoutBoxes.push({\n index: i,\n box,\n pos,\n horizontal: box.isHorizontal(),\n weight: box.weight,\n stack: stack && pos + stack,\n stackWeight\n });\n }\n return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n const stacks = {};\n for (const wrap of layouts){\n const { stack , pos , stackWeight } = wrap;\n if (!stack || !STATIC_POSITIONS.includes(pos)) {\n continue;\n }\n const _stack = stacks[stack] || (stacks[stack] = {\n count: 0,\n placed: 0,\n weight: 0,\n size: 0\n });\n _stack.count++;\n _stack.weight += stackWeight;\n }\n return stacks;\n}\n function setLayoutDims(layouts, params) {\n const stacks = buildStacks(layouts);\n const { vBoxMaxWidth , hBoxMaxHeight } = params;\n let i, ilen, layout;\n for(i = 0, ilen = layouts.length; i < ilen; ++i){\n layout = layouts[i];\n const { fullSize } = layout.box;\n const stack = stacks[layout.stack];\n const factor = stack && layout.stackWeight / stack.weight;\n if (layout.horizontal) {\n layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n layout.height = hBoxMaxHeight;\n } else {\n layout.width = vBoxMaxWidth;\n layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n }\n }\n return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n const layoutBoxes = wrapBoxes(boxes);\n const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n return {\n fullSize,\n leftAndTop: left.concat(top),\n rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n vertical: left.concat(right).concat(centerVertical),\n horizontal: top.concat(bottom).concat(centerHorizontal)\n };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n const { pos , box } = layout;\n const maxPadding = chartArea.maxPadding;\n if (!isObject(pos)) {\n if (layout.size) {\n chartArea[pos] -= layout.size;\n }\n const stack = stacks[layout.stack] || {\n size: 0,\n count: 1\n };\n stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n layout.size = stack.size / stack.count;\n chartArea[pos] += layout.size;\n }\n if (box.getPadding) {\n updateMaxPadding(maxPadding, box.getPadding());\n }\n const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n const widthChanged = newWidth !== chartArea.w;\n const heightChanged = newHeight !== chartArea.h;\n chartArea.w = newWidth;\n chartArea.h = newHeight;\n return layout.horizontal ? {\n same: widthChanged,\n other: heightChanged\n } : {\n same: heightChanged,\n other: widthChanged\n };\n}\nfunction handleMaxPadding(chartArea) {\n const maxPadding = chartArea.maxPadding;\n function updatePos(pos) {\n const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n chartArea[pos] += change;\n return change;\n }\n chartArea.y += updatePos('top');\n chartArea.x += updatePos('left');\n updatePos('right');\n updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n const maxPadding = chartArea.maxPadding;\n function marginForPositions(positions) {\n const margin = {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n };\n positions.forEach((pos)=>{\n margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n });\n return margin;\n }\n return horizontal ? marginForPositions([\n 'left',\n 'right'\n ]) : marginForPositions([\n 'top',\n 'bottom'\n ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n const refitBoxes = [];\n let i, ilen, layout, box, refit, changed;\n for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n layout = boxes[i];\n box = layout.box;\n box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n const { same , other } = updateDims(chartArea, params, layout, stacks);\n refit |= same && refitBoxes.length;\n changed = changed || other;\n if (!box.fullSize) {\n refitBoxes.push(layout);\n }\n }\n return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n box.top = top;\n box.left = left;\n box.right = left + width;\n box.bottom = top + height;\n box.width = width;\n box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n const userPadding = params.padding;\n let { x , y } = chartArea;\n for (const layout of boxes){\n const box = layout.box;\n const stack = stacks[layout.stack] || {\n count: 1,\n placed: 0,\n weight: 1\n };\n const weight = layout.stackWeight / stack.weight || 1;\n if (layout.horizontal) {\n const width = chartArea.w * weight;\n const height = stack.size || box.height;\n if (defined(stack.start)) {\n y = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n } else {\n setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n }\n stack.start = y;\n stack.placed += width;\n y = box.bottom;\n } else {\n const height1 = chartArea.h * weight;\n const width1 = stack.size || box.width;\n if (defined(stack.start)) {\n x = stack.start;\n }\n if (box.fullSize) {\n setBoxDims(box, x, userPadding.top, width1, params.outerHeight - userPadding.bottom - userPadding.top);\n } else {\n setBoxDims(box, x, chartArea.top + stack.placed, width1, height1);\n }\n stack.start = x;\n stack.placed += height1;\n x = box.right;\n }\n }\n chartArea.x = x;\n chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n if (!chart.boxes) {\n chart.boxes = [];\n }\n item.fullSize = item.fullSize || false;\n item.position = item.position || 'top';\n item.weight = item.weight || 0;\n item._layers = item._layers || function() {\n return [\n {\n z: 0,\n draw (chartArea) {\n item.draw(chartArea);\n }\n }\n ];\n };\n chart.boxes.push(item);\n },\n removeBox (chart, layoutItem) {\n const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n if (index !== -1) {\n chart.boxes.splice(index, 1);\n }\n },\n configure (chart, item, options) {\n item.fullSize = options.fullSize;\n item.position = options.position;\n item.weight = options.weight;\n },\n update (chart, width, height, minPadding) {\n if (!chart) {\n return;\n }\n const padding = toPadding(chart.options.layout.padding);\n const availableWidth = Math.max(width - padding.width, 0);\n const availableHeight = Math.max(height - padding.height, 0);\n const boxes = buildLayoutBoxes(chart.boxes);\n const verticalBoxes = boxes.vertical;\n const horizontalBoxes = boxes.horizontal;\n each(chart.boxes, (box)=>{\n if (typeof box.beforeLayout === 'function') {\n box.beforeLayout();\n }\n });\n const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n const params = Object.freeze({\n outerWidth: width,\n outerHeight: height,\n padding,\n availableWidth,\n availableHeight,\n vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n hBoxMaxHeight: availableHeight / 2\n });\n const maxPadding = Object.assign({}, padding);\n updateMaxPadding(maxPadding, toPadding(minPadding));\n const chartArea = Object.assign({\n maxPadding,\n w: availableWidth,\n h: availableHeight,\n x: padding.left,\n y: padding.top\n }, padding);\n const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n fitBoxes(boxes.fullSize, chartArea, params, stacks);\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n fitBoxes(verticalBoxes, chartArea, params, stacks);\n }\n handleMaxPadding(chartArea);\n placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n chartArea.x += chartArea.w;\n chartArea.y += chartArea.h;\n placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n chart.chartArea = {\n left: chartArea.left,\n top: chartArea.top,\n right: chartArea.left + chartArea.w,\n bottom: chartArea.top + chartArea.h,\n height: chartArea.h,\n width: chartArea.w\n };\n each(boxes.chartArea, (layout)=>{\n const box = layout.box;\n Object.assign(box, chart.chartArea);\n box.update(chartArea.w, chartArea.h, {\n left: 0,\n top: 0,\n right: 0,\n bottom: 0\n });\n });\n }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n return false;\n }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n return 1;\n }\n getMaximumSize(element, width, height, aspectRatio) {\n width = Math.max(0, width || element.width);\n height = height || element.height;\n return {\n width,\n height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n };\n }\n isAttached(canvas) {\n return true;\n }\n updateConfig(config) {\n }\n}\n\nclass BasicPlatform extends BasePlatform {\n acquireContext(item) {\n return item && item.getContext && item.getContext('2d') || null;\n }\n updateConfig(config) {\n config.options.animation = false;\n }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n touchstart: 'mousedown',\n touchmove: 'mousemove',\n touchend: 'mouseup',\n pointerenter: 'mouseenter',\n pointerdown: 'mousedown',\n pointermove: 'mousemove',\n pointerup: 'mouseup',\n pointerleave: 'mouseout',\n pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n const style = canvas.style;\n const renderHeight = canvas.getAttribute('height');\n const renderWidth = canvas.getAttribute('width');\n canvas[EXPANDO_KEY] = {\n initial: {\n height: renderHeight,\n width: renderWidth,\n style: {\n display: style.display,\n height: style.height,\n width: style.width\n }\n }\n };\n style.display = style.display || 'block';\n style.boxSizing = style.boxSizing || 'border-box';\n if (isNullOrEmpty(renderWidth)) {\n const displayWidth = readUsedSize(canvas, 'width');\n if (displayWidth !== undefined) {\n canvas.width = displayWidth;\n }\n }\n if (isNullOrEmpty(renderHeight)) {\n if (canvas.style.height === '') {\n canvas.height = canvas.width / (aspectRatio || 2);\n } else {\n const displayHeight = readUsedSize(canvas, 'height');\n if (displayHeight !== undefined) {\n canvas.height = displayHeight;\n }\n }\n }\n return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n passive: true\n} : false;\nfunction addListener(node, type, listener) {\n node.addEventListener(type, listener, eventListenerOptions);\n}\nfunction removeListener(chart, type, listener) {\n chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n}\nfunction fromNativeEvent(event, chart) {\n const type = EVENT_TYPES[event.type] || event.type;\n const { x , y } = getRelativePosition(event, chart);\n return {\n type,\n chart,\n native: event,\n x: x !== undefined ? x : null,\n y: y !== undefined ? y : null\n };\n}\nfunction nodeListContains(nodeList, canvas) {\n for (const node of nodeList){\n if (node === canvas || node.contains(canvas)) {\n return true;\n }\n }\n}\nfunction createAttachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const observer = new MutationObserver((entries)=>{\n let trigger = false;\n for (const entry of entries){\n trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n }\n if (trigger) {\n listener();\n }\n });\n observer.observe(document, {\n childList: true,\n subtree: true\n });\n return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n const dpr = window.devicePixelRatio;\n if (dpr === oldDevicePixelRatio) {\n return;\n }\n oldDevicePixelRatio = dpr;\n drpListeningCharts.forEach((resize, chart)=>{\n if (chart.currentDevicePixelRatio !== dpr) {\n resize();\n }\n });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n if (!drpListeningCharts.size) {\n window.addEventListener('resize', onWindowResize);\n }\n drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n drpListeningCharts.delete(chart);\n if (!drpListeningCharts.size) {\n window.removeEventListener('resize', onWindowResize);\n }\n}\nfunction createResizeObserver(chart, type, listener) {\n const canvas = chart.canvas;\n const container = canvas && _getParentNode(canvas);\n if (!container) {\n return;\n }\n const resize = throttled((width, height)=>{\n const w = container.clientWidth;\n listener(width, height);\n if (w < container.clientWidth) {\n listener();\n }\n }, window);\n const observer = new ResizeObserver((entries)=>{\n const entry = entries[0];\n const width = entry.contentRect.width;\n const height = entry.contentRect.height;\n if (width === 0 && height === 0) {\n return;\n }\n resize(width, height);\n });\n observer.observe(container);\n listenDevicePixelRatioChanges(chart, resize);\n return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n if (observer) {\n observer.disconnect();\n }\n if (type === 'resize') {\n unlistenDevicePixelRatioChanges(chart);\n }\n}\nfunction createProxyAndListen(chart, type, listener) {\n const canvas = chart.canvas;\n const proxy = throttled((event)=>{\n if (chart.ctx !== null) {\n listener(fromNativeEvent(event, chart));\n }\n }, chart);\n addListener(canvas, type, proxy);\n return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n const context = canvas && canvas.getContext && canvas.getContext('2d');\n if (context && context.canvas === canvas) {\n initCanvas(canvas, aspectRatio);\n return context;\n }\n return null;\n }\n releaseContext(context) {\n const canvas = context.canvas;\n if (!canvas[EXPANDO_KEY]) {\n return false;\n }\n const initial = canvas[EXPANDO_KEY].initial;\n [\n 'height',\n 'width'\n ].forEach((prop)=>{\n const value = initial[prop];\n if (isNullOrUndef(value)) {\n canvas.removeAttribute(prop);\n } else {\n canvas.setAttribute(prop, value);\n }\n });\n const style = initial.style || {};\n Object.keys(style).forEach((key)=>{\n canvas.style[key] = style[key];\n });\n canvas.width = canvas.width;\n delete canvas[EXPANDO_KEY];\n return true;\n }\n addEventListener(chart, type, listener) {\n this.removeEventListener(chart, type);\n const proxies = chart.$proxies || (chart.$proxies = {});\n const handlers = {\n attach: createAttachObserver,\n detach: createDetachObserver,\n resize: createResizeObserver\n };\n const handler = handlers[type] || createProxyAndListen;\n proxies[type] = handler(chart, type, listener);\n }\n removeEventListener(chart, type) {\n const proxies = chart.$proxies || (chart.$proxies = {});\n const proxy = proxies[type];\n if (!proxy) {\n return;\n }\n const handlers = {\n attach: releaseObserver,\n detach: releaseObserver,\n resize: releaseObserver\n };\n const handler = handlers[type] || removeListener;\n handler(chart, type, proxy);\n proxies[type] = undefined;\n }\n getDevicePixelRatio() {\n return window.devicePixelRatio;\n }\n getMaximumSize(canvas, width, height, aspectRatio) {\n return getMaximumSize(canvas, width, height, aspectRatio);\n }\n isAttached(canvas) {\n const container = _getParentNode(canvas);\n return !!(container && container.isConnected);\n }\n}\n\nfunction _detectPlatform(canvas) {\n if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return BasicPlatform;\n }\n return DomPlatform;\n}\n\nclass Element {\n static defaults = {};\n static defaultRoutes = undefined;\n active = false;\n tooltipPosition(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n hasValue() {\n return isNumber(this.x) && isNumber(this.y);\n }\n getProps(props, final) {\n const anims = this.$animations;\n if (!final || !anims) {\n // let's not create an object, if not needed\n return this;\n }\n const ret = {};\n props.forEach((prop)=>{\n ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n });\n return ret;\n }\n}\n\nfunction autoSkip(scale, ticks) {\n const tickOpts = scale.options.ticks;\n const determinedMaxTicks = determineMaxTicks(scale);\n const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n const numMajorIndices = majorIndices.length;\n const first = majorIndices[0];\n const last = majorIndices[numMajorIndices - 1];\n const newTicks = [];\n if (numMajorIndices > ticksLimit) {\n skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n return newTicks;\n }\n const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n if (numMajorIndices > 0) {\n let i, ilen;\n const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n }\n skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n return newTicks;\n }\n skip(ticks, newTicks, spacing);\n return newTicks;\n}\nfunction determineMaxTicks(scale) {\n const offset = scale.options.offset;\n const tickLength = scale._tickSize();\n const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n const maxChart = scale._maxLength / tickLength;\n return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n const evenMajorSpacing = getEvenSpacing(majorIndices);\n const spacing = ticks.length / ticksLimit;\n if (!evenMajorSpacing) {\n return Math.max(spacing, 1);\n }\n const factors = _factorize(evenMajorSpacing);\n for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n const factor = factors[i];\n if (factor > spacing) {\n return factor;\n }\n }\n return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n const result = [];\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (ticks[i].major) {\n result.push(i);\n }\n }\n return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n let count = 0;\n let next = majorIndices[0];\n let i;\n spacing = Math.ceil(spacing);\n for(i = 0; i < ticks.length; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = majorIndices[count * spacing];\n }\n }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n const start = valueOrDefault(majorStart, 0);\n const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n let count = 0;\n let length, i, next;\n spacing = Math.ceil(spacing);\n if (majorEnd) {\n length = majorEnd - majorStart;\n spacing = length / Math.floor(length / spacing);\n }\n next = start;\n while(next < 0){\n count++;\n next = Math.round(start + count * spacing);\n }\n for(i = Math.max(start, 0); i < end; i++){\n if (i === next) {\n newTicks.push(ticks[i]);\n count++;\n next = Math.round(start + count * spacing);\n }\n }\n}\n function getEvenSpacing(arr) {\n const len = arr.length;\n let i, diff;\n if (len < 2) {\n return false;\n }\n for(diff = arr[0], i = 1; i < len; ++i){\n if (arr[i] - arr[i - 1] !== diff) {\n return false;\n }\n }\n return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n const result = [];\n const increment = arr.length / numItems;\n const len = arr.length;\n let i = 0;\n for(; i < len; i += increment){\n result.push(arr[Math.floor(i)]);\n }\n return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n const length = scale.ticks.length;\n const validIndex = Math.min(index, length - 1);\n const start = scale._startPixel;\n const end = scale._endPixel;\n const epsilon = 1e-6;\n let lineValue = scale.getPixelForTick(validIndex);\n let offset;\n if (offsetGridLines) {\n if (length === 1) {\n offset = Math.max(lineValue - start, end - lineValue);\n } else if (index === 0) {\n offset = (scale.getPixelForTick(1) - lineValue) / 2;\n } else {\n offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n }\n lineValue += validIndex < index ? offset : -offset;\n if (lineValue < start - epsilon || lineValue > end + epsilon) {\n return;\n }\n }\n return lineValue;\n}\n function garbageCollect(caches, length) {\n each(caches, (cache)=>{\n const gc = cache.gc;\n const gcLen = gc.length / 2;\n let i;\n if (gcLen > length) {\n for(i = 0; i < gcLen; ++i){\n delete cache.data[gc[i]];\n }\n gc.splice(0, gcLen);\n }\n });\n}\n function getTickMarkLength(options) {\n return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n if (!options.display) {\n return 0;\n }\n const font = toFont(options.font, fallback);\n const padding = toPadding(options.padding);\n const lines = isArray(options.text) ? options.text.length : 1;\n return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n return createContext(parent, {\n scale,\n type: 'scale'\n });\n}\nfunction createTickContext(parent, index, tick) {\n return createContext(parent, {\n tick,\n index,\n type: 'tick'\n });\n}\nfunction titleAlign(align, position, reverse) {\n let ret = _toLeftRightCenter(align);\n if (reverse && position !== 'right' || !reverse && position === 'right') {\n ret = reverseAlign(ret);\n }\n return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n const { top , left , bottom , right , chart } = scale;\n const { chartArea , scales } = chart;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n const height = bottom - top;\n const width = right - left;\n if (scale.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n } else if (position === 'center') {\n titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n } else {\n titleY = offsetFromEdge(scale, position, offset);\n }\n maxWidth = right - left;\n } else {\n if (isObject(position)) {\n const positionAxisID1 = Object.keys(position)[0];\n const value1 = position[positionAxisID1];\n titleX = scales[positionAxisID1].getPixelForValue(value1) - width + offset;\n } else if (position === 'center') {\n titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n } else {\n titleX = offsetFromEdge(scale, position, offset);\n }\n titleY = _alignStartEnd(align, bottom, top);\n rotation = position === 'left' ? -HALF_PI : HALF_PI;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n}\nclass Scale extends Element {\n constructor(cfg){\n super();\n this.id = cfg.id;\n this.type = cfg.type;\n this.options = undefined;\n this.ctx = cfg.ctx;\n this.chart = cfg.chart;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this._margins = {\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n };\n this.maxWidth = undefined;\n this.maxHeight = undefined;\n this.paddingTop = undefined;\n this.paddingBottom = undefined;\n this.paddingLeft = undefined;\n this.paddingRight = undefined;\n this.axis = undefined;\n this.labelRotation = undefined;\n this.min = undefined;\n this.max = undefined;\n this._range = undefined;\n this.ticks = [];\n this._gridLineItems = null;\n this._labelItems = null;\n this._labelSizes = null;\n this._length = 0;\n this._maxLength = 0;\n this._longestTextCache = {};\n this._startPixel = undefined;\n this._endPixel = undefined;\n this._reversePixels = false;\n this._userMax = undefined;\n this._userMin = undefined;\n this._suggestedMax = undefined;\n this._suggestedMin = undefined;\n this._ticksLength = 0;\n this._borderValue = 0;\n this._cache = {};\n this._dataLimitsCached = false;\n this.$context = undefined;\n }\n init(options) {\n this.options = options.setContext(this.getContext());\n this.axis = options.axis;\n this._userMin = this.parse(options.min);\n this._userMax = this.parse(options.max);\n this._suggestedMin = this.parse(options.suggestedMin);\n this._suggestedMax = this.parse(options.suggestedMax);\n }\n parse(raw, index) {\n return raw;\n }\n getUserBounds() {\n let { _userMin , _userMax , _suggestedMin , _suggestedMax } = this;\n _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n return {\n min: finiteOrDefault(_userMin, _suggestedMin),\n max: finiteOrDefault(_userMax, _suggestedMax),\n minDefined: isNumberFinite(_userMin),\n maxDefined: isNumberFinite(_userMax)\n };\n }\n getMinMax(canStack) {\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n let range;\n if (minDefined && maxDefined) {\n return {\n min,\n max\n };\n }\n const metas = this.getMatchingVisibleMetas();\n for(let i = 0, ilen = metas.length; i < ilen; ++i){\n range = metas[i].controller.getMinMax(this, canStack);\n if (!minDefined) {\n min = Math.min(min, range.min);\n }\n if (!maxDefined) {\n max = Math.max(max, range.max);\n }\n }\n min = maxDefined && min > max ? max : min;\n max = minDefined && min > max ? min : max;\n return {\n min: finiteOrDefault(min, finiteOrDefault(max, min)),\n max: finiteOrDefault(max, finiteOrDefault(min, max))\n };\n }\n getPadding() {\n return {\n left: this.paddingLeft || 0,\n top: this.paddingTop || 0,\n right: this.paddingRight || 0,\n bottom: this.paddingBottom || 0\n };\n }\n getTicks() {\n return this.ticks;\n }\n getLabels() {\n const data = this.chart.data;\n return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n }\n getLabelItems(chartArea = this.chart.chartArea) {\n const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n return items;\n }\n beforeLayout() {\n this._cache = {};\n this._dataLimitsCached = false;\n }\n beforeUpdate() {\n callback(this.options.beforeUpdate, [\n this\n ]);\n }\n update(maxWidth, maxHeight, margins) {\n const { beginAtZero , grace , ticks: tickOpts } = this.options;\n const sampleSize = tickOpts.sampleSize;\n this.beforeUpdate();\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins = Object.assign({\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, margins);\n this.ticks = null;\n this._labelSizes = null;\n this._gridLineItems = null;\n this._labelItems = null;\n this.beforeSetDimensions();\n this.setDimensions();\n this.afterSetDimensions();\n this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n if (!this._dataLimitsCached) {\n this.beforeDataLimits();\n this.determineDataLimits();\n this.afterDataLimits();\n this._range = _addGrace(this, grace, beginAtZero);\n this._dataLimitsCached = true;\n }\n this.beforeBuildTicks();\n this.ticks = this.buildTicks() || [];\n this.afterBuildTicks();\n const samplingEnabled = sampleSize < this.ticks.length;\n this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n this.configure();\n this.beforeCalculateLabelRotation();\n this.calculateLabelRotation();\n this.afterCalculateLabelRotation();\n if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n this.ticks = autoSkip(this, this.ticks);\n this._labelSizes = null;\n this.afterAutoSkip();\n }\n if (samplingEnabled) {\n this._convertTicksToLabels(this.ticks);\n }\n this.beforeFit();\n this.fit();\n this.afterFit();\n this.afterUpdate();\n }\n configure() {\n let reversePixels = this.options.reverse;\n let startPixel, endPixel;\n if (this.isHorizontal()) {\n startPixel = this.left;\n endPixel = this.right;\n } else {\n startPixel = this.top;\n endPixel = this.bottom;\n reversePixels = !reversePixels;\n }\n this._startPixel = startPixel;\n this._endPixel = endPixel;\n this._reversePixels = reversePixels;\n this._length = endPixel - startPixel;\n this._alignToPixels = this.options.alignToPixels;\n }\n afterUpdate() {\n callback(this.options.afterUpdate, [\n this\n ]);\n }\n beforeSetDimensions() {\n callback(this.options.beforeSetDimensions, [\n this\n ]);\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = 0;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = 0;\n this.bottom = this.height;\n }\n this.paddingLeft = 0;\n this.paddingTop = 0;\n this.paddingRight = 0;\n this.paddingBottom = 0;\n }\n afterSetDimensions() {\n callback(this.options.afterSetDimensions, [\n this\n ]);\n }\n _callHooks(name) {\n this.chart.notifyPlugins(name, this.getContext());\n callback(this.options[name], [\n this\n ]);\n }\n beforeDataLimits() {\n this._callHooks('beforeDataLimits');\n }\n determineDataLimits() {}\n afterDataLimits() {\n this._callHooks('afterDataLimits');\n }\n beforeBuildTicks() {\n this._callHooks('beforeBuildTicks');\n }\n buildTicks() {\n return [];\n }\n afterBuildTicks() {\n this._callHooks('afterBuildTicks');\n }\n beforeTickToLabelConversion() {\n callback(this.options.beforeTickToLabelConversion, [\n this\n ]);\n }\n generateTickLabels(ticks) {\n const tickOpts = this.options.ticks;\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n tick = ticks[i];\n tick.label = callback(tickOpts.callback, [\n tick.value,\n i,\n ticks\n ], this);\n }\n }\n afterTickToLabelConversion() {\n callback(this.options.afterTickToLabelConversion, [\n this\n ]);\n }\n beforeCalculateLabelRotation() {\n callback(this.options.beforeCalculateLabelRotation, [\n this\n ]);\n }\n calculateLabelRotation() {\n const options = this.options;\n const tickOpts = options.ticks;\n const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n const minRotation = tickOpts.minRotation || 0;\n const maxRotation = tickOpts.maxRotation;\n let labelRotation = minRotation;\n let tickWidth, maxHeight, maxLabelDiagonal;\n if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n this.labelRotation = minRotation;\n return;\n }\n const labelSizes = this._getLabelSizes();\n const maxLabelWidth = labelSizes.widest.width;\n const maxLabelHeight = labelSizes.highest.height;\n const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n if (maxLabelWidth + 6 > tickWidth) {\n tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n }\n this.labelRotation = labelRotation;\n }\n afterCalculateLabelRotation() {\n callback(this.options.afterCalculateLabelRotation, [\n this\n ]);\n }\n afterAutoSkip() {}\n beforeFit() {\n callback(this.options.beforeFit, [\n this\n ]);\n }\n fit() {\n const minSize = {\n width: 0,\n height: 0\n };\n const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts } } = this;\n const display = this._isVisible();\n const isHorizontal = this.isHorizontal();\n if (display) {\n const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n if (isHorizontal) {\n minSize.width = this.maxWidth;\n minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n } else {\n minSize.height = this.maxHeight;\n minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n }\n if (tickOpts.display && this.ticks.length) {\n const { first , last , widest , highest } = this._getLabelSizes();\n const tickPadding = tickOpts.padding * 2;\n const angleRadians = toRadians(this.labelRotation);\n const cos = Math.cos(angleRadians);\n const sin = Math.sin(angleRadians);\n if (isHorizontal) {\n const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n } else {\n const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n }\n this._calculatePadding(first, last, sin, cos);\n }\n }\n this._handleMargins();\n if (isHorizontal) {\n this.width = this._length = chart.width - this._margins.left - this._margins.right;\n this.height = minSize.height;\n } else {\n this.width = minSize.width;\n this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n }\n }\n _calculatePadding(first, last, sin, cos) {\n const { ticks: { align , padding } , position } = this.options;\n const isRotated = this.labelRotation !== 0;\n const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n if (this.isHorizontal()) {\n const offsetLeft = this.getPixelForTick(0) - this.left;\n const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n let paddingLeft = 0;\n let paddingRight = 0;\n if (isRotated) {\n if (labelsBelowTicks) {\n paddingLeft = cos * first.width;\n paddingRight = sin * last.height;\n } else {\n paddingLeft = sin * first.height;\n paddingRight = cos * last.width;\n }\n } else if (align === 'start') {\n paddingRight = last.width;\n } else if (align === 'end') {\n paddingLeft = first.width;\n } else if (align !== 'inner') {\n paddingLeft = first.width / 2;\n paddingRight = last.width / 2;\n }\n this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n } else {\n let paddingTop = last.height / 2;\n let paddingBottom = first.height / 2;\n if (align === 'start') {\n paddingTop = 0;\n paddingBottom = first.height;\n } else if (align === 'end') {\n paddingTop = last.height;\n paddingBottom = 0;\n }\n this.paddingTop = paddingTop + padding;\n this.paddingBottom = paddingBottom + padding;\n }\n }\n _handleMargins() {\n if (this._margins) {\n this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n this._margins.top = Math.max(this.paddingTop, this._margins.top);\n this._margins.right = Math.max(this.paddingRight, this._margins.right);\n this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n }\n }\n afterFit() {\n callback(this.options.afterFit, [\n this\n ]);\n }\n isHorizontal() {\n const { axis , position } = this.options;\n return position === 'top' || position === 'bottom' || axis === 'x';\n }\n isFullSize() {\n return this.options.fullSize;\n }\n _convertTicksToLabels(ticks) {\n this.beforeTickToLabelConversion();\n this.generateTickLabels(ticks);\n let i, ilen;\n for(i = 0, ilen = ticks.length; i < ilen; i++){\n if (isNullOrUndef(ticks[i].label)) {\n ticks.splice(i, 1);\n ilen--;\n i--;\n }\n }\n this.afterTickToLabelConversion();\n }\n _getLabelSizes() {\n let labelSizes = this._labelSizes;\n if (!labelSizes) {\n const sampleSize = this.options.ticks.sampleSize;\n let ticks = this.ticks;\n if (sampleSize < ticks.length) {\n ticks = sample(ticks, sampleSize);\n }\n this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n }\n return labelSizes;\n }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n const { ctx , _longestTextCache: caches } = this;\n const widths = [];\n const heights = [];\n const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n let widestLabelSize = 0;\n let highestLabelSize = 0;\n let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n for(i = 0; i < length; i += increment){\n label = ticks[i].label;\n tickFont = this._resolveTickFontOptions(i);\n ctx.font = fontString = tickFont.string;\n cache = caches[fontString] = caches[fontString] || {\n data: {},\n gc: []\n };\n lineHeight = tickFont.lineHeight;\n width = height = 0;\n if (!isNullOrUndef(label) && !isArray(label)) {\n width = _measureText(ctx, cache.data, cache.gc, width, label);\n height = lineHeight;\n } else if (isArray(label)) {\n for(j = 0, jlen = label.length; j < jlen; ++j){\n nestedLabel = label[j];\n if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n height += lineHeight;\n }\n }\n }\n widths.push(width);\n heights.push(height);\n widestLabelSize = Math.max(width, widestLabelSize);\n highestLabelSize = Math.max(height, highestLabelSize);\n }\n garbageCollect(caches, length);\n const widest = widths.indexOf(widestLabelSize);\n const highest = heights.indexOf(highestLabelSize);\n const valueAt = (idx)=>({\n width: widths[idx] || 0,\n height: heights[idx] || 0\n });\n return {\n first: valueAt(0),\n last: valueAt(length - 1),\n widest: valueAt(widest),\n highest: valueAt(highest),\n widths,\n heights\n };\n }\n getLabelForValue(value) {\n return value;\n }\n getPixelForValue(value, index) {\n return NaN;\n }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getPixelForDecimal(decimal) {\n if (this._reversePixels) {\n decimal = 1 - decimal;\n }\n const pixel = this._startPixel + decimal * this._length;\n return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n }\n getDecimalForPixel(pixel) {\n const decimal = (pixel - this._startPixel) / this._length;\n return this._reversePixels ? 1 - decimal : decimal;\n }\n getBasePixel() {\n return this.getPixelForValue(this.getBaseValue());\n }\n getBaseValue() {\n const { min , max } = this;\n return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n }\n getContext(index) {\n const ticks = this.ticks || [];\n if (index >= 0 && index < ticks.length) {\n const tick = ticks[index];\n return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n }\n return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n }\n _tickSize() {\n const optionTicks = this.options.ticks;\n const rot = toRadians(this.labelRotation);\n const cos = Math.abs(Math.cos(rot));\n const sin = Math.abs(Math.sin(rot));\n const labelSizes = this._getLabelSizes();\n const padding = optionTicks.autoSkipPadding || 0;\n const w = labelSizes ? labelSizes.widest.width + padding : 0;\n const h = labelSizes ? labelSizes.highest.height + padding : 0;\n return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n }\n _isVisible() {\n const display = this.options.display;\n if (display !== 'auto') {\n return !!display;\n }\n return this.getMatchingVisibleMetas().length > 0;\n }\n _computeGridLineItems(chartArea) {\n const axis = this.axis;\n const chart = this.chart;\n const options = this.options;\n const { grid , position , border } = options;\n const offset = grid.offset;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const ticksLength = ticks.length + (offset ? 1 : 0);\n const tl = getTickMarkLength(grid);\n const items = [];\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = borderOpts.display ? borderOpts.width : 0;\n const axisHalfWidth = axisWidth / 2;\n const alignBorderValue = function(pixel) {\n return _alignPixel(chart, pixel, axisWidth);\n };\n let borderValue, i, lineValue, alignedLineValue;\n let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n if (position === 'top') {\n borderValue = alignBorderValue(this.bottom);\n ty1 = this.bottom - tl;\n ty2 = borderValue - axisHalfWidth;\n y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n y2 = chartArea.bottom;\n } else if (position === 'bottom') {\n borderValue = alignBorderValue(this.top);\n y1 = chartArea.top;\n y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n ty1 = borderValue + axisHalfWidth;\n ty2 = this.top + tl;\n } else if (position === 'left') {\n borderValue = alignBorderValue(this.right);\n tx1 = this.right - tl;\n tx2 = borderValue - axisHalfWidth;\n x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n x2 = chartArea.right;\n } else if (position === 'right') {\n borderValue = alignBorderValue(this.left);\n x1 = chartArea.left;\n x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n tx1 = borderValue + axisHalfWidth;\n tx2 = this.left + tl;\n } else if (axis === 'x') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n }\n y1 = chartArea.top;\n y2 = chartArea.bottom;\n ty1 = borderValue + axisHalfWidth;\n ty2 = ty1 + tl;\n } else if (axis === 'y') {\n if (position === 'center') {\n borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n } else if (isObject(position)) {\n const positionAxisID1 = Object.keys(position)[0];\n const value1 = position[positionAxisID1];\n borderValue = alignBorderValue(this.chart.scales[positionAxisID1].getPixelForValue(value1));\n }\n tx1 = borderValue - axisHalfWidth;\n tx2 = tx1 - tl;\n x1 = chartArea.left;\n x2 = chartArea.right;\n }\n const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n const step = Math.max(1, Math.ceil(ticksLength / limit));\n for(i = 0; i < ticksLength; i += step){\n const context = this.getContext(i);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n const lineWidth = optsAtIndex.lineWidth;\n const lineColor = optsAtIndex.color;\n const borderDash = optsAtIndexBorder.dash || [];\n const borderDashOffset = optsAtIndexBorder.dashOffset;\n const tickWidth = optsAtIndex.tickWidth;\n const tickColor = optsAtIndex.tickColor;\n const tickBorderDash = optsAtIndex.tickBorderDash || [];\n const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n lineValue = getPixelForGridLine(this, i, offset);\n if (lineValue === undefined) {\n continue;\n }\n alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n if (isHorizontal) {\n tx1 = tx2 = x1 = x2 = alignedLineValue;\n } else {\n ty1 = ty2 = y1 = y2 = alignedLineValue;\n }\n items.push({\n tx1,\n ty1,\n tx2,\n ty2,\n x1,\n y1,\n x2,\n y2,\n width: lineWidth,\n color: lineColor,\n borderDash,\n borderDashOffset,\n tickWidth,\n tickColor,\n tickBorderDash,\n tickBorderDashOffset\n });\n }\n this._ticksLength = ticksLength;\n this._borderValue = borderValue;\n return items;\n }\n _computeLabelItems(chartArea) {\n const axis = this.axis;\n const options = this.options;\n const { position , ticks: optionTicks } = options;\n const isHorizontal = this.isHorizontal();\n const ticks = this.ticks;\n const { align , crossAlign , padding , mirror } = optionTicks;\n const tl = getTickMarkLength(options.grid);\n const tickAndPadding = tl + padding;\n const hTickAndPadding = mirror ? -padding : tickAndPadding;\n const rotation = -toRadians(this.labelRotation);\n const items = [];\n let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n let textBaseline = 'middle';\n if (position === 'top') {\n y = this.bottom - hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'bottom') {\n y = this.top + hTickAndPadding;\n textAlign = this._getXAxisLabelAlignment();\n } else if (position === 'left') {\n const ret = this._getYAxisLabelAlignment(tl);\n textAlign = ret.textAlign;\n x = ret.x;\n } else if (position === 'right') {\n const ret1 = this._getYAxisLabelAlignment(tl);\n textAlign = ret1.textAlign;\n x = ret1.x;\n } else if (axis === 'x') {\n if (position === 'center') {\n y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID = Object.keys(position)[0];\n const value = position[positionAxisID];\n y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n }\n textAlign = this._getXAxisLabelAlignment();\n } else if (axis === 'y') {\n if (position === 'center') {\n x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n } else if (isObject(position)) {\n const positionAxisID1 = Object.keys(position)[0];\n const value1 = position[positionAxisID1];\n x = this.chart.scales[positionAxisID1].getPixelForValue(value1);\n }\n textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n }\n if (axis === 'y') {\n if (align === 'start') {\n textBaseline = 'top';\n } else if (align === 'end') {\n textBaseline = 'bottom';\n }\n }\n const labelSizes = this._getLabelSizes();\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n label = tick.label;\n const optsAtIndex = optionTicks.setContext(this.getContext(i));\n pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n font = this._resolveTickFontOptions(i);\n lineHeight = font.lineHeight;\n lineCount = isArray(label) ? label.length : 1;\n const halfCount = lineCount / 2;\n const color = optsAtIndex.color;\n const strokeColor = optsAtIndex.textStrokeColor;\n const strokeWidth = optsAtIndex.textStrokeWidth;\n let tickTextAlign = textAlign;\n if (isHorizontal) {\n x = pixel;\n if (textAlign === 'inner') {\n if (i === ilen - 1) {\n tickTextAlign = !this.options.reverse ? 'right' : 'left';\n } else if (i === 0) {\n tickTextAlign = !this.options.reverse ? 'left' : 'right';\n } else {\n tickTextAlign = 'center';\n }\n }\n if (position === 'top') {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = -lineCount * lineHeight + lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n } else {\n textOffset = -labelSizes.highest.height + lineHeight / 2;\n }\n } else {\n if (crossAlign === 'near' || rotation !== 0) {\n textOffset = lineHeight / 2;\n } else if (crossAlign === 'center') {\n textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n } else {\n textOffset = labelSizes.highest.height - lineCount * lineHeight;\n }\n }\n if (mirror) {\n textOffset *= -1;\n }\n if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n x += lineHeight / 2 * Math.sin(rotation);\n }\n } else {\n y = pixel;\n textOffset = (1 - lineCount) * lineHeight / 2;\n }\n let backdrop;\n if (optsAtIndex.showLabelBackdrop) {\n const labelPadding = toPadding(optsAtIndex.backdropPadding);\n const height = labelSizes.heights[i];\n const width = labelSizes.widths[i];\n let top = textOffset - labelPadding.top;\n let left = 0 - labelPadding.left;\n switch(textBaseline){\n case 'middle':\n top -= height / 2;\n break;\n case 'bottom':\n top -= height;\n break;\n }\n switch(textAlign){\n case 'center':\n left -= width / 2;\n break;\n case 'right':\n left -= width;\n break;\n }\n backdrop = {\n left,\n top,\n width: width + labelPadding.width,\n height: height + labelPadding.height,\n color: optsAtIndex.backdropColor\n };\n }\n items.push({\n label,\n font,\n textOffset,\n options: {\n rotation,\n color,\n strokeColor,\n strokeWidth,\n textAlign: tickTextAlign,\n textBaseline,\n translation: [\n x,\n y\n ],\n backdrop\n }\n });\n }\n return items;\n }\n _getXAxisLabelAlignment() {\n const { position , ticks } = this.options;\n const rotation = -toRadians(this.labelRotation);\n if (rotation) {\n return position === 'top' ? 'left' : 'right';\n }\n let align = 'center';\n if (ticks.align === 'start') {\n align = 'left';\n } else if (ticks.align === 'end') {\n align = 'right';\n } else if (ticks.align === 'inner') {\n align = 'inner';\n }\n return align;\n }\n _getYAxisLabelAlignment(tl) {\n const { position , ticks: { crossAlign , mirror , padding } } = this.options;\n const labelSizes = this._getLabelSizes();\n const tickAndPadding = tl + padding;\n const widest = labelSizes.widest.width;\n let textAlign;\n let x;\n if (position === 'left') {\n if (mirror) {\n x = this.right + padding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x += widest;\n }\n } else {\n x = this.right - tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x = this.left;\n }\n }\n } else if (position === 'right') {\n if (mirror) {\n x = this.left + padding;\n if (crossAlign === 'near') {\n textAlign = 'right';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x -= widest / 2;\n } else {\n textAlign = 'left';\n x -= widest;\n }\n } else {\n x = this.left + tickAndPadding;\n if (crossAlign === 'near') {\n textAlign = 'left';\n } else if (crossAlign === 'center') {\n textAlign = 'center';\n x += widest / 2;\n } else {\n textAlign = 'right';\n x = this.right;\n }\n }\n } else {\n textAlign = 'right';\n }\n return {\n textAlign,\n x\n };\n }\n _computeLabelArea() {\n if (this.options.ticks.mirror) {\n return;\n }\n const chart = this.chart;\n const position = this.options.position;\n if (position === 'left' || position === 'right') {\n return {\n top: 0,\n left: this.left,\n bottom: chart.height,\n right: this.right\n };\n }\n if (position === 'top' || position === 'bottom') {\n return {\n top: this.top,\n left: 0,\n bottom: this.bottom,\n right: chart.width\n };\n }\n }\n drawBackground() {\n const { ctx , options: { backgroundColor } , left , top , width , height } = this;\n if (backgroundColor) {\n ctx.save();\n ctx.fillStyle = backgroundColor;\n ctx.fillRect(left, top, width, height);\n ctx.restore();\n }\n }\n getLineWidthForValue(value) {\n const grid = this.options.grid;\n if (!this._isVisible() || !grid.display) {\n return 0;\n }\n const ticks = this.ticks;\n const index = ticks.findIndex((t)=>t.value === value);\n if (index >= 0) {\n const opts = grid.setContext(this.getContext(index));\n return opts.lineWidth;\n }\n return 0;\n }\n drawGrid(chartArea) {\n const grid = this.options.grid;\n const ctx = this.ctx;\n const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n let i, ilen;\n const drawLine = (p1, p2, style)=>{\n if (!style.width || !style.color) {\n return;\n }\n ctx.save();\n ctx.lineWidth = style.width;\n ctx.strokeStyle = style.color;\n ctx.setLineDash(style.borderDash || []);\n ctx.lineDashOffset = style.borderDashOffset;\n ctx.beginPath();\n ctx.moveTo(p1.x, p1.y);\n ctx.lineTo(p2.x, p2.y);\n ctx.stroke();\n ctx.restore();\n };\n if (grid.display) {\n for(i = 0, ilen = items.length; i < ilen; ++i){\n const item = items[i];\n if (grid.drawOnChartArea) {\n drawLine({\n x: item.x1,\n y: item.y1\n }, {\n x: item.x2,\n y: item.y2\n }, item);\n }\n if (grid.drawTicks) {\n drawLine({\n x: item.tx1,\n y: item.ty1\n }, {\n x: item.tx2,\n y: item.ty2\n }, {\n color: item.tickColor,\n width: item.tickWidth,\n borderDash: item.tickBorderDash,\n borderDashOffset: item.tickBorderDashOffset\n });\n }\n }\n }\n }\n drawBorder() {\n const { chart , ctx , options: { border , grid } } = this;\n const borderOpts = border.setContext(this.getContext());\n const axisWidth = border.display ? borderOpts.width : 0;\n if (!axisWidth) {\n return;\n }\n const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n const borderValue = this._borderValue;\n let x1, x2, y1, y2;\n if (this.isHorizontal()) {\n x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n y1 = y2 = borderValue;\n } else {\n y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n x1 = x2 = borderValue;\n }\n ctx.save();\n ctx.lineWidth = borderOpts.width;\n ctx.strokeStyle = borderOpts.color;\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n ctx.restore();\n }\n drawLabels(chartArea) {\n const optionTicks = this.options.ticks;\n if (!optionTicks.display) {\n return;\n }\n const ctx = this.ctx;\n const area = this._computeLabelArea();\n if (area) {\n clipArea(ctx, area);\n }\n const items = this.getLabelItems(chartArea);\n for (const item of items){\n const renderTextOptions = item.options;\n const tickFont = item.font;\n const label = item.label;\n const y = item.textOffset;\n renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n }\n if (area) {\n unclipArea(ctx);\n }\n }\n drawTitle() {\n const { ctx , options: { position , title , reverse } } = this;\n if (!title.display) {\n return;\n }\n const font = toFont(title.font);\n const padding = toPadding(title.padding);\n const align = title.align;\n let offset = font.lineHeight / 2;\n if (position === 'bottom' || position === 'center' || isObject(position)) {\n offset += padding.bottom;\n if (isArray(title.text)) {\n offset += font.lineHeight * (title.text.length - 1);\n }\n } else {\n offset += padding.top;\n }\n const { titleX , titleY , maxWidth , rotation } = titleArgs(this, offset, position, align);\n renderText(ctx, title.text, 0, 0, font, {\n color: title.color,\n maxWidth,\n rotation,\n textAlign: titleAlign(align, position, reverse),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n draw(chartArea) {\n if (!this._isVisible()) {\n return;\n }\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawBorder();\n this.drawTitle();\n this.drawLabels(chartArea);\n }\n _layers() {\n const opts = this.options;\n const tz = opts.ticks && opts.ticks.z || 0;\n const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n const bz = valueOrDefault(opts.border && opts.border.z, 0);\n if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n return [\n {\n z: tz,\n draw: (chartArea)=>{\n this.draw(chartArea);\n }\n }\n ];\n }\n return [\n {\n z: gz,\n draw: (chartArea)=>{\n this.drawBackground();\n this.drawGrid(chartArea);\n this.drawTitle();\n }\n },\n {\n z: bz,\n draw: ()=>{\n this.drawBorder();\n }\n },\n {\n z: tz,\n draw: (chartArea)=>{\n this.drawLabels(chartArea);\n }\n }\n ];\n }\n getMatchingVisibleMetas(type) {\n const metas = this.chart.getSortedVisibleDatasetMetas();\n const axisID = this.axis + 'AxisID';\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n const meta = metas[i];\n if (meta[axisID] === this.id && (!type || meta.type === type)) {\n result.push(meta);\n }\n }\n return result;\n }\n _resolveTickFontOptions(index) {\n const opts = this.options.ticks.setContext(this.getContext(index));\n return toFont(opts.font);\n }\n _maxDigits() {\n const fontSize = this._resolveTickFontOptions(0).lineHeight;\n return (this.isHorizontal() ? this.width : this.height) / fontSize;\n }\n}\n\nclass TypedRegistry {\n constructor(type, scope, override){\n this.type = type;\n this.scope = scope;\n this.override = override;\n this.items = Object.create(null);\n }\n isForType(type) {\n return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n }\n register(item) {\n const proto = Object.getPrototypeOf(item);\n let parentScope;\n if (isIChartComponent(proto)) {\n parentScope = this.register(proto);\n }\n const items = this.items;\n const id = item.id;\n const scope = this.scope + '.' + id;\n if (!id) {\n throw new Error('class does not have id: ' + item);\n }\n if (id in items) {\n return scope;\n }\n items[id] = item;\n registerDefaults(item, scope, parentScope);\n if (this.override) {\n defaults.override(item.id, item.overrides);\n }\n return scope;\n }\n get(id) {\n return this.items[id];\n }\n unregister(item) {\n const items = this.items;\n const id = item.id;\n const scope = this.scope;\n if (id in items) {\n delete items[id];\n }\n if (scope && id in defaults[scope]) {\n delete defaults[scope][id];\n if (this.override) {\n delete overrides[id];\n }\n }\n }\n}\nfunction registerDefaults(item, scope, parentScope) {\n const itemDefaults = merge(Object.create(null), [\n parentScope ? defaults.get(parentScope) : {},\n defaults.get(scope),\n item.defaults\n ]);\n defaults.set(scope, itemDefaults);\n if (item.defaultRoutes) {\n routeDefaults(scope, item.defaultRoutes);\n }\n if (item.descriptors) {\n defaults.describe(scope, item.descriptors);\n }\n}\nfunction routeDefaults(scope, routes) {\n Object.keys(routes).forEach((property)=>{\n const propertyParts = property.split('.');\n const sourceName = propertyParts.pop();\n const sourceScope = [\n scope\n ].concat(propertyParts).join('.');\n const parts = routes[property].split('.');\n const targetName = parts.pop();\n const targetScope = parts.join('.');\n defaults.route(sourceScope, sourceName, targetScope, targetName);\n });\n}\nfunction isIChartComponent(proto) {\n return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n constructor(){\n this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n this.elements = new TypedRegistry(Element, 'elements');\n this.plugins = new TypedRegistry(Object, 'plugins');\n this.scales = new TypedRegistry(Scale, 'scales');\n this._typedRegistries = [\n this.controllers,\n this.scales,\n this.elements\n ];\n }\n add(...args) {\n this._each('register', args);\n }\n remove(...args) {\n this._each('unregister', args);\n }\n addControllers(...args) {\n this._each('register', args, this.controllers);\n }\n addElements(...args) {\n this._each('register', args, this.elements);\n }\n addPlugins(...args) {\n this._each('register', args, this.plugins);\n }\n addScales(...args) {\n this._each('register', args, this.scales);\n }\n getController(id) {\n return this._get(id, this.controllers, 'controller');\n }\n getElement(id) {\n return this._get(id, this.elements, 'element');\n }\n getPlugin(id) {\n return this._get(id, this.plugins, 'plugin');\n }\n getScale(id) {\n return this._get(id, this.scales, 'scale');\n }\n removeControllers(...args) {\n this._each('unregister', args, this.controllers);\n }\n removeElements(...args) {\n this._each('unregister', args, this.elements);\n }\n removePlugins(...args) {\n this._each('unregister', args, this.plugins);\n }\n removeScales(...args) {\n this._each('unregister', args, this.scales);\n }\n _each(method, args, typedRegistry) {\n [\n ...args\n ].forEach((arg)=>{\n const reg = typedRegistry || this._getRegistryForType(arg);\n if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n this._exec(method, reg, arg);\n } else {\n each(arg, (item)=>{\n const itemReg = typedRegistry || this._getRegistryForType(item);\n this._exec(method, itemReg, item);\n });\n }\n });\n }\n _exec(method, registry, component) {\n const camelMethod = _capitalize(method);\n callback(component['before' + camelMethod], [], component);\n registry[method](component);\n callback(component['after' + camelMethod], [], component);\n }\n _getRegistryForType(type) {\n for(let i = 0; i < this._typedRegistries.length; i++){\n const reg = this._typedRegistries[i];\n if (reg.isForType(type)) {\n return reg;\n }\n }\n return this.plugins;\n }\n _get(id, typedRegistry, type) {\n const item = typedRegistry.get(id);\n if (item === undefined) {\n throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n }\n return item;\n }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n constructor(){\n this._init = [];\n }\n notify(chart, hook, args, filter) {\n if (hook === 'beforeInit') {\n this._init = this._createDescriptors(chart, true);\n this._notify(this._init, chart, 'install');\n }\n const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n const result = this._notify(descriptors, chart, hook, args);\n if (hook === 'afterDestroy') {\n this._notify(descriptors, chart, 'stop');\n this._notify(this._init, chart, 'uninstall');\n }\n return result;\n }\n _notify(descriptors, chart, hook, args) {\n args = args || {};\n for (const descriptor of descriptors){\n const plugin = descriptor.plugin;\n const method = plugin[hook];\n const params = [\n chart,\n args,\n descriptor.options\n ];\n if (callback(method, params, plugin) === false && args.cancelable) {\n return false;\n }\n }\n return true;\n }\n invalidate() {\n if (!isNullOrUndef(this._cache)) {\n this._oldCache = this._cache;\n this._cache = undefined;\n }\n }\n _descriptors(chart) {\n if (this._cache) {\n return this._cache;\n }\n const descriptors = this._cache = this._createDescriptors(chart);\n this._notifyStateChanges(chart);\n return descriptors;\n }\n _createDescriptors(chart, all) {\n const config = chart && chart.config;\n const options = valueOrDefault(config.options && config.options.plugins, {});\n const plugins = allPlugins(config);\n return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n }\n _notifyStateChanges(chart) {\n const previousDescriptors = this._oldCache || [];\n const descriptors = this._cache;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n }\n}\n function allPlugins(config) {\n const localIds = {};\n const plugins = [];\n const keys = Object.keys(registry.plugins.items);\n for(let i = 0; i < keys.length; i++){\n plugins.push(registry.getPlugin(keys[i]));\n }\n const local = config.plugins || [];\n for(let i1 = 0; i1 < local.length; i1++){\n const plugin = local[i1];\n if (plugins.indexOf(plugin) === -1) {\n plugins.push(plugin);\n localIds[plugin.id] = true;\n }\n }\n return {\n plugins,\n localIds\n };\n}\nfunction getOpts(options, all) {\n if (!all && options === false) {\n return null;\n }\n if (options === true) {\n return {};\n }\n return options;\n}\nfunction createDescriptors(chart, { plugins , localIds }, options, all) {\n const result = [];\n const context = chart.getContext();\n for (const plugin of plugins){\n const id = plugin.id;\n const opts = getOpts(options[id], all);\n if (opts === null) {\n continue;\n }\n result.push({\n plugin,\n options: pluginOpts(chart.config, {\n plugin,\n local: localIds[id]\n }, opts, context)\n });\n }\n return result;\n}\nfunction pluginOpts(config, { plugin , local }, opts, context) {\n const keys = config.pluginScopeKeys(plugin);\n const scopes = config.getOptionScopes(opts, keys);\n if (local && plugin.defaults) {\n scopes.push(plugin.defaults);\n }\n return config.createResolver(scopes, context, [\n ''\n ], {\n scriptable: false,\n indexable: false,\n allKeys: true\n });\n}\n\nfunction getIndexAxis(type, options) {\n const datasetDefaults = defaults.datasets[type] || {};\n const datasetOptions = (options.datasets || {})[type] || {};\n return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n let axis = id;\n if (id === '_index_') {\n axis = indexAxis;\n } else if (id === '_value_') {\n axis = indexAxis === 'x' ? 'y' : 'x';\n }\n return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction axisFromPosition(position) {\n if (position === 'top' || position === 'bottom') {\n return 'x';\n }\n if (position === 'left' || position === 'right') {\n return 'y';\n }\n}\nfunction determineAxis(id, scaleOptions) {\n if (id === 'x' || id === 'y' || id === 'r') {\n return id;\n }\n id = scaleOptions.axis || axisFromPosition(scaleOptions.position) || id.length > 1 && determineAxis(id[0].toLowerCase(), scaleOptions);\n if (id) {\n return id;\n }\n throw new Error(`Cannot determine type of '${name}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction mergeScaleConfig(config, options) {\n const chartDefaults = overrides[config.type] || {\n scales: {}\n };\n const configScales = options.scales || {};\n const chartIndexAxis = getIndexAxis(config.type, options);\n const scales = Object.create(null);\n Object.keys(configScales).forEach((id)=>{\n const scaleConf = configScales[id];\n if (!isObject(scaleConf)) {\n return console.error(`Invalid scale configuration for scale: ${id}`);\n }\n if (scaleConf._proxy) {\n return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n }\n const axis = determineAxis(id, scaleConf);\n const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n const defaultScaleOptions = chartDefaults.scales || {};\n scales[id] = mergeIf(Object.create(null), [\n {\n axis\n },\n scaleConf,\n defaultScaleOptions[axis],\n defaultScaleOptions[defaultId]\n ]);\n });\n config.data.datasets.forEach((dataset)=>{\n const type = dataset.type || config.type;\n const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n const datasetDefaults = overrides[type] || {};\n const defaultScaleOptions = datasetDefaults.scales || {};\n Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n const id = dataset[axis + 'AxisID'] || axis;\n scales[id] = scales[id] || Object.create(null);\n mergeIf(scales[id], [\n {\n axis\n },\n configScales[id],\n defaultScaleOptions[defaultID]\n ]);\n });\n });\n Object.keys(scales).forEach((key)=>{\n const scale = scales[key];\n mergeIf(scale, [\n defaults.scales[scale.type],\n defaults.scale\n ]);\n });\n return scales;\n}\nfunction initOptions(config) {\n const options = config.options || (config.options = {});\n options.plugins = valueOrDefault(options.plugins, {});\n options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n data = data || {};\n data.datasets = data.datasets || [];\n data.labels = data.labels || [];\n return data;\n}\nfunction initConfig(config) {\n config = config || {};\n config.data = initData(config.data);\n initOptions(config);\n return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n let keys = keyCache.get(cacheKey);\n if (!keys) {\n keys = generate();\n keyCache.set(cacheKey, keys);\n keysCached.add(keys);\n }\n return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n const opts = resolveObjectKey(obj, key);\n if (opts !== undefined) {\n set.add(opts);\n }\n};\nclass Config {\n constructor(config){\n this._config = initConfig(config);\n this._scopeCache = new Map();\n this._resolverCache = new Map();\n }\n get platform() {\n return this._config.platform;\n }\n get type() {\n return this._config.type;\n }\n set type(type) {\n this._config.type = type;\n }\n get data() {\n return this._config.data;\n }\n set data(data) {\n this._config.data = initData(data);\n }\n get options() {\n return this._config.options;\n }\n set options(options) {\n this._config.options = options;\n }\n get plugins() {\n return this._config.plugins;\n }\n update() {\n const config = this._config;\n this.clearCache();\n initOptions(config);\n }\n clearCache() {\n this._scopeCache.clear();\n this._resolverCache.clear();\n }\n datasetScopeKeys(datasetType) {\n return cachedKeys(datasetType, ()=>[\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetAnimationScopeKeys(datasetType, transition) {\n return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n [\n `datasets.${datasetType}.transitions.${transition}`,\n `transitions.${transition}`\n ],\n [\n `datasets.${datasetType}`,\n ''\n ]\n ]);\n }\n datasetElementScopeKeys(datasetType, elementType) {\n return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n [\n `datasets.${datasetType}.elements.${elementType}`,\n `datasets.${datasetType}`,\n `elements.${elementType}`,\n ''\n ]\n ]);\n }\n pluginScopeKeys(plugin) {\n const id = plugin.id;\n const type = this.type;\n return cachedKeys(`${type}-plugin-${id}`, ()=>[\n [\n `plugins.${id}`,\n ...plugin.additionalOptionScopes || []\n ]\n ]);\n }\n _cachedScopes(mainScope, resetCache) {\n const _scopeCache = this._scopeCache;\n let cache = _scopeCache.get(mainScope);\n if (!cache || resetCache) {\n cache = new Map();\n _scopeCache.set(mainScope, cache);\n }\n return cache;\n }\n getOptionScopes(mainScope, keyLists, resetCache) {\n const { options , type } = this;\n const cache = this._cachedScopes(mainScope, resetCache);\n const cached = cache.get(keyLists);\n if (cached) {\n return cached;\n }\n const scopes = new Set();\n keyLists.forEach((keys)=>{\n if (mainScope) {\n scopes.add(mainScope);\n keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n }\n keys.forEach((key)=>addIfFound(scopes, options, key));\n keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n keys.forEach((key)=>addIfFound(scopes, defaults, key));\n keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n });\n const array = Array.from(scopes);\n if (array.length === 0) {\n array.push(Object.create(null));\n }\n if (keysCached.has(keyLists)) {\n cache.set(keyLists, array);\n }\n return array;\n }\n chartOptionScopes() {\n const { options , type } = this;\n return [\n options,\n overrides[type] || {},\n defaults.datasets[type] || {},\n {\n type\n },\n defaults,\n descriptors\n ];\n }\n resolveNamedOptions(scopes, names, context, prefixes = [\n ''\n ]) {\n const result = {\n $shared: true\n };\n const { resolver , subPrefixes } = getResolver(this._resolverCache, scopes, prefixes);\n let options = resolver;\n if (needContext(resolver, names)) {\n result.$shared = false;\n context = isFunction(context) ? context() : context;\n const subResolver = this.createResolver(scopes, context, subPrefixes);\n options = _attachContext(resolver, context, subResolver);\n }\n for (const prop of names){\n result[prop] = options[prop];\n }\n return result;\n }\n createResolver(scopes, context, prefixes = [\n ''\n ], descriptorDefaults) {\n const { resolver } = getResolver(this._resolverCache, scopes, prefixes);\n return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n let cache = resolverCache.get(scopes);\n if (!cache) {\n cache = new Map();\n resolverCache.set(scopes, cache);\n }\n const cacheKey = prefixes.join();\n let cached = cache.get(cacheKey);\n if (!cached) {\n const resolver = _createResolver(scopes, prefixes);\n cached = {\n resolver,\n subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n };\n cache.set(cacheKey, cached);\n }\n return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).reduce((acc, key)=>acc || isFunction(value[key]), false);\nfunction needContext(proxy, names) {\n const { isScriptable , isIndexable } = _descriptors(proxy);\n for (const prop of names){\n const scriptable = isScriptable(prop);\n const indexable = isIndexable(prop);\n const value = (indexable || scriptable) && proxy[prop];\n if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n return true;\n }\n }\n return false;\n}\n\nvar version = \"4.2.1\";\n\nconst KNOWN_POSITIONS = [\n 'top',\n 'bottom',\n 'left',\n 'right',\n 'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n return function(a, b) {\n return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n };\n}\nfunction onAnimationsComplete(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n chart.notifyPlugins('afterRender');\n callback(animationOptions && animationOptions.onComplete, [\n context\n ], chart);\n}\nfunction onAnimationProgress(context) {\n const chart = context.chart;\n const animationOptions = chart.options.animation;\n callback(animationOptions && animationOptions.onProgress, [\n context\n ], chart);\n}\n function getCanvas(item) {\n if (_isDomSupported() && typeof item === 'string') {\n item = document.getElementById(item);\n } else if (item && item.length) {\n item = item[0];\n }\n if (item && item.canvas) {\n item = item.canvas;\n }\n return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n const canvas = getCanvas(key);\n return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n const keys = Object.keys(obj);\n for (const key of keys){\n const intKey = +key;\n if (intKey >= start) {\n const value = obj[key];\n delete obj[key];\n if (move > 0 || intKey > start) {\n obj[intKey + move] = value;\n }\n }\n }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n if (!inChartArea || e.type === 'mouseout') {\n return null;\n }\n if (isClick) {\n return lastEvent;\n }\n return e;\n}\nfunction getDatasetArea(meta) {\n const { xScale , yScale } = meta;\n if (xScale && yScale) {\n return {\n left: xScale.left,\n right: xScale.right,\n top: yScale.top,\n bottom: yScale.bottom\n };\n }\n}\nclass Chart {\n static defaults = defaults;\n static instances = instances;\n static overrides = overrides;\n static registry = registry;\n static version = version;\n static getChart = getChart;\n static register(...items) {\n registry.add(...items);\n invalidatePlugins();\n }\n static unregister(...items) {\n registry.remove(...items);\n invalidatePlugins();\n }\n constructor(item, userConfig){\n const config = this.config = new Config(userConfig);\n const initialCanvas = getCanvas(item);\n const existingChart = getChart(initialCanvas);\n if (existingChart) {\n throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n }\n const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n this.platform.updateConfig(config);\n const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n const canvas = context && context.canvas;\n const height = canvas && canvas.height;\n const width = canvas && canvas.width;\n this.id = uid();\n this.ctx = context;\n this.canvas = canvas;\n this.width = width;\n this.height = height;\n this._options = options;\n this._aspectRatio = this.aspectRatio;\n this._layers = [];\n this._metasets = [];\n this._stacks = undefined;\n this.boxes = [];\n this.currentDevicePixelRatio = undefined;\n this.chartArea = undefined;\n this._active = [];\n this._lastEvent = undefined;\n this._listeners = {};\n this._responsiveListeners = undefined;\n this._sortedMetasets = [];\n this.scales = {};\n this._plugins = new PluginService();\n this.$proxies = {};\n this._hiddenIndices = {};\n this.attached = false;\n this._animationsDisabled = undefined;\n this.$context = undefined;\n this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n this._dataChanges = [];\n instances[this.id] = this;\n if (!context || !canvas) {\n console.error(\"Failed to create chart: can't acquire context from the given item\");\n return;\n }\n animator.listen(this, 'complete', onAnimationsComplete);\n animator.listen(this, 'progress', onAnimationProgress);\n this._initialize();\n if (this.attached) {\n this.update();\n }\n }\n get aspectRatio() {\n const { options: { aspectRatio , maintainAspectRatio } , width , height , _aspectRatio } = this;\n if (!isNullOrUndef(aspectRatio)) {\n return aspectRatio;\n }\n if (maintainAspectRatio && _aspectRatio) {\n return _aspectRatio;\n }\n return height ? width / height : null;\n }\n get data() {\n return this.config.data;\n }\n set data(data) {\n this.config.data = data;\n }\n get options() {\n return this._options;\n }\n set options(options) {\n this.config.options = options;\n }\n get registry() {\n return registry;\n }\n _initialize() {\n this.notifyPlugins('beforeInit');\n if (this.options.responsive) {\n this.resize();\n } else {\n retinaScale(this, this.options.devicePixelRatio);\n }\n this.bindEvents();\n this.notifyPlugins('afterInit');\n return this;\n }\n clear() {\n clearCanvas(this.canvas, this.ctx);\n return this;\n }\n stop() {\n animator.stop(this);\n return this;\n }\n resize(width, height) {\n if (!animator.running(this)) {\n this._resize(width, height);\n } else {\n this._resizeBeforeDraw = {\n width,\n height\n };\n }\n }\n _resize(width, height) {\n const options = this.options;\n const canvas = this.canvas;\n const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n const mode = this.width ? 'resize' : 'attach';\n this.width = newSize.width;\n this.height = newSize.height;\n this._aspectRatio = this.aspectRatio;\n if (!retinaScale(this, newRatio, true)) {\n return;\n }\n this.notifyPlugins('resize', {\n size: newSize\n });\n callback(options.onResize, [\n this,\n newSize\n ], this);\n if (this.attached) {\n if (this._doResize(mode)) {\n this.render();\n }\n }\n }\n ensureScalesHaveIDs() {\n const options = this.options;\n const scalesOptions = options.scales || {};\n each(scalesOptions, (axisOptions, axisID)=>{\n axisOptions.id = axisID;\n });\n }\n buildOrUpdateScales() {\n const options = this.options;\n const scaleOpts = options.scales;\n const scales = this.scales;\n const updated = Object.keys(scales).reduce((obj, id)=>{\n obj[id] = false;\n return obj;\n }, {});\n let items = [];\n if (scaleOpts) {\n items = items.concat(Object.keys(scaleOpts).map((id)=>{\n const scaleOptions = scaleOpts[id];\n const axis = determineAxis(id, scaleOptions);\n const isRadial = axis === 'r';\n const isHorizontal = axis === 'x';\n return {\n options: scaleOptions,\n dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n };\n }));\n }\n each(items, (item)=>{\n const scaleOptions = item.options;\n const id = scaleOptions.id;\n const axis = determineAxis(id, scaleOptions);\n const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n scaleOptions.position = item.dposition;\n }\n updated[id] = true;\n let scale = null;\n if (id in scales && scales[id].type === scaleType) {\n scale = scales[id];\n } else {\n const scaleClass = registry.getScale(scaleType);\n scale = new scaleClass({\n id,\n type: scaleType,\n ctx: this.ctx,\n chart: this\n });\n scales[scale.id] = scale;\n }\n scale.init(scaleOptions, options);\n });\n each(updated, (hasUpdated, id)=>{\n if (!hasUpdated) {\n delete scales[id];\n }\n });\n each(scales, (scale)=>{\n layouts.configure(this, scale, scale.options);\n layouts.addBox(this, scale);\n });\n }\n _updateMetasets() {\n const metasets = this._metasets;\n const numData = this.data.datasets.length;\n const numMeta = metasets.length;\n metasets.sort((a, b)=>a.index - b.index);\n if (numMeta > numData) {\n for(let i = numData; i < numMeta; ++i){\n this._destroyDatasetMeta(i);\n }\n metasets.splice(numData, numMeta - numData);\n }\n this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n }\n _removeUnreferencedMetasets() {\n const { _metasets: metasets , data: { datasets } } = this;\n if (metasets.length > datasets.length) {\n delete this._stacks;\n }\n metasets.forEach((meta, index)=>{\n if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n this._destroyDatasetMeta(index);\n }\n });\n }\n buildOrUpdateControllers() {\n const newControllers = [];\n const datasets = this.data.datasets;\n let i, ilen;\n this._removeUnreferencedMetasets();\n for(i = 0, ilen = datasets.length; i < ilen; i++){\n const dataset = datasets[i];\n let meta = this.getDatasetMeta(i);\n const type = dataset.type || this.config.type;\n if (meta.type && meta.type !== type) {\n this._destroyDatasetMeta(i);\n meta = this.getDatasetMeta(i);\n }\n meta.type = type;\n meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n meta.order = dataset.order || 0;\n meta.index = i;\n meta.label = '' + dataset.label;\n meta.visible = this.isDatasetVisible(i);\n if (meta.controller) {\n meta.controller.updateIndex(i);\n meta.controller.linkScales();\n } else {\n const ControllerClass = registry.getController(type);\n const { datasetElementType , dataElementType } = defaults.datasets[type];\n Object.assign(ControllerClass, {\n dataElementType: registry.getElement(dataElementType),\n datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n });\n meta.controller = new ControllerClass(this, i);\n newControllers.push(meta.controller);\n }\n }\n this._updateMetasets();\n return newControllers;\n }\n _resetElements() {\n each(this.data.datasets, (dataset, datasetIndex)=>{\n this.getDatasetMeta(datasetIndex).controller.reset();\n }, this);\n }\n reset() {\n this._resetElements();\n this.notifyPlugins('reset');\n }\n update(mode) {\n const config = this.config;\n config.update();\n const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n const animsDisabled = this._animationsDisabled = !options.animation;\n this._updateScales();\n this._checkEventBindings();\n this._updateHiddenIndices();\n this._plugins.invalidate();\n if (this.notifyPlugins('beforeUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n const newControllers = this.buildOrUpdateControllers();\n this.notifyPlugins('beforeElementsUpdate');\n let minPadding = 0;\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n const { controller } = this.getDatasetMeta(i);\n const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n controller.buildOrUpdateElements(reset);\n minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n }\n minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n this._updateLayout(minPadding);\n if (!animsDisabled) {\n each(newControllers, (controller)=>{\n controller.reset();\n });\n }\n this._updateDatasets(mode);\n this.notifyPlugins('afterUpdate', {\n mode\n });\n this._layers.sort(compare2Level('z', '_idx'));\n const { _active , _lastEvent } = this;\n if (_lastEvent) {\n this._eventHandler(_lastEvent, true);\n } else if (_active.length) {\n this._updateHoverStyles(_active, _active, true);\n }\n this.render();\n }\n _updateScales() {\n each(this.scales, (scale)=>{\n layouts.removeBox(this, scale);\n });\n this.ensureScalesHaveIDs();\n this.buildOrUpdateScales();\n }\n _checkEventBindings() {\n const options = this.options;\n const existingEvents = new Set(Object.keys(this._listeners));\n const newEvents = new Set(options.events);\n if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n this.unbindEvents();\n this.bindEvents();\n }\n }\n _updateHiddenIndices() {\n const { _hiddenIndices } = this;\n const changes = this._getUniformDataChanges() || [];\n for (const { method , start , count } of changes){\n const move = method === '_removeElements' ? -count : count;\n moveNumericKeys(_hiddenIndices, start, move);\n }\n }\n _getUniformDataChanges() {\n const _dataChanges = this._dataChanges;\n if (!_dataChanges || !_dataChanges.length) {\n return;\n }\n this._dataChanges = [];\n const datasetCount = this.data.datasets.length;\n const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n const changeSet = makeSet(0);\n for(let i = 1; i < datasetCount; i++){\n if (!setsEqual(changeSet, makeSet(i))) {\n return;\n }\n }\n return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n method: a[1],\n start: +a[2],\n count: +a[3]\n }));\n }\n _updateLayout(minPadding) {\n if (this.notifyPlugins('beforeLayout', {\n cancelable: true\n }) === false) {\n return;\n }\n layouts.update(this, this.width, this.height, minPadding);\n const area = this.chartArea;\n const noArea = area.width <= 0 || area.height <= 0;\n this._layers = [];\n each(this.boxes, (box)=>{\n if (noArea && box.position === 'chartArea') {\n return;\n }\n if (box.configure) {\n box.configure();\n }\n this._layers.push(...box._layers());\n }, this);\n this._layers.forEach((item, index)=>{\n item._idx = index;\n });\n this.notifyPlugins('afterLayout');\n }\n _updateDatasets(mode) {\n if (this.notifyPlugins('beforeDatasetsUpdate', {\n mode,\n cancelable: true\n }) === false) {\n return;\n }\n for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this.getDatasetMeta(i).controller.configure();\n }\n for(let i1 = 0, ilen1 = this.data.datasets.length; i1 < ilen1; ++i1){\n this._updateDataset(i1, isFunction(mode) ? mode({\n datasetIndex: i1\n }) : mode);\n }\n this.notifyPlugins('afterDatasetsUpdate', {\n mode\n });\n }\n _updateDataset(index, mode) {\n const meta = this.getDatasetMeta(index);\n const args = {\n meta,\n index,\n mode,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n return;\n }\n meta.controller._update(mode);\n args.cancelable = false;\n this.notifyPlugins('afterDatasetUpdate', args);\n }\n render() {\n if (this.notifyPlugins('beforeRender', {\n cancelable: true\n }) === false) {\n return;\n }\n if (animator.has(this)) {\n if (this.attached && !animator.running(this)) {\n animator.start(this);\n }\n } else {\n this.draw();\n onAnimationsComplete({\n chart: this\n });\n }\n }\n draw() {\n let i;\n if (this._resizeBeforeDraw) {\n const { width , height } = this._resizeBeforeDraw;\n this._resize(width, height);\n this._resizeBeforeDraw = null;\n }\n this.clear();\n if (this.width <= 0 || this.height <= 0) {\n return;\n }\n if (this.notifyPlugins('beforeDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const layers = this._layers;\n for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n layers[i].draw(this.chartArea);\n }\n this._drawDatasets();\n for(; i < layers.length; ++i){\n layers[i].draw(this.chartArea);\n }\n this.notifyPlugins('afterDraw');\n }\n _getSortedDatasetMetas(filterVisible) {\n const metasets = this._sortedMetasets;\n const result = [];\n let i, ilen;\n for(i = 0, ilen = metasets.length; i < ilen; ++i){\n const meta = metasets[i];\n if (!filterVisible || meta.visible) {\n result.push(meta);\n }\n }\n return result;\n }\n getSortedVisibleDatasetMetas() {\n return this._getSortedDatasetMetas(true);\n }\n _drawDatasets() {\n if (this.notifyPlugins('beforeDatasetsDraw', {\n cancelable: true\n }) === false) {\n return;\n }\n const metasets = this.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n this._drawDataset(metasets[i]);\n }\n this.notifyPlugins('afterDatasetsDraw');\n }\n _drawDataset(meta) {\n const ctx = this.ctx;\n const clip = meta._clip;\n const useClip = !clip.disabled;\n const area = getDatasetArea(meta) || this.chartArea;\n const args = {\n meta,\n index: meta.index,\n cancelable: true\n };\n if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n return;\n }\n if (useClip) {\n clipArea(ctx, {\n left: clip.left === false ? 0 : area.left - clip.left,\n right: clip.right === false ? this.width : area.right + clip.right,\n top: clip.top === false ? 0 : area.top - clip.top,\n bottom: clip.bottom === false ? this.height : area.bottom + clip.bottom\n });\n }\n meta.controller.draw();\n if (useClip) {\n unclipArea(ctx);\n }\n args.cancelable = false;\n this.notifyPlugins('afterDatasetDraw', args);\n }\n isPointInArea(point) {\n return _isPointInArea(point, this.chartArea, this._minPadding);\n }\n getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n const method = Interaction.modes[mode];\n if (typeof method === 'function') {\n return method(this, e, options, useFinalPosition);\n }\n return [];\n }\n getDatasetMeta(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n const metasets = this._metasets;\n let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n if (!meta) {\n meta = {\n type: null,\n data: [],\n dataset: null,\n controller: null,\n hidden: null,\n xAxisID: null,\n yAxisID: null,\n order: dataset && dataset.order || 0,\n index: datasetIndex,\n _dataset: dataset,\n _parsed: [],\n _sorted: false\n };\n metasets.push(meta);\n }\n return meta;\n }\n getContext() {\n return this.$context || (this.$context = createContext(null, {\n chart: this,\n type: 'chart'\n }));\n }\n getVisibleDatasetCount() {\n return this.getSortedVisibleDatasetMetas().length;\n }\n isDatasetVisible(datasetIndex) {\n const dataset = this.data.datasets[datasetIndex];\n if (!dataset) {\n return false;\n }\n const meta = this.getDatasetMeta(datasetIndex);\n return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n }\n setDatasetVisibility(datasetIndex, visible) {\n const meta = this.getDatasetMeta(datasetIndex);\n meta.hidden = !visible;\n }\n toggleDataVisibility(index) {\n this._hiddenIndices[index] = !this._hiddenIndices[index];\n }\n getDataVisibility(index) {\n return !this._hiddenIndices[index];\n }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n const mode = visible ? 'show' : 'hide';\n const meta = this.getDatasetMeta(datasetIndex);\n const anims = meta.controller._resolveAnimations(undefined, mode);\n if (defined(dataIndex)) {\n meta.data[dataIndex].hidden = !visible;\n this.update();\n } else {\n this.setDatasetVisibility(datasetIndex, visible);\n anims.update(meta, {\n visible\n });\n this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n }\n }\n hide(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, false);\n }\n show(datasetIndex, dataIndex) {\n this._updateVisibility(datasetIndex, dataIndex, true);\n }\n _destroyDatasetMeta(datasetIndex) {\n const meta = this._metasets[datasetIndex];\n if (meta && meta.controller) {\n meta.controller._destroy();\n }\n delete this._metasets[datasetIndex];\n }\n _stop() {\n let i, ilen;\n this.stop();\n animator.remove(this);\n for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n this._destroyDatasetMeta(i);\n }\n }\n destroy() {\n this.notifyPlugins('beforeDestroy');\n const { canvas , ctx } = this;\n this._stop();\n this.config.clearCache();\n if (canvas) {\n this.unbindEvents();\n clearCanvas(canvas, ctx);\n this.platform.releaseContext(ctx);\n this.canvas = null;\n this.ctx = null;\n }\n delete instances[this.id];\n this.notifyPlugins('afterDestroy');\n }\n toBase64Image(...args) {\n return this.canvas.toDataURL(...args);\n }\n bindEvents() {\n this.bindUserEvents();\n if (this.options.responsive) {\n this.bindResponsiveEvents();\n } else {\n this.attached = true;\n }\n }\n bindUserEvents() {\n const listeners = this._listeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const listener = (e, x, y)=>{\n e.offsetX = x;\n e.offsetY = y;\n this._eventHandler(e);\n };\n each(this.options.events, (type)=>_add(type, listener));\n }\n bindResponsiveEvents() {\n if (!this._responsiveListeners) {\n this._responsiveListeners = {};\n }\n const listeners = this._responsiveListeners;\n const platform = this.platform;\n const _add = (type, listener)=>{\n platform.addEventListener(this, type, listener);\n listeners[type] = listener;\n };\n const _remove = (type, listener)=>{\n if (listeners[type]) {\n platform.removeEventListener(this, type, listener);\n delete listeners[type];\n }\n };\n const listener = (width, height)=>{\n if (this.canvas) {\n this.resize(width, height);\n }\n };\n let detached;\n const attached = ()=>{\n _remove('attach', attached);\n this.attached = true;\n this.resize();\n _add('resize', listener);\n _add('detach', detached);\n };\n detached = ()=>{\n this.attached = false;\n _remove('resize', listener);\n this._stop();\n this._resize(0, 0);\n _add('attach', attached);\n };\n if (platform.isAttached(this.canvas)) {\n attached();\n } else {\n detached();\n }\n }\n unbindEvents() {\n each(this._listeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._listeners = {};\n each(this._responsiveListeners, (listener, type)=>{\n this.platform.removeEventListener(this, type, listener);\n });\n this._responsiveListeners = undefined;\n }\n updateHoverStyle(items, mode, enabled) {\n const prefix = enabled ? 'set' : 'remove';\n let meta, item, i, ilen;\n if (mode === 'dataset') {\n meta = this.getDatasetMeta(items[0].datasetIndex);\n meta.controller['_' + prefix + 'DatasetHoverStyle']();\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n item = items[i];\n const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n if (controller) {\n controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n }\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements) {\n const lastActive = this._active || [];\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('No dataset found at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(active, lastActive);\n if (changed) {\n this._active = active;\n this._lastEvent = null;\n this._updateHoverStyles(active, lastActive);\n }\n }\n notifyPlugins(hook, args, filter) {\n return this._plugins.notify(this, hook, args, filter);\n }\n isPluginEnabled(pluginId) {\n return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n }\n _updateHoverStyles(active, lastActive, replay) {\n const hoverOptions = this.options.hover;\n const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n const deactivated = diff(lastActive, active);\n const activated = replay ? active : diff(active, lastActive);\n if (deactivated.length) {\n this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n }\n if (activated.length && hoverOptions.mode) {\n this.updateHoverStyle(activated, hoverOptions.mode, true);\n }\n }\n _eventHandler(e, replay) {\n const args = {\n event: e,\n replay,\n cancelable: true,\n inChartArea: this.isPointInArea(e)\n };\n const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n return;\n }\n const changed = this._handleEvent(e, replay, args.inChartArea);\n args.cancelable = false;\n this.notifyPlugins('afterEvent', args, eventFilter);\n if (changed || args.changed) {\n this.render();\n }\n return this;\n }\n _handleEvent(e, replay, inChartArea) {\n const { _active: lastActive = [] , options } = this;\n const useFinalPosition = replay;\n const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n const isClick = _isClickEvent(e);\n const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n if (inChartArea) {\n this._lastEvent = null;\n callback(options.onHover, [\n e,\n active,\n this\n ], this);\n if (isClick) {\n callback(options.onClick, [\n e,\n active,\n this\n ], this);\n }\n }\n const changed = !_elementsEqual(active, lastActive);\n if (changed || replay) {\n this._active = active;\n this._updateHoverStyles(active, lastActive, replay);\n }\n this._lastEvent = lastEvent;\n return changed;\n }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const hoverOptions = this.options.hover;\n return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n }\n}\nfunction invalidatePlugins() {\n return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipArc(ctx, element, endAngle) {\n const { startAngle , pixelMargin , x , y , outerRadius , innerRadius } = element;\n let angleMargin = pixelMargin / outerRadius;\n // Draw an inner border by clipping the arc and drawing a double-width border\n // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n ctx.beginPath();\n ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n if (innerRadius > pixelMargin) {\n angleMargin = pixelMargin / innerRadius;\n ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n } else {\n ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n }\n ctx.closePath();\n ctx.clip();\n}\nfunction toRadiusCorners(value) {\n return _readValueToProps(value, [\n 'outerStart',\n 'outerEnd',\n 'innerStart',\n 'innerEnd'\n ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n const o = toRadiusCorners(arc.options.borderRadius);\n const halfThickness = (outerRadius - innerRadius) / 2;\n const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n // Outer limits are complicated. We want to compute the available angular distance at\n // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n //\n // If the borderRadius is large, that value can become negative.\n // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n // we know that the thickness term will dominate and compute the limits at that point\n const computeOuterLimit = (val)=>{\n const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n };\n return {\n outerStart: computeOuterLimit(o.outerStart),\n outerEnd: computeOuterLimit(o.outerEnd),\n innerStart: _limitValue(o.innerStart, 0, innerLimit),\n innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n return {\n x: x + r * Math.cos(theta),\n y: y + r * Math.sin(theta)\n };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n * Start End\n *\n * 1--->a--->2 Outer\n * / \\\n * 8 3\n * | |\n * | |\n * 7 4\n * \\ /\n * 6<---b<---5 Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n const { x , y , startAngle: start , pixelMargin , innerRadius: innerR } = element;\n const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n let spacingOffset = 0;\n const alpha = end - start;\n if (spacing) {\n // When spacing is present, it is the same for all items\n // So we adjust the start and end angle of the arc such that\n // the distance is the same as it would be without the spacing\n const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n spacingOffset = (alpha - adjustedAngle) / 2;\n }\n const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n const angleOffset = (alpha - beta) / 2;\n const startAngle = start + angleOffset + spacingOffset;\n const endAngle = end - angleOffset - spacingOffset;\n const { outerStart , outerEnd , innerStart , innerEnd } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n const outerStartAdjustedRadius = outerRadius - outerStart;\n const outerEndAdjustedRadius = outerRadius - outerEnd;\n const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n const innerStartAdjustedRadius = innerRadius + innerStart;\n const innerEndAdjustedRadius = innerRadius + innerEnd;\n const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n ctx.beginPath();\n if (circular) {\n // The first arc segments from point 1 to point a to point 2\n const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n // The corner segment from point 2 to point 3\n if (outerEnd > 0) {\n const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n }\n // The line from point 3 to point 4\n const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n ctx.lineTo(p4.x, p4.y);\n // The corner segment from point 4 to point 5\n if (innerEnd > 0) {\n const pCenter1 = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n ctx.arc(pCenter1.x, pCenter1.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n }\n // The inner arc from point 5 to point b to point 6\n const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n // The corner segment from point 6 to point 7\n if (innerStart > 0) {\n const pCenter2 = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n ctx.arc(pCenter2.x, pCenter2.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n }\n // The line from point 7 to point 8\n const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n ctx.lineTo(p8.x, p8.y);\n // The corner segment from point 8 to point 1\n if (outerStart > 0) {\n const pCenter3 = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n ctx.arc(pCenter3.x, pCenter3.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n }\n } else {\n ctx.moveTo(x, y);\n const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerStartX, outerStartY);\n const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n ctx.lineTo(outerEndX, outerEndY);\n }\n ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference } = element;\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.fill();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.fill();\n return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n const { fullCircles , startAngle , circumference , options } = element;\n const { borderWidth , borderJoinStyle } = options;\n const inner = options.borderAlign === 'inner';\n if (!borderWidth) {\n return;\n }\n if (inner) {\n ctx.lineWidth = borderWidth * 2;\n ctx.lineJoin = borderJoinStyle || 'round';\n } else {\n ctx.lineWidth = borderWidth;\n ctx.lineJoin = borderJoinStyle || 'bevel';\n }\n let endAngle = element.endAngle;\n if (fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n for(let i = 0; i < fullCircles; ++i){\n ctx.stroke();\n }\n if (!isNaN(circumference)) {\n endAngle = startAngle + (circumference % TAU || TAU);\n }\n }\n if (inner) {\n clipArc(ctx, element, endAngle);\n }\n if (!fullCircles) {\n pathArc(ctx, element, offset, spacing, endAngle, circular);\n ctx.stroke();\n }\n}\nclass ArcElement extends Element {\n static id = 'arc';\n static defaults = {\n borderAlign: 'center',\n borderColor: '#fff',\n borderJoinStyle: undefined,\n borderRadius: 0,\n borderWidth: 2,\n offset: 0,\n spacing: 0,\n angle: undefined,\n circular: true\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.circumference = undefined;\n this.startAngle = undefined;\n this.endAngle = undefined;\n this.innerRadius = undefined;\n this.outerRadius = undefined;\n this.pixelMargin = 0;\n this.fullCircles = 0;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(chartX, chartY, useFinalPosition) {\n const point = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n const { angle , distance } = getAngleFromPoint(point, {\n x: chartX,\n y: chartY\n });\n const { startAngle , endAngle , innerRadius , outerRadius , circumference } = this.getProps([\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius',\n 'circumference'\n ], useFinalPosition);\n const rAdjust = this.options.spacing / 2;\n const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n const betweenAngles = _circumference >= TAU || _angleBetween(angle, startAngle, endAngle);\n const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n return betweenAngles && withinRadius;\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , startAngle , endAngle , innerRadius , outerRadius } = this.getProps([\n 'x',\n 'y',\n 'startAngle',\n 'endAngle',\n 'innerRadius',\n 'outerRadius'\n ], useFinalPosition);\n const { offset , spacing } = this.options;\n const halfAngle = (startAngle + endAngle) / 2;\n const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n return {\n x: x + Math.cos(halfAngle) * halfRadius,\n y: y + Math.sin(halfAngle) * halfRadius\n };\n }\n tooltipPosition(useFinalPosition) {\n return this.getCenterPoint(useFinalPosition);\n }\n draw(ctx) {\n const { options , circumference } = this;\n const offset = (options.offset || 0) / 4;\n const spacing = (options.spacing || 0) / 2;\n const circular = options.circular;\n this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n return;\n }\n ctx.save();\n const halfAngle = (this.startAngle + this.endAngle) / 2;\n ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n const radiusOffset = offset * fix;\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n drawArc(ctx, this, radiusOffset, spacing, circular);\n drawBorder(ctx, this, radiusOffset, spacing, circular);\n ctx.restore();\n }\n}\n\nfunction setStyle(ctx, options, style = options) {\n ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n ctx.lineTo(target.x, target.y);\n}\nfunction getLineMethod(options) {\n if (options.stepped) {\n return _steppedLineTo;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierCurveTo;\n }\n return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n const count = points.length;\n const { start: paramsStart = 0 , end: paramsEnd = count - 1 } = params;\n const { start: segmentStart , end: segmentEnd } = segment;\n const start = Math.max(paramsStart, segmentStart);\n const end = Math.min(paramsEnd, segmentEnd);\n const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n return {\n count,\n start,\n loop: segment.loop,\n ilen: end < start && !outside ? count + end - start : end - start\n };\n}\n function pathSegment(ctx, line, segment, params) {\n const { points , options } = line;\n const { count , start , loop , ilen } = pathVars(points, segment, params);\n const lineMethod = getLineMethod(options);\n let { move =true , reverse } = params || {};\n let i, point, prev;\n for(i = 0; i <= ilen; ++i){\n point = points[(start + (reverse ? ilen - i : i)) % count];\n if (point.skip) {\n continue;\n } else if (move) {\n ctx.moveTo(point.x, point.y);\n move = false;\n } else {\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n prev = point;\n }\n if (loop) {\n point = points[(start + (reverse ? ilen : 0)) % count];\n lineMethod(ctx, prev, point, reverse, options.stepped);\n }\n return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n const points = line.points;\n const { count , start , ilen } = pathVars(points, segment, params);\n const { move =true , reverse } = params || {};\n let avgX = 0;\n let countX = 0;\n let i, point, prevX, minY, maxY, lastY;\n const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n const drawX = ()=>{\n if (minY !== maxY) {\n ctx.lineTo(avgX, maxY);\n ctx.lineTo(avgX, minY);\n ctx.lineTo(avgX, lastY);\n }\n };\n if (move) {\n point = points[pointIndex(0)];\n ctx.moveTo(point.x, point.y);\n }\n for(i = 0; i <= ilen; ++i){\n point = points[pointIndex(i)];\n if (point.skip) {\n continue;\n }\n const x = point.x;\n const y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n } else if (y > maxY) {\n maxY = y;\n }\n avgX = (countX * avgX + x) / ++countX;\n } else {\n drawX();\n ctx.lineTo(x, y);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n }\n lastY = y;\n }\n drawX();\n}\n function _getSegmentMethod(line) {\n const opts = line.options;\n const borderDash = opts.borderDash && opts.borderDash.length;\n const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n if (options.stepped) {\n return _steppedInterpolation;\n }\n if (options.tension || options.cubicInterpolationMode === 'monotone') {\n return _bezierInterpolation;\n }\n return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n let path = line._path;\n if (!path) {\n path = line._path = new Path2D();\n if (line.path(path, start, count)) {\n path.closePath();\n }\n }\n setStyle(ctx, line.options);\n ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n const { segments , options } = line;\n const segmentMethod = _getSegmentMethod(line);\n for (const segment of segments){\n setStyle(ctx, options, segment.style);\n ctx.beginPath();\n if (segmentMethod(ctx, line, segment, {\n start,\n end: start + count - 1\n })) {\n ctx.closePath();\n }\n ctx.stroke();\n }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n if (usePath2D && !line.options.segment) {\n strokePathWithCache(ctx, line, start, count);\n } else {\n strokePathDirect(ctx, line, start, count);\n }\n}\nclass LineElement extends Element {\n static id = 'line';\n static defaults = {\n borderCapStyle: 'butt',\n borderDash: [],\n borderDashOffset: 0,\n borderJoinStyle: 'miter',\n borderWidth: 3,\n capBezierPoints: true,\n cubicInterpolationMode: 'default',\n fill: false,\n spanGaps: false,\n stepped: false,\n tension: 0\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n static descriptors = {\n _scriptable: true,\n _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n };\n constructor(cfg){\n super();\n this.animated = true;\n this.options = undefined;\n this._chart = undefined;\n this._loop = undefined;\n this._fullLoop = undefined;\n this._path = undefined;\n this._points = undefined;\n this._segments = undefined;\n this._decimated = false;\n this._pointsUpdated = false;\n this._datasetIndex = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n updateControlPoints(chartArea, indexAxis) {\n const options = this.options;\n if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n const loop = options.spanGaps ? this._loop : this._fullLoop;\n _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n this._pointsUpdated = true;\n }\n }\n set points(points) {\n this._points = points;\n delete this._segments;\n delete this._path;\n this._pointsUpdated = false;\n }\n get points() {\n return this._points;\n }\n get segments() {\n return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n }\n first() {\n const segments = this.segments;\n const points = this.points;\n return segments.length && points[segments[0].start];\n }\n last() {\n const segments = this.segments;\n const points = this.points;\n const count = segments.length;\n return count && points[segments[count - 1].end];\n }\n interpolate(point, property) {\n const options = this.options;\n const value = point[property];\n const points = this.points;\n const segments = _boundSegments(this, {\n property,\n start: value,\n end: value\n });\n if (!segments.length) {\n return;\n }\n const result = [];\n const _interpolate = _getInterpolationMethod(options);\n let i, ilen;\n for(i = 0, ilen = segments.length; i < ilen; ++i){\n const { start , end } = segments[i];\n const p1 = points[start];\n const p2 = points[end];\n if (p1 === p2) {\n result.push(p1);\n continue;\n }\n const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n const interpolated = _interpolate(p1, p2, t, options.stepped);\n interpolated[property] = point[property];\n result.push(interpolated);\n }\n return result.length === 1 ? result[0] : result;\n }\n pathSegment(ctx, segment, params) {\n const segmentMethod = _getSegmentMethod(this);\n return segmentMethod(ctx, this, segment, params);\n }\n path(ctx, start, count) {\n const segments = this.segments;\n const segmentMethod = _getSegmentMethod(this);\n let loop = this._loop;\n start = start || 0;\n count = count || this.points.length - start;\n for (const segment of segments){\n loop &= segmentMethod(ctx, this, segment, {\n start,\n end: start + count - 1\n });\n }\n return !!loop;\n }\n draw(ctx, chartArea, start, count) {\n const options = this.options || {};\n const points = this.points || [];\n if (points.length && options.borderWidth) {\n ctx.save();\n draw(ctx, this, start, count);\n ctx.restore();\n }\n if (this.animated) {\n this._pointsUpdated = false;\n this._path = undefined;\n }\n }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n const options = el.options;\n const { [axis]: value } = el.getProps([\n axis\n ], useFinalPosition);\n return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n static id = 'point';\n /**\n * @type {any}\n */ static defaults = {\n borderWidth: 1,\n hitRadius: 1,\n hoverBorderWidth: 1,\n hoverRadius: 4,\n pointStyle: 'circle',\n radius: 3,\n rotation: 0\n };\n /**\n * @type {any}\n */ static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.parsed = undefined;\n this.skip = undefined;\n this.stop = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n const options = this.options;\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange$1(this, mouseX, 'x', useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange$1(this, mouseY, 'y', useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y } = this.getProps([\n 'x',\n 'y'\n ], useFinalPosition);\n return {\n x,\n y\n };\n }\n size(options) {\n options = options || this.options || {};\n let radius = options.radius || 0;\n radius = Math.max(radius, radius && options.hoverRadius || 0);\n const borderWidth = radius && options.borderWidth || 0;\n return (radius + borderWidth) * 2;\n }\n draw(ctx, area) {\n const options = this.options;\n if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n return;\n }\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.fillStyle = options.backgroundColor;\n drawPoint(ctx, options, this.x, this.y);\n }\n getRange() {\n const options = this.options || {};\n // @ts-expect-error Fallbacks should never be hit in practice\n return options.radius + options.hitRadius;\n }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n const { x , y , base , width , height } = bar.getProps([\n 'x',\n 'y',\n 'base',\n 'width',\n 'height'\n ], useFinalPosition);\n let left, right, top, bottom, half;\n if (bar.horizontal) {\n half = height / 2;\n left = Math.min(x, base);\n right = Math.max(x, base);\n top = y - half;\n bottom = y + half;\n } else {\n half = width / 2;\n left = x - half;\n right = x + half;\n top = Math.min(y, base);\n bottom = Math.max(y, base);\n }\n return {\n left,\n top,\n right,\n bottom\n };\n}\nfunction skipOrLimit(skip, value, min, max) {\n return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n const value = bar.options.borderWidth;\n const skip = bar.borderSkipped;\n const o = toTRBL(value);\n return {\n t: skipOrLimit(skip.top, o.top, 0, maxH),\n r: skipOrLimit(skip.right, o.right, 0, maxW),\n b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n l: skipOrLimit(skip.left, o.left, 0, maxW)\n };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n const { enableBorderRadius } = bar.getProps([\n 'enableBorderRadius'\n ]);\n const value = bar.options.borderRadius;\n const o = toTRBLCorners(value);\n const maxR = Math.min(maxW, maxH);\n const skip = bar.borderSkipped;\n const enableBorder = enableBorderRadius || isObject(value);\n return {\n topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n };\n}\nfunction boundingRects(bar) {\n const bounds = getBarBounds(bar);\n const width = bounds.right - bounds.left;\n const height = bounds.bottom - bounds.top;\n const border = parseBorderWidth(bar, width / 2, height / 2);\n const radius = parseBorderRadius(bar, width / 2, height / 2);\n return {\n outer: {\n x: bounds.left,\n y: bounds.top,\n w: width,\n h: height,\n radius\n },\n inner: {\n x: bounds.left + border.l,\n y: bounds.top + border.t,\n w: width - border.l - border.r,\n h: height - border.t - border.b,\n radius: {\n topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n }\n }\n };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n const skipX = x === null;\n const skipY = y === null;\n const skipBoth = skipX && skipY;\n const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n const x = rect.x !== refRect.x ? -amount : 0;\n const y = rect.y !== refRect.y ? -amount : 0;\n const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n return {\n x: rect.x + x,\n y: rect.y + y,\n w: rect.w + w,\n h: rect.h + h,\n radius: rect.radius\n };\n}\nclass BarElement extends Element {\n static id = 'bar';\n static defaults = {\n borderSkipped: 'start',\n borderWidth: 0,\n borderRadius: 0,\n inflateAmount: 'auto',\n pointStyle: undefined\n };\n static defaultRoutes = {\n backgroundColor: 'backgroundColor',\n borderColor: 'borderColor'\n };\n constructor(cfg){\n super();\n this.options = undefined;\n this.horizontal = undefined;\n this.base = undefined;\n this.width = undefined;\n this.height = undefined;\n this.inflateAmount = undefined;\n if (cfg) {\n Object.assign(this, cfg);\n }\n }\n draw(ctx) {\n const { inflateAmount , options: { borderColor , backgroundColor } } = this;\n const { inner , outer } = boundingRects(this);\n const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n ctx.save();\n if (outer.w !== inner.w || outer.h !== inner.h) {\n ctx.beginPath();\n addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n ctx.clip();\n addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n ctx.fillStyle = borderColor;\n ctx.fill('evenodd');\n }\n ctx.beginPath();\n addRectPath(ctx, inflateRect(inner, inflateAmount));\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n inRange(mouseX, mouseY, useFinalPosition) {\n return inRange(this, mouseX, mouseY, useFinalPosition);\n }\n inXRange(mouseX, useFinalPosition) {\n return inRange(this, mouseX, null, useFinalPosition);\n }\n inYRange(mouseY, useFinalPosition) {\n return inRange(this, null, mouseY, useFinalPosition);\n }\n getCenterPoint(useFinalPosition) {\n const { x , y , base , horizontal } = this.getProps([\n 'x',\n 'y',\n 'base',\n 'horizontal'\n ], useFinalPosition);\n return {\n x: horizontal ? (x + base) / 2 : x,\n y: horizontal ? y : (y + base) / 2\n };\n }\n getRange(axis) {\n return axis === 'x' ? this.width / 2 : this.height / 2;\n }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nLineElement: LineElement,\nPointElement: PointElement,\nBarElement: BarElement\n});\n\nconst BORDER_COLORS = [\n 'rgb(54, 162, 235)',\n 'rgb(255, 99, 132)',\n 'rgb(255, 159, 64)',\n 'rgb(255, 205, 86)',\n 'rgb(75, 192, 192)',\n 'rgb(153, 102, 255)',\n 'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n dataset.borderColor = getBorderColor(i);\n dataset.backgroundColor = getBackgroundColor(i);\n return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n return i;\n}\nfunction getColorizer(chart) {\n let i = 0;\n return (dataset, datasetIndex)=>{\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n if (controller instanceof DoughnutController) {\n i = colorizeDoughnutDataset(dataset, i);\n } else if (controller instanceof PolarAreaController) {\n i = colorizePolarAreaDataset(dataset, i);\n } else if (controller) {\n i = colorizeDefaultDataset(dataset, i);\n }\n };\n}\nfunction containsColorsDefinitions(descriptors) {\n let k;\n for(k in descriptors){\n if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n return true;\n }\n }\n return false;\n}\nfunction containsColorsDefinition(descriptor) {\n return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nvar plugin_colors = {\n id: 'colors',\n defaults: {\n enabled: true,\n forceOverride: false\n },\n beforeLayout (chart, _args, options) {\n if (!options.enabled) {\n return;\n }\n const { data: { datasets } , options: chartOptions } = chart.config;\n const { elements } = chartOptions;\n if (!options.forceOverride && (containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements))) {\n return;\n }\n const colorizer = getColorizer(chart);\n datasets.forEach(colorizer);\n }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n if (samples >= count) {\n return data.slice(start, start + count);\n }\n const decimated = [];\n const bucketWidth = (count - 2) / (samples - 2);\n let sampledIndex = 0;\n const endIndex = start + count - 1;\n let a = start;\n let i, maxAreaPoint, maxArea, area, nextA;\n decimated[sampledIndex++] = data[a];\n for(i = 0; i < samples - 2; i++){\n let avgX = 0;\n let avgY = 0;\n let j;\n const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n const avgRangeLength = avgRangeEnd - avgRangeStart;\n for(j = avgRangeStart; j < avgRangeEnd; j++){\n avgX += data[j].x;\n avgY += data[j].y;\n }\n avgX /= avgRangeLength;\n avgY /= avgRangeLength;\n const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n const { x: pointAx , y: pointAy } = data[a];\n maxArea = area = -1;\n for(j = rangeOffs; j < rangeTo; j++){\n area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n if (area > maxArea) {\n maxArea = area;\n maxAreaPoint = data[j];\n nextA = j;\n }\n }\n decimated[sampledIndex++] = maxAreaPoint;\n a = nextA;\n }\n decimated[sampledIndex++] = data[endIndex];\n return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n let avgX = 0;\n let countX = 0;\n let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n const decimated = [];\n const endIndex = start + count - 1;\n const xMin = data[start].x;\n const xMax = data[endIndex].x;\n const dx = xMax - xMin;\n for(i = start; i < start + count; ++i){\n point = data[i];\n x = (point.x - xMin) / dx * availableWidth;\n y = point.y;\n const truncX = x | 0;\n if (truncX === prevX) {\n if (y < minY) {\n minY = y;\n minIndex = i;\n } else if (y > maxY) {\n maxY = y;\n maxIndex = i;\n }\n avgX = (countX * avgX + point.x) / ++countX;\n } else {\n const lastIndex = i - 1;\n if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n const intermediateIndex1 = Math.min(minIndex, maxIndex);\n const intermediateIndex2 = Math.max(minIndex, maxIndex);\n if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex1],\n x: avgX\n });\n }\n if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n decimated.push({\n ...data[intermediateIndex2],\n x: avgX\n });\n }\n }\n if (i > 0 && lastIndex !== startIndex) {\n decimated.push(data[lastIndex]);\n }\n decimated.push(point);\n prevX = truncX;\n countX = 0;\n minY = maxY = y;\n minIndex = maxIndex = startIndex = i;\n }\n }\n return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n if (dataset._decimated) {\n const data = dataset._data;\n delete dataset._decimated;\n delete dataset._data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n writable: true,\n value: data\n });\n }\n}\nfunction cleanDecimatedData(chart) {\n chart.data.datasets.forEach((dataset)=>{\n cleanDecimatedDataset(dataset);\n });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n const pointCount = points.length;\n let start = 0;\n let count;\n const { iScale } = meta;\n const { min , max , minDefined , maxDefined } = iScale.getUserBounds();\n if (minDefined) {\n start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n }\n if (maxDefined) {\n count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n } else {\n count = pointCount - start;\n }\n return {\n start,\n count\n };\n}\nvar plugin_decimation = {\n id: 'decimation',\n defaults: {\n algorithm: 'min-max',\n enabled: false\n },\n beforeElementsUpdate: (chart, args, options)=>{\n if (!options.enabled) {\n cleanDecimatedData(chart);\n return;\n }\n const availableWidth = chart.width;\n chart.data.datasets.forEach((dataset, datasetIndex)=>{\n const { _data , indexAxis } = dataset;\n const meta = chart.getDatasetMeta(datasetIndex);\n const data = _data || dataset.data;\n if (resolve([\n indexAxis,\n chart.options.indexAxis\n ]) === 'y') {\n return;\n }\n if (!meta.controller.supportsDecimation) {\n return;\n }\n const xAxis = chart.scales[meta.xAxisID];\n if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n return;\n }\n if (chart.options.parsing) {\n return;\n }\n let { start , count } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n const threshold = options.threshold || 4 * availableWidth;\n if (count <= threshold) {\n cleanDecimatedDataset(dataset);\n return;\n }\n if (isNullOrUndef(_data)) {\n dataset._data = data;\n delete dataset.data;\n Object.defineProperty(dataset, 'data', {\n configurable: true,\n enumerable: true,\n get: function() {\n return this._decimated;\n },\n set: function(d) {\n this._data = d;\n }\n });\n }\n let decimated;\n switch(options.algorithm){\n case 'lttb':\n decimated = lttbDecimation(data, start, count, availableWidth, options);\n break;\n case 'min-max':\n decimated = minMaxDecimation(data, start, count, availableWidth);\n break;\n default:\n throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n }\n dataset._decimated = decimated;\n });\n },\n destroy (chart) {\n cleanDecimatedData(chart);\n }\n};\n\nfunction _segments(line, target, property) {\n const segments = line.segments;\n const points = line.points;\n const tpoints = target.points;\n const parts = [];\n for (const segment of segments){\n let { start , end } = segment;\n end = _findSegmentEnd(start, end, points);\n const bounds = _getBounds(property, points[start], points[end], segment.loop);\n if (!target.segments) {\n parts.push({\n source: segment,\n target: bounds,\n start: points[start],\n end: points[end]\n });\n continue;\n }\n const targetSegments = _boundSegments(target, bounds);\n for (const tgt of targetSegments){\n const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n const fillSources = _boundSegment(segment, points, subBounds);\n for (const fillSource of fillSources){\n parts.push({\n source: fillSource,\n target: tgt,\n start: {\n [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n },\n end: {\n [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n }\n });\n }\n }\n }\n return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n if (loop) {\n return;\n }\n let start = first[property];\n let end = last[property];\n if (property === 'angle') {\n start = _normalizeAngle(start);\n end = _normalizeAngle(end);\n }\n return {\n property,\n start,\n end\n };\n}\nfunction _pointsFromSegments(boundary, line) {\n const { x =null , y =null } = boundary || {};\n const linePoints = line.points;\n const points = [];\n line.segments.forEach(({ start , end })=>{\n end = _findSegmentEnd(start, end, linePoints);\n const first = linePoints[start];\n const last = linePoints[end];\n if (y !== null) {\n points.push({\n x: first.x,\n y\n });\n points.push({\n x: last.x,\n y\n });\n } else if (x !== null) {\n points.push({\n x,\n y: first.y\n });\n points.push({\n x,\n y: last.y\n });\n }\n });\n return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n for(; end > start; end--){\n const point = points[end];\n if (!isNaN(point.x) && !isNaN(point.y)) {\n break;\n }\n }\n return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n if (a && b) {\n return fn(a[prop], b[prop]);\n }\n return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n let points = [];\n let _loop = false;\n if (isArray(boundary)) {\n _loop = true;\n points = boundary;\n } else {\n points = _pointsFromSegments(boundary, line);\n }\n return points.length ? new LineElement({\n points,\n options: {\n tension: 0\n },\n _loop,\n _fullLoop: _loop\n }) : null;\n}\nfunction _shouldApplyFill(source) {\n return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n const source = sources[index];\n let fill = source.fill;\n const visited = [\n index\n ];\n let target;\n if (!propagate) {\n return fill;\n }\n while(fill !== false && visited.indexOf(fill) === -1){\n if (!isNumberFinite(fill)) {\n return fill;\n }\n target = sources[fill];\n if (!target) {\n return false;\n }\n if (target.visible) {\n return fill;\n }\n visited.push(fill);\n fill = target.fill;\n }\n return false;\n}\n function _decodeFill(line, index, count) {\n const fill = parseFillOption(line);\n if (isObject(fill)) {\n return isNaN(fill.value) ? false : fill;\n }\n let target = parseFloat(fill);\n if (isNumberFinite(target) && Math.floor(target) === target) {\n return decodeTargetIndex(fill[0], index, target, count);\n }\n return [\n 'origin',\n 'start',\n 'end',\n 'stack',\n 'shape'\n ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n if (firstCh === '-' || firstCh === '+') {\n target = index + target;\n }\n if (target === index || target < 0 || target >= count) {\n return false;\n }\n return target;\n}\n function _getTargetPixel(fill, scale) {\n let pixel = null;\n if (fill === 'start') {\n pixel = scale.bottom;\n } else if (fill === 'end') {\n pixel = scale.top;\n } else if (isObject(fill)) {\n pixel = scale.getPixelForValue(fill.value);\n } else if (scale.getBasePixel) {\n pixel = scale.getBasePixel();\n }\n return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n let value;\n if (fill === 'start') {\n value = startValue;\n } else if (fill === 'end') {\n value = scale.options.reverse ? scale.min : scale.max;\n } else if (isObject(fill)) {\n value = fill.value;\n } else {\n value = scale.getBaseValue();\n }\n return value;\n}\n function parseFillOption(line) {\n const options = line.options;\n const fillOption = options.fill;\n let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n if (fill === undefined) {\n fill = !!options.backgroundColor;\n }\n if (fill === false || fill === null) {\n return false;\n }\n if (fill === true) {\n return 'origin';\n }\n return fill;\n}\n\nfunction _buildStackLine(source) {\n const { scale , index , line } = source;\n const points = [];\n const segments = line.segments;\n const sourcePoints = line.points;\n const linesBelow = getLinesBelow(scale, index);\n linesBelow.push(_createBoundaryLine({\n x: null,\n y: scale.bottom\n }, line));\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n for(let j = segment.start; j <= segment.end; j++){\n addPointsBelow(points, sourcePoints[j], linesBelow);\n }\n }\n return new LineElement({\n points,\n options: {}\n });\n}\n function getLinesBelow(scale, index) {\n const below = [];\n const metas = scale.getMatchingVisibleMetas('line');\n for(let i = 0; i < metas.length; i++){\n const meta = metas[i];\n if (meta.index === index) {\n break;\n }\n if (!meta.hidden) {\n below.unshift(meta.dataset);\n }\n }\n return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n const postponed = [];\n for(let j = 0; j < linesBelow.length; j++){\n const line = linesBelow[j];\n const { first , last , point } = findPoint(line, sourcePoint, 'x');\n if (!point || first && last) {\n continue;\n }\n if (first) {\n postponed.unshift(point);\n } else {\n points.push(point);\n if (!last) {\n break;\n }\n }\n }\n points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n const point = line.interpolate(sourcePoint, property);\n if (!point) {\n return {};\n }\n const pointValue = point[property];\n const segments = line.segments;\n const linePoints = line.points;\n let first = false;\n let last = false;\n for(let i = 0; i < segments.length; i++){\n const segment = segments[i];\n const firstValue = linePoints[segment.start][property];\n const lastValue = linePoints[segment.end][property];\n if (_isBetween(pointValue, firstValue, lastValue)) {\n first = pointValue === firstValue;\n last = pointValue === lastValue;\n break;\n }\n }\n return {\n first,\n last,\n point\n };\n}\n\nclass simpleArc {\n constructor(opts){\n this.x = opts.x;\n this.y = opts.y;\n this.radius = opts.radius;\n }\n pathSegment(ctx, bounds, opts) {\n const { x , y , radius } = this;\n bounds = bounds || {\n start: 0,\n end: TAU\n };\n ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n return !opts.bounds;\n }\n interpolate(point) {\n const { x , y , radius } = this;\n const angle = point.angle;\n return {\n x: x + Math.cos(angle) * radius,\n y: y + Math.sin(angle) * radius,\n angle\n };\n }\n}\n\nfunction _getTarget(source) {\n const { chart , fill , line } = source;\n if (isNumberFinite(fill)) {\n return getLineByIndex(chart, fill);\n }\n if (fill === 'stack') {\n return _buildStackLine(source);\n }\n if (fill === 'shape') {\n return true;\n }\n const boundary = computeBoundary(source);\n if (boundary instanceof simpleArc) {\n return boundary;\n }\n return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n const meta = chart.getDatasetMeta(index);\n const visible = meta && chart.isDatasetVisible(index);\n return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n const scale = source.scale || {};\n if (scale.getPointPositionForValue) {\n return computeCircularBoundary(source);\n }\n return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n const { scale ={} , fill } = source;\n const pixel = _getTargetPixel(fill, scale);\n if (isNumberFinite(pixel)) {\n const horizontal = scale.isHorizontal();\n return {\n x: horizontal ? pixel : null,\n y: horizontal ? null : pixel\n };\n }\n return null;\n}\nfunction computeCircularBoundary(source) {\n const { scale , fill } = source;\n const options = scale.options;\n const length = scale.getLabels().length;\n const start = options.reverse ? scale.max : scale.min;\n const value = _getTargetValue(fill, scale, start);\n const target = [];\n if (options.grid.circular) {\n const center = scale.getPointPositionForValue(0, start);\n return new simpleArc({\n x: center.x,\n y: center.y,\n radius: scale.getDistanceFromCenterForValue(value)\n });\n }\n for(let i = 0; i < length; ++i){\n target.push(scale.getPointPositionForValue(i, value));\n }\n return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n const target = _getTarget(source);\n const { line , scale , axis } = source;\n const lineOpts = line.options;\n const fillOption = lineOpts.fill;\n const color = lineOpts.backgroundColor;\n const { above =color , below =color } = fillOption || {};\n if (target && line.points.length) {\n clipArea(ctx, area);\n doFill(ctx, {\n line,\n target,\n above,\n below,\n area,\n scale,\n axis\n });\n unclipArea(ctx);\n }\n}\nfunction doFill(ctx, cfg) {\n const { line , target , above , below , area , scale } = cfg;\n const property = line._loop ? 'angle' : cfg.axis;\n ctx.save();\n if (property === 'x' && below !== above) {\n clipVertical(ctx, target, area.top);\n fill(ctx, {\n line,\n target,\n color: above,\n scale,\n property\n });\n ctx.restore();\n ctx.save();\n clipVertical(ctx, target, area.bottom);\n }\n fill(ctx, {\n line,\n target,\n color: below,\n scale,\n property\n });\n ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n const { segments , points } = target;\n let first = true;\n let lineLoop = false;\n ctx.beginPath();\n for (const segment of segments){\n const { start , end } = segment;\n const firstPoint = points[start];\n const lastPoint = points[_findSegmentEnd(start, end, points)];\n if (first) {\n ctx.moveTo(firstPoint.x, firstPoint.y);\n first = false;\n } else {\n ctx.lineTo(firstPoint.x, clipY);\n ctx.lineTo(firstPoint.x, firstPoint.y);\n }\n lineLoop = !!target.pathSegment(ctx, segment, {\n move: lineLoop\n });\n if (lineLoop) {\n ctx.closePath();\n } else {\n ctx.lineTo(lastPoint.x, clipY);\n }\n }\n ctx.lineTo(target.first().x, clipY);\n ctx.closePath();\n ctx.clip();\n}\nfunction fill(ctx, cfg) {\n const { line , target , property , color , scale } = cfg;\n const segments = _segments(line, target, property);\n for (const { source: src , target: tgt , start , end } of segments){\n const { style: { backgroundColor =color } = {} } = src;\n const notShape = target !== true;\n ctx.save();\n ctx.fillStyle = backgroundColor;\n clipBounds(ctx, scale, notShape && _getBounds(property, start, end));\n ctx.beginPath();\n const lineLoop = !!line.pathSegment(ctx, src);\n let loop;\n if (notShape) {\n if (lineLoop) {\n ctx.closePath();\n } else {\n interpolatedLineTo(ctx, target, end, property);\n }\n const targetLoop = !!target.pathSegment(ctx, tgt, {\n move: lineLoop,\n reverse: true\n });\n loop = lineLoop && targetLoop;\n if (!loop) {\n interpolatedLineTo(ctx, target, start, property);\n }\n }\n ctx.closePath();\n ctx.fill(loop ? 'evenodd' : 'nonzero');\n ctx.restore();\n }\n}\nfunction clipBounds(ctx, scale, bounds) {\n const { top , bottom } = scale.chart.chartArea;\n const { property , start , end } = bounds || {};\n if (property === 'x') {\n ctx.beginPath();\n ctx.rect(start, top, end - start, bottom - top);\n ctx.clip();\n }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n const interpolatedPoint = target.interpolate(point, property);\n if (interpolatedPoint) {\n ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n }\n}\n\nvar index = {\n id: 'filler',\n afterDatasetsUpdate (chart, _args, options) {\n const count = (chart.data.datasets || []).length;\n const sources = [];\n let meta, i, line, source;\n for(i = 0; i < count; ++i){\n meta = chart.getDatasetMeta(i);\n line = meta.dataset;\n source = null;\n if (line && line.options && line instanceof LineElement) {\n source = {\n visible: chart.isDatasetVisible(i),\n index: i,\n fill: _decodeFill(line, i, count),\n chart,\n axis: meta.controller.options.indexAxis,\n scale: meta.vScale,\n line\n };\n }\n meta.$filler = source;\n sources.push(source);\n }\n for(i = 0; i < count; ++i){\n source = sources[i];\n if (!source || source.fill === false) {\n continue;\n }\n source.fill = _resolveTarget(sources, i, options.propagate);\n }\n },\n beforeDraw (chart, _args, options) {\n const draw = options.drawTime === 'beforeDraw';\n const metasets = chart.getSortedVisibleDatasetMetas();\n const area = chart.chartArea;\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (!source) {\n continue;\n }\n source.line.updateControlPoints(area, source.axis);\n if (draw && source.fill) {\n _drawfill(chart.ctx, source, area);\n }\n }\n },\n beforeDatasetsDraw (chart, _args, options) {\n if (options.drawTime !== 'beforeDatasetsDraw') {\n return;\n }\n const metasets = chart.getSortedVisibleDatasetMetas();\n for(let i = metasets.length - 1; i >= 0; --i){\n const source = metasets[i].$filler;\n if (_shouldApplyFill(source)) {\n _drawfill(chart.ctx, source, chart.chartArea);\n }\n }\n },\n beforeDatasetDraw (chart, args, options) {\n const source = args.meta.$filler;\n if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n return;\n }\n _drawfill(chart.ctx, source, chart.chartArea);\n },\n defaults: {\n propagate: true,\n drawTime: 'beforeDatasetDraw'\n }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n let { boxHeight =fontSize , boxWidth =fontSize } = labelOpts;\n if (labelOpts.usePointStyle) {\n boxHeight = Math.min(boxHeight, fontSize);\n boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n }\n return {\n boxWidth,\n boxHeight,\n itemHeight: Math.max(fontSize, boxHeight)\n };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n super();\n this._added = false;\n this.legendHitBoxes = [];\n this._hoveredItem = null;\n this.doughnutMode = false;\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this.legendItems = undefined;\n this.columnSizes = undefined;\n this.lineWidths = undefined;\n this.maxHeight = undefined;\n this.maxWidth = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.height = undefined;\n this.width = undefined;\n this._margins = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight, margins) {\n this.maxWidth = maxWidth;\n this.maxHeight = maxHeight;\n this._margins = margins;\n this.setDimensions();\n this.buildLabels();\n this.fit();\n }\n setDimensions() {\n if (this.isHorizontal()) {\n this.width = this.maxWidth;\n this.left = this._margins.left;\n this.right = this.width;\n } else {\n this.height = this.maxHeight;\n this.top = this._margins.top;\n this.bottom = this.height;\n }\n }\n buildLabels() {\n const labelOpts = this.options.labels || {};\n let legendItems = callback(labelOpts.generateLabels, [\n this.chart\n ], this) || [];\n if (labelOpts.filter) {\n legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n }\n if (labelOpts.sort) {\n legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n }\n if (this.options.reverse) {\n legendItems.reverse();\n }\n this.legendItems = legendItems;\n }\n fit() {\n const { options , ctx } = this;\n if (!options.display) {\n this.width = this.height = 0;\n return;\n }\n const labelOpts = options.labels;\n const labelFont = toFont(labelOpts.font);\n const fontSize = labelFont.size;\n const titleHeight = this._computeTitleHeight();\n const { boxWidth , itemHeight } = getBoxSize(labelOpts, fontSize);\n let width, height;\n ctx.font = labelFont.string;\n if (this.isHorizontal()) {\n width = this.maxWidth;\n height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n } else {\n height = this.maxHeight;\n width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n }\n this.width = Math.min(width, options.maxWidth || this.maxWidth);\n this.height = Math.min(height, options.maxHeight || this.maxHeight);\n }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n const { ctx , maxWidth , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const lineWidths = this.lineWidths = [\n 0\n ];\n const lineHeight = itemHeight + padding;\n let totalHeight = titleHeight;\n ctx.textAlign = 'left';\n ctx.textBaseline = 'middle';\n let row = -1;\n let top = -lineHeight;\n this.legendItems.forEach((legendItem, i)=>{\n const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n totalHeight += lineHeight;\n lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n top += lineHeight;\n row++;\n }\n hitboxes[i] = {\n left: 0,\n top,\n row,\n width: itemWidth,\n height: itemHeight\n };\n lineWidths[lineWidths.length - 1] += itemWidth + padding;\n });\n return totalHeight;\n }\n _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n const { ctx , maxHeight , options: { labels: { padding } } } = this;\n const hitboxes = this.legendHitBoxes = [];\n const columnSizes = this.columnSizes = [];\n const heightLimit = maxHeight - titleHeight;\n let totalWidth = padding;\n let currentColWidth = 0;\n let currentColHeight = 0;\n let left = 0;\n let col = 0;\n this.legendItems.forEach((legendItem, i)=>{\n const { itemWidth , itemHeight } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n totalWidth += currentColWidth + padding;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n left += currentColWidth + padding;\n col++;\n currentColWidth = currentColHeight = 0;\n }\n hitboxes[i] = {\n left,\n top: currentColHeight,\n col,\n width: itemWidth,\n height: itemHeight\n };\n currentColWidth = Math.max(currentColWidth, itemWidth);\n currentColHeight += itemHeight + padding;\n });\n totalWidth += currentColWidth;\n columnSizes.push({\n width: currentColWidth,\n height: currentColHeight\n });\n return totalWidth;\n }\n adjustHitBoxes() {\n if (!this.options.display) {\n return;\n }\n const titleHeight = this._computeTitleHeight();\n const { legendHitBoxes: hitboxes , options: { align , labels: { padding } , rtl } } = this;\n const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n if (this.isHorizontal()) {\n let row = 0;\n let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n for (const hitbox of hitboxes){\n if (row !== hitbox.row) {\n row = hitbox.row;\n left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n }\n hitbox.top += this.top + titleHeight + padding;\n hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n left += hitbox.width + padding;\n }\n } else {\n let col = 0;\n let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n for (const hitbox1 of hitboxes){\n if (hitbox1.col !== col) {\n col = hitbox1.col;\n top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n }\n hitbox1.top = top;\n hitbox1.left += this.left + padding;\n hitbox1.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox1.left), hitbox1.width);\n top += hitbox1.height + padding;\n }\n }\n }\n isHorizontal() {\n return this.options.position === 'top' || this.options.position === 'bottom';\n }\n draw() {\n if (this.options.display) {\n const ctx = this.ctx;\n clipArea(ctx, this);\n this._draw();\n unclipArea(ctx);\n }\n }\n _draw() {\n const { options: opts , columnSizes , lineWidths , ctx } = this;\n const { align , labels: labelOpts } = opts;\n const defaultColor = defaults.color;\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const labelFont = toFont(labelOpts.font);\n const { padding } = labelOpts;\n const fontSize = labelFont.size;\n const halfFontSize = fontSize / 2;\n let cursor;\n this.drawTitle();\n ctx.textAlign = rtlHelper.textAlign('left');\n ctx.textBaseline = 'middle';\n ctx.lineWidth = 0.5;\n ctx.font = labelFont.string;\n const { boxWidth , boxHeight , itemHeight } = getBoxSize(labelOpts, fontSize);\n const drawLegendBox = function(x, y, legendItem) {\n if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n return;\n }\n ctx.save();\n const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n if (labelOpts.usePointStyle) {\n const drawOptions = {\n radius: boxHeight * Math.SQRT2 / 2,\n pointStyle: legendItem.pointStyle,\n rotation: legendItem.rotation,\n borderWidth: lineWidth\n };\n const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n const centerY = y + halfFontSize;\n drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n } else {\n const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n const borderRadius = toTRBLCorners(legendItem.borderRadius);\n ctx.beginPath();\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n addRoundedRectPath(ctx, {\n x: xBoxLeft,\n y: yBoxTop,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n } else {\n ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n }\n ctx.fill();\n if (lineWidth !== 0) {\n ctx.stroke();\n }\n }\n ctx.restore();\n };\n const fillText = function(x, y, legendItem) {\n renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n strikethrough: legendItem.hidden,\n textAlign: rtlHelper.textAlign(legendItem.textAlign)\n });\n };\n const isHorizontal = this.isHorizontal();\n const titleHeight = this._computeTitleHeight();\n if (isHorizontal) {\n cursor = {\n x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n y: this.top + padding + titleHeight,\n line: 0\n };\n } else {\n cursor = {\n x: this.left + padding,\n y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n line: 0\n };\n }\n overrideTextDirection(this.ctx, opts.textDirection);\n const lineHeight = itemHeight + padding;\n this.legendItems.forEach((legendItem, i)=>{\n ctx.strokeStyle = legendItem.fontColor;\n ctx.fillStyle = legendItem.fontColor;\n const textWidth = ctx.measureText(legendItem.text).width;\n const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n const width = boxWidth + halfFontSize + textWidth;\n let x = cursor.x;\n let y = cursor.y;\n rtlHelper.setWidth(this.width);\n if (isHorizontal) {\n if (i > 0 && x + width + padding > this.right) {\n y = cursor.y += lineHeight;\n cursor.line++;\n x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n }\n } else if (i > 0 && y + lineHeight > this.bottom) {\n x = cursor.x = x + columnSizes[cursor.line].width + padding;\n cursor.line++;\n y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n }\n const realX = rtlHelper.x(x);\n drawLegendBox(realX, y, legendItem);\n x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n fillText(rtlHelper.x(x), y, legendItem);\n if (isHorizontal) {\n cursor.x += width + padding;\n } else if (typeof legendItem.text !== 'string') {\n const fontLineHeight = labelFont.lineHeight;\n cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight);\n } else {\n cursor.y += lineHeight;\n }\n });\n restoreTextDirection(this.ctx, opts.textDirection);\n }\n drawTitle() {\n const opts = this.options;\n const titleOpts = opts.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n if (!titleOpts.display) {\n return;\n }\n const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n const ctx = this.ctx;\n const position = titleOpts.position;\n const halfFontSize = titleFont.size / 2;\n const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n let y;\n let left = this.left;\n let maxWidth = this.width;\n if (this.isHorizontal()) {\n maxWidth = Math.max(...this.lineWidths);\n y = this.top + topPaddingPlusHalfFontSize;\n left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n } else {\n const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n }\n const x = _alignStartEnd(position, left, left + maxWidth);\n ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n ctx.textBaseline = 'middle';\n ctx.strokeStyle = titleOpts.color;\n ctx.fillStyle = titleOpts.color;\n ctx.font = titleFont.string;\n renderText(ctx, titleOpts.text, x, y, titleFont);\n }\n _computeTitleHeight() {\n const titleOpts = this.options.title;\n const titleFont = toFont(titleOpts.font);\n const titlePadding = toPadding(titleOpts.padding);\n return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n }\n _getLegendItemAt(x, y) {\n let i, hitBox, lh;\n if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n lh = this.legendHitBoxes;\n for(i = 0; i < lh.length; ++i){\n hitBox = lh[i];\n if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n return this.legendItems[i];\n }\n }\n }\n return null;\n }\n handleEvent(e) {\n const opts = this.options;\n if (!isListened(e.type, opts)) {\n return;\n }\n const hoveredItem = this._getLegendItemAt(e.x, e.y);\n if (e.type === 'mousemove' || e.type === 'mouseout') {\n const previous = this._hoveredItem;\n const sameItem = itemsEqual(previous, hoveredItem);\n if (previous && !sameItem) {\n callback(opts.onLeave, [\n e,\n previous,\n this\n ], this);\n }\n this._hoveredItem = hoveredItem;\n if (hoveredItem && !sameItem) {\n callback(opts.onHover, [\n e,\n hoveredItem,\n this\n ], this);\n }\n } else if (hoveredItem) {\n callback(opts.onClick, [\n e,\n hoveredItem,\n this\n ], this);\n }\n }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n return {\n itemWidth,\n itemHeight\n };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n let legendItemText = legendItem.text;\n if (legendItemText && typeof legendItemText !== 'string') {\n legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n }\n return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n let itemHeight = _itemHeight;\n if (typeof legendItem.text !== 'string') {\n itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n }\n return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n const labelHeight = legendItem.text ? legendItem.text.length + 0.5 : 0;\n return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n return true;\n }\n if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n return true;\n }\n return false;\n}\nvar plugin_legend = {\n id: 'legend',\n _element: Legend,\n start (chart, _args, options) {\n const legend = chart.legend = new Legend({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, legend, options);\n layouts.addBox(chart, legend);\n },\n stop (chart) {\n layouts.removeBox(chart, chart.legend);\n delete chart.legend;\n },\n beforeUpdate (chart, _args, options) {\n const legend = chart.legend;\n layouts.configure(chart, legend, options);\n legend.options = options;\n },\n afterUpdate (chart) {\n const legend = chart.legend;\n legend.buildLabels();\n legend.adjustHitBoxes();\n },\n afterEvent (chart, args) {\n if (!args.replay) {\n chart.legend.handleEvent(args.event);\n }\n },\n defaults: {\n display: true,\n position: 'top',\n align: 'center',\n fullSize: true,\n reverse: false,\n weight: 1000,\n onClick (e, legendItem, legend) {\n const index = legendItem.datasetIndex;\n const ci = legend.chart;\n if (ci.isDatasetVisible(index)) {\n ci.hide(index);\n legendItem.hidden = true;\n } else {\n ci.show(index);\n legendItem.hidden = false;\n }\n },\n onHover: null,\n onLeave: null,\n labels: {\n color: (ctx)=>ctx.chart.options.color,\n boxWidth: 40,\n padding: 10,\n generateLabels (chart) {\n const datasets = chart.data.datasets;\n const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius } } = chart.legend.options;\n return chart._getSortedDatasetMetas().map((meta)=>{\n const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n const borderWidth = toPadding(style.borderWidth);\n return {\n text: datasets[meta.index].label,\n fillStyle: style.backgroundColor,\n fontColor: color,\n hidden: !meta.visible,\n lineCap: style.borderCapStyle,\n lineDash: style.borderDash,\n lineDashOffset: style.borderDashOffset,\n lineJoin: style.borderJoinStyle,\n lineWidth: (borderWidth.width + borderWidth.height) / 4,\n strokeStyle: style.borderColor,\n pointStyle: pointStyle || style.pointStyle,\n rotation: style.rotation,\n textAlign: textAlign || style.textAlign,\n borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n datasetIndex: meta.index\n };\n }, this);\n }\n },\n title: {\n color: (ctx)=>ctx.chart.options.color,\n display: false,\n position: 'center',\n text: ''\n }\n },\n descriptors: {\n _scriptable: (name)=>!name.startsWith('on'),\n labels: {\n _scriptable: (name)=>![\n 'generateLabels',\n 'filter',\n 'sort'\n ].includes(name)\n }\n }\n};\n\nclass Title extends Element {\n constructor(config){\n super();\n this.chart = config.chart;\n this.options = config.options;\n this.ctx = config.ctx;\n this._padding = undefined;\n this.top = undefined;\n this.bottom = undefined;\n this.left = undefined;\n this.right = undefined;\n this.width = undefined;\n this.height = undefined;\n this.position = undefined;\n this.weight = undefined;\n this.fullSize = undefined;\n }\n update(maxWidth, maxHeight) {\n const opts = this.options;\n this.left = 0;\n this.top = 0;\n if (!opts.display) {\n this.width = this.height = this.right = this.bottom = 0;\n return;\n }\n this.width = this.right = maxWidth;\n this.height = this.bottom = maxHeight;\n const lineCount = isArray(opts.text) ? opts.text.length : 1;\n this._padding = toPadding(opts.padding);\n const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n if (this.isHorizontal()) {\n this.height = textSize;\n } else {\n this.width = textSize;\n }\n }\n isHorizontal() {\n const pos = this.options.position;\n return pos === 'top' || pos === 'bottom';\n }\n _drawArgs(offset) {\n const { top , left , bottom , right , options } = this;\n const align = options.align;\n let rotation = 0;\n let maxWidth, titleX, titleY;\n if (this.isHorizontal()) {\n titleX = _alignStartEnd(align, left, right);\n titleY = top + offset;\n maxWidth = right - left;\n } else {\n if (options.position === 'left') {\n titleX = left + offset;\n titleY = _alignStartEnd(align, bottom, top);\n rotation = PI * -0.5;\n } else {\n titleX = right - offset;\n titleY = _alignStartEnd(align, top, bottom);\n rotation = PI * 0.5;\n }\n maxWidth = bottom - top;\n }\n return {\n titleX,\n titleY,\n maxWidth,\n rotation\n };\n }\n draw() {\n const ctx = this.ctx;\n const opts = this.options;\n if (!opts.display) {\n return;\n }\n const fontOpts = toFont(opts.font);\n const lineHeight = fontOpts.lineHeight;\n const offset = lineHeight / 2 + this._padding.top;\n const { titleX , titleY , maxWidth , rotation } = this._drawArgs(offset);\n renderText(ctx, opts.text, 0, 0, fontOpts, {\n color: opts.color,\n maxWidth,\n rotation,\n textAlign: _toLeftRightCenter(opts.align),\n textBaseline: 'middle',\n translation: [\n titleX,\n titleY\n ]\n });\n }\n}\nfunction createTitle(chart, titleOpts) {\n const title = new Title({\n ctx: chart.ctx,\n options: titleOpts,\n chart\n });\n layouts.configure(chart, title, titleOpts);\n layouts.addBox(chart, title);\n chart.titleBlock = title;\n}\nvar plugin_title = {\n id: 'title',\n _element: Title,\n start (chart, _args, options) {\n createTitle(chart, options);\n },\n stop (chart) {\n const titleBlock = chart.titleBlock;\n layouts.removeBox(chart, titleBlock);\n delete chart.titleBlock;\n },\n beforeUpdate (chart, _args, options) {\n const title = chart.titleBlock;\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'bold'\n },\n fullSize: true,\n padding: 10,\n position: 'top',\n text: '',\n weight: 2000\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n id: 'subtitle',\n start (chart, _args, options) {\n const title = new Title({\n ctx: chart.ctx,\n options,\n chart\n });\n layouts.configure(chart, title, options);\n layouts.addBox(chart, title);\n map.set(chart, title);\n },\n stop (chart) {\n layouts.removeBox(chart, map.get(chart));\n map.delete(chart);\n },\n beforeUpdate (chart, _args, options) {\n const title = map.get(chart);\n layouts.configure(chart, title, options);\n title.options = options;\n },\n defaults: {\n align: 'center',\n display: false,\n font: {\n weight: 'normal'\n },\n fullSize: true,\n padding: 0,\n position: 'top',\n text: '',\n weight: 1500\n },\n defaultRoutes: {\n color: 'color'\n },\n descriptors: {\n _scriptable: true,\n _indexable: false\n }\n};\n\nconst positioners = {\n average (items) {\n if (!items.length) {\n return false;\n }\n let i, len;\n let x = 0;\n let y = 0;\n let count = 0;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const pos = el.tooltipPosition();\n x += pos.x;\n y += pos.y;\n ++count;\n }\n }\n return {\n x: x / count,\n y: y / count\n };\n },\n nearest (items, eventPosition) {\n if (!items.length) {\n return false;\n }\n let x = eventPosition.x;\n let y = eventPosition.y;\n let minDistance = Number.POSITIVE_INFINITY;\n let i, len, nearestElement;\n for(i = 0, len = items.length; i < len; ++i){\n const el = items[i].element;\n if (el && el.hasValue()) {\n const center = el.getCenterPoint();\n const d = distanceBetweenPoints(eventPosition, center);\n if (d < minDistance) {\n minDistance = d;\n nearestElement = el;\n }\n }\n }\n if (nearestElement) {\n const tp = nearestElement.tooltipPosition();\n x = tp.x;\n y = tp.y;\n }\n return {\n x,\n y\n };\n }\n};\nfunction pushOrConcat(base, toPush) {\n if (toPush) {\n if (isArray(toPush)) {\n Array.prototype.push.apply(base, toPush);\n } else {\n base.push(toPush);\n }\n }\n return base;\n}\n function splitNewlines(str) {\n if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n return str.split('\\n');\n }\n return str;\n}\n function createTooltipItem(chart, item) {\n const { element , datasetIndex , index } = item;\n const controller = chart.getDatasetMeta(datasetIndex).controller;\n const { label , value } = controller.getLabelAndValue(index);\n return {\n chart,\n label,\n parsed: controller.getParsed(index),\n raw: chart.data.datasets[datasetIndex].data[index],\n formattedValue: value,\n dataset: controller.getDataset(),\n dataIndex: index,\n datasetIndex,\n element\n };\n}\n function getTooltipSize(tooltip, options) {\n const ctx = tooltip.chart.ctx;\n const { body , footer , title } = tooltip;\n const { boxWidth , boxHeight } = options;\n const bodyFont = toFont(options.bodyFont);\n const titleFont = toFont(options.titleFont);\n const footerFont = toFont(options.footerFont);\n const titleLineCount = title.length;\n const footerLineCount = footer.length;\n const bodyLineItemCount = body.length;\n const padding = toPadding(options.padding);\n let height = padding.height;\n let width = 0;\n let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n if (titleLineCount) {\n height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n }\n if (combinedBodyLength) {\n const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n }\n if (footerLineCount) {\n height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n }\n let widthPadding = 0;\n const maxLineWidth = function(line) {\n width = Math.max(width, ctx.measureText(line).width + widthPadding);\n };\n ctx.save();\n ctx.font = titleFont.string;\n each(tooltip.title, maxLineWidth);\n ctx.font = bodyFont.string;\n each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n each(body, (bodyItem)=>{\n each(bodyItem.before, maxLineWidth);\n each(bodyItem.lines, maxLineWidth);\n each(bodyItem.after, maxLineWidth);\n });\n widthPadding = 0;\n ctx.font = footerFont.string;\n each(tooltip.footer, maxLineWidth);\n ctx.restore();\n width += padding.width;\n return {\n width,\n height\n };\n}\nfunction determineYAlign(chart, size) {\n const { y , height } = size;\n if (y < height / 2) {\n return 'top';\n } else if (y > chart.height - height / 2) {\n return 'bottom';\n }\n return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n const { x , width } = size;\n const caret = options.caretSize + options.caretPadding;\n if (xAlign === 'left' && x + width + caret > chart.width) {\n return true;\n }\n if (xAlign === 'right' && x - width - caret < 0) {\n return true;\n }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n const { x , width } = size;\n const { width: chartWidth , chartArea: { left , right } } = chart;\n let xAlign = 'center';\n if (yAlign === 'center') {\n xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n } else if (x <= width / 2) {\n xAlign = 'left';\n } else if (x >= chartWidth - width / 2) {\n xAlign = 'right';\n }\n if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n xAlign = 'center';\n }\n return xAlign;\n}\n function determineAlignment(chart, options, size) {\n const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n return {\n xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n yAlign\n };\n}\nfunction alignX(size, xAlign) {\n let { x , width } = size;\n if (xAlign === 'right') {\n x -= width;\n } else if (xAlign === 'center') {\n x -= width / 2;\n }\n return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n let { y , height } = size;\n if (yAlign === 'top') {\n y += paddingAndSize;\n } else if (yAlign === 'bottom') {\n y -= height + paddingAndSize;\n } else {\n y -= height / 2;\n }\n return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n const { caretSize , caretPadding , cornerRadius } = options;\n const { xAlign , yAlign } = alignment;\n const paddingAndSize = caretSize + caretPadding;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n let x = alignX(size, xAlign);\n const y = alignY(size, yAlign, paddingAndSize);\n if (yAlign === 'center') {\n if (xAlign === 'left') {\n x += paddingAndSize;\n } else if (xAlign === 'right') {\n x -= paddingAndSize;\n }\n } else if (xAlign === 'left') {\n x -= Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x += Math.max(topRight, bottomRight) + caretSize;\n }\n return {\n x: _limitValue(x, 0, chart.width - size.width),\n y: _limitValue(y, 0, chart.height - size.height)\n };\n}\nfunction getAlignedX(tooltip, align, options) {\n const padding = toPadding(options.padding);\n return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n return createContext(parent, {\n tooltip,\n tooltipItems,\n type: 'tooltip'\n });\n}\nfunction overrideCallbacks(callbacks, context) {\n const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n beforeTitle: noop,\n title (tooltipItems) {\n if (tooltipItems.length > 0) {\n const item = tooltipItems[0];\n const labels = item.chart.data.labels;\n const labelCount = labels ? labels.length : 0;\n if (this && this.options && this.options.mode === 'dataset') {\n return item.dataset.label || '';\n } else if (item.label) {\n return item.label;\n } else if (labelCount > 0 && item.dataIndex < labelCount) {\n return labels[item.dataIndex];\n }\n }\n return '';\n },\n afterTitle: noop,\n beforeBody: noop,\n beforeLabel: noop,\n label (tooltipItem) {\n if (this && this.options && this.options.mode === 'dataset') {\n return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n }\n let label = tooltipItem.dataset.label || '';\n if (label) {\n label += ': ';\n }\n const value = tooltipItem.formattedValue;\n if (!isNullOrUndef(value)) {\n label += value;\n }\n return label;\n },\n labelColor (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n borderColor: options.borderColor,\n backgroundColor: options.backgroundColor,\n borderWidth: options.borderWidth,\n borderDash: options.borderDash,\n borderDashOffset: options.borderDashOffset,\n borderRadius: 0\n };\n },\n labelTextColor () {\n return this.options.bodyColor;\n },\n labelPointStyle (tooltipItem) {\n const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n const options = meta.controller.getStyle(tooltipItem.dataIndex);\n return {\n pointStyle: options.pointStyle,\n rotation: options.rotation\n };\n },\n afterLabel: noop,\n afterBody: noop,\n beforeFooter: noop,\n footer: noop,\n afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n const result = callbacks[name].call(ctx, arg);\n if (typeof result === 'undefined') {\n return defaultCallbacks[name].call(ctx, arg);\n }\n return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n constructor(config){\n super();\n this.opacity = 0;\n this._active = [];\n this._eventPosition = undefined;\n this._size = undefined;\n this._cachedAnimations = undefined;\n this._tooltipItems = [];\n this.$animations = undefined;\n this.$context = undefined;\n this.chart = config.chart;\n this.options = config.options;\n this.dataPoints = undefined;\n this.title = undefined;\n this.beforeBody = undefined;\n this.body = undefined;\n this.afterBody = undefined;\n this.footer = undefined;\n this.xAlign = undefined;\n this.yAlign = undefined;\n this.x = undefined;\n this.y = undefined;\n this.height = undefined;\n this.width = undefined;\n this.caretX = undefined;\n this.caretY = undefined;\n this.labelColors = undefined;\n this.labelPointStyles = undefined;\n this.labelTextColors = undefined;\n }\n initialize(options) {\n this.options = options;\n this._cachedAnimations = undefined;\n this.$context = undefined;\n }\n _resolveAnimations() {\n const cached = this._cachedAnimations;\n if (cached) {\n return cached;\n }\n const chart = this.chart;\n const options = this.options.setContext(this.getContext());\n const opts = options.enabled && chart.options.animation && options.animations;\n const animations = new Animations(this.chart, opts);\n if (opts._cacheable) {\n this._cachedAnimations = Object.freeze(animations);\n }\n return animations;\n }\n getContext() {\n return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n }\n getTitle(context, options) {\n const { callbacks } = options;\n const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n lines = pushOrConcat(lines, splitNewlines(title));\n lines = pushOrConcat(lines, splitNewlines(afterTitle));\n return lines;\n }\n getBeforeBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n }\n getBody(tooltipItems, options) {\n const { callbacks } = options;\n const bodyItems = [];\n each(tooltipItems, (context)=>{\n const bodyItem = {\n before: [],\n lines: [],\n after: []\n };\n const scoped = overrideCallbacks(callbacks, context);\n pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n bodyItems.push(bodyItem);\n });\n return bodyItems;\n }\n getAfterBody(tooltipItems, options) {\n return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n }\n getFooter(tooltipItems, options) {\n const { callbacks } = options;\n const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n let lines = [];\n lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n lines = pushOrConcat(lines, splitNewlines(footer));\n lines = pushOrConcat(lines, splitNewlines(afterFooter));\n return lines;\n }\n _createItems(options) {\n const active = this._active;\n const data = this.chart.data;\n const labelColors = [];\n const labelPointStyles = [];\n const labelTextColors = [];\n let tooltipItems = [];\n let i, len;\n for(i = 0, len = active.length; i < len; ++i){\n tooltipItems.push(createTooltipItem(this.chart, active[i]));\n }\n if (options.filter) {\n tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n }\n if (options.itemSort) {\n tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n }\n each(tooltipItems, (context)=>{\n const scoped = overrideCallbacks(options.callbacks, context);\n labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n });\n this.labelColors = labelColors;\n this.labelPointStyles = labelPointStyles;\n this.labelTextColors = labelTextColors;\n this.dataPoints = tooltipItems;\n return tooltipItems;\n }\n update(changed, replay) {\n const options = this.options.setContext(this.getContext());\n const active = this._active;\n let properties;\n let tooltipItems = [];\n if (!active.length) {\n if (this.opacity !== 0) {\n properties = {\n opacity: 0\n };\n }\n } else {\n const position = positioners[options.position].call(this, active, this._eventPosition);\n tooltipItems = this._createItems(options);\n this.title = this.getTitle(tooltipItems, options);\n this.beforeBody = this.getBeforeBody(tooltipItems, options);\n this.body = this.getBody(tooltipItems, options);\n this.afterBody = this.getAfterBody(tooltipItems, options);\n this.footer = this.getFooter(tooltipItems, options);\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, size);\n const alignment = determineAlignment(this.chart, options, positionAndSize);\n const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n properties = {\n opacity: 1,\n x: backgroundPoint.x,\n y: backgroundPoint.y,\n width: size.width,\n height: size.height,\n caretX: position.x,\n caretY: position.y\n };\n }\n this._tooltipItems = tooltipItems;\n this.$context = undefined;\n if (properties) {\n this._resolveAnimations().update(this, properties);\n }\n if (changed && options.external) {\n options.external.call(this, {\n chart: this.chart,\n tooltip: this,\n replay\n });\n }\n }\n drawCaret(tooltipPoint, ctx, size, options) {\n const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n ctx.lineTo(caretPosition.x1, caretPosition.y1);\n ctx.lineTo(caretPosition.x2, caretPosition.y2);\n ctx.lineTo(caretPosition.x3, caretPosition.y3);\n }\n getCaretPosition(tooltipPoint, size, options) {\n const { xAlign , yAlign } = this;\n const { caretSize , cornerRadius } = options;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(cornerRadius);\n const { x: ptX , y: ptY } = tooltipPoint;\n const { width , height } = size;\n let x1, x2, x3, y1, y2, y3;\n if (yAlign === 'center') {\n y2 = ptY + height / 2;\n if (xAlign === 'left') {\n x1 = ptX;\n x2 = x1 - caretSize;\n y1 = y2 + caretSize;\n y3 = y2 - caretSize;\n } else {\n x1 = ptX + width;\n x2 = x1 + caretSize;\n y1 = y2 - caretSize;\n y3 = y2 + caretSize;\n }\n x3 = x1;\n } else {\n if (xAlign === 'left') {\n x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n } else if (xAlign === 'right') {\n x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n } else {\n x2 = this.caretX;\n }\n if (yAlign === 'top') {\n y1 = ptY;\n y2 = y1 - caretSize;\n x1 = x2 - caretSize;\n x3 = x2 + caretSize;\n } else {\n y1 = ptY + height;\n y2 = y1 + caretSize;\n x1 = x2 + caretSize;\n x3 = x2 - caretSize;\n }\n y3 = y1;\n }\n return {\n x1,\n x2,\n x3,\n y1,\n y2,\n y3\n };\n }\n drawTitle(pt, ctx, options) {\n const title = this.title;\n const length = title.length;\n let titleFont, titleSpacing, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.titleAlign, options);\n ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n ctx.textBaseline = 'middle';\n titleFont = toFont(options.titleFont);\n titleSpacing = options.titleSpacing;\n ctx.fillStyle = options.titleColor;\n ctx.font = titleFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n pt.y += titleFont.lineHeight + titleSpacing;\n if (i + 1 === length) {\n pt.y += options.titleMarginBottom - titleSpacing;\n }\n }\n }\n }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n const labelColors = this.labelColors[i];\n const labelPointStyle = this.labelPointStyles[i];\n const { boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n const colorX = getAlignedX(this, 'left', options);\n const rtlColorX = rtlHelper.x(colorX);\n const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n const colorY = pt.y + yOffSet;\n if (options.usePointStyle) {\n const drawOptions = {\n radius: Math.min(boxWidth, boxHeight) / 2,\n pointStyle: labelPointStyle.pointStyle,\n rotation: labelPointStyle.rotation,\n borderWidth: 1\n };\n const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n const centerY = colorY + boxHeight / 2;\n ctx.strokeStyle = options.multiKeyBackground;\n ctx.fillStyle = options.multiKeyBackground;\n drawPoint(ctx, drawOptions, centerX, centerY);\n ctx.strokeStyle = labelColors.borderColor;\n ctx.fillStyle = labelColors.backgroundColor;\n drawPoint(ctx, drawOptions, centerX, centerY);\n } else {\n ctx.lineWidth = isObject(labelColors.borderWidth) ? Math.max(...Object.values(labelColors.borderWidth)) : labelColors.borderWidth || 1;\n ctx.strokeStyle = labelColors.borderColor;\n ctx.setLineDash(labelColors.borderDash || []);\n ctx.lineDashOffset = labelColors.borderDashOffset || 0;\n const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth - boxPadding);\n const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - boxPadding - 2);\n const borderRadius = toTRBLCorners(labelColors.borderRadius);\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n ctx.fillStyle = options.multiKeyBackground;\n addRoundedRectPath(ctx, {\n x: outerX,\n y: colorY,\n w: boxWidth,\n h: boxHeight,\n radius: borderRadius\n });\n ctx.fill();\n ctx.stroke();\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: innerX,\n y: colorY + 1,\n w: boxWidth - 2,\n h: boxHeight - 2,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillStyle = options.multiKeyBackground;\n ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n ctx.fillStyle = labelColors.backgroundColor;\n ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n }\n }\n ctx.fillStyle = this.labelTextColors[i];\n }\n drawBody(pt, ctx, options) {\n const { body } = this;\n const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding } = options;\n const bodyFont = toFont(options.bodyFont);\n let bodyLineHeight = bodyFont.lineHeight;\n let xLinePadding = 0;\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n const fillLineOfText = function(line) {\n ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n pt.y += bodyLineHeight + bodySpacing;\n };\n const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n let bodyItem, textColor, lines, i, j, ilen, jlen;\n ctx.textAlign = bodyAlign;\n ctx.textBaseline = 'middle';\n ctx.font = bodyFont.string;\n pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n ctx.fillStyle = options.bodyColor;\n each(this.beforeBody, fillLineOfText);\n xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n for(i = 0, ilen = body.length; i < ilen; ++i){\n bodyItem = body[i];\n textColor = this.labelTextColors[i];\n ctx.fillStyle = textColor;\n each(bodyItem.before, fillLineOfText);\n lines = bodyItem.lines;\n if (displayColors && lines.length) {\n this._drawColorBox(ctx, pt, i, rtlHelper, options);\n bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n }\n for(j = 0, jlen = lines.length; j < jlen; ++j){\n fillLineOfText(lines[j]);\n bodyLineHeight = bodyFont.lineHeight;\n }\n each(bodyItem.after, fillLineOfText);\n }\n xLinePadding = 0;\n bodyLineHeight = bodyFont.lineHeight;\n each(this.afterBody, fillLineOfText);\n pt.y -= bodySpacing;\n }\n drawFooter(pt, ctx, options) {\n const footer = this.footer;\n const length = footer.length;\n let footerFont, i;\n if (length) {\n const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n pt.x = getAlignedX(this, options.footerAlign, options);\n pt.y += options.footerMarginTop;\n ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n ctx.textBaseline = 'middle';\n footerFont = toFont(options.footerFont);\n ctx.fillStyle = options.footerColor;\n ctx.font = footerFont.string;\n for(i = 0; i < length; ++i){\n ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n pt.y += footerFont.lineHeight + options.footerSpacing;\n }\n }\n }\n drawBackground(pt, ctx, tooltipSize, options) {\n const { xAlign , yAlign } = this;\n const { x , y } = pt;\n const { width , height } = tooltipSize;\n const { topLeft , topRight , bottomLeft , bottomRight } = toTRBLCorners(options.cornerRadius);\n ctx.fillStyle = options.backgroundColor;\n ctx.strokeStyle = options.borderColor;\n ctx.lineWidth = options.borderWidth;\n ctx.beginPath();\n ctx.moveTo(x + topLeft, y);\n if (yAlign === 'top') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width - topRight, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n if (yAlign === 'center' && xAlign === 'right') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + width, y + height - bottomRight);\n ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n if (yAlign === 'bottom') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x + bottomLeft, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n if (yAlign === 'center' && xAlign === 'left') {\n this.drawCaret(pt, ctx, tooltipSize, options);\n }\n ctx.lineTo(x, y + topLeft);\n ctx.quadraticCurveTo(x, y, x + topLeft, y);\n ctx.closePath();\n ctx.fill();\n if (options.borderWidth > 0) {\n ctx.stroke();\n }\n }\n _updateAnimationTarget(options) {\n const chart = this.chart;\n const anims = this.$animations;\n const animX = anims && anims.x;\n const animY = anims && anims.y;\n if (animX || animY) {\n const position = positioners[options.position].call(this, this._active, this._eventPosition);\n if (!position) {\n return;\n }\n const size = this._size = getTooltipSize(this, options);\n const positionAndSize = Object.assign({}, position, this._size);\n const alignment = determineAlignment(chart, options, positionAndSize);\n const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n if (animX._to !== point.x || animY._to !== point.y) {\n this.xAlign = alignment.xAlign;\n this.yAlign = alignment.yAlign;\n this.width = size.width;\n this.height = size.height;\n this.caretX = position.x;\n this.caretY = position.y;\n this._resolveAnimations().update(this, point);\n }\n }\n }\n _willRender() {\n return !!this.opacity;\n }\n draw(ctx) {\n const options = this.options.setContext(this.getContext());\n let opacity = this.opacity;\n if (!opacity) {\n return;\n }\n this._updateAnimationTarget(options);\n const tooltipSize = {\n width: this.width,\n height: this.height\n };\n const pt = {\n x: this.x,\n y: this.y\n };\n opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n const padding = toPadding(options.padding);\n const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n if (options.enabled && hasTooltipContent) {\n ctx.save();\n ctx.globalAlpha = opacity;\n this.drawBackground(pt, ctx, tooltipSize, options);\n overrideTextDirection(ctx, options.textDirection);\n pt.y += padding.top;\n this.drawTitle(pt, ctx, options);\n this.drawBody(pt, ctx, options);\n this.drawFooter(pt, ctx, options);\n restoreTextDirection(ctx, options.textDirection);\n ctx.restore();\n }\n }\n getActiveElements() {\n return this._active || [];\n }\n setActiveElements(activeElements, eventPosition) {\n const lastActive = this._active;\n const active = activeElements.map(({ datasetIndex , index })=>{\n const meta = this.chart.getDatasetMeta(datasetIndex);\n if (!meta) {\n throw new Error('Cannot find a dataset at index ' + datasetIndex);\n }\n return {\n datasetIndex,\n element: meta.data[index],\n index\n };\n });\n const changed = !_elementsEqual(lastActive, active);\n const positionChanged = this._positionChanged(active, eventPosition);\n if (changed || positionChanged) {\n this._active = active;\n this._eventPosition = eventPosition;\n this._ignoreReplayEvents = true;\n this.update(true);\n }\n }\n handleEvent(e, replay, inChartArea = true) {\n if (replay && this._ignoreReplayEvents) {\n return false;\n }\n this._ignoreReplayEvents = false;\n const options = this.options;\n const lastActive = this._active || [];\n const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n const positionChanged = this._positionChanged(active, e);\n const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n if (changed) {\n this._active = active;\n if (options.enabled || options.external) {\n this._eventPosition = {\n x: e.x,\n y: e.y\n };\n this.update(true, replay);\n }\n }\n return changed;\n }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n const options = this.options;\n if (e.type === 'mouseout') {\n return [];\n }\n if (!inChartArea) {\n return lastActive;\n }\n const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n if (options.reverse) {\n active.reverse();\n }\n return active;\n }\n _positionChanged(active, e) {\n const { caretX , caretY , options } = this;\n const position = positioners[options.position].call(this, active, e);\n return position !== false && (caretX !== position.x || caretY !== position.y);\n }\n}\nvar plugin_tooltip = {\n id: 'tooltip',\n _element: Tooltip,\n positioners,\n afterInit (chart, _args, options) {\n if (options) {\n chart.tooltip = new Tooltip({\n chart,\n options\n });\n }\n },\n beforeUpdate (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n reset (chart, _args, options) {\n if (chart.tooltip) {\n chart.tooltip.initialize(options);\n }\n },\n afterDraw (chart) {\n const tooltip = chart.tooltip;\n if (tooltip && tooltip._willRender()) {\n const args = {\n tooltip\n };\n if (chart.notifyPlugins('beforeTooltipDraw', {\n ...args,\n cancelable: true\n }) === false) {\n return;\n }\n tooltip.draw(chart.ctx);\n chart.notifyPlugins('afterTooltipDraw', args);\n }\n },\n afterEvent (chart, args) {\n if (chart.tooltip) {\n const useFinalPosition = args.replay;\n if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n args.changed = true;\n }\n }\n },\n defaults: {\n enabled: true,\n external: null,\n position: 'average',\n backgroundColor: 'rgba(0,0,0,0.8)',\n titleColor: '#fff',\n titleFont: {\n weight: 'bold'\n },\n titleSpacing: 2,\n titleMarginBottom: 6,\n titleAlign: 'left',\n bodyColor: '#fff',\n bodySpacing: 2,\n bodyFont: {},\n bodyAlign: 'left',\n footerColor: '#fff',\n footerSpacing: 2,\n footerMarginTop: 6,\n footerFont: {\n weight: 'bold'\n },\n footerAlign: 'left',\n padding: 6,\n caretPadding: 2,\n caretSize: 5,\n cornerRadius: 6,\n boxHeight: (ctx, opts)=>opts.bodyFont.size,\n boxWidth: (ctx, opts)=>opts.bodyFont.size,\n multiKeyBackground: '#fff',\n displayColors: true,\n boxPadding: 0,\n borderColor: 'rgba(0,0,0,0)',\n borderWidth: 0,\n animation: {\n duration: 400,\n easing: 'easeOutQuart'\n },\n animations: {\n numbers: {\n type: 'number',\n properties: [\n 'x',\n 'y',\n 'width',\n 'height',\n 'caretX',\n 'caretY'\n ]\n },\n opacity: {\n easing: 'linear',\n duration: 200\n }\n },\n callbacks: defaultCallbacks\n },\n defaultRoutes: {\n bodyFont: 'font',\n footerFont: 'font',\n titleFont: 'font'\n },\n descriptors: {\n _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n _indexable: false,\n callbacks: {\n _scriptable: false,\n _indexable: false\n },\n animation: {\n _fallback: false\n },\n animations: {\n _fallback: 'animation'\n }\n },\n additionalOptionScopes: [\n 'interaction'\n ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n if (typeof raw === 'string') {\n index = labels.push(raw) - 1;\n addedLabels.unshift({\n index,\n label: raw\n });\n } else if (isNaN(raw)) {\n index = null;\n }\n return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n const first = labels.indexOf(raw);\n if (first === -1) {\n return addIfString(labels, raw, index, addedLabels);\n }\n const last = labels.lastIndexOf(raw);\n return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n const labels = this.getLabels();\n if (value >= 0 && value < labels.length) {\n return labels[value];\n }\n return value;\n}\nclass CategoryScale extends Scale {\n static id = 'category';\n static defaults = {\n ticks: {\n callback: _getLabelForValue\n }\n };\n constructor(cfg){\n super(cfg);\n this._startValue = undefined;\n this._valueRange = 0;\n this._addedLabels = [];\n }\n init(scaleOptions) {\n const added = this._addedLabels;\n if (added.length) {\n const labels = this.getLabels();\n for (const { index , label } of added){\n if (labels[index] === label) {\n labels.splice(index, 1);\n }\n }\n this._addedLabels = [];\n }\n super.init(scaleOptions);\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n const labels = this.getLabels();\n index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n return validIndex(index, labels.length - 1);\n }\n determineDataLimits() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this.getMinMax(true);\n if (this.options.bounds === 'ticks') {\n if (!minDefined) {\n min = 0;\n }\n if (!maxDefined) {\n max = this.getLabels().length - 1;\n }\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const min = this.min;\n const max = this.max;\n const offset = this.options.offset;\n const ticks = [];\n let labels = this.getLabels();\n labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n this._startValue = this.min - (offset ? 0.5 : 0);\n for(let value = min; value <= max; value++){\n ticks.push({\n value\n });\n }\n return ticks;\n }\n getLabelForValue(value) {\n return _getLabelForValue.call(this, value);\n }\n configure() {\n super.configure();\n if (!this.isHorizontal()) {\n this._reversePixels = !this._reversePixels;\n }\n }\n getPixelForValue(value) {\n if (typeof value !== 'number') {\n value = this.parse(value);\n }\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getPixelForTick(index) {\n const ticks = this.ticks;\n if (index < 0 || index > ticks.length - 1) {\n return null;\n }\n return this.getPixelForValue(ticks[index].value);\n }\n getValueForPixel(pixel) {\n return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n }\n getBasePixel() {\n return this.bottom;\n }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n const ticks = [];\n const MIN_SPACING = 1e-14;\n const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds } = generationOptions;\n const unit = step || 1;\n const maxSpaces = maxTicks - 1;\n const { min: rmin , max: rmax } = dataRange;\n const minDefined = !isNullOrUndef(min);\n const maxDefined = !isNullOrUndef(max);\n const countDefined = !isNullOrUndef(count);\n const minSpacing = (rmax - rmin) / (maxDigits + 1);\n let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n let factor, niceMin, niceMax, numSpaces;\n if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n return [\n {\n value: rmin\n },\n {\n value: rmax\n }\n ];\n }\n numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n if (numSpaces > maxSpaces) {\n spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n }\n if (!isNullOrUndef(precision)) {\n factor = Math.pow(10, precision);\n spacing = Math.ceil(spacing * factor) / factor;\n }\n if (bounds === 'ticks') {\n niceMin = Math.floor(rmin / spacing) * spacing;\n niceMax = Math.ceil(rmax / spacing) * spacing;\n } else {\n niceMin = rmin;\n niceMax = rmax;\n }\n if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n spacing = (max - min) / numSpaces;\n niceMin = min;\n niceMax = max;\n } else if (countDefined) {\n niceMin = minDefined ? min : niceMin;\n niceMax = maxDefined ? max : niceMax;\n numSpaces = count - 1;\n spacing = (niceMax - niceMin) / numSpaces;\n } else {\n numSpaces = (niceMax - niceMin) / spacing;\n if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n numSpaces = Math.round(numSpaces);\n } else {\n numSpaces = Math.ceil(numSpaces);\n }\n }\n const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n niceMin = Math.round(niceMin * factor) / factor;\n niceMax = Math.round(niceMax * factor) / factor;\n let j = 0;\n if (minDefined) {\n if (includeBounds && niceMin !== min) {\n ticks.push({\n value: min\n });\n if (niceMin < min) {\n j++;\n }\n if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n j++;\n }\n } else if (niceMin < min) {\n j++;\n }\n }\n for(; j < numSpaces; ++j){\n ticks.push({\n value: Math.round((niceMin + j * spacing) * factor) / factor\n });\n }\n if (maxDefined && includeBounds && niceMax !== max) {\n if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n ticks[ticks.length - 1].value = max;\n } else {\n ticks.push({\n value: max\n });\n }\n } else if (!maxDefined || niceMax === max) {\n ticks.push({\n value: niceMax\n });\n }\n return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation }) {\n const rad = toRadians(minRotation);\n const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n const length = 0.75 * minSpacing * ('' + value).length;\n return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._endValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n if (isNullOrUndef(raw)) {\n return null;\n }\n if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n return null;\n }\n return +raw;\n }\n handleTickRangeOptions() {\n const { beginAtZero } = this.options;\n const { minDefined , maxDefined } = this.getUserBounds();\n let { min , max } = this;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (beginAtZero) {\n const minSign = sign(min);\n const maxSign = sign(max);\n if (minSign < 0 && maxSign < 0) {\n setMax(0);\n } else if (minSign > 0 && maxSign > 0) {\n setMin(0);\n }\n }\n if (min === max) {\n let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n setMax(max + offset);\n if (!beginAtZero) {\n setMin(min - offset);\n }\n }\n this.min = min;\n this.max = max;\n }\n getTickLimit() {\n const tickOpts = this.options.ticks;\n let { maxTicksLimit , stepSize } = tickOpts;\n let maxTicks;\n if (stepSize) {\n maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n if (maxTicks > 1000) {\n console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n maxTicks = 1000;\n }\n } else {\n maxTicks = this.computeTickLimit();\n maxTicksLimit = maxTicksLimit || 11;\n }\n if (maxTicksLimit) {\n maxTicks = Math.min(maxTicksLimit, maxTicks);\n }\n return maxTicks;\n }\n computeTickLimit() {\n return Number.POSITIVE_INFINITY;\n }\n buildTicks() {\n const opts = this.options;\n const tickOpts = opts.ticks;\n let maxTicks = this.getTickLimit();\n maxTicks = Math.max(2, maxTicks);\n const numericGeneratorOptions = {\n maxTicks,\n bounds: opts.bounds,\n min: opts.min,\n max: opts.max,\n precision: tickOpts.precision,\n step: tickOpts.stepSize,\n count: tickOpts.count,\n maxDigits: this._maxDigits(),\n horizontal: this.isHorizontal(),\n minRotation: tickOpts.minRotation || 0,\n includeBounds: tickOpts.includeBounds !== false\n };\n const dataRange = this._range || this;\n const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n configure() {\n const ticks = this.ticks;\n let start = this.min;\n let end = this.max;\n super.configure();\n if (this.options.offset && ticks.length) {\n const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n start -= offset;\n end += offset;\n }\n this._startValue = start;\n this._endValue = end;\n this._valueRange = end - start;\n }\n getLabelForValue(value) {\n return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n}\n\nclass LinearScale extends LinearScaleBase {\n static id = 'linear';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.numeric\n }\n };\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? min : 0;\n this.max = isNumberFinite(max) ? max : 1;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n const horizontal = this.isHorizontal();\n const length = horizontal ? this.width : this.height;\n const minRotation = toRadians(this.options.ticks.minRotation);\n const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n const tickFont = this._resolveTickFontOptions(0);\n return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n }\n getPixelForValue(value) {\n return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n const rangeStep = Math.pow(10, rangeExp);\n const start = Math.floor(min / rangeStep);\n const end = Math.ceil(max / rangeStep);\n return end - start;\n}\nfunction startExp(min, max) {\n const range = max - min;\n let rangeExp = log10Floor(range);\n while(steps(min, max, rangeExp) > 10){\n rangeExp++;\n }\n while(steps(min, max, rangeExp) < 10){\n rangeExp--;\n }\n return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max }) {\n min = finiteOrDefault(generationOptions.min, min);\n const ticks = [];\n const minExp = log10Floor(min);\n let exp = startExp(min, max);\n let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n const stepSize = Math.pow(10, exp);\n const base = minExp > exp ? Math.pow(10, minExp) : 0;\n const start = Math.round((min - base) * precision) / precision;\n const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n let significand = Math.floor((start - offset) / Math.pow(10, exp));\n let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n while(value < max){\n ticks.push({\n value,\n major: isMajor(value),\n significand\n });\n if (significand >= 10) {\n significand = significand < 15 ? 15 : 20;\n } else {\n significand++;\n }\n if (significand >= 20) {\n exp++;\n significand = 2;\n precision = exp >= 0 ? 1 : precision;\n }\n value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n }\n const lastTick = finiteOrDefault(generationOptions.max, value);\n ticks.push({\n value: lastTick,\n major: isMajor(lastTick),\n significand\n });\n return ticks;\n}\nclass LogarithmicScale extends Scale {\n static id = 'logarithmic';\n static defaults = {\n ticks: {\n callback: Ticks.formatters.logarithmic,\n major: {\n enabled: true\n }\n }\n };\n constructor(cfg){\n super(cfg);\n this.start = undefined;\n this.end = undefined;\n this._startValue = undefined;\n this._valueRange = 0;\n }\n parse(raw, index) {\n const value = LinearScaleBase.prototype.parse.apply(this, [\n raw,\n index\n ]);\n if (value === 0) {\n this._zero = true;\n return undefined;\n }\n return isNumberFinite(value) && value > 0 ? value : null;\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(true);\n this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n if (this.options.beginAtZero) {\n this._zero = true;\n }\n if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n }\n this.handleTickRangeOptions();\n }\n handleTickRangeOptions() {\n const { minDefined , maxDefined } = this.getUserBounds();\n let min = this.min;\n let max = this.max;\n const setMin = (v)=>min = minDefined ? min : v;\n const setMax = (v)=>max = maxDefined ? max : v;\n if (min === max) {\n if (min <= 0) {\n setMin(1);\n setMax(10);\n } else {\n setMin(changeExponent(min, -1));\n setMax(changeExponent(max, +1));\n }\n }\n if (min <= 0) {\n setMin(changeExponent(max, -1));\n }\n if (max <= 0) {\n setMax(changeExponent(min, +1));\n }\n this.min = min;\n this.max = max;\n }\n buildTicks() {\n const opts = this.options;\n const generationOptions = {\n min: this._userMin,\n max: this._userMax\n };\n const ticks = generateTicks(generationOptions, this);\n if (opts.bounds === 'ticks') {\n _setMinAndMaxByKey(ticks, this, 'value');\n }\n if (opts.reverse) {\n ticks.reverse();\n this.start = this.max;\n this.end = this.min;\n } else {\n this.start = this.min;\n this.end = this.max;\n }\n return ticks;\n }\n getLabelForValue(value) {\n return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n }\n configure() {\n const start = this.min;\n super.configure();\n this._startValue = log10(start);\n this._valueRange = log10(this.max) - log10(start);\n }\n getPixelForValue(value) {\n if (value === undefined || value === 0) {\n value = this.min;\n }\n if (value === null || isNaN(value)) {\n return NaN;\n }\n return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n }\n getValueForPixel(pixel) {\n const decimal = this.getDecimalForPixel(pixel);\n return Math.pow(10, this._startValue + decimal * this._valueRange);\n }\n}\n\nfunction getTickBackdropHeight(opts) {\n const tickOpts = opts.ticks;\n if (tickOpts.display && opts.display) {\n const padding = toPadding(tickOpts.backdropPadding);\n return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n }\n return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n label = isArray(label) ? label : [\n label\n ];\n return {\n w: _longestText(ctx, font.string, label),\n h: label.length * font.lineHeight\n };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n if (angle === min || angle === max) {\n return {\n start: pos - size / 2,\n end: pos + size / 2\n };\n } else if (angle < min || angle > max) {\n return {\n start: pos - size,\n end: pos\n };\n }\n return {\n start: pos,\n end: pos + size\n };\n}\n function fitWithPointLabels(scale) {\n const orig = {\n l: scale.left + scale._padding.left,\n r: scale.right - scale._padding.right,\n t: scale.top + scale._padding.top,\n b: scale.bottom - scale._padding.bottom\n };\n const limits = Object.assign({}, orig);\n const labelSizes = [];\n const padding = [];\n const valueCount = scale._pointLabels.length;\n const pointLabelOpts = scale.options.pointLabels;\n const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n padding[i] = opts.padding;\n const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n const plFont = toFont(opts.font);\n const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n labelSizes[i] = textSize;\n const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n const angle = Math.round(toDegrees(angleRadians));\n const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n }\n scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n const sin = Math.abs(Math.sin(angle));\n const cos = Math.abs(Math.cos(angle));\n let x = 0;\n let y = 0;\n if (hLimits.start < orig.l) {\n x = (orig.l - hLimits.start) / sin;\n limits.l = Math.min(limits.l, orig.l - x);\n } else if (hLimits.end > orig.r) {\n x = (hLimits.end - orig.r) / sin;\n limits.r = Math.max(limits.r, orig.r + x);\n }\n if (vLimits.start < orig.t) {\n y = (orig.t - vLimits.start) / cos;\n limits.t = Math.min(limits.t, orig.t - y);\n } else if (vLimits.end > orig.b) {\n y = (vLimits.end - orig.b) / cos;\n limits.b = Math.max(limits.b, orig.b + y);\n }\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n const items = [];\n const valueCount = scale._pointLabels.length;\n const opts = scale.options;\n const extra = getTickBackdropHeight(opts) / 2;\n const outerDistance = scale.drawingArea;\n const additionalAngle = opts.pointLabels.centerPointLabels ? PI / valueCount : 0;\n for(let i = 0; i < valueCount; i++){\n const pointLabelPosition = scale.getPointPosition(i, outerDistance + extra + padding[i], additionalAngle);\n const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n const size = labelSizes[i];\n const y = yForAngle(pointLabelPosition.y, size.h, angle);\n const textAlign = getTextAlignForAngle(angle);\n const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n items.push({\n x: pointLabelPosition.x,\n y,\n textAlign,\n left,\n top: y,\n right: left + size.w,\n bottom: y + size.h\n });\n }\n return items;\n}\nfunction getTextAlignForAngle(angle) {\n if (angle === 0 || angle === 180) {\n return 'center';\n } else if (angle < 180) {\n return 'left';\n }\n return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n if (align === 'right') {\n x -= w;\n } else if (align === 'center') {\n x -= w / 2;\n }\n return x;\n}\nfunction yForAngle(y, h, angle) {\n if (angle === 90 || angle === 270) {\n y -= h / 2;\n } else if (angle > 270 || angle < 90) {\n y -= h;\n }\n return y;\n}\nfunction drawPointLabels(scale, labelCount) {\n const { ctx , options: { pointLabels } } = scale;\n for(let i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n const plFont = toFont(optsAtIndex.font);\n const { x , y , textAlign , left , top , right , bottom } = scale._pointLabelItems[i];\n const { backdropColor } = optsAtIndex;\n if (!isNullOrUndef(backdropColor)) {\n const borderRadius = toTRBLCorners(optsAtIndex.borderRadius);\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillStyle = backdropColor;\n const backdropLeft = left - padding.left;\n const backdropTop = top - padding.top;\n const backdropWidth = right - left + padding.width;\n const backdropHeight = bottom - top + padding.height;\n if (Object.values(borderRadius).some((v)=>v !== 0)) {\n ctx.beginPath();\n addRoundedRectPath(ctx, {\n x: backdropLeft,\n y: backdropTop,\n w: backdropWidth,\n h: backdropHeight,\n radius: borderRadius\n });\n ctx.fill();\n } else {\n ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n }\n }\n renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n color: optsAtIndex.color,\n textAlign: textAlign,\n textBaseline: 'middle'\n });\n }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n const { ctx } = scale;\n if (circular) {\n ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n } else {\n let pointPosition = scale.getPointPosition(0, radius);\n ctx.moveTo(pointPosition.x, pointPosition.y);\n for(let i = 1; i < labelCount; i++){\n pointPosition = scale.getPointPosition(i, radius);\n ctx.lineTo(pointPosition.x, pointPosition.y);\n }\n }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n const ctx = scale.ctx;\n const circular = gridLineOpts.circular;\n const { color , lineWidth } = gridLineOpts;\n if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n return;\n }\n ctx.save();\n ctx.strokeStyle = color;\n ctx.lineWidth = lineWidth;\n ctx.setLineDash(borderOpts.dash);\n ctx.lineDashOffset = borderOpts.dashOffset;\n ctx.beginPath();\n pathRadiusLine(scale, radius, circular, labelCount);\n ctx.closePath();\n ctx.stroke();\n ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n return createContext(parent, {\n label,\n index,\n type: 'pointLabel'\n });\n}\nclass RadialLinearScale extends LinearScaleBase {\n static id = 'radialLinear';\n static defaults = {\n display: true,\n animate: true,\n position: 'chartArea',\n angleLines: {\n display: true,\n lineWidth: 1,\n borderDash: [],\n borderDashOffset: 0.0\n },\n grid: {\n circular: false\n },\n startAngle: 0,\n ticks: {\n showLabelBackdrop: true,\n callback: Ticks.formatters.numeric\n },\n pointLabels: {\n backdropColor: undefined,\n backdropPadding: 2,\n display: true,\n font: {\n size: 10\n },\n callback (label) {\n return label;\n },\n padding: 5,\n centerPointLabels: false\n }\n };\n static defaultRoutes = {\n 'angleLines.color': 'borderColor',\n 'pointLabels.color': 'color',\n 'ticks.color': 'color'\n };\n static descriptors = {\n angleLines: {\n _fallback: 'grid'\n }\n };\n constructor(cfg){\n super(cfg);\n this.xCenter = undefined;\n this.yCenter = undefined;\n this.drawingArea = undefined;\n this._pointLabels = [];\n this._pointLabelItems = [];\n }\n setDimensions() {\n const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n const w = this.width = this.maxWidth - padding.width;\n const h = this.height = this.maxHeight - padding.height;\n this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n this.drawingArea = Math.floor(Math.min(w, h) / 2);\n }\n determineDataLimits() {\n const { min , max } = this.getMinMax(false);\n this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n this.handleTickRangeOptions();\n }\n computeTickLimit() {\n return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n }\n generateTickLabels(ticks) {\n LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n this._pointLabels = this.getLabels().map((value, index)=>{\n const label = callback(this.options.pointLabels.callback, [\n value,\n index\n ], this);\n return label || label === 0 ? label : '';\n }).filter((v, i)=>this.chart.getDataVisibility(i));\n }\n fit() {\n const opts = this.options;\n if (opts.display && opts.pointLabels.display) {\n fitWithPointLabels(this);\n } else {\n this.setCenterPoint(0, 0, 0, 0);\n }\n }\n setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n }\n getIndexAngle(index) {\n const angleMultiplier = TAU / (this._pointLabels.length || 1);\n const startAngle = this.options.startAngle || 0;\n return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n }\n getDistanceFromCenterForValue(value) {\n if (isNullOrUndef(value)) {\n return NaN;\n }\n const scalingFactor = this.drawingArea / (this.max - this.min);\n if (this.options.reverse) {\n return (this.max - value) * scalingFactor;\n }\n return (value - this.min) * scalingFactor;\n }\n getValueForDistanceFromCenter(distance) {\n if (isNullOrUndef(distance)) {\n return NaN;\n }\n const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n }\n getPointLabelContext(index) {\n const pointLabels = this._pointLabels || [];\n if (index >= 0 && index < pointLabels.length) {\n const pointLabel = pointLabels[index];\n return createPointLabelContext(this.getContext(), index, pointLabel);\n }\n }\n getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n return {\n x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n angle\n };\n }\n getPointPositionForValue(index, value) {\n return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n }\n getBasePosition(index) {\n return this.getPointPositionForValue(index || 0, this.getBaseValue());\n }\n getPointLabelPosition(index) {\n const { left , top , right , bottom } = this._pointLabelItems[index];\n return {\n left,\n top,\n right,\n bottom\n };\n }\n drawBackground() {\n const { backgroundColor , grid: { circular } } = this.options;\n if (backgroundColor) {\n const ctx = this.ctx;\n ctx.save();\n ctx.beginPath();\n pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n ctx.closePath();\n ctx.fillStyle = backgroundColor;\n ctx.fill();\n ctx.restore();\n }\n }\n drawGrid() {\n const ctx = this.ctx;\n const opts = this.options;\n const { angleLines , grid , border } = opts;\n const labelCount = this._pointLabels.length;\n let i, offset, position;\n if (opts.pointLabels.display) {\n drawPointLabels(this, labelCount);\n }\n if (grid.display) {\n this.ticks.forEach((tick, index)=>{\n if (index !== 0) {\n offset = this.getDistanceFromCenterForValue(tick.value);\n const context = this.getContext(index);\n const optsAtIndex = grid.setContext(context);\n const optsAtIndexBorder = border.setContext(context);\n drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n }\n });\n }\n if (angleLines.display) {\n ctx.save();\n for(i = labelCount - 1; i >= 0; i--){\n const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n const { color , lineWidth } = optsAtIndex;\n if (!lineWidth || !color) {\n continue;\n }\n ctx.lineWidth = lineWidth;\n ctx.strokeStyle = color;\n ctx.setLineDash(optsAtIndex.borderDash);\n ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n offset = this.getDistanceFromCenterForValue(opts.ticks.reverse ? this.min : this.max);\n position = this.getPointPosition(i, offset);\n ctx.beginPath();\n ctx.moveTo(this.xCenter, this.yCenter);\n ctx.lineTo(position.x, position.y);\n ctx.stroke();\n }\n ctx.restore();\n }\n }\n drawBorder() {}\n drawLabels() {\n const ctx = this.ctx;\n const opts = this.options;\n const tickOpts = opts.ticks;\n if (!tickOpts.display) {\n return;\n }\n const startAngle = this.getIndexAngle(0);\n let offset, width;\n ctx.save();\n ctx.translate(this.xCenter, this.yCenter);\n ctx.rotate(startAngle);\n ctx.textAlign = 'center';\n ctx.textBaseline = 'middle';\n this.ticks.forEach((tick, index)=>{\n if (index === 0 && !opts.reverse) {\n return;\n }\n const optsAtIndex = tickOpts.setContext(this.getContext(index));\n const tickFont = toFont(optsAtIndex.font);\n offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n if (optsAtIndex.showLabelBackdrop) {\n ctx.font = tickFont.string;\n width = ctx.measureText(tick.label).width;\n ctx.fillStyle = optsAtIndex.backdropColor;\n const padding = toPadding(optsAtIndex.backdropPadding);\n ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n }\n renderText(ctx, tick.label, 0, -offset, tickFont, {\n color: optsAtIndex.color\n });\n });\n ctx.restore();\n }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n millisecond: {\n common: true,\n size: 1,\n steps: 1000\n },\n second: {\n common: true,\n size: 1000,\n steps: 60\n },\n minute: {\n common: true,\n size: 60000,\n steps: 60\n },\n hour: {\n common: true,\n size: 3600000,\n steps: 24\n },\n day: {\n common: true,\n size: 86400000,\n steps: 30\n },\n week: {\n common: false,\n size: 604800000,\n steps: 4\n },\n month: {\n common: true,\n size: 2.628e9,\n steps: 12\n },\n quarter: {\n common: false,\n size: 7.884e9,\n steps: 4\n },\n year: {\n common: true,\n size: 3.154e10\n }\n};\n const UNITS = /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n return a - b;\n}\n function parse(scale, input) {\n if (isNullOrUndef(input)) {\n return null;\n }\n const adapter = scale._adapter;\n const { parser , round , isoWeekday } = scale._parseOpts;\n let value = input;\n if (typeof parser === 'function') {\n value = parser(value);\n }\n if (!isNumberFinite(value)) {\n value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n }\n if (value === null) {\n return null;\n }\n if (round) {\n value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n }\n return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n const ilen = UNITS.length;\n for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n const interval = INTERVALS[UNITS[i]];\n const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n return UNITS[i];\n }\n }\n return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n const unit = UNITS[i];\n if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n return unit;\n }\n }\n return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n if (INTERVALS[UNITS[i]].common) {\n return UNITS[i];\n }\n }\n}\n function addTick(ticks, time, timestamps) {\n if (!timestamps) {\n ticks[time] = true;\n } else if (timestamps.length) {\n const { lo , hi } = _lookup(timestamps, time);\n const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n ticks[timestamp] = true;\n }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n const adapter = scale._adapter;\n const first = +adapter.startOf(ticks[0].value, majorUnit);\n const last = ticks[ticks.length - 1].value;\n let major, index;\n for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n index = map[major];\n if (index >= 0) {\n ticks[index].major = true;\n }\n }\n return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n const ticks = [];\n const map = {};\n const ilen = values.length;\n let i, value;\n for(i = 0; i < ilen; ++i){\n value = values[i];\n map[value] = i;\n ticks.push({\n value,\n major: false\n });\n }\n return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n static id = 'time';\n static defaults = {\n bounds: 'data',\n adapters: {},\n time: {\n parser: false,\n unit: false,\n round: false,\n isoWeekday: false,\n minUnit: 'millisecond',\n displayFormats: {}\n },\n ticks: {\n source: 'auto',\n callback: false,\n major: {\n enabled: false\n }\n }\n };\n constructor(props){\n super(props);\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n this._unit = 'day';\n this._majorUnit = undefined;\n this._offsets = {};\n this._normalized = false;\n this._parseOpts = undefined;\n }\n init(scaleOpts, opts = {}) {\n const time = scaleOpts.time || (scaleOpts.time = {});\n const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n adapter.init(opts);\n mergeIf(time.displayFormats, adapter.formats());\n this._parseOpts = {\n parser: time.parser,\n round: time.round,\n isoWeekday: time.isoWeekday\n };\n super.init(scaleOpts);\n this._normalized = opts.normalized;\n }\n parse(raw, index) {\n if (raw === undefined) {\n return null;\n }\n return parse(this, raw);\n }\n beforeLayout() {\n super.beforeLayout();\n this._cache = {\n data: [],\n labels: [],\n all: []\n };\n }\n determineDataLimits() {\n const options = this.options;\n const adapter = this._adapter;\n const unit = options.time.unit || 'day';\n let { min , max , minDefined , maxDefined } = this.getUserBounds();\n function _applyBounds(bounds) {\n if (!minDefined && !isNaN(bounds.min)) {\n min = Math.min(min, bounds.min);\n }\n if (!maxDefined && !isNaN(bounds.max)) {\n max = Math.max(max, bounds.max);\n }\n }\n if (!minDefined || !maxDefined) {\n _applyBounds(this._getLabelBounds());\n if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n _applyBounds(this.getMinMax(false));\n }\n }\n min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n this.min = Math.min(min, max - 1);\n this.max = Math.max(min + 1, max);\n }\n _getLabelBounds() {\n const arr = this.getLabelTimestamps();\n let min = Number.POSITIVE_INFINITY;\n let max = Number.NEGATIVE_INFINITY;\n if (arr.length) {\n min = arr[0];\n max = arr[arr.length - 1];\n }\n return {\n min,\n max\n };\n }\n buildTicks() {\n const options = this.options;\n const timeOpts = options.time;\n const tickOpts = options.ticks;\n const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n if (options.bounds === 'ticks' && timestamps.length) {\n this.min = this._userMin || timestamps[0];\n this.max = this._userMax || timestamps[timestamps.length - 1];\n }\n const min = this.min;\n const max = this.max;\n const ticks = _filterBetween(timestamps, min, max);\n this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n this.initOffsets(timestamps);\n if (options.reverse) {\n ticks.reverse();\n }\n return ticksFromTimestamps(this, ticks, this._majorUnit);\n }\n afterAutoSkip() {\n if (this.options.offsetAfterAutoskip) {\n this.initOffsets(this.ticks.map((tick)=>+tick.value));\n }\n }\n initOffsets(timestamps = []) {\n let start = 0;\n let end = 0;\n let first, last;\n if (this.options.offset && timestamps.length) {\n first = this.getDecimalForValue(timestamps[0]);\n if (timestamps.length === 1) {\n start = 1 - first;\n } else {\n start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n }\n last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n if (timestamps.length === 1) {\n end = last;\n } else {\n end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n }\n }\n const limit = timestamps.length < 3 ? 0.5 : 0.25;\n start = _limitValue(start, 0, limit);\n end = _limitValue(end, 0, limit);\n this._offsets = {\n start,\n end,\n factor: 1 / (start + 1 + end)\n };\n }\n _generate() {\n const adapter = this._adapter;\n const min = this.min;\n const max = this.max;\n const options = this.options;\n const timeOpts = options.time;\n const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n const hasWeekday = isNumber(weekday) || weekday === true;\n const ticks = {};\n let first = min;\n let time, count;\n if (hasWeekday) {\n first = +adapter.startOf(first, 'isoWeek', weekday);\n }\n first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n }\n const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n addTick(ticks, time, timestamps);\n }\n if (time === max || options.bounds === 'ticks' || count === 1) {\n addTick(ticks, time, timestamps);\n }\n return Object.keys(ticks).sort((a, b)=>a - b).map((x)=>+x);\n }\n getLabelForValue(value) {\n const adapter = this._adapter;\n const timeOpts = this.options.time;\n if (timeOpts.tooltipFormat) {\n return adapter.format(value, timeOpts.tooltipFormat);\n }\n return adapter.format(value, timeOpts.displayFormats.datetime);\n }\n format(value, format) {\n const options = this.options;\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const fmt = format || formats[unit];\n return this._adapter.format(value, fmt);\n }\n _tickFormatFunction(time, index, ticks, format) {\n const options = this.options;\n const formatter = options.ticks.callback;\n if (formatter) {\n return callback(formatter, [\n time,\n index,\n ticks\n ], this);\n }\n const formats = options.time.displayFormats;\n const unit = this._unit;\n const majorUnit = this._majorUnit;\n const minorFormat = unit && formats[unit];\n const majorFormat = majorUnit && formats[majorUnit];\n const tick = ticks[index];\n const major = majorUnit && majorFormat && tick && tick.major;\n return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n }\n generateTickLabels(ticks) {\n let i, ilen, tick;\n for(i = 0, ilen = ticks.length; i < ilen; ++i){\n tick = ticks[i];\n tick.label = this._tickFormatFunction(tick.value, i, ticks);\n }\n }\n getDecimalForValue(value) {\n return value === null ? NaN : (value - this.min) / (this.max - this.min);\n }\n getPixelForValue(value) {\n const offsets = this._offsets;\n const pos = this.getDecimalForValue(value);\n return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return this.min + pos * (this.max - this.min);\n }\n _getLabelSize(label) {\n const ticksOpts = this.options.ticks;\n const tickLabelWidth = this.ctx.measureText(label).width;\n const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n const cosRotation = Math.cos(angle);\n const sinRotation = Math.sin(angle);\n const tickFontSize = this._resolveTickFontOptions(0).size;\n return {\n w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n };\n }\n _getLabelCapacity(exampleTime) {\n const timeOpts = this.options.time;\n const displayFormats = timeOpts.displayFormats;\n const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n exampleTime\n ], this._majorUnit), format);\n const size = this._getLabelSize(exampleLabel);\n const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n return capacity > 0 ? capacity : 1;\n }\n getDataTimestamps() {\n let timestamps = this._cache.data || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const metas = this.getMatchingVisibleMetas();\n if (this._normalized && metas.length) {\n return this._cache.data = metas[0].controller.getAllParsedValues(this);\n }\n for(i = 0, ilen = metas.length; i < ilen; ++i){\n timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n }\n return this._cache.data = this.normalize(timestamps);\n }\n getLabelTimestamps() {\n const timestamps = this._cache.labels || [];\n let i, ilen;\n if (timestamps.length) {\n return timestamps;\n }\n const labels = this.getLabels();\n for(i = 0, ilen = labels.length; i < ilen; ++i){\n timestamps.push(parse(this, labels[i]));\n }\n return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n }\n normalize(values) {\n return _arrayUnique(values.sort(sorter));\n }\n}\n\nfunction interpolate(table, val, reverse) {\n let lo = 0;\n let hi = table.length - 1;\n let prevSource, nextSource, prevTarget, nextTarget;\n if (reverse) {\n if (val >= table[lo].pos && val <= table[hi].pos) {\n ({ lo , hi } = _lookupByKey(table, 'pos', val));\n }\n ({ pos: prevSource , time: prevTarget } = table[lo]);\n ({ pos: nextSource , time: nextTarget } = table[hi]);\n } else {\n if (val >= table[lo].time && val <= table[hi].time) {\n ({ lo , hi } = _lookupByKey(table, 'time', val));\n }\n ({ time: prevSource , pos: prevTarget } = table[lo]);\n ({ time: nextSource , pos: nextTarget } = table[hi]);\n }\n const span = nextSource - prevSource;\n return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n super(props);\n this._table = [];\n this._minPos = undefined;\n this._tableRange = undefined;\n }\n initOffsets() {\n const timestamps = this._getTimestampsForTable();\n const table = this._table = this.buildLookupTable(timestamps);\n this._minPos = interpolate(table, this.min);\n this._tableRange = interpolate(table, this.max) - this._minPos;\n super.initOffsets(timestamps);\n }\n buildLookupTable(timestamps) {\n const { min , max } = this;\n const items = [];\n const table = [];\n let i, ilen, prev, curr, next;\n for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n curr = timestamps[i];\n if (curr >= min && curr <= max) {\n items.push(curr);\n }\n }\n if (items.length < 2) {\n return [\n {\n time: min,\n pos: 0\n },\n {\n time: max,\n pos: 1\n }\n ];\n }\n for(i = 0, ilen = items.length; i < ilen; ++i){\n next = items[i + 1];\n prev = items[i - 1];\n curr = items[i];\n if (Math.round((next + prev) / 2) !== curr) {\n table.push({\n time: curr,\n pos: i / (ilen - 1)\n });\n }\n }\n return table;\n }\n _getTimestampsForTable() {\n let timestamps = this._cache.all || [];\n if (timestamps.length) {\n return timestamps;\n }\n const data = this.getDataTimestamps();\n const label = this.getLabelTimestamps();\n if (data.length && label.length) {\n timestamps = this.normalize(data.concat(label));\n } else {\n timestamps = data.length ? data : label;\n }\n timestamps = this._cache.all = timestamps;\n return timestamps;\n }\n getDecimalForValue(value) {\n return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n }\n getValueForPixel(pixel) {\n const offsets = this._offsets;\n const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n controllers,\n elements,\n plugins,\n scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","import Chart from \"chart.js/auto\";\nimport { csvParse } from \"d3-dsv\";\n\n// These 2 imports use some vite machinery to directly import these files as\n// strings. Then they are constants and this reduces the load on the GC.\nimport airportsString from \"./datasets/airports.csv?raw\";\nimport flightsString from \"./datasets/flights-airports.csv?raw\";\n\n/*\n * From https://www.omnicalculator.com/other/latitude-longitude-distance:\n * d = 2R × sin⁻¹(√[sin²((θ₂ - θ₁)/2) + cosθ₁ × cosθ₂ × sin²((φ₂ - φ₁)/2)])\n *\n * where:\n * θ₁, φ₁ – First point latitude and longitude coordinates;\n * θ₂, φ₂ – Second point latitude and longitude coordinates;\n * R – Earth's radius (R = 6371 km); and\n * d – Distance between them along Earth's surface.\n */\nconst R = 6371;\nfunction computeDistance(coords1, coords2) {\n const long1 = toRadian(coords1.longitude);\n const lat1 = toRadian(coords1.latitude);\n const long2 = toRadian(coords2.longitude);\n const lat2 = toRadian(coords2.latitude);\n const longSquareSin = Math.sin((long2 - long1) / 2) ** 2;\n const latSquareSin = Math.sin((lat2 - lat1) / 2) ** 2;\n const d = 2 * R * Math.asin(Math.sqrt(latSquareSin + Math.cos(lat1) * Math.cos(lat2) * longSquareSin));\n return d;\n}\n\nconst RAD = Math.PI / 180;\nfunction toRadian(deg) {\n return deg * RAD;\n}\n\nlet preparedData = null;\nfunction prepare() {\n /**\n * AirportInformation: { state, iata, name, city, country, latitude, longitude }\n * airports: Array\n * flights: Array<{ origin, destination, count }>\n */\n const airports = csvParse(airportsString);\n const flights = csvParse(flightsString);\n const airportMap = new Map(airports.map((airport) => [airport.iata, airport]));\n\n for (const flight of flights) {\n const origAirport = airportMap.get(flight.origin);\n const destAirport = airportMap.get(flight.destination);\n flight.distance = computeDistance(origAirport, destAirport);\n }\n\n preparedData = { flights, airportMap };\n}\n\nconst ROOT = document.getElementById(\"chart\");\nconst opaqueCheckBox = document.getElementById(\"opaque-color\");\n\nlet currentChart = null;\nfunction drawScattered(data) {\n if (!preparedData)\n throw new Error(\"Please prepare the data first.\");\n\n reset();\n\n currentChart = new Chart(ROOT, {\n type: \"scatter\",\n data: {\n datasets: [\n {\n data: preparedData.flights,\n backgroundColor: opaqueCheckBox.checked ? \"rgb(0, 125, 255)\" : \"rgba(0, 125, 255, .20)\",\n },\n ],\n },\n options: {\n animation: false,\n parsing: {\n xAxisKey: \"distance\",\n yAxisKey: \"count\",\n },\n plugins: {\n legend: {\n display: false,\n },\n title: {\n display: true,\n text: \"Number of flights for a distance\",\n position: \"bottom\",\n },\n tooltip: {\n displayColors: false,\n callbacks: {\n label: (item) => {\n const orig = preparedData.airportMap.get(item.raw.origin);\n const dest = preparedData.airportMap.get(item.raw.destination);\n const result = `✈ ${orig.name} (${orig.iata}) → ${dest.name} (${dest.iata}): ${Math.round(item.raw.distance)} km`;\n return result;\n },\n },\n },\n },\n scales: {\n x: {\n title: {\n text: \"distance →\",\n align: \"end\",\n display: true,\n },\n ticks: {\n format: {\n style: \"unit\",\n unit: \"kilometer\",\n },\n },\n },\n y: {\n type: \"logarithmic\",\n title: {\n text: \"# of flights →\",\n align: \"end\",\n display: true,\n },\n },\n },\n },\n });\n}\n\nfunction openTooltip() {\n if (!currentChart)\n throw new Error(\"No chart is present, please draw a chart first\");\n\n const renderedDataset = currentChart.getDatasetMeta(0);\n const node = currentChart.canvas;\n const rect = node.getBoundingClientRect();\n\n // Index 2426 is carefully chosen to display a lot of lines (which depends\n // on the zoom level).\n const point = renderedDataset.data[2426];\n const event = new MouseEvent(\"mousemove\", {\n clientX: rect.left + point.x,\n clientY: rect.top + point.y,\n cancelable: true,\n bubbles: true,\n });\n\n node.dispatchEvent(event);\n}\n\nfunction reset() {\n if (currentChart) {\n currentChart.destroy();\n currentChart = null;\n }\n}\n\nasync function runAllTheThings() {\n [\n // Force prettier to use a multiline formatting\n \"prepare\",\n \"add-scatter-chart-button\",\n \"open-tooltip\",\n ].forEach((id) => document.getElementById(id).click());\n}\n\ndocument.getElementById(\"prepare\").addEventListener(\"click\", prepare);\ndocument.getElementById(\"add-scatter-chart-button\").addEventListener(\"click\", drawScattered);\ndocument.getElementById(\"open-tooltip\").addEventListener(\"click\", openTooltip);\ndocument.getElementById(\"reset\").addEventListener(\"click\", reset);\ndocument.getElementById(\"run-all\").addEventListener(\"click\", runAllTheThings);\n\nif (import.meta.env.DEV)\n runAllTheThings();\n"],"names":["map","interpolate","clone","color","index","set","callback","defaults","name","_descriptors","resolve","descriptors","draw","from","to","scales","elements","names","reset","i","inRange","layouts","positions","validIndex","registry","plugins","listener","alpha","skip","fill","round"],"mappings":"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","x_google_ignoreList":[0,1,2,3]} \ No newline at end of file diff --git a/suites/charts/dist/assets/developer-4ed993c7.js.map b/suites/charts/dist/assets/developer-4ed993c7.js.map deleted file mode 100644 index 59e05bcdc..000000000 --- a/suites/charts/dist/assets/developer-4ed993c7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"developer-4ed993c7.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/suites/charts/dist/assets/developer.js.map b/suites/charts/dist/assets/developer.js.map new file mode 100644 index 000000000..aa4c0ca82 --- /dev/null +++ b/suites/charts/dist/assets/developer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"developer.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/suites/charts/dist/assets/flights-airports-9a9e6422.js.map b/suites/charts/dist/assets/flights-airports-9a9e6422.js.map deleted file mode 100644 index 60fbd9650..000000000 --- a/suites/charts/dist/assets/flights-airports-9a9e6422.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"flights-airports-9a9e6422.js","sources":["../../node_modules/d3-dsv/src/dsv.js","../../node_modules/d3-dsv/src/csv.js","../../datasets/airports.csv?raw","../../datasets/flights-airports.csv?raw"],"sourcesContent":["var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","export default \"iata,name,city,state,country,latitude,longitude\\n00M,Thigpen,Bay Springs,MS,USA,31.95376472,-89.23450472\\n00R,Livingston Municipal,Livingston,TX,USA,30.68586111,-95.01792778\\n00V,Meadow Lake,Colorado Springs,CO,USA,38.94574889,-104.5698933\\n01G,Perry-Warsaw,Perry,NY,USA,42.74134667,-78.05208056\\n01J,Hilliard Airpark,Hilliard,FL,USA,30.6880125,-81.90594389\\n01M,Tishomingo County,Belmont,MS,USA,34.49166667,-88.20111111\\n02A,Gragg-Wade,Clanton,AL,USA,32.85048667,-86.61145333\\n02C,Capitol,Brookfield,WI,USA,43.08751,-88.17786917\\n02G,Columbiana County,East Liverpool,OH,USA,40.67331278,-80.64140639\\n03D,Memphis Memorial,Memphis,MO,USA,40.44725889,-92.22696056\\n04M,Calhoun County,Pittsboro,MS,USA,33.93011222,-89.34285194\\n04Y,Hawley Municipal,Hawley,MN,USA,46.88384889,-96.35089861\\n05C,Griffith-Merrillville,Griffith,IN,USA,41.51961917,-87.40109333\\n05F,Gatesville - City/County,Gatesville,TX,USA,31.42127556,-97.79696778\\n05U,Eureka,Eureka,NV,USA,39.60416667,-116.0050597\\n06A,Moton Municipal,Tuskegee,AL,USA,32.46047167,-85.68003611\\n06C,Schaumburg,Chicago/Schaumburg,IL,USA,41.98934083,-88.10124278\\n06D,Rolla Municipal,Rolla,ND,USA,48.88434111,-99.62087694\\n06M,Eupora Municipal,Eupora,MS,USA,33.53456583,-89.31256917\\n06N,Randall,Middletown,NY,USA,41.43156583,-74.39191722\\n06U,Jackpot/Hayden,Jackpot,NV,USA,41.97602222,-114.6580911\\n07C,Dekalb County,Auburn,IN,USA,41.30716667,-85.06433333\\n07F,Gladewater Municipal,Gladewater,TX,USA,32.52883861,-94.97174556\\n07G,Fitch H Beach,Charlotte,MI,USA,42.57450861,-84.81143139\\n07K,Central City Municipal,Central City,NE,USA,41.11668056,-98.05033639\\n08A,Wetumpka Municipal,Wetumpka,AL,USA,32.52943944,-86.32822139\\n08D,Stanley Municipal,Stanley,ND,USA,48.30079861,-102.4063514\\n08K,Harvard State,Harvard,NE,USA,40.65138528,-98.07978667\\n08M,Carthage-Leake County,Carthage,MS,USA,32.76124611,-89.53007139\\n09A,Butler-Choctaw County,Butler,AL,USA,32.11931306,-88.1274625\\n09J,Jekyll Island,Jekyll Island,GA,USA,31.07447222,-81.42777778\\n09K,Sargent Municipal,Sargent,NE,USA,41.63695083,-99.34038139\\n09M,Charleston Municipal,Charleston,MS,USA,33.99150222,-90.078145\\n09W,South Capitol Street,Washington,DC,USA,38.86872333,-77.00747583\\n0A3,Smithville Municipal,Smithville,TN,USA,35.98531194,-85.80931806\\n0A8,Bibb County,Centreville,AL,USA,32.93679056,-87.08888306\\n0A9,Elizabethton Municipal,Elizabethton,TN,USA,36.37094306,-82.17374111\\n0AK,Pilot Station,Pilot Station,AK,USA,61.93396417,-162.8929358\\n0B1,Col. Dyke,Bethel,ME,USA,44.42506444,-70.80784778\\n0B4,Hartington Municipal,Hartington,NE,USA,42.60355556,-97.25263889\\n0B5,Turners Falls,Montague,MA,USA,42.59136361,-72.52275472\\n0B7,Warren-Sugar Bush,Warren,VT,USA,44.11672722,-72.82705806\\n0B8,Elizabeth,Fishers Island,NY,USA,41.25130806,-72.03161139\\n0C0,Dacy,Chicago/Harvard,IL,USA,42.40418556,-88.63343222\\n0C4,Pender Municipal,Pender,NE,USA,42.11388722,-96.72892556\\n0D1,South Haven Municipal,South Haven,MI,USA,42.35083333,-86.25613889\\n0D8,Gettysburg Municipal,Gettysburg,SD,USA,44.98730556,-99.9535\\n0E0,Moriarty,Moriarty,NM,USA,34.98560639,-106.0094661\\n0E8,Crownpoint,Crownpoint,NM,USA,35.71765889,-108.2015961\\n0F2,Bowie Municipal,Bowie,TX,USA,33.60166667,-97.77556\\n0F4,Loup City Municipal,Loup City,NE,USA,41.29028694,-98.99064278\\n0F7,Fountainhead Lodge Airpark,Eufaula,OK,USA,35.38898833,-95.60165111\\n0F8,William R Pogue Municipal,Sand Springs,OK,USA,36.17528,-96.15181028\\n0F9,Tishomingo Airpark,Tishomingo,OK,USA,34.19592833,-96.67555694\\n0G0,North Buffalo Suburban,Lockport,NY,USA,43.10318389,-78.70334583\\n0G3,Tecumseh Municipal,Tecumseh,NE,USA,40.39944417,-96.17139694\\n0G6,Williams County,Bryan,OH,USA,41.46736111,-84.50655556\\n0G7,Finger Lakes Regional,Seneca Falls,NY,USA,42.88062278,-76.78162028\\n0H1,Trego Wakeeney,Wakeeney,KS,USA,39.0044525,-99.89289917\\n0I8,Cynthiana-Harrison County,Cynthiana,KY,USA,38.36674167,-84.28410056\\n0J0,Abbeville Municipal,Abbeville,AL,USA,31.60016778,-85.23882222\\n0J4,Florala Municipal,Florala,AL,USA,31.04247361,-86.31156111\\n0J6,Headland Municipal,Headland,AL,USA,31.364895,-85.30965556\\n0K7,Humboldt Municipal,Humboldt,IA,USA,42.7360825,-94.24524167\\n0L5,Goldfield,Goldfield,NV,USA,37.71798833,-117.2384119\\n0L7,Jean,Jean,NV,USA,35.76827222,-115.3296378\\n0L9,Echo Bay,Overton,NV,USA,36.31108972,-114.4638672\\n0M0,Dumas Municipal,Dumas,AR,USA,33.8845475,-91.53429111\\n0M1,Scott,Parsons,TN,USA,35.63778,-88.127995\\n0M4,Benton County,Camden,TN,USA,36.01122694,-88.12328833\\n0M5,Humphreys County,Waverly,TN,USA,36.11659972,-87.73815889\\n0M6,Panola County,Batesville,MS,USA,34.36677444,-89.90008917\\n0M8,Byerley,Lake Providence,LA,USA,32.82587917,-91.187665\\n0O3,Calaveras Co-Maury Rasmussen,San Andreas,CA,USA,38.14611639,-120.6481733\\n0O4,Corning Municipal,Corning,CA,USA,39.94376806,-122.1713781\\n0O5,University,Davis,CA,USA,38.53146222,-121.7864906\\n0Q5,Shelter Cove,Shelter Cove,CA,USA,40.02764333,-124.0733639\\n0Q6,Shingletown,Shingletown,CA,USA,40.52210111,-121.8177683\\n0R0,Columbia-Marion County,Columbia,MS,USA,31.29700806,-89.81282944\\n0R1,Atmore Municipal,Atmore,AL,USA,31.01621528,-87.44675972\\n0R3,Abbeville Chris Crusta Memorial,Abbeville,LA,USA,29.97576083,-92.08415167\\n0R4,Concordia Parish,Vidalia,LA,USA,31.56683278,-91.50011889\\n0R5,David G Joyce,Winnfield,LA,USA,31.96366222,-92.66026056\\n0R7,Red River,Coushatta,LA,USA,31.99071694,-93.30739306\\n0S7,Dorothy Scott,Oroville,WA,USA,48.958965,-119.4119622\\n0S9,Jefferson County International,Port Townsend,WA,USA,48.04981361,-122.8012792\\n0V2,Harriet Alexander,Salida,CO,USA,38.53916389,-106.0458483\\n0V3,Pioneer Village,Minden,NE,USA,40.5149125,-98.94565083\\n0V4,Brookneal/Campbell County,Brookneal,VA,USA,37.14172222,-79.01638889\\n0V6,Mission Sioux,Mission,SD,USA,43.30694778,-100.6281936\\n0V7,Kayenta,Kayenta,AZ,USA,36.70972139,-110.2367978\\n10C,Galt,Chicago/Greenwood/Wonderlake,IL,USA,42.40266472,-88.37588917\\n10D,Winsted Municipal,Winsted,MN,USA,44.94996278,-94.0669175\\n10G,Holmes County,Millersburg,OH,USA,40.53716667,-81.95436111\\n10N,Wallkill,Wallkill,NY,USA,41.62787111,-74.13375583\\n10U,Owyhee,Owyhee,NV,USA,41.95323306,-116.1876014\\n11A,Clayton Municipal,Clayton,AL,USA,31.88329917,-85.48491361\\n11D,Clarion Cty,Clarion,PA,USA,41.22581222,-79.44098972\\n11IS,Schaumburg Heliport,Chicago/Schaumburg,IL,USA,42.04808278,-88.05257194\\n11J,Early County,Blakely,GA,USA,31.39698611,-84.89525694\\n11R,Brenham Municipal,Brenham,TX,USA,30.219,-96.37427778\\n12C,Rochelle Municipal,Rochelle,IL,USA,41.89300139,-89.07829\\n12D,Tower Municipal,Tower,MN,USA,47.81833333,-92.29166667\\n12J,Brewton Municipal,Brewton,AL,USA,31.05126306,-87.06796833\\n12K,Superior Municipal,Superior,NE,USA,40.04636111,-98.06011111\\n12Y,Le Sueur Municipal,Le Sueur,MN,USA,44.43746472,-93.91274083\\n13C,Lakeview,Lakeview,MI,USA,43.45213722,-85.26480333\\n13K,Eureka Municipal,Eureka,KS,USA,37.8515825,-96.29169806\\n13N,Trinca,Andover,NJ,USA,40.96676444,-74.78016556\\n14J,Carl Folsom,Elba,AL,USA,31.40988861,-86.08883583\\n14M,Hollandale Municipal,Hollandale,MS,USA,33.18262167,-90.83065444\\n14Y,Todd Field,Long Prairie,MN,USA,45.89857556,-94.87391\\n15F,Haskell Municipal,Haskell,TX,USA,33.19155556,-99.71793056\\n15J,Cook County,Adel,GA,USA,31.13780556,-83.45308333\\n15M,Luka,Luka,MS,USA,34.7723125,-88.16587444\\n15Z,McCarthy 2,McCarthy,AK,USA,61.43706083,-142.9037372\\n16A,Nunapitchuk,Nunapitchuk,AK,USA,60.90582833,-162.4391158\\n16G,Seneca County,Tiffin,OH,USA,41.09405556,-83.2125\\n16J,Dawson Municipal,Dawson,GA,USA,31.74328472,-84.419285\\n16S,Myrtle Creek Municipal,Myrtle Creek,OR,USA,42.99845056,-123.3095092\\n17G,Port Bucyrus-Crawford County,Bucyrus,OH,USA,40.78141667,-82.97469444\\n17J,Donalsonville Municipal,Donalsonville,GA,USA,31.00694444,-84.87761111\\n17K,Boise City,Boise City,OK,USA,36.77430028,-102.5104364\\n17M,Magee Municipal,Magee,MS,USA,31.86127139,-89.80285361\\n17N,Cross Keys,Cross Keys,NJ,USA,39.70547583,-75.03300306\\n17Z,Manokotak,Manokotak,AK,USA,58.98896583,-159.0499739\\n18A,Franklin County,Canon,GA,USA,34.34010472,-83.13348333\\n18I,McCreary County,Pine Knot,KY,USA,36.69591306,-84.39160389\\n19A,Jackson County,Jefferson,GA,USA,34.17402472,-83.56066528\\n19M,C A Moore,Lexington,MS,USA,33.12546111,-90.02555694\\n19N,Camden,Berlin,NJ,USA,39.77842056,-74.94780389\\n19P,Port Protection SPB,Port Protection,AK,USA,56.32880417,-133.6100844\\n1A3,Martin Campbell,Copperhill,TN,USA,35.01619111,-84.34631083\\n1A5,Macon County,Franklin,NC,USA,35.222595,-83.41904389\\n1A6,Middlesboro-Bell County,Middlesboro,KY,USA,36.6106375,-83.73741611\\n1A7,Jackson County,Gainesboro,TN,USA,36.39728139,-85.64164278\\n1A9,Autauga County,Prattville,AL,USA,32.438775,-86.51044778\\n1B0,Dexter Regional,Dexter,ME,USA,45.00839444,-69.23976722\\n1B1,Columbia Cty,Hudson,NY,USA,42.29130028,-73.71031944\\n1B3,Fair Haven,Fair Haven,VT,USA,43.61534389,-73.27455556\\n1B9,Mansfield Municipal,Mansfield,MA,USA,42.00013306,-71.19677139\\n1C5,Clow,Chicago/Plainfield,IL,USA,41.69597444,-88.12923056\\n1D1,Milbank Municipal,Milbank,SD,USA,45.23053806,-96.56596556\\n1D2,Canton -Plymouth - Mettetal,Plymouth,MI,USA,42.35003667,-83.45826833\\n1D3,Platte Municipal,Platte,SD,USA,43.40332833,-98.82952972\\n1D6,Hector Municipal,Hector,MN,USA,44.73107278,-94.71471333\\n1D7,Webster Municipal,Webster,SD,USA,45.29329111,-97.51369889\\n1D8,Redfield Municipal,Redfield,SD,USA,44.86247611,-98.52953972\\n1F0,Downtown Ardmore,Ardmore,OK,USA,34.14698917,-97.12265194\\n1F1,Lake Murray State Park,Overbrook,OK,USA,34.07509694,-97.10667917\\n1F4,Madill Municipal,Madill,OK,USA,34.14040194,-96.81203222\\n1F9,Bridgeport Municipal,Bridgeport,TX,USA,33.17533333,-97.82838889\\n1G0,Wood County,Bowling Green,OH,USA,41.391,-83.63013889\\n1G3,Kent State University,Kent,OH,USA,41.15186167,-81.41658306\\n1G4,Grand Canyon West,Peach Springs,AZ,USA,35.99221,-113.8166164\\n1G5,Freedom,Medina,OH,USA,41.13144444,-81.76491667\\n1G6,Michael,Cicero,NY,USA,43.18166667,-76.12777778\\n1H0,Creve Coeur,St Louis,MO,USA,38.72752,-90.50830417\\n1H2,Effingham County Memorial,Effingham,IL,USA,39.07045083,-88.53351972\\n1H3,Linn State Tech. College,Linn,MO,USA,38.47149444,-91.81531667\\n1H8,Casey Municipal,Casey,IL,USA,39.30250917,-88.00406194\\n1I5,Freehold,Freehold,NY,USA,42.36425,-74.06596806\\n1I9,Delphi Municipal,Delphi,IN,USA,40.54281417,-86.68167194\\n1J0,Tri-County,Bonifay,FL,USA,30.84577778,-85.60138889\\n1K2,Lindsay Municipal,Lindsay,OK,USA,34.85007333,-97.58642028\\n1K4,David J. Perry,Goldsby,OK,USA,35.1550675,-97.47039389\\n1K5,Waynoka Municipal,Waynoka,OK,USA,36.56670028,-98.85231333\\n1K9,Satanta Municipal,Satanta,KS,USA,37.45419111,-100.9921119\\n1L0,St. John the Baptist Parish,Reserve,LA,USA,30.08720833,-90.58266528\\n1L1,Lincoln Co,Panaca,NV,USA,37.78746444,-114.4216567\\n1L7,Escalante Municipal,Escalante,UT,USA,37.74532639,-111.5701653\\n1L9,Parowan,Parowan,UT,USA,37.85969694,-112.816055\\n1M1,North Little Rock Municipal,No Lit Rock,AR,USA,34.83398056,-92.25792778\\n1M2,Belzoni Municipal,Belzoni,MS,USA,33.14518056,-90.51528472\\n1M4,Posey,Haleyville,AL,USA,34.28034806,-87.60044139\\n1M5,Portland Municipal,Portland,TN,USA,36.59287528,-86.47691028\\n1M7,Fulton,Fulton,KY,USA,36.52589417,-88.91561611\\n1MO,Mountain Grove Memorial,Mountain Grove,MO,USA,37.12071889,-92.311245\\n1N2,Spadaro,East Moriches,NY,USA,40.82787639,-72.74871083\\n1N4,Woodbine Muni,Woodbine,NJ,USA,39.21915,-74.794765\\n1N7,Blairstown,Blairstown,NJ,USA,40.97114556,-74.99747556\\n1N9,Allentown Queen City Muni,Allentown,PA,USA,40.57027778,-75.48830556\\n1ND3,Hamry,Kindred,ND,USA,46.6485775,-97.00564306\\n1O1,Grandfield Municipal,Grandfield,OK,USA,34.23758944,-98.74200917\\n1O2,Lampson,Lakeport,CA,USA,38.99017472,-122.8997175\\n1O3,Lodi,Lodi,CA,USA,38.20241667,-121.2684167\\n1O4,Thomas Municipal,Thomas,OK,USA,35.73338222,-98.73063833\\n1O6,Dunsmuir Municipal-Mott,Dunsmuir,CA,USA,41.26320889,-122.2719528\\n1R1,Jena,Jena,LA,USA,31.671005,-92.15846722\\n1R7,Brookhaven-Lincoln County,Brookhaven,MS,USA,31.6058475,-90.40931583\\n1R8,Bay Minette Municipal,Bay Minette,AL,USA,30.87046278,-87.81738167\\n1S0,Pierce County,Puyallup,WA,USA,47.10391667,-122.2871944\\n1S3,Tillitt,Forsyth,MT,USA,46.27110639,-106.6239206\\n1S5,Sunnyside Municipal,Sunnyside,WA,USA,46.32763139,-119.9705964\\n1S6,Priest River Muni,Priest River,ID,USA,48.19018611,-116.9093644\\n1U7,Bear Lake County,Paris,ID,USA,42.24714972,-111.33826\\n1V0,Navajo State Park,Navajo Dam,NM,USA,36.80833833,-107.6514444\\n1V2,Grant County,Hyannis,NE,USA,42.00942944,-101.7693439\\n1V5,Boulder Muni,Boulder,CO,USA,40.03942972,-105.2258217\\n1V6,Fremont County,Canon City,CO,USA,38.42838111,-105.1054994\\n1V9,Blake,Delta,CO,USA,38.78539722,-108.0636611\\n20A,Robbins,Oneonta,AL,USA,33.97231972,-86.37942722\\n20M,Macon Municipal,Macon,MS,USA,33.13345889,-88.53559806\\n20N,Kingston-Ulster,Kingston,NY,USA,41.9852525,-73.96409722\\n20U,Beach,Beach,ND,USA,46.92362444,-103.9785389\\n20V,McElroy Airfield,Kremmling,CO,USA,40.05367972,-106.3689467\\n21D,Lake Elmo,St Paul,MN,USA,44.99748861,-92.85568111\\n21F,Jacksboro Municipal,Jacksboro,TX,USA,33.228725,-98.14671083\\n22B,Mountain Meadow Airstrip,Burlington,CT,USA,41.77287528,-73.01121667\\n22I,Vinton County,McArthur,OH,USA,39.328125,-82.44182167\\n22M,Pontotoc County,Pontotoc,MS,USA,34.27593833,-89.03839694\\n22N,Carbon Cty-Jake Arner Memorial,Lehighton,PA,USA,40.80950889,-75.76149639\\n23J,Herlong,Jacksonville,FL,USA,30.27778889,-81.80594722\\n23M,Clarke County,Quitman,MS,USA,32.08487111,-88.73893389\\n23N,Bayport Aerodrome,Bayport,NY,USA,40.75843139,-73.05372083\\n23R,Devine Municipal,Devine,TX,USA,29.1384075,-98.94189028\\n24A,Jackson County,Sylva,NC,USA,35.3168625,-83.20936806\\n24J,Suwannee County,Live Oak,FL,USA,30.30105583,-83.02318778\\n24N,Jicarilla Apache Nation,Dulce,NM,USA,36.828535,-106.8841914\\n25J,Cuthbert-Randolph,Cuthbert,GA,USA,31.70016583,-84.82492194\\n25M,Ripley,Ripley,MS,USA,34.72226778,-89.01504944\\n25R,International,Edinburg,TX,USA,26.44201083,-98.12945306\\n26A,Ashland/Lineville,Ashland/Lineville,AL,USA,33.28761417,-85.80412861\\n26N,Ocean City Muni cipal,Ocean City,NJ,USA,39.26347222,-74.60747222\\n26R,Jackson County,Edna/Ganado,TX,USA,29.00101,-96.58194667\\n26U,McDermitt State,McDermitt,OR,USA,42.00211083,-117.7231972\\n27A,Elbert County-Patz,Elberton,GA,USA,34.09519722,-82.81586417\\n27D,Myers,Canby,MN,USA,44.72801889,-96.26309972\\n27J,Newberry Municipal,Newberry,SC,USA,34.30927778,-81.63972222\\n27K,Georgetown-Scott County,Georgetown,KY,USA,38.23442528,-84.43468667\\n28J,Kay Larkin,Palatka,FL,USA,29.65863889,-81.68855556\\n29D,Grove City,Grove City,PA,USA,41.14597611,-80.16592194\\n29G,Portage County,Ravenna,OH,USA,41.210195,-81.25163083\\n29S,Gardiner,Gardiner,MT,USA,45.04993556,-110.7466008\\n2A0,Mark Anton,Dayton,TN,USA,35.48624611,-84.93109722\\n2A1,Jamestown Municipal,Jamestown,TN,USA,36.34970833,-84.94664472\\n2A3,Larsen Bay,Larsen Bay,AK,USA,57.53510667,-153.9784169\\n2A9,Kotlik,Kotlik,AK,USA,63.03116111,-163.5299278\\n2AK,Lime Village,Lime Village,AK,USA,61.35848528,-155.4403508\\n2B3,Parlin,Newport,NH,USA,43.38812944,-72.18925417\\n2B7,Pittsfield Municipal,Pittsfield,ME,USA,44.76852778,-69.37441667\\n2B9,Post Mills,Post Mills,VT,USA,43.884235,-72.25370333\\n2D1,Barber,Alliance,OH,USA,40.97089139,-81.09981889\\n2D5,Oakes Municipal,Oakes,ND,USA,46.17301972,-98.07987556\\n2F5,Lamesa Municipal,Lamesa,TX,USA,32.75627778,-101.9194722\\n2F6,Skiatook Municipal,Skiatook,OK,USA,36.357035,-96.01138556\\n2F7,Commerce Municipal,Commerce,TX,USA,33.29288889,-95.89641806\\n2F8,Morehouse Memorial,Bastrop,LA,USA,32.75607944,-91.88057194\\n2G2,Jefferson County Airpark,Steubenville,OH,USA,40.35944306,-80.70007806\\n2G3,Connellsville,Connellsville,PA,USA,39.95893667,-79.65713306\\n2G4,Garrett County,Oakland,MD,USA,39.58027778,-79.33941667\\n2G9,Somerset County,Somerset,PA,USA,40.03911111,-79.01455556\\n2H0,Shelby County,Shelbyville,IL,USA,39.41042861,-88.8454325\\n2H2,Aurora Memorial Municipal,Aurora,MO,USA,36.96230778,-93.69531111\\n2I0,Madisonville Municipal,Madisonville,KY,USA,37.35502778,-87.39963889\\n2I5,Chanute,Rantoul,IL,USA,40.29355556,-88.14236111\\n2IS,Airglades,Clewiston,FL,USA,26.74200972,-81.04978917\\n2J2,Liberty County,Hinesville,GA,USA,31.78461111,-81.64116667\\n2J3,Louisville Municipal,Louisville,GA,USA,32.98654083,-82.38568139\\n2J5,Millen,Millen,GA,USA,32.89376972,-81.96511583\\n2J9,Quincy Municipal,Quincy,FL,USA,30.59786111,-84.55741667\\n2K3,Stanton County Municipal,Johnson,KS,USA,37.58271111,-101.73281\\n2K4,Scott,Mangum,OK,USA,34.89172583,-99.52675667\\n2K5,Telida,Telida,AK,USA,63.39387278,-153.2689733\\n2M0,Princeton-Caldwell County,Princeton,KY,USA,37.11560444,-87.85556944\\n2M2,Lawrenceburg Municipal,Lawrenceburg,TN,USA,35.2343025,-87.25793222\\n2M3,Sallisaw Municipal,Sallisaw,OK,USA,35.43816667,-94.80277778\\n2M4,G. V. Montgomery,Forest,MS,USA,32.35347778,-89.48867944\\n2M8,Charles W. Baker,Millington,TN,USA,35.27897583,-89.93147611\\n2O1,Gansner,Quincy,CA,USA,39.94378056,-120.9468983\\n2O3,Angwin-Parrett,Angwin,CA,USA,38.57851778,-122.4352572\\n2O6,Chowchilla,Chowchilla,CA,USA,37.11244417,-120.2468406\\n2O7,Independence,Independence,CA,USA,36.81382111,-118.2050956\\n2O8,Hinton Municipal,Hinton,OK,USA,35.50592472,-98.34236111\\n2P2,Washington Island,Washington Island,WI,USA,45.38620833,-86.92448056\\n2Q3,Yolo Co-Davis/Woodland/Winters,Davis/Woodland/Winters,CA,USA,38.5790725,-121.8566322\\n2R0,Waynesboro Municipal,Waynesboro,MS,USA,31.64599472,-88.63475667\\n2R4,Peter Prince,Milton,FL,USA,30.63762083,-86.99365278\\n2R5,St Elmo,St Elmo,AL,USA,30.50190833,-88.27511667\\n2R9,Karnes County,Kenedy,TX,USA,28.8250075,-97.86558333\\n2S1,Vashon Municipal,Vashon,WA,USA,47.45815333,-122.4773506\\n2S6,Sportsman Airpark,Newberg,OR,USA,45.29567333,-122.9553783\\n2S7,Chiloquin State,Chiloquin,OR,USA,42.58319167,-121.8761261\\n2S8,Wilbur,Wilbur,WA,USA,47.75320639,-118.7438936\\n2T1,Muleshoe Municipal,Muleshoe,TX,USA,34.18513639,-102.6410981\\n2V1,Stevens,Pagosa Springs,CO,USA,37.277505,-107.0558742\\n2V2,Vance Brand,Longmont,CO,USA,40.16367139,-105.1630369\\n2V5,Wray Municipal,Wray,CO,USA,40.10032333,-102.24096\\n2V6,Yuma Municipal,Yuma,CO,USA,40.10415306,-102.7129869\\n2W5,Maryland,Indian Head,MD,USA,38.60053667,-77.07296917\\n2W6,Captain Walter Francis Duke Regional,Leonardtown,MD,USA,38.31536111,-76.55011111\\n2Y3,Yakutat SPB,Yakutat,AK,USA,59.5624775,-139.7410994\\n2Y4,Rockwell City Municipal,Rockwell City,IA,USA,42.38748056,-94.61803333\\n31F,Gaines County,Seminole,TX,USA,32.67535389,-102.652685\\n32M,Norfolk,Norfolk,MA,USA,42.12787528,-71.37033556\\n32S,Stevensville,Stevensville,MT,USA,46.52511111,-114.0528056\\n33J,Geneva Municipal,Geneva,AL,USA,31.05527778,-85.88033333\\n33M,Water Valley,Water Valley,MS,USA,34.16677639,-89.68619722\\n33N,Delaware Airpark,Dover,DE,USA,39.21837556,-75.59642667\\n33S,Pru,Ritzville,WA,USA,47.12487194,-118.3927539\\n34A,Laurens County,Laurens,SC,USA,34.50705556,-81.94719444\\n35A,\\\"Union County, Troy Shelton\\\",Union,SC,USA,34.68680111,-81.64121167\\n35D,Padgham,Allegan,MI,USA,42.53098278,-85.82513556\\n35S,Wasco State,Wasco,OR,USA,45.58944444,-120.6741667\\n36K,Lakin,Lakin,KS,USA,37.96946389,-101.2554472\\n36S,Happy Camp,Happy Camp,CA,USA,41.79067944,-123.3889444\\n36U,Heber City Municipal/Russ McDonald,Heber,UT,USA,40.48180556,-111.4288056\\n37T,Calico Rock-Izard County,Calico Rock,AR,USA,36.16565278,-92.14523611\\n37W,Harnett County,Erwin,NC,USA,35.37880028,-78.73362917\\n38A,Shaktoolik,Shaktoolik,AK,USA,64.36263194,-161.2025369\\n38S,Deer Lodge-City-County,Deer Lodge,MT,USA,46.38881583,-112.7669842\\n38U,Wayne Wonderland,Loa,UT,USA,38.36247972,-111.5960164\\n39N,Princeton,Princeton,NJ,USA,40.39834833,-74.65760361\\n3A0,Grove Hill Municipal,Grove Hill,AL,USA,31.68932389,-87.7613875\\n3A1,Folsom,Cullman,AL,USA,34.26870833,-86.85833611\\n3A2,New Tazewell Municipal,Tazewell,TN,USA,36.41008417,-83.55546167\\n3A3,Anson County,Wadesboro,NC,USA,35.02397611,-80.08127333\\n3AU,Augusta Municipal,Augusta,KS,USA,37.67162778,-97.07787222\\n3B0,Southbridge Municipal,Southbridge,MA,USA,42.10092806,-72.03840833\\n3B1,Greenville Municipal,Greenville,ME,USA,45.46302778,-69.55161111\\n3B2,Marshfield,Marshfield,MA,USA,42.09824111,-70.67212083\\n3B9,Chester,Chester,CT,USA,41.38390472,-72.50589444\\n3BS,Jack Barstow,Midland,MI,USA,43.66291528,-84.261325\\n3CK,Lake In The Hills,Lake In The Hills,IL,USA,42.20680306,-88.32304028\\n3CM,James Clements Municipal,Bay City,MI,USA,43.54691667,-83.89550222\\n3CU,Cable Union,Cable,WI,USA,46.19424889,-91.24640972\\n3D2,Ephraim/Gibraltar,Ephraim,WI,USA,45.13535778,-87.18586556\\n3D4,Frankfort Dow Memorial,Frankfort,MI,USA,44.62506389,-86.20061944\\n3F3,De Soto Parish,Mansfield,LA,USA,32.07345972,-93.76551889\\n3F4,Vivian,Vivian,LA,USA,32.86133333,-94.01015361\\n3F7,Jones Memorial,Bristow,OK,USA,35.80685278,-96.42185556\\n3FM,Fremont Municipal,Fremont,MI,USA,43.43890528,-85.99478\\n3FU,Faulkton Municipal,Faulkton,SD,USA,45.03191861,-99.11566417\\n3G3,Wadsworth Municipal,Wadsworth,OH,USA,41.00158222,-81.75513111\\n3G4,Ashland County,Ashland,OH,USA,40.90297222,-82.25563889\\n3G7,Williamson/Sodus,Williamson,NY,USA,43.23472222,-77.12097222\\n3GM,Grand Haven Memorial Airpark,Grand Haven,MI,USA,43.03404639,-86.1981625\\n3I2,Mason County,Point Pleasant,WV,USA,38.91463889,-82.09858333\\n3I7,Phillipsburg,Phillipsburg,OH,USA,39.91344194,-84.40030889\\n3J1,Ridgeland,Ridgeland,SC,USA,32.49268694,-80.99233028\\n3J7,Greene County Airpark,Greensboro,GA,USA,33.59766667,-83.139\\n3JC,Freeman,Junction City,KS,USA,39.04327556,-96.84328694\\n3K3,Syracuse-Hamilton County Municipal,Syracuse,KS,USA,37.99167972,-101.7462822\\n3K6,St Louis-Metro East,Troy/Marine/St. Louis,IL,USA,38.73290861,-89.80656722\\n3K7,Mark Hoard Memorial,Leoti,KS,USA,38.45696333,-101.3532161\\n3LC,Logan County,Lincoln,IL,USA,40.15847222,-89.33497222\\n3LF,Litchfield Municipal,Litchfield,IL,USA,39.16635306,-89.67489694\\n3M7,Lafayette Municipal,Lafayette,TN,USA,36.518375,-86.05828083\\n3M8,North Pickens,Reform,AL,USA,33.38900611,-88.00557806\\n3M9,Warren Municipal,Warren,AR,USA,33.56044333,-92.08538861\\n3MY,Mt. Hawley Auxiliary,Peoria,IL,USA,40.79525917,-89.6134025\\n3N6,Old Bridge,Old Bridge,NJ,USA,40.32988667,-74.34678694\\n3N8,Mahnomen County,Mahnomen,MN,USA,47.25996056,-95.92809778\\n3ND0,Northwood Municipal,Northwood,ND,USA,47.72423333,-97.59042222\\n3O1,Gustine,Gustine,CA,USA,37.26271722,-120.9632586\\n3O3,Municipal,Purcell,OK,USA,34.97979444,-97.38586167\\n3O4,Sayre Municipal,Sayre,OK,USA,35.16755222,-99.65787361\\n3O5,Walters Municipal,Walters,OK,USA,34.37258444,-98.40588583\\n3O7,Hollister Municipal,Hollister,CA,USA,36.89334528,-121.4102706\\n3O9,Grand Lake Regional,Afton,OK,USA,36.5775775,-94.86190028\\n3R0,Beeville Municipal,Beeville,TX,USA,28.36455528,-97.79208194\\n3R1,Bay City Municipal,Bay City,TX,USA,28.973255,-95.86345528\\n3R2,Le Gros Memorial,Crowley,LA,USA,30.16173611,-92.48396111\\n3R4,Hart,Many,LA,USA,31.54489667,-93.48645306\\n3R7,Jennings,Jennings,LA,USA,30.24269333,-92.67344778\\n3S4,Illinois Valley,Illinois Valley (Cave Junction),OR,USA,42.10372417,-123.6822911\\n3S8,Grants Pass,Grants Pass,OR,USA,42.51011722,-123.3879894\\n3S9,Condon State-Pauling,Condon,OR,USA,45.24651889,-120.1664233\\n3SG,Harry W Browne,Saginaw - H.Browne,MI,USA,43.43341028,-83.86245833\\n3SQ,St Charles,St Charles,MO,USA,38.84866139,-90.50011833\\n3T3,Boyceville Municipal,Boyceville,WI,USA,45.042185,-92.0293475\\n3T5,Fayette Regional Air Center,La Grange,TX,USA,29.90930556,-96.9505\\n3TR,Jerry Tyler Memorial,Niles,MI,USA,41.83590806,-86.22517611\\n3U3,Bowman,Anaconda,MT,USA,46.15313278,-112.86784\\n3U7,Benchmark,Benchmark,MT,USA,47.48133194,-112.8697678\\n3U8,Big Sandy,Big Sandy,MT,USA,48.16247972,-110.1132631\\n3V4,Fort Morgan Municipal,Fort Morgan,CO,USA,40.33423194,-103.8039508\\n3WO,Shawano Municipal,Shawano,WI,USA,44.78777778,-88.56152444\\n3Y2,George L Scott Municipal,West Union,IA,USA,42.98508917,-91.79060417\\n3Y3,Winterset Madison County,Winterset,IA,USA,41.36276778,-94.02106194\\n3Z9,Haines SPB,Haines,AK,USA,59.23495111,-135.4407181\\n40J,Perry-Foley,Perry,FL,USA,30.06927778,-83.58058333\\n40N,Chester Cty-G O Carlson,Coatesville,PA,USA,39.97897222,-75.86547222\\n40U,Manila,Manila,UT,USA,40.98607,-109.6784811\\n41U,Manti-Ephraim,Manti,UT,USA,39.32912833,-111.6146397\\n42A,Melbourne Municipal,Melbourne,AR,USA,36.07079222,-91.82914667\\n42C,White Cloud,White Cloud,MI,USA,43.55974139,-85.77421944\\n42J,Keystone Airpark,Keystone Heights,FL,USA,29.84475,-82.04752778\\n42S,Poplar,Poplar,MT,USA,48.11595861,-105.1821928\\n43A,Montgomery County,Star,NC,USA,35.38819528,-79.79281667\\n44B,Dover/Foxcroft,Dover-Foxcroft,ME,USA,45.18338806,-69.2328225\\n44N,Sky Acres,Millbrook,NY,USA,41.70742861,-73.73802889\\n45J,Rockingham-Hamlet,Rockingham,NC,USA,34.89107083,-79.75905806\\n45OH,North Bass Island,North Bass Island,OH,USA,41.71932528,-82.82196917\\n45R,Kountz - Hawthorne,Kountze/Silsbee,TX,USA,30.33633806,-94.25754361\\n46A,Blairsville,Blairsville,GA,USA,34.85508722,-83.996855\\n46D,Carrington Municipal,Carrington,ND,USA,47.45111111,-99.15111111\\n46N,Sky Park,Red Hook,NY,USA,41.98458333,-73.83596556\\n47A,Cherokee County,Canton,GA,USA,34.31058333,-84.42391667\\n47J,Cheraw Municipal,Cheraw,SC,USA,34.71258333,-79.95794444\\n47N,Central Jersey Regional,Manville,NJ,USA,40.52438417,-74.59839194\\n47V,Curtis Municipal,Curtis,NE,USA,40.63750778,-100.4712539\\n48A,Cochran,Cochran,GA,USA,32.39936111,-83.27591667\\n48D,Clare Municipal,Clare,MI,USA,43.83111111,-84.74133333\\n48I,Braxton County,Sutton,WV,USA,38.68704444,-80.65176083\\n48K,Ness City Municipal,Ness City,KS,USA,38.47110278,-99.90806667\\n48S,Harlem,Harlem,MT,USA,48.56666472,-108.7729339\\n48V,Tri-County,Erie,CO,USA,40.010225,-105.047975\\n49A,Gilmer County,Ellijay,GA,USA,34.62786417,-84.52492889\\n49T,Downtown Heliport,Dallas,TX,USA,32.77333333,-96.80027778\\n49X,Chemehuevi Valley,Chemehuevi Valley,CA,USA,34.52751083,-114.4310697\\n49Y,Fillmore County,Preston,MN,USA,43.67676,-92.17973444\\n4A2,Atmautluak,Atmautluak,AK,USA,60.86674556,-162.2731389\\n4A4,Cornelius-Moore,Cedartown,GA,USA,34.01869444,-85.14647222\\n4A5,Marshall-Searcy County,Marshall,AR,USA,35.89893667,-92.65588611\\n4A6,Scottsboro Municipal,Scottsboro,AL,USA,34.68897278,-86.0058125\\n4A7,Clayton County,Hampton,GA,USA,33.38911111,-84.33236111\\n4A9,Isbell,Fort Payne,AL,USA,34.4728925,-85.72221722\\n4B0,South Albany,South Bethlehem,NY,USA,42.56072611,-73.83395639\\n4B1,Duanesburg,Duanesburg,NY,USA,42.75840889,-74.13290472\\n4B6,Ticonderoga Muni,Ticonderoga,NY,USA,43.87700278,-73.41317639\\n4B7,Schroon Lake,Schroon Lake,NY,USA,43.86256083,-73.74262972\\n4B8,Robertson,Plainville,CT,USA,41.69037667,-72.8648225\\n4B9,Simsbury Tri-Town,Simsbury,CT,USA,41.91676389,-72.77731778\\n4C8,Albia Municipal,Albia,IA,USA,40.99445361,-92.76297194\\n4D0,Abrams Municipal,Grandledge,MI,USA,42.77420167,-84.73309806\\n4D9,Alma Municipal,Alma,NE,USA,40.11389972,-99.34565306\\n4F2,Panola County-Sharpe,Carthage,TX,USA,32.17608333,-94.29880556\\n4F4,Gilmer-Upshur County,Gilmer,TX,USA,32.699,-94.94886111\\n4G1,Greenville Muni,Greenville,PA,USA,41.44683167,-80.39126167\\n4G2,Hamburg Inc.,Hamburg,NY,USA,42.7008925,-78.91475694\\n4G5,Monroe County,Woodsfield,OH,USA,39.77904472,-81.10277222\\n4G6,Hornell Muni,Hornell,NY,USA,42.38214444,-77.6821125\\n4G7,Fairmont Muni,Fairmont,WV,USA,39.44816667,-80.16702778\\n4I0,Mingo County,Williamson,WV,USA,37.68760139,-82.26097306\\n4I3,Knox County,Mount Vernon,OH,USA,40.32872222,-82.52377778\\n4I7,Putnam County,Greencastle,IN,USA,39.63359556,-86.8138325\\n4I9,Morrow County,Mt. Gilead,OH,USA,40.52452778,-82.85005556\\n4J1,Brantley County,Nahunta,GA,USA,31.21272417,-81.90539083\\n4J2,Berrien County,Nashville,GA,USA,31.21255556,-83.22627778\\n4J5,Quitman-Brooks County,Quitman,GA,USA,30.80575139,-83.58654889\\n4J6,St Marys,St Marys,GA,USA,30.75468028,-81.55731917\\n4K0,Pedro Bay,Pedro Bay,AK,USA,59.78960972,-154.1238331\\n4K5,Ouzinkie,Ouzinkie,AK,USA,57.92287611,-152.5005111\\n4K6,Bloomfield Municipal,Bloomfield,IA,USA,40.73210556,-92.42826889\\n4KA,Tununak,Tununak,AK,USA,60.57559667,-165.2731272\\n4M1,Carroll County,Berryville,AR,USA,36.38340333,-93.61685667\\n4M3,Carlisle Municipal,Carlisle,AR,USA,34.80823,-91.71205083\\n4M4,Clinton Municipal,Clinton,AR,USA,35.59785528,-92.45182472\\n4M7,Russellville-Logan County,Russellville,KY,USA,36.79991667,-86.81016667\\n4M8,Clarendon Municipal,Clarendon,AR,USA,34.64870694,-91.39457111\\n4M9,Corning Municipal,Corning,AR,USA,36.40423139,-90.64792639\\n4N1,Greenwood Lake,West Milford,NJ,USA,41.12854806,-74.34584611\\n4O3,Blackwell-Tonkawa Municipal,Blackwell-Tonkawa,OK,USA,36.74511583,-97.34959972\\n4O4,McCurtain County Regional,Idabel,OK,USA,33.909325,-94.85835278\\n4O5,Cherokee Municipal,Cherokee,OK,USA,36.78336306,-98.35035083\\n4PH,Polacca,Polacca,AZ,USA,35.79167222,-110.4234653\\n4R1,I H Bass Jr Memorial,Lumberton,MS,USA,31.01546028,-89.48256556\\n4R3,Jackson Municipal,Jackson,AL,USA,31.47210861,-87.89472083\\n4R4,Fairhope Municipal,Fairhope,AL,USA,30.4621125,-87.87801972\\n4R5,Madeline Island,La Pointe,WI,USA,46.78865556,-90.75866944\\n4R7,Eunice,Eunice,LA,USA,30.46628389,-92.42379917\\n4R9,Dauphin Island,Dauphin Island,AL,USA,30.26048083,-88.12749972\\n4S1,Gold Beach Muni,Gold Beach,OR,USA,42.41344444,-124.4242742\\n4S2,Hood River,Hood River,OR,USA,45.67261833,-121.5364625\\n4S3,Joseph State,Joseph,OR,USA,45.35709583,-117.2532244\\n4S9,Portland-Mulino,Mulino (Portland),OR,USA,45.21632417,-122.5900839\\n4SD,Reno/Stead,Reno,NV,USA,39.66738111,-119.8754169\\n4T6,Mid-Way,Midlothian-Waxahachie,TX,USA,32.45609722,-96.91240972\\n4U3,Liberty County,Chester,MT,USA,48.51072222,-110.9908639\\n4U6,Circle Town County,Circle,MT,USA,47.41861972,-105.5619431\\n4V0,Rangely,Rangely,CO,USA,40.09469917,-108.7612172\\n4V1,Johnson,Walsenburg,CO,USA,37.69640056,-104.7838747\\n4V9,Antelope County,Neligh,NE,USA,42.11222889,-98.0386775\\n4W1,Elizabethtown Municipal,Elizabethtown,NC,USA,34.60183722,-78.57973306\\n4Z4,Holy Cross,Holy Cross,AK,USA,62.18829583,-159.7749503\\n4Z7,Hyder SPB,Hyder,AK,USA,55.90331972,-130.0067031\\n50I,Kentland Municipal,Kentland,IN,USA,40.75873222,-87.42821917\\n50J,Berkeley County,Moncks Corner,SC,USA,33.18605556,-80.03563889\\n50K,Pawnee City Municipal,Pawnee City,NE,USA,40.11611111,-96.19445278\\n50R,Lockhart Municipal,Lockhart,TX,USA,29.85033333,-97.67241667\\n51D,Edgeley Municipal,Edgeley,ND,USA,46.34858333,-98.73555556\\n51Z,Minto (New),Minto,AK,USA,65.14370889,-149.3699647\\n52A,Madison Municipal,Madison,GA,USA,33.61212528,-83.46044333\\n52E,Timberon,Timberon,NM,USA,32.63388889,-105.6863889\\n52J,Lee County,Bishopville,SC,USA,34.24459889,-80.23729333\\n53A,\\\"Dr. C.P. Savage, Sr.\\\",Montezuma,GA,USA,32.302,-84.00747222\\n53K,Osage City Municipal,Osage City,KS,USA,38.63334222,-95.80859806\\n54J,Defuniak Springs,Defuniak Springs,FL,USA,30.7313,-86.15160833\\n55D,Grayling Army Airfield,Grayling,MI,USA,44.68032028,-84.72886278\\n55J,Fernandina Beach Municipal,Fernandina Beach,FL,USA,30.61170083,-81.462345\\n55S,Packwood,Packwood,WA,USA,46.60400083,-121.6778664\\n56D,Wyandot County,Upper Sandusky,OH,USA,40.88336139,-83.3145325\\n56M,Warsaw Municipal,Warsaw,MO,USA,38.34688889,-93.345425\\n56S,Seaside Municipal,Seaside,OR,USA,46.01649694,-123.9054167\\n57B,Islesboro,Islesboro,ME,USA,44.30285556,-68.91058722\\n57C,East Troy Municipal,East Troy,WI,USA,42.79711111,-88.3725\\n59B,Newton,Jackman,ME,USA,45.63199111,-70.24728944\\n5A4,Okolona Mun.-Richard M. Stovall,Okolona,MS,USA,34.01580528,-88.72618944\\n5A6,Winona-Montgomery County,Winona,MS,USA,33.46540139,-89.72924806\\n5A8,Aleknagik,Aleknagik,AK,USA,59.28256167,-158.6176725\\n5A9,Roosevelt Memorial,Warm Springs,GA,USA,32.93346222,-84.68881639\\n5B2,Saratoga Cty,Saratoga Springs,NY,USA,43.05126111,-73.86119444\\n5B3,Danielson,Danielson,CT,USA,41.81974056,-71.90096306\\n5B7,Rensselaer Air Park,Troy,NY,USA,42.69091194,-73.57956\\n5CD,Chandalar Shelf,Chandalar Camp,AK,USA,68.06543944,-149.5797392\\n5D3,Owosso Community,Owosso,MI,USA,42.99297222,-84.1389125\\n5F1,Post-Garza County Municipal,Post,TX,USA,33.20370556,-101.340415\\n5F4,Homer Municipal,Homer,LA,USA,32.78850806,-93.00366083\\n5G0,Leroy,Le Roy,NY,USA,42.98136667,-77.93751389\\n5G7,Bluffton,Bluffton,OH,USA,40.88544444,-83.86863889\\n5G8,Pittsburgh Boquet Airpark,Jeanette,PA,USA,40.37645722,-79.60837583\\n5G9,Toledo Suburban,Lambertville,MI,USA,41.7358775,-83.65541056\\n5HO,Hope,Hope,AK,USA,60.90415028,-149.6238389\\n5I4,Sheridan,Sheridan,IN,USA,40.17792583,-86.21729889\\n5J0,John Day State,John Day,OR,USA,44.40416667,-118.9625\\n5J9,Twin City,Loris,SC,USA,34.08848361,-78.86462028\\n5K2,Tribune Municipal,Tribune,KS,USA,38.45418222,-101.7462828\\n5M0,Rountree,Hartselle,AL,USA,34.40823444,-86.93295056\\n5M1,De Witt Municipal,De Witt,AR,USA,34.2626,-91.30984194\\n5M4,Fordyce Municipal,Fordyce,AR,USA,33.84593722,-92.36542861\\n5M9,Marion-Crittenden County,Marion,KY,USA,37.33616222,-88.11113611\\n5N8,Casselton Regional,Casselton,ND,USA,46.85469528,-97.20870028\\n5ND6,Hillsboro Municipal,Hillsboro,ND,USA,47.35940778,-97.06041639\\n5NI,Nikolai,Nikolai,AK,USA,63.0174475,-154.3639608\\n5NK,Naknek,Naknek,AK,USA,58.73288056,-157.0199197\\n5NN,Nondalton,Nondalton,AK,USA,59.97904306,-154.8396944\\n5R3,Rusty Allen,Lago Vista,TX,USA,30.498585,-97.96947222\\n5R4,Foley Municipal,Foley,AL,USA,30.42769722,-87.70082\\n5R5,Wharton Municipal,Wharton,TX,USA,29.25427778,-96.15438889\\n5R8,De Quincy Industrial Airpark,De Quincy,LA,USA,30.44117222,-93.47349722\\n5S8,St. Michael,St. Michael,AK,USA,63.49005056,-162.1103692\\n5T5,Hillsboro Municipal,Hillsboro,TX,USA,32.08348611,-97.09722722\\n5T6,Dona Ana County At Santa Teresa,Santa Teresa,NM,USA,31.88098556,-106.7048131\\n5T9,Maverick County Meml Intl,Eagle Pass,TX,USA,28.85719361,-100.5122997\\n5TE,Tetlin,Tetlin,AK,USA,63.13382361,-142.5219339\\n5U3,Ennis - Big Sky,Ennis,MT,USA,45.27175833,-111.6486389\\n5U8,Geraldine,Geraldine,MT,USA,47.59664,-110.2660367\\n5V5,Shiprock Airstrip,Shiprock,NM,USA,36.6977775,-108.7011986\\n5V8,Kadoka Municipal,Kadoka,SD,USA,43.83332611,-101.4970881\\n5W8,Siler City Municipal,Siler City,NC,USA,35.7029175,-79.50529972\\n5Z1,Juneau Harbor,Juneau,AK,USA,58.29888889,-134.4077778\\n5Z5,Kantishna,Kantishna,AK,USA,63.54171472,-150.9939547\\n60F,Seymour Municipal,Seymour,TX,USA,33.64870417,-99.26063056\\n60J,Ocean Isle,Ocean Isle Beach,NC,USA,33.90850556,-78.43667222\\n61A,Camden Municipal,Camden,AL,USA,31.97987056,-87.33888056\\n61B,Boulder City Municipal,Boulder City,NV,USA,35.94748028,-114.8610967\\n61C,Fort Atkinson Municipal,Fort Atkinson,WI,USA,42.96320278,-88.81762806\\n61J,Portland Downtown Heliport,Portland,OR,USA,45.52527778,-122.6709289\\n61S,Cottage Grove State,Cottage Grove,OR,USA,43.79984528,-123.0289678\\n62D,Warren,Warren,OH,USA,41.26672278,-80.92897778\\n62H,Giddings-Lee County,Giddings,TX,USA,30.16927167,-96.98001083\\n62S,Christmas Valley,Christmas Valley,OR,USA,43.23653139,-120.6660967\\n63A,Lloyd R. Roundtree Seaplane Facility,Petersburg,AK,USA,56.81131972,-132.9600567\\n63C,Adams County Legion,Adams/Friendship,WI,USA,43.96117222,-89.78804889\\n63S,Colville Municipal,Colville,WA,USA,48.54156944,-117.8844247\\n65J,Wrens Memorial,Wrens,GA,USA,33.222645,-82.38373611\\n65S,Boundary County,Bonners Ferry,ID,USA,48.72632639,-116.2954761\\n66D,Sturgis Municipal,Sturgis,SD,USA,44.41761111,-103.3747778\\n67L,Mesquite,Mesquite,NV,USA,36.83497556,-114.0552453\\n68A,Wrangell SPB,Wrangell,AK,USA,56.466325,-132.3800181\\n68S,Davenport,Davenport,WA,USA,47.65404528,-118.1677519\\n6A1,Butler Municipal,Butler,GA,USA,32.56736694,-84.25074833\\n6A2,Griffin-Spaulding County,Griffin,GA,USA,33.22697222,-84.27494444\\n6A3,Andrews-Murphy,Andrews,NC,USA,35.19453167,-83.86490194\\n6A4,Johnson County,Mountain City,TN,USA,36.41789833,-81.82511528\\n6A8,Allakaket,Allakaket,AK,USA,66.55194444,-152.6222222\\n6B0,Middlebury State,Middlebury,VT,USA,43.98478278,-73.09594889\\n6B4,Frankfort-Highland,Utica/Frankfort,NY,USA,43.02090306,-75.17043861\\n6B6,Minute Man Airfield,Stow,MA,USA,42.46045361,-71.51791444\\n6B8,Caledonia County State,Lyndonville,VT,USA,44.56911417,-72.01797889\\n6B9,Skaneateles Aero Drome,Skaneateles,NY,USA,42.91395583,-76.44076889\\n6D6,Greenville Municipal,Greenville,MI,USA,43.14228139,-85.25380722\\n6D8,Barnes County Municipal,Valley City,ND,USA,46.94100778,-98.01762611\\n6F1,Talihina Municipal,Talihina,OK,USA,34.70777139,-95.07378583\\n6G1,Titusville,Titusville,PA,USA,41.60880861,-79.74133111\\n6G5,Barnesville - Bradfield,Barnesville,OH,USA,40.00243139,-81.19183\\n6I2,Lebanon-Springfield,Springfield,KY,USA,37.63355556,-85.24216667\\n6J0,Corporate,Pelion,SC,USA,33.79463889,-81.24586111\\n6J2,St George,St George,SC,USA,33.1955,-80.50847222\\n6J4,Saluda County,Saluda,SC,USA,33.92680111,-81.79455306\\n6K3,Creighton Municipal,Creighton,NE,USA,42.47083694,-97.88367778\\n6K4,Fairview Municipal,Fairview,OK,USA,36.29014667,-98.47582833\\n6K8,Tok Junction,Tok,AK,USA,63.32881806,-142.9536194\\n6L4,Logan County,Logan,WV,USA,37.85567778,-81.91589722\\n6M2,Horseshoe Bend,Horseshoe Bend,AR,USA,36.21673389,-91.75014556\\n6M6,Lewis County Regional,Monticello,MO,USA,40.12916667,-91.67833333\\n6M7,Lee County-Marianna,Marianna,AR,USA,34.78027778,-90.81055556\\n6M8,Marked Tree Municipal,Marked Tree,AR,USA,35.53341472,-90.40149028\\n6N5,E 34th St Heliport,New York,NY,USA,40.74260167,-73.97208306\\n6N7,New York Skyports Inc. SPB,New York,NY,USA,40.73399083,-73.97291639\\n6N8,Thomas County,Thedford,NE,USA,41.96217028,-100.5690139\\n6R3,Cleveland Municipal,Cleveland,TX,USA,30.35643,-95.00801472\\n6R7,Old Harbor (New),Old Harbor,AK,USA,57.21810306,-153.2697494\\n6R9,Llano Municipal,Llano,TX,USA,30.78450278,-98.66025083\\n6S0,Big Timber,Big Timber,MT,USA,45.80638889,-109.9811111\\n6S2,Florence Muni,Florence,OR,USA,43.97901,-124.1095631\\n6S3,Columbus,Columbus,MT,USA,45.6291075,-109.2507167\\n6S5,Ravalli County,Hamilton,MT,USA,46.25149444,-114.1255403\\n6S8,Laurel Municipal,Laurel,MT,USA,45.70308833,-108.7610886\\n6V0,Edgemont Municipal,Edgemont,SD,USA,43.29525056,-103.8435325\\n6V3,Tazewell County,Richlands,VA,USA,37.06374667,-81.79826944\\n6V4,Wall Municipal,Wall,SD,USA,43.99498861,-102.2504367\\n6V6,Hopkins,Nucla,CO,USA,38.23879833,-108.5632597\\n70J,Cairo-Grady County,Cairo,GA,USA,30.88797667,-84.15473528\\n71J,Blackwell,Ozark,AL,USA,31.43113889,-85.61922222\\n72S,Rosalia Municipal,Rosalia,WA,USA,47.23683778,-117.4210244\\n73C,Lancaster,Lancaster,WI,USA,42.78054722,-90.68096028\\n73J,Beaufort County,Beaufort,SC,USA,32.4121375,-80.63455083\\n74D,Marshall Cty,Moundsville,WV,USA,39.88083333,-80.73577778\\n74S,Anacortes,Anacortes,WA,USA,48.4989925,-122.6623956\\n74V,Roosevelt Municipal,Roosevelt,UT,USA,40.27829167,-110.0512619\\n75J,Turner County,Ashburn,GA,USA,31.68545833,-83.63211194\\n76G,Marine City,Marine City,MI,USA,42.72086583,-82.59574694\\n77G,Marlette Township,Marlette,MI,USA,43.31183,-83.09091444\\n77S,Hobby,Creswell,OR,USA,43.93206889,-123.0067483\\n78D,Caro Municipal,Caro,MI,USA,43.45908333,-83.44522222\\n79D,Philippi-Barbour County Regional,Philippi,WV,USA,39.16620778,-80.06258056\\n79J,Andalusia,Andalusia,AL,USA,31.30875278,-86.39376083\\n79S,Fort Benton,Fort Benton,MT,USA,47.84583333,-110.6336111\\n7A0,Greensboro Municipal,Greensboro,AL,USA,32.68147222,-87.66208333\\n7A2,Demopolis Municipal,Demopolis,AL,USA,32.46381944,-87.95406389\\n7A3,Lanett Municipal,Lanett,AL,USA,32.81204611,-85.22958111\\n7A5,Roanoke Municipal,Roanoke,AL,USA,33.12928722,-85.366615\\n7A8,Avery County/Morrison,Spruce Pine,NC,USA,35.94457028,-81.99566944\\n7B2,La Fleur,Northampton,MA,USA,42.32816806,-72.61151667\\n7D2,Troy-Oakland,Troy,MI,USA,42.54294389,-83.17790861\\n7F3,Caddo Mills Municipal,Caddo Mills,TX,USA,33.03622222,-96.24313889\\n7F6,Clarksville-Red River County,Clarksville,TX,USA,33.59316472,-95.06355528\\n7F7,Clifton Municipal,Clifton,TX,USA,31.81682333,-97.56696361\\n7F9,Comanche County-City,Comanche,TX,USA,31.91681306,-98.600325\\n7G0,Ledgedale Airpark,Brockport,NY,USA,43.18118194,-77.91362333\\n7G8,Geauga County,Middlefield,OH,USA,41.44960972,-81.06292972\\n7I7,Bellefontaine Municipal,Bellefontaine,OH,USA,40.41208333,-83.73686111\\n7K0,Pike County-Hatcher,Pikeville,KY,USA,37.56173889,-82.56660694\\n7K2,Skagway SPB,Skagway,AK,USA,59.44689528,-135.3226633\\n7K4,Ohio County,Hartford,KY,USA,37.45832417,-86.84995194\\n7K8,Martin,South Sioux City,NE,USA,42.45416111,-96.47253111\\n7KA,Tatitlek,Tatitlek,AK,USA,60.86890528,-146.6864653\\n7M1,McGehee Municipal,McGehee,AR,USA,33.62022111,-91.36484056\\n7M3,Bearce,Mount Ida,AR,USA,34.52926056,-93.52713472\\n7M4,Osceola Municipal,Osceola,AR,USA,35.69114639,-90.01012028\\n7M5,Ozark-Franklin County,Ozark,AR,USA,35.51069583,-93.8393075\\n7M7,Piggott Municipal,Piggott,AR,USA,36.37820556,-90.16624167\\n7N0,New Orleans Downtown Heliport,New Orleans,LA,USA,29.95194444,-90.08166667\\n7N1,Corning-Painted Post,Corning,NY,USA,42.17590722,-77.11219278\\n7N7,Spitfire Aerodrome,Pedrictown,NJ,USA,39.73556333,-75.39772111\\n7S0,Ronan,Ronan,MT,USA,47.57076861,-114.0967783\\n7S1,Twin Bridges,Twin Bridges,MT,USA,45.53325917,-112.3091656\\n7S5,Independence State,Independence,OR,USA,44.86676444,-123.1982475\\n7S6,White Sulphur Springs,White Sulphur Springs,MT,USA,46.50410722,-110.9132667\\n7S7,Valier,Valier,MT,USA,48.29997583,-112.2508711\\n7V1,Buena Vista Muni,Buena Vista,CO,USA,38.81416194,-106.1206939\\n7V7,Red Cloud Municipal,Red Cloud,NE,USA,40.08473556,-98.54061694\\n7W6,Hyde County,Englehard,NC,USA,35.5623925,-75.95518417\\n80F,Antlers Municipal,Antlers,OK,USA,34.19260083,-95.64985889\\n81B,Oxford County Regional,Norway,ME,USA,44.15742611,-70.48129583\\n82C,Mauston-New Lisbon Union,New Lisbon,WI,USA,43.83872167,-90.13768389\\n82V,Pine Bluffs Municipal,Pine Bluffs,WY,USA,41.15331528,-104.1302292\\n83D,Mackinac County,St Ignace,MI,USA,45.89029056,-84.73755083\\n84D,Cheyenne Eagle Butte,Eagle Butte,SD,USA,44.984375,-101.2510417\\n84K,Meyers Chuck SPB,Meyers Chuck,AK,USA,55.73963611,-132.2550183\\n84R,Smithville Municipal,Smithville,TX,USA,30.03048028,-97.16687194\\n85V,Ganado,Ganado,AZ,USA,35.70140278,-109.5103814\\n86F,Carnegie Municipal,Carnegie,OK,USA,35.12061417,-98.5806175\\n87I,Yazoo County,Yazoo City,MS,USA,32.883215,-90.4636475\\n87Y,Blackhawk Airfield,Madison,WI,USA,43.10491444,-89.18553833\\n88C,Palmyra Municipal,Palmyra,WI,USA,42.88355556,-88.59743056\\n88J,Allendale County,Allendale,SC,USA,32.99512944,-81.27024583\\n88M,Eureka,Eureka,MT,USA,48.96885444,-115.0704464\\n89D,Kelleys Island Land,Kelleys Island,OH,USA,41.60282583,-82.684625\\n8A0,Albertville Municipal,Albertville,AL,USA,34.22910972,-86.25575806\\n8A1,Guntersville Municipal,Guntersville,AL,USA,34.39944167,-86.27016111\\n8A3,Livingston Municipal,Livingston,TN,USA,36.41217389,-85.31154861\\n8B0,Rangeley Municipal,Rangeley,ME,USA,44.991895,-70.66462472\\n8D1,New Holstein Municipal,New Holstein,WI,USA,43.94424111,-88.1134775\\n8D3,Sisseton Municipal,Sisseton,SD,USA,45.67079278,-96.99619167\\n8D4,Sparta,Sparta,MI,USA,43.12860833,-85.67689778\\n8D7,Clark County,Clark,SD,USA,44.89570278,-97.71191361\\n8D9,Howard Municipal,Howard,SD,USA,44.02914056,-97.53784778\\n8F7,Decatur Municipal,Decatur,TX,USA,33.25463889,-97.58055556\\n8G2,Lawrence,Corry,PA,USA,41.90755611,-79.64105083\\n8G6,Harrison County,Cadiz,OH,USA,40.23820667,-81.01256917\\n8G7,Zelienople,Zelienople,PA,USA,40.80161944,-80.16072889\\n8K8,Cimarron Municipal,Cimarron,KS,USA,37.83057667,-100.3504222\\n8K9,Murphys Pullout SPB,Ketchikan,AK,USA,55.38965028,-131.7380742\\n8M1,Booneville-Baldwyn,Booneville,MS,USA,34.58981806,-88.64699861\\n8S1,Polson,Polson,MT,USA,47.69543861,-114.1851178\\n8S2,Cashmere-Dryden,Cashmere,WA,USA,47.51484611,-120.4848025\\n8S5,East Cooper,Mt Pleasant,SC,USA,32.89783333,-79.78286111\\n8U6,Terry,Terry,MT,USA,46.77917333,-105.3047083\\n8U8,Townsend,Townsend,MT,USA,46.33111111,-111.4813889\\n8V2,Stuart-Atkinson Municipal,Atkinson,NE,USA,42.56250167,-99.03787611\\n8Y2,Buffalo Municipal,Buffalo,MN,USA,45.15904694,-93.84330361\\n91C,Sauk - Prairie,Prairie Du Sac,WI,USA,43.2969325,-89.75595639\\n91F,Arrowhead,Canadian,OK,USA,35.15426444,-95.62026389\\n93B,Stonington,Stonington,ME,USA,44.17508056,-68.67863722\\n93C,Richland,Richland Center,WI,USA,43.28333333,-90.29827778\\n93F,Mignon Laird Municipal,Cheyenne,OK,USA,35.60393694,-99.70343889\\n93Y,David City Municipal,David City,NE,USA,41.23334583,-97.11698111\\n94K,Cassville Municipal,Cassville,MO,USA,36.69741667,-93.90052778\\n95F,Cleveland Municipal,Cleveland,OK,USA,36.28340306,-96.46418833\\n96D,Walhalla Municipal,Walhalla,ND,USA,48.94057222,-97.902775\\n96Z,North Whale SPB,North Whale Pass,AK,USA,56.11631056,-133.1217153\\n97M,Ekalaka,Ekalaka,MT,USA,45.87791444,-104.5375072\\n98D,Onida Municipal,Onida,SD,USA,44.70414917,-100.1087353\\n99N,Bamburg County,Bamburg,SC,USA,33.30515528,-81.10898917\\n99Y,Greeley Municipal,Greeley,NE,USA,41.55834528,-98.54618528\\n9A1,Covington Municipal,Covington,GA,USA,33.6324825,-83.84955806\\n9A3,Chuathbaluk,Chuathbaluk,AK,USA,61.58317306,-159.2359667\\n9A4,Lawrence County,Courtland,AL,USA,34.65938889,-87.34883333\\n9A5,Barwick-LaFayette,LaFayette,GA,USA,34.68896917,-85.29023333\\n9A6,Chester Municipal,Chester,SC,USA,34.78933333,-81.19577778\\n9A8,Ugashik,Ugashik,AK,USA,57.5278675,-157.3993056\\n9C8,Evart Municipal,Evart,MI,USA,43.8958525,-85.27920861\\n9D0,Highmore Municipal,Highmore,SD,USA,44.54165056,-99.44622306\\n9D1,Gregory Municipal,Gregory,SD,USA,43.22174722,-99.4033\\n9D2,Harding County,Buffalo,SD,USA,45.58055222,-103.5296356\\n9D7,Cando Municipal,Cando,ND,USA,48.4841675,-99.23680389\\n9D9,Hastings Municipal,Hastings,MI,USA,42.66361778,-85.34625944\\n9G0,Buffalo Airfield,Buffalo,NY,USA,42.86200306,-78.71658528\\n9G1,West Penn,Tarentum,PA,USA,40.60423333,-79.82060611\\n9G3,Akron,Akron,NY,USA,43.02108667,-78.48296778\\n9G5,Royalton,Gasport,NY,USA,43.18200222,-78.55780528\\n9G8,Ebensburg,Ebensburg,PA,USA,40.46121083,-78.77524389\\n9I0,Havana Regional,Havana,IL,USA,40.221155,-90.02289361\\n9I3,West Liberty,West Liberty,KY,USA,37.91453139,-83.25212111\\n9K2,Kokhanok,Kokhanok,AK,USA,59.43264556,-154.8027058\\n9K4,Skyhaven,Warrensburg,MO,USA,38.7842425,-93.80285417\\n9K7,Ellsworth Municipal,Ellsworth,KS,USA,38.74750889,-98.23061222\\n9K8,Kingman Municipal,Kingman,KS,USA,37.66660278,-98.12264722\\n9M4,Ackerman-Choctaw County,Ackerman,MS,USA,33.3034575,-89.22840028\\n9M6,Kelly,Oak Grove,LA,USA,32.84921361,-91.40390611\\n9M8,Sheridan-Grant County Regional,Sheridan,AR,USA,34.32842917,-92.35098583\\n9S2,Scobey,Scobey,MT,USA,48.80772722,-105.43947\\n9S4,Mineral County,Superior,MT,USA,47.16825944,-114.8537411\\n9S5,Three Forks,Three Forks,MT,USA,45.87852778,-111.5691389\\n9S7,Winifred,Winifred,MT,USA,47.55164778,-109.3776792\\n9S9,Lexington,Lexington,OR,USA,45.45263139,-119.6886361\\n9U0,Turner,Turner,MT,USA,48.85417361,-108.4090214\\n9U3,Austin,Austin,NV,USA,39.46798056,-117.1953703\\n9U4,Dixon,Dixon,WY,USA,41.03829806,-107.4972869\\n9V5,Modisett,Rushville,NE,USA,42.73748639,-102.4448947\\n9V6,Martin Municipal,Martin,SD,USA,43.16564083,-101.7126953\\n9V9,Chamberlain Municipal,Chamberlain,SD,USA,43.76612222,-99.32134\\n9W7,Currituck County,Currituck,NC,USA,36.39893194,-76.01631111\\nA04,Centre Municipal,Centre,AL,USA,34.15987361,-85.63512944\\nA14,Portage Creek,Portage Creek,AK,USA,58.906485,-157.7141078\\nA29,Sitka SPB,Sitka,AK,USA,57.05213778,-135.3462086\\nA30,Scott Valley,Fort Jones,CA,USA,41.55819444,-122.8553103\\nA32,Butte Valley,Dorris,CA,USA,41.88709222,-121.9755614\\nA61,Tuntutuliak,Tuntutuliak,AK,USA,60.33534556,-162.6670094\\nA63,Twin Hills,Twin Hills,AK,USA,59.07562167,-160.2730436\\nA79,Chignik Lake,Chignik Lake,AK,USA,56.25504722,-158.7753614\\nA85,Kwigillingok,Kwigillingok,AK,USA,59.87644778,-163.1675583\\nAAF,Apalachicola Municipal,Apalachicola,FL,USA,29.72754583,-85.02744778\\nAAO,Colonel James Jabara,Wichita,KS,USA,37.74755556,-97.22113889\\nAAS,Taylor County,Cambellsville,KY,USA,37.35827778,-85.30941667\\nAAT,Alturas Municipal,Alturas,CA,USA,41.483,-120.5653611\\nABE,Lehigh Valley International,Allentown,PA,USA,40.65236278,-75.44040167\\nABI,Abilene Regional,Abilene,TX,USA,32.41132,-99.68189722\\nABO,Antonio (Nery) Juarbe Pol,Arecibo,PR,USA,18.45111111,-66.67555556\\nABQ,Albuquerque International,Albuquerque,NM,USA,35.04022222,-106.6091944\\nABR,Aberdeen Regional,Aberdeen,SD,USA,45.44905556,-98.42183333\\nABY,Southwest Georgia Regional,Albany,GA,USA,31.535515,-84.19447333\\nACB,Antrim County,Bellaire,MI,USA,44.98857611,-85.198355\\nACJ,Souther,Americus,GA,USA,32.11079917,-84.18884806\\nACK,Nantucket Memorial,Nantucket,MA,USA,41.25305194,-70.06018139\\nACQ,Waseca Municipal,Waseca,MN,USA,44.07346389,-93.55294361\\nACT,Waco Regional,Waco,TX,USA,31.61128833,-97.23051917\\nACV,Arcata,Arcata/Eureka,CA,USA,40.97811528,-124.1086189\\nACY,Atlantic City International,Atlantic City,NJ,USA,39.45758333,-74.57716667\\nACZ,Henderson,Wallace,NC,USA,34.71789028,-78.00362444\\nADC,Wadena Municipal,Wadena,MN,USA,46.45026972,-95.21095472\\nADG,Lenawee County,Adrian,MI,USA,41.86943667,-84.07480528\\nADH,Ada Municipal,Ada,OK,USA,34.80434056,-96.6712775\\nADK,Adak,Adak,AK,USA,51.87796389,-176.6460306\\nADM,Ardmore Municipal,Ardmore,OK,USA,34.30320667,-97.01952167\\nADQ,Kodiak,Kodiak,AK,USA,57.74996778,-152.4938553\\nADS,Addison,Dallas/Addison,TX,USA,32.96855944,-96.83644778\\nADT,Atwood-Rawlins County City-County,Atwood,KS,USA,39.84013889,-101.0420278\\nADU,Audubon Municipal,Audubon,IA,USA,41.70137556,-94.92054167\\nAEG,Double Eagle II,Albuquerque,NM,USA,35.14515278,-106.7951617\\nAEL,Albert Lea Municipal,Albert Lea,MN,USA,43.68151278,-93.36723778\\nAEX,Alexandria International,Alexandria,LA,USA,31.32737167,-92.54855611\\nAFE,Kake,Kake,AK,USA,56.96048139,-133.9082694\\nAFJ,Washington County,Washington,PA,USA,40.13648833,-80.29020083\\nAFK,Nebraska City Municipal,Nebraska City,NE,USA,40.60688889,-95.86569444\\nAFM,Ambler,Ambler,AK,USA,67.10610472,-157.8536203\\nAFN,Jaffrey Municipal Silver Ranch,Jaffrey,NH,USA,42.80513417,-72.00302194\\nAFO,Afton Municipal,Afton,WY,USA,42.71124583,-110.9421639\\nAFW,Fort Worth Alliance,Fort Worth,TX,USA,32.98763889,-97.31880556\\nAGC,Allegheny Cty,Pittsburgh,PA,USA,40.35440139,-79.93016889\\nAGN,Angoon SPB,Angoon,AK,USA,57.50355528,-134.5850939\\nAGO,Magnolia Municipal,Magnolia,AR,USA,33.22802111,-93.21696861\\nAGS,Bush,Augusta,GA,USA,33.369955,-81.96449611\\nAGZ,Wagner Municipal,Wagner,SD,USA,43.06332694,-98.29618972\\nAHH,Amery Municipal,Amery,WI,USA,45.28114833,-92.37539222\\nAHN,Athens Municipal,Athens,GA,USA,33.94859528,-83.32634694\\nAHP,Port Alexander SPB,Port Alexander,AK,USA,56.24684222,-134.6481539\\nAHQ,Wahoo Municipal,Wahoo,NE,USA,41.24133333,-96.59402778\\nAIA,Alliance Municipal,Alliance,NE,USA,42.05325,-102.8037222\\nAID,Anderson Municipal,Anderson,IN,USA,40.10862139,-85.61299472\\nAIG,Langlade County,Antigo,WI,USA,45.15419444,-89.11072222\\nAIK,Aiken Municipal,Aiken,SC,USA,33.64955556,-81.68447222\\nAIO,Atlantic Municipal,Atlantic,IA,USA,41.40726722,-95.04690639\\nAIT,Aitkin Municipal,Aitkin,MN,USA,46.5484225,-93.6768\\nAIV,George Downer,Aliceville,AL,USA,33.10706889,-88.19725167\\nAIY,Atlantic City Municipal,Atlantic City,NJ,USA,39.36002778,-74.45608333\\nAIZ,Lee C Fine Memorial,Kaiser/Lake Ozark,MO,USA,38.096035,-92.5494875\\nAJC,Chignik (Anchorage Bay),Chignik,AK,USA,56.3114625,-158.3732369\\nAJG,Mt Carmel Municipal,Mt Carmel,IL,USA,38.60654722,-87.72669417\\nAJO,Corona Municipal,Corona,CA,USA,33.89765389,-117.60244\\nAJR,Habersham County,Cornelia,GA,USA,34.50081944,-83.55487\\nAK5,Perryville,Perryville,AK,USA,55.90806056,-159.1585781\\nAKA,Atka,Atka,AK,USA,52.22034833,-174.2063503\\nAKH,Gastonia Municipal,Gastonia,NC,USA,35.20265944,-81.1498675\\nAKI,Akiak,Akiak,AK,USA,60.90481194,-161.2270189\\nAKK,Akhiok,Akhiok,AK,USA,56.93869083,-154.1825556\\nAKN,King Salmon,King Salmon,AK,USA,58.67680167,-156.6492175\\nAKO,Akron-Washington Co,Akron,CO,USA,40.17563333,-103.2220278\\nAKP,Anaktuvuk Pass,Anaktuvuk Pass,AK,USA,68.1343225,-151.74168\\nAKR,Akron Fulton Intl.,Akron,OH,USA,41.0375,-81.46693944\\nAKW,Klawock,Klawock,AK,USA,55.57923333,-133.0759972\\nAL08,Vaiden,Marion,AL,USA,32.51235611,-87.38555472\\nALB,Albany Cty,Albany,NY,USA,42.74811944,-73.80297861\\nALI,Alice International,Alice,TX,USA,27.74088889,-98.02694444\\nALM,Alamogordo-White Sands Regional,Alamogordo,NM,USA,32.83994444,-105.9905833\\nALN,St. Louis Regional,Alton/St. Louis,IL,USA,38.89029083,-90.04604306\\nALO,Waterloo Municipal,Waterloo,IA,USA,42.55708139,-92.40034361\\nALS,San Luis Valley Regional/Bergman,Alamosa,CO,USA,37.43491667,-105.8665556\\nALW,Walla Walla Regional,Walla Walla,WA,USA,46.09456167,-118.2880367\\nALX,Thomas C Russell,Alexander City,AL,USA,32.91475167,-85.96295611\\nAMA,Amarillo International,Amarillo,TX,USA,35.2193725,-101.7059272\\nAMG,Bacon County,Alma,GA,USA,31.53605556,-82.50655556\\nAMN,Gratiot Community,Alma,MI,USA,43.3221425,-84.68794917\\nAMT,Alexander Salamon,West Union,OH,USA,38.85148778,-83.56627778\\nAMW,Ames Municipal,Ames,IA,USA,41.99206972,-93.62180139\\nANB,Anniston Metropolitan,Anniston,AL,USA,33.58816667,-85.85811111\\nANC,Ted Stevens Anchorage International,Anchorage,AK,USA,61.17432028,-149.9961856\\nAND,Anderson County,Anderson,SC,USA,34.49494444,-82.70902778\\nANE,Anoka County,Minneapolis,MN,USA,45.145,-93.21138889\\nANI,Aniak,Aniak,AK,USA,61.58159694,-159.5430428\\nANQ,Steuben County-Tri State,Angola,IN,USA,41.63969833,-85.08349333\\nANV,Anvik,Anvik,AK,USA,62.64858333,-160.1898889\\nANW,Ainsworth Municipal,Ainsworth,NE,USA,42.57922222,-99.99297222\\nANY,Anthony Municipal,Anthony,KS,USA,37.15852194,-98.07964667\\nAOC,Arco-Butte County,Arco,ID,USA,43.60343056,-113.3340972\\nAOH,Allen County,Lima,OH,USA,40.70694444,-84.02666667\\nAOO,Altoona-Blair Cty,Altoona,PA,USA,40.29637222,-78.32002306\\nAPA,Centennial,Denver,CO,USA,39.57012833,-104.8492942\\nAPC,Napa County,Napa,CA,USA,38.21319444,-122.2806944\\nAPF,Naples Municipal,Naples,FL,USA,26.15247222,-81.77544444\\nAPN,Alpena County Regional,Alpena,MI,USA,45.0780675,-83.56028583\\nAPT,Marion County-Brown,Jasper,TN,USA,35.06067778,-85.58531667\\nAPV,Apple Valley,Apple Valley,CA,USA,34.57528944,-117.1861792\\nAQC,Klawock SPB,Klawock,AK,USA,55.5546575,-133.1016928\\nAQH,Kwinhagak,Quinhagak,AK,USA,59.75700722,-161.8794789\\nAQT,Nuiqsut,Nuiqsut,AK,USA,70.20995278,-151.0055611\\nAQW,Harriman And West,North Adams,MA,USA,42.69591417,-73.17038306\\nAQY,Girdwood,Girdwood,AK,USA,60.96609583,-149.1257892\\nARA,Acadiana Regional,New Iberia,LA,USA,30.03775833,-91.88389611\\nARB,Ann Arbor Municipal,Ann Arbor,MI,USA,42.22298361,-83.74560722\\nARC,Arctic Village,Arctic Village,AK,USA,68.11608083,-145.5761114\\nARG,Walnut Ridge Regional,Walnut Ridge,AR,USA,36.12534667,-90.92461944\\nARR,Aurora Municipal,Chicago/Aurora,IL,USA,41.77192944,-88.47565917\\nART,Watertown Intl,Watertown,NY,USA,43.99192222,-76.02173861\\nARV,Lakeland,Minocqua-Woodruff,WI,USA,45.92792556,-89.73094278\\nASD,Slidell,Slidell,LA,USA,30.345055,-89.82078833\\nASE,Aspen-Pitkin Co/Sardy,Aspen,CO,USA,39.22316,-106.868845\\nASG,Springdale Municipal,Springdale,AR,USA,36.17641056,-94.11925833\\nASH,Boire,Nashua,NH,USA,42.78176306,-71.51477944\\nASJ,Tri-County,Ahoskie,NC,USA,36.29752583,-77.17085556\\nASL,Marshall - Harrison County,Marshall,TX,USA,32.5205,-94.30777778\\nASN,Talladega Municipal,Talladega,AL,USA,33.56991111,-86.05085833\\nAST,Astoria Regional,Astoria,OR,USA,46.15797222,-123.8786944\\nASW,Warsaw Municipal,Warsaw,IN,USA,41.2747,-85.84005556\\nASX,John F Kennedy Memorial,Ashland,WI,USA,46.54852806,-90.91896639\\nATA,Hall-Miller Municipal,Atlanta,TX,USA,33.101805,-94.19532694\\nATK,Atqasuk,Atqasuk,AK,USA,70.46727611,-157.4357361\\nATL,William B Hartsfield-Atlanta Intl,Atlanta,GA,USA,33.64044444,-84.42694444\\nATS,Artesia Municipal,Artesia,NM,USA,32.85252806,-104.4676864\\nATW,Outagamie County Regional,Appleton,WI,USA,44.25740806,-88.51947556\\nATY,Watertown Municipal,Watertown,SD,USA,44.91398056,-97.15471944\\nAUG,Augusta State,Augusta,ME,USA,44.32064972,-69.79731806\\nAUH,Aurora Municipal,Aurora,NE,USA,40.89413889,-97.99455556\\nAUK,Alakanuk,Alakanuk,AK,USA,62.68004417,-164.6599253\\nAUM,Austin Municipal,Austin,MN,USA,43.66499083,-92.933385\\nAUN,Auburn Municipal,Auburn,CA,USA,38.95476944,-121.0820806\\nAUO,Auburn-Opelik,Auburn,AL,USA,32.61635417,-85.43355944\\nAUS,Austin-Bergstrom International,Austin,TX,USA,30.19453278,-97.66987194\\nAUW,Wausau Municipal,Wausau,WI,USA,44.92847222,-89.62661111\\nAVC,Mecklenburg-Brunswick Regional,South Hill,VA,USA,36.68827778,-78.05447222\\nAVK,Alva Regional,Alva,OK,USA,36.77317,-98.66994611\\nAVL,Asheville Regional,Asheville,NC,USA,35.43619444,-82.54180556\\nAVO,Avon Park Municipal,Avon Park,FL,USA,27.591145,-81.52785333\\nAVP,Wilkes-Barre/Scranton Intl,Wilkes-Barre/Scranton,PA,USA,41.33814944,-75.7242675\\nAVQ,Marana Northwest Regional,Marana,AZ,USA,32.40939028,-111.2185086\\nAVX,Catalina,Avalon,CA,USA,33.40494444,-118.4158611\\nAWG,Washington Municipal,Washington,IA,USA,41.27610083,-91.67344389\\nAWI,Wainwright,Wainwright,AK,USA,70.638,-159.99475\\nAWM,West Memphis Municipal,West Memphis,AR,USA,35.13505861,-90.23444639\\nAWO,Arlington Municipal,Arlington,WA,USA,48.16074833,-122.1590208\\nAXA,Algona Municipal,Algona,IA,USA,43.07791056,-94.27199278\\nAXN,Chandler,Alexandria,MN,USA,45.86629833,-95.39466806\\nAXS,Altus Municipal,Altus,OK,USA,34.69878194,-99.3381\\nAXV,Neil Armstrong,Wapakoneta,OH,USA,40.49338889,-84.29894444\\nAXX,Angel Fire,Angel Fire,NM,USA,36.42240972,-105.2892967\\nAYS,Waycross-Ware County,Waycross,GA,USA,31.24905556,-82.39530556\\nAZC,Colorado City Municipal,Colorado City,AZ,USA,36.95994444,-113.0138889\\nAZE,Hazelhurst,Hazelhurst,GA,USA,31.88465639,-82.64738778\\nAZO,Kalamazoo County,Kalamazoo,MI,USA,42.234875,-85.5520575\\nB01,Granville,Granville,NY,USA,43.42507111,-73.26205306\\nB08,Silver Springs,Silver Springs,NV,USA,39.40324917,-119.2518292\\nB16,Whitford,Weedsport,NY,USA,43.08027611,-76.53837556\\nB19,Biddeford Municipal,Biddeford,ME,USA,43.46411111,-70.47238889\\nB21,Sugarloaf Regional,Carrabasset,ME,USA,45.08616639,-70.21617778\\nBAF,Barnes Municipal,Westfield,MA,USA,42.15773111,-72.71562028\\nBAK,Columbus Municipal,Columbus,IN,USA,39.26191861,-85.89634556\\nBAM,Battle Mountain,Battle Mountain,NV,USA,40.59904583,-116.8743358\\nBAX,Huron County Memorial,Bad Axe,MI,USA,43.78091667,-82.98566667\\nBAZ,New Braunfels Municipal,New Braunfels,TX,USA,29.7045,-98.04222222\\nBBB,Benson Municipal,Benson,MN,USA,45.3319325,-95.650565\\nBBD,Curtis,Brady,TX,USA,31.17816667,-99.32463889\\nBBP,Marlboro County,Bennettsville,SC,USA,34.62170861,-79.73435944\\nBBW,Broken Bow Municipal,Broken Bow,NE,USA,41.43645056,-99.64216861\\nBCB,Virginia Tech,Blacksburg,VA,USA,37.20782361,-80.40832778\\nBCE,Bryce Canyon,Bryce Canyon,UT,USA,37.70637111,-112.1454725\\nBCK,Black River Falls Area,Black River Falls,WI,USA,44.25073861,-90.85528028\\nBCT,Boca Raton,Boca Raton,FL,USA,26.37848667,-80.10769667\\nBCV,Birchwood,Birchwood,AK,USA,61.41612444,-149.50888\\nBDE,Baudette International,Baudette,MN,USA,48.72741667,-94.61030556\\nBDG,Blanding Muni,Blanding,UT,USA,37.58303472,-109.4832889\\nBDL,Bradley International,Windsor Locks,CT,USA,41.93887417,-72.68322833\\nBDQ,Morrilton Municipal,Morrilton,AR,USA,35.13619528,-92.71349722\\nBDR,Igor I Sikorsky Memorial,Bridgeport,CT,USA,41.16348417,-73.12617861\\nBDX,Broadus,Broadus,MT,USA,45.433325,-105.4172133\\nBED,Laurence G Hanscom,Bedford,MA,USA,42.46995306,-71.28903\\nBEH,Southwest Michigan Regional,Benton Harbor,MI,USA,42.12858333,-86.4285\\nBET,Bethel,Bethel,AK,USA,60.77977639,-161.8379975\\nBFD,Bradford Reg,Bradford,PA,USA,41.80306778,-78.64012083\\nBFF,Scotts Bluff County,Scottsbluff,NE,USA,41.87402778,-103.5956389\\nBFI,Boeing Field/King County Intl,Seattle,WA,USA,47.52998917,-122.3019561\\nBFK,Buffalo Municipal,Buffalo,OK,USA,36.86330139,-99.61873056\\nBFL,Meadows,Bakersfield,CA,USA,35.43359806,-119.0567681\\nBFM,Mobile Downtown,Mobile,AL,USA,30.62646944,-88.06799861\\nBFR,Virgil I Grissom Municipal,Bedford,IN,USA,38.84003306,-86.44536361\\nBFW,Silver Bay Municipal,Silver Bay,MN,USA,47.24902778,-91.41558333\\nBGD,Hutchinson County,Borger,TX,USA,35.70004194,-101.3940536\\nBGE,Decatur County Industrial Airpark,Bainbridge,GA,USA,30.97152778,-84.63744444\\nBGF,Winchester Municipal,Winchester,TN,USA,35.17753417,-86.06616722\\nBGM,Binghamton Regional,Binghamton,NY,USA,42.20848278,-75.97961361\\nBGQ,Big Lake Strip Nr 2,Big Lake,AK,USA,61.53556806,-149.8138975\\nBGR,Bangor International,Bangor,ME,USA,44.80744444,-68.82813889\\nBHB,Hancock Co-Bar Harbor,Bar Harbor,ME,USA,44.44969444,-68.3615\\nBHC,Baxley Municipal,Baxley,GA,USA,31.71383333,-82.39377778\\nBHK,Baker Muni,Baker City,MT,USA,46.34763639,-104.2594475\\nBHM,Birmingham International,Birmingham,AL,USA,33.56294306,-86.75354972\\nBID,Block Island State,Block Island,RI,USA,41.16811889,-71.57784167\\nBIE,Beatrice Municipal,Beatrice,NE,USA,40.30127778,-96.75411111\\nBIG,Allen AAF,Delta Junction,AK,USA,63.99454722,-145.7216417\\nBIH,Bishop,Bishop,CA,USA,37.37309556,-118.3636089\\nBIL,Billings Logan Intl,Billings,MT,USA,45.8076625,-108.5428611\\nBIS,Bismarck Municipal,Bismarck,ND,USA,46.77411111,-100.7467222\\nBIV,Tulip City,Holland,MI,USA,42.74316667,-86.10502778\\nBJC,Jeffco,Denver,CO,USA,39.90878667,-105.1172158\\nBJI,Bemidji-Beltrami County,Bemidji,MN,USA,47.50942417,-94.93372333\\nBJJ,Wayne County,Wooster,OH,USA,40.87480556,-81.88825\\nBKD,Breckenridge Stephens County,Breckenridge,TX,USA,32.71904694,-98.89099972\\nBKE,Baker City Municipal,Baker City,OR,USA,44.83733333,-117.8090833\\nBKL,Burke Lakefront,Cleveland,OH,USA,41.5175,-81.68333333\\nBKV,Hernando County,Brooksville,FL,USA,28.47359722,-82.45542139\\nBKW,Raleigh Cty Memorial,Beckley,WV,USA,37.78732833,-81.12416417\\nBKX,Brookings Municipal,Brookings,SD,USA,44.30483333,-96.81694444\\nBLF,Mercer Cty,Bluefield,WV,USA,37.29579944,-81.20769056\\nBLH,Blythe,Blythe,CA,USA,33.61916278,-114.7168764\\nBLI,Bellingham Intl,Bellingham,WA,USA,48.79275,-122.5375278\\nBLM,Allaire Arpt,Belmar/Farmingdale,NJ,USA,40.18691806,-74.12488694\\nBLV,Scott AFB/MidAmerica,Belleville/St. Louis,IL,USA,38.54517861,-89.83518444\\nBMC,Brigham City,Brigham City,UT,USA,41.55239139,-112.0622625\\nBMG,Monroe County,Bloomington,IN,USA,39.14602139,-86.61668278\\nBMI,Central Illinois Regional,Bloomington,IL,USA,40.47798556,-88.91595278\\nBML,Berlin Municipal,Berlin,NH,USA,44.57537278,-71.17593167\\nBMQ,Burnet Muni-Kate Craddock,Burnet,TX,USA,30.73894444,-98.23858333\\nBMT,Beaumont Municipal,Beaumont,TX,USA,30.07044111,-94.21553806\\nBNA,Nashville International,Nashville,TN,USA,36.12447667,-86.67818222\\nBNF,Baranof Warm Springs SPB,Baranof Warm Springs,AK,USA,57.08882583,-134.8331414\\nBNG,Banning Municipal,Banning,CA,USA,33.92307111,-116.8505756\\nBNL,Barnwell County,Barnwell,SC,USA,33.25777778,-81.38833333\\nBNO,Burns Muni,Burns,OR,USA,43.59212778,-118.9549789\\nBNW,Boone Municipal,Boone,IA,USA,42.04956944,-93.84757222\\nBOI,Boise Air Terminal,Boise,ID,USA,43.56444444,-116.2227778\\nBOK,Brookings,Brookings,OR,USA,42.07455556,-124.2900939\\nBOS,Gen Edw L Logan Intl,Boston,MA,USA,42.3643475,-71.00517917\\nBOW,Bartow Municipal,Bartow,FL,USA,27.9433575,-81.78344167\\nBPI,Big Piney-Marbleton,Big Piney,WY,USA,42.58506972,-110.1111531\\nBPK,Baxter County Regional,Mountain Home,AR,USA,36.36894194,-92.47052806\\nBPT,Southeast Texas Regional,Beaumont/Port Arthur,TX,USA,29.95083333,-94.02069444\\nBQK,Glynco Jetport,Brunswick,GA,USA,31.25902778,-81.46630556\\nBQN,Rafael Hernandez,Aguadilla,PR,USA,18.49486111,-67.12944444\\nBRD,Brainerd-Crow Wing County Regional,Brainerd,MN,USA,46.39785806,-94.1372275\\nBRL,Burlington Municipal,Burlington,IA,USA,40.783225,-91.12550556\\nBRO,Brownsville/S.Padre Island International,Brownsville,TX,USA,25.90683333,-97.42586111\\nBRW,Wiley Post Will Rogers Memorial,Barrow,AK,USA,71.2854475,-156.7660019\\nBRY,Samuels,Bardstown,KY,USA,37.81432167,-85.49963806\\nBST,Belfast Municipal,Belfast,ME,USA,44.40966667,-69.01225\\nBTI,Barter Island,Kaktovik,AK,USA,70.13390278,-143.5770444\\nBTL,W K Kellogg Regional,Battle Creek,MI,USA,42.30727806,-85.25147972\\nBTM,Bert Mooney,Butte,MT,USA,45.95479528,-112.49746\\nBTN,Britton Municipal,Britton,SD,USA,45.81522222,-97.74313889\\nBTP,Butler Cty,Butler,PA,USA,40.77692611,-79.94972417\\nBTR,\\\"Baton Rouge Metropolitan, Ryan\\\",Baton Rouge,LA,USA,30.53316083,-91.14963444\\nBTT,Bettles,Bettles,AK,USA,66.91528667,-151.5280556\\nBTV,Burlington International,Burlington,VT,USA,44.47300361,-73.1503125\\nBTY,Beatty,Beatty,NV,USA,36.86105722,-116.7870036\\nBUB,Cram,Burwell,NE,USA,41.77669444,-99.14975\\nBUF,Buffalo Niagara Intl,Buffalo,NY,USA,42.94052472,-78.73216667\\nBUM,Butler Memorial,Butler,MO,USA,38.28977028,-94.34012694\\nBUR,Burbank-Glendale-Pasadena,Burbank,CA,USA,34.20061917,-118.3584969\\nBUY,Burlington Municipal,Burlington,NC,USA,36.04854333,-79.47488694\\nBVI,Beaver County,Beaver Falls,PA,USA,40.77248083,-80.39142556\\nBVK,Buckland,Buckland,AK,USA,65.98228611,-161.1519778\\nBVN,Albion Municipal,Albion,NE,USA,41.72857778,-98.05575972\\nBVO,Bartlesville Municipal,Bartlesville,OK,USA,36.76247611,-96.01115167\\nBVS,Skagit Regional/Bay View,Burlington/Mount Vernon,WA,USA,48.47088889,-122.4208611\\nBVX,Batesville Regional,Batesville,AR,USA,35.726105,-91.64736083\\nBVY,Beverly Municipal,Beverly,MA,USA,42.58417111,-70.91651833\\nBWC,Brawley Municipal,Brawley,CA,USA,32.9931,-115.5169325\\nBWD,Brownwood Municipal,Brownwood,TX,USA,31.79362222,-98.95649528\\nBWG,Bowling Green-Warren County,Bowling Green,KY,USA,36.96451667,-86.41967917\\nBWI,Baltimore-Washington International,Baltimore,MD,USA,39.17540167,-76.66819833\\nBWP,Harry Stern,Wahpeton,ND,USA,46.24640083,-96.6056825\\nBXA,George R Carr Memorial,Bogalusa,LA,USA,30.81368639,-89.86496444\\nBXG,Burke County,Waynesboro,GA,USA,33.04093056,-82.00397917\\nBXK,Buckeye Municipal,Buckeye,AZ,USA,33.42088556,-112.6863\\nBYA,Boundary,Boundary,AK,USA,64.07830278,-141.113375\\nBYG,Johnson County,Buffalo,WY,USA,44.38108528,-106.7217897\\nBYI,Burley Municipal,Burley,ID,USA,42.54260361,-113.7715442\\nBZN,Gallatin,Bozeman,MT,USA,45.77690139,-111.1530072\\nC00,Mercer County,Aledo,IL,USA,41.248645,-90.73708361\\nC05,Chenega Bay,Chenega,AK,USA,60.07730556,-147.9918889\\nC09,Morris Municipal,Morris,IL,USA,41.42541667,-88.41869444\\nC15,Pekin Municipal,Pekin,IL,USA,40.48820611,-89.67591083\\nC17,Marion,Marion,IA,USA,42.03111083,-91.52934222\\nC18,Frankfort,Chicago/Frankfort,IL,USA,41.4775,-87.84047222\\nC25,Waverly Municipal,Waverly,IA,USA,42.7419525,-92.50793528\\nC29,Morey,Middleton,WI,USA,43.11424444,-89.53073222\\nC34,Gibson City Municipal,Gibson City,IL,USA,40.48578389,-88.2672725\\nC35,Reedsburg Municipal,Reedsburg,WI,USA,43.52589944,-89.98322194\\nC47,Portage Municipal,Portage,WI,USA,43.5600925,-89.48309278\\nC52,Burlington Municipal,Burlington,WI,USA,42.69056389,-88.30464\\nC56,Sanger,Chicago/Monee,IL,USA,41.37756167,-87.68137528\\nC62,Kendallville Municipal,Kendallville,IN,USA,41.47271639,-85.26080833\\nC65,Plymouth Municipal,Plymouth,IN,USA,41.36513333,-86.30050417\\nC66,Monmouth Municipal,Monmouth,IL,USA,40.92970444,-90.63110722\\nC71,Crosby Municipal,Crosby,MS,USA,31.29600472,-91.05288167\\nC73,Dixon Muni-Charles R Walgreen,Dixon,IL,USA,41.83369889,-89.44621333\\nC75,Marshall County,Lacon,IL,USA,41.01928583,-89.38642222\\nC77,Poplar Grove,Poplar Grove,IL,USA,42.32268639,-88.83651833\\nC80,New Coalinga Municipal,Coalinga,CA,USA,36.16313889,-120.2938139\\nC81,Campbell,Chicago/Round Lake Park,IL,USA,42.32461111,-88.07408806\\nC83,Byron,Byron,CA,USA,37.8284525,-121.6258219\\nC91,Dowagiac Municipal,Dowagiac,MI,USA,41.99293417,-86.1280125\\nCAD,Wexford County,Cadillac,MI,USA,44.27531333,-85.41892694\\nCAE,Columbia Metropolitan,Columbia,SC,USA,33.93884,-81.11953944\\nCAG,Craig-Moffat,Craig,CO,USA,40.49522139,-107.5216467\\nCAK,Akron-Canton Regional,Akron,OH,USA,40.91631194,-81.44246556\\nCAO,Clayton Municipal Airpark,Clayton,NM,USA,36.44585972,-103.1546583\\nCAR,Caribou Municipal,Caribou,ME,USA,46.8715,-68.01791667\\nCAV,Clarion Municipal,Clarion,IA,USA,42.74194389,-93.75890944\\nCBE,Cumberland Regional,Cumberland,MD,USA,39.61541667,-78.76086361\\nCBF,Council Bluffs Municipal,Council Bluffs,IA,USA,41.25947222,-95.75997222\\nCBG,Cambridge Municipal,Cambridge,MN,USA,45.55854639,-93.26464361\\nCBK,Shaltz,Colby,KS,USA,39.42753083,-101.0465719\\nCCB,Cable,Upland,CA,USA,34.11154056,-117.6875897\\nCCO,Newnan-Coweta County,Newnan,GA,USA,33.31208333,-84.77027778\\nCCR,Buchanan,Concord,CA,USA,37.98965639,-122.0568972\\nCCY,Charles City Municipal,Charles City,IA,USA,43.07260861,-92.61077833\\nCDB,Cold Bay,Cold Bay,AK,USA,55.20559972,-162.7242628\\nCDC,Cedar City Muni,Cedar City,UT,USA,37.70097028,-113.098575\\nCDH,Harrell,Camden,AR,USA,33.62279917,-92.76339528\\nCDI,Cambridge Municipal,Cambridge,OH,USA,39.97504417,-81.57759528\\nCDK,George T Lewis,Cedar Key,FL,USA,29.137745,-83.04984361\\nCDN,Woodward,Camden,SC,USA,34.28358333,-80.56486111\\nCDR,Chadron Municipal,Chadron,NE,USA,42.83755556,-103.0954167\\nCDV,Merle K (Mudhole) Smith,Cordova,AK,USA,60.49183389,-145.4776503\\nCDW,Essex Cty Arpt,Caldwell,NJ,USA,40.87522278,-74.28135667\\nCEC,Jack McNamara,Crescent City,CA,USA,41.78015722,-124.2365333\\nCEF,Westover AFB,Chicopee,MA,USA,42.19826389,-72.53425833\\nCEK,Crete Municipal,Crete,NE,USA,40.61791667,-96.92488889\\nCEM,Central,Central,AK,USA,65.57380667,-144.7832908\\nCEU,Oconee County Regional,Clemson,SC,USA,34.67205556,-82.88644444\\nCEV,Mettel,Connersville,IN,USA,39.69803139,-85.13124528\\nCEW,Bob Sikes,Crestview,FL,USA,30.77883333,-86.52211111\\nCEY,Kyle-Oakley,Murray,KY,USA,36.66458333,-88.37277722\\nCEZ,Cortez Muni,Cortez,CO,USA,37.30299778,-108.6280658\\nCFD,Coulter,Bryan,TX,USA,30.71569444,-96.33136111\\nCFJ,Crawfordsville Municipal,Crawfordsville,IN,USA,39.97562861,-86.91986361\\nCFK,Chefornak,Chefornak,AK,USA,60.14922556,-164.2856325\\nCFT,Greenlee County,Clifton-Morenci,AZ,USA,32.95284306,-109.2103453\\nCFV,Coffeyville Municipal,Coffeyville,KS,USA,37.0940475,-95.57189417\\nCGA,Craig SPB,Craig,AK,USA,55.47883139,-133.1478011\\nCGC,Crystal River,Crystal River,FL,USA,28.86727778,-82.57130556\\nCGE,Cambridge-Dorchester,Cambridge,MD,USA,38.53930556,-76.03036111\\nCGF,Cuyahoga County,Cleveland,OH,USA,41.56512389,-81.48635389\\nCGI,Cape Girardeau Municipal,Cape Girardeau,MO,USA,37.22531694,-89.57075167\\nCGS,College Park,College Park,MD,USA,38.98058333,-76.92230556\\nCGX,Chicago Meigs,Chicago,IL,USA,41.85884389,-87.60791167\\nCGZ,Casa Grande Municipal,Casa Grande,AZ,USA,32.95488889,-111.7668333\\nCHA,Lovell,Chattanooga,TN,USA,35.03526833,-85.20378778\\nCHD,Chandler Municipal,Chandler,AZ,USA,33.26908333,-111.8111389\\nCHK,Chickasha Municipal,Chickasha,OK,USA,35.09614694,-97.96618361\\nCHO,Charlottesville-Albermarle,Charlottesville,VA,USA,38.13863889,-78.45286111\\nCHP,Circle Hot Springs,Circle Hot Springs,AK,USA,65.48547222,-144.6107836\\nCHS,Charleston AFB/International,Charleston,SC,USA,32.89864639,-80.04050583\\nCHT,Chillicothe Municipal,Chillicothe,MO,USA,39.78215278,-93.49568056\\nCHU,Houston County,Caledonia,MN,USA,43.59635861,-91.50394639\\nCIC,Chico Municipal,Chico,CA,USA,39.79538278,-121.8584231\\nCID,Eastern Iowa,Cedar Rapids,IA,USA,41.88458833,-91.71087222\\nCII,Choteau,Choteau,MT,USA,47.82528056,-112.1662136\\nCIK,Chalkyitsik,Chalkyitsik,AK,USA,66.64969083,-143.7359492\\nCIN,Arthur N Neu,Carroll,IA,USA,42.04619444,-94.789\\nCIR,Cairo,Cairo,IL,USA,37.06447222,-89.21961111\\nCIU,Chippewa County International,Sault Ste. Marie,MI,USA,46.25075194,-84.47238528\\nCJR,Culpeper Regional,Culpeper,VA,USA,38.5267075,-77.85885528\\nCJX,Crooked Creek,Crooked Creek,AK,USA,61.86902194,-158.1371178\\nCKB,Benedum,Clarksburg,WV,USA,39.29663889,-80.22808333\\nCKC,Grand Marais/Cook County,Grand Marais,MN,USA,47.83830556,-90.38313889\\nCKF,Crisp County - Cordele,Cordele,GA,USA,31.98883333,-83.77391667\\nCKI,Williamsburg County,Kingstree,SC,USA,33.71722222,-79.85697222\\nCKM,Fletcher,Clarksdale,MS,USA,34.29971,-90.51231611\\nCKN,Crookston Muni Kirkwood,Crookston,MN,USA,47.84169417,-96.62162028\\nCKP,Cherokee Municipal,Cherokee,IA,USA,42.73147222,-95.55613889\\nCKU,Cordova Muni,Cordova,AK,USA,60.54390333,-145.7267042\\nCKV,Outlaw,Clarksville,TN,USA,36.62188083,-87.41495361\\nCKX,Chicken,Chicken,AK,USA,64.07133833,-141.9522792\\nCLD,MC Clellan-Palomar Airport,NA,NA,USA,33.127231,-117.278727\\nCLE,Cleveland-Hopkins Intl,Cleveland,OH,USA,41.41089417,-81.84939667\\nCLI,Clintonville Municipal,Clintonville,WI,USA,44.61381306,-88.73126667\\nCLK,Clinton Municipal,Clinton,OK,USA,35.53832778,-98.932695\\nCLL,Easterwood,College Station,TX,USA,30.58858944,-96.36382417\\nCLM,William R Fairchild Intl,Port Angeles,WA,USA,48.12019444,-123.4996944\\nCLP,Clarks Point,Clarks Point,AK,USA,58.84230472,-158.5452331\\nCLS,Chehalis-Centralia,Chehalis,WA,USA,46.67649194,-122.9792967\\nCLT,Charlotte/Douglas International,Charlotte,NC,USA,35.21401111,-80.94312583\\nCLW,Clearwater Air Park,Clearwater,FL,USA,27.97668639,-82.75874028\\nCMA,Camarillo,Camarillo,CA,USA,34.21375472,-119.0943264\\nCMH,Port Columbus Intl,Columbus,OH,USA,39.99798528,-82.89188278\\nCMI,University of Illinois-Willard,Champaign/Urbana,IL,USA,40.03925,-88.27805556\\nCMX,Houghton County Memorial,Hancock,MI,USA,47.16841722,-88.48906083\\nCMY,Sparta/Fort McCoy,Sparta,WI,USA,43.95834806,-90.7378975\\nCNC,Chariton Municipal,Chariton,IA,USA,41.01962389,-93.35968028\\nCNH,Claremont Municipal,Claremont,NH,USA,43.37043194,-72.36867667\\nCNK,Blosser Municipal,Concordia,KS,USA,39.54925139,-97.65231667\\nCNM,Cavern City Air Terminal,Carlsbad,NM,USA,32.33747222,-104.2632778\\nCNO,Chino,Chino,CA,USA,33.97469444,-117.6366111\\nCNP,Billy G Ray,Chappell,NE,USA,41.07747222,-102.4640556\\nCNU,Chanute Martin Johnson,Chanute,KS,USA,37.66879722,-95.48506444\\nCNW,TSTC-Waco,Waco,TX,USA,31.63783139,-97.07413889\\nCNY,Canyonlands,Moab,UT,USA,38.75495611,-109.7548439\\nCOD,Yellowstone Regional,Cody,WY,USA,44.52019417,-109.0237961\\nCOE,Coeur D'Alene Air Terminal,Coeur D'Alene,ID,USA,47.77429167,-116.8196231\\nCOI,Merritt Island,Merritt Island,FL,USA,28.34158944,-80.6854975\\nCOM,Coleman Municipal,Coleman,TX,USA,31.84113889,-99.40361111\\nCON,Concord Municipal,Concord,NH,USA,43.20273278,-71.50228556\\nCOQ,Cloquet-Carlton County,Cloquet,MN,USA,46.70016833,-92.50552861\\nCOS,City of Colorado Springs Muni,Colorado Springs,CO,USA,38.80580556,-104.70025\\nCOT,Cotulla-Lasalle County,Cotulla,TX,USA,28.45825583,-99.22016389\\nCOU,Columbia Regional,Columbia,MO,USA,38.81809306,-92.21962917\\nCPC,Columbus County Municipal,Whiteville,NC,USA,34.27287278,-78.71499278\\nCPK,Chesapeake Municipal,Norfolk,VA,USA,36.66561833,-76.32066389\\nCPM,Compton/Woodley,Compton,CA,USA,33.89001611,-118.2436831\\nCPR,Natrona County Intl,Casper,WY,USA,42.90835556,-106.4644661\\nCPS,St. Louis Downtown,Cahokia/St. Louis,IL,USA,38.57072444,-90.15622111\\nCPX,Benjamin Rivera Noriega,Isla De Culebra,PR,USA,18.31328917,-65.30432444\\nCQA,Lakefield,Celina,OH,USA,40.48408333,-84.56011111\\nCQB,Chandler Municipal,Chandler,OK,USA,35.72381556,-96.82027306\\nCQX,Chatham Municipal,Chatham,MA,USA,41.68840028,-69.98952417\\nCRC,Circle City,Circle,AK,USA,65.83049389,-144.0758128\\nCRE,Grand Strand,North Myrtle Beach,SC,USA,33.81175,-78.72394444\\nCRG,Craig Municipal,Jacksonville,FL,USA,30.33633333,-81.51444444\\nCRO,Corcoran,Corcoran,CA,USA,36.10245111,-119.5948469\\nCRP,Corpus Christi International,Corpus Christi,TX,USA,27.77036083,-97.50121528\\nCRQ,McClellan-Palomar,Carlsbad,CA,USA,33.12822222,-117.2802222\\nCRS,C Davis Campbell -Corsicana Muni,Corsicana,TX,USA,32.02748861,-96.39803611\\nCRT,Crossett Municipal,Crossett,AR,USA,33.17833278,-91.88018806\\nCRW,Yeager,Charleston,WV,USA,38.37315083,-81.59318972\\nCRX,Roscoe Turner,Corinth,MS,USA,34.91496778,-88.60348361\\nCSB,Cambridge Municipal,Cambridge,NE,USA,40.30658333,-100.1620833\\nCSG,Columbus Metropolitan,Columbus,GA,USA,32.51633333,-84.93886111\\nCSM,Clinton-Sherman,Clinton,OK,USA,35.33983917,-99.20049944\\nCSQ,Creston Municipal,Creston,IA,USA,41.02146139,-94.36331917\\nCSV,Crossville Memorial,Crossville,TN,USA,35.95129194,-85.08497806\\nCTB,Cut Bank Muni,Cut Bank,MT,USA,48.60835444,-112.3761464\\nCTJ,West Georgia Regional,Carrollton,GA,USA,33.63102778,-85.15202778\\nCTK,Ingersoll,Canton,IL,USA,40.56909444,-90.07484\\nCTY,Cross City,Cross City,FL,USA,29.63552778,-83.10475\\nCTZ,Sampson County,Clinton,NC,USA,34.97561194,-78.36461528\\nCUB,Columbia Owens Downtown,Columbia,SC,USA,33.97047222,-80.99525\\nCUH,Cushing Municipal,Cushing,OK,USA,35.949925,-96.77305278\\nCUL,Carmi Municipal,Carmi,IL,USA,38.08947917,-88.12306111\\nCUT,Custer County,Custer,SD,USA,43.73331611,-103.6176947\\nCVG,Cincinnati Northern Kentucky Intl,Covington,KY,USA,39.04614278,-84.6621725\\nCVK,Sharp County Regional,Ash Flat,AR,USA,36.26487139,-91.56264111\\nCVN,Clovis Municipal,Clovis,NM,USA,34.42513889,-103.0792778\\nCVO,Corvallis Muni,Corvallis,OR,USA,44.49719361,-123.2898297\\nCVX,Charlevoix Municipal,Charlevoix,MI,USA,45.30477778,-85.27477778\\nCWA,Central Wisconsin,Mosinee,WI,USA,44.77761917,-89.66677944\\nCWF,Chennault International,Lake Charles,LA,USA,30.21059167,-93.14318944\\nCWI,Clinton Municipal,Clinton,IA,USA,41.8311125,-90.32913056\\nCWV,Claxton-Evans County,Claxton,GA,USA,32.19505556,-81.86955556\\nCXC,Chitina,Chitina,AK,USA,61.58285917,-144.4270969\\nCXE,Chase City Municipal,Chase City,VA,USA,36.78833556,-78.50155361\\nCXF,Coldfoot,Coldfoot,AK,USA,67.25163417,-150.2065672\\nCXL,Calexico International,Calexico,CA,USA,32.66950333,-115.5133281\\nCXO,Montgomery County,Conroe,TX,USA,30.35183333,-95.4144675\\nCXP,Carson,Carson City,NV,USA,39.19222972,-119.7343611\\nCXU,Camilla-Mitchell County,Camilla,GA,USA,31.21291667,-84.23680556\\nCXY,Capital City,Harrisburg,PA,USA,40.21713889,-76.85147222\\nCYO,Pickaway County Memorial,Circleville,OH,USA,39.51600611,-82.98215361\\nCYS,Cheyenne,Cheyenne,WY,USA,41.1557225,-104.8118381\\nCYW,Clay Center Municipal,Clay Center,KS,USA,39.38713889,-97.15721417\\nCZD,Cozad Municipal,Cozad,NE,USA,40.86911111,-100.0042222\\nCZG,Tri-Cities,Endicott,NY,USA,42.07853583,-76.09633306\\nCZL,Tom B David,Calhoun,GA,USA,34.45678278,-84.93949944\\nCZN,Chisana,Chisana,AK,USA,62.07118972,-142.0483742\\nCZT,Dimmit County,Carrizo Springs,TX,USA,28.52225111,-99.82363444\\nD04,Bowman Municipal,Bowman,ND,USA,46.18699111,-103.4280806\\nD05,Garrison Municipal,Garrison,ND,USA,47.65594444,-101.4372222\\nD07,Faith Municipal,Faith,SD,USA,45.03609417,-102.0198803\\nD09,Bottineau Municipal,Bottineau,ND,USA,48.83039167,-100.4171361\\nD19,Quentin Aanenson,Luverne,MN,USA,43.62080278,-96.21864028\\nD22,Angola,Angola,NY,USA,42.66010111,-78.99115556\\nD25,Manitowish Waters,Manitowish Waters,WI,USA,46.12197222,-89.88233333\\nD38,Canandaiga,Canandaiga,NY,USA,42.90718611,-77.32162639\\nD42,Springfield Municipal,Springfield,MN,USA,44.23107,-94.99893444\\nD50,Crosby Municipal,Crosby,ND,USA,48.92851556,-103.2972514\\nD55,Robertson,Langdon,ND,USA,48.75301778,-98.39333694\\nD57,Glen Ullin Municipal,Glen Ullin,ND,USA,46.81278306,-101.8601556\\nD60,Tioga Municipal,Tioga,ND,USA,48.3805325,-102.8979853\\nD73,Monroe-Walton County,Monroe,GA,USA,33.78149889,-83.69355389\\nD77,Lancaster,Lancaster,NY,USA,42.92228111,-78.61224889\\nD87,Harbor Springs,Harbor Springs,MI,USA,45.42556528,-84.91338389\\nD95,Dupont-Lapeer,Lapeer,MI,USA,43.06703333,-83.27244444\\nD98,Romeo,Romeo,MI,USA,42.79699083,-82.97526583\\nDAB,Daytona Beach International,Daytona Beach,FL,USA,29.17991667,-81.05805556\\nDAG,Barstow-Daggett,Daggett,CA,USA,34.85371333,-116.7866875\\nDAL,Dallas Love,Dallas,TX,USA,32.84711389,-96.85177222\\nDAN,Danville Regional,Danville,VA,USA,36.57286111,-79.33611111\\nDAW,Skyhaven,Rochester,NH,USA,43.28406194,-70.92925472\\nDAY,James M Cox Dayton Intl,Dayton,OH,USA,39.90237583,-84.219375\\nDBN,\\\"W. H. \\\"\\\"Bud\\\"\\\" Barron\\\",Dublin,GA,USA,32.56445806,-82.98525556\\nDBQ,Dubuque Municipal,Dubuque,IA,USA,42.40295944,-90.70916722\\nDCA,Ronald Reagan Washington National,Arlington,VA,USA,38.85208333,-77.03772222\\nDCK,Dahl Creek,Dahl Creek,AK,USA,66.94333806,-156.9046739\\nDCU,Pryor Regional,Decatur,AL,USA,34.65264667,-86.94536778\\nDCY,Daviess County,Washington,IN,USA,38.70042333,-87.12973222\\nDDC,Dodge City Regional,Dodge City,KS,USA,37.76312194,-99.96542389\\nDDH,William H. Morse State,Bennington,VT,USA,42.8913325,-73.2464075\\nDEC,Decatur,Decatur,IL,USA,39.8345625,-88.86568917\\nDED,Deland Municipal-Taylor,Deland,FL,USA,29.06698056,-81.28394167\\nDEE,Deering,Deering,AK,USA,66.06820583,-162.7666028\\nDEH,Decorah Municipal,Decorah,IA,USA,43.27550139,-91.73937389\\nDEN,Denver Intl,Denver,CO,USA,39.85840806,-104.6670019\\nDEQ,J Lynn Helms Sevier County,De Queen,AR,USA,34.04699556,-94.39936556\\nDET,Detroit City,Detroit,MI,USA,42.40919444,-83.00986111\\nDEW,Deer Park,Deer Park,WA,USA,47.96663889,-117.4266667\\nDFI,Defiance Memorial,Defiance,OH,USA,41.3375,-84.42880556\\nDFW,Dallas-Fort Worth International,Dallas-Fort Worth,TX,USA,32.89595056,-97.0372\\nDGW,Converse County,Douglas,WY,USA,42.79725,-105.3857361\\nDHN,Dothan,Dothan,AL,USA,31.32133917,-85.44962889\\nDHT,Dalhart Municipal,Dalhart,TX,USA,36.022585,-102.5472775\\nDIK,Dickinson Municipal,Dickinson,ND,USA,46.79738889,-102.8019528\\nDKB,Dekalb-Taylor Municipal,Dekalb,IL,USA,41.93188111,-88.70829861\\nDKK,Dunkirk Municipal,Dunkirk,NY,USA,42.49333528,-79.27204167\\nDKX,Knoxville Downtown Island,Knoxville,TN,USA,35.96383361,-83.87365389\\nDLG,Dillingham,Dillingham,AK,USA,59.0454125,-158.5033389\\nDLH,Duluth International,Duluth,MN,USA,46.84209028,-92.19364861\\nDLL,Baraboo - Wisconsin Dells,Baraboo,WI,USA,43.52195389,-89.77090222\\nDLN,Dillon,Dillon,MT,USA,45.25536056,-112.5525067\\nDLO,Delano Municipal,Delano,CA,USA,35.74558056,-119.2365039\\nDLS,Columbia Gorge Regional,The Dalles,OR,USA,45.61854556,-121.1673439\\nDLZ,Delaware Municipal,Delaware,OH,USA,40.27970139,-83.11480167\\nDM2,Diomede Heliport,Diomede,AK,USA,65.75861111,-168.9530556\\nDMN,Deming Municipal,Deming,NM,USA,32.26230917,-107.7206397\\nDMO,Sedalia Memorial,Sedalia,MO,USA,38.70688889,-93.17611111\\nDMW,Carroll County,Westminster,MD,USA,39.60827778,-77.00766667\\nDNL,Daniel,Augusta,GA,USA,33.46663667,-82.03933917\\nDNN,Dalton Municipal,Dalton,GA,USA,34.72174833,-84.86910806\\nDNS,Denison Municipal,Denison,IA,USA,41.9864325,-95.38072083\\nDNV,Vermilion County,Danville,IL,USA,40.19946861,-87.59553528\\nDOV,Dover Air Force Base,Dover,DE,USA,39.1301125,-75.46631028\\nDPA,Du Page,Chicago/West Chicago,IL,USA,41.90688333,-88.24841722\\nDPL,P B Raiford,Kenansville,NC,USA,35.00006444,-77.981695\\nDQH,Douglas Municipal,Douglas,GA,USA,31.47780833,-82.85961556\\nDRI,Beauregard Parish,De Ridder,LA,USA,30.83152778,-93.33963889\\nDRO,Durango-La Plata County,Durango,CO,USA,37.15151667,-107.7537692\\nDRT,Del Rio International,Del Rio,TX,USA,29.37181222,-100.9232339\\nDSM,Des Moines International,Des Moines,IA,USA,41.53493306,-93.66068222\\nDSV,Dansville Muni,Dansville,NY,USA,42.57089972,-77.71305083\\nDTA,Delta Municipal,Delta,UT,USA,39.38328861,-112.5096683\\nDTL,Detroit Lakes -Wething,Detroit Lakes,MN,USA,46.82520861,-95.8856875\\nDTN,Shreveport Downtown,Shreveport,LA,USA,32.54021889,-93.7450225\\nDTO,Denton Municipal,Denton,TX,USA,33.20072167,-97.19797722\\nDTS,Destin-Ft. Walton Beach,Destin,FL,USA,30.40006111,-86.47147722\\nDTW,Detroit Metropolitan-Wayne County,Detroit,MI,USA,42.21205889,-83.34883583\\nDUA,Eaker,Durant,OK,USA,33.942265,-96.39451806\\nDUC,Halliburton,Duncan,OK,USA,34.470875,-97.95986111\\nDUG,Bisbee Douglas International,Douglas Bisbee,AZ,USA,31.46902778,-109.6036667\\nDUJ,Du Bois-Jefferson Cty,Du Bois,PA,USA,41.17826611,-78.89869778\\nDUT,Unalaska,Unalaska,AK,USA,53.90013889,-166.5435\\nDUX,Moore County,Dumas,TX,USA,35.85792833,-102.0130978\\nDUY,Kongiganak,Kongiganak,AK,USA,59.95950583,-162.8817231\\nDVK,Stuart Powell,Danville,KY,USA,37.57791667,-84.76969444\\nDVL,Devils Lake Municipal-Knoke,Devils Lake,ND,USA,48.11424528,-98.90877833\\nDVN,Davenport Municipal,Davenport,IA,USA,41.6102775,-90.58832528\\nDVO,Gnoss,Novato,CA,USA,38.14351944,-122.5572167\\nDVT,Phoenix-Deer Valley,Phoenix,AZ,USA,33.68831667,-112.0825614\\nDWH,David Wayne Hooks Memorial,Houston,TX,USA,30.06186111,-95.55277778\\nDWU,Ashland-Boyd County,Ashland,KY,USA,38.5545,-82.738\\nDXE,Dexter Municipal,Dexter,MO,USA,36.77747,-89.94117333\\nDXR,Danbury Municipal,Danbury,CT,USA,41.37153528,-73.48219056\\nDXX,Madison-Lac Qui Parle County,Madison,MN,USA,44.98624,-96.17773611\\nDYB,Summerville,Summerville,SC,USA,33.06344444,-80.27933333\\nDYL,Doylestown,Doylestown,PA,USA,40.33305028,-75.12233833\\nDYR,Dyersburg Municipal,Dyersburg,TN,USA,35.99850694,-89.40608333\\nDYT,Sky Harbor,Duluth,MN,USA,46.72186083,-92.04343889\\nE01,Monahans-Roy Hurd Memorial,Monahans,TX,USA,31.58246583,-102.9090428\\nE04,Eunice,Eunice,NM,USA,32.45679139,-103.2404708\\nE05,Hatch Muni,Hatch,NM,USA,32.66106083,-107.1979339\\nE06,Lea County-Zip Franklin Memorial,Lovington,NM,USA,32.95394444,-103.4087778\\nE07,Lea County/Tatum,Tatum,NM,USA,33.26122278,-103.2768939\\nE11,Andrews County,Andrews,TX,USA,32.33111111,-102.5295278\\nE15,Graham Municipal,Graham,TX,USA,33.11022222,-98.55527861\\nE19,Gruver Municipal,Gruver,TX,USA,36.23372611,-101.4321894\\nE24,Whiteriver,Whiteriver,AZ,USA,33.81255056,-109.9867658\\nE25,Wickenburg Municipal,Wickenburg,AZ,USA,33.96891833,-112.7985128\\nE26,Lea County,Jal,NM,USA,32.13107833,-103.1548506\\nE35,Fabens,Fabens,TX,USA,31.51567306,-106.1471978\\nE38,Alpine-Casparis Municipal,Alpine,TX,USA,30.38422222,-103.6835833\\nE42,Spearman Municipal,Spearman,TX,USA,36.221,-101.1945\\nE51,Bagdad,Bagdad,AZ,USA,34.59585278,-113.170195\\nE52,Oldham County,Vega,TX,USA,35.23199833,-102.3990931\\nE60,Eloy Municipal,Eloy,AZ,USA,32.80700583,-111.58679\\nE63,Gila Bend Municipal,Gila Bend,AZ,USA,32.95810083,-112.6782181\\nE80,Alexander Municipal,Belen,NM,USA,34.64519778,-106.8336958\\nE89,Conchas State Park,Conchas Dam,NM,USA,35.36671583,-104.1880314\\nE91,Chinle Municipal,Chinle,AZ,USA,36.11088056,-109.5754222\\nE94,Glenwood-Catron County,Glenwood,NM,USA,33.35283972,-108.8672858\\nE95,Benson Municipal,Benson,AZ,USA,31.99972222,-110.3572222\\nEAA,Eagle,Eagle,AK,USA,64.77639306,-141.1509206\\nEAN,Phifer Airfield,Wheatland,WY,USA,42.05552528,-104.9327492\\nEAR,Kearney Municipal,Kearney,NE,USA,40.72702778,-99.00677778\\nEAT,Pangborn Memorial,Wenatchee,WA,USA,47.39886111,-120.2068333\\nEAU,Chippewa Valley Regional,Eau Claire,WI,USA,44.86525722,-91.48507194\\nEBS,Webster City Municipal,Webster City,IA,USA,42.43663889,-93.86886111\\nECG,Elizabeth City CG Air Station/Municipal,Elizabeth City,NC,USA,36.26057417,-76.17459778\\nECS,Mondell,Newcastle,WY,USA,43.88545056,-104.3179178\\nEDE,Edenton Municipal,Edenton,NC,USA,36.027735,-76.56709333\\nEDN,Enterprise Municipal,Enterprise,AL,USA,31.29972222,-85.89986111\\nEED,Needles,Needles,CA,USA,34.76619444,-114.6232931\\nEEK,Eek,Eek,AK,USA,60.21590417,-162.0056092\\nEEN,Dillant-Hopkins,Keene,NH,USA,42.89839944,-72.27078111\\nEEO,Meeker,Meeker,CO,USA,40.04886222,-107.8859067\\nEET,Shelby County,Alabaster,AL,USA,33.17781083,-86.78323722\\nEFC,Belle Fourche Municipal,Belle Fourche,SD,USA,44.7342075,-103.8619925\\nEFD,Ellington,Houston,TX,USA,29.60733333,-95.15875\\nEFK,Newport State,Newport,VT,USA,44.88879722,-72.22915833\\nEFT,Monroe Municipal,Monroe,WI,USA,42.61493972,-89.59075583\\nEFW,Jefferson Municipal,Jefferson,IA,USA,42.01016667,-94.34258333\\nEGE,Eagle County Regional,Eagle,CO,USA,39.64256778,-106.9176953\\nEGQ,Emmetsburg Municipal,Emmetsburg,IA,USA,43.10202056,-94.704675\\nEGT,Wellington Municipal,Wellington,KS,USA,37.32441028,-97.38732333\\nEGV,Eagle River Union,Eagle River,WI,USA,45.93179639,-89.26906778\\nEHA,Elkhart-Morton County,Elkhart,KS,USA,37.00188194,-101.8821258\\nEHO,Shelby Municipal,Shelby,NC,USA,35.25555556,-81.60099722\\nEHR,Henderson City-County,Henderson,KY,USA,37.8078425,-87.68569\\nEII,Egegik,Egegik,AK,USA,58.18837472,-157.3809872\\nEIW,County Memorial,New Madrid,MO,USA,36.53531083,-89.59971722\\nEKA,Murray,Eureka,CA,USA,40.80338889,-124.1127917\\nEKM,Elkhart Municipal,Elkhart,IN,USA,41.71935833,-86.00168361\\nEKN,Elkins-Randolph Co-Jennings Randolph,Elkins,WV,USA,38.88944444,-79.85713889\\nEKO,Elko Regional,Elko,NV,USA,40.82492611,-115.7916964\\nEKQ,Wayne County,Monticello,KY,USA,36.85527778,-84.85613889\\nEKX,Elizabethtown,Elizabethtown,KY,USA,37.68694444,-85.92377778\\nEKY,Bessemer Municipal,Bessemer,AL,USA,33.31288444,-86.92591889\\nELA,Eagle Lake Municipal,Eagle Lake,TX,USA,29.60301389,-96.32248444\\nELD,South Arkansas Regional At Goodwin,El Dorado,AR,USA,33.2208625,-92.81325167\\nELI,Elim,Elim,AK,USA,64.61400972,-162.2700681\\nELK,Elk City Municipal,Elk City,OK,USA,35.42941083,-99.39425917\\nELM,Elmira/Corning Regional,Elmira,NY,USA,42.15991361,-76.89144333\\nELN,Bowers,Ellensburg,WA,USA,47.03302778,-120.5306944\\nELO,Ely Municipal,Ely,MN,USA,47.82454639,-91.83073056\\nELP,El Paso International,El Paso,TX,USA,31.80666667,-106.3778056\\nELV,Elfin Cove SPB,Elfin Cove,AK,USA,58.19518417,-136.3473928\\nELY,Ely Arpt (Yelland),Ely,NV,USA,39.29969444,-114.8418889\\nELZ,Wellsville Muni Tarantine,Wellsville,NY,USA,42.10951194,-77.99194806\\nEMM,Kemmerer Municipal,Kemmerer,WY,USA,41.82494611,-110.5590586\\nEMP,Emporia Municipal,Emporia,KS,USA,38.33211111,-96.19116667\\nEMT,El Monte,El Monte,CA,USA,34.08600889,-118.0348453\\nEMV,Emporia-Greensville Regional,Emporia,VA,USA,36.68691667,-77.48280556\\nENA,Kenai Municipal,Kenai,AK,USA,60.572,-151.2475278\\nENL,Centralia Municipal,Centralia,IL,USA,38.51479889,-89.09217944\\nENM,Emmonak,Emmonak,AK,USA,62.78518639,-164.4910461\\nENN,Nenana Municipal,Nenana,AK,USA,64.54898167,-149.0735053\\nENV,Wendover,Wendover,UT,USA,40.71869528,-114.03089\\nENW,Kenosha Regional,Kenosha,WI,USA,42.5957075,-87.92780333\\nEOK,Keokuk Municipal,Keokuk,IA,USA,40.45990778,-91.42850111\\nEOS,Neosho Memorial,Neosho,MO,USA,36.81080556,-94.39169444\\nEPH,Ephrata Muni,Ephrata,WA,USA,47.30758333,-119.5158889\\nEPM,Eastport Municipal,Eastport,ME,USA,44.91011111,-67.01269444\\nEQA,Captain Jack Thomas,El Dorado,KS,USA,37.77410833,-96.81762778\\nEQY,Monroe,Monroe,NC,USA,35.01884306,-80.62023444\\nERI,Erie Intl,Erie,PA,USA,42.08202139,-80.17621556\\nERV,Kerrville Muni/Louis Schreiner,Kerrville,TX,USA,29.976735,-99.08567972\\nERY,Luce County Hale,Newberry,MI,USA,46.31118694,-85.45731639\\nESC,Delta County,Escanaba,MI,USA,45.72266972,-87.09373139\\nESF,Esler Regional,Alexandria,LA,USA,31.3949025,-92.29577194\\nESN,Easton /Newnam,Easton,MD,USA,38.80416667,-76.069\\nEST,Estherville Municipal,Estherville,IA,USA,43.40744444,-94.74641667\\nETB,West Bend Municipal,West Bend,WI,USA,43.42219444,-88.12792667\\nETC,Edgecombe County,Tarboro,NC,USA,35.93710083,-77.54663833\\nETH,Wheaton Municipal,Wheaton,MN,USA,45.78046056,-96.54353972\\nETN,Eastland Municipal,Eastland,TX,USA,32.41349167,-98.80975667\\nEUF,Weedon,Eufaula,AL,USA,31.95131917,-85.128925\\nEUG,Mahlon Sweet,Eugene,OR,USA,44.12326,-123.2186856\\nEUL,Caldwell Industrial,Caldwell (Boise),ID,USA,43.64186111,-116.6357778\\nEVB,New Smyrna Beach Municipal,New Smyrna Beach,FL,USA,29.05580556,-80.94836111\\nEVM,Eveleth-Virginia Muni,Eveleth,MN,USA,47.42507778,-92.49846944\\nEVU,Maryville Memorial,Maryville,MO,USA,40.35260167,-94.91552722\\nEVV,Evansville Regional,Evansville,IN,USA,38.03799139,-87.53062667\\nEVW,Evanston-Uinta County Burns,Evanston,WY,USA,41.27494528,-111.0321286\\nEVY,Summit Airpark,Middletown,DE,USA,39.52038889,-75.72044444\\nEWB,New Bedford Municipal,New Bedford,MA,USA,41.67614167,-70.95694167\\nEWK,Newton-City-County,Newton,KS,USA,38.05710528,-97.27522861\\nEWN,Craven County Regional,New Bern,NC,USA,35.07297222,-77.04294444\\nEWR,Newark Intl,Newark,NJ,USA,40.69249722,-74.16866056\\nEWU,Newtok,Newtok,AK,USA,60.93865417,-164.6412147\\nEXI,Excursion Inlet SPB,Excursion Inlet,AK,USA,58.42049861,-135.4490328\\nEXX,Davidson County,Lexington,NC,USA,35.78114028,-80.30378194\\nEYE,Eagle Creek Airpark,Indianapolis,IN,USA,39.83070944,-86.29438056\\nEYW,Key West International,Key West,FL,USA,24.55611111,-81.75955556\\nEZI,Kewanee Municipal,Kewanee,IL,USA,41.20520361,-89.96386\\nEZM,Eastman-Dodge County,Eastman,GA,USA,32.21425,-83.12802778\\nEZZ,Cameron Memorial,Cameron,MO,USA,39.72755972,-94.276375\\nF00,Jones,Bonham,TX,USA,33.61172222,-96.17938889\\nF01,Quanah Municipal,Quanah,TX,USA,34.27708306,-99.75926861\\nF05,Vernon - Wilbarger County,Vernon,TX,USA,34.22566806,-99.28375\\nF06,Marian Airpark,Wellington,TX,USA,34.84561083,-100.1959481\\nF08,Eufaula Municipal,Eufaula,OK,USA,35.29593194,-95.62526417\\nF10,Henryetta Municipal,Henryetta,OK,USA,35.40687972,-96.01583278\\nF12,Rusk County,Henderson,TX,USA,32.14172222,-94.85172222\\nF17,Center Municipal,Center,TX,USA,31.83158333,-94.15641667\\nF18,Cleburne Municipal,Cleburne,TX,USA,32.35376389,-97.43375\\nF21,Memphis Municipal,Memphis,TX,USA,34.73958944,-100.5297008\\nF22,Perry Municipal,Perry,OK,USA,36.38559583,-97.27721083\\nF24,Minden-Webster,Minden,LA,USA,32.64601,-93.29808556\\nF28,El Reno Municipal,El Reno,OK,USA,35.47163639,-98.00599444\\nF29,Clarence E. Page Municipal,Oklahoma City,OK,USA,35.4880825,-97.82354556\\nF30,Sulphur Municipal,Sulphur,OK,USA,34.52453278,-96.98973944\\nF31,Lake Texoma State Park,Kingston,OK,USA,33.99287639,-96.64249722\\nF32,Healdton Municipal,Healdton,OK,USA,34.24925806,-97.47391306\\nF36,Cordell Municipal,Cordell,OK,USA,35.30421917,-98.96702167\\nF37,Wauchula Municipal,Wauchula,FL,USA,27.51364889,-81.88063917\\nF39,Grayson County,Sherman/Denison,TX,USA,33.71411111,-96.67366667\\nF41,Ennis Municipal,Ennis,TX,USA,32.32969444,-96.66388889\\nF44,Athens Jones Municipal,Athens,TX,USA,32.16384778,-95.82835306\\nF45,North Palm Beach County General Aviation,West Palm Beach,FL,USA,26.84537306,-80.22148111\\nF46,Rockwall Municipal,Rockwall,TX,USA,32.93059444,-96.43548556\\nF49,Slaton Municipal,Slaton,TX,USA,33.48481,-101.6607158\\nF51,Winnsboro Municipal,Winnsboro,TX,USA,32.93884556,-95.27886083\\nF53,Franklin County,Mount Vernon,TX,USA,33.21530583,-95.2374925\\nF55,Granbury Municipal,Granbury,TX,USA,32.44441583,-97.8169475\\nF56,Arledge,Stamford,TX,USA,32.91019472,-99.73422972\\nF70,French Valley,Murieta/Temecula,CA,USA,33.57605556,-117.1279722\\nF80,Atoka Municipal,Atoka,OK,USA,34.39833889,-96.14805972\\nF81,Okemah Flying,Okemah,OK,USA,35.42925306,-96.28778361\\nF84,Stigler Municipal,Stigler,OK,USA,35.28910556,-95.09389722\\nF85,Morton-Cochran County,Morton,TX,USA,33.72926389,-102.7338183\\nF87,Farmerville,Farmerville,LA,USA,32.72495583,-92.33716583\\nF88,Jonesboro,Jonesboro,LA,USA,32.20199028,-92.73293028\\nF89,Winnsboro Municipal,Winnsboro,LA,USA,32.15431917,-91.70012472\\nF91,Thomas P Stafford,Weatherford,OK,USA,35.54482944,-98.66849028\\nF99,Holdenville Municipal,Holdenville,OK,USA,35.085875,-96.41666667\\nFAI,Fairbanks International,Fairbanks,AK,USA,64.8136775,-147.8596694\\nFAM,Farmington Regional,Farmington,MO,USA,37.76107917,-90.42859722\\nFAQ,Fitiuta,Fitiuta Village,AS,USA,14.21577583,-169.4239058\\nFAR,Hector International,Fargo,ND,USA,46.91934889,-96.81498889\\nFAT,Fresno Yosemite International,Fresno,CA,USA,36.77619444,-119.7181389\\nFAY,Fayetteville Municipal,Fayetteville,NC,USA,34.99147222,-78.88\\nFBL,Faribault Municipal,Faribault,MN,USA,44.32468556,-93.31082889\\nFBR,Fort Bridger,Fort Bridger,WY,USA,41.39193583,-110.4067961\\nFBY,Fairbury Municipal,Fairbury,NE,USA,40.18297222,-97.16927778\\nFCA,Glacier Park Intl,Kalispell,MT,USA,48.31140472,-114.2550694\\nFCH,Fresno-Chandler Downtown,Fresno,CA,USA,36.732365,-119.8198961\\nFCI,Chesterfield County,Richmond,VA,USA,37.4065375,-77.52498667\\nFCM,Flying Cloud,Minneapolis,MN,USA,44.82724111,-93.45714639\\nFCY,Forrest City Municipal,Forrest City,AR,USA,34.94199806,-90.77496611\\nFDK,Frederick Municipal,Frederick,MD,USA,39.41758333,-77.37430556\\nFDR,Frederick Municipal,Frederick,OK,USA,34.35219472,-98.98460222\\nFDW,Fairfield County,Winnsboro,SC,USA,34.31547222,-81.10880556\\nFDY,Findlay,Findlay,OH,USA,41.01352778,-83.66869444\\nFEP,Albertus,Freeport,IL,USA,42.24626722,-89.58223944\\nFET,Fremont Municipal,Fremont,NE,USA,41.44913889,-96.52019444\\nFFA,First Flight,Kill Devil Hills,NC,USA,36.01822278,-75.67128694\\nFFC,Peachtree City - Falcon,Atlanta,GA,USA,33.35725,-84.57183333\\nFFL,Fairfield Municipal,Fairfield,IA,USA,41.05332417,-91.97892333\\nFFM,Fergus Falls Muni-Einar Mickelson,Fergus Falls,MN,USA,46.28439389,-96.15668556\\nFFT,Capital City,Frankfort,KY,USA,38.18248861,-84.90470083\\nFFZ,Falcon,Mesa,AZ,USA,33.46083333,-111.7283333\\nFGX,Fleming-Mason,Flemingsburg,KY,USA,38.54180556,-83.74338889\\nFHR,Friday Harbor,Friday Harbor,WA,USA,48.52197222,-123.0243611\\nFHU,Libby AAF-Sierra Vista Municipal,Fort Huachuca-Sierra Vista,AZ,USA,31.58847222,-110.3443889\\nFIG,Clearfield-Lawrence,Clearfield,PA,USA,41.04861306,-78.41310306\\nFIT,Fitchburg Municipal,Fitchburg,MA,USA,42.55412194,-71.75895639\\nFKL,Chess-Lamberton,Franklin,PA,USA,41.37787361,-79.86036167\\nFKN,Franklin Municipal-John Beverly Rose,Franklin,VA,USA,36.69817806,-76.90312694\\nFKR,Frankfort Municipal,Frankfort,IN,USA,40.27343083,-86.56217028\\nFLD,Fond Du Lac County,Fond Du Lac,WI,USA,43.77117417,-88.48842917\\nFLG,Flagstaff Pulliam,Flagstaff,AZ,USA,35.13845472,-111.6712183\\nFLL,Fort Lauderdale-Hollywood Int'l,Ft. Lauderdale,FL,USA,26.07258333,-80.15275\\nFLO,Florence Regional,Florence,SC,USA,34.18536111,-79.72388889\\nFLP,Marion County Regional,Flippin,AR,USA,36.29087528,-92.59023417\\nFLT,Flat,Flat,AK,USA,62.45264889,-157.98907\\nFLX,Fallon Municipal,Fallon,NV,USA,39.499545,-118.7490197\\nFME,Tipton,Odenton,MD,USA,39.08538667,-76.75941444\\nFMN,Four Corners Regional,Farmington,NM,USA,36.74125,-108.2299444\\nFMY,Page,Ft. Myers,FL,USA,26.58661111,-81.86325\\nFMZ,Fairmont State,Fairmont,NE,USA,40.58569444,-97.57305556\\nFNB,Brenner,Falls City,NE,USA,40.07878611,-95.59199167\\nFNL,Fort Collins-Loveland,Fort Collins/Loveland,CO,USA,40.45182722,-105.0113356\\nFNR,Funter Bay SPB,Funter Bay,AK,USA,58.25438583,-134.8979067\\nFNT,Bishop,Flint,MI,USA,42.96550333,-83.74345639\\nFOA,Flora,Flora,IL,USA,38.66494528,-88.45299556\\nFOD,Fort Dodge Municipal,Fort Dodge,IA,USA,42.55145611,-94.19255111\\nFOE,Forbes,Topeka,KS,USA,38.95095194,-95.66361444\\nFOK,Francis Gabreski,Westhampton Beach,NY,USA,40.84365472,-72.63178917\\nFOT,Rohnerville,Fortuna,CA,USA,40.55393583,-124.1326589\\nFPR,St. Lucie County International,Ft. Pierce,FL,USA,27.49505556,-80.36827778\\nFQD,Rutherford County-Marchman,Rutherfordton,NC,USA,35.42822222,-81.93507778\\nFRG,Republic,Farmingdale,NY,USA,40.72878111,-73.41340722\\nFRH,French Lick Municipal,French Lick,IN,USA,38.50622139,-86.63693528\\nFRM,Fairmont Municipal,Fairmont,MN,USA,43.64394111,-94.41561556\\nFRR,Front Royal-Warren County,Front Royal,VA,USA,38.9175325,-78.25351472\\nFSD,Joe Foss,Sioux Falls,SD,USA,43.58135111,-96.74170028\\nFSE,Fosston Municipal,Fosston,MN,USA,47.59282028,-95.77349889\\nFSK,Fort Scott Municipal,Fort Scott,KS,USA,37.79843056,-94.76938111\\nFSM,Fort Smith Regional,Fort Smith,AR,USA,35.33659028,-94.36744111\\nFSO,Franklin County State,Highgate,VT,USA,44.94028083,-73.09746\\nFST,Fort Stockton - Pecos County,Fort Stockton,TX,USA,30.91566667,-102.9161389\\nFSU,Fort Sumner Municipal,Fort Sumner,NM,USA,34.48339944,-104.2171967\\nFSW,Fort Madison Municipal,Fort Madison,IA,USA,40.6592625,-91.3268175\\nFTG,Front Range,Denver,CO,USA,39.78525,-104.5431389\\nFTT,Elton Hensley Memorial,Fulton,MO,USA,38.83987472,-92.00421056\\nFTW,Fort Worth Meacham International,Fort Worth,TX,USA,32.81977778,-97.36244444\\nFTY,Fulton County - Brown,Atlanta,GA,USA,33.77913889,-84.52136111\\nFUL,Fullerton Municipal,Fullerton,CA,USA,33.87201417,-117.9797842\\nFVE,Northern Aroostook Regional,Frenchville,ME,USA,47.28550417,-68.31275\\nFVX,Farmville Municipal,Farmville,VA,USA,37.35752861,-78.43779806\\nFWA,Fort Wayne International,Fort Wayne,IN,USA,40.97846583,-85.19514639\\nFWC,Fairfield Municipal,Fairfield,IL,USA,38.37863306,-88.41265222\\nFWN,Sussex,Sussex,NJ,USA,41.20020667,-74.62305056\\nFWS,Spinks,Fort Worth,TX,USA,32.56522778,-97.30807778\\nFXE,Fort Lauderdale Executive,Ft. Lauderdale,FL,USA,26.19728,-80.17070833\\nFXY,Forest City Municipal,Forest City,IA,USA,43.23473417,-93.6241025\\nFYE,Fayette County,Somerville,TN,USA,35.20592,-89.39441667\\nFYM,Fayetteville Municipal,Fayetteville,TN,USA,35.05836278,-86.56441139\\nFYU,Fort Yukon,Fort Yukon,AK,USA,66.57149028,-145.2504169\\nFYV,Fayetteville Municipal,Fayetteville,AR,USA,36.00509472,-94.17005694\\nFZG,Fitzgerald Municipal,Fitzgerald,GA,USA,31.68368667,-83.27046056\\nFZI,Fostoria Metropolitan,Fostoria,OH,USA,41.19083111,-83.39453639\\nFZY,Oswego Cty,Fulton,NY,USA,43.35077528,-76.38805361\\nGAB,Gabbs,Gabbs,NV,USA,38.92409111,-117.9590072\\nGAD,Gadsden Municipal,Gadsden,AL,USA,33.97262528,-86.08900139\\nGAF,Grafton Municipal,Grafton,ND,USA,48.40469444,-97.37094444\\nGAG,Gage,Gage,OK,USA,36.29553889,-99.77642361\\nGAI,Montgomery Co Airpark,Gaithersburg,MD,USA,39.16833611,-77.166\\nGAL,Edward G. Pitka Sr.,Galena,AK,USA,64.73617806,-156.9374164\\nGAM,Gambell,Gambell,AK,USA,63.76676556,-171.7328236\\nGAS,Gallia - Meigs Regional,Gallipolis,OH,USA,38.83410833,-82.16342306\\nGBD,Great Bend Municipal,Great Bend,KS,USA,38.34441861,-98.85917028\\nGBG,Galesburg Municipal,Galesburg,IL,USA,40.93800194,-90.43112556\\nGBH,Galbraith Lake,Galbraith Lake,AK,USA,68.47906306,-149.4900214\\nGBR,Great Barrington,Great Barrington,MA,USA,42.18421417,-73.40324056\\nGCC,Gillette-Campbell County,Gillette,WY,USA,44.34889806,-105.5393614\\nGCK,Garden City Regional,Garden City,KS,USA,37.92751556,-100.7244147\\nGCM,Claremore Regional,Claremore,OK,USA,36.29441667,-95.47966667\\nGCN,Grand Canyon National Park,Grand Canyon,AZ,USA,35.95235389,-112.1469647\\nGCT,Guthrie County Regional,Guthrie Center,IA,USA,41.68776417,-94.43524611\\nGCY,Greeneville Municipal,Greeneville,TN,USA,36.19299083,-82.81507028\\nGDM,Gardner Municipal,Gardner,MA,USA,42.54986639,-72.01602194\\nGDV,Dawson Community,Glendive,MT,USA,47.13871861,-104.8071994\\nGDW,Gladwin,Gladwin,MI,USA,43.97063278,-84.47503861\\nGDY,Grundy Municipal,Grundy,VA,USA,37.23240111,-82.12499083\\nGED,Sussex Cty Arpt,Georgetown,DE,USA,38.68919444,-75.35888889\\nGEG,Spokane Intl,Spokane,WA,USA,47.61985556,-117.5338425\\nGEO,Brown County,Georgetown,OH,USA,38.88195778,-83.88273278\\nGEU,Glendale Municipal,Glendale,AZ,USA,33.52726278,-112.2951564\\nGEY,South Big Horn County,Greybull,WY,USA,44.51644444,-108.0831944\\nGEZ,Shelbyville Municipal,Shelbyville,IN,USA,39.58316583,-85.80481\\nGFK,Grand Forks International,Grand Forks,ND,USA,47.949255,-97.17611111\\nGFL,Floyd D. Bennett,Glens Falls,NY,USA,43.34121,-73.6103075\\nGFZ,Greenfield Municipal,Greenfield,IA,USA,41.32702778,-94.44572222\\nGGE,Georgetown County,Georgetown,SC,USA,33.31169444,-79.31958333\\nGGF,Grant Municipal,Grant,NE,USA,40.86952778,-101.7328611\\nGGG,Gregg County,Longview,TX,USA,32.38486111,-94.71171\\nGGI,Grinnell Municipal,Grinnell,IA,USA,41.70916083,-92.73491278\\nGGP,Logansport Municipal,Logansport,IN,USA,40.71126139,-86.37449917\\nGGW,Wokal Field/Glasgow Intl,Glasgow,MT,USA,48.21246417,-106.6148231\\nGHM,Centerville Municipal,Centerville,TN,USA,35.83742722,-87.445375\\nGHW,Glenwood Municipal,Glenwood,MN,USA,45.64389167,-95.32043056\\nGIF,Winter Havens Gilbert,Winter Haven,FL,USA,28.06291667,-81.75330556\\nGJT,Walker,Grand Junction,CO,USA,39.1224125,-108.5267347\\nGKJ,Port Meadville,Meadville,PA,USA,41.62652667,-80.2147275\\nGKN,Gulkana,Gulkana,AK,USA,62.15488889,-145.4566389\\nGKT,Gatlinburg-Pigeon Forge,Sevierville,TN,USA,35.85775889,-83.52870472\\nGKY,Arlington Municipal,Arlington,TX,USA,32.66241528,-97.09391139\\nGLD,Renner Field/Goodland Municipal,Goodland,KS,USA,39.37062194,-101.6989919\\nGLE,Gainesville Municipal,Gainesville,TX,USA,33.65136111,-97.19702778\\nGLH,Mid Delta Regional,Greenville,MS,USA,33.48288111,-90.98561389\\nGLR,Otsego County,Gaylord,MI,USA,45.01354806,-84.70318944\\nGLS,Galveston-Scholes,Galveston,TX,USA,29.26532333,-94.86040667\\nGLW,Glasgow Municipal,Glasgow,KY,USA,37.03205556,-85.95261111\\nGLY,Clinton Memorial,Clinton,MO,USA,38.35657306,-93.68417694\\nGMJ,Grove Municipal,Grove,OK,USA,36.60527056,-94.73856667\\nGMU,Greenville Downtown,Greenville,SC,USA,34.84794444,-82.35\\nGNB,Granby-Grand County,Granby,CO,USA,40.08970806,-105.9172367\\nGNF,Grenada Municipal,Grenada,MS,USA,33.83253,-89.79822806\\nGNG,Gooding Municipal,Gooding,ID,USA,42.91716639,-114.7651575\\nGNT,Grants-Milan Municipal,Grants,NM,USA,35.16531472,-107.9006142\\nGNU,Goodnews,Goodnews,AK,USA,59.11727556,-161.5813967\\nGNV,Gainesville Regional,Gainesville,FL,USA,29.69005556,-82.27177778\\nGOK,Guthrie Municipal,Guthrie,OK,USA,35.84980556,-97.41560833\\nGON,Groton-New London,Groton,CT,USA,41.33005778,-72.04513556\\nGPH,Clay County Regional,Mosby,MO,USA,39.33046528,-94.30997361\\nGPM,Grand Prairie Municipal,Grand Prairie,TX,USA,32.69858333,-97.04652778\\nGPT,Gulfport-Biloxi Regional,Gulfport-Biloxi,MS,USA,30.40728028,-89.07009278\\nGPZ,Grand Rapids-Itasca County,Grand Rapids,MN,USA,47.21110333,-93.50984472\\nGQQ,Galion Municipal,Galion,OH,USA,40.75338889,-82.72380556\\nGRB,Austin Straubel International,Green Bay,WI,USA,44.48507333,-88.12959\\nGRD,Greenwood County,Greenwood,SC,USA,34.24872222,-82.15908333\\nGRE,Greenville,Greenville,IL,USA,38.83615778,-89.37841111\\nGRI,Central Nebraska Regional,Grand Island,NE,USA,40.96747222,-98.30861111\\nGRK,Robert Gray AAF,Killeen,TX,USA,31.06489778,-97.82779778\\nGRN,Gordon Municipal,Gordon,NE,USA,42.80597222,-102.17525\\nGRO,Rota International,Rota Island,CQ,USA,14.1743075,-145.2425353\\nGRR,Kent County International,Grand Rapids,MI,USA,42.88081972,-85.52276778\\nGSH,Goshen Municipal,Goshen,IN,USA,41.52716028,-85.79210278\\nGSN,Saipan International,Obyan,CQ,USA,15.11900139,-145.7293561\\nGSO,Piedmont Triad International,Greensboro,NC,USA,36.09774694,-79.9372975\\nGSP,Greenville-Spartanburg,Greer,SC,USA,34.89566722,-82.21885833\\nGST,Gustavus,Gustavus,AK,USA,58.42438139,-135.7073814\\nGTF,Great Falls Intl,Great Falls,MT,USA,47.48200194,-111.3706853\\nGTR,Golden Triangle Regional,Columbus-Starkville-West Point,MS,USA,33.45033444,-88.59136861\\nGTU,Georgetown Municipal,Georgetown,TX,USA,30.67880889,-97.67938389\\nGUC,Gunnison County,Gunnison,CO,USA,38.53396333,-106.9331817\\nGUM,Guam International,Agana,GU,USA,13.48345,-144.7959825\\nGUP,Gallup Municipal,Gallup,NM,USA,35.51105833,-108.7893094\\nGUY,Guymon Municipal,Guymon,OK,USA,36.68507194,-101.5077817\\nGVL,Lee Gilmer Memorial,Gainesville,GA,USA,34.27290389,-83.82681333\\nGVQ,Genesee Cty,Batavia,NY,USA,43.03172639,-78.16759972\\nGVT,Majors,Greenville,TX,USA,33.06783889,-96.0653325\\nGWO,Greenwood-Leflore,Greenwood,MS,USA,33.49432667,-90.084705\\nGWR,Gwinner-Roger Melroe,Gwinner,ND,USA,46.21872222,-97.64325\\nGWW,Goldsboro-Wayne Municipal,Goldsboro,NC,USA,35.46055444,-77.96493306\\nGXY,Greeley-Weld County,Greeley,CO,USA,40.43561833,-104.6321156\\nGYH,Donaldson Center,Greenville,SC,USA,34.75831917,-82.376415\\nGYR,Phoenix Goodyear,Goodyear,AZ,USA,33.42281972,-112.3759919\\nGYY,Gary/Chicago,Gary,IN,USA,41.61627306,-87.41278806\\nGZH,Middleton,Evergreen,AL,USA,31.41580111,-87.04404333\\nGZS,Abernathy,Pulaski,TN,USA,35.15371972,-87.05681444\\nH04,Vinita Municipal,Vinita,OK,USA,36.63301806,-95.15136111\\nH05,Wilburton Municipal,Wilburton,OK,USA,34.91954278,-95.39469722\\nH19,Bowling Green Municipal,Bowling Green,MO,USA,39.36993361,-91.21925556\\nH21,Camdenton Memorial,Camdenton,MO,USA,37.97468528,-92.69161528\\nH30,Hamilton Municipal,Hamilton,NY,USA,42.84381889,-75.56140194\\nH35,Clarksville Municipal,Clarksville,AR,USA,35.47069417,-93.427155\\nH41,Memorial,Mexico,MO,USA,39.15751389,-91.81826667\\nH45,Seminole Municipal,Seminole,OK,USA,35.27467806,-96.67516194\\nH66,Nowata Municipal,Nowata,OK,USA,36.72092222,-95.62525583\\nH71,Mid-America Industrial,Pryor,OK,USA,36.22539389,-95.33006333\\nH79,Eldon Model Airpark,Eldon,MO,USA,38.36062611,-92.57157139\\nH88,Municipal,Fredericktown,MO,USA,37.605825,-90.28731389\\nH92,Hominy,Hominy,OK,USA,36.43340222,-96.38362861\\nH96,Benton Municipal,Benton,IL,USA,38.00675111,-88.93441528\\nH97,Pawnee Municipal,Pawnee,OK,USA,36.38338556,-96.8103125\\nHAB,Marion County,Hamilton,AL,USA,34.11757222,-87.99819583\\nHAE,Hannibal Municipal,Hannibal,MO,USA,39.72448944,-91.44367944\\nHAF,Half Moon Bay,Half Moon Bay,CA,USA,37.51382944,-122.5010892\\nHAI,Three Rivers Municipal,Three Rivers,MI,USA,41.95975,-85.59338889\\nHAO,Hamilton-Fairfield,Hamilton,OH,USA,39.36448861,-84.52457722\\nHAY,Haycock,Haycock,AK,USA,65.20098944,-161.1567792\\nHBC,Mohall Municipal,Mohall,ND,USA,48.76838333,-101.5369953\\nHBG,Bobby L. Chain Municipal,Hattiesburg,MS,USA,31.26506556,-89.2530325\\nHBR,Hobart Municipal,Hobart,OK,USA,34.9913075,-99.0513525\\nHBV,Jim Hogg County,Hebbronville,TX,USA,27.34955556,-98.73697222\\nHBZ,Heber Springs Municipal,Heber Springs,AR,USA,35.51169389,-92.01300944\\nHCD,Hutchinson Municipal,Hutchinson,MN,USA,44.85890667,-94.38178917\\nHCO,Hallock Municipal,Hallock,MN,USA,48.75273139,-96.94300306\\nHDC,Hammond Municipal,Hammond,LA,USA,30.52096889,-90.41762056\\nHDE,Brewster,Holdredge,NE,USA,40.45269444,-99.33733333\\nHDH,Dillingham Airfield,Mokuleia,HI,USA,21.57947361,-158.1972814\\nHDI,Hardwick,Cleveland,TN,USA,35.22007306,-84.83244333\\nHDN,Yampa Valley,Hayden,CO,USA,40.48118028,-107.2176597\\nHDO,Hondo Municipal,Hondo,TX,USA,29.35952778,-99.17666667\\nHEE,Thompson-Robbins,Helena-West Helena,AR,USA,34.57648972,-90.67588639\\nHEF,Manassas Reg./Harry P Davis,Manassas,VA,USA,38.72141667,-77.51544444\\nHEI,Hettinger Municipal,Hettinger,ND,USA,46.01494444,-102.6559722\\nHEQ,Holyoke,Holyoke,CO,USA,40.56943056,-102.2726875\\nHEZ,Natchez-Adams County,Natchez,MS,USA,31.61366111,-91.29733639\\nHFD,Hartford Brainard,Hartford,CT,USA,41.73626861,-72.65021389\\nHFY,Greenwood Municipal,Indianapolis/Greenwood,IN,USA,39.62841667,-86.08788889\\nHGR,Hagerstown Regional-Richard Henson,Hagerstown,MD,USA,39.70794444,-77.7295\\nHHF,Hemphill County,Canadian,TX,USA,35.89530778,-100.4036397\\nHHG,Huntington Municipal,Huntington,IN,USA,40.85299,-85.45941917\\nHHH,Hilton Head,NA,NA,USA,32.224384,-80.697629\\nHHR,Jack Northrop Field/Hawthorne Municipal,Hawthorne,CA,USA,33.92283972,-118.3351872\\nHHW,Stan Stamper Municipal,Hugo,OK,USA,34.03482556,-95.54190611\\nHI01,Princeville,Hanalei,HI,USA,22.20919,-159.4455339\\nHIB,Chisholm-Hibbing,Hibbing,MN,USA,47.38659917,-92.83899333\\nHIE,Mt Washington Regional,Whitefield,NH,USA,44.36761639,-71.54447111\\nHIG,Higginsville Industrial Municipal,Higginsville,MO,USA,39.07334639,-93.67716083\\nHII,Lake Havasu City,Lake Havasu City,AZ,USA,34.56816056,-114.3561783\\nHIO,Portland-Hillsboro,Hillsboro (Portland),OR,USA,45.54039389,-122.9498258\\nHJH,Hebron Municipal,Hebron,NE,USA,40.15225,-97.58697222\\nHJO,Hanford Municipal,Hanford,CA,USA,36.31852194,-119.6288675\\nHKA,Blytheville Municipal,Blytheville,AR,USA,35.94040667,-89.83080583\\nHKS,Hawkins,Jackson,MS,USA,32.3347725,-90.22253167\\nHKY,Hickory Municipal,Hickory,NC,USA,35.74114639,-81.38954889\\nHLC,Hill City Municipal,Hill City,KS,USA,39.37883611,-99.83149444\\nHLG,Wheeling-Ohio Cty,Wheeling,WV,USA,40.175,-80.64627778\\nHLN,Helena Regional,Helena,MT,USA,46.60681806,-111.9827503\\nHLX,Twin County,Galax,VA,USA,36.76611472,-80.82356556\\nHMT,Hemet-Ryan,Hemet,CA,USA,33.73398167,-117.0225258\\nHMZ,Bedford County,Bedford,PA,USA,40.08536861,-78.51221778\\nHNB,Huntingburg,Huntingburg,IN,USA,38.24902583,-86.95371833\\nHNH,Hoonah,Hoonah,AK,USA,58.09609139,-135.4096975\\nHNL,Honolulu International,Honolulu,HI,USA,21.31869111,-157.9224072\\nHNM,Hana,Hana,HI,USA,20.79563722,-156.0144378\\nHNR,Harlan Municipal,Harlan,IA,USA,41.58438889,-95.33963889\\nHNS,Haines,Haines,AK,USA,59.24522806,-135.5221086\\nHNZ,Henderson-Oxford,Oxford,NC,USA,36.36156111,-78.52916639\\nHOB,Lea County Regional,Hobbs,NM,USA,32.68752778,-103.2170278\\nHOC,Highland County,Hillsboro,OH,USA,39.18875944,-83.53880694\\nHOE,Homerville,Homerville,GA,USA,31.05591667,-82.77413889\\nHOM,Homer,Homer,AK,USA,59.64555556,-151.4765833\\nHON,Huron Regional,Huron,SD,USA,44.38520056,-98.2285425\\nHOT,Memorial,Hot Springs,AR,USA,34.47803389,-93.09620833\\nHOU,William P Hobby,Houston,TX,USA,29.64541861,-95.27888889\\nHPB,Hooper Bay,Hooper Bay,AK,USA,61.52418306,-166.1467797\\nHPN,Westchester Cty,White Plains,NY,USA,41.06695778,-73.70757444\\nHPT,Hampton Municipal,Hampton,IA,USA,42.72372361,-93.22634056\\nHQG,Hugoton Municipal,Hugoton,KS,USA,37.16308056,-101.3705267\\nHQM,Bowerman,Hoquiam,WA,USA,46.97120167,-123.9365581\\nHQU,Thomson-McDuffie County,Thomson,GA,USA,33.52972639,-82.51678556\\nHQZ,Mesquite Metro,Mesquite,TX,USA,32.74696278,-96.53041722\\nHRI,Hermiston Muni,Hermiston,OR,USA,45.82822222,-119.2591667\\nHRL,Valley International,Harlingen,TX,USA,26.22850611,-97.65439389\\nHRO,Boone County,Harrison,AR,USA,36.26152056,-93.15472889\\nHRR,Healy River,Healy,AK,USA,63.86620806,-148.9689842\\nHRU,Herington Municipal,Herington,KS,USA,38.68322389,-96.80800639\\nHRX,Hereford Municipal,Hereford,TX,USA,34.85761639,-102.3272017\\nHSA,Stennis International,Bay St Louis,MS,USA,30.36780778,-89.45461083\\nHSB,Harrisburg-Raleigh,Harrisburg,IL,USA,37.8115,-88.54913889\\nHSE,Billy Mitchell,Hatteras,NC,USA,35.2327875,-75.617795\\nHSI,Hastings Municipal,Hastings,NE,USA,40.60525,-98.42788889\\nHSL,Huslia,Huslia,AK,USA,65.70055556,-156.3875\\nHSP,Ingalls,Hot Springs,VA,USA,37.95144444,-79.83389444\\nHSR,Hot Springs Municipal,Hot Springs,SD,USA,43.36824528,-103.3881378\\nHSV,Huntsville International,Huntsville,AL,USA,34.6404475,-86.77310944\\nHTH,Hawthorne Municipal,Hawthorne,NV,USA,38.54436583,-118.6343003\\nHTL,Roscommon County,Houghton Lake,MI,USA,44.35980556,-84.67111111\\nHTO,East Hampton,East Hampton,NY,USA,40.95957778,-72.25185056\\nHTS,Tri-State/Walker-Long,Huntington,WV,USA,38.36666667,-82.55802778\\nHTW,\\\"Lawrence County Airpark,Inc\\\",Chesapeake,OH,USA,38.41924861,-82.4943225\\nHUF,Terre Haute International-Hulman,Terre Haute,IN,USA,39.45146361,-87.30756111\\nHUL,Houlton International,Houlton,ME,USA,46.12308333,-67.79205556\\nHUM,Houma-Terrebonne,Houma,LA,USA,29.5665,-90.66041667\\nHUS,Hughes,Hughes,AK,USA,66.04112167,-154.2631903\\nHUT,Hutchinson Municipal,Hutchinson,KS,USA,38.06548306,-97.86063361\\nHVC,Hopkinsville-Christian County,Hopkinsville,KY,USA,36.85658333,-87.45725\\nHVE,Hanksville,Hanksville,UT,USA,38.41803722,-110.7040378\\nHVN,Tweed-New Haven,New Haven,CT,USA,41.26389889,-72.8871\\nHVR,Havre City-County,Havre,MT,USA,48.542985,-109.7623419\\nHVS,Hartsville Municipal,Hartsville,SC,USA,34.40308333,-80.11922222\\nHWD,Hayward Executive,Hayward,CA,USA,37.65926528,-122.1224083\\nHWI,Hawk Inlet SPB,Hawk Inlet,AK,USA,58.12744139,-134.7559531\\nHWO,North Perry,Hollywood,FL,USA,26.00142417,-80.24052056\\nHWQ,Wheatland County At Harlowton,Harlowton,MT,USA,46.4541225,-109.8549061\\nHWV,Brookhaven,Shirley,NY,USA,40.81676528,-72.86204722\\nHXD,Hilton Head,Hilton Head Island,SC,USA,32.22436111,-80.69747222\\nHXF,Hartford Municipal,Hartford,WI,USA,43.34927806,-88.39112528\\nHYA,Barnstable Mun Boardman/Polando,Hyannis,MA,USA,41.66933639,-70.28035583\\nHYG,Hydaburg SPB,Hydaburg,AK,USA,55.20631611,-132.8283131\\nHYI,San Marcos Municipal,San Marcos,TX,USA,29.89361111,-97.86469444\\nHYL,Hollis SPB,Hollis,AK,USA,55.48158833,-132.6460942\\nHYR,Sawyer County,Hayward,WI,USA,46.02585722,-91.44424278\\nHYS,Hays Municipal,Hays,KS,USA,38.84494167,-99.27403361\\nHYW,Conway-Horry County,Conway,SC,USA,33.8285,-79.12216667\\nHZD,Carroll County,Huntingdon,TN,USA,36.08930722,-88.46329778\\nHZE,Mercer County Regional,Hazen,ND,USA,47.28986111,-101.5809444\\nHZL,Hazleton Muni,Hazleton,PA,USA,40.98677778,-75.99488889\\nHZR,False River Air Park,New Roads,LA,USA,30.71832333,-91.47866972\\nHZY,Ashtabula County,Ashtabula,OH,USA,41.77797528,-80.69551333\\nI05,Sturgis Municipal,Sturgis,KY,USA,37.54083333,-87.95183333\\nI12,Sidney Municipal,Sidney,OH,USA,40.24127944,-84.15101167\\nI16,Kee,Pineville,WV,USA,37.60044444,-81.55927778\\nI18,Jackson County,Ravenswood,WV,USA,38.92977778,-81.81947222\\nI19,Greene County,Dayton,OH,USA,39.69172639,-83.99023806\\nI22,Randolph County,Winchester,IN,USA,40.16885083,-84.92585333\\nI23,Fayette County,Washington Court House,OH,USA,39.57040167,-83.42052444\\nI25,Welch Muni,Welch,WV,USA,37.41678056,-81.52899417\\nI32,Morehead-Rowan County,Morehead,KY,USA,38.13341472,-83.53796528\\nI34,Greensburg-Decatur County,Greensburg,IN,USA,39.32691111,-85.52252694\\nI35,Tucker-Guthrie Memorial,Harlan,KY,USA,36.85981028,-83.36101639\\nI39,Madison County,Richmond,KY,USA,37.63152778,-84.33244444\\nI40,Richard Downing,Coshocton,OH,USA,40.30918056,-81.85338194\\nI42,Paoli Municipal,Paoli,IN,USA,38.58338806,-86.46248778\\nI43,James A Rhodes,Jackson,OH,USA,38.98135194,-82.57785667\\nI50,Stanton,Stanton,KY,USA,37.85008167,-83.84575194\\nI57,Pike County,Waverly,OH,USA,39.16693333,-82.928175\\nI63,Mt. Sterling Municipal,Mt. Sterling,IL,USA,39.9875,-90.80416667\\nI66,Clinton,Wilmington,OH,USA,39.50286111,-83.86305556\\nI67,Cincinnati West,Harrison,OH,USA,39.25894444,-84.77430556\\nI68,Lebanon-Warren County,Lebanon,OH,USA,39.46217306,-84.25184722\\nI69,Clermont County,Batavia,OH,USA,39.07839722,-84.21020722\\nI74,Grimes,Urbana,OH,USA,40.12928306,-83.7548775\\nI75,Osceola Municipal,Osceola,IA,USA,41.05221889,-93.68966222\\nI76,Peru Municipal,Peru,IN,USA,40.78631889,-86.14638306\\nI78,Union County,Marysville,OH,USA,40.22469444,-83.35161111\\nI83,Salem Municipal,Salem,IN,USA,38.60200167,-86.13997889\\nI86,Perry County,New Lexington,OH,USA,39.69159667,-82.19778583\\nI88,Pontiac Municipal,Pontiac,IL,USA,40.92372222,-88.6255\\nI93,Breckinridge County,Hardinsburg,KY,USA,37.78505944,-86.44192194\\nI95,Hardin County,Kenton,OH,USA,40.61072,-83.64359694\\nIAD,Washington Dulles International,Chantilly,VA,USA,38.94453194,-77.45580972\\nIAG,Niagara Falls Intl,Niagara Falls,NY,USA,43.10725861,-78.94538139\\nIAH,George Bush Intercontinental,Houston,TX,USA,29.98047222,-95.33972222\\nIAN,Bob Baker Memorial,Kiana,AK,USA,66.97937611,-160.4358597\\nIBM,Robert E. Arraj,Kimball,NE,USA,41.18805556,-103.6773889\\nICL,Schenck,Clarinda,IA,USA,40.72178361,-95.02642667\\nICT,Wichita Mid-Continent,Wichita,KS,USA,37.64995889,-97.43304583\\nIDA,Idaho Falls Regional,Idaho Falls,ID,USA,43.51455556,-112.0701667\\nIDI,Indiana Cty/Jimmy Stewart,Indiana,PA,USA,40.63222222,-79.10552778\\nIDL,Indianola Municipal,Indianola,MS,USA,33.48574611,-90.67887611\\nIDP,Independence Municipal,Independence,KS,USA,37.15837222,-95.77838333\\nIEM,Whittier,Whittier,AK,USA,60.7772125,-148.7215775\\nIEN,Pine Ridge,Pine Ridge,SD,USA,43.02257694,-102.5110728\\nIER,Natchitoches Municipal,Natchitoches,LA,USA,31.73572,-93.09913639\\nIFA,Iowa Falls Municipal,Iowa Falls,IA,USA,42.47078639,-93.26995361\\nIFP,Laughlin/Bullhead International,Bullhead City,AZ,USA,35.15738889,-114.5595278\\nIGG,Igiugig,Igiugig,AK,USA,59.32373528,-155.9032733\\nIGM,Kingman,Kingman,AZ,USA,35.25947222,-113.9380556\\nIGQ,Lansing Municipal,Chicago/Lansing,IL,USA,41.53988889,-87.53216667\\nIGT,Nightmute,Nightmute,AK,USA,60.47032722,-164.6856414\\nIIB,Independence Municipal,Independence,IA,USA,42.45359833,-91.94761833\\nIIK,Kipnuk,Kipnuk,AK,USA,59.93295111,-164.0305131\\nIIY,Washington-Wilkes County,Washington,GA,USA,33.77987528,-82.81661639\\nIJD,Windham,Willimantic,CT,USA,41.74404028,-72.18023583\\nIJX,Jacksonville Municipal,Jacksonville,IL,USA,39.77429694,-90.23856583\\nIKK,Greater Kankakee,Kankakee,IL,USA,41.07140417,-87.84626861\\nIKV,Ankeny Regional,Ankeny,IA,USA,41.69128556,-93.56630333\\nILE,Killeen Municipal,Killeen,TX,USA,31.08583333,-97.6865\\nILG,New Castle County,Wilmington,DE,USA,39.67872222,-75.60652778\\nILI,Iliamna,Iliamna,AK,USA,59.75380028,-154.9109597\\nILM,Wilmington International,Wilmington,NC,USA,34.27061111,-77.90255556\\nIML,Imperial Municipal,Imperial,NE,USA,40.50930556,-101.6205278\\nIMM,Immokalee,Immokalee,FL,USA,26.43316667,-81.40102778\\nIMS,Madison Municipal,Madison,IN,USA,38.75888889,-85.46552778\\nIMT,Ford,Iron Mountain/Kingsford,MI,USA,45.81835417,-88.1145425\\nIN03,Indianapolis Downtown,Indianapolis,IN,USA,39.76587639,-86.148875\\nIND,Indianapolis International,Indianapolis,IN,USA,39.71732917,-86.29438417\\nINK,Winkler County,Wink,TX,USA,31.77962833,-103.2013619\\nINL,Falls International,International Falls,MN,USA,48.56618722,-93.40306667\\nINT,Smith Reynolds,Winston-Salem,NC,USA,36.13372222,-80.222\\nINW,Winslow-Lindbergh Regional,Winslow,AZ,USA,35.02191667,-110.7225278\\nIOB,Mt Sterling-Montgomery County,Mount Sterling,KY,USA,38.05813889,-83.97958333\\nIOW,Iowa City Municipal,Iowa City,IA,USA,41.63924389,-91.54650333\\nIPJ,Lincoln County,Lincolnton,NC,USA,35.48332889,-81.16125833\\nIPL,Imperial County,Imperial,CA,USA,32.83422028,-115.5787456\\nIPT,Williamsport-Lycoming Cty,Williamsport,PA,USA,41.24183583,-76.92109556\\nIRK,Kirksville Regional,Kirksville,MO,USA,40.09364444,-92.54496917\\nIRS,Kirsch Municipal,Sturgis,MI,USA,41.8128725,-85.43906111\\nISM,Kissimmee Municipal,Orlando,FL,USA,28.28980556,-81.43708333\\nISN,Sloulin Field International,Williston,ND,USA,48.17793861,-103.6423467\\nISO,Kinston Regional Jetport At Stallin,Kinston,NC,USA,35.32807944,-77.61552611\\nISP,Long Island - MacArthur,Islip,NY,USA,40.7952425,-73.10021194\\nISQ,Schoolcraft County,Manistique,MI,USA,45.97464056,-86.17183056\\nISW,Alexander,Wisconsin Rapids,WI,USA,44.36033833,-89.83897056\\nISZ,Cincinnati-Blue Ash,Cincinnati,OH,USA,39.24669444,-84.38897222\\nITH,Tompkins Cty,Ithaca,NY,USA,42.49102778,-76.45844444\\nITO,Hilo International,Hilo,HI,USA,19.72026306,-155.0484703\\nITR,Kit Carson County,Burlington,CO,USA,39.2425,-102.2853889\\nIWA,Williams Gateway,Phoenix,AZ,USA,33.30783333,-111.6554722\\nIWD,Gogebic County,Ironwood,MI,USA,46.52747472,-90.13139667\\nIWH,Wabash Municipal,Wabash,IN,USA,40.76195972,-85.79873417\\nIWI,Wiscasset,Wiscasset,ME,USA,43.96141667,-69.71255556\\nIWK,Wales,Wales,AK,USA,65.62394028,-168.0991719\\nIWS,West Houston,Houston,TX,USA,29.81819444,-95.67261111\\nIXD,New Century Aircenter,Olathe,KS,USA,38.83090472,-94.89030333\\nIYK,Inyokern,Inyokern,CA,USA,35.65884306,-117.8295122\\nIYS,Wasilla,Wasilla,AK,USA,61.57196083,-149.5405556\\nIZA,Santa Ynez,Santa Ynez,CA,USA,34.60682028,-120.0755617\\nIZG,Eastern Slopes Regional,Fryeburg,ME,USA,43.99114472,-70.94787444\\nJAC,Jackson Hole,Jackson,WY,USA,43.60732417,-110.7377389\\nJAN,Jackson International,Jackson,MS,USA,32.31116667,-90.07588889\\nJAS,Jasper County -Bell,Jasper,TX,USA,30.89058333,-94.03483333\\nJAU,Campbell County,Jacksboro,TN,USA,36.33457556,-84.16234472\\nJAX,Jacksonville International,Jacksonville,FL,USA,30.49405556,-81.68786111\\nJBR,Jonesboro Municipal,Jonesboro,AR,USA,35.83186111,-90.64616667\\nJCT,Kimble County,Junction,TX,USA,30.51126,-99.76345528\\nJDN,Jordan,Jordan,MT,USA,47.33333417,-106.9339564\\nJEF,Jefferson City Memorial,Jefferson City,MO,USA,38.59117917,-92.15614389\\nJER,Jerome County,Jerome,ID,USA,42.72663639,-114.4571506\\nJES,Jesup-Wayne County,Jesup,GA,USA,31.55408333,-81.88344444\\nJFK,John F Kennedy Intl,New York,NY,USA,40.63975111,-73.77892556\\nJFX,Walker County,Jasper,AL,USA,33.90199528,-87.31416639\\nJHM,Kapalua,Lahaina,HI,USA,20.96293639,-156.6730317\\nJHW,Chautauqua Cty,Jamestown,NY,USA,42.15336861,-79.258035\\nJKA,Jack Edwards,Gulf Shores,AL,USA,30.28951667,-87.67371472\\nJKJ,Moorhead Municipal,Moorhead,MN,USA,46.83919194,-96.66313028\\nJKL,Julian Carroll,Jackson,KY,USA,37.59386111,-83.31725\\nJLN,Joplin Regional,Joplin,MO,USA,37.15181361,-94.49826833\\nJMR,Mora Municipal,Mora,MN,USA,45.88609722,-93.27177833\\nJMS,Jamestown Municipal,Jamestown,ND,USA,46.92971944,-98.67819528\\nJNU,Juneau International,Juneau,AK,USA,58.35496194,-134.5762764\\nJNX,Johnston County,Smithfield,NC,USA,35.54094139,-78.39032944\\nJOT,Joliet Park District,Chicago/Joliet,IL,USA,41.51805833,-88.17525583\\nJQF,Concord Regional,Concord,NC,USA,35.38520694,-80.70971389\\nJRA,Port Authority-W 30th St Midtown Heliport,New York,NY,USA,40.75454583,-74.00708389\\nJRB,Downtown Manhattan/Wall St. Heliport,New York,NY,USA,40.70121361,-74.00902833\\nJRF,Kalaeloa (John Rodgers),Kapolei,HI,USA,21.30735389,-158.0703017\\nJSO,Jacksonville-Cherokee County,Jacksonville,TX,USA,31.86933667,-95.21739028\\nJST,Johnstown-Cambria Cty,Johnstown,PA,USA,40.31611111,-78.83394444\\nJVL,Rock County,Janesville,WI,USA,42.61958222,-89.04034028\\nJVY,Clark County,Jeffersonville,IN,USA,38.36562278,-85.73829639\\nJWG,Watonga,Watonga,OK,USA,35.86469444,-98.42075\\nJWN,John C. Tune,Nashville,TN,USA,36.18236194,-86.88672278\\nJXN,Jackson County Reynolds,Jackson,MI,USA,42.25978556,-84.45940361\\nJYG,St James Municipal,St James,MN,USA,43.98631833,-94.55793722\\nJYL,Plantation Airpark,Sylvania,GA,USA,32.64544861,-81.59649722\\nJYM,Hillsdale Municipal,Hillsdale,MI,USA,41.92126083,-84.5857625\\nJYO,Leesburg Executive,Leesburg,VA,USA,39.07797222,-77.5575\\nJYR,Municipal,York,NE,USA,40.89675,-97.62277778\\nJZI,Charleston Executive,Charleston,SC,USA,32.70086111,-80.00291667\\nJZP,Pickens County,Jasper,GA,USA,34.45147972,-84.45659278\\nJZZ,Koliganek,Koliganek,AK,USA,59.72664194,-157.2594722\\nK01,Farington,Auburn,NE,USA,40.38750167,-95.78916167\\nK02,Perryville Municipal,Perryville,MO,USA,37.86866667,-89.86213889\\nK06,Greater Beardstown,Beardstown,IL,USA,39.97338139,-90.40373556\\nK09,Piseco Muni,Piseco,NY,USA,43.45340222,-74.51765083\\nK15,Linn Creek-Grand Glaize Memorial,Osage Beach,MO,USA,38.11045,-92.68054583\\nK20,Wendell H. Ford,Hazard,KY,USA,37.38783833,-83.26205889\\nK22,Big Sandy Regional,Prestonburg,KY,USA,37.75102778,-82.63669444\\nK24,Russell County,Jamestown,KY,USA,37.00888889,-85.10277778\\nK29,Council,Council,AK,USA,64.89788278,-163.7034472\\nK33,Salem Memorial,Salem,MO,USA,37.61523333,-91.60444167\\nK34,Municipal,Gardner,KS,USA,38.80708333,-94.95602778\\nK39,St Clair Memorial,St Clair,MO,USA,38.37594333,-90.97073944\\nK46,Blair Municipal,Blair,NE,USA,41.41805139,-96.1136275\\nK54,Teller,Teller,AK,USA,65.24089806,-166.3360067\\nK57,Gould Peterson Municipal,Tarkio,MO,USA,40.44583139,-95.36275806\\nK59,Amelia Earhart,Atchison,KS,USA,39.57052472,-95.18033139\\nK61,Moritz Memorial,Beloit,KS,USA,39.47115222,-98.12878389\\nK62,Falmouth Pendleton County,Falmouth,KY,USA,38.70423611,-84.39160417\\nK67,Oswego Municipal,Oswego,KS,USA,37.15978667,-95.04246222\\nK68,Garnett Municipal,Garnett,KS,USA,38.27918833,-95.21691833\\nK78,Abilene Municipal,Abilene.,KS,USA,38.90405583,-97.23585389\\nK81,Miami County,Paola,KS,USA,38.53751389,-94.92524194\\nK82,Smith Center Municipal,Smith Center,KS,USA,39.76112278,-98.79343639\\nK83,Sabetha Municipal,Sabetha,KS,USA,39.90416667,-95.7794325\\nK88,Allen County,Iola,KS,USA,37.87008333,-95.38638889\\nK89,Macon-Fower Memorial,Macon,MO,USA,39.72870694,-92.464455\\nK96,Tuscola,Tuscola,IL,USA,39.78086528,-88.30616\\nKAE,Kake SPB,Kake,AK,USA,56.97299639,-133.9456147\\nKAL,Kaltag,Kaltag,AK,USA,64.32571917,-158.7441475\\nKCC,Coffman Cove SPB,Coffman Cove,AK,USA,56.00324444,-132.8419689\\nKCL,Chignik Lagoon,Chignik Flats,AK,USA,56.31116306,-158.5359264\\nKEB,English Bay,English Bay,AK,USA,59.35214833,-151.9251558\\nKEK,Ekwok,Ekwok,AK,USA,59.35399444,-157.4744092\\nKFP,False Pass,False Pass,AK,USA,54.84744583,-163.4103222\\nKGX,Grayling,Grayling,AK,USA,62.89456056,-160.0649042\\nKIB,Ivanof Bay SPB,Ivanof Bay,AK,USA,55.89753333,-159.4886689\\nKIC,Mesa Del Rey,King City,CA,USA,36.22802139,-121.1218614\\nKKA,Koyuk,Koyuk,AK,USA,64.93404056,-161.158145\\nKKB,Kitoi Bay SPB,Kitoi Bay,AK,USA,58.19094611,-152.3704875\\nKLG,Kalskag,Kalskag,AK,USA,61.53627389,-160.3413306\\nKLL,Levelock,Levelock,AK,USA,59.11816472,-156.8652169\\nKLS,Kelso-Longview,Kelso,WA,USA,46.118,-122.8983889\\nKNB,Kanab Muni,Kanab,UT,USA,37.01110583,-112.5311936\\nKNW,Stuyahok,New Stuyahok,AK,USA,59.44955333,-157.3271908\\nKOA,Kona International At Keahole,Kailua/Kona,HI,USA,19.73876583,-156.0456314\\nKPB,Point Baker SPB,Point Baker,AK,USA,56.35185972,-133.6225864\\nKPH,Pauloff Harbor SPB,Pauloff Harbor,AK,USA,54.45912028,-162.6936406\\nKQA,Akutan SPB,Akutan,AK,USA,54.13246694,-165.7853111\\nKSM,St. Mary's,St. Mary's,AK,USA,62.06048639,-163.3021108\\nKTB,Thorne Bay,Thorne Bay,AK,USA,55.68796194,-132.5366758\\nKTN,Ketchikan International,Ketchikan,AK,USA,55.35556861,-131.71374\\nKTS,Brevig Mission,Brevig Mission,AK,USA,65.33136111,-166.4631667\\nKVC,King Cove,King Cove,AK,USA,55.1163475,-162.2662272\\nKVL,Kivalina,Kivalina,AK,USA,67.73125333,-164.5518019\\nKWT,Kwethluk,Kwethluk,AK,USA,60.80425194,-161.44535\\nKXA,Kasaan SPB,Kasaan,AK,USA,55.53741389,-132.3975144\\nKYK,Karluk,Karluk,AK,USA,57.56706389,-154.4503714\\nKYU,Koyukuk,Koyukuk,AK,USA,64.87714278,-157.7158358\\nL04,Holtville,Holtville,CA,USA,32.84032361,-115.2674806\\nL05,Kern Valley,Kernville,CA,USA,35.72828472,-118.4198069\\nL06,Furnace Creek,Death Valley National Park,CA,USA,36.46383694,-116.8814425\\nL08,Borrego Valley,Borrego Springs,CA,USA,33.25902778,-116.3209722\\nL12,Redlands Municipal,Redlands,CA,USA,34.08526167,-117.1463789\\nL15,Henderson,Las Vegas,NV,USA,35.97636444,-115.1327708\\nL17,Taft-Kern County,Taft,CA,USA,35.14107806,-119.4412294\\nL18,Fallbrook Community Airpark,Fallbrook,CA,USA,33.35419806,-117.2508686\\nL19,Wasco-Kern County,Wasco,CA,USA,35.61967889,-119.3537242\\nL26,Hesperia,Hesperia,CA,USA,34.37722333,-117.3158783\\nL31,Greater St. Tammany Parish,Covington,LA,USA,30.44505417,-89.98887889\\nL35,Big Bear City,Big Bear,CA,USA,34.26361944,-116.854475\\nL38,Louisiana Regional,Gonzales,LA,USA,30.17135306,-90.94039583\\nL39,Leesville,Leesville,LA,USA,31.16819444,-93.34245833\\nL42,Allen Parish,Oakdale,LA,USA,30.75016667,-92.68847222\\nL45,Bakersfield Municipal,Bakersfield,CA,USA,35.32483333,-118.9958333\\nL49,South Lafourche,Galliano,LA,USA,29.44482222,-90.26111667\\nL52,Oceano County,Oceano,CA,USA,35.10136472,-120.6221153\\nL67,Rialto Municipal,Rialto,CA,USA,34.12934361,-117.4016303\\nL70,Agua Dulce Airpark,Agua Dulce,CA,USA,34.50415889,-118.3128561\\nL71,California City Municipal,California City,CA,USA,35.15125306,-118.0166667\\nL72,Trona,Trona,CA,USA,35.81245333,-117.3272783\\nL75,Southland,Sulphur,LA,USA,30.13138889,-93.37611111\\nL83,Thibodaux Municipal,Thibodaux,LA,USA,29.74779194,-90.83289889\\nL84,Lost Hills-Kern County,Lost Hills,CA,USA,35.62357083,-119.6862383\\nL92,Alamo Landing,Alamo,NV,USA,37.36246083,-115.1944622\\nLAA,Lamar Muni,Lamar,CO,USA,38.06969444,-102.6885\\nLAF,Purdue University,Lafayette,IN,USA,40.41231694,-86.93689889\\nLAL,Lakeland Linder Regional,Lakeland,FL,USA,27.98891667,-82.01855556\\nLAM,Los Alamos,Los Alamos,NM,USA,35.87980194,-106.2694153\\nLAN,Capital City,Lansing,MI,USA,42.7787,-84.58735806\\nLAR,Laramie Regional,Laramie,WY,USA,41.31205,-105.6749864\\nLAS,McCarran International,Las Vegas,NV,USA,36.08036111,-115.1523333\\nLAW,Lawton-Ft Sill Regional,Lawton,OK,USA,34.56771444,-98.41663667\\nLAX,Los Angeles International,Los Angeles,CA,USA,33.94253611,-118.4080744\\nLBB,Lubbock International,Lubbock,TX,USA,33.66363889,-101.8227778\\nLBE,Arnold Palmer Regional,Latrobe,PA,USA,40.27594,-79.40479722\\nLBF,North Platte Regional,North Platte,NE,USA,41.12621194,-100.6836542\\nLBL,Liberal Municipal,Liberal,KS,USA,37.04420944,-100.9598611\\nLBO,Floyd W Jones Lebanon,Lebanon,MO,USA,37.64718056,-92.65375778\\nLBT,Lumberton Municipal,Lumberton,NC,USA,34.60991667,-79.05944444\\nLBX,Brazoria County,Angleton,TX,USA,29.10863889,-95.46208056\\nLCG,Wayne Municipal,Wayne,NE,USA,42.24188889,-96.98141667\\nLCH,Lake Charles Regional,Lake Charles,LA,USA,30.1260975,-93.22340361\\nLCI,Laconia Municipal,Laconia,NH,USA,43.57272806,-71.41890028\\nLCK,Rickenbacker International,Columbus,OH,USA,39.81375917,-82.92786472\\nLCQ,Lake City Municipal,Lake City,FL,USA,30.18205556,-82.57686111\\nLDJ,Linden,Linden,NJ,USA,40.61744722,-74.24459417\\nLDM,Mason County,Ludington,MI,USA,43.96253278,-86.40791528\\nLEB,Lebanon Municipal,Lebanon,NH,USA,43.62637222,-72.30426722\\nLEE,Leesburg Regional,Leesburg,FL,USA,28.82274417,-81.80900722\\nLEM,Lemmon Municipal,Lemmon,SD,USA,45.91869722,-102.1061778\\nLEW,Auburn-Lewiston Municipal,Auburn-Lewiston,ME,USA,44.04847278,-70.2835075\\nLEX,Blue Grass,Lexington,KY,USA,38.03697222,-84.60538889\\nLFK,Lufkin-Angelina County,Lufkin,TX,USA,31.23401389,-94.75\\nLFT,Lafayette Regional,Lafayette,LA,USA,30.20527972,-91.987655\\nLGA,LaGuardia,New York,NY,USA,40.77724306,-73.87260917\\nLGB,Long Beach (Daugherty),Long Beach,CA,USA,33.81772222,-118.1516111\\nLGC,LaGrange-Callaway,Lagrange,GA,USA,33.00884694,-85.07260556\\nLGD,La Grande/Union County,La Grande,OR,USA,45.29020944,-118.0071108\\nLGU,Logan-Cache,Logan,UT,USA,41.78773083,-111.8526822\\nLHD,Lake Hood SPB,Anchorage,AK,USA,61.18000361,-149.9719322\\nLHM,Lincoln Regional,Lincoln,CA,USA,38.90916111,-121.3513361\\nLHQ,Fairfield County,Lancaster,OH,USA,39.75564722,-82.65711\\nLHV,Wm T Piper Memorial,Lock Haven,PA,USA,41.13618028,-77.42053556\\nLHX,La Junta Muni,La Junta,CO,USA,38.05134111,-103.5106908\\nLHZ,Franklin County,Louisburg,NC,USA,36.02334528,-78.33027139\\nLIC,Limon Municipal,Limon,CO,USA,39.272765,-103.6663392\\nLIH,Lihue,Lihue,HI,USA,21.97598306,-159.3389581\\nLIT,Adams,Little Rock,AR,USA,34.72939611,-92.22424556\\nLJF,Litchfield Municipal,Litchfield,MN,USA,45.09712889,-94.50726833\\nLKP,Lake Placid,Lake Placid,NY,USA,44.26447361,-73.96186639\\nLKR,Lancaster County,Lancaster,SC,USA,34.72291667,-80.85458333\\nLKU,Louisa County / Freeman,Louisa,VA,USA,38.00983333,-77.97013889\\nLKV,Lake County,Lakeview,OR,USA,42.16111111,-120.3990703\\nLLJ,Challis,Challis,ID,USA,44.52297806,-114.2175642\\nLLQ,Monticello Municipal,Monticello,AR,USA,33.6385525,-91.75101833\\nLLU,Lamar Municipal,Lamar,MO,USA,37.4894925,-94.31150444\\nLMS,Louisville-Winston County,Louisville,MS,USA,33.14620944,-89.06247917\\nLMT,Klamath Falls International,Klamath Falls,OR,USA,42.15614361,-121.7332081\\nLNA,Palm Beach County Park,Lantana,FL,USA,26.593,-80.08505556\\nLNC,Lancaster,Lancaster,TX,USA,32.57919111,-96.71905111\\nLND,Hunt,Lander,WY,USA,42.81523611,-108.7298392\\nLNK,Lincoln Municipal,Lincoln,NE,USA,40.85097222,-96.75925\\nLNL,Kings Land O' Lakes,Land O' Lakes,WI,USA,46.15387722,-89.21194417\\nLNN,Lost Nation,Willoughby,OH,USA,41.68391667,-81.39030556\\nLNP,Lonesome Pine,Wise,VA,USA,36.98743194,-82.53017361\\nLNS,Lancaster,Lancaster,PA,USA,40.12171528,-76.29609778\\nLNY,Lanai,Lanai City,HI,USA,20.78561111,-156.9514181\\nLOL,Derby,Lovelock,NV,USA,40.066405,-118.5651664\\nLOT,Lewis University,Chicago/Romeoville,IL,USA,41.60844444,-88.09094444\\nLOU,Bowman,Louisville,KY,USA,38.228,-85.66372222\\nLOZ,London-Corbin Magee,London,KY,USA,37.08727778,-84.07677778\\nLPC,Lompoc,Lompoc,CA,USA,34.66561028,-120.4667883\\nLPR,Lorain Co Regional,Lorain/Elyria,OH,USA,41.34427778,-82.17763889\\nLQK,Pickens County,Pickens,SC,USA,34.80997222,-82.70288889\\nLQR,Larned-Pawnee County,Larned,KS,USA,38.20809667,-99.08607306\\nLRD,Laredo International,Laredo,TX,USA,27.54373861,-99.46154361\\nLRG,Lincoln Regional,Lincoln,ME,USA,45.36216083,-68.53474694\\nLRJ,Le Mars Municipal,Le Mars,IA,USA,42.77801778,-96.19368944\\nLRU,Las Cruces International,Las Cruces,NM,USA,32.28941667,-106.9219722\\nLSB,Lordsburg Municipal,Lordsburg,NM,USA,32.33278083,-108.6909742\\nLSE,La Crosse Municipal,La Crosse,WI,USA,43.87937972,-91.25653778\\nLSK,Lusk Muni,Lusk,WY,USA,42.75380806,-104.4045536\\nLSN,Los Banos Municipal,Los Banos,CA,USA,37.06290556,-120.8692511\\nLUG,Ellington,Lewisburg,TN,USA,35.506975,-86.80388611\\nLUK,Cincinnati Muni-Lunken,Cincinnati,OH,USA,39.10334417,-84.41861417\\nLUL,Hesler-Noble,Laurel,MS,USA,31.67255139,-89.17222417\\nLUP,Kalaupapa,Kalaupapa,HI,USA,21.21104028,-156.9735972\\nLVJ,Clover,Houston,TX,USA,29.52130556,-95.24216667\\nLVK,Livermore Municipal,Livermore,CA,USA,37.69339944,-121.8203519\\nLVM,Mission,Livingston,MT,USA,45.69938889,-110.4483056\\nLVN,Airlake,Minneapolis,MN,USA,44.62785361,-93.22810806\\nLVS,Las Vegas Municipal,Las Vegas,NM,USA,35.65422222,-105.1423889\\nLWB,Greenbrier Valley,Lewisburg,WV,USA,37.85830556,-80.39947222\\nLWC,Lawrence Municipal,Lawrence,KS,USA,39.01115222,-95.21657694\\nLWD,Lamoni Municipal,Lamoni,IA,USA,40.63333306,-93.90217028\\nLWL,Wells Municipal/Harriet,Wells,NV,USA,41.11853306,-114.9222661\\nLWM,Lawrence Municipal,Lawrence,MA,USA,42.71720944,-71.12343\\nLWS,Lewiston-Nez Perce County,Lewiston,ID,USA,46.37449806,-117.0153944\\nLWT,Lewistown Muni,Lewistown,MT,USA,47.04913944,-109.4666006\\nLWV,Lawrenceville-Vincennes Municipal,Lawrenceville,IL,USA,38.76429639,-87.60549556\\nLXL,Little Falls - Morrison County,Little Falls,MN,USA,45.94943778,-94.34708472\\nLXN,Lexington (Jim Kelly),Lexington,NE,USA,40.791,-99.77727778\\nLXT,Lee's Summit Municipal,Lee's Summit,MO,USA,38.95975,-94.37158333\\nLXV,Lake County,Leadville,CO,USA,39.2202675,-106.3166906\\nLXY,Mexia-Limestone County,Mexia,TX,USA,31.63983472,-96.51472222\\nLYH,Lynchburg Municipal-Preston Glenn,Lynchburg,VA,USA,37.32668528,-79.20043056\\nLYO,Lyons-Rice County Municipal,Lyons,KS,USA,38.34261472,-98.22709639\\nLZU,Gwinnett County,Lawrenceville,GA,USA,33.97807611,-83.96237722\\nM01,General Dewitt Spain,Memphis,TN,USA,35.20069278,-90.05397694\\nM02,Dickson Municipal,Dickson,TN,USA,36.12931722,-87.43007056\\nM03,Dennis F Cantrell,Conway,AR,USA,35.08080778,-92.42496167\\nM04,Covington Municipal,Covington,TN,USA,35.583365,-89.58722167\\nM05,Caruthersville Memorial,Caruthersville,MO,USA,36.17506917,-89.67508\\nM08,William L. Whitehurst,Bolivar,TN,USA,35.21445944,-89.04336222\\nM09,Piedmont Municipal,Piedmont,MO,USA,37.12671694,-90.7128975\\nM11,Copiah County,Crystal Springs,MS,USA,31.90293639,-90.36870222\\nM13,Poplarville-Pearl River County,Poplarville,MS,USA,30.78602056,-89.50450694\\nM15,Perry County,Linden,TN,USA,35.59590306,-87.87669361\\nM16,John Bell Williams,Raymond,MS,USA,32.30334111,-90.40848333\\nM17,Bolivar Municipal,Bolivar,MO,USA,37.59693194,-93.34765\\nM18,Hope Municipal,Hope,AR,USA,33.72008889,-93.65884556\\nM19,Newport Municipal,Newport,AR,USA,35.63771778,-91.17637556\\nM21,Muhlenberg County,Greenville,KY,USA,37.22561111,-87.15752778\\nM22,Russellville Municipal,Russellville,AL,USA,34.44953972,-87.71030833\\nM23,James H. Easom,Newton,MS,USA,32.31181111,-89.13589194\\nM24,Dean Griffin Memorial,Wiggins,MS,USA,30.84324389,-89.15977333\\nM25,Mayfield-Graves County,Mayfield,KY,USA,36.76911111,-88.58472222\\nM27,Waldron Municipal,Waldron,AR,USA,34.87509944,-94.10993056\\nM29,Hassel,Clifton,TN,USA,35.38507528,-87.96752833\\nM30,Metropolis Municipal,Metropolis,IL,USA,37.18588722,-88.75061\\nM32,Lake Village Municipal,Lake Village,AR,USA,33.3459775,-91.31569833\\nM33,Sumner County Regional,Gallatin,TN,USA,36.37684472,-86.40875861\\nM34,Kentucky Dam State Park,Gilbertsville,KY,USA,37.00950028,-88.29586639\\nM36,Frank Federer Memorial,Brinkley,AR,USA,34.88000194,-91.1764375\\nM37,Ruleville-Drew,Drew,MS,USA,33.77639167,-90.52500833\\nM39,Mena Intermountain Municipal,Mena,AR,USA,34.54539444,-94.20265278\\nM40,Monroe County,Aberdeen-Amory,MS,USA,33.87374861,-88.48967833\\nM41,Holly Springs-Marshall County,Holly Springs,MS,USA,34.80434611,-89.5211075\\nM43,Prentiss-Jefferson Davis County,Prentiss,MS,USA,31.59544583,-89.90619056\\nM44,Houston Municipal,Houston,MS,USA,33.89177944,-89.02367194\\nM46,Colstrip,Colstrip,MT,USA,45.85285,-106.7092722\\nM48,Houston Memorial,Houston,MO,USA,37.33009167,-91.97316944\\nM52,Franklin-Wilkins,Lexington,TN,USA,35.65131944,-88.37893444\\nM53,Humboldt Municipal,Humboldt,TN,USA,35.80218,-88.87494944\\nM54,Lebanon Municipal,Lebanon,TN,USA,36.19041667,-86.31569444\\nM58,Monett Municipal,Monett,MO,USA,36.90621528,-94.01275833\\nM59,Richton-Perry County,Richton,MS,USA,31.31739944,-88.93504778\\nM60,Woodruff County,Augusta,AR,USA,35.27175278,-91.27040417\\nM65,Wynne Municipal,Wynne,AR,USA,35.23160167,-90.76155111\\nM70,Pocahontas Municipal,Pocahontas,AR,USA,36.24551111,-90.95520444\\nM72,New Albany-Union County,New Albany,MS,USA,34.54722222,-89.02416667\\nM73,Almyra Municipal,Almyra,AR,USA,34.41232833,-91.46634722\\nM75,Malta,Malta,MT,USA,48.36694167,-107.9193444\\nM76,Picayune Municipal,Picayune,MS,USA,30.48748472,-89.65119306\\nM77,Howard County,Nashville,AR,USA,33.99673833,-93.83813583\\nM78,Malvern Municipal,Malvern,AR,USA,34.33331583,-92.76149944\\nM79,John H Hooks Jr Memorial,Rayville,LA,USA,32.48633611,-91.77087528\\nM82,Madison County Executive,Huntsville,AL,USA,34.85645028,-86.55621472\\nM83,McCharen,West Point,MS,USA,33.58403556,-88.66668694\\nM89,Dexter B. Florence Memorial,Arkadelphia,AR,USA,34.09984639,-93.06611694\\nM91,Springfield-Robertson County,Springfield,TN,USA,36.53726194,-86.92068917\\nM95,Richard Arthur,Fayette,AL,USA,33.71221972,-87.81504639\\nM97,Tunica Municipal,Tunica,MS,USA,34.69232306,-90.35065389\\nM99,Saline County/Watts,Benton,AR,USA,34.55656472,-92.60693972\\nMAC,Herbert Smart Downtown,Macon,GA,USA,32.82213889,-83.56202778\\nMAE,Madera Municipal,Madera,CA,USA,36.9857175,-120.1119844\\nMAF,Midland International,Midland,TX,USA,31.94252778,-102.2019139\\nMAI,Marianna Municipal,Marianna,FL,USA,30.83780556,-85.18188889\\nMAL,Malone-Dufort,Malone,NY,USA,44.85365722,-74.32894972\\nMAO,Marion County,Marion,SC,USA,34.18116667,-79.33472222\\nMAW,Malden Municipal,Malden,MO,USA,36.60055694,-89.99220278\\nMAZ,Eugenio Maria De Hostos,Mayaguez,PR,USA,18.25569444,-67.14847222\\nMBG,Mobridge Municipal,Mobridge,SD,USA,45.54650361,-100.4079192\\nMBL,Manistee County Blacker,Manistee,MI,USA,44.27319722,-86.2490025\\nMBO,Bruce Campbell,Madison,MS,USA,32.43866444,-90.10309222\\nMBS,Mbs International,Saginaw,MI,USA,43.53291472,-84.07964722\\nMBT,Murfreesboro Municipal,Murfreesboro,TN,USA,35.87748444,-86.37753222\\nMBY,Omar N Bradley,Moberly,MO,USA,39.46392583,-92.42759778\\nMCB,McComb-Pike County,McComb,MS,USA,31.17845444,-90.47187528\\nMCD,Mackinac Island,Mackinac Island,MI,USA,45.86493444,-84.63734444\\nMCE,Merced Municipal/MacReady,Merced,CA,USA,37.28472861,-120.5138858\\nMCG,McGrath,McGrath,AK,USA,62.95287361,-155.6057625\\nMCI,Kansas City International,Kansas City,MO,USA,39.29760528,-94.71390556\\nMCK,McCook Municipal,McCook,NE,USA,40.20638889,-100.5918056\\nMCN,Middle Georgia Regional,Macon,GA,USA,32.69284944,-83.64921083\\nMCO,Orlando International,Orlando,FL,USA,28.42888889,-81.31602778\\nMCW,Mason City Municipal,Mason City,IA,USA,43.1577925,-93.33126056\\nMCX,White County,Monticello,IN,USA,40.70881639,-86.76676139\\nMCZ,Martin County,Williamston,NC,USA,35.86219306,-77.17820278\\nMDD,Midland Airpark,Midland,TX,USA,32.03652444,-102.1010278\\nMDF,Mooreland Municipal,Mooreland,OK,USA,36.48475778,-99.19415778\\nMDH,Southern Illinois,Carbondale,IL,USA,37.77809583,-89.25203111\\nMDR,Medfra,Medfra,AK,USA,63.10577694,-154.7189806\\nMDS,Madison Municipal,Madison,SD,USA,44.01597222,-97.08593333\\nMDT,Harrisburg Intl,Harrisburg,PA,USA,40.19349528,-76.76340361\\nMDW,Chicago Midway,Chicago,IL,USA,41.7859825,-87.75242444\\nMDZ,Taylor County,Medford,WI,USA,45.10097556,-90.30341\\nMEB,Laurinburg-Maxton,Maxton,NC,USA,34.79193917,-79.36584778\\nMEI,Key,Meridian,MS,USA,32.33313333,-88.75120556\\nMEJ,Meade Municipal,Meade,KS,USA,37.27938889,-100.3563056\\nMEM,Memphis International,Memphis,TN,USA,35.04241667,-89.97666667\\nMER,Castle,Atwater,CA,USA,37.38048056,-120.5681889\\nMEV,Minden-Tahoe,Minden,NV,USA,39.00030889,-119.7508064\\nMEY,Mapleton Municipal,Mapleton,IA,USA,42.178295,-95.79364528\\nMFD,Mansfield Lahm Municipal,Mansfield,OH,USA,40.82141667,-82.51663889\\nMFE,McAllen Miller International,McAllen,TX,USA,26.17583333,-98.23861111\\nMFI,Marshfield Municipal,Marshfield,WI,USA,44.63687972,-90.18932667\\nMFR,Rogue Valley International,Medford,OR,USA,42.37422778,-122.8734978\\nMFV,Accomack County,Melfa,VA,USA,37.64688889,-75.76105556\\nMGC,Michigan City Municipal,Michigan City,IN,USA,41.70331694,-86.82124167\\nMGJ,Orange Cty,Montgomery,NY,USA,41.50998278,-74.26465056\\nMGM,Montgomery Regional Apt,Montgomery,AL,USA,32.30064417,-86.39397611\\nMGR,Moultrie Municipal,Moultrie,GA,USA,31.08490917,-83.80325528\\nMGW,Morgantown Muni-Walter L. Bill Hart Fld.,Morgantown,WV,USA,39.6429075,-79.91631417\\nMGY,Dayton Wright Brothers,Dayton,OH,USA,39.58897222,-84.22486111\\nMHE,Mitchell Municipal,Mitchell,SD,USA,43.77483333,-98.03861111\\nMHK,Manhattan Regional,Manhattan,KS,USA,39.14096722,-96.67083278\\nMHL,Marshall Memorial Municipal,Marshall,MO,USA,39.09575472,-93.20287889\\nMHM,Minchumina,Minchumina,AK,USA,63.880565,-152.3006756\\nMHP,Metter Municipal,Metter,GA,USA,32.37388889,-82.07919444\\nMHR,Sacramento Mather,Sacramento,CA,USA,38.55389694,-121.2975908\\nMHT,Manchester,Manchester,NH,USA,42.93451639,-71.43705583\\nMHV,Mojave,Mojave,CA,USA,35.05936472,-118.1518561\\nMIA,Miami International,Miami,FL,USA,25.79325,-80.29055556\\nMIB,Minot AFB,NA,NA,USA,48.415769,-101.358039\\nMIC,Crystal,Minneapolis,MN,USA,45.06198611,-93.3539375\\nMIE,Delaware County,Muncie,IN,USA,40.24234806,-85.39586\\nMIO,Miami Municipal,Miami,OK,USA,36.90922083,-94.88750028\\nMIT,Shafter-Minter,Shafter,CA,USA,35.50592944,-119.1915236\\nMIV,Millville Muni,Millville,NJ,USA,39.36780556,-75.07222222\\nMIW,Marshalltown Municipal,Marshalltown,IA,USA,42.11272639,-92.91778778\\nMJQ,Jackson Municipal,Jackson,MN,USA,43.65004111,-94.98654611\\nMJX,Robert J. Miller Airpark,Toms River,NJ,USA,39.92749806,-74.29237917\\nMKA,Miller Municipal,Miller,SD,USA,44.52524444,-98.95811444\\nMKC,Downtown,Kansas City,MO,USA,39.12324111,-94.592735\\nMKE,General Mitchell International,Milwaukee,WI,USA,42.94722222,-87.89658333\\nMKG,Muskegon County,Muskegon,MI,USA,43.16948806,-86.23822306\\nMKJ,Mountain Empire,Marion,VA,USA,36.8948525,-81.349955\\nMKK,Molokai,Kaunakakai,HI,USA,21.15288583,-157.0962561\\nMKL,McKellar-Sipes Regional,Jackson,TN,USA,35.59987944,-88.91561611\\nMKO,Davis,Muskogee,OK,USA,35.65773028,-95.36164889\\nMKT,Mankato Regional,Mankato,MN,USA,44.22164528,-93.91874333\\nMKV,Marksville Municipal,Marksville,LA,USA,31.09466,-92.06906861\\nMKY,Marco Island,Marco Island,FL,USA,25.99502778,-81.67252778\\nMLB,Melbourne International,Melbourne,FL,USA,28.10275,-80.64580556\\nMLC,McAlester Regional,McAlester,OK,USA,34.88240194,-95.78346278\\nMLE,Millard,Omaha,NE,USA,41.196,-96.11227778\\nMLF,Milford Municipal,Milford,UT,USA,38.4266325,-113.0124564\\nMLI,Quad City,Moline,IL,USA,41.44852639,-90.50753917\\nMLJ,Baldwin County,Milledgeville,GA,USA,33.15419444,-83.24061111\\nMLL,Marshall,Marshall,AK,USA,61.8659225,-162.0690456\\nMLS,Frank Wiley,Miles City,MT,USA,46.42795972,-105.8862397\\nMLT,Millinocket Municipal,Millinocket,ME,USA,45.64783611,-68.68556194\\nMLU,Monroe Regional,Monroe,LA,USA,32.51086556,-92.03768778\\nMLY,Manley Hot Springs,Manley Hot Springs,AK,USA,64.99756472,-150.6441297\\nMMH,Mammoth Yosemite,Mammoth Lakes,CA,USA,37.62404861,-118.8377722\\nMMI,McMinn County,Athens,TN,USA,35.39730333,-84.56256861\\nMMK,Meriden-Markham Municipal,Meriden,CT,USA,41.50871472,-72.82947833\\nMML,Marshall Muni - Ryan,Marshall,MN,USA,44.45006611,-95.82234028\\nMMU,Morristown Municipal,Morristown,NJ,USA,40.79935,-74.41487472\\nMMV,McMinnville Muni,McMinnville,OR,USA,45.19444444,-123.1359444\\nMNF,Mountain View,Mountain View,MO,USA,36.99282694,-91.71445611\\nMNI,Clarendon County,Manning,SC,USA,33.58711111,-80.20866667\\nMNM,Menominee-Marinette Twin County,Menominee,MI,USA,45.12665028,-87.63844056\\nMNN,Marion Municipal,Marion,OH,USA,40.61625,-83.06347222\\nMNV,Monroe County,Madisonville,TN,USA,35.54537222,-84.380235\\nMNZ,Hamilton Municipal,Hamilton,TX,USA,31.66592639,-98.1486375\\nMO6,Washington Memorial,Washington,MO,USA,38.59163472,-90.99761444\\nMO85,Lawrence Smith Memorial,Harrisonville,MO,USA,38.61102222,-94.34213056\\nMOB,Mobile Regional,Mobile,AL,USA,30.69141667,-88.24283333\\nMOD,Modesto City-County-Harry Sham,Modesto,CA,USA,37.62581722,-120.9544214\\nMOP,Mount Pleasant Municipal,Mount Pleasant,MI,USA,43.62166833,-84.737485\\nMOR,Moore-Murrell,Morristown,TN,USA,36.17939639,-83.37544944\\nMOT,Minot International,Minot,ND,USA,48.25937778,-101.2803339\\nMOU,Mountain Village,Mountain Village,AK,USA,62.09536222,-163.6820594\\nMOX,Morris Municipal,Morris,MN,USA,45.56651667,-95.96763611\\nMPE,Philadelphia Municipal,Philadelphia,MS,USA,32.7995775,-89.12589472\\nMPJ,Petit Jean Park,Morrilton,AR,USA,35.13886306,-92.90919694\\nMPO,Pocono Mountains Muni,Mount Pocono,PA,USA,41.1374775,-75.37887833\\nMPR,McPherson,McPherson,KS,USA,38.35243722,-97.69133028\\nMPV,Edward F Knapp State,Barre-Montpelier,VT,USA,44.203505,-72.56232944\\nMPZ,Mount Pleasant Municipal,Mount Pleasant,IA,USA,40.94661389,-91.511075\\nMQB,Macomb Municipal,Macomb,IL,USA,40.52034556,-90.65246389\\nMQI,Dare County Regional,Manteo,NC,USA,35.91898806,-75.69553944\\nMQJ,Mount Comfort,Indianapolis,IN,USA,39.84348556,-85.89706389\\nMQT,Marquette County Airport,NA,NA,USA,46.353639,-87.395361\\nMQW,Telfair-Wheeler,McRae,GA,USA,32.09577778,-82.88002778\\nMQY,Smyrna,Smyrna,TN,USA,36.00897944,-86.52007667\\nMRB,Eastern Wv Reg/Shephard,Martinsburg,WV,USA,39.40193278,-77.98458139\\nMRC,Maury County,Columbia-Mt Pleasant,TN,USA,35.55413889,-87.17891667\\nMRF,Marfa Municipal,Marfa,TX,USA,30.37147222,-104.0166944\\nMRH,Michael J. Smith,Beaufort,NC,USA,34.73355028,-76.66059611\\nMRI,Merrill,Anchorage,AK,USA,61.21437861,-149.8461614\\nMRJ,Iowa County,Mineral Point,WI,USA,42.88532917,-90.23198583\\nMRN,Morganton-Lenoir,Morganton,NC,USA,35.82149222,-81.61073639\\nMRY,Monterey Peninsula,Monterey,CA,USA,36.5869825,-121.8429478\\nMSA,Mount Pleasant Municipal,Mount Pleasant,TX,USA,33.12936111,-94.97563889\\nMSL,Northwest Alabama Regional,Muscle Shoals,AL,USA,34.74532028,-87.61023222\\nMSN,Dane County Regional,Madison,WI,USA,43.13985778,-89.33751361\\nMSO,Missoula International,Missoula,MT,USA,46.91630556,-114.0905556\\nMSP,Minneapolis-St Paul Intl,Minneapolis,MN,USA,44.88054694,-93.2169225\\nMSS,Massena Int'l-Richards,Massena,NY,USA,44.93582722,-74.84554583\\nMSV,Sullivan Cty Intl,Monticello,NY,USA,41.70164917,-74.79501389\\nMSY,New Orleans International,New Orleans,LA,USA,29.99338889,-90.25802778\\nMTH,Florida Keys Marathon,Marathon,FL,USA,24.72614083,-81.05137806\\nMTJ,Montrose Regional,Montrose,CO,USA,38.50886722,-107.8938333\\nMTM,Metlakatla SPB,Metlakatla,AK,USA,55.13104528,-131.5780675\\nMTN,Martin State,Baltimore,MD,USA,39.32566333,-76.41376556\\nMTO,Coles County Memorial,Mattoon-Charleston,IL,USA,39.47793722,-88.27923833\\nMTP,Montauk,Montauk,NY,USA,41.07694333,-71.92039972\\nMTV,Blue Ridge,Martinsville,VA,USA,36.63074861,-80.01834917\\nMTW,Manitowoc County,Manitowoc,WI,USA,44.1287725,-87.68058472\\nMUE,Waimea-Kohala,Kamuela,HI,USA,20.00132694,-155.6681072\\nMUT,Muscatine Municipal,Muscatine,IA,USA,41.36786333,-91.14821639\\nMVC,Monroe County,Monroeville,AL,USA,31.45805306,-87.35104028\\nMVE,Montevideo-Chippewa County,Montevideo,MN,USA,44.96905556,-95.71025\\nMVI,Monte Vista Muni,Monte Vista,CO,USA,37.52855833,-106.0460533\\nMVL,Morrisville-Stowe State,Morrisville,VT,USA,44.53460806,-72.61400444\\nMVM,Machias Valley,Machias,ME,USA,44.70311111,-67.47861111\\nMVN,Mt Vernon-Outland,Mt. Vernon,IL,USA,38.32335444,-88.85847917\\nMVY,Marthas Vineyard,Marthas Vineyard,MA,USA,41.39302583,-70.6143325\\nMWA,Williamson County,Marion,IL,USA,37.75313528,-89.01159694\\nMWC,Lawrence J Timmerman,Milwaukee,WI,USA,43.11092694,-88.03442194\\nMWH,Grant County,Moses Lake,WA,USA,47.20770806,-119.3201897\\nMWK,Mount Airy-Surry County,Mount Airy,NC,USA,36.459735,-80.55295722\\nMWL,Mineral Wells Municipal,Mineral Wells,TX,USA,32.78160556,-98.060175\\nMWM,Windom Municipal,Windom,MN,USA,43.91340167,-95.10940833\\nMWO,Hook Field Municipal,Middletown,OH,USA,39.53102778,-84.39527778\\nMXA,Manila Municipal,Manila,AR,USA,35.89444444,-90.15456944\\nMXO,Monticello Municipal,Monticello,IA,USA,42.22611111,-91.16708333\\nMYF,Montgomery,San Diego,CA,USA,32.81573306,-117.1395664\\nMYK,May Creek,May Creek,AK,USA,61.33567417,-142.686775\\nMYL,McCall,McCall,ID,USA,44.88879556,-116.1017497\\nMYR,Myrtle Beach International,Myrtle Beach,SC,USA,33.67975,-78.92833333\\nMYU,Mekoryuk,Mekoryuk,AK,USA,60.37142,-166.2706083\\nMYV,Yuba County,Marysville,CA,USA,39.09777278,-121.569825\\nMYZ,Marysville Municipal,Marysville,KS,USA,39.85416833,-96.63021389\\nMZJ,Pinal Airpark,Marana,AZ,USA,32.50984389,-111.3253339\\nMZZ,Marion Municipal,Marion,IN,USA,40.49037278,-85.67914389\\nN00,Maben,Lexington,NY,USA,42.27230778,-74.39403667\\nN03,Cortland Cty-Chase,Cortland,NY,USA,42.59264528,-76.2148825\\nN04,Griswold,Madison,CT,USA,41.27118222,-72.54972972\\nN07,Lincoln Park,Lincoln Park,NJ,USA,40.94752444,-74.31450139\\nN10,Perkiomen Valley,Collegeville,PA,USA,40.20404833,-75.43026306\\nN12,Lakewood,Lakewood,NJ,USA,40.0667825,-74.17764167\\nN13,Bloomsburg Muni,Bloomsburg,PA,USA,40.99778111,-76.43605583\\nN14,Flying W,Lumbrerton,NJ,USA,39.93427778,-74.80725\\nN23,Sidney Muni,Sidney,NY,USA,42.30258,-75.41595639\\nN24,Questa Municipal Nr 2,Questa,NM,USA,36.80030556,-105.5975\\nN25,Westport,\\\"Westport, NY\\\",NY,USA,44.15838611,-73.43290444\\nN27,Bradford County,Towanda,PA,USA,41.74324028,-76.44457083\\nN29,Magdalena,Magdalena,NM,USA,34.09450778,-107.2978142\\nN30,Cherry Ridge,Honesdale,PA,USA,41.51533861,-75.25148139\\nN35,Punxsutawney Muni,Punxsutawney,PA,USA,40.96667472,-78.93000528\\nN37,Monticello,Monticello,NY,USA,41.62249167,-74.70141111\\nN38,Grand Canyon State,Wellsboro,PA,USA,41.72790028,-77.39651139\\nN40,Sky Manor,Pittstown,NJ,USA,40.56626889,-74.97864139\\nN47,Pottstown Muni,Pottstown,PA,USA,40.26040083,-75.67085306\\nN51,Solberg-Hunterdon,Readington,NJ,USA,40.58286278,-74.73656222\\nN53,Stroudsburg-Pocono,East Stroudsburg,PA,USA,41.03587167,-75.16067889\\nN57,New Garden Flying,Toughkenamon,PA,USA,39.83052639,-75.76974472\\nN66,Oneonta Muni,Oneonta,NY,USA,42.52476694,-75.06446167\\nN67,Wings,Ambler,PA,USA,40.13647333,-75.26702972\\nN68,Chambersburg Muni,Chambersburg,PA,USA,39.97295167,-77.64326778\\nN69,Stormville,Stormville,NY,USA,41.57698222,-73.73235278\\nN72,Warwick Muni,Warwick,NY,USA,41.28759361,-74.28709472\\nN73,Red Lion,Vincentown,NJ,USA,39.90415167,-74.74954917\\nN79,Northumberland Cty,Shamokin,PA,USA,40.83692306,-76.55245611\\nN81,Hammonton Muni,Hammonton,NJ,USA,39.66746889,-74.75773444\\nN82,Wurtsboro-Sullivan Cty,Wurtsboro,NY,USA,41.59720444,-74.45840722\\nN85,Alexandria,Pittstown,NJ,USA,40.58757389,-75.01942056\\nN87,Trenton-Robbinsville,Robbinsville,NJ,USA,40.21394333,-74.60179472\\nN89,Joseph Y. Resnick,Ellenville,NY,USA,41.72787111,-74.37737583\\nN93,New Golovin,Golovin,AK,USA,64.55305556,-163.0088889\\nN99,Brandywine,West Chester,PA,USA,39.99472222,-75.58333333\\nNC14,Rockingham County NC Shiloh,Reidsville,NC,USA,36.43722083,-79.85101\\nNC67,Ashe County,West Jefferson,NC,USA,36.43243111,-81.41968472\\nND06,Cavalier Municipal,Cavalier,ND,USA,48.78388139,-97.62981028\\nND12,Ellendale Municipal,Ellendale,ND,USA,46.01247194,-98.51287889\\nND17,Harvey Municipal,Harvey,ND,USA,47.79123306,-99.93174222\\nND26,Kenmare Municipal,Kenmare,ND,USA,48.66758278,-102.0475944\\nND28,Lakota Municipal,Lakota,ND,USA,48.0313875,-98.32788111\\nND29,La Moure Rott Municipal,La Moure (New Site),ND,USA,46.34663556,-98.28371\\nND33,Linton Municipal,Linton,ND,USA,46.21830472,-100.2450028\\nND44,Mott Municipal,Mott,ND,USA,46.359725,-102.3229389\\nND66,Washburn Municipal,Washburn,ND,USA,47.35305,-101.0273681\\nNEW,Lakefront,New Orleans,LA,USA,30.04242056,-90.02825694\\nNH12,Plymouth Municipal,Plymouth,NH,USA,43.77923806,-71.75369056\\nNK03,Kamp,Durhamville,NY,USA,43.13472111,-75.64890417\\nNQA,Millington Municipal,Millington,TN,USA,35.35666667,-89.87027778\\nNRN,Norton Municipal,Norton,KS,USA,39.84914444,-99.89320583\\nNUL,Nulato,Nulato,AK,USA,64.72981944,-158.0731889\\nNVD,Nevada Municipal,Nevada,MO,USA,37.85206528,-94.30486472\\nNY0,Fulton Cty,Johnstown,NY,USA,42.99821222,-74.32955111\\nO02,Nervino,Beckwourth,CA,USA,39.82073556,-120.3543767\\nO05,Rogers,Chester,CA,USA,40.28235278,-121.2411683\\nO08,Colusa County,Colusa,CA,USA,39.17903,-121.9933611\\nO09,Round Valley,Covelo,CA,USA,39.79015444,-123.2664025\\nO11,Cherokee Nation,Stilwell,OK,USA,35.75703083,-94.64994417\\nO15,Turlock Municipal,Turlock,CA,USA,37.48743556,-120.6968669\\nO16,Garberville,Garberville,CA,USA,40.08597806,-123.8136397\\nO17,Nevada County Air Park,Grass Valley,CA,USA,39.22402778,-121.0030833\\nO19,Kneeland,Eureka,CA,USA,40.7193,-123.9275531\\nO21,Hoopa,Hoopa,CA,USA,41.04290778,-123.6683894\\nO22,Columbia,Columbia,CA,USA,38.03042306,-120.4145556\\nO24,Lee Vining,Lee Vining,CA,USA,37.95825861,-119.1065375\\nO26,Lone Pine,Lone Pine,CA,USA,36.58826667,-118.0520314\\nO27,Oakdale,Oakdale,CA,USA,37.75634472,-120.8002089\\nO28,Ells Field-Willits Municipal,Willits,CA,USA,39.45129778,-123.3722844\\nO31,Healdsburg Municipal,Healdsburg,CA,USA,38.65352083,-122.8994397\\nO32,Reedley Municipal,Reedley,CA,USA,36.66633917,-119.4498483\\nO35,Hollis Municipal,Hollis,OK,USA,34.70839417,-99.90871194\\nO37,Haigh,Orland,CA,USA,39.72124194,-122.1466508\\nO41,Watts-Woodland,Woodland,CA,USA,38.67387639,-121.8720772\\nO42,Woodlake,Woodlake,CA,USA,36.39883833,-119.1073289\\nO43,Yerington Municipal,Yerington,NV,USA,39.00408444,-119.1579303\\nO45,Hooker Municipal,Hooker,OK,USA,36.85708306,-101.2270903\\nO46,Weed,Weed,CA,USA,41.47487,-122.4530739\\nO47,Prague Municipal,Prague,OK,USA,35.48201417,-96.71862944\\nO48,Little River,Little River,CA,USA,39.26203778,-123.7537347\\nO52,Sutter County,Yuba City,CA,USA,39.12655889,-121.6091328\\nO53,Medford Municipal,Medford,OK,USA,36.79058417,-97.74899722\\nO54,Lonnie Pool /Weaverville,Weaverville,CA,USA,40.7457,-122.92197\\nO57,Bryant,Bridgeport,CA,USA,38.26241917,-119.2257094\\nO59,Cedarville,Cedarville,CA,USA,41.55267139,-120.1663339\\nO60,Cloverdale Municipal,Cloverdale,CA,USA,38.7743525,-122.9922217\\nO61,Cameron Airpark,Cameron Park,CA,USA,38.68407028,-120.9871642\\nO65,Okeene Municipal,Okeene,OK,USA,36.11253667,-98.3086825\\nO68,Mariposa-Yosemite,Mariposa,CA,USA,37.51077,-120.0418439\\nO69,Petaluma Municipal,Petaluma,CA,USA,38.2578325,-122.6055406\\nO70,Westover Field Amador County,Jackson,CA,USA,38.37680111,-120.7939075\\nO81,Tulelake Municipal,Tulelake,CA,USA,41.88738,-121.3594331\\nO85,Benton,Redding,CA,USA,40.57487278,-122.4080642\\nO86,Trinity Center,Trinity Center,CA,USA,40.98320111,-122.6941889\\nO88,Rio Vista Municipal,Rio Vista,CA,USA,38.1935,-121.7023889\\nO89,Fall River Mills,Fall River Mills,CA,USA,41.01877417,-121.4333136\\nOAJ,Albert J Ellis,Jacksonville,NC,USA,34.82916444,-77.61213778\\nOAK,Metropolitan Oakland International,Oakland,CA,USA,37.72129083,-122.2207167\\nOAR,Marina Municipal,Marina,CA,USA,36.68190278,-121.7624492\\nOBE,Okeechobee County,Okeechobee,FL,USA,27.26282306,-80.84978306\\nOBU,Kobuk,Kobuk,AK,USA,66.90917056,-156.8610575\\nOCF,Ocala Regional/Jim Taylor,Ocala,FL,USA,29.17261111,-82.22416667\\nOCH,Nacogdoches-A.L. Mangham Jr. Regional,Nacogdoches,TX,USA,31.57802778,-94.70954167\\nOCQ,Oconto Municipal,Oconto,WI,USA,44.8735825,-87.9090525\\nOCW,Warren,Washington,NC,USA,35.57046806,-77.04981306\\nODO,Odessa-Schlemeyer,Odessa,TX,USA,31.92056722,-102.3870892\\nODX,Evelyn Sharp,Ord,NE,USA,41.62425,-98.95236111\\nOEB,Branch County Memorial,Coldwater,MI,USA,41.93344861,-85.052585\\nOEL,Oakley Municipal,Oakley,KS,USA,39.10994444,-100.8164444\\nOEO,L. O. Simenstad Municipal,Osceola,WI,USA,45.30858944,-92.69008056\\nOFK,Karl Stefan Memorial,Norfolk,NE,USA,41.98546389,-97.43511111\\nOFP,Hanover County Municipal,Richmond,VA,USA,37.7080325,-77.43601028\\nOGA,Searle,Ogallala,NE,USA,41.11961111,-101.7689444\\nOGB,Orangeburg Municipal,Orangeburg,SC,USA,33.46094444,-80.85891667\\nOGD,Ogden-Hinckley,Ogden,UT,USA,41.19594417,-112.012175\\nOGG,Kahului,Kahului,HI,USA,20.89864972,-156.4304578\\nOGM,Ontonagon County,Ontonagon,MI,USA,46.84547028,-89.36708806\\nOGS,Ogdensburg Intl,Ogdensburg,NY,USA,44.68185361,-75.46549917\\nOH17,Henry County,Napoleon,OH,USA,41.37427778,-84.06791667\\nOH21,Huron County,Norwalk,OH,USA,41.24476583,-82.55122722\\nOH30,Put In Bay,Put In Bay,OH,USA,41.63674333,-82.82833333\\nOIC,Lt Warren Eaton,Norwich,NY,USA,42.56655417,-75.52411167\\nOIN,Oberlin Municipal,Oberlin,KS,USA,39.83378278,-100.5394236\\nOJC,Johnson County Executive,Olathe,KS,USA,38.84760194,-94.73758583\\nOKB,Oceanside Municipal,Oceanside,CA,USA,33.21797639,-117.3515075\\nOKC,Will Rogers World,Oklahoma City,OK,USA,35.39308833,-97.60073389\\nOKK,Kokomo Municipal,Kokomo,IN,USA,40.5281775,-86.05899\\nOKM,Okmulgee Municipal,Okmulgee,OK,USA,35.66813889,-95.94869444\\nOKS,Garden County,Oshkosh,NE,USA,41.40097222,-102.3550278\\nOKV,Winchester Regional,Winchester,VA,USA,39.14352139,-78.14444444\\nOKZ,Kaolin,Sandersville,GA,USA,32.96672222,-82.83816667\\nOLD,Dewitt Field-Old Town Municipal,Old Town,ME,USA,44.9525,-68.67433333\\nOLE,Olean Muni,Olean,NY,USA,42.24006611,-78.371685\\nOLF,L M Clayton,Wolf Point,MT,USA,48.09451778,-105.5750536\\nOLM,Olympia,Olympia,WA,USA,46.9705,-122.9022083\\nOLS,Nogales International,Nogales,AZ,USA,31.41772222,-110.8478889\\nOLU,Columbus Municipal,Columbus,NE,USA,41.448,-97.34263889\\nOLV,Olive Branch,Olive Branch,MS,USA,34.97875,-89.78683333\\nOLY,Olney-Noble,Olney-Noble,IL,USA,38.72182722,-88.17643278\\nOLZ,Oelwein Municipal,Oelwein,IA,USA,42.68084472,-91.97447833\\nOMA,Eppley Airfield,Omaha,NE,USA,41.30251861,-95.89417306\\nOME,Nome,Nome,AK,USA,64.51220222,-165.4452458\\nOMH,Orange County,Orange,VA,USA,38.24721639,-78.04561028\\nOMK,Omak,Omak,WA,USA,48.46440222,-119.5180503\\nOMN,Ormond Beach Municipal,Ormond Beach,FL,USA,29.30113889,-81.11380556\\nONA,Winona Muni-Max Conrad,Winona,MN,USA,44.07721306,-91.70831694\\nONL,O Neill Municipal,O Neill,NE,USA,42.46988889,-98.68805556\\nONM,Socorro Municipal,Socorro,NM,USA,34.02247222,-106.9031389\\nONO,Ontario Muni,Ontario,OR,USA,44.02052417,-117.013635\\nONP,Newport Muni,Newport,OR,USA,44.58036111,-124.0579167\\nONT,Ontario International,Ontario,CA,USA,34.056,-117.6011944\\nONY,Olney Municipal,Olney,TX,USA,33.35088056,-98.81916667\\nONZ,Grosse Ile Municipal,Detroit - Grosse Ile,MI,USA,42.09860472,-83.16105861\\nOOA,Oskaloosa Municipal,Oskaloosa,IA,USA,41.22614944,-92.49388278\\nOOH,Hoonah SPB,Hoonah,AK,USA,58.11215944,-135.451805\\nOOK,Toksook Bay,Toksook Bay,AK,USA,60.53337639,-165.1139636\\nOPF,Opa-Locka,Miami,FL,USA,25.907,-80.27838889\\nOPL,St Landry Parish - Ahart,Opelousas,LA,USA,30.55840556,-92.099375\\nOPN,Thomaston-Upton County,Thomaston,GA,USA,32.95458861,-84.26315222\\nOQU,Quonset State,North Kingstown,RI,USA,41.5971525,-71.41215333\\nOQW,Maquoketa Municipal,Maquoketa,IA,USA,42.050075,-90.73880472\\nOR33,Boardman,Boardman,OR,USA,45.814825,-119.8205006\\nORB,Orr Regional,Orr,MN,USA,48.01592194,-92.85605139\\nORC,Orange City Municipal,Orange City,IA,USA,42.99026444,-96.06279667\\nORD,Chicago O'Hare International,Chicago,IL,USA,41.979595,-87.90446417\\nORE,Orange Municipal,Orange,MA,USA,42.57011889,-72.28860667\\nORF,Norfolk International,Norfolk,VA,USA,36.89461111,-76.20122222\\nORG,Orange County,Orange,TX,USA,30.06916667,-93.80091667\\nORH,Worcester Regional,Worcester,MA,USA,42.26733944,-71.87570944\\nORI,Port Lions,Port Lions,AK,USA,57.8853775,-152.8461011\\nORL,Executive,Orlando,FL,USA,28.54547222,-81.33294444\\nORS,Orcas Island,Eastsound,WA,USA,48.70816,-122.9137961\\nORT,Northway,Northway,AK,USA,62.96133361,-141.9291369\\nORV,Robert(Bob) Curtis Memorial,Noorvik,AK,USA,66.82852667,-161.0277908\\nOSC,Oscoda - Wurtsmith,Oscoda,MI,USA,44.45260972,-83.38036389\\nOSH,Wittman Regional,Oshkosh,WI,USA,43.98436639,-88.55705944\\nOSU,Ohio State University,Columbus,OH,USA,40.07977778,-83.07302778\\nOSX,Kosciusko-Attala County,Kosciusko,MS,USA,33.09025889,-89.54201722\\nOTG,Worthington Municipal,Worthington,MN,USA,43.65506611,-95.57920917\\nOTH,North Bend Muni,North Bend,OR,USA,43.41713889,-124.2460278\\nOTM,Ottumwa Industrial,Ottumwa,IA,USA,41.10659611,-92.44793972\\nOTZ,Ralph Wien Memorial,Kotzebue,AK,USA,66.88467694,-162.5985497\\nOUN,University of Oklahoma Westheimer,Norman,OK,USA,35.24556444,-97.47212861\\nOVE,Oroville Municipal,Oroville,CA,USA,39.48775,-121.622\\nOVO,North Vernon,North Vernon,IN,USA,39.04563667,-85.60533\\nOVS,Boscobel,Boscobel,WI,USA,43.16063056,-90.67421833\\nOWA,Owatonna Degner Regional,Owatonna,MN,USA,44.12339722,-93.26061667\\nOWB,Owensboro-Daviess County,Owensboro,KY,USA,37.74011111,-87.16683333\\nOWD,Norwood Memorial,Norwood,MA,USA,42.19079694,-71.17310389\\nOWI,Ottawa Municipal,Ottawa,KS,USA,38.53866667,-95.25297222\\nOWK,Central Maine,Norridgewock,ME,USA,44.7155,-69.86647222\\nOWX,Putnam County,Ottawa,OH,USA,41.0355825,-83.98202444\\nOXB,Ocean City,Ocean City,MD,USA,38.31044444,-75.12397222\\nOXC,Waterbury-Oxford,Oxford,CT,USA,41.47855556,-73.13525\\nOXD,Miami University,Oxford,OH,USA,39.50203917,-84.7841425\\nOXI,Starke County,Knox,IN,USA,41.3301875,-86.66473194\\nOXR,Oxnard,Oxnard,CA,USA,34.20080083,-119.2072164\\nOXV,Knoxville Municipal,Knoxville,IA,USA,41.29888556,-93.11381556\\nOYM,St Marys Muni,St Marys,PA,USA,41.41247778,-78.50263139\\nOZA,Ozona Municipal,Ozona,TX,USA,30.73528028,-101.2029719\\nOZW,Livingston County,Howell,MI,USA,42.62950694,-83.98417361\\nP01,Ajo Municipal,Ajo,AZ,USA,32.45005694,-112.8673778\\nP04,Bisbee Municipal,Bisbee,AZ,USA,31.36399028,-109.8831286\\nP08,Coolidge Municipal,Coolidge,AZ,USA,32.93594444,-111.4265278\\nP13,San Carlos Apache,Globe,AZ,USA,33.35314722,-110.6673611\\nP14,Holbrook Municipal,Holbrook,AZ,USA,34.93891389,-110.1395656\\nP20,Avi Suquilla,Parker,AZ,USA,34.15063889,-114.2712222\\nP32,H.A. Clark Memorial,Williams,AZ,USA,35.30223222,-112.1940575\\nP33,Cochise County,Willcox,AZ,USA,32.24540278,-109.8946319\\nP45,Mount Pleasant-Scottdale,Mount Pleasant,PA,USA,40.10840556,-79.54142694\\nP52,Cottonwood,Cottonwood,AZ,USA,34.73002111,-112.0351569\\nP53,Rostraver,Monongahela,PA,USA,40.20972222,-79.83144444\\nPAE,Snohomish County,Everett,WA,USA,47.90762861,-122.2815892\\nPAH,Barkley Regional,Paducah,KY,USA,37.06083333,-88.77375\\nPAK,Port Allen,Hanapepe,HI,USA,21.89686833,-159.6033217\\nPAN,Payson,Payson,AZ,USA,34.25683639,-111.3392558\\nPAO,Palo Alto Arpt of Santa Clara Co,Palo Alto,CA,USA,37.46111944,-122.1150444\\nPAQ,Palmer Municipal,Palmer,AK,USA,61.59474194,-149.0888242\\nPBF,Grider,Pine Bluff,AR,USA,34.17498722,-91.93472028\\nPBH,Price County,Phillips,WI,USA,45.70895028,-90.40248472\\nPBI,Palm Beach International,West Palm Beach,FL,USA,26.68316194,-80.09559417\\nPBV,St. George,St. George,AK,USA,56.57735278,-169.6637361\\nPCK,Porcupine Creek,Porcupine Creek,AK,USA,67.23789833,-150.2860608\\nPCM,Plant City Municipal,Plant City,FL,USA,28.00021667,-82.16424167\\nPCW,Carl R. Keller,Port Clinton,OH,USA,41.51627778,-82.86869444\\nPCZ,Waupaca Municipal,Waupaca,WI,USA,44.33368778,-89.01549861\\nPDC,Prairie Du Chien Municipal,Prairie Du Chien,WI,USA,43.01928889,-91.12374722\\nPDK,Dekalb-Peachtree,Atlanta,GA,USA,33.87560444,-84.30196778\\nPDT,Eastern Oregon Regional At Pendleton,Pendleton,OR,USA,45.69505556,-118.8414444\\nPDX,Portland Intl,Portland,OR,USA,45.58872222,-122.5975\\nPEA,Pella Municipal,Pella,IA,USA,41.40006667,-92.94588333\\nPEC,Pelican SPB,Pelican,AK,USA,57.95517222,-136.2362733\\nPEO,Penn Yan,Penn Yan,NY,USA,42.63813556,-77.05306083\\nPEQ,Pecos Municipal,Pecos City,TX,USA,31.3823575,-103.5107017\\nPEZ,Pleasanton Municipal,Pleasanton,TX,USA,28.95419444,-98.51998917\\nPFN,Panama City-Bay County International,Panama City,FL,USA,30.21208333,-85.68280556\\nPGA,Page Municipal,Page,AZ,USA,36.92611111,-111.4483611\\nPGD,Charlotte County,Punta Gorda,FL,USA,26.92019444,-81.99052778\\nPGM,Port Graham,Port Graham,AK,USA,59.34825944,-151.8315389\\nPGR,Kirk,Paragould,AR,USA,36.06352944,-90.50986028\\nPGV,Pitt-Greenville,Greenville,NC,USA,35.63523944,-77.38532028\\nPHD,Harry Clever,New Philadelphia,OH,USA,40.47091667,-81.41975\\nPHF,Newport News/Williamsburg International,Newport News,VA,USA,37.13189556,-76.4929875\\nPHG,Phillipsburg Municipal,Phillipsburg,KS,USA,39.73530556,-99.31741667\\nPHH,Andrews Municipal,Andrews,SC,USA,33.45169472,-79.52620111\\nPHK,Palm Beach County Glades,Pahokee,FL,USA,26.78503861,-80.69335528\\nPHL,Philadelphia Intl,Philadelphia,PA,USA,39.87195278,-75.24114083\\nPHN,St Clair County International,Port Huron,MI,USA,42.91095778,-82.52886139\\nPHO,Point Hope,Point Hope,AK,USA,68.34877417,-166.7993086\\nPHP,Philip,Philip,SD,USA,44.04862722,-101.5990603\\nPHT,Henry County,Paris,TN,USA,36.33822472,-88.38287861\\nPHX,Phoenix Sky Harbor International,Phoenix,AZ,USA,33.43416667,-112.0080556\\nPIA,Greater Peoria Regional,Peoria,IL,USA,40.66424333,-89.69330556\\nPIB,Hattiesburg-Laurel Regional,Hattiesburg-Laurel,MS,USA,31.46714944,-89.33705778\\nPIE,St. Petersburg-Clearwater International,St. Petersburg,FL,USA,27.91076333,-82.68743944\\nPIH,Pocatello Regional,Pocatello,ID,USA,42.91130556,-112.5958611\\nPIL,Port Isabel-Cameron County,Port Isabel,TX,USA,26.16621,-97.34588611\\nPIM,Callaway Gardens-Harris County,Pine Mountain,GA,USA,32.84069444,-84.88244444\\nPIR,Pierre Regional,Pierre,SD,USA,44.38267694,-100.285965\\nPIT,Pittsburgh International,Pittsburgh,PA,USA,40.49146583,-80.23287083\\nPIZ,Point Lay Dew Station,Point Lay,AK,USA,69.732875,-163.0053417\\nPJY,Pinckneyville-Duquoin,Pinckneyville-Duquoin,IL,USA,37.97788417,-89.36044889\\nPKA,Napaskiak,Napaskiak,AK,USA,60.70369056,-161.7767367\\nPKB,Wood Cty/Gill Robb Wilson,Parkersburg,WV,USA,39.34510333,-81.43920194\\nPKD,Park Rapids Municipal,Park Rapids,MN,USA,46.90062583,-95.07313278\\nPKF,Park Falls Municipal,Park Falls,WI,USA,45.95502361,-90.42441806\\nPLB,Clinton Cty,Plattsburgh,NY,USA,44.68751861,-73.52452306\\nPLD,Portland Municipal,Portland,IN,USA,40.45076167,-84.99007917\\nPLN,Pellston Regional of Emmet County,Pellston,MI,USA,45.5709275,-84.796715\\nPLR,St Clair County,Pell City,AL,USA,33.55883333,-86.24905556\\nPMB,Pembina Municipal,Pembina,ND,USA,48.9425,-97.24083333\\nPMD,Palmdale Production Flight,Palmdale,CA,USA,34.62938889,-118.0845528\\nPMH,Greater Portsmouth Regional,Portsmouth,OH,USA,38.84047,-82.84731361\\nPMP,Pompano Beach Airpark,Pompano Beach,FL,USA,26.24713889,-80.11105556\\nPMV,Plattsmouth Municipal,Plattsmouth,NE,USA,40.95025,-95.91788889\\nPMX,Metropolitan,Palmer,MA,USA,42.22328722,-72.31138694\\nPMZ,Plymouth Municipal,Plymouth,NC,USA,35.80843944,-76.75927694\\nPNA,Ralph Wenz,Pinedale,WY,USA,42.79549917,-109.8070944\\nPNC,Ponca City Municipal,Ponca City,OK,USA,36.73058417,-97.09976833\\nPNE,Northeast Philadelphia,Philadelphia,PA,USA,40.08194417,-75.01058667\\nPNM,Princeton Municipal,Princeton,MN,USA,45.55986778,-93.60821611\\nPNN,Princeton Municipal,Princeton,ME,USA,45.20066667,-67.56438889\\nPNP,Pilot Point,Pilot Point,AK,USA,57.58038056,-157.5674444\\nPNS,Pensacola Regional,Pensacola,FL,USA,30.47330556,-87.18744444\\nPOC,Brackett,La Verne,CA,USA,34.09164833,-117.7817803\\nPOF,Poplar Bluff Municipal,Poplar Bluff,MO,USA,36.77394444,-90.32484722\\nPOH,Pocahontas Municipal,Pocahontas,IA,USA,42.74280556,-94.64730556\\nPOU,Dutchess Cty,Poughkeepsie,NY,USA,41.62661111,-73.88411111\\nPOY,Powell Muni,Powell,WY,USA,44.86797222,-108.793\\nPPA,Perry Lefors,Pampa,TX,USA,35.61298806,-100.9962608\\nPPC,Prospect Creek,Prospect Creek,AK,USA,66.81288139,-150.6437925\\nPPF,Tri City,Parsons,KS,USA,37.33125778,-95.50900667\\nPPG,Pago Pago International,Pago Pago,AS,USA,14.33102278,-170.7105258\\nPPO,La Porte Municipal,La Porte,IN,USA,41.57276194,-86.73413139\\nPPQ,Pittsfield Penstone Municipal,Pittsfield,IL,USA,39.63885556,-90.77843111\\nPQI,Northern Maine Regional,Presque Isle,ME,USA,46.68896,-68.04479972\\nPQL,Trent Lott International,Pascagoula,MS,USA,30.46278111,-88.52922778\\nPQN,Pipestone Municipal,Pipestone,MN,USA,43.98330333,-96.30031083\\nPR03,Fajardo Harbor Seaplane Base,Fajardo,PR,USA,18.339675,-65.62460583\\nPRB,Paso Robles Municipal,Paso Robles,CA,USA,35.67288611,-120.6270558\\nPRC,Ernest A. Love,Prescott,AZ,USA,34.65447222,-112.4195833\\nPRG,Edgar County,Paris,IL,USA,39.70015944,-87.66961861\\nPRN,Greenville Municipal,Greenville,AL,USA,31.84540222,-86.61044583\\nPRO,Perry Municipal,Perry,IA,USA,41.82801306,-94.15990361\\nPRX,Cox,Paris,TX,USA,33.63660667,-95.45073194\\nPSB,Mid-State,Philipsburg,PA,USA,40.88439139,-78.08734167\\nPSC,Tri-Cities,Pasco,WA,USA,46.26468028,-119.1190292\\nPSE,Mercedita,Ponce,PR,USA,18.00830278,-66.56301194\\nPSF,Pittsfield Municipal,Pittsfield,MA,USA,42.42684667,-73.29292806\\nPSG,James C. Johnson Petersburg,Petersburg,AK,USA,56.80165194,-132.9452781\\nPSK,New River Valley,Dublin,VA,USA,37.13734528,-80.67848167\\nPSM,Pease International Tradeport,Portsmouth,NH,USA,43.07795889,-70.82327333\\nPSN,Palestine Municipal,Palestine,TX,USA,31.77969444,-95.70630556\\nPSP,Palm Springs International,Palm Springs,CA,USA,33.82921556,-116.5062531\\nPSX,Palacios Municipal,Palacios,TX,USA,28.72751778,-96.2509675\\nPTB,Dinwiddie County,Petersburg,VA,USA,37.18375833,-77.50738889\\nPTD,Potsdam Muni-Damon,Potsdam,NY,USA,44.67666917,-74.94844639\\nPTH,Port Heiden,Port Heiden,AK,USA,56.95943333,-158.6318208\\nPTK,Oakland-Pontiac,Pontiac,MI,USA,42.66520389,-83.41870917\\nPTN,Harry P. Williams Memorial,Patterson,LA,USA,29.71081917,-91.33971778\\nPTS,Atkinson Municipal,Pittsburg,KS,USA,37.44855556,-94.73133333\\nPTT,Pratt Industrial,Pratt,KS,USA,37.7000175,-98.7462025\\nPTU,Platinum,Platinum,AK,USA,59.01135611,-161.8196661\\nPTV,Porterville Municipal,Porterville,CA,USA,36.02960778,-119.0627311\\nPTW,Pottstown Limerick,Pottstown,PA,USA,40.23957167,-75.55662528\\nPUB,Pueblo Memorial,Pueblo,CO,USA,38.28908722,-104.4965722\\nPUC,Carbon County,Price,UT,USA,39.61391556,-110.7514183\\nPUW,Pullman/Moscow Regional,\\\"Pullman/Moscow,ID\\\",WA,USA,46.74386111,-117.1095833\\nPVB,Platteville Municipal,Platteville,WI,USA,42.68935583,-90.44439278\\nPVC,Provincetown Municipal,Provincetown,MA,USA,42.07199833,-70.22137667\\nPVD,Theodore F Green State,Providence,RI,USA,41.72399917,-71.42822111\\nPVF,Placerville,Placerville,CA,USA,38.72421806,-120.753325\\nPVG,Hampton Roads Executive,Portsmouth,VA,USA,36.78014889,-76.44883472\\nPVJ,Pauls Valley Municipal,Pauls Valley,OK,USA,34.71105361,-97.22321694\\nPVU,Provo Muni,Provo,UT,USA,40.21919444,-111.7233611\\nPVW,Hale County,Plainview,TX,USA,34.16814722,-101.7173361\\nPWA,Wiley Post,Oklahoma City,OK,USA,35.53455,-97.64721556\\nPWC,Pine River Regional,Pine River,MN,USA,46.7247875,-94.3817\\nPWD,Sher-Wood,Plentywood,MT,USA,48.79030583,-104.533845\\nPWG,McGregor Exectuive,Waco,TX,USA,31.48491667,-97.31652778\\nPWK,Palwaukee,Chicago/Wheeling/Prospect Heights,IL,USA,42.11418083,-87.90148083\\nPWM,Portland International Jetport,Portland,ME,USA,43.64616667,-70.30875\\nPWT,Bremerton National,Bremerton,WA,USA,47.49275361,-122.7624286\\nPXE,Perry-Houston Couty,Perry,GA,USA,32.51058333,-83.76733333\\nPYG,Pageland,Pageland,SC,USA,34.74213889,-80.34519444\\nPYM,Plymouth Municipal,Plymouth,MA,USA,41.90902444,-70.72878778\\nPYX,Perryton Ochiltree County,Perryton,TX,USA,36.41200333,-100.7517883\\nPZQ,Presque Isle County,Rogers City,MI,USA,45.40709667,-83.81288556\\nQ00,Littlefield Municipal,Littlefield,TX,USA,33.92395306,-102.3866831\\nQ06,City of Tulia/Swisher County Municipal,Tulia,TX,USA,34.56682472,-101.7814611\\nQ14,San Juan Pueblo,Espanola,NM,USA,36.02502306,-106.0464114\\nQ16,Reserve,Reserve,NM,USA,33.70005472,-108.8506214\\nQ17,Boonville,Boonville,CA,USA,39.0126775,-123.3827864\\nQ21,Brownsville,Brownsville,CA,USA,39.45544417,-121.2913511\\nQ24,Levelland Municipal,Levelland,TX,USA,33.54980833,-102.3727333\\nQ25,Dinsmore,Dinsmore,CA,USA,40.49291944,-123.5997589\\nQ26,Terry County,Brownfield,TX,USA,33.173675,-102.1926208\\nQ31,Sequoia,Visalia,CA,USA,36.44856139,-119.3190056\\nQ34,Portales Municipal,Portales,NM,USA,34.14547222,-103.4103333\\nQ35,Springerville Babbitt,Springerville,AZ,USA,34.1286575,-109.3114756\\nQ37,Carrizozo Municipal,Carrizozo,NM,USA,33.64886139,-105.895685\\nQ41,Floydada Municipal,Floydada,TX,USA,34.00230056,-101.330435\\nQ42,Springer Municipal,Springer,NM,USA,36.32697806,-104.6197117\\nQ44,Beaver Municipal,Beaver,OK,USA,36.79891472,-100.5298708\\nQ49,Firebaugh,Firebaugh,CA,USA,36.85998861,-120.4644675\\nQ53,Franklin,Franklin,CA,USA,38.30491306,-121.4296736\\nQ55,Dimmitt Municipal,Dimmitt,TX,USA,34.56673556,-102.3226947\\nQ58,Santa Rosa Municipal,Santa Rosa,NM,USA,34.93442472,-104.643065\\nQ61,Georgetown,Georgetown,CA,USA,38.92111389,-120.8647944\\nQ68,Pine Mountain Lake,Groveland,CA,USA,37.86166667,-120.1778889\\nQ72,Hayfork,Hayfork,CA,USA,40.54708833,-123.1816953\\nQ84,Mendota,Mendota,CA,USA,36.75800528,-120.3712794\\nQ88,Paradise Skypark,Paradise,CA,USA,39.70960639,-121.6163617\\nQ94,Rio Linda,Rio Linda,CA,USA,38.67601389,-121.4455092\\nQ95,Ruth,Ruth,CA,USA,40.21125917,-123.2975231\\nQ99,South County of Santa Clara Co,San Martin,CA,USA,37.08158611,-121.5968056\\nRAC,John H Batten,Racine,WI,USA,42.76119139,-87.81389806\\nRAL,Riverside Municipal,Riverside,CA,USA,33.95187528,-117.4451017\\nRAP,Rapid City Regional,Rapid City,SD,USA,44.04532139,-103.0573708\\nRBD,Redbird,Dallas,TX,USA,32.68086111,-96.86819444\\nRBE,Bassett Municipal,Bassett,NE,USA,42.56966667,-99.56836111\\nRBG,Roseburg Regional,Roseburg,OR,USA,43.23878306,-123.3558617\\nRBL,Red Bluff Municipal,Red Bluff,CA,USA,40.15065667,-122.2522903\\nRBW,Walterboro Municipal,Walterboro,SC,USA,32.92052778,-80.64125\\nRBY,Ruby,Ruby,AK,USA,64.72721556,-155.4698886\\nRCA,Ellsworth AFB,NA,NA,USA,44.145094,-103.103567\\nRCR,Fulton County,Rochester,IN,USA,41.06554833,-86.18170444\\nRCX,Rusk County,Ladysmith,WI,USA,45.49825694,-91.00186361\\nRDD,Redding Municipal,Redding,CA,USA,40.50898361,-122.2934019\\nRDG,\\\"Reading Muni,Gen Carl A Spaatz\\\",Reading,PA,USA,40.3785,-75.96525\\nRDK,Red Oak Municipal,Red Oak,IA,USA,41.01052778,-95.25986111\\nRDM,Roberts,Redmond,OR,USA,44.25406722,-121.1499633\\nRDR,Grand Forks AFB,NA,NA,USA,47.961167,-97.401167\\nRDU,Raleigh-Durham International,Raleigh,NC,USA,35.87763889,-78.78747222\\nRDV,Red Devil,Red Devil,AK,USA,61.78764333,-157.3479344\\nRED,Red Lodge,Red Lodge,MT,USA,45.18744472,-109.2673778\\nRFD,Greater Rockford,Rockford,IL,USA,42.19536389,-89.09721111\\nRFG,Refugio-Rooke,Refugio,TX,USA,28.29361694,-97.32304833\\nRGK,Red Wing Municipal,Red Wing,MN,USA,44.58935611,-92.48496889\\nRHI,Rhinelander-Oneida County,Rhinelander,WI,USA,45.63119306,-89.46745361\\nRHV,Reid-Hillview of Santa Clara Co,San Jose,CA,USA,37.33287306,-121.8197947\\nRIC,Richmond International,Richmond,VA,USA,37.50516667,-77.31966667\\nRID,Richmond Municipal,Richmond,IN,USA,39.75721528,-84.84282\\nRIF,Richfield Muni,Richfield,UT,USA,38.73643611,-112.0989444\\nRIL,Garfield County Regional,Rifle,CO,USA,39.526315,-107.7269403\\nRIU,Rancho Murieta,Rancho Murieta,CA,USA,38.4887975,-121.1024447\\nRIV,March,Riverside,CA,USA,33.88057333,-117.2594836\\nRIW,Riverton Regional,Riverton,WY,USA,43.064235,-108.4598411\\nRKD,Knox County Regional,Rockland,ME,USA,44.06008333,-69.09925\\nRKP,Aransas County,Rockport,TX,USA,28.08677778,-97.04461111\\nRKR,Robert S Kerr,Poteau,OK,USA,35.02162639,-94.6212525\\nRKS,Rock Springs-Sweetwater County,Rock Springs,WY,USA,41.5942175,-109.0651928\\nRKW,Rockwood Municipal,Rockwood,TN,USA,35.922295,-84.68966278\\nRLD,Richland,Richland,WA,USA,46.305635,-119.3041853\\nRME,Griffis Airpark,Rome,NY,USA,43.23379861,-75.40703333\\nRMG,Richard B Russell,Rome,GA,USA,34.35060111,-85.15801389\\nRMP,Rampart,Rampart,AK,USA,65.50786222,-150.1428047\\nRMY,Brooks,Marshall,MI,USA,42.25118111,-84.9554525\\nRNC,Warren County Memorial,McMinnville,TN,USA,35.69870944,-85.84381722\\nRNH,New Richmond Municipal,New Richmond,WI,USA,45.14831139,-92.53806139\\nRNM,Ramona,Ramona,CA,USA,33.038905,-116.9136392\\nRNO,Reno/Tahoe International,Reno,NV,USA,39.49857611,-119.7680647\\nRNT,Renton Municipal,Renton,WA,USA,47.49313889,-122.21575\\nRNV,Cleveland Municipal,Cleveland,MS,USA,33.76114056,-90.75787528\\nROA,Roanoke Regional/ Woodrum,Roanoke,VA,USA,37.32546833,-79.97542833\\nROC,Greater Rochester Int'l,Rochester,NY,USA,43.11886611,-77.67238389\\nROG,Rogers Municipal-Carter,Rogers,AR,USA,36.37229667,-94.10686972\\nROP,Prachinburi,NA,NA,Thailand,14.078333,101.378334\\nROR,Babelthoup/Koror,NA,NA,Palau,7.367222,134.544167\\nROS,Rush City Regional,Rush City,MN,USA,45.69801389,-92.95298972\\nROW,Roswell Industrial Air Center,Roswell,NM,USA,33.30155556,-104.5305556\\nROX,Roseau Municipal,Roseau,MN,USA,48.85603806,-95.69703861\\nRPB,Belleville Municipal,Belleville,KS,USA,39.81790861,-97.659625\\nRPD,Rice Lake Regional-Carl's,Rice Lake,WI,USA,45.41809056,-91.77365194\\nRPX,Roundup,Roundup,MT,USA,46.47357528,-108.5576333\\nRQB,Roben-Hood,Big Rapids,MI,USA,43.72263278,-85.50407333\\nRQE,Window Rock,Window Rock,AZ,USA,35.65205556,-109.0673889\\nRRL,Merrill Municipal,Merrill,WI,USA,45.19927083,-89.71143389\\nRRT,Warroad Intl Swede Carlson,Warroad,MN,USA,48.94138889,-95.34838889\\nRSH,Russian Mission,Russian Mission,AK,USA,61.77967583,-161.3194772\\nRSL,Russell Municipal,Russell,KS,USA,38.87212222,-98.81177611\\nRSN,Ruston Regional,Ruston,LA,USA,32.51444444,-92.58833333\\nRST,Rochester International,Rochester,MN,USA,43.90882639,-92.49798722\\nRSV,Robinson Municipal,Robinson,IL,USA,39.01604222,-87.649775\\nRSW,Southwest Florida International,Ft. Myers,FL,USA,26.53616667,-81.75516667\\nRTN,Raton Municipal/Crews,Raton,NM,USA,36.74152778,-104.5021833\\nRUE,Russellville Municipal,Russellville,AR,USA,35.25914667,-93.09326611\\nRUG,Rugby Municipal,Rugby,ND,USA,48.39035917,-100.0242739\\nRUQ,Rowan County,Salisbury,NC,USA,35.64588583,-80.52029306\\nRUT,Rutland State,Rutland,VT,USA,43.52990694,-72.949615\\nRVJ,Reidsville,Reidsville,GA,USA,32.05897222,-82.15172222\\nRVL,Mifflin Cty,Reedsville,PA,USA,40.67737417,-77.62682833\\nRVN,Hawkins County,Rogersville,TN,USA,36.45757917,-82.88503722\\nRVS,\\\"Richard Lloyd Jones, Jr.\\\",Tulsa,OK,USA,36.0396275,-95.984635\\nRWF,Redwood Falls Muni,Redwood Falls,MN,USA,44.54720389,-95.082255\\nRWI,Rocky Mount Wilson,Rocky Mount,NC,USA,35.85498861,-77.89295611\\nRWL,Rawlins Muni,Rawlins,WY,USA,41.8055975,-107.19994\\nRWN,Arens,Winamac,IN,USA,41.09226306,-86.61287111\\nRXE,Rexburg-Madison County,Rexburg,ID,USA,43.83391139,-111.805105\\nRYN,Ryan,Tucson,AZ,USA,32.14308333,-111.1728611\\nRYV,Watertown Municipal,Watertown,WI,USA,43.16963222,-88.72321222\\nRYY,Cobb County-McCollum,Marietta,GA,USA,34.01315611,-84.59854472\\nRZL,Jasper County,Rensselaer,IN,USA,40.94789861,-87.18257944\\nRZN,Burnett County,Siren,WI,USA,45.8227275,-92.37250083\\nRZT,Ross County,Chillicothe,OH,USA,39.44136778,-83.02251556\\nRZZ,Halifax County,Roanoke Rapids,NC,USA,36.43945583,-77.70934139\\nS01,Conrad,Conrad,MT,USA,48.16863889,-111.9764722\\nS03,Ashland Muni-Sumner Parker,Ashland,OR,USA,42.19028361,-122.6606283\\nS05,Bandon State,Bandon,OR,USA,43.08733083,-124.4095578\\nS07,Bend Muni,Bend,OR,USA,44.09483333,-121.2006389\\nS10,Chelan Muni,Chelan,WA,USA,47.86597139,-119.9427053\\nS12,Albany Municipal,Albany,OR,USA,44.63781639,-123.0594486\\nS18,Forks,Forks,WA,USA,47.94146583,-124.3929867\\nS21,Sunriver,Sunriver,OR,USA,43.87633333,-121.4530556\\nS23,Ione Municipal,Ione,WA,USA,48.70727528,-117.4126036\\nS24,Sandusky Co,Fremont,OH,USA,41.29570556,-83.03723056\\nS25,Watford City Municipal,Watford City,ND,USA,47.79569972,-103.2536992\\nS27,Kalispell City,Kalispell,MT,USA,48.17856944,-114.3037408\\nS28,International Peace Garden,Dunseith,ND,USA,48.99778194,-100.0434589\\nS30,Lebanon State,Lebanon,OR,USA,44.529845,-122.9295336\\nS31,Lopez Island,Lopez,WA,USA,48.48259944,-122.9368444\\nS32,Cooperstown Municipal,Cooperstown,ND,USA,47.42277361,-98.10587139\\nS33,City-County,Madras,OR,USA,44.66623139,-121.1631\\nS34,Plains,Plains,MT,USA,47.47243611,-114.900135\\nS39,Prineville,Prineville,OR,USA,44.28699389,-120.9038328\\nS40,Prosser,Prosser,WA,USA,46.212355,-119.7928122\\nS43,Harvey,Snohomish,WA,USA,47.90815306,-122.1054072\\nS45,Siletz Bay State,Siletz Bay (Gleneden Beach),OR,USA,44.87761139,-124.0284472\\nS47,Tillamook,Tillamook,OR,USA,45.41824194,-123.8143839\\nS50,Auburn Municipal,Auburn,WA,USA,47.32815583,-122.2265092\\nS52,Methow Valley State,Winthrop,WA,USA,48.42070056,-120.1470264\\nS59,Libby,Libby,MT,USA,48.28384528,-115.4902453\\nS60,Kenmore Air Harbor Inc,Kenmore,WA,USA,47.75482,-122.2592931\\nS64,Stanford,Stanford,MT,USA,47.14718944,-110.2299289\\nS66,Homedale Municipal,Homedale,ID,USA,43.61488056,-116.9215372\\nS67,Nampa Muni,Nampa,ID,USA,43.58133333,-116.5230556\\nS68,Orofino Municipal,Orofino,ID,USA,46.49129139,-116.2768061\\nS69,Lincoln,Lincoln,MT,USA,46.97494083,-112.6447606\\nS70,Othello Muni,Othello,WA,USA,46.79486278,-119.0802875\\nS71,Edgar G Obie,Chinook,MT,USA,48.59194444,-109.2488889\\nS72,St Maries Municipal,St Maries,ID,USA,47.32768722,-116.5773906\\nS73,Kamiah Municipal,Kamiah,ID,USA,46.21934028,-116.0134736\\nS80,Idaho County,Grangeville,ID,USA,45.94255806,-116.1234158\\nS83,Shoshone County,Kellogg,ID,USA,47.54769889,-116.1885008\\nS85,Big Sky,Culbertson,MT,USA,48.15333333,-104.5038889\\nS87,Weiser Municipal,Weiser,ID,USA,44.20683056,-116.9623869\\nS89,Craigmont Municipal,Craigmont,ID,USA,46.24710917,-116.4801447\\nS93,Cle Elum Municipal,Cle Elum,WA,USA,47.18317583,-120.884525\\nS94,Whitman County Memorial,Colfax,WA,USA,46.8584975,-117.4137964\\nS97,Anderson,Brewster,WA,USA,48.10486806,-119.7206128\\nSAA,Shively,Saratoga,WY,USA,41.44485944,-106.8235264\\nSAC,Sacramento Executive,Sacramento,CA,USA,38.51252389,-121.4934689\\nSAD,Safford Regional,Safford,AZ,USA,32.85331278,-109.6349708\\nSAF,Santa Fe Municipal,Santa Fe,NM,USA,35.61677778,-106.0881389\\nSAN,San Diego International-Lindbergh,San Diego,CA,USA,32.73355611,-117.1896567\\nSAR,Sparta Community-Hunter,Sparta,IL,USA,38.14893833,-89.69870972\\nSAT,San Antonio International,San Antonio,TX,USA,29.53369444,-98.46977778\\nSAV,Savannah International,Savannah,GA,USA,32.12758333,-81.20213889\\nSAW,Sawyer,Gwinn,MI,USA,46.35361111,-87.39583222\\nSAZ,Staples Municipal,Staples,MN,USA,46.38087944,-94.80660167\\nSBA,Santa Barbara Municipal,Santa Barbara,CA,USA,34.42621194,-119.8403733\\nSBD,San Bernardino International,San Bernardino,CA,USA,34.09535361,-117.2348742\\nSBM,Sheboygan County Memorial,Sheboygan,WI,USA,43.76949444,-87.85158944\\nSBN,South Bend Regional,South Bend,IN,USA,41.70895361,-86.31847417\\nSBO,Emanuel County,Swainsboro,GA,USA,32.60825,-82.36869444\\nSBP,San Luis Obispo Co-McChesney,San Luis Obispo,CA,USA,35.23705806,-120.6423931\\nSBS,Steamboat Springs,Steamboat Springs,CO,USA,40.51625944,-106.8663006\\nSBU,Blue Earth Municipal,Blue Earth,MN,USA,43.59534389,-94.09284833\\nSBX,Shelby,Shelby,MT,USA,48.54125278,-111.8720722\\nSBY,Salisbury-Ocean City: Wicomico Regional,Salisbury,MD,USA,38.34052611,-75.51028806\\nSCB,Scribner State,Scribner,NE,USA,41.61033333,-96.62986111\\nSCC,Deadhorse,Deadhorse,AK,USA,70.19475583,-148.4651608\\nSCD,Merkel Field Sylacauga Municipal,Sylacauga,AL,USA,33.17183583,-86.30553778\\nSCE,University Park,NA,NA,USA,40.851206,-77.846302\\nSCH,Schenectady Cty,Schenectady,NY,USA,42.85245556,-73.9288675\\nSCK,Stockton Metro,Stockton,CA,USA,37.89426694,-121.2386203\\nSCM,Scammon Bay,Scammon Bay,AK,USA,61.84454111,-165.5737492\\nSCX,Scott Municipal,Oneida,TN,USA,36.45569444,-84.58575\\nSD07,Bison Municipal,Bison,SD,USA,45.51859778,-102.4671042\\nSD10,Canton Municipal,Canton,SD,USA,43.30888889,-96.571\\nSD12,Wilder,De Smet,SD,USA,44.43080278,-97.56118861\\nSD16,Eureka Municipal,Eureka,SD,USA,45.79998111,-99.6420625\\nSD18,Flandreau Municipal,Flandreau,SD,USA,44.00386056,-96.59310139\\nSD22,Hoven Municipal,Hoven,SD,USA,45.25755861,-99.79783944\\nSD28,McLaughlin Municipal,McLaughlin,SD,USA,45.79680833,-100.7842503\\nSD32,Murdo Municipal,Murdo,SD,USA,43.85165639,-100.7120811\\nSD33,Parkston Municipal,Parkston,SD,USA,43.37915361,-97.97118278\\nSD34,Presho Municipal,Presho,SD,USA,43.90637833,-100.0370669\\nSDA,Shenandoah Municipal,Shenandoah,IA,USA,40.75148167,-95.41347222\\nSDF,Louisville International-Standiford,Louisville,KY,USA,38.17438889,-85.736\\nSDL,Scottsdale,Scottsdale,AZ,USA,33.622875,-111.9105333\\nSDM,Brown Municipal,San Diego,CA,USA,32.57230556,-116.98025\\nSDP,Sand Point Municipal,Sand Point,AK,USA,55.31502778,-160.5176944\\nSDY,Sidney-Richland Municipal,Sidney,MT,USA,47.70685778,-104.1925544\\nSEA,Seattle-Tacoma Intl,Seattle,WA,USA,47.44898194,-122.3093131\\nSEE,Gillespie,San Diego (El Cajon),CA,USA,32.82623111,-116.9724497\\nSEF,Sebring And Industrial Park,Sebring,FL,USA,27.45640278,-81.3424\\nSEG,Penn Valley,Selinsgrove,PA,USA,40.82052917,-76.86377611\\nSEM,Craig,Selma,AL,USA,32.34394667,-86.98780333\\nSEP,Clark Field Municipal,Stephenville,TX,USA,32.21532333,-98.17766722\\nSER,Freeman Municipal,Seymour,IN,USA,38.92355361,-85.90736556\\nSET,St Charles County Smart,St Charles,MO,USA,38.92969444,-90.42996111\\nSEZ,Sedona,Sedona,AZ,USA,34.84862889,-111.7884614\\nSFB,Orlando Sanford,Orlando,FL,USA,28.77764,-81.23748944\\nSFD,Bob Wiley,Winner,SD,USA,43.39058278,-99.84256194\\nSFF,Felts,Spokane,WA,USA,47.68281806,-117.3225583\\nSFM,Sanford Regional,Sanford,ME,USA,43.39386111,-70.70800028\\nSFO,San Francisco International,San Francisco,CA,USA,37.61900194,-122.3748433\\nSFQ,Suffolk Municipal,Suffolk,VA,USA,36.68235361,-76.60187333\\nSFY,Tri-Township,Savanna,IL,USA,42.04581972,-90.10760056\\nSFZ,North Central State,Pawtucket,RI,USA,41.92076333,-71.49138139\\nSGF,Springfield-Branson Regional,Springfield,MO,USA,37.24432611,-93.38685806\\nSGH,Springfield-Beckley Municipal,Springfield,OH,USA,39.84028194,-83.84015056\\nSGJ,St. Augustine,St. Augustine,FL,USA,29.95925,-81.33975\\nSGR,Sugar Land Municipal/Hull,Houston,TX,USA,29.62225306,-95.65652889\\nSGS,South St.Paul Municipal,South St Paul,MN,USA,44.85713278,-93.03285389\\nSGT,Stuttgart Municipal,Stuttgart,AR,USA,34.60054,-91.57457417\\nSGU,St George Muni,St George,UT,USA,37.09058333,-113.5930556\\nSGY,Skagway,Skagway,AK,USA,59.46006194,-135.3156636\\nSHD,Shenandoah Valley Regional,Staunton/Harrisonburg,VA,USA,38.26384333,-78.89643806\\nSHG,Shungnak,Shungnak,AK,USA,66.88916556,-157.1505119\\nSHH,Shishmaref,Shishmaref,AK,USA,66.24956861,-166.0895589\\nSHL,Sheldon Municipal,Sheldon,IA,USA,43.20839361,-95.83343306\\nSHN,Sanderson,Shelton,WA,USA,47.23355556,-123.1475556\\nSHR,Sheridan County,Sheridan,WY,USA,44.76919556,-106.9802794\\nSHV,Shreveport Regional,Shreveport,LA,USA,32.4466275,-93.82559833\\nSHX,Shageluk,Shageluk,AK,USA,62.69511944,-159.5690614\\nSIG,Fernando Luis Ribas Dominicci,San Juan,PR,USA,18.45675,-66.09883333\\nSIK,Sikeston Memorial Municipal,Sikeston,MO,USA,36.89888889,-89.56175\\nSIT,Sitka,Sitka,AK,USA,57.04713806,-135.3615983\\nSIV,Sullivan County,Sullivan,IN,USA,39.1147125,-87.44832917\\nSIY,Siskiyou County,Montague,CA,USA,41.78144167,-122.4681094\\nSJC,San Jose International,San Jose,CA,USA,37.36186194,-121.9290089\\nSJN,St Johns Industrial Air Park,St Johns,AZ,USA,34.51855556,-109.37875\\nSJT,San Angelo Regional /Mathis,San Angelo,TX,USA,31.35775,-100.4963056\\nSJU,Luis Munoz Marin International,San Juan,PR,USA,18.43941667,-66.00183333\\nSJX,Beaver Island,St James,MI,USA,45.69227778,-85.56630556\\nSKA,Fairchild AFB,NA,NA,USA,47.615058,-117.655803\\nSKI,Sac City Municipal,Sac City,IA,USA,42.37908333,-94.97958333\\nSKW,Skwentna,Skwentna,AK,USA,61.965295,-151.1913661\\nSKX,Taos Municipal,Taos,NM,USA,36.45819,-105.6724289\\nSLB,Storm Lake Municipal,Storm Lake,IA,USA,42.59719444,-95.24066667\\nSLC,Salt Lake City Intl,Salt Lake City,UT,USA,40.78838778,-111.9777731\\nSLE,McNary Fld,Salem,OR,USA,44.90952778,-123.0025\\nSLG,Smith,Siloam Springs,AR,USA,36.19060778,-94.49088306\\nSLK,Adirondack,Saranac Lake,NY,USA,44.38531,-74.20618472\\nSLN,Salina Municipal,Salina,KS,USA,38.7914825,-97.65060333\\nSLO,Salem-Leckrone,Salem,IL,USA,38.64287222,-88.96418528\\nSLQ,Sleetmute,Sleetmute,AK,USA,61.70931139,-157.1557008\\nSLR,Sulphur Springs Municipal,Sulphur Springs,TX,USA,33.15983333,-95.62113889\\nSMD,Smith,Fort Wayne,IN,USA,41.14335389,-85.15277694\\nSME,Somerset-Pulaski County,Somerset,KY,USA,37.05419722,-84.61494139\\nSMF,Sacramento International,Sacramento,CA,USA,38.69542167,-121.5907669\\nSMN,Lemhi County,Salmon,ID,USA,45.12047778,-113.8820103\\nSMO,Santa Monica Municipal,Santa Monica,CA,USA,34.01582194,-118.4512961\\nSMQ,Somerset,Somerville,NJ,USA,40.62599083,-74.67024333\\nSMS,Sumter Municipal,Sumter,SC,USA,33.99569444,-80.3615\\nSMX,Santa Maria Pub/Capt G Allan Hancock,Santa Maria,CA,USA,34.89924833,-120.4575825\\nSNA,John Wayne /Orange Co,Santa Ana,CA,USA,33.67565861,-117.8682225\\nSNH,Savannah Hardin County,Savannah,TN,USA,35.17036,-88.21587\\nSNK,Winston,Snyder,TX,USA,32.69338667,-100.9504525\\nSNL,Shawnee Municipal,Shawnee,OK,USA,35.35730333,-96.94282833\\nSNP,St. Paul,St. Paul,AK,USA,57.16733333,-170.2204444\\nSNS,Salinas Municipal,Salinas,CA,USA,36.66279222,-121.6063603\\nSNY,Sidney Municipal,Sidney,NE,USA,41.10133333,-102.9852778\\nSOP,Moore County,Pinehurst/Southern Pines,NC,USA,35.23735278,-79.39116944\\nSOV,Seldovia,Seldovia,AK,USA,59.44243917,-151.7040503\\nSOW,Show Low Municipal,Show Low,AZ,USA,34.26527194,-110.0054075\\nSPA,Spartanburg Downtown Memorial,Spartanburg,SC,USA,34.91572222,-81.9565\\nSPB,Scappoose Industrial Airpark,Scappoose,OR,USA,45.77250444,-122.8623611\\nSPF,Black Hills-Clyde Ice,Spearfish,SD,USA,44.48022222,-103.7768889\\nSPG,Albert Whitted Municipal,St. Petersburg,FL,USA,27.76511111,-82.62697222\\nSPH,Springhill,Springhill,LA,USA,32.98316472,-93.41081028\\nSPI,Capital,Springfield,IL,USA,39.84395194,-89.67761861\\nSPN,Tinian International Airport,NA,NA,N Mariana Islands,14.996111,145.621384\\nSPS,Sheppard AFB/Wichita Falls Municipal,Wichita Falls,TX,USA,33.98879611,-98.49189333\\nSPW,Spencer Municipal,Spencer,IA,USA,43.16552778,-95.20280556\\nSPX,Houston-Gulf,Houston,TX,USA,29.50836111,-95.05133333\\nSQI,Whiteside Co,Sterling Rockfalls,IL,USA,41.74284139,-89.67629028\\nSQL,San Carlos,San Carlos,CA,USA,37.511855,-122.2495236\\nSRB,Upper Cumberland Regional,Sparta,TN,USA,36.05593278,-85.5307475\\nSRC,Searcy Municipal,Searcy,AR,USA,35.21194639,-91.737165\\nSRQ,Sarasota Bradenton International,Sarasota,FL,USA,27.39533333,-82.55411111\\nSRR,Sierra Blanca Regional,Ruidoso,NM,USA,33.46285,-105.5347508\\nSRV,Stony River 2,Stony River,AK,USA,61.789875,-156.5881861\\nSSF,Stinson Municipal,San Antonio,TX,USA,29.3370075,-98.47114056\\nSSI,Malcolm McKinnon,Brunswick,GA,USA,31.1515925,-81.39134667\\nSSQ,Shell Lake Municipal,Shell Lake,WI,USA,45.73138139,-91.92066194\\nSTC,St Cloud Regional,St Cloud,MN,USA,45.54532417,-94.05833667\\nSTE,Stevens Point Municipal,Stevens Point,WI,USA,44.54513556,-89.53028444\\nSTF,George M Bryan,Starkville,MS,USA,33.43381667,-88.84863806\\nSTJ,Rosecrans Memorial,St Joseph,MO,USA,39.77194444,-94.90970556\\nSTK,Crosson,Sterling,CO,USA,40.6152625,-103.2646556\\nSTL,Lambert-St Louis International,St Louis,MO,USA,38.74768694,-90.35998972\\nSTP,St Paul Downtown Holman,St Paul,MN,USA,44.9344725,-93.05999861\\nSTS,Sonoma Co,Santa Rosa,CA,USA,38.50897694,-122.8128803\\nSTT,Cyril E. King,Charlotte Amalie,VI,USA,18.33730556,-64.97336111\\nSTX,Henry E. Rohlsen,Christiansted,VI,USA,17.70188889,-64.79855556\\nSUA,Witham,Stuart,FL,USA,27.18169444,-80.22108333\\nSUD,Stroud Municipal,Stroud,OK,USA,35.78756833,-96.65862861\\nSUE,Door County Cherryland,Sturgeon Bay,WI,USA,44.84366222,-87.42154111\\nSUN,Friedman Memorial,Hailey,ID,USA,43.50484139,-114.2965903\\nSUS,Spirit of St Louis,St Louis,MO,USA,38.66187028,-90.65123\\nSUT,Brunswick County,Southport,NC,USA,33.92925694,-78.07499167\\nSUW,Richard I Bong,Superior,WI,USA,46.6897175,-92.094655\\nSUX,Sioux Gateway,Sioux City,IA,USA,42.40260333,-96.38436694\\nSVA,Savoonga,Savoonga,AK,USA,63.68639444,-170.4926361\\nSVC,Grant County,Silver City,NM,USA,32.63654694,-108.1563853\\nSVE,Susanville Municipal,Susanville,CA,USA,40.37684111,-120.5730033\\nSVH,Statesville Municipal,Statesville,NC,USA,35.76526389,-80.95673611\\nSVS,Stevens Village,Stevens Village,AK,USA,66.00900528,-149.0959153\\nSWD,Seward,Seward,AK,USA,60.12693833,-149.4188122\\nSWF,Stewart,Newburgh,NY,USA,41.50409361,-74.10483833\\nSWO,Stillwater Regional,Stillwater,OK,USA,36.16025194,-97.08577028\\nSWT,Seward Municipal,Seward,NE,USA,40.86525806,-97.10931306\\nSWW,Avenger,Sweetwater,TX,USA,32.46736806,-100.4665508\\nSXL,Summersville,Summersville,WV,USA,38.23163889,-80.87080556\\nSXP,Sheldon Point,Sheldon Point,AK,USA,62.52055556,-164.8477778\\nSXQ,Soldotna,Soldotna,AK,USA,60.47613889,-151.0324444\\nSYF,Cheyenne County Municipal,St Francis,KS,USA,39.76104833,-101.7958414\\nSYI,Bomar Field-Shelbyville Municipal,Shelbyville,TN,USA,35.56009889,-86.44249333\\nSYR,Syracuse-Hancock Intl,Syracuse,NY,USA,43.11118694,-76.10631056\\nSYV,Sylvester,Sylvester,GA,USA,31.55851111,-83.89573389\\nSZP,Santa Paula,Santa Paula,CA,USA,34.34722167,-119.061215\\nSZT,Sandpoint,Sandpoint,ID,USA,48.29965139,-116.5597681\\nSZY,Robert Sibley,Selmer,TN,USA,35.20295,-88.49836139\\nT00,Chambers County,Anahauac,TX,USA,29.77,-94.66361194\\nT03,Tuba City,Tuba City,AZ,USA,36.09276972,-111.3826419\\nT08,Tomahawk Regional,Tomahawk,WI,USA,45.46913889,-89.80569444\\nT18,Brooks County,Falfurrias,TX,USA,27.20683333,-98.12117083\\nT28,Lampasas Municipal,Lampasas,TX,USA,31.10672694,-98.19600194\\nT35,Cameron Municipal Airpark,Cameron,TX,USA,30.87935556,-96.97109694\\nT36,Paul Pittman Memorial,Tylertown,MS,USA,31.14601111,-90.168145\\nT41,La Porte Municipal,La Porte,TX,USA,29.66925,-95.06419444\\nT44,Trident Basin,Kodiak,AK,USA,57.78083333,-152.3913889\\nT47,Kickapoo Downtown Airpark,Wichita Falls,TX,USA,33.86122222,-98.4904425\\nT49,Big Spring McMahon-Wrinkle,Big Spring,TX,USA,32.21261111,-101.5216389\\nT53,Robstown-Nueces County,Robstown,TX,USA,27.77854306,-97.69052389\\nT56,Crockett-Houston County,Crockett,TX,USA,31.30696111,-95.40383056\\nT57,Garland Heliport,Garland,TX,USA,32.887625,-96.6836075\\nT60,Stonewall County,Aspermont,TX,USA,33.17231861,-100.1976044\\nT65,Mid Valley,Weslaco,TX,USA,26.17763889,-97.97305556\\nT69,Sinton-San Patricio County,Sinton,TX,USA,28.03925,-97.54244444\\nT71,Cuero Municipal,Cuero,TX,USA,29.08358806,-97.26693417\\nT72,Hearne Municipal,Hearne,TX,USA,30.87182917,-96.62222639\\nT74,Taylor Municipal,Taylor,TX,USA,30.57194444,-97.44316667\\nT78,Liberty Municipal,Liberty,TX,USA,30.07780556,-94.69855556\\nT80,Kleberg County,Kingsville,TX,USA,27.55086111,-98.03091833\\nT82,Gillespie County,Fredericksburg,TX,USA,30.24369444,-98.90952778\\nT89,Castroville Municipal,Castroville,TX,USA,29.34192083,-98.85090056\\nT90,Chambers County,Winnie/Stowell,TX,USA,29.80411,-94.43102306\\nT97,Calhoun County,Port Lavaca,TX,USA,28.65405111,-96.6813125\\nTAD,Perry Stokes,Trinidad,CO,USA,37.25937778,-104.340675\\nTAL,Ralph M Calhoun Memorial,Tanana,AK,USA,65.17439528,-152.1093886\\nTAN,Taunton Municipal,Taunton,MA,USA,41.87460139,-71.01687583\\nTAZ,Taylorville Municipal,Taylorville,IL,USA,39.53418583,-89.32781222\\nTBN,Forney AAF,Fort Leonard Wood,MO,USA,37.74163111,-92.14073611\\nTBR,Statesboro Municipal,Statesboro,GA,USA,32.48316667,-81.73727778\\nTCC,Tucumcari Municipal,Tucumcari,NM,USA,35.18277806,-103.6031853\\nTCL,Tuscaloosa Municipal,Tuscaloosa,AL,USA,33.2206275,-87.61140139\\nTCS,Truth Or Consequences Municipal,Truth Or Consequences,NM,USA,33.23694444,-107.27175\\nTCT,Takotna,Takotna,AK,USA,62.99270417,-156.0681903\\nTCY,Tracy Municipal,Tracy,CA,USA,37.68910778,-121.4418172\\nTDF,Person County,Roxboro,NC,USA,36.28489194,-78.98422694\\nTDO,Toledo-Winlock Ed Carlson Memorial,Toledo,WA,USA,46.47709083,-122.80686\\nTDZ,Toledo Metcalf,Toledo,OH,USA,41.56487194,-83.48226139\\nTEB,Teterboro,Teterboro,NJ,USA,40.85010139,-74.06083611\\nTEL,Perry County Municipal,Tell City,IN,USA,38.01769694,-86.69093\\nTEW,Mason Jewett,Mason,MI,USA,42.56576833,-84.42321861\\nTEX,Telluride Regional,Telluride,CO,USA,37.95375861,-107.90848\\nTGC,Gibson County,Trenton,TN,USA,35.93245472,-88.84894028\\nTGI,Tangier Island,Tangier,VA,USA,37.82513889,-75.99777778\\nTHA,Tullahoma Regional,Tullahoma,TN,USA,35.38015694,-86.24602333\\nTHM,Thompson Falls,Thompson Falls,MT,USA,47.57493556,-115.2843164\\nTHP,Hot Springs County-Thermopolis Municipal,Thermopolis,WY,USA,43.65828917,-108.2131542\\nTHV,York,York,PA,USA,39.916995,-76.87302611\\nTIW,Tacoma Narrows,Tacoma,WA,USA,47.26793111,-122.5780997\\nTIX,Space Cost Regional,Titusville,FL,USA,28.51479944,-80.7992275\\nTKA,Talkeetna,Talkeetna,AK,USA,62.3205,-150.0936944\\nTKE,Tenakee SPB,Tenakee Springs,AK,USA,57.77965833,-135.2184439\\nTKI,McKinney Municipal,McKinney,TX,USA,33.17794778,-96.5905275\\nTKX,Kennett Memorial,Kennett,MO,USA,36.23087083,-90.03466806\\nTLH,Tallahassee Regional,Tallahassee,FL,USA,30.39652778,-84.35033333\\nTLR,Mefford,Tulare,CA,USA,36.15630556,-119.3261667\\nTLT,Tuluksak,Tuluksak,AK,USA,61.09676222,-160.9684167\\nTMA,Henry Tift Myers,Tifton,GA,USA,31.42879528,-83.48787167\\nTMB,Kendall-Tamiami Executive,Miami,FL,USA,25.64788889,-80.43277778\\nTNI,West Tinian,Peipeinimaru,CQ,USA,14.99685028,-145.6180383\\nTNP,Twentynine Palms,Twentynine Palms,CA,USA,34.13208528,-115.9458319\\nTNT,Dade Collier T And T,Miami,FL,USA,25.86180556,-80.897\\nTNU,Newton Municipal,Newton,IA,USA,41.67442972,-93.02172917\\nTOA,Zamperini,Torrance,CA,USA,33.8033775,-118.3396\\nTOB,Dodge Center,Dodge Center,MN,USA,44.018,-92.8315\\nTOC,\\\"Toccoa, R G Le Tourneau\\\",Toccoa,GA,USA,34.59376444,-83.2958\\nTOG,Togiak Village,Togiak,AK,USA,59.05284222,-160.3969339\\nTOI,Troy Municipal,Troy,AL,USA,31.86041667,-86.01213889\\nTOL,Toledo Express,Toledo,OH,USA,41.58680556,-83.80783333\\nTOP,Philip Billard Municipal,Topeka,KS,USA,39.0686575,-95.62248361\\nTOR,Torrington Muni,Torrington,WY,USA,42.0645475,-104.1526986\\nTPA,Tampa International,Tampa,FL,USA,27.97547222,-82.53325\\nTPF,Peter O. Knight,Tampa,FL,USA,27.91557833,-82.44926083\\nTPH,Tonopah,Tonopah,NV,USA,38.06020222,-117.0871536\\nTPL,Draughon-Miller Central Texas Regional,Temple,TX,USA,31.1525,-97.40777778\\nTPO,Port Alsworth,Port Alsworth,AK,USA,60.20433333,-154.3188728\\nTQE,Municipal,Tekamah,NE,USA,41.76352778,-96.17794444\\nTQH,Tahlequah Municipal,Tahlequah,OK,USA,35.92891667,-95.00452778\\nTQK,Scott City Municipal,Scott City,KS,USA,38.47427778,-100.8849444\\nTRI,Tri-Cities Regional,Bristol,TN,USA,36.47521417,-82.40742056\\nTRK,Truckee-Tahoe,Truckee,CA,USA,39.32004222,-120.1395628\\nTRL,Terrell Municipal,Terrell,TX,USA,32.71004667,-96.26742306\\nTRM,Desert Resorts Regional,Palm Springs,CA,USA,33.62789944,-116.1601194\\nTRX,Trenton Municipal,Trenton,MO,USA,40.08351333,-93.59063472\\nTSO,Carroll County-Tolson,Carrollton,OH,USA,40.56186833,-81.07748611\\nTSP,Tehachapi Municipal,Tehachapi,CA,USA,35.13497222,-118.43925\\nTT01,Pagan Airstrip,Shomu-Shon,CQ,USA,18.12444444,-145.7686111\\nTTA,Sanford-Lee County Regional,Sanford,NC,USA,35.58247222,-79.10136111\\nTTD,Portland-Troutdale,Portland,OR,USA,45.54936889,-122.4012519\\nTTF,Monroe Custer,Monroe,MI,USA,41.93990639,-83.43468306\\nTTN,Trenton-Mercer County,Trenton,NJ,USA,40.27669111,-74.81346833\\nTUL,Tulsa International,Tulsa,OK,USA,36.19837222,-95.88824167\\nTUP,Tupelo Municipal,Tupelo,MS,USA,34.26810833,-88.769895\\nTUS,Tucson International,Tucson,AZ,USA,32.11608333,-110.9410278\\nTVB,Cabool Memorial,Cabool,MO,USA,37.13244083,-92.08396167\\nTVC,Cherry Capital,Traverse City,MI,USA,44.74144472,-85.582235\\nTVF,Thief River Falls Regional,Thief River Falls,MN,USA,48.06550028,-96.18336083\\nTVI,Thomasville Municipal,Thomasville,GA,USA,30.90155194,-83.88133556\\nTVK,Centerville Municipal,Centerville,IA,USA,40.68390306,-92.90103333\\nTVL,Lake Tahoe,South Lake Tahoe,CA,USA,38.89388167,-119.9953347\\nTVR,Vicksburg Tallulah Regional,Tallulah,LA,USA,32.35160639,-91.02768917\\nTVY,Tooele Valley,Tooele,UT,USA,40.6122725,-112.3507719\\nTWF,Joslin Field - Magic Valley,Twin Falls,ID,USA,42.48180389,-114.4877356\\nTWM,Richard B. Helgeson,Two Harbors,MN,USA,47.049225,-91.74514167\\nTXK,Texarkana Regional-Webb,Texarkana,AR,USA,33.45370806,-93.99102\\nTYL,Taylor,Taylor,AZ,USA,34.45283333,-110.1148056\\nTYQ,Indianapolis Terry,Indianapolis,IN,USA,40.03064972,-86.2514375\\nTYR,Tyler Pounds,Tyler,TX,USA,32.35413889,-95.40238611\\nTYS,McGhee-Tyson,Knoxville,TN,USA,35.81248722,-83.99285583\\nTZR,Bolton,Columbus,OH,USA,39.90081778,-83.13719361\\nTZT,Belle Plaine Municipal,Belle Plaine,IA,USA,41.87877778,-92.28456944\\nTZV,Tompkinsville-Monroe County,Tompkinsville,KY,USA,36.72978,-85.65191556\\nU02,McCarley,Blackfoot,ID,USA,43.20925,-112.3495861\\nU03,Buhl Municipal,Buhl,ID,USA,42.59157139,-114.7967178\\nU05,Riddick,Philipsburg,MT,USA,46.31936972,-113.3050642\\nU08,Perkins,Overton,NV,USA,36.56803,-114.4433133\\nU10,Preston,Preston,ID,USA,42.10690806,-111.9125389\\nU14,Nephi Municipal,Nephi,UT,USA,39.73884333,-111.8716011\\nU25,Dubois Municipal,Dubois,WY,USA,43.54834722,-109.6902611\\nU30,Temple Bar,Temple Bar,AZ,USA,36.02054056,-114.3352461\\nU34,Green River Muni,Green River,UT,USA,38.96136167,-110.2273619\\nU36,Aberdeen Municipal,Aberdeen,ID,USA,42.92102222,-112.8811053\\nU42,Salt Lake City Municipal 2,Salt Lake City,UT,USA,40.61954,-111.9928858\\nU43,Monticello,Monticello,UT,USA,37.937215,-109.3465053\\nU52,Beaver Municipal,Beaver,UT,USA,38.23071,-112.6753497\\nU55,Panguitch Municipal,Panguitch,UT,USA,37.84523333,-112.3918731\\nU59,Driggs-Reed Memorial,Driggs,ID,USA,43.74193056,-111.0978608\\nU68,North Big Horn County,Cowley/Lovell/Byron,WY,USA,44.91167028,-108.4455092\\nU69,Duchesne Municipal,Duchesne,UT,USA,40.19190167,-110.3809886\\nU70,Cascade,Cascade,ID,USA,44.4937825,-116.0162422\\nU76,Mountain Home Municipal,Mountain Home,ID,USA,43.13125278,-115.7295944\\nU77,Spanish Fork-Springville,Spanish Fork,UT,USA,40.14162139,-111.6613125\\nU82,Council Municipal,Council,ID,USA,44.7498875,-116.4468092\\nU96,Cal Black Memorial,Halls Crossing,UT,USA,37.44221444,-110.5695836\\nUAO,Aurora State,Aurora,OR,USA,45.24713889,-122.7700556\\nUBE,Cumberland Municipal,Cumberland,WI,USA,45.50597028,-91.98108694\\nUBS,Columbus-Lowndes County,Columbus,MS,USA,33.46539667,-88.38031639\\nUBX,Cuba Municipal,Cuba,MO,USA,38.06877667,-91.42885694\\nUCA,Oneida Cty,Utica,NY,USA,43.14511944,-75.38385889\\nUCP,New Castle Muni,New Castle,PA,USA,41.02533778,-80.41337194\\nUCY,Everett-Stewart,Union City,TN,USA,36.38025,-88.98547778\\nUDD,Bermuda Dunes,Palm Springs,CA,USA,33.7484375,-116.2748133\\nUDG,Darlington County,Darlington,SC,USA,34.44919444,-79.89036111\\nUES,Waukesha County,Waukesha,WI,USA,43.04102778,-88.23705556\\nUGN,Waukegan Regional,Chicago/Waukegan,IL,USA,42.42216,-87.86790694\\nUIL,Quillayute,Forks,WA,USA,47.93714444,-124.5612497\\nUIN,Quincy Municipal-Baldwin,Quincy,IL,USA,39.94262417,-91.19445611\\nUIZ,Berz-Macomb,Utica,MI,USA,42.66389361,-82.96542583\\nUKF,Wilkes County,North Wilkesboro,NC,USA,36.22284028,-81.0983375\\nUKI,Ukiah Municipal,Ukiah,CA,USA,39.12595722,-123.200855\\nUKL,Coffey County,Burlington,KS,USA,38.30248472,-95.7249575\\nUKT,Quakertown,Quakertown,PA,USA,40.43521194,-75.38192861\\nULM,New Ulm Municipal,New Ulm,MN,USA,44.31957306,-94.50230778\\nULS,Ulysses,Ulysses,KS,USA,37.60375278,-101.3733889\\nUMP,Indianapolis Metropolitan,Indianapolis,IN,USA,39.9352025,-86.04495333\\nUNI,Ohio University,Athens/Albany,OH,USA,39.21096222,-82.23142583\\nUNK,Unalakleet,Unalakleet,AK,USA,63.88835917,-160.7989517\\nUNO,West Plains Municipal,West Plains,MO,USA,36.87813889,-91.90269444\\nUNU,Dodge County,Juneau,WI,USA,43.42658333,-88.70322222\\nUNV,University Park,State College,PA,USA,40.84927778,-77.84869444\\nUOS,Franklin County,Sewanee,TN,USA,35.20397028,-85.89858889\\nUOX,University-Oxford,Oxford,MS,USA,34.38431528,-89.53530972\\nUPP,Upolu,Hawi,HI,USA,20.26525583,-155.8599875\\nUSE,Fulton County,Wauseon,OH,USA,41.61033333,-84.12552778\\nUTS,Huntsville Municipal,Huntsville,TX,USA,30.74688667,-95.58716667\\nUUO,Willow,Willow,AK,USA,61.75441667,-150.0516639\\nUUU,Newport State,Newport,RI,USA,41.53243972,-71.28154389\\nUUV,Sullivan Regional,Sullivan,MO,USA,38.23343056,-91.16433333\\nUVA,Garner,Uvalde,TX,USA,29.21135028,-99.74358306\\nUWL,New Castle-Henry Co,New Castle,IN,USA,39.87585167,-85.32646806\\nUYF,Madison County,London,OH,USA,39.93272694,-83.46200361\\nUZA,Rock Hill Municipal/Bryant,Rock Hill,SC,USA,34.98783333,-81.05716667\\nVAK,Chevak,Chevak,AK,USA,61.53363583,-165.5837322\\nVAY,South Jersey Reg,Mount Holly,NJ,USA,39.94289056,-74.84571944\\nVBT,Bentonville Municipal,Bentonville,AR,USA,36.34571528,-94.219345\\nVCB,Nut Tree,Vacaville,CA,USA,38.37675167,-121.962455\\nVCT,Victoria Regional,Victoria,TX,USA,28.85255556,-96.91848722\\nVCV,Southern California Logistic,Victorville,CA,USA,34.593225,-117.3794667\\nVDI,Vidalia Municipal,Vidalia,GA,USA,32.19255556,-82.37194444\\nVDZ,Valdez,Valdez,AK,USA,61.13395028,-146.24836\\nVEE,Venetie,Venetie,AK,USA,67.02269444,-146.4137753\\nVEL,Vernal,Vernal,UT,USA,40.44090167,-109.5099203\\nVER,Jesse Viertel Memorial,Boonville,MO,USA,38.94577556,-92.68277139\\nVES,Darke County,Versailles,OH,USA,40.20441667,-84.53191667\\nVGT,North Las Vegas,Las Vegas,NV,USA,36.21166667,-115.19575\\nVHN,Culberson County,Van Horn,TX,USA,31.05784417,-104.7838056\\nVIH,Rolla National,Rolla/Vichy,MO,USA,38.12743222,-91.7695225\\nVIQ,Neillsville Municipal,Neillsville,WI,USA,44.55812861,-90.51224694\\nVIS,Visalia Municipal,Visalia,CA,USA,36.31866667,-119.3928889\\nVJI,Virginia Highlands,Abingdon,VA,USA,36.68711028,-82.03333583\\nVLA,Vandalia Municipal,Vandalia,IL,USA,38.99130556,-89.16622222\\nVLD,Valdosta Regional,Valdosta,GA,USA,30.7825,-83.27672222\\nVMR,Harold Davidson,Vermillion,SD,USA,42.76528917,-96.93425472\\nVNC,Venice Municipal,Venice,FL,USA,27.07161111,-82.44033333\\nVNW,Van Wert County,Van Wert,OH,USA,40.86472222,-84.60944444\\nVNY,Van Nuys,Van Nuys,CA,USA,34.20980972,-118.4899733\\nVPC,Cartersville,Cartersville,GA,USA,34.12313889,-84.84869444\\nVPS,Eglin Air Force Base,Valparaiso,FL,USA,30.48325,-86.5254\\nVPZ,Porter County Municipal,Valparaiso,IN,USA,41.45396667,-87.00707139\\nVQQ,Cecil,Jacksonville,FL,USA,30.21867306,-81.87666444\\nVQS,Antonio Rivera Rodriguez,Isla De Vieques,PR,USA,18.13551806,-65.49182583\\nVRB,Vero Beach Municipal,Vero Beach,FL,USA,27.65555556,-80.41794444\\nVSF,Springfield State/Hartness,Springfield,VT,USA,43.34362889,-72.5173125\\nVTA,Newark-Heath,Newark,OH,USA,40.024675,-82.46182194\\nVTI,Vinton Veterans Memorial Airpark,Vinton,IA,USA,42.21862611,-92.02592806\\nVTN,Miller,Valentine,NE,USA,42.85767194,-100.547355\\nVUJ,Stanly County,Albemarle,NC,USA,35.41669472,-80.15079556\\nVUO,Pearson Airpark,Vancouver,WA,USA,45.6204525,-122.6564883\\nVVV,Ortonville Municipal,Ortonville,MN,USA,45.30566472,-96.42442278\\nVYS,Illinois Valley Regional,Peru/Lasalle,IL,USA,41.35186806,-89.15308417\\nW04,Ocean Shores Municipal,Ocean Shores,WA,USA,47.00369806,-124.143785\\nW05,Gettysburg & Travel Center,Gettysburg,PA,USA,39.84092833,-77.27415139\\nW11,Menomonie Municipal - Score,Menomonie,WI,USA,44.89234639,-91.86777944\\nW22,Upshur County Regional,Buckhannon,WV,USA,39.00035833,-80.27392778\\nW29,Bay Bridge Industrial,Stevensville,MD,USA,38.97638889,-76.32963889\\nW31,Lunenburg County,Kenbridge,VA,USA,36.96015,-78.18499861\\nW33,Friday Harbor,Friday Harbor,WA,USA,48.53732194,-123.0096236\\nW40,Mt Olive Municipal,Mt Olive,NC,USA,35.22224722,-78.03779444\\nW41,Crisfield Municipal,Crisfield,MD,USA,38.01679028,-75.82882056\\nW44,Asheboro Municipal,Asheboro,NC,USA,35.6538825,-79.8950425\\nW45,Luray Caverns,Luray,VA,USA,38.66705556,-78.50058333\\nW66,Warrenton-Fauquier,Warrenton,VA,USA,38.58704667,-77.71138389\\nW78,William M Tuck,South Boston,VA,USA,36.710045,-78.84802028\\nW95,Ocracoke Island,Ocracoke,NC,USA,35.10117083,-75.96595278\\nW96,New Kent County,Quinton,VA,USA,37.50320139,-77.12552694\\nW97,Middle Peninsula Regional,West Point,VA,USA,37.52122778,-76.7646825\\nW99,Grant County,Petersburg,WV,USA,38.99419444,-79.14438889\\nWA10,Grove,Camas/Washougal,WA,USA,45.62777778,-122.4041667\\nWA21,Grand Coulee Dam,Electric City,WA,USA,47.92348361,-119.0805789\\nWA31,Whidbey Air Park,Langley,WA,USA,48.01814917,-122.4384789\\nWA43,Odessa Municipal,Odessa,WA,USA,47.3582025,-118.6733264\\nWAY,Greene Cty,Waynesburg,PA,USA,39.900075,-80.13311667\\nWBB,Stebbins,Stebbins,AK,USA,63.51591972,-162.2827394\\nWBQ,Beaver,Beaver,AK,USA,66.36155056,-147.4012186\\nWBW,Wilkes-Barre Wyoming Valley,Wilkes-Barre,PA,USA,41.29717222,-75.85120556\\nWCR,Chandalar Lake,Chandalar Lake,AK,USA,67.50451667,-148.4832222\\nWDG,Enid Woodring Municipal,Enid,OK,USA,36.37920333,-97.79111222\\nWDR,Winder,Winder,GA,USA,33.98227778,-83.66808333\\nWHP,Whiteman,Los Angeles,CA,USA,34.25932528,-118.4134331\\nWJF,General Wm. J. Fox Airfield,Lancaster,CA,USA,34.74095944,-118.2189489\\nWLD,Strother,Winfield/Arkansas City,KS,USA,37.16861556,-97.03752194\\nWLK,Selawik,Selawik,AK,USA,66.60002778,-159.9861944\\nWLW,Willows-Glenn County,Willows,CA,USA,39.51635389,-122.2175106\\nWMC,Winnemucca Municipal,Winnemucca,NV,USA,40.89661111,-117.8058889\\nWMO,White Mountain,White Mountain,AK,USA,64.68919444,-163.4125556\\nWNA,Napakiak,Napakiak,AK,USA,60.69118917,-161.9695161\\nWRG,Wrangell,Wrangell,AK,USA,56.48432583,-132.3698242\\nWRL,Worland Muni,Worland,WY,USA,43.96571306,-107.9508308\\nWSM,Wiseman,Wiseman,AK,USA,67.40457333,-150.1227417\\nWSN,South Naknek 2,South Naknek,AK,USA,58.70343611,-157.0082511\\nWST,Westerly State,Westerly,RI,USA,41.34961694,-71.80337778\\nWTK,Noatak,Noatak,AK,USA,67.56208333,-162.9752778\\nWVI,Watsonville Municipal,Watsonville,CA,USA,36.93573,-121.7896178\\nWVL,Waterville-Robert Lafleur,Waterville,ME,USA,44.53325,-69.67552778\\nWWD,Cape May Cty,Wildwood,NJ,USA,39.00850694,-74.90827389\\nWWR,West Woodward,Woodward,OK,USA,36.4367025,-99.5209975\\nWYS,Yellowstone,West Yellowstone,MT,USA,44.68839917,-111.1176375\\nX01,Everglades,Everglades,FL,USA,25.84871167,-81.39007944\\nX06,Arcadia Municipal,Arcadia,FL,USA,27.19199444,-81.83730472\\nX07,Lake Wales Municipal,Lake Wales,FL,USA,27.89380556,-81.62038889\\nX10,Belle Glade Municipal,Belle Glade,FL,USA,26.70089833,-80.66227972\\nX14,Labelle Municipal,Labelle,FL,USA,26.74423278,-81.43257556\\nX16,Vandenberg,Tampa,FL,USA,28.01398389,-82.34527917\\nX21,Arthur Dunn Airpark,Titusville,FL,USA,28.62234556,-80.835695\\nX23,Umatilla Municipal,Umatilla,FL,USA,28.922765,-81.65174111\\nX26,Sebastian Municipal,Sebastian,FL,USA,27.81280389,-80.49560833\\nX35,Dunnellon/Marion Co.,Dunellon,FL,USA,29.06177778,-82.37658333\\nX40,Inverness,Inverness,FL,USA,28.80859639,-82.31648167\\nX44,Watson Island Base,Miami,FL,USA,25.77833333,-80.17027778\\nX46,Opa-Locka West,Miami,FL,USA,25.94898194,-80.42338694\\nX47,Flagler County,Bunnell,FL,USA,29.46738889,-81.20633333\\nX51,Homestead General Aviation,Homestead,FL,USA,25.49872139,-80.55422528\\nX59,Valkaria,Valkaria,FL,USA,27.96196472,-80.55977556\\nX60,Williston Municipal,Williston,FL,USA,29.35422,-82.47288194\\nX63,Humacao,Humacao,PR,USA,18.13801667,-65.8007175\\nX66,Charlotte Amalie Harbor Seaplane Base,Charlotte Amalie,VI,USA,18.33856722,-64.94070111\\nX67,Christiansted Harbor Seaplane Base,Christiansted,VI,USA,17.74719528,-64.70486444\\nX95,Diego Jimenez Torres,Fajardo,PR,USA,18.30800972,-65.66182806\\nX96,Cruz Bay Harbor Seaplane Base,Cruz Bay,VI,USA,18.33689833,-64.79958306\\nXNA,Northwest Arkansas Regional,Fayetteville/Springdale/Rogers,AR,USA,36.28186944,-94.30681111\\nXVG,Longville Municipal,Longville,MN,USA,46.99016361,-94.20400222\\nY03,Springfield Municipal,Springfield,SD,USA,42.87999833,-97.90117972\\nY14,Marv Skie-Lincoln County,Tea,SD,USA,43.45747694,-96.80199528\\nY15,Cheboygan City-County,Cheboygan,MI,USA,45.65371028,-84.51927306\\nY19,Mandan Municipal,Mandan,ND,USA,46.76823667,-100.8943433\\nY27,Standing Rock,Fort Yates,ND,USA,46.06638556,-100.6348492\\nY31,West Branch Community,West Branch,MI,USA,44.244825,-84.17980472\\nY37,Park River Municipal,Park River,ND,USA,48.39443778,-97.78147889\\nY47,New Hudson,New Hudson,MI,USA,42.50311694,-83.62371667\\nY50,Wautoma Municipal,Wautoma,WI,USA,44.04162556,-89.30448694\\nY51,Viroqua Municipal,Viroqua,WI,USA,43.57913917,-90.90096333\\nY55,Crandon Municipal,Crandon,WI,USA,45.51662972,-88.93344694\\nY63,Elbow Lake Municipal,Elbow Lake,MN,USA,45.98607111,-95.99199861\\nY66,Drummond Island,Drummond Island,MI,USA,46.00931139,-83.74393417\\nY68,Tracy Municipal,Tracy,MN,USA,44.24995694,-95.60445389\\nY70,Ionia County,Ionia,MI,USA,42.93769972,-85.06066722\\nY74,Hankins,Parshall,ND,USA,47.93640083,-102.1421142\\nY83,Sandusky City,Sandusky,MI,USA,43.45418694,-82.84938028\\nY93,Atlanta Municipal,Atlanta,MI,USA,45.00000833,-84.13333667\\nYAK,Yakutat,Yakutat,AK,USA,59.50336056,-139.6602261\\nYAP,Yap International,NA,NA,Federated States of Micronesia,9.5167,138.1\\nYIP,Willow Run,Detroit,MI,USA,42.2379275,-83.53040889\\nYKM,Yakima Air Terminal,Yakima,WA,USA,46.56816972,-120.5440594\\nYKN,Chan Gurney Municipal,Yankton,SD,USA,42.91669444,-97.38594444\\nYNG,Youngstown-Warren Regional,Youngstown,OH,USA,41.26073556,-80.67909667\\nYUM,Yuma MCAS-Yuma International,Yuma,AZ,USA,32.65658333,-114.6059722\\nZ08,Ofu,Ofu Village,AS,USA,14.18435056,-169.6700236\\nZ09,Kasigluk,Kasigluk,AK,USA,60.87202194,-162.5248094\\nZ13,Akiachak,Akiachak,AK,USA,60.90453167,-161.42091\\nZ17,Ophir,Ophir,AK,USA,63.1460375,-156.529865\\nZ40,Goose Bay,Goose Bay,AK,USA,61.39445139,-149.8455556\\nZ55,Lake Louise,Lake Louise,AK,USA,62.29368944,-146.5794219\\nZ73,Nelson Lagoon,Nelson Lagoon,AK,USA,56.00753611,-161.1603672\\nZ84,Clear,Clear A.F.B.,AK,USA,64.30120361,-149.1201436\\nZ91,Birch Creek,Birch Creek,AK,USA,66.27399583,-145.8240381\\nZ95,Cibecue,Cibecue,AZ,USA,34.00333333,-110.4441667\\nZEF,Elkin Municipal,Elkin,NC,USA,36.28002361,-80.78606861\\nZER,Schuylkill Cty/Joe Zerbey,Pottsville,PA,USA,40.70644889,-76.37314667\\nZPH,Zephyrhills Municipal,Zephyrhills,FL,USA,28.22806472,-82.15591639\\nZUN,Black Rock,Zuni,NM,USA,35.08322694,-108.7917769\\nZZV,Zanesville Municipal,Zanesville,OH,USA,39.94445833,-81.89210528\\n\"","export default \"origin,destination,count\\nABE,ATL,853\\nABE,BHM,1\\nABE,CLE,805\\nABE,CLT,465\\nABE,CVG,247\\nABE,DTW,997\\nABE,JFK,3\\nABE,LGA,9\\nABE,ORD,1425\\nABE,PHL,2\\nABI,DFW,2660\\nABQ,AMA,368\\nABQ,ATL,1067\\nABQ,AUS,433\\nABQ,BWI,546\\nABQ,CLE,12\\nABQ,CVG,260\\nABQ,DAL,3078\\nABQ,DEN,4318\\nABQ,DFW,2888\\nABQ,ELP,799\\nABQ,EWR,167\\nABQ,HOU,1011\\nABQ,IAD,365\\nABQ,IAH,2261\\nABQ,LAS,2402\\nABQ,LAX,2395\\nABQ,LBB,366\\nABQ,MAF,367\\nABQ,MCI,670\\nABQ,MCO,730\\nABQ,MDW,730\\nABQ,MSP,677\\nABQ,OAK,1016\\nABQ,OKC,229\\nABQ,ONT,446\\nABQ,ORD,751\\nABQ,PDX,366\\nABQ,PHX,5265\\nABQ,SAN,1034\\nABQ,SAT,424\\nABQ,SEA,721\\nABQ,SFO,530\\nABQ,SLC,2307\\nABQ,SMF,466\\nABQ,STL,366\\nABQ,TPA,366\\nABQ,TUL,230\\nABQ,TUS,719\\nABY,ATL,1095\\nACK,EWR,234\\nACK,JFK,223\\nACT,DFW,1993\\nACV,CEC,362\\nACV,MRY,2\\nACV,SFO,2343\\nACV,SJC,1\\nACV,SLC,388\\nACV,SMF,618\\nACY,ATL,113\\nACY,JFK,1\\nACY,LGA,2\\nADK,ANC,102\\nADQ,ANC,706\\nAEX,ATL,983\\nAEX,DFW,1005\\nAEX,IAH,342\\nAGS,ATL,2380\\nAGS,CLT,16\\nAGS,LGA,7\\nAKN,ANC,78\\nAKN,DLG,38\\nALB,ATL,1154\\nALB,BOS,1\\nALB,BWI,2297\\nALB,CLE,1113\\nALB,CLT,956\\nALB,CVG,914\\nALB,DCA,327\\nALB,DTW,1013\\nALB,EWR,611\\nALB,FLL,60\\nALB,JFK,367\\nALB,LAS,366\\nALB,MCO,1037\\nALB,MDW,730\\nALB,MSP,57\\nALB,ORD,1630\\nALB,PHL,449\\nALB,SBN,1\\nALB,TPA,391\\nALO,MSP,323\\nAMA,ABQ,366\\nAMA,DAL,2669\\nAMA,DEN,729\\nAMA,DFW,2556\\nAMA,IAH,809\\nAMA,LAS,366\\nAMA,TUL,1\\nANC,ADK,102\\nANC,ADQ,706\\nANC,AKN,116\\nANC,ATL,115\\nANC,BET,1035\\nANC,CDV,362\\nANC,CVG,90\\nANC,DEN,451\\nANC,DFW,153\\nANC,DLG,78\\nANC,DTW,96\\nANC,FAI,3217\\nANC,HNL,236\\nANC,IAH,207\\nANC,JNU,1163\\nANC,LAS,237\\nANC,LAX,238\\nANC,MSP,826\\nANC,OGG,27\\nANC,OME,365\\nANC,ORD,561\\nANC,OTZ,725\\nANC,PDX,576\\nANC,PHX,366\\nANC,SCC,363\\nANC,SEA,6257\\nANC,SFO,181\\nANC,SLC,478\\nASE,ATL,16\\nASE,DEN,3992\\nASE,GJT,1\\nASE,LAX,334\\nASE,MSN,1\\nASE,ORD,332\\nASE,PHX,109\\nASE,RFD,1\\nASE,SFO,62\\nASE,SLC,459\\nATL,ABE,852\\nATL,ABQ,1064\\nATL,ABY,1095\\nATL,ACY,113\\nATL,AEX,982\\nATL,AGS,2381\\nATL,ALB,1153\\nATL,ANC,115\\nATL,ASE,16\\nATL,ATW,742\\nATL,AUS,2255\\nATL,AVL,1936\\nATL,AVP,584\\nATL,BDL,2140\\nATL,BGR,270\\nATL,BHM,2871\\nATL,BMI,2509\\nATL,BNA,3096\\nATL,BOI,41\\nATL,BOS,5990\\nATL,BQK,924\\nATL,BTR,2665\\nATL,BTV,500\\nATL,BUF,3578\\nATL,BWI,5978\\nATL,BZN,60\\nATL,CAE,2494\\nATL,CAK,3902\\nATL,CHA,2082\\nATL,CHO,786\\nATL,CHS,4492\\nATL,CID,357\\nATL,CLE,2865\\nATL,CLT,6720\\nATL,CMH,1796\\nATL,COS,589\\nATL,CRP,5\\nATL,CRW,1430\\nATL,CSG,1481\\nATL,CVG,2810\\nATL,DAB,2413\\nATL,DAY,4372\\nATL,DCA,7289\\nATL,DEN,5726\\nATL,DFW,9847\\nATL,DHN,1397\\nATL,DSM,1114\\nATL,DTW,5612\\nATL,EGE,110\\nATL,ELP,575\\nATL,EVV,1150\\nATL,EWN,791\\nATL,EWR,8028\\nATL,EYW,974\\nATL,FAY,2173\\nATL,FCA,25\\nATL,FLL,7665\\nATL,FLO,614\\nATL,FNT,3132\\nATL,FSD,135\\nATL,FSM,632\\nATL,FWA,1028\\nATL,GNV,2064\\nATL,GPT,3441\\nATL,GRB,93\\nATL,GRK,642\\nATL,GRR,1352\\nATL,GSO,2866\\nATL,GSP,2450\\nATL,GTR,964\\nATL,GUC,2\\nATL,HDN,107\\nATL,HHH,836\\nATL,HNL,637\\nATL,HOU,3593\\nATL,HPN,2155\\nATL,HSV,2627\\nATL,IAD,5309\\nATL,IAH,5268\\nATL,ICT,3146\\nATL,ILM,1996\\nATL,IND,3517\\nATL,ISP,214\\nATL,JAC,118\\nATL,JAN,2694\\nATL,JAX,5656\\nATL,JFK,1915\\nATL,LAS,4766\\nATL,LAW,544\\nATL,LAX,5406\\nATL,LEX,2213\\nATL,LFT,995\\nATL,LGA,10506\\nATL,LIT,2527\\nATL,LWB,185\\nATL,LYH,625\\nATL,MCI,4140\\nATL,MCN,652\\nATL,MCO,9613\\nATL,MDT,1789\\nATL,MDW,3256\\nATL,MEI,674\\nATL,MEM,4866\\nATL,MFE,9\\nATL,MGM,2513\\nATL,MHT,695\\nATL,MIA,6628\\nATL,MKE,3610\\nATL,MLB,2000\\nATL,MLI,2590\\nATL,MLU,983\\nATL,MOB,2224\\nATL,MSN,384\\nATL,MSP,5368\\nATL,MSY,4695\\nATL,MTJ,37\\nATL,MYR,1853\\nATL,OAJ,1178\\nATL,OAK,90\\nATL,OKC,1883\\nATL,OMA,1730\\nATL,ONT,796\\nATL,ORD,7677\\nATL,ORF,2784\\nATL,PBI,4263\\nATL,PDX,1095\\nATL,PFN,2548\\nATL,PHF,4158\\nATL,PHL,6915\\nATL,PHX,4603\\nATL,PIA,622\\nATL,PIT,4555\\nATL,PNS,4429\\nATL,PVD,1389\\nATL,PWM,904\\nATL,RDU,5411\\nATL,RIC,4532\\nATL,RNO,167\\nATL,ROA,1732\\nATL,ROC,2489\\nATL,RSW,4193\\nATL,SAN,2857\\nATL,SAT,3239\\nATL,SAV,3892\\nATL,SBN,1038\\nATL,SCE,121\\nATL,SDF,2754\\nATL,SEA,2574\\nATL,SFO,3462\\nATL,SGF,1171\\nATL,SHV,1816\\nATL,SJC,640\\nATL,SJU,1874\\nATL,SLC,2860\\nATL,SMF,682\\nATL,SNA,1461\\nATL,SRQ,3326\\nATL,STL,3958\\nATL,STT,451\\nATL,STX,67\\nATL,SWF,1617\\nATL,SYR,1419\\nATL,TLH,2484\\nATL,TOL,119\\nATL,TPA,7311\\nATL,TRI,1809\\nATL,TUL,1981\\nATL,TUP,9\\nATL,TUS,668\\nATL,TYS,2428\\nATL,VLD,938\\nATL,VPS,3046\\nATL,XNA,1769\\nATW,ATL,743\\nATW,CHS,1\\nATW,CVG,697\\nATW,DSM,1\\nATW,DTW,1020\\nATW,MKE,1032\\nATW,MSP,90\\nATW,ORD,2288\\nATW,XNA,1\\nAUS,ABQ,435\\nAUS,ATL,2252\\nAUS,BNA,792\\nAUS,BOS,368\\nAUS,BWI,730\\nAUS,CLE,380\\nAUS,CLT,659\\nAUS,CVG,653\\nAUS,DAL,5573\\nAUS,DEN,2673\\nAUS,DFW,5506\\nAUS,DSM,1\\nAUS,DTW,1\\nAUS,ELP,1349\\nAUS,EWR,949\\nAUS,FLL,481\\nAUS,HOU,2319\\nAUS,HRL,367\\nAUS,IAD,670\\nAUS,IAH,3691\\nAUS,IND,218\\nAUS,JAX,226\\nAUS,JFK,1358\\nAUS,LAS,1231\\nAUS,LAX,1733\\nAUS,LBB,692\\nAUS,LGB,245\\nAUS,MAF,470\\nAUS,MCI,459\\nAUS,MCO,632\\nAUS,MDW,712\\nAUS,MEM,834\\nAUS,MSP,55\\nAUS,MSY,444\\nAUS,OAK,236\\nAUS,OKC,88\\nAUS,ONT,305\\nAUS,ORD,2514\\nAUS,ORF,1\\nAUS,PHL,290\\nAUS,PHX,2783\\nAUS,RDU,231\\nAUS,SAN,719\\nAUS,SEA,149\\nAUS,SFO,610\\nAUS,SJC,968\\nAUS,SLC,548\\nAUS,SNA,245\\nAUS,STL,95\\nAUS,TPA,367\\nAUS,TUL,88\\nAUS,TUS,228\\nAVL,ATL,1936\\nAVL,CVG,167\\nAVL,DTW,768\\nAVL,EWR,658\\nAVL,IAH,459\\nAVL,MCO,47\\nAVL,MSP,364\\nAVP,ATL,586\\nAVP,CVG,356\\nAVP,DTW,722\\nAVP,HPN,1\\nAVP,JFK,2\\nAVP,LGA,3\\nAVP,ORD,716\\nAZO,CVG,148\\nAZO,DTW,1177\\nAZO,FAR,1\\nAZO,MSP,245\\nAZO,ORD,2352\\nAZO,XNA,1\\nBDL,ATL,2141\\nBDL,BNA,366\\nBDL,BWI,2880\\nBDL,CLE,544\\nBDL,CLT,1834\\nBDL,CVG,1187\\nBDL,DCA,1182\\nBDL,DEN,214\\nBDL,DFW,1065\\nBDL,DTW,1516\\nBDL,EWR,766\\nBDL,FLL,546\\nBDL,GRB,1\\nBDL,IAD,1397\\nBDL,IAH,120\\nBDL,IND,585\\nBDL,JFK,602\\nBDL,LAS,366\\nBDL,LAX,132\\nBDL,MCO,1755\\nBDL,MDW,1028\\nBDL,MEM,48\\nBDL,MIA,366\\nBDL,MKE,536\\nBDL,MSP,986\\nBDL,ORD,3131\\nBDL,PBI,373\\nBDL,PHL,521\\nBDL,PHX,335\\nBDL,RDU,1150\\nBDL,RSW,134\\nBDL,SJU,366\\nBDL,TPA,1276\\nBET,ANC,1035\\nBFL,DEN,533\\nBFL,FAT,1\\nBFL,LAS,102\\nBFL,LAX,906\\nBFL,PHX,1194\\nBFL,SAN,225\\nBFL,SFO,943\\nBFL,SLC,371\\nBFL,SMF,227\\nBGM,DTW,728\\nBGR,ATL,270\\nBGR,BOS,793\\nBGR,BTV,1\\nBGR,CVG,129\\nBGR,DTW,801\\nBGR,EWR,536\\nBGR,JFK,338\\nBGR,MSP,11\\nBHM,ATL,2876\\nBHM,AUS,1\\nBHM,BNA,696\\nBHM,BWI,1038\\nBHM,CLE,264\\nBHM,CLT,786\\nBHM,CVG,598\\nBHM,DAL,1074\\nBHM,DEN,666\\nBHM,DFW,1287\\nBHM,DTW,892\\nBHM,EWR,668\\nBHM,HOU,723\\nBHM,HSV,1\\nBHM,IAD,245\\nBHM,IAH,2345\\nBHM,JAX,366\\nBHM,JFK,1\\nBHM,LAS,366\\nBHM,LGA,840\\nBHM,MCO,1196\\nBHM,MDW,709\\nBHM,MEM,886\\nBHM,MKE,1\\nBHM,MSY,1008\\nBHM,ORD,1497\\nBHM,PHX,366\\nBHM,RDU,159\\nBHM,SDF,679\\nBHM,SLC,8\\nBHM,STL,366\\nBHM,TPA,1071\\nBIL,DEN,1628\\nBIL,GTF,1\\nBIL,MSP,820\\nBIL,ORD,103\\nBIL,PIH,3\\nBIL,SLC,1950\\nBIS,DEN,1239\\nBIS,MSP,1052\\nBIS,RAP,2\\nBJI,MSP,74\\nBLI,SLC,120\\nBMI,ATL,2511\\nBMI,DFW,60\\nBMI,LAS,50\\nBMI,MCO,173\\nBMI,ORD,2007\\nBNA,ATL,3097\\nBNA,AUS,795\\nBNA,BDL,365\\nBNA,BHM,688\\nBNA,BOS,78\\nBNA,BWI,2502\\nBNA,CID,1\\nBNA,CLE,1147\\nBNA,CLT,2127\\nBNA,CMH,677\\nBNA,COS,1\\nBNA,CVG,769\\nBNA,DCA,1403\\nBNA,DEN,2529\\nBNA,DFW,2859\\nBNA,DTW,2708\\nBNA,EWR,1836\\nBNA,FLL,738\\nBNA,FSD,2\\nBNA,HOU,1504\\nBNA,IAD,418\\nBNA,IAH,2522\\nBNA,JAX,1382\\nBNA,JFK,523\\nBNA,LAS,1202\\nBNA,LAX,1400\\nBNA,LGA,1216\\nBNA,MCI,1302\\nBNA,MCO,1798\\nBNA,MDW,2993\\nBNA,MEM,1020\\nBNA,MIA,731\\nBNA,MKE,772\\nBNA,MSP,785\\nBNA,MSY,1012\\nBNA,OAK,363\\nBNA,ONT,365\\nBNA,ORD,3725\\nBNA,ORF,236\\nBNA,PHL,980\\nBNA,PHX,1124\\nBNA,PVD,366\\nBNA,RDU,1623\\nBNA,SAN,721\\nBNA,SAT,677\\nBNA,SEA,364\\nBNA,SLC,115\\nBNA,STL,258\\nBNA,TPA,1720\\nBOI,ATL,41\\nBOI,ATW,1\\nBOI,DEN,2064\\nBOI,GEG,1042\\nBOI,GJT,1\\nBOI,LAS,756\\nBOI,LAX,1001\\nBOI,MSP,807\\nBOI,OAK,666\\nBOI,ONT,471\\nBOI,ORD,787\\nBOI,PDX,1027\\nBOI,PHX,679\\nBOI,PIT,1\\nBOI,RNO,1029\\nBOI,SAN,475\\nBOI,SEA,1080\\nBOI,SFO,1754\\nBOI,SLC,3342\\nBOS,ACK,1\\nBOS,ATL,5982\\nBOS,AUS,368\\nBOS,BGR,794\\nBOS,BNA,2\\nBOS,BTV,1\\nBOS,BUF,729\\nBOS,BWI,4797\\nBOS,CAK,467\\nBOS,CHS,156\\nBOS,CLE,1362\\nBOS,CLT,3533\\nBOS,CMH,916\\nBOS,CVG,1937\\nBOS,DCA,8899\\nBOS,DEN,2077\\nBOS,DFW,3036\\nBOS,DTW,2306\\nBOS,EWR,3883\\nBOS,FLL,2476\\nBOS,GGG,1\\nBOS,GSO,141\\nBOS,IAD,4184\\nBOS,IAH,1800\\nBOS,IND,950\\nBOS,JAX,647\\nBOS,JFK,7372\\nBOS,LAS,1383\\nBOS,LAX,2234\\nBOS,LGA,12029\\nBOS,LGB,788\\nBOS,MCO,3474\\nBOS,MDW,344\\nBOS,MEM,200\\nBOS,MIA,2196\\nBOS,MKE,209\\nBOS,MSP,1635\\nBOS,MSY,254\\nBOS,MYR,45\\nBOS,OAK,516\\nBOS,ORD,7085\\nBOS,ORF,243\\nBOS,PBI,1743\\nBOS,PDX,366\\nBOS,PHF,715\\nBOS,PHL,6375\\nBOS,PHX,1069\\nBOS,PIT,591\\nBOS,RDU,3777\\nBOS,RIC,689\\nBOS,RSW,1716\\nBOS,SAN,608\\nBOS,SAV,89\\nBOS,SDF,80\\nBOS,SEA,979\\nBOS,SFO,2668\\nBOS,SJC,256\\nBOS,SJU,1274\\nBOS,SLC,707\\nBOS,SRQ,23\\nBOS,STL,865\\nBOS,STT,88\\nBOS,TPA,1785\\nBPT,IAH,276\\nBQK,ATL,925\\nBQN,EWR,366\\nBQN,JFK,661\\nBQN,MCO,492\\nBRO,IAH,1464\\nBRW,ANC,364\\nBRW,FAI,364\\nBTM,SLC,708\\nBTR,ATL,2663\\nBTR,CVG,2\\nBTR,DCA,129\\nBTR,DEN,1\\nBTR,DFW,2922\\nBTR,IAH,2009\\nBTR,MEM,999\\nBTR,MSY,1\\nBTR,ORD,215\\nBTV,ATL,500\\nBTV,BWI,538\\nBTV,CLE,614\\nBTV,CVG,153\\nBTV,DTW,826\\nBTV,EWR,879\\nBTV,IAD,129\\nBTV,IND,1\\nBTV,JFK,2207\\nBTV,MCO,346\\nBTV,MSP,75\\nBTV,ORD,737\\nBUF,ATL,3575\\nBUF,BOS,728\\nBUF,BWI,2439\\nBUF,CLE,633\\nBUF,CLT,1435\\nBUF,CVG,160\\nBUF,DCA,312\\nBUF,DFW,93\\nBUF,DTW,1510\\nBUF,EWR,1469\\nBUF,FLL,672\\nBUF,IAD,16\\nBUF,JFK,3679\\nBUF,LAS,589\\nBUF,MCO,1876\\nBUF,MDW,1276\\nBUF,MSP,227\\nBUF,ORD,3437\\nBUF,PHL,685\\nBUF,PHX,365\\nBUF,RSW,376\\nBUF,TPA,729\\nBUR,DEN,944\\nBUR,DFW,1376\\nBUR,IAD,163\\nBUR,JFK,1366\\nBUR,LAS,5162\\nBUR,OAK,5423\\nBUR,PDX,60\\nBUR,PHX,4751\\nBUR,PMD,1\\nBUR,PSP,1\\nBUR,RNO,1\\nBUR,SEA,1390\\nBUR,SFO,2258\\nBUR,SJC,3377\\nBUR,SLC,1673\\nBUR,SMF,3458\\nBUR,TUS,1\\nBWI,ABQ,549\\nBWI,ALB,2296\\nBWI,ATL,5972\\nBWI,AUS,728\\nBWI,BDL,2863\\nBWI,BHM,1037\\nBWI,BNA,2492\\nBWI,BOS,4795\\nBWI,BTV,539\\nBWI,BUF,2437\\nBWI,CLE,2543\\nBWI,CLT,3652\\nBWI,CMH,1683\\nBWI,CVG,1228\\nBWI,DAB,32\\nBWI,DAY,982\\nBWI,DEN,2664\\nBWI,DFW,2311\\nBWI,DTW,3105\\nBWI,EWR,507\\nBWI,FLL,2710\\nBWI,GRR,1\\nBWI,HOU,1262\\nBWI,IAH,1728\\nBWI,IND,1016\\nBWI,ISP,2427\\nBWI,JAN,664\\nBWI,JAX,1058\\nBWI,JFK,1134\\nBWI,LAS,1626\\nBWI,LAX,898\\nBWI,LGA,7\\nBWI,LIT,366\\nBWI,MCI,1025\\nBWI,MCO,4926\\nBWI,MDW,2809\\nBWI,MEM,827\\nBWI,MHT,3633\\nBWI,MIA,929\\nBWI,MKE,1290\\nBWI,MSP,974\\nBWI,MSY,392\\nBWI,OKC,366\\nBWI,ORD,3545\\nBWI,ORF,1683\\nBWI,PBI,1351\\nBWI,PHL,692\\nBWI,PHX,2098\\nBWI,PIT,1064\\nBWI,PVD,3988\\nBWI,PWM,995\\nBWI,RDU,2082\\nBWI,ROC,863\\nBWI,RSW,1336\\nBWI,SAN,721\\nBWI,SAT,729\\nBWI,SAV,1\\nBWI,SDF,1474\\nBWI,SEA,242\\nBWI,SFO,366\\nBWI,SJU,319\\nBWI,SLC,727\\nBWI,SRQ,245\\nBWI,STL,1682\\nBWI,TPA,3388\\nBZN,ATL,60\\nBZN,BTM,1\\nBZN,DEN,1293\\nBZN,DTW,19\\nBZN,IDA,1\\nBZN,LAX,13\\nBZN,MSP,878\\nBZN,ORD,337\\nBZN,SFO,28\\nBZN,SLC,2029\\nCAE,ATL,2508\\nCAE,CVG,927\\nCAE,DFW,1157\\nCAE,DTW,713\\nCAE,EWR,684\\nCAE,IAD,1386\\nCAE,IAH,164\\nCAE,LGA,609\\nCAE,MEM,706\\nCAE,ORD,1696\\nCAK,ATL,3905\\nCAK,BOS,467\\nCAK,CVG,40\\nCAK,DEN,779\\nCAK,DTW,1044\\nCAK,FLL,8\\nCAK,LAS,42\\nCAK,LGA,793\\nCAK,MCO,371\\nCAK,ORD,1049\\nCAK,RSW,137\\nCAK,TPA,359\\nCDC,LAX,1\\nCDC,SGU,1\\nCDC,SLC,666\\nCDV,ANC,363\\nCDV,YAK,362\\nCEC,ACV,360\\nCEC,SFO,703\\nCHA,ATL,2086\\nCHA,CVG,132\\nCHA,DFW,426\\nCHA,DTW,72\\nCHA,IAH,459\\nCHA,MEM,630\\nCHA,ORD,766\\nCHO,ATL,786\\nCHO,CVG,36\\nCHO,DCA,1\\nCHS,ATL,4494\\nCHS,BOS,156\\nCHS,CLE,150\\nCHS,CLT,1121\\nCHS,CVG,786\\nCHS,DFW,1155\\nCHS,DTW,756\\nCHS,EWR,1284\\nCHS,IAD,712\\nCHS,IAH,73\\nCHS,JAX,2\\nCHS,LGA,1413\\nCHS,MEM,714\\nCHS,MSP,27\\nCHS,ORD,1337\\nCHS,SAV,1\\nCIC,FAT,1\\nCIC,MRY,1\\nCIC,SFO,1390\\nCID,ATL,357\\nCID,CVG,874\\nCID,DEN,798\\nCID,DFW,1897\\nCID,DSM,1\\nCID,DTW,946\\nCID,LGA,156\\nCID,MKE,1\\nCID,MSP,416\\nCID,ORD,3931\\nCLD,LAX,2259\\nCLD,PHX,44\\nCLE,ABE,805\\nCLE,ABQ,12\\nCLE,ALB,1106\\nCLE,ATL,3115\\nCLE,AUS,380\\nCLE,BDL,516\\nCLE,BHM,264\\nCLE,BNA,1128\\nCLE,BOS,1354\\nCLE,BTV,613\\nCLE,BUF,620\\nCLE,BWI,2562\\nCLE,CHS,150\\nCLE,CLT,1981\\nCLE,CMH,17\\nCLE,CVG,493\\nCLE,DAB,12\\nCLE,DAY,869\\nCLE,DCA,934\\nCLE,DEN,976\\nCLE,DFW,1656\\nCLE,DSM,139\\nCLE,DTW,1359\\nCLE,EWR,2105\\nCLE,FLL,618\\nCLE,GRR,1136\\nCLE,GSO,148\\nCLE,GSP,510\\nCLE,IAD,1433\\nCLE,IAH,2151\\nCLE,IND,142\\nCLE,JAX,143\\nCLE,JFK,1392\\nCLE,LAS,1656\\nCLE,LAX,1050\\nCLE,LEX,15\\nCLE,LGA,2936\\nCLE,MCI,1230\\nCLE,MCO,1915\\nCLE,MDT,58\\nCLE,MDW,2561\\nCLE,MEM,1211\\nCLE,MHT,1235\\nCLE,MIA,399\\nCLE,MKE,2226\\nCLE,MSN,317\\nCLE,MSP,1693\\nCLE,MSY,54\\nCLE,OKC,32\\nCLE,OMA,430\\nCLE,ORD,4569\\nCLE,ORF,2\\nCLE,PBI,383\\nCLE,PHL,674\\nCLE,PHX,1110\\nCLE,PVD,360\\nCLE,PWM,306\\nCLE,RDU,319\\nCLE,RIC,905\\nCLE,ROC,928\\nCLE,RSW,595\\nCLE,SAN,85\\nCLE,SAT,232\\nCLE,SAV,321\\nCLE,SDF,679\\nCLE,SEA,231\\nCLE,SFO,466\\nCLE,SJU,43\\nCLE,SLC,346\\nCLE,SRQ,118\\nCLE,STL,1191\\nCLE,SYR,696\\nCLE,TPA,874\\nCLE,TUL,10\\nCLE,TYS,495\\nCLL,DFW,1105\\nCLL,IAH,262\\nCLT,ABE,465\\nCLT,AGS,17\\nCLT,ALB,978\\nCLT,ATL,6722\\nCLT,ATW,1\\nCLT,AUS,660\\nCLT,BDL,1834\\nCLT,BHM,787\\nCLT,BNA,2126\\nCLT,BOS,3551\\nCLT,BUF,1434\\nCLT,BWI,3684\\nCLT,CHS,1122\\nCLT,CLE,1971\\nCLT,CMH,125\\nCLT,CVG,877\\nCLT,DAB,23\\nCLT,DCA,2988\\nCLT,DEN,1925\\nCLT,DFW,3796\\nCLT,DTW,2701\\nCLT,EGE,13\\nCLT,EWR,5953\\nCLT,FAY,95\\nCLT,FLL,3295\\nCLT,GRR,1\\nCLT,GSO,985\\nCLT,HSV,13\\nCLT,IAD,3126\\nCLT,IAH,3711\\nCLT,ILM,1257\\nCLT,IND,1230\\nCLT,JAX,2524\\nCLT,JFK,1866\\nCLT,LAS,1734\\nCLT,LAX,1458\\nCLT,LGA,5339\\nCLT,LIT,39\\nCLT,MCI,1183\\nCLT,MCO,3277\\nCLT,MDT,1144\\nCLT,MDW,13\\nCLT,MEM,2578\\nCLT,MHT,705\\nCLT,MIA,2970\\nCLT,MKE,243\\nCLT,MSP,1816\\nCLT,MSY,1466\\nCLT,MYR,2217\\nCLT,OAJ,6\\nCLT,ORD,5639\\nCLT,ORF,1543\\nCLT,PBI,1873\\nCLT,PDX,136\\nCLT,PHL,3525\\nCLT,PHX,2186\\nCLT,PIT,2349\\nCLT,PNS,371\\nCLT,PVD,1439\\nCLT,PWM,276\\nCLT,RDU,2340\\nCLT,RIC,1801\\nCLT,ROC,412\\nCLT,RSW,1765\\nCLT,SAN,704\\nCLT,SAT,661\\nCLT,SAV,1432\\nCLT,SDF,796\\nCLT,SEA,481\\nCLT,SFO,1427\\nCLT,SJU,796\\nCLT,SLC,212\\nCLT,SMF,76\\nCLT,SRQ,207\\nCLT,STL,1094\\nCLT,STT,418\\nCLT,STX,20\\nCLT,SYR,747\\nCLT,TLH,240\\nCLT,TPA,2811\\nCLT,TRI,16\\nCLT,TUS,208\\nCMH,ATL,1808\\nCMH,BNA,685\\nCMH,BOS,661\\nCMH,BWI,1681\\nCMH,CLE,24\\nCMH,CLT,125\\nCMH,CVG,1185\\nCMH,DCA,77\\nCMH,DEN,385\\nCMH,DFW,1694\\nCMH,DTW,1909\\nCMH,EWR,1646\\nCMH,GRB,1\\nCMH,GRR,1\\nCMH,IAH,841\\nCMH,ICT,1\\nCMH,JFK,515\\nCMH,LAS,1341\\nCMH,LAX,48\\nCMH,LGA,2355\\nCMH,MCI,164\\nCMH,MCO,1074\\nCMH,MDW,2643\\nCMH,MEM,1057\\nCMH,MIA,469\\nCMH,MKE,1054\\nCMH,MSP,1076\\nCMH,OMA,1\\nCMH,ORD,4959\\nCMH,PBI,5\\nCMH,PHL,996\\nCMH,PHX,1096\\nCMH,RDU,500\\nCMH,RSW,137\\nCMH,SLC,291\\nCMH,STL,679\\nCMH,SYR,1\\nCMH,TPA,972\\nCMI,ABI,1\\nCMI,DFW,366\\nCMI,ORD,2406\\nCMI,SPI,1\\nCMX,MSP,318\\nCOD,DEN,481\\nCOD,SLC,707\\nCOS,ABQ,1\\nCOS,ATL,591\\nCOS,CLE,1\\nCOS,CVG,104\\nCOS,DEN,4193\\nCOS,DFW,2036\\nCOS,FAT,1\\nCOS,IAH,1725\\nCOS,LAN,1\\nCOS,LAS,98\\nCOS,LAX,997\\nCOS,MCI,179\\nCOS,MEM,117\\nCOS,MKE,1\\nCOS,MSP,450\\nCOS,ONT,460\\nCOS,ORD,1519\\nCOS,PHX,1393\\nCOS,SAN,472\\nCOS,SFO,364\\nCOS,SLC,1074\\nCOS,SMF,424\\nCPR,DEN,1536\\nCPR,MSP,32\\nCPR,ORD,134\\nCPR,PIH,1\\nCPR,SLC,1006\\nCRP,ATL,6\\nCRP,DFW,2510\\nCRP,HOU,1933\\nCRP,IAH,821\\nCRW,ATL,1430\\nCRW,BNA,1\\nCRW,CVG,391\\nCRW,DTW,208\\nCRW,IAH,674\\nCRW,LEX,1\\nCRW,ORD,709\\nCSG,ATL,1481\\nCVG,ABE,248\\nCVG,ABQ,260\\nCVG,ALB,912\\nCVG,ANC,90\\nCVG,ATL,2758\\nCVG,ATW,697\\nCVG,AUS,653\\nCVG,AVL,167\\nCVG,AVP,357\\nCVG,AZO,149\\nCVG,BDL,1157\\nCVG,BGR,127\\nCVG,BHM,852\\nCVG,BNA,902\\nCVG,BOS,1859\\nCVG,BTR,2\\nCVG,BTV,152\\nCVG,BUF,160\\nCVG,BWI,1235\\nCVG,CAE,942\\nCVG,CAK,39\\nCVG,CHA,132\\nCVG,CHO,35\\nCVG,CHS,786\\nCVG,CID,873\\nCVG,CLE,493\\nCVG,CLT,926\\nCVG,CMH,795\\nCVG,COS,104\\nCVG,CRW,391\\nCVG,DAB,6\\nCVG,DAY,746\\nCVG,DCA,2015\\nCVG,DEN,1384\\nCVG,DFW,3244\\nCVG,DSM,983\\nCVG,DTW,3023\\nCVG,EGE,30\\nCVG,EVV,135\\nCVG,EWR,3094\\nCVG,FLL,683\\nCVG,FSD,555\\nCVG,GRB,447\\nCVG,GRR,1386\\nCVG,GSO,1057\\nCVG,GSP,456\\nCVG,HPN,126\\nCVG,HSV,800\\nCVG,HTS,159\\nCVG,IAD,783\\nCVG,IAH,2048\\nCVG,ILM,140\\nCVG,IND,491\\nCVG,JAC,13\\nCVG,JAN,120\\nCVG,JAX,1125\\nCVG,JFK,1532\\nCVG,LAN,485\\nCVG,LAS,921\\nCVG,LAX,1143\\nCVG,LEX,1525\\nCVG,LGA,3645\\nCVG,LIT,49\\nCVG,MCI,1491\\nCVG,MCO,1305\\nCVG,MDT,1007\\nCVG,MEM,1226\\nCVG,MHT,776\\nCVG,MIA,1045\\nCVG,MKE,839\\nCVG,MSN,259\\nCVG,MSP,1745\\nCVG,MSY,195\\nCVG,MYR,13\\nCVG,OKC,769\\nCVG,OMA,1003\\nCVG,ORD,6014\\nCVG,ORF,450\\nCVG,PBI,389\\nCVG,PDX,318\\nCVG,PFN,36\\nCVG,PHL,1671\\nCVG,PHX,468\\nCVG,PIT,1292\\nCVG,PVD,958\\nCVG,PWM,555\\nCVG,RDU,1087\\nCVG,RIC,786\\nCVG,ROA,1\\nCVG,ROC,730\\nCVG,RSW,539\\nCVG,SAN,571\\nCVG,SAT,882\\nCVG,SAV,732\\nCVG,SBN,12\\nCVG,SCE,23\\nCVG,SDF,635\\nCVG,SEA,790\\nCVG,SFO,777\\nCVG,SGF,245\\nCVG,SLC,1627\\nCVG,SNA,285\\nCVG,SRQ,444\\nCVG,STL,345\\nCVG,SYR,831\\nCVG,TOL,20\\nCVG,TPA,1099\\nCVG,TRI,247\\nCVG,TUL,882\\nCVG,TVC,129\\nCVG,TYS,916\\nCVG,VPS,103\\nCVG,XNA,101\\nCWA,DTW,549\\nCWA,MKE,285\\nCWA,MLI,1\\nCWA,MSP,13\\nCWA,ORD,1715\\nDAB,ATL,2412\\nDAB,BWI,32\\nDAB,CLE,12\\nDAB,CLT,23\\nDAB,CVG,6\\nDAB,EWR,311\\nDAB,JAX,1\\nDAB,LGA,159\\nDAB,MCO,1\\nDAL,ABQ,3106\\nDAL,AMA,2665\\nDAL,AUS,5583\\nDAL,BHM,1051\\nDAL,ELP,2282\\nDAL,HOU,9790\\nDAL,HRL,33\\nDAL,IAH,3730\\nDAL,LBB,2680\\nDAL,LIT,2330\\nDAL,MAF,1997\\nDAL,MCI,3922\\nDAL,MSY,2096\\nDAL,OKC,1686\\nDAL,ORD,1005\\nDAL,SAT,4973\\nDAL,STL,2722\\nDAL,TUL,2277\\nDAY,ATL,4369\\nDAY,BWI,980\\nDAY,CLE,862\\nDAY,CVG,755\\nDAY,DEN,838\\nDAY,DFW,1037\\nDAY,DTW,1322\\nDAY,EWR,948\\nDAY,IAD,53\\nDAY,IAH,864\\nDAY,LAS,43\\nDAY,MCO,416\\nDAY,MKE,609\\nDAY,MSP,692\\nDAY,ORD,1799\\nDAY,TPA,204\\nDBQ,ORD,1349\\nDCA,ALB,304\\nDCA,ATL,7296\\nDCA,BDL,1183\\nDCA,BNA,1401\\nDCA,BOS,8929\\nDCA,BTR,129\\nDCA,BUF,632\\nDCA,CLE,935\\nDCA,CLT,3001\\nDCA,CMH,77\\nDCA,CVG,1841\\nDCA,DEN,1429\\nDCA,DFW,3965\\nDCA,DSM,272\\nDCA,DTW,2982\\nDCA,EWR,2289\\nDCA,FLL,1361\\nDCA,GRR,307\\nDCA,HSV,561\\nDCA,IAH,2919\\nDCA,IND,968\\nDCA,JAN,304\\nDCA,JAX,888\\nDCA,JFK,3017\\nDCA,LAS,365\\nDCA,LAX,366\\nDCA,LEX,311\\nDCA,LGA,11102\\nDCA,MCO,1845\\nDCA,MEM,1043\\nDCA,MHT,306\\nDCA,MIA,2987\\nDCA,MKE,122\\nDCA,MSN,287\\nDCA,MSP,2199\\nDCA,MSY,408\\nDCA,ORD,7427\\nDCA,PBI,909\\nDCA,PHL,5\\nDCA,PHX,1081\\nDCA,PIT,322\\nDCA,PLN,1\\nDCA,PVD,671\\nDCA,RDU,2732\\nDCA,RSW,706\\nDCA,SEA,727\\nDCA,SLC,365\\nDCA,SRQ,12\\nDCA,STL,1296\\nDCA,SYR,313\\nDCA,TPA,1554\\nDCA,XNA,210\\nDEN,ABQ,4309\\nDEN,AMA,731\\nDEN,ANC,451\\nDEN,ASE,3979\\nDEN,ATL,5903\\nDEN,AUS,2719\\nDEN,BDL,213\\nDEN,BFL,533\\nDEN,BHM,651\\nDEN,BIL,1631\\nDEN,BIS,1240\\nDEN,BNA,2556\\nDEN,BOI,2069\\nDEN,BOS,2234\\nDEN,BTR,1\\nDEN,BUR,1238\\nDEN,BWI,2655\\nDEN,BZN,1286\\nDEN,CAK,780\\nDEN,CID,572\\nDEN,CLE,969\\nDEN,CLT,1925\\nDEN,CMH,685\\nDEN,COD,481\\nDEN,COS,4188\\nDEN,CPR,1533\\nDEN,CRW,1\\nDEN,CVG,1384\\nDEN,CYS,1\\nDEN,DAY,850\\nDEN,DCA,1428\\nDEN,DFW,8268\\nDEN,DRO,2473\\nDEN,DSM,1404\\nDEN,DTW,2913\\nDEN,EGE,1673\\nDEN,ELP,1060\\nDEN,EUG,726\\nDEN,EWR,2189\\nDEN,FAR,1246\\nDEN,FAT,1266\\nDEN,FCA,668\\nDEN,FLL,908\\nDEN,FSD,1474\\nDEN,GCC,695\\nDEN,GEG,1440\\nDEN,GJT,2469\\nDEN,GRB,2\\nDEN,GRR,343\\nDEN,GTF,868\\nDEN,GUC,832\\nDEN,HDN,1310\\nDEN,HLN,414\\nDEN,HNL,367\\nDEN,HOU,1056\\nDEN,HSV,654\\nDEN,IAD,2943\\nDEN,IAH,4788\\nDEN,ICT,1583\\nDEN,IDA,979\\nDEN,IND,2083\\nDEN,JAC,1340\\nDEN,JAX,118\\nDEN,JFK,1084\\nDEN,KOA,45\\nDEN,LAS,8147\\nDEN,LAX,8811\\nDEN,LGA,3051\\nDEN,LIH,45\\nDEN,LIT,121\\nDEN,LNK,1200\\nDEN,MBS,1\\nDEN,MCI,5111\\nDEN,MCO,3015\\nDEN,MDW,4338\\nDEN,MEM,1730\\nDEN,MFR,365\\nDEN,MIA,810\\nDEN,MKE,1587\\nDEN,MLI,723\\nDEN,MRY,363\\nDEN,MSN,1003\\nDEN,MSO,1108\\nDEN,MSP,5011\\nDEN,MSY,1174\\nDEN,MTJ,1592\\nDEN,OAK,3100\\nDEN,OGG,163\\nDEN,OKC,2636\\nDEN,OMA,3169\\nDEN,ONT,1544\\nDEN,ORD,6051\\nDEN,PBI,94\\nDEN,PDX,4563\\nDEN,PHL,2975\\nDEN,PHX,8391\\nDEN,PIA,363\\nDEN,PIH,1\\nDEN,PIT,804\\nDEN,PSC,939\\nDEN,PSP,997\\nDEN,RAP,2308\\nDEN,RDM,12\\nDEN,RDU,470\\nDEN,RFD,289\\nDEN,RKS,545\\nDEN,RNO,1350\\nDEN,ROC,1\\nDEN,RSW,221\\nDEN,SAN,5358\\nDEN,SAT,2651\\nDEN,SBA,841\\nDEN,SDF,384\\nDEN,SEA,6414\\nDEN,SFO,5604\\nDEN,SGF,953\\nDEN,SJC,3684\\nDEN,SLC,8905\\nDEN,SMF,3331\\nDEN,SNA,3340\\nDEN,STL,2126\\nDEN,TPA,1682\\nDEN,TUL,1628\\nDEN,TUS,2089\\nDEN,TVC,88\\nDEN,TYS,510\\nDEN,XNA,686\\nDFW,ABI,2660\\nDFW,ABQ,2888\\nDFW,ACT,1994\\nDFW,AEX,1003\\nDFW,AMA,2551\\nDFW,ANC,153\\nDFW,ATL,9849\\nDFW,AUS,5508\\nDFW,BDL,1065\\nDFW,BHM,1287\\nDFW,BMI,60\\nDFW,BNA,2861\\nDFW,BOS,3036\\nDFW,BTR,2919\\nDFW,BUF,93\\nDFW,BUR,1375\\nDFW,BWI,2309\\nDFW,CAE,1157\\nDFW,CHA,426\\nDFW,CHS,1154\\nDFW,CID,1897\\nDFW,CLE,1665\\nDFW,CLL,1104\\nDFW,CLT,3797\\nDFW,CMH,1694\\nDFW,CMI,366\\nDFW,COS,2034\\nDFW,CRP,2509\\nDFW,CVG,3244\\nDFW,DAY,1038\\nDFW,DCA,3965\\nDFW,DEN,8193\\nDFW,DSM,2134\\nDFW,DTW,2792\\nDFW,EGE,457\\nDFW,ELP,2900\\nDFW,EVV,365\\nDFW,EWR,3728\\nDFW,FAT,730\\nDFW,FLL,2296\\nDFW,FNT,245\\nDFW,FSM,1825\\nDFW,FWA,713\\nDFW,GGG,971\\nDFW,GJT,600\\nDFW,GPT,1155\\nDFW,GRK,2562\\nDFW,GRR,793\\nDFW,GSO,1037\\nDFW,GSP,1435\\nDFW,GUC,109\\nDFW,HDN,126\\nDFW,HNL,732\\nDFW,HOU,2425\\nDFW,HSV,1714\\nDFW,IAD,2010\\nDFW,IAH,5526\\nDFW,ICT,1792\\nDFW,IND,2086\\nDFW,JAC,213\\nDFW,JAN,2604\\nDFW,JAX,1366\\nDFW,JFK,833\\nDFW,LAS,4956\\nDFW,LAW,1822\\nDFW,LAX,6571\\nDFW,LBB,3012\\nDFW,LEX,908\\nDFW,LFT,1181\\nDFW,LGA,5365\\nDFW,LIT,3245\\nDFW,LRD,1400\\nDFW,MAF,1777\\nDFW,MCI,2878\\nDFW,MCO,4114\\nDFW,MDT,272\\nDFW,MEM,2501\\nDFW,MFE,1439\\nDFW,MIA,3350\\nDFW,MKE,745\\nDFW,MLI,588\\nDFW,MLU,964\\nDFW,MOB,1398\\nDFW,MSN,946\\nDFW,MSP,2810\\nDFW,MSY,2501\\nDFW,MTJ,231\\nDFW,OAK,724\\nDFW,OGG,366\\nDFW,OKC,2846\\nDFW,OMA,1747\\nDFW,ONT,1741\\nDFW,ORD,8165\\nDFW,ORF,1035\\nDFW,PBI,853\\nDFW,PDX,1578\\nDFW,PHL,3483\\nDFW,PHX,5388\\nDFW,PIA,635\\nDFW,PIT,2140\\nDFW,PNS,2020\\nDFW,PSP,1095\\nDFW,RDU,2347\\nDFW,RIC,1041\\nDFW,RNO,1093\\nDFW,ROC,176\\nDFW,ROW,961\\nDFW,RSW,918\\nDFW,SAN,3526\\nDFW,SAT,5414\\nDFW,SAV,795\\nDFW,SBA,365\\nDFW,SDF,1386\\nDFW,SEA,3915\\nDFW,SFO,3486\\nDFW,SGF,3231\\nDFW,SHV,3579\\nDFW,SJC,2250\\nDFW,SJT,1315\\nDFW,SJU,985\\nDFW,SLC,3143\\nDFW,SMF,1346\\nDFW,SNA,3669\\nDFW,SPS,1831\\nDFW,STL,3598\\nDFW,SYR,178\\nDFW,TPA,2803\\nDFW,TUL,3256\\nDFW,TUS,2677\\nDFW,TXK,1247\\nDFW,TYR,1585\\nDFW,TYS,1505\\nDFW,VPS,1962\\nDFW,XNA,2780\\nDHN,ATL,1397\\nDLG,ANC,116\\nDLH,DTW,721\\nDLH,MSP,1292\\nDRO,ABQ,1\\nDRO,DEN,2475\\nDRO,PHX,812\\nDRO,SLC,386\\nDSM,ATL,1115\\nDSM,CLE,139\\nDSM,CVG,982\\nDSM,CWA,1\\nDSM,DCA,272\\nDSM,DEN,1704\\nDSM,DFW,2137\\nDSM,DTW,956\\nDSM,GJT,2\\nDSM,IAH,688\\nDSM,LAX,175\\nDSM,LGA,707\\nDSM,LNK,1\\nDSM,MEM,751\\nDSM,MKE,722\\nDSM,MSP,1012\\nDSM,ORD,4525\\nDSM,ORF,1\\nDSM,PHX,749\\nDSM,RFD,1\\nDSM,SLC,3\\nDTW,ABE,997\\nDTW,ALB,1013\\nDTW,ANC,96\\nDTW,ATL,5612\\nDTW,ATW,1021\\nDTW,AVL,768\\nDTW,AVP,722\\nDTW,AZO,1176\\nDTW,BDL,1565\\nDTW,BGM,728\\nDTW,BGR,801\\nDTW,BHM,887\\nDTW,BNA,2712\\nDTW,BOS,2377\\nDTW,BTV,826\\nDTW,BUF,1508\\nDTW,BWI,3101\\nDTW,BZN,19\\nDTW,CAE,713\\nDTW,CAK,1044\\nDTW,CHA,73\\nDTW,CHS,761\\nDTW,CID,948\\nDTW,CLE,1182\\nDTW,CLT,2703\\nDTW,CMH,1894\\nDTW,CRW,208\\nDTW,CVG,3099\\nDTW,CWA,549\\nDTW,DAY,1322\\nDTW,DCA,2986\\nDTW,DEN,2919\\nDTW,DFW,2799\\nDTW,DLH,722\\nDTW,DSM,977\\nDTW,ELM,1336\\nDTW,ERI,1398\\nDTW,EVV,1342\\nDTW,EWR,4374\\nDTW,FLL,1321\\nDTW,FNT,1519\\nDTW,FWA,1202\\nDTW,GRB,1245\\nDTW,GRR,2527\\nDTW,GSO,1245\\nDTW,GSP,1239\\nDTW,HPN,666\\nDTW,HSV,698\\nDTW,IAD,1708\\nDTW,IAH,2740\\nDTW,ICT,242\\nDTW,IND,2605\\nDTW,ITH,133\\nDTW,JAN,682\\nDTW,JAX,507\\nDTW,JFK,1754\\nDTW,LAN,1642\\nDTW,LAS,2038\\nDTW,LAX,1608\\nDTW,LEX,1658\\nDTW,LGA,4594\\nDTW,LIT,362\\nDTW,LNK,320\\nDTW,MBS,1468\\nDTW,MCI,1438\\nDTW,MCO,3481\\nDTW,MDT,543\\nDTW,MDW,3179\\nDTW,MEM,2562\\nDTW,MHT,844\\nDTW,MIA,1227\\nDTW,MKE,1742\\nDTW,MLI,745\\nDTW,MSN,1603\\nDTW,MSP,4947\\nDTW,MSY,68\\nDTW,MYR,287\\nDTW,OKC,622\\nDTW,OMA,1324\\nDTW,ORD,7553\\nDTW,ORF,968\\nDTW,PBI,472\\nDTW,PDX,250\\nDTW,PHL,2791\\nDTW,PHX,2928\\nDTW,PIA,701\\nDTW,PIT,1558\\nDTW,PLN,263\\nDTW,PVD,1105\\nDTW,PWM,66\\nDTW,RDU,1368\\nDTW,RIC,700\\nDTW,ROA,748\\nDTW,ROC,864\\nDTW,RST,105\\nDTW,RSW,1144\\nDTW,SAN,583\\nDTW,SAT,597\\nDTW,SAV,508\\nDTW,SBN,1638\\nDTW,SCE,500\\nDTW,SDF,1082\\nDTW,SEA,1172\\nDTW,SFO,1235\\nDTW,SGF,363\\nDTW,SHV,360\\nDTW,SJU,155\\nDTW,SLC,572\\nDTW,SRQ,219\\nDTW,STL,2516\\nDTW,STT,16\\nDTW,SWF,724\\nDTW,SYR,1015\\nDTW,TPA,1452\\nDTW,TUL,726\\nDTW,TVC,1209\\nDTW,TYS,1788\\nDTW,XNA,362\\nEGE,ATL,109\\nEGE,CLT,13\\nEGE,CVG,30\\nEGE,DEN,1674\\nEGE,DFW,457\\nEGE,EWR,207\\nEGE,IAH,124\\nEGE,JFK,13\\nEGE,LAX,111\\nEGE,LGA,16\\nEGE,MIA,43\\nEGE,MSP,112\\nEGE,ORD,197\\nEKO,SLC,1577\\nEKO,TWF,3\\nELM,DTW,1336\\nELP,ABQ,792\\nELP,ATL,575\\nELP,AUS,1344\\nELP,DAL,2290\\nELP,DEN,1060\\nELP,DFW,2901\\nELP,HOU,1033\\nELP,IAH,1136\\nELP,LAS,1056\\nELP,LAX,1075\\nELP,LBB,362\\nELP,ONT,381\\nELP,ORD,670\\nELP,PHX,4136\\nELP,SAN,366\\nELP,SAT,1344\\nELP,SLC,121\\nELP,TUS,89\\nERI,DTW,1398\\nERI,PIT,1\\nEUG,DEN,726\\nEUG,FAT,1\\nEUG,LAS,162\\nEUG,LAX,305\\nEUG,MFR,1\\nEUG,PDX,1551\\nEUG,PHX,372\\nEUG,RDM,1\\nEUG,SFO,1919\\nEUG,SLC,711\\nEVV,ATL,1151\\nEVV,CVG,136\\nEVV,DFW,366\\nEVV,DTW,1342\\nEVV,MEM,904\\nEVV,ORD,1944\\nEVV,STL,1\\nEWN,ATL,791\\nEWR,ABQ,166\\nEWR,ACK,234\\nEWR,ALB,619\\nEWR,ATL,8060\\nEWR,AUS,939\\nEWR,AVL,658\\nEWR,BDL,793\\nEWR,BGR,536\\nEWR,BHM,681\\nEWR,BNA,1812\\nEWR,BOS,3870\\nEWR,BQN,366\\nEWR,BTV,879\\nEWR,BUF,1481\\nEWR,BWI,508\\nEWR,CAE,684\\nEWR,CHS,1285\\nEWR,CLE,2103\\nEWR,CLT,5945\\nEWR,CMH,1653\\nEWR,CVG,3095\\nEWR,DAB,311\\nEWR,DAY,946\\nEWR,DCA,2269\\nEWR,DEN,2209\\nEWR,DFW,3729\\nEWR,DTW,4419\\nEWR,EGE,207\\nEWR,FLL,4432\\nEWR,GRB,1\\nEWR,GRR,593\\nEWR,GSO,1092\\nEWR,GSP,1036\\nEWR,HDN,15\\nEWR,HNL,362\\nEWR,IAD,1789\\nEWR,IAH,3989\\nEWR,IND,1722\\nEWR,JAN,121\\nEWR,JAX,1596\\nEWR,LAS,2350\\nEWR,LAX,3239\\nEWR,LEX,389\\nEWR,LGA,1\\nEWR,LIT,323\\nEWR,MCI,1798\\nEWR,MCO,4978\\nEWR,MDW,279\\nEWR,MEM,1192\\nEWR,MHT,1331\\nEWR,MIA,2873\\nEWR,MKE,2523\\nEWR,MSN,313\\nEWR,MSP,3103\\nEWR,MSY,1139\\nEWR,MTJ,21\\nEWR,MYR,234\\nEWR,OKC,360\\nEWR,OMA,1079\\nEWR,ORD,7505\\nEWR,ORF,379\\nEWR,PBI,2769\\nEWR,PDX,687\\nEWR,PHL,19\\nEWR,PHX,2601\\nEWR,PIT,677\\nEWR,PSE,16\\nEWR,PVD,1101\\nEWR,PWM,740\\nEWR,RDU,2391\\nEWR,RIC,1576\\nEWR,ROC,925\\nEWR,RSW,1873\\nEWR,SAN,1179\\nEWR,SAT,949\\nEWR,SAV,1127\\nEWR,SDF,1052\\nEWR,SEA,2030\\nEWR,SFO,2777\\nEWR,SJC,200\\nEWR,SJU,1580\\nEWR,SLC,812\\nEWR,SNA,908\\nEWR,SRQ,399\\nEWR,STL,1707\\nEWR,STT,232\\nEWR,SYR,993\\nEWR,TPA,2838\\nEWR,TUL,343\\nEWR,TUS,186\\nEWR,TYS,660\\nEWR,XNA,545\\nEYW,ATL,974\\nEYW,MCO,35\\nFAI,ANC,2853\\nFAI,BRW,364\\nFAI,MSP,205\\nFAI,SCC,364\\nFAI,SEA,956\\nFAI,SLC,80\\nFAR,DEN,1263\\nFAR,LAN,1\\nFAR,MCI,1\\nFAR,MSP,1743\\nFAR,ORD,1327\\nFAR,SLC,95\\nFAR,STL,1\\nFAT,DEN,1265\\nFAT,DFW,730\\nFAT,LAS,2092\\nFAT,LAX,4022\\nFAT,LGB,435\\nFAT,MRY,2\\nFAT,OGD,1\\nFAT,ONT,239\\nFAT,PHX,1625\\nFAT,SAN,581\\nFAT,SBA,2\\nFAT,SFO,2438\\nFAT,SLC,845\\nFAT,TWF,1\\nFAY,ATL,2172\\nFAY,CLT,95\\nFCA,ATL,25\\nFCA,DEN,668\\nFCA,IDA,2\\nFCA,MSP,210\\nFCA,ORD,104\\nFCA,SFO,12\\nFCA,SLC,1741\\nFLG,PHX,1871\\nFLL,ALB,60\\nFLL,ATL,7666\\nFLL,AUS,481\\nFLL,BDL,545\\nFLL,BNA,740\\nFLL,BOS,2473\\nFLL,BUF,672\\nFLL,BWI,2704\\nFLL,CAK,8\\nFLL,CLE,618\\nFLL,CLT,2947\\nFLL,CVG,687\\nFLL,DCA,1339\\nFLL,DEN,903\\nFLL,DFW,2298\\nFLL,DTW,1320\\nFLL,EWR,4431\\nFLL,GPT,366\\nFLL,HOU,722\\nFLL,HPN,1022\\nFLL,IAD,1176\\nFLL,IAH,1933\\nFLL,IND,578\\nFLL,ISP,1092\\nFLL,JAX,1812\\nFLL,JFK,4699\\nFLL,LAS,677\\nFLL,LAX,372\\nFLL,LGA,3149\\nFLL,LGB,332\\nFLL,MCI,60\\nFLL,MCO,2095\\nFLL,MDW,1622\\nFLL,MEM,480\\nFLL,MHT,245\\nFLL,MIA,1\\nFLL,MKE,43\\nFLL,MSP,475\\nFLL,MSY,593\\nFLL,OAK,13\\nFLL,ORD,1581\\nFLL,PHF,309\\nFLL,PHL,2977\\nFLL,PHX,622\\nFLL,PIT,872\\nFLL,PNS,145\\nFLL,PSE,44\\nFLL,PVD,424\\nFLL,RDU,695\\nFLL,RIC,366\\nFLL,ROC,114\\nFLL,SJU,765\\nFLL,SLC,242\\nFLL,STL,470\\nFLL,SWF,476\\nFLL,SYR,328\\nFLL,TLH,262\\nFLL,TPA,3036\\nFLO,ATL,615\\nFNT,ATL,3133\\nFNT,DFW,246\\nFNT,DTW,1522\\nFNT,LAS,90\\nFNT,LGA,393\\nFNT,MCO,455\\nFNT,MKE,838\\nFNT,MKG,105\\nFNT,MSP,354\\nFNT,ORD,1264\\nFNT,RSW,149\\nFNT,TPA,200\\nFSD,ATL,135\\nFSD,CVG,555\\nFSD,DEN,1429\\nFSD,GRB,1\\nFSD,MSN,1\\nFSD,MSP,1927\\nFSD,ORD,1770\\nFSD,PIA,1\\nFSD,SDF,1\\nFSD,SLC,8\\nFSM,ATL,633\\nFSM,DFW,1826\\nFSM,MEM,478\\nFWA,ATL,1029\\nFWA,DFW,713\\nFWA,DTW,1202\\nFWA,MSP,241\\nFWA,ORD,2958\\nFWA,TVC,1\\nGCC,DEN,695\\nGCC,RKS,59\\nGCC,SLC,292\\nGEG,BLI,1\\nGEG,BOI,1016\\nGEG,DEN,1436\\nGEG,LAS,753\\nGEG,LAX,431\\nGEG,LGB,1\\nGEG,MSP,826\\nGEG,OAK,719\\nGEG,ONT,440\\nGEG,ORD,328\\nGEG,PDX,1314\\nGEG,PHX,777\\nGEG,RDM,1\\nGEG,RNO,213\\nGEG,SAN,454\\nGEG,SEA,4372\\nGEG,SLC,1951\\nGEG,SMF,375\\nGEG,TUS,152\\nGFK,MSP,1371\\nGGG,DFW,978\\nGJT,ASE,2\\nGJT,DEN,2463\\nGJT,DFW,599\\nGJT,HDN,1\\nGJT,LAX,4\\nGJT,ORD,6\\nGJT,PHX,1037\\nGJT,SLC,1040\\nGNV,ATL,2064\\nGPT,ATL,3441\\nGPT,DFW,1157\\nGPT,FLL,366\\nGPT,IAH,1908\\nGPT,MEM,1088\\nGPT,ORD,215\\nGPT,TPA,366\\nGRB,ATL,93\\nGRB,CVG,447\\nGRB,DEN,1\\nGRB,DSM,1\\nGRB,DTW,1224\\nGRB,GTF,1\\nGRB,MKE,774\\nGRB,MQT,323\\nGRB,MSP,1431\\nGRB,ORD,3634\\nGRB,SDF,1\\nGRK,ATL,643\\nGRK,DFW,2565\\nGRK,IAH,525\\nGRR,ATL,1351\\nGRR,CLE,1147\\nGRR,CVG,1387\\nGRR,DCA,307\\nGRR,DEN,346\\nGRR,DFW,795\\nGRR,DTW,2655\\nGRR,EWR,582\\nGRR,IAH,714\\nGRR,LGA,363\\nGRR,MCO,128\\nGRR,MEM,362\\nGRR,MKE,1244\\nGRR,MKG,23\\nGRR,MSP,1516\\nGRR,ORD,3696\\nGSO,ATL,2848\\nGSO,BOS,132\\nGSO,CLE,148\\nGSO,CLT,987\\nGSO,CVG,1097\\nGSO,DFW,1037\\nGSO,DTW,1245\\nGSO,EWR,1093\\nGSO,IAD,208\\nGSO,IAH,1035\\nGSO,JAX,1\\nGSO,LGA,905\\nGSO,MCO,19\\nGSO,MEM,1043\\nGSO,MIA,520\\nGSO,MSP,365\\nGSO,ORD,870\\nGSO,ORF,2\\nGSO,RDU,3\\nGSP,ATL,2450\\nGSP,CLE,510\\nGSP,CLT,1\\nGSP,CVG,456\\nGSP,DFW,1436\\nGSP,DTW,1238\\nGSP,EWR,1040\\nGSP,IAD,828\\nGSP,IAH,950\\nGSP,LGA,609\\nGSP,MCO,90\\nGSP,MEM,1089\\nGSP,ORD,1159\\nGST,JNU,85\\nGTF,BZN,1\\nGTF,DEN,869\\nGTF,MSP,196\\nGTF,ORD,23\\nGTF,SLC,1051\\nGTR,ATL,964\\nGUC,ATL,2\\nGUC,DEN,831\\nGUC,DFW,111\\nGUC,ORD,2\\nGUC,SLC,13\\nHDN,ATL,107\\nHDN,DEN,1314\\nHDN,DFW,127\\nHDN,EWR,15\\nHDN,IAH,112\\nHDN,JFK,13\\nHDN,LGA,15\\nHDN,MSP,112\\nHDN,ORD,205\\nHDN,SLC,378\\nHHH,ATL,836\\nHLN,DEN,412\\nHLN,MSP,365\\nHLN,SLC,1209\\nHNL,ANC,236\\nHNL,ATL,637\\nHNL,DEN,366\\nHNL,DFW,732\\nHNL,EWR,362\\nHNL,IAH,702\\nHNL,ITO,7685\\nHNL,KOA,8745\\nHNL,LAS,732\\nHNL,LAX,4963\\nHNL,LIH,10769\\nHNL,MSP,366\\nHNL,OAK,121\\nHNL,OGG,12014\\nHNL,ORD,641\\nHNL,PDX,732\\nHNL,PHX,914\\nHNL,SAN,393\\nHNL,SEA,1643\\nHNL,SFO,2359\\nHNL,SJC,366\\nHNL,SLC,366\\nHNL,SMF,366\\nHNL,SNA,66\\nHOU,ABQ,1023\\nHOU,ATL,3595\\nHOU,AUS,2310\\nHOU,BHM,736\\nHOU,BNA,1500\\nHOU,BTR,1\\nHOU,BWI,1262\\nHOU,CRP,1932\\nHOU,DAL,9766\\nHOU,DEN,1063\\nHOU,DFW,2425\\nHOU,ELP,1032\\nHOU,FLL,723\\nHOU,HRL,2967\\nHOU,JAN,1341\\nHOU,JAX,366\\nHOU,JFK,944\\nHOU,LAS,1460\\nHOU,LAX,1416\\nHOU,LIT,365\\nHOU,MAF,676\\nHOU,MCO,1753\\nHOU,MDW,2054\\nHOU,MSY,3726\\nHOU,OAK,713\\nHOU,OKC,1366\\nHOU,PHL,659\\nHOU,PHX,1722\\nHOU,SAN,421\\nHOU,SAT,2572\\nHOU,STL,1348\\nHOU,TPA,1396\\nHOU,TUL,1300\\nHPN,ATL,2158\\nHPN,CVG,126\\nHPN,DTW,666\\nHPN,EWR,1\\nHPN,FLL,1021\\nHPN,JFK,2\\nHPN,MCO,1485\\nHPN,ORD,3626\\nHPN,PBI,1048\\nHPN,PIA,1\\nHPN,PIT,1\\nHPN,RSW,520\\nHPN,TPA,60\\nHRL,AUS,366\\nHRL,DAL,33\\nHRL,HOU,2949\\nHRL,IAH,398\\nHRL,SAT,675\\nHSV,ATL,2622\\nHSV,BHM,4\\nHSV,CLT,13\\nHSV,CVG,787\\nHSV,DCA,577\\nHSV,DEN,653\\nHSV,DFW,1717\\nHSV,DTW,702\\nHSV,IAD,726\\nHSV,IAH,1043\\nHSV,LGA,72\\nHSV,MCO,248\\nHSV,MEM,1079\\nHSV,ORD,547\\nHSV,TUS,1\\nHTS,CVG,158\\nIAD,ABQ,365\\nIAD,ATL,5362\\nIAD,AUS,631\\nIAD,BDL,1192\\nIAD,BHM,245\\nIAD,BNA,233\\nIAD,BOS,3846\\nIAD,BTV,129\\nIAD,BUF,16\\nIAD,BUR,163\\nIAD,CAE,1709\\nIAD,CHS,710\\nIAD,CLE,1435\\nIAD,CLT,2762\\nIAD,CVG,783\\nIAD,DAY,52\\nIAD,DCA,1\\nIAD,DEN,2984\\nIAD,DFW,2009\\nIAD,DTW,1684\\nIAD,EWR,1790\\nIAD,FLL,1174\\nIAD,GSO,207\\nIAD,GSP,682\\nIAD,HSV,725\\nIAD,IAH,1389\\nIAD,JAX,751\\nIAD,JFK,2297\\nIAD,LAS,1623\\nIAD,LAX,4092\\nIAD,LGA,1105\\nIAD,LGB,756\\nIAD,MCI,313\\nIAD,MCO,4244\\nIAD,MDT,984\\nIAD,MDW,2075\\nIAD,MHT,585\\nIAD,MIA,575\\nIAD,MSP,712\\nIAD,MSY,413\\nIAD,MYR,533\\nIAD,OAK,841\\nIAD,OKC,319\\nIAD,ORD,2948\\nIAD,ORF,956\\nIAD,PBI,14\\nIAD,PDX,367\\nIAD,PHL,607\\nIAD,PHX,731\\nIAD,PIT,740\\nIAD,PVD,511\\nIAD,PWM,380\\nIAD,RDU,1679\\nIAD,ROA,682\\nIAD,ROC,492\\nIAD,RSW,14\\nIAD,SAN,1331\\nIAD,SAT,111\\nIAD,SAV,1008\\nIAD,SEA,1098\\nIAD,SFO,3139\\nIAD,SJC,245\\nIAD,SJU,707\\nIAD,SLC,524\\nIAD,SMF,365\\nIAD,SPI,141\\nIAD,STT,137\\nIAD,SYR,653\\nIAD,TPA,1746\\nIAD,TUS,112\\nIAD,TYS,97\\nIAH,ABQ,2261\\nIAH,AEX,342\\nIAH,AGS,1\\nIAH,AMA,807\\nIAH,ANC,206\\nIAH,ATL,4989\\nIAH,AUS,3704\\nIAH,AVL,458\\nIAH,BDL,120\\nIAH,BHM,2333\\nIAH,BNA,2547\\nIAH,BOS,1822\\nIAH,BPT,275\\nIAH,BRO,1465\\nIAH,BTR,2009\\nIAH,BWI,1728\\nIAH,CAE,165\\nIAH,CHA,458\\nIAH,CHS,73\\nIAH,CLE,2147\\nIAH,CLL,261\\nIAH,CLT,3709\\nIAH,CMH,839\\nIAH,COS,1725\\nIAH,CRP,823\\nIAH,CRW,674\\nIAH,CVG,2045\\nIAH,DAL,3730\\nIAH,DAY,859\\nIAH,DCA,2941\\nIAH,DEN,4584\\nIAH,DFW,5539\\nIAH,DSM,688\\nIAH,DTW,2742\\nIAH,EGE,124\\nIAH,ELP,1136\\nIAH,EWR,3970\\nIAH,FLL,1933\\nIAH,GPT,1908\\nIAH,GRK,525\\nIAH,GRR,714\\nIAH,GSO,1036\\nIAH,GSP,954\\nIAH,HDN,112\\nIAH,HNL,702\\nIAH,HOU,2\\nIAH,HRL,398\\nIAH,HSV,1043\\nIAH,IAD,1422\\nIAH,ICT,1594\\nIAH,IND,1763\\nIAH,JAN,1720\\nIAH,JAX,1529\\nIAH,JFK,969\\nIAH,LAS,2682\\nIAH,LAX,3867\\nIAH,LBB,769\\nIAH,LCH,999\\nIAH,LEX,646\\nIAH,LFT,2703\\nIAH,LGA,3399\\nIAH,LIT,1111\\nIAH,LRD,716\\nIAH,MAF,1187\\nIAH,MCI,2516\\nIAH,MCO,2494\\nIAH,MEM,3046\\nIAH,MFE,2665\\nIAH,MGM,246\\nIAH,MIA,2735\\nIAH,MKE,1673\\nIAH,MLU,580\\nIAH,MOB,1420\\nIAH,MSP,2466\\nIAH,MSY,4248\\nIAH,MTJ,261\\nIAH,OAK,722\\nIAH,OKC,2625\\nIAH,OMA,2098\\nIAH,ONT,1093\\nIAH,ORD,5651\\nIAH,ORF,970\\nIAH,PBI,1389\\nIAH,PDX,1271\\nIAH,PHL,1732\\nIAH,PHX,4176\\nIAH,PIT,1713\\nIAH,PNS,635\\nIAH,PSP,216\\nIAH,RDU,1987\\nIAH,RIC,970\\nIAH,RNO,428\\nIAH,RSW,1064\\nIAH,SAN,2392\\nIAH,SAT,3760\\nIAH,SAV,948\\nIAH,SDF,396\\nIAH,SEA,2393\\nIAH,SFO,2655\\nIAH,SHV,1017\\nIAH,SJC,995\\nIAH,SJU,732\\nIAH,SLC,2696\\nIAH,SMF,1085\\nIAH,SNA,1873\\nIAH,SRQ,70\\nIAH,STL,736\\nIAH,TLH,481\\nIAH,TPA,1963\\nIAH,TUL,2310\\nIAH,TUS,1670\\nIAH,TYS,1353\\nIAH,VPS,420\\nIAH,XNA,1435\\nICT,ATL,3146\\nICT,CID,1\\nICT,COS,1\\nICT,DEN,1578\\nICT,DFW,1794\\nICT,DTW,241\\nICT,IAH,1594\\nICT,LAX,184\\nICT,MCI,1\\nICT,MEM,1092\\nICT,MSP,714\\nICT,MSY,1\\nICT,OKC,2\\nICT,ORD,3005\\nICT,PHX,692\\nICT,PIA,1\\nICT,SGF,1\\nICT,SLC,1\\nICT,STL,1\\nIDA,DEN,980\\nIDA,MSP,336\\nIDA,SLC,1787\\nILM,ATL,1991\\nILM,CLT,1259\\nILM,CVG,146\\nILM,RDU,1\\nIND,ATL,3515\\nIND,AUS,218\\nIND,BDL,587\\nIND,BOS,950\\nIND,BWI,1003\\nIND,CLE,635\\nIND,CLT,1587\\nIND,CVG,507\\nIND,DCA,968\\nIND,DEN,2089\\nIND,DFW,2087\\nIND,DTW,2558\\nIND,EWR,1717\\nIND,FLL,578\\nIND,IAH,1275\\nIND,JAX,366\\nIND,JFK,117\\nIND,LAS,1675\\nIND,LAX,548\\nIND,LGA,1331\\nIND,MCI,1069\\nIND,MCO,2298\\nIND,MDW,1333\\nIND,MEM,1066\\nIND,MIA,213\\nIND,MKE,738\\nIND,MSP,1700\\nIND,MSY,10\\nIND,ORD,4102\\nIND,PHL,495\\nIND,PHX,1457\\nIND,PIT,1\\nIND,RDU,673\\nIND,RSW,1057\\nIND,SAT,236\\nIND,SEA,75\\nIND,SFO,173\\nIND,SRQ,155\\nIND,TPA,1587\\nIND,XNA,1\\nINL,MSP,72\\nIPL,LAX,646\\nIPL,YUM,343\\nISP,ATL,215\\nISP,BWI,2438\\nISP,FLL,1087\\nISP,LAS,366\\nISP,MCO,2105\\nISP,MDW,1427\\nISP,PBI,1090\\nISP,RSW,375\\nISP,TPA,1080\\nITH,DTW,132\\nITO,HNL,7386\\nITO,KOA,299\\nITO,OGG,366\\nIYK,BFL,1\\nIYK,LAX,956\\nIYK,PSP,1\\nJAC,ATL,118\\nJAC,CVG,13\\nJAC,DEN,1443\\nJAC,DFW,214\\nJAC,IDA,1\\nJAC,LAX,15\\nJAC,MSP,117\\nJAC,ORD,360\\nJAC,SLC,1485\\nJAN,ATL,2704\\nJAN,BWI,666\\nJAN,CVG,121\\nJAN,DCA,293\\nJAN,DFW,2605\\nJAN,DTW,689\\nJAN,EWR,121\\nJAN,HOU,1345\\nJAN,IAH,1721\\nJAN,MCO,381\\nJAN,MDW,677\\nJAN,MEM,1075\\nJAN,ORD,211\\nJAX,ATL,5656\\nJAX,AUS,229\\nJAX,BHM,366\\nJAX,BNA,1373\\nJAX,BOS,652\\nJAX,BWI,1066\\nJAX,CLE,144\\nJAX,CLT,2520\\nJAX,CVG,1110\\nJAX,DCA,896\\nJAX,DEN,118\\nJAX,DFW,1366\\nJAX,DTW,508\\nJAX,EWR,1581\\nJAX,FLL,1809\\nJAX,HOU,366\\nJAX,IAD,743\\nJAX,IAH,1541\\nJAX,IND,366\\nJAX,JFK,1068\\nJAX,LAS,236\\nJAX,LAX,3\\nJAX,LGA,1294\\nJAX,MCI,226\\nJAX,MEM,871\\nJAX,MIA,218\\nJAX,MSP,200\\nJAX,MSY,470\\nJAX,ORD,1704\\nJAX,ORF,712\\nJAX,PHL,1657\\nJAX,PIR,2\\nJAX,RDU,596\\nJAX,TPA,1017\\nJAX,TYS,1\\nJFK,ACK,234\\nJFK,ALB,364\\nJFK,ATL,2279\\nJFK,AUS,1356\\nJFK,BDL,631\\nJFK,BGR,338\\nJFK,BNA,463\\nJFK,BOS,7513\\nJFK,BQN,661\\nJFK,BTV,2207\\nJFK,BUF,3674\\nJFK,BUR,1366\\nJFK,BWI,1123\\nJFK,CHS,1\\nJFK,CLE,1392\\nJFK,CLT,1833\\nJFK,CMH,571\\nJFK,CVG,1346\\nJFK,DCA,2941\\nJFK,DEN,1082\\nJFK,DFW,834\\nJFK,DTW,1848\\nJFK,EGE,14\\nJFK,FLL,4696\\nJFK,HDN,13\\nJFK,HOU,943\\nJFK,HPN,1\\nJFK,IAD,2299\\nJFK,IAH,972\\nJFK,IND,125\\nJFK,JAX,1067\\nJFK,LAS,4471\\nJFK,LAX,8078\\nJFK,LGA,2\\nJFK,LGB,1541\\nJFK,MCO,5373\\nJFK,MIA,2737\\nJFK,MSP,1441\\nJFK,MSY,1070\\nJFK,OAK,1177\\nJFK,ONT,247\\nJFK,ORD,3672\\nJFK,ORF,277\\nJFK,PBI,2534\\nJFK,PDX,680\\nJFK,PHL,587\\nJFK,PHX,2254\\nJFK,PIT,2244\\nJFK,PSE,346\\nJFK,PVD,603\\nJFK,PWM,1824\\nJFK,RDU,4149\\nJFK,RIC,1694\\nJFK,ROC,2425\\nJFK,RSW,1893\\nJFK,SAN,1630\\nJFK,SEA,1855\\nJFK,SFO,6591\\nJFK,SJC,480\\nJFK,SJU,3565\\nJFK,SLC,1795\\nJFK,SMF,341\\nJFK,SRQ,534\\nJFK,STL,795\\nJFK,STT,366\\nJFK,SYR,1824\\nJFK,TPA,3390\\nJFK,TUS,132\\nJNU,ANC,1163\\nJNU,GST,85\\nJNU,KTN,364\\nJNU,PSG,363\\nJNU,SEA,1209\\nJNU,SIT,863\\nJNU,YAK,363\\nKOA,DEN,45\\nKOA,HNL,9038\\nKOA,LAX,1040\\nKOA,LIH,55\\nKOA,OAK,4\\nKOA,OGG,793\\nKOA,ORD,221\\nKOA,PHX,330\\nKOA,SAN,23\\nKOA,SEA,411\\nKOA,SFO,713\\nKOA,SNA,37\\nKTN,JNU,362\\nKTN,SEA,1289\\nKTN,SIT,365\\nKTN,WRG,364\\nLAN,CVG,486\\nLAN,DTW,1641\\nLAN,MSP,157\\nLAN,ORD,1409\\nLAS,ABQ,2408\\nLAS,ALB,366\\nLAS,AMA,367\\nLAS,ANC,238\\nLAS,ATL,4761\\nLAS,AUS,1232\\nLAS,BDL,366\\nLAS,BFL,102\\nLAS,BHM,366\\nLAS,BMI,51\\nLAS,BNA,1201\\nLAS,BOI,755\\nLAS,BOS,1383\\nLAS,BUF,588\\nLAS,BUR,5154\\nLAS,BWI,1628\\nLAS,CAK,43\\nLAS,CLE,1667\\nLAS,CLT,1730\\nLAS,CMH,1351\\nLAS,COS,98\\nLAS,CVG,920\\nLAS,DAY,42\\nLAS,DCA,366\\nLAS,DEN,8165\\nLAS,DFW,4959\\nLAS,DTW,2036\\nLAS,ELP,1042\\nLAS,EUG,162\\nLAS,EWR,2341\\nLAS,FAT,2101\\nLAS,FLL,677\\nLAS,FNT,91\\nLAS,GEG,753\\nLAS,HNL,732\\nLAS,HOU,1461\\nLAS,IAD,1625\\nLAS,IAH,2678\\nLAS,IND,1674\\nLAS,ISP,366\\nLAS,JAX,236\\nLAS,JFK,4481\\nLAS,LAX,11729\\nLAS,LBB,366\\nLAS,LGB,854\\nLAS,LIT,382\\nLAS,MAF,366\\nLAS,MCI,1913\\nLAS,MCO,1076\\nLAS,MDW,3836\\nLAS,MEM,373\\nLAS,MFR,139\\nLAS,MHT,365\\nLAS,MIA,787\\nLAS,MKE,530\\nLAS,MLI,50\\nLAS,MRY,14\\nLAS,MSP,2464\\nLAS,MSY,726\\nLAS,OAK,4693\\nLAS,OKC,471\\nLAS,OMA,1088\\nLAS,ONT,3501\\nLAS,ORD,5235\\nLAS,ORF,365\\nLAS,PBI,62\\nLAS,PDX,3568\\nLAS,PHL,2829\\nLAS,PHX,10626\\nLAS,PIT,1411\\nLAS,PSP,1280\\nLAS,PVD,365\\nLAS,RDU,724\\nLAS,RNO,4492\\nLAS,ROC,83\\nLAS,SAN,5895\\nLAS,SAT,1573\\nLAS,SBA,305\\nLAS,SBP,128\\nLAS,SDF,366\\nLAS,SEA,5065\\nLAS,SFO,6994\\nLAS,SJC,4148\\nLAS,SLC,5378\\nLAS,SMF,4054\\nLAS,SNA,4115\\nLAS,STL,1647\\nLAS,TPA,1175\\nLAS,TUL,390\\nLAS,TUS,2018\\nLAS,YUM,99\\nLAW,ATL,543\\nLAW,DFW,1826\\nLAX,ABQ,2415\\nLAX,ANC,239\\nLAX,ASE,324\\nLAX,ATL,5402\\nLAX,AUS,1732\\nLAX,BDL,132\\nLAX,BFL,902\\nLAX,BNA,1418\\nLAX,BOI,985\\nLAX,BOS,2441\\nLAX,BWI,897\\nLAX,BZN,13\\nLAX,CLD,2258\\nLAX,CLE,1053\\nLAX,CLT,1460\\nLAX,CMH,49\\nLAX,COS,994\\nLAX,CVG,1144\\nLAX,DCA,366\\nLAX,DEN,8894\\nLAX,DFW,6571\\nLAX,DSM,177\\nLAX,DTW,1972\\nLAX,EGE,107\\nLAX,ELP,1076\\nLAX,EUG,305\\nLAX,EWR,3249\\nLAX,FAT,4045\\nLAX,FLL,373\\nLAX,GEG,428\\nLAX,GJT,8\\nLAX,HNL,4964\\nLAX,HOU,1426\\nLAX,IAD,3836\\nLAX,IAH,3849\\nLAX,ICT,186\\nLAX,IND,548\\nLAX,IPL,660\\nLAX,IYK,954\\nLAX,JAC,15\\nLAX,JAX,2\\nLAX,JFK,8058\\nLAX,KOA,1038\\nLAX,LAS,11773\\nLAX,LIH,1067\\nLAX,MCI,1338\\nLAX,MCO,1725\\nLAX,MDW,2388\\nLAX,MEM,729\\nLAX,MFR,1\\nLAX,MIA,2495\\nLAX,MKE,355\\nLAX,MOD,659\\nLAX,MRY,2763\\nLAX,MSP,2392\\nLAX,MSY,930\\nLAX,MTJ,18\\nLAX,OAK,7583\\nLAX,OGG,2054\\nLAX,OKC,501\\nLAX,ONT,24\\nLAX,ORD,7333\\nLAX,OXR,1291\\nLAX,PDX,3503\\nLAX,PHL,2246\\nLAX,PHX,9897\\nLAX,PIT,373\\nLAX,PSP,2596\\nLAX,RDU,8\\nLAX,RNO,1898\\nLAX,RSW,1\\nLAX,SAN,11257\\nLAX,SAT,1781\\nLAX,SBA,4554\\nLAX,SBP,2684\\nLAX,SEA,6876\\nLAX,SFO,13390\\nLAX,SGU,722\\nLAX,SJC,8908\\nLAX,SJU,144\\nLAX,SLC,5178\\nLAX,SMF,5692\\nLAX,SMX,1679\\nLAX,SNA,32\\nLAX,STL,1686\\nLAX,TPA,516\\nLAX,TUL,73\\nLAX,TUS,4141\\nLAX,XNA,359\\nLAX,YUM,1030\\nLBB,ABQ,366\\nLBB,AUS,690\\nLBB,DAL,2679\\nLBB,DFW,3015\\nLBB,ELP,364\\nLBB,IAH,769\\nLBB,LAS,366\\nLCH,IAH,1000\\nLEX,ATL,2217\\nLEX,CLE,14\\nLEX,COS,1\\nLEX,CVG,1539\\nLEX,DAY,1\\nLEX,DCA,304\\nLEX,DFW,907\\nLEX,DTW,1656\\nLEX,EWR,390\\nLEX,IAH,646\\nLEX,LGA,411\\nLEX,MCO,39\\nLEX,MEM,252\\nLEX,ORD,1967\\nLFT,ATL,995\\nLFT,DFW,1182\\nLFT,IAH,2702\\nLGA,AGS,7\\nLGA,ATL,10507\\nLGA,BHM,591\\nLGA,BNA,1217\\nLGA,BOS,12035\\nLGA,CAE,609\\nLGA,CAK,793\\nLGA,CHS,1414\\nLGA,CID,156\\nLGA,CLE,2920\\nLGA,CLT,4958\\nLGA,CMH,2350\\nLGA,CVG,3635\\nLGA,DAB,159\\nLGA,DCA,11063\\nLGA,DEN,2970\\nLGA,DFW,5372\\nLGA,DSM,705\\nLGA,DTW,4601\\nLGA,EGE,16\\nLGA,FLL,3152\\nLGA,FNT,392\\nLGA,GRR,363\\nLGA,GSO,927\\nLGA,GSP,609\\nLGA,HDN,15\\nLGA,HSV,69\\nLGA,IAD,1103\\nLGA,IAH,3418\\nLGA,IND,1331\\nLGA,JAX,1285\\nLGA,LEX,415\\nLGA,MCO,3158\\nLGA,MEM,1605\\nLGA,MIA,3586\\nLGA,MKE,592\\nLGA,MLB,2\\nLGA,MSN,620\\nLGA,MSP,2719\\nLGA,MSY,512\\nLGA,MYR,123\\nLGA,ORD,10862\\nLGA,PBI,1934\\nLGA,PHF,770\\nLGA,PHL,1\\nLGA,PIT,1297\\nLGA,RDU,4423\\nLGA,RIC,1336\\nLGA,RSW,238\\nLGA,SAV,995\\nLGA,SDF,571\\nLGA,SLC,24\\nLGA,SRQ,74\\nLGA,STL,1604\\nLGA,STT,9\\nLGA,TPA,1464\\nLGA,TVC,50\\nLGA,TYS,642\\nLGA,VPS,2\\nLGA,XNA,765\\nLGB,AUS,245\\nLGB,BOS,789\\nLGB,FAT,431\\nLGB,FLL,332\\nLGB,GEG,1\\nLGB,IAD,756\\nLGB,JFK,1544\\nLGB,LAS,853\\nLGB,MRY,436\\nLGB,OAK,1631\\nLGB,ONT,1\\nLGB,ORD,600\\nLGB,PDX,142\\nLGB,PHX,1623\\nLGB,RNO,459\\nLGB,SEA,1499\\nLGB,SFO,210\\nLGB,SJC,661\\nLGB,SLC,2500\\nLGB,SMF,729\\nLGB,TWF,1\\nLIH,DEN,45\\nLIH,HNL,10407\\nLIH,KOA,54\\nLIH,LAX,1069\\nLIH,OGG,426\\nLIH,PHX,280\\nLIH,SAN,31\\nLIH,SEA,366\\nLIH,SFO,483\\nLIH,SNA,23\\nLIT,ATL,2526\\nLIT,BWI,366\\nLIT,CLT,39\\nLIT,CVG,49\\nLIT,DAL,2327\\nLIT,DEN,118\\nLIT,DFW,3245\\nLIT,DTW,361\\nLIT,EWR,331\\nLIT,HOU,365\\nLIT,IAH,1103\\nLIT,LAS,382\\nLIT,MCO,1\\nLIT,MDW,383\\nLIT,MEM,887\\nLIT,MSP,157\\nLIT,ORD,1806\\nLIT,PHX,235\\nLIT,SAT,1\\nLIT,SLC,18\\nLIT,STL,669\\nLMT,MFR,1\\nLMT,PDX,162\\nLMT,SFO,348\\nLNK,ABE,1\\nLNK,CRW,1\\nLNK,DEN,1204\\nLNK,DTW,320\\nLNK,LAN,1\\nLNK,MSP,106\\nLNK,ORD,1403\\nLNK,PIA,1\\nLRD,DFW,1401\\nLRD,IAH,714\\nLSE,MSP,434\\nLSE,ORD,1571\\nLWB,ATL,185\\nLWS,BOI,1\\nLWS,IDA,1\\nLWS,SLC,650\\nLYH,ATL,625\\nMAF,ABQ,366\\nMAF,AUS,471\\nMAF,DAL,1995\\nMAF,DFW,1778\\nMAF,HOU,676\\nMAF,IAH,1187\\nMAF,LAS,366\\nMBS,DTW,1460\\nMBS,MSP,117\\nMBS,ORD,1341\\nMCI,ABQ,670\\nMCI,ATL,4140\\nMCI,AUS,459\\nMCI,BNA,1317\\nMCI,BWI,1025\\nMCI,CLE,1219\\nMCI,CLT,1182\\nMCI,CMH,164\\nMCI,COS,178\\nMCI,CVG,1491\\nMCI,DAL,3943\\nMCI,DEN,5256\\nMCI,DFW,2877\\nMCI,DTW,1252\\nMCI,EWR,1799\\nMCI,FLL,60\\nMCI,IAD,227\\nMCI,IAH,2527\\nMCI,ICT,1\\nMCI,IND,1074\\nMCI,JAX,229\\nMCI,LAS,1926\\nMCI,LAX,1331\\nMCI,LNK,1\\nMCI,MCO,1349\\nMCI,MDW,3850\\nMCI,MEM,1005\\nMCI,MGM,1\\nMCI,MIA,65\\nMCI,MKE,3\\nMCI,MSN,250\\nMCI,MSP,2136\\nMCI,MSY,462\\nMCI,OAK,686\\nMCI,OKC,1128\\nMCI,OMA,3\\nMCI,ONT,301\\nMCI,ORD,3837\\nMCI,PDX,366\\nMCI,PHX,2165\\nMCI,PIT,266\\nMCI,RDU,652\\nMCI,RSW,5\\nMCI,SAN,689\\nMCI,SAT,577\\nMCI,SEA,365\\nMCI,SLC,1054\\nMCI,SMF,306\\nMCI,STL,1763\\nMCI,TPA,695\\nMCI,TUL,810\\nMCI,TUS,233\\nMCN,ATL,652\\nMCO,ABQ,726\\nMCO,ALB,1040\\nMCO,ATL,9611\\nMCO,AUS,632\\nMCO,AVL,47\\nMCO,BDL,1758\\nMCO,BHM,1214\\nMCO,BMI,173\\nMCO,BNA,1782\\nMCO,BOS,3478\\nMCO,BQN,492\\nMCO,BTV,346\\nMCO,BUF,1877\\nMCO,BWI,4926\\nMCO,CAK,371\\nMCO,CLE,1909\\nMCO,CLT,3276\\nMCO,CMH,1165\\nMCO,CVG,1304\\nMCO,DAY,416\\nMCO,DCA,1845\\nMCO,DEN,2997\\nMCO,DFW,4114\\nMCO,DTW,3477\\nMCO,EWR,4977\\nMCO,EYW,35\\nMCO,FLL,2074\\nMCO,FNT,455\\nMCO,GRR,128\\nMCO,GSO,11\\nMCO,GSP,90\\nMCO,HOU,1758\\nMCO,HPN,1484\\nMCO,HSV,248\\nMCO,IAD,4094\\nMCO,IAH,2499\\nMCO,IND,2306\\nMCO,ISP,2110\\nMCO,JAN,381\\nMCO,JAX,2\\nMCO,JFK,5371\\nMCO,LAS,1077\\nMCO,LAX,1725\\nMCO,LEX,39\\nMCO,LGA,3156\\nMCO,LIT,1\\nMCO,MCI,1349\\nMCO,MDT,42\\nMCO,MDW,3565\\nMCO,MEM,1434\\nMCO,MHT,1606\\nMCO,MIA,2195\\nMCO,MKE,831\\nMCO,MLI,172\\nMCO,MSP,1929\\nMCO,MSY,1568\\nMCO,OKC,9\\nMCO,OMA,9\\nMCO,ORD,3978\\nMCO,ORF,755\\nMCO,PBI,1\\nMCO,PDX,237\\nMCO,PFN,195\\nMCO,PHF,362\\nMCO,PHL,7034\\nMCO,PHX,1038\\nMCO,PIT,2465\\nMCO,PNS,365\\nMCO,PSE,347\\nMCO,PVD,2149\\nMCO,PWM,460\\nMCO,RDU,1655\\nMCO,RIC,517\\nMCO,ROC,701\\nMCO,RSW,1414\\nMCO,SAN,13\\nMCO,SAT,744\\nMCO,SDF,533\\nMCO,SEA,731\\nMCO,SFO,366\\nMCO,SJU,2420\\nMCO,SLC,685\\nMCO,STL,2422\\nMCO,SWF,834\\nMCO,SYR,390\\nMCO,TLH,219\\nMCO,TPA,1\\nMCO,TUL,9\\nMCO,TYS,126\\nMDT,ATL,1789\\nMDT,AVP,1\\nMDT,BWI,1\\nMDT,CLE,58\\nMDT,CLT,1144\\nMDT,CVG,1008\\nMDT,DCA,1\\nMDT,DFW,274\\nMDT,DTW,542\\nMDT,IAD,937\\nMDT,LGA,2\\nMDT,MCO,42\\nMDT,MSP,197\\nMDT,ORD,1598\\nMDW,ABQ,730\\nMDW,ALB,729\\nMDW,ATL,3257\\nMDW,AUS,713\\nMDW,BDL,1052\\nMDW,BHM,726\\nMDW,BNA,3016\\nMDW,BOS,345\\nMDW,BUF,1278\\nMDW,BWI,2776\\nMDW,CLE,2556\\nMDW,CLT,13\\nMDW,CMH,2644\\nMDW,DEN,4325\\nMDW,DTW,3070\\nMDW,EWR,278\\nMDW,FLL,1621\\nMDW,HOU,2052\\nMDW,IAD,2065\\nMDW,IND,1314\\nMDW,ISP,1422\\nMDW,JAN,682\\nMDW,LAS,3832\\nMDW,LAX,2390\\nMDW,LIT,383\\nMDW,MCI,3885\\nMDW,MCO,3568\\nMDW,MHT,1649\\nMDW,MIA,133\\nMDW,MSP,1476\\nMDW,MSY,391\\nMDW,OAK,1719\\nMDW,OMA,2047\\nMDW,ORF,731\\nMDW,PDX,891\\nMDW,PHL,2664\\nMDW,PHX,2800\\nMDW,PIT,2037\\nMDW,PVD,1380\\nMDW,RDU,1353\\nMDW,RNO,365\\nMDW,RSW,1095\\nMDW,SAN,1708\\nMDW,SAT,700\\nMDW,SDF,1690\\nMDW,SEA,1331\\nMDW,SFO,1083\\nMDW,SJC,658\\nMDW,SLC,1003\\nMDW,SMF,686\\nMDW,SRQ,565\\nMDW,STL,3784\\nMDW,TPA,2231\\nMDW,TUS,727\\nMEI,ATL,674\\nMEM,ATL,4870\\nMEM,AUS,835\\nMEM,BDL,49\\nMEM,BHM,891\\nMEM,BNA,1024\\nMEM,BOS,199\\nMEM,BTR,998\\nMEM,BWI,783\\nMEM,CAE,706\\nMEM,CHA,629\\nMEM,CHS,709\\nMEM,CLE,1205\\nMEM,CLT,2576\\nMEM,CMH,1072\\nMEM,COS,117\\nMEM,CVG,1225\\nMEM,DCA,1043\\nMEM,DEN,1731\\nMEM,DFW,2458\\nMEM,DSM,813\\nMEM,DTW,2205\\nMEM,EVV,904\\nMEM,EWR,1170\\nMEM,FLL,479\\nMEM,FSM,479\\nMEM,GPT,1088\\nMEM,GRR,362\\nMEM,GSO,1043\\nMEM,GSP,1088\\nMEM,HSV,1083\\nMEM,IAH,3079\\nMEM,ICT,1093\\nMEM,IND,1058\\nMEM,JAN,1082\\nMEM,JAX,871\\nMEM,LAS,372\\nMEM,LAX,1095\\nMEM,LEX,252\\nMEM,LGA,1608\\nMEM,LIT,886\\nMEM,MCI,981\\nMEM,MCO,1432\\nMEM,MGM,1091\\nMEM,MIA,785\\nMEM,MKE,744\\nMEM,MLI,668\\nMEM,MOB,1094\\nMEM,MSN,359\\nMEM,MSP,2845\\nMEM,MSY,1004\\nMEM,OKC,940\\nMEM,OMA,749\\nMEM,ORD,3769\\nMEM,ORF,241\\nMEM,PFN,1095\\nMEM,PHL,1039\\nMEM,PHX,817\\nMEM,PIT,1002\\nMEM,PNS,1097\\nMEM,RDU,1062\\nMEM,RIC,292\\nMEM,RSW,58\\nMEM,SAN,109\\nMEM,SAT,831\\nMEM,SAV,765\\nMEM,SDF,786\\nMEM,SEA,349\\nMEM,SFO,208\\nMEM,SGF,1080\\nMEM,SHV,1094\\nMEM,SJU,26\\nMEM,STL,1049\\nMEM,TLH,1094\\nMEM,TPA,861\\nMEM,TRI,44\\nMEM,TUL,1094\\nMEM,TYS,1096\\nMEM,VPS,1045\\nMEM,XNA,1041\\nMFE,ATL,10\\nMFE,DFW,1441\\nMFE,IAH,2665\\nMFR,DEN,365\\nMFR,LAS,139\\nMFR,MOD,1\\nMFR,OTH,1\\nMFR,PDX,1543\\nMFR,PHX,304\\nMFR,RDD,1\\nMFR,RDM,1\\nMFR,SBA,1\\nMFR,SFO,2571\\nMFR,SLC,724\\nMFR,TWF,1\\nMGM,ATL,2514\\nMGM,IAH,246\\nMGM,MEM,1091\\nMHT,ATL,696\\nMHT,BOS,4\\nMHT,BWI,3628\\nMHT,CLE,1212\\nMHT,CLT,723\\nMHT,CVG,777\\nMHT,DCA,288\\nMHT,DTW,846\\nMHT,EWR,1353\\nMHT,FLL,246\\nMHT,IAD,584\\nMHT,LAS,366\\nMHT,MCO,1605\\nMHT,MDW,1643\\nMHT,ORD,1145\\nMHT,PHL,2365\\nMHT,PHX,365\\nMHT,TPA,742\\nMIA,ATL,6623\\nMIA,BDL,366\\nMIA,BNA,731\\nMIA,BOS,2193\\nMIA,BWI,929\\nMIA,CLE,399\\nMIA,CLT,2970\\nMIA,CMH,470\\nMIA,CVG,1045\\nMIA,DCA,2982\\nMIA,DEN,809\\nMIA,DFW,3346\\nMIA,DTW,1228\\nMIA,EGE,43\\nMIA,EWR,2873\\nMIA,FLL,1\\nMIA,GSO,519\\nMIA,IAD,574\\nMIA,IAH,2734\\nMIA,IND,211\\nMIA,JAX,217\\nMIA,JFK,2743\\nMIA,LAS,787\\nMIA,LAX,2494\\nMIA,LGA,3587\\nMIA,MCI,65\\nMIA,MCO,2195\\nMIA,MDW,133\\nMIA,MEM,785\\nMIA,MSP,907\\nMIA,MSY,1098\\nMIA,ORD,3343\\nMIA,ORF,152\\nMIA,PHL,2203\\nMIA,PHX,366\\nMIA,PIT,174\\nMIA,RDU,1098\\nMIA,RIC,151\\nMIA,SDF,365\\nMIA,SEA,366\\nMIA,SFO,1097\\nMIA,SJU,2559\\nMIA,STL,732\\nMIA,STT,732\\nMIA,STX,349\\nMIA,TLH,832\\nMIA,TPA,1829\\nMIA,XNA,154\\nMKE,ABE,1\\nMKE,ATL,3606\\nMKE,ATW,1030\\nMKE,AVP,1\\nMKE,BDL,539\\nMKE,BHM,1\\nMKE,BNA,771\\nMKE,BOS,208\\nMKE,BWI,1293\\nMKE,CLE,2226\\nMKE,CLT,245\\nMKE,CMH,1054\\nMKE,CVG,840\\nMKE,CWA,285\\nMKE,DAY,608\\nMKE,DCA,122\\nMKE,DEN,1449\\nMKE,DFW,747\\nMKE,DSM,723\\nMKE,DTW,1905\\nMKE,EWR,2524\\nMKE,FAR,1\\nMKE,FLL,43\\nMKE,FNT,839\\nMKE,GRB,774\\nMKE,GRR,1244\\nMKE,IAH,1671\\nMKE,IND,738\\nMKE,LAS,531\\nMKE,LAX,355\\nMKE,LGA,590\\nMKE,MCI,2\\nMKE,MCO,830\\nMKE,MEM,734\\nMKE,MKG,264\\nMKE,MQT,357\\nMKE,MSN,1294\\nMKE,MSP,3464\\nMKE,OMA,703\\nMKE,ORD,3541\\nMKE,PHL,775\\nMKE,PHX,867\\nMKE,PIT,1082\\nMKE,RDU,490\\nMKE,RSW,226\\nMKE,SAN,106\\nMKE,SDF,258\\nMKE,SEA,122\\nMKE,SFO,115\\nMKE,SLC,6\\nMKE,STL,320\\nMKE,TPA,178\\nMKE,TUS,2\\nMKG,FNT,109\\nMKG,GRR,24\\nMKG,MKE,263\\nMLB,ATL,2000\\nMLB,LGA,2\\nMLI,ATL,2592\\nMLI,DEN,719\\nMLI,DFW,587\\nMLI,DTW,755\\nMLI,LAS,51\\nMLI,MCO,172\\nMLI,MEM,669\\nMLI,MSP,442\\nMLI,ORD,2580\\nMLU,ATL,983\\nMLU,DFW,966\\nMLU,IAH,581\\nMOB,ATL,2225\\nMOB,DFW,1399\\nMOB,IAH,1420\\nMOB,MEM,1094\\nMOB,ORD,210\\nMOD,BFL,1\\nMOD,LAX,679\\nMOD,ONT,1\\nMOD,RNO,1\\nMOD,SFO,1643\\nMOT,MSP,1085\\nMQT,GRB,322\\nMQT,MKE,356\\nMQT,ORD,313\\nMRY,DEN,365\\nMRY,LAS,14\\nMRY,LAX,2758\\nMRY,LGB,435\\nMRY,ONT,246\\nMRY,PHX,910\\nMRY,SAN,445\\nMRY,SFO,2428\\nMRY,SLC,6\\nMSN,ATL,384\\nMSN,ATW,1\\nMSN,CLE,317\\nMSN,CVG,259\\nMSN,DCA,287\\nMSN,DEN,943\\nMSN,DFW,947\\nMSN,DSM,1\\nMSN,DTW,1603\\nMSN,EWR,313\\nMSN,LGA,622\\nMSN,MCI,249\\nMSN,MEM,359\\nMSN,MKE,1293\\nMSN,MSP,1439\\nMSN,ORD,4943\\nMSN,RFD,1\\nMSO,DEN,1107\\nMSO,MSP,189\\nMSO,ORD,105\\nMSO,PIH,2\\nMSO,SFO,12\\nMSO,SLC,1841\\nMSP,ABQ,677\\nMSP,ALB,57\\nMSP,ALO,323\\nMSP,ANC,826\\nMSP,ATL,5369\\nMSP,ATW,89\\nMSP,AUS,54\\nMSP,AVL,364\\nMSP,AZO,246\\nMSP,BDL,933\\nMSP,BGR,11\\nMSP,BIL,820\\nMSP,BIS,1052\\nMSP,BJI,74\\nMSP,BNA,781\\nMSP,BOI,807\\nMSP,BOS,1563\\nMSP,BTV,75\\nMSP,BUF,229\\nMSP,BWI,1017\\nMSP,BZN,878\\nMSP,CHS,27\\nMSP,CID,412\\nMSP,CLE,1876\\nMSP,CLT,1814\\nMSP,CMH,1076\\nMSP,CMX,318\\nMSP,COS,449\\nMSP,CPR,31\\nMSP,CVG,1760\\nMSP,CWA,13\\nMSP,DAY,692\\nMSP,DCA,2194\\nMSP,DEN,5374\\nMSP,DFW,2851\\nMSP,DLH,1290\\nMSP,DSM,929\\nMSP,DTW,5459\\nMSP,EGE,112\\nMSP,EWR,3144\\nMSP,FAI,205\\nMSP,FAR,1744\\nMSP,FCA,209\\nMSP,FLL,475\\nMSP,FNT,355\\nMSP,FSD,1925\\nMSP,FWA,242\\nMSP,GEG,826\\nMSP,GFK,1371\\nMSP,GRB,1408\\nMSP,GRR,1645\\nMSP,GSO,365\\nMSP,GTF,195\\nMSP,HDN,112\\nMSP,HLN,365\\nMSP,HNL,366\\nMSP,IAD,710\\nMSP,IAH,2451\\nMSP,ICT,714\\nMSP,IDA,336\\nMSP,IND,1661\\nMSP,INL,72\\nMSP,JAC,117\\nMSP,JAX,201\\nMSP,JFK,1441\\nMSP,LAN,157\\nMSP,LAS,2461\\nMSP,LAX,2389\\nMSP,LGA,2723\\nMSP,LIT,157\\nMSP,LNK,106\\nMSP,LSE,433\\nMSP,MBS,109\\nMSP,MCI,1976\\nMSP,MCO,1931\\nMSP,MDT,197\\nMSP,MDW,1367\\nMSP,MEM,2551\\nMSP,MIA,908\\nMSP,MKE,3619\\nMSP,MLI,450\\nMSP,MOT,1085\\nMSP,MSN,1438\\nMSP,MSO,189\\nMSP,MYR,27\\nMSP,OKC,542\\nMSP,OMA,1177\\nMSP,ORD,9356\\nMSP,ORF,122\\nMSP,PDX,1501\\nMSP,PHL,1709\\nMSP,PHX,3515\\nMSP,PIR,3\\nMSP,PIT,1006\\nMSP,PSP,214\\nMSP,PVD,6\\nMSP,PWM,42\\nMSP,RAP,877\\nMSP,RDU,726\\nMSP,RHI,221\\nMSP,RIC,339\\nMSP,ROC,134\\nMSP,RST,881\\nMSP,RSW,647\\nMSP,SAN,1330\\nMSP,SAT,190\\nMSP,SAV,27\\nMSP,SBN,365\\nMSP,SDF,707\\nMSP,SEA,2475\\nMSP,SFO,1909\\nMSP,SGF,359\\nMSP,SJC,693\\nMSP,SJU,26\\nMSP,SLC,2197\\nMSP,SMF,809\\nMSP,SNA,1037\\nMSP,SPI,1\\nMSP,STL,1626\\nMSP,SUX,121\\nMSP,TPA,1005\\nMSP,TUL,717\\nMSP,TUS,439\\nMSP,TVC,346\\nMSP,TYS,365\\nMSP,XNA,677\\nMSY,ATL,4695\\nMSY,AUS,443\\nMSY,BHM,1012\\nMSY,BNA,1010\\nMSY,BOS,254\\nMSY,BWI,391\\nMSY,CLE,54\\nMSY,CLT,1504\\nMSY,CMH,1\\nMSY,CVG,193\\nMSY,DAL,2079\\nMSY,DCA,430\\nMSY,DEN,1176\\nMSY,DFW,2501\\nMSY,DTW,53\\nMSY,EWR,1129\\nMSY,FLL,594\\nMSY,HOU,3737\\nMSY,IAD,457\\nMSY,IAH,4257\\nMSY,IND,10\\nMSY,JAX,472\\nMSY,JFK,1070\\nMSY,LAS,727\\nMSY,LAX,928\\nMSY,LGA,511\\nMSY,MCI,461\\nMSY,MCO,1566\\nMSY,MDW,390\\nMSY,MEM,1003\\nMSY,MIA,1097\\nMSY,MSP,16\\nMSY,OKC,1\\nMSY,ORD,1458\\nMSY,PHL,1046\\nMSY,PHX,365\\nMSY,RDU,472\\nMSY,SAT,432\\nMSY,SLC,329\\nMSY,TPA,1097\\nMSY,TWF,1\\nMTJ,ATL,37\\nMTJ,DEN,1591\\nMTJ,DFW,232\\nMTJ,EWR,21\\nMTJ,IAH,261\\nMTJ,LAX,18\\nMTJ,ORD,30\\nMTJ,SLC,229\\nMYR,ATL,1854\\nMYR,BOS,45\\nMYR,CLT,2216\\nMYR,CVG,13\\nMYR,DTW,287\\nMYR,EWR,234\\nMYR,IAD,533\\nMYR,ILM,1\\nMYR,LGA,124\\nMYR,MSP,27\\nMYR,PHL,1\\nOAJ,ATL,1178\\nOAJ,CLT,6\\nOAK,ABQ,1004\\nOAK,ATL,88\\nOAK,AUS,236\\nOAK,BNA,363\\nOAK,BOI,667\\nOAK,BOS,518\\nOAK,BUR,5420\\nOAK,DEN,3101\\nOAK,DFW,725\\nOAK,FLL,13\\nOAK,GEG,726\\nOAK,HNL,121\\nOAK,HOU,711\\nOAK,IAD,841\\nOAK,IAH,721\\nOAK,JFK,1177\\nOAK,KOA,4\\nOAK,LAS,4642\\nOAK,LAX,7578\\nOAK,LGB,1632\\nOAK,MCI,684\\nOAK,MDW,1720\\nOAK,OGG,60\\nOAK,ONT,3701\\nOAK,ORD,59\\nOAK,PDX,2482\\nOAK,PHX,4213\\nOAK,RNO,1331\\nOAK,SAN,5851\\nOAK,SEA,5047\\nOAK,SLC,3146\\nOAK,SMF,1\\nOAK,SNA,3645\\nOAK,TUS,307\\nOGG,ANC,27\\nOGG,DEN,163\\nOGG,DFW,366\\nOGG,HNL,12383\\nOGG,ITO,366\\nOGG,KOA,1379\\nOGG,LAX,2058\\nOGG,LIH,60\\nOGG,OAK,60\\nOGG,PDX,366\\nOGG,PHX,586\\nOGG,SAN,280\\nOGG,SEA,533\\nOGG,SFO,932\\nOGG,SLC,261\\nOGG,SMF,60\\nOGG,SNA,60\\nOKC,ABQ,231\\nOKC,ATL,1884\\nOKC,AUS,87\\nOKC,BMI,1\\nOKC,BWI,366\\nOKC,CLE,21\\nOKC,CVG,769\\nOKC,DAL,1687\\nOKC,DEN,2848\\nOKC,DFW,2845\\nOKC,DTW,604\\nOKC,EWR,361\\nOKC,HOU,1353\\nOKC,IAD,5\\nOKC,IAH,2635\\nOKC,LAS,471\\nOKC,LAX,500\\nOKC,MCI,1144\\nOKC,MCO,9\\nOKC,MEM,883\\nOKC,MSP,617\\nOKC,ONT,231\\nOKC,ORD,2038\\nOKC,PHX,1513\\nOKC,SAN,302\\nOKC,SAT,89\\nOKC,SLC,743\\nOKC,SMF,226\\nOKC,STL,688\\nOKC,TUL,1\\nOMA,ABQ,1\\nOMA,ATL,1731\\nOMA,ATW,1\\nOMA,BHM,1\\nOMA,CLE,428\\nOMA,COS,1\\nOMA,CVG,1002\\nOMA,DEN,3231\\nOMA,DFW,1748\\nOMA,DSM,1\\nOMA,DTW,1324\\nOMA,EWR,1080\\nOMA,GRB,1\\nOMA,IAH,2099\\nOMA,LAS,1083\\nOMA,LNK,1\\nOMA,MCO,9\\nOMA,MDW,2045\\nOMA,MEM,763\\nOMA,MKE,701\\nOMA,MSP,1163\\nOMA,ONT,304\\nOMA,ORD,4045\\nOMA,PHX,2067\\nOMA,SAN,314\\nOMA,SLC,609\\nOMA,STL,1033\\nOMA,TUS,221\\nOME,ANC,729\\nOME,OTZ,361\\nONT,ABQ,443\\nONT,ATL,797\\nONT,AUS,304\\nONT,BNA,365\\nONT,BOI,471\\nONT,COS,458\\nONT,DEN,1544\\nONT,DFW,1742\\nONT,ELP,382\\nONT,FAT,238\\nONT,GEG,440\\nONT,GJT,1\\nONT,IAH,1093\\nONT,JFK,248\\nONT,LAS,3494\\nONT,LAX,24\\nONT,MCI,302\\nONT,MRY,246\\nONT,OAK,3697\\nONT,OKC,231\\nONT,OMA,303\\nONT,PDX,60\\nONT,PHX,5628\\nONT,RNO,273\\nONT,SAN,2\\nONT,SAT,439\\nONT,SEA,1343\\nONT,SFO,1599\\nONT,SJC,2742\\nONT,SLC,1658\\nONT,SMF,3803\\nONT,TUL,228\\nONT,TUS,474\\nORD,ABE,1426\\nORD,ABQ,754\\nORD,ALB,1632\\nORD,ANC,561\\nORD,ASE,310\\nORD,ATL,7449\\nORD,ATW,2288\\nORD,AUS,2515\\nORD,AVP,718\\nORD,AZO,2350\\nORD,BDL,3335\\nORD,BHM,1511\\nORD,BIL,105\\nORD,BMI,2005\\nORD,BNA,3905\\nORD,BOI,786\\nORD,BOS,7133\\nORD,BTR,215\\nORD,BTV,738\\nORD,BUF,3437\\nORD,BWI,3552\\nORD,BZN,336\\nORD,CAE,1373\\nORD,CAK,1047\\nORD,CHA,767\\nORD,CHS,1337\\nORD,CID,4154\\nORD,CLE,4567\\nORD,CLT,6013\\nORD,CMH,4664\\nORD,CMI,2404\\nORD,COS,1525\\nORD,CPR,134\\nORD,CRW,708\\nORD,CVG,5993\\nORD,CWA,1715\\nORD,DAL,1007\\nORD,DAY,1786\\nORD,DBQ,1347\\nORD,DCA,7430\\nORD,DEN,5773\\nORD,DFW,8093\\nORD,DSM,4823\\nORD,DTW,7602\\nORD,EGE,197\\nORD,ELP,670\\nORD,EVV,1944\\nORD,EWR,7174\\nORD,FAR,1344\\nORD,FCA,104\\nORD,FLL,1583\\nORD,FNT,1265\\nORD,FSD,1724\\nORD,FWA,2956\\nORD,GEG,327\\nORD,GJT,13\\nORD,GPT,214\\nORD,GRB,3631\\nORD,GRR,3699\\nORD,GSO,870\\nORD,GSP,1302\\nORD,GTF,23\\nORD,GUC,2\\nORD,HDN,200\\nORD,HNL,641\\nORD,HPN,3624\\nORD,HSV,547\\nORD,IAD,2891\\nORD,IAH,5463\\nORD,ICT,3001\\nORD,IND,4103\\nORD,JAC,463\\nORD,JAN,211\\nORD,JAX,1697\\nORD,JFK,3684\\nORD,LAN,1409\\nORD,LAS,5257\\nORD,LAX,6974\\nORD,LEX,1965\\nORD,LGA,10770\\nORD,LGB,604\\nORD,LIT,1806\\nORD,LNK,1407\\nORD,LSE,1572\\nORD,MBS,1339\\nORD,MCI,3900\\nORD,MCO,3798\\nORD,MDT,1552\\nORD,MEM,3782\\nORD,MHT,1144\\nORD,MIA,3343\\nORD,MKE,3400\\nORD,MLI,2579\\nORD,MOB,210\\nORD,MQT,313\\nORD,MSN,4878\\nORD,MSO,105\\nORD,MSP,9688\\nORD,MSY,1502\\nORD,MTJ,30\\nORD,OAK,59\\nORD,OGG,221\\nORD,OKC,1937\\nORD,OMA,4097\\nORD,ORF,1188\\nORD,PBI,656\\nORD,PDX,2394\\nORD,PHL,6733\\nORD,PHX,5124\\nORD,PIA,3256\\nORD,PIT,3611\\nORD,PNS,292\\nORD,PSP,451\\nORD,PVD,1789\\nORD,PWM,343\\nORD,RAP,218\\nORD,RDU,3140\\nORD,RIC,1884\\nORD,RNO,365\\nORD,ROA,555\\nORD,ROC,2550\\nORD,RST,2366\\nORD,RSW,764\\nORD,SAN,3308\\nORD,SAT,1713\\nORD,SAV,1132\\nORD,SBN,2266\\nORD,SDF,3496\\nORD,SEA,4802\\nORD,SFO,5524\\nORD,SGF,2306\\nORD,SHV,211\\nORD,SJC,1333\\nORD,SJU,1036\\nORD,SLC,2860\\nORD,SMF,1077\\nORD,SNA,2580\\nORD,SPI,1085\\nORD,STL,4558\\nORD,STT,80\\nORD,SYR,2314\\nORD,TOL,1337\\nORD,TPA,2443\\nORD,TUL,2040\\nORD,TUS,865\\nORD,TVC,2435\\nORD,TYS,2017\\nORD,VPS,236\\nORD,XNA,3116\\nORF,ATL,2784\\nORF,BDL,1\\nORF,BNA,236\\nORF,BOI,1\\nORF,BOS,197\\nORF,BWI,1675\\nORF,CLE,2\\nORF,CLT,1836\\nORF,CVG,499\\nORF,DFW,1035\\nORF,DTW,968\\nORF,EWR,380\\nORF,IAD,1057\\nORF,IAH,969\\nORF,JAX,719\\nORF,JFK,277\\nORF,LAS,366\\nORF,MCO,753\\nORF,MDW,731\\nORF,MEM,240\\nORF,MIA,152\\nORF,MSP,123\\nORF,ORD,1089\\nORF,PBI,1\\nORF,SAV,1\\nORF,TPA,366\\nOTH,PDX,162\\nOTH,SFO,353\\nOTZ,ANC,361\\nOTZ,OME,725\\nOXR,LAX,1291\\nOXR,PSP,1\\nPBI,ATL,4262\\nPBI,BDL,373\\nPBI,BOS,1746\\nPBI,BWI,1353\\nPBI,CLE,383\\nPBI,CLT,1871\\nPBI,CMH,5\\nPBI,CVG,390\\nPBI,DCA,909\\nPBI,DEN,95\\nPBI,DFW,854\\nPBI,DTW,472\\nPBI,EWR,2770\\nPBI,HPN,1046\\nPBI,IAD,14\\nPBI,IAH,1389\\nPBI,ISP,1082\\nPBI,JFK,2531\\nPBI,LAS,62\\nPBI,LGA,1934\\nPBI,ORD,654\\nPBI,PHL,1899\\nPBI,PIT,4\\nPBI,SWF,359\\nPBI,TPA,1365\\nPDX,ABQ,366\\nPDX,ANC,576\\nPDX,ATL,1102\\nPDX,BOI,1038\\nPDX,BOS,366\\nPDX,BUR,60\\nPDX,CLT,136\\nPDX,CVG,311\\nPDX,DEN,4654\\nPDX,DFW,1577\\nPDX,DTW,250\\nPDX,EUG,1551\\nPDX,EWR,692\\nPDX,GEG,1311\\nPDX,HNL,732\\nPDX,IAD,367\\nPDX,IAH,1265\\nPDX,JFK,680\\nPDX,LAS,3564\\nPDX,LAX,3517\\nPDX,LGB,141\\nPDX,LMT,162\\nPDX,MCI,366\\nPDX,MCO,236\\nPDX,MDW,894\\nPDX,MFR,1543\\nPDX,MSN,1\\nPDX,MSP,1502\\nPDX,OAK,2471\\nPDX,OGG,366\\nPDX,ONT,60\\nPDX,ORD,2184\\nPDX,OTH,162\\nPDX,PHL,379\\nPDX,PHX,3946\\nPDX,PSP,168\\nPDX,RDM,1621\\nPDX,RNO,1150\\nPDX,SAN,1352\\nPDX,SEA,2449\\nPDX,SFO,3088\\nPDX,SJC,2322\\nPDX,SLC,3277\\nPDX,SMF,2484\\nPDX,SNA,1421\\nPFN,ATL,2548\\nPFN,CVG,36\\nPFN,MCO,196\\nPFN,MEM,1095\\nPHF,ATL,4157\\nPHF,BOS,716\\nPHF,FLL,310\\nPHF,LGA,767\\nPHF,MCO,361\\nPHF,TPA,95\\nPHL,ALB,448\\nPHL,ATL,6918\\nPHL,ATW,1\\nPHL,AUS,290\\nPHL,AVP,1\\nPHL,BDL,521\\nPHL,BNA,981\\nPHL,BOS,6384\\nPHL,BUF,365\\nPHL,BWI,660\\nPHL,CLE,674\\nPHL,CLT,3545\\nPHL,CMH,994\\nPHL,CVG,1583\\nPHL,DCA,584\\nPHL,DEN,2961\\nPHL,DFW,3485\\nPHL,DTW,2760\\nPHL,EWR,19\\nPHL,FLL,2977\\nPHL,GRR,1\\nPHL,HOU,687\\nPHL,IAD,607\\nPHL,IAH,1732\\nPHL,ICT,1\\nPHL,IND,853\\nPHL,JAX,1665\\nPHL,JFK,675\\nPHL,LAS,2836\\nPHL,LAX,2240\\nPHL,LGA,4\\nPHL,MCO,7032\\nPHL,MDW,2652\\nPHL,MEM,1032\\nPHL,MHT,2357\\nPHL,MIA,2206\\nPHL,MKE,774\\nPHL,MSP,1749\\nPHL,MSY,1107\\nPHL,ORD,7078\\nPHL,ORF,292\\nPHL,PBI,1903\\nPHL,PDX,380\\nPHL,PHX,2885\\nPHL,PIT,3188\\nPHL,PVD,2550\\nPHL,RDU,3347\\nPHL,RIC,387\\nPHL,RSW,1223\\nPHL,SAN,817\\nPHL,SAT,290\\nPHL,SDF,2\\nPHL,SEA,708\\nPHL,SFO,2237\\nPHL,SJU,1474\\nPHL,SLC,670\\nPHL,SMF,207\\nPHL,STL,578\\nPHL,STT,198\\nPHL,SYR,334\\nPHL,TPA,3390\\nPHX,ABQ,5234\\nPHX,ANC,366\\nPHX,ASE,109\\nPHX,ATL,4607\\nPHX,AUS,2786\\nPHX,BDL,334\\nPHX,BFL,1194\\nPHX,BHM,367\\nPHX,BNA,1123\\nPHX,BOI,679\\nPHX,BOS,1067\\nPHX,BUF,365\\nPHX,BUR,4754\\nPHX,BWI,2103\\nPHX,CLD,43\\nPHX,CLE,1115\\nPHX,CLT,2183\\nPHX,CMH,1096\\nPHX,COS,1392\\nPHX,CVG,463\\nPHX,DCA,1080\\nPHX,DEN,8402\\nPHX,DFW,5387\\nPHX,DRO,811\\nPHX,DSM,749\\nPHX,DTW,2929\\nPHX,ELP,4155\\nPHX,EUG,371\\nPHX,EWR,2579\\nPHX,FAT,1618\\nPHX,FLG,1871\\nPHX,FLL,620\\nPHX,GEG,777\\nPHX,GJT,1037\\nPHX,HNL,914\\nPHX,HOU,1677\\nPHX,IAD,731\\nPHX,IAH,4197\\nPHX,ICT,692\\nPHX,IND,1458\\nPHX,JFK,2256\\nPHX,KOA,330\\nPHX,LAS,10337\\nPHX,LAX,9992\\nPHX,LGB,1624\\nPHX,LIH,280\\nPHX,LIT,235\\nPHX,MCI,2140\\nPHX,MCO,1039\\nPHX,MDW,2795\\nPHX,MEM,816\\nPHX,MFR,303\\nPHX,MHT,365\\nPHX,MIA,366\\nPHX,MKE,866\\nPHX,MRY,911\\nPHX,MSP,3508\\nPHX,MSY,365\\nPHX,OAK,4150\\nPHX,OGG,586\\nPHX,OKC,1516\\nPHX,OMA,2060\\nPHX,ONT,5627\\nPHX,ORD,5130\\nPHX,PDX,3948\\nPHX,PHL,2883\\nPHX,PIT,1086\\nPHX,PSP,1752\\nPHX,PVD,365\\nPHX,RDU,755\\nPHX,RNO,2776\\nPHX,SAN,7609\\nPHX,SAT,2783\\nPHX,SBA,1618\\nPHX,SBP,990\\nPHX,SDF,365\\nPHX,SEA,5072\\nPHX,SFO,4884\\nPHX,SJC,4050\\nPHX,SLC,7177\\nPHX,SMF,4134\\nPHX,SNA,5497\\nPHX,STL,2755\\nPHX,TEX,194\\nPHX,TPA,1022\\nPHX,TUL,1015\\nPHX,TUS,3684\\nPHX,YUM,1962\\nPIA,ATL,623\\nPIA,DEN,362\\nPIA,DFW,634\\nPIA,DTW,701\\nPIA,HPN,1\\nPIA,LNK,1\\nPIA,ORD,3259\\nPIH,SLC,1659\\nPIR,JAX,2\\nPIR,MSP,3\\nPIT,ATL,4557\\nPIT,BOS,616\\nPIT,BWI,1043\\nPIT,CLT,2376\\nPIT,CVG,1288\\nPIT,DCA,7\\nPIT,DEN,859\\nPIT,DFW,2140\\nPIT,DTW,1511\\nPIT,EWR,671\\nPIT,FLL,507\\nPIT,GRB,1\\nPIT,IAD,780\\nPIT,IAH,1719\\nPIT,JFK,2249\\nPIT,LAS,1411\\nPIT,LAX,373\\nPIT,LGA,936\\nPIT,MCI,266\\nPIT,MCO,2470\\nPIT,MDW,2070\\nPIT,MEM,1005\\nPIT,MIA,174\\nPIT,MKE,1083\\nPIT,MSP,1050\\nPIT,ORD,3521\\nPIT,PBI,4\\nPIT,PHL,4169\\nPIT,PHX,1086\\nPIT,RSW,181\\nPIT,SFO,369\\nPIT,SJU,1\\nPIT,SLC,218\\nPIT,TPA,1089\\nPLN,DCA,1\\nPLN,DTW,263\\nPMD,SFO,728\\nPNS,ATL,4430\\nPNS,CLT,372\\nPNS,DFW,2024\\nPNS,FLL,145\\nPNS,IAH,635\\nPNS,MCO,366\\nPNS,MEM,1097\\nPNS,ORD,293\\nPNS,TPA,135\\nPSC,DEN,940\\nPSC,SLC,1600\\nPSC,TWF,1\\nPSE,EWR,17\\nPSE,FLL,45\\nPSE,JFK,346\\nPSE,MCO,347\\nPSG,JNU,364\\nPSG,WRG,363\\nPSP,DEN,998\\nPSP,DFW,1096\\nPSP,FAT,1\\nPSP,GJT,1\\nPSP,IAH,216\\nPSP,LAS,1281\\nPSP,LAX,2597\\nPSP,MSP,214\\nPSP,ONT,1\\nPSP,ORD,452\\nPSP,PDX,169\\nPSP,PHX,1752\\nPSP,SEA,664\\nPSP,SFO,1638\\nPSP,SLC,898\\nPSP,TWF,1\\nPUB,COS,2\\nPVD,ATL,1390\\nPVD,BDL,1\\nPVD,BNA,366\\nPVD,BOS,3\\nPVD,BWI,3981\\nPVD,CLE,360\\nPVD,CLT,1439\\nPVD,CVG,958\\nPVD,DCA,672\\nPVD,DTW,1105\\nPVD,EWR,1102\\nPVD,FLL,425\\nPVD,IAD,511\\nPVD,JFK,604\\nPVD,LAS,364\\nPVD,MCO,2148\\nPVD,MDW,1373\\nPVD,MSP,6\\nPVD,ORD,1792\\nPVD,PHL,2563\\nPVD,PHX,365\\nPVD,TPA,981\\nPWM,ATL,904\\nPWM,BOS,2\\nPWM,BWI,995\\nPWM,CLE,306\\nPWM,CLT,277\\nPWM,CVG,563\\nPWM,DTW,67\\nPWM,EWR,741\\nPWM,IAD,407\\nPWM,JFK,1818\\nPWM,MCO,459\\nPWM,MSP,42\\nPWM,ORD,316\\nRAP,DEN,2309\\nRAP,MSP,877\\nRAP,ORD,217\\nRAP,SLC,757\\nRAP,TWF,1\\nRDD,SBA,1\\nRDD,SFO,1680\\nRDD,SMF,1\\nRDM,DEN,12\\nRDM,IDA,1\\nRDM,PDX,1619\\nRDM,SFO,1083\\nRDM,SLC,719\\nRDU,ATL,5418\\nRDU,AUS,231\\nRDU,BDL,1149\\nRDU,BHM,160\\nRDU,BNA,1617\\nRDU,BOS,3870\\nRDU,BWI,2078\\nRDU,CLE,307\\nRDU,CLT,2339\\nRDU,CMH,500\\nRDU,CVG,1317\\nRDU,DCA,2772\\nRDU,DEN,470\\nRDU,DFW,2347\\nRDU,DTW,1368\\nRDU,EWR,2394\\nRDU,FLL,696\\nRDU,GRB,1\\nRDU,IAD,1722\\nRDU,IAH,1995\\nRDU,IND,673\\nRDU,JAX,595\\nRDU,JFK,3989\\nRDU,LAS,715\\nRDU,LAX,8\\nRDU,LGA,4135\\nRDU,MCI,652\\nRDU,MCO,1738\\nRDU,MDW,1360\\nRDU,MEM,1062\\nRDU,MIA,1098\\nRDU,MKE,490\\nRDU,MSP,726\\nRDU,MSY,474\\nRDU,ORD,3094\\nRDU,PHL,3363\\nRDU,PHX,755\\nRDU,SAT,229\\nRDU,SDF,426\\nRDU,SLC,327\\nRDU,STL,358\\nRDU,TPA,1057\\nRDU,XNA,104\\nRFD,DEN,290\\nRHI,MSP,221\\nRIC,ATL,4536\\nRIC,BOS,688\\nRIC,CLE,905\\nRIC,CLT,1800\\nRIC,CVG,779\\nRIC,DCA,2\\nRIC,DFW,1041\\nRIC,DTW,700\\nRIC,EWR,1576\\nRIC,FLL,366\\nRIC,IAH,971\\nRIC,JAX,1\\nRIC,JFK,1703\\nRIC,LGA,1337\\nRIC,MCO,515\\nRIC,MEM,292\\nRIC,MIA,152\\nRIC,MSP,340\\nRIC,ORD,1884\\nRIC,ORF,1\\nRIC,PHL,387\\nRIC,RDU,1\\nRKS,DEN,545\\nRKS,GCC,58\\nRKS,SLC,351\\nRNO,ATL,169\\nRNO,BOI,1025\\nRNO,BUR,1\\nRNO,DEN,1353\\nRNO,DFW,1095\\nRNO,GEG,214\\nRNO,IAH,428\\nRNO,LAS,4508\\nRNO,LAX,1905\\nRNO,LGB,464\\nRNO,MDW,365\\nRNO,OAK,1322\\nRNO,ONT,273\\nRNO,ORD,365\\nRNO,PDX,1144\\nRNO,PHX,2779\\nRNO,PIH,1\\nRNO,SAN,730\\nRNO,SEA,799\\nRNO,SFO,1886\\nRNO,SJC,1364\\nRNO,SLC,1814\\nRNO,SNA,60\\nRNO,TUS,222\\nROA,ATL,1731\\nROA,BWI,1\\nROA,CLT,1\\nROA,CVG,2\\nROA,DTW,748\\nROA,IAD,601\\nROA,MSN,1\\nROA,ORD,635\\nROC,ATL,2488\\nROC,BOS,1\\nROC,BWI,865\\nROC,CLE,921\\nROC,CLT,412\\nROC,CVG,724\\nROC,DFW,177\\nROC,DTW,864\\nROC,EWR,933\\nROC,FLL,114\\nROC,IAD,560\\nROC,JFK,2435\\nROC,LAS,84\\nROC,MCO,700\\nROC,MSP,136\\nROC,ORD,2484\\nROC,TPA,366\\nROW,DFW,961\\nRST,DTW,171\\nRST,MSP,817\\nRST,ORD,2365\\nRSW,ATL,4196\\nRSW,BDL,134\\nRSW,BOS,1716\\nRSW,BUF,376\\nRSW,BWI,1335\\nRSW,CAK,138\\nRSW,CLE,594\\nRSW,CLT,1765\\nRSW,CMH,137\\nRSW,CVG,539\\nRSW,DCA,708\\nRSW,DEN,222\\nRSW,DFW,919\\nRSW,DTW,1144\\nRSW,EWR,1874\\nRSW,FNT,149\\nRSW,HPN,520\\nRSW,IAD,14\\nRSW,IAH,1066\\nRSW,IND,1057\\nRSW,ISP,374\\nRSW,JFK,1890\\nRSW,LGA,237\\nRSW,MCI,5\\nRSW,MCO,1414\\nRSW,MDW,1096\\nRSW,MEM,58\\nRSW,MIA,2\\nRSW,MKE,225\\nRSW,MSP,647\\nRSW,ORD,763\\nRSW,PBI,1\\nRSW,PHL,1223\\nRSW,PIT,181\\nRSW,STL,417\\nSAN,ABQ,1054\\nSAN,ATL,2855\\nSAN,AUS,715\\nSAN,BFL,224\\nSAN,BNA,727\\nSAN,BOI,475\\nSAN,BOS,610\\nSAN,BWI,729\\nSAN,CLE,87\\nSAN,CLT,704\\nSAN,COS,476\\nSAN,CVG,573\\nSAN,DEN,5263\\nSAN,DFW,3528\\nSAN,DTW,580\\nSAN,ELP,366\\nSAN,EWR,1180\\nSAN,FAT,582\\nSAN,GEG,452\\nSAN,HNL,393\\nSAN,HOU,422\\nSAN,IAD,1331\\nSAN,IAH,2388\\nSAN,JFK,1630\\nSAN,KOA,23\\nSAN,LAS,5902\\nSAN,LAX,11224\\nSAN,LIH,31\\nSAN,MCI,686\\nSAN,MCO,13\\nSAN,MDW,1708\\nSAN,MEM,109\\nSAN,MKE,106\\nSAN,MRY,446\\nSAN,MSP,1333\\nSAN,OAK,5831\\nSAN,OGG,279\\nSAN,OKC,305\\nSAN,OMA,317\\nSAN,ONT,3\\nSAN,ORD,2948\\nSAN,PDX,1352\\nSAN,PHL,817\\nSAN,PHX,7581\\nSAN,RNO,729\\nSAN,SAT,643\\nSAN,SEA,2831\\nSAN,SFO,6769\\nSAN,SJC,5286\\nSAN,SLC,2549\\nSAN,SMF,4603\\nSAN,STL,366\\nSAN,TUL,228\\nSAN,TUS,1413\\nSAT,ABQ,426\\nSAT,AMA,1\\nSAT,ATL,3241\\nSAT,AUS,2\\nSAT,BNA,676\\nSAT,BWI,730\\nSAT,CLE,233\\nSAT,CLT,658\\nSAT,CVG,882\\nSAT,DAL,4999\\nSAT,DEN,2510\\nSAT,DFW,5413\\nSAT,DTW,642\\nSAT,ELP,1332\\nSAT,EWR,954\\nSAT,HOU,2582\\nSAT,HRL,656\\nSAT,IAD,149\\nSAT,IAH,3755\\nSAT,IND,236\\nSAT,LAS,1575\\nSAT,LAX,1783\\nSAT,MCI,578\\nSAT,MCO,744\\nSAT,MDW,710\\nSAT,MEM,788\\nSAT,MGM,1\\nSAT,MSP,191\\nSAT,MSY,430\\nSAT,OKC,87\\nSAT,ONT,441\\nSAT,ORD,1815\\nSAT,PHL,290\\nSAT,PHX,2767\\nSAT,RDU,228\\nSAT,SAN,646\\nSAT,SFO,366\\nSAT,SLC,587\\nSAT,SMF,226\\nSAT,STL,246\\nSAT,TPA,365\\nSAT,TUL,89\\nSAT,TUS,240\\nSAV,ATL,3888\\nSAV,BOS,89\\nSAV,CHS,1\\nSAV,CLE,321\\nSAV,CLT,1433\\nSAV,CVG,731\\nSAV,DFW,795\\nSAV,DTW,509\\nSAV,EWR,1127\\nSAV,IAD,1007\\nSAV,IAH,949\\nSAV,JAX,3\\nSAV,LGA,996\\nSAV,MEM,764\\nSAV,MSP,27\\nSAV,ORD,1134\\nSBA,DEN,840\\nSBA,DFW,366\\nSBA,LAS,305\\nSBA,LAX,4498\\nSBA,MRY,1\\nSBA,PHX,1617\\nSBA,SBP,1\\nSBA,SFO,3047\\nSBA,SJC,1208\\nSBA,SLC,685\\nSBN,ATL,1039\\nSBN,CVG,12\\nSBN,DTW,1638\\nSBN,MSP,365\\nSBN,ORD,2265\\nSBP,FAT,1\\nSBP,LAS,128\\nSBP,LAX,2682\\nSBP,MFR,1\\nSBP,MRY,2\\nSBP,PHX,990\\nSBP,SFO,1758\\nSBP,SLC,284\\nSCC,ANC,363\\nSCC,BRW,364\\nSCE,ATL,122\\nSCE,CVG,23\\nSCE,DTW,500\\nSDF,ATL,2756\\nSDF,BHM,674\\nSDF,BOS,81\\nSDF,BWI,1483\\nSDF,CLE,728\\nSDF,CLT,795\\nSDF,CVG,639\\nSDF,DEN,384\\nSDF,DFW,1386\\nSDF,DTW,1011\\nSDF,EWR,1037\\nSDF,IAH,361\\nSDF,LAS,365\\nSDF,LGA,572\\nSDF,MCO,533\\nSDF,MDW,1685\\nSDF,MEM,787\\nSDF,MIA,366\\nSDF,MKE,257\\nSDF,MSP,780\\nSDF,ORD,3497\\nSDF,PHL,2\\nSDF,PHX,365\\nSDF,RDU,426\\nSDF,SLC,3\\nSDF,SPI,1\\nSDF,STL,995\\nSDF,TPA,489\\nSEA,ABQ,708\\nSEA,ANC,6256\\nSEA,ATL,2571\\nSEA,AUS,147\\nSEA,BNA,364\\nSEA,BOI,1070\\nSEA,BOS,980\\nSEA,BUR,1390\\nSEA,BWI,242\\nSEA,CLE,229\\nSEA,CLT,480\\nSEA,CVG,791\\nSEA,DCA,727\\nSEA,DEN,6623\\nSEA,DFW,3917\\nSEA,DTW,1172\\nSEA,EWR,2026\\nSEA,FAI,956\\nSEA,GEG,4346\\nSEA,HNL,1638\\nSEA,IAD,1097\\nSEA,IAH,2395\\nSEA,IND,75\\nSEA,JFK,1852\\nSEA,JNU,1334\\nSEA,KOA,45\\nSEA,KTN,1289\\nSEA,LAS,5051\\nSEA,LAX,6865\\nSEA,LGB,1500\\nSEA,LIH,366\\nSEA,MCI,365\\nSEA,MCO,731\\nSEA,MDW,1361\\nSEA,MEM,350\\nSEA,MIA,366\\nSEA,MKE,121\\nSEA,MSP,2474\\nSEA,OAK,5095\\nSEA,OGG,900\\nSEA,ONT,1343\\nSEA,ORD,4608\\nSEA,PDX,2449\\nSEA,PHL,707\\nSEA,PHX,5062\\nSEA,PSP,667\\nSEA,RNO,802\\nSEA,SAN,2833\\nSEA,SFO,5409\\nSEA,SIT,104\\nSEA,SJC,3534\\nSEA,SLC,3774\\nSEA,SMF,3642\\nSEA,SNA,2860\\nSEA,STL,567\\nSEA,TUS,443\\nSFO,ABQ,529\\nSFO,ACV,2337\\nSFO,ANC,182\\nSFO,ASE,59\\nSFO,ATL,3098\\nSFO,AUS,609\\nSFO,BFL,941\\nSFO,BOI,1766\\nSFO,BOS,2594\\nSFO,BUR,1962\\nSFO,BWI,366\\nSFO,BZN,28\\nSFO,CEC,705\\nSFO,CIC,1392\\nSFO,CLE,466\\nSFO,CLT,1429\\nSFO,COS,364\\nSFO,CVG,782\\nSFO,DEN,5374\\nSFO,DFW,3487\\nSFO,DTW,1160\\nSFO,EUG,1923\\nSFO,EWR,3137\\nSFO,FAT,2410\\nSFO,FCA,12\\nSFO,GJT,2\\nSFO,HNL,2359\\nSFO,IAD,2732\\nSFO,IAH,2660\\nSFO,IDA,1\\nSFO,IND,173\\nSFO,JFK,6971\\nSFO,KOA,713\\nSFO,LAS,7007\\nSFO,LAX,13788\\nSFO,LGB,209\\nSFO,LIH,483\\nSFO,LMT,348\\nSFO,MCO,366\\nSFO,MDW,1092\\nSFO,MEM,208\\nSFO,MFR,2570\\nSFO,MIA,1098\\nSFO,MKE,115\\nSFO,MOD,1665\\nSFO,MRY,2410\\nSFO,MSO,12\\nSFO,MSP,1984\\nSFO,OGG,932\\nSFO,ONT,1600\\nSFO,ORD,5746\\nSFO,OTH,354\\nSFO,PDX,2972\\nSFO,PHL,2554\\nSFO,PHX,4870\\nSFO,PIT,369\\nSFO,PMD,728\\nSFO,PSP,1636\\nSFO,RDD,1683\\nSFO,RDM,1082\\nSFO,RNO,1885\\nSFO,SAN,6312\\nSFO,SAT,366\\nSFO,SBA,2991\\nSFO,SBP,1751\\nSFO,SEA,5414\\nSFO,SJC,1\\nSFO,SLC,4064\\nSFO,SMF,2301\\nSFO,SMX,2\\nSFO,SNA,3955\\nSFO,STL,574\\nSFO,TUS,365\\nSFO,TWF,2\\nSGF,ATL,1170\\nSGF,BNA,2\\nSGF,CVG,247\\nSGF,DEN,777\\nSGF,DFW,3228\\nSGF,DTW,363\\nSGF,FSD,1\\nSGF,MEM,1079\\nSGF,MSP,360\\nSGF,ORD,2492\\nSGF,STL,368\\nSGU,CDC,1\\nSGU,LAX,721\\nSGU,PIH,1\\nSGU,PSP,1\\nSGU,SLC,2594\\nSGU,TWF,1\\nSHV,ATL,1817\\nSHV,DFW,3579\\nSHV,DTW,360\\nSHV,IAH,1018\\nSHV,MEM,1094\\nSHV,ORD,211\\nSIT,JNU,740\\nSIT,KTN,365\\nSIT,SEA,227\\nSJC,ATL,634\\nSJC,AUS,968\\nSJC,BFL,1\\nSJC,BOS,256\\nSJC,BUR,3380\\nSJC,DEN,3670\\nSJC,DFW,2264\\nSJC,EWR,200\\nSJC,FAT,1\\nSJC,HNL,366\\nSJC,IAD,245\\nSJC,IAH,994\\nSJC,JFK,481\\nSJC,LAS,4176\\nSJC,LAX,8939\\nSJC,LGB,660\\nSJC,MDW,659\\nSJC,MSP,695\\nSJC,ONT,2719\\nSJC,ORD,1348\\nSJC,PDX,2322\\nSJC,PHX,4027\\nSJC,RNO,1371\\nSJC,SAN,5254\\nSJC,SBA,1206\\nSJC,SEA,3543\\nSJC,SFO,1\\nSJC,SLC,1372\\nSJC,SMX,1\\nSJC,SNA,5383\\nSJT,DFW,1316\\nSJU,ATL,1872\\nSJU,BDL,366\\nSJU,BOS,1273\\nSJU,BWI,318\\nSJU,CLE,43\\nSJU,CLT,795\\nSJU,DFW,986\\nSJU,DTW,172\\nSJU,EWR,1582\\nSJU,FLL,764\\nSJU,IAD,844\\nSJU,IAH,730\\nSJU,JFK,3558\\nSJU,LAX,144\\nSJU,MCO,2415\\nSJU,MEM,26\\nSJU,MIA,2560\\nSJU,MSP,26\\nSJU,ORD,1115\\nSJU,PHL,1475\\nSJU,PIT,1\\nSJU,STT,245\\nSJU,TPA,366\\nSLC,ABQ,2293\\nSLC,ACV,389\\nSLC,ANC,478\\nSLC,ASE,443\\nSLC,ATL,2866\\nSLC,AUS,550\\nSLC,BFL,371\\nSLC,BHM,5\\nSLC,BIL,1953\\nSLC,BLI,120\\nSLC,BNA,114\\nSLC,BOI,3370\\nSLC,BOS,707\\nSLC,BTM,704\\nSLC,BUR,1674\\nSLC,BWI,728\\nSLC,BZN,2029\\nSLC,CDC,666\\nSLC,CLE,348\\nSLC,CLT,211\\nSLC,CMH,290\\nSLC,COD,706\\nSLC,COS,1073\\nSLC,CPR,1006\\nSLC,CVG,1620\\nSLC,CYS,1\\nSLC,DCA,365\\nSLC,DEN,9269\\nSLC,DFW,3149\\nSLC,DRO,386\\nSLC,DSM,3\\nSLC,DTW,573\\nSLC,EKO,1579\\nSLC,ELP,120\\nSLC,EUG,714\\nSLC,EWR,812\\nSLC,FAI,80\\nSLC,FAR,95\\nSLC,FAT,849\\nSLC,FCA,1742\\nSLC,FLL,242\\nSLC,FSD,7\\nSLC,GCC,293\\nSLC,GEG,1947\\nSLC,GJT,1062\\nSLC,GTF,1050\\nSLC,GUC,14\\nSLC,HDN,373\\nSLC,HLN,1215\\nSLC,HNL,366\\nSLC,IAD,523\\nSLC,IAH,2698\\nSLC,IDA,1788\\nSLC,JAC,1485\\nSLC,JFK,1784\\nSLC,LAS,5373\\nSLC,LAX,5178\\nSLC,LBB,1\\nSLC,LGA,24\\nSLC,LGB,2499\\nSLC,LIT,18\\nSLC,LWS,652\\nSLC,MCI,1051\\nSLC,MCO,687\\nSLC,MDW,997\\nSLC,MFR,726\\nSLC,MKE,5\\nSLC,MRY,6\\nSLC,MSO,1845\\nSLC,MSP,2191\\nSLC,MSY,328\\nSLC,MTJ,229\\nSLC,OAK,3134\\nSLC,OGD,1\\nSLC,OGG,261\\nSLC,OKC,740\\nSLC,OMA,605\\nSLC,ONT,1661\\nSLC,ORD,2863\\nSLC,PDX,3289\\nSLC,PHL,671\\nSLC,PHX,7168\\nSLC,PIH,1660\\nSLC,PIT,217\\nSLC,PSC,1602\\nSLC,PSP,901\\nSLC,RAP,757\\nSLC,RDM,720\\nSLC,RDU,328\\nSLC,RKS,349\\nSLC,RNO,1817\\nSLC,SAN,2548\\nSLC,SAT,587\\nSLC,SBA,688\\nSLC,SBP,285\\nSLC,SDF,2\\nSLC,SEA,3771\\nSLC,SFO,3705\\nSLC,SGF,1\\nSLC,SGU,2594\\nSLC,SJC,1372\\nSLC,SLE,484\\nSLC,SMF,1660\\nSLC,SNA,2016\\nSLC,STL,1386\\nSLC,SUN,2903\\nSLC,TPA,329\\nSLC,TUL,602\\nSLC,TUS,1485\\nSLC,TWF,1772\\nSLC,WYS,264\\nSLC,XNA,4\\nSLC,YKM,338\\nSLC,YUM,440\\nSLE,SLC,484\\nSLE,TWF,2\\nSMF,ABQ,466\\nSMF,ACV,616\\nSMF,ATL,682\\nSMF,BFL,229\\nSMF,BUR,3466\\nSMF,CLT,76\\nSMF,COS,426\\nSMF,DEN,3327\\nSMF,DFW,1347\\nSMF,GEG,371\\nSMF,HNL,366\\nSMF,IAD,366\\nSMF,IAH,1085\\nSMF,JFK,342\\nSMF,LAS,4064\\nSMF,LAX,5717\\nSMF,LGB,729\\nSMF,MCI,306\\nSMF,MDW,683\\nSMF,MSP,810\\nSMF,OGG,59\\nSMF,OKC,229\\nSMF,ONT,3814\\nSMF,ORD,1077\\nSMF,PDX,2482\\nSMF,PHL,207\\nSMF,PHX,4115\\nSMF,RDD,1\\nSMF,SAN,4573\\nSMF,SAT,228\\nSMF,SBA,1\\nSMF,SEA,3638\\nSMF,SFO,2300\\nSMF,SLC,1660\\nSMF,SNA,2503\\nSMF,TUL,228\\nSMF,TUS,467\\nSMX,LAX,1681\\nSNA,ATL,1463\\nSNA,AUS,246\\nSNA,CVG,285\\nSNA,DEN,3326\\nSNA,DFW,3656\\nSNA,EWR,954\\nSNA,HNL,64\\nSNA,IAH,1826\\nSNA,KOA,36\\nSNA,LAS,4130\\nSNA,LAX,33\\nSNA,LIH,23\\nSNA,MSP,1036\\nSNA,OAK,3652\\nSNA,OGG,60\\nSNA,ORD,2554\\nSNA,PDX,1418\\nSNA,PHX,5477\\nSNA,RNO,60\\nSNA,SAN,1\\nSNA,SEA,2862\\nSNA,SFO,3994\\nSNA,SJC,5401\\nSNA,SLC,2015\\nSNA,SMF,2498\\nSNA,STL,306\\nSPI,IAD,142\\nSPI,ORD,1083\\nSPS,DFW,1834\\nSRQ,ATL,3327\\nSRQ,BOS,23\\nSRQ,BWI,245\\nSRQ,CLE,118\\nSRQ,CLT,207\\nSRQ,CVG,445\\nSRQ,DCA,12\\nSRQ,DTW,219\\nSRQ,EWR,399\\nSRQ,IAH,70\\nSRQ,IND,155\\nSRQ,JFK,534\\nSRQ,LGA,74\\nSRQ,MDW,565\\nSRQ,STL,37\\nSRQ,TPA,2\\nSTL,ABQ,366\\nSTL,ATL,3956\\nSTL,AUS,95\\nSTL,BHM,366\\nSTL,BNA,258\\nSTL,BOS,865\\nSTL,BWI,1676\\nSTL,CLE,916\\nSTL,CLT,1093\\nSTL,CMH,674\\nSTL,CVG,346\\nSTL,DAL,2718\\nSTL,DCA,1296\\nSTL,DEN,2430\\nSTL,DFW,3597\\nSTL,DTW,2455\\nSTL,EWR,1725\\nSTL,FLL,472\\nSTL,HOU,1340\\nSTL,IAH,1003\\nSTL,JFK,795\\nSTL,LAS,1651\\nSTL,LAX,1687\\nSTL,LGA,1603\\nSTL,LIT,666\\nSTL,MCI,1785\\nSTL,MCO,2421\\nSTL,MDW,3755\\nSTL,MEM,1048\\nSTL,MIA,731\\nSTL,MKE,321\\nSTL,MSP,1696\\nSTL,OKC,687\\nSTL,OMA,1043\\nSTL,ORD,4256\\nSTL,PHL,576\\nSTL,PHX,2763\\nSTL,RDU,357\\nSTL,RSW,417\\nSTL,SAN,366\\nSTL,SAT,246\\nSTL,SDF,994\\nSTL,SEA,566\\nSTL,SFO,574\\nSTL,SGF,366\\nSTL,SLC,1386\\nSTL,SNA,305\\nSTL,SRQ,38\\nSTL,TPA,1088\\nSTL,TUL,899\\nSTT,ATL,451\\nSTT,BOS,88\\nSTT,CLT,418\\nSTT,EWR,232\\nSTT,JFK,366\\nSTT,LGA,9\\nSTT,MIA,732\\nSTT,PHL,198\\nSTT,SJU,478\\nSTX,ATL,64\\nSTX,CLT,20\\nSTX,JAX,2\\nSTX,MGM,1\\nSTX,MIA,349\\nSUN,SLC,2870\\nSUN,TWF,1\\nSUX,MSP,122\\nSWF,ATL,1617\\nSWF,BDL,1\\nSWF,BOS,1\\nSWF,DTW,724\\nSWF,FLL,476\\nSWF,MCO,835\\nSWF,PBI,360\\nSWF,TPA,235\\nSYR,ATL,1419\\nSYR,CAK,1\\nSYR,CLE,686\\nSYR,CLT,746\\nSYR,CVG,831\\nSYR,DCA,313\\nSYR,DFW,178\\nSYR,DTW,1015\\nSYR,EWR,1002\\nSYR,FLL,328\\nSYR,IAD,622\\nSYR,JFK,1825\\nSYR,MCO,391\\nSYR,ORD,2342\\nSYR,PHL,333\\nTEX,PHX,194\\nTLH,ATL,2484\\nTLH,CLT,240\\nTLH,FLL,261\\nTLH,IAH,482\\nTLH,MCO,219\\nTLH,MEM,1094\\nTLH,MIA,831\\nTLH,TPA,301\\nTOL,ATL,120\\nTOL,CVG,21\\nTOL,ORD,1337\\nTPA,ABQ,366\\nTPA,ALB,391\\nTPA,ATL,7313\\nTPA,AUS,367\\nTPA,BDL,1266\\nTPA,BHM,1052\\nTPA,BNA,1695\\nTPA,BOS,1782\\nTPA,BUF,728\\nTPA,BWI,3402\\nTPA,CAK,359\\nTPA,CLE,874\\nTPA,CLT,2825\\nTPA,CMH,973\\nTPA,CVG,1101\\nTPA,DAY,204\\nTPA,DCA,1554\\nTPA,DEN,1692\\nTPA,DFW,2804\\nTPA,DTW,1452\\nTPA,EWR,2837\\nTPA,FLL,3051\\nTPA,FNT,200\\nTPA,GPT,366\\nTPA,HOU,1411\\nTPA,HPN,60\\nTPA,IAD,1906\\nTPA,IAH,1962\\nTPA,IND,1578\\nTPA,ISP,1093\\nTPA,JAX,1006\\nTPA,JFK,3395\\nTPA,LAS,1178\\nTPA,LAX,519\\nTPA,LGA,1465\\nTPA,MCI,699\\nTPA,MCO,1\\nTPA,MDW,2218\\nTPA,MEM,860\\nTPA,MHT,741\\nTPA,MIA,1829\\nTPA,MKE,178\\nTPA,MSP,1005\\nTPA,MSY,1088\\nTPA,ORD,2288\\nTPA,ORF,366\\nTPA,PBI,1353\\nTPA,PHF,95\\nTPA,PHL,3380\\nTPA,PHX,1022\\nTPA,PIT,1096\\nTPA,PNS,136\\nTPA,PVD,981\\nTPA,RDU,1067\\nTPA,ROC,366\\nTPA,SAT,365\\nTPA,SDF,488\\nTPA,SJU,366\\nTPA,SLC,329\\nTPA,STL,1099\\nTPA,SWF,235\\nTPA,TLH,301\\nTRI,ATL,1808\\nTRI,CLT,16\\nTRI,CVG,249\\nTRI,MEM,44\\nTUL,ABQ,229\\nTUL,ASE,1\\nTUL,ATL,1980\\nTUL,AUS,90\\nTUL,CVG,883\\nTUL,DAL,2284\\nTUL,DEN,1631\\nTUL,DFW,3260\\nTUL,DTW,726\\nTUL,EWR,344\\nTUL,GJT,2\\nTUL,HOU,1300\\nTUL,IAH,2319\\nTUL,LAS,391\\nTUL,LAX,73\\nTUL,MCI,806\\nTUL,MCO,9\\nTUL,MEM,1094\\nTUL,MSP,717\\nTUL,OKC,1\\nTUL,OMA,1\\nTUL,ONT,227\\nTUL,ORD,2038\\nTUL,PHX,1021\\nTUL,PIA,1\\nTUL,SAN,228\\nTUL,SAT,88\\nTUL,SLC,599\\nTUL,SMF,225\\nTUL,STL,890\\nTUL,XNA,1\\nTUP,ATL,10\\nTUS,ABQ,718\\nTUS,ATL,667\\nTUS,AUS,229\\nTUS,CLT,207\\nTUS,DEN,2029\\nTUS,DFW,2676\\nTUS,ELP,88\\nTUS,EWR,186\\nTUS,GEG,151\\nTUS,IAD,112\\nTUS,IAH,1669\\nTUS,JFK,132\\nTUS,LAS,2242\\nTUS,LAX,4190\\nTUS,MCI,230\\nTUS,MDW,723\\nTUS,MSP,439\\nTUS,OAK,306\\nTUS,OMA,221\\nTUS,ONT,477\\nTUS,ORD,865\\nTUS,PHX,3474\\nTUS,PSP,1\\nTUS,RNO,219\\nTUS,SAN,1412\\nTUS,SAT,239\\nTUS,SEA,444\\nTUS,SFO,365\\nTUS,SLC,1485\\nTUS,SMF,465\\nTVC,CVG,129\\nTVC,DEN,89\\nTVC,DTW,1210\\nTVC,LGA,50\\nTVC,MSN,1\\nTVC,MSP,347\\nTVC,ORD,2436\\nTWF,BOI,1\\nTWF,SLC,1810\\nTWF,SUN,2\\nTXK,DFW,1250\\nTYR,DFW,1585\\nTYS,ATL,2431\\nTYS,AUS,3\\nTYS,CLE,511\\nTYS,CVG,954\\nTYS,DEN,511\\nTYS,DFW,1506\\nTYS,DTW,1424\\nTYS,EWR,651\\nTYS,IAD,96\\nTYS,IAH,1344\\nTYS,LGA,603\\nTYS,MCI,1\\nTYS,MCO,125\\nTYS,MEM,1460\\nTYS,MSP,365\\nTYS,ORD,2019\\nVLD,ATL,938\\nVPS,ATL,3045\\nVPS,CVG,103\\nVPS,DFW,1968\\nVPS,IAH,421\\nVPS,LGA,2\\nVPS,MEM,1045\\nVPS,ORD,236\\nWRG,KTN,363\\nWRG,PSG,364\\nWYS,SLC,264\\nXNA,ATL,1768\\nXNA,BHM,1\\nXNA,CAK,1\\nXNA,COS,1\\nXNA,CVG,101\\nXNA,DCA,209\\nXNA,DEN,685\\nXNA,DFW,2781\\nXNA,DTW,361\\nXNA,EWR,545\\nXNA,FAR,1\\nXNA,IAH,1435\\nXNA,LAX,358\\nXNA,LEX,1\\nXNA,LGA,766\\nXNA,MEM,1044\\nXNA,MIA,154\\nXNA,MSP,676\\nXNA,ORD,3114\\nXNA,RDU,104\\nXNA,RFD,1\\nXNA,SGF,1\\nXNA,SLC,4\\nYAK,CDV,363\\nYAK,JNU,362\\nYKM,SLC,340\\nYUM,GJT,1\\nYUM,IPL,326\\nYUM,LAS,99\\nYUM,LAX,1044\\nYUM,PHX,1961\\nYUM,SLC,440\\n\""],"names":["dsv"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAf,MAAe,gBAAA;","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/suites/charts/dist/assets/flights-airports-9a9e6422.js b/suites/charts/dist/assets/flights-airports.js similarity index 99% rename from suites/charts/dist/assets/flights-airports-9a9e6422.js rename to suites/charts/dist/assets/flights-airports.js index 2f10eb414..63720b7c0 100644 --- a/suites/charts/dist/assets/flights-airports-9a9e6422.js +++ b/suites/charts/dist/assets/flights-airports.js @@ -3514,4 +3514,4 @@ export { csvParse as c, flightsString as f }; -//# sourceMappingURL=flights-airports-9a9e6422.js.map +//# sourceMappingURL=flights-airports.js.map diff --git a/suites/charts/dist/assets/flights-airports.js.map b/suites/charts/dist/assets/flights-airports.js.map new file mode 100644 index 000000000..021f469f0 --- /dev/null +++ b/suites/charts/dist/assets/flights-airports.js.map @@ -0,0 +1 @@ +{"version":3,"file":"flights-airports.js","sources":["../../node_modules/d3-dsv/src/dsv.js","../../node_modules/d3-dsv/src/csv.js","../../datasets/airports.csv?raw","../../datasets/flights-airports.csv?raw"],"sourcesContent":["var EOL = {},\n EOF = {},\n QUOTE = 34,\n NEWLINE = 10,\n RETURN = 13;\n\nfunction objectConverter(columns) {\n return new Function(\"d\", \"return {\" + columns.map(function(name, i) {\n return JSON.stringify(name) + \": d[\" + i + \"] || \\\"\\\"\";\n }).join(\",\") + \"}\");\n}\n\nfunction customConverter(columns, f) {\n var object = objectConverter(columns);\n return function(row, i) {\n return f(object(row), i, columns);\n };\n}\n\n// Compute unique columns in order of discovery.\nfunction inferColumns(rows) {\n var columnSet = Object.create(null),\n columns = [];\n\n rows.forEach(function(row) {\n for (var column in row) {\n if (!(column in columnSet)) {\n columns.push(columnSet[column] = column);\n }\n }\n });\n\n return columns;\n}\n\nfunction pad(value, width) {\n var s = value + \"\", length = s.length;\n return length < width ? new Array(width - length + 1).join(0) + s : s;\n}\n\nfunction formatYear(year) {\n return year < 0 ? \"-\" + pad(-year, 6)\n : year > 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows,\n formatRow: formatRow,\n formatValue: formatValue\n };\n}\n","import dsv from \"./dsv.js\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\nexport var csvFormatRow = csv.formatRow;\nexport var csvFormatValue = csv.formatValue;\n","export default \"iata,name,city,state,country,latitude,longitude\\n00M,Thigpen,Bay Springs,MS,USA,31.95376472,-89.23450472\\n00R,Livingston Municipal,Livingston,TX,USA,30.68586111,-95.01792778\\n00V,Meadow Lake,Colorado Springs,CO,USA,38.94574889,-104.5698933\\n01G,Perry-Warsaw,Perry,NY,USA,42.74134667,-78.05208056\\n01J,Hilliard Airpark,Hilliard,FL,USA,30.6880125,-81.90594389\\n01M,Tishomingo County,Belmont,MS,USA,34.49166667,-88.20111111\\n02A,Gragg-Wade,Clanton,AL,USA,32.85048667,-86.61145333\\n02C,Capitol,Brookfield,WI,USA,43.08751,-88.17786917\\n02G,Columbiana County,East Liverpool,OH,USA,40.67331278,-80.64140639\\n03D,Memphis Memorial,Memphis,MO,USA,40.44725889,-92.22696056\\n04M,Calhoun County,Pittsboro,MS,USA,33.93011222,-89.34285194\\n04Y,Hawley Municipal,Hawley,MN,USA,46.88384889,-96.35089861\\n05C,Griffith-Merrillville,Griffith,IN,USA,41.51961917,-87.40109333\\n05F,Gatesville - City/County,Gatesville,TX,USA,31.42127556,-97.79696778\\n05U,Eureka,Eureka,NV,USA,39.60416667,-116.0050597\\n06A,Moton Municipal,Tuskegee,AL,USA,32.46047167,-85.68003611\\n06C,Schaumburg,Chicago/Schaumburg,IL,USA,41.98934083,-88.10124278\\n06D,Rolla Municipal,Rolla,ND,USA,48.88434111,-99.62087694\\n06M,Eupora Municipal,Eupora,MS,USA,33.53456583,-89.31256917\\n06N,Randall,Middletown,NY,USA,41.43156583,-74.39191722\\n06U,Jackpot/Hayden,Jackpot,NV,USA,41.97602222,-114.6580911\\n07C,Dekalb County,Auburn,IN,USA,41.30716667,-85.06433333\\n07F,Gladewater Municipal,Gladewater,TX,USA,32.52883861,-94.97174556\\n07G,Fitch H Beach,Charlotte,MI,USA,42.57450861,-84.81143139\\n07K,Central City Municipal,Central City,NE,USA,41.11668056,-98.05033639\\n08A,Wetumpka Municipal,Wetumpka,AL,USA,32.52943944,-86.32822139\\n08D,Stanley Municipal,Stanley,ND,USA,48.30079861,-102.4063514\\n08K,Harvard State,Harvard,NE,USA,40.65138528,-98.07978667\\n08M,Carthage-Leake County,Carthage,MS,USA,32.76124611,-89.53007139\\n09A,Butler-Choctaw County,Butler,AL,USA,32.11931306,-88.1274625\\n09J,Jekyll Island,Jekyll Island,GA,USA,31.07447222,-81.42777778\\n09K,Sargent Municipal,Sargent,NE,USA,41.63695083,-99.34038139\\n09M,Charleston Municipal,Charleston,MS,USA,33.99150222,-90.078145\\n09W,South Capitol Street,Washington,DC,USA,38.86872333,-77.00747583\\n0A3,Smithville Municipal,Smithville,TN,USA,35.98531194,-85.80931806\\n0A8,Bibb County,Centreville,AL,USA,32.93679056,-87.08888306\\n0A9,Elizabethton Municipal,Elizabethton,TN,USA,36.37094306,-82.17374111\\n0AK,Pilot Station,Pilot Station,AK,USA,61.93396417,-162.8929358\\n0B1,Col. Dyke,Bethel,ME,USA,44.42506444,-70.80784778\\n0B4,Hartington Municipal,Hartington,NE,USA,42.60355556,-97.25263889\\n0B5,Turners Falls,Montague,MA,USA,42.59136361,-72.52275472\\n0B7,Warren-Sugar Bush,Warren,VT,USA,44.11672722,-72.82705806\\n0B8,Elizabeth,Fishers Island,NY,USA,41.25130806,-72.03161139\\n0C0,Dacy,Chicago/Harvard,IL,USA,42.40418556,-88.63343222\\n0C4,Pender Municipal,Pender,NE,USA,42.11388722,-96.72892556\\n0D1,South Haven Municipal,South Haven,MI,USA,42.35083333,-86.25613889\\n0D8,Gettysburg Municipal,Gettysburg,SD,USA,44.98730556,-99.9535\\n0E0,Moriarty,Moriarty,NM,USA,34.98560639,-106.0094661\\n0E8,Crownpoint,Crownpoint,NM,USA,35.71765889,-108.2015961\\n0F2,Bowie Municipal,Bowie,TX,USA,33.60166667,-97.77556\\n0F4,Loup City Municipal,Loup City,NE,USA,41.29028694,-98.99064278\\n0F7,Fountainhead Lodge Airpark,Eufaula,OK,USA,35.38898833,-95.60165111\\n0F8,William R Pogue Municipal,Sand Springs,OK,USA,36.17528,-96.15181028\\n0F9,Tishomingo Airpark,Tishomingo,OK,USA,34.19592833,-96.67555694\\n0G0,North Buffalo Suburban,Lockport,NY,USA,43.10318389,-78.70334583\\n0G3,Tecumseh Municipal,Tecumseh,NE,USA,40.39944417,-96.17139694\\n0G6,Williams County,Bryan,OH,USA,41.46736111,-84.50655556\\n0G7,Finger Lakes Regional,Seneca Falls,NY,USA,42.88062278,-76.78162028\\n0H1,Trego Wakeeney,Wakeeney,KS,USA,39.0044525,-99.89289917\\n0I8,Cynthiana-Harrison County,Cynthiana,KY,USA,38.36674167,-84.28410056\\n0J0,Abbeville Municipal,Abbeville,AL,USA,31.60016778,-85.23882222\\n0J4,Florala Municipal,Florala,AL,USA,31.04247361,-86.31156111\\n0J6,Headland Municipal,Headland,AL,USA,31.364895,-85.30965556\\n0K7,Humboldt Municipal,Humboldt,IA,USA,42.7360825,-94.24524167\\n0L5,Goldfield,Goldfield,NV,USA,37.71798833,-117.2384119\\n0L7,Jean,Jean,NV,USA,35.76827222,-115.3296378\\n0L9,Echo Bay,Overton,NV,USA,36.31108972,-114.4638672\\n0M0,Dumas Municipal,Dumas,AR,USA,33.8845475,-91.53429111\\n0M1,Scott,Parsons,TN,USA,35.63778,-88.127995\\n0M4,Benton County,Camden,TN,USA,36.01122694,-88.12328833\\n0M5,Humphreys County,Waverly,TN,USA,36.11659972,-87.73815889\\n0M6,Panola County,Batesville,MS,USA,34.36677444,-89.90008917\\n0M8,Byerley,Lake Providence,LA,USA,32.82587917,-91.187665\\n0O3,Calaveras Co-Maury Rasmussen,San Andreas,CA,USA,38.14611639,-120.6481733\\n0O4,Corning Municipal,Corning,CA,USA,39.94376806,-122.1713781\\n0O5,University,Davis,CA,USA,38.53146222,-121.7864906\\n0Q5,Shelter Cove,Shelter Cove,CA,USA,40.02764333,-124.0733639\\n0Q6,Shingletown,Shingletown,CA,USA,40.52210111,-121.8177683\\n0R0,Columbia-Marion County,Columbia,MS,USA,31.29700806,-89.81282944\\n0R1,Atmore Municipal,Atmore,AL,USA,31.01621528,-87.44675972\\n0R3,Abbeville Chris Crusta Memorial,Abbeville,LA,USA,29.97576083,-92.08415167\\n0R4,Concordia Parish,Vidalia,LA,USA,31.56683278,-91.50011889\\n0R5,David G Joyce,Winnfield,LA,USA,31.96366222,-92.66026056\\n0R7,Red River,Coushatta,LA,USA,31.99071694,-93.30739306\\n0S7,Dorothy Scott,Oroville,WA,USA,48.958965,-119.4119622\\n0S9,Jefferson County International,Port Townsend,WA,USA,48.04981361,-122.8012792\\n0V2,Harriet Alexander,Salida,CO,USA,38.53916389,-106.0458483\\n0V3,Pioneer Village,Minden,NE,USA,40.5149125,-98.94565083\\n0V4,Brookneal/Campbell County,Brookneal,VA,USA,37.14172222,-79.01638889\\n0V6,Mission Sioux,Mission,SD,USA,43.30694778,-100.6281936\\n0V7,Kayenta,Kayenta,AZ,USA,36.70972139,-110.2367978\\n10C,Galt,Chicago/Greenwood/Wonderlake,IL,USA,42.40266472,-88.37588917\\n10D,Winsted Municipal,Winsted,MN,USA,44.94996278,-94.0669175\\n10G,Holmes County,Millersburg,OH,USA,40.53716667,-81.95436111\\n10N,Wallkill,Wallkill,NY,USA,41.62787111,-74.13375583\\n10U,Owyhee,Owyhee,NV,USA,41.95323306,-116.1876014\\n11A,Clayton Municipal,Clayton,AL,USA,31.88329917,-85.48491361\\n11D,Clarion Cty,Clarion,PA,USA,41.22581222,-79.44098972\\n11IS,Schaumburg Heliport,Chicago/Schaumburg,IL,USA,42.04808278,-88.05257194\\n11J,Early County,Blakely,GA,USA,31.39698611,-84.89525694\\n11R,Brenham Municipal,Brenham,TX,USA,30.219,-96.37427778\\n12C,Rochelle Municipal,Rochelle,IL,USA,41.89300139,-89.07829\\n12D,Tower Municipal,Tower,MN,USA,47.81833333,-92.29166667\\n12J,Brewton Municipal,Brewton,AL,USA,31.05126306,-87.06796833\\n12K,Superior Municipal,Superior,NE,USA,40.04636111,-98.06011111\\n12Y,Le Sueur Municipal,Le Sueur,MN,USA,44.43746472,-93.91274083\\n13C,Lakeview,Lakeview,MI,USA,43.45213722,-85.26480333\\n13K,Eureka Municipal,Eureka,KS,USA,37.8515825,-96.29169806\\n13N,Trinca,Andover,NJ,USA,40.96676444,-74.78016556\\n14J,Carl Folsom,Elba,AL,USA,31.40988861,-86.08883583\\n14M,Hollandale Municipal,Hollandale,MS,USA,33.18262167,-90.83065444\\n14Y,Todd Field,Long Prairie,MN,USA,45.89857556,-94.87391\\n15F,Haskell Municipal,Haskell,TX,USA,33.19155556,-99.71793056\\n15J,Cook County,Adel,GA,USA,31.13780556,-83.45308333\\n15M,Luka,Luka,MS,USA,34.7723125,-88.16587444\\n15Z,McCarthy 2,McCarthy,AK,USA,61.43706083,-142.9037372\\n16A,Nunapitchuk,Nunapitchuk,AK,USA,60.90582833,-162.4391158\\n16G,Seneca County,Tiffin,OH,USA,41.09405556,-83.2125\\n16J,Dawson Municipal,Dawson,GA,USA,31.74328472,-84.419285\\n16S,Myrtle Creek Municipal,Myrtle Creek,OR,USA,42.99845056,-123.3095092\\n17G,Port Bucyrus-Crawford County,Bucyrus,OH,USA,40.78141667,-82.97469444\\n17J,Donalsonville Municipal,Donalsonville,GA,USA,31.00694444,-84.87761111\\n17K,Boise City,Boise City,OK,USA,36.77430028,-102.5104364\\n17M,Magee Municipal,Magee,MS,USA,31.86127139,-89.80285361\\n17N,Cross Keys,Cross Keys,NJ,USA,39.70547583,-75.03300306\\n17Z,Manokotak,Manokotak,AK,USA,58.98896583,-159.0499739\\n18A,Franklin County,Canon,GA,USA,34.34010472,-83.13348333\\n18I,McCreary County,Pine Knot,KY,USA,36.69591306,-84.39160389\\n19A,Jackson County,Jefferson,GA,USA,34.17402472,-83.56066528\\n19M,C A Moore,Lexington,MS,USA,33.12546111,-90.02555694\\n19N,Camden,Berlin,NJ,USA,39.77842056,-74.94780389\\n19P,Port Protection SPB,Port Protection,AK,USA,56.32880417,-133.6100844\\n1A3,Martin Campbell,Copperhill,TN,USA,35.01619111,-84.34631083\\n1A5,Macon County,Franklin,NC,USA,35.222595,-83.41904389\\n1A6,Middlesboro-Bell County,Middlesboro,KY,USA,36.6106375,-83.73741611\\n1A7,Jackson County,Gainesboro,TN,USA,36.39728139,-85.64164278\\n1A9,Autauga County,Prattville,AL,USA,32.438775,-86.51044778\\n1B0,Dexter Regional,Dexter,ME,USA,45.00839444,-69.23976722\\n1B1,Columbia Cty,Hudson,NY,USA,42.29130028,-73.71031944\\n1B3,Fair Haven,Fair Haven,VT,USA,43.61534389,-73.27455556\\n1B9,Mansfield Municipal,Mansfield,MA,USA,42.00013306,-71.19677139\\n1C5,Clow,Chicago/Plainfield,IL,USA,41.69597444,-88.12923056\\n1D1,Milbank Municipal,Milbank,SD,USA,45.23053806,-96.56596556\\n1D2,Canton -Plymouth - Mettetal,Plymouth,MI,USA,42.35003667,-83.45826833\\n1D3,Platte Municipal,Platte,SD,USA,43.40332833,-98.82952972\\n1D6,Hector Municipal,Hector,MN,USA,44.73107278,-94.71471333\\n1D7,Webster Municipal,Webster,SD,USA,45.29329111,-97.51369889\\n1D8,Redfield Municipal,Redfield,SD,USA,44.86247611,-98.52953972\\n1F0,Downtown Ardmore,Ardmore,OK,USA,34.14698917,-97.12265194\\n1F1,Lake Murray State Park,Overbrook,OK,USA,34.07509694,-97.10667917\\n1F4,Madill Municipal,Madill,OK,USA,34.14040194,-96.81203222\\n1F9,Bridgeport Municipal,Bridgeport,TX,USA,33.17533333,-97.82838889\\n1G0,Wood County,Bowling Green,OH,USA,41.391,-83.63013889\\n1G3,Kent State University,Kent,OH,USA,41.15186167,-81.41658306\\n1G4,Grand Canyon West,Peach Springs,AZ,USA,35.99221,-113.8166164\\n1G5,Freedom,Medina,OH,USA,41.13144444,-81.76491667\\n1G6,Michael,Cicero,NY,USA,43.18166667,-76.12777778\\n1H0,Creve Coeur,St Louis,MO,USA,38.72752,-90.50830417\\n1H2,Effingham County Memorial,Effingham,IL,USA,39.07045083,-88.53351972\\n1H3,Linn State Tech. College,Linn,MO,USA,38.47149444,-91.81531667\\n1H8,Casey Municipal,Casey,IL,USA,39.30250917,-88.00406194\\n1I5,Freehold,Freehold,NY,USA,42.36425,-74.06596806\\n1I9,Delphi Municipal,Delphi,IN,USA,40.54281417,-86.68167194\\n1J0,Tri-County,Bonifay,FL,USA,30.84577778,-85.60138889\\n1K2,Lindsay Municipal,Lindsay,OK,USA,34.85007333,-97.58642028\\n1K4,David J. Perry,Goldsby,OK,USA,35.1550675,-97.47039389\\n1K5,Waynoka Municipal,Waynoka,OK,USA,36.56670028,-98.85231333\\n1K9,Satanta Municipal,Satanta,KS,USA,37.45419111,-100.9921119\\n1L0,St. John the Baptist Parish,Reserve,LA,USA,30.08720833,-90.58266528\\n1L1,Lincoln Co,Panaca,NV,USA,37.78746444,-114.4216567\\n1L7,Escalante Municipal,Escalante,UT,USA,37.74532639,-111.5701653\\n1L9,Parowan,Parowan,UT,USA,37.85969694,-112.816055\\n1M1,North Little Rock Municipal,No Lit Rock,AR,USA,34.83398056,-92.25792778\\n1M2,Belzoni Municipal,Belzoni,MS,USA,33.14518056,-90.51528472\\n1M4,Posey,Haleyville,AL,USA,34.28034806,-87.60044139\\n1M5,Portland Municipal,Portland,TN,USA,36.59287528,-86.47691028\\n1M7,Fulton,Fulton,KY,USA,36.52589417,-88.91561611\\n1MO,Mountain Grove Memorial,Mountain Grove,MO,USA,37.12071889,-92.311245\\n1N2,Spadaro,East Moriches,NY,USA,40.82787639,-72.74871083\\n1N4,Woodbine Muni,Woodbine,NJ,USA,39.21915,-74.794765\\n1N7,Blairstown,Blairstown,NJ,USA,40.97114556,-74.99747556\\n1N9,Allentown Queen City Muni,Allentown,PA,USA,40.57027778,-75.48830556\\n1ND3,Hamry,Kindred,ND,USA,46.6485775,-97.00564306\\n1O1,Grandfield Municipal,Grandfield,OK,USA,34.23758944,-98.74200917\\n1O2,Lampson,Lakeport,CA,USA,38.99017472,-122.8997175\\n1O3,Lodi,Lodi,CA,USA,38.20241667,-121.2684167\\n1O4,Thomas Municipal,Thomas,OK,USA,35.73338222,-98.73063833\\n1O6,Dunsmuir Municipal-Mott,Dunsmuir,CA,USA,41.26320889,-122.2719528\\n1R1,Jena,Jena,LA,USA,31.671005,-92.15846722\\n1R7,Brookhaven-Lincoln County,Brookhaven,MS,USA,31.6058475,-90.40931583\\n1R8,Bay Minette Municipal,Bay Minette,AL,USA,30.87046278,-87.81738167\\n1S0,Pierce County,Puyallup,WA,USA,47.10391667,-122.2871944\\n1S3,Tillitt,Forsyth,MT,USA,46.27110639,-106.6239206\\n1S5,Sunnyside Municipal,Sunnyside,WA,USA,46.32763139,-119.9705964\\n1S6,Priest River Muni,Priest River,ID,USA,48.19018611,-116.9093644\\n1U7,Bear Lake County,Paris,ID,USA,42.24714972,-111.33826\\n1V0,Navajo State Park,Navajo Dam,NM,USA,36.80833833,-107.6514444\\n1V2,Grant County,Hyannis,NE,USA,42.00942944,-101.7693439\\n1V5,Boulder Muni,Boulder,CO,USA,40.03942972,-105.2258217\\n1V6,Fremont County,Canon City,CO,USA,38.42838111,-105.1054994\\n1V9,Blake,Delta,CO,USA,38.78539722,-108.0636611\\n20A,Robbins,Oneonta,AL,USA,33.97231972,-86.37942722\\n20M,Macon Municipal,Macon,MS,USA,33.13345889,-88.53559806\\n20N,Kingston-Ulster,Kingston,NY,USA,41.9852525,-73.96409722\\n20U,Beach,Beach,ND,USA,46.92362444,-103.9785389\\n20V,McElroy Airfield,Kremmling,CO,USA,40.05367972,-106.3689467\\n21D,Lake Elmo,St Paul,MN,USA,44.99748861,-92.85568111\\n21F,Jacksboro Municipal,Jacksboro,TX,USA,33.228725,-98.14671083\\n22B,Mountain Meadow Airstrip,Burlington,CT,USA,41.77287528,-73.01121667\\n22I,Vinton County,McArthur,OH,USA,39.328125,-82.44182167\\n22M,Pontotoc County,Pontotoc,MS,USA,34.27593833,-89.03839694\\n22N,Carbon Cty-Jake Arner Memorial,Lehighton,PA,USA,40.80950889,-75.76149639\\n23J,Herlong,Jacksonville,FL,USA,30.27778889,-81.80594722\\n23M,Clarke County,Quitman,MS,USA,32.08487111,-88.73893389\\n23N,Bayport Aerodrome,Bayport,NY,USA,40.75843139,-73.05372083\\n23R,Devine Municipal,Devine,TX,USA,29.1384075,-98.94189028\\n24A,Jackson County,Sylva,NC,USA,35.3168625,-83.20936806\\n24J,Suwannee County,Live Oak,FL,USA,30.30105583,-83.02318778\\n24N,Jicarilla Apache Nation,Dulce,NM,USA,36.828535,-106.8841914\\n25J,Cuthbert-Randolph,Cuthbert,GA,USA,31.70016583,-84.82492194\\n25M,Ripley,Ripley,MS,USA,34.72226778,-89.01504944\\n25R,International,Edinburg,TX,USA,26.44201083,-98.12945306\\n26A,Ashland/Lineville,Ashland/Lineville,AL,USA,33.28761417,-85.80412861\\n26N,Ocean City Muni cipal,Ocean City,NJ,USA,39.26347222,-74.60747222\\n26R,Jackson County,Edna/Ganado,TX,USA,29.00101,-96.58194667\\n26U,McDermitt State,McDermitt,OR,USA,42.00211083,-117.7231972\\n27A,Elbert County-Patz,Elberton,GA,USA,34.09519722,-82.81586417\\n27D,Myers,Canby,MN,USA,44.72801889,-96.26309972\\n27J,Newberry Municipal,Newberry,SC,USA,34.30927778,-81.63972222\\n27K,Georgetown-Scott County,Georgetown,KY,USA,38.23442528,-84.43468667\\n28J,Kay Larkin,Palatka,FL,USA,29.65863889,-81.68855556\\n29D,Grove City,Grove City,PA,USA,41.14597611,-80.16592194\\n29G,Portage County,Ravenna,OH,USA,41.210195,-81.25163083\\n29S,Gardiner,Gardiner,MT,USA,45.04993556,-110.7466008\\n2A0,Mark Anton,Dayton,TN,USA,35.48624611,-84.93109722\\n2A1,Jamestown Municipal,Jamestown,TN,USA,36.34970833,-84.94664472\\n2A3,Larsen Bay,Larsen Bay,AK,USA,57.53510667,-153.9784169\\n2A9,Kotlik,Kotlik,AK,USA,63.03116111,-163.5299278\\n2AK,Lime Village,Lime Village,AK,USA,61.35848528,-155.4403508\\n2B3,Parlin,Newport,NH,USA,43.38812944,-72.18925417\\n2B7,Pittsfield Municipal,Pittsfield,ME,USA,44.76852778,-69.37441667\\n2B9,Post Mills,Post Mills,VT,USA,43.884235,-72.25370333\\n2D1,Barber,Alliance,OH,USA,40.97089139,-81.09981889\\n2D5,Oakes Municipal,Oakes,ND,USA,46.17301972,-98.07987556\\n2F5,Lamesa Municipal,Lamesa,TX,USA,32.75627778,-101.9194722\\n2F6,Skiatook Municipal,Skiatook,OK,USA,36.357035,-96.01138556\\n2F7,Commerce Municipal,Commerce,TX,USA,33.29288889,-95.89641806\\n2F8,Morehouse Memorial,Bastrop,LA,USA,32.75607944,-91.88057194\\n2G2,Jefferson County Airpark,Steubenville,OH,USA,40.35944306,-80.70007806\\n2G3,Connellsville,Connellsville,PA,USA,39.95893667,-79.65713306\\n2G4,Garrett County,Oakland,MD,USA,39.58027778,-79.33941667\\n2G9,Somerset County,Somerset,PA,USA,40.03911111,-79.01455556\\n2H0,Shelby County,Shelbyville,IL,USA,39.41042861,-88.8454325\\n2H2,Aurora Memorial Municipal,Aurora,MO,USA,36.96230778,-93.69531111\\n2I0,Madisonville Municipal,Madisonville,KY,USA,37.35502778,-87.39963889\\n2I5,Chanute,Rantoul,IL,USA,40.29355556,-88.14236111\\n2IS,Airglades,Clewiston,FL,USA,26.74200972,-81.04978917\\n2J2,Liberty County,Hinesville,GA,USA,31.78461111,-81.64116667\\n2J3,Louisville Municipal,Louisville,GA,USA,32.98654083,-82.38568139\\n2J5,Millen,Millen,GA,USA,32.89376972,-81.96511583\\n2J9,Quincy Municipal,Quincy,FL,USA,30.59786111,-84.55741667\\n2K3,Stanton County Municipal,Johnson,KS,USA,37.58271111,-101.73281\\n2K4,Scott,Mangum,OK,USA,34.89172583,-99.52675667\\n2K5,Telida,Telida,AK,USA,63.39387278,-153.2689733\\n2M0,Princeton-Caldwell County,Princeton,KY,USA,37.11560444,-87.85556944\\n2M2,Lawrenceburg Municipal,Lawrenceburg,TN,USA,35.2343025,-87.25793222\\n2M3,Sallisaw Municipal,Sallisaw,OK,USA,35.43816667,-94.80277778\\n2M4,G. V. Montgomery,Forest,MS,USA,32.35347778,-89.48867944\\n2M8,Charles W. Baker,Millington,TN,USA,35.27897583,-89.93147611\\n2O1,Gansner,Quincy,CA,USA,39.94378056,-120.9468983\\n2O3,Angwin-Parrett,Angwin,CA,USA,38.57851778,-122.4352572\\n2O6,Chowchilla,Chowchilla,CA,USA,37.11244417,-120.2468406\\n2O7,Independence,Independence,CA,USA,36.81382111,-118.2050956\\n2O8,Hinton Municipal,Hinton,OK,USA,35.50592472,-98.34236111\\n2P2,Washington Island,Washington Island,WI,USA,45.38620833,-86.92448056\\n2Q3,Yolo Co-Davis/Woodland/Winters,Davis/Woodland/Winters,CA,USA,38.5790725,-121.8566322\\n2R0,Waynesboro Municipal,Waynesboro,MS,USA,31.64599472,-88.63475667\\n2R4,Peter Prince,Milton,FL,USA,30.63762083,-86.99365278\\n2R5,St Elmo,St Elmo,AL,USA,30.50190833,-88.27511667\\n2R9,Karnes County,Kenedy,TX,USA,28.8250075,-97.86558333\\n2S1,Vashon Municipal,Vashon,WA,USA,47.45815333,-122.4773506\\n2S6,Sportsman Airpark,Newberg,OR,USA,45.29567333,-122.9553783\\n2S7,Chiloquin State,Chiloquin,OR,USA,42.58319167,-121.8761261\\n2S8,Wilbur,Wilbur,WA,USA,47.75320639,-118.7438936\\n2T1,Muleshoe Municipal,Muleshoe,TX,USA,34.18513639,-102.6410981\\n2V1,Stevens,Pagosa Springs,CO,USA,37.277505,-107.0558742\\n2V2,Vance Brand,Longmont,CO,USA,40.16367139,-105.1630369\\n2V5,Wray Municipal,Wray,CO,USA,40.10032333,-102.24096\\n2V6,Yuma Municipal,Yuma,CO,USA,40.10415306,-102.7129869\\n2W5,Maryland,Indian Head,MD,USA,38.60053667,-77.07296917\\n2W6,Captain Walter Francis Duke Regional,Leonardtown,MD,USA,38.31536111,-76.55011111\\n2Y3,Yakutat SPB,Yakutat,AK,USA,59.5624775,-139.7410994\\n2Y4,Rockwell City Municipal,Rockwell City,IA,USA,42.38748056,-94.61803333\\n31F,Gaines County,Seminole,TX,USA,32.67535389,-102.652685\\n32M,Norfolk,Norfolk,MA,USA,42.12787528,-71.37033556\\n32S,Stevensville,Stevensville,MT,USA,46.52511111,-114.0528056\\n33J,Geneva Municipal,Geneva,AL,USA,31.05527778,-85.88033333\\n33M,Water Valley,Water Valley,MS,USA,34.16677639,-89.68619722\\n33N,Delaware Airpark,Dover,DE,USA,39.21837556,-75.59642667\\n33S,Pru,Ritzville,WA,USA,47.12487194,-118.3927539\\n34A,Laurens County,Laurens,SC,USA,34.50705556,-81.94719444\\n35A,\\\"Union County, Troy Shelton\\\",Union,SC,USA,34.68680111,-81.64121167\\n35D,Padgham,Allegan,MI,USA,42.53098278,-85.82513556\\n35S,Wasco State,Wasco,OR,USA,45.58944444,-120.6741667\\n36K,Lakin,Lakin,KS,USA,37.96946389,-101.2554472\\n36S,Happy Camp,Happy Camp,CA,USA,41.79067944,-123.3889444\\n36U,Heber City Municipal/Russ McDonald,Heber,UT,USA,40.48180556,-111.4288056\\n37T,Calico Rock-Izard County,Calico Rock,AR,USA,36.16565278,-92.14523611\\n37W,Harnett County,Erwin,NC,USA,35.37880028,-78.73362917\\n38A,Shaktoolik,Shaktoolik,AK,USA,64.36263194,-161.2025369\\n38S,Deer Lodge-City-County,Deer Lodge,MT,USA,46.38881583,-112.7669842\\n38U,Wayne Wonderland,Loa,UT,USA,38.36247972,-111.5960164\\n39N,Princeton,Princeton,NJ,USA,40.39834833,-74.65760361\\n3A0,Grove Hill Municipal,Grove Hill,AL,USA,31.68932389,-87.7613875\\n3A1,Folsom,Cullman,AL,USA,34.26870833,-86.85833611\\n3A2,New Tazewell Municipal,Tazewell,TN,USA,36.41008417,-83.55546167\\n3A3,Anson County,Wadesboro,NC,USA,35.02397611,-80.08127333\\n3AU,Augusta Municipal,Augusta,KS,USA,37.67162778,-97.07787222\\n3B0,Southbridge Municipal,Southbridge,MA,USA,42.10092806,-72.03840833\\n3B1,Greenville Municipal,Greenville,ME,USA,45.46302778,-69.55161111\\n3B2,Marshfield,Marshfield,MA,USA,42.09824111,-70.67212083\\n3B9,Chester,Chester,CT,USA,41.38390472,-72.50589444\\n3BS,Jack Barstow,Midland,MI,USA,43.66291528,-84.261325\\n3CK,Lake In The Hills,Lake In The Hills,IL,USA,42.20680306,-88.32304028\\n3CM,James Clements Municipal,Bay City,MI,USA,43.54691667,-83.89550222\\n3CU,Cable Union,Cable,WI,USA,46.19424889,-91.24640972\\n3D2,Ephraim/Gibraltar,Ephraim,WI,USA,45.13535778,-87.18586556\\n3D4,Frankfort Dow Memorial,Frankfort,MI,USA,44.62506389,-86.20061944\\n3F3,De Soto Parish,Mansfield,LA,USA,32.07345972,-93.76551889\\n3F4,Vivian,Vivian,LA,USA,32.86133333,-94.01015361\\n3F7,Jones Memorial,Bristow,OK,USA,35.80685278,-96.42185556\\n3FM,Fremont Municipal,Fremont,MI,USA,43.43890528,-85.99478\\n3FU,Faulkton Municipal,Faulkton,SD,USA,45.03191861,-99.11566417\\n3G3,Wadsworth Municipal,Wadsworth,OH,USA,41.00158222,-81.75513111\\n3G4,Ashland County,Ashland,OH,USA,40.90297222,-82.25563889\\n3G7,Williamson/Sodus,Williamson,NY,USA,43.23472222,-77.12097222\\n3GM,Grand Haven Memorial Airpark,Grand Haven,MI,USA,43.03404639,-86.1981625\\n3I2,Mason County,Point Pleasant,WV,USA,38.91463889,-82.09858333\\n3I7,Phillipsburg,Phillipsburg,OH,USA,39.91344194,-84.40030889\\n3J1,Ridgeland,Ridgeland,SC,USA,32.49268694,-80.99233028\\n3J7,Greene County Airpark,Greensboro,GA,USA,33.59766667,-83.139\\n3JC,Freeman,Junction City,KS,USA,39.04327556,-96.84328694\\n3K3,Syracuse-Hamilton County Municipal,Syracuse,KS,USA,37.99167972,-101.7462822\\n3K6,St Louis-Metro East,Troy/Marine/St. Louis,IL,USA,38.73290861,-89.80656722\\n3K7,Mark Hoard Memorial,Leoti,KS,USA,38.45696333,-101.3532161\\n3LC,Logan County,Lincoln,IL,USA,40.15847222,-89.33497222\\n3LF,Litchfield Municipal,Litchfield,IL,USA,39.16635306,-89.67489694\\n3M7,Lafayette Municipal,Lafayette,TN,USA,36.518375,-86.05828083\\n3M8,North Pickens,Reform,AL,USA,33.38900611,-88.00557806\\n3M9,Warren Municipal,Warren,AR,USA,33.56044333,-92.08538861\\n3MY,Mt. Hawley Auxiliary,Peoria,IL,USA,40.79525917,-89.6134025\\n3N6,Old Bridge,Old Bridge,NJ,USA,40.32988667,-74.34678694\\n3N8,Mahnomen County,Mahnomen,MN,USA,47.25996056,-95.92809778\\n3ND0,Northwood Municipal,Northwood,ND,USA,47.72423333,-97.59042222\\n3O1,Gustine,Gustine,CA,USA,37.26271722,-120.9632586\\n3O3,Municipal,Purcell,OK,USA,34.97979444,-97.38586167\\n3O4,Sayre Municipal,Sayre,OK,USA,35.16755222,-99.65787361\\n3O5,Walters Municipal,Walters,OK,USA,34.37258444,-98.40588583\\n3O7,Hollister Municipal,Hollister,CA,USA,36.89334528,-121.4102706\\n3O9,Grand Lake Regional,Afton,OK,USA,36.5775775,-94.86190028\\n3R0,Beeville Municipal,Beeville,TX,USA,28.36455528,-97.79208194\\n3R1,Bay City Municipal,Bay City,TX,USA,28.973255,-95.86345528\\n3R2,Le Gros Memorial,Crowley,LA,USA,30.16173611,-92.48396111\\n3R4,Hart,Many,LA,USA,31.54489667,-93.48645306\\n3R7,Jennings,Jennings,LA,USA,30.24269333,-92.67344778\\n3S4,Illinois Valley,Illinois Valley (Cave Junction),OR,USA,42.10372417,-123.6822911\\n3S8,Grants Pass,Grants Pass,OR,USA,42.51011722,-123.3879894\\n3S9,Condon State-Pauling,Condon,OR,USA,45.24651889,-120.1664233\\n3SG,Harry W Browne,Saginaw - H.Browne,MI,USA,43.43341028,-83.86245833\\n3SQ,St Charles,St Charles,MO,USA,38.84866139,-90.50011833\\n3T3,Boyceville Municipal,Boyceville,WI,USA,45.042185,-92.0293475\\n3T5,Fayette Regional Air Center,La Grange,TX,USA,29.90930556,-96.9505\\n3TR,Jerry Tyler Memorial,Niles,MI,USA,41.83590806,-86.22517611\\n3U3,Bowman,Anaconda,MT,USA,46.15313278,-112.86784\\n3U7,Benchmark,Benchmark,MT,USA,47.48133194,-112.8697678\\n3U8,Big Sandy,Big Sandy,MT,USA,48.16247972,-110.1132631\\n3V4,Fort Morgan Municipal,Fort Morgan,CO,USA,40.33423194,-103.8039508\\n3WO,Shawano Municipal,Shawano,WI,USA,44.78777778,-88.56152444\\n3Y2,George L Scott Municipal,West Union,IA,USA,42.98508917,-91.79060417\\n3Y3,Winterset Madison County,Winterset,IA,USA,41.36276778,-94.02106194\\n3Z9,Haines SPB,Haines,AK,USA,59.23495111,-135.4407181\\n40J,Perry-Foley,Perry,FL,USA,30.06927778,-83.58058333\\n40N,Chester Cty-G O Carlson,Coatesville,PA,USA,39.97897222,-75.86547222\\n40U,Manila,Manila,UT,USA,40.98607,-109.6784811\\n41U,Manti-Ephraim,Manti,UT,USA,39.32912833,-111.6146397\\n42A,Melbourne Municipal,Melbourne,AR,USA,36.07079222,-91.82914667\\n42C,White Cloud,White Cloud,MI,USA,43.55974139,-85.77421944\\n42J,Keystone Airpark,Keystone Heights,FL,USA,29.84475,-82.04752778\\n42S,Poplar,Poplar,MT,USA,48.11595861,-105.1821928\\n43A,Montgomery County,Star,NC,USA,35.38819528,-79.79281667\\n44B,Dover/Foxcroft,Dover-Foxcroft,ME,USA,45.18338806,-69.2328225\\n44N,Sky Acres,Millbrook,NY,USA,41.70742861,-73.73802889\\n45J,Rockingham-Hamlet,Rockingham,NC,USA,34.89107083,-79.75905806\\n45OH,North Bass Island,North Bass Island,OH,USA,41.71932528,-82.82196917\\n45R,Kountz - Hawthorne,Kountze/Silsbee,TX,USA,30.33633806,-94.25754361\\n46A,Blairsville,Blairsville,GA,USA,34.85508722,-83.996855\\n46D,Carrington Municipal,Carrington,ND,USA,47.45111111,-99.15111111\\n46N,Sky Park,Red Hook,NY,USA,41.98458333,-73.83596556\\n47A,Cherokee County,Canton,GA,USA,34.31058333,-84.42391667\\n47J,Cheraw Municipal,Cheraw,SC,USA,34.71258333,-79.95794444\\n47N,Central Jersey Regional,Manville,NJ,USA,40.52438417,-74.59839194\\n47V,Curtis Municipal,Curtis,NE,USA,40.63750778,-100.4712539\\n48A,Cochran,Cochran,GA,USA,32.39936111,-83.27591667\\n48D,Clare Municipal,Clare,MI,USA,43.83111111,-84.74133333\\n48I,Braxton County,Sutton,WV,USA,38.68704444,-80.65176083\\n48K,Ness City Municipal,Ness City,KS,USA,38.47110278,-99.90806667\\n48S,Harlem,Harlem,MT,USA,48.56666472,-108.7729339\\n48V,Tri-County,Erie,CO,USA,40.010225,-105.047975\\n49A,Gilmer County,Ellijay,GA,USA,34.62786417,-84.52492889\\n49T,Downtown Heliport,Dallas,TX,USA,32.77333333,-96.80027778\\n49X,Chemehuevi Valley,Chemehuevi Valley,CA,USA,34.52751083,-114.4310697\\n49Y,Fillmore County,Preston,MN,USA,43.67676,-92.17973444\\n4A2,Atmautluak,Atmautluak,AK,USA,60.86674556,-162.2731389\\n4A4,Cornelius-Moore,Cedartown,GA,USA,34.01869444,-85.14647222\\n4A5,Marshall-Searcy County,Marshall,AR,USA,35.89893667,-92.65588611\\n4A6,Scottsboro Municipal,Scottsboro,AL,USA,34.68897278,-86.0058125\\n4A7,Clayton County,Hampton,GA,USA,33.38911111,-84.33236111\\n4A9,Isbell,Fort Payne,AL,USA,34.4728925,-85.72221722\\n4B0,South Albany,South Bethlehem,NY,USA,42.56072611,-73.83395639\\n4B1,Duanesburg,Duanesburg,NY,USA,42.75840889,-74.13290472\\n4B6,Ticonderoga Muni,Ticonderoga,NY,USA,43.87700278,-73.41317639\\n4B7,Schroon Lake,Schroon Lake,NY,USA,43.86256083,-73.74262972\\n4B8,Robertson,Plainville,CT,USA,41.69037667,-72.8648225\\n4B9,Simsbury Tri-Town,Simsbury,CT,USA,41.91676389,-72.77731778\\n4C8,Albia Municipal,Albia,IA,USA,40.99445361,-92.76297194\\n4D0,Abrams Municipal,Grandledge,MI,USA,42.77420167,-84.73309806\\n4D9,Alma Municipal,Alma,NE,USA,40.11389972,-99.34565306\\n4F2,Panola County-Sharpe,Carthage,TX,USA,32.17608333,-94.29880556\\n4F4,Gilmer-Upshur County,Gilmer,TX,USA,32.699,-94.94886111\\n4G1,Greenville Muni,Greenville,PA,USA,41.44683167,-80.39126167\\n4G2,Hamburg Inc.,Hamburg,NY,USA,42.7008925,-78.91475694\\n4G5,Monroe County,Woodsfield,OH,USA,39.77904472,-81.10277222\\n4G6,Hornell Muni,Hornell,NY,USA,42.38214444,-77.6821125\\n4G7,Fairmont Muni,Fairmont,WV,USA,39.44816667,-80.16702778\\n4I0,Mingo County,Williamson,WV,USA,37.68760139,-82.26097306\\n4I3,Knox County,Mount Vernon,OH,USA,40.32872222,-82.52377778\\n4I7,Putnam County,Greencastle,IN,USA,39.63359556,-86.8138325\\n4I9,Morrow County,Mt. Gilead,OH,USA,40.52452778,-82.85005556\\n4J1,Brantley County,Nahunta,GA,USA,31.21272417,-81.90539083\\n4J2,Berrien County,Nashville,GA,USA,31.21255556,-83.22627778\\n4J5,Quitman-Brooks County,Quitman,GA,USA,30.80575139,-83.58654889\\n4J6,St Marys,St Marys,GA,USA,30.75468028,-81.55731917\\n4K0,Pedro Bay,Pedro Bay,AK,USA,59.78960972,-154.1238331\\n4K5,Ouzinkie,Ouzinkie,AK,USA,57.92287611,-152.5005111\\n4K6,Bloomfield Municipal,Bloomfield,IA,USA,40.73210556,-92.42826889\\n4KA,Tununak,Tununak,AK,USA,60.57559667,-165.2731272\\n4M1,Carroll County,Berryville,AR,USA,36.38340333,-93.61685667\\n4M3,Carlisle Municipal,Carlisle,AR,USA,34.80823,-91.71205083\\n4M4,Clinton Municipal,Clinton,AR,USA,35.59785528,-92.45182472\\n4M7,Russellville-Logan County,Russellville,KY,USA,36.79991667,-86.81016667\\n4M8,Clarendon Municipal,Clarendon,AR,USA,34.64870694,-91.39457111\\n4M9,Corning Municipal,Corning,AR,USA,36.40423139,-90.64792639\\n4N1,Greenwood Lake,West Milford,NJ,USA,41.12854806,-74.34584611\\n4O3,Blackwell-Tonkawa Municipal,Blackwell-Tonkawa,OK,USA,36.74511583,-97.34959972\\n4O4,McCurtain County Regional,Idabel,OK,USA,33.909325,-94.85835278\\n4O5,Cherokee Municipal,Cherokee,OK,USA,36.78336306,-98.35035083\\n4PH,Polacca,Polacca,AZ,USA,35.79167222,-110.4234653\\n4R1,I H Bass Jr Memorial,Lumberton,MS,USA,31.01546028,-89.48256556\\n4R3,Jackson Municipal,Jackson,AL,USA,31.47210861,-87.89472083\\n4R4,Fairhope Municipal,Fairhope,AL,USA,30.4621125,-87.87801972\\n4R5,Madeline Island,La Pointe,WI,USA,46.78865556,-90.75866944\\n4R7,Eunice,Eunice,LA,USA,30.46628389,-92.42379917\\n4R9,Dauphin Island,Dauphin Island,AL,USA,30.26048083,-88.12749972\\n4S1,Gold Beach Muni,Gold Beach,OR,USA,42.41344444,-124.4242742\\n4S2,Hood River,Hood River,OR,USA,45.67261833,-121.5364625\\n4S3,Joseph State,Joseph,OR,USA,45.35709583,-117.2532244\\n4S9,Portland-Mulino,Mulino (Portland),OR,USA,45.21632417,-122.5900839\\n4SD,Reno/Stead,Reno,NV,USA,39.66738111,-119.8754169\\n4T6,Mid-Way,Midlothian-Waxahachie,TX,USA,32.45609722,-96.91240972\\n4U3,Liberty County,Chester,MT,USA,48.51072222,-110.9908639\\n4U6,Circle Town County,Circle,MT,USA,47.41861972,-105.5619431\\n4V0,Rangely,Rangely,CO,USA,40.09469917,-108.7612172\\n4V1,Johnson,Walsenburg,CO,USA,37.69640056,-104.7838747\\n4V9,Antelope County,Neligh,NE,USA,42.11222889,-98.0386775\\n4W1,Elizabethtown Municipal,Elizabethtown,NC,USA,34.60183722,-78.57973306\\n4Z4,Holy Cross,Holy Cross,AK,USA,62.18829583,-159.7749503\\n4Z7,Hyder SPB,Hyder,AK,USA,55.90331972,-130.0067031\\n50I,Kentland Municipal,Kentland,IN,USA,40.75873222,-87.42821917\\n50J,Berkeley County,Moncks Corner,SC,USA,33.18605556,-80.03563889\\n50K,Pawnee City Municipal,Pawnee City,NE,USA,40.11611111,-96.19445278\\n50R,Lockhart Municipal,Lockhart,TX,USA,29.85033333,-97.67241667\\n51D,Edgeley Municipal,Edgeley,ND,USA,46.34858333,-98.73555556\\n51Z,Minto (New),Minto,AK,USA,65.14370889,-149.3699647\\n52A,Madison Municipal,Madison,GA,USA,33.61212528,-83.46044333\\n52E,Timberon,Timberon,NM,USA,32.63388889,-105.6863889\\n52J,Lee County,Bishopville,SC,USA,34.24459889,-80.23729333\\n53A,\\\"Dr. C.P. Savage, Sr.\\\",Montezuma,GA,USA,32.302,-84.00747222\\n53K,Osage City Municipal,Osage City,KS,USA,38.63334222,-95.80859806\\n54J,Defuniak Springs,Defuniak Springs,FL,USA,30.7313,-86.15160833\\n55D,Grayling Army Airfield,Grayling,MI,USA,44.68032028,-84.72886278\\n55J,Fernandina Beach Municipal,Fernandina Beach,FL,USA,30.61170083,-81.462345\\n55S,Packwood,Packwood,WA,USA,46.60400083,-121.6778664\\n56D,Wyandot County,Upper Sandusky,OH,USA,40.88336139,-83.3145325\\n56M,Warsaw Municipal,Warsaw,MO,USA,38.34688889,-93.345425\\n56S,Seaside Municipal,Seaside,OR,USA,46.01649694,-123.9054167\\n57B,Islesboro,Islesboro,ME,USA,44.30285556,-68.91058722\\n57C,East Troy Municipal,East Troy,WI,USA,42.79711111,-88.3725\\n59B,Newton,Jackman,ME,USA,45.63199111,-70.24728944\\n5A4,Okolona Mun.-Richard M. Stovall,Okolona,MS,USA,34.01580528,-88.72618944\\n5A6,Winona-Montgomery County,Winona,MS,USA,33.46540139,-89.72924806\\n5A8,Aleknagik,Aleknagik,AK,USA,59.28256167,-158.6176725\\n5A9,Roosevelt Memorial,Warm Springs,GA,USA,32.93346222,-84.68881639\\n5B2,Saratoga Cty,Saratoga Springs,NY,USA,43.05126111,-73.86119444\\n5B3,Danielson,Danielson,CT,USA,41.81974056,-71.90096306\\n5B7,Rensselaer Air Park,Troy,NY,USA,42.69091194,-73.57956\\n5CD,Chandalar Shelf,Chandalar Camp,AK,USA,68.06543944,-149.5797392\\n5D3,Owosso Community,Owosso,MI,USA,42.99297222,-84.1389125\\n5F1,Post-Garza County Municipal,Post,TX,USA,33.20370556,-101.340415\\n5F4,Homer Municipal,Homer,LA,USA,32.78850806,-93.00366083\\n5G0,Leroy,Le Roy,NY,USA,42.98136667,-77.93751389\\n5G7,Bluffton,Bluffton,OH,USA,40.88544444,-83.86863889\\n5G8,Pittsburgh Boquet Airpark,Jeanette,PA,USA,40.37645722,-79.60837583\\n5G9,Toledo Suburban,Lambertville,MI,USA,41.7358775,-83.65541056\\n5HO,Hope,Hope,AK,USA,60.90415028,-149.6238389\\n5I4,Sheridan,Sheridan,IN,USA,40.17792583,-86.21729889\\n5J0,John Day State,John Day,OR,USA,44.40416667,-118.9625\\n5J9,Twin City,Loris,SC,USA,34.08848361,-78.86462028\\n5K2,Tribune Municipal,Tribune,KS,USA,38.45418222,-101.7462828\\n5M0,Rountree,Hartselle,AL,USA,34.40823444,-86.93295056\\n5M1,De Witt Municipal,De Witt,AR,USA,34.2626,-91.30984194\\n5M4,Fordyce Municipal,Fordyce,AR,USA,33.84593722,-92.36542861\\n5M9,Marion-Crittenden County,Marion,KY,USA,37.33616222,-88.11113611\\n5N8,Casselton Regional,Casselton,ND,USA,46.85469528,-97.20870028\\n5ND6,Hillsboro Municipal,Hillsboro,ND,USA,47.35940778,-97.06041639\\n5NI,Nikolai,Nikolai,AK,USA,63.0174475,-154.3639608\\n5NK,Naknek,Naknek,AK,USA,58.73288056,-157.0199197\\n5NN,Nondalton,Nondalton,AK,USA,59.97904306,-154.8396944\\n5R3,Rusty Allen,Lago Vista,TX,USA,30.498585,-97.96947222\\n5R4,Foley Municipal,Foley,AL,USA,30.42769722,-87.70082\\n5R5,Wharton Municipal,Wharton,TX,USA,29.25427778,-96.15438889\\n5R8,De Quincy Industrial Airpark,De Quincy,LA,USA,30.44117222,-93.47349722\\n5S8,St. Michael,St. Michael,AK,USA,63.49005056,-162.1103692\\n5T5,Hillsboro Municipal,Hillsboro,TX,USA,32.08348611,-97.09722722\\n5T6,Dona Ana County At Santa Teresa,Santa Teresa,NM,USA,31.88098556,-106.7048131\\n5T9,Maverick County Meml Intl,Eagle Pass,TX,USA,28.85719361,-100.5122997\\n5TE,Tetlin,Tetlin,AK,USA,63.13382361,-142.5219339\\n5U3,Ennis - Big Sky,Ennis,MT,USA,45.27175833,-111.6486389\\n5U8,Geraldine,Geraldine,MT,USA,47.59664,-110.2660367\\n5V5,Shiprock Airstrip,Shiprock,NM,USA,36.6977775,-108.7011986\\n5V8,Kadoka Municipal,Kadoka,SD,USA,43.83332611,-101.4970881\\n5W8,Siler City Municipal,Siler City,NC,USA,35.7029175,-79.50529972\\n5Z1,Juneau Harbor,Juneau,AK,USA,58.29888889,-134.4077778\\n5Z5,Kantishna,Kantishna,AK,USA,63.54171472,-150.9939547\\n60F,Seymour Municipal,Seymour,TX,USA,33.64870417,-99.26063056\\n60J,Ocean Isle,Ocean Isle Beach,NC,USA,33.90850556,-78.43667222\\n61A,Camden Municipal,Camden,AL,USA,31.97987056,-87.33888056\\n61B,Boulder City Municipal,Boulder City,NV,USA,35.94748028,-114.8610967\\n61C,Fort Atkinson Municipal,Fort Atkinson,WI,USA,42.96320278,-88.81762806\\n61J,Portland Downtown Heliport,Portland,OR,USA,45.52527778,-122.6709289\\n61S,Cottage Grove State,Cottage Grove,OR,USA,43.79984528,-123.0289678\\n62D,Warren,Warren,OH,USA,41.26672278,-80.92897778\\n62H,Giddings-Lee County,Giddings,TX,USA,30.16927167,-96.98001083\\n62S,Christmas Valley,Christmas Valley,OR,USA,43.23653139,-120.6660967\\n63A,Lloyd R. Roundtree Seaplane Facility,Petersburg,AK,USA,56.81131972,-132.9600567\\n63C,Adams County Legion,Adams/Friendship,WI,USA,43.96117222,-89.78804889\\n63S,Colville Municipal,Colville,WA,USA,48.54156944,-117.8844247\\n65J,Wrens Memorial,Wrens,GA,USA,33.222645,-82.38373611\\n65S,Boundary County,Bonners Ferry,ID,USA,48.72632639,-116.2954761\\n66D,Sturgis Municipal,Sturgis,SD,USA,44.41761111,-103.3747778\\n67L,Mesquite,Mesquite,NV,USA,36.83497556,-114.0552453\\n68A,Wrangell SPB,Wrangell,AK,USA,56.466325,-132.3800181\\n68S,Davenport,Davenport,WA,USA,47.65404528,-118.1677519\\n6A1,Butler Municipal,Butler,GA,USA,32.56736694,-84.25074833\\n6A2,Griffin-Spaulding County,Griffin,GA,USA,33.22697222,-84.27494444\\n6A3,Andrews-Murphy,Andrews,NC,USA,35.19453167,-83.86490194\\n6A4,Johnson County,Mountain City,TN,USA,36.41789833,-81.82511528\\n6A8,Allakaket,Allakaket,AK,USA,66.55194444,-152.6222222\\n6B0,Middlebury State,Middlebury,VT,USA,43.98478278,-73.09594889\\n6B4,Frankfort-Highland,Utica/Frankfort,NY,USA,43.02090306,-75.17043861\\n6B6,Minute Man Airfield,Stow,MA,USA,42.46045361,-71.51791444\\n6B8,Caledonia County State,Lyndonville,VT,USA,44.56911417,-72.01797889\\n6B9,Skaneateles Aero Drome,Skaneateles,NY,USA,42.91395583,-76.44076889\\n6D6,Greenville Municipal,Greenville,MI,USA,43.14228139,-85.25380722\\n6D8,Barnes County Municipal,Valley City,ND,USA,46.94100778,-98.01762611\\n6F1,Talihina Municipal,Talihina,OK,USA,34.70777139,-95.07378583\\n6G1,Titusville,Titusville,PA,USA,41.60880861,-79.74133111\\n6G5,Barnesville - Bradfield,Barnesville,OH,USA,40.00243139,-81.19183\\n6I2,Lebanon-Springfield,Springfield,KY,USA,37.63355556,-85.24216667\\n6J0,Corporate,Pelion,SC,USA,33.79463889,-81.24586111\\n6J2,St George,St George,SC,USA,33.1955,-80.50847222\\n6J4,Saluda County,Saluda,SC,USA,33.92680111,-81.79455306\\n6K3,Creighton Municipal,Creighton,NE,USA,42.47083694,-97.88367778\\n6K4,Fairview Municipal,Fairview,OK,USA,36.29014667,-98.47582833\\n6K8,Tok Junction,Tok,AK,USA,63.32881806,-142.9536194\\n6L4,Logan County,Logan,WV,USA,37.85567778,-81.91589722\\n6M2,Horseshoe Bend,Horseshoe Bend,AR,USA,36.21673389,-91.75014556\\n6M6,Lewis County Regional,Monticello,MO,USA,40.12916667,-91.67833333\\n6M7,Lee County-Marianna,Marianna,AR,USA,34.78027778,-90.81055556\\n6M8,Marked Tree Municipal,Marked Tree,AR,USA,35.53341472,-90.40149028\\n6N5,E 34th St Heliport,New York,NY,USA,40.74260167,-73.97208306\\n6N7,New York Skyports Inc. SPB,New York,NY,USA,40.73399083,-73.97291639\\n6N8,Thomas County,Thedford,NE,USA,41.96217028,-100.5690139\\n6R3,Cleveland Municipal,Cleveland,TX,USA,30.35643,-95.00801472\\n6R7,Old Harbor (New),Old Harbor,AK,USA,57.21810306,-153.2697494\\n6R9,Llano Municipal,Llano,TX,USA,30.78450278,-98.66025083\\n6S0,Big Timber,Big Timber,MT,USA,45.80638889,-109.9811111\\n6S2,Florence Muni,Florence,OR,USA,43.97901,-124.1095631\\n6S3,Columbus,Columbus,MT,USA,45.6291075,-109.2507167\\n6S5,Ravalli County,Hamilton,MT,USA,46.25149444,-114.1255403\\n6S8,Laurel Municipal,Laurel,MT,USA,45.70308833,-108.7610886\\n6V0,Edgemont Municipal,Edgemont,SD,USA,43.29525056,-103.8435325\\n6V3,Tazewell County,Richlands,VA,USA,37.06374667,-81.79826944\\n6V4,Wall Municipal,Wall,SD,USA,43.99498861,-102.2504367\\n6V6,Hopkins,Nucla,CO,USA,38.23879833,-108.5632597\\n70J,Cairo-Grady County,Cairo,GA,USA,30.88797667,-84.15473528\\n71J,Blackwell,Ozark,AL,USA,31.43113889,-85.61922222\\n72S,Rosalia Municipal,Rosalia,WA,USA,47.23683778,-117.4210244\\n73C,Lancaster,Lancaster,WI,USA,42.78054722,-90.68096028\\n73J,Beaufort County,Beaufort,SC,USA,32.4121375,-80.63455083\\n74D,Marshall Cty,Moundsville,WV,USA,39.88083333,-80.73577778\\n74S,Anacortes,Anacortes,WA,USA,48.4989925,-122.6623956\\n74V,Roosevelt Municipal,Roosevelt,UT,USA,40.27829167,-110.0512619\\n75J,Turner County,Ashburn,GA,USA,31.68545833,-83.63211194\\n76G,Marine City,Marine City,MI,USA,42.72086583,-82.59574694\\n77G,Marlette Township,Marlette,MI,USA,43.31183,-83.09091444\\n77S,Hobby,Creswell,OR,USA,43.93206889,-123.0067483\\n78D,Caro Municipal,Caro,MI,USA,43.45908333,-83.44522222\\n79D,Philippi-Barbour County Regional,Philippi,WV,USA,39.16620778,-80.06258056\\n79J,Andalusia,Andalusia,AL,USA,31.30875278,-86.39376083\\n79S,Fort Benton,Fort Benton,MT,USA,47.84583333,-110.6336111\\n7A0,Greensboro Municipal,Greensboro,AL,USA,32.68147222,-87.66208333\\n7A2,Demopolis Municipal,Demopolis,AL,USA,32.46381944,-87.95406389\\n7A3,Lanett Municipal,Lanett,AL,USA,32.81204611,-85.22958111\\n7A5,Roanoke Municipal,Roanoke,AL,USA,33.12928722,-85.366615\\n7A8,Avery County/Morrison,Spruce Pine,NC,USA,35.94457028,-81.99566944\\n7B2,La Fleur,Northampton,MA,USA,42.32816806,-72.61151667\\n7D2,Troy-Oakland,Troy,MI,USA,42.54294389,-83.17790861\\n7F3,Caddo Mills Municipal,Caddo Mills,TX,USA,33.03622222,-96.24313889\\n7F6,Clarksville-Red River County,Clarksville,TX,USA,33.59316472,-95.06355528\\n7F7,Clifton Municipal,Clifton,TX,USA,31.81682333,-97.56696361\\n7F9,Comanche County-City,Comanche,TX,USA,31.91681306,-98.600325\\n7G0,Ledgedale Airpark,Brockport,NY,USA,43.18118194,-77.91362333\\n7G8,Geauga County,Middlefield,OH,USA,41.44960972,-81.06292972\\n7I7,Bellefontaine Municipal,Bellefontaine,OH,USA,40.41208333,-83.73686111\\n7K0,Pike County-Hatcher,Pikeville,KY,USA,37.56173889,-82.56660694\\n7K2,Skagway SPB,Skagway,AK,USA,59.44689528,-135.3226633\\n7K4,Ohio County,Hartford,KY,USA,37.45832417,-86.84995194\\n7K8,Martin,South Sioux City,NE,USA,42.45416111,-96.47253111\\n7KA,Tatitlek,Tatitlek,AK,USA,60.86890528,-146.6864653\\n7M1,McGehee Municipal,McGehee,AR,USA,33.62022111,-91.36484056\\n7M3,Bearce,Mount Ida,AR,USA,34.52926056,-93.52713472\\n7M4,Osceola Municipal,Osceola,AR,USA,35.69114639,-90.01012028\\n7M5,Ozark-Franklin County,Ozark,AR,USA,35.51069583,-93.8393075\\n7M7,Piggott Municipal,Piggott,AR,USA,36.37820556,-90.16624167\\n7N0,New Orleans Downtown Heliport,New Orleans,LA,USA,29.95194444,-90.08166667\\n7N1,Corning-Painted Post,Corning,NY,USA,42.17590722,-77.11219278\\n7N7,Spitfire Aerodrome,Pedrictown,NJ,USA,39.73556333,-75.39772111\\n7S0,Ronan,Ronan,MT,USA,47.57076861,-114.0967783\\n7S1,Twin Bridges,Twin Bridges,MT,USA,45.53325917,-112.3091656\\n7S5,Independence State,Independence,OR,USA,44.86676444,-123.1982475\\n7S6,White Sulphur Springs,White Sulphur Springs,MT,USA,46.50410722,-110.9132667\\n7S7,Valier,Valier,MT,USA,48.29997583,-112.2508711\\n7V1,Buena Vista Muni,Buena Vista,CO,USA,38.81416194,-106.1206939\\n7V7,Red Cloud Municipal,Red Cloud,NE,USA,40.08473556,-98.54061694\\n7W6,Hyde County,Englehard,NC,USA,35.5623925,-75.95518417\\n80F,Antlers Municipal,Antlers,OK,USA,34.19260083,-95.64985889\\n81B,Oxford County Regional,Norway,ME,USA,44.15742611,-70.48129583\\n82C,Mauston-New Lisbon Union,New Lisbon,WI,USA,43.83872167,-90.13768389\\n82V,Pine Bluffs Municipal,Pine Bluffs,WY,USA,41.15331528,-104.1302292\\n83D,Mackinac County,St Ignace,MI,USA,45.89029056,-84.73755083\\n84D,Cheyenne Eagle Butte,Eagle Butte,SD,USA,44.984375,-101.2510417\\n84K,Meyers Chuck SPB,Meyers Chuck,AK,USA,55.73963611,-132.2550183\\n84R,Smithville Municipal,Smithville,TX,USA,30.03048028,-97.16687194\\n85V,Ganado,Ganado,AZ,USA,35.70140278,-109.5103814\\n86F,Carnegie Municipal,Carnegie,OK,USA,35.12061417,-98.5806175\\n87I,Yazoo County,Yazoo City,MS,USA,32.883215,-90.4636475\\n87Y,Blackhawk Airfield,Madison,WI,USA,43.10491444,-89.18553833\\n88C,Palmyra Municipal,Palmyra,WI,USA,42.88355556,-88.59743056\\n88J,Allendale County,Allendale,SC,USA,32.99512944,-81.27024583\\n88M,Eureka,Eureka,MT,USA,48.96885444,-115.0704464\\n89D,Kelleys Island Land,Kelleys Island,OH,USA,41.60282583,-82.684625\\n8A0,Albertville Municipal,Albertville,AL,USA,34.22910972,-86.25575806\\n8A1,Guntersville Municipal,Guntersville,AL,USA,34.39944167,-86.27016111\\n8A3,Livingston Municipal,Livingston,TN,USA,36.41217389,-85.31154861\\n8B0,Rangeley Municipal,Rangeley,ME,USA,44.991895,-70.66462472\\n8D1,New Holstein Municipal,New Holstein,WI,USA,43.94424111,-88.1134775\\n8D3,Sisseton Municipal,Sisseton,SD,USA,45.67079278,-96.99619167\\n8D4,Sparta,Sparta,MI,USA,43.12860833,-85.67689778\\n8D7,Clark County,Clark,SD,USA,44.89570278,-97.71191361\\n8D9,Howard Municipal,Howard,SD,USA,44.02914056,-97.53784778\\n8F7,Decatur Municipal,Decatur,TX,USA,33.25463889,-97.58055556\\n8G2,Lawrence,Corry,PA,USA,41.90755611,-79.64105083\\n8G6,Harrison County,Cadiz,OH,USA,40.23820667,-81.01256917\\n8G7,Zelienople,Zelienople,PA,USA,40.80161944,-80.16072889\\n8K8,Cimarron Municipal,Cimarron,KS,USA,37.83057667,-100.3504222\\n8K9,Murphys Pullout SPB,Ketchikan,AK,USA,55.38965028,-131.7380742\\n8M1,Booneville-Baldwyn,Booneville,MS,USA,34.58981806,-88.64699861\\n8S1,Polson,Polson,MT,USA,47.69543861,-114.1851178\\n8S2,Cashmere-Dryden,Cashmere,WA,USA,47.51484611,-120.4848025\\n8S5,East Cooper,Mt Pleasant,SC,USA,32.89783333,-79.78286111\\n8U6,Terry,Terry,MT,USA,46.77917333,-105.3047083\\n8U8,Townsend,Townsend,MT,USA,46.33111111,-111.4813889\\n8V2,Stuart-Atkinson Municipal,Atkinson,NE,USA,42.56250167,-99.03787611\\n8Y2,Buffalo Municipal,Buffalo,MN,USA,45.15904694,-93.84330361\\n91C,Sauk - Prairie,Prairie Du Sac,WI,USA,43.2969325,-89.75595639\\n91F,Arrowhead,Canadian,OK,USA,35.15426444,-95.62026389\\n93B,Stonington,Stonington,ME,USA,44.17508056,-68.67863722\\n93C,Richland,Richland Center,WI,USA,43.28333333,-90.29827778\\n93F,Mignon Laird Municipal,Cheyenne,OK,USA,35.60393694,-99.70343889\\n93Y,David City Municipal,David City,NE,USA,41.23334583,-97.11698111\\n94K,Cassville Municipal,Cassville,MO,USA,36.69741667,-93.90052778\\n95F,Cleveland Municipal,Cleveland,OK,USA,36.28340306,-96.46418833\\n96D,Walhalla Municipal,Walhalla,ND,USA,48.94057222,-97.902775\\n96Z,North Whale SPB,North Whale Pass,AK,USA,56.11631056,-133.1217153\\n97M,Ekalaka,Ekalaka,MT,USA,45.87791444,-104.5375072\\n98D,Onida Municipal,Onida,SD,USA,44.70414917,-100.1087353\\n99N,Bamburg County,Bamburg,SC,USA,33.30515528,-81.10898917\\n99Y,Greeley Municipal,Greeley,NE,USA,41.55834528,-98.54618528\\n9A1,Covington Municipal,Covington,GA,USA,33.6324825,-83.84955806\\n9A3,Chuathbaluk,Chuathbaluk,AK,USA,61.58317306,-159.2359667\\n9A4,Lawrence County,Courtland,AL,USA,34.65938889,-87.34883333\\n9A5,Barwick-LaFayette,LaFayette,GA,USA,34.68896917,-85.29023333\\n9A6,Chester Municipal,Chester,SC,USA,34.78933333,-81.19577778\\n9A8,Ugashik,Ugashik,AK,USA,57.5278675,-157.3993056\\n9C8,Evart Municipal,Evart,MI,USA,43.8958525,-85.27920861\\n9D0,Highmore Municipal,Highmore,SD,USA,44.54165056,-99.44622306\\n9D1,Gregory Municipal,Gregory,SD,USA,43.22174722,-99.4033\\n9D2,Harding County,Buffalo,SD,USA,45.58055222,-103.5296356\\n9D7,Cando Municipal,Cando,ND,USA,48.4841675,-99.23680389\\n9D9,Hastings Municipal,Hastings,MI,USA,42.66361778,-85.34625944\\n9G0,Buffalo Airfield,Buffalo,NY,USA,42.86200306,-78.71658528\\n9G1,West Penn,Tarentum,PA,USA,40.60423333,-79.82060611\\n9G3,Akron,Akron,NY,USA,43.02108667,-78.48296778\\n9G5,Royalton,Gasport,NY,USA,43.18200222,-78.55780528\\n9G8,Ebensburg,Ebensburg,PA,USA,40.46121083,-78.77524389\\n9I0,Havana Regional,Havana,IL,USA,40.221155,-90.02289361\\n9I3,West Liberty,West Liberty,KY,USA,37.91453139,-83.25212111\\n9K2,Kokhanok,Kokhanok,AK,USA,59.43264556,-154.8027058\\n9K4,Skyhaven,Warrensburg,MO,USA,38.7842425,-93.80285417\\n9K7,Ellsworth Municipal,Ellsworth,KS,USA,38.74750889,-98.23061222\\n9K8,Kingman Municipal,Kingman,KS,USA,37.66660278,-98.12264722\\n9M4,Ackerman-Choctaw County,Ackerman,MS,USA,33.3034575,-89.22840028\\n9M6,Kelly,Oak Grove,LA,USA,32.84921361,-91.40390611\\n9M8,Sheridan-Grant County Regional,Sheridan,AR,USA,34.32842917,-92.35098583\\n9S2,Scobey,Scobey,MT,USA,48.80772722,-105.43947\\n9S4,Mineral County,Superior,MT,USA,47.16825944,-114.8537411\\n9S5,Three Forks,Three Forks,MT,USA,45.87852778,-111.5691389\\n9S7,Winifred,Winifred,MT,USA,47.55164778,-109.3776792\\n9S9,Lexington,Lexington,OR,USA,45.45263139,-119.6886361\\n9U0,Turner,Turner,MT,USA,48.85417361,-108.4090214\\n9U3,Austin,Austin,NV,USA,39.46798056,-117.1953703\\n9U4,Dixon,Dixon,WY,USA,41.03829806,-107.4972869\\n9V5,Modisett,Rushville,NE,USA,42.73748639,-102.4448947\\n9V6,Martin Municipal,Martin,SD,USA,43.16564083,-101.7126953\\n9V9,Chamberlain Municipal,Chamberlain,SD,USA,43.76612222,-99.32134\\n9W7,Currituck County,Currituck,NC,USA,36.39893194,-76.01631111\\nA04,Centre Municipal,Centre,AL,USA,34.15987361,-85.63512944\\nA14,Portage Creek,Portage Creek,AK,USA,58.906485,-157.7141078\\nA29,Sitka SPB,Sitka,AK,USA,57.05213778,-135.3462086\\nA30,Scott Valley,Fort Jones,CA,USA,41.55819444,-122.8553103\\nA32,Butte Valley,Dorris,CA,USA,41.88709222,-121.9755614\\nA61,Tuntutuliak,Tuntutuliak,AK,USA,60.33534556,-162.6670094\\nA63,Twin Hills,Twin Hills,AK,USA,59.07562167,-160.2730436\\nA79,Chignik Lake,Chignik Lake,AK,USA,56.25504722,-158.7753614\\nA85,Kwigillingok,Kwigillingok,AK,USA,59.87644778,-163.1675583\\nAAF,Apalachicola Municipal,Apalachicola,FL,USA,29.72754583,-85.02744778\\nAAO,Colonel James Jabara,Wichita,KS,USA,37.74755556,-97.22113889\\nAAS,Taylor County,Cambellsville,KY,USA,37.35827778,-85.30941667\\nAAT,Alturas Municipal,Alturas,CA,USA,41.483,-120.5653611\\nABE,Lehigh Valley International,Allentown,PA,USA,40.65236278,-75.44040167\\nABI,Abilene Regional,Abilene,TX,USA,32.41132,-99.68189722\\nABO,Antonio (Nery) Juarbe Pol,Arecibo,PR,USA,18.45111111,-66.67555556\\nABQ,Albuquerque International,Albuquerque,NM,USA,35.04022222,-106.6091944\\nABR,Aberdeen Regional,Aberdeen,SD,USA,45.44905556,-98.42183333\\nABY,Southwest Georgia Regional,Albany,GA,USA,31.535515,-84.19447333\\nACB,Antrim County,Bellaire,MI,USA,44.98857611,-85.198355\\nACJ,Souther,Americus,GA,USA,32.11079917,-84.18884806\\nACK,Nantucket Memorial,Nantucket,MA,USA,41.25305194,-70.06018139\\nACQ,Waseca Municipal,Waseca,MN,USA,44.07346389,-93.55294361\\nACT,Waco Regional,Waco,TX,USA,31.61128833,-97.23051917\\nACV,Arcata,Arcata/Eureka,CA,USA,40.97811528,-124.1086189\\nACY,Atlantic City International,Atlantic City,NJ,USA,39.45758333,-74.57716667\\nACZ,Henderson,Wallace,NC,USA,34.71789028,-78.00362444\\nADC,Wadena Municipal,Wadena,MN,USA,46.45026972,-95.21095472\\nADG,Lenawee County,Adrian,MI,USA,41.86943667,-84.07480528\\nADH,Ada Municipal,Ada,OK,USA,34.80434056,-96.6712775\\nADK,Adak,Adak,AK,USA,51.87796389,-176.6460306\\nADM,Ardmore Municipal,Ardmore,OK,USA,34.30320667,-97.01952167\\nADQ,Kodiak,Kodiak,AK,USA,57.74996778,-152.4938553\\nADS,Addison,Dallas/Addison,TX,USA,32.96855944,-96.83644778\\nADT,Atwood-Rawlins County City-County,Atwood,KS,USA,39.84013889,-101.0420278\\nADU,Audubon Municipal,Audubon,IA,USA,41.70137556,-94.92054167\\nAEG,Double Eagle II,Albuquerque,NM,USA,35.14515278,-106.7951617\\nAEL,Albert Lea Municipal,Albert Lea,MN,USA,43.68151278,-93.36723778\\nAEX,Alexandria International,Alexandria,LA,USA,31.32737167,-92.54855611\\nAFE,Kake,Kake,AK,USA,56.96048139,-133.9082694\\nAFJ,Washington County,Washington,PA,USA,40.13648833,-80.29020083\\nAFK,Nebraska City Municipal,Nebraska City,NE,USA,40.60688889,-95.86569444\\nAFM,Ambler,Ambler,AK,USA,67.10610472,-157.8536203\\nAFN,Jaffrey Municipal Silver Ranch,Jaffrey,NH,USA,42.80513417,-72.00302194\\nAFO,Afton Municipal,Afton,WY,USA,42.71124583,-110.9421639\\nAFW,Fort Worth Alliance,Fort Worth,TX,USA,32.98763889,-97.31880556\\nAGC,Allegheny Cty,Pittsburgh,PA,USA,40.35440139,-79.93016889\\nAGN,Angoon SPB,Angoon,AK,USA,57.50355528,-134.5850939\\nAGO,Magnolia Municipal,Magnolia,AR,USA,33.22802111,-93.21696861\\nAGS,Bush,Augusta,GA,USA,33.369955,-81.96449611\\nAGZ,Wagner Municipal,Wagner,SD,USA,43.06332694,-98.29618972\\nAHH,Amery Municipal,Amery,WI,USA,45.28114833,-92.37539222\\nAHN,Athens Municipal,Athens,GA,USA,33.94859528,-83.32634694\\nAHP,Port Alexander SPB,Port Alexander,AK,USA,56.24684222,-134.6481539\\nAHQ,Wahoo Municipal,Wahoo,NE,USA,41.24133333,-96.59402778\\nAIA,Alliance Municipal,Alliance,NE,USA,42.05325,-102.8037222\\nAID,Anderson Municipal,Anderson,IN,USA,40.10862139,-85.61299472\\nAIG,Langlade County,Antigo,WI,USA,45.15419444,-89.11072222\\nAIK,Aiken Municipal,Aiken,SC,USA,33.64955556,-81.68447222\\nAIO,Atlantic Municipal,Atlantic,IA,USA,41.40726722,-95.04690639\\nAIT,Aitkin Municipal,Aitkin,MN,USA,46.5484225,-93.6768\\nAIV,George Downer,Aliceville,AL,USA,33.10706889,-88.19725167\\nAIY,Atlantic City Municipal,Atlantic City,NJ,USA,39.36002778,-74.45608333\\nAIZ,Lee C Fine Memorial,Kaiser/Lake Ozark,MO,USA,38.096035,-92.5494875\\nAJC,Chignik (Anchorage Bay),Chignik,AK,USA,56.3114625,-158.3732369\\nAJG,Mt Carmel Municipal,Mt Carmel,IL,USA,38.60654722,-87.72669417\\nAJO,Corona Municipal,Corona,CA,USA,33.89765389,-117.60244\\nAJR,Habersham County,Cornelia,GA,USA,34.50081944,-83.55487\\nAK5,Perryville,Perryville,AK,USA,55.90806056,-159.1585781\\nAKA,Atka,Atka,AK,USA,52.22034833,-174.2063503\\nAKH,Gastonia Municipal,Gastonia,NC,USA,35.20265944,-81.1498675\\nAKI,Akiak,Akiak,AK,USA,60.90481194,-161.2270189\\nAKK,Akhiok,Akhiok,AK,USA,56.93869083,-154.1825556\\nAKN,King Salmon,King Salmon,AK,USA,58.67680167,-156.6492175\\nAKO,Akron-Washington Co,Akron,CO,USA,40.17563333,-103.2220278\\nAKP,Anaktuvuk Pass,Anaktuvuk Pass,AK,USA,68.1343225,-151.74168\\nAKR,Akron Fulton Intl.,Akron,OH,USA,41.0375,-81.46693944\\nAKW,Klawock,Klawock,AK,USA,55.57923333,-133.0759972\\nAL08,Vaiden,Marion,AL,USA,32.51235611,-87.38555472\\nALB,Albany Cty,Albany,NY,USA,42.74811944,-73.80297861\\nALI,Alice International,Alice,TX,USA,27.74088889,-98.02694444\\nALM,Alamogordo-White Sands Regional,Alamogordo,NM,USA,32.83994444,-105.9905833\\nALN,St. Louis Regional,Alton/St. Louis,IL,USA,38.89029083,-90.04604306\\nALO,Waterloo Municipal,Waterloo,IA,USA,42.55708139,-92.40034361\\nALS,San Luis Valley Regional/Bergman,Alamosa,CO,USA,37.43491667,-105.8665556\\nALW,Walla Walla Regional,Walla Walla,WA,USA,46.09456167,-118.2880367\\nALX,Thomas C Russell,Alexander City,AL,USA,32.91475167,-85.96295611\\nAMA,Amarillo International,Amarillo,TX,USA,35.2193725,-101.7059272\\nAMG,Bacon County,Alma,GA,USA,31.53605556,-82.50655556\\nAMN,Gratiot Community,Alma,MI,USA,43.3221425,-84.68794917\\nAMT,Alexander Salamon,West Union,OH,USA,38.85148778,-83.56627778\\nAMW,Ames Municipal,Ames,IA,USA,41.99206972,-93.62180139\\nANB,Anniston Metropolitan,Anniston,AL,USA,33.58816667,-85.85811111\\nANC,Ted Stevens Anchorage International,Anchorage,AK,USA,61.17432028,-149.9961856\\nAND,Anderson County,Anderson,SC,USA,34.49494444,-82.70902778\\nANE,Anoka County,Minneapolis,MN,USA,45.145,-93.21138889\\nANI,Aniak,Aniak,AK,USA,61.58159694,-159.5430428\\nANQ,Steuben County-Tri State,Angola,IN,USA,41.63969833,-85.08349333\\nANV,Anvik,Anvik,AK,USA,62.64858333,-160.1898889\\nANW,Ainsworth Municipal,Ainsworth,NE,USA,42.57922222,-99.99297222\\nANY,Anthony Municipal,Anthony,KS,USA,37.15852194,-98.07964667\\nAOC,Arco-Butte County,Arco,ID,USA,43.60343056,-113.3340972\\nAOH,Allen County,Lima,OH,USA,40.70694444,-84.02666667\\nAOO,Altoona-Blair Cty,Altoona,PA,USA,40.29637222,-78.32002306\\nAPA,Centennial,Denver,CO,USA,39.57012833,-104.8492942\\nAPC,Napa County,Napa,CA,USA,38.21319444,-122.2806944\\nAPF,Naples Municipal,Naples,FL,USA,26.15247222,-81.77544444\\nAPN,Alpena County Regional,Alpena,MI,USA,45.0780675,-83.56028583\\nAPT,Marion County-Brown,Jasper,TN,USA,35.06067778,-85.58531667\\nAPV,Apple Valley,Apple Valley,CA,USA,34.57528944,-117.1861792\\nAQC,Klawock SPB,Klawock,AK,USA,55.5546575,-133.1016928\\nAQH,Kwinhagak,Quinhagak,AK,USA,59.75700722,-161.8794789\\nAQT,Nuiqsut,Nuiqsut,AK,USA,70.20995278,-151.0055611\\nAQW,Harriman And West,North Adams,MA,USA,42.69591417,-73.17038306\\nAQY,Girdwood,Girdwood,AK,USA,60.96609583,-149.1257892\\nARA,Acadiana Regional,New Iberia,LA,USA,30.03775833,-91.88389611\\nARB,Ann Arbor Municipal,Ann Arbor,MI,USA,42.22298361,-83.74560722\\nARC,Arctic Village,Arctic Village,AK,USA,68.11608083,-145.5761114\\nARG,Walnut Ridge Regional,Walnut Ridge,AR,USA,36.12534667,-90.92461944\\nARR,Aurora Municipal,Chicago/Aurora,IL,USA,41.77192944,-88.47565917\\nART,Watertown Intl,Watertown,NY,USA,43.99192222,-76.02173861\\nARV,Lakeland,Minocqua-Woodruff,WI,USA,45.92792556,-89.73094278\\nASD,Slidell,Slidell,LA,USA,30.345055,-89.82078833\\nASE,Aspen-Pitkin Co/Sardy,Aspen,CO,USA,39.22316,-106.868845\\nASG,Springdale Municipal,Springdale,AR,USA,36.17641056,-94.11925833\\nASH,Boire,Nashua,NH,USA,42.78176306,-71.51477944\\nASJ,Tri-County,Ahoskie,NC,USA,36.29752583,-77.17085556\\nASL,Marshall - Harrison County,Marshall,TX,USA,32.5205,-94.30777778\\nASN,Talladega Municipal,Talladega,AL,USA,33.56991111,-86.05085833\\nAST,Astoria Regional,Astoria,OR,USA,46.15797222,-123.8786944\\nASW,Warsaw Municipal,Warsaw,IN,USA,41.2747,-85.84005556\\nASX,John F Kennedy Memorial,Ashland,WI,USA,46.54852806,-90.91896639\\nATA,Hall-Miller Municipal,Atlanta,TX,USA,33.101805,-94.19532694\\nATK,Atqasuk,Atqasuk,AK,USA,70.46727611,-157.4357361\\nATL,William B Hartsfield-Atlanta Intl,Atlanta,GA,USA,33.64044444,-84.42694444\\nATS,Artesia Municipal,Artesia,NM,USA,32.85252806,-104.4676864\\nATW,Outagamie County Regional,Appleton,WI,USA,44.25740806,-88.51947556\\nATY,Watertown Municipal,Watertown,SD,USA,44.91398056,-97.15471944\\nAUG,Augusta State,Augusta,ME,USA,44.32064972,-69.79731806\\nAUH,Aurora Municipal,Aurora,NE,USA,40.89413889,-97.99455556\\nAUK,Alakanuk,Alakanuk,AK,USA,62.68004417,-164.6599253\\nAUM,Austin Municipal,Austin,MN,USA,43.66499083,-92.933385\\nAUN,Auburn Municipal,Auburn,CA,USA,38.95476944,-121.0820806\\nAUO,Auburn-Opelik,Auburn,AL,USA,32.61635417,-85.43355944\\nAUS,Austin-Bergstrom International,Austin,TX,USA,30.19453278,-97.66987194\\nAUW,Wausau Municipal,Wausau,WI,USA,44.92847222,-89.62661111\\nAVC,Mecklenburg-Brunswick Regional,South Hill,VA,USA,36.68827778,-78.05447222\\nAVK,Alva Regional,Alva,OK,USA,36.77317,-98.66994611\\nAVL,Asheville Regional,Asheville,NC,USA,35.43619444,-82.54180556\\nAVO,Avon Park Municipal,Avon Park,FL,USA,27.591145,-81.52785333\\nAVP,Wilkes-Barre/Scranton Intl,Wilkes-Barre/Scranton,PA,USA,41.33814944,-75.7242675\\nAVQ,Marana Northwest Regional,Marana,AZ,USA,32.40939028,-111.2185086\\nAVX,Catalina,Avalon,CA,USA,33.40494444,-118.4158611\\nAWG,Washington Municipal,Washington,IA,USA,41.27610083,-91.67344389\\nAWI,Wainwright,Wainwright,AK,USA,70.638,-159.99475\\nAWM,West Memphis Municipal,West Memphis,AR,USA,35.13505861,-90.23444639\\nAWO,Arlington Municipal,Arlington,WA,USA,48.16074833,-122.1590208\\nAXA,Algona Municipal,Algona,IA,USA,43.07791056,-94.27199278\\nAXN,Chandler,Alexandria,MN,USA,45.86629833,-95.39466806\\nAXS,Altus Municipal,Altus,OK,USA,34.69878194,-99.3381\\nAXV,Neil Armstrong,Wapakoneta,OH,USA,40.49338889,-84.29894444\\nAXX,Angel Fire,Angel Fire,NM,USA,36.42240972,-105.2892967\\nAYS,Waycross-Ware County,Waycross,GA,USA,31.24905556,-82.39530556\\nAZC,Colorado City Municipal,Colorado City,AZ,USA,36.95994444,-113.0138889\\nAZE,Hazelhurst,Hazelhurst,GA,USA,31.88465639,-82.64738778\\nAZO,Kalamazoo County,Kalamazoo,MI,USA,42.234875,-85.5520575\\nB01,Granville,Granville,NY,USA,43.42507111,-73.26205306\\nB08,Silver Springs,Silver Springs,NV,USA,39.40324917,-119.2518292\\nB16,Whitford,Weedsport,NY,USA,43.08027611,-76.53837556\\nB19,Biddeford Municipal,Biddeford,ME,USA,43.46411111,-70.47238889\\nB21,Sugarloaf Regional,Carrabasset,ME,USA,45.08616639,-70.21617778\\nBAF,Barnes Municipal,Westfield,MA,USA,42.15773111,-72.71562028\\nBAK,Columbus Municipal,Columbus,IN,USA,39.26191861,-85.89634556\\nBAM,Battle Mountain,Battle Mountain,NV,USA,40.59904583,-116.8743358\\nBAX,Huron County Memorial,Bad Axe,MI,USA,43.78091667,-82.98566667\\nBAZ,New Braunfels Municipal,New Braunfels,TX,USA,29.7045,-98.04222222\\nBBB,Benson Municipal,Benson,MN,USA,45.3319325,-95.650565\\nBBD,Curtis,Brady,TX,USA,31.17816667,-99.32463889\\nBBP,Marlboro County,Bennettsville,SC,USA,34.62170861,-79.73435944\\nBBW,Broken Bow Municipal,Broken Bow,NE,USA,41.43645056,-99.64216861\\nBCB,Virginia Tech,Blacksburg,VA,USA,37.20782361,-80.40832778\\nBCE,Bryce Canyon,Bryce Canyon,UT,USA,37.70637111,-112.1454725\\nBCK,Black River Falls Area,Black River Falls,WI,USA,44.25073861,-90.85528028\\nBCT,Boca Raton,Boca Raton,FL,USA,26.37848667,-80.10769667\\nBCV,Birchwood,Birchwood,AK,USA,61.41612444,-149.50888\\nBDE,Baudette International,Baudette,MN,USA,48.72741667,-94.61030556\\nBDG,Blanding Muni,Blanding,UT,USA,37.58303472,-109.4832889\\nBDL,Bradley International,Windsor Locks,CT,USA,41.93887417,-72.68322833\\nBDQ,Morrilton Municipal,Morrilton,AR,USA,35.13619528,-92.71349722\\nBDR,Igor I Sikorsky Memorial,Bridgeport,CT,USA,41.16348417,-73.12617861\\nBDX,Broadus,Broadus,MT,USA,45.433325,-105.4172133\\nBED,Laurence G Hanscom,Bedford,MA,USA,42.46995306,-71.28903\\nBEH,Southwest Michigan Regional,Benton Harbor,MI,USA,42.12858333,-86.4285\\nBET,Bethel,Bethel,AK,USA,60.77977639,-161.8379975\\nBFD,Bradford Reg,Bradford,PA,USA,41.80306778,-78.64012083\\nBFF,Scotts Bluff County,Scottsbluff,NE,USA,41.87402778,-103.5956389\\nBFI,Boeing Field/King County Intl,Seattle,WA,USA,47.52998917,-122.3019561\\nBFK,Buffalo Municipal,Buffalo,OK,USA,36.86330139,-99.61873056\\nBFL,Meadows,Bakersfield,CA,USA,35.43359806,-119.0567681\\nBFM,Mobile Downtown,Mobile,AL,USA,30.62646944,-88.06799861\\nBFR,Virgil I Grissom Municipal,Bedford,IN,USA,38.84003306,-86.44536361\\nBFW,Silver Bay Municipal,Silver Bay,MN,USA,47.24902778,-91.41558333\\nBGD,Hutchinson County,Borger,TX,USA,35.70004194,-101.3940536\\nBGE,Decatur County Industrial Airpark,Bainbridge,GA,USA,30.97152778,-84.63744444\\nBGF,Winchester Municipal,Winchester,TN,USA,35.17753417,-86.06616722\\nBGM,Binghamton Regional,Binghamton,NY,USA,42.20848278,-75.97961361\\nBGQ,Big Lake Strip Nr 2,Big Lake,AK,USA,61.53556806,-149.8138975\\nBGR,Bangor International,Bangor,ME,USA,44.80744444,-68.82813889\\nBHB,Hancock Co-Bar Harbor,Bar Harbor,ME,USA,44.44969444,-68.3615\\nBHC,Baxley Municipal,Baxley,GA,USA,31.71383333,-82.39377778\\nBHK,Baker Muni,Baker City,MT,USA,46.34763639,-104.2594475\\nBHM,Birmingham International,Birmingham,AL,USA,33.56294306,-86.75354972\\nBID,Block Island State,Block Island,RI,USA,41.16811889,-71.57784167\\nBIE,Beatrice Municipal,Beatrice,NE,USA,40.30127778,-96.75411111\\nBIG,Allen AAF,Delta Junction,AK,USA,63.99454722,-145.7216417\\nBIH,Bishop,Bishop,CA,USA,37.37309556,-118.3636089\\nBIL,Billings Logan Intl,Billings,MT,USA,45.8076625,-108.5428611\\nBIS,Bismarck Municipal,Bismarck,ND,USA,46.77411111,-100.7467222\\nBIV,Tulip City,Holland,MI,USA,42.74316667,-86.10502778\\nBJC,Jeffco,Denver,CO,USA,39.90878667,-105.1172158\\nBJI,Bemidji-Beltrami County,Bemidji,MN,USA,47.50942417,-94.93372333\\nBJJ,Wayne County,Wooster,OH,USA,40.87480556,-81.88825\\nBKD,Breckenridge Stephens County,Breckenridge,TX,USA,32.71904694,-98.89099972\\nBKE,Baker City Municipal,Baker City,OR,USA,44.83733333,-117.8090833\\nBKL,Burke Lakefront,Cleveland,OH,USA,41.5175,-81.68333333\\nBKV,Hernando County,Brooksville,FL,USA,28.47359722,-82.45542139\\nBKW,Raleigh Cty Memorial,Beckley,WV,USA,37.78732833,-81.12416417\\nBKX,Brookings Municipal,Brookings,SD,USA,44.30483333,-96.81694444\\nBLF,Mercer Cty,Bluefield,WV,USA,37.29579944,-81.20769056\\nBLH,Blythe,Blythe,CA,USA,33.61916278,-114.7168764\\nBLI,Bellingham Intl,Bellingham,WA,USA,48.79275,-122.5375278\\nBLM,Allaire Arpt,Belmar/Farmingdale,NJ,USA,40.18691806,-74.12488694\\nBLV,Scott AFB/MidAmerica,Belleville/St. Louis,IL,USA,38.54517861,-89.83518444\\nBMC,Brigham City,Brigham City,UT,USA,41.55239139,-112.0622625\\nBMG,Monroe County,Bloomington,IN,USA,39.14602139,-86.61668278\\nBMI,Central Illinois Regional,Bloomington,IL,USA,40.47798556,-88.91595278\\nBML,Berlin Municipal,Berlin,NH,USA,44.57537278,-71.17593167\\nBMQ,Burnet Muni-Kate Craddock,Burnet,TX,USA,30.73894444,-98.23858333\\nBMT,Beaumont Municipal,Beaumont,TX,USA,30.07044111,-94.21553806\\nBNA,Nashville International,Nashville,TN,USA,36.12447667,-86.67818222\\nBNF,Baranof Warm Springs SPB,Baranof Warm Springs,AK,USA,57.08882583,-134.8331414\\nBNG,Banning Municipal,Banning,CA,USA,33.92307111,-116.8505756\\nBNL,Barnwell County,Barnwell,SC,USA,33.25777778,-81.38833333\\nBNO,Burns Muni,Burns,OR,USA,43.59212778,-118.9549789\\nBNW,Boone Municipal,Boone,IA,USA,42.04956944,-93.84757222\\nBOI,Boise Air Terminal,Boise,ID,USA,43.56444444,-116.2227778\\nBOK,Brookings,Brookings,OR,USA,42.07455556,-124.2900939\\nBOS,Gen Edw L Logan Intl,Boston,MA,USA,42.3643475,-71.00517917\\nBOW,Bartow Municipal,Bartow,FL,USA,27.9433575,-81.78344167\\nBPI,Big Piney-Marbleton,Big Piney,WY,USA,42.58506972,-110.1111531\\nBPK,Baxter County Regional,Mountain Home,AR,USA,36.36894194,-92.47052806\\nBPT,Southeast Texas Regional,Beaumont/Port Arthur,TX,USA,29.95083333,-94.02069444\\nBQK,Glynco Jetport,Brunswick,GA,USA,31.25902778,-81.46630556\\nBQN,Rafael Hernandez,Aguadilla,PR,USA,18.49486111,-67.12944444\\nBRD,Brainerd-Crow Wing County Regional,Brainerd,MN,USA,46.39785806,-94.1372275\\nBRL,Burlington Municipal,Burlington,IA,USA,40.783225,-91.12550556\\nBRO,Brownsville/S.Padre Island International,Brownsville,TX,USA,25.90683333,-97.42586111\\nBRW,Wiley Post Will Rogers Memorial,Barrow,AK,USA,71.2854475,-156.7660019\\nBRY,Samuels,Bardstown,KY,USA,37.81432167,-85.49963806\\nBST,Belfast Municipal,Belfast,ME,USA,44.40966667,-69.01225\\nBTI,Barter Island,Kaktovik,AK,USA,70.13390278,-143.5770444\\nBTL,W K Kellogg Regional,Battle Creek,MI,USA,42.30727806,-85.25147972\\nBTM,Bert Mooney,Butte,MT,USA,45.95479528,-112.49746\\nBTN,Britton Municipal,Britton,SD,USA,45.81522222,-97.74313889\\nBTP,Butler Cty,Butler,PA,USA,40.77692611,-79.94972417\\nBTR,\\\"Baton Rouge Metropolitan, Ryan\\\",Baton Rouge,LA,USA,30.53316083,-91.14963444\\nBTT,Bettles,Bettles,AK,USA,66.91528667,-151.5280556\\nBTV,Burlington International,Burlington,VT,USA,44.47300361,-73.1503125\\nBTY,Beatty,Beatty,NV,USA,36.86105722,-116.7870036\\nBUB,Cram,Burwell,NE,USA,41.77669444,-99.14975\\nBUF,Buffalo Niagara Intl,Buffalo,NY,USA,42.94052472,-78.73216667\\nBUM,Butler Memorial,Butler,MO,USA,38.28977028,-94.34012694\\nBUR,Burbank-Glendale-Pasadena,Burbank,CA,USA,34.20061917,-118.3584969\\nBUY,Burlington Municipal,Burlington,NC,USA,36.04854333,-79.47488694\\nBVI,Beaver County,Beaver Falls,PA,USA,40.77248083,-80.39142556\\nBVK,Buckland,Buckland,AK,USA,65.98228611,-161.1519778\\nBVN,Albion Municipal,Albion,NE,USA,41.72857778,-98.05575972\\nBVO,Bartlesville Municipal,Bartlesville,OK,USA,36.76247611,-96.01115167\\nBVS,Skagit Regional/Bay View,Burlington/Mount Vernon,WA,USA,48.47088889,-122.4208611\\nBVX,Batesville Regional,Batesville,AR,USA,35.726105,-91.64736083\\nBVY,Beverly Municipal,Beverly,MA,USA,42.58417111,-70.91651833\\nBWC,Brawley Municipal,Brawley,CA,USA,32.9931,-115.5169325\\nBWD,Brownwood Municipal,Brownwood,TX,USA,31.79362222,-98.95649528\\nBWG,Bowling Green-Warren County,Bowling Green,KY,USA,36.96451667,-86.41967917\\nBWI,Baltimore-Washington International,Baltimore,MD,USA,39.17540167,-76.66819833\\nBWP,Harry Stern,Wahpeton,ND,USA,46.24640083,-96.6056825\\nBXA,George R Carr Memorial,Bogalusa,LA,USA,30.81368639,-89.86496444\\nBXG,Burke County,Waynesboro,GA,USA,33.04093056,-82.00397917\\nBXK,Buckeye Municipal,Buckeye,AZ,USA,33.42088556,-112.6863\\nBYA,Boundary,Boundary,AK,USA,64.07830278,-141.113375\\nBYG,Johnson County,Buffalo,WY,USA,44.38108528,-106.7217897\\nBYI,Burley Municipal,Burley,ID,USA,42.54260361,-113.7715442\\nBZN,Gallatin,Bozeman,MT,USA,45.77690139,-111.1530072\\nC00,Mercer County,Aledo,IL,USA,41.248645,-90.73708361\\nC05,Chenega Bay,Chenega,AK,USA,60.07730556,-147.9918889\\nC09,Morris Municipal,Morris,IL,USA,41.42541667,-88.41869444\\nC15,Pekin Municipal,Pekin,IL,USA,40.48820611,-89.67591083\\nC17,Marion,Marion,IA,USA,42.03111083,-91.52934222\\nC18,Frankfort,Chicago/Frankfort,IL,USA,41.4775,-87.84047222\\nC25,Waverly Municipal,Waverly,IA,USA,42.7419525,-92.50793528\\nC29,Morey,Middleton,WI,USA,43.11424444,-89.53073222\\nC34,Gibson City Municipal,Gibson City,IL,USA,40.48578389,-88.2672725\\nC35,Reedsburg Municipal,Reedsburg,WI,USA,43.52589944,-89.98322194\\nC47,Portage Municipal,Portage,WI,USA,43.5600925,-89.48309278\\nC52,Burlington Municipal,Burlington,WI,USA,42.69056389,-88.30464\\nC56,Sanger,Chicago/Monee,IL,USA,41.37756167,-87.68137528\\nC62,Kendallville Municipal,Kendallville,IN,USA,41.47271639,-85.26080833\\nC65,Plymouth Municipal,Plymouth,IN,USA,41.36513333,-86.30050417\\nC66,Monmouth Municipal,Monmouth,IL,USA,40.92970444,-90.63110722\\nC71,Crosby Municipal,Crosby,MS,USA,31.29600472,-91.05288167\\nC73,Dixon Muni-Charles R Walgreen,Dixon,IL,USA,41.83369889,-89.44621333\\nC75,Marshall County,Lacon,IL,USA,41.01928583,-89.38642222\\nC77,Poplar Grove,Poplar Grove,IL,USA,42.32268639,-88.83651833\\nC80,New Coalinga Municipal,Coalinga,CA,USA,36.16313889,-120.2938139\\nC81,Campbell,Chicago/Round Lake Park,IL,USA,42.32461111,-88.07408806\\nC83,Byron,Byron,CA,USA,37.8284525,-121.6258219\\nC91,Dowagiac Municipal,Dowagiac,MI,USA,41.99293417,-86.1280125\\nCAD,Wexford County,Cadillac,MI,USA,44.27531333,-85.41892694\\nCAE,Columbia Metropolitan,Columbia,SC,USA,33.93884,-81.11953944\\nCAG,Craig-Moffat,Craig,CO,USA,40.49522139,-107.5216467\\nCAK,Akron-Canton Regional,Akron,OH,USA,40.91631194,-81.44246556\\nCAO,Clayton Municipal Airpark,Clayton,NM,USA,36.44585972,-103.1546583\\nCAR,Caribou Municipal,Caribou,ME,USA,46.8715,-68.01791667\\nCAV,Clarion Municipal,Clarion,IA,USA,42.74194389,-93.75890944\\nCBE,Cumberland Regional,Cumberland,MD,USA,39.61541667,-78.76086361\\nCBF,Council Bluffs Municipal,Council Bluffs,IA,USA,41.25947222,-95.75997222\\nCBG,Cambridge Municipal,Cambridge,MN,USA,45.55854639,-93.26464361\\nCBK,Shaltz,Colby,KS,USA,39.42753083,-101.0465719\\nCCB,Cable,Upland,CA,USA,34.11154056,-117.6875897\\nCCO,Newnan-Coweta County,Newnan,GA,USA,33.31208333,-84.77027778\\nCCR,Buchanan,Concord,CA,USA,37.98965639,-122.0568972\\nCCY,Charles City Municipal,Charles City,IA,USA,43.07260861,-92.61077833\\nCDB,Cold Bay,Cold Bay,AK,USA,55.20559972,-162.7242628\\nCDC,Cedar City Muni,Cedar City,UT,USA,37.70097028,-113.098575\\nCDH,Harrell,Camden,AR,USA,33.62279917,-92.76339528\\nCDI,Cambridge Municipal,Cambridge,OH,USA,39.97504417,-81.57759528\\nCDK,George T Lewis,Cedar Key,FL,USA,29.137745,-83.04984361\\nCDN,Woodward,Camden,SC,USA,34.28358333,-80.56486111\\nCDR,Chadron Municipal,Chadron,NE,USA,42.83755556,-103.0954167\\nCDV,Merle K (Mudhole) Smith,Cordova,AK,USA,60.49183389,-145.4776503\\nCDW,Essex Cty Arpt,Caldwell,NJ,USA,40.87522278,-74.28135667\\nCEC,Jack McNamara,Crescent City,CA,USA,41.78015722,-124.2365333\\nCEF,Westover AFB,Chicopee,MA,USA,42.19826389,-72.53425833\\nCEK,Crete Municipal,Crete,NE,USA,40.61791667,-96.92488889\\nCEM,Central,Central,AK,USA,65.57380667,-144.7832908\\nCEU,Oconee County Regional,Clemson,SC,USA,34.67205556,-82.88644444\\nCEV,Mettel,Connersville,IN,USA,39.69803139,-85.13124528\\nCEW,Bob Sikes,Crestview,FL,USA,30.77883333,-86.52211111\\nCEY,Kyle-Oakley,Murray,KY,USA,36.66458333,-88.37277722\\nCEZ,Cortez Muni,Cortez,CO,USA,37.30299778,-108.6280658\\nCFD,Coulter,Bryan,TX,USA,30.71569444,-96.33136111\\nCFJ,Crawfordsville Municipal,Crawfordsville,IN,USA,39.97562861,-86.91986361\\nCFK,Chefornak,Chefornak,AK,USA,60.14922556,-164.2856325\\nCFT,Greenlee County,Clifton-Morenci,AZ,USA,32.95284306,-109.2103453\\nCFV,Coffeyville Municipal,Coffeyville,KS,USA,37.0940475,-95.57189417\\nCGA,Craig SPB,Craig,AK,USA,55.47883139,-133.1478011\\nCGC,Crystal River,Crystal River,FL,USA,28.86727778,-82.57130556\\nCGE,Cambridge-Dorchester,Cambridge,MD,USA,38.53930556,-76.03036111\\nCGF,Cuyahoga County,Cleveland,OH,USA,41.56512389,-81.48635389\\nCGI,Cape Girardeau Municipal,Cape Girardeau,MO,USA,37.22531694,-89.57075167\\nCGS,College Park,College Park,MD,USA,38.98058333,-76.92230556\\nCGX,Chicago Meigs,Chicago,IL,USA,41.85884389,-87.60791167\\nCGZ,Casa Grande Municipal,Casa Grande,AZ,USA,32.95488889,-111.7668333\\nCHA,Lovell,Chattanooga,TN,USA,35.03526833,-85.20378778\\nCHD,Chandler Municipal,Chandler,AZ,USA,33.26908333,-111.8111389\\nCHK,Chickasha Municipal,Chickasha,OK,USA,35.09614694,-97.96618361\\nCHO,Charlottesville-Albermarle,Charlottesville,VA,USA,38.13863889,-78.45286111\\nCHP,Circle Hot Springs,Circle Hot Springs,AK,USA,65.48547222,-144.6107836\\nCHS,Charleston AFB/International,Charleston,SC,USA,32.89864639,-80.04050583\\nCHT,Chillicothe Municipal,Chillicothe,MO,USA,39.78215278,-93.49568056\\nCHU,Houston County,Caledonia,MN,USA,43.59635861,-91.50394639\\nCIC,Chico Municipal,Chico,CA,USA,39.79538278,-121.8584231\\nCID,Eastern Iowa,Cedar Rapids,IA,USA,41.88458833,-91.71087222\\nCII,Choteau,Choteau,MT,USA,47.82528056,-112.1662136\\nCIK,Chalkyitsik,Chalkyitsik,AK,USA,66.64969083,-143.7359492\\nCIN,Arthur N Neu,Carroll,IA,USA,42.04619444,-94.789\\nCIR,Cairo,Cairo,IL,USA,37.06447222,-89.21961111\\nCIU,Chippewa County International,Sault Ste. Marie,MI,USA,46.25075194,-84.47238528\\nCJR,Culpeper Regional,Culpeper,VA,USA,38.5267075,-77.85885528\\nCJX,Crooked Creek,Crooked Creek,AK,USA,61.86902194,-158.1371178\\nCKB,Benedum,Clarksburg,WV,USA,39.29663889,-80.22808333\\nCKC,Grand Marais/Cook County,Grand Marais,MN,USA,47.83830556,-90.38313889\\nCKF,Crisp County - Cordele,Cordele,GA,USA,31.98883333,-83.77391667\\nCKI,Williamsburg County,Kingstree,SC,USA,33.71722222,-79.85697222\\nCKM,Fletcher,Clarksdale,MS,USA,34.29971,-90.51231611\\nCKN,Crookston Muni Kirkwood,Crookston,MN,USA,47.84169417,-96.62162028\\nCKP,Cherokee Municipal,Cherokee,IA,USA,42.73147222,-95.55613889\\nCKU,Cordova Muni,Cordova,AK,USA,60.54390333,-145.7267042\\nCKV,Outlaw,Clarksville,TN,USA,36.62188083,-87.41495361\\nCKX,Chicken,Chicken,AK,USA,64.07133833,-141.9522792\\nCLD,MC Clellan-Palomar Airport,NA,NA,USA,33.127231,-117.278727\\nCLE,Cleveland-Hopkins Intl,Cleveland,OH,USA,41.41089417,-81.84939667\\nCLI,Clintonville Municipal,Clintonville,WI,USA,44.61381306,-88.73126667\\nCLK,Clinton Municipal,Clinton,OK,USA,35.53832778,-98.932695\\nCLL,Easterwood,College Station,TX,USA,30.58858944,-96.36382417\\nCLM,William R Fairchild Intl,Port Angeles,WA,USA,48.12019444,-123.4996944\\nCLP,Clarks Point,Clarks Point,AK,USA,58.84230472,-158.5452331\\nCLS,Chehalis-Centralia,Chehalis,WA,USA,46.67649194,-122.9792967\\nCLT,Charlotte/Douglas International,Charlotte,NC,USA,35.21401111,-80.94312583\\nCLW,Clearwater Air Park,Clearwater,FL,USA,27.97668639,-82.75874028\\nCMA,Camarillo,Camarillo,CA,USA,34.21375472,-119.0943264\\nCMH,Port Columbus Intl,Columbus,OH,USA,39.99798528,-82.89188278\\nCMI,University of Illinois-Willard,Champaign/Urbana,IL,USA,40.03925,-88.27805556\\nCMX,Houghton County Memorial,Hancock,MI,USA,47.16841722,-88.48906083\\nCMY,Sparta/Fort McCoy,Sparta,WI,USA,43.95834806,-90.7378975\\nCNC,Chariton Municipal,Chariton,IA,USA,41.01962389,-93.35968028\\nCNH,Claremont Municipal,Claremont,NH,USA,43.37043194,-72.36867667\\nCNK,Blosser Municipal,Concordia,KS,USA,39.54925139,-97.65231667\\nCNM,Cavern City Air Terminal,Carlsbad,NM,USA,32.33747222,-104.2632778\\nCNO,Chino,Chino,CA,USA,33.97469444,-117.6366111\\nCNP,Billy G Ray,Chappell,NE,USA,41.07747222,-102.4640556\\nCNU,Chanute Martin Johnson,Chanute,KS,USA,37.66879722,-95.48506444\\nCNW,TSTC-Waco,Waco,TX,USA,31.63783139,-97.07413889\\nCNY,Canyonlands,Moab,UT,USA,38.75495611,-109.7548439\\nCOD,Yellowstone Regional,Cody,WY,USA,44.52019417,-109.0237961\\nCOE,Coeur D'Alene Air Terminal,Coeur D'Alene,ID,USA,47.77429167,-116.8196231\\nCOI,Merritt Island,Merritt Island,FL,USA,28.34158944,-80.6854975\\nCOM,Coleman Municipal,Coleman,TX,USA,31.84113889,-99.40361111\\nCON,Concord Municipal,Concord,NH,USA,43.20273278,-71.50228556\\nCOQ,Cloquet-Carlton County,Cloquet,MN,USA,46.70016833,-92.50552861\\nCOS,City of Colorado Springs Muni,Colorado Springs,CO,USA,38.80580556,-104.70025\\nCOT,Cotulla-Lasalle County,Cotulla,TX,USA,28.45825583,-99.22016389\\nCOU,Columbia Regional,Columbia,MO,USA,38.81809306,-92.21962917\\nCPC,Columbus County Municipal,Whiteville,NC,USA,34.27287278,-78.71499278\\nCPK,Chesapeake Municipal,Norfolk,VA,USA,36.66561833,-76.32066389\\nCPM,Compton/Woodley,Compton,CA,USA,33.89001611,-118.2436831\\nCPR,Natrona County Intl,Casper,WY,USA,42.90835556,-106.4644661\\nCPS,St. Louis Downtown,Cahokia/St. Louis,IL,USA,38.57072444,-90.15622111\\nCPX,Benjamin Rivera Noriega,Isla De Culebra,PR,USA,18.31328917,-65.30432444\\nCQA,Lakefield,Celina,OH,USA,40.48408333,-84.56011111\\nCQB,Chandler Municipal,Chandler,OK,USA,35.72381556,-96.82027306\\nCQX,Chatham Municipal,Chatham,MA,USA,41.68840028,-69.98952417\\nCRC,Circle City,Circle,AK,USA,65.83049389,-144.0758128\\nCRE,Grand Strand,North Myrtle Beach,SC,USA,33.81175,-78.72394444\\nCRG,Craig Municipal,Jacksonville,FL,USA,30.33633333,-81.51444444\\nCRO,Corcoran,Corcoran,CA,USA,36.10245111,-119.5948469\\nCRP,Corpus Christi International,Corpus Christi,TX,USA,27.77036083,-97.50121528\\nCRQ,McClellan-Palomar,Carlsbad,CA,USA,33.12822222,-117.2802222\\nCRS,C Davis Campbell -Corsicana Muni,Corsicana,TX,USA,32.02748861,-96.39803611\\nCRT,Crossett Municipal,Crossett,AR,USA,33.17833278,-91.88018806\\nCRW,Yeager,Charleston,WV,USA,38.37315083,-81.59318972\\nCRX,Roscoe Turner,Corinth,MS,USA,34.91496778,-88.60348361\\nCSB,Cambridge Municipal,Cambridge,NE,USA,40.30658333,-100.1620833\\nCSG,Columbus Metropolitan,Columbus,GA,USA,32.51633333,-84.93886111\\nCSM,Clinton-Sherman,Clinton,OK,USA,35.33983917,-99.20049944\\nCSQ,Creston Municipal,Creston,IA,USA,41.02146139,-94.36331917\\nCSV,Crossville Memorial,Crossville,TN,USA,35.95129194,-85.08497806\\nCTB,Cut Bank Muni,Cut Bank,MT,USA,48.60835444,-112.3761464\\nCTJ,West Georgia Regional,Carrollton,GA,USA,33.63102778,-85.15202778\\nCTK,Ingersoll,Canton,IL,USA,40.56909444,-90.07484\\nCTY,Cross City,Cross City,FL,USA,29.63552778,-83.10475\\nCTZ,Sampson County,Clinton,NC,USA,34.97561194,-78.36461528\\nCUB,Columbia Owens Downtown,Columbia,SC,USA,33.97047222,-80.99525\\nCUH,Cushing Municipal,Cushing,OK,USA,35.949925,-96.77305278\\nCUL,Carmi Municipal,Carmi,IL,USA,38.08947917,-88.12306111\\nCUT,Custer County,Custer,SD,USA,43.73331611,-103.6176947\\nCVG,Cincinnati Northern Kentucky Intl,Covington,KY,USA,39.04614278,-84.6621725\\nCVK,Sharp County Regional,Ash Flat,AR,USA,36.26487139,-91.56264111\\nCVN,Clovis Municipal,Clovis,NM,USA,34.42513889,-103.0792778\\nCVO,Corvallis Muni,Corvallis,OR,USA,44.49719361,-123.2898297\\nCVX,Charlevoix Municipal,Charlevoix,MI,USA,45.30477778,-85.27477778\\nCWA,Central Wisconsin,Mosinee,WI,USA,44.77761917,-89.66677944\\nCWF,Chennault International,Lake Charles,LA,USA,30.21059167,-93.14318944\\nCWI,Clinton Municipal,Clinton,IA,USA,41.8311125,-90.32913056\\nCWV,Claxton-Evans County,Claxton,GA,USA,32.19505556,-81.86955556\\nCXC,Chitina,Chitina,AK,USA,61.58285917,-144.4270969\\nCXE,Chase City Municipal,Chase City,VA,USA,36.78833556,-78.50155361\\nCXF,Coldfoot,Coldfoot,AK,USA,67.25163417,-150.2065672\\nCXL,Calexico International,Calexico,CA,USA,32.66950333,-115.5133281\\nCXO,Montgomery County,Conroe,TX,USA,30.35183333,-95.4144675\\nCXP,Carson,Carson City,NV,USA,39.19222972,-119.7343611\\nCXU,Camilla-Mitchell County,Camilla,GA,USA,31.21291667,-84.23680556\\nCXY,Capital City,Harrisburg,PA,USA,40.21713889,-76.85147222\\nCYO,Pickaway County Memorial,Circleville,OH,USA,39.51600611,-82.98215361\\nCYS,Cheyenne,Cheyenne,WY,USA,41.1557225,-104.8118381\\nCYW,Clay Center Municipal,Clay Center,KS,USA,39.38713889,-97.15721417\\nCZD,Cozad Municipal,Cozad,NE,USA,40.86911111,-100.0042222\\nCZG,Tri-Cities,Endicott,NY,USA,42.07853583,-76.09633306\\nCZL,Tom B David,Calhoun,GA,USA,34.45678278,-84.93949944\\nCZN,Chisana,Chisana,AK,USA,62.07118972,-142.0483742\\nCZT,Dimmit County,Carrizo Springs,TX,USA,28.52225111,-99.82363444\\nD04,Bowman Municipal,Bowman,ND,USA,46.18699111,-103.4280806\\nD05,Garrison Municipal,Garrison,ND,USA,47.65594444,-101.4372222\\nD07,Faith Municipal,Faith,SD,USA,45.03609417,-102.0198803\\nD09,Bottineau Municipal,Bottineau,ND,USA,48.83039167,-100.4171361\\nD19,Quentin Aanenson,Luverne,MN,USA,43.62080278,-96.21864028\\nD22,Angola,Angola,NY,USA,42.66010111,-78.99115556\\nD25,Manitowish Waters,Manitowish Waters,WI,USA,46.12197222,-89.88233333\\nD38,Canandaiga,Canandaiga,NY,USA,42.90718611,-77.32162639\\nD42,Springfield Municipal,Springfield,MN,USA,44.23107,-94.99893444\\nD50,Crosby Municipal,Crosby,ND,USA,48.92851556,-103.2972514\\nD55,Robertson,Langdon,ND,USA,48.75301778,-98.39333694\\nD57,Glen Ullin Municipal,Glen Ullin,ND,USA,46.81278306,-101.8601556\\nD60,Tioga Municipal,Tioga,ND,USA,48.3805325,-102.8979853\\nD73,Monroe-Walton County,Monroe,GA,USA,33.78149889,-83.69355389\\nD77,Lancaster,Lancaster,NY,USA,42.92228111,-78.61224889\\nD87,Harbor Springs,Harbor Springs,MI,USA,45.42556528,-84.91338389\\nD95,Dupont-Lapeer,Lapeer,MI,USA,43.06703333,-83.27244444\\nD98,Romeo,Romeo,MI,USA,42.79699083,-82.97526583\\nDAB,Daytona Beach International,Daytona Beach,FL,USA,29.17991667,-81.05805556\\nDAG,Barstow-Daggett,Daggett,CA,USA,34.85371333,-116.7866875\\nDAL,Dallas Love,Dallas,TX,USA,32.84711389,-96.85177222\\nDAN,Danville Regional,Danville,VA,USA,36.57286111,-79.33611111\\nDAW,Skyhaven,Rochester,NH,USA,43.28406194,-70.92925472\\nDAY,James M Cox Dayton Intl,Dayton,OH,USA,39.90237583,-84.219375\\nDBN,\\\"W. H. \\\"\\\"Bud\\\"\\\" Barron\\\",Dublin,GA,USA,32.56445806,-82.98525556\\nDBQ,Dubuque Municipal,Dubuque,IA,USA,42.40295944,-90.70916722\\nDCA,Ronald Reagan Washington National,Arlington,VA,USA,38.85208333,-77.03772222\\nDCK,Dahl Creek,Dahl Creek,AK,USA,66.94333806,-156.9046739\\nDCU,Pryor Regional,Decatur,AL,USA,34.65264667,-86.94536778\\nDCY,Daviess County,Washington,IN,USA,38.70042333,-87.12973222\\nDDC,Dodge City Regional,Dodge City,KS,USA,37.76312194,-99.96542389\\nDDH,William H. Morse State,Bennington,VT,USA,42.8913325,-73.2464075\\nDEC,Decatur,Decatur,IL,USA,39.8345625,-88.86568917\\nDED,Deland Municipal-Taylor,Deland,FL,USA,29.06698056,-81.28394167\\nDEE,Deering,Deering,AK,USA,66.06820583,-162.7666028\\nDEH,Decorah Municipal,Decorah,IA,USA,43.27550139,-91.73937389\\nDEN,Denver Intl,Denver,CO,USA,39.85840806,-104.6670019\\nDEQ,J Lynn Helms Sevier County,De Queen,AR,USA,34.04699556,-94.39936556\\nDET,Detroit City,Detroit,MI,USA,42.40919444,-83.00986111\\nDEW,Deer Park,Deer Park,WA,USA,47.96663889,-117.4266667\\nDFI,Defiance Memorial,Defiance,OH,USA,41.3375,-84.42880556\\nDFW,Dallas-Fort Worth International,Dallas-Fort Worth,TX,USA,32.89595056,-97.0372\\nDGW,Converse County,Douglas,WY,USA,42.79725,-105.3857361\\nDHN,Dothan,Dothan,AL,USA,31.32133917,-85.44962889\\nDHT,Dalhart Municipal,Dalhart,TX,USA,36.022585,-102.5472775\\nDIK,Dickinson Municipal,Dickinson,ND,USA,46.79738889,-102.8019528\\nDKB,Dekalb-Taylor Municipal,Dekalb,IL,USA,41.93188111,-88.70829861\\nDKK,Dunkirk Municipal,Dunkirk,NY,USA,42.49333528,-79.27204167\\nDKX,Knoxville Downtown Island,Knoxville,TN,USA,35.96383361,-83.87365389\\nDLG,Dillingham,Dillingham,AK,USA,59.0454125,-158.5033389\\nDLH,Duluth International,Duluth,MN,USA,46.84209028,-92.19364861\\nDLL,Baraboo - Wisconsin Dells,Baraboo,WI,USA,43.52195389,-89.77090222\\nDLN,Dillon,Dillon,MT,USA,45.25536056,-112.5525067\\nDLO,Delano Municipal,Delano,CA,USA,35.74558056,-119.2365039\\nDLS,Columbia Gorge Regional,The Dalles,OR,USA,45.61854556,-121.1673439\\nDLZ,Delaware Municipal,Delaware,OH,USA,40.27970139,-83.11480167\\nDM2,Diomede Heliport,Diomede,AK,USA,65.75861111,-168.9530556\\nDMN,Deming Municipal,Deming,NM,USA,32.26230917,-107.7206397\\nDMO,Sedalia Memorial,Sedalia,MO,USA,38.70688889,-93.17611111\\nDMW,Carroll County,Westminster,MD,USA,39.60827778,-77.00766667\\nDNL,Daniel,Augusta,GA,USA,33.46663667,-82.03933917\\nDNN,Dalton Municipal,Dalton,GA,USA,34.72174833,-84.86910806\\nDNS,Denison Municipal,Denison,IA,USA,41.9864325,-95.38072083\\nDNV,Vermilion County,Danville,IL,USA,40.19946861,-87.59553528\\nDOV,Dover Air Force Base,Dover,DE,USA,39.1301125,-75.46631028\\nDPA,Du Page,Chicago/West Chicago,IL,USA,41.90688333,-88.24841722\\nDPL,P B Raiford,Kenansville,NC,USA,35.00006444,-77.981695\\nDQH,Douglas Municipal,Douglas,GA,USA,31.47780833,-82.85961556\\nDRI,Beauregard Parish,De Ridder,LA,USA,30.83152778,-93.33963889\\nDRO,Durango-La Plata County,Durango,CO,USA,37.15151667,-107.7537692\\nDRT,Del Rio International,Del Rio,TX,USA,29.37181222,-100.9232339\\nDSM,Des Moines International,Des Moines,IA,USA,41.53493306,-93.66068222\\nDSV,Dansville Muni,Dansville,NY,USA,42.57089972,-77.71305083\\nDTA,Delta Municipal,Delta,UT,USA,39.38328861,-112.5096683\\nDTL,Detroit Lakes -Wething,Detroit Lakes,MN,USA,46.82520861,-95.8856875\\nDTN,Shreveport Downtown,Shreveport,LA,USA,32.54021889,-93.7450225\\nDTO,Denton Municipal,Denton,TX,USA,33.20072167,-97.19797722\\nDTS,Destin-Ft. Walton Beach,Destin,FL,USA,30.40006111,-86.47147722\\nDTW,Detroit Metropolitan-Wayne County,Detroit,MI,USA,42.21205889,-83.34883583\\nDUA,Eaker,Durant,OK,USA,33.942265,-96.39451806\\nDUC,Halliburton,Duncan,OK,USA,34.470875,-97.95986111\\nDUG,Bisbee Douglas International,Douglas Bisbee,AZ,USA,31.46902778,-109.6036667\\nDUJ,Du Bois-Jefferson Cty,Du Bois,PA,USA,41.17826611,-78.89869778\\nDUT,Unalaska,Unalaska,AK,USA,53.90013889,-166.5435\\nDUX,Moore County,Dumas,TX,USA,35.85792833,-102.0130978\\nDUY,Kongiganak,Kongiganak,AK,USA,59.95950583,-162.8817231\\nDVK,Stuart Powell,Danville,KY,USA,37.57791667,-84.76969444\\nDVL,Devils Lake Municipal-Knoke,Devils Lake,ND,USA,48.11424528,-98.90877833\\nDVN,Davenport Municipal,Davenport,IA,USA,41.6102775,-90.58832528\\nDVO,Gnoss,Novato,CA,USA,38.14351944,-122.5572167\\nDVT,Phoenix-Deer Valley,Phoenix,AZ,USA,33.68831667,-112.0825614\\nDWH,David Wayne Hooks Memorial,Houston,TX,USA,30.06186111,-95.55277778\\nDWU,Ashland-Boyd County,Ashland,KY,USA,38.5545,-82.738\\nDXE,Dexter Municipal,Dexter,MO,USA,36.77747,-89.94117333\\nDXR,Danbury Municipal,Danbury,CT,USA,41.37153528,-73.48219056\\nDXX,Madison-Lac Qui Parle County,Madison,MN,USA,44.98624,-96.17773611\\nDYB,Summerville,Summerville,SC,USA,33.06344444,-80.27933333\\nDYL,Doylestown,Doylestown,PA,USA,40.33305028,-75.12233833\\nDYR,Dyersburg Municipal,Dyersburg,TN,USA,35.99850694,-89.40608333\\nDYT,Sky Harbor,Duluth,MN,USA,46.72186083,-92.04343889\\nE01,Monahans-Roy Hurd Memorial,Monahans,TX,USA,31.58246583,-102.9090428\\nE04,Eunice,Eunice,NM,USA,32.45679139,-103.2404708\\nE05,Hatch Muni,Hatch,NM,USA,32.66106083,-107.1979339\\nE06,Lea County-Zip Franklin Memorial,Lovington,NM,USA,32.95394444,-103.4087778\\nE07,Lea County/Tatum,Tatum,NM,USA,33.26122278,-103.2768939\\nE11,Andrews County,Andrews,TX,USA,32.33111111,-102.5295278\\nE15,Graham Municipal,Graham,TX,USA,33.11022222,-98.55527861\\nE19,Gruver Municipal,Gruver,TX,USA,36.23372611,-101.4321894\\nE24,Whiteriver,Whiteriver,AZ,USA,33.81255056,-109.9867658\\nE25,Wickenburg Municipal,Wickenburg,AZ,USA,33.96891833,-112.7985128\\nE26,Lea County,Jal,NM,USA,32.13107833,-103.1548506\\nE35,Fabens,Fabens,TX,USA,31.51567306,-106.1471978\\nE38,Alpine-Casparis Municipal,Alpine,TX,USA,30.38422222,-103.6835833\\nE42,Spearman Municipal,Spearman,TX,USA,36.221,-101.1945\\nE51,Bagdad,Bagdad,AZ,USA,34.59585278,-113.170195\\nE52,Oldham County,Vega,TX,USA,35.23199833,-102.3990931\\nE60,Eloy Municipal,Eloy,AZ,USA,32.80700583,-111.58679\\nE63,Gila Bend Municipal,Gila Bend,AZ,USA,32.95810083,-112.6782181\\nE80,Alexander Municipal,Belen,NM,USA,34.64519778,-106.8336958\\nE89,Conchas State Park,Conchas Dam,NM,USA,35.36671583,-104.1880314\\nE91,Chinle Municipal,Chinle,AZ,USA,36.11088056,-109.5754222\\nE94,Glenwood-Catron County,Glenwood,NM,USA,33.35283972,-108.8672858\\nE95,Benson Municipal,Benson,AZ,USA,31.99972222,-110.3572222\\nEAA,Eagle,Eagle,AK,USA,64.77639306,-141.1509206\\nEAN,Phifer Airfield,Wheatland,WY,USA,42.05552528,-104.9327492\\nEAR,Kearney Municipal,Kearney,NE,USA,40.72702778,-99.00677778\\nEAT,Pangborn Memorial,Wenatchee,WA,USA,47.39886111,-120.2068333\\nEAU,Chippewa Valley Regional,Eau Claire,WI,USA,44.86525722,-91.48507194\\nEBS,Webster City Municipal,Webster City,IA,USA,42.43663889,-93.86886111\\nECG,Elizabeth City CG Air Station/Municipal,Elizabeth City,NC,USA,36.26057417,-76.17459778\\nECS,Mondell,Newcastle,WY,USA,43.88545056,-104.3179178\\nEDE,Edenton Municipal,Edenton,NC,USA,36.027735,-76.56709333\\nEDN,Enterprise Municipal,Enterprise,AL,USA,31.29972222,-85.89986111\\nEED,Needles,Needles,CA,USA,34.76619444,-114.6232931\\nEEK,Eek,Eek,AK,USA,60.21590417,-162.0056092\\nEEN,Dillant-Hopkins,Keene,NH,USA,42.89839944,-72.27078111\\nEEO,Meeker,Meeker,CO,USA,40.04886222,-107.8859067\\nEET,Shelby County,Alabaster,AL,USA,33.17781083,-86.78323722\\nEFC,Belle Fourche Municipal,Belle Fourche,SD,USA,44.7342075,-103.8619925\\nEFD,Ellington,Houston,TX,USA,29.60733333,-95.15875\\nEFK,Newport State,Newport,VT,USA,44.88879722,-72.22915833\\nEFT,Monroe Municipal,Monroe,WI,USA,42.61493972,-89.59075583\\nEFW,Jefferson Municipal,Jefferson,IA,USA,42.01016667,-94.34258333\\nEGE,Eagle County Regional,Eagle,CO,USA,39.64256778,-106.9176953\\nEGQ,Emmetsburg Municipal,Emmetsburg,IA,USA,43.10202056,-94.704675\\nEGT,Wellington Municipal,Wellington,KS,USA,37.32441028,-97.38732333\\nEGV,Eagle River Union,Eagle River,WI,USA,45.93179639,-89.26906778\\nEHA,Elkhart-Morton County,Elkhart,KS,USA,37.00188194,-101.8821258\\nEHO,Shelby Municipal,Shelby,NC,USA,35.25555556,-81.60099722\\nEHR,Henderson City-County,Henderson,KY,USA,37.8078425,-87.68569\\nEII,Egegik,Egegik,AK,USA,58.18837472,-157.3809872\\nEIW,County Memorial,New Madrid,MO,USA,36.53531083,-89.59971722\\nEKA,Murray,Eureka,CA,USA,40.80338889,-124.1127917\\nEKM,Elkhart Municipal,Elkhart,IN,USA,41.71935833,-86.00168361\\nEKN,Elkins-Randolph Co-Jennings Randolph,Elkins,WV,USA,38.88944444,-79.85713889\\nEKO,Elko Regional,Elko,NV,USA,40.82492611,-115.7916964\\nEKQ,Wayne County,Monticello,KY,USA,36.85527778,-84.85613889\\nEKX,Elizabethtown,Elizabethtown,KY,USA,37.68694444,-85.92377778\\nEKY,Bessemer Municipal,Bessemer,AL,USA,33.31288444,-86.92591889\\nELA,Eagle Lake Municipal,Eagle Lake,TX,USA,29.60301389,-96.32248444\\nELD,South Arkansas Regional At Goodwin,El Dorado,AR,USA,33.2208625,-92.81325167\\nELI,Elim,Elim,AK,USA,64.61400972,-162.2700681\\nELK,Elk City Municipal,Elk City,OK,USA,35.42941083,-99.39425917\\nELM,Elmira/Corning Regional,Elmira,NY,USA,42.15991361,-76.89144333\\nELN,Bowers,Ellensburg,WA,USA,47.03302778,-120.5306944\\nELO,Ely Municipal,Ely,MN,USA,47.82454639,-91.83073056\\nELP,El Paso International,El Paso,TX,USA,31.80666667,-106.3778056\\nELV,Elfin Cove SPB,Elfin Cove,AK,USA,58.19518417,-136.3473928\\nELY,Ely Arpt (Yelland),Ely,NV,USA,39.29969444,-114.8418889\\nELZ,Wellsville Muni Tarantine,Wellsville,NY,USA,42.10951194,-77.99194806\\nEMM,Kemmerer Municipal,Kemmerer,WY,USA,41.82494611,-110.5590586\\nEMP,Emporia Municipal,Emporia,KS,USA,38.33211111,-96.19116667\\nEMT,El Monte,El Monte,CA,USA,34.08600889,-118.0348453\\nEMV,Emporia-Greensville Regional,Emporia,VA,USA,36.68691667,-77.48280556\\nENA,Kenai Municipal,Kenai,AK,USA,60.572,-151.2475278\\nENL,Centralia Municipal,Centralia,IL,USA,38.51479889,-89.09217944\\nENM,Emmonak,Emmonak,AK,USA,62.78518639,-164.4910461\\nENN,Nenana Municipal,Nenana,AK,USA,64.54898167,-149.0735053\\nENV,Wendover,Wendover,UT,USA,40.71869528,-114.03089\\nENW,Kenosha Regional,Kenosha,WI,USA,42.5957075,-87.92780333\\nEOK,Keokuk Municipal,Keokuk,IA,USA,40.45990778,-91.42850111\\nEOS,Neosho Memorial,Neosho,MO,USA,36.81080556,-94.39169444\\nEPH,Ephrata Muni,Ephrata,WA,USA,47.30758333,-119.5158889\\nEPM,Eastport Municipal,Eastport,ME,USA,44.91011111,-67.01269444\\nEQA,Captain Jack Thomas,El Dorado,KS,USA,37.77410833,-96.81762778\\nEQY,Monroe,Monroe,NC,USA,35.01884306,-80.62023444\\nERI,Erie Intl,Erie,PA,USA,42.08202139,-80.17621556\\nERV,Kerrville Muni/Louis Schreiner,Kerrville,TX,USA,29.976735,-99.08567972\\nERY,Luce County Hale,Newberry,MI,USA,46.31118694,-85.45731639\\nESC,Delta County,Escanaba,MI,USA,45.72266972,-87.09373139\\nESF,Esler Regional,Alexandria,LA,USA,31.3949025,-92.29577194\\nESN,Easton /Newnam,Easton,MD,USA,38.80416667,-76.069\\nEST,Estherville Municipal,Estherville,IA,USA,43.40744444,-94.74641667\\nETB,West Bend Municipal,West Bend,WI,USA,43.42219444,-88.12792667\\nETC,Edgecombe County,Tarboro,NC,USA,35.93710083,-77.54663833\\nETH,Wheaton Municipal,Wheaton,MN,USA,45.78046056,-96.54353972\\nETN,Eastland Municipal,Eastland,TX,USA,32.41349167,-98.80975667\\nEUF,Weedon,Eufaula,AL,USA,31.95131917,-85.128925\\nEUG,Mahlon Sweet,Eugene,OR,USA,44.12326,-123.2186856\\nEUL,Caldwell Industrial,Caldwell (Boise),ID,USA,43.64186111,-116.6357778\\nEVB,New Smyrna Beach Municipal,New Smyrna Beach,FL,USA,29.05580556,-80.94836111\\nEVM,Eveleth-Virginia Muni,Eveleth,MN,USA,47.42507778,-92.49846944\\nEVU,Maryville Memorial,Maryville,MO,USA,40.35260167,-94.91552722\\nEVV,Evansville Regional,Evansville,IN,USA,38.03799139,-87.53062667\\nEVW,Evanston-Uinta County Burns,Evanston,WY,USA,41.27494528,-111.0321286\\nEVY,Summit Airpark,Middletown,DE,USA,39.52038889,-75.72044444\\nEWB,New Bedford Municipal,New Bedford,MA,USA,41.67614167,-70.95694167\\nEWK,Newton-City-County,Newton,KS,USA,38.05710528,-97.27522861\\nEWN,Craven County Regional,New Bern,NC,USA,35.07297222,-77.04294444\\nEWR,Newark Intl,Newark,NJ,USA,40.69249722,-74.16866056\\nEWU,Newtok,Newtok,AK,USA,60.93865417,-164.6412147\\nEXI,Excursion Inlet SPB,Excursion Inlet,AK,USA,58.42049861,-135.4490328\\nEXX,Davidson County,Lexington,NC,USA,35.78114028,-80.30378194\\nEYE,Eagle Creek Airpark,Indianapolis,IN,USA,39.83070944,-86.29438056\\nEYW,Key West International,Key West,FL,USA,24.55611111,-81.75955556\\nEZI,Kewanee Municipal,Kewanee,IL,USA,41.20520361,-89.96386\\nEZM,Eastman-Dodge County,Eastman,GA,USA,32.21425,-83.12802778\\nEZZ,Cameron Memorial,Cameron,MO,USA,39.72755972,-94.276375\\nF00,Jones,Bonham,TX,USA,33.61172222,-96.17938889\\nF01,Quanah Municipal,Quanah,TX,USA,34.27708306,-99.75926861\\nF05,Vernon - Wilbarger County,Vernon,TX,USA,34.22566806,-99.28375\\nF06,Marian Airpark,Wellington,TX,USA,34.84561083,-100.1959481\\nF08,Eufaula Municipal,Eufaula,OK,USA,35.29593194,-95.62526417\\nF10,Henryetta Municipal,Henryetta,OK,USA,35.40687972,-96.01583278\\nF12,Rusk County,Henderson,TX,USA,32.14172222,-94.85172222\\nF17,Center Municipal,Center,TX,USA,31.83158333,-94.15641667\\nF18,Cleburne Municipal,Cleburne,TX,USA,32.35376389,-97.43375\\nF21,Memphis Municipal,Memphis,TX,USA,34.73958944,-100.5297008\\nF22,Perry Municipal,Perry,OK,USA,36.38559583,-97.27721083\\nF24,Minden-Webster,Minden,LA,USA,32.64601,-93.29808556\\nF28,El Reno Municipal,El Reno,OK,USA,35.47163639,-98.00599444\\nF29,Clarence E. Page Municipal,Oklahoma City,OK,USA,35.4880825,-97.82354556\\nF30,Sulphur Municipal,Sulphur,OK,USA,34.52453278,-96.98973944\\nF31,Lake Texoma State Park,Kingston,OK,USA,33.99287639,-96.64249722\\nF32,Healdton Municipal,Healdton,OK,USA,34.24925806,-97.47391306\\nF36,Cordell Municipal,Cordell,OK,USA,35.30421917,-98.96702167\\nF37,Wauchula Municipal,Wauchula,FL,USA,27.51364889,-81.88063917\\nF39,Grayson County,Sherman/Denison,TX,USA,33.71411111,-96.67366667\\nF41,Ennis Municipal,Ennis,TX,USA,32.32969444,-96.66388889\\nF44,Athens Jones Municipal,Athens,TX,USA,32.16384778,-95.82835306\\nF45,North Palm Beach County General Aviation,West Palm Beach,FL,USA,26.84537306,-80.22148111\\nF46,Rockwall Municipal,Rockwall,TX,USA,32.93059444,-96.43548556\\nF49,Slaton Municipal,Slaton,TX,USA,33.48481,-101.6607158\\nF51,Winnsboro Municipal,Winnsboro,TX,USA,32.93884556,-95.27886083\\nF53,Franklin County,Mount Vernon,TX,USA,33.21530583,-95.2374925\\nF55,Granbury Municipal,Granbury,TX,USA,32.44441583,-97.8169475\\nF56,Arledge,Stamford,TX,USA,32.91019472,-99.73422972\\nF70,French Valley,Murieta/Temecula,CA,USA,33.57605556,-117.1279722\\nF80,Atoka Municipal,Atoka,OK,USA,34.39833889,-96.14805972\\nF81,Okemah Flying,Okemah,OK,USA,35.42925306,-96.28778361\\nF84,Stigler Municipal,Stigler,OK,USA,35.28910556,-95.09389722\\nF85,Morton-Cochran County,Morton,TX,USA,33.72926389,-102.7338183\\nF87,Farmerville,Farmerville,LA,USA,32.72495583,-92.33716583\\nF88,Jonesboro,Jonesboro,LA,USA,32.20199028,-92.73293028\\nF89,Winnsboro Municipal,Winnsboro,LA,USA,32.15431917,-91.70012472\\nF91,Thomas P Stafford,Weatherford,OK,USA,35.54482944,-98.66849028\\nF99,Holdenville Municipal,Holdenville,OK,USA,35.085875,-96.41666667\\nFAI,Fairbanks International,Fairbanks,AK,USA,64.8136775,-147.8596694\\nFAM,Farmington Regional,Farmington,MO,USA,37.76107917,-90.42859722\\nFAQ,Fitiuta,Fitiuta Village,AS,USA,14.21577583,-169.4239058\\nFAR,Hector International,Fargo,ND,USA,46.91934889,-96.81498889\\nFAT,Fresno Yosemite International,Fresno,CA,USA,36.77619444,-119.7181389\\nFAY,Fayetteville Municipal,Fayetteville,NC,USA,34.99147222,-78.88\\nFBL,Faribault Municipal,Faribault,MN,USA,44.32468556,-93.31082889\\nFBR,Fort Bridger,Fort Bridger,WY,USA,41.39193583,-110.4067961\\nFBY,Fairbury Municipal,Fairbury,NE,USA,40.18297222,-97.16927778\\nFCA,Glacier Park Intl,Kalispell,MT,USA,48.31140472,-114.2550694\\nFCH,Fresno-Chandler Downtown,Fresno,CA,USA,36.732365,-119.8198961\\nFCI,Chesterfield County,Richmond,VA,USA,37.4065375,-77.52498667\\nFCM,Flying Cloud,Minneapolis,MN,USA,44.82724111,-93.45714639\\nFCY,Forrest City Municipal,Forrest City,AR,USA,34.94199806,-90.77496611\\nFDK,Frederick Municipal,Frederick,MD,USA,39.41758333,-77.37430556\\nFDR,Frederick Municipal,Frederick,OK,USA,34.35219472,-98.98460222\\nFDW,Fairfield County,Winnsboro,SC,USA,34.31547222,-81.10880556\\nFDY,Findlay,Findlay,OH,USA,41.01352778,-83.66869444\\nFEP,Albertus,Freeport,IL,USA,42.24626722,-89.58223944\\nFET,Fremont Municipal,Fremont,NE,USA,41.44913889,-96.52019444\\nFFA,First Flight,Kill Devil Hills,NC,USA,36.01822278,-75.67128694\\nFFC,Peachtree City - Falcon,Atlanta,GA,USA,33.35725,-84.57183333\\nFFL,Fairfield Municipal,Fairfield,IA,USA,41.05332417,-91.97892333\\nFFM,Fergus Falls Muni-Einar Mickelson,Fergus Falls,MN,USA,46.28439389,-96.15668556\\nFFT,Capital City,Frankfort,KY,USA,38.18248861,-84.90470083\\nFFZ,Falcon,Mesa,AZ,USA,33.46083333,-111.7283333\\nFGX,Fleming-Mason,Flemingsburg,KY,USA,38.54180556,-83.74338889\\nFHR,Friday Harbor,Friday Harbor,WA,USA,48.52197222,-123.0243611\\nFHU,Libby AAF-Sierra Vista Municipal,Fort Huachuca-Sierra Vista,AZ,USA,31.58847222,-110.3443889\\nFIG,Clearfield-Lawrence,Clearfield,PA,USA,41.04861306,-78.41310306\\nFIT,Fitchburg Municipal,Fitchburg,MA,USA,42.55412194,-71.75895639\\nFKL,Chess-Lamberton,Franklin,PA,USA,41.37787361,-79.86036167\\nFKN,Franklin Municipal-John Beverly Rose,Franklin,VA,USA,36.69817806,-76.90312694\\nFKR,Frankfort Municipal,Frankfort,IN,USA,40.27343083,-86.56217028\\nFLD,Fond Du Lac County,Fond Du Lac,WI,USA,43.77117417,-88.48842917\\nFLG,Flagstaff Pulliam,Flagstaff,AZ,USA,35.13845472,-111.6712183\\nFLL,Fort Lauderdale-Hollywood Int'l,Ft. Lauderdale,FL,USA,26.07258333,-80.15275\\nFLO,Florence Regional,Florence,SC,USA,34.18536111,-79.72388889\\nFLP,Marion County Regional,Flippin,AR,USA,36.29087528,-92.59023417\\nFLT,Flat,Flat,AK,USA,62.45264889,-157.98907\\nFLX,Fallon Municipal,Fallon,NV,USA,39.499545,-118.7490197\\nFME,Tipton,Odenton,MD,USA,39.08538667,-76.75941444\\nFMN,Four Corners Regional,Farmington,NM,USA,36.74125,-108.2299444\\nFMY,Page,Ft. Myers,FL,USA,26.58661111,-81.86325\\nFMZ,Fairmont State,Fairmont,NE,USA,40.58569444,-97.57305556\\nFNB,Brenner,Falls City,NE,USA,40.07878611,-95.59199167\\nFNL,Fort Collins-Loveland,Fort Collins/Loveland,CO,USA,40.45182722,-105.0113356\\nFNR,Funter Bay SPB,Funter Bay,AK,USA,58.25438583,-134.8979067\\nFNT,Bishop,Flint,MI,USA,42.96550333,-83.74345639\\nFOA,Flora,Flora,IL,USA,38.66494528,-88.45299556\\nFOD,Fort Dodge Municipal,Fort Dodge,IA,USA,42.55145611,-94.19255111\\nFOE,Forbes,Topeka,KS,USA,38.95095194,-95.66361444\\nFOK,Francis Gabreski,Westhampton Beach,NY,USA,40.84365472,-72.63178917\\nFOT,Rohnerville,Fortuna,CA,USA,40.55393583,-124.1326589\\nFPR,St. Lucie County International,Ft. Pierce,FL,USA,27.49505556,-80.36827778\\nFQD,Rutherford County-Marchman,Rutherfordton,NC,USA,35.42822222,-81.93507778\\nFRG,Republic,Farmingdale,NY,USA,40.72878111,-73.41340722\\nFRH,French Lick Municipal,French Lick,IN,USA,38.50622139,-86.63693528\\nFRM,Fairmont Municipal,Fairmont,MN,USA,43.64394111,-94.41561556\\nFRR,Front Royal-Warren County,Front Royal,VA,USA,38.9175325,-78.25351472\\nFSD,Joe Foss,Sioux Falls,SD,USA,43.58135111,-96.74170028\\nFSE,Fosston Municipal,Fosston,MN,USA,47.59282028,-95.77349889\\nFSK,Fort Scott Municipal,Fort Scott,KS,USA,37.79843056,-94.76938111\\nFSM,Fort Smith Regional,Fort Smith,AR,USA,35.33659028,-94.36744111\\nFSO,Franklin County State,Highgate,VT,USA,44.94028083,-73.09746\\nFST,Fort Stockton - Pecos County,Fort Stockton,TX,USA,30.91566667,-102.9161389\\nFSU,Fort Sumner Municipal,Fort Sumner,NM,USA,34.48339944,-104.2171967\\nFSW,Fort Madison Municipal,Fort Madison,IA,USA,40.6592625,-91.3268175\\nFTG,Front Range,Denver,CO,USA,39.78525,-104.5431389\\nFTT,Elton Hensley Memorial,Fulton,MO,USA,38.83987472,-92.00421056\\nFTW,Fort Worth Meacham International,Fort Worth,TX,USA,32.81977778,-97.36244444\\nFTY,Fulton County - Brown,Atlanta,GA,USA,33.77913889,-84.52136111\\nFUL,Fullerton Municipal,Fullerton,CA,USA,33.87201417,-117.9797842\\nFVE,Northern Aroostook Regional,Frenchville,ME,USA,47.28550417,-68.31275\\nFVX,Farmville Municipal,Farmville,VA,USA,37.35752861,-78.43779806\\nFWA,Fort Wayne International,Fort Wayne,IN,USA,40.97846583,-85.19514639\\nFWC,Fairfield Municipal,Fairfield,IL,USA,38.37863306,-88.41265222\\nFWN,Sussex,Sussex,NJ,USA,41.20020667,-74.62305056\\nFWS,Spinks,Fort Worth,TX,USA,32.56522778,-97.30807778\\nFXE,Fort Lauderdale Executive,Ft. Lauderdale,FL,USA,26.19728,-80.17070833\\nFXY,Forest City Municipal,Forest City,IA,USA,43.23473417,-93.6241025\\nFYE,Fayette County,Somerville,TN,USA,35.20592,-89.39441667\\nFYM,Fayetteville Municipal,Fayetteville,TN,USA,35.05836278,-86.56441139\\nFYU,Fort Yukon,Fort Yukon,AK,USA,66.57149028,-145.2504169\\nFYV,Fayetteville Municipal,Fayetteville,AR,USA,36.00509472,-94.17005694\\nFZG,Fitzgerald Municipal,Fitzgerald,GA,USA,31.68368667,-83.27046056\\nFZI,Fostoria Metropolitan,Fostoria,OH,USA,41.19083111,-83.39453639\\nFZY,Oswego Cty,Fulton,NY,USA,43.35077528,-76.38805361\\nGAB,Gabbs,Gabbs,NV,USA,38.92409111,-117.9590072\\nGAD,Gadsden Municipal,Gadsden,AL,USA,33.97262528,-86.08900139\\nGAF,Grafton Municipal,Grafton,ND,USA,48.40469444,-97.37094444\\nGAG,Gage,Gage,OK,USA,36.29553889,-99.77642361\\nGAI,Montgomery Co Airpark,Gaithersburg,MD,USA,39.16833611,-77.166\\nGAL,Edward G. Pitka Sr.,Galena,AK,USA,64.73617806,-156.9374164\\nGAM,Gambell,Gambell,AK,USA,63.76676556,-171.7328236\\nGAS,Gallia - Meigs Regional,Gallipolis,OH,USA,38.83410833,-82.16342306\\nGBD,Great Bend Municipal,Great Bend,KS,USA,38.34441861,-98.85917028\\nGBG,Galesburg Municipal,Galesburg,IL,USA,40.93800194,-90.43112556\\nGBH,Galbraith Lake,Galbraith Lake,AK,USA,68.47906306,-149.4900214\\nGBR,Great Barrington,Great Barrington,MA,USA,42.18421417,-73.40324056\\nGCC,Gillette-Campbell County,Gillette,WY,USA,44.34889806,-105.5393614\\nGCK,Garden City Regional,Garden City,KS,USA,37.92751556,-100.7244147\\nGCM,Claremore Regional,Claremore,OK,USA,36.29441667,-95.47966667\\nGCN,Grand Canyon National Park,Grand Canyon,AZ,USA,35.95235389,-112.1469647\\nGCT,Guthrie County Regional,Guthrie Center,IA,USA,41.68776417,-94.43524611\\nGCY,Greeneville Municipal,Greeneville,TN,USA,36.19299083,-82.81507028\\nGDM,Gardner Municipal,Gardner,MA,USA,42.54986639,-72.01602194\\nGDV,Dawson Community,Glendive,MT,USA,47.13871861,-104.8071994\\nGDW,Gladwin,Gladwin,MI,USA,43.97063278,-84.47503861\\nGDY,Grundy Municipal,Grundy,VA,USA,37.23240111,-82.12499083\\nGED,Sussex Cty Arpt,Georgetown,DE,USA,38.68919444,-75.35888889\\nGEG,Spokane Intl,Spokane,WA,USA,47.61985556,-117.5338425\\nGEO,Brown County,Georgetown,OH,USA,38.88195778,-83.88273278\\nGEU,Glendale Municipal,Glendale,AZ,USA,33.52726278,-112.2951564\\nGEY,South Big Horn County,Greybull,WY,USA,44.51644444,-108.0831944\\nGEZ,Shelbyville Municipal,Shelbyville,IN,USA,39.58316583,-85.80481\\nGFK,Grand Forks International,Grand Forks,ND,USA,47.949255,-97.17611111\\nGFL,Floyd D. Bennett,Glens Falls,NY,USA,43.34121,-73.6103075\\nGFZ,Greenfield Municipal,Greenfield,IA,USA,41.32702778,-94.44572222\\nGGE,Georgetown County,Georgetown,SC,USA,33.31169444,-79.31958333\\nGGF,Grant Municipal,Grant,NE,USA,40.86952778,-101.7328611\\nGGG,Gregg County,Longview,TX,USA,32.38486111,-94.71171\\nGGI,Grinnell Municipal,Grinnell,IA,USA,41.70916083,-92.73491278\\nGGP,Logansport Municipal,Logansport,IN,USA,40.71126139,-86.37449917\\nGGW,Wokal Field/Glasgow Intl,Glasgow,MT,USA,48.21246417,-106.6148231\\nGHM,Centerville Municipal,Centerville,TN,USA,35.83742722,-87.445375\\nGHW,Glenwood Municipal,Glenwood,MN,USA,45.64389167,-95.32043056\\nGIF,Winter Havens Gilbert,Winter Haven,FL,USA,28.06291667,-81.75330556\\nGJT,Walker,Grand Junction,CO,USA,39.1224125,-108.5267347\\nGKJ,Port Meadville,Meadville,PA,USA,41.62652667,-80.2147275\\nGKN,Gulkana,Gulkana,AK,USA,62.15488889,-145.4566389\\nGKT,Gatlinburg-Pigeon Forge,Sevierville,TN,USA,35.85775889,-83.52870472\\nGKY,Arlington Municipal,Arlington,TX,USA,32.66241528,-97.09391139\\nGLD,Renner Field/Goodland Municipal,Goodland,KS,USA,39.37062194,-101.6989919\\nGLE,Gainesville Municipal,Gainesville,TX,USA,33.65136111,-97.19702778\\nGLH,Mid Delta Regional,Greenville,MS,USA,33.48288111,-90.98561389\\nGLR,Otsego County,Gaylord,MI,USA,45.01354806,-84.70318944\\nGLS,Galveston-Scholes,Galveston,TX,USA,29.26532333,-94.86040667\\nGLW,Glasgow Municipal,Glasgow,KY,USA,37.03205556,-85.95261111\\nGLY,Clinton Memorial,Clinton,MO,USA,38.35657306,-93.68417694\\nGMJ,Grove Municipal,Grove,OK,USA,36.60527056,-94.73856667\\nGMU,Greenville Downtown,Greenville,SC,USA,34.84794444,-82.35\\nGNB,Granby-Grand County,Granby,CO,USA,40.08970806,-105.9172367\\nGNF,Grenada Municipal,Grenada,MS,USA,33.83253,-89.79822806\\nGNG,Gooding Municipal,Gooding,ID,USA,42.91716639,-114.7651575\\nGNT,Grants-Milan Municipal,Grants,NM,USA,35.16531472,-107.9006142\\nGNU,Goodnews,Goodnews,AK,USA,59.11727556,-161.5813967\\nGNV,Gainesville Regional,Gainesville,FL,USA,29.69005556,-82.27177778\\nGOK,Guthrie Municipal,Guthrie,OK,USA,35.84980556,-97.41560833\\nGON,Groton-New London,Groton,CT,USA,41.33005778,-72.04513556\\nGPH,Clay County Regional,Mosby,MO,USA,39.33046528,-94.30997361\\nGPM,Grand Prairie Municipal,Grand Prairie,TX,USA,32.69858333,-97.04652778\\nGPT,Gulfport-Biloxi Regional,Gulfport-Biloxi,MS,USA,30.40728028,-89.07009278\\nGPZ,Grand Rapids-Itasca County,Grand Rapids,MN,USA,47.21110333,-93.50984472\\nGQQ,Galion Municipal,Galion,OH,USA,40.75338889,-82.72380556\\nGRB,Austin Straubel International,Green Bay,WI,USA,44.48507333,-88.12959\\nGRD,Greenwood County,Greenwood,SC,USA,34.24872222,-82.15908333\\nGRE,Greenville,Greenville,IL,USA,38.83615778,-89.37841111\\nGRI,Central Nebraska Regional,Grand Island,NE,USA,40.96747222,-98.30861111\\nGRK,Robert Gray AAF,Killeen,TX,USA,31.06489778,-97.82779778\\nGRN,Gordon Municipal,Gordon,NE,USA,42.80597222,-102.17525\\nGRO,Rota International,Rota Island,CQ,USA,14.1743075,-145.2425353\\nGRR,Kent County International,Grand Rapids,MI,USA,42.88081972,-85.52276778\\nGSH,Goshen Municipal,Goshen,IN,USA,41.52716028,-85.79210278\\nGSN,Saipan International,Obyan,CQ,USA,15.11900139,-145.7293561\\nGSO,Piedmont Triad International,Greensboro,NC,USA,36.09774694,-79.9372975\\nGSP,Greenville-Spartanburg,Greer,SC,USA,34.89566722,-82.21885833\\nGST,Gustavus,Gustavus,AK,USA,58.42438139,-135.7073814\\nGTF,Great Falls Intl,Great Falls,MT,USA,47.48200194,-111.3706853\\nGTR,Golden Triangle Regional,Columbus-Starkville-West Point,MS,USA,33.45033444,-88.59136861\\nGTU,Georgetown Municipal,Georgetown,TX,USA,30.67880889,-97.67938389\\nGUC,Gunnison County,Gunnison,CO,USA,38.53396333,-106.9331817\\nGUM,Guam International,Agana,GU,USA,13.48345,-144.7959825\\nGUP,Gallup Municipal,Gallup,NM,USA,35.51105833,-108.7893094\\nGUY,Guymon Municipal,Guymon,OK,USA,36.68507194,-101.5077817\\nGVL,Lee Gilmer Memorial,Gainesville,GA,USA,34.27290389,-83.82681333\\nGVQ,Genesee Cty,Batavia,NY,USA,43.03172639,-78.16759972\\nGVT,Majors,Greenville,TX,USA,33.06783889,-96.0653325\\nGWO,Greenwood-Leflore,Greenwood,MS,USA,33.49432667,-90.084705\\nGWR,Gwinner-Roger Melroe,Gwinner,ND,USA,46.21872222,-97.64325\\nGWW,Goldsboro-Wayne Municipal,Goldsboro,NC,USA,35.46055444,-77.96493306\\nGXY,Greeley-Weld County,Greeley,CO,USA,40.43561833,-104.6321156\\nGYH,Donaldson Center,Greenville,SC,USA,34.75831917,-82.376415\\nGYR,Phoenix Goodyear,Goodyear,AZ,USA,33.42281972,-112.3759919\\nGYY,Gary/Chicago,Gary,IN,USA,41.61627306,-87.41278806\\nGZH,Middleton,Evergreen,AL,USA,31.41580111,-87.04404333\\nGZS,Abernathy,Pulaski,TN,USA,35.15371972,-87.05681444\\nH04,Vinita Municipal,Vinita,OK,USA,36.63301806,-95.15136111\\nH05,Wilburton Municipal,Wilburton,OK,USA,34.91954278,-95.39469722\\nH19,Bowling Green Municipal,Bowling Green,MO,USA,39.36993361,-91.21925556\\nH21,Camdenton Memorial,Camdenton,MO,USA,37.97468528,-92.69161528\\nH30,Hamilton Municipal,Hamilton,NY,USA,42.84381889,-75.56140194\\nH35,Clarksville Municipal,Clarksville,AR,USA,35.47069417,-93.427155\\nH41,Memorial,Mexico,MO,USA,39.15751389,-91.81826667\\nH45,Seminole Municipal,Seminole,OK,USA,35.27467806,-96.67516194\\nH66,Nowata Municipal,Nowata,OK,USA,36.72092222,-95.62525583\\nH71,Mid-America Industrial,Pryor,OK,USA,36.22539389,-95.33006333\\nH79,Eldon Model Airpark,Eldon,MO,USA,38.36062611,-92.57157139\\nH88,Municipal,Fredericktown,MO,USA,37.605825,-90.28731389\\nH92,Hominy,Hominy,OK,USA,36.43340222,-96.38362861\\nH96,Benton Municipal,Benton,IL,USA,38.00675111,-88.93441528\\nH97,Pawnee Municipal,Pawnee,OK,USA,36.38338556,-96.8103125\\nHAB,Marion County,Hamilton,AL,USA,34.11757222,-87.99819583\\nHAE,Hannibal Municipal,Hannibal,MO,USA,39.72448944,-91.44367944\\nHAF,Half Moon Bay,Half Moon Bay,CA,USA,37.51382944,-122.5010892\\nHAI,Three Rivers Municipal,Three Rivers,MI,USA,41.95975,-85.59338889\\nHAO,Hamilton-Fairfield,Hamilton,OH,USA,39.36448861,-84.52457722\\nHAY,Haycock,Haycock,AK,USA,65.20098944,-161.1567792\\nHBC,Mohall Municipal,Mohall,ND,USA,48.76838333,-101.5369953\\nHBG,Bobby L. Chain Municipal,Hattiesburg,MS,USA,31.26506556,-89.2530325\\nHBR,Hobart Municipal,Hobart,OK,USA,34.9913075,-99.0513525\\nHBV,Jim Hogg County,Hebbronville,TX,USA,27.34955556,-98.73697222\\nHBZ,Heber Springs Municipal,Heber Springs,AR,USA,35.51169389,-92.01300944\\nHCD,Hutchinson Municipal,Hutchinson,MN,USA,44.85890667,-94.38178917\\nHCO,Hallock Municipal,Hallock,MN,USA,48.75273139,-96.94300306\\nHDC,Hammond Municipal,Hammond,LA,USA,30.52096889,-90.41762056\\nHDE,Brewster,Holdredge,NE,USA,40.45269444,-99.33733333\\nHDH,Dillingham Airfield,Mokuleia,HI,USA,21.57947361,-158.1972814\\nHDI,Hardwick,Cleveland,TN,USA,35.22007306,-84.83244333\\nHDN,Yampa Valley,Hayden,CO,USA,40.48118028,-107.2176597\\nHDO,Hondo Municipal,Hondo,TX,USA,29.35952778,-99.17666667\\nHEE,Thompson-Robbins,Helena-West Helena,AR,USA,34.57648972,-90.67588639\\nHEF,Manassas Reg./Harry P Davis,Manassas,VA,USA,38.72141667,-77.51544444\\nHEI,Hettinger Municipal,Hettinger,ND,USA,46.01494444,-102.6559722\\nHEQ,Holyoke,Holyoke,CO,USA,40.56943056,-102.2726875\\nHEZ,Natchez-Adams County,Natchez,MS,USA,31.61366111,-91.29733639\\nHFD,Hartford Brainard,Hartford,CT,USA,41.73626861,-72.65021389\\nHFY,Greenwood Municipal,Indianapolis/Greenwood,IN,USA,39.62841667,-86.08788889\\nHGR,Hagerstown Regional-Richard Henson,Hagerstown,MD,USA,39.70794444,-77.7295\\nHHF,Hemphill County,Canadian,TX,USA,35.89530778,-100.4036397\\nHHG,Huntington Municipal,Huntington,IN,USA,40.85299,-85.45941917\\nHHH,Hilton Head,NA,NA,USA,32.224384,-80.697629\\nHHR,Jack Northrop Field/Hawthorne Municipal,Hawthorne,CA,USA,33.92283972,-118.3351872\\nHHW,Stan Stamper Municipal,Hugo,OK,USA,34.03482556,-95.54190611\\nHI01,Princeville,Hanalei,HI,USA,22.20919,-159.4455339\\nHIB,Chisholm-Hibbing,Hibbing,MN,USA,47.38659917,-92.83899333\\nHIE,Mt Washington Regional,Whitefield,NH,USA,44.36761639,-71.54447111\\nHIG,Higginsville Industrial Municipal,Higginsville,MO,USA,39.07334639,-93.67716083\\nHII,Lake Havasu City,Lake Havasu City,AZ,USA,34.56816056,-114.3561783\\nHIO,Portland-Hillsboro,Hillsboro (Portland),OR,USA,45.54039389,-122.9498258\\nHJH,Hebron Municipal,Hebron,NE,USA,40.15225,-97.58697222\\nHJO,Hanford Municipal,Hanford,CA,USA,36.31852194,-119.6288675\\nHKA,Blytheville Municipal,Blytheville,AR,USA,35.94040667,-89.83080583\\nHKS,Hawkins,Jackson,MS,USA,32.3347725,-90.22253167\\nHKY,Hickory Municipal,Hickory,NC,USA,35.74114639,-81.38954889\\nHLC,Hill City Municipal,Hill City,KS,USA,39.37883611,-99.83149444\\nHLG,Wheeling-Ohio Cty,Wheeling,WV,USA,40.175,-80.64627778\\nHLN,Helena Regional,Helena,MT,USA,46.60681806,-111.9827503\\nHLX,Twin County,Galax,VA,USA,36.76611472,-80.82356556\\nHMT,Hemet-Ryan,Hemet,CA,USA,33.73398167,-117.0225258\\nHMZ,Bedford County,Bedford,PA,USA,40.08536861,-78.51221778\\nHNB,Huntingburg,Huntingburg,IN,USA,38.24902583,-86.95371833\\nHNH,Hoonah,Hoonah,AK,USA,58.09609139,-135.4096975\\nHNL,Honolulu International,Honolulu,HI,USA,21.31869111,-157.9224072\\nHNM,Hana,Hana,HI,USA,20.79563722,-156.0144378\\nHNR,Harlan Municipal,Harlan,IA,USA,41.58438889,-95.33963889\\nHNS,Haines,Haines,AK,USA,59.24522806,-135.5221086\\nHNZ,Henderson-Oxford,Oxford,NC,USA,36.36156111,-78.52916639\\nHOB,Lea County Regional,Hobbs,NM,USA,32.68752778,-103.2170278\\nHOC,Highland County,Hillsboro,OH,USA,39.18875944,-83.53880694\\nHOE,Homerville,Homerville,GA,USA,31.05591667,-82.77413889\\nHOM,Homer,Homer,AK,USA,59.64555556,-151.4765833\\nHON,Huron Regional,Huron,SD,USA,44.38520056,-98.2285425\\nHOT,Memorial,Hot Springs,AR,USA,34.47803389,-93.09620833\\nHOU,William P Hobby,Houston,TX,USA,29.64541861,-95.27888889\\nHPB,Hooper Bay,Hooper Bay,AK,USA,61.52418306,-166.1467797\\nHPN,Westchester Cty,White Plains,NY,USA,41.06695778,-73.70757444\\nHPT,Hampton Municipal,Hampton,IA,USA,42.72372361,-93.22634056\\nHQG,Hugoton Municipal,Hugoton,KS,USA,37.16308056,-101.3705267\\nHQM,Bowerman,Hoquiam,WA,USA,46.97120167,-123.9365581\\nHQU,Thomson-McDuffie County,Thomson,GA,USA,33.52972639,-82.51678556\\nHQZ,Mesquite Metro,Mesquite,TX,USA,32.74696278,-96.53041722\\nHRI,Hermiston Muni,Hermiston,OR,USA,45.82822222,-119.2591667\\nHRL,Valley International,Harlingen,TX,USA,26.22850611,-97.65439389\\nHRO,Boone County,Harrison,AR,USA,36.26152056,-93.15472889\\nHRR,Healy River,Healy,AK,USA,63.86620806,-148.9689842\\nHRU,Herington Municipal,Herington,KS,USA,38.68322389,-96.80800639\\nHRX,Hereford Municipal,Hereford,TX,USA,34.85761639,-102.3272017\\nHSA,Stennis International,Bay St Louis,MS,USA,30.36780778,-89.45461083\\nHSB,Harrisburg-Raleigh,Harrisburg,IL,USA,37.8115,-88.54913889\\nHSE,Billy Mitchell,Hatteras,NC,USA,35.2327875,-75.617795\\nHSI,Hastings Municipal,Hastings,NE,USA,40.60525,-98.42788889\\nHSL,Huslia,Huslia,AK,USA,65.70055556,-156.3875\\nHSP,Ingalls,Hot Springs,VA,USA,37.95144444,-79.83389444\\nHSR,Hot Springs Municipal,Hot Springs,SD,USA,43.36824528,-103.3881378\\nHSV,Huntsville International,Huntsville,AL,USA,34.6404475,-86.77310944\\nHTH,Hawthorne Municipal,Hawthorne,NV,USA,38.54436583,-118.6343003\\nHTL,Roscommon County,Houghton Lake,MI,USA,44.35980556,-84.67111111\\nHTO,East Hampton,East Hampton,NY,USA,40.95957778,-72.25185056\\nHTS,Tri-State/Walker-Long,Huntington,WV,USA,38.36666667,-82.55802778\\nHTW,\\\"Lawrence County Airpark,Inc\\\",Chesapeake,OH,USA,38.41924861,-82.4943225\\nHUF,Terre Haute International-Hulman,Terre Haute,IN,USA,39.45146361,-87.30756111\\nHUL,Houlton International,Houlton,ME,USA,46.12308333,-67.79205556\\nHUM,Houma-Terrebonne,Houma,LA,USA,29.5665,-90.66041667\\nHUS,Hughes,Hughes,AK,USA,66.04112167,-154.2631903\\nHUT,Hutchinson Municipal,Hutchinson,KS,USA,38.06548306,-97.86063361\\nHVC,Hopkinsville-Christian County,Hopkinsville,KY,USA,36.85658333,-87.45725\\nHVE,Hanksville,Hanksville,UT,USA,38.41803722,-110.7040378\\nHVN,Tweed-New Haven,New Haven,CT,USA,41.26389889,-72.8871\\nHVR,Havre City-County,Havre,MT,USA,48.542985,-109.7623419\\nHVS,Hartsville Municipal,Hartsville,SC,USA,34.40308333,-80.11922222\\nHWD,Hayward Executive,Hayward,CA,USA,37.65926528,-122.1224083\\nHWI,Hawk Inlet SPB,Hawk Inlet,AK,USA,58.12744139,-134.7559531\\nHWO,North Perry,Hollywood,FL,USA,26.00142417,-80.24052056\\nHWQ,Wheatland County At Harlowton,Harlowton,MT,USA,46.4541225,-109.8549061\\nHWV,Brookhaven,Shirley,NY,USA,40.81676528,-72.86204722\\nHXD,Hilton Head,Hilton Head Island,SC,USA,32.22436111,-80.69747222\\nHXF,Hartford Municipal,Hartford,WI,USA,43.34927806,-88.39112528\\nHYA,Barnstable Mun Boardman/Polando,Hyannis,MA,USA,41.66933639,-70.28035583\\nHYG,Hydaburg SPB,Hydaburg,AK,USA,55.20631611,-132.8283131\\nHYI,San Marcos Municipal,San Marcos,TX,USA,29.89361111,-97.86469444\\nHYL,Hollis SPB,Hollis,AK,USA,55.48158833,-132.6460942\\nHYR,Sawyer County,Hayward,WI,USA,46.02585722,-91.44424278\\nHYS,Hays Municipal,Hays,KS,USA,38.84494167,-99.27403361\\nHYW,Conway-Horry County,Conway,SC,USA,33.8285,-79.12216667\\nHZD,Carroll County,Huntingdon,TN,USA,36.08930722,-88.46329778\\nHZE,Mercer County Regional,Hazen,ND,USA,47.28986111,-101.5809444\\nHZL,Hazleton Muni,Hazleton,PA,USA,40.98677778,-75.99488889\\nHZR,False River Air Park,New Roads,LA,USA,30.71832333,-91.47866972\\nHZY,Ashtabula County,Ashtabula,OH,USA,41.77797528,-80.69551333\\nI05,Sturgis Municipal,Sturgis,KY,USA,37.54083333,-87.95183333\\nI12,Sidney Municipal,Sidney,OH,USA,40.24127944,-84.15101167\\nI16,Kee,Pineville,WV,USA,37.60044444,-81.55927778\\nI18,Jackson County,Ravenswood,WV,USA,38.92977778,-81.81947222\\nI19,Greene County,Dayton,OH,USA,39.69172639,-83.99023806\\nI22,Randolph County,Winchester,IN,USA,40.16885083,-84.92585333\\nI23,Fayette County,Washington Court House,OH,USA,39.57040167,-83.42052444\\nI25,Welch Muni,Welch,WV,USA,37.41678056,-81.52899417\\nI32,Morehead-Rowan County,Morehead,KY,USA,38.13341472,-83.53796528\\nI34,Greensburg-Decatur County,Greensburg,IN,USA,39.32691111,-85.52252694\\nI35,Tucker-Guthrie Memorial,Harlan,KY,USA,36.85981028,-83.36101639\\nI39,Madison County,Richmond,KY,USA,37.63152778,-84.33244444\\nI40,Richard Downing,Coshocton,OH,USA,40.30918056,-81.85338194\\nI42,Paoli Municipal,Paoli,IN,USA,38.58338806,-86.46248778\\nI43,James A Rhodes,Jackson,OH,USA,38.98135194,-82.57785667\\nI50,Stanton,Stanton,KY,USA,37.85008167,-83.84575194\\nI57,Pike County,Waverly,OH,USA,39.16693333,-82.928175\\nI63,Mt. Sterling Municipal,Mt. Sterling,IL,USA,39.9875,-90.80416667\\nI66,Clinton,Wilmington,OH,USA,39.50286111,-83.86305556\\nI67,Cincinnati West,Harrison,OH,USA,39.25894444,-84.77430556\\nI68,Lebanon-Warren County,Lebanon,OH,USA,39.46217306,-84.25184722\\nI69,Clermont County,Batavia,OH,USA,39.07839722,-84.21020722\\nI74,Grimes,Urbana,OH,USA,40.12928306,-83.7548775\\nI75,Osceola Municipal,Osceola,IA,USA,41.05221889,-93.68966222\\nI76,Peru Municipal,Peru,IN,USA,40.78631889,-86.14638306\\nI78,Union County,Marysville,OH,USA,40.22469444,-83.35161111\\nI83,Salem Municipal,Salem,IN,USA,38.60200167,-86.13997889\\nI86,Perry County,New Lexington,OH,USA,39.69159667,-82.19778583\\nI88,Pontiac Municipal,Pontiac,IL,USA,40.92372222,-88.6255\\nI93,Breckinridge County,Hardinsburg,KY,USA,37.78505944,-86.44192194\\nI95,Hardin County,Kenton,OH,USA,40.61072,-83.64359694\\nIAD,Washington Dulles International,Chantilly,VA,USA,38.94453194,-77.45580972\\nIAG,Niagara Falls Intl,Niagara Falls,NY,USA,43.10725861,-78.94538139\\nIAH,George Bush Intercontinental,Houston,TX,USA,29.98047222,-95.33972222\\nIAN,Bob Baker Memorial,Kiana,AK,USA,66.97937611,-160.4358597\\nIBM,Robert E. Arraj,Kimball,NE,USA,41.18805556,-103.6773889\\nICL,Schenck,Clarinda,IA,USA,40.72178361,-95.02642667\\nICT,Wichita Mid-Continent,Wichita,KS,USA,37.64995889,-97.43304583\\nIDA,Idaho Falls Regional,Idaho Falls,ID,USA,43.51455556,-112.0701667\\nIDI,Indiana Cty/Jimmy Stewart,Indiana,PA,USA,40.63222222,-79.10552778\\nIDL,Indianola Municipal,Indianola,MS,USA,33.48574611,-90.67887611\\nIDP,Independence Municipal,Independence,KS,USA,37.15837222,-95.77838333\\nIEM,Whittier,Whittier,AK,USA,60.7772125,-148.7215775\\nIEN,Pine Ridge,Pine Ridge,SD,USA,43.02257694,-102.5110728\\nIER,Natchitoches Municipal,Natchitoches,LA,USA,31.73572,-93.09913639\\nIFA,Iowa Falls Municipal,Iowa Falls,IA,USA,42.47078639,-93.26995361\\nIFP,Laughlin/Bullhead International,Bullhead City,AZ,USA,35.15738889,-114.5595278\\nIGG,Igiugig,Igiugig,AK,USA,59.32373528,-155.9032733\\nIGM,Kingman,Kingman,AZ,USA,35.25947222,-113.9380556\\nIGQ,Lansing Municipal,Chicago/Lansing,IL,USA,41.53988889,-87.53216667\\nIGT,Nightmute,Nightmute,AK,USA,60.47032722,-164.6856414\\nIIB,Independence Municipal,Independence,IA,USA,42.45359833,-91.94761833\\nIIK,Kipnuk,Kipnuk,AK,USA,59.93295111,-164.0305131\\nIIY,Washington-Wilkes County,Washington,GA,USA,33.77987528,-82.81661639\\nIJD,Windham,Willimantic,CT,USA,41.74404028,-72.18023583\\nIJX,Jacksonville Municipal,Jacksonville,IL,USA,39.77429694,-90.23856583\\nIKK,Greater Kankakee,Kankakee,IL,USA,41.07140417,-87.84626861\\nIKV,Ankeny Regional,Ankeny,IA,USA,41.69128556,-93.56630333\\nILE,Killeen Municipal,Killeen,TX,USA,31.08583333,-97.6865\\nILG,New Castle County,Wilmington,DE,USA,39.67872222,-75.60652778\\nILI,Iliamna,Iliamna,AK,USA,59.75380028,-154.9109597\\nILM,Wilmington International,Wilmington,NC,USA,34.27061111,-77.90255556\\nIML,Imperial Municipal,Imperial,NE,USA,40.50930556,-101.6205278\\nIMM,Immokalee,Immokalee,FL,USA,26.43316667,-81.40102778\\nIMS,Madison Municipal,Madison,IN,USA,38.75888889,-85.46552778\\nIMT,Ford,Iron Mountain/Kingsford,MI,USA,45.81835417,-88.1145425\\nIN03,Indianapolis Downtown,Indianapolis,IN,USA,39.76587639,-86.148875\\nIND,Indianapolis International,Indianapolis,IN,USA,39.71732917,-86.29438417\\nINK,Winkler County,Wink,TX,USA,31.77962833,-103.2013619\\nINL,Falls International,International Falls,MN,USA,48.56618722,-93.40306667\\nINT,Smith Reynolds,Winston-Salem,NC,USA,36.13372222,-80.222\\nINW,Winslow-Lindbergh Regional,Winslow,AZ,USA,35.02191667,-110.7225278\\nIOB,Mt Sterling-Montgomery County,Mount Sterling,KY,USA,38.05813889,-83.97958333\\nIOW,Iowa City Municipal,Iowa City,IA,USA,41.63924389,-91.54650333\\nIPJ,Lincoln County,Lincolnton,NC,USA,35.48332889,-81.16125833\\nIPL,Imperial County,Imperial,CA,USA,32.83422028,-115.5787456\\nIPT,Williamsport-Lycoming Cty,Williamsport,PA,USA,41.24183583,-76.92109556\\nIRK,Kirksville Regional,Kirksville,MO,USA,40.09364444,-92.54496917\\nIRS,Kirsch Municipal,Sturgis,MI,USA,41.8128725,-85.43906111\\nISM,Kissimmee Municipal,Orlando,FL,USA,28.28980556,-81.43708333\\nISN,Sloulin Field International,Williston,ND,USA,48.17793861,-103.6423467\\nISO,Kinston Regional Jetport At Stallin,Kinston,NC,USA,35.32807944,-77.61552611\\nISP,Long Island - MacArthur,Islip,NY,USA,40.7952425,-73.10021194\\nISQ,Schoolcraft County,Manistique,MI,USA,45.97464056,-86.17183056\\nISW,Alexander,Wisconsin Rapids,WI,USA,44.36033833,-89.83897056\\nISZ,Cincinnati-Blue Ash,Cincinnati,OH,USA,39.24669444,-84.38897222\\nITH,Tompkins Cty,Ithaca,NY,USA,42.49102778,-76.45844444\\nITO,Hilo International,Hilo,HI,USA,19.72026306,-155.0484703\\nITR,Kit Carson County,Burlington,CO,USA,39.2425,-102.2853889\\nIWA,Williams Gateway,Phoenix,AZ,USA,33.30783333,-111.6554722\\nIWD,Gogebic County,Ironwood,MI,USA,46.52747472,-90.13139667\\nIWH,Wabash Municipal,Wabash,IN,USA,40.76195972,-85.79873417\\nIWI,Wiscasset,Wiscasset,ME,USA,43.96141667,-69.71255556\\nIWK,Wales,Wales,AK,USA,65.62394028,-168.0991719\\nIWS,West Houston,Houston,TX,USA,29.81819444,-95.67261111\\nIXD,New Century Aircenter,Olathe,KS,USA,38.83090472,-94.89030333\\nIYK,Inyokern,Inyokern,CA,USA,35.65884306,-117.8295122\\nIYS,Wasilla,Wasilla,AK,USA,61.57196083,-149.5405556\\nIZA,Santa Ynez,Santa Ynez,CA,USA,34.60682028,-120.0755617\\nIZG,Eastern Slopes Regional,Fryeburg,ME,USA,43.99114472,-70.94787444\\nJAC,Jackson Hole,Jackson,WY,USA,43.60732417,-110.7377389\\nJAN,Jackson International,Jackson,MS,USA,32.31116667,-90.07588889\\nJAS,Jasper County -Bell,Jasper,TX,USA,30.89058333,-94.03483333\\nJAU,Campbell County,Jacksboro,TN,USA,36.33457556,-84.16234472\\nJAX,Jacksonville International,Jacksonville,FL,USA,30.49405556,-81.68786111\\nJBR,Jonesboro Municipal,Jonesboro,AR,USA,35.83186111,-90.64616667\\nJCT,Kimble County,Junction,TX,USA,30.51126,-99.76345528\\nJDN,Jordan,Jordan,MT,USA,47.33333417,-106.9339564\\nJEF,Jefferson City Memorial,Jefferson City,MO,USA,38.59117917,-92.15614389\\nJER,Jerome County,Jerome,ID,USA,42.72663639,-114.4571506\\nJES,Jesup-Wayne County,Jesup,GA,USA,31.55408333,-81.88344444\\nJFK,John F Kennedy Intl,New York,NY,USA,40.63975111,-73.77892556\\nJFX,Walker County,Jasper,AL,USA,33.90199528,-87.31416639\\nJHM,Kapalua,Lahaina,HI,USA,20.96293639,-156.6730317\\nJHW,Chautauqua Cty,Jamestown,NY,USA,42.15336861,-79.258035\\nJKA,Jack Edwards,Gulf Shores,AL,USA,30.28951667,-87.67371472\\nJKJ,Moorhead Municipal,Moorhead,MN,USA,46.83919194,-96.66313028\\nJKL,Julian Carroll,Jackson,KY,USA,37.59386111,-83.31725\\nJLN,Joplin Regional,Joplin,MO,USA,37.15181361,-94.49826833\\nJMR,Mora Municipal,Mora,MN,USA,45.88609722,-93.27177833\\nJMS,Jamestown Municipal,Jamestown,ND,USA,46.92971944,-98.67819528\\nJNU,Juneau International,Juneau,AK,USA,58.35496194,-134.5762764\\nJNX,Johnston County,Smithfield,NC,USA,35.54094139,-78.39032944\\nJOT,Joliet Park District,Chicago/Joliet,IL,USA,41.51805833,-88.17525583\\nJQF,Concord Regional,Concord,NC,USA,35.38520694,-80.70971389\\nJRA,Port Authority-W 30th St Midtown Heliport,New York,NY,USA,40.75454583,-74.00708389\\nJRB,Downtown Manhattan/Wall St. Heliport,New York,NY,USA,40.70121361,-74.00902833\\nJRF,Kalaeloa (John Rodgers),Kapolei,HI,USA,21.30735389,-158.0703017\\nJSO,Jacksonville-Cherokee County,Jacksonville,TX,USA,31.86933667,-95.21739028\\nJST,Johnstown-Cambria Cty,Johnstown,PA,USA,40.31611111,-78.83394444\\nJVL,Rock County,Janesville,WI,USA,42.61958222,-89.04034028\\nJVY,Clark County,Jeffersonville,IN,USA,38.36562278,-85.73829639\\nJWG,Watonga,Watonga,OK,USA,35.86469444,-98.42075\\nJWN,John C. Tune,Nashville,TN,USA,36.18236194,-86.88672278\\nJXN,Jackson County Reynolds,Jackson,MI,USA,42.25978556,-84.45940361\\nJYG,St James Municipal,St James,MN,USA,43.98631833,-94.55793722\\nJYL,Plantation Airpark,Sylvania,GA,USA,32.64544861,-81.59649722\\nJYM,Hillsdale Municipal,Hillsdale,MI,USA,41.92126083,-84.5857625\\nJYO,Leesburg Executive,Leesburg,VA,USA,39.07797222,-77.5575\\nJYR,Municipal,York,NE,USA,40.89675,-97.62277778\\nJZI,Charleston Executive,Charleston,SC,USA,32.70086111,-80.00291667\\nJZP,Pickens County,Jasper,GA,USA,34.45147972,-84.45659278\\nJZZ,Koliganek,Koliganek,AK,USA,59.72664194,-157.2594722\\nK01,Farington,Auburn,NE,USA,40.38750167,-95.78916167\\nK02,Perryville Municipal,Perryville,MO,USA,37.86866667,-89.86213889\\nK06,Greater Beardstown,Beardstown,IL,USA,39.97338139,-90.40373556\\nK09,Piseco Muni,Piseco,NY,USA,43.45340222,-74.51765083\\nK15,Linn Creek-Grand Glaize Memorial,Osage Beach,MO,USA,38.11045,-92.68054583\\nK20,Wendell H. Ford,Hazard,KY,USA,37.38783833,-83.26205889\\nK22,Big Sandy Regional,Prestonburg,KY,USA,37.75102778,-82.63669444\\nK24,Russell County,Jamestown,KY,USA,37.00888889,-85.10277778\\nK29,Council,Council,AK,USA,64.89788278,-163.7034472\\nK33,Salem Memorial,Salem,MO,USA,37.61523333,-91.60444167\\nK34,Municipal,Gardner,KS,USA,38.80708333,-94.95602778\\nK39,St Clair Memorial,St Clair,MO,USA,38.37594333,-90.97073944\\nK46,Blair Municipal,Blair,NE,USA,41.41805139,-96.1136275\\nK54,Teller,Teller,AK,USA,65.24089806,-166.3360067\\nK57,Gould Peterson Municipal,Tarkio,MO,USA,40.44583139,-95.36275806\\nK59,Amelia Earhart,Atchison,KS,USA,39.57052472,-95.18033139\\nK61,Moritz Memorial,Beloit,KS,USA,39.47115222,-98.12878389\\nK62,Falmouth Pendleton County,Falmouth,KY,USA,38.70423611,-84.39160417\\nK67,Oswego Municipal,Oswego,KS,USA,37.15978667,-95.04246222\\nK68,Garnett Municipal,Garnett,KS,USA,38.27918833,-95.21691833\\nK78,Abilene Municipal,Abilene.,KS,USA,38.90405583,-97.23585389\\nK81,Miami County,Paola,KS,USA,38.53751389,-94.92524194\\nK82,Smith Center Municipal,Smith Center,KS,USA,39.76112278,-98.79343639\\nK83,Sabetha Municipal,Sabetha,KS,USA,39.90416667,-95.7794325\\nK88,Allen County,Iola,KS,USA,37.87008333,-95.38638889\\nK89,Macon-Fower Memorial,Macon,MO,USA,39.72870694,-92.464455\\nK96,Tuscola,Tuscola,IL,USA,39.78086528,-88.30616\\nKAE,Kake SPB,Kake,AK,USA,56.97299639,-133.9456147\\nKAL,Kaltag,Kaltag,AK,USA,64.32571917,-158.7441475\\nKCC,Coffman Cove SPB,Coffman Cove,AK,USA,56.00324444,-132.8419689\\nKCL,Chignik Lagoon,Chignik Flats,AK,USA,56.31116306,-158.5359264\\nKEB,English Bay,English Bay,AK,USA,59.35214833,-151.9251558\\nKEK,Ekwok,Ekwok,AK,USA,59.35399444,-157.4744092\\nKFP,False Pass,False Pass,AK,USA,54.84744583,-163.4103222\\nKGX,Grayling,Grayling,AK,USA,62.89456056,-160.0649042\\nKIB,Ivanof Bay SPB,Ivanof Bay,AK,USA,55.89753333,-159.4886689\\nKIC,Mesa Del Rey,King City,CA,USA,36.22802139,-121.1218614\\nKKA,Koyuk,Koyuk,AK,USA,64.93404056,-161.158145\\nKKB,Kitoi Bay SPB,Kitoi Bay,AK,USA,58.19094611,-152.3704875\\nKLG,Kalskag,Kalskag,AK,USA,61.53627389,-160.3413306\\nKLL,Levelock,Levelock,AK,USA,59.11816472,-156.8652169\\nKLS,Kelso-Longview,Kelso,WA,USA,46.118,-122.8983889\\nKNB,Kanab Muni,Kanab,UT,USA,37.01110583,-112.5311936\\nKNW,Stuyahok,New Stuyahok,AK,USA,59.44955333,-157.3271908\\nKOA,Kona International At Keahole,Kailua/Kona,HI,USA,19.73876583,-156.0456314\\nKPB,Point Baker SPB,Point Baker,AK,USA,56.35185972,-133.6225864\\nKPH,Pauloff Harbor SPB,Pauloff Harbor,AK,USA,54.45912028,-162.6936406\\nKQA,Akutan SPB,Akutan,AK,USA,54.13246694,-165.7853111\\nKSM,St. Mary's,St. Mary's,AK,USA,62.06048639,-163.3021108\\nKTB,Thorne Bay,Thorne Bay,AK,USA,55.68796194,-132.5366758\\nKTN,Ketchikan International,Ketchikan,AK,USA,55.35556861,-131.71374\\nKTS,Brevig Mission,Brevig Mission,AK,USA,65.33136111,-166.4631667\\nKVC,King Cove,King Cove,AK,USA,55.1163475,-162.2662272\\nKVL,Kivalina,Kivalina,AK,USA,67.73125333,-164.5518019\\nKWT,Kwethluk,Kwethluk,AK,USA,60.80425194,-161.44535\\nKXA,Kasaan SPB,Kasaan,AK,USA,55.53741389,-132.3975144\\nKYK,Karluk,Karluk,AK,USA,57.56706389,-154.4503714\\nKYU,Koyukuk,Koyukuk,AK,USA,64.87714278,-157.7158358\\nL04,Holtville,Holtville,CA,USA,32.84032361,-115.2674806\\nL05,Kern Valley,Kernville,CA,USA,35.72828472,-118.4198069\\nL06,Furnace Creek,Death Valley National Park,CA,USA,36.46383694,-116.8814425\\nL08,Borrego Valley,Borrego Springs,CA,USA,33.25902778,-116.3209722\\nL12,Redlands Municipal,Redlands,CA,USA,34.08526167,-117.1463789\\nL15,Henderson,Las Vegas,NV,USA,35.97636444,-115.1327708\\nL17,Taft-Kern County,Taft,CA,USA,35.14107806,-119.4412294\\nL18,Fallbrook Community Airpark,Fallbrook,CA,USA,33.35419806,-117.2508686\\nL19,Wasco-Kern County,Wasco,CA,USA,35.61967889,-119.3537242\\nL26,Hesperia,Hesperia,CA,USA,34.37722333,-117.3158783\\nL31,Greater St. Tammany Parish,Covington,LA,USA,30.44505417,-89.98887889\\nL35,Big Bear City,Big Bear,CA,USA,34.26361944,-116.854475\\nL38,Louisiana Regional,Gonzales,LA,USA,30.17135306,-90.94039583\\nL39,Leesville,Leesville,LA,USA,31.16819444,-93.34245833\\nL42,Allen Parish,Oakdale,LA,USA,30.75016667,-92.68847222\\nL45,Bakersfield Municipal,Bakersfield,CA,USA,35.32483333,-118.9958333\\nL49,South Lafourche,Galliano,LA,USA,29.44482222,-90.26111667\\nL52,Oceano County,Oceano,CA,USA,35.10136472,-120.6221153\\nL67,Rialto Municipal,Rialto,CA,USA,34.12934361,-117.4016303\\nL70,Agua Dulce Airpark,Agua Dulce,CA,USA,34.50415889,-118.3128561\\nL71,California City Municipal,California City,CA,USA,35.15125306,-118.0166667\\nL72,Trona,Trona,CA,USA,35.81245333,-117.3272783\\nL75,Southland,Sulphur,LA,USA,30.13138889,-93.37611111\\nL83,Thibodaux Municipal,Thibodaux,LA,USA,29.74779194,-90.83289889\\nL84,Lost Hills-Kern County,Lost Hills,CA,USA,35.62357083,-119.6862383\\nL92,Alamo Landing,Alamo,NV,USA,37.36246083,-115.1944622\\nLAA,Lamar Muni,Lamar,CO,USA,38.06969444,-102.6885\\nLAF,Purdue University,Lafayette,IN,USA,40.41231694,-86.93689889\\nLAL,Lakeland Linder Regional,Lakeland,FL,USA,27.98891667,-82.01855556\\nLAM,Los Alamos,Los Alamos,NM,USA,35.87980194,-106.2694153\\nLAN,Capital City,Lansing,MI,USA,42.7787,-84.58735806\\nLAR,Laramie Regional,Laramie,WY,USA,41.31205,-105.6749864\\nLAS,McCarran International,Las Vegas,NV,USA,36.08036111,-115.1523333\\nLAW,Lawton-Ft Sill Regional,Lawton,OK,USA,34.56771444,-98.41663667\\nLAX,Los Angeles International,Los Angeles,CA,USA,33.94253611,-118.4080744\\nLBB,Lubbock International,Lubbock,TX,USA,33.66363889,-101.8227778\\nLBE,Arnold Palmer Regional,Latrobe,PA,USA,40.27594,-79.40479722\\nLBF,North Platte Regional,North Platte,NE,USA,41.12621194,-100.6836542\\nLBL,Liberal Municipal,Liberal,KS,USA,37.04420944,-100.9598611\\nLBO,Floyd W Jones Lebanon,Lebanon,MO,USA,37.64718056,-92.65375778\\nLBT,Lumberton Municipal,Lumberton,NC,USA,34.60991667,-79.05944444\\nLBX,Brazoria County,Angleton,TX,USA,29.10863889,-95.46208056\\nLCG,Wayne Municipal,Wayne,NE,USA,42.24188889,-96.98141667\\nLCH,Lake Charles Regional,Lake Charles,LA,USA,30.1260975,-93.22340361\\nLCI,Laconia Municipal,Laconia,NH,USA,43.57272806,-71.41890028\\nLCK,Rickenbacker International,Columbus,OH,USA,39.81375917,-82.92786472\\nLCQ,Lake City Municipal,Lake City,FL,USA,30.18205556,-82.57686111\\nLDJ,Linden,Linden,NJ,USA,40.61744722,-74.24459417\\nLDM,Mason County,Ludington,MI,USA,43.96253278,-86.40791528\\nLEB,Lebanon Municipal,Lebanon,NH,USA,43.62637222,-72.30426722\\nLEE,Leesburg Regional,Leesburg,FL,USA,28.82274417,-81.80900722\\nLEM,Lemmon Municipal,Lemmon,SD,USA,45.91869722,-102.1061778\\nLEW,Auburn-Lewiston Municipal,Auburn-Lewiston,ME,USA,44.04847278,-70.2835075\\nLEX,Blue Grass,Lexington,KY,USA,38.03697222,-84.60538889\\nLFK,Lufkin-Angelina County,Lufkin,TX,USA,31.23401389,-94.75\\nLFT,Lafayette Regional,Lafayette,LA,USA,30.20527972,-91.987655\\nLGA,LaGuardia,New York,NY,USA,40.77724306,-73.87260917\\nLGB,Long Beach (Daugherty),Long Beach,CA,USA,33.81772222,-118.1516111\\nLGC,LaGrange-Callaway,Lagrange,GA,USA,33.00884694,-85.07260556\\nLGD,La Grande/Union County,La Grande,OR,USA,45.29020944,-118.0071108\\nLGU,Logan-Cache,Logan,UT,USA,41.78773083,-111.8526822\\nLHD,Lake Hood SPB,Anchorage,AK,USA,61.18000361,-149.9719322\\nLHM,Lincoln Regional,Lincoln,CA,USA,38.90916111,-121.3513361\\nLHQ,Fairfield County,Lancaster,OH,USA,39.75564722,-82.65711\\nLHV,Wm T Piper Memorial,Lock Haven,PA,USA,41.13618028,-77.42053556\\nLHX,La Junta Muni,La Junta,CO,USA,38.05134111,-103.5106908\\nLHZ,Franklin County,Louisburg,NC,USA,36.02334528,-78.33027139\\nLIC,Limon Municipal,Limon,CO,USA,39.272765,-103.6663392\\nLIH,Lihue,Lihue,HI,USA,21.97598306,-159.3389581\\nLIT,Adams,Little Rock,AR,USA,34.72939611,-92.22424556\\nLJF,Litchfield Municipal,Litchfield,MN,USA,45.09712889,-94.50726833\\nLKP,Lake Placid,Lake Placid,NY,USA,44.26447361,-73.96186639\\nLKR,Lancaster County,Lancaster,SC,USA,34.72291667,-80.85458333\\nLKU,Louisa County / Freeman,Louisa,VA,USA,38.00983333,-77.97013889\\nLKV,Lake County,Lakeview,OR,USA,42.16111111,-120.3990703\\nLLJ,Challis,Challis,ID,USA,44.52297806,-114.2175642\\nLLQ,Monticello Municipal,Monticello,AR,USA,33.6385525,-91.75101833\\nLLU,Lamar Municipal,Lamar,MO,USA,37.4894925,-94.31150444\\nLMS,Louisville-Winston County,Louisville,MS,USA,33.14620944,-89.06247917\\nLMT,Klamath Falls International,Klamath Falls,OR,USA,42.15614361,-121.7332081\\nLNA,Palm Beach County Park,Lantana,FL,USA,26.593,-80.08505556\\nLNC,Lancaster,Lancaster,TX,USA,32.57919111,-96.71905111\\nLND,Hunt,Lander,WY,USA,42.81523611,-108.7298392\\nLNK,Lincoln Municipal,Lincoln,NE,USA,40.85097222,-96.75925\\nLNL,Kings Land O' Lakes,Land O' Lakes,WI,USA,46.15387722,-89.21194417\\nLNN,Lost Nation,Willoughby,OH,USA,41.68391667,-81.39030556\\nLNP,Lonesome Pine,Wise,VA,USA,36.98743194,-82.53017361\\nLNS,Lancaster,Lancaster,PA,USA,40.12171528,-76.29609778\\nLNY,Lanai,Lanai City,HI,USA,20.78561111,-156.9514181\\nLOL,Derby,Lovelock,NV,USA,40.066405,-118.5651664\\nLOT,Lewis University,Chicago/Romeoville,IL,USA,41.60844444,-88.09094444\\nLOU,Bowman,Louisville,KY,USA,38.228,-85.66372222\\nLOZ,London-Corbin Magee,London,KY,USA,37.08727778,-84.07677778\\nLPC,Lompoc,Lompoc,CA,USA,34.66561028,-120.4667883\\nLPR,Lorain Co Regional,Lorain/Elyria,OH,USA,41.34427778,-82.17763889\\nLQK,Pickens County,Pickens,SC,USA,34.80997222,-82.70288889\\nLQR,Larned-Pawnee County,Larned,KS,USA,38.20809667,-99.08607306\\nLRD,Laredo International,Laredo,TX,USA,27.54373861,-99.46154361\\nLRG,Lincoln Regional,Lincoln,ME,USA,45.36216083,-68.53474694\\nLRJ,Le Mars Municipal,Le Mars,IA,USA,42.77801778,-96.19368944\\nLRU,Las Cruces International,Las Cruces,NM,USA,32.28941667,-106.9219722\\nLSB,Lordsburg Municipal,Lordsburg,NM,USA,32.33278083,-108.6909742\\nLSE,La Crosse Municipal,La Crosse,WI,USA,43.87937972,-91.25653778\\nLSK,Lusk Muni,Lusk,WY,USA,42.75380806,-104.4045536\\nLSN,Los Banos Municipal,Los Banos,CA,USA,37.06290556,-120.8692511\\nLUG,Ellington,Lewisburg,TN,USA,35.506975,-86.80388611\\nLUK,Cincinnati Muni-Lunken,Cincinnati,OH,USA,39.10334417,-84.41861417\\nLUL,Hesler-Noble,Laurel,MS,USA,31.67255139,-89.17222417\\nLUP,Kalaupapa,Kalaupapa,HI,USA,21.21104028,-156.9735972\\nLVJ,Clover,Houston,TX,USA,29.52130556,-95.24216667\\nLVK,Livermore Municipal,Livermore,CA,USA,37.69339944,-121.8203519\\nLVM,Mission,Livingston,MT,USA,45.69938889,-110.4483056\\nLVN,Airlake,Minneapolis,MN,USA,44.62785361,-93.22810806\\nLVS,Las Vegas Municipal,Las Vegas,NM,USA,35.65422222,-105.1423889\\nLWB,Greenbrier Valley,Lewisburg,WV,USA,37.85830556,-80.39947222\\nLWC,Lawrence Municipal,Lawrence,KS,USA,39.01115222,-95.21657694\\nLWD,Lamoni Municipal,Lamoni,IA,USA,40.63333306,-93.90217028\\nLWL,Wells Municipal/Harriet,Wells,NV,USA,41.11853306,-114.9222661\\nLWM,Lawrence Municipal,Lawrence,MA,USA,42.71720944,-71.12343\\nLWS,Lewiston-Nez Perce County,Lewiston,ID,USA,46.37449806,-117.0153944\\nLWT,Lewistown Muni,Lewistown,MT,USA,47.04913944,-109.4666006\\nLWV,Lawrenceville-Vincennes Municipal,Lawrenceville,IL,USA,38.76429639,-87.60549556\\nLXL,Little Falls - Morrison County,Little Falls,MN,USA,45.94943778,-94.34708472\\nLXN,Lexington (Jim Kelly),Lexington,NE,USA,40.791,-99.77727778\\nLXT,Lee's Summit Municipal,Lee's Summit,MO,USA,38.95975,-94.37158333\\nLXV,Lake County,Leadville,CO,USA,39.2202675,-106.3166906\\nLXY,Mexia-Limestone County,Mexia,TX,USA,31.63983472,-96.51472222\\nLYH,Lynchburg Municipal-Preston Glenn,Lynchburg,VA,USA,37.32668528,-79.20043056\\nLYO,Lyons-Rice County Municipal,Lyons,KS,USA,38.34261472,-98.22709639\\nLZU,Gwinnett County,Lawrenceville,GA,USA,33.97807611,-83.96237722\\nM01,General Dewitt Spain,Memphis,TN,USA,35.20069278,-90.05397694\\nM02,Dickson Municipal,Dickson,TN,USA,36.12931722,-87.43007056\\nM03,Dennis F Cantrell,Conway,AR,USA,35.08080778,-92.42496167\\nM04,Covington Municipal,Covington,TN,USA,35.583365,-89.58722167\\nM05,Caruthersville Memorial,Caruthersville,MO,USA,36.17506917,-89.67508\\nM08,William L. Whitehurst,Bolivar,TN,USA,35.21445944,-89.04336222\\nM09,Piedmont Municipal,Piedmont,MO,USA,37.12671694,-90.7128975\\nM11,Copiah County,Crystal Springs,MS,USA,31.90293639,-90.36870222\\nM13,Poplarville-Pearl River County,Poplarville,MS,USA,30.78602056,-89.50450694\\nM15,Perry County,Linden,TN,USA,35.59590306,-87.87669361\\nM16,John Bell Williams,Raymond,MS,USA,32.30334111,-90.40848333\\nM17,Bolivar Municipal,Bolivar,MO,USA,37.59693194,-93.34765\\nM18,Hope Municipal,Hope,AR,USA,33.72008889,-93.65884556\\nM19,Newport Municipal,Newport,AR,USA,35.63771778,-91.17637556\\nM21,Muhlenberg County,Greenville,KY,USA,37.22561111,-87.15752778\\nM22,Russellville Municipal,Russellville,AL,USA,34.44953972,-87.71030833\\nM23,James H. Easom,Newton,MS,USA,32.31181111,-89.13589194\\nM24,Dean Griffin Memorial,Wiggins,MS,USA,30.84324389,-89.15977333\\nM25,Mayfield-Graves County,Mayfield,KY,USA,36.76911111,-88.58472222\\nM27,Waldron Municipal,Waldron,AR,USA,34.87509944,-94.10993056\\nM29,Hassel,Clifton,TN,USA,35.38507528,-87.96752833\\nM30,Metropolis Municipal,Metropolis,IL,USA,37.18588722,-88.75061\\nM32,Lake Village Municipal,Lake Village,AR,USA,33.3459775,-91.31569833\\nM33,Sumner County Regional,Gallatin,TN,USA,36.37684472,-86.40875861\\nM34,Kentucky Dam State Park,Gilbertsville,KY,USA,37.00950028,-88.29586639\\nM36,Frank Federer Memorial,Brinkley,AR,USA,34.88000194,-91.1764375\\nM37,Ruleville-Drew,Drew,MS,USA,33.77639167,-90.52500833\\nM39,Mena Intermountain Municipal,Mena,AR,USA,34.54539444,-94.20265278\\nM40,Monroe County,Aberdeen-Amory,MS,USA,33.87374861,-88.48967833\\nM41,Holly Springs-Marshall County,Holly Springs,MS,USA,34.80434611,-89.5211075\\nM43,Prentiss-Jefferson Davis County,Prentiss,MS,USA,31.59544583,-89.90619056\\nM44,Houston Municipal,Houston,MS,USA,33.89177944,-89.02367194\\nM46,Colstrip,Colstrip,MT,USA,45.85285,-106.7092722\\nM48,Houston Memorial,Houston,MO,USA,37.33009167,-91.97316944\\nM52,Franklin-Wilkins,Lexington,TN,USA,35.65131944,-88.37893444\\nM53,Humboldt Municipal,Humboldt,TN,USA,35.80218,-88.87494944\\nM54,Lebanon Municipal,Lebanon,TN,USA,36.19041667,-86.31569444\\nM58,Monett Municipal,Monett,MO,USA,36.90621528,-94.01275833\\nM59,Richton-Perry County,Richton,MS,USA,31.31739944,-88.93504778\\nM60,Woodruff County,Augusta,AR,USA,35.27175278,-91.27040417\\nM65,Wynne Municipal,Wynne,AR,USA,35.23160167,-90.76155111\\nM70,Pocahontas Municipal,Pocahontas,AR,USA,36.24551111,-90.95520444\\nM72,New Albany-Union County,New Albany,MS,USA,34.54722222,-89.02416667\\nM73,Almyra Municipal,Almyra,AR,USA,34.41232833,-91.46634722\\nM75,Malta,Malta,MT,USA,48.36694167,-107.9193444\\nM76,Picayune Municipal,Picayune,MS,USA,30.48748472,-89.65119306\\nM77,Howard County,Nashville,AR,USA,33.99673833,-93.83813583\\nM78,Malvern Municipal,Malvern,AR,USA,34.33331583,-92.76149944\\nM79,John H Hooks Jr Memorial,Rayville,LA,USA,32.48633611,-91.77087528\\nM82,Madison County Executive,Huntsville,AL,USA,34.85645028,-86.55621472\\nM83,McCharen,West Point,MS,USA,33.58403556,-88.66668694\\nM89,Dexter B. Florence Memorial,Arkadelphia,AR,USA,34.09984639,-93.06611694\\nM91,Springfield-Robertson County,Springfield,TN,USA,36.53726194,-86.92068917\\nM95,Richard Arthur,Fayette,AL,USA,33.71221972,-87.81504639\\nM97,Tunica Municipal,Tunica,MS,USA,34.69232306,-90.35065389\\nM99,Saline County/Watts,Benton,AR,USA,34.55656472,-92.60693972\\nMAC,Herbert Smart Downtown,Macon,GA,USA,32.82213889,-83.56202778\\nMAE,Madera Municipal,Madera,CA,USA,36.9857175,-120.1119844\\nMAF,Midland International,Midland,TX,USA,31.94252778,-102.2019139\\nMAI,Marianna Municipal,Marianna,FL,USA,30.83780556,-85.18188889\\nMAL,Malone-Dufort,Malone,NY,USA,44.85365722,-74.32894972\\nMAO,Marion County,Marion,SC,USA,34.18116667,-79.33472222\\nMAW,Malden Municipal,Malden,MO,USA,36.60055694,-89.99220278\\nMAZ,Eugenio Maria De Hostos,Mayaguez,PR,USA,18.25569444,-67.14847222\\nMBG,Mobridge Municipal,Mobridge,SD,USA,45.54650361,-100.4079192\\nMBL,Manistee County Blacker,Manistee,MI,USA,44.27319722,-86.2490025\\nMBO,Bruce Campbell,Madison,MS,USA,32.43866444,-90.10309222\\nMBS,Mbs International,Saginaw,MI,USA,43.53291472,-84.07964722\\nMBT,Murfreesboro Municipal,Murfreesboro,TN,USA,35.87748444,-86.37753222\\nMBY,Omar N Bradley,Moberly,MO,USA,39.46392583,-92.42759778\\nMCB,McComb-Pike County,McComb,MS,USA,31.17845444,-90.47187528\\nMCD,Mackinac Island,Mackinac Island,MI,USA,45.86493444,-84.63734444\\nMCE,Merced Municipal/MacReady,Merced,CA,USA,37.28472861,-120.5138858\\nMCG,McGrath,McGrath,AK,USA,62.95287361,-155.6057625\\nMCI,Kansas City International,Kansas City,MO,USA,39.29760528,-94.71390556\\nMCK,McCook Municipal,McCook,NE,USA,40.20638889,-100.5918056\\nMCN,Middle Georgia Regional,Macon,GA,USA,32.69284944,-83.64921083\\nMCO,Orlando International,Orlando,FL,USA,28.42888889,-81.31602778\\nMCW,Mason City Municipal,Mason City,IA,USA,43.1577925,-93.33126056\\nMCX,White County,Monticello,IN,USA,40.70881639,-86.76676139\\nMCZ,Martin County,Williamston,NC,USA,35.86219306,-77.17820278\\nMDD,Midland Airpark,Midland,TX,USA,32.03652444,-102.1010278\\nMDF,Mooreland Municipal,Mooreland,OK,USA,36.48475778,-99.19415778\\nMDH,Southern Illinois,Carbondale,IL,USA,37.77809583,-89.25203111\\nMDR,Medfra,Medfra,AK,USA,63.10577694,-154.7189806\\nMDS,Madison Municipal,Madison,SD,USA,44.01597222,-97.08593333\\nMDT,Harrisburg Intl,Harrisburg,PA,USA,40.19349528,-76.76340361\\nMDW,Chicago Midway,Chicago,IL,USA,41.7859825,-87.75242444\\nMDZ,Taylor County,Medford,WI,USA,45.10097556,-90.30341\\nMEB,Laurinburg-Maxton,Maxton,NC,USA,34.79193917,-79.36584778\\nMEI,Key,Meridian,MS,USA,32.33313333,-88.75120556\\nMEJ,Meade Municipal,Meade,KS,USA,37.27938889,-100.3563056\\nMEM,Memphis International,Memphis,TN,USA,35.04241667,-89.97666667\\nMER,Castle,Atwater,CA,USA,37.38048056,-120.5681889\\nMEV,Minden-Tahoe,Minden,NV,USA,39.00030889,-119.7508064\\nMEY,Mapleton Municipal,Mapleton,IA,USA,42.178295,-95.79364528\\nMFD,Mansfield Lahm Municipal,Mansfield,OH,USA,40.82141667,-82.51663889\\nMFE,McAllen Miller International,McAllen,TX,USA,26.17583333,-98.23861111\\nMFI,Marshfield Municipal,Marshfield,WI,USA,44.63687972,-90.18932667\\nMFR,Rogue Valley International,Medford,OR,USA,42.37422778,-122.8734978\\nMFV,Accomack County,Melfa,VA,USA,37.64688889,-75.76105556\\nMGC,Michigan City Municipal,Michigan City,IN,USA,41.70331694,-86.82124167\\nMGJ,Orange Cty,Montgomery,NY,USA,41.50998278,-74.26465056\\nMGM,Montgomery Regional Apt,Montgomery,AL,USA,32.30064417,-86.39397611\\nMGR,Moultrie Municipal,Moultrie,GA,USA,31.08490917,-83.80325528\\nMGW,Morgantown Muni-Walter L. Bill Hart Fld.,Morgantown,WV,USA,39.6429075,-79.91631417\\nMGY,Dayton Wright Brothers,Dayton,OH,USA,39.58897222,-84.22486111\\nMHE,Mitchell Municipal,Mitchell,SD,USA,43.77483333,-98.03861111\\nMHK,Manhattan Regional,Manhattan,KS,USA,39.14096722,-96.67083278\\nMHL,Marshall Memorial Municipal,Marshall,MO,USA,39.09575472,-93.20287889\\nMHM,Minchumina,Minchumina,AK,USA,63.880565,-152.3006756\\nMHP,Metter Municipal,Metter,GA,USA,32.37388889,-82.07919444\\nMHR,Sacramento Mather,Sacramento,CA,USA,38.55389694,-121.2975908\\nMHT,Manchester,Manchester,NH,USA,42.93451639,-71.43705583\\nMHV,Mojave,Mojave,CA,USA,35.05936472,-118.1518561\\nMIA,Miami International,Miami,FL,USA,25.79325,-80.29055556\\nMIB,Minot AFB,NA,NA,USA,48.415769,-101.358039\\nMIC,Crystal,Minneapolis,MN,USA,45.06198611,-93.3539375\\nMIE,Delaware County,Muncie,IN,USA,40.24234806,-85.39586\\nMIO,Miami Municipal,Miami,OK,USA,36.90922083,-94.88750028\\nMIT,Shafter-Minter,Shafter,CA,USA,35.50592944,-119.1915236\\nMIV,Millville Muni,Millville,NJ,USA,39.36780556,-75.07222222\\nMIW,Marshalltown Municipal,Marshalltown,IA,USA,42.11272639,-92.91778778\\nMJQ,Jackson Municipal,Jackson,MN,USA,43.65004111,-94.98654611\\nMJX,Robert J. Miller Airpark,Toms River,NJ,USA,39.92749806,-74.29237917\\nMKA,Miller Municipal,Miller,SD,USA,44.52524444,-98.95811444\\nMKC,Downtown,Kansas City,MO,USA,39.12324111,-94.592735\\nMKE,General Mitchell International,Milwaukee,WI,USA,42.94722222,-87.89658333\\nMKG,Muskegon County,Muskegon,MI,USA,43.16948806,-86.23822306\\nMKJ,Mountain Empire,Marion,VA,USA,36.8948525,-81.349955\\nMKK,Molokai,Kaunakakai,HI,USA,21.15288583,-157.0962561\\nMKL,McKellar-Sipes Regional,Jackson,TN,USA,35.59987944,-88.91561611\\nMKO,Davis,Muskogee,OK,USA,35.65773028,-95.36164889\\nMKT,Mankato Regional,Mankato,MN,USA,44.22164528,-93.91874333\\nMKV,Marksville Municipal,Marksville,LA,USA,31.09466,-92.06906861\\nMKY,Marco Island,Marco Island,FL,USA,25.99502778,-81.67252778\\nMLB,Melbourne International,Melbourne,FL,USA,28.10275,-80.64580556\\nMLC,McAlester Regional,McAlester,OK,USA,34.88240194,-95.78346278\\nMLE,Millard,Omaha,NE,USA,41.196,-96.11227778\\nMLF,Milford Municipal,Milford,UT,USA,38.4266325,-113.0124564\\nMLI,Quad City,Moline,IL,USA,41.44852639,-90.50753917\\nMLJ,Baldwin County,Milledgeville,GA,USA,33.15419444,-83.24061111\\nMLL,Marshall,Marshall,AK,USA,61.8659225,-162.0690456\\nMLS,Frank Wiley,Miles City,MT,USA,46.42795972,-105.8862397\\nMLT,Millinocket Municipal,Millinocket,ME,USA,45.64783611,-68.68556194\\nMLU,Monroe Regional,Monroe,LA,USA,32.51086556,-92.03768778\\nMLY,Manley Hot Springs,Manley Hot Springs,AK,USA,64.99756472,-150.6441297\\nMMH,Mammoth Yosemite,Mammoth Lakes,CA,USA,37.62404861,-118.8377722\\nMMI,McMinn County,Athens,TN,USA,35.39730333,-84.56256861\\nMMK,Meriden-Markham Municipal,Meriden,CT,USA,41.50871472,-72.82947833\\nMML,Marshall Muni - Ryan,Marshall,MN,USA,44.45006611,-95.82234028\\nMMU,Morristown Municipal,Morristown,NJ,USA,40.79935,-74.41487472\\nMMV,McMinnville Muni,McMinnville,OR,USA,45.19444444,-123.1359444\\nMNF,Mountain View,Mountain View,MO,USA,36.99282694,-91.71445611\\nMNI,Clarendon County,Manning,SC,USA,33.58711111,-80.20866667\\nMNM,Menominee-Marinette Twin County,Menominee,MI,USA,45.12665028,-87.63844056\\nMNN,Marion Municipal,Marion,OH,USA,40.61625,-83.06347222\\nMNV,Monroe County,Madisonville,TN,USA,35.54537222,-84.380235\\nMNZ,Hamilton Municipal,Hamilton,TX,USA,31.66592639,-98.1486375\\nMO6,Washington Memorial,Washington,MO,USA,38.59163472,-90.99761444\\nMO85,Lawrence Smith Memorial,Harrisonville,MO,USA,38.61102222,-94.34213056\\nMOB,Mobile Regional,Mobile,AL,USA,30.69141667,-88.24283333\\nMOD,Modesto City-County-Harry Sham,Modesto,CA,USA,37.62581722,-120.9544214\\nMOP,Mount Pleasant Municipal,Mount Pleasant,MI,USA,43.62166833,-84.737485\\nMOR,Moore-Murrell,Morristown,TN,USA,36.17939639,-83.37544944\\nMOT,Minot International,Minot,ND,USA,48.25937778,-101.2803339\\nMOU,Mountain Village,Mountain Village,AK,USA,62.09536222,-163.6820594\\nMOX,Morris Municipal,Morris,MN,USA,45.56651667,-95.96763611\\nMPE,Philadelphia Municipal,Philadelphia,MS,USA,32.7995775,-89.12589472\\nMPJ,Petit Jean Park,Morrilton,AR,USA,35.13886306,-92.90919694\\nMPO,Pocono Mountains Muni,Mount Pocono,PA,USA,41.1374775,-75.37887833\\nMPR,McPherson,McPherson,KS,USA,38.35243722,-97.69133028\\nMPV,Edward F Knapp State,Barre-Montpelier,VT,USA,44.203505,-72.56232944\\nMPZ,Mount Pleasant Municipal,Mount Pleasant,IA,USA,40.94661389,-91.511075\\nMQB,Macomb Municipal,Macomb,IL,USA,40.52034556,-90.65246389\\nMQI,Dare County Regional,Manteo,NC,USA,35.91898806,-75.69553944\\nMQJ,Mount Comfort,Indianapolis,IN,USA,39.84348556,-85.89706389\\nMQT,Marquette County Airport,NA,NA,USA,46.353639,-87.395361\\nMQW,Telfair-Wheeler,McRae,GA,USA,32.09577778,-82.88002778\\nMQY,Smyrna,Smyrna,TN,USA,36.00897944,-86.52007667\\nMRB,Eastern Wv Reg/Shephard,Martinsburg,WV,USA,39.40193278,-77.98458139\\nMRC,Maury County,Columbia-Mt Pleasant,TN,USA,35.55413889,-87.17891667\\nMRF,Marfa Municipal,Marfa,TX,USA,30.37147222,-104.0166944\\nMRH,Michael J. Smith,Beaufort,NC,USA,34.73355028,-76.66059611\\nMRI,Merrill,Anchorage,AK,USA,61.21437861,-149.8461614\\nMRJ,Iowa County,Mineral Point,WI,USA,42.88532917,-90.23198583\\nMRN,Morganton-Lenoir,Morganton,NC,USA,35.82149222,-81.61073639\\nMRY,Monterey Peninsula,Monterey,CA,USA,36.5869825,-121.8429478\\nMSA,Mount Pleasant Municipal,Mount Pleasant,TX,USA,33.12936111,-94.97563889\\nMSL,Northwest Alabama Regional,Muscle Shoals,AL,USA,34.74532028,-87.61023222\\nMSN,Dane County Regional,Madison,WI,USA,43.13985778,-89.33751361\\nMSO,Missoula International,Missoula,MT,USA,46.91630556,-114.0905556\\nMSP,Minneapolis-St Paul Intl,Minneapolis,MN,USA,44.88054694,-93.2169225\\nMSS,Massena Int'l-Richards,Massena,NY,USA,44.93582722,-74.84554583\\nMSV,Sullivan Cty Intl,Monticello,NY,USA,41.70164917,-74.79501389\\nMSY,New Orleans International,New Orleans,LA,USA,29.99338889,-90.25802778\\nMTH,Florida Keys Marathon,Marathon,FL,USA,24.72614083,-81.05137806\\nMTJ,Montrose Regional,Montrose,CO,USA,38.50886722,-107.8938333\\nMTM,Metlakatla SPB,Metlakatla,AK,USA,55.13104528,-131.5780675\\nMTN,Martin State,Baltimore,MD,USA,39.32566333,-76.41376556\\nMTO,Coles County Memorial,Mattoon-Charleston,IL,USA,39.47793722,-88.27923833\\nMTP,Montauk,Montauk,NY,USA,41.07694333,-71.92039972\\nMTV,Blue Ridge,Martinsville,VA,USA,36.63074861,-80.01834917\\nMTW,Manitowoc County,Manitowoc,WI,USA,44.1287725,-87.68058472\\nMUE,Waimea-Kohala,Kamuela,HI,USA,20.00132694,-155.6681072\\nMUT,Muscatine Municipal,Muscatine,IA,USA,41.36786333,-91.14821639\\nMVC,Monroe County,Monroeville,AL,USA,31.45805306,-87.35104028\\nMVE,Montevideo-Chippewa County,Montevideo,MN,USA,44.96905556,-95.71025\\nMVI,Monte Vista Muni,Monte Vista,CO,USA,37.52855833,-106.0460533\\nMVL,Morrisville-Stowe State,Morrisville,VT,USA,44.53460806,-72.61400444\\nMVM,Machias Valley,Machias,ME,USA,44.70311111,-67.47861111\\nMVN,Mt Vernon-Outland,Mt. Vernon,IL,USA,38.32335444,-88.85847917\\nMVY,Marthas Vineyard,Marthas Vineyard,MA,USA,41.39302583,-70.6143325\\nMWA,Williamson County,Marion,IL,USA,37.75313528,-89.01159694\\nMWC,Lawrence J Timmerman,Milwaukee,WI,USA,43.11092694,-88.03442194\\nMWH,Grant County,Moses Lake,WA,USA,47.20770806,-119.3201897\\nMWK,Mount Airy-Surry County,Mount Airy,NC,USA,36.459735,-80.55295722\\nMWL,Mineral Wells Municipal,Mineral Wells,TX,USA,32.78160556,-98.060175\\nMWM,Windom Municipal,Windom,MN,USA,43.91340167,-95.10940833\\nMWO,Hook Field Municipal,Middletown,OH,USA,39.53102778,-84.39527778\\nMXA,Manila Municipal,Manila,AR,USA,35.89444444,-90.15456944\\nMXO,Monticello Municipal,Monticello,IA,USA,42.22611111,-91.16708333\\nMYF,Montgomery,San Diego,CA,USA,32.81573306,-117.1395664\\nMYK,May Creek,May Creek,AK,USA,61.33567417,-142.686775\\nMYL,McCall,McCall,ID,USA,44.88879556,-116.1017497\\nMYR,Myrtle Beach International,Myrtle Beach,SC,USA,33.67975,-78.92833333\\nMYU,Mekoryuk,Mekoryuk,AK,USA,60.37142,-166.2706083\\nMYV,Yuba County,Marysville,CA,USA,39.09777278,-121.569825\\nMYZ,Marysville Municipal,Marysville,KS,USA,39.85416833,-96.63021389\\nMZJ,Pinal Airpark,Marana,AZ,USA,32.50984389,-111.3253339\\nMZZ,Marion Municipal,Marion,IN,USA,40.49037278,-85.67914389\\nN00,Maben,Lexington,NY,USA,42.27230778,-74.39403667\\nN03,Cortland Cty-Chase,Cortland,NY,USA,42.59264528,-76.2148825\\nN04,Griswold,Madison,CT,USA,41.27118222,-72.54972972\\nN07,Lincoln Park,Lincoln Park,NJ,USA,40.94752444,-74.31450139\\nN10,Perkiomen Valley,Collegeville,PA,USA,40.20404833,-75.43026306\\nN12,Lakewood,Lakewood,NJ,USA,40.0667825,-74.17764167\\nN13,Bloomsburg Muni,Bloomsburg,PA,USA,40.99778111,-76.43605583\\nN14,Flying W,Lumbrerton,NJ,USA,39.93427778,-74.80725\\nN23,Sidney Muni,Sidney,NY,USA,42.30258,-75.41595639\\nN24,Questa Municipal Nr 2,Questa,NM,USA,36.80030556,-105.5975\\nN25,Westport,\\\"Westport, NY\\\",NY,USA,44.15838611,-73.43290444\\nN27,Bradford County,Towanda,PA,USA,41.74324028,-76.44457083\\nN29,Magdalena,Magdalena,NM,USA,34.09450778,-107.2978142\\nN30,Cherry Ridge,Honesdale,PA,USA,41.51533861,-75.25148139\\nN35,Punxsutawney Muni,Punxsutawney,PA,USA,40.96667472,-78.93000528\\nN37,Monticello,Monticello,NY,USA,41.62249167,-74.70141111\\nN38,Grand Canyon State,Wellsboro,PA,USA,41.72790028,-77.39651139\\nN40,Sky Manor,Pittstown,NJ,USA,40.56626889,-74.97864139\\nN47,Pottstown Muni,Pottstown,PA,USA,40.26040083,-75.67085306\\nN51,Solberg-Hunterdon,Readington,NJ,USA,40.58286278,-74.73656222\\nN53,Stroudsburg-Pocono,East Stroudsburg,PA,USA,41.03587167,-75.16067889\\nN57,New Garden Flying,Toughkenamon,PA,USA,39.83052639,-75.76974472\\nN66,Oneonta Muni,Oneonta,NY,USA,42.52476694,-75.06446167\\nN67,Wings,Ambler,PA,USA,40.13647333,-75.26702972\\nN68,Chambersburg Muni,Chambersburg,PA,USA,39.97295167,-77.64326778\\nN69,Stormville,Stormville,NY,USA,41.57698222,-73.73235278\\nN72,Warwick Muni,Warwick,NY,USA,41.28759361,-74.28709472\\nN73,Red Lion,Vincentown,NJ,USA,39.90415167,-74.74954917\\nN79,Northumberland Cty,Shamokin,PA,USA,40.83692306,-76.55245611\\nN81,Hammonton Muni,Hammonton,NJ,USA,39.66746889,-74.75773444\\nN82,Wurtsboro-Sullivan Cty,Wurtsboro,NY,USA,41.59720444,-74.45840722\\nN85,Alexandria,Pittstown,NJ,USA,40.58757389,-75.01942056\\nN87,Trenton-Robbinsville,Robbinsville,NJ,USA,40.21394333,-74.60179472\\nN89,Joseph Y. Resnick,Ellenville,NY,USA,41.72787111,-74.37737583\\nN93,New Golovin,Golovin,AK,USA,64.55305556,-163.0088889\\nN99,Brandywine,West Chester,PA,USA,39.99472222,-75.58333333\\nNC14,Rockingham County NC Shiloh,Reidsville,NC,USA,36.43722083,-79.85101\\nNC67,Ashe County,West Jefferson,NC,USA,36.43243111,-81.41968472\\nND06,Cavalier Municipal,Cavalier,ND,USA,48.78388139,-97.62981028\\nND12,Ellendale Municipal,Ellendale,ND,USA,46.01247194,-98.51287889\\nND17,Harvey Municipal,Harvey,ND,USA,47.79123306,-99.93174222\\nND26,Kenmare Municipal,Kenmare,ND,USA,48.66758278,-102.0475944\\nND28,Lakota Municipal,Lakota,ND,USA,48.0313875,-98.32788111\\nND29,La Moure Rott Municipal,La Moure (New Site),ND,USA,46.34663556,-98.28371\\nND33,Linton Municipal,Linton,ND,USA,46.21830472,-100.2450028\\nND44,Mott Municipal,Mott,ND,USA,46.359725,-102.3229389\\nND66,Washburn Municipal,Washburn,ND,USA,47.35305,-101.0273681\\nNEW,Lakefront,New Orleans,LA,USA,30.04242056,-90.02825694\\nNH12,Plymouth Municipal,Plymouth,NH,USA,43.77923806,-71.75369056\\nNK03,Kamp,Durhamville,NY,USA,43.13472111,-75.64890417\\nNQA,Millington Municipal,Millington,TN,USA,35.35666667,-89.87027778\\nNRN,Norton Municipal,Norton,KS,USA,39.84914444,-99.89320583\\nNUL,Nulato,Nulato,AK,USA,64.72981944,-158.0731889\\nNVD,Nevada Municipal,Nevada,MO,USA,37.85206528,-94.30486472\\nNY0,Fulton Cty,Johnstown,NY,USA,42.99821222,-74.32955111\\nO02,Nervino,Beckwourth,CA,USA,39.82073556,-120.3543767\\nO05,Rogers,Chester,CA,USA,40.28235278,-121.2411683\\nO08,Colusa County,Colusa,CA,USA,39.17903,-121.9933611\\nO09,Round Valley,Covelo,CA,USA,39.79015444,-123.2664025\\nO11,Cherokee Nation,Stilwell,OK,USA,35.75703083,-94.64994417\\nO15,Turlock Municipal,Turlock,CA,USA,37.48743556,-120.6968669\\nO16,Garberville,Garberville,CA,USA,40.08597806,-123.8136397\\nO17,Nevada County Air Park,Grass Valley,CA,USA,39.22402778,-121.0030833\\nO19,Kneeland,Eureka,CA,USA,40.7193,-123.9275531\\nO21,Hoopa,Hoopa,CA,USA,41.04290778,-123.6683894\\nO22,Columbia,Columbia,CA,USA,38.03042306,-120.4145556\\nO24,Lee Vining,Lee Vining,CA,USA,37.95825861,-119.1065375\\nO26,Lone Pine,Lone Pine,CA,USA,36.58826667,-118.0520314\\nO27,Oakdale,Oakdale,CA,USA,37.75634472,-120.8002089\\nO28,Ells Field-Willits Municipal,Willits,CA,USA,39.45129778,-123.3722844\\nO31,Healdsburg Municipal,Healdsburg,CA,USA,38.65352083,-122.8994397\\nO32,Reedley Municipal,Reedley,CA,USA,36.66633917,-119.4498483\\nO35,Hollis Municipal,Hollis,OK,USA,34.70839417,-99.90871194\\nO37,Haigh,Orland,CA,USA,39.72124194,-122.1466508\\nO41,Watts-Woodland,Woodland,CA,USA,38.67387639,-121.8720772\\nO42,Woodlake,Woodlake,CA,USA,36.39883833,-119.1073289\\nO43,Yerington Municipal,Yerington,NV,USA,39.00408444,-119.1579303\\nO45,Hooker Municipal,Hooker,OK,USA,36.85708306,-101.2270903\\nO46,Weed,Weed,CA,USA,41.47487,-122.4530739\\nO47,Prague Municipal,Prague,OK,USA,35.48201417,-96.71862944\\nO48,Little River,Little River,CA,USA,39.26203778,-123.7537347\\nO52,Sutter County,Yuba City,CA,USA,39.12655889,-121.6091328\\nO53,Medford Municipal,Medford,OK,USA,36.79058417,-97.74899722\\nO54,Lonnie Pool /Weaverville,Weaverville,CA,USA,40.7457,-122.92197\\nO57,Bryant,Bridgeport,CA,USA,38.26241917,-119.2257094\\nO59,Cedarville,Cedarville,CA,USA,41.55267139,-120.1663339\\nO60,Cloverdale Municipal,Cloverdale,CA,USA,38.7743525,-122.9922217\\nO61,Cameron Airpark,Cameron Park,CA,USA,38.68407028,-120.9871642\\nO65,Okeene Municipal,Okeene,OK,USA,36.11253667,-98.3086825\\nO68,Mariposa-Yosemite,Mariposa,CA,USA,37.51077,-120.0418439\\nO69,Petaluma Municipal,Petaluma,CA,USA,38.2578325,-122.6055406\\nO70,Westover Field Amador County,Jackson,CA,USA,38.37680111,-120.7939075\\nO81,Tulelake Municipal,Tulelake,CA,USA,41.88738,-121.3594331\\nO85,Benton,Redding,CA,USA,40.57487278,-122.4080642\\nO86,Trinity Center,Trinity Center,CA,USA,40.98320111,-122.6941889\\nO88,Rio Vista Municipal,Rio Vista,CA,USA,38.1935,-121.7023889\\nO89,Fall River Mills,Fall River Mills,CA,USA,41.01877417,-121.4333136\\nOAJ,Albert J Ellis,Jacksonville,NC,USA,34.82916444,-77.61213778\\nOAK,Metropolitan Oakland International,Oakland,CA,USA,37.72129083,-122.2207167\\nOAR,Marina Municipal,Marina,CA,USA,36.68190278,-121.7624492\\nOBE,Okeechobee County,Okeechobee,FL,USA,27.26282306,-80.84978306\\nOBU,Kobuk,Kobuk,AK,USA,66.90917056,-156.8610575\\nOCF,Ocala Regional/Jim Taylor,Ocala,FL,USA,29.17261111,-82.22416667\\nOCH,Nacogdoches-A.L. Mangham Jr. Regional,Nacogdoches,TX,USA,31.57802778,-94.70954167\\nOCQ,Oconto Municipal,Oconto,WI,USA,44.8735825,-87.9090525\\nOCW,Warren,Washington,NC,USA,35.57046806,-77.04981306\\nODO,Odessa-Schlemeyer,Odessa,TX,USA,31.92056722,-102.3870892\\nODX,Evelyn Sharp,Ord,NE,USA,41.62425,-98.95236111\\nOEB,Branch County Memorial,Coldwater,MI,USA,41.93344861,-85.052585\\nOEL,Oakley Municipal,Oakley,KS,USA,39.10994444,-100.8164444\\nOEO,L. O. Simenstad Municipal,Osceola,WI,USA,45.30858944,-92.69008056\\nOFK,Karl Stefan Memorial,Norfolk,NE,USA,41.98546389,-97.43511111\\nOFP,Hanover County Municipal,Richmond,VA,USA,37.7080325,-77.43601028\\nOGA,Searle,Ogallala,NE,USA,41.11961111,-101.7689444\\nOGB,Orangeburg Municipal,Orangeburg,SC,USA,33.46094444,-80.85891667\\nOGD,Ogden-Hinckley,Ogden,UT,USA,41.19594417,-112.012175\\nOGG,Kahului,Kahului,HI,USA,20.89864972,-156.4304578\\nOGM,Ontonagon County,Ontonagon,MI,USA,46.84547028,-89.36708806\\nOGS,Ogdensburg Intl,Ogdensburg,NY,USA,44.68185361,-75.46549917\\nOH17,Henry County,Napoleon,OH,USA,41.37427778,-84.06791667\\nOH21,Huron County,Norwalk,OH,USA,41.24476583,-82.55122722\\nOH30,Put In Bay,Put In Bay,OH,USA,41.63674333,-82.82833333\\nOIC,Lt Warren Eaton,Norwich,NY,USA,42.56655417,-75.52411167\\nOIN,Oberlin Municipal,Oberlin,KS,USA,39.83378278,-100.5394236\\nOJC,Johnson County Executive,Olathe,KS,USA,38.84760194,-94.73758583\\nOKB,Oceanside Municipal,Oceanside,CA,USA,33.21797639,-117.3515075\\nOKC,Will Rogers World,Oklahoma City,OK,USA,35.39308833,-97.60073389\\nOKK,Kokomo Municipal,Kokomo,IN,USA,40.5281775,-86.05899\\nOKM,Okmulgee Municipal,Okmulgee,OK,USA,35.66813889,-95.94869444\\nOKS,Garden County,Oshkosh,NE,USA,41.40097222,-102.3550278\\nOKV,Winchester Regional,Winchester,VA,USA,39.14352139,-78.14444444\\nOKZ,Kaolin,Sandersville,GA,USA,32.96672222,-82.83816667\\nOLD,Dewitt Field-Old Town Municipal,Old Town,ME,USA,44.9525,-68.67433333\\nOLE,Olean Muni,Olean,NY,USA,42.24006611,-78.371685\\nOLF,L M Clayton,Wolf Point,MT,USA,48.09451778,-105.5750536\\nOLM,Olympia,Olympia,WA,USA,46.9705,-122.9022083\\nOLS,Nogales International,Nogales,AZ,USA,31.41772222,-110.8478889\\nOLU,Columbus Municipal,Columbus,NE,USA,41.448,-97.34263889\\nOLV,Olive Branch,Olive Branch,MS,USA,34.97875,-89.78683333\\nOLY,Olney-Noble,Olney-Noble,IL,USA,38.72182722,-88.17643278\\nOLZ,Oelwein Municipal,Oelwein,IA,USA,42.68084472,-91.97447833\\nOMA,Eppley Airfield,Omaha,NE,USA,41.30251861,-95.89417306\\nOME,Nome,Nome,AK,USA,64.51220222,-165.4452458\\nOMH,Orange County,Orange,VA,USA,38.24721639,-78.04561028\\nOMK,Omak,Omak,WA,USA,48.46440222,-119.5180503\\nOMN,Ormond Beach Municipal,Ormond Beach,FL,USA,29.30113889,-81.11380556\\nONA,Winona Muni-Max Conrad,Winona,MN,USA,44.07721306,-91.70831694\\nONL,O Neill Municipal,O Neill,NE,USA,42.46988889,-98.68805556\\nONM,Socorro Municipal,Socorro,NM,USA,34.02247222,-106.9031389\\nONO,Ontario Muni,Ontario,OR,USA,44.02052417,-117.013635\\nONP,Newport Muni,Newport,OR,USA,44.58036111,-124.0579167\\nONT,Ontario International,Ontario,CA,USA,34.056,-117.6011944\\nONY,Olney Municipal,Olney,TX,USA,33.35088056,-98.81916667\\nONZ,Grosse Ile Municipal,Detroit - Grosse Ile,MI,USA,42.09860472,-83.16105861\\nOOA,Oskaloosa Municipal,Oskaloosa,IA,USA,41.22614944,-92.49388278\\nOOH,Hoonah SPB,Hoonah,AK,USA,58.11215944,-135.451805\\nOOK,Toksook Bay,Toksook Bay,AK,USA,60.53337639,-165.1139636\\nOPF,Opa-Locka,Miami,FL,USA,25.907,-80.27838889\\nOPL,St Landry Parish - Ahart,Opelousas,LA,USA,30.55840556,-92.099375\\nOPN,Thomaston-Upton County,Thomaston,GA,USA,32.95458861,-84.26315222\\nOQU,Quonset State,North Kingstown,RI,USA,41.5971525,-71.41215333\\nOQW,Maquoketa Municipal,Maquoketa,IA,USA,42.050075,-90.73880472\\nOR33,Boardman,Boardman,OR,USA,45.814825,-119.8205006\\nORB,Orr Regional,Orr,MN,USA,48.01592194,-92.85605139\\nORC,Orange City Municipal,Orange City,IA,USA,42.99026444,-96.06279667\\nORD,Chicago O'Hare International,Chicago,IL,USA,41.979595,-87.90446417\\nORE,Orange Municipal,Orange,MA,USA,42.57011889,-72.28860667\\nORF,Norfolk International,Norfolk,VA,USA,36.89461111,-76.20122222\\nORG,Orange County,Orange,TX,USA,30.06916667,-93.80091667\\nORH,Worcester Regional,Worcester,MA,USA,42.26733944,-71.87570944\\nORI,Port Lions,Port Lions,AK,USA,57.8853775,-152.8461011\\nORL,Executive,Orlando,FL,USA,28.54547222,-81.33294444\\nORS,Orcas Island,Eastsound,WA,USA,48.70816,-122.9137961\\nORT,Northway,Northway,AK,USA,62.96133361,-141.9291369\\nORV,Robert(Bob) Curtis Memorial,Noorvik,AK,USA,66.82852667,-161.0277908\\nOSC,Oscoda - Wurtsmith,Oscoda,MI,USA,44.45260972,-83.38036389\\nOSH,Wittman Regional,Oshkosh,WI,USA,43.98436639,-88.55705944\\nOSU,Ohio State University,Columbus,OH,USA,40.07977778,-83.07302778\\nOSX,Kosciusko-Attala County,Kosciusko,MS,USA,33.09025889,-89.54201722\\nOTG,Worthington Municipal,Worthington,MN,USA,43.65506611,-95.57920917\\nOTH,North Bend Muni,North Bend,OR,USA,43.41713889,-124.2460278\\nOTM,Ottumwa Industrial,Ottumwa,IA,USA,41.10659611,-92.44793972\\nOTZ,Ralph Wien Memorial,Kotzebue,AK,USA,66.88467694,-162.5985497\\nOUN,University of Oklahoma Westheimer,Norman,OK,USA,35.24556444,-97.47212861\\nOVE,Oroville Municipal,Oroville,CA,USA,39.48775,-121.622\\nOVO,North Vernon,North Vernon,IN,USA,39.04563667,-85.60533\\nOVS,Boscobel,Boscobel,WI,USA,43.16063056,-90.67421833\\nOWA,Owatonna Degner Regional,Owatonna,MN,USA,44.12339722,-93.26061667\\nOWB,Owensboro-Daviess County,Owensboro,KY,USA,37.74011111,-87.16683333\\nOWD,Norwood Memorial,Norwood,MA,USA,42.19079694,-71.17310389\\nOWI,Ottawa Municipal,Ottawa,KS,USA,38.53866667,-95.25297222\\nOWK,Central Maine,Norridgewock,ME,USA,44.7155,-69.86647222\\nOWX,Putnam County,Ottawa,OH,USA,41.0355825,-83.98202444\\nOXB,Ocean City,Ocean City,MD,USA,38.31044444,-75.12397222\\nOXC,Waterbury-Oxford,Oxford,CT,USA,41.47855556,-73.13525\\nOXD,Miami University,Oxford,OH,USA,39.50203917,-84.7841425\\nOXI,Starke County,Knox,IN,USA,41.3301875,-86.66473194\\nOXR,Oxnard,Oxnard,CA,USA,34.20080083,-119.2072164\\nOXV,Knoxville Municipal,Knoxville,IA,USA,41.29888556,-93.11381556\\nOYM,St Marys Muni,St Marys,PA,USA,41.41247778,-78.50263139\\nOZA,Ozona Municipal,Ozona,TX,USA,30.73528028,-101.2029719\\nOZW,Livingston County,Howell,MI,USA,42.62950694,-83.98417361\\nP01,Ajo Municipal,Ajo,AZ,USA,32.45005694,-112.8673778\\nP04,Bisbee Municipal,Bisbee,AZ,USA,31.36399028,-109.8831286\\nP08,Coolidge Municipal,Coolidge,AZ,USA,32.93594444,-111.4265278\\nP13,San Carlos Apache,Globe,AZ,USA,33.35314722,-110.6673611\\nP14,Holbrook Municipal,Holbrook,AZ,USA,34.93891389,-110.1395656\\nP20,Avi Suquilla,Parker,AZ,USA,34.15063889,-114.2712222\\nP32,H.A. Clark Memorial,Williams,AZ,USA,35.30223222,-112.1940575\\nP33,Cochise County,Willcox,AZ,USA,32.24540278,-109.8946319\\nP45,Mount Pleasant-Scottdale,Mount Pleasant,PA,USA,40.10840556,-79.54142694\\nP52,Cottonwood,Cottonwood,AZ,USA,34.73002111,-112.0351569\\nP53,Rostraver,Monongahela,PA,USA,40.20972222,-79.83144444\\nPAE,Snohomish County,Everett,WA,USA,47.90762861,-122.2815892\\nPAH,Barkley Regional,Paducah,KY,USA,37.06083333,-88.77375\\nPAK,Port Allen,Hanapepe,HI,USA,21.89686833,-159.6033217\\nPAN,Payson,Payson,AZ,USA,34.25683639,-111.3392558\\nPAO,Palo Alto Arpt of Santa Clara Co,Palo Alto,CA,USA,37.46111944,-122.1150444\\nPAQ,Palmer Municipal,Palmer,AK,USA,61.59474194,-149.0888242\\nPBF,Grider,Pine Bluff,AR,USA,34.17498722,-91.93472028\\nPBH,Price County,Phillips,WI,USA,45.70895028,-90.40248472\\nPBI,Palm Beach International,West Palm Beach,FL,USA,26.68316194,-80.09559417\\nPBV,St. George,St. George,AK,USA,56.57735278,-169.6637361\\nPCK,Porcupine Creek,Porcupine Creek,AK,USA,67.23789833,-150.2860608\\nPCM,Plant City Municipal,Plant City,FL,USA,28.00021667,-82.16424167\\nPCW,Carl R. Keller,Port Clinton,OH,USA,41.51627778,-82.86869444\\nPCZ,Waupaca Municipal,Waupaca,WI,USA,44.33368778,-89.01549861\\nPDC,Prairie Du Chien Municipal,Prairie Du Chien,WI,USA,43.01928889,-91.12374722\\nPDK,Dekalb-Peachtree,Atlanta,GA,USA,33.87560444,-84.30196778\\nPDT,Eastern Oregon Regional At Pendleton,Pendleton,OR,USA,45.69505556,-118.8414444\\nPDX,Portland Intl,Portland,OR,USA,45.58872222,-122.5975\\nPEA,Pella Municipal,Pella,IA,USA,41.40006667,-92.94588333\\nPEC,Pelican SPB,Pelican,AK,USA,57.95517222,-136.2362733\\nPEO,Penn Yan,Penn Yan,NY,USA,42.63813556,-77.05306083\\nPEQ,Pecos Municipal,Pecos City,TX,USA,31.3823575,-103.5107017\\nPEZ,Pleasanton Municipal,Pleasanton,TX,USA,28.95419444,-98.51998917\\nPFN,Panama City-Bay County International,Panama City,FL,USA,30.21208333,-85.68280556\\nPGA,Page Municipal,Page,AZ,USA,36.92611111,-111.4483611\\nPGD,Charlotte County,Punta Gorda,FL,USA,26.92019444,-81.99052778\\nPGM,Port Graham,Port Graham,AK,USA,59.34825944,-151.8315389\\nPGR,Kirk,Paragould,AR,USA,36.06352944,-90.50986028\\nPGV,Pitt-Greenville,Greenville,NC,USA,35.63523944,-77.38532028\\nPHD,Harry Clever,New Philadelphia,OH,USA,40.47091667,-81.41975\\nPHF,Newport News/Williamsburg International,Newport News,VA,USA,37.13189556,-76.4929875\\nPHG,Phillipsburg Municipal,Phillipsburg,KS,USA,39.73530556,-99.31741667\\nPHH,Andrews Municipal,Andrews,SC,USA,33.45169472,-79.52620111\\nPHK,Palm Beach County Glades,Pahokee,FL,USA,26.78503861,-80.69335528\\nPHL,Philadelphia Intl,Philadelphia,PA,USA,39.87195278,-75.24114083\\nPHN,St Clair County International,Port Huron,MI,USA,42.91095778,-82.52886139\\nPHO,Point Hope,Point Hope,AK,USA,68.34877417,-166.7993086\\nPHP,Philip,Philip,SD,USA,44.04862722,-101.5990603\\nPHT,Henry County,Paris,TN,USA,36.33822472,-88.38287861\\nPHX,Phoenix Sky Harbor International,Phoenix,AZ,USA,33.43416667,-112.0080556\\nPIA,Greater Peoria Regional,Peoria,IL,USA,40.66424333,-89.69330556\\nPIB,Hattiesburg-Laurel Regional,Hattiesburg-Laurel,MS,USA,31.46714944,-89.33705778\\nPIE,St. Petersburg-Clearwater International,St. Petersburg,FL,USA,27.91076333,-82.68743944\\nPIH,Pocatello Regional,Pocatello,ID,USA,42.91130556,-112.5958611\\nPIL,Port Isabel-Cameron County,Port Isabel,TX,USA,26.16621,-97.34588611\\nPIM,Callaway Gardens-Harris County,Pine Mountain,GA,USA,32.84069444,-84.88244444\\nPIR,Pierre Regional,Pierre,SD,USA,44.38267694,-100.285965\\nPIT,Pittsburgh International,Pittsburgh,PA,USA,40.49146583,-80.23287083\\nPIZ,Point Lay Dew Station,Point Lay,AK,USA,69.732875,-163.0053417\\nPJY,Pinckneyville-Duquoin,Pinckneyville-Duquoin,IL,USA,37.97788417,-89.36044889\\nPKA,Napaskiak,Napaskiak,AK,USA,60.70369056,-161.7767367\\nPKB,Wood Cty/Gill Robb Wilson,Parkersburg,WV,USA,39.34510333,-81.43920194\\nPKD,Park Rapids Municipal,Park Rapids,MN,USA,46.90062583,-95.07313278\\nPKF,Park Falls Municipal,Park Falls,WI,USA,45.95502361,-90.42441806\\nPLB,Clinton Cty,Plattsburgh,NY,USA,44.68751861,-73.52452306\\nPLD,Portland Municipal,Portland,IN,USA,40.45076167,-84.99007917\\nPLN,Pellston Regional of Emmet County,Pellston,MI,USA,45.5709275,-84.796715\\nPLR,St Clair County,Pell City,AL,USA,33.55883333,-86.24905556\\nPMB,Pembina Municipal,Pembina,ND,USA,48.9425,-97.24083333\\nPMD,Palmdale Production Flight,Palmdale,CA,USA,34.62938889,-118.0845528\\nPMH,Greater Portsmouth Regional,Portsmouth,OH,USA,38.84047,-82.84731361\\nPMP,Pompano Beach Airpark,Pompano Beach,FL,USA,26.24713889,-80.11105556\\nPMV,Plattsmouth Municipal,Plattsmouth,NE,USA,40.95025,-95.91788889\\nPMX,Metropolitan,Palmer,MA,USA,42.22328722,-72.31138694\\nPMZ,Plymouth Municipal,Plymouth,NC,USA,35.80843944,-76.75927694\\nPNA,Ralph Wenz,Pinedale,WY,USA,42.79549917,-109.8070944\\nPNC,Ponca City Municipal,Ponca City,OK,USA,36.73058417,-97.09976833\\nPNE,Northeast Philadelphia,Philadelphia,PA,USA,40.08194417,-75.01058667\\nPNM,Princeton Municipal,Princeton,MN,USA,45.55986778,-93.60821611\\nPNN,Princeton Municipal,Princeton,ME,USA,45.20066667,-67.56438889\\nPNP,Pilot Point,Pilot Point,AK,USA,57.58038056,-157.5674444\\nPNS,Pensacola Regional,Pensacola,FL,USA,30.47330556,-87.18744444\\nPOC,Brackett,La Verne,CA,USA,34.09164833,-117.7817803\\nPOF,Poplar Bluff Municipal,Poplar Bluff,MO,USA,36.77394444,-90.32484722\\nPOH,Pocahontas Municipal,Pocahontas,IA,USA,42.74280556,-94.64730556\\nPOU,Dutchess Cty,Poughkeepsie,NY,USA,41.62661111,-73.88411111\\nPOY,Powell Muni,Powell,WY,USA,44.86797222,-108.793\\nPPA,Perry Lefors,Pampa,TX,USA,35.61298806,-100.9962608\\nPPC,Prospect Creek,Prospect Creek,AK,USA,66.81288139,-150.6437925\\nPPF,Tri City,Parsons,KS,USA,37.33125778,-95.50900667\\nPPG,Pago Pago International,Pago Pago,AS,USA,14.33102278,-170.7105258\\nPPO,La Porte Municipal,La Porte,IN,USA,41.57276194,-86.73413139\\nPPQ,Pittsfield Penstone Municipal,Pittsfield,IL,USA,39.63885556,-90.77843111\\nPQI,Northern Maine Regional,Presque Isle,ME,USA,46.68896,-68.04479972\\nPQL,Trent Lott International,Pascagoula,MS,USA,30.46278111,-88.52922778\\nPQN,Pipestone Municipal,Pipestone,MN,USA,43.98330333,-96.30031083\\nPR03,Fajardo Harbor Seaplane Base,Fajardo,PR,USA,18.339675,-65.62460583\\nPRB,Paso Robles Municipal,Paso Robles,CA,USA,35.67288611,-120.6270558\\nPRC,Ernest A. Love,Prescott,AZ,USA,34.65447222,-112.4195833\\nPRG,Edgar County,Paris,IL,USA,39.70015944,-87.66961861\\nPRN,Greenville Municipal,Greenville,AL,USA,31.84540222,-86.61044583\\nPRO,Perry Municipal,Perry,IA,USA,41.82801306,-94.15990361\\nPRX,Cox,Paris,TX,USA,33.63660667,-95.45073194\\nPSB,Mid-State,Philipsburg,PA,USA,40.88439139,-78.08734167\\nPSC,Tri-Cities,Pasco,WA,USA,46.26468028,-119.1190292\\nPSE,Mercedita,Ponce,PR,USA,18.00830278,-66.56301194\\nPSF,Pittsfield Municipal,Pittsfield,MA,USA,42.42684667,-73.29292806\\nPSG,James C. Johnson Petersburg,Petersburg,AK,USA,56.80165194,-132.9452781\\nPSK,New River Valley,Dublin,VA,USA,37.13734528,-80.67848167\\nPSM,Pease International Tradeport,Portsmouth,NH,USA,43.07795889,-70.82327333\\nPSN,Palestine Municipal,Palestine,TX,USA,31.77969444,-95.70630556\\nPSP,Palm Springs International,Palm Springs,CA,USA,33.82921556,-116.5062531\\nPSX,Palacios Municipal,Palacios,TX,USA,28.72751778,-96.2509675\\nPTB,Dinwiddie County,Petersburg,VA,USA,37.18375833,-77.50738889\\nPTD,Potsdam Muni-Damon,Potsdam,NY,USA,44.67666917,-74.94844639\\nPTH,Port Heiden,Port Heiden,AK,USA,56.95943333,-158.6318208\\nPTK,Oakland-Pontiac,Pontiac,MI,USA,42.66520389,-83.41870917\\nPTN,Harry P. Williams Memorial,Patterson,LA,USA,29.71081917,-91.33971778\\nPTS,Atkinson Municipal,Pittsburg,KS,USA,37.44855556,-94.73133333\\nPTT,Pratt Industrial,Pratt,KS,USA,37.7000175,-98.7462025\\nPTU,Platinum,Platinum,AK,USA,59.01135611,-161.8196661\\nPTV,Porterville Municipal,Porterville,CA,USA,36.02960778,-119.0627311\\nPTW,Pottstown Limerick,Pottstown,PA,USA,40.23957167,-75.55662528\\nPUB,Pueblo Memorial,Pueblo,CO,USA,38.28908722,-104.4965722\\nPUC,Carbon County,Price,UT,USA,39.61391556,-110.7514183\\nPUW,Pullman/Moscow Regional,\\\"Pullman/Moscow,ID\\\",WA,USA,46.74386111,-117.1095833\\nPVB,Platteville Municipal,Platteville,WI,USA,42.68935583,-90.44439278\\nPVC,Provincetown Municipal,Provincetown,MA,USA,42.07199833,-70.22137667\\nPVD,Theodore F Green State,Providence,RI,USA,41.72399917,-71.42822111\\nPVF,Placerville,Placerville,CA,USA,38.72421806,-120.753325\\nPVG,Hampton Roads Executive,Portsmouth,VA,USA,36.78014889,-76.44883472\\nPVJ,Pauls Valley Municipal,Pauls Valley,OK,USA,34.71105361,-97.22321694\\nPVU,Provo Muni,Provo,UT,USA,40.21919444,-111.7233611\\nPVW,Hale County,Plainview,TX,USA,34.16814722,-101.7173361\\nPWA,Wiley Post,Oklahoma City,OK,USA,35.53455,-97.64721556\\nPWC,Pine River Regional,Pine River,MN,USA,46.7247875,-94.3817\\nPWD,Sher-Wood,Plentywood,MT,USA,48.79030583,-104.533845\\nPWG,McGregor Exectuive,Waco,TX,USA,31.48491667,-97.31652778\\nPWK,Palwaukee,Chicago/Wheeling/Prospect Heights,IL,USA,42.11418083,-87.90148083\\nPWM,Portland International Jetport,Portland,ME,USA,43.64616667,-70.30875\\nPWT,Bremerton National,Bremerton,WA,USA,47.49275361,-122.7624286\\nPXE,Perry-Houston Couty,Perry,GA,USA,32.51058333,-83.76733333\\nPYG,Pageland,Pageland,SC,USA,34.74213889,-80.34519444\\nPYM,Plymouth Municipal,Plymouth,MA,USA,41.90902444,-70.72878778\\nPYX,Perryton Ochiltree County,Perryton,TX,USA,36.41200333,-100.7517883\\nPZQ,Presque Isle County,Rogers City,MI,USA,45.40709667,-83.81288556\\nQ00,Littlefield Municipal,Littlefield,TX,USA,33.92395306,-102.3866831\\nQ06,City of Tulia/Swisher County Municipal,Tulia,TX,USA,34.56682472,-101.7814611\\nQ14,San Juan Pueblo,Espanola,NM,USA,36.02502306,-106.0464114\\nQ16,Reserve,Reserve,NM,USA,33.70005472,-108.8506214\\nQ17,Boonville,Boonville,CA,USA,39.0126775,-123.3827864\\nQ21,Brownsville,Brownsville,CA,USA,39.45544417,-121.2913511\\nQ24,Levelland Municipal,Levelland,TX,USA,33.54980833,-102.3727333\\nQ25,Dinsmore,Dinsmore,CA,USA,40.49291944,-123.5997589\\nQ26,Terry County,Brownfield,TX,USA,33.173675,-102.1926208\\nQ31,Sequoia,Visalia,CA,USA,36.44856139,-119.3190056\\nQ34,Portales Municipal,Portales,NM,USA,34.14547222,-103.4103333\\nQ35,Springerville Babbitt,Springerville,AZ,USA,34.1286575,-109.3114756\\nQ37,Carrizozo Municipal,Carrizozo,NM,USA,33.64886139,-105.895685\\nQ41,Floydada Municipal,Floydada,TX,USA,34.00230056,-101.330435\\nQ42,Springer Municipal,Springer,NM,USA,36.32697806,-104.6197117\\nQ44,Beaver Municipal,Beaver,OK,USA,36.79891472,-100.5298708\\nQ49,Firebaugh,Firebaugh,CA,USA,36.85998861,-120.4644675\\nQ53,Franklin,Franklin,CA,USA,38.30491306,-121.4296736\\nQ55,Dimmitt Municipal,Dimmitt,TX,USA,34.56673556,-102.3226947\\nQ58,Santa Rosa Municipal,Santa Rosa,NM,USA,34.93442472,-104.643065\\nQ61,Georgetown,Georgetown,CA,USA,38.92111389,-120.8647944\\nQ68,Pine Mountain Lake,Groveland,CA,USA,37.86166667,-120.1778889\\nQ72,Hayfork,Hayfork,CA,USA,40.54708833,-123.1816953\\nQ84,Mendota,Mendota,CA,USA,36.75800528,-120.3712794\\nQ88,Paradise Skypark,Paradise,CA,USA,39.70960639,-121.6163617\\nQ94,Rio Linda,Rio Linda,CA,USA,38.67601389,-121.4455092\\nQ95,Ruth,Ruth,CA,USA,40.21125917,-123.2975231\\nQ99,South County of Santa Clara Co,San Martin,CA,USA,37.08158611,-121.5968056\\nRAC,John H Batten,Racine,WI,USA,42.76119139,-87.81389806\\nRAL,Riverside Municipal,Riverside,CA,USA,33.95187528,-117.4451017\\nRAP,Rapid City Regional,Rapid City,SD,USA,44.04532139,-103.0573708\\nRBD,Redbird,Dallas,TX,USA,32.68086111,-96.86819444\\nRBE,Bassett Municipal,Bassett,NE,USA,42.56966667,-99.56836111\\nRBG,Roseburg Regional,Roseburg,OR,USA,43.23878306,-123.3558617\\nRBL,Red Bluff Municipal,Red Bluff,CA,USA,40.15065667,-122.2522903\\nRBW,Walterboro Municipal,Walterboro,SC,USA,32.92052778,-80.64125\\nRBY,Ruby,Ruby,AK,USA,64.72721556,-155.4698886\\nRCA,Ellsworth AFB,NA,NA,USA,44.145094,-103.103567\\nRCR,Fulton County,Rochester,IN,USA,41.06554833,-86.18170444\\nRCX,Rusk County,Ladysmith,WI,USA,45.49825694,-91.00186361\\nRDD,Redding Municipal,Redding,CA,USA,40.50898361,-122.2934019\\nRDG,\\\"Reading Muni,Gen Carl A Spaatz\\\",Reading,PA,USA,40.3785,-75.96525\\nRDK,Red Oak Municipal,Red Oak,IA,USA,41.01052778,-95.25986111\\nRDM,Roberts,Redmond,OR,USA,44.25406722,-121.1499633\\nRDR,Grand Forks AFB,NA,NA,USA,47.961167,-97.401167\\nRDU,Raleigh-Durham International,Raleigh,NC,USA,35.87763889,-78.78747222\\nRDV,Red Devil,Red Devil,AK,USA,61.78764333,-157.3479344\\nRED,Red Lodge,Red Lodge,MT,USA,45.18744472,-109.2673778\\nRFD,Greater Rockford,Rockford,IL,USA,42.19536389,-89.09721111\\nRFG,Refugio-Rooke,Refugio,TX,USA,28.29361694,-97.32304833\\nRGK,Red Wing Municipal,Red Wing,MN,USA,44.58935611,-92.48496889\\nRHI,Rhinelander-Oneida County,Rhinelander,WI,USA,45.63119306,-89.46745361\\nRHV,Reid-Hillview of Santa Clara Co,San Jose,CA,USA,37.33287306,-121.8197947\\nRIC,Richmond International,Richmond,VA,USA,37.50516667,-77.31966667\\nRID,Richmond Municipal,Richmond,IN,USA,39.75721528,-84.84282\\nRIF,Richfield Muni,Richfield,UT,USA,38.73643611,-112.0989444\\nRIL,Garfield County Regional,Rifle,CO,USA,39.526315,-107.7269403\\nRIU,Rancho Murieta,Rancho Murieta,CA,USA,38.4887975,-121.1024447\\nRIV,March,Riverside,CA,USA,33.88057333,-117.2594836\\nRIW,Riverton Regional,Riverton,WY,USA,43.064235,-108.4598411\\nRKD,Knox County Regional,Rockland,ME,USA,44.06008333,-69.09925\\nRKP,Aransas County,Rockport,TX,USA,28.08677778,-97.04461111\\nRKR,Robert S Kerr,Poteau,OK,USA,35.02162639,-94.6212525\\nRKS,Rock Springs-Sweetwater County,Rock Springs,WY,USA,41.5942175,-109.0651928\\nRKW,Rockwood Municipal,Rockwood,TN,USA,35.922295,-84.68966278\\nRLD,Richland,Richland,WA,USA,46.305635,-119.3041853\\nRME,Griffis Airpark,Rome,NY,USA,43.23379861,-75.40703333\\nRMG,Richard B Russell,Rome,GA,USA,34.35060111,-85.15801389\\nRMP,Rampart,Rampart,AK,USA,65.50786222,-150.1428047\\nRMY,Brooks,Marshall,MI,USA,42.25118111,-84.9554525\\nRNC,Warren County Memorial,McMinnville,TN,USA,35.69870944,-85.84381722\\nRNH,New Richmond Municipal,New Richmond,WI,USA,45.14831139,-92.53806139\\nRNM,Ramona,Ramona,CA,USA,33.038905,-116.9136392\\nRNO,Reno/Tahoe International,Reno,NV,USA,39.49857611,-119.7680647\\nRNT,Renton Municipal,Renton,WA,USA,47.49313889,-122.21575\\nRNV,Cleveland Municipal,Cleveland,MS,USA,33.76114056,-90.75787528\\nROA,Roanoke Regional/ Woodrum,Roanoke,VA,USA,37.32546833,-79.97542833\\nROC,Greater Rochester Int'l,Rochester,NY,USA,43.11886611,-77.67238389\\nROG,Rogers Municipal-Carter,Rogers,AR,USA,36.37229667,-94.10686972\\nROP,Prachinburi,NA,NA,Thailand,14.078333,101.378334\\nROR,Babelthoup/Koror,NA,NA,Palau,7.367222,134.544167\\nROS,Rush City Regional,Rush City,MN,USA,45.69801389,-92.95298972\\nROW,Roswell Industrial Air Center,Roswell,NM,USA,33.30155556,-104.5305556\\nROX,Roseau Municipal,Roseau,MN,USA,48.85603806,-95.69703861\\nRPB,Belleville Municipal,Belleville,KS,USA,39.81790861,-97.659625\\nRPD,Rice Lake Regional-Carl's,Rice Lake,WI,USA,45.41809056,-91.77365194\\nRPX,Roundup,Roundup,MT,USA,46.47357528,-108.5576333\\nRQB,Roben-Hood,Big Rapids,MI,USA,43.72263278,-85.50407333\\nRQE,Window Rock,Window Rock,AZ,USA,35.65205556,-109.0673889\\nRRL,Merrill Municipal,Merrill,WI,USA,45.19927083,-89.71143389\\nRRT,Warroad Intl Swede Carlson,Warroad,MN,USA,48.94138889,-95.34838889\\nRSH,Russian Mission,Russian Mission,AK,USA,61.77967583,-161.3194772\\nRSL,Russell Municipal,Russell,KS,USA,38.87212222,-98.81177611\\nRSN,Ruston Regional,Ruston,LA,USA,32.51444444,-92.58833333\\nRST,Rochester International,Rochester,MN,USA,43.90882639,-92.49798722\\nRSV,Robinson Municipal,Robinson,IL,USA,39.01604222,-87.649775\\nRSW,Southwest Florida International,Ft. Myers,FL,USA,26.53616667,-81.75516667\\nRTN,Raton Municipal/Crews,Raton,NM,USA,36.74152778,-104.5021833\\nRUE,Russellville Municipal,Russellville,AR,USA,35.25914667,-93.09326611\\nRUG,Rugby Municipal,Rugby,ND,USA,48.39035917,-100.0242739\\nRUQ,Rowan County,Salisbury,NC,USA,35.64588583,-80.52029306\\nRUT,Rutland State,Rutland,VT,USA,43.52990694,-72.949615\\nRVJ,Reidsville,Reidsville,GA,USA,32.05897222,-82.15172222\\nRVL,Mifflin Cty,Reedsville,PA,USA,40.67737417,-77.62682833\\nRVN,Hawkins County,Rogersville,TN,USA,36.45757917,-82.88503722\\nRVS,\\\"Richard Lloyd Jones, Jr.\\\",Tulsa,OK,USA,36.0396275,-95.984635\\nRWF,Redwood Falls Muni,Redwood Falls,MN,USA,44.54720389,-95.082255\\nRWI,Rocky Mount Wilson,Rocky Mount,NC,USA,35.85498861,-77.89295611\\nRWL,Rawlins Muni,Rawlins,WY,USA,41.8055975,-107.19994\\nRWN,Arens,Winamac,IN,USA,41.09226306,-86.61287111\\nRXE,Rexburg-Madison County,Rexburg,ID,USA,43.83391139,-111.805105\\nRYN,Ryan,Tucson,AZ,USA,32.14308333,-111.1728611\\nRYV,Watertown Municipal,Watertown,WI,USA,43.16963222,-88.72321222\\nRYY,Cobb County-McCollum,Marietta,GA,USA,34.01315611,-84.59854472\\nRZL,Jasper County,Rensselaer,IN,USA,40.94789861,-87.18257944\\nRZN,Burnett County,Siren,WI,USA,45.8227275,-92.37250083\\nRZT,Ross County,Chillicothe,OH,USA,39.44136778,-83.02251556\\nRZZ,Halifax County,Roanoke Rapids,NC,USA,36.43945583,-77.70934139\\nS01,Conrad,Conrad,MT,USA,48.16863889,-111.9764722\\nS03,Ashland Muni-Sumner Parker,Ashland,OR,USA,42.19028361,-122.6606283\\nS05,Bandon State,Bandon,OR,USA,43.08733083,-124.4095578\\nS07,Bend Muni,Bend,OR,USA,44.09483333,-121.2006389\\nS10,Chelan Muni,Chelan,WA,USA,47.86597139,-119.9427053\\nS12,Albany Municipal,Albany,OR,USA,44.63781639,-123.0594486\\nS18,Forks,Forks,WA,USA,47.94146583,-124.3929867\\nS21,Sunriver,Sunriver,OR,USA,43.87633333,-121.4530556\\nS23,Ione Municipal,Ione,WA,USA,48.70727528,-117.4126036\\nS24,Sandusky Co,Fremont,OH,USA,41.29570556,-83.03723056\\nS25,Watford City Municipal,Watford City,ND,USA,47.79569972,-103.2536992\\nS27,Kalispell City,Kalispell,MT,USA,48.17856944,-114.3037408\\nS28,International Peace Garden,Dunseith,ND,USA,48.99778194,-100.0434589\\nS30,Lebanon State,Lebanon,OR,USA,44.529845,-122.9295336\\nS31,Lopez Island,Lopez,WA,USA,48.48259944,-122.9368444\\nS32,Cooperstown Municipal,Cooperstown,ND,USA,47.42277361,-98.10587139\\nS33,City-County,Madras,OR,USA,44.66623139,-121.1631\\nS34,Plains,Plains,MT,USA,47.47243611,-114.900135\\nS39,Prineville,Prineville,OR,USA,44.28699389,-120.9038328\\nS40,Prosser,Prosser,WA,USA,46.212355,-119.7928122\\nS43,Harvey,Snohomish,WA,USA,47.90815306,-122.1054072\\nS45,Siletz Bay State,Siletz Bay (Gleneden Beach),OR,USA,44.87761139,-124.0284472\\nS47,Tillamook,Tillamook,OR,USA,45.41824194,-123.8143839\\nS50,Auburn Municipal,Auburn,WA,USA,47.32815583,-122.2265092\\nS52,Methow Valley State,Winthrop,WA,USA,48.42070056,-120.1470264\\nS59,Libby,Libby,MT,USA,48.28384528,-115.4902453\\nS60,Kenmore Air Harbor Inc,Kenmore,WA,USA,47.75482,-122.2592931\\nS64,Stanford,Stanford,MT,USA,47.14718944,-110.2299289\\nS66,Homedale Municipal,Homedale,ID,USA,43.61488056,-116.9215372\\nS67,Nampa Muni,Nampa,ID,USA,43.58133333,-116.5230556\\nS68,Orofino Municipal,Orofino,ID,USA,46.49129139,-116.2768061\\nS69,Lincoln,Lincoln,MT,USA,46.97494083,-112.6447606\\nS70,Othello Muni,Othello,WA,USA,46.79486278,-119.0802875\\nS71,Edgar G Obie,Chinook,MT,USA,48.59194444,-109.2488889\\nS72,St Maries Municipal,St Maries,ID,USA,47.32768722,-116.5773906\\nS73,Kamiah Municipal,Kamiah,ID,USA,46.21934028,-116.0134736\\nS80,Idaho County,Grangeville,ID,USA,45.94255806,-116.1234158\\nS83,Shoshone County,Kellogg,ID,USA,47.54769889,-116.1885008\\nS85,Big Sky,Culbertson,MT,USA,48.15333333,-104.5038889\\nS87,Weiser Municipal,Weiser,ID,USA,44.20683056,-116.9623869\\nS89,Craigmont Municipal,Craigmont,ID,USA,46.24710917,-116.4801447\\nS93,Cle Elum Municipal,Cle Elum,WA,USA,47.18317583,-120.884525\\nS94,Whitman County Memorial,Colfax,WA,USA,46.8584975,-117.4137964\\nS97,Anderson,Brewster,WA,USA,48.10486806,-119.7206128\\nSAA,Shively,Saratoga,WY,USA,41.44485944,-106.8235264\\nSAC,Sacramento Executive,Sacramento,CA,USA,38.51252389,-121.4934689\\nSAD,Safford Regional,Safford,AZ,USA,32.85331278,-109.6349708\\nSAF,Santa Fe Municipal,Santa Fe,NM,USA,35.61677778,-106.0881389\\nSAN,San Diego International-Lindbergh,San Diego,CA,USA,32.73355611,-117.1896567\\nSAR,Sparta Community-Hunter,Sparta,IL,USA,38.14893833,-89.69870972\\nSAT,San Antonio International,San Antonio,TX,USA,29.53369444,-98.46977778\\nSAV,Savannah International,Savannah,GA,USA,32.12758333,-81.20213889\\nSAW,Sawyer,Gwinn,MI,USA,46.35361111,-87.39583222\\nSAZ,Staples Municipal,Staples,MN,USA,46.38087944,-94.80660167\\nSBA,Santa Barbara Municipal,Santa Barbara,CA,USA,34.42621194,-119.8403733\\nSBD,San Bernardino International,San Bernardino,CA,USA,34.09535361,-117.2348742\\nSBM,Sheboygan County Memorial,Sheboygan,WI,USA,43.76949444,-87.85158944\\nSBN,South Bend Regional,South Bend,IN,USA,41.70895361,-86.31847417\\nSBO,Emanuel County,Swainsboro,GA,USA,32.60825,-82.36869444\\nSBP,San Luis Obispo Co-McChesney,San Luis Obispo,CA,USA,35.23705806,-120.6423931\\nSBS,Steamboat Springs,Steamboat Springs,CO,USA,40.51625944,-106.8663006\\nSBU,Blue Earth Municipal,Blue Earth,MN,USA,43.59534389,-94.09284833\\nSBX,Shelby,Shelby,MT,USA,48.54125278,-111.8720722\\nSBY,Salisbury-Ocean City: Wicomico Regional,Salisbury,MD,USA,38.34052611,-75.51028806\\nSCB,Scribner State,Scribner,NE,USA,41.61033333,-96.62986111\\nSCC,Deadhorse,Deadhorse,AK,USA,70.19475583,-148.4651608\\nSCD,Merkel Field Sylacauga Municipal,Sylacauga,AL,USA,33.17183583,-86.30553778\\nSCE,University Park,NA,NA,USA,40.851206,-77.846302\\nSCH,Schenectady Cty,Schenectady,NY,USA,42.85245556,-73.9288675\\nSCK,Stockton Metro,Stockton,CA,USA,37.89426694,-121.2386203\\nSCM,Scammon Bay,Scammon Bay,AK,USA,61.84454111,-165.5737492\\nSCX,Scott Municipal,Oneida,TN,USA,36.45569444,-84.58575\\nSD07,Bison Municipal,Bison,SD,USA,45.51859778,-102.4671042\\nSD10,Canton Municipal,Canton,SD,USA,43.30888889,-96.571\\nSD12,Wilder,De Smet,SD,USA,44.43080278,-97.56118861\\nSD16,Eureka Municipal,Eureka,SD,USA,45.79998111,-99.6420625\\nSD18,Flandreau Municipal,Flandreau,SD,USA,44.00386056,-96.59310139\\nSD22,Hoven Municipal,Hoven,SD,USA,45.25755861,-99.79783944\\nSD28,McLaughlin Municipal,McLaughlin,SD,USA,45.79680833,-100.7842503\\nSD32,Murdo Municipal,Murdo,SD,USA,43.85165639,-100.7120811\\nSD33,Parkston Municipal,Parkston,SD,USA,43.37915361,-97.97118278\\nSD34,Presho Municipal,Presho,SD,USA,43.90637833,-100.0370669\\nSDA,Shenandoah Municipal,Shenandoah,IA,USA,40.75148167,-95.41347222\\nSDF,Louisville International-Standiford,Louisville,KY,USA,38.17438889,-85.736\\nSDL,Scottsdale,Scottsdale,AZ,USA,33.622875,-111.9105333\\nSDM,Brown Municipal,San Diego,CA,USA,32.57230556,-116.98025\\nSDP,Sand Point Municipal,Sand Point,AK,USA,55.31502778,-160.5176944\\nSDY,Sidney-Richland Municipal,Sidney,MT,USA,47.70685778,-104.1925544\\nSEA,Seattle-Tacoma Intl,Seattle,WA,USA,47.44898194,-122.3093131\\nSEE,Gillespie,San Diego (El Cajon),CA,USA,32.82623111,-116.9724497\\nSEF,Sebring And Industrial Park,Sebring,FL,USA,27.45640278,-81.3424\\nSEG,Penn Valley,Selinsgrove,PA,USA,40.82052917,-76.86377611\\nSEM,Craig,Selma,AL,USA,32.34394667,-86.98780333\\nSEP,Clark Field Municipal,Stephenville,TX,USA,32.21532333,-98.17766722\\nSER,Freeman Municipal,Seymour,IN,USA,38.92355361,-85.90736556\\nSET,St Charles County Smart,St Charles,MO,USA,38.92969444,-90.42996111\\nSEZ,Sedona,Sedona,AZ,USA,34.84862889,-111.7884614\\nSFB,Orlando Sanford,Orlando,FL,USA,28.77764,-81.23748944\\nSFD,Bob Wiley,Winner,SD,USA,43.39058278,-99.84256194\\nSFF,Felts,Spokane,WA,USA,47.68281806,-117.3225583\\nSFM,Sanford Regional,Sanford,ME,USA,43.39386111,-70.70800028\\nSFO,San Francisco International,San Francisco,CA,USA,37.61900194,-122.3748433\\nSFQ,Suffolk Municipal,Suffolk,VA,USA,36.68235361,-76.60187333\\nSFY,Tri-Township,Savanna,IL,USA,42.04581972,-90.10760056\\nSFZ,North Central State,Pawtucket,RI,USA,41.92076333,-71.49138139\\nSGF,Springfield-Branson Regional,Springfield,MO,USA,37.24432611,-93.38685806\\nSGH,Springfield-Beckley Municipal,Springfield,OH,USA,39.84028194,-83.84015056\\nSGJ,St. Augustine,St. Augustine,FL,USA,29.95925,-81.33975\\nSGR,Sugar Land Municipal/Hull,Houston,TX,USA,29.62225306,-95.65652889\\nSGS,South St.Paul Municipal,South St Paul,MN,USA,44.85713278,-93.03285389\\nSGT,Stuttgart Municipal,Stuttgart,AR,USA,34.60054,-91.57457417\\nSGU,St George Muni,St George,UT,USA,37.09058333,-113.5930556\\nSGY,Skagway,Skagway,AK,USA,59.46006194,-135.3156636\\nSHD,Shenandoah Valley Regional,Staunton/Harrisonburg,VA,USA,38.26384333,-78.89643806\\nSHG,Shungnak,Shungnak,AK,USA,66.88916556,-157.1505119\\nSHH,Shishmaref,Shishmaref,AK,USA,66.24956861,-166.0895589\\nSHL,Sheldon Municipal,Sheldon,IA,USA,43.20839361,-95.83343306\\nSHN,Sanderson,Shelton,WA,USA,47.23355556,-123.1475556\\nSHR,Sheridan County,Sheridan,WY,USA,44.76919556,-106.9802794\\nSHV,Shreveport Regional,Shreveport,LA,USA,32.4466275,-93.82559833\\nSHX,Shageluk,Shageluk,AK,USA,62.69511944,-159.5690614\\nSIG,Fernando Luis Ribas Dominicci,San Juan,PR,USA,18.45675,-66.09883333\\nSIK,Sikeston Memorial Municipal,Sikeston,MO,USA,36.89888889,-89.56175\\nSIT,Sitka,Sitka,AK,USA,57.04713806,-135.3615983\\nSIV,Sullivan County,Sullivan,IN,USA,39.1147125,-87.44832917\\nSIY,Siskiyou County,Montague,CA,USA,41.78144167,-122.4681094\\nSJC,San Jose International,San Jose,CA,USA,37.36186194,-121.9290089\\nSJN,St Johns Industrial Air Park,St Johns,AZ,USA,34.51855556,-109.37875\\nSJT,San Angelo Regional /Mathis,San Angelo,TX,USA,31.35775,-100.4963056\\nSJU,Luis Munoz Marin International,San Juan,PR,USA,18.43941667,-66.00183333\\nSJX,Beaver Island,St James,MI,USA,45.69227778,-85.56630556\\nSKA,Fairchild AFB,NA,NA,USA,47.615058,-117.655803\\nSKI,Sac City Municipal,Sac City,IA,USA,42.37908333,-94.97958333\\nSKW,Skwentna,Skwentna,AK,USA,61.965295,-151.1913661\\nSKX,Taos Municipal,Taos,NM,USA,36.45819,-105.6724289\\nSLB,Storm Lake Municipal,Storm Lake,IA,USA,42.59719444,-95.24066667\\nSLC,Salt Lake City Intl,Salt Lake City,UT,USA,40.78838778,-111.9777731\\nSLE,McNary Fld,Salem,OR,USA,44.90952778,-123.0025\\nSLG,Smith,Siloam Springs,AR,USA,36.19060778,-94.49088306\\nSLK,Adirondack,Saranac Lake,NY,USA,44.38531,-74.20618472\\nSLN,Salina Municipal,Salina,KS,USA,38.7914825,-97.65060333\\nSLO,Salem-Leckrone,Salem,IL,USA,38.64287222,-88.96418528\\nSLQ,Sleetmute,Sleetmute,AK,USA,61.70931139,-157.1557008\\nSLR,Sulphur Springs Municipal,Sulphur Springs,TX,USA,33.15983333,-95.62113889\\nSMD,Smith,Fort Wayne,IN,USA,41.14335389,-85.15277694\\nSME,Somerset-Pulaski County,Somerset,KY,USA,37.05419722,-84.61494139\\nSMF,Sacramento International,Sacramento,CA,USA,38.69542167,-121.5907669\\nSMN,Lemhi County,Salmon,ID,USA,45.12047778,-113.8820103\\nSMO,Santa Monica Municipal,Santa Monica,CA,USA,34.01582194,-118.4512961\\nSMQ,Somerset,Somerville,NJ,USA,40.62599083,-74.67024333\\nSMS,Sumter Municipal,Sumter,SC,USA,33.99569444,-80.3615\\nSMX,Santa Maria Pub/Capt G Allan Hancock,Santa Maria,CA,USA,34.89924833,-120.4575825\\nSNA,John Wayne /Orange Co,Santa Ana,CA,USA,33.67565861,-117.8682225\\nSNH,Savannah Hardin County,Savannah,TN,USA,35.17036,-88.21587\\nSNK,Winston,Snyder,TX,USA,32.69338667,-100.9504525\\nSNL,Shawnee Municipal,Shawnee,OK,USA,35.35730333,-96.94282833\\nSNP,St. Paul,St. Paul,AK,USA,57.16733333,-170.2204444\\nSNS,Salinas Municipal,Salinas,CA,USA,36.66279222,-121.6063603\\nSNY,Sidney Municipal,Sidney,NE,USA,41.10133333,-102.9852778\\nSOP,Moore County,Pinehurst/Southern Pines,NC,USA,35.23735278,-79.39116944\\nSOV,Seldovia,Seldovia,AK,USA,59.44243917,-151.7040503\\nSOW,Show Low Municipal,Show Low,AZ,USA,34.26527194,-110.0054075\\nSPA,Spartanburg Downtown Memorial,Spartanburg,SC,USA,34.91572222,-81.9565\\nSPB,Scappoose Industrial Airpark,Scappoose,OR,USA,45.77250444,-122.8623611\\nSPF,Black Hills-Clyde Ice,Spearfish,SD,USA,44.48022222,-103.7768889\\nSPG,Albert Whitted Municipal,St. Petersburg,FL,USA,27.76511111,-82.62697222\\nSPH,Springhill,Springhill,LA,USA,32.98316472,-93.41081028\\nSPI,Capital,Springfield,IL,USA,39.84395194,-89.67761861\\nSPN,Tinian International Airport,NA,NA,N Mariana Islands,14.996111,145.621384\\nSPS,Sheppard AFB/Wichita Falls Municipal,Wichita Falls,TX,USA,33.98879611,-98.49189333\\nSPW,Spencer Municipal,Spencer,IA,USA,43.16552778,-95.20280556\\nSPX,Houston-Gulf,Houston,TX,USA,29.50836111,-95.05133333\\nSQI,Whiteside Co,Sterling Rockfalls,IL,USA,41.74284139,-89.67629028\\nSQL,San Carlos,San Carlos,CA,USA,37.511855,-122.2495236\\nSRB,Upper Cumberland Regional,Sparta,TN,USA,36.05593278,-85.5307475\\nSRC,Searcy Municipal,Searcy,AR,USA,35.21194639,-91.737165\\nSRQ,Sarasota Bradenton International,Sarasota,FL,USA,27.39533333,-82.55411111\\nSRR,Sierra Blanca Regional,Ruidoso,NM,USA,33.46285,-105.5347508\\nSRV,Stony River 2,Stony River,AK,USA,61.789875,-156.5881861\\nSSF,Stinson Municipal,San Antonio,TX,USA,29.3370075,-98.47114056\\nSSI,Malcolm McKinnon,Brunswick,GA,USA,31.1515925,-81.39134667\\nSSQ,Shell Lake Municipal,Shell Lake,WI,USA,45.73138139,-91.92066194\\nSTC,St Cloud Regional,St Cloud,MN,USA,45.54532417,-94.05833667\\nSTE,Stevens Point Municipal,Stevens Point,WI,USA,44.54513556,-89.53028444\\nSTF,George M Bryan,Starkville,MS,USA,33.43381667,-88.84863806\\nSTJ,Rosecrans Memorial,St Joseph,MO,USA,39.77194444,-94.90970556\\nSTK,Crosson,Sterling,CO,USA,40.6152625,-103.2646556\\nSTL,Lambert-St Louis International,St Louis,MO,USA,38.74768694,-90.35998972\\nSTP,St Paul Downtown Holman,St Paul,MN,USA,44.9344725,-93.05999861\\nSTS,Sonoma Co,Santa Rosa,CA,USA,38.50897694,-122.8128803\\nSTT,Cyril E. King,Charlotte Amalie,VI,USA,18.33730556,-64.97336111\\nSTX,Henry E. Rohlsen,Christiansted,VI,USA,17.70188889,-64.79855556\\nSUA,Witham,Stuart,FL,USA,27.18169444,-80.22108333\\nSUD,Stroud Municipal,Stroud,OK,USA,35.78756833,-96.65862861\\nSUE,Door County Cherryland,Sturgeon Bay,WI,USA,44.84366222,-87.42154111\\nSUN,Friedman Memorial,Hailey,ID,USA,43.50484139,-114.2965903\\nSUS,Spirit of St Louis,St Louis,MO,USA,38.66187028,-90.65123\\nSUT,Brunswick County,Southport,NC,USA,33.92925694,-78.07499167\\nSUW,Richard I Bong,Superior,WI,USA,46.6897175,-92.094655\\nSUX,Sioux Gateway,Sioux City,IA,USA,42.40260333,-96.38436694\\nSVA,Savoonga,Savoonga,AK,USA,63.68639444,-170.4926361\\nSVC,Grant County,Silver City,NM,USA,32.63654694,-108.1563853\\nSVE,Susanville Municipal,Susanville,CA,USA,40.37684111,-120.5730033\\nSVH,Statesville Municipal,Statesville,NC,USA,35.76526389,-80.95673611\\nSVS,Stevens Village,Stevens Village,AK,USA,66.00900528,-149.0959153\\nSWD,Seward,Seward,AK,USA,60.12693833,-149.4188122\\nSWF,Stewart,Newburgh,NY,USA,41.50409361,-74.10483833\\nSWO,Stillwater Regional,Stillwater,OK,USA,36.16025194,-97.08577028\\nSWT,Seward Municipal,Seward,NE,USA,40.86525806,-97.10931306\\nSWW,Avenger,Sweetwater,TX,USA,32.46736806,-100.4665508\\nSXL,Summersville,Summersville,WV,USA,38.23163889,-80.87080556\\nSXP,Sheldon Point,Sheldon Point,AK,USA,62.52055556,-164.8477778\\nSXQ,Soldotna,Soldotna,AK,USA,60.47613889,-151.0324444\\nSYF,Cheyenne County Municipal,St Francis,KS,USA,39.76104833,-101.7958414\\nSYI,Bomar Field-Shelbyville Municipal,Shelbyville,TN,USA,35.56009889,-86.44249333\\nSYR,Syracuse-Hancock Intl,Syracuse,NY,USA,43.11118694,-76.10631056\\nSYV,Sylvester,Sylvester,GA,USA,31.55851111,-83.89573389\\nSZP,Santa Paula,Santa Paula,CA,USA,34.34722167,-119.061215\\nSZT,Sandpoint,Sandpoint,ID,USA,48.29965139,-116.5597681\\nSZY,Robert Sibley,Selmer,TN,USA,35.20295,-88.49836139\\nT00,Chambers County,Anahauac,TX,USA,29.77,-94.66361194\\nT03,Tuba City,Tuba City,AZ,USA,36.09276972,-111.3826419\\nT08,Tomahawk Regional,Tomahawk,WI,USA,45.46913889,-89.80569444\\nT18,Brooks County,Falfurrias,TX,USA,27.20683333,-98.12117083\\nT28,Lampasas Municipal,Lampasas,TX,USA,31.10672694,-98.19600194\\nT35,Cameron Municipal Airpark,Cameron,TX,USA,30.87935556,-96.97109694\\nT36,Paul Pittman Memorial,Tylertown,MS,USA,31.14601111,-90.168145\\nT41,La Porte Municipal,La Porte,TX,USA,29.66925,-95.06419444\\nT44,Trident Basin,Kodiak,AK,USA,57.78083333,-152.3913889\\nT47,Kickapoo Downtown Airpark,Wichita Falls,TX,USA,33.86122222,-98.4904425\\nT49,Big Spring McMahon-Wrinkle,Big Spring,TX,USA,32.21261111,-101.5216389\\nT53,Robstown-Nueces County,Robstown,TX,USA,27.77854306,-97.69052389\\nT56,Crockett-Houston County,Crockett,TX,USA,31.30696111,-95.40383056\\nT57,Garland Heliport,Garland,TX,USA,32.887625,-96.6836075\\nT60,Stonewall County,Aspermont,TX,USA,33.17231861,-100.1976044\\nT65,Mid Valley,Weslaco,TX,USA,26.17763889,-97.97305556\\nT69,Sinton-San Patricio County,Sinton,TX,USA,28.03925,-97.54244444\\nT71,Cuero Municipal,Cuero,TX,USA,29.08358806,-97.26693417\\nT72,Hearne Municipal,Hearne,TX,USA,30.87182917,-96.62222639\\nT74,Taylor Municipal,Taylor,TX,USA,30.57194444,-97.44316667\\nT78,Liberty Municipal,Liberty,TX,USA,30.07780556,-94.69855556\\nT80,Kleberg County,Kingsville,TX,USA,27.55086111,-98.03091833\\nT82,Gillespie County,Fredericksburg,TX,USA,30.24369444,-98.90952778\\nT89,Castroville Municipal,Castroville,TX,USA,29.34192083,-98.85090056\\nT90,Chambers County,Winnie/Stowell,TX,USA,29.80411,-94.43102306\\nT97,Calhoun County,Port Lavaca,TX,USA,28.65405111,-96.6813125\\nTAD,Perry Stokes,Trinidad,CO,USA,37.25937778,-104.340675\\nTAL,Ralph M Calhoun Memorial,Tanana,AK,USA,65.17439528,-152.1093886\\nTAN,Taunton Municipal,Taunton,MA,USA,41.87460139,-71.01687583\\nTAZ,Taylorville Municipal,Taylorville,IL,USA,39.53418583,-89.32781222\\nTBN,Forney AAF,Fort Leonard Wood,MO,USA,37.74163111,-92.14073611\\nTBR,Statesboro Municipal,Statesboro,GA,USA,32.48316667,-81.73727778\\nTCC,Tucumcari Municipal,Tucumcari,NM,USA,35.18277806,-103.6031853\\nTCL,Tuscaloosa Municipal,Tuscaloosa,AL,USA,33.2206275,-87.61140139\\nTCS,Truth Or Consequences Municipal,Truth Or Consequences,NM,USA,33.23694444,-107.27175\\nTCT,Takotna,Takotna,AK,USA,62.99270417,-156.0681903\\nTCY,Tracy Municipal,Tracy,CA,USA,37.68910778,-121.4418172\\nTDF,Person County,Roxboro,NC,USA,36.28489194,-78.98422694\\nTDO,Toledo-Winlock Ed Carlson Memorial,Toledo,WA,USA,46.47709083,-122.80686\\nTDZ,Toledo Metcalf,Toledo,OH,USA,41.56487194,-83.48226139\\nTEB,Teterboro,Teterboro,NJ,USA,40.85010139,-74.06083611\\nTEL,Perry County Municipal,Tell City,IN,USA,38.01769694,-86.69093\\nTEW,Mason Jewett,Mason,MI,USA,42.56576833,-84.42321861\\nTEX,Telluride Regional,Telluride,CO,USA,37.95375861,-107.90848\\nTGC,Gibson County,Trenton,TN,USA,35.93245472,-88.84894028\\nTGI,Tangier Island,Tangier,VA,USA,37.82513889,-75.99777778\\nTHA,Tullahoma Regional,Tullahoma,TN,USA,35.38015694,-86.24602333\\nTHM,Thompson Falls,Thompson Falls,MT,USA,47.57493556,-115.2843164\\nTHP,Hot Springs County-Thermopolis Municipal,Thermopolis,WY,USA,43.65828917,-108.2131542\\nTHV,York,York,PA,USA,39.916995,-76.87302611\\nTIW,Tacoma Narrows,Tacoma,WA,USA,47.26793111,-122.5780997\\nTIX,Space Cost Regional,Titusville,FL,USA,28.51479944,-80.7992275\\nTKA,Talkeetna,Talkeetna,AK,USA,62.3205,-150.0936944\\nTKE,Tenakee SPB,Tenakee Springs,AK,USA,57.77965833,-135.2184439\\nTKI,McKinney Municipal,McKinney,TX,USA,33.17794778,-96.5905275\\nTKX,Kennett Memorial,Kennett,MO,USA,36.23087083,-90.03466806\\nTLH,Tallahassee Regional,Tallahassee,FL,USA,30.39652778,-84.35033333\\nTLR,Mefford,Tulare,CA,USA,36.15630556,-119.3261667\\nTLT,Tuluksak,Tuluksak,AK,USA,61.09676222,-160.9684167\\nTMA,Henry Tift Myers,Tifton,GA,USA,31.42879528,-83.48787167\\nTMB,Kendall-Tamiami Executive,Miami,FL,USA,25.64788889,-80.43277778\\nTNI,West Tinian,Peipeinimaru,CQ,USA,14.99685028,-145.6180383\\nTNP,Twentynine Palms,Twentynine Palms,CA,USA,34.13208528,-115.9458319\\nTNT,Dade Collier T And T,Miami,FL,USA,25.86180556,-80.897\\nTNU,Newton Municipal,Newton,IA,USA,41.67442972,-93.02172917\\nTOA,Zamperini,Torrance,CA,USA,33.8033775,-118.3396\\nTOB,Dodge Center,Dodge Center,MN,USA,44.018,-92.8315\\nTOC,\\\"Toccoa, R G Le Tourneau\\\",Toccoa,GA,USA,34.59376444,-83.2958\\nTOG,Togiak Village,Togiak,AK,USA,59.05284222,-160.3969339\\nTOI,Troy Municipal,Troy,AL,USA,31.86041667,-86.01213889\\nTOL,Toledo Express,Toledo,OH,USA,41.58680556,-83.80783333\\nTOP,Philip Billard Municipal,Topeka,KS,USA,39.0686575,-95.62248361\\nTOR,Torrington Muni,Torrington,WY,USA,42.0645475,-104.1526986\\nTPA,Tampa International,Tampa,FL,USA,27.97547222,-82.53325\\nTPF,Peter O. Knight,Tampa,FL,USA,27.91557833,-82.44926083\\nTPH,Tonopah,Tonopah,NV,USA,38.06020222,-117.0871536\\nTPL,Draughon-Miller Central Texas Regional,Temple,TX,USA,31.1525,-97.40777778\\nTPO,Port Alsworth,Port Alsworth,AK,USA,60.20433333,-154.3188728\\nTQE,Municipal,Tekamah,NE,USA,41.76352778,-96.17794444\\nTQH,Tahlequah Municipal,Tahlequah,OK,USA,35.92891667,-95.00452778\\nTQK,Scott City Municipal,Scott City,KS,USA,38.47427778,-100.8849444\\nTRI,Tri-Cities Regional,Bristol,TN,USA,36.47521417,-82.40742056\\nTRK,Truckee-Tahoe,Truckee,CA,USA,39.32004222,-120.1395628\\nTRL,Terrell Municipal,Terrell,TX,USA,32.71004667,-96.26742306\\nTRM,Desert Resorts Regional,Palm Springs,CA,USA,33.62789944,-116.1601194\\nTRX,Trenton Municipal,Trenton,MO,USA,40.08351333,-93.59063472\\nTSO,Carroll County-Tolson,Carrollton,OH,USA,40.56186833,-81.07748611\\nTSP,Tehachapi Municipal,Tehachapi,CA,USA,35.13497222,-118.43925\\nTT01,Pagan Airstrip,Shomu-Shon,CQ,USA,18.12444444,-145.7686111\\nTTA,Sanford-Lee County Regional,Sanford,NC,USA,35.58247222,-79.10136111\\nTTD,Portland-Troutdale,Portland,OR,USA,45.54936889,-122.4012519\\nTTF,Monroe Custer,Monroe,MI,USA,41.93990639,-83.43468306\\nTTN,Trenton-Mercer County,Trenton,NJ,USA,40.27669111,-74.81346833\\nTUL,Tulsa International,Tulsa,OK,USA,36.19837222,-95.88824167\\nTUP,Tupelo Municipal,Tupelo,MS,USA,34.26810833,-88.769895\\nTUS,Tucson International,Tucson,AZ,USA,32.11608333,-110.9410278\\nTVB,Cabool Memorial,Cabool,MO,USA,37.13244083,-92.08396167\\nTVC,Cherry Capital,Traverse City,MI,USA,44.74144472,-85.582235\\nTVF,Thief River Falls Regional,Thief River Falls,MN,USA,48.06550028,-96.18336083\\nTVI,Thomasville Municipal,Thomasville,GA,USA,30.90155194,-83.88133556\\nTVK,Centerville Municipal,Centerville,IA,USA,40.68390306,-92.90103333\\nTVL,Lake Tahoe,South Lake Tahoe,CA,USA,38.89388167,-119.9953347\\nTVR,Vicksburg Tallulah Regional,Tallulah,LA,USA,32.35160639,-91.02768917\\nTVY,Tooele Valley,Tooele,UT,USA,40.6122725,-112.3507719\\nTWF,Joslin Field - Magic Valley,Twin Falls,ID,USA,42.48180389,-114.4877356\\nTWM,Richard B. Helgeson,Two Harbors,MN,USA,47.049225,-91.74514167\\nTXK,Texarkana Regional-Webb,Texarkana,AR,USA,33.45370806,-93.99102\\nTYL,Taylor,Taylor,AZ,USA,34.45283333,-110.1148056\\nTYQ,Indianapolis Terry,Indianapolis,IN,USA,40.03064972,-86.2514375\\nTYR,Tyler Pounds,Tyler,TX,USA,32.35413889,-95.40238611\\nTYS,McGhee-Tyson,Knoxville,TN,USA,35.81248722,-83.99285583\\nTZR,Bolton,Columbus,OH,USA,39.90081778,-83.13719361\\nTZT,Belle Plaine Municipal,Belle Plaine,IA,USA,41.87877778,-92.28456944\\nTZV,Tompkinsville-Monroe County,Tompkinsville,KY,USA,36.72978,-85.65191556\\nU02,McCarley,Blackfoot,ID,USA,43.20925,-112.3495861\\nU03,Buhl Municipal,Buhl,ID,USA,42.59157139,-114.7967178\\nU05,Riddick,Philipsburg,MT,USA,46.31936972,-113.3050642\\nU08,Perkins,Overton,NV,USA,36.56803,-114.4433133\\nU10,Preston,Preston,ID,USA,42.10690806,-111.9125389\\nU14,Nephi Municipal,Nephi,UT,USA,39.73884333,-111.8716011\\nU25,Dubois Municipal,Dubois,WY,USA,43.54834722,-109.6902611\\nU30,Temple Bar,Temple Bar,AZ,USA,36.02054056,-114.3352461\\nU34,Green River Muni,Green River,UT,USA,38.96136167,-110.2273619\\nU36,Aberdeen Municipal,Aberdeen,ID,USA,42.92102222,-112.8811053\\nU42,Salt Lake City Municipal 2,Salt Lake City,UT,USA,40.61954,-111.9928858\\nU43,Monticello,Monticello,UT,USA,37.937215,-109.3465053\\nU52,Beaver Municipal,Beaver,UT,USA,38.23071,-112.6753497\\nU55,Panguitch Municipal,Panguitch,UT,USA,37.84523333,-112.3918731\\nU59,Driggs-Reed Memorial,Driggs,ID,USA,43.74193056,-111.0978608\\nU68,North Big Horn County,Cowley/Lovell/Byron,WY,USA,44.91167028,-108.4455092\\nU69,Duchesne Municipal,Duchesne,UT,USA,40.19190167,-110.3809886\\nU70,Cascade,Cascade,ID,USA,44.4937825,-116.0162422\\nU76,Mountain Home Municipal,Mountain Home,ID,USA,43.13125278,-115.7295944\\nU77,Spanish Fork-Springville,Spanish Fork,UT,USA,40.14162139,-111.6613125\\nU82,Council Municipal,Council,ID,USA,44.7498875,-116.4468092\\nU96,Cal Black Memorial,Halls Crossing,UT,USA,37.44221444,-110.5695836\\nUAO,Aurora State,Aurora,OR,USA,45.24713889,-122.7700556\\nUBE,Cumberland Municipal,Cumberland,WI,USA,45.50597028,-91.98108694\\nUBS,Columbus-Lowndes County,Columbus,MS,USA,33.46539667,-88.38031639\\nUBX,Cuba Municipal,Cuba,MO,USA,38.06877667,-91.42885694\\nUCA,Oneida Cty,Utica,NY,USA,43.14511944,-75.38385889\\nUCP,New Castle Muni,New Castle,PA,USA,41.02533778,-80.41337194\\nUCY,Everett-Stewart,Union City,TN,USA,36.38025,-88.98547778\\nUDD,Bermuda Dunes,Palm Springs,CA,USA,33.7484375,-116.2748133\\nUDG,Darlington County,Darlington,SC,USA,34.44919444,-79.89036111\\nUES,Waukesha County,Waukesha,WI,USA,43.04102778,-88.23705556\\nUGN,Waukegan Regional,Chicago/Waukegan,IL,USA,42.42216,-87.86790694\\nUIL,Quillayute,Forks,WA,USA,47.93714444,-124.5612497\\nUIN,Quincy Municipal-Baldwin,Quincy,IL,USA,39.94262417,-91.19445611\\nUIZ,Berz-Macomb,Utica,MI,USA,42.66389361,-82.96542583\\nUKF,Wilkes County,North Wilkesboro,NC,USA,36.22284028,-81.0983375\\nUKI,Ukiah Municipal,Ukiah,CA,USA,39.12595722,-123.200855\\nUKL,Coffey County,Burlington,KS,USA,38.30248472,-95.7249575\\nUKT,Quakertown,Quakertown,PA,USA,40.43521194,-75.38192861\\nULM,New Ulm Municipal,New Ulm,MN,USA,44.31957306,-94.50230778\\nULS,Ulysses,Ulysses,KS,USA,37.60375278,-101.3733889\\nUMP,Indianapolis Metropolitan,Indianapolis,IN,USA,39.9352025,-86.04495333\\nUNI,Ohio University,Athens/Albany,OH,USA,39.21096222,-82.23142583\\nUNK,Unalakleet,Unalakleet,AK,USA,63.88835917,-160.7989517\\nUNO,West Plains Municipal,West Plains,MO,USA,36.87813889,-91.90269444\\nUNU,Dodge County,Juneau,WI,USA,43.42658333,-88.70322222\\nUNV,University Park,State College,PA,USA,40.84927778,-77.84869444\\nUOS,Franklin County,Sewanee,TN,USA,35.20397028,-85.89858889\\nUOX,University-Oxford,Oxford,MS,USA,34.38431528,-89.53530972\\nUPP,Upolu,Hawi,HI,USA,20.26525583,-155.8599875\\nUSE,Fulton County,Wauseon,OH,USA,41.61033333,-84.12552778\\nUTS,Huntsville Municipal,Huntsville,TX,USA,30.74688667,-95.58716667\\nUUO,Willow,Willow,AK,USA,61.75441667,-150.0516639\\nUUU,Newport State,Newport,RI,USA,41.53243972,-71.28154389\\nUUV,Sullivan Regional,Sullivan,MO,USA,38.23343056,-91.16433333\\nUVA,Garner,Uvalde,TX,USA,29.21135028,-99.74358306\\nUWL,New Castle-Henry Co,New Castle,IN,USA,39.87585167,-85.32646806\\nUYF,Madison County,London,OH,USA,39.93272694,-83.46200361\\nUZA,Rock Hill Municipal/Bryant,Rock Hill,SC,USA,34.98783333,-81.05716667\\nVAK,Chevak,Chevak,AK,USA,61.53363583,-165.5837322\\nVAY,South Jersey Reg,Mount Holly,NJ,USA,39.94289056,-74.84571944\\nVBT,Bentonville Municipal,Bentonville,AR,USA,36.34571528,-94.219345\\nVCB,Nut Tree,Vacaville,CA,USA,38.37675167,-121.962455\\nVCT,Victoria Regional,Victoria,TX,USA,28.85255556,-96.91848722\\nVCV,Southern California Logistic,Victorville,CA,USA,34.593225,-117.3794667\\nVDI,Vidalia Municipal,Vidalia,GA,USA,32.19255556,-82.37194444\\nVDZ,Valdez,Valdez,AK,USA,61.13395028,-146.24836\\nVEE,Venetie,Venetie,AK,USA,67.02269444,-146.4137753\\nVEL,Vernal,Vernal,UT,USA,40.44090167,-109.5099203\\nVER,Jesse Viertel Memorial,Boonville,MO,USA,38.94577556,-92.68277139\\nVES,Darke County,Versailles,OH,USA,40.20441667,-84.53191667\\nVGT,North Las Vegas,Las Vegas,NV,USA,36.21166667,-115.19575\\nVHN,Culberson County,Van Horn,TX,USA,31.05784417,-104.7838056\\nVIH,Rolla National,Rolla/Vichy,MO,USA,38.12743222,-91.7695225\\nVIQ,Neillsville Municipal,Neillsville,WI,USA,44.55812861,-90.51224694\\nVIS,Visalia Municipal,Visalia,CA,USA,36.31866667,-119.3928889\\nVJI,Virginia Highlands,Abingdon,VA,USA,36.68711028,-82.03333583\\nVLA,Vandalia Municipal,Vandalia,IL,USA,38.99130556,-89.16622222\\nVLD,Valdosta Regional,Valdosta,GA,USA,30.7825,-83.27672222\\nVMR,Harold Davidson,Vermillion,SD,USA,42.76528917,-96.93425472\\nVNC,Venice Municipal,Venice,FL,USA,27.07161111,-82.44033333\\nVNW,Van Wert County,Van Wert,OH,USA,40.86472222,-84.60944444\\nVNY,Van Nuys,Van Nuys,CA,USA,34.20980972,-118.4899733\\nVPC,Cartersville,Cartersville,GA,USA,34.12313889,-84.84869444\\nVPS,Eglin Air Force Base,Valparaiso,FL,USA,30.48325,-86.5254\\nVPZ,Porter County Municipal,Valparaiso,IN,USA,41.45396667,-87.00707139\\nVQQ,Cecil,Jacksonville,FL,USA,30.21867306,-81.87666444\\nVQS,Antonio Rivera Rodriguez,Isla De Vieques,PR,USA,18.13551806,-65.49182583\\nVRB,Vero Beach Municipal,Vero Beach,FL,USA,27.65555556,-80.41794444\\nVSF,Springfield State/Hartness,Springfield,VT,USA,43.34362889,-72.5173125\\nVTA,Newark-Heath,Newark,OH,USA,40.024675,-82.46182194\\nVTI,Vinton Veterans Memorial Airpark,Vinton,IA,USA,42.21862611,-92.02592806\\nVTN,Miller,Valentine,NE,USA,42.85767194,-100.547355\\nVUJ,Stanly County,Albemarle,NC,USA,35.41669472,-80.15079556\\nVUO,Pearson Airpark,Vancouver,WA,USA,45.6204525,-122.6564883\\nVVV,Ortonville Municipal,Ortonville,MN,USA,45.30566472,-96.42442278\\nVYS,Illinois Valley Regional,Peru/Lasalle,IL,USA,41.35186806,-89.15308417\\nW04,Ocean Shores Municipal,Ocean Shores,WA,USA,47.00369806,-124.143785\\nW05,Gettysburg & Travel Center,Gettysburg,PA,USA,39.84092833,-77.27415139\\nW11,Menomonie Municipal - Score,Menomonie,WI,USA,44.89234639,-91.86777944\\nW22,Upshur County Regional,Buckhannon,WV,USA,39.00035833,-80.27392778\\nW29,Bay Bridge Industrial,Stevensville,MD,USA,38.97638889,-76.32963889\\nW31,Lunenburg County,Kenbridge,VA,USA,36.96015,-78.18499861\\nW33,Friday Harbor,Friday Harbor,WA,USA,48.53732194,-123.0096236\\nW40,Mt Olive Municipal,Mt Olive,NC,USA,35.22224722,-78.03779444\\nW41,Crisfield Municipal,Crisfield,MD,USA,38.01679028,-75.82882056\\nW44,Asheboro Municipal,Asheboro,NC,USA,35.6538825,-79.8950425\\nW45,Luray Caverns,Luray,VA,USA,38.66705556,-78.50058333\\nW66,Warrenton-Fauquier,Warrenton,VA,USA,38.58704667,-77.71138389\\nW78,William M Tuck,South Boston,VA,USA,36.710045,-78.84802028\\nW95,Ocracoke Island,Ocracoke,NC,USA,35.10117083,-75.96595278\\nW96,New Kent County,Quinton,VA,USA,37.50320139,-77.12552694\\nW97,Middle Peninsula Regional,West Point,VA,USA,37.52122778,-76.7646825\\nW99,Grant County,Petersburg,WV,USA,38.99419444,-79.14438889\\nWA10,Grove,Camas/Washougal,WA,USA,45.62777778,-122.4041667\\nWA21,Grand Coulee Dam,Electric City,WA,USA,47.92348361,-119.0805789\\nWA31,Whidbey Air Park,Langley,WA,USA,48.01814917,-122.4384789\\nWA43,Odessa Municipal,Odessa,WA,USA,47.3582025,-118.6733264\\nWAY,Greene Cty,Waynesburg,PA,USA,39.900075,-80.13311667\\nWBB,Stebbins,Stebbins,AK,USA,63.51591972,-162.2827394\\nWBQ,Beaver,Beaver,AK,USA,66.36155056,-147.4012186\\nWBW,Wilkes-Barre Wyoming Valley,Wilkes-Barre,PA,USA,41.29717222,-75.85120556\\nWCR,Chandalar Lake,Chandalar Lake,AK,USA,67.50451667,-148.4832222\\nWDG,Enid Woodring Municipal,Enid,OK,USA,36.37920333,-97.79111222\\nWDR,Winder,Winder,GA,USA,33.98227778,-83.66808333\\nWHP,Whiteman,Los Angeles,CA,USA,34.25932528,-118.4134331\\nWJF,General Wm. J. Fox Airfield,Lancaster,CA,USA,34.74095944,-118.2189489\\nWLD,Strother,Winfield/Arkansas City,KS,USA,37.16861556,-97.03752194\\nWLK,Selawik,Selawik,AK,USA,66.60002778,-159.9861944\\nWLW,Willows-Glenn County,Willows,CA,USA,39.51635389,-122.2175106\\nWMC,Winnemucca Municipal,Winnemucca,NV,USA,40.89661111,-117.8058889\\nWMO,White Mountain,White Mountain,AK,USA,64.68919444,-163.4125556\\nWNA,Napakiak,Napakiak,AK,USA,60.69118917,-161.9695161\\nWRG,Wrangell,Wrangell,AK,USA,56.48432583,-132.3698242\\nWRL,Worland Muni,Worland,WY,USA,43.96571306,-107.9508308\\nWSM,Wiseman,Wiseman,AK,USA,67.40457333,-150.1227417\\nWSN,South Naknek 2,South Naknek,AK,USA,58.70343611,-157.0082511\\nWST,Westerly State,Westerly,RI,USA,41.34961694,-71.80337778\\nWTK,Noatak,Noatak,AK,USA,67.56208333,-162.9752778\\nWVI,Watsonville Municipal,Watsonville,CA,USA,36.93573,-121.7896178\\nWVL,Waterville-Robert Lafleur,Waterville,ME,USA,44.53325,-69.67552778\\nWWD,Cape May Cty,Wildwood,NJ,USA,39.00850694,-74.90827389\\nWWR,West Woodward,Woodward,OK,USA,36.4367025,-99.5209975\\nWYS,Yellowstone,West Yellowstone,MT,USA,44.68839917,-111.1176375\\nX01,Everglades,Everglades,FL,USA,25.84871167,-81.39007944\\nX06,Arcadia Municipal,Arcadia,FL,USA,27.19199444,-81.83730472\\nX07,Lake Wales Municipal,Lake Wales,FL,USA,27.89380556,-81.62038889\\nX10,Belle Glade Municipal,Belle Glade,FL,USA,26.70089833,-80.66227972\\nX14,Labelle Municipal,Labelle,FL,USA,26.74423278,-81.43257556\\nX16,Vandenberg,Tampa,FL,USA,28.01398389,-82.34527917\\nX21,Arthur Dunn Airpark,Titusville,FL,USA,28.62234556,-80.835695\\nX23,Umatilla Municipal,Umatilla,FL,USA,28.922765,-81.65174111\\nX26,Sebastian Municipal,Sebastian,FL,USA,27.81280389,-80.49560833\\nX35,Dunnellon/Marion Co.,Dunellon,FL,USA,29.06177778,-82.37658333\\nX40,Inverness,Inverness,FL,USA,28.80859639,-82.31648167\\nX44,Watson Island Base,Miami,FL,USA,25.77833333,-80.17027778\\nX46,Opa-Locka West,Miami,FL,USA,25.94898194,-80.42338694\\nX47,Flagler County,Bunnell,FL,USA,29.46738889,-81.20633333\\nX51,Homestead General Aviation,Homestead,FL,USA,25.49872139,-80.55422528\\nX59,Valkaria,Valkaria,FL,USA,27.96196472,-80.55977556\\nX60,Williston Municipal,Williston,FL,USA,29.35422,-82.47288194\\nX63,Humacao,Humacao,PR,USA,18.13801667,-65.8007175\\nX66,Charlotte Amalie Harbor Seaplane Base,Charlotte Amalie,VI,USA,18.33856722,-64.94070111\\nX67,Christiansted Harbor Seaplane Base,Christiansted,VI,USA,17.74719528,-64.70486444\\nX95,Diego Jimenez Torres,Fajardo,PR,USA,18.30800972,-65.66182806\\nX96,Cruz Bay Harbor Seaplane Base,Cruz Bay,VI,USA,18.33689833,-64.79958306\\nXNA,Northwest Arkansas Regional,Fayetteville/Springdale/Rogers,AR,USA,36.28186944,-94.30681111\\nXVG,Longville Municipal,Longville,MN,USA,46.99016361,-94.20400222\\nY03,Springfield Municipal,Springfield,SD,USA,42.87999833,-97.90117972\\nY14,Marv Skie-Lincoln County,Tea,SD,USA,43.45747694,-96.80199528\\nY15,Cheboygan City-County,Cheboygan,MI,USA,45.65371028,-84.51927306\\nY19,Mandan Municipal,Mandan,ND,USA,46.76823667,-100.8943433\\nY27,Standing Rock,Fort Yates,ND,USA,46.06638556,-100.6348492\\nY31,West Branch Community,West Branch,MI,USA,44.244825,-84.17980472\\nY37,Park River Municipal,Park River,ND,USA,48.39443778,-97.78147889\\nY47,New Hudson,New Hudson,MI,USA,42.50311694,-83.62371667\\nY50,Wautoma Municipal,Wautoma,WI,USA,44.04162556,-89.30448694\\nY51,Viroqua Municipal,Viroqua,WI,USA,43.57913917,-90.90096333\\nY55,Crandon Municipal,Crandon,WI,USA,45.51662972,-88.93344694\\nY63,Elbow Lake Municipal,Elbow Lake,MN,USA,45.98607111,-95.99199861\\nY66,Drummond Island,Drummond Island,MI,USA,46.00931139,-83.74393417\\nY68,Tracy Municipal,Tracy,MN,USA,44.24995694,-95.60445389\\nY70,Ionia County,Ionia,MI,USA,42.93769972,-85.06066722\\nY74,Hankins,Parshall,ND,USA,47.93640083,-102.1421142\\nY83,Sandusky City,Sandusky,MI,USA,43.45418694,-82.84938028\\nY93,Atlanta Municipal,Atlanta,MI,USA,45.00000833,-84.13333667\\nYAK,Yakutat,Yakutat,AK,USA,59.50336056,-139.6602261\\nYAP,Yap International,NA,NA,Federated States of Micronesia,9.5167,138.1\\nYIP,Willow Run,Detroit,MI,USA,42.2379275,-83.53040889\\nYKM,Yakima Air Terminal,Yakima,WA,USA,46.56816972,-120.5440594\\nYKN,Chan Gurney Municipal,Yankton,SD,USA,42.91669444,-97.38594444\\nYNG,Youngstown-Warren Regional,Youngstown,OH,USA,41.26073556,-80.67909667\\nYUM,Yuma MCAS-Yuma International,Yuma,AZ,USA,32.65658333,-114.6059722\\nZ08,Ofu,Ofu Village,AS,USA,14.18435056,-169.6700236\\nZ09,Kasigluk,Kasigluk,AK,USA,60.87202194,-162.5248094\\nZ13,Akiachak,Akiachak,AK,USA,60.90453167,-161.42091\\nZ17,Ophir,Ophir,AK,USA,63.1460375,-156.529865\\nZ40,Goose Bay,Goose Bay,AK,USA,61.39445139,-149.8455556\\nZ55,Lake Louise,Lake Louise,AK,USA,62.29368944,-146.5794219\\nZ73,Nelson Lagoon,Nelson Lagoon,AK,USA,56.00753611,-161.1603672\\nZ84,Clear,Clear A.F.B.,AK,USA,64.30120361,-149.1201436\\nZ91,Birch Creek,Birch Creek,AK,USA,66.27399583,-145.8240381\\nZ95,Cibecue,Cibecue,AZ,USA,34.00333333,-110.4441667\\nZEF,Elkin Municipal,Elkin,NC,USA,36.28002361,-80.78606861\\nZER,Schuylkill Cty/Joe Zerbey,Pottsville,PA,USA,40.70644889,-76.37314667\\nZPH,Zephyrhills Municipal,Zephyrhills,FL,USA,28.22806472,-82.15591639\\nZUN,Black Rock,Zuni,NM,USA,35.08322694,-108.7917769\\nZZV,Zanesville Municipal,Zanesville,OH,USA,39.94445833,-81.89210528\\n\"","export default \"origin,destination,count\\nABE,ATL,853\\nABE,BHM,1\\nABE,CLE,805\\nABE,CLT,465\\nABE,CVG,247\\nABE,DTW,997\\nABE,JFK,3\\nABE,LGA,9\\nABE,ORD,1425\\nABE,PHL,2\\nABI,DFW,2660\\nABQ,AMA,368\\nABQ,ATL,1067\\nABQ,AUS,433\\nABQ,BWI,546\\nABQ,CLE,12\\nABQ,CVG,260\\nABQ,DAL,3078\\nABQ,DEN,4318\\nABQ,DFW,2888\\nABQ,ELP,799\\nABQ,EWR,167\\nABQ,HOU,1011\\nABQ,IAD,365\\nABQ,IAH,2261\\nABQ,LAS,2402\\nABQ,LAX,2395\\nABQ,LBB,366\\nABQ,MAF,367\\nABQ,MCI,670\\nABQ,MCO,730\\nABQ,MDW,730\\nABQ,MSP,677\\nABQ,OAK,1016\\nABQ,OKC,229\\nABQ,ONT,446\\nABQ,ORD,751\\nABQ,PDX,366\\nABQ,PHX,5265\\nABQ,SAN,1034\\nABQ,SAT,424\\nABQ,SEA,721\\nABQ,SFO,530\\nABQ,SLC,2307\\nABQ,SMF,466\\nABQ,STL,366\\nABQ,TPA,366\\nABQ,TUL,230\\nABQ,TUS,719\\nABY,ATL,1095\\nACK,EWR,234\\nACK,JFK,223\\nACT,DFW,1993\\nACV,CEC,362\\nACV,MRY,2\\nACV,SFO,2343\\nACV,SJC,1\\nACV,SLC,388\\nACV,SMF,618\\nACY,ATL,113\\nACY,JFK,1\\nACY,LGA,2\\nADK,ANC,102\\nADQ,ANC,706\\nAEX,ATL,983\\nAEX,DFW,1005\\nAEX,IAH,342\\nAGS,ATL,2380\\nAGS,CLT,16\\nAGS,LGA,7\\nAKN,ANC,78\\nAKN,DLG,38\\nALB,ATL,1154\\nALB,BOS,1\\nALB,BWI,2297\\nALB,CLE,1113\\nALB,CLT,956\\nALB,CVG,914\\nALB,DCA,327\\nALB,DTW,1013\\nALB,EWR,611\\nALB,FLL,60\\nALB,JFK,367\\nALB,LAS,366\\nALB,MCO,1037\\nALB,MDW,730\\nALB,MSP,57\\nALB,ORD,1630\\nALB,PHL,449\\nALB,SBN,1\\nALB,TPA,391\\nALO,MSP,323\\nAMA,ABQ,366\\nAMA,DAL,2669\\nAMA,DEN,729\\nAMA,DFW,2556\\nAMA,IAH,809\\nAMA,LAS,366\\nAMA,TUL,1\\nANC,ADK,102\\nANC,ADQ,706\\nANC,AKN,116\\nANC,ATL,115\\nANC,BET,1035\\nANC,CDV,362\\nANC,CVG,90\\nANC,DEN,451\\nANC,DFW,153\\nANC,DLG,78\\nANC,DTW,96\\nANC,FAI,3217\\nANC,HNL,236\\nANC,IAH,207\\nANC,JNU,1163\\nANC,LAS,237\\nANC,LAX,238\\nANC,MSP,826\\nANC,OGG,27\\nANC,OME,365\\nANC,ORD,561\\nANC,OTZ,725\\nANC,PDX,576\\nANC,PHX,366\\nANC,SCC,363\\nANC,SEA,6257\\nANC,SFO,181\\nANC,SLC,478\\nASE,ATL,16\\nASE,DEN,3992\\nASE,GJT,1\\nASE,LAX,334\\nASE,MSN,1\\nASE,ORD,332\\nASE,PHX,109\\nASE,RFD,1\\nASE,SFO,62\\nASE,SLC,459\\nATL,ABE,852\\nATL,ABQ,1064\\nATL,ABY,1095\\nATL,ACY,113\\nATL,AEX,982\\nATL,AGS,2381\\nATL,ALB,1153\\nATL,ANC,115\\nATL,ASE,16\\nATL,ATW,742\\nATL,AUS,2255\\nATL,AVL,1936\\nATL,AVP,584\\nATL,BDL,2140\\nATL,BGR,270\\nATL,BHM,2871\\nATL,BMI,2509\\nATL,BNA,3096\\nATL,BOI,41\\nATL,BOS,5990\\nATL,BQK,924\\nATL,BTR,2665\\nATL,BTV,500\\nATL,BUF,3578\\nATL,BWI,5978\\nATL,BZN,60\\nATL,CAE,2494\\nATL,CAK,3902\\nATL,CHA,2082\\nATL,CHO,786\\nATL,CHS,4492\\nATL,CID,357\\nATL,CLE,2865\\nATL,CLT,6720\\nATL,CMH,1796\\nATL,COS,589\\nATL,CRP,5\\nATL,CRW,1430\\nATL,CSG,1481\\nATL,CVG,2810\\nATL,DAB,2413\\nATL,DAY,4372\\nATL,DCA,7289\\nATL,DEN,5726\\nATL,DFW,9847\\nATL,DHN,1397\\nATL,DSM,1114\\nATL,DTW,5612\\nATL,EGE,110\\nATL,ELP,575\\nATL,EVV,1150\\nATL,EWN,791\\nATL,EWR,8028\\nATL,EYW,974\\nATL,FAY,2173\\nATL,FCA,25\\nATL,FLL,7665\\nATL,FLO,614\\nATL,FNT,3132\\nATL,FSD,135\\nATL,FSM,632\\nATL,FWA,1028\\nATL,GNV,2064\\nATL,GPT,3441\\nATL,GRB,93\\nATL,GRK,642\\nATL,GRR,1352\\nATL,GSO,2866\\nATL,GSP,2450\\nATL,GTR,964\\nATL,GUC,2\\nATL,HDN,107\\nATL,HHH,836\\nATL,HNL,637\\nATL,HOU,3593\\nATL,HPN,2155\\nATL,HSV,2627\\nATL,IAD,5309\\nATL,IAH,5268\\nATL,ICT,3146\\nATL,ILM,1996\\nATL,IND,3517\\nATL,ISP,214\\nATL,JAC,118\\nATL,JAN,2694\\nATL,JAX,5656\\nATL,JFK,1915\\nATL,LAS,4766\\nATL,LAW,544\\nATL,LAX,5406\\nATL,LEX,2213\\nATL,LFT,995\\nATL,LGA,10506\\nATL,LIT,2527\\nATL,LWB,185\\nATL,LYH,625\\nATL,MCI,4140\\nATL,MCN,652\\nATL,MCO,9613\\nATL,MDT,1789\\nATL,MDW,3256\\nATL,MEI,674\\nATL,MEM,4866\\nATL,MFE,9\\nATL,MGM,2513\\nATL,MHT,695\\nATL,MIA,6628\\nATL,MKE,3610\\nATL,MLB,2000\\nATL,MLI,2590\\nATL,MLU,983\\nATL,MOB,2224\\nATL,MSN,384\\nATL,MSP,5368\\nATL,MSY,4695\\nATL,MTJ,37\\nATL,MYR,1853\\nATL,OAJ,1178\\nATL,OAK,90\\nATL,OKC,1883\\nATL,OMA,1730\\nATL,ONT,796\\nATL,ORD,7677\\nATL,ORF,2784\\nATL,PBI,4263\\nATL,PDX,1095\\nATL,PFN,2548\\nATL,PHF,4158\\nATL,PHL,6915\\nATL,PHX,4603\\nATL,PIA,622\\nATL,PIT,4555\\nATL,PNS,4429\\nATL,PVD,1389\\nATL,PWM,904\\nATL,RDU,5411\\nATL,RIC,4532\\nATL,RNO,167\\nATL,ROA,1732\\nATL,ROC,2489\\nATL,RSW,4193\\nATL,SAN,2857\\nATL,SAT,3239\\nATL,SAV,3892\\nATL,SBN,1038\\nATL,SCE,121\\nATL,SDF,2754\\nATL,SEA,2574\\nATL,SFO,3462\\nATL,SGF,1171\\nATL,SHV,1816\\nATL,SJC,640\\nATL,SJU,1874\\nATL,SLC,2860\\nATL,SMF,682\\nATL,SNA,1461\\nATL,SRQ,3326\\nATL,STL,3958\\nATL,STT,451\\nATL,STX,67\\nATL,SWF,1617\\nATL,SYR,1419\\nATL,TLH,2484\\nATL,TOL,119\\nATL,TPA,7311\\nATL,TRI,1809\\nATL,TUL,1981\\nATL,TUP,9\\nATL,TUS,668\\nATL,TYS,2428\\nATL,VLD,938\\nATL,VPS,3046\\nATL,XNA,1769\\nATW,ATL,743\\nATW,CHS,1\\nATW,CVG,697\\nATW,DSM,1\\nATW,DTW,1020\\nATW,MKE,1032\\nATW,MSP,90\\nATW,ORD,2288\\nATW,XNA,1\\nAUS,ABQ,435\\nAUS,ATL,2252\\nAUS,BNA,792\\nAUS,BOS,368\\nAUS,BWI,730\\nAUS,CLE,380\\nAUS,CLT,659\\nAUS,CVG,653\\nAUS,DAL,5573\\nAUS,DEN,2673\\nAUS,DFW,5506\\nAUS,DSM,1\\nAUS,DTW,1\\nAUS,ELP,1349\\nAUS,EWR,949\\nAUS,FLL,481\\nAUS,HOU,2319\\nAUS,HRL,367\\nAUS,IAD,670\\nAUS,IAH,3691\\nAUS,IND,218\\nAUS,JAX,226\\nAUS,JFK,1358\\nAUS,LAS,1231\\nAUS,LAX,1733\\nAUS,LBB,692\\nAUS,LGB,245\\nAUS,MAF,470\\nAUS,MCI,459\\nAUS,MCO,632\\nAUS,MDW,712\\nAUS,MEM,834\\nAUS,MSP,55\\nAUS,MSY,444\\nAUS,OAK,236\\nAUS,OKC,88\\nAUS,ONT,305\\nAUS,ORD,2514\\nAUS,ORF,1\\nAUS,PHL,290\\nAUS,PHX,2783\\nAUS,RDU,231\\nAUS,SAN,719\\nAUS,SEA,149\\nAUS,SFO,610\\nAUS,SJC,968\\nAUS,SLC,548\\nAUS,SNA,245\\nAUS,STL,95\\nAUS,TPA,367\\nAUS,TUL,88\\nAUS,TUS,228\\nAVL,ATL,1936\\nAVL,CVG,167\\nAVL,DTW,768\\nAVL,EWR,658\\nAVL,IAH,459\\nAVL,MCO,47\\nAVL,MSP,364\\nAVP,ATL,586\\nAVP,CVG,356\\nAVP,DTW,722\\nAVP,HPN,1\\nAVP,JFK,2\\nAVP,LGA,3\\nAVP,ORD,716\\nAZO,CVG,148\\nAZO,DTW,1177\\nAZO,FAR,1\\nAZO,MSP,245\\nAZO,ORD,2352\\nAZO,XNA,1\\nBDL,ATL,2141\\nBDL,BNA,366\\nBDL,BWI,2880\\nBDL,CLE,544\\nBDL,CLT,1834\\nBDL,CVG,1187\\nBDL,DCA,1182\\nBDL,DEN,214\\nBDL,DFW,1065\\nBDL,DTW,1516\\nBDL,EWR,766\\nBDL,FLL,546\\nBDL,GRB,1\\nBDL,IAD,1397\\nBDL,IAH,120\\nBDL,IND,585\\nBDL,JFK,602\\nBDL,LAS,366\\nBDL,LAX,132\\nBDL,MCO,1755\\nBDL,MDW,1028\\nBDL,MEM,48\\nBDL,MIA,366\\nBDL,MKE,536\\nBDL,MSP,986\\nBDL,ORD,3131\\nBDL,PBI,373\\nBDL,PHL,521\\nBDL,PHX,335\\nBDL,RDU,1150\\nBDL,RSW,134\\nBDL,SJU,366\\nBDL,TPA,1276\\nBET,ANC,1035\\nBFL,DEN,533\\nBFL,FAT,1\\nBFL,LAS,102\\nBFL,LAX,906\\nBFL,PHX,1194\\nBFL,SAN,225\\nBFL,SFO,943\\nBFL,SLC,371\\nBFL,SMF,227\\nBGM,DTW,728\\nBGR,ATL,270\\nBGR,BOS,793\\nBGR,BTV,1\\nBGR,CVG,129\\nBGR,DTW,801\\nBGR,EWR,536\\nBGR,JFK,338\\nBGR,MSP,11\\nBHM,ATL,2876\\nBHM,AUS,1\\nBHM,BNA,696\\nBHM,BWI,1038\\nBHM,CLE,264\\nBHM,CLT,786\\nBHM,CVG,598\\nBHM,DAL,1074\\nBHM,DEN,666\\nBHM,DFW,1287\\nBHM,DTW,892\\nBHM,EWR,668\\nBHM,HOU,723\\nBHM,HSV,1\\nBHM,IAD,245\\nBHM,IAH,2345\\nBHM,JAX,366\\nBHM,JFK,1\\nBHM,LAS,366\\nBHM,LGA,840\\nBHM,MCO,1196\\nBHM,MDW,709\\nBHM,MEM,886\\nBHM,MKE,1\\nBHM,MSY,1008\\nBHM,ORD,1497\\nBHM,PHX,366\\nBHM,RDU,159\\nBHM,SDF,679\\nBHM,SLC,8\\nBHM,STL,366\\nBHM,TPA,1071\\nBIL,DEN,1628\\nBIL,GTF,1\\nBIL,MSP,820\\nBIL,ORD,103\\nBIL,PIH,3\\nBIL,SLC,1950\\nBIS,DEN,1239\\nBIS,MSP,1052\\nBIS,RAP,2\\nBJI,MSP,74\\nBLI,SLC,120\\nBMI,ATL,2511\\nBMI,DFW,60\\nBMI,LAS,50\\nBMI,MCO,173\\nBMI,ORD,2007\\nBNA,ATL,3097\\nBNA,AUS,795\\nBNA,BDL,365\\nBNA,BHM,688\\nBNA,BOS,78\\nBNA,BWI,2502\\nBNA,CID,1\\nBNA,CLE,1147\\nBNA,CLT,2127\\nBNA,CMH,677\\nBNA,COS,1\\nBNA,CVG,769\\nBNA,DCA,1403\\nBNA,DEN,2529\\nBNA,DFW,2859\\nBNA,DTW,2708\\nBNA,EWR,1836\\nBNA,FLL,738\\nBNA,FSD,2\\nBNA,HOU,1504\\nBNA,IAD,418\\nBNA,IAH,2522\\nBNA,JAX,1382\\nBNA,JFK,523\\nBNA,LAS,1202\\nBNA,LAX,1400\\nBNA,LGA,1216\\nBNA,MCI,1302\\nBNA,MCO,1798\\nBNA,MDW,2993\\nBNA,MEM,1020\\nBNA,MIA,731\\nBNA,MKE,772\\nBNA,MSP,785\\nBNA,MSY,1012\\nBNA,OAK,363\\nBNA,ONT,365\\nBNA,ORD,3725\\nBNA,ORF,236\\nBNA,PHL,980\\nBNA,PHX,1124\\nBNA,PVD,366\\nBNA,RDU,1623\\nBNA,SAN,721\\nBNA,SAT,677\\nBNA,SEA,364\\nBNA,SLC,115\\nBNA,STL,258\\nBNA,TPA,1720\\nBOI,ATL,41\\nBOI,ATW,1\\nBOI,DEN,2064\\nBOI,GEG,1042\\nBOI,GJT,1\\nBOI,LAS,756\\nBOI,LAX,1001\\nBOI,MSP,807\\nBOI,OAK,666\\nBOI,ONT,471\\nBOI,ORD,787\\nBOI,PDX,1027\\nBOI,PHX,679\\nBOI,PIT,1\\nBOI,RNO,1029\\nBOI,SAN,475\\nBOI,SEA,1080\\nBOI,SFO,1754\\nBOI,SLC,3342\\nBOS,ACK,1\\nBOS,ATL,5982\\nBOS,AUS,368\\nBOS,BGR,794\\nBOS,BNA,2\\nBOS,BTV,1\\nBOS,BUF,729\\nBOS,BWI,4797\\nBOS,CAK,467\\nBOS,CHS,156\\nBOS,CLE,1362\\nBOS,CLT,3533\\nBOS,CMH,916\\nBOS,CVG,1937\\nBOS,DCA,8899\\nBOS,DEN,2077\\nBOS,DFW,3036\\nBOS,DTW,2306\\nBOS,EWR,3883\\nBOS,FLL,2476\\nBOS,GGG,1\\nBOS,GSO,141\\nBOS,IAD,4184\\nBOS,IAH,1800\\nBOS,IND,950\\nBOS,JAX,647\\nBOS,JFK,7372\\nBOS,LAS,1383\\nBOS,LAX,2234\\nBOS,LGA,12029\\nBOS,LGB,788\\nBOS,MCO,3474\\nBOS,MDW,344\\nBOS,MEM,200\\nBOS,MIA,2196\\nBOS,MKE,209\\nBOS,MSP,1635\\nBOS,MSY,254\\nBOS,MYR,45\\nBOS,OAK,516\\nBOS,ORD,7085\\nBOS,ORF,243\\nBOS,PBI,1743\\nBOS,PDX,366\\nBOS,PHF,715\\nBOS,PHL,6375\\nBOS,PHX,1069\\nBOS,PIT,591\\nBOS,RDU,3777\\nBOS,RIC,689\\nBOS,RSW,1716\\nBOS,SAN,608\\nBOS,SAV,89\\nBOS,SDF,80\\nBOS,SEA,979\\nBOS,SFO,2668\\nBOS,SJC,256\\nBOS,SJU,1274\\nBOS,SLC,707\\nBOS,SRQ,23\\nBOS,STL,865\\nBOS,STT,88\\nBOS,TPA,1785\\nBPT,IAH,276\\nBQK,ATL,925\\nBQN,EWR,366\\nBQN,JFK,661\\nBQN,MCO,492\\nBRO,IAH,1464\\nBRW,ANC,364\\nBRW,FAI,364\\nBTM,SLC,708\\nBTR,ATL,2663\\nBTR,CVG,2\\nBTR,DCA,129\\nBTR,DEN,1\\nBTR,DFW,2922\\nBTR,IAH,2009\\nBTR,MEM,999\\nBTR,MSY,1\\nBTR,ORD,215\\nBTV,ATL,500\\nBTV,BWI,538\\nBTV,CLE,614\\nBTV,CVG,153\\nBTV,DTW,826\\nBTV,EWR,879\\nBTV,IAD,129\\nBTV,IND,1\\nBTV,JFK,2207\\nBTV,MCO,346\\nBTV,MSP,75\\nBTV,ORD,737\\nBUF,ATL,3575\\nBUF,BOS,728\\nBUF,BWI,2439\\nBUF,CLE,633\\nBUF,CLT,1435\\nBUF,CVG,160\\nBUF,DCA,312\\nBUF,DFW,93\\nBUF,DTW,1510\\nBUF,EWR,1469\\nBUF,FLL,672\\nBUF,IAD,16\\nBUF,JFK,3679\\nBUF,LAS,589\\nBUF,MCO,1876\\nBUF,MDW,1276\\nBUF,MSP,227\\nBUF,ORD,3437\\nBUF,PHL,685\\nBUF,PHX,365\\nBUF,RSW,376\\nBUF,TPA,729\\nBUR,DEN,944\\nBUR,DFW,1376\\nBUR,IAD,163\\nBUR,JFK,1366\\nBUR,LAS,5162\\nBUR,OAK,5423\\nBUR,PDX,60\\nBUR,PHX,4751\\nBUR,PMD,1\\nBUR,PSP,1\\nBUR,RNO,1\\nBUR,SEA,1390\\nBUR,SFO,2258\\nBUR,SJC,3377\\nBUR,SLC,1673\\nBUR,SMF,3458\\nBUR,TUS,1\\nBWI,ABQ,549\\nBWI,ALB,2296\\nBWI,ATL,5972\\nBWI,AUS,728\\nBWI,BDL,2863\\nBWI,BHM,1037\\nBWI,BNA,2492\\nBWI,BOS,4795\\nBWI,BTV,539\\nBWI,BUF,2437\\nBWI,CLE,2543\\nBWI,CLT,3652\\nBWI,CMH,1683\\nBWI,CVG,1228\\nBWI,DAB,32\\nBWI,DAY,982\\nBWI,DEN,2664\\nBWI,DFW,2311\\nBWI,DTW,3105\\nBWI,EWR,507\\nBWI,FLL,2710\\nBWI,GRR,1\\nBWI,HOU,1262\\nBWI,IAH,1728\\nBWI,IND,1016\\nBWI,ISP,2427\\nBWI,JAN,664\\nBWI,JAX,1058\\nBWI,JFK,1134\\nBWI,LAS,1626\\nBWI,LAX,898\\nBWI,LGA,7\\nBWI,LIT,366\\nBWI,MCI,1025\\nBWI,MCO,4926\\nBWI,MDW,2809\\nBWI,MEM,827\\nBWI,MHT,3633\\nBWI,MIA,929\\nBWI,MKE,1290\\nBWI,MSP,974\\nBWI,MSY,392\\nBWI,OKC,366\\nBWI,ORD,3545\\nBWI,ORF,1683\\nBWI,PBI,1351\\nBWI,PHL,692\\nBWI,PHX,2098\\nBWI,PIT,1064\\nBWI,PVD,3988\\nBWI,PWM,995\\nBWI,RDU,2082\\nBWI,ROC,863\\nBWI,RSW,1336\\nBWI,SAN,721\\nBWI,SAT,729\\nBWI,SAV,1\\nBWI,SDF,1474\\nBWI,SEA,242\\nBWI,SFO,366\\nBWI,SJU,319\\nBWI,SLC,727\\nBWI,SRQ,245\\nBWI,STL,1682\\nBWI,TPA,3388\\nBZN,ATL,60\\nBZN,BTM,1\\nBZN,DEN,1293\\nBZN,DTW,19\\nBZN,IDA,1\\nBZN,LAX,13\\nBZN,MSP,878\\nBZN,ORD,337\\nBZN,SFO,28\\nBZN,SLC,2029\\nCAE,ATL,2508\\nCAE,CVG,927\\nCAE,DFW,1157\\nCAE,DTW,713\\nCAE,EWR,684\\nCAE,IAD,1386\\nCAE,IAH,164\\nCAE,LGA,609\\nCAE,MEM,706\\nCAE,ORD,1696\\nCAK,ATL,3905\\nCAK,BOS,467\\nCAK,CVG,40\\nCAK,DEN,779\\nCAK,DTW,1044\\nCAK,FLL,8\\nCAK,LAS,42\\nCAK,LGA,793\\nCAK,MCO,371\\nCAK,ORD,1049\\nCAK,RSW,137\\nCAK,TPA,359\\nCDC,LAX,1\\nCDC,SGU,1\\nCDC,SLC,666\\nCDV,ANC,363\\nCDV,YAK,362\\nCEC,ACV,360\\nCEC,SFO,703\\nCHA,ATL,2086\\nCHA,CVG,132\\nCHA,DFW,426\\nCHA,DTW,72\\nCHA,IAH,459\\nCHA,MEM,630\\nCHA,ORD,766\\nCHO,ATL,786\\nCHO,CVG,36\\nCHO,DCA,1\\nCHS,ATL,4494\\nCHS,BOS,156\\nCHS,CLE,150\\nCHS,CLT,1121\\nCHS,CVG,786\\nCHS,DFW,1155\\nCHS,DTW,756\\nCHS,EWR,1284\\nCHS,IAD,712\\nCHS,IAH,73\\nCHS,JAX,2\\nCHS,LGA,1413\\nCHS,MEM,714\\nCHS,MSP,27\\nCHS,ORD,1337\\nCHS,SAV,1\\nCIC,FAT,1\\nCIC,MRY,1\\nCIC,SFO,1390\\nCID,ATL,357\\nCID,CVG,874\\nCID,DEN,798\\nCID,DFW,1897\\nCID,DSM,1\\nCID,DTW,946\\nCID,LGA,156\\nCID,MKE,1\\nCID,MSP,416\\nCID,ORD,3931\\nCLD,LAX,2259\\nCLD,PHX,44\\nCLE,ABE,805\\nCLE,ABQ,12\\nCLE,ALB,1106\\nCLE,ATL,3115\\nCLE,AUS,380\\nCLE,BDL,516\\nCLE,BHM,264\\nCLE,BNA,1128\\nCLE,BOS,1354\\nCLE,BTV,613\\nCLE,BUF,620\\nCLE,BWI,2562\\nCLE,CHS,150\\nCLE,CLT,1981\\nCLE,CMH,17\\nCLE,CVG,493\\nCLE,DAB,12\\nCLE,DAY,869\\nCLE,DCA,934\\nCLE,DEN,976\\nCLE,DFW,1656\\nCLE,DSM,139\\nCLE,DTW,1359\\nCLE,EWR,2105\\nCLE,FLL,618\\nCLE,GRR,1136\\nCLE,GSO,148\\nCLE,GSP,510\\nCLE,IAD,1433\\nCLE,IAH,2151\\nCLE,IND,142\\nCLE,JAX,143\\nCLE,JFK,1392\\nCLE,LAS,1656\\nCLE,LAX,1050\\nCLE,LEX,15\\nCLE,LGA,2936\\nCLE,MCI,1230\\nCLE,MCO,1915\\nCLE,MDT,58\\nCLE,MDW,2561\\nCLE,MEM,1211\\nCLE,MHT,1235\\nCLE,MIA,399\\nCLE,MKE,2226\\nCLE,MSN,317\\nCLE,MSP,1693\\nCLE,MSY,54\\nCLE,OKC,32\\nCLE,OMA,430\\nCLE,ORD,4569\\nCLE,ORF,2\\nCLE,PBI,383\\nCLE,PHL,674\\nCLE,PHX,1110\\nCLE,PVD,360\\nCLE,PWM,306\\nCLE,RDU,319\\nCLE,RIC,905\\nCLE,ROC,928\\nCLE,RSW,595\\nCLE,SAN,85\\nCLE,SAT,232\\nCLE,SAV,321\\nCLE,SDF,679\\nCLE,SEA,231\\nCLE,SFO,466\\nCLE,SJU,43\\nCLE,SLC,346\\nCLE,SRQ,118\\nCLE,STL,1191\\nCLE,SYR,696\\nCLE,TPA,874\\nCLE,TUL,10\\nCLE,TYS,495\\nCLL,DFW,1105\\nCLL,IAH,262\\nCLT,ABE,465\\nCLT,AGS,17\\nCLT,ALB,978\\nCLT,ATL,6722\\nCLT,ATW,1\\nCLT,AUS,660\\nCLT,BDL,1834\\nCLT,BHM,787\\nCLT,BNA,2126\\nCLT,BOS,3551\\nCLT,BUF,1434\\nCLT,BWI,3684\\nCLT,CHS,1122\\nCLT,CLE,1971\\nCLT,CMH,125\\nCLT,CVG,877\\nCLT,DAB,23\\nCLT,DCA,2988\\nCLT,DEN,1925\\nCLT,DFW,3796\\nCLT,DTW,2701\\nCLT,EGE,13\\nCLT,EWR,5953\\nCLT,FAY,95\\nCLT,FLL,3295\\nCLT,GRR,1\\nCLT,GSO,985\\nCLT,HSV,13\\nCLT,IAD,3126\\nCLT,IAH,3711\\nCLT,ILM,1257\\nCLT,IND,1230\\nCLT,JAX,2524\\nCLT,JFK,1866\\nCLT,LAS,1734\\nCLT,LAX,1458\\nCLT,LGA,5339\\nCLT,LIT,39\\nCLT,MCI,1183\\nCLT,MCO,3277\\nCLT,MDT,1144\\nCLT,MDW,13\\nCLT,MEM,2578\\nCLT,MHT,705\\nCLT,MIA,2970\\nCLT,MKE,243\\nCLT,MSP,1816\\nCLT,MSY,1466\\nCLT,MYR,2217\\nCLT,OAJ,6\\nCLT,ORD,5639\\nCLT,ORF,1543\\nCLT,PBI,1873\\nCLT,PDX,136\\nCLT,PHL,3525\\nCLT,PHX,2186\\nCLT,PIT,2349\\nCLT,PNS,371\\nCLT,PVD,1439\\nCLT,PWM,276\\nCLT,RDU,2340\\nCLT,RIC,1801\\nCLT,ROC,412\\nCLT,RSW,1765\\nCLT,SAN,704\\nCLT,SAT,661\\nCLT,SAV,1432\\nCLT,SDF,796\\nCLT,SEA,481\\nCLT,SFO,1427\\nCLT,SJU,796\\nCLT,SLC,212\\nCLT,SMF,76\\nCLT,SRQ,207\\nCLT,STL,1094\\nCLT,STT,418\\nCLT,STX,20\\nCLT,SYR,747\\nCLT,TLH,240\\nCLT,TPA,2811\\nCLT,TRI,16\\nCLT,TUS,208\\nCMH,ATL,1808\\nCMH,BNA,685\\nCMH,BOS,661\\nCMH,BWI,1681\\nCMH,CLE,24\\nCMH,CLT,125\\nCMH,CVG,1185\\nCMH,DCA,77\\nCMH,DEN,385\\nCMH,DFW,1694\\nCMH,DTW,1909\\nCMH,EWR,1646\\nCMH,GRB,1\\nCMH,GRR,1\\nCMH,IAH,841\\nCMH,ICT,1\\nCMH,JFK,515\\nCMH,LAS,1341\\nCMH,LAX,48\\nCMH,LGA,2355\\nCMH,MCI,164\\nCMH,MCO,1074\\nCMH,MDW,2643\\nCMH,MEM,1057\\nCMH,MIA,469\\nCMH,MKE,1054\\nCMH,MSP,1076\\nCMH,OMA,1\\nCMH,ORD,4959\\nCMH,PBI,5\\nCMH,PHL,996\\nCMH,PHX,1096\\nCMH,RDU,500\\nCMH,RSW,137\\nCMH,SLC,291\\nCMH,STL,679\\nCMH,SYR,1\\nCMH,TPA,972\\nCMI,ABI,1\\nCMI,DFW,366\\nCMI,ORD,2406\\nCMI,SPI,1\\nCMX,MSP,318\\nCOD,DEN,481\\nCOD,SLC,707\\nCOS,ABQ,1\\nCOS,ATL,591\\nCOS,CLE,1\\nCOS,CVG,104\\nCOS,DEN,4193\\nCOS,DFW,2036\\nCOS,FAT,1\\nCOS,IAH,1725\\nCOS,LAN,1\\nCOS,LAS,98\\nCOS,LAX,997\\nCOS,MCI,179\\nCOS,MEM,117\\nCOS,MKE,1\\nCOS,MSP,450\\nCOS,ONT,460\\nCOS,ORD,1519\\nCOS,PHX,1393\\nCOS,SAN,472\\nCOS,SFO,364\\nCOS,SLC,1074\\nCOS,SMF,424\\nCPR,DEN,1536\\nCPR,MSP,32\\nCPR,ORD,134\\nCPR,PIH,1\\nCPR,SLC,1006\\nCRP,ATL,6\\nCRP,DFW,2510\\nCRP,HOU,1933\\nCRP,IAH,821\\nCRW,ATL,1430\\nCRW,BNA,1\\nCRW,CVG,391\\nCRW,DTW,208\\nCRW,IAH,674\\nCRW,LEX,1\\nCRW,ORD,709\\nCSG,ATL,1481\\nCVG,ABE,248\\nCVG,ABQ,260\\nCVG,ALB,912\\nCVG,ANC,90\\nCVG,ATL,2758\\nCVG,ATW,697\\nCVG,AUS,653\\nCVG,AVL,167\\nCVG,AVP,357\\nCVG,AZO,149\\nCVG,BDL,1157\\nCVG,BGR,127\\nCVG,BHM,852\\nCVG,BNA,902\\nCVG,BOS,1859\\nCVG,BTR,2\\nCVG,BTV,152\\nCVG,BUF,160\\nCVG,BWI,1235\\nCVG,CAE,942\\nCVG,CAK,39\\nCVG,CHA,132\\nCVG,CHO,35\\nCVG,CHS,786\\nCVG,CID,873\\nCVG,CLE,493\\nCVG,CLT,926\\nCVG,CMH,795\\nCVG,COS,104\\nCVG,CRW,391\\nCVG,DAB,6\\nCVG,DAY,746\\nCVG,DCA,2015\\nCVG,DEN,1384\\nCVG,DFW,3244\\nCVG,DSM,983\\nCVG,DTW,3023\\nCVG,EGE,30\\nCVG,EVV,135\\nCVG,EWR,3094\\nCVG,FLL,683\\nCVG,FSD,555\\nCVG,GRB,447\\nCVG,GRR,1386\\nCVG,GSO,1057\\nCVG,GSP,456\\nCVG,HPN,126\\nCVG,HSV,800\\nCVG,HTS,159\\nCVG,IAD,783\\nCVG,IAH,2048\\nCVG,ILM,140\\nCVG,IND,491\\nCVG,JAC,13\\nCVG,JAN,120\\nCVG,JAX,1125\\nCVG,JFK,1532\\nCVG,LAN,485\\nCVG,LAS,921\\nCVG,LAX,1143\\nCVG,LEX,1525\\nCVG,LGA,3645\\nCVG,LIT,49\\nCVG,MCI,1491\\nCVG,MCO,1305\\nCVG,MDT,1007\\nCVG,MEM,1226\\nCVG,MHT,776\\nCVG,MIA,1045\\nCVG,MKE,839\\nCVG,MSN,259\\nCVG,MSP,1745\\nCVG,MSY,195\\nCVG,MYR,13\\nCVG,OKC,769\\nCVG,OMA,1003\\nCVG,ORD,6014\\nCVG,ORF,450\\nCVG,PBI,389\\nCVG,PDX,318\\nCVG,PFN,36\\nCVG,PHL,1671\\nCVG,PHX,468\\nCVG,PIT,1292\\nCVG,PVD,958\\nCVG,PWM,555\\nCVG,RDU,1087\\nCVG,RIC,786\\nCVG,ROA,1\\nCVG,ROC,730\\nCVG,RSW,539\\nCVG,SAN,571\\nCVG,SAT,882\\nCVG,SAV,732\\nCVG,SBN,12\\nCVG,SCE,23\\nCVG,SDF,635\\nCVG,SEA,790\\nCVG,SFO,777\\nCVG,SGF,245\\nCVG,SLC,1627\\nCVG,SNA,285\\nCVG,SRQ,444\\nCVG,STL,345\\nCVG,SYR,831\\nCVG,TOL,20\\nCVG,TPA,1099\\nCVG,TRI,247\\nCVG,TUL,882\\nCVG,TVC,129\\nCVG,TYS,916\\nCVG,VPS,103\\nCVG,XNA,101\\nCWA,DTW,549\\nCWA,MKE,285\\nCWA,MLI,1\\nCWA,MSP,13\\nCWA,ORD,1715\\nDAB,ATL,2412\\nDAB,BWI,32\\nDAB,CLE,12\\nDAB,CLT,23\\nDAB,CVG,6\\nDAB,EWR,311\\nDAB,JAX,1\\nDAB,LGA,159\\nDAB,MCO,1\\nDAL,ABQ,3106\\nDAL,AMA,2665\\nDAL,AUS,5583\\nDAL,BHM,1051\\nDAL,ELP,2282\\nDAL,HOU,9790\\nDAL,HRL,33\\nDAL,IAH,3730\\nDAL,LBB,2680\\nDAL,LIT,2330\\nDAL,MAF,1997\\nDAL,MCI,3922\\nDAL,MSY,2096\\nDAL,OKC,1686\\nDAL,ORD,1005\\nDAL,SAT,4973\\nDAL,STL,2722\\nDAL,TUL,2277\\nDAY,ATL,4369\\nDAY,BWI,980\\nDAY,CLE,862\\nDAY,CVG,755\\nDAY,DEN,838\\nDAY,DFW,1037\\nDAY,DTW,1322\\nDAY,EWR,948\\nDAY,IAD,53\\nDAY,IAH,864\\nDAY,LAS,43\\nDAY,MCO,416\\nDAY,MKE,609\\nDAY,MSP,692\\nDAY,ORD,1799\\nDAY,TPA,204\\nDBQ,ORD,1349\\nDCA,ALB,304\\nDCA,ATL,7296\\nDCA,BDL,1183\\nDCA,BNA,1401\\nDCA,BOS,8929\\nDCA,BTR,129\\nDCA,BUF,632\\nDCA,CLE,935\\nDCA,CLT,3001\\nDCA,CMH,77\\nDCA,CVG,1841\\nDCA,DEN,1429\\nDCA,DFW,3965\\nDCA,DSM,272\\nDCA,DTW,2982\\nDCA,EWR,2289\\nDCA,FLL,1361\\nDCA,GRR,307\\nDCA,HSV,561\\nDCA,IAH,2919\\nDCA,IND,968\\nDCA,JAN,304\\nDCA,JAX,888\\nDCA,JFK,3017\\nDCA,LAS,365\\nDCA,LAX,366\\nDCA,LEX,311\\nDCA,LGA,11102\\nDCA,MCO,1845\\nDCA,MEM,1043\\nDCA,MHT,306\\nDCA,MIA,2987\\nDCA,MKE,122\\nDCA,MSN,287\\nDCA,MSP,2199\\nDCA,MSY,408\\nDCA,ORD,7427\\nDCA,PBI,909\\nDCA,PHL,5\\nDCA,PHX,1081\\nDCA,PIT,322\\nDCA,PLN,1\\nDCA,PVD,671\\nDCA,RDU,2732\\nDCA,RSW,706\\nDCA,SEA,727\\nDCA,SLC,365\\nDCA,SRQ,12\\nDCA,STL,1296\\nDCA,SYR,313\\nDCA,TPA,1554\\nDCA,XNA,210\\nDEN,ABQ,4309\\nDEN,AMA,731\\nDEN,ANC,451\\nDEN,ASE,3979\\nDEN,ATL,5903\\nDEN,AUS,2719\\nDEN,BDL,213\\nDEN,BFL,533\\nDEN,BHM,651\\nDEN,BIL,1631\\nDEN,BIS,1240\\nDEN,BNA,2556\\nDEN,BOI,2069\\nDEN,BOS,2234\\nDEN,BTR,1\\nDEN,BUR,1238\\nDEN,BWI,2655\\nDEN,BZN,1286\\nDEN,CAK,780\\nDEN,CID,572\\nDEN,CLE,969\\nDEN,CLT,1925\\nDEN,CMH,685\\nDEN,COD,481\\nDEN,COS,4188\\nDEN,CPR,1533\\nDEN,CRW,1\\nDEN,CVG,1384\\nDEN,CYS,1\\nDEN,DAY,850\\nDEN,DCA,1428\\nDEN,DFW,8268\\nDEN,DRO,2473\\nDEN,DSM,1404\\nDEN,DTW,2913\\nDEN,EGE,1673\\nDEN,ELP,1060\\nDEN,EUG,726\\nDEN,EWR,2189\\nDEN,FAR,1246\\nDEN,FAT,1266\\nDEN,FCA,668\\nDEN,FLL,908\\nDEN,FSD,1474\\nDEN,GCC,695\\nDEN,GEG,1440\\nDEN,GJT,2469\\nDEN,GRB,2\\nDEN,GRR,343\\nDEN,GTF,868\\nDEN,GUC,832\\nDEN,HDN,1310\\nDEN,HLN,414\\nDEN,HNL,367\\nDEN,HOU,1056\\nDEN,HSV,654\\nDEN,IAD,2943\\nDEN,IAH,4788\\nDEN,ICT,1583\\nDEN,IDA,979\\nDEN,IND,2083\\nDEN,JAC,1340\\nDEN,JAX,118\\nDEN,JFK,1084\\nDEN,KOA,45\\nDEN,LAS,8147\\nDEN,LAX,8811\\nDEN,LGA,3051\\nDEN,LIH,45\\nDEN,LIT,121\\nDEN,LNK,1200\\nDEN,MBS,1\\nDEN,MCI,5111\\nDEN,MCO,3015\\nDEN,MDW,4338\\nDEN,MEM,1730\\nDEN,MFR,365\\nDEN,MIA,810\\nDEN,MKE,1587\\nDEN,MLI,723\\nDEN,MRY,363\\nDEN,MSN,1003\\nDEN,MSO,1108\\nDEN,MSP,5011\\nDEN,MSY,1174\\nDEN,MTJ,1592\\nDEN,OAK,3100\\nDEN,OGG,163\\nDEN,OKC,2636\\nDEN,OMA,3169\\nDEN,ONT,1544\\nDEN,ORD,6051\\nDEN,PBI,94\\nDEN,PDX,4563\\nDEN,PHL,2975\\nDEN,PHX,8391\\nDEN,PIA,363\\nDEN,PIH,1\\nDEN,PIT,804\\nDEN,PSC,939\\nDEN,PSP,997\\nDEN,RAP,2308\\nDEN,RDM,12\\nDEN,RDU,470\\nDEN,RFD,289\\nDEN,RKS,545\\nDEN,RNO,1350\\nDEN,ROC,1\\nDEN,RSW,221\\nDEN,SAN,5358\\nDEN,SAT,2651\\nDEN,SBA,841\\nDEN,SDF,384\\nDEN,SEA,6414\\nDEN,SFO,5604\\nDEN,SGF,953\\nDEN,SJC,3684\\nDEN,SLC,8905\\nDEN,SMF,3331\\nDEN,SNA,3340\\nDEN,STL,2126\\nDEN,TPA,1682\\nDEN,TUL,1628\\nDEN,TUS,2089\\nDEN,TVC,88\\nDEN,TYS,510\\nDEN,XNA,686\\nDFW,ABI,2660\\nDFW,ABQ,2888\\nDFW,ACT,1994\\nDFW,AEX,1003\\nDFW,AMA,2551\\nDFW,ANC,153\\nDFW,ATL,9849\\nDFW,AUS,5508\\nDFW,BDL,1065\\nDFW,BHM,1287\\nDFW,BMI,60\\nDFW,BNA,2861\\nDFW,BOS,3036\\nDFW,BTR,2919\\nDFW,BUF,93\\nDFW,BUR,1375\\nDFW,BWI,2309\\nDFW,CAE,1157\\nDFW,CHA,426\\nDFW,CHS,1154\\nDFW,CID,1897\\nDFW,CLE,1665\\nDFW,CLL,1104\\nDFW,CLT,3797\\nDFW,CMH,1694\\nDFW,CMI,366\\nDFW,COS,2034\\nDFW,CRP,2509\\nDFW,CVG,3244\\nDFW,DAY,1038\\nDFW,DCA,3965\\nDFW,DEN,8193\\nDFW,DSM,2134\\nDFW,DTW,2792\\nDFW,EGE,457\\nDFW,ELP,2900\\nDFW,EVV,365\\nDFW,EWR,3728\\nDFW,FAT,730\\nDFW,FLL,2296\\nDFW,FNT,245\\nDFW,FSM,1825\\nDFW,FWA,713\\nDFW,GGG,971\\nDFW,GJT,600\\nDFW,GPT,1155\\nDFW,GRK,2562\\nDFW,GRR,793\\nDFW,GSO,1037\\nDFW,GSP,1435\\nDFW,GUC,109\\nDFW,HDN,126\\nDFW,HNL,732\\nDFW,HOU,2425\\nDFW,HSV,1714\\nDFW,IAD,2010\\nDFW,IAH,5526\\nDFW,ICT,1792\\nDFW,IND,2086\\nDFW,JAC,213\\nDFW,JAN,2604\\nDFW,JAX,1366\\nDFW,JFK,833\\nDFW,LAS,4956\\nDFW,LAW,1822\\nDFW,LAX,6571\\nDFW,LBB,3012\\nDFW,LEX,908\\nDFW,LFT,1181\\nDFW,LGA,5365\\nDFW,LIT,3245\\nDFW,LRD,1400\\nDFW,MAF,1777\\nDFW,MCI,2878\\nDFW,MCO,4114\\nDFW,MDT,272\\nDFW,MEM,2501\\nDFW,MFE,1439\\nDFW,MIA,3350\\nDFW,MKE,745\\nDFW,MLI,588\\nDFW,MLU,964\\nDFW,MOB,1398\\nDFW,MSN,946\\nDFW,MSP,2810\\nDFW,MSY,2501\\nDFW,MTJ,231\\nDFW,OAK,724\\nDFW,OGG,366\\nDFW,OKC,2846\\nDFW,OMA,1747\\nDFW,ONT,1741\\nDFW,ORD,8165\\nDFW,ORF,1035\\nDFW,PBI,853\\nDFW,PDX,1578\\nDFW,PHL,3483\\nDFW,PHX,5388\\nDFW,PIA,635\\nDFW,PIT,2140\\nDFW,PNS,2020\\nDFW,PSP,1095\\nDFW,RDU,2347\\nDFW,RIC,1041\\nDFW,RNO,1093\\nDFW,ROC,176\\nDFW,ROW,961\\nDFW,RSW,918\\nDFW,SAN,3526\\nDFW,SAT,5414\\nDFW,SAV,795\\nDFW,SBA,365\\nDFW,SDF,1386\\nDFW,SEA,3915\\nDFW,SFO,3486\\nDFW,SGF,3231\\nDFW,SHV,3579\\nDFW,SJC,2250\\nDFW,SJT,1315\\nDFW,SJU,985\\nDFW,SLC,3143\\nDFW,SMF,1346\\nDFW,SNA,3669\\nDFW,SPS,1831\\nDFW,STL,3598\\nDFW,SYR,178\\nDFW,TPA,2803\\nDFW,TUL,3256\\nDFW,TUS,2677\\nDFW,TXK,1247\\nDFW,TYR,1585\\nDFW,TYS,1505\\nDFW,VPS,1962\\nDFW,XNA,2780\\nDHN,ATL,1397\\nDLG,ANC,116\\nDLH,DTW,721\\nDLH,MSP,1292\\nDRO,ABQ,1\\nDRO,DEN,2475\\nDRO,PHX,812\\nDRO,SLC,386\\nDSM,ATL,1115\\nDSM,CLE,139\\nDSM,CVG,982\\nDSM,CWA,1\\nDSM,DCA,272\\nDSM,DEN,1704\\nDSM,DFW,2137\\nDSM,DTW,956\\nDSM,GJT,2\\nDSM,IAH,688\\nDSM,LAX,175\\nDSM,LGA,707\\nDSM,LNK,1\\nDSM,MEM,751\\nDSM,MKE,722\\nDSM,MSP,1012\\nDSM,ORD,4525\\nDSM,ORF,1\\nDSM,PHX,749\\nDSM,RFD,1\\nDSM,SLC,3\\nDTW,ABE,997\\nDTW,ALB,1013\\nDTW,ANC,96\\nDTW,ATL,5612\\nDTW,ATW,1021\\nDTW,AVL,768\\nDTW,AVP,722\\nDTW,AZO,1176\\nDTW,BDL,1565\\nDTW,BGM,728\\nDTW,BGR,801\\nDTW,BHM,887\\nDTW,BNA,2712\\nDTW,BOS,2377\\nDTW,BTV,826\\nDTW,BUF,1508\\nDTW,BWI,3101\\nDTW,BZN,19\\nDTW,CAE,713\\nDTW,CAK,1044\\nDTW,CHA,73\\nDTW,CHS,761\\nDTW,CID,948\\nDTW,CLE,1182\\nDTW,CLT,2703\\nDTW,CMH,1894\\nDTW,CRW,208\\nDTW,CVG,3099\\nDTW,CWA,549\\nDTW,DAY,1322\\nDTW,DCA,2986\\nDTW,DEN,2919\\nDTW,DFW,2799\\nDTW,DLH,722\\nDTW,DSM,977\\nDTW,ELM,1336\\nDTW,ERI,1398\\nDTW,EVV,1342\\nDTW,EWR,4374\\nDTW,FLL,1321\\nDTW,FNT,1519\\nDTW,FWA,1202\\nDTW,GRB,1245\\nDTW,GRR,2527\\nDTW,GSO,1245\\nDTW,GSP,1239\\nDTW,HPN,666\\nDTW,HSV,698\\nDTW,IAD,1708\\nDTW,IAH,2740\\nDTW,ICT,242\\nDTW,IND,2605\\nDTW,ITH,133\\nDTW,JAN,682\\nDTW,JAX,507\\nDTW,JFK,1754\\nDTW,LAN,1642\\nDTW,LAS,2038\\nDTW,LAX,1608\\nDTW,LEX,1658\\nDTW,LGA,4594\\nDTW,LIT,362\\nDTW,LNK,320\\nDTW,MBS,1468\\nDTW,MCI,1438\\nDTW,MCO,3481\\nDTW,MDT,543\\nDTW,MDW,3179\\nDTW,MEM,2562\\nDTW,MHT,844\\nDTW,MIA,1227\\nDTW,MKE,1742\\nDTW,MLI,745\\nDTW,MSN,1603\\nDTW,MSP,4947\\nDTW,MSY,68\\nDTW,MYR,287\\nDTW,OKC,622\\nDTW,OMA,1324\\nDTW,ORD,7553\\nDTW,ORF,968\\nDTW,PBI,472\\nDTW,PDX,250\\nDTW,PHL,2791\\nDTW,PHX,2928\\nDTW,PIA,701\\nDTW,PIT,1558\\nDTW,PLN,263\\nDTW,PVD,1105\\nDTW,PWM,66\\nDTW,RDU,1368\\nDTW,RIC,700\\nDTW,ROA,748\\nDTW,ROC,864\\nDTW,RST,105\\nDTW,RSW,1144\\nDTW,SAN,583\\nDTW,SAT,597\\nDTW,SAV,508\\nDTW,SBN,1638\\nDTW,SCE,500\\nDTW,SDF,1082\\nDTW,SEA,1172\\nDTW,SFO,1235\\nDTW,SGF,363\\nDTW,SHV,360\\nDTW,SJU,155\\nDTW,SLC,572\\nDTW,SRQ,219\\nDTW,STL,2516\\nDTW,STT,16\\nDTW,SWF,724\\nDTW,SYR,1015\\nDTW,TPA,1452\\nDTW,TUL,726\\nDTW,TVC,1209\\nDTW,TYS,1788\\nDTW,XNA,362\\nEGE,ATL,109\\nEGE,CLT,13\\nEGE,CVG,30\\nEGE,DEN,1674\\nEGE,DFW,457\\nEGE,EWR,207\\nEGE,IAH,124\\nEGE,JFK,13\\nEGE,LAX,111\\nEGE,LGA,16\\nEGE,MIA,43\\nEGE,MSP,112\\nEGE,ORD,197\\nEKO,SLC,1577\\nEKO,TWF,3\\nELM,DTW,1336\\nELP,ABQ,792\\nELP,ATL,575\\nELP,AUS,1344\\nELP,DAL,2290\\nELP,DEN,1060\\nELP,DFW,2901\\nELP,HOU,1033\\nELP,IAH,1136\\nELP,LAS,1056\\nELP,LAX,1075\\nELP,LBB,362\\nELP,ONT,381\\nELP,ORD,670\\nELP,PHX,4136\\nELP,SAN,366\\nELP,SAT,1344\\nELP,SLC,121\\nELP,TUS,89\\nERI,DTW,1398\\nERI,PIT,1\\nEUG,DEN,726\\nEUG,FAT,1\\nEUG,LAS,162\\nEUG,LAX,305\\nEUG,MFR,1\\nEUG,PDX,1551\\nEUG,PHX,372\\nEUG,RDM,1\\nEUG,SFO,1919\\nEUG,SLC,711\\nEVV,ATL,1151\\nEVV,CVG,136\\nEVV,DFW,366\\nEVV,DTW,1342\\nEVV,MEM,904\\nEVV,ORD,1944\\nEVV,STL,1\\nEWN,ATL,791\\nEWR,ABQ,166\\nEWR,ACK,234\\nEWR,ALB,619\\nEWR,ATL,8060\\nEWR,AUS,939\\nEWR,AVL,658\\nEWR,BDL,793\\nEWR,BGR,536\\nEWR,BHM,681\\nEWR,BNA,1812\\nEWR,BOS,3870\\nEWR,BQN,366\\nEWR,BTV,879\\nEWR,BUF,1481\\nEWR,BWI,508\\nEWR,CAE,684\\nEWR,CHS,1285\\nEWR,CLE,2103\\nEWR,CLT,5945\\nEWR,CMH,1653\\nEWR,CVG,3095\\nEWR,DAB,311\\nEWR,DAY,946\\nEWR,DCA,2269\\nEWR,DEN,2209\\nEWR,DFW,3729\\nEWR,DTW,4419\\nEWR,EGE,207\\nEWR,FLL,4432\\nEWR,GRB,1\\nEWR,GRR,593\\nEWR,GSO,1092\\nEWR,GSP,1036\\nEWR,HDN,15\\nEWR,HNL,362\\nEWR,IAD,1789\\nEWR,IAH,3989\\nEWR,IND,1722\\nEWR,JAN,121\\nEWR,JAX,1596\\nEWR,LAS,2350\\nEWR,LAX,3239\\nEWR,LEX,389\\nEWR,LGA,1\\nEWR,LIT,323\\nEWR,MCI,1798\\nEWR,MCO,4978\\nEWR,MDW,279\\nEWR,MEM,1192\\nEWR,MHT,1331\\nEWR,MIA,2873\\nEWR,MKE,2523\\nEWR,MSN,313\\nEWR,MSP,3103\\nEWR,MSY,1139\\nEWR,MTJ,21\\nEWR,MYR,234\\nEWR,OKC,360\\nEWR,OMA,1079\\nEWR,ORD,7505\\nEWR,ORF,379\\nEWR,PBI,2769\\nEWR,PDX,687\\nEWR,PHL,19\\nEWR,PHX,2601\\nEWR,PIT,677\\nEWR,PSE,16\\nEWR,PVD,1101\\nEWR,PWM,740\\nEWR,RDU,2391\\nEWR,RIC,1576\\nEWR,ROC,925\\nEWR,RSW,1873\\nEWR,SAN,1179\\nEWR,SAT,949\\nEWR,SAV,1127\\nEWR,SDF,1052\\nEWR,SEA,2030\\nEWR,SFO,2777\\nEWR,SJC,200\\nEWR,SJU,1580\\nEWR,SLC,812\\nEWR,SNA,908\\nEWR,SRQ,399\\nEWR,STL,1707\\nEWR,STT,232\\nEWR,SYR,993\\nEWR,TPA,2838\\nEWR,TUL,343\\nEWR,TUS,186\\nEWR,TYS,660\\nEWR,XNA,545\\nEYW,ATL,974\\nEYW,MCO,35\\nFAI,ANC,2853\\nFAI,BRW,364\\nFAI,MSP,205\\nFAI,SCC,364\\nFAI,SEA,956\\nFAI,SLC,80\\nFAR,DEN,1263\\nFAR,LAN,1\\nFAR,MCI,1\\nFAR,MSP,1743\\nFAR,ORD,1327\\nFAR,SLC,95\\nFAR,STL,1\\nFAT,DEN,1265\\nFAT,DFW,730\\nFAT,LAS,2092\\nFAT,LAX,4022\\nFAT,LGB,435\\nFAT,MRY,2\\nFAT,OGD,1\\nFAT,ONT,239\\nFAT,PHX,1625\\nFAT,SAN,581\\nFAT,SBA,2\\nFAT,SFO,2438\\nFAT,SLC,845\\nFAT,TWF,1\\nFAY,ATL,2172\\nFAY,CLT,95\\nFCA,ATL,25\\nFCA,DEN,668\\nFCA,IDA,2\\nFCA,MSP,210\\nFCA,ORD,104\\nFCA,SFO,12\\nFCA,SLC,1741\\nFLG,PHX,1871\\nFLL,ALB,60\\nFLL,ATL,7666\\nFLL,AUS,481\\nFLL,BDL,545\\nFLL,BNA,740\\nFLL,BOS,2473\\nFLL,BUF,672\\nFLL,BWI,2704\\nFLL,CAK,8\\nFLL,CLE,618\\nFLL,CLT,2947\\nFLL,CVG,687\\nFLL,DCA,1339\\nFLL,DEN,903\\nFLL,DFW,2298\\nFLL,DTW,1320\\nFLL,EWR,4431\\nFLL,GPT,366\\nFLL,HOU,722\\nFLL,HPN,1022\\nFLL,IAD,1176\\nFLL,IAH,1933\\nFLL,IND,578\\nFLL,ISP,1092\\nFLL,JAX,1812\\nFLL,JFK,4699\\nFLL,LAS,677\\nFLL,LAX,372\\nFLL,LGA,3149\\nFLL,LGB,332\\nFLL,MCI,60\\nFLL,MCO,2095\\nFLL,MDW,1622\\nFLL,MEM,480\\nFLL,MHT,245\\nFLL,MIA,1\\nFLL,MKE,43\\nFLL,MSP,475\\nFLL,MSY,593\\nFLL,OAK,13\\nFLL,ORD,1581\\nFLL,PHF,309\\nFLL,PHL,2977\\nFLL,PHX,622\\nFLL,PIT,872\\nFLL,PNS,145\\nFLL,PSE,44\\nFLL,PVD,424\\nFLL,RDU,695\\nFLL,RIC,366\\nFLL,ROC,114\\nFLL,SJU,765\\nFLL,SLC,242\\nFLL,STL,470\\nFLL,SWF,476\\nFLL,SYR,328\\nFLL,TLH,262\\nFLL,TPA,3036\\nFLO,ATL,615\\nFNT,ATL,3133\\nFNT,DFW,246\\nFNT,DTW,1522\\nFNT,LAS,90\\nFNT,LGA,393\\nFNT,MCO,455\\nFNT,MKE,838\\nFNT,MKG,105\\nFNT,MSP,354\\nFNT,ORD,1264\\nFNT,RSW,149\\nFNT,TPA,200\\nFSD,ATL,135\\nFSD,CVG,555\\nFSD,DEN,1429\\nFSD,GRB,1\\nFSD,MSN,1\\nFSD,MSP,1927\\nFSD,ORD,1770\\nFSD,PIA,1\\nFSD,SDF,1\\nFSD,SLC,8\\nFSM,ATL,633\\nFSM,DFW,1826\\nFSM,MEM,478\\nFWA,ATL,1029\\nFWA,DFW,713\\nFWA,DTW,1202\\nFWA,MSP,241\\nFWA,ORD,2958\\nFWA,TVC,1\\nGCC,DEN,695\\nGCC,RKS,59\\nGCC,SLC,292\\nGEG,BLI,1\\nGEG,BOI,1016\\nGEG,DEN,1436\\nGEG,LAS,753\\nGEG,LAX,431\\nGEG,LGB,1\\nGEG,MSP,826\\nGEG,OAK,719\\nGEG,ONT,440\\nGEG,ORD,328\\nGEG,PDX,1314\\nGEG,PHX,777\\nGEG,RDM,1\\nGEG,RNO,213\\nGEG,SAN,454\\nGEG,SEA,4372\\nGEG,SLC,1951\\nGEG,SMF,375\\nGEG,TUS,152\\nGFK,MSP,1371\\nGGG,DFW,978\\nGJT,ASE,2\\nGJT,DEN,2463\\nGJT,DFW,599\\nGJT,HDN,1\\nGJT,LAX,4\\nGJT,ORD,6\\nGJT,PHX,1037\\nGJT,SLC,1040\\nGNV,ATL,2064\\nGPT,ATL,3441\\nGPT,DFW,1157\\nGPT,FLL,366\\nGPT,IAH,1908\\nGPT,MEM,1088\\nGPT,ORD,215\\nGPT,TPA,366\\nGRB,ATL,93\\nGRB,CVG,447\\nGRB,DEN,1\\nGRB,DSM,1\\nGRB,DTW,1224\\nGRB,GTF,1\\nGRB,MKE,774\\nGRB,MQT,323\\nGRB,MSP,1431\\nGRB,ORD,3634\\nGRB,SDF,1\\nGRK,ATL,643\\nGRK,DFW,2565\\nGRK,IAH,525\\nGRR,ATL,1351\\nGRR,CLE,1147\\nGRR,CVG,1387\\nGRR,DCA,307\\nGRR,DEN,346\\nGRR,DFW,795\\nGRR,DTW,2655\\nGRR,EWR,582\\nGRR,IAH,714\\nGRR,LGA,363\\nGRR,MCO,128\\nGRR,MEM,362\\nGRR,MKE,1244\\nGRR,MKG,23\\nGRR,MSP,1516\\nGRR,ORD,3696\\nGSO,ATL,2848\\nGSO,BOS,132\\nGSO,CLE,148\\nGSO,CLT,987\\nGSO,CVG,1097\\nGSO,DFW,1037\\nGSO,DTW,1245\\nGSO,EWR,1093\\nGSO,IAD,208\\nGSO,IAH,1035\\nGSO,JAX,1\\nGSO,LGA,905\\nGSO,MCO,19\\nGSO,MEM,1043\\nGSO,MIA,520\\nGSO,MSP,365\\nGSO,ORD,870\\nGSO,ORF,2\\nGSO,RDU,3\\nGSP,ATL,2450\\nGSP,CLE,510\\nGSP,CLT,1\\nGSP,CVG,456\\nGSP,DFW,1436\\nGSP,DTW,1238\\nGSP,EWR,1040\\nGSP,IAD,828\\nGSP,IAH,950\\nGSP,LGA,609\\nGSP,MCO,90\\nGSP,MEM,1089\\nGSP,ORD,1159\\nGST,JNU,85\\nGTF,BZN,1\\nGTF,DEN,869\\nGTF,MSP,196\\nGTF,ORD,23\\nGTF,SLC,1051\\nGTR,ATL,964\\nGUC,ATL,2\\nGUC,DEN,831\\nGUC,DFW,111\\nGUC,ORD,2\\nGUC,SLC,13\\nHDN,ATL,107\\nHDN,DEN,1314\\nHDN,DFW,127\\nHDN,EWR,15\\nHDN,IAH,112\\nHDN,JFK,13\\nHDN,LGA,15\\nHDN,MSP,112\\nHDN,ORD,205\\nHDN,SLC,378\\nHHH,ATL,836\\nHLN,DEN,412\\nHLN,MSP,365\\nHLN,SLC,1209\\nHNL,ANC,236\\nHNL,ATL,637\\nHNL,DEN,366\\nHNL,DFW,732\\nHNL,EWR,362\\nHNL,IAH,702\\nHNL,ITO,7685\\nHNL,KOA,8745\\nHNL,LAS,732\\nHNL,LAX,4963\\nHNL,LIH,10769\\nHNL,MSP,366\\nHNL,OAK,121\\nHNL,OGG,12014\\nHNL,ORD,641\\nHNL,PDX,732\\nHNL,PHX,914\\nHNL,SAN,393\\nHNL,SEA,1643\\nHNL,SFO,2359\\nHNL,SJC,366\\nHNL,SLC,366\\nHNL,SMF,366\\nHNL,SNA,66\\nHOU,ABQ,1023\\nHOU,ATL,3595\\nHOU,AUS,2310\\nHOU,BHM,736\\nHOU,BNA,1500\\nHOU,BTR,1\\nHOU,BWI,1262\\nHOU,CRP,1932\\nHOU,DAL,9766\\nHOU,DEN,1063\\nHOU,DFW,2425\\nHOU,ELP,1032\\nHOU,FLL,723\\nHOU,HRL,2967\\nHOU,JAN,1341\\nHOU,JAX,366\\nHOU,JFK,944\\nHOU,LAS,1460\\nHOU,LAX,1416\\nHOU,LIT,365\\nHOU,MAF,676\\nHOU,MCO,1753\\nHOU,MDW,2054\\nHOU,MSY,3726\\nHOU,OAK,713\\nHOU,OKC,1366\\nHOU,PHL,659\\nHOU,PHX,1722\\nHOU,SAN,421\\nHOU,SAT,2572\\nHOU,STL,1348\\nHOU,TPA,1396\\nHOU,TUL,1300\\nHPN,ATL,2158\\nHPN,CVG,126\\nHPN,DTW,666\\nHPN,EWR,1\\nHPN,FLL,1021\\nHPN,JFK,2\\nHPN,MCO,1485\\nHPN,ORD,3626\\nHPN,PBI,1048\\nHPN,PIA,1\\nHPN,PIT,1\\nHPN,RSW,520\\nHPN,TPA,60\\nHRL,AUS,366\\nHRL,DAL,33\\nHRL,HOU,2949\\nHRL,IAH,398\\nHRL,SAT,675\\nHSV,ATL,2622\\nHSV,BHM,4\\nHSV,CLT,13\\nHSV,CVG,787\\nHSV,DCA,577\\nHSV,DEN,653\\nHSV,DFW,1717\\nHSV,DTW,702\\nHSV,IAD,726\\nHSV,IAH,1043\\nHSV,LGA,72\\nHSV,MCO,248\\nHSV,MEM,1079\\nHSV,ORD,547\\nHSV,TUS,1\\nHTS,CVG,158\\nIAD,ABQ,365\\nIAD,ATL,5362\\nIAD,AUS,631\\nIAD,BDL,1192\\nIAD,BHM,245\\nIAD,BNA,233\\nIAD,BOS,3846\\nIAD,BTV,129\\nIAD,BUF,16\\nIAD,BUR,163\\nIAD,CAE,1709\\nIAD,CHS,710\\nIAD,CLE,1435\\nIAD,CLT,2762\\nIAD,CVG,783\\nIAD,DAY,52\\nIAD,DCA,1\\nIAD,DEN,2984\\nIAD,DFW,2009\\nIAD,DTW,1684\\nIAD,EWR,1790\\nIAD,FLL,1174\\nIAD,GSO,207\\nIAD,GSP,682\\nIAD,HSV,725\\nIAD,IAH,1389\\nIAD,JAX,751\\nIAD,JFK,2297\\nIAD,LAS,1623\\nIAD,LAX,4092\\nIAD,LGA,1105\\nIAD,LGB,756\\nIAD,MCI,313\\nIAD,MCO,4244\\nIAD,MDT,984\\nIAD,MDW,2075\\nIAD,MHT,585\\nIAD,MIA,575\\nIAD,MSP,712\\nIAD,MSY,413\\nIAD,MYR,533\\nIAD,OAK,841\\nIAD,OKC,319\\nIAD,ORD,2948\\nIAD,ORF,956\\nIAD,PBI,14\\nIAD,PDX,367\\nIAD,PHL,607\\nIAD,PHX,731\\nIAD,PIT,740\\nIAD,PVD,511\\nIAD,PWM,380\\nIAD,RDU,1679\\nIAD,ROA,682\\nIAD,ROC,492\\nIAD,RSW,14\\nIAD,SAN,1331\\nIAD,SAT,111\\nIAD,SAV,1008\\nIAD,SEA,1098\\nIAD,SFO,3139\\nIAD,SJC,245\\nIAD,SJU,707\\nIAD,SLC,524\\nIAD,SMF,365\\nIAD,SPI,141\\nIAD,STT,137\\nIAD,SYR,653\\nIAD,TPA,1746\\nIAD,TUS,112\\nIAD,TYS,97\\nIAH,ABQ,2261\\nIAH,AEX,342\\nIAH,AGS,1\\nIAH,AMA,807\\nIAH,ANC,206\\nIAH,ATL,4989\\nIAH,AUS,3704\\nIAH,AVL,458\\nIAH,BDL,120\\nIAH,BHM,2333\\nIAH,BNA,2547\\nIAH,BOS,1822\\nIAH,BPT,275\\nIAH,BRO,1465\\nIAH,BTR,2009\\nIAH,BWI,1728\\nIAH,CAE,165\\nIAH,CHA,458\\nIAH,CHS,73\\nIAH,CLE,2147\\nIAH,CLL,261\\nIAH,CLT,3709\\nIAH,CMH,839\\nIAH,COS,1725\\nIAH,CRP,823\\nIAH,CRW,674\\nIAH,CVG,2045\\nIAH,DAL,3730\\nIAH,DAY,859\\nIAH,DCA,2941\\nIAH,DEN,4584\\nIAH,DFW,5539\\nIAH,DSM,688\\nIAH,DTW,2742\\nIAH,EGE,124\\nIAH,ELP,1136\\nIAH,EWR,3970\\nIAH,FLL,1933\\nIAH,GPT,1908\\nIAH,GRK,525\\nIAH,GRR,714\\nIAH,GSO,1036\\nIAH,GSP,954\\nIAH,HDN,112\\nIAH,HNL,702\\nIAH,HOU,2\\nIAH,HRL,398\\nIAH,HSV,1043\\nIAH,IAD,1422\\nIAH,ICT,1594\\nIAH,IND,1763\\nIAH,JAN,1720\\nIAH,JAX,1529\\nIAH,JFK,969\\nIAH,LAS,2682\\nIAH,LAX,3867\\nIAH,LBB,769\\nIAH,LCH,999\\nIAH,LEX,646\\nIAH,LFT,2703\\nIAH,LGA,3399\\nIAH,LIT,1111\\nIAH,LRD,716\\nIAH,MAF,1187\\nIAH,MCI,2516\\nIAH,MCO,2494\\nIAH,MEM,3046\\nIAH,MFE,2665\\nIAH,MGM,246\\nIAH,MIA,2735\\nIAH,MKE,1673\\nIAH,MLU,580\\nIAH,MOB,1420\\nIAH,MSP,2466\\nIAH,MSY,4248\\nIAH,MTJ,261\\nIAH,OAK,722\\nIAH,OKC,2625\\nIAH,OMA,2098\\nIAH,ONT,1093\\nIAH,ORD,5651\\nIAH,ORF,970\\nIAH,PBI,1389\\nIAH,PDX,1271\\nIAH,PHL,1732\\nIAH,PHX,4176\\nIAH,PIT,1713\\nIAH,PNS,635\\nIAH,PSP,216\\nIAH,RDU,1987\\nIAH,RIC,970\\nIAH,RNO,428\\nIAH,RSW,1064\\nIAH,SAN,2392\\nIAH,SAT,3760\\nIAH,SAV,948\\nIAH,SDF,396\\nIAH,SEA,2393\\nIAH,SFO,2655\\nIAH,SHV,1017\\nIAH,SJC,995\\nIAH,SJU,732\\nIAH,SLC,2696\\nIAH,SMF,1085\\nIAH,SNA,1873\\nIAH,SRQ,70\\nIAH,STL,736\\nIAH,TLH,481\\nIAH,TPA,1963\\nIAH,TUL,2310\\nIAH,TUS,1670\\nIAH,TYS,1353\\nIAH,VPS,420\\nIAH,XNA,1435\\nICT,ATL,3146\\nICT,CID,1\\nICT,COS,1\\nICT,DEN,1578\\nICT,DFW,1794\\nICT,DTW,241\\nICT,IAH,1594\\nICT,LAX,184\\nICT,MCI,1\\nICT,MEM,1092\\nICT,MSP,714\\nICT,MSY,1\\nICT,OKC,2\\nICT,ORD,3005\\nICT,PHX,692\\nICT,PIA,1\\nICT,SGF,1\\nICT,SLC,1\\nICT,STL,1\\nIDA,DEN,980\\nIDA,MSP,336\\nIDA,SLC,1787\\nILM,ATL,1991\\nILM,CLT,1259\\nILM,CVG,146\\nILM,RDU,1\\nIND,ATL,3515\\nIND,AUS,218\\nIND,BDL,587\\nIND,BOS,950\\nIND,BWI,1003\\nIND,CLE,635\\nIND,CLT,1587\\nIND,CVG,507\\nIND,DCA,968\\nIND,DEN,2089\\nIND,DFW,2087\\nIND,DTW,2558\\nIND,EWR,1717\\nIND,FLL,578\\nIND,IAH,1275\\nIND,JAX,366\\nIND,JFK,117\\nIND,LAS,1675\\nIND,LAX,548\\nIND,LGA,1331\\nIND,MCI,1069\\nIND,MCO,2298\\nIND,MDW,1333\\nIND,MEM,1066\\nIND,MIA,213\\nIND,MKE,738\\nIND,MSP,1700\\nIND,MSY,10\\nIND,ORD,4102\\nIND,PHL,495\\nIND,PHX,1457\\nIND,PIT,1\\nIND,RDU,673\\nIND,RSW,1057\\nIND,SAT,236\\nIND,SEA,75\\nIND,SFO,173\\nIND,SRQ,155\\nIND,TPA,1587\\nIND,XNA,1\\nINL,MSP,72\\nIPL,LAX,646\\nIPL,YUM,343\\nISP,ATL,215\\nISP,BWI,2438\\nISP,FLL,1087\\nISP,LAS,366\\nISP,MCO,2105\\nISP,MDW,1427\\nISP,PBI,1090\\nISP,RSW,375\\nISP,TPA,1080\\nITH,DTW,132\\nITO,HNL,7386\\nITO,KOA,299\\nITO,OGG,366\\nIYK,BFL,1\\nIYK,LAX,956\\nIYK,PSP,1\\nJAC,ATL,118\\nJAC,CVG,13\\nJAC,DEN,1443\\nJAC,DFW,214\\nJAC,IDA,1\\nJAC,LAX,15\\nJAC,MSP,117\\nJAC,ORD,360\\nJAC,SLC,1485\\nJAN,ATL,2704\\nJAN,BWI,666\\nJAN,CVG,121\\nJAN,DCA,293\\nJAN,DFW,2605\\nJAN,DTW,689\\nJAN,EWR,121\\nJAN,HOU,1345\\nJAN,IAH,1721\\nJAN,MCO,381\\nJAN,MDW,677\\nJAN,MEM,1075\\nJAN,ORD,211\\nJAX,ATL,5656\\nJAX,AUS,229\\nJAX,BHM,366\\nJAX,BNA,1373\\nJAX,BOS,652\\nJAX,BWI,1066\\nJAX,CLE,144\\nJAX,CLT,2520\\nJAX,CVG,1110\\nJAX,DCA,896\\nJAX,DEN,118\\nJAX,DFW,1366\\nJAX,DTW,508\\nJAX,EWR,1581\\nJAX,FLL,1809\\nJAX,HOU,366\\nJAX,IAD,743\\nJAX,IAH,1541\\nJAX,IND,366\\nJAX,JFK,1068\\nJAX,LAS,236\\nJAX,LAX,3\\nJAX,LGA,1294\\nJAX,MCI,226\\nJAX,MEM,871\\nJAX,MIA,218\\nJAX,MSP,200\\nJAX,MSY,470\\nJAX,ORD,1704\\nJAX,ORF,712\\nJAX,PHL,1657\\nJAX,PIR,2\\nJAX,RDU,596\\nJAX,TPA,1017\\nJAX,TYS,1\\nJFK,ACK,234\\nJFK,ALB,364\\nJFK,ATL,2279\\nJFK,AUS,1356\\nJFK,BDL,631\\nJFK,BGR,338\\nJFK,BNA,463\\nJFK,BOS,7513\\nJFK,BQN,661\\nJFK,BTV,2207\\nJFK,BUF,3674\\nJFK,BUR,1366\\nJFK,BWI,1123\\nJFK,CHS,1\\nJFK,CLE,1392\\nJFK,CLT,1833\\nJFK,CMH,571\\nJFK,CVG,1346\\nJFK,DCA,2941\\nJFK,DEN,1082\\nJFK,DFW,834\\nJFK,DTW,1848\\nJFK,EGE,14\\nJFK,FLL,4696\\nJFK,HDN,13\\nJFK,HOU,943\\nJFK,HPN,1\\nJFK,IAD,2299\\nJFK,IAH,972\\nJFK,IND,125\\nJFK,JAX,1067\\nJFK,LAS,4471\\nJFK,LAX,8078\\nJFK,LGA,2\\nJFK,LGB,1541\\nJFK,MCO,5373\\nJFK,MIA,2737\\nJFK,MSP,1441\\nJFK,MSY,1070\\nJFK,OAK,1177\\nJFK,ONT,247\\nJFK,ORD,3672\\nJFK,ORF,277\\nJFK,PBI,2534\\nJFK,PDX,680\\nJFK,PHL,587\\nJFK,PHX,2254\\nJFK,PIT,2244\\nJFK,PSE,346\\nJFK,PVD,603\\nJFK,PWM,1824\\nJFK,RDU,4149\\nJFK,RIC,1694\\nJFK,ROC,2425\\nJFK,RSW,1893\\nJFK,SAN,1630\\nJFK,SEA,1855\\nJFK,SFO,6591\\nJFK,SJC,480\\nJFK,SJU,3565\\nJFK,SLC,1795\\nJFK,SMF,341\\nJFK,SRQ,534\\nJFK,STL,795\\nJFK,STT,366\\nJFK,SYR,1824\\nJFK,TPA,3390\\nJFK,TUS,132\\nJNU,ANC,1163\\nJNU,GST,85\\nJNU,KTN,364\\nJNU,PSG,363\\nJNU,SEA,1209\\nJNU,SIT,863\\nJNU,YAK,363\\nKOA,DEN,45\\nKOA,HNL,9038\\nKOA,LAX,1040\\nKOA,LIH,55\\nKOA,OAK,4\\nKOA,OGG,793\\nKOA,ORD,221\\nKOA,PHX,330\\nKOA,SAN,23\\nKOA,SEA,411\\nKOA,SFO,713\\nKOA,SNA,37\\nKTN,JNU,362\\nKTN,SEA,1289\\nKTN,SIT,365\\nKTN,WRG,364\\nLAN,CVG,486\\nLAN,DTW,1641\\nLAN,MSP,157\\nLAN,ORD,1409\\nLAS,ABQ,2408\\nLAS,ALB,366\\nLAS,AMA,367\\nLAS,ANC,238\\nLAS,ATL,4761\\nLAS,AUS,1232\\nLAS,BDL,366\\nLAS,BFL,102\\nLAS,BHM,366\\nLAS,BMI,51\\nLAS,BNA,1201\\nLAS,BOI,755\\nLAS,BOS,1383\\nLAS,BUF,588\\nLAS,BUR,5154\\nLAS,BWI,1628\\nLAS,CAK,43\\nLAS,CLE,1667\\nLAS,CLT,1730\\nLAS,CMH,1351\\nLAS,COS,98\\nLAS,CVG,920\\nLAS,DAY,42\\nLAS,DCA,366\\nLAS,DEN,8165\\nLAS,DFW,4959\\nLAS,DTW,2036\\nLAS,ELP,1042\\nLAS,EUG,162\\nLAS,EWR,2341\\nLAS,FAT,2101\\nLAS,FLL,677\\nLAS,FNT,91\\nLAS,GEG,753\\nLAS,HNL,732\\nLAS,HOU,1461\\nLAS,IAD,1625\\nLAS,IAH,2678\\nLAS,IND,1674\\nLAS,ISP,366\\nLAS,JAX,236\\nLAS,JFK,4481\\nLAS,LAX,11729\\nLAS,LBB,366\\nLAS,LGB,854\\nLAS,LIT,382\\nLAS,MAF,366\\nLAS,MCI,1913\\nLAS,MCO,1076\\nLAS,MDW,3836\\nLAS,MEM,373\\nLAS,MFR,139\\nLAS,MHT,365\\nLAS,MIA,787\\nLAS,MKE,530\\nLAS,MLI,50\\nLAS,MRY,14\\nLAS,MSP,2464\\nLAS,MSY,726\\nLAS,OAK,4693\\nLAS,OKC,471\\nLAS,OMA,1088\\nLAS,ONT,3501\\nLAS,ORD,5235\\nLAS,ORF,365\\nLAS,PBI,62\\nLAS,PDX,3568\\nLAS,PHL,2829\\nLAS,PHX,10626\\nLAS,PIT,1411\\nLAS,PSP,1280\\nLAS,PVD,365\\nLAS,RDU,724\\nLAS,RNO,4492\\nLAS,ROC,83\\nLAS,SAN,5895\\nLAS,SAT,1573\\nLAS,SBA,305\\nLAS,SBP,128\\nLAS,SDF,366\\nLAS,SEA,5065\\nLAS,SFO,6994\\nLAS,SJC,4148\\nLAS,SLC,5378\\nLAS,SMF,4054\\nLAS,SNA,4115\\nLAS,STL,1647\\nLAS,TPA,1175\\nLAS,TUL,390\\nLAS,TUS,2018\\nLAS,YUM,99\\nLAW,ATL,543\\nLAW,DFW,1826\\nLAX,ABQ,2415\\nLAX,ANC,239\\nLAX,ASE,324\\nLAX,ATL,5402\\nLAX,AUS,1732\\nLAX,BDL,132\\nLAX,BFL,902\\nLAX,BNA,1418\\nLAX,BOI,985\\nLAX,BOS,2441\\nLAX,BWI,897\\nLAX,BZN,13\\nLAX,CLD,2258\\nLAX,CLE,1053\\nLAX,CLT,1460\\nLAX,CMH,49\\nLAX,COS,994\\nLAX,CVG,1144\\nLAX,DCA,366\\nLAX,DEN,8894\\nLAX,DFW,6571\\nLAX,DSM,177\\nLAX,DTW,1972\\nLAX,EGE,107\\nLAX,ELP,1076\\nLAX,EUG,305\\nLAX,EWR,3249\\nLAX,FAT,4045\\nLAX,FLL,373\\nLAX,GEG,428\\nLAX,GJT,8\\nLAX,HNL,4964\\nLAX,HOU,1426\\nLAX,IAD,3836\\nLAX,IAH,3849\\nLAX,ICT,186\\nLAX,IND,548\\nLAX,IPL,660\\nLAX,IYK,954\\nLAX,JAC,15\\nLAX,JAX,2\\nLAX,JFK,8058\\nLAX,KOA,1038\\nLAX,LAS,11773\\nLAX,LIH,1067\\nLAX,MCI,1338\\nLAX,MCO,1725\\nLAX,MDW,2388\\nLAX,MEM,729\\nLAX,MFR,1\\nLAX,MIA,2495\\nLAX,MKE,355\\nLAX,MOD,659\\nLAX,MRY,2763\\nLAX,MSP,2392\\nLAX,MSY,930\\nLAX,MTJ,18\\nLAX,OAK,7583\\nLAX,OGG,2054\\nLAX,OKC,501\\nLAX,ONT,24\\nLAX,ORD,7333\\nLAX,OXR,1291\\nLAX,PDX,3503\\nLAX,PHL,2246\\nLAX,PHX,9897\\nLAX,PIT,373\\nLAX,PSP,2596\\nLAX,RDU,8\\nLAX,RNO,1898\\nLAX,RSW,1\\nLAX,SAN,11257\\nLAX,SAT,1781\\nLAX,SBA,4554\\nLAX,SBP,2684\\nLAX,SEA,6876\\nLAX,SFO,13390\\nLAX,SGU,722\\nLAX,SJC,8908\\nLAX,SJU,144\\nLAX,SLC,5178\\nLAX,SMF,5692\\nLAX,SMX,1679\\nLAX,SNA,32\\nLAX,STL,1686\\nLAX,TPA,516\\nLAX,TUL,73\\nLAX,TUS,4141\\nLAX,XNA,359\\nLAX,YUM,1030\\nLBB,ABQ,366\\nLBB,AUS,690\\nLBB,DAL,2679\\nLBB,DFW,3015\\nLBB,ELP,364\\nLBB,IAH,769\\nLBB,LAS,366\\nLCH,IAH,1000\\nLEX,ATL,2217\\nLEX,CLE,14\\nLEX,COS,1\\nLEX,CVG,1539\\nLEX,DAY,1\\nLEX,DCA,304\\nLEX,DFW,907\\nLEX,DTW,1656\\nLEX,EWR,390\\nLEX,IAH,646\\nLEX,LGA,411\\nLEX,MCO,39\\nLEX,MEM,252\\nLEX,ORD,1967\\nLFT,ATL,995\\nLFT,DFW,1182\\nLFT,IAH,2702\\nLGA,AGS,7\\nLGA,ATL,10507\\nLGA,BHM,591\\nLGA,BNA,1217\\nLGA,BOS,12035\\nLGA,CAE,609\\nLGA,CAK,793\\nLGA,CHS,1414\\nLGA,CID,156\\nLGA,CLE,2920\\nLGA,CLT,4958\\nLGA,CMH,2350\\nLGA,CVG,3635\\nLGA,DAB,159\\nLGA,DCA,11063\\nLGA,DEN,2970\\nLGA,DFW,5372\\nLGA,DSM,705\\nLGA,DTW,4601\\nLGA,EGE,16\\nLGA,FLL,3152\\nLGA,FNT,392\\nLGA,GRR,363\\nLGA,GSO,927\\nLGA,GSP,609\\nLGA,HDN,15\\nLGA,HSV,69\\nLGA,IAD,1103\\nLGA,IAH,3418\\nLGA,IND,1331\\nLGA,JAX,1285\\nLGA,LEX,415\\nLGA,MCO,3158\\nLGA,MEM,1605\\nLGA,MIA,3586\\nLGA,MKE,592\\nLGA,MLB,2\\nLGA,MSN,620\\nLGA,MSP,2719\\nLGA,MSY,512\\nLGA,MYR,123\\nLGA,ORD,10862\\nLGA,PBI,1934\\nLGA,PHF,770\\nLGA,PHL,1\\nLGA,PIT,1297\\nLGA,RDU,4423\\nLGA,RIC,1336\\nLGA,RSW,238\\nLGA,SAV,995\\nLGA,SDF,571\\nLGA,SLC,24\\nLGA,SRQ,74\\nLGA,STL,1604\\nLGA,STT,9\\nLGA,TPA,1464\\nLGA,TVC,50\\nLGA,TYS,642\\nLGA,VPS,2\\nLGA,XNA,765\\nLGB,AUS,245\\nLGB,BOS,789\\nLGB,FAT,431\\nLGB,FLL,332\\nLGB,GEG,1\\nLGB,IAD,756\\nLGB,JFK,1544\\nLGB,LAS,853\\nLGB,MRY,436\\nLGB,OAK,1631\\nLGB,ONT,1\\nLGB,ORD,600\\nLGB,PDX,142\\nLGB,PHX,1623\\nLGB,RNO,459\\nLGB,SEA,1499\\nLGB,SFO,210\\nLGB,SJC,661\\nLGB,SLC,2500\\nLGB,SMF,729\\nLGB,TWF,1\\nLIH,DEN,45\\nLIH,HNL,10407\\nLIH,KOA,54\\nLIH,LAX,1069\\nLIH,OGG,426\\nLIH,PHX,280\\nLIH,SAN,31\\nLIH,SEA,366\\nLIH,SFO,483\\nLIH,SNA,23\\nLIT,ATL,2526\\nLIT,BWI,366\\nLIT,CLT,39\\nLIT,CVG,49\\nLIT,DAL,2327\\nLIT,DEN,118\\nLIT,DFW,3245\\nLIT,DTW,361\\nLIT,EWR,331\\nLIT,HOU,365\\nLIT,IAH,1103\\nLIT,LAS,382\\nLIT,MCO,1\\nLIT,MDW,383\\nLIT,MEM,887\\nLIT,MSP,157\\nLIT,ORD,1806\\nLIT,PHX,235\\nLIT,SAT,1\\nLIT,SLC,18\\nLIT,STL,669\\nLMT,MFR,1\\nLMT,PDX,162\\nLMT,SFO,348\\nLNK,ABE,1\\nLNK,CRW,1\\nLNK,DEN,1204\\nLNK,DTW,320\\nLNK,LAN,1\\nLNK,MSP,106\\nLNK,ORD,1403\\nLNK,PIA,1\\nLRD,DFW,1401\\nLRD,IAH,714\\nLSE,MSP,434\\nLSE,ORD,1571\\nLWB,ATL,185\\nLWS,BOI,1\\nLWS,IDA,1\\nLWS,SLC,650\\nLYH,ATL,625\\nMAF,ABQ,366\\nMAF,AUS,471\\nMAF,DAL,1995\\nMAF,DFW,1778\\nMAF,HOU,676\\nMAF,IAH,1187\\nMAF,LAS,366\\nMBS,DTW,1460\\nMBS,MSP,117\\nMBS,ORD,1341\\nMCI,ABQ,670\\nMCI,ATL,4140\\nMCI,AUS,459\\nMCI,BNA,1317\\nMCI,BWI,1025\\nMCI,CLE,1219\\nMCI,CLT,1182\\nMCI,CMH,164\\nMCI,COS,178\\nMCI,CVG,1491\\nMCI,DAL,3943\\nMCI,DEN,5256\\nMCI,DFW,2877\\nMCI,DTW,1252\\nMCI,EWR,1799\\nMCI,FLL,60\\nMCI,IAD,227\\nMCI,IAH,2527\\nMCI,ICT,1\\nMCI,IND,1074\\nMCI,JAX,229\\nMCI,LAS,1926\\nMCI,LAX,1331\\nMCI,LNK,1\\nMCI,MCO,1349\\nMCI,MDW,3850\\nMCI,MEM,1005\\nMCI,MGM,1\\nMCI,MIA,65\\nMCI,MKE,3\\nMCI,MSN,250\\nMCI,MSP,2136\\nMCI,MSY,462\\nMCI,OAK,686\\nMCI,OKC,1128\\nMCI,OMA,3\\nMCI,ONT,301\\nMCI,ORD,3837\\nMCI,PDX,366\\nMCI,PHX,2165\\nMCI,PIT,266\\nMCI,RDU,652\\nMCI,RSW,5\\nMCI,SAN,689\\nMCI,SAT,577\\nMCI,SEA,365\\nMCI,SLC,1054\\nMCI,SMF,306\\nMCI,STL,1763\\nMCI,TPA,695\\nMCI,TUL,810\\nMCI,TUS,233\\nMCN,ATL,652\\nMCO,ABQ,726\\nMCO,ALB,1040\\nMCO,ATL,9611\\nMCO,AUS,632\\nMCO,AVL,47\\nMCO,BDL,1758\\nMCO,BHM,1214\\nMCO,BMI,173\\nMCO,BNA,1782\\nMCO,BOS,3478\\nMCO,BQN,492\\nMCO,BTV,346\\nMCO,BUF,1877\\nMCO,BWI,4926\\nMCO,CAK,371\\nMCO,CLE,1909\\nMCO,CLT,3276\\nMCO,CMH,1165\\nMCO,CVG,1304\\nMCO,DAY,416\\nMCO,DCA,1845\\nMCO,DEN,2997\\nMCO,DFW,4114\\nMCO,DTW,3477\\nMCO,EWR,4977\\nMCO,EYW,35\\nMCO,FLL,2074\\nMCO,FNT,455\\nMCO,GRR,128\\nMCO,GSO,11\\nMCO,GSP,90\\nMCO,HOU,1758\\nMCO,HPN,1484\\nMCO,HSV,248\\nMCO,IAD,4094\\nMCO,IAH,2499\\nMCO,IND,2306\\nMCO,ISP,2110\\nMCO,JAN,381\\nMCO,JAX,2\\nMCO,JFK,5371\\nMCO,LAS,1077\\nMCO,LAX,1725\\nMCO,LEX,39\\nMCO,LGA,3156\\nMCO,LIT,1\\nMCO,MCI,1349\\nMCO,MDT,42\\nMCO,MDW,3565\\nMCO,MEM,1434\\nMCO,MHT,1606\\nMCO,MIA,2195\\nMCO,MKE,831\\nMCO,MLI,172\\nMCO,MSP,1929\\nMCO,MSY,1568\\nMCO,OKC,9\\nMCO,OMA,9\\nMCO,ORD,3978\\nMCO,ORF,755\\nMCO,PBI,1\\nMCO,PDX,237\\nMCO,PFN,195\\nMCO,PHF,362\\nMCO,PHL,7034\\nMCO,PHX,1038\\nMCO,PIT,2465\\nMCO,PNS,365\\nMCO,PSE,347\\nMCO,PVD,2149\\nMCO,PWM,460\\nMCO,RDU,1655\\nMCO,RIC,517\\nMCO,ROC,701\\nMCO,RSW,1414\\nMCO,SAN,13\\nMCO,SAT,744\\nMCO,SDF,533\\nMCO,SEA,731\\nMCO,SFO,366\\nMCO,SJU,2420\\nMCO,SLC,685\\nMCO,STL,2422\\nMCO,SWF,834\\nMCO,SYR,390\\nMCO,TLH,219\\nMCO,TPA,1\\nMCO,TUL,9\\nMCO,TYS,126\\nMDT,ATL,1789\\nMDT,AVP,1\\nMDT,BWI,1\\nMDT,CLE,58\\nMDT,CLT,1144\\nMDT,CVG,1008\\nMDT,DCA,1\\nMDT,DFW,274\\nMDT,DTW,542\\nMDT,IAD,937\\nMDT,LGA,2\\nMDT,MCO,42\\nMDT,MSP,197\\nMDT,ORD,1598\\nMDW,ABQ,730\\nMDW,ALB,729\\nMDW,ATL,3257\\nMDW,AUS,713\\nMDW,BDL,1052\\nMDW,BHM,726\\nMDW,BNA,3016\\nMDW,BOS,345\\nMDW,BUF,1278\\nMDW,BWI,2776\\nMDW,CLE,2556\\nMDW,CLT,13\\nMDW,CMH,2644\\nMDW,DEN,4325\\nMDW,DTW,3070\\nMDW,EWR,278\\nMDW,FLL,1621\\nMDW,HOU,2052\\nMDW,IAD,2065\\nMDW,IND,1314\\nMDW,ISP,1422\\nMDW,JAN,682\\nMDW,LAS,3832\\nMDW,LAX,2390\\nMDW,LIT,383\\nMDW,MCI,3885\\nMDW,MCO,3568\\nMDW,MHT,1649\\nMDW,MIA,133\\nMDW,MSP,1476\\nMDW,MSY,391\\nMDW,OAK,1719\\nMDW,OMA,2047\\nMDW,ORF,731\\nMDW,PDX,891\\nMDW,PHL,2664\\nMDW,PHX,2800\\nMDW,PIT,2037\\nMDW,PVD,1380\\nMDW,RDU,1353\\nMDW,RNO,365\\nMDW,RSW,1095\\nMDW,SAN,1708\\nMDW,SAT,700\\nMDW,SDF,1690\\nMDW,SEA,1331\\nMDW,SFO,1083\\nMDW,SJC,658\\nMDW,SLC,1003\\nMDW,SMF,686\\nMDW,SRQ,565\\nMDW,STL,3784\\nMDW,TPA,2231\\nMDW,TUS,727\\nMEI,ATL,674\\nMEM,ATL,4870\\nMEM,AUS,835\\nMEM,BDL,49\\nMEM,BHM,891\\nMEM,BNA,1024\\nMEM,BOS,199\\nMEM,BTR,998\\nMEM,BWI,783\\nMEM,CAE,706\\nMEM,CHA,629\\nMEM,CHS,709\\nMEM,CLE,1205\\nMEM,CLT,2576\\nMEM,CMH,1072\\nMEM,COS,117\\nMEM,CVG,1225\\nMEM,DCA,1043\\nMEM,DEN,1731\\nMEM,DFW,2458\\nMEM,DSM,813\\nMEM,DTW,2205\\nMEM,EVV,904\\nMEM,EWR,1170\\nMEM,FLL,479\\nMEM,FSM,479\\nMEM,GPT,1088\\nMEM,GRR,362\\nMEM,GSO,1043\\nMEM,GSP,1088\\nMEM,HSV,1083\\nMEM,IAH,3079\\nMEM,ICT,1093\\nMEM,IND,1058\\nMEM,JAN,1082\\nMEM,JAX,871\\nMEM,LAS,372\\nMEM,LAX,1095\\nMEM,LEX,252\\nMEM,LGA,1608\\nMEM,LIT,886\\nMEM,MCI,981\\nMEM,MCO,1432\\nMEM,MGM,1091\\nMEM,MIA,785\\nMEM,MKE,744\\nMEM,MLI,668\\nMEM,MOB,1094\\nMEM,MSN,359\\nMEM,MSP,2845\\nMEM,MSY,1004\\nMEM,OKC,940\\nMEM,OMA,749\\nMEM,ORD,3769\\nMEM,ORF,241\\nMEM,PFN,1095\\nMEM,PHL,1039\\nMEM,PHX,817\\nMEM,PIT,1002\\nMEM,PNS,1097\\nMEM,RDU,1062\\nMEM,RIC,292\\nMEM,RSW,58\\nMEM,SAN,109\\nMEM,SAT,831\\nMEM,SAV,765\\nMEM,SDF,786\\nMEM,SEA,349\\nMEM,SFO,208\\nMEM,SGF,1080\\nMEM,SHV,1094\\nMEM,SJU,26\\nMEM,STL,1049\\nMEM,TLH,1094\\nMEM,TPA,861\\nMEM,TRI,44\\nMEM,TUL,1094\\nMEM,TYS,1096\\nMEM,VPS,1045\\nMEM,XNA,1041\\nMFE,ATL,10\\nMFE,DFW,1441\\nMFE,IAH,2665\\nMFR,DEN,365\\nMFR,LAS,139\\nMFR,MOD,1\\nMFR,OTH,1\\nMFR,PDX,1543\\nMFR,PHX,304\\nMFR,RDD,1\\nMFR,RDM,1\\nMFR,SBA,1\\nMFR,SFO,2571\\nMFR,SLC,724\\nMFR,TWF,1\\nMGM,ATL,2514\\nMGM,IAH,246\\nMGM,MEM,1091\\nMHT,ATL,696\\nMHT,BOS,4\\nMHT,BWI,3628\\nMHT,CLE,1212\\nMHT,CLT,723\\nMHT,CVG,777\\nMHT,DCA,288\\nMHT,DTW,846\\nMHT,EWR,1353\\nMHT,FLL,246\\nMHT,IAD,584\\nMHT,LAS,366\\nMHT,MCO,1605\\nMHT,MDW,1643\\nMHT,ORD,1145\\nMHT,PHL,2365\\nMHT,PHX,365\\nMHT,TPA,742\\nMIA,ATL,6623\\nMIA,BDL,366\\nMIA,BNA,731\\nMIA,BOS,2193\\nMIA,BWI,929\\nMIA,CLE,399\\nMIA,CLT,2970\\nMIA,CMH,470\\nMIA,CVG,1045\\nMIA,DCA,2982\\nMIA,DEN,809\\nMIA,DFW,3346\\nMIA,DTW,1228\\nMIA,EGE,43\\nMIA,EWR,2873\\nMIA,FLL,1\\nMIA,GSO,519\\nMIA,IAD,574\\nMIA,IAH,2734\\nMIA,IND,211\\nMIA,JAX,217\\nMIA,JFK,2743\\nMIA,LAS,787\\nMIA,LAX,2494\\nMIA,LGA,3587\\nMIA,MCI,65\\nMIA,MCO,2195\\nMIA,MDW,133\\nMIA,MEM,785\\nMIA,MSP,907\\nMIA,MSY,1098\\nMIA,ORD,3343\\nMIA,ORF,152\\nMIA,PHL,2203\\nMIA,PHX,366\\nMIA,PIT,174\\nMIA,RDU,1098\\nMIA,RIC,151\\nMIA,SDF,365\\nMIA,SEA,366\\nMIA,SFO,1097\\nMIA,SJU,2559\\nMIA,STL,732\\nMIA,STT,732\\nMIA,STX,349\\nMIA,TLH,832\\nMIA,TPA,1829\\nMIA,XNA,154\\nMKE,ABE,1\\nMKE,ATL,3606\\nMKE,ATW,1030\\nMKE,AVP,1\\nMKE,BDL,539\\nMKE,BHM,1\\nMKE,BNA,771\\nMKE,BOS,208\\nMKE,BWI,1293\\nMKE,CLE,2226\\nMKE,CLT,245\\nMKE,CMH,1054\\nMKE,CVG,840\\nMKE,CWA,285\\nMKE,DAY,608\\nMKE,DCA,122\\nMKE,DEN,1449\\nMKE,DFW,747\\nMKE,DSM,723\\nMKE,DTW,1905\\nMKE,EWR,2524\\nMKE,FAR,1\\nMKE,FLL,43\\nMKE,FNT,839\\nMKE,GRB,774\\nMKE,GRR,1244\\nMKE,IAH,1671\\nMKE,IND,738\\nMKE,LAS,531\\nMKE,LAX,355\\nMKE,LGA,590\\nMKE,MCI,2\\nMKE,MCO,830\\nMKE,MEM,734\\nMKE,MKG,264\\nMKE,MQT,357\\nMKE,MSN,1294\\nMKE,MSP,3464\\nMKE,OMA,703\\nMKE,ORD,3541\\nMKE,PHL,775\\nMKE,PHX,867\\nMKE,PIT,1082\\nMKE,RDU,490\\nMKE,RSW,226\\nMKE,SAN,106\\nMKE,SDF,258\\nMKE,SEA,122\\nMKE,SFO,115\\nMKE,SLC,6\\nMKE,STL,320\\nMKE,TPA,178\\nMKE,TUS,2\\nMKG,FNT,109\\nMKG,GRR,24\\nMKG,MKE,263\\nMLB,ATL,2000\\nMLB,LGA,2\\nMLI,ATL,2592\\nMLI,DEN,719\\nMLI,DFW,587\\nMLI,DTW,755\\nMLI,LAS,51\\nMLI,MCO,172\\nMLI,MEM,669\\nMLI,MSP,442\\nMLI,ORD,2580\\nMLU,ATL,983\\nMLU,DFW,966\\nMLU,IAH,581\\nMOB,ATL,2225\\nMOB,DFW,1399\\nMOB,IAH,1420\\nMOB,MEM,1094\\nMOB,ORD,210\\nMOD,BFL,1\\nMOD,LAX,679\\nMOD,ONT,1\\nMOD,RNO,1\\nMOD,SFO,1643\\nMOT,MSP,1085\\nMQT,GRB,322\\nMQT,MKE,356\\nMQT,ORD,313\\nMRY,DEN,365\\nMRY,LAS,14\\nMRY,LAX,2758\\nMRY,LGB,435\\nMRY,ONT,246\\nMRY,PHX,910\\nMRY,SAN,445\\nMRY,SFO,2428\\nMRY,SLC,6\\nMSN,ATL,384\\nMSN,ATW,1\\nMSN,CLE,317\\nMSN,CVG,259\\nMSN,DCA,287\\nMSN,DEN,943\\nMSN,DFW,947\\nMSN,DSM,1\\nMSN,DTW,1603\\nMSN,EWR,313\\nMSN,LGA,622\\nMSN,MCI,249\\nMSN,MEM,359\\nMSN,MKE,1293\\nMSN,MSP,1439\\nMSN,ORD,4943\\nMSN,RFD,1\\nMSO,DEN,1107\\nMSO,MSP,189\\nMSO,ORD,105\\nMSO,PIH,2\\nMSO,SFO,12\\nMSO,SLC,1841\\nMSP,ABQ,677\\nMSP,ALB,57\\nMSP,ALO,323\\nMSP,ANC,826\\nMSP,ATL,5369\\nMSP,ATW,89\\nMSP,AUS,54\\nMSP,AVL,364\\nMSP,AZO,246\\nMSP,BDL,933\\nMSP,BGR,11\\nMSP,BIL,820\\nMSP,BIS,1052\\nMSP,BJI,74\\nMSP,BNA,781\\nMSP,BOI,807\\nMSP,BOS,1563\\nMSP,BTV,75\\nMSP,BUF,229\\nMSP,BWI,1017\\nMSP,BZN,878\\nMSP,CHS,27\\nMSP,CID,412\\nMSP,CLE,1876\\nMSP,CLT,1814\\nMSP,CMH,1076\\nMSP,CMX,318\\nMSP,COS,449\\nMSP,CPR,31\\nMSP,CVG,1760\\nMSP,CWA,13\\nMSP,DAY,692\\nMSP,DCA,2194\\nMSP,DEN,5374\\nMSP,DFW,2851\\nMSP,DLH,1290\\nMSP,DSM,929\\nMSP,DTW,5459\\nMSP,EGE,112\\nMSP,EWR,3144\\nMSP,FAI,205\\nMSP,FAR,1744\\nMSP,FCA,209\\nMSP,FLL,475\\nMSP,FNT,355\\nMSP,FSD,1925\\nMSP,FWA,242\\nMSP,GEG,826\\nMSP,GFK,1371\\nMSP,GRB,1408\\nMSP,GRR,1645\\nMSP,GSO,365\\nMSP,GTF,195\\nMSP,HDN,112\\nMSP,HLN,365\\nMSP,HNL,366\\nMSP,IAD,710\\nMSP,IAH,2451\\nMSP,ICT,714\\nMSP,IDA,336\\nMSP,IND,1661\\nMSP,INL,72\\nMSP,JAC,117\\nMSP,JAX,201\\nMSP,JFK,1441\\nMSP,LAN,157\\nMSP,LAS,2461\\nMSP,LAX,2389\\nMSP,LGA,2723\\nMSP,LIT,157\\nMSP,LNK,106\\nMSP,LSE,433\\nMSP,MBS,109\\nMSP,MCI,1976\\nMSP,MCO,1931\\nMSP,MDT,197\\nMSP,MDW,1367\\nMSP,MEM,2551\\nMSP,MIA,908\\nMSP,MKE,3619\\nMSP,MLI,450\\nMSP,MOT,1085\\nMSP,MSN,1438\\nMSP,MSO,189\\nMSP,MYR,27\\nMSP,OKC,542\\nMSP,OMA,1177\\nMSP,ORD,9356\\nMSP,ORF,122\\nMSP,PDX,1501\\nMSP,PHL,1709\\nMSP,PHX,3515\\nMSP,PIR,3\\nMSP,PIT,1006\\nMSP,PSP,214\\nMSP,PVD,6\\nMSP,PWM,42\\nMSP,RAP,877\\nMSP,RDU,726\\nMSP,RHI,221\\nMSP,RIC,339\\nMSP,ROC,134\\nMSP,RST,881\\nMSP,RSW,647\\nMSP,SAN,1330\\nMSP,SAT,190\\nMSP,SAV,27\\nMSP,SBN,365\\nMSP,SDF,707\\nMSP,SEA,2475\\nMSP,SFO,1909\\nMSP,SGF,359\\nMSP,SJC,693\\nMSP,SJU,26\\nMSP,SLC,2197\\nMSP,SMF,809\\nMSP,SNA,1037\\nMSP,SPI,1\\nMSP,STL,1626\\nMSP,SUX,121\\nMSP,TPA,1005\\nMSP,TUL,717\\nMSP,TUS,439\\nMSP,TVC,346\\nMSP,TYS,365\\nMSP,XNA,677\\nMSY,ATL,4695\\nMSY,AUS,443\\nMSY,BHM,1012\\nMSY,BNA,1010\\nMSY,BOS,254\\nMSY,BWI,391\\nMSY,CLE,54\\nMSY,CLT,1504\\nMSY,CMH,1\\nMSY,CVG,193\\nMSY,DAL,2079\\nMSY,DCA,430\\nMSY,DEN,1176\\nMSY,DFW,2501\\nMSY,DTW,53\\nMSY,EWR,1129\\nMSY,FLL,594\\nMSY,HOU,3737\\nMSY,IAD,457\\nMSY,IAH,4257\\nMSY,IND,10\\nMSY,JAX,472\\nMSY,JFK,1070\\nMSY,LAS,727\\nMSY,LAX,928\\nMSY,LGA,511\\nMSY,MCI,461\\nMSY,MCO,1566\\nMSY,MDW,390\\nMSY,MEM,1003\\nMSY,MIA,1097\\nMSY,MSP,16\\nMSY,OKC,1\\nMSY,ORD,1458\\nMSY,PHL,1046\\nMSY,PHX,365\\nMSY,RDU,472\\nMSY,SAT,432\\nMSY,SLC,329\\nMSY,TPA,1097\\nMSY,TWF,1\\nMTJ,ATL,37\\nMTJ,DEN,1591\\nMTJ,DFW,232\\nMTJ,EWR,21\\nMTJ,IAH,261\\nMTJ,LAX,18\\nMTJ,ORD,30\\nMTJ,SLC,229\\nMYR,ATL,1854\\nMYR,BOS,45\\nMYR,CLT,2216\\nMYR,CVG,13\\nMYR,DTW,287\\nMYR,EWR,234\\nMYR,IAD,533\\nMYR,ILM,1\\nMYR,LGA,124\\nMYR,MSP,27\\nMYR,PHL,1\\nOAJ,ATL,1178\\nOAJ,CLT,6\\nOAK,ABQ,1004\\nOAK,ATL,88\\nOAK,AUS,236\\nOAK,BNA,363\\nOAK,BOI,667\\nOAK,BOS,518\\nOAK,BUR,5420\\nOAK,DEN,3101\\nOAK,DFW,725\\nOAK,FLL,13\\nOAK,GEG,726\\nOAK,HNL,121\\nOAK,HOU,711\\nOAK,IAD,841\\nOAK,IAH,721\\nOAK,JFK,1177\\nOAK,KOA,4\\nOAK,LAS,4642\\nOAK,LAX,7578\\nOAK,LGB,1632\\nOAK,MCI,684\\nOAK,MDW,1720\\nOAK,OGG,60\\nOAK,ONT,3701\\nOAK,ORD,59\\nOAK,PDX,2482\\nOAK,PHX,4213\\nOAK,RNO,1331\\nOAK,SAN,5851\\nOAK,SEA,5047\\nOAK,SLC,3146\\nOAK,SMF,1\\nOAK,SNA,3645\\nOAK,TUS,307\\nOGG,ANC,27\\nOGG,DEN,163\\nOGG,DFW,366\\nOGG,HNL,12383\\nOGG,ITO,366\\nOGG,KOA,1379\\nOGG,LAX,2058\\nOGG,LIH,60\\nOGG,OAK,60\\nOGG,PDX,366\\nOGG,PHX,586\\nOGG,SAN,280\\nOGG,SEA,533\\nOGG,SFO,932\\nOGG,SLC,261\\nOGG,SMF,60\\nOGG,SNA,60\\nOKC,ABQ,231\\nOKC,ATL,1884\\nOKC,AUS,87\\nOKC,BMI,1\\nOKC,BWI,366\\nOKC,CLE,21\\nOKC,CVG,769\\nOKC,DAL,1687\\nOKC,DEN,2848\\nOKC,DFW,2845\\nOKC,DTW,604\\nOKC,EWR,361\\nOKC,HOU,1353\\nOKC,IAD,5\\nOKC,IAH,2635\\nOKC,LAS,471\\nOKC,LAX,500\\nOKC,MCI,1144\\nOKC,MCO,9\\nOKC,MEM,883\\nOKC,MSP,617\\nOKC,ONT,231\\nOKC,ORD,2038\\nOKC,PHX,1513\\nOKC,SAN,302\\nOKC,SAT,89\\nOKC,SLC,743\\nOKC,SMF,226\\nOKC,STL,688\\nOKC,TUL,1\\nOMA,ABQ,1\\nOMA,ATL,1731\\nOMA,ATW,1\\nOMA,BHM,1\\nOMA,CLE,428\\nOMA,COS,1\\nOMA,CVG,1002\\nOMA,DEN,3231\\nOMA,DFW,1748\\nOMA,DSM,1\\nOMA,DTW,1324\\nOMA,EWR,1080\\nOMA,GRB,1\\nOMA,IAH,2099\\nOMA,LAS,1083\\nOMA,LNK,1\\nOMA,MCO,9\\nOMA,MDW,2045\\nOMA,MEM,763\\nOMA,MKE,701\\nOMA,MSP,1163\\nOMA,ONT,304\\nOMA,ORD,4045\\nOMA,PHX,2067\\nOMA,SAN,314\\nOMA,SLC,609\\nOMA,STL,1033\\nOMA,TUS,221\\nOME,ANC,729\\nOME,OTZ,361\\nONT,ABQ,443\\nONT,ATL,797\\nONT,AUS,304\\nONT,BNA,365\\nONT,BOI,471\\nONT,COS,458\\nONT,DEN,1544\\nONT,DFW,1742\\nONT,ELP,382\\nONT,FAT,238\\nONT,GEG,440\\nONT,GJT,1\\nONT,IAH,1093\\nONT,JFK,248\\nONT,LAS,3494\\nONT,LAX,24\\nONT,MCI,302\\nONT,MRY,246\\nONT,OAK,3697\\nONT,OKC,231\\nONT,OMA,303\\nONT,PDX,60\\nONT,PHX,5628\\nONT,RNO,273\\nONT,SAN,2\\nONT,SAT,439\\nONT,SEA,1343\\nONT,SFO,1599\\nONT,SJC,2742\\nONT,SLC,1658\\nONT,SMF,3803\\nONT,TUL,228\\nONT,TUS,474\\nORD,ABE,1426\\nORD,ABQ,754\\nORD,ALB,1632\\nORD,ANC,561\\nORD,ASE,310\\nORD,ATL,7449\\nORD,ATW,2288\\nORD,AUS,2515\\nORD,AVP,718\\nORD,AZO,2350\\nORD,BDL,3335\\nORD,BHM,1511\\nORD,BIL,105\\nORD,BMI,2005\\nORD,BNA,3905\\nORD,BOI,786\\nORD,BOS,7133\\nORD,BTR,215\\nORD,BTV,738\\nORD,BUF,3437\\nORD,BWI,3552\\nORD,BZN,336\\nORD,CAE,1373\\nORD,CAK,1047\\nORD,CHA,767\\nORD,CHS,1337\\nORD,CID,4154\\nORD,CLE,4567\\nORD,CLT,6013\\nORD,CMH,4664\\nORD,CMI,2404\\nORD,COS,1525\\nORD,CPR,134\\nORD,CRW,708\\nORD,CVG,5993\\nORD,CWA,1715\\nORD,DAL,1007\\nORD,DAY,1786\\nORD,DBQ,1347\\nORD,DCA,7430\\nORD,DEN,5773\\nORD,DFW,8093\\nORD,DSM,4823\\nORD,DTW,7602\\nORD,EGE,197\\nORD,ELP,670\\nORD,EVV,1944\\nORD,EWR,7174\\nORD,FAR,1344\\nORD,FCA,104\\nORD,FLL,1583\\nORD,FNT,1265\\nORD,FSD,1724\\nORD,FWA,2956\\nORD,GEG,327\\nORD,GJT,13\\nORD,GPT,214\\nORD,GRB,3631\\nORD,GRR,3699\\nORD,GSO,870\\nORD,GSP,1302\\nORD,GTF,23\\nORD,GUC,2\\nORD,HDN,200\\nORD,HNL,641\\nORD,HPN,3624\\nORD,HSV,547\\nORD,IAD,2891\\nORD,IAH,5463\\nORD,ICT,3001\\nORD,IND,4103\\nORD,JAC,463\\nORD,JAN,211\\nORD,JAX,1697\\nORD,JFK,3684\\nORD,LAN,1409\\nORD,LAS,5257\\nORD,LAX,6974\\nORD,LEX,1965\\nORD,LGA,10770\\nORD,LGB,604\\nORD,LIT,1806\\nORD,LNK,1407\\nORD,LSE,1572\\nORD,MBS,1339\\nORD,MCI,3900\\nORD,MCO,3798\\nORD,MDT,1552\\nORD,MEM,3782\\nORD,MHT,1144\\nORD,MIA,3343\\nORD,MKE,3400\\nORD,MLI,2579\\nORD,MOB,210\\nORD,MQT,313\\nORD,MSN,4878\\nORD,MSO,105\\nORD,MSP,9688\\nORD,MSY,1502\\nORD,MTJ,30\\nORD,OAK,59\\nORD,OGG,221\\nORD,OKC,1937\\nORD,OMA,4097\\nORD,ORF,1188\\nORD,PBI,656\\nORD,PDX,2394\\nORD,PHL,6733\\nORD,PHX,5124\\nORD,PIA,3256\\nORD,PIT,3611\\nORD,PNS,292\\nORD,PSP,451\\nORD,PVD,1789\\nORD,PWM,343\\nORD,RAP,218\\nORD,RDU,3140\\nORD,RIC,1884\\nORD,RNO,365\\nORD,ROA,555\\nORD,ROC,2550\\nORD,RST,2366\\nORD,RSW,764\\nORD,SAN,3308\\nORD,SAT,1713\\nORD,SAV,1132\\nORD,SBN,2266\\nORD,SDF,3496\\nORD,SEA,4802\\nORD,SFO,5524\\nORD,SGF,2306\\nORD,SHV,211\\nORD,SJC,1333\\nORD,SJU,1036\\nORD,SLC,2860\\nORD,SMF,1077\\nORD,SNA,2580\\nORD,SPI,1085\\nORD,STL,4558\\nORD,STT,80\\nORD,SYR,2314\\nORD,TOL,1337\\nORD,TPA,2443\\nORD,TUL,2040\\nORD,TUS,865\\nORD,TVC,2435\\nORD,TYS,2017\\nORD,VPS,236\\nORD,XNA,3116\\nORF,ATL,2784\\nORF,BDL,1\\nORF,BNA,236\\nORF,BOI,1\\nORF,BOS,197\\nORF,BWI,1675\\nORF,CLE,2\\nORF,CLT,1836\\nORF,CVG,499\\nORF,DFW,1035\\nORF,DTW,968\\nORF,EWR,380\\nORF,IAD,1057\\nORF,IAH,969\\nORF,JAX,719\\nORF,JFK,277\\nORF,LAS,366\\nORF,MCO,753\\nORF,MDW,731\\nORF,MEM,240\\nORF,MIA,152\\nORF,MSP,123\\nORF,ORD,1089\\nORF,PBI,1\\nORF,SAV,1\\nORF,TPA,366\\nOTH,PDX,162\\nOTH,SFO,353\\nOTZ,ANC,361\\nOTZ,OME,725\\nOXR,LAX,1291\\nOXR,PSP,1\\nPBI,ATL,4262\\nPBI,BDL,373\\nPBI,BOS,1746\\nPBI,BWI,1353\\nPBI,CLE,383\\nPBI,CLT,1871\\nPBI,CMH,5\\nPBI,CVG,390\\nPBI,DCA,909\\nPBI,DEN,95\\nPBI,DFW,854\\nPBI,DTW,472\\nPBI,EWR,2770\\nPBI,HPN,1046\\nPBI,IAD,14\\nPBI,IAH,1389\\nPBI,ISP,1082\\nPBI,JFK,2531\\nPBI,LAS,62\\nPBI,LGA,1934\\nPBI,ORD,654\\nPBI,PHL,1899\\nPBI,PIT,4\\nPBI,SWF,359\\nPBI,TPA,1365\\nPDX,ABQ,366\\nPDX,ANC,576\\nPDX,ATL,1102\\nPDX,BOI,1038\\nPDX,BOS,366\\nPDX,BUR,60\\nPDX,CLT,136\\nPDX,CVG,311\\nPDX,DEN,4654\\nPDX,DFW,1577\\nPDX,DTW,250\\nPDX,EUG,1551\\nPDX,EWR,692\\nPDX,GEG,1311\\nPDX,HNL,732\\nPDX,IAD,367\\nPDX,IAH,1265\\nPDX,JFK,680\\nPDX,LAS,3564\\nPDX,LAX,3517\\nPDX,LGB,141\\nPDX,LMT,162\\nPDX,MCI,366\\nPDX,MCO,236\\nPDX,MDW,894\\nPDX,MFR,1543\\nPDX,MSN,1\\nPDX,MSP,1502\\nPDX,OAK,2471\\nPDX,OGG,366\\nPDX,ONT,60\\nPDX,ORD,2184\\nPDX,OTH,162\\nPDX,PHL,379\\nPDX,PHX,3946\\nPDX,PSP,168\\nPDX,RDM,1621\\nPDX,RNO,1150\\nPDX,SAN,1352\\nPDX,SEA,2449\\nPDX,SFO,3088\\nPDX,SJC,2322\\nPDX,SLC,3277\\nPDX,SMF,2484\\nPDX,SNA,1421\\nPFN,ATL,2548\\nPFN,CVG,36\\nPFN,MCO,196\\nPFN,MEM,1095\\nPHF,ATL,4157\\nPHF,BOS,716\\nPHF,FLL,310\\nPHF,LGA,767\\nPHF,MCO,361\\nPHF,TPA,95\\nPHL,ALB,448\\nPHL,ATL,6918\\nPHL,ATW,1\\nPHL,AUS,290\\nPHL,AVP,1\\nPHL,BDL,521\\nPHL,BNA,981\\nPHL,BOS,6384\\nPHL,BUF,365\\nPHL,BWI,660\\nPHL,CLE,674\\nPHL,CLT,3545\\nPHL,CMH,994\\nPHL,CVG,1583\\nPHL,DCA,584\\nPHL,DEN,2961\\nPHL,DFW,3485\\nPHL,DTW,2760\\nPHL,EWR,19\\nPHL,FLL,2977\\nPHL,GRR,1\\nPHL,HOU,687\\nPHL,IAD,607\\nPHL,IAH,1732\\nPHL,ICT,1\\nPHL,IND,853\\nPHL,JAX,1665\\nPHL,JFK,675\\nPHL,LAS,2836\\nPHL,LAX,2240\\nPHL,LGA,4\\nPHL,MCO,7032\\nPHL,MDW,2652\\nPHL,MEM,1032\\nPHL,MHT,2357\\nPHL,MIA,2206\\nPHL,MKE,774\\nPHL,MSP,1749\\nPHL,MSY,1107\\nPHL,ORD,7078\\nPHL,ORF,292\\nPHL,PBI,1903\\nPHL,PDX,380\\nPHL,PHX,2885\\nPHL,PIT,3188\\nPHL,PVD,2550\\nPHL,RDU,3347\\nPHL,RIC,387\\nPHL,RSW,1223\\nPHL,SAN,817\\nPHL,SAT,290\\nPHL,SDF,2\\nPHL,SEA,708\\nPHL,SFO,2237\\nPHL,SJU,1474\\nPHL,SLC,670\\nPHL,SMF,207\\nPHL,STL,578\\nPHL,STT,198\\nPHL,SYR,334\\nPHL,TPA,3390\\nPHX,ABQ,5234\\nPHX,ANC,366\\nPHX,ASE,109\\nPHX,ATL,4607\\nPHX,AUS,2786\\nPHX,BDL,334\\nPHX,BFL,1194\\nPHX,BHM,367\\nPHX,BNA,1123\\nPHX,BOI,679\\nPHX,BOS,1067\\nPHX,BUF,365\\nPHX,BUR,4754\\nPHX,BWI,2103\\nPHX,CLD,43\\nPHX,CLE,1115\\nPHX,CLT,2183\\nPHX,CMH,1096\\nPHX,COS,1392\\nPHX,CVG,463\\nPHX,DCA,1080\\nPHX,DEN,8402\\nPHX,DFW,5387\\nPHX,DRO,811\\nPHX,DSM,749\\nPHX,DTW,2929\\nPHX,ELP,4155\\nPHX,EUG,371\\nPHX,EWR,2579\\nPHX,FAT,1618\\nPHX,FLG,1871\\nPHX,FLL,620\\nPHX,GEG,777\\nPHX,GJT,1037\\nPHX,HNL,914\\nPHX,HOU,1677\\nPHX,IAD,731\\nPHX,IAH,4197\\nPHX,ICT,692\\nPHX,IND,1458\\nPHX,JFK,2256\\nPHX,KOA,330\\nPHX,LAS,10337\\nPHX,LAX,9992\\nPHX,LGB,1624\\nPHX,LIH,280\\nPHX,LIT,235\\nPHX,MCI,2140\\nPHX,MCO,1039\\nPHX,MDW,2795\\nPHX,MEM,816\\nPHX,MFR,303\\nPHX,MHT,365\\nPHX,MIA,366\\nPHX,MKE,866\\nPHX,MRY,911\\nPHX,MSP,3508\\nPHX,MSY,365\\nPHX,OAK,4150\\nPHX,OGG,586\\nPHX,OKC,1516\\nPHX,OMA,2060\\nPHX,ONT,5627\\nPHX,ORD,5130\\nPHX,PDX,3948\\nPHX,PHL,2883\\nPHX,PIT,1086\\nPHX,PSP,1752\\nPHX,PVD,365\\nPHX,RDU,755\\nPHX,RNO,2776\\nPHX,SAN,7609\\nPHX,SAT,2783\\nPHX,SBA,1618\\nPHX,SBP,990\\nPHX,SDF,365\\nPHX,SEA,5072\\nPHX,SFO,4884\\nPHX,SJC,4050\\nPHX,SLC,7177\\nPHX,SMF,4134\\nPHX,SNA,5497\\nPHX,STL,2755\\nPHX,TEX,194\\nPHX,TPA,1022\\nPHX,TUL,1015\\nPHX,TUS,3684\\nPHX,YUM,1962\\nPIA,ATL,623\\nPIA,DEN,362\\nPIA,DFW,634\\nPIA,DTW,701\\nPIA,HPN,1\\nPIA,LNK,1\\nPIA,ORD,3259\\nPIH,SLC,1659\\nPIR,JAX,2\\nPIR,MSP,3\\nPIT,ATL,4557\\nPIT,BOS,616\\nPIT,BWI,1043\\nPIT,CLT,2376\\nPIT,CVG,1288\\nPIT,DCA,7\\nPIT,DEN,859\\nPIT,DFW,2140\\nPIT,DTW,1511\\nPIT,EWR,671\\nPIT,FLL,507\\nPIT,GRB,1\\nPIT,IAD,780\\nPIT,IAH,1719\\nPIT,JFK,2249\\nPIT,LAS,1411\\nPIT,LAX,373\\nPIT,LGA,936\\nPIT,MCI,266\\nPIT,MCO,2470\\nPIT,MDW,2070\\nPIT,MEM,1005\\nPIT,MIA,174\\nPIT,MKE,1083\\nPIT,MSP,1050\\nPIT,ORD,3521\\nPIT,PBI,4\\nPIT,PHL,4169\\nPIT,PHX,1086\\nPIT,RSW,181\\nPIT,SFO,369\\nPIT,SJU,1\\nPIT,SLC,218\\nPIT,TPA,1089\\nPLN,DCA,1\\nPLN,DTW,263\\nPMD,SFO,728\\nPNS,ATL,4430\\nPNS,CLT,372\\nPNS,DFW,2024\\nPNS,FLL,145\\nPNS,IAH,635\\nPNS,MCO,366\\nPNS,MEM,1097\\nPNS,ORD,293\\nPNS,TPA,135\\nPSC,DEN,940\\nPSC,SLC,1600\\nPSC,TWF,1\\nPSE,EWR,17\\nPSE,FLL,45\\nPSE,JFK,346\\nPSE,MCO,347\\nPSG,JNU,364\\nPSG,WRG,363\\nPSP,DEN,998\\nPSP,DFW,1096\\nPSP,FAT,1\\nPSP,GJT,1\\nPSP,IAH,216\\nPSP,LAS,1281\\nPSP,LAX,2597\\nPSP,MSP,214\\nPSP,ONT,1\\nPSP,ORD,452\\nPSP,PDX,169\\nPSP,PHX,1752\\nPSP,SEA,664\\nPSP,SFO,1638\\nPSP,SLC,898\\nPSP,TWF,1\\nPUB,COS,2\\nPVD,ATL,1390\\nPVD,BDL,1\\nPVD,BNA,366\\nPVD,BOS,3\\nPVD,BWI,3981\\nPVD,CLE,360\\nPVD,CLT,1439\\nPVD,CVG,958\\nPVD,DCA,672\\nPVD,DTW,1105\\nPVD,EWR,1102\\nPVD,FLL,425\\nPVD,IAD,511\\nPVD,JFK,604\\nPVD,LAS,364\\nPVD,MCO,2148\\nPVD,MDW,1373\\nPVD,MSP,6\\nPVD,ORD,1792\\nPVD,PHL,2563\\nPVD,PHX,365\\nPVD,TPA,981\\nPWM,ATL,904\\nPWM,BOS,2\\nPWM,BWI,995\\nPWM,CLE,306\\nPWM,CLT,277\\nPWM,CVG,563\\nPWM,DTW,67\\nPWM,EWR,741\\nPWM,IAD,407\\nPWM,JFK,1818\\nPWM,MCO,459\\nPWM,MSP,42\\nPWM,ORD,316\\nRAP,DEN,2309\\nRAP,MSP,877\\nRAP,ORD,217\\nRAP,SLC,757\\nRAP,TWF,1\\nRDD,SBA,1\\nRDD,SFO,1680\\nRDD,SMF,1\\nRDM,DEN,12\\nRDM,IDA,1\\nRDM,PDX,1619\\nRDM,SFO,1083\\nRDM,SLC,719\\nRDU,ATL,5418\\nRDU,AUS,231\\nRDU,BDL,1149\\nRDU,BHM,160\\nRDU,BNA,1617\\nRDU,BOS,3870\\nRDU,BWI,2078\\nRDU,CLE,307\\nRDU,CLT,2339\\nRDU,CMH,500\\nRDU,CVG,1317\\nRDU,DCA,2772\\nRDU,DEN,470\\nRDU,DFW,2347\\nRDU,DTW,1368\\nRDU,EWR,2394\\nRDU,FLL,696\\nRDU,GRB,1\\nRDU,IAD,1722\\nRDU,IAH,1995\\nRDU,IND,673\\nRDU,JAX,595\\nRDU,JFK,3989\\nRDU,LAS,715\\nRDU,LAX,8\\nRDU,LGA,4135\\nRDU,MCI,652\\nRDU,MCO,1738\\nRDU,MDW,1360\\nRDU,MEM,1062\\nRDU,MIA,1098\\nRDU,MKE,490\\nRDU,MSP,726\\nRDU,MSY,474\\nRDU,ORD,3094\\nRDU,PHL,3363\\nRDU,PHX,755\\nRDU,SAT,229\\nRDU,SDF,426\\nRDU,SLC,327\\nRDU,STL,358\\nRDU,TPA,1057\\nRDU,XNA,104\\nRFD,DEN,290\\nRHI,MSP,221\\nRIC,ATL,4536\\nRIC,BOS,688\\nRIC,CLE,905\\nRIC,CLT,1800\\nRIC,CVG,779\\nRIC,DCA,2\\nRIC,DFW,1041\\nRIC,DTW,700\\nRIC,EWR,1576\\nRIC,FLL,366\\nRIC,IAH,971\\nRIC,JAX,1\\nRIC,JFK,1703\\nRIC,LGA,1337\\nRIC,MCO,515\\nRIC,MEM,292\\nRIC,MIA,152\\nRIC,MSP,340\\nRIC,ORD,1884\\nRIC,ORF,1\\nRIC,PHL,387\\nRIC,RDU,1\\nRKS,DEN,545\\nRKS,GCC,58\\nRKS,SLC,351\\nRNO,ATL,169\\nRNO,BOI,1025\\nRNO,BUR,1\\nRNO,DEN,1353\\nRNO,DFW,1095\\nRNO,GEG,214\\nRNO,IAH,428\\nRNO,LAS,4508\\nRNO,LAX,1905\\nRNO,LGB,464\\nRNO,MDW,365\\nRNO,OAK,1322\\nRNO,ONT,273\\nRNO,ORD,365\\nRNO,PDX,1144\\nRNO,PHX,2779\\nRNO,PIH,1\\nRNO,SAN,730\\nRNO,SEA,799\\nRNO,SFO,1886\\nRNO,SJC,1364\\nRNO,SLC,1814\\nRNO,SNA,60\\nRNO,TUS,222\\nROA,ATL,1731\\nROA,BWI,1\\nROA,CLT,1\\nROA,CVG,2\\nROA,DTW,748\\nROA,IAD,601\\nROA,MSN,1\\nROA,ORD,635\\nROC,ATL,2488\\nROC,BOS,1\\nROC,BWI,865\\nROC,CLE,921\\nROC,CLT,412\\nROC,CVG,724\\nROC,DFW,177\\nROC,DTW,864\\nROC,EWR,933\\nROC,FLL,114\\nROC,IAD,560\\nROC,JFK,2435\\nROC,LAS,84\\nROC,MCO,700\\nROC,MSP,136\\nROC,ORD,2484\\nROC,TPA,366\\nROW,DFW,961\\nRST,DTW,171\\nRST,MSP,817\\nRST,ORD,2365\\nRSW,ATL,4196\\nRSW,BDL,134\\nRSW,BOS,1716\\nRSW,BUF,376\\nRSW,BWI,1335\\nRSW,CAK,138\\nRSW,CLE,594\\nRSW,CLT,1765\\nRSW,CMH,137\\nRSW,CVG,539\\nRSW,DCA,708\\nRSW,DEN,222\\nRSW,DFW,919\\nRSW,DTW,1144\\nRSW,EWR,1874\\nRSW,FNT,149\\nRSW,HPN,520\\nRSW,IAD,14\\nRSW,IAH,1066\\nRSW,IND,1057\\nRSW,ISP,374\\nRSW,JFK,1890\\nRSW,LGA,237\\nRSW,MCI,5\\nRSW,MCO,1414\\nRSW,MDW,1096\\nRSW,MEM,58\\nRSW,MIA,2\\nRSW,MKE,225\\nRSW,MSP,647\\nRSW,ORD,763\\nRSW,PBI,1\\nRSW,PHL,1223\\nRSW,PIT,181\\nRSW,STL,417\\nSAN,ABQ,1054\\nSAN,ATL,2855\\nSAN,AUS,715\\nSAN,BFL,224\\nSAN,BNA,727\\nSAN,BOI,475\\nSAN,BOS,610\\nSAN,BWI,729\\nSAN,CLE,87\\nSAN,CLT,704\\nSAN,COS,476\\nSAN,CVG,573\\nSAN,DEN,5263\\nSAN,DFW,3528\\nSAN,DTW,580\\nSAN,ELP,366\\nSAN,EWR,1180\\nSAN,FAT,582\\nSAN,GEG,452\\nSAN,HNL,393\\nSAN,HOU,422\\nSAN,IAD,1331\\nSAN,IAH,2388\\nSAN,JFK,1630\\nSAN,KOA,23\\nSAN,LAS,5902\\nSAN,LAX,11224\\nSAN,LIH,31\\nSAN,MCI,686\\nSAN,MCO,13\\nSAN,MDW,1708\\nSAN,MEM,109\\nSAN,MKE,106\\nSAN,MRY,446\\nSAN,MSP,1333\\nSAN,OAK,5831\\nSAN,OGG,279\\nSAN,OKC,305\\nSAN,OMA,317\\nSAN,ONT,3\\nSAN,ORD,2948\\nSAN,PDX,1352\\nSAN,PHL,817\\nSAN,PHX,7581\\nSAN,RNO,729\\nSAN,SAT,643\\nSAN,SEA,2831\\nSAN,SFO,6769\\nSAN,SJC,5286\\nSAN,SLC,2549\\nSAN,SMF,4603\\nSAN,STL,366\\nSAN,TUL,228\\nSAN,TUS,1413\\nSAT,ABQ,426\\nSAT,AMA,1\\nSAT,ATL,3241\\nSAT,AUS,2\\nSAT,BNA,676\\nSAT,BWI,730\\nSAT,CLE,233\\nSAT,CLT,658\\nSAT,CVG,882\\nSAT,DAL,4999\\nSAT,DEN,2510\\nSAT,DFW,5413\\nSAT,DTW,642\\nSAT,ELP,1332\\nSAT,EWR,954\\nSAT,HOU,2582\\nSAT,HRL,656\\nSAT,IAD,149\\nSAT,IAH,3755\\nSAT,IND,236\\nSAT,LAS,1575\\nSAT,LAX,1783\\nSAT,MCI,578\\nSAT,MCO,744\\nSAT,MDW,710\\nSAT,MEM,788\\nSAT,MGM,1\\nSAT,MSP,191\\nSAT,MSY,430\\nSAT,OKC,87\\nSAT,ONT,441\\nSAT,ORD,1815\\nSAT,PHL,290\\nSAT,PHX,2767\\nSAT,RDU,228\\nSAT,SAN,646\\nSAT,SFO,366\\nSAT,SLC,587\\nSAT,SMF,226\\nSAT,STL,246\\nSAT,TPA,365\\nSAT,TUL,89\\nSAT,TUS,240\\nSAV,ATL,3888\\nSAV,BOS,89\\nSAV,CHS,1\\nSAV,CLE,321\\nSAV,CLT,1433\\nSAV,CVG,731\\nSAV,DFW,795\\nSAV,DTW,509\\nSAV,EWR,1127\\nSAV,IAD,1007\\nSAV,IAH,949\\nSAV,JAX,3\\nSAV,LGA,996\\nSAV,MEM,764\\nSAV,MSP,27\\nSAV,ORD,1134\\nSBA,DEN,840\\nSBA,DFW,366\\nSBA,LAS,305\\nSBA,LAX,4498\\nSBA,MRY,1\\nSBA,PHX,1617\\nSBA,SBP,1\\nSBA,SFO,3047\\nSBA,SJC,1208\\nSBA,SLC,685\\nSBN,ATL,1039\\nSBN,CVG,12\\nSBN,DTW,1638\\nSBN,MSP,365\\nSBN,ORD,2265\\nSBP,FAT,1\\nSBP,LAS,128\\nSBP,LAX,2682\\nSBP,MFR,1\\nSBP,MRY,2\\nSBP,PHX,990\\nSBP,SFO,1758\\nSBP,SLC,284\\nSCC,ANC,363\\nSCC,BRW,364\\nSCE,ATL,122\\nSCE,CVG,23\\nSCE,DTW,500\\nSDF,ATL,2756\\nSDF,BHM,674\\nSDF,BOS,81\\nSDF,BWI,1483\\nSDF,CLE,728\\nSDF,CLT,795\\nSDF,CVG,639\\nSDF,DEN,384\\nSDF,DFW,1386\\nSDF,DTW,1011\\nSDF,EWR,1037\\nSDF,IAH,361\\nSDF,LAS,365\\nSDF,LGA,572\\nSDF,MCO,533\\nSDF,MDW,1685\\nSDF,MEM,787\\nSDF,MIA,366\\nSDF,MKE,257\\nSDF,MSP,780\\nSDF,ORD,3497\\nSDF,PHL,2\\nSDF,PHX,365\\nSDF,RDU,426\\nSDF,SLC,3\\nSDF,SPI,1\\nSDF,STL,995\\nSDF,TPA,489\\nSEA,ABQ,708\\nSEA,ANC,6256\\nSEA,ATL,2571\\nSEA,AUS,147\\nSEA,BNA,364\\nSEA,BOI,1070\\nSEA,BOS,980\\nSEA,BUR,1390\\nSEA,BWI,242\\nSEA,CLE,229\\nSEA,CLT,480\\nSEA,CVG,791\\nSEA,DCA,727\\nSEA,DEN,6623\\nSEA,DFW,3917\\nSEA,DTW,1172\\nSEA,EWR,2026\\nSEA,FAI,956\\nSEA,GEG,4346\\nSEA,HNL,1638\\nSEA,IAD,1097\\nSEA,IAH,2395\\nSEA,IND,75\\nSEA,JFK,1852\\nSEA,JNU,1334\\nSEA,KOA,45\\nSEA,KTN,1289\\nSEA,LAS,5051\\nSEA,LAX,6865\\nSEA,LGB,1500\\nSEA,LIH,366\\nSEA,MCI,365\\nSEA,MCO,731\\nSEA,MDW,1361\\nSEA,MEM,350\\nSEA,MIA,366\\nSEA,MKE,121\\nSEA,MSP,2474\\nSEA,OAK,5095\\nSEA,OGG,900\\nSEA,ONT,1343\\nSEA,ORD,4608\\nSEA,PDX,2449\\nSEA,PHL,707\\nSEA,PHX,5062\\nSEA,PSP,667\\nSEA,RNO,802\\nSEA,SAN,2833\\nSEA,SFO,5409\\nSEA,SIT,104\\nSEA,SJC,3534\\nSEA,SLC,3774\\nSEA,SMF,3642\\nSEA,SNA,2860\\nSEA,STL,567\\nSEA,TUS,443\\nSFO,ABQ,529\\nSFO,ACV,2337\\nSFO,ANC,182\\nSFO,ASE,59\\nSFO,ATL,3098\\nSFO,AUS,609\\nSFO,BFL,941\\nSFO,BOI,1766\\nSFO,BOS,2594\\nSFO,BUR,1962\\nSFO,BWI,366\\nSFO,BZN,28\\nSFO,CEC,705\\nSFO,CIC,1392\\nSFO,CLE,466\\nSFO,CLT,1429\\nSFO,COS,364\\nSFO,CVG,782\\nSFO,DEN,5374\\nSFO,DFW,3487\\nSFO,DTW,1160\\nSFO,EUG,1923\\nSFO,EWR,3137\\nSFO,FAT,2410\\nSFO,FCA,12\\nSFO,GJT,2\\nSFO,HNL,2359\\nSFO,IAD,2732\\nSFO,IAH,2660\\nSFO,IDA,1\\nSFO,IND,173\\nSFO,JFK,6971\\nSFO,KOA,713\\nSFO,LAS,7007\\nSFO,LAX,13788\\nSFO,LGB,209\\nSFO,LIH,483\\nSFO,LMT,348\\nSFO,MCO,366\\nSFO,MDW,1092\\nSFO,MEM,208\\nSFO,MFR,2570\\nSFO,MIA,1098\\nSFO,MKE,115\\nSFO,MOD,1665\\nSFO,MRY,2410\\nSFO,MSO,12\\nSFO,MSP,1984\\nSFO,OGG,932\\nSFO,ONT,1600\\nSFO,ORD,5746\\nSFO,OTH,354\\nSFO,PDX,2972\\nSFO,PHL,2554\\nSFO,PHX,4870\\nSFO,PIT,369\\nSFO,PMD,728\\nSFO,PSP,1636\\nSFO,RDD,1683\\nSFO,RDM,1082\\nSFO,RNO,1885\\nSFO,SAN,6312\\nSFO,SAT,366\\nSFO,SBA,2991\\nSFO,SBP,1751\\nSFO,SEA,5414\\nSFO,SJC,1\\nSFO,SLC,4064\\nSFO,SMF,2301\\nSFO,SMX,2\\nSFO,SNA,3955\\nSFO,STL,574\\nSFO,TUS,365\\nSFO,TWF,2\\nSGF,ATL,1170\\nSGF,BNA,2\\nSGF,CVG,247\\nSGF,DEN,777\\nSGF,DFW,3228\\nSGF,DTW,363\\nSGF,FSD,1\\nSGF,MEM,1079\\nSGF,MSP,360\\nSGF,ORD,2492\\nSGF,STL,368\\nSGU,CDC,1\\nSGU,LAX,721\\nSGU,PIH,1\\nSGU,PSP,1\\nSGU,SLC,2594\\nSGU,TWF,1\\nSHV,ATL,1817\\nSHV,DFW,3579\\nSHV,DTW,360\\nSHV,IAH,1018\\nSHV,MEM,1094\\nSHV,ORD,211\\nSIT,JNU,740\\nSIT,KTN,365\\nSIT,SEA,227\\nSJC,ATL,634\\nSJC,AUS,968\\nSJC,BFL,1\\nSJC,BOS,256\\nSJC,BUR,3380\\nSJC,DEN,3670\\nSJC,DFW,2264\\nSJC,EWR,200\\nSJC,FAT,1\\nSJC,HNL,366\\nSJC,IAD,245\\nSJC,IAH,994\\nSJC,JFK,481\\nSJC,LAS,4176\\nSJC,LAX,8939\\nSJC,LGB,660\\nSJC,MDW,659\\nSJC,MSP,695\\nSJC,ONT,2719\\nSJC,ORD,1348\\nSJC,PDX,2322\\nSJC,PHX,4027\\nSJC,RNO,1371\\nSJC,SAN,5254\\nSJC,SBA,1206\\nSJC,SEA,3543\\nSJC,SFO,1\\nSJC,SLC,1372\\nSJC,SMX,1\\nSJC,SNA,5383\\nSJT,DFW,1316\\nSJU,ATL,1872\\nSJU,BDL,366\\nSJU,BOS,1273\\nSJU,BWI,318\\nSJU,CLE,43\\nSJU,CLT,795\\nSJU,DFW,986\\nSJU,DTW,172\\nSJU,EWR,1582\\nSJU,FLL,764\\nSJU,IAD,844\\nSJU,IAH,730\\nSJU,JFK,3558\\nSJU,LAX,144\\nSJU,MCO,2415\\nSJU,MEM,26\\nSJU,MIA,2560\\nSJU,MSP,26\\nSJU,ORD,1115\\nSJU,PHL,1475\\nSJU,PIT,1\\nSJU,STT,245\\nSJU,TPA,366\\nSLC,ABQ,2293\\nSLC,ACV,389\\nSLC,ANC,478\\nSLC,ASE,443\\nSLC,ATL,2866\\nSLC,AUS,550\\nSLC,BFL,371\\nSLC,BHM,5\\nSLC,BIL,1953\\nSLC,BLI,120\\nSLC,BNA,114\\nSLC,BOI,3370\\nSLC,BOS,707\\nSLC,BTM,704\\nSLC,BUR,1674\\nSLC,BWI,728\\nSLC,BZN,2029\\nSLC,CDC,666\\nSLC,CLE,348\\nSLC,CLT,211\\nSLC,CMH,290\\nSLC,COD,706\\nSLC,COS,1073\\nSLC,CPR,1006\\nSLC,CVG,1620\\nSLC,CYS,1\\nSLC,DCA,365\\nSLC,DEN,9269\\nSLC,DFW,3149\\nSLC,DRO,386\\nSLC,DSM,3\\nSLC,DTW,573\\nSLC,EKO,1579\\nSLC,ELP,120\\nSLC,EUG,714\\nSLC,EWR,812\\nSLC,FAI,80\\nSLC,FAR,95\\nSLC,FAT,849\\nSLC,FCA,1742\\nSLC,FLL,242\\nSLC,FSD,7\\nSLC,GCC,293\\nSLC,GEG,1947\\nSLC,GJT,1062\\nSLC,GTF,1050\\nSLC,GUC,14\\nSLC,HDN,373\\nSLC,HLN,1215\\nSLC,HNL,366\\nSLC,IAD,523\\nSLC,IAH,2698\\nSLC,IDA,1788\\nSLC,JAC,1485\\nSLC,JFK,1784\\nSLC,LAS,5373\\nSLC,LAX,5178\\nSLC,LBB,1\\nSLC,LGA,24\\nSLC,LGB,2499\\nSLC,LIT,18\\nSLC,LWS,652\\nSLC,MCI,1051\\nSLC,MCO,687\\nSLC,MDW,997\\nSLC,MFR,726\\nSLC,MKE,5\\nSLC,MRY,6\\nSLC,MSO,1845\\nSLC,MSP,2191\\nSLC,MSY,328\\nSLC,MTJ,229\\nSLC,OAK,3134\\nSLC,OGD,1\\nSLC,OGG,261\\nSLC,OKC,740\\nSLC,OMA,605\\nSLC,ONT,1661\\nSLC,ORD,2863\\nSLC,PDX,3289\\nSLC,PHL,671\\nSLC,PHX,7168\\nSLC,PIH,1660\\nSLC,PIT,217\\nSLC,PSC,1602\\nSLC,PSP,901\\nSLC,RAP,757\\nSLC,RDM,720\\nSLC,RDU,328\\nSLC,RKS,349\\nSLC,RNO,1817\\nSLC,SAN,2548\\nSLC,SAT,587\\nSLC,SBA,688\\nSLC,SBP,285\\nSLC,SDF,2\\nSLC,SEA,3771\\nSLC,SFO,3705\\nSLC,SGF,1\\nSLC,SGU,2594\\nSLC,SJC,1372\\nSLC,SLE,484\\nSLC,SMF,1660\\nSLC,SNA,2016\\nSLC,STL,1386\\nSLC,SUN,2903\\nSLC,TPA,329\\nSLC,TUL,602\\nSLC,TUS,1485\\nSLC,TWF,1772\\nSLC,WYS,264\\nSLC,XNA,4\\nSLC,YKM,338\\nSLC,YUM,440\\nSLE,SLC,484\\nSLE,TWF,2\\nSMF,ABQ,466\\nSMF,ACV,616\\nSMF,ATL,682\\nSMF,BFL,229\\nSMF,BUR,3466\\nSMF,CLT,76\\nSMF,COS,426\\nSMF,DEN,3327\\nSMF,DFW,1347\\nSMF,GEG,371\\nSMF,HNL,366\\nSMF,IAD,366\\nSMF,IAH,1085\\nSMF,JFK,342\\nSMF,LAS,4064\\nSMF,LAX,5717\\nSMF,LGB,729\\nSMF,MCI,306\\nSMF,MDW,683\\nSMF,MSP,810\\nSMF,OGG,59\\nSMF,OKC,229\\nSMF,ONT,3814\\nSMF,ORD,1077\\nSMF,PDX,2482\\nSMF,PHL,207\\nSMF,PHX,4115\\nSMF,RDD,1\\nSMF,SAN,4573\\nSMF,SAT,228\\nSMF,SBA,1\\nSMF,SEA,3638\\nSMF,SFO,2300\\nSMF,SLC,1660\\nSMF,SNA,2503\\nSMF,TUL,228\\nSMF,TUS,467\\nSMX,LAX,1681\\nSNA,ATL,1463\\nSNA,AUS,246\\nSNA,CVG,285\\nSNA,DEN,3326\\nSNA,DFW,3656\\nSNA,EWR,954\\nSNA,HNL,64\\nSNA,IAH,1826\\nSNA,KOA,36\\nSNA,LAS,4130\\nSNA,LAX,33\\nSNA,LIH,23\\nSNA,MSP,1036\\nSNA,OAK,3652\\nSNA,OGG,60\\nSNA,ORD,2554\\nSNA,PDX,1418\\nSNA,PHX,5477\\nSNA,RNO,60\\nSNA,SAN,1\\nSNA,SEA,2862\\nSNA,SFO,3994\\nSNA,SJC,5401\\nSNA,SLC,2015\\nSNA,SMF,2498\\nSNA,STL,306\\nSPI,IAD,142\\nSPI,ORD,1083\\nSPS,DFW,1834\\nSRQ,ATL,3327\\nSRQ,BOS,23\\nSRQ,BWI,245\\nSRQ,CLE,118\\nSRQ,CLT,207\\nSRQ,CVG,445\\nSRQ,DCA,12\\nSRQ,DTW,219\\nSRQ,EWR,399\\nSRQ,IAH,70\\nSRQ,IND,155\\nSRQ,JFK,534\\nSRQ,LGA,74\\nSRQ,MDW,565\\nSRQ,STL,37\\nSRQ,TPA,2\\nSTL,ABQ,366\\nSTL,ATL,3956\\nSTL,AUS,95\\nSTL,BHM,366\\nSTL,BNA,258\\nSTL,BOS,865\\nSTL,BWI,1676\\nSTL,CLE,916\\nSTL,CLT,1093\\nSTL,CMH,674\\nSTL,CVG,346\\nSTL,DAL,2718\\nSTL,DCA,1296\\nSTL,DEN,2430\\nSTL,DFW,3597\\nSTL,DTW,2455\\nSTL,EWR,1725\\nSTL,FLL,472\\nSTL,HOU,1340\\nSTL,IAH,1003\\nSTL,JFK,795\\nSTL,LAS,1651\\nSTL,LAX,1687\\nSTL,LGA,1603\\nSTL,LIT,666\\nSTL,MCI,1785\\nSTL,MCO,2421\\nSTL,MDW,3755\\nSTL,MEM,1048\\nSTL,MIA,731\\nSTL,MKE,321\\nSTL,MSP,1696\\nSTL,OKC,687\\nSTL,OMA,1043\\nSTL,ORD,4256\\nSTL,PHL,576\\nSTL,PHX,2763\\nSTL,RDU,357\\nSTL,RSW,417\\nSTL,SAN,366\\nSTL,SAT,246\\nSTL,SDF,994\\nSTL,SEA,566\\nSTL,SFO,574\\nSTL,SGF,366\\nSTL,SLC,1386\\nSTL,SNA,305\\nSTL,SRQ,38\\nSTL,TPA,1088\\nSTL,TUL,899\\nSTT,ATL,451\\nSTT,BOS,88\\nSTT,CLT,418\\nSTT,EWR,232\\nSTT,JFK,366\\nSTT,LGA,9\\nSTT,MIA,732\\nSTT,PHL,198\\nSTT,SJU,478\\nSTX,ATL,64\\nSTX,CLT,20\\nSTX,JAX,2\\nSTX,MGM,1\\nSTX,MIA,349\\nSUN,SLC,2870\\nSUN,TWF,1\\nSUX,MSP,122\\nSWF,ATL,1617\\nSWF,BDL,1\\nSWF,BOS,1\\nSWF,DTW,724\\nSWF,FLL,476\\nSWF,MCO,835\\nSWF,PBI,360\\nSWF,TPA,235\\nSYR,ATL,1419\\nSYR,CAK,1\\nSYR,CLE,686\\nSYR,CLT,746\\nSYR,CVG,831\\nSYR,DCA,313\\nSYR,DFW,178\\nSYR,DTW,1015\\nSYR,EWR,1002\\nSYR,FLL,328\\nSYR,IAD,622\\nSYR,JFK,1825\\nSYR,MCO,391\\nSYR,ORD,2342\\nSYR,PHL,333\\nTEX,PHX,194\\nTLH,ATL,2484\\nTLH,CLT,240\\nTLH,FLL,261\\nTLH,IAH,482\\nTLH,MCO,219\\nTLH,MEM,1094\\nTLH,MIA,831\\nTLH,TPA,301\\nTOL,ATL,120\\nTOL,CVG,21\\nTOL,ORD,1337\\nTPA,ABQ,366\\nTPA,ALB,391\\nTPA,ATL,7313\\nTPA,AUS,367\\nTPA,BDL,1266\\nTPA,BHM,1052\\nTPA,BNA,1695\\nTPA,BOS,1782\\nTPA,BUF,728\\nTPA,BWI,3402\\nTPA,CAK,359\\nTPA,CLE,874\\nTPA,CLT,2825\\nTPA,CMH,973\\nTPA,CVG,1101\\nTPA,DAY,204\\nTPA,DCA,1554\\nTPA,DEN,1692\\nTPA,DFW,2804\\nTPA,DTW,1452\\nTPA,EWR,2837\\nTPA,FLL,3051\\nTPA,FNT,200\\nTPA,GPT,366\\nTPA,HOU,1411\\nTPA,HPN,60\\nTPA,IAD,1906\\nTPA,IAH,1962\\nTPA,IND,1578\\nTPA,ISP,1093\\nTPA,JAX,1006\\nTPA,JFK,3395\\nTPA,LAS,1178\\nTPA,LAX,519\\nTPA,LGA,1465\\nTPA,MCI,699\\nTPA,MCO,1\\nTPA,MDW,2218\\nTPA,MEM,860\\nTPA,MHT,741\\nTPA,MIA,1829\\nTPA,MKE,178\\nTPA,MSP,1005\\nTPA,MSY,1088\\nTPA,ORD,2288\\nTPA,ORF,366\\nTPA,PBI,1353\\nTPA,PHF,95\\nTPA,PHL,3380\\nTPA,PHX,1022\\nTPA,PIT,1096\\nTPA,PNS,136\\nTPA,PVD,981\\nTPA,RDU,1067\\nTPA,ROC,366\\nTPA,SAT,365\\nTPA,SDF,488\\nTPA,SJU,366\\nTPA,SLC,329\\nTPA,STL,1099\\nTPA,SWF,235\\nTPA,TLH,301\\nTRI,ATL,1808\\nTRI,CLT,16\\nTRI,CVG,249\\nTRI,MEM,44\\nTUL,ABQ,229\\nTUL,ASE,1\\nTUL,ATL,1980\\nTUL,AUS,90\\nTUL,CVG,883\\nTUL,DAL,2284\\nTUL,DEN,1631\\nTUL,DFW,3260\\nTUL,DTW,726\\nTUL,EWR,344\\nTUL,GJT,2\\nTUL,HOU,1300\\nTUL,IAH,2319\\nTUL,LAS,391\\nTUL,LAX,73\\nTUL,MCI,806\\nTUL,MCO,9\\nTUL,MEM,1094\\nTUL,MSP,717\\nTUL,OKC,1\\nTUL,OMA,1\\nTUL,ONT,227\\nTUL,ORD,2038\\nTUL,PHX,1021\\nTUL,PIA,1\\nTUL,SAN,228\\nTUL,SAT,88\\nTUL,SLC,599\\nTUL,SMF,225\\nTUL,STL,890\\nTUL,XNA,1\\nTUP,ATL,10\\nTUS,ABQ,718\\nTUS,ATL,667\\nTUS,AUS,229\\nTUS,CLT,207\\nTUS,DEN,2029\\nTUS,DFW,2676\\nTUS,ELP,88\\nTUS,EWR,186\\nTUS,GEG,151\\nTUS,IAD,112\\nTUS,IAH,1669\\nTUS,JFK,132\\nTUS,LAS,2242\\nTUS,LAX,4190\\nTUS,MCI,230\\nTUS,MDW,723\\nTUS,MSP,439\\nTUS,OAK,306\\nTUS,OMA,221\\nTUS,ONT,477\\nTUS,ORD,865\\nTUS,PHX,3474\\nTUS,PSP,1\\nTUS,RNO,219\\nTUS,SAN,1412\\nTUS,SAT,239\\nTUS,SEA,444\\nTUS,SFO,365\\nTUS,SLC,1485\\nTUS,SMF,465\\nTVC,CVG,129\\nTVC,DEN,89\\nTVC,DTW,1210\\nTVC,LGA,50\\nTVC,MSN,1\\nTVC,MSP,347\\nTVC,ORD,2436\\nTWF,BOI,1\\nTWF,SLC,1810\\nTWF,SUN,2\\nTXK,DFW,1250\\nTYR,DFW,1585\\nTYS,ATL,2431\\nTYS,AUS,3\\nTYS,CLE,511\\nTYS,CVG,954\\nTYS,DEN,511\\nTYS,DFW,1506\\nTYS,DTW,1424\\nTYS,EWR,651\\nTYS,IAD,96\\nTYS,IAH,1344\\nTYS,LGA,603\\nTYS,MCI,1\\nTYS,MCO,125\\nTYS,MEM,1460\\nTYS,MSP,365\\nTYS,ORD,2019\\nVLD,ATL,938\\nVPS,ATL,3045\\nVPS,CVG,103\\nVPS,DFW,1968\\nVPS,IAH,421\\nVPS,LGA,2\\nVPS,MEM,1045\\nVPS,ORD,236\\nWRG,KTN,363\\nWRG,PSG,364\\nWYS,SLC,264\\nXNA,ATL,1768\\nXNA,BHM,1\\nXNA,CAK,1\\nXNA,COS,1\\nXNA,CVG,101\\nXNA,DCA,209\\nXNA,DEN,685\\nXNA,DFW,2781\\nXNA,DTW,361\\nXNA,EWR,545\\nXNA,FAR,1\\nXNA,IAH,1435\\nXNA,LAX,358\\nXNA,LEX,1\\nXNA,LGA,766\\nXNA,MEM,1044\\nXNA,MIA,154\\nXNA,MSP,676\\nXNA,ORD,3114\\nXNA,RDU,104\\nXNA,RFD,1\\nXNA,SGF,1\\nXNA,SLC,4\\nYAK,CDV,363\\nYAK,JNU,362\\nYKM,SLC,340\\nYUM,GJT,1\\nYUM,IPL,326\\nYUM,LAS,99\\nYUM,LAX,1044\\nYUM,PHX,1961\\nYUM,SLC,440\\n\""],"names":["dsv"],"mappings":"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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAf,MAAe,gBAAA;","x_google_ignoreList":[0,1]} \ No newline at end of file diff --git a/suites/charts/dist/assets/index-4ed993c7.js.map b/suites/charts/dist/assets/index-4ed993c7.js.map deleted file mode 100644 index d863e2933..000000000 --- a/suites/charts/dist/assets/index-4ed993c7.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"index-4ed993c7.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/suites/charts/dist/assets/index.js.map b/suites/charts/dist/assets/index.js.map new file mode 100644 index 000000000..c8e9b4f44 --- /dev/null +++ b/suites/charts/dist/assets/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""} \ No newline at end of file diff --git a/suites/charts/dist/assets/plot-562fbdb6.js.map b/suites/charts/dist/assets/plot-562fbdb6.js.map deleted file mode 100644 index 2ce271550..000000000 --- a/suites/charts/dist/assets/plot-562fbdb6.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"plot-562fbdb6.js","sources":["../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/descending.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/number.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/cross.js","../../node_modules/d3-array/src/cumsum.js","../../node_modules/d3-array/src/variance.js","../../node_modules/d3-array/src/deviation.js","../../node_modules/d3-array/src/extent.js","../../node_modules/d3-array/src/fsum.js","../../node_modules/internmap/src/index.js","../../node_modules/d3-array/src/identity.js","../../node_modules/d3-array/src/group.js","../../node_modules/d3-array/src/permute.js","../../node_modules/d3-array/src/sort.js","../../node_modules/d3-array/src/groupSort.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/max.js","../../node_modules/d3-array/src/maxIndex.js","../../node_modules/d3-array/src/min.js","../../node_modules/d3-array/src/minIndex.js","../../node_modules/d3-array/src/quickselect.js","../../node_modules/d3-array/src/greatest.js","../../node_modules/d3-array/src/quantile.js","../../node_modules/d3-array/src/mean.js","../../node_modules/d3-array/src/median.js","../../node_modules/d3-array/src/merge.js","../../node_modules/d3-array/src/mode.js","../../node_modules/d3-array/src/range.js","../../node_modules/d3-array/src/sum.js","../../node_modules/d3-array/src/reverse.js","../../node_modules/d3-axis/src/identity.js","../../node_modules/d3-axis/src/axis.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-selection/src/namespaces.js","../../node_modules/d3-selection/src/namespace.js","../../node_modules/d3-selection/src/creator.js","../../node_modules/d3-selection/src/selector.js","../../node_modules/d3-selection/src/selection/select.js","../../node_modules/d3-selection/src/array.js","../../node_modules/d3-selection/src/selectorAll.js","../../node_modules/d3-selection/src/selection/selectAll.js","../../node_modules/d3-selection/src/matcher.js","../../node_modules/d3-selection/src/selection/selectChild.js","../../node_modules/d3-selection/src/selection/selectChildren.js","../../node_modules/d3-selection/src/selection/filter.js","../../node_modules/d3-selection/src/selection/sparse.js","../../node_modules/d3-selection/src/selection/enter.js","../../node_modules/d3-selection/src/constant.js","../../node_modules/d3-selection/src/selection/data.js","../../node_modules/d3-selection/src/selection/exit.js","../../node_modules/d3-selection/src/selection/join.js","../../node_modules/d3-selection/src/selection/merge.js","../../node_modules/d3-selection/src/selection/order.js","../../node_modules/d3-selection/src/selection/sort.js","../../node_modules/d3-selection/src/selection/call.js","../../node_modules/d3-selection/src/selection/nodes.js","../../node_modules/d3-selection/src/selection/node.js","../../node_modules/d3-selection/src/selection/size.js","../../node_modules/d3-selection/src/selection/empty.js","../../node_modules/d3-selection/src/selection/each.js","../../node_modules/d3-selection/src/selection/attr.js","../../node_modules/d3-selection/src/window.js","../../node_modules/d3-selection/src/selection/style.js","../../node_modules/d3-selection/src/selection/property.js","../../node_modules/d3-selection/src/selection/classed.js","../../node_modules/d3-selection/src/selection/text.js","../../node_modules/d3-selection/src/selection/html.js","../../node_modules/d3-selection/src/selection/raise.js","../../node_modules/d3-selection/src/selection/lower.js","../../node_modules/d3-selection/src/selection/append.js","../../node_modules/d3-selection/src/selection/insert.js","../../node_modules/d3-selection/src/selection/remove.js","../../node_modules/d3-selection/src/selection/clone.js","../../node_modules/d3-selection/src/selection/datum.js","../../node_modules/d3-selection/src/selection/on.js","../../node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/d3-selection/src/selection/iterator.js","../../node_modules/d3-selection/src/selection/index.js","../../node_modules/d3-selection/src/select.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-color/src/math.js","../../node_modules/d3-color/src/lab.js","../../node_modules/d3-color/src/cubehelix.js","../../node_modules/d3-interpolate/src/basis.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/numberArray.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/d3-interpolate/src/transform/index.js","../../node_modules/d3-interpolate/src/hsl.js","../../node_modules/d3-interpolate/src/lab.js","../../node_modules/d3-interpolate/src/hcl.js","../../node_modules/d3-interpolate/src/cubehelix.js","../../node_modules/d3-interpolate/src/piecewise.js","../../node_modules/d3-interpolate/src/quantize.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-timer/src/timeout.js","../../node_modules/d3-transition/src/transition/schedule.js","../../node_modules/d3-transition/src/interrupt.js","../../node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/d3-transition/src/transition/tween.js","../../node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/d3-transition/src/transition/attr.js","../../node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/d3-transition/src/transition/delay.js","../../node_modules/d3-transition/src/transition/duration.js","../../node_modules/d3-transition/src/transition/ease.js","../../node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/d3-transition/src/transition/filter.js","../../node_modules/d3-transition/src/transition/merge.js","../../node_modules/d3-transition/src/transition/on.js","../../node_modules/d3-transition/src/transition/remove.js","../../node_modules/d3-transition/src/transition/select.js","../../node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/d3-transition/src/transition/selection.js","../../node_modules/d3-transition/src/transition/style.js","../../node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/d3-transition/src/transition/text.js","../../node_modules/d3-transition/src/transition/textTween.js","../../node_modules/d3-transition/src/transition/transition.js","../../node_modules/d3-transition/src/transition/end.js","../../node_modules/d3-transition/src/transition/index.js","../../node_modules/d3-ease/src/cubic.js","../../node_modules/d3-transition/src/selection/transition.js","../../node_modules/d3-transition/src/selection/index.js","../../node_modules/d3-path/src/path.js","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/d3-geo/src/math.js","../../node_modules/d3-geo/src/noop.js","../../node_modules/d3-geo/src/stream.js","../../node_modules/d3-geo/src/cartesian.js","../../node_modules/d3-geo/src/compose.js","../../node_modules/d3-geo/src/rotation.js","../../node_modules/d3-geo/src/circle.js","../../node_modules/d3-geo/src/clip/buffer.js","../../node_modules/d3-geo/src/pointEqual.js","../../node_modules/d3-geo/src/clip/rejoin.js","../../node_modules/d3-geo/src/polygonContains.js","../../node_modules/d3-geo/src/clip/index.js","../../node_modules/d3-geo/src/clip/antimeridian.js","../../node_modules/d3-geo/src/clip/circle.js","../../node_modules/d3-geo/src/clip/line.js","../../node_modules/d3-geo/src/clip/rectangle.js","../../node_modules/d3-geo/src/identity.js","../../node_modules/d3-geo/src/path/area.js","../../node_modules/d3-geo/src/path/bounds.js","../../node_modules/d3-geo/src/path/centroid.js","../../node_modules/d3-geo/src/path/context.js","../../node_modules/d3-geo/src/path/measure.js","../../node_modules/d3-geo/src/path/string.js","../../node_modules/d3-geo/src/path/index.js","../../node_modules/d3-geo/src/transform.js","../../node_modules/d3-geo/src/projection/fit.js","../../node_modules/d3-geo/src/projection/resample.js","../../node_modules/d3-geo/src/projection/index.js","../../node_modules/d3-geo/src/projection/conic.js","../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../../node_modules/d3-geo/src/projection/conicEqualArea.js","../../node_modules/d3-geo/src/projection/albers.js","../../node_modules/d3-geo/src/projection/albersUsa.js","../../node_modules/d3-geo/src/projection/azimuthal.js","../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../../node_modules/d3-geo/src/projection/mercator.js","../../node_modules/d3-geo/src/projection/conicConformal.js","../../node_modules/d3-geo/src/projection/equirectangular.js","../../node_modules/d3-geo/src/projection/conicEquidistant.js","../../node_modules/d3-geo/src/projection/equalEarth.js","../../node_modules/d3-geo/src/projection/gnomonic.js","../../node_modules/d3-geo/src/projection/orthographic.js","../../node_modules/d3-geo/src/projection/stereographic.js","../../node_modules/d3-geo/src/projection/transverseMercator.js","../../node_modules/d3-scale/src/init.js","../../node_modules/d3-scale/src/ordinal.js","../../node_modules/d3-scale/src/band.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-scale/src/identity.js","../../node_modules/d3-scale/src/nice.js","../../node_modules/d3-scale/src/log.js","../../node_modules/d3-scale/src/symlog.js","../../node_modules/d3-scale/src/pow.js","../../node_modules/d3-scale/src/quantile.js","../../node_modules/d3-scale/src/threshold.js","../../node_modules/d3-time/src/interval.js","../../node_modules/d3-time/src/millisecond.js","../../node_modules/d3-time/src/duration.js","../../node_modules/d3-time/src/second.js","../../node_modules/d3-time/src/minute.js","../../node_modules/d3-time/src/hour.js","../../node_modules/d3-time/src/day.js","../../node_modules/d3-time/src/week.js","../../node_modules/d3-time/src/month.js","../../node_modules/d3-time/src/year.js","../../node_modules/d3-time/src/ticks.js","../../node_modules/d3-time-format/src/locale.js","../../node_modules/d3-time-format/src/defaultLocale.js","../../node_modules/d3-scale/src/time.js","../../node_modules/d3-scale/src/utcTime.js","../../node_modules/d3-scale/src/sequential.js","../../node_modules/d3-scale/src/diverging.js","../../node_modules/d3-scale-chromatic/src/colors.js","../../node_modules/d3-scale-chromatic/src/categorical/category10.js","../../node_modules/d3-scale-chromatic/src/categorical/Accent.js","../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","../../node_modules/d3-scale-chromatic/src/categorical/Paired.js","../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","../../node_modules/d3-scale-chromatic/src/categorical/Set1.js","../../node_modules/d3-scale-chromatic/src/categorical/Set2.js","../../node_modules/d3-scale-chromatic/src/categorical/Set3.js","../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","../../node_modules/d3-scale-chromatic/src/ramp.js","../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","../../node_modules/d3-shape/src/math.js","../../node_modules/d3-shape/src/symbol/asterisk.js","../../node_modules/d3-shape/src/symbol/circle.js","../../node_modules/d3-shape/src/symbol/cross.js","../../node_modules/d3-shape/src/symbol/diamond.js","../../node_modules/d3-shape/src/symbol/diamond2.js","../../node_modules/d3-shape/src/symbol/plus.js","../../node_modules/d3-shape/src/symbol/square.js","../../node_modules/d3-shape/src/symbol/square2.js","../../node_modules/d3-shape/src/symbol/star.js","../../node_modules/d3-shape/src/symbol/triangle.js","../../node_modules/d3-shape/src/symbol/triangle2.js","../../node_modules/d3-shape/src/symbol/wye.js","../../node_modules/d3-shape/src/symbol/times.js","../../node_modules/d3-shape/src/symbol.js","../../node_modules/d3-zoom/src/transform.js","../../node_modules/isoformat/src/format.js","../../node_modules/isoformat/src/parse.js","../../node_modules/@observablehq/plot/dist/time.js","../../node_modules/@observablehq/plot/dist/options.js","../../node_modules/@observablehq/plot/dist/scales/index.js","../../node_modules/@observablehq/plot/dist/symbols.js","../../node_modules/@observablehq/plot/dist/defined.js","../../node_modules/@observablehq/plot/dist/transforms/basic.js","../../node_modules/@observablehq/plot/dist/transforms/group.js","../../node_modules/@observablehq/plot/dist/channel.js","../../node_modules/@observablehq/plot/dist/scales/schemes.js","../../node_modules/@observablehq/plot/dist/scales/quantitative.js","../../node_modules/@observablehq/plot/dist/scales/diverging.js","../../node_modules/@observablehq/plot/dist/scales/temporal.js","../../node_modules/@observablehq/plot/dist/scales/ordinal.js","../../node_modules/@observablehq/plot/dist/warnings.js","../../node_modules/@observablehq/plot/dist/scales.js","../../node_modules/@observablehq/plot/dist/projection.js","../../node_modules/@observablehq/plot/dist/context.js","../../node_modules/@observablehq/plot/dist/memoize.js","../../node_modules/@observablehq/plot/dist/format.js","../../node_modules/@observablehq/plot/dist/style.js","../../node_modules/@observablehq/plot/dist/dimensions.js","../../node_modules/@observablehq/plot/dist/facet.js","../../node_modules/@observablehq/plot/dist/axes.js","../../node_modules/@observablehq/plot/dist/legends/ramp.js","../../node_modules/@observablehq/plot/dist/legends/swatches.js","../../node_modules/@observablehq/plot/dist/legends.js","../../node_modules/@observablehq/plot/dist/mark.js","../../node_modules/@observablehq/plot/dist/math.js","../../node_modules/@observablehq/plot/dist/transforms/inset.js","../../node_modules/@observablehq/plot/dist/transforms/interval.js","../../node_modules/@observablehq/plot/dist/marks/rule.js","../../node_modules/@observablehq/plot/dist/template.js","../../node_modules/@observablehq/plot/dist/marks/text.js","../../node_modules/@observablehq/plot/dist/marks/vector.js","../../node_modules/@observablehq/plot/dist/marks/axis.js","../../node_modules/@observablehq/plot/dist/marks/frame.js","../../node_modules/@observablehq/plot/dist/plot.js","../../node_modules/@observablehq/plot/dist/transforms/identity.js","../../node_modules/@observablehq/plot/dist/transforms/stack.js","../../node_modules/@observablehq/plot/dist/marks/dot.js","../../node_modules/@observablehq/plot/dist/marks/bar.js","../../observable-plot.js"],"sourcesContent":["export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","function length(array) {\n return array.length | 0;\n}\n\nfunction empty(length) {\n return !(length > 0);\n}\n\nfunction arrayify(values) {\n return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n values = values.map(arrayify);\n const lengths = values.map(length);\n const j = values.length - 1;\n const index = new Array(j + 1).fill(0);\n const product = [];\n if (j < 0 || lengths.some(empty)) return product;\n while (true) {\n product.push(index.map((j, i) => values[i][j]));\n let i = j;\n while (++index[i] === lengths[i]) {\n if (i === 0) return reduce ? product.map(reduce) : product;\n index[i--] = 0;\n }\n }\n}\n","export default function cumsum(values, valueof) {\n var sum = 0, index = 0;\n return Float64Array.from(values, valueof === undefined\n ? v => (sum += +v || 0)\n : v => (sum += +valueof(v, index++, values) || 0));\n}","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","export default function identity(x) {\n return x;\n}\n","import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n for (let i = 1, n = keys.length; i < n; ++i) {\n groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n }\n return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n if (values.length !== 1) throw new Error(\"duplicate key\");\n return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n return (function regroup(values, i) {\n if (i >= keys.length) return reduce(values);\n const groups = new InternMap();\n const keyof = keys[i++];\n let index = -1;\n for (const value of values) {\n const key = keyof(value, ++index, values);\n const group = groups.get(key);\n if (group) group.push(value);\n else groups.set(key, [value]);\n }\n for (const [key, values] of groups) {\n groups.set(key, regroup(values, i));\n }\n return map(groups);\n })(values, 0);\n}\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n return (reduce.length !== 2\n ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n .map(([key]) => key);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return minIndex(values);\n if (p >= 1) return maxIndex(values);\n var n,\n i = Math.floor((n - 1) * p),\n order = (i, j) => ascendingDefined(values[i], values[j]),\n index = quickselect(Uint32Array.from(values, (_, i) => i), i, 0, n - 1, order);\n return greatest(index.subarray(0, i + 1), i => values[i]);\n}\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","import {InternMap} from \"internmap\";\n\nexport default function mode(values, valueof) {\n const counts = new InternMap();\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n }\n let modeValue;\n let modeCount = 0;\n for (const [value, count] of counts) {\n if (count > modeCount) {\n modeCount = count;\n modeValue = value;\n }\n }\n return modeValue;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function reverse(values) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n return Array.from(values).reverse();\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n const t = r / 2;\n const u = t * sqrt3;\n context.moveTo(0, r);\n context.lineTo(0, -r);\n context.moveTo(-u, -t);\n context.lineTo(u, t);\n context.moveTo(-u, t);\n context.lineTo(u, -t);\n }\n};\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n draw(context, size) {\n const y = sqrt(size / tan30_2);\n const x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size) * 0.62625;\n context.moveTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.lineTo(-r, 0);\n context.closePath();\n }\n};\n","import {min, sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size - min(size / 7, 2)) * 0.87559;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n context.moveTo(0, r);\n context.lineTo(0, -r);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const w = sqrt(size);\n const x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size) * 0.4431;\n context.moveTo(r, r);\n context.lineTo(r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, r);\n context.closePath();\n }\n};\n","import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n draw(context, size) {\n const r = sqrt(size * ka);\n const x = kx * r;\n const y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (let i = 1; i < 5; ++i) {\n const a = tau * i / 5;\n const c = cos(a);\n const s = sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const y = -sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const s = sqrt(size) * 0.6824;\n const t = s / 2;\n const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n context.moveTo(0, -s);\n context.lineTo(u, t);\n context.lineTo(-u, t);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / a);\n const x0 = r / 2, y0 = r * k;\n const x1 = x0, y1 = r * k + r;\n const x2 = -x1, y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import {min, sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\n context.moveTo(-r, -r);\n context.lineTo(r, r);\n context.moveTo(-r, r);\n context.lineTo(r, -r);\n }\n};\n","import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n circle,\n plus,\n times,\n triangle2,\n asterisk,\n square2,\n diamond2\n];\n\nexport default function Symbol(type, size) {\n let context = null,\n path = withPath(symbol);\n\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export default function format(date, fallback) {\n if (!(date instanceof Date)) date = new Date(+date);\n if (isNaN(date)) return typeof fallback === \"function\" ? fallback(date) : fallback;\n const hours = date.getUTCHours();\n const minutes = date.getUTCMinutes();\n const seconds = date.getUTCSeconds();\n const milliseconds = date.getUTCMilliseconds();\n return `${formatYear(date.getUTCFullYear(), 4)}-${pad(date.getUTCMonth() + 1, 2)}-${pad(date.getUTCDate(), 2)}${\n hours || minutes || seconds || milliseconds ? `T${pad(hours, 2)}:${pad(minutes, 2)}${\n seconds || milliseconds ? `:${pad(seconds, 2)}${\n milliseconds ? `.${pad(milliseconds, 3)}` : ``\n }` : ``\n }Z` : ``\n }`;\n}\n\nfunction formatYear(year) {\n return year < 0 ? `-${pad(-year, 6)}`\n : year > 9999 ? `+${pad(year, 6)}`\n : pad(year, 4);\n}\n\nfunction pad(value, width) {\n return `${value}`.padStart(width, \"0\");\n}\n","const re = /^(?:[-+]\\d{2})?\\d{4}(?:-\\d{2}(?:-\\d{2})?)?(?:T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{3})?)?(?:Z|[-+]\\d{2}:?\\d{2})?)?$/;\n\nexport default function parse(string, fallback) {\n if (!re.test(string += \"\")) return typeof fallback === \"function\" ? fallback(string) : fallback;\n return new Date(string);\n}\n","import { utcSecond, utcMinute, utcHour, utcDay, utcWeek, utcMonth, utcYear } from \"d3\";\nimport { utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSunday } from \"d3\";\nimport { timeSecond, timeMinute, timeHour, timeDay, timeWeek, timeMonth, timeYear } from \"d3\";\nimport { timeMonday, timeTuesday, timeWednesday, timeThursday, timeFriday, timeSaturday, timeSunday } from \"d3\";\nconst timeIntervals = new Map([\n [\"second\", timeSecond],\n [\"minute\", timeMinute],\n [\"hour\", timeHour],\n [\"day\", timeDay],\n [\"week\", timeWeek],\n [\"month\", timeMonth],\n [\"year\", timeYear],\n [\"monday\", timeMonday],\n [\"tuesday\", timeTuesday],\n [\"wednesday\", timeWednesday],\n [\"thursday\", timeThursday],\n [\"friday\", timeFriday],\n [\"saturday\", timeSaturday],\n [\"sunday\", timeSunday]\n]);\nconst utcIntervals = new Map([\n [\"second\", utcSecond],\n [\"minute\", utcMinute],\n [\"hour\", utcHour],\n [\"day\", utcDay],\n [\"week\", utcWeek],\n [\"month\", utcMonth],\n [\"year\", utcYear],\n [\"monday\", utcMonday],\n [\"tuesday\", utcTuesday],\n [\"wednesday\", utcWednesday],\n [\"thursday\", utcThursday],\n [\"friday\", utcFriday],\n [\"saturday\", utcSaturday],\n [\"sunday\", utcSunday]\n]);\nexport function maybeTimeInterval(interval) {\n const i = timeIntervals.get(`${interval}`.toLowerCase());\n if (!i)\n throw new Error(`unknown interval: ${interval}`);\n return i;\n}\nexport function maybeUtcInterval(interval) {\n const i = utcIntervals.get(`${interval}`.toLowerCase());\n if (!i)\n throw new Error(`unknown interval: ${interval}`);\n return i;\n}\n","import { parse as isoParse } from \"isoformat\";\nimport { color, descending, range as rangei, quantile } from \"d3\";\nimport { maybeTimeInterval, maybeUtcInterval } from \"./time.js\";\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray\nconst TypedArray = Object.getPrototypeOf(Uint8Array);\nconst objectToString = Object.prototype.toString;\n/** \n * Given an iterable *data* and some *value* accessor, returns an array (a column) of the specified *type* with the corresponding value of each element of the data. The *value* accessor may be one of the following types:\n * \n * * a string - corresponding to the field accessor (`d => d[value]`)\n * * an accessor function - called as *type*.from(*data*, *value*)\n * * a number, Date, or boolean — resulting in an array uniformly filled with the *value*\n * * an object with a transform method — called as *value*.transform(*data*)\n * * an array of values - returning the same\n * * null or undefined - returning the same\n * \n * If *type* is specified, it must be Array or a similar class that implements the [Array.from](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from) interface such as a typed array. When *type* is Array or a typed array class, the return value of valueof will be an instance of the same (or null or undefined). If *type* is not specified, valueof may return either an array or a typed array (or null or undefined).\n * \n * Plot.valueof is not guaranteed to return a new array. When a transform method is used, or when the given *value* is an array that is compatible with the requested *type*, the array may be returned as-is without making a copy.\n * \n */\nexport function valueof(data, value, type) {\n const valueType = typeof value;\n return valueType === \"string\"\n ? map(data, field(value), type)\n : valueType === \"function\"\n ? map(data, value, type)\n : valueType === \"number\" || value instanceof Date || valueType === \"boolean\"\n ? map(data, constant(value), type)\n : value && typeof value.transform === \"function\"\n ? arrayify(value.transform(data), type)\n : arrayify(value, type); // preserve undefined type\n}\nexport const field = (name) => (d) => d[name];\nexport const indexOf = (d, i) => i;\n/** \n * This channel helper returns a source array as-is, avoiding an extra copy when defining a channel as being equal to the data:\n * \n * ```js\n * Plot.raster(await readValues(), {width: 300, height: 200, fill: Plot.identity})\n * ```\n * \n */\nexport const identity = { transform: (d) => d };\nexport const zero = () => 0;\nexport const one = () => 1;\nexport const yes = () => true;\nexport const string = (x) => (x == null ? x : `${x}`);\nexport const number = (x) => (x == null ? x : +x);\nexport const boolean = (x) => (x == null ? x : !!x);\nexport const first = (x) => (x ? x[0] : undefined);\nexport const second = (x) => (x ? x[1] : undefined);\nexport const third = (x) => (x ? x[2] : undefined);\nexport const constant = (x) => () => x;\n// Converts a string like “p25” into a function that takes an index I and an\n// accessor function f, returning the corresponding percentile value.\nexport function percentile(reduce) {\n const p = +`${reduce}`.slice(1) / 100;\n return (I, f) => quantile(I, p, f);\n}\n// Some channels may allow a string constant to be specified; to differentiate\n// string constants (e.g., \"red\") from named fields (e.g., \"date\"), this\n// function tests whether the given value is a CSS color string and returns a\n// tuple [channel, constant] where one of the two is undefined, and the other is\n// the given value. If you wish to reference a named field that is also a valid\n// CSS color, use an accessor (d => d.red) instead.\nexport function maybeColorChannel(value, defaultValue) {\n if (value === undefined)\n value = defaultValue;\n return value === null ? [undefined, \"none\"] : isColor(value) ? [undefined, value] : [value, undefined];\n}\n// Similar to maybeColorChannel, this tests whether the given value is a number\n// indicating a constant, and otherwise assumes that it’s a channel value.\nexport function maybeNumberChannel(value, defaultValue) {\n if (value === undefined)\n value = defaultValue;\n return value === null || typeof value === \"number\" ? [undefined, value] : [value, undefined];\n}\n// Validates the specified optional string against the allowed list of keywords.\nexport function maybeKeyword(input, name, allowed) {\n if (input != null)\n return keyword(input, name, allowed);\n}\n// Validates the specified required string against the allowed list of keywords.\nexport function keyword(input, name, allowed) {\n const i = `${input}`.toLowerCase();\n if (!allowed.includes(i))\n throw new Error(`invalid ${name}: ${input}`);\n return i;\n}\n// Promotes the specified data to an array or typed array as needed. If an array\n// type is provided (e.g., Array), then the returned array will strictly be of\n// the specified type; otherwise, any array or typed array may be returned. If\n// the specified data is null or undefined, returns the value as-is.\nexport function arrayify(data, type) {\n return data == null\n ? data\n : type === undefined\n ? data instanceof Array || data instanceof TypedArray\n ? data\n : Array.from(data)\n : data instanceof type\n ? data\n : type.from(data);\n}\n// An optimization of type.from(values, f): if the given values are already an\n// instanceof the desired array type, the faster values.map method is used.\nexport function map(values, f, type = Array) {\n return values instanceof type ? values.map(f) : type.from(values, f);\n}\n// An optimization of type.from(values): if the given values are already an\n// instanceof the desired array type, the faster values.slice method is used.\nexport function slice(values, type = Array) {\n return values instanceof type ? values.slice() : type.from(values);\n}\nexport function isTypedArray(values) {\n return values instanceof TypedArray;\n}\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a primitive value.\nexport function isObject(option) {\n return option?.toString === objectToString;\n}\n// Disambiguates a scale options object (e.g., {color: {type: \"linear\"}}) from\n// some other option (e.g., {color: \"red\"}). When creating standalone legends,\n// this is used to test whether a scale is defined; this should be consistent\n// with inferScaleType when there are no channels associated with the scale, and\n// if this returns true, then normalizeScale must return non-null.\nexport function isScaleOptions(option) {\n return isObject(option) && (option.type !== undefined || option.domain !== undefined);\n}\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a channel value\n// definition expressed as a channel transform (e.g., {transform: …}).\nexport function isOptions(option) {\n return isObject(option) && typeof option.transform !== \"function\";\n}\n// Disambiguates a sort transform (e.g., {sort: \"date\"}) from a channel domain\n// sort definition (e.g., {sort: {y: \"x\"}}).\nexport function isDomainSort(sort) {\n return isOptions(sort) && sort.value === undefined && sort.channel === undefined;\n}\n// For marks specified either as [0, x] or [x1, x2], such as areas and bars.\nexport function maybeZero(x, x1, x2, x3 = identity) {\n if (x1 === undefined && x2 === undefined) {\n // {x} or {}\n (x1 = 0), (x2 = x === undefined ? x3 : x);\n }\n else if (x1 === undefined) {\n // {x, x2} or {x2}\n x1 = x === undefined ? 0 : x;\n }\n else if (x2 === undefined) {\n // {x, x1} or {x1}\n x2 = x === undefined ? 0 : x;\n }\n return [x1, x2];\n}\n// For marks that have x and y channels (e.g., cell, dot, line, text).\nexport function maybeTuple(x, y) {\n return x === undefined && y === undefined ? [first, second] : [x, y];\n}\n// A helper for extracting the z channel, if it is variable. Used by transforms\n// that require series, such as moving average and normalize.\nexport function maybeZ({ z, fill, stroke } = {}) {\n if (z === undefined)\n [z] = maybeColorChannel(fill);\n if (z === undefined)\n [z] = maybeColorChannel(stroke);\n return z;\n}\n// Returns a Uint32Array with elements [0, 1, 2, … data.length - 1].\nexport function range(data) {\n const n = data.length;\n const r = new Uint32Array(n);\n for (let i = 0; i < n; ++i)\n r[i] = i;\n return r;\n}\n// Returns a filtered range of data given the test function.\nexport function where(data, test) {\n return range(data).filter((i) => test(data[i], i, data));\n}\n// Returns an array [values[index[0]], values[index[1]], …].\nexport function take(values, index) {\n return map(index, (i) => values[i]);\n}\n// Based on InternMap (d3.group).\nexport function keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\nexport function maybeInput(key, options) {\n if (options[key] !== undefined)\n return options[key];\n switch (key) {\n case \"x1\":\n case \"x2\":\n key = \"x\";\n break;\n case \"y1\":\n case \"y2\":\n key = \"y\";\n break;\n }\n return options[key];\n}\n/** \n * This helper for constructing derived columns returns a [*column*, *setColumn*] array. The *column* object implements *column*.transform, returning whatever value was most recently passed to *setColumn*. If *setColumn* is not called, then *column*.transform returns undefined. If a *source* is specified, then *column*.label exposes the given *source*’s label, if any: if *source* is a string as when representing a named field of data, then *column*.label is *source*; otherwise *column*.label propagates *source*.label. This allows derived columns to propagate a human-readable axis or legend label.\n * \n * Plot.column is typically used by options transforms to define new channels; the associated columns are populated (derived) when the **transform** option function is invoked.\n * \n */\nexport function column(source) {\n // Defines a column whose values are lazily populated by calling the returned\n // setter. If the given source is labeled, the label is propagated to the\n // returned column definition.\n let value;\n return [\n {\n transform: () => value,\n label: labelof(source)\n },\n (v) => (value = v)\n ];\n}\n// Like column, but allows the source to be null.\nexport function maybeColumn(source) {\n return source == null ? [source] : column(source);\n}\nexport function labelof(value, defaultValue) {\n return typeof value === \"string\" ? value : value && value.label !== undefined ? value.label : defaultValue;\n}\n// Assuming that both x1 and x2 and lazy columns (per above), this derives a new\n// a column that’s the average of the two, and which inherits the column label\n// (if any). Both input columns are assumed to be quantitative. If either column\n// is temporal, the returned column is also temporal.\nexport function mid(x1, x2) {\n return {\n transform(data) {\n const X1 = x1.transform(data);\n const X2 = x2.transform(data);\n return isTemporal(X1) || isTemporal(X2)\n ? map(X1, (_, i) => new Date((+X1[i] + +X2[i]) / 2))\n : map(X1, (_, i) => (+X1[i] + +X2[i]) / 2, Float64Array);\n },\n label: x1.label\n };\n}\n// If interval is not nullish, converts interval shorthand such as a number (for\n// multiples) or a time interval name (such as “day”) to a {floor, offset,\n// range} object similar to a D3 time interval.\nexport function maybeInterval(interval, type) {\n if (interval == null)\n return;\n if (typeof interval === \"number\") {\n const n = interval;\n return {\n floor: (d) => n * Math.floor(d / n),\n offset: (d) => d + n,\n range: (lo, hi) => rangei(Math.ceil(lo / n), hi / n).map((x) => n * x)\n };\n }\n if (typeof interval === \"string\")\n return (type === \"time\" ? maybeTimeInterval : maybeUtcInterval)(interval);\n if (typeof interval.floor !== \"function\")\n throw new Error(\"invalid interval; missing floor method\");\n if (typeof interval.offset !== \"function\")\n throw new Error(\"invalid interval; missing offset method\");\n return interval;\n}\n// This distinguishes between per-dimension options and a standalone value.\nexport function maybeValue(value) {\n return value === undefined || isOptions(value) ? value : { value };\n}\n// Coerces the given channel values (if any) to numbers. This is useful when\n// values will be interpolated into other code, such as an SVG transform, and\n// where we don’t wish to allow unexpected behavior for weird input.\nexport function numberChannel(source) {\n return source == null\n ? null\n : {\n transform: (data) => valueof(data, source, Float64Array),\n label: labelof(source)\n };\n}\nexport function isTuples(data) {\n if (!isIterable(data))\n return false;\n for (const d of data) {\n if (d == null)\n continue;\n return typeof d === \"object\" && \"0\" in d && \"1\" in d;\n }\n}\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === \"function\";\n}\nexport function isTextual(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return typeof value !== \"object\" || value instanceof Date;\n }\n}\nexport function isOrdinal(values) {\n for (const value of values) {\n if (value == null)\n continue;\n const type = typeof value;\n return type === \"string\" || type === \"boolean\";\n }\n}\nexport function isTemporal(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return value instanceof Date;\n }\n}\n// Are these strings that might represent dates? This is stricter than ISO 8601\n// because we want to ignore false positives on numbers; for example, the string\n// \"1192\" is more likely to represent a number than a date even though it is\n// valid ISO 8601 representing 1192-01-01.\nexport function isTemporalString(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return typeof value === \"string\" && isNaN(value) && isoParse(value);\n }\n}\n// Are these strings that might represent numbers? This is stricter than\n// coercion because we want to ignore false positives on e.g. empty strings.\nexport function isNumericString(values) {\n for (const value of values) {\n if (value == null)\n continue;\n if (typeof value !== \"string\")\n return false;\n if (!value.trim())\n continue;\n return !isNaN(value);\n }\n}\nexport function isNumeric(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return typeof value === \"number\";\n }\n}\n// Returns true if every non-null value in the specified iterable of values\n// passes the specified predicate, and there is at least one non-null value;\n// returns false if at least one non-null value does not pass the specified\n// predicate; otherwise returns undefined (as if all values are null).\nexport function isEvery(values, is) {\n let every;\n for (const value of values) {\n if (value == null)\n continue;\n if (!is(value))\n return false;\n every = true;\n }\n return every;\n}\n// Mostly relies on d3-color, with a few extra color keywords. Currently this\n// strictly requires that the value be a string; we might want to apply string\n// coercion here, though note that d3-color instances would need to support\n// valueOf to work correctly with InternMap.\n// https://www.w3.org/TR/SVG11/painting.html#SpecifyingPaint\nexport function isColor(value) {\n if (typeof value !== \"string\")\n return false;\n value = value.toLowerCase().trim();\n return (value === \"none\" ||\n value === \"currentcolor\" ||\n (value.startsWith(\"url(\") && value.endsWith(\")\")) || // , e.g. pattern or gradient\n (value.startsWith(\"var(\") && value.endsWith(\")\")) || // CSS variable\n color(value) !== null);\n}\nexport function isNoneish(value) {\n return value == null || isNone(value);\n}\nexport function isNone(value) {\n return /^\\s*none\\s*$/i.test(value);\n}\nexport function isRound(value) {\n return /^\\s*round\\s*$/i.test(value);\n}\nexport function maybeFrameAnchor(value = \"middle\") {\n return keyword(value, \"frameAnchor\", [\n \"middle\",\n \"top-left\",\n \"top\",\n \"top-right\",\n \"right\",\n \"bottom-right\",\n \"bottom\",\n \"bottom-left\",\n \"left\"\n ]);\n}\n// Like a sort comparator, returns a positive value if the given array of values\n// is in ascending order, a negative value if the values are in descending\n// order. Assumes monotonicity; only tests the first and last values.\nexport function orderof(values) {\n if (values == null)\n return;\n const first = values[0];\n const last = values[values.length - 1];\n return descending(first, last);\n}\n// Unlike {...defaults, ...options}, this ensures that any undefined (but\n// present) properties in options inherit the given default value.\nexport function inherit(options = {}, ...rest) {\n let o = options;\n for (const defaults of rest) {\n for (const key in defaults) {\n if (o[key] === undefined) {\n const value = defaults[key];\n if (o === options)\n o = { ...o, [key]: value };\n else\n o[key] = value;\n }\n }\n }\n return o;\n}\n// Given an iterable of named things (objects with a name property), returns a\n// corresponding object with properties associated with the given name.\nexport function Named(things) {\n console.warn(\"named iterables are deprecated; please use an object instead\");\n const names = new Set();\n return Object.fromEntries(Array.from(things, (thing) => {\n const { name } = thing;\n if (name == null)\n throw new Error(\"missing name\");\n const key = `${name}`;\n if (key === \"__proto__\")\n throw new Error(`illegal name: ${key}`);\n if (names.has(key))\n throw new Error(`duplicate name: ${key}`);\n names.add(key);\n return [name, thing];\n }));\n}\nexport function maybeNamed(things) {\n return isIterable(things) ? Named(things) : things;\n}\n","// Positional scales have associated axes, and for ordinal data, a point or band\n// scale is used instead of an ordinal scale.\nexport const position = Symbol(\"position\");\n// Color scales default to the turbo interpolator for quantitative data, and to\n// the Tableau10 scheme for ordinal data. In the future, color scales may also\n// have an associated legend.\nexport const color = Symbol(\"color\");\n// Radius scales default to the sqrt type, have a default range of [0, 3], and a\n// default domain from 0 to the median first quartile of associated channels.\nexport const radius = Symbol(\"radius\");\n// Length scales default to the linear type, have a default range of [0, 12],\n// and a default domain from 0 to the median median of associated channels.\nexport const length = Symbol(\"length\");\n// Opacity scales have a default range of [0, 1], and a default domain from 0 to\n// the maximum value of associated channels.\nexport const opacity = Symbol(\"opacity\");\n// Symbol scales have a default range of d3.symbols.\nexport const symbol = Symbol(\"symbol\");\n// TODO Rather than hard-coding the list of known scale names, collect the names\n// and categories for each plot specification, so that custom marks can register\n// custom scales.\nexport const registry = new Map([\n [\"x\", position],\n [\"y\", position],\n [\"fx\", position],\n [\"fy\", position],\n [\"r\", radius],\n [\"color\", color],\n [\"opacity\", opacity],\n [\"symbol\", symbol],\n [\"length\", length]\n]);\n","import { symbolAsterisk, symbolDiamond2, symbolPlus, symbolSquare2, symbolTriangle2, symbolTimes } from \"d3\";\nimport { symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye } from \"d3\";\nexport const sqrt3 = Math.sqrt(3);\nexport const sqrt4_3 = 2 / sqrt3;\nconst symbolHexagon = {\n draw(context, size) {\n const rx = Math.sqrt(size / Math.PI), ry = rx * sqrt4_3, hy = ry / 2;\n context.moveTo(0, ry);\n context.lineTo(rx, hy);\n context.lineTo(rx, -hy);\n context.lineTo(0, -ry);\n context.lineTo(-rx, -hy);\n context.lineTo(-rx, hy);\n context.closePath();\n }\n};\nconst symbols = new Map([\n [\"asterisk\", symbolAsterisk],\n [\"circle\", symbolCircle],\n [\"cross\", symbolCross],\n [\"diamond\", symbolDiamond],\n [\"diamond2\", symbolDiamond2],\n [\"hexagon\", symbolHexagon],\n [\"plus\", symbolPlus],\n [\"square\", symbolSquare],\n [\"square2\", symbolSquare2],\n [\"star\", symbolStar],\n [\"times\", symbolTimes],\n [\"triangle\", symbolTriangle],\n [\"triangle2\", symbolTriangle2],\n [\"wye\", symbolWye]\n]);\nfunction isSymbolObject(value) {\n return value && typeof value.draw === \"function\";\n}\nexport function isSymbol(value) {\n if (isSymbolObject(value))\n return true;\n if (typeof value !== \"string\")\n return false;\n return symbols.has(value.toLowerCase());\n}\nexport function maybeSymbol(symbol) {\n if (symbol == null || isSymbolObject(symbol))\n return symbol;\n const value = symbols.get(`${symbol}`.toLowerCase());\n if (value)\n return value;\n throw new Error(`invalid symbol: ${symbol}`);\n}\nexport function maybeSymbolChannel(symbol) {\n if (symbol == null || isSymbolObject(symbol))\n return [undefined, symbol];\n if (typeof symbol === \"string\") {\n const value = symbols.get(`${symbol}`.toLowerCase());\n if (value)\n return [undefined, value];\n }\n return [symbol, undefined];\n}\n","import { ascending, descending } from \"d3\";\nexport function defined(x) {\n return x != null && !Number.isNaN(x);\n}\nexport function ascendingDefined(a, b) {\n return +defined(b) - +defined(a) || ascending(a, b);\n}\nexport function descendingDefined(a, b) {\n return +defined(b) - +defined(a) || descending(a, b);\n}\nexport function nonempty(x) {\n return x != null && `${x}` !== \"\";\n}\nexport function finite(x) {\n return isFinite(x) ? x : NaN;\n}\nexport function positive(x) {\n return x > 0 && isFinite(x) ? x : NaN;\n}\nexport function negative(x) {\n return x < 0 && isFinite(x) ? x : NaN;\n}\n","import { randomLcg } from \"d3\";\nimport { ascendingDefined, descendingDefined } from \"../defined.js\";\nimport { arrayify, isDomainSort, isOptions, maybeValue, valueof } from \"../options.js\";\n/** \n * Given an *options* object that may specify some basic transforms (*filter*, *sort*, or *reverse*) or a custom *transform* function, composes those transforms if any with the given *transform* function, returning a new *options* object. If a custom *transform* function is present on the given *options*, any basic transforms are ignored. Any additional input *options* are passed through in the returned *options* object. This method facilitates applying the basic transforms prior to applying the given custom *transform* and is used internally by Plot’s built-in transforms.\n * \n */\nexport function basic(options = {}, transform) {\n let { filter: f1, sort: s1, reverse: r1, transform: t1, initializer: i1, ...remainingOptions } = options;\n // If both t1 and t2 are defined, returns a composite transform that first\n // applies t1 and then applies t2.\n if (t1 === undefined) {\n // explicit transform overrides filter, sort, and reverse\n if (f1 != null)\n t1 = filterTransform(f1);\n if (s1 != null && !isDomainSort(s1))\n t1 = composeTransform(t1, sortTransform(s1));\n if (r1)\n t1 = composeTransform(t1, reverseTransform);\n }\n if (transform != null && i1 != null)\n throw new Error(\"transforms cannot be applied after initializers\");\n return {\n ...remainingOptions,\n ...((s1 === null || isDomainSort(s1)) && { sort: s1 }),\n transform: composeTransform(t1, transform)\n };\n}\n/** \n * This helper composes the *initializer* function with any other transforms present in the *options*, and returns a new *options* object.\n * \n */\nexport function initializer(options = {}, initializer) {\n let { filter: f1, sort: s1, reverse: r1, initializer: i1, ...remainingOptions } = options;\n // If both i1 and i2 are defined, returns a composite initializer that first\n // applies i1 and then applies i2.\n if (i1 === undefined) {\n // explicit initializer overrides filter, sort, and reverse\n if (f1 != null)\n i1 = filterTransform(f1);\n if (s1 != null && !isDomainSort(s1))\n i1 = composeInitializer(i1, sortTransform(s1));\n if (r1)\n i1 = composeInitializer(i1, reverseTransform);\n }\n return {\n ...remainingOptions,\n ...((s1 === null || isDomainSort(s1)) && { sort: s1 }),\n initializer: composeInitializer(i1, initializer)\n };\n}\nfunction composeTransform(t1, t2) {\n if (t1 == null)\n return t2 === null ? undefined : t2;\n if (t2 == null)\n return t1 === null ? undefined : t1;\n return function (data, facets) {\n ({ data, facets } = t1.call(this, data, facets));\n return t2.call(this, arrayify(data), facets);\n };\n}\nfunction composeInitializer(i1, i2) {\n if (i1 == null)\n return i2 === null ? undefined : i2;\n if (i2 == null)\n return i1 === null ? undefined : i1;\n return function (data, facets, channels, ...args) {\n let c1, d1, f1, c2, d2, f2;\n ({ data: d1 = data, facets: f1 = facets, channels: c1 } = i1.call(this, data, facets, channels, ...args));\n ({ data: d2 = d1, facets: f2 = f1, channels: c2 } = i2.call(this, d1, f1, { ...channels, ...c1 }, ...args));\n return { data: d2, facets: f2, channels: { ...c1, ...c2 } };\n };\n}\nfunction apply(options, t) {\n return (options.initializer != null ? initializer : basic)(options, t);\n}\n/** \n * ```js\n * Plot.filter(d => d.body_mass_g > 3000, options) // show data whose body mass is greater than 3kg\n * ```\n * \n * Filters the data given the specified *test*. The test can be given as an accessor function (which receives the datum and index), or as a channel value definition such as a field name; truthy values are retained.\n * \n */\nexport function filter(test, options) {\n return apply(options, filterTransform(test));\n}\nfunction filterTransform(value) {\n return (data, facets) => {\n const V = valueof(data, value);\n return { data, facets: facets.map((I) => I.filter((i) => V[i])) };\n };\n}\n/** \n * ```js\n * Plot.reverse(options) // reverse the input order\n * ```\n * \n * Reverses the order of the data.\n * \n */\nexport function reverse(options) {\n return { ...apply(options, reverseTransform), sort: null };\n}\nfunction reverseTransform(data, facets) {\n return { data, facets: facets.map((I) => I.slice().reverse()) };\n}\n/** \n * ```js\n * Plot.shuffle(options) // show data in random order\n * ```\n * \n * Shuffles the data randomly. If a *seed* option is specified, a linear congruential generator with the given seed is used to generate random numbers deterministically; otherwise, Math.random is used.\n * \n */\nexport function shuffle(options = {}) {\n const { seed, ...remainingOptions } = options;\n return { ...apply(remainingOptions, sortValue(seed == null ? Math.random : randomLcg(seed))), sort: null };\n}\n/** \n * ```js\n * Plot.sort(\"body_mass_g\", options) // show data in ascending body mass order\n * ```\n * \n * Sorts the data by the specified *order*, which can be an accessor function, a comparator function, or a channel value definition such as a field name. See also [index sorting](https://github.com/observablehq/plot/blob/main/README.md#sort-options), which allows marks to be sorted by a named channel, such as *r* for radius.\n * \n */\nexport function sort(order, options) {\n return {\n ...(isOptions(order) && order.channel !== undefined ? initializer : apply)(options, sortTransform(order)),\n sort: null\n };\n}\nfunction sortTransform(value) {\n return (typeof value === \"function\" && value.length !== 1 ? sortData : sortValue)(value);\n}\nfunction sortData(compare) {\n return (data, facets) => {\n const compareData = (i, j) => compare(data[i], data[j]);\n return { data, facets: facets.map((I) => I.slice().sort(compareData)) };\n };\n}\nfunction sortValue(value) {\n let channel, order;\n ({ channel, value, order = ascendingDefined } = { ...maybeValue(value) });\n if (typeof order !== \"function\") {\n switch (`${order}`.toLowerCase()) {\n case \"ascending\":\n order = ascendingDefined;\n break;\n case \"descending\":\n order = descendingDefined;\n break;\n default:\n throw new Error(`invalid order: ${order}`);\n }\n }\n return (data, facets, channels) => {\n let V;\n if (channel === undefined) {\n V = valueof(data, value);\n }\n else {\n if (channels === undefined)\n throw new Error(\"channel sort requires an initializer\");\n V = channels[channel];\n if (!V)\n return {}; // ignore missing channel\n V = V.value;\n }\n const compareValue = (i, j) => order(V[i], V[j]);\n return { data, facets: facets.map((I) => I.slice().sort(compareValue)) };\n };\n}\n","import { group as grouper, sort, sum, deviation, min, max, mean, median, mode, variance, InternSet, minIndex, maxIndex, rollup } from \"d3\";\nimport { ascendingDefined } from \"../defined.js\";\nimport { valueof, maybeColorChannel, maybeInput, maybeTuple, maybeColumn, column, first, identity, take, labelof, range, second, percentile, isTemporal, isObject } from \"../options.js\";\nimport { basic } from \"./basic.js\";\n/** \n * ```js\n * Plot.groupZ({x: \"proportion\"}, {fill: \"species\"})\n * ```\n * \n * Groups on the first channel of *z*, *fill*, or *stroke*, if any. If none of *z*, *fill*, or *stroke* are channels, then all data (within each facet) is placed into a single group.\n * \n */\nexport function groupZ(outputs, options) {\n // Group on {z, fill, stroke}.\n return groupn(null, null, outputs, options);\n}\n/** \n * ```js\n * Plot.groupX({y: \"sum\"}, {x: \"species\", y: \"body_mass_g\"})\n * ```\n * \n * Groups on *x* and the first channel of *z*, *fill*, or *stroke*, if any.\n * \n */\nexport function groupX(outputs = { y: \"count\" }, options = {}) {\n // Group on {z, fill, stroke}, then on x.\n const { x = identity } = options;\n if (x == null)\n throw new Error(\"missing channel: x\");\n return groupn(x, null, outputs, options);\n}\n/** \n * ```js\n * Plot.groupY({x: \"sum\"}, {y: \"species\", x: \"body_mass_g\"})\n * ```\n * \n * Groups on *y* and the first channel of *z*, *fill*, or *stroke*, if any.\n * \n */\nexport function groupY(outputs = { x: \"count\" }, options = {}) {\n // Group on {z, fill, stroke}, then on y.\n const { y = identity } = options;\n if (y == null)\n throw new Error(\"missing channel: y\");\n return groupn(null, y, outputs, options);\n}\n/** \n * ```js\n * Plot.group({fill: \"count\"}, {x: \"island\", y: \"species\"})\n * ```\n * \n * Groups on *x*, *y*, and the first channel of *z*, *fill*, or *stroke*, if any.\n * \n */\nexport function group(outputs = { fill: \"count\" }, options = {}) {\n // Group on {z, fill, stroke}, then on x and y.\n let { x, y } = options;\n [x, y] = maybeTuple(x, y);\n if (x == null)\n throw new Error(\"missing channel: x\");\n if (y == null)\n throw new Error(\"missing channel: y\");\n return groupn(x, y, outputs, options);\n}\nfunction groupn(x, // optionally group on x\ny, // optionally group on y\n{ data: reduceData = reduceIdentity, filter, sort, reverse, ...outputs // output channel definitions\n } = {}, inputs = {} // input channels and options\n) {\n // Compute the outputs.\n outputs = maybeOutputs(outputs, inputs);\n reduceData = maybeReduce(reduceData, identity);\n sort = sort == null ? undefined : maybeOutput(\"sort\", sort, inputs);\n filter = filter == null ? undefined : maybeEvaluator(\"filter\", filter, inputs);\n // Produce x and y output channels as appropriate.\n const [GX, setGX] = maybeColumn(x);\n const [GY, setGY] = maybeColumn(y);\n // Greedily materialize the z, fill, and stroke channels (if channels and not\n // constants) so that we can reference them for subdividing groups without\n // computing them more than once.\n const { z, fill, stroke, x1, x2, // consumed if x is an output\n y1, y2, // consumed if y is an output\n ...options } = inputs;\n const [GZ, setGZ] = maybeColumn(z);\n const [vfill] = maybeColorChannel(fill);\n const [vstroke] = maybeColorChannel(stroke);\n const [GF, setGF] = maybeColumn(vfill);\n const [GS, setGS] = maybeColumn(vstroke);\n return {\n ...(\"z\" in inputs && { z: GZ || z }),\n ...(\"fill\" in inputs && { fill: GF || fill }),\n ...(\"stroke\" in inputs && { stroke: GS || stroke }),\n ...basic(options, (data, facets) => {\n const X = valueof(data, x);\n const Y = valueof(data, y);\n const Z = valueof(data, z);\n const F = valueof(data, vfill);\n const S = valueof(data, vstroke);\n const G = maybeSubgroup(outputs, { z: Z, fill: F, stroke: S });\n const groupFacets = [];\n const groupData = [];\n const GX = X && setGX([]);\n const GY = Y && setGY([]);\n const GZ = Z && setGZ([]);\n const GF = F && setGF([]);\n const GS = S && setGS([]);\n let i = 0;\n for (const o of outputs)\n o.initialize(data);\n if (sort)\n sort.initialize(data);\n if (filter)\n filter.initialize(data);\n for (const facet of facets) {\n const groupFacet = [];\n for (const o of outputs)\n o.scope(\"facet\", facet);\n if (sort)\n sort.scope(\"facet\", facet);\n if (filter)\n filter.scope(\"facet\", facet);\n for (const [f, I] of maybeGroup(facet, G)) {\n for (const [y, gg] of maybeGroup(I, Y)) {\n for (const [x, g] of maybeGroup(gg, X)) {\n if (filter && !filter.reduce(g))\n continue;\n groupFacet.push(i++);\n groupData.push(reduceData.reduce(g, data));\n if (X)\n GX.push(x);\n if (Y)\n GY.push(y);\n if (Z)\n GZ.push(G === Z ? f : Z[g[0]]);\n if (F)\n GF.push(G === F ? f : F[g[0]]);\n if (S)\n GS.push(G === S ? f : S[g[0]]);\n for (const o of outputs)\n o.reduce(g);\n if (sort)\n sort.reduce(g);\n }\n }\n }\n groupFacets.push(groupFacet);\n }\n maybeSort(groupFacets, sort, reverse);\n return { data: groupData, facets: groupFacets };\n }),\n ...(!hasOutput(outputs, \"x\") && (GX ? { x: GX } : { x1, x2 })),\n ...(!hasOutput(outputs, \"y\") && (GY ? { y: GY } : { y1, y2 })),\n ...Object.fromEntries(outputs.map(({ name, output }) => [name, output]))\n };\n}\nexport function hasOutput(outputs, ...names) {\n for (const { name } of outputs) {\n if (names.includes(name)) {\n return true;\n }\n }\n return false;\n}\nexport function maybeOutputs(outputs, inputs) {\n const entries = Object.entries(outputs);\n // Propagate standard mark channels by default.\n if (inputs.title != null && outputs.title === undefined)\n entries.push([\"title\", reduceTitle]);\n if (inputs.href != null && outputs.href === undefined)\n entries.push([\"href\", reduceFirst]);\n return entries\n .filter(([, reduce]) => reduce !== undefined)\n .map(([name, reduce]) => {\n return reduce === null ? { name, initialize() { }, scope() { }, reduce() { } } : maybeOutput(name, reduce, inputs);\n });\n}\nexport function maybeOutput(name, reduce, inputs) {\n const evaluator = maybeEvaluator(name, reduce, inputs);\n const [output, setOutput] = column(evaluator.label);\n let O;\n return {\n name,\n output,\n initialize(data) {\n evaluator.initialize(data);\n O = setOutput([]);\n },\n scope(scope, I) {\n evaluator.scope(scope, I);\n },\n reduce(I, extent) {\n O.push(evaluator.reduce(I, extent));\n }\n };\n}\nexport function maybeEvaluator(name, reduce, inputs) {\n const input = maybeInput(name, inputs);\n const reducer = maybeReduce(reduce, input);\n let V, context;\n return {\n label: labelof(reducer === reduceCount ? null : input, reducer.label),\n initialize(data) {\n V = input === undefined ? data : valueof(data, input);\n if (reducer.scope === \"data\") {\n context = reducer.reduce(range(data), V);\n }\n },\n scope(scope, I) {\n if (reducer.scope === scope) {\n context = reducer.reduce(I, V);\n }\n },\n reduce(I, extent) {\n return reducer.scope == null ? reducer.reduce(I, V, extent) : reducer.reduce(I, V, context, extent);\n }\n };\n}\nexport function maybeGroup(I, X) {\n return X\n ? sort(grouper(I, (i) => X[i]), first)\n : [[, I]];\n}\nexport function maybeReduce(reduce, value) {\n if (typeof reduce?.reduce === \"function\" && isObject(reduce))\n return reduce; // N.B. array.reduce\n if (typeof reduce === \"function\")\n return reduceFunction(reduce);\n if (/^p\\d{2}$/i.test(reduce))\n return reduceAccessor(percentile(reduce));\n switch (`${reduce}`.toLowerCase()) {\n case \"first\":\n return reduceFirst;\n case \"last\":\n return reduceLast;\n case \"count\":\n return reduceCount;\n case \"distinct\":\n return reduceDistinct;\n case \"sum\":\n return value == null ? reduceCount : reduceSum;\n case \"proportion\":\n return reduceProportion(value, \"data\");\n case \"proportion-facet\":\n return reduceProportion(value, \"facet\");\n case \"deviation\":\n return reduceAccessor(deviation);\n case \"min\":\n return reduceAccessor(min);\n case \"min-index\":\n return reduceAccessor(minIndex);\n case \"max\":\n return reduceAccessor(max);\n case \"max-index\":\n return reduceAccessor(maxIndex);\n case \"mean\":\n return reduceMaybeTemporalAccessor(mean);\n case \"median\":\n return reduceMaybeTemporalAccessor(median);\n case \"variance\":\n return reduceAccessor(variance);\n case \"mode\":\n return reduceAccessor(mode);\n case \"x\":\n return reduceX;\n case \"x1\":\n return reduceX1;\n case \"x2\":\n return reduceX2;\n case \"y\":\n return reduceY;\n case \"y1\":\n return reduceY1;\n case \"y2\":\n return reduceY2;\n }\n throw new Error(`invalid reduce: ${reduce}`);\n}\nexport function maybeSubgroup(outputs, inputs) {\n for (const name in inputs) {\n const value = inputs[name];\n if (value !== undefined && !outputs.some((o) => o.name === name)) {\n return value;\n }\n }\n}\nexport function maybeSort(facets, sort, reverse) {\n if (sort) {\n const S = sort.output.transform();\n const compare = (i, j) => ascendingDefined(S[i], S[j]);\n facets.forEach((f) => f.sort(compare));\n }\n if (reverse) {\n facets.forEach((f) => f.reverse());\n }\n}\nfunction reduceFunction(f) {\n return {\n reduce(I, X, extent) {\n return f(take(X, I), extent);\n }\n };\n}\nfunction reduceAccessor(f) {\n return {\n reduce(I, X) {\n return f(I, (i) => X[i]);\n }\n };\n}\nfunction reduceMaybeTemporalAccessor(f) {\n return {\n reduce(I, X) {\n const x = f(I, (i) => X[i]);\n return isTemporal(X) ? new Date(x) : x;\n }\n };\n}\nexport const reduceIdentity = {\n reduce(I, X) {\n return take(X, I);\n }\n};\nexport const reduceFirst = {\n reduce(I, X) {\n return X[I[0]];\n }\n};\nconst reduceTitle = {\n reduce(I, X) {\n const n = 5;\n const groups = sort(rollup(I, (V) => V.length, (i) => X[i]), second);\n const top = groups.slice(-n).reverse();\n if (top.length < groups.length) {\n const bottom = groups.slice(0, 1 - n);\n top[n - 1] = [`… ${bottom.length.toLocaleString(\"en-US\")} more`, sum(bottom, second)];\n }\n return top.map(([key, value]) => `${key} (${value.toLocaleString(\"en-US\")})`).join(\"\\n\");\n }\n};\nconst reduceLast = {\n reduce(I, X) {\n return X[I[I.length - 1]];\n }\n};\nexport const reduceCount = {\n label: \"Frequency\",\n reduce(I) {\n return I.length;\n }\n};\nconst reduceDistinct = {\n label: \"Distinct\",\n reduce: (I, X) => {\n const s = new InternSet();\n for (const i of I)\n s.add(X[i]);\n return s.size;\n }\n};\nconst reduceSum = reduceAccessor(sum);\nfunction reduceProportion(value, scope) {\n return value == null\n ? { scope, label: \"Frequency\", reduce: (I, V, basis = 1) => I.length / basis }\n : { scope, reduce: (I, V, basis = 1) => sum(I, (i) => V[i]) / basis };\n}\nfunction mid(x1, x2) {\n const m = (+x1 + +x2) / 2;\n return x1 instanceof Date ? new Date(m) : m;\n}\nconst reduceX = {\n reduce(I, X, { x1, x2 }) {\n return mid(x1, x2);\n }\n};\nconst reduceY = {\n reduce(I, X, { y1, y2 }) {\n return mid(y1, y2);\n }\n};\nconst reduceX1 = {\n reduce(I, X, { x1 }) {\n return x1;\n }\n};\nconst reduceX2 = {\n reduce(I, X, { x2 }) {\n return x2;\n }\n};\nconst reduceY1 = {\n reduce(I, X, { y1 }) {\n return y1;\n }\n};\nconst reduceY2 = {\n reduce(I, X, { y2 }) {\n return y2;\n }\n};\n","import { ascending, descending, rollup, sort } from \"d3\";\nimport { first, isColor, isEvery, isIterable, labelof, map, maybeValue, range, valueof } from \"./options.js\";\nimport { registry } from \"./scales/index.js\";\nimport { isSymbol, maybeSymbol } from \"./symbols.js\";\nimport { maybeReduce } from \"./transforms/group.js\";\n// TODO Type coercion?\nexport function Channel(data, { scale, type, value, filter, hint }, name) {\n return inferChannelScale(name, {\n scale,\n type,\n value: valueof(data, value),\n label: labelof(value),\n filter,\n hint\n });\n}\nexport function Channels(channels, data) {\n return Object.fromEntries(Object.entries(channels).map(([name, channel]) => [name, Channel(data, channel, name)]));\n}\n// TODO Use Float64Array for scales with numeric ranges, e.g. position?\nexport function valueObject(channels, scales) {\n return Object.fromEntries(Object.entries(channels).map(([name, { scale: scaleName, value }]) => {\n const scale = scaleName == null ? null : scales[scaleName];\n return [name, scale == null ? value : map(value, scale)];\n }));\n}\n// If the channel uses the \"auto\" scale (or equivalently true), infer the scale\n// from the channel name and the provided values. For color and symbol channels,\n// no scale is applied if the values are literal; however for symbols, we must\n// promote symbol names (e.g., \"plus\") to symbol implementations (symbolPlus).\n// Note: mutates channel!\nexport function inferChannelScale(name, channel) {\n const { scale, value } = channel;\n if (scale === true || scale === \"auto\") {\n switch (name) {\n case \"fill\":\n case \"stroke\":\n case \"color\":\n channel.scale = isEvery(value, isColor) ? null : \"color\";\n break;\n case \"fillOpacity\":\n case \"strokeOpacity\":\n channel.scale = \"opacity\";\n break;\n case \"symbol\":\n if (isEvery(value, isSymbol)) {\n channel.scale = null;\n channel.value = map(value, maybeSymbol);\n }\n else {\n channel.scale = \"symbol\";\n }\n break;\n default:\n channel.scale = registry.has(name) ? name : null;\n break;\n }\n }\n else if (scale != null && !registry.has(scale)) {\n throw new Error(`unknown scale: ${scale}`);\n }\n return channel;\n}\n// Note: mutates channel.domain! This is set to a function so that it is lazily\n// computed; i.e., if the scale’s domain is set explicitly, that takes priority\n// over the sort option, and we don’t need to do additional work.\nexport function channelDomain(channels, facetChannels, data, options) {\n const { reverse: defaultReverse, reduce: defaultReduce = true, limit: defaultLimit } = options;\n for (const x in options) {\n if (!registry.has(x))\n continue; // ignore unknown scale keys (including generic options)\n let { value: y, reverse = defaultReverse, reduce = defaultReduce, limit = defaultLimit } = maybeValue(options[x]);\n if (reverse === undefined)\n reverse = y === \"width\" || y === \"height\"; // default to descending for lengths\n if (reduce == null || reduce === false)\n continue; // disabled reducer\n const X = findScaleChannel(channels, x) || (facetChannels && findScaleChannel(facetChannels, x));\n if (!X)\n throw new Error(`missing channel for scale: ${x}`);\n const XV = X.value;\n const [lo = 0, hi = Infinity] = isIterable(limit) ? limit : limit < 0 ? [limit] : [0, limit];\n if (y == null) {\n X.domain = () => {\n let domain = XV;\n if (reverse)\n domain = domain.slice().reverse();\n if (lo !== 0 || hi !== Infinity)\n domain = domain.slice(lo, hi);\n return domain;\n };\n }\n else {\n const YV = y === \"data\"\n ? data\n : y === \"height\"\n ? difference(channels, \"y1\", \"y2\")\n : y === \"width\"\n ? difference(channels, \"x1\", \"x2\")\n : values(channels, y, y === \"y\" ? \"y2\" : y === \"x\" ? \"x2\" : undefined);\n const reducer = maybeReduce(reduce === true ? \"max\" : reduce, YV);\n X.domain = () => {\n let domain = rollup(range(XV), (I) => reducer.reduce(I, YV), (i) => XV[i]);\n domain = sort(domain, reverse ? descendingGroup : ascendingGroup);\n if (lo !== 0 || hi !== Infinity)\n domain = domain.slice(lo, hi);\n return domain.map(first);\n };\n }\n }\n}\nfunction findScaleChannel(channels, scale) {\n for (const name in channels) {\n const channel = channels[name];\n if (channel.scale === scale)\n return channel;\n }\n}\nfunction difference(channels, k1, k2) {\n const X1 = values(channels, k1);\n const X2 = values(channels, k2);\n return map(X2, (x2, i) => Math.abs(x2 - X1[i]), Float64Array);\n}\nfunction values(channels, name, alias) {\n let channel = channels[name];\n if (!channel && alias !== undefined)\n channel = channels[alias];\n if (channel)\n return channel.value;\n throw new Error(`missing channel: ${name}`);\n}\nfunction ascendingGroup([ak, av], [bk, bv]) {\n return ascending(av, bv) || ascending(ak, bk);\n}\nfunction descendingGroup([ak, av], [bk, bv]) {\n return descending(av, bv) || ascending(ak, bk);\n}\n","import { interpolateBlues, interpolateBrBG, interpolateBuGn, interpolateBuPu, interpolateGnBu, interpolateGreens, interpolateGreys, interpolateOranges, interpolateOrRd, interpolatePiYG, interpolatePRGn, interpolatePuBu, interpolatePuBuGn, interpolatePuOr, interpolatePuRd, interpolatePurples, interpolateRdBu, interpolateRdGy, interpolateRdPu, interpolateRdYlBu, interpolateRdYlGn, interpolateReds, interpolateSpectral, interpolateYlGn, interpolateYlGnBu, interpolateYlOrBr, interpolateYlOrRd, interpolateTurbo, interpolateViridis, interpolateMagma, interpolateInferno, interpolatePlasma, interpolateCividis, interpolateCubehelixDefault, interpolateWarm, interpolateCool, interpolateRainbow, interpolateSinebow, quantize, schemeAccent, schemeBlues, schemeBrBG, schemeBuGn, schemeBuPu, schemeCategory10, schemeDark2, schemeGnBu, schemeGreens, schemeGreys, schemeOranges, schemeOrRd, schemePaired, schemePastel1, schemePastel2, schemePiYG, schemePRGn, schemePuBu, schemePuBuGn, schemePuOr, schemePuRd, schemePurples, schemeRdBu, schemeRdGy, schemeRdPu, schemeRdYlBu, schemeRdYlGn, schemeReds, schemeSet1, schemeSet2, schemeSet3, schemeSpectral, schemeTableau10, schemeYlGn, schemeYlGnBu, schemeYlOrBr, schemeYlOrRd } from \"d3\";\nconst ordinalSchemes = new Map([\n // categorical\n [\"accent\", schemeAccent],\n [\"category10\", schemeCategory10],\n [\"dark2\", schemeDark2],\n [\"paired\", schemePaired],\n [\"pastel1\", schemePastel1],\n [\"pastel2\", schemePastel2],\n [\"set1\", schemeSet1],\n [\"set2\", schemeSet2],\n [\"set3\", schemeSet3],\n [\"tableau10\", schemeTableau10],\n // diverging\n [\"brbg\", scheme11(schemeBrBG, interpolateBrBG)],\n [\"prgn\", scheme11(schemePRGn, interpolatePRGn)],\n [\"piyg\", scheme11(schemePiYG, interpolatePiYG)],\n [\"puor\", scheme11(schemePuOr, interpolatePuOr)],\n [\"rdbu\", scheme11(schemeRdBu, interpolateRdBu)],\n [\"rdgy\", scheme11(schemeRdGy, interpolateRdGy)],\n [\"rdylbu\", scheme11(schemeRdYlBu, interpolateRdYlBu)],\n [\"rdylgn\", scheme11(schemeRdYlGn, interpolateRdYlGn)],\n [\"spectral\", scheme11(schemeSpectral, interpolateSpectral)],\n // reversed diverging (for temperature data)\n [\"burd\", scheme11r(schemeRdBu, interpolateRdBu)],\n [\"buylrd\", scheme11r(schemeRdYlBu, interpolateRdYlBu)],\n // sequential (single-hue)\n [\"blues\", scheme9(schemeBlues, interpolateBlues)],\n [\"greens\", scheme9(schemeGreens, interpolateGreens)],\n [\"greys\", scheme9(schemeGreys, interpolateGreys)],\n [\"oranges\", scheme9(schemeOranges, interpolateOranges)],\n [\"purples\", scheme9(schemePurples, interpolatePurples)],\n [\"reds\", scheme9(schemeReds, interpolateReds)],\n // sequential (multi-hue)\n [\"turbo\", schemei(interpolateTurbo)],\n [\"viridis\", schemei(interpolateViridis)],\n [\"magma\", schemei(interpolateMagma)],\n [\"inferno\", schemei(interpolateInferno)],\n [\"plasma\", schemei(interpolatePlasma)],\n [\"cividis\", schemei(interpolateCividis)],\n [\"cubehelix\", schemei(interpolateCubehelixDefault)],\n [\"warm\", schemei(interpolateWarm)],\n [\"cool\", schemei(interpolateCool)],\n [\"bugn\", scheme9(schemeBuGn, interpolateBuGn)],\n [\"bupu\", scheme9(schemeBuPu, interpolateBuPu)],\n [\"gnbu\", scheme9(schemeGnBu, interpolateGnBu)],\n [\"orrd\", scheme9(schemeOrRd, interpolateOrRd)],\n [\"pubu\", scheme9(schemePuBu, interpolatePuBu)],\n [\"pubugn\", scheme9(schemePuBuGn, interpolatePuBuGn)],\n [\"purd\", scheme9(schemePuRd, interpolatePuRd)],\n [\"rdpu\", scheme9(schemeRdPu, interpolateRdPu)],\n [\"ylgn\", scheme9(schemeYlGn, interpolateYlGn)],\n [\"ylgnbu\", scheme9(schemeYlGnBu, interpolateYlGnBu)],\n [\"ylorbr\", scheme9(schemeYlOrBr, interpolateYlOrBr)],\n [\"ylorrd\", scheme9(schemeYlOrRd, interpolateYlOrRd)],\n // cyclical\n [\"rainbow\", schemeicyclical(interpolateRainbow)],\n [\"sinebow\", schemeicyclical(interpolateSinebow)]\n]);\nfunction scheme9(scheme, interpolate) {\n return ({ length: n }) => {\n if (n === 1)\n return [scheme[3][1]]; // favor midpoint\n if (n === 2)\n return [scheme[3][1], scheme[3][2]]; // favor darker\n n = Math.max(3, Math.floor(n));\n return n > 9 ? quantize(interpolate, n) : scheme[n];\n };\n}\nfunction scheme11(scheme, interpolate) {\n return ({ length: n }) => {\n if (n === 2)\n return [scheme[3][0], scheme[3][2]]; // favor diverging extrema\n n = Math.max(3, Math.floor(n));\n return n > 11 ? quantize(interpolate, n) : scheme[n];\n };\n}\nfunction scheme11r(scheme, interpolate) {\n return ({ length: n }) => {\n if (n === 2)\n return [scheme[3][2], scheme[3][0]]; // favor diverging extrema\n n = Math.max(3, Math.floor(n));\n return n > 11 ? quantize((t) => interpolate(1 - t), n) : scheme[n].slice().reverse();\n };\n}\nfunction schemei(interpolate) {\n return ({ length: n }) => quantize(interpolate, Math.max(2, Math.floor(n)));\n}\nfunction schemeicyclical(interpolate) {\n return ({ length: n }) => quantize(interpolate, Math.floor(n) + 1).slice(0, -1);\n}\nexport function ordinalScheme(scheme) {\n const s = `${scheme}`.toLowerCase();\n if (!ordinalSchemes.has(s))\n throw new Error(`unknown ordinal scheme: ${s}`);\n return ordinalSchemes.get(s);\n}\nexport function ordinalRange(scheme, length) {\n const s = ordinalScheme(scheme);\n const r = typeof s === \"function\" ? s({ length }) : s;\n return r.length !== length ? r.slice(0, length) : r;\n}\n// If the specified domain contains only booleans (ignoring null and undefined),\n// returns a corresponding range where false is mapped to the low color and true\n// is mapped to the high color of the specified scheme.\nexport function maybeBooleanRange(domain, scheme = \"greys\") {\n const range = new Set();\n const [f, t] = ordinalRange(scheme, 2);\n for (const value of domain) {\n if (value == null)\n continue;\n if (value === true)\n range.add(t);\n else if (value === false)\n range.add(f);\n else\n return;\n }\n return [...range];\n}\nconst quantitativeSchemes = new Map([\n // diverging\n [\"brbg\", interpolateBrBG],\n [\"prgn\", interpolatePRGn],\n [\"piyg\", interpolatePiYG],\n [\"puor\", interpolatePuOr],\n [\"rdbu\", interpolateRdBu],\n [\"rdgy\", interpolateRdGy],\n [\"rdylbu\", interpolateRdYlBu],\n [\"rdylgn\", interpolateRdYlGn],\n [\"spectral\", interpolateSpectral],\n // reversed diverging (for temperature data)\n [\"burd\", (t) => interpolateRdBu(1 - t)],\n [\"buylrd\", (t) => interpolateRdYlBu(1 - t)],\n // sequential (single-hue)\n [\"blues\", interpolateBlues],\n [\"greens\", interpolateGreens],\n [\"greys\", interpolateGreys],\n [\"purples\", interpolatePurples],\n [\"reds\", interpolateReds],\n [\"oranges\", interpolateOranges],\n // sequential (multi-hue)\n [\"turbo\", interpolateTurbo],\n [\"viridis\", interpolateViridis],\n [\"magma\", interpolateMagma],\n [\"inferno\", interpolateInferno],\n [\"plasma\", interpolatePlasma],\n [\"cividis\", interpolateCividis],\n [\"cubehelix\", interpolateCubehelixDefault],\n [\"warm\", interpolateWarm],\n [\"cool\", interpolateCool],\n [\"bugn\", interpolateBuGn],\n [\"bupu\", interpolateBuPu],\n [\"gnbu\", interpolateGnBu],\n [\"orrd\", interpolateOrRd],\n [\"pubugn\", interpolatePuBuGn],\n [\"pubu\", interpolatePuBu],\n [\"purd\", interpolatePuRd],\n [\"rdpu\", interpolateRdPu],\n [\"ylgnbu\", interpolateYlGnBu],\n [\"ylgn\", interpolateYlGn],\n [\"ylorbr\", interpolateYlOrBr],\n [\"ylorrd\", interpolateYlOrRd],\n // cyclical\n [\"rainbow\", interpolateRainbow],\n [\"sinebow\", interpolateSinebow]\n]);\nexport function quantitativeScheme(scheme) {\n const s = `${scheme}`.toLowerCase();\n if (!quantitativeSchemes.has(s))\n throw new Error(`unknown quantitative scheme: ${s}`);\n return quantitativeSchemes.get(s);\n}\nconst divergingSchemes = new Set([\n \"brbg\",\n \"prgn\",\n \"piyg\",\n \"puor\",\n \"rdbu\",\n \"rdgy\",\n \"rdylbu\",\n \"rdylgn\",\n \"spectral\",\n \"burd\",\n \"buylrd\"\n]);\nexport function isDivergingScheme(scheme) {\n return scheme != null && divergingSchemes.has(`${scheme}`.toLowerCase());\n}\n","import { descending, extent, interpolateHcl, interpolateHsl, interpolateLab, interpolateNumber, interpolateRgb, interpolateRound, min, max, median, quantile, quantize, reverse as reverseof, scaleLinear, scaleLog, scalePow, scaleQuantile, scaleSymlog, scaleThreshold, scaleIdentity, ticks } from \"d3\";\nimport { positive, negative, finite } from \"../defined.js\";\nimport { arrayify, constant, orderof, slice, maybeInterval } from \"../options.js\";\nimport { ordinalRange, quantitativeScheme } from \"./schemes.js\";\nimport { registry, radius, opacity, color, length } from \"./index.js\";\nexport const flip = (i) => (t) => i(1 - t);\nconst unit = [0, 1];\nconst interpolators = new Map([\n // numbers\n [\"number\", interpolateNumber],\n // color spaces\n [\"rgb\", interpolateRgb],\n [\"hsl\", interpolateHsl],\n [\"hcl\", interpolateHcl],\n [\"lab\", interpolateLab]\n]);\nexport function Interpolator(interpolate) {\n const i = `${interpolate}`.toLowerCase();\n if (!interpolators.has(i))\n throw new Error(`unknown interpolator: ${i}`);\n return interpolators.get(i);\n}\nexport function ScaleQ(key, scale, channels, { type, nice, clamp, zero, domain = inferAutoDomain(key, channels), unknown, round, scheme, interval, range = registry.get(key) === radius\n ? inferRadialRange(channels, domain)\n : registry.get(key) === length\n ? inferLengthRange(channels, domain)\n : registry.get(key) === opacity\n ? unit\n : undefined, interpolate = registry.get(key) === color\n ? scheme == null && range !== undefined\n ? interpolateRgb\n : quantitativeScheme(scheme !== undefined ? scheme : type === \"cyclical\" ? \"rainbow\" : \"turbo\")\n : round\n ? interpolateRound\n : interpolateNumber, reverse }) {\n interval = maybeInterval(interval, type);\n if (type === \"cyclical\" || type === \"sequential\")\n type = \"linear\"; // shorthand for color schemes\n reverse = !!reverse;\n // Sometimes interpolate is a named interpolator, such as \"lab\" for Lab color\n // space. Other times interpolate is a function that takes two arguments and\n // is used in conjunction with the range. And other times the interpolate\n // function is a “fixed” interpolator on the [0, 1] interval, as when a\n // color scheme such as interpolateRdBu is used.\n if (typeof interpolate !== \"function\") {\n interpolate = Interpolator(interpolate);\n }\n if (interpolate.length === 1) {\n if (reverse) {\n interpolate = flip(interpolate);\n reverse = false;\n }\n if (range === undefined) {\n range = Float64Array.from(domain, (_, i) => i / (domain.length - 1));\n if (range.length === 2)\n range = unit; // optimize common case of [0, 1]\n }\n scale.interpolate((range === unit ? constant : interpolatePiecewise)(interpolate));\n }\n else {\n scale.interpolate(interpolate);\n }\n // If a zero option is specified, we assume that the domain is numeric, and we\n // want to ensure that the domain crosses zero. However, note that the domain\n // may be reversed (descending) so we shouldn’t assume that the first value is\n // smaller than the last; and also it’s possible that the domain has more than\n // two values for a “poly” scale. And lastly be careful not to mutate input!\n if (zero) {\n const [min, max] = extent(domain);\n if (min > 0 || max < 0) {\n domain = slice(domain);\n if (orderof(domain) !== Math.sign(min))\n domain[domain.length - 1] = 0;\n // [2, 1] or [-2, -1]\n else\n domain[0] = 0; // [1, 2] or [-1, -2]\n }\n }\n if (reverse)\n domain = reverseof(domain);\n scale.domain(domain).unknown(unknown);\n if (nice)\n scale.nice(nice === true ? undefined : nice), (domain = scale.domain());\n if (range !== undefined)\n scale.range(range);\n if (clamp)\n scale.clamp(clamp);\n return { type, domain, range, scale, interpolate, interval };\n}\nexport function ScaleLinear(key, channels, options) {\n return ScaleQ(key, scaleLinear(), channels, options);\n}\nexport function ScaleSqrt(key, channels, options) {\n return ScalePow(key, channels, { ...options, exponent: 0.5 });\n}\nexport function ScalePow(key, channels, { exponent = 1, ...options }) {\n return ScaleQ(key, scalePow().exponent(exponent), channels, { ...options, type: \"pow\" });\n}\nexport function ScaleLog(key, channels, { base = 10, domain = inferLogDomain(channels), ...options }) {\n return ScaleQ(key, scaleLog().base(base), channels, { ...options, domain });\n}\nexport function ScaleSymlog(key, channels, { constant = 1, ...options }) {\n return ScaleQ(key, scaleSymlog().constant(constant), channels, options);\n}\nexport function ScaleQuantile(key, channels, { range, quantiles = range === undefined ? 5 : (range = [...range]).length, // deprecated; use n instead\nn = quantiles, scheme = \"rdylbu\", domain = inferQuantileDomain(channels), interpolate, reverse }) {\n if (range === undefined) {\n range =\n interpolate !== undefined\n ? quantize(interpolate, n)\n : registry.get(key) === color\n ? ordinalRange(scheme, n)\n : undefined;\n }\n if (domain.length > 0) {\n domain = scaleQuantile(domain, range === undefined ? { length: n } : range).quantiles();\n }\n return ScaleThreshold(key, channels, { domain, range, reverse });\n}\nexport function ScaleQuantize(key, channels, { range, n = range === undefined ? 5 : (range = [...range]).length, scheme = \"rdylbu\", domain = inferAutoDomain(key, channels), unknown, interpolate, reverse }) {\n const [min, max] = extent(domain);\n let thresholds;\n if (range === undefined) {\n thresholds = ticks(min, max, n); // approximate number of nice, round thresholds\n if (thresholds[0] <= min)\n thresholds.splice(0, 1); // drop exact lower bound\n if (thresholds[thresholds.length - 1] >= max)\n thresholds.pop(); // drop exact upper bound\n n = thresholds.length + 1;\n range =\n interpolate !== undefined\n ? quantize(interpolate, n)\n : registry.get(key) === color\n ? ordinalRange(scheme, n)\n : undefined;\n }\n else {\n thresholds = quantize(interpolateNumber(min, max), n + 1).slice(1, -1); // exactly n - 1 thresholds to match range\n if (min instanceof Date)\n thresholds = thresholds.map((x) => new Date(x)); // preserve date types\n }\n if (orderof(arrayify(domain)) < 0)\n thresholds.reverse(); // preserve descending domain\n return ScaleThreshold(key, channels, { domain: thresholds, range, reverse, unknown });\n}\nexport function ScaleThreshold(key, channels, { domain = [0], // explicit thresholds in ascending order\nunknown, scheme = \"rdylbu\", interpolate, range = interpolate !== undefined\n ? quantize(interpolate, domain.length + 1)\n : registry.get(key) === color\n ? ordinalRange(scheme, domain.length + 1)\n : undefined, reverse }) {\n domain = arrayify(domain);\n const sign = orderof(domain); // preserve descending domain\n if (!isOrdered(domain, sign))\n throw new Error(`the ${key} scale has a non-monotonic domain`);\n if (reverse)\n range = reverseof(range); // domain ascending, so reverse range\n return {\n type: \"threshold\",\n scale: scaleThreshold(sign < 0 ? reverseof(domain) : domain, range === undefined ? [] : range).unknown(unknown),\n domain,\n range\n };\n}\nfunction isOrdered(domain, sign) {\n for (let i = 1, n = domain.length, d = domain[0]; i < n; ++i) {\n const s = descending(d, (d = domain[i]));\n if (s !== 0 && s !== sign)\n return false;\n }\n return true;\n}\nexport function ScaleIdentity() {\n return { type: \"identity\", scale: scaleIdentity() };\n}\nexport function inferDomain(channels, f = finite) {\n return channels.length\n ? [\n min(channels, ({ value }) => (value === undefined ? value : min(value, f))),\n max(channels, ({ value }) => (value === undefined ? value : max(value, f)))\n ]\n : [0, 1];\n}\nfunction inferAutoDomain(key, channels) {\n const type = registry.get(key);\n return (type === radius || type === opacity || type === length ? inferZeroDomain : inferDomain)(channels);\n}\nfunction inferZeroDomain(channels) {\n return [0, channels.length ? max(channels, ({ value }) => (value === undefined ? value : max(value, finite))) : 1];\n}\n// We don’t want the upper bound of the radial domain to be zero, as this would\n// be degenerate, so we ignore nonpositive values. We also don’t want the\n// maximum default radius to exceed 30px.\nfunction inferRadialRange(channels, domain) {\n const hint = channels.find(({ radius }) => radius !== undefined);\n if (hint !== undefined)\n return [0, hint.radius]; // a natural maximum radius, e.g. hexbins\n const h25 = quantile(channels, 0.5, ({ value }) => (value === undefined ? NaN : quantile(value, 0.25, positive)));\n const range = domain.map((d) => 3 * Math.sqrt(d / h25));\n const k = 30 / max(range);\n return k < 1 ? range.map((r) => r * k) : range;\n}\n// We want a length scale’s domain to go from zero to a positive value, and to\n// treat negative lengths if any as inverted vectors of equivalent magnitude. We\n// also don’t want the maximum default length to exceed 60px.\nfunction inferLengthRange(channels, domain) {\n const h50 = median(channels, ({ value }) => (value === undefined ? NaN : median(value, Math.abs)));\n const range = domain.map((d) => (12 * d) / h50);\n const k = 60 / max(range);\n return k < 1 ? range.map((r) => r * k) : range;\n}\nfunction inferLogDomain(channels) {\n for (const { value } of channels) {\n if (value !== undefined) {\n for (let v of value) {\n if (v > 0)\n return inferDomain(channels, positive);\n if (v < 0)\n return inferDomain(channels, negative);\n }\n }\n }\n return [1, 10];\n}\nfunction inferQuantileDomain(channels) {\n const domain = [];\n for (const { value } of channels) {\n if (value === undefined)\n continue;\n for (const v of value)\n domain.push(v);\n }\n return domain;\n}\nexport function interpolatePiecewise(interpolate) {\n return (i, j) => (t) => interpolate(i + t * (j - i));\n}\n","import { descending, interpolateNumber, interpolateRgb, piecewise, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSymlog } from \"d3\";\nimport { positive, negative } from \"../defined.js\";\nimport { quantitativeScheme } from \"./schemes.js\";\nimport { registry, color } from \"./index.js\";\nimport { inferDomain, Interpolator, flip, interpolatePiecewise } from \"./quantitative.js\";\nfunction ScaleD(key, scale, transform, channels, { type, nice, clamp, domain = inferDomain(channels), unknown, pivot = 0, scheme, range, symmetric = true, interpolate = registry.get(key) === color\n ? scheme == null && range !== undefined\n ? interpolateRgb\n : quantitativeScheme(scheme !== undefined ? scheme : \"rdbu\")\n : interpolateNumber, reverse }) {\n pivot = +pivot;\n let [min, max] = domain;\n if (descending(min, max) < 0)\n ([min, max] = [max, min]), (reverse = !reverse);\n min = Math.min(min, pivot);\n max = Math.max(max, pivot);\n // Sometimes interpolate is a named interpolator, such as \"lab\" for Lab color\n // space. Other times interpolate is a function that takes two arguments and\n // is used in conjunction with the range. And other times the interpolate\n // function is a “fixed” interpolator on the [0, 1] interval, as when a\n // color scheme such as interpolateRdBu is used.\n if (typeof interpolate !== \"function\") {\n interpolate = Interpolator(interpolate);\n }\n // If an explicit range is specified, promote it to a piecewise interpolator.\n if (range !== undefined) {\n interpolate =\n interpolate.length === 1 ? interpolatePiecewise(interpolate)(...range) : piecewise(interpolate, range);\n }\n // Reverse before normalization.\n if (reverse)\n interpolate = flip(interpolate);\n // Normalize the interpolator for symmetric difference around the pivot.\n if (symmetric) {\n const mid = transform.apply(pivot);\n const mindelta = mid - transform.apply(min);\n const maxdelta = transform.apply(max) - mid;\n if (mindelta < maxdelta)\n min = transform.invert(mid - maxdelta);\n else if (mindelta > maxdelta)\n max = transform.invert(mid + mindelta);\n }\n scale.domain([min, pivot, max]).unknown(unknown).interpolator(interpolate);\n if (clamp)\n scale.clamp(clamp);\n if (nice)\n scale.nice(nice);\n return { type, domain: [min, max], pivot, interpolate, scale };\n}\nexport function ScaleDiverging(key, channels, options) {\n return ScaleD(key, scaleDiverging(), transformIdentity, channels, options);\n}\nexport function ScaleDivergingSqrt(key, channels, options) {\n return ScaleDivergingPow(key, channels, { ...options, exponent: 0.5 });\n}\nexport function ScaleDivergingPow(key, channels, { exponent = 1, ...options }) {\n return ScaleD(key, scaleDivergingPow().exponent((exponent = +exponent)), transformPow(exponent), channels, {\n ...options,\n type: \"diverging-pow\"\n });\n}\nexport function ScaleDivergingLog(key, channels, { base = 10, pivot = 1, domain = inferDomain(channels, pivot < 0 ? negative : positive), ...options }) {\n return ScaleD(key, scaleDivergingLog().base((base = +base)), transformLog, channels, { domain, pivot, ...options });\n}\nexport function ScaleDivergingSymlog(key, channels, { constant = 1, ...options }) {\n return ScaleD(key, scaleDivergingSymlog().constant((constant = +constant)), transformSymlog(constant), channels, options);\n}\nconst transformIdentity = {\n apply(x) {\n return x;\n },\n invert(x) {\n return x;\n }\n};\nconst transformLog = {\n apply: Math.log,\n invert: Math.exp\n};\nconst transformSqrt = {\n apply(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n },\n invert(x) {\n return Math.sign(x) * (x * x);\n }\n};\nfunction transformPow(exponent) {\n return exponent === 0.5\n ? transformSqrt\n : {\n apply(x) {\n return Math.sign(x) * Math.pow(Math.abs(x), exponent);\n },\n invert(x) {\n return Math.sign(x) * Math.pow(Math.abs(x), 1 / exponent);\n }\n };\n}\nfunction transformSymlog(constant) {\n return {\n apply(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / constant));\n },\n invert(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * constant;\n }\n };\n}\n","import { scaleTime, scaleUtc } from \"d3\";\nimport { ScaleQ } from \"./quantitative.js\";\nfunction ScaleT(key, scale, channels, options) {\n return ScaleQ(key, scale, channels, options);\n}\nexport function ScaleTime(key, channels, options) {\n return ScaleT(key, scaleTime(), channels, options);\n}\nexport function ScaleUtc(key, channels, options) {\n return ScaleT(key, scaleUtc(), channels, options);\n}\n","import { InternSet, extent, quantize, reverse as reverseof, sort, symbolsFill, symbolsStroke } from \"d3\";\nimport { scaleBand, scaleOrdinal, scalePoint, scaleImplicit } from \"d3\";\nimport { ascendingDefined } from \"../defined.js\";\nimport { isNoneish, map, maybeInterval } from \"../options.js\";\nimport { maybeSymbol } from \"../symbols.js\";\nimport { registry, color, position, symbol } from \"./index.js\";\nimport { maybeBooleanRange, ordinalScheme, quantitativeScheme } from \"./schemes.js\";\n// This denotes an implicitly ordinal color scale: the scale type was not set,\n// but the associated values are strings or booleans. If the associated defined\n// values are entirely boolean, the range will default to greys. You can opt out\n// of this by setting the type explicitly.\nexport const ordinalImplicit = Symbol(\"ordinal\");\nfunction ScaleO(key, scale, channels, { type, interval, domain, range, reverse, hint }) {\n interval = maybeInterval(interval, type);\n if (domain === undefined)\n domain = inferDomain(channels, interval, key);\n if (type === \"categorical\" || type === ordinalImplicit)\n type = \"ordinal\"; // shorthand for color schemes\n if (reverse)\n domain = reverseof(domain);\n scale.domain(domain);\n if (range !== undefined) {\n // If the range is specified as a function, pass it the domain.\n if (typeof range === \"function\")\n range = range(domain);\n scale.range(range);\n }\n return { type, domain, range, scale, hint, interval };\n}\nexport function ScaleOrdinal(key, channels, { type, interval, domain, range, scheme, unknown, ...options }) {\n interval = maybeInterval(interval, type);\n if (domain === undefined)\n domain = inferDomain(channels, interval, key);\n let hint;\n if (registry.get(key) === symbol) {\n hint = inferSymbolHint(channels);\n range = range === undefined ? inferSymbolRange(hint) : map(range, maybeSymbol);\n }\n else if (registry.get(key) === color) {\n if (range === undefined && (type === \"ordinal\" || type === ordinalImplicit)) {\n range = maybeBooleanRange(domain, scheme);\n if (range !== undefined)\n scheme = undefined; // Don’t re-apply scheme.\n }\n if (scheme === undefined && range === undefined) {\n scheme = type === \"ordinal\" ? \"turbo\" : \"tableau10\";\n }\n if (scheme !== undefined) {\n if (range !== undefined) {\n const interpolate = quantitativeScheme(scheme);\n const t0 = range[0], d = range[1] - range[0];\n range = ({ length: n }) => quantize((t) => interpolate(t0 + d * t), n);\n }\n else {\n range = ordinalScheme(scheme);\n }\n }\n }\n if (unknown === scaleImplicit) {\n throw new Error(`implicit unknown on ${key} scale is not supported`);\n }\n return ScaleO(key, scaleOrdinal().unknown(unknown), channels, { ...options, type, domain, range, hint });\n}\nexport function ScalePoint(key, channels, { align = 0.5, padding = 0.5, ...options }) {\n return maybeRound(scalePoint().align(align).padding(padding), channels, options, key);\n}\nexport function ScaleBand(key, channels, { align = 0.5, padding = 0.1, paddingInner = padding, paddingOuter = key === \"fx\" || key === \"fy\" ? 0 : padding, ...options }) {\n return maybeRound(scaleBand().align(align).paddingInner(paddingInner).paddingOuter(paddingOuter), channels, options, key);\n}\nfunction maybeRound(scale, channels, options, key) {\n let { round } = options;\n if (round !== undefined)\n scale.round((round = !!round));\n scale = ScaleO(key, scale, channels, options);\n scale.round = round; // preserve for autoScaleRound\n return scale;\n}\nfunction inferDomain(channels, interval, key) {\n const values = new InternSet();\n for (const { value, domain } of channels) {\n if (domain !== undefined)\n return domain(); // see channelDomain\n if (value === undefined)\n continue;\n for (const v of value)\n values.add(v);\n }\n if (interval !== undefined) {\n const [min, max] = extent(values).map(interval.floor, interval);\n return interval.range(min, interval.offset(max));\n }\n if (values.size > 10e3 && registry.get(key) === position) {\n throw new Error(`implicit ordinal domain of ${key} scale has more than 10,000 values`);\n }\n return sort(values, ascendingDefined);\n}\n// If all channels provide a consistent hint, propagate it to the scale.\nfunction inferHint(channels, key) {\n let value;\n for (const { hint } of channels) {\n const candidate = hint?.[key];\n if (candidate === undefined)\n continue; // no hint here\n if (value === undefined)\n value = candidate;\n // first hint\n else if (value !== candidate)\n return; // inconsistent hint\n }\n return value;\n}\nfunction inferSymbolHint(channels) {\n return {\n fill: inferHint(channels, \"fill\"),\n stroke: inferHint(channels, \"stroke\")\n };\n}\nfunction inferSymbolRange(hint) {\n return isNoneish(hint.fill) ? symbolsStroke : symbolsFill;\n}\n","let warnings = 0;\nexport function consumeWarnings() {\n const w = warnings;\n warnings = 0;\n return w;\n}\nexport function warn(message) {\n console.warn(message);\n ++warnings;\n}\n","import { parse as isoParse } from \"isoformat\";\nimport { isOrdinal, isTemporal, isTemporalString, isNumericString, isScaleOptions, isTypedArray, map, slice } from \"./options.js\";\nimport { registry, color, position, radius, opacity, symbol, length } from \"./scales/index.js\";\nimport { ScaleLinear, ScaleSqrt, ScalePow, ScaleLog, ScaleSymlog, ScaleQuantile, ScaleQuantize, ScaleThreshold, ScaleIdentity } from \"./scales/quantitative.js\";\nimport { ScaleDiverging, ScaleDivergingSqrt, ScaleDivergingPow, ScaleDivergingLog, ScaleDivergingSymlog } from \"./scales/diverging.js\";\nimport { isDivergingScheme } from \"./scales/schemes.js\";\nimport { ScaleTime, ScaleUtc } from \"./scales/temporal.js\";\nimport { ScaleOrdinal, ScalePoint, ScaleBand, ordinalImplicit } from \"./scales/ordinal.js\";\nimport { maybeSymbol } from \"./symbols.js\";\nimport { warn } from \"./warnings.js\";\nexport function Scales(channelsByScale, { label: globalLabel, inset: globalInset = 0, insetTop: globalInsetTop = globalInset, insetRight: globalInsetRight = globalInset, insetBottom: globalInsetBottom = globalInset, insetLeft: globalInsetLeft = globalInset, round, nice, clamp, zero, align, padding, projection, facet: { label: facetLabel = globalLabel } = {}, ...options } = {}) {\n const scales = {};\n for (const [key, channels] of channelsByScale) {\n const scaleOptions = options[key];\n const scale = Scale(key, channels, {\n round: registry.get(key) === position ? round : undefined,\n nice,\n clamp,\n zero,\n align,\n padding,\n projection,\n ...scaleOptions\n });\n if (scale) {\n // populate generic scale options (percent, transform, insets)\n let { label = key === \"fx\" || key === \"fy\" ? facetLabel : globalLabel, percent, transform, inset, insetTop = inset !== undefined ? inset : key === \"y\" ? globalInsetTop : 0, // not fy\n insetRight = inset !== undefined ? inset : key === \"x\" ? globalInsetRight : 0, // not fx\n insetBottom = inset !== undefined ? inset : key === \"y\" ? globalInsetBottom : 0, // not fy\n insetLeft = inset !== undefined ? inset : key === \"x\" ? globalInsetLeft : 0 // not fx\n } = scaleOptions || {};\n if (transform == null)\n transform = undefined;\n else if (typeof transform !== \"function\")\n throw new Error(\"invalid scale transform; not a function\");\n scale.percent = !!percent;\n scale.label = label === undefined ? inferScaleLabel(channels, scale) : label;\n scale.transform = transform;\n if (key === \"x\" || key === \"fx\") {\n scale.insetLeft = +insetLeft;\n scale.insetRight = +insetRight;\n }\n else if (key === \"y\" || key === \"fy\") {\n scale.insetTop = +insetTop;\n scale.insetBottom = +insetBottom;\n }\n scales[key] = scale;\n }\n }\n return scales;\n}\nexport function ScaleFunctions(scales) {\n return Object.fromEntries(Object.entries(scales)\n .filter(([, { scale }]) => scale) // drop identity scales\n .map(([name, { scale, type, interval, label }]) => {\n scale.type = type; // for axis\n if (interval != null)\n scale.interval = interval; // for axis\n if (label != null)\n scale.label = label; // for axis\n return [name, scale];\n }));\n}\n// Mutates scale.range!\nexport function autoScaleRange(scales, dimensions) {\n const { x, y, fx, fy } = scales;\n const superdimensions = fx || fy ? outerDimensions(dimensions) : dimensions;\n if (fx)\n autoScaleRangeX(fx, superdimensions);\n if (fy)\n autoScaleRangeY(fy, superdimensions);\n const subdimensions = fx || fy ? innerDimensions(scales, dimensions) : dimensions;\n if (x)\n autoScaleRangeX(x, subdimensions);\n if (y)\n autoScaleRangeY(y, subdimensions);\n}\n// Channels can have labels; if all the channels for a given scale are\n// consistently labeled (i.e., have the same value if not undefined), and the\n// corresponding scale doesn’t already have an explicit label, then the\n// channels’ label is promoted to the scale. This inferred label should have an\n// orientation-appropriate arrow added when used as an axis, but we don’t want\n// to add the arrow when the label is set explicitly as an option; so, the\n// inferred label is distinguished as an object with an “inferred” property.\nfunction inferScaleLabel(channels = [], scale) {\n let label;\n for (const { label: l } of channels) {\n if (l === undefined)\n continue;\n if (label === undefined)\n label = l;\n else if (label !== l)\n return;\n }\n if (label === undefined)\n return;\n // Ignore the implicit label for temporal scales if it’s simply “date”.\n if (isTemporalScale(scale) && /^(date|time|year)$/i.test(label))\n return;\n if (!isOrdinalScale(scale) && scale.percent)\n label = `${label} (%)`;\n return { inferred: true, toString: () => label };\n}\n// Returns the dimensions of the outer frame; this is subdivided into facets\n// with the margins of each facet collapsing into the outer margins.\nexport function outerDimensions(dimensions) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height, facet: { marginTop: facetMarginTop, marginRight: facetMarginRight, marginBottom: facetMarginBottom, marginLeft: facetMarginLeft } } = dimensions;\n return {\n marginTop: Math.max(marginTop, facetMarginTop),\n marginRight: Math.max(marginRight, facetMarginRight),\n marginBottom: Math.max(marginBottom, facetMarginBottom),\n marginLeft: Math.max(marginLeft, facetMarginLeft),\n width,\n height\n };\n}\n// Returns the dimensions of each facet.\nexport function innerDimensions({ fx, fy }, dimensions) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height } = outerDimensions(dimensions);\n return {\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n width: fx ? fx.scale.bandwidth() + marginLeft + marginRight : width,\n height: fy ? fy.scale.bandwidth() + marginTop + marginBottom : height\n };\n}\nfunction autoScaleRangeX(scale, dimensions) {\n if (scale.range === undefined) {\n const { insetLeft, insetRight } = scale;\n const { width, marginLeft = 0, marginRight = 0 } = dimensions;\n const left = marginLeft + insetLeft;\n const right = width - marginRight - insetRight;\n scale.range = [left, Math.max(left, right)];\n if (!isOrdinalScale(scale))\n scale.range = piecewiseRange(scale);\n scale.scale.range(scale.range);\n }\n autoScaleRound(scale);\n}\nfunction autoScaleRangeY(scale, dimensions) {\n if (scale.range === undefined) {\n const { insetTop, insetBottom } = scale;\n const { height, marginTop = 0, marginBottom = 0 } = dimensions;\n const top = marginTop + insetTop;\n const bottom = height - marginBottom - insetBottom;\n scale.range = [Math.max(top, bottom), top];\n if (!isOrdinalScale(scale))\n scale.range = piecewiseRange(scale);\n else\n scale.range.reverse();\n scale.scale.range(scale.range);\n }\n autoScaleRound(scale);\n}\nfunction autoScaleRound(scale) {\n if (scale.round === undefined && isBandScale(scale) && roundError(scale) <= 30) {\n scale.scale.round(true);\n }\n}\n// If we were to turn on rounding for this band or point scale, how much wasted\n// space would it introduce (on both ends of the range)? This must match\n// d3.scaleBand’s rounding behavior:\n// https://github.com/d3/d3-scale/blob/83555bd759c7314420bd4240642beda5e258db9e/src/band.js#L20-L32\nfunction roundError({ scale }) {\n const n = scale.domain().length;\n const [start, stop] = scale.range();\n const paddingInner = scale.paddingInner ? scale.paddingInner() : 1;\n const paddingOuter = scale.paddingOuter ? scale.paddingOuter() : scale.padding();\n const m = n - paddingInner;\n const step = Math.abs(stop - start) / Math.max(1, m + paddingOuter * 2);\n return (step - Math.floor(step)) * m;\n}\nfunction piecewiseRange(scale) {\n const length = scale.scale.domain().length + isThresholdScale(scale);\n if (!(length > 2))\n return scale.range;\n const [start, end] = scale.range;\n return Array.from({ length }, (_, i) => start + (i / (length - 1)) * (end - start));\n}\nexport function normalizeScale(key, scale, hint) {\n return Scale(key, hint === undefined ? undefined : [{ hint }], { ...scale });\n}\nfunction Scale(key, channels = [], options = {}) {\n const type = inferScaleType(key, channels, options);\n // Warn for common misuses of implicit ordinal scales. We disable this test if\n // you specify a scale interval or if you set the domain or range explicitly,\n // since setting the domain or range (typically with a cardinality of more than\n // two) is another indication that you intended for the scale to be ordinal; we\n // also disable it for facet scales since these are always band scales.\n if (options.type === undefined &&\n options.domain === undefined &&\n options.range === undefined &&\n options.interval == null &&\n key !== \"fx\" &&\n key !== \"fy\" &&\n isOrdinalScale({ type })) {\n const values = channels.map(({ value }) => value).filter((value) => value !== undefined);\n if (values.some(isTemporal))\n warn(`Warning: some data associated with the ${key} scale are dates. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(type)}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., d3.utcDay), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(type)}\".`);\n else if (values.some(isTemporalString))\n warn(`Warning: some data associated with the ${key} scale are strings that appear to be dates (e.g., YYYY-MM-DD). If these strings represent dates, you should parse them to Date objects. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(type)}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(type)}\".`);\n else if (values.some(isNumericString))\n warn(`Warning: some data associated with the ${key} scale are strings that appear to be numbers. If these strings represent numbers, you should parse or coerce them to numbers. Numbers are typically associated with a \"linear\" scale rather than a \"${formatScaleType(type)}\" scale. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., 1 for integers), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(type)}\".`);\n }\n options.type = type; // Mutates input!\n // Once the scale type is known, coerce the associated channel values and any\n // explicitly-specified domain to the expected type.\n switch (type) {\n case \"diverging\":\n case \"diverging-sqrt\":\n case \"diverging-pow\":\n case \"diverging-log\":\n case \"diverging-symlog\":\n case \"cyclical\":\n case \"sequential\":\n case \"linear\":\n case \"sqrt\":\n case \"threshold\":\n case \"quantile\":\n case \"pow\":\n case \"log\":\n case \"symlog\":\n options = coerceType(channels, options, coerceNumbers);\n break;\n case \"identity\":\n switch (registry.get(key)) {\n case position:\n options = coerceType(channels, options, coerceNumbers);\n break;\n case symbol:\n options = coerceType(channels, options, coerceSymbols);\n break;\n }\n break;\n case \"utc\":\n case \"time\":\n options = coerceType(channels, options, coerceDates);\n break;\n }\n switch (type) {\n case \"diverging\":\n return ScaleDiverging(key, channels, options);\n case \"diverging-sqrt\":\n return ScaleDivergingSqrt(key, channels, options);\n case \"diverging-pow\":\n return ScaleDivergingPow(key, channels, options);\n case \"diverging-log\":\n return ScaleDivergingLog(key, channels, options);\n case \"diverging-symlog\":\n return ScaleDivergingSymlog(key, channels, options);\n case \"categorical\":\n case \"ordinal\":\n case ordinalImplicit:\n return ScaleOrdinal(key, channels, options);\n case \"cyclical\":\n case \"sequential\":\n case \"linear\":\n return ScaleLinear(key, channels, options);\n case \"sqrt\":\n return ScaleSqrt(key, channels, options);\n case \"threshold\":\n return ScaleThreshold(key, channels, options);\n case \"quantile\":\n return ScaleQuantile(key, channels, options);\n case \"quantize\":\n return ScaleQuantize(key, channels, options);\n case \"pow\":\n return ScalePow(key, channels, options);\n case \"log\":\n return ScaleLog(key, channels, options);\n case \"symlog\":\n return ScaleSymlog(key, channels, options);\n case \"utc\":\n return ScaleUtc(key, channels, options);\n case \"time\":\n return ScaleTime(key, channels, options);\n case \"point\":\n return ScalePoint(key, channels, options);\n case \"band\":\n return ScaleBand(key, channels, options);\n case \"identity\":\n return registry.get(key) === position ? ScaleIdentity() : { type: \"identity\" };\n case undefined:\n return;\n default:\n throw new Error(`unknown scale type: ${type}`);\n }\n}\nfunction formatScaleType(type) {\n return typeof type === \"symbol\" ? type.description : type;\n}\n// A special type symbol when the x and y scales are replaced with a projection.\nconst typeProjection = { toString: () => \"projection\" };\nfunction inferScaleType(key, channels, { type, domain, range, scheme, pivot, projection }) {\n // The facet scales are always band scales; this cannot be changed.\n if (key === \"fx\" || key === \"fy\")\n return \"band\";\n // If a projection is specified, the x- and y-scales are disabled; these\n // channels will be projected rather than scaled. (But still check that none\n // of the associated channels are incompatible with a projection.)\n if ((key === \"x\" || key === \"y\") && projection != null)\n type = typeProjection;\n // If a channel dictates a scale type, make sure that it is consistent with\n // the user-specified scale type (if any) and all other channels. For example,\n // barY requires x to be a band scale and disallows any other scale type.\n for (const { type: t } of channels) {\n if (t === undefined)\n continue;\n else if (type === undefined)\n type = t;\n else if (type !== t)\n throw new Error(`scale incompatible with channel: ${type} !== ${t}`);\n }\n // If the scale, a channel, or user specified a (consistent) type, return it.\n if (type === typeProjection)\n return;\n if (type !== undefined)\n return type;\n // If there’s no data (and no type) associated with this scale, don’t create a scale.\n if (domain === undefined && !channels.some(({ value }) => value !== undefined))\n return;\n // Some scales have default types.\n const kind = registry.get(key);\n if (kind === radius)\n return \"sqrt\";\n if (kind === opacity || kind === length)\n return \"linear\";\n if (kind === symbol)\n return \"ordinal\";\n // If the domain or range has more than two values, assume it’s ordinal. You\n // can still use a “piecewise” (or “polylinear”) scale, but you must set the\n // type explicitly.\n if ((domain || range || []).length > 2)\n return asOrdinalType(kind);\n // Otherwise, infer the scale type from the data! Prefer the domain, if\n // present, over channels. (The domain and channels should be consistently\n // typed, and the domain is more explicit and typically much smaller.) We only\n // check the first defined value for expedience and simplicity; we expect\n // that the types are consistent.\n if (domain !== undefined) {\n if (isOrdinal(domain))\n return asOrdinalType(kind);\n if (isTemporal(domain))\n return \"utc\";\n if (kind === color && (pivot != null || isDivergingScheme(scheme)))\n return \"diverging\";\n return \"linear\";\n }\n // If any channel is ordinal or temporal, it takes priority.\n const values = channels.map(({ value }) => value).filter((value) => value !== undefined);\n if (values.some(isOrdinal))\n return asOrdinalType(kind);\n if (values.some(isTemporal))\n return \"utc\";\n if (kind === color && (pivot != null || isDivergingScheme(scheme)))\n return \"diverging\";\n return \"linear\";\n}\n// Positional scales default to a point scale instead of an ordinal scale.\nfunction asOrdinalType(kind) {\n switch (kind) {\n case position:\n return \"point\";\n case color:\n return ordinalImplicit;\n default:\n return \"ordinal\";\n }\n}\nexport function isTemporalScale({ type }) {\n return type === \"time\" || type === \"utc\";\n}\nexport function isOrdinalScale({ type }) {\n return type === \"ordinal\" || type === \"point\" || type === \"band\" || type === ordinalImplicit;\n}\nexport function isThresholdScale({ type }) {\n return type === \"threshold\";\n}\nfunction isBandScale({ type }) {\n return type === \"point\" || type === \"band\";\n}\nexport function isDivergingScale({ type }) {\n return /^diverging($|-)/.test(type);\n}\n// Certain marks have special behavior if a scale is collapsed, i.e. if the\n// domain is degenerate and represents only a single value such as [3, 3]; for\n// example, a rect will span the full extent of the chart along a collapsed\n// dimension (whereas a dot will simply be drawn in the center).\nexport function isCollapsed(scale) {\n if (scale === undefined)\n return true; // treat missing scale as collapsed\n const domain = scale.domain();\n const value = scale(domain[0]);\n for (let i = 1, n = domain.length; i < n; ++i) {\n if (scale(domain[i]) - value) {\n return false;\n }\n }\n return true;\n}\n// Mutates channel.value!\nfunction coerceType(channels, { domain, ...options }, coerceValues) {\n for (const c of channels) {\n if (c.value !== undefined) {\n c.value = coerceValues(c.value);\n }\n }\n return {\n domain: domain === undefined ? domain : coerceValues(domain),\n ...options\n };\n}\nfunction coerceSymbols(values) {\n return map(values, maybeSymbol);\n}\nfunction coerceDates(values) {\n return map(values, coerceDate);\n}\n// If the values are specified as a typed array, no coercion is required.\nexport function coerceNumbers(values) {\n return isTypedArray(values) ? values : map(values, coerceNumber, Float64Array);\n}\n// Unlike Mark’s number, here we want to convert null and undefined to NaN,\n// since the result will be stored in a Float64Array and we don’t want null to\n// be coerced to zero.\nexport function coerceNumber(x) {\n return x == null ? NaN : Number(x);\n}\n// When coercing strings to dates, we only want to allow the ISO 8601 format\n// since the built-in string parsing of the Date constructor varies across\n// browsers. (In the future, this could be made more liberal if desired, though\n// it is still generally preferable to do date parsing yourself explicitly,\n// rather than rely on Plot.) Any non-string values are coerced to number first\n// and treated as milliseconds since UNIX epoch.\nexport function coerceDate(x) {\n return x instanceof Date && !isNaN(x)\n ? x\n : typeof x === \"string\"\n ? isoParse(x)\n : x == null || isNaN((x = +x))\n ? undefined\n : new Date(x);\n}\n/** \n * You can also create a standalone scale with Plot.**scale**(*options*). The *options* object must define at least one scale; see [Scale options](https://github.com/observablehq/plot/blob/main/README.md#scale-options) for how to define a scale. For example, here is a linear color scale with the default domain of [0, 1] and default scheme *turbo*:\n * \n * ```js\n * const color = Plot.scale({color: {type: \"linear\"}});\n * ```\n * \n * #### Scale objects\n * \n * Both [*plot*.scale](https://github.com/observablehq/plot/blob/main/README.md#plotscalescalename) and [Plot.scale](https://github.com/observablehq/plot/blob/main/README.md#plotscaleoptions) return scale objects. These objects represent the actual (or “materialized”) scale options used by Plot, including the domain, range, interpolate function, *etc.* The scale’s label, if any, is also returned; however, note that other axis properties are not currently exposed. Point and band scales also expose their materialized bandwidth and step.\n * \n * To reuse a scale across plots, pass the corresponding scale object into another plot specification:\n * \n * ```js\n * const plot1 = Plot.plot(…);\n * const plot2 = Plot.plot({…, color: plot1.scale(\"color\")});\n * ```\n * \n * For convenience, scale objects expose a *scale*.**apply**(*input*) method which returns the scale’s output for the given *input* value. When applicable, scale objects also expose a *scale*.**invert**(*output*) method which returns the corresponding input value from the scale’s domain for the given *output* value.\n * \n */\nexport function scale(options = {}) {\n let scale;\n for (const key in options) {\n if (!registry.has(key))\n continue; // ignore unknown properties\n if (!isScaleOptions(options[key]))\n continue; // e.g., ignore {color: \"red\"}\n if (scale !== undefined)\n throw new Error(\"ambiguous scale definition; multiple scales found\");\n scale = exposeScale(normalizeScale(key, options[key]));\n }\n if (scale === undefined)\n throw new Error(\"invalid scale definition; no scale found\");\n return scale;\n}\nexport function exposeScales(scaleDescriptors) {\n return (key) => {\n if (!registry.has((key = `${key}`)))\n throw new Error(`unknown scale: ${key}`);\n return key in scaleDescriptors ? exposeScale(scaleDescriptors[key]) : undefined;\n };\n}\n// Note: axis- and legend-related properties (such as label, ticks and\n// tickFormat) are not included here as they do not affect the scale’s behavior.\nfunction exposeScale({ scale, type, domain, range, interpolate, interval, transform, percent, pivot }) {\n if (type === \"identity\")\n return { type: \"identity\", apply: (d) => d, invert: (d) => d };\n const unknown = scale.unknown ? scale.unknown() : undefined;\n return {\n type,\n domain: slice(domain),\n ...(range !== undefined && { range: slice(range) }),\n ...(transform !== undefined && { transform }),\n ...(percent && { percent }),\n ...(unknown !== undefined && { unknown }),\n ...(interval !== undefined && { interval }),\n // quantitative\n ...(interpolate !== undefined && { interpolate }),\n ...(scale.clamp && { clamp: scale.clamp() }),\n // diverging (always asymmetric; we never want to apply the symmetric transform twice)\n ...(pivot !== undefined && { pivot, symmetric: false }),\n // log, diverging-log\n ...(scale.base && { base: scale.base() }),\n // pow, diverging-pow\n ...(scale.exponent && { exponent: scale.exponent() }),\n // symlog, diverging-symlog\n ...(scale.constant && { constant: scale.constant() }),\n // band, point\n ...(scale.align && { align: scale.align(), round: scale.round() }),\n ...(scale.padding &&\n (scale.paddingInner\n ? { paddingInner: scale.paddingInner(), paddingOuter: scale.paddingOuter() }\n : { padding: scale.padding() })),\n ...(scale.bandwidth && { bandwidth: scale.bandwidth(), step: scale.step() }),\n // utilities\n apply: (t) => scale(t),\n ...(scale.invert && { invert: (t) => scale.invert(t) })\n };\n}\n","import { geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoClipRectangle, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoMercator, geoOrthographic, geoPath, geoStereographic, geoTransform, geoTransverseMercator } from \"d3\";\nimport { valueObject } from \"./channel.js\";\nimport { constant, isObject } from \"./options.js\";\nimport { coerceNumbers } from \"./scales.js\";\nimport { warn } from \"./warnings.js\";\nconst pi = Math.PI;\nconst tau = 2 * pi;\nconst defaultAspectRatio = 0.618;\nexport function Projection({ projection, inset: globalInset = 0, insetTop = globalInset, insetRight = globalInset, insetBottom = globalInset, insetLeft = globalInset } = {}, dimensions) {\n if (projection == null)\n return;\n if (typeof projection.stream === \"function\")\n return projection; // d3 projection\n let options;\n let domain;\n let clip = \"frame\";\n // If the projection was specified as an object with additional options,\n // extract those. The order of precedence for insetTop (and other insets) is:\n // projection.insetTop, projection.inset, (global) insetTop, (global) inset.\n // Any other options on this object will be passed through to the initializer.\n if (isObject(projection)) {\n let inset;\n ({\n type: projection,\n domain,\n inset,\n insetTop = inset !== undefined ? inset : insetTop,\n insetRight = inset !== undefined ? inset : insetRight,\n insetBottom = inset !== undefined ? inset : insetBottom,\n insetLeft = inset !== undefined ? inset : insetLeft,\n clip = clip,\n ...options\n } = projection);\n if (projection == null)\n return;\n }\n // For named projections, retrieve the corresponding projection initializer.\n if (typeof projection !== \"function\")\n ({ type: projection } = namedProjection(projection));\n // Compute the frame dimensions and invoke the projection initializer.\n const { width, height, marginLeft, marginRight, marginTop, marginBottom } = dimensions;\n const dx = width - marginLeft - marginRight - insetLeft - insetRight;\n const dy = height - marginTop - marginBottom - insetTop - insetBottom;\n projection = projection?.({ width: dx, height: dy, clip, ...options });\n // The projection initializer might decide to not use a projection.\n if (projection == null)\n return;\n clip = maybePostClip(clip, marginLeft, marginTop, width - marginRight, height - marginBottom);\n // Translate the origin to the top-left corner, respecting margins and insets.\n let tx = marginLeft + insetLeft;\n let ty = marginTop + insetTop;\n let transform;\n // If a domain is specified, fit the projection to the frame.\n if (domain != null) {\n const [[x0, y0], [x1, y1]] = geoPath(projection).bounds(domain);\n const k = Math.min(dx / (x1 - x0), dy / (y1 - y0));\n if (k > 0) {\n tx -= (k * (x0 + x1) - dx) / 2;\n ty -= (k * (y0 + y1) - dy) / 2;\n transform = geoTransform({\n point(x, y) {\n this.stream.point(x * k + tx, y * k + ty);\n }\n });\n }\n else {\n warn(`Warning: the projection could not be fit to the specified domain; using the default scale.`);\n }\n }\n transform ??=\n tx === 0 && ty === 0\n ? identity()\n : geoTransform({\n point(x, y) {\n this.stream.point(x + tx, y + ty);\n }\n });\n return { stream: (s) => projection.stream(transform.stream(clip(s))) };\n}\nfunction namedProjection(projection) {\n switch (`${projection}`.toLowerCase()) {\n case \"albers-usa\":\n return scaleProjection(geoAlbersUsa, 0.7463, 0.4673);\n case \"albers\":\n return conicProjection(geoAlbers, 0.7463, 0.4673);\n case \"azimuthal-equal-area\":\n return scaleProjection(geoAzimuthalEqualArea, 4, 4);\n case \"azimuthal-equidistant\":\n return scaleProjection(geoAzimuthalEquidistant, tau, tau);\n case \"conic-conformal\":\n return conicProjection(geoConicConformal, tau, tau);\n case \"conic-equal-area\":\n return conicProjection(geoConicEqualArea, 6.1702, 2.9781);\n case \"conic-equidistant\":\n return conicProjection(geoConicEquidistant, 7.312, 3.6282);\n case \"equal-earth\":\n return scaleProjection(geoEqualEarth, 5.4133, 2.6347);\n case \"equirectangular\":\n return scaleProjection(geoEquirectangular, tau, pi);\n case \"gnomonic\":\n return scaleProjection(geoGnomonic, 3.4641, 3.4641);\n case \"identity\":\n return { type: identity };\n case \"reflect-y\":\n return { type: reflectY };\n case \"mercator\":\n return scaleProjection(geoMercator, tau, tau);\n case \"orthographic\":\n return scaleProjection(geoOrthographic, 2, 2);\n case \"stereographic\":\n return scaleProjection(geoStereographic, 2, 2);\n case \"transverse-mercator\":\n return scaleProjection(geoTransverseMercator, tau, tau);\n default:\n throw new Error(`unknown projection type: ${projection}`);\n }\n}\nfunction maybePostClip(clip, x1, y1, x2, y2) {\n if (clip === false || clip == null || typeof clip === \"number\")\n return (s) => s;\n if (clip === true)\n clip = \"frame\";\n switch (`${clip}`.toLowerCase()) {\n case \"frame\":\n return geoClipRectangle(x1, y1, x2, y2);\n default:\n throw new Error(`unknown projection clip type: ${clip}`);\n }\n}\nfunction scaleProjection(createProjection, kx, ky) {\n return {\n type: ({ width, height, rotate, precision = 0.15, clip }) => {\n const projection = createProjection();\n if (precision != null)\n projection.precision?.(precision);\n if (rotate != null)\n projection.rotate?.(rotate);\n if (typeof clip === \"number\")\n projection.clipAngle?.(clip);\n projection.scale(Math.min(width / kx, height / ky));\n projection.translate([width / 2, height / 2]);\n return projection;\n },\n aspectRatio: ky / kx\n };\n}\nfunction conicProjection(createProjection, kx, ky) {\n const { type, aspectRatio } = scaleProjection(createProjection, kx, ky);\n return {\n type: (options) => {\n const { parallels, domain, width, height } = options;\n const projection = type(options);\n if (parallels != null) {\n projection.parallels(parallels);\n if (domain === undefined) {\n projection.fitSize([width, height], { type: \"Sphere\" });\n }\n }\n return projection;\n },\n aspectRatio\n };\n}\nconst identity = constant({ stream: (stream) => stream });\nconst reflectY = constant(geoTransform({\n point(x, y) {\n this.stream.point(x, -y);\n }\n}));\n// Applies a point-wise projection to the given paired x and y channels.\n// Note: mutates values!\nexport function maybeProject(cx, cy, channels, values, context) {\n const x = channels[cx] && channels[cx].scale === \"x\";\n const y = channels[cy] && channels[cy].scale === \"y\";\n if (x && y) {\n project(cx, cy, values, context.projection);\n }\n else if (x) {\n throw new Error(`projection requires paired x and y channels; ${cx} is missing ${cy}`);\n }\n else if (y) {\n throw new Error(`projection requires paired x and y channels; ${cy} is missing ${cx}`);\n }\n}\nfunction project(cx, cy, values, projection) {\n const x = values[cx];\n const y = values[cy];\n const n = x.length;\n const X = (values[cx] = new Float64Array(n).fill(NaN));\n const Y = (values[cy] = new Float64Array(n).fill(NaN));\n let i;\n const stream = projection.stream({\n point(x, y) {\n X[i] = x;\n Y[i] = y;\n }\n });\n for (i = 0; i < n; ++i) {\n stream.point(x[i], y[i]);\n }\n}\n// When a named projection is specified, we can use its natural aspect ratio to\n// determine a good value for the projection’s height based on the desired\n// width. When we don’t have a way to know, the golden ratio is our best guess.\n// Due to a circular dependency (we need to know the height before we can\n// construct the projection), we have to test the raw projection option rather\n// than the materialized projection; therefore we must be extremely careful that\n// the logic of this function exactly matches Projection above!\nexport function projectionAspectRatio(projection, marks) {\n if (typeof projection?.stream === \"function\")\n return defaultAspectRatio;\n if (isObject(projection))\n projection = projection.type;\n if (projection == null)\n return hasGeometry(marks) ? defaultAspectRatio : undefined;\n if (typeof projection !== \"function\") {\n const { aspectRatio } = namedProjection(projection);\n if (aspectRatio)\n return aspectRatio;\n }\n return defaultAspectRatio;\n}\n// Extract the (possibly) scaled values for the x and y channels, and apply the\n// projection if any.\nexport function Position(channels, scales, context) {\n const { x, y } = channels;\n let position = {};\n if (x)\n position.x = x;\n if (y)\n position.y = y;\n position = valueObject(position, scales);\n if (context.projection)\n maybeProject(\"x\", \"y\", channels, position, context);\n if (x)\n position.x = coerceNumbers(position.x);\n if (y)\n position.y = coerceNumbers(position.y);\n return position;\n}\nfunction hasGeometry(marks) {\n for (const mark of marks)\n if (mark.channels.geometry)\n return true;\n return false;\n}\n","import { creator, select } from \"d3\";\nimport { Projection } from \"./projection.js\";\nexport function Context(options = {}, dimensions) {\n const { document = typeof window !== \"undefined\" ? window.document : undefined } = options;\n return { document, projection: Projection(options, dimensions) };\n}\nexport function create(name, { document }) {\n return select(creator(name).call(document.documentElement));\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function memoize1(compute) {\n let cacheValue, cacheKeys;\n return (...keys) => {\n if (cacheKeys?.length !== keys.length || cacheKeys.some((k, i) => k !== keys[i])) {\n cacheKeys = keys;\n cacheValue = compute(...keys);\n }\n return cacheValue;\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { format as isoFormat } from \"isoformat\";\nimport { string } from \"./options.js\";\nimport { memoize1 } from \"./memoize.js\";\nconst numberFormat = memoize1((locale) => new Intl.NumberFormat(locale));\nconst monthFormat = memoize1((locale, month) => new Intl.DateTimeFormat(locale, { timeZone: \"UTC\", ...(month && { month }) }));\nconst weekdayFormat = memoize1((locale, weekday) => new Intl.DateTimeFormat(locale, { timeZone: \"UTC\", ...(weekday && { weekday }) }));\nexport function formatNumber(locale = \"en-US\") {\n const format = numberFormat(locale);\n return (i) => (i != null && !isNaN(i) ? format.format(i) : undefined);\n}\n/** \n * ```js\n * Plot.formatMonth(\"es-MX\", \"long\")(0) // \"enero\"\n * ```\n * \n * Returns a function that formats a given month number (from 0 = January to 11 = December) according to the specified *locale* and *format*. The *locale* is a [BCP 47 language tag](https://tools.ietf.org/html/bcp47) and defaults to U.S. English. The *format* is a [month format](https://tc39.es/ecma402/#datetimeformat-objects): either *2-digit*, *numeric*, *narrow*, *short*, *long*; if not specified, it defaults to *short*.\n * \n */\nexport function formatMonth(locale = \"en-US\", format = \"short\") {\n const fmt = monthFormat(locale, format);\n return (i) => i != null && !isNaN((i = +new Date(Date.UTC(2000, +i)))) ? fmt.format(i) : undefined;\n}\n/** \n * ```js\n * Plot.formatWeekday(\"es-MX\", \"long\")(0) // \"domingo\"\n * ```\n * \n * Returns a function that formats a given week day number (from 0 = Sunday to 6 = Saturday) according to the specified *locale* and *format*. The *locale* is a [BCP 47 language tag](https://tools.ietf.org/html/bcp47) and defaults to U.S. English. The *format* is a [weekday format](https://tc39.es/ecma402/#datetimeformat-objects): either *narrow*, *short*, or *long*; if not specified, it defaults to *short*.\n * \n */\nexport function formatWeekday(locale = \"en-US\", format = \"short\") {\n const fmt = weekdayFormat(locale, format);\n return (i) => i != null && !isNaN((i = +new Date(Date.UTC(2001, 0, +i)))) ? fmt.format(i) : undefined;\n}\n/** \n * ```js\n * Plot.formatIsoDate(new Date(\"2020-01-01T00:00.000Z\")) // \"2020-01-01\"\n * ```\n * \n * Given a *date*, returns the shortest equivalent ISO 8601 UTC string. If the given *date* is not valid, returns `\"Invalid Date\"`.\n * \n */\nexport function formatIsoDate(date) {\n return isoFormat(date, \"Invalid Date\");\n}\nexport function formatAuto(locale = \"en-US\") {\n const number = formatNumber(locale);\n return (v) => (v instanceof Date ? formatIsoDate : typeof v === \"number\" ? number : string)(v);\n}\n// TODO When Plot supports a top-level locale option, this should be removed\n// because it lacks context to know which locale to use; formatAuto should be\n// used instead whenever possible.\nexport const formatDefault = formatAuto();\n","import { geoPath, group, namespaces } from \"d3\";\nimport { create } from \"./context.js\";\nimport { defined, nonempty } from \"./defined.js\";\nimport { formatDefault } from \"./format.js\";\nimport { string, number, maybeColorChannel, maybeNumberChannel, maybeKeyword, isNoneish, isNone, isRound, keyof } from \"./options.js\";\nimport { warn } from \"./warnings.js\";\nexport const offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5;\nlet nextClipId = 0;\nfunction getClipId() {\n return `plot-clip-${++nextClipId}`;\n}\nexport function styles(mark, { title, href, ariaLabel: variaLabel, ariaDescription, ariaHidden, target, fill, fillOpacity, stroke, strokeWidth, strokeOpacity, strokeLinejoin, strokeLinecap, strokeMiterlimit, strokeDasharray, strokeDashoffset, opacity, mixBlendMode, paintOrder, pointerEvents, shapeRendering }, { ariaLabel: cariaLabel, fill: defaultFill = \"currentColor\", fillOpacity: defaultFillOpacity, stroke: defaultStroke = \"none\", strokeOpacity: defaultStrokeOpacity, strokeWidth: defaultStrokeWidth, strokeLinecap: defaultStrokeLinecap, strokeLinejoin: defaultStrokeLinejoin, strokeMiterlimit: defaultStrokeMiterlimit, paintOrder: defaultPaintOrder }) {\n // Some marks don’t support fill (e.g., tick and rule).\n if (defaultFill === null) {\n fill = null;\n fillOpacity = null;\n }\n // Some marks don’t support stroke (e.g., image).\n if (defaultStroke === null) {\n stroke = null;\n strokeOpacity = null;\n }\n // Some marks default to fill with no stroke, while others default to stroke\n // with no fill. For example, bar and area default to fill, while dot and line\n // default to stroke. For marks that fill by default, the default fill only\n // applies if the stroke is (constant) none; if you set a stroke, then the\n // default fill becomes none. Similarly for marks that stroke by stroke, the\n // default stroke only applies if the fill is (constant) none.\n if (isNoneish(defaultFill)) {\n if (!isNoneish(defaultStroke) && !isNoneish(fill))\n defaultStroke = \"none\";\n }\n else {\n if (isNoneish(defaultStroke) && !isNoneish(stroke))\n defaultFill = \"none\";\n }\n const [vfill, cfill] = maybeColorChannel(fill, defaultFill);\n const [vfillOpacity, cfillOpacity] = maybeNumberChannel(fillOpacity, defaultFillOpacity);\n const [vstroke, cstroke] = maybeColorChannel(stroke, defaultStroke);\n const [vstrokeOpacity, cstrokeOpacity] = maybeNumberChannel(strokeOpacity, defaultStrokeOpacity);\n const [vopacity, copacity] = maybeNumberChannel(opacity);\n // For styles that have no effect if there is no stroke, only apply the\n // defaults if the stroke is not the constant none. (If stroke is a channel,\n // then cstroke will be undefined, but there’s still a stroke; hence we don’t\n // use isNoneish here.)\n if (!isNone(cstroke)) {\n if (strokeWidth === undefined)\n strokeWidth = defaultStrokeWidth;\n if (strokeLinecap === undefined)\n strokeLinecap = defaultStrokeLinecap;\n if (strokeLinejoin === undefined)\n strokeLinejoin = defaultStrokeLinejoin;\n // The default stroke miterlimit need not be applied if the current stroke\n // is the constant round; this only has effect on miter joins.\n if (strokeMiterlimit === undefined && !isRound(strokeLinejoin))\n strokeMiterlimit = defaultStrokeMiterlimit;\n // The paint order only takes effect if there is both a fill and a stroke\n // (at least if we ignore markers, which no built-in marks currently use).\n if (!isNone(cfill) && paintOrder === undefined)\n paintOrder = defaultPaintOrder;\n }\n const [vstrokeWidth, cstrokeWidth] = maybeNumberChannel(strokeWidth);\n // Some marks don’t support fill (e.g., tick and rule).\n if (defaultFill !== null) {\n mark.fill = impliedString(cfill, \"currentColor\");\n mark.fillOpacity = impliedNumber(cfillOpacity, 1);\n }\n // Some marks don’t support stroke (e.g., image).\n if (defaultStroke !== null) {\n mark.stroke = impliedString(cstroke, \"none\");\n mark.strokeWidth = impliedNumber(cstrokeWidth, 1);\n mark.strokeOpacity = impliedNumber(cstrokeOpacity, 1);\n mark.strokeLinejoin = impliedString(strokeLinejoin, \"miter\");\n mark.strokeLinecap = impliedString(strokeLinecap, \"butt\");\n mark.strokeMiterlimit = impliedNumber(strokeMiterlimit, 4);\n mark.strokeDasharray = impliedString(strokeDasharray, \"none\");\n mark.strokeDashoffset = impliedString(strokeDashoffset, \"0\");\n }\n mark.target = string(target);\n mark.ariaLabel = string(cariaLabel);\n mark.ariaDescription = string(ariaDescription);\n mark.ariaHidden = string(ariaHidden);\n mark.opacity = impliedNumber(copacity, 1);\n mark.mixBlendMode = impliedString(mixBlendMode, \"normal\");\n mark.paintOrder = impliedString(paintOrder, \"normal\");\n mark.pointerEvents = impliedString(pointerEvents, \"auto\");\n mark.shapeRendering = impliedString(shapeRendering, \"auto\");\n return {\n title: { value: title, optional: true },\n href: { value: href, optional: true },\n ariaLabel: { value: variaLabel, optional: true },\n fill: { value: vfill, scale: \"auto\", optional: true },\n fillOpacity: { value: vfillOpacity, scale: \"opacity\", optional: true },\n stroke: { value: vstroke, scale: \"auto\", optional: true },\n strokeOpacity: { value: vstrokeOpacity, scale: \"opacity\", optional: true },\n strokeWidth: { value: vstrokeWidth, optional: true },\n opacity: { value: vopacity, scale: \"opacity\", optional: true }\n };\n}\n// Applies the specified titles via selection.call.\nexport function applyTitle(selection, L) {\n if (L)\n selection\n .filter((i) => nonempty(L[i]))\n .append(\"title\")\n .call(applyText, L);\n}\n// Like applyTitle, but for grouped data (lines, areas).\nexport function applyTitleGroup(selection, L) {\n if (L)\n selection\n .filter(([i]) => nonempty(L[i]))\n .append(\"title\")\n .call(applyTextGroup, L);\n}\nexport function applyText(selection, T) {\n if (T)\n selection.text((i) => formatDefault(T[i]));\n}\nexport function applyTextGroup(selection, T) {\n if (T)\n selection.text(([i]) => formatDefault(T[i]));\n}\nexport function applyChannelStyles(selection, { target }, { ariaLabel: AL, title: T, fill: F, fillOpacity: FO, stroke: S, strokeOpacity: SO, strokeWidth: SW, opacity: O, href: H }) {\n if (AL)\n applyAttr(selection, \"aria-label\", (i) => AL[i]);\n if (F)\n applyAttr(selection, \"fill\", (i) => F[i]);\n if (FO)\n applyAttr(selection, \"fill-opacity\", (i) => FO[i]);\n if (S)\n applyAttr(selection, \"stroke\", (i) => S[i]);\n if (SO)\n applyAttr(selection, \"stroke-opacity\", (i) => SO[i]);\n if (SW)\n applyAttr(selection, \"stroke-width\", (i) => SW[i]);\n if (O)\n applyAttr(selection, \"opacity\", (i) => O[i]);\n if (H)\n applyHref(selection, (i) => H[i], target);\n applyTitle(selection, T);\n}\nexport function applyGroupedChannelStyles(selection, { target }, { ariaLabel: AL, title: T, fill: F, fillOpacity: FO, stroke: S, strokeOpacity: SO, strokeWidth: SW, opacity: O, href: H }) {\n if (AL)\n applyAttr(selection, \"aria-label\", ([i]) => AL[i]);\n if (F)\n applyAttr(selection, \"fill\", ([i]) => F[i]);\n if (FO)\n applyAttr(selection, \"fill-opacity\", ([i]) => FO[i]);\n if (S)\n applyAttr(selection, \"stroke\", ([i]) => S[i]);\n if (SO)\n applyAttr(selection, \"stroke-opacity\", ([i]) => SO[i]);\n if (SW)\n applyAttr(selection, \"stroke-width\", ([i]) => SW[i]);\n if (O)\n applyAttr(selection, \"opacity\", ([i]) => O[i]);\n if (H)\n applyHref(selection, ([i]) => H[i], target);\n applyTitleGroup(selection, T);\n}\nfunction groupAesthetics({ ariaLabel: AL, title: T, fill: F, fillOpacity: FO, stroke: S, strokeOpacity: SO, strokeWidth: SW, opacity: O, href: H }) {\n return [AL, T, F, FO, S, SO, SW, O, H].filter((c) => c !== undefined);\n}\nexport function groupZ(I, Z, z) {\n const G = group(I, (i) => Z[i]);\n if (z === undefined && G.size > I.length >> 1) {\n warn(`Warning: the implicit z channel has high cardinality. This may occur when the fill or stroke channel is associated with quantitative data rather than ordinal or categorical data. You can suppress this warning by setting the z option explicitly; if this data represents a single series, set z to null.`);\n }\n return G.values();\n}\nexport function* groupIndex(I, position, { z }, channels) {\n const { z: Z } = channels; // group channel\n const A = groupAesthetics(channels); // aesthetic channels\n const C = [...position, ...A]; // all channels\n // Group the current index by Z (if any).\n for (const G of Z ? groupZ(I, Z, z) : [I]) {\n let Ag; // the A-values (aesthetics) of the current group, if any\n let Gg; // the current group index (a subset of G, and I), if any\n out: for (const i of G) {\n // If any channel has an undefined value for this index, skip it.\n for (const c of C) {\n if (!defined(c[i])) {\n if (Gg)\n Gg.push(-1);\n continue out;\n }\n }\n // Otherwise, if this is a new group, record the aesthetics for this\n // group. Yield the current group and start a new one.\n if (Ag === undefined) {\n if (Gg)\n yield Gg;\n (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n continue;\n }\n // Otherwise, add the current index to the current group. Then, if any of\n // the aesthetics don’t match the current group, yield the current group\n // and start a new group of the current index.\n Gg.push(i);\n for (let j = 0; j < A.length; ++j) {\n const k = keyof(A[j][i]);\n if (k !== Ag[j]) {\n yield Gg;\n (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n continue out;\n }\n }\n }\n // Yield the current group, if any.\n if (Gg)\n yield Gg;\n }\n}\n// TODO Accept other types of clips (paths, urls, x, y, other marks…)?\n// https://github.com/observablehq/plot/issues/181\nexport function maybeClip(clip) {\n if (clip === true)\n clip = \"frame\";\n else if (clip === false)\n clip = null;\n return maybeKeyword(clip, \"clip\", [\"frame\", \"sphere\"]);\n}\n// Note: may mutate selection.node!\nfunction applyClip(selection, mark, dimensions, context) {\n let clipUrl;\n switch (mark.clip) {\n case \"frame\": {\n const { width, height, marginLeft, marginRight, marginTop, marginBottom } = dimensions;\n const id = getClipId();\n clipUrl = `url(#${id})`;\n selection = create(\"svg:g\", context)\n .call((g) => g\n .append(\"svg:clipPath\")\n .attr(\"id\", id)\n .append(\"rect\")\n .attr(\"x\", marginLeft)\n .attr(\"y\", marginTop)\n .attr(\"width\", width - marginRight - marginLeft)\n .attr(\"height\", height - marginTop - marginBottom))\n .each(function () {\n this.appendChild(selection.node());\n selection.node = () => this; // Note: mutation!\n });\n break;\n }\n case \"sphere\": {\n const { projection } = context;\n if (!projection)\n throw new Error(`the \"sphere\" clip option requires a projection`);\n const id = getClipId();\n clipUrl = `url(#${id})`;\n selection\n .append(\"clipPath\")\n .attr(\"id\", id)\n .append(\"path\")\n .attr(\"d\", geoPath(projection)({ type: \"Sphere\" }));\n break;\n }\n }\n // Here we’re careful to apply the ARIA attributes to the outer G element when\n // clipping is applied, and to apply the ARIA attributes before any other\n // attributes (for readability).\n applyAttr(selection, \"aria-label\", mark.ariaLabel);\n applyAttr(selection, \"aria-description\", mark.ariaDescription);\n applyAttr(selection, \"aria-hidden\", mark.ariaHidden);\n applyAttr(selection, \"clip-path\", clipUrl);\n}\n// Note: may mutate selection.node!\nexport function applyIndirectStyles(selection, mark, dimensions, context) {\n applyClip(selection, mark, dimensions, context);\n applyAttr(selection, \"fill\", mark.fill);\n applyAttr(selection, \"fill-opacity\", mark.fillOpacity);\n applyAttr(selection, \"stroke\", mark.stroke);\n applyAttr(selection, \"stroke-width\", mark.strokeWidth);\n applyAttr(selection, \"stroke-opacity\", mark.strokeOpacity);\n applyAttr(selection, \"stroke-linejoin\", mark.strokeLinejoin);\n applyAttr(selection, \"stroke-linecap\", mark.strokeLinecap);\n applyAttr(selection, \"stroke-miterlimit\", mark.strokeMiterlimit);\n applyAttr(selection, \"stroke-dasharray\", mark.strokeDasharray);\n applyAttr(selection, \"stroke-dashoffset\", mark.strokeDashoffset);\n applyAttr(selection, \"shape-rendering\", mark.shapeRendering);\n applyAttr(selection, \"paint-order\", mark.paintOrder);\n applyAttr(selection, \"pointer-events\", mark.pointerEvents);\n}\nexport function applyDirectStyles(selection, mark) {\n applyStyle(selection, \"mix-blend-mode\", mark.mixBlendMode);\n applyAttr(selection, \"opacity\", mark.opacity);\n}\nfunction applyHref(selection, href, target) {\n selection.each(function (i) {\n const h = href(i);\n if (h != null) {\n const a = this.ownerDocument.createElementNS(namespaces.svg, \"a\");\n a.setAttribute(\"fill\", \"inherit\");\n a.setAttributeNS(namespaces.xlink, \"href\", h);\n if (target != null)\n a.setAttribute(\"target\", target);\n this.parentNode.insertBefore(a, this).appendChild(this);\n }\n });\n}\nexport function applyAttr(selection, name, value) {\n if (value != null)\n selection.attr(name, value);\n}\nexport function applyStyle(selection, name, value) {\n if (value != null)\n selection.style(name, value);\n}\nexport function applyTransform(selection, mark, { x, y }, tx = offset, ty = offset) {\n tx += mark.dx;\n ty += mark.dy;\n if (x?.bandwidth)\n tx += x.bandwidth() / 2;\n if (y?.bandwidth)\n ty += y.bandwidth() / 2;\n if (tx || ty)\n selection.attr(\"transform\", `translate(${tx},${ty})`);\n}\nexport function impliedString(value, impliedValue) {\n if ((value = string(value)) !== impliedValue)\n return value;\n}\nexport function impliedNumber(value, impliedValue) {\n if ((value = number(value)) !== impliedValue)\n return value;\n}\nconst validClassName = /^-?([_a-z]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])([_a-z0-9-]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])*$/;\nexport function maybeClassName(name) {\n if (name === undefined)\n return `plot-${Math.random().toString(16).slice(2)}`;\n name = `${name}`;\n if (!validClassName.test(name))\n throw new Error(`invalid class name: ${name}`);\n return name;\n}\nexport function applyInlineStyles(selection, style) {\n if (typeof style === \"string\") {\n selection.property(\"style\", style);\n }\n else if (style != null) {\n for (const element of selection) {\n Object.assign(element.style, style);\n }\n }\n}\nexport function applyFrameAnchor({ frameAnchor }, { width, height, marginTop, marginRight, marginBottom, marginLeft }) {\n return [\n /left$/.test(frameAnchor)\n ? marginLeft\n : /right$/.test(frameAnchor)\n ? width - marginRight\n : (marginLeft + width - marginRight) / 2,\n /^top/.test(frameAnchor)\n ? marginTop\n : /^bottom/.test(frameAnchor)\n ? height - marginBottom\n : (marginTop + height - marginBottom) / 2\n ];\n}\n","import { extent } from \"d3\";\nimport { projectionAspectRatio } from \"./projection.js\";\nimport { isOrdinalScale } from \"./scales.js\";\nimport { offset } from \"./style.js\";\nexport function Dimensions(scales, marks, options = {}) {\n // Compute the default margins: the maximum of the marks’ margins. While not\n // always used, they may be needed to compute the default height of the plot.\n let marginTopDefault = 0.5 - offset, marginRightDefault = 0.5 + offset, marginBottomDefault = 0.5 + offset, marginLeftDefault = 0.5 - offset;\n for (const { marginTop, marginRight, marginBottom, marginLeft } of marks) {\n if (marginTop > marginTopDefault)\n marginTopDefault = marginTop;\n if (marginRight > marginRightDefault)\n marginRightDefault = marginRight;\n if (marginBottom > marginBottomDefault)\n marginBottomDefault = marginBottom;\n if (marginLeft > marginLeftDefault)\n marginLeftDefault = marginLeft;\n }\n // Compute the actual margins. The order of precedence is: the side-specific\n // margin options, then the global margin option, then the defaults.\n let { margin, marginTop = margin !== undefined ? margin : marginTopDefault, marginRight = margin !== undefined ? margin : marginRightDefault, marginBottom = margin !== undefined ? margin : marginBottomDefault, marginLeft = margin !== undefined ? margin : marginLeftDefault } = options;\n // Coerce the margin options to numbers.\n marginTop = +marginTop;\n marginRight = +marginRight;\n marginBottom = +marginBottom;\n marginLeft = +marginLeft;\n // Compute the outer dimensions of the plot. If the top and bottom margins are\n // specified explicitly, adjust the automatic height accordingly.\n let { width = 640, height = autoHeight(scales, marks, options, {\n width,\n marginTopDefault,\n marginRightDefault,\n marginBottomDefault,\n marginLeftDefault\n }) + Math.max(0, marginTop - marginTopDefault + marginBottom - marginBottomDefault) } = options;\n // Coerce the width and height.\n width = +width;\n height = +height;\n const dimensions = {\n width,\n height,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft\n };\n // Compute the facet margins.\n if (scales.fx || scales.fy) {\n let { margin: facetMargin, marginTop: facetMarginTop = facetMargin !== undefined ? facetMargin : marginTop, marginRight: facetMarginRight = facetMargin !== undefined ? facetMargin : marginRight, marginBottom: facetMarginBottom = facetMargin !== undefined ? facetMargin : marginBottom, marginLeft: facetMarginLeft = facetMargin !== undefined ? facetMargin : marginLeft } = options.facet ?? {};\n // Coerce the facet margin options to numbers.\n facetMarginTop = +facetMarginTop;\n facetMarginRight = +facetMarginRight;\n facetMarginBottom = +facetMarginBottom;\n facetMarginLeft = +facetMarginLeft;\n dimensions.facet = {\n marginTop: facetMarginTop,\n marginRight: facetMarginRight,\n marginBottom: facetMarginBottom,\n marginLeft: facetMarginLeft\n };\n }\n return dimensions;\n}\nfunction autoHeight({ x, y, fy, fx }, marks, { projection, aspectRatio }, { width, marginTopDefault, marginRightDefault, marginBottomDefault, marginLeftDefault }) {\n const nfy = fy ? fy.scale.domain().length : 1;\n // If a projection is specified, use its natural aspect ratio (if known).\n const ar = projectionAspectRatio(projection, marks);\n if (ar) {\n const nfx = fx ? fx.scale.domain().length : 1;\n const far = ((1.1 * nfy - 0.1) / (1.1 * nfx - 0.1)) * ar; // 0.1 is default facet padding\n const lar = Math.max(0.1, Math.min(10, far)); // clamp the aspect ratio to a “reasonable” value\n return Math.round((width - marginLeftDefault - marginRightDefault) * lar + marginTopDefault + marginBottomDefault);\n }\n const ny = y ? (isOrdinalScale(y) ? y.scale.domain().length : Math.max(7, 17 / nfy)) : 1;\n // If a desired aspect ratio is given, compute a default height to match.\n if (aspectRatio != null) {\n aspectRatio = +aspectRatio;\n if (!(isFinite(aspectRatio) && aspectRatio > 0))\n throw new Error(`invalid aspectRatio: ${aspectRatio}`);\n const ratio = aspectRatioLength(\"y\", y) / (aspectRatioLength(\"x\", x) * aspectRatio);\n const fxb = fx ? fx.scale.bandwidth() : 1;\n const fyb = fy ? fy.scale.bandwidth() : 1;\n const w = fxb * (width - marginLeftDefault - marginRightDefault) - x.insetLeft - x.insetRight;\n return (ratio * w + y.insetTop + y.insetBottom) / fyb + marginTopDefault + marginBottomDefault;\n }\n return !!(y || fy) * Math.max(1, Math.min(60, ny * nfy)) * 20 + !!fx * 30 + 60;\n}\nfunction aspectRatioLength(k, scale) {\n if (!scale)\n throw new Error(`aspectRatio requires ${k} scale`);\n const { type, domain } = scale;\n let transform;\n switch (type) {\n case \"linear\":\n case \"utc\":\n case \"time\":\n transform = Number;\n break;\n case \"pow\": {\n const exponent = scale.scale.exponent();\n transform = (x) => Math.pow(x, exponent);\n break;\n }\n case \"log\":\n transform = Math.log;\n break;\n case \"point\":\n case \"band\":\n return domain.length;\n default:\n throw new Error(`unsupported ${k} scale for aspectRatio: ${type}`);\n }\n const [min, max] = extent(domain);\n return Math.abs(transform(max) - transform(min));\n}\n","import { cross, rollup, sum } from \"d3\";\nimport { range } from \"./options.js\";\nimport { Scales } from \"./scales.js\";\n// Returns an array of {x?, y?, i} objects representing the facet domain.\nexport function Facets(channelsByScale, options) {\n const { fx, fy } = Scales(channelsByScale, options);\n const fxDomain = fx?.scale.domain();\n const fyDomain = fy?.scale.domain();\n return fxDomain && fyDomain\n ? cross(fxDomain, fyDomain).map(([x, y], i) => ({ x, y, i }))\n : fxDomain\n ? fxDomain.map((x, i) => ({ x, i }))\n : fyDomain\n ? fyDomain.map((y, i) => ({ y, i }))\n : undefined;\n}\n// Returns an accessor function that returns the order of the given facet value\n// in the associated facet scales’ domains.\nexport function facetOrder({ x: X, y: Y }) {\n const xi = X && new Map(X.map((v, i) => [v, i]));\n const yi = Y && new Map(Y.map((v, i) => [v, i]));\n return X && Y\n ? (a, b) => xi.get(a.x) - xi.get(b.x) || yi.get(a.y) - yi.get(b.y)\n : X\n ? (a, b) => xi.get(a.x) - xi.get(b.x)\n : (a, b) => yi.get(a.y) - yi.get(b.y);\n}\n// Returns a (possibly nested) Map of [[key1, index1], [key2, index2], …]\n// representing the data indexes associated with each facet.\nexport function facetGroups(data, { fx, fy }) {\n const I = range(data);\n const FX = fx?.value;\n const FY = fy?.value;\n return fx && fy\n ? rollup(I, (G) => ((G.fx = FX[G[0]]), (G.fy = FY[G[0]]), G), (i) => FX[i], (i) => FY[i])\n : fx\n ? rollup(I, (G) => ((G.fx = FX[G[0]]), G), (i) => FX[i])\n : rollup(I, (G) => ((G.fy = FY[G[0]]), G), (i) => FY[i]);\n}\nexport function facetTranslate(fx, fy, { marginTop, marginLeft }) {\n return fx && fy\n ? ({ x, y }) => `translate(${fx(x) - marginLeft},${fy(y) - marginTop})`\n : fx\n ? ({ x }) => `translate(${fx(x) - marginLeft},0)`\n : ({ y }) => `translate(0,${fy(y) - marginTop})`;\n}\n// Returns an index that for each facet lists all the elements present in other\n// facets in the original index. TODO Memoize to avoid repeated work?\nexport function facetExclude(index) {\n const ex = [];\n const e = new Uint32Array(sum(index, (d) => d.length));\n for (const i of index) {\n let n = 0;\n for (const j of index) {\n if (i === j)\n continue;\n e.set(j, n);\n n += j.length;\n }\n ex.push(e.slice(0, n));\n }\n return ex;\n}\nconst facetAnchors = new Map([\n [\"top\", facetAnchorTop],\n [\"right\", facetAnchorRight],\n [\"bottom\", facetAnchorBottom],\n [\"left\", facetAnchorLeft],\n [\"top-left\", and(facetAnchorTop, facetAnchorLeft)],\n [\"top-right\", and(facetAnchorTop, facetAnchorRight)],\n [\"bottom-left\", and(facetAnchorBottom, facetAnchorLeft)],\n [\"bottom-right\", and(facetAnchorBottom, facetAnchorRight)],\n [\"top-empty\", facetAnchorTopEmpty],\n [\"right-empty\", facetAnchorRightEmpty],\n [\"bottom-empty\", facetAnchorBottomEmpty],\n [\"left-empty\", facetAnchorLeftEmpty],\n [\"empty\", facetAnchorEmpty]\n]);\nexport function maybeFacetAnchor(facetAnchor) {\n if (facetAnchor == null)\n return null;\n const anchor = facetAnchors.get(`${facetAnchor}`.toLowerCase());\n if (anchor)\n return anchor;\n throw new Error(`invalid facet anchor: ${facetAnchor}`);\n}\nfunction facetAnchorTop(facets, { y: Y }, { y }) {\n return Y ? Y.indexOf(y) === 0 : true;\n}\nfunction facetAnchorBottom(facets, { y: Y }, { y }) {\n return Y ? Y.indexOf(y) === Y.length - 1 : true;\n}\nfunction facetAnchorLeft(facets, { x: X }, { x }) {\n return X ? X.indexOf(x) === 0 : true;\n}\nfunction facetAnchorRight(facets, { x: X }, { x }) {\n return X ? X.indexOf(x) === X.length - 1 : true;\n}\nfunction facetAnchorTopEmpty(facets, { y: Y }, { x, y, empty }) {\n if (empty)\n return false;\n const i = Y?.indexOf(y);\n if (i > 0) {\n const y = Y[i - 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorBottomEmpty(facets, { y: Y }, { x, y, empty }) {\n if (empty)\n return false;\n const i = Y?.indexOf(y);\n if (i < Y?.length - 1) {\n const y = Y[i + 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorLeftEmpty(facets, { x: X }, { x, y, empty }) {\n if (empty)\n return false;\n const i = X?.indexOf(x);\n if (i > 0) {\n const x = X[i - 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorRightEmpty(facets, { x: X }, { x, y, empty }) {\n if (empty)\n return false;\n const i = X?.indexOf(x);\n if (i < X?.length - 1) {\n const x = X[i + 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorEmpty(facets, channels, { empty }) {\n return empty;\n}\nfunction and(a, b) {\n return function () {\n return a.apply(null, arguments) && b.apply(null, arguments);\n };\n}\n// Facet filter, by mark; for now only the \"eq\" filter is provided.\nexport function facetFilter(facets, { channels: { fx, fy }, groups }) {\n return fx && fy\n ? facets.map(({ x, y }) => groups.get(x)?.get(y) ?? [])\n : fx\n ? facets.map(({ x }) => groups.get(x) ?? [])\n : facets.map(({ y }) => groups.get(y) ?? []);\n}\n","import { format, utcFormat } from \"d3\";\nimport { formatIsoDate } from \"./format.js\";\nimport { constant, isTemporal, string } from \"./options.js\";\nimport { isOrdinalScale } from \"./scales.js\";\nexport function inferFontVariant(scale) {\n return isOrdinalScale(scale) && scale.interval === undefined ? undefined : \"tabular-nums\";\n}\n// D3 doesn’t provide a tick format for ordinal scales; we want shorthand when\n// an ordinal domain is numbers or dates, and we want null to mean the empty\n// string, not the default identity format. TODO Remove this in favor of the\n// axis mark’s inferTickFormat.\nexport function maybeAutoTickFormat(tickFormat, domain) {\n return tickFormat === undefined\n ? isTemporal(domain)\n ? formatIsoDate\n : string\n : typeof tickFormat === \"function\"\n ? tickFormat\n : (typeof tickFormat === \"string\" ? (isTemporal(domain) ? utcFormat : format) : constant)(tickFormat);\n}\n","import { quantize, interpolateNumber, piecewise, format, scaleBand, scaleLinear, axisBottom } from \"d3\";\nimport { inferFontVariant } from \"../axes.js\";\nimport { Context, create } from \"../context.js\";\nimport { map } from \"../options.js\";\nimport { interpolatePiecewise } from \"../scales/quantitative.js\";\nimport { applyInlineStyles, impliedString, maybeClassName } from \"../style.js\";\nexport function legendRamp(color, options) {\n let { label = color.label, tickSize = 6, width = 240, height = 44 + tickSize, marginTop = 18, marginRight = 0, marginBottom = 16 + tickSize, marginLeft = 0, style, ticks = (width - marginLeft - marginRight) / 64, tickFormat, fontVariant = inferFontVariant(color), round = true, className } = options;\n const context = Context(options);\n className = maybeClassName(className);\n if (tickFormat === null)\n tickFormat = () => null;\n const svg = create(\"svg\", context)\n .attr(\"class\", className)\n .attr(\"font-family\", \"system-ui, sans-serif\")\n .attr(\"font-size\", 10)\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"viewBox\", `0 0 ${width} ${height}`)\n .call((svg) => svg.append(\"style\").text(`\n .${className} {\n display: block;\n background: white;\n height: auto;\n height: intrinsic;\n max-width: 100%;\n overflow: visible;\n }\n .${className} text {\n white-space: pre;\n }\n `))\n .call(applyInlineStyles, style);\n let tickAdjust = (g) => g.selectAll(\".tick line\").attr(\"y1\", marginTop + marginBottom - height);\n let x;\n // Some D3 scales use scale.interpolate, some scale.interpolator, and some\n // scale.round; this normalizes the API so it works with all scale types.\n const applyRange = round ? (x, range) => x.rangeRound(range) : (x, range) => x.range(range);\n const { type, domain, range, interpolate, scale, pivot } = color;\n // Continuous\n if (interpolate) {\n // Often interpolate is a “fixed” interpolator on the [0, 1] interval, as\n // with a built-in color scheme, but sometimes it is a function that takes\n // two arguments and is used in conjunction with the range.\n const interpolator = range === undefined\n ? interpolate\n : piecewise(interpolate.length === 1 ? interpolatePiecewise(interpolate) : interpolate, range);\n // Construct a D3 scale of the same type, but with a range that evenly\n // divides the horizontal extent of the legend. (In the common case, the\n // domain.length is two, and so the range is simply the extent.) For a\n // diverging scale, we need an extra point in the range for the pivot such\n // that the pivot is always drawn in the middle.\n x = applyRange(scale.copy(), quantize(interpolateNumber(marginLeft, width - marginRight), Math.min(domain.length + (pivot !== undefined), range === undefined ? Infinity : range.length)));\n // Construct a 256×1 canvas, filling each pixel using the interpolator.\n const n = 256;\n const canvas = context.document.createElement(\"canvas\");\n canvas.width = n;\n canvas.height = 1;\n const context2 = canvas.getContext(\"2d\");\n for (let i = 0, j = n - 1; i < n; ++i) {\n context2.fillStyle = interpolator(i / j);\n context2.fillRect(i, 0, 1, 1);\n }\n svg\n .append(\"image\")\n .attr(\"x\", marginLeft)\n .attr(\"y\", marginTop)\n .attr(\"width\", width - marginLeft - marginRight)\n .attr(\"height\", height - marginTop - marginBottom)\n .attr(\"preserveAspectRatio\", \"none\")\n .attr(\"xlink:href\", canvas.toDataURL());\n }\n // Threshold\n else if (type === \"threshold\") {\n const thresholds = domain;\n const thresholdFormat = tickFormat === undefined ? (d) => d : typeof tickFormat === \"string\" ? format(tickFormat) : tickFormat;\n // Construct a linear scale with evenly-spaced ticks for each of the\n // thresholds; the domain extends one beyond the threshold extent.\n x = applyRange(scaleLinear().domain([-1, range.length - 1]), [marginLeft, width - marginRight]);\n svg\n .append(\"g\")\n .selectAll()\n .data(range)\n .enter()\n .append(\"rect\")\n .attr(\"x\", (d, i) => x(i - 1))\n .attr(\"y\", marginTop)\n .attr(\"width\", (d, i) => x(i) - x(i - 1))\n .attr(\"height\", height - marginTop - marginBottom)\n .attr(\"fill\", (d) => d);\n ticks = map(thresholds, (_, i) => i);\n tickFormat = (i) => thresholdFormat(thresholds[i], i);\n }\n // Ordinal (hopefully!)\n else {\n x = applyRange(scaleBand().domain(domain), [marginLeft, width - marginRight]);\n svg\n .append(\"g\")\n .selectAll()\n .data(domain)\n .enter()\n .append(\"rect\")\n .attr(\"x\", x)\n .attr(\"y\", marginTop)\n .attr(\"width\", Math.max(0, x.bandwidth() - 1))\n .attr(\"height\", height - marginTop - marginBottom)\n .attr(\"fill\", scale);\n tickAdjust = () => { };\n }\n svg\n .append(\"g\")\n .attr(\"transform\", `translate(0,${height - marginBottom})`)\n .call(axisBottom(x)\n .ticks(Array.isArray(ticks) ? null : ticks, typeof tickFormat === \"string\" ? tickFormat : undefined)\n .tickFormat(typeof tickFormat === \"function\" ? tickFormat : undefined)\n .tickSize(tickSize)\n .tickValues(Array.isArray(ticks) ? ticks : null))\n .attr(\"font-size\", null)\n .attr(\"font-family\", null)\n .attr(\"font-variant\", impliedString(fontVariant, \"normal\"))\n .call(tickAdjust)\n .call((g) => g.select(\".domain\").remove());\n if (label !== undefined) {\n svg\n .append(\"text\")\n .attr(\"x\", marginLeft)\n .attr(\"y\", marginTop - 6)\n .attr(\"fill\", \"currentColor\") // TODO move to stylesheet?\n .attr(\"font-weight\", \"bold\")\n .text(label);\n }\n return svg.node();\n}\n","import { pathRound as path } from \"d3\";\nimport { inferFontVariant, maybeAutoTickFormat } from \"../axes.js\";\nimport { Context, create } from \"../context.js\";\nimport { isNoneish, maybeColorChannel, maybeNumberChannel } from \"../options.js\";\nimport { isOrdinalScale, isThresholdScale } from \"../scales.js\";\nimport { applyInlineStyles, impliedString, maybeClassName } from \"../style.js\";\nfunction maybeScale(scale, key) {\n if (key == null)\n return key;\n const s = scale(key);\n if (!s)\n throw new Error(`scale not found: ${key}`);\n return s;\n}\nexport function legendSwatches(color, options) {\n if (!isOrdinalScale(color) && !isThresholdScale(color))\n throw new Error(`swatches legend requires ordinal or threshold color scale (not ${color.type})`);\n return legendItems(color, options, (selection, scale) => selection.append(\"svg\").attr(\"fill\", scale.scale).append(\"rect\").attr(\"width\", \"100%\").attr(\"height\", \"100%\"), (className) => `.${className}-swatch svg {\n width: var(--swatchWidth);\n height: var(--swatchHeight);\n margin-right: 0.5em;\n }`);\n}\nexport function legendSymbols(symbol, { fill = symbol.hint?.fill !== undefined ? symbol.hint.fill : \"none\", fillOpacity = 1, stroke = symbol.hint?.stroke !== undefined ? symbol.hint.stroke : isNoneish(fill) ? \"currentColor\" : \"none\", strokeOpacity = 1, strokeWidth = 1.5, r = 4.5, ...options } = {}, scale) {\n const [vf, cf] = maybeColorChannel(fill);\n const [vs, cs] = maybeColorChannel(stroke);\n const sf = maybeScale(scale, vf);\n const ss = maybeScale(scale, vs);\n const size = r * r * Math.PI;\n fillOpacity = maybeNumberChannel(fillOpacity)[1];\n strokeOpacity = maybeNumberChannel(strokeOpacity)[1];\n strokeWidth = maybeNumberChannel(strokeWidth)[1];\n return legendItems(symbol, options, (selection) => selection\n .append(\"svg\")\n .attr(\"viewBox\", \"-8 -8 16 16\")\n .attr(\"fill\", vf === \"color\" ? (d) => sf.scale(d) : null)\n .attr(\"stroke\", vs === \"color\" ? (d) => ss.scale(d) : null)\n .append(\"path\")\n .attr(\"d\", (d) => {\n const p = path();\n symbol.scale(d).draw(p, size);\n return p;\n }), (className) => `.${className}-swatch > svg {\n width: var(--swatchWidth);\n height: var(--swatchHeight);\n margin-right: 0.5em;\n overflow: visible;\n fill: ${cf};\n fill-opacity: ${fillOpacity};\n stroke: ${cs};\n stroke-width: ${strokeWidth}px;\n stroke-opacity: ${strokeOpacity};\n }`);\n}\nfunction legendItems(scale, options = {}, swatch, swatchStyle) {\n let { columns, tickFormat, fontVariant = inferFontVariant(scale), \n // TODO label,\n swatchSize = 15, swatchWidth = swatchSize, swatchHeight = swatchSize, marginLeft = 0, className, style, width } = options;\n const context = Context(options);\n className = maybeClassName(className);\n tickFormat = maybeAutoTickFormat(tickFormat, scale.domain);\n const swatches = create(\"div\", context)\n .attr(\"class\", className)\n .attr(\"style\", `\n --swatchWidth: ${+swatchWidth}px;\n --swatchHeight: ${+swatchHeight}px;\n `);\n let extraStyle;\n if (columns != null) {\n extraStyle = `\n .${className}-swatch {\n display: flex;\n align-items: center;\n break-inside: avoid;\n padding-bottom: 1px;\n }\n .${className}-swatch::before {\n flex-shrink: 0;\n }\n .${className}-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n `;\n swatches\n .style(\"columns\", columns)\n .selectAll()\n .data(scale.domain)\n .enter()\n .append(\"div\")\n .attr(\"class\", `${className}-swatch`)\n .call(swatch, scale)\n .call((item) => item.append(\"div\").attr(\"class\", `${className}-label`).attr(\"title\", tickFormat).text(tickFormat));\n }\n else {\n extraStyle = `\n .${className} {\n display: flex;\n align-items: center;\n min-height: 33px;\n flex-wrap: wrap;\n }\n .${className}-swatch {\n display: inline-flex;\n align-items: center;\n margin-right: 1em;\n }\n `;\n swatches\n .selectAll()\n .data(scale.domain)\n .enter()\n .append(\"span\")\n .attr(\"class\", `${className}-swatch`)\n .call(swatch, scale)\n .append(function () {\n return this.ownerDocument.createTextNode(tickFormat.apply(this, arguments));\n });\n }\n return swatches\n .call((div) => div.insert(\"style\", \"*\").text(`\n .${className} {\n font-family: system-ui, sans-serif;\n font-size: 10px;\n margin-bottom: 0.5em;${marginLeft === undefined\n ? \"\"\n : `\n margin-left: ${+marginLeft}px;`}${width === undefined\n ? \"\"\n : `\n width: ${width}px;`}\n }\n ${swatchStyle(className)}\n ${extraStyle}\n `))\n .style(\"font-variant\", impliedString(fontVariant, \"normal\"))\n .call(applyInlineStyles, style)\n .node();\n}\n","import { rgb } from \"d3\";\nimport { Context } from \"./context.js\";\nimport { legendRamp } from \"./legends/ramp.js\";\nimport { legendSwatches, legendSymbols } from \"./legends/swatches.js\";\nimport { inherit, isScaleOptions } from \"./options.js\";\nimport { normalizeScale } from \"./scales.js\";\nconst legendRegistry = new Map([\n [\"symbol\", legendSymbols],\n [\"color\", legendColor],\n [\"opacity\", legendOpacity]\n]);\n/** \n * Returns a standalone legend for the scale defined by the given *options* object. The *options* object must define at least one scale; see [Scale options](https://github.com/observablehq/plot/blob/main/README.md#scale-options) for how to define a scale. For example, here is a ramp legend of a linear color scale with the default domain of [0, 1] and default scheme *turbo*:\n * \n * ```js\n * Plot.legend({color: {type: \"linear\"}})\n * ```\n * \n * The *options* object may also include any additional legend options described in the previous section. For example, to make the above legend slightly wider:\n * \n * ```js\n * Plot.legend({\n * width: 320,\n * color: {\n * type: \"linear\"\n * }\n * })\n * ```\n * \n */\nexport function legend(options = {}) {\n for (const [key, value] of legendRegistry) {\n const scale = options[key];\n if (isScaleOptions(scale)) {\n // e.g., ignore {color: \"red\"}\n const context = Context(options);\n let hint;\n // For symbol legends, pass a hint to the symbol scale.\n if (key === \"symbol\") {\n const { fill, stroke = fill === undefined && isScaleOptions(options.color) ? \"color\" : undefined } = options;\n hint = { fill, stroke };\n }\n return value(normalizeScale(key, scale, hint), legendOptions(context, scale, options), (key) => isScaleOptions(options[key]) ? normalizeScale(key, options[key]) : null);\n }\n }\n throw new Error(\"unknown legend type; no scale found\");\n}\nexport function exposeLegends(scales, context, defaults = {}) {\n return (key, options) => {\n if (!legendRegistry.has(key))\n throw new Error(`unknown legend type: ${key}`);\n if (!(key in scales))\n return;\n return legendRegistry.get(key)(scales[key], legendOptions(context, defaults[key], options), (key) => scales[key]);\n };\n}\nfunction legendOptions(context, { label, ticks, tickFormat } = {}, options) {\n return inherit(options, context, { label, ticks, tickFormat });\n}\nfunction legendColor(color, { legend = true, ...options }) {\n if (legend === true)\n legend = color.type === \"ordinal\" ? \"swatches\" : \"ramp\";\n if (color.domain === undefined)\n return;\n switch (`${legend}`.toLowerCase()) {\n case \"swatches\":\n return legendSwatches(color, options);\n case \"ramp\":\n return legendRamp(color, options);\n default:\n throw new Error(`unknown legend type: ${legend}`);\n }\n}\nfunction legendOpacity({ type, interpolate, ...scale }, { legend = true, color = rgb(0, 0, 0), ...options }) {\n if (!interpolate)\n throw new Error(`${type} opacity scales are not supported`);\n if (legend === true)\n legend = \"ramp\";\n if (`${legend}`.toLowerCase() !== \"ramp\")\n throw new Error(`${legend} opacity legends are not supported`);\n return legendColor({ type, ...scale, interpolate: interpolateOpacity(color) }, { legend, ...options });\n}\nfunction interpolateOpacity(color) {\n const { r, g, b } = rgb(color) || rgb(0, 0, 0); // treat invalid color as black\n return (t) => `rgba(${r},${g},${b},${t})`;\n}\nexport function Legends(scales, context, options) {\n const legends = [];\n for (const [key, value] of legendRegistry) {\n const o = options[key];\n if (o?.legend && key in scales) {\n const legend = value(scales[key], legendOptions(context, scales[key], o), (key) => scales[key]);\n if (legend != null)\n legends.push(legend);\n }\n }\n return legends;\n}\n","import { Channels, channelDomain, valueObject } from \"./channel.js\";\nimport { defined } from \"./defined.js\";\nimport { maybeFacetAnchor } from \"./facet.js\";\nimport { arrayify, isDomainSort, isOptions, range } from \"./options.js\";\nimport { keyword, maybeNamed } from \"./options.js\";\nimport { maybeProject } from \"./projection.js\";\nimport { maybeClip, styles } from \"./style.js\";\nimport { basic, initializer } from \"./transforms/basic.js\";\nexport class Mark {\n constructor(data, channels = {}, options = {}, defaults) {\n const { facet = \"auto\", facetAnchor, fx, fy, sort, dx = 0, dy = 0, margin = 0, marginTop = margin, marginRight = margin, marginBottom = margin, marginLeft = margin, clip, channels: extraChannels } = options;\n this.data = data;\n this.sort = isDomainSort(sort) ? sort : null;\n this.initializer = initializer(options).initializer;\n this.transform = this.initializer ? options.transform : basic(options).transform;\n if (facet === null || facet === false) {\n this.facet = null;\n }\n else {\n this.facet = keyword(facet === true ? \"include\" : facet, \"facet\", [\"auto\", \"include\", \"exclude\", \"super\"]);\n this.fx = fx;\n this.fy = fy;\n }\n this.facetAnchor = maybeFacetAnchor(facetAnchor);\n channels = maybeNamed(channels);\n if (extraChannels !== undefined)\n channels = { ...maybeNamed(extraChannels), ...channels };\n if (defaults !== undefined)\n channels = { ...styles(this, options, defaults), ...channels };\n this.channels = Object.fromEntries(Object.entries(channels)\n .map(([name, channel]) => {\n const { value } = channel;\n if (isOptions(value)) {\n channel = { ...channel, value: value.value };\n if (value.scale !== undefined)\n channel.scale = value.scale;\n }\n return [name, channel];\n })\n .filter(([name, { value, optional }]) => {\n if (value != null)\n return true;\n if (optional)\n return false;\n throw new Error(`missing channel value: ${name}`);\n }));\n this.dx = +dx;\n this.dy = +dy;\n this.marginTop = +marginTop;\n this.marginRight = +marginRight;\n this.marginBottom = +marginBottom;\n this.marginLeft = +marginLeft;\n this.clip = maybeClip(clip);\n // Super-faceting currently disallow position channels; in the future, we\n // could allow position to be specified in fx and fy in addition to (or\n // instead of) x and y.\n if (this.facet === \"super\") {\n if (fx || fy)\n throw new Error(`super-faceting cannot use fx or fy`);\n for (const name in this.channels) {\n const { scale } = channels[name];\n if (scale !== \"x\" && scale !== \"y\")\n continue;\n throw new Error(`super-faceting cannot use x or y`);\n }\n }\n }\n initialize(facets, facetChannels) {\n let data = arrayify(this.data);\n if (facets === undefined && data != null)\n facets = [range(data)];\n if (this.transform != null)\n ({ facets, data } = this.transform(data, facets)), (data = arrayify(data));\n const channels = Channels(this.channels, data);\n if (this.sort != null)\n channelDomain(channels, facetChannels, data, this.sort); // mutates facetChannels!\n return { data, facets, channels };\n }\n filter(index, channels, values) {\n for (const name in channels) {\n const { filter = defined } = channels[name];\n if (filter !== null) {\n const value = values[name];\n index = index.filter((i) => filter(value[i]));\n }\n }\n return index;\n }\n // If there is a projection, and there are both x and y channels (or x1 and\n // y1, or x2 and y2 channels), and those channels are associated with the x\n // and y scale respectively (and not already in screen coordinates as with an\n // initializer), then apply the projection, replacing the x and y values. Note\n // that the x and y scales themselves don’t exist if there is a projection,\n // but whether the channels are associated with scales still determines\n // whether the projection should apply; think of the projection as a\n // combination xy-scale.\n project(channels, values, context) {\n maybeProject(\"x\", \"y\", channels, values, context);\n maybeProject(\"x1\", \"y1\", channels, values, context);\n maybeProject(\"x2\", \"y2\", channels, values, context);\n }\n scale(channels, scales, context) {\n const values = valueObject(channels, scales);\n if (context.projection)\n this.project(channels, values, context);\n return values;\n }\n}\n/** \n * A convenience method for composing a mark from a series of other marks. Returns an array of marks that implements the *mark*.plot function. See the [box mark implementation](https://github.com/observablehq/plot/blob/main/src/marks/box.js) for an example.\n * \n */\nexport function marks(...marks) {\n marks.plot = Mark.prototype.plot; // Note: depends on side-effect in plot!\n return marks;\n}\n","export const radians = Math.PI / 180;\n","import { offset } from \"../style.js\";\nexport function maybeInsetX({ inset, insetLeft, insetRight, ...options } = {}) {\n [insetLeft, insetRight] = maybeInset(inset, insetLeft, insetRight);\n return { inset, insetLeft, insetRight, ...options };\n}\nexport function maybeInsetY({ inset, insetTop, insetBottom, ...options } = {}) {\n [insetTop, insetBottom] = maybeInset(inset, insetTop, insetBottom);\n return { inset, insetTop, insetBottom, ...options };\n}\nfunction maybeInset(inset, inset1, inset2) {\n return inset === undefined && inset1 === undefined && inset2 === undefined\n ? offset\n ? [1, 0]\n : [0.5, 0.5]\n : [inset1, inset2];\n}\n","import { isTemporal, labelof, map, maybeInterval, maybeValue, valueof } from \"../options.js\";\nimport { maybeInsetX, maybeInsetY } from \"./inset.js\";\n// The interval may be specified either as x: {value, interval} or as {x,\n// interval}. The former can be used to specify separate intervals for x and y,\n// for example with Plot.rect.\nfunction maybeIntervalValue(value, { interval }) {\n value = { ...maybeValue(value) };\n value.interval = maybeInterval(value.interval === undefined ? interval : value.interval);\n return value;\n}\nfunction maybeIntervalK(k, maybeInsetK, options, trivial) {\n const { [k]: v, [`${k}1`]: v1, [`${k}2`]: v2 } = options;\n const { value, interval } = maybeIntervalValue(v, options);\n if (value == null || (interval == null && !trivial))\n return options;\n const label = labelof(v);\n if (interval == null) {\n let V;\n const kv = { transform: (data) => V || (V = valueof(data, value)), label };\n return {\n ...options,\n [k]: undefined,\n [`${k}1`]: v1 === undefined ? kv : v1,\n [`${k}2`]: v2 === undefined ? kv : v2\n };\n }\n let D1, V1;\n function transform(data) {\n if (V1 !== undefined && data === D1)\n return V1; // memoize\n return (V1 = map(valueof((D1 = data), value), (v) => interval.floor(v)));\n }\n return maybeInsetK({\n ...options,\n [k]: undefined,\n [`${k}1`]: v1 === undefined ? { transform, label } : v1,\n [`${k}2`]: v2 === undefined ? { transform: (data) => transform(data).map((v) => interval.offset(v)), label } : v2\n });\n}\nfunction maybeIntervalMidK(k, maybeInsetK, options) {\n const { [k]: v } = options;\n const { value, interval } = maybeIntervalValue(v, options);\n if (value == null || interval == null)\n return options;\n return maybeInsetK({\n ...options,\n [k]: {\n label: labelof(v),\n transform: (data) => {\n const V1 = map(valueof(data, value), (v) => interval.floor(v));\n const V2 = V1.map((v) => interval.offset(v));\n return V1.map(isTemporal(V1)\n ? (v1, v2) => v1 == null || isNaN((v1 = +v1)) || ((v2 = V2[v2]), v2 == null) || isNaN((v2 = +v2))\n ? undefined\n : new Date((v1 + v2) / 2)\n : (v1, v2) => (v1 == null || ((v2 = V2[v2]), v2 == null) ? NaN : (+v1 + +v2) / 2));\n }\n }\n });\n}\nexport function maybeTrivialIntervalX(options = {}) {\n return maybeIntervalK(\"x\", maybeInsetX, options, true);\n}\nexport function maybeTrivialIntervalY(options = {}) {\n return maybeIntervalK(\"y\", maybeInsetY, options, true);\n}\nexport function maybeIntervalX(options = {}) {\n return maybeIntervalK(\"x\", maybeInsetX, options);\n}\nexport function maybeIntervalY(options = {}) {\n return maybeIntervalK(\"y\", maybeInsetY, options);\n}\nexport function maybeIntervalMidX(options = {}) {\n return maybeIntervalMidK(\"x\", maybeInsetX, options);\n}\nexport function maybeIntervalMidY(options = {}) {\n return maybeIntervalMidK(\"y\", maybeInsetY, options);\n}\n","import { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { identity, number } from \"../options.js\";\nimport { isCollapsed } from \"../scales.js\";\nimport { applyDirectStyles, applyIndirectStyles, applyTransform, applyChannelStyles, offset } from \"../style.js\";\nimport { maybeIntervalX, maybeIntervalY } from \"../transforms/interval.js\";\nconst defaults = {\n ariaLabel: \"rule\",\n fill: null,\n stroke: \"currentColor\"\n};\nexport class RuleX extends Mark {\n constructor(data, options = {}) {\n const { x, y1, y2, inset = 0, insetTop = inset, insetBottom = inset } = options;\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y1: { value: y1, scale: \"y\", optional: true },\n y2: { value: y2, scale: \"y\", optional: true }\n }, options, defaults);\n this.insetTop = number(insetTop);\n this.insetBottom = number(insetBottom);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y1: Y1, y2: Y2 } = channels;\n const { width, height, marginTop, marginRight, marginLeft, marginBottom } = dimensions;\n const { insetTop, insetBottom } = this;\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions)\n .call(applyTransform, this, { x: X && x }, offset, 0)\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"line\")\n .call(applyDirectStyles, this)\n .attr(\"x1\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n .attr(\"x2\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n .attr(\"y1\", Y1 && !isCollapsed(y) ? (i) => Y1[i] + insetTop : marginTop + insetTop)\n .attr(\"y2\", Y2 && !isCollapsed(y)\n ? y.bandwidth\n ? (i) => Y2[i] + y.bandwidth() - insetBottom\n : (i) => Y2[i] - insetBottom\n : height - marginBottom - insetBottom)\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\nexport class RuleY extends Mark {\n constructor(data, options = {}) {\n const { x1, x2, y, inset = 0, insetRight = inset, insetLeft = inset } = options;\n super(data, {\n y: { value: y, scale: \"y\", optional: true },\n x1: { value: x1, scale: \"x\", optional: true },\n x2: { value: x2, scale: \"x\", optional: true }\n }, options, defaults);\n this.insetRight = number(insetRight);\n this.insetLeft = number(insetLeft);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { y: Y, x1: X1, x2: X2 } = channels;\n const { width, height, marginTop, marginRight, marginLeft, marginBottom } = dimensions;\n const { insetLeft, insetRight } = this;\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyTransform, this, { y: Y && y }, 0, offset)\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"line\")\n .call(applyDirectStyles, this)\n .attr(\"x1\", X1 && !isCollapsed(x) ? (i) => X1[i] + insetLeft : marginLeft + insetLeft)\n .attr(\"x2\", X2 && !isCollapsed(x)\n ? x.bandwidth\n ? (i) => X2[i] + x.bandwidth() - insetRight\n : (i) => X2[i] - insetRight\n : width - marginRight - insetRight)\n .attr(\"y1\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n .attr(\"y2\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\n/** \n * ```js\n * Plot.ruleX([0]) // as annotation\n * ```\n * ```js\n * Plot.ruleX(alphabet, {x: \"letter\", y: \"frequency\"}) // like barY\n * ```\n * \n * Returns a new rule↕︎ with the given *data* and *options*. In addition to the [standard mark options](https://github.com/observablehq/plot/blob/main/README.md#marks), the following channels are optional:\n * \n * * **x** - the horizontal position; bound to the *x* scale\n * * **y1** - the starting vertical position; bound to the *y* scale\n * * **y2** - the ending vertical position; bound to the *y* scale\n * \n * If the **x** option is not specified, it defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …]. If a **y** option is specified, it is shorthand for the **y2** option with **y1** equal to zero; this is the typical configuration for a vertical lollipop chart with rules aligned at *y* = 0. If the **y1** channel is not specified, the rule will start at the top of the plot (or facet). If the **y2** channel is not specified, the rule will end at the bottom of the plot (or facet).\n * \n * If an **interval** is specified, such as d3.utcDay, **y1** and **y2** can be derived from **y**: *interval*.floor(*y*) is invoked for each *y* to produce *y1*, and *interval*.offset(*y1*) is invoked for each *y1* to produce *y2*. If the interval is specified as a number *n*, *y1* and *y2* are taken as the two consecutive multiples of *n* that bracket *y*.\n * \n */\nexport function ruleX(data, options) {\n let { x = identity, y, y1, y2, ...rest } = maybeIntervalY(options);\n [y1, y2] = maybeOptionalZero(y, y1, y2);\n return new RuleX(data, { ...rest, x, y1, y2 });\n}\n/** \n * ```js\n * Plot.ruleY([0]) // as annotation\n * ```\n * \n * ```js\n * Plot.ruleY(alphabet, {y: \"letter\", x: \"frequency\"}) // like barX\n * ```\n * \n * Returns a new rule↔︎ with the given *data* and *options*. In addition to the [standard mark options](https://github.com/observablehq/plot/blob/main/README.md#marks), the following channels are optional:\n * \n * * **y** - the vertical position; bound to the *y* scale\n * * **x1** - the starting horizontal position; bound to the *x* scale\n * * **x2** - the ending horizontal position; bound to the *x* scale\n * \n * If the **y** option is not specified, it defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …]. If the **x** option is specified, it is shorthand for the **x2** option with **x1** equal to zero; this is the typical configuration for a horizontal lollipop chart with rules aligned at *x* = 0. If the **x1** channel is not specified, the rule will start at the left edge of the plot (or facet). If the **x2** channel is not specified, the rule will end at the right edge of the plot (or facet).\n * \n * If an **interval** is specified, such as d3.utcDay, **x1** and **x2** can be derived from **x**: *interval*.floor(*x*) is invoked for each *x* to produce *x1*, and *interval*.offset(*x1*) is invoked for each *x1* to produce *x2*. If the interval is specified as a number *n*, *x1* and *x2* are taken as the two consecutive multiples of *n* that bracket *x*.\n * \n */\nexport function ruleY(data, options) {\n let { y = identity, x, x1, x2, ...rest } = maybeIntervalX(options);\n [x1, x2] = maybeOptionalZero(x, x1, x2);\n return new RuleY(data, { ...rest, y, x1, x2 });\n}\n// For marks specified either as [0, x] or [x1, x2], or nothing.\nfunction maybeOptionalZero(x, x1, x2) {\n if (x === undefined) {\n if (x1 === undefined) {\n if (x2 !== undefined)\n return [0, x2];\n }\n else {\n if (x2 === undefined)\n return [0, x1];\n }\n }\n else if (x1 === undefined) {\n return x2 === undefined ? [0, x] : [x, x2];\n }\n else if (x2 === undefined) {\n return [x, x1];\n }\n return [x1, x2];\n}\n","export function template(strings, ...parts) {\n let n = parts.length;\n // If any of the interpolated parameters are strings rather than functions,\n // bake them into the template to optimize performance during render.\n for (let j = 0, copy = true; j < n; ++j) {\n if (typeof parts[j] !== \"function\") {\n if (copy) {\n strings = strings.slice(); // copy before mutate\n copy = false;\n }\n strings.splice(j, 2, strings[j] + parts[j] + strings[j + 1]);\n parts.splice(j, 1);\n --j, --n;\n }\n }\n return (i) => {\n let s = strings[0];\n for (let j = 0; j < n; ++j) {\n s += parts[j](i) + strings[j + 1];\n }\n return s;\n };\n}\n","import { namespaces } from \"d3\";\nimport { create } from \"../context.js\";\nimport { nonempty } from \"../defined.js\";\nimport { formatDefault } from \"../format.js\";\nimport { Mark } from \"../mark.js\";\nimport { indexOf, identity, string, maybeNumberChannel, maybeTuple, numberChannel, isNumeric, isTemporal, keyword, maybeFrameAnchor, isTextual, isIterable } from \"../options.js\";\nimport { applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyAttr, applyTransform, impliedString, applyFrameAnchor } from \"../style.js\";\nimport { template } from \"../template.js\";\nimport { maybeIntervalMidX, maybeIntervalMidY } from \"../transforms/interval.js\";\nconst defaults = {\n ariaLabel: \"text\",\n strokeLinejoin: \"round\",\n strokeWidth: 3,\n paintOrder: \"stroke\"\n};\nconst softHyphen = \"\\u00ad\";\nexport class Text extends Mark {\n constructor(data, options = {}) {\n const { x, y, text = isIterable(data) && isTextual(data) ? identity : indexOf, frameAnchor, textAnchor = /right$/i.test(frameAnchor) ? \"end\" : /left$/i.test(frameAnchor) ? \"start\" : \"middle\", lineAnchor = /^top/i.test(frameAnchor) ? \"top\" : /^bottom/i.test(frameAnchor) ? \"bottom\" : \"middle\", lineHeight = 1, lineWidth = Infinity, textOverflow, monospace, fontFamily = monospace ? \"ui-monospace, monospace\" : undefined, fontSize, fontStyle, fontVariant, fontWeight, rotate } = options;\n const [vrotate, crotate] = maybeNumberChannel(rotate, 0);\n const [vfontSize, cfontSize] = maybeFontSizeChannel(fontSize);\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y: { value: y, scale: \"y\", optional: true },\n fontSize: { value: vfontSize, optional: true },\n rotate: { value: numberChannel(vrotate), optional: true },\n text: { value: text, filter: nonempty, optional: true }\n }, options, defaults);\n this.rotate = crotate;\n this.textAnchor = impliedString(textAnchor, \"middle\");\n this.lineAnchor = keyword(lineAnchor, \"lineAnchor\", [\"top\", \"middle\", \"bottom\"]);\n this.lineHeight = +lineHeight;\n this.lineWidth = +lineWidth;\n this.textOverflow = maybeTextOverflow(textOverflow);\n this.monospace = !!monospace;\n this.fontFamily = string(fontFamily);\n this.fontSize = cfontSize;\n this.fontStyle = string(fontStyle);\n this.fontVariant = string(fontVariant);\n this.fontWeight = string(fontWeight);\n this.frameAnchor = maybeFrameAnchor(frameAnchor);\n if (!(this.lineWidth >= 0))\n throw new Error(`invalid lineWidth: ${lineWidth}`);\n this.splitLines = splitter(this);\n this.clipLine = clipper(this);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y: Y, rotate: R, text: T, title: TL, fontSize: FS } = channels;\n const { rotate } = this;\n const [cx, cy] = applyFrameAnchor(this, dimensions);\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyIndirectTextStyles, this, T, dimensions)\n .call(applyTransform, this, { x: X && x, y: Y && y })\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"text\")\n .call(applyDirectStyles, this)\n .call(applyMultilineText, this, T, TL)\n .attr(\"transform\", template `translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${R ? (i) => ` rotate(${R[i]})` : rotate ? ` rotate(${rotate})` : ``}`)\n .call(applyAttr, \"font-size\", FS && ((i) => FS[i]))\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\nfunction maybeTextOverflow(textOverflow) {\n return textOverflow == null\n ? null\n : keyword(textOverflow, \"textOverflow\", [\n \"clip\",\n \"ellipsis\",\n \"clip-start\",\n \"clip-end\",\n \"ellipsis-start\",\n \"ellipsis-middle\",\n \"ellipsis-end\"\n ]).replace(/^(clip|ellipsis)$/, \"$1-end\");\n}\nfunction applyMultilineText(selection, mark, T, TL) {\n if (!T)\n return;\n const { lineAnchor, lineHeight, textOverflow, splitLines, clipLine } = mark;\n selection.each(function (i) {\n const lines = splitLines(formatDefault(T[i])).map(clipLine);\n const n = lines.length;\n const y = lineAnchor === \"top\" ? 0.71 : lineAnchor === \"bottom\" ? 1 - n : (164 - n * 100) / 200;\n if (n > 1) {\n for (let i = 0; i < n; ++i) {\n if (!lines[i])\n continue;\n const tspan = this.ownerDocument.createElementNS(namespaces.svg, \"tspan\");\n tspan.setAttribute(\"x\", 0);\n tspan.setAttribute(\"y\", `${(y + i) * lineHeight}em`);\n tspan.textContent = lines[i];\n this.appendChild(tspan);\n }\n }\n else {\n if (y)\n this.setAttribute(\"y\", `${y * lineHeight}em`);\n this.textContent = lines[0];\n }\n if (textOverflow && !TL && lines[0] !== T[i]) {\n const title = this.ownerDocument.createElementNS(namespaces.svg, \"title\");\n title.textContent = T[i];\n this.appendChild(title);\n }\n });\n}\n/** \n * Returns a new text mark with the given *data* and *options*. If neither the **x** nor **y** nor **frameAnchor** options are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function text(data, options = {}) {\n let { x, y, ...remainingOptions } = options;\n if (options.frameAnchor === undefined)\n [x, y] = maybeTuple(x, y);\n return new Text(data, { ...remainingOptions, x, y });\n}\n/** \n * Equivalent to [Plot.text](https://github.com/observablehq/plot/blob/main/README.md#plottextdata-options), except **x** defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **y** is transformed to (*interval*.floor(*y*) + *interval*.offset(*interval*.floor(*y*))) / 2. If the interval is specified as a number *n*, *y* will be the midpoint of two consecutive multiples of *n* that bracket *y*.\n * \n */\nexport function textX(data, options = {}) {\n const { x = identity, ...remainingOptions } = options;\n return new Text(data, maybeIntervalMidY({ ...remainingOptions, x }));\n}\n/** \n * Equivalent to [Plot.text](https://github.com/observablehq/plot/blob/main/README.md#plottextdata-options), except **y** defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **x** is transformed to (*interval*.floor(*x*) + *interval*.offset(*interval*.floor(*x*))) / 2. If the interval is specified as a number *n*, *x* will be the midpoint of two consecutive multiples of *n* that bracket *x*.\n * \n */\nexport function textY(data, options = {}) {\n const { y = identity, ...remainingOptions } = options;\n return new Text(data, maybeIntervalMidX({ ...remainingOptions, y }));\n}\nfunction applyIndirectTextStyles(selection, mark, T) {\n applyAttr(selection, \"text-anchor\", mark.textAnchor);\n applyAttr(selection, \"font-family\", mark.fontFamily);\n applyAttr(selection, \"font-size\", mark.fontSize);\n applyAttr(selection, \"font-style\", mark.fontStyle);\n applyAttr(selection, \"font-variant\", mark.fontVariant === undefined ? inferFontVariant(T) : mark.fontVariant);\n applyAttr(selection, \"font-weight\", mark.fontWeight);\n}\nfunction inferFontVariant(T) {\n return isNumeric(T) || isTemporal(T) ? \"tabular-nums\" : undefined;\n}\n// https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\nconst fontSizes = new Set([\n // global keywords\n \"inherit\",\n \"initial\",\n \"revert\",\n \"unset\",\n // absolute keywords\n \"xx-small\",\n \"x-small\",\n \"small\",\n \"medium\",\n \"large\",\n \"x-large\",\n \"xx-large\",\n \"xxx-large\",\n // relative keywords\n \"larger\",\n \"smaller\"\n]);\n// The font size may be expressed as a constant in the following forms:\n// - number in pixels\n// - string keyword: see above\n// - string : e.g., \"12px\"\n// - string : e.g., \"80%\"\n// Anything else is assumed to be a channel definition.\nfunction maybeFontSizeChannel(fontSize) {\n if (fontSize == null || typeof fontSize === \"number\")\n return [undefined, fontSize];\n if (typeof fontSize !== \"string\")\n return [fontSize, undefined];\n fontSize = fontSize.trim().toLowerCase();\n return fontSizes.has(fontSize) || /^[+-]?\\d*\\.?\\d+(e[+-]?\\d+)?(\\w*|%)$/.test(fontSize)\n ? [undefined, fontSize]\n : [fontSize, undefined];\n}\n// This is a greedy algorithm for line wrapping. It would be better to use the\n// Knuth–Plass line breaking algorithm (but that would be much more complex).\n// https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap\nfunction lineWrap(input, maxWidth, widthof) {\n const lines = [];\n let lineStart, lineEnd = 0;\n for (const [wordStart, wordEnd, required] of lineBreaks(input)) {\n // Record the start of a line. This isn’t the same as the previous line’s\n // end because we often skip spaces between lines.\n if (lineStart === undefined)\n lineStart = wordStart;\n // If the current line is not empty, and if adding the current word would\n // make the line longer than the allowed width, then break the line at the\n // previous word end.\n if (lineEnd > lineStart && widthof(input, lineStart, wordEnd) > maxWidth) {\n lines.push(input.slice(lineStart, lineEnd) + (input[lineEnd - 1] === softHyphen ? \"-\" : \"\"));\n lineStart = wordStart;\n }\n // If this is a required break (a newline), emit the line and reset.\n if (required) {\n lines.push(input.slice(lineStart, wordEnd));\n lineStart = undefined;\n continue;\n }\n // Extend the current line to include the new word.\n lineEnd = wordEnd;\n }\n return lines;\n}\n// This is a rudimentary (and U.S.-centric) algorithm for finding opportunities\n// to break lines between words. A better and far more comprehensive approach\n// would be to use the official Unicode Line Breaking Algorithm.\n// https://unicode.org/reports/tr14/\nfunction* lineBreaks(input) {\n let i = 0, j = 0;\n const n = input.length;\n while (j < n) {\n let k = 1;\n switch (input[j]) {\n case softHyphen:\n case \"-\": // hyphen\n ++j;\n yield [i, j, false];\n i = j;\n break;\n case \" \":\n yield [i, j, false];\n while (input[++j] === \" \")\n ; // skip multiple spaces\n i = j;\n break;\n case \"\\r\":\n if (input[j + 1] === \"\\n\")\n ++k; // falls through\n case \"\\n\":\n yield [i, j, true];\n j += k;\n i = j;\n break;\n default:\n ++j;\n break;\n }\n }\n yield [i, j, true];\n}\n// Computed as round(measureText(text).width * 10) at 10px system-ui. For\n// characters that are not represented in this map, we’d ideally want to use a\n// weighted average of what we expect to see. But since we don’t really know\n// what that is, using “e” seems reasonable.\nconst defaultWidthMap = {\n a: 56,\n b: 63,\n c: 57,\n d: 63,\n e: 58,\n f: 37,\n g: 62,\n h: 60,\n i: 26,\n j: 26,\n k: 55,\n l: 26,\n m: 88,\n n: 60,\n o: 60,\n p: 62,\n q: 62,\n r: 39,\n s: 54,\n t: 38,\n u: 60,\n v: 55,\n w: 79,\n x: 54,\n y: 55,\n z: 55,\n A: 69,\n B: 67,\n C: 73,\n D: 74,\n E: 61,\n F: 58,\n G: 76,\n H: 75,\n I: 28,\n J: 55,\n K: 67,\n L: 58,\n M: 89,\n N: 75,\n O: 78,\n P: 65,\n Q: 78,\n R: 67,\n S: 65,\n T: 65,\n U: 75,\n V: 69,\n W: 98,\n X: 69,\n Y: 67,\n Z: 67,\n 0: 64,\n 1: 48,\n 2: 62,\n 3: 64,\n 4: 66,\n 5: 63,\n 6: 65,\n 7: 58,\n 8: 65,\n 9: 65,\n \" \": 29,\n \"!\": 32,\n '\"': 49,\n \"'\": 31,\n \"(\": 39,\n \")\": 39,\n \",\": 31,\n \"-\": 48,\n \".\": 31,\n \"/\": 32,\n \":\": 31,\n \";\": 31,\n \"?\": 52,\n \"‘\": 31,\n \"’\": 31,\n \"“\": 47,\n \"”\": 47,\n \"…\": 82\n};\n// This is a rudimentary (and U.S.-centric) algorithm for measuring the width of\n// a string based on a technique of Gregor Aisch; it assumes that individual\n// characters are laid out independently and does not implement the Unicode\n// grapheme cluster breaking algorithm. It does understand code points, though,\n// and so treats things like emoji as having the width of a lowercase e (and\n// should be equivalent to using for-of to iterate over code points, while also\n// being fast). TODO Optimize this by noting that we often re-measure characters\n// that were previously measured?\n// http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries\n// https://exploringjs.com/impatient-js/ch_strings.html#atoms-of-text\nexport function defaultWidth(text, start = 0, end = text.length) {\n let sum = 0;\n for (let i = start; i < end; i = readCharacter(text, i)) {\n sum += defaultWidthMap[text[i]] ?? (isPictographic(text, i) ? 120 : defaultWidthMap.e);\n }\n return sum;\n}\n// Even for monospaced text, we can’t assume that the number of UTF-16 code\n// points (i.e., the length of a string) corresponds to the number of visible\n// characters; we still have to count graphemes. And note that pictographic\n// characters such as emojis are typically not monospaced!\nexport function monospaceWidth(text, start = 0, end = text.length) {\n let sum = 0;\n for (let i = start; i < end; i = readCharacter(text, i)) {\n sum += isPictographic(text, i) ? 200 : 100;\n }\n return sum;\n}\nfunction splitter({ monospace, lineWidth, textOverflow }) {\n if (textOverflow != null || lineWidth == Infinity)\n return (text) => text.split(/\\r\\n?|\\n/g);\n const widthof = monospace ? monospaceWidth : defaultWidth;\n const maxWidth = lineWidth * 100;\n return (text) => lineWrap(text, maxWidth, widthof);\n}\nfunction clipper({ monospace, lineWidth, textOverflow }) {\n if (textOverflow == null || lineWidth == Infinity)\n return (text) => text;\n const widthof = monospace ? monospaceWidth : defaultWidth;\n const maxWidth = lineWidth * 100;\n switch (textOverflow) {\n case \"clip-start\":\n return (text) => clipStart(text, maxWidth, widthof, \"\");\n case \"clip-end\":\n return (text) => clipEnd(text, maxWidth, widthof, \"\");\n case \"ellipsis-start\":\n return (text) => clipStart(text, maxWidth, widthof, \"…\");\n case \"ellipsis-middle\":\n return (text) => clipMiddle(text, maxWidth, widthof, \"…\");\n case \"ellipsis-end\":\n return (text) => clipEnd(text, maxWidth, widthof, \"…\");\n }\n}\n// Cuts the given text to the given width, using the specified widthof function;\n// the returned [index, error] guarantees text.slice(0, index) fits within the\n// specified width with the given error. If the text fits naturally within the\n// given width, returns [-1, 0]. If the text needs cutting, the given inset\n// specifies how much space (in the same units as width and widthof) to reserve\n// for a possible ellipsis character.\nfunction cut(text, width, widthof, inset) {\n const I = []; // indexes of read character boundaries\n let w = 0; // current line width\n for (let i = 0, j = 0, n = text.length; i < n; i = j) {\n j = readCharacter(text, i); // read the next character\n const l = widthof(text, i, j); // current character width\n if (w + l > width) {\n w += inset;\n while (w > width && i > 0)\n (j = i), (i = I.pop()), (w -= widthof(text, i, j)); // remove excess\n return [i, width - w];\n }\n w += l;\n I.push(i);\n }\n return [-1, 0];\n}\nexport function clipEnd(text, width, widthof, ellipsis) {\n text = text.trim(); // ignore leading and trailing whitespace\n const e = widthof(ellipsis);\n const [i] = cut(text, width, widthof, e);\n return i < 0 ? text : text.slice(0, i).trimEnd() + ellipsis;\n}\nexport function clipMiddle(text, width, widthof, ellipsis) {\n text = text.trim(); // ignore leading and trailing whitespace\n const w = widthof(text);\n if (w <= width)\n return text;\n const e = widthof(ellipsis) / 2;\n const [i, ei] = cut(text, width / 2, widthof, e);\n const [j] = cut(text, w - width / 2 - ei + e, widthof, -e); // TODO read spaces?\n return j < 0 ? ellipsis : text.slice(0, i).trimEnd() + ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\nexport function clipStart(text, width, widthof, ellipsis) {\n text = text.trim(); // ignore leading and trailing whitespace\n const w = widthof(text);\n if (w <= width)\n return text;\n const e = widthof(ellipsis);\n const [j] = cut(text, w - width + e, widthof, -e); // TODO read spaces?\n return j < 0 ? ellipsis : ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\nconst reCombiner = /[\\p{Combining_Mark}\\p{Emoji_Modifier}]+/uy;\nconst rePictographic = /\\p{Extended_Pictographic}/uy;\n// Reads a single “character” element from the given text starting at the given\n// index, returning the index after the read character. Ideally, this implements\n// the Unicode text segmentation algorithm and understands grapheme cluster\n// boundaries, etc., but in practice this is only smart enough to detect UTF-16\n// surrogate pairs, combining marks, and zero-width joiner (zwj) sequences such\n// as emoji skin color modifiers. https://unicode.org/reports/tr29/\nexport function readCharacter(text, i) {\n i += isSurrogatePair(text, i) ? 2 : 1;\n if (isCombiner(text, i))\n i = reCombiner.lastIndex;\n if (isZeroWidthJoiner(text, i))\n return readCharacter(text, i + 1);\n return i;\n}\n// We avoid more expensive regex tests involving Unicode property classes by\n// first checking for the common case of 7-bit ASCII characters.\nfunction isAscii(text, i) {\n return text.charCodeAt(i) < 0x80;\n}\nfunction isSurrogatePair(text, i) {\n const hi = text.charCodeAt(i);\n if (hi >= 0xd800 && hi < 0xdc00) {\n const lo = text.charCodeAt(i + 1);\n return lo >= 0xdc00 && lo < 0xe000;\n }\n return false;\n}\nfunction isZeroWidthJoiner(text, i) {\n return text.charCodeAt(i) === 0x200d;\n}\nfunction isCombiner(text, i) {\n return isAscii(text, i) ? false : ((reCombiner.lastIndex = i), reCombiner.test(text));\n}\nfunction isPictographic(text, i) {\n return isAscii(text, i) ? false : ((rePictographic.lastIndex = i), rePictographic.test(text));\n}\n","import { pathRound as path } from \"d3\";\nimport { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { maybeFrameAnchor, maybeNumberChannel, maybeTuple, keyword, identity } from \"../options.js\";\nimport { applyChannelStyles, applyDirectStyles, applyFrameAnchor, applyIndirectStyles, applyTransform } from \"../style.js\";\nimport { template } from \"../template.js\";\nconst defaults = {\n ariaLabel: \"vector\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\"\n};\nconst defaultRadius = 3.5;\n// The size of the arrowhead is proportional to its length, but we still allow\n// the relative size of the head to be controlled via the mark’s width option;\n// doubling the default radius will produce an arrowhead that is twice as big.\n// That said, we’ll probably want a arrow with a fixed head size, too.\nconst wingRatio = defaultRadius * 5;\nconst shapeArrow = {\n draw(context, l, r) {\n const wing = (l * r) / wingRatio;\n context.moveTo(0, 0);\n context.lineTo(0, -l);\n context.moveTo(-wing, wing - l);\n context.lineTo(0, -l);\n context.lineTo(wing, wing - l);\n }\n};\nconst shapeSpike = {\n draw(context, l, r) {\n context.moveTo(-r, 0);\n context.lineTo(0, -l);\n context.lineTo(r, 0);\n }\n};\nconst shapes = new Map([\n [\"arrow\", shapeArrow],\n [\"spike\", shapeSpike]\n]);\nfunction isShapeObject(value) {\n return value && typeof value.draw === \"function\";\n}\nfunction Shape(shape) {\n if (isShapeObject(shape))\n return shape;\n const value = shapes.get(`${shape}`.toLowerCase());\n if (value)\n return value;\n throw new Error(`invalid shape: ${shape}`);\n}\nexport class Vector extends Mark {\n constructor(data, options = {}) {\n const { x, y, r = defaultRadius, length, rotate, shape = shapeArrow, anchor = \"middle\", frameAnchor } = options;\n const [vl, cl] = maybeNumberChannel(length, 12);\n const [vr, cr] = maybeNumberChannel(rotate, 0);\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y: { value: y, scale: \"y\", optional: true },\n length: { value: vl, scale: \"length\", optional: true },\n rotate: { value: vr, optional: true }\n }, options, defaults);\n this.r = +r;\n this.length = cl;\n this.rotate = cr;\n this.shape = Shape(shape);\n this.anchor = keyword(anchor, \"anchor\", [\"start\", \"middle\", \"end\"]);\n this.frameAnchor = maybeFrameAnchor(frameAnchor);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y: Y, length: L, rotate: A } = channels;\n const { length, rotate, anchor, shape, r } = this;\n const [cx, cy] = applyFrameAnchor(this, dimensions);\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyTransform, this, { x: X && x, y: Y && y })\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"path\")\n .call(applyDirectStyles, this)\n .attr(\"transform\", template `translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${A ? (i) => ` rotate(${A[i]})` : rotate ? ` rotate(${rotate})` : ``}${anchor === \"start\"\n ? ``\n : anchor === \"end\"\n ? L\n ? (i) => ` translate(0,${L[i]})`\n : ` translate(0,${length})`\n : L\n ? (i) => ` translate(0,${L[i] / 2})`\n : ` translate(0,${length / 2})`}`)\n .attr(\"d\", L\n ? (i) => {\n const p = path();\n shape.draw(p, L[i], r);\n return p;\n }\n : (() => {\n const p = path();\n shape.draw(p, length, r);\n return p;\n })())\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\n/** \n * ```js\n * Plot.vector(wind, {x: \"longitude\", y: \"latitude\", length: \"speed\", rotate: \"direction\"})\n * ```\n * \n * Returns a new vector with the given *data* and *options*. If neither the **x** nor **y** options are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function vector(data, options = {}) {\n let { x, y, ...rest } = options;\n if (options.frameAnchor === undefined)\n [x, y] = maybeTuple(x, y);\n return new Vector(data, { ...rest, x, y });\n}\n/** \n * Equivalent to [Plot.vector](https://github.com/observablehq/plot/blob/main/README.md#plotvectordata-options) except that if the **x** option is not specified, it defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …].\n * \n */\nexport function vectorX(data, options = {}) {\n const { x = identity, ...rest } = options;\n return new Vector(data, { ...rest, x });\n}\n/** \n * Equivalent to [Plot.vector](https://github.com/observablehq/plot/blob/main/README.md#plotvectordata-options) except that if the **y** option is not specified, it defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function vectorY(data, options = {}) {\n const { y = identity, ...rest } = options;\n return new Vector(data, { ...rest, y });\n}\n/** \n * Equivalent to [Plot.vector](https://github.com/observablehq/plot/blob/main/README.md#plotvectordata-options) except that the **shape** defaults to *spike*, the **stroke** defaults to *currentColor*, the **strokeWidth** defaults to 1, the **fill** defaults to **stroke**, the **fillOpacity** defaults to 0.3, and the **anchor** defaults to *start*.\n * \n */\nexport function spike(data, options = {}) {\n const { shape = shapeSpike, stroke = defaults.stroke, strokeWidth = 1, fill = stroke, fillOpacity = 0.3, anchor = \"start\", ...rest } = options;\n return vector(data, { ...rest, shape, stroke, strokeWidth, fill, fillOpacity, anchor });\n}\n","import { extent, format, utcFormat } from \"d3\";\nimport { formatDefault } from \"../format.js\";\nimport { marks } from \"../mark.js\";\nimport { radians } from \"../math.js\";\nimport { range, valueof, arrayify, constant, keyword, identity, number } from \"../options.js\";\nimport { isNoneish, isIterable, isTemporal, maybeInterval, orderof } from \"../options.js\";\nimport { isTemporalScale } from \"../scales.js\";\nimport { offset } from \"../style.js\";\nimport { initializer } from \"../transforms/basic.js\";\nimport { ruleX, ruleY } from \"./rule.js\";\nimport { text, textX, textY } from \"./text.js\";\nimport { vectorX, vectorY } from \"./vector.js\";\nfunction maybeData(data, options) {\n if (arguments.length < 2 && !isIterable(data))\n (options = data), (data = null);\n if (options === undefined)\n options = {};\n return [data, options];\n}\nfunction maybeAnchor({ anchor } = {}, anchors) {\n return anchor === undefined ? anchors[0] : keyword(anchor, \"anchor\", anchors);\n}\nfunction anchorY(options) {\n return maybeAnchor(options, [\"left\", \"right\"]);\n}\nfunction anchorFy(options) {\n return maybeAnchor(options, [\"right\", \"left\"]);\n}\nfunction anchorX(options) {\n return maybeAnchor(options, [\"bottom\", \"top\"]);\n}\nfunction anchorFx(options) {\n return maybeAnchor(options, [\"top\", \"bottom\"]);\n}\n/** \n * ```js\n * Plot.axisY({anchor: \"left\", tickSpacing: 35})\n * ```\n * \n * Returns a new *y* axis with the given *options*.\n * \n */\nexport function axisY() {\n const [data, options] = maybeData(...arguments);\n return axisKy(\"y\", anchorY(options), data, options);\n}\n/** \n * ```js\n * Plot.axisFy({anchor: \"right\", label: null})\n * ```\n * \n * Returns a new *fy* axis with the given *options*.\n * \n */\nexport function axisFy() {\n const [data, options] = maybeData(...arguments);\n return axisKy(\"fy\", anchorFy(options), data, options);\n}\n/** \n * ```js\n * Plot.axisX({anchor: \"bottom\", tickSpacing: 80})\n * ```\n * \n * Returns a new *x* axis with the given *options*.\n * \n */\nexport function axisX() {\n const [data, options] = maybeData(...arguments);\n return axisKx(\"x\", anchorX(options), data, options);\n}\n/** \n * ```js\n * Plot.axisFx({anchor: \"top\", label: null})\n * ```\n * \n * Returns a new *fx* axis with the given *options*.\n * \n */\nexport function axisFx() {\n const [data, options] = maybeData(...arguments);\n return axisKx(\"fx\", anchorFx(options), data, options);\n}\nfunction axisKy(k, anchor, data, { color = \"currentColor\", opacity = 1, stroke = color, strokeOpacity = opacity, strokeWidth = 1, fill = color, fillOpacity = opacity, textAnchor, textStroke, textStrokeOpacity, textStrokeWidth, tickSize = k === \"y\" ? 6 : 0, tickPadding, tickRotate, x, marginTop = 20, marginRight = anchor === \"right\" ? 40 : 0, marginBottom = 20, marginLeft = anchor === \"left\" ? 40 : 0, label, labelOffset, labelAnchor, ...options }) {\n tickSize = number(tickSize);\n tickPadding = number(tickPadding);\n tickRotate = number(tickRotate);\n if (labelAnchor !== undefined)\n labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"top\", \"bottom\"]);\n return marks(tickSize && !isNoneish(stroke)\n ? axisTickKy(k, anchor, data, {\n stroke,\n strokeOpacity,\n strokeWidth,\n tickSize,\n tickPadding,\n tickRotate,\n x,\n ...options\n })\n : null, !isNoneish(fill)\n ? axisTextKy(k, anchor, data, {\n fill,\n fillOpacity,\n stroke: textStroke,\n strokeOpacity: textStrokeOpacity,\n strokeWidth: textStrokeWidth,\n textAnchor,\n tickSize,\n tickPadding,\n tickRotate,\n x,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n ...options\n })\n : null, !isNoneish(fill) && label !== null\n ? text([], {\n fill,\n fillOpacity,\n ...options,\n lineWidth: undefined,\n textOverflow: undefined,\n facet: \"super\",\n x: null,\n y: null,\n initializer: function (data, facets, channels, scales, dimensions) {\n const scale = scales[k];\n const { marginTop, marginRight, marginBottom, marginLeft } = (k === \"y\" && dimensions.inset) || dimensions;\n const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"top\");\n const clo = labelOffset ?? (anchor === \"right\" ? marginRight : marginLeft) - 3;\n if (cla === \"center\") {\n this.textAnchor = undefined; // middle\n this.lineAnchor = anchor === \"right\" ? \"bottom\" : \"top\";\n this.frameAnchor = anchor;\n this.rotate = -90;\n }\n else {\n this.textAnchor = anchor === \"right\" ? \"end\" : \"start\";\n this.lineAnchor = cla;\n this.frameAnchor = `${cla}-${anchor}`;\n this.rotate = 0;\n }\n this.dy = cla === \"top\" ? 3 - marginTop : cla === \"bottom\" ? marginBottom - 3 : 0;\n this.dx = anchor === \"right\" ? clo : -clo;\n this.ariaLabel = `${k}-axis label`;\n return {\n facets: [[0]],\n channels: {\n text: {\n value: [label === undefined ? inferAxisLabel(k, scale, cla) : label]\n }\n }\n };\n }\n })\n : null);\n}\nfunction axisKx(k, anchor, data, { color = \"currentColor\", opacity = 1, stroke = color, strokeOpacity = opacity, strokeWidth = 1, fill = color, fillOpacity = opacity, textAnchor, textStroke, textStrokeOpacity, textStrokeWidth, tickSize = k === \"x\" ? 6 : 0, tickPadding, tickRotate, y, marginTop = anchor === \"top\" ? 30 : 0, marginRight = 20, marginBottom = anchor === \"bottom\" ? 30 : 0, marginLeft = 20, label, labelAnchor, labelOffset, ...options }) {\n tickSize = number(tickSize);\n tickPadding = number(tickPadding);\n tickRotate = number(tickRotate);\n if (labelAnchor !== undefined)\n labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"left\", \"right\"]);\n return marks(tickSize && !isNoneish(stroke)\n ? axisTickKx(k, anchor, data, {\n stroke,\n strokeOpacity,\n strokeWidth,\n tickSize,\n tickPadding,\n tickRotate,\n y,\n ...options\n })\n : null, !isNoneish(fill)\n ? axisTextKx(k, anchor, data, {\n fill,\n fillOpacity,\n stroke: textStroke,\n strokeOpacity: textStrokeOpacity,\n strokeWidth: textStrokeWidth,\n textAnchor,\n tickSize,\n tickPadding,\n tickRotate,\n y,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n ...options\n })\n : null, !isNoneish(fill) && label !== null\n ? text([], {\n fill,\n fillOpacity,\n ...options,\n lineWidth: undefined,\n textOverflow: undefined,\n facet: \"super\",\n x: null,\n y: null,\n initializer: function (data, facets, channels, scales, dimensions) {\n const scale = scales[k];\n const { marginTop, marginRight, marginBottom, marginLeft } = (k === \"x\" && dimensions.inset) || dimensions;\n const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"right\");\n const clo = labelOffset ?? (anchor === \"top\" ? marginTop : marginBottom) - 3;\n if (cla === \"center\") {\n this.frameAnchor = anchor;\n this.textAnchor = undefined; // middle\n }\n else {\n this.frameAnchor = `${anchor}-${cla}`;\n this.textAnchor = cla === \"right\" ? \"end\" : \"start\";\n }\n this.lineAnchor = anchor;\n this.dy = anchor === \"top\" ? -clo : clo;\n this.dx = cla === \"right\" ? marginRight - 3 : cla === \"left\" ? 3 - marginLeft : 0;\n this.ariaLabel = `${k}-axis label`;\n return {\n facets: [[0]],\n channels: {\n text: {\n value: [label === undefined ? inferAxisLabel(k, scale, cla) : label]\n }\n }\n };\n }\n })\n : null);\n}\nfunction axisTickKy(k, anchor, data, { strokeWidth = 1, strokeLinecap = null, strokeLinejoin = null, facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, inset = 0, insetLeft = inset, insetRight = inset, dx = 0, y = k === \"y\" ? undefined : null, ...options }) {\n return axisMark(vectorY, k, `${k}-axis tick`, data, {\n strokeWidth,\n strokeLinecap,\n strokeLinejoin,\n facetAnchor,\n frameAnchor,\n y,\n ...options,\n dx: anchor === \"left\" ? +dx - offset + +insetLeft : +dx + offset - insetRight,\n anchor: \"start\",\n length: tickSize,\n shape: anchor === \"left\" ? shapeTickLeft : shapeTickRight\n });\n}\nfunction axisTickKx(k, anchor, data, { strokeWidth = 1, strokeLinecap = null, strokeLinejoin = null, facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, inset = 0, insetTop = inset, insetBottom = inset, dy = 0, x = k === \"x\" ? undefined : null, ...options }) {\n return axisMark(vectorX, k, `${k}-axis tick`, data, {\n strokeWidth,\n strokeLinejoin,\n strokeLinecap,\n facetAnchor,\n frameAnchor,\n x,\n ...options,\n dy: anchor === \"bottom\" ? +dy - offset - insetBottom : +dy + offset + +insetTop,\n anchor: \"start\",\n length: tickSize,\n shape: anchor === \"bottom\" ? shapeTickBottom : shapeTickTop\n });\n}\nfunction axisTextKy(k, anchor, data, { facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, tickRotate = 0, tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) > 60 ? 4 * Math.cos(tickRotate * radians) : 0), tickFormat, text = typeof tickFormat === \"function\" ? tickFormat : undefined, textAnchor = Math.abs(tickRotate) > 60 ? \"middle\" : anchor === \"left\" ? \"end\" : \"start\", lineAnchor = tickRotate > 60 ? \"top\" : tickRotate < -60 ? \"bottom\" : \"middle\", fontVariant, inset = 0, insetLeft = inset, insetRight = inset, dx = 0, y = k === \"y\" ? undefined : null, ...options }) {\n return axisMark(textY, k, `${k}-axis tick label`, data, {\n facetAnchor,\n frameAnchor,\n text: text === undefined ? null : text,\n textAnchor,\n lineAnchor,\n fontVariant,\n rotate: tickRotate,\n y,\n ...options,\n dx: anchor === \"left\" ? +dx - tickSize - tickPadding + +insetLeft : +dx + +tickSize + +tickPadding - insetRight\n }, function (scale, ticks, channels) {\n if (fontVariant === undefined)\n this.fontVariant = inferFontVariant(scale);\n if (text === undefined)\n channels.text = inferTextChannel(scale, ticks, tickFormat);\n });\n}\nfunction axisTextKx(k, anchor, data, { facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, tickRotate = 0, tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) >= 10 ? 4 * Math.cos(tickRotate * radians) : 0), tickFormat, text = typeof tickFormat === \"function\" ? tickFormat : undefined, textAnchor = Math.abs(tickRotate) >= 10 ? ((tickRotate < 0) ^ (anchor === \"bottom\") ? \"start\" : \"end\") : \"middle\", lineAnchor = Math.abs(tickRotate) >= 10 ? \"middle\" : anchor === \"bottom\" ? \"top\" : \"bottom\", fontVariant, inset = 0, insetTop = inset, insetBottom = inset, dy = 0, x = k === \"x\" ? undefined : null, ...options }) {\n return axisMark(textX, k, `${k}-axis tick label`, data, {\n facetAnchor,\n frameAnchor,\n text: text === undefined ? null : text,\n textAnchor,\n lineAnchor,\n fontVariant,\n rotate: tickRotate,\n x,\n ...options,\n dy: anchor === \"bottom\" ? +dy + +tickSize + +tickPadding - insetBottom : +dy - tickSize - tickPadding + +insetTop\n }, function (scale, ticks, channels) {\n if (fontVariant === undefined)\n this.fontVariant = inferFontVariant(scale);\n if (text === undefined)\n channels.text = inferTextChannel(scale, ticks, tickFormat);\n });\n}\nexport function gridY() {\n const [data, options] = maybeData(...arguments);\n return gridKy(\"y\", anchorY(options), data, options);\n}\nexport function gridFy() {\n const [data, options] = maybeData(...arguments);\n return gridKy(\"fy\", anchorFy(options), data, options);\n}\n/** \n * ```js\n * Plot.gridX({strokeDasharray: \"5,3\"})\n * ```\n * \n * Returns a new *x* grid with the given *options*.\n * \n */\nexport function gridX() {\n const [data, options] = maybeData(...arguments);\n return gridKx(\"x\", anchorX(options), data, options);\n}\nexport function gridFx() {\n const [data, options] = maybeData(...arguments);\n return gridKx(\"fx\", anchorFx(options), data, options);\n}\nfunction gridKy(k, anchor, data, { y = k === \"y\" ? undefined : null, x = null, x1 = anchor === \"left\" ? x : null, x2 = anchor === \"right\" ? x : null, ...options }) {\n return axisMark(ruleY, k, `${k}-grid`, data, { y, x1, x2, ...gridDefaults(options) });\n}\nfunction gridKx(k, anchor, data, { x = k === \"x\" ? undefined : null, y = null, y1 = anchor === \"top\" ? y : null, y2 = anchor === \"bottom\" ? y : null, ...options }) {\n return axisMark(ruleX, k, `${k}-grid`, data, { x, y1, y2, ...gridDefaults(options) });\n}\nfunction gridDefaults({ color = \"currentColor\", opacity = 0.1, stroke = color, strokeOpacity = opacity, strokeWidth = 1, ...options }) {\n return { stroke, strokeOpacity, strokeWidth, ...options };\n}\nfunction axisMark(mark, k, ariaLabel, data, options, initialize) {\n let channels;\n const m = mark(data, initializer(options, function (data, facets, _channels, scales) {\n const { [k]: scale } = scales;\n if (!scale)\n throw new Error(`missing scale: ${k}`);\n let { ticks, tickSpacing, interval } = options;\n if (isTemporalScale(scale) && typeof ticks === \"string\")\n (interval = ticks), (ticks = undefined);\n if (data == null) {\n if (isIterable(ticks)) {\n data = arrayify(ticks);\n }\n else if (scale.ticks) {\n if (ticks !== undefined) {\n data = scale.ticks(ticks);\n }\n else {\n interval = maybeInterval(interval === undefined ? scale.interval : interval, scale.type);\n if (interval !== undefined) {\n // For time scales, we could pass the interval directly to\n // scale.ticks because it’s supported by d3.utcTicks; but\n // quantitative scales and d3.ticks do not support numeric\n // intervals for scale.ticks, so we compute them here.\n const [min, max] = extent(scale.domain());\n data = interval.range(min, interval.offset(interval.floor(max))); // inclusive max\n }\n else {\n const [min, max] = extent(scale.range());\n ticks = (max - min) / (tickSpacing === undefined ? (k === \"x\" ? 80 : 35) : tickSpacing);\n data = scale.ticks(ticks);\n }\n }\n }\n else {\n data = scale.domain();\n }\n if (k === \"y\" || k === \"x\") {\n facets = [range(data)];\n }\n else {\n channels[k] = { scale: k, value: identity };\n facets = undefined; // computed automatically by plot\n }\n }\n initialize?.call(this, scale, ticks, channels);\n return {\n data,\n facets,\n channels: Object.fromEntries(Object.entries(channels).map(([name, channel]) => [name, { ...channel, value: valueof(data, channel.value) }]))\n };\n }));\n if (data == null) {\n channels = m.channels;\n m.channels = {};\n }\n else {\n channels = {};\n }\n m.ariaLabel = ariaLabel;\n return m;\n}\nfunction inferTextChannel(scale, ticks, tickFormat) {\n return { value: inferTickFormat(scale, ticks, tickFormat) };\n}\n// D3’s ordinal scales simply use toString by default, but if the ordinal scale\n// domain (or ticks) are numbers or dates (say because we’re applying a time\n// interval to the ordinal scale), we want Plot’s default formatter.\nfunction inferTickFormat(scale, ticks, tickFormat) {\n return scale.tickFormat\n ? scale.tickFormat(isIterable(ticks) ? null : ticks, tickFormat)\n : tickFormat === undefined\n ? formatDefault\n : typeof tickFormat === \"string\"\n ? (isTemporal(scale.domain()) ? utcFormat : format)(tickFormat)\n : constant(tickFormat);\n}\nconst shapeTickBottom = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(0, l);\n }\n};\nconst shapeTickTop = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(0, -l);\n }\n};\nconst shapeTickLeft = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(-l, 0);\n }\n};\nconst shapeTickRight = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(l, 0);\n }\n};\n// TODO Unify this with the other inferFontVariant; here we only have a scale\n// function rather than a scale descriptor.\nfunction inferFontVariant(scale) {\n return scale.bandwidth && scale.interval === undefined ? undefined : \"tabular-nums\";\n}\n// Determines whether the scale points in the “positive” (right or down) or\n// “negative” (left or up) direction; if the scale order cannot be determined,\n// returns NaN; used to assign an appropriate label arrow.\nfunction inferScaleOrder(scale) {\n return Math.sign(orderof(scale.domain())) * Math.sign(orderof(scale.range()));\n}\n// Takes the scale label, and if this is not an ordinal scale and the label was\n// inferred from an associated channel, adds an orientation-appropriate arrow.\nfunction inferAxisLabel(key, scale, labelAnchor) {\n const label = scale.label;\n if (scale.bandwidth || !label?.inferred)\n return label;\n const order = inferScaleOrder(scale);\n return order\n ? key === \"x\" || labelAnchor === \"center\"\n ? (key === \"x\") === order < 0\n ? `← ${label}`\n : `${label} →`\n : `${order < 0 ? \"↑ \" : \"↓ \"}${label}`\n : label;\n}\n","import { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { maybeKeyword, number } from \"../options.js\";\nimport { applyDirectStyles, applyIndirectStyles, applyTransform } from \"../style.js\";\nconst defaults = {\n ariaLabel: \"frame\",\n fill: \"none\",\n stroke: \"currentColor\"\n};\nconst lineDefaults = {\n ariaLabel: \"frame\",\n fill: null,\n stroke: \"currentColor\",\n strokeLinecap: \"square\"\n};\nexport class Frame extends Mark {\n constructor(options = {}) {\n const { anchor = null, inset = 0, insetTop = inset, insetRight = inset, insetBottom = inset, insetLeft = inset, rx, ry } = options;\n super(undefined, undefined, options, anchor == null ? defaults : lineDefaults);\n this.anchor = maybeKeyword(anchor, \"anchor\", [\"top\", \"right\", \"bottom\", \"left\"]);\n this.insetTop = number(insetTop);\n this.insetRight = number(insetRight);\n this.insetBottom = number(insetBottom);\n this.insetLeft = number(insetLeft);\n this.rx = number(rx);\n this.ry = number(ry);\n }\n render(index, scales, channels, dimensions, context) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height } = dimensions;\n const { anchor, insetTop, insetRight, insetBottom, insetLeft, rx, ry } = this;\n const x1 = marginLeft + insetLeft;\n const x2 = width - marginRight - insetRight;\n const y1 = marginTop + insetTop;\n const y2 = height - marginBottom - insetBottom;\n return create(anchor ? \"svg:line\" : \"svg:rect\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyDirectStyles, this)\n .call(applyTransform, this, {})\n .call(anchor === \"left\"\n ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x1).attr(\"y1\", y1).attr(\"y2\", y2)\n : anchor === \"right\"\n ? (line) => line.attr(\"x1\", x2).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y2)\n : anchor === \"top\"\n ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y1)\n : anchor === \"bottom\"\n ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y2).attr(\"y2\", y2)\n : (rect) => rect\n .attr(\"x\", x1)\n .attr(\"y\", y1)\n .attr(\"width\", x2 - x1)\n .attr(\"height\", y2 - y1)\n .attr(\"rx\", rx)\n .attr(\"ry\", ry))\n .node();\n }\n}\n/** \n * ```js\n * Plot.frame({stroke: \"red\"})\n * ```\n * \n * Returns a new frame with the specified *options*.\n * \n */\nexport function frame(options) {\n return new Frame(options);\n}\n","import { select } from \"d3\";\nimport { Channel, inferChannelScale } from \"./channel.js\";\nimport { Context, create } from \"./context.js\";\nimport { Dimensions } from \"./dimensions.js\";\nimport { Facets, facetExclude, facetGroups, facetOrder, facetTranslate, facetFilter } from \"./facet.js\";\nimport { Legends, exposeLegends } from \"./legends.js\";\nimport { Mark } from \"./mark.js\";\nimport { axisFx, axisFy, axisX, axisY, gridFx, gridFy, gridX, gridY } from \"./marks/axis.js\";\nimport { frame } from \"./marks/frame.js\";\nimport { arrayify, isColor, isIterable, isNone, isScaleOptions, map, yes, maybeInterval } from \"./options.js\";\nimport { Scales, ScaleFunctions, autoScaleRange, exposeScales, innerDimensions, outerDimensions } from \"./scales.js\";\nimport { position, registry as scaleRegistry } from \"./scales/index.js\";\nimport { applyInlineStyles, maybeClassName } from \"./style.js\";\nimport { consumeWarnings, warn } from \"./warnings.js\";\n/** \n * Renders a new plot given the specified *options* and returns the corresponding SVG or HTML figure element. All *options* are optional.\n * \n * ### Mark options\n * \n * The **marks** option specifies an array of [marks](https://github.com/observablehq/plot/blob/main/README.md#marks) to render. Each mark has its own data and options; see the respective mark type (*e.g.*, [bar](https://github.com/observablehq/plot/blob/main/README.md#bar) or [dot](https://github.com/observablehq/plot/blob/main/README.md#dot)) for which mark options are supported. Each mark may be a nested array of marks, allowing composition. Marks may also be a function which returns an SVG element, if you wish to insert some arbitrary content into your plot. And marks may be null or undefined, which produce no output; this is useful for showing marks conditionally (*e.g.*, when a box is checked). Marks are drawn in *z* order, last on top. For example, here a single rule at *y* = 0 is drawn on top of blue bars for the [*alphabet* dataset](https://github.com/observablehq/plot/blob/main/test/data/alphabet.csv).\n * \n * ```js\n * Plot.plot({\n * marks: [\n * Plot.barY(alphabet, {x: \"letter\", y: \"frequency\", fill: \"steelblue\"}),\n * Plot.ruleY([0])\n * ]\n * })\n * ```\n * \n * ### Layout options\n * \n * These options determine the overall layout of the plot; all are specified as numbers in pixels:\n * \n * * **marginTop** - the top margin\n * * **marginRight** - the right margin\n * * **marginBottom** - the bottom margin\n * * **marginLeft** - the left margin\n * * **margin** - shorthand for the four margins\n * * **width** - the outer width of the plot (including margins)\n * * **height** - the outer height of the plot (including margins)\n * * **aspectRatio** - the desired aspect ratio of data (affecting default **height**)\n * \n * The default **width** is 640. On Observable, the width can be set to the [standard width](https://github.com/observablehq/stdlib/blob/main/README.md#width) to make responsive plots. The default **height** is chosen automatically based on the plot’s associated scales; for example, if *y* is linear and there is no *fy* scale, it might be 396. The default margins depend on the maximum margins of the plot’s constituent [marks](https://github.com/observablehq/plot/blob/main/README.md#mark-options). While most marks default to zero margins (because they are drawn inside the chart area), Plot’s [axis mark](https://github.com/observablehq/plot/blob/main/README.md#axis) has non-zero default margins.\n * \n * The **aspectRatio** option, if not null, computes a default **height** such that a variation of one unit in the *x* dimension is represented by the corresponding number of pixels as a variation in the *y* dimension of one unit. Note: when using facets, set the *fx* and *fy* scales’ **round** option to false if you need an exact aspect ratio.\n * \n * The **style** option allows custom styles to override Plot’s defaults. It may be specified either as a string of inline styles (*e.g.*, `\"color: red;\"`, in the same fashion as assigning [*element*.style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style)) or an object of properties (*e.g.*, `{color: \"red\"}`, in the same fashion as assigning [*element*.style properties](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration)). Note that unitless numbers ([quirky lengths](https://www.w3.org/TR/css-values-4/#deprecated-quirky-length)) such as `{padding: 20}` may not supported by some browsers; you should instead specify a string with units such as `{padding: \"20px\"}`. By default, the returned plot has a white background, a max-width of 100%, and the system-ui font. Plot’s marks and axes default to [currentColor](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentcolor_keyword), meaning that they will inherit the surrounding content’s color. For example, a dark theme:\n * \n * ```js\n * Plot.plot({\n * marks: …,\n * style: {\n * background: \"black\",\n * color: \"white\"\n * }\n * })\n * ```\n * \n * If a **caption** is specified, Plot.plot wraps the generated SVG element in an HTML figure element with a figcaption, returning the figure. To specify an HTML caption, consider using the [`html` tagged template literal](http://github.com/observablehq/htl); otherwise, the specified string represents text that will be escaped as needed.\n * \n * ```js\n * Plot.plot({\n * marks: …,\n * caption: html`Figure 1. This chart has a fancy caption.`\n * })\n * ```\n * \n * The generated SVG element has a random class name which applies a default stylesheet. Use the top-level **className** option to specify that class name.\n * \n * The **document** option specifies the [document](https://developer.mozilla.org/en-US/docs/Web/API/Document) used to create plot elements. It defaults to window.document, but can be changed to another document, say when using a virtual DOM library for server-side rendering in Node.\n * \n * ### Scale options\n * \n * Plot passes data through [scales](https://observablehq.com/@observablehq/plot-scales) as needed before rendering marks. A scale maps abstract values such as time or temperature to visual values such as position or color. Within a given plot, marks share scales. For example, if a plot has two Plot.line marks, both share the same *x* and *y* scales for a consistent representation of data. (Plot does not currently support dual-axis charts, which are [not advised](https://blog.datawrapper.de/dualaxis/).)\n * \n * ```js\n * Plot.plot({\n * marks: [\n * Plot.line(aapl, {x: \"Date\", y: \"Close\"}),\n * Plot.line(goog, {x: \"Date\", y: \"Close\"})\n * ]\n * })\n * ```\n * \n * Each scale’s options are specified as a nested options object with the corresponding scale name within the top-level plot *options*:\n * \n * * **x** - horizontal position\n * * **y** - vertical position\n * * **r** - radius (size)\n * * **color** - fill or stroke\n * * **opacity** - fill or stroke opacity\n * * **length** - linear length (for [vectors](https://github.com/observablehq/plot/blob/main/README.md#vector))\n * * **symbol** - categorical symbol (for [dots](https://github.com/observablehq/plot/blob/main/README.md#dot))\n * \n * For example, to set the domain for the *x* and *y* scales:\n * \n * ```js\n * Plot.plot({\n * x: {\n * domain: [new Date(\"1880-01-01\"), new Date(\"2016-11-01\")]\n * },\n * y: {\n * domain: [-0.78, 1.35]\n * }\n * })\n * ```\n * \n * Plot supports many scale types. Some scale types are for quantitative data: values that can be added or subtracted, such as temperature or time. Other scale types are for ordinal or categorical data: unquantifiable values that can only be ordered, such as t-shirt sizes, or values with no inherent order that can only be tested for equality, such as types of fruit. Some scale types are further intended for specific visual encodings: for example, as [position](https://github.com/observablehq/plot/blob/main/README.md#position-options) or [color](https://github.com/observablehq/plot/blob/main/README.md#color-options).\n * \n * You can set the scale type explicitly via the *scale*.**type** option, though typically the scale type is inferred automatically. Some marks mandate a particular scale type: for example, [Plot.barY](https://github.com/observablehq/plot/blob/main/README.md#plotbarydata-options) requires that the *x* scale is a *band* scale. Some scales have a default type: for example, the *radius* scale defaults to *sqrt* and the *opacity* scale defaults to *linear*. Most often, the scale type is inferred from associated data, pulled either from the domain (if specified) or from associated channels. Strings and booleans imply an ordinal scale; dates imply a UTC scale; and anything else is linear. Unless they represent text, we recommend explicitly converting strings to more specific types when loading data (*e.g.*, with d3.autoType or Observable’s FileAttachment). For simplicity’s sake, Plot assumes that data is consistently typed; type inference is based solely on the first non-null, non-undefined value.\n * \n * For quantitative data (*i.e.* numbers), a mathematical transform may be applied to the data by changing the scale type:\n * \n * * *linear* (default) - linear transform (translate and scale)\n * * *pow* - power (exponential) transform\n * * *sqrt* - square-root transform (*pow* transform with exponent = 0.5)\n * * *log* - logarithmic transform\n * * *symlog* - bi-symmetric logarithmic transform per [Webber *et al.*](https://www.researchgate.net/publication/233967063_A_bi-symmetric_log_transformation_for_wide-range_data)\n * \n * The appropriate transform depends on the data’s distribution and what you wish to know. A *sqrt* transform exaggerates differences between small values at the expense of large values; it is a special case of the *pow* transform which has a configurable *scale*.**exponent** (0.5 for *sqrt*). A *log* transform is suitable for comparing orders of magnitude and can only be used when the domain does not include zero. The base defaults to 10 and can be specified with the *scale*.**base** option; note that this only affects the axis ticks and not the scale’s behavior. A *symlog* transform is more elaborate, but works well with wide-range values that include zero; it can be configured with the *scale*.**constant** option (default 1).\n * \n * For temporal data (*i.e.* dates), two variants of a *linear* scale are also supported:\n * \n * * *utc* (default, recommended) - UTC time\n * * *time* - local time\n * \n * UTC is recommended over local time as charts in UTC time are guaranteed to appear consistently to all viewers whereas charts in local time will depend on the viewer’s time zone. Due to limitations in JavaScript’s Date class, Plot does not yet support an explicit time zone other than UTC.\n * \n * For ordinal data (*e.g.*, strings), use the *ordinal* scale type or the *point* or *band* [position scale types](https://github.com/observablehq/plot/blob/main/README.md#position-options). The *categorical* scale type is also supported; it is equivalent to *ordinal* except as a [color scale](https://github.com/observablehq/plot/blob/main/README.md#color-options), where it provides a different default color scheme. (Since position is inherently ordinal or even quantitative, categorical data must be assigned an effective order when represented as position, and hence *categorical* and *ordinal* may be considered synonymous in context.)\n * \n * You can opt-out of a scale using the *identity* scale type. This is useful if you wish to specify literal colors or pixel positions within a mark channel rather than relying on the scale to convert abstract values into visual values. For position scales (*x* and *y*), an *identity* scale is still quantitative and may produce an axis, yet unlike a *linear* scale the domain and range are fixed based on the plot layout. (To opt out of a scale for a single channel, you can specify the channel values as a {value, scale} object; see [mark options](https://github.com/observablehq/plot/blob/main/README.md#mark-options).)\n * \n * Quantitative scales, as well as identity position scales, coerce channel values to numbers; both null and undefined are coerced to NaN. Similarly, time scales coerce channel values to dates; numbers are assumed to be milliseconds since UNIX epoch, while strings are assumed to be in [ISO 8601 format](https://github.com/mbostock/isoformat/blob/main/README.md#parsedate-fallback).\n * \n * A scale’s domain (the extent of its inputs, abstract values) and range (the extent of its outputs, visual values) are typically inferred automatically. You can set them explicitly using these options:\n * \n * * *scale*.**domain** - typically [*min*, *max*], or an array of ordinal or categorical values\n * * *scale*.**range** - typically [*min*, *max*], or an array of ordinal or categorical values\n * * *scale*.**unknown** - the desired output value (defaults to undefined) for invalid input values\n * * *scale*.**reverse** - reverses the domain (or in somes cases, the range), say to flip the chart along *x* or *y*\n * * *scale*.**interval** - an interval or time interval (for interval data; see below)\n * \n * For most quantitative scales, the default domain is the [*min*, *max*] of all values associated with the scale. For the *radius* and *opacity* scales, the default domain is [0, *max*] to ensure a meaningful value encoding. For ordinal scales, the default domain is the set of all distinct values associated with the scale in natural ascending order; for a different order, set the domain explicitly or add a [sort option](https://github.com/observablehq/plot/blob/main/README.md#sort-options) to an associated mark. For threshold scales, the default domain is [0] to separate negative and non-negative values. For quantile scales, the default domain is the set of all defined values associated with the scale. If a scale is reversed, it is equivalent to setting the domain as [*max*, *min*] instead of [*min*, *max*].\n * \n * The default range depends on the scale: for [position scales](https://github.com/observablehq/plot/blob/main/README.md#position-options) (*x*, *y*, *fx*, and *fy*), the default range depends on the plot’s [size and margins](https://github.com/observablehq/plot/blob/main/README.md#layout-options). For [color scales](https://github.com/observablehq/plot/blob/main/README.md#color-options), there are default color schemes for quantitative, ordinal, and categorical data. For opacity, the default range is [0, 1]. And for radius, the default range is designed to produce dots of “reasonable” size assuming a *sqrt* scale type for accurate area representation: zero maps to zero, the first quartile maps to a radius of three pixels, and other values are extrapolated. This convention for radius ensures that if the scale’s data values are all equal, dots have the default constant radius of three pixels, while if the data varies, dots will tend to be larger.\n * \n * The behavior of the *scale*.**unknown** option depends on the scale type. For quantitative and temporal scales, the unknown value is used whenever the input value is undefined, null, or NaN. For ordinal or categorical scales, the unknown value is returned for any input value outside the domain. For band or point scales, the unknown option has no effect; it is effectively always equal to undefined. If the unknown option is set to undefined (the default), or null or NaN, then the affected input values will be considered undefined and filtered from the output.\n * \n * For data at regular intervals, such as integer values or daily samples, the *scale*.**interval** option can be used to enforce uniformity. The specified *interval*—such as d3.utcMonth—must expose an *interval*.floor(*value*), *interval*.offset(*value*), and *interval*.range(*start*, *stop*) functions. The option can also be specified as a number, in which case it will be promoted to a numeric interval with the given step. The option can alternatively be specified as a string (second, minute, hour, day, week, month, year, monday, tuesday, wednesday, thursday, friday, saturday, sunday) naming the corresponding UTC interval. This option sets the default *scale*.transform to the given interval’s *interval*.floor function. In addition, the default *scale*.domain is an array of uniformly-spaced values spanning the extent of the values associated with the scale.\n * \n * Quantitative scales can be further customized with additional options:\n * \n * * *scale*.**clamp** - if true, clamp input values to the scale’s domain\n * * *scale*.**nice** - if true (or a tick count), extend the domain to nice round values\n * * *scale*.**zero** - if true, extend the domain to include zero if needed\n * * *scale*.**percent** - if true, transform proportions in [0, 1] to percentages in [0, 100]\n * \n * Clamping is typically used in conjunction with setting an explicit domain since if the domain is inferred, no values will be outside the domain. Clamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Top-level **clamp**, **nice**, and **zero** options are supported as shorthand for setting the respective option on all scales.\n * \n * The *scale*.**transform** option allows you to apply a function to all values before they are passed through the scale. This is convenient for transforming a scale’s data, say to convert to thousands or between temperature units.\n * \n * ```js\n * Plot.plot({\n * y: {\n * label: \"↑ Temperature (°F)\",\n * transform: f => f * 9 / 5 + 32 // convert Celsius to Fahrenheit\n * },\n * marks: …\n * })\n * ```\n * \n */\nexport function plot(options = {}) {\n const { facet, style, caption, ariaLabel, ariaDescription } = options;\n // className for inline styles\n const className = maybeClassName(options.className);\n // Flatten any nested marks.\n const marks = options.marks === undefined ? [] : flatMarks(options.marks);\n // Compute the top-level facet state. This has roughly the same structure as\n // mark-specific facet state, except there isn’t a facetsIndex, and there’s a\n // data and dataLength so we can warn the user if a different data of the same\n // length is used in a mark.\n const topFacetState = maybeTopFacet(facet, options);\n // Construct a map from (faceted) Mark instance to facet state, including:\n // channels - an {fx?, fy?} object to add to the fx and fy scale\n // groups - a possibly-nested map from facet values to indexes in the data array\n // facetsIndex - a sparse nested array of indices corresponding to the valid facets\n const facetStateByMark = new Map();\n for (const mark of marks) {\n const facetState = maybeMarkFacet(mark, topFacetState, options);\n if (facetState)\n facetStateByMark.set(mark, facetState);\n }\n // Compute a Map from scale name to an array of associated channels.\n const channelsByScale = new Map();\n if (topFacetState)\n addScaleChannels(channelsByScale, [topFacetState]);\n addScaleChannels(channelsByScale, facetStateByMark);\n // Add implicit axis marks. Because this happens after faceting (because it\n // depends on whether faceting is present), we must initialize the facet state\n // of any implicit axes, too.\n const axes = flatMarks(inferAxes(marks, channelsByScale, options));\n for (const mark of axes) {\n const facetState = maybeMarkFacet(mark, topFacetState, options);\n if (facetState)\n facetStateByMark.set(mark, facetState);\n }\n marks.unshift(...axes);\n // All the possible facets are given by the domains of the fx or fy scales, or\n // the cross-product of these domains if we facet by both x and y. We sort\n // them in order to apply the facet filters afterwards.\n const facets = Facets(channelsByScale, options);\n if (facets !== undefined) {\n const topFacetsIndex = topFacetState ? facetFilter(facets, topFacetState) : undefined;\n // Compute a facet index for each mark, parallel to the facets array. For\n // mark-level facets, compute an index for that mark’s data and options.\n // Otherwise, use the top-level facet index.\n for (const mark of marks) {\n if (mark.facet === null || mark.facet === \"super\")\n continue;\n const facetState = facetStateByMark.get(mark);\n if (facetState === undefined)\n continue;\n facetState.facetsIndex = mark.fx != null || mark.fy != null ? facetFilter(facets, facetState) : topFacetsIndex;\n }\n // The cross product of the domains of fx and fy can include fx-fy\n // combinations for which no mark has an instance associated with that\n // combination, and therefore we don’t want to render this facet (not even\n // the frame). The same can occur if you specify the domain of fx and fy\n // explicitly, but there is no mark instance associated with some values in\n // the domain. Expunge empty facets, and clear the corresponding elements\n // from the nested index in each mark.\n const nonEmpty = new Set();\n for (const { facetsIndex } of facetStateByMark.values()) {\n facetsIndex?.forEach((index, i) => {\n if (index?.length > 0) {\n nonEmpty.add(i);\n }\n });\n }\n // If all the facets are empty (as when none of the marks are actually\n // faceted), none of them are empty.\n facets.forEach(0 < nonEmpty.size && nonEmpty.size < facets.length\n ? (f, i) => (f.empty = !nonEmpty.has(i))\n : (f) => (f.empty = false));\n // For any mark using the “exclude” facet mode, invert the index.\n for (const mark of marks) {\n if (mark.facet === \"exclude\") {\n const facetState = facetStateByMark.get(mark);\n if (facetState !== undefined)\n facetState.facetsIndex = facetExclude(facetState.facetsIndex);\n }\n }\n }\n // If a scale is explicitly declared in options, initialize its associated\n // channels to the empty array; this will guarantee that a corresponding scale\n // will be created later (even if there are no other channels). Ignore facet\n // scale declarations, which are handled above.\n for (const key of scaleRegistry.keys()) {\n if (isScaleOptions(options[key]) && key !== \"fx\" && key !== \"fy\") {\n channelsByScale.set(key, []);\n }\n }\n // A Map from Mark instance to its render state, including:\n // index - the data index e.g. [0, 1, 2, 3, …]\n // channels - an array of materialized channels e.g. [[\"x\", {value}], …]\n // faceted - a boolean indicating whether this mark is faceted\n // values - an object of scaled values e.g. {x: [40, 32, …], …}\n const stateByMark = new Map();\n // Initialize the marks’ state.\n for (const mark of marks) {\n if (stateByMark.has(mark))\n throw new Error(\"duplicate mark; each mark must be unique\");\n const { facetsIndex, channels: facetChannels } = facetStateByMark.get(mark) ?? {};\n const { data, facets, channels } = mark.initialize(facetsIndex, facetChannels);\n applyScaleTransforms(channels, options);\n stateByMark.set(mark, { data, facets, channels });\n }\n // Initalize the scales and dimensions.\n const scaleDescriptors = Scales(addScaleChannels(channelsByScale, stateByMark), options);\n const scales = ScaleFunctions(scaleDescriptors);\n const dimensions = Dimensions(scaleDescriptors, marks, options);\n autoScaleRange(scaleDescriptors, dimensions);\n const { fx, fy } = scales;\n const subdimensions = fx || fy ? innerDimensions(scaleDescriptors, dimensions) : dimensions;\n const superdimensions = fx || fy ? actualDimensions(scales, dimensions) : dimensions;\n const context = Context(options, subdimensions, scaleDescriptors);\n // Reinitialize; for deriving channels dependent on other channels.\n const newByScale = new Set();\n for (const [mark, state] of stateByMark) {\n if (mark.initializer != null) {\n const dimensions = mark.facet === \"super\" ? superdimensions : subdimensions;\n const update = mark.initializer(state.data, state.facets, state.channels, scales, dimensions, context);\n if (update.data !== undefined) {\n state.data = update.data;\n }\n if (update.facets !== undefined) {\n state.facets = update.facets;\n }\n if (update.channels !== undefined) {\n inferChannelScales(update.channels);\n Object.assign(state.channels, update.channels);\n for (const channel of Object.values(update.channels)) {\n const { scale } = channel;\n // Initializers aren’t allowed to redefine position scales as this\n // would introduce a circular dependency; so simply scale these\n // channels as-is rather than creating new scales, and assume that\n // they already have the scale’s transform applied, if any (e.g., when\n // generating ticks for the axis mark).\n if (scale != null && scaleRegistry.get(scale) !== position) {\n applyScaleTransform(channel, options);\n newByScale.add(scale);\n }\n }\n // If the initializer returns new mark-level facet channels, we must\n // also recompute the facet state.\n const { fx, fy } = update.channels;\n if (fx != null || fy != null) {\n const facetState = facetStateByMark.get(mark) ?? { channels: {} };\n if (fx != null)\n facetState.channels.fx = fx;\n if (fy != null)\n facetState.channels.fy = fy;\n facetState.groups = facetGroups(state.data, facetState.channels);\n facetState.facetsIndex = state.facets = facetFilter(facets, facetState);\n facetStateByMark.set(mark, facetState);\n }\n }\n }\n }\n // Reconstruct scales if new scaled channels were created during\n // reinitialization. Preserve existing scale labels, if any.\n if (newByScale.size) {\n const newChannelsByScale = new Map();\n addScaleChannels(newChannelsByScale, stateByMark, (key) => newByScale.has(key));\n addScaleChannels(channelsByScale, stateByMark, (key) => newByScale.has(key));\n const newScaleDescriptors = inheritScaleLabels(Scales(newChannelsByScale, options), scaleDescriptors);\n const newScales = ScaleFunctions(newScaleDescriptors);\n Object.assign(scaleDescriptors, newScaleDescriptors);\n Object.assign(scales, newScales);\n }\n // Compute value objects, applying scales and projection as needed.\n for (const [mark, state] of stateByMark) {\n state.values = mark.scale(state.channels, scales, context);\n }\n const { width, height } = dimensions;\n const svg = create(\"svg\", context)\n .attr(\"class\", className)\n .attr(\"fill\", \"currentColor\")\n .attr(\"font-family\", \"system-ui, sans-serif\")\n .attr(\"font-size\", 10)\n .attr(\"text-anchor\", \"middle\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"viewBox\", `0 0 ${width} ${height}`)\n .attr(\"aria-label\", ariaLabel)\n .attr(\"aria-description\", ariaDescription)\n .call((svg) => svg.append(\"style\").text(`\n .${className} {\n display: block;\n background: white;\n height: auto;\n height: intrinsic;\n max-width: 100%;\n }\n .${className} text,\n .${className} tspan {\n white-space: pre;\n }\n `))\n .call(applyInlineStyles, style)\n .node();\n // Render facets.\n if (facets !== undefined) {\n const facetDomains = { x: fx?.domain(), y: fy?.domain() };\n // Sort the facets to match the fx and fy domains; this is needed because\n // the facets were constructed prior to the fx and fy scales.\n facets.sort(facetOrder(facetDomains));\n // Render the facets.\n select(svg)\n .selectAll()\n .data(facets)\n .enter()\n .append(\"g\")\n .attr(\"aria-label\", \"facet\")\n .attr(\"transform\", facetTranslate(fx, fy, dimensions))\n .each(function (f) {\n let empty = true;\n for (const mark of marks) {\n if (mark.facet === \"super\")\n continue; // rendered below\n const { channels, values, facets: indexes } = stateByMark.get(mark);\n if (!(mark.facetAnchor?.(facets, facetDomains, f) ?? !f.empty))\n continue;\n let index = null;\n if (indexes) {\n index = indexes[facetStateByMark.has(mark) ? f.i : 0];\n index = mark.filter(index, channels, values);\n if (index.length === 0)\n continue;\n index.fi = f.i; // TODO cleaner way of exposing the current facet index?\n }\n const node = mark.render(index, scales, values, subdimensions, context);\n if (node == null)\n continue;\n empty = false;\n this.appendChild(node);\n }\n if (empty)\n this.remove();\n });\n }\n // Render non-faceted marks.\n for (const mark of marks) {\n if (facets !== undefined && mark.facet !== \"super\")\n continue;\n const { channels, values, facets: indexes } = stateByMark.get(mark);\n let index = null;\n if (indexes) {\n index = indexes[0];\n index = mark.filter(index, channels, values);\n if (index.length === 0)\n continue;\n }\n const node = mark.render(index, scales, values, superdimensions, context);\n if (node != null)\n svg.appendChild(node);\n }\n // Wrap the plot in a figure with a caption, if desired.\n let figure = svg;\n const legends = Legends(scaleDescriptors, context, options);\n if (caption != null || legends.length > 0) {\n const { document } = context;\n figure = document.createElement(\"figure\");\n figure.style.maxWidth = \"initial\";\n for (const legend of legends)\n figure.appendChild(legend);\n figure.appendChild(svg);\n if (caption != null) {\n const figcaption = document.createElement(\"figcaption\");\n figcaption.appendChild(caption instanceof Node ? caption : document.createTextNode(caption));\n figure.appendChild(figcaption);\n }\n }\n figure.scale = exposeScales(scaleDescriptors);\n figure.legend = exposeLegends(scaleDescriptors, context, options);\n const w = consumeWarnings();\n if (w > 0) {\n select(svg)\n .append(\"text\")\n .attr(\"x\", width)\n .attr(\"y\", 20)\n .attr(\"dy\", \"-1em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"font-family\", \"initial\") // fix emoji rendering in Chrome\n .text(\"\\u26a0\\ufe0f\") // emoji variation selector\n .append(\"title\")\n .text(`${w.toLocaleString(\"en-US\")} warning${w === 1 ? \"\" : \"s\"}. Please check the console.`);\n }\n return figure;\n}\nfunction plotThis({ marks = [], ...options } = {}) {\n return plot({ ...options, marks: [...marks, this] });\n}\n// Note: This side-effect avoids a circular dependency.\nMark.prototype.plot = plotThis;\nfunction flatMarks(marks) {\n return marks\n .flat(Infinity)\n .filter((mark) => mark != null)\n .map(markify);\n}\nfunction markify(mark) {\n return typeof mark.render === \"function\" ? mark : new Render(mark);\n}\nclass Render extends Mark {\n constructor(render) {\n if (typeof render !== \"function\")\n throw new TypeError(\"invalid mark; missing render function\");\n super();\n this.render = render;\n }\n render() { }\n}\n// Note: mutates channel.value to apply the scale transform, if any.\nfunction applyScaleTransforms(channels, options) {\n for (const name in channels)\n applyScaleTransform(channels[name], options);\n return channels;\n}\n// Note: mutates channel.value to apply the scale transform, if any.\nfunction applyScaleTransform(channel, options) {\n const { scale } = channel;\n if (scale == null)\n return;\n const { type, percent, interval, transform = percent ? (x) => x * 100 : maybeInterval(interval, type)?.floor } = options[scale] ?? {};\n if (transform != null)\n channel.value = map(channel.value, transform);\n}\n// An initializer may generate channels without knowing how the downstream mark\n// will use them. Marks are typically responsible associated scales with\n// channels, but here we assume common behavior across marks.\nfunction inferChannelScales(channels) {\n for (const name in channels) {\n inferChannelScale(name, channels[name]);\n }\n}\nfunction addScaleChannels(channelsByScale, stateByMark, filter = yes) {\n for (const { channels } of stateByMark.values()) {\n for (const name in channels) {\n const channel = channels[name];\n const { scale } = channel;\n if (scale != null && filter(scale)) {\n const scaleChannels = channelsByScale.get(scale);\n if (scaleChannels !== undefined)\n scaleChannels.push(channel);\n else\n channelsByScale.set(scale, [channel]);\n }\n }\n }\n return channelsByScale;\n}\n// Returns the facet groups, and possibly fx and fy channels, associated with\n// the top-level facet option {data, x, y}.\nfunction maybeTopFacet(facet, options) {\n if (facet == null)\n return;\n const { x, y } = facet;\n if (x == null && y == null)\n return;\n const data = arrayify(facet.data ?? x ?? y);\n if (data === undefined)\n throw new Error(`missing facet data`);\n const channels = {};\n if (x != null)\n channels.fx = Channel(data, { value: x, scale: \"fx\" });\n if (y != null)\n channels.fy = Channel(data, { value: y, scale: \"fy\" });\n applyScaleTransforms(channels, options);\n const groups = facetGroups(data, channels);\n return { channels, groups, data: facet.data };\n}\n// Returns the facet groups, and possibly fx and fy channels, associated with a\n// mark, either through top-level faceting or mark-level facet options {fx, fy}.\nfunction maybeMarkFacet(mark, topFacetState, options) {\n if (mark.facet === null || mark.facet === \"super\")\n return;\n // This mark defines a mark-level facet. TODO There’s some code duplication\n // here with maybeTopFacet that we could reduce.\n const { fx, fy } = mark;\n if (fx != null || fy != null) {\n const data = arrayify(mark.data ?? fx ?? fy);\n if (data === undefined)\n throw new Error(`missing facet data in ${mark.ariaLabel}`);\n if (data === null)\n return; // ignore channel definitions if no data is provided TODO this right?\n const channels = {};\n if (fx != null)\n channels.fx = Channel(data, { value: fx, scale: \"fx\" });\n if (fy != null)\n channels.fy = Channel(data, { value: fy, scale: \"fy\" });\n applyScaleTransforms(channels, options);\n return { channels, groups: facetGroups(data, channels) };\n }\n // This mark links to a top-level facet, if present.\n if (topFacetState === undefined)\n return;\n // TODO Can we link the top-level facet channels here?\n const { channels, groups, data } = topFacetState;\n if (mark.facet !== \"auto\" || mark.data === data)\n return { channels, groups };\n // Warn for the common pitfall of wanting to facet mapped data with the\n // top-level facet option.\n if ((groups.size > 1 || (groups.size === 1 && channels.fx && channels.fy && [...groups][0][1].size > 1)) &&\n arrayify(mark.data)?.length === data.length) {\n warn(`Warning: the ${mark.ariaLabel} mark appears to use faceted data, but isn’t faceted. The mark data has the same length as the facet data and the mark facet option is \"auto\", but the mark data and facet data are distinct. If this mark should be faceted, set the mark facet option to true; otherwise, suppress this warning by setting the mark facet option to false.`);\n }\n}\nfunction inferAxes(marks, channelsByScale, options) {\n let { projection, x = {}, y = {}, fx = {}, fy = {}, axis, grid, facet = {}, facet: { axis: facetAxis = axis, grid: facetGrid } = facet, x: { axis: xAxis = axis, grid: xGrid = xAxis === null ? null : grid } = x, y: { axis: yAxis = axis, grid: yGrid = yAxis === null ? null : grid } = y, fx: { axis: fxAxis = facetAxis, grid: fxGrid = fxAxis === null ? null : facetGrid } = fx, fy: { axis: fyAxis = facetAxis, grid: fyGrid = fyAxis === null ? null : facetGrid } = fy } = options;\n // Disable axes if the corresponding scale is not present.\n if (projection || (!isScaleOptions(x) && !hasScaleChannel(\"x\", marks)))\n xAxis = xGrid = null;\n if (projection || (!isScaleOptions(y) && !hasScaleChannel(\"y\", marks)))\n yAxis = yGrid = null;\n if (!channelsByScale.has(\"fx\"))\n fxAxis = fxGrid = null;\n if (!channelsByScale.has(\"fy\"))\n fyAxis = fyGrid = null;\n // Resolve the default implicit axes by checking for explicit ones.\n if (xAxis === undefined)\n xAxis = !hasAxis(marks, \"x\");\n if (yAxis === undefined)\n yAxis = !hasAxis(marks, \"y\");\n if (fxAxis === undefined)\n fxAxis = !hasAxis(marks, \"fx\");\n if (fyAxis === undefined)\n fyAxis = !hasAxis(marks, \"fy\");\n // Resolve the default orientation of axes.\n if (xAxis === true)\n xAxis = \"bottom\";\n if (yAxis === true)\n yAxis = \"left\";\n if (fxAxis === true)\n fxAxis = xAxis === \"top\" || xAxis === null ? \"bottom\" : \"top\";\n if (fyAxis === true)\n fyAxis = yAxis === \"right\" || yAxis === null ? \"left\" : \"right\";\n const axes = [];\n maybeGrid(axes, fyGrid, gridFy, fy);\n maybeAxis(axes, fyAxis, axisFy, \"right\", \"left\", facet, fy);\n maybeGrid(axes, fxGrid, gridFx, fx);\n maybeAxis(axes, fxAxis, axisFx, \"top\", \"bottom\", facet, fx);\n maybeGrid(axes, yGrid, gridY, y);\n maybeAxis(axes, yAxis, axisY, \"left\", \"right\", options, y);\n maybeGrid(axes, xGrid, gridX, x);\n maybeAxis(axes, xAxis, axisX, \"bottom\", \"top\", options, x);\n return axes;\n}\nfunction maybeAxis(axes, axis, axisType, primary, secondary, defaults, options) {\n if (!axis)\n return;\n const both = isBoth(axis);\n options = axisOptions(both ? primary : axis, defaults, options);\n const { line } = options;\n if ((axisType === axisY || axisType === axisX) && line && !isNone(line))\n axes.push(frame(lineOptions(options)));\n axes.push(axisType(options));\n if (both)\n axes.push(axisType({ ...options, anchor: secondary, label: null }));\n}\nfunction maybeGrid(axes, grid, gridType, options) {\n if (!grid || isNone(grid))\n return;\n axes.push(gridType(gridOptions(grid, options)));\n}\nfunction isBoth(value) {\n return /^\\s*both\\s*$/i.test(value);\n}\nfunction axisOptions(anchor, defaults, { line = defaults.line, ticks, tickSize, tickSpacing, tickPadding, tickFormat, tickRotate, fontVariant, ariaLabel, ariaDescription, label = defaults.label, labelAnchor, labelOffset }) {\n return {\n anchor,\n line,\n ticks,\n tickSize,\n tickSpacing,\n tickPadding,\n tickFormat,\n tickRotate,\n fontVariant,\n ariaLabel,\n ariaDescription,\n label,\n labelAnchor,\n labelOffset\n };\n}\nfunction lineOptions(options) {\n const { anchor, line } = options;\n return { anchor, facetAnchor: anchor + \"-empty\", stroke: line === true ? undefined : line };\n}\nfunction gridOptions(grid, { stroke = isColor(grid) ? grid : undefined, ticks = isGridTicks(grid) ? grid : undefined, tickSpacing, ariaLabel, ariaDescription }) {\n return {\n stroke,\n ticks,\n tickSpacing,\n ariaLabel,\n ariaDescription\n };\n}\nfunction isGridTicks(grid) {\n switch (typeof grid) {\n case \"number\":\n return true;\n case \"string\":\n return !isColor(grid);\n }\n return isIterable(grid) || typeof grid?.range === \"function\";\n}\n// Is there an explicit axis already present? TODO We probably want a more\n// explicit test than looking for the ARIA label, but it does afford some\n// flexibility in axis implementation which is nice.\nfunction hasAxis(marks, k) {\n const prefix = `${k}-axis `;\n return marks.some((m) => m.ariaLabel?.startsWith(prefix));\n}\nfunction hasScaleChannel(k, marks) {\n for (const mark of marks) {\n for (const key in mark.channels) {\n if (mark.channels[key].scale === k) {\n return true;\n }\n }\n }\n return false;\n}\nfunction inheritScaleLabels(newScales, scales) {\n for (const key in newScales) {\n const newScale = newScales[key];\n const scale = scales[key];\n if (newScale.label === undefined && scale) {\n newScale.label = scale.label;\n }\n }\n return newScales;\n}\n// This differs from the other outerDimensions in that it accounts for rounding\n// and outer padding in the fact scales; we want the frame to align exactly with\n// the actual range, not the desired range.\nfunction actualDimensions({ fx, fy }, dimensions) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height } = outerDimensions(dimensions);\n const fxr = fx && outerRange(fx);\n const fyr = fy && outerRange(fy);\n return {\n marginTop: fy ? fyr[0] : marginTop,\n marginRight: fx ? width - fxr[1] : marginRight,\n marginBottom: fy ? height - fyr[1] : marginBottom,\n marginLeft: fx ? fxr[0] : marginLeft,\n // Some marks, namely the x- and y-axis labels, want to know what the\n // desired (rather than actual) margins are for positioning.\n inset: {\n marginTop: dimensions.marginTop,\n marginRight: dimensions.marginRight,\n marginBottom: dimensions.marginBottom,\n marginLeft: dimensions.marginLeft\n },\n width,\n height\n };\n}\nfunction outerRange(scale) {\n const domain = scale.domain();\n let x1 = scale(domain[0]);\n let x2 = scale(domain[domain.length - 1]);\n if (x2 < x1)\n [x1, x2] = [x2, x1];\n return [x1, x2 + scale.bandwidth()];\n}\n","import { identity } from \"../options.js\";\nexport function maybeIdentityX(options = {}) {\n const { x, x1, x2 } = options;\n return x1 === undefined && x2 === undefined && x === undefined ? { ...options, x: identity } : options;\n}\nexport function maybeIdentityY(options = {}) {\n const { y, y1, y2 } = options;\n return y1 === undefined && y2 === undefined && y === undefined ? { ...options, y: identity } : options;\n}\n","import { InternMap, cumsum, group, groupSort, greatest, max, min, rollup, sum } from \"d3\";\nimport { ascendingDefined } from \"../defined.js\";\nimport { field, column, maybeColumn, maybeZ, mid, range, valueof, maybeZero, one } from \"../options.js\";\nimport { basic } from \"./basic.js\";\n/** \n * ```js\n * Plot.stackX({y: \"year\", x: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * See Plot.stackY, but with *x* as the input value channel, *y* as the stack index, *x1*, *x2* and *x* as the output channels.\n * \n */\nexport function stackX(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { y1, y = y1, x, ...rest } = options; // note: consumes x!\n const [transform, Y, x1, x2] = stackAlias(y, x, \"x\", stack, rest);\n return { ...transform, y1, y: Y, x1, x2, x: mid(x1, x2) };\n}\n/** \n * ```js\n * Plot.stackX1({y: \"year\", x: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackX](https://github.com/observablehq/plot/blob/main/README.md#plotstackxstack-options), except that the **x1** channel is returned as the **x** channel. This can be used, for example, to draw a line at the left edge of each stacked area.\n * \n */\nexport function stackX1(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { y1, y = y1, x } = options;\n const [transform, Y, X] = stackAlias(y, x, \"x\", stack, options);\n return { ...transform, y1, y: Y, x: X };\n}\n/** \n * ```js\n * Plot.stackX2({y: \"year\", x: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackX](https://github.com/observablehq/plot/blob/main/README.md#plotstackxstack-options), except that the **x2** channel is returned as the **x** channel. This can be used, for example, to draw a line at the right edge of each stacked area.\n * \n */\nexport function stackX2(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { y1, y = y1, x } = options;\n const [transform, Y, , X] = stackAlias(y, x, \"x\", stack, options);\n return { ...transform, y1, y: Y, x: X };\n}\n/** \n * ```js\n * Plot.stackY({x: \"year\", y: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Creates new channels **y1** and **y2**, obtained by stacking the original **y** channel for data points that share a common **x** (and possibly **z**) value. A new **y** channel is also returned, which lazily computes the middle value of **y1** and **y2**. The input **y** channel defaults to a constant 1, resulting in a count of the data points. The stack options (*offset*, *order*, and *reverse*) may be specified as part of the *options* object, if the only argument, or as a separate *stack* options argument.\n * \n */\nexport function stackY(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { x1, x = x1, y, ...rest } = options; // note: consumes y!\n const [transform, X, y1, y2] = stackAlias(x, y, \"y\", stack, rest);\n return { ...transform, x1, x: X, y1, y2, y: mid(y1, y2) };\n}\n/** \n * ```js\n * Plot.stackY1({x: \"year\", y: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackY](https://github.com/observablehq/plot/blob/main/README.md#plotstackystack-options), except that the **y1** channel is returned as the **y** channel. This can be used, for example, to draw a line at the bottom of each stacked area.\n * \n */\nexport function stackY1(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { x1, x = x1, y } = options;\n const [transform, X, Y] = stackAlias(x, y, \"y\", stack, options);\n return { ...transform, x1, x: X, y: Y };\n}\n/** \n * ```js\n * Plot.stackY2({x: \"year\", y: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackY](https://github.com/observablehq/plot/blob/main/README.md#plotstackystack-options), except that the **y2** channel is returned as the **y** channel. This can be used, for example, to draw a line at the top of each stacked area.\n * \n */\nexport function stackY2(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { x1, x = x1, y } = options;\n const [transform, X, , Y] = stackAlias(x, y, \"y\", stack, options);\n return { ...transform, x1, x: X, y: Y };\n}\nexport function maybeStackX({ x, x1, x2, ...options } = {}) {\n if (x1 === undefined && x2 === undefined)\n return stackX({ x, ...options });\n [x1, x2] = maybeZero(x, x1, x2);\n return { ...options, x1, x2 };\n}\nexport function maybeStackY({ y, y1, y2, ...options } = {}) {\n if (y1 === undefined && y2 === undefined)\n return stackY({ y, ...options });\n [y1, y2] = maybeZero(y, y1, y2);\n return { ...options, y1, y2 };\n}\n// The reverse option is ambiguous: it is both a stack option and a basic\n// transform. If only one options object is specified, we interpret it as a\n// stack option, and therefore must remove it from the propagated options.\nfunction mergeOptions(options) {\n const { offset, order, reverse, ...rest } = options;\n return [{ offset, order, reverse }, rest];\n}\nfunction stack(x, y = one, ky, { offset, order, reverse }, options) {\n const z = maybeZ(options);\n const [X, setX] = maybeColumn(x);\n const [Y1, setY1] = column(y);\n const [Y2, setY2] = column(y);\n offset = maybeOffset(offset);\n order = maybeOrder(order, offset, ky);\n return [\n basic(options, (data, facets) => {\n const X = x == null ? undefined : setX(valueof(data, x));\n const Y = valueof(data, y, Float64Array);\n const Z = valueof(data, z);\n const O = order && order(data, X, Y, Z);\n const n = data.length;\n const Y1 = setY1(new Float64Array(n));\n const Y2 = setY2(new Float64Array(n));\n const facetstacks = [];\n for (const facet of facets) {\n const stacks = X ? Array.from(group(facet, (i) => X[i]).values()) : [facet];\n if (O)\n applyOrder(stacks, O);\n for (const stack of stacks) {\n let yn = 0, yp = 0;\n if (reverse)\n stack.reverse();\n for (const i of stack) {\n const y = Y[i];\n if (y < 0)\n yn = Y2[i] = (Y1[i] = yn) + y;\n else if (y > 0)\n yp = Y2[i] = (Y1[i] = yp) + y;\n else\n Y2[i] = Y1[i] = yp; // NaN or zero\n }\n }\n facetstacks.push(stacks);\n }\n if (offset)\n offset(facetstacks, Y1, Y2, Z);\n return { data, facets };\n }),\n X,\n Y1,\n Y2\n ];\n}\n// This is used internally so we can use `stack` as an argument name.\nconst stackAlias = stack;\nfunction maybeOffset(offset) {\n if (offset == null)\n return;\n if (typeof offset === \"function\")\n return offset;\n switch (`${offset}`.toLowerCase()) {\n case \"expand\":\n case \"normalize\":\n return offsetExpand;\n case \"center\":\n case \"silhouette\":\n return offsetCenter;\n case \"wiggle\":\n return offsetWiggle;\n }\n throw new Error(`unknown offset: ${offset}`);\n}\n// Given a single stack, returns the minimum and maximum values from the given\n// Y2 column. Note that this relies on Y2 always being the outer column for\n// diverging values.\nfunction extent(stack, Y2) {\n let min = 0, max = 0;\n for (const i of stack) {\n const y = Y2[i];\n if (y < min)\n min = y;\n if (y > max)\n max = y;\n }\n return [min, max];\n}\nfunction offsetExpand(facetstacks, Y1, Y2) {\n for (const stacks of facetstacks) {\n for (const stack of stacks) {\n const [yn, yp] = extent(stack, Y2);\n for (const i of stack) {\n const m = 1 / (yp - yn || 1);\n Y1[i] = m * (Y1[i] - yn);\n Y2[i] = m * (Y2[i] - yn);\n }\n }\n }\n}\nfunction offsetCenter(facetstacks, Y1, Y2) {\n for (const stacks of facetstacks) {\n for (const stack of stacks) {\n const [yn, yp] = extent(stack, Y2);\n for (const i of stack) {\n const m = (yp + yn) / 2;\n Y1[i] -= m;\n Y2[i] -= m;\n }\n }\n offsetZero(stacks, Y1, Y2);\n }\n offsetCenterFacets(facetstacks, Y1, Y2);\n}\nfunction offsetWiggle(facetstacks, Y1, Y2, Z) {\n for (const stacks of facetstacks) {\n const prev = new InternMap();\n let y = 0;\n for (const stack of stacks) {\n let j = -1;\n const Fi = stack.map((i) => Math.abs(Y2[i] - Y1[i]));\n const Df = stack.map((i) => {\n j = Z ? Z[i] : ++j;\n const value = Y2[i] - Y1[i];\n const diff = prev.has(j) ? value - prev.get(j) : 0;\n prev.set(j, value);\n return diff;\n });\n const Cf1 = [0, ...cumsum(Df)];\n for (const i of stack) {\n Y1[i] += y;\n Y2[i] += y;\n }\n const s1 = sum(Fi);\n if (s1)\n y -= sum(Fi, (d, i) => (Df[i] / 2 + Cf1[i]) * d) / s1;\n }\n offsetZero(stacks, Y1, Y2);\n }\n offsetCenterFacets(facetstacks, Y1, Y2);\n}\nfunction offsetZero(stacks, Y1, Y2) {\n const m = min(stacks, (stack) => min(stack, (i) => Y1[i]));\n for (const stack of stacks) {\n for (const i of stack) {\n Y1[i] -= m;\n Y2[i] -= m;\n }\n }\n}\nfunction offsetCenterFacets(facetstacks, Y1, Y2) {\n const n = facetstacks.length;\n if (n === 1)\n return;\n const facets = facetstacks.map((stacks) => stacks.flat());\n const m = facets.map((I) => (min(I, (i) => Y1[i]) + max(I, (i) => Y2[i])) / 2);\n const m0 = min(m);\n for (let j = 0; j < n; j++) {\n const p = m0 - m[j];\n for (const i of facets[j]) {\n Y1[i] += p;\n Y2[i] += p;\n }\n }\n}\nfunction maybeOrder(order, offset, ky) {\n if (order === undefined && offset === offsetWiggle)\n return orderInsideOut;\n if (order == null)\n return;\n if (typeof order === \"string\") {\n switch (order.toLowerCase()) {\n case \"value\":\n case ky:\n return orderY;\n case \"z\":\n return orderZ;\n case \"sum\":\n return orderSum;\n case \"appearance\":\n return orderAppearance;\n case \"inside-out\":\n return orderInsideOut;\n }\n return orderFunction(field(order));\n }\n if (typeof order === \"function\")\n return orderFunction(order);\n if (Array.isArray(order))\n return orderGiven(order);\n throw new Error(`invalid order: ${order}`);\n}\n// by value\nfunction orderY(data, X, Y) {\n return Y;\n}\n// by location\nfunction orderZ(order, X, Y, Z) {\n return Z;\n}\n// by sum of value (a.k.a. “ascending”)\nfunction orderSum(data, X, Y, Z) {\n return orderZDomain(Z, groupSort(range(data), (I) => sum(I, (i) => Y[i]), (i) => Z[i]));\n}\n// by x = argmax of value\nfunction orderAppearance(data, X, Y, Z) {\n return orderZDomain(Z, groupSort(range(data), (I) => X[greatest(I, (i) => Y[i])], (i) => Z[i]));\n}\n// by x = argmax of value, but rearranged inside-out by alternating series\n// according to the sign of a running divergence of sums\nfunction orderInsideOut(data, X, Y, Z) {\n const I = range(data);\n const K = groupSort(I, (I) => X[greatest(I, (i) => Y[i])], (i) => Z[i]);\n const sums = rollup(I, (I) => sum(I, (i) => Y[i]), (i) => Z[i]);\n const Kp = [], Kn = [];\n let s = 0;\n for (const k of K) {\n if (s < 0) {\n s += sums.get(k);\n Kp.push(k);\n }\n else {\n s -= sums.get(k);\n Kn.push(k);\n }\n }\n return orderZDomain(Z, Kn.reverse().concat(Kp));\n}\nfunction orderFunction(f) {\n return (data) => valueof(data, f);\n}\nfunction orderGiven(domain) {\n return (data, X, Y, Z) => orderZDomain(Z, domain);\n}\n// Given an explicit ordering of distinct values in z, returns a parallel column\n// O that can be used with applyOrder to sort stacks. Note that this is a series\n// order: it will be consistent across stacks.\nfunction orderZDomain(Z, domain) {\n if (!Z)\n throw new Error(\"missing channel: z\");\n domain = new InternMap(domain.map((d, i) => [d, i]));\n return Z.map((z) => domain.get(z));\n}\nfunction applyOrder(stacks, O) {\n for (const stack of stacks) {\n stack.sort((i, j) => ascendingDefined(O[i], O[j]));\n }\n}\n","import { pathRound as path, symbolCircle } from \"d3\";\nimport { create } from \"../context.js\";\nimport { negative, positive } from \"../defined.js\";\nimport { Mark } from \"../mark.js\";\nimport { identity, maybeFrameAnchor, maybeNumberChannel, maybeTuple } from \"../options.js\";\nimport { applyChannelStyles, applyDirectStyles, applyFrameAnchor, applyIndirectStyles, applyTransform } from \"../style.js\";\nimport { maybeSymbolChannel } from \"../symbols.js\";\nimport { template } from \"../template.js\";\nimport { sort } from \"../transforms/basic.js\";\nimport { maybeIntervalMidX, maybeIntervalMidY } from \"../transforms/interval.js\";\nconst defaults = {\n ariaLabel: \"dot\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5\n};\nexport function withDefaultSort(options) {\n return options.sort === undefined && options.reverse === undefined\n ? sort({ channel: \"r\", order: \"descending\" }, options)\n : options;\n}\nexport class Dot extends Mark {\n constructor(data, options = {}) {\n const { x, y, r, rotate, symbol = symbolCircle, frameAnchor } = options;\n const [vrotate, crotate] = maybeNumberChannel(rotate, 0);\n const [vsymbol, csymbol] = maybeSymbolChannel(symbol);\n const [vr, cr] = maybeNumberChannel(r, vsymbol == null ? 3 : 4.5);\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y: { value: y, scale: \"y\", optional: true },\n r: { value: vr, scale: \"r\", filter: positive, optional: true },\n rotate: { value: vrotate, optional: true },\n symbol: { value: vsymbol, scale: \"auto\", optional: true }\n }, withDefaultSort(options), defaults);\n this.r = cr;\n this.rotate = crotate;\n this.symbol = csymbol;\n this.frameAnchor = maybeFrameAnchor(frameAnchor);\n // Give a hint to the symbol scale; this allows the symbol scale to chose\n // appropriate default symbols based on whether the dots are filled or\n // stroked, and for the symbol legend to match the appearance of the dots.\n const { channels } = this;\n const { symbol: symbolChannel } = channels;\n if (symbolChannel) {\n const { fill: fillChannel, stroke: strokeChannel } = channels;\n symbolChannel.hint = {\n fill: fillChannel ? (fillChannel.value === symbolChannel.value ? \"color\" : \"currentColor\") : this.fill,\n stroke: strokeChannel ? (strokeChannel.value === symbolChannel.value ? \"color\" : \"currentColor\") : this.stroke\n };\n }\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y: Y, r: R, rotate: A, symbol: S } = channels;\n const { r, rotate, symbol } = this;\n const [cx, cy] = applyFrameAnchor(this, dimensions);\n const circle = this.symbol === symbolCircle;\n const size = R ? undefined : r * r * Math.PI;\n if (negative(r))\n index = [];\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyTransform, this, { x: X && x, y: Y && y })\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(circle ? \"circle\" : \"path\")\n .call(applyDirectStyles, this)\n .call(circle\n ? (selection) => {\n selection\n .attr(\"cx\", X ? (i) => X[i] : cx)\n .attr(\"cy\", Y ? (i) => Y[i] : cy)\n .attr(\"r\", R ? (i) => R[i] : r);\n }\n : (selection) => {\n selection\n .attr(\"transform\", template `translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${A ? (i) => ` rotate(${A[i]})` : rotate ? ` rotate(${rotate})` : ``}`)\n .attr(\"d\", R && S\n ? (i) => {\n const p = path();\n S[i].draw(p, R[i] * R[i] * Math.PI);\n return p;\n }\n : R\n ? (i) => {\n const p = path();\n symbol.draw(p, R[i] * R[i] * Math.PI);\n return p;\n }\n : S\n ? (i) => {\n const p = path();\n S[i].draw(p, size);\n return p;\n }\n : (() => {\n const p = path();\n symbol.draw(p, size);\n return p;\n })());\n })\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\n/** \n * ```js\n * Plot.dot(sales, {x: \"units\", y: \"fruit\"})\n * ```\n * \n * Returns a new dot with the given *data* and *options*. If neither the **x** nor **y** nor **frameAnchor** options are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function dot(data, options = {}) {\n let { x, y, ...remainingOptions } = options;\n if (options.frameAnchor === undefined)\n [x, y] = maybeTuple(x, y);\n return new Dot(data, { ...remainingOptions, x, y });\n}\n/** \n * ```js\n * Plot.dotX(cars.map(d => d[\"economy (mpg)\"]))\n * ```\n * \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that if the **x** option is not specified, it defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **y** is transformed to (*interval*.floor(*y*) + *interval*.offset(*interval*.floor(*y*))) / 2. If the interval is specified as a number *n*, *y* will be the midpoint of two consecutive multiples of *n* that bracket *y*.\n * \n */\nexport function dotX(data, options = {}) {\n const { x = identity, ...remainingOptions } = options;\n return new Dot(data, maybeIntervalMidY({ ...remainingOptions, x }));\n}\n/** \n * ```js\n * Plot.dotY(cars.map(d => d[\"economy (mpg)\"]))\n * ```\n * \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that if the **y** option is not specified, it defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **x** is transformed to (*interval*.floor(*x*) + *interval*.offset(*interval*.floor(*x*))) / 2. If the interval is specified as a number *n*, *x* will be the midpoint of two consecutive multiples of *n* that bracket *x*.\n * \n */\nexport function dotY(data, options = {}) {\n const { y = identity, ...remainingOptions } = options;\n return new Dot(data, maybeIntervalMidX({ ...remainingOptions, y }));\n}\n/** \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that the **symbol** option is set to *circle*.\n * \n */\nexport function circle(data, options) {\n return dot(data, { ...options, symbol: \"circle\" });\n}\n/** \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that the **symbol** option is set to *hexagon*.\n * \n */\nexport function hexagon(data, options) {\n return dot(data, { ...options, symbol: \"hexagon\" });\n}\n","import { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { identity, indexOf, number } from \"../options.js\";\nimport { isCollapsed } from \"../scales.js\";\nimport { applyDirectStyles, applyIndirectStyles, applyTransform, impliedString, applyAttr, applyChannelStyles } from \"../style.js\";\nimport { maybeIdentityX, maybeIdentityY } from \"../transforms/identity.js\";\nimport { maybeIntervalX, maybeIntervalY } from \"../transforms/interval.js\";\nimport { maybeStackX, maybeStackY } from \"../transforms/stack.js\";\nexport class AbstractBar extends Mark {\n constructor(data, channels, options = {}, defaults) {\n super(data, channels, options, defaults);\n const { inset = 0, insetTop = inset, insetRight = inset, insetBottom = inset, insetLeft = inset, rx, ry } = options;\n this.insetTop = number(insetTop);\n this.insetRight = number(insetRight);\n this.insetBottom = number(insetBottom);\n this.insetLeft = number(insetLeft);\n this.rx = impliedString(rx, \"auto\"); // number or percentage\n this.ry = impliedString(ry, \"auto\");\n }\n render(index, scales, channels, dimensions, context) {\n const { rx, ry } = this;\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(this._transform, this, scales)\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"rect\")\n .call(applyDirectStyles, this)\n .attr(\"x\", this._x(scales, channels, dimensions))\n .attr(\"width\", this._width(scales, channels, dimensions))\n .attr(\"y\", this._y(scales, channels, dimensions))\n .attr(\"height\", this._height(scales, channels, dimensions))\n .call(applyAttr, \"rx\", rx)\n .call(applyAttr, \"ry\", ry)\n .call(applyChannelStyles, this, channels))\n .node();\n }\n _x(scales, { x: X }, { marginLeft }) {\n const { insetLeft } = this;\n return X ? (i) => X[i] + insetLeft : marginLeft + insetLeft;\n }\n _y(scales, { y: Y }, { marginTop }) {\n const { insetTop } = this;\n return Y ? (i) => Y[i] + insetTop : marginTop + insetTop;\n }\n _width({ x }, { x: X }, { marginRight, marginLeft, width }) {\n const { insetLeft, insetRight } = this;\n const bandwidth = X && x ? x.bandwidth() : width - marginRight - marginLeft;\n return Math.max(0, bandwidth - insetLeft - insetRight);\n }\n _height({ y }, { y: Y }, { marginTop, marginBottom, height }) {\n const { insetTop, insetBottom } = this;\n const bandwidth = Y && y ? y.bandwidth() : height - marginTop - marginBottom;\n return Math.max(0, bandwidth - insetTop - insetBottom);\n }\n}\nconst defaults = {\n ariaLabel: \"bar\"\n};\nexport class BarX extends AbstractBar {\n constructor(data, options = {}) {\n const { x1, x2, y } = options;\n super(data, {\n x1: { value: x1, scale: \"x\" },\n x2: { value: x2, scale: \"x\" },\n y: { value: y, scale: \"y\", type: \"band\", optional: true }\n }, options, defaults);\n }\n _transform(selection, mark, { x }) {\n selection.call(applyTransform, mark, { x }, 0, 0);\n }\n _x({ x }, { x1: X1, x2: X2 }, { marginLeft }) {\n const { insetLeft } = this;\n return isCollapsed(x) ? marginLeft + insetLeft : (i) => Math.min(X1[i], X2[i]) + insetLeft;\n }\n _width({ x }, { x1: X1, x2: X2 }, { marginRight, marginLeft, width }) {\n const { insetLeft, insetRight } = this;\n return isCollapsed(x)\n ? width - marginRight - marginLeft - insetLeft - insetRight\n : (i) => Math.max(0, Math.abs(X2[i] - X1[i]) - insetLeft - insetRight);\n }\n}\nexport class BarY extends AbstractBar {\n constructor(data, options = {}) {\n const { x, y1, y2 } = options;\n super(data, {\n y1: { value: y1, scale: \"y\" },\n y2: { value: y2, scale: \"y\" },\n x: { value: x, scale: \"x\", type: \"band\", optional: true }\n }, options, defaults);\n }\n _transform(selection, mark, { y }) {\n selection.call(applyTransform, mark, { y }, 0, 0);\n }\n _y({ y }, { y1: Y1, y2: Y2 }, { marginTop }) {\n const { insetTop } = this;\n return isCollapsed(y) ? marginTop + insetTop : (i) => Math.min(Y1[i], Y2[i]) + insetTop;\n }\n _height({ y }, { y1: Y1, y2: Y2 }, { marginTop, marginBottom, height }) {\n const { insetTop, insetBottom } = this;\n return isCollapsed(y)\n ? height - marginTop - marginBottom - insetTop - insetBottom\n : (i) => Math.max(0, Math.abs(Y2[i] - Y1[i]) - insetTop - insetBottom);\n }\n}\n/** \n * ```js\n * Plot.barX(alphabet, {y: \"letter\", x: \"frequency\"})\n * ```\n * \n * Returns a new horizontal bar↔︎ with the given *data* and *options*. The following channels are required:\n * \n * * **x1** - the starting horizontal position; bound to the *x* scale\n * * **x2** - the ending horizontal position; bound to the *x* scale\n * \n * If neither the **x1** nor **x2** option is specified, the **x** option may be specified as shorthand to apply an implicit [stackX transform](https://github.com/observablehq/plot/blob/main/README.md#plotstackxstack-options); this is the typical configuration for a horizontal bar chart with bars aligned at *x* = 0. If the **x** option is not specified, it defaults to the identity function. If *options* is undefined, then it defaults to **x2** as the identity function and **y** as the index of data; this allows an array of numbers to be passed to Plot.barX to make a quick sequential bar chart.\n * \n * If an **interval** is specified, such as d3.utcDay, **x1** and **x2** can be derived from **x**: *interval*.floor(*x*) is invoked for each *x* to produce *x1*, and *interval*.offset(*x1*) is invoked for each *x1* to produce *x2*. If the interval is specified as a number *n*, *x1* and *x2* are taken as the two consecutive multiples of *n* that bracket *x*.\n * \n * In addition to the [standard bar channels](https://github.com/observablehq/plot/blob/main/README.md#bar), the following optional channels are supported:\n * \n * * **y** - the vertical position; bound to the *y* scale, which must be *band*\n * \n * If the **y** channel is not specified, the bar will span the full vertical extent of the plot (or facet).\n * \n */\nexport function barX(data, options = { y: indexOf, x2: identity }) {\n return new BarX(data, maybeStackX(maybeIntervalX(maybeIdentityX(options))));\n}\n/** \n * ```js\n * Plot.barY(alphabet, {x: \"letter\", y: \"frequency\"})\n * ```\n * \n * Returns a new vertical bar↕︎ with the given *data* and *options*. The following channels are required:\n * \n * * **y1** - the starting vertical position; bound to the *y* scale\n * * **y2** - the ending vertical position; bound to the *y* scale\n * \n * If neither the **y1** nor **y2** option is specified, the **y** option may be specified as shorthand to apply an implicit [stackY transform](https://github.com/observablehq/plot/blob/main/README.md#plotstackystack-options); this is the typical configuration for a vertical bar chart with bars aligned at *y* = 0. If the **y** option is not specified, it defaults to the identity function. If *options* is undefined, then it defaults to **y2** as the identity function and **x** as the index of data; this allows an array of numbers to be passed to Plot.barY to make a quick sequential bar chart.\n * \n * If an **interval** is specified, such as d3.utcDay, **y1** and **y2** can be derived from **y**: *interval*.floor(*y*) is invoked for each *y* to produce *y1*, and *interval*.offset(*y1*) is invoked for each *y1* to produce *y2*. If the interval is specified as a number *n*, *y1* and *y2* are taken as the two consecutive multiples of *n* that bracket *y*.\n * \n * In addition to the [standard bar channels](https://github.com/observablehq/plot/blob/main/README.md#bar), the following optional channels are supported:\n * \n * * **x** - the horizontal position; bound to the *x* scale, which must be *band*\n * \n * If the **x** channel is not specified, the bar will span the full horizontal extent of the plot (or facet).\n * \n */\nexport function barY(data, options = { x: indexOf, y2: identity }) {\n return new BarY(data, maybeStackY(maybeIntervalY(maybeIdentityY(options))));\n}\n","import * as Plot from \"@observablehq/plot\";\nimport { csvParse } from \"d3-dsv\";\nimport * as d3Array from \"d3-array\";\nimport { format as d3Format } from \"d3-format\";\n\n// These 2 imports use some vite machinery to directly import these files as\n// strings. Then they are constants and this reduces the load on the GC.\nimport airportsString from \"./datasets/airports.csv?raw\";\nimport flightsString from \"./datasets/flights-airports.csv?raw\";\n\nconst ROOT = document.getElementById(\"chart\");\nconst DEFAULT_OPTIONS = {\n // This width is really a max-width: the plot adjusts using the available\n // width as well.\n width: 2000,\n // The height is especially used for the ratio.\n height: 1000,\n};\n\nlet preparedData;\nfunction prepare() {\n /**\n * AirportInformation: { state, iata, name, city, country, latitude, longitude }\n * airports: Array\n * flights: Array<{ origin, destination, count }>\n */\n const { airports, flights } = parseAirportsInformation();\n /**\n * flightsByAirport: Map\n */\n const flightsByAirport = groupFlightsByAirports(flights);\n /**\n * byAirport: Map\n */\n const byAirport = d3Array.index(airports, (d) => d.iata);\n\n /* Array<[state, AirportInformation[]]> */\n const airportsGroupedByStateArray = d3Array.groups(airports, (d) => d.state);\n\n /* DescSortedArray<[{ state: string, total: number, mostUsedAirportsInState: AirportInformation[] }]> */\n const stateInformationSortedArray = airportsGroupedByStateArray\n .map(([state, airportsInState]) => {\n const totalFlightsInState = d3Array.sum(airportsInState, ({ iata }) => flightsByAirport.get(iata)?.total);\n const sorted = d3Array.sort(airportsInState, ({ iata }) => -flightsByAirport.get(iata)?.total);\n const mostUsedAirportsInState = sorted.slice(0, airportCountPerGroup());\n return {\n state,\n total: totalFlightsInState,\n mostUsedAirports: mostUsedAirportsInState,\n };\n })\n .sort((stateA, stateB) => stateB.total - stateA.total);\n\n /* Array */\n const stateSortedArray = stateInformationSortedArray.map(({ state }) => state);\n\n // Flatten the information in preparedData.stateInformationSortedArray, so that we\n // have one item == one airport information.\n /* Array<{state, iata, name, city, index, origin, destination, total}> */\n const plotData = stateInformationSortedArray.flatMap(({ mostUsedAirports, total, state }) => {\n const enrichedMostUsedAirports = mostUsedAirports.map(({ iata, name, city }, index) => ({\n state,\n iata,\n name,\n city,\n index, // This will be used to have consistent colors.\n ...flightsByAirport.get(iata),\n }));\n const otherTotal = total - d3Array.sum(mostUsedAirports, ({ iata }) => flightsByAirport.get(iata)?.total);\n\n if (otherTotal > 0) {\n enrichedMostUsedAirports.push({\n state,\n iata: \"Other\",\n total: otherTotal,\n index: enrichedMostUsedAirports.length,\n });\n }\n return enrichedMostUsedAirports;\n });\n\n preparedData = {\n airports,\n flights,\n flightsByAirport,\n byAirport,\n stateInformationSortedArray,\n stateSortedArray,\n plotData,\n };\n}\n\nfunction parseAirportsInformation() {\n return {\n airports: csvParse(airportsString),\n flights: csvParse(flightsString),\n };\n}\n\nfunction groupFlightsByAirports(flights) {\n const flightsByAirport = new Map();\n\n for (const { origin, destination, count } of flights) {\n const infoForOriginAirport = flightsByAirport.get(origin) ?? { origin: 0, destination: 0, total: 0 };\n const intCount = Number(count);\n if (Number.isNaN(intCount)) {\n console.error(`Couldn't convert ${count} to number.`);\n continue;\n }\n infoForOriginAirport.origin += intCount;\n infoForOriginAirport.total += intCount;\n flightsByAirport.set(origin, infoForOriginAirport);\n const infoForDestinationAirport = flightsByAirport.get(destination) ?? { origin: 0, destination: 0, total: 0 };\n infoForDestinationAirport.destination += intCount;\n infoForDestinationAirport.total += intCount;\n flightsByAirport.set(destination, infoForDestinationAirport);\n }\n\n return flightsByAirport;\n}\n\nfunction isReady() {\n return !!preparedData;\n}\n\nfunction addStackedBars() {\n if (!isReady())\n throw new Error(\"Please prepare the data first.\");\n\n const options = {\n ...DEFAULT_OPTIONS,\n color: { type: \"categorical\" },\n x: {\n domain: preparedData.stateSortedArray,\n },\n y: { grid: true, tickFormat: \"~s\" },\n marks: [\n Plot.barY(preparedData.plotData, {\n x: \"state\",\n y: \"total\",\n fill: \"index\",\n title: (d) => `${d.iata === \"Other\" ? \"Other\" : `${d.name}, ${d.city} (${d.iata})`}\\n${d3Format(\",\")(d.total)} flights`,\n }),\n Plot.text(preparedData.stateInformationSortedArray, { x: \"state\", y: \"total\", text: (d) => d3Format(\".2~s\")(d.total), dy: -10 }),\n Plot.ruleY([0]),\n ],\n };\n ROOT.append(Plot.plot(options));\n}\n\nfunction addDottedBars() {\n if (!isReady())\n throw new Error(\"Please prepare the data first.\");\n\n const data = [...preparedData.flightsByAirport]\n .flatMap(([iata, { origin, destination }]) => {\n const airportInformation = preparedData.byAirport.get(iata);\n return [\n { ...airportInformation, value: -origin },\n { ...airportInformation, value: destination },\n ];\n })\n .filter((d) => d.value);\n\n const options = {\n ...DEFAULT_OPTIONS,\n color: { type: \"threshold\", domain: [0] },\n x: {\n domain: preparedData.stateSortedArray,\n },\n y: {\n grid: true,\n label: \"← outward Number of flights inward →\",\n labelAnchor: \"center\",\n tickFormat: (v) => d3Format(\"~s\")(Math.abs(v)),\n type: \"pow\",\n exponent: 0.2,\n },\n marks: [\n Plot.dot(data, {\n x: \"state\",\n y: \"value\",\n r: 4,\n stroke: \"value\",\n strokeWidth: 3,\n title: (d) => `${d.iata === \"Other\" ? \"Other\" : `${d.name}, ${d.city} (${d.iata})`}\\n${d3Format(\",\")(Math.abs(d.value))} ${d.value > 0 ? \"inward\" : \"outward\"} flights`,\n }),\n Plot.ruleY([0]),\n ],\n };\n\n ROOT.append(Plot.plot(options));\n}\n\nfunction reset() {\n ROOT.textContent = \"\";\n}\n\nasync function runAllTheThings() {\n reset();\n [\n // Force prettier to use a multiline formatting\n \"prepare\",\n \"add-stacked-chart-button\",\n \"add-dotted-chart-button\",\n ].forEach((id) => document.getElementById(id).click());\n}\n\n// This is the number of airports we keep for each state in the stacked bar\n// graph. One additional group will be added, that will sum all airports that\n// haven't been kept. It's retrieved from the input directly.\nfunction airportCountPerGroup() {\n return document.querySelector(\"#airport-group-size-input\").value;\n}\n\nfunction onGroupSizeInputChange() {\n document.querySelector(\"#airport-group-size\").textContent = airportCountPerGroup();\n if (import.meta.env.DEV) {\n // In dev mode, redraw everything\n runAllTheThings();\n }\n}\n\ndocument.getElementById(\"prepare\").addEventListener(\"click\", prepare);\ndocument.getElementById(\"add-stacked-chart-button\").addEventListener(\"click\", addStackedBars);\ndocument.getElementById(\"add-dotted-chart-button\").addEventListener(\"click\", addDottedBars);\ndocument.getElementById(\"reset\").addEventListener(\"click\", reset);\ndocument.getElementById(\"run-all\").addEventListener(\"click\", runAllTheThings);\ndocument.getElementById(\"airport-group-size-input\").addEventListener(\"input\", onGroupSizeInputChange);\nonGroupSizeInputChange();\n\nif (import.meta.env.DEV)\n runAllTheThings();\n"],"names":["ascending","a","zero","left","mid","right","center","number","values","valueof","index","length","array","empty","arrayify","j","i","sum","mean","extent","min","max","key","identity","map","groups","keyof","group","sort","f","c","ascendingDefined","start","reverse","ticks","maxIndex","minIndex","k","s","defined","quantile","range","epsilon","offset","tickFormat","axis","format","position","selection","text","noop","parseTypenames","get","set","copy","document","selector","select","Selection","datum","constant","merge","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","styleConstant","styleFunction","string","textConstant","textFunction","create","window","color","opacity","hsl","radians","degrees","t0","t1","lab","hcl","cubehelix","t2","t3","linear","rgb","colorRgb","colors","basis","value","one","date","parse","hue","colorHsl","colorLab","colorHcl","colorCubehelix","interpolate","frame","timeout","time","now","id","schedule","interpolateTransform","children","inherit","style","remove","easeCubicInOut","pi","tau","append","appendRound","x1","y1","x0","y0","re","exponent","locale","sign","symbol","formatPrefix","defaultLocale","formatLocale","cos","log","pow","sin","sqrt","object","cartesian","spherical","compose","rotation","radius","point","compareIntersection","clip","n","clipLine","A","B","delta","code","first","ring","visible","x00","y00","projection","stream","pathBounds","transformer","boundsStream","project","resample","reset","conicProjection","conicEqualArea","albers","ordinalRange","sequence","unit","interpolateValue","piecewise","interval","transformLog","transformSymlog","transformPow","transformSqrt","threshold","field","second","step","formatYear","formats","pad","timeWeek","timeSecond","utcWeek","utcSecond","scheme","interpolateRgbBasis","ramp","interpolateCubehelixLong","sqrt3","circle","cross","diamond","square","star","triangle","wye","plus","times","triangle2","asterisk","square2","diamond2","X1","X2","rangei","isoParse","defaults","initializer","filter","reducer","schemeBrBG","schemePRGn","schemePiYG","schemePuOr","schemeRdBu","schemeRdGy","schemeRdYlBu","schemeRdYlGn","schemeSpectral","schemeBlues","schemeGreens","schemeGreys","schemeOranges","schemePurples","schemeReds","interpolateMagma","interpolateInferno","interpolatePlasma","interpolateWarm","interpolateCool","schemeBuGn","schemeBuPu","schemeGnBu","schemeOrRd","schemePuBu","schemePuBuGn","schemePuRd","schemeRdPu","schemeYlGn","schemeYlGnBu","schemeYlOrBr","schemeYlOrRd","interpolateLab","nice","reverseof","scaleLinear","scalePow","scaleLog","scaleSymlog","scaleQuantile","scaleThreshold","scaleIdentity","inferDomain","scaleDiverging","scaleDivergingPow","scaleDivergingLog","scaleDivergingSymlog","scaleTime","scaleUtc","scaleImplicit","scaleOrdinal","scalePoint","scaleBand","top","bottom","geoClipRectangle","kx","ky","x","y","marks","isoFormat","marginTop","marginRight","marginBottom","marginLeft","inferFontVariant","svg","path","v","Y1","Y2","data","scaleRegistry","facets","dimensions","fx","fy","channels","stack","X","K","I","d3Array.index","d3Array.groups","d3Array.sum","d3Array.sort","Plot.barY","d3Format","Plot.text","Plot.ruleY","Plot.plot","Plot.dot"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333]} \ No newline at end of file diff --git a/suites/charts/dist/assets/plot-562fbdb6.js b/suites/charts/dist/assets/plot.js similarity index 99% rename from suites/charts/dist/assets/plot-562fbdb6.js rename to suites/charts/dist/assets/plot.js index a94fa4639..c72f41f32 100644 --- a/suites/charts/dist/assets/plot-562fbdb6.js +++ b/suites/charts/dist/assets/plot.js @@ -1,4 +1,4 @@ -import { c as csvParse, a as airportsString, f as flightsString } from "./flights-airports-9a9e6422.js"; +import { c as csvParse, a as airportsString, f as flightsString } from "./flights-airports.js"; function ascending$1(a2, b) { return a2 == null || b == null ? NaN : a2 < b ? -1 : a2 > b ? 1 : a2 >= b ? 0 : NaN; } @@ -12313,4 +12313,4 @@ document.getElementById("reset").addEventListener("click", reset); document.getElementById("run-all").addEventListener("click", runAllTheThings); document.getElementById("airport-group-size-input").addEventListener("input", onGroupSizeInputChange); onGroupSizeInputChange(); -//# sourceMappingURL=plot-562fbdb6.js.map +//# sourceMappingURL=plot.js.map diff --git a/suites/charts/dist/assets/plot.js.map b/suites/charts/dist/assets/plot.js.map new file mode 100644 index 000000000..99c68058f --- /dev/null +++ b/suites/charts/dist/assets/plot.js.map @@ -0,0 +1 @@ +{"version":3,"file":"plot.js","sources":["../../node_modules/d3-array/src/ascending.js","../../node_modules/d3-array/src/descending.js","../../node_modules/d3-array/src/bisector.js","../../node_modules/d3-array/src/number.js","../../node_modules/d3-array/src/bisect.js","../../node_modules/d3-array/src/cross.js","../../node_modules/d3-array/src/cumsum.js","../../node_modules/d3-array/src/variance.js","../../node_modules/d3-array/src/deviation.js","../../node_modules/d3-array/src/extent.js","../../node_modules/d3-array/src/fsum.js","../../node_modules/internmap/src/index.js","../../node_modules/d3-array/src/identity.js","../../node_modules/d3-array/src/group.js","../../node_modules/d3-array/src/permute.js","../../node_modules/d3-array/src/sort.js","../../node_modules/d3-array/src/groupSort.js","../../node_modules/d3-array/src/ticks.js","../../node_modules/d3-array/src/max.js","../../node_modules/d3-array/src/maxIndex.js","../../node_modules/d3-array/src/min.js","../../node_modules/d3-array/src/minIndex.js","../../node_modules/d3-array/src/quickselect.js","../../node_modules/d3-array/src/greatest.js","../../node_modules/d3-array/src/quantile.js","../../node_modules/d3-array/src/mean.js","../../node_modules/d3-array/src/median.js","../../node_modules/d3-array/src/merge.js","../../node_modules/d3-array/src/mode.js","../../node_modules/d3-array/src/range.js","../../node_modules/d3-array/src/sum.js","../../node_modules/d3-array/src/reverse.js","../../node_modules/d3-axis/src/identity.js","../../node_modules/d3-axis/src/axis.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-selection/src/namespaces.js","../../node_modules/d3-selection/src/namespace.js","../../node_modules/d3-selection/src/creator.js","../../node_modules/d3-selection/src/selector.js","../../node_modules/d3-selection/src/selection/select.js","../../node_modules/d3-selection/src/array.js","../../node_modules/d3-selection/src/selectorAll.js","../../node_modules/d3-selection/src/selection/selectAll.js","../../node_modules/d3-selection/src/matcher.js","../../node_modules/d3-selection/src/selection/selectChild.js","../../node_modules/d3-selection/src/selection/selectChildren.js","../../node_modules/d3-selection/src/selection/filter.js","../../node_modules/d3-selection/src/selection/sparse.js","../../node_modules/d3-selection/src/selection/enter.js","../../node_modules/d3-selection/src/constant.js","../../node_modules/d3-selection/src/selection/data.js","../../node_modules/d3-selection/src/selection/exit.js","../../node_modules/d3-selection/src/selection/join.js","../../node_modules/d3-selection/src/selection/merge.js","../../node_modules/d3-selection/src/selection/order.js","../../node_modules/d3-selection/src/selection/sort.js","../../node_modules/d3-selection/src/selection/call.js","../../node_modules/d3-selection/src/selection/nodes.js","../../node_modules/d3-selection/src/selection/node.js","../../node_modules/d3-selection/src/selection/size.js","../../node_modules/d3-selection/src/selection/empty.js","../../node_modules/d3-selection/src/selection/each.js","../../node_modules/d3-selection/src/selection/attr.js","../../node_modules/d3-selection/src/window.js","../../node_modules/d3-selection/src/selection/style.js","../../node_modules/d3-selection/src/selection/property.js","../../node_modules/d3-selection/src/selection/classed.js","../../node_modules/d3-selection/src/selection/text.js","../../node_modules/d3-selection/src/selection/html.js","../../node_modules/d3-selection/src/selection/raise.js","../../node_modules/d3-selection/src/selection/lower.js","../../node_modules/d3-selection/src/selection/append.js","../../node_modules/d3-selection/src/selection/insert.js","../../node_modules/d3-selection/src/selection/remove.js","../../node_modules/d3-selection/src/selection/clone.js","../../node_modules/d3-selection/src/selection/datum.js","../../node_modules/d3-selection/src/selection/on.js","../../node_modules/d3-selection/src/selection/dispatch.js","../../node_modules/d3-selection/src/selection/iterator.js","../../node_modules/d3-selection/src/selection/index.js","../../node_modules/d3-selection/src/select.js","../../node_modules/d3-color/src/define.js","../../node_modules/d3-color/src/color.js","../../node_modules/d3-color/src/math.js","../../node_modules/d3-color/src/lab.js","../../node_modules/d3-color/src/cubehelix.js","../../node_modules/d3-interpolate/src/basis.js","../../node_modules/d3-interpolate/src/constant.js","../../node_modules/d3-interpolate/src/color.js","../../node_modules/d3-interpolate/src/rgb.js","../../node_modules/d3-interpolate/src/numberArray.js","../../node_modules/d3-interpolate/src/array.js","../../node_modules/d3-interpolate/src/date.js","../../node_modules/d3-interpolate/src/number.js","../../node_modules/d3-interpolate/src/object.js","../../node_modules/d3-interpolate/src/string.js","../../node_modules/d3-interpolate/src/value.js","../../node_modules/d3-interpolate/src/round.js","../../node_modules/d3-interpolate/src/transform/decompose.js","../../node_modules/d3-interpolate/src/transform/parse.js","../../node_modules/d3-interpolate/src/transform/index.js","../../node_modules/d3-interpolate/src/hsl.js","../../node_modules/d3-interpolate/src/lab.js","../../node_modules/d3-interpolate/src/hcl.js","../../node_modules/d3-interpolate/src/cubehelix.js","../../node_modules/d3-interpolate/src/piecewise.js","../../node_modules/d3-interpolate/src/quantize.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-timer/src/timeout.js","../../node_modules/d3-transition/src/transition/schedule.js","../../node_modules/d3-transition/src/interrupt.js","../../node_modules/d3-transition/src/selection/interrupt.js","../../node_modules/d3-transition/src/transition/tween.js","../../node_modules/d3-transition/src/transition/interpolate.js","../../node_modules/d3-transition/src/transition/attr.js","../../node_modules/d3-transition/src/transition/attrTween.js","../../node_modules/d3-transition/src/transition/delay.js","../../node_modules/d3-transition/src/transition/duration.js","../../node_modules/d3-transition/src/transition/ease.js","../../node_modules/d3-transition/src/transition/easeVarying.js","../../node_modules/d3-transition/src/transition/filter.js","../../node_modules/d3-transition/src/transition/merge.js","../../node_modules/d3-transition/src/transition/on.js","../../node_modules/d3-transition/src/transition/remove.js","../../node_modules/d3-transition/src/transition/select.js","../../node_modules/d3-transition/src/transition/selectAll.js","../../node_modules/d3-transition/src/transition/selection.js","../../node_modules/d3-transition/src/transition/style.js","../../node_modules/d3-transition/src/transition/styleTween.js","../../node_modules/d3-transition/src/transition/text.js","../../node_modules/d3-transition/src/transition/textTween.js","../../node_modules/d3-transition/src/transition/transition.js","../../node_modules/d3-transition/src/transition/end.js","../../node_modules/d3-transition/src/transition/index.js","../../node_modules/d3-ease/src/cubic.js","../../node_modules/d3-transition/src/selection/transition.js","../../node_modules/d3-transition/src/selection/index.js","../../node_modules/d3-path/src/path.js","../../node_modules/d3-format/src/formatDecimal.js","../../node_modules/d3-format/src/exponent.js","../../node_modules/d3-format/src/formatGroup.js","../../node_modules/d3-format/src/formatNumerals.js","../../node_modules/d3-format/src/formatSpecifier.js","../../node_modules/d3-format/src/formatTrim.js","../../node_modules/d3-format/src/formatPrefixAuto.js","../../node_modules/d3-format/src/formatRounded.js","../../node_modules/d3-format/src/formatTypes.js","../../node_modules/d3-format/src/identity.js","../../node_modules/d3-format/src/locale.js","../../node_modules/d3-format/src/defaultLocale.js","../../node_modules/d3-format/src/precisionFixed.js","../../node_modules/d3-format/src/precisionPrefix.js","../../node_modules/d3-format/src/precisionRound.js","../../node_modules/d3-geo/src/math.js","../../node_modules/d3-geo/src/noop.js","../../node_modules/d3-geo/src/stream.js","../../node_modules/d3-geo/src/cartesian.js","../../node_modules/d3-geo/src/compose.js","../../node_modules/d3-geo/src/rotation.js","../../node_modules/d3-geo/src/circle.js","../../node_modules/d3-geo/src/clip/buffer.js","../../node_modules/d3-geo/src/pointEqual.js","../../node_modules/d3-geo/src/clip/rejoin.js","../../node_modules/d3-geo/src/polygonContains.js","../../node_modules/d3-geo/src/clip/index.js","../../node_modules/d3-geo/src/clip/antimeridian.js","../../node_modules/d3-geo/src/clip/circle.js","../../node_modules/d3-geo/src/clip/line.js","../../node_modules/d3-geo/src/clip/rectangle.js","../../node_modules/d3-geo/src/identity.js","../../node_modules/d3-geo/src/path/area.js","../../node_modules/d3-geo/src/path/bounds.js","../../node_modules/d3-geo/src/path/centroid.js","../../node_modules/d3-geo/src/path/context.js","../../node_modules/d3-geo/src/path/measure.js","../../node_modules/d3-geo/src/path/string.js","../../node_modules/d3-geo/src/path/index.js","../../node_modules/d3-geo/src/transform.js","../../node_modules/d3-geo/src/projection/fit.js","../../node_modules/d3-geo/src/projection/resample.js","../../node_modules/d3-geo/src/projection/index.js","../../node_modules/d3-geo/src/projection/conic.js","../../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../../node_modules/d3-geo/src/projection/conicEqualArea.js","../../node_modules/d3-geo/src/projection/albers.js","../../node_modules/d3-geo/src/projection/albersUsa.js","../../node_modules/d3-geo/src/projection/azimuthal.js","../../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../../node_modules/d3-geo/src/projection/mercator.js","../../node_modules/d3-geo/src/projection/conicConformal.js","../../node_modules/d3-geo/src/projection/equirectangular.js","../../node_modules/d3-geo/src/projection/conicEquidistant.js","../../node_modules/d3-geo/src/projection/equalEarth.js","../../node_modules/d3-geo/src/projection/gnomonic.js","../../node_modules/d3-geo/src/projection/orthographic.js","../../node_modules/d3-geo/src/projection/stereographic.js","../../node_modules/d3-geo/src/projection/transverseMercator.js","../../node_modules/d3-scale/src/init.js","../../node_modules/d3-scale/src/ordinal.js","../../node_modules/d3-scale/src/band.js","../../node_modules/d3-scale/src/constant.js","../../node_modules/d3-scale/src/number.js","../../node_modules/d3-scale/src/continuous.js","../../node_modules/d3-scale/src/tickFormat.js","../../node_modules/d3-scale/src/linear.js","../../node_modules/d3-scale/src/identity.js","../../node_modules/d3-scale/src/nice.js","../../node_modules/d3-scale/src/log.js","../../node_modules/d3-scale/src/symlog.js","../../node_modules/d3-scale/src/pow.js","../../node_modules/d3-scale/src/quantile.js","../../node_modules/d3-scale/src/threshold.js","../../node_modules/d3-time/src/interval.js","../../node_modules/d3-time/src/millisecond.js","../../node_modules/d3-time/src/duration.js","../../node_modules/d3-time/src/second.js","../../node_modules/d3-time/src/minute.js","../../node_modules/d3-time/src/hour.js","../../node_modules/d3-time/src/day.js","../../node_modules/d3-time/src/week.js","../../node_modules/d3-time/src/month.js","../../node_modules/d3-time/src/year.js","../../node_modules/d3-time/src/ticks.js","../../node_modules/d3-time-format/src/locale.js","../../node_modules/d3-time-format/src/defaultLocale.js","../../node_modules/d3-scale/src/time.js","../../node_modules/d3-scale/src/utcTime.js","../../node_modules/d3-scale/src/sequential.js","../../node_modules/d3-scale/src/diverging.js","../../node_modules/d3-scale-chromatic/src/colors.js","../../node_modules/d3-scale-chromatic/src/categorical/category10.js","../../node_modules/d3-scale-chromatic/src/categorical/Accent.js","../../node_modules/d3-scale-chromatic/src/categorical/Dark2.js","../../node_modules/d3-scale-chromatic/src/categorical/Paired.js","../../node_modules/d3-scale-chromatic/src/categorical/Pastel1.js","../../node_modules/d3-scale-chromatic/src/categorical/Pastel2.js","../../node_modules/d3-scale-chromatic/src/categorical/Set1.js","../../node_modules/d3-scale-chromatic/src/categorical/Set2.js","../../node_modules/d3-scale-chromatic/src/categorical/Set3.js","../../node_modules/d3-scale-chromatic/src/categorical/Tableau10.js","../../node_modules/d3-scale-chromatic/src/ramp.js","../../node_modules/d3-scale-chromatic/src/diverging/BrBG.js","../../node_modules/d3-scale-chromatic/src/diverging/PRGn.js","../../node_modules/d3-scale-chromatic/src/diverging/PiYG.js","../../node_modules/d3-scale-chromatic/src/diverging/PuOr.js","../../node_modules/d3-scale-chromatic/src/diverging/RdBu.js","../../node_modules/d3-scale-chromatic/src/diverging/RdGy.js","../../node_modules/d3-scale-chromatic/src/diverging/RdYlBu.js","../../node_modules/d3-scale-chromatic/src/diverging/RdYlGn.js","../../node_modules/d3-scale-chromatic/src/diverging/Spectral.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/BuGn.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/BuPu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/GnBu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/OrRd.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBuGn.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/PuBu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/PuRd.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/RdPu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGnBu.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlGn.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrBr.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/YlOrRd.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Blues.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Greens.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Greys.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Purples.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Reds.js","../../node_modules/d3-scale-chromatic/src/sequential-single/Oranges.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/cividis.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/cubehelix.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/rainbow.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/sinebow.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/turbo.js","../../node_modules/d3-scale-chromatic/src/sequential-multi/viridis.js","../../node_modules/d3-shape/src/math.js","../../node_modules/d3-shape/src/symbol/asterisk.js","../../node_modules/d3-shape/src/symbol/circle.js","../../node_modules/d3-shape/src/symbol/cross.js","../../node_modules/d3-shape/src/symbol/diamond.js","../../node_modules/d3-shape/src/symbol/diamond2.js","../../node_modules/d3-shape/src/symbol/plus.js","../../node_modules/d3-shape/src/symbol/square.js","../../node_modules/d3-shape/src/symbol/square2.js","../../node_modules/d3-shape/src/symbol/star.js","../../node_modules/d3-shape/src/symbol/triangle.js","../../node_modules/d3-shape/src/symbol/triangle2.js","../../node_modules/d3-shape/src/symbol/wye.js","../../node_modules/d3-shape/src/symbol/times.js","../../node_modules/d3-shape/src/symbol.js","../../node_modules/d3-zoom/src/transform.js","../../node_modules/isoformat/src/format.js","../../node_modules/isoformat/src/parse.js","../../node_modules/@observablehq/plot/dist/time.js","../../node_modules/@observablehq/plot/dist/options.js","../../node_modules/@observablehq/plot/dist/scales/index.js","../../node_modules/@observablehq/plot/dist/symbols.js","../../node_modules/@observablehq/plot/dist/defined.js","../../node_modules/@observablehq/plot/dist/transforms/basic.js","../../node_modules/@observablehq/plot/dist/transforms/group.js","../../node_modules/@observablehq/plot/dist/channel.js","../../node_modules/@observablehq/plot/dist/scales/schemes.js","../../node_modules/@observablehq/plot/dist/scales/quantitative.js","../../node_modules/@observablehq/plot/dist/scales/diverging.js","../../node_modules/@observablehq/plot/dist/scales/temporal.js","../../node_modules/@observablehq/plot/dist/scales/ordinal.js","../../node_modules/@observablehq/plot/dist/warnings.js","../../node_modules/@observablehq/plot/dist/scales.js","../../node_modules/@observablehq/plot/dist/projection.js","../../node_modules/@observablehq/plot/dist/context.js","../../node_modules/@observablehq/plot/dist/memoize.js","../../node_modules/@observablehq/plot/dist/format.js","../../node_modules/@observablehq/plot/dist/style.js","../../node_modules/@observablehq/plot/dist/dimensions.js","../../node_modules/@observablehq/plot/dist/facet.js","../../node_modules/@observablehq/plot/dist/axes.js","../../node_modules/@observablehq/plot/dist/legends/ramp.js","../../node_modules/@observablehq/plot/dist/legends/swatches.js","../../node_modules/@observablehq/plot/dist/legends.js","../../node_modules/@observablehq/plot/dist/mark.js","../../node_modules/@observablehq/plot/dist/math.js","../../node_modules/@observablehq/plot/dist/transforms/inset.js","../../node_modules/@observablehq/plot/dist/transforms/interval.js","../../node_modules/@observablehq/plot/dist/marks/rule.js","../../node_modules/@observablehq/plot/dist/template.js","../../node_modules/@observablehq/plot/dist/marks/text.js","../../node_modules/@observablehq/plot/dist/marks/vector.js","../../node_modules/@observablehq/plot/dist/marks/axis.js","../../node_modules/@observablehq/plot/dist/marks/frame.js","../../node_modules/@observablehq/plot/dist/plot.js","../../node_modules/@observablehq/plot/dist/transforms/identity.js","../../node_modules/@observablehq/plot/dist/transforms/stack.js","../../node_modules/@observablehq/plot/dist/marks/dot.js","../../node_modules/@observablehq/plot/dist/marks/bar.js","../../observable-plot.js"],"sourcesContent":["export default function ascending(a, b) {\n return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function descending(a, b) {\n return a == null || b == null ? NaN\n : b < a ? -1\n : b > a ? 1\n : b >= a ? 0\n : NaN;\n}\n","import ascending from \"./ascending.js\";\nimport descending from \"./descending.js\";\n\nexport default function bisector(f) {\n let compare1, compare2, delta;\n\n // If an accessor is specified, promote it to a comparator. In this case we\n // can test whether the search value is (self-) comparable. We can’t do this\n // for a comparator (except for specific, known comparators) because we can’t\n // tell if the comparator is symmetric, and an asymmetric comparator can’t be\n // used to test whether a single value is comparable.\n if (f.length !== 2) {\n compare1 = ascending;\n compare2 = (d, x) => ascending(f(d), x);\n delta = (d, x) => f(d) - x;\n } else {\n compare1 = f === ascending || f === descending ? f : zero;\n compare2 = f;\n delta = f;\n }\n\n function left(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function right(a, x, lo = 0, hi = a.length) {\n if (lo < hi) {\n if (compare1(x, x) !== 0) return hi;\n do {\n const mid = (lo + hi) >>> 1;\n if (compare2(a[mid], x) <= 0) lo = mid + 1;\n else hi = mid;\n } while (lo < hi);\n }\n return lo;\n }\n\n function center(a, x, lo = 0, hi = a.length) {\n const i = left(a, x, lo, hi - 1);\n return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;\n }\n\n return {left, center, right};\n}\n\nfunction zero() {\n return 0;\n}\n","export default function number(x) {\n return x === null ? NaN : +x;\n}\n\nexport function* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\nimport number from \"./number.js\";\n\nconst ascendingBisect = bisector(ascending);\nexport const bisectRight = ascendingBisect.right;\nexport const bisectLeft = ascendingBisect.left;\nexport const bisectCenter = bisector(number).center;\nexport default bisectRight;\n","function length(array) {\n return array.length | 0;\n}\n\nfunction empty(length) {\n return !(length > 0);\n}\n\nfunction arrayify(values) {\n return typeof values !== \"object\" || \"length\" in values ? values : Array.from(values);\n}\n\nfunction reducer(reduce) {\n return values => reduce(...values);\n}\n\nexport default function cross(...values) {\n const reduce = typeof values[values.length - 1] === \"function\" && reducer(values.pop());\n values = values.map(arrayify);\n const lengths = values.map(length);\n const j = values.length - 1;\n const index = new Array(j + 1).fill(0);\n const product = [];\n if (j < 0 || lengths.some(empty)) return product;\n while (true) {\n product.push(index.map((j, i) => values[i][j]));\n let i = j;\n while (++index[i] === lengths[i]) {\n if (i === 0) return reduce ? product.map(reduce) : product;\n index[i--] = 0;\n }\n }\n}\n","export default function cumsum(values, valueof) {\n var sum = 0, index = 0;\n return Float64Array.from(values, valueof === undefined\n ? v => (sum += +v || 0)\n : v => (sum += +valueof(v, index++, values) || 0));\n}","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","import variance from \"./variance.js\";\n\nexport default function deviation(values, valueof) {\n const v = variance(values, valueof);\n return v ? Math.sqrt(v) : v;\n}\n","export default function extent(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","// https://github.com/python/cpython/blob/a74eea238f5baba15797e2e8b570d153bc8690a7/Modules/mathmodule.c#L1423\nexport class Adder {\n constructor() {\n this._partials = new Float64Array(32);\n this._n = 0;\n }\n add(x) {\n const p = this._partials;\n let i = 0;\n for (let j = 0; j < this._n && j < 32; j++) {\n const y = p[j],\n hi = x + y,\n lo = Math.abs(x) < Math.abs(y) ? x - (hi - y) : y - (hi - x);\n if (lo) p[i++] = lo;\n x = hi;\n }\n p[i] = x;\n this._n = i + 1;\n return this;\n }\n valueOf() {\n const p = this._partials;\n let n = this._n, x, y, lo, hi = 0;\n if (n > 0) {\n hi = p[--n];\n while (n > 0) {\n x = hi;\n y = p[--n];\n hi = x + y;\n lo = y - (hi - x);\n if (lo) break;\n }\n if (n > 0 && ((lo < 0 && p[n - 1] < 0) || (lo > 0 && p[n - 1] > 0))) {\n y = lo * 2;\n x = hi + y;\n if (y == x - hi) hi = x;\n }\n }\n return hi;\n }\n}\n\nexport function fsum(values, valueof) {\n const adder = new Adder();\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n adder.add(value);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n adder.add(value);\n }\n }\n }\n return +adder;\n}\n\nexport function fcumsum(values, valueof) {\n const adder = new Adder();\n let index = -1;\n return Float64Array.from(values, valueof === undefined\n ? v => adder.add(+v || 0)\n : v => adder.add(+valueof(v, ++index, values) || 0)\n );\n}\n","export class InternMap extends Map {\n constructor(entries, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (entries != null) for (const [key, value] of entries) this.set(key, value);\n }\n get(key) {\n return super.get(intern_get(this, key));\n }\n has(key) {\n return super.has(intern_get(this, key));\n }\n set(key, value) {\n return super.set(intern_set(this, key), value);\n }\n delete(key) {\n return super.delete(intern_delete(this, key));\n }\n}\n\nexport class InternSet extends Set {\n constructor(values, key = keyof) {\n super();\n Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});\n if (values != null) for (const value of values) this.add(value);\n }\n has(value) {\n return super.has(intern_get(this, value));\n }\n add(value) {\n return super.add(intern_set(this, value));\n }\n delete(value) {\n return super.delete(intern_delete(this, value));\n }\n}\n\nfunction intern_get({_intern, _key}, value) {\n const key = _key(value);\n return _intern.has(key) ? _intern.get(key) : value;\n}\n\nfunction intern_set({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) return _intern.get(key);\n _intern.set(key, value);\n return value;\n}\n\nfunction intern_delete({_intern, _key}, value) {\n const key = _key(value);\n if (_intern.has(key)) {\n value = _intern.get(key);\n _intern.delete(key);\n }\n return value;\n}\n\nfunction keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\n","export default function identity(x) {\n return x;\n}\n","import {InternMap} from \"internmap\";\nimport identity from \"./identity.js\";\n\nexport default function group(values, ...keys) {\n return nest(values, identity, identity, keys);\n}\n\nexport function groups(values, ...keys) {\n return nest(values, Array.from, identity, keys);\n}\n\nfunction flatten(groups, keys) {\n for (let i = 1, n = keys.length; i < n; ++i) {\n groups = groups.flatMap(g => g.pop().map(([key, value]) => [...g, key, value]));\n }\n return groups;\n}\n\nexport function flatGroup(values, ...keys) {\n return flatten(groups(values, ...keys), keys);\n}\n\nexport function flatRollup(values, reduce, ...keys) {\n return flatten(rollups(values, reduce, ...keys), keys);\n}\n\nexport function rollup(values, reduce, ...keys) {\n return nest(values, identity, reduce, keys);\n}\n\nexport function rollups(values, reduce, ...keys) {\n return nest(values, Array.from, reduce, keys);\n}\n\nexport function index(values, ...keys) {\n return nest(values, identity, unique, keys);\n}\n\nexport function indexes(values, ...keys) {\n return nest(values, Array.from, unique, keys);\n}\n\nfunction unique(values) {\n if (values.length !== 1) throw new Error(\"duplicate key\");\n return values[0];\n}\n\nfunction nest(values, map, reduce, keys) {\n return (function regroup(values, i) {\n if (i >= keys.length) return reduce(values);\n const groups = new InternMap();\n const keyof = keys[i++];\n let index = -1;\n for (const value of values) {\n const key = keyof(value, ++index, values);\n const group = groups.get(key);\n if (group) group.push(value);\n else groups.set(key, [value]);\n }\n for (const [key, values] of groups) {\n groups.set(key, regroup(values, i));\n }\n return map(groups);\n })(values, 0);\n}\n","export default function permute(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import ascending from \"./ascending.js\";\nimport permute from \"./permute.js\";\n\nexport default function sort(values, ...F) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n values = Array.from(values);\n let [f] = F;\n if ((f && f.length !== 2) || F.length > 1) {\n const index = Uint32Array.from(values, (d, i) => i);\n if (F.length > 1) {\n F = F.map(f => values.map(f));\n index.sort((i, j) => {\n for (const f of F) {\n const c = ascendingDefined(f[i], f[j]);\n if (c) return c;\n }\n });\n } else {\n f = values.map(f);\n index.sort((i, j) => ascendingDefined(f[i], f[j]));\n }\n return permute(values, index);\n }\n return values.sort(compareDefined(f));\n}\n\nexport function compareDefined(compare = ascending) {\n if (compare === ascending) return ascendingDefined;\n if (typeof compare !== \"function\") throw new TypeError(\"compare is not a function\");\n return (a, b) => {\n const x = compare(a, b);\n if (x || x === 0) return x;\n return (compare(b, b) === 0) - (compare(a, a) === 0);\n };\n}\n\nexport function ascendingDefined(a, b) {\n return (a == null || !(a >= a)) - (b == null || !(b >= b)) || (a < b ? -1 : a > b ? 1 : 0);\n}\n","import ascending from \"./ascending.js\";\nimport group, {rollup} from \"./group.js\";\nimport sort from \"./sort.js\";\n\nexport default function groupSort(values, reduce, key) {\n return (reduce.length !== 2\n ? sort(rollup(values, reduce, key), (([ak, av], [bk, bv]) => ascending(av, bv) || ascending(ak, bk)))\n : sort(group(values, key), (([ak, av], [bk, bv]) => reduce(av, bv) || ascending(ak, bk))))\n .map(([key]) => key);\n}\n","const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nfunction tickSpec(start, stop, count) {\n const step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log10(step)),\n error = step / Math.pow(10, power),\n factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;\n let i1, i2, inc;\n if (power < 0) {\n inc = Math.pow(10, -power) / factor;\n i1 = Math.round(start * inc);\n i2 = Math.round(stop * inc);\n if (i1 / inc < start) ++i1;\n if (i2 / inc > stop) --i2;\n inc = -inc;\n } else {\n inc = Math.pow(10, power) * factor;\n i1 = Math.round(start / inc);\n i2 = Math.round(stop / inc);\n if (i1 * inc < start) ++i1;\n if (i2 * inc > stop) --i2;\n }\n if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);\n return [i1, i2, inc];\n}\n\nexport default function ticks(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n if (!(count > 0)) return [];\n if (start === stop) return [start];\n const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);\n if (!(i2 >= i1)) return [];\n const n = i2 - i1 + 1, ticks = new Array(n);\n if (reverse) {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;\n } else {\n if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;\n else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;\n }\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n return tickSpec(start, stop, count)[2];\n}\n\nexport function tickStep(start, stop, count) {\n stop = +stop, start = +start, count = +count;\n const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);\n return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function maxIndex(values, valueof) {\n let max;\n let maxIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value, maxIndex = index;\n }\n }\n }\n return maxIndex;\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","export default function minIndex(values, valueof) {\n let min;\n let minIndex = -1;\n let index = -1;\n if (valueof === undefined) {\n for (const value of values) {\n ++index;\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n } else {\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value, minIndex = index;\n }\n }\n }\n return minIndex;\n}\n","import {ascendingDefined, compareDefined} from \"./sort.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = Infinity, compare) {\n k = Math.floor(k);\n left = Math.floor(Math.max(0, left));\n right = Math.floor(Math.min(array.length - 1, right));\n\n if (!(left <= k && k <= right)) return array;\n\n compare = compare === undefined ? ascendingDefined : compareDefined(compare);\n\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function greatest(values, compare = ascending) {\n let max;\n let defined = false;\n if (compare.length === 1) {\n let maxValue;\n for (const element of values) {\n const value = compare(element);\n if (defined\n ? ascending(value, maxValue) > 0\n : ascending(value, value) === 0) {\n max = element;\n maxValue = value;\n defined = true;\n }\n }\n } else {\n for (const value of values) {\n if (defined\n ? compare(value, max) > 0\n : compare(value, value) === 0) {\n max = value;\n defined = true;\n }\n }\n }\n return max;\n}\n","import max from \"./max.js\";\nimport maxIndex from \"./maxIndex.js\";\nimport min from \"./min.js\";\nimport minIndex from \"./minIndex.js\";\nimport quickselect from \"./quickselect.js\";\nimport number, {numbers} from \"./number.js\";\nimport {ascendingDefined} from \"./sort.js\";\nimport greatest from \"./greatest.js\";\n\nexport default function quantile(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return min(values);\n if (p >= 1) return max(values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = max(quickselect(values, i0).subarray(0, i0 + 1)),\n value1 = min(values.subarray(i0 + 1));\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileSorted(values, p, valueof = number) {\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n\nexport function quantileIndex(values, p, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!(n = values.length) || isNaN(p = +p)) return;\n if (p <= 0 || n < 2) return minIndex(values);\n if (p >= 1) return maxIndex(values);\n var n,\n i = Math.floor((n - 1) * p),\n order = (i, j) => ascendingDefined(values[i], values[j]),\n index = quickselect(Uint32Array.from(values, (_, i) => i), i, 0, n - 1, order);\n return greatest(index.subarray(0, i + 1), i => values[i]);\n}\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","import quantile, {quantileIndex} from \"./quantile.js\";\n\nexport default function median(values, valueof) {\n return quantile(values, 0.5, valueof);\n}\n\nexport function medianIndex(values, valueof) {\n return quantileIndex(values, 0.5, valueof);\n}\n","function* flatten(arrays) {\n for (const array of arrays) {\n yield* array;\n }\n}\n\nexport default function merge(arrays) {\n return Array.from(flatten(arrays));\n}\n","import {InternMap} from \"internmap\";\n\nexport default function mode(values, valueof) {\n const counts = new InternMap();\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && value >= value) {\n counts.set(value, (counts.get(value) || 0) + 1);\n }\n }\n }\n let modeValue;\n let modeCount = 0;\n for (const [value, count] of counts) {\n if (count > modeCount) {\n modeCount = count;\n modeValue = value;\n }\n }\n return modeValue;\n}\n","export default function range(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","export default function reverse(values) {\n if (typeof values[Symbol.iterator] !== \"function\") throw new TypeError(\"values is not iterable\");\n return Array.from(values).reverse();\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity.js\";\n\nvar top = 1,\n right = 2,\n bottom = 3,\n left = 4,\n epsilon = 1e-6;\n\nfunction translateX(x) {\n return \"translate(\" + x + \",0)\";\n}\n\nfunction translateY(y) {\n return \"translate(0,\" + y + \")\";\n}\n\nfunction number(scale) {\n return d => +scale(d);\n}\n\nfunction center(scale, offset) {\n offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;\n if (scale.round()) offset = Math.round(offset);\n return d => +scale(d) + offset;\n}\n\nfunction entering() {\n return !this.__axis;\n}\n\nfunction axis(orient, scale) {\n var tickArguments = [],\n tickValues = null,\n tickFormat = null,\n tickSizeInner = 6,\n tickSizeOuter = 6,\n tickPadding = 3,\n offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5,\n k = orient === top || orient === left ? -1 : 1,\n x = orient === left || orient === right ? \"x\" : \"y\",\n transform = orient === top || orient === bottom ? translateX : translateY;\n\n function axis(context) {\n var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,\n format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat,\n spacing = Math.max(tickSizeInner, 0) + tickPadding,\n range = scale.range(),\n range0 = +range[0] + offset,\n range1 = +range[range.length - 1] + offset,\n position = (scale.bandwidth ? center : number)(scale.copy(), offset),\n selection = context.selection ? context.selection() : context,\n path = selection.selectAll(\".domain\").data([null]),\n tick = selection.selectAll(\".tick\").data(values, scale).order(),\n tickExit = tick.exit(),\n tickEnter = tick.enter().append(\"g\").attr(\"class\", \"tick\"),\n line = tick.select(\"line\"),\n text = tick.select(\"text\");\n\n path = path.merge(path.enter().insert(\"path\", \".tick\")\n .attr(\"class\", \"domain\")\n .attr(\"stroke\", \"currentColor\"));\n\n tick = tick.merge(tickEnter);\n\n line = line.merge(tickEnter.append(\"line\")\n .attr(\"stroke\", \"currentColor\")\n .attr(x + \"2\", k * tickSizeInner));\n\n text = text.merge(tickEnter.append(\"text\")\n .attr(\"fill\", \"currentColor\")\n .attr(x, k * spacing)\n .attr(\"dy\", orient === top ? \"0em\" : orient === bottom ? \"0.71em\" : \"0.32em\"));\n\n if (context !== selection) {\n path = path.transition(context);\n tick = tick.transition(context);\n line = line.transition(context);\n text = text.transition(context);\n\n tickExit = tickExit.transition(context)\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute(\"transform\"); });\n\n tickEnter\n .attr(\"opacity\", epsilon)\n .attr(\"transform\", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });\n }\n\n tickExit.remove();\n\n path\n .attr(\"d\", orient === left || orient === right\n ? (tickSizeOuter ? \"M\" + k * tickSizeOuter + \",\" + range0 + \"H\" + offset + \"V\" + range1 + \"H\" + k * tickSizeOuter : \"M\" + offset + \",\" + range0 + \"V\" + range1)\n : (tickSizeOuter ? \"M\" + range0 + \",\" + k * tickSizeOuter + \"V\" + offset + \"H\" + range1 + \"V\" + k * tickSizeOuter : \"M\" + range0 + \",\" + offset + \"H\" + range1));\n\n tick\n .attr(\"opacity\", 1)\n .attr(\"transform\", function(d) { return transform(position(d) + offset); });\n\n line\n .attr(x + \"2\", k * tickSizeInner);\n\n text\n .attr(x, k * spacing)\n .text(format);\n\n selection.filter(entering)\n .attr(\"fill\", \"none\")\n .attr(\"font-size\", 10)\n .attr(\"font-family\", \"sans-serif\")\n .attr(\"text-anchor\", orient === right ? \"start\" : orient === left ? \"end\" : \"middle\");\n\n selection\n .each(function() { this.__axis = position; });\n }\n\n axis.scale = function(_) {\n return arguments.length ? (scale = _, axis) : scale;\n };\n\n axis.ticks = function() {\n return tickArguments = Array.from(arguments), axis;\n };\n\n axis.tickArguments = function(_) {\n return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();\n };\n\n axis.tickValues = function(_) {\n return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();\n };\n\n axis.tickFormat = function(_) {\n return arguments.length ? (tickFormat = _, axis) : tickFormat;\n };\n\n axis.tickSize = function(_) {\n return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeInner = function(_) {\n return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;\n };\n\n axis.tickSizeOuter = function(_) {\n return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;\n };\n\n axis.tickPadding = function(_) {\n return arguments.length ? (tickPadding = +_, axis) : tickPadding;\n };\n\n axis.offset = function(_) {\n return arguments.length ? (offset = +_, axis) : offset;\n };\n\n return axis;\n}\n\nexport function axisTop(scale) {\n return axis(top, scale);\n}\n\nexport function axisRight(scale) {\n return axis(right, scale);\n}\n\nexport function axisBottom(scale) {\n return axis(bottom, scale);\n}\n\nexport function axisLeft(scale) {\n return axis(left, scale);\n}\n","var noop = {value: () => {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _) || /[\\s.]/.test(t)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","export var xhtml = \"http://www.w3.org/1999/xhtml\";\n\nexport default {\n svg: \"http://www.w3.org/2000/svg\",\n xhtml: xhtml,\n xlink: \"http://www.w3.org/1999/xlink\",\n xml: \"http://www.w3.org/XML/1998/namespace\",\n xmlns: \"http://www.w3.org/2000/xmlns/\"\n};\n","import namespaces from \"./namespaces.js\";\n\nexport default function(name) {\n var prefix = name += \"\", i = prefix.indexOf(\":\");\n if (i >= 0 && (prefix = name.slice(0, i)) !== \"xmlns\") name = name.slice(i + 1);\n return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins\n}\n","import namespace from \"./namespace.js\";\nimport {xhtml} from \"./namespaces.js\";\n\nfunction creatorInherit(name) {\n return function() {\n var document = this.ownerDocument,\n uri = this.namespaceURI;\n return uri === xhtml && document.documentElement.namespaceURI === xhtml\n ? document.createElement(name)\n : document.createElementNS(uri, name);\n };\n}\n\nfunction creatorFixed(fullname) {\n return function() {\n return this.ownerDocument.createElementNS(fullname.space, fullname.local);\n };\n}\n\nexport default function(name) {\n var fullname = namespace(name);\n return (fullname.local\n ? creatorFixed\n : creatorInherit)(fullname);\n}\n","function none() {}\n\nexport default function(selector) {\n return selector == null ? none : function() {\n return this.querySelector(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport selector from \"../selector.js\";\n\nexport default function(select) {\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","// Given something array like (or null), returns something that is strictly an\n// array. This is used to ensure that array-like objects passed to d3.selectAll\n// or selection.selectAll are converted into proper arrays when creating a\n// selection; we don’t ever want to create a selection backed by a live\n// HTMLCollection or NodeList. However, note that selection.selectAll will use a\n// static NodeList as a group, since it safely derived from querySelectorAll.\nexport default function array(x) {\n return x == null ? [] : Array.isArray(x) ? x : Array.from(x);\n}\n","function empty() {\n return [];\n}\n\nexport default function(selector) {\n return selector == null ? empty : function() {\n return this.querySelectorAll(selector);\n };\n}\n","import {Selection} from \"./index.js\";\nimport array from \"../array.js\";\nimport selectorAll from \"../selectorAll.js\";\n\nfunction arrayAll(select) {\n return function() {\n return array(select.apply(this, arguments));\n };\n}\n\nexport default function(select) {\n if (typeof select === \"function\") select = arrayAll(select);\n else select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n subgroups.push(select.call(node, node.__data__, i, group));\n parents.push(node);\n }\n }\n }\n\n return new Selection(subgroups, parents);\n}\n","export default function(selector) {\n return function() {\n return this.matches(selector);\n };\n}\n\nexport function childMatcher(selector) {\n return function(node) {\n return node.matches(selector);\n };\n}\n\n","import {childMatcher} from \"../matcher.js\";\n\nvar find = Array.prototype.find;\n\nfunction childFind(match) {\n return function() {\n return find.call(this.children, match);\n };\n}\n\nfunction childFirst() {\n return this.firstElementChild;\n}\n\nexport default function(match) {\n return this.select(match == null ? childFirst\n : childFind(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {childMatcher} from \"../matcher.js\";\n\nvar filter = Array.prototype.filter;\n\nfunction children() {\n return Array.from(this.children);\n}\n\nfunction childrenFilter(match) {\n return function() {\n return filter.call(this.children, match);\n };\n}\n\nexport default function(match) {\n return this.selectAll(match == null ? children\n : childrenFilter(typeof match === \"function\" ? match : childMatcher(match)));\n}\n","import {Selection} from \"./index.js\";\nimport matcher from \"../matcher.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Selection(subgroups, this._parents);\n}\n","export default function(update) {\n return new Array(update.length);\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._enter || this._groups.map(sparse), this._parents);\n}\n\nexport function EnterNode(parent, datum) {\n this.ownerDocument = parent.ownerDocument;\n this.namespaceURI = parent.namespaceURI;\n this._next = null;\n this._parent = parent;\n this.__data__ = datum;\n}\n\nEnterNode.prototype = {\n constructor: EnterNode,\n appendChild: function(child) { return this._parent.insertBefore(child, this._next); },\n insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },\n querySelector: function(selector) { return this._parent.querySelector(selector); },\n querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }\n};\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import {Selection} from \"./index.js\";\nimport {EnterNode} from \"./enter.js\";\nimport constant from \"../constant.js\";\n\nfunction bindIndex(parent, group, enter, update, exit, data) {\n var i = 0,\n node,\n groupLength = group.length,\n dataLength = data.length;\n\n // Put any non-null nodes that fit into update.\n // Put any null nodes into enter.\n // Put any remaining data into enter.\n for (; i < dataLength; ++i) {\n if (node = group[i]) {\n node.__data__ = data[i];\n update[i] = node;\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Put any non-null nodes that don’t fit into exit.\n for (; i < groupLength; ++i) {\n if (node = group[i]) {\n exit[i] = node;\n }\n }\n}\n\nfunction bindKey(parent, group, enter, update, exit, data, key) {\n var i,\n node,\n nodeByKeyValue = new Map,\n groupLength = group.length,\n dataLength = data.length,\n keyValues = new Array(groupLength),\n keyValue;\n\n // Compute the key for each node.\n // If multiple nodes have the same key, the duplicates are added to exit.\n for (i = 0; i < groupLength; ++i) {\n if (node = group[i]) {\n keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + \"\";\n if (nodeByKeyValue.has(keyValue)) {\n exit[i] = node;\n } else {\n nodeByKeyValue.set(keyValue, node);\n }\n }\n }\n\n // Compute the key for each datum.\n // If there a node associated with this key, join and add it to update.\n // If there is not (or the key is a duplicate), add it to enter.\n for (i = 0; i < dataLength; ++i) {\n keyValue = key.call(parent, data[i], i, data) + \"\";\n if (node = nodeByKeyValue.get(keyValue)) {\n update[i] = node;\n node.__data__ = data[i];\n nodeByKeyValue.delete(keyValue);\n } else {\n enter[i] = new EnterNode(parent, data[i]);\n }\n }\n\n // Add any remaining nodes that were not bound to data to exit.\n for (i = 0; i < groupLength; ++i) {\n if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {\n exit[i] = node;\n }\n }\n}\n\nfunction datum(node) {\n return node.__data__;\n}\n\nexport default function(value, key) {\n if (!arguments.length) return Array.from(this, datum);\n\n var bind = key ? bindKey : bindIndex,\n parents = this._parents,\n groups = this._groups;\n\n if (typeof value !== \"function\") value = constant(value);\n\n for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {\n var parent = parents[j],\n group = groups[j],\n groupLength = group.length,\n data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),\n dataLength = data.length,\n enterGroup = enter[j] = new Array(dataLength),\n updateGroup = update[j] = new Array(dataLength),\n exitGroup = exit[j] = new Array(groupLength);\n\n bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);\n\n // Now connect the enter nodes to their following update node, such that\n // appendChild can insert the materialized enter node before this node,\n // rather than at the end of the parent node.\n for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {\n if (previous = enterGroup[i0]) {\n if (i0 >= i1) i1 = i0 + 1;\n while (!(next = updateGroup[i1]) && ++i1 < dataLength);\n previous._next = next || null;\n }\n }\n }\n\n update = new Selection(update, parents);\n update._enter = enter;\n update._exit = exit;\n return update;\n}\n\n// Given some data, this returns an array-like view of it: an object that\n// exposes a length property and allows numeric indexing. Note that unlike\n// selectAll, this isn’t worried about “live” collections because the resulting\n// array will only be used briefly while data is being bound. (It is possible to\n// cause the data to change while iterating by using a key function, but please\n// don’t; we’d rather avoid a gratuitous copy.)\nfunction arraylike(data) {\n return typeof data === \"object\" && \"length\" in data\n ? data // Array, TypedArray, NodeList, array-like\n : Array.from(data); // Map, Set, iterable, string, or anything else\n}\n","import sparse from \"./sparse.js\";\nimport {Selection} from \"./index.js\";\n\nexport default function() {\n return new Selection(this._exit || this._groups.map(sparse), this._parents);\n}\n","export default function(onenter, onupdate, onexit) {\n var enter = this.enter(), update = this, exit = this.exit();\n if (typeof onenter === \"function\") {\n enter = onenter(enter);\n if (enter) enter = enter.selection();\n } else {\n enter = enter.append(onenter + \"\");\n }\n if (onupdate != null) {\n update = onupdate(update);\n if (update) update = update.selection();\n }\n if (onexit == null) exit.remove(); else onexit(exit);\n return enter && update ? enter.merge(update).order() : update;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(context) {\n var selection = context.selection ? context.selection() : context;\n\n for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Selection(merges, this._parents);\n}\n","export default function() {\n\n for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {\n for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {\n if (node = group[i]) {\n if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);\n next = node;\n }\n }\n }\n\n return this;\n}\n","import {Selection} from \"./index.js\";\n\nexport default function(compare) {\n if (!compare) compare = ascending;\n\n function compareNode(a, b) {\n return a && b ? compare(a.__data__, b.__data__) : !a - !b;\n }\n\n for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n sortgroup[i] = node;\n }\n }\n sortgroup.sort(compareNode);\n }\n\n return new Selection(sortgroups, this._parents).order();\n}\n\nfunction ascending(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","export default function() {\n var callback = arguments[0];\n arguments[0] = this;\n callback.apply(null, arguments);\n return this;\n}\n","export default function() {\n return Array.from(this);\n}\n","export default function() {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {\n var node = group[i];\n if (node) return node;\n }\n }\n\n return null;\n}\n","export default function() {\n let size = 0;\n for (const node of this) ++size; // eslint-disable-line no-unused-vars\n return size;\n}\n","export default function() {\n return !this.node();\n}\n","export default function(callback) {\n\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) callback.call(node, node.__data__, i, group);\n }\n }\n\n return this;\n}\n","import namespace from \"../namespace.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, value) {\n return function() {\n this.setAttribute(name, value);\n };\n}\n\nfunction attrConstantNS(fullname, value) {\n return function() {\n this.setAttributeNS(fullname.space, fullname.local, value);\n };\n}\n\nfunction attrFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttribute(name);\n else this.setAttribute(name, v);\n };\n}\n\nfunction attrFunctionNS(fullname, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.removeAttributeNS(fullname.space, fullname.local);\n else this.setAttributeNS(fullname.space, fullname.local, v);\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name);\n\n if (arguments.length < 2) {\n var node = this.node();\n return fullname.local\n ? node.getAttributeNS(fullname.space, fullname.local)\n : node.getAttribute(fullname);\n }\n\n return this.each((value == null\n ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)\n : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));\n}\n","export default function(node) {\n return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node\n || (node.document && node) // node is a Window\n || node.defaultView; // node is a Document\n}\n","import defaultView from \"../window.js\";\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, value, priority) {\n return function() {\n this.style.setProperty(name, value, priority);\n };\n}\n\nfunction styleFunction(name, value, priority) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) this.style.removeProperty(name);\n else this.style.setProperty(name, v, priority);\n };\n}\n\nexport default function(name, value, priority) {\n return arguments.length > 1\n ? this.each((value == null\n ? styleRemove : typeof value === \"function\"\n ? styleFunction\n : styleConstant)(name, value, priority == null ? \"\" : priority))\n : styleValue(this.node(), name);\n}\n\nexport function styleValue(node, name) {\n return node.style.getPropertyValue(name)\n || defaultView(node).getComputedStyle(node, null).getPropertyValue(name);\n}\n","function propertyRemove(name) {\n return function() {\n delete this[name];\n };\n}\n\nfunction propertyConstant(name, value) {\n return function() {\n this[name] = value;\n };\n}\n\nfunction propertyFunction(name, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (v == null) delete this[name];\n else this[name] = v;\n };\n}\n\nexport default function(name, value) {\n return arguments.length > 1\n ? this.each((value == null\n ? propertyRemove : typeof value === \"function\"\n ? propertyFunction\n : propertyConstant)(name, value))\n : this.node()[name];\n}\n","function classArray(string) {\n return string.trim().split(/^|\\s+/);\n}\n\nfunction classList(node) {\n return node.classList || new ClassList(node);\n}\n\nfunction ClassList(node) {\n this._node = node;\n this._names = classArray(node.getAttribute(\"class\") || \"\");\n}\n\nClassList.prototype = {\n add: function(name) {\n var i = this._names.indexOf(name);\n if (i < 0) {\n this._names.push(name);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n remove: function(name) {\n var i = this._names.indexOf(name);\n if (i >= 0) {\n this._names.splice(i, 1);\n this._node.setAttribute(\"class\", this._names.join(\" \"));\n }\n },\n contains: function(name) {\n return this._names.indexOf(name) >= 0;\n }\n};\n\nfunction classedAdd(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.add(names[i]);\n}\n\nfunction classedRemove(node, names) {\n var list = classList(node), i = -1, n = names.length;\n while (++i < n) list.remove(names[i]);\n}\n\nfunction classedTrue(names) {\n return function() {\n classedAdd(this, names);\n };\n}\n\nfunction classedFalse(names) {\n return function() {\n classedRemove(this, names);\n };\n}\n\nfunction classedFunction(names, value) {\n return function() {\n (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);\n };\n}\n\nexport default function(name, value) {\n var names = classArray(name + \"\");\n\n if (arguments.length < 2) {\n var list = classList(this.node()), i = -1, n = names.length;\n while (++i < n) if (!list.contains(names[i])) return false;\n return true;\n }\n\n return this.each((typeof value === \"function\"\n ? classedFunction : value\n ? classedTrue\n : classedFalse)(names, value));\n}\n","function textRemove() {\n this.textContent = \"\";\n}\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.textContent = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? textRemove : (typeof value === \"function\"\n ? textFunction\n : textConstant)(value))\n : this.node().textContent;\n}\n","function htmlRemove() {\n this.innerHTML = \"\";\n}\n\nfunction htmlConstant(value) {\n return function() {\n this.innerHTML = value;\n };\n}\n\nfunction htmlFunction(value) {\n return function() {\n var v = value.apply(this, arguments);\n this.innerHTML = v == null ? \"\" : v;\n };\n}\n\nexport default function(value) {\n return arguments.length\n ? this.each(value == null\n ? htmlRemove : (typeof value === \"function\"\n ? htmlFunction\n : htmlConstant)(value))\n : this.node().innerHTML;\n}\n","function raise() {\n if (this.nextSibling) this.parentNode.appendChild(this);\n}\n\nexport default function() {\n return this.each(raise);\n}\n","function lower() {\n if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);\n}\n\nexport default function() {\n return this.each(lower);\n}\n","import creator from \"../creator.js\";\n\nexport default function(name) {\n var create = typeof name === \"function\" ? name : creator(name);\n return this.select(function() {\n return this.appendChild(create.apply(this, arguments));\n });\n}\n","import creator from \"../creator.js\";\nimport selector from \"../selector.js\";\n\nfunction constantNull() {\n return null;\n}\n\nexport default function(name, before) {\n var create = typeof name === \"function\" ? name : creator(name),\n select = before == null ? constantNull : typeof before === \"function\" ? before : selector(before);\n return this.select(function() {\n return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);\n });\n}\n","function remove() {\n var parent = this.parentNode;\n if (parent) parent.removeChild(this);\n}\n\nexport default function() {\n return this.each(remove);\n}\n","function selection_cloneShallow() {\n var clone = this.cloneNode(false), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nfunction selection_cloneDeep() {\n var clone = this.cloneNode(true), parent = this.parentNode;\n return parent ? parent.insertBefore(clone, this.nextSibling) : clone;\n}\n\nexport default function(deep) {\n return this.select(deep ? selection_cloneDeep : selection_cloneShallow);\n}\n","export default function(value) {\n return arguments.length\n ? this.property(\"__data__\", value)\n : this.node().__data__;\n}\n","function contextListener(listener) {\n return function(event) {\n listener.call(this, event, this.__data__);\n };\n}\n\nfunction parseTypenames(typenames) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n return {type: t, name: name};\n });\n}\n\nfunction onRemove(typename) {\n return function() {\n var on = this.__on;\n if (!on) return;\n for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {\n if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n } else {\n on[++i] = o;\n }\n }\n if (++i) on.length = i;\n else delete this.__on;\n };\n}\n\nfunction onAdd(typename, value, options) {\n return function() {\n var on = this.__on, o, listener = contextListener(value);\n if (on) for (var j = 0, m = on.length; j < m; ++j) {\n if ((o = on[j]).type === typename.type && o.name === typename.name) {\n this.removeEventListener(o.type, o.listener, o.options);\n this.addEventListener(o.type, o.listener = listener, o.options = options);\n o.value = value;\n return;\n }\n }\n this.addEventListener(typename.type, listener, options);\n o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};\n if (!on) this.__on = [o];\n else on.push(o);\n };\n}\n\nexport default function(typename, value, options) {\n var typenames = parseTypenames(typename + \"\"), i, n = typenames.length, t;\n\n if (arguments.length < 2) {\n var on = this.node().__on;\n if (on) for (var j = 0, m = on.length, o; j < m; ++j) {\n for (i = 0, o = on[j]; i < n; ++i) {\n if ((t = typenames[i]).type === o.type && t.name === o.name) {\n return o.value;\n }\n }\n }\n return;\n }\n\n on = value ? onAdd : onRemove;\n for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));\n return this;\n}\n","import defaultView from \"../window.js\";\n\nfunction dispatchEvent(node, type, params) {\n var window = defaultView(node),\n event = window.CustomEvent;\n\n if (typeof event === \"function\") {\n event = new event(type, params);\n } else {\n event = window.document.createEvent(\"Event\");\n if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;\n else event.initEvent(type, false, false);\n }\n\n node.dispatchEvent(event);\n}\n\nfunction dispatchConstant(type, params) {\n return function() {\n return dispatchEvent(this, type, params);\n };\n}\n\nfunction dispatchFunction(type, params) {\n return function() {\n return dispatchEvent(this, type, params.apply(this, arguments));\n };\n}\n\nexport default function(type, params) {\n return this.each((typeof params === \"function\"\n ? dispatchFunction\n : dispatchConstant)(type, params));\n}\n","export default function*() {\n for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {\n for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {\n if (node = group[i]) yield node;\n }\n }\n}\n","import selection_select from \"./select.js\";\nimport selection_selectAll from \"./selectAll.js\";\nimport selection_selectChild from \"./selectChild.js\";\nimport selection_selectChildren from \"./selectChildren.js\";\nimport selection_filter from \"./filter.js\";\nimport selection_data from \"./data.js\";\nimport selection_enter from \"./enter.js\";\nimport selection_exit from \"./exit.js\";\nimport selection_join from \"./join.js\";\nimport selection_merge from \"./merge.js\";\nimport selection_order from \"./order.js\";\nimport selection_sort from \"./sort.js\";\nimport selection_call from \"./call.js\";\nimport selection_nodes from \"./nodes.js\";\nimport selection_node from \"./node.js\";\nimport selection_size from \"./size.js\";\nimport selection_empty from \"./empty.js\";\nimport selection_each from \"./each.js\";\nimport selection_attr from \"./attr.js\";\nimport selection_style from \"./style.js\";\nimport selection_property from \"./property.js\";\nimport selection_classed from \"./classed.js\";\nimport selection_text from \"./text.js\";\nimport selection_html from \"./html.js\";\nimport selection_raise from \"./raise.js\";\nimport selection_lower from \"./lower.js\";\nimport selection_append from \"./append.js\";\nimport selection_insert from \"./insert.js\";\nimport selection_remove from \"./remove.js\";\nimport selection_clone from \"./clone.js\";\nimport selection_datum from \"./datum.js\";\nimport selection_on from \"./on.js\";\nimport selection_dispatch from \"./dispatch.js\";\nimport selection_iterator from \"./iterator.js\";\n\nexport var root = [null];\n\nexport function Selection(groups, parents) {\n this._groups = groups;\n this._parents = parents;\n}\n\nfunction selection() {\n return new Selection([[document.documentElement]], root);\n}\n\nfunction selection_selection() {\n return this;\n}\n\nSelection.prototype = selection.prototype = {\n constructor: Selection,\n select: selection_select,\n selectAll: selection_selectAll,\n selectChild: selection_selectChild,\n selectChildren: selection_selectChildren,\n filter: selection_filter,\n data: selection_data,\n enter: selection_enter,\n exit: selection_exit,\n join: selection_join,\n merge: selection_merge,\n selection: selection_selection,\n order: selection_order,\n sort: selection_sort,\n call: selection_call,\n nodes: selection_nodes,\n node: selection_node,\n size: selection_size,\n empty: selection_empty,\n each: selection_each,\n attr: selection_attr,\n style: selection_style,\n property: selection_property,\n classed: selection_classed,\n text: selection_text,\n html: selection_html,\n raise: selection_raise,\n lower: selection_lower,\n append: selection_append,\n insert: selection_insert,\n remove: selection_remove,\n clone: selection_clone,\n datum: selection_datum,\n on: selection_on,\n dispatch: selection_dispatch,\n [Symbol.iterator]: selection_iterator\n};\n\nexport default selection;\n","import {Selection, root} from \"./selection/index.js\";\n\nexport default function(selector) {\n return typeof selector === \"string\"\n ? new Selection([[document.querySelector(selector)]], [document.documentElement])\n : new Selection([[selector]], root);\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define.js\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?(?:\\\\d*\\\\.)?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex = /^#([0-9a-f]{3,8})$/,\n reRgbInteger = new RegExp(`^rgb\\\\(${reI},${reI},${reI}\\\\)$`),\n reRgbPercent = new RegExp(`^rgb\\\\(${reP},${reP},${reP}\\\\)$`),\n reRgbaInteger = new RegExp(`^rgba\\\\(${reI},${reI},${reI},${reN}\\\\)$`),\n reRgbaPercent = new RegExp(`^rgba\\\\(${reP},${reP},${reP},${reN}\\\\)$`),\n reHslPercent = new RegExp(`^hsl\\\\(${reN},${reP},${reP}\\\\)$`),\n reHslaPercent = new RegExp(`^hsla\\\\(${reN},${reP},${reP},${reN}\\\\)$`);\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n copy(channels) {\n return Object.assign(new this.constructor, this, channels);\n },\n displayable() {\n return this.rgb().displayable();\n },\n hex: color_formatHex, // Deprecated! Use color.formatHex.\n formatHex: color_formatHex,\n formatHex8: color_formatHex8,\n formatHsl: color_formatHsl,\n formatRgb: color_formatRgb,\n toString: color_formatRgb\n});\n\nfunction color_formatHex() {\n return this.rgb().formatHex();\n}\n\nfunction color_formatHex8() {\n return this.rgb().formatHex8();\n}\n\nfunction color_formatHsl() {\n return hslConvert(this).formatHsl();\n}\n\nfunction color_formatRgb() {\n return this.rgb().formatRgb();\n}\n\nexport default function color(format) {\n var m, l;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000\n : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00\n : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000\n : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000\n : null) // invalid hex\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb() {\n return this;\n },\n clamp() {\n return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));\n },\n displayable() {\n return (-0.5 <= this.r && this.r < 255.5)\n && (-0.5 <= this.g && this.g < 255.5)\n && (-0.5 <= this.b && this.b < 255.5)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: rgb_formatHex, // Deprecated! Use color.formatHex.\n formatHex: rgb_formatHex,\n formatHex8: rgb_formatHex8,\n formatRgb: rgb_formatRgb,\n toString: rgb_formatRgb\n}));\n\nfunction rgb_formatHex() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;\n}\n\nfunction rgb_formatHex8() {\n return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;\n}\n\nfunction rgb_formatRgb() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"rgb(\" : \"rgba(\"}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? \")\" : `, ${a})`}`;\n}\n\nfunction clampa(opacity) {\n return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));\n}\n\nfunction clampi(value) {\n return Math.max(0, Math.min(255, Math.round(value) || 0));\n}\n\nfunction hex(value) {\n value = clampi(value);\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n clamp() {\n return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));\n },\n displayable() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n formatHsl() {\n const a = clampa(this.opacity);\n return `${a === 1 ? \"hsl(\" : \"hsla(\"}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? \")\" : `, ${a})`}`;\n }\n}));\n\nfunction clamph(value) {\n value = (value || 0) % 360;\n return value < 0 ? value + 360 : value;\n}\n\nfunction clampt(value) {\n return Math.max(0, Math.min(1, value || 0));\n}\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export const radians = Math.PI / 180;\nexport const degrees = 180 / Math.PI;\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\n// https://observablehq.com/@mbostock/lab-and-rgb\nconst K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) return hcl2lab(o);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * degrees;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\nfunction hcl2lab(o) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * radians;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb() {\n return hcl2lab(this).rgb();\n }\n}));\n","import define, {extend} from \"./define.js\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color.js\";\nimport {degrees, radians} from \"./math.js\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * degrees - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * radians,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default x => () => x;\n","import constant from \"./constant.js\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis.js\";\nimport basisClosed from \"./basisClosed.js\";\nimport nogamma, {gamma} from \"./color.js\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","export default function(a, b) {\n if (!b) b = [];\n var n = a ? Math.min(b.length, a.length) : 0,\n c = b.slice(),\n i;\n return function(t) {\n for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;\n return c;\n };\n}\n\nexport function isNumberArray(x) {\n return ArrayBuffer.isView(x) && !(x instanceof DataView);\n}\n","import value from \"./value.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n return (isNumberArray(b) ? numberArray : genericArray)(a, b);\n}\n\nexport function genericArray(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b = +b, function(t) {\n return d.setTime(a * (1 - t) + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return a * (1 - t) + b * t;\n };\n}\n","import value from \"./value.js\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number.js\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb.js\";\nimport {genericArray} from \"./array.js\";\nimport date from \"./date.js\";\nimport number from \"./number.js\";\nimport object from \"./object.js\";\nimport string from \"./string.js\";\nimport constant from \"./constant.js\";\nimport numberArray, {isNumberArray} from \"./numberArray.js\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : isNumberArray(b) ? numberArray\n : Array.isArray(b) ? genericArray\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(a, b) {\n return a = +a, b = +b, function(t) {\n return Math.round(a * (1 - t) + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose.js\";\n\nvar svgNode;\n\n/* eslint-disable no-undef */\nexport function parseCss(value) {\n const m = new (typeof DOMMatrix === \"function\" ? DOMMatrix : WebKitCSSMatrix)(value + \"\");\n return m.isIdentity ? identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number.js\";\nimport {parseCss, parseSvg} from \"./parse.js\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color.js\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color.js\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","import {default as value} from \"./value.js\";\n\nexport default function piecewise(interpolate, values) {\n if (values === undefined) values = interpolate, interpolate = value;\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer} from \"./timer.js\";\n\nexport default function(callback, delay, time) {\n var t = new Timer;\n delay = delay == null ? 0 : +delay;\n t.restart(elapsed => {\n t.stop();\n callback(elapsed + delay);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer, timeout} from \"d3-timer\";\n\nvar emptyOn = dispatch(\"start\", \"end\", \"cancel\", \"interrupt\");\nvar emptyTween = [];\n\nexport var CREATED = 0;\nexport var SCHEDULED = 1;\nexport var STARTING = 2;\nexport var STARTED = 3;\nexport var RUNNING = 4;\nexport var ENDING = 5;\nexport var ENDED = 6;\n\nexport default function(node, name, id, index, group, timing) {\n var schedules = node.__transition;\n if (!schedules) node.__transition = {};\n else if (id in schedules) return;\n create(node, id, {\n name: name,\n index: index, // For context during callback.\n group: group, // For context during callback.\n on: emptyOn,\n tween: emptyTween,\n time: timing.time,\n delay: timing.delay,\n duration: timing.duration,\n ease: timing.ease,\n timer: null,\n state: CREATED\n });\n}\n\nexport function init(node, id) {\n var schedule = get(node, id);\n if (schedule.state > CREATED) throw new Error(\"too late; already scheduled\");\n return schedule;\n}\n\nexport function set(node, id) {\n var schedule = get(node, id);\n if (schedule.state > STARTED) throw new Error(\"too late; already running\");\n return schedule;\n}\n\nexport function get(node, id) {\n var schedule = node.__transition;\n if (!schedule || !(schedule = schedule[id])) throw new Error(\"transition not found\");\n return schedule;\n}\n\nfunction create(node, id, self) {\n var schedules = node.__transition,\n tween;\n\n // Initialize the self timer when the transition is created.\n // Note the actual delay is not known until the first callback!\n schedules[id] = self;\n self.timer = timer(schedule, 0, self.time);\n\n function schedule(elapsed) {\n self.state = SCHEDULED;\n self.timer.restart(start, self.delay, self.time);\n\n // If the elapsed delay is less than our first sleep, start immediately.\n if (self.delay <= elapsed) start(elapsed - self.delay);\n }\n\n function start(elapsed) {\n var i, j, n, o;\n\n // If the state is not SCHEDULED, then we previously errored on start.\n if (self.state !== SCHEDULED) return stop();\n\n for (i in schedules) {\n o = schedules[i];\n if (o.name !== self.name) continue;\n\n // While this element already has a starting transition during this frame,\n // defer starting an interrupting transition until that transition has a\n // chance to tick (and possibly end); see d3/d3-transition#54!\n if (o.state === STARTED) return timeout(start);\n\n // Interrupt the active transition, if any.\n if (o.state === RUNNING) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"interrupt\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n\n // Cancel any pre-empted transitions.\n else if (+i < id) {\n o.state = ENDED;\n o.timer.stop();\n o.on.call(\"cancel\", node, node.__data__, o.index, o.group);\n delete schedules[i];\n }\n }\n\n // Defer the first tick to end of the current frame; see d3/d3#1576.\n // Note the transition may be canceled after start and before the first tick!\n // Note this must be scheduled before the start event; see d3/d3-transition#16!\n // Assuming this is successful, subsequent callbacks go straight to tick.\n timeout(function() {\n if (self.state === STARTED) {\n self.state = RUNNING;\n self.timer.restart(tick, self.delay, self.time);\n tick(elapsed);\n }\n });\n\n // Dispatch the start event.\n // Note this must be done before the tween are initialized.\n self.state = STARTING;\n self.on.call(\"start\", node, node.__data__, self.index, self.group);\n if (self.state !== STARTING) return; // interrupted\n self.state = STARTED;\n\n // Initialize the tween, deleting null tween.\n tween = new Array(n = self.tween.length);\n for (i = 0, j = -1; i < n; ++i) {\n if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {\n tween[++j] = o;\n }\n }\n tween.length = j + 1;\n }\n\n function tick(elapsed) {\n var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),\n i = -1,\n n = tween.length;\n\n while (++i < n) {\n tween[i].call(node, t);\n }\n\n // Dispatch the end event.\n if (self.state === ENDING) {\n self.on.call(\"end\", node, node.__data__, self.index, self.group);\n stop();\n }\n }\n\n function stop() {\n self.state = ENDED;\n self.timer.stop();\n delete schedules[id];\n for (var i in schedules) return; // eslint-disable-line no-unused-vars\n delete node.__transition;\n }\n}\n","import {STARTING, ENDING, ENDED} from \"./transition/schedule.js\";\n\nexport default function(node, name) {\n var schedules = node.__transition,\n schedule,\n active,\n empty = true,\n i;\n\n if (!schedules) return;\n\n name = name == null ? null : name + \"\";\n\n for (i in schedules) {\n if ((schedule = schedules[i]).name !== name) { empty = false; continue; }\n active = schedule.state > STARTING && schedule.state < ENDING;\n schedule.state = ENDED;\n schedule.timer.stop();\n schedule.on.call(active ? \"interrupt\" : \"cancel\", node, node.__data__, schedule.index, schedule.group);\n delete schedules[i];\n }\n\n if (empty) delete node.__transition;\n}\n","import interrupt from \"../interrupt.js\";\n\nexport default function(name) {\n return this.each(function() {\n interrupt(this, name);\n });\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction tweenRemove(id, name) {\n var tween0, tween1;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = tween0 = tween;\n for (var i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1 = tween1.slice();\n tween1.splice(i, 1);\n break;\n }\n }\n }\n\n schedule.tween = tween1;\n };\n}\n\nfunction tweenFunction(id, name, value) {\n var tween0, tween1;\n if (typeof value !== \"function\") throw new Error;\n return function() {\n var schedule = set(this, id),\n tween = schedule.tween;\n\n // If this node shared tween with the previous node,\n // just assign the updated shared tween and we’re done!\n // Otherwise, copy-on-write.\n if (tween !== tween0) {\n tween1 = (tween0 = tween).slice();\n for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {\n if (tween1[i].name === name) {\n tween1[i] = t;\n break;\n }\n }\n if (i === n) tween1.push(t);\n }\n\n schedule.tween = tween1;\n };\n}\n\nexport default function(name, value) {\n var id = this._id;\n\n name += \"\";\n\n if (arguments.length < 2) {\n var tween = get(this.node(), id).tween;\n for (var i = 0, n = tween.length, t; i < n; ++i) {\n if ((t = tween[i]).name === name) {\n return t.value;\n }\n }\n return null;\n }\n\n return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));\n}\n\nexport function tweenValue(transition, name, value) {\n var id = transition._id;\n\n transition.each(function() {\n var schedule = set(this, id);\n (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);\n });\n\n return function(node) {\n return get(node, id).value[name];\n };\n}\n","import {color} from \"d3-color\";\nimport {interpolateNumber, interpolateRgb, interpolateString} from \"d3-interpolate\";\n\nexport default function(a, b) {\n var c;\n return (typeof b === \"number\" ? interpolateNumber\n : b instanceof color ? interpolateRgb\n : (c = color(b)) ? (b = c, interpolateRgb)\n : interpolateString)(a, b);\n}\n","import {interpolateTransformSvg as interpolateTransform} from \"d3-interpolate\";\nimport {namespace} from \"d3-selection\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction attrRemove(name) {\n return function() {\n this.removeAttribute(name);\n };\n}\n\nfunction attrRemoveNS(fullname) {\n return function() {\n this.removeAttributeNS(fullname.space, fullname.local);\n };\n}\n\nfunction attrConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttribute(name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrConstantNS(fullname, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = this.getAttributeNS(fullname.space, fullname.local);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction attrFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttribute(name);\n string0 = this.getAttribute(name);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction attrFunctionNS(fullname, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0, value1 = value(this), string1;\n if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);\n string0 = this.getAttributeNS(fullname.space, fullname.local);\n string1 = value1 + \"\";\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nexport default function(name, value) {\n var fullname = namespace(name), i = fullname === \"transform\" ? interpolateTransform : interpolate;\n return this.attrTween(name, typeof value === \"function\"\n ? (fullname.local ? attrFunctionNS : attrFunction)(fullname, i, tweenValue(this, \"attr.\" + name, value))\n : value == null ? (fullname.local ? attrRemoveNS : attrRemove)(fullname)\n : (fullname.local ? attrConstantNS : attrConstant)(fullname, i, value));\n}\n","import {namespace} from \"d3-selection\";\n\nfunction attrInterpolate(name, i) {\n return function(t) {\n this.setAttribute(name, i.call(this, t));\n };\n}\n\nfunction attrInterpolateNS(fullname, i) {\n return function(t) {\n this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));\n };\n}\n\nfunction attrTweenNS(fullname, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nfunction attrTween(name, value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value) {\n var key = \"attr.\" + name;\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n var fullname = namespace(name);\n return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));\n}\n","import {get, init} from \"./schedule.js\";\n\nfunction delayFunction(id, value) {\n return function() {\n init(this, id).delay = +value.apply(this, arguments);\n };\n}\n\nfunction delayConstant(id, value) {\n return value = +value, function() {\n init(this, id).delay = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? delayFunction\n : delayConstant)(id, value))\n : get(this.node(), id).delay;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction durationFunction(id, value) {\n return function() {\n set(this, id).duration = +value.apply(this, arguments);\n };\n}\n\nfunction durationConstant(id, value) {\n return value = +value, function() {\n set(this, id).duration = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each((typeof value === \"function\"\n ? durationFunction\n : durationConstant)(id, value))\n : get(this.node(), id).duration;\n}\n","import {get, set} from \"./schedule.js\";\n\nfunction easeConstant(id, value) {\n if (typeof value !== \"function\") throw new Error;\n return function() {\n set(this, id).ease = value;\n };\n}\n\nexport default function(value) {\n var id = this._id;\n\n return arguments.length\n ? this.each(easeConstant(id, value))\n : get(this.node(), id).ease;\n}\n","import {set} from \"./schedule.js\";\n\nfunction easeVarying(id, value) {\n return function() {\n var v = value.apply(this, arguments);\n if (typeof v !== \"function\") throw new Error;\n set(this, id).ease = v;\n };\n}\n\nexport default function(value) {\n if (typeof value !== \"function\") throw new Error;\n return this.each(easeVarying(this._id, value));\n}\n","import {matcher} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\n\nexport default function(match) {\n if (typeof match !== \"function\") match = matcher(match);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {\n if ((node = group[i]) && match.call(node, node.__data__, i, group)) {\n subgroup.push(node);\n }\n }\n }\n\n return new Transition(subgroups, this._parents, this._name, this._id);\n}\n","import {Transition} from \"./index.js\";\n\nexport default function(transition) {\n if (transition._id !== this._id) throw new Error;\n\n for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {\n for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {\n if (node = group0[i] || group1[i]) {\n merge[i] = node;\n }\n }\n }\n\n for (; j < m0; ++j) {\n merges[j] = groups0[j];\n }\n\n return new Transition(merges, this._parents, this._name, this._id);\n}\n","import {get, set, init} from \"./schedule.js\";\n\nfunction start(name) {\n return (name + \"\").trim().split(/^|\\s+/).every(function(t) {\n var i = t.indexOf(\".\");\n if (i >= 0) t = t.slice(0, i);\n return !t || t === \"start\";\n });\n}\n\nfunction onFunction(id, name, listener) {\n var on0, on1, sit = start(name) ? init : set;\n return function() {\n var schedule = sit(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, listener) {\n var id = this._id;\n\n return arguments.length < 2\n ? get(this.node(), id).on.on(name)\n : this.each(onFunction(id, name, listener));\n}\n","function removeFunction(id) {\n return function() {\n var parent = this.parentNode;\n for (var i in this.__transition) if (+i !== id) return;\n if (parent) parent.removeChild(this);\n };\n}\n\nexport default function() {\n return this.on(\"end.remove\", removeFunction(this._id));\n}\n","import {selector} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selector(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {\n if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {\n if (\"__data__\" in node) subnode.__data__ = node.__data__;\n subgroup[i] = subnode;\n schedule(subgroup[i], name, id, i, subgroup, get(node, id));\n }\n }\n }\n\n return new Transition(subgroups, this._parents, name, id);\n}\n","import {selectorAll} from \"d3-selection\";\nimport {Transition} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function(select) {\n var name = this._name,\n id = this._id;\n\n if (typeof select !== \"function\") select = selectorAll(select);\n\n for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n for (var children = select.call(node, node.__data__, i, group), child, inherit = get(node, id), k = 0, l = children.length; k < l; ++k) {\n if (child = children[k]) {\n schedule(child, name, id, k, children, inherit);\n }\n }\n subgroups.push(children);\n parents.push(node);\n }\n }\n }\n\n return new Transition(subgroups, parents, name, id);\n}\n","import {selection} from \"d3-selection\";\n\nvar Selection = selection.prototype.constructor;\n\nexport default function() {\n return new Selection(this._groups, this._parents);\n}\n","import {interpolateTransformCss as interpolateTransform} from \"d3-interpolate\";\nimport {style} from \"d3-selection\";\nimport {set} from \"./schedule.js\";\nimport {tweenValue} from \"./tween.js\";\nimport interpolate from \"./interpolate.js\";\n\nfunction styleNull(name, interpolate) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n string1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, string10 = string1);\n };\n}\n\nfunction styleRemove(name) {\n return function() {\n this.style.removeProperty(name);\n };\n}\n\nfunction styleConstant(name, interpolate, value1) {\n var string00,\n string1 = value1 + \"\",\n interpolate0;\n return function() {\n var string0 = style(this, name);\n return string0 === string1 ? null\n : string0 === string00 ? interpolate0\n : interpolate0 = interpolate(string00 = string0, value1);\n };\n}\n\nfunction styleFunction(name, interpolate, value) {\n var string00,\n string10,\n interpolate0;\n return function() {\n var string0 = style(this, name),\n value1 = value(this),\n string1 = value1 + \"\";\n if (value1 == null) string1 = value1 = (this.style.removeProperty(name), style(this, name));\n return string0 === string1 ? null\n : string0 === string00 && string1 === string10 ? interpolate0\n : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));\n };\n}\n\nfunction styleMaybeRemove(id, name) {\n var on0, on1, listener0, key = \"style.\" + name, event = \"end.\" + key, remove;\n return function() {\n var schedule = set(this, id),\n on = schedule.on,\n listener = schedule.value[key] == null ? remove || (remove = styleRemove(name)) : undefined;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);\n\n schedule.on = on1;\n };\n}\n\nexport default function(name, value, priority) {\n var i = (name += \"\") === \"transform\" ? interpolateTransform : interpolate;\n return value == null ? this\n .styleTween(name, styleNull(name, i))\n .on(\"end.style.\" + name, styleRemove(name))\n : typeof value === \"function\" ? this\n .styleTween(name, styleFunction(name, i, tweenValue(this, \"style.\" + name, value)))\n .each(styleMaybeRemove(this._id, name))\n : this\n .styleTween(name, styleConstant(name, i, value), priority)\n .on(\"end.style.\" + name, null);\n}\n","function styleInterpolate(name, i, priority) {\n return function(t) {\n this.style.setProperty(name, i.call(this, t), priority);\n };\n}\n\nfunction styleTween(name, value, priority) {\n var t, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);\n return t;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(name, value, priority) {\n var key = \"style.\" + (name += \"\");\n if (arguments.length < 2) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, styleTween(name, value, priority == null ? \"\" : priority));\n}\n","import {tweenValue} from \"./tween.js\";\n\nfunction textConstant(value) {\n return function() {\n this.textContent = value;\n };\n}\n\nfunction textFunction(value) {\n return function() {\n var value1 = value(this);\n this.textContent = value1 == null ? \"\" : value1;\n };\n}\n\nexport default function(value) {\n return this.tween(\"text\", typeof value === \"function\"\n ? textFunction(tweenValue(this, \"text\", value))\n : textConstant(value == null ? \"\" : value + \"\"));\n}\n","function textInterpolate(i) {\n return function(t) {\n this.textContent = i.call(this, t);\n };\n}\n\nfunction textTween(value) {\n var t0, i0;\n function tween() {\n var i = value.apply(this, arguments);\n if (i !== i0) t0 = (i0 = i) && textInterpolate(i);\n return t0;\n }\n tween._value = value;\n return tween;\n}\n\nexport default function(value) {\n var key = \"text\";\n if (arguments.length < 1) return (key = this.tween(key)) && key._value;\n if (value == null) return this.tween(key, null);\n if (typeof value !== \"function\") throw new Error;\n return this.tween(key, textTween(value));\n}\n","import {Transition, newId} from \"./index.js\";\nimport schedule, {get} from \"./schedule.js\";\n\nexport default function() {\n var name = this._name,\n id0 = this._id,\n id1 = newId();\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n var inherit = get(node, id0);\n schedule(node, name, id1, i, group, {\n time: inherit.time + inherit.delay + inherit.duration,\n delay: 0,\n duration: inherit.duration,\n ease: inherit.ease\n });\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id1);\n}\n","import {set} from \"./schedule.js\";\n\nexport default function() {\n var on0, on1, that = this, id = that._id, size = that.size();\n return new Promise(function(resolve, reject) {\n var cancel = {value: reject},\n end = {value: function() { if (--size === 0) resolve(); }};\n\n that.each(function() {\n var schedule = set(this, id),\n on = schedule.on;\n\n // If this node shared a dispatch with the previous node,\n // just assign the updated shared dispatch and we’re done!\n // Otherwise, copy-on-write.\n if (on !== on0) {\n on1 = (on0 = on).copy();\n on1._.cancel.push(cancel);\n on1._.interrupt.push(cancel);\n on1._.end.push(end);\n }\n\n schedule.on = on1;\n });\n\n // The selection was empty, resolve end immediately\n if (size === 0) resolve();\n });\n}\n","import {selection} from \"d3-selection\";\nimport transition_attr from \"./attr.js\";\nimport transition_attrTween from \"./attrTween.js\";\nimport transition_delay from \"./delay.js\";\nimport transition_duration from \"./duration.js\";\nimport transition_ease from \"./ease.js\";\nimport transition_easeVarying from \"./easeVarying.js\";\nimport transition_filter from \"./filter.js\";\nimport transition_merge from \"./merge.js\";\nimport transition_on from \"./on.js\";\nimport transition_remove from \"./remove.js\";\nimport transition_select from \"./select.js\";\nimport transition_selectAll from \"./selectAll.js\";\nimport transition_selection from \"./selection.js\";\nimport transition_style from \"./style.js\";\nimport transition_styleTween from \"./styleTween.js\";\nimport transition_text from \"./text.js\";\nimport transition_textTween from \"./textTween.js\";\nimport transition_transition from \"./transition.js\";\nimport transition_tween from \"./tween.js\";\nimport transition_end from \"./end.js\";\n\nvar id = 0;\n\nexport function Transition(groups, parents, name, id) {\n this._groups = groups;\n this._parents = parents;\n this._name = name;\n this._id = id;\n}\n\nexport default function transition(name) {\n return selection().transition(name);\n}\n\nexport function newId() {\n return ++id;\n}\n\nvar selection_prototype = selection.prototype;\n\nTransition.prototype = transition.prototype = {\n constructor: Transition,\n select: transition_select,\n selectAll: transition_selectAll,\n selectChild: selection_prototype.selectChild,\n selectChildren: selection_prototype.selectChildren,\n filter: transition_filter,\n merge: transition_merge,\n selection: transition_selection,\n transition: transition_transition,\n call: selection_prototype.call,\n nodes: selection_prototype.nodes,\n node: selection_prototype.node,\n size: selection_prototype.size,\n empty: selection_prototype.empty,\n each: selection_prototype.each,\n on: transition_on,\n attr: transition_attr,\n attrTween: transition_attrTween,\n style: transition_style,\n styleTween: transition_styleTween,\n text: transition_text,\n textTween: transition_textTween,\n remove: transition_remove,\n tween: transition_tween,\n delay: transition_delay,\n duration: transition_duration,\n ease: transition_ease,\n easeVarying: transition_easeVarying,\n end: transition_end,\n [Symbol.iterator]: selection_prototype[Symbol.iterator]\n};\n","export function cubicIn(t) {\n return t * t * t;\n}\n\nexport function cubicOut(t) {\n return --t * t * t + 1;\n}\n\nexport function cubicInOut(t) {\n return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;\n}\n","import {Transition, newId} from \"../transition/index.js\";\nimport schedule from \"../transition/schedule.js\";\nimport {easeCubicInOut} from \"d3-ease\";\nimport {now} from \"d3-timer\";\n\nvar defaultTiming = {\n time: null, // Set on use.\n delay: 0,\n duration: 250,\n ease: easeCubicInOut\n};\n\nfunction inherit(node, id) {\n var timing;\n while (!(timing = node.__transition) || !(timing = timing[id])) {\n if (!(node = node.parentNode)) {\n throw new Error(`transition ${id} not found`);\n }\n }\n return timing;\n}\n\nexport default function(name) {\n var id,\n timing;\n\n if (name instanceof Transition) {\n id = name._id, name = name._name;\n } else {\n id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + \"\";\n }\n\n for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {\n for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {\n if (node = group[i]) {\n schedule(node, name, id, i, group, timing || inherit(node, id));\n }\n }\n }\n\n return new Transition(groups, this._parents, name, id);\n}\n","import {selection} from \"d3-selection\";\nimport selection_interrupt from \"./interrupt.js\";\nimport selection_transition from \"./transition.js\";\n\nselection.prototype.interrupt = selection_interrupt;\nselection.prototype.transition = selection_transition;\n","const pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction append(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n let d = Math.floor(digits);\n if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);\n if (d > 15) return append;\n const k = 10 ** d;\n return function(strings) {\n this._ += strings[0];\n for (let i = 1, n = strings.length; i < n; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n}\n\nexport class Path {\n constructor(digits) {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n this._append = digits == null ? append : appendRound(digits);\n }\n moveTo(x, y) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;\n }\n closePath() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._append`Z`;\n }\n }\n lineTo(x, y) {\n this._append`L${this._x1 = +x},${this._y1 = +y}`;\n }\n quadraticCurveTo(x1, y1, x, y) {\n this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;\n }\n bezierCurveTo(x1, y1, x2, y2, x, y) {\n this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;\n }\n arcTo(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._append`M${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._append`L${this._x1 = x1},${this._y1 = y1}`;\n }\n\n // Otherwise, draw an arc!\n else {\n let x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;\n }\n\n this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;\n }\n }\n arc(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r, ccw = !!ccw;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(`negative radius: ${r}`);\n\n let dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._append`M${x0},${y0}`;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._append`L${x0},${y0}`;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._append`A${r},${r},0,${+(da >= pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;\n }\n }\n rect(x, y, w, h) {\n this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;\n }\n toString() {\n return this._;\n }\n}\n\nexport function path() {\n return new Path;\n}\n\n// Allow instanceof d3.path\npath.prototype = Path.prototype;\n\nexport function pathRound(digits = 3) {\n return new Path(+digits);\n}\n","export default function(x) {\n return Math.abs(x = Math.round(x)) >= 1e21\n ? x.toLocaleString(\"en\").replace(/,/g, \"\")\n : x.toString(10);\n}\n\n// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimalParts(1.23) returns [\"123\", 0].\nexport function formatDecimalParts(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x) {\n return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n return new FormatSpecifier({\n fill: match[1],\n align: match[2],\n sign: match[3],\n symbol: match[4],\n zero: match[5],\n width: match[6],\n comma: match[7],\n precision: match[8] && match[8].slice(1),\n trim: match[9],\n type: match[10]\n });\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nexport function FormatSpecifier(specifier) {\n this.fill = specifier.fill === undefined ? \" \" : specifier.fill + \"\";\n this.align = specifier.align === undefined ? \">\" : specifier.align + \"\";\n this.sign = specifier.sign === undefined ? \"-\" : specifier.sign + \"\";\n this.symbol = specifier.symbol === undefined ? \"\" : specifier.symbol + \"\";\n this.zero = !!specifier.zero;\n this.width = specifier.width === undefined ? undefined : +specifier.width;\n this.comma = !!specifier.comma;\n this.precision = specifier.precision === undefined ? undefined : +specifier.precision;\n this.trim = !!specifier.trim;\n this.type = specifier.type === undefined ? \"\" : specifier.type + \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width === undefined ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision === undefined ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import {formatDecimalParts} from \"./formatDecimal.js\";\n\nexport default function(x, p) {\n var d = formatDecimalParts(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatDecimal from \"./formatDecimal.js\";\nimport formatPrefixAuto from \"./formatPrefixAuto.js\";\nimport formatRounded from \"./formatRounded.js\";\n\nexport default {\n \"%\": (x, p) => (x * 100).toFixed(p),\n \"b\": (x) => Math.round(x).toString(2),\n \"c\": (x) => x + \"\",\n \"d\": formatDecimal,\n \"e\": (x, p) => x.toExponential(p),\n \"f\": (x, p) => x.toFixed(p),\n \"g\": (x, p) => x.toPrecision(p),\n \"o\": (x) => Math.round(x).toString(8),\n \"p\": (x, p) => formatRounded(x * 100, p),\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": (x) => Math.round(x).toString(16).toUpperCase(),\n \"x\": (x) => Math.round(x).toString(16)\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent.js\";\nimport formatGroup from \"./formatGroup.js\";\nimport formatNumerals from \"./formatNumerals.js\";\nimport formatSpecifier from \"./formatSpecifier.js\";\nimport formatTrim from \"./formatTrim.js\";\nimport formatTypes from \"./formatTypes.js\";\nimport {prefixExponent} from \"./formatPrefixAuto.js\";\nimport identity from \"./identity.js\";\n\nvar map = Array.prototype.map,\n prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping === undefined || locale.thousands === undefined ? identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + \"\"),\n currencyPrefix = locale.currency === undefined ? \"\" : locale.currency[0] + \"\",\n currencySuffix = locale.currency === undefined ? \"\" : locale.currency[1] + \"\",\n decimal = locale.decimal === undefined ? \".\" : locale.decimal + \"\",\n numerals = locale.numerals === undefined ? identity : formatNumerals(map.call(locale.numerals, String)),\n percent = locale.percent === undefined ? \"%\" : locale.percent + \"\",\n minus = locale.minus === undefined ? \"−\" : locale.minus + \"\",\n nan = locale.nan === undefined ? \"NaN\" : locale.nan + \"\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currencyPrefix : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currencySuffix : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision === undefined ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Determine the sign. -0 is not less than 0, but 1 / -0 is!\n var valueNegative = value < 0 || 1 / value < 0;\n\n // Perform the initial formatting.\n value = isNaN(value) ? nan : formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.\n if (valueNegative && +value === 0 && sign !== \"+\") valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : minus) : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent.js\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var hypot = Math.hypot;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math.js\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose.js\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math.js\";\n\nfunction rotationIdentity(lambda, phi) {\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n lambda += deltaLambda;\n if (abs(lambda) > pi) lambda -= Math.round(lambda / tau) * tau;\n return [lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian.js\";\nimport constant from \"./constant.js\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math.js\";\nimport {rotateRadians} from \"./rotation.js\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop.js\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y, m) {\n line.push([x, y, m]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math.js\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual.js\";\nimport {epsilon} from \"../math.js\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n if (pointEqual(p0, p1)) {\n if (!p0[2] && !p1[2]) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n // handle degenerate cases by moving the point\n p1[0] += 2 * epsilon;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import {Adder} from \"d3-array\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, epsilon2, halfPi, pi, quarterPi, sign, sin, tau} from \"./math.js\";\n\nfunction longitude(point) {\n return abs(point[0]) <= pi ? point[0] : sign(point[0]) * ((abs(point[0]) + pi) % tau - pi);\n}\n\nexport default function(polygon, point) {\n var lambda = longitude(point),\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n var sum = new Adder();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = longitude(point0),\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = longitude(point1),\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon2) ^ (winding & 1);\n}\n","import clipBuffer from \"./buffer.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {epsilon, halfPi} from \"../math.js\";\nimport polygonContains from \"../polygonContains.js\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index.js\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math.js\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian.js\";\nimport {circleStream} from \"../circle.js\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math.js\";\nimport pointEqual from \"../pointEqual.js\";\nimport clip from \"./index.js\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2))\n point1[2] = 1;\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1], 2);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1], 3);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math.js\";\nimport clipBuffer from \"./buffer.js\";\nimport clipLine from \"./line.js\";\nimport clipRejoin from \"./rejoin.js\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","export default x => x;\n","import {Adder} from \"d3-array\";\nimport {abs} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar areaSum = new Adder(),\n areaRingSum = new Adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum = new Adder();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum = new Adder();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop.js\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math.js\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import {Adder} from \"d3-array\";\nimport {sqrt} from \"../math.js\";\nimport noop from \"../noop.js\";\n\nvar lengthSum = new Adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum = new Adder();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","// Simple caching for constant-radius points.\nlet cacheDigits, cacheAppend, cacheRadius, cacheCircle;\n\nexport default class PathString {\n constructor(digits) {\n this._append = digits == null ? append : appendRound(digits);\n this._radius = 4.5;\n this._ = \"\";\n }\n pointRadius(_) {\n this._radius = +_;\n return this;\n }\n polygonStart() {\n this._line = 0;\n }\n polygonEnd() {\n this._line = NaN;\n }\n lineStart() {\n this._point = 0;\n }\n lineEnd() {\n if (this._line === 0) this._ += \"Z\";\n this._point = NaN;\n }\n point(x, y) {\n switch (this._point) {\n case 0: {\n this._append`M${x},${y}`;\n this._point = 1;\n break;\n }\n case 1: {\n this._append`L${x},${y}`;\n break;\n }\n default: {\n this._append`M${x},${y}`;\n if (this._radius !== cacheRadius || this._append !== cacheAppend) {\n const r = this._radius;\n const s = this._;\n this._ = \"\"; // stash the old string so we can cache the circle path fragment\n this._append`m0,${r}a${r},${r} 0 1,1 0,${-2 * r}a${r},${r} 0 1,1 0,${2 * r}z`;\n cacheRadius = r;\n cacheAppend = this._append;\n cacheCircle = this._;\n this._ = s;\n }\n this._ += cacheCircle;\n break;\n }\n }\n }\n result() {\n const result = this._;\n this._ = \"\";\n return result.length ? result : null;\n }\n}\n\nfunction append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += arguments[i] + strings[i];\n }\n}\n\nfunction appendRound(digits) {\n const d = Math.floor(digits);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${digits}`);\n if (d > 15) return append;\n if (d !== cacheDigits) {\n const k = 10 ** d;\n cacheDigits = d;\n cacheAppend = function append(strings) {\n let i = 1;\n this._ += strings[0];\n for (const j = strings.length; i < j; ++i) {\n this._ += Math.round(arguments[i] * k) / k + strings[i];\n }\n };\n }\n return cacheAppend;\n}\n","import identity from \"../identity.js\";\nimport stream from \"../stream.js\";\nimport pathArea from \"./area.js\";\nimport pathBounds from \"./bounds.js\";\nimport pathCentroid from \"./centroid.js\";\nimport PathContext from \"./context.js\";\nimport pathMeasure from \"./measure.js\";\nimport PathString from \"./string.js\";\n\nexport default function(projection, context) {\n let digits = 3,\n pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n if (!arguments.length) return projection;\n projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream;\n return path;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString(digits)) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n path.digits = function(_) {\n if (!arguments.length) return digits;\n if (_ == null) digits = null;\n else {\n const d = Math.floor(_);\n if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);\n digits = d;\n }\n if (context === null) contextStream = new PathString(digits);\n return path;\n };\n\n return path.projection(projection).digits(digits).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream.js\";\nimport boundsStream from \"../path/bounds.js\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian.js\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math.js\";\nimport {transformer} from \"../transform.js\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian.js\";\nimport clipCircle from \"../clip/circle.js\";\nimport clipRectangle from \"../clip/rectangle.js\";\nimport compose from \"../compose.js\";\nimport identity from \"../identity.js\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math.js\";\nimport {rotateRadians} from \"../rotation.js\";\nimport {transformer} from \"../transform.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\nimport resample from \"./resample.js\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy, sx, sy) {\n function transform(x, y) {\n x *= sx; y *= sy;\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k * sx, (dy - y) / k * sy];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, sx, sy, alpha) {\n if (!alpha) return scaleTranslate(k, dx, dy, sx, sy);\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n x *= sx; y *= sy;\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [sx * (ai * x - bi * y + ci), sy * (fi - bi * x - ai * y)];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate angle\n sx = 1, // reflectX\n sy = 1, // reflectX\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.reflectX = function(_) {\n return arguments.length ? (sx = _ ? -1 : 1, recenter()) : sx < 0;\n };\n\n projection.reflectY = function(_) {\n return arguments.length ? (sy = _ ? -1 : 1, recenter()) : sy < 0;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, sx, sy, alpha).apply(null, project(lambda, phi)),\n transform = scaleTranslateRotate(k, x - center[0], y - center[1], sx, sy, alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math.js\";\nimport {projectionMutator} from \"./index.js\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {asin, cos, sin} from \"../math.js\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import {abs, asin, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea.js\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y,\n l = atan2(x, abs(r0y)) * sign(r0y);\n if (r0y * n < 0)\n l -= pi * sign(x) * sign(r0y);\n return [l / n, asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import conicEqualArea from \"./conicEqualArea.js\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math.js\";\nimport albers from \"./albers.js\";\nimport conicEqualArea from \"./conicEqualArea.js\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit.js\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math.js\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n if (k === Infinity) return [2, 0];\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math.js\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math.js\";\nimport rotation from \"../rotation.js\";\nimport projection from \"./index.js\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pi, pow, sign, sin, sqrt, tan} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {mercatorRaw} from \"./mercator.js\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy),\n l = atan2(x, abs(fy)) * sign(fy);\n if (fy * n < 0)\n l -= pi * sign(x) * sign(fy);\n return [l / n, 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index.js\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, pi, sign, sin, sqrt} from \"../math.js\";\nimport {conicProjection} from \"./conic.js\";\nimport {equirectangularRaw} from \"./equirectangular.js\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y,\n l = atan2(x, abs(gy)) * sign(gy);\n if (gy * n < 0)\n l -= pi * sign(x) * sign(gy);\n return [l / n, g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import projection from \"./index.js\";\nimport {abs, asin, cos, epsilon2, sin, sqrt} from \"../math.js\";\n\nvar A1 = 1.340264,\n A2 = -0.081106,\n A3 = 0.000893,\n A4 = 0.003796,\n M = sqrt(3) / 2,\n iterations = 12;\n\nexport function equalEarthRaw(lambda, phi) {\n var l = asin(M * sin(phi)), l2 = l * l, l6 = l2 * l2 * l2;\n return [\n lambda * cos(l) / (M * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2))),\n l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2))\n ];\n}\n\nequalEarthRaw.invert = function(x, y) {\n var l = y, l2 = l * l, l6 = l2 * l2 * l2;\n for (var i = 0, delta, fy, fpy; i < iterations; ++i) {\n fy = l * (A1 + A2 * l2 + l6 * (A3 + A4 * l2)) - y;\n fpy = A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2);\n l -= delta = fy / fpy, l2 = l * l, l6 = l2 * l2 * l2;\n if (abs(delta) < epsilon2) break;\n }\n return [\n M * x * (A1 + 3 * A2 * l2 + l6 * (7 * A3 + 9 * A4 * l2)) / cos(l),\n asin(sin(l) / M)\n ];\n};\n\nexport default function() {\n return projection(equalEarthRaw)\n .scale(177.158);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import {asin, cos, epsilon, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math.js\";\nimport {azimuthalInvert} from \"./azimuthal.js\";\nimport projection from \"./index.js\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math.js\";\nimport {mercatorProjection} from \"./mercator.js\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: {\n if (typeof domain === \"function\") this.interpolator(domain);\n else this.range(domain);\n break;\n }\n default: {\n this.domain(domain);\n if (typeof interpolator === \"function\") this.interpolator(interpolator);\n else this.range(interpolator);\n break;\n }\n }\n return this;\n}\n","import {InternMap} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new InternMap(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n let i = index.get(d);\n if (i === undefined) {\n if (unknown !== implicit) return unknown;\n index.set(d, i = domain.push(d) - 1);\n }\n return range[i % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new InternMap();\n for (const value of _) {\n if (index.has(value)) continue;\n index.set(value, domain.push(value) - 1);\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {range as sequence} from \"d3-array\";\nimport {initRange} from \"./init.js\";\nimport ordinal from \"./ordinal.js\";\n\nexport default function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n r0 = 0,\n r1 = 1,\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = r1 < r0,\n start = reverse ? r1 : r0,\n stop = reverse ? r0 : r1;\n step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);\n if (round) step = Math.floor(step);\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.range = function(_) {\n return arguments.length ? ([r0, r1] = _, r0 = +r0, r1 = +r1, rescale()) : [r0, r1];\n };\n\n scale.rangeRound = function(_) {\n return [r0, r1] = _, r0 = +r0, r1 = +r1, round = true, rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n return arguments.length ? (round = !!_, rescale()) : round;\n };\n\n scale.padding = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, paddingOuter = +_), rescale()) : paddingInner;\n };\n\n scale.paddingInner = function(_) {\n return arguments.length ? (paddingInner = Math.min(1, _), rescale()) : paddingInner;\n };\n\n scale.paddingOuter = function(_) {\n return arguments.length ? (paddingOuter = +_, rescale()) : paddingOuter;\n };\n\n scale.align = function(_) {\n return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;\n };\n\n scale.copy = function() {\n return band(domain(), [r0, r1])\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return initRange.apply(rescale(), arguments);\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n delete scale.paddingOuter;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band.apply(null, arguments).paddingInner(1));\n}\n","export default function constants(x) {\n return function() {\n return x;\n };\n}\n","export default function number(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant.js\";\nimport number from \"./number.js\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(a, b) {\n var t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n var n = Math.min(domain.length, range.length);\n if (clamp !== identity) clamp = clamper(domain[0], domain[n - 1]);\n piecewise = n > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? true : identity, rescale()) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous() {\n return transformer()(identity, identity);\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function tickFormat(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport tickFormat from \"./tickFormat.js\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain();\n var i0 = 0;\n var i1 = d.length - 1;\n var start = d[i0];\n var stop = d[i1];\n var prestep;\n var step;\n var maxIter = 10;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n \n while (maxIter-- > 0) {\n step = tickIncrement(start, stop, count);\n if (step === prestep) {\n d[i0] = start\n d[i1] = stop\n return domain(d);\n } else if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n } else {\n break;\n }\n prestep = step;\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous();\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear.js\";\nimport number from \"./number.js\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export default function nice(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format, formatSpecifier} from \"d3-format\";\nimport nice from \"./nice.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : x => Math.pow(base, x);\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), x => Math.log(x) / base);\n}\n\nfunction reflect(f) {\n return (x, k) => -f(-x, k);\n}\n\nexport function loggish(transform) {\n const scale = transform(transformLog, transformExp);\n const domain = scale.domain;\n let base = 10;\n let logs;\n let pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = count => {\n const d = domain();\n let u = d[0];\n let v = d[d.length - 1];\n const r = v < u;\n\n if (r) ([u, v] = [v, u]);\n\n let i = logs(u);\n let j = logs(v);\n let k;\n let t;\n const n = count == null ? 10 : +count;\n let z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.floor(i), j = Math.ceil(j);\n if (u > 0) for (; i <= j; ++i) {\n for (k = 1; k < base; ++k) {\n t = i < 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i <= j; ++i) {\n for (k = base - 1; k >= 1; --k) {\n t = i > 0 ? k / pows(-i) : k * pows(i);\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n if (z.length * 2 < n) z = ticks(u, v, n);\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = (count, specifier) => {\n if (count == null) count = 10;\n if (specifier == null) specifier = base === 10 ? \"s\" : \",\";\n if (typeof specifier !== \"function\") {\n if (!(base % 1) && (specifier = formatSpecifier(specifier)).precision == null) specifier.trim = true;\n specifier = format(specifier);\n }\n if (count === Infinity) return specifier;\n const k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return d => {\n let i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = () => {\n return domain(nice(domain(), {\n floor: x => pows(Math.floor(logs(x))),\n ceil: x => pows(Math.ceil(logs(x)))\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n const scale = loggish(transformer()).domain([1, 10]);\n scale.copy = () => copy(scale, log()).base(scale.base());\n initRange.apply(scale, arguments);\n return scale;\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear.js\";\nimport {copy, identity, transformer} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantileSorted as threshold} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init.js\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x != null && x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","const t0 = new Date, t1 = new Date;\n\nexport function timeInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;\n }\n\n interval.floor = (date) => {\n return floori(date = new Date(+date)), date;\n };\n\n interval.ceil = (date) => {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = (date) => {\n const d0 = interval(date), d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = (date, step) => {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = (start, stop, step) => {\n const range = [];\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n let previous;\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = (test) => {\n return timeInterval((date) => {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, (date, step) => {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = (start, end) => {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = (step) => {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? (d) => field(d) % step === 0\n : (d) => interval.count(0, d) % step === 0);\n };\n }\n\n return interval;\n}\n","import {timeInterval} from \"./interval.js\";\n\nexport const millisecond = timeInterval(() => {\n // noop\n}, (date, step) => {\n date.setTime(+date + step);\n}, (start, end) => {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = (k) => {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return timeInterval((date) => {\n date.setTime(Math.floor(date / k) * k);\n }, (date, step) => {\n date.setTime(+date + step * k);\n }, (start, end) => {\n return (end - start) / k;\n });\n};\n\nexport const milliseconds = millisecond.range;\n","export const durationSecond = 1000;\nexport const durationMinute = durationSecond * 60;\nexport const durationHour = durationMinute * 60;\nexport const durationDay = durationHour * 24;\nexport const durationWeek = durationDay * 7;\nexport const durationMonth = durationDay * 30;\nexport const durationYear = durationDay * 365;\n","import {timeInterval} from \"./interval.js\";\nimport {durationSecond} from \"./duration.js\";\n\nexport const second = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds());\n}, (date, step) => {\n date.setTime(+date + step * durationSecond);\n}, (start, end) => {\n return (end - start) / durationSecond;\n}, (date) => {\n return date.getUTCSeconds();\n});\n\nexport const seconds = second.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeMinute = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getMinutes();\n});\n\nexport const timeMinutes = timeMinute.range;\n\nexport const utcMinute = timeInterval((date) => {\n date.setUTCSeconds(0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationMinute);\n}, (start, end) => {\n return (end - start) / durationMinute;\n}, (date) => {\n return date.getUTCMinutes();\n});\n\nexport const utcMinutes = utcMinute.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration.js\";\n\nexport const timeHour = timeInterval((date) => {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getHours();\n});\n\nexport const timeHours = timeHour.range;\n\nexport const utcHour = timeInterval((date) => {\n date.setUTCMinutes(0, 0, 0);\n}, (date, step) => {\n date.setTime(+date + step * durationHour);\n}, (start, end) => {\n return (end - start) / durationHour;\n}, (date) => {\n return date.getUTCHours();\n});\n\nexport const utcHours = utcHour.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationDay, durationMinute} from \"./duration.js\";\n\nexport const timeDay = timeInterval(\n date => date.setHours(0, 0, 0, 0),\n (date, step) => date.setDate(date.getDate() + step),\n (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,\n date => date.getDate() - 1\n);\n\nexport const timeDays = timeDay.range;\n\nexport const utcDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return date.getUTCDate() - 1;\n});\n\nexport const utcDays = utcDay.range;\n\nexport const unixDay = timeInterval((date) => {\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step);\n}, (start, end) => {\n return (end - start) / durationDay;\n}, (date) => {\n return Math.floor(date / durationDay);\n});\n\nexport const unixDays = unixDay.range;\n","import {timeInterval} from \"./interval.js\";\nimport {durationMinute, durationWeek} from \"./duration.js\";\n\nfunction timeWeekday(i) {\n return timeInterval((date) => {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setDate(date.getDate() + step * 7);\n }, (start, end) => {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport const timeSunday = timeWeekday(0);\nexport const timeMonday = timeWeekday(1);\nexport const timeTuesday = timeWeekday(2);\nexport const timeWednesday = timeWeekday(3);\nexport const timeThursday = timeWeekday(4);\nexport const timeFriday = timeWeekday(5);\nexport const timeSaturday = timeWeekday(6);\n\nexport const timeSundays = timeSunday.range;\nexport const timeMondays = timeMonday.range;\nexport const timeTuesdays = timeTuesday.range;\nexport const timeWednesdays = timeWednesday.range;\nexport const timeThursdays = timeThursday.range;\nexport const timeFridays = timeFriday.range;\nexport const timeSaturdays = timeSaturday.range;\n\nfunction utcWeekday(i) {\n return timeInterval((date) => {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, (start, end) => {\n return (end - start) / durationWeek;\n });\n}\n\nexport const utcSunday = utcWeekday(0);\nexport const utcMonday = utcWeekday(1);\nexport const utcTuesday = utcWeekday(2);\nexport const utcWednesday = utcWeekday(3);\nexport const utcThursday = utcWeekday(4);\nexport const utcFriday = utcWeekday(5);\nexport const utcSaturday = utcWeekday(6);\n\nexport const utcSundays = utcSunday.range;\nexport const utcMondays = utcMonday.range;\nexport const utcTuesdays = utcTuesday.range;\nexport const utcWednesdays = utcWednesday.range;\nexport const utcThursdays = utcThursday.range;\nexport const utcFridays = utcFriday.range;\nexport const utcSaturdays = utcSaturday.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeMonth = timeInterval((date) => {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setMonth(date.getMonth() + step);\n}, (start, end) => {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, (date) => {\n return date.getMonth();\n});\n\nexport const timeMonths = timeMonth.range;\n\nexport const utcMonth = timeInterval((date) => {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, (start, end) => {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, (date) => {\n return date.getUTCMonth();\n});\n\nexport const utcMonths = utcMonth.range;\n","import {timeInterval} from \"./interval.js\";\n\nexport const timeYear = timeInterval((date) => {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setFullYear(date.getFullYear() + step);\n}, (start, end) => {\n return end.getFullYear() - start.getFullYear();\n}, (date) => {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\ntimeYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport const timeYears = timeYear.range;\n\nexport const utcYear = timeInterval((date) => {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, (start, end) => {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, (date) => {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = (k) => {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, (date, step) => {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport const utcYears = utcYear.range;\n","import {bisector, tickStep} from \"d3-array\";\nimport {durationDay, durationHour, durationMinute, durationMonth, durationSecond, durationWeek, durationYear} from \"./duration.js\";\nimport {millisecond} from \"./millisecond.js\";\nimport {second} from \"./second.js\";\nimport {timeMinute, utcMinute} from \"./minute.js\";\nimport {timeHour, utcHour} from \"./hour.js\";\nimport {timeDay, unixDay} from \"./day.js\";\nimport {timeSunday, utcSunday} from \"./week.js\";\nimport {timeMonth, utcMonth} from \"./month.js\";\nimport {timeYear, utcYear} from \"./year.js\";\n\nfunction ticker(year, month, week, day, hour, minute) {\n\n const tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function ticks(start, stop, count) {\n const reverse = stop < start;\n if (reverse) [start, stop] = [stop, start];\n const interval = count && typeof count.range === \"function\" ? count : tickInterval(start, stop, count);\n const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop\n return reverse ? ticks.reverse() : ticks;\n }\n\n function tickInterval(start, stop, count) {\n const target = Math.abs(stop - start) / count;\n const i = bisector(([,, step]) => step).right(tickIntervals, target);\n if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));\n if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));\n const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n return t.every(step);\n }\n\n return [ticks, tickInterval];\n}\n\nconst [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);\nconst [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);\n\nexport {utcTicks, utcTickInterval, timeTicks, timeTickInterval};\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newDate(y, m, d) {\n return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"g\": formatYearISO,\n \"G\": formatFullYearISO,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"q\": formatQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"g\": formatUTCYearISO,\n \"G\": formatUTCFullYearISO,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"q\": formatUTCQuarter,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"g\": parseYear,\n \"G\": parseFullYear,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"q\": parseQuarter,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, Z) {\n return function(string) {\n var d = newDate(1900, undefined, 1),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n if (\"s\" in d) return new Date(d.s * 1000 + (\"L\" in d ? d.L : 0));\n\n // If this is utcParse, never use the local timezone.\n if (Z && !(\"Z\" in d)) d.Z = 0;\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // If the month was not specified, inherit from the quarter.\n if (d.m === undefined) d.m = \"q\" in d ? d.q : 0;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = localDate(newDate(d.y, 0, 1)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return localDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatQuarter(d) {\n return 1 + ~~(d.getMonth() / 3);\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n function formatUTCQuarter(d) {\n return 1 + ~~(d.getUTCMonth() / 3);\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", false);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier += \"\", true);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n return new Map(names.map((name, i) => [name.toLowerCase(), i]));\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseQuarter(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.s = +n[0], i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction dISO(d) {\n var day = d.getDay();\n return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n}\n\nfunction formatWeekNumberISO(d, p) {\n d = dISO(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatYearISO(d, p) {\n d = dISO(d);\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatFullYearISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction UTCdISO(d) {\n var day = d.getUTCDay();\n return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n d = UTCdISO(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCYearISO(d, p) {\n d = UTCdISO(d);\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCFullYearISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale.js\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeTicks, timeTickInterval} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy} from \"./continuous.js\";\nimport {initRange} from \"./init.js\";\nimport nice from \"./nice.js\";\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {\n var scale = continuous(),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval) {\n var d = domain();\n if (!interval || typeof interval.range !== \"function\") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);\n return interval ? domain(nice(d, interval)) : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));\n };\n\n return scale;\n}\n\nexport default function time() {\n return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcTicks, utcTickInterval} from \"d3-time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {calendar} from \"./time.js\";\nimport {initRange} from \"./init.js\";\n\nexport default function utcTime() {\n return initRange.apply(calendar(utcTicks, utcTickInterval, utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {interpolate, interpolateRound} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return x == null || isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1;\n return arguments.length ? ([r0, r1] = _, interpolator = interpolate(r0, r1), scale) : [interpolator(0), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {interpolate, interpolateRound, piecewise} from \"d3-interpolate\";\nimport {identity} from \"./continuous.js\";\nimport {initInterpolator} from \"./init.js\";\nimport {linearish} from \"./linear.js\";\nimport {loggish} from \"./log.js\";\nimport {copy} from \"./sequential.js\";\nimport {symlogish} from \"./symlog.js\";\nimport {powish} from \"./pow.js\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n s = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (s * x < s * t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1, scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n function range(interpolate) {\n return function(_) {\n var r0, r1, r2;\n return arguments.length ? ([r0, r1, r2] = _, interpolator = piecewise(interpolate, [r0, r1, r2]), scale) : [interpolator(0), interpolator(0.5), interpolator(1)];\n };\n }\n\n scale.range = range(interpolate);\n\n scale.rangeRound = range(interpolateRound);\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), s = t1 < t0 ? -1 : 1;\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","export default function(specifier) {\n var n = specifier.length / 6 | 0, colors = new Array(n), i = 0;\n while (i < n) colors[i] = \"#\" + specifier.slice(i * 6, ++i * 6);\n return colors;\n}\n","import colors from \"../colors.js\";\n\nexport default colors(\"1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f\");\n","import colors from \"../colors.js\";\n\nexport default colors(\"4e79a7f28e2ce1575976b7b259a14fedc949af7aa1ff9da79c755fbab0ab\");\n","import {interpolateRgbBasis} from \"d3-interpolate\";\n\nexport default scheme => interpolateRgbBasis(scheme[scheme.length - 1]);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"d8b365f5f5f55ab4ac\",\n \"a6611adfc27d80cdc1018571\",\n \"a6611adfc27df5f5f580cdc1018571\",\n \"8c510ad8b365f6e8c3c7eae55ab4ac01665e\",\n \"8c510ad8b365f6e8c3f5f5f5c7eae55ab4ac01665e\",\n \"8c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e\",\n \"8c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e\",\n \"5430058c510abf812ddfc27df6e8c3c7eae580cdc135978f01665e003c30\",\n \"5430058c510abf812ddfc27df6e8c3f5f5f5c7eae580cdc135978f01665e003c30\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"af8dc3f7f7f77fbf7b\",\n \"7b3294c2a5cfa6dba0008837\",\n \"7b3294c2a5cff7f7f7a6dba0008837\",\n \"762a83af8dc3e7d4e8d9f0d37fbf7b1b7837\",\n \"762a83af8dc3e7d4e8f7f7f7d9f0d37fbf7b1b7837\",\n \"762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b7837\",\n \"762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b7837\",\n \"40004b762a839970abc2a5cfe7d4e8d9f0d3a6dba05aae611b783700441b\",\n \"40004b762a839970abc2a5cfe7d4e8f7f7f7d9f0d3a6dba05aae611b783700441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e9a3c9f7f7f7a1d76a\",\n \"d01c8bf1b6dab8e1864dac26\",\n \"d01c8bf1b6daf7f7f7b8e1864dac26\",\n \"c51b7de9a3c9fde0efe6f5d0a1d76a4d9221\",\n \"c51b7de9a3c9fde0eff7f7f7e6f5d0a1d76a4d9221\",\n \"c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221\",\n \"c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221\",\n \"8e0152c51b7dde77aef1b6dafde0efe6f5d0b8e1867fbc414d9221276419\",\n \"8e0152c51b7dde77aef1b6dafde0eff7f7f7e6f5d0b8e1867fbc414d9221276419\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"998ec3f7f7f7f1a340\",\n \"5e3c99b2abd2fdb863e66101\",\n \"5e3c99b2abd2f7f7f7fdb863e66101\",\n \"542788998ec3d8daebfee0b6f1a340b35806\",\n \"542788998ec3d8daebf7f7f7fee0b6f1a340b35806\",\n \"5427888073acb2abd2d8daebfee0b6fdb863e08214b35806\",\n \"5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b35806\",\n \"2d004b5427888073acb2abd2d8daebfee0b6fdb863e08214b358067f3b08\",\n \"2d004b5427888073acb2abd2d8daebf7f7f7fee0b6fdb863e08214b358067f3b08\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62f7f7f767a9cf\",\n \"ca0020f4a58292c5de0571b0\",\n \"ca0020f4a582f7f7f792c5de0571b0\",\n \"b2182bef8a62fddbc7d1e5f067a9cf2166ac\",\n \"b2182bef8a62fddbc7f7f7f7d1e5f067a9cf2166ac\",\n \"b2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac\",\n \"b2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac\",\n \"67001fb2182bd6604df4a582fddbc7d1e5f092c5de4393c32166ac053061\",\n \"67001fb2182bd6604df4a582fddbc7f7f7f7d1e5f092c5de4393c32166ac053061\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ef8a62ffffff999999\",\n \"ca0020f4a582bababa404040\",\n \"ca0020f4a582ffffffbababa404040\",\n \"b2182bef8a62fddbc7e0e0e09999994d4d4d\",\n \"b2182bef8a62fddbc7ffffffe0e0e09999994d4d4d\",\n \"b2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d\",\n \"b2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d\",\n \"67001fb2182bd6604df4a582fddbc7e0e0e0bababa8787874d4d4d1a1a1a\",\n \"67001fb2182bd6604df4a582fddbc7ffffffe0e0e0bababa8787874d4d4d1a1a1a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91bfdb\",\n \"d7191cfdae61abd9e92c7bb6\",\n \"d7191cfdae61ffffbfabd9e92c7bb6\",\n \"d73027fc8d59fee090e0f3f891bfdb4575b4\",\n \"d73027fc8d59fee090ffffbfe0f3f891bfdb4575b4\",\n \"d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4\",\n \"d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4\",\n \"a50026d73027f46d43fdae61fee090e0f3f8abd9e974add14575b4313695\",\n \"a50026d73027f46d43fdae61fee090ffffbfe0f3f8abd9e974add14575b4313695\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf91cf60\",\n \"d7191cfdae61a6d96a1a9641\",\n \"d7191cfdae61ffffbfa6d96a1a9641\",\n \"d73027fc8d59fee08bd9ef8b91cf601a9850\",\n \"d73027fc8d59fee08bffffbfd9ef8b91cf601a9850\",\n \"d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850\",\n \"d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850\",\n \"a50026d73027f46d43fdae61fee08bd9ef8ba6d96a66bd631a9850006837\",\n \"a50026d73027f46d43fdae61fee08bffffbfd9ef8ba6d96a66bd631a9850006837\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fc8d59ffffbf99d594\",\n \"d7191cfdae61abdda42b83ba\",\n \"d7191cfdae61ffffbfabdda42b83ba\",\n \"d53e4ffc8d59fee08be6f59899d5943288bd\",\n \"d53e4ffc8d59fee08bffffbfe6f59899d5943288bd\",\n \"d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd\",\n \"d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd\",\n \"9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2\",\n \"9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5f999d8c92ca25f\",\n \"edf8fbb2e2e266c2a4238b45\",\n \"edf8fbb2e2e266c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a42ca25f006d2c\",\n \"edf8fbccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45005824\",\n \"f7fcfde5f5f9ccece699d8c966c2a441ae76238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0ecf49ebcda8856a7\",\n \"edf8fbb3cde38c96c688419d\",\n \"edf8fbb3cde38c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68856a7810f7c\",\n \"edf8fbbfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d6e016b\",\n \"f7fcfde0ecf4bfd3e69ebcda8c96c68c6bb188419d810f7c4d004b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e0f3dba8ddb543a2ca\",\n \"f0f9e8bae4bc7bccc42b8cbe\",\n \"f0f9e8bae4bc7bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc443a2ca0868ac\",\n \"f0f9e8ccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe08589e\",\n \"f7fcf0e0f3dbccebc5a8ddb57bccc44eb3d32b8cbe0868ac084081\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee8c8fdbb84e34a33\",\n \"fef0d9fdcc8afc8d59d7301f\",\n \"fef0d9fdcc8afc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59e34a33b30000\",\n \"fef0d9fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301f990000\",\n \"fff7ecfee8c8fdd49efdbb84fc8d59ef6548d7301fb300007f0000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece2f0a6bddb1c9099\",\n \"f6eff7bdc9e167a9cf02818a\",\n \"f6eff7bdc9e167a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf1c9099016c59\",\n \"f6eff7d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016450\",\n \"fff7fbece2f0d0d1e6a6bddb67a9cf3690c002818a016c59014636\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ece7f2a6bddb2b8cbe\",\n \"f1eef6bdc9e174a9cf0570b0\",\n \"f1eef6bdc9e174a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf2b8cbe045a8d\",\n \"f1eef6d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0034e7b\",\n \"fff7fbece7f2d0d1e6a6bddb74a9cf3690c00570b0045a8d023858\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e7e1efc994c7dd1c77\",\n \"f1eef6d7b5d8df65b0ce1256\",\n \"f1eef6d7b5d8df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0dd1c77980043\",\n \"f1eef6d4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125691003f\",\n \"f7f4f9e7e1efd4b9dac994c7df65b0e7298ace125698004367001f\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fde0ddfa9fb5c51b8a\",\n \"feebe2fbb4b9f768a1ae017e\",\n \"feebe2fbb4b9f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1c51b8a7a0177\",\n \"feebe2fcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a0177\",\n \"fff7f3fde0ddfcc5c0fa9fb5f768a1dd3497ae017e7a017749006a\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"edf8b17fcdbb2c7fb8\",\n \"ffffcca1dab441b6c4225ea8\",\n \"ffffcca1dab441b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c42c7fb8253494\",\n \"ffffccc7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea80c2c84\",\n \"ffffd9edf8b1c7e9b47fcdbb41b6c41d91c0225ea8253494081d58\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f7fcb9addd8e31a354\",\n \"ffffccc2e69978c679238443\",\n \"ffffccc2e69978c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67931a354006837\",\n \"ffffccd9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443005a32\",\n \"ffffe5f7fcb9d9f0a3addd8e78c67941ab5d238443006837004529\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fff7bcfec44fd95f0e\",\n \"ffffd4fed98efe9929cc4c02\",\n \"ffffd4fed98efe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929d95f0e993404\",\n \"ffffd4fee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c028c2d04\",\n \"ffffe5fff7bcfee391fec44ffe9929ec7014cc4c02993404662506\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"ffeda0feb24cf03b20\",\n \"ffffb2fecc5cfd8d3ce31a1c\",\n \"ffffb2fecc5cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cf03b20bd0026\",\n \"ffffb2fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cb10026\",\n \"ffffccffeda0fed976feb24cfd8d3cfc4e2ae31a1cbd0026800026\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"deebf79ecae13182bd\",\n \"eff3ffbdd7e76baed62171b5\",\n \"eff3ffbdd7e76baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed63182bd08519c\",\n \"eff3ffc6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b5084594\",\n \"f7fbffdeebf7c6dbef9ecae16baed64292c62171b508519c08306b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"e5f5e0a1d99b31a354\",\n \"edf8e9bae4b374c476238b45\",\n \"edf8e9bae4b374c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47631a354006d2c\",\n \"edf8e9c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45005a32\",\n \"f7fcf5e5f5e0c7e9c0a1d99b74c47641ab5d238b45006d2c00441b\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"f0f0f0bdbdbd636363\",\n \"f7f7f7cccccc969696525252\",\n \"f7f7f7cccccc969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696636363252525\",\n \"f7f7f7d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525\",\n \"fffffff0f0f0d9d9d9bdbdbd969696737373525252252525000000\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"efedf5bcbddc756bb1\",\n \"f2f0f7cbc9e29e9ac86a51a3\",\n \"f2f0f7cbc9e29e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8756bb154278f\",\n \"f2f0f7dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a34a1486\",\n \"fcfbfdefedf5dadaebbcbddc9e9ac8807dba6a51a354278f3f007d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee0d2fc9272de2d26\",\n \"fee5d9fcae91fb6a4acb181d\",\n \"fee5d9fcae91fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4ade2d26a50f15\",\n \"fee5d9fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181d99000d\",\n \"fff5f0fee0d2fcbba1fc9272fb6a4aef3b2ccb181da50f1567000d\"\n).map(colors);\n\nexport default ramp(scheme);\n","import colors from \"../colors.js\";\nimport ramp from \"../ramp.js\";\n\nexport var scheme = new Array(3).concat(\n \"fee6cefdae6be6550d\",\n \"feeddefdbe85fd8d3cd94701\",\n \"feeddefdbe85fd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3ce6550da63603\",\n \"feeddefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d948018c2d04\",\n \"fff5ebfee6cefdd0a2fdae6bfd8d3cf16913d94801a636037f2704\"\n).map(colors);\n\nexport default ramp(scheme);\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(-4.54 - t * (35.34 - t * (2381.73 - t * (6402.7 - t * (7024.72 - t * 2710.57))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(32.49 + t * (170.73 + t * (52.82 - t * (131.46 - t * (176.58 - t * 67.37))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(81.24 + t * (442.36 - t * (2482.43 - t * (6167.24 - t * (6614.94 - t * 2475.67)))))))\n + \")\";\n}\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport default interpolateCubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));\n","import {cubehelix} from \"d3-color\";\nimport {interpolateCubehelixLong} from \"d3-interpolate\";\n\nexport var warm = interpolateCubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nexport var cool = interpolateCubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));\n\nvar c = cubehelix();\n\nexport default function(t) {\n if (t < 0 || t > 1) t -= Math.floor(t);\n var ts = Math.abs(t - 0.5);\n c.h = 360 * t - 100;\n c.s = 1.5 - 1.5 * ts;\n c.l = 0.8 - 0.9 * ts;\n return c + \"\";\n}\n","import {rgb} from \"d3-color\";\n\nvar c = rgb(),\n pi_1_3 = Math.PI / 3,\n pi_2_3 = Math.PI * 2 / 3;\n\nexport default function(t) {\n var x;\n t = (0.5 - t) * Math.PI;\n c.r = 255 * (x = Math.sin(t)) * x;\n c.g = 255 * (x = Math.sin(t + pi_1_3)) * x;\n c.b = 255 * (x = Math.sin(t + pi_2_3)) * x;\n return c + \"\";\n}\n","export default function(t) {\n t = Math.max(0, Math.min(1, t));\n return \"rgb(\"\n + Math.max(0, Math.min(255, Math.round(34.61 + t * (1172.33 - t * (10793.56 - t * (33300.12 - t * (38394.49 - t * 14825.05))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(23.31 + t * (557.33 + t * (1225.33 - t * (3574.96 - t * (1073.77 + t * 707.56))))))) + \", \"\n + Math.max(0, Math.min(255, Math.round(27.2 + t * (3211.1 - t * (15327.97 - t * (27814 - t * (22569.18 - t * 6838.66)))))))\n + \")\";\n}\n","import colors from \"../colors.js\";\n\nfunction ramp(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n\nexport default ramp(colors(\"44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725\"));\n\nexport var magma = ramp(colors(\"00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf\"));\n\nexport var inferno = ramp(colors(\"00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4\"));\n\nexport var plasma = ramp(colors(\"0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921\"));\n","export const abs = Math.abs;\nexport const atan2 = Math.atan2;\nexport const cos = Math.cos;\nexport const max = Math.max;\nexport const min = Math.min;\nexport const sin = Math.sin;\nexport const sqrt = Math.sqrt;\n\nexport const epsilon = 1e-12;\nexport const pi = Math.PI;\nexport const halfPi = pi / 2;\nexport const tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {min, sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const r = sqrt(size + min(size / 28, 0.75)) * 0.59436;\n const t = r / 2;\n const u = t * sqrt3;\n context.moveTo(0, r);\n context.lineTo(0, -r);\n context.moveTo(-u, -t);\n context.lineTo(u, t);\n context.moveTo(-u, t);\n context.lineTo(u, -t);\n }\n};\n","import {pi, sqrt, tau} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / 5) / 2;\n context.moveTo(-3 * r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, -3 * r);\n context.lineTo(r, -3 * r);\n context.lineTo(r, -r);\n context.lineTo(3 * r, -r);\n context.lineTo(3 * r, r);\n context.lineTo(r, r);\n context.lineTo(r, 3 * r);\n context.lineTo(-r, 3 * r);\n context.lineTo(-r, r);\n context.lineTo(-3 * r, r);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst tan30 = sqrt(1 / 3);\nconst tan30_2 = tan30 * 2;\n\nexport default {\n draw(context, size) {\n const y = sqrt(size / tan30_2);\n const x = y * tan30;\n context.moveTo(0, -y);\n context.lineTo(x, 0);\n context.lineTo(0, y);\n context.lineTo(-x, 0);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size) * 0.62625;\n context.moveTo(0, -r);\n context.lineTo(r, 0);\n context.lineTo(0, r);\n context.lineTo(-r, 0);\n context.closePath();\n }\n};\n","import {min, sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size - min(size / 7, 2)) * 0.87559;\n context.moveTo(-r, 0);\n context.lineTo(r, 0);\n context.moveTo(0, r);\n context.lineTo(0, -r);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const w = sqrt(size);\n const x = -w / 2;\n context.rect(x, x, w, w);\n }\n};\n","import {sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size) * 0.4431;\n context.moveTo(r, r);\n context.lineTo(r, -r);\n context.lineTo(-r, -r);\n context.lineTo(-r, r);\n context.closePath();\n }\n};\n","import {sin, cos, sqrt, pi, tau} from \"../math.js\";\n\nconst ka = 0.89081309152928522810;\nconst kr = sin(pi / 10) / sin(7 * pi / 10);\nconst kx = sin(tau / 10) * kr;\nconst ky = -cos(tau / 10) * kr;\n\nexport default {\n draw(context, size) {\n const r = sqrt(size * ka);\n const x = kx * r;\n const y = ky * r;\n context.moveTo(0, -r);\n context.lineTo(x, y);\n for (let i = 1; i < 5; ++i) {\n const a = tau * i / 5;\n const c = cos(a);\n const s = sin(a);\n context.lineTo(s * r, -c * r);\n context.lineTo(c * x - s * y, s * x + c * y);\n }\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const y = -sqrt(size / (sqrt3 * 3));\n context.moveTo(0, y * 2);\n context.lineTo(-sqrt3 * y, -y);\n context.lineTo(sqrt3 * y, -y);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst sqrt3 = sqrt(3);\n\nexport default {\n draw(context, size) {\n const s = sqrt(size) * 0.6824;\n const t = s / 2;\n const u = (s * sqrt3) / 2; // cos(Math.PI / 6)\n context.moveTo(0, -s);\n context.lineTo(u, t);\n context.lineTo(-u, t);\n context.closePath();\n }\n};\n","import {sqrt} from \"../math.js\";\n\nconst c = -0.5;\nconst s = sqrt(3) / 2;\nconst k = 1 / sqrt(12);\nconst a = (k / 2 + 1) * 3;\n\nexport default {\n draw(context, size) {\n const r = sqrt(size / a);\n const x0 = r / 2, y0 = r * k;\n const x1 = x0, y1 = r * k + r;\n const x2 = -x1, y2 = y1;\n context.moveTo(x0, y0);\n context.lineTo(x1, y1);\n context.lineTo(x2, y2);\n context.lineTo(c * x0 - s * y0, s * x0 + c * y0);\n context.lineTo(c * x1 - s * y1, s * x1 + c * y1);\n context.lineTo(c * x2 - s * y2, s * x2 + c * y2);\n context.lineTo(c * x0 + s * y0, c * y0 - s * x0);\n context.lineTo(c * x1 + s * y1, c * y1 - s * x1);\n context.lineTo(c * x2 + s * y2, c * y2 - s * x2);\n context.closePath();\n }\n};\n","import {min, sqrt} from \"../math.js\";\n\nexport default {\n draw(context, size) {\n const r = sqrt(size - min(size / 6, 1.7)) * 0.6189;\n context.moveTo(-r, -r);\n context.lineTo(r, r);\n context.moveTo(-r, r);\n context.lineTo(r, -r);\n }\n};\n","import constant from \"./constant.js\";\nimport {withPath} from \"./path.js\";\nimport asterisk from \"./symbol/asterisk.js\";\nimport circle from \"./symbol/circle.js\";\nimport cross from \"./symbol/cross.js\";\nimport diamond from \"./symbol/diamond.js\";\nimport diamond2 from \"./symbol/diamond2.js\";\nimport plus from \"./symbol/plus.js\";\nimport square from \"./symbol/square.js\";\nimport square2 from \"./symbol/square2.js\";\nimport star from \"./symbol/star.js\";\nimport triangle from \"./symbol/triangle.js\";\nimport triangle2 from \"./symbol/triangle2.js\";\nimport wye from \"./symbol/wye.js\";\nimport times from \"./symbol/times.js\";\n\n// These symbols are designed to be filled.\nexport const symbolsFill = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\n// These symbols are designed to be stroked (with a width of 1.5px and round caps).\nexport const symbolsStroke = [\n circle,\n plus,\n times,\n triangle2,\n asterisk,\n square2,\n diamond2\n];\n\nexport default function Symbol(type, size) {\n let context = null,\n path = withPath(symbol);\n\n type = typeof type === \"function\" ? type : constant(type || circle);\n size = typeof size === \"function\" ? size : constant(size === undefined ? 64 : +size);\n\n function symbol() {\n let buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export function Transform(k, x, y) {\n this.k = k;\n this.x = x;\n this.y = y;\n}\n\nTransform.prototype = {\n constructor: Transform,\n scale: function(k) {\n return k === 1 ? this : new Transform(this.k * k, this.x, this.y);\n },\n translate: function(x, y) {\n return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);\n },\n apply: function(point) {\n return [point[0] * this.k + this.x, point[1] * this.k + this.y];\n },\n applyX: function(x) {\n return x * this.k + this.x;\n },\n applyY: function(y) {\n return y * this.k + this.y;\n },\n invert: function(location) {\n return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];\n },\n invertX: function(x) {\n return (x - this.x) / this.k;\n },\n invertY: function(y) {\n return (y - this.y) / this.k;\n },\n rescaleX: function(x) {\n return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));\n },\n rescaleY: function(y) {\n return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));\n },\n toString: function() {\n return \"translate(\" + this.x + \",\" + this.y + \") scale(\" + this.k + \")\";\n }\n};\n\nexport var identity = new Transform(1, 0, 0);\n\ntransform.prototype = Transform.prototype;\n\nexport default function transform(node) {\n while (!node.__zoom) if (!(node = node.parentNode)) return identity;\n return node.__zoom;\n}\n","export default function format(date, fallback) {\n if (!(date instanceof Date)) date = new Date(+date);\n if (isNaN(date)) return typeof fallback === \"function\" ? fallback(date) : fallback;\n const hours = date.getUTCHours();\n const minutes = date.getUTCMinutes();\n const seconds = date.getUTCSeconds();\n const milliseconds = date.getUTCMilliseconds();\n return `${formatYear(date.getUTCFullYear(), 4)}-${pad(date.getUTCMonth() + 1, 2)}-${pad(date.getUTCDate(), 2)}${\n hours || minutes || seconds || milliseconds ? `T${pad(hours, 2)}:${pad(minutes, 2)}${\n seconds || milliseconds ? `:${pad(seconds, 2)}${\n milliseconds ? `.${pad(milliseconds, 3)}` : ``\n }` : ``\n }Z` : ``\n }`;\n}\n\nfunction formatYear(year) {\n return year < 0 ? `-${pad(-year, 6)}`\n : year > 9999 ? `+${pad(year, 6)}`\n : pad(year, 4);\n}\n\nfunction pad(value, width) {\n return `${value}`.padStart(width, \"0\");\n}\n","const re = /^(?:[-+]\\d{2})?\\d{4}(?:-\\d{2}(?:-\\d{2})?)?(?:T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d{3})?)?(?:Z|[-+]\\d{2}:?\\d{2})?)?$/;\n\nexport default function parse(string, fallback) {\n if (!re.test(string += \"\")) return typeof fallback === \"function\" ? fallback(string) : fallback;\n return new Date(string);\n}\n","import { utcSecond, utcMinute, utcHour, utcDay, utcWeek, utcMonth, utcYear } from \"d3\";\nimport { utcMonday, utcTuesday, utcWednesday, utcThursday, utcFriday, utcSaturday, utcSunday } from \"d3\";\nimport { timeSecond, timeMinute, timeHour, timeDay, timeWeek, timeMonth, timeYear } from \"d3\";\nimport { timeMonday, timeTuesday, timeWednesday, timeThursday, timeFriday, timeSaturday, timeSunday } from \"d3\";\nconst timeIntervals = new Map([\n [\"second\", timeSecond],\n [\"minute\", timeMinute],\n [\"hour\", timeHour],\n [\"day\", timeDay],\n [\"week\", timeWeek],\n [\"month\", timeMonth],\n [\"year\", timeYear],\n [\"monday\", timeMonday],\n [\"tuesday\", timeTuesday],\n [\"wednesday\", timeWednesday],\n [\"thursday\", timeThursday],\n [\"friday\", timeFriday],\n [\"saturday\", timeSaturday],\n [\"sunday\", timeSunday]\n]);\nconst utcIntervals = new Map([\n [\"second\", utcSecond],\n [\"minute\", utcMinute],\n [\"hour\", utcHour],\n [\"day\", utcDay],\n [\"week\", utcWeek],\n [\"month\", utcMonth],\n [\"year\", utcYear],\n [\"monday\", utcMonday],\n [\"tuesday\", utcTuesday],\n [\"wednesday\", utcWednesday],\n [\"thursday\", utcThursday],\n [\"friday\", utcFriday],\n [\"saturday\", utcSaturday],\n [\"sunday\", utcSunday]\n]);\nexport function maybeTimeInterval(interval) {\n const i = timeIntervals.get(`${interval}`.toLowerCase());\n if (!i)\n throw new Error(`unknown interval: ${interval}`);\n return i;\n}\nexport function maybeUtcInterval(interval) {\n const i = utcIntervals.get(`${interval}`.toLowerCase());\n if (!i)\n throw new Error(`unknown interval: ${interval}`);\n return i;\n}\n","import { parse as isoParse } from \"isoformat\";\nimport { color, descending, range as rangei, quantile } from \"d3\";\nimport { maybeTimeInterval, maybeUtcInterval } from \"./time.js\";\n// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray\nconst TypedArray = Object.getPrototypeOf(Uint8Array);\nconst objectToString = Object.prototype.toString;\n/** \n * Given an iterable *data* and some *value* accessor, returns an array (a column) of the specified *type* with the corresponding value of each element of the data. The *value* accessor may be one of the following types:\n * \n * * a string - corresponding to the field accessor (`d => d[value]`)\n * * an accessor function - called as *type*.from(*data*, *value*)\n * * a number, Date, or boolean — resulting in an array uniformly filled with the *value*\n * * an object with a transform method — called as *value*.transform(*data*)\n * * an array of values - returning the same\n * * null or undefined - returning the same\n * \n * If *type* is specified, it must be Array or a similar class that implements the [Array.from](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from) interface such as a typed array. When *type* is Array or a typed array class, the return value of valueof will be an instance of the same (or null or undefined). If *type* is not specified, valueof may return either an array or a typed array (or null or undefined).\n * \n * Plot.valueof is not guaranteed to return a new array. When a transform method is used, or when the given *value* is an array that is compatible with the requested *type*, the array may be returned as-is without making a copy.\n * \n */\nexport function valueof(data, value, type) {\n const valueType = typeof value;\n return valueType === \"string\"\n ? map(data, field(value), type)\n : valueType === \"function\"\n ? map(data, value, type)\n : valueType === \"number\" || value instanceof Date || valueType === \"boolean\"\n ? map(data, constant(value), type)\n : value && typeof value.transform === \"function\"\n ? arrayify(value.transform(data), type)\n : arrayify(value, type); // preserve undefined type\n}\nexport const field = (name) => (d) => d[name];\nexport const indexOf = (d, i) => i;\n/** \n * This channel helper returns a source array as-is, avoiding an extra copy when defining a channel as being equal to the data:\n * \n * ```js\n * Plot.raster(await readValues(), {width: 300, height: 200, fill: Plot.identity})\n * ```\n * \n */\nexport const identity = { transform: (d) => d };\nexport const zero = () => 0;\nexport const one = () => 1;\nexport const yes = () => true;\nexport const string = (x) => (x == null ? x : `${x}`);\nexport const number = (x) => (x == null ? x : +x);\nexport const boolean = (x) => (x == null ? x : !!x);\nexport const first = (x) => (x ? x[0] : undefined);\nexport const second = (x) => (x ? x[1] : undefined);\nexport const third = (x) => (x ? x[2] : undefined);\nexport const constant = (x) => () => x;\n// Converts a string like “p25” into a function that takes an index I and an\n// accessor function f, returning the corresponding percentile value.\nexport function percentile(reduce) {\n const p = +`${reduce}`.slice(1) / 100;\n return (I, f) => quantile(I, p, f);\n}\n// Some channels may allow a string constant to be specified; to differentiate\n// string constants (e.g., \"red\") from named fields (e.g., \"date\"), this\n// function tests whether the given value is a CSS color string and returns a\n// tuple [channel, constant] where one of the two is undefined, and the other is\n// the given value. If you wish to reference a named field that is also a valid\n// CSS color, use an accessor (d => d.red) instead.\nexport function maybeColorChannel(value, defaultValue) {\n if (value === undefined)\n value = defaultValue;\n return value === null ? [undefined, \"none\"] : isColor(value) ? [undefined, value] : [value, undefined];\n}\n// Similar to maybeColorChannel, this tests whether the given value is a number\n// indicating a constant, and otherwise assumes that it’s a channel value.\nexport function maybeNumberChannel(value, defaultValue) {\n if (value === undefined)\n value = defaultValue;\n return value === null || typeof value === \"number\" ? [undefined, value] : [value, undefined];\n}\n// Validates the specified optional string against the allowed list of keywords.\nexport function maybeKeyword(input, name, allowed) {\n if (input != null)\n return keyword(input, name, allowed);\n}\n// Validates the specified required string against the allowed list of keywords.\nexport function keyword(input, name, allowed) {\n const i = `${input}`.toLowerCase();\n if (!allowed.includes(i))\n throw new Error(`invalid ${name}: ${input}`);\n return i;\n}\n// Promotes the specified data to an array or typed array as needed. If an array\n// type is provided (e.g., Array), then the returned array will strictly be of\n// the specified type; otherwise, any array or typed array may be returned. If\n// the specified data is null or undefined, returns the value as-is.\nexport function arrayify(data, type) {\n return data == null\n ? data\n : type === undefined\n ? data instanceof Array || data instanceof TypedArray\n ? data\n : Array.from(data)\n : data instanceof type\n ? data\n : type.from(data);\n}\n// An optimization of type.from(values, f): if the given values are already an\n// instanceof the desired array type, the faster values.map method is used.\nexport function map(values, f, type = Array) {\n return values instanceof type ? values.map(f) : type.from(values, f);\n}\n// An optimization of type.from(values): if the given values are already an\n// instanceof the desired array type, the faster values.slice method is used.\nexport function slice(values, type = Array) {\n return values instanceof type ? values.slice() : type.from(values);\n}\nexport function isTypedArray(values) {\n return values instanceof TypedArray;\n}\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a primitive value.\nexport function isObject(option) {\n return option?.toString === objectToString;\n}\n// Disambiguates a scale options object (e.g., {color: {type: \"linear\"}}) from\n// some other option (e.g., {color: \"red\"}). When creating standalone legends,\n// this is used to test whether a scale is defined; this should be consistent\n// with inferScaleType when there are no channels associated with the scale, and\n// if this returns true, then normalizeScale must return non-null.\nexport function isScaleOptions(option) {\n return isObject(option) && (option.type !== undefined || option.domain !== undefined);\n}\n// Disambiguates an options object (e.g., {y: \"x2\"}) from a channel value\n// definition expressed as a channel transform (e.g., {transform: …}).\nexport function isOptions(option) {\n return isObject(option) && typeof option.transform !== \"function\";\n}\n// Disambiguates a sort transform (e.g., {sort: \"date\"}) from a channel domain\n// sort definition (e.g., {sort: {y: \"x\"}}).\nexport function isDomainSort(sort) {\n return isOptions(sort) && sort.value === undefined && sort.channel === undefined;\n}\n// For marks specified either as [0, x] or [x1, x2], such as areas and bars.\nexport function maybeZero(x, x1, x2, x3 = identity) {\n if (x1 === undefined && x2 === undefined) {\n // {x} or {}\n (x1 = 0), (x2 = x === undefined ? x3 : x);\n }\n else if (x1 === undefined) {\n // {x, x2} or {x2}\n x1 = x === undefined ? 0 : x;\n }\n else if (x2 === undefined) {\n // {x, x1} or {x1}\n x2 = x === undefined ? 0 : x;\n }\n return [x1, x2];\n}\n// For marks that have x and y channels (e.g., cell, dot, line, text).\nexport function maybeTuple(x, y) {\n return x === undefined && y === undefined ? [first, second] : [x, y];\n}\n// A helper for extracting the z channel, if it is variable. Used by transforms\n// that require series, such as moving average and normalize.\nexport function maybeZ({ z, fill, stroke } = {}) {\n if (z === undefined)\n [z] = maybeColorChannel(fill);\n if (z === undefined)\n [z] = maybeColorChannel(stroke);\n return z;\n}\n// Returns a Uint32Array with elements [0, 1, 2, … data.length - 1].\nexport function range(data) {\n const n = data.length;\n const r = new Uint32Array(n);\n for (let i = 0; i < n; ++i)\n r[i] = i;\n return r;\n}\n// Returns a filtered range of data given the test function.\nexport function where(data, test) {\n return range(data).filter((i) => test(data[i], i, data));\n}\n// Returns an array [values[index[0]], values[index[1]], …].\nexport function take(values, index) {\n return map(index, (i) => values[i]);\n}\n// Based on InternMap (d3.group).\nexport function keyof(value) {\n return value !== null && typeof value === \"object\" ? value.valueOf() : value;\n}\nexport function maybeInput(key, options) {\n if (options[key] !== undefined)\n return options[key];\n switch (key) {\n case \"x1\":\n case \"x2\":\n key = \"x\";\n break;\n case \"y1\":\n case \"y2\":\n key = \"y\";\n break;\n }\n return options[key];\n}\n/** \n * This helper for constructing derived columns returns a [*column*, *setColumn*] array. The *column* object implements *column*.transform, returning whatever value was most recently passed to *setColumn*. If *setColumn* is not called, then *column*.transform returns undefined. If a *source* is specified, then *column*.label exposes the given *source*’s label, if any: if *source* is a string as when representing a named field of data, then *column*.label is *source*; otherwise *column*.label propagates *source*.label. This allows derived columns to propagate a human-readable axis or legend label.\n * \n * Plot.column is typically used by options transforms to define new channels; the associated columns are populated (derived) when the **transform** option function is invoked.\n * \n */\nexport function column(source) {\n // Defines a column whose values are lazily populated by calling the returned\n // setter. If the given source is labeled, the label is propagated to the\n // returned column definition.\n let value;\n return [\n {\n transform: () => value,\n label: labelof(source)\n },\n (v) => (value = v)\n ];\n}\n// Like column, but allows the source to be null.\nexport function maybeColumn(source) {\n return source == null ? [source] : column(source);\n}\nexport function labelof(value, defaultValue) {\n return typeof value === \"string\" ? value : value && value.label !== undefined ? value.label : defaultValue;\n}\n// Assuming that both x1 and x2 and lazy columns (per above), this derives a new\n// a column that’s the average of the two, and which inherits the column label\n// (if any). Both input columns are assumed to be quantitative. If either column\n// is temporal, the returned column is also temporal.\nexport function mid(x1, x2) {\n return {\n transform(data) {\n const X1 = x1.transform(data);\n const X2 = x2.transform(data);\n return isTemporal(X1) || isTemporal(X2)\n ? map(X1, (_, i) => new Date((+X1[i] + +X2[i]) / 2))\n : map(X1, (_, i) => (+X1[i] + +X2[i]) / 2, Float64Array);\n },\n label: x1.label\n };\n}\n// If interval is not nullish, converts interval shorthand such as a number (for\n// multiples) or a time interval name (such as “day”) to a {floor, offset,\n// range} object similar to a D3 time interval.\nexport function maybeInterval(interval, type) {\n if (interval == null)\n return;\n if (typeof interval === \"number\") {\n const n = interval;\n return {\n floor: (d) => n * Math.floor(d / n),\n offset: (d) => d + n,\n range: (lo, hi) => rangei(Math.ceil(lo / n), hi / n).map((x) => n * x)\n };\n }\n if (typeof interval === \"string\")\n return (type === \"time\" ? maybeTimeInterval : maybeUtcInterval)(interval);\n if (typeof interval.floor !== \"function\")\n throw new Error(\"invalid interval; missing floor method\");\n if (typeof interval.offset !== \"function\")\n throw new Error(\"invalid interval; missing offset method\");\n return interval;\n}\n// This distinguishes between per-dimension options and a standalone value.\nexport function maybeValue(value) {\n return value === undefined || isOptions(value) ? value : { value };\n}\n// Coerces the given channel values (if any) to numbers. This is useful when\n// values will be interpolated into other code, such as an SVG transform, and\n// where we don’t wish to allow unexpected behavior for weird input.\nexport function numberChannel(source) {\n return source == null\n ? null\n : {\n transform: (data) => valueof(data, source, Float64Array),\n label: labelof(source)\n };\n}\nexport function isTuples(data) {\n if (!isIterable(data))\n return false;\n for (const d of data) {\n if (d == null)\n continue;\n return typeof d === \"object\" && \"0\" in d && \"1\" in d;\n }\n}\nexport function isIterable(value) {\n return value && typeof value[Symbol.iterator] === \"function\";\n}\nexport function isTextual(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return typeof value !== \"object\" || value instanceof Date;\n }\n}\nexport function isOrdinal(values) {\n for (const value of values) {\n if (value == null)\n continue;\n const type = typeof value;\n return type === \"string\" || type === \"boolean\";\n }\n}\nexport function isTemporal(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return value instanceof Date;\n }\n}\n// Are these strings that might represent dates? This is stricter than ISO 8601\n// because we want to ignore false positives on numbers; for example, the string\n// \"1192\" is more likely to represent a number than a date even though it is\n// valid ISO 8601 representing 1192-01-01.\nexport function isTemporalString(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return typeof value === \"string\" && isNaN(value) && isoParse(value);\n }\n}\n// Are these strings that might represent numbers? This is stricter than\n// coercion because we want to ignore false positives on e.g. empty strings.\nexport function isNumericString(values) {\n for (const value of values) {\n if (value == null)\n continue;\n if (typeof value !== \"string\")\n return false;\n if (!value.trim())\n continue;\n return !isNaN(value);\n }\n}\nexport function isNumeric(values) {\n for (const value of values) {\n if (value == null)\n continue;\n return typeof value === \"number\";\n }\n}\n// Returns true if every non-null value in the specified iterable of values\n// passes the specified predicate, and there is at least one non-null value;\n// returns false if at least one non-null value does not pass the specified\n// predicate; otherwise returns undefined (as if all values are null).\nexport function isEvery(values, is) {\n let every;\n for (const value of values) {\n if (value == null)\n continue;\n if (!is(value))\n return false;\n every = true;\n }\n return every;\n}\n// Mostly relies on d3-color, with a few extra color keywords. Currently this\n// strictly requires that the value be a string; we might want to apply string\n// coercion here, though note that d3-color instances would need to support\n// valueOf to work correctly with InternMap.\n// https://www.w3.org/TR/SVG11/painting.html#SpecifyingPaint\nexport function isColor(value) {\n if (typeof value !== \"string\")\n return false;\n value = value.toLowerCase().trim();\n return (value === \"none\" ||\n value === \"currentcolor\" ||\n (value.startsWith(\"url(\") && value.endsWith(\")\")) || // , e.g. pattern or gradient\n (value.startsWith(\"var(\") && value.endsWith(\")\")) || // CSS variable\n color(value) !== null);\n}\nexport function isNoneish(value) {\n return value == null || isNone(value);\n}\nexport function isNone(value) {\n return /^\\s*none\\s*$/i.test(value);\n}\nexport function isRound(value) {\n return /^\\s*round\\s*$/i.test(value);\n}\nexport function maybeFrameAnchor(value = \"middle\") {\n return keyword(value, \"frameAnchor\", [\n \"middle\",\n \"top-left\",\n \"top\",\n \"top-right\",\n \"right\",\n \"bottom-right\",\n \"bottom\",\n \"bottom-left\",\n \"left\"\n ]);\n}\n// Like a sort comparator, returns a positive value if the given array of values\n// is in ascending order, a negative value if the values are in descending\n// order. Assumes monotonicity; only tests the first and last values.\nexport function orderof(values) {\n if (values == null)\n return;\n const first = values[0];\n const last = values[values.length - 1];\n return descending(first, last);\n}\n// Unlike {...defaults, ...options}, this ensures that any undefined (but\n// present) properties in options inherit the given default value.\nexport function inherit(options = {}, ...rest) {\n let o = options;\n for (const defaults of rest) {\n for (const key in defaults) {\n if (o[key] === undefined) {\n const value = defaults[key];\n if (o === options)\n o = { ...o, [key]: value };\n else\n o[key] = value;\n }\n }\n }\n return o;\n}\n// Given an iterable of named things (objects with a name property), returns a\n// corresponding object with properties associated with the given name.\nexport function Named(things) {\n console.warn(\"named iterables are deprecated; please use an object instead\");\n const names = new Set();\n return Object.fromEntries(Array.from(things, (thing) => {\n const { name } = thing;\n if (name == null)\n throw new Error(\"missing name\");\n const key = `${name}`;\n if (key === \"__proto__\")\n throw new Error(`illegal name: ${key}`);\n if (names.has(key))\n throw new Error(`duplicate name: ${key}`);\n names.add(key);\n return [name, thing];\n }));\n}\nexport function maybeNamed(things) {\n return isIterable(things) ? Named(things) : things;\n}\n","// Positional scales have associated axes, and for ordinal data, a point or band\n// scale is used instead of an ordinal scale.\nexport const position = Symbol(\"position\");\n// Color scales default to the turbo interpolator for quantitative data, and to\n// the Tableau10 scheme for ordinal data. In the future, color scales may also\n// have an associated legend.\nexport const color = Symbol(\"color\");\n// Radius scales default to the sqrt type, have a default range of [0, 3], and a\n// default domain from 0 to the median first quartile of associated channels.\nexport const radius = Symbol(\"radius\");\n// Length scales default to the linear type, have a default range of [0, 12],\n// and a default domain from 0 to the median median of associated channels.\nexport const length = Symbol(\"length\");\n// Opacity scales have a default range of [0, 1], and a default domain from 0 to\n// the maximum value of associated channels.\nexport const opacity = Symbol(\"opacity\");\n// Symbol scales have a default range of d3.symbols.\nexport const symbol = Symbol(\"symbol\");\n// TODO Rather than hard-coding the list of known scale names, collect the names\n// and categories for each plot specification, so that custom marks can register\n// custom scales.\nexport const registry = new Map([\n [\"x\", position],\n [\"y\", position],\n [\"fx\", position],\n [\"fy\", position],\n [\"r\", radius],\n [\"color\", color],\n [\"opacity\", opacity],\n [\"symbol\", symbol],\n [\"length\", length]\n]);\n","import { symbolAsterisk, symbolDiamond2, symbolPlus, symbolSquare2, symbolTriangle2, symbolTimes } from \"d3\";\nimport { symbolCircle, symbolCross, symbolDiamond, symbolSquare, symbolStar, symbolTriangle, symbolWye } from \"d3\";\nexport const sqrt3 = Math.sqrt(3);\nexport const sqrt4_3 = 2 / sqrt3;\nconst symbolHexagon = {\n draw(context, size) {\n const rx = Math.sqrt(size / Math.PI), ry = rx * sqrt4_3, hy = ry / 2;\n context.moveTo(0, ry);\n context.lineTo(rx, hy);\n context.lineTo(rx, -hy);\n context.lineTo(0, -ry);\n context.lineTo(-rx, -hy);\n context.lineTo(-rx, hy);\n context.closePath();\n }\n};\nconst symbols = new Map([\n [\"asterisk\", symbolAsterisk],\n [\"circle\", symbolCircle],\n [\"cross\", symbolCross],\n [\"diamond\", symbolDiamond],\n [\"diamond2\", symbolDiamond2],\n [\"hexagon\", symbolHexagon],\n [\"plus\", symbolPlus],\n [\"square\", symbolSquare],\n [\"square2\", symbolSquare2],\n [\"star\", symbolStar],\n [\"times\", symbolTimes],\n [\"triangle\", symbolTriangle],\n [\"triangle2\", symbolTriangle2],\n [\"wye\", symbolWye]\n]);\nfunction isSymbolObject(value) {\n return value && typeof value.draw === \"function\";\n}\nexport function isSymbol(value) {\n if (isSymbolObject(value))\n return true;\n if (typeof value !== \"string\")\n return false;\n return symbols.has(value.toLowerCase());\n}\nexport function maybeSymbol(symbol) {\n if (symbol == null || isSymbolObject(symbol))\n return symbol;\n const value = symbols.get(`${symbol}`.toLowerCase());\n if (value)\n return value;\n throw new Error(`invalid symbol: ${symbol}`);\n}\nexport function maybeSymbolChannel(symbol) {\n if (symbol == null || isSymbolObject(symbol))\n return [undefined, symbol];\n if (typeof symbol === \"string\") {\n const value = symbols.get(`${symbol}`.toLowerCase());\n if (value)\n return [undefined, value];\n }\n return [symbol, undefined];\n}\n","import { ascending, descending } from \"d3\";\nexport function defined(x) {\n return x != null && !Number.isNaN(x);\n}\nexport function ascendingDefined(a, b) {\n return +defined(b) - +defined(a) || ascending(a, b);\n}\nexport function descendingDefined(a, b) {\n return +defined(b) - +defined(a) || descending(a, b);\n}\nexport function nonempty(x) {\n return x != null && `${x}` !== \"\";\n}\nexport function finite(x) {\n return isFinite(x) ? x : NaN;\n}\nexport function positive(x) {\n return x > 0 && isFinite(x) ? x : NaN;\n}\nexport function negative(x) {\n return x < 0 && isFinite(x) ? x : NaN;\n}\n","import { randomLcg } from \"d3\";\nimport { ascendingDefined, descendingDefined } from \"../defined.js\";\nimport { arrayify, isDomainSort, isOptions, maybeValue, valueof } from \"../options.js\";\n/** \n * Given an *options* object that may specify some basic transforms (*filter*, *sort*, or *reverse*) or a custom *transform* function, composes those transforms if any with the given *transform* function, returning a new *options* object. If a custom *transform* function is present on the given *options*, any basic transforms are ignored. Any additional input *options* are passed through in the returned *options* object. This method facilitates applying the basic transforms prior to applying the given custom *transform* and is used internally by Plot’s built-in transforms.\n * \n */\nexport function basic(options = {}, transform) {\n let { filter: f1, sort: s1, reverse: r1, transform: t1, initializer: i1, ...remainingOptions } = options;\n // If both t1 and t2 are defined, returns a composite transform that first\n // applies t1 and then applies t2.\n if (t1 === undefined) {\n // explicit transform overrides filter, sort, and reverse\n if (f1 != null)\n t1 = filterTransform(f1);\n if (s1 != null && !isDomainSort(s1))\n t1 = composeTransform(t1, sortTransform(s1));\n if (r1)\n t1 = composeTransform(t1, reverseTransform);\n }\n if (transform != null && i1 != null)\n throw new Error(\"transforms cannot be applied after initializers\");\n return {\n ...remainingOptions,\n ...((s1 === null || isDomainSort(s1)) && { sort: s1 }),\n transform: composeTransform(t1, transform)\n };\n}\n/** \n * This helper composes the *initializer* function with any other transforms present in the *options*, and returns a new *options* object.\n * \n */\nexport function initializer(options = {}, initializer) {\n let { filter: f1, sort: s1, reverse: r1, initializer: i1, ...remainingOptions } = options;\n // If both i1 and i2 are defined, returns a composite initializer that first\n // applies i1 and then applies i2.\n if (i1 === undefined) {\n // explicit initializer overrides filter, sort, and reverse\n if (f1 != null)\n i1 = filterTransform(f1);\n if (s1 != null && !isDomainSort(s1))\n i1 = composeInitializer(i1, sortTransform(s1));\n if (r1)\n i1 = composeInitializer(i1, reverseTransform);\n }\n return {\n ...remainingOptions,\n ...((s1 === null || isDomainSort(s1)) && { sort: s1 }),\n initializer: composeInitializer(i1, initializer)\n };\n}\nfunction composeTransform(t1, t2) {\n if (t1 == null)\n return t2 === null ? undefined : t2;\n if (t2 == null)\n return t1 === null ? undefined : t1;\n return function (data, facets) {\n ({ data, facets } = t1.call(this, data, facets));\n return t2.call(this, arrayify(data), facets);\n };\n}\nfunction composeInitializer(i1, i2) {\n if (i1 == null)\n return i2 === null ? undefined : i2;\n if (i2 == null)\n return i1 === null ? undefined : i1;\n return function (data, facets, channels, ...args) {\n let c1, d1, f1, c2, d2, f2;\n ({ data: d1 = data, facets: f1 = facets, channels: c1 } = i1.call(this, data, facets, channels, ...args));\n ({ data: d2 = d1, facets: f2 = f1, channels: c2 } = i2.call(this, d1, f1, { ...channels, ...c1 }, ...args));\n return { data: d2, facets: f2, channels: { ...c1, ...c2 } };\n };\n}\nfunction apply(options, t) {\n return (options.initializer != null ? initializer : basic)(options, t);\n}\n/** \n * ```js\n * Plot.filter(d => d.body_mass_g > 3000, options) // show data whose body mass is greater than 3kg\n * ```\n * \n * Filters the data given the specified *test*. The test can be given as an accessor function (which receives the datum and index), or as a channel value definition such as a field name; truthy values are retained.\n * \n */\nexport function filter(test, options) {\n return apply(options, filterTransform(test));\n}\nfunction filterTransform(value) {\n return (data, facets) => {\n const V = valueof(data, value);\n return { data, facets: facets.map((I) => I.filter((i) => V[i])) };\n };\n}\n/** \n * ```js\n * Plot.reverse(options) // reverse the input order\n * ```\n * \n * Reverses the order of the data.\n * \n */\nexport function reverse(options) {\n return { ...apply(options, reverseTransform), sort: null };\n}\nfunction reverseTransform(data, facets) {\n return { data, facets: facets.map((I) => I.slice().reverse()) };\n}\n/** \n * ```js\n * Plot.shuffle(options) // show data in random order\n * ```\n * \n * Shuffles the data randomly. If a *seed* option is specified, a linear congruential generator with the given seed is used to generate random numbers deterministically; otherwise, Math.random is used.\n * \n */\nexport function shuffle(options = {}) {\n const { seed, ...remainingOptions } = options;\n return { ...apply(remainingOptions, sortValue(seed == null ? Math.random : randomLcg(seed))), sort: null };\n}\n/** \n * ```js\n * Plot.sort(\"body_mass_g\", options) // show data in ascending body mass order\n * ```\n * \n * Sorts the data by the specified *order*, which can be an accessor function, a comparator function, or a channel value definition such as a field name. See also [index sorting](https://github.com/observablehq/plot/blob/main/README.md#sort-options), which allows marks to be sorted by a named channel, such as *r* for radius.\n * \n */\nexport function sort(order, options) {\n return {\n ...(isOptions(order) && order.channel !== undefined ? initializer : apply)(options, sortTransform(order)),\n sort: null\n };\n}\nfunction sortTransform(value) {\n return (typeof value === \"function\" && value.length !== 1 ? sortData : sortValue)(value);\n}\nfunction sortData(compare) {\n return (data, facets) => {\n const compareData = (i, j) => compare(data[i], data[j]);\n return { data, facets: facets.map((I) => I.slice().sort(compareData)) };\n };\n}\nfunction sortValue(value) {\n let channel, order;\n ({ channel, value, order = ascendingDefined } = { ...maybeValue(value) });\n if (typeof order !== \"function\") {\n switch (`${order}`.toLowerCase()) {\n case \"ascending\":\n order = ascendingDefined;\n break;\n case \"descending\":\n order = descendingDefined;\n break;\n default:\n throw new Error(`invalid order: ${order}`);\n }\n }\n return (data, facets, channels) => {\n let V;\n if (channel === undefined) {\n V = valueof(data, value);\n }\n else {\n if (channels === undefined)\n throw new Error(\"channel sort requires an initializer\");\n V = channels[channel];\n if (!V)\n return {}; // ignore missing channel\n V = V.value;\n }\n const compareValue = (i, j) => order(V[i], V[j]);\n return { data, facets: facets.map((I) => I.slice().sort(compareValue)) };\n };\n}\n","import { group as grouper, sort, sum, deviation, min, max, mean, median, mode, variance, InternSet, minIndex, maxIndex, rollup } from \"d3\";\nimport { ascendingDefined } from \"../defined.js\";\nimport { valueof, maybeColorChannel, maybeInput, maybeTuple, maybeColumn, column, first, identity, take, labelof, range, second, percentile, isTemporal, isObject } from \"../options.js\";\nimport { basic } from \"./basic.js\";\n/** \n * ```js\n * Plot.groupZ({x: \"proportion\"}, {fill: \"species\"})\n * ```\n * \n * Groups on the first channel of *z*, *fill*, or *stroke*, if any. If none of *z*, *fill*, or *stroke* are channels, then all data (within each facet) is placed into a single group.\n * \n */\nexport function groupZ(outputs, options) {\n // Group on {z, fill, stroke}.\n return groupn(null, null, outputs, options);\n}\n/** \n * ```js\n * Plot.groupX({y: \"sum\"}, {x: \"species\", y: \"body_mass_g\"})\n * ```\n * \n * Groups on *x* and the first channel of *z*, *fill*, or *stroke*, if any.\n * \n */\nexport function groupX(outputs = { y: \"count\" }, options = {}) {\n // Group on {z, fill, stroke}, then on x.\n const { x = identity } = options;\n if (x == null)\n throw new Error(\"missing channel: x\");\n return groupn(x, null, outputs, options);\n}\n/** \n * ```js\n * Plot.groupY({x: \"sum\"}, {y: \"species\", x: \"body_mass_g\"})\n * ```\n * \n * Groups on *y* and the first channel of *z*, *fill*, or *stroke*, if any.\n * \n */\nexport function groupY(outputs = { x: \"count\" }, options = {}) {\n // Group on {z, fill, stroke}, then on y.\n const { y = identity } = options;\n if (y == null)\n throw new Error(\"missing channel: y\");\n return groupn(null, y, outputs, options);\n}\n/** \n * ```js\n * Plot.group({fill: \"count\"}, {x: \"island\", y: \"species\"})\n * ```\n * \n * Groups on *x*, *y*, and the first channel of *z*, *fill*, or *stroke*, if any.\n * \n */\nexport function group(outputs = { fill: \"count\" }, options = {}) {\n // Group on {z, fill, stroke}, then on x and y.\n let { x, y } = options;\n [x, y] = maybeTuple(x, y);\n if (x == null)\n throw new Error(\"missing channel: x\");\n if (y == null)\n throw new Error(\"missing channel: y\");\n return groupn(x, y, outputs, options);\n}\nfunction groupn(x, // optionally group on x\ny, // optionally group on y\n{ data: reduceData = reduceIdentity, filter, sort, reverse, ...outputs // output channel definitions\n } = {}, inputs = {} // input channels and options\n) {\n // Compute the outputs.\n outputs = maybeOutputs(outputs, inputs);\n reduceData = maybeReduce(reduceData, identity);\n sort = sort == null ? undefined : maybeOutput(\"sort\", sort, inputs);\n filter = filter == null ? undefined : maybeEvaluator(\"filter\", filter, inputs);\n // Produce x and y output channels as appropriate.\n const [GX, setGX] = maybeColumn(x);\n const [GY, setGY] = maybeColumn(y);\n // Greedily materialize the z, fill, and stroke channels (if channels and not\n // constants) so that we can reference them for subdividing groups without\n // computing them more than once.\n const { z, fill, stroke, x1, x2, // consumed if x is an output\n y1, y2, // consumed if y is an output\n ...options } = inputs;\n const [GZ, setGZ] = maybeColumn(z);\n const [vfill] = maybeColorChannel(fill);\n const [vstroke] = maybeColorChannel(stroke);\n const [GF, setGF] = maybeColumn(vfill);\n const [GS, setGS] = maybeColumn(vstroke);\n return {\n ...(\"z\" in inputs && { z: GZ || z }),\n ...(\"fill\" in inputs && { fill: GF || fill }),\n ...(\"stroke\" in inputs && { stroke: GS || stroke }),\n ...basic(options, (data, facets) => {\n const X = valueof(data, x);\n const Y = valueof(data, y);\n const Z = valueof(data, z);\n const F = valueof(data, vfill);\n const S = valueof(data, vstroke);\n const G = maybeSubgroup(outputs, { z: Z, fill: F, stroke: S });\n const groupFacets = [];\n const groupData = [];\n const GX = X && setGX([]);\n const GY = Y && setGY([]);\n const GZ = Z && setGZ([]);\n const GF = F && setGF([]);\n const GS = S && setGS([]);\n let i = 0;\n for (const o of outputs)\n o.initialize(data);\n if (sort)\n sort.initialize(data);\n if (filter)\n filter.initialize(data);\n for (const facet of facets) {\n const groupFacet = [];\n for (const o of outputs)\n o.scope(\"facet\", facet);\n if (sort)\n sort.scope(\"facet\", facet);\n if (filter)\n filter.scope(\"facet\", facet);\n for (const [f, I] of maybeGroup(facet, G)) {\n for (const [y, gg] of maybeGroup(I, Y)) {\n for (const [x, g] of maybeGroup(gg, X)) {\n if (filter && !filter.reduce(g))\n continue;\n groupFacet.push(i++);\n groupData.push(reduceData.reduce(g, data));\n if (X)\n GX.push(x);\n if (Y)\n GY.push(y);\n if (Z)\n GZ.push(G === Z ? f : Z[g[0]]);\n if (F)\n GF.push(G === F ? f : F[g[0]]);\n if (S)\n GS.push(G === S ? f : S[g[0]]);\n for (const o of outputs)\n o.reduce(g);\n if (sort)\n sort.reduce(g);\n }\n }\n }\n groupFacets.push(groupFacet);\n }\n maybeSort(groupFacets, sort, reverse);\n return { data: groupData, facets: groupFacets };\n }),\n ...(!hasOutput(outputs, \"x\") && (GX ? { x: GX } : { x1, x2 })),\n ...(!hasOutput(outputs, \"y\") && (GY ? { y: GY } : { y1, y2 })),\n ...Object.fromEntries(outputs.map(({ name, output }) => [name, output]))\n };\n}\nexport function hasOutput(outputs, ...names) {\n for (const { name } of outputs) {\n if (names.includes(name)) {\n return true;\n }\n }\n return false;\n}\nexport function maybeOutputs(outputs, inputs) {\n const entries = Object.entries(outputs);\n // Propagate standard mark channels by default.\n if (inputs.title != null && outputs.title === undefined)\n entries.push([\"title\", reduceTitle]);\n if (inputs.href != null && outputs.href === undefined)\n entries.push([\"href\", reduceFirst]);\n return entries\n .filter(([, reduce]) => reduce !== undefined)\n .map(([name, reduce]) => {\n return reduce === null ? { name, initialize() { }, scope() { }, reduce() { } } : maybeOutput(name, reduce, inputs);\n });\n}\nexport function maybeOutput(name, reduce, inputs) {\n const evaluator = maybeEvaluator(name, reduce, inputs);\n const [output, setOutput] = column(evaluator.label);\n let O;\n return {\n name,\n output,\n initialize(data) {\n evaluator.initialize(data);\n O = setOutput([]);\n },\n scope(scope, I) {\n evaluator.scope(scope, I);\n },\n reduce(I, extent) {\n O.push(evaluator.reduce(I, extent));\n }\n };\n}\nexport function maybeEvaluator(name, reduce, inputs) {\n const input = maybeInput(name, inputs);\n const reducer = maybeReduce(reduce, input);\n let V, context;\n return {\n label: labelof(reducer === reduceCount ? null : input, reducer.label),\n initialize(data) {\n V = input === undefined ? data : valueof(data, input);\n if (reducer.scope === \"data\") {\n context = reducer.reduce(range(data), V);\n }\n },\n scope(scope, I) {\n if (reducer.scope === scope) {\n context = reducer.reduce(I, V);\n }\n },\n reduce(I, extent) {\n return reducer.scope == null ? reducer.reduce(I, V, extent) : reducer.reduce(I, V, context, extent);\n }\n };\n}\nexport function maybeGroup(I, X) {\n return X\n ? sort(grouper(I, (i) => X[i]), first)\n : [[, I]];\n}\nexport function maybeReduce(reduce, value) {\n if (typeof reduce?.reduce === \"function\" && isObject(reduce))\n return reduce; // N.B. array.reduce\n if (typeof reduce === \"function\")\n return reduceFunction(reduce);\n if (/^p\\d{2}$/i.test(reduce))\n return reduceAccessor(percentile(reduce));\n switch (`${reduce}`.toLowerCase()) {\n case \"first\":\n return reduceFirst;\n case \"last\":\n return reduceLast;\n case \"count\":\n return reduceCount;\n case \"distinct\":\n return reduceDistinct;\n case \"sum\":\n return value == null ? reduceCount : reduceSum;\n case \"proportion\":\n return reduceProportion(value, \"data\");\n case \"proportion-facet\":\n return reduceProportion(value, \"facet\");\n case \"deviation\":\n return reduceAccessor(deviation);\n case \"min\":\n return reduceAccessor(min);\n case \"min-index\":\n return reduceAccessor(minIndex);\n case \"max\":\n return reduceAccessor(max);\n case \"max-index\":\n return reduceAccessor(maxIndex);\n case \"mean\":\n return reduceMaybeTemporalAccessor(mean);\n case \"median\":\n return reduceMaybeTemporalAccessor(median);\n case \"variance\":\n return reduceAccessor(variance);\n case \"mode\":\n return reduceAccessor(mode);\n case \"x\":\n return reduceX;\n case \"x1\":\n return reduceX1;\n case \"x2\":\n return reduceX2;\n case \"y\":\n return reduceY;\n case \"y1\":\n return reduceY1;\n case \"y2\":\n return reduceY2;\n }\n throw new Error(`invalid reduce: ${reduce}`);\n}\nexport function maybeSubgroup(outputs, inputs) {\n for (const name in inputs) {\n const value = inputs[name];\n if (value !== undefined && !outputs.some((o) => o.name === name)) {\n return value;\n }\n }\n}\nexport function maybeSort(facets, sort, reverse) {\n if (sort) {\n const S = sort.output.transform();\n const compare = (i, j) => ascendingDefined(S[i], S[j]);\n facets.forEach((f) => f.sort(compare));\n }\n if (reverse) {\n facets.forEach((f) => f.reverse());\n }\n}\nfunction reduceFunction(f) {\n return {\n reduce(I, X, extent) {\n return f(take(X, I), extent);\n }\n };\n}\nfunction reduceAccessor(f) {\n return {\n reduce(I, X) {\n return f(I, (i) => X[i]);\n }\n };\n}\nfunction reduceMaybeTemporalAccessor(f) {\n return {\n reduce(I, X) {\n const x = f(I, (i) => X[i]);\n return isTemporal(X) ? new Date(x) : x;\n }\n };\n}\nexport const reduceIdentity = {\n reduce(I, X) {\n return take(X, I);\n }\n};\nexport const reduceFirst = {\n reduce(I, X) {\n return X[I[0]];\n }\n};\nconst reduceTitle = {\n reduce(I, X) {\n const n = 5;\n const groups = sort(rollup(I, (V) => V.length, (i) => X[i]), second);\n const top = groups.slice(-n).reverse();\n if (top.length < groups.length) {\n const bottom = groups.slice(0, 1 - n);\n top[n - 1] = [`… ${bottom.length.toLocaleString(\"en-US\")} more`, sum(bottom, second)];\n }\n return top.map(([key, value]) => `${key} (${value.toLocaleString(\"en-US\")})`).join(\"\\n\");\n }\n};\nconst reduceLast = {\n reduce(I, X) {\n return X[I[I.length - 1]];\n }\n};\nexport const reduceCount = {\n label: \"Frequency\",\n reduce(I) {\n return I.length;\n }\n};\nconst reduceDistinct = {\n label: \"Distinct\",\n reduce: (I, X) => {\n const s = new InternSet();\n for (const i of I)\n s.add(X[i]);\n return s.size;\n }\n};\nconst reduceSum = reduceAccessor(sum);\nfunction reduceProportion(value, scope) {\n return value == null\n ? { scope, label: \"Frequency\", reduce: (I, V, basis = 1) => I.length / basis }\n : { scope, reduce: (I, V, basis = 1) => sum(I, (i) => V[i]) / basis };\n}\nfunction mid(x1, x2) {\n const m = (+x1 + +x2) / 2;\n return x1 instanceof Date ? new Date(m) : m;\n}\nconst reduceX = {\n reduce(I, X, { x1, x2 }) {\n return mid(x1, x2);\n }\n};\nconst reduceY = {\n reduce(I, X, { y1, y2 }) {\n return mid(y1, y2);\n }\n};\nconst reduceX1 = {\n reduce(I, X, { x1 }) {\n return x1;\n }\n};\nconst reduceX2 = {\n reduce(I, X, { x2 }) {\n return x2;\n }\n};\nconst reduceY1 = {\n reduce(I, X, { y1 }) {\n return y1;\n }\n};\nconst reduceY2 = {\n reduce(I, X, { y2 }) {\n return y2;\n }\n};\n","import { ascending, descending, rollup, sort } from \"d3\";\nimport { first, isColor, isEvery, isIterable, labelof, map, maybeValue, range, valueof } from \"./options.js\";\nimport { registry } from \"./scales/index.js\";\nimport { isSymbol, maybeSymbol } from \"./symbols.js\";\nimport { maybeReduce } from \"./transforms/group.js\";\n// TODO Type coercion?\nexport function Channel(data, { scale, type, value, filter, hint }, name) {\n return inferChannelScale(name, {\n scale,\n type,\n value: valueof(data, value),\n label: labelof(value),\n filter,\n hint\n });\n}\nexport function Channels(channels, data) {\n return Object.fromEntries(Object.entries(channels).map(([name, channel]) => [name, Channel(data, channel, name)]));\n}\n// TODO Use Float64Array for scales with numeric ranges, e.g. position?\nexport function valueObject(channels, scales) {\n return Object.fromEntries(Object.entries(channels).map(([name, { scale: scaleName, value }]) => {\n const scale = scaleName == null ? null : scales[scaleName];\n return [name, scale == null ? value : map(value, scale)];\n }));\n}\n// If the channel uses the \"auto\" scale (or equivalently true), infer the scale\n// from the channel name and the provided values. For color and symbol channels,\n// no scale is applied if the values are literal; however for symbols, we must\n// promote symbol names (e.g., \"plus\") to symbol implementations (symbolPlus).\n// Note: mutates channel!\nexport function inferChannelScale(name, channel) {\n const { scale, value } = channel;\n if (scale === true || scale === \"auto\") {\n switch (name) {\n case \"fill\":\n case \"stroke\":\n case \"color\":\n channel.scale = isEvery(value, isColor) ? null : \"color\";\n break;\n case \"fillOpacity\":\n case \"strokeOpacity\":\n channel.scale = \"opacity\";\n break;\n case \"symbol\":\n if (isEvery(value, isSymbol)) {\n channel.scale = null;\n channel.value = map(value, maybeSymbol);\n }\n else {\n channel.scale = \"symbol\";\n }\n break;\n default:\n channel.scale = registry.has(name) ? name : null;\n break;\n }\n }\n else if (scale != null && !registry.has(scale)) {\n throw new Error(`unknown scale: ${scale}`);\n }\n return channel;\n}\n// Note: mutates channel.domain! This is set to a function so that it is lazily\n// computed; i.e., if the scale’s domain is set explicitly, that takes priority\n// over the sort option, and we don’t need to do additional work.\nexport function channelDomain(channels, facetChannels, data, options) {\n const { reverse: defaultReverse, reduce: defaultReduce = true, limit: defaultLimit } = options;\n for (const x in options) {\n if (!registry.has(x))\n continue; // ignore unknown scale keys (including generic options)\n let { value: y, reverse = defaultReverse, reduce = defaultReduce, limit = defaultLimit } = maybeValue(options[x]);\n if (reverse === undefined)\n reverse = y === \"width\" || y === \"height\"; // default to descending for lengths\n if (reduce == null || reduce === false)\n continue; // disabled reducer\n const X = findScaleChannel(channels, x) || (facetChannels && findScaleChannel(facetChannels, x));\n if (!X)\n throw new Error(`missing channel for scale: ${x}`);\n const XV = X.value;\n const [lo = 0, hi = Infinity] = isIterable(limit) ? limit : limit < 0 ? [limit] : [0, limit];\n if (y == null) {\n X.domain = () => {\n let domain = XV;\n if (reverse)\n domain = domain.slice().reverse();\n if (lo !== 0 || hi !== Infinity)\n domain = domain.slice(lo, hi);\n return domain;\n };\n }\n else {\n const YV = y === \"data\"\n ? data\n : y === \"height\"\n ? difference(channels, \"y1\", \"y2\")\n : y === \"width\"\n ? difference(channels, \"x1\", \"x2\")\n : values(channels, y, y === \"y\" ? \"y2\" : y === \"x\" ? \"x2\" : undefined);\n const reducer = maybeReduce(reduce === true ? \"max\" : reduce, YV);\n X.domain = () => {\n let domain = rollup(range(XV), (I) => reducer.reduce(I, YV), (i) => XV[i]);\n domain = sort(domain, reverse ? descendingGroup : ascendingGroup);\n if (lo !== 0 || hi !== Infinity)\n domain = domain.slice(lo, hi);\n return domain.map(first);\n };\n }\n }\n}\nfunction findScaleChannel(channels, scale) {\n for (const name in channels) {\n const channel = channels[name];\n if (channel.scale === scale)\n return channel;\n }\n}\nfunction difference(channels, k1, k2) {\n const X1 = values(channels, k1);\n const X2 = values(channels, k2);\n return map(X2, (x2, i) => Math.abs(x2 - X1[i]), Float64Array);\n}\nfunction values(channels, name, alias) {\n let channel = channels[name];\n if (!channel && alias !== undefined)\n channel = channels[alias];\n if (channel)\n return channel.value;\n throw new Error(`missing channel: ${name}`);\n}\nfunction ascendingGroup([ak, av], [bk, bv]) {\n return ascending(av, bv) || ascending(ak, bk);\n}\nfunction descendingGroup([ak, av], [bk, bv]) {\n return descending(av, bv) || ascending(ak, bk);\n}\n","import { interpolateBlues, interpolateBrBG, interpolateBuGn, interpolateBuPu, interpolateGnBu, interpolateGreens, interpolateGreys, interpolateOranges, interpolateOrRd, interpolatePiYG, interpolatePRGn, interpolatePuBu, interpolatePuBuGn, interpolatePuOr, interpolatePuRd, interpolatePurples, interpolateRdBu, interpolateRdGy, interpolateRdPu, interpolateRdYlBu, interpolateRdYlGn, interpolateReds, interpolateSpectral, interpolateYlGn, interpolateYlGnBu, interpolateYlOrBr, interpolateYlOrRd, interpolateTurbo, interpolateViridis, interpolateMagma, interpolateInferno, interpolatePlasma, interpolateCividis, interpolateCubehelixDefault, interpolateWarm, interpolateCool, interpolateRainbow, interpolateSinebow, quantize, schemeAccent, schemeBlues, schemeBrBG, schemeBuGn, schemeBuPu, schemeCategory10, schemeDark2, schemeGnBu, schemeGreens, schemeGreys, schemeOranges, schemeOrRd, schemePaired, schemePastel1, schemePastel2, schemePiYG, schemePRGn, schemePuBu, schemePuBuGn, schemePuOr, schemePuRd, schemePurples, schemeRdBu, schemeRdGy, schemeRdPu, schemeRdYlBu, schemeRdYlGn, schemeReds, schemeSet1, schemeSet2, schemeSet3, schemeSpectral, schemeTableau10, schemeYlGn, schemeYlGnBu, schemeYlOrBr, schemeYlOrRd } from \"d3\";\nconst ordinalSchemes = new Map([\n // categorical\n [\"accent\", schemeAccent],\n [\"category10\", schemeCategory10],\n [\"dark2\", schemeDark2],\n [\"paired\", schemePaired],\n [\"pastel1\", schemePastel1],\n [\"pastel2\", schemePastel2],\n [\"set1\", schemeSet1],\n [\"set2\", schemeSet2],\n [\"set3\", schemeSet3],\n [\"tableau10\", schemeTableau10],\n // diverging\n [\"brbg\", scheme11(schemeBrBG, interpolateBrBG)],\n [\"prgn\", scheme11(schemePRGn, interpolatePRGn)],\n [\"piyg\", scheme11(schemePiYG, interpolatePiYG)],\n [\"puor\", scheme11(schemePuOr, interpolatePuOr)],\n [\"rdbu\", scheme11(schemeRdBu, interpolateRdBu)],\n [\"rdgy\", scheme11(schemeRdGy, interpolateRdGy)],\n [\"rdylbu\", scheme11(schemeRdYlBu, interpolateRdYlBu)],\n [\"rdylgn\", scheme11(schemeRdYlGn, interpolateRdYlGn)],\n [\"spectral\", scheme11(schemeSpectral, interpolateSpectral)],\n // reversed diverging (for temperature data)\n [\"burd\", scheme11r(schemeRdBu, interpolateRdBu)],\n [\"buylrd\", scheme11r(schemeRdYlBu, interpolateRdYlBu)],\n // sequential (single-hue)\n [\"blues\", scheme9(schemeBlues, interpolateBlues)],\n [\"greens\", scheme9(schemeGreens, interpolateGreens)],\n [\"greys\", scheme9(schemeGreys, interpolateGreys)],\n [\"oranges\", scheme9(schemeOranges, interpolateOranges)],\n [\"purples\", scheme9(schemePurples, interpolatePurples)],\n [\"reds\", scheme9(schemeReds, interpolateReds)],\n // sequential (multi-hue)\n [\"turbo\", schemei(interpolateTurbo)],\n [\"viridis\", schemei(interpolateViridis)],\n [\"magma\", schemei(interpolateMagma)],\n [\"inferno\", schemei(interpolateInferno)],\n [\"plasma\", schemei(interpolatePlasma)],\n [\"cividis\", schemei(interpolateCividis)],\n [\"cubehelix\", schemei(interpolateCubehelixDefault)],\n [\"warm\", schemei(interpolateWarm)],\n [\"cool\", schemei(interpolateCool)],\n [\"bugn\", scheme9(schemeBuGn, interpolateBuGn)],\n [\"bupu\", scheme9(schemeBuPu, interpolateBuPu)],\n [\"gnbu\", scheme9(schemeGnBu, interpolateGnBu)],\n [\"orrd\", scheme9(schemeOrRd, interpolateOrRd)],\n [\"pubu\", scheme9(schemePuBu, interpolatePuBu)],\n [\"pubugn\", scheme9(schemePuBuGn, interpolatePuBuGn)],\n [\"purd\", scheme9(schemePuRd, interpolatePuRd)],\n [\"rdpu\", scheme9(schemeRdPu, interpolateRdPu)],\n [\"ylgn\", scheme9(schemeYlGn, interpolateYlGn)],\n [\"ylgnbu\", scheme9(schemeYlGnBu, interpolateYlGnBu)],\n [\"ylorbr\", scheme9(schemeYlOrBr, interpolateYlOrBr)],\n [\"ylorrd\", scheme9(schemeYlOrRd, interpolateYlOrRd)],\n // cyclical\n [\"rainbow\", schemeicyclical(interpolateRainbow)],\n [\"sinebow\", schemeicyclical(interpolateSinebow)]\n]);\nfunction scheme9(scheme, interpolate) {\n return ({ length: n }) => {\n if (n === 1)\n return [scheme[3][1]]; // favor midpoint\n if (n === 2)\n return [scheme[3][1], scheme[3][2]]; // favor darker\n n = Math.max(3, Math.floor(n));\n return n > 9 ? quantize(interpolate, n) : scheme[n];\n };\n}\nfunction scheme11(scheme, interpolate) {\n return ({ length: n }) => {\n if (n === 2)\n return [scheme[3][0], scheme[3][2]]; // favor diverging extrema\n n = Math.max(3, Math.floor(n));\n return n > 11 ? quantize(interpolate, n) : scheme[n];\n };\n}\nfunction scheme11r(scheme, interpolate) {\n return ({ length: n }) => {\n if (n === 2)\n return [scheme[3][2], scheme[3][0]]; // favor diverging extrema\n n = Math.max(3, Math.floor(n));\n return n > 11 ? quantize((t) => interpolate(1 - t), n) : scheme[n].slice().reverse();\n };\n}\nfunction schemei(interpolate) {\n return ({ length: n }) => quantize(interpolate, Math.max(2, Math.floor(n)));\n}\nfunction schemeicyclical(interpolate) {\n return ({ length: n }) => quantize(interpolate, Math.floor(n) + 1).slice(0, -1);\n}\nexport function ordinalScheme(scheme) {\n const s = `${scheme}`.toLowerCase();\n if (!ordinalSchemes.has(s))\n throw new Error(`unknown ordinal scheme: ${s}`);\n return ordinalSchemes.get(s);\n}\nexport function ordinalRange(scheme, length) {\n const s = ordinalScheme(scheme);\n const r = typeof s === \"function\" ? s({ length }) : s;\n return r.length !== length ? r.slice(0, length) : r;\n}\n// If the specified domain contains only booleans (ignoring null and undefined),\n// returns a corresponding range where false is mapped to the low color and true\n// is mapped to the high color of the specified scheme.\nexport function maybeBooleanRange(domain, scheme = \"greys\") {\n const range = new Set();\n const [f, t] = ordinalRange(scheme, 2);\n for (const value of domain) {\n if (value == null)\n continue;\n if (value === true)\n range.add(t);\n else if (value === false)\n range.add(f);\n else\n return;\n }\n return [...range];\n}\nconst quantitativeSchemes = new Map([\n // diverging\n [\"brbg\", interpolateBrBG],\n [\"prgn\", interpolatePRGn],\n [\"piyg\", interpolatePiYG],\n [\"puor\", interpolatePuOr],\n [\"rdbu\", interpolateRdBu],\n [\"rdgy\", interpolateRdGy],\n [\"rdylbu\", interpolateRdYlBu],\n [\"rdylgn\", interpolateRdYlGn],\n [\"spectral\", interpolateSpectral],\n // reversed diverging (for temperature data)\n [\"burd\", (t) => interpolateRdBu(1 - t)],\n [\"buylrd\", (t) => interpolateRdYlBu(1 - t)],\n // sequential (single-hue)\n [\"blues\", interpolateBlues],\n [\"greens\", interpolateGreens],\n [\"greys\", interpolateGreys],\n [\"purples\", interpolatePurples],\n [\"reds\", interpolateReds],\n [\"oranges\", interpolateOranges],\n // sequential (multi-hue)\n [\"turbo\", interpolateTurbo],\n [\"viridis\", interpolateViridis],\n [\"magma\", interpolateMagma],\n [\"inferno\", interpolateInferno],\n [\"plasma\", interpolatePlasma],\n [\"cividis\", interpolateCividis],\n [\"cubehelix\", interpolateCubehelixDefault],\n [\"warm\", interpolateWarm],\n [\"cool\", interpolateCool],\n [\"bugn\", interpolateBuGn],\n [\"bupu\", interpolateBuPu],\n [\"gnbu\", interpolateGnBu],\n [\"orrd\", interpolateOrRd],\n [\"pubugn\", interpolatePuBuGn],\n [\"pubu\", interpolatePuBu],\n [\"purd\", interpolatePuRd],\n [\"rdpu\", interpolateRdPu],\n [\"ylgnbu\", interpolateYlGnBu],\n [\"ylgn\", interpolateYlGn],\n [\"ylorbr\", interpolateYlOrBr],\n [\"ylorrd\", interpolateYlOrRd],\n // cyclical\n [\"rainbow\", interpolateRainbow],\n [\"sinebow\", interpolateSinebow]\n]);\nexport function quantitativeScheme(scheme) {\n const s = `${scheme}`.toLowerCase();\n if (!quantitativeSchemes.has(s))\n throw new Error(`unknown quantitative scheme: ${s}`);\n return quantitativeSchemes.get(s);\n}\nconst divergingSchemes = new Set([\n \"brbg\",\n \"prgn\",\n \"piyg\",\n \"puor\",\n \"rdbu\",\n \"rdgy\",\n \"rdylbu\",\n \"rdylgn\",\n \"spectral\",\n \"burd\",\n \"buylrd\"\n]);\nexport function isDivergingScheme(scheme) {\n return scheme != null && divergingSchemes.has(`${scheme}`.toLowerCase());\n}\n","import { descending, extent, interpolateHcl, interpolateHsl, interpolateLab, interpolateNumber, interpolateRgb, interpolateRound, min, max, median, quantile, quantize, reverse as reverseof, scaleLinear, scaleLog, scalePow, scaleQuantile, scaleSymlog, scaleThreshold, scaleIdentity, ticks } from \"d3\";\nimport { positive, negative, finite } from \"../defined.js\";\nimport { arrayify, constant, orderof, slice, maybeInterval } from \"../options.js\";\nimport { ordinalRange, quantitativeScheme } from \"./schemes.js\";\nimport { registry, radius, opacity, color, length } from \"./index.js\";\nexport const flip = (i) => (t) => i(1 - t);\nconst unit = [0, 1];\nconst interpolators = new Map([\n // numbers\n [\"number\", interpolateNumber],\n // color spaces\n [\"rgb\", interpolateRgb],\n [\"hsl\", interpolateHsl],\n [\"hcl\", interpolateHcl],\n [\"lab\", interpolateLab]\n]);\nexport function Interpolator(interpolate) {\n const i = `${interpolate}`.toLowerCase();\n if (!interpolators.has(i))\n throw new Error(`unknown interpolator: ${i}`);\n return interpolators.get(i);\n}\nexport function ScaleQ(key, scale, channels, { type, nice, clamp, zero, domain = inferAutoDomain(key, channels), unknown, round, scheme, interval, range = registry.get(key) === radius\n ? inferRadialRange(channels, domain)\n : registry.get(key) === length\n ? inferLengthRange(channels, domain)\n : registry.get(key) === opacity\n ? unit\n : undefined, interpolate = registry.get(key) === color\n ? scheme == null && range !== undefined\n ? interpolateRgb\n : quantitativeScheme(scheme !== undefined ? scheme : type === \"cyclical\" ? \"rainbow\" : \"turbo\")\n : round\n ? interpolateRound\n : interpolateNumber, reverse }) {\n interval = maybeInterval(interval, type);\n if (type === \"cyclical\" || type === \"sequential\")\n type = \"linear\"; // shorthand for color schemes\n reverse = !!reverse;\n // Sometimes interpolate is a named interpolator, such as \"lab\" for Lab color\n // space. Other times interpolate is a function that takes two arguments and\n // is used in conjunction with the range. And other times the interpolate\n // function is a “fixed” interpolator on the [0, 1] interval, as when a\n // color scheme such as interpolateRdBu is used.\n if (typeof interpolate !== \"function\") {\n interpolate = Interpolator(interpolate);\n }\n if (interpolate.length === 1) {\n if (reverse) {\n interpolate = flip(interpolate);\n reverse = false;\n }\n if (range === undefined) {\n range = Float64Array.from(domain, (_, i) => i / (domain.length - 1));\n if (range.length === 2)\n range = unit; // optimize common case of [0, 1]\n }\n scale.interpolate((range === unit ? constant : interpolatePiecewise)(interpolate));\n }\n else {\n scale.interpolate(interpolate);\n }\n // If a zero option is specified, we assume that the domain is numeric, and we\n // want to ensure that the domain crosses zero. However, note that the domain\n // may be reversed (descending) so we shouldn’t assume that the first value is\n // smaller than the last; and also it’s possible that the domain has more than\n // two values for a “poly” scale. And lastly be careful not to mutate input!\n if (zero) {\n const [min, max] = extent(domain);\n if (min > 0 || max < 0) {\n domain = slice(domain);\n if (orderof(domain) !== Math.sign(min))\n domain[domain.length - 1] = 0;\n // [2, 1] or [-2, -1]\n else\n domain[0] = 0; // [1, 2] or [-1, -2]\n }\n }\n if (reverse)\n domain = reverseof(domain);\n scale.domain(domain).unknown(unknown);\n if (nice)\n scale.nice(nice === true ? undefined : nice), (domain = scale.domain());\n if (range !== undefined)\n scale.range(range);\n if (clamp)\n scale.clamp(clamp);\n return { type, domain, range, scale, interpolate, interval };\n}\nexport function ScaleLinear(key, channels, options) {\n return ScaleQ(key, scaleLinear(), channels, options);\n}\nexport function ScaleSqrt(key, channels, options) {\n return ScalePow(key, channels, { ...options, exponent: 0.5 });\n}\nexport function ScalePow(key, channels, { exponent = 1, ...options }) {\n return ScaleQ(key, scalePow().exponent(exponent), channels, { ...options, type: \"pow\" });\n}\nexport function ScaleLog(key, channels, { base = 10, domain = inferLogDomain(channels), ...options }) {\n return ScaleQ(key, scaleLog().base(base), channels, { ...options, domain });\n}\nexport function ScaleSymlog(key, channels, { constant = 1, ...options }) {\n return ScaleQ(key, scaleSymlog().constant(constant), channels, options);\n}\nexport function ScaleQuantile(key, channels, { range, quantiles = range === undefined ? 5 : (range = [...range]).length, // deprecated; use n instead\nn = quantiles, scheme = \"rdylbu\", domain = inferQuantileDomain(channels), interpolate, reverse }) {\n if (range === undefined) {\n range =\n interpolate !== undefined\n ? quantize(interpolate, n)\n : registry.get(key) === color\n ? ordinalRange(scheme, n)\n : undefined;\n }\n if (domain.length > 0) {\n domain = scaleQuantile(domain, range === undefined ? { length: n } : range).quantiles();\n }\n return ScaleThreshold(key, channels, { domain, range, reverse });\n}\nexport function ScaleQuantize(key, channels, { range, n = range === undefined ? 5 : (range = [...range]).length, scheme = \"rdylbu\", domain = inferAutoDomain(key, channels), unknown, interpolate, reverse }) {\n const [min, max] = extent(domain);\n let thresholds;\n if (range === undefined) {\n thresholds = ticks(min, max, n); // approximate number of nice, round thresholds\n if (thresholds[0] <= min)\n thresholds.splice(0, 1); // drop exact lower bound\n if (thresholds[thresholds.length - 1] >= max)\n thresholds.pop(); // drop exact upper bound\n n = thresholds.length + 1;\n range =\n interpolate !== undefined\n ? quantize(interpolate, n)\n : registry.get(key) === color\n ? ordinalRange(scheme, n)\n : undefined;\n }\n else {\n thresholds = quantize(interpolateNumber(min, max), n + 1).slice(1, -1); // exactly n - 1 thresholds to match range\n if (min instanceof Date)\n thresholds = thresholds.map((x) => new Date(x)); // preserve date types\n }\n if (orderof(arrayify(domain)) < 0)\n thresholds.reverse(); // preserve descending domain\n return ScaleThreshold(key, channels, { domain: thresholds, range, reverse, unknown });\n}\nexport function ScaleThreshold(key, channels, { domain = [0], // explicit thresholds in ascending order\nunknown, scheme = \"rdylbu\", interpolate, range = interpolate !== undefined\n ? quantize(interpolate, domain.length + 1)\n : registry.get(key) === color\n ? ordinalRange(scheme, domain.length + 1)\n : undefined, reverse }) {\n domain = arrayify(domain);\n const sign = orderof(domain); // preserve descending domain\n if (!isOrdered(domain, sign))\n throw new Error(`the ${key} scale has a non-monotonic domain`);\n if (reverse)\n range = reverseof(range); // domain ascending, so reverse range\n return {\n type: \"threshold\",\n scale: scaleThreshold(sign < 0 ? reverseof(domain) : domain, range === undefined ? [] : range).unknown(unknown),\n domain,\n range\n };\n}\nfunction isOrdered(domain, sign) {\n for (let i = 1, n = domain.length, d = domain[0]; i < n; ++i) {\n const s = descending(d, (d = domain[i]));\n if (s !== 0 && s !== sign)\n return false;\n }\n return true;\n}\nexport function ScaleIdentity() {\n return { type: \"identity\", scale: scaleIdentity() };\n}\nexport function inferDomain(channels, f = finite) {\n return channels.length\n ? [\n min(channels, ({ value }) => (value === undefined ? value : min(value, f))),\n max(channels, ({ value }) => (value === undefined ? value : max(value, f)))\n ]\n : [0, 1];\n}\nfunction inferAutoDomain(key, channels) {\n const type = registry.get(key);\n return (type === radius || type === opacity || type === length ? inferZeroDomain : inferDomain)(channels);\n}\nfunction inferZeroDomain(channels) {\n return [0, channels.length ? max(channels, ({ value }) => (value === undefined ? value : max(value, finite))) : 1];\n}\n// We don’t want the upper bound of the radial domain to be zero, as this would\n// be degenerate, so we ignore nonpositive values. We also don’t want the\n// maximum default radius to exceed 30px.\nfunction inferRadialRange(channels, domain) {\n const hint = channels.find(({ radius }) => radius !== undefined);\n if (hint !== undefined)\n return [0, hint.radius]; // a natural maximum radius, e.g. hexbins\n const h25 = quantile(channels, 0.5, ({ value }) => (value === undefined ? NaN : quantile(value, 0.25, positive)));\n const range = domain.map((d) => 3 * Math.sqrt(d / h25));\n const k = 30 / max(range);\n return k < 1 ? range.map((r) => r * k) : range;\n}\n// We want a length scale’s domain to go from zero to a positive value, and to\n// treat negative lengths if any as inverted vectors of equivalent magnitude. We\n// also don’t want the maximum default length to exceed 60px.\nfunction inferLengthRange(channels, domain) {\n const h50 = median(channels, ({ value }) => (value === undefined ? NaN : median(value, Math.abs)));\n const range = domain.map((d) => (12 * d) / h50);\n const k = 60 / max(range);\n return k < 1 ? range.map((r) => r * k) : range;\n}\nfunction inferLogDomain(channels) {\n for (const { value } of channels) {\n if (value !== undefined) {\n for (let v of value) {\n if (v > 0)\n return inferDomain(channels, positive);\n if (v < 0)\n return inferDomain(channels, negative);\n }\n }\n }\n return [1, 10];\n}\nfunction inferQuantileDomain(channels) {\n const domain = [];\n for (const { value } of channels) {\n if (value === undefined)\n continue;\n for (const v of value)\n domain.push(v);\n }\n return domain;\n}\nexport function interpolatePiecewise(interpolate) {\n return (i, j) => (t) => interpolate(i + t * (j - i));\n}\n","import { descending, interpolateNumber, interpolateRgb, piecewise, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSymlog } from \"d3\";\nimport { positive, negative } from \"../defined.js\";\nimport { quantitativeScheme } from \"./schemes.js\";\nimport { registry, color } from \"./index.js\";\nimport { inferDomain, Interpolator, flip, interpolatePiecewise } from \"./quantitative.js\";\nfunction ScaleD(key, scale, transform, channels, { type, nice, clamp, domain = inferDomain(channels), unknown, pivot = 0, scheme, range, symmetric = true, interpolate = registry.get(key) === color\n ? scheme == null && range !== undefined\n ? interpolateRgb\n : quantitativeScheme(scheme !== undefined ? scheme : \"rdbu\")\n : interpolateNumber, reverse }) {\n pivot = +pivot;\n let [min, max] = domain;\n if (descending(min, max) < 0)\n ([min, max] = [max, min]), (reverse = !reverse);\n min = Math.min(min, pivot);\n max = Math.max(max, pivot);\n // Sometimes interpolate is a named interpolator, such as \"lab\" for Lab color\n // space. Other times interpolate is a function that takes two arguments and\n // is used in conjunction with the range. And other times the interpolate\n // function is a “fixed” interpolator on the [0, 1] interval, as when a\n // color scheme such as interpolateRdBu is used.\n if (typeof interpolate !== \"function\") {\n interpolate = Interpolator(interpolate);\n }\n // If an explicit range is specified, promote it to a piecewise interpolator.\n if (range !== undefined) {\n interpolate =\n interpolate.length === 1 ? interpolatePiecewise(interpolate)(...range) : piecewise(interpolate, range);\n }\n // Reverse before normalization.\n if (reverse)\n interpolate = flip(interpolate);\n // Normalize the interpolator for symmetric difference around the pivot.\n if (symmetric) {\n const mid = transform.apply(pivot);\n const mindelta = mid - transform.apply(min);\n const maxdelta = transform.apply(max) - mid;\n if (mindelta < maxdelta)\n min = transform.invert(mid - maxdelta);\n else if (mindelta > maxdelta)\n max = transform.invert(mid + mindelta);\n }\n scale.domain([min, pivot, max]).unknown(unknown).interpolator(interpolate);\n if (clamp)\n scale.clamp(clamp);\n if (nice)\n scale.nice(nice);\n return { type, domain: [min, max], pivot, interpolate, scale };\n}\nexport function ScaleDiverging(key, channels, options) {\n return ScaleD(key, scaleDiverging(), transformIdentity, channels, options);\n}\nexport function ScaleDivergingSqrt(key, channels, options) {\n return ScaleDivergingPow(key, channels, { ...options, exponent: 0.5 });\n}\nexport function ScaleDivergingPow(key, channels, { exponent = 1, ...options }) {\n return ScaleD(key, scaleDivergingPow().exponent((exponent = +exponent)), transformPow(exponent), channels, {\n ...options,\n type: \"diverging-pow\"\n });\n}\nexport function ScaleDivergingLog(key, channels, { base = 10, pivot = 1, domain = inferDomain(channels, pivot < 0 ? negative : positive), ...options }) {\n return ScaleD(key, scaleDivergingLog().base((base = +base)), transformLog, channels, { domain, pivot, ...options });\n}\nexport function ScaleDivergingSymlog(key, channels, { constant = 1, ...options }) {\n return ScaleD(key, scaleDivergingSymlog().constant((constant = +constant)), transformSymlog(constant), channels, options);\n}\nconst transformIdentity = {\n apply(x) {\n return x;\n },\n invert(x) {\n return x;\n }\n};\nconst transformLog = {\n apply: Math.log,\n invert: Math.exp\n};\nconst transformSqrt = {\n apply(x) {\n return Math.sign(x) * Math.sqrt(Math.abs(x));\n },\n invert(x) {\n return Math.sign(x) * (x * x);\n }\n};\nfunction transformPow(exponent) {\n return exponent === 0.5\n ? transformSqrt\n : {\n apply(x) {\n return Math.sign(x) * Math.pow(Math.abs(x), exponent);\n },\n invert(x) {\n return Math.sign(x) * Math.pow(Math.abs(x), 1 / exponent);\n }\n };\n}\nfunction transformSymlog(constant) {\n return {\n apply(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / constant));\n },\n invert(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * constant;\n }\n };\n}\n","import { scaleTime, scaleUtc } from \"d3\";\nimport { ScaleQ } from \"./quantitative.js\";\nfunction ScaleT(key, scale, channels, options) {\n return ScaleQ(key, scale, channels, options);\n}\nexport function ScaleTime(key, channels, options) {\n return ScaleT(key, scaleTime(), channels, options);\n}\nexport function ScaleUtc(key, channels, options) {\n return ScaleT(key, scaleUtc(), channels, options);\n}\n","import { InternSet, extent, quantize, reverse as reverseof, sort, symbolsFill, symbolsStroke } from \"d3\";\nimport { scaleBand, scaleOrdinal, scalePoint, scaleImplicit } from \"d3\";\nimport { ascendingDefined } from \"../defined.js\";\nimport { isNoneish, map, maybeInterval } from \"../options.js\";\nimport { maybeSymbol } from \"../symbols.js\";\nimport { registry, color, position, symbol } from \"./index.js\";\nimport { maybeBooleanRange, ordinalScheme, quantitativeScheme } from \"./schemes.js\";\n// This denotes an implicitly ordinal color scale: the scale type was not set,\n// but the associated values are strings or booleans. If the associated defined\n// values are entirely boolean, the range will default to greys. You can opt out\n// of this by setting the type explicitly.\nexport const ordinalImplicit = Symbol(\"ordinal\");\nfunction ScaleO(key, scale, channels, { type, interval, domain, range, reverse, hint }) {\n interval = maybeInterval(interval, type);\n if (domain === undefined)\n domain = inferDomain(channels, interval, key);\n if (type === \"categorical\" || type === ordinalImplicit)\n type = \"ordinal\"; // shorthand for color schemes\n if (reverse)\n domain = reverseof(domain);\n scale.domain(domain);\n if (range !== undefined) {\n // If the range is specified as a function, pass it the domain.\n if (typeof range === \"function\")\n range = range(domain);\n scale.range(range);\n }\n return { type, domain, range, scale, hint, interval };\n}\nexport function ScaleOrdinal(key, channels, { type, interval, domain, range, scheme, unknown, ...options }) {\n interval = maybeInterval(interval, type);\n if (domain === undefined)\n domain = inferDomain(channels, interval, key);\n let hint;\n if (registry.get(key) === symbol) {\n hint = inferSymbolHint(channels);\n range = range === undefined ? inferSymbolRange(hint) : map(range, maybeSymbol);\n }\n else if (registry.get(key) === color) {\n if (range === undefined && (type === \"ordinal\" || type === ordinalImplicit)) {\n range = maybeBooleanRange(domain, scheme);\n if (range !== undefined)\n scheme = undefined; // Don’t re-apply scheme.\n }\n if (scheme === undefined && range === undefined) {\n scheme = type === \"ordinal\" ? \"turbo\" : \"tableau10\";\n }\n if (scheme !== undefined) {\n if (range !== undefined) {\n const interpolate = quantitativeScheme(scheme);\n const t0 = range[0], d = range[1] - range[0];\n range = ({ length: n }) => quantize((t) => interpolate(t0 + d * t), n);\n }\n else {\n range = ordinalScheme(scheme);\n }\n }\n }\n if (unknown === scaleImplicit) {\n throw new Error(`implicit unknown on ${key} scale is not supported`);\n }\n return ScaleO(key, scaleOrdinal().unknown(unknown), channels, { ...options, type, domain, range, hint });\n}\nexport function ScalePoint(key, channels, { align = 0.5, padding = 0.5, ...options }) {\n return maybeRound(scalePoint().align(align).padding(padding), channels, options, key);\n}\nexport function ScaleBand(key, channels, { align = 0.5, padding = 0.1, paddingInner = padding, paddingOuter = key === \"fx\" || key === \"fy\" ? 0 : padding, ...options }) {\n return maybeRound(scaleBand().align(align).paddingInner(paddingInner).paddingOuter(paddingOuter), channels, options, key);\n}\nfunction maybeRound(scale, channels, options, key) {\n let { round } = options;\n if (round !== undefined)\n scale.round((round = !!round));\n scale = ScaleO(key, scale, channels, options);\n scale.round = round; // preserve for autoScaleRound\n return scale;\n}\nfunction inferDomain(channels, interval, key) {\n const values = new InternSet();\n for (const { value, domain } of channels) {\n if (domain !== undefined)\n return domain(); // see channelDomain\n if (value === undefined)\n continue;\n for (const v of value)\n values.add(v);\n }\n if (interval !== undefined) {\n const [min, max] = extent(values).map(interval.floor, interval);\n return interval.range(min, interval.offset(max));\n }\n if (values.size > 10e3 && registry.get(key) === position) {\n throw new Error(`implicit ordinal domain of ${key} scale has more than 10,000 values`);\n }\n return sort(values, ascendingDefined);\n}\n// If all channels provide a consistent hint, propagate it to the scale.\nfunction inferHint(channels, key) {\n let value;\n for (const { hint } of channels) {\n const candidate = hint?.[key];\n if (candidate === undefined)\n continue; // no hint here\n if (value === undefined)\n value = candidate;\n // first hint\n else if (value !== candidate)\n return; // inconsistent hint\n }\n return value;\n}\nfunction inferSymbolHint(channels) {\n return {\n fill: inferHint(channels, \"fill\"),\n stroke: inferHint(channels, \"stroke\")\n };\n}\nfunction inferSymbolRange(hint) {\n return isNoneish(hint.fill) ? symbolsStroke : symbolsFill;\n}\n","let warnings = 0;\nexport function consumeWarnings() {\n const w = warnings;\n warnings = 0;\n return w;\n}\nexport function warn(message) {\n console.warn(message);\n ++warnings;\n}\n","import { parse as isoParse } from \"isoformat\";\nimport { isOrdinal, isTemporal, isTemporalString, isNumericString, isScaleOptions, isTypedArray, map, slice } from \"./options.js\";\nimport { registry, color, position, radius, opacity, symbol, length } from \"./scales/index.js\";\nimport { ScaleLinear, ScaleSqrt, ScalePow, ScaleLog, ScaleSymlog, ScaleQuantile, ScaleQuantize, ScaleThreshold, ScaleIdentity } from \"./scales/quantitative.js\";\nimport { ScaleDiverging, ScaleDivergingSqrt, ScaleDivergingPow, ScaleDivergingLog, ScaleDivergingSymlog } from \"./scales/diverging.js\";\nimport { isDivergingScheme } from \"./scales/schemes.js\";\nimport { ScaleTime, ScaleUtc } from \"./scales/temporal.js\";\nimport { ScaleOrdinal, ScalePoint, ScaleBand, ordinalImplicit } from \"./scales/ordinal.js\";\nimport { maybeSymbol } from \"./symbols.js\";\nimport { warn } from \"./warnings.js\";\nexport function Scales(channelsByScale, { label: globalLabel, inset: globalInset = 0, insetTop: globalInsetTop = globalInset, insetRight: globalInsetRight = globalInset, insetBottom: globalInsetBottom = globalInset, insetLeft: globalInsetLeft = globalInset, round, nice, clamp, zero, align, padding, projection, facet: { label: facetLabel = globalLabel } = {}, ...options } = {}) {\n const scales = {};\n for (const [key, channels] of channelsByScale) {\n const scaleOptions = options[key];\n const scale = Scale(key, channels, {\n round: registry.get(key) === position ? round : undefined,\n nice,\n clamp,\n zero,\n align,\n padding,\n projection,\n ...scaleOptions\n });\n if (scale) {\n // populate generic scale options (percent, transform, insets)\n let { label = key === \"fx\" || key === \"fy\" ? facetLabel : globalLabel, percent, transform, inset, insetTop = inset !== undefined ? inset : key === \"y\" ? globalInsetTop : 0, // not fy\n insetRight = inset !== undefined ? inset : key === \"x\" ? globalInsetRight : 0, // not fx\n insetBottom = inset !== undefined ? inset : key === \"y\" ? globalInsetBottom : 0, // not fy\n insetLeft = inset !== undefined ? inset : key === \"x\" ? globalInsetLeft : 0 // not fx\n } = scaleOptions || {};\n if (transform == null)\n transform = undefined;\n else if (typeof transform !== \"function\")\n throw new Error(\"invalid scale transform; not a function\");\n scale.percent = !!percent;\n scale.label = label === undefined ? inferScaleLabel(channels, scale) : label;\n scale.transform = transform;\n if (key === \"x\" || key === \"fx\") {\n scale.insetLeft = +insetLeft;\n scale.insetRight = +insetRight;\n }\n else if (key === \"y\" || key === \"fy\") {\n scale.insetTop = +insetTop;\n scale.insetBottom = +insetBottom;\n }\n scales[key] = scale;\n }\n }\n return scales;\n}\nexport function ScaleFunctions(scales) {\n return Object.fromEntries(Object.entries(scales)\n .filter(([, { scale }]) => scale) // drop identity scales\n .map(([name, { scale, type, interval, label }]) => {\n scale.type = type; // for axis\n if (interval != null)\n scale.interval = interval; // for axis\n if (label != null)\n scale.label = label; // for axis\n return [name, scale];\n }));\n}\n// Mutates scale.range!\nexport function autoScaleRange(scales, dimensions) {\n const { x, y, fx, fy } = scales;\n const superdimensions = fx || fy ? outerDimensions(dimensions) : dimensions;\n if (fx)\n autoScaleRangeX(fx, superdimensions);\n if (fy)\n autoScaleRangeY(fy, superdimensions);\n const subdimensions = fx || fy ? innerDimensions(scales, dimensions) : dimensions;\n if (x)\n autoScaleRangeX(x, subdimensions);\n if (y)\n autoScaleRangeY(y, subdimensions);\n}\n// Channels can have labels; if all the channels for a given scale are\n// consistently labeled (i.e., have the same value if not undefined), and the\n// corresponding scale doesn’t already have an explicit label, then the\n// channels’ label is promoted to the scale. This inferred label should have an\n// orientation-appropriate arrow added when used as an axis, but we don’t want\n// to add the arrow when the label is set explicitly as an option; so, the\n// inferred label is distinguished as an object with an “inferred” property.\nfunction inferScaleLabel(channels = [], scale) {\n let label;\n for (const { label: l } of channels) {\n if (l === undefined)\n continue;\n if (label === undefined)\n label = l;\n else if (label !== l)\n return;\n }\n if (label === undefined)\n return;\n // Ignore the implicit label for temporal scales if it’s simply “date”.\n if (isTemporalScale(scale) && /^(date|time|year)$/i.test(label))\n return;\n if (!isOrdinalScale(scale) && scale.percent)\n label = `${label} (%)`;\n return { inferred: true, toString: () => label };\n}\n// Returns the dimensions of the outer frame; this is subdivided into facets\n// with the margins of each facet collapsing into the outer margins.\nexport function outerDimensions(dimensions) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height, facet: { marginTop: facetMarginTop, marginRight: facetMarginRight, marginBottom: facetMarginBottom, marginLeft: facetMarginLeft } } = dimensions;\n return {\n marginTop: Math.max(marginTop, facetMarginTop),\n marginRight: Math.max(marginRight, facetMarginRight),\n marginBottom: Math.max(marginBottom, facetMarginBottom),\n marginLeft: Math.max(marginLeft, facetMarginLeft),\n width,\n height\n };\n}\n// Returns the dimensions of each facet.\nexport function innerDimensions({ fx, fy }, dimensions) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height } = outerDimensions(dimensions);\n return {\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n width: fx ? fx.scale.bandwidth() + marginLeft + marginRight : width,\n height: fy ? fy.scale.bandwidth() + marginTop + marginBottom : height\n };\n}\nfunction autoScaleRangeX(scale, dimensions) {\n if (scale.range === undefined) {\n const { insetLeft, insetRight } = scale;\n const { width, marginLeft = 0, marginRight = 0 } = dimensions;\n const left = marginLeft + insetLeft;\n const right = width - marginRight - insetRight;\n scale.range = [left, Math.max(left, right)];\n if (!isOrdinalScale(scale))\n scale.range = piecewiseRange(scale);\n scale.scale.range(scale.range);\n }\n autoScaleRound(scale);\n}\nfunction autoScaleRangeY(scale, dimensions) {\n if (scale.range === undefined) {\n const { insetTop, insetBottom } = scale;\n const { height, marginTop = 0, marginBottom = 0 } = dimensions;\n const top = marginTop + insetTop;\n const bottom = height - marginBottom - insetBottom;\n scale.range = [Math.max(top, bottom), top];\n if (!isOrdinalScale(scale))\n scale.range = piecewiseRange(scale);\n else\n scale.range.reverse();\n scale.scale.range(scale.range);\n }\n autoScaleRound(scale);\n}\nfunction autoScaleRound(scale) {\n if (scale.round === undefined && isBandScale(scale) && roundError(scale) <= 30) {\n scale.scale.round(true);\n }\n}\n// If we were to turn on rounding for this band or point scale, how much wasted\n// space would it introduce (on both ends of the range)? This must match\n// d3.scaleBand’s rounding behavior:\n// https://github.com/d3/d3-scale/blob/83555bd759c7314420bd4240642beda5e258db9e/src/band.js#L20-L32\nfunction roundError({ scale }) {\n const n = scale.domain().length;\n const [start, stop] = scale.range();\n const paddingInner = scale.paddingInner ? scale.paddingInner() : 1;\n const paddingOuter = scale.paddingOuter ? scale.paddingOuter() : scale.padding();\n const m = n - paddingInner;\n const step = Math.abs(stop - start) / Math.max(1, m + paddingOuter * 2);\n return (step - Math.floor(step)) * m;\n}\nfunction piecewiseRange(scale) {\n const length = scale.scale.domain().length + isThresholdScale(scale);\n if (!(length > 2))\n return scale.range;\n const [start, end] = scale.range;\n return Array.from({ length }, (_, i) => start + (i / (length - 1)) * (end - start));\n}\nexport function normalizeScale(key, scale, hint) {\n return Scale(key, hint === undefined ? undefined : [{ hint }], { ...scale });\n}\nfunction Scale(key, channels = [], options = {}) {\n const type = inferScaleType(key, channels, options);\n // Warn for common misuses of implicit ordinal scales. We disable this test if\n // you specify a scale interval or if you set the domain or range explicitly,\n // since setting the domain or range (typically with a cardinality of more than\n // two) is another indication that you intended for the scale to be ordinal; we\n // also disable it for facet scales since these are always band scales.\n if (options.type === undefined &&\n options.domain === undefined &&\n options.range === undefined &&\n options.interval == null &&\n key !== \"fx\" &&\n key !== \"fy\" &&\n isOrdinalScale({ type })) {\n const values = channels.map(({ value }) => value).filter((value) => value !== undefined);\n if (values.some(isTemporal))\n warn(`Warning: some data associated with the ${key} scale are dates. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(type)}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., d3.utcDay), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(type)}\".`);\n else if (values.some(isTemporalString))\n warn(`Warning: some data associated with the ${key} scale are strings that appear to be dates (e.g., YYYY-MM-DD). If these strings represent dates, you should parse them to Date objects. Dates are typically associated with a \"utc\" or \"time\" scale rather than a \"${formatScaleType(type)}\" scale. If you are using a bar mark, you probably want a rect mark with the interval option instead; if you are using a group transform, you probably want a bin transform instead. If you want to treat this data as ordinal, you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(type)}\".`);\n else if (values.some(isNumericString))\n warn(`Warning: some data associated with the ${key} scale are strings that appear to be numbers. If these strings represent numbers, you should parse or coerce them to numbers. Numbers are typically associated with a \"linear\" scale rather than a \"${formatScaleType(type)}\" scale. If you want to treat this data as ordinal, you can specify the interval of the ${key} scale (e.g., 1 for integers), or you can suppress this warning by setting the type of the ${key} scale to \"${formatScaleType(type)}\".`);\n }\n options.type = type; // Mutates input!\n // Once the scale type is known, coerce the associated channel values and any\n // explicitly-specified domain to the expected type.\n switch (type) {\n case \"diverging\":\n case \"diverging-sqrt\":\n case \"diverging-pow\":\n case \"diverging-log\":\n case \"diverging-symlog\":\n case \"cyclical\":\n case \"sequential\":\n case \"linear\":\n case \"sqrt\":\n case \"threshold\":\n case \"quantile\":\n case \"pow\":\n case \"log\":\n case \"symlog\":\n options = coerceType(channels, options, coerceNumbers);\n break;\n case \"identity\":\n switch (registry.get(key)) {\n case position:\n options = coerceType(channels, options, coerceNumbers);\n break;\n case symbol:\n options = coerceType(channels, options, coerceSymbols);\n break;\n }\n break;\n case \"utc\":\n case \"time\":\n options = coerceType(channels, options, coerceDates);\n break;\n }\n switch (type) {\n case \"diverging\":\n return ScaleDiverging(key, channels, options);\n case \"diverging-sqrt\":\n return ScaleDivergingSqrt(key, channels, options);\n case \"diverging-pow\":\n return ScaleDivergingPow(key, channels, options);\n case \"diverging-log\":\n return ScaleDivergingLog(key, channels, options);\n case \"diverging-symlog\":\n return ScaleDivergingSymlog(key, channels, options);\n case \"categorical\":\n case \"ordinal\":\n case ordinalImplicit:\n return ScaleOrdinal(key, channels, options);\n case \"cyclical\":\n case \"sequential\":\n case \"linear\":\n return ScaleLinear(key, channels, options);\n case \"sqrt\":\n return ScaleSqrt(key, channels, options);\n case \"threshold\":\n return ScaleThreshold(key, channels, options);\n case \"quantile\":\n return ScaleQuantile(key, channels, options);\n case \"quantize\":\n return ScaleQuantize(key, channels, options);\n case \"pow\":\n return ScalePow(key, channels, options);\n case \"log\":\n return ScaleLog(key, channels, options);\n case \"symlog\":\n return ScaleSymlog(key, channels, options);\n case \"utc\":\n return ScaleUtc(key, channels, options);\n case \"time\":\n return ScaleTime(key, channels, options);\n case \"point\":\n return ScalePoint(key, channels, options);\n case \"band\":\n return ScaleBand(key, channels, options);\n case \"identity\":\n return registry.get(key) === position ? ScaleIdentity() : { type: \"identity\" };\n case undefined:\n return;\n default:\n throw new Error(`unknown scale type: ${type}`);\n }\n}\nfunction formatScaleType(type) {\n return typeof type === \"symbol\" ? type.description : type;\n}\n// A special type symbol when the x and y scales are replaced with a projection.\nconst typeProjection = { toString: () => \"projection\" };\nfunction inferScaleType(key, channels, { type, domain, range, scheme, pivot, projection }) {\n // The facet scales are always band scales; this cannot be changed.\n if (key === \"fx\" || key === \"fy\")\n return \"band\";\n // If a projection is specified, the x- and y-scales are disabled; these\n // channels will be projected rather than scaled. (But still check that none\n // of the associated channels are incompatible with a projection.)\n if ((key === \"x\" || key === \"y\") && projection != null)\n type = typeProjection;\n // If a channel dictates a scale type, make sure that it is consistent with\n // the user-specified scale type (if any) and all other channels. For example,\n // barY requires x to be a band scale and disallows any other scale type.\n for (const { type: t } of channels) {\n if (t === undefined)\n continue;\n else if (type === undefined)\n type = t;\n else if (type !== t)\n throw new Error(`scale incompatible with channel: ${type} !== ${t}`);\n }\n // If the scale, a channel, or user specified a (consistent) type, return it.\n if (type === typeProjection)\n return;\n if (type !== undefined)\n return type;\n // If there’s no data (and no type) associated with this scale, don’t create a scale.\n if (domain === undefined && !channels.some(({ value }) => value !== undefined))\n return;\n // Some scales have default types.\n const kind = registry.get(key);\n if (kind === radius)\n return \"sqrt\";\n if (kind === opacity || kind === length)\n return \"linear\";\n if (kind === symbol)\n return \"ordinal\";\n // If the domain or range has more than two values, assume it’s ordinal. You\n // can still use a “piecewise” (or “polylinear”) scale, but you must set the\n // type explicitly.\n if ((domain || range || []).length > 2)\n return asOrdinalType(kind);\n // Otherwise, infer the scale type from the data! Prefer the domain, if\n // present, over channels. (The domain and channels should be consistently\n // typed, and the domain is more explicit and typically much smaller.) We only\n // check the first defined value for expedience and simplicity; we expect\n // that the types are consistent.\n if (domain !== undefined) {\n if (isOrdinal(domain))\n return asOrdinalType(kind);\n if (isTemporal(domain))\n return \"utc\";\n if (kind === color && (pivot != null || isDivergingScheme(scheme)))\n return \"diverging\";\n return \"linear\";\n }\n // If any channel is ordinal or temporal, it takes priority.\n const values = channels.map(({ value }) => value).filter((value) => value !== undefined);\n if (values.some(isOrdinal))\n return asOrdinalType(kind);\n if (values.some(isTemporal))\n return \"utc\";\n if (kind === color && (pivot != null || isDivergingScheme(scheme)))\n return \"diverging\";\n return \"linear\";\n}\n// Positional scales default to a point scale instead of an ordinal scale.\nfunction asOrdinalType(kind) {\n switch (kind) {\n case position:\n return \"point\";\n case color:\n return ordinalImplicit;\n default:\n return \"ordinal\";\n }\n}\nexport function isTemporalScale({ type }) {\n return type === \"time\" || type === \"utc\";\n}\nexport function isOrdinalScale({ type }) {\n return type === \"ordinal\" || type === \"point\" || type === \"band\" || type === ordinalImplicit;\n}\nexport function isThresholdScale({ type }) {\n return type === \"threshold\";\n}\nfunction isBandScale({ type }) {\n return type === \"point\" || type === \"band\";\n}\nexport function isDivergingScale({ type }) {\n return /^diverging($|-)/.test(type);\n}\n// Certain marks have special behavior if a scale is collapsed, i.e. if the\n// domain is degenerate and represents only a single value such as [3, 3]; for\n// example, a rect will span the full extent of the chart along a collapsed\n// dimension (whereas a dot will simply be drawn in the center).\nexport function isCollapsed(scale) {\n if (scale === undefined)\n return true; // treat missing scale as collapsed\n const domain = scale.domain();\n const value = scale(domain[0]);\n for (let i = 1, n = domain.length; i < n; ++i) {\n if (scale(domain[i]) - value) {\n return false;\n }\n }\n return true;\n}\n// Mutates channel.value!\nfunction coerceType(channels, { domain, ...options }, coerceValues) {\n for (const c of channels) {\n if (c.value !== undefined) {\n c.value = coerceValues(c.value);\n }\n }\n return {\n domain: domain === undefined ? domain : coerceValues(domain),\n ...options\n };\n}\nfunction coerceSymbols(values) {\n return map(values, maybeSymbol);\n}\nfunction coerceDates(values) {\n return map(values, coerceDate);\n}\n// If the values are specified as a typed array, no coercion is required.\nexport function coerceNumbers(values) {\n return isTypedArray(values) ? values : map(values, coerceNumber, Float64Array);\n}\n// Unlike Mark’s number, here we want to convert null and undefined to NaN,\n// since the result will be stored in a Float64Array and we don’t want null to\n// be coerced to zero.\nexport function coerceNumber(x) {\n return x == null ? NaN : Number(x);\n}\n// When coercing strings to dates, we only want to allow the ISO 8601 format\n// since the built-in string parsing of the Date constructor varies across\n// browsers. (In the future, this could be made more liberal if desired, though\n// it is still generally preferable to do date parsing yourself explicitly,\n// rather than rely on Plot.) Any non-string values are coerced to number first\n// and treated as milliseconds since UNIX epoch.\nexport function coerceDate(x) {\n return x instanceof Date && !isNaN(x)\n ? x\n : typeof x === \"string\"\n ? isoParse(x)\n : x == null || isNaN((x = +x))\n ? undefined\n : new Date(x);\n}\n/** \n * You can also create a standalone scale with Plot.**scale**(*options*). The *options* object must define at least one scale; see [Scale options](https://github.com/observablehq/plot/blob/main/README.md#scale-options) for how to define a scale. For example, here is a linear color scale with the default domain of [0, 1] and default scheme *turbo*:\n * \n * ```js\n * const color = Plot.scale({color: {type: \"linear\"}});\n * ```\n * \n * #### Scale objects\n * \n * Both [*plot*.scale](https://github.com/observablehq/plot/blob/main/README.md#plotscalescalename) and [Plot.scale](https://github.com/observablehq/plot/blob/main/README.md#plotscaleoptions) return scale objects. These objects represent the actual (or “materialized”) scale options used by Plot, including the domain, range, interpolate function, *etc.* The scale’s label, if any, is also returned; however, note that other axis properties are not currently exposed. Point and band scales also expose their materialized bandwidth and step.\n * \n * To reuse a scale across plots, pass the corresponding scale object into another plot specification:\n * \n * ```js\n * const plot1 = Plot.plot(…);\n * const plot2 = Plot.plot({…, color: plot1.scale(\"color\")});\n * ```\n * \n * For convenience, scale objects expose a *scale*.**apply**(*input*) method which returns the scale’s output for the given *input* value. When applicable, scale objects also expose a *scale*.**invert**(*output*) method which returns the corresponding input value from the scale’s domain for the given *output* value.\n * \n */\nexport function scale(options = {}) {\n let scale;\n for (const key in options) {\n if (!registry.has(key))\n continue; // ignore unknown properties\n if (!isScaleOptions(options[key]))\n continue; // e.g., ignore {color: \"red\"}\n if (scale !== undefined)\n throw new Error(\"ambiguous scale definition; multiple scales found\");\n scale = exposeScale(normalizeScale(key, options[key]));\n }\n if (scale === undefined)\n throw new Error(\"invalid scale definition; no scale found\");\n return scale;\n}\nexport function exposeScales(scaleDescriptors) {\n return (key) => {\n if (!registry.has((key = `${key}`)))\n throw new Error(`unknown scale: ${key}`);\n return key in scaleDescriptors ? exposeScale(scaleDescriptors[key]) : undefined;\n };\n}\n// Note: axis- and legend-related properties (such as label, ticks and\n// tickFormat) are not included here as they do not affect the scale’s behavior.\nfunction exposeScale({ scale, type, domain, range, interpolate, interval, transform, percent, pivot }) {\n if (type === \"identity\")\n return { type: \"identity\", apply: (d) => d, invert: (d) => d };\n const unknown = scale.unknown ? scale.unknown() : undefined;\n return {\n type,\n domain: slice(domain),\n ...(range !== undefined && { range: slice(range) }),\n ...(transform !== undefined && { transform }),\n ...(percent && { percent }),\n ...(unknown !== undefined && { unknown }),\n ...(interval !== undefined && { interval }),\n // quantitative\n ...(interpolate !== undefined && { interpolate }),\n ...(scale.clamp && { clamp: scale.clamp() }),\n // diverging (always asymmetric; we never want to apply the symmetric transform twice)\n ...(pivot !== undefined && { pivot, symmetric: false }),\n // log, diverging-log\n ...(scale.base && { base: scale.base() }),\n // pow, diverging-pow\n ...(scale.exponent && { exponent: scale.exponent() }),\n // symlog, diverging-symlog\n ...(scale.constant && { constant: scale.constant() }),\n // band, point\n ...(scale.align && { align: scale.align(), round: scale.round() }),\n ...(scale.padding &&\n (scale.paddingInner\n ? { paddingInner: scale.paddingInner(), paddingOuter: scale.paddingOuter() }\n : { padding: scale.padding() })),\n ...(scale.bandwidth && { bandwidth: scale.bandwidth(), step: scale.step() }),\n // utilities\n apply: (t) => scale(t),\n ...(scale.invert && { invert: (t) => scale.invert(t) })\n };\n}\n","import { geoAlbers, geoAlbersUsa, geoAzimuthalEqualArea, geoAzimuthalEquidistant, geoClipRectangle, geoConicConformal, geoConicEqualArea, geoConicEquidistant, geoEqualEarth, geoEquirectangular, geoGnomonic, geoMercator, geoOrthographic, geoPath, geoStereographic, geoTransform, geoTransverseMercator } from \"d3\";\nimport { valueObject } from \"./channel.js\";\nimport { constant, isObject } from \"./options.js\";\nimport { coerceNumbers } from \"./scales.js\";\nimport { warn } from \"./warnings.js\";\nconst pi = Math.PI;\nconst tau = 2 * pi;\nconst defaultAspectRatio = 0.618;\nexport function Projection({ projection, inset: globalInset = 0, insetTop = globalInset, insetRight = globalInset, insetBottom = globalInset, insetLeft = globalInset } = {}, dimensions) {\n if (projection == null)\n return;\n if (typeof projection.stream === \"function\")\n return projection; // d3 projection\n let options;\n let domain;\n let clip = \"frame\";\n // If the projection was specified as an object with additional options,\n // extract those. The order of precedence for insetTop (and other insets) is:\n // projection.insetTop, projection.inset, (global) insetTop, (global) inset.\n // Any other options on this object will be passed through to the initializer.\n if (isObject(projection)) {\n let inset;\n ({\n type: projection,\n domain,\n inset,\n insetTop = inset !== undefined ? inset : insetTop,\n insetRight = inset !== undefined ? inset : insetRight,\n insetBottom = inset !== undefined ? inset : insetBottom,\n insetLeft = inset !== undefined ? inset : insetLeft,\n clip = clip,\n ...options\n } = projection);\n if (projection == null)\n return;\n }\n // For named projections, retrieve the corresponding projection initializer.\n if (typeof projection !== \"function\")\n ({ type: projection } = namedProjection(projection));\n // Compute the frame dimensions and invoke the projection initializer.\n const { width, height, marginLeft, marginRight, marginTop, marginBottom } = dimensions;\n const dx = width - marginLeft - marginRight - insetLeft - insetRight;\n const dy = height - marginTop - marginBottom - insetTop - insetBottom;\n projection = projection?.({ width: dx, height: dy, clip, ...options });\n // The projection initializer might decide to not use a projection.\n if (projection == null)\n return;\n clip = maybePostClip(clip, marginLeft, marginTop, width - marginRight, height - marginBottom);\n // Translate the origin to the top-left corner, respecting margins and insets.\n let tx = marginLeft + insetLeft;\n let ty = marginTop + insetTop;\n let transform;\n // If a domain is specified, fit the projection to the frame.\n if (domain != null) {\n const [[x0, y0], [x1, y1]] = geoPath(projection).bounds(domain);\n const k = Math.min(dx / (x1 - x0), dy / (y1 - y0));\n if (k > 0) {\n tx -= (k * (x0 + x1) - dx) / 2;\n ty -= (k * (y0 + y1) - dy) / 2;\n transform = geoTransform({\n point(x, y) {\n this.stream.point(x * k + tx, y * k + ty);\n }\n });\n }\n else {\n warn(`Warning: the projection could not be fit to the specified domain; using the default scale.`);\n }\n }\n transform ??=\n tx === 0 && ty === 0\n ? identity()\n : geoTransform({\n point(x, y) {\n this.stream.point(x + tx, y + ty);\n }\n });\n return { stream: (s) => projection.stream(transform.stream(clip(s))) };\n}\nfunction namedProjection(projection) {\n switch (`${projection}`.toLowerCase()) {\n case \"albers-usa\":\n return scaleProjection(geoAlbersUsa, 0.7463, 0.4673);\n case \"albers\":\n return conicProjection(geoAlbers, 0.7463, 0.4673);\n case \"azimuthal-equal-area\":\n return scaleProjection(geoAzimuthalEqualArea, 4, 4);\n case \"azimuthal-equidistant\":\n return scaleProjection(geoAzimuthalEquidistant, tau, tau);\n case \"conic-conformal\":\n return conicProjection(geoConicConformal, tau, tau);\n case \"conic-equal-area\":\n return conicProjection(geoConicEqualArea, 6.1702, 2.9781);\n case \"conic-equidistant\":\n return conicProjection(geoConicEquidistant, 7.312, 3.6282);\n case \"equal-earth\":\n return scaleProjection(geoEqualEarth, 5.4133, 2.6347);\n case \"equirectangular\":\n return scaleProjection(geoEquirectangular, tau, pi);\n case \"gnomonic\":\n return scaleProjection(geoGnomonic, 3.4641, 3.4641);\n case \"identity\":\n return { type: identity };\n case \"reflect-y\":\n return { type: reflectY };\n case \"mercator\":\n return scaleProjection(geoMercator, tau, tau);\n case \"orthographic\":\n return scaleProjection(geoOrthographic, 2, 2);\n case \"stereographic\":\n return scaleProjection(geoStereographic, 2, 2);\n case \"transverse-mercator\":\n return scaleProjection(geoTransverseMercator, tau, tau);\n default:\n throw new Error(`unknown projection type: ${projection}`);\n }\n}\nfunction maybePostClip(clip, x1, y1, x2, y2) {\n if (clip === false || clip == null || typeof clip === \"number\")\n return (s) => s;\n if (clip === true)\n clip = \"frame\";\n switch (`${clip}`.toLowerCase()) {\n case \"frame\":\n return geoClipRectangle(x1, y1, x2, y2);\n default:\n throw new Error(`unknown projection clip type: ${clip}`);\n }\n}\nfunction scaleProjection(createProjection, kx, ky) {\n return {\n type: ({ width, height, rotate, precision = 0.15, clip }) => {\n const projection = createProjection();\n if (precision != null)\n projection.precision?.(precision);\n if (rotate != null)\n projection.rotate?.(rotate);\n if (typeof clip === \"number\")\n projection.clipAngle?.(clip);\n projection.scale(Math.min(width / kx, height / ky));\n projection.translate([width / 2, height / 2]);\n return projection;\n },\n aspectRatio: ky / kx\n };\n}\nfunction conicProjection(createProjection, kx, ky) {\n const { type, aspectRatio } = scaleProjection(createProjection, kx, ky);\n return {\n type: (options) => {\n const { parallels, domain, width, height } = options;\n const projection = type(options);\n if (parallels != null) {\n projection.parallels(parallels);\n if (domain === undefined) {\n projection.fitSize([width, height], { type: \"Sphere\" });\n }\n }\n return projection;\n },\n aspectRatio\n };\n}\nconst identity = constant({ stream: (stream) => stream });\nconst reflectY = constant(geoTransform({\n point(x, y) {\n this.stream.point(x, -y);\n }\n}));\n// Applies a point-wise projection to the given paired x and y channels.\n// Note: mutates values!\nexport function maybeProject(cx, cy, channels, values, context) {\n const x = channels[cx] && channels[cx].scale === \"x\";\n const y = channels[cy] && channels[cy].scale === \"y\";\n if (x && y) {\n project(cx, cy, values, context.projection);\n }\n else if (x) {\n throw new Error(`projection requires paired x and y channels; ${cx} is missing ${cy}`);\n }\n else if (y) {\n throw new Error(`projection requires paired x and y channels; ${cy} is missing ${cx}`);\n }\n}\nfunction project(cx, cy, values, projection) {\n const x = values[cx];\n const y = values[cy];\n const n = x.length;\n const X = (values[cx] = new Float64Array(n).fill(NaN));\n const Y = (values[cy] = new Float64Array(n).fill(NaN));\n let i;\n const stream = projection.stream({\n point(x, y) {\n X[i] = x;\n Y[i] = y;\n }\n });\n for (i = 0; i < n; ++i) {\n stream.point(x[i], y[i]);\n }\n}\n// When a named projection is specified, we can use its natural aspect ratio to\n// determine a good value for the projection’s height based on the desired\n// width. When we don’t have a way to know, the golden ratio is our best guess.\n// Due to a circular dependency (we need to know the height before we can\n// construct the projection), we have to test the raw projection option rather\n// than the materialized projection; therefore we must be extremely careful that\n// the logic of this function exactly matches Projection above!\nexport function projectionAspectRatio(projection, marks) {\n if (typeof projection?.stream === \"function\")\n return defaultAspectRatio;\n if (isObject(projection))\n projection = projection.type;\n if (projection == null)\n return hasGeometry(marks) ? defaultAspectRatio : undefined;\n if (typeof projection !== \"function\") {\n const { aspectRatio } = namedProjection(projection);\n if (aspectRatio)\n return aspectRatio;\n }\n return defaultAspectRatio;\n}\n// Extract the (possibly) scaled values for the x and y channels, and apply the\n// projection if any.\nexport function Position(channels, scales, context) {\n const { x, y } = channels;\n let position = {};\n if (x)\n position.x = x;\n if (y)\n position.y = y;\n position = valueObject(position, scales);\n if (context.projection)\n maybeProject(\"x\", \"y\", channels, position, context);\n if (x)\n position.x = coerceNumbers(position.x);\n if (y)\n position.y = coerceNumbers(position.y);\n return position;\n}\nfunction hasGeometry(marks) {\n for (const mark of marks)\n if (mark.channels.geometry)\n return true;\n return false;\n}\n","import { creator, select } from \"d3\";\nimport { Projection } from \"./projection.js\";\nexport function Context(options = {}, dimensions) {\n const { document = typeof window !== \"undefined\" ? window.document : undefined } = options;\n return { document, projection: Projection(options, dimensions) };\n}\nexport function create(name, { document }) {\n return select(creator(name).call(document.documentElement));\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nexport function memoize1(compute) {\n let cacheValue, cacheKeys;\n return (...keys) => {\n if (cacheKeys?.length !== keys.length || cacheKeys.some((k, i) => k !== keys[i])) {\n cacheKeys = keys;\n cacheValue = compute(...keys);\n }\n return cacheValue;\n };\n}\n","/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { format as isoFormat } from \"isoformat\";\nimport { string } from \"./options.js\";\nimport { memoize1 } from \"./memoize.js\";\nconst numberFormat = memoize1((locale) => new Intl.NumberFormat(locale));\nconst monthFormat = memoize1((locale, month) => new Intl.DateTimeFormat(locale, { timeZone: \"UTC\", ...(month && { month }) }));\nconst weekdayFormat = memoize1((locale, weekday) => new Intl.DateTimeFormat(locale, { timeZone: \"UTC\", ...(weekday && { weekday }) }));\nexport function formatNumber(locale = \"en-US\") {\n const format = numberFormat(locale);\n return (i) => (i != null && !isNaN(i) ? format.format(i) : undefined);\n}\n/** \n * ```js\n * Plot.formatMonth(\"es-MX\", \"long\")(0) // \"enero\"\n * ```\n * \n * Returns a function that formats a given month number (from 0 = January to 11 = December) according to the specified *locale* and *format*. The *locale* is a [BCP 47 language tag](https://tools.ietf.org/html/bcp47) and defaults to U.S. English. The *format* is a [month format](https://tc39.es/ecma402/#datetimeformat-objects): either *2-digit*, *numeric*, *narrow*, *short*, *long*; if not specified, it defaults to *short*.\n * \n */\nexport function formatMonth(locale = \"en-US\", format = \"short\") {\n const fmt = monthFormat(locale, format);\n return (i) => i != null && !isNaN((i = +new Date(Date.UTC(2000, +i)))) ? fmt.format(i) : undefined;\n}\n/** \n * ```js\n * Plot.formatWeekday(\"es-MX\", \"long\")(0) // \"domingo\"\n * ```\n * \n * Returns a function that formats a given week day number (from 0 = Sunday to 6 = Saturday) according to the specified *locale* and *format*. The *locale* is a [BCP 47 language tag](https://tools.ietf.org/html/bcp47) and defaults to U.S. English. The *format* is a [weekday format](https://tc39.es/ecma402/#datetimeformat-objects): either *narrow*, *short*, or *long*; if not specified, it defaults to *short*.\n * \n */\nexport function formatWeekday(locale = \"en-US\", format = \"short\") {\n const fmt = weekdayFormat(locale, format);\n return (i) => i != null && !isNaN((i = +new Date(Date.UTC(2001, 0, +i)))) ? fmt.format(i) : undefined;\n}\n/** \n * ```js\n * Plot.formatIsoDate(new Date(\"2020-01-01T00:00.000Z\")) // \"2020-01-01\"\n * ```\n * \n * Given a *date*, returns the shortest equivalent ISO 8601 UTC string. If the given *date* is not valid, returns `\"Invalid Date\"`.\n * \n */\nexport function formatIsoDate(date) {\n return isoFormat(date, \"Invalid Date\");\n}\nexport function formatAuto(locale = \"en-US\") {\n const number = formatNumber(locale);\n return (v) => (v instanceof Date ? formatIsoDate : typeof v === \"number\" ? number : string)(v);\n}\n// TODO When Plot supports a top-level locale option, this should be removed\n// because it lacks context to know which locale to use; formatAuto should be\n// used instead whenever possible.\nexport const formatDefault = formatAuto();\n","import { geoPath, group, namespaces } from \"d3\";\nimport { create } from \"./context.js\";\nimport { defined, nonempty } from \"./defined.js\";\nimport { formatDefault } from \"./format.js\";\nimport { string, number, maybeColorChannel, maybeNumberChannel, maybeKeyword, isNoneish, isNone, isRound, keyof } from \"./options.js\";\nimport { warn } from \"./warnings.js\";\nexport const offset = typeof window !== \"undefined\" && window.devicePixelRatio > 1 ? 0 : 0.5;\nlet nextClipId = 0;\nfunction getClipId() {\n return `plot-clip-${++nextClipId}`;\n}\nexport function styles(mark, { title, href, ariaLabel: variaLabel, ariaDescription, ariaHidden, target, fill, fillOpacity, stroke, strokeWidth, strokeOpacity, strokeLinejoin, strokeLinecap, strokeMiterlimit, strokeDasharray, strokeDashoffset, opacity, mixBlendMode, paintOrder, pointerEvents, shapeRendering }, { ariaLabel: cariaLabel, fill: defaultFill = \"currentColor\", fillOpacity: defaultFillOpacity, stroke: defaultStroke = \"none\", strokeOpacity: defaultStrokeOpacity, strokeWidth: defaultStrokeWidth, strokeLinecap: defaultStrokeLinecap, strokeLinejoin: defaultStrokeLinejoin, strokeMiterlimit: defaultStrokeMiterlimit, paintOrder: defaultPaintOrder }) {\n // Some marks don’t support fill (e.g., tick and rule).\n if (defaultFill === null) {\n fill = null;\n fillOpacity = null;\n }\n // Some marks don’t support stroke (e.g., image).\n if (defaultStroke === null) {\n stroke = null;\n strokeOpacity = null;\n }\n // Some marks default to fill with no stroke, while others default to stroke\n // with no fill. For example, bar and area default to fill, while dot and line\n // default to stroke. For marks that fill by default, the default fill only\n // applies if the stroke is (constant) none; if you set a stroke, then the\n // default fill becomes none. Similarly for marks that stroke by stroke, the\n // default stroke only applies if the fill is (constant) none.\n if (isNoneish(defaultFill)) {\n if (!isNoneish(defaultStroke) && !isNoneish(fill))\n defaultStroke = \"none\";\n }\n else {\n if (isNoneish(defaultStroke) && !isNoneish(stroke))\n defaultFill = \"none\";\n }\n const [vfill, cfill] = maybeColorChannel(fill, defaultFill);\n const [vfillOpacity, cfillOpacity] = maybeNumberChannel(fillOpacity, defaultFillOpacity);\n const [vstroke, cstroke] = maybeColorChannel(stroke, defaultStroke);\n const [vstrokeOpacity, cstrokeOpacity] = maybeNumberChannel(strokeOpacity, defaultStrokeOpacity);\n const [vopacity, copacity] = maybeNumberChannel(opacity);\n // For styles that have no effect if there is no stroke, only apply the\n // defaults if the stroke is not the constant none. (If stroke is a channel,\n // then cstroke will be undefined, but there’s still a stroke; hence we don’t\n // use isNoneish here.)\n if (!isNone(cstroke)) {\n if (strokeWidth === undefined)\n strokeWidth = defaultStrokeWidth;\n if (strokeLinecap === undefined)\n strokeLinecap = defaultStrokeLinecap;\n if (strokeLinejoin === undefined)\n strokeLinejoin = defaultStrokeLinejoin;\n // The default stroke miterlimit need not be applied if the current stroke\n // is the constant round; this only has effect on miter joins.\n if (strokeMiterlimit === undefined && !isRound(strokeLinejoin))\n strokeMiterlimit = defaultStrokeMiterlimit;\n // The paint order only takes effect if there is both a fill and a stroke\n // (at least if we ignore markers, which no built-in marks currently use).\n if (!isNone(cfill) && paintOrder === undefined)\n paintOrder = defaultPaintOrder;\n }\n const [vstrokeWidth, cstrokeWidth] = maybeNumberChannel(strokeWidth);\n // Some marks don’t support fill (e.g., tick and rule).\n if (defaultFill !== null) {\n mark.fill = impliedString(cfill, \"currentColor\");\n mark.fillOpacity = impliedNumber(cfillOpacity, 1);\n }\n // Some marks don’t support stroke (e.g., image).\n if (defaultStroke !== null) {\n mark.stroke = impliedString(cstroke, \"none\");\n mark.strokeWidth = impliedNumber(cstrokeWidth, 1);\n mark.strokeOpacity = impliedNumber(cstrokeOpacity, 1);\n mark.strokeLinejoin = impliedString(strokeLinejoin, \"miter\");\n mark.strokeLinecap = impliedString(strokeLinecap, \"butt\");\n mark.strokeMiterlimit = impliedNumber(strokeMiterlimit, 4);\n mark.strokeDasharray = impliedString(strokeDasharray, \"none\");\n mark.strokeDashoffset = impliedString(strokeDashoffset, \"0\");\n }\n mark.target = string(target);\n mark.ariaLabel = string(cariaLabel);\n mark.ariaDescription = string(ariaDescription);\n mark.ariaHidden = string(ariaHidden);\n mark.opacity = impliedNumber(copacity, 1);\n mark.mixBlendMode = impliedString(mixBlendMode, \"normal\");\n mark.paintOrder = impliedString(paintOrder, \"normal\");\n mark.pointerEvents = impliedString(pointerEvents, \"auto\");\n mark.shapeRendering = impliedString(shapeRendering, \"auto\");\n return {\n title: { value: title, optional: true },\n href: { value: href, optional: true },\n ariaLabel: { value: variaLabel, optional: true },\n fill: { value: vfill, scale: \"auto\", optional: true },\n fillOpacity: { value: vfillOpacity, scale: \"opacity\", optional: true },\n stroke: { value: vstroke, scale: \"auto\", optional: true },\n strokeOpacity: { value: vstrokeOpacity, scale: \"opacity\", optional: true },\n strokeWidth: { value: vstrokeWidth, optional: true },\n opacity: { value: vopacity, scale: \"opacity\", optional: true }\n };\n}\n// Applies the specified titles via selection.call.\nexport function applyTitle(selection, L) {\n if (L)\n selection\n .filter((i) => nonempty(L[i]))\n .append(\"title\")\n .call(applyText, L);\n}\n// Like applyTitle, but for grouped data (lines, areas).\nexport function applyTitleGroup(selection, L) {\n if (L)\n selection\n .filter(([i]) => nonempty(L[i]))\n .append(\"title\")\n .call(applyTextGroup, L);\n}\nexport function applyText(selection, T) {\n if (T)\n selection.text((i) => formatDefault(T[i]));\n}\nexport function applyTextGroup(selection, T) {\n if (T)\n selection.text(([i]) => formatDefault(T[i]));\n}\nexport function applyChannelStyles(selection, { target }, { ariaLabel: AL, title: T, fill: F, fillOpacity: FO, stroke: S, strokeOpacity: SO, strokeWidth: SW, opacity: O, href: H }) {\n if (AL)\n applyAttr(selection, \"aria-label\", (i) => AL[i]);\n if (F)\n applyAttr(selection, \"fill\", (i) => F[i]);\n if (FO)\n applyAttr(selection, \"fill-opacity\", (i) => FO[i]);\n if (S)\n applyAttr(selection, \"stroke\", (i) => S[i]);\n if (SO)\n applyAttr(selection, \"stroke-opacity\", (i) => SO[i]);\n if (SW)\n applyAttr(selection, \"stroke-width\", (i) => SW[i]);\n if (O)\n applyAttr(selection, \"opacity\", (i) => O[i]);\n if (H)\n applyHref(selection, (i) => H[i], target);\n applyTitle(selection, T);\n}\nexport function applyGroupedChannelStyles(selection, { target }, { ariaLabel: AL, title: T, fill: F, fillOpacity: FO, stroke: S, strokeOpacity: SO, strokeWidth: SW, opacity: O, href: H }) {\n if (AL)\n applyAttr(selection, \"aria-label\", ([i]) => AL[i]);\n if (F)\n applyAttr(selection, \"fill\", ([i]) => F[i]);\n if (FO)\n applyAttr(selection, \"fill-opacity\", ([i]) => FO[i]);\n if (S)\n applyAttr(selection, \"stroke\", ([i]) => S[i]);\n if (SO)\n applyAttr(selection, \"stroke-opacity\", ([i]) => SO[i]);\n if (SW)\n applyAttr(selection, \"stroke-width\", ([i]) => SW[i]);\n if (O)\n applyAttr(selection, \"opacity\", ([i]) => O[i]);\n if (H)\n applyHref(selection, ([i]) => H[i], target);\n applyTitleGroup(selection, T);\n}\nfunction groupAesthetics({ ariaLabel: AL, title: T, fill: F, fillOpacity: FO, stroke: S, strokeOpacity: SO, strokeWidth: SW, opacity: O, href: H }) {\n return [AL, T, F, FO, S, SO, SW, O, H].filter((c) => c !== undefined);\n}\nexport function groupZ(I, Z, z) {\n const G = group(I, (i) => Z[i]);\n if (z === undefined && G.size > I.length >> 1) {\n warn(`Warning: the implicit z channel has high cardinality. This may occur when the fill or stroke channel is associated with quantitative data rather than ordinal or categorical data. You can suppress this warning by setting the z option explicitly; if this data represents a single series, set z to null.`);\n }\n return G.values();\n}\nexport function* groupIndex(I, position, { z }, channels) {\n const { z: Z } = channels; // group channel\n const A = groupAesthetics(channels); // aesthetic channels\n const C = [...position, ...A]; // all channels\n // Group the current index by Z (if any).\n for (const G of Z ? groupZ(I, Z, z) : [I]) {\n let Ag; // the A-values (aesthetics) of the current group, if any\n let Gg; // the current group index (a subset of G, and I), if any\n out: for (const i of G) {\n // If any channel has an undefined value for this index, skip it.\n for (const c of C) {\n if (!defined(c[i])) {\n if (Gg)\n Gg.push(-1);\n continue out;\n }\n }\n // Otherwise, if this is a new group, record the aesthetics for this\n // group. Yield the current group and start a new one.\n if (Ag === undefined) {\n if (Gg)\n yield Gg;\n (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n continue;\n }\n // Otherwise, add the current index to the current group. Then, if any of\n // the aesthetics don’t match the current group, yield the current group\n // and start a new group of the current index.\n Gg.push(i);\n for (let j = 0; j < A.length; ++j) {\n const k = keyof(A[j][i]);\n if (k !== Ag[j]) {\n yield Gg;\n (Ag = A.map((c) => keyof(c[i]))), (Gg = [i]);\n continue out;\n }\n }\n }\n // Yield the current group, if any.\n if (Gg)\n yield Gg;\n }\n}\n// TODO Accept other types of clips (paths, urls, x, y, other marks…)?\n// https://github.com/observablehq/plot/issues/181\nexport function maybeClip(clip) {\n if (clip === true)\n clip = \"frame\";\n else if (clip === false)\n clip = null;\n return maybeKeyword(clip, \"clip\", [\"frame\", \"sphere\"]);\n}\n// Note: may mutate selection.node!\nfunction applyClip(selection, mark, dimensions, context) {\n let clipUrl;\n switch (mark.clip) {\n case \"frame\": {\n const { width, height, marginLeft, marginRight, marginTop, marginBottom } = dimensions;\n const id = getClipId();\n clipUrl = `url(#${id})`;\n selection = create(\"svg:g\", context)\n .call((g) => g\n .append(\"svg:clipPath\")\n .attr(\"id\", id)\n .append(\"rect\")\n .attr(\"x\", marginLeft)\n .attr(\"y\", marginTop)\n .attr(\"width\", width - marginRight - marginLeft)\n .attr(\"height\", height - marginTop - marginBottom))\n .each(function () {\n this.appendChild(selection.node());\n selection.node = () => this; // Note: mutation!\n });\n break;\n }\n case \"sphere\": {\n const { projection } = context;\n if (!projection)\n throw new Error(`the \"sphere\" clip option requires a projection`);\n const id = getClipId();\n clipUrl = `url(#${id})`;\n selection\n .append(\"clipPath\")\n .attr(\"id\", id)\n .append(\"path\")\n .attr(\"d\", geoPath(projection)({ type: \"Sphere\" }));\n break;\n }\n }\n // Here we’re careful to apply the ARIA attributes to the outer G element when\n // clipping is applied, and to apply the ARIA attributes before any other\n // attributes (for readability).\n applyAttr(selection, \"aria-label\", mark.ariaLabel);\n applyAttr(selection, \"aria-description\", mark.ariaDescription);\n applyAttr(selection, \"aria-hidden\", mark.ariaHidden);\n applyAttr(selection, \"clip-path\", clipUrl);\n}\n// Note: may mutate selection.node!\nexport function applyIndirectStyles(selection, mark, dimensions, context) {\n applyClip(selection, mark, dimensions, context);\n applyAttr(selection, \"fill\", mark.fill);\n applyAttr(selection, \"fill-opacity\", mark.fillOpacity);\n applyAttr(selection, \"stroke\", mark.stroke);\n applyAttr(selection, \"stroke-width\", mark.strokeWidth);\n applyAttr(selection, \"stroke-opacity\", mark.strokeOpacity);\n applyAttr(selection, \"stroke-linejoin\", mark.strokeLinejoin);\n applyAttr(selection, \"stroke-linecap\", mark.strokeLinecap);\n applyAttr(selection, \"stroke-miterlimit\", mark.strokeMiterlimit);\n applyAttr(selection, \"stroke-dasharray\", mark.strokeDasharray);\n applyAttr(selection, \"stroke-dashoffset\", mark.strokeDashoffset);\n applyAttr(selection, \"shape-rendering\", mark.shapeRendering);\n applyAttr(selection, \"paint-order\", mark.paintOrder);\n applyAttr(selection, \"pointer-events\", mark.pointerEvents);\n}\nexport function applyDirectStyles(selection, mark) {\n applyStyle(selection, \"mix-blend-mode\", mark.mixBlendMode);\n applyAttr(selection, \"opacity\", mark.opacity);\n}\nfunction applyHref(selection, href, target) {\n selection.each(function (i) {\n const h = href(i);\n if (h != null) {\n const a = this.ownerDocument.createElementNS(namespaces.svg, \"a\");\n a.setAttribute(\"fill\", \"inherit\");\n a.setAttributeNS(namespaces.xlink, \"href\", h);\n if (target != null)\n a.setAttribute(\"target\", target);\n this.parentNode.insertBefore(a, this).appendChild(this);\n }\n });\n}\nexport function applyAttr(selection, name, value) {\n if (value != null)\n selection.attr(name, value);\n}\nexport function applyStyle(selection, name, value) {\n if (value != null)\n selection.style(name, value);\n}\nexport function applyTransform(selection, mark, { x, y }, tx = offset, ty = offset) {\n tx += mark.dx;\n ty += mark.dy;\n if (x?.bandwidth)\n tx += x.bandwidth() / 2;\n if (y?.bandwidth)\n ty += y.bandwidth() / 2;\n if (tx || ty)\n selection.attr(\"transform\", `translate(${tx},${ty})`);\n}\nexport function impliedString(value, impliedValue) {\n if ((value = string(value)) !== impliedValue)\n return value;\n}\nexport function impliedNumber(value, impliedValue) {\n if ((value = number(value)) !== impliedValue)\n return value;\n}\nconst validClassName = /^-?([_a-z]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])([_a-z0-9-]|[\\240-\\377]|\\\\[0-9a-f]{1,6}(\\r\\n|[ \\t\\r\\n\\f])?|\\\\[^\\r\\n\\f0-9a-f])*$/;\nexport function maybeClassName(name) {\n if (name === undefined)\n return `plot-${Math.random().toString(16).slice(2)}`;\n name = `${name}`;\n if (!validClassName.test(name))\n throw new Error(`invalid class name: ${name}`);\n return name;\n}\nexport function applyInlineStyles(selection, style) {\n if (typeof style === \"string\") {\n selection.property(\"style\", style);\n }\n else if (style != null) {\n for (const element of selection) {\n Object.assign(element.style, style);\n }\n }\n}\nexport function applyFrameAnchor({ frameAnchor }, { width, height, marginTop, marginRight, marginBottom, marginLeft }) {\n return [\n /left$/.test(frameAnchor)\n ? marginLeft\n : /right$/.test(frameAnchor)\n ? width - marginRight\n : (marginLeft + width - marginRight) / 2,\n /^top/.test(frameAnchor)\n ? marginTop\n : /^bottom/.test(frameAnchor)\n ? height - marginBottom\n : (marginTop + height - marginBottom) / 2\n ];\n}\n","import { extent } from \"d3\";\nimport { projectionAspectRatio } from \"./projection.js\";\nimport { isOrdinalScale } from \"./scales.js\";\nimport { offset } from \"./style.js\";\nexport function Dimensions(scales, marks, options = {}) {\n // Compute the default margins: the maximum of the marks’ margins. While not\n // always used, they may be needed to compute the default height of the plot.\n let marginTopDefault = 0.5 - offset, marginRightDefault = 0.5 + offset, marginBottomDefault = 0.5 + offset, marginLeftDefault = 0.5 - offset;\n for (const { marginTop, marginRight, marginBottom, marginLeft } of marks) {\n if (marginTop > marginTopDefault)\n marginTopDefault = marginTop;\n if (marginRight > marginRightDefault)\n marginRightDefault = marginRight;\n if (marginBottom > marginBottomDefault)\n marginBottomDefault = marginBottom;\n if (marginLeft > marginLeftDefault)\n marginLeftDefault = marginLeft;\n }\n // Compute the actual margins. The order of precedence is: the side-specific\n // margin options, then the global margin option, then the defaults.\n let { margin, marginTop = margin !== undefined ? margin : marginTopDefault, marginRight = margin !== undefined ? margin : marginRightDefault, marginBottom = margin !== undefined ? margin : marginBottomDefault, marginLeft = margin !== undefined ? margin : marginLeftDefault } = options;\n // Coerce the margin options to numbers.\n marginTop = +marginTop;\n marginRight = +marginRight;\n marginBottom = +marginBottom;\n marginLeft = +marginLeft;\n // Compute the outer dimensions of the plot. If the top and bottom margins are\n // specified explicitly, adjust the automatic height accordingly.\n let { width = 640, height = autoHeight(scales, marks, options, {\n width,\n marginTopDefault,\n marginRightDefault,\n marginBottomDefault,\n marginLeftDefault\n }) + Math.max(0, marginTop - marginTopDefault + marginBottom - marginBottomDefault) } = options;\n // Coerce the width and height.\n width = +width;\n height = +height;\n const dimensions = {\n width,\n height,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft\n };\n // Compute the facet margins.\n if (scales.fx || scales.fy) {\n let { margin: facetMargin, marginTop: facetMarginTop = facetMargin !== undefined ? facetMargin : marginTop, marginRight: facetMarginRight = facetMargin !== undefined ? facetMargin : marginRight, marginBottom: facetMarginBottom = facetMargin !== undefined ? facetMargin : marginBottom, marginLeft: facetMarginLeft = facetMargin !== undefined ? facetMargin : marginLeft } = options.facet ?? {};\n // Coerce the facet margin options to numbers.\n facetMarginTop = +facetMarginTop;\n facetMarginRight = +facetMarginRight;\n facetMarginBottom = +facetMarginBottom;\n facetMarginLeft = +facetMarginLeft;\n dimensions.facet = {\n marginTop: facetMarginTop,\n marginRight: facetMarginRight,\n marginBottom: facetMarginBottom,\n marginLeft: facetMarginLeft\n };\n }\n return dimensions;\n}\nfunction autoHeight({ x, y, fy, fx }, marks, { projection, aspectRatio }, { width, marginTopDefault, marginRightDefault, marginBottomDefault, marginLeftDefault }) {\n const nfy = fy ? fy.scale.domain().length : 1;\n // If a projection is specified, use its natural aspect ratio (if known).\n const ar = projectionAspectRatio(projection, marks);\n if (ar) {\n const nfx = fx ? fx.scale.domain().length : 1;\n const far = ((1.1 * nfy - 0.1) / (1.1 * nfx - 0.1)) * ar; // 0.1 is default facet padding\n const lar = Math.max(0.1, Math.min(10, far)); // clamp the aspect ratio to a “reasonable” value\n return Math.round((width - marginLeftDefault - marginRightDefault) * lar + marginTopDefault + marginBottomDefault);\n }\n const ny = y ? (isOrdinalScale(y) ? y.scale.domain().length : Math.max(7, 17 / nfy)) : 1;\n // If a desired aspect ratio is given, compute a default height to match.\n if (aspectRatio != null) {\n aspectRatio = +aspectRatio;\n if (!(isFinite(aspectRatio) && aspectRatio > 0))\n throw new Error(`invalid aspectRatio: ${aspectRatio}`);\n const ratio = aspectRatioLength(\"y\", y) / (aspectRatioLength(\"x\", x) * aspectRatio);\n const fxb = fx ? fx.scale.bandwidth() : 1;\n const fyb = fy ? fy.scale.bandwidth() : 1;\n const w = fxb * (width - marginLeftDefault - marginRightDefault) - x.insetLeft - x.insetRight;\n return (ratio * w + y.insetTop + y.insetBottom) / fyb + marginTopDefault + marginBottomDefault;\n }\n return !!(y || fy) * Math.max(1, Math.min(60, ny * nfy)) * 20 + !!fx * 30 + 60;\n}\nfunction aspectRatioLength(k, scale) {\n if (!scale)\n throw new Error(`aspectRatio requires ${k} scale`);\n const { type, domain } = scale;\n let transform;\n switch (type) {\n case \"linear\":\n case \"utc\":\n case \"time\":\n transform = Number;\n break;\n case \"pow\": {\n const exponent = scale.scale.exponent();\n transform = (x) => Math.pow(x, exponent);\n break;\n }\n case \"log\":\n transform = Math.log;\n break;\n case \"point\":\n case \"band\":\n return domain.length;\n default:\n throw new Error(`unsupported ${k} scale for aspectRatio: ${type}`);\n }\n const [min, max] = extent(domain);\n return Math.abs(transform(max) - transform(min));\n}\n","import { cross, rollup, sum } from \"d3\";\nimport { range } from \"./options.js\";\nimport { Scales } from \"./scales.js\";\n// Returns an array of {x?, y?, i} objects representing the facet domain.\nexport function Facets(channelsByScale, options) {\n const { fx, fy } = Scales(channelsByScale, options);\n const fxDomain = fx?.scale.domain();\n const fyDomain = fy?.scale.domain();\n return fxDomain && fyDomain\n ? cross(fxDomain, fyDomain).map(([x, y], i) => ({ x, y, i }))\n : fxDomain\n ? fxDomain.map((x, i) => ({ x, i }))\n : fyDomain\n ? fyDomain.map((y, i) => ({ y, i }))\n : undefined;\n}\n// Returns an accessor function that returns the order of the given facet value\n// in the associated facet scales’ domains.\nexport function facetOrder({ x: X, y: Y }) {\n const xi = X && new Map(X.map((v, i) => [v, i]));\n const yi = Y && new Map(Y.map((v, i) => [v, i]));\n return X && Y\n ? (a, b) => xi.get(a.x) - xi.get(b.x) || yi.get(a.y) - yi.get(b.y)\n : X\n ? (a, b) => xi.get(a.x) - xi.get(b.x)\n : (a, b) => yi.get(a.y) - yi.get(b.y);\n}\n// Returns a (possibly nested) Map of [[key1, index1], [key2, index2], …]\n// representing the data indexes associated with each facet.\nexport function facetGroups(data, { fx, fy }) {\n const I = range(data);\n const FX = fx?.value;\n const FY = fy?.value;\n return fx && fy\n ? rollup(I, (G) => ((G.fx = FX[G[0]]), (G.fy = FY[G[0]]), G), (i) => FX[i], (i) => FY[i])\n : fx\n ? rollup(I, (G) => ((G.fx = FX[G[0]]), G), (i) => FX[i])\n : rollup(I, (G) => ((G.fy = FY[G[0]]), G), (i) => FY[i]);\n}\nexport function facetTranslate(fx, fy, { marginTop, marginLeft }) {\n return fx && fy\n ? ({ x, y }) => `translate(${fx(x) - marginLeft},${fy(y) - marginTop})`\n : fx\n ? ({ x }) => `translate(${fx(x) - marginLeft},0)`\n : ({ y }) => `translate(0,${fy(y) - marginTop})`;\n}\n// Returns an index that for each facet lists all the elements present in other\n// facets in the original index. TODO Memoize to avoid repeated work?\nexport function facetExclude(index) {\n const ex = [];\n const e = new Uint32Array(sum(index, (d) => d.length));\n for (const i of index) {\n let n = 0;\n for (const j of index) {\n if (i === j)\n continue;\n e.set(j, n);\n n += j.length;\n }\n ex.push(e.slice(0, n));\n }\n return ex;\n}\nconst facetAnchors = new Map([\n [\"top\", facetAnchorTop],\n [\"right\", facetAnchorRight],\n [\"bottom\", facetAnchorBottom],\n [\"left\", facetAnchorLeft],\n [\"top-left\", and(facetAnchorTop, facetAnchorLeft)],\n [\"top-right\", and(facetAnchorTop, facetAnchorRight)],\n [\"bottom-left\", and(facetAnchorBottom, facetAnchorLeft)],\n [\"bottom-right\", and(facetAnchorBottom, facetAnchorRight)],\n [\"top-empty\", facetAnchorTopEmpty],\n [\"right-empty\", facetAnchorRightEmpty],\n [\"bottom-empty\", facetAnchorBottomEmpty],\n [\"left-empty\", facetAnchorLeftEmpty],\n [\"empty\", facetAnchorEmpty]\n]);\nexport function maybeFacetAnchor(facetAnchor) {\n if (facetAnchor == null)\n return null;\n const anchor = facetAnchors.get(`${facetAnchor}`.toLowerCase());\n if (anchor)\n return anchor;\n throw new Error(`invalid facet anchor: ${facetAnchor}`);\n}\nfunction facetAnchorTop(facets, { y: Y }, { y }) {\n return Y ? Y.indexOf(y) === 0 : true;\n}\nfunction facetAnchorBottom(facets, { y: Y }, { y }) {\n return Y ? Y.indexOf(y) === Y.length - 1 : true;\n}\nfunction facetAnchorLeft(facets, { x: X }, { x }) {\n return X ? X.indexOf(x) === 0 : true;\n}\nfunction facetAnchorRight(facets, { x: X }, { x }) {\n return X ? X.indexOf(x) === X.length - 1 : true;\n}\nfunction facetAnchorTopEmpty(facets, { y: Y }, { x, y, empty }) {\n if (empty)\n return false;\n const i = Y?.indexOf(y);\n if (i > 0) {\n const y = Y[i - 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorBottomEmpty(facets, { y: Y }, { x, y, empty }) {\n if (empty)\n return false;\n const i = Y?.indexOf(y);\n if (i < Y?.length - 1) {\n const y = Y[i + 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorLeftEmpty(facets, { x: X }, { x, y, empty }) {\n if (empty)\n return false;\n const i = X?.indexOf(x);\n if (i > 0) {\n const x = X[i - 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorRightEmpty(facets, { x: X }, { x, y, empty }) {\n if (empty)\n return false;\n const i = X?.indexOf(x);\n if (i < X?.length - 1) {\n const x = X[i + 1];\n return facets.find((f) => f.x === x && f.y === y)?.empty;\n }\n}\nfunction facetAnchorEmpty(facets, channels, { empty }) {\n return empty;\n}\nfunction and(a, b) {\n return function () {\n return a.apply(null, arguments) && b.apply(null, arguments);\n };\n}\n// Facet filter, by mark; for now only the \"eq\" filter is provided.\nexport function facetFilter(facets, { channels: { fx, fy }, groups }) {\n return fx && fy\n ? facets.map(({ x, y }) => groups.get(x)?.get(y) ?? [])\n : fx\n ? facets.map(({ x }) => groups.get(x) ?? [])\n : facets.map(({ y }) => groups.get(y) ?? []);\n}\n","import { format, utcFormat } from \"d3\";\nimport { formatIsoDate } from \"./format.js\";\nimport { constant, isTemporal, string } from \"./options.js\";\nimport { isOrdinalScale } from \"./scales.js\";\nexport function inferFontVariant(scale) {\n return isOrdinalScale(scale) && scale.interval === undefined ? undefined : \"tabular-nums\";\n}\n// D3 doesn’t provide a tick format for ordinal scales; we want shorthand when\n// an ordinal domain is numbers or dates, and we want null to mean the empty\n// string, not the default identity format. TODO Remove this in favor of the\n// axis mark’s inferTickFormat.\nexport function maybeAutoTickFormat(tickFormat, domain) {\n return tickFormat === undefined\n ? isTemporal(domain)\n ? formatIsoDate\n : string\n : typeof tickFormat === \"function\"\n ? tickFormat\n : (typeof tickFormat === \"string\" ? (isTemporal(domain) ? utcFormat : format) : constant)(tickFormat);\n}\n","import { quantize, interpolateNumber, piecewise, format, scaleBand, scaleLinear, axisBottom } from \"d3\";\nimport { inferFontVariant } from \"../axes.js\";\nimport { Context, create } from \"../context.js\";\nimport { map } from \"../options.js\";\nimport { interpolatePiecewise } from \"../scales/quantitative.js\";\nimport { applyInlineStyles, impliedString, maybeClassName } from \"../style.js\";\nexport function legendRamp(color, options) {\n let { label = color.label, tickSize = 6, width = 240, height = 44 + tickSize, marginTop = 18, marginRight = 0, marginBottom = 16 + tickSize, marginLeft = 0, style, ticks = (width - marginLeft - marginRight) / 64, tickFormat, fontVariant = inferFontVariant(color), round = true, className } = options;\n const context = Context(options);\n className = maybeClassName(className);\n if (tickFormat === null)\n tickFormat = () => null;\n const svg = create(\"svg\", context)\n .attr(\"class\", className)\n .attr(\"font-family\", \"system-ui, sans-serif\")\n .attr(\"font-size\", 10)\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"viewBox\", `0 0 ${width} ${height}`)\n .call((svg) => svg.append(\"style\").text(`\n .${className} {\n display: block;\n background: white;\n height: auto;\n height: intrinsic;\n max-width: 100%;\n overflow: visible;\n }\n .${className} text {\n white-space: pre;\n }\n `))\n .call(applyInlineStyles, style);\n let tickAdjust = (g) => g.selectAll(\".tick line\").attr(\"y1\", marginTop + marginBottom - height);\n let x;\n // Some D3 scales use scale.interpolate, some scale.interpolator, and some\n // scale.round; this normalizes the API so it works with all scale types.\n const applyRange = round ? (x, range) => x.rangeRound(range) : (x, range) => x.range(range);\n const { type, domain, range, interpolate, scale, pivot } = color;\n // Continuous\n if (interpolate) {\n // Often interpolate is a “fixed” interpolator on the [0, 1] interval, as\n // with a built-in color scheme, but sometimes it is a function that takes\n // two arguments and is used in conjunction with the range.\n const interpolator = range === undefined\n ? interpolate\n : piecewise(interpolate.length === 1 ? interpolatePiecewise(interpolate) : interpolate, range);\n // Construct a D3 scale of the same type, but with a range that evenly\n // divides the horizontal extent of the legend. (In the common case, the\n // domain.length is two, and so the range is simply the extent.) For a\n // diverging scale, we need an extra point in the range for the pivot such\n // that the pivot is always drawn in the middle.\n x = applyRange(scale.copy(), quantize(interpolateNumber(marginLeft, width - marginRight), Math.min(domain.length + (pivot !== undefined), range === undefined ? Infinity : range.length)));\n // Construct a 256×1 canvas, filling each pixel using the interpolator.\n const n = 256;\n const canvas = context.document.createElement(\"canvas\");\n canvas.width = n;\n canvas.height = 1;\n const context2 = canvas.getContext(\"2d\");\n for (let i = 0, j = n - 1; i < n; ++i) {\n context2.fillStyle = interpolator(i / j);\n context2.fillRect(i, 0, 1, 1);\n }\n svg\n .append(\"image\")\n .attr(\"x\", marginLeft)\n .attr(\"y\", marginTop)\n .attr(\"width\", width - marginLeft - marginRight)\n .attr(\"height\", height - marginTop - marginBottom)\n .attr(\"preserveAspectRatio\", \"none\")\n .attr(\"xlink:href\", canvas.toDataURL());\n }\n // Threshold\n else if (type === \"threshold\") {\n const thresholds = domain;\n const thresholdFormat = tickFormat === undefined ? (d) => d : typeof tickFormat === \"string\" ? format(tickFormat) : tickFormat;\n // Construct a linear scale with evenly-spaced ticks for each of the\n // thresholds; the domain extends one beyond the threshold extent.\n x = applyRange(scaleLinear().domain([-1, range.length - 1]), [marginLeft, width - marginRight]);\n svg\n .append(\"g\")\n .selectAll()\n .data(range)\n .enter()\n .append(\"rect\")\n .attr(\"x\", (d, i) => x(i - 1))\n .attr(\"y\", marginTop)\n .attr(\"width\", (d, i) => x(i) - x(i - 1))\n .attr(\"height\", height - marginTop - marginBottom)\n .attr(\"fill\", (d) => d);\n ticks = map(thresholds, (_, i) => i);\n tickFormat = (i) => thresholdFormat(thresholds[i], i);\n }\n // Ordinal (hopefully!)\n else {\n x = applyRange(scaleBand().domain(domain), [marginLeft, width - marginRight]);\n svg\n .append(\"g\")\n .selectAll()\n .data(domain)\n .enter()\n .append(\"rect\")\n .attr(\"x\", x)\n .attr(\"y\", marginTop)\n .attr(\"width\", Math.max(0, x.bandwidth() - 1))\n .attr(\"height\", height - marginTop - marginBottom)\n .attr(\"fill\", scale);\n tickAdjust = () => { };\n }\n svg\n .append(\"g\")\n .attr(\"transform\", `translate(0,${height - marginBottom})`)\n .call(axisBottom(x)\n .ticks(Array.isArray(ticks) ? null : ticks, typeof tickFormat === \"string\" ? tickFormat : undefined)\n .tickFormat(typeof tickFormat === \"function\" ? tickFormat : undefined)\n .tickSize(tickSize)\n .tickValues(Array.isArray(ticks) ? ticks : null))\n .attr(\"font-size\", null)\n .attr(\"font-family\", null)\n .attr(\"font-variant\", impliedString(fontVariant, \"normal\"))\n .call(tickAdjust)\n .call((g) => g.select(\".domain\").remove());\n if (label !== undefined) {\n svg\n .append(\"text\")\n .attr(\"x\", marginLeft)\n .attr(\"y\", marginTop - 6)\n .attr(\"fill\", \"currentColor\") // TODO move to stylesheet?\n .attr(\"font-weight\", \"bold\")\n .text(label);\n }\n return svg.node();\n}\n","import { pathRound as path } from \"d3\";\nimport { inferFontVariant, maybeAutoTickFormat } from \"../axes.js\";\nimport { Context, create } from \"../context.js\";\nimport { isNoneish, maybeColorChannel, maybeNumberChannel } from \"../options.js\";\nimport { isOrdinalScale, isThresholdScale } from \"../scales.js\";\nimport { applyInlineStyles, impliedString, maybeClassName } from \"../style.js\";\nfunction maybeScale(scale, key) {\n if (key == null)\n return key;\n const s = scale(key);\n if (!s)\n throw new Error(`scale not found: ${key}`);\n return s;\n}\nexport function legendSwatches(color, options) {\n if (!isOrdinalScale(color) && !isThresholdScale(color))\n throw new Error(`swatches legend requires ordinal or threshold color scale (not ${color.type})`);\n return legendItems(color, options, (selection, scale) => selection.append(\"svg\").attr(\"fill\", scale.scale).append(\"rect\").attr(\"width\", \"100%\").attr(\"height\", \"100%\"), (className) => `.${className}-swatch svg {\n width: var(--swatchWidth);\n height: var(--swatchHeight);\n margin-right: 0.5em;\n }`);\n}\nexport function legendSymbols(symbol, { fill = symbol.hint?.fill !== undefined ? symbol.hint.fill : \"none\", fillOpacity = 1, stroke = symbol.hint?.stroke !== undefined ? symbol.hint.stroke : isNoneish(fill) ? \"currentColor\" : \"none\", strokeOpacity = 1, strokeWidth = 1.5, r = 4.5, ...options } = {}, scale) {\n const [vf, cf] = maybeColorChannel(fill);\n const [vs, cs] = maybeColorChannel(stroke);\n const sf = maybeScale(scale, vf);\n const ss = maybeScale(scale, vs);\n const size = r * r * Math.PI;\n fillOpacity = maybeNumberChannel(fillOpacity)[1];\n strokeOpacity = maybeNumberChannel(strokeOpacity)[1];\n strokeWidth = maybeNumberChannel(strokeWidth)[1];\n return legendItems(symbol, options, (selection) => selection\n .append(\"svg\")\n .attr(\"viewBox\", \"-8 -8 16 16\")\n .attr(\"fill\", vf === \"color\" ? (d) => sf.scale(d) : null)\n .attr(\"stroke\", vs === \"color\" ? (d) => ss.scale(d) : null)\n .append(\"path\")\n .attr(\"d\", (d) => {\n const p = path();\n symbol.scale(d).draw(p, size);\n return p;\n }), (className) => `.${className}-swatch > svg {\n width: var(--swatchWidth);\n height: var(--swatchHeight);\n margin-right: 0.5em;\n overflow: visible;\n fill: ${cf};\n fill-opacity: ${fillOpacity};\n stroke: ${cs};\n stroke-width: ${strokeWidth}px;\n stroke-opacity: ${strokeOpacity};\n }`);\n}\nfunction legendItems(scale, options = {}, swatch, swatchStyle) {\n let { columns, tickFormat, fontVariant = inferFontVariant(scale), \n // TODO label,\n swatchSize = 15, swatchWidth = swatchSize, swatchHeight = swatchSize, marginLeft = 0, className, style, width } = options;\n const context = Context(options);\n className = maybeClassName(className);\n tickFormat = maybeAutoTickFormat(tickFormat, scale.domain);\n const swatches = create(\"div\", context)\n .attr(\"class\", className)\n .attr(\"style\", `\n --swatchWidth: ${+swatchWidth}px;\n --swatchHeight: ${+swatchHeight}px;\n `);\n let extraStyle;\n if (columns != null) {\n extraStyle = `\n .${className}-swatch {\n display: flex;\n align-items: center;\n break-inside: avoid;\n padding-bottom: 1px;\n }\n .${className}-swatch::before {\n flex-shrink: 0;\n }\n .${className}-label {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n `;\n swatches\n .style(\"columns\", columns)\n .selectAll()\n .data(scale.domain)\n .enter()\n .append(\"div\")\n .attr(\"class\", `${className}-swatch`)\n .call(swatch, scale)\n .call((item) => item.append(\"div\").attr(\"class\", `${className}-label`).attr(\"title\", tickFormat).text(tickFormat));\n }\n else {\n extraStyle = `\n .${className} {\n display: flex;\n align-items: center;\n min-height: 33px;\n flex-wrap: wrap;\n }\n .${className}-swatch {\n display: inline-flex;\n align-items: center;\n margin-right: 1em;\n }\n `;\n swatches\n .selectAll()\n .data(scale.domain)\n .enter()\n .append(\"span\")\n .attr(\"class\", `${className}-swatch`)\n .call(swatch, scale)\n .append(function () {\n return this.ownerDocument.createTextNode(tickFormat.apply(this, arguments));\n });\n }\n return swatches\n .call((div) => div.insert(\"style\", \"*\").text(`\n .${className} {\n font-family: system-ui, sans-serif;\n font-size: 10px;\n margin-bottom: 0.5em;${marginLeft === undefined\n ? \"\"\n : `\n margin-left: ${+marginLeft}px;`}${width === undefined\n ? \"\"\n : `\n width: ${width}px;`}\n }\n ${swatchStyle(className)}\n ${extraStyle}\n `))\n .style(\"font-variant\", impliedString(fontVariant, \"normal\"))\n .call(applyInlineStyles, style)\n .node();\n}\n","import { rgb } from \"d3\";\nimport { Context } from \"./context.js\";\nimport { legendRamp } from \"./legends/ramp.js\";\nimport { legendSwatches, legendSymbols } from \"./legends/swatches.js\";\nimport { inherit, isScaleOptions } from \"./options.js\";\nimport { normalizeScale } from \"./scales.js\";\nconst legendRegistry = new Map([\n [\"symbol\", legendSymbols],\n [\"color\", legendColor],\n [\"opacity\", legendOpacity]\n]);\n/** \n * Returns a standalone legend for the scale defined by the given *options* object. The *options* object must define at least one scale; see [Scale options](https://github.com/observablehq/plot/blob/main/README.md#scale-options) for how to define a scale. For example, here is a ramp legend of a linear color scale with the default domain of [0, 1] and default scheme *turbo*:\n * \n * ```js\n * Plot.legend({color: {type: \"linear\"}})\n * ```\n * \n * The *options* object may also include any additional legend options described in the previous section. For example, to make the above legend slightly wider:\n * \n * ```js\n * Plot.legend({\n * width: 320,\n * color: {\n * type: \"linear\"\n * }\n * })\n * ```\n * \n */\nexport function legend(options = {}) {\n for (const [key, value] of legendRegistry) {\n const scale = options[key];\n if (isScaleOptions(scale)) {\n // e.g., ignore {color: \"red\"}\n const context = Context(options);\n let hint;\n // For symbol legends, pass a hint to the symbol scale.\n if (key === \"symbol\") {\n const { fill, stroke = fill === undefined && isScaleOptions(options.color) ? \"color\" : undefined } = options;\n hint = { fill, stroke };\n }\n return value(normalizeScale(key, scale, hint), legendOptions(context, scale, options), (key) => isScaleOptions(options[key]) ? normalizeScale(key, options[key]) : null);\n }\n }\n throw new Error(\"unknown legend type; no scale found\");\n}\nexport function exposeLegends(scales, context, defaults = {}) {\n return (key, options) => {\n if (!legendRegistry.has(key))\n throw new Error(`unknown legend type: ${key}`);\n if (!(key in scales))\n return;\n return legendRegistry.get(key)(scales[key], legendOptions(context, defaults[key], options), (key) => scales[key]);\n };\n}\nfunction legendOptions(context, { label, ticks, tickFormat } = {}, options) {\n return inherit(options, context, { label, ticks, tickFormat });\n}\nfunction legendColor(color, { legend = true, ...options }) {\n if (legend === true)\n legend = color.type === \"ordinal\" ? \"swatches\" : \"ramp\";\n if (color.domain === undefined)\n return;\n switch (`${legend}`.toLowerCase()) {\n case \"swatches\":\n return legendSwatches(color, options);\n case \"ramp\":\n return legendRamp(color, options);\n default:\n throw new Error(`unknown legend type: ${legend}`);\n }\n}\nfunction legendOpacity({ type, interpolate, ...scale }, { legend = true, color = rgb(0, 0, 0), ...options }) {\n if (!interpolate)\n throw new Error(`${type} opacity scales are not supported`);\n if (legend === true)\n legend = \"ramp\";\n if (`${legend}`.toLowerCase() !== \"ramp\")\n throw new Error(`${legend} opacity legends are not supported`);\n return legendColor({ type, ...scale, interpolate: interpolateOpacity(color) }, { legend, ...options });\n}\nfunction interpolateOpacity(color) {\n const { r, g, b } = rgb(color) || rgb(0, 0, 0); // treat invalid color as black\n return (t) => `rgba(${r},${g},${b},${t})`;\n}\nexport function Legends(scales, context, options) {\n const legends = [];\n for (const [key, value] of legendRegistry) {\n const o = options[key];\n if (o?.legend && key in scales) {\n const legend = value(scales[key], legendOptions(context, scales[key], o), (key) => scales[key]);\n if (legend != null)\n legends.push(legend);\n }\n }\n return legends;\n}\n","import { Channels, channelDomain, valueObject } from \"./channel.js\";\nimport { defined } from \"./defined.js\";\nimport { maybeFacetAnchor } from \"./facet.js\";\nimport { arrayify, isDomainSort, isOptions, range } from \"./options.js\";\nimport { keyword, maybeNamed } from \"./options.js\";\nimport { maybeProject } from \"./projection.js\";\nimport { maybeClip, styles } from \"./style.js\";\nimport { basic, initializer } from \"./transforms/basic.js\";\nexport class Mark {\n constructor(data, channels = {}, options = {}, defaults) {\n const { facet = \"auto\", facetAnchor, fx, fy, sort, dx = 0, dy = 0, margin = 0, marginTop = margin, marginRight = margin, marginBottom = margin, marginLeft = margin, clip, channels: extraChannels } = options;\n this.data = data;\n this.sort = isDomainSort(sort) ? sort : null;\n this.initializer = initializer(options).initializer;\n this.transform = this.initializer ? options.transform : basic(options).transform;\n if (facet === null || facet === false) {\n this.facet = null;\n }\n else {\n this.facet = keyword(facet === true ? \"include\" : facet, \"facet\", [\"auto\", \"include\", \"exclude\", \"super\"]);\n this.fx = fx;\n this.fy = fy;\n }\n this.facetAnchor = maybeFacetAnchor(facetAnchor);\n channels = maybeNamed(channels);\n if (extraChannels !== undefined)\n channels = { ...maybeNamed(extraChannels), ...channels };\n if (defaults !== undefined)\n channels = { ...styles(this, options, defaults), ...channels };\n this.channels = Object.fromEntries(Object.entries(channels)\n .map(([name, channel]) => {\n const { value } = channel;\n if (isOptions(value)) {\n channel = { ...channel, value: value.value };\n if (value.scale !== undefined)\n channel.scale = value.scale;\n }\n return [name, channel];\n })\n .filter(([name, { value, optional }]) => {\n if (value != null)\n return true;\n if (optional)\n return false;\n throw new Error(`missing channel value: ${name}`);\n }));\n this.dx = +dx;\n this.dy = +dy;\n this.marginTop = +marginTop;\n this.marginRight = +marginRight;\n this.marginBottom = +marginBottom;\n this.marginLeft = +marginLeft;\n this.clip = maybeClip(clip);\n // Super-faceting currently disallow position channels; in the future, we\n // could allow position to be specified in fx and fy in addition to (or\n // instead of) x and y.\n if (this.facet === \"super\") {\n if (fx || fy)\n throw new Error(`super-faceting cannot use fx or fy`);\n for (const name in this.channels) {\n const { scale } = channels[name];\n if (scale !== \"x\" && scale !== \"y\")\n continue;\n throw new Error(`super-faceting cannot use x or y`);\n }\n }\n }\n initialize(facets, facetChannels) {\n let data = arrayify(this.data);\n if (facets === undefined && data != null)\n facets = [range(data)];\n if (this.transform != null)\n ({ facets, data } = this.transform(data, facets)), (data = arrayify(data));\n const channels = Channels(this.channels, data);\n if (this.sort != null)\n channelDomain(channels, facetChannels, data, this.sort); // mutates facetChannels!\n return { data, facets, channels };\n }\n filter(index, channels, values) {\n for (const name in channels) {\n const { filter = defined } = channels[name];\n if (filter !== null) {\n const value = values[name];\n index = index.filter((i) => filter(value[i]));\n }\n }\n return index;\n }\n // If there is a projection, and there are both x and y channels (or x1 and\n // y1, or x2 and y2 channels), and those channels are associated with the x\n // and y scale respectively (and not already in screen coordinates as with an\n // initializer), then apply the projection, replacing the x and y values. Note\n // that the x and y scales themselves don’t exist if there is a projection,\n // but whether the channels are associated with scales still determines\n // whether the projection should apply; think of the projection as a\n // combination xy-scale.\n project(channels, values, context) {\n maybeProject(\"x\", \"y\", channels, values, context);\n maybeProject(\"x1\", \"y1\", channels, values, context);\n maybeProject(\"x2\", \"y2\", channels, values, context);\n }\n scale(channels, scales, context) {\n const values = valueObject(channels, scales);\n if (context.projection)\n this.project(channels, values, context);\n return values;\n }\n}\n/** \n * A convenience method for composing a mark from a series of other marks. Returns an array of marks that implements the *mark*.plot function. See the [box mark implementation](https://github.com/observablehq/plot/blob/main/src/marks/box.js) for an example.\n * \n */\nexport function marks(...marks) {\n marks.plot = Mark.prototype.plot; // Note: depends on side-effect in plot!\n return marks;\n}\n","export const radians = Math.PI / 180;\n","import { offset } from \"../style.js\";\nexport function maybeInsetX({ inset, insetLeft, insetRight, ...options } = {}) {\n [insetLeft, insetRight] = maybeInset(inset, insetLeft, insetRight);\n return { inset, insetLeft, insetRight, ...options };\n}\nexport function maybeInsetY({ inset, insetTop, insetBottom, ...options } = {}) {\n [insetTop, insetBottom] = maybeInset(inset, insetTop, insetBottom);\n return { inset, insetTop, insetBottom, ...options };\n}\nfunction maybeInset(inset, inset1, inset2) {\n return inset === undefined && inset1 === undefined && inset2 === undefined\n ? offset\n ? [1, 0]\n : [0.5, 0.5]\n : [inset1, inset2];\n}\n","import { isTemporal, labelof, map, maybeInterval, maybeValue, valueof } from \"../options.js\";\nimport { maybeInsetX, maybeInsetY } from \"./inset.js\";\n// The interval may be specified either as x: {value, interval} or as {x,\n// interval}. The former can be used to specify separate intervals for x and y,\n// for example with Plot.rect.\nfunction maybeIntervalValue(value, { interval }) {\n value = { ...maybeValue(value) };\n value.interval = maybeInterval(value.interval === undefined ? interval : value.interval);\n return value;\n}\nfunction maybeIntervalK(k, maybeInsetK, options, trivial) {\n const { [k]: v, [`${k}1`]: v1, [`${k}2`]: v2 } = options;\n const { value, interval } = maybeIntervalValue(v, options);\n if (value == null || (interval == null && !trivial))\n return options;\n const label = labelof(v);\n if (interval == null) {\n let V;\n const kv = { transform: (data) => V || (V = valueof(data, value)), label };\n return {\n ...options,\n [k]: undefined,\n [`${k}1`]: v1 === undefined ? kv : v1,\n [`${k}2`]: v2 === undefined ? kv : v2\n };\n }\n let D1, V1;\n function transform(data) {\n if (V1 !== undefined && data === D1)\n return V1; // memoize\n return (V1 = map(valueof((D1 = data), value), (v) => interval.floor(v)));\n }\n return maybeInsetK({\n ...options,\n [k]: undefined,\n [`${k}1`]: v1 === undefined ? { transform, label } : v1,\n [`${k}2`]: v2 === undefined ? { transform: (data) => transform(data).map((v) => interval.offset(v)), label } : v2\n });\n}\nfunction maybeIntervalMidK(k, maybeInsetK, options) {\n const { [k]: v } = options;\n const { value, interval } = maybeIntervalValue(v, options);\n if (value == null || interval == null)\n return options;\n return maybeInsetK({\n ...options,\n [k]: {\n label: labelof(v),\n transform: (data) => {\n const V1 = map(valueof(data, value), (v) => interval.floor(v));\n const V2 = V1.map((v) => interval.offset(v));\n return V1.map(isTemporal(V1)\n ? (v1, v2) => v1 == null || isNaN((v1 = +v1)) || ((v2 = V2[v2]), v2 == null) || isNaN((v2 = +v2))\n ? undefined\n : new Date((v1 + v2) / 2)\n : (v1, v2) => (v1 == null || ((v2 = V2[v2]), v2 == null) ? NaN : (+v1 + +v2) / 2));\n }\n }\n });\n}\nexport function maybeTrivialIntervalX(options = {}) {\n return maybeIntervalK(\"x\", maybeInsetX, options, true);\n}\nexport function maybeTrivialIntervalY(options = {}) {\n return maybeIntervalK(\"y\", maybeInsetY, options, true);\n}\nexport function maybeIntervalX(options = {}) {\n return maybeIntervalK(\"x\", maybeInsetX, options);\n}\nexport function maybeIntervalY(options = {}) {\n return maybeIntervalK(\"y\", maybeInsetY, options);\n}\nexport function maybeIntervalMidX(options = {}) {\n return maybeIntervalMidK(\"x\", maybeInsetX, options);\n}\nexport function maybeIntervalMidY(options = {}) {\n return maybeIntervalMidK(\"y\", maybeInsetY, options);\n}\n","import { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { identity, number } from \"../options.js\";\nimport { isCollapsed } from \"../scales.js\";\nimport { applyDirectStyles, applyIndirectStyles, applyTransform, applyChannelStyles, offset } from \"../style.js\";\nimport { maybeIntervalX, maybeIntervalY } from \"../transforms/interval.js\";\nconst defaults = {\n ariaLabel: \"rule\",\n fill: null,\n stroke: \"currentColor\"\n};\nexport class RuleX extends Mark {\n constructor(data, options = {}) {\n const { x, y1, y2, inset = 0, insetTop = inset, insetBottom = inset } = options;\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y1: { value: y1, scale: \"y\", optional: true },\n y2: { value: y2, scale: \"y\", optional: true }\n }, options, defaults);\n this.insetTop = number(insetTop);\n this.insetBottom = number(insetBottom);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y1: Y1, y2: Y2 } = channels;\n const { width, height, marginTop, marginRight, marginLeft, marginBottom } = dimensions;\n const { insetTop, insetBottom } = this;\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions)\n .call(applyTransform, this, { x: X && x }, offset, 0)\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"line\")\n .call(applyDirectStyles, this)\n .attr(\"x1\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n .attr(\"x2\", X ? (i) => X[i] : (marginLeft + width - marginRight) / 2)\n .attr(\"y1\", Y1 && !isCollapsed(y) ? (i) => Y1[i] + insetTop : marginTop + insetTop)\n .attr(\"y2\", Y2 && !isCollapsed(y)\n ? y.bandwidth\n ? (i) => Y2[i] + y.bandwidth() - insetBottom\n : (i) => Y2[i] - insetBottom\n : height - marginBottom - insetBottom)\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\nexport class RuleY extends Mark {\n constructor(data, options = {}) {\n const { x1, x2, y, inset = 0, insetRight = inset, insetLeft = inset } = options;\n super(data, {\n y: { value: y, scale: \"y\", optional: true },\n x1: { value: x1, scale: \"x\", optional: true },\n x2: { value: x2, scale: \"x\", optional: true }\n }, options, defaults);\n this.insetRight = number(insetRight);\n this.insetLeft = number(insetLeft);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { y: Y, x1: X1, x2: X2 } = channels;\n const { width, height, marginTop, marginRight, marginLeft, marginBottom } = dimensions;\n const { insetLeft, insetRight } = this;\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyTransform, this, { y: Y && y }, 0, offset)\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"line\")\n .call(applyDirectStyles, this)\n .attr(\"x1\", X1 && !isCollapsed(x) ? (i) => X1[i] + insetLeft : marginLeft + insetLeft)\n .attr(\"x2\", X2 && !isCollapsed(x)\n ? x.bandwidth\n ? (i) => X2[i] + x.bandwidth() - insetRight\n : (i) => X2[i] - insetRight\n : width - marginRight - insetRight)\n .attr(\"y1\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n .attr(\"y2\", Y ? (i) => Y[i] : (marginTop + height - marginBottom) / 2)\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\n/** \n * ```js\n * Plot.ruleX([0]) // as annotation\n * ```\n * ```js\n * Plot.ruleX(alphabet, {x: \"letter\", y: \"frequency\"}) // like barY\n * ```\n * \n * Returns a new rule↕︎ with the given *data* and *options*. In addition to the [standard mark options](https://github.com/observablehq/plot/blob/main/README.md#marks), the following channels are optional:\n * \n * * **x** - the horizontal position; bound to the *x* scale\n * * **y1** - the starting vertical position; bound to the *y* scale\n * * **y2** - the ending vertical position; bound to the *y* scale\n * \n * If the **x** option is not specified, it defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …]. If a **y** option is specified, it is shorthand for the **y2** option with **y1** equal to zero; this is the typical configuration for a vertical lollipop chart with rules aligned at *y* = 0. If the **y1** channel is not specified, the rule will start at the top of the plot (or facet). If the **y2** channel is not specified, the rule will end at the bottom of the plot (or facet).\n * \n * If an **interval** is specified, such as d3.utcDay, **y1** and **y2** can be derived from **y**: *interval*.floor(*y*) is invoked for each *y* to produce *y1*, and *interval*.offset(*y1*) is invoked for each *y1* to produce *y2*. If the interval is specified as a number *n*, *y1* and *y2* are taken as the two consecutive multiples of *n* that bracket *y*.\n * \n */\nexport function ruleX(data, options) {\n let { x = identity, y, y1, y2, ...rest } = maybeIntervalY(options);\n [y1, y2] = maybeOptionalZero(y, y1, y2);\n return new RuleX(data, { ...rest, x, y1, y2 });\n}\n/** \n * ```js\n * Plot.ruleY([0]) // as annotation\n * ```\n * \n * ```js\n * Plot.ruleY(alphabet, {y: \"letter\", x: \"frequency\"}) // like barX\n * ```\n * \n * Returns a new rule↔︎ with the given *data* and *options*. In addition to the [standard mark options](https://github.com/observablehq/plot/blob/main/README.md#marks), the following channels are optional:\n * \n * * **y** - the vertical position; bound to the *y* scale\n * * **x1** - the starting horizontal position; bound to the *x* scale\n * * **x2** - the ending horizontal position; bound to the *x* scale\n * \n * If the **y** option is not specified, it defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …]. If the **x** option is specified, it is shorthand for the **x2** option with **x1** equal to zero; this is the typical configuration for a horizontal lollipop chart with rules aligned at *x* = 0. If the **x1** channel is not specified, the rule will start at the left edge of the plot (or facet). If the **x2** channel is not specified, the rule will end at the right edge of the plot (or facet).\n * \n * If an **interval** is specified, such as d3.utcDay, **x1** and **x2** can be derived from **x**: *interval*.floor(*x*) is invoked for each *x* to produce *x1*, and *interval*.offset(*x1*) is invoked for each *x1* to produce *x2*. If the interval is specified as a number *n*, *x1* and *x2* are taken as the two consecutive multiples of *n* that bracket *x*.\n * \n */\nexport function ruleY(data, options) {\n let { y = identity, x, x1, x2, ...rest } = maybeIntervalX(options);\n [x1, x2] = maybeOptionalZero(x, x1, x2);\n return new RuleY(data, { ...rest, y, x1, x2 });\n}\n// For marks specified either as [0, x] or [x1, x2], or nothing.\nfunction maybeOptionalZero(x, x1, x2) {\n if (x === undefined) {\n if (x1 === undefined) {\n if (x2 !== undefined)\n return [0, x2];\n }\n else {\n if (x2 === undefined)\n return [0, x1];\n }\n }\n else if (x1 === undefined) {\n return x2 === undefined ? [0, x] : [x, x2];\n }\n else if (x2 === undefined) {\n return [x, x1];\n }\n return [x1, x2];\n}\n","export function template(strings, ...parts) {\n let n = parts.length;\n // If any of the interpolated parameters are strings rather than functions,\n // bake them into the template to optimize performance during render.\n for (let j = 0, copy = true; j < n; ++j) {\n if (typeof parts[j] !== \"function\") {\n if (copy) {\n strings = strings.slice(); // copy before mutate\n copy = false;\n }\n strings.splice(j, 2, strings[j] + parts[j] + strings[j + 1]);\n parts.splice(j, 1);\n --j, --n;\n }\n }\n return (i) => {\n let s = strings[0];\n for (let j = 0; j < n; ++j) {\n s += parts[j](i) + strings[j + 1];\n }\n return s;\n };\n}\n","import { namespaces } from \"d3\";\nimport { create } from \"../context.js\";\nimport { nonempty } from \"../defined.js\";\nimport { formatDefault } from \"../format.js\";\nimport { Mark } from \"../mark.js\";\nimport { indexOf, identity, string, maybeNumberChannel, maybeTuple, numberChannel, isNumeric, isTemporal, keyword, maybeFrameAnchor, isTextual, isIterable } from \"../options.js\";\nimport { applyChannelStyles, applyDirectStyles, applyIndirectStyles, applyAttr, applyTransform, impliedString, applyFrameAnchor } from \"../style.js\";\nimport { template } from \"../template.js\";\nimport { maybeIntervalMidX, maybeIntervalMidY } from \"../transforms/interval.js\";\nconst defaults = {\n ariaLabel: \"text\",\n strokeLinejoin: \"round\",\n strokeWidth: 3,\n paintOrder: \"stroke\"\n};\nconst softHyphen = \"\\u00ad\";\nexport class Text extends Mark {\n constructor(data, options = {}) {\n const { x, y, text = isIterable(data) && isTextual(data) ? identity : indexOf, frameAnchor, textAnchor = /right$/i.test(frameAnchor) ? \"end\" : /left$/i.test(frameAnchor) ? \"start\" : \"middle\", lineAnchor = /^top/i.test(frameAnchor) ? \"top\" : /^bottom/i.test(frameAnchor) ? \"bottom\" : \"middle\", lineHeight = 1, lineWidth = Infinity, textOverflow, monospace, fontFamily = monospace ? \"ui-monospace, monospace\" : undefined, fontSize, fontStyle, fontVariant, fontWeight, rotate } = options;\n const [vrotate, crotate] = maybeNumberChannel(rotate, 0);\n const [vfontSize, cfontSize] = maybeFontSizeChannel(fontSize);\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y: { value: y, scale: \"y\", optional: true },\n fontSize: { value: vfontSize, optional: true },\n rotate: { value: numberChannel(vrotate), optional: true },\n text: { value: text, filter: nonempty, optional: true }\n }, options, defaults);\n this.rotate = crotate;\n this.textAnchor = impliedString(textAnchor, \"middle\");\n this.lineAnchor = keyword(lineAnchor, \"lineAnchor\", [\"top\", \"middle\", \"bottom\"]);\n this.lineHeight = +lineHeight;\n this.lineWidth = +lineWidth;\n this.textOverflow = maybeTextOverflow(textOverflow);\n this.monospace = !!monospace;\n this.fontFamily = string(fontFamily);\n this.fontSize = cfontSize;\n this.fontStyle = string(fontStyle);\n this.fontVariant = string(fontVariant);\n this.fontWeight = string(fontWeight);\n this.frameAnchor = maybeFrameAnchor(frameAnchor);\n if (!(this.lineWidth >= 0))\n throw new Error(`invalid lineWidth: ${lineWidth}`);\n this.splitLines = splitter(this);\n this.clipLine = clipper(this);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y: Y, rotate: R, text: T, title: TL, fontSize: FS } = channels;\n const { rotate } = this;\n const [cx, cy] = applyFrameAnchor(this, dimensions);\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyIndirectTextStyles, this, T, dimensions)\n .call(applyTransform, this, { x: X && x, y: Y && y })\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"text\")\n .call(applyDirectStyles, this)\n .call(applyMultilineText, this, T, TL)\n .attr(\"transform\", template `translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${R ? (i) => ` rotate(${R[i]})` : rotate ? ` rotate(${rotate})` : ``}`)\n .call(applyAttr, \"font-size\", FS && ((i) => FS[i]))\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\nfunction maybeTextOverflow(textOverflow) {\n return textOverflow == null\n ? null\n : keyword(textOverflow, \"textOverflow\", [\n \"clip\",\n \"ellipsis\",\n \"clip-start\",\n \"clip-end\",\n \"ellipsis-start\",\n \"ellipsis-middle\",\n \"ellipsis-end\"\n ]).replace(/^(clip|ellipsis)$/, \"$1-end\");\n}\nfunction applyMultilineText(selection, mark, T, TL) {\n if (!T)\n return;\n const { lineAnchor, lineHeight, textOverflow, splitLines, clipLine } = mark;\n selection.each(function (i) {\n const lines = splitLines(formatDefault(T[i])).map(clipLine);\n const n = lines.length;\n const y = lineAnchor === \"top\" ? 0.71 : lineAnchor === \"bottom\" ? 1 - n : (164 - n * 100) / 200;\n if (n > 1) {\n for (let i = 0; i < n; ++i) {\n if (!lines[i])\n continue;\n const tspan = this.ownerDocument.createElementNS(namespaces.svg, \"tspan\");\n tspan.setAttribute(\"x\", 0);\n tspan.setAttribute(\"y\", `${(y + i) * lineHeight}em`);\n tspan.textContent = lines[i];\n this.appendChild(tspan);\n }\n }\n else {\n if (y)\n this.setAttribute(\"y\", `${y * lineHeight}em`);\n this.textContent = lines[0];\n }\n if (textOverflow && !TL && lines[0] !== T[i]) {\n const title = this.ownerDocument.createElementNS(namespaces.svg, \"title\");\n title.textContent = T[i];\n this.appendChild(title);\n }\n });\n}\n/** \n * Returns a new text mark with the given *data* and *options*. If neither the **x** nor **y** nor **frameAnchor** options are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function text(data, options = {}) {\n let { x, y, ...remainingOptions } = options;\n if (options.frameAnchor === undefined)\n [x, y] = maybeTuple(x, y);\n return new Text(data, { ...remainingOptions, x, y });\n}\n/** \n * Equivalent to [Plot.text](https://github.com/observablehq/plot/blob/main/README.md#plottextdata-options), except **x** defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **y** is transformed to (*interval*.floor(*y*) + *interval*.offset(*interval*.floor(*y*))) / 2. If the interval is specified as a number *n*, *y* will be the midpoint of two consecutive multiples of *n* that bracket *y*.\n * \n */\nexport function textX(data, options = {}) {\n const { x = identity, ...remainingOptions } = options;\n return new Text(data, maybeIntervalMidY({ ...remainingOptions, x }));\n}\n/** \n * Equivalent to [Plot.text](https://github.com/observablehq/plot/blob/main/README.md#plottextdata-options), except **y** defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **x** is transformed to (*interval*.floor(*x*) + *interval*.offset(*interval*.floor(*x*))) / 2. If the interval is specified as a number *n*, *x* will be the midpoint of two consecutive multiples of *n* that bracket *x*.\n * \n */\nexport function textY(data, options = {}) {\n const { y = identity, ...remainingOptions } = options;\n return new Text(data, maybeIntervalMidX({ ...remainingOptions, y }));\n}\nfunction applyIndirectTextStyles(selection, mark, T) {\n applyAttr(selection, \"text-anchor\", mark.textAnchor);\n applyAttr(selection, \"font-family\", mark.fontFamily);\n applyAttr(selection, \"font-size\", mark.fontSize);\n applyAttr(selection, \"font-style\", mark.fontStyle);\n applyAttr(selection, \"font-variant\", mark.fontVariant === undefined ? inferFontVariant(T) : mark.fontVariant);\n applyAttr(selection, \"font-weight\", mark.fontWeight);\n}\nfunction inferFontVariant(T) {\n return isNumeric(T) || isTemporal(T) ? \"tabular-nums\" : undefined;\n}\n// https://developer.mozilla.org/en-US/docs/Web/CSS/font-size\nconst fontSizes = new Set([\n // global keywords\n \"inherit\",\n \"initial\",\n \"revert\",\n \"unset\",\n // absolute keywords\n \"xx-small\",\n \"x-small\",\n \"small\",\n \"medium\",\n \"large\",\n \"x-large\",\n \"xx-large\",\n \"xxx-large\",\n // relative keywords\n \"larger\",\n \"smaller\"\n]);\n// The font size may be expressed as a constant in the following forms:\n// - number in pixels\n// - string keyword: see above\n// - string : e.g., \"12px\"\n// - string : e.g., \"80%\"\n// Anything else is assumed to be a channel definition.\nfunction maybeFontSizeChannel(fontSize) {\n if (fontSize == null || typeof fontSize === \"number\")\n return [undefined, fontSize];\n if (typeof fontSize !== \"string\")\n return [fontSize, undefined];\n fontSize = fontSize.trim().toLowerCase();\n return fontSizes.has(fontSize) || /^[+-]?\\d*\\.?\\d+(e[+-]?\\d+)?(\\w*|%)$/.test(fontSize)\n ? [undefined, fontSize]\n : [fontSize, undefined];\n}\n// This is a greedy algorithm for line wrapping. It would be better to use the\n// Knuth–Plass line breaking algorithm (but that would be much more complex).\n// https://en.wikipedia.org/wiki/Line_wrap_and_word_wrap\nfunction lineWrap(input, maxWidth, widthof) {\n const lines = [];\n let lineStart, lineEnd = 0;\n for (const [wordStart, wordEnd, required] of lineBreaks(input)) {\n // Record the start of a line. This isn’t the same as the previous line’s\n // end because we often skip spaces between lines.\n if (lineStart === undefined)\n lineStart = wordStart;\n // If the current line is not empty, and if adding the current word would\n // make the line longer than the allowed width, then break the line at the\n // previous word end.\n if (lineEnd > lineStart && widthof(input, lineStart, wordEnd) > maxWidth) {\n lines.push(input.slice(lineStart, lineEnd) + (input[lineEnd - 1] === softHyphen ? \"-\" : \"\"));\n lineStart = wordStart;\n }\n // If this is a required break (a newline), emit the line and reset.\n if (required) {\n lines.push(input.slice(lineStart, wordEnd));\n lineStart = undefined;\n continue;\n }\n // Extend the current line to include the new word.\n lineEnd = wordEnd;\n }\n return lines;\n}\n// This is a rudimentary (and U.S.-centric) algorithm for finding opportunities\n// to break lines between words. A better and far more comprehensive approach\n// would be to use the official Unicode Line Breaking Algorithm.\n// https://unicode.org/reports/tr14/\nfunction* lineBreaks(input) {\n let i = 0, j = 0;\n const n = input.length;\n while (j < n) {\n let k = 1;\n switch (input[j]) {\n case softHyphen:\n case \"-\": // hyphen\n ++j;\n yield [i, j, false];\n i = j;\n break;\n case \" \":\n yield [i, j, false];\n while (input[++j] === \" \")\n ; // skip multiple spaces\n i = j;\n break;\n case \"\\r\":\n if (input[j + 1] === \"\\n\")\n ++k; // falls through\n case \"\\n\":\n yield [i, j, true];\n j += k;\n i = j;\n break;\n default:\n ++j;\n break;\n }\n }\n yield [i, j, true];\n}\n// Computed as round(measureText(text).width * 10) at 10px system-ui. For\n// characters that are not represented in this map, we’d ideally want to use a\n// weighted average of what we expect to see. But since we don’t really know\n// what that is, using “e” seems reasonable.\nconst defaultWidthMap = {\n a: 56,\n b: 63,\n c: 57,\n d: 63,\n e: 58,\n f: 37,\n g: 62,\n h: 60,\n i: 26,\n j: 26,\n k: 55,\n l: 26,\n m: 88,\n n: 60,\n o: 60,\n p: 62,\n q: 62,\n r: 39,\n s: 54,\n t: 38,\n u: 60,\n v: 55,\n w: 79,\n x: 54,\n y: 55,\n z: 55,\n A: 69,\n B: 67,\n C: 73,\n D: 74,\n E: 61,\n F: 58,\n G: 76,\n H: 75,\n I: 28,\n J: 55,\n K: 67,\n L: 58,\n M: 89,\n N: 75,\n O: 78,\n P: 65,\n Q: 78,\n R: 67,\n S: 65,\n T: 65,\n U: 75,\n V: 69,\n W: 98,\n X: 69,\n Y: 67,\n Z: 67,\n 0: 64,\n 1: 48,\n 2: 62,\n 3: 64,\n 4: 66,\n 5: 63,\n 6: 65,\n 7: 58,\n 8: 65,\n 9: 65,\n \" \": 29,\n \"!\": 32,\n '\"': 49,\n \"'\": 31,\n \"(\": 39,\n \")\": 39,\n \",\": 31,\n \"-\": 48,\n \".\": 31,\n \"/\": 32,\n \":\": 31,\n \";\": 31,\n \"?\": 52,\n \"‘\": 31,\n \"’\": 31,\n \"“\": 47,\n \"”\": 47,\n \"…\": 82\n};\n// This is a rudimentary (and U.S.-centric) algorithm for measuring the width of\n// a string based on a technique of Gregor Aisch; it assumes that individual\n// characters are laid out independently and does not implement the Unicode\n// grapheme cluster breaking algorithm. It does understand code points, though,\n// and so treats things like emoji as having the width of a lowercase e (and\n// should be equivalent to using for-of to iterate over code points, while also\n// being fast). TODO Optimize this by noting that we often re-measure characters\n// that were previously measured?\n// http://www.unicode.org/reports/tr29/#Grapheme_Cluster_Boundaries\n// https://exploringjs.com/impatient-js/ch_strings.html#atoms-of-text\nexport function defaultWidth(text, start = 0, end = text.length) {\n let sum = 0;\n for (let i = start; i < end; i = readCharacter(text, i)) {\n sum += defaultWidthMap[text[i]] ?? (isPictographic(text, i) ? 120 : defaultWidthMap.e);\n }\n return sum;\n}\n// Even for monospaced text, we can’t assume that the number of UTF-16 code\n// points (i.e., the length of a string) corresponds to the number of visible\n// characters; we still have to count graphemes. And note that pictographic\n// characters such as emojis are typically not monospaced!\nexport function monospaceWidth(text, start = 0, end = text.length) {\n let sum = 0;\n for (let i = start; i < end; i = readCharacter(text, i)) {\n sum += isPictographic(text, i) ? 200 : 100;\n }\n return sum;\n}\nfunction splitter({ monospace, lineWidth, textOverflow }) {\n if (textOverflow != null || lineWidth == Infinity)\n return (text) => text.split(/\\r\\n?|\\n/g);\n const widthof = monospace ? monospaceWidth : defaultWidth;\n const maxWidth = lineWidth * 100;\n return (text) => lineWrap(text, maxWidth, widthof);\n}\nfunction clipper({ monospace, lineWidth, textOverflow }) {\n if (textOverflow == null || lineWidth == Infinity)\n return (text) => text;\n const widthof = monospace ? monospaceWidth : defaultWidth;\n const maxWidth = lineWidth * 100;\n switch (textOverflow) {\n case \"clip-start\":\n return (text) => clipStart(text, maxWidth, widthof, \"\");\n case \"clip-end\":\n return (text) => clipEnd(text, maxWidth, widthof, \"\");\n case \"ellipsis-start\":\n return (text) => clipStart(text, maxWidth, widthof, \"…\");\n case \"ellipsis-middle\":\n return (text) => clipMiddle(text, maxWidth, widthof, \"…\");\n case \"ellipsis-end\":\n return (text) => clipEnd(text, maxWidth, widthof, \"…\");\n }\n}\n// Cuts the given text to the given width, using the specified widthof function;\n// the returned [index, error] guarantees text.slice(0, index) fits within the\n// specified width with the given error. If the text fits naturally within the\n// given width, returns [-1, 0]. If the text needs cutting, the given inset\n// specifies how much space (in the same units as width and widthof) to reserve\n// for a possible ellipsis character.\nfunction cut(text, width, widthof, inset) {\n const I = []; // indexes of read character boundaries\n let w = 0; // current line width\n for (let i = 0, j = 0, n = text.length; i < n; i = j) {\n j = readCharacter(text, i); // read the next character\n const l = widthof(text, i, j); // current character width\n if (w + l > width) {\n w += inset;\n while (w > width && i > 0)\n (j = i), (i = I.pop()), (w -= widthof(text, i, j)); // remove excess\n return [i, width - w];\n }\n w += l;\n I.push(i);\n }\n return [-1, 0];\n}\nexport function clipEnd(text, width, widthof, ellipsis) {\n text = text.trim(); // ignore leading and trailing whitespace\n const e = widthof(ellipsis);\n const [i] = cut(text, width, widthof, e);\n return i < 0 ? text : text.slice(0, i).trimEnd() + ellipsis;\n}\nexport function clipMiddle(text, width, widthof, ellipsis) {\n text = text.trim(); // ignore leading and trailing whitespace\n const w = widthof(text);\n if (w <= width)\n return text;\n const e = widthof(ellipsis) / 2;\n const [i, ei] = cut(text, width / 2, widthof, e);\n const [j] = cut(text, w - width / 2 - ei + e, widthof, -e); // TODO read spaces?\n return j < 0 ? ellipsis : text.slice(0, i).trimEnd() + ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\nexport function clipStart(text, width, widthof, ellipsis) {\n text = text.trim(); // ignore leading and trailing whitespace\n const w = widthof(text);\n if (w <= width)\n return text;\n const e = widthof(ellipsis);\n const [j] = cut(text, w - width + e, widthof, -e); // TODO read spaces?\n return j < 0 ? ellipsis : ellipsis + text.slice(readCharacter(text, j)).trimStart();\n}\nconst reCombiner = /[\\p{Combining_Mark}\\p{Emoji_Modifier}]+/uy;\nconst rePictographic = /\\p{Extended_Pictographic}/uy;\n// Reads a single “character” element from the given text starting at the given\n// index, returning the index after the read character. Ideally, this implements\n// the Unicode text segmentation algorithm and understands grapheme cluster\n// boundaries, etc., but in practice this is only smart enough to detect UTF-16\n// surrogate pairs, combining marks, and zero-width joiner (zwj) sequences such\n// as emoji skin color modifiers. https://unicode.org/reports/tr29/\nexport function readCharacter(text, i) {\n i += isSurrogatePair(text, i) ? 2 : 1;\n if (isCombiner(text, i))\n i = reCombiner.lastIndex;\n if (isZeroWidthJoiner(text, i))\n return readCharacter(text, i + 1);\n return i;\n}\n// We avoid more expensive regex tests involving Unicode property classes by\n// first checking for the common case of 7-bit ASCII characters.\nfunction isAscii(text, i) {\n return text.charCodeAt(i) < 0x80;\n}\nfunction isSurrogatePair(text, i) {\n const hi = text.charCodeAt(i);\n if (hi >= 0xd800 && hi < 0xdc00) {\n const lo = text.charCodeAt(i + 1);\n return lo >= 0xdc00 && lo < 0xe000;\n }\n return false;\n}\nfunction isZeroWidthJoiner(text, i) {\n return text.charCodeAt(i) === 0x200d;\n}\nfunction isCombiner(text, i) {\n return isAscii(text, i) ? false : ((reCombiner.lastIndex = i), reCombiner.test(text));\n}\nfunction isPictographic(text, i) {\n return isAscii(text, i) ? false : ((rePictographic.lastIndex = i), rePictographic.test(text));\n}\n","import { pathRound as path } from \"d3\";\nimport { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { maybeFrameAnchor, maybeNumberChannel, maybeTuple, keyword, identity } from \"../options.js\";\nimport { applyChannelStyles, applyDirectStyles, applyFrameAnchor, applyIndirectStyles, applyTransform } from \"../style.js\";\nimport { template } from \"../template.js\";\nconst defaults = {\n ariaLabel: \"vector\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5,\n strokeLinejoin: \"round\",\n strokeLinecap: \"round\"\n};\nconst defaultRadius = 3.5;\n// The size of the arrowhead is proportional to its length, but we still allow\n// the relative size of the head to be controlled via the mark’s width option;\n// doubling the default radius will produce an arrowhead that is twice as big.\n// That said, we’ll probably want a arrow with a fixed head size, too.\nconst wingRatio = defaultRadius * 5;\nconst shapeArrow = {\n draw(context, l, r) {\n const wing = (l * r) / wingRatio;\n context.moveTo(0, 0);\n context.lineTo(0, -l);\n context.moveTo(-wing, wing - l);\n context.lineTo(0, -l);\n context.lineTo(wing, wing - l);\n }\n};\nconst shapeSpike = {\n draw(context, l, r) {\n context.moveTo(-r, 0);\n context.lineTo(0, -l);\n context.lineTo(r, 0);\n }\n};\nconst shapes = new Map([\n [\"arrow\", shapeArrow],\n [\"spike\", shapeSpike]\n]);\nfunction isShapeObject(value) {\n return value && typeof value.draw === \"function\";\n}\nfunction Shape(shape) {\n if (isShapeObject(shape))\n return shape;\n const value = shapes.get(`${shape}`.toLowerCase());\n if (value)\n return value;\n throw new Error(`invalid shape: ${shape}`);\n}\nexport class Vector extends Mark {\n constructor(data, options = {}) {\n const { x, y, r = defaultRadius, length, rotate, shape = shapeArrow, anchor = \"middle\", frameAnchor } = options;\n const [vl, cl] = maybeNumberChannel(length, 12);\n const [vr, cr] = maybeNumberChannel(rotate, 0);\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y: { value: y, scale: \"y\", optional: true },\n length: { value: vl, scale: \"length\", optional: true },\n rotate: { value: vr, optional: true }\n }, options, defaults);\n this.r = +r;\n this.length = cl;\n this.rotate = cr;\n this.shape = Shape(shape);\n this.anchor = keyword(anchor, \"anchor\", [\"start\", \"middle\", \"end\"]);\n this.frameAnchor = maybeFrameAnchor(frameAnchor);\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y: Y, length: L, rotate: A } = channels;\n const { length, rotate, anchor, shape, r } = this;\n const [cx, cy] = applyFrameAnchor(this, dimensions);\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyTransform, this, { x: X && x, y: Y && y })\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"path\")\n .call(applyDirectStyles, this)\n .attr(\"transform\", template `translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${A ? (i) => ` rotate(${A[i]})` : rotate ? ` rotate(${rotate})` : ``}${anchor === \"start\"\n ? ``\n : anchor === \"end\"\n ? L\n ? (i) => ` translate(0,${L[i]})`\n : ` translate(0,${length})`\n : L\n ? (i) => ` translate(0,${L[i] / 2})`\n : ` translate(0,${length / 2})`}`)\n .attr(\"d\", L\n ? (i) => {\n const p = path();\n shape.draw(p, L[i], r);\n return p;\n }\n : (() => {\n const p = path();\n shape.draw(p, length, r);\n return p;\n })())\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\n/** \n * ```js\n * Plot.vector(wind, {x: \"longitude\", y: \"latitude\", length: \"speed\", rotate: \"direction\"})\n * ```\n * \n * Returns a new vector with the given *data* and *options*. If neither the **x** nor **y** options are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function vector(data, options = {}) {\n let { x, y, ...rest } = options;\n if (options.frameAnchor === undefined)\n [x, y] = maybeTuple(x, y);\n return new Vector(data, { ...rest, x, y });\n}\n/** \n * Equivalent to [Plot.vector](https://github.com/observablehq/plot/blob/main/README.md#plotvectordata-options) except that if the **x** option is not specified, it defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …].\n * \n */\nexport function vectorX(data, options = {}) {\n const { x = identity, ...rest } = options;\n return new Vector(data, { ...rest, x });\n}\n/** \n * Equivalent to [Plot.vector](https://github.com/observablehq/plot/blob/main/README.md#plotvectordata-options) except that if the **y** option is not specified, it defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function vectorY(data, options = {}) {\n const { y = identity, ...rest } = options;\n return new Vector(data, { ...rest, y });\n}\n/** \n * Equivalent to [Plot.vector](https://github.com/observablehq/plot/blob/main/README.md#plotvectordata-options) except that the **shape** defaults to *spike*, the **stroke** defaults to *currentColor*, the **strokeWidth** defaults to 1, the **fill** defaults to **stroke**, the **fillOpacity** defaults to 0.3, and the **anchor** defaults to *start*.\n * \n */\nexport function spike(data, options = {}) {\n const { shape = shapeSpike, stroke = defaults.stroke, strokeWidth = 1, fill = stroke, fillOpacity = 0.3, anchor = \"start\", ...rest } = options;\n return vector(data, { ...rest, shape, stroke, strokeWidth, fill, fillOpacity, anchor });\n}\n","import { extent, format, utcFormat } from \"d3\";\nimport { formatDefault } from \"../format.js\";\nimport { marks } from \"../mark.js\";\nimport { radians } from \"../math.js\";\nimport { range, valueof, arrayify, constant, keyword, identity, number } from \"../options.js\";\nimport { isNoneish, isIterable, isTemporal, maybeInterval, orderof } from \"../options.js\";\nimport { isTemporalScale } from \"../scales.js\";\nimport { offset } from \"../style.js\";\nimport { initializer } from \"../transforms/basic.js\";\nimport { ruleX, ruleY } from \"./rule.js\";\nimport { text, textX, textY } from \"./text.js\";\nimport { vectorX, vectorY } from \"./vector.js\";\nfunction maybeData(data, options) {\n if (arguments.length < 2 && !isIterable(data))\n (options = data), (data = null);\n if (options === undefined)\n options = {};\n return [data, options];\n}\nfunction maybeAnchor({ anchor } = {}, anchors) {\n return anchor === undefined ? anchors[0] : keyword(anchor, \"anchor\", anchors);\n}\nfunction anchorY(options) {\n return maybeAnchor(options, [\"left\", \"right\"]);\n}\nfunction anchorFy(options) {\n return maybeAnchor(options, [\"right\", \"left\"]);\n}\nfunction anchorX(options) {\n return maybeAnchor(options, [\"bottom\", \"top\"]);\n}\nfunction anchorFx(options) {\n return maybeAnchor(options, [\"top\", \"bottom\"]);\n}\n/** \n * ```js\n * Plot.axisY({anchor: \"left\", tickSpacing: 35})\n * ```\n * \n * Returns a new *y* axis with the given *options*.\n * \n */\nexport function axisY() {\n const [data, options] = maybeData(...arguments);\n return axisKy(\"y\", anchorY(options), data, options);\n}\n/** \n * ```js\n * Plot.axisFy({anchor: \"right\", label: null})\n * ```\n * \n * Returns a new *fy* axis with the given *options*.\n * \n */\nexport function axisFy() {\n const [data, options] = maybeData(...arguments);\n return axisKy(\"fy\", anchorFy(options), data, options);\n}\n/** \n * ```js\n * Plot.axisX({anchor: \"bottom\", tickSpacing: 80})\n * ```\n * \n * Returns a new *x* axis with the given *options*.\n * \n */\nexport function axisX() {\n const [data, options] = maybeData(...arguments);\n return axisKx(\"x\", anchorX(options), data, options);\n}\n/** \n * ```js\n * Plot.axisFx({anchor: \"top\", label: null})\n * ```\n * \n * Returns a new *fx* axis with the given *options*.\n * \n */\nexport function axisFx() {\n const [data, options] = maybeData(...arguments);\n return axisKx(\"fx\", anchorFx(options), data, options);\n}\nfunction axisKy(k, anchor, data, { color = \"currentColor\", opacity = 1, stroke = color, strokeOpacity = opacity, strokeWidth = 1, fill = color, fillOpacity = opacity, textAnchor, textStroke, textStrokeOpacity, textStrokeWidth, tickSize = k === \"y\" ? 6 : 0, tickPadding, tickRotate, x, marginTop = 20, marginRight = anchor === \"right\" ? 40 : 0, marginBottom = 20, marginLeft = anchor === \"left\" ? 40 : 0, label, labelOffset, labelAnchor, ...options }) {\n tickSize = number(tickSize);\n tickPadding = number(tickPadding);\n tickRotate = number(tickRotate);\n if (labelAnchor !== undefined)\n labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"top\", \"bottom\"]);\n return marks(tickSize && !isNoneish(stroke)\n ? axisTickKy(k, anchor, data, {\n stroke,\n strokeOpacity,\n strokeWidth,\n tickSize,\n tickPadding,\n tickRotate,\n x,\n ...options\n })\n : null, !isNoneish(fill)\n ? axisTextKy(k, anchor, data, {\n fill,\n fillOpacity,\n stroke: textStroke,\n strokeOpacity: textStrokeOpacity,\n strokeWidth: textStrokeWidth,\n textAnchor,\n tickSize,\n tickPadding,\n tickRotate,\n x,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n ...options\n })\n : null, !isNoneish(fill) && label !== null\n ? text([], {\n fill,\n fillOpacity,\n ...options,\n lineWidth: undefined,\n textOverflow: undefined,\n facet: \"super\",\n x: null,\n y: null,\n initializer: function (data, facets, channels, scales, dimensions) {\n const scale = scales[k];\n const { marginTop, marginRight, marginBottom, marginLeft } = (k === \"y\" && dimensions.inset) || dimensions;\n const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"top\");\n const clo = labelOffset ?? (anchor === \"right\" ? marginRight : marginLeft) - 3;\n if (cla === \"center\") {\n this.textAnchor = undefined; // middle\n this.lineAnchor = anchor === \"right\" ? \"bottom\" : \"top\";\n this.frameAnchor = anchor;\n this.rotate = -90;\n }\n else {\n this.textAnchor = anchor === \"right\" ? \"end\" : \"start\";\n this.lineAnchor = cla;\n this.frameAnchor = `${cla}-${anchor}`;\n this.rotate = 0;\n }\n this.dy = cla === \"top\" ? 3 - marginTop : cla === \"bottom\" ? marginBottom - 3 : 0;\n this.dx = anchor === \"right\" ? clo : -clo;\n this.ariaLabel = `${k}-axis label`;\n return {\n facets: [[0]],\n channels: {\n text: {\n value: [label === undefined ? inferAxisLabel(k, scale, cla) : label]\n }\n }\n };\n }\n })\n : null);\n}\nfunction axisKx(k, anchor, data, { color = \"currentColor\", opacity = 1, stroke = color, strokeOpacity = opacity, strokeWidth = 1, fill = color, fillOpacity = opacity, textAnchor, textStroke, textStrokeOpacity, textStrokeWidth, tickSize = k === \"x\" ? 6 : 0, tickPadding, tickRotate, y, marginTop = anchor === \"top\" ? 30 : 0, marginRight = 20, marginBottom = anchor === \"bottom\" ? 30 : 0, marginLeft = 20, label, labelAnchor, labelOffset, ...options }) {\n tickSize = number(tickSize);\n tickPadding = number(tickPadding);\n tickRotate = number(tickRotate);\n if (labelAnchor !== undefined)\n labelAnchor = keyword(labelAnchor, \"labelAnchor\", [\"center\", \"left\", \"right\"]);\n return marks(tickSize && !isNoneish(stroke)\n ? axisTickKx(k, anchor, data, {\n stroke,\n strokeOpacity,\n strokeWidth,\n tickSize,\n tickPadding,\n tickRotate,\n y,\n ...options\n })\n : null, !isNoneish(fill)\n ? axisTextKx(k, anchor, data, {\n fill,\n fillOpacity,\n stroke: textStroke,\n strokeOpacity: textStrokeOpacity,\n strokeWidth: textStrokeWidth,\n textAnchor,\n tickSize,\n tickPadding,\n tickRotate,\n y,\n marginTop,\n marginRight,\n marginBottom,\n marginLeft,\n ...options\n })\n : null, !isNoneish(fill) && label !== null\n ? text([], {\n fill,\n fillOpacity,\n ...options,\n lineWidth: undefined,\n textOverflow: undefined,\n facet: \"super\",\n x: null,\n y: null,\n initializer: function (data, facets, channels, scales, dimensions) {\n const scale = scales[k];\n const { marginTop, marginRight, marginBottom, marginLeft } = (k === \"x\" && dimensions.inset) || dimensions;\n const cla = labelAnchor ?? (scale.bandwidth ? \"center\" : \"right\");\n const clo = labelOffset ?? (anchor === \"top\" ? marginTop : marginBottom) - 3;\n if (cla === \"center\") {\n this.frameAnchor = anchor;\n this.textAnchor = undefined; // middle\n }\n else {\n this.frameAnchor = `${anchor}-${cla}`;\n this.textAnchor = cla === \"right\" ? \"end\" : \"start\";\n }\n this.lineAnchor = anchor;\n this.dy = anchor === \"top\" ? -clo : clo;\n this.dx = cla === \"right\" ? marginRight - 3 : cla === \"left\" ? 3 - marginLeft : 0;\n this.ariaLabel = `${k}-axis label`;\n return {\n facets: [[0]],\n channels: {\n text: {\n value: [label === undefined ? inferAxisLabel(k, scale, cla) : label]\n }\n }\n };\n }\n })\n : null);\n}\nfunction axisTickKy(k, anchor, data, { strokeWidth = 1, strokeLinecap = null, strokeLinejoin = null, facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, inset = 0, insetLeft = inset, insetRight = inset, dx = 0, y = k === \"y\" ? undefined : null, ...options }) {\n return axisMark(vectorY, k, `${k}-axis tick`, data, {\n strokeWidth,\n strokeLinecap,\n strokeLinejoin,\n facetAnchor,\n frameAnchor,\n y,\n ...options,\n dx: anchor === \"left\" ? +dx - offset + +insetLeft : +dx + offset - insetRight,\n anchor: \"start\",\n length: tickSize,\n shape: anchor === \"left\" ? shapeTickLeft : shapeTickRight\n });\n}\nfunction axisTickKx(k, anchor, data, { strokeWidth = 1, strokeLinecap = null, strokeLinejoin = null, facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, inset = 0, insetTop = inset, insetBottom = inset, dy = 0, x = k === \"x\" ? undefined : null, ...options }) {\n return axisMark(vectorX, k, `${k}-axis tick`, data, {\n strokeWidth,\n strokeLinejoin,\n strokeLinecap,\n facetAnchor,\n frameAnchor,\n x,\n ...options,\n dy: anchor === \"bottom\" ? +dy - offset - insetBottom : +dy + offset + +insetTop,\n anchor: \"start\",\n length: tickSize,\n shape: anchor === \"bottom\" ? shapeTickBottom : shapeTickTop\n });\n}\nfunction axisTextKy(k, anchor, data, { facetAnchor = anchor + (k === \"y\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, tickRotate = 0, tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) > 60 ? 4 * Math.cos(tickRotate * radians) : 0), tickFormat, text = typeof tickFormat === \"function\" ? tickFormat : undefined, textAnchor = Math.abs(tickRotate) > 60 ? \"middle\" : anchor === \"left\" ? \"end\" : \"start\", lineAnchor = tickRotate > 60 ? \"top\" : tickRotate < -60 ? \"bottom\" : \"middle\", fontVariant, inset = 0, insetLeft = inset, insetRight = inset, dx = 0, y = k === \"y\" ? undefined : null, ...options }) {\n return axisMark(textY, k, `${k}-axis tick label`, data, {\n facetAnchor,\n frameAnchor,\n text: text === undefined ? null : text,\n textAnchor,\n lineAnchor,\n fontVariant,\n rotate: tickRotate,\n y,\n ...options,\n dx: anchor === \"left\" ? +dx - tickSize - tickPadding + +insetLeft : +dx + +tickSize + +tickPadding - insetRight\n }, function (scale, ticks, channels) {\n if (fontVariant === undefined)\n this.fontVariant = inferFontVariant(scale);\n if (text === undefined)\n channels.text = inferTextChannel(scale, ticks, tickFormat);\n });\n}\nfunction axisTextKx(k, anchor, data, { facetAnchor = anchor + (k === \"x\" ? \"-empty\" : \"\"), frameAnchor = anchor, tickSize, tickRotate = 0, tickPadding = Math.max(3, 9 - tickSize) + (Math.abs(tickRotate) >= 10 ? 4 * Math.cos(tickRotate * radians) : 0), tickFormat, text = typeof tickFormat === \"function\" ? tickFormat : undefined, textAnchor = Math.abs(tickRotate) >= 10 ? ((tickRotate < 0) ^ (anchor === \"bottom\") ? \"start\" : \"end\") : \"middle\", lineAnchor = Math.abs(tickRotate) >= 10 ? \"middle\" : anchor === \"bottom\" ? \"top\" : \"bottom\", fontVariant, inset = 0, insetTop = inset, insetBottom = inset, dy = 0, x = k === \"x\" ? undefined : null, ...options }) {\n return axisMark(textX, k, `${k}-axis tick label`, data, {\n facetAnchor,\n frameAnchor,\n text: text === undefined ? null : text,\n textAnchor,\n lineAnchor,\n fontVariant,\n rotate: tickRotate,\n x,\n ...options,\n dy: anchor === \"bottom\" ? +dy + +tickSize + +tickPadding - insetBottom : +dy - tickSize - tickPadding + +insetTop\n }, function (scale, ticks, channels) {\n if (fontVariant === undefined)\n this.fontVariant = inferFontVariant(scale);\n if (text === undefined)\n channels.text = inferTextChannel(scale, ticks, tickFormat);\n });\n}\nexport function gridY() {\n const [data, options] = maybeData(...arguments);\n return gridKy(\"y\", anchorY(options), data, options);\n}\nexport function gridFy() {\n const [data, options] = maybeData(...arguments);\n return gridKy(\"fy\", anchorFy(options), data, options);\n}\n/** \n * ```js\n * Plot.gridX({strokeDasharray: \"5,3\"})\n * ```\n * \n * Returns a new *x* grid with the given *options*.\n * \n */\nexport function gridX() {\n const [data, options] = maybeData(...arguments);\n return gridKx(\"x\", anchorX(options), data, options);\n}\nexport function gridFx() {\n const [data, options] = maybeData(...arguments);\n return gridKx(\"fx\", anchorFx(options), data, options);\n}\nfunction gridKy(k, anchor, data, { y = k === \"y\" ? undefined : null, x = null, x1 = anchor === \"left\" ? x : null, x2 = anchor === \"right\" ? x : null, ...options }) {\n return axisMark(ruleY, k, `${k}-grid`, data, { y, x1, x2, ...gridDefaults(options) });\n}\nfunction gridKx(k, anchor, data, { x = k === \"x\" ? undefined : null, y = null, y1 = anchor === \"top\" ? y : null, y2 = anchor === \"bottom\" ? y : null, ...options }) {\n return axisMark(ruleX, k, `${k}-grid`, data, { x, y1, y2, ...gridDefaults(options) });\n}\nfunction gridDefaults({ color = \"currentColor\", opacity = 0.1, stroke = color, strokeOpacity = opacity, strokeWidth = 1, ...options }) {\n return { stroke, strokeOpacity, strokeWidth, ...options };\n}\nfunction axisMark(mark, k, ariaLabel, data, options, initialize) {\n let channels;\n const m = mark(data, initializer(options, function (data, facets, _channels, scales) {\n const { [k]: scale } = scales;\n if (!scale)\n throw new Error(`missing scale: ${k}`);\n let { ticks, tickSpacing, interval } = options;\n if (isTemporalScale(scale) && typeof ticks === \"string\")\n (interval = ticks), (ticks = undefined);\n if (data == null) {\n if (isIterable(ticks)) {\n data = arrayify(ticks);\n }\n else if (scale.ticks) {\n if (ticks !== undefined) {\n data = scale.ticks(ticks);\n }\n else {\n interval = maybeInterval(interval === undefined ? scale.interval : interval, scale.type);\n if (interval !== undefined) {\n // For time scales, we could pass the interval directly to\n // scale.ticks because it’s supported by d3.utcTicks; but\n // quantitative scales and d3.ticks do not support numeric\n // intervals for scale.ticks, so we compute them here.\n const [min, max] = extent(scale.domain());\n data = interval.range(min, interval.offset(interval.floor(max))); // inclusive max\n }\n else {\n const [min, max] = extent(scale.range());\n ticks = (max - min) / (tickSpacing === undefined ? (k === \"x\" ? 80 : 35) : tickSpacing);\n data = scale.ticks(ticks);\n }\n }\n }\n else {\n data = scale.domain();\n }\n if (k === \"y\" || k === \"x\") {\n facets = [range(data)];\n }\n else {\n channels[k] = { scale: k, value: identity };\n facets = undefined; // computed automatically by plot\n }\n }\n initialize?.call(this, scale, ticks, channels);\n return {\n data,\n facets,\n channels: Object.fromEntries(Object.entries(channels).map(([name, channel]) => [name, { ...channel, value: valueof(data, channel.value) }]))\n };\n }));\n if (data == null) {\n channels = m.channels;\n m.channels = {};\n }\n else {\n channels = {};\n }\n m.ariaLabel = ariaLabel;\n return m;\n}\nfunction inferTextChannel(scale, ticks, tickFormat) {\n return { value: inferTickFormat(scale, ticks, tickFormat) };\n}\n// D3’s ordinal scales simply use toString by default, but if the ordinal scale\n// domain (or ticks) are numbers or dates (say because we’re applying a time\n// interval to the ordinal scale), we want Plot’s default formatter.\nfunction inferTickFormat(scale, ticks, tickFormat) {\n return scale.tickFormat\n ? scale.tickFormat(isIterable(ticks) ? null : ticks, tickFormat)\n : tickFormat === undefined\n ? formatDefault\n : typeof tickFormat === \"string\"\n ? (isTemporal(scale.domain()) ? utcFormat : format)(tickFormat)\n : constant(tickFormat);\n}\nconst shapeTickBottom = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(0, l);\n }\n};\nconst shapeTickTop = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(0, -l);\n }\n};\nconst shapeTickLeft = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(-l, 0);\n }\n};\nconst shapeTickRight = {\n draw(context, l) {\n context.moveTo(0, 0);\n context.lineTo(l, 0);\n }\n};\n// TODO Unify this with the other inferFontVariant; here we only have a scale\n// function rather than a scale descriptor.\nfunction inferFontVariant(scale) {\n return scale.bandwidth && scale.interval === undefined ? undefined : \"tabular-nums\";\n}\n// Determines whether the scale points in the “positive” (right or down) or\n// “negative” (left or up) direction; if the scale order cannot be determined,\n// returns NaN; used to assign an appropriate label arrow.\nfunction inferScaleOrder(scale) {\n return Math.sign(orderof(scale.domain())) * Math.sign(orderof(scale.range()));\n}\n// Takes the scale label, and if this is not an ordinal scale and the label was\n// inferred from an associated channel, adds an orientation-appropriate arrow.\nfunction inferAxisLabel(key, scale, labelAnchor) {\n const label = scale.label;\n if (scale.bandwidth || !label?.inferred)\n return label;\n const order = inferScaleOrder(scale);\n return order\n ? key === \"x\" || labelAnchor === \"center\"\n ? (key === \"x\") === order < 0\n ? `← ${label}`\n : `${label} →`\n : `${order < 0 ? \"↑ \" : \"↓ \"}${label}`\n : label;\n}\n","import { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { maybeKeyword, number } from \"../options.js\";\nimport { applyDirectStyles, applyIndirectStyles, applyTransform } from \"../style.js\";\nconst defaults = {\n ariaLabel: \"frame\",\n fill: \"none\",\n stroke: \"currentColor\"\n};\nconst lineDefaults = {\n ariaLabel: \"frame\",\n fill: null,\n stroke: \"currentColor\",\n strokeLinecap: \"square\"\n};\nexport class Frame extends Mark {\n constructor(options = {}) {\n const { anchor = null, inset = 0, insetTop = inset, insetRight = inset, insetBottom = inset, insetLeft = inset, rx, ry } = options;\n super(undefined, undefined, options, anchor == null ? defaults : lineDefaults);\n this.anchor = maybeKeyword(anchor, \"anchor\", [\"top\", \"right\", \"bottom\", \"left\"]);\n this.insetTop = number(insetTop);\n this.insetRight = number(insetRight);\n this.insetBottom = number(insetBottom);\n this.insetLeft = number(insetLeft);\n this.rx = number(rx);\n this.ry = number(ry);\n }\n render(index, scales, channels, dimensions, context) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height } = dimensions;\n const { anchor, insetTop, insetRight, insetBottom, insetLeft, rx, ry } = this;\n const x1 = marginLeft + insetLeft;\n const x2 = width - marginRight - insetRight;\n const y1 = marginTop + insetTop;\n const y2 = height - marginBottom - insetBottom;\n return create(anchor ? \"svg:line\" : \"svg:rect\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyDirectStyles, this)\n .call(applyTransform, this, {})\n .call(anchor === \"left\"\n ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x1).attr(\"y1\", y1).attr(\"y2\", y2)\n : anchor === \"right\"\n ? (line) => line.attr(\"x1\", x2).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y2)\n : anchor === \"top\"\n ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y1).attr(\"y2\", y1)\n : anchor === \"bottom\"\n ? (line) => line.attr(\"x1\", x1).attr(\"x2\", x2).attr(\"y1\", y2).attr(\"y2\", y2)\n : (rect) => rect\n .attr(\"x\", x1)\n .attr(\"y\", y1)\n .attr(\"width\", x2 - x1)\n .attr(\"height\", y2 - y1)\n .attr(\"rx\", rx)\n .attr(\"ry\", ry))\n .node();\n }\n}\n/** \n * ```js\n * Plot.frame({stroke: \"red\"})\n * ```\n * \n * Returns a new frame with the specified *options*.\n * \n */\nexport function frame(options) {\n return new Frame(options);\n}\n","import { select } from \"d3\";\nimport { Channel, inferChannelScale } from \"./channel.js\";\nimport { Context, create } from \"./context.js\";\nimport { Dimensions } from \"./dimensions.js\";\nimport { Facets, facetExclude, facetGroups, facetOrder, facetTranslate, facetFilter } from \"./facet.js\";\nimport { Legends, exposeLegends } from \"./legends.js\";\nimport { Mark } from \"./mark.js\";\nimport { axisFx, axisFy, axisX, axisY, gridFx, gridFy, gridX, gridY } from \"./marks/axis.js\";\nimport { frame } from \"./marks/frame.js\";\nimport { arrayify, isColor, isIterable, isNone, isScaleOptions, map, yes, maybeInterval } from \"./options.js\";\nimport { Scales, ScaleFunctions, autoScaleRange, exposeScales, innerDimensions, outerDimensions } from \"./scales.js\";\nimport { position, registry as scaleRegistry } from \"./scales/index.js\";\nimport { applyInlineStyles, maybeClassName } from \"./style.js\";\nimport { consumeWarnings, warn } from \"./warnings.js\";\n/** \n * Renders a new plot given the specified *options* and returns the corresponding SVG or HTML figure element. All *options* are optional.\n * \n * ### Mark options\n * \n * The **marks** option specifies an array of [marks](https://github.com/observablehq/plot/blob/main/README.md#marks) to render. Each mark has its own data and options; see the respective mark type (*e.g.*, [bar](https://github.com/observablehq/plot/blob/main/README.md#bar) or [dot](https://github.com/observablehq/plot/blob/main/README.md#dot)) for which mark options are supported. Each mark may be a nested array of marks, allowing composition. Marks may also be a function which returns an SVG element, if you wish to insert some arbitrary content into your plot. And marks may be null or undefined, which produce no output; this is useful for showing marks conditionally (*e.g.*, when a box is checked). Marks are drawn in *z* order, last on top. For example, here a single rule at *y* = 0 is drawn on top of blue bars for the [*alphabet* dataset](https://github.com/observablehq/plot/blob/main/test/data/alphabet.csv).\n * \n * ```js\n * Plot.plot({\n * marks: [\n * Plot.barY(alphabet, {x: \"letter\", y: \"frequency\", fill: \"steelblue\"}),\n * Plot.ruleY([0])\n * ]\n * })\n * ```\n * \n * ### Layout options\n * \n * These options determine the overall layout of the plot; all are specified as numbers in pixels:\n * \n * * **marginTop** - the top margin\n * * **marginRight** - the right margin\n * * **marginBottom** - the bottom margin\n * * **marginLeft** - the left margin\n * * **margin** - shorthand for the four margins\n * * **width** - the outer width of the plot (including margins)\n * * **height** - the outer height of the plot (including margins)\n * * **aspectRatio** - the desired aspect ratio of data (affecting default **height**)\n * \n * The default **width** is 640. On Observable, the width can be set to the [standard width](https://github.com/observablehq/stdlib/blob/main/README.md#width) to make responsive plots. The default **height** is chosen automatically based on the plot’s associated scales; for example, if *y* is linear and there is no *fy* scale, it might be 396. The default margins depend on the maximum margins of the plot’s constituent [marks](https://github.com/observablehq/plot/blob/main/README.md#mark-options). While most marks default to zero margins (because they are drawn inside the chart area), Plot’s [axis mark](https://github.com/observablehq/plot/blob/main/README.md#axis) has non-zero default margins.\n * \n * The **aspectRatio** option, if not null, computes a default **height** such that a variation of one unit in the *x* dimension is represented by the corresponding number of pixels as a variation in the *y* dimension of one unit. Note: when using facets, set the *fx* and *fy* scales’ **round** option to false if you need an exact aspect ratio.\n * \n * The **style** option allows custom styles to override Plot’s defaults. It may be specified either as a string of inline styles (*e.g.*, `\"color: red;\"`, in the same fashion as assigning [*element*.style](https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style)) or an object of properties (*e.g.*, `{color: \"red\"}`, in the same fashion as assigning [*element*.style properties](https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration)). Note that unitless numbers ([quirky lengths](https://www.w3.org/TR/css-values-4/#deprecated-quirky-length)) such as `{padding: 20}` may not supported by some browsers; you should instead specify a string with units such as `{padding: \"20px\"}`. By default, the returned plot has a white background, a max-width of 100%, and the system-ui font. Plot’s marks and axes default to [currentColor](https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentcolor_keyword), meaning that they will inherit the surrounding content’s color. For example, a dark theme:\n * \n * ```js\n * Plot.plot({\n * marks: …,\n * style: {\n * background: \"black\",\n * color: \"white\"\n * }\n * })\n * ```\n * \n * If a **caption** is specified, Plot.plot wraps the generated SVG element in an HTML figure element with a figcaption, returning the figure. To specify an HTML caption, consider using the [`html` tagged template literal](http://github.com/observablehq/htl); otherwise, the specified string represents text that will be escaped as needed.\n * \n * ```js\n * Plot.plot({\n * marks: …,\n * caption: html`Figure 1. This chart has a fancy caption.`\n * })\n * ```\n * \n * The generated SVG element has a random class name which applies a default stylesheet. Use the top-level **className** option to specify that class name.\n * \n * The **document** option specifies the [document](https://developer.mozilla.org/en-US/docs/Web/API/Document) used to create plot elements. It defaults to window.document, but can be changed to another document, say when using a virtual DOM library for server-side rendering in Node.\n * \n * ### Scale options\n * \n * Plot passes data through [scales](https://observablehq.com/@observablehq/plot-scales) as needed before rendering marks. A scale maps abstract values such as time or temperature to visual values such as position or color. Within a given plot, marks share scales. For example, if a plot has two Plot.line marks, both share the same *x* and *y* scales for a consistent representation of data. (Plot does not currently support dual-axis charts, which are [not advised](https://blog.datawrapper.de/dualaxis/).)\n * \n * ```js\n * Plot.plot({\n * marks: [\n * Plot.line(aapl, {x: \"Date\", y: \"Close\"}),\n * Plot.line(goog, {x: \"Date\", y: \"Close\"})\n * ]\n * })\n * ```\n * \n * Each scale’s options are specified as a nested options object with the corresponding scale name within the top-level plot *options*:\n * \n * * **x** - horizontal position\n * * **y** - vertical position\n * * **r** - radius (size)\n * * **color** - fill or stroke\n * * **opacity** - fill or stroke opacity\n * * **length** - linear length (for [vectors](https://github.com/observablehq/plot/blob/main/README.md#vector))\n * * **symbol** - categorical symbol (for [dots](https://github.com/observablehq/plot/blob/main/README.md#dot))\n * \n * For example, to set the domain for the *x* and *y* scales:\n * \n * ```js\n * Plot.plot({\n * x: {\n * domain: [new Date(\"1880-01-01\"), new Date(\"2016-11-01\")]\n * },\n * y: {\n * domain: [-0.78, 1.35]\n * }\n * })\n * ```\n * \n * Plot supports many scale types. Some scale types are for quantitative data: values that can be added or subtracted, such as temperature or time. Other scale types are for ordinal or categorical data: unquantifiable values that can only be ordered, such as t-shirt sizes, or values with no inherent order that can only be tested for equality, such as types of fruit. Some scale types are further intended for specific visual encodings: for example, as [position](https://github.com/observablehq/plot/blob/main/README.md#position-options) or [color](https://github.com/observablehq/plot/blob/main/README.md#color-options).\n * \n * You can set the scale type explicitly via the *scale*.**type** option, though typically the scale type is inferred automatically. Some marks mandate a particular scale type: for example, [Plot.barY](https://github.com/observablehq/plot/blob/main/README.md#plotbarydata-options) requires that the *x* scale is a *band* scale. Some scales have a default type: for example, the *radius* scale defaults to *sqrt* and the *opacity* scale defaults to *linear*. Most often, the scale type is inferred from associated data, pulled either from the domain (if specified) or from associated channels. Strings and booleans imply an ordinal scale; dates imply a UTC scale; and anything else is linear. Unless they represent text, we recommend explicitly converting strings to more specific types when loading data (*e.g.*, with d3.autoType or Observable’s FileAttachment). For simplicity’s sake, Plot assumes that data is consistently typed; type inference is based solely on the first non-null, non-undefined value.\n * \n * For quantitative data (*i.e.* numbers), a mathematical transform may be applied to the data by changing the scale type:\n * \n * * *linear* (default) - linear transform (translate and scale)\n * * *pow* - power (exponential) transform\n * * *sqrt* - square-root transform (*pow* transform with exponent = 0.5)\n * * *log* - logarithmic transform\n * * *symlog* - bi-symmetric logarithmic transform per [Webber *et al.*](https://www.researchgate.net/publication/233967063_A_bi-symmetric_log_transformation_for_wide-range_data)\n * \n * The appropriate transform depends on the data’s distribution and what you wish to know. A *sqrt* transform exaggerates differences between small values at the expense of large values; it is a special case of the *pow* transform which has a configurable *scale*.**exponent** (0.5 for *sqrt*). A *log* transform is suitable for comparing orders of magnitude and can only be used when the domain does not include zero. The base defaults to 10 and can be specified with the *scale*.**base** option; note that this only affects the axis ticks and not the scale’s behavior. A *symlog* transform is more elaborate, but works well with wide-range values that include zero; it can be configured with the *scale*.**constant** option (default 1).\n * \n * For temporal data (*i.e.* dates), two variants of a *linear* scale are also supported:\n * \n * * *utc* (default, recommended) - UTC time\n * * *time* - local time\n * \n * UTC is recommended over local time as charts in UTC time are guaranteed to appear consistently to all viewers whereas charts in local time will depend on the viewer’s time zone. Due to limitations in JavaScript’s Date class, Plot does not yet support an explicit time zone other than UTC.\n * \n * For ordinal data (*e.g.*, strings), use the *ordinal* scale type or the *point* or *band* [position scale types](https://github.com/observablehq/plot/blob/main/README.md#position-options). The *categorical* scale type is also supported; it is equivalent to *ordinal* except as a [color scale](https://github.com/observablehq/plot/blob/main/README.md#color-options), where it provides a different default color scheme. (Since position is inherently ordinal or even quantitative, categorical data must be assigned an effective order when represented as position, and hence *categorical* and *ordinal* may be considered synonymous in context.)\n * \n * You can opt-out of a scale using the *identity* scale type. This is useful if you wish to specify literal colors or pixel positions within a mark channel rather than relying on the scale to convert abstract values into visual values. For position scales (*x* and *y*), an *identity* scale is still quantitative and may produce an axis, yet unlike a *linear* scale the domain and range are fixed based on the plot layout. (To opt out of a scale for a single channel, you can specify the channel values as a {value, scale} object; see [mark options](https://github.com/observablehq/plot/blob/main/README.md#mark-options).)\n * \n * Quantitative scales, as well as identity position scales, coerce channel values to numbers; both null and undefined are coerced to NaN. Similarly, time scales coerce channel values to dates; numbers are assumed to be milliseconds since UNIX epoch, while strings are assumed to be in [ISO 8601 format](https://github.com/mbostock/isoformat/blob/main/README.md#parsedate-fallback).\n * \n * A scale’s domain (the extent of its inputs, abstract values) and range (the extent of its outputs, visual values) are typically inferred automatically. You can set them explicitly using these options:\n * \n * * *scale*.**domain** - typically [*min*, *max*], or an array of ordinal or categorical values\n * * *scale*.**range** - typically [*min*, *max*], or an array of ordinal or categorical values\n * * *scale*.**unknown** - the desired output value (defaults to undefined) for invalid input values\n * * *scale*.**reverse** - reverses the domain (or in somes cases, the range), say to flip the chart along *x* or *y*\n * * *scale*.**interval** - an interval or time interval (for interval data; see below)\n * \n * For most quantitative scales, the default domain is the [*min*, *max*] of all values associated with the scale. For the *radius* and *opacity* scales, the default domain is [0, *max*] to ensure a meaningful value encoding. For ordinal scales, the default domain is the set of all distinct values associated with the scale in natural ascending order; for a different order, set the domain explicitly or add a [sort option](https://github.com/observablehq/plot/blob/main/README.md#sort-options) to an associated mark. For threshold scales, the default domain is [0] to separate negative and non-negative values. For quantile scales, the default domain is the set of all defined values associated with the scale. If a scale is reversed, it is equivalent to setting the domain as [*max*, *min*] instead of [*min*, *max*].\n * \n * The default range depends on the scale: for [position scales](https://github.com/observablehq/plot/blob/main/README.md#position-options) (*x*, *y*, *fx*, and *fy*), the default range depends on the plot’s [size and margins](https://github.com/observablehq/plot/blob/main/README.md#layout-options). For [color scales](https://github.com/observablehq/plot/blob/main/README.md#color-options), there are default color schemes for quantitative, ordinal, and categorical data. For opacity, the default range is [0, 1]. And for radius, the default range is designed to produce dots of “reasonable” size assuming a *sqrt* scale type for accurate area representation: zero maps to zero, the first quartile maps to a radius of three pixels, and other values are extrapolated. This convention for radius ensures that if the scale’s data values are all equal, dots have the default constant radius of three pixels, while if the data varies, dots will tend to be larger.\n * \n * The behavior of the *scale*.**unknown** option depends on the scale type. For quantitative and temporal scales, the unknown value is used whenever the input value is undefined, null, or NaN. For ordinal or categorical scales, the unknown value is returned for any input value outside the domain. For band or point scales, the unknown option has no effect; it is effectively always equal to undefined. If the unknown option is set to undefined (the default), or null or NaN, then the affected input values will be considered undefined and filtered from the output.\n * \n * For data at regular intervals, such as integer values or daily samples, the *scale*.**interval** option can be used to enforce uniformity. The specified *interval*—such as d3.utcMonth—must expose an *interval*.floor(*value*), *interval*.offset(*value*), and *interval*.range(*start*, *stop*) functions. The option can also be specified as a number, in which case it will be promoted to a numeric interval with the given step. The option can alternatively be specified as a string (second, minute, hour, day, week, month, year, monday, tuesday, wednesday, thursday, friday, saturday, sunday) naming the corresponding UTC interval. This option sets the default *scale*.transform to the given interval’s *interval*.floor function. In addition, the default *scale*.domain is an array of uniformly-spaced values spanning the extent of the values associated with the scale.\n * \n * Quantitative scales can be further customized with additional options:\n * \n * * *scale*.**clamp** - if true, clamp input values to the scale’s domain\n * * *scale*.**nice** - if true (or a tick count), extend the domain to nice round values\n * * *scale*.**zero** - if true, extend the domain to include zero if needed\n * * *scale*.**percent** - if true, transform proportions in [0, 1] to percentages in [0, 100]\n * \n * Clamping is typically used in conjunction with setting an explicit domain since if the domain is inferred, no values will be outside the domain. Clamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Top-level **clamp**, **nice**, and **zero** options are supported as shorthand for setting the respective option on all scales.\n * \n * The *scale*.**transform** option allows you to apply a function to all values before they are passed through the scale. This is convenient for transforming a scale’s data, say to convert to thousands or between temperature units.\n * \n * ```js\n * Plot.plot({\n * y: {\n * label: \"↑ Temperature (°F)\",\n * transform: f => f * 9 / 5 + 32 // convert Celsius to Fahrenheit\n * },\n * marks: …\n * })\n * ```\n * \n */\nexport function plot(options = {}) {\n const { facet, style, caption, ariaLabel, ariaDescription } = options;\n // className for inline styles\n const className = maybeClassName(options.className);\n // Flatten any nested marks.\n const marks = options.marks === undefined ? [] : flatMarks(options.marks);\n // Compute the top-level facet state. This has roughly the same structure as\n // mark-specific facet state, except there isn’t a facetsIndex, and there’s a\n // data and dataLength so we can warn the user if a different data of the same\n // length is used in a mark.\n const topFacetState = maybeTopFacet(facet, options);\n // Construct a map from (faceted) Mark instance to facet state, including:\n // channels - an {fx?, fy?} object to add to the fx and fy scale\n // groups - a possibly-nested map from facet values to indexes in the data array\n // facetsIndex - a sparse nested array of indices corresponding to the valid facets\n const facetStateByMark = new Map();\n for (const mark of marks) {\n const facetState = maybeMarkFacet(mark, topFacetState, options);\n if (facetState)\n facetStateByMark.set(mark, facetState);\n }\n // Compute a Map from scale name to an array of associated channels.\n const channelsByScale = new Map();\n if (topFacetState)\n addScaleChannels(channelsByScale, [topFacetState]);\n addScaleChannels(channelsByScale, facetStateByMark);\n // Add implicit axis marks. Because this happens after faceting (because it\n // depends on whether faceting is present), we must initialize the facet state\n // of any implicit axes, too.\n const axes = flatMarks(inferAxes(marks, channelsByScale, options));\n for (const mark of axes) {\n const facetState = maybeMarkFacet(mark, topFacetState, options);\n if (facetState)\n facetStateByMark.set(mark, facetState);\n }\n marks.unshift(...axes);\n // All the possible facets are given by the domains of the fx or fy scales, or\n // the cross-product of these domains if we facet by both x and y. We sort\n // them in order to apply the facet filters afterwards.\n const facets = Facets(channelsByScale, options);\n if (facets !== undefined) {\n const topFacetsIndex = topFacetState ? facetFilter(facets, topFacetState) : undefined;\n // Compute a facet index for each mark, parallel to the facets array. For\n // mark-level facets, compute an index for that mark’s data and options.\n // Otherwise, use the top-level facet index.\n for (const mark of marks) {\n if (mark.facet === null || mark.facet === \"super\")\n continue;\n const facetState = facetStateByMark.get(mark);\n if (facetState === undefined)\n continue;\n facetState.facetsIndex = mark.fx != null || mark.fy != null ? facetFilter(facets, facetState) : topFacetsIndex;\n }\n // The cross product of the domains of fx and fy can include fx-fy\n // combinations for which no mark has an instance associated with that\n // combination, and therefore we don’t want to render this facet (not even\n // the frame). The same can occur if you specify the domain of fx and fy\n // explicitly, but there is no mark instance associated with some values in\n // the domain. Expunge empty facets, and clear the corresponding elements\n // from the nested index in each mark.\n const nonEmpty = new Set();\n for (const { facetsIndex } of facetStateByMark.values()) {\n facetsIndex?.forEach((index, i) => {\n if (index?.length > 0) {\n nonEmpty.add(i);\n }\n });\n }\n // If all the facets are empty (as when none of the marks are actually\n // faceted), none of them are empty.\n facets.forEach(0 < nonEmpty.size && nonEmpty.size < facets.length\n ? (f, i) => (f.empty = !nonEmpty.has(i))\n : (f) => (f.empty = false));\n // For any mark using the “exclude” facet mode, invert the index.\n for (const mark of marks) {\n if (mark.facet === \"exclude\") {\n const facetState = facetStateByMark.get(mark);\n if (facetState !== undefined)\n facetState.facetsIndex = facetExclude(facetState.facetsIndex);\n }\n }\n }\n // If a scale is explicitly declared in options, initialize its associated\n // channels to the empty array; this will guarantee that a corresponding scale\n // will be created later (even if there are no other channels). Ignore facet\n // scale declarations, which are handled above.\n for (const key of scaleRegistry.keys()) {\n if (isScaleOptions(options[key]) && key !== \"fx\" && key !== \"fy\") {\n channelsByScale.set(key, []);\n }\n }\n // A Map from Mark instance to its render state, including:\n // index - the data index e.g. [0, 1, 2, 3, …]\n // channels - an array of materialized channels e.g. [[\"x\", {value}], …]\n // faceted - a boolean indicating whether this mark is faceted\n // values - an object of scaled values e.g. {x: [40, 32, …], …}\n const stateByMark = new Map();\n // Initialize the marks’ state.\n for (const mark of marks) {\n if (stateByMark.has(mark))\n throw new Error(\"duplicate mark; each mark must be unique\");\n const { facetsIndex, channels: facetChannels } = facetStateByMark.get(mark) ?? {};\n const { data, facets, channels } = mark.initialize(facetsIndex, facetChannels);\n applyScaleTransforms(channels, options);\n stateByMark.set(mark, { data, facets, channels });\n }\n // Initalize the scales and dimensions.\n const scaleDescriptors = Scales(addScaleChannels(channelsByScale, stateByMark), options);\n const scales = ScaleFunctions(scaleDescriptors);\n const dimensions = Dimensions(scaleDescriptors, marks, options);\n autoScaleRange(scaleDescriptors, dimensions);\n const { fx, fy } = scales;\n const subdimensions = fx || fy ? innerDimensions(scaleDescriptors, dimensions) : dimensions;\n const superdimensions = fx || fy ? actualDimensions(scales, dimensions) : dimensions;\n const context = Context(options, subdimensions, scaleDescriptors);\n // Reinitialize; for deriving channels dependent on other channels.\n const newByScale = new Set();\n for (const [mark, state] of stateByMark) {\n if (mark.initializer != null) {\n const dimensions = mark.facet === \"super\" ? superdimensions : subdimensions;\n const update = mark.initializer(state.data, state.facets, state.channels, scales, dimensions, context);\n if (update.data !== undefined) {\n state.data = update.data;\n }\n if (update.facets !== undefined) {\n state.facets = update.facets;\n }\n if (update.channels !== undefined) {\n inferChannelScales(update.channels);\n Object.assign(state.channels, update.channels);\n for (const channel of Object.values(update.channels)) {\n const { scale } = channel;\n // Initializers aren’t allowed to redefine position scales as this\n // would introduce a circular dependency; so simply scale these\n // channels as-is rather than creating new scales, and assume that\n // they already have the scale’s transform applied, if any (e.g., when\n // generating ticks for the axis mark).\n if (scale != null && scaleRegistry.get(scale) !== position) {\n applyScaleTransform(channel, options);\n newByScale.add(scale);\n }\n }\n // If the initializer returns new mark-level facet channels, we must\n // also recompute the facet state.\n const { fx, fy } = update.channels;\n if (fx != null || fy != null) {\n const facetState = facetStateByMark.get(mark) ?? { channels: {} };\n if (fx != null)\n facetState.channels.fx = fx;\n if (fy != null)\n facetState.channels.fy = fy;\n facetState.groups = facetGroups(state.data, facetState.channels);\n facetState.facetsIndex = state.facets = facetFilter(facets, facetState);\n facetStateByMark.set(mark, facetState);\n }\n }\n }\n }\n // Reconstruct scales if new scaled channels were created during\n // reinitialization. Preserve existing scale labels, if any.\n if (newByScale.size) {\n const newChannelsByScale = new Map();\n addScaleChannels(newChannelsByScale, stateByMark, (key) => newByScale.has(key));\n addScaleChannels(channelsByScale, stateByMark, (key) => newByScale.has(key));\n const newScaleDescriptors = inheritScaleLabels(Scales(newChannelsByScale, options), scaleDescriptors);\n const newScales = ScaleFunctions(newScaleDescriptors);\n Object.assign(scaleDescriptors, newScaleDescriptors);\n Object.assign(scales, newScales);\n }\n // Compute value objects, applying scales and projection as needed.\n for (const [mark, state] of stateByMark) {\n state.values = mark.scale(state.channels, scales, context);\n }\n const { width, height } = dimensions;\n const svg = create(\"svg\", context)\n .attr(\"class\", className)\n .attr(\"fill\", \"currentColor\")\n .attr(\"font-family\", \"system-ui, sans-serif\")\n .attr(\"font-size\", 10)\n .attr(\"text-anchor\", \"middle\")\n .attr(\"width\", width)\n .attr(\"height\", height)\n .attr(\"viewBox\", `0 0 ${width} ${height}`)\n .attr(\"aria-label\", ariaLabel)\n .attr(\"aria-description\", ariaDescription)\n .call((svg) => svg.append(\"style\").text(`\n .${className} {\n display: block;\n background: white;\n height: auto;\n height: intrinsic;\n max-width: 100%;\n }\n .${className} text,\n .${className} tspan {\n white-space: pre;\n }\n `))\n .call(applyInlineStyles, style)\n .node();\n // Render facets.\n if (facets !== undefined) {\n const facetDomains = { x: fx?.domain(), y: fy?.domain() };\n // Sort the facets to match the fx and fy domains; this is needed because\n // the facets were constructed prior to the fx and fy scales.\n facets.sort(facetOrder(facetDomains));\n // Render the facets.\n select(svg)\n .selectAll()\n .data(facets)\n .enter()\n .append(\"g\")\n .attr(\"aria-label\", \"facet\")\n .attr(\"transform\", facetTranslate(fx, fy, dimensions))\n .each(function (f) {\n let empty = true;\n for (const mark of marks) {\n if (mark.facet === \"super\")\n continue; // rendered below\n const { channels, values, facets: indexes } = stateByMark.get(mark);\n if (!(mark.facetAnchor?.(facets, facetDomains, f) ?? !f.empty))\n continue;\n let index = null;\n if (indexes) {\n index = indexes[facetStateByMark.has(mark) ? f.i : 0];\n index = mark.filter(index, channels, values);\n if (index.length === 0)\n continue;\n index.fi = f.i; // TODO cleaner way of exposing the current facet index?\n }\n const node = mark.render(index, scales, values, subdimensions, context);\n if (node == null)\n continue;\n empty = false;\n this.appendChild(node);\n }\n if (empty)\n this.remove();\n });\n }\n // Render non-faceted marks.\n for (const mark of marks) {\n if (facets !== undefined && mark.facet !== \"super\")\n continue;\n const { channels, values, facets: indexes } = stateByMark.get(mark);\n let index = null;\n if (indexes) {\n index = indexes[0];\n index = mark.filter(index, channels, values);\n if (index.length === 0)\n continue;\n }\n const node = mark.render(index, scales, values, superdimensions, context);\n if (node != null)\n svg.appendChild(node);\n }\n // Wrap the plot in a figure with a caption, if desired.\n let figure = svg;\n const legends = Legends(scaleDescriptors, context, options);\n if (caption != null || legends.length > 0) {\n const { document } = context;\n figure = document.createElement(\"figure\");\n figure.style.maxWidth = \"initial\";\n for (const legend of legends)\n figure.appendChild(legend);\n figure.appendChild(svg);\n if (caption != null) {\n const figcaption = document.createElement(\"figcaption\");\n figcaption.appendChild(caption instanceof Node ? caption : document.createTextNode(caption));\n figure.appendChild(figcaption);\n }\n }\n figure.scale = exposeScales(scaleDescriptors);\n figure.legend = exposeLegends(scaleDescriptors, context, options);\n const w = consumeWarnings();\n if (w > 0) {\n select(svg)\n .append(\"text\")\n .attr(\"x\", width)\n .attr(\"y\", 20)\n .attr(\"dy\", \"-1em\")\n .attr(\"text-anchor\", \"end\")\n .attr(\"font-family\", \"initial\") // fix emoji rendering in Chrome\n .text(\"\\u26a0\\ufe0f\") // emoji variation selector\n .append(\"title\")\n .text(`${w.toLocaleString(\"en-US\")} warning${w === 1 ? \"\" : \"s\"}. Please check the console.`);\n }\n return figure;\n}\nfunction plotThis({ marks = [], ...options } = {}) {\n return plot({ ...options, marks: [...marks, this] });\n}\n// Note: This side-effect avoids a circular dependency.\nMark.prototype.plot = plotThis;\nfunction flatMarks(marks) {\n return marks\n .flat(Infinity)\n .filter((mark) => mark != null)\n .map(markify);\n}\nfunction markify(mark) {\n return typeof mark.render === \"function\" ? mark : new Render(mark);\n}\nclass Render extends Mark {\n constructor(render) {\n if (typeof render !== \"function\")\n throw new TypeError(\"invalid mark; missing render function\");\n super();\n this.render = render;\n }\n render() { }\n}\n// Note: mutates channel.value to apply the scale transform, if any.\nfunction applyScaleTransforms(channels, options) {\n for (const name in channels)\n applyScaleTransform(channels[name], options);\n return channels;\n}\n// Note: mutates channel.value to apply the scale transform, if any.\nfunction applyScaleTransform(channel, options) {\n const { scale } = channel;\n if (scale == null)\n return;\n const { type, percent, interval, transform = percent ? (x) => x * 100 : maybeInterval(interval, type)?.floor } = options[scale] ?? {};\n if (transform != null)\n channel.value = map(channel.value, transform);\n}\n// An initializer may generate channels without knowing how the downstream mark\n// will use them. Marks are typically responsible associated scales with\n// channels, but here we assume common behavior across marks.\nfunction inferChannelScales(channels) {\n for (const name in channels) {\n inferChannelScale(name, channels[name]);\n }\n}\nfunction addScaleChannels(channelsByScale, stateByMark, filter = yes) {\n for (const { channels } of stateByMark.values()) {\n for (const name in channels) {\n const channel = channels[name];\n const { scale } = channel;\n if (scale != null && filter(scale)) {\n const scaleChannels = channelsByScale.get(scale);\n if (scaleChannels !== undefined)\n scaleChannels.push(channel);\n else\n channelsByScale.set(scale, [channel]);\n }\n }\n }\n return channelsByScale;\n}\n// Returns the facet groups, and possibly fx and fy channels, associated with\n// the top-level facet option {data, x, y}.\nfunction maybeTopFacet(facet, options) {\n if (facet == null)\n return;\n const { x, y } = facet;\n if (x == null && y == null)\n return;\n const data = arrayify(facet.data ?? x ?? y);\n if (data === undefined)\n throw new Error(`missing facet data`);\n const channels = {};\n if (x != null)\n channels.fx = Channel(data, { value: x, scale: \"fx\" });\n if (y != null)\n channels.fy = Channel(data, { value: y, scale: \"fy\" });\n applyScaleTransforms(channels, options);\n const groups = facetGroups(data, channels);\n return { channels, groups, data: facet.data };\n}\n// Returns the facet groups, and possibly fx and fy channels, associated with a\n// mark, either through top-level faceting or mark-level facet options {fx, fy}.\nfunction maybeMarkFacet(mark, topFacetState, options) {\n if (mark.facet === null || mark.facet === \"super\")\n return;\n // This mark defines a mark-level facet. TODO There’s some code duplication\n // here with maybeTopFacet that we could reduce.\n const { fx, fy } = mark;\n if (fx != null || fy != null) {\n const data = arrayify(mark.data ?? fx ?? fy);\n if (data === undefined)\n throw new Error(`missing facet data in ${mark.ariaLabel}`);\n if (data === null)\n return; // ignore channel definitions if no data is provided TODO this right?\n const channels = {};\n if (fx != null)\n channels.fx = Channel(data, { value: fx, scale: \"fx\" });\n if (fy != null)\n channels.fy = Channel(data, { value: fy, scale: \"fy\" });\n applyScaleTransforms(channels, options);\n return { channels, groups: facetGroups(data, channels) };\n }\n // This mark links to a top-level facet, if present.\n if (topFacetState === undefined)\n return;\n // TODO Can we link the top-level facet channels here?\n const { channels, groups, data } = topFacetState;\n if (mark.facet !== \"auto\" || mark.data === data)\n return { channels, groups };\n // Warn for the common pitfall of wanting to facet mapped data with the\n // top-level facet option.\n if ((groups.size > 1 || (groups.size === 1 && channels.fx && channels.fy && [...groups][0][1].size > 1)) &&\n arrayify(mark.data)?.length === data.length) {\n warn(`Warning: the ${mark.ariaLabel} mark appears to use faceted data, but isn’t faceted. The mark data has the same length as the facet data and the mark facet option is \"auto\", but the mark data and facet data are distinct. If this mark should be faceted, set the mark facet option to true; otherwise, suppress this warning by setting the mark facet option to false.`);\n }\n}\nfunction inferAxes(marks, channelsByScale, options) {\n let { projection, x = {}, y = {}, fx = {}, fy = {}, axis, grid, facet = {}, facet: { axis: facetAxis = axis, grid: facetGrid } = facet, x: { axis: xAxis = axis, grid: xGrid = xAxis === null ? null : grid } = x, y: { axis: yAxis = axis, grid: yGrid = yAxis === null ? null : grid } = y, fx: { axis: fxAxis = facetAxis, grid: fxGrid = fxAxis === null ? null : facetGrid } = fx, fy: { axis: fyAxis = facetAxis, grid: fyGrid = fyAxis === null ? null : facetGrid } = fy } = options;\n // Disable axes if the corresponding scale is not present.\n if (projection || (!isScaleOptions(x) && !hasScaleChannel(\"x\", marks)))\n xAxis = xGrid = null;\n if (projection || (!isScaleOptions(y) && !hasScaleChannel(\"y\", marks)))\n yAxis = yGrid = null;\n if (!channelsByScale.has(\"fx\"))\n fxAxis = fxGrid = null;\n if (!channelsByScale.has(\"fy\"))\n fyAxis = fyGrid = null;\n // Resolve the default implicit axes by checking for explicit ones.\n if (xAxis === undefined)\n xAxis = !hasAxis(marks, \"x\");\n if (yAxis === undefined)\n yAxis = !hasAxis(marks, \"y\");\n if (fxAxis === undefined)\n fxAxis = !hasAxis(marks, \"fx\");\n if (fyAxis === undefined)\n fyAxis = !hasAxis(marks, \"fy\");\n // Resolve the default orientation of axes.\n if (xAxis === true)\n xAxis = \"bottom\";\n if (yAxis === true)\n yAxis = \"left\";\n if (fxAxis === true)\n fxAxis = xAxis === \"top\" || xAxis === null ? \"bottom\" : \"top\";\n if (fyAxis === true)\n fyAxis = yAxis === \"right\" || yAxis === null ? \"left\" : \"right\";\n const axes = [];\n maybeGrid(axes, fyGrid, gridFy, fy);\n maybeAxis(axes, fyAxis, axisFy, \"right\", \"left\", facet, fy);\n maybeGrid(axes, fxGrid, gridFx, fx);\n maybeAxis(axes, fxAxis, axisFx, \"top\", \"bottom\", facet, fx);\n maybeGrid(axes, yGrid, gridY, y);\n maybeAxis(axes, yAxis, axisY, \"left\", \"right\", options, y);\n maybeGrid(axes, xGrid, gridX, x);\n maybeAxis(axes, xAxis, axisX, \"bottom\", \"top\", options, x);\n return axes;\n}\nfunction maybeAxis(axes, axis, axisType, primary, secondary, defaults, options) {\n if (!axis)\n return;\n const both = isBoth(axis);\n options = axisOptions(both ? primary : axis, defaults, options);\n const { line } = options;\n if ((axisType === axisY || axisType === axisX) && line && !isNone(line))\n axes.push(frame(lineOptions(options)));\n axes.push(axisType(options));\n if (both)\n axes.push(axisType({ ...options, anchor: secondary, label: null }));\n}\nfunction maybeGrid(axes, grid, gridType, options) {\n if (!grid || isNone(grid))\n return;\n axes.push(gridType(gridOptions(grid, options)));\n}\nfunction isBoth(value) {\n return /^\\s*both\\s*$/i.test(value);\n}\nfunction axisOptions(anchor, defaults, { line = defaults.line, ticks, tickSize, tickSpacing, tickPadding, tickFormat, tickRotate, fontVariant, ariaLabel, ariaDescription, label = defaults.label, labelAnchor, labelOffset }) {\n return {\n anchor,\n line,\n ticks,\n tickSize,\n tickSpacing,\n tickPadding,\n tickFormat,\n tickRotate,\n fontVariant,\n ariaLabel,\n ariaDescription,\n label,\n labelAnchor,\n labelOffset\n };\n}\nfunction lineOptions(options) {\n const { anchor, line } = options;\n return { anchor, facetAnchor: anchor + \"-empty\", stroke: line === true ? undefined : line };\n}\nfunction gridOptions(grid, { stroke = isColor(grid) ? grid : undefined, ticks = isGridTicks(grid) ? grid : undefined, tickSpacing, ariaLabel, ariaDescription }) {\n return {\n stroke,\n ticks,\n tickSpacing,\n ariaLabel,\n ariaDescription\n };\n}\nfunction isGridTicks(grid) {\n switch (typeof grid) {\n case \"number\":\n return true;\n case \"string\":\n return !isColor(grid);\n }\n return isIterable(grid) || typeof grid?.range === \"function\";\n}\n// Is there an explicit axis already present? TODO We probably want a more\n// explicit test than looking for the ARIA label, but it does afford some\n// flexibility in axis implementation which is nice.\nfunction hasAxis(marks, k) {\n const prefix = `${k}-axis `;\n return marks.some((m) => m.ariaLabel?.startsWith(prefix));\n}\nfunction hasScaleChannel(k, marks) {\n for (const mark of marks) {\n for (const key in mark.channels) {\n if (mark.channels[key].scale === k) {\n return true;\n }\n }\n }\n return false;\n}\nfunction inheritScaleLabels(newScales, scales) {\n for (const key in newScales) {\n const newScale = newScales[key];\n const scale = scales[key];\n if (newScale.label === undefined && scale) {\n newScale.label = scale.label;\n }\n }\n return newScales;\n}\n// This differs from the other outerDimensions in that it accounts for rounding\n// and outer padding in the fact scales; we want the frame to align exactly with\n// the actual range, not the desired range.\nfunction actualDimensions({ fx, fy }, dimensions) {\n const { marginTop, marginRight, marginBottom, marginLeft, width, height } = outerDimensions(dimensions);\n const fxr = fx && outerRange(fx);\n const fyr = fy && outerRange(fy);\n return {\n marginTop: fy ? fyr[0] : marginTop,\n marginRight: fx ? width - fxr[1] : marginRight,\n marginBottom: fy ? height - fyr[1] : marginBottom,\n marginLeft: fx ? fxr[0] : marginLeft,\n // Some marks, namely the x- and y-axis labels, want to know what the\n // desired (rather than actual) margins are for positioning.\n inset: {\n marginTop: dimensions.marginTop,\n marginRight: dimensions.marginRight,\n marginBottom: dimensions.marginBottom,\n marginLeft: dimensions.marginLeft\n },\n width,\n height\n };\n}\nfunction outerRange(scale) {\n const domain = scale.domain();\n let x1 = scale(domain[0]);\n let x2 = scale(domain[domain.length - 1]);\n if (x2 < x1)\n [x1, x2] = [x2, x1];\n return [x1, x2 + scale.bandwidth()];\n}\n","import { identity } from \"../options.js\";\nexport function maybeIdentityX(options = {}) {\n const { x, x1, x2 } = options;\n return x1 === undefined && x2 === undefined && x === undefined ? { ...options, x: identity } : options;\n}\nexport function maybeIdentityY(options = {}) {\n const { y, y1, y2 } = options;\n return y1 === undefined && y2 === undefined && y === undefined ? { ...options, y: identity } : options;\n}\n","import { InternMap, cumsum, group, groupSort, greatest, max, min, rollup, sum } from \"d3\";\nimport { ascendingDefined } from \"../defined.js\";\nimport { field, column, maybeColumn, maybeZ, mid, range, valueof, maybeZero, one } from \"../options.js\";\nimport { basic } from \"./basic.js\";\n/** \n * ```js\n * Plot.stackX({y: \"year\", x: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * See Plot.stackY, but with *x* as the input value channel, *y* as the stack index, *x1*, *x2* and *x* as the output channels.\n * \n */\nexport function stackX(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { y1, y = y1, x, ...rest } = options; // note: consumes x!\n const [transform, Y, x1, x2] = stackAlias(y, x, \"x\", stack, rest);\n return { ...transform, y1, y: Y, x1, x2, x: mid(x1, x2) };\n}\n/** \n * ```js\n * Plot.stackX1({y: \"year\", x: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackX](https://github.com/observablehq/plot/blob/main/README.md#plotstackxstack-options), except that the **x1** channel is returned as the **x** channel. This can be used, for example, to draw a line at the left edge of each stacked area.\n * \n */\nexport function stackX1(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { y1, y = y1, x } = options;\n const [transform, Y, X] = stackAlias(y, x, \"x\", stack, options);\n return { ...transform, y1, y: Y, x: X };\n}\n/** \n * ```js\n * Plot.stackX2({y: \"year\", x: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackX](https://github.com/observablehq/plot/blob/main/README.md#plotstackxstack-options), except that the **x2** channel is returned as the **x** channel. This can be used, for example, to draw a line at the right edge of each stacked area.\n * \n */\nexport function stackX2(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { y1, y = y1, x } = options;\n const [transform, Y, , X] = stackAlias(y, x, \"x\", stack, options);\n return { ...transform, y1, y: Y, x: X };\n}\n/** \n * ```js\n * Plot.stackY({x: \"year\", y: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Creates new channels **y1** and **y2**, obtained by stacking the original **y** channel for data points that share a common **x** (and possibly **z**) value. A new **y** channel is also returned, which lazily computes the middle value of **y1** and **y2**. The input **y** channel defaults to a constant 1, resulting in a count of the data points. The stack options (*offset*, *order*, and *reverse*) may be specified as part of the *options* object, if the only argument, or as a separate *stack* options argument.\n * \n */\nexport function stackY(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { x1, x = x1, y, ...rest } = options; // note: consumes y!\n const [transform, X, y1, y2] = stackAlias(x, y, \"y\", stack, rest);\n return { ...transform, x1, x: X, y1, y2, y: mid(y1, y2) };\n}\n/** \n * ```js\n * Plot.stackY1({x: \"year\", y: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackY](https://github.com/observablehq/plot/blob/main/README.md#plotstackystack-options), except that the **y1** channel is returned as the **y** channel. This can be used, for example, to draw a line at the bottom of each stacked area.\n * \n */\nexport function stackY1(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { x1, x = x1, y } = options;\n const [transform, X, Y] = stackAlias(x, y, \"y\", stack, options);\n return { ...transform, x1, x: X, y: Y };\n}\n/** \n * ```js\n * Plot.stackY2({x: \"year\", y: \"revenue\", z: \"format\", fill: \"group\"})\n * ```\n * \n * Equivalent to [Plot.stackY](https://github.com/observablehq/plot/blob/main/README.md#plotstackystack-options), except that the **y2** channel is returned as the **y** channel. This can be used, for example, to draw a line at the top of each stacked area.\n * \n */\nexport function stackY2(stack = {}, options = {}) {\n if (arguments.length === 1)\n [stack, options] = mergeOptions(stack);\n const { x1, x = x1, y } = options;\n const [transform, X, , Y] = stackAlias(x, y, \"y\", stack, options);\n return { ...transform, x1, x: X, y: Y };\n}\nexport function maybeStackX({ x, x1, x2, ...options } = {}) {\n if (x1 === undefined && x2 === undefined)\n return stackX({ x, ...options });\n [x1, x2] = maybeZero(x, x1, x2);\n return { ...options, x1, x2 };\n}\nexport function maybeStackY({ y, y1, y2, ...options } = {}) {\n if (y1 === undefined && y2 === undefined)\n return stackY({ y, ...options });\n [y1, y2] = maybeZero(y, y1, y2);\n return { ...options, y1, y2 };\n}\n// The reverse option is ambiguous: it is both a stack option and a basic\n// transform. If only one options object is specified, we interpret it as a\n// stack option, and therefore must remove it from the propagated options.\nfunction mergeOptions(options) {\n const { offset, order, reverse, ...rest } = options;\n return [{ offset, order, reverse }, rest];\n}\nfunction stack(x, y = one, ky, { offset, order, reverse }, options) {\n const z = maybeZ(options);\n const [X, setX] = maybeColumn(x);\n const [Y1, setY1] = column(y);\n const [Y2, setY2] = column(y);\n offset = maybeOffset(offset);\n order = maybeOrder(order, offset, ky);\n return [\n basic(options, (data, facets) => {\n const X = x == null ? undefined : setX(valueof(data, x));\n const Y = valueof(data, y, Float64Array);\n const Z = valueof(data, z);\n const O = order && order(data, X, Y, Z);\n const n = data.length;\n const Y1 = setY1(new Float64Array(n));\n const Y2 = setY2(new Float64Array(n));\n const facetstacks = [];\n for (const facet of facets) {\n const stacks = X ? Array.from(group(facet, (i) => X[i]).values()) : [facet];\n if (O)\n applyOrder(stacks, O);\n for (const stack of stacks) {\n let yn = 0, yp = 0;\n if (reverse)\n stack.reverse();\n for (const i of stack) {\n const y = Y[i];\n if (y < 0)\n yn = Y2[i] = (Y1[i] = yn) + y;\n else if (y > 0)\n yp = Y2[i] = (Y1[i] = yp) + y;\n else\n Y2[i] = Y1[i] = yp; // NaN or zero\n }\n }\n facetstacks.push(stacks);\n }\n if (offset)\n offset(facetstacks, Y1, Y2, Z);\n return { data, facets };\n }),\n X,\n Y1,\n Y2\n ];\n}\n// This is used internally so we can use `stack` as an argument name.\nconst stackAlias = stack;\nfunction maybeOffset(offset) {\n if (offset == null)\n return;\n if (typeof offset === \"function\")\n return offset;\n switch (`${offset}`.toLowerCase()) {\n case \"expand\":\n case \"normalize\":\n return offsetExpand;\n case \"center\":\n case \"silhouette\":\n return offsetCenter;\n case \"wiggle\":\n return offsetWiggle;\n }\n throw new Error(`unknown offset: ${offset}`);\n}\n// Given a single stack, returns the minimum and maximum values from the given\n// Y2 column. Note that this relies on Y2 always being the outer column for\n// diverging values.\nfunction extent(stack, Y2) {\n let min = 0, max = 0;\n for (const i of stack) {\n const y = Y2[i];\n if (y < min)\n min = y;\n if (y > max)\n max = y;\n }\n return [min, max];\n}\nfunction offsetExpand(facetstacks, Y1, Y2) {\n for (const stacks of facetstacks) {\n for (const stack of stacks) {\n const [yn, yp] = extent(stack, Y2);\n for (const i of stack) {\n const m = 1 / (yp - yn || 1);\n Y1[i] = m * (Y1[i] - yn);\n Y2[i] = m * (Y2[i] - yn);\n }\n }\n }\n}\nfunction offsetCenter(facetstacks, Y1, Y2) {\n for (const stacks of facetstacks) {\n for (const stack of stacks) {\n const [yn, yp] = extent(stack, Y2);\n for (const i of stack) {\n const m = (yp + yn) / 2;\n Y1[i] -= m;\n Y2[i] -= m;\n }\n }\n offsetZero(stacks, Y1, Y2);\n }\n offsetCenterFacets(facetstacks, Y1, Y2);\n}\nfunction offsetWiggle(facetstacks, Y1, Y2, Z) {\n for (const stacks of facetstacks) {\n const prev = new InternMap();\n let y = 0;\n for (const stack of stacks) {\n let j = -1;\n const Fi = stack.map((i) => Math.abs(Y2[i] - Y1[i]));\n const Df = stack.map((i) => {\n j = Z ? Z[i] : ++j;\n const value = Y2[i] - Y1[i];\n const diff = prev.has(j) ? value - prev.get(j) : 0;\n prev.set(j, value);\n return diff;\n });\n const Cf1 = [0, ...cumsum(Df)];\n for (const i of stack) {\n Y1[i] += y;\n Y2[i] += y;\n }\n const s1 = sum(Fi);\n if (s1)\n y -= sum(Fi, (d, i) => (Df[i] / 2 + Cf1[i]) * d) / s1;\n }\n offsetZero(stacks, Y1, Y2);\n }\n offsetCenterFacets(facetstacks, Y1, Y2);\n}\nfunction offsetZero(stacks, Y1, Y2) {\n const m = min(stacks, (stack) => min(stack, (i) => Y1[i]));\n for (const stack of stacks) {\n for (const i of stack) {\n Y1[i] -= m;\n Y2[i] -= m;\n }\n }\n}\nfunction offsetCenterFacets(facetstacks, Y1, Y2) {\n const n = facetstacks.length;\n if (n === 1)\n return;\n const facets = facetstacks.map((stacks) => stacks.flat());\n const m = facets.map((I) => (min(I, (i) => Y1[i]) + max(I, (i) => Y2[i])) / 2);\n const m0 = min(m);\n for (let j = 0; j < n; j++) {\n const p = m0 - m[j];\n for (const i of facets[j]) {\n Y1[i] += p;\n Y2[i] += p;\n }\n }\n}\nfunction maybeOrder(order, offset, ky) {\n if (order === undefined && offset === offsetWiggle)\n return orderInsideOut;\n if (order == null)\n return;\n if (typeof order === \"string\") {\n switch (order.toLowerCase()) {\n case \"value\":\n case ky:\n return orderY;\n case \"z\":\n return orderZ;\n case \"sum\":\n return orderSum;\n case \"appearance\":\n return orderAppearance;\n case \"inside-out\":\n return orderInsideOut;\n }\n return orderFunction(field(order));\n }\n if (typeof order === \"function\")\n return orderFunction(order);\n if (Array.isArray(order))\n return orderGiven(order);\n throw new Error(`invalid order: ${order}`);\n}\n// by value\nfunction orderY(data, X, Y) {\n return Y;\n}\n// by location\nfunction orderZ(order, X, Y, Z) {\n return Z;\n}\n// by sum of value (a.k.a. “ascending”)\nfunction orderSum(data, X, Y, Z) {\n return orderZDomain(Z, groupSort(range(data), (I) => sum(I, (i) => Y[i]), (i) => Z[i]));\n}\n// by x = argmax of value\nfunction orderAppearance(data, X, Y, Z) {\n return orderZDomain(Z, groupSort(range(data), (I) => X[greatest(I, (i) => Y[i])], (i) => Z[i]));\n}\n// by x = argmax of value, but rearranged inside-out by alternating series\n// according to the sign of a running divergence of sums\nfunction orderInsideOut(data, X, Y, Z) {\n const I = range(data);\n const K = groupSort(I, (I) => X[greatest(I, (i) => Y[i])], (i) => Z[i]);\n const sums = rollup(I, (I) => sum(I, (i) => Y[i]), (i) => Z[i]);\n const Kp = [], Kn = [];\n let s = 0;\n for (const k of K) {\n if (s < 0) {\n s += sums.get(k);\n Kp.push(k);\n }\n else {\n s -= sums.get(k);\n Kn.push(k);\n }\n }\n return orderZDomain(Z, Kn.reverse().concat(Kp));\n}\nfunction orderFunction(f) {\n return (data) => valueof(data, f);\n}\nfunction orderGiven(domain) {\n return (data, X, Y, Z) => orderZDomain(Z, domain);\n}\n// Given an explicit ordering of distinct values in z, returns a parallel column\n// O that can be used with applyOrder to sort stacks. Note that this is a series\n// order: it will be consistent across stacks.\nfunction orderZDomain(Z, domain) {\n if (!Z)\n throw new Error(\"missing channel: z\");\n domain = new InternMap(domain.map((d, i) => [d, i]));\n return Z.map((z) => domain.get(z));\n}\nfunction applyOrder(stacks, O) {\n for (const stack of stacks) {\n stack.sort((i, j) => ascendingDefined(O[i], O[j]));\n }\n}\n","import { pathRound as path, symbolCircle } from \"d3\";\nimport { create } from \"../context.js\";\nimport { negative, positive } from \"../defined.js\";\nimport { Mark } from \"../mark.js\";\nimport { identity, maybeFrameAnchor, maybeNumberChannel, maybeTuple } from \"../options.js\";\nimport { applyChannelStyles, applyDirectStyles, applyFrameAnchor, applyIndirectStyles, applyTransform } from \"../style.js\";\nimport { maybeSymbolChannel } from \"../symbols.js\";\nimport { template } from \"../template.js\";\nimport { sort } from \"../transforms/basic.js\";\nimport { maybeIntervalMidX, maybeIntervalMidY } from \"../transforms/interval.js\";\nconst defaults = {\n ariaLabel: \"dot\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 1.5\n};\nexport function withDefaultSort(options) {\n return options.sort === undefined && options.reverse === undefined\n ? sort({ channel: \"r\", order: \"descending\" }, options)\n : options;\n}\nexport class Dot extends Mark {\n constructor(data, options = {}) {\n const { x, y, r, rotate, symbol = symbolCircle, frameAnchor } = options;\n const [vrotate, crotate] = maybeNumberChannel(rotate, 0);\n const [vsymbol, csymbol] = maybeSymbolChannel(symbol);\n const [vr, cr] = maybeNumberChannel(r, vsymbol == null ? 3 : 4.5);\n super(data, {\n x: { value: x, scale: \"x\", optional: true },\n y: { value: y, scale: \"y\", optional: true },\n r: { value: vr, scale: \"r\", filter: positive, optional: true },\n rotate: { value: vrotate, optional: true },\n symbol: { value: vsymbol, scale: \"auto\", optional: true }\n }, withDefaultSort(options), defaults);\n this.r = cr;\n this.rotate = crotate;\n this.symbol = csymbol;\n this.frameAnchor = maybeFrameAnchor(frameAnchor);\n // Give a hint to the symbol scale; this allows the symbol scale to chose\n // appropriate default symbols based on whether the dots are filled or\n // stroked, and for the symbol legend to match the appearance of the dots.\n const { channels } = this;\n const { symbol: symbolChannel } = channels;\n if (symbolChannel) {\n const { fill: fillChannel, stroke: strokeChannel } = channels;\n symbolChannel.hint = {\n fill: fillChannel ? (fillChannel.value === symbolChannel.value ? \"color\" : \"currentColor\") : this.fill,\n stroke: strokeChannel ? (strokeChannel.value === symbolChannel.value ? \"color\" : \"currentColor\") : this.stroke\n };\n }\n }\n render(index, scales, channels, dimensions, context) {\n const { x, y } = scales;\n const { x: X, y: Y, r: R, rotate: A, symbol: S } = channels;\n const { r, rotate, symbol } = this;\n const [cx, cy] = applyFrameAnchor(this, dimensions);\n const circle = this.symbol === symbolCircle;\n const size = R ? undefined : r * r * Math.PI;\n if (negative(r))\n index = [];\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(applyTransform, this, { x: X && x, y: Y && y })\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(circle ? \"circle\" : \"path\")\n .call(applyDirectStyles, this)\n .call(circle\n ? (selection) => {\n selection\n .attr(\"cx\", X ? (i) => X[i] : cx)\n .attr(\"cy\", Y ? (i) => Y[i] : cy)\n .attr(\"r\", R ? (i) => R[i] : r);\n }\n : (selection) => {\n selection\n .attr(\"transform\", template `translate(${X ? (i) => X[i] : cx},${Y ? (i) => Y[i] : cy})${A ? (i) => ` rotate(${A[i]})` : rotate ? ` rotate(${rotate})` : ``}`)\n .attr(\"d\", R && S\n ? (i) => {\n const p = path();\n S[i].draw(p, R[i] * R[i] * Math.PI);\n return p;\n }\n : R\n ? (i) => {\n const p = path();\n symbol.draw(p, R[i] * R[i] * Math.PI);\n return p;\n }\n : S\n ? (i) => {\n const p = path();\n S[i].draw(p, size);\n return p;\n }\n : (() => {\n const p = path();\n symbol.draw(p, size);\n return p;\n })());\n })\n .call(applyChannelStyles, this, channels))\n .node();\n }\n}\n/** \n * ```js\n * Plot.dot(sales, {x: \"units\", y: \"fruit\"})\n * ```\n * \n * Returns a new dot with the given *data* and *options*. If neither the **x** nor **y** nor **frameAnchor** options are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n * \n */\nexport function dot(data, options = {}) {\n let { x, y, ...remainingOptions } = options;\n if (options.frameAnchor === undefined)\n [x, y] = maybeTuple(x, y);\n return new Dot(data, { ...remainingOptions, x, y });\n}\n/** \n * ```js\n * Plot.dotX(cars.map(d => d[\"economy (mpg)\"]))\n * ```\n * \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that if the **x** option is not specified, it defaults to the identity function and assumes that *data* = [*x₀*, *x₁*, *x₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **y** is transformed to (*interval*.floor(*y*) + *interval*.offset(*interval*.floor(*y*))) / 2. If the interval is specified as a number *n*, *y* will be the midpoint of two consecutive multiples of *n* that bracket *y*.\n * \n */\nexport function dotX(data, options = {}) {\n const { x = identity, ...remainingOptions } = options;\n return new Dot(data, maybeIntervalMidY({ ...remainingOptions, x }));\n}\n/** \n * ```js\n * Plot.dotY(cars.map(d => d[\"economy (mpg)\"]))\n * ```\n * \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that if the **y** option is not specified, it defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …].\n * \n * If an **interval** is specified, such as d3.utcDay, **x** is transformed to (*interval*.floor(*x*) + *interval*.offset(*interval*.floor(*x*))) / 2. If the interval is specified as a number *n*, *x* will be the midpoint of two consecutive multiples of *n* that bracket *x*.\n * \n */\nexport function dotY(data, options = {}) {\n const { y = identity, ...remainingOptions } = options;\n return new Dot(data, maybeIntervalMidX({ ...remainingOptions, y }));\n}\n/** \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that the **symbol** option is set to *circle*.\n * \n */\nexport function circle(data, options) {\n return dot(data, { ...options, symbol: \"circle\" });\n}\n/** \n * Equivalent to [Plot.dot](https://github.com/observablehq/plot/blob/main/README.md#plotdotdata-options) except that the **symbol** option is set to *hexagon*.\n * \n */\nexport function hexagon(data, options) {\n return dot(data, { ...options, symbol: \"hexagon\" });\n}\n","import { create } from \"../context.js\";\nimport { Mark } from \"../mark.js\";\nimport { identity, indexOf, number } from \"../options.js\";\nimport { isCollapsed } from \"../scales.js\";\nimport { applyDirectStyles, applyIndirectStyles, applyTransform, impliedString, applyAttr, applyChannelStyles } from \"../style.js\";\nimport { maybeIdentityX, maybeIdentityY } from \"../transforms/identity.js\";\nimport { maybeIntervalX, maybeIntervalY } from \"../transforms/interval.js\";\nimport { maybeStackX, maybeStackY } from \"../transforms/stack.js\";\nexport class AbstractBar extends Mark {\n constructor(data, channels, options = {}, defaults) {\n super(data, channels, options, defaults);\n const { inset = 0, insetTop = inset, insetRight = inset, insetBottom = inset, insetLeft = inset, rx, ry } = options;\n this.insetTop = number(insetTop);\n this.insetRight = number(insetRight);\n this.insetBottom = number(insetBottom);\n this.insetLeft = number(insetLeft);\n this.rx = impliedString(rx, \"auto\"); // number or percentage\n this.ry = impliedString(ry, \"auto\");\n }\n render(index, scales, channels, dimensions, context) {\n const { rx, ry } = this;\n return create(\"svg:g\", context)\n .call(applyIndirectStyles, this, dimensions, context)\n .call(this._transform, this, scales)\n .call((g) => g\n .selectAll()\n .data(index)\n .enter()\n .append(\"rect\")\n .call(applyDirectStyles, this)\n .attr(\"x\", this._x(scales, channels, dimensions))\n .attr(\"width\", this._width(scales, channels, dimensions))\n .attr(\"y\", this._y(scales, channels, dimensions))\n .attr(\"height\", this._height(scales, channels, dimensions))\n .call(applyAttr, \"rx\", rx)\n .call(applyAttr, \"ry\", ry)\n .call(applyChannelStyles, this, channels))\n .node();\n }\n _x(scales, { x: X }, { marginLeft }) {\n const { insetLeft } = this;\n return X ? (i) => X[i] + insetLeft : marginLeft + insetLeft;\n }\n _y(scales, { y: Y }, { marginTop }) {\n const { insetTop } = this;\n return Y ? (i) => Y[i] + insetTop : marginTop + insetTop;\n }\n _width({ x }, { x: X }, { marginRight, marginLeft, width }) {\n const { insetLeft, insetRight } = this;\n const bandwidth = X && x ? x.bandwidth() : width - marginRight - marginLeft;\n return Math.max(0, bandwidth - insetLeft - insetRight);\n }\n _height({ y }, { y: Y }, { marginTop, marginBottom, height }) {\n const { insetTop, insetBottom } = this;\n const bandwidth = Y && y ? y.bandwidth() : height - marginTop - marginBottom;\n return Math.max(0, bandwidth - insetTop - insetBottom);\n }\n}\nconst defaults = {\n ariaLabel: \"bar\"\n};\nexport class BarX extends AbstractBar {\n constructor(data, options = {}) {\n const { x1, x2, y } = options;\n super(data, {\n x1: { value: x1, scale: \"x\" },\n x2: { value: x2, scale: \"x\" },\n y: { value: y, scale: \"y\", type: \"band\", optional: true }\n }, options, defaults);\n }\n _transform(selection, mark, { x }) {\n selection.call(applyTransform, mark, { x }, 0, 0);\n }\n _x({ x }, { x1: X1, x2: X2 }, { marginLeft }) {\n const { insetLeft } = this;\n return isCollapsed(x) ? marginLeft + insetLeft : (i) => Math.min(X1[i], X2[i]) + insetLeft;\n }\n _width({ x }, { x1: X1, x2: X2 }, { marginRight, marginLeft, width }) {\n const { insetLeft, insetRight } = this;\n return isCollapsed(x)\n ? width - marginRight - marginLeft - insetLeft - insetRight\n : (i) => Math.max(0, Math.abs(X2[i] - X1[i]) - insetLeft - insetRight);\n }\n}\nexport class BarY extends AbstractBar {\n constructor(data, options = {}) {\n const { x, y1, y2 } = options;\n super(data, {\n y1: { value: y1, scale: \"y\" },\n y2: { value: y2, scale: \"y\" },\n x: { value: x, scale: \"x\", type: \"band\", optional: true }\n }, options, defaults);\n }\n _transform(selection, mark, { y }) {\n selection.call(applyTransform, mark, { y }, 0, 0);\n }\n _y({ y }, { y1: Y1, y2: Y2 }, { marginTop }) {\n const { insetTop } = this;\n return isCollapsed(y) ? marginTop + insetTop : (i) => Math.min(Y1[i], Y2[i]) + insetTop;\n }\n _height({ y }, { y1: Y1, y2: Y2 }, { marginTop, marginBottom, height }) {\n const { insetTop, insetBottom } = this;\n return isCollapsed(y)\n ? height - marginTop - marginBottom - insetTop - insetBottom\n : (i) => Math.max(0, Math.abs(Y2[i] - Y1[i]) - insetTop - insetBottom);\n }\n}\n/** \n * ```js\n * Plot.barX(alphabet, {y: \"letter\", x: \"frequency\"})\n * ```\n * \n * Returns a new horizontal bar↔︎ with the given *data* and *options*. The following channels are required:\n * \n * * **x1** - the starting horizontal position; bound to the *x* scale\n * * **x2** - the ending horizontal position; bound to the *x* scale\n * \n * If neither the **x1** nor **x2** option is specified, the **x** option may be specified as shorthand to apply an implicit [stackX transform](https://github.com/observablehq/plot/blob/main/README.md#plotstackxstack-options); this is the typical configuration for a horizontal bar chart with bars aligned at *x* = 0. If the **x** option is not specified, it defaults to the identity function. If *options* is undefined, then it defaults to **x2** as the identity function and **y** as the index of data; this allows an array of numbers to be passed to Plot.barX to make a quick sequential bar chart.\n * \n * If an **interval** is specified, such as d3.utcDay, **x1** and **x2** can be derived from **x**: *interval*.floor(*x*) is invoked for each *x* to produce *x1*, and *interval*.offset(*x1*) is invoked for each *x1* to produce *x2*. If the interval is specified as a number *n*, *x1* and *x2* are taken as the two consecutive multiples of *n* that bracket *x*.\n * \n * In addition to the [standard bar channels](https://github.com/observablehq/plot/blob/main/README.md#bar), the following optional channels are supported:\n * \n * * **y** - the vertical position; bound to the *y* scale, which must be *band*\n * \n * If the **y** channel is not specified, the bar will span the full vertical extent of the plot (or facet).\n * \n */\nexport function barX(data, options = { y: indexOf, x2: identity }) {\n return new BarX(data, maybeStackX(maybeIntervalX(maybeIdentityX(options))));\n}\n/** \n * ```js\n * Plot.barY(alphabet, {x: \"letter\", y: \"frequency\"})\n * ```\n * \n * Returns a new vertical bar↕︎ with the given *data* and *options*. The following channels are required:\n * \n * * **y1** - the starting vertical position; bound to the *y* scale\n * * **y2** - the ending vertical position; bound to the *y* scale\n * \n * If neither the **y1** nor **y2** option is specified, the **y** option may be specified as shorthand to apply an implicit [stackY transform](https://github.com/observablehq/plot/blob/main/README.md#plotstackystack-options); this is the typical configuration for a vertical bar chart with bars aligned at *y* = 0. If the **y** option is not specified, it defaults to the identity function. If *options* is undefined, then it defaults to **y2** as the identity function and **x** as the index of data; this allows an array of numbers to be passed to Plot.barY to make a quick sequential bar chart.\n * \n * If an **interval** is specified, such as d3.utcDay, **y1** and **y2** can be derived from **y**: *interval*.floor(*y*) is invoked for each *y* to produce *y1*, and *interval*.offset(*y1*) is invoked for each *y1* to produce *y2*. If the interval is specified as a number *n*, *y1* and *y2* are taken as the two consecutive multiples of *n* that bracket *y*.\n * \n * In addition to the [standard bar channels](https://github.com/observablehq/plot/blob/main/README.md#bar), the following optional channels are supported:\n * \n * * **x** - the horizontal position; bound to the *x* scale, which must be *band*\n * \n * If the **x** channel is not specified, the bar will span the full horizontal extent of the plot (or facet).\n * \n */\nexport function barY(data, options = { x: indexOf, y2: identity }) {\n return new BarY(data, maybeStackY(maybeIntervalY(maybeIdentityY(options))));\n}\n","import * as Plot from \"@observablehq/plot\";\nimport { csvParse } from \"d3-dsv\";\nimport * as d3Array from \"d3-array\";\nimport { format as d3Format } from \"d3-format\";\n\n// These 2 imports use some vite machinery to directly import these files as\n// strings. Then they are constants and this reduces the load on the GC.\nimport airportsString from \"./datasets/airports.csv?raw\";\nimport flightsString from \"./datasets/flights-airports.csv?raw\";\n\nconst ROOT = document.getElementById(\"chart\");\nconst DEFAULT_OPTIONS = {\n // This width is really a max-width: the plot adjusts using the available\n // width as well.\n width: 2000,\n // The height is especially used for the ratio.\n height: 1000,\n};\n\nlet preparedData;\nfunction prepare() {\n /**\n * AirportInformation: { state, iata, name, city, country, latitude, longitude }\n * airports: Array\n * flights: Array<{ origin, destination, count }>\n */\n const { airports, flights } = parseAirportsInformation();\n /**\n * flightsByAirport: Map\n */\n const flightsByAirport = groupFlightsByAirports(flights);\n /**\n * byAirport: Map\n */\n const byAirport = d3Array.index(airports, (d) => d.iata);\n\n /* Array<[state, AirportInformation[]]> */\n const airportsGroupedByStateArray = d3Array.groups(airports, (d) => d.state);\n\n /* DescSortedArray<[{ state: string, total: number, mostUsedAirportsInState: AirportInformation[] }]> */\n const stateInformationSortedArray = airportsGroupedByStateArray\n .map(([state, airportsInState]) => {\n const totalFlightsInState = d3Array.sum(airportsInState, ({ iata }) => flightsByAirport.get(iata)?.total);\n const sorted = d3Array.sort(airportsInState, ({ iata }) => -flightsByAirport.get(iata)?.total);\n const mostUsedAirportsInState = sorted.slice(0, airportCountPerGroup());\n return {\n state,\n total: totalFlightsInState,\n mostUsedAirports: mostUsedAirportsInState,\n };\n })\n .sort((stateA, stateB) => stateB.total - stateA.total);\n\n /* Array */\n const stateSortedArray = stateInformationSortedArray.map(({ state }) => state);\n\n // Flatten the information in preparedData.stateInformationSortedArray, so that we\n // have one item == one airport information.\n /* Array<{state, iata, name, city, index, origin, destination, total}> */\n const plotData = stateInformationSortedArray.flatMap(({ mostUsedAirports, total, state }) => {\n const enrichedMostUsedAirports = mostUsedAirports.map(({ iata, name, city }, index) => ({\n state,\n iata,\n name,\n city,\n index, // This will be used to have consistent colors.\n ...flightsByAirport.get(iata),\n }));\n const otherTotal = total - d3Array.sum(mostUsedAirports, ({ iata }) => flightsByAirport.get(iata)?.total);\n\n if (otherTotal > 0) {\n enrichedMostUsedAirports.push({\n state,\n iata: \"Other\",\n total: otherTotal,\n index: enrichedMostUsedAirports.length,\n });\n }\n return enrichedMostUsedAirports;\n });\n\n preparedData = {\n airports,\n flights,\n flightsByAirport,\n byAirport,\n stateInformationSortedArray,\n stateSortedArray,\n plotData,\n };\n}\n\nfunction parseAirportsInformation() {\n return {\n airports: csvParse(airportsString),\n flights: csvParse(flightsString),\n };\n}\n\nfunction groupFlightsByAirports(flights) {\n const flightsByAirport = new Map();\n\n for (const { origin, destination, count } of flights) {\n const infoForOriginAirport = flightsByAirport.get(origin) ?? { origin: 0, destination: 0, total: 0 };\n const intCount = Number(count);\n if (Number.isNaN(intCount)) {\n console.error(`Couldn't convert ${count} to number.`);\n continue;\n }\n infoForOriginAirport.origin += intCount;\n infoForOriginAirport.total += intCount;\n flightsByAirport.set(origin, infoForOriginAirport);\n const infoForDestinationAirport = flightsByAirport.get(destination) ?? { origin: 0, destination: 0, total: 0 };\n infoForDestinationAirport.destination += intCount;\n infoForDestinationAirport.total += intCount;\n flightsByAirport.set(destination, infoForDestinationAirport);\n }\n\n return flightsByAirport;\n}\n\nfunction isReady() {\n return !!preparedData;\n}\n\nfunction addStackedBars() {\n if (!isReady())\n throw new Error(\"Please prepare the data first.\");\n\n const options = {\n ...DEFAULT_OPTIONS,\n color: { type: \"categorical\" },\n x: {\n domain: preparedData.stateSortedArray,\n },\n y: { grid: true, tickFormat: \"~s\" },\n marks: [\n Plot.barY(preparedData.plotData, {\n x: \"state\",\n y: \"total\",\n fill: \"index\",\n title: (d) => `${d.iata === \"Other\" ? \"Other\" : `${d.name}, ${d.city} (${d.iata})`}\\n${d3Format(\",\")(d.total)} flights`,\n }),\n Plot.text(preparedData.stateInformationSortedArray, { x: \"state\", y: \"total\", text: (d) => d3Format(\".2~s\")(d.total), dy: -10 }),\n Plot.ruleY([0]),\n ],\n };\n ROOT.append(Plot.plot(options));\n}\n\nfunction addDottedBars() {\n if (!isReady())\n throw new Error(\"Please prepare the data first.\");\n\n const data = [...preparedData.flightsByAirport]\n .flatMap(([iata, { origin, destination }]) => {\n const airportInformation = preparedData.byAirport.get(iata);\n return [\n { ...airportInformation, value: -origin },\n { ...airportInformation, value: destination },\n ];\n })\n .filter((d) => d.value);\n\n const options = {\n ...DEFAULT_OPTIONS,\n color: { type: \"threshold\", domain: [0] },\n x: {\n domain: preparedData.stateSortedArray,\n },\n y: {\n grid: true,\n label: \"← outward Number of flights inward →\",\n labelAnchor: \"center\",\n tickFormat: (v) => d3Format(\"~s\")(Math.abs(v)),\n type: \"pow\",\n exponent: 0.2,\n },\n marks: [\n Plot.dot(data, {\n x: \"state\",\n y: \"value\",\n r: 4,\n stroke: \"value\",\n strokeWidth: 3,\n title: (d) => `${d.iata === \"Other\" ? \"Other\" : `${d.name}, ${d.city} (${d.iata})`}\\n${d3Format(\",\")(Math.abs(d.value))} ${d.value > 0 ? \"inward\" : \"outward\"} flights`,\n }),\n Plot.ruleY([0]),\n ],\n };\n\n ROOT.append(Plot.plot(options));\n}\n\nfunction reset() {\n ROOT.textContent = \"\";\n}\n\nasync function runAllTheThings() {\n reset();\n [\n // Force prettier to use a multiline formatting\n \"prepare\",\n \"add-stacked-chart-button\",\n \"add-dotted-chart-button\",\n ].forEach((id) => document.getElementById(id).click());\n}\n\n// This is the number of airports we keep for each state in the stacked bar\n// graph. One additional group will be added, that will sum all airports that\n// haven't been kept. It's retrieved from the input directly.\nfunction airportCountPerGroup() {\n return document.querySelector(\"#airport-group-size-input\").value;\n}\n\nfunction onGroupSizeInputChange() {\n document.querySelector(\"#airport-group-size\").textContent = airportCountPerGroup();\n if (import.meta.env.DEV) {\n // In dev mode, redraw everything\n runAllTheThings();\n }\n}\n\ndocument.getElementById(\"prepare\").addEventListener(\"click\", prepare);\ndocument.getElementById(\"add-stacked-chart-button\").addEventListener(\"click\", addStackedBars);\ndocument.getElementById(\"add-dotted-chart-button\").addEventListener(\"click\", addDottedBars);\ndocument.getElementById(\"reset\").addEventListener(\"click\", reset);\ndocument.getElementById(\"run-all\").addEventListener(\"click\", runAllTheThings);\ndocument.getElementById(\"airport-group-size-input\").addEventListener(\"input\", onGroupSizeInputChange);\nonGroupSizeInputChange();\n\nif (import.meta.env.DEV)\n runAllTheThings();\n"],"names":["ascending","a","zero","left","mid","right","center","number","values","valueof","index","length","array","empty","arrayify","j","i","sum","mean","extent","min","max","key","identity","map","groups","keyof","group","sort","f","c","ascendingDefined","start","reverse","ticks","maxIndex","minIndex","k","s","defined","quantile","range","epsilon","offset","tickFormat","axis","format","position","selection","text","noop","parseTypenames","get","set","copy","document","selector","select","Selection","datum","constant","merge","attrRemove","attrRemoveNS","attrConstant","attrConstantNS","attrFunction","attrFunctionNS","styleRemove","styleConstant","styleFunction","string","textConstant","textFunction","create","window","color","opacity","hsl","radians","degrees","t0","t1","lab","hcl","cubehelix","t2","t3","linear","rgb","colorRgb","colors","basis","value","one","date","parse","hue","colorHsl","colorLab","colorHcl","colorCubehelix","interpolate","frame","timeout","time","now","id","schedule","interpolateTransform","children","inherit","style","remove","easeCubicInOut","pi","tau","append","appendRound","x1","y1","x0","y0","re","exponent","locale","sign","symbol","formatPrefix","defaultLocale","formatLocale","cos","log","pow","sin","sqrt","object","cartesian","spherical","compose","rotation","radius","point","compareIntersection","clip","n","clipLine","A","B","delta","code","first","ring","visible","x00","y00","projection","stream","pathBounds","transformer","boundsStream","project","resample","reset","conicProjection","conicEqualArea","albers","ordinalRange","sequence","unit","interpolateValue","piecewise","interval","transformLog","transformSymlog","transformPow","transformSqrt","threshold","field","second","step","formatYear","formats","pad","timeWeek","timeSecond","utcWeek","utcSecond","scheme","interpolateRgbBasis","ramp","interpolateCubehelixLong","sqrt3","circle","cross","diamond","square","star","triangle","wye","plus","times","triangle2","asterisk","square2","diamond2","X1","X2","rangei","isoParse","defaults","initializer","filter","reducer","schemeBrBG","schemePRGn","schemePiYG","schemePuOr","schemeRdBu","schemeRdGy","schemeRdYlBu","schemeRdYlGn","schemeSpectral","schemeBlues","schemeGreens","schemeGreys","schemeOranges","schemePurples","schemeReds","interpolateMagma","interpolateInferno","interpolatePlasma","interpolateWarm","interpolateCool","schemeBuGn","schemeBuPu","schemeGnBu","schemeOrRd","schemePuBu","schemePuBuGn","schemePuRd","schemeRdPu","schemeYlGn","schemeYlGnBu","schemeYlOrBr","schemeYlOrRd","interpolateLab","nice","reverseof","scaleLinear","scalePow","scaleLog","scaleSymlog","scaleQuantile","scaleThreshold","scaleIdentity","inferDomain","scaleDiverging","scaleDivergingPow","scaleDivergingLog","scaleDivergingSymlog","scaleTime","scaleUtc","scaleImplicit","scaleOrdinal","scalePoint","scaleBand","top","bottom","geoClipRectangle","kx","ky","x","y","marks","isoFormat","marginTop","marginRight","marginBottom","marginLeft","inferFontVariant","svg","path","v","Y1","Y2","data","scaleRegistry","facets","dimensions","fx","fy","channels","stack","X","K","I","d3Array.index","d3Array.groups","d3Array.sum","d3Array.sort","Plot.barY","d3Format","Plot.text","Plot.ruleY","Plot.plot","Plot.dot"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315,316,317,318,319,320,321,322,323,324,325,326,327,328,329,330,331,332,333]} \ No newline at end of file diff --git a/suites/charts/dist/chartjs.html b/suites/charts/dist/chartjs.html index 04a6a6e1d..23717affb 100644 --- a/suites/charts/dist/chartjs.html +++ b/suites/charts/dist/chartjs.html @@ -11,8 +11,8 @@ align-items: center; } - - + +
diff --git a/suites/charts/dist/observable-plot.html b/suites/charts/dist/observable-plot.html index 9e0d37afe..8415d12bb 100644 --- a/suites/charts/dist/observable-plot.html +++ b/suites/charts/dist/observable-plot.html @@ -15,8 +15,8 @@ min-width: 30px; } - - + +
diff --git a/suites/charts/dist/resources.txt b/suites/charts/dist/resources.txt deleted file mode 100644 index 0d970f580..000000000 --- a/suites/charts/dist/resources.txt +++ /dev/null @@ -1,12 +0,0 @@ -assets/chartjs-7fd89fd7.js -assets/chartjs-7fd89fd7.js.map -assets/developer-4ed993c7.js.map -assets/flights-airports-9a9e6422.js -assets/flights-airports-9a9e6422.js.map -assets/index-4ed993c7.js.map -assets/plot-562fbdb6.js -assets/plot-562fbdb6.js.map -chartjs.html -developer.html -index.html -observable-plot.html diff --git a/suites/editors/dist/assets/codemirror-521de7ab.js.map b/suites/editors/dist/assets/codemirror-521de7ab.js.map deleted file mode 100644 index 684100f53..000000000 --- a/suites/editors/dist/assets/codemirror-521de7ab.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"codemirror-521de7ab.js","sources":["../../assets/longscript.js?raw","../../node_modules/@codemirror/state/dist/index.js","../../node_modules/style-mod/src/style-mod.js","../../node_modules/@codemirror/view/dist/index.js","../../node_modules/@lezer/common/dist/index.js","../../node_modules/@lezer/highlight/dist/index.js","../../node_modules/@codemirror/language/dist/index.js","../../node_modules/@codemirror/commands/dist/index.js","../../node_modules/crelt/index.es.js","../../node_modules/@codemirror/search/dist/index.js","../../node_modules/@codemirror/autocomplete/dist/index.js","../../node_modules/@codemirror/lint/dist/index.js","../../node_modules/codemirror/dist/index.js","../../node_modules/@lezer/lr/dist/index.js","../../node_modules/@lezer/javascript/dist/index.es.js","../../node_modules/@codemirror/lang-javascript/dist/index.js","../../codemirror.js","../../codemirror.html?html-proxy&index=0.js"],"sourcesContent":["export default \"/**\\n * @license React\\n * react-dom.development.js\\n *\\n * Copyright (c) Facebook, Inc. and its affiliates.\\n *\\n * This source code is licensed under the MIT license found in the\\n * LICENSE file in the root directory of this source tree.\\n */\\n(function (global, factory) {\\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :\\n typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :\\n (global = global || self, factory(global.ReactDOM = {}, global.React));\\n}(this, (function (exports, React) { 'use strict';\\n\\n var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\\n\\n var suppressWarning = false;\\n function setSuppressWarning(newSuppressWarning) {\\n {\\n suppressWarning = newSuppressWarning;\\n }\\n } // In DEV, calls to console.warn and console.error get replaced\\n // by calls to these methods by a Babel plugin.\\n //\\n // In PROD (or in packages without access to React internals),\\n // they are left as they are instead.\\n\\n function warn(format) {\\n {\\n if (!suppressWarning) {\\n for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\\n args[_key - 1] = arguments[_key];\\n }\\n\\n printWarning('warn', format, args);\\n }\\n }\\n }\\n function error(format) {\\n {\\n if (!suppressWarning) {\\n for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\\n args[_key2 - 1] = arguments[_key2];\\n }\\n\\n printWarning('error', format, args);\\n }\\n }\\n }\\n\\n function printWarning(level, format, args) {\\n // When changing this logic, you might want to also\\n // update consoleWithStackDev.www.js as well.\\n {\\n var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame;\\n var stack = ReactDebugCurrentFrame.getStackAddendum();\\n\\n if (stack !== '') {\\n format += '%s';\\n args = args.concat([stack]);\\n } // eslint-disable-next-line react-internal/safe-string-coercion\\n\\n\\n var argsWithFormat = args.map(function (item) {\\n return String(item);\\n }); // Careful: RN currently depends on this prefix\\n\\n argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it\\n // breaks IE9: https://github.com/facebook/react/issues/13610\\n // eslint-disable-next-line react-internal/no-production-logging\\n\\n Function.prototype.apply.call(console[level], console, argsWithFormat);\\n }\\n }\\n\\n var FunctionComponent = 0;\\n var ClassComponent = 1;\\n var IndeterminateComponent = 2; // Before we know whether it is function or class\\n\\n var HostRoot = 3; // Root of a host tree. Could be nested inside another node.\\n\\n var HostPortal = 4; // A subtree. Could be an entry point to a different renderer.\\n\\n var HostComponent = 5;\\n var HostText = 6;\\n var Fragment = 7;\\n var Mode = 8;\\n var ContextConsumer = 9;\\n var ContextProvider = 10;\\n var ForwardRef = 11;\\n var Profiler = 12;\\n var SuspenseComponent = 13;\\n var MemoComponent = 14;\\n var SimpleMemoComponent = 15;\\n var LazyComponent = 16;\\n var IncompleteClassComponent = 17;\\n var DehydratedFragment = 18;\\n var SuspenseListComponent = 19;\\n var ScopeComponent = 21;\\n var OffscreenComponent = 22;\\n var LegacyHiddenComponent = 23;\\n var CacheComponent = 24;\\n var TracingMarkerComponent = 25;\\n\\n // -----------------------------------------------------------------------------\\n\\n var enableClientRenderFallbackOnTextMismatch = true; // TODO: Need to review this code one more time before landing\\n // the react-reconciler package.\\n\\n var enableNewReconciler = false; // Support legacy Primer support on internal FB www\\n\\n var enableLazyContextPropagation = false; // FB-only usage. The new API has different semantics.\\n\\n var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber\\n\\n var enableSuspenseAvoidThisFallback = false; // Enables unstable_avoidThisFallback feature in Fizz\\n // React DOM Chopping Block\\n //\\n // Similar to main Chopping Block but only flags related to React DOM. These are\\n // grouped because we will likely batch all of them into a single major release.\\n // -----------------------------------------------------------------------------\\n // Disable support for comment nodes as React DOM containers. Already disabled\\n // in open source, but www codebase still relies on it. Need to remove.\\n\\n var disableCommentsAsDOMContainers = true; // Disable javascript: URL strings in href for XSS protection.\\n // and client rendering, mostly to allow JSX attributes to apply to the custom\\n // element's object properties instead of only HTML attributes.\\n // https://github.com/facebook/react/issues/11347\\n\\n var enableCustomElementPropertySupport = false; // Disables children for