{
  "paragraphs": [
    {
      "title": "Overview",
      "text": "%md\n\n\nThere\u0027re many visualization libraries availabel in python world. Visualization is tremendous useful in notebook enviroment, most of them could be used in Jupyter Notebook. And most of them can also be used in Apache Zeppelin Notebook, but maybe a little difference for some libraries. This tutorial will teach you how to use these popular visualization libraries in Apache Zeppelin. To be noted, you need to use IPython interpreter to make these libraries work in Zeppelin. IPython interpreter is only available starting from Zeppelin 0.8.0.\n\nWe would cover the following visualiztion libraries:\n\n* Matplotlib\n* Pandas\n* Seaborn\n* Plotnine\n* Bokeh\n* Holoviews\n* Altair\n* Plotly",
      "user": "anonymous",
      "dateUpdated": "2021-08-01 05:30:04.562",
      "progress": 0,
      "config": {
        "tableHide": false,
        "editorSetting": {
          "language": "markdown",
          "editOnDblClick": true,
          "completionKey": "TAB",
          "completionSupport": false
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/markdown",
        "fontSize": 9.0,
        "editorHide": true,
        "results": {},
        "enabled": true,
        "title": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003cp\u003eThere\u0026rsquo;re many visualization libraries availabel in python world. Visualization is tremendous useful in notebook enviroment, most of them could be used in Jupyter Notebook. And most of them can also be used in Apache Zeppelin Notebook, but maybe a little difference for some libraries. This tutorial will teach you how to use these popular visualization libraries in Apache Zeppelin. To be noted, you need to use IPython interpreter to make these libraries work in Zeppelin. IPython interpreter is only available starting from Zeppelin 0.8.0.\u003c/p\u003e\n\u003cp\u003eWe would cover the following visualiztion libraries:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMatplotlib\u003c/li\u003e\n\u003cli\u003ePandas\u003c/li\u003e\n\u003cli\u003eSeaborn\u003c/li\u003e\n\u003cli\u003ePlotnine\u003c/li\u003e\n\u003cli\u003eBokeh\u003c/li\u003e\n\u003cli\u003eHoloviews\u003c/li\u003e\n\u003cli\u003eAltair\u003c/li\u003e\n\u003cli\u003ePlotly\u003c/li\u003e\n\u003c/ul\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482808_420748092",
      "id": "20180117-220147_1889980489",
      "dateCreated": "2020-02-05 14:34:42.808",
      "dateStarted": "2021-08-01 05:30:04.570",
      "dateFinished": "2021-08-01 05:30:06.944",
      "status": "FINISHED"
    },
    {
      "title": "",
      "text": "%md\n\n# Matplotlib\n\nMatplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. The usage of Matplotlib in Zeppelin is the same as Jupyter Notebook. The key is to put `%matplotlib inline` before using Matplotlig. Below is one simple example, for more usage of Matplotlib, you can refer this [link](https://matplotlib.org/).",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:09.183",
      "progress": 0,
      "config": {
        "tableHide": false,
        "editorSetting": {
          "language": "text",
          "editOnDblClick": false,
          "completionKey": "TAB"
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/text",
        "fontSize": 9.0,
        "editorHide": true,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eMatplotlib\u003c/h1\u003e\n\u003cp\u003eMatplotlib is a Python 2D plotting library which produces publication quality figures in a variety of hardcopy formats and interactive environments across platforms. The usage of Matplotlib in Zeppelin is the same as Jupyter Notebook. The key is to put \u003ccode\u003e%matplotlib inline\u003c/code\u003e before using Matplotlig. Below is one simple example, for more usage of Matplotlib, you can refer this \u003ca href\u003d\"https://matplotlib.org/\"\u003elink\u003c/a\u003e.\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482810_-1147533206",
      "id": "20180118-090246_2126121401",
      "dateCreated": "2020-02-05 14:34:42.810",
      "dateStarted": "2021-07-26 03:16:09.204",
      "dateFinished": "2021-07-26 03:16:09.212",
      "status": "FINISHED"
    },
    {
      "title": "Matplotlib Example",
      "text": "%python.ipython\n\n%matplotlib inline\n\nimport matplotlib.pyplot as plt\n\nplt.plot([1,2,3,4])\nplt.ylabel(\u0027some numbers\u0027)\nplt.show()\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:09.304",
      "progress": 0,
      "config": {
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/python",
        "fontSize": 9.0,
        "title": true,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "IMG",
            "data": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAAAmEUlEQVR4nO3dd3xV9f3H8dcHCHsbRhhhb4KIYTjqHoAo4mitra1aRa3+OhUQtahYd4etVcSqldbaWsKS4d5boJLBDEv2lIQVsj6/P+7194sxkBvIzcnNfT8fjzy499zvvfdzPJg355zv+Rxzd0REJH7VCroAEREJloJARCTOKQhEROKcgkBEJM4pCERE4lydoAuoqMTERO/cuXPQZYiIxJRFixbtdPdWZb0Wc0HQuXNnFi5cGHQZIiIxxczWH+41HRoSEYlzCgIRkTinIBARiXMKAhGROKcgEBGJc1EPAjOrbWb/NbO5ZbxmZvYnM8s2s3QzGxTtekRE5JuqYo/g58Cyw7w2AugR/hkLPFkF9YiISAlRDQIz6wBcAPz1MENGA9M85BOguZklRbMmEZFYU1BUzBPvZLNkw56ofH609wj+CIwDig/zentgQ4nnG8PLvsHMxprZQjNbuGPHjkovUkSkusrclMPFf/mQh19ZwYLMrVH5jqhdWWxmo4Dt7r7IzM443LAyln3rTjnuPhWYCpCamqo76YhIjZdXUMSf31rFlHfX0KJhXZ78wSBGpETngEk0W0ycAlxkZiOB+kBTM/uHu/+wxJiNQMcSzzsAm6NYk4hItbdw3W7GpaWzZsd+Lj+xA3de0JdmDROi9n1RCwJ3vx24HSC8R3BrqRAAmAPcYmb/AoYCOe6+JVo1iYhUZ/sOFfLIK8uZ9sl62jVrwLRrh3BazzL7xFWqKm86Z2Y3Arj7FGA+MBLIBg4A11R1PSIi1cG7K3cwcUYGm3MO8uOTOnPb+b1oVK9qfkVXybe4+zvAO+HHU0osd+DmqqhBRKQ62nMgn8lzl5G2eCPdWjXiPzecRGrnllVaQ8y1oRYRqSkWZGzhrtlZ7DmQzy1ndueWs7pTP6F2ldehIBARqWLbc/P4zewsXsnaSv/2TXn+2sH0a9cssHoUBCIiVcTd+c+ijdw3dyl5hcWMH96b67/ThTq1g237piAQEakCG3YfYOLMDN5ftZMhnVvy4KUpdG3VOOiyAAWBiEhUFRU70z5exyOvrsCAyaP78YOhnahVq6zraYOhIBARiZLs7XsZn5bBovVfcUavVvx2TArtmzcIuqxvURCIiFSygqJinnp3NX96M5uG9Wrzh+8dz8UD22NWffYCSlIQiIhUooyNOdw2fQnLt+7lggFJ3HNRPxIb1wu6rCNSEIiIVIK8giL++MYqnn5/Dcc1qstTV53I+f3aBl1WRBQEIiLH6NM1u5gwI4O1O/fzvdSOTLygD80aRK9JXGVTEIiIHKW9eQU8/MoK/v7Jejq2bMAL1w3llO6JQZdVYQoCEZGj8Pby7dwxM4MtuXn85NQu/Pq8njSsG5u/UmOzahGRgOzen8/kuUuZ+d9N9GjdmLSbTmZQcougyzomCgIRkQi4O/MytjBpdhY5Bwv42dk9uPnMbtSrU/VN4iqbgkBEpBzbcvO4c1Ymry/dxoAOzfjHdUPpk9Q06LIqjYJAROQw3J2XFm7gvnnLyC8sZuLI3lx7SvBN4iqbgkBEpAxf7jrAhBnpfLR6F0O7tOShSwfQObFR0GVFhYJARKSEomLnuQ/X8uhrK6hTqxb3j0nhisEdq1WTuMqmIBARCVu5bS/jpqfzxYY9nNW7Nb8d05+kZtWvSVxlUxCISNzLLyzmyXdW8/jbq2hSP4HHrhjIRce3q7ZN4iqbgkBE4tqSDXsYn5bO8q17GT2wHb8Z1ZfjqnmTuMqmIBCRuHQwv4g/vLGSv76/htZN6vPXH6VyTt82QZcVCAWBiMSdj1fvYsKMdNbvOsCVQ5OZMKI3TevHTpO4yqYgEJG4kZtXwAPzl/PiZ1/S6biG/PP6oZzcLfaaxFW2qAWBmdUH3gPqhb9nurtPKjXmDGA2sDa8aIa73xutmkQkfr25bBt3zMxk+948xp7WlV+e05MGdWO/PURliOYewSHgLHffZ2YJwAdmtsDdPyk17n13HxXFOkQkju3ad4h7Xl7KnCWb6d22CU9ddSLHd2wedFnVStSCwN0d2Bd+mhD+8Wh9n4hISe7OnCWbueflpezNK+CX5/TkpjO6UbdOzWoPURmieo7AzGoDi4DuwF/c/dMyhp1kZkuAzcCt7p5VxueMBcYCJCcnR7FiEakJtuQc5M6Zmby5fDsDOzbn4csG0LNNk6DLqraiGgTuXgQMNLPmwEwz6+/umSWGLAY6hQ8fjQRmAT3K+JypwFSA1NRU7VWISJmKi50XP/+SB+Yvp7C4mDsv6MM1p3Shdg1uD1EZqmTWkLvvMbN3gOFAZonluSUezzezJ8ws0d13VkVdIlJzrNu5nwkz0vlkzW5O7nYcD14ygOTjGgZdVkyI5qyhVkBBOAQaAOcAD5Ua0xbY5u5uZkOAWsCuaNUkIjVPYVExz364lt+9tpK6dWrx0KUpfDe1Y9y0h6gM0dwjSAKeD58nqAW85O5zzexGAHefAlwG3GRmhcBB4IrwSWYRkXIt35rL+OnpLNmYw7l923Dfxf1p07R+0GXFnGjOGkoHTihj+ZQSjx8HHo9WDSJSMx0qLOIvb6/mibezadYggcevPIELUpK0F3CUdGWxiMSUxV9+xfjp6azavo8xJ7TnN6P60qJR3aDLimkKAhGJCQfyC/ndayt59sO1tG1an+euHsyZvVsHXVaNoCAQkWrvw+ydTJiRzobdB7lqWCfGDe9FkzhuElfZFAQiUm3lHCzggfnL+NfnG+iS2Ih/jx3G0K7HBV1WjaMgEJFq6bWsrdw5K5Nd+/O58fRu/OKcHtRPUJO4aFAQiEi1smPvIe5+OYt56Vvok9SUZ348mJQOzYIuq0ZTEIhIteDuzPpiE/e8vJQDh4q49bye3HB6NxJqq0lctCkIRCRwm/Yc5I6ZGbyzYgeDkkNN4rq3VpO4qqIgEJHAFBc7L3y6ngcXLKfYYdKFffnRSZ3VJK6KKQhEJBBrduxjQloGn63bzXd6JHL/mBQ6tlSTuCAoCESkShUWFfP0+2v5wxsrqV+nFo9cNoDLTuyg9hABUhCISJVZujmXcWlLyNyUy/n92jB5dH9aq0lc4BQEIhJ1eQVFPP5WNlPeXU3zhnV58geDGJGSFHRZEqYgEJGoWrR+N+Omp7N6x34uHdSBu0b1oXlDNYmrThQEIhIV+w8V8sirK3j+43W0a9aA568dwuk9WwVdlpRBQSAile69lTu4fUYGm3MO8qNhnbhteG8a19Ovm+pKW0ZEKk3OgQImz1vK9EUb6dqqES/dcBKDO7cMuiwph4JARCrFK5lbuGt2Frv35/PTM7rxs7PVJC5WKAhE5Jhs35vHpNlZLMjcSr92TXnu6sH0b68mcbFEQSAiR8XdSVu8iclzl3KwoIhxw3tx/Xe6qklcDFIQiEiFbdh9gIkzM3h/1U4Gd27Bg5cOoFurxkGXJUdJQSAiESsudqZ9vI6HX12BAfeO7scPh3ailprExTQFgYhEJHv7PiakpbNw/Vec1rMV94/pT4cWahJXEygIROSICoqKmfreGh57YxUN69Xmd5cfzyWD2qtJXA0StSAws/rAe0C98PdMd/dJpcYY8BgwEjgAXO3ui6NVk4hUTOamHMZNT2fpllwuSEni7ov60apJvaDLkkpWbhCY2eXAK+6+18zuBAYB90XwC/sQcJa77zOzBOADM1vg7p+UGDMC6BH+GQo8Gf5TRAKUV1DEY2+uYup7a2jZqC5Tfngiw/u3DbosiZJI9gjucvf/mNmpwPnAo0TwC9vdHdgXfpoQ/vFSw0YD08JjPzGz5maW5O5bKrISIlJ5Pl+3m/HT01mzcz/fTe3AHSP70qxhQtBlSRRFMuG3KPznBcCT7j4biKh1oJnVNrMvgO3A6+7+aakh7YENJZ5vDC8r/TljzWyhmS3csWNHJF8tIhW071Ahv5mdyeVTPia/qJh//GQoD192vEIgDkSyR7DJzJ4CzgEeMrN6RBYguHsRMNDMmgMzzay/u2eWGFLW2abSew24+1RgKkBqauq3XheRY/POiu3cMTOTzTkHufaULvz6vJ40UpO4uBHJlv4uMBx41N33mFkScFtFviT8vnfCn1MyCDYCHUs87wBsrshni8jR+2p/PpPnLWXG4k10b92Y6TeezImdWgRdllSxIwaBmdUCPnP3/l8vCx+/L/cYvpm1AgrCIdCA8B5FqWFzgFvM7F+Ezjnk6PyASPS5O/MztjJpTiZ7DhTws7O6c/NZ3alXR03i4tERg8Ddi81siZklu/uXFfzsJOB5M6tN6FDSS+4+18xuDH/2FGA+oamj2YSmj15T4TUQkQrZnpvHnbMyeW3pNlLaN2PatUPp265p0GVJgCI5NJQEZJnZZ8D+rxe6+0VHepO7pwMnlLF8SonHDtwccbUictTcnf8s3MjkeUvJLyzm9hG9+cmpXaijJnFxL5IguCfqVYhIVG3YfYDbZ2TwQfZOhnRpyYOXpNBVTeIkrNwgcPd3zawT0MPd3zCzhoAOJIrEgKJi5/mP1vHIqyuoXcu47+L+XDkkWU3i5BsiubL4emAs0BLoRmie/xTg7OiWJiLHYtW2vYxPS2fxl3s4s1crfjsmhXbNGwRdllRDkRwauhkYAnwK4O6rzKx1VKsSkaNWUFTMlHdW8+e3smlUrzZ//N5ARg9spyZxcliRBMEhd8//+i+RmdWhjIu+RCR4GRtzuG36EpZv3cuFx7dj0oV9SWysJnFyZJEEwbtmNhFoYGbnAj8FXo5uWSJSEXkFRfzhjZU8/d4aWjWpx9M/SuXcvm2CLktiRCRBMAH4CZAB3EBo7v9fo1mUiETukzW7mJCWzrpdB/j+kI5MGNGHZg3UH0giF8msoWIze57QOQIHVoTn/4tIgPbmFfDgguW88OmXJLdsyD+vG8rJ3RODLktiUCSzhi4gNEtoNaEmcV3M7AZ3XxDt4kSkbG8v387EmRlsy83julO78KvzetKwrprEydGJ5G/O74Az3T0bwMy6AfMABYFIFdu9P597X85i1heb6dmmMU/84GROSFaTODk2kQTB9q9DIGwNofsLiEgVcXfmpm/h7jlZ5OYV8POze3Dzmd2pW0ftIeTYHTYIzOyS8MMsM5sPvEToHMHlwOdVUJuIANty87hjZiZvLNvG8R2a8dBlQ+ndVk3ipPIcaY/gwhKPtwGnhx/vALQvKhJl7s6/P9/Ab+cvo6ComDtG9uHaU7tQW+0hpJIdNgjcXS2hRQKyftd+bp+RwUerdzGsa0sevGQAnRMbBV2W1FCRzBrqAvwP0Lnk+PLaUItIxRUVO899uJZHX1tBQq1a3D8mhSsGd1STOImqSE4WzwKeIXQ1cXFUqxGJYyu2hprEfbFhD2f3bs19Y/qT1ExN4iT6IgmCPHf/U9QrEYlT+YXFPPFONn95O5sm9RP40/dP4MIBSWoSJ1UmkiB4zMwmAa8Bh75e6O6Lo1aVSJxYsmEP46ans2LbXkYPbMekC/vRslHdoMuSOBNJEKQAVwFn8f+Hhjz8XESOwsH8In7/+gqe+WAtrZvU55kfp3J2HzWJk2BEEgRjgK7unh/tYkTiwUerd3L7jAzW7zrAlUOTmTCiN03rq0mcBCeSIFgCNEdXE4sck9y8Ah6Yv5wXP/uSTsc15MXrh3FSt+OCLkskoiBoAyw3s8/55jkCTR8VidAbS7dxx6wMduw9xNjTuvLLc3rSoK5u/S3VQyRBMCnqVYjUULv2HeKel5cyZ8lmerdtwtSrUjm+Y/OgyxL5hkjuR/BuVRQiUpO4O3OWbObuOVnsO1TIr87tyY2nd1OTOKmWIrmyeC//f4/iukACsN/dj9j1ysw6AtOAtoRmG01198dKjTkDmA2sDS+a4e73VqB+kWpnS85B7pyZyZvLtzOwY3MevmwAPds0CboskcOKZI/gG3+DzexiYEgEn10I/NrdF5tZE2CRmb3u7ktLjXvf3UdFWrBIdVVc7Lz4+Zc8MH85RcXOXaP6cvXJndUkTqq9Ct/SyN1nmdmECMZtAbaEH+81s2VAe6B0EIjEvLU79zMhLZ1P1+7mlO7H8cCYASQf1zDoskQiEsmhoUtKPK0FpPL/h4oiYmadgRMI3fe4tJPMbAmwGbjV3bPKeP9YYCxAcnJyRb5aJKoKi4p59sO1/O61ldStU4uHLk3hu6kd1R5CYkokewQl70tQCKwDRkf6BWbWGEgDfuHuuaVeXgx0cvd9ZjaSUIO7HqU/w92nAlMBUlNTKxRCItGybEsu49PSSd+Yw7l923Dfxf1p07R+0GWJVFgk5wiO+r4EZpZAKARecPcZZXx2bonH883sCTNLdPedR/udItF2qLCIv7y9mifezqZZgwQev/IELkhRkziJXZEcGmoFXM+370dwbTnvM0Ltq5e5++8PM6YtsM3d3cyGEDr0tCvi6kWq2OIvv2L89HRWbd/HJSe0565RfWmhJnES4yI5NDQbeB94AyiqwGefQqhZXYaZfRFeNhFIBnD3KcBlwE1mVggcBK5wdx36kWrnQH4hj766kuc+WktS0/o8d81gzuzVOuiyRCpFJEHQ0N3HV/SD3f0D4Ij7yu7+OPB4RT9bpCp9mL2TCTPS2bD7IFcN68S44b1ooiZxUoNEEgRzzWyku8+PejUi1UjOwQLun7eMfy/cQJfERvx77DCGdlWTOKl5IgmCnwMTzewQUEDoX/le3pXFIrHstayt3Dkrk13787nx9G784pwe1E9QkzipmSp8ZbFITbZj7yHufjmLeelb6JPUlGd+PJiUDs2CLkskqip8ZbFITeTuzPzvJu6du5QDh4q49bye3HB6NxJqq0mc1HwKAol7m/Yc5I6ZGbyzYgeDkkNN4rq31o6wxA8FgcSt4mLnhU/X8+CC5Thw94V9ueokNYmT+BNREJjZqUAPd38ufIFZY3dfW977RKqrNTv2MSEtg8/W7eY7PRK5f0wKHVuqSZzEp0iuLJ5EqNFcL+A5Qvcj+AehC8ZEYkphUTFPv7+WP7yxkvp1avHIZQO47MQOag8hcS2SPYIxhDqHLgZw983h+wuIxJSszTmMT0snc1Mu5/drw+TR/WmtJnEiEQVBfrgXkAOYWaMo1yRSqfIKivjzW6uY8u4aWjSsy5M/GMSIlKSgyxKpNiIJgpfM7CmguZldD1wLPB3dskQqx6L1uxk3PZ3VO/Zz6aAO3DWqD80bqkmcSEmRXFD2qJmdC+QSOk/wG3d/PeqViRyD/YcKeeTVFTz/8TraNWvA89cO4fSerYIuS6RaimjWkLu/bmaffj3ezFq6++6oViZylN5buYPbZ2SwOecgPxrWiduG96ZxPc2UFjmcSGYN3QDcS6hNdDHhXkNA1+iWJlIxOQcKmDxvKdMXbaRrq0a8dMNJDO7cMuiyRKq9SP6ZdCvQT3cNk+rslcwt3DU7i9378/npGd342dlqEicSqUiCYDVwINqFiByN7XvzmDQ7iwWZW+mb1JTnrh5M//ZqEidSEZEEwe3AR+FzBIe+XujuP4taVSLlcHemL9rIffOWcbCgiNvO78XY07qqSZzIUYgkCJ4C3gIyCJ0jEAnUht0HmDgzg/dX7SS1UwsevHQA3Vs3DroskZgVSRAUuvuvol6JSDmKi51pH6/j4VdXYMC9o/vxw6GdqKUmcSLHJJIgeNvMxgIv881DQ5o+KlUme/s+JqSls3D9V5zWsxX3j+lPhxZqEidSGSIJgivDf95eYpmmj0qVKCgqZup7a3jsjVU0qFub311+PJcMaq8mcSKVKJIri7tURSEipWVuymHc9HSWbsllZEpb7rmoP62a1Au6LJEaJ5ILyhKAm4DTwoveAZ5y94Io1iVxLK+giMfeXMXU99bQslFdpvxwEMP7q0mcSLREcmjoSUL3IHgi/Pyq8LLrolWUxK/P1+1m/PR01uzcz+UnduDOC/rSrGFC0GWJ1GiRBMFgdz++xPO3zGxJeW8ys47ANKAtoWmnU939sVJjDHgMGEnoorWr3X1xpMVLzbHvUCEPv7KcaR+vp0OLBvz9J0P4Tg81iROpCpEEQZGZdXP31QBm1hUoiuB9hcCv3X1x+EY2i8zsdXdfWmLMCKBH+GcooT2NoRVaA4l5b6/Yzh0zMtiSm8c1p3Tm1vN60UhN4kSqTCT/t91GaArpGkIN5zoB15T3JnffAmwJP95rZsuA9kDJIBgNTHN3Bz4xs+ZmlhR+r9RwX+3PZ/Lcpcz47ya6t27M9BtP5sROLYIuSyTuRDJr6E0z60HoXgQGLHf3Q+W87RvMrDOh211+Wuql9sCGEs83hpd9IwjC1zGMBUhOTq7IV0s15O7Mz9jKpDmZ7DlQwC1ndud/zu5OvTpqEicShHIbs5jZ5UBdd08HLgReNLNBkX6BmTUG0oBfuHtu6ZfLeIt/a4H7VHdPdffUVq103DiWbc/N44a/L+Lmfy4mqVkD5txyKree30shIBKgSA4N3eXu/zGzU4HzgUeJ8Fh+eOppGvCCu88oY8hGoGOJ5x2AzRHUJDHG3fnPwo1MnreU/MJiJozozXWndqGOmsSJBC6ik8XhPy8AnnT32WZ2d3lvCs8IegZY5u6/P8ywOcAtZvYvQsGSo/MDNc+Xu0JN4j7I3smQLi158JIUurZSkziR6iKSINgUvnn9OcBDZlaPCA4pAacQuuYgw8y+CC+bCCQDuPsUYD6hqaPZhKaPlnsSWmJHUbHzt4/W8eirK6hdy7jv4v5cOSRZTeJEqplIguC7wHDgUXffY2ZJhGYSHZG7f0DZ5wBKjnHg5kgKldiyattexqWl898v93BGr1bcPyaFds0bBF2WiJQhkllDB4AZJZ7/37RQkdLyC4uZ8u5qHn8rm0b1avPH7w1k9MB2ahInUo3pqh2pNOkb9zBuejrLt+5l1IAk7r6oH4mN1SROpLpTEMgxyyso4g+vr+Tp99eQ2LgeU686kfP6tQ26LBGJkIJAjskna3YxIS2ddbsO8P0hHZkwog/NGqhJnEgsURDIUdmbV8CDC5bzwqdfktyyIf+8bignd08MuiwROQoKAqmwt5Zv446ZmWzLzeO6U7vwq/N60rCu/iqJxCr93ysR270/n3tfzmLWF5vp0boxT9x0Mickq0mcSKxTEEi53J2X07dw95wscg8W8POze/DTM7upP5BIDaEgkCPampPHnbMyeWPZNo7v0IyHrh9K77ZNgy5LRCqRgkDK5O786/MN3D9vGQXFxdwxsg/XntqF2moPIVLjKAjkW9bv2s+EtAw+XrOLYV1b8uAlA+ic2CjoskQkShQE8n+Kip3nPlzLo6+tIKFWLe4fk8IVgzuqSZxIDacgEABWbA01iVuyYQ9n927NfWP6k9RMTeJE4oGCIM7lFxbzxDvZ/OXtbJrUT+CxKwZy0fFqEicSTxQEceyLDXsYPz2dFdv2MnpgO34zqi/HqUmcSNxREMShg/lF/O61FTz74VpaN6nPMz9O5ew+bYIuS0QCoiCIMx+t3smEtAy+3H2AK4cmM2FEb5rWV5M4kXimIIgTuXkFPDB/GS9+toFOxzXkxeuHcVK344IuS0SqAQVBHHhj6TbumJXBjr2HGHtaV355Tk8a1FV7CBEJURDUYLv2HeLul5fy8pLN9G7bhKlXpXJ8x+ZBlyUi1YyCoAZyd2Z/sZl7Xs5i36FCfnVuT248vRt169QKujQRqYYUBDXM5j0HuXNWJm8t387Ajs15+LIB9GzTJOiyRKQaUxDUEMXFzj8/+5IHFyynqNi5a1Rfrj65s5rEiUi5FAQ1wNqd+5mQls6na3dzSvfjeGDMAJKPaxh0WSISI6IWBGb2LDAK2O7u/ct4/QxgNrA2vGiGu98brXpqosKiYp75YC2/f30ldevU4qFLU/huake1hxCRConmHsHfgMeBaUcY8767j4piDTXW0s25jE9LJ2NTDuf2bcN9F/enTdP6QZclIjEoakHg7u+ZWedofX68OlRYxONvZfPkO6tp3jCBv1w5iJEpbbUXICJHLehzBCeZ2RJgM3Cru2eVNcjMxgJjAZKTk6uwvOpl0fqvGJ+WTvb2fVxyQnvuGtWXFo3qBl2WiMS4IINgMdDJ3feZ2UhgFtCjrIHuPhWYCpCamupVVmE1cSC/kEdeXcHfPlpHUtP6PHfNYM7s1TroskSkhggsCNw9t8Tj+Wb2hJkluvvOoGqqjj5YtZMJM9LZ+NVBrhrWiXHDe9FETeJEpBIFFgRm1hbY5u5uZkOAWsCuoOqpbnIOFvDbeUt5aeFGuiQ24t9jhzG0q5rEiUjli+b00ReBM4BEM9sITAISANx9CnAZcJOZFQIHgSvcPe4O+5Tl1ayt3DUrk13787npjG78/Owe1E9QkzgRiY5ozhr6fjmvP05oeqmE7dh7iLvnZDEvYwt9kpryzI8Hk9KhWdBliUgNF/SsISHUJG7G4k3cO3cpB/OLuO38Xow9rSsJtdUkTkSiT0EQsE17DjJxRgbvrtzBoORQk7jurdUkTkSqjoIgIMXFzj8+Xc9DC5bjwN0X9uWqk9QkTkSqnoIgAKt37GNCWjqfr/uK7/RI5P4xKXRsqSZxIhIMBUEVKigq5un31/DHN1ZRv04tHrlsAJed2EHtIUQkUAqCKpK5KYfxaelkbc5leL+23HtxP1o3UZM4EQmegiDK8gqK+PNbq5jy7hpaNKzLkz8YxIiUpKDLEhH5PwqCKFq4bjfj0tJZs2M/lw7qwF2j+tC8oZrEiUj1oiCIgv2HQk3inv94He2aNeD5a4dwes9WQZclIlImBUEle3flDibOyGBzzkF+fFJnbju/F43q6T+ziFRf+g1VSfYcyGfy3GWkLd5I11aN+M8NJ5HauWXQZYmIlEtBUAkWZGzhrtlZfHUgn5vP7Mb/nKUmcSISOxQEx2B7bh6/mZ3FK1lb6deuKc9fO5h+7dQkTkRii4LgKLg70xdtZPLcpeQVFjNueC+u/46axIlIbFIQVNCG3QeYODOD91ftZHDnFjx46QC6tWocdFkiIkdNQRChomLn7x+v4+FXV2DA5NH9+MHQTtRSkzgRiXEKgghkb9/L+LQMFq3/itN7tuK3Y/rToYWaxIlIzaAgOIKComKeenc1f3ozm4b1avP77x7PmBPaq0mciNQoCoLDyNyUw23T01m2JZcLUpK4+6J+tGpSL+iyREQqnYKglLyCIv74xiqefn8NLRvVZcoPT2R4/7ZBlyUiEjUKghI+W7ubCWnprNm5n++ldmTiyD40a5gQdFkiIlGlIAD25hXw8Csr+Psn6+nQogH/+MlQTu2RGHRZIiJVIu6D4O0V27ljRgZbcvO49pQu3Hp+TxrWjfv/LCISR+L2N95X+/OZPHcpM/67ie6tGzP9xpM5sVOLoMsSEalyUQsCM3sWGAVsd/f+ZbxuwGPASOAAcLW7L45WPV9zd+ZlbGHS7CxyDhbws7O6c/NZ3alXR03iRCQ+RXOP4G/A48C0w7w+AugR/hkKPBn+M2q25eZx16xMXlu6jZT2zfjHdUPpk9Q0ml8pIlLtRS0I3P09M+t8hCGjgWnu7sAnZtbczJLcfUs06nl7+XZ+9q//kl9YzO0jevOTU7tQR03iREQCPUfQHthQ4vnG8LJvBYGZjQXGAiQnJx/Vl3VJbMSg5BbcfVE/uiQ2OqrPEBGpiYL8J3FZfRq8rIHuPtXdU909tVWro7v3b+fERjx/7RCFgIhIKUEGwUagY4nnHYDNAdUiIhK3ggyCOcCPLGQYkBOt8wMiInJ40Zw++iJwBpBoZhuBSUACgLtPAeYTmjqaTWj66DXRqkVERA4vmrOGvl/O6w7cHK3vFxGRyGj+pIhInFMQiIjEOQWBiEicUxCIiMQ5C52zjR1mtgNYf5RvTwR2VmI5QdK6VE81ZV1qynqA1uVrndy9zCtyYy4IjoWZLXT31KDrqAxal+qppqxLTVkP0LpEQoeGRETinIJARCTOxVsQTA26gEqkdameasq61JT1AK1LueLqHIGIiHxbvO0RiIhIKQoCEZE4VyODwMyGm9kKM8s2swllvG5m9qfw6+lmNiiIOiMRwbqcYWY5ZvZF+Oc3QdRZHjN71sy2m1nmYV6PpW1S3rrEyjbpaGZvm9kyM8sys5+XMSYmtkuE6xIr26W+mX1mZkvC63JPGWMqd7u4e436AWoDq4GuQF1gCdC31JiRwAJCd0kbBnwadN3HsC5nAHODrjWCdTkNGARkHub1mNgmEa5LrGyTJGBQ+HETYGUM/78SybrEynYxoHH4cQLwKTAsmtulJu4RDAGy3X2Nu+cD/wJGlxozGpjmIZ8Azc0sqaoLjUAk6xIT3P09YPcRhsTKNolkXWKCu29x98Xhx3uBZYTuG15STGyXCNclJoT/W+8LP00I/5Se1VOp26UmBkF7YEOJ5xv59l+ISMZUB5HWeVJ4N3KBmfWrmtIqXaxsk0jF1DYxs87ACYT+9VlSzG2XI6wLxMh2MbPaZvYFsB143d2jul2idmOaAFkZy0qnaSRjqoNI6lxMqIfIPjMbCcwCekS7sCiIlW0SiZjaJmbWGEgDfuHuuaVfLuMt1Xa7lLMuMbNd3L0IGGhmzYGZZtbf3Uuek6rU7VIT9wg2Ah1LPO8AbD6KMdVBuXW6e+7Xu5HuPh9IMLPEqiux0sTKNilXLG0TM0sg9IvzBXefUcaQmNku5a1LLG2Xr7n7HuAdYHiplyp1u9TEIPgc6GFmXcysLnAFMKfUmDnAj8Jn3ocBOe6+paoLjUC562Jmbc3Mwo+HENqmu6q80mMXK9ukXLGyTcI1PgMsc/ffH2ZYTGyXSNYlhrZLq/CeAGbWADgHWF5qWKVulxp3aMjdC83sFuBVQrNunnX3LDO7Mfz6FGA+obPu2cAB4Jqg6j2SCNflMuAmMysEDgJXeHhaQXViZi8SmrWRaGYbgUmEToLF1DaBiNYlJrYJcApwFZARPh4NMBFIhpjbLpGsS6xslyTgeTOrTSisXnL3udH8HaYWEyIica4mHhoSEZEKUBCIiMQ5BYGISJxTEIiIxDkFgYhInFMQiIjEOQWBiEic+1+cWCtq0q8SEAAAAABJRU5ErkJggg\u003d\u003d\n"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482810_-1322704841",
      "id": "20180117-220535_590781730",
      "dateCreated": "2020-02-05 14:34:42.810",
      "dateStarted": "2021-07-26 03:16:09.329",
      "dateFinished": "2021-07-26 03:16:10.047",
      "status": "FINISHED"
    },
    {
      "title": "",
      "text": "%md\n\n# Pandas\n\nPandas provide high level api for visualization on DataFrame. It uses Matplotlib for its visualization underlying, so the usage is the same as Matplotlib. ",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:10.129",
      "progress": 0,
      "config": {
        "tableHide": false,
        "editorSetting": {
          "language": "markdown",
          "editOnDblClick": true,
          "completionKey": "TAB"
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/markdown",
        "fontSize": 9.0,
        "editorHide": true,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ePandas\u003c/h1\u003e\n\u003cp\u003ePandas provide high level api for visualization on DataFrame. It uses Matplotlib for its visualization underlying, so the usage is the same as Matplotlib.\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482811_125744258",
      "id": "20180118-090527_1578553673",
      "dateCreated": "2020-02-05 14:34:42.811",
      "dateStarted": "2021-07-26 03:16:10.149",
      "dateFinished": "2021-07-26 03:16:10.155",
      "status": "FINISHED"
    },
    {
      "title": "Pandas Example",
      "text": "%python.ipython\n\n%matplotlib inline\n\nimport pandas as pd\nimport numpy as np\n\nts \u003d pd.Series(np.random.randn(1000), index\u003dpd.date_range(\u00271/1/2000\u0027, periods\u003d1000))\nts \u003d ts.cumsum()\nts.plot()",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:10.249",
      "progress": 0,
      "config": {
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/python",
        "fontSize": 9.0,
        "title": true,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "TEXT",
            "data": "\u003cAxesSubplot:\u003e\n"
          },
          {
            "type": "IMG",
            "data": "iVBORw0KGgoAAAANSUhEUgAAAXIAAAEECAYAAAA1X7/VAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABMY0lEQVR4nO2dd5gb1dX/v1ddq+3rXde1FzewjbENtjGmBEIJNZSEBBIIhCR+0wNJfglJCCEVQgrpJPDSkpBA8oY0eoeYAMYN94Z7W2/xVq36/f0xc0d3pJFWZSSNpPN5nn12NDMaXWmkM2fOPed7GOccBEEQRPliK/UACIIgiPwgQ04QBFHmkCEnCIIoc8iQEwRBlDlkyAmCIMocMuQEQRBljqMULzpmzBje0dFRipcmCIIoW1atWtXNOW9NXF8SQ97R0YGVK1eW4qUJgiDKFsbYHqP1FFohCIIoc8iQEwRBlDlkyAmCIMocMuQEQRBlDhlygiCIMocMOUEQRJlDhrxERGMcJCFMEIQZkCEvEYu+/zwu+sXyUg+DIIgKoCQFQQTQOxxC73Co1MMgCKICII+8BAQj0VIPgSCICoIMeQk4MhAs9RAIgqggyJCXgIFAuNRDIAiigiBDXgIGRiKlHgJBEBUEGfISQB45QRBmQoa8BAwG4h75hgP9JRwJQRCVABnyEjAwEvfIV+7uLeFICIKoBMiQlwA5tBKJUXUnQRD5QYa8BAwGInDZlY8+EKaccoIg8oMMeQkYGAmjpdYFxoBAOFbq4ZQFwUgUZ/7oJby4pbPUQyEIy0GGvAQMBMKo9zjhcdjJI8+QNXv7sLvHjzuf3lrqoRCE5SBDXgIGAxHUex3wOG0IULl+RuzsGgYATG31aes45/j0w6vw2o7uUg2LICxBxoacMdbOGHuJMbaZMbaRMfYFdf1tjLEDjLG16t+FhRtuZTAUjMDndsDjtFNoJQOiMY47n9kCALAxpq0fCUfx5PrD+OgDb5VqaARhCbJRP4wA+BLnfDVjrA7AKsbYc+q2uzjnPzZ/eJVJMByDx2FXDTl55KNx8g9eQJ9fyfSRJdyHgko+vtPOjJ5GEFVDxh455/wQ53y1ujwIYDOAiYUaWCUTiEThcdrgdtjII8+A7qG4yNgT6w9p6pEbDwwAAJwOihAS1U1OvwDGWAeABQDeVFd9ljG2jjF2P2OsKcVzljHGVjLGVnZ1deU22gohGI7BrXrkJGmbPdsODwEAPvqgElIR3jpBVCtZG3LGWC2AvwG4kXM+AOBuANMAzAdwCMBPjJ7HOb+Hc76Qc76wtbU19xFXAMIj9zhtFFrJARFSkXljZ08JRkIQ1iArQ84Yc0Ix4g9zzh8DAM55J+c8yjmPAbgXwGLzh1lZBMMxuJ12muzMkg+fPBkA0D+S3FlJ1q8hiGojm6wVBuA+AJs55z+V1o+XdrscwAbzhldZDAUjWL33KIKRKNwOG+WRZ0i9x4FzZrXhM2dNBwB89k9rAECrjgUAB014ElVMNlkrpwK4FsB6xthadd3XAVzNGJsPgAPYDeB/TBxfRXHjI2vx/GalMtHtsFEeeQZsPjSAgUAEExu9aKpxAVD0aYKRKFrr3DjQNwIAsDMy5ET1krEh55wvB2D0a3nSvOFUNpsOxiVru4dCFFoZhWAkivf+ajkA4M1dvfC67Lh68WT8ecVezP3Ws/C57dq+4Sh9jkT1QnlbRcTjihuerqEg5ZGPwo+e3opwVEkc/9qFswAA1y/tAACEojEMh+KfHV0QiWqGDHkR8Trjhvz4CQ1wO20IkgFKya5upSyfMeBdM5VMpyktNdr2UCT+2VEaJ1HNkCEvIh7JkC87Yyo8DjtC0RiipEluSIPXCQCodccjgB6nHZcviNehLZ3WAgAIRuiCSFQvZMiLSKNqmADAbmOaYSdvMplHVuzFY2sOAACWnT5Vt218g0dbPn2G4qkHKURFVDFkyIuI7JEDSuYKAAqvGHDzY+u15c++e7puW40019DsUy6OAfLIU/L2vj4s+cELONQ/UuqhEAWCDHkReWL9IQDARXOV1HuXasgp4yI9LCG10OuKh1pESiJNGqfmu49vwuGBAFbuPlrqoRAFggx5kdjeOagt//rDJwKIF7SEyJBnhU/yyOs8TniddgwblO0TCjFVMnIkRBe7SoUMeZEQaXQycY+cJjsTmSDFwRPxSZOfNS476r0ODIyQIU+F+Ly6JBVJorLIprKTyAOjCU2n8MgpvpuEPxxFrduBmy84Lmlbs8+lLfvcDtR7nBgIkALiaPQOJ2vUEJUBeeRFQhSs3HPtSdo60RCBYuTJ+INRfHjJZFyzZErSNtmQT2+rRb3XSaJZaRAhFX+IPqNKhQy5iYSjMXQOBNBx8xO4/cnN+L9V+7VtQlNlTJ1bWydCKxQj1xOJxhCKxuBzGd8wtqiGXBbNWr6jGwu/93xRxldujKgTwcNBipFXKhRaMZE5tz6jGeXfvboTAHDJvPFwO+wIqF6RXN3potCKIcLweBPSNQVNqiG/9hTFWxd55d1DQXDOwRhD12AQg4EwprbWFmHE1kZ8nn6a7KxYyJCbiJFnPRyMKoZc9cjlXHInpR8aIi5srhQt3Jx2GzZ95z3wOJTP8sZzZuDxdUpqZ58/jCafC6fe8SJC0Rh233FRcQZtYSi0UvlQaMUkUlVnirS4kZBinDzO+EdOHrkxIovHaU/99axxOWCzKXMM4xq82vp9R/0AKFwlQx555UOG3ARe3noEr2w17kMq2pIFDMIFwlCRR65HfB7ODJtF1LodeO+8CQCA/UepejERf5A88kqHDLkJXP/AW1j2h1W6dWeoan2aRx5ODq3EJztT55G/tPUIpn7tCfT5qyd1LG7IM/96fu/y4wEA+3r9BRlTuRKKxLS7k22dQ1SmX6GQIS8QQuhJeOTDwQgcNqbpqwCZhVbufvkdxDiwbn9/yn0qjUxCK4nUe5xw2hmO+vX55JxXd7FVYsXrKbe/iFV7qFS/0iBDbiKy3Gqrmmb45b+uw3ObOjEYiKDO49DphmgeeRpDXu9Rjtk5EDBljNEYt3woJ9vQisCoB2q1x8qFIzGmNp57/9qO7lINhygQZMhNZMHkRm25vVmZgOseCuITv1+JvpEwaj36JKEatVVZutilCMXs7hk2ZYzX3b8CM295ypRjFQrNkKfIWkmF22lHMBLFrf+M9/+udp3yYfW75ZX0aWhyvfLI+JfCGGtnjL3EGNvMGNvIGPuCur6ZMfYcY2y7+r+pcMO1Nq218WKfmoRiln+/fTApL1oUvKSrShxQt+3uNif2u3xHN6webdBCK7bsDLnHaUMgHMPvX9+jrat2VUQRWlk0pVlb1zdSPfMt1UI2v5QIgC9xzmcBWALgM4yx2QBuBvAC53wGgBfUx1XLnz5xMp78/OkAgOe/eIZuW2IjILuNocaVXrlvUNUQEd3izcLKseOcQytOOwZG9DHyatd6H1IzVj68ZDIe/9xpGFfvIY+8AsnYkHPOD3HOV6vLgwA2A5gI4FIAD6m7PQTgMpPHWFYsnTYGsyfUAwCmt9XhF1cv0LbFDIxnrduhxTGNEEY+EjP3x2flkEMox9CKx2lDb0J2j5XfZzEQ3x+f24HjJzbA5bCRIa9AcoqRM8Y6ACwA8CaAsZzzQ4Bi7AG0mTa6MuCRFXu1ZSMfV9bOdjuSS85rPQ4MpjXkikcVMUHqVu4NamWRqUiuoRWHHX0JWSvVHloRToII47kdtqq/uFUiWRtyxlgtgL8BuJFzPpDF85YxxlYyxlZ2dRkXz5Qjcksyo3CFHCuXqzoFdW5HWqM6pHnk+RtyOVvFyo0Y4pOd2YdWdnXrJ4W7q1yDW5xnkVHldpIhr0SyMuSMMScUI/4w5/wxdXUnY2y8un08gCNGz+Wc38M5X8g5X9ja2prPmMsKn1vqL1njStre7HOhJ4Wx6RoMol+N+UZNMOTyDzhdOKfU5FIQBOgvlOfMGgsAODJQ3YZ8KBAPrQBK7QI1+648sslaYQDuA7CZc/5TadO/AFynLl8H4J/mDc/aJBrXsfXJXW1kj/z2K+YmbR/X4EmZI/7T57Zpy2bkfsvHsLIh10SzsjTk9V6ntnzlwkkAzMu/L1eGQhG4HDatZsHtsFOMvALJ5pdyKoBrAbybMbZW/bsQwB0AzmWMbQdwrvq44jk6HNIVVkxr9eGmc2cm7Tet1YefXzUfm77zHrQZGPpx9V50D4UMvaSx9Uo6Y1ON0xSPXGfILRwjF3IGqdQPU3He7LHacjgaQ43Lrt3RVCtDgYiuUI1CK5VJNlkryznnjHN+Aud8vvr3JOe8h3N+Nud8hvq/t5ADtgrX3PcmPnL/Cu3xVYsm63RUBIwxXDp/YlJeuUAUDhlphDAoMeLzZo/Txch3dQ/j839ek3WcOxyJH2PYwgJKb+/rR7PPhTapCUcmzBhbpy3PndgAjzMuH1zJcM5TppO+tqMbHS012mOX3YZ1+/t1TU+I8ocqO3Nk40H9PK/dlt3EnGCmany2dQ4lbfOH47fFEdWbjsU4zvrxy/jX2wfx0Ou7s3qtUDRu1KyUtXLtfW/ikl8u1x7v6h7CrPF1OjmDTBin3vF4nDZMafHB67RrLfYqmavueQPHfO3JpPWcc+zp9ePU6WO0dW7V2fjyX98u2viIwkOG3CSyLV4RTG+rhddpx8Nv7knaFghF4XXaYbcxzSP/jxTOOdyfXfw3JHnkVvLI/rO9G+sP9COmvsee4RBafNl544AyofeFs2fg0WWnAFDCCCNVkH745i7jm2B/KArOgTpJGiJHf4OwOGTIcyAa40kTcfYsc54FHqcdp05vwWs7epKyV0bCiiF32hkiUY7BQBjXSeGcbA25HCNfu6/P9GrRfOkeVt5/71BI12A5G246dybmtTcCUPLKg1VgyFMxpKUexieBTZhqISwIGfIcODwQSFLVc+Th6lw4dzyA5EwSfyiKGpcddpsN0RhPKnbJ1hAnjvnSXy1PsWdpGAlF0TMUxGAwolPryxWhvVKtCHkHWazNk+UEMlEe0FnNgSMGKW25xsiBeI5vYtw6EI7CIzzyWCwpA2PjwQHDsaSiX70QnDRF0TXrHiq9eNKI1H5s08EBrffmyVNb8j42YwzLd3SbkvFTDiROeIrvU52UtSKrIBKVAxnyHDDy8hw5xsiBeNVdYhaKPxSF16XEyGNciR0L3neikid946NrM3qNl7cewcd/vxIAMHWML+exms3nH1mjLX/q4dV4blMnvE47Fk7JX0RTNFC4++UdeR+rHAhLMg53PLUFz2/uBKD3yCc3xzNYthzOuDCbsDhkyHNApLQt7ohLgzpyjJEDkiEPRRCNcXzx0bXYdHAA/SNhNHidWtimezAeQ790vtKj0p3hrfLafX3a8g2nHQMAWNRResXh5zZ16h4v39GN9mZv1hkr6fjxs9tG36kCEBO7wUgUv33lHfz6pXcA6BueXL+0Q1u+59WdRR0fUTjIkOdAQA0HfPvSOVoziWyLV2Tk0MrhgQAeW3MA19z3Jvr8YTR6nXCoE6uybsgZM1vR0VKDWo/T8JiJjJOKkWrdDpw3e2xJUxBX7enFNf/7puG2Rm/+8XEAOMWE8Ew5ISZ2E2UJZEPusNvwxtfOBmPAAWpUXTGQIc8B4ZF7nHatQvKESQ05Hy8eWokirFbd9Q6HMDASRr3kkXcN6n+gTT5Xxk2ZbZKHW+t2oN7rTNLuLiZf+svbWJ6i5Vi2YlmpkCURrKy/bhZbOwcBJMsS1CV0phrX4MFl8ydiPxnyioEMeZb8fc1+3PSoUkzhcdrwqw+diFsvnm2os5IpQlhrKBiGX5r8GwxG9KEV1SN//ovvAgA01bjQO5yZIZclAHxuB+o9Tq37kEwkGtNNQBYKWdL3nFl65eN8wlQyPskTrYaydBEqOZxgyOXPQdDsc+Fohk4AYX3IkGfJ1x+L94P0OOw4dlydFnPOFaEVPRSMJhWwNPtcsGuhlRDam72Y3lYLQDHkiSmJqZANmcthQ71XaWiRmNHxmT+txqxbn875vWSKW1IqtNuYlvsNZK96mApZedLKsr35IGcyie+FXF/gctgMP0+f2wF/KKoVYRHlDRnyLFk6LR53NdJWyQWbjcGntnxL9IYnN9foQity/LipxpmxV5XokdarsfVE8axnNiqTj4VO2ZMnaW+9ZA7++ZlTMU8NT+VaJZuI3CNVNOioNH714nZtORLleP2dHvzihfi6VFmxtepFzsqaO0TmkCHPEnlSM9OMkUzwuR0YCkSSPPLJLTVoUOVZ9x/16+KdTT4X/KFoRl1whCEXFwVxnPUH+jEQSPbqC6UaGI1xDAcjWLO3T1s3sVERDhNpcg6TPHLGmKYgaWXZ3nwQjTQavE4EI1Fcfe8bhiGzRHzSvAxR/pAhz5JhyWO2mShcUetxYCiUbMhb69yaMRoORXUZCKKMfTSvnHOOYDgKt8OGHT+4EEBcu/ua+97EB377etJzMo29Z8tJ33sOc771jGHHI+FBO038XH985TwAlet5DgUjWNTRhMYaJ0KRGDLN2hTfo0q9wFUbZMizxB+MYO7EBjx94+mmHrfW7cBwMJIkZ1vrcqCtTkodNCjuMFJOlPnI/Svwu1d36u4mWiQtky2HB5OeUyhDni6mL5T5zIqRA3HP0woGazgYwavbukzNoPGHovC5HWrnn5gWMhOkCpGJeZlKnTuoNsrWkG840I9Ve3KXPj8yEMCavUezft5wKIpxDR4cN64+59c2wudSQivPbDysM7I2G9MJSMke+Xx1gnDDgf60x/7PdiXNT84UmdRUk2p3AIXxYEczYMIjz6dKNpFUVbOl4E9v7sVH7l+Bf6w9YNoxh4IR+NwOuJ02vLajWwuJCVG3cIqm3SK0ZiU5YyJ3ytKQr9rTi4t/uRzvuzs5JJAp33l8Ey7/zX9x13PZVf0NByPwFUCvwud2YOWeo1i3vx9XLW7XbZNj8bIh97kdcNpZxt6mfByjpg1yimJQlSEIRWL4/eu7TelGP5qX7y2gR56NIX/wtV248Of/MW0MAqHuaGYhjvg+uuw2XWz88c+flvZ5LaooWS+lIFYEZWfIH35zT14GXCB0OH4uzfCnY/n2bnz/iU3whyKoMcjLzZcjg/GUsYmNem9ZnvxLzAn2Ou0Z533rdKnVTBmZVbvjdyjCqN/z6ju49Z8b8fc1+XuRT244nLRuhpoyB8SbJ5uVtQIooSlASe3MlNv+vQmbDg2YEgIJR2NJKX7ZjGU0/EEltCLfbf3hY4txzCh6OkLvPVXjb6K8KAtDvuFAP669700EwlE8smKfKceUjdrWw4OaYU/Fsj+sxL3/2YXuoVBBPHJZW8TlsKGtzq1lq8gkVul5XZkb8sQsm1nj9eEheSJXeOSb1fi5GQ17exPUFk+Y1IDn1OImIO6R56rtboTIJc8ltJJPEdEzGw8jEI5i3refxeW/eQ1AXOnRrIwgzjmGQ0pPTjH/cdr0MTh9RiucdhuuXjwZD350keFzG7xO2G0MPRZQwCTyx3zXsgB87bH1WH+gH995fBPWS/HgmjwMqpxj/J6fvQoA2H3HRSn3r3HZtarLVP038yEaixsNt8OG125+N4wcwtoEj7zG5YA/w7BHYlrfBXPHY6V0AZMzZjQZAtXTM6MbfWJGznvnTdA9FpOdZk4GOuw2uB22jMNPg1Iq5nAwklOtwPr9/fifP6zCmFolPfTt/cp3Vnx/zJJGGAlHEeNQPXLl3DbWxC/+skRBIjYbQ1ONk0IrFULGrg9j7H7G2BHG2AZp3W2MsQOMsbXq34UFGaTqrP7pzb269fk0c8j2Byp7pHLFoFnIjZHdajWekRBXYmjFM0poRR534ud1w6kdOG5cHeo9DnDOMSJNcAqPvEeN63YO5H8LLsfZH//cafhYQkWsmKAzSk3Mh1q3IyND3j0UxNzbntUe55pjLSaKE/XezfbIxXvyuezaBV425KPhUzOlrMrBvhFT7gSrgWzuYR8EcL7B+rs45/PVv+QOsGaQIjk2n1tfI6cvXblyUGfIzffIT5EqRtMpKdYleeR2jIRT/xjlcu32Zn3snTGGKxe2YyAQQe9wSKfz0usP4d0/fhkvb+0CoI/h54p8wWlvrkmSqq33Ku/tqMmpjz63Awcz6Ka0NSEN06yURdHF3q8aeLMMuV+90PjcDnx4yWQ0+1w4cXLm0sQ1LodlC4IGAmEsveNFfO+JTaUeSlmQsSHnnL8KIPd8vzxINOM1LjsunDsOwUgs59vwYDSG9mavbl0gYvyljsW43pAXILTyjYtmacvyxFUitYkx8hQe+eH+ALZ1DuJgv2LAzpnVhtveOydpP6HPsfXwoC708fAbe7BTrRoUx8uXkXAU7c1erPj62Ybxf3Gh2ZuQS58ve3v9eHlrF1aPkm7qT/gcc03BTDwfe3v9OCpdKE33yN0OnDSlGau/eS6uUBuOZEKt225Zj3zTQaXpxYtbjpR4JOWBGbNKn2WMrVNDLwXpVJCYxTC+wYM5ExRdjly98lAkhinN+pn9W/6xwXDfxDhiIdplOe02bSIznUeelLUixe5lltz+As6761XNu/3SeccmxdcBYP6kRjCmZPGMhKLazU9imbdZMfJatxNtKZQi505UzulHT81PhCwVV/zmv2m3+xMMd653BokXgBgHFnz3Oa0CN1Pp4dG4f/kuAMnzJplS43IkvWersLdHuZh7TdIzqnTyNeR3A5gGYD6AQwB+kmpHxtgyxthKxtjKrq6urF4kMV0rHOVajDt3Qx5Fg9epu0g8tto4xS5RBzwxvGEWIn86nYZLYv63y25DWG2q3DMUxP6jem9W1k43oqHGibF1Huzt9Sut5VLsNxBIVkrMlkA4Cq8zTdjI48TuOy7CRSeMz+t1ciXRk85Vr9ufIlwhKnAHAhH8bdX+nI4t85iaEppr3n2mcwelQNwdWvWOwWrkZcg5552c8yjnPAbgXgCL0+x7D+d8Ied8YWtra8avsbfHj82HBnSqg+FoTDN2wRwLVULRGFwOW0YZKIlaJnUZduXJFnFR8Yxi7GQcdqZNDp7545dx2g9f0m1/VlUzTHdMxoC/rtqP9fv70VbnTsomEeT7ox9Re5CWkgde25VyW+KdTa4hnnQhGXEh/tJf39YEr7IlGuO6i+r4hty08GtS3M1ZAWHIzWz5V8nkZcgZY7LrdDkA49hEHtz1vFJ5Kd/a//QD8+OGPI/QitPORlUwvOu5bfjQvfqWZIm53GYhPCsjD+vvn16KR5YtMXyO6Cokyq3leYOn1CKcdLeoh9T494rdvThlWgtukeL1b996Hn5wuZLGlkvaXJ8/hFnffBr/facbI+HUHn8huemcmdryt/+devLspwlVvrk2XpArNxPDZIukPq/dORbjnHfXK/jA717HKVNbML+9MWkSO1MaVRlkK3ZPKkZzk0oim/TDPwN4HcCxjLH9jLGPAbiTMbaeMbYOwFkAbjJ7gELi9M73n4CVt5yDd35wIU6Z1qIZOxFWyJZwlMPl0Kf4nXxMs26faIwbVn7WG0zUmUG69LsFk5uwxKAHpdPOEE7Y/77lyV5npumWM8fW6eLw9V4Hmn3K+81Fl2PN3j6MhKP43Ss7MRKOmqbhng1fOGeG9tmmI/GOY0i6MD65/lDG37XlO7qxZGozPnbaMXjpy2fipCnxqaOTp8a/Y/0ZNgWRCYSjeKdrGKv2HEUwEs05Pg4AY+s9CIRjWLc/vVZPKQhojaQp/TATsslauZpzPp5z7uScT+Kc38c5v5ZzPpdzfgLn/L2c80NmDzAQjqLGZcdJU5oxptYNu5oLLf7nGrcNRWJw2e26H2fil2ZbZ7IqIFA4j/yWi2ehtc6tXbwywSnFyMWPWsz4y6S785g5Nl4m3zHGpyu0Yoxp4Rwj3fLREKX+bocNgTQx+ELzvcuO15aN0kxlr/S98yZgfnsjBlXD/vSGw/j0w6tx3l2vjuq9xmIcO7uHccKkRnzz4tmY2OjFV88/Ttt+/MR4b9dcFCbl54jwYK6MU0Myl/76NTyxzvSfbl6IkE+uodNqw/Il+gOBsKHhFPHkXItHQhHlRyDHCBNv5+5P8GyFfoWZok4y7z5uLN76xjlZea0Omw0RVeFuWqsyvsQURSB9rPGvn1yqLY9v8CTt26rGdTPJxU5EXBxjXIl7lipGLt9lbDqUfKELqAVQS6e14BdXL8CYWpc20SYmPXd1D2PlnqP4z/aulA7E4YEAQpEYOlriGVHyhXGKFAbZ1ZN9jFw25MFwLK/mJnJsfTSJimIjYuSpUoIJPZY35IOBSJLGMhDX44ikkOlMB+dc82aE8a7zOOBPKKx5ZVuXLoPiH58+Fc/ceEbWr1dInA6GkOqRC6OZ7QSWnNMttM+njvHh+qUdAIBprbWocdlzugUXn+/zmztx1B8umUcuV+Ne/MvlSdsHg8rdxgXHj1P3j2d0yLHyv67ch2vvW4HfvvKO4euIuxa5wlIOf8iT1dtH0ZE3Qh5Lvh653DA8FLWWwRSGPBzlBW87WAlYXmulf8TYIxfl5pFY9jE0YfjcDpvm0U9s9Oomn4aDERwZDGL2+HpMb63FH9/Yg4YaJxqyKIEuBk6bDZEkQ64YoLY6N44MZjeh1qga9Re/fKa2zm5jaK1z5zT5lxhXL0WMHBg911pUOIq7mVq19R6gfw+vblO03XenyDgRnr2cJTRO8nzldNdcJo/l76gSHszdkMsNS4Qkg1WQ0w6DkWhB9I0qCUt/OoFwFP99p0fzkmRE84FcrtZCv0H+UY1v8GjpZuFoDN9RsxsmN9fgknkTcNO5M5MPZAGcdhtiXPkcglrurfL/xnNmYsvhgYxum+983wl4ZVtXyvZ1boctpx97oo65FUIrRgijXet2avuLNEJ/SGmTF4zEcFjNnkrV/EK8X/mC5XHacc2SyWir04etgllO1K/a04vNh5R5G8aUC7c7TVrpaMjefKbCa4UmFuP41MOrNGkIQLk41rjSPImwtiH/1Ys7ABhPConJzlQdUNIhDLnszUxo9GIkHAXnHH98Yw8eXanI5Y6pTW7AYCWEQQlHY9qdhvDInXaG71x6fMrnynxgUTs+sKg95Xa3w65rPJEpoQRjVarQSjqPfPOhAfz2VSVUIroxCcPNOcdIOIIxtW4ckOYIbCnmHEYMDDkAfO+yZCXCcBYZGcFIVKfDb2dMm7DPh6XTWvDfd3qSit5KRd9IGM+otQ9jal3oHgphMBDWdckikrF0jLxHNeDHjatL2uZQY+S5eOTC+LskTZPxDR5wrlz9h6Rb6XSFNFZAXIz+tfagprYnYuT5xE+TXsdhSzLKmZCoXlcqj1yecJwrZY4AwAU//w+eWHcIDhvDnAmKRrvbYQPnynfFH4qiyZdQiJXizkXcFXnS6OUIsvk8E+eCIjGOQDial0cOAA/dsBhnHdtqGUMekT6Tc2aNBQC8sJn0VkbD0lZqjNqO6msXzkraJjzRnLxE4ZFLhk5MQvlDEZ3YYjoBKysgPoev/G2dtk4YcjOza3INrVjFI5dDK6kqVCe31GietDjvwUhUaXCcEKNN5T+IGHkmF6xsaiDkfePzQzyvGDmgfEemtPjQbRFDLqcAf1C9Q3x9Z0+phlM2WNqQDwWV7idGE2Tiy/yxh1bilW3ZabeIGXqXw4Y7338CrlgwUfPY/KGoLo5pdY/cyFiLiSKzDfnmQwPouPkJrNhlLIJ5+1Ob8euXduiEmJI88hIZcjlNr3MgoPP8BGN88TCa8HSDkRhGQlGdR+922FJqgMRDK6N/9tlobcsXxPPmjNWWzahpqFXnA6xQ4Sk7ZlNblfqG5zZ15tQovZqwtJVS+hEa//Dt0q3tk1kWMwSlGPkHFrbjpx+cr82K+yUFQCDetcaqGPW3HNE8cvN0KtwOu9YK7vF1Bw33+d0rO/GjZ7Zi9q3P4M6nt4BznuR1liq0whjDlSdNwkUnjIc/FMX2I8mpf3L4xKN55DGlT6vkkY+pdeOxNQewxyAPXEx2ZnLBOtQfwJbDyTntRshzQdNb4wVcphhyjwMxDt0cQKkISHd9clrsLzLsrVutWNqQD4ciKbW/ZW9TeCuxGMfi7z8/qrJcPLQSN3TC49p8aEA3kZVPwUUxkD+HT5x+DBZ1NGnZFvnedsvIsdhMUgh/8/I76B0OJXmdpUo/BIAfXTkPN5zaASBZ0RIAmg088q2HB7Dv6Ah8bjtuu2Q2Hrh+kWbwfvfqzqRjpJrsTMWnH16ddvuf3tyL373yjm5idIykgGmGgJsIO53145fzPla+CCcr8Y4msekHocfSVmo4GEmZNiZ75H9fcwB3PbcNPcMhHBkM4tv/3pj2uPGslfiPTTSZuPHRtbpGFqU0PJkgPp/2Zi++cdFsLR0RAJwmXoTkC5onw+N2DgQRisZ0nlWp9aVFcZlo7iCHSN41M67KKd7vDQ+uRCgSQ1ONC9efegzOOq5N26fZICeuZygEr9Oe1gH4z1fO0hp6pAqvPLn+EHqGgvj639fj9qe26O5s5O+kGR65OJ+5ZICZjQitPHC9Xkj1YH8gZ5GxasDShjxVMRCQnDXw8xe245DaDadllJRB4cHLk53TpNtV+etsdY9clFmPGExwmhkjlz+rTKVFH/zvLoQiXG/ISyxjKwTPRAXmnG89AwCY396I86V6hcRJ7iaD9DejlLjDAwGMM5A5kGlvrtEm8o0Mec9QEJ9+eDU+9ce4ty7HyOVuTWZcGAMWEqZK5ZEDo9+9VDOWtlKdA0FdVZxMYkd4IC7H2jRK9aVIL5Tj74wxTe70jqe2aOsLpatiFuMblDsJUQQkx8XNjJHL82CZdpWxskf+u1d26kTAhI6OIPECLnvfD3x0EQD9XaGgsz+AsfWj1x4Ig2Uk1yqyjnZ0xeP4wlue1OTVXXAmt+QmYSuTrldtMTkyEMCdT28FYJwtts/kFoCVhGWtVDTG0TkQwLgUbcGM8nhFa67aUeKGohfllBb9jzfVxKqVafG58K6Zrbj7mhMBxC88NS67dvtuBtct7cBXzz8ODV5nUsemVAwEwlixq0fnXZXakIux7O31419rD0rr9eNKzM9uqY0b8oWqLK2hNz0cGvWOEIiXxBtVd4oJU7kQTlw877jiBMwcW4fdd1yEXbdfqCuzz5UrFyp9Po8dm1yvUUxu+ccGbFYFzYzy4xNlpok4ljXkR/0hRGJcJ+wjI3tDVyyYCIeNoU+Ne6ZrJwYoXYda69xJ1X6J2VfZyMmWCpuN4aEbFuPMY5XYrQgBzG9vNDUHfubYOnzqzGmY2OjN2DNas7cPgXBM12y4psQXS8YYTpzcCAB4akM82ynxAjO/vQk/fN9c7S5t6bQx2jYRZjKqYegfCY96Rwikv1saNvDSRXMT+Xlmdc+pcTlwzqw2wzuMYiIrmYo7ope/fCaevvF0zJlQn5MefrVgWUMufvyNKX4UTlt86O3NNYjEuOaRj/aFHApFUG8Qe08sXnnhS+/KasxWQFx8zKzqlDlxSiPW7utLWp8uB1nOArJCqOrnVy0AALy2I15o4nXpx2W3MXxw0WR84ZwZeOcHF+pi+yIbKNEjj8U4+vwhNHpHLyf/1YeUO6hJTcnOQro+lWZOYMt4nPYkXZxiIyc21KmaNx1jfDhuXD0avM6cOzZVA6X/VaVAKMMZSdgCgN2enDooYuRGt7yn3P4CfqnmogZCxp1qrJQqlyvCkOeirJcJrbUeDAWTGzGny3i49ZLZBRlLrhgpWKYL+SQ6BowxuBy2pLDIUCiCGE/tfMi0N9fgfSdOws6u4aR02XSG3MyUUhmvs/T9O2ulu7XEMGfHGB/e3t+PI1LLRyKOdQ25ehtV702VR678uK5e3K4ZcpHf+/zmI7hZKlkfCUVxqD+An6g9GQMR4041154yBafPGJO0vpxYpMYRC+WRxytg9cZGpMd95fxjdbHWqWN8urCEFag1qE3I9qLtttuSLvyidVtDhq0ARbz+S399W7f+7hRa50Dh7miURsylDV3IocDEZIbLF0xENMax/oD12tJZAesa8lE8crfDjtXfPBffvfR47Ucoy7U+8tY+bblnOJ5/2j8STtnNfUytG3/42Mk4f844XWuwcmJioxe//tCJ+MkH5hfk+OJzS8y2EIbc67TjmZvOwMVqQw6h7/3osiX452dOLciYssVIqjfbtEiXqo4o05elIU/Vj/LIQOp8aTMzkWQavE4MGtxpFZN0/Tlnqs7BDoOKXMLCMrbihKX7UYg83tF+OEeH42GGrYcHMRKOodmX+of722tPymaolkPuamQ24pY3cUJOzC8Ij7FHVWIUXYVONmgcbSWyzaZxOZI98r4R5T03Ziie3Z8i/CWnRX730jn45j/jBW6tdYWRVW6pdYNzJclAlm4ORWIYDkYM8+jNYsvhAfzyxR0IpAntNHidcNltOJpDw+pqIGOPnDF2P2PsCGNsg7SumTH2HGNsu/q/Kd0xsuHFLUdwwqSGjL64o6V7yR754YEAAiXsHVnueJ1Ck0Z/Gy5kVkUMVxijRR2mfSUKSraG3G3gkY82QZ+ILJcsRLz6/WFddsZlCybqnmNGSb4RwikSF2AA+Mtb+zDzlqew4LvPFUxQKxKN4dG39uGJdYfwwpb0crW1HgeGgmTIjcgmtPIggPMT1t0M4AXO+QwAL6iPTWFvrx/zJjVmlGLVMoq3IOfjdvarhtziqoZWRXjkqUIrToeQF1Yef/HcY4s4usz56ydPwXcvO15Lc/NkeWGv9TgwFNAbFRFaacwwtCLL6faqGRl7E1I7Za2h0b7n+SCOLZyeSDSmk0YeKFDq37I/rMIDr+3WHk9r9eHtb51nuG+dx0EpiCnI2Jpxzl8FkKhfeimAh9TlhwBcZsag+v1h9I+EMbk5s6q1ZqlY48qTJiVtF4bcxoBtnYNKN/cyzEixAmKyMym0ohpu0fBDPB6tV2apWNTRjGuXTNFyl7P9PjR4nUmhEfG4PkNDvuyMqdpyZ38QsRjHDQ+9BQD42Qfn4/HPnaaL56+85ZysxpgNIvXPH4xi48F+TP/GU7rthdI5eTHBC2+tc6cMlcp9VAk9+bqlYznnhwBA/d82yv4ZIbyS9gwNeZ1kLNoMyqN7h0Nw2hnOnjUWq/YcxUiK9ENidBJFpwTCsAvDrRlyE0SdCkk0R0Pe6HVpBWiCPr8imJXpd+uSeRPw+OdOAwD88Y09ONg/oqkyLp3eguMTOhmZVQBkhAg1BiJR/HdHciOHQjWemJFQfSzPZyVS63ZgME1qZjVTtPgCY2wZY2wlY2xlV1f6RhDCkGfqkctfcKOS5d7hEJpqXBhX70HPcAjBSIwMeY6IOYtEGVitebFquMXkZ7nIHmQ7Z1LvdSbl6vf5wxnHxwWiIOjRlfvwTldc37zYXeOF/vpIKIrvP7k5aXuhJhmHgxG878T4XXQ4ljpzpc7jKFh9RLmTryHvZIyNBwD1f8rZCs75PZzzhZzzha2tral2AwAcGVSS/lMJZqVDnhwV3lbPcAjNPhfqPA7Nk6TJztxo8Drhctjw21fewRtSCy4xCSU8cnERTqUnbzWy9shrnOjzh3WTgH0j4YxTD+PHcWl9Qq+7f0XO48kXj1rZmkoJMZeWipmgdAHL7L1ObPRi/9ERS3Qyshr5GvJ/AbhOXb4OwD/zPB6AuDh/TRbGVoRXalx2XDRXSb8TE3C9miGXO8DQZGcuMMbQWutG12AQV93zhrZeTEIJQ37fdQtx//ULU+rJW41s79BqnHZEYlyraO0dDmFfrz9rQw4A//jMqUm6PsXWPRHv358idFGI8n3OlcbW8ncknY0+ZowPQ8EIPv/I2qz6naZ7/avueR1fe2x93scqNdmkH/4ZwOsAjmWM7WeMfQzAHQDOZYxtB3Cu+jhvRkJR2Fh2WuDilt7lsGGBKooUSjLk8S8MeeS502egeSEyMMRn3FLrxruPG5u0n1XJ9vsgx5R3dw/jxO8+hy2HB7MOrQBK7v1JU1Knaa665Ry88bWzsz5uNog7gJ1SeAcAZo9X7haM5HbzJRiJIRLj8Lkd+OPHTgYAxNJY8gnqxe7fbx/U6hPyYWvnIN7Y2Ys/r9hb0kIoM8jYXeKcX51ik+nfsJGQklWSzeSO8ATdDrtWnr7jyBBOnNyE3uEQWhIMOcXIcycxYyUQjmJbp1LAVS4eeCLZ3qGJXq6BcBSdkv6H6PyeLUunteBfbxv3Qs1EFjdfRCHXoyuViujbr5iLC44fB5fDhtm3PlOQ5hPi4lDjsmtzBekMqlyUZMa8b6+UM989FNSUVvf1+jGpyVvQyWWzsWR8YSSHgh3hkSsNf5Uvwwd/9zoGA0oq49gGj67cnwy5OXDO8fXH1uPPK/bCaWeWUDfMBaNGJekQhj8YjmmhQABob8qt0cMHFrYXNE88W1p8LjTWuLRJ0EKEVkStgdthh0OVHkjX5ELOzzdjPLLomRDce2NnD06/8yX8Y+2BvI9fTCz5q8vFkIsOLiPhKHrVooZwlGvd0me01elS4SiP3ByCkRje3KWUF1ih52Ox0DRnwlFdsUyujR5sNlaw8vtcELF+m43BZbfpLlZmISZQ3Q4bxtZ7MHdiA25/3wkp95elD8ww5LLEgpDI3XRQaWyxdm9f3scvJpYz5OFoDAMj4awN7e1XzMV1p0zBkqktukrO/UcVRcSOlhqKkReAgUAYU1t9o+9oUR746CJ8+sxpWT9P9lRFSty5s8emVOvMBDHB+T9SoVAxmSq1u5Olfj1Om9bRyEy0JugOG5x2G/79udN0DbATkecfAiaMR5ZYEGMRoR27zXKmMS2WG+05P30Fz28+krUhb6v34NuXHg+n3Yb3zlP0KeZObNCaTbTUunVZKxPKoPuPVTl3dnwScygQMWyOUC6cdWwbvnL+cVk/z6PFyGOarswvrlqQV1z1GxfNwqQmL75wzoycj5EP1y3t0JYTw5CFDa1kZoacdhvuUQXtzPbIxbKo9HUUSGWyUFjOkO/pUYqBGjJUkDPilGktmN/eiMYaJ3qHQ2BMuVWUPfJyaONmVX71oQW444q5AJS0Q5FosLijenoqio5CikcegdPODDu/Z8PSaWOw/KvvLnoxkEAev5xG6XHaCxRaiXvkmTKvvREATBmPkSGXxeDe2t1rmcbUo2E5Qy74f+flJ7ZU63ZgOBhB73AIjV4n7DZm2FCAyB63w651nR8MRBCKxtBa58afPnFyiUdWPEQTBCVGHka9x1lWWQ5GyAkAcg2H18Ajv/fVnfjHmvwmBEM5GPJ4SMuM0Er8PcmpyoDSz/XK376O+1/blffrFAPLWbYxtW6cO7sNcyc1jL5zGnxuO7oGg9jVPaxJdNpsDB9c2I5zZpdPfrNVERNza/YeRTjKUed2ZJ35Uc4Ij1XIzmYqlGVl5CIk+aLkcdqSDKco4z8yGMCyM7KfYwDkyc7Mw6iiAvXpDYdwyQnj0ZaiOXsmGHnkQsFyX68yt1YujSws98vzhyKmlHU3eJ3Y2jmI5Tu60SNNfv7w/SfoYrxEbkxtrcUxY3zYeHAA4UisbNMOc0U0X+gaCmJgJGzYzLvcED07rzhRr4GeLrTygye35KyMGMoyRg7E9e7f2n0Un3p4dU6vm/j6Yvm/O7rxxPpDun3K5SbLUr++WCy5ZDdX5OKBPuoqUhDqPQ6MhKMIR2OaDnm1ILKefvTMVry5q6ciPHJh2BJlBjxOO4JpYtK3/Wtjym1pXy+avSGX7xSEJlOu6LJWojF86H/fzOt4pcRShnw4pNfryIdmabL0gY8uyvt4RDJelx0joShC0VjBuruXA4FwLGVv2XLifSdOwrVLpuDGs2fq1nuc6fPIH193KOW2dIiUxlwbhbf48su7D0Vj2kXkgZSx8PJwUCz161u7rw8AdNkluSJ75Gcda4pMOpFAjcsBfziCUBWGVgDgejldL4/8cavgddnx3cuO1+WQA2KyUx8jT2wCndj6LxOER56rIc/GkzficH9A6wXaPZSsHwTk9r5KgWV+fUcGA7j2PkXG04wKt/E5SOAS2eF1Kh55OBrL+cdYzshCV4XqpWkFEvPIo5Lqo6B70NgQpkMc05PFZKdMKA8FxH29fjy+7iDOmNmaVmlyeydNdmbFZ/+0Rls2w5DPaKvL+xhEekRoJRzlVRlakSsNK1kj22m34chgUHuPIQMBre1HBrM+rgjX5FplnU+Tia2HBxHjSjhJDhv5XHZ8+OTJ2uN3usiQZ4UsjdqURzGQYGy9G5fOn4AHKT5eMGpcSjZD12CwKkMrp00foxVBVXJTYCEt+5/t3QDiaYPLzpiq9R392EMrs9YIHwlFwbKUqwaAF770Lhw3ri6vhtCi2XViVfL0tlpdskUwEsOGA/3Yf1TfFNtqWObXJ+eSmlHyzRjDz69agDMpPl4wvE47jvrDODwQwLS28tVbyRXGGD51lpJD3WiC82FVrlqkeKhdg0EcGQjgqQ2HAQAdLT5cc/IUbb9gllK3uchVA8C01lq8a2ZrUt/YbBDSHU0JipNuhz0pa+fiXy7HaT98KefXKgYWMuTKUOa1N5Z9hVy1IN8Syzod1cSZM1vxsw/Ox40l0kcpBuMblfmm4VAEV9/7htZRx+O06cr6jUIu6RgJR7PqAiZT73UiFInpYvcdNz+Bnz2/LaPn9/pDcDls8Lns+Mgp8YuRy2HLqTlIqbGMIbepxruSY42VhvgR1rkdOcu3ljuMMVy2YGJF69uLdOCdXcO6BtFepx0eyRBn29dzJBzN+XMT370vPLIGg4GwZtB/9vx2bZ8DfSNaJlwiR4dDaK5xgTGG2y6Zg/fMUYoE3Q4b7GXoSFomZ0rE4fJNKSKKh1CoFB4bUZmI3+SD/92tWz9jbK1OpTRrj1wNreSCeK1nNnbiqH+lYfvBU+94EQCw+46LAABX/OY1XLV4Mj6wsB29w2EtrGKzMW1ezuWwQbiSdhsrmxZwlrGaM8bWAgDu+uD80g6EyBivKqXQ6K3c+DCBpFCnx2lDW50bx4yp1U1yZx0jzyO0cs2SeDhkxa5erdWgSCW88+ktuv0P9I1g9d4+fOX/1gEAeoeDaPYldwxz2G24ZN4EXDJvAr56fn7CfcXEMoY8EuWY0ODBpBxbZRHFR/wIqzGHvJr5zJnTseIb5yTlX2fbfGI4GMk59dDnduC98yYkrXc7bIjFOH7z8ju69UL8SshXH/WHddlxi49Rso8mNHhQ63bgl1cvSLJFj63en9NYi4Epv0DG2G7G2HrG2FrG2MpcjhGq0qKSckZ4Y3TeKp9bL56tLaeqvA5Fs4uR9w6HNGVSs/CHopj69Sd160KRGIbUVEVRkXrUH9IZ8guOH4e/f3opvvyeuBeemFL7xb+8jUgeRUiFxMxf4Fmc8/mc84W5PDkcrc4y73ImGlO+1Inl2kTlccNpx6BNLdSrTVHFmolHPhgIawkNR/3hvAz5CRlKXY+EohgOKobcxhg45xgYCevSDBljWDC5SWeDjOLjwyHzG2yYgWUsZ7XqdZQzIiZK5606EGYtlUc+Woy8azCIubc9i9++shPRGEefP6QTt8uWG049BtMy6BfrD0cwpBryUDSGgZEIYnx0fRyjAidxHKth1i+QA3iWMbaKMbbMaAfG2DLG2ErG2Mqurq6k7aEop1v0MuPdx7XhlKkt+HKe3ZyI8mBE9UbHJjRz+Ny7pwMAPvbQWynTh/++Zj82H1I61D+14RD6/CHEeHJBTjbYbAwXHD9ee5yqCbhf8sj3Hx3BRx9UNJ0SC38SMTLkwxVuyE/lnJ8I4AIAn2GMnZG4A+f8Hs75Qs75wtbW5E7Z4Uh1S6GWI3UeJ/68bAk6xlRfVWc1IpQAxyUY8ssWKI0oYty4Bdv6/f246dG38fW/K4VENsawYlcvgPx758rG+5sXzcb/ffKUpH1GQlGdJ716bx8AjCo9fPzE5NCNVaUYTLGcnPOD6v8jAP4OYHG2xwhGonDn2byWIIjCIdQex9TqvehprbVY1KFsk3PJh4MRcM5xsF9pm3a4X2kEsXZfn9bdJ98sNfn5bqfNsMGHP8GQC0ZrBjJzbB22fe8CXaSgYj1yxpiPMVYnlgGcB2BDtsdJTAciCMJa/O9HFuHfnz3NsDfrpfMVr1xUd3YOBDDnW8/ggdd248ig0grOZiAXm6/ctPx8j9OuE7z65dULACgXlz4DXZZMmoG4HDb87ZNLtcd7eq0pnmWGCzwWwHLG2NsAVgB4gnP+dKZP3nFkED94cjO6B4NoqSVDThBWpaHGmbIpuqj+FBOeXarx/s7jm9CvVl0aVX7W5tlEZpxkyBu8TtRK/X6ntCjeeigaxdHhEE6a0oSL5o7X7Z8J8nt+Y2fPqPt//KGVObe/y5W8S/Q55zsBzMv2eds7B/HYmgP419qDONCn3HqJhrYEQZQXbrUyUhhyh5SSurN72PA5QP4ZT/LzO1p8mtQHEFdUDYZj6B0OYVJTDa44caLWYDmXrk6pUiyFPfvE6VPx/OZOAMBt752T9fFzpWRaK8v+sAq7Ek5wi8nFAQRBFAeRqCBCK7L3vaensOGIH185Dzu7hmC3MdjVHpsnTGrQYtvBSAx9/jDmTnTi7Fljtedl0xt447ffg/f/9vWUXYn+vGIf7n9tl67DJ+e8aEquJTPkIwaJ9S3kkRNEWSISFYQBl3PKEx02s3n/SZN0j5//4rvQVu/WqjmDkSj6EwqAABjG+lPhcztQ53bg1W1deHbjYZw3Z5xuu+gydFCNLgDAQCCScfgmX0qWJuIwqAakGDlBlCeJMXLZI+8dzr6fZz5Mb6tFvcepjckfimIkHNUmQp+96Qz86kMLsj4uV0uilv1hlbZu1Z5eRKIxiGvCITUzByhuhkvJPHKj2BiFVgiiPEk05NlqkxcCEbcX3YBEKGXm2DrMHJt9T98DR0d0j9ft78P77n4dnzlrGkRovnOgNIa8ZB653NlDUK3NCQii3BETiyEDjzwVjjTd680Zk2LeelRD7ssiJm5EKKqvWhV58VsPD2qFULJHXsxy/pIZ8u6hoO7xtFZfzpKWBEGUFmE073lVkY9N1F0RxURyG7VCS3I4bAw2Fg/t+Nz52RchEgcoWSoiQ8bGGALqHUhQVxBVvLuSkhjySIwjnHB1a/HRRCdBlCui+fRbu4+i3x9OMuQz2pTGMQ1eJ569SVHwKLQhZ4zB7bCjZ0gfWskVWQ1xzb4+iAQWu40haBBhGA5VeIzcSB7y51fPL/5ACIIwhda6uCPWNRTQQiuMAZzHa0TsNqalKhZDW2lqqw8rdiu6Lvka8ohktzYe6MdDr+8BoFSsBgIGSolF1GUpiUceSzDknz97BsY35CeeQxBEablSTQPsGgxpHrkIuYiQisPGIFKri6F2Or+9UVue2JSfjZENuTDigBpakTzy48YpE6nFzNYpjSFXY0uiVVR9nmW6BEGUnmVnTAUAdA0FseXQAHwuO3xqybyYaKz3OLX87VwyR7JFbkc4IU9nMVUjZjuDFiMHgGlttahx2XUTn4WmNKEV1ZA77UqX6lRC9QRBlA91qgjVk+sO4emNh3Htkil4dtNhAMpk5+ffPR1XLZ6MCY1e3HPtSVgyraXgY/KqKYittW5D0a5sSGXIFY88Hlppq3NjXL1Hl4pYaEoUWlH+i1zyugxUyAiCsDYi6+y1Hd0AgFsungWmFq3XuOz44nnHYoKqP37enHEZqQ/mi8fEBuG3XDQLAPDFc2fq1odjXBdaGVvvQZPPhX4DxcVCUdLQiksz5OSRE0S5I7zfwWAEdR4H3A671gGoVO0AxZjsJuSsf/z0qdh9x0VJXY1GQlGdRz6+wQOX3ZZRLr1ZlMSCxrTQinJy851NJgii9LgcNjhsDJEY17zt/71uIZ7ZcDipPVyxEIbczOIjd8JFaSAQ1qUfTmuthcthM9RALxQluUyKWJPQW6HQCkFUBiK8IrrvTGz04obTjin5eMzwyAWJYZqBkTACkSgmNXnhcdowvU0x5FXgkQO1TjsialGQh1q8EURF4HbYMAjAa5HftKcAHnmiIT/qDyEc5fjAwnZ8/uwZyj52G0JF1JspWYzc53bgS+cpkwbUUIIgKoNutYrSYbOGIW9TC5XOP378KHtmjjvBkItWdrJD6nLYUmqXF4LSeOQxjlq3HVcubMeVC9tLMQSCIAqAqOS84bSOUg8FgFIQ9ObXzzY1Rp/okQvlQ+H9Ayj6ZGfJYuQ1LprgJIhKw6aWbbqd1hDAY4yZPtEqSwvcdslsbdnjkAy5GiPn3Dj3fDT8oQgeW70/4+eXxJAPBiOUqUIQFYiIRMtGrdKQPfLFx8SLmmT1VpfDhqP+MKZ9/Um8vPVI1q/x7X9twhf/8jZW7z2a0f6mGHLG2PmMsa2MsR2MsZszeU6+kpIEQVgP4ZFXcgKDSJu22xjGNcS9fdk5FfvEOLBmb1/Wr7G3V+lzGkjR7DmRvD9txpgdwK8BXABgNoCrGWOz0z+LJjgJohIRglgei4RWCoGYQL314tm6npxy44oNB/q1ZadBW8vRiKjl77YMmzebEd9YDGAH53wnADDGHgFwKYBN6Z5UrKakBEEUj7hHXsGGvN6DLd89P+k9ylGGrsF445xMvWoZ0a8hnGHmixn3PxMB7JMe71fX6WCMLWOMrWSMrQSAw0UUlCEIojjYNI+8ckMrgPGFSg6tnHlcq7bsD2WfTy488hGDhhVGmPFpG/n+SVOtnPN7OOcLOecLa1x2fOrMaSa8NEEQVoIJj7yCJztTIYdW/t95x2rLmRpjGVEsadTb2AgzDPl+AHIy+CQAB9M9YVprLeZMaDDhpQmCsBILJjcCKE7TCKtw1rGK9y175A4pRXEky5ZvsRjHlsOD6nMzM+RmxMjfAjCDMXYMgAMArgLwIROOSxBEmXH3NSdhW+dg3h3ry4m7rzkJe3v9KecF1uzrQygSS3lxGwyE8cLmI7hsgRKRlj34ooVWOOcRAJ8F8AyAzQD+wjnfmO9xCYIoP2rdDpw4uanUwygqHqc9bbejPT1+3PHUlpTbv/bYetz46Fot00VuXJ1pfN2U+x/O+ZOc85mc82mc8++bcUyCIIhy5oGPLtKW397fl3K/g30jAOLxcLm0fzDDBs7VE8giCIIoImcd24YxtUoTCm+adEyRGSJSxoOSamKmXYbIkBMEQRQIt5q9ky4dU8ipHOwL4NZ/btCFUwYyNOTVMyNBEARRIrqHQjgyEECbgYCX8Mi/+rd18IeimNxco20jj5wgCKLE/Pyq+QCAtfv6sPgHL6TdV3jiIlZuY2TICYIgSs7CjmaMbxhFRjdBqlakHDbWuODPMAedDDlBEEQBGU13JrEMvndY6bLU4HUWT/2QIAiCSE1ia7jREO3y6j0OXQZLOsiQEwRBFJBRPfIEl1x45PXkkRMEQVgDkUueKT1DigSuYsjJIycIgig5k5pq0m6PJbjku3uU7kAtPhciMY5IBprkZMgJgiAKyKQmr7a8vXMwaXuq5hFNNYonH4iQIScIgigp584eG1++61XdtgN9I9jZNWz4vKYapYtaJuEVMuQEQRAFZEqLD188d6bhtlPveBGRWFIfHgCA16VMkpIhJwiCsABy2X04GksKsUxr9SU9R2S7BCm0QhAEUXrqvXFZq+vuX4Fz73oVh/pHtHXvP6kdW757Pi4+Yby2zqV2GQqRIScIgig99R6ntvzfd3oAAJsPDWjrZo6thcdpxyffFe9l7FQNearJUBky5ARBEAXGqCjo1W3dAIArFkzEmce2Je0nWsORR04QBGEBGmucSeuO+pUKzu9dfjzsNqWrhFzOT4acIAjCQhgVBfUOh8AY4HHEvXC31IBChFZCFFohCIKwBvd+ZKHucZ8/jBqnHTbVGwfiHYVcDpvmnRfcI2eM3cYYO8AYW6v+XZjP8QiCICqVc2ePxfVLO7THvcMh1Lj1Tdp8LjtsDPjWJbO10Eo4apxnLmNGq7e7OOc/NuE4BEEQFU2tZLj7/CG01rl12x12G3befhEAYFe3UvEZikbx0pYj6FFVEY2gnp0EQRBFwiVNZg6HopjiSm2C5cnOjz74VtrjmhEj/yxjbB1j7H7GWFOqnRhjyxhjKxljK7u6ukx4WYIgiPJiXELbt1p3GkOuTnYOBkZv9zaqIWeMPc8Y22DwdymAuwFMAzAfwCEAP0l1HM75PZzzhZzzha2traMOjCAIotK4YsFEPPzxk7XHzb7UWuXCkA9k0IB51NAK5/ycTAbIGLsXwOOZ7EsQBFGNOOw2zBpfrz1uTtN0QoRW+lRD/sGF7bgzxb75Zq2Mlx5eDmBDPscjCIKodBq88eKgMWk8cpF++PvX9wAAlk5vSblvvjHyOxlj6xlj6wCcBeCmPI9HEARR0dilvPFpbbUp97PZGJadMVV77E3T+zOvrBXO+bX5PJ8gCKKauXT+xLTbv37hLNzz6k4AcX1yIyj9kCAIosg8fePpiGRQ6AMovTt7hkOF88gJgiCI7DluXP3oO6lMbPKiZziEdGaftFYIgiAszKdUjXK5iXMi5JETBEFYmAvmjsfuOy5Kuw955ARBEGUOGXKCIIgyhww5QRBEmUOGnCAIoswhQ04QBFHmkCEnCIIoc8iQEwRBlDlkyAmCIMocxnlm9f6mvihjgwC2ZrBrA4D+EuxXyteutDGOAdBt0jEr7bOppDGaeZ5LuV8pXzuT/Y7lnNclreWcF/0PwMoM97unFPuV8rUrcIymnesK/GwqaYyW/k1XynlJ9TlbPbTy7xLtV8rXrrQxZkomx6y0z6aSxmj28crhPVvmd1Wq0MpKzvnCor8wUXToXFcHdJ6LQ6rPuVQe+T0lel2i+NC5rg7oPBcHw8+5JB45QRAEYR5Wj5GXJYyxoVG2v8wYo9vQCoDOdXVg9fNMhpwgCKLMKaghH+0qVskwxs5kjD0uPf4VY+z6Eg6pYFTzeQboXFcLVj7P5JETBEGUOQU35IyxWsbYC4yx1Yyx9YyxS9X1HYyxzYyxexljGxljzzLGUjelIywNnefqgc619SiGRx4AcDnn/EQAZwH4CWOMqdtmAPg153wOgD4A7yvCeIpFBPrP11OqgRSJaj3PAJ3rajnXlj3PxTDkDMAPGGPrADwPYCKAseq2XZzzteryKgAdRRhPsdgDYDZjzM0YawBwdqkHVGCq9TwDdK6r5Vxb9jw7ivAaHwbQCuAkznmYMbYb8StZUNovCqDsb8MYYw4AQc75PsbYXwCsA7AdwJrSjqzgVNV5Buhco0rOdTmc52IY8gYAR9QTfhaAKUV4zVIyB8A7AMA5/wqAryTuwDk/s8hjKgbVdp4BOtfVcq4tf54LZsjFVQzAwwD+zRhbCWAtgC2Fes1Swxj7JIDPA7ixxEMpGtV4ngE616iSc10u57lgJfqMsXkA7uWcLy7ICxCWgM5z9UDn2roUZLJTvYr9GcAthTg+YQ3oPFcPdK6tDYlmEQRBlDmmeOSMsXbG2EtqMcBGxtgX1PXNjLHnGGPb1f9N0nO+xhjbwRjbyhh7j7T+JLXIYAdj7BdSfiphAUw+199njO2r5rJvq2LWeWaM1TDGnmCMbVGPc0ep3lNFk2n7o1HaD40HcKK6XAdgG4DZAO4EcLO6/mYAP1SXZwN4G4AbwDFQZoTt6rYVAE6Bkqv6FIALzBgj/ZnzZ/K5XqIeb6jU74v+CnOeAdQAOEvdxwXgP/SbNv/PFI+cc36Ic75aXR4EsBlKkcClAB5Sd3sIwGXq8qUAHuGcBznnuwDsALCYMTYeQD3n/HWunPnfS88hLIBZ51p9/huc80NFHD6RIWadZ865n3P+knqcEIDVACYV7Y1UCaZPdjLGOgAsAPAmgLHih6r+b1N3mwhgn/S0/eq6iepy4nrCguR5rokywazzzBhrBHAJgBcKO+Lqw1RDzhirBfA3ADdyzgfS7WqwjqdZT1gME841UQaYdZ7VHPQ/A/gF53ynuaMkTDPkjDEnlBP+MOf8MXV1pxougfr/iLp+P4B26emTABxU108yWE9YCJPONWFxTD7P9wDYzjn/WUEHXaWYlbXCANwHYDPn/KfSpn8BuE5dvg7AP6X1V6niM8dAUUxbod6qDTLGlqjH/Ij0HMICmHWuizVeIjfMPM+Mse9BKeu/sQhDr07MmDEFcBqU26h1UEp21wK4EEALlHjYdvV/s/Scb0CZ2d4KaRYbwEIAG9Rtv4Ka605/1vgz+VzfCcWTi6n/byv1+6M/c88zFM+cQ5ksFcf5eKnfX6X9UUEQQRBEmUOt3giCIMocMuQEQRBlDhlygiCIMocMOUEQRJlDhpwgCKLMIUNOEARR5pAhJwiCKHPIkBMEQZQ5/x9p/YiDG+SAHwAAAABJRU5ErkJggg\u003d\u003d\n"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482811_-1394723261",
      "id": "20180117-220828_1751137554",
      "dateCreated": "2020-02-05 14:34:42.811",
      "dateStarted": "2021-07-26 03:16:10.269",
      "dateFinished": "2021-07-26 03:16:10.640",
      "status": "FINISHED"
    },
    {
      "title": "",
      "text": "%md\n\n# Seaborn\n\nSeaborn is a Python visualization library based on matplotlib. It provides a high-level interface for drawing attractive statistical graphics. Its usage in Zeppelin is the same as in Jupyter. For seaborn usage please refer this [link](https://seaborn.pydata.org/)\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:10.669",
      "progress": 0,
      "config": {
        "tableHide": false,
        "editorSetting": {
          "language": "text",
          "editOnDblClick": false,
          "completionKey": "TAB"
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/text",
        "fontSize": 9.0,
        "editorHide": true,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eSeaborn\u003c/h1\u003e\n\u003cp\u003eSeaborn is a Python visualization library based on matplotlib. It provides a high-level interface for drawing attractive statistical graphics. Its usage in Zeppelin is the same as in Jupyter. For seaborn usage please refer this \u003ca href\u003d\"https://seaborn.pydata.org/\"\u003elink\u003c/a\u003e\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482811_1702400931",
      "id": "20180118-091931_1235694337",
      "dateCreated": "2020-02-05 14:34:42.811",
      "dateStarted": "2021-07-26 03:16:10.689",
      "dateFinished": "2021-07-26 03:16:10.694",
      "status": "FINISHED"
    },
    {
      "title": "Seaborn Example",
      "text": "%python.ipython\n\n%matplotlib inline\n\nimport seaborn as sns\nsns.set(style\u003d\"ticks\")\n\n# Load the example dataset for Anscombe\u0027s quartet\ndf \u003d sns.load_dataset(\"anscombe\")\n\n# Show the results of a linear regression within each dataset\nsns.lmplot(x\u003d\"x\", y\u003d\"y\", col\u003d\"dataset\", hue\u003d\"dataset\", data\u003ddf,\n           col_wrap\u003d2, ci\u003dNone, palette\u003d\"muted\", size\u003d4,\n           scatter_kws\u003d{\"s\": 50, \"alpha\": 1})\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:10.788",
      "progress": 0,
      "config": {
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/python",
        "fontSize": 9.0,
        "title": true,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "TEXT",
            "data": "/opt/conda/envs/python_3_with_R/lib/python3.7/site-packages/seaborn/regression.py:580: UserWarning: The `size` parameter has been renamed to `height`; please update your code.\n  warnings.warn(msg, UserWarning)\n\u003cseaborn.axisgrid.FacetGrid at 0x7f47e8b72810\u003e\n"
          },
          {
            "type": "IMG",
            "data": "iVBORw0KGgoAAAANSUhEUgAAAkUAAAJFCAYAAADTfoPBAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAAsTAAALEwEAmpwYAABhIElEQVR4nO3deXhTdd7//2eaNmkL1lLoCmVRQUFEkE0ZFgUBFWQTV0RUGHW8FZfx5+h8HR0Rx+GeuQGVYVxGBRVRkBHZBBVUcANcEVFBRSh0A9rSNUmTnN8fKaWlKRRoc7K8Htd1X5ecnCZvQu4zr75yzudYDMMwEBEREYlwUWYPICIiIhIMFIpEREREUCgSERERARSKRERERACFIhERERFAoUhEREQEUCiSRvLAAw8wa9Yss8cQkRCjY4cEE4UiCbiJEyeyePHikH2djRs3MnDgwEZ/XhE5unA7dgTq7yMNp1AkIiIigkKRnKBt27YxduxYevTowd13343T6ax+7ODBg9x6662cf/759O7dm1tvvZXc3FwAZs2axRdffMG0adPo0aMH06ZNA2D69OkMGjSI8847j3HjxvHFF19UP9+WLVsYN24c5513Hv369eOJJ56ofuybb77hmmuuoVevXowaNYqNGzce9XVExFw6dkhQM0SOk9PpNC688ELjpZdeMlwul/HOO+8YXbp0MWbOnGkYhmEUFBQYq1evNsrLy42SkhLjzjvvNP7whz9U//z1119vLFq0qNZzLl261CgoKDAqKyuNF154wejXr5/hcDgMwzCMq666ynjrrbcMwzCM0tJS4+uvvzYMwzByc3ONPn36GB9++KHh8XiMjz/+2OjTp49x4MCBel/nSD179qz3/5599lm/P/P5558bAwYMOO73TSTS6dhR+9jRkNeRwIo2O5RJ6Pn222+prKxk0qRJWCwWLrnkEubNm1f9eIsWLRg+fHj1n//whz9www03HPU5R48eXf3fN998M//+97/ZuXMnZ511FtHR0ezevZuCggKSkpLo3r07AG+//TYDBw5k0KBBAPzud7+ja9eufPTRR4wdO7ZBf5eav1WKSNPSsUOCnUKRHLf8/HxSU1OxWCzV2zIyMqr/u6KigieeeIINGzZw8OBBAMrKyvB4PFitVr/P+eKLL7J48WLy8/OxWCyUlpZSWFgIwOOPP85TTz3FpZdeSps2bbjjjju46KKLyM7OZvXq1XzwwQfVz+N2u+nbt29T/LVF5CTp2CHBTqFIjltycjJ5eXkYhlF9cMvOziYzMxPwHaR27tzJokWLSE5O5ocffmDMmDEYhuH3+b744guef/555s2bR8eOHYmKiqJ3797V+7dv356ZM2fi9Xp59913mTp1Khs3biQ9PZ3Ro0czffr0E/679OjRo97Hbr31Vm677bYTfm4RqU3HDgl2CkVy3Lp37050dDQvv/wyEyZMYN26dXz33XfVv2WVlZVht9tJSEigqKiIOXPm1Pr5Vq1akZWVVf3nsrIyrFYrSUlJuN1unnvuOUpLS6sff/vttxkwYABJSUkkJCQAYLVaGTVqFOPHj2fDhg3069cPt9vNN998Q7t27UhLS6vzOv58/fXXjfW2iMgx6NghwU5Xn8lxs9lsPP3007z11lv07t2bVatWMXTo0OrHJ02ahNPp5Pzzz+fqq69mwIABtX7+hhtuYM2aNfTu3Zvp06fTv39/Bg4cyPDhwxk8eDB2u5309PTq/Tds2MCIESPo0aMHjz/+OLNmzareZ+7cuTz77LNccMEFDBo0iBdeeAGv1+v3dUTEXDp2SLCzGPX1kiIiIiIRRE2RiIiICApFIiIiIoBCkYiIiAigUCQiIiIChHgocrvd7NmzB7fbbfYoIhJidPwQkSOFdCjKzc1lyJAh1TcMFBFpKB0/RORIIR2KRERERBqLQpGIiIgICkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIiQIBC0YwZMxg8eDBnnnkm27dvB6CwsJDf//73DB8+nMsvv5w77riDgoKCQIwjIiIiUkdAQtGQIUNYsGABrVu3rt5msViYMmUKa9asYfny5WRmZvLPf/4zEOOIiIiI1BEdiBfp1atXnW2JiYn07du3+s/du3dn4cKF9T5HcXExxcXFtbbl5uY23pAiErZ0/BCRhghIKDoWr9fLwoULGTx4cL37zJ8/nzlz5gRwKhEJFzp+iEhDBEUoeuyxx4iPj+f666+vd59JkyYxduzYWttyc3OZMGFCU48nIiFOxw8RaQjTQ9GMGTPYtWsXzzzzDFFR9Z/ilJCQQEJCQgAnE5FwoeOHiDSEqaFo1qxZbN26leeeew6bzWbmKCIiIhLhAhKKpk+fzrvvvsv+/fu56aabSExMZPbs2TzzzDO0b9+ea665BoA2bdrwr3/9KxAjiYiIiNQSkFD00EMP8dBDD9XZ/tNPPwXi5UVERESOSStai4iIiKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICADRZg8g0tjKnR7Wbykie7+TjFZ2BnZLJN5uNXssEREJcgpFEla2/lbKw/N2YhgGDpdBrM3CcyuzmXZjB7q2b272eCIiEsT09ZmEjXKnh4fn7aTC6cXhMgBwuAwqnN6q7R6TJxQRkWCmUCRhY/2WIgzD8PuYYRis31IU2IFERCSkKBRJ2Mje76xuiI7kcBlkH3AFeCIREQklCkUSNjJa2Ym1Wfw+FmuzkNHSFuCJREQklCgUSdgY2C0Ri8V/KLJYLAzslhjYgUREJKQoFEnYiLdbmXZjB+LsUdWNUazNQpw9qmq7LssXEZH66ZJ8CStd2zdnwYNdfOsUHXCR0dLGwG6JCkQiInJMCkUSduLsVob3bmn2GCIiEmL09ZmIiIgICkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICKBQJCIiIgIoFImIiIgAAQpFM2bMYPDgwZx55pls3769evvOnTu5+uqrGT58OFdffTW//fZbIMYRCYhyp4fVmw/w4jvZrN58gHKnx+yRRETkKAISioYMGcKCBQto3bp1re2PPPII1113HWvWrOG6667j4YcfDsQ4Ik1u62+lXP/ENp5dsZfF6/fx7Iq9XP/ENrb+Vmr2aCIiUo+AhKJevXqRnp5ea9uBAwfYtm0bI0eOBGDkyJFs27aNgoKCQIwk0mTKnR4enreTCqcXh8sAwOEyqHB6q7arMRKRY/OWFuL4fAmefbvNHiVimHZD2JycHFJTU7FafXcvt1qtpKSkkJOTQ1JSUp39i4uLKS4urrUtNzc3ILOKHI/1W4rweLx+HzMMg/VbinTD2gDT8UNCjWvbBsrXzMWoKMa9+zuaX/VXs0eKCKaFouM1f/585syZY/YYIkflcntZs/kALrf/xx0ug+wDrsAOJTp+SMjwlhVRvmYulT9+AoAlthn23qNNnipymBaK0tPTycvLw+PxYLVa8Xg85Ofn1/ma7ZBJkyYxduzYWttyc3OZMGFCIMYVOabte8qZ+WYWu/Ic9e4Ta7OQ0dIWwKkEdPyQ0OD6YQPlq33tEEDMGb2Jv/ROok5RsxwopoWili1b0rlzZ1asWMHo0aNZsWIFnTt39vvVGUBCQgIJCQkBnlLk2FxuL6+tzWPx+ny8XoiyQFQUuP2cOmSxWBjYLTHgM0Y6HT8kmHnLDla1Qx8DYLE3I27o77GdczEWi8Xk6SJLQELR9OnTeffdd9m/fz833XQTiYmJrFy5kr/+9a888MADzJ07l4SEBGbMmBGIcUQazY695fzf4sPtULvUWO4dn4nL7Tup2jAMHC6DWJsFi8XCtBs7EGe3mjy1iAQL1w8f+84dKj8IQPTpvWh22Z1EndLK5Mkik8UwDMPsIU7Unj17GDJkCGvXrqVNmzZmjyMRxOX2snBdHos+qmqHouDKgSlcNyQVW7Tvos4Kp4f1W4rIPuAio6WNgd0SFYiCiI4fYiZv2UHK3/03lT9sAKraoYt/j62b2iEzhcyJ1iLB4ue95fzfm1n8lutrh9qm2Ll3fFvOzIyvtV+c3aqrzESkDtePn1C++l+H26HTetLssqlEJagdMptCkUgDVbq9LPwgnzc+zKs+d2j8wBQmXHy4HRIRqY+3/CDl7z5D5bb1vg32eOIvvkXtUBBRKBJpgJ+zy5m5OIudVe1QZoqdP/pph0RE/PG1Q3MxyosAtUPBSqFI5Cgq3V5er2qHPFXt0BUDk7l+SBq2GLVDInJ03vLiqnboI98GezzxQ6ZgO3eY2qEgpFAkUo9fsiuY+eZufs2paoeS7dw7PpOz2jYzeTIRCQWunz6l/J1/HW6HOpxHsxFTiUpINncwqZdCkcgRKt1e3vgwn9c/ONwOjRuQzMSL1Q6JyLF5y4upeO9ZXN9/6NtgiyP+4t+rHQoBCkUiNfyaU8H/LT7cDrWpaoc6qx0SkQZwbf+M8nfmYJQVARDdoYfv3KFTU8wdTBpEoUgEcHsM3vgwj4XrDrdDY/snM3FoGna1QyIhw3CW4/phA56CbKxJGdg6D8Bib/oLIrwVJVS8+0ztdmjIFGzdh6sdCiEKRRLxfs2pYOabWfySXQFA61Z2/jg+k87t1A6JhBJ31veUvPEIGAZUOiAmlvL3n+eUqx8lOvPsJntd1/bPq9qhQgCi23en2Yi71A6FIIUiiVhuj8GiD/N5bV0uHi9YqtqhG9QOiYQcw1nuC0SuisMbK31fg5e88QiJU1/BYotr1Nf0VpT4zh3a+oFvgy2O+MGTsfW4RO1QiFIokoi0M7eC/1tcux26d3wmXdQOiZjmZL76cv2wwdcQ+X1iA9e29di7D2+0OVw7NlK+6uka7dC5xI+4G6vaoZCmUCQRxe0xWPxRPq+ty8PtMbBYYEy/Vkwanq52SMREJ/vVl6cgu7oZqqPSgacwp1Hm8LVDz+Haus73A7Y44gffjK3HpWqHwoBCkUSMnbkVzHozix17fe1QRksb94zPpGv75iZPJhLZGuOrL2tSBsTE+g9GMbFYW6Sf9BzNRtxF+XvPYZQWABDd7lziR9yFNTH1mM8toUGhSMKex2OwaH0+r6093A6N7teKScPSibWpHRIxW2N89WXrPIDy95/3/6DFgq3LwJObo9JJ2Vt/9/13TKyvHTrvUiwWHUPCiUKRhLXfcn1Xlh1qh9KTbNx7pdohkWDSGF99WezxnHL1o3W++sJi4ZSrH23QSdZHncPwAhDd9hziR96NNTHtmM8noUehSMKSx2Pw5oZ8Xn3/cDs06oJW3Dhc7ZBIsGmMr74AojPPJnHqK7i2rcdTmIO1RTq2LgMbfNXZUecAYs6+kGaj/qh2KIwpFEnY2ZXnYOabu9m+p0Y7ND6Trh3UDokEo8b46qt6d1tcg68yO645Yuw0u/QOBaIwp1AkAJQ7PazfUkT2ficZrewM7JZIvN1q9ljHxeMxWPLxPl55Lxe3x3dewOh+rbhxeBqxttD6u4hEksb46qtRGAYxmV2p/GXz4W1R0WCN5pRrpgVuDjGNQpGw9bdSHp63E8MwcLgMYm0WnluZzbQbO4TMuTe78hzMejOLn/aUA5CWZOOeKzLpdlpozC8S6k729hon+9XXyar85QvKVj2NUbIfgKikDKLbnUt0eseAziHmUiiKcOVODw/P20mF01u9zeEyAIOH5+1kwYNdiAvixuhQO/Tq+7lUun3t0OUXtOTmS9LVDokESGPdXuNkvvo6UYajjPK1z+P69j3fhhg7cRfdhL3niJP6qsyse7DJyVEoinDrtxRh1HMJqmEYrN9SxPDeLQM8VcPszncw880sfsqqaoda+NYdUjskEjhm3F6jsVT++iVlK5+qboeiM7v6rixr4Ind9THrHmxy8hSKIlz2fmdVM1SXw2WQfcAV4ImOzeM1+O+GfbxSsx06vyU3XZIe1K2WSDhqzNtrBIrhLKd87X9wfbPGtyHaTtxFN2LvNfKkT6QO5ZAoCkURL6OVnVibxW8wirVZyGhpM2Gq+mVVtUM/VrVDqS185w6de7raIREzNNbtNQKl8tevKFv1FEbxPsB3LlP8iLt9l+M3glAMiXKYQlGEG9gtkedWZgN1/5/YYrEwsFtiwGfyx+M1eOvjfbz83uF2aOT5vnOH1A6JmKex1hhqan7boQsnYe99eaNeZh9qIVFqUyiKcPF2K9Nu7FDn6jOLxcK0GzsEReDYs8/XDv2w29cOpSTGcPcVmfQ44xSTJxORxlxjqKlU7vya8pVP4j3UDrU5m/iRd2FNat3orxUqIVH8UygSurZvzoIHu/jWKTrgIqOljYHdEk0PRB6vwdJP9vHyu7m4qtqhEX1bcvOl6SG3hpJIuAqaNYb88LVDL+D6ZrVvQ7SduAtvwN57VJMtwhgKIVHqp1AkAMTZrUF1ldmefU5mLdnNtl1qh0SCndlrDPlzZDtkbdOFZiPvbpJ2qKZgDolybApFElQ8XoNln+5n3pqc6nbosj4tmXyZ2iGRYGbGGkP+GM5yyte9iOvrd3wbom3EDapqh6ICcwwJxpAoDaNQJEFj734n/1y0u/rKslPirNwzPpMLupxq8mQiEgoqf/uW8pWz8R7MB8Da+iyajbwHa8s2AZ8lWEKiHB+FIjGd12vw9qf7eWlNTvWVZQAut4d/LNodUrcbEZHA87VDL+H6epVvQ7SNuEETsfceHbB2SMKDQpGYKnu/k5lLsvj+t7I6jzkrAbwhcbsRETGHrx16Eu/BPMDcdkhCn0KRmMLrNVj2me/cIWelrx2yRoHHW3ffYL/diIgEnuGqoGLdSzi/WunbYI3xtUN9xqgdkhOmUCQBl33AyawlWWzd6WuHWp0aQ+fMeDZsPeh3/2C93YiImMNvOzTibqytMk2eTEKdQpEEjNdrsPzz/by0Ohdnpa8SuqR3ElMuy2DDd0Vs3l4cMrcbEQknoXJHd8NVQcUH83B+ucK3Qe2QNDKFIgmInAIns97M4rsa7dBdY9vQ68wEIHRuNyISbkLlju6Vu7b4riwrqmqHMjr5zh1q1dbkyZpOqITVcKJQJI2m3OnxrYq930lGKzsDuyUSGxPFyo0HeOGdnOp2aGjPFtw6sjXNYg//ZhcKtxsRCTehcEd3w+Wg4oOXardDA6/H3ndsWLdDoRJWw01QhKIPPviAJ598EsMw8Hq93HnnnQwbNszsseQ4bP2ttE6geWbFXlq3tPNrju8g2zIhhrvGtaF3VTt0pGC93YhIuAr2O7pX7vquqh3KBaraoRH3YE0O33YIQiOshivTQ5FhGNx///0sWLCATp068eOPP3Lttddy8cUXExXVNPemkcZV7vTw8LydVDgPXzp26NygQ4FoaM8W3DKiNc3jjh5wgu12IyLhLFjv6G64HFR8OB/nF8t8G6zRVe3QuLBuhw4J9rAazkwPRQBRUVGUlJQAUFJSQkpKigJRCFm/pQijvv8HBkb3a8ltl2vNEJFgE4x3dK/cvdXXDlUFMmt61blDYd4O1RSsYTUSmB6KLBYLs2fP5vbbbyc+Pp6ysjKeffbZOvsVFxdTXFxca1tubm6gxpSjyN7v9HvV2CH2mPD/zU6Cm44f/gXTHd2NSgcVH76Mc/MywPC1QwMmYD//iohoh2oKxrAaKRocip544gnGjBlD586dG3UAt9vNs88+y9y5c+nZsydffvkl99xzDytXrqRZs2bV+82fP585c+Y06mtL42geZyXKAl4/uUiX00sw0PHDv2C5o7s763vKVszGW5gNgDW9Y1U71C4grx9sgimsRpoGhyK3283kyZNJSkpi1KhRjBo1irS0tJMe4IcffiA/P5+ePXsC0LNnT+Li4vjll1/o1q1b9X6TJk1i7NixtX42NzeXCRMmnPQMcmK8XoNVmw6wcF2+30AEupxegoOOH/Uz847uddqhqGhiB1xH7AXjI64dqilYwmokanAo+stf/sKf//xn1q9fz/Lly/n3v//Nueeey5gxYxg6dGitVud4pKWlkZuby6+//sppp53GL7/8wv79+2nbtvb3xwkJCSQk+L9qSQIvr9DF7CVZfPNLKQCnxFtxurxERaHL6SXo6PhxdGbc0d2dtY2ylbPwFlS1Q2mn02zkvVhT2gd0jmBlZliNZBbjaGfIHsWOHTv44x//yPbt24mLi+Oyyy5j6tSppKamHvdzLVu2jOeffx6LxQLA1KlTufjii4/5c3v27GHIkCGsXbuWNm10Im8gGIbBO5sK+M+qbCpcvqvNhvRowa0jM4i2WnQ5vYQMHT/MYVQ6qPjoFZyb3uZwO3QtseePx2I1/TRXiXDH9QksLS3lnXfeYdmyZWzfvp1hw4bxyCOPkJGRwYsvvsiUKVNYvnz5cQ9x6Os4CW75Rb526Ouffe1Qi1OimTq2Ded3PrV6H11OLyL1ce/ZRtkKtUMSvBociqZOncqGDRvo3bt39TpCNtvhE2gffPDB6vOCJLwYhsHqzQU8vyq7ei2iwd1bcNvlGZwSH56/2flbnTterZfICTEqnVSsfwXnxqVUt0P9r/WdO6R2SIJIgz+N5557Ln/5y19ITk72+3hUVBSffvppow0mwaFOO9Q8mjvHtuGCLqce4ydDl7/VuZ9bmc20GzvQtX1zs8cTCSnuPT9UtUN7AbCmnkb85fcSndLB5MlE6mpwKJo8efIx94mL0wlg4cIwDNZ8UcBzKw+3Qxeem8gfLm9NQrPw/c2u/tW5DR6et5MFD3bReVIiDeBrh17FufEtfO2QldjfXUNsv6vUDknQ0idT6thX5OLJ/+7hyx2+VcYTm0dz55g29Ds7fNuhQ462OrdhGKzfUqTzpkSOwb33R8qWz8JbsAeoaodG3kN06mkmTyZydApFUs0wDN6taofKI6gdquloq3M7XAbZB1wBnkgkdBhu1+F2yPCqHZKQo0+pALDvoIun/ruHL7YfbofuGN2a33VNNHewAMtoZSfWZvEbjLQ6t0j93Ht/9J07dKCqHUrpQPzl9xCderrJk4k0nEJRhDMMg3e/LOC5FYfboYHdErl9VGtOjZB2qKaB3RJ5bmU2UDcUaXVukbr8tkP9riL2d1djscaYPZ7IcYm8/9WTake2Q6c2i+aOMa3pH2HtUE3xdivTbuxQ5+ozrc4tUpc7+yffuUMHsoCqdmjkPUSnqR2S0KRQdJJCcT0bwzB4/6tCnl2xlzJHVTt0zqn8YVQbEpvrI9G1fXMWPNhFq3NLSDCc5bh+2ICnIBtrUga2zgOw2OOb9jXdlTg2LMDx+RJfO2SJ8rVD/a9ROyQhTf8LeBJCcT2b/QcrefqtLDb9dLgd+p/RrRlwTqK5gwWZOLtVV5lJ0HNnfV/npqHl7z/PKVc/SnTm2U3zmtnbfecO7d8NgDW5ve/cobQzmuT1RAJJoegEhdp6NofaoedWZFPq8AAw4JxTuV3tkEhIMpzlvkDkqji8sdIBQMkbj5A49ZVGvXmo2iGJBPpfwxMUSuvZHCiu5Km39rDpx2IAEppZuWN0G7VDIiHM9cMGX0Pkj2Hg2ra+0e58f2Q7FJXcjmYj7yE6vWOjPL9IsFAoOkGhsJ6NYRis+7qQZ5Yfbof6dz2V/xndmsTm+s1OJJR5CrKrm6E6Kh14CnNO+jUMdyWOj1/D8dmbh9uhC64ktv+1WKJ1DJHwo1B0goJ9PZuC4kqeWrqHjT9UtUPxVm4f3ZpB3VqYOpeINA5rUgbExPoPRjGxWFukn9Tzu3N2+NqhfbsAiGrVjmaXqx2S8KZQdIKCdT0bf+3Q7872tUMtTtFvdiLhwtZ5AOXvP+//QYsFW5eBJ/S8vnZoIY7PFtdoh8YT2/86tUMS9hSKTlAwrWdzaFmAX/aWs213Ob/m+H5zPCXuUDuUiMViCdg8ItL0LPZ4Trn60TpXn2GxcMrVj57QSdbu3J8pXz4Lz77fAIhq1dZ37lBGp0aeXiQ4KRSdhGBYz2brb6X85aVf8XgMKj2Ht5/dvhl/vq4dSWqHRMJWdObZJE59Bde29XgKc7C2SMfWZeBxByLDU4nj49dxfLrocDt0/hXEDpigdkgiikLRSTJzPZtyp4e/vPSr3/OafskuJ84WZcJUIhJIFlvcSV1l5s79mfIVs/Hk7wQgqmWm79yhjDMba0SRkKFQFKIMw+C5Fdn1XgEHBNWyACISXPy1Q/bzxxE3YAKWaN34WCKTQlEIKiyp5Omle/hsW3G9+wTLsgAiEnzceb/4zh2q2Q6NvJvo1meZPJmIuRSKQohhGHy0pYh/L9tLcbnvBKIoC3j9lEXBsCyAiAQXw1OJ45NFOD59A7weXzvUdyxxA69XOySCQlHIKCyp5F9v7+WT7w8C0DzOys2XpPPcyr1+v0Izc1kAEQk+7rxfKV8+83A7lNTGd+6Q2iGRagpFQc4wDDZ8d5B/vb2nuh3q2zmBqWPakJQQQ2aKPSiWBRCR4GR4KnF8uhjHJ6/XbocGTMASYzd7PJGgolAUxIpKK5nz9l4+2VrVDsVaue3yDAb3aFG97lAwLAsgIsHJnfcr5Stm4cn7FYCopNa+dYfadDZ5MpHgpFAUpDZ8V8Sct/dQXOZrh/qclcDUsW1omVB3zRAzlwUQkeBjeNw4Pl10uB3Cgr3vGOIGTlQ7JHIUCkVBpqjUzdxle9jwna8dahYbxa0jW3PxeS20KrWIHJMn/zfKls/Ek/cLcKgdupvoNl1Mnkwk+CkUBZEN3xXxr7f3crDMDUDvM09h6thMWp2qFWVF5OgMjxvHZ4txfPw6eN2ABXufMcQNUjsk0lAKRUGgqNTNv5ftYX2NduiWEa0Z2lPtkIgcmyf/N8pWzMSTe6gdyqDZiHuIzlQ7JHI8FIpM9vHWIuYsPdwO9ep0ClPHtSH5VK0ZIiJHZ3jcOD5/E8eGhTXaodFV7VCs2eOJhByFIpMcLHMzd9le1m8pAiDe7jt3SO2QiDREnXaoRYbv3KHMs02eTCR0KRSZQO2QiJwow+vB8dmbODa8drgd6j2KuAtvUDskcpIUigLoYJmbfy/by0c12qFbRmYwrGeS2iEROSbPvl2UrZiFJ2cH4GuH4kfcRUzbriZPJhIeFIoC5JPvDzJn6R6KSn3t0Hkdm3P3uEySE9UOicjRGV4Pjs+X4NiwADy+Y4i91yjiLpqkdkikESkUNbHiMjf/Xr6XD78tAiDOHsUtIzIY3kvtkEikM5zluH7YgKcgG2tSBrbOA7DY42vt49m3u6od2g5AVIt04kfcrXZIpAkoFDWhz7Yd5Om39lBY1Q71OKM5d1+RSYraIZGI5876npI3HgHDgEoHxMRS/v7znHL1o0Rnno3h9eD8fAkVR7ZDF07CYlM7JNIUFIqaQEm5rx364JsiAOJsUUwZkcGlvdUOiYivISp54xFwVRzeWOkAoOSNRzhlwhOUr5mLJ7uqHUpMI37kPWqHRJqYQlEj+3zbQZ5auofCksPt0F3jMkltoXZIRHxcP2zwNUT+uCspmf/HqnuWgb3nSOIuukntkEgABEUocjqd/O1vf+Ozzz7DbrfTvXt3HnvsMbPHOi4l5W6eWZ7Num8KAbVDIlI/T0F2dTNUh9f3C1VUYqrv3KF23QI4mUhkC4pQ9I9//AO73c6aNWuwWCzs37/f7JGOy8YfinnqrSwKqtqh7qf7zh1SOyQi/liTMiAmtt5gFN2uG82vfBiLLS7Ak4lENtNDUVlZGUuXLuWjjz6qblRatWpVZ7/i4mKKi4trbcvNzQ3IjPUpqXDz7PJs1n7ta4dibVFMvjSdEX1bqh0SCSLBdvywdR5A+fvP+38w2qZAJGIS00NRVlYWiYmJzJkzh40bN9KsWTPuuusuevXqVWu/+fPnM2fOHJOmrGvTj7526ECxrx069/Tm3KN2SCQoBdvxgxg79q6DcX618vC2KCtYYzjlmmkKRCImMT0Uud1usrKy6NKlC3/605/49ttvue2223jvvfdo3rx59X6TJk1i7NixtX42NzeXCRMmBHTe0goPz63cy3tf1m6HLuvTkqgotUMiwShYjh8AngN7fOsO7f0RAEvcKUR3OI+Y9udi6zJQgUjERKaHooyMDKKjoxk5ciQA5557Li1atGDnzp2cc8451fslJCSQkJBg1piAn3botObcfUUb0pLsps4lIkcXDMcPw+vBuXkZFR+9DG4XAPbzLvNdWXbEgo0iYg7TQ1FSUhJ9+/blk08+oX///uzcuZMDBw7Qrl27Jn/tcqeH9VuKyN7vJKOVnYHdEom3W+vs57cduiSdy/qqHRKRY/Mc2EvZytl49mwDIOrUFOIvu4uYDt3NHUxEajE9FAE8+uij/PnPf2bGjBlER0fzv//7v03+W93W30p5eN5ODMPA4TKItVl4bmU2027sQNf2h7+22/xTMU/+dw8HiisB6HZaM+6+IpN0tUMicgyG14Pzi2VUfHi4HbL1uJT4wTerHRIJQkERijIzM3nllVcC9nrlTg8Pz9tJhdNbvc3hMgCDh+ftZMGDXfAa8NzKbN79ogAAe0wUN12SxuXnt1I7JCLH5CnYS9mKGu1QQrLvjvYdepg8mYjUJyhCUaCt31KEUc9qsoZh8PK7uXz8/UH2H/S1Q107NOOeKzLJaKl2SESOzjC8vnOHPnwZ3E4AbN0vIX7IZLVDIkEuIkNR9n5nVTNUl8NlsPRT3+KRaodE5Hh4CrIpXzEb957vAbAkJNNM7ZBIyIjIUJTRyk6szVJvMALo2r6qHWqldkhEjs7XDi2n4sP5Ndqh4cQPmaJ2SCSERGQoGtgtkedWZgP+Q9HkS9IZNyBZ7ZCIHJOnIJvylbNxZ1W1Q6e0otmIqcSc1tPkyUTkeEVkKIq3W5l2Ywf+34u/4qo8HIyiLPD/Xd2WC89tYeJ0IhIKDMOL84sVVHwwr3Y7NHgylthm5g4nIickIkNRmcPDuq8LqwORNQp+1/VUpo5pQ7O4iHxLROQ4eApzfOcOZW0Fqtqhy+4k5vRex/hJEQlmEZcAvtpRwpP/zSK/yHdlWZd28dw7vi2tde6QiBxDdTv04TyorGqHzh1K/JDfqx0SCQMRE4rKnR5eWJXDqk0HALBFW7hxeDqj+rXCqnOHROQYPIU5lK98Evfu7wCwnNKSZpdNVTskEkYiIhR980sJs96s3Q7dc0Vb2iSrHRKRozMML84vV1HxwUtQ6QDA1m0ocRdPISq2+TF+WkRCSViHogqnhxfeyWHlxsPt0A3D0hjzu2S1QyJyTHXaoeYtfecOndHb5MlEpCmEbSj69pdSZi3JIq/Qd7+hzm3juXd8Jm2SY02eTESCnWF4cX61iop1Nduhi4m7+Pdqh0TCWNiFogqnhxdX57Dic187FBNt4YahaYztr3ZIRI7NU5Tra4d2bQEOtUN3EHNGH5MnE5GmFlah6Mh26MzMeP44PpPMFLVDInJ0huHF9dU7lK978XA7dM4QXzsUd4rJ04lIIIRFKHK4vMx9ew/La7RDEy9OY9wAtUMicmyeoryqduhbACzNk6rOHVI7JBJJwiIU/eWlXyly+1ahPjPTd+5QW7VDItIAru8/pPi7peCqAMDWdTBxQ29ROyQSgcIiFO07WElcgoWJQ9O4on8yVqvaIRFpmIqPXqZF8xgszVoQf+kd2Dqdb/ZIImKSsAhFHdJjeejmTrRLVTskIsfP1vUi4obeqnZIJMKFRSj6y4T2tA3RQFTu9LB+SxHZ+51ktLIzsFsi8Xar2WOJRIz4S++k2YDLzR5DRIJAWISiqBA9mXrrb6U8PG8nhmHgcBnE2iw8tzKbaTd2oGt7rYUiEggxHXqYPYKIBIkosweIVOVODw/P20mF04vDZQDgcBlUOL1V2z0mTygiR2M4y3F+s4bydS/h/GYNhrPc7JFE5CSFRVMUitZvKcIwDL+PGYbB+i1FDO/dMsBTiUhDuLO+p+SNR8AwfGsaxcRS/v7znHL1o0Rnnm32eCJygtQUmSR7v7O6ITqSw2WQfcAV4IlEpCEMZ7kvELkqqhd5pNIBrgpK3ngEo+rSfhEJPQpFJsloZSfW5v9cqFibhYyWtgBPJCIN4fphg68h8scwcG1bH9iBRKTRKBSZZGC3RCwW/6HIYrEwsFtiYAcSkQbxFGQfboiOVOnAU5gT2IFEpNEoFJkk3m5l2o0diLNHVTdGsTYLcfaoqu26LF8kGFmTMiCmniVAYmKxtkgP7EAi0mh0orWJurZvzoIHu/jWKTrgIqOljYHdEhWIRIKYrfMAyt9/3v+DFgu2LgMDO5CINBqFIpPF2a26ykwkhFjs8Zxy9aN1rj7DYuGUqx/FYosze0QROUEKRSIixyk682wSp76Ca9t6PIU5WFukY+syUIFIJMQpFImInACLLQ579+FmjyEijSgsTrT+aEsR5VoBWkRERE5CWISi19bmcv0T29j6W6nZo4iIiEiICotQ5KzUPcNERETk5IRFKDrk0D3DRERERI5XWIUi3TNMRERETlRYhSLdM0xEREROVFiFIt0zTERERE5UUIWiOXPmcOaZZ7J9+/bj+jl7jO4ZJiIiIicnaBZv/P777/nmm2/IyMg47p+dMCSNsUM6KxCJiIjICQuKUORyuZg2bRr//Oc/mTRpkt99iouLKS4urrUtNzcXQDdRFZGjOtrxQ0TkkKAIRU8++SSjRo0iMzOz3n3mz5/PnDlzAjiViIQLHT9EpCFMD0Vff/013333Hffdd99R95s0aRJjx46ttS03N5cJEyY05XgiEgZ0/BCRhjA9FG3evJlff/2VIUOGAL4D1eTJk3niiSfo379/9X4JCQkkJCSYNaaIhDAdP0SkIUwPRbfccgu33HJL9Z8HDx7MM888Q6dOnUycSkRERCJNUF2SLyIiImIW05uiI61bt87sEURERCQCqSkSERERQaFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikREREQAhSIRERERQKFIREREBFAoEhEREQEUikQkwrm2rcdwlps9hogEAYUiEYloFR8vpOjpG3BnfW/2KCJiMoUiEYlsbie4Kih54xEMV4XZ04iIiRSKREQADAPXtvVmTyEiJlIoEhEBqHTgKcwxewoRMZFCkYgIQEws1hbpZk8hIiZSKBIRAbBYsHUZaPYUImKiaLMHEBExVbQdbHZOufpRLLY4s6cRERMpFIlIRIvrfy2JF45VIBIRfX0mIpHN1mWgApGIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIACF+9ZnH4wEgNzfX5ElEJNDS0tKIjj7xQ5iOHyKRq77jR0iHon379gEwYcIEkycRkUBbu3Ytbdq0OeGf1/FDJHLVd/ywGIZhmDBPo3A4HGzdupXk5GSsVusJPUdubi4TJkxgwYIFpKWlNfKEjUdzNr5QmVVz+neyTVEkHT8gdGbVnI0vVGYN5Jxh2RTFxsbSq1evRnmutLS0k/qtM1A0Z+MLlVk1Z+OKxOMHhM6smrPxhcqsZs6pE61FREREUCgSERERARSKRERERACFIhISErjjjjtISEgwe5Sj0pyNL1Rm1ZzBK5T+zqEyq+ZsfKEyazDMGdJXn4mIiIg0lohvikRERERAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSK5CQ88MADzJo1y+wxRCQE6fghwUihSAJi4sSJLF68OGRfZ+PGjQwcONDv6xz5mIg0rnA6fjz88MPcf//9dfb58ccf6dq1K0VFRY3++tJwCkUiIiIBMnbsWN577z3Ky8trbX/77be56KKLSExMNGcwARSK5Dhs27aNsWPH0qNHD+6++26cTmf1YwcPHuTWW2/l/PPPp3fv3tx6663k5uYCMGvWLL744gumTZtGjx49mDZtGgDTp09n0KBBnHfeeYwbN44vvvii+vm2bNnCuHHjOO+88+jXrx9PPPFE9WPffPMN11xzDb169WLUqFFs3LjxqK8jIubT8cOnR48epKSk8O6771Zv83g8LF++nDFjxjTJa8pxMEQawOl0GhdeeKHx0ksvGS6Xy3jnnXeMLl26GDNnzjQMwzAKCgqM1atXG+Xl5UZJSYlx5513Gn/4wx+qf/766683Fi1aVOs5ly5dahQUFBiVlZXGCy+8YPTr189wOByGYRjGVVddZbz11luGYRhGaWmp8fXXXxuGYRi5ublGnz59jA8//NDweDzGxx9/bPTp08c4cOBAva9zpJ49e9b7f88++6zfn/n888+NAQMG+P37HPmYiNSm40ftY8TcuXONSZMmVf95/fr1Rt++fQ2Xy3XsN1OaVLTZoUxCw7fffktlZSWTJk3CYrFwySWXMG/evOrHW7RowfDhw6v//Ic//IEbbrjhqM85evTo6v+++eab+fe//83OnTs566yziI6OZvfu3RQUFJCUlET37t0BX8U8cOBABg0aBMDvfvc7unbtykcffcTYsWMb9Hep+RuliDQ9HT/qzj5nzhxyc3NJS0tj6dKljBw5kpiYmJN+bjk5CkXSIPn5+aSmpmKxWKq3ZWRkVP93RUUFTzzxBBs2bODgwYMAlJWV4fF4sFqtfp/zxRdfZPHixeTn52OxWCgtLaWwsBCAxx9/nKeeeopLL72UNm3acMcdd3DRRReRnZ3N6tWr+eCDD6qfx+1207dv36b4a4tII9Dxo7aMjAx69erFsmXLmDBhAmvXrmXBggUBnUH8UyiSBklOTiYvLw/DMKoPbNnZ2WRmZgK+A9TOnTtZtGgRycnJ/PDDD4wZMwbDMPw+3xdffMHzzz/PvHnz6NixI1FRUfTu3bt6//bt2zNz5ky8Xi/vvvsuU6dOZePGjaSnpzN69GimT59+wn+XHj161PvYrbfeym233XbCzy0iden4UdfYsWN57rnnSE5Opk2bNpx99tknPJM0HoUiaZDu3bsTHR3Nyy+/zIQJE1i3bh3fffdd9W9YZWVl2O12EhISKCoqYs6cObV+vlWrVmRlZVX/uaysDKvVSlJSEm63m+eee47S0tLqx99++20GDBhAUlISCQkJAFitVkaNGsX48ePZsGED/fr1w+12880339CuXTvS0tLqvI4/X3/9dWO9LSLSADp+1DVs2DAeffRRnn76aa677rpGeU45ebr6TBrEZrPx9NNP89Zbb9G7d29WrVrF0KFDqx+fNGkSTqeT888/n6uvvpoBAwbU+vkbbriBNWvW0Lt3b6ZPn07//v0ZOHAgw4cPZ/DgwdjtdtLT06v337BhAyNGjKBHjx48/vjjzJo1q3qfuXPn8uyzz3LBBRcwaNAgXnjhBbxer9/XERHz6fhRV3x8PMOHDycnJ4fLL7+8SV9LGs5i1NdPioiIiEQQNUUiIiIiKBSJiIiIAApFIiIiIkCIhyK3282ePXtwu91mjyIiIUbHDxE5UkiHotzcXIYMGVJ9jxwRkYbS8UNEjhTSoUhERESksSgUiYiIiKBQJCIiIgIoFImIiIgACkUiIiIigEKRiIiICADRZg8gEowcHgdfFm5mnyOP5NhUerboTaw11uyxRESkCSkUiRzh59IdzN3xFAYGLq8TW5SdJVmLuL3jVM5o3tHs8UREpIno6zORGhweB3N3PIXT68DldQLg8jpxen3bHR6HyROKiEhTUSgSqeHLws0YGH4fMzD4qnBzgCcSEZFAUSgSqWGfI6+6ITqSy+tknyM/wBOJiEigKBSJ1JAcm4otyu73MVuUneTYlABPJCIigaJQJFJDzxa9sWDx+5gFC+e16B3giUREpDF4Kioo/Ogj8hctqncfhSKRGmKtsdzecSr2qNjqxsgWZcce5duuy/JFREJP+fbt/HzPPeS99hoHVq2qdz9dki9yhDOad+Rv3f7BV4Wb2efIJzk2hfO0TpGISEjyVFSQNXMmXsexrx5WKBLxI9YaS79WA8weQ0RETlLxpk14vd4G7auvz0RERCRsOXfvBperQfuqKRIREZGwYxgGxRs3UvTxxw3+GYUiERERCSvugwfJffllSr788rh+TqFIREREwsKhdijv1VfxlJYC0LxHD04dMICc557DMAwMp/8FekGhSERERMKAu7iY3Pnzq9uhqPh40q6/noQLLsBisdB89myKN27ElV//nQkUikRERCSkFW/aRO4rr+ApKQGg+bnnknbjjcS0aFG9T1RsLImDBh31eRSKREREJCS5i4t95w598QXga4dSJ0zg1H79sFj8353gaBSKREREJOQ0pB06XgEJRTNmzGDNmjXs3buX5cuX06lTJwoLC7n//vvZvXs3NpuNdu3aMW3aNJKSkgIxkoiIiIQgd3Exua+8QsnmzQBExcWRet11nNq//wm1QzUFZPHGIUOGsGDBAlq3bl29zWKxMGXKFNasWcPy5cvJzMzkn//8ZyDGERERkRBUvHkzv/6//1cdiJp168Zpf/sbiQMGnHQgggA1Rb169aqzLTExkb59+1b/uXv37ixcuLDe5yguLqa4uLjWttzc3MYbUkTClo4fIqHNXVLia4c2bQIatx2qKSjOKfJ6vSxcuJDBgwfXu8/8+fOZM2dOAKcSkXCh44dI6Cr+4gtyX34ZT9UvNs3OOYf0m24ipglOtwmKUPTYY48RHx/P9ddfX+8+kyZNYuzYsbW25ebmMmHChKYeT0RCnI4fIqHHXVJC3quvUrxxI1DVDl17Lac20ldl/pgeimbMmMGuXbt45plniIqq/xSnhIQEEhISAjiZiIQLHT9EQkvxl1+SO3/+4Xaoa1dfO9SyZZO+rqmhaNasWWzdupXnnnsOm81m5igiIiJiMndpqa8d+vxzoKoduuYaTh04sMnaoZoCEoqmT5/Ou+++y/79+7nppptITExk9uzZPPPMM7Rv355rrrkGgDZt2vCvf/0rECOJiIhIECn58ktyTGiHagpIKHrooYd46KGH6mz/6aefAvHyIiIiEqTqtEOxsaRcey2JAWqHajL9nCIRERGJTHXaobPPJv3mmwPaDtWkUCQiIiIB5SktJXfBAoo/+wyoaoeuuYbEQYMC3g7VpFAkIiIiAVPy1VfkzJsXNO1QTQpFIiIi0uSCtR2qSaFIREREmlTJ11/72qGDB4Gqduimm4hp1crkyWpTKBIREZEm4SkrI2/BAg5++ilQ1Q5ddRWJF10UNO1QTQpFIiIi0uhKvv6a3PnzcRcVARDfpQvpN92ELTnZ3MGOQqFIREREGo2nrIy8117j4CefAGCx20m9+uqgbYdqUigSERGRRlHyzTfkzpt3uB3q3Jn0m28O6naoJoUiEREROSmesjLyFi7k4McfAzXaoQsvxHKUm70HG4UiEREROWGl335LzksvhWw7VJNCkYiIiBy3Ou2QzUbKVVfRYvDgkGqHalIoEhERkeNSumWLrx0qLAQg/swzSZ88GVtKismTnRyFIhEREWkQT1kZea+/zsENG4DwaIdqUigSERGRYyr97jtfO1RQAIRPO1STQpGIiIjUy1Ne7muH1q8HqtqhK6+kxZAhYdEO1aRQJCIiIn4d2Q7FdepExuTJ2FJTTZ6saSgUiYiISC2eigryFy6kKALaoZoUikRERKRa6dat5Lz4YsS0QzUpFImIiIivHXr9dYo++gioaofGj6fFxReHdTtUk0KRiIhIhPPbDt18M7a0NJMnCyyFIhERkQjlqagg/403KPrwQwAsMTEkjx9P0tChEdMO1aRQJCIiEoHKvv+e7BdfxH3gAABxZ5xB+pQp2COsHapJoUhERCSCeCoqyF+0iKIPPgDUDtWkUCQiIhIhyrZtI+eFF6hUO+SXQpGIiEiY89sOjRtH0vDhEd8O1aRQJCIiEsbqtEOnn0765MnYMzJMniz4KBSJiIiEIa/DQf6iRRSuWweAJTqa5CuuUDt0FApFIiIiYabshx/IefFFKvftAyD2tNPImDJF7dAxKBSJiIiECb/t0LhxJF1yidqhBlAoEhERCQNlP/7oO3dI7dAJUygSEREJYV6n09cOrV0L1GiHhg/HYrWaPF1oUSgSEREJUX7bocmTsbdubfJkoUmhSEREJMR4nU7yFy+m8P33AV871GrMGFpeeqnaoZOgUCQiIhJCyn/6iez//OdwO9Shg+/cIbVDJ02hSEREJAR4nU7y33yTwvfeA9QONYWAhKIZM2awZs0a9u7dy/Lly+nUqRMAO3fu5IEHHqCoqIjExERmzJhB+/btAzGSiIhIyCj/6SeyX3iByvx8QO1QUwnIogVDhgxhwYIFtD7iH++RRx7huuuuY82aNVx33XU8/PDDgRhHREQkJHidTnIXLGDX3//uC0RWK8lXXEH7hx5SIGoCAWmKevXqVWfbgQMH2LZtGy+99BIAI0eO5LHHHqOgoICkpKQ6+xcXF1NcXFxrW25ubtMMLNIIilxFrMldRbI9mcGpQ80eJ6Lp+CGhqHz7dl87lJcHQGz79qRPmUJsmzYmTxa+TDunKCcnh9TUVKxV34NarVZSUlLIycnxG4rmz5/PnDlzAj2myHEzDINNBZ+zOOt1KjzlNLM246KUi7FYLGaPFrF0/JBQ4nU62bdkCQXvvQeG4WuHRo+m5WWXYYnWqcBNKWTe3UmTJjF27Nha23Jzc5kwYYJJE4nUdbCyiIW7XuW7g98C0MzanIntb1QgMpmOHxIqynfsIOc//8F1qB1q187XDmVmmjxZZDAtFKWnp5OXl4fH48FqteLxeMjPzyc9Pd3v/gkJCSQkJAR4SpGGObIdAjg3sQfXtL2ehBh9bs2m44cEO6/Tyb7//peCd99VO2Qi097pli1b0rlzZ1asWMHo0aNZsWIFnTt39vvVmUgwq9sONeOqttfSs0UfNUQickxHtkP2du3IUDtkioCEounTp/Puu++yf/9+brrpJhITE1m5ciV//etfeeCBB5g7dy4JCQnMmDEjEOOINArDMNhcsJHFWQspr26HunN12+s5NeZUk6cTkWDndbl85w7VaIdajRpFqxEj1A6ZJCDv+kMPPcRDDz1UZ/vpp5/O4sWLAzGCSKM6WHmQN3a/yrdF3wC+dujKttfSS+2QiDRA+c8/+9qhqqsg7W3bkvH736sdMpmiqMhxMAyDLwo3sXj3Qso8ZQB0O7U717RTOyQix+Z1uXznDq1Zo3YoCOlfQKSBjmyH4q3xXJl5Lb2T+qodEpFjqvj5Z7KPbIemTCG2bVuTJ5NDFIpEjsEwDL4s3MQitUMicgK8Lhf73nqLgtWrD7dDl19Oq5Ej1Q4FGf1riBxFcWUxr+9+lW+LvgbUDonI8an45RdfO5STA4A9M9PXDrVrZ/Jk4o9CkYgfvnZoc1U7VArAOaeey7XtrufUmERzhxORoOd1udi/dCkH3nnncDs0ciStLr9c7VAQ07+MyBGKK4t5Y/cCvin6CoA4azxXZl5Dn6Tz1Q6JyDFV/Pqrrx3KzgbUDoUShSKRKoZh8FXhF7yx+7Xqdqjrqd24tu1EEm2J5g4nIkGvTjsUFeVrh0aNUjsUIvSvJAKUVBbzep126Gr6JF2gdkhEjqlOO9SmDelTphDXvr25g8lxUSiSiPdlwWYWZb1GqftQO3QO17a9Qe2QiByTt7KS/W+/zYGVK6vboZYjRpA8erTaoRCkfzGJWCWVxbyx+zW+LvoSgDhrXNW5Q2qHROTY1A6FH4UiiUi+c4cWHNEOTSTR1sLkyUQk2NXXDrUaNYqomBizx5OToFAkEaWksoQ3di+o1Q5d0eZqzm/ZT+2QiBxTxc6d5PznPzj37gXA3rq1rx3q0MHkyaQxKBRJxDiyHTo74Ryua6d2SESOrbodWrUKvF6wWHzt0OjRaofCiEKRhL2SyhLeyFrA14Vqh0Tk+FX89puvHdqzBwBbRgYZU6YQd9ppJk8mjU2hSMLaV4VfVrVDJQB0SejKde0m0sKWZPJkIhLsDLebfYfOHVI7FBEUiiQslbpLeGP3a3xV+AUAsVFxjM9UOyQiDaN2KDIpFEnY+abwK17f/SolaodE5DgZbjf7ly1j/4oVh9uhSy+l1ZgxRNlsZo8nTUyhSMJGqbuERbsX8mXhZsDXDl2ReRUXtPydKe2Qw+Pgy8LN7HPkkRybSs8WvYm1xgZ8DpFj8VRUULxpE5V5ecSkppLQpw/WuDizxwo4x65dZP/nPzizsgC1Q5FIoUjCwpHtUOeEs5nQ7gbT2qGfS3cwd8dTGBi4vE5sUXaWZC3i9o5TOaN5R1NmEvGnfPt2smbOxDAMDKcTi91O/sKFZN57L/GdOpk9XkAYbjf7ly/3tUMej9qhCKZQJCGt1F3Kot2vHdEOXckFLfubdu6Qw+Ng7o6ncHod1dtcXicAc3c8xd+6/UONkQQFT0UFWTNn4nUc/qwaTicGkDVzJh1nzyYqNrw/q3XaofR0MiZPJu6MM0yeTMygUCQhy9cOLaDEXQyY3w4d8mXhZgwMv48ZGHxVuJl+rQYEeCqRuoo3bcIw6vmsGgbFGzeSOGhQgKcKDMPtZv+KFexfvry6HUq65BKSx45VOxTBFIok5JS6S1m8eyFfFG4CIDYqlnGZV9HPxHaopn2OvOpm6Egur5N9jvwATyTiX2VeHobT/2fVcDpx5YfnZ9WxaxfZL7yAc/duAGxpab5zh9QORTyFIgkp3xZ9zcJdr1a3Q2ed0oUJ7W8gydbS5MkOS45NxRZl9xuMbFF2kmNTTJhKpK6Y1FQsdrvfYGSx27GlhNdnVe2QHItCkYSEUncpi7MW8kVBjXaozZX0azUgKNqhmnq26M2SrEV+H7Ng4bwWvQM8kYh/CX36kL9wod8vey0WCwl9+wZ8pqbi2L3bd+5QjXYofcoU4tUOSQ0KRRL0vi36hoW7XqnRDnVmQvtJQdUO1RRrjeX2jlPrXH1mwcLtHafqJGsJGta4ODLvvbfO1WcWi4XMe+8Ni5OsDbeb/StXsn/ZssPt0PDhJI8bp3ZI6lAokqBV5i5jcdZCNhdsBMAeZWdcm6v4XRC2Q0c6o3lH/tbtH3xVuJl9jnySY1M4T+sUSRCK79SJ0//+d/IXL8aZk4M9PZ2UK68kOjHR7NFOmiMri5z//AfHrl1AVTs0eTLxHbUshvinUCRBaUvRNyzc9SrF7oOArx26rt0kWtqDsx3yJ9Yaq6vMJOgduU6Rc+9eSr78MqTXKfLbDg0bRvIVV6gdkqNSKJKg4muHXmdzweeArx0a2+ZK+rcaGPTtkEioCcd1iuq0Q6mpvnOH1A5JAygUSdD4ruhbXtv1SnU7dOYpnZnQ7gZa2luZPJlIeAqndYoMt5sDq1ax7+23a7dD48YRZbebPZ6ECIUiMV15VTu0qaodskXZGdtmPANaDVI7JNKEwmWdIseePeQ8/3x1OxSTmkqG2iE5AQpFYqrvir5l4e5XOFjpa4c6nXIW17ebpHZIJABCfZ0iw+PhwMqVtduhoUN95w6pHZIToFAkpih3l/HmnjfYeOAz4HA71L/VQKIsUSZPJxIZQnmdIseePb5zh377Dahqh26+mfgzzzR3MAlpCkUScFsPbuG1Xa9wsLIIgE6nnMmEdpNoZU9ulOd3eBx8WbiZfY48kmNT6alL4UX8CsV1igyPhwPvvMP+pUsx3G6wWGhx8cWkjB+vdkhOmkKRBEy5u5wle97g8wOfAlXtUOsr6J88qNHaoZ9Ld9RZNHFJ1iJu7ziVM5rr/AKRI8V36kTH2bMp3rgRV34+tpQUEvr2DcpA5Ny7l+z//AfHzp0AxKSkkDF5stohaTQKRRIQ3x/8jtd2vUxRVTvUsfmZXN++8doh8DVEc3c8hdN7+PLiQ/cfm7vjKf7W7R9qjET8iIqNDeqrzOq0Q+Brh668Uu2QNCqFImlS/tqhMa2vYEAjtkOHfFm4GcPv2RFgYPBV4WYtpigSYuq0Q8nJpE+eTLOzzjJ5MglHQRGKPvjgA5588kkMw8Dr9XLnnXcybNgws8eSkxSIdqimfY48v3emB19jtM8RGpcXi0hVO7R6NfvfeutwOzRkCClXXaV2SJqM6aHIMAzuv/9+FixYQKdOnfjxxx+59tprufjii4mK0lVIoajCU86SrEV8duATAGxRNka3voKByRc26ZVlybGp2KLsfoORLcpOcmxwX14sIj7O7GxfO/Trr0BVO3TzzTTr3NnkySTcmR6KAKKioigpKQGgpKSElJQUBaIQ9f3Brby2a36NdqgT17e/scnaoZp6tujNkqxFfh+zYOG8Fr2bfAaRUOSpqKB40yYq8/KISU0loU8frHFxAZ/D8HopWL2aff/9b+126Morg/LEbwk/DQ5FTzzxBGPGjKFzIyd1i8XC7Nmzuf3224mPj6esrIxnn322zn7FxcUUFxfX2pabm9uos8iJM6sdqinWGsvtHafWufrMgoXbO07VSdYRTMeP+h15Q1iL3U7+woUBvyFsnXaoVSvfuUNqhySAGhyK3G43kydPJikpiVGjRjFq1CjS0tJOegC3282zzz7L3Llz6dmzJ19++SX33HMPK1eupFmzZtX7zZ8/nzlz5pz060nj23ZwKwt2vUxRZSEAZzTvxPXtJ5FsP/6vq052jaEzmnfkb93+wVeFm9nnyCc5NoXztE5RxNPxw79guCGs33Zo8GDfuUNqhyTALEZ9dwP0w+PxsH79epYvX84HH3zAueeey5gxYxg6dGitAHM8vvvuO/70pz+xatWq6m2XXnopM2bMoFu3btXb6vtNb8KECaxdu5Y2bdqc0OvLifPfDo1jYPJFJ9QO+Vtj6FDLozWG5GTo+OFf4Ucfkffaa/Xe5iPtuuua9FJ9Z3Y2OS+8QMUvvwBqh8R8x3VOkdVq5aKLLuKiiy5ix44d/PGPf+SBBx7g0Ucf5bLLLmPq1KmkpqYe1wBpaWnk5uby66+/ctppp/HLL7+wf/9+2rZtW2u/hIQEEhISjuu5pek0ZjsEWmNImpaOH/6ZdUNYw+ulYM0a9i1ZUt0OJQ4eTKraITHZcYWi0tJS3nnnHZYtW8b27dsZNmwYjzzyCBkZGbz44otMmTKF5cuXH9cAycnJ/PWvf+Wuu+6qviP6E088QWJi4nE9jwRGhaeC/+5ZzKf7NwAQY7Exus04Bp1gO3SI1hgSCbyY1FQsMTEYlZV1HrPExDTJDWGdOTm+dujnn30ztGzpa4e6dGn01xI5Xg0ORVOnTmXDhg307t27+pJ5m81W/fiDDz5Iz549T2iIQ+coSXD7ofh7Fvz2MoWVBQCc3rwj17e7kZRGuNRdawyJBF7zbt3I9ROIAIzKSpqfe26jvZbh9VLw7ru+dqjqNRMvuoiUq64y5Uo3EX8aHIrOPfdc/vKXv5Cc7P/S6qioKD799NNGG0yCR4Wngrf2LOaTmu1Q67EMShncaFeWaY0hkcAr3bIFYmLAXzCKiaH0228b5ZwiZ26urx3asQOA6JYtyVA7JEGowaFo8uTJx9wnTmk/7PxQvI0Fv82vbodOa3YGE9vfSErs8Z07dixaY0gk8Crz8vwHIoDKypM+p8jweil47z32vfnm4XbowgtJufpqtUMSlIJi8UYJPr526E0+2b8egBhLDKNaj+XClCFNsu6Q1hgSCbyY1FQsdnu9V5+dzDlFrtxcso9sh26+mWZnn33CzynS1BSKpI4fi7fx6q75FLoOtUOnc337G0mNPfq6VFpjSCS0JPTpQ/7ChX4vcbBYLCT07Xvcz2l4vRS+9x75S5ZguFyA2iEJHQpFUs3hcfDfPYtPqB3yt8bQkqxFx73GUKw1VleZiQSINS6OzHvvrbOitcViIfPee4/78nhXXp6vHdq+HYDopCTSb76Z5l27NsX4Io1OoUiAE2+HQGsMiYSy+E6d6Dh7NsUbN+LKz8eWkkJC377HFYgMr5fC998n/803D7dDgwaRcs01aockpCgURTiHx8FbexbzcY126PLWY7go5eIGnzukNYZEQltUbOwJX2Xmtx266Saan3NOY44oEhAKRRHsp+IfeHXXfApcBwDo0Ox0JjawHapJawyJRB7D66Vw7VryFy+ubodOHTiQ1GuuwRofb/J0IidGoSgCOTwOlu5dwoZ9HwK+dmhk6zEMPo52qCatMSQSWVz5+eS88ALlP/0EVLVDN95I8xr3qxQJRQpFEean4h9YsGs+B6rbodOY2P6m426HatIaQyKRwW87NGAAqddeq3ZIwoJCUYRweBy8vXcJ66vaoWhLNJdnjGFw6tCTXndIawyJhL867VCLFr5zh9QOSRhRKIoA20t+4tXf5nHAtR+A9s06MLH9TaTFplfvozWGRMQfw+ulcN068hctqt0OXXMN1mbNTJ5OpHEpFIUxXzv0X9bv+wDwtUMjM8Yw5Ih2SGsMiUQ2T0UFxZs2UZmXR0xqKgl9+mCNi/O1Qy++SPmPPwIQnZjoa4ca8UaxIsFEoShM+W2H2t1EWlx6rf20xpBIZCvfvr3O4o15r71GiwsvpPDDD6tvAXJq//6+c4fUDkkYUygKM06Pk7f3LuGjWu3QaAanDsVqsdbZX2sMiUQuT0UFWTNn4nUc/qXoUAgqWLMG8LVDaTfeyCndu5sxokhAKRSFkR0lP/Hqb/PZ79oHQLv4DkxsfyPpcRn1/ozWGBKJXMWbNmEY/n8pAog7/XQy771X7ZBEDIWiMHC87VBNWmNIJHJV5uVVN0P+xJ91lgKRRBSFohC3o2Q7r+6ax37noXaoPRPb33TUdqgmrTEkErliUlMhJgYqK/08GIMtRb8USWQ5uQVqxDROj5PFWa8ze/s/2O/cRxRRnNG8Ixe06k8LW1KDn+fQGkP2qFhsUXbA1xDZo2K1xpBImGverZv/QARQWamrzCTiqCkKQUe2QxYsRFms/Fy6g93lu3lrz5vHdTm91hgSiUylW7ZgiYnB8BOMLDExlH777QnfKFYkFCkUhRCnx8my7Lf4MH8tAFaL75/PY7hxG76D2oleTq81hkQiT2Vent9ABGBUVuLK14UWEln09VmI+LlkO3/74dHqQNQ2vh3D0y6t90TqQ5fTi4jUJyY1FYvd7vcxi92uc4ok4igUBTmX18mbWa8ze/s/2e/ch9Vi5fKMMdx31oNUel26nF5ETlhCnz5YLBa/j1ksFhL69g3wRCLm0tdnQeznku28UuPcobbx7ZjY/iYy4loDupxeRE6ONS6OzHvvZff//R+GxwNuN0RHY7Faybz3XqJidV6hRBaFoiDk8jpZtncpH+avxcDAarFyWfrlDE27pNbXZbqcXkREpPHo67Mg80vpzzyxbRof5L+PgUFmfFv+1PkhLkkfUef8IV1OLyIn49BtPgyn09cSAbjdGE5nndt/iEQCNUUmc3gcfFm4mdyKbPZW7GV7yY/V7dCl6SMZlnZJ9VVm/uhyehE5UUe7zYdhGBRv3KhL8iWiKBSZ6OfSHczd8RQew1N9ST1Aij2FKaf9gdbxbRr0PLqcXkROxNFu82E4nbokXyKOvj4zicPj4F/bn8TpddQKRABFroO0tLcyaTIRiRS6JF+kNoUik6zOWYnLcPl/0ILWGBKRJqdL8kVqUygKMJfXxX/3LOa9vNWA/+/ytcaQiATCoUvyo2Jjqxsji91OVGysLsmXiKRzigLo19JfePW3eeQ5cwHfZfOGn2CkNYZEJFDiO3Wi4+zZFG/ciCs/H1tKCgl9+yoQSURSKAoAl9fFiuy3WZf3HgYGUVi5OG0YH+atw2XUPclRawyJSCBFxcbqKjMRFIqa3M7SX3hl1zzyHL52qHVcGya2v4nM+Lacfeo5zN3xFAYGLq8TW5QdCxatMSQiImIChaKTdGidoX2OPJJjU+lZtUZQpbeSFdlvszbv3ep26JL0yxiedhnRUb63XWsMiYiIBA+FopNwaJ2hmk3PkqxFjG0zng/y3/fbDh1JawyJiIgEh6AIRU6nk7/97W989tln2O12unfvzmOPPWb2WEfl8DiYu+MpnN7Dy+AfujHr67tfBSAKK8PTL+WStBHV7ZCIiIgEp6D4X+p//OMf2O121qxZg8ViYf/+/WaPdExfFm72e+XYIYkxLbjtjDv8tkMiIiISfEwPRWVlZSxdupSPPvqoehGxVq2CfzXnfY686mbIn14teisQiYiIhBDTQ1FWVhaJiYnMmTOHjRs30qxZM+666y569epVa7/i4mKKi4trbcvNzQ3kqLUkx6YSbYmpc4sO8K0zlBqXZsJUIuJPsB0/RCQ4mR6K3G43WVlZdOnShT/96U98++233Hbbbbz33ns0b968er/58+czZ84cEyc9rNJbSW5Fjt9ABFpnSCTYBNPxQ0SCl+mhKCMjg+joaEaOHAnAueeeS4sWLdi5cyfnnHNO9X6TJk1i7NixtX42NzeXCRMmBHTeXWU7efm3l8h15AC+AGS1ROM2KrXOkEiQCpbjR7DyVFRQvGkTlXl5xKSmktCnD9a4OLPHEgk400NRUlISffv25ZNPPqF///7s3LmTAwcO0K5du1r7JSQkkJCQ0KivXd8aQ/5UeitZlbOc93JXV607FMWwtEu5KOVithz8WusMiQSxpjh+hIvy7dvJmjkTwzAwnE4sdjv5CxeSee+9xHfqZPZ4IgFleigCePTRR/nzn//MjBkziI6O5n//93+b/ABW3xpDt3ecyhnNO9bad1fZb7z824vV7VB6bAY3tL+Zts18wU3rDIlIKPJUVJA1cyZex+GlRQynEwPImjmTjrNn6x5oElGCIhRlZmbyyiuvBOz1jrbG0NwdT/G3bv+oXpX6nZwVvJe7Gi/eqnboEi5JH0lMVEzA5hURaQrFmzZhGP6XFjEMg+KNG3VPNIkoQRGKAu1oawwZGHxVuJk2cW155beXyHbsBXzt0MT2N9GuWfsATioi0nQq8/IwnP6XFjGcTlz5+QGeSMRcERmKjrbGkMvr5NP9H7Or7Lfqdmho2iVcqnZIRMJMTGoqFrvdbzCy2O3YUlJMmErEPFFmD2CG5NhUbFF2v49ZsLCz7Fe8eEmPzeC+sx5kVOuxCkQiEnYS+vSBer4+wzBI6Ns3sAOJmCwiQ1HPFr2xYPH7mIGBBQvD0i7lT50f0tdlIiIiESIiQ1GsNZbbO07FHhVLtKV2A5Rka8n/d9aDjG49Tu2QiIS14k2bwOL/F0QsFoo3bgzsQCImC4tQ9GXhZhwex7F3rKF9fAcGJl+Ix3ADvq/NBqcM5eGzH6Ndsw5NMaaISFDRidYitYXFidarslfwkXud3zWG/Mkq380rv73E3oo9AKTFpjOx/U20VxgSkQiiE61FaguLpqjScOH0+tYeOlpj5Pa6WZH9Nv/7w9/YW7EHCxaGpl7CA53/okAkIhEnoU8fLPV8fWaxWHSitUScsAhFhxxaY8ifrPLd/O+Pj/NOzgq8eEiNTeOPZz3AmDZX6NwhEYlI1rg4Mu+9F4vdDtFVXxxER2Ox28m8916tZi0RJyy+PjvE5XWyz1H7O3C3183q3JWsyXkHLx4sWLg4dRgjMkYrDImIiEi1sApFtig7ybGHvwM/8tyhVHsaE9vfSIfmp5s1oohI0Dh077Na5xS53Rhut+59JhEprEKRBQvnteiN2+tmTe4qVuesqm6HhqQOY0TGKGxRNrPHFBEJCrr3mUhtYRGKYiw27FG+tYf2OfPVDomINIAuyRepLSxC0YiMkQzpPIwP89fWaocGpw5lZMZotUMiIn7oknyR2sIiFLWOy+Sp7f/HnoosAFLsqUxsfxOnqR0SEalXQp8+5C9ciL8v0HRJvkSisLgk/5lfnmZPRVb1uUMPdnlYgUhE5BgOXZIfFRvruywfX0MUFRurS/IlIoVFU+QxvFXt0I2c1vwMs8cREQkZ8Z060XH2bIo3bsSVn48tJYWEvn0ViCQihUUo6teyPzd0uRFblN3sUUREQk5UbKyuMhMhTL4+uyR9hAKRiIiInJSwCEUiIiIiJ0uhSERERASFIhERERFAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSKRERERIAgC0Vz5szhzDPPZPv27WaPIiIiIhEmaELR999/zzfffENGRobZo4iIiEgEijZ7AACXy8W0adP45z//yaRJk/zuU1xcTHFxca1tubm5gRhPREKcjh8i0hBBEYqefPJJRo0aRWZmZr37zJ8/nzlz5gRwKhEJFzp+iEhDmB6Kvv76a7777jvuu+++o+43adIkxo4dW2tbbm4uEyZMaMrxRCQM6PghIg1heijavHkzv/76K0OGDAF8B6rJkyfzxBNP0L9//+r9EhISSEhIMGtMEQlhOn6ISEOYHopuueUWbrnlluo/Dx48mGeeeYZOnTqZOJWIiIhEmqC5+kxERETETKY3RUdat26d2SOIiIhIBFJTJCIiIoJCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIABBt9gAnw+PxAJCbm2vyJCISaGlpaURHn/ghTMcPkchV3/EjpEPRvn37AJgwYYLJk4hIoK1du5Y2bdqc8M/r+CESueo7flgMwzBMmKdROBwOtm7dSnJyMlar9YSeIzc3lwkTJrBgwQLS0tIaecLGozkbX6jMqjn9O9mmKJKOHxA6s2rOxhcqswZyzrBsimJjY+nVq1ejPFdaWtpJ/dYZKJqz8YXKrJqzcUXi8QNCZ1bN2fhCZVYz59SJ1iIiIiIoFImIiIgACkUiIiIigEIRCQkJ3HHHHSQkJJg9ylFpzsYXKrNqzuAVSn/nUJlVcza+UJk1GOYM6avPRERERBpLxDdFIiIiIqBQJCIiIgKE+DpFx2Pw4MHYbDbsdjsA9913HwMGDKi1j8fjYfr06WzYsAGLxcItt9zClVdeGbAZ9+zZw//8z/9U/7mkpITS0lI2bdpUa7+nn36a1157jZSUFADOO+88HnnkkSadbcaMGaxZs4a9e/eyfPlyOnXqBMDOnTt54IEHKCoqIjExkRkzZtC+ffs6Px/I99bfrIWFhdx///3s3r0bm81Gu3btmDZtGklJSXV+PlDvb33vaUM+qxC499TfnA39rII5n9emoGPIyQmVY0ioHD/qmxV0DDkpRoS46KKLjJ9++umo+7z11lvGzTffbHg8HuPAgQPGgAEDjKysrABNWNf06dONRx99tM72p556yvj73/8e0Fk2b95sZGdn13kfJ06caCxdutQwDMNYunSpMXHiRL8/H8j31t+shYWFxueff169z9///nfjwQcf9PvzgXp/63tPG/JZNYzAvaf1zVlTfZ9VwzDn89oUdAw5OaFyDAmV40d9sxqGjiEnQ1+f1bBq1SquvPJKoqKiSEpK4uKLL2b16tWmzOJyuVi+fDlXXHGFKa9/pF69epGenl5r24EDB9i2bRsjR44EYOTIkWzbto2CgoI6Px/I99bfrImJifTt27f6z927dyc7O7tJXr+h/M15PAL1nh5rzmD7rJpJx5D6hcoxJFSOH6BjSFOImK/PwFchGoZBz549uffee+tc9peTk0NGRkb1n9PT0027g/a6detITU3l7LPP9vv4ypUr+fjjj0lOTubOO++kR48eAZ7Q936lpqZW3zfKarWSkpJCTk5OnVo5mN5br9fLwoULGTx4cL37mP3+HuuzCsHznh7rswrmv5+NRceQxhWKx5BQOH6AjiEnKmKaogULFrBs2TKWLFmCYRhMmzbN7JGOasmSJfWm5muuuYa1a9eyfPlyJk+ezO23305hYWGAJwxdjz32GPHx8Vx//fV+Hzf7/Q2nzyqY/342lnD6dwmXfxMzBPvxA8LrswqBfU8jJhQdqu5sNhvXXXcdX331ld99alaiOTk5ptxROC8vj82bN3P55Zf7fTw5OZmYmBgAfve735Gens6OHTsCOSLge7/y8vLweDyA76S9/Px8vzVpsLy3M2bMYNeuXcyePZuoKP8ff7Pf34Z8Vg/tZ/Z7eqzPKpj/fjYWHUMaX6gdQ0Lh+AE6hpyMiAhF5eXllJSUAGAYBqtWraJz58519rvkkktYvHgxXq+XgoIC3n//fYYPHx7ocXnrrbcYNGgQLVq08Pt4Xl5e9X//8MMP7N27lw4dOgRqvGotW7akc+fOrFixAoAVK1bQuXNnv1dkBMN7O2vWLLZu3cq//vUvbDZbvfuZ+f429LMKwfGeHuuzCsHzeT0ZOoY0jVA6hoTC8QN0DDlpATmd22S7d+82Ro8ebYwcOdK47LLLjDvvvNPIy8szDMMwpkyZYmzZssUwDMNwu93Gww8/bAwZMsQYMmSI8frrr5sy77Bhw4yPPvqo1raac95///3GiBEjjMsvv9wYN26c8eGHHzb5TI899pgxYMAAo3Pnzka/fv2Myy67zDAMw/j555+N8ePHG8OGDTPGjx9v/PLLL35nDuR762/W7du3G506dTKGDRtmjBo1yhg1apRx++23+501UO+vvzmP9lk9cs5Avaf1/dsbhv/P6pFzmvF5bWw6hpy8UDmGhMrxo75ZdQw5ObrNh4iIiAgR8vWZiIiIyLEoFImIiIigUCQiIiICKBSJiIiIAApFIiIiIoBCkYiIiAigUCQiIiICKBSJiIiIAApFEkJ2795Nnz59+P777wHf0u99+/Zl48aNJk8mIqFAxxA5FoUiCRlt27blvvvu47777qOiooI///nPjBs3jr59+5o9moiEAB1D5Fh0mw8JObfddht79+4FYMmSJUe9OaOIyJF0DJH6qCmSkHPVVVexfft2Jk6cqIOZiBw3HUOkPmqKJKSUlZUxevRo+vbty/r161m+fDmJiYlmjyUiIULHEDkaNUUSUh5//HHOPvtsHn/8cS688EIeeeQRs0cSkRCiY4gcjUKRhIz333+fDRs28OijjwLwwAMPsG3bNpYtW2byZCISCnQMkWPR12ciIiIiqCkSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERARSKRERERACFIhERERFAoUhEREQEUCgSERERAeD/B1fIiNOPzWYIAAAAAElFTkSuQmCC\n"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482811_576440533",
      "id": "20180117-220708_660528060",
      "dateCreated": "2020-02-05 14:34:42.811",
      "dateStarted": "2021-07-26 03:16:10.808",
      "dateFinished": "2021-07-26 03:16:12.680",
      "status": "FINISHED"
    },
    {
      "title": "Plotnine",
      "text": "%md\n\n# Plotnine\n\nplotnine is an implementation of a grammar of graphics in Python, it is based on ggplot2. The grammar allows users to compose plots by explicitly mapping data to the visual objects that make up the plot.\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:12.709",
      "progress": 0,
      "config": {
        "colWidth": 12.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "text",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/text",
        "title": false,
        "editorHide": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ePlotnine\u003c/h1\u003e\n\u003cp\u003eplotnine is an implementation of a grammar of graphics in Python, it is based on ggplot2. The grammar allows users to compose plots by explicitly mapping data to the visual objects that make up the plot.\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885213779_377546255",
      "id": "paragraph_1580885213779_377546255",
      "dateCreated": "2020-02-05 14:46:53.782",
      "dateStarted": "2021-07-26 03:16:12.740",
      "dateFinished": "2021-07-26 03:16:12.750",
      "status": "FINISHED"
    },
    {
      "title": "Plotnine Example (1)",
      "text": "%python.ipython\n\n%matplotlib inline  \n\nfrom plotnine import *\nfrom plotnine.data import mtcars\n\n(ggplot(mtcars, aes(\u0027wt\u0027, \u0027mpg\u0027))\n + geom_point())\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:12.840",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python",
        "title": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "IMG",
            "data": "iVBORw0KGgoAAAANSUhEUgAAAi8AAAG0CAYAAAD6ncdZAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2v0lEQVR4nO3deXxUhf39/3NnDQkJBENIEAOKIEtRgVIW2Vw+LB8lgAtaBLVWi3xqW/ptayUVBQS1SC2URcCqUAXUVoqVqrUFy9qCoiIKFBARWkIhNGlWklnu7w9+TDsGNA4zuXPvvJ6Ph3/cm8vNie9JcnK3MUzTNAUAAGATLqsDAAAAfBmUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCseqwNI0vz58/XOO++opqZGmZmZGjJkiMaMGSNJuuuuu1RWViaX61TPatmypRYsWGBlXAAAYKGkKC+FhYW6++675ff7dfz4cU2dOlWtW7dW//79JUmTJ09Wz549LU4JAACSQVKUl4KCgqhlwzB05MgRi9IAAIBklhTlRZKWLVumNWvWqLa2Vrm5ubryyisjH5szZ45M01RBQYHGjRunLl26WJgUAABYyTBN07Q6xGmmaWr//v3aunWrrr/+eqWnp2vXrl1q3769JGnt2rVatmyZ5s2bp9zc3Mi/Ky4uVnFxcWTZ7/erdevWcc/n9XoVCATivt9kYRiG/H6/amtrlUQvi4Rgls7h9FlKqTNPZuksscwzOzu7QdslVXk57YUXXlBVVZW++c1v1vvY5MmTNXDgQA0fPjyyburUqZo2bVpkuaioSDNnzmyUrAAAoHElzWmj/xYOh6OOpPw3l8tVr61OmDBBhYWFkWW/36/S0tK458rIyFBVVVXc95ss3G63srKyVF5erlAoZHWchGKWzuH0WUqpM09m6SyxzLOhR14sLy9VVVXatm2bevfurbS0NO3Zs0evv/66br75Zh0/flzHjh1Tx44dJUnr1q3Tvn37dO+990btIz8/X/n5+ZHlkpKShLwoTNN0/ItNkkKhkOO/TmbpHKkyS8n582SWzpLIeVpeXgzD0Nq1a7VkyRKFw2G1aNFCo0aN0rXXXqvDhw9ryZIlKi4ulsfj0QUXXKApU6ZEFRUAAJBaLC8v6enpmjFjxhk/VlBQoLlz5zZyIgAAkMx4ewAAAGArlBcAAGArlBcAAGArlBcAAGArlBcAAGArlBcAAGArlBcAAGArlBcAAGArlBcb+/Wvf63BgwerV69eKioqUk1NjdWRAABIOMufsIvYrFy5UpMmTVI4HJYkLV26VAcPHtTy5ctlGIbF6QAASByOvNjUE088ESkukhQIBPTHP/5Rn3zyiYWpAABIPMqLTVVWVn6p9QAAOAXlxaauuOIKeb3eyLJhGGrWrJnat29vYSoAABKP8mJTjz/+uDp37izpVHFp2rSpnn/+eWVkZFicDACAxOKCXZvKzs7WH/7wB+3cuVPV1dXq2rWrmjdvbnUsAAASjvJiYx6PR927d7c6BgAAjYrTRgAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFZ4V2kkXHV1tdatW6fy8nL16NFDnTp1sjoSAMDGKC9IqBMnTui6667TwYMH5Xa7FQgE9LOf/Uzjxo2zOhoAwKYM0zRNq0PEW3l5ufx+f9z36/F4FAwG477fZGEYhnw+n+rq6hSvl8U3vvEN/eY3v1EgEIisc7lc2rNnjwoKCuLyOWLBLJ3D6bOUUmeezNJZYplnQ393O/LIS11dnerq6uK+38zMTFVUVMR9v8nC7XbL5/OpqqpKoVAoLvvctm1bVHGRTn3zbt++XdnZ2XH5HLFgls7h9FlKqTNPZuksscyzoeWFC3aRUK1atZJhGFHrQqGQWrZsaVEiAIDdUV6QUA888IDcbrdcrlMvNa/Xq+HDh+vSSy+1OBkAwK4cedoIyaNXr156/fXX9eSTT6q0tFT9+vXTt7/97XpHYwAAaCjKCxLu8ssv1+LFi62OAQBwCE4bAQAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8AAAAW6G8NIBpmlq6dKmuuOIKXX311XryyScVDofPun1NTY0efPBBDRo0SCNGjNAf//jHRkwLAICzeawOYAe/+MUv9OijjyoUCkmSdu3apWPHjumhhx6qt204HNb48eO1ZcsWBQIBSdLWrVv13HPPaejQoY2aGwAAJ+LIyxcwTVOzZ8+OFBdJCgaDWrhwoerq6upt/9FHH2n9+vWR4nJ6H7NmzWqUvAAAOF1SHHmZP3++3nnnHdXU1CgzM1NDhgzRmDFjJEmffvqp5s2bp4MHDyovL08TJ05U165dGy1bMBhUbW1tvfXhcFhVVVXy+XxR6//973/LMAyZphm1vqysLJExAQBIGUlx5KWwsFCLFy/Wiy++qEcffVTr16/Xpk2bFAwGNWPGDPXt21crV67UDTfcoJkzZ6qysrLRsnm9XnXu3FlutzuyzuVyqU2bNmrevHm97Tt16lSv0Hi9XvXp0yfRUQEASAlJUV4KCgrk9/sjy4Zh6MiRI9q5c6dqa2s1evRoeb1eXXnllWrVqpW2bNnSqPmeeeYZtWzZUi6XSy6XS9nZ2XruuedkGEa9bXNycvT000/L5/PJ7XbLMAx17txZjzzySKNmBgDAqZLitJEkLVu2TGvWrFFtba1yc3N15ZVXasuWLWrbtq1crv90rAsvvFCHDh1q1Gzt27fXX/7yF3300UeqqqpSz5491axZs7NuP3ToUG3fvl0ffPCBmjZtql69esnr9TZiYgAAnCtpysvtt9+u2267Tfv379fWrVuVkZGhmpoaZWRkRG2XkZGh6urqRs/XtGlTXXPNNaqoqGjQ9nl5ecrLy0twKgAAUk/SlBfp1OmiDh06aPv27Vq5cqVycnLqFZXq6mo1adIkal1xcbGKi4sjy36/X61bt05Ivv++9sVpTn9tTv4aT2OWzuH0WUqpM09m6SyJnGdSlZfTwuGwiouL1aNHD61atUrhcDhy6uiTTz7RsGHDorZfvHixpk2bFlkuKirSzJkzE5LtsxfjOlFWVpbVERoFs3SOVJillBrzZJbOkqh5Wl5eqqqqtG3bNvXu3VtpaWnas2ePXn/9dd18883q1q2bvF6vVq9erREjRmjLli06evSo+vbtG7WPCRMmqLCwMLLs9/tVWloa96wZGRmqqqqK+36ThdvtVlZWlsrLy6Oea+NEzNI5nD5LKXXmySydJZZ5ZmdnN2g7y8uLYRhau3atlixZonA4rBYtWmjUqFG69tprZRiGHnjgAc2fP18rVqxQq1atVFRUpMzMzKh95OfnKz8/P7JcUlKSkBeFaZqOf7FJUigUcvzXySydI1VmKTl/nszSWRI5T8vLS3p6umbMmHHWj7dr106zZ89uxEQAACCZJcVzXgAAABqK8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGzFY3UANJ4///nP2rFjh8477zyNGjVKTZs2tToSAABfmmGapml1iHgrLy+X3++P+349Ho+CwWDc99sYioqKNGfOHPl8PoXDYRUUFGjDhg1q0aJFZBvDMOTz+VRXVycHviyi2HmWDcEsnSVV5sksnSWWeTb0d7cjy0tJSUlC9puZmamKioqE7DuR3nvvPQ0dOjTqG8Xr9Wr8+PH66U9/GlnndruVnZ2t0tJShUIhK6I2GrvOsqGYpbOkyjyZpbPEMs+cnJwGbcc1Lylg79698vl8UesCgYA++ugjixIBABA7yksKaN26tQKBQNQ6j8ejgoICixIBABA7yksK6N+/v4YMGSKv1yvp1Cmj9PR0/fjHP7Y4GQAAXx53G6UAwzD07LPP6plnntGOHTuUk5Oju+++W23atLE6GgAAXxrlJUV4PB5961vfsjoGAADnjNNGAADAVigvAADAVigvAADAVigvAADAVigvAADAVigvAADAVigvAADAVigvAADAVigvAADAVigvAADAVigvAADAVigviIs333xTAwYMUJcuXTR27FgdPXrU6kgAAIeivOCcbdy4UePHj9eePXt0/PhxvfXWW7r22mtVWVlpdTQAgANRXnDOlixZItM0I8vBYFBHjhzRhg0bLEwFAHAqygvOWWVlZVR5kSSXy6Xq6mqLEgEAnIzygnN29dVXy+PxRK0zTVNf/epXLUoEAHAyygvO2cSJE3X99ddHlv1+v5566im1a9fOulAAAMfyfPEmwOdzu91asGCB7rvvPp04cUIXXXSRmjdvbnUsAIBDUV4QN23btlXbtm2tjgEAcDhOGwEAAFuhvAAAAFuhvAAAAFuhvAAAAFux/ILdQCCgRYsWaceOHaqoqFBOTo5uuukmDR48WJJ01113qaysTC7XqZ7VsmVLLViwwMLEAADASpaXl1AopBYtWmjGjBnKzc3Vnj17NH36dOXl5alTp06SpMmTJ6tnz54WJwUAAMnA8tNGaWlpuvXWW5WXlyeXy6UuXbqoc+fO2r17t9XRAABAErL8yMtnnTx5Uvv379eIESMi6+bMmSPTNFVQUKBx48apS5cuFiYEAABWSqryYpqm5s6dqw4dOqh79+6SpP/3//6f2rdvL0lau3atpk2bpnnz5ik3Nzfy74qLi1VcXBxZ9vv9at26ddzzGYYht9sd9/0mi9Nfm5O/xtOYpXM4fZZS6syTWTpLIudpmJ99O2CLmKaphQsX6tNPP9X06dOVlpZ2xu0mT56sgQMHavjw4ZF1U6dO1bRp0yLLRUVFmjlzZsIzAwCAxpcUR15M09SiRYt04MABPfzww2ctLpLkcrn02b41YcIEFRYWRpb9fr9KS0vjnjMjI0NVVVVx32+ycLvdysrKUnl5uUKhkNVxEopZOofTZymlzjyZpbPEMs/s7OwGbZcU5WXx4sX629/+phkzZig9PT2y/vjx4zp27Jg6duwoSVq3bp327dune++9N+rf5+fnKz8/P7JcUlKSkBeFaZqOf7FJp+4Ac/rXySydI1VmKTl/nszSWRI5T8vLy7Fjx/Taa6/J6/XqzjvvjKy/8cYb1adPHy1ZskTFxcXyeDy64IILNGXKlKiiAgAAUovl5SU3N1e/+93vzvrxuXPnNmIaAACQ7Cx/zgsAe3H6oW4AyY/yAqBBXnrpJXXo0EF5eXnq1auX3n//fasjAUhRlBcAX2jt2rW69957VVZWJkk6dOiQRo8eHfV8JQBoLJQXAF/opZdeiloOh8Oqq6vTn/70J4sSAUhllBcAXygUCtV7vpJhGPXWAUBjoLwA+EIjRoyQy1X/x8XAgQMtSAMg1VFeAHyhkSNHaurUqfJ4Tj1doXnz5lqxYoXatWtnbTAAKcny57wAsIeJEyfqm9/8psrKypSTk3PGIzEA0BgoLwAazOfzRb2jOwBYgT+dAACArVBeAACArVBeAACArVBeAACArVBeAACArVBeAACArVBeAACArVBeAACArVBeAACArVBeAACArVBeAACArVBeAACArcRUXlwul9xu9xn/83g8Ou+883T11Vfr1VdfjXdeAACQ4mJ6V+lHHnlECxculM/n03XXXafc3Fz985//1KuvvqpgMKhx48Zpw4YNGjVqlJYvX65bbrkl3rkBAECKiqm8lJaWqmfPnnr55Zflcv3n4M3Pf/5zXX/99QoEAtq0aZNuueUW/fSnP6W8ICamaer48eMKBoPKy8uLeq0h8YLBoIqLi5WZmanmzZtbHQcAImL6bbB06VJNmDCh3i8Tl8ule+65R8uWLZMkjR07Vnv27Dn3lEg55eXluuGGG9S1a1dddtllGjRokP7+979bHStl7NixQ5dddpl69OihDh06aNKkSQoGg1bHAgBJMZaXmpoaHTp06Iwf+/TTT3Xy5ElJUtOmTeXz+WJPh5T1ve99T3/9618jy/v379fYsWNlmqaFqVLDv//9b910000qKSmJrHvppZf085//3MJUAPAfMZWXwsJC3X///VqxYoUqKiokSRUVFXr++ed1//33a9SoUZKkDz74QBdffHHcwiJ1vPnmmwoEApHlYDCo3bt365///KeFqVLDjh07VFZWpnA4HFkXCAS4AB9A0ojpmpeFCxfqjjvu0Lhx42QYhrxerwKBgEzT1OjRozV//nxJUkFBgR599NG4BkZq8Hg8qqurq7fe6/VakCa1eDxn/rHA/3sAySKm8pKVlaVVq1Zp9+7d2rZtm44ePar8/Hz16tVLnTt3jmx3/fXXxy0oUsu4ceP07LPPRo6+eL1e9e/fX+edd57FyZyvR48eateunQ4fPhy5zsXlcumOO+6wNhgA/P9iKi+nde7cOaqsAPEydepUGYah559/XqFQSEOHDuWai0aSlpam1atXa8KECXr33XeVnp6uH/zgBxo3bpzV0QBAkmSYMV4BGQgEtGzZMv31r39VcXGx8vPz1adPH912222WX6T73xcaxlNmZmbkGh8ncrvdys7OVmlpqUKhkNVxEopZOofTZymlzjyZpbPEMs+cnJwGbRdTedm7d6+GDRumQ4cO6Stf+Ypyc3N17Ngxffjhh7rgggv0xhtv6JJLLvmyu42b8vJy+f3+uO/X4/E4+nZRwzDk8/lUV1fn+Lt6mKVzOH2WUurMk1k6SyzzbOjv7phOG02YMEE+n0979uyJupto3759Kiws1MSJE7Vu3bpYdh0XdXV1Z7zY81w5/a8Ct9stn8+nqqoq/iKwOWbpLKkyT2bpLLHMs6HlJaZbpbdu3aqZM2fWuw26Q4cOmj59etTzOQAAAOIppvLSunVrGYZx5h26XMrLyzunUAAAAGcTU3l56KGHNGXKFB04cCBq/ccff6wHH3xQDz30UFzCAQAAfFZM17y89NJLKisr0yWXXFLvgt1WrVrp5Zdf1ssvvyzp1MVJr7zySlxDAwCA1BVTeamsrFTHjh3VsWNHSacukG3evLn69+8vSY6/4AoAAFgnpvLy1ltvxTsHAABAg8T8hN3Dhw9r9erVOnz4cORdpE8zDENz584953AAAACfFfM1L+PGjZNpmsrNza33RF3KCwAASJSYyktRUZFGjx6tJUuWqFmzZvHOBAAAcFYxlZfjx4/rW9/6FsUFSe/NN9/UX//6V2VmZurmm29W69atrY4EADhHMT3nZfjw4TxFF0lv1qxZGjdunBYtWqTZs2drwIAB2r9/v9WxVFZWpn/+85+2f1+TyspKFRcXO/4R5wCST0xHXp588kndcsstqq6u1tVXX63mzZvX26ZHjx7nmg2I2cGDB/X4449LOvUO6JIUCoV0//336ze/+Y0lmaqqqnTPPffojTfekCRdcsklWrFihQoKCizJE6twOKyf/OQnevrppyPXvS1fvlyXX3651dEApIiYykt5ebkqKyv16KOP6rHHHov6mGmaMgyDv8ZgqUOHDskwjKijG6FQqN5ToRvTfffdp7Vr10aWP/74Y918883atGmT3G63Zbm+rPnz52vp0qWR/7clJSW68cYb9fbbbys7O9vidABSQUzlZfz48Tp8+LDmzZunjh071rvbCLBaQUFBvdMybrdbF110kUWJpNdffz1yFEiSgsGg9u/fr8OHD6tdu3aW5fqyXnnllai3uQ+Hw6qsrNT27dt1zTXXWJgMQKqIqby88847WrFihUaNGhXnOEB8tGvXTt///vc1d+5cud1uGYYhn8+nRx55xLJMZzu64vHE/LglS3i93nrrTNO03dcBwL5i+mlz8cUXc1oISa+oqEjdu3fX1q1b1bRpU91yyy1q06aNZXnGjRunxYsXR46+eL1e9ejRQ+eff75lmWJx22236b333lM4HJZ0qny1atVKvXr1sjgZgFQRU3mZPXu27r//fnXr1i3y/kZAMho+fLiGDx9+zvt577339OGHH6ply5a6+uqrz3j04Yv85Cc/UTAY1K9+9SsFAgENHjxYCxYskGEYZ9y+pKRE69evVzAY1BVXXGFp8fpvX//611VRUaHHH39clZWVuvTSS7V48WJlZGRYHQ1AijDMGO7X7Natm4qLi1VWVqbWrVvXu9vIMAzt2LEjXhm/tJKSkoTsNzMz09FvOul2u5Wdna3S0lLHH1n7MrOcPXu2Zs2aJZ/Pp2AwqMsuu0y//e1vlZ6eHtPnPv0td7bSIkm7du3SyJEjVVVVJcMw5HK5tHLlysibn36Rxprl6Qv0reT070spdb43maWzxDLPnJycBm0X05GXnj17Wv4DC2gM77//vmbNmiXTNFVbWytJ2rlzp37+85/rJz/5SUz7bMj3zoQJE1RRURH54WYYhr7xjW9oz549SXVnEj8HAFghpvKydOnSOMcAktOHH34on88XKS7SqefGvPvuuwn7nKZpau/evZFrSk6vO/1wO54SDCDVxfSEXSBVtGzZMuq2YOnUYd/8/PyEfU7DMM741hsul+uMD4QEgFRDeQE+x1VXXaXu3btHLtB1u93y+XyaNGlSQj/vtGnTok7JuFwu/ehHP4r5OhsAcBIezAB8Dq/Xq1WrVmnOnDnavn27Wrdure9973tq3759Qj/v17/+dbVo0UIrV65UIBDQiBEjdPPNNyf0cwKAXVBegC/QpEkTTZ48udE/79ChQzV06NBG/7wAkOw4bQQAAGyF8gIAAGyF8gIAAGyF8gIAAGzF8gt2A4GAFi1apB07dqiiokI5OTm66aabNHjwYEnSp59+qnnz5ungwYPKy8vTxIkT1bVrV2tDAwAAy1h+5CUUCqlFixaaMWOGVq5cqW9/+9tatGiR9uzZo2AwqBkzZqhv375auXKlbrjhBs2cOVOVlZVWxwYAABaxvLykpaXp1ltvVV5enlwul7p06aLOnTtr9+7d2rlzp2prazV69Gh5vV5deeWVatWqlbZs2WJ1bAAAYBHLy8tnnTx5Uvv371fbtm116NAhtW3bVi7Xf2JeeOGFOnTokIUJAQCAlZKqvJimqblz56pDhw7q3r27ampqlJGREbVNRkaGampqLEoIAACsZvkFu6eZpqmFCxfqxIkTmj59ugzDUJMmTVRdXR21XXV1tZo0aRK1rri4WMXFxZFlv9+fkHfeNQxDbrc77vtNFqe/Nid/jacxS+dw+iyl1Jkns3SWRM4zKcqLaZpatGiRDhw4oIcfflhpaWmSpIKCAq1atUrhcDhy6uiTTz7RsGHDov794sWLNW3atMhyUVGRZs6cmZCsPp8vIftNJllZWVZHaBTM0jlSYZZSasyTWTpLouaZFOVl8eLF+tvf/qYZM2ZEvWtut27d5PV6tXr1ao0YMUJbtmzR0aNH1bdv36h/P2HCBBUWFkaW/X6/SktL454zIyNDVVVVcd9vsnC73crKylJ5eblCoZDVcRKqsWcZDof1i1/8Qi+//LLcbrduv/123XHHHVHvHB1PzNJZUmWezNJZYplndnZ2g7azvLwcO3ZMr732mrxer+68887I+htvvFFjxozRAw88oPnz52vFihVq1aqVioqKlJmZGbWP/Px85efnR5ZLSkoS8qIwTdPxLzbp1O3rTv86G3uWRUVFevbZZxUMBiVJ9913n8rKyvTd7343oZ+XWTqL0+fJLJ0lkfM0TNM0E7JnC5WUlCRkv5mZmaqoqEjIvpOB2+1Wdna2SktLHf9N1ZizrKmpUdu2bfXZb7X09HQdPHgwIUdfmKWzpMo8maWzxDLPnJycBm2XVHcbAU5UWVlZr7hIpx4LEA6HLUgEAPZGeQESLCcnR+eff37U84o8Ho+6deuWEnccAEC8UV6ABDMMQ88//7yys7PlcrlkGIZatWqlX/7yl1ZHAwBbsvyCXSAVfOUrX9G2bdv03nvvyeVyqUePHvUewAgAaBjKC9BIsrKyNGjQIKtj2MrOnTv17LPPqry8XAMGDNBtt92WsNvL48k0Ta1atUpvvvmm/H6/xo4dqz59+lgdC3AMyguApPT222+rsLAwcrvl73//e33wwQf62c9+ZnW0LzR79mzNnj078oDNF198Uc8995yGDBlidTTAEbjmBUBSevDBBxUOhyO3kwaDQf3qV7/Sxx9/bHGyz1dWVqbHH388cidZOBxWOBzW5MmTLU4GOAflBUBSKi4urncruWEYOnr0qEWJGub48eNnvDX++PHjFqQBnInyAiApdenSRR5P9JltwzDUvn17ixI1zPnnnx95f7bT3G63OnToYFEiwHkoLwCS0qxZs5STkyOfz6e0tDQZhqHHH39ceXl5Vkf7XOnp6XryySfldrvl9/vl8/nUtGlTzZ8/3+pogGNwwS6ApNSmTRtt3LhRr732miorK9W7d29ddtllVsdqkOuuu07r16/Xxo0b5ff7NWTIELVq1crqWIBjUF4AJK2TJ0+qrKxMlZWVKi8vtzrOl3LJJZfokksusToG4EiUFwBJ6eOPP9awYcNUXV0twzA0e/ZsPfjgg7r33nutjgbAYlzzAiAp/fjHP1ZlZaXq6upUW1sr0zQ1ffp0/eMf/7A6GgCLUV4AJKV9+/YpGAzWW3/w4MHGDwMgqVBeACSlgoKCeu+6bZqmzj//fIsSAUgWlBcASemRRx6Rz+eT1+uV2+2Wy+XSd77zHbVr187qaAAsxgW7AJJSt27d9NZbb2nFihWqrKxU3759NXLkSKtjAUgClBcASat9+/aaMmWK1TEAJBlOGwEAAFuhvABIetu3b9eAAQPUtm1bDRgwQG+//bbVkQBYiPICIKl9/PHHGjVqlPbu3avq6mrt3btXo0eP1v79+62OBsAilBcASW3VqlUKh8MKh8OSpHA4LNM09Zvf/MbiZACsQnkBkNROnjwp0zSj1pmmqbq6OosSAbAa5QVA0tq1a5f27dunQCAQtT4YDGrw4MHWhAJgOW6VBpCUtm/frsLCQoVCoaj1LpdLM2fO1MCBAy1KBsBqlBcASWnKlCkKBoORa11Oe/PNN3XZZZdZlApAMuC0EYCkdOTIkXrFxTAMVVZWWpQIQLKgvABISp06dZLHE31w2DAMXXTRRRYlApAsKC8AktKsWbOUnZ0tn8+ntLQ0GYahxx57TPn5+VZHA2AxrnkBkJQKCgq0adMm/f73v1dlZaV69+6tHj16WB0LQBKgvABIWi1atND48eMtzWCapt544w3t2rVLubm5uuGGG5Senm5pJiDVGeZnn/7kAOXl5fL7/XHfr8fjUTAYjPt+k4VhGPL5fKqrq6v3UDCnYZbOkchZmqape+65R88//7w8Ho9M09SFF16oDRs2qFmzZgn5nGeSKvN0+vellDqzlGKbZ0N/dzvyyEtdXV1Cnr6ZmZmpioqKuO83Wbjdbvl8PlVVVdV7tobTMEvnSOQs169fr+eee07hcDjy//HAgQOaMWOGHnzwwYR8zjNJlXk6/ftSSp1ZSrHNs6HlhQt2AeAs9u/fL5/PF7UuEAhoz549FiUCIFFeAOCs2rRpU++tCbxer9q2bWtRIgAS5QUAzuqaa67RgAED5PV6ZRiGvF6vmjdvrkmTJlkdDUhpjrzmBQDiwe12a+XKlXr22WcjdxvdddddatmypdXRgJRGeQGAz+HxeHT33XdbHQPAf+G0EQAAsBXKCwAAsBXKCwAAsBXKCwAAsBXKCwAAsBXuNgIAmzJNU6tWrdKGDRuUkZGhW2+9VV27drU6FpBwlBcAsKmHH35YCxcuVDgcltvt1tKlS/Xb3/5WvXv3tjoakFCcNgIAGzpy5IjmzZunUCgk0zQVDAYVDAZVVFRkdTQg4SgvAGBDR44cqbfONM0zrgechvICADbUrl07ud3uqHVut1sdOnSwKBHQeCgvAGBDOTk5evzxx2UYhvx+v3w+nzIzM/XEE09YHQ1IOC7YBQCbGj9+vLp27arNmzcrPT1dI0aMUG5urtWxgISjvACAjfXo0UM9evSwOgbQqDhtBOALBQIB1dbWWh0DACRRXgB8jpqaGt1zzz1q06aN2rRpo9GjR+vEiRNWxwKQ4igvAM7qvvvu0+9+9zuFw2FJ0tatWzV+/HiZpmlxMgCpjPIC4KxWr16tQCAQWQ4EAnr77bdVUlJiYSoAqY7yAgAAbIXyAuCsRo4cKa/XG1n2er366le/qpycHAtTRdu/f7+++c1vasiQIZo0aRLX5AApgFulAZzVrFmzVFtbq1deeUWmaeqrX/2qnn76aRmGYXU0SdKhQ4c0ePBgVVdXKxQK6cMPP9TGjRv15z//WZmZmVbHA5AgHHkBcFbp6el66qmndPjwYR06dEi/+93v1LJlS6tjRTz99NM6efKkQqGQpFPX5Bw9elSrV6+2NhiAhOLIC4Av5Pf7rY5wRv/617+iLiiWJMMw9K9//cuiRAAaA+UFQFIyTVN//OMftWfPHrVq1UojR45UWlpa1DaXX365Xn755Xp3RHXv3j3h+U6fTisuLlanTp00ZMiQpDmdBjid5eVlzZo1WrdunQ4ePKi+ffvqRz/6UeRjd911l8rKyuRynTq71bJlSy1YsMCqqAAaiWma+sEPfqDly5fL6/UqHA7rySef1Jo1a9S0adPIdnfccYe2bt2q1atXy+v1qq6uTt/97nc1cODAhOarrq5WYWGhdu3aJbfbrUAgoJtuukm/+MUvKDBAI7C8vLRo0UJjxozR+++/r4qKinofnzx5snr27GlBMgBW2bBhg5YvX65wOBx5W4K9e/dq3rx5mjx5cmQ7t9utFStW6E9/+pOKi4vVvn17XXrppQnP9+STT2rXrl0KBAKRoz4vvfSSRo4cqWuuuSbhnx9IdZaXl379+kmSDhw4cMbyAiD17N27Vz6fTydPnoysCwQC2rVrV71tDcNQnz59zriP5cuXq7KyUv3799eoUaPidlRk9+7d9a618fl82rt3L+UFaASWl5cvMmfOHJmmqYKCAo0bN05dunSxOhKABMvPz1cwGIxa5/F4dMEFFzTo37///vu67rrrFAqFFA6HtXz5cu3cuVMPPvhgXPK1adNGXq83qsAEg0Hl5+fHZf8APp9hJsmblKxYsUL/+Mc/oq552bVrl9q3by9JWrt2rZYtW6Z58+YpNzc36t8WFxeruLg4suz3+9W6deu4Z8zIyFBVVVXc95ss3G63srKyVF5eHrn11KmYZXILBoMaNWqU3n77bQUCAXm9XmVlZWnjxo3Ky8uL2vZMsxw6dKi2b98eeU+m095//30VFBScc75jx45p4MCBKi0tjeS7/PLLtWbNmqiH+sWL3efZUE7/vpRSZ5ZSbPPMzs5u0HZJfeTlv4+y/O///q82btyo7du3a/jw4VHbLV68WNOmTYssFxUVaebMmQnJ5PP5ErLfZJKVlWV1hEbBLJPbW2+9pblz52rHjh06//zz9f3vf79ecTnts7P8xz/+Ua+4SFJ5eXmDfzh+nuzsbO3cuVNPPPGE/v73v6tbt2763ve+V+9uqHiz8zwbKhW+L6XUmKWUuHkmdXn5LJfLdcZ3s50wYYIKCwsjy36/X6WlpXH//E7/q4C/CJzDKbO86667opbP9H19pllefPHFOnbsWNSpJ5fLpfPOOy9uPxu8Xq9+/OMfR5ZrampUU1MTl31/llPm+UWc/n0pJfcsjx49qvfee08ZGRnq3bv3OT/fydFHXkKhUOS8dDgcVl1dnVwul0pLS3Xs2DF17NhRkrRu3Trt27dP9957b7195OfnR51rLikpSciLwjTNpHuxJcLpmTgZs3SOM81y1qxZGjZsmKqrq2UYhurq6vTwww8rNzfX1v8/nD7PVPm+lJJvlmvXrtUdd9yhYDCocDisiy++WK+88so5vY9ZIudpeXl58cUX9cILL0SWN2/erKuuukrXX3+9lixZouLi4siFelOmTOGCOABfqH379tq0aZNWr16tqqoq9e3bV3379rU6FpCUysvLdeedd0bd3ffJJ5/ohz/8oZYuXWpdsM+RNBfsxlNJSUlC9puZmeno27ndbreys7NVWlqaVH8RJAKzdA6nz1JKnXkyS2u8++67Gjp0aL31ubm5+uijj2LebyzzbOiRHt6YEQCAFNasWbMzrm/evHnjBvkSKC8AAKSwiy66SNdee23Ubf6GYURdkJ5sLL/mBQASYf/+/Vq+fLmqqqrUr18/jRw5kvcdAs7AMAwtWbJEs2fP1p/+9Cc1bdpU//d//6dhw4ZZHe2sKC8AHGfHjh1RT9hdtmyZPvzwQz3wwANWRwOSks/nU1FRkYqKiqyO0iCcNgLgOJMnT1ZdXZ0CgUCkwMydO1eHDx+2OhqAOKC8AHCcw4cPn/EJu3//+98tSAMg3igvABzn4osvlscTfVbcMAxdeOGFFiUCEE+UFwCOM3v2bDVt2lQ+n09+v1+GYWj69OlnfW8kAPbCBbsAHKd9+/bauHFj5Am7ffr00RVXXGF1LABxQnkB4Eh5eXm65557rI4BIAE4bQQAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyF8gIAAGyFW6UBIM7C4bDee+89nThxQp07d9YFF1xgdSTAUSgvABBHtbW1Gj9+vN566y253W5J0hNPPKGxY8danAxwDk4bAUAczZkzR5s2bZIkhUIhhUIhff/739e+ffssTgY4B+UFAOJo8+bNCgQCUes8Ho/ef/99awIBDkR5AYA4atGihQzDiFoXCoXUrFkzixIBzkN5AYA4+s53viOXyxUpMF6vVx07dtSgQYMsTgY4B+UFAOKoZ8+eeuWVV9S/f3916tRJY8aM0auvviq/3291NMAxuNsIAOKsd+/eWrVqldUxAMfiyAsAALAVygsAALAVygsAALAVygsAALAVygsAALAVygsAALAVygsAALAVwzRN0+oQ8VZeXp6QB0J5PB4Fg8G47zdZGIYhn8+nuro6OfBlEYVZOofTZymlzjyZpbPEMs+G/u525EPq6urqVFdXF/f9ZmZmqqKiIu77TRZut1s+n09VVVUKhUJWx0koZukcTp+llDrzZJbOEss8G1peOG0EAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAIAD1dbW6qGHHlLv3r01cOBAPf/88zJNM+b9BYNBPfbYY+rTp4/69++vp5566pz2dy48lnxWAACQUBMnTtQbb7yhQCAgSfrBD36gQCCgb3zjGzHt77777tMLL7wQ2d+UKVNUVVWlSZMmxStyg3HkBQAAhykuLtarr74aKRqSFA6H9cQTT8S0v8rKSj333HNR+wuFQpo7d+45Z42F5Ude1qxZo3Xr1ungwYPq27evfvSjH0U+9umnn2revHk6ePCg8vLyNHHiRHXt2tXCtAAAJL+Kioozrq+qqoppf5WVlWdcX1NTI9M0ZRhGTPuNleVHXlq0aKExY8ZoyJAhUeuDwaBmzJihvn37auXKlbrhhhs0c+bMs/4PBAAAp7Rt21YtWrSIKhVer1d9+vSJaX+5ubk6//zz5Xa7I+s8Ho969uzZ6MVFSoLy0q9fP/Xp00dZWVlR63fu3Kna2lqNHj1aXq9XV155pVq1aqUtW7ZYlBQAAHvw+/1asWKFsrKyIuXi4osvjvk0j8vl0ooVK6IKUUFBgZYsWRK3zF+G5aeNzubQoUNq27atXK7/9KsLL7xQhw4dsjAVAAD20LNnT7377rv68MMP5ff7demll8rr9ca8vy5dumjbtm3auXOnPB6PLr30Uvn9/jgmbrikLS81NTXKyMiIWpeRkaHq6mqLEgEAYC9ZWVnq169f3PbXtGlT9e3bN277i1XSlpcmTZrUKyrV1dVq0qRJvW2Li4tVXFwcWfb7/WrdunXcMxmGEXW+z2lOf21O/hpPY5bO4fRZSqkzT2bpLImcZ9KWl4KCAq1atUrhcDhy6uiTTz7RsGHD6m27ePFiTZs2LbJcVFSkmTNnJiSXz+dLyH6TyWevP3IqZukcqTBLKTXmySydJVHztLy8hEIhhUIhhcNhhcNh1dXVyeVyqVu3bvJ6vVq9erVGjBihLVu26OjRo2c8XDVhwgQVFhZGlv1+v0pLS+OeNSMjI+bbzOzA7XYrKytL5eXlCoVCVsdJKGbpHE6fpZQ682SWzhLLPLOzsxu0neXl5cUXX9QLL7wQWd68ebOuuuoqTZo0SQ888IDmz5+vFStWqFWrVioqKlJmZma9feTn5ys/Pz+yXFJSkpAXhWmajn+xSf8plE7GLJ0jVWYpOX+ezNJZEjlPy8vL2LFjNXbs2DN+rF27dpo9e3YjJwIAAMnM8ue8AAAAfBmUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuUFwAAYCuGaZqm1SGQHIqLi7V48WJNmDAh6qF/sB9m6SzM0zmYZXxw5AURxcXFmjZtWtSbXMKemKWzME/nYJbxQXkBAAC2QnkBAAC2QnlBRH5+vh566CHOwzoAs3QW5ukczDI+uGAXAADYCkdeAACArVBeAACArXisDgDrBQIBLVq0SDt27FBFRYVycnJ00003afDgwVZHQ4zmz5+vd955RzU1NcrMzNSQIUM0ZswYq2PhHJSXl2vixInKz8/X7NmzrY6DL2nOnDnasGGDPJ7//NpdsGCBWrZsaWEq+6K8QKFQSC1atNCMGTOUm5urPXv2aPr06crLy1OnTp2sjocYFBYW6u6775bf79fx48c1depUtW7dWv3797c6GmL0zDPPqF27dqqtrbU6CmI0cuRI3X777VbHcAROG0FpaWm69dZblZeXJ5fLpS5duqhz587avXu31dEQo4KCAvn9/siyYRg6cuSIhYlwLnbu3KmjR4/qyiuvtDoKkBQ48oJ6Tp48qf3792vEiBFWR8E5WLZsmdasWaPa2lrl5ubyi8+mAoGAFi9erB/+8If6+OOPrY6Dc/CHP/xBf/jDH5STk6MRI0bof/7nf6yOZFuUF0QxTVNz585Vhw4d1L17d6vj4Bzcfvvtuu2227R//35t3bpVGRkZVkdCDH7961+re/fuateuHeXFxkaMGKE777xTGRkZ2rVrlx577DFlZGSoX79+VkezJU4bIcI0TS1cuFAnTpzQfffdJ8MwrI6Ec2QYhjp06CCPx6OVK1daHQdf0pEjR/TnP/9ZY8eOtToKzlH79u2VlZUlt9utbt266dprr9XmzZutjmVbHHmBpFPFZdGiRTpw4IAefvhhpaWlWR0JcRQOh3kjOBvavXu3Tpw4obvuukuSFAwGVVdXp1tvvVVPPfWU0tPTLU6IWBmGIZ4RGzvKCyRJixcv1t/+9jfNmDGDH4g2V1VVpW3btql3795KS0vTnj179Prrr+vmm2+2Ohq+pP79++uyyy6LLG/evFlvvfWWHnjgATVp0sTCZPiyNm3apB49ekS+J3//+9/rW9/6ltWxbIvyAh07dkyvvfaavF6v7rzzzsj6G2+8kWeD2JBhGFq7dq2WLFmicDisFi1aaNSoUbr22mutjoYvye/3R9011rRpU3k8HuXk5FiYCrFYs2aNFixYoHA4rJycHN16660aOHCg1bFsi/c2AgAAtsIFuwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwAAwFYoLwCSWllZmaZOnapdu3ZZHQVAkqC8AEhqZWVlmjZtGuUFQATlBQAA2ArlBUCj2rhxowzD0IEDByLrRo0aJcMw9MEHH0TWjRs3Ttdcc40uvPBCSdJNN90kwzBkGIYOHjzY2LEBJBHKC4BG9bWvfU1paWlav369JMk0TW3atClqnXSq5AwYMECrVq2SJD3yyCP6y1/+or/85S/Kz8+3JDuA5EB5AdCo/H6/vva1r0WKykcffaSysjLdcccdkXUHDx7UoUOHNGjQIHXv3l2S1KFDB/Xp00d9+vSR3++3LD8A61FeADS6gQMHRorKhg0b1KNHD1133XXasGFDZJ3P51OfPn2sjAkgSVFeADS6QYMG6eDBgzp8+LA2bNiggQMHqn///jpx4oR2796tDRs2RE4vAcBnUV4ANLp+/frJ6/Vq/fr12rhxowYOHKhmzZrp0ksv1fr16yOFBgDOhPICoNGlp6erR48e+uUvf6ni4mINGDBA0qkjMi+88IL27dsXKS8+n0+SdPLkScvyAkgulBcAljh93Uu3bt2UnZ0dtc7tdqtfv36SpLy8PDVv3lwrV67U5s2b9c4776iurs7K6AAsRnkBYIlBgwZJUtTpoYEDB8owDHXv3l2ZmZmSJJfLpWeeeUaffPKJrr76avXq1UtHjhyxJDOA5GCYpmlaHQIAAKChOPICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABshfICAABs5f8DvI4NUhefWN0AAAAASUVORK5CYII\u003d\n"
          },
          {
            "type": "TEXT",
            "data": "\u003cggplot: (8746647830933)\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885221038_719317105",
      "id": "paragraph_1580885221038_719317105",
      "dateCreated": "2020-02-05 14:47:01.038",
      "dateStarted": "2021-07-26 03:16:12.859",
      "dateFinished": "2021-07-26 03:16:13.777",
      "status": "FINISHED"
    },
    {
      "title": "Plotnine Example (2)",
      "text": "%python.ipython\n\n(ggplot(mtcars, aes(\u0027wt\u0027, \u0027mpg\u0027, color\u003d\u0027factor(gear)\u0027))\n + geom_point()\n + stat_smooth(method\u003d\u0027lm\u0027)\n + facet_wrap(\u0027~gear\u0027))",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:13.860",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python",
        "title": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "IMG",
            "data": "iVBORw0KGgoAAAANSUhEUgAAArcAAAHCCAYAAAD1muGYAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8rg+JYAAAACXBIWXMAAA9hAAAPYQGoP6dpAAB49ElEQVR4nO3deXxb1Zk38N+59+perd5jx1mdkMRZSIgTwhLCGvZAFgiUAQqUlwJ96bSdYTpM6QJloDBvmem0LIW2Q+m0LIUSdijQACEQlgayJ7azb3bi3da+3fv+odiJo8WSLFuy/PvOJ5+OpXuvHotj6dHRc54jDMMwQERERESUB6RsB0BERERElClMbomIiIgobzC5JSIiIqK8weSWiIiIiPIGk1siIiIiyhtMbomIiIgobzC5JSIiIqK8weSWiIiIiPIGk1siIiIiyhtKtgMYCPX19dkOgYa5KVOmxL2P45OyjeOTclWisUmULM7cEhEREVHeYHJLRERERHmDyS0RERER5Y28rLml9D388MP4/PPP4fF44HA4cNlll+H666/PdlhEPTo7O3HDDTdg9OjRePzxx7MdDhEeeughrFy5Eopy9C316aefRkVFRRajIhq+mNxSL8uXL8c//uM/QtM0NDU14V//9V8xZswYnHPOOdkOjQgA8Otf/xoTJ06E3+/PdihEPa666irceuut2Q6DiMCyBDpOVVUVNE3r+VkIgQMHDmQxIqKj1q9fj4aGBlx44YXZDoWIiHIUZ24pym9/+1usWLECPp8PFRUVuOCCC7IdEhECgQB++ctf4sc//jHbVVHOeeONN/DGG29gxIgRuPLKK3HppZdmOySiYYvJLUX55je/iVtuuQV1dXX45JNP4HA4sh0SEZ599lnMmzcPEydOZHJLOeWKK67At771LdjtdmzatAn33HMPbDYbzj777GyHRjQssSyBYhJCYOrUqTCZTHj66aezHQ4NcwcOHMB7772Hb3zjG9kOhSjKlClTUFhYCFmWMXv2bCxduhSrVq3KdlhEwxZnbimhcDiMgwcPZjsMGuY2b96M5uZmXHPNNQCAYDCIQCCAJUuW4Nlnn4XNZstyhERHSZIEwzCyHQbRsMXklnq4XC6sWbMGZ5xxBiwWC7Zs2YLXXnsNX//617MdGg1z55xzDubOndvz84cffoj33nsPDzzwAKxWaxYjIwI++OADnHrqqTCbzdiyZQtefvllfOc738l2WETDFpNb6iGEwF//+lc88sgjCIfDKCsrw9VXX41ly5ZlOzQa5sxmM8xmc8/PDocDiqJgxIgRWYyKKOKVV17Bf/7nf0LXdZSXl+Pmm2/Geeedl+2wiIYtYeThdydcbELZNmXKlLj3cXxStnF8Uq5KNDaJksUFZURERESUN5jcEhEREVHeYHJLRERERHmDyS0RERER5Q0mt0RERESUN/KyFVhJSUnc+1RVRSAQ6PdjCCFgsVjg9Xoz0qw7E3HlYkyZjisXY0o1rkTj02q1wuPx9DseSZJQXFyM9vZ26Lrer2vlYkyZiisXY8p0XKnGNNDjk895dmLKVFy5GBPR8YbdzK2maRm5jiRJsFqtkKTMPIWZiCsXYwIyG1cuxgRkLi5ZljNyHSFEz7/+ysWYgMzElYsxAbn53y9T1+JznrxcfK5yMSai4w275JaIiIiI8heTWyIiIiLKG0xuiYiIiChvMLklIiIiorzB5JaIiIiI8gaTWyIiIiLKG0xuiYiIiChvMLklIiIiorzB5JaIiIiI8gaTWyIiIiLKG0xuiYiIiChvMLklIiIiorzB5JaIiIiI8gaTWyIiIiLKG0xuiYiIiChvMLklymHhcDjbIRAREQ0pTG6JcpjH48l2CEREREMKk1uiHObxeGAYRrbDICIiGjKY3BLlMF3X4fP5sh0GERHRkCGMPJwW6urqgqZpMe9TFAWhUKjfjyGEgKqqCAQCGZlZy0RcuRhTpuPKxZhixRVv/AGR2VhZlpO6zoEDB6CqKsrLy1OKZzg+5/kSU6bjihVTpsZnOobrc57tmDIVVzZfO4mSpWQ7gIEQCAQQCARi3udwOOB0Ovv9GLIsQ1VVuN3ujCz6yURcuRhTpuPKxZhixdVX8pDsdTweD7q6umCxWFKKZzg+5/kSU6bjihVTpsZnOobrc57tmDIVVzZfO4mSxbIEohwXCoXg9/uzHQYREdGQwOSWaAhg1wQiIqLkMLklGgKY3BIRESWHyS3REBAIBDKyQIWIiCjfMbklGiI4e0tERNQ3JrdEQwSTWyIior4xuSUaIrxeL3Rdz3YYREREOY3JLdEQ4vV6sx0CERFRTmNySzSEuN3uXj/n4QaDRERE/ZKXO5QR5Suv1wvDMFAbqscznhfQaXShWBTheuvXMMU0KdvhERERZR1nbomGEF3Xsdu9B792/w86jE4YMNBmtOMx929xKHw42+ERERFlHZNboiFmY9cWCIhetwkA64IbshMQERFRDmFySzTE6N5w7NtZf0tERMTklmioGW1UQgR7z9yGoWOGaWqWIiIiIsodTG6JhphyeQSuMC6DDBkAoEDBjdZrUaWMz3JkRERE2cduCURD0AnBCfjPEQ/AabjgEHYogn/KREREAJNboiEpEAgAYaBYKcp2KERERDmFZQlEQ9TxGzoQERERk1uiIcvj8WQ7BCIiopzD5JZoiPL5fAiHY7cFIyIiGq6Y3BINYV6vN9sh0DASCASyHQIRUZ+Y3BINYay7pcHkcrmyHQIRUZ+Y3BINYV6vFwZ3JqNBwg9TRDQUMLklGsIMw2BpAg2aYDDI0gQiynlMbomGOHZNoMHE8UZEuY7JLdEQ5/F4WJpAg4bJLRHlOia3RENcOByG3+/Pdhg0TPj9foRCoWyHQUQUF5NbojyQymya3/DDrXO2l9LHOm8iymVKtgMgov5zu90oKSlJeEzACOKPnuexLrgBADBaGoXb7N9AiVQ8GCFSHvF4PHA4HNkOg4goJs7cEuWBUCjU5yr2v3hfwcbg5p6fG/VDeNz1O+iGPtDhUZ5hCzoiymVMbonyRF89SNcFNiCMo9v16tBxSD+MNr19oEOjPMMWdESUy5jcEuWJvupuhRCxb0fs24kSYdcEIspVTG6J8kQgEEAwGIx7/2mmeZAh9/wsQ8Z4eSyKpaJBiI7yDZNbIspVTG6J8kiihGOJZRHOUE+DAhkCApOUibjd9n8gCb4MUOrYgo6IchW7JRDlEbfbjcLCwpj3yULG1dZluMqyFAYMJrXUbx6PB5qmZTsMIqJe+O5GlEeSabAvhGBiSxnB0gQiykV8hyPKM0w4aLAEAgHuVkZEOYfJLVGeYXJLg4njjYhyDZNbojzj9Xqh69yYgQYHk1siyjVMbonyUF8bOhBlCj9MEVGuYXJLlIeY3NJg4m5lRJRLmNwS5SHOptFgYmkCEeUSJrdEOc6Akfo5hgGXyzUA0RBF83g8MIzUxykR0UBgckuUo/aE9uJl0xt4z/phWuc7nc7MBkQUh67r3K2MiHIGk1uiHLXa/ym2KnXYqtbCLVL/2tflcnE2jQYNSxOIKFcwuSXKUWdrCwAAYaFjo7Yl5fN1XedCHxo0TG6JKFcwuSXKUeOUMRgTHgUA2KBtRhjhlK/Brgk0WILBIAKBQLbDICJickuUy04JzQEAuCUP6k07Uz7f7XazNIEGDWdviSgXMLklymFT9Emw63YAwFfmDSmfr+s6fD5fpsMiionJLRHlAia3RDlMhozZvhMBAIeUJjTIh1K+BksTaLD4/X6Ew6mXzxARZRKTW6IcNyswA4ohAwC+Mm9M+Xz2IKXBxNlbIso2JrdEOc5imDEtUA0A2G7aCZdIbSY2HA6zNIEGDZNbIso2JrdEQ8Ac3ywAgC50bNA2p3w+Ew4aLF6vl98UEFFWKdkOgIiifRlYjzd8f4XqUTAqOBKnqHMxLjga+0wHsUHbglN9c6Gk8OfrdrtRWlo6gBFTvjIMAx+978fHq/ywF7Rj1GgDs082QVFE3OO9Xi+sVusgR0pEFMGZW6IcsyGwGU97nkGz3gKf4Udj+BBW+lbhpCMLy7ySF7Xq9pSuydIESteqlX68+aoP7W0GvF4de/eG8OnqQMLZWX5TQETZxOSWKMe8718FA0cTBx0Gugwn7H4HCsMFAICvtI29jkkGuyZQOlat9EPXI/+/YQB6GDh8KAxvgvyVyS0RZVNOlCU8+uijWLt2LbxeLxwOBy688EJcffXVAIC9e/fikUcewZ49ezBy5Eh861vfwowZM7IcMdHA8RvRuzwJCBjQMds/E6usn6BZacFBpRFjQqOSvi5LEygdweDRD1EdrWUwWzywFzgRDhkAYpcmdH9TYDabBylKIqKjcmLmdvHixXjyySfx5z//GQ8++CBWrVqFjz/+GKFQCPfffz9OP/10PPfcc7jyyivxwAMPwOVyZTtkogFzomkaZMi9bpMgoUQqwomBaTAZkc+kX2mptQVjaQKlY8pUE+QjwzEcVuD1WqGZBaz22IltN87eElG25ERyO27cOGia1vOzEAINDQ3YtGkT/H4/li1bBpPJhHPPPRcVFRVYs2ZNFqMlGliXmC/ALNPRbycUyDhTmw+LsMBsaJjhnwYA2GHahS6pK6VrszSBUrX8WgvGjDv6YUsPK5gy1QZZTpzcer3egQ6NiCimnChLAIA//OEPeOONN+D3+1FeXo5zzz0Xa9aswfjx4yFJR3PwCRMmYN++fVmMlGhgyULGzdavo1VvQ6O7EZqkwiRMPffP9s/EevMmGMLAem0zzvLOT/raLE2gVFmtEu74JzsO7g/j0V84EQ4JHNxnRvW0xDOzgUAAwWAQJpMp4XFERJmWM8ntjTfeiBtuuAE7duzA559/DpvNBq/XC5vN1us4m80W9XVXY2MjGhsbe37WNA2jRsWuRRRCQJblmPelovsambgWkJm4cjEmILNx5WJMQGpxSZIEIWLPeh17nQqUQzeF4Q31ngEbgVJUBcdhj2kfNqlbMd9/KlSYoq7T/b/Hfjg0DAPBYDClWsh8eM7jycWYgOz+zcQan7IMVE1UUD2tC1s3CeyoV3H2+T70lbf6/f6oscbnPHm5+FzlYkxEx8uZ5BaIDPLJkyfjyy+/xHPPPYeysrKoRNbj8cBisfS67cknn8RPf/rTnp/vvvtuPPDAA3EfR1XVjMVcUFCQsWtlKq5cjAnIXFy5GBOQfFzFxcVxk9vjr+N0OmMeO1+cgj3YB5/kx07bbsw1Zse81vF/K0Dk76y4uDipWGPF1F+5OD5zMSYgO38zicbnSXNasXUTEAwIHNxnw/SZiTt2JBprfM6Tl4vPVS7GRNQtp5Lbbrquo7GxEXPmzMGKFSug63rP7NPu3btx8cUX9zr+tttuw+LFi3t+1jQN7e3tMa9ts9kyUncoyzIKCgrQ1dWFcDjc7+tlIq5cjCnTceViTLHiSpQ8tre3x00ejr+Oy+WKWbs4CiNRbC9Cu9yBT8XfMdU9GeKYletCCFgslpi7Rfn9fqiqmjDBThRTunJxfOZiTJmOK1ZM6Y7PseNDsNkkuN0SNnxloOqExKUJHo8HNput18zccH3Osx1TpuLK5msnUbKynty63W588cUXOPXUU2E2m1FbW4u3334bX/va1zBz5kyYTCa88soruPzyy7FmzRocOnQIp59+eq9rVFZWorKysufnlpaWuH90hmFk5A+yWzgczsj1MhlXLsYEZCauXIwJSC0uvbtpaBLXCYfDcY+v8c/E+9bVaJXbsEfah/GhsT33dX8YNAwj6nxd1+F2u2PO6iYTU3/l4vjMxZiA7PzNJBqfQhiYMi2AdWvN2L9XgbPLgM2eePbW5XLBbrdH3c7nPHm5+FzlYkxE3bKe3AohsHLlSvzmN7+BrusoKSnB0qVLsWjRIggh8KMf/QiPPvoonn32WVRUVODuu++Gw+HIdthEWTfDPxUfWz5HQATwlbaxV3Lbl1jlPUTJqJ7hx7q1ZhiGQP02FTXz/AmPd7vdMZNbIqKBkvXk1mq14v777497f1VVFR5++OFBjIhoaFCh4kT/NHxl3oBdpj3okDpRpBcmda7b7UZJSUnSpQlE3UrLdJSVh9DSpKB2q4bZJ/uRaBh1l8ZwrBHRYMmJPrdElJ4a/0zgyEZR61LY1IEbOlB/TJ0R2UWvrUVGS1Pile6GYbDnLRENKia3RENYkV6IicEqAMBmrRYBRG/dGw83dKB0TZ4agCRFam3rtva90p27lRHRYGJySzTEzfHPAgAERABbtNqkz3O73VGdFIiSYbUaGFcVBADUb1PR13ogJrdENJiY3BINceNCY1AWLgEArNM2wUByCauu6/y6mNJWfaQ0weuVsH9P4t0cWAZDRIOJyS3RECcgUOOLzN62yx3YoyS/PbXL5RqosCjPVU0MQtMibcNqWZpARDmEyS1RHpgWmAKzrgEAvjInv7DM4/Ek7GtKFI+iAJOmRkoTdu80wedL3A2ByS0RDRYmt0R5wAQTZgZmAAD2mPahVWpL6jzDMJh0UNqmTo/0uNXDAjvqEpcmBINBBALJL3gkIkoXk1uiPDHbdyKEEZk9+0pNfvaWXRMoXRWVYRQWR1aT1W3R+jyeH6SIaDAwuSXKEwWGA5OCEwEAW9Ra+JDcAh6Px8PtLyktQgBTp0dmYw81KuhoT/yWwuSWiAYDk1uiPNLdFiwogvhK4uwtDbwp04+WGvTV89bv9yMUCg10SEQ0zDG5Jcojo0OVGBEqAwD8XfoKOpJbLMauCZSuggIdo8dGFpbVbVXRV+tkzt4S0UBjckuURwREz+xth+jETmVPUudxRo36o/rI7K2zS0bDASXhsfyWgIgGGpNbojwzNTAZVt0CAPhK25D0eZy9pXSdMDkARUluO16v18v2c0Q0oJjcEuUZBQpOCpwIANinHECz3JLUeUxuKV2qBkyYFJm93VGvIhhMfDzHGhENJCa3RHloduBESEbkz3udtimpc4LBIPx+/0CGRXls6pHteIMBgd07Eve8dTqdgxESEQ1TTG6J8pDdsGO6UQ0A2KbWwSuSawvGGTVK15hxIVhtkXKDuq2Je966XC4Yfa08IyJKE5Nbojx1qn4yACAkwtiobknqHLfbzaSD0iJJQPW0yOzt/r0K3K742/Hqug6v1ztYoRHRMMPklihPjTFGoTJUAQBYb96MMPreqCEcDjPpoLRVz4iUtRiGQP22xAvL2DWBiAYKk1uiPDYncBIAwCW5sMO0O6lzWJpA6Sot0zGiPNJSrnarlrDnrcfj4bcERDQgmNwS5bHq4CTYdCsA4CtzcjuWcTte6o/qIwvL2lpktDTJcY8Lh8NcwEhEA4LJLVEekyFjtn8mAKBBacRhubnPcwzD4FfGlLbJUwOQpOR63nK3MiIaCExuifLcLP90yEfagiW7qQNbNVG6rFYD46oijW7rt6lI9CUAP0QR0UBgckuU56yGFVMDUwAAdep2uEXfs2WBQACBQGCgQ6M81V2a4PVK2L8nfs/bUCjEcUZEGcfklmgYqPHPAgCEhY6NWnJtwbiwjNJVNTEITYv0vK3tozSBs7dElGlMbomGgYrwCIwOVgIANmjJtQVzOp1czU5pURRg0tRIacLunSb4fPF73rLulogyjckt0TAxxx9pC+aWPKhXd/R5vK7rTDwobVOnRzoh6GGBnfXxSxMCgQCCweBghUVEwwCTW6IcJkT8Ga9j7QsdwF+9f8Pr3rfwReBLBI3oZGFScAIcuh0A8KW2EQb6npXlwjI6liQl/5ZRURlGYXHkG4LaLYm34+WHKCLKJCa3RDmspKSkzwR3X+gAPgl8hnajAy7Dg92hPfjA91FUSYEECbN9kbZgh5UmNMqH+3x8r9fLWTXqUVBQkPSxQgBTp0cWix1qUNDRHv/thnW3RJRJTG6JcpiqqigpKUl4zNZgba+fdRhoDreiJdQWdezMwHQohgIA+MqcXFuwrq6uJKOlfFdUVJTS7O2UaUc7ISTqeev3+xEKhfoVGxFRNya3RDmuoKAANpst7v1BxJ5ZDRrRLZYshhnTj7QF227aBafouyNCZ2cnF5YRgEhZgsPhSPr4gkIdo8ZExmfdVrXP7XiJiDKByS3REFBWVgZFUWLeVyGXQ0Lv0gUZMoqV4pjH1/gibcF0oWODtrnPxw6FQvB6vSlGTPmqsLAw6VpwAKg+Uprg7JLRcCD2GAZYmkBEmcPklmgIkCQJI0aMiHnfHNNJKJVKe36WIeMs8xmwSOaYx5fppRgXHA0A2KhtQQh9fx3M0gTqJstySrO3k6YEoCiRKdvaLfFLE3w+H8KJtjMjIkoSk1uiIcJsNqOoqCjqdkUoWKidjYu0hThPOwtLLJdilDIy4bVqjrQF80o+1Krb+3xsr9fLmkjqUVhYmPSxqgZMmBSZvd25XUWi9YksTSCiTGBySzSEFBUVQdOi2yoJIVAiF6NCLocmErddAoCJwfEoDEdWvn+VZFswzt5SN0VRYLfbkz5+6pHteIMBgd074ve8ZXJLRJnA5JZoCBFCoLy8PKUV67FIkHq25G1WWnBQaezzHJfLxYVl1COV2dsx40Kw2iLb8W7bHD+59Xq90HW937ER0fDG5JZoiFEUBWVlZf2+zon+qTAZkUTjK63vtmDhcJiLfqiHqqqwWq1JHStJQPWRtmD79yqItzeIYRicvSWifmNySzQE2Wy2lL4WjkWDhhn+qQCAHabd6JL6LjtgaQIdK5XZ2+oZke14DUNg66b4bz1Mbomov5jcEg1RpaWlcduDJavGH9mxzBAG1iXRFszv98Pv9/frMSl/mM1mmM2xu3Icr7RMx4jyyKLEzRukuD1vPR4PSxOIqF+Y3BINUYnagyWrRC9GVXAcAGCTujXuhhDH4uwtHSu12dtIaUJLk0BLU+y3H8Mw2FeZiPqFyS3REGY2m1NKLmKZc2RTB7/kx1a1rs/jXS4X24JRD6vVClWN37/2WJOnBiBJffe8ZW03EfUHk1uiIa64uDjp5CKWqtA4FIeLAADrzMm1BXPGWxFEw1KyH7CsVgPjJ0Q+GNVtMyHeng1er5edOYgobUxuiYY4IQRGjBiR0paovc6H6GkL1iq3Y59yoM9zurq6mHxQD5vNlnT9d3fPW69Hwv49sduC6brO0gQiShuTW6I8oKpqzN3LkjXDXw1Nj8z+fqVt7PN4XdfhcrnSfjzKL0KIpGdvq04IQTMfKU3YqsIwDBw8EELd1iD27w1B1yP3sTSBiNLF5JYoTxQWFsbcvSwZKlScGJgGANhl2oN2qaPPczo7O9N6LMpPDocDsiz3eZyiANNmRLoh7N5pwuoPg/js4wC2bA7ii08DWP2BH7oe6XfLbweIKB1MbonyRH/LE2b7ZwIGAAGs1zb1eXwwGGRPUuohhEBBQUFSx844KZK06mGBvbtUGAaghwHDAFpadOzaHmZpAhGljcktUR4xmUwoLi5O69wivRAnBCcAADZr2xBAoM9zOjo60nosyk8FBQVJfbgaPcZAYVFkNZnX03uXM0MHuroiM7v88ERE6WByS5RnCgsLk26sf7w5RxaWBUQQm7XaPo/3+/3w+XxpPRblH0mSkpq9FQKYOiPSUzkY0BAKHS1nEBJgsUYSZLfbzdIEIkoZk1uiPJRuecLY0GiUhUsAAOu15NqCsfaWjpVsaUJ31wQA8Hkjs7dCAiwWgRMmRzovsDSBiNLB5JYoD5lMJpSXl6d8noBAzZFNHdrlTuxW9vZ5jsfjQSDQdwkDDQ+KosBut/d5XEGhgVFjIrO34ZANY8bJqJ6q4PyLzVDVox/MWJpARKlickuUp4qLi9PqnjAtMAVmPXLeV+a+24IBrL2l3pJtC1Y9PfKhyOeVMXacDSeepPZKbAGWJhBR6pjcEuWp7u4JqTLBhFn+GQCAvab9aBGtfZ7jdrsRDAZTfizKT6qqwmKx9HncpCkBKEri7Xh1XWddNxGlhMktUR5Ld3OHk/wnQhiRGbS/K+uSOoezt3SsZMadqgETJkVmb3duVxHv8xE3dCCiVDC5JcpzRUVFMJlib3MaT4HhwOTgRADAJnkLfKLvmTOXy8XZW+phNpuTKovpXlgWDAjs3hF7nLI0gQbaL37xC4wbNw6yLGPp0qUZueb69etx7733Dljd+Lx58/CrX/1qQK7dX7fccgu++c1vZu3xmdwS5TkhBMrKylI+r+ZIW7CgCGGTui2pczh7S8dKpvZ2zLgQrLZIX9vaLbGTYZYm0ECqra3FP//zP+O6667D6tWr8f/+3//LyHXXr1+Pn/70pwOS3K5YsQJ79+7NagKZyF133YX//d//RX19fVYen8kt0TBgNpvhcDhSOmd0qBLloUhSvF7bBB16n+dw9paOZbVa+/zWQJKA6mmR2dsD+xS4XbFb2LE0gQZKbW2kp/c3v/lNzJ8/H1OmTMlyRLEd2xbvv//7v3HttdcmVds+mLpjnDx5Mk477TQ89thjWYmDyS3RMFFcXAxJSv5PXkBgjv8kAECX7MRO056kzmtvb08nPMpDyW7JWz3DDwAwDIG6bbEXlrE0gQbCTTfdhGXLlgEATjjhBAgh8Nhjj+Hb3/42qqurYbVaUVVVhdtvvz1mT+///d//RU1NDcxmM8rKynDppZdi7969ePrpp/GNb3wDwNG+41VVVT3nbd68GRdffDHsdjsKCgqwZMkS7Nixo9e1hRB46KGHcNddd2HkyJE9C4R37dqF1atXY/ny5b2ONwwD9913H0aOHAm73Y4rrrgCb731FoQQ+PDDD3sd9/DDD2PKlCnQNA0TJ07EL37xi17Xqq2txTXXXIOxY8fCarVi+vTp+M///E/o+tFJjj179kAIgaeffhrf/OY3UVpainnz5vXcf9VVV+GZZ55BKBRK4b9IZjC5JRomZFlGSUlJSudUBybDZkQa7K/TkmsL5na72feWetjt9j4/VJWW6Sgrj7wB1m3VECuH5YYONBB+/OMf42c/+xmAyFf9n376Ka6++mqEw2E88MADePvtt3H//fdj1apVPUlwt5///Oe48cYbMXfuXKxYsQL/8z//g8mTJ6O5uRmLFi3Cj370IwDAX//6V3z66ad4+eWXAQD79+/HmWeeicOHD+MPf/gDfve736G+vh5nnnkmmpubez3GL3/5S+zYsQNPPfUU/vSnPwEAVq5cCZPJ1CuRBIBHHnkE9957L2666SasWLECkydPxu233x71O3/3u9/FT37yE9x444148803cdNNN+Guu+7CE0880XPMwYMHUV1djccffxxvvfUWbr31Vtx33324//77o673gx/8AEIIPPfcc/j5z3/ec/sZZ5yB1tZWrFuX3KLkTFIG/RGJKGscDgecTif8fn9SxyuQUROahY9Nn2G/6SCa5RaMCPddv9ve3o6Kior+hkt5oHtL3r7qsafOCODjJgVtLTJammWMKA9HHeN2u2G1WgcoUhqOTjjhBEyePBkAUFNT0zO7+utf/7rnmFAohAkTJmDBggWor6/HlClT0NnZiXvvvRe33nornnzyyZ5jlyxZ0uvaADB37txe6x5+8YtfIBAI4N133+2ZjT311FMxefJkPPbYY7j33nt7ji0tLcVf/vKXXjtOrl27tmfWtVs4HMZDDz2Eb3zjG3jooYcAABdeeGFPAt1t586dePTRR/HEE0/g1ltvBQCcf/75cLlc+OlPf4pbb70VkiRh4cKFWLhwIYDITO+CBQvg8Xjw6KOP4ic/+Umv53DOnDn4zW9+E/Xczpw5E5Ik4fPPP49KxAdaXia3qqrGXaWrKErKtYexdA80m82Wka/KMhFXLsYEZDauXIwJSC0uq9UKWZb7fZ1EEv1+VVVV2Lu3753Hup2s12CN8QV0oWODdQsuC17U5zm6rkNRlF71YLk4PnMxJiC7fzMDMT6tViv8fn+v30VVe5cfzDwJ+ORDA4YhsKPOirHjomu3dV2H3W7v9UafD8/5YMQE5PffTKb98Y9/xH/9139h+/btveq9u5PbTz/9FB6PB//n//yflK+9evVqnHfeeb36kI8fPx7z58/H6tWrex17ySWXRG2l3tjYGNXD/MCBA2hsbMTixYt73b5kyZJeye3f/vY3AMCVV17Zq1xg4cKF+PnPf479+/dj/Pjx8Pl8ePDBB/HMM89g3759vdZSuFyuXrsQXnrppTF/T0VRUFRUhEOHDiV8PgZCXia3gUAg7tei3TNX/SXLMlRVhdvtRjgcPcOQqkzElYsxZTquXIwpVlyJWiAlWjk7WL+fqqro6upK6lo2sxXVgUnYptVji7wN812nwGr0vYhh//79qKysTDqmVPFvJv2YsjE+FUWB0+mEJElQFAWBQKBX/Z4kA+MnyNizS8W2zRJOme9DrBy7qamp1+ztUHnOsx1TpuLK5mvnYHn55Zdxww034NZbb8UDDzyA0tJSNDY2YtmyZT1dO1pbI5vbjBo1KuXrt7e3Y/bs2VG3jxw5EnV1db1ui7WNus/ni3qeGhsbASAq6T3+/JaWFhiGEbeDTndye9ddd+G3v/0t7rnnHsydOxdFRUV49dVXcf/998Pn8/VKbhNt9W42m7NSTpSXyS0RJVZcXAyXy9UruUikxj8L27R6hEQYm7QtONV3cp/n+Hw+eDwefo1MACJtwfpKrKpnBLBnlwqvR8L+vQqqJkYvRGFpAg20F198EbNnz+5VbrBq1apex5SWlgIAGhoaMGbMmJSuX1JSgsOHD0fdfujQoah1EcfP2nafv2fPnl63dU8kHF+z29TUFHWuEAIff/xx1LcnAFBdXQ0g8hzcdtttuOuuu3rue/PNN2P+PrFi7Nbe3t7zXA0mLigjGoYkSUppcVlluAKVoUgN7XptC8JIbsamvb2dK9wJAGAymfpMSqsmBqFpiXvesmsCDTSv1xuV+D3zzDO9fj799NNhtVrx+9//Pu51uq9xfI/mBQsWYOXKlT2zv0BkxnTNmjU488wz+4yvuroau3fv7nXbmDFjMHLkSLz66qu9bn/llVd6/dxdR9va2oqTTz456l93icjxz0E4HMbzzz/fZ2zHOnz4MLxeb0/CPJg4c0s0TNntdnR1dSXd2aDGNwuN9vfgklzYYdqF6uDkPs8JBAJwuVwJa+oCRgC7Q3sRRhjj5XGwSZyVy1eFhYUJN2NQFGDS1CC2bNCwZ6cJPp+A2dw7kTUMAx6PBzabbaDDpWHqggsuwB133IH77rsP8+fPx9tvv42VK1f2OqawsBD33HMP7rrrLoTDYSxduhS6ruODDz7AP/zDP+Dkk0/GtGnTAACPPfYYli5dCqvVipkzZ+Kf/umf8Pvf/x4XXnghfvjDHyIcDuOee+5BSUkJ7rjjjj7jO+OMM3DffffhwIEDPbPGsizjBz/4Ab73ve+hoqIC5557Lt5//3188MEHANDTsWTKlCm444478PWvfx3f//73ceqppyIYDKK+vh4ffPBBTzJ8wQUX4Le//S2mT5+OESNG4LHHHkt6IXK3v//97wAiyfxg48wt0TAlhEhp9nZK8ATY9UhC8ZU5ubZgQGT2Nl75Q5vejgecD+NR92/wa/f/4N6un2FPKPnFbjS0JLMl79TpkTfQcFhgR1387XiJBsptt92GO++8E48++iiuuOIK7Nu3D88++2zUcf/6r/+Kp556Cp999hmWLVuGm266CfX19T01qDU1Nbj33nvxpz/9CfPnz8fll18OABg7diw++ugjlJWV4etf/zpuvvlmTJo0CatXr46qmY3lnHPOQVlZGd5+++1et//jP/4j7rnnHjz11FNYtmwZtm3bhv/4j/8A0Hu3wF/96le4//778fzzz2PRokW47rrr8Pzzz+Pss8/uOeaRRx7B2WefjX/8x3/EzTffjJkzZ+Luu+9O6Xl86623cOaZZ2alc44w8vD7nZaWlrj3ZbLQv7i4GO3t7TlV6J9rMWU6rlyMKVZciba7zbXxefjw4YSLiMxmc89s22fmtfjE8jkA4LquqzAyHH8hwbEKCwsxYsSIqJh+4XwMe8J7ET6y+5mAgE1Y8UDBTyCL2Cv2u/FvJv2Ysjk+vV4vXC4XPB5PzA89hgE88/sCdLbLGDkqhCv/IfrxhBAYN24cJEkaMs95tmPKVFzZfO2ko+68806sW7cO77//fsLjfvSjH+G//uu/0NraOqi7mYVCIYwePRo///nPccMNNwza43bjzC3RMJfK7O0s/wzIRiTpTHZTBwDo6uqKuUvN3vC+nsQWAAwYcBludOjROwFRfrDZbAm35BXi6Ha8hxoUdLRHv011lyYQDVff//738fnnn/faIGHbtm344Q9/iDfffBPvvfcefvjDH+LnP/85br311kHfpveZZ55BYWEhrr322kF93G5MbomGOZPJlNQWqQBgNSyYGojU2taq2+EWyX09bBhGr8UT3czCHPN4S5zbaehLphymevrROvC6rbG343W5XBmNi2goGTlyJJ5++ule3RGsVis+++wz3HDDDbj00kvxzDPP4Pvf/z4efvjhQY9PkiQ89dRTUJTsLO3igjIiQlFRUdKtwWr8s7BFq41s6qBtwXzfKUk9htvtjpptu8R8If7ifQUGItVRMiScqs6DlYvK8lpRUREkSYo73goKdYwaE0TDARPqtqo4Zb4Px3cb8nq9GflanGiouuqqq3r9PH78+KiFb9ny9a9/PauPz5lbIoIsy70WHCRSER6B0cFIT8UN2maEkmwLBkT6OB5b5n+2dgaus16NKnkcxkijcYl2Ia6xXJla8DTkdNfKJtI9e+vsktF4MPY8DBeWEVEsnLklIgBAQUEBurq6kpoNm+M/CQdNjfBIXtSrOzA9kFwfQ7/fj66url6725ymzsNp6uDuO07ZV1hYiPb29rj3T5oSwOr3rQiFBGq3qBg1JvaGDkTpysSiv1hycTvh4YYzt0QEIDKbVlRUlNSxk4IT4AhHEtSvtI09ZQXJyNQqaxraFEVJ2KtW1YAJkyKztzvqVRyztX0Pn8/Xa897IiKAyS0RHcPhcCS1AECChNn+mQCAw0oTGuRDST+GrusxF5fR8NPXQsapMyLJbTAgsHtH7A4LAzX7RkRDF5NbIuohhEBxcXFSx84MTIdiRBLhdSls6gBEvk72er0px0f5pa9NHcaMC8Fmjyw6q9sa+zgmt0R0PCa3RNRLX31Iu1kMM6YHpgAA6k074RSptWZqbW1FHu4hQylKNHsrScCUqZHZ2/17FbhdIuoYv9+f9BbSRDQ8cEEZEfUihEBRUVGv/onx1PhmYaO2FYYwsEHbjAW+05J+nGAwiI6OjqRniik/2Ww2tLW1xa3Drp7hx7q1ZhiGQN02FXPmRe9v73K5UtqMhAgAduzYMSDXrampGZDrUvI4c0tEUZKdvS3TSzEuOAYAsEHbgiCiV7Qn0tnZyVm3YU4IkXD2trRMx4jyyLiq26oh1mQ/uybQUHHrrbdi9OjRKCgoQFVVFX72s59lO6S8xOSWiKJ0z94mY45/FgDAJ/lQq9an9DiGYaClpSXV8CjPOBwOiON3aThG9ZGFZW0tMlqa5Kj7Q6EQa7hpSPje976HHTt2oKurC6tXr8af/vQnvPjii9kOK+8wuSWimJKdvZ0YrEJRODLzti7FtmDA0d63NHzJstyr9/HxJk8NQJIi4yredrycvaWBYITDCGyvg2/dWgS218HoZxvD6dOnw2Kx9PwsSRK2b9/e3zDpOKy5JaKYhBAoLCyEy5V4oZiAQI1/Fj6wfoxmpRUHlAaMDY1O6bHa29thtVqztg85ZV9BQUHczgdWq4FxVUHs2aWifpuK08/yQj5uAtftdqO0tDThDDDRsRy//I+BufDTzye8+wc/+AF+9atfwePxYPz48bj++usHJo5hjDO3RBSX3W5PKuGc4Z8GkxGZ5f1KS60tGMDetwSoqgqz2Rz3/u7SBK9Xwr490d8o6LoOj8czYPERZcqDDz4Il8uFL774Atdffz0X1Q4AJrdEFJcQIqlV6BpUnOifCgDYadqNTin1MgOPx9PnLDHlt0QLy6omBqFp3T1vY5cmcPzQUCGEwLx586BpGu69995sh5N30kpuJUmCLMsx/ymKgtLSUixcuBCvv/56puMlokFWUFAA+fjvgGOYfWRhmSEMrNc2pfVYra2t3Jp3GEtUmqIowKTqyFa7u3ea4PNFlx94PB6OHxpSQqHQgLUkG87SKnD72c9+hscffxyqquKyyy5DeXk5Dh8+jNdffx2hUAjXX389PvroIyxduhTPPPMMrrnmmkzHnTe8Xm+v4nKiwRYwgujQO+CQHLCI6K+FJUlCQUEB2tvbE16nRC/ChOA47DbtwyZ1G+Z7T4EJiRekhYwwvIYHmjBDFSbouo6WlhZUVFT063eioam7LVhbW1vM+6fO8GPLRg16WGBHnQknnhTdRs7tdve5rS8RADi/e1fC+41wGJ6V7yB8zGufXFwC68ILIZL4wH+8zs5OvPbaa1iyZAnsdjs+/fRT/PrXv8aPf/zjlK9FiaWV3La3t2Pu3Ll46aWXIElHJ39/8Ytf4IorrkAwGMTHH3+Ma665Bv/xH//B5DaB7gUUDocjy5HQcLQusBH/63kOQQQhIHCZdjEusiyMOs7hcKCjo6PPHcXm+E7CbtM++CU/tqp1OClwYtxj94UO4LPA3xFGZKZtlnIiZqhTe8oTEq2ep/xlt9vR3t4ec6xVVIZRWBxGZ7uMuq1azOTW5XIxuaWMELIM68KLENy1A7rLBcluh2nipLQSWyDy4e3pp5/Gd77zHYRCIYwePRp33nknvv3tb2c4ckqrLOHpp5/Gbbfd1iuxBSIzPLfffjv+8Ic/AACuvfZa1NbW9j/KPNfS0gJd17MdBg0zDeFG/N7zRwQR+arXgIE3/H/FV4ENUcfKspzUB7DxobEoCUcWR3xljt8WrEPvxJrAZz2JLQBsDG3GvtABAJHyhFAotQ0hKD8kagsmBFA9LZLQHmpQ0NEe/RbG7Xgpk4QsQ51cDXPNXKiTq9NObIFIidfKlSvR3t4Op9OJ2tpa3HXXXezwMQDSmrn1er3Yt29fzPv27t0Ln88HIPIJXFVjF/7TUaFQCM3NzbBardkOhYaRutAOSJChH7OrmAEDm4NbMUc9Ker4goKCPvvRCgjU+GZhpW0V2uR27FX2oyo0Luq4w+EmCEgw0PtDXUO4EeOUMT3lCSNHjkzzt6OhLFFbsOrpAXyxJlLKVbdVxcjK6GO4HS8lY9KkSdkOgQZIWjO3ixcvxr/927/h2Wef7XkBcjqd+NOf/oR/+7d/w9KlSwEAGzdu5OBJUmdnJ3fYoUGlQAaOm1kVEDCJ2J95TSYTbDZbn9edHpgCTY98qP3KHLstmCRE1GNHbj/6kuT1euMmOJTfErUFKyjUMWpM5NuGuq1q3O14+yqhIaL8lVZy+/jjj+Occ87B9ddfj6KiIpjNZhQVFeGGG27Aeeedh0cffRQAMG7cODz44IMZDTifsTyBBtNM0wwoMEGg91dip6rz4p6TTC2jChUnBqYDAHab9qJd6og6ZrQ8GjKiv96bIFf1+rm1tRXBYLDPx6T8k2isVU+PlB04u2Qc2Bf9NhYKhXq+QSSi4SetsoSCggKsWLEC27ZtwxdffIFDhw6hsrIS8+bNw7Rp03qOu+KKKzIW6HAQCoXQ1taGsrKybIdCw0CRVIjvOf4v/uh+Dof1ZhQIB66yLsNEpSruOWazGZqmwe/3J7x2jX8mvtI2wBAG1mmbcJ73zF73W4UFC83n4DP/39FlOGERZsxVazBCLu11nGEYaG5uRmVlJevShhmr1QpZlmO29po0JYCP3rciHBLYuknG2TGaazidTnaiIRqm+rXX5bRp03ols9R/TqcTNpuNL8o0KMbIo/CDgjtTOqegoADNzc0JjynUC3BCsAo71N3Yom3DGd5TYUHvr5mLpSJcYrmgz8fz+/3o7OxEUVFRSnHS0CaE6OnScTxVAyZOCmJ7rYr6bTLmnw2Yjus65/F4oOt61MJnIsp/af/VB4NB/O53v8Mtt9yCRYsW4ZZbbsHvfvc7rlLNAJYnUC6z2WxJbepQc2RTh4AIYou2rV+P2d7e3udsMeWfRB06ps6IjIdAQGD3juh+yoZhwO12D1hsRJS70kpu6+vrUV1djdtvvx1r165FMBjE2rVrcfvtt6O6uhp1dXWZjnNY6S5PIMpF3TNqfRkbGo0RoUiZwTptU9y2YMlqbm7mh75hRlGUuIsYx4wLwWrr3o5Xi3kMFyRSIg6HY0D+UfalldzedtttUFUVtbW1WL9+Pd59912sX78e27Ztg9lsxre+9a1MxznsOJ1Odk+gnJXMwjIB0TN72yF3Ypeyp1+PGQwGORM3DMVLFiTpaM/b/XsVuF3RNdnseUs0PKVVc/v555/jj3/8Y1Sbr8mTJ+O+++7DjTfemJHghruWlhaMHj2aNWOUc2RZhs1m6zPZnBqYgo8sn8In+fClugEzMaNfj8v2TsOPxWKByWSK2TWjeoYf69aaYRgC9dtU1MyLLl1hz1uKZ6Bm9jl7m31pZU2jRo2Ku3JZkiQ2Xs8QlidQLktm9tYEBbP8kbZge0370YyWgQ6L8lC8sVZapqO8IlKaULtVi9nz1uVy8UMR0TCTVnJ7zz334Mc//jF27drV6/adO3fiJz/5Ce65556MBEcsT6DcZTabk9qB8CT/iRBG5MPw59KXAx0W5SG73R53QmXGrMgOe20tMlqaohc6hsNhvoYSDTNpJbcvvPACOjo6UF1djZqaGlx00UWoqanB1KlT0dnZiZdeegmLFy/G4sWLsWTJkkzHPOywewLlqmS+fiswHJgcnAgA2ChtgQ9srk+pkSQJdrs95n1TZ4QhRGRmtm5r7A9bXFhGNLykldy6XC5MmTIFCxYsQFFREQKBAIqKirBgwQJMnjwZTqez519fe9FT31ieQLkq0Yzaseb4TgIABEUQG9WtAx0W5aF4H6SsNmD8hEg9bv02FTH2fIDH44m5GQQR5ae0FpR98MEHmY6D+uB0OmG1WmG1WrMdClGP7hm1vmbGRoVHoiI8AoflZqzTNmKObxak9Nts0zCkaRpUVY3Z/aB6RgB7dqnweiXs32NC1QnRi8+cTic3AiEaJtLeoWz//v145ZVXsH///qg9vIUQ+OUvf9nv4PJZ6OB++P76JjyBAALlI6GefGqf57S0tGDMmDHsnkA5JZnkVkBgjv8kvG39G7okJ3aadmNy8IRBipDyRUFBAVpaohclVk0MQtN0+P0SareqMZNbl8vF5JZ62bFjx4Bct6amJuH9ra2tqK6uxqRJk/DZZ58NSAzDXVrJ7QsvvIDrr78ehmGgvLw8alEJk9vEwg0H4PrVw4CuQy8oQsjtgbOtFeq5F0Ak2PkpHA6jtbUVI0aMSPkxDZ8PgS8/h+50Qh41GqaZs5P6OpmoL2azGU1SCw77DsMkTKhSxsEszFHHTQ1OwUfGGriFB19pG5ncUspsNhva2tqi1iAoCjCpOogtGzXs3mmCzydgNvfukBAMBuHz+WA2R49NosF05513YubMmVzoOIDSmgK8++67sWzZMrS0tODgwYPYvXt3r3/Hd1Gg3nwfrgR0HT19awwd4c4OhA819nmuy+VKuZG97vHA+YuH4H1tBfwf/g2eP/0enheeYXscyoi3ve9hhfw6tobqsCG4CW/53oVLd0Udp0DGXH02AOCAqQFNMtuCUWokSYq7Y1n3drx6WGBnffR2vAAXllHqwkYYdYHtWOtbh7rAdoSN/tVuf/jhh9i5cyduuOGGDEVIsaQ1c9vc3Ixbb70VhYWFmY5nWDBcTkQ1ZJQkIBDdgDyW1tZWmM1myAlmeY/l+9vb0DvacexKi+DazxGaewpMk6YkHTfR8ZrDLXjT/w6EVaCgyw5hCASMIL4MbsDZ2hlRx8/Ta/Cx9Bl0oWOdthEXec7LQtQ0lDkcjphJakVlGIVFYXR2yKjdomHGrOjaXLfbjdLSUpZ2EQDgPxwD8w3z83g65u1+vx/f/va38dxzz+HLL9kWcSCl9Rd+ySWXsE6kH5SqE4DjE9NwGKI4uV10ussTkqUfakTUEmJZht7clPQ1iGJp1lshIGBIBnzmSO29AQNdeuwZMjvsmBqcDADYptbDI/i1HKVG0zRomhZ1uxBA9fRIQnuoQUFHe/Tbm2EYcLmiv1UgGgwPPvggLrroIsycOTPboeS9tGZuf/3rX+Oaa66Bx+PBwoULYxbpz5kzp7+x5S3tvPMR2r0Toe21kRlbANaTTwWKipO+htvthsvlitv78VhS2Qhgx3ZAPybBDeuQkkymieIpkYphIPIthNvmg8VrgYCAXYrf1WNO4CRsVesQFmFs0rbgVN/JgxUu5QmHwwG/P/qbrurpAXyxxgIg0vP21DOieyo7nc6kdtcjyqTt27fjj3/8IzZs2JDtUIaFtJLbrq4uuFwuPPjgg3jooYd63WcYBoQQ7CmYgFBMsH3z/yK8Zxc8h5tg2GwwjyiP6jrRl+7yBEVJ/J/RfP7FCG5aD8PjjSS4kgSlehqUKVP782vQMLQrtAc7Q7thFhpqTCdhpFyOc9QF+CiwBiEtCF02YArLKBNl2BqsRbFUjEq5otc1KsMVqAyNRKNyCOu1zTjZVwMZyZXYEAGRhWWtra1R6wYKCnWMGhNEwwET6raqOGW+D8evmw0EAlxYRoPuk08+wcGDB1FVVQUgUqLg8/lQVlaGXbt28QNXhqWV3H7961/H/v378cgjj2DKlClJbcFJvQlJgjJxEhR7AaQUF4h103UdLS0tGDlyZMLjpIJCOO68G/5PPoLhckGuHAX1tDMgWHdGKfjQ/zH+4n0FJigwYOAt37v4F/t3cKVlCaqU8dgZ2g2lUMKB9oPYGtoGAYEwdExVpqBGndXrWnN8s/Cm/RBckhvbTbt6ShWIkpGov3L19AAaDpjg7JLReFDBqDGhqGOcTieTW8Jdzu8mvD9shPGOZyXaw+09t5XIxbjQuhCySO0D+dVXX43zzz+/5+cXX3wRf/zjH/Haa68ltdMjpSat5Hbt2rV49tlnsXTp0gyHQ6nyer3o6urq81OfZHfActGiQYqK8k273oGXvK8CAIKIJAtuw4M/e1fg/9pvwclqDU5Wa/BCaAW8bV7oMIAj5Qq1oXqMk8dghFTWc73JwYmw6za4JDe+Mm9kckspi5fcTpoSwOr3rQiFBGq3qDGTWy4so2TIQsZF1oXYEdwFl+6CXbJjkmliyoktgKhNmIqLi6GqKsaMGZPJkOmItP6yJ02axLKDHNLW1oZgMLppOVGmNIdbempru+nQ0Rg+1Ou2g+IQvFrvWkgJEjqN3ttwy5Ax238iAKBROYRD8uEBiJrymdlsjvmtoaoBEyZFFpbtqFcR66WRC8soWbKQUa1OxlxzDarVyWkltrHcdNNNXJg/gNJKbh9++GE88MADqK+vz3Q8lAbDMNDc3My+tTRgiqTotn8CAsVSUa/bSqVi+Ky9k1sdOqwieoHZTP8MyEbkjeIrbWPmgqVhI96C2qkzIsltMCCwewd73hINN2mVJdx5551obGzE9OnTMWrUqKhuCUIIrggcZH6/H52dnSgpYQcEyrxyeQTOUs/Ax4FPoUOHdOT/rrQs6XXcpeYLscm/BRAADECCwEi5AhVS9K56VsOCqYHJ2KLVok7dgbO882E3YjfoJ4rFbrfH3OVpzLgQrDYdHreEuq0apkyLnr7lwjKaNGlStkOgAZJWcjt37lxu3ZqD2traUFlZme0wKE9dZVmKcfIYbA/thEWYcYZ2Girl3osZy+RS/KDoTnzo+Qg+lw8lcjEmyyfEfb2Y45+FLVotdKFjg7YZZ/hOHYxfhfKELMsxE1xJAqZMC2D9WjP271XgdgnY7NHfbHV1dTG5JcpDaSW3Tz/9dIbDGMZ0HVJHOzAyM0lpQ0NDzL7DRP0lhMBp2jycps1LeFyJVIxLSi/EoeChhMcBQHl4BMYER+GAqQEbj/S8VdgWjFJQUFCA5ubmqNunzvBj/VozDEOgfpuKmnnRfXE9Hg/C4XDSuz0S0dDApaJZZASDUF55EY6XnoNobcnINf1+P9ra2jJyLaJ0pbI99Bx/pE2YR/KiXt0xkGFRHrLZbDF7fZeW6Sgrj3RKqN2qRe14DkTWK7D2lij/MLnNotDO7ZB21EHyeaH95VlIXZ0ZuW5nZ2fKG0IQZZIQIqnd8wDghOAEFIQjfR6/0jZEdWUg6ktfC8vaWmS0NMX+sMXklij/MLnNItPU6QgtvBgAIFxO2F/9C4Q7M+1pmpuboet6Rq5FlI5kk1sJUk9bsMNKMxrkvssZiI4Vb6xNnhqAJEU+LNVtjb3ZUCgUgsfjGbDYKHc5HI4B+UfZl/XkNhgM4pFHHsEtt9yCr33ta7jjjjvw4Ycf9ty/d+9e/Mu//AuWL1+Ob3/729iyZUv2gh0A+txT4D31DACA3NUBx2svQfiiV/+mKhQKobW1td/XIUqXqqpJ7144MzAdihH5anmdmW3BKDUmkynmwjCr1cC4qkinhPptKuK1Z+/q6op9BxENSVlPbsPhMEpKSnD//ffjueeewx133IEnnngCtbW1CIVCuP/++3H66afjueeew5VXXokHHngg75pv++aeiuDcyCpxua0F9tdXAIFAv6/rcrngTnNrX6JMsNmSa+1lNsyYHqgGANSbdsIp8utvnAZevNnb6iOlCV6vhP17Yve89Xq93AiHKI9kPbk1m8247rrrMHLkSEiShOnTp2PatGnYtm0bNm3aBL/fj2XLlsFkMuHcc89FRUUF1qxZk+2wM0sIhM5eCP/0mQAApekQ7G+9AoSit41MVUtLC0IZuA5ROpItTQCAOb7IwjJDGFivbRqokChP2Wy2mC3nqiYGoWmREq3aOKUJAGtvhyOn0zkg/yj7sp7cHs/n82HHjh0YP3489u3bh/Hjx/fa/3vChAnYt29fFiMcIELAc/b5CEyaAgAwHdwP2zuvI+73aEnSdT1mmxyiwaAoStJ9REv1EowPjgUAbNS2Igh+KKPkSZIU85sCRQEmTY3Myu7eaYLPF7vncldXF9cpEOWJtPrcDhTDMPDLX/4SkydPRk1NDerr66NerGw2W1Txf2NjIxobG3t+1jQNo0aNivkYQoiM9DTsvkZ/ryVJUk/yLikKvBdeBhF8Baa9u6Du2QW8/w68Fy4Cktg0o3vWQgjR6wNBIBCA0+lMuf9trj1XQG7GBKQWlyRJcTc1yMXfr78xFRQUIBAIxB2fx5obOAl7Tfvhk3yo07ZjVnBGr/slSeqJJRPPVTbHQSLZ/O830ONzIJ/zwsLCmIvDps0IYssGDXpYYFe9hhNnR5d9GYaBrq6unPib6ZaL4zMXYyI6Xs4kt4Zh4PHHH0drayvuu+8+CCFgsViiXqg8Hg8sFkuv25588kn89Kc/7fn57rvvxgMPPBD3sZJd5JKMgoKCfp3v8XhgHGnA2NOr8cproL/4DKT9e6HWb4NstUJPMsEFEPX8AJH+txaLJeXdeHLpueqWizEBycdVXFyccIe/XPz9+hNTQUEBvF5vzziPNT67nYjp+ND4BG2iHessm3Cq6WQIHH2uCgoKUFxcnJG4jo8xU4b6f7/BGp8D8ZwXFxfD4/FE1c+OGWegqFhHR7uEum0aTpkf+62vvb0dEyZMyGhMmZCL4zMXYyLqlhPJrWEYeOKJJ7Br1y78+7//e08CNm7cOKxYsQK6rvfM9OzevRsXX3xxr/Nvu+02LF68uOdnTdPQ3t4e87FsNltGFlnJsoyCggJ0dXUh3I/SAafTCY/HA1VVETh2EdmlS2B7+c9Qmg5DXv8lgrIC//yzEl6r+wPBsYnEserr6zF69Oi4s2bHy7XnKldjihXXsQnY8drb2+MmD7n4+2UiJsMw4PV6E47PbrPVmXjf8hGaRDPq/NsxLjym576urq6e5y4TcQ30OMiFuGLFlM3xOdDPuSRJPZMiwaCBzz7xofFgGMGQA0ABGg5IaDjoRlFx7xKE7t+5qakJJlPshWfpxpSuXByf2XztJEpWTiS3Tz75JOrq6nD//ffDarX23D5z5kyYTCa88soruPzyy7FmzRocOnQIp59+eq/zKysrUVl5dPvalpaWuH90hmFk5A+yWzgc7tf1dF3vqfPqVe+lmOC67Ao4Xv4z5PY2mL/8HLrJBP+RrgqxdCethmHErB3z+/1obm5GWVlZUrHl2nMF5GZMQGpxJarry8XfLxMxHfstTLzx2W26rxofmz9FQATxpboeY9xHS4x0Xe+JJZPPVTbGQTKy8d9vsMbnQD3nFoulpw3i3z/z41Bj+MjtHridkdnGbZsVnHpG741uul8/29vbUVpamtGY+isXx2cuxkTULevJbVNTE9566y2YTCbcfPPNPbcvX74cV199NX70ox/h0UcfxbPPPouKigrcfffdw6ZJsmGxwrl4ORwrnofs7IL1s49haBoCJ85O+5pOpxMWiyXpFk1EmWC1WpPeFlqDihn+aVhn3ogdpt3olLpQqGfuK1DKbyaTCZqmwefz4eCBMIwjubqshGFS/QgGNNRuUXHKfF/MSi+Xy4WioiLWgQ4DO3YMzHbfNTU1MW+/6aab8Oyzz/Yqw9i6dSvGjRs3IHEMZ1lPbsvLy/Haa6/Fvb+qqgoPP/zwIEaUWwy7A64lV8Gx4nlIHjesq1YCJg2B6mlpX7OlpQWapsXcj51oIEiSBKvVmrAc4Vg1/pmRzRwEsE7bhHO8ZwxwhJRP7HY7fD4fJAEcOydosXoQDGhwOWU0HlQwakzsjhxdXV38epwGxD//8z/joYceynYYeS/nWoFRNL2wCM7Fy6FrZggA1pVvw7Q7/U+c3e3Bkk00iDIhlZ63xXoRJgTHAwA2q1sRQP83NaHhw263Q5IkjKtSII55lzNbvRAi8rpXuyVxz1u+PhIAhMMGttcFsG6tD9vrAgiHOS6GAk7dDRF6aRlcl18Jx6svQASDsL3zBlyXXYHQmPS+zvD5fOjo6ODsBA0aq9Wa0mKWOb5Z2G3aC78UwFa1HrMDJw5gdJRPur8pmD1XBwxgz54QYACVlRIc9gB21mvYUa/izPM8iLV2LBwOw+12p/SBjIaeX/7HwJQ4Pv18/Pt+85vf4De/+Q3Gjh2L7373u73KMSlzmNwOIeGKkXAtWgb76y9BhMOwv/kKnEuuQnhkZd8nx9DR0ZFWe7DjGeEwfH/7K4JbNkGYTNAWnA215uR+XZPyjxACDocj6e2zx4fGoiRcjDa5HWu1dehwtqPF1YYR8ggss1wOB4ZH7T2lx263w+12Y+6pKuacEslghRDYtyeS3AYDArt3mDBlWuxtd7u6upjcUkZ95zvfwcMPP4zi4mKsXr0ay5cvR2FhIa688spsh5Z3WJYwxIRGj4X74sthSBJEKAj7Gysgtaa/A1lzc3O/V6p6XvgT/O+/C73hAMJ7d8Pz7B/g/+LTfl2T8lMqvTEFBGqObMnbqXRhj7IfLXor1gU34ufOX8KtRzfrJ+pmsVh6OiAIIXpafY0ZF4LVFlllVrdVi3u+3++Hz+eLez9RqubMmYOysjLIsoxzzjkHd9xxB1588cVsh5WXmNwOQcGqE+BeeDEMAJLfB8drL0HqiN3Xty+hUAgtLS1px6J3dSL45d97bxNsGPC982ba16T8ZbPZku6zDAAzAtVQ9MiqdZc9UtIQRhhOw4W/e74ckBgpPwghYnaFkSRgyrRIDff+vQrcrvgbVnR1dQ1YfESSJLG2e4CwLGGICk6ZBk8gANuqv0HyuGF/7S9wL78WOKZPcLI8Hg86OztRWFiY8rlGjK0uAcDgjAfF0J1wdHZ2JnW8CSaUe0egwXYIfnMAkjsy0yZBRGZuk9u0j4Ypu90Op9MZdfvUGX6sX2uGYQjUb1NRM88f83y3241QKMTOMnnqu3dFj41jhcMGVr7jQXv70cmb4hIZCy+0QpZTf/F54YUXcMkll8Bms2HNmjV49NFH8cgjj6R8HeobZ26HsMCJJ8Fz+pkAANnZBdsrLwCe9HafaWtrS+srOKm0DOL47VQlGcr4qrTioPyXah3jDF81cGRyI2iKtG4KIYwT1Mxsk0r5y2w2x0xMS8t0lJVHxlLtVg2JJs84ezt8ybLAwousmHOyGVOmqphzsjntxBYAHn30UYwdOxaFhYW47bbb8O///u+45pprMhw1AUxuhzz/nFPgnXMKAEBub4PywjOAP/YsRF/Sqb8VJhNsN90GaBogJEAISCUlsH7t+rRioPxnNptTKk2YKWagxF8EAAiZIuNzkXYRppqnDER4lGfifZiaOiNSmtDWIqOlKf6GDU6nM+GubZTfZFlgcrWKmrlmTK5W005sAeCjjz5CR0cHnE4ntmzZgttvvz2DkdKxmNzmAd9pC+A78SQAgDjcCNvrLwHB2CuAE/E3HEDDu2/D//GH0N3JrWgHAOWESSj4wb2w3XwbbLd+G44774ZUWJTy49PwEK8WMtHxCwNnH/kBWGxehIst5w9QdJRv4o21yVMDPT1v67bG73mr63pKLeyIKPtYSJQPhID3rIWQggGoddugNB6E/a+vwXXpUiDJLSQDWzcjtHUT/JIEuLpQsPJd2O6+FzDFf9E/lmR3QJo2I/3fgYYVm80WsxYynrHh0TjZV4OTLbMxQ5s+gJFRvlFVFaqqIhDovRGI1Wpg/IQg9uxSUb9NxRnnxP/Gq7Ozc9hs+z6cTJo0Kdsh0ADhzG2+EALehZdAn1wNADDt2wPbe28BSXydpju7ENq66cgPOrosdvgCQXS8+OxARkzDWKqlCQICZ3vnY5wY29PSiShZ8UoTqqdHEl6vV8K+PfHneoLBIDxxFs8SUe5hcptPZBnhxct7di1Td9bD+uF7SLhaAoDhcgLHJgwCaHcUwNfYMJDR0jCWamkCUX/EG2tVJwShaZEJgNrNib+l4sIyoqGDyW2+URS4Fy1DqCKya5m2bTMsn6xKmOAKiy3q/rCioKNiFHvw0YBhckuDRVGUmDsxKgowqTqyPmHXTgU+b/xreL3eqNIGIspNTG7zkarCddkyhErLAADmDV/CvPazuIdLRUVQJpxwdPZWSIAkQ557Ctra2gYjYhqGUi1NIOqP+KUJkVpbPSxQuyXxeOTsLdHQwAVlecowW+C6fDkcLz8PubMDli/WwFA1+E+aE/N405x5kErLoLe2ACYVysRJkIuK0dXVBU3TuMc6ZVx3aUIqC8uI0mWNs8HNyFFhFBaF0dkhY9MGgSkJ1iu6XC4UFxdDTnKhLuU2LhLMX5w2yWOGzQbX4qugH0lMrR9/AHXb5pjHCiGgVE2EOvcUqLNmQzommW1paYE/zd65RInESziIMk2WZViO33AGkS+suheWNRyQ0NEe/23RMAzO3hINAUxu85xeUADn4uXQzZEXdesH78K0sz7mseHWZnjfeROel1+A9503EWxuAhB5QW9qakp5gweivlgsFpYm0KDpq2sCANRuMSW8htPp5FoEohzHd5VhQC8uhWvxlTBUFcIwYHv3TSj79vQ+xtkF/6r3YTi7gHAYhrMLzvf+Ct0ZmaUIhUJoamriizpllBCCs7c0aKxWa8xWcgWFOkaPjWzHW7dVTdhgJhwOw+VKfpMbIhp8TG6zbLB6doZHVMC5aBkMRYHQddjffhVy48Ge+0P79gLHv6AbRuT2I3w+H1pbWwclXho+2DWBBoskSXE/THVvx9vVKaHxYOLlKJ2dnRmPjYgyh8ltlpWVlaGoqGhQHis8agxclyyBIUkQoRAcb6yA3Hw4cqcep+TguNudTidrziijki1NCBgBtIRb4TdY/03pi/dhatKUIBQl8gm/dkvinrfc1IEotzG5zTIhBIqLi1FVVRWzD2OmhcZVwX3BIhhCQAQCsL/+EqT2NsgVlYBx3G5mhg65YmTUNVpbW/nCThmTTGnClkAtXvK+hifdT+GuznuwNrBukKKjfGO1WmN+mFI1YMq0SHK7o15FKJj4Opy9JcpdTG5zhKqqqKysRFlZ2YAvsAlOmgLPuRcCACSvF47XXoTJbIFac/IxvW4FrKecBrk8OrkFgObmZjY0p4xJlNzuCx3AxtDRLh8hhPAHz7PYG9g/GKFRnkn0YWrGrMgH/GBAYNeOxAvLfD4fu8gQ5SgmtznG4XBgzJgxA16HGJh2IjwLzgEASC4X7K+9CNPIUbBcfgXMF1wa+d8p0+Ker+s6Dh8+zA4KlBEWiyVu/XlDuDHqNhkytvpqBzosylNxt+OdaMBmiyS4dVu1Pq/D2Vui3MTkNgfJsozy8nJUVFRAUQZunw3/SXPhnXd65DE7OyIlCroOqbAQQk1ccwZEOigcOnQIuq73eSxRIokW+shCgcDxia8BRXAPGkpPvDpvSQKqp0fqEfbvVeB2JV7w63a7EQqFBiRGIkofk9scZrVaMXr0aBQWFg7YY/jmnQ7fkV3LlNZm2N9YAaRQbhAIBNDc3MwWYdRv8ZLbifJ4GMe08hAQkKFgrmX2IEVG+aZ7d7xYursmGIZA/ba+P+RzgS1R7mFym+MkSUJJSQlGjRoFNYnZ1JQJAe8Z58A/7UQAgHK4Efa3XwVSmI3weDxsEUb9Fq8HaalcgnO0BbALGxQoGCWNxD857kCJUpyFKClfxPswVTpCx4jyyOtf7VYtYc9bIJLc8tsrotzC7/WGCE3TMGrUKHR0dKCjoyOzFxcCnnMugAgEoO6sh+nAPtjefRPhpVfFPFx3uRBc93foXZ0QFitMJ82FE5FyiuJiJhyUHkmSYDab4fV6o+6rlEficsslKC0oRUFBQRaio3zTXZoQKzGtnhFAc5OCthYZLc0yRpTHX1vQvSXvYLV0JKK+ceZ2COluGzZ69OjMz+JKEtwXXILguCoAgLp7B0zvvIHjpy0Mvx/+D95DuOkwDK8Xelsr/B/+DXpnJOnmV3TUH9zQgQZLotKEyVMDkKTIa19dHz1vgcjsLUuziHIHk9shSFVVjBo1CsXFxZnd4UxW4Lp4MYKVowEAytZNsKx+v1eCGz64H0YgcFzSayC0aweASA9cbk1J6eJWvDSY4iW3VquBcVWRhWX1tSr6agrDLXmJcguT2yFKCIGioiKMGjUKmtZ3y5qkmUxwLVqGUFk5AMC8aT3Mn3/Sc7cRDB7thdtzowHjmBrd5uZmbvJAaZFleVA2MyECALPZHLevePWRhWVej4T9e/uu4GNbMKLcweR2iOve/CGjta6aBtfiK6GXlAIALF9+Du2rvwMApLLy6K16hYA8orzXTU1NTUxwKS0sTaDBkqg0oWpiEJoWqcet3dL3BAK35CXKHUxu80D3LO6YMWMyNotrWKzwL78WYUdk8Y7104+gbtkIubQ0spPZMZSJkyGPn9D7fMNAU1NTzMVBRImwNIEGU7zkVlGASdWR0oQ9O03w+fouAcv4Yl8iSgu7JeQRVVVRXl4OwzDQ1tbW/ws6CuBavByOFc9D8npg/fA9GKoKTJ4KedRo6C4XhMUCye6IebphGDh8+DC7KFBKFEWBpmnc2pQGRaLShKkz/NiyUUM4LLCjzoQTT0rcA9zv98Pn88HhiP2aSESDgzO3eUYIgZKSElRWVmZkdzO9qBjOJcuha2YIALa/vQ3Tnp0QFivkEeVxE9tuhmHg0KFD/LqOUsLZWxosiUoTKirDKCyOlGElsx0vwNpbolzA5DZPmc1mjB49Gna7vd/X0ktHwHXZFTAUE4Suw/bXN6Ac3J/0+YZhYN++fSxRoKSx7pYGU7zxJgQwdXpktvZQg4KO9r7fMj0eDwIp7PJIRJnH5DaPSZKEESNGoLy8PO7XbskKj6yEa9FSGLIMEQ7B/ubLkA8fSvp8zuBSKkwmE0wmU7bDoGEiUWnClGlHE9W6rcn1F89IWRgRpY3J7TBgs9kwevTofi82C40ZB/eFl8EQAiIYhP31lyC1tiR9fncNrtvt7lccNDxw9pYGS6LShIJCHaPGRBaW1W1V+9yOFwCcTidCKWxhTkSZxeR2mFAUBZWVlf3eIjI4cRI8Cy8GAEh+Hxyv/QVSZ0ef5+l+HwJ12xDYshGN69dxJzPqE+tuaTAl+jA19UjPW2eXjMaDfa9l6N6Sl4iyg8ntMNK9fe/IkSMhy3La1wlUT4fnrIUAAMnjhv21v0C4nHGP170etL3yFwQ2rkeobhv8az5C4/t/Q3t7e9oxUP7TNC0jiyKJkmGxWOK+Lp4wOQBFiUzZ1iaxHS8Qmb3VdT1j8RFR8pjcDkMWiwWjR4/u105Q/pmz4T1tAQBA7uqE47WXILyx62kDG9ZB9/kBQweOvNiHtteidc8utLS0cE92iouztzRYhBBxF+CqGjBhUmT2dke9imCw7+vpus7ZW6IsYXI7TMmyjJEjR6KwsDDta/jmnAJfzbzI9dpbYX9jBRCI7k2qd3VGEttjCQmGywWn04mmpibOcFBMTG5pMBUUFMS9r7s0IRgQ2L0jucWOTmf8b7SIaOAwuR3GunviVlRUpNdNQQh4Tz8T/hknAQCUpsOwv/kKEOo9rSHZHYA47vqGDmGN1Lh5PB40NjYiHD5uW18a9hKtYifKNJvNFne8jRkXgs0e+RCebM9bvqYRZQffNQhWqxWjRo2CqiZXS9aLEPCcdR4Ck6cCAEwNB2D76xvAMS/q6qwaCJMSSXCFAISAPH4CpOKSnmMCgQAaGhrYH5J6EUJw9pYGTaLxJknAlKmR16f9exW4XX1vx0tE2cHklgBE+opWVlaml0hIEtwLL0agaiIAQN27C7a/vd1TXyvZ7ShZuhzqtBlQJk6CevKpUE8+FUL0fnMIhUJoaGhgL1zqhS3BaDAlGm/VMyJlV4YhULctjckAIhoUTG6phyRJqKioSK9dmCzDfdFlCI4eCwBQd9TBuupv6G4KKVttUE+cBbXmZCjjJ0Qltt26e+F2dHSk+VtQvjGbzXHHC1GmWa3WuOOttEzHiPJI/9q6rVpSPW+JaPAxuaUoxcXFKC8vTz2hUExwXboUofKRAABt6yZY1nyEdN4B2tvbudCMAEQ+dFkslmyHQcNEd2lCOGzgyy8CeOVFD1550YO1nwcQDhmoPrKwrK1FRktT+i0ViWjgMLmlmGw2G8aOHZt6P1xVhevyKxAuKQMAmNevhbb287RicLvdaGxsRDCZvjuU11h3S4PJarXiyy8C2LM7hFAICIWAvXtC+PLvAUyeGoAQkQ/syW7HS0SDi8ktxWU2m9NaaGaYLXAuvhLhgqLIdT5bDenLL9KKoXuhGbfsHd6Y3NJg0jQL9u3Re3UwNHRg354wNE3H+AmRD9z1tSrYEIEo9zC5pZiMYACBgwcguV2orKxMecMHw2aHa8ly6LZIU3T5b2/DtG1zWrHouo6mpia0tbVxw4dhSpblfm06QpQaCX5fnHZfBlA9PVKa4PVI2L8nuZ63RDR4uLclRQnt3A7X73+DTp8XAGCqORkVX7seLW1tKc2g6gWFcC5eDsfLf4bk88Ky8q/QTSYEJ05OK67Ozk7s378fDoeD27IOQ5y9pcFiMgmMKLfB6fL1zN4KCSgpkSArAlUnBKFpOvx+CbVbVVSdwNIpolzCmVvqRXc64fqfJ4AjiS0ABDesg3/lOygvL0+4g0/M65WUwr1kOQxVhTAM2N55E8r+PWnH5/P5cPDgQbYLG4aY3NJguub6UhQVHX2LLCyScNqCyGyuogCTqiMJ7Z6dJvh87OZBlEuY3FIv4QP7ELVxuh5GcMsmAEBpaWnKrcL08pEIL78WhqxA6GHY33oVcuPBtGPUdR2HDx9mmcIwYzKZ0ttohCgNhUUmLFpShEVLLFi0xIKFF2qwWI4msdXTIz1vw2GBHXUsTSDKJUxuqUdo53YE62vRaxXFEcJ09MW7uLgYJSUlMAwD4UONCO3agXDT4YSJpjF2PDyXLoEhSRChEOxvvgy5palf8XZ2dqKhoYHdFIYRTUtu21OiTLDZbLBYBSxWEdUaceSoMAqLIqvJkt2Ol4gGB5NbgmEY8Lz0PFxP/AqBT1dHHyAEtDPP7XVTgcMB26qV8H/8IQLrv4T/o/cR/PKLhAluqGoi3OdfAgOA5PfD/tpLkDra+hV7IBDAwYMH4XQ6+3UdGhq4mQMNpkSlMEIcXVh2qEFBRzvfTolyBf8aCaFtmxH47JPIZguh0NE7TCaI4hJYr74O6uw5vc4JfPYJtNrNKO5sB8KRmd7Q3t0INyQuNwhOngrPuRcAACSvB45X/wLh7OpX/IZhoKWlBYcPH0aYfXmIKEMURUn4bUF3cguw5y1RLmFyS5GENMZmDdZ5p6Hwh/dBnXdajHMOALoOq8+L4q52wAAgBIzO9j4fLzB9FjxnnA0AkFxOOF77C0QGFoh5PB4uNiOijLLZbHHvKyjUMWpMpCyqbqvasxljOGxg/VcBvL7Ciwd+0om//dULXef6AKLBwuSWIBwF0VvkyjLkBJ0RhKMAkCLD52iCa0BoyfUi9c8+Gd6TI0mz3NEO++t/gfD70vsFjhEOh3H48GG0tLRw614i6re+unR0z946u2Q0HIi0KPzsEzd2bg/B6zXQ3mbg3bf8eOfN/r++EVFymNwS1NlzIZWUHZ29lSQIsxmO8y6Me442/ywIi/VoghsMoASAPH5C0o/rO2U+fDNrAABKSzPsb7wc3akhTU6nEwcPHoTPxzcUIkpfX106Jk0JQFaObscbDBjYvTPQa12urgOrP/CzuwvRIBFGHv61dXV1xa2TUhQFoWPrStMkhICqqggEAhl5wcpEXP2JSfd60PnGqwg2HIBSOgIFixbDPKI8YUzhzg50vvEqQi1NMFWORuGiJegKBtHUFN0FIe7vZxgwvfMGlC0bI9ccPwGBpVdHGknGIElSyjOyRUVFKCsrgyQd/SyX6nNlGAZ0twtCViBZLFH3H//7JarT83g8kGOUgcS6TroyOT5zMaZMxZWLMWU6rlgxZXN8DsXnvLW1Fa2trXHPffMVE2q3KFBVAzfd5sGrL3UAAAxDoKlxFIDIPMBj/zMGkpT8oshcfK4GOiZ2RKFMyMttngKBAAKBQMz7HA5HRlbWy7IMVVXhdrszsogpE3H1Nybl4st6BoQXgBIKJY5JkmFafAW6m4S5dR2yLMNqtaKt7WgXBEmSoCgKAoFAzMTUd9ZC2LweqLt2QN67G/LrK+C+6LKeWeFjmc3mlGdjDx06hNbWVpSVlfVs4ZrKc6W3t8H11JPQj/TmNZ04C9Z/uBHimBfh4//79ZU8xJOL4zMXY8pUXLkYU6bjihVTNsfnUHzODcNI+LozeWoItVscCAQEdu80YHfIcLvCPdVesgxUTZThdrsyFlM6hsJ/Pya3lAksS6CMKywsRGFhYfInSBLcFy5CcOx4AIC6azusH7wbXQfcD8FgEI2NjWhtbU1p5tfQdbh+9zj0w41Hr7VtCzwvv5Cx2Igot2malnDL7zHjQrDaIq8rdVs1nHuBHeZjNnwYUSHhupviL0wjosxicksDoqSkBA6HI/kTZAWuS5YgNDLyFZ5WuwWWjz/IaIILREpWDh48CK/X2/fBAPSOduiHD0WK5rqFwwhu2pDRuIgotyXqmiBJQPW0yLeF+/cqkCUZF19mxgWXmPHPP3Dgn+5yoKCQb7dEg4V/bTRgSktL+1xp3IvJBNdlyxAqHQEAMG9cB/MXazIeVygUQmNjIw4dOtTnLK6IURoRuYObCRANJ312TZgR2Y7XMAS2bVEgywLFJRJGjZYhy3y9IBpMTG4pIcMwYHi9MNJoqyWEQHl5eU+da1KPp5nhWnwlwkXFAADL2s+grV+b8mMno729Hfv3709YYygKiyBXTezdB1iWoZ5y+oDERES5SdO0uAvtAKC0TEdZeWRh1NaNcqa/dCKiFDC5pbh8ddvQde8P0Pnj76Pz7n+Gf02MrXn7IIRARUVFwlY6xzOsNjgXL4duj5Q1WD9ZBXXrxpQfOxndfXGbmppiLo4QQsD2jVuhTK6OfPeomKCetgCWRUsGJB4iyk1CiD5nb6fOiJQmtDRLaGmKnwgT0cDKy24J1H/h1hZ0PPKfR/vOhkLwvvwCpMIimGbMTOlasixj7NixcDqdSS/mMhwFcC5ZDseKP0PyemD94D0YJg2YeVKqv0pS3G43vF5vzFphyWaH/Zb/G5m9FgKCJQlEw5LVak3YbWDy1AA++dACwxCo26qifCT7bBNlA2duKaZQ3bboxVyGgcCGr9K6nqqqqKioSCkx1ItK4Fp8JXRVgwBg+9tbkHbvSOvxk3o8XUdLSwsaGxtjtpITksTElmgYs1gsCV8DrFYD4ydEJgTqa1VkoFMWEaWByS2lph/JndlsxogRI1I6J1xWDtdly2AoCoSuQ33tJSgNB9KOIRk+nw8NDQ1ob2/njkJE1COZ0oTqI6UJXo+EfXv45ShRNjC5pZhMU2dEdwoQAursuf26rs1mQ1FRUUrnhCtHw3XpEhiSDBEKwf7Gy5CbDvcrjr4YhoGOjo6U2oYRUf7rK7mtmhiEZj6yHe+W5NcaEFHmMLmlmKSSEoz47vchCo5sxqBqsFx1LUzTZvT72sXFxQl7RsYSGlsF94WLYAgBEQzA/vpLkNrib4eZKcFgEIcOHUJzc3NGduMhoqGtr+RWUYDqaZHXil07TfB4Uu80Q0T9w+SW4tImTUHhTx5A4YP/hcIHHoaWwfZXZWVlKXVQAIDgCZMRvOgyAIDk88Lx2l8gdXVmLKZEXC4XDhw4kJFtPolo6JIkCRaLJeExM2ZFkls9LLDxq+BghEVEx2ByS30SJjXjC6kkSUJFRUXCvpGxhGfMgufMcyPXcLtgf/UvECnu156u7gVnDQ0NMRecEdHw0NfsbeVoHYVFkQR37Rd8rSAabExuKWsURUF5eXnK5/lnzYH31DMAAHJXBxyv/QXCN3h1sX6/H01NTYP2eESUW/pKboUAqqcHYFINlFfICIe5MJVoMDG5pawym80oLS1N+Tzf3FPhO7K4TW5rhf31FQBnU4loECiKAk3TEh5z0hwfbv5WJ66+zsrtd4kGGZNbyrqCggLY7fbUThIC3vlnwz89sqGE0nQI9rdeAUKhzAdIRHScvmZvVQ0wmQYpGCLqhckt5YR0FphBCHjOPh+BSdUAANPB/bC98zrYOZ2IBlpfyS0RZQ+TW8qI4PY6+D54D/4vPoXh96d8vhACFRUVkI7vrdsXSYL7/EsQHD8BAKDu2QXr++9E765GRJRBqqrCxKlZopzE5Jb6zfvWa3D/5lH43nkL3peeh/O/HoLucad8HUVRUt7BDAAgy3BddDmCo8YAALT6bbCuWskEl4gGFGdviXITk1vql9CBffC//24kkQwFgXAYekcbfG+/ntb1rFZryjuYAQBMJrgWLUVoRAUAQNuyAZbPVqcVAxFRMpjcEuUmJrfUL3rT4ciWPMcKhxFuOJj2NYuKivpskh6TqsF1+RUIF5cAAMxf/R3al5+nHQcRUSKapqXcq5uIBh6TW+oXUVAYvYBLkiAdSTDTuqYQGDFiRFpvGobFCufi5Qg7CgAA1s8+hrp5fdqxEBHFI4Tg7C1RDmJyS/2inDAZyvQTge5EVJYBkwrzxZf167qyLKe1wQMAGHYHXEuugm61AQCsq1ZCrdvWr3iIiGJhckuUe5S+DyGKTwgB2w23ILBmNUL790Ky26EuOAdySeobMxzPbDajuLgY7e3tKZ+rFxbBuXg5HC//GZLfB+vKt2GoJgQnTOp3XERE3SwWC4QQMLiAlShnMLmlfhOyDO3Mc5B4v570FBUVwefzwetNfXtdvbQMrsuvgOPVFyGCQdjeeQOuy65AaMy4AYiUiIYjIQQsFgs8Hk+2QyGiI1iWQDkv3fpbAAhXVMK1aBkMWYYIh2F/8xXIhxozHCERDWcsTSDKLUxuKefJspxe/9sjQqPHwn3x5TAkCSIUhP2NFZBamjMYIRENZ0xuiXILk1saEiwWS3r9b48IVp0A98KLYQCQ/D7YXn0BaG/LWHxENHzJsgyz2ZztMIjoCCa3NGQUFRX16w0kOGUaPOdcAACQPB4oz/8vhMuZqfCIaBjj7C1R7mByS0OGEAKVlZWQpPSHbWDGLHhOPytyva5O2F55AcLLhSBE1D9MbolyB5NbGlJMJhPKysr6dQ3/nHnwnXwaAEBub4P99ZcAvz8T4RHRMGUymWAymbIdBhGByS0NQTabDQ6Ho1/X8J+2AOE58wAASnMT7G++DASDmQiPiIYpzt4S5QYmtzQklZSU9G+WRAjo51+CQPV0AICp8SDsf30teithIqIkMbklyg1MbmlIkiSpX+3BAABCwHv+JQhMOAEAYNq3B7b33gJ0PQMREtFwYzab0+7JTUSZw+SWhixN01BcXNy/i0gS3BdehuCRXcvUnfWwfvgewK00iSgNnL0lyj4mtzSkFRYW9r+/pKLAdckShCoqAQDats2wfPIhE1wiShmTW6LsY3JLQ5oQAiNGjOhXezAAgKrCddkyhEojnRjMG76C+e+fZiBCIhpOLBYLhBDZDoNoWGNyS0Oeoij9bg8GAIbZAtflyxEuKAIAWP7+KbQNX/X7ukQ0fAghOHtLlGVMbikv2Gw22O32fl/HsNngWrIc+pFrWT/+AOq2zf2+LhENH5l4LSKi9DG5pbxRWloKRVH6fR29oBDOxcuhmy0AAOsH78K0s77f1yWi4YHJLVF2MbmlvCFJUkbKEwBALy6Fa/GVMFQVwjBge/dNKPv2ZOTaRJTfZFmGpmnZDoNo2GJyS3nFYrGgsLAwI9cKj6iAc9EyGIoCoeuwv/0q5MaDGbk2EeU31t0SZQ+TW8o7xcXFUFU1I9cKjxoD1yVLYEgSRCgE+xsvQ24+nJFrE1H+YnJLlD1MbinvdLcHy5TQuCq4L1gEQwhIAT/sr78E0daasesTUf5RVbV/W4QTUdqY3FJeUlW1/7uXHSM4aQo8514IAJC8XlhWPA+9rS1j1yei/MPZW6LsYHJLeauwsDCjizoC006EZ8G5AADJ5URg84aMXZuI8g+TW6Ls6H/fJKIc1V2ecPDgQRgZ2krXf9IciIAfkqqi6KxzM3JNIspP7JhAlB1MbimvmUwmlJaWoqWlJWPX9M07nbV0REREOYplCZT3HA4HLBZLtsMgIiKiQcDkloaFsrIySBKHOxERUb7juz0NC4qioLS0NNthEBER0QBjckvDht1uh81my3YYRERENICY3NKwUlpaClmWsx0GERERDRAmtzSsyLLM8gQiIqI8xlZgNOzYbDb4fD7ouh73mNDBAwhu+ApGwA+psAjqvNMg2R0wAgEEvvwCgcaD6HR1QjtrIbRzFg5i9ERERJQIZ25pWCorK4OixP5sF246hMCnq2F43EAoBL2tFf4P/gbd74P/k1UINxwEAgEYTid8b78G/6r3Bzl6IiIiiofJLQ1LkiShsrIy5n2hXTt732AYMAIBhPfsht7aAhjHzPjqOvwffzhwgRIREVFKsl6W8MYbb+D999/Hnj17cPrpp+P73/9+z3179+7FI488gj179mDkyJH41re+hRkzZmQxWsondrsdDocDnZ2dve8Ih6IPFoAR63YACMW5nYiIiAZd1mduS0pKcPXVV+PCCy/sdXsoFML999+P008/Hc899xyuvPJKPPDAA3C5XFmKlPJRaWlpVHmCXDkaEKL3gQYgjx4HYTb3vl2WoUzjBy4iIqJckfXkdv78+TjttNNQUFDQ6/ZNmzbB7/dj2bJlMJlMOPfcc1FRUYE1a9ZkKVLKR5IkoaysrNdt8oQToEyqPuYGGdrpCyAXFkI781wI89GtfJVJU2BdetVghUtERER9yHpZQjz79u3D+PHje22ZOmHCBOzbty+LUVE+slgsKCgoQFdXFwBACAH1pBqYpk6D4fND2GwQR2Z3pcIimC+5HIrfh4LRoyEKiyCOn+UlIiKirMnZ5Nbr9UbtJmWz2eDxeKKObWxsRGNjY8/PmqZh1KhRMa8rhMhIE//ua2RqQ4BMxJWLMQGZjWugYiorK4PP50Po2PpZizXy73iSBMVqhan06IxvKnFJkhQ3IR5Oz3l/8W8mOanGNNDjk8958nLxucrFmIiOl7PJrcViiUpkPR4PLBZL1LFPPvkkfvrTn/b8fPfdd+OBBx6Ie21VVTMW5/HlFP2RqbhyMSYgc3ENVEwWiwV79+5NOobi4uK04iouLk442zucnvP+4t9MclKJabDGJ5/z5OXic5WLMRF1y9nkdty4cVixYgV0Xe8pTdi9ezcuvvjiqGNvu+02LF68uOdnTdPQ3t4e87o2mw1ut7vf8cmy3PNVdjgc7vf1MhFXLsaU6bgGOiZFUXrKExIJBoO9xtjxcR2f+B6rvb09bvIwHJ/zbMaVizFlOq5YMWVzfA7X5zzbMWUqroGOKdHYJEpW1pPbcDiMcDgMXdeh6zoCgQAkScLMmTNhMpnwyiuv4PLLL8eaNWtw6NAhnH766VHXqKys7NWztKWlJe4fnWEYGfmDPD7+/spkXLkYE5CZuAY6psLCQrhcrt7lCTHout7rvFTiSrQz2nB8ztPFv5nkpBrTYI1PPufJy8XnKhdjIuqW9eT2z3/+M55//vmenz/55BOcd955+N73vocf/ehHePTRR/Hss8+ioqICd999NxwORxajpXzX3T3h0KFD2Q6FiIiI0pD15Pbaa6/FtddeG/O+qqoqPPzww4McEQ13x3dPICIioqEj631uiXJRcXFx1OYORERElPuY3BLFEGtzByIiIsp9TG6J4uguTyAiIqKhg8ktUQIsTyAiIhpamNwSJcDyBCIioqGFyS1RHywWC1vQERERDRFMbomSUFJSwvIEIiKiIYDJLVESWJ5AREQ0NDC5JUoSyxOIiIhyH5NbohSwPIGIiCi3MbklSoEkSSgtLc12GERERBQHp6CIUmS1WhEIBLIdBhEREcXAmVuiNBQWFmY7BCIiIoqByS1RGoQQ2Q6BiIiIYmByS0RERER5g8ktEREREeUNJrdERERElDeY3BIRERFR3mByS0RERER5g8ktEREREeUNJrdERERElDeY3BIRERFR3mByS0RERER5g8ktEREREeUNJrdERERElDeY3BIRERFR3mByS0RERER5g8ktEREREeUNJrdERERElD8MSktDQ4Nxzz33GA0NDdkOpUcuxmQYuRlXLsaUSbn4+zGm5OVqXJmQq79bLsbFmIjSw+Q2TV9++aUBwPjyyy+zHUqPXIzJMHIzrlyMKZNy8fdjTMnL1bgyIVd/t1yMizERpYdlCURERESUN5jcEhEREVHeYHKbpsrKStxzzz2orKzMdig9cjEmIDfjysWYMikXfz/GlLxcjSsTcvV3y8W4GBNReoRhGEa2gyAiIiIiygTO3BIRERFR3mByS0RERER5Q8l2AENNMBjEE088gQ0bNsDpdKKsrAxXXXUVzjnnnKzG9eijj2Lt2rXwer1wOBy48MILcfXVV2c1pm5dXV341re+hcrKSjz88MNZjeW///u/8dFHH0FRjg79xx57DCNGjMhiVJnD8Zk6js/BkatjE+D4TEY+j03KP0xuUxQOh1FSUoL7778f5eXlqK2txX333YeRI0di6tSpWYtr8eLF+OY3vwlN09Dc3Ix7770Xo0aNwoIFC7IWU7ennnoKVVVV8Pv92Q4FALBkyRLceOON2Q5jQHB8po7jc3Dk6tgEOD6Tla9jk/IPyxJSZDabcd1112HkyJGQJAnTp0/HtGnTsG3btqzGNW7cOGia1vOzEAINDQ1ZjChi06ZNOHToEM4999xshzIscHymhuNz8OTq2AQ4PonyDWdu+8nn82HHjh24/PLLsx0K/vCHP+CNN96A3+9HeXl51l8Qg8EgnnzySfzLv/wLdu7cmdVYjvXOO+/gnXfeQVlZGS6//HJccMEF2Q5pwHB8xsfxmV25NDYBjs9kDJexSUMfk9t+MAwDv/zlLzF58mTU1NRkOxzceOONuOGGG7Bjxw58/vnnsNlsWY3nxRdfRE1NDaqqqnLmxfnyyy/HzTffDJvNhq1bt+Khhx6CzWbD/Pnzsx1axnF8JsbxmT25NjYBjs++DJexSfmBZQlpMgwDjz/+OFpbW/Gv//qvEEJkOyQAka/TJk+eDEVR8Nxzz2UtjoaGBnz44Ye49tprsxZDLCeccAIKCgogyzJmzpyJRYsW4ZNPPsl2WBnH8ZkYx2f25OrYBDg+ExkOY5PyB2du02AYBp544gns2rUL//7v/w6z2ZztkKLouo7GxsasPf62bdvQ2tqKW265BQAQCoUQCARw3XXX4be//S2sVmvWYjuWEAL5to8Jx2ffOD6zYyiMTYDjMxn5NjYpvzC5TcOTTz6Juro63H///TnxIuN2u/HFF1/g1FNPhdlsRm1tLd5++2187Wtfy1pMCxYswEknndTz8yeffIIPPvgAP/rRj2CxWLIW18cff4w5c+b0PE9vvvkmbr311qzFMxA4PvvG8ZkduTY2AY7PZOX72KT8wuQ2RU1NTXjrrbdgMplw880399y+fPnyrPVFFEJg5cqV+M1vfgNd11FSUoKlS5di0aJFWYkHADRN67X62G63Q1EUlJWVZS0mAHjjjTfw2GOPQdd1lJWV4brrrsNZZ52V1ZgyieMzORyfgy8XxybA8ZmsfB6blH+Ewe8ViIiIiChPcEEZEREREeUNJrdERERElDeY3BIRERFR3mByS0RERER5g8ktEREREeUNJrdERERElDeY3BIRERFR3mByS0RERER5g8ktEeW0jo4O3Hvvvdi6dWu2QyEioiGAyS0R5bSOjg789Kc/ZXJLRERJYXJLRERERHmDyS0RDarVq1dDCIFdu3b13LZ06VIIIbBx48ae266//nqcf/75mDBhAgDgqquughACQgjs2bNnsMMmIqIhgsktEQ2qU045BWazGatWrQIAGIaBjz/+uNdtQCQJPvPMM7FixQoAwM9+9jN8+umn+PTTT1FZWZmV2ImIKPcxuSWiQaVpGk455ZSeRHbLli3o6OjATTfd1HPbnj17sG/fPpx99tmoqakBAEyePBmnnXYaTjvtNGialrX4iYgotzG5JaJBd9ZZZ/Uksh999BHmzJmDyy67DB999FHPbaqq4rTTTstmmERENAQxuSWiQXf22Wdjz5492L9/Pz766COcddZZWLBgAVpbW7Ft2zZ89NFHPeULREREqWByS0SDbv78+TCZTFi1ahVWr16Ns846C4WFhZg1axZWrVrVk/ASERGlisktEQ06q9WKOXPm4He/+x0aGxtx5plnAojM6D7//PPYvn17T3KrqioAwOfzZS1eIiIaOpjcElFWdNfdzpw5E8XFxb1uk2UZ8+fPBwCMHDkSRUVFeO655/DJJ59g7dq1CAQC2QydiIhyGJNbIsqKs88+GwB6lR+cddZZEEKgpqYGDocDACBJEp566ins3r0bCxcuxLx589DQ0JCVmImIKPcJwzCMbAdBRERERJQJnLklIiIiorzB5JaIiIiI8gaTWyIiIiLKG0xuiYiIiChvMLklIiIiorzB5JaIiIiI8gaTWyIiIiLKG0xuiYiIiChvMLklIiIiorzB5JaIiIiI8gaTWyIiIiLKG0xuiYiIiChv/H8TOYAMJj+eSgAAAABJRU5ErkJggg\u003d\u003d\n"
          },
          {
            "type": "TEXT",
            "data": "\u003cggplot: (8746658285353)\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885791251_758930573",
      "id": "paragraph_1580885791251_758930573",
      "dateCreated": "2020-02-05 14:56:31.251",
      "dateStarted": "2021-07-26 03:16:13.879",
      "dateFinished": "2021-07-26 03:16:14.602",
      "status": "FINISHED"
    },
    {
      "title": "",
      "text": "%md\n\n# bokeh\n\n[Bokeh](https://bokeh.pydata.org/en/latest/) is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, and to extend this capability with high-performance interactivity over very large or streaming datasets. Bokeh can help anyone who would like to quickly and easily create interactive plots, dashboards, and data applications.\n\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:14.679",
      "progress": 0,
      "config": {
        "tableHide": false,
        "editorSetting": {
          "language": "markdown",
          "editOnDblClick": true,
          "completionKey": "TAB",
          "completionSupport": false
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/markdown",
        "fontSize": 9.0,
        "editorHide": true,
        "results": {},
        "enabled": true,
        "title": false
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003ebokeh\u003c/h1\u003e\n\u003cp\u003e\u003ca href\u003d\"https://bokeh.pydata.org/en/latest/\"\u003eBokeh\u003c/a\u003e is a Python interactive visualization library that targets modern web browsers for presentation. Its goal is to provide elegant, concise construction of novel graphics in the style of D3.js, and to extend this capability with high-performance interactivity over very large or streaming datasets. Bokeh can help anyone who would like to quickly and easily create interactive plots, dashboards, and data applications.\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482814_1997313050",
      "id": "20180118-092227_1380687854",
      "dateCreated": "2020-02-05 14:34:42.814",
      "dateStarted": "2021-07-26 03:16:14.703",
      "dateFinished": "2021-07-26 03:16:14.709",
      "status": "FINISHED"
    },
    {
      "title": "Bokeh Example (1)",
      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook, show\nfrom bokeh.plotting import figure\n\noutput_notebook()\n\nfig \u003d figure()\nfig.line([1,2], [3,4])\nshow(fig)\n\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:14.803",
      "progress": 0,
      "config": {
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "colWidth": 6.0,
        "editorMode": "ace/mode/python",
        "fontSize": 9.0,
        "results": {},
        "enabled": true,
        "title": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1002\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n"
          },
          {
            "type": "HTML",
            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d \u0027application/vnd.bokehjs_exec.v0+json\u0027;\n  var CLASS_NAME \u003d \u0027output_bokeh rendered_html\u0027;\n\n  /**\n   * Render data to the DOM node\n   */\n  function render(props, node) {\n    var script \u003d document.createElement(\"script\");\n    node.appendChild(script);\n  }\n\n  /**\n   * Handle when an output is cleared or removed\n   */\n  function handleClearOutput(event, handle) {\n    var cell \u003d handle.cell;\n\n    var id \u003d cell.output_area._bokeh_element_id;\n    var server_id \u003d cell.output_area._bokeh_server_id;\n    // Clean up Bokeh references\n    if (id !\u003d null \u0026\u0026 id in Bokeh.index) {\n      Bokeh.index[id].model.document.clear();\n      delete Bokeh.index[id];\n    }\n\n    if (server_id !\u003d\u003d undefined) {\n      // Clean up Bokeh references\n      var cmd \u003d \"from bokeh.io.state import curstate; print(curstate().uuid_to_server[\u0027\" + server_id + \"\u0027].get_sessions()[0].document.roots[0]._id)\";\n      cell.notebook.kernel.execute(cmd, {\n        iopub: {\n          output: function(msg) {\n            var id \u003d msg.content.text.trim();\n            if (id in Bokeh.index) {\n              Bokeh.index[id].model.document.clear();\n              delete Bokeh.index[id];\n            }\n          }\n        }\n      });\n      // Destroy server and session\n      var cmd \u003d \"import bokeh.io.notebook as ion; ion.destroy_server(\u0027\" + server_id + \"\u0027)\";\n      cell.notebook.kernel.execute(cmd);\n    }\n  }\n\n  /**\n   * Handle when a new output is added\n   */\n  function handleAddOutput(event, handle) {\n    var output_area \u003d handle.output_area;\n    var output \u003d handle.output;\n\n    // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n    if ((output.output_type !\u003d \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n      return\n    }\n\n    var toinsert \u003d output_area.element.find(\".\" + CLASS_NAME.split(\u0027 \u0027)[0]);\n\n    if (output.metadata[EXEC_MIME_TYPE][\"id\"] !\u003d\u003d undefined) {\n      toinsert[toinsert.length - 1].firstChild.textContent \u003d output.data[JS_MIME_TYPE];\n      // store reference to embed id on output_area\n      output_area._bokeh_element_id \u003d output.metadata[EXEC_MIME_TYPE][\"id\"];\n    }\n    if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !\u003d\u003d undefined) {\n      var bk_div \u003d document.createElement(\"div\");\n      bk_div.innerHTML \u003d output.data[HTML_MIME_TYPE];\n      var script_attrs \u003d bk_div.children[0].attributes;\n      for (var i \u003d 0; i \u003c script_attrs.length; i++) {\n        toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n        toinsert[toinsert.length - 1].firstChild.textContent \u003d bk_div.children[0].textContent\n      }\n      // store reference to server id on output_area\n      output_area._bokeh_server_id \u003d output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n    }\n  }\n\n  function register_renderer(events, OutputArea) {\n\n    function append_mime(data, metadata, element) {\n      // create a DOM node to render to\n      var toinsert \u003d this.create_output_subarea(\n        metadata,\n        CLASS_NAME,\n        EXEC_MIME_TYPE\n      );\n      this.keyboard_manager.register_events(toinsert);\n      // Render to node\n      var props \u003d {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n      render(props, toinsert[toinsert.length - 1]);\n      element.append(toinsert);\n      return toinsert\n    }\n\n    /* Handle when an output is cleared or removed */\n    events.on(\u0027clear_output.CodeCell\u0027, handleClearOutput);\n    events.on(\u0027delete.Cell\u0027, handleClearOutput);\n\n    /* Handle when a new output is added */\n    events.on(\u0027output_added.OutputArea\u0027, handleAddOutput);\n\n    /**\n     * Register the mime type and append_mime function with output_area\n     */\n    OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n      /* Is output safe? */\n      safe: true,\n      /* Index of renderer in `output_area.display_order` */\n      index: 0\n    });\n  }\n\n  // register the mime type if in Jupyter Notebook environment and previously unregistered\n  if (root.Jupyter !\u003d\u003d undefined) {\n    var events \u003d require(\u0027base/js/events\u0027);\n    var OutputArea \u003d require(\u0027notebook/js/outputarea\u0027).OutputArea;\n\n    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) \u003d\u003d -1) {\n      register_renderer(events, OutputArea);\n    }\n  }\n\n  \n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_timeout \u003d Date.now() + 5000;\n    root._bokeh_failed_load \u003d false;\n  }\n\n  var NB_LOAD_WARNING \u003d {\u0027data\u0027: {\u0027text/html\u0027:\n     \"\u003cdiv style\u003d\u0027background-color: #fdd\u0027\u003e\\n\"+\n     \"\u003cp\u003e\\n\"+\n     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n     \"\u003c/p\u003e\\n\"+\n     \"\u003cul\u003e\\n\"+\n     \"\u003cli\u003ere-rerun `output_notebook()` to attempt to load from CDN again, or\u003c/li\u003e\\n\"+\n     \"\u003cli\u003euse INLINE resources instead, as so:\u003c/li\u003e\\n\"+\n     \"\u003c/ul\u003e\\n\"+\n     \"\u003ccode\u003e\\n\"+\n     \"from bokeh.resources import INLINE\\n\"+\n     \"output_notebook(resources\u003dINLINE)\\n\"+\n     \"\u003c/code\u003e\\n\"+\n     \"\u003c/div\u003e\"}};\n\n  function display_loaded() {\n    var el \u003d document.getElementById(\"1002\");\n    if (el !\u003d null) {\n      el.textContent \u003d \"BokehJS is loading...\";\n    }\n    if (root.Bokeh !\u003d\u003d undefined) {\n      if (el !\u003d null) {\n        el.textContent \u003d \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n      }\n    } else if (Date.now() \u003c root._bokeh_timeout) {\n      setTimeout(display_loaded, 100)\n    }\n  }\n\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback !\u003d null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, callback) {\n    if (css_urls \u003d\u003d null) css_urls \u003d [];\n    if (js_urls \u003d\u003d null) js_urls \u003d [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading \u003e 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls \u003d\u003d null || js_urls.length \u003d\u003d\u003d 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading \u003d css_urls.length + js_urls.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error(url) {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (let i \u003d 0; i \u003c css_urls.length; i++) {\n      const url \u003d css_urls[i];\n      const element \u003d document.createElement(\"link\");\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error.bind(null, url);\n      element.rel \u003d \"stylesheet\";\n      element.type \u003d \"text/css\";\n      element.href \u003d url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    const hashes \u003d {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.3.min.js\": \"dM3QQsP+wXdHg42wTqW85BjZQdLNNIXqlPw/BgKoExPmTG7ZLML4EGqLMfqHT6ON\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.3.min.js\": \"8x57I4YuIfu8XyZfFo0XVr2WAT8EK4rh/uDe3wF7YuW2FNUSNEpJbsPaB1nJ2fz2\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.3.min.js\": \"3QTqdz9LyAm2i0sG5XTePsHec3UHWwVsrOL68SYRoAXsafvfAyqtQ+h440+qIBhS\"};\n\n    for (let i \u003d 0; i \u003c js_urls.length; i++) {\n      const url \u003d js_urls[i];\n      const element \u003d document.createElement(\u0027script\u0027);\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error.bind(null, url);\n      element.async \u003d false;\n      element.src \u003d url;\n      if (url in hashes) {\n        element.crossOrigin \u003d \"anonymous\";\n        element.integrity \u003d \"sha384-\" + hashes[url];\n      }\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n  };\n\n  function inject_raw_css(css) {\n    const element \u003d document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  \n  var js_urls \u003d [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.3.min.js\"];\n  var css_urls \u003d [];\n  \n\n  var inline_js \u003d [\n    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\n    function(Bokeh) {\n    \n    \n    }\n  ];\n\n  function run_inline_js() {\n    \n    if (root.Bokeh !\u003d\u003d undefined || force \u003d\u003d\u003d true) {\n      \n    for (var i \u003d 0; i \u003c inline_js.length; i++) {\n      inline_js[i].call(root, root.Bokeh);\n    }\n    if (force \u003d\u003d\u003d true) {\n        display_loaded();\n      }} else if (Date.now() \u003c root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load \u003d true;\n    } else if (force !\u003d\u003d true) {\n      var cell \u003d $(document.getElementById(\"1002\")).parents(\u0027.cell\u0027).data().cell;\n      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n    }\n\n  }\n\n  if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window)); \u003c/script\u003e\n\n"
          },
          {
            "type": "HTML",
            "data": "\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"3ef8a1cf-4d22-4329-a874-443bd7bc0687\" data-root-id\u003d\"1003\"\u003e\u003c/div\u003e\n\n"
          },
          {
            "type": "HTML",
            "data": "\u003cscript\u003e (function(root) {\n  function embed_document(root) {\n    \n  var docs_json \u003d {\"5ca5fe51-ec4f-47b9-a897-8c96f253d6d2\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"}],\"left\":[{\"id\":\"1016\"}],\"renderers\":[{\"id\":\"1037\"}],\"title\":{\"id\":\"1039\"},\"toolbar\":{\"id\":\"1027\"},\"x_range\":{\"id\":\"1004\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\":{\"id\":\"1006\"},\"y_scale\":{\"id\":\"1010\"}},\"id\":\"1003\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis\":{\"id\":\"1012\"},\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"dimension\":1,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1042\"},\"major_label_policy\":{\"id\":\"1041\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data\":{\"x\":[1,2],\"y\":[3,4]},\"selected\":{\"id\":\"1048\"},\"selection_policy\":{\"id\":\"1047\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1006\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1034\"}},\"id\":\"1038\",\"type\":\"CDSView\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data_source\":{\"id\":\"1034\"},\"glyph\":{\"id\":\"1035\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1036\"},\"view\":{\"id\":\"1038\"}},\"id\":\"1037\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"formatter\":{\"id\":\"1045\"},\"major_label_policy\":{\"id\":\"1044\"},\"ticker\":{\"id\":\"1013\"}},\"id\":\"1012\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1004\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1041\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1010\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1036\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1042\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1008\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1039\",\"type\":\"Title\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1035\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1047\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1013\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"2.3.3\"}};\n  var render_items \u003d [{\"docid\":\"5ca5fe51-ec4f-47b9-a897-8c96f253d6d2\",\"root_ids\":[\"1003\"],\"roots\":{\"1003\":\"3ef8a1cf-4d22-4329-a874-443bd7bc0687\"}}];\n  root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n\n  }\n  if (root.Bokeh !\u003d\u003d undefined) {\n    embed_document(root);\n  } else {\n    var attempts \u003d 0;\n    var timer \u003d setInterval(function(root) {\n      if (root.Bokeh !\u003d\u003d undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else {\n        attempts++;\n        if (attempts \u003e 100) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 10, root)\n  }\n})(window); \u003c/script\u003e\n"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482814_278965699",
      "id": "20180118-092433_377794298",
      "dateCreated": "2020-02-05 14:34:42.814",
      "dateStarted": "2021-07-26 03:16:14.828",
      "dateFinished": "2021-07-26 03:16:15.244",
      "status": "FINISHED"
    },
    {
      "title": "Bokeh Example (2)",
      "text": "%python.ipython\n\nfrom bokeh.server.server import Server\nfrom bokeh.application import Application\nfrom bokeh.application.handlers.function import FunctionHandler\nfrom bokeh.plotting import figure, ColumnDataSource\n\ndef make_document(doc):\n    fig \u003d figure(title\u003d\u0027Line plot!\u0027, sizing_mode\u003d\u0027scale_width\u0027)\n    fig.line(x\u003d[1, 2, 3], y\u003d[1, 4, 9])\n\n    doc.title \u003d \"Hello, world!\"\n    doc.add_root(fig)\n\n# Set up the Application\nhandler \u003d FunctionHandler(make_document)\napp \u003d Application(handler)\n\ndoc \u003d app.create_document()\n# notebook_url must be the zeppelin server url\nshow(app, notebook_url\u003d\u0027localhost:18086\u0027)",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:15.328",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python",
        "title": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\n\u003cscript id\u003d\"1163\"\u003e\n  var xhr \u003d new XMLHttpRequest()\n  xhr.responseType \u003d \u0027blob\u0027;\n  xhr.open(\u0027GET\u0027, \"http://localhost:39713/autoload.js?bokeh-autoload-element\u003d1163\u0026bokeh-absolute-url\u003dhttp://localhost:39713\u0026resources\u003dnone\", true);\n  \n  xhr.onload \u003d function (event) {\n    var script \u003d document.createElement(\u0027script\u0027),\n    src \u003d URL.createObjectURL(event.target.response);\n    script.src \u003d src;\n    document.body.appendChild(script);\n  };\nxhr.send();\n\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580886029142_1541635661",
      "id": "paragraph_1580886029142_1541635661",
      "dateCreated": "2020-02-05 15:00:29.143",
      "dateStarted": "2021-07-26 03:16:15.349",
      "dateFinished": "2021-07-26 03:16:15.457",
      "status": "FINISHED"
    },
    {
      "title": "",
      "text": "%md\n\n# Holoviews\n\nHoloViews is an open-source Python library designed to make data analysis and visualization seamless and simple. With HoloViews, you can usually express what you want to do in very few lines of code, letting you focus on what you are trying to explore and convey, not on the process of plotting. Compared to bokeh, HoloViews is a high level visualization library. Refer this [link](http://holoviews.org/) for more usage tutorial of HoloViews.\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:15.548",
      "progress": 0,
      "config": {
        "tableHide": false,
        "editorSetting": {
          "language": "text",
          "editOnDblClick": false,
          "completionKey": "TAB"
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/text",
        "fontSize": 9.0,
        "editorHide": true,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eHoloviews\u003c/h1\u003e\n\u003cp\u003eHoloViews is an open-source Python library designed to make data analysis and visualization seamless and simple. With HoloViews, you can usually express what you want to do in very few lines of code, letting you focus on what you are trying to explore and convey, not on the process of plotting. Compared to bokeh, HoloViews is a high level visualization library. Refer this \u003ca href\u003d\"http://holoviews.org/\"\u003elink\u003c/a\u003e for more usage tutorial of HoloViews.\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482815_870528203",
      "id": "20180120-131737_1287341499",
      "dateCreated": "2020-02-05 14:34:42.815",
      "dateStarted": "2021-07-26 03:16:15.569",
      "dateFinished": "2021-07-26 03:16:15.574",
      "status": "FINISHED"
    },
    {
      "title": "Holoviews example",
      "text": "%python.ipython\n\nimport logging\nlogging.getLogger(\"params\").setLevel(logging.ERROR)\n\nimport pandas as pd\nimport numpy as np\nimport holoviews as hv\nfrom holoviews import opts\nhv.extension(\u0027bokeh\u0027)\n\nfrom bokeh.plotting import figure\nfrom bokeh.io import show,output_notebook\n\noutput_notebook()\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:15.669",
      "progress": 0,
      "config": {
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/python",
        "fontSize": 9.0,
        "results": {},
        "enabled": true,
        "title": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_timeout \u003d Date.now() + 5000;\n    root._bokeh_failed_load \u003d false;\n  }\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback !\u003d null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, js_modules, callback) {\n    if (css_urls \u003d\u003d null) css_urls \u003d [];\n    if (js_urls \u003d\u003d null) js_urls \u003d [];\n    if (js_modules \u003d\u003d null) js_modules \u003d [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading \u003e 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls.length \u003d\u003d\u003d 0 \u0026\u0026 js_modules.length \u003d\u003d\u003d 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading \u003d css_urls.length + js_urls.length + js_modules.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error() {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (var i \u003d 0; i \u003c css_urls.length; i++) {\n      var url \u003d css_urls[i];\n      const element \u003d document.createElement(\"link\");\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error;\n      element.rel \u003d \"stylesheet\";\n      element.type \u003d \"text/css\";\n      element.href \u003d url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    var skip \u003d [];\n    if (window.requirejs) {\n      window.requirejs.config({\u0027paths\u0027: {}, \u0027shim\u0027: {}});\n      \n    }\n    for (var i \u003d 0; i \u003c js_urls.length; i++) {\n      var url \u003d js_urls[i];\n      if (skip.indexOf(url) \u003e\u003d 0) { on_load(); continue; }\n      var element \u003d document.createElement(\u0027script\u0027);\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error;\n      element.async \u003d false;\n      element.src \u003d url;\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n    for (var i \u003d 0; i \u003c js_modules.length; i++) {\n      var url \u003d js_modules[i];\n      if (skip.indexOf(url) \u003e\u003d 0) { on_load(); continue; }\n      var element \u003d document.createElement(\u0027script\u0027);\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error;\n      element.async \u003d false;\n      element.src \u003d url;\n      element.type \u003d \"module\";\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n    if (!js_urls.length \u0026\u0026 !js_modules.length) {\n      on_load()\n    }\n  };\n\n  function inject_raw_css(css) {\n    const element \u003d document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  var js_urls \u003d [];\n  var js_modules \u003d [];\n  var css_urls \u003d [];\n  var inline_js \u003d [\n    function(Bokeh) {\n      inject_raw_css(\".bk.alert {\\n    padding: 0.75rem 1.25rem;\\n    border: 1px solid transparent;\\n    border-radius: 0.25rem;\\n    /* Don\u0027t set margin because that will not render correctly! */\\n    /* margin-bottom: 1rem; */\\n    margin-top: 15px;\\n    margin-bottom: 15px;\\n}\\n.bk.alert a {\\n    color: rgb(11, 46, 19); /* #002752; */\\n    font-weight: 700;\\n    text-decoration: rgb(11, 46, 19);\\n    text-decoration-color: rgb(11, 46, 19);\\n    text-decoration-line: none;\\n    text-decoration-style: solid;\\n    text-decoration-thickness: auto;\\n  }\\n.bk.alert a:hover {\\n    color: rgb(11, 46, 19);\\n    font-weight: 700;\\n    text-decoration: underline;\\n}\\n\\n.bk.alert-primary {\\n    color: #004085;\\n    background-color: #cce5ff;\\n    border-color: #b8daff;\\n}\\n.bk.alert-primary hr {\\n    border-top-color: #9fcdff;\\n}\\n\\n.bk.alert-secondary {\\n    color: #383d41;\\n    background-color: #e2e3e5;\\n    border-color: #d6d8db;\\n  }\\n.bk.alert-secondary hr {\\n    border-top-color: #c8cbcf;\\n}\\n\\n.bk.alert-success {\\n    color: #155724;\\n    background-color: #d4edda;\\n    border-color: #c3e6cb;\\n  }\\n\\n.bk.alert-success hr {\\n    border-top-color: #b1dfbb;\\n}\\n\\n.bk.alert-info {\\n    color: #0c5460;\\n    background-color: #d1ecf1;\\n    border-color: #bee5eb;\\n  }\\n.bk.alert-info hr {\\n    border-top-color: #abdde5;\\n}\\n\\n.bk.alert-warning {\\n    color: #856404;\\n    background-color: #fff3cd;\\n    border-color: #ffeeba;\\n  }\\n\\n.bk.alert-warning hr {\\n    border-top-color: #ffe8a1;\\n}\\n\\n.bk.alert-danger {\\n    color: #721c24;\\n    background-color: #f8d7da;\\n    border-color: #f5c6cb;\\n}\\n.bk.alert-danger hr {\\n    border-top-color: #f1b0b7;\\n}\\n\\n.bk.alert-light {\\n    color: #818182;\\n    background-color: #fefefe;\\n    border-color: #fdfdfe;\\n  }\\n.bk.alert-light hr {\\n    border-top-color: #ececf6;\\n}\\n\\n.bk.alert-dark {\\n    color: #1b1e21;\\n    background-color: #d6d8d9;\\n    border-color: #c6c8ca;\\n  }\\n.bk.alert-dark hr {\\n    border-top-color: #b9bbbe;\\n}\\n\\n\\n/* adjf\\u00e6l */\\n\\n.bk.alert-primary a {\\n    color: #002752;\\n}\\n\\n.bk.alert-secondary a {\\n    color: #202326;\\n}\\n\\n\\n.bk.alert-success a {\\n    color: #0b2e13;\\n}\\n\\n\\n.bk.alert-info a {\\n    color: #062c33;\\n}\\n\\n\\n.bk.alert-warning a {\\n    color: #533f03;\\n}\\n\\n\\n.bk.alert-danger a {\\n    color: #491217;\\n}\\n\\n.bk.alert-light a {\\n    color: #686868;\\n}\\n\\n.bk.alert-dark a {\\n    color: #040505;\\n}\");\n    },\n    function(Bokeh) {\n      inject_raw_css(\".bk.pn-loading:before {\\n  position: absolute;\\n  height: 100%;\\n  width: 100%;\\n  content: \u0027\u0027;\\n  z-index: 1000;\\n  background-color: rgb(255,255,255,0.50);\\n  border-color: lightgray;\\n  background-repeat: no-repeat;\\n  background-position: center;\\n  background-size: auto 50%;\\n  border-width: 1px;\\n  cursor: progress;\\n}\\n.bk.pn-loading.arcs:hover:before {\\n  cursor: progress;\\n}\\n\");\n    },\n    function(Bokeh) {\n      inject_raw_css(\".json-formatter-row {\\n  font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n  color: black;\\n  text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n  margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n  opacity: 0.5;\\n  margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n  display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n  content: \\\"No properties\\\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n  content: \\\"[]\\\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n  color: green;\\n  white-space: pre;\\n  word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n  color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n  color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n  color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n  color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n  color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n  text-decoration: underline;\\n  color: blue;\\n  cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n  color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n  color: #00008B;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n  cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n  line-height: 1.2rem;\\n  font-size: 0.7rem;\\n  vertical-align: middle;\\n  opacity: 0.6;\\n  cursor: pointer;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n  display: inline-block;\\n  transition: transform 100ms ease-in;\\n  content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-row \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0;\\n  transition: opacity 0.15s ease-in;\\n  font-style: italic;\\n}\\n.json-formatter-row:hover \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open \u003e .json-formatter-toggler-link .json-formatter-toggler:after {\\n  transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open \u003e .json-formatter-children:after {\\n  display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open \u003e a \u003e .json-formatter-preview-text {\\n  display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n  display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n  font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n  color: white;\\n  text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n  margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n  opacity: 0.5;\\n  margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n  display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n  content: \\\"No properties\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n  content: \\\"[]\\\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n  color: #31F031;\\n  white-space: pre;\\n  word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n  color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n  color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n  color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n  color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n  color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n  background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n  text-decoration: underline;\\n  color: #027BFF;\\n  cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n  color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n  color: #23A0DB;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n  cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n  line-height: 1.2rem;\\n  font-size: 0.7rem;\\n  vertical-align: middle;\\n  opacity: 0.6;\\n  cursor: pointer;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n  display: inline-block;\\n  transition: transform 100ms ease-in;\\n  content: \\\"\\\\25BA\\\";\\n}\\n.json-formatter-dark.json-formatter-row \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0;\\n  transition: opacity 0.15s ease-in;\\n  font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open \u003e .json-formatter-toggler-link .json-formatter-toggler:after {\\n  transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open \u003e .json-formatter-children:after {\\n  display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open \u003e a \u003e .json-formatter-preview-text {\\n  display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n  display: block;\\n}\\n\");\n    },\n    function(Bokeh) {\n      inject_raw_css(\"table.panel-df {\\n    margin-left: auto;\\n    margin-right: auto;\\n    border: none;\\n    border-collapse: collapse;\\n    border-spacing: 0;\\n    color: black;\\n    font-size: 12px;\\n    table-layout: fixed;\\n    width: 100%;\\n}\\n\\n.panel-df tr, .panel-df th, .panel-df td {\\n    text-align: right;\\n    vertical-align: middle;\\n    padding: 0.5em 0.5em !important;\\n    line-height: normal;\\n    white-space: normal;\\n    max-width: none;\\n    border: none;\\n}\\n\\n.panel-df tbody {\\n    display: table-row-group;\\n    vertical-align: middle;\\n    border-color: inherit;\\n}\\n\\n.panel-df tbody tr:nth-child(odd) {\\n    background: #f5f5f5;\\n}\\n\\n.panel-df thead {\\n    border-bottom: 1px solid black;\\n    vertical-align: bottom;\\n}\\n\\n.panel-df tr:hover {\\n    background: lightblue !important;\\n    cursor: pointer;\\n}\\n\");\n    },\n    function(Bokeh) {\n      inject_raw_css(\".codehilite .hll { background-color: #ffffcc }\\n.codehilite  { background: #f8f8f8; }\\n.codehilite .c { color: #408080; font-style: italic } /* Comment */\\n.codehilite .err { border: 1px solid #FF0000 } /* Error */\\n.codehilite .k { color: #008000; font-weight: bold } /* Keyword */\\n.codehilite .o { color: #666666 } /* Operator */\\n.codehilite .ch { color: #408080; font-style: italic } /* Comment.Hashbang */\\n.codehilite .cm { color: #408080; font-style: italic } /* Comment.Multiline */\\n.codehilite .cp { color: #BC7A00 } /* Comment.Preproc */\\n.codehilite .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */\\n.codehilite .c1 { color: #408080; font-style: italic } /* Comment.Single */\\n.codehilite .cs { color: #408080; font-style: italic } /* Comment.Special */\\n.codehilite .gd { color: #A00000 } /* Generic.Deleted */\\n.codehilite .ge { font-style: italic } /* Generic.Emph */\\n.codehilite .gr { color: #FF0000 } /* Generic.Error */\\n.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */\\n.codehilite .gi { color: #00A000 } /* Generic.Inserted */\\n.codehilite .go { color: #888888 } /* Generic.Output */\\n.codehilite .gp { color: #000080; font-weight: bold } /* Generic.Prompt */\\n.codehilite .gs { font-weight: bold } /* Generic.Strong */\\n.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */\\n.codehilite .gt { color: #0044DD } /* Generic.Traceback */\\n.codehilite .kc { color: #008000; font-weight: bold } /* Keyword.Constant */\\n.codehilite .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */\\n.codehilite .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */\\n.codehilite .kp { color: #008000 } /* Keyword.Pseudo */\\n.codehilite .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */\\n.codehilite .kt { color: #B00040 } /* Keyword.Type */\\n.codehilite .m { color: #666666 } /* Literal.Number */\\n.codehilite .s { color: #BA2121 } /* Literal.String */\\n.codehilite .na { color: #7D9029 } /* Name.Attribute */\\n.codehilite .nb { color: #008000 } /* Name.Builtin */\\n.codehilite .nc { color: #0000FF; font-weight: bold } /* Name.Class */\\n.codehilite .no { color: #880000 } /* Name.Constant */\\n.codehilite .nd { color: #AA22FF } /* Name.Decorator */\\n.codehilite .ni { color: #999999; font-weight: bold } /* Name.Entity */\\n.codehilite .ne { color: #D2413A; font-weight: bold } /* Name.Exception */\\n.codehilite .nf { color: #0000FF } /* Name.Function */\\n.codehilite .nl { color: #A0A000 } /* Name.Label */\\n.codehilite .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */\\n.codehilite .nt { color: #008000; font-weight: bold } /* Name.Tag */\\n.codehilite .nv { color: #19177C } /* Name.Variable */\\n.codehilite .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */\\n.codehilite .w { color: #bbbbbb } /* Text.Whitespace */\\n.codehilite .mb { color: #666666 } /* Literal.Number.Bin */\\n.codehilite .mf { color: #666666 } /* Literal.Number.Float */\\n.codehilite .mh { color: #666666 } /* Literal.Number.Hex */\\n.codehilite .mi { color: #666666 } /* Literal.Number.Integer */\\n.codehilite .mo { color: #666666 } /* Literal.Number.Oct */\\n.codehilite .sa { color: #BA2121 } /* Literal.String.Affix */\\n.codehilite .sb { color: #BA2121 } /* Literal.String.Backtick */\\n.codehilite .sc { color: #BA2121 } /* Literal.String.Char */\\n.codehilite .dl { color: #BA2121 } /* Literal.String.Delimiter */\\n.codehilite .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */\\n.codehilite .s2 { color: #BA2121 } /* Literal.String.Double */\\n.codehilite .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */\\n.codehilite .sh { color: #BA2121 } /* Literal.String.Heredoc */\\n.codehilite .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */\\n.codehilite .sx { color: #008000 } /* Literal.String.Other */\\n.codehilite .sr { color: #BB6688 } /* Literal.String.Regex */\\n.codehilite .s1 { color: #BA2121 } /* Literal.String.Single */\\n.codehilite .ss { color: #19177C } /* Literal.String.Symbol */\\n.codehilite .bp { color: #008000 } /* Name.Builtin.Pseudo */\\n.codehilite .fm { color: #0000FF } /* Name.Function.Magic */\\n.codehilite .vc { color: #19177C } /* Name.Variable.Class */\\n.codehilite .vg { color: #19177C } /* Name.Variable.Global */\\n.codehilite .vi { color: #19177C } /* Name.Variable.Instance */\\n.codehilite .vm { color: #19177C } /* Name.Variable.Magic */\\n.codehilite .il { color: #666666 } /* Literal.Number.Integer.Long */\\n\\n.markdown h1 { margin-block-start: 0.34em }\\n.markdown h2 { margin-block-start: 0.42em }\\n.markdown h3 { margin-block-start: 0.5em }\\n.markdown h4 { margin-block-start: 0.67em }\\n.markdown h5 { margin-block-start: 0.84em }\\n.markdown h6 { margin-block-start: 1.17em }\\n.markdown ul { padding-inline-start: 2em }\\n.markdown ol { padding-inline-start: 2em }\\n.markdown strong { font-weight: 600 }\\n.markdown a { color: -webkit-link }\\n.markdown a { color: -moz-hyperlinkText }\\n\");\n    },\n    function(Bokeh) {\n      inject_raw_css(\".bk.card {\\n  border: 1px solid rgba(0,0,0,.125);\\n  border-radius: 0.25rem;\\n}\\n.bk.accordion {\\n  border: 1px solid rgba(0,0,0,.125);\\n}\\n.bk.card-header {\\n  align-items: center;\\n  background-color: rgba(0, 0, 0, 0.03);\\n  border-radius: 0.25rem;\\n  display: inline-flex;\\n  justify-content: start;\\n  width: 100%;\\n}\\n.bk.accordion-header {\\n  align-items: center;\\n  background-color: rgba(0, 0, 0, 0.03);\\n  border-radius: 0;\\n  display: flex;\\n  justify-content: start;\\n  width: 100%;\\n}\\n.bk.card-button {\\n  background-color: transparent;\\n  margin-left: 0.5em;\\n}\\n.bk.card-header-row {\\n  position: relative !important;\\n}\\n.bk.card-title {\\n  align-items: center;\\n  font-size: 1.4em;\\n  font-weight: bold;\\n  overflow-wrap: break-word;\\n}\\n.bk.card-header-row \u003e .bk {\\n  padding-right: 1.5em !important;\\n  overflow-wrap: break-word;\\n}\\n\");\n    },\n    function(Bokeh) {\n      inject_raw_css(\".bk.panel-widget-box {\\n  min-height: 20px;\\n  background-color: #f5f5f5;\\n  border: 1px solid #e3e3e3;\\n  border-radius: 4px;\\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n  box-shadow: inset 0 1px 1px rgba(0,0,0,.05);\\n  overflow-x: hidden;\\n  overflow-y: hidden;\\n}\\n\\n.scrollable {\\n  overflow: scroll;\\n}\\n\\nprogress {\\n  appearance: none;\\n  -moz-appearance: none;\\n  -webkit-appearance: none;\\n  border: none;\\n  height: 20px;\\n  background-color: whiteSmoke;\\n  border-radius: 3px;\\n  box-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n  color: royalblue;\\n  position: relative;\\n  margin: 0 0 1.5em;\\n}\\n\\nprogress[value]::-webkit-progress-bar {\\n  background-color: whiteSmoke;\\n  border-radius: 3px;\\n  box-shadow: 0 2px 3px rgba(0,0,0,.5) inset;\\n}\\n\\nprogress[value]::-webkit-progress-value {\\n  position: relative;\\n  background-size: 35px 20px, 100% 100%, 100% 100%;\\n  border-radius:3px;\\n}\\n\\nprogress.active:not([value])::before {\\n  background-position: 10%;\\n  animation-name: stripes;\\n  animation-duration: 3s;\\n  animation-timing-function: linear;\\n  animation-iteration-count: infinite;\\n}\\n\\nprogress[value]::-moz-progress-bar {\\n  background-size: 35px 20px, 100% 100%, 100% 100%;\\n  border-radius:3px;\\n}\\n\\nprogress:not([value])::-moz-progress-bar {\\n  border-radius:3px;\\n  background: linear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\nprogress.active:not([value])::-moz-progress-bar {\\n  background-position: 10%;\\n  animation-name: stripes;\\n  animation-duration: 3s;\\n  animation-timing-function: linear;\\n  animation-iteration-count: infinite;\\n}\\n\\nprogress.active:not([value])::-webkit-progress-bar {\\n  background-position: 10%;\\n  animation-name: stripes;\\n  animation-duration: 3s;\\n  animation-timing-function: linear;\\n  animation-iteration-count: infinite;\\n}\\n\\nprogress.primary[value]::-webkit-progress-value { background-color: #007bff; }\\nprogress.primary:not([value])::before { background-color: #007bff; }\\nprogress.primary:not([value])::-webkit-progress-bar { background-color: #007bff; }\\nprogress.primary::-moz-progress-bar { background-color: #007bff; }\\n\\nprogress.secondary[value]::-webkit-progress-value { background-color: #6c757d; }\\nprogress.secondary:not([value])::before { background-color: #6c757d; }\\nprogress.secondary:not([value])::-webkit-progress-bar { background-color: #6c757d; }\\nprogress.secondary::-moz-progress-bar { background-color: #6c757d; }\\n\\nprogress.success[value]::-webkit-progress-value { background-color: #28a745; }\\nprogress.success:not([value])::before { background-color: #28a745; }\\nprogress.success:not([value])::-webkit-progress-bar { background-color: #28a745; }\\nprogress.success::-moz-progress-bar { background-color: #28a745; }\\n\\nprogress.danger[value]::-webkit-progress-value { background-color: #dc3545; }\\nprogress.danger:not([value])::before { background-color: #dc3545; }\\nprogress.danger:not([value])::-webkit-progress-bar { background-color: #dc3545; }\\nprogress.danger::-moz-progress-bar { background-color: #dc3545; }\\n\\nprogress.warning[value]::-webkit-progress-value { background-color: #ffc107; }\\nprogress.warning:not([value])::before { background-color: #ffc107; }\\nprogress.warning:not([value])::-webkit-progress-bar { background-color: #ffc107; }\\nprogress.warning::-moz-progress-bar { background-color: #ffc107; }\\n\\nprogress.info[value]::-webkit-progress-value { background-color: #17a2b8; }\\nprogress.info:not([value])::before { background-color: #17a2b8; }\\nprogress.info:not([value])::-webkit-progress-bar { background-color: #17a2b8; }\\nprogress.info::-moz-progress-bar { background-color: #17a2b8; }\\n\\nprogress.light[value]::-webkit-progress-value { background-color: #f8f9fa; }\\nprogress.light:not([value])::before { background-color: #f8f9fa; }\\nprogress.light:not([value])::-webkit-progress-bar { background-color: #f8f9fa; }\\nprogress.light::-moz-progress-bar { background-color: #f8f9fa; }\\n\\nprogress.dark[value]::-webkit-progress-value { background-color: #343a40; }\\nprogress.dark:not([value])::-webkit-progress-bar { background-color: #343a40; }\\nprogress.dark:not([value])::before { background-color: #343a40; }\\nprogress.dark::-moz-progress-bar { background-color: #343a40; }\\n\\nprogress:not([value])::-webkit-progress-bar {\\n  border-radius: 3px;\\n  background: linear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\nprogress:not([value])::before {\\n  content:\\\" \\\";\\n  position:absolute;\\n  height: 20px;\\n  top:0;\\n  left:0;\\n  right:0;\\n  bottom:0;\\n  border-radius: 3px;\\n  background: linear-gradient(-45deg, transparent 33%, rgba(0, 0, 0, 0.2) 33%, rgba(0, 0, 0, 0.2) 66%, transparent 66%) left/2.5em 1.5em;\\n}\\n\\n@keyframes stripes {\\n  from {background-position: 0%}\\n  to {background-position: 100%}\\n}\\n\\n.bk-root .bk.loader {\\n  overflow: hidden;\\n}\\n\\n.bk.loader::after {\\n  content: \\\"\\\";\\n  border-radius: 50%;\\n  -webkit-mask-image: radial-gradient(transparent 50%, rgba(0, 0, 0, 1) 54%);\\n  width: 100%;\\n  height: 100%;\\n  left: 0;\\n  top: 0;\\n  position: absolute;\\n}\\n\\n.bk-root .bk.loader.dark::after {\\n  background: #0f0f0f;\\n}\\n\\n.bk-root .bk.loader.light::after {\\n  background: #f0f0f0;\\n}\\n\\n.bk-root .bk.loader.spin::after {\\n  animation: spin 2s linear infinite;\\n}\\n\\n.bk-root div.bk.loader.spin.primary-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #007bff 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.secondary-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #6c757d 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.success-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #28a745 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.danger-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #dc3545 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.warning-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #ffc107 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.info-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #17a2b8 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.light-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #f8f9fa 50%);\\n}\\n\\n.bk-root div.bk.loader.dark-light::after {\\n  background: linear-gradient(135deg, #f0f0f0 50%, transparent 50%), linear-gradient(45deg, #f0f0f0 50%, #343a40 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.primary-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #007bff 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.secondary-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #6c757d 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.success-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #28a745 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.danger-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #dc3545 50%)\\n}\\n\\n.bk-root div.bk.loader.spin.warning-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #ffc107 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.info-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #17a2b8 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.light-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #f8f9fa 50%);\\n}\\n\\n.bk-root div.bk.loader.spin.dark-dark::after {\\n  background: linear-gradient(135deg, #0f0f0f 50%, transparent 50%), linear-gradient(45deg, #0f0f0f 50%, #343a40 50%);\\n}\\n\\n/* Safari */\\n@-webkit-keyframes spin {\\n  0% { -webkit-transform: rotate(0deg); }\\n  100% { -webkit-transform: rotate(360deg); }\\n}\\n\\n@keyframes spin {\\n  0% { transform: rotate(0deg); }\\n  100% { transform: rotate(360deg); }\\n}\\n\\n.dot div {\\n  height: 100%;\\n  width: 100%;\\n  border: 1px solid #000 !important;\\n  background-color: #fff;\\n  border-radius: 50%;\\n  display: inline-block;\\n}\\n\\n.dot-filled div {\\n  height: 100%;\\n  width: 100%;\\n  border: 1px solid #000 !important;\\n  border-radius: 50%;\\n  display: inline-block;\\n}\\n\\n.dot-filled.primary div {\\n  background-color: #007bff;\\n}\\n\\n.dot-filled.secondary div {\\n  background-color: #6c757d;\\n}\\n\\n.dot-filled.success div {\\n  background-color: #28a745;\\n}\\n\\n.dot-filled.danger div {\\n  background-color: #dc3545;\\n}\\n\\n.dot-filled.warning div {\\n  background-color: #ffc107;\\n}\\n\\n.dot-filled.info div {\\n  background-color: #17a2b8;\\n}\\n\\n.dot-filled.dark div {\\n  background-color: #343a40;\\n}\\n\\n.dot-filled.light div {\\n  background-color: #f8f9fa;\\n}\\n\\n/* Slider editor */\\n.slider-edit .bk-input-group .bk-input {\\n  border: 0;\\n  border-radius: 0;\\n  min-height: 0;\\n  padding-left: 0;\\n  padding-right: 0;\\n  font-weight: bold;\\n}\\n\\n.slider-edit .bk-input-group .bk-spin-wrapper {\\n  display: contents;\\n}\\n\\n.slider-edit .bk-input-group .bk-spin-wrapper .bk.bk-spin-btn-up {\\n  top: -6px;\\n}\\n\\n.slider-edit .bk-input-group .bk-spin-wrapper .bk.bk-spin-btn-down {\\n  bottom: 3px;\\n}\\n\\n/* JSON Pane */\\n.bk-root .json-formatter-row .json-formatter-string, .bk-root .json-formatter-row .json-formatter-stringifiable {\\n  white-space: pre-wrap;\\n}\\n\");\n    },\n    function(Bokeh) {\n      inject_raw_css(\"\\n    .bk.pn-loading.arcs:before {\\n      background-image: url(\\\"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiBzdHlsZT0ibWFyZ2luOiBhdXRvOyBiYWNrZ3JvdW5kOiBub25lOyBkaXNwbGF5OiBibG9jazsgc2hhcGUtcmVuZGVyaW5nOiBhdXRvOyIgdmlld0JveD0iMCAwIDEwMCAxMDAiIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIj4gIDxjaXJjbGUgY3g9IjUwIiBjeT0iNTAiIHI9IjMyIiBzdHJva2Utd2lkdGg9IjgiIHN0cm9rZT0iI2MzYzNjMyIgc3Ryb2tlLWRhc2hhcnJheT0iNTAuMjY1NDgyNDU3NDM2NjkgNTAuMjY1NDgyNDU3NDM2NjkiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+ICAgIDxhbmltYXRlVHJhbnNmb3JtIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgdHlwZT0icm90YXRlIiByZXBlYXRDb3VudD0iaW5kZWZpbml0ZSIgZHVyPSIxcyIga2V5VGltZXM9IjA7MSIgdmFsdWVzPSIwIDUwIDUwOzM2MCA1MCA1MCI+PC9hbmltYXRlVHJhbnNmb3JtPiAgPC9jaXJjbGU+PC9zdmc+\\\")\\n    }\\n    \");\n    },\n    function(Bokeh) {\n      /* BEGIN bokeh.min.js */\n      /*!\n       * Copyright (c) 2012 - 2021, Anaconda, Inc., and Bokeh Contributors\n       * All rights reserved.\n       * \n       * Redistribution and use in source and binary forms, with or without modification,\n       * are permitted provided that the following conditions are met:\n       * \n       * Redistributions of source code must retain the above copyright notice,\n       * this list of conditions and the following disclaimer.\n       * \n       * Redistributions in binary form must reproduce the above copyright notice,\n       * this list of conditions and the following disclaimer in the documentation\n       * and/or other materials provided with the distribution.\n       * \n       * Neither the name of Anaconda nor the names of any contributors\n       * may be used to endorse or promote products derived from this software\n       * without specific prior written permission.\n       * \n       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n       * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n       * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n       * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n       * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n       * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n       * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n       * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n       * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n       * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n       * THE POSSIBILITY OF SUCH DAMAGE.\n       */\n      (function(root, factory) {\n        const bokeh \u003d factory();\n        bokeh.__bokeh__ \u003d true;\n        if (typeof root.Bokeh \u003d\u003d\u003d \"undefined\" || typeof root.Bokeh.__bokeh__ \u003d\u003d\u003d \"undefined\") {\n          root.Bokeh \u003d bokeh;\n        }\n        const Bokeh \u003d root.Bokeh;\n        Bokeh[bokeh.version] \u003d bokeh;\n      })(this, function() {\n        var define;\n        var parent_require \u003d typeof require \u003d\u003d\u003d \"function\" \u0026\u0026 require\n        return (function(modules, entry, aliases, externals) {\n        if (aliases \u003d\u003d\u003d undefined) aliases \u003d {};\n        if (externals \u003d\u003d\u003d undefined) externals \u003d {};\n\n        var cache \u003d {};\n\n        var normalize \u003d function(name) {\n          if (typeof name \u003d\u003d\u003d \"number\")\n            return name;\n\n          if (name \u003d\u003d\u003d \"bokehjs\")\n            return entry;\n\n          if (!externals[name]) {\n            var prefix \u003d \"@bokehjs/\"\n            if (name.slice(0, prefix.length) \u003d\u003d\u003d prefix)\n              name \u003d name.slice(prefix.length)\n          }\n\n          var alias \u003d aliases[name]\n          if (alias !\u003d null)\n            return alias;\n\n          var trailing \u003d name.length \u003e 0 \u0026\u0026 name[name.lenght-1] \u003d\u003d\u003d \"/\";\n          var index \u003d aliases[name + (trailing ? \"\" : \"/\") + \"index\"];\n          if (index !\u003d null)\n            return index;\n\n          return name;\n        }\n\n        var require \u003d function(name) {\n          var mod \u003d cache[name];\n          if (!mod) {\n            var id \u003d normalize(name);\n\n            mod \u003d cache[id];\n            if (!mod) {\n              if (!modules[id]) {\n                if (externals[id] \u003d\u003d\u003d false || (externals[id] \u003d\u003d true \u0026\u0026 parent_require)) {\n                  try {\n                    mod \u003d {exports: externals[id] ? parent_require(id) : {}};\n                    cache[id] \u003d cache[name] \u003d mod;\n                    return mod.exports;\n                  } catch (e) {}\n                }\n\n                var err \u003d new Error(\"Cannot find module \u0027\" + name + \"\u0027\");\n                err.code \u003d \u0027MODULE_NOT_FOUND\u0027;\n                throw err;\n              }\n\n              mod \u003d {exports: {}};\n              cache[id] \u003d cache[name] \u003d mod;\n\n              function __esModule() {\n                Object.defineProperty(mod.exports, \"__esModule\", {value: true});\n              }\n\n              function __esExport(name, value) {\n                Object.defineProperty(mod.exports, name, {\n                  enumerable: true, get: function () { return value; }\n                });\n              }\n\n              modules[id].call(mod.exports, require, mod, mod.exports, __esModule, __esExport);\n            } else {\n              cache[name] \u003d mod;\n            }\n          }\n\n          return mod.exports;\n        }\n        require.resolve \u003d function(name) {\n          return \"\"\n        }\n\n        var main \u003d require(entry);\n        main.require \u003d require;\n\n        if (typeof Proxy !\u003d\u003d \"undefined\") {\n          // allow Bokeh.loader[\"@bokehjs/module/name\"] syntax\n          main.loader \u003d new Proxy({}, {\n            get: function(_obj, module) {\n              return require(module);\n            }\n          });\n        }\n\n        main.register_plugin \u003d function(plugin_modules, plugin_entry, plugin_aliases, plugin_externals) {\n          if (plugin_aliases \u003d\u003d\u003d undefined) plugin_aliases \u003d {};\n          if (plugin_externals \u003d\u003d\u003d undefined) plugin_externals \u003d {};\n\n          for (var name in plugin_modules) {\n            modules[name] \u003d plugin_modules[name];\n          }\n\n          for (var name in plugin_aliases) {\n            aliases[name] \u003d plugin_aliases[name];\n          }\n\n          for (var name in plugin_externals) {\n            externals[name] \u003d plugin_externals[name];\n          }\n\n          var plugin \u003d require(plugin_entry);\n\n          for (var name in plugin) {\n            main[name] \u003d plugin[name];\n          }\n\n          return plugin;\n        }\n\n        return main;\n      })\n      ([\n      function _(t,_,n,o,r){o();t(1).__exportStar(t(2),n)},\n      function _(t,e,n,r,o){r();var a\u003dfunction(t,e){return(a\u003dObject.setPrototypeOf||{__proto__:[]}instanceof Array\u0026\u0026function(t,e){t.__proto__\u003de}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)\u0026\u0026(t[n]\u003de[n])})(t,e)};n.__extends\u003dfunction(t,e){function n(){this.constructor\u003dt}a(t,e),t.prototype\u003dnull\u003d\u003d\u003de?Object.create(e):(n.prototype\u003de.prototype,new n)};function i(t){var e\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026Symbol.iterator,n\u003de\u0026\u0026t[e],r\u003d0;if(n)return n.call(t);if(t\u0026\u0026\"number\"\u003d\u003dtypeof t.length)return{next:function(){return t\u0026\u0026r\u003e\u003dt.length\u0026\u0026(t\u003dvoid 0),{value:t\u0026\u0026t[r++],done:!t}}};throw new TypeError(e?\"Object is not iterable.\":\"Symbol.iterator is not defined.\")}function c(t,e){var n\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t[Symbol.iterator];if(!n)return t;var r,o,a\u003dn.call(t),i\u003d[];try{for(;(void 0\u003d\u003d\u003de||e-- \u003e0)\u0026\u0026!(r\u003da.next()).done;)i.push(r.value)}catch(t){o\u003d{error:t}}finally{try{r\u0026\u0026!r.done\u0026\u0026(n\u003da.return)\u0026\u0026n.call(a)}finally{if(o)throw o.error}}return i}function u(t){return this instanceof u?(this.v\u003dt,this):new u(t)}n.__assign\u003dfunction(){return n.__assign\u003dObject.assign||function(t){for(var e,n\u003d1,r\u003darguments.length;n\u003cr;n++)for(var o in e\u003darguments[n])Object.prototype.hasOwnProperty.call(e,o)\u0026\u0026(t[o]\u003de[o]);return t},n.__assign.apply(this,arguments)},n.__rest\u003dfunction(t,e){var n\u003d{};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)\u0026\u0026e.indexOf(r)\u003c0\u0026\u0026(n[r]\u003dt[r]);if(null!\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof Object.getOwnPropertySymbols){var o\u003d0;for(r\u003dObject.getOwnPropertySymbols(t);o\u003cr.length;o++)e.indexOf(r[o])\u003c0\u0026\u0026Object.prototype.propertyIsEnumerable.call(t,r[o])\u0026\u0026(n[r[o]]\u003dt[r[o]])}return n},n.__decorate\u003dfunction(t,e,n,r){var o,a\u003darguments.length,i\u003da\u003c3?e:null\u003d\u003d\u003dr?r\u003dObject.getOwnPropertyDescriptor(e,n):r;if(\"object\"\u003d\u003dtypeof Reflect\u0026\u0026\"function\"\u003d\u003dtypeof Reflect.decorate)i\u003dReflect.decorate(t,e,n,r);else for(var c\u003dt.length-1;c\u003e\u003d0;c--)(o\u003dt[c])\u0026\u0026(i\u003d(a\u003c3?o(i):a\u003e3?o(e,n,i):o(e,n))||i);return a\u003e3\u0026\u0026i\u0026\u0026Object.defineProperty(e,n,i),i},n.__param\u003dfunction(t,e){return function(n,r){e(n,r,t)}},n.__metadata\u003dfunction(t,e){if(\"object\"\u003d\u003dtypeof Reflect\u0026\u0026\"function\"\u003d\u003dtypeof Reflect.metadata)return Reflect.metadata(t,e)},n.__awaiter\u003dfunction(t,e,n,r){return new(n||(n\u003dPromise))((function(o,a){function i(t){try{u(r.next(t))}catch(t){a(t)}}function c(t){try{u(r.throw(t))}catch(t){a(t)}}function u(t){var e;t.done?o(t.value):(e\u003dt.value,e instanceof n?e:new n((function(t){t(e)}))).then(i,c)}u((r\u003dr.apply(t,e||[])).next())}))},n.__generator\u003dfunction(t,e){var n,r,o,a,i\u003d{label:0,sent:function(){if(1\u0026o[0])throw o[1];return o[1]},trys:[],ops:[]};return a\u003d{next:c(0),throw:c(1),return:c(2)},\"function\"\u003d\u003dtypeof Symbol\u0026\u0026(a[Symbol.iterator]\u003dfunction(){return this}),a;function c(a){return function(c){return function(a){if(n)throw new TypeError(\"Generator is already executing.\");for(;i;)try{if(n\u003d1,r\u0026\u0026(o\u003d2\u0026a[0]?r.return:a[0]?r.throw||((o\u003dr.return)\u0026\u0026o.call(r),0):r.next)\u0026\u0026!(o\u003do.call(r,a[1])).done)return o;switch(r\u003d0,o\u0026\u0026(a\u003d[2\u0026a[0],o.value]),a[0]){case 0:case 1:o\u003da;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r\u003da[1],a\u003d[0];continue;case 7:a\u003di.ops.pop(),i.trys.pop();continue;default:if(!(o\u003di.trys,(o\u003do.length\u003e0\u0026\u0026o[o.length-1])||6!\u003d\u003da[0]\u0026\u00262!\u003d\u003da[0])){i\u003d0;continue}if(3\u003d\u003d\u003da[0]\u0026\u0026(!o||a[1]\u003eo[0]\u0026\u0026a[1]\u003co[3])){i.label\u003da[1];break}if(6\u003d\u003d\u003da[0]\u0026\u0026i.label\u003co[1]){i.label\u003do[1],o\u003da;break}if(o\u0026\u0026i.label\u003co[2]){i.label\u003do[2],i.ops.push(a);break}o[2]\u0026\u0026i.ops.pop(),i.trys.pop();continue}a\u003de.call(t,i)}catch(t){a\u003d[6,t],r\u003d0}finally{n\u003do\u003d0}if(5\u0026a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,c])}}},n.__createBinding\u003dObject.create?function(t,e,n,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003dn),Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[n]}})}:function(t,e,n,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003dn),t[r]\u003de[n]},n.__exportStar\u003dfunction(t,e){for(var r in t)\"default\"\u003d\u003d\u003dr||Object.prototype.hasOwnProperty.call(e,r)||n.__createBinding(e,t,r)},n.__values\u003di,n.__read\u003dc,n.__spread\u003dfunction(){for(var t\u003d[],e\u003d0;e\u003carguments.length;e++)t\u003dt.concat(c(arguments[e]));return t},n.__spreadArrays\u003dfunction(){for(var t\u003d0,e\u003d0,n\u003darguments.length;e\u003cn;e++)t+\u003darguments[e].length;var r\u003dArray(t),o\u003d0;for(e\u003d0;e\u003cn;e++)for(var a\u003darguments[e],i\u003d0,c\u003da.length;i\u003cc;i++,o++)r[o]\u003da[i];return r},n.__await\u003du,n.__asyncGenerator\u003dfunction(t,e,n){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var r,o\u003dn.apply(t,e||[]),a\u003d[];return r\u003d{},i(\"next\"),i(\"throw\"),i(\"return\"),r[Symbol.asyncIterator]\u003dfunction(){return this},r;function i(t){o[t]\u0026\u0026(r[t]\u003dfunction(e){return new Promise((function(n,r){a.push([t,e,n,r])\u003e1||c(t,e)}))})}function c(t,e){try{(n\u003do[t](e)).value instanceof u?Promise.resolve(n.value.v).then(f,l):s(a[0][2],n)}catch(t){s(a[0][3],t)}var n}function f(t){c(\"next\",t)}function l(t){c(\"throw\",t)}function s(t,e){t(e),a.shift(),a.length\u0026\u0026c(a[0][0],a[0][1])}},n.__asyncDelegator\u003dfunction(t){var e,n;return e\u003d{},r(\"next\"),r(\"throw\",(function(t){throw t})),r(\"return\"),e[Symbol.iterator]\u003dfunction(){return this},e;function r(r,o){e[r]\u003dt[r]?function(e){return(n\u003d!n)?{value:u(t[r](e)),done:\"return\"\u003d\u003d\u003dr}:o?o(e):e}:o}},n.__asyncValues\u003dfunction(t){if(!Symbol.asyncIterator)throw new TypeError(\"Symbol.asyncIterator is not defined.\");var e,n\u003dt[Symbol.asyncIterator];return n?n.call(t):(t\u003di(t),e\u003d{},r(\"next\"),r(\"throw\"),r(\"return\"),e[Symbol.asyncIterator]\u003dfunction(){return this},e);function r(n){e[n]\u003dt[n]\u0026\u0026function(e){return new Promise((function(r,o){(function(t,e,n,r){Promise.resolve(r).then((function(e){t({value:e,done:n})}),e)})(r,o,(e\u003dt[n](e)).done,e.value)}))}}},n.__makeTemplateObject\u003dfunction(t,e){return Object.defineProperty?Object.defineProperty(t,\"raw\",{value:e}):t.raw\u003de,t};var f\u003dObject.create?function(t,e){Object.defineProperty(t,\"default\",{enumerable:!0,value:e})}:function(t,e){t.default\u003de};n.__importStar\u003dfunction(t){if(t\u0026\u0026t.__esModule)return t;var e\u003d{};if(null!\u003dt)for(var r in t)\"default\"!\u003d\u003dr\u0026\u0026Object.prototype.hasOwnProperty.call(t,r)\u0026\u0026n.__createBinding(e,t,r);return f(e,t),e},n.__importDefault\u003dfunction(t){return t\u0026\u0026t.__esModule?t:{default:t}},n.__classPrivateFieldGet\u003dfunction(t,e){if(!e.has(t))throw new TypeError(\"attempted to get private field on non-instance\");return e.get(t)},n.__classPrivateFieldSet\u003dfunction(t,e,n){if(!e.has(t))throw new TypeError(\"attempted to set private field on non-instance\");return e.set(t,n),n}},\n      function _(e,t,o,s,l){s();const n\u003de(1);l(\"version\",e(3).version),l(\"index\",e(4).index),o.embed\u003dn.__importStar(e(4)),o.protocol\u003dn.__importStar(e(404)),o._testing\u003dn.__importStar(e(405));var r\u003de(19);l(\"logger\",r.logger),l(\"set_log_level\",r.set_log_level),l(\"settings\",e(28).settings),l(\"Models\",e(7).Models),l(\"documents\",e(5).documents),l(\"safely\",e(406).safely)},\n      function _(n,i,o,c,e){c(),o.version\u003d\"2.3.3\"},\n      function _(e,o,t,n,s){n();const d\u003de(5),r\u003de(19),_\u003de(34),c\u003de(13),i\u003de(8),a\u003de(16),u\u003de(395),l\u003de(397),m\u003de(396);var f\u003de(395);s(\"add_document_standalone\",f.add_document_standalone),s(\"index\",f.index),s(\"add_document_from_session\",e(397).add_document_from_session);var g\u003de(402);async function w(e,o,t,n){i.isString(e)\u0026\u0026(e\u003dJSON.parse(_.unescape(e)));const s\u003d{};for(const[o,t]of c.entries(e))s[o]\u003dd.Document.from_json(t);const a\u003d[];for(const e of o){const o\u003dm._resolve_element(e),d\u003dm._resolve_root_elements(e);if(null!\u003de.docid)a.push(await u.add_document_standalone(s[e.docid],o,d,e.use_for_title));else{if(null\u003d\u003de.token)throw new Error(\"Error rendering Bokeh items: either \u0027docid\u0027 or \u0027token\u0027 was expected.\");{const s\u003dl._get_ws_url(t,n);r.logger.debug(`embed: computed ws url: ${s}`);try{a.push(await l.add_document_from_session(s,e.token,o,d,e.use_for_title)),console.log(\"Bokeh items were rendered successfully\")}catch(e){console.log(\"Error rendering Bokeh items:\",e)}}}}return a}s(\"embed_items_notebook\",g.embed_items_notebook),s(\"kernels\",g.kernels),s(\"BOKEH_ROOT\",e(396).BOKEH_ROOT),t.embed_item\u003dasync function(e,o){const t\u003d{},n\u003d_.uuid4();t[n]\u003de.doc,null\u003d\u003do\u0026\u0026(o\u003de.target_id);const s\u003ddocument.getElementById(o);null!\u003ds\u0026\u0026s.classList.add(m.BOKEH_ROOT);const d\u003d{roots:{[e.root_id]:o},root_ids:[e.root_id],docid:n};await a.defer();const[r]\u003dawait w(t,[d]);return r},t.embed_items\u003dasync function(e,o,t,n){return await a.defer(),w(e,o,t,n)}},\n      function _(t,_,o,r,n){r();const a\u003dt(1);a.__exportStar(t(6),o),a.__exportStar(t(35),o)},\n      function _(e,t,s,o,n){o();const r\u003de(1),i\u003de(7),l\u003de(3),_\u003de(19),a\u003de(264),c\u003de(14),d\u003de(30),h\u003de(15),f\u003de(17),u\u003de(31),m\u003de(9),g\u003de(13),v\u003dr.__importStar(e(132)),w\u003de(26),p\u003de(8),b\u003de(319),y\u003de(130),k\u003de(53),M\u003de(394),j\u003de(35);class S{constructor(e){this.document\u003de,this.session\u003dnull,this.subscribed_models\u003dnew Set}send_event(e){const t\u003dnew j.MessageSentEvent(this.document,\"bokeh_event\",e.to_json());this.document._trigger_on_change(t)}trigger(e){for(const t of this.subscribed_models)null!\u003de.origin\u0026\u0026e.origin!\u003dt||t._process_event(e)}}s.EventManager\u003dS,S.__name__\u003d\"EventManager\",s.documents\u003d[],s.DEFAULT_TITLE\u003d\"Bokeh Application\";class E{constructor(e){var t;s.documents.push(this),this._init_timestamp\u003dDate.now(),this._resolver\u003dnull!\u003d\u003d(t\u003dnull\u003d\u003de?void 0:e.resolver)\u0026\u0026void 0!\u003d\u003dt?t:new i.ModelResolver,this._title\u003ds.DEFAULT_TITLE,this._roots\u003d[],this._all_models\u003dnew Map,this._all_models_freeze_count\u003d0,this._callbacks\u003dnew Map,this._message_callbacks\u003dnew Map,this.event_manager\u003dnew S(this),this.idle\u003dnew h.Signal0(this,\"idle\"),this._idle_roots\u003dnew WeakMap,this._interactive_timestamp\u003dnull,this._interactive_plot\u003dnull}get layoutables(){return this._roots.filter((e\u003d\u003ee instanceof b.LayoutDOM))}get is_idle(){for(const e of this.layoutables)if(!this._idle_roots.has(e))return!1;return!0}notify_idle(e){this._idle_roots.set(e,!0),this.is_idle\u0026\u0026(_.logger.info(`document idle at ${Date.now()-this._init_timestamp} ms`),this.event_manager.send_event(new a.DocumentReady),this.idle.emit())}clear(){this._push_all_models_freeze();try{for(;this._roots.length\u003e0;)this.remove_root(this._roots[0])}finally{this._pop_all_models_freeze()}}interactive_start(e){null\u003d\u003dthis._interactive_plot\u0026\u0026(this._interactive_plot\u003de,this._interactive_plot.trigger_event(new a.LODStart)),this._interactive_timestamp\u003dDate.now()}interactive_stop(){null!\u003dthis._interactive_plot\u0026\u0026this._interactive_plot.trigger_event(new a.LODEnd),this._interactive_plot\u003dnull,this._interactive_timestamp\u003dnull}interactive_duration(){return null\u003d\u003dthis._interactive_timestamp?-1:Date.now()-this._interactive_timestamp}destructively_move(e){if(e\u003d\u003d\u003dthis)throw new Error(\"Attempted to overwrite a document with itself\");e.clear();const t\u003dm.copy(this._roots);this.clear();for(const e of t)if(null!\u003de.document)throw new Error(`Somehow we didn\u0027t detach ${e}`);if(0!\u003dthis._all_models.size)throw new Error(`this._all_models still had stuff in it: ${this._all_models}`);for(const s of t)e.add_root(s);e.set_title(this._title)}_push_all_models_freeze(){this._all_models_freeze_count+\u003d1}_pop_all_models_freeze(){this._all_models_freeze_count-\u003d1,0\u003d\u003d\u003dthis._all_models_freeze_count\u0026\u0026this._recompute_all_models()}_invalidate_all_models(){_.logger.debug(\"invalidating document models\"),0\u003d\u003d\u003dthis._all_models_freeze_count\u0026\u0026this._recompute_all_models()}_recompute_all_models(){let e\u003dnew Set;for(const t of this._roots)e\u003dv.union(e,t.references());const t\u003dnew Set(this._all_models.values()),s\u003dv.difference(t,e),o\u003dv.difference(e,t),n\u003dnew Map;for(const t of e)n.set(t.id,t);for(const e of s)e.detach_document();for(const e of o)e.attach_document(this);this._all_models\u003dn}roots(){return this._roots}add_root(e,t){if(_.logger.debug(`Adding root: ${e}`),!m.includes(this._roots,e)){this._push_all_models_freeze();try{this._roots.push(e)}finally{this._pop_all_models_freeze()}this._trigger_on_change(new j.RootAddedEvent(this,e,t))}}remove_root(e,t){const s\u003dthis._roots.indexOf(e);if(!(s\u003c0)){this._push_all_models_freeze();try{this._roots.splice(s,1)}finally{this._pop_all_models_freeze()}this._trigger_on_change(new j.RootRemovedEvent(this,e,t))}}title(){return this._title}set_title(e,t){e!\u003d\u003dthis._title\u0026\u0026(this._title\u003de,this._trigger_on_change(new j.TitleChangedEvent(this,e,t)))}get_model_by_id(e){var t;return null!\u003d\u003d(t\u003dthis._all_models.get(e))\u0026\u0026void 0!\u003d\u003dt?t:null}get_model_by_name(e){const t\u003d[];for(const s of this._all_models.values())s instanceof k.Model\u0026\u0026s.name\u003d\u003de\u0026\u0026t.push(s);switch(t.length){case 0:return null;case 1:return t[0];default:throw new Error(`Multiple models are named \u0027${e}\u0027`)}}on_message(e,t){const s\u003dthis._message_callbacks.get(e);null\u003d\u003ds?this._message_callbacks.set(e,new Set([t])):s.add(t)}remove_on_message(e,t){var s;null\u003d\u003d\u003d(s\u003dthis._message_callbacks.get(e))||void 0\u003d\u003d\u003ds||s.delete(t)}_trigger_on_message(e,t){const s\u003dthis._message_callbacks.get(e);if(null!\u003ds)for(const e of s)e(t)}on_change(e,t\u003d!1){this._callbacks.has(e)||this._callbacks.set(e,t)}remove_on_change(e){this._callbacks.delete(e)}_trigger_on_change(e){for(const[t,s]of this._callbacks)if(!s\u0026\u0026e instanceof j.DocumentEventBatch)for(const s of e.events)t(s);else t(e)}_notify_change(e,t,s,o,n){this._trigger_on_change(new j.ModelChangedEvent(this,e,t,s,o,null\u003d\u003dn?void 0:n.setter_id,null\u003d\u003dn?void 0:n.hint))}static _instantiate_object(e,t,s,o){const n\u003dObject.assign(Object.assign({},s),{id:e,__deferred__:!0});return new(o.get(t))(n)}static _instantiate_references_json(e,t,s){var o;const n\u003dnew Map;for(const r of e){const e\u003dr.id,i\u003dr.type,l\u003dnull!\u003d\u003d(o\u003dr.attributes)\u0026\u0026void 0!\u003d\u003do?o:{};let _\u003dt.get(e);null\u003d\u003d_\u0026\u0026(_\u003dE._instantiate_object(e,i,l,s),null!\u003dr.subtype\u0026\u0026_.set_subtype(r.subtype)),n.set(_.id,_)}return n}static _resolve_refs(e,t,s,o){function n(e){var r;if(f.is_ref(e)){const o\u003dnull!\u003d\u003d(r\u003dt.get(e.id))\u0026\u0026void 0!\u003d\u003dr?r:s.get(e.id);if(null!\u003do)return o;throw new Error(`reference ${JSON.stringify(e)} isn\u0027t known (not in Document?)`)}return u.is_NDArray_ref(e)?u.decode_NDArray(e,o):p.isArray(e)?function(e){const t\u003d[];for(const s of e)t.push(n(s));return t}(e):p.isPlainObject(e)?function(e){const t\u003d{};for(const[s,o]of g.entries(e))t[s]\u003dn(o);return t}(e):e}return n(e)}static _initialize_references_json(e,t,s,o){const n\u003dnew Map;for(const{id:r,attributes:i}of e){const e\u003d!t.has(r),l\u003de?s.get(r):t.get(r),_\u003dE._resolve_refs(i,t,s,o);l.setv(_,{silent:!0}),n.set(r,{instance:l,is_new:e})}const r\u003d[],i\u003dnew Set;function l(e){if(e instanceof c.HasProps){if(n.has(e.id)\u0026\u0026!i.has(e.id)){i.add(e.id);const{instance:t,is_new:s}\u003dn.get(e.id),{attributes:o}\u003dt;for(const e of g.values(o))l(e);s\u0026\u0026(t.finalize(),r.push(t))}}else if(p.isArray(e))for(const t of e)l(t);else if(p.isPlainObject(e))for(const t of g.values(e))l(t)}for(const e of n.values())l(e.instance);for(const e of r)e.connect_signals()}static _event_for_attribute_change(e,t,s,o,n){if(o.get_model_by_id(e.id).property(t).syncable){const r\u003d{kind:\"ModelChanged\",model:{id:e.id},attr:t,new:s};return c.HasProps._json_record_references(o,s,n,{recursive:!0}),r}return null}static _events_to_sync_objects(e,t,s,o){const n\u003dObject.keys(e.attributes),r\u003dObject.keys(t.attributes),i\u003dm.difference(n,r),l\u003dm.difference(r,n),a\u003dm.intersection(n,r),c\u003d[];for(const e of i)_.logger.warn(`Server sent key ${e} but we don\u0027t seem to have it in our JSON`);for(const n of l){const r\u003dt.attributes[n];c.push(E._event_for_attribute_change(e,n,r,s,o))}for(const n of a){const r\u003de.attributes[n],i\u003dt.attributes[n];null\u003d\u003dr\u0026\u0026null\u003d\u003di||(null\u003d\u003dr||null\u003d\u003di?c.push(E._event_for_attribute_change(e,n,i,s,o)):w.is_equal(r,i)||c.push(E._event_for_attribute_change(e,n,i,s,o)))}return c.filter((e\u003d\u003enull!\u003de))}static _compute_patch_since_json(e,t){const s\u003dt.to_json(!1);function o(e){const t\u003dnew Map;for(const s of e.roots.references)t.set(s.id,s);return t}const n\u003do(e),r\u003dnew Map,i\u003d[];for(const t of e.roots.root_ids)r.set(t,n.get(t)),i.push(t);const l\u003do(s),_\u003dnew Map,a\u003d[];for(const e of s.roots.root_ids)_.set(e,l.get(e)),a.push(e);if(i.sort(),a.sort(),m.difference(i,a).length\u003e0||m.difference(a,i).length\u003e0)throw new Error(\"Not implemented: computing add/remove of document roots\");const c\u003dnew Set;let h\u003d[];for(const e of t._all_models.keys())if(n.has(e)){const s\u003dE._events_to_sync_objects(n.get(e),l.get(e),t,c);h\u003dh.concat(s)}const f\u003dnew d.Serializer({include_defaults:!1});return f.to_serializable([...c]),{references:[...f.definitions],events:h}}to_json_string(e\u003d!0){return JSON.stringify(this.to_json(e))}to_json(e\u003d!0){const t\u003dnew d.Serializer({include_defaults:e}),s\u003dt.to_serializable(this._roots);return{version:l.version,title:this._title,roots:{root_ids:s.map((e\u003d\u003ee.id)),references:[...t.definitions]}}}static from_json_string(e){const t\u003dJSON.parse(e);return E.from_json(t)}static from_json(e){_.logger.debug(\"Creating Document from JSON\");const t\u003de.version,s\u003d-1!\u003d\u003dt.indexOf(\"+\")||-1!\u003d\u003dt.indexOf(\"-\"),o\u003d`Library versions: JS (${l.version}) / Python (${t})`;s||l.version.replace(/-(dev|rc)\\./,\"$1\")\u003d\u003dt?_.logger.debug(o):(_.logger.warn(\"JS/Python version mismatch\"),_.logger.warn(o));const n\u003dnew i.ModelResolver;null!\u003de.defs\u0026\u0026M.resolve_defs(e.defs,n);const r\u003de.roots,a\u003dr.root_ids,c\u003dr.references,d\u003dE._instantiate_references_json(c,new Map,n);E._initialize_references_json(c,new Map,d,new Map);const h\u003dnew E({resolver:n});for(const e of a){const t\u003dd.get(e);null!\u003dt\u0026\u0026h.add_root(t)}return h.set_title(e.title),h}replace_with_json(e){E.from_json(e).destructively_move(this)}create_json_patch_string(e){return JSON.stringify(this.create_json_patch(e))}create_json_patch(e){for(const t of e)if(t.document!\u003dthis)throw new Error(\"Cannot create a patch using events from a different document\");const t\u003dnew d.Serializer,s\u003dt.to_serializable(e);for(const e of this._all_models.values())t.remove_def(e);return{events:s,references:[...t.definitions]}}apply_json_patch(e,t\u003dnew Map,s){const o\u003de.references,n\u003de.events,r\u003dE._instantiate_references_json(o,this._all_models,this._resolver);t instanceof Map||(t\u003dnew Map(t));for(const e of n)switch(e.kind){case\"RootAdded\":case\"RootRemoved\":case\"ModelChanged\":{const t\u003de.model.id,s\u003dthis._all_models.get(t);if(null!\u003ds)r.set(t,s);else if(!r.has(t))throw _.logger.warn(`Got an event for unknown model ${e.model}\"`),new Error(\"event model wasn\u0027t known\");break}}const i\u003dnew Map(this._all_models),l\u003dnew Map;for(const[e,t]of r)i.has(e)||l.set(e,t);E._initialize_references_json(o,i,l,t);for(const e of n)switch(e.kind){case\"MessageSent\":{const{msg_type:s,msg_data:o}\u003de;let n;if(void 0\u003d\u003d\u003do){if(1!\u003dt.size)throw new Error(\"expected exactly one buffer\");{const[[,e]]\u003dt;n\u003de}}else n\u003dE._resolve_refs(o,i,l,t);this._trigger_on_message(s,n);break}case\"ModelChanged\":{const o\u003de.model.id,n\u003dthis._all_models.get(o);if(null\u003d\u003dn)throw new Error(`Cannot apply patch to ${o} which is not in the document`);const r\u003de.attr,_\u003dE._resolve_refs(e.new,i,l,t);n.setv({[r]:_},{setter_id:s});break}case\"ColumnDataChanged\":{const o\u003de.column_source.id,n\u003dthis._all_models.get(o);if(null\u003d\u003dn)throw new Error(`Cannot stream to ${o} which is not in the document`);const r\u003dE._resolve_refs(e.new,new Map,new Map,t);if(null!\u003de.cols)for(const e in n.data)e in r||(r[e]\u003dn.data[e]);n.setv({data:r},{setter_id:s,check_eq:!1});break}case\"ColumnsStreamed\":{const t\u003de.column_source.id,o\u003dthis._all_models.get(t);if(null\u003d\u003do)throw new Error(`Cannot stream to ${t} which is not in the document`);if(!(o instanceof y.ColumnDataSource))throw new Error(\"Cannot stream to non-ColumnDataSource\");const n\u003de.data,r\u003de.rollover;o.stream(n,r,s);break}case\"ColumnsPatched\":{const t\u003de.column_source.id,o\u003dthis._all_models.get(t);if(null\u003d\u003do)throw new Error(`Cannot patch ${t} which is not in the document`);if(!(o instanceof y.ColumnDataSource))throw new Error(\"Cannot patch non-ColumnDataSource\");const n\u003de.patches;o.patch(n,s);break}case\"RootAdded\":{const t\u003de.model.id,o\u003dr.get(t);this.add_root(o,s);break}case\"RootRemoved\":{const t\u003de.model.id,o\u003dr.get(t);this.remove_root(o,s);break}case\"TitleChanged\":this.set_title(e.title,s);break;default:throw new Error(\"Unknown patch event \"+JSON.stringify(e))}}}s.Document\u003dE,E.__name__\u003d\"Document\"},\n      function _(e,o,s,r,t){r();const l\u003de(1),d\u003de(8),i\u003de(13),n\u003de(14);s.overrides\u003d{};const a\u003dnew Map;s.Models\u003de\u003d\u003e{const o\u003ds.Models.get(e);if(null!\u003do)return o;throw new Error(`Model \u0027${e}\u0027 does not exist. This could be due to a widget or a custom model not being registered before first usage.`)},s.Models.get\u003de\u003d\u003e{var o;return null!\u003d\u003d(o\u003ds.overrides[e])\u0026\u0026void 0!\u003d\u003do?o:a.get(e)},s.Models.register\u003d(e,o)\u003d\u003e{s.overrides[e]\u003do},s.Models.unregister\u003de\u003d\u003e{delete s.overrides[e]},s.Models.register_models\u003d(e,o\u003d!1,s)\u003d\u003e{var r;if(null!\u003de)for(const t of d.isArray(e)?e:i.values(e))if(r\u003dt,d.isObject(r)\u0026\u0026r.prototype instanceof n.HasProps){const e\u003dt.__qualified__;o||!a.has(e)?a.set(e,t):null!\u003ds?s(e):console.warn(`Model \u0027${e}\u0027 was already registered`)}},s.register_models\u003ds.Models.register_models,s.Models.registered_names\u003d()\u003d\u003e[...a.keys()];class u{constructor(){this._known_models\u003dnew Map}get(e,o){var r;const t\u003dnull!\u003d\u003d(r\u003ds.Models.get(e))\u0026\u0026void 0!\u003d\u003dr?r:this._known_models.get(e);if(null!\u003dt)return t;if(void 0!\u003d\u003do)return o;throw new Error(`Model \u0027${e}\u0027 does not exist. This could be due to a widget or a custom model not being registered before first usage.`)}register(e){const o\u003de.__qualified__;null\u003d\u003dthis.get(o,null)?this._known_models.set(o,e):console.warn(`Model \u0027${o}\u0027 was already registered with this resolver`)}}s.ModelResolver\u003du,u.__name__\u003d\"ModelResolver\";const _\u003dl.__importStar(e(38));s.register_models(_)},\n      function _(n,r,t,e,i){e();\n      //     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters \u0026 Editors\n      //     Underscore may be freely distributed under the MIT license.\n      const o\u003dn(9),u\u003dObject.prototype.toString;function c(n){return!0\u003d\u003d\u003dn||!1\u003d\u003d\u003dn||\"[object Boolean]\"\u003d\u003d\u003du.call(n)}function f(n){return\"[object Number]\"\u003d\u003d\u003du.call(n)}function a(n){return\"[object String]\"\u003d\u003d\u003du.call(n)}function l(n){const r\u003dtypeof n;return\"function\"\u003d\u003d\u003dr||\"object\"\u003d\u003d\u003dr\u0026\u0026!!n}function s(n){return l(n)\u0026\u0026void 0!\u003d\u003dn[Symbol.iterator]}t.isBoolean\u003dc,t.isNumber\u003df,t.isInteger\u003dfunction(n){return f(n)\u0026\u0026Number.isInteger(n)},t.isString\u003da,t.isPrimitive\u003dfunction(n){return null\u003d\u003d\u003dn||c(n)||f(n)||a(n)},t.isFunction\u003dfunction(n){return\"[object Function]\"\u003d\u003d\u003du.call(n)},t.isArray\u003dfunction(n){return Array.isArray(n)},t.isArrayOf\u003dfunction(n,r){return o.every(n,r)},t.isArrayableOf\u003dfunction(n,r){for(let t\u003d0,e\u003dn.length;t\u003ce;t++)if(!r(n[t]))return!1;return!0},t.isTypedArray\u003dfunction(n){return ArrayBuffer.isView(n)\u0026\u0026!(n instanceof DataView)},t.isObject\u003dl,t.isPlainObject\u003dfunction(n){return l(n)\u0026\u0026(null\u003d\u003dn.constructor||n.constructor\u003d\u003d\u003dObject)},t.isIterable\u003ds,t.isArrayable\u003dfunction(n){return s(n)\u0026\u0026\"length\"in n}},\n      function _(n,t,e,r,o){r();\n      //     (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters \u0026 Editors\n      //     Underscore may be freely distributed under the MIT license.\n      const i\u003dn(10),u\u003dn(11),c\u003dn(12);o(\"map\",c.map),o(\"reduce\",c.reduce),o(\"min\",c.min),o(\"min_by\",c.min_by),o(\"max\",c.max),o(\"max_by\",c.max_by),o(\"sum\",c.sum),o(\"cumsum\",c.cumsum),o(\"every\",c.every),o(\"some\",c.some),o(\"find\",c.find),o(\"find_last\",c.find_last),o(\"find_index\",c.find_index),o(\"find_last_index\",c.find_last_index),o(\"sorted_index\",c.sorted_index),o(\"is_empty\",c.is_empty);const f\u003dArray.prototype.slice;function s(n){return f.call(n)}function a(n){return[].concat(...n)}function l(n,t){return-1!\u003d\u003dn.indexOf(t)}function m(n,t,e\u003d1){u.assert(e\u003e0,\"\u0027step\u0027 must be a positive number\"),null\u003d\u003dt\u0026\u0026(t\u003dn,n\u003d0);const{max:r,ceil:o,abs:i}\u003dMath,c\u003dn\u003c\u003dt?e:-e,f\u003dr(o(i(t-n)/e),0),s\u003dnew Array(f);for(let t\u003d0;t\u003cf;t++,n+\u003dc)s[t]\u003dn;return s}e.head\u003dfunction(n){return n[0]},e.tail\u003dfunction(n){return n[n.length-1]},e.last\u003dfunction(n){return n[n.length-1]},e.copy\u003ds,e.concat\u003da,e.includes\u003dl,e.contains\u003dl,e.nth\u003dfunction(n,t){return n[t\u003e\u003d0?t:n.length+t]},e.zip\u003dfunction(...n){if(0\u003d\u003dn.length)return[];const t\u003dc.min(n.map((n\u003d\u003en.length))),e\u003dn.length,r\u003dnew Array(t);for(let o\u003d0;o\u003ct;o++){r[o]\u003dnew Array(e);for(let t\u003d0;t\u003ce;t++)r[o][t]\u003dn[t][o]}return r},e.unzip\u003dfunction(n){const t\u003dn.length,e\u003dc.min(n.map((n\u003d\u003en.length))),r\u003dArray(e);for(let n\u003d0;n\u003ce;n++)r[n]\u003dnew Array(t);for(let o\u003d0;o\u003ct;o++)for(let t\u003d0;t\u003ce;t++)r[t][o]\u003dn[o][t];return r},e.range\u003dm,e.linspace\u003dfunction(n,t,e\u003d100){const r\u003d(t-n)/(e-1),o\u003dnew Array(e);for(let t\u003d0;t\u003ce;t++)o[t]\u003dn+r*t;return o},e.transpose\u003dfunction(n){const t\u003dn.length,e\u003dn[0].length,r\u003d[];for(let o\u003d0;o\u003ce;o++){r[o]\u003d[];for(let e\u003d0;e\u003ct;e++)r[o][e]\u003dn[e][o]}return r},e.argmin\u003dfunction(n){return c.min_by(m(n.length),(t\u003d\u003en[t]))},e.argmax\u003dfunction(n){return c.max_by(m(n.length),(t\u003d\u003en[t]))},e.sort_by\u003dfunction(n,t){const e\u003dn.map(((n,e)\u003d\u003e({value:n,index:e,key:t(n)})));return e.sort(((n,t)\u003d\u003e{const e\u003dn.key,r\u003dt.key;if(e!\u003d\u003dr){if(e\u003er||void 0\u003d\u003d\u003de)return 1;if(e\u003cr||void 0\u003d\u003d\u003dr)return-1}return n.index-t.index})),e.map((n\u003d\u003en.value))},e.uniq\u003dfunction(n){const t\u003dnew Set;for(const e of n)t.add(e);return[...t]},e.uniq_by\u003dfunction(n,t){const e\u003d[],r\u003d[];for(const o of n){const n\u003dt(o);l(r,n)||(r.push(n),e.push(o))}return e},e.union\u003dfunction(...n){const t\u003dnew Set;for(const e of n)for(const n of e)t.add(n);return[...t]},e.intersection\u003dfunction(n,...t){const e\u003d[];n:for(const r of n)if(!l(e,r)){for(const n of t)if(!l(n,r))continue n;e.push(r)}return e},e.difference\u003dfunction(n,...t){const e\u003da(t);return n.filter((n\u003d\u003e!l(e,n)))},e.remove_at\u003dfunction(n,t){const e\u003ds(n);return e.splice(t,1),e},e.remove_by\u003dfunction(n,t){for(let e\u003d0;e\u003cn.length;)t(n[e])?n.splice(e,1):e++},e.shuffle\u003dfunction(n){const t\u003dn.length,e\u003dnew Array(t);for(let r\u003d0;r\u003ct;r++){const t\u003di.randomIn(0,r);t!\u003d\u003dr\u0026\u0026(e[r]\u003de[t]),e[t]\u003dn[r]}return e},e.pairwise\u003dfunction(n,t){const e\u003dn.length,r\u003dnew Array(e-1);for(let o\u003d0;o\u003ce-1;o++)r[o]\u003dt(n[o],n[o+1]);return r},e.reversed\u003dfunction(n){const t\u003dn.length,e\u003dnew Array(t);for(let r\u003d0;r\u003ct;r++)e[t-r-1]\u003dn[r];return e},e.repeat\u003dfunction(n,t){const e\u003dnew Array(t);for(let r\u003d0;r\u003ct;r++)e[r]\u003dn;return e}},\n      function _(n,r,t,e,o){e();const{PI:u}\u003dMath;function a(n){if(0\u003d\u003dn)return 0;for(;n\u003c\u003d0;)n+\u003d2*u;for(;n\u003e2*u;)n-\u003d2*u;return n}function c(n,r){return a(n-r)}function f(){return Math.random()}function i(n){switch(n){case\"deg\":return u/180;case\"rad\":return 1;case\"grad\":return u/200;case\"turn\":return 2*u}}t.angle_norm\u003da,t.angle_dist\u003dc,t.angle_between\u003dfunction(n,r,t,e\u003d!1){const o\u003dc(r,t);if(0\u003d\u003do)return!1;if(o\u003d\u003d2*u)return!0;const f\u003da(n),i\u003dc(r,f)\u003c\u003do\u0026\u0026c(f,t)\u003c\u003do;return e?!i:i},t.random\u003df,t.randomIn\u003dfunction(n,r){return null\u003d\u003dr\u0026\u0026(r\u003dn,n\u003d0),n+Math.floor(Math.random()*(r-n+1))},t.atan2\u003dfunction(n,r){return Math.atan2(r[1]-n[1],r[0]-n[0])},t.radians\u003dfunction(n){return n*(u/180)},t.degrees\u003dfunction(n){return n/(u/180)},t.resolve_angle\u003dfunction(n,r){return-i(r)*n},t.to_radians_coeff\u003di,t.rnorm\u003dfunction(n,r){let t,e;for(;t\u003df(),e\u003df(),e\u003d(2*e-1)*Math.sqrt(1/Math.E*2),!(-4*t*t*Math.log(t)\u003e\u003de*e););let o\u003de/t;return o\u003dn+r*o,o},t.clamp\u003dfunction(n,r,t){return n\u003cr?r:n\u003et?t:n},t.log\u003dfunction(n,r\u003dMath.E){return Math.log(n)/Math.log(r)}},\n      function _(r,n,e,o,s){o();class t extends Error{}e.AssertionError\u003dt,t.__name__\u003d\"AssertionError\",e.assert\u003dfunction(r,n){if(!(!0\u003d\u003d\u003dr||!1!\u003d\u003dr\u0026\u0026r()))throw new t(null!\u003dn?n:\"Assertion failed\")},e.unreachable\u003dfunction(){throw new Error(\"unreachable code\")}},\n      function _(n,t,e,r,o){r();const i\u003dn(10);function l(n,t,e,...r){const o\u003dn.length;t\u003c0\u0026\u0026(t+\u003do),t\u003c0?t\u003d0:t\u003eo\u0026\u0026(t\u003do),null\u003d\u003de||e\u003eo-t?e\u003do-t:e\u003c0\u0026\u0026(e\u003d0);const i\u003do-e+r.length,l\u003dnew n.constructor(i);let u\u003d0;for(;u\u003ct;u++)l[u]\u003dn[u];for(const n of r)l[u++]\u003dn;for(let r\u003dt+e;r\u003co;r++)l[u++]\u003dn[r];return l}function u(n,t){return l(n,t,n.length-t)}function c(n,t){const e\u003dn.length,r\u003dnew n.constructor(e);for(let o\u003d0;o\u003ce;o++)r[o]\u003dt(n[o],o,n);return r}function f(n,t,e){const r\u003dn.length;if(void 0\u003d\u003d\u003de\u0026\u00260\u003d\u003dr)throw new Error(\"can\u0027t reduce an empty array without an initial value\");let o,i;for(void 0\u003d\u003d\u003de?(o\u003dn[0],i\u003d1):(o\u003de,i\u003d0);i\u003cr;i++)o\u003dt(o,n[i],i,n);return o}function s(n){return function(t,e){const r\u003dt.length;let o\u003dn\u003e0?0:r-1;for(;o\u003e\u003d0\u0026\u0026o\u003cr;o+\u003dn)if(e(t[o]))return o;return-1}}function h(n,t){let e\u003d0,r\u003dn.length;for(;e\u003cr;){const o\u003dMath.floor((e+r)/2);n[o]\u003ct?e\u003do+1:r\u003do}return e}function a(n,t,e,r,o){const i\u003d(o-e)/(r-t);let l\u003di*(n-t)+e;return isFinite(l)||(l\u003di*(n-r)+o,isFinite(l)||e!\u003do||(l\u003de)),l}function g(n,t){if(n\u003ct[0])return-1;if(n\u003et[t.length-1])return t.length;let e\u003d0,r\u003dt.length-1;for(;r-e!\u003d1;){const o\u003de+Math.floor((r-e)/2);n\u003e\u003dt[o]?e\u003do:r\u003do}return e}e.is_empty\u003dfunction(n){return 0\u003d\u003dn.length},e.copy\u003dfunction(n){return Array.isArray(n)?n.slice():new n.constructor(n)},e.splice\u003dl,e.head\u003du,e.insert\u003dfunction(n,t,e){return l(n,e,0,t)},e.append\u003dfunction(n,t){return l(n,n.length,0,t)},e.prepend\u003dfunction(n,t){return l(n,0,0,t)},e.indexOf\u003dfunction(n,t){for(let e\u003d0,r\u003dn.length;e\u003cr;e++)if(n[e]\u003d\u003d\u003dt)return e;return-1},e.subselect\u003dfunction(n,t){const e\u003dt.length,r\u003dnew n.constructor(e);for(let o\u003d0;o\u003ce;o++)r[o]\u003dn[t[o]];return r},e.mul\u003dfunction(n,t,e){const r\u003dn.length,o\u003dnull!\u003de?e:new n.constructor(r);for(let e\u003d0;e\u003cr;e++)o[e]\u003dn[e]*t;return o},e.map\u003dc,e.inplace_map\u003dfunction(n,t,e){const r\u003dn.length,o\u003dnull!\u003de?e:n;for(let e\u003d0;e\u003cr;e++)o[e]\u003dt(n[e],e)},e.filter\u003dfunction(n,t){const e\u003dn.length,r\u003dnew n.constructor(e);let o\u003d0;for(let i\u003d0;i\u003ce;i++){const e\u003dn[i];t(e,i,n)\u0026\u0026(r[o++]\u003de)}return u(r,o)},e.reduce\u003df,e.min\u003dfunction(n){let t,e\u003d1/0;for(let r\u003d0,o\u003dn.length;r\u003co;r++)t\u003dn[r],!isNaN(t)\u0026\u0026t\u003ce\u0026\u0026(e\u003dt);return e},e.max\u003dfunction(n){let t,e\u003d-1/0;for(let r\u003d0,o\u003dn.length;r\u003co;r++)t\u003dn[r],!isNaN(t)\u0026\u0026t\u003ee\u0026\u0026(e\u003dt);return e},e.minmax\u003dfunction(n){let t,e\u003d1/0,r\u003d-1/0;for(let o\u003d0,i\u003dn.length;o\u003ci;o++)t\u003dn[o],isNaN(t)||(t\u003ce\u0026\u0026(e\u003dt),t\u003er\u0026\u0026(r\u003dt));return[e,r]},e.min_by\u003dfunction(n,t){if(0\u003d\u003dn.length)throw new Error(\"min_by() called with an empty array\");let e\u003dn[0],r\u003dt(e);for(let o\u003d1,i\u003dn.length;o\u003ci;o++){const i\u003dn[o],l\u003dt(i);l\u003cr\u0026\u0026(e\u003di,r\u003dl)}return e},e.max_by\u003dfunction(n,t){if(0\u003d\u003dn.length)throw new Error(\"max_by() called with an empty array\");let e\u003dn[0],r\u003dt(e);for(let o\u003d1,i\u003dn.length;o\u003ci;o++){const i\u003dn[o],l\u003dt(i);l\u003er\u0026\u0026(e\u003di,r\u003dl)}return e},e.sum\u003dfunction(n){let t\u003d0;for(let e\u003d0,r\u003dn.length;e\u003cr;e++)t+\u003dn[e];return t},e.cumsum\u003dfunction(n){const t\u003dnew n.constructor(n.length);return f(n,((n,e,r)\u003d\u003et[r]\u003dn+e),0),t},e.every\u003dfunction(n,t){for(let e\u003d0,r\u003dn.length;e\u003cr;e++)if(!t(n[e]))return!1;return!0},e.some\u003dfunction(n,t){for(let e\u003d0,r\u003dn.length;e\u003cr;e++)if(t(n[e]))return!0;return!1},e.index_of\u003dfunction(n,t){for(let e\u003d0,r\u003dn.length;e\u003cr;e++)if(n[e]\u003d\u003d\u003dt)return e;return-1},e.find_index\u003ds(1),e.find_last_index\u003ds(-1),e.find\u003dfunction(n,t){const r\u003de.find_index(n,t);return-1\u003d\u003dr?void 0:n[r]},e.find_last\u003dfunction(n,t){const r\u003de.find_last_index(n,t);return-1\u003d\u003dr?void 0:n[r]},e.sorted_index\u003dh,e.bin_counts\u003dfunction(n,t){const e\u003dt.length-1,r\u003dArray(e).fill(0);for(let o\u003d0;o\u003cn.length;o++){const l\u003dh(t,n[o]);r[i.clamp(l-1,0,e-1)]+\u003d1}return r},e.interpolate\u003dfunction(n,t,e){const r\u003dn.length,o\u003dnew Array(r);for(let i\u003d0;i\u003cr;i++){const r\u003dn[i];if(isNaN(r)){o[i]\u003dr;continue}const l\u003dg(r,t);if(-1\u003d\u003dl)o[i]\u003de[0];else if(l\u003d\u003dt.length)o[i]\u003de[e.length-1];else if(l\u003d\u003dt.length-1||t[l]\u003d\u003dr)o[i]\u003de[l];else{const n\u003dt[l],u\u003de[l],c\u003dt[l+1],f\u003de[l+1];o[i]\u003da(r,n,u,c,f)}}return o},e.left_edge_index\u003dg,e.norm\u003dfunction(n,t,e){const r\u003de-t;return c(n,(n\u003d\u003e(n-t)/r))}},\n      function _(t,e,n,c,o){c();const s\u003dt(9),{hasOwnProperty:r}\u003dObject.prototype;function u(t){return Object.keys(t).length}n.keys\u003dObject.keys,n.values\u003dObject.values,n.entries\u003dObject.entries,n.extend\u003dObject.assign,n.clone\u003dfunction(t){return Object.assign({},t)},n.merge\u003dfunction(t,e){const n\u003dObject.create(Object.prototype),c\u003ds.concat([Object.keys(t),Object.keys(e)]);for(const o of c){const c\u003dr.call(t,o)?t[o]:[],u\u003dr.call(e,o)?e[o]:[];n[o]\u003ds.union(c,u)}return n},n.size\u003du,n.isEmpty\u003dfunction(t){return 0\u003d\u003du(t)},n.to_object\u003dfunction(t){const e\u003d{};for(const[n,c]of t)e[n]\u003dc;return e}},\n      function _(t,e,s,n,r){n();const i\u003dt(1),o\u003dt(15),c\u003dt(17),a\u003di.__importStar(t(18)),_\u003di.__importStar(t(21)),h\u003dt(34),u\u003dt(13),l\u003dt(8),f\u003dt(26),p\u003dt(30),d\u003dt(35),g\u003dt(26),y\u003dt(36),v\u003dt(37),m\u003di.__importStar(t(21));class b extends(o.Signalable()){constructor(t\u003d{}){var e,s;super(),this._subtype\u003dvoid 0,this.document\u003dnull,this.destroyed\u003dnew o.Signal0(this,\"destroyed\"),this.change\u003dnew o.Signal0(this,\"change\"),this.transformchange\u003dnew o.Signal0(this,\"transformchange\"),this.exprchange\u003dnew o.Signal0(this,\"exprchange\"),this.properties\u003d{},this._pending\u003d!1,this._changing\u003d!1;const n\u003dt instanceof Map?t.get.bind(t):e\u003d\u003et[e];this.id\u003dnull!\u003d\u003d(e\u003dn(\"id\"))\u0026\u0026void 0!\u003d\u003de?e:h.uniqueId();for(const[t,{type:e,default_value:s,options:r}]of u.entries(this._props)){let i;e instanceof a.PropertyAlias?Object.defineProperty(this.properties,t,{get:()\u003d\u003ethis.properties[e.attr],configurable:!1,enumerable:!1}):(i\u003de instanceof _.Kind?new a.PrimitiveProperty(this,t,e,s,n(t),r):new e(this,t,_.Any,s,n(t),r),this.properties[t]\u003di)}null!\u003d\u003d(s\u003dn(\"__deferred__\"))\u0026\u0026void 0!\u003d\u003ds\u0026\u0026s||(this.finalize(),this.connect_signals())}get is_syncable(){return!0}set type(t){console.warn(\"prototype.type \u003d \u0027ModelName\u0027 is deprecated, use static __name__ instead\"),this.constructor.__name__\u003dt}get type(){return this.constructor.__qualified__}static get __qualified__(){const{__module__:t,__name__:e}\u003dthis;return null!\u003dt?`${t}.${e}`:e}static get[Symbol.toStringTag](){return this.__name__}static init_HasProps(){this.prototype._props\u003d{},this.prototype._mixins\u003d[]}static _fix_default(t,e){if(void 0\u003d\u003d\u003dt||l.isFunction(t))return t;if(l.isPrimitive(t))return()\u003d\u003et;{const e\u003dnew v.Cloner;return()\u003d\u003ee.clone(t)}}static define(t){for(const[e,s]of u.entries(l.isFunction(t)?t(m):t)){if(null!\u003dthis.prototype._props[e])throw new Error(`attempted to redefine property \u0027${this.prototype.type}.${e}\u0027`);if(null!\u003dthis.prototype[e])throw new Error(`attempted to redefine attribute \u0027${this.prototype.type}.${e}\u0027`);Object.defineProperty(this.prototype,e,{get(){return this.properties[e].get_value()},set(t){return this.setv({[e]:t}),this},configurable:!1,enumerable:!0});const[t,n,r\u003d{}]\u003ds,i\u003d{type:t,default_value:this._fix_default(n,e),options:r},o\u003dObject.assign({},this.prototype._props);o[e]\u003di,this.prototype._props\u003do}}static internal(t){const e\u003d{};for(const[s,n]of u.entries(l.isFunction(t)?t(m):t)){const[t,r,i\u003d{}]\u003dn;e[s]\u003d[t,r,Object.assign(Object.assign({},i),{internal:!0})]}this.define(e)}static mixins(t){function e(t,e){const s\u003d{};for(const[n,r]of u.entries(e))s[t+n]\u003dr;return s}const s\u003d{},n\u003d[];for(const r of l.isArray(t)?t:[t])if(l.isArray(r)){const[t,i]\u003dr;u.extend(s,e(t,i)),n.push([t,i])}else{const t\u003dr;u.extend(s,t),n.push([\"\",t])}this.define(s),this.prototype._mixins\u003d[...this.prototype._mixins,...n]}static override(t){for(const[e,s]of u.entries(t)){const t\u003dthis._fix_default(s,e),n\u003dthis.prototype._props[e];if(null\u003d\u003dn)throw new Error(`attempted to override nonexistent \u0027${this.prototype.type}.${e}\u0027`);const r\u003dObject.assign({},this.prototype._props);r[e]\u003dObject.assign(Object.assign({},n),{default_value:t}),this.prototype._props\u003dr}}toString(){return`${this.type}(${this.id})`}property(t){const e\u003dthis.properties[t];if(null!\u003de)return e;throw new Error(`unknown property ${this.type}.${t}`)}get attributes(){const t\u003d{};for(const e of this)t[e.attr]\u003de.get_value();return t}[v.clone](t){const e\u003dnew Map;for(const s of this)s.dirty\u0026\u0026e.set(s.attr,t.clone(s.get_value()));return new this.constructor(e)}[g.equals](t,e){for(const s of this){const n\u003dt.property(s.attr);if(e.eq(s.get_value(),n.get_value()))return!1}return!0}[y.pretty](t){const e\u003dt.token,s\u003d[];for(const n of this)if(n.dirty){const r\u003dn.get_value();s.push(`${n.attr}${e(\":\")} ${t.to_string(r)}`)}return`${this.constructor.__qualified__}${e(\"(\")}${e(\"{\")}${s.join(`${e(\",\")} `)}${e(\"}\")}${e(\")\")}`}[p.serialize](t){const e\u003dthis.ref();t.add_ref(this,e);const s\u003dthis.struct();for(const e of this)e.syncable\u0026\u0026(t.include_defaults||e.dirty)\u0026\u0026(s.attributes[e.attr]\u003dt.to_serializable(e.get_value()));return t.add_def(this,s),e}finalize(){for(const t of this){if(!(t instanceof a.VectorSpec||t instanceof a.ScalarSpec))continue;const e\u003dt.get_value();if(null!\u003de){const{transform:t,expr:s}\u003de;null!\u003dt\u0026\u0026this.connect(t.change,(()\u003d\u003ethis.transformchange.emit())),null!\u003ds\u0026\u0026this.connect(s.change,(()\u003d\u003ethis.exprchange.emit()))}}this.initialize()}initialize(){}connect_signals(){}disconnect_signals(){o.Signal.disconnectReceiver(this)}destroy(){this.disconnect_signals(),this.destroyed.emit()}clone(){return(new v.Cloner).clone(this)}_setv(t,e){const s\u003de.check_eq,n\u003d[],r\u003dthis._changing;this._changing\u003d!0;for(const[e,r]of t)!1!\u003d\u003ds\u0026\u0026f.is_equal(e.get_value(),r)||(e.set_value(r),n.push(e));n.length\u003e0\u0026\u0026(this._pending\u003d!0);for(const t of n)t.change.emit();if(!r){if(!e.no_change)for(;this._pending;)this._pending\u003d!1,this.change.emit();this._pending\u003d!1,this._changing\u003d!1}}setv(t,e\u003d{}){const s\u003du.entries(t);if(0\u003d\u003ds.length)return;if(!0\u003d\u003d\u003de.silent){for(const[t,e]of s)this.properties[t].set_value(e);return}const n\u003dnew Map,r\u003dnew Map;for(const[t,e]of s){const s\u003dthis.properties[t];n.set(s,e),r.set(s,s.get_value())}this._setv(n,e);const{document:i}\u003dthis;if(null!\u003di){const t\u003d[];for(const[e,s]of r)t.push([e,s,e.get_value()]);for(const[,e,s]of t)if(this._needs_invalidate(e,s)){i._invalidate_all_models();break}this._push_changes(t,e)}}getv(t){return this.property(t).get_value()}ref(){return{id:this.id}}struct(){const t\u003d{type:this.type,id:this.id,attributes:{}};return null!\u003dthis._subtype\u0026\u0026(t.subtype\u003dthis._subtype),t}set_subtype(t){this._subtype\u003dt}*[Symbol.iterator](){yield*u.values(this.properties)}*syncable_properties(){for(const t of this)t.syncable\u0026\u0026(yield t)}serializable_attributes(){const t\u003d{};for(const e of this.syncable_properties())t[e.attr]\u003de.get_value();return t}static _json_record_references(t,e,s,n){const{recursive:r}\u003dn;if(c.is_ref(e)){const n\u003dt.get_model_by_id(e.id);null\u003d\u003dn||s.has(n)||b._value_record_references(n,s,{recursive:r})}else if(l.isArray(e))for(const n of e)b._json_record_references(t,n,s,{recursive:r});else if(l.isPlainObject(e))for(const n of u.values(e))b._json_record_references(t,n,s,{recursive:r})}static _value_record_references(t,e,s){const{recursive:n}\u003ds;if(t instanceof b){if(!e.has(t)\u0026\u0026(e.add(t),n))for(const s of t.syncable_properties()){const t\u003ds.get_value();b._value_record_references(t,e,{recursive:n})}}else if(l.isArray(t))for(const s of t)b._value_record_references(s,e,{recursive:n});else if(l.isPlainObject(t))for(const s of u.values(t))b._value_record_references(s,e,{recursive:n})}references(){const t\u003dnew Set;return b._value_record_references(this,t,{recursive:!0}),t}_doc_attached(){}_doc_detached(){}attach_document(t){if(null!\u003dthis.document\u0026\u0026this.document!\u003dt)throw new Error(\"models must be owned by only a single document\");this.document\u003dt,this._doc_attached()}detach_document(){this._doc_detached(),this.document\u003dnull}_needs_invalidate(t,e){const s\u003dnew Set;b._value_record_references(e,s,{recursive:!1});const n\u003dnew Set;b._value_record_references(t,n,{recursive:!1});for(const t of s)if(!n.has(t))return!0;for(const t of n)if(!s.has(t))return!0;return!1}_push_changes(t,e\u003d{}){if(!this.is_syncable)return;const{document:s}\u003dthis;if(null\u003d\u003ds)return;const{setter_id:n}\u003de,r\u003d[];for(const[e,i,o]of t)e.syncable\u0026\u0026r.push(new d.ModelChangedEvent(s,this,e.attr,i,o,n));if(0!\u003dr.length){let t;1\u003d\u003dr.length?[t]\u003dr:t\u003dnew d.DocumentEventBatch(s,r,n),s._trigger_on_change(t)}}on_change(t,e){for(const s of l.isArray(t)?t:[t])this.connect(s.change,e)}}s.HasProps\u003db,b.init_HasProps()},\n      function _(n,t,e,l,s){l();const i\u003dn(16),o\u003dn(9);class c{constructor(n,t){this.sender\u003dn,this.name\u003dt}connect(n,t\u003dnull){u.has(this.sender)||u.set(this.sender,[]);const e\u003du.get(this.sender);if(null!\u003dg(e,this,n,t))return!1;const l\u003dnull!\u003dt?t:n;a.has(l)||a.set(l,[]);const s\u003da.get(l),i\u003d{signal:this,slot:n,context:t};return e.push(i),s.push(i),!0}disconnect(n,t\u003dnull){const e\u003du.get(this.sender);if(null\u003d\u003de||0\u003d\u003d\u003de.length)return!1;const l\u003dg(e,this,n,t);if(null\u003d\u003dl)return!1;const s\u003dnull!\u003dt?t:n,i\u003da.get(s);return l.signal\u003dnull,d(e),d(i),!0}emit(n){var t;const e\u003dnull!\u003d\u003d(t\u003du.get(this.sender))\u0026\u0026void 0!\u003d\u003dt?t:[];for(const{signal:t,slot:l,context:s}of e)t\u003d\u003d\u003dthis\u0026\u0026l.call(s,n,this.sender)}}e.Signal\u003dc,c.__name__\u003d\"Signal\";class r extends c{emit(){super.emit(void 0)}}e.Signal0\u003dr,r.__name__\u003d\"Signal0\",function(n){function t(n,t){const e\u003du.get(n);if(null\u003d\u003de||0\u003d\u003d\u003de.length)return;const l\u003da.get(t);if(null!\u003dl\u0026\u00260!\u003d\u003dl.length){for(const t of l){if(null\u003d\u003dt.signal)return;t.signal.sender\u003d\u003d\u003dn\u0026\u0026(t.signal\u003dnull)}d(e),d(l)}}function e(n){var t;const e\u003du.get(n);if(null!\u003de\u0026\u00260!\u003d\u003de.length){for(const n of e){if(null\u003d\u003dn.signal)return;const e\u003dnull!\u003d\u003d(t\u003dn.context)\u0026\u0026void 0!\u003d\u003dt?t:n.slot;n.signal\u003dnull,d(a.get(e))}d(e)}}function l(n,t,e){const l\u003da.get(n);if(null!\u003dl\u0026\u00260!\u003d\u003dl.length){for(const n of l){if(null\u003d\u003dn.signal)return;if(null!\u003dt\u0026\u0026n.slot!\u003dt)continue;const l\u003dn.signal.sender;null!\u003de\u0026\u0026e.has(l)||(n.signal\u003dnull,d(u.get(l)))}d(l)}}function s(n){const t\u003du.get(n);if(null!\u003dt\u0026\u00260!\u003d\u003dt.length){for(const n of t)n.signal\u003dnull;d(t)}const e\u003da.get(n);if(null!\u003de\u0026\u00260!\u003d\u003de.length){for(const n of e)n.signal\u003dnull;d(e)}}n.disconnect_between\u003dt,n.disconnect_sender\u003de,n.disconnect_receiver\u003dl,n.disconnect_all\u003ds,n.disconnectBetween\u003dt,n.disconnectSender\u003de,n.disconnectReceiver\u003dl,n.disconnectAll\u003ds}(c||(e.Signal\u003dc\u003d{})),e.Signalable\u003dfunction(){return class{connect(n,t){return n.connect(t,this)}disconnect(n,t){return n.disconnect(t,this)}}};const u\u003dnew WeakMap,a\u003dnew WeakMap;function g(n,t,e,l){return o.find(n,(n\u003d\u003en.signal\u003d\u003d\u003dt\u0026\u0026n.slot\u003d\u003d\u003de\u0026\u0026n.context\u003d\u003d\u003dl))}const f\u003dnew Set;function d(n){0\u003d\u003d\u003df.size\u0026\u0026(async()\u003d\u003e{await i.defer(),function(){for(const n of f)o.remove_by(n,(n\u003d\u003enull\u003d\u003dn.signal));f.clear()}()})(),f.add(n)}},\n      function _(e,n,t,s,o){s();const a\u003dnew MessageChannel,l\u003dnew Map;a.port1.onmessage\u003de\u003d\u003e{const n\u003de.data,t\u003dl.get(n);if(null!\u003dt)try{t()}finally{l.delete(n)}};let r\u003d1;t.defer\u003dfunction(){return new Promise((e\u003d\u003e{const n\u003dr++;l.set(n,e),a.port2.postMessage(n)}))}},\n      function _(n,t,i,e,c){e();const r\u003dn(8),s\u003dn(13);i.is_ref\u003dfunction(n){if(r.isPlainObject(n)){const t\u003ds.keys(n);return 1\u003d\u003dt.length\u0026\u0026\"id\"\u003d\u003dt[0]}return!1}},\n      function _(e,t,n,a,r){a(),n.YCoordinateSeqSeqSeqSpec\u003dn.XCoordinateSeqSeqSeqSpec\u003dn.YCoordinateSeqSpec\u003dn.XCoordinateSeqSpec\u003dn.YCoordinateSpec\u003dn.XCoordinateSpec\u003dn.CoordinateSeqSeqSeqSpec\u003dn.CoordinateSeqSpec\u003dn.CoordinateSpec\u003dn.BaseCoordinateSpec\u003dn.NumberUnitsSpec\u003dn.UnitsSpec\u003dn.DataSpec\u003dn.VectorSpec\u003dn.TextBaselineScalar\u003dn.TextAlignScalar\u003dn.FontStyleScalar\u003dn.FontSizeScalar\u003dn.FontScalar\u003dn.LineDashScalar\u003dn.LineCapScalar\u003dn.LineJoinScalar\u003dn.ArrayScalar\u003dn.NullStringScalar\u003dn.StringScalar\u003dn.NumberScalar\u003dn.ColorScalar\u003dn.AnyScalar\u003dn.ScalarSpec\u003dn.VerticalAlign\u003dn.UpdateMode\u003dn.TooltipAttachment\u003dn.TickLabelOrientation\u003dn.TextureRepetition\u003dn.TextBaseline\u003dn.TextAlign\u003dn.TapBehavior\u003dn.StepMode\u003dn.StartEnd\u003dn.SpatialUnits\u003dn.Sort\u003dn.SizingMode\u003dn.Side\u003dn.RoundingFunction\u003dn.ResetPolicy\u003dn.RenderMode\u003dn.RenderLevel\u003dn.RadiusDimension\u003dn.PointPolicy\u003dn.Place\u003dvoid 0,n.TextBaselineSpec\u003dn.TextAlignSpec\u003dn.FontStyleSpec\u003dn.FontSizeSpec\u003dn.FontSpec\u003dn.LineDashSpec\u003dn.LineCapSpec\u003dn.LineJoinSpec\u003dn.MarkerSpec\u003dn.ArraySpec\u003dn.NullStringSpec\u003dn.StringSpec\u003dn.AnySpec\u003dn.NDArraySpec\u003dn.ColorSpec\u003dn.NumberSpec\u003dn.BooleanSpec\u003dn.ScreenDistanceSpec\u003dn.NullDistanceSpec\u003dn.DistanceSpec\u003dn.AngleSpec\u003dvoid 0;const i\u003de(1),s\u003de(15),l\u003de(19),o\u003di.__importStar(e(20)),c\u003de(24),_\u003de(9),u\u003de(12),d\u003de(10),S\u003de(22),p\u003de(27),m\u003de(8),h\u003de(28),v\u003de(29),y\u003de(33);function x(e){try{return JSON.stringify(e)}catch(t){return e.toString()}}function g(e){return m.isPlainObject(e)\u0026\u0026(void 0\u003d\u003d\u003de.value?0:1)+(void 0\u003d\u003d\u003de.field?0:1)+(void 0\u003d\u003d\u003de.expr?0:1)\u003d\u003d1}r(\"Uniform\",y.Uniform),r(\"UniformScalar\",y.UniformScalar),r(\"UniformVector\",y.UniformVector),n.isSpec\u003dg;class f{constructor(e,t,n,a,r,i\u003d{}){var l;let o;if(this.obj\u003de,this.attr\u003dt,this.kind\u003dn,this.default_value\u003da,this._dirty\u003d!1,this.change\u003dnew s.Signal0(this.obj,\"change\"),this.internal\u003dnull!\u003d\u003d(l\u003di.internal)\u0026\u0026void 0!\u003d\u003dl\u0026\u0026l,this.on_update\u003di.on_update,void 0!\u003d\u003dr)o\u003dr,this._dirty\u003d!0;else{const t\u003dthis._default_override();if(void 0!\u003d\u003dt)o\u003dt;else{if(void 0\u003d\u003d\u003da)return void(this.spec\u003d{value:null});o\u003da(e)}}this._update(o)}get is_value(){return void 0!\u003d\u003dthis.spec.value}get syncable(){return!this.internal}get_value(){return this.spec.value}set_value(e){this._update(e),this._dirty\u003d!0}_default_override(){}get dirty(){return this._dirty}_update(e){var t;this.validate(e),this.spec\u003d{value:e},null\u003d\u003d\u003d(t\u003dthis.on_update)||void 0\u003d\u003d\u003dt||t.call(this,e,this.obj)}toString(){return`Prop(${this.obj}.${this.attr}, spec: ${x(this.spec)})`}normalize(e){return e}validate(e){if(!this.valid(e))throw new Error(`${this.obj}.${this.attr} given invalid value: ${x(e)}`)}valid(e){return this.kind.valid(e)}_value(e\u003d!0){if(!this.is_value)throw new Error(\"attempted to retrieve property value for property without value specification\");let t\u003dthis.normalize([this.spec.value])[0];return null!\u003dthis.spec.transform\u0026\u0026e\u0026\u0026(t\u003dthis.spec.transform.compute(t)),t}}n.Property\u003df,f.__name__\u003d\"Property\";class A{constructor(e){this.attr\u003de}}n.PropertyAlias\u003dA,A.__name__\u003d\"PropertyAlias\",n.Alias\u003dfunction(e){return new A(e)};class C extends f{}n.PrimitiveProperty\u003dC,C.__name__\u003d\"PrimitiveProperty\";class L extends f{}n.Any\u003dL,L.__name__\u003d\"Any\";class T extends f{valid(e){return m.isArray(e)||m.isTypedArray(e)}}n.Array\u003dT,T.__name__\u003d\"Array\";class P extends f{valid(e){return m.isBoolean(e)}}n.Boolean\u003dP,P.__name__\u003d\"Boolean\";class b extends f{valid(e){return S.is_Color(e)}}n.Color\u003db,b.__name__\u003d\"Color\";class w extends f{}n.Instance\u003dw,w.__name__\u003d\"Instance\";class q extends f{valid(e){return m.isNumber(e)}}n.Number\u003dq,q.__name__\u003d\"Number\";class N extends q{valid(e){return m.isNumber(e)\u0026\u0026(0|e)\u003d\u003de}}n.Int\u003dN,N.__name__\u003d\"Int\";class B extends q{}n.Angle\u003dB,B.__name__\u003d\"Angle\";class D extends q{valid(e){return m.isNumber(e)\u0026\u00260\u003c\u003de\u0026\u0026e\u003c\u003d1}}n.Percent\u003dD,D.__name__\u003d\"Percent\";class F extends f{valid(e){return m.isString(e)}}n.String\u003dF,F.__name__\u003d\"String\";class z extends f{valid(e){return null\u003d\u003d\u003de||m.isString(e)}}n.NullString\u003dz,z.__name__\u003d\"NullString\";class U extends F{}n.FontSize\u003dU,U.__name__\u003d\"FontSize\";class M extends F{_default_override(){return h.settings.dev?\"Bokeh\":void 0}}n.Font\u003dM,M.__name__\u003d\"Font\";class R extends f{valid(e){return m.isString(e)\u0026\u0026_.includes(this.enum_values,e)}}function k(e){return class extends R{get enum_values(){return[...e]}}}n.EnumProperty\u003dR,R.__name__\u003d\"EnumProperty\",n.Enum\u003dk;class O extends R{get enum_values(){return[...o.Direction]}normalize(e){const t\u003dnew Uint8Array(e.length);for(let n\u003d0;n\u003ce.length;n++)switch(e[n]){case\"clock\":t[n]\u003d0;break;case\"anticlock\":t[n]\u003d1}return t}}n.Direction\u003dO,O.__name__\u003d\"Direction\",n.Anchor\u003dk(o.Anchor),n.AngleUnits\u003dk(o.AngleUnits),n.BoxOrigin\u003dk(o.BoxOrigin),n.ButtonType\u003dk(o.ButtonType),n.CalendarPosition\u003dk(o.CalendarPosition),n.Dimension\u003dk(o.Dimension),n.Dimensions\u003dk(o.Dimensions),n.Distribution\u003dk(o.Distribution),n.FontStyle\u003dk(o.FontStyle),n.HatchPatternType\u003dk(o.HatchPatternType),n.HTTPMethod\u003dk(o.HTTPMethod),n.HexTileOrientation\u003dk(o.HexTileOrientation),n.HoverMode\u003dk(o.HoverMode),n.LatLon\u003dk(o.LatLon),n.LegendClickPolicy\u003dk(o.LegendClickPolicy),n.LegendLocation\u003dk(o.LegendLocation),n.LineCap\u003dk(o.LineCap),n.LineJoin\u003dk(o.LineJoin),n.LinePolicy\u003dk(o.LinePolicy),n.Location\u003dk(o.Location),n.Logo\u003dk(o.Logo),n.MarkerType\u003dk(o.MarkerType),n.MutedPolicy\u003dk(o.MutedPolicy),n.Orientation\u003dk(o.Orientation),n.OutputBackend\u003dk(o.OutputBackend),n.PaddingUnits\u003dk(o.PaddingUnits),n.Place\u003dk(o.Place),n.PointPolicy\u003dk(o.PointPolicy),n.RadiusDimension\u003dk(o.RadiusDimension),n.RenderLevel\u003dk(o.RenderLevel),n.RenderMode\u003dk(o.RenderMode),n.ResetPolicy\u003dk(o.ResetPolicy),n.RoundingFunction\u003dk(o.RoundingFunction),n.Side\u003dk(o.Side),n.SizingMode\u003dk(o.SizingMode),n.Sort\u003dk(o.Sort),n.SpatialUnits\u003dk(o.SpatialUnits),n.StartEnd\u003dk(o.StartEnd),n.StepMode\u003dk(o.StepMode),n.TapBehavior\u003dk(o.TapBehavior),n.TextAlign\u003dk(o.TextAlign),n.TextBaseline\u003dk(o.TextBaseline),n.TextureRepetition\u003dk(o.TextureRepetition),n.TickLabelOrientation\u003dk(o.TickLabelOrientation),n.TooltipAttachment\u003dk(o.TooltipAttachment),n.UpdateMode\u003dk(o.UpdateMode),n.VerticalAlign\u003dk(o.VerticalAlign);class E extends f{get_value(){const{value:e,expr:t,transform:n}\u003dthis.spec;return null!\u003dt||null!\u003dn?this.spec:e}_update(e){g(e)?this.spec\u003de:this.spec\u003d{value:e},null!\u003dthis.spec.value\u0026\u0026this.validate(this.spec.value)}materialize(e){return e}scalar(e,t){return new y.UniformScalar(e,t)}uniform(e){var t;const{expr:n,value:a,transform:r}\u003dthis.spec,i\u003dnull!\u003d\u003d(t\u003de.get_length())\u0026\u0026void 0!\u003d\u003dt?t:1;if(null!\u003dn){let t\u003dn.compute(e);return null!\u003dr\u0026\u0026(t\u003dr.compute(t)),t\u003dthis.materialize(t),this.scalar(t,i)}{let e\u003da;return null!\u003dr\u0026\u0026(e\u003dr.compute(e)),e\u003dthis.materialize(e),this.scalar(e,i)}}}n.ScalarSpec\u003dE,E.__name__\u003d\"ScalarSpec\";class V extends E{}n.AnyScalar\u003dV,V.__name__\u003d\"AnyScalar\";class $ extends E{}n.ColorScalar\u003d$,$.__name__\u003d\"ColorScalar\";class J extends E{}n.NumberScalar\u003dJ,J.__name__\u003d\"NumberScalar\";class X extends E{}n.StringScalar\u003dX,X.__name__\u003d\"StringScalar\";class Y extends E{}n.NullStringScalar\u003dY,Y.__name__\u003d\"NullStringScalar\";class H extends E{}n.ArrayScalar\u003dH,H.__name__\u003d\"ArrayScalar\";class j extends E{}n.LineJoinScalar\u003dj,j.__name__\u003d\"LineJoinScalar\";class G extends E{}n.LineCapScalar\u003dG,G.__name__\u003d\"LineCapScalar\";class I extends E{}n.LineDashScalar\u003dI,I.__name__\u003d\"LineDashScalar\";class K extends E{_default_override(){return h.settings.dev?\"Bokeh\":void 0}}n.FontScalar\u003dK,K.__name__\u003d\"FontScalar\";class Q extends E{}n.FontSizeScalar\u003dQ,Q.__name__\u003d\"FontSizeScalar\";class W extends E{}n.FontStyleScalar\u003dW,W.__name__\u003d\"FontStyleScalar\";class Z extends E{}n.TextAlignScalar\u003dZ,Z.__name__\u003d\"TextAlignScalar\";class ee extends E{}n.TextBaselineScalar\u003dee,ee.__name__\u003d\"TextBaselineScalar\";class te extends f{get_value(){return null\u003d\u003d\u003dthis.spec.value?null:this.spec}_update(e){g(e)?this.spec\u003de:this.spec\u003d{value:e},null!\u003dthis.spec.value\u0026\u0026this.validate(this.spec.value)}materialize(e){return e}v_materialize(e){return e}scalar(e,t){return new y.UniformScalar(e,t)}vector(e){return new y.UniformVector(e)}uniform(e){var t;const{field:n,expr:a,value:r,transform:i}\u003dthis.spec,s\u003dnull!\u003d\u003d(t\u003de.get_length())\u0026\u0026void 0!\u003d\u003dt?t:1;if(null!\u003dn){let t\u003de.get_column(n);return null!\u003dt?(null!\u003di\u0026\u0026(t\u003di.v_compute(t)),t\u003dthis.v_materialize(t),this.vector(t)):(l.logger.warn(`attempted to retrieve property array for nonexistent field \u0027${n}\u0027`),this.scalar(null,s))}if(null!\u003da){let t\u003da.v_compute(e);return null!\u003di\u0026\u0026(t\u003di.v_compute(t)),t\u003dthis.v_materialize(t),this.vector(t)}{let e\u003dr;return null!\u003di\u0026\u0026(e\u003di.compute(e)),e\u003dthis.materialize(e),this.scalar(e,s)}}array(e){var t;let n;const a\u003dnull!\u003d\u003d(t\u003de.get_length())\u0026\u0026void 0!\u003d\u003dt?t:1;if(null!\u003dthis.spec.field){const t\u003de.get_column(this.spec.field);if(null!\u003dt)n\u003dthis.normalize(t);else{l.logger.warn(`attempted to retrieve property array for nonexistent field \u0027${this.spec.field}\u0027`);const e\u003dnew Float64Array(a);e.fill(NaN),n\u003de}}else if(null!\u003dthis.spec.expr)n\u003dthis.normalize(this.spec.expr.v_compute(e));else{const e\u003dthis._value(!1);if(m.isNumber(e)){const t\u003dnew Float64Array(a);t.fill(e),n\u003dt}else n\u003d_.repeat(e,a)}return null!\u003dthis.spec.transform\u0026\u0026(n\u003dthis.spec.transform.v_compute(n)),n}}n.VectorSpec\u003dte,te.__name__\u003d\"VectorSpec\";class ne extends te{}n.DataSpec\u003dne,ne.__name__\u003d\"DataSpec\";class ae extends te{_update(e){super._update(e);const{units:t}\u003dthis.spec;if(null!\u003dt\u0026\u0026!_.includes(this.valid_units,t))throw new Error(`units must be one of ${this.valid_units.join(\", \")}; got: ${t}`)}get units(){var e;return null!\u003d\u003d(e\u003dthis.spec.units)\u0026\u0026void 0!\u003d\u003de?e:this.default_units}set units(e){e!\u003dthis.default_units?this.spec.units\u003de:delete this.spec.units}}n.UnitsSpec\u003dae,ae.__name__\u003d\"UnitsSpec\";class re extends ae{array(e){return new Float64Array(super.array(e))}}n.NumberUnitsSpec\u003dre,re.__name__\u003d\"NumberUnitsSpec\";class ie extends ne{}n.BaseCoordinateSpec\u003die,ie.__name__\u003d\"BaseCoordinateSpec\";class se extends ie{}n.CoordinateSpec\u003dse,se.__name__\u003d\"CoordinateSpec\";class le extends ie{}n.CoordinateSeqSpec\u003dle,le.__name__\u003d\"CoordinateSeqSpec\";class oe extends ie{}n.CoordinateSeqSeqSeqSpec\u003doe,oe.__name__\u003d\"CoordinateSeqSeqSeqSpec\";class ce extends se{constructor(){super(...arguments),this.dimension\u003d\"x\"}}n.XCoordinateSpec\u003dce,ce.__name__\u003d\"XCoordinateSpec\";class _e extends se{constructor(){super(...arguments),this.dimension\u003d\"y\"}}n.YCoordinateSpec\u003d_e,_e.__name__\u003d\"YCoordinateSpec\";class ue extends le{constructor(){super(...arguments),this.dimension\u003d\"x\"}}n.XCoordinateSeqSpec\u003due,ue.__name__\u003d\"XCoordinateSeqSpec\";class de extends le{constructor(){super(...arguments),this.dimension\u003d\"y\"}}n.YCoordinateSeqSpec\u003dde,de.__name__\u003d\"YCoordinateSeqSpec\";class Se extends oe{constructor(){super(...arguments),this.dimension\u003d\"x\"}}n.XCoordinateSeqSeqSeqSpec\u003dSe,Se.__name__\u003d\"XCoordinateSeqSeqSeqSpec\";class pe extends oe{constructor(){super(...arguments),this.dimension\u003d\"y\"}}n.YCoordinateSeqSeqSeqSpec\u003dpe,pe.__name__\u003d\"YCoordinateSeqSeqSeqSpec\";class me extends re{get default_units(){return\"rad\"}get valid_units(){return[...o.AngleUnits]}materialize(e){return e*-d.to_radians_coeff(this.units)}v_materialize(e){const t\u003d-d.to_radians_coeff(this.units),n\u003dnew Float32Array(e.length);return u.mul(e,t,n),n}array(e){throw new Error(\"not supported\")}}n.AngleSpec\u003dme,me.__name__\u003d\"AngleSpec\";class he extends re{get default_units(){return\"data\"}get valid_units(){return[...o.SpatialUnits]}}n.DistanceSpec\u003dhe,he.__name__\u003d\"DistanceSpec\";class ve extends he{materialize(e){return null!\u003de?e:NaN}}n.NullDistanceSpec\u003dve,ve.__name__\u003d\"NullDistanceSpec\";class ye extends he{get default_units(){return\"screen\"}}n.ScreenDistanceSpec\u003dye,ye.__name__\u003d\"ScreenDistanceSpec\";class xe extends ne{v_materialize(e){return new Uint8Array(e)}array(e){return new Uint8Array(super.array(e))}}n.BooleanSpec\u003dxe,xe.__name__\u003d\"BooleanSpec\";class ge extends ne{v_materialize(e){return m.isTypedArray(e)?e:new Float64Array(e)}array(e){return new Float64Array(super.array(e))}}n.NumberSpec\u003dge,ge.__name__\u003d\"NumberSpec\";class fe extends ne{materialize(e){return S.encode_rgba(S.color2rgba(e))}v_materialize(e){if(!v.is_NDArray(e)){const t\u003de.length,n\u003dnew c.RGBAArray(4*t);let a\u003d0;for(const t of e){const[e,r,i,s]\u003dS.color2rgba(t);n[a++]\u003de,n[a++]\u003dr,n[a++]\u003di,n[a++]\u003ds}return new c.ColorArray(n.buffer)}if(\"uint32\"\u003d\u003de.dtype\u0026\u00261\u003d\u003de.dimension)return p.to_big_endian(e);if(\"uint8\"\u003d\u003de.dtype\u0026\u00261\u003d\u003de.dimension){const[t]\u003de.shape,n\u003dnew c.RGBAArray(4*t);let a\u003d0;for(const t of e)n[a++]\u003dt,n[a++]\u003dt,n[a++]\u003dt,n[a++]\u003d255;return new c.ColorArray(n.buffer)}if(\"uint8\"\u003d\u003de.dtype\u0026\u00262\u003d\u003de.dimension){const[t,n]\u003de.shape;if(4\u003d\u003dn)return new c.ColorArray(e.buffer);if(3\u003d\u003dn){const a\u003dnew c.RGBAArray(4*t);for(let r\u003d0,i\u003d0;r\u003cn*t;)a[i++]\u003de[r++],a[i++]\u003de[r++],a[i++]\u003de[r++],a[i++]\u003d255;return new c.ColorArray(a.buffer)}}else if((\"float32\"\u003d\u003de.dtype||\"float64\"\u003d\u003de.dtype)\u0026\u00262\u003d\u003de.dimension){const[t,n]\u003de.shape;if(3\u003d\u003dn||4\u003d\u003dn){const a\u003dnew c.RGBAArray(4*t);for(let r\u003d0,i\u003d0;r\u003cn*t;)a[i++]\u003d255*e[r++],a[i++]\u003d255*e[r++],a[i++]\u003d255*e[r++],a[i++]\u003d255*(3\u003d\u003dn?1:e[r++]);return new c.ColorArray(a.buffer)}}throw new Error(\"invalid color array\")}vector(e){return new y.ColorUniformVector(e)}}n.ColorSpec\u003dfe,fe.__name__\u003d\"ColorSpec\";class Ae extends ne{}n.NDArraySpec\u003dAe,Ae.__name__\u003d\"NDArraySpec\";class Ce extends ne{}n.AnySpec\u003dCe,Ce.__name__\u003d\"AnySpec\";class Le extends ne{}n.StringSpec\u003dLe,Le.__name__\u003d\"StringSpec\";class Te extends ne{}n.NullStringSpec\u003dTe,Te.__name__\u003d\"NullStringSpec\";class Pe extends ne{}n.ArraySpec\u003dPe,Pe.__name__\u003d\"ArraySpec\";class be extends ne{}n.MarkerSpec\u003dbe,be.__name__\u003d\"MarkerSpec\";class we extends ne{}n.LineJoinSpec\u003dwe,we.__name__\u003d\"LineJoinSpec\";class qe extends ne{}n.LineCapSpec\u003dqe,qe.__name__\u003d\"LineCapSpec\";class Ne extends ne{}n.LineDashSpec\u003dNe,Ne.__name__\u003d\"LineDashSpec\";class Be extends ne{_default_override(){return h.settings.dev?\"Bokeh\":void 0}}n.FontSpec\u003dBe,Be.__name__\u003d\"FontSpec\";class De extends ne{}n.FontSizeSpec\u003dDe,De.__name__\u003d\"FontSizeSpec\";class Fe extends ne{}n.FontStyleSpec\u003dFe,Fe.__name__\u003d\"FontStyleSpec\";class ze extends ne{}n.TextAlignSpec\u003dze,ze.__name__\u003d\"TextAlignSpec\";class Ue extends ne{}n.TextBaselineSpec\u003dUe,Ue.__name__\u003d\"TextBaselineSpec\"},\n      function _(e,l,o,n,t){n();const s\u003de(8),g\u003de(13),r\u003d{};class i{constructor(e,l){this.name\u003de,this.level\u003dl}}o.LogLevel\u003di,i.__name__\u003d\"LogLevel\";class v{constructor(e,l\u003dv.INFO){this._name\u003de,this.set_level(l)}static get levels(){return Object.keys(v.log_levels)}static get(e,l\u003dv.INFO){if(e.length\u003e0){let o\u003dr[e];return null\u003d\u003do\u0026\u0026(r[e]\u003do\u003dnew v(e,l)),o}throw new TypeError(\"Logger.get() expects a non-empty string name and an optional log-level\")}get level(){return this.get_level()}get_level(){return this._log_level}set_level(e){if(e instanceof i)this._log_level\u003de;else{if(!s.isString(e)||null\u003d\u003dv.log_levels[e])throw new Error(\"Logger.set_level() expects a log-level object or a string name of a log-level\");this._log_level\u003dv.log_levels[e]}const l\u003d`[${this._name}]`;for(const[e,o]of g.entries(v.log_levels))o.level\u003cthis._log_level.level||this._log_level.level\u003d\u003d\u003dv.OFF.level?this[e]\u003dfunction(){}:this[e]\u003d_(e,l)}trace(...e){}debug(...e){}info(...e){}warn(...e){}error(...e){}}function _(e,l){return null!\u003dconsole[e]?console[e].bind(console,l):null!\u003dconsole.log?console.log.bind(console,l):function(){}}function c(e){const l\u003do.logger.level;return s.isString(e)\u0026\u0026null\u003d\u003dv.log_levels[e]?(console.log(`[bokeh] unrecognized logging level \u0027${e}\u0027 passed to Bokeh.set_log_level(), ignoring`),console.log(`[bokeh] valid log levels are: ${v.levels.join(\", \")}`)):(console.log(`[bokeh] setting log level to: \u0027${s.isString(e)?e:e.level}\u0027`),o.logger.set_level(e)),l}o.Logger\u003dv,v.__name__\u003d\"Logger\",v.TRACE\u003dnew i(\"trace\",0),v.DEBUG\u003dnew i(\"debug\",1),v.INFO\u003dnew i(\"info\",2),v.WARN\u003dnew i(\"warn\",6),v.ERROR\u003dnew i(\"error\",7),v.FATAL\u003dnew i(\"fatal\",8),v.OFF\u003dnew i(\"off\",9),v.log_levels\u003d{trace:v.TRACE,debug:v.DEBUG,info:v.INFO,warn:v.WARN,error:v.ERROR,fatal:v.FATAL,off:v.OFF},o.logger\u003dv.get(\"bokeh\"),o.set_log_level\u003dc,o.with_log_level\u003dfunction(e,l){const o\u003dc(e);try{l()}finally{c(o)}}},\n      function _(e,n,t,o,i){o(),t.VerticalAlign\u003dvoid 0;const a\u003de(21);t.Align\u003da.Enum(\"start\",\"center\",\"end\"),t.Anchor\u003da.Enum(\"top_left\",\"top_center\",\"top_right\",\"center_left\",\"center_center\",\"center_right\",\"bottom_left\",\"bottom_center\",\"bottom_right\",\"top\",\"left\",\"center\",\"right\",\"bottom\"),t.AngleUnits\u003da.Enum(\"deg\",\"rad\",\"grad\",\"turn\"),t.BoxOrigin\u003da.Enum(\"corner\",\"center\"),t.ButtonType\u003da.Enum(\"default\",\"primary\",\"success\",\"warning\",\"danger\",\"light\"),t.CalendarPosition\u003da.Enum(\"auto\",\"above\",\"below\"),t.Dimension\u003da.Enum(\"width\",\"height\"),t.Dimensions\u003da.Enum(\"width\",\"height\",\"both\"),t.Direction\u003da.Enum(\"clock\",\"anticlock\"),t.Distribution\u003da.Enum(\"uniform\",\"normal\"),t.FontStyle\u003da.Enum(\"normal\",\"italic\",\"bold\",\"bold italic\"),t.HatchPatternType\u003da.Enum(\"blank\",\"dot\",\"ring\",\"horizontal_line\",\"vertical_line\",\"cross\",\"horizontal_dash\",\"vertical_dash\",\"spiral\",\"right_diagonal_line\",\"left_diagonal_line\",\"diagonal_cross\",\"right_diagonal_dash\",\"left_diagonal_dash\",\"horizontal_wave\",\"vertical_wave\",\"criss_cross\",\" \",\".\",\"o\",\"-\",\"|\",\"+\",\u0027\"\u0027,\":\",\"@\",\"/\",\"\\\\\",\"x\",\",\",\"`\",\"v\",\"\u003e\",\"*\"),t.HTTPMethod\u003da.Enum(\"POST\",\"GET\"),t.HexTileOrientation\u003da.Enum(\"pointytop\",\"flattop\"),t.HoverMode\u003da.Enum(\"mouse\",\"hline\",\"vline\"),t.LatLon\u003da.Enum(\"lat\",\"lon\"),t.LegendClickPolicy\u003da.Enum(\"none\",\"hide\",\"mute\"),t.LegendLocation\u003dt.Anchor,t.LineCap\u003da.Enum(\"butt\",\"round\",\"square\"),t.LineJoin\u003da.Enum(\"miter\",\"round\",\"bevel\"),t.LineDash\u003da.Enum(\"solid\",\"dashed\",\"dotted\",\"dotdash\",\"dashdot\"),t.LinePolicy\u003da.Enum(\"prev\",\"next\",\"nearest\",\"interp\",\"none\"),t.Location\u003da.Enum(\"above\",\"below\",\"left\",\"right\"),t.Logo\u003da.Enum(\"normal\",\"grey\"),t.MarkerType\u003da.Enum(\"asterisk\",\"circle\",\"circle_cross\",\"circle_dot\",\"circle_x\",\"circle_y\",\"cross\",\"dash\",\"diamond\",\"diamond_cross\",\"diamond_dot\",\"dot\",\"hex\",\"hex_dot\",\"inverted_triangle\",\"plus\",\"square\",\"square_cross\",\"square_dot\",\"square_pin\",\"square_x\",\"star\",\"star_dot\",\"triangle\",\"triangle_dot\",\"triangle_pin\",\"x\",\"y\"),t.MutedPolicy\u003da.Enum(\"show\",\"ignore\"),t.Orientation\u003da.Enum(\"vertical\",\"horizontal\"),t.OutputBackend\u003da.Enum(\"canvas\",\"svg\",\"webgl\"),t.PaddingUnits\u003da.Enum(\"percent\",\"absolute\"),t.Place\u003da.Enum(\"above\",\"below\",\"left\",\"right\",\"center\"),t.PointPolicy\u003da.Enum(\"snap_to_data\",\"follow_mouse\",\"none\"),t.RadiusDimension\u003da.Enum(\"x\",\"y\",\"max\",\"min\"),t.RenderLevel\u003da.Enum(\"image\",\"underlay\",\"glyph\",\"guide\",\"annotation\",\"overlay\"),t.RenderMode\u003da.Enum(\"canvas\",\"css\"),t.ResetPolicy\u003da.Enum(\"standard\",\"event_only\"),t.RoundingFunction\u003da.Enum(\"round\",\"nearest\",\"floor\",\"rounddown\",\"ceil\",\"roundup\"),t.SelectionMode\u003da.Enum(\"replace\",\"append\",\"intersect\",\"subtract\"),t.Side\u003da.Enum(\"above\",\"below\",\"left\",\"right\"),t.SizingMode\u003da.Enum(\"stretch_width\",\"stretch_height\",\"stretch_both\",\"scale_width\",\"scale_height\",\"scale_both\",\"fixed\"),t.Sort\u003da.Enum(\"ascending\",\"descending\"),t.SpatialUnits\u003da.Enum(\"screen\",\"data\"),t.StartEnd\u003da.Enum(\"start\",\"end\"),t.StepMode\u003da.Enum(\"after\",\"before\",\"center\"),t.TapBehavior\u003da.Enum(\"select\",\"inspect\"),t.TextAlign\u003da.Enum(\"left\",\"right\",\"center\"),t.TextBaseline\u003da.Enum(\"top\",\"middle\",\"bottom\",\"alphabetic\",\"hanging\",\"ideographic\"),t.TextureRepetition\u003da.Enum(\"repeat\",\"repeat_x\",\"repeat_y\",\"no_repeat\"),t.TickLabelOrientation\u003da.Enum(\"vertical\",\"horizontal\",\"parallel\",\"normal\"),t.TooltipAttachment\u003da.Enum(\"horizontal\",\"vertical\",\"left\",\"right\",\"above\",\"below\"),t.UpdateMode\u003da.Enum(\"replace\",\"append\"),t.VerticalAlign\u003da.Enum(\"top\",\"middle\",\"bottom\")},\n      function _(e,n,t,s,r){s();const i\u003de(1).__importStar(e(8)),a\u003de(22),l\u003de(13),_\u003dwindow.Map,{hasOwnProperty:u}\u003dObject.prototype;class d{}t.Kind\u003dd,d.__name__\u003d\"Kind\",function(e){class n extends d{valid(e){return!0}}n.__name__\u003d\"Any\",e.Any\u003dn;class t extends d{valid(e){return!0}}t.__name__\u003d\"Unknown\",e.Unknown\u003dt;class s extends d{valid(e){return i.isBoolean(e)}}s.__name__\u003d\"Boolean\",e.Boolean\u003ds;class r extends d{constructor(e){super(),this.obj_type\u003de}valid(e){return!0}}r.__name__\u003d\"Ref\",e.Ref\u003dr;class c extends d{valid(e){return!0}}c.__name__\u003d\"AnyRef\",e.AnyRef\u003dc;class o extends d{valid(e){return i.isNumber(e)}}o.__name__\u003d\"Number\",e.Number\u003do;class p extends o{valid(e){return super.valid(e)\u0026\u0026i.isInteger(e)}}p.__name__\u003d\"Int\",e.Int\u003dp;class y extends o{valid(e){return super.valid(e)\u0026\u00260\u003c\u003de\u0026\u0026e\u003c\u003d1}}y.__name__\u003d\"Percent\",e.Percent\u003dy;class m extends d{constructor(e){super(),this.types\u003de,this.types\u003de}valid(e){return this.types.some((n\u003d\u003en.valid(e)))}}m.__name__\u003d\"Or\",e.Or\u003dm;class v extends d{constructor(e){super(),this.types\u003de,this.types\u003de}valid(e){if(!i.isArray(e))return!1;for(let n\u003d0;n\u003cthis.types.length;n++){const t\u003dthis.types[n],s\u003de[n];if(!t.valid(s))return!1}return!0}}v.__name__\u003d\"Tuple\",e.Tuple\u003dv;class w extends d{constructor(e){super(),this.struct_type\u003de}valid(e){if(!i.isPlainObject(e))return!1;const{struct_type:n}\u003dthis;if(l.size(n)!\u003dl.size(e))return!1;for(const t in n)if(u.call(n,t)){if(!u.call(e,t))return!1;const s\u003dn[t],r\u003de[t];if(!s.valid(r))return!1}return!0}}w.__name__\u003d\"Struct\",e.Struct\u003dw;class h extends d{valid(e){return i.isArray(e)||i.isTypedArray(e)}}h.__name__\u003d\"Arrayable\",e.Arrayable\u003dh;class f extends d{constructor(e){super(),this.item_type\u003de}valid(e){return i.isArray(e)\u0026\u0026e.every((e\u003d\u003ethis.item_type.valid(e)))}}f.__name__\u003d\"Array\",e.Array\u003df;class K extends d{valid(e){return null\u003d\u003d\u003de}}K.__name__\u003d\"Null\",e.Null\u003dK;class b extends d{constructor(e){super(),this.base_type\u003de}valid(e){return null\u003d\u003d\u003de||this.base_type.valid(e)}}b.__name__\u003d\"Nullable\",e.Nullable\u003db;class A extends d{constructor(e){super(),this.base_type\u003de}valid(e){return void 0\u003d\u003d\u003de||this.base_type.valid(e)}}A.__name__\u003d\"Opt\",e.Opt\u003dA;class x extends d{valid(e){return i.isString(e)}}x.__name__\u003d\"String\",e.String\u003dx;class S extends d{constructor(e){super(),this.values\u003dnew Set(e)}valid(e){return this.values.has(e)}*[Symbol.iterator](){yield*this.values}}S.__name__\u003d\"Enum\",e.Enum\u003dS;class N extends d{constructor(e){super(),this.item_type\u003de}valid(e){if(!i.isPlainObject(e))return!1;for(const n in e)if(u.call(e,n)){const t\u003de[n];if(!this.item_type.valid(t))return!1}return!0}}N.__name__\u003d\"Dict\",e.Dict\u003dN;class O extends d{constructor(e,n){super(),this.key_type\u003de,this.item_type\u003dn}valid(e){if(!(e instanceof _))return!1;for(const[n,t]of e.entries())if(!this.key_type.valid(n)||!this.item_type.valid(t))return!1;return!0}}O.__name__\u003d\"Map\",e.Map\u003dO;class g extends d{valid(e){return a.is_Color(e)}}g.__name__\u003d\"Color\",e.Color\u003dg;class P extends d{valid(e){return i.isFunction(e)}}P.__name__\u003d\"Function\",e.Function\u003dP}(t.Kinds||(t.Kinds\u003d{})),t.Any\u003dnew t.Kinds.Any,t.Unknown\u003dnew t.Kinds.Unknown,t.Boolean\u003dnew t.Kinds.Boolean,t.Number\u003dnew t.Kinds.Number,t.Int\u003dnew t.Kinds.Int,t.String\u003dnew t.Kinds.String,t.Null\u003dnew t.Kinds.Null;t.Nullable\u003de\u003d\u003enew t.Kinds.Nullable(e);t.Opt\u003de\u003d\u003enew t.Kinds.Opt(e);t.Or\u003d(...e)\u003d\u003enew t.Kinds.Or(e);t.Tuple\u003d(...e)\u003d\u003enew t.Kinds.Tuple(e);t.Struct\u003de\u003d\u003enew t.Kinds.Struct(e),t.Arrayable\u003dnew t.Kinds.Arrayable;t.Array\u003de\u003d\u003enew t.Kinds.Array(e);t.Dict\u003de\u003d\u003enew t.Kinds.Dict(e);t.Map\u003d(e,n)\u003d\u003enew t.Kinds.Map(e,n);t.Enum\u003d(...e)\u003d\u003enew t.Kinds.Enum(e);t.Ref\u003de\u003d\u003enew t.Kinds.Ref(e);t.AnyRef\u003d()\u003d\u003enew t.Kinds.AnyRef;t.Function\u003d()\u003d\u003enew t.Kinds.Function,t.Percent\u003dnew t.Kinds.Percent,t.Alpha\u003dt.Percent,t.Color\u003dnew t.Kinds.Color,t.Auto\u003dt.Enum(\"auto\"),t.FontSize\u003dt.String,t.Font\u003dt.String,t.Angle\u003dt.Number},\n      function _(n,t,r,e,s){e();const u\u003dn(23),c\u003dn(10),l\u003dn(8),{round:i}\u003dMath;function o(n){return c.clamp(i(n),0,255)}function a(){return[0,0,0,0]}function f(n){return[n\u003e\u003e24\u0026255,n\u003e\u003e16\u0026255,n\u003e\u003e8\u0026255,255\u0026n]}function d(n,t){var r;let e,s,u,c;return null\u003d\u003dn?[e,s,u,c]\u003d[0,0,0,0]:l.isInteger(n)?[e,s,u,c]\u003df(n):l.isString(n)?[e,s,u,c]\u003dnull!\u003d\u003d(r\u003d_(n))\u0026\u0026void 0!\u003d\u003dr?r:[0,0,0,0]:([e,s,u,c\u003d1]\u003dn,c\u003do(255*c)),255\u003d\u003dc\u0026\u0026null!\u003dt\u0026\u0026(c\u003do(255*t)),[e,s,u,c]}r.transparent\u003da,r.encode_rgba\u003dfunction([n,t,r,e]){return n\u003c\u003c24|t\u003c\u003c16|r\u003c\u003c8|e},r.decode_rgba\u003df,r.compose_alpha\u003dfunction(n,t){return 255\u003d\u003d(255\u0026n)?4294967040\u0026n|o(255*t):n},r.color2rgba\u003dd;const h\u003d{0:\"0\",1:\"1\",2:\"2\",3:\"3\",4:\"4\",5:\"5\",6:\"6\",7:\"7\",8:\"8\",9:\"9\",10:\"a\",11:\"b\",12:\"c\",13:\"d\",14:\"e\",15:\"f\"};function g(n){return h[n\u003e\u003e4]+h[15\u0026n]}r.color2css\u003dfunction(n,t){const[r,e,s,u]\u003dd(n,t);return`rgba(${r}, ${e}, ${s}, ${u/255})`},r.color2hex\u003dfunction(n,t){const[r,e,s,u]\u003dd(n,t),c\u003d`#${g(r)}${g(e)}${g(s)}`;return 255\u003d\u003du?c:`${c}${g(u)}`},r.color2hexrgb\u003dfunction(n){const[t,r,e]\u003dd(n);return`#${g(t)}${g(r)}${g(e)}`};const b\u003d/^rgba?\\(\\s*([^\\s,]+?)\\s+([^\\s,]+?)\\s+([^\\s,]+?)(?:\\s*\\/\\s*([^\\s,]+?))?\\s*\\)$/,m\u003d/^rgba?\\(\\s*([^\\s,]+?)\\s*,\\s*([^\\s,]+?)\\s*,\\s*([^\\s,]+?)(?:\\s*,\\s*([^\\s,]+?))?\\s*\\)$/,$\u003d(()\u003d\u003e{const n\u003ddocument.createElement(\"canvas\");n.width\u003d1,n.height\u003d1;const t\u003dn.getContext(\"2d\"),r\u003dt.createLinearGradient(0,0,1,1);return n\u003d\u003e{t.fillStyle\u003dr,t.fillStyle\u003dn;const e\u003dt.fillStyle;return e!\u003dr?e:null}})();function _(n){var t;if(!(n\u003dn.trim().toLowerCase()))return null;if(\"transparent\"\u003d\u003dn)return[0,0,0,0];if(u.is_named_color(n))return f(u.named_colors[n]);if(\"#\"\u003d\u003dn[0]){const t\u003dNumber(\"0x\"+n.substr(1));if(isNaN(t))return null;switch(n.length-1){case 3:{const n\u003dt\u003e\u003e8\u002615,r\u003dt\u003e\u003e4\u002615,e\u003dt\u003e\u003e0\u002615;return[n\u003c\u003c4|n,r\u003c\u003c4|r,e\u003c\u003c4|e,255]}case 4:{const n\u003dt\u003e\u003e12\u002615,r\u003dt\u003e\u003e8\u002615,e\u003dt\u003e\u003e4\u002615,s\u003dt\u003e\u003e0\u002615;return[n\u003c\u003c4|n,r\u003c\u003c4|r,e\u003c\u003c4|e,s\u003c\u003c4|s]}case 6:return[t\u003e\u003e16\u0026255,t\u003e\u003e8\u0026255,t\u003e\u003e0\u0026255,255];case 8:return[t\u003e\u003e24\u0026255,t\u003e\u003e16\u0026255,t\u003e\u003e8\u0026255,t\u003e\u003e0\u0026255]}}else if(n.startsWith(\"rgb\")){const r\u003dnull!\u003d\u003d(t\u003dn.match(b))\u0026\u0026void 0!\u003d\u003dt?t:n.match(m);if(null!\u003dr){let[,n,t,e,s\u003d\"1\"]\u003dr;const u\u003dn.endsWith(\"%\"),c\u003dt.endsWith(\"%\"),l\u003de.endsWith(\"%\"),i\u003ds.endsWith(\"%\");if(!(u\u0026\u0026c\u0026\u0026l)\u0026\u0026(u||c||l))return null;u\u0026\u0026(n\u003dn.slice(0,-1)),c\u0026\u0026(t\u003dt.slice(0,-1)),l\u0026\u0026(e\u003de.slice(0,-1)),i\u0026\u0026(s\u003ds.slice(0,-1));let a\u003dNumber(n),f\u003dNumber(t),d\u003dNumber(e),h\u003dNumber(s);return isNaN(a+f+d+h)?null:(u\u0026\u0026(a\u003da/100*255),c\u0026\u0026(f\u003df/100*255),l\u0026\u0026(d\u003dd/100*255),h\u003d255*(i?h/100:h),a\u003do(a),f\u003do(f),d\u003do(d),h\u003do(h),[a,f,d,h])}}else{const t\u003d$(n);if(null!\u003dt)return _(t)}return null}r.css4_parse\u003d_,r.is_Color\u003dfunction(n){return!!l.isInteger(n)||(!(!l.isString(n)||null\u003d\u003d_(n))||!(!l.isArray(n)||3!\u003dn.length\u0026\u00264!\u003dn.length))},r.is_dark\u003dfunction([n,t,r]){return 1-(.299*n+.587*t+.114*r)/255\u003e\u003d.6}},\n      function _(e,r,l,a,i){a();l.named_colors\u003d{aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199},l.is_named_color\u003dfunction(e){return e in l.named_colors}},\n      function _(r,t,n,a,o){a(),n.GeneratorFunction\u003dObject.getPrototypeOf((function*(){})).constructor,n.ColorArray\u003dUint32Array,n.RGBAArray\u003dUint8ClampedArray,n.infer_type\u003dfunction(r,t){return r instanceof Float64Array||r instanceof Array||t instanceof Float64Array||t instanceof Array?Float64Array:Float32Array},n.ScreenArray\u003dFloat32Array,n.to_screen\u003dfunction(r){return r instanceof Float32Array?r:new Float32Array(r)},o(\"Indices\",r(25).BitSet)},\n      function _(t,s,r,e,i){e();const n\u003dt(26),o\u003dt(11);class a{constructor(t,s\u003d0){this.size\u003dt,this[Symbol.toStringTag]\u003d\"BitSet\",this._count\u003dnull,this._nwords\u003dMath.ceil(t/32),0\u003d\u003ds||1\u003d\u003ds?(this._array\u003dnew Uint32Array(this._nwords),1\u003d\u003ds\u0026\u0026this._array.fill(4294967295)):(o.assert(s.length\u003d\u003dthis._nwords,\"Initializer size mismatch\"),this._array\u003ds)}clone(){return new a(this.size,new Uint32Array(this._array))}[n.equals](t,s){if(!s.eq(this.size,t.size))return!1;const{_nwords:r}\u003dthis,e\u003dthis.size%r,i\u003d0\u003d\u003de?r:r-1;for(let s\u003d0;s\u003ci;s++)if(this._array[s]!\u003dt._array[s])return!1;if(0\u003d\u003de)return!0;{const s\u003d1\u003c\u003ce-1,r\u003ds-1^s;return(this._array[i]\u0026r)\u003d\u003d(t._array[i]\u0026r)}}static all_set(t){return new a(t,1)}static all_unset(t){return new a(t,0)}static from_indices(t,s){const r\u003dnew a(t);for(const t of s)r.set(t);return r}static from_booleans(t,s){const r\u003dnew a(t),e\u003dMath.min(t,s.length);for(let t\u003d0;t\u003ce;t++)s[t]\u0026\u0026r.set(t);return r}_check_bounds(t){o.assert(0\u003c\u003dt\u0026\u0026t\u003cthis.size,`Out of bounds: 0 \u003c\u003d ${t} \u003c ${this.size}`)}get(t){this._check_bounds(t);const s\u003dt\u003e\u003e\u003e5,r\u003d31\u0026t;return!!(this._array[s]\u003e\u003er\u00261)}set(t,s\u003d!0){this._check_bounds(t),this._count\u003dnull;const r\u003dt\u003e\u003e\u003e5,e\u003d31\u0026t;s?this._array[r]|\u003d1\u003c\u003ce:this._array[r]\u0026\u003d~(1\u003c\u003ce)}unset(t){this.set(t,!1)}*[Symbol.iterator](){yield*this.ones()}get count(){let t\u003dthis._count;return null\u003d\u003dt\u0026\u0026(this._count\u003dt\u003dthis._get_count()),t}_get_count(){const{_array:t,_nwords:s,size:r}\u003dthis;let e\u003d0;for(let i\u003d0,n\u003d0;n\u003cs;n++){const s\u003dt[n];if(0\u003d\u003ds)i+\u003d32;else for(let t\u003d0;t\u003c32\u0026\u0026i\u003cr;t++,i++)s\u003e\u003e\u003et\u00261\u0026\u0026(e+\u003d1)}return e}*ones(){const{_array:t,_nwords:s,size:r}\u003dthis;for(let e\u003d0,i\u003d0;i\u003cs;i++){const s\u003dt[i];if(0!\u003ds)for(let t\u003d0;t\u003c32\u0026\u0026e\u003cr;t++,e++)s\u003e\u003e\u003et\u00261\u0026\u0026(yield e);else e+\u003d32}}*zeros(){const{_array:t,_nwords:s,size:r}\u003dthis;for(let e\u003d0,i\u003d0;i\u003cs;i++){const s\u003dt[i];if(4294967295!\u003ds)for(let t\u003d0;t\u003c32\u0026\u0026e\u003cr;t++,e++)s\u003e\u003e\u003et\u00261||(yield e);else e+\u003d32}}_check_size(t){o.assert(this.size\u003d\u003dt.size,\"Size mismatch\")}add(t){this._check_size(t);for(let s\u003d0;s\u003cthis._nwords;s++)this._array[s]|\u003dt._array[s]}intersect(t){this._check_size(t);for(let s\u003d0;s\u003cthis._nwords;s++)this._array[s]\u0026\u003dt._array[s]}subtract(t){this._check_size(t);for(let s\u003d0;s\u003cthis._nwords;s++){const r\u003dthis._array[s],e\u003dt._array[s];this._array[s]\u003d(r^e)\u0026r}}union(t){this._check_size(t);const s\u003dthis.clone();for(let r\u003d0;r\u003cthis._nwords;r++)s._array[r]|\u003dt._array[r];return s}intersection(t){this._check_size(t);const s\u003dthis.clone();for(let r\u003d0;r\u003cthis._nwords;r++)s._array[r]\u0026\u003dt._array[r];return s}difference(t){this._check_size(t);const s\u003dthis.clone();for(let r\u003d0;r\u003cthis._nwords;r++){const e\u003dthis._array[r],i\u003dt._array[r];s._array[r]\u003d(e^i)\u0026e}return s}select(t){o.assert(this.size\u003c\u003dt.length,\"Size mismatch\");const s\u003dthis.count,r\u003dnew t.constructor(s);let e\u003d0;for(const s of this)r[e++]\u003dt[s];return r}}r.BitSet\u003da,a.__name__\u003d\"BitSet\"},\n      function _(t,e,r,n,s){n();const o\u003dt(8),{hasOwnProperty:c}\u003dObject.prototype;function a(t){return o.isObject(t)\u0026\u0026void 0!\u003d\u003dt[r.equals]}r.equals\u003dSymbol(\"equals\"),r.wildcard\u003dSymbol(\"wildcard\");const i\u003dObject.prototype.toString;class u{constructor(){this.a_stack\u003d[],this.b_stack\u003d[]}eq(t,e){if(Object.is(t,e))return!0;if(t\u003d\u003d\u003dr.wildcard||e\u003d\u003d\u003dr.wildcard)return!0;if(null\u003d\u003dt||null\u003d\u003de)return t\u003d\u003d\u003de;const n\u003di.call(t);if(n!\u003di.call(e))return!1;switch(n){case\"[object Number]\":return this.numbers(t,e);case\"[object RegExp]\":case\"[object String]\":return`${t}`\u003d\u003d`${e}`;case\"[object Date]\":case\"[object Boolean]\":return+t\u003d\u003d+e}const{a_stack:s,b_stack:o}\u003dthis;let c\u003ds.length;for(;c--;)if(s[c]\u003d\u003d\u003dt)return o[c]\u003d\u003d\u003de;s.push(t),o.push(e);const u\u003d(()\u003d\u003e{if(a(t)\u0026\u0026a(e))return t[r.equals](e,this);switch(n){case\"[object Array]\":case\"[object Uint8Array]\":case\"[object Int8Array]\":case\"[object Uint16Array]\":case\"[object Int16Array]\":case\"[object Uint32Array]\":case\"[object Int32Array]\":case\"[object Float32Array]\":case\"[object Float64Array]\":return this.arrays(t,e);case\"[object Map]\":return this.maps(t,e);case\"[object Set]\":return this.sets(t,e);case\"[object Object]\":if(t.constructor\u003d\u003de.constructor\u0026\u0026(null\u003d\u003dt.constructor||t.constructor\u003d\u003d\u003dObject))return this.objects(t,e);case\"[object Function]\":if(t.constructor\u003d\u003de.constructor\u0026\u0026t.constructor\u003d\u003d\u003dFunction)return this.eq(`${t}`,`${e}`)}if(t instanceof Node)return this.nodes(t,e);throw Error(`can\u0027t compare objects of type ${n}`)})();return s.pop(),o.pop(),u}numbers(t,e){return Object.is(t,e)}arrays(t,e){const{length:r}\u003dt;if(r!\u003de.length)return!1;for(let n\u003d0;n\u003cr;n++)if(!this.eq(t[n],e[n]))return!1;return!0}iterables(t,e){const r\u003dt[Symbol.iterator](),n\u003de[Symbol.iterator]();for(;;){const t\u003dr.next(),e\u003dn.next();if(t.done\u0026\u0026e.done)return!0;if(t.done||e.done)return!1;if(!this.eq(t.value,e.value))return!1}}maps(t,e){if(t.size!\u003de.size)return!1;for(const[r,n]of t)if(!e.has(r)||!this.eq(n,e.get(r)))return!1;return!0}sets(t,e){if(t.size!\u003de.size)return!1;for(const r of t)if(!e.has(r))return!1;return!0}objects(t,e){const r\u003dObject.keys(t);if(r.length!\u003dObject.keys(e).length)return!1;for(const n of r)if(!c.call(e,n)||!this.eq(t[n],e[n]))return!1;return!0}nodes(t,e){return t.nodeType\u003d\u003de.nodeType\u0026\u0026(t.textContent\u003d\u003de.textContent\u0026\u0026!!this.iterables(t.childNodes,e.childNodes))}}r.Comparator\u003du,u.__name__\u003d\"Comparator\";const{abs:l}\u003dMath;class b extends u{constructor(t\u003d1e-4){super(),this.tolerance\u003dt}numbers(t,e){return super.numbers(t,e)||l(t-e)\u003cthis.tolerance}}function f(t,e){return(new u).eq(t,e)}r.SimilarComparator\u003db,b.__name__\u003d\"SimilarComparator\",r.is_equal\u003df,r.is_similar\u003dfunction(t,e,r){return new b(r).eq(t,e)},r.isEqual\u003df},\n      function _(n,i,e,t,r){t(),e.is_windows\u003dnavigator.appVersion.includes(\"Windows\"),e.is_ie\u003d(()\u003d\u003e{const n\u003dnavigator.userAgent;return n.includes(\"MSIE\")||n.includes(\"Trident\")||n.includes(\"Edge\")})(),e.is_mobile\u003d\"undefined\"!\u003dtypeof window\u0026\u0026(\"ontouchstart\"in window||navigator.maxTouchPoints\u003e0),e.is_little_endian\u003d(()\u003d\u003e{const n\u003dnew ArrayBuffer(4),i\u003dnew Uint8Array(n);new Uint32Array(n)[1]\u003d168496141;let e\u003d!0;return 10\u003d\u003di[4]\u0026\u002611\u003d\u003di[5]\u0026\u002612\u003d\u003di[6]\u0026\u002613\u003d\u003di[7]\u0026\u0026(e\u003d!1),e})(),e.BYTE_ORDER\u003de.is_little_endian?\"little\":\"big\",e.to_big_endian\u003dfunction(n){if(e.is_little_endian){const i\u003dnew Uint32Array(n.length),e\u003dnew DataView(i.buffer);let t\u003d0;for(const i of n)e.setUint32(t,i),t+\u003d4;return i}return n}},\n      function _(e,t,r,i,s){i();class _{constructor(){this._dev\u003d!1,this._wireframe\u003d!1}set dev(e){this._dev\u003de}get dev(){return this._dev}set wireframe(e){this._wireframe\u003de}get wireframe(){return this._wireframe}}r.Settings\u003d_,_.__name__\u003d\"Settings\",r.settings\u003dnew _},\n      function _(t,e,s,r,n){var a,i,h,u,l,c,o,y;r();const p\u003dt(8),_\u003dt(11),A\u003dt(26),d\u003dt(30),D\u003dt(31),N\u003dSymbol(\"__ndarray__\");class f extends Uint8Array{constructor(t,e){super(t),this[a]\u003d!0,this.dtype\u003d\"uint8\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(a\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Uint8NDArray\u003df,f.__name__\u003d\"Uint8NDArray\";class m extends Int8Array{constructor(t,e){super(t),this[i]\u003d!0,this.dtype\u003d\"int8\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(i\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Int8NDArray\u003dm,m.__name__\u003d\"Int8NDArray\";class g extends Uint16Array{constructor(t,e){super(t),this[h]\u003d!0,this.dtype\u003d\"uint16\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(h\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Uint16NDArray\u003dg,g.__name__\u003d\"Uint16NDArray\";class q extends Int16Array{constructor(t,e){super(t),this[u]\u003d!0,this.dtype\u003d\"int16\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(u\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Int16NDArray\u003dq,q.__name__\u003d\"Int16NDArray\";class I extends Uint32Array{constructor(t,e){super(t),this[l]\u003d!0,this.dtype\u003d\"uint32\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(l\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Uint32NDArray\u003dI,I.__name__\u003d\"Uint32NDArray\";class U extends Int32Array{constructor(t,e){super(t),this[c]\u003d!0,this.dtype\u003d\"int32\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(c\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Int32NDArray\u003dU,U.__name__\u003d\"Int32NDArray\";class w extends Float32Array{constructor(t,e){super(t),this[o]\u003d!0,this.dtype\u003d\"float32\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(o\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}s.Float32NDArray\u003dw,w.__name__\u003d\"Float32NDArray\";class x extends Float64Array{constructor(t,e){super(t),this[y]\u003d!0,this.dtype\u003d\"float64\",this.shape\u003dnull!\u003de?e:z(t)?t.shape:[this.length],this.dimension\u003dthis.shape.length}[(y\u003dN,A.equals)](t,e){return e.eq(this.shape,t.shape)\u0026\u0026e.arrays(this,t)}[d.serialize](t){return D.encode_NDArray(this)}}function z(t){return p.isObject(t)\u0026\u0026void 0!\u003d\u003dt[N]}s.Float64NDArray\u003dx,x.__name__\u003d\"Float64NDArray\",s.is_NDArray\u003dz,s.ndarray\u003dfunction(t,e\u003d{}){let{dtype:s}\u003de;null\u003d\u003ds\u0026\u0026(s\u003dt instanceof ArrayBuffer||p.isArray(t)?\"float64\":(()\u003d\u003e{switch(!0){case t instanceof Uint8Array:return\"uint8\";case t instanceof Int8Array:return\"int8\";case t instanceof Uint16Array:return\"uint16\";case t instanceof Int16Array:return\"int16\";case t instanceof Uint32Array:return\"uint32\";case t instanceof Int32Array:return\"int32\";case t instanceof Float32Array:return\"float32\";case t instanceof Float64Array:return\"float64\";default:_.unreachable()}})());const{shape:r}\u003de;switch(s){case\"uint8\":return new f(t,r);case\"int8\":return new m(t,r);case\"uint16\":return new g(t,r);case\"int16\":return new q(t,r);case\"uint32\":return new I(t,r);case\"int32\":return new U(t,r);case\"float32\":return new w(t,r);case\"float64\":return new x(t,r)}}},\n      function _(e,r,t,i,s){i();const n\u003de(11),a\u003de(13),l\u003de(8);t.serialize\u003dSymbol(\"serialize\");class o extends Error{}t.SerializationError\u003do,o.__name__\u003d\"SerializationError\";class f{constructor(e){var r;this._references\u003dnew Map,this._definitions\u003dnew Map,this._refmap\u003dnew Map,this.include_defaults\u003dnull\u003d\u003d\u003d(r\u003dnull\u003d\u003de?void 0:e.include_defaults)||void 0\u003d\u003d\u003dr||r}get_ref(e){return this._references.get(e)}add_ref(e,r){n.assert(!this._references.has(e)),this._references.set(e,r)}add_def(e,r){const t\u003dthis.get_ref(e);n.assert(null!\u003dt),this._definitions.set(e,r),this._refmap.set(t,r)}get objects(){return new Set(this._references.keys())}get references(){return new Set(this._references.values())}get definitions(){return new Set(this._definitions.values())}resolve_ref(e){return this._refmap.get(e)}remove_ref(e){return this._references.delete(e)}remove_def(e){return this._definitions.delete(e)}to_serializable(e){const r\u003dthis.get_ref(e);if(null!\u003dr)return r;if(function(e){return l.isObject(e)\u0026\u0026void 0!\u003d\u003de[t.serialize]}(e))return e[t.serialize](this);if(l.isArray(e)||l.isTypedArray(e)){const r\u003de.length,t\u003dnew Array(r);for(let i\u003d0;i\u003cr;i++){const r\u003de[i];t[i]\u003dthis.to_serializable(r)}return t}if(l.isPlainObject(e)){const r\u003d{};for(const[t,i]of a.entries(e))r[t]\u003dthis.to_serializable(i);return r}if(null\u003d\u003d\u003de||l.isBoolean(e)||l.isNumber(e)||l.isString(e))return e;throw new o(`${Object.prototype.toString.call(e)} is not serializable`)}}t.Serializer\u003df,f.__name__\u003d\"Serializer\"},\n      function _(r,e,n,t,_){t();const a\u003dr(1),f\u003dr(8),u\u003da.__importStar(r(29)),s\u003dr(27),o\u003dr(32);n.is_NDArray_ref\u003dfunction(r){return f.isPlainObject(r)\u0026\u0026(\"__buffer__\"in r||\"__ndarray__\"in r)},n.decode_NDArray\u003dfunction(r,e){const{shape:n,dtype:t,order:_}\u003dr;let a;if(\"__buffer__\"in r){const n\u003de.get(r.__buffer__);if(null\u003d\u003dn)throw new Error(`buffer for ${r.__buffer__} not found`);a\u003dn}else a\u003do.base64_to_buffer(r.__ndarray__);const f\u003d(()\u003d\u003e{switch(t){case\"uint8\":return new u.Uint8NDArray(a,n);case\"int8\":return new u.Int8NDArray(a,n);case\"uint16\":return new u.Uint16NDArray(a,n);case\"int16\":return new u.Int16NDArray(a,n);case\"uint32\":return new u.Uint32NDArray(a,n);case\"int32\":return new u.Int32NDArray(a,n);case\"float32\":return new u.Float32NDArray(a,n);case\"float64\":return new u.Float64NDArray(a,n)}})();return _!\u003d\u003ds.BYTE_ORDER\u0026\u0026o.swap(f),f},n.encode_NDArray\u003dfunction(r,e){const n\u003d{order:s.BYTE_ORDER,dtype:r.dtype,shape:r.shape};if(null!\u003de){const t\u003d`${e.size}`;return e.set(t,r.buffer),Object.assign({__buffer__:t},n)}{const e\u003d{toJSON:()\u003d\u003eo.buffer_to_base64(r.buffer)};return Object.assign({__ndarray__:e},n)}}},\n      function _(t,e,n,r,f){r(),n.buffer_to_base64\u003dfunction(t){const e\u003dnew Uint8Array(t),n\u003dArray.from(e).map((t\u003d\u003eString.fromCharCode(t)));return btoa(n.join(\"\"))},n.base64_to_buffer\u003dfunction(t){const e\u003datob(t),n\u003de.length,r\u003dnew Uint8Array(n);for(let t\u003d0,f\u003dn;t\u003cf;t++)r[t]\u003de.charCodeAt(t);return r.buffer},n.swap\u003dfunction(t){switch(t.BYTES_PER_ELEMENT){case 2:!function(t){const e\u003dnew Uint8Array(t.buffer,t.byteOffset,2*t.length);for(let t\u003d0,n\u003de.length;t\u003cn;t+\u003d2){const n\u003de[t];e[t]\u003de[t+1],e[t+1]\u003dn}}(t);break;case 4:!function(t){const e\u003dnew Uint8Array(t.buffer,t.byteOffset,4*t.length);for(let t\u003d0,n\u003de.length;t\u003cn;t+\u003d4){let n\u003de[t];e[t]\u003de[t+3],e[t+3]\u003dn,n\u003de[t+1],e[t+1]\u003de[t+2],e[t+2]\u003dn}}(t);break;case 8:!function(t){const e\u003dnew Uint8Array(t.buffer,t.byteOffset,8*t.length);for(let t\u003d0,n\u003de.length;t\u003cn;t+\u003d8){let n\u003de[t];e[t]\u003de[t+7],e[t+7]\u003dn,n\u003de[t+1],e[t+1]\u003de[t+6],e[t+6]\u003dn,n\u003de[t+2],e[t+2]\u003de[t+5],e[t+5]\u003dn,n\u003de[t+3],e[t+3]\u003de[t+4],e[t+4]\u003dn}}(t)}}},\n      function _(t,r,e,s,a){s();const i\u003dt(26);class n{is_Scalar(){return this.is_scalar}is_Vector(){return!this.is_scalar}}e.Uniform\u003dn,n.__name__\u003d\"Uniform\";class l extends n{constructor(t,r){super(),this.value\u003dt,this.length\u003dr,this.is_scalar\u003d!0}get(t){return this.value}*[Symbol.iterator](){const{length:t,value:r}\u003dthis;for(let e\u003d0;e\u003ct;e++)yield r}select(t){return new l(this.value,t.count)}[i.equals](t,r){return r.eq(this.length,t.length)\u0026\u0026r.eq(this.value,t.value)}}e.UniformScalar\u003dl,l.__name__\u003d\"UniformScalar\";class o extends n{constructor(t){super(),this.array\u003dt,this.is_scalar\u003d!1,this.length\u003dthis.array.length}get(t){return this.array[t]}*[Symbol.iterator](){yield*this.array}select(t){const r\u003dt.select(this.array);return new this.constructor(r)}[i.equals](t,r){return r.eq(this.length,t.length)\u0026\u0026r.eq(this.array,t.array)}}e.UniformVector\u003do,o.__name__\u003d\"UniformVector\";class h extends o{constructor(t){super(t),this.array\u003dt,this._view\u003dnew DataView(t.buffer)}get(t){return this._view.getUint32(4*t)}*[Symbol.iterator](){const t\u003dthis.length;for(let r\u003d0;r\u003ct;r++)yield this.get(r)}}e.ColorUniformVector\u003dh,h.__name__\u003d\"ColorUniformVector\"},\n      function _(t,e,r,n,u){n();const c\u003dt(28);function s(){const t\u003dnew Array(32),e\u003d\"0123456789ABCDEF\";for(let r\u003d0;r\u003c32;r++)t[r]\u003de.substr(Math.floor(16*Math.random()),1);return t[12]\u003d\"4\",t[16]\u003de.substr(3\u0026t[16].charCodeAt(0)|8,1),t.join(\"\")}r.startsWith\u003dfunction(t,e,r\u003d0){return t.substr(r,e.length)\u003d\u003de},r.uuid4\u003ds;let a\u003d1e3;r.uniqueId\u003dfunction(t){const e\u003dc.settings.dev?\"j\"+a++:s();return null!\u003dt?`${t}-${e}`:e},r.escape\u003dfunction(t){return t.replace(/(?:[\u0026\u003c\u003e\"\u0027`])/g,(t\u003d\u003e{switch(t){case\"\u0026\":return\"\u0026amp;\";case\"\u003c\":return\"\u0026lt;\";case\"\u003e\":return\"\u0026gt;\";case\u0027\"\u0027:return\"\u0026quot;\";case\"\u0027\":return\"\u0026#x27;\";case\"`\":return\"\u0026#x60;\";default:return t}}))},r.unescape\u003dfunction(t){return t.replace(/\u0026(amp|lt|gt|quot|#x27|#x60);/g,((t,e)\u003d\u003e{switch(e){case\"amp\":return\"\u0026\";case\"lt\":return\"\u003c\";case\"gt\":return\"\u003e\";case\"quot\":return\u0027\"\u0027;case\"#x27\":return\"\u0027\";case\"#x60\":return\"`\";default:return e}}))},r.use_strict\u003dfunction(t){return`\u0027use strict\u0027;\\n${t}`},r.to_fixed\u003dfunction(t,e){return t.toFixed(e).replace(/(\\.[0-9]*?)0+$/,\"$1\").replace(/\\.$/,\"\")}},\n      function _(e,t,s,n,o){n();const i\u003de(30);class r{constructor(e){this.document\u003de}}s.DocumentEvent\u003dr,r.__name__\u003d\"DocumentEvent\";class a extends r{constructor(e,t,s){super(e),this.events\u003dt,this.setter_id\u003ds}}s.DocumentEventBatch\u003da,a.__name__\u003d\"DocumentEventBatch\";class d extends r{}s.DocumentChangedEvent\u003dd,d.__name__\u003d\"DocumentChangedEvent\";class l extends d{constructor(e,t,s){super(e),this.msg_type\u003dt,this.msg_data\u003ds}[i.serialize](e){const t\u003dthis.msg_data,s\u003de.to_serializable(t);return{kind:\"MessageSent\",msg_type:this.msg_type,msg_data:s}}}s.MessageSentEvent\u003dl,l.__name__\u003d\"MessageSentEvent\";class _ extends d{constructor(e,t,s,n,o,i,r){super(e),this.model\u003dt,this.attr\u003ds,this.old\u003dn,this.new_\u003do,this.setter_id\u003di,this.hint\u003dr}[i.serialize](e){if(null!\u003dthis.hint)return e.to_serializable(this.hint);const t\u003dthis.new_,s\u003de.to_serializable(t);return this.model!\u003dt\u0026\u0026e.remove_def(this.model),{kind:\"ModelChanged\",model:this.model.ref(),attr:this.attr,new:s}}}s.ModelChangedEvent\u003d_,_.__name__\u003d\"ModelChangedEvent\";class c extends d{constructor(e,t,s){super(e),this.column_source\u003dt,this.patches\u003ds}[i.serialize](e){return{kind:\"ColumnsPatched\",column_source:this.column_source,patches:this.patches}}}s.ColumnsPatchedEvent\u003dc,c.__name__\u003d\"ColumnsPatchedEvent\";class h extends d{constructor(e,t,s,n){super(e),this.column_source\u003dt,this.data\u003ds,this.rollover\u003dn}[i.serialize](e){return{kind:\"ColumnsStreamed\",column_source:this.column_source,data:this.data,rollover:this.rollover}}}s.ColumnsStreamedEvent\u003dh,h.__name__\u003d\"ColumnsStreamedEvent\";class m extends d{constructor(e,t,s){super(e),this.title\u003dt,this.setter_id\u003ds}[i.serialize](e){return{kind:\"TitleChanged\",title:this.title}}}s.TitleChangedEvent\u003dm,m.__name__\u003d\"TitleChangedEvent\";class u extends d{constructor(e,t,s){super(e),this.model\u003dt,this.setter_id\u003ds}[i.serialize](e){return{kind:\"RootAdded\",model:e.to_serializable(this.model)}}}s.RootAddedEvent\u003du,u.__name__\u003d\"RootAddedEvent\";class v extends d{constructor(e,t,s){super(e),this.model\u003dt,this.setter_id\u003ds}[i.serialize](e){return{kind:\"RootRemoved\",model:this.model.ref()}}}s.RootRemovedEvent\u003dv,v.__name__\u003d\"RootRemovedEvent\"},\n      function _(t,r,n,i,e){i();const s\u003dt(8),o\u003dt(13);n.pretty\u003dSymbol(\"pretty\");class c{constructor(t){this.precision\u003dnull\u003d\u003dt?void 0:t.precision}to_string(t){return function(t){return s.isObject(t)\u0026\u0026void 0!\u003d\u003dt[n.pretty]}(t)?t[n.pretty](this):s.isBoolean(t)?this.boolean(t):s.isNumber(t)?this.number(t):s.isString(t)?this.string(t):s.isArray(t)?this.array(t):s.isIterable(t)?this.iterable(t):s.isPlainObject(t)?this.object(t):`${t}`}token(t){return t}boolean(t){return`${t}`}number(t){return null!\u003dthis.precision?t.toFixed(this.precision):`${t}`}string(t){return`\"${t.replace(/\u0027/g,\"\\\\\u0027\")}\"`}array(t){const r\u003dthis.token,n\u003d[];for(const r of t)n.push(this.to_string(r));return`${r(\"[\")}${n.join(`${r(\",\")} `)}${r(\"]\")}`}iterable(t){var r;const n\u003dthis.token,i\u003dnull!\u003d\u003d(r\u003dObject(t)[Symbol.toStringTag])\u0026\u0026void 0!\u003d\u003dr?r:\"Object\",e\u003dthis.array(t);return`${i}${n(\"(\")}${e}${n(\")\")}`}object(t){const r\u003dthis.token,n\u003d[];for(const[i,e]of o.entries(t))n.push(`${i}${r(\":\")} ${this.to_string(e)}`);return`${r(\"{\")}${n.join(`${r(\",\")} `)}${r(\"}\")}`}}n.Printer\u003dc,c.__name__\u003d\"Printer\",n.to_string\u003dfunction(t,r){return new c(r).to_string(t)}},\n      function _(n,o,r,e,t){e();const l\u003dn(13),i\u003dn(8);function c(n){return i.isObject(n)\u0026\u0026void 0!\u003d\u003dn[r.clone]}r.clone\u003dSymbol(\"clone\"),r.is_Cloneable\u003dc;class s extends Error{}r.CloningError\u003ds,s.__name__\u003d\"CloningError\";class a{constructor(){}clone(n){if(c(n))return n[r.clone](this);if(i.isArray(n)){const o\u003dn.length,r\u003dnew Array(o);for(let e\u003d0;e\u003co;e++){const o\u003dn[e];r[e]\u003dthis.clone(o)}return r}if(i.isPlainObject(n)){const o\u003d{};for(const[r,e]of l.entries(n))o[r]\u003dthis.clone(e);return o}if(null\u003d\u003d\u003dn||i.isBoolean(n)||i.isNumber(n)||i.isString(n))return n;throw new s(`${Object.prototype.toString.call(n)} is not cloneable`)}}r.Cloner\u003da,a.__name__\u003d\"Cloner\"},\n      function _(t,_,r,o,a){o();const e\u003dt(1);e.__exportStar(t(39),r),e.__exportStar(t(162),r),e.__exportStar(t(257),r),e.__exportStar(t(261),r),e.__exportStar(t(266),r),e.__exportStar(t(272),r),e.__exportStar(t(205),r),e.__exportStar(t(277),r),e.__exportStar(t(313),r),e.__exportStar(t(315),r),e.__exportStar(t(317),r),e.__exportStar(t(209),r),e.__exportStar(t(147),r),e.__exportStar(t(330),r),e.__exportStar(t(338),r),e.__exportStar(t(220),r),e.__exportStar(t(339),r),e.__exportStar(t(217),r),e.__exportStar(t(340),r),e.__exportStar(t(341),r),e.__exportStar(t(198),r),e.__exportStar(t(346),r),e.__exportStar(t(356),r),e.__exportStar(t(360),r)},\n      function _(e,o,n,a,t){a(),t(\"Annotation\",e(40).Annotation),t(\"Arrow\",e(55).Arrow),t(\"ArrowHead\",e(133).ArrowHead),t(\"OpenHead\",e(133).OpenHead),t(\"NormalHead\",e(133).NormalHead),t(\"TeeHead\",e(133).TeeHead),t(\"VeeHead\",e(133).VeeHead),t(\"Band\",e(134).Band),t(\"BoxAnnotation\",e(136).BoxAnnotation),t(\"ColorBar\",e(137).ColorBar),t(\"Label\",e(226).Label),t(\"LabelSet\",e(227).LabelSet),t(\"Legend\",e(228).Legend),t(\"LegendItem\",e(229).LegendItem),t(\"PolyAnnotation\",e(231).PolyAnnotation),t(\"Slope\",e(232).Slope),t(\"Span\",e(233).Span),t(\"TextAnnotation\",e(139).TextAnnotation),t(\"Title\",e(138).Title),t(\"ToolbarPanel\",e(234).ToolbarPanel),t(\"Tooltip\",e(254).Tooltip),t(\"Whisker\",e(256).Whisker)},\n      function _(t,e,i,n,s){n();const o\u003dt(41);class a extends o.RendererView{get_size(){if(this.model.visible){const{width:t,height:e}\u003dthis._get_size();return{width:Math.round(t),height:Math.round(e)}}return{width:0,height:0}}_get_size(){throw new Error(\"not implemented\")}connect_signals(){super.connect_signals();const t\u003dthis.model.properties;this.on_change(t.visible,(()\u003d\u003e{null!\u003dthis.layout\u0026\u0026(this.layout.visible\u003dthis.model.visible,this.plot_view.request_layout())}))}get needs_clip(){return null\u003d\u003dthis.layout}serializable_state(){const t\u003dsuper.serializable_state();return null\u003d\u003dthis.layout?t:Object.assign(Object.assign({},t),{bbox:this.layout.bbox.box})}}i.AnnotationView\u003da,a.__name__\u003d\"AnnotationView\";class l extends o.Renderer{constructor(t){super(t)}static init_Annotation(){this.override({level:\"annotation\"})}}i.Annotation\u003dl,l.__name__\u003d\"Annotation\",l.init_Annotation()},\n      function _(e,i,t,n,s){n();const r\u003de(1),a\u003de(42),_\u003dr.__importStar(e(45)),o\u003de(20),l\u003de(53),d\u003de(54);class h extends a.View{get coordinates(){const{_coordinates:e}\u003dthis;return null!\u003de?e:this._coordinates\u003dthis._initialize_coordinates()}initialize(){super.initialize(),this.visuals\u003dnew _.Visuals(this),this.needs_webgl_blit\u003d!1}connect_signals(){super.connect_signals();const{x_range_name:e,y_range_name:i}\u003dthis.model.properties;this.on_change([e,i],(()\u003d\u003ethis._initialize_coordinates()))}_initialize_coordinates(){const{x_range_name:e,y_range_name:i}\u003dthis.model,{frame:t}\u003dthis.plot_view,n\u003dt.x_scales.get(e),s\u003dt.y_scales.get(i);return new d.CoordinateTransform(n,s)}get plot_view(){return this.parent}get plot_model(){return this.parent.model}get layer(){const{overlays:e,primary:i}\u003dthis.canvas;return\"overlay\"\u003d\u003dthis.model.level?e:i}get canvas(){return this.plot_view.canvas_view}request_render(){this.request_paint()}request_paint(){this.plot_view.request_paint(this)}notify_finished(){this.plot_view.notify_finished()}get needs_clip(){return!1}get has_webgl(){return!1}render(){this.model.visible\u0026\u0026this._render(),this._has_finished\u003d!0}renderer_view(e){}}t.RendererView\u003dh,h.__name__\u003d\"RendererView\";class c extends l.Model{constructor(e){super(e)}static init_Renderer(){this.define((({Boolean:e,String:i})\u003d\u003e({level:[o.RenderLevel,\"image\"],visible:[e,!0],x_range_name:[i,\"default\"],y_range_name:[i,\"default\"]})))}}t.Renderer\u003dc,c.__name__\u003d\"Renderer\",c.init_Renderer()},\n      function _(t,e,s,i,n){i();const r\u003dt(1),o\u003dt(15),h\u003dt(43),l\u003dt(8),a\u003dr.__importDefault(t(44));class _{constructor(t){this.removed\u003dnew o.Signal0(this,\"removed\"),this._ready\u003dPromise.resolve(void 0),this._slots\u003dnew WeakMap;const{model:e,parent:s}\u003dt;this.model\u003de,this.parent\u003ds,this.root\u003dnull\u003d\u003ds?this:s.root,this.removed.emit()}get ready(){return this._ready}connect(t,e){let s\u003dthis._slots.get(e);return null\u003d\u003ds\u0026\u0026(s\u003d(t,s)\u003d\u003e{const i\u003dPromise.resolve(e.call(this,t,s));this._ready\u003dthis._ready.then((()\u003d\u003ei))},this._slots.set(e,s)),t.connect(s,this)}disconnect(t,e){return t.disconnect(e,this)}initialize(){this._has_finished\u003d!1,this.is_root\u0026\u0026(this._stylesheet\u003dh.stylesheet);for(const t of this.styles())this.stylesheet.append(t)}async lazy_initialize(){}remove(){this.disconnect_signals(),this.removed.emit()}toString(){return`${this.model.type}View(${this.model.id})`}serializable_state(){return{type:this.model.type}}get is_root(){return null\u003d\u003dthis.parent}assert_root(){if(!this.is_root)throw new Error(`${this.toString()} is not a root layout`)}has_finished(){return this._has_finished}get is_idle(){return this.has_finished()}connect_signals(){}disconnect_signals(){o.Signal.disconnect_receiver(this)}on_change(t,e){for(const s of l.isArray(t)?t:[t])this.connect(s.change,e)}cursor(t,e){return null}get stylesheet(){return this.is_root?this._stylesheet:this.root.stylesheet}styles(){return[a.default]}}s.View\u003d_,_.__name__\u003d\"View\"},\n      function _(t,e,n,i,o){i();const s\u003dt(8),l\u003dt(13),r\u003dt\u003d\u003e(e\u003d{},...n)\u003d\u003e{const i\u003ddocument.createElement(t);i.classList.add(\"bk\");for(let[t,n]of l.entries(e))if(null!\u003dn\u0026\u0026(!s.isBoolean(n)||n))if(\"class\"\u003d\u003d\u003dt\u0026\u0026(s.isString(n)\u0026\u0026(n\u003dn.split(/\\s+/)),s.isArray(n)))for(const t of n)null!\u003dt\u0026\u0026i.classList.add(t);else if(\"style\"\u003d\u003d\u003dt\u0026\u0026s.isPlainObject(n))for(const[t,e]of l.entries(n))i.style[t]\u003de;else if(\"data\"\u003d\u003d\u003dt\u0026\u0026s.isPlainObject(n))for(const[t,e]of l.entries(n))i.dataset[t]\u003de;else i.setAttribute(t,n);function o(t){if(s.isString(t))i.appendChild(document.createTextNode(t));else if(t instanceof Node)i.appendChild(t);else if(t instanceof NodeList||t instanceof HTMLCollection)for(const e of t)i.appendChild(e);else if(null!\u003dt\u0026\u0026!1!\u003d\u003dt)throw new Error(`expected a DOM element, string, false or null, got ${JSON.stringify(t)}`)}for(const t of n)if(s.isArray(t))for(const e of t)o(e);else o(t);return i};function a(t){const e\u003dt.parentNode;null!\u003de\u0026\u0026e.removeChild(t)}function c(t,...e){const n\u003dt.firstChild;for(const i of e)t.insertBefore(i,n)}function d(t,e){var n,i,o;const s\u003dElement.prototype;return(null!\u003d\u003d(o\u003dnull!\u003d\u003d(i\u003dnull!\u003d\u003d(n\u003ds.matches)\u0026\u0026void 0!\u003d\u003dn?n:s.webkitMatchesSelector)\u0026\u0026void 0!\u003d\u003di?i:s.mozMatchesSelector)\u0026\u0026void 0!\u003d\u003do?o:s.msMatchesSelector).call(t,e)}function h(t){return parseFloat(t)||0}function u(t){const e\u003dgetComputedStyle(t);return{border:{top:h(e.borderTopWidth),bottom:h(e.borderBottomWidth),left:h(e.borderLeftWidth),right:h(e.borderRightWidth)},margin:{top:h(e.marginTop),bottom:h(e.marginBottom),left:h(e.marginLeft),right:h(e.marginRight)},padding:{top:h(e.paddingTop),bottom:h(e.paddingBottom),left:h(e.paddingLeft),right:h(e.paddingRight)}}}function f(t){const e\u003dt.getBoundingClientRect();return{width:Math.ceil(e.width),height:Math.ceil(e.height)}}n.createElement\u003dfunction(t,e,...n){return r(t)(e,...n)},n.div\u003dr(\"div\"),n.span\u003dr(\"span\"),n.canvas\u003dr(\"canvas\"),n.link\u003dr(\"link\"),n.style\u003dr(\"style\"),n.a\u003dr(\"a\"),n.p\u003dr(\"p\"),n.i\u003dr(\"i\"),n.pre\u003dr(\"pre\"),n.button\u003dr(\"button\"),n.label\u003dr(\"label\"),n.input\u003dr(\"input\"),n.select\u003dr(\"select\"),n.option\u003dr(\"option\"),n.optgroup\u003dr(\"optgroup\"),n.textarea\u003dr(\"textarea\"),n.nbsp\u003dfunction(){return document.createTextNode(\" \")},n.append\u003dfunction(t,...e){for(const n of e)t.appendChild(n)},n.remove\u003da,n.removeElement\u003da,n.replaceWith\u003dfunction(t,e){const n\u003dt.parentNode;null!\u003dn\u0026\u0026n.replaceChild(e,t)},n.prepend\u003dc,n.empty\u003dfunction(t,e\u003d!1){let n;for(;n\u003dt.firstChild;)t.removeChild(n);if(e\u0026\u0026t instanceof Element)for(const e of t.attributes)t.removeAttributeNode(e)},n.display\u003dfunction(t){t.style.display\u003d\"\"},n.undisplay\u003dfunction(t){t.style.display\u003d\"none\"},n.show\u003dfunction(t){t.style.visibility\u003d\"\"},n.hide\u003dfunction(t){t.style.visibility\u003d\"hidden\"},n.offset\u003dfunction(t){const e\u003dt.getBoundingClientRect();return{top:e.top+window.pageYOffset-document.documentElement.clientTop,left:e.left+window.pageXOffset-document.documentElement.clientLeft}},n.matches\u003dd,n.parent\u003dfunction(t,e){let n\u003dt;for(;n\u003dn.parentElement;)if(d(n,e))return n;return null},n.extents\u003du,n.size\u003df,n.scroll_size\u003dfunction(t){return{width:Math.ceil(t.scrollWidth),height:Math.ceil(t.scrollHeight)}},n.outer_size\u003dfunction(t){const{margin:{left:e,right:n,top:i,bottom:o}}\u003du(t),{width:s,height:l}\u003df(t);return{width:Math.ceil(s+e+n),height:Math.ceil(l+i+o)}},n.content_size\u003dfunction(t){const{left:e,top:n}\u003dt.getBoundingClientRect(),{padding:i}\u003du(t);let o\u003d0,s\u003d0;for(const l of t.children){const t\u003dl.getBoundingClientRect();o\u003dMath.max(o,Math.ceil(t.left-e-i.left+t.width)),s\u003dMath.max(s,Math.ceil(t.top-n-i.top+t.height))}return{width:o,height:s}},n.position\u003dfunction(t,e,n){const{style:i}\u003dt;if(i.left\u003d`${e.x}px`,i.top\u003d`${e.y}px`,i.width\u003d`${e.width}px`,i.height\u003d`${e.height}px`,null\u003d\u003dn)i.margin\u003d\"\";else{const{top:t,right:e,bottom:o,left:s}\u003dn;i.margin\u003d`${t}px ${e}px ${o}px ${s}px`}},n.children\u003dfunction(t){return Array.from(t.children)};class p{constructor(t){this.el\u003dt,this.classList\u003dt.classList}get values(){const t\u003d[];for(let e\u003d0;e\u003cthis.classList.length;e++){const n\u003dthis.classList.item(e);null!\u003dn\u0026\u0026t.push(n)}return t}has(t){return this.classList.contains(t)}add(...t){for(const e of t)this.classList.add(e);return this}remove(...t){for(const e of t)this.classList.remove(e);return this}clear(){for(const t of this.values)\"bk\"!\u003dt\u0026\u0026this.classList.remove(t);return this}toggle(t,e){return(null!\u003de?e:!this.has(t))?this.add(t):this.remove(t),this}}var g;function m(t,e,n){const{width:i,height:o,position:s,display:l}\u003dt.style;t.style.position\u003d\"absolute\",t.style.display\u003d\"\",t.style.width\u003dnull!\u003de.width\u0026\u0026e.width!\u003d1/0?`${e.width}px`:\"auto\",t.style.height\u003dnull!\u003de.height\u0026\u0026e.height!\u003d1/0?`${e.height}px`:\"auto\";try{return n()}finally{t.style.position\u003ds,t.style.display\u003dl,t.style.width\u003di,t.style.height\u003do}}n.ClassList\u003dp,p.__name__\u003d\"ClassList\",n.classes\u003dfunction(t){return new p(t)},n.toggle_attribute\u003dfunction(t,e,n){null\u003d\u003dn\u0026\u0026(n\u003d!t.hasAttribute(e)),n?t.setAttribute(e,\"true\"):t.removeAttribute(e)},(g\u003dn.Keys||(n.Keys\u003d{}))[g.Backspace\u003d8]\u003d\"Backspace\",g[g.Tab\u003d9]\u003d\"Tab\",g[g.Enter\u003d13]\u003d\"Enter\",g[g.Esc\u003d27]\u003d\"Esc\",g[g.PageUp\u003d33]\u003d\"PageUp\",g[g.PageDown\u003d34]\u003d\"PageDown\",g[g.Left\u003d37]\u003d\"Left\",g[g.Up\u003d38]\u003d\"Up\",g[g.Right\u003d39]\u003d\"Right\",g[g.Down\u003d40]\u003d\"Down\",g[g.Delete\u003d46]\u003d\"Delete\",n.undisplayed\u003dfunction(t,e){const{display:n}\u003dt.style;t.style.display\u003d\"none\";try{return e()}finally{t.style.display\u003dn}},n.unsized\u003dfunction(t,e){return m(t,{},e)},n.sized\u003dm;class y{constructor(t){this.root\u003dt,this.known\u003dnew Set,this.style\u003dn.style({type:\"text/css\"}),c(t,this.style)}append(t){this.known.has(t)||(this.style.appendChild(document.createTextNode(t)),this.known.add(t))}}n.StyleSheet\u003dy,y.__name__\u003d\"StyleSheet\",n.stylesheet\u003dnew y(document.head),n.dom_ready\u003dasync function(){if(\"loading\"\u003d\u003ddocument.readyState)return new Promise(((t,e)\u003d\u003e{document.addEventListener(\"DOMContentLoaded\",(()\u003d\u003et()),{once:!0})}))}},\n      function _(o,i,t,e,r){e(),t.root\u003d\"bk-root\",t.default\u003d\".bk-root{position:relative;width:auto;height:auto;box-sizing:border-box;font-family:Helvetica, Arial, sans-serif;font-size:13px;}.bk-root .bk,.bk-root .bk:before,.bk-root .bk:after{box-sizing:inherit;margin:0;border:0;padding:0;background-image:none;font-family:inherit;font-size:100%;line-height:1.42857143;}.bk-root pre.bk{font-family:Courier, monospace;}\"},\n      function _(e,t,r,a,c){a();const l\u003de(1),n\u003de(46);c(\"Line\",n.Line),c(\"LineScalar\",n.LineScalar),c(\"LineVector\",n.LineVector);const i\u003de(49);c(\"Fill\",i.Fill),c(\"FillScalar\",i.FillScalar),c(\"FillVector\",i.FillVector);const s\u003de(50);c(\"Text\",s.Text),c(\"TextScalar\",s.TextScalar),c(\"TextVector\",s.TextVector);const o\u003de(51);c(\"Hatch\",o.Hatch),c(\"HatchScalar\",o.HatchScalar),c(\"HatchVector\",o.HatchVector);const u\u003dl.__importStar(e(48)),V\u003de(47);c(\"VisualProperties\",V.VisualProperties),c(\"VisualUniforms\",V.VisualUniforms);class h{constructor(e){this._visuals\u003d[];for(const[t,r]of e.model._mixins){const a\u003d(()\u003d\u003e{switch(r){case u.Line:return new n.Line(e,t);case u.LineScalar:return new n.LineScalar(e,t);case u.LineVector:return new n.LineVector(e,t);case u.Fill:return new i.Fill(e,t);case u.FillScalar:return new i.FillScalar(e,t);case u.FillVector:return new i.FillVector(e,t);case u.Text:return new s.Text(e,t);case u.TextScalar:return new s.TextScalar(e,t);case u.TextVector:return new s.TextVector(e,t);case u.Hatch:return new o.Hatch(e,t);case u.HatchScalar:return new o.HatchScalar(e,t);case u.HatchVector:return new o.HatchVector(e,t);default:throw new Error(\"unknown visual\")}})();this._visuals.push(a),Object.defineProperty(this,t+a.type,{get:()\u003d\u003ea,configurable:!1,enumerable:!0})}}*[Symbol.iterator](){yield*this._visuals}}r.Visuals\u003dh,h.__name__\u003d\"Visuals\"},\n      function _(e,t,i,l,s){l();const n\u003de(1),a\u003de(47),o\u003dn.__importStar(e(48)),r\u003de(22),_\u003de(8);function h(e){if(_.isArray(e))return e;switch(e){case\"solid\":return[];case\"dashed\":return[6];case\"dotted\":return[2,4];case\"dotdash\":return[2,4,6,4];case\"dashdot\":return[6,4,2,4];default:return e.split(\" \").map(Number).filter(_.isInteger)}}i.resolve_line_dash\u003dh;class c extends a.VisualProperties{get doit(){const e\u003dthis.line_color.get_value(),t\u003dthis.line_alpha.get_value(),i\u003dthis.line_width.get_value();return!(null\u003d\u003de||0\u003d\u003dt||0\u003d\u003di)}set_value(e){const t\u003dthis.line_color.get_value(),i\u003dthis.line_alpha.get_value();e.strokeStyle\u003dr.color2css(t,i),e.lineWidth\u003dthis.line_width.get_value(),e.lineJoin\u003dthis.line_join.get_value(),e.lineCap\u003dthis.line_cap.get_value(),e.lineDash\u003dh(this.line_dash.get_value()),e.lineDashOffset\u003dthis.line_dash_offset.get_value()}}i.Line\u003dc,c.__name__\u003d\"Line\";class u extends a.VisualUniforms{get doit(){const e\u003dthis.line_color.value,t\u003dthis.line_alpha.value,i\u003dthis.line_width.value;return!(0\u003d\u003de||0\u003d\u003dt||0\u003d\u003di)}set_value(e){const t\u003dthis.line_color.value,i\u003dthis.line_alpha.value;e.strokeStyle\u003dr.color2css(t,i),e.lineWidth\u003dthis.line_width.value,e.lineJoin\u003dthis.line_join.value,e.lineCap\u003dthis.line_cap.value,e.lineDash\u003dh(this.line_dash.value),e.lineDashOffset\u003dthis.line_dash_offset.value}}i.LineScalar\u003du,u.__name__\u003d\"LineScalar\";class d extends a.VisualUniforms{get doit(){const{line_color:e}\u003dthis;if(e.is_Scalar()\u0026\u00260\u003d\u003de.value)return!1;const{line_alpha:t}\u003dthis;if(t.is_Scalar()\u0026\u00260\u003d\u003dt.value)return!1;const{line_width:i}\u003dthis;return!i.is_Scalar()||0!\u003di.value}set_vectorize(e,t){const i\u003dthis.line_color.get(t),l\u003dthis.line_alpha.get(t),s\u003dthis.line_width.get(t),n\u003dthis.line_join.get(t),a\u003dthis.line_cap.get(t),o\u003dthis.line_dash.get(t),_\u003dthis.line_dash_offset.get(t);e.strokeStyle\u003dr.color2css(i,l),e.lineWidth\u003ds,e.lineJoin\u003dn,e.lineCap\u003da,e.lineDash\u003dh(o),e.lineDashOffset\u003d_}}i.LineVector\u003dd,d.__name__\u003d\"LineVector\",c.prototype.type\u003d\"line\",c.prototype.attrs\u003dObject.keys(o.Line),u.prototype.type\u003d\"line\",u.prototype.attrs\u003dObject.keys(o.LineScalar),d.prototype.type\u003d\"line\",d.prototype.attrs\u003dObject.keys(o.LineVector)},\n      function _(t,s,o,i,r){i();class e{constructor(t,s\u003d\"\"){this.obj\u003dt,this.prefix\u003ds;const o\u003dthis;this._props\u003d[];for(const i of this.attrs){const r\u003dt.model.properties[s+i];r.change.connect((()\u003d\u003ethis.update())),o[i]\u003dr,this._props.push(r)}this.update()}*[Symbol.iterator](){yield*this._props}update(){}}o.VisualProperties\u003de,e.__name__\u003d\"VisualProperties\";class p{constructor(t,s\u003d\"\"){this.obj\u003dt,this.prefix\u003ds;for(const o of this.attrs)Object.defineProperty(this,o,{get:()\u003d\u003et[s+o]})}*[Symbol.iterator](){for(const t of this.attrs)yield this.obj.model.properties[this.prefix+t]}update(){}}o.VisualUniforms\u003dp,p.__name__\u003d\"VisualUniforms\"},\n      function _(e,l,t,a,c){a();const r\u003de(1),o\u003dr.__importStar(e(18)),n\u003de(20),i\u003dr.__importStar(e(21)),_\u003de(13);t.Line\u003d{line_color:[i.Nullable(i.Color),\"black\"],line_alpha:[i.Alpha,1],line_width:[i.Number,1],line_join:[n.LineJoin,\"bevel\"],line_cap:[n.LineCap,\"butt\"],line_dash:[i.Or(n.LineDash,i.Array(i.Number)),[]],line_dash_offset:[i.Number,0]},t.Fill\u003d{fill_color:[i.Nullable(i.Color),\"gray\"],fill_alpha:[i.Alpha,1]},t.Hatch\u003d{hatch_color:[i.Nullable(i.Color),\"black\"],hatch_alpha:[i.Alpha,1],hatch_scale:[i.Number,12],hatch_pattern:[i.Nullable(i.Or(n.HatchPatternType,i.String)),null],hatch_weight:[i.Number,1],hatch_extra:[i.Dict(i.AnyRef()),{}]},t.Text\u003d{text_color:[i.Nullable(i.Color),\"#444444\"],text_alpha:[i.Alpha,1],text_font:[o.Font,\"helvetica\"],text_font_size:[i.FontSize,\"16px\"],text_font_style:[n.FontStyle,\"normal\"],text_align:[n.TextAlign,\"left\"],text_baseline:[n.TextBaseline,\"bottom\"],text_line_height:[i.Number,1.2]},t.LineScalar\u003d{line_color:[o.ColorScalar,\"black\"],line_alpha:[o.NumberScalar,1],line_width:[o.NumberScalar,1],line_join:[o.LineJoinScalar,\"bevel\"],line_cap:[o.LineCapScalar,\"butt\"],line_dash:[o.LineDashScalar,[]],line_dash_offset:[o.NumberScalar,0]},t.FillScalar\u003d{fill_color:[o.ColorScalar,\"gray\"],fill_alpha:[o.NumberScalar,1]},t.HatchScalar\u003d{hatch_color:[o.ColorScalar,\"black\"],hatch_alpha:[o.NumberScalar,1],hatch_scale:[o.NumberScalar,12],hatch_pattern:[o.NullStringScalar,null],hatch_weight:[o.NumberScalar,1],hatch_extra:[o.AnyScalar,{}]},t.TextScalar\u003d{text_color:[o.ColorScalar,\"#444444\"],text_alpha:[o.NumberScalar,1],text_font:[o.FontScalar,\"helvetica\"],text_font_size:[o.FontSizeScalar,\"16px\"],text_font_style:[o.FontStyleScalar,\"normal\"],text_align:[o.TextAlignScalar,\"left\"],text_baseline:[o.TextBaselineScalar,\"bottom\"],text_line_height:[o.NumberScalar,1.2]},t.LineVector\u003d{line_color:[o.ColorSpec,\"black\"],line_alpha:[o.NumberSpec,1],line_width:[o.NumberSpec,1],line_join:[o.LineJoinSpec,\"bevel\"],line_cap:[o.LineCapSpec,\"butt\"],line_dash:[o.LineDashSpec,[]],line_dash_offset:[o.NumberSpec,0]},t.FillVector\u003d{fill_color:[o.ColorSpec,\"gray\"],fill_alpha:[o.NumberSpec,1]},t.HatchVector\u003d{hatch_color:[o.ColorSpec,\"black\"],hatch_alpha:[o.NumberSpec,1],hatch_scale:[o.NumberSpec,12],hatch_pattern:[o.NullStringSpec,null],hatch_weight:[o.NumberSpec,1],hatch_extra:[o.AnyScalar,{}]},t.TextVector\u003d{text_color:[o.ColorSpec,\"#444444\"],text_alpha:[o.NumberSpec,1],text_font:[o.FontSpec,\"helvetica\"],text_font_size:[o.FontSizeSpec,\"16px\"],text_font_style:[o.FontStyleSpec,\"normal\"],text_align:[o.TextAlignSpec,\"left\"],text_baseline:[o.TextBaselineSpec,\"bottom\"],text_line_height:[o.NumberSpec,1.2]},t.attrs_of\u003dfunction(e,l,t,a\u003d!1){const c\u003d{};for(const r of _.keys(t)){const t\u003d`${l}${r}`,o\u003de[t];c[a?t:r]\u003do}return c}},\n      function _(l,t,e,i,s){i();const o\u003dl(1),a\u003dl(47),r\u003do.__importStar(l(48)),c\u003dl(22);class _ extends a.VisualProperties{get doit(){const l\u003dthis.fill_color.get_value(),t\u003dthis.fill_alpha.get_value();return!(null\u003d\u003dl||0\u003d\u003dt)}set_value(l){const t\u003dthis.fill_color.get_value(),e\u003dthis.fill_alpha.get_value();l.fillStyle\u003dc.color2css(t,e)}}e.Fill\u003d_,_.__name__\u003d\"Fill\";class n extends a.VisualUniforms{get doit(){const l\u003dthis.fill_color.value,t\u003dthis.fill_alpha.value;return!(0\u003d\u003dl||0\u003d\u003dt)}set_value(l){const t\u003dthis.fill_color.value,e\u003dthis.fill_alpha.value;l.fillStyle\u003dc.color2css(t,e)}}e.FillScalar\u003dn,n.__name__\u003d\"FillScalar\";class p extends a.VisualUniforms{get doit(){const{fill_color:l}\u003dthis;if(l.is_Scalar()\u0026\u00260\u003d\u003dl.value)return!1;const{fill_alpha:t}\u003dthis;return!t.is_Scalar()||0!\u003dt.value}set_vectorize(l,t){const e\u003dthis.fill_color.get(t),i\u003dthis.fill_alpha.get(t);l.fillStyle\u003dc.color2css(e,i)}}e.FillVector\u003dp,p.__name__\u003d\"FillVector\",_.prototype.type\u003d\"fill\",_.prototype.attrs\u003dObject.keys(r.Fill),n.prototype.type\u003d\"fill\",n.prototype.attrs\u003dObject.keys(r.FillScalar),p.prototype.type\u003d\"fill\",p.prototype.attrs\u003dObject.keys(r.FillVector)},\n      function _(t,e,s,l,a){l();const o\u003dt(1),_\u003dt(47),i\u003do.__importStar(t(48)),n\u003dt(22);class x extends _.VisualProperties{get doit(){const t\u003dthis.text_color.get_value(),e\u003dthis.text_alpha.get_value();return!(null\u003d\u003dt||0\u003d\u003de)}set_value(t){const e\u003dthis.text_color.get_value(),s\u003dthis.text_alpha.get_value();t.fillStyle\u003dn.color2css(e,s),t.font\u003dthis.font_value(),t.textAlign\u003dthis.text_align.get_value(),t.textBaseline\u003dthis.text_baseline.get_value()}font_value(){return`${this.text_font_style.get_value()} ${this.text_font_size.get_value()} ${this.text_font.get_value()}`}}s.Text\u003dx,x.__name__\u003d\"Text\";class r extends _.VisualUniforms{get doit(){const t\u003dthis.text_color.value,e\u003dthis.text_alpha.value;return!(0\u003d\u003dt||0\u003d\u003de)}set_value(t){const e\u003dthis.text_color.value,s\u003dthis.text_alpha.value,l\u003dthis.font_value(),a\u003dthis.text_align.value,o\u003dthis.text_baseline.value;t.fillStyle\u003dn.color2css(e,s),t.font\u003dl,t.textAlign\u003da,t.textBaseline\u003do}font_value(){return`${this.text_font_style.value} ${this.text_font_size.value} ${this.text_font.value}`}}s.TextScalar\u003dr,r.__name__\u003d\"TextScalar\";class u extends _.VisualUniforms{get doit(){const{text_color:t}\u003dthis;if(t.is_Scalar()\u0026\u00260\u003d\u003dt.value)return!1;const{text_alpha:e}\u003dthis;return!e.is_Scalar()||0!\u003de.value}set_vectorize(t,e){const s\u003dthis.text_color.get(e),l\u003dthis.text_alpha.get(e),a\u003dthis.font_value(e),o\u003dthis.text_align.get(e),_\u003dthis.text_baseline.get(e);t.fillStyle\u003dn.color2css(s,l),t.font\u003da,t.textAlign\u003do,t.textBaseline\u003d_}font_value(t){return`${this.text_font_style.get(t)} ${this.text_font_size.get(t)} ${this.text_font.get(t)}`}}s.TextVector\u003du,u.__name__\u003d\"TextVector\",x.prototype.type\u003d\"text\",x.prototype.attrs\u003dObject.keys(i.Text),r.prototype.type\u003d\"text\",r.prototype.attrs\u003dObject.keys(i.TextScalar),u.prototype.type\u003d\"text\",u.prototype.attrs\u003dObject.keys(i.TextVector)},\n      function _(t,e,a,h,r){h();const i\u003dt(1),s\u003dt(47),c\u003dt(52),n\u003di.__importStar(t(18)),_\u003di.__importStar(t(48));class l extends s.VisualProperties{constructor(){super(...arguments),this._update_iteration\u003d0}update(){if(this._update_iteration++,this._hatch_image\u003dnull,!this.doit)return;const t\u003dthis.hatch_color.get_value(),e\u003dthis.hatch_alpha.get_value(),a\u003dthis.hatch_scale.get_value(),h\u003dthis.hatch_pattern.get_value(),r\u003dthis.hatch_weight.get_value(),i\u003dt\u003d\u003e{this._hatch_image\u003dt},s\u003dthis.hatch_extra.get_value()[h];if(null!\u003ds){const h\u003ds.get_pattern(t,e,a,r);if(h instanceof Promise){const{_update_iteration:t}\u003dthis;h.then((e\u003d\u003e{this._update_iteration\u003d\u003dt\u0026\u0026(i(e),this.obj.request_render())}))}else i(h)}else{const s\u003dthis.obj.canvas.create_layer(),n\u003dc.get_pattern(s,h,t,e,a,r);i(n)}}get doit(){const t\u003dthis.hatch_color.get_value(),e\u003dthis.hatch_alpha.get_value(),a\u003dthis.hatch_pattern.get_value();return!(null\u003d\u003dt||0\u003d\u003de||\" \"\u003d\u003da||\"blank\"\u003d\u003da||null\u003d\u003da)}set_value(t){const e\u003dthis.pattern(t);t.fillStyle\u003dnull!\u003de?e:\"transparent\"}pattern(t){const e\u003dthis._hatch_image;return null\u003d\u003de?null:t.createPattern(e,this.repetition())}repetition(){const t\u003dthis.hatch_pattern.get_value(),e\u003dthis.hatch_extra.get_value()[t];if(null\u003d\u003de)return\"repeat\";switch(e.repetition){case\"repeat\":return\"repeat\";case\"repeat_x\":return\"repeat-x\";case\"repeat_y\":return\"repeat-y\";case\"no_repeat\":return\"no-repeat\"}}}a.Hatch\u003dl,l.__name__\u003d\"Hatch\";class o extends s.VisualUniforms{constructor(){super(...arguments),this._static_doit\u003d!1,this._update_iteration\u003d0}_compute_static_doit(){const t\u003dthis.hatch_color.value,e\u003dthis.hatch_alpha.value,a\u003dthis.hatch_pattern.value;return!(null\u003d\u003dt||0\u003d\u003de||\" \"\u003d\u003da||\"blank\"\u003d\u003da||null\u003d\u003da)}update(){this._update_iteration++;const t\u003dthis.hatch_color.length;if(this._hatch_image\u003dnew n.UniformScalar(null,t),this._static_doit\u003dthis._compute_static_doit(),!this._static_doit)return;const e\u003dthis.hatch_color.value,a\u003dthis.hatch_alpha.value,h\u003dthis.hatch_scale.value,r\u003dthis.hatch_pattern.value,i\u003dthis.hatch_weight.value,s\u003de\u003d\u003e{this._hatch_image\u003dnew n.UniformScalar(e,t)},_\u003dthis.hatch_extra.value[r];if(null!\u003d_){const t\u003d_.get_pattern(e,a,h,i);if(t instanceof Promise){const{_update_iteration:e}\u003dthis;t.then((t\u003d\u003e{this._update_iteration\u003d\u003de\u0026\u0026(s(t),this.obj.request_render())}))}else s(t)}else{const t\u003dthis.obj.canvas.create_layer(),n\u003dc.get_pattern(t,r,e,a,h,i);s(n)}}get doit(){return this._static_doit}set_value(t){var e;t.fillStyle\u003dnull!\u003d\u003d(e\u003dthis.pattern(t))\u0026\u0026void 0!\u003d\u003de?e:\"transparent\"}pattern(t){const e\u003dthis._hatch_image.value;return null\u003d\u003de?null:t.createPattern(e,this.repetition())}repetition(){const t\u003dthis.hatch_pattern.value,e\u003dthis.hatch_extra.value[t];if(null\u003d\u003de)return\"repeat\";switch(e.repetition){case\"repeat\":return\"repeat\";case\"repeat_x\":return\"repeat-x\";case\"repeat_y\":return\"repeat-y\";case\"no_repeat\":return\"no-repeat\"}}}a.HatchScalar\u003do,o.__name__\u003d\"HatchScalar\";class u extends s.VisualUniforms{constructor(){super(...arguments),this._static_doit\u003d!1,this._update_iteration\u003d0}_compute_static_doit(){const{hatch_color:t}\u003dthis;if(t.is_Scalar()\u0026\u00260\u003d\u003dt.value)return!1;const{hatch_alpha:e}\u003dthis;if(e.is_Scalar()\u0026\u00260\u003d\u003de.value)return!1;const{hatch_pattern:a}\u003dthis;if(a.is_Scalar()){const t\u003da.value;if(\" \"\u003d\u003dt||\"blank\"\u003d\u003dt||null\u003d\u003dt)return!1}return!0}update(){this._update_iteration++;const t\u003dthis.hatch_color.length;if(this._hatch_image\u003dnew n.UniformScalar(null,t),this._static_doit\u003dthis._compute_static_doit(),!this._static_doit)return;const e\u003d(t,e,a,h,r,i)\u003d\u003e{const s\u003dthis.hatch_extra.value[t];if(null!\u003ds){const t\u003ds.get_pattern(e,a,h,r);if(t instanceof Promise){const{_update_iteration:e}\u003dthis;t.then((t\u003d\u003e{this._update_iteration\u003d\u003de\u0026\u0026(i(t),this.obj.request_render())}))}else i(t)}else{const s\u003dthis.obj.canvas.create_layer(),n\u003dc.get_pattern(s,t,e,a,h,r);i(n)}};if(this.hatch_color.is_Scalar()\u0026\u0026this.hatch_alpha.is_Scalar()\u0026\u0026this.hatch_scale.is_Scalar()\u0026\u0026this.hatch_pattern.is_Scalar()\u0026\u0026this.hatch_weight.is_Scalar()){const a\u003dthis.hatch_color.value,h\u003dthis.hatch_alpha.value,r\u003dthis.hatch_scale.value;e(this.hatch_pattern.value,a,h,r,this.hatch_weight.value,(e\u003d\u003e{this._hatch_image\u003dnew n.UniformScalar(e,t)}))}else{const a\u003dnew Array(t);a.fill(null),this._hatch_image\u003dnew n.UniformVector(a);for(let h\u003d0;h\u003ct;h++){const t\u003dthis.hatch_color.get(h),r\u003dthis.hatch_alpha.get(h),i\u003dthis.hatch_scale.get(h);e(this.hatch_pattern.get(h),t,r,i,this.hatch_weight.get(h),(t\u003d\u003e{a[h]\u003dt}))}}}get doit(){return this._static_doit}set_vectorize(t,e){var a;t.fillStyle\u003dnull!\u003d\u003d(a\u003dthis.pattern(t,e))\u0026\u0026void 0!\u003d\u003da?a:\"transparent\"}pattern(t,e){const a\u003dthis._hatch_image.get(e);return null\u003d\u003da?null:t.createPattern(a,this.repetition(e))}repetition(t){const e\u003dthis.hatch_pattern.get(t),a\u003dthis.hatch_extra.value[e];if(null\u003d\u003da)return\"repeat\";switch(a.repetition){case\"repeat\":return\"repeat\";case\"repeat_x\":return\"repeat-x\";case\"repeat_y\":return\"repeat-y\";case\"no_repeat\":return\"no-repeat\"}}}a.HatchVector\u003du,u.__name__\u003d\"HatchVector\",l.prototype.type\u003d\"hatch\",l.prototype.attrs\u003dObject.keys(_.Hatch),o.prototype.type\u003d\"hatch\",o.prototype.attrs\u003dObject.keys(_.HatchScalar),u.prototype.type\u003d\"hatch\",u.prototype.attrs\u003dObject.keys(_.HatchVector)},\n      function _(e,o,a,s,r){s();const i\u003de(22);function l(e,o,a){e.moveTo(0,a+.5),e.lineTo(o,a+.5),e.stroke()}function n(e,o,a){e.moveTo(a+.5,0),e.lineTo(a+.5,o),e.stroke()}function t(e,o){e.moveTo(0,o),e.lineTo(o,0),e.stroke(),e.moveTo(0,0),e.lineTo(o,o),e.stroke()}a.hatch_aliases\u003d{\" \":\"blank\",\".\":\"dot\",o:\"ring\",\"-\":\"horizontal_line\",\"|\":\"vertical_line\",\"+\":\"cross\",\u0027\"\u0027:\"horizontal_dash\",\":\":\"vertical_dash\",\"@\":\"spiral\",\"/\":\"right_diagonal_line\",\"\\\\\":\"left_diagonal_line\",x:\"diagonal_cross\",\",\":\"right_diagonal_dash\",\"`\":\"left_diagonal_dash\",v:\"horizontal_wave\",\"\u003e\":\"vertical_wave\",\"*\":\"criss_cross\"},a.get_pattern\u003dfunction(e,o,s,r,c,k){return e.resize(c,c),e.prepare(),function(e,o,s,r,c,k){var _;const T\u003dc,v\u003dT/2,h\u003dv/2,d\u003di.color2css(s,r);switch(e.strokeStyle\u003dd,e.fillStyle\u003dd,e.lineCap\u003d\"square\",e.lineWidth\u003dk,null!\u003d\u003d(_\u003da.hatch_aliases[o])\u0026\u0026void 0!\u003d\u003d_?_:o){case\"blank\":break;case\"dot\":e.arc(v,v,v/2,0,2*Math.PI,!0),e.fill();break;case\"ring\":e.arc(v,v,v/2,0,2*Math.PI,!0),e.stroke();break;case\"horizontal_line\":l(e,T,v);break;case\"vertical_line\":n(e,T,v);break;case\"cross\":l(e,T,v),n(e,T,v);break;case\"horizontal_dash\":l(e,v,v);break;case\"vertical_dash\":n(e,v,v);break;case\"spiral\":{const o\u003dT/30;e.moveTo(v,v);for(let a\u003d0;a\u003c360;a++){const s\u003d.1*a,r\u003dv+o*s*Math.cos(s),i\u003dv+o*s*Math.sin(s);e.lineTo(r,i)}e.stroke();break}case\"right_diagonal_line\":e.moveTo(.5-h,T),e.lineTo(h+.5,0),e.stroke(),e.moveTo(h+.5,T),e.lineTo(3*h+.5,0),e.stroke(),e.moveTo(3*h+.5,T),e.lineTo(5*h+.5,0),e.stroke(),e.stroke();break;case\"left_diagonal_line\":e.moveTo(h+.5,T),e.lineTo(.5-h,0),e.stroke(),e.moveTo(3*h+.5,T),e.lineTo(h+.5,0),e.stroke(),e.moveTo(5*h+.5,T),e.lineTo(3*h+.5,0),e.stroke(),e.stroke();break;case\"diagonal_cross\":t(e,T);break;case\"right_diagonal_dash\":e.moveTo(h+.5,3*h+.5),e.lineTo(3*h+.5,h+.5),e.stroke();break;case\"left_diagonal_dash\":e.moveTo(h+.5,h+.5),e.lineTo(3*h+.5,3*h+.5),e.stroke();break;case\"horizontal_wave\":e.moveTo(0,h),e.lineTo(v,3*h),e.lineTo(T,h),e.stroke();break;case\"vertical_wave\":e.moveTo(h,0),e.lineTo(3*h,v),e.lineTo(h,T),e.stroke();break;case\"criss_cross\":t(e,T),l(e,T,v),n(e,T,v)}}(e.ctx,o,s,r,c,k),e.canvas}},\n      function _(e,t,s,n,c){n();const a\u003de(14),i\u003de(8),r\u003de(13),l\u003de(19);class o extends a.HasProps{constructor(e){super(e)}get is_syncable(){return this.syncable}static init_Model(){this.define((({Any:e,Unknown:t,Boolean:s,String:n,Array:c,Dict:a,Nullable:i})\u003d\u003e({tags:[c(t),[]],name:[i(n),null],js_property_callbacks:[a(c(e)),{}],js_event_callbacks:[a(c(e)),{}],subscribed_events:[c(n),[]],syncable:[s,!0]})))}initialize(){super.initialize(),this._js_callbacks\u003dnew Map}connect_signals(){super.connect_signals(),this._update_property_callbacks(),this.connect(this.properties.js_property_callbacks.change,(()\u003d\u003ethis._update_property_callbacks())),this.connect(this.properties.js_event_callbacks.change,(()\u003d\u003ethis._update_event_callbacks())),this.connect(this.properties.subscribed_events.change,(()\u003d\u003ethis._update_event_callbacks()))}_process_event(e){var t;for(const s of null!\u003d\u003d(t\u003dthis.js_event_callbacks[e.event_name])\u0026\u0026void 0!\u003d\u003dt?t:[])s.execute(e);null!\u003dthis.document\u0026\u0026this.subscribed_events.some((t\u003d\u003et\u003d\u003de.event_name))\u0026\u0026this.document.event_manager.send_event(e)}trigger_event(e){null!\u003dthis.document\u0026\u0026(e.origin\u003dthis,this.document.event_manager.trigger(e))}_update_event_callbacks(){null!\u003dthis.document?this.document.event_manager.subscribed_models.add(this):l.logger.warn(\"WARNING: Document not defined for updating event callbacks\")}_update_property_callbacks(){const e\u003de\u003d\u003e{const[t,s\u003dnull]\u003de.split(\":\");return null!\u003ds?this.properties[s][t]:this[t]};for(const[t,s]of this._js_callbacks){const n\u003de(t);for(const e of s)this.disconnect(n,e)}this._js_callbacks.clear();for(const[t,s]of r.entries(this.js_property_callbacks)){const n\u003ds.map((e\u003d\u003e()\u003d\u003ee.execute(this)));this._js_callbacks.set(t,n);const c\u003de(t);for(const e of n)this.connect(c,e)}}_doc_attached(){r.isEmpty(this.js_event_callbacks)\u0026\u00260\u003d\u003dthis.subscribed_events.length||this._update_event_callbacks()}_doc_detached(){this.document.event_manager.subscribed_models.delete(this)}select(e){if(i.isString(e))return[...this.references()].filter((t\u003d\u003et instanceof o\u0026\u0026t.name\u003d\u003d\u003de));if(e.prototype instanceof a.HasProps)return[...this.references()].filter((t\u003d\u003et instanceof e));throw new Error(\"invalid selector\")}select_one(e){const t\u003dthis.select(e);switch(t.length){case 0:return null;case 1:return t[0];default:throw new Error(\"found more than one object matching given selector\")}}}s.Model\u003do,o.__name__\u003d\"Model\",o.init_Model()},\n      function _(s,e,_,t,a){t();class r{constructor(s,e){this.x_scale\u003ds,this.y_scale\u003de,this.x_range\u003dthis.x_scale.source_range,this.y_range\u003dthis.y_scale.source_range,this.ranges\u003d[this.x_range,this.y_range],this.scales\u003d[this.x_scale,this.y_scale]}map_to_screen(s,e){return[this.x_scale.v_compute(s),this.y_scale.v_compute(e)]}map_from_screen(s,e){return[this.x_scale.v_invert(s),this.y_scale.v_invert(e)]}}_.CoordinateTransform\u003dr,r.__name__\u003d\"CoordinateTransform\"},\n      function _(t,e,s,a,i){a();const n\u003dt(1),_\u003dt(56),r\u003dt(133),o\u003dt(48),l\u003dt(20),d\u003dt(24),h\u003dt(122),c\u003dn.__importStar(t(18)),u\u003dt(10);class v extends _.DataAnnotationView{async lazy_initialize(){await super.lazy_initialize();const{start:t,end:e}\u003dthis.model;null!\u003dt\u0026\u0026(this.start\u003dawait h.build_view(t,{parent:this})),null!\u003de\u0026\u0026(this.end\u003dawait h.build_view(e,{parent:this}))}set_data(t){var e,s;super.set_data(t),null\u003d\u003d\u003d(e\u003dthis.start)||void 0\u003d\u003d\u003de||e.set_data(t),null\u003d\u003d\u003d(s\u003dthis.end)||void 0\u003d\u003d\u003ds||s.set_data(t)}remove(){var t,e;null\u003d\u003d\u003d(t\u003dthis.start)||void 0\u003d\u003d\u003dt||t.remove(),null\u003d\u003d\u003d(e\u003dthis.end)||void 0\u003d\u003d\u003de||e.remove(),super.remove()}map_data(){const{frame:t}\u003dthis.plot_view;\"data\"\u003d\u003dthis.model.start_units?(this._sx_start\u003dthis.coordinates.x_scale.v_compute(this._x_start),this._sy_start\u003dthis.coordinates.y_scale.v_compute(this._y_start)):(this._sx_start\u003dt.bbox.xview.v_compute(this._x_start),this._sy_start\u003dt.bbox.yview.v_compute(this._y_start)),\"data\"\u003d\u003dthis.model.end_units?(this._sx_end\u003dthis.coordinates.x_scale.v_compute(this._x_end),this._sy_end\u003dthis.coordinates.y_scale.v_compute(this._y_end)):(this._sx_end\u003dt.bbox.xview.v_compute(this._x_end),this._sy_end\u003dt.bbox.yview.v_compute(this._y_end));const{_sx_start:e,_sy_start:s,_sx_end:a,_sy_end:i}\u003dthis,n\u003de.length,_\u003dthis._angles\u003dnew d.ScreenArray(n);for(let t\u003d0;t\u003cn;t++)_[t]\u003dMath.PI/2+u.atan2([e[t],s[t]],[a[t],i[t]])}paint(t){const{start:e,end:s}\u003dthis,{_sx_start:a,_sy_start:i,_sx_end:n,_sy_end:_,_angles:r}\u003dthis,{x:o,y:l,width:d,height:h}\u003dthis.plot_view.frame.bbox;for(let c\u003d0,u\u003da.length;c\u003cu;c++)null!\u003ds\u0026\u0026(t.save(),t.translate(n[c],_[c]),t.rotate(r[c]),s.render(t,c),t.restore()),null!\u003de\u0026\u0026(t.save(),t.translate(a[c],i[c]),t.rotate(r[c]+Math.PI),e.render(t,c),t.restore()),this.visuals.line.doit\u0026\u0026(t.save(),null\u003d\u003de\u0026\u0026null\u003d\u003ds||(t.beginPath(),t.rect(o,l,d,h),null!\u003ds\u0026\u0026(t.save(),t.translate(n[c],_[c]),t.rotate(r[c]),s.clip(t,c),t.restore()),null!\u003de\u0026\u0026(t.save(),t.translate(a[c],i[c]),t.rotate(r[c]+Math.PI),e.clip(t,c),t.restore()),t.closePath(),t.clip()),this.visuals.line.set_vectorize(t,c),t.beginPath(),t.moveTo(a[c],i[c]),t.lineTo(n[c],_[c]),t.stroke(),t.restore())}}s.ArrowView\u003dv,v.__name__\u003d\"ArrowView\";class p extends _.DataAnnotation{constructor(t){super(t)}static init_Arrow(){this.prototype.default_view\u003dv,this.mixins(o.LineVector),this.define((({Ref:t,Nullable:e})\u003d\u003e({x_start:[c.XCoordinateSpec,{field:\"x_start\"}],y_start:[c.YCoordinateSpec,{field:\"y_start\"}],start_units:[l.SpatialUnits,\"data\"],start:[e(t(r.ArrowHead)),null],x_end:[c.XCoordinateSpec,{field:\"x_end\"}],y_end:[c.YCoordinateSpec,{field:\"y_end\"}],end_units:[l.SpatialUnits,\"data\"],end:[e(t(r.ArrowHead)),()\u003d\u003enew r.OpenHead]})))}}s.Arrow\u003dp,p.__name__\u003d\"Arrow\",p.init_Arrow()},\n      function _(t,n,s,a,e){a();const i\u003dt(1),o\u003dt(40),c\u003dt(57),_\u003dt(130),r\u003dt(65),l\u003di.__importStar(t(18));class h extends o.AnnotationView{constructor(){super(...arguments),this._initial_set_data\u003d!1}connect_signals(){super.connect_signals();const t\u003d()\u003d\u003e{this.set_data(this.model.source),this.request_render()};this.connect(this.model.change,t),this.connect(this.model.source.streaming,t),this.connect(this.model.source.patching,t),this.connect(this.model.source.change,t)}set_data(t){const n\u003dthis;for(const s of this.model)if(s instanceof l.VectorSpec||s instanceof l.ScalarSpec)if(s instanceof l.BaseCoordinateSpec){const a\u003ds.array(t);n[`_${s.attr}`]\u003da}else{const a\u003ds.uniform(t);n[`${s.attr}`]\u003da}this.plot_model.use_map\u0026\u0026(null!\u003dn._x\u0026\u0026r.inplace.project_xy(n._x,n._y),null!\u003dn._xs\u0026\u0026r.inplace.project_xsys(n._xs,n._ys));for(const t of this.visuals)t.update()}_render(){this._initial_set_data||(this.set_data(this.model.source),this._initial_set_data\u003d!0),this.map_data(),this.paint(this.layer.ctx)}}s.DataAnnotationView\u003dh,h.__name__\u003d\"DataAnnotationView\";class u extends o.Annotation{constructor(t){super(t)}static init_DataAnnotation(){this.define((({Ref:t})\u003d\u003e({source:[t(c.ColumnarDataSource),()\u003d\u003enew _.ColumnDataSource]})))}}s.DataAnnotation\u003du,u.__name__\u003d\"DataAnnotation\",u.init_DataAnnotation()},\n      function _(t,e,n,a,i){a();const s\u003dt(58),r\u003dt(15),l\u003dt(19),o\u003dt(60),c\u003dt(8),u\u003dt(9),h\u003dt(13),g\u003dt(59),d\u003dt(129),_\u003dt(29);class m extends s.DataSource{constructor(t){super(t)}get_array(t){let e\u003dthis.data[t];return null\u003d\u003de?this.data[t]\u003de\u003d[]:c.isArray(e)||(this.data[t]\u003de\u003dArray.from(e)),e}static init_ColumnarDataSource(){this.define((({Ref:t})\u003d\u003e({selection_policy:[t(d.SelectionPolicy),()\u003d\u003enew d.UnionRenderers]}))),this.internal((({AnyRef:t})\u003d\u003e({selection_manager:[t(),t\u003d\u003enew o.SelectionManager({source:t})],inspected:[t(),()\u003d\u003enew g.Selection]})))}initialize(){super.initialize(),this._select\u003dnew r.Signal0(this,\"select\"),this.inspect\u003dnew r.Signal(this,\"inspect\"),this.streaming\u003dnew r.Signal0(this,\"streaming\"),this.patching\u003dnew r.Signal(this,\"patching\")}get_column(t){const e\u003dthis.data[t];return null!\u003de?e:null}columns(){return h.keys(this.data)}get_length(t\u003d!0){const e\u003du.uniq(h.values(this.data).map((t\u003d\u003e_.is_NDArray(t)?t.shape[0]:t.length)));switch(e.length){case 0:return null;case 1:return e[0];default:{const n\u003d\"data source has columns of inconsistent lengths\";if(t)return l.logger.warn(n),e.sort()[0];throw new Error(n)}}}get length(){var t;return null!\u003d\u003d(t\u003dthis.get_length())\u0026\u0026void 0!\u003d\u003dt?t:0}clear(){const t\u003d{};for(const e of this.columns())t[e]\u003dnew this.data[e].constructor(0);this.data\u003dt}}n.ColumnarDataSource\u003dm,m.__name__\u003d\"ColumnarDataSource\",m.init_ColumnarDataSource()},\n      function _(e,t,c,n,a){n();const o\u003de(53),i\u003de(59);class s extends o.Model{constructor(e){super(e)}static init_DataSource(){this.define((({Ref:e})\u003d\u003e({selected:[e(i.Selection),()\u003d\u003enew i.Selection]})))}}c.DataSource\u003ds,s.__name__\u003d\"DataSource\",s.init_DataSource()},\n      function _(i,e,s,t,n){t();const l\u003di(53),c\u003di(9),h\u003di(13);class d extends l.Model{constructor(i){super(i)}get_view(){return this.view}static init_Selection(){this.define((({Int:i,Array:e,Dict:s})\u003d\u003e({indices:[e(i),[]],line_indices:[e(i),[]],multiline_indices:[s(e(i)),{}]}))),this.internal((({Int:i,Array:e,AnyRef:s,Struct:t,Nullable:n})\u003d\u003e({selected_glyphs:[e(s()),[]],view:[n(s()),null],image_indices:[e(t({index:i,dim1:i,dim2:i,flat_index:i})),[]]})))}get selected_glyph(){return this.selected_glyphs.length\u003e0?this.selected_glyphs[0]:null}add_to_selected_glyphs(i){this.selected_glyphs.push(i)}update(i,e\u003d!0,s\u003d\"replace\"){switch(s){case\"replace\":this.indices\u003di.indices,this.line_indices\u003di.line_indices,this.selected_glyphs\u003di.selected_glyphs,this.view\u003di.view,this.multiline_indices\u003di.multiline_indices,this.image_indices\u003di.image_indices;break;case\"append\":this.update_through_union(i);break;case\"intersect\":this.update_through_intersection(i);break;case\"subtract\":this.update_through_subtraction(i)}}clear(){this.indices\u003d[],this.line_indices\u003d[],this.multiline_indices\u003d{},this.view\u003dnull,this.selected_glyphs\u003d[]}is_empty(){return 0\u003d\u003dthis.indices.length\u0026\u00260\u003d\u003dthis.line_indices.length\u0026\u00260\u003d\u003dthis.image_indices.length}update_through_union(i){this.indices\u003dc.union(this.indices,i.indices),this.selected_glyphs\u003dc.union(i.selected_glyphs,this.selected_glyphs),this.line_indices\u003dc.union(i.line_indices,this.line_indices),this.view\u003di.view,this.multiline_indices\u003dh.merge(i.multiline_indices,this.multiline_indices)}update_through_intersection(i){this.indices\u003dc.intersection(this.indices,i.indices),this.selected_glyphs\u003dc.union(i.selected_glyphs,this.selected_glyphs),this.line_indices\u003dc.union(i.line_indices,this.line_indices),this.view\u003di.view,this.multiline_indices\u003dh.merge(i.multiline_indices,this.multiline_indices)}update_through_subtraction(i){this.indices\u003dc.difference(this.indices,i.indices),this.selected_glyphs\u003dc.union(i.selected_glyphs,this.selected_glyphs),this.line_indices\u003dc.union(i.line_indices,this.line_indices),this.view\u003di.view,this.multiline_indices\u003dh.merge(i.multiline_indices,this.multiline_indices)}}s.Selection\u003dd,d.__name__\u003d\"Selection\",d.init_Selection()},\n      function _(e,t,s,n,i){n();const o\u003de(14),c\u003de(59),r\u003de(61),l\u003de(123);class p extends o.HasProps{constructor(e){super(e),this.inspectors\u003dnew Map}static init_SelectionManager(){this.internal((({AnyRef:e})\u003d\u003e({source:[e()]})))}select(e,t,s,n\u003d\"replace\"){const i\u003d[],o\u003d[];for(const t of e)t instanceof r.GlyphRendererView?i.push(t):t instanceof l.GraphRendererView\u0026\u0026o.push(t);let c\u003d!1;for(const e of o){const i\u003de.model.selection_policy.hit_test(t,e);c\u003dc||e.model.selection_policy.do_selection(i,e.model,s,n)}if(i.length\u003e0){const e\u003dthis.source.selection_policy.hit_test(t,i);c\u003dc||this.source.selection_policy.do_selection(e,this.source,s,n)}return c}inspect(e,t){let s\u003d!1;if(e instanceof r.GlyphRendererView){const n\u003de.hit_test(t);if(null!\u003dn){s\u003d!n.is_empty();const i\u003dthis.get_or_create_inspector(e.model);i.update(n,!0,\"replace\"),this.source.setv({inspected:i},{silent:!0}),this.source.inspect.emit([e.model,{geometry:t}])}}else if(e instanceof l.GraphRendererView){const n\u003de.model.inspection_policy.hit_test(t,e);s\u003ds||e.model.inspection_policy.do_inspection(n,t,e,!1,\"replace\")}return s}clear(e){this.source.selected.clear(),null!\u003de\u0026\u0026this.get_or_create_inspector(e.model).clear()}get_or_create_inspector(e){let t\u003dthis.inspectors.get(e);return null\u003d\u003dt\u0026\u0026(t\u003dnew c.Selection,this.inspectors.set(e,t)),t}}s.SelectionManager\u003dp,p.__name__\u003d\"SelectionManager\",p.init_SelectionManager()},\n      function _(e,t,i,s,l){s();const h\u003de(62),n\u003de(63),o\u003de(116),a\u003de(117),c\u003de(119),d\u003de(98),_\u003de(57),r\u003de(120),p\u003de(24),g\u003de(12),u\u003de(9),y\u003de(13),m\u003de(122),v\u003de(104),f\u003d{fill:{},line:{}},w\u003d{fill:{fill_alpha:.3,fill_color:\"grey\"},line:{line_alpha:.3,line_color:\"grey\"}},b\u003d{fill:{fill_alpha:.2},line:{}};class V extends h.DataRendererView{get glyph_view(){return this.glyph}async lazy_initialize(){var e,t;await super.lazy_initialize();const i\u003dthis.model.glyph;this.glyph\u003dawait this.build_glyph_view(i);const s\u003d\"fill\"in this.glyph.visuals,l\u003d\"line\"in this.glyph.visuals,h\u003dObject.assign({},i.attributes);function n(e){const t\u003dy.clone(h);return s\u0026\u0026y.extend(t,e.fill),l\u0026\u0026y.extend(t,e.line),new i.constructor(t)}delete h.id;let{selection_glyph:o}\u003dthis.model;null\u003d\u003do?o\u003dn({fill:{},line:{}}):\"auto\"\u003d\u003do\u0026\u0026(o\u003dn(f)),this.selection_glyph\u003dawait this.build_glyph_view(o);let{nonselection_glyph:a}\u003dthis.model;null\u003d\u003da?a\u003dn({fill:{},line:{}}):\"auto\"\u003d\u003da\u0026\u0026(a\u003dn(b)),this.nonselection_glyph\u003dawait this.build_glyph_view(a);const{hover_glyph:c}\u003dthis.model;null!\u003dc\u0026\u0026(this.hover_glyph\u003dawait this.build_glyph_view(c));const{muted_glyph:d}\u003dthis.model;null!\u003dd\u0026\u0026(this.muted_glyph\u003dawait this.build_glyph_view(d));const _\u003dn(w);this.decimated_glyph\u003dawait this.build_glyph_view(_),this.selection_glyph.set_base(this.glyph),this.nonselection_glyph.set_base(this.glyph),null\u003d\u003d\u003d(e\u003dthis.hover_glyph)||void 0\u003d\u003d\u003de||e.set_base(this.glyph),null\u003d\u003d\u003d(t\u003dthis.muted_glyph)||void 0\u003d\u003d\u003dt||t.set_base(this.glyph),this.decimated_glyph.set_base(this.glyph),this.set_data()}async build_glyph_view(e){return m.build_view(e,{parent:this})}remove(){var e,t;this.glyph.remove(),this.selection_glyph.remove(),this.nonselection_glyph.remove(),null\u003d\u003d\u003d(e\u003dthis.hover_glyph)||void 0\u003d\u003d\u003de||e.remove(),null\u003d\u003d\u003d(t\u003dthis.muted_glyph)||void 0\u003d\u003d\u003dt||t.remove(),this.decimated_glyph.remove(),super.remove()}connect_signals(){super.connect_signals();const e\u003d()\u003d\u003ethis.request_render(),t\u003d()\u003d\u003ethis.update_data();this.connect(this.model.change,e),this.connect(this.glyph.model.change,t),this.connect(this.selection_glyph.model.change,t),this.connect(this.nonselection_glyph.model.change,t),null!\u003dthis.hover_glyph\u0026\u0026this.connect(this.hover_glyph.model.change,t),null!\u003dthis.muted_glyph\u0026\u0026this.connect(this.muted_glyph.model.change,t),this.connect(this.decimated_glyph.model.change,t),this.connect(this.model.data_source.change,t),this.connect(this.model.data_source.streaming,t),this.connect(this.model.data_source.patching,(e\u003d\u003ethis.update_data(e))),this.connect(this.model.data_source.selected.change,e),this.connect(this.model.data_source._select,e),null!\u003dthis.hover_glyph\u0026\u0026this.connect(this.model.data_source.inspect,e),this.connect(this.model.properties.view.change,t),this.connect(this.model.view.properties.indices.change,t),this.connect(this.model.view.properties.masked.change,(()\u003d\u003ethis.set_visuals())),this.connect(this.model.properties.visible.change,(()\u003d\u003ethis.plot_view.invalidate_dataranges\u003d!0));const{x_ranges:i,y_ranges:s}\u003dthis.plot_view.frame;for(const[,e]of i)e instanceof v.FactorRange\u0026\u0026this.connect(e.change,t);for(const[,e]of s)e instanceof v.FactorRange\u0026\u0026this.connect(e.change,t);const{transformchange:l,exprchange:h}\u003dthis.model.glyph;this.connect(l,t),this.connect(h,t)}_update_masked_indices(){const e\u003dthis.glyph.mask_data();return this.model.view.masked\u003de,e}update_data(e){this.set_data(e),this.request_render()}set_data(e){const t\u003dthis.model.data_source;this.all_indices\u003dthis.model.view.indices;const{all_indices:i}\u003dthis;this.glyph.set_data(t,i,e),this.set_visuals(),this._update_masked_indices();const{lod_factor:s}\u003dthis.plot_model,l\u003dthis.all_indices.count;this.decimated\u003dnew p.Indices(l);for(let e\u003d0;e\u003cl;e+\u003ds)this.decimated.set(e);this.plot_view.invalidate_dataranges\u003d!0}set_visuals(){var e,t,i,s;const l\u003dthis.model.data_source,{all_indices:h}\u003dthis;this.glyph.set_visuals(l,h),this.decimated_glyph.set_visuals(l,h),null\u003d\u003d\u003d(e\u003dthis.selection_glyph)||void 0\u003d\u003d\u003de||e.set_visuals(l,h),null\u003d\u003d\u003d(t\u003dthis.nonselection_glyph)||void 0\u003d\u003d\u003dt||t.set_visuals(l,h),null\u003d\u003d\u003d(i\u003dthis.hover_glyph)||void 0\u003d\u003d\u003di||i.set_visuals(l,h),null\u003d\u003d\u003d(s\u003dthis.muted_glyph)||void 0\u003d\u003d\u003ds||s.set_visuals(l,h)}get has_webgl(){return this.glyph.has_webgl}_render(){const e\u003dthis.has_webgl;this.glyph.map_data();const t\u003d[...this.all_indices];let i\u003d[...this._update_masked_indices()];const{ctx:s}\u003dthis.layer;s.save();const{selected:l}\u003dthis.model.data_source;let h;h\u003d!l||l.is_empty()?[]:this.glyph instanceof n.LineView\u0026\u0026l.selected_glyph\u003d\u003d\u003dthis.glyph.model?this.model.view.convert_indices_from_subset(i):l.indices;const{inspected:d}\u003dthis.model.data_source,_\u003dnew Set((()\u003d\u003e!d||d.is_empty()?[]:d.selected_glyph?this.model.view.convert_indices_from_subset(i):d.indices.length\u003e0?d.indices:Object.keys(d.multiline_indices).map((e\u003d\u003eparseInt(e))))()),r\u003dg.filter(i,(e\u003d\u003e_.has(t[e]))),{lod_threshold:p}\u003dthis.plot_model;let y,m,v;if(null!\u003dthis.model.document\u0026\u0026this.model.document.interactive_duration()\u003e0\u0026\u0026!e\u0026\u0026null!\u003dp\u0026\u0026t.length\u003ep?(i\u003d[...this.decimated],y\u003dthis.decimated_glyph,m\u003dthis.decimated_glyph,v\u003dthis.selection_glyph):(y\u003dthis.model.muted\u0026\u0026null!\u003dthis.muted_glyph?this.muted_glyph:this.glyph,m\u003dthis.nonselection_glyph,v\u003dthis.selection_glyph),null!\u003dthis.hover_glyph\u0026\u0026r.length\u0026\u0026(i\u003du.difference(i,r)),h.length){const e\u003d{};for(const t of h)e[t]\u003d!0;const l\u003dnew Array,o\u003dnew Array;if(this.glyph instanceof n.LineView)for(const i of t)null!\u003de[i]?l.push(i):o.push(i);else for(const s of i)null!\u003de[t[s]]?l.push(s):o.push(s);m.render(s,o),v.render(s,l),null!\u003dthis.hover_glyph\u0026\u0026(this.glyph instanceof n.LineView?this.hover_glyph.render(s,this.model.view.convert_indices_from_subset(r)):this.hover_glyph.render(s,r))}else if(this.glyph instanceof n.LineView)this.hover_glyph\u0026\u0026r.length?this.hover_glyph.render(s,this.model.view.convert_indices_from_subset(r)):y.render(s,t);else if(this.glyph instanceof o.PatchView||this.glyph instanceof a.HAreaView||this.glyph instanceof c.VAreaView)if(0\u003d\u003dd.selected_glyphs.length||null\u003d\u003dthis.hover_glyph)y.render(s,t);else for(const e of d.selected_glyphs)e\u003d\u003dthis.glyph.model\u0026\u0026this.hover_glyph.render(s,t);else y.render(s,i),this.hover_glyph\u0026\u0026r.length\u0026\u0026this.hover_glyph.render(s,r);s.restore()}draw_legend(e,t,i,s,l,h,n,o){0!\u003dthis.glyph.data_size\u0026\u0026(null\u003d\u003do\u0026\u0026(o\u003dthis.model.get_reference_point(h,n)),this.glyph.draw_legend_for_index(e,{x0:t,x1:i,y0:s,y1:l},o))}hit_test(e){if(!this.model.visible)return null;const t\u003dthis.glyph.hit_test(e);return null\u003d\u003dt?null:this.model.view.convert_selection_from_subset(t)}}i.GlyphRendererView\u003dV,V.__name__\u003d\"GlyphRendererView\";class G extends h.DataRenderer{constructor(e){super(e)}static init_GlyphRenderer(){this.prototype.default_view\u003dV,this.define((({Boolean:e,Auto:t,Or:i,Ref:s,Null:l,Nullable:h})\u003d\u003e({data_source:[s(_.ColumnarDataSource)],view:[s(r.CDSView),e\u003d\u003enew r.CDSView({source:e.data_source})],glyph:[s(d.Glyph)],hover_glyph:[h(s(d.Glyph)),null],nonselection_glyph:[i(s(d.Glyph),t,l),\"auto\"],selection_glyph:[i(s(d.Glyph),t,l),\"auto\"],muted_glyph:[h(s(d.Glyph)),null],muted:[e,!1]})))}initialize(){super.initialize(),this.view.source!\u003dthis.data_source\u0026\u0026(this.view.source\u003dthis.data_source,this.view.compute_indices())}get_reference_point(e,t){if(null!\u003de){const i\u003dthis.data_source.get_column(e);if(null!\u003di)for(const[e,s]of Object.entries(this.view.indices_map))if(i[parseInt(e)]\u003d\u003dt)return s}return 0}get_selection_manager(){return this.data_source.selection_manager}}i.GlyphRenderer\u003dG,G.__name__\u003d\"GlyphRenderer\",G.init_GlyphRenderer()},\n      function _(e,r,t,a,n){a();const s\u003de(41);class i extends s.RendererView{get xscale(){return this.coordinates.x_scale}get yscale(){return this.coordinates.y_scale}}t.DataRendererView\u003di,i.__name__\u003d\"DataRendererView\";class _ extends s.Renderer{constructor(e){super(e)}static init_DataRenderer(){this.override({level:\"glyph\"})}get selection_manager(){return this.get_selection_manager()}}t.DataRenderer\u003d_,_.__name__\u003d\"DataRenderer\",_.init_DataRenderer()},\n      function _(e,i,t,s,n){s();const l\u003de(1),_\u003de(64),r\u003de(106),h\u003de(108),o\u003dl.__importStar(e(48)),a\u003dl.__importStar(e(107)),c\u003de(59);class d extends _.XYGlyphView{initialize(){super.initialize();const{webgl:e}\u003dthis.renderer.plot_view.canvas_view;null!\u003de\u0026\u0026(this.glglyph\u003dnew h.LineGL(e.gl,this))}_render(e,i,t){const{sx:s,sy:n}\u003dnull!\u003dt?t:this;let l\u003d!0;e.beginPath();for(const t of i){const i\u003ds[t],_\u003dn[t];isFinite(i+_)?l?(e.moveTo(i,_),l\u003d!1):e.lineTo(i,_):l\u003d!0}this.visuals.line.set_value(e),e.stroke()}_hit_point(e){const i\u003dnew c.Selection,t\u003d{x:e.sx,y:e.sy};let s\u003d9999;const n\u003dMath.max(2,this.line_width.value/2);for(let e\u003d0,l\u003dthis.sx.length-1;e\u003cl;e++){const l\u003d{x:this.sx[e],y:this.sy[e]},_\u003d{x:this.sx[e+1],y:this.sy[e+1]},r\u003da.dist_to_segment(t,l,_);r\u003cn\u0026\u0026r\u003cs\u0026\u0026(s\u003dr,i.add_to_selected_glyphs(this.model),i.view\u003dthis,i.line_indices\u003d[e])}return i}_hit_span(e){const{sx:i,sy:t}\u003de,s\u003dnew c.Selection;let n,l;\"v\"\u003d\u003de.direction?(n\u003dthis.renderer.yscale.invert(t),l\u003dthis._y):(n\u003dthis.renderer.xscale.invert(i),l\u003dthis._x);for(let e\u003d0,i\u003dl.length-1;e\u003ci;e++)(l[e]\u003c\u003dn\u0026\u0026n\u003c\u003dl[e+1]||l[e+1]\u003c\u003dn\u0026\u0026n\u003c\u003dl[e])\u0026\u0026(s.add_to_selected_glyphs(this.model),s.view\u003dthis,s.line_indices.push(e));return s}get_interpolation_hit(e,i){const[t,s,n,l]\u003d[this._x[e],this._y[e],this._x[e+1],this._y[e+1]];return r.line_interpolation(this.renderer,i,t,s,n,l)}draw_legend_for_index(e,i,t){r.generic_line_scalar_legend(this.visuals,e,i)}}t.LineView\u003dd,d.__name__\u003d\"LineView\";class x extends _.XYGlyph{constructor(e){super(e)}static init_Line(){this.prototype.default_view\u003dd,this.mixins(o.LineScalar)}}t.Line\u003dx,x.__name__\u003d\"Line\",x.init_Line()},\n      function _(t,e,i,s,_){s();const n\u003dt(1),a\u003dt(65),p\u003dn.__importStar(t(18)),y\u003dt(98);class c extends y.GlyphView{_project_data(){a.inplace.project_xy(this._x,this._y)}_index_data(t){const{_x:e,_y:i,data_size:s}\u003dthis;for(let _\u003d0;_\u003cs;_++){const s\u003de[_],n\u003di[_];isNaN(s+n)||!isFinite(s+n)?t.add_empty():t.add(s,n,s,n)}}scenterxy(t){return[this.sx[t],this.sy[t]]}}i.XYGlyphView\u003dc,c.__name__\u003d\"XYGlyphView\";class d extends y.Glyph{constructor(t){super(t)}static init_XYGlyph(){this.define((({})\u003d\u003e({x:[p.XCoordinateSpec,{field:\"x\"}],y:[p.YCoordinateSpec,{field:\"y\"}]})))}}i.XYGlyph\u003dd,d.__name__\u003d\"XYGlyph\",d.init_XYGlyph()},\n      function _(n,t,e,o,r){o();const c\u003dn(1),l\u003dc.__importDefault(n(66)),i\u003dc.__importDefault(n(67)),u\u003dn(24),a\u003dnew i.default(\"GOOGLE\"),s\u003dnew i.default(\"WGS84\"),f\u003dl.default(s,a);e.wgs84_mercator\u003d{compute:(n,t)\u003d\u003eisFinite(n)\u0026\u0026isFinite(t)?f.forward([n,t]):[NaN,NaN],invert:(n,t)\u003d\u003eisFinite(n)\u0026\u0026isFinite(t)?f.inverse([n,t]):[NaN,NaN]};const _\u003d{lon:[-20026376.39,20026376.39],lat:[-20048966.1,20048966.1]},p\u003d{lon:[-180,180],lat:[-85.06,85.06]},{min:g,max:h}\u003dMath;function m(n,t){const o\u003dg(n.length,t.length),r\u003du.infer_type(n,t),c\u003dnew r(o),l\u003dnew r(o);return e.inplace.project_xy(n,t,c,l),[c,l]}e.clip_mercator\u003dfunction(n,t,e){const[o,r]\u003d_[e];return[h(n,o),g(t,r)]},e.in_bounds\u003dfunction(n,t){const[e,o]\u003dp[t];return e\u003cn\u0026\u0026n\u003co},function(n){function t(n,t,o,r){const c\u003dg(n.length,t.length);o\u003dnull!\u003do?o:n,r\u003dnull!\u003dr?r:t;for(let l\u003d0;l\u003cc;l++){const c\u003dn[l],i\u003dt[l],[u,a]\u003de.wgs84_mercator.compute(c,i);o[l]\u003du,r[l]\u003da}}n.project_xy\u003dt,n.project_xsys\u003dfunction(n,e,o,r){const c\u003dg(n.length,e.length);o\u003dnull!\u003do?o:n,r\u003dnull!\u003dr?r:e;for(let l\u003d0;l\u003cc;l++)t(n[l],e[l],o[l],r[l])}}(e.inplace||(e.inplace\u003d{})),e.project_xy\u003dm,e.project_xsys\u003dfunction(n,t){const e\u003dg(n.length,t.length),o\u003dnew Array(e),r\u003dnew Array(e);for(let c\u003d0;c\u003ce;c++){const[e,l]\u003dm(n[c],t[c]);o[c]\u003de,r[c]\u003dl}return[o,r]}},\n      function _(e,n,t,r,o){r();const a\u003de(1),i\u003da.__importDefault(e(67)),c\u003da.__importDefault(e(92));var u\u003di.default(\"WGS84\");function f(e,n,t){var r,o,a;return Array.isArray(t)?(r\u003dc.default(e,n,t)||{x:NaN,y:NaN},t.length\u003e2?void 0!\u003d\u003de.name\u0026\u0026\"geocent\"\u003d\u003d\u003de.name||void 0!\u003d\u003dn.name\u0026\u0026\"geocent\"\u003d\u003d\u003dn.name?\"number\"\u003d\u003dtypeof r.z?[r.x,r.y,r.z].concat(t.splice(3)):[r.x,r.y,t[2]].concat(t.splice(3)):[r.x,r.y].concat(t.splice(2)):[r.x,r.y]):(o\u003dc.default(e,n,t),2\u003d\u003d\u003d(a\u003dObject.keys(t)).length||a.forEach((function(r){if(void 0!\u003d\u003de.name\u0026\u0026\"geocent\"\u003d\u003d\u003de.name||void 0!\u003d\u003dn.name\u0026\u0026\"geocent\"\u003d\u003d\u003dn.name){if(\"x\"\u003d\u003d\u003dr||\"y\"\u003d\u003d\u003dr||\"z\"\u003d\u003d\u003dr)return}else if(\"x\"\u003d\u003d\u003dr||\"y\"\u003d\u003d\u003dr)return;o[r]\u003dt[r]})),o)}function l(e){return e instanceof i.default?e:e.oProj?e.oProj:i.default(e)}t.default\u003dfunction(e,n,t){e\u003dl(e);var r,o\u003d!1;return void 0\u003d\u003d\u003dn?(n\u003de,e\u003du,o\u003d!0):(void 0!\u003d\u003dn.x||Array.isArray(n))\u0026\u0026(t\u003dn,n\u003de,e\u003du,o\u003d!0),n\u003dl(n),t?f(e,n,t):(r\u003d{forward:function(t){return f(e,n,t)},inverse:function(t){return f(n,e,t)}},o\u0026\u0026(r.oProj\u003dn),r)}},\n      function _(t,e,a,s,i){s();const u\u003dt(1),l\u003du.__importDefault(t(68)),o\u003du.__importDefault(t(79)),r\u003du.__importDefault(t(80)),f\u003dt(88),p\u003du.__importDefault(t(90)),d\u003du.__importDefault(t(91)),m\u003du.__importDefault(t(75));function n(t,e){if(!(this instanceof n))return new n(t);e\u003de||function(t){if(t)throw t};var a\u003dl.default(t);if(\"object\"\u003d\u003dtypeof a){var s\u003dn.projections.get(a.projName);if(s){if(a.datumCode\u0026\u0026\"none\"!\u003d\u003da.datumCode){var i\u003dm.default(p.default,a.datumCode);i\u0026\u0026(a.datum_params\u003di.towgs84?i.towgs84.split(\",\"):null,a.ellps\u003di.ellipse,a.datumName\u003di.datumName?i.datumName:a.datumCode)}a.k0\u003da.k0||1,a.axis\u003da.axis||\"enu\",a.ellps\u003da.ellps||\"wgs84\";var u\u003df.sphere(a.a,a.b,a.rf,a.ellps,a.sphere),r\u003df.eccentricity(u.a,u.b,u.rf,a.R_A),h\u003da.datum||d.default(a.datumCode,a.datum_params,u.a,u.b,r.es,r.ep2);o.default(this,a),o.default(this,s),this.a\u003du.a,this.b\u003du.b,this.rf\u003du.rf,this.sphere\u003du.sphere,this.es\u003dr.es,this.e\u003dr.e,this.ep2\u003dr.ep2,this.datum\u003dh,this.init(),e(null,this)}else e(t)}else e(t)}n.projections\u003dr.default,n.projections.start(),a.default\u003dn},\n      function _(t,r,n,u,e){u();const f\u003dt(1),i\u003df.__importDefault(t(69)),a\u003df.__importDefault(t(76)),o\u003df.__importDefault(t(71)),l\u003df.__importDefault(t(75));var C\u003d[\"PROJECTEDCRS\",\"PROJCRS\",\"GEOGCS\",\"GEOCCS\",\"PROJCS\",\"LOCAL_CS\",\"GEODCRS\",\"GEODETICCRS\",\"GEODETICDATUM\",\"ENGCRS\",\"ENGINEERINGCRS\"];var d\u003d[\"3857\",\"900913\",\"3785\",\"102113\"];n.default\u003dfunction(t){if(!function(t){return\"string\"\u003d\u003dtypeof t}(t))return t;if(function(t){return t in i.default}(t))return i.default[t];if(function(t){return C.some((function(r){return t.indexOf(r)\u003e-1}))}(t)){var r\u003da.default(t);if(function(t){var r\u003dl.default(t,\"authority\");if(r){var n\u003dl.default(r,\"epsg\");return n\u0026\u0026d.indexOf(n)\u003e-1}}(r))return i.default[\"EPSG:3857\"];var n\u003dfunction(t){var r\u003dl.default(t,\"extension\");if(r)return l.default(r,\"proj4\")}(r);return n?o.default(n):r}return function(t){return\"+\"\u003d\u003d\u003dt[0]}(t)?o.default(t):void 0}},\n      function _(t,r,i,e,n){e();const f\u003dt(1),a\u003df.__importDefault(t(70)),l\u003df.__importDefault(t(71)),u\u003df.__importDefault(t(76));function o(t){var r\u003dthis;if(2\u003d\u003d\u003darguments.length){var i\u003darguments[1];\"string\"\u003d\u003dtypeof i?\"+\"\u003d\u003d\u003di.charAt(0)?o[t]\u003dl.default(arguments[1]):o[t]\u003du.default(arguments[1]):o[t]\u003di}else if(1\u003d\u003d\u003darguments.length){if(Array.isArray(t))return t.map((function(t){Array.isArray(t)?o.apply(r,t):o(t)}));if(\"string\"\u003d\u003dtypeof t){if(t in o)return o[t]}else\"EPSG\"in t?o[\"EPSG:\"+t.EPSG]\u003dt:\"ESRI\"in t?o[\"ESRI:\"+t.ESRI]\u003dt:\"IAU2000\"in t?o[\"IAU2000:\"+t.IAU2000]\u003dt:console.log(t);return}}a.default(o),i.default\u003do},\n      function _(t,l,G,S,e){S(),G.default\u003dfunction(t){t(\"EPSG:4326\",\"+title\u003dWGS 84 (long/lat) +proj\u003dlonglat +ellps\u003dWGS84 +datum\u003dWGS84 +units\u003ddegrees\"),t(\"EPSG:4269\",\"+title\u003dNAD83 (long/lat) +proj\u003dlonglat +a\u003d6378137.0 +b\u003d6356752.31414036 +ellps\u003dGRS80 +datum\u003dNAD83 +units\u003ddegrees\"),t(\"EPSG:3857\",\"+title\u003dWGS 84 / Pseudo-Mercator +proj\u003dmerc +a\u003d6378137 +b\u003d6378137 +lat_ts\u003d0.0 +lon_0\u003d0.0 +x_0\u003d0.0 +y_0\u003d0 +k\u003d1.0 +units\u003dm +nadgrids\u003d@null +no_defs\"),t.WGS84\u003dt[\"EPSG:4326\"],t[\"EPSG:3785\"]\u003dt[\"EPSG:3857\"],t.GOOGLE\u003dt[\"EPSG:3857\"],t[\"EPSG:900913\"]\u003dt[\"EPSG:3857\"],t[\"EPSG:102113\"]\u003dt[\"EPSG:3857\"]}},\n      function _(t,n,o,a,u){a();const e\u003dt(1),r\u003dt(72),i\u003de.__importDefault(t(73)),f\u003de.__importDefault(t(74)),l\u003de.__importDefault(t(75));o.default\u003dfunction(t){var n,o,a,u\u003d{},e\u003dt.split(\"+\").map((function(t){return t.trim()})).filter((function(t){return t})).reduce((function(t,n){var o\u003dn.split(\"\u003d\");return o.push(!0),t[o[0].toLowerCase()]\u003do[1],t}),{}),c\u003d{proj:\"projName\",datum:\"datumCode\",rf:function(t){u.rf\u003dparseFloat(t)},lat_0:function(t){u.lat0\u003dt*r.D2R},lat_1:function(t){u.lat1\u003dt*r.D2R},lat_2:function(t){u.lat2\u003dt*r.D2R},lat_ts:function(t){u.lat_ts\u003dt*r.D2R},lon_0:function(t){u.long0\u003dt*r.D2R},lon_1:function(t){u.long1\u003dt*r.D2R},lon_2:function(t){u.long2\u003dt*r.D2R},alpha:function(t){u.alpha\u003dparseFloat(t)*r.D2R},lonc:function(t){u.longc\u003dt*r.D2R},x_0:function(t){u.x0\u003dparseFloat(t)},y_0:function(t){u.y0\u003dparseFloat(t)},k_0:function(t){u.k0\u003dparseFloat(t)},k:function(t){u.k0\u003dparseFloat(t)},a:function(t){u.a\u003dparseFloat(t)},b:function(t){u.b\u003dparseFloat(t)},r_a:function(){u.R_A\u003d!0},zone:function(t){u.zone\u003dparseInt(t,10)},south:function(){u.utmSouth\u003d!0},towgs84:function(t){u.datum_params\u003dt.split(\",\").map((function(t){return parseFloat(t)}))},to_meter:function(t){u.to_meter\u003dparseFloat(t)},units:function(t){u.units\u003dt;var n\u003dl.default(f.default,t);n\u0026\u0026(u.to_meter\u003dn.to_meter)},from_greenwich:function(t){u.from_greenwich\u003dt*r.D2R},pm:function(t){var n\u003dl.default(i.default,t);u.from_greenwich\u003d(n||parseFloat(t))*r.D2R},nadgrids:function(t){\"@null\"\u003d\u003d\u003dt?u.datumCode\u003d\"none\":u.nadgrids\u003dt},axis:function(t){var n\u003d\"ewnsud\";3\u003d\u003d\u003dt.length\u0026\u0026-1!\u003d\u003dn.indexOf(t.substr(0,1))\u0026\u0026-1!\u003d\u003dn.indexOf(t.substr(1,1))\u0026\u0026-1!\u003d\u003dn.indexOf(t.substr(2,1))\u0026\u0026(u.axis\u003dt)}};for(n in e)o\u003de[n],n in c?\"function\"\u003d\u003dtypeof(a\u003dc[n])?a(o):u[a]\u003do:u[n]\u003do;return\"string\"\u003d\u003dtypeof u.datumCode\u0026\u0026\"WGS84\"!\u003d\u003du.datumCode\u0026\u0026(u.datumCode\u003du.datumCode.toLowerCase()),u}},\n      function _(P,A,_,D,I){D(),_.PJD_3PARAM\u003d1,_.PJD_7PARAM\u003d2,_.PJD_WGS84\u003d4,_.PJD_NODATUM\u003d5,_.SEC_TO_RAD\u003d484813681109536e-20,_.HALF_PI\u003dMath.PI/2,_.SIXTH\u003d.16666666666666666,_.RA4\u003d.04722222222222222,_.RA6\u003d.022156084656084655,_.EPSLN\u003d1e-10,_.D2R\u003d.017453292519943295,_.R2D\u003d57.29577951308232,_.FORTPI\u003dMath.PI/4,_.TWO_PI\u003d2*Math.PI,_.SPI\u003d3.14159265359},\n      function _(o,r,a,e,s){e();var n\u003d{};a.default\u003dn,n.greenwich\u003d0,n.lisbon\u003d-9.131906111111,n.paris\u003d2.337229166667,n.bogota\u003d-74.080916666667,n.madrid\u003d-3.687938888889,n.rome\u003d12.452333333333,n.bern\u003d7.439583333333,n.jakarta\u003d106.807719444444,n.ferro\u003d-17.666666666667,n.brussels\u003d4.367975,n.stockholm\u003d18.058277777778,n.athens\u003d23.7163375,n.oslo\u003d10.722916666667},\n      function _(t,e,f,o,u){o(),f.default\u003d{ft:{to_meter:.3048},\"us-ft\":{to_meter:1200/3937}}},\n      function _(e,r,t,a,n){a();var o\u003d/[\\s_\\-\\/\\(\\)]/g;t.default\u003dfunction(e,r){if(e[r])return e[r];for(var t,a\u003dObject.keys(e),n\u003dr.toLowerCase().replace(o,\"\"),f\u003d-1;++f\u003ca.length;)if((t\u003da[f]).toLowerCase().replace(o,\"\")\u003d\u003d\u003dn)return e[t]}},\n      function _(e,t,a,o,d){o();const r\u003de(1);const n\u003dr.__importDefault(e(77)),l\u003de(78);function i(e){return.017453292519943295*e}a.default\u003dfunction(e){var t\u003dn.default(e),a\u003dt.shift(),o\u003dt.shift();t.unshift([\"name\",o]),t.unshift([\"type\",a]);var d\u003d{};return l.sExpr(t,d),function(e){if(\"GEOGCS\"\u003d\u003d\u003de.type?e.projName\u003d\"longlat\":\"LOCAL_CS\"\u003d\u003d\u003de.type?(e.projName\u003d\"identity\",e.local\u003d!0):\"object\"\u003d\u003dtypeof e.PROJECTION?e.projName\u003dObject.keys(e.PROJECTION)[0]:e.projName\u003de.PROJECTION,e.AXIS){for(var t\u003d\"\",a\u003d0,o\u003de.AXIS.length;a\u003co;++a){var d\u003de.AXIS[a][0].toLowerCase();-1!\u003d\u003dd.indexOf(\"north\")?t+\u003d\"n\":-1!\u003d\u003dd.indexOf(\"south\")?t+\u003d\"s\":-1!\u003d\u003dd.indexOf(\"east\")?t+\u003d\"e\":-1!\u003d\u003dd.indexOf(\"west\")\u0026\u0026(t+\u003d\"w\")}2\u003d\u003d\u003dt.length\u0026\u0026(t+\u003d\"u\"),3\u003d\u003d\u003dt.length\u0026\u0026(e.axis\u003dt)}e.UNIT\u0026\u0026(e.units\u003de.UNIT.name.toLowerCase(),\"metre\"\u003d\u003d\u003de.units\u0026\u0026(e.units\u003d\"meter\"),e.UNIT.convert\u0026\u0026(\"GEOGCS\"\u003d\u003d\u003de.type?e.DATUM\u0026\u0026e.DATUM.SPHEROID\u0026\u0026(e.to_meter\u003de.UNIT.convert*e.DATUM.SPHEROID.a):e.to_meter\u003de.UNIT.convert));var r\u003de.GEOGCS;function n(t){return t*(e.to_meter||1)}\"GEOGCS\"\u003d\u003d\u003de.type\u0026\u0026(r\u003de),r\u0026\u0026(r.DATUM?e.datumCode\u003dr.DATUM.name.toLowerCase():e.datumCode\u003dr.name.toLowerCase(),\"d_\"\u003d\u003d\u003de.datumCode.slice(0,2)\u0026\u0026(e.datumCode\u003de.datumCode.slice(2)),\"new_zealand_geodetic_datum_1949\"!\u003d\u003de.datumCode\u0026\u0026\"new_zealand_1949\"!\u003d\u003de.datumCode||(e.datumCode\u003d\"nzgd49\"),\"wgs_1984\"!\u003d\u003de.datumCode\u0026\u0026\"world_geodetic_system_1984\"!\u003d\u003de.datumCode||(\"Mercator_Auxiliary_Sphere\"\u003d\u003d\u003de.PROJECTION\u0026\u0026(e.sphere\u003d!0),e.datumCode\u003d\"wgs84\"),\"_ferro\"\u003d\u003d\u003de.datumCode.slice(-6)\u0026\u0026(e.datumCode\u003de.datumCode.slice(0,-6)),\"_jakarta\"\u003d\u003d\u003de.datumCode.slice(-8)\u0026\u0026(e.datumCode\u003de.datumCode.slice(0,-8)),~e.datumCode.indexOf(\"belge\")\u0026\u0026(e.datumCode\u003d\"rnb72\"),r.DATUM\u0026\u0026r.DATUM.SPHEROID\u0026\u0026(e.ellps\u003dr.DATUM.SPHEROID.name.replace(\"_19\",\"\").replace(/[Cc]larke\\_18/,\"clrk\"),\"international\"\u003d\u003d\u003de.ellps.toLowerCase().slice(0,13)\u0026\u0026(e.ellps\u003d\"intl\"),e.a\u003dr.DATUM.SPHEROID.a,e.rf\u003dparseFloat(r.DATUM.SPHEROID.rf,10)),r.DATUM\u0026\u0026r.DATUM.TOWGS84\u0026\u0026(e.datum_params\u003dr.DATUM.TOWGS84),~e.datumCode.indexOf(\"osgb_1936\")\u0026\u0026(e.datumCode\u003d\"osgb36\"),~e.datumCode.indexOf(\"osni_1952\")\u0026\u0026(e.datumCode\u003d\"osni52\"),(~e.datumCode.indexOf(\"tm65\")||~e.datumCode.indexOf(\"geodetic_datum_of_1965\"))\u0026\u0026(e.datumCode\u003d\"ire65\"),\"ch1903+\"\u003d\u003d\u003de.datumCode\u0026\u0026(e.datumCode\u003d\"ch1903\"),~e.datumCode.indexOf(\"israel\")\u0026\u0026(e.datumCode\u003d\"isr93\")),e.b\u0026\u0026!isFinite(e.b)\u0026\u0026(e.b\u003de.a),[[\"standard_parallel_1\",\"Standard_Parallel_1\"],[\"standard_parallel_2\",\"Standard_Parallel_2\"],[\"false_easting\",\"False_Easting\"],[\"false_northing\",\"False_Northing\"],[\"central_meridian\",\"Central_Meridian\"],[\"latitude_of_origin\",\"Latitude_Of_Origin\"],[\"latitude_of_origin\",\"Central_Parallel\"],[\"scale_factor\",\"Scale_Factor\"],[\"k0\",\"scale_factor\"],[\"latitude_of_center\",\"Latitude_Of_Center\"],[\"latitude_of_center\",\"Latitude_of_center\"],[\"lat0\",\"latitude_of_center\",i],[\"longitude_of_center\",\"Longitude_Of_Center\"],[\"longitude_of_center\",\"Longitude_of_center\"],[\"longc\",\"longitude_of_center\",i],[\"x0\",\"false_easting\",n],[\"y0\",\"false_northing\",n],[\"long0\",\"central_meridian\",i],[\"lat0\",\"latitude_of_origin\",i],[\"lat0\",\"standard_parallel_1\",i],[\"lat1\",\"standard_parallel_1\",i],[\"lat2\",\"standard_parallel_2\",i],[\"azimuth\",\"Azimuth\"],[\"alpha\",\"azimuth\",i],[\"srsCode\",\"name\"]].forEach((function(t){return a\u003de,d\u003d(o\u003dt)[0],r\u003do[1],void(!(d in a)\u0026\u0026r in a\u0026\u0026(a[d]\u003da[r],3\u003d\u003d\u003do.length\u0026\u0026(a[d]\u003do[2](a[d]))));var a,o,d,r})),e.long0||!e.longc||\"Albers_Conic_Equal_Area\"!\u003d\u003de.projName\u0026\u0026\"Lambert_Azimuthal_Equal_Area\"!\u003d\u003de.projName||(e.long0\u003de.longc),e.lat_ts||!e.lat1||\"Stereographic_South_Pole\"!\u003d\u003de.projName\u0026\u0026\"Polar Stereographic (variant B)\"!\u003d\u003de.projName||(e.lat0\u003di(e.lat1\u003e0?90:-90),e.lat_ts\u003de.lat1)}(d),d}},\n      function _(t,e,r,i,s){i(),r.default\u003dfunction(t){return new d(t).output()};var h\u003d/\\s/,o\u003d/[A-Za-z]/,n\u003d/[A-Za-z84]/,a\u003d/[,\\]]/,u\u003d/[\\d\\.E\\-\\+]/;function d(t){if(\"string\"!\u003dtypeof t)throw new Error(\"not a string\");this.text\u003dt.trim(),this.level\u003d0,this.place\u003d0,this.root\u003dnull,this.stack\u003d[],this.currentObject\u003dnull,this.state\u003d1}d.prototype.readCharicter\u003dfunction(){var t\u003dthis.text[this.place++];if(4!\u003d\u003dthis.state)for(;h.test(t);){if(this.place\u003e\u003dthis.text.length)return;t\u003dthis.text[this.place++]}switch(this.state){case 1:return this.neutral(t);case 2:return this.keyword(t);case 4:return this.quoted(t);case 5:return this.afterquote(t);case 3:return this.number(t);case-1:return}},d.prototype.afterquote\u003dfunction(t){if(\u0027\"\u0027\u003d\u003d\u003dt)return this.word+\u003d\u0027\"\u0027,void(this.state\u003d4);if(a.test(t))return this.word\u003dthis.word.trim(),void this.afterItem(t);throw new Error(\"havn\u0027t handled \\\"\"+t+\u0027\" in afterquote yet, index \u0027+this.place)},d.prototype.afterItem\u003dfunction(t){return\",\"\u003d\u003d\u003dt?(null!\u003d\u003dthis.word\u0026\u0026this.currentObject.push(this.word),this.word\u003dnull,void(this.state\u003d1)):\"]\"\u003d\u003d\u003dt?(this.level--,null!\u003d\u003dthis.word\u0026\u0026(this.currentObject.push(this.word),this.word\u003dnull),this.state\u003d1,this.currentObject\u003dthis.stack.pop(),void(this.currentObject||(this.state\u003d-1))):void 0},d.prototype.number\u003dfunction(t){if(!u.test(t)){if(a.test(t))return this.word\u003dparseFloat(this.word),void this.afterItem(t);throw new Error(\"havn\u0027t handled \\\"\"+t+\u0027\" in number yet, index \u0027+this.place)}this.word+\u003dt},d.prototype.quoted\u003dfunction(t){\u0027\"\u0027!\u003d\u003dt?this.word+\u003dt:this.state\u003d5},d.prototype.keyword\u003dfunction(t){if(n.test(t))this.word+\u003dt;else{if(\"[\"\u003d\u003d\u003dt){var e\u003d[];return e.push(this.word),this.level++,null\u003d\u003d\u003dthis.root?this.root\u003de:this.currentObject.push(e),this.stack.push(this.currentObject),this.currentObject\u003de,void(this.state\u003d1)}if(!a.test(t))throw new Error(\"havn\u0027t handled \\\"\"+t+\u0027\" in keyword yet, index \u0027+this.place);this.afterItem(t)}},d.prototype.neutral\u003dfunction(t){if(o.test(t))return this.word\u003dt,void(this.state\u003d2);if(\u0027\"\u0027\u003d\u003d\u003dt)return this.word\u003d\"\",void(this.state\u003d4);if(u.test(t))return this.word\u003dt,void(this.state\u003d3);if(!a.test(t))throw new Error(\"havn\u0027t handled \\\"\"+t+\u0027\" in neutral yet, index \u0027+this.place);this.afterItem(t)},d.prototype.output\u003dfunction(){for(;this.place\u003cthis.text.length;)this.readCharicter();if(-1\u003d\u003d\u003dthis.state)return this.root;throw new Error(\u0027unable to parse string \"\u0027+this.text+\u0027\". State is \u0027+this.state)}},\n      function _(e,a,r,s,c){function n(e,a,r){Array.isArray(a)\u0026\u0026(r.unshift(a),a\u003dnull);var s\u003da?{}:e,c\u003dr.reduce((function(e,a){return E(a,e),e}),s);a\u0026\u0026(e[a]\u003dc)}function E(e,a){if(Array.isArray(e)){var r\u003de.shift();if(\"PARAMETER\"\u003d\u003d\u003dr\u0026\u0026(r\u003de.shift()),1\u003d\u003d\u003de.length)return Array.isArray(e[0])?(a[r]\u003d{},void E(e[0],a[r])):void(a[r]\u003de[0]);if(e.length)if(\"TOWGS84\"!\u003d\u003dr){if(\"AXIS\"\u003d\u003d\u003dr)return r in a||(a[r]\u003d[]),void a[r].push(e);var s;switch(Array.isArray(r)||(a[r]\u003d{}),r){case\"UNIT\":case\"PRIMEM\":case\"VERT_DATUM\":return a[r]\u003d{name:e[0].toLowerCase(),convert:e[1]},void(3\u003d\u003d\u003de.length\u0026\u0026E(e[2],a[r]));case\"SPHEROID\":case\"ELLIPSOID\":return a[r]\u003d{name:e[0],a:e[1],rf:e[2]},void(4\u003d\u003d\u003de.length\u0026\u0026E(e[3],a[r]));case\"PROJECTEDCRS\":case\"PROJCRS\":case\"GEOGCS\":case\"GEOCCS\":case\"PROJCS\":case\"LOCAL_CS\":case\"GEODCRS\":case\"GEODETICCRS\":case\"GEODETICDATUM\":case\"EDATUM\":case\"ENGINEERINGDATUM\":case\"VERT_CS\":case\"VERTCRS\":case\"VERTICALCRS\":case\"COMPD_CS\":case\"COMPOUNDCRS\":case\"ENGINEERINGCRS\":case\"ENGCRS\":case\"FITTED_CS\":case\"LOCAL_DATUM\":case\"DATUM\":return e[0]\u003d[\"name\",e[0]],void n(a,r,e);default:for(s\u003d-1;++s\u003ce.length;)if(!Array.isArray(e[s]))return E(e,a[r]);return n(a,r,e)}}else a[r]\u003de;else a[r]\u003d!0}else a[e]\u003d!0}s(),r.sExpr\u003dE},\n      function _(n,r,f,i,t){i(),f.default\u003dfunction(n,r){var f,i;if(n\u003dn||{},!r)return n;for(i in r)void 0!\u003d\u003d(f\u003dr[i])\u0026\u0026(n[i]\u003df);return n}},\n      function _(t,o,a,e,n){e();const r\u003dt(1),f\u003dr.__importDefault(t(81)),u\u003dr.__importDefault(t(87));var i\u003d[f.default,u.default],c\u003d{},d\u003d[];function s(t,o){var a\u003dd.length;return t.names?(d[a]\u003dt,t.names.forEach((function(t){c[t.toLowerCase()]\u003da})),this):(console.log(o),!0)}function l(t){if(!t)return!1;var o\u003dt.toLowerCase();return void 0!\u003d\u003dc[o]\u0026\u0026d[c[o]]?d[c[o]]:void 0}function v(){i.forEach(s)}a.add\u003ds,a.get\u003dl,a.start\u003dv,a.default\u003d{start:v,add:s,get:l}},\n      function _(t,i,s,h,a){h();const e\u003dt(1),r\u003de.__importDefault(t(82)),n\u003de.__importDefault(t(83)),l\u003de.__importDefault(t(85)),u\u003de.__importDefault(t(86)),o\u003dt(72);function f(){var t\u003dthis.b/this.a;this.es\u003d1-t*t,\"x0\"in this||(this.x0\u003d0),\"y0\"in this||(this.y0\u003d0),this.e\u003dMath.sqrt(this.es),this.lat_ts?this.sphere?this.k0\u003dMath.cos(this.lat_ts):this.k0\u003dr.default(this.e,Math.sin(this.lat_ts),Math.cos(this.lat_ts)):this.k0||(this.k?this.k0\u003dthis.k:this.k0\u003d1)}function _(t){var i,s,h\u003dt.x,a\u003dt.y;if(a*o.R2D\u003e90\u0026\u0026a*o.R2D\u003c-90\u0026\u0026h*o.R2D\u003e180\u0026\u0026h*o.R2D\u003c-180)return null;if(Math.abs(Math.abs(a)-o.HALF_PI)\u003c\u003do.EPSLN)return null;if(this.sphere)i\u003dthis.x0+this.a*this.k0*n.default(h-this.long0),s\u003dthis.y0+this.a*this.k0*Math.log(Math.tan(o.FORTPI+.5*a));else{var e\u003dMath.sin(a),r\u003dl.default(this.e,a,e);i\u003dthis.x0+this.a*this.k0*n.default(h-this.long0),s\u003dthis.y0-this.a*this.k0*Math.log(r)}return t.x\u003di,t.y\u003ds,t}function M(t){var i,s,h\u003dt.x-this.x0,a\u003dt.y-this.y0;if(this.sphere)s\u003do.HALF_PI-2*Math.atan(Math.exp(-a/(this.a*this.k0)));else{var e\u003dMath.exp(-a/(this.a*this.k0));if(-9999\u003d\u003d\u003d(s\u003du.default(this.e,e)))return null}return i\u003dn.default(this.long0+h/(this.a*this.k0)),t.x\u003di,t.y\u003ds,t}s.init\u003df,s.forward\u003d_,s.inverse\u003dM,s.names\u003d[\"Mercator\",\"Popular Visualisation Pseudo Mercator\",\"Mercator_1SP\",\"Mercator_Auxiliary_Sphere\",\"merc\"],s.default\u003d{init:f,forward:_,inverse:M,names:s.names}},\n      function _(t,n,r,u,a){u(),r.default\u003dfunction(t,n,r){var u\u003dt*n;return r/Math.sqrt(1-u*u)}},\n      function _(t,n,u,a,f){a();const e\u003dt(1),o\u003dt(72),_\u003de.__importDefault(t(84));u.default\u003dfunction(t){return Math.abs(t)\u003c\u003do.SPI?t:t-_.default(t)*o.TWO_PI}},\n      function _(n,t,u,f,c){f(),u.default\u003dfunction(n){return n\u003c0?-1:1}},\n      function _(t,n,a,o,u){o();const c\u003dt(72);a.default\u003dfunction(t,n,a){var o\u003dt*a,u\u003d.5*t;return o\u003dMath.pow((1-o)/(1+o),u),Math.tan(.5*(c.HALF_PI-n))/o}},\n      function _(t,a,n,r,f){r();const h\u003dt(72);n.default\u003dfunction(t,a){for(var n,r,f\u003d.5*t,o\u003dh.HALF_PI-2*Math.atan(a),u\u003d0;u\u003c\u003d15;u++)if(n\u003dt*Math.sin(o),o+\u003dr\u003dh.HALF_PI-2*Math.atan(a*Math.pow((1-n)/(1+n),f))-o,Math.abs(r)\u003c\u003d1e-10)return o;return-9999}},\n      function _(n,i,e,t,r){function a(){}function f(n){return n}t(),e.init\u003da,e.forward\u003df,e.inverse\u003df,e.names\u003d[\"longlat\",\"identity\"],e.default\u003d{init:a,forward:f,inverse:f,names:e.names}},\n      function _(t,r,e,a,n){a();const f\u003dt(1),i\u003dt(72),u\u003df.__importStar(t(89)),c\u003df.__importDefault(t(75));e.eccentricity\u003dfunction(t,r,e,a){var n\u003dt*t,f\u003dr*r,u\u003d(n-f)/n,c\u003d0;return a?(n\u003d(t*\u003d1-u*(i.SIXTH+u*(i.RA4+u*i.RA6)))*t,u\u003d0):c\u003dMath.sqrt(u),{es:u,e:c,ep2:(n-f)/f}},e.sphere\u003dfunction(t,r,e,a,n){if(!t){var f\u003dc.default(u.default,a);f||(f\u003du.WGS84),t\u003df.a,r\u003df.b,e\u003df.rf}return e\u0026\u0026!r\u0026\u0026(r\u003d(1-1/e)*t),(0\u003d\u003d\u003de||Math.abs(t-r)\u003ci.EPSLN)\u0026\u0026(n\u003d!0,r\u003dt),{a:t,b:r,rf:e,sphere:n}}},\n      function _(e,a,l,s,r){s();var i\u003d{};l.default\u003di,i.MERIT\u003d{a:6378137,rf:298.257,ellipseName:\"MERIT 1983\"},i.SGS85\u003d{a:6378136,rf:298.257,ellipseName:\"Soviet Geodetic System 85\"},i.GRS80\u003d{a:6378137,rf:298.257222101,ellipseName:\"GRS 1980(IUGG, 1980)\"},i.IAU76\u003d{a:6378140,rf:298.257,ellipseName:\"IAU 1976\"},i.airy\u003d{a:6377563.396,b:6356256.91,ellipseName:\"Airy 1830\"},i.APL4\u003d{a:6378137,rf:298.25,ellipseName:\"Appl. Physics. 1965\"},i.NWL9D\u003d{a:6378145,rf:298.25,ellipseName:\"Naval Weapons Lab., 1965\"},i.mod_airy\u003d{a:6377340.189,b:6356034.446,ellipseName:\"Modified Airy\"},i.andrae\u003d{a:6377104.43,rf:300,ellipseName:\"Andrae 1876 (Den., Iclnd.)\"},i.aust_SA\u003d{a:6378160,rf:298.25,ellipseName:\"Australian Natl \u0026 S. Amer. 1969\"},i.GRS67\u003d{a:6378160,rf:298.247167427,ellipseName:\"GRS 67(IUGG 1967)\"},i.bessel\u003d{a:6377397.155,rf:299.1528128,ellipseName:\"Bessel 1841\"},i.bess_nam\u003d{a:6377483.865,rf:299.1528128,ellipseName:\"Bessel 1841 (Namibia)\"},i.clrk66\u003d{a:6378206.4,b:6356583.8,ellipseName:\"Clarke 1866\"},i.clrk80\u003d{a:6378249.145,rf:293.4663,ellipseName:\"Clarke 1880 mod.\"},i.clrk58\u003d{a:6378293.645208759,rf:294.2606763692654,ellipseName:\"Clarke 1858\"},i.CPM\u003d{a:6375738.7,rf:334.29,ellipseName:\"Comm. des Poids et Mesures 1799\"},i.delmbr\u003d{a:6376428,rf:311.5,ellipseName:\"Delambre 1810 (Belgium)\"},i.engelis\u003d{a:6378136.05,rf:298.2566,ellipseName:\"Engelis 1985\"},i.evrst30\u003d{a:6377276.345,rf:300.8017,ellipseName:\"Everest 1830\"},i.evrst48\u003d{a:6377304.063,rf:300.8017,ellipseName:\"Everest 1948\"},i.evrst56\u003d{a:6377301.243,rf:300.8017,ellipseName:\"Everest 1956\"},i.evrst69\u003d{a:6377295.664,rf:300.8017,ellipseName:\"Everest 1969\"},i.evrstSS\u003d{a:6377298.556,rf:300.8017,ellipseName:\"Everest (Sabah \u0026 Sarawak)\"},i.fschr60\u003d{a:6378166,rf:298.3,ellipseName:\"Fischer (Mercury Datum) 1960\"},i.fschr60m\u003d{a:6378155,rf:298.3,ellipseName:\"Fischer 1960\"},i.fschr68\u003d{a:6378150,rf:298.3,ellipseName:\"Fischer 1968\"},i.helmert\u003d{a:6378200,rf:298.3,ellipseName:\"Helmert 1906\"},i.hough\u003d{a:6378270,rf:297,ellipseName:\"Hough\"},i.intl\u003d{a:6378388,rf:297,ellipseName:\"International 1909 (Hayford)\"},i.kaula\u003d{a:6378163,rf:298.24,ellipseName:\"Kaula 1961\"},i.lerch\u003d{a:6378139,rf:298.257,ellipseName:\"Lerch 1979\"},i.mprts\u003d{a:6397300,rf:191,ellipseName:\"Maupertius 1738\"},i.new_intl\u003d{a:6378157.5,b:6356772.2,ellipseName:\"New International 1967\"},i.plessis\u003d{a:6376523,rf:6355863,ellipseName:\"Plessis 1817 (France)\"},i.krass\u003d{a:6378245,rf:298.3,ellipseName:\"Krassovsky, 1942\"},i.SEasia\u003d{a:6378155,b:6356773.3205,ellipseName:\"Southeast Asia\"},i.walbeck\u003d{a:6376896,b:6355834.8467,ellipseName:\"Walbeck\"},i.WGS60\u003d{a:6378165,rf:298.3,ellipseName:\"WGS 60\"},i.WGS66\u003d{a:6378145,rf:298.25,ellipseName:\"WGS 66\"},i.WGS7\u003d{a:6378135,rf:298.26,ellipseName:\"WGS 72\"},l.WGS84\u003di.WGS84\u003d{a:6378137,rf:298.257223563,ellipseName:\"WGS 84\"},i.sphere\u003d{a:6370997,b:6370997,ellipseName:\"Normal Sphere (r\u003d6370997)\"}},\n      function _(e,a,s,t,l){t();var m\u003d{};s.default\u003dm,m.wgs84\u003d{towgs84:\"0,0,0\",ellipse:\"WGS84\",datumName:\"WGS84\"},m.ch1903\u003d{towgs84:\"674.374,15.056,405.346\",ellipse:\"bessel\",datumName:\"swiss\"},m.ggrs87\u003d{towgs84:\"-199.87,74.79,246.62\",ellipse:\"GRS80\",datumName:\"Greek_Geodetic_Reference_System_1987\"},m.nad83\u003d{towgs84:\"0,0,0\",ellipse:\"GRS80\",datumName:\"North_American_Datum_1983\"},m.nad27\u003d{nadgrids:\"@conus,@alaska,@ntv2_0.gsb,@ntv1_can.dat\",ellipse:\"clrk66\",datumName:\"North_American_Datum_1927\"},m.potsdam\u003d{towgs84:\"606.0,23.0,413.0\",ellipse:\"bessel\",datumName:\"Potsdam Rauenberg 1950 DHDN\"},m.carthage\u003d{towgs84:\"-263.0,6.0,431.0\",ellipse:\"clark80\",datumName:\"Carthage 1934 Tunisia\"},m.hermannskogel\u003d{towgs84:\"653.0,-212.0,449.0\",ellipse:\"bessel\",datumName:\"Hermannskogel\"},m.osni52\u003d{towgs84:\"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",ellipse:\"airy\",datumName:\"Irish National\"},m.ire65\u003d{towgs84:\"482.530,-130.596,564.557,-1.042,-0.214,-0.631,8.15\",ellipse:\"mod_airy\",datumName:\"Ireland 1965\"},m.rassadiran\u003d{towgs84:\"-133.63,-157.5,-158.62\",ellipse:\"intl\",datumName:\"Rassadiran\"},m.nzgd49\u003d{towgs84:\"59.47,-5.04,187.44,0.47,-0.1,1.024,-4.5993\",ellipse:\"intl\",datumName:\"New Zealand Geodetic Datum 1949\"},m.osgb36\u003d{towgs84:\"446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894\",ellipse:\"airy\",datumName:\"Airy 1830\"},m.s_jtsk\u003d{towgs84:\"589,76,480\",ellipse:\"bessel\",datumName:\"S-JTSK (Ferro)\"},m.beduaram\u003d{towgs84:\"-106,-87,188\",ellipse:\"clrk80\",datumName:\"Beduaram\"},m.gunung_segara\u003d{towgs84:\"-403,684,41\",ellipse:\"bessel\",datumName:\"Gunung Segara Jakarta\"},m.rnb72\u003d{towgs84:\"106.869,-52.2978,103.724,-0.33657,0.456955,-1.84218,1\",ellipse:\"intl\",datumName:\"Reseau National Belge 1972\"}},\n      function _(a,m,_,t,u){t();const p\u003da(72);_.default\u003dfunction(a,m,_,t,u,d){var r\u003d{};return r.datum_type\u003dvoid 0\u003d\u003d\u003da||\"none\"\u003d\u003d\u003da?p.PJD_NODATUM:p.PJD_WGS84,m\u0026\u0026(r.datum_params\u003dm.map(parseFloat),0\u003d\u003d\u003dr.datum_params[0]\u0026\u00260\u003d\u003d\u003dr.datum_params[1]\u0026\u00260\u003d\u003d\u003dr.datum_params[2]||(r.datum_type\u003dp.PJD_3PARAM),r.datum_params.length\u003e3\u0026\u0026(0\u003d\u003d\u003dr.datum_params[3]\u0026\u00260\u003d\u003d\u003dr.datum_params[4]\u0026\u00260\u003d\u003d\u003dr.datum_params[5]\u0026\u00260\u003d\u003d\u003dr.datum_params[6]||(r.datum_type\u003dp.PJD_7PARAM,r.datum_params[3]*\u003dp.SEC_TO_RAD,r.datum_params[4]*\u003dp.SEC_TO_RAD,r.datum_params[5]*\u003dp.SEC_TO_RAD,r.datum_params[6]\u003dr.datum_params[6]/1e6+1))),r.a\u003d_,r.b\u003dt,r.es\u003du,r.ep2\u003dd,r}},\n      function _(t,e,a,r,u){r();const m\u003dt(1),_\u003dt(72),o\u003dm.__importDefault(t(93)),d\u003dm.__importDefault(t(95)),f\u003dm.__importDefault(t(67)),n\u003dm.__importDefault(t(96)),i\u003dm.__importDefault(t(97));a.default\u003dfunction t(e,a,r){var u;if(Array.isArray(r)\u0026\u0026(r\u003dn.default(r)),i.default(r),e.datum\u0026\u0026a.datum\u0026\u0026function(t,e){return(t.datum.datum_type\u003d\u003d\u003d_.PJD_3PARAM||t.datum.datum_type\u003d\u003d\u003d_.PJD_7PARAM)\u0026\u0026\"WGS84\"!\u003d\u003de.datumCode||(e.datum.datum_type\u003d\u003d\u003d_.PJD_3PARAM||e.datum.datum_type\u003d\u003d\u003d_.PJD_7PARAM)\u0026\u0026\"WGS84\"!\u003d\u003dt.datumCode}(e,a)\u0026\u0026(r\u003dt(e,u\u003dnew f.default(\"WGS84\"),r),e\u003du),\"enu\"!\u003d\u003de.axis\u0026\u0026(r\u003dd.default(e,!1,r)),\"longlat\"\u003d\u003d\u003de.projName)r\u003d{x:r.x*_.D2R,y:r.y*_.D2R,z:r.z||0};else if(e.to_meter\u0026\u0026(r\u003d{x:r.x*e.to_meter,y:r.y*e.to_meter,z:r.z||0}),!(r\u003de.inverse(r)))return;return e.from_greenwich\u0026\u0026(r.x+\u003de.from_greenwich),r\u003do.default(e.datum,a.datum,r),a.from_greenwich\u0026\u0026(r\u003d{x:r.x-a.from_greenwich,y:r.y,z:r.z||0}),\"longlat\"\u003d\u003d\u003da.projName?r\u003d{x:r.x*_.R2D,y:r.y*_.R2D,z:r.z||0}:(r\u003da.forward(r),a.to_meter\u0026\u0026(r\u003d{x:r.x/a.to_meter,y:r.y/a.to_meter,z:r.z||0})),\"enu\"!\u003d\u003da.axis?d.default(a,!0,r):r}},\n      function _(t,e,a,u,c){u();const m\u003dt(72),o\u003dt(94);function _(t){return t\u003d\u003d\u003dm.PJD_3PARAM||t\u003d\u003d\u003dm.PJD_7PARAM}a.default\u003dfunction(t,e,a){return o.compareDatums(t,e)||t.datum_type\u003d\u003d\u003dm.PJD_NODATUM||e.datum_type\u003d\u003d\u003dm.PJD_NODATUM?a:t.es!\u003d\u003de.es||t.a!\u003d\u003de.a||_(t.datum_type)||_(e.datum_type)?(a\u003do.geodeticToGeocentric(a,t.es,t.a),_(t.datum_type)\u0026\u0026(a\u003do.geocentricToWgs84(a,t.datum_type,t.datum_params)),_(e.datum_type)\u0026\u0026(a\u003do.geocentricFromWgs84(a,e.datum_type,e.datum_params)),o.geocentricToGeodetic(a,e.es,e.a,e.b)):a}},\n      function _(a,t,r,m,s){m();const u\u003da(72);r.compareDatums\u003dfunction(a,t){return a.datum_type\u003d\u003d\u003dt.datum_type\u0026\u0026(!(a.a!\u003d\u003dt.a||Math.abs(a.es-t.es)\u003e5e-11)\u0026\u0026(a.datum_type\u003d\u003d\u003du.PJD_3PARAM?a.datum_params[0]\u003d\u003d\u003dt.datum_params[0]\u0026\u0026a.datum_params[1]\u003d\u003d\u003dt.datum_params[1]\u0026\u0026a.datum_params[2]\u003d\u003d\u003dt.datum_params[2]:a.datum_type!\u003d\u003du.PJD_7PARAM||a.datum_params[0]\u003d\u003d\u003dt.datum_params[0]\u0026\u0026a.datum_params[1]\u003d\u003d\u003dt.datum_params[1]\u0026\u0026a.datum_params[2]\u003d\u003d\u003dt.datum_params[2]\u0026\u0026a.datum_params[3]\u003d\u003d\u003dt.datum_params[3]\u0026\u0026a.datum_params[4]\u003d\u003d\u003dt.datum_params[4]\u0026\u0026a.datum_params[5]\u003d\u003d\u003dt.datum_params[5]\u0026\u0026a.datum_params[6]\u003d\u003d\u003dt.datum_params[6]))},r.geodeticToGeocentric\u003dfunction(a,t,r){var m,s,_,e,n\u003da.x,d\u003da.y,i\u003da.z?a.z:0;if(d\u003c-u.HALF_PI\u0026\u0026d\u003e-1.001*u.HALF_PI)d\u003d-u.HALF_PI;else if(d\u003eu.HALF_PI\u0026\u0026d\u003c1.001*u.HALF_PI)d\u003du.HALF_PI;else{if(d\u003c-u.HALF_PI)return{x:-1/0,y:-1/0,z:a.z};if(d\u003eu.HALF_PI)return{x:1/0,y:1/0,z:a.z}}return n\u003eMath.PI\u0026\u0026(n-\u003d2*Math.PI),s\u003dMath.sin(d),e\u003dMath.cos(d),_\u003ds*s,{x:((m\u003dr/Math.sqrt(1-t*_))+i)*e*Math.cos(n),y:(m+i)*e*Math.sin(n),z:(m*(1-t)+i)*s}},r.geocentricToGeodetic\u003dfunction(a,t,r,m){var s,_,e,n,d,i,p,P,y,z,M,o,A,c,x,h\u003d1e-12,f\u003da.x,I\u003da.y,F\u003da.z?a.z:0;if(s\u003dMath.sqrt(f*f+I*I),_\u003dMath.sqrt(f*f+I*I+F*F),s/r\u003ch){if(c\u003d0,_/r\u003ch)return u.HALF_PI,x\u003d-m,{x:a.x,y:a.y,z:a.z}}else c\u003dMath.atan2(I,f);e\u003dF/_,P\u003d(n\u003ds/_)*(1-t)*(d\u003d1/Math.sqrt(1-t*(2-t)*n*n)),y\u003de*d,A\u003d0;do{A++,i\u003dt*(p\u003dr/Math.sqrt(1-t*y*y))/(p+(x\u003ds*P+F*y-p*(1-t*y*y))),o\u003d(M\u003de*(d\u003d1/Math.sqrt(1-i*(2-i)*n*n)))*P-(z\u003dn*(1-i)*d)*y,P\u003dz,y\u003dM}while(o*o\u003e1e-24\u0026\u0026A\u003c30);return{x:c,y:Math.atan(M/Math.abs(z)),z:x}},r.geocentricToWgs84\u003dfunction(a,t,r){if(t\u003d\u003d\u003du.PJD_3PARAM)return{x:a.x+r[0],y:a.y+r[1],z:a.z+r[2]};if(t\u003d\u003d\u003du.PJD_7PARAM){var m\u003dr[0],s\u003dr[1],_\u003dr[2],e\u003dr[3],n\u003dr[4],d\u003dr[5],i\u003dr[6];return{x:i*(a.x-d*a.y+n*a.z)+m,y:i*(d*a.x+a.y-e*a.z)+s,z:i*(-n*a.x+e*a.y+a.z)+_}}},r.geocentricFromWgs84\u003dfunction(a,t,r){if(t\u003d\u003d\u003du.PJD_3PARAM)return{x:a.x-r[0],y:a.y-r[1],z:a.z-r[2]};if(t\u003d\u003d\u003du.PJD_7PARAM){var m\u003dr[0],s\u003dr[1],_\u003dr[2],e\u003dr[3],n\u003dr[4],d\u003dr[5],i\u003dr[6],p\u003d(a.x-m)/i,P\u003d(a.y-s)/i,y\u003d(a.z-_)/i;return{x:p+d*P-n*y,y:-d*p+P+e*y,z:n*p-e*P+y}}}},\n      function _(e,a,i,r,s){r(),i.default\u003dfunction(e,a,i){var r,s,n,c\u003di.x,d\u003di.y,f\u003di.z||0,u\u003d{};for(n\u003d0;n\u003c3;n++)if(!a||2!\u003d\u003dn||void 0!\u003d\u003di.z)switch(0\u003d\u003d\u003dn?(r\u003dc,s\u003d-1!\u003d\u003d\"ew\".indexOf(e.axis[n])?\"x\":\"y\"):1\u003d\u003d\u003dn?(r\u003dd,s\u003d-1!\u003d\u003d\"ns\".indexOf(e.axis[n])?\"y\":\"x\"):(r\u003df,s\u003d\"z\"),e.axis[n]){case\"e\":u[s]\u003dr;break;case\"w\":u[s]\u003d-r;break;case\"n\":u[s]\u003dr;break;case\"s\":u[s]\u003d-r;break;case\"u\":void 0!\u003d\u003di[s]\u0026\u0026(u.z\u003dr);break;case\"d\":void 0!\u003d\u003di[s]\u0026\u0026(u.z\u003d-r);break;default:return null}return u}},\n      function _(n,t,e,u,f){u(),e.default\u003dfunction(n){var t\u003d{x:n[0],y:n[1]};return n.length\u003e2\u0026\u0026(t.z\u003dn[2]),n.length\u003e3\u0026\u0026(t.m\u003dn[3]),t}},\n      function _(e,i,n,t,r){function o(e){if(\"function\"\u003d\u003dtypeof Number.isFinite){if(Number.isFinite(e))return;throw new TypeError(\"coordinates must be finite numbers\")}if(\"number\"!\u003dtypeof e||e!\u003de||!isFinite(e))throw new TypeError(\"coordinates must be finite numbers\")}t(),n.default\u003dfunction(e){o(e.x),o(e.y)}},\n      function _(e,t,s,i,n){i();const r\u003de(1),a\u003dr.__importStar(e(18)),o\u003dr.__importStar(e(99)),_\u003dr.__importStar(e(45)),l\u003de(42),c\u003de(53),h\u003de(19),d\u003de(24),u\u003de(8),f\u003de(100),p\u003de(12),g\u003de(26),y\u003de(101),x\u003de(104),v\u003de(59),{abs:b,ceil:m}\u003dMath;class w extends l.View{constructor(){super(...arguments),this._index\u003dnull,this._data_size\u003dnull,this._nohit_warned\u003dnew Set}get renderer(){return this.parent}get has_webgl(){return null!\u003dthis.glglyph}get index(){const{_index:e}\u003dthis;if(null!\u003de)return e;throw new Error(`${this}.index_data() wasn\u0027t called`)}get data_size(){const{_data_size:e}\u003dthis;if(null!\u003de)return e;throw new Error(`${this}.set_data() wasn\u0027t called`)}initialize(){super.initialize(),this.visuals\u003dnew _.Visuals(this)}request_render(){this.parent.request_render()}get canvas(){return this.renderer.parent.canvas_view}render(e,t,s){var i;null!\u003dthis.glglyph\u0026\u0026(this.renderer.needs_webgl_blit\u003dthis.glglyph.render(e,t,null!\u003d\u003d(i\u003dthis.base)\u0026\u0026void 0!\u003d\u003di?i:this),this.renderer.needs_webgl_blit)||(e.beginPath(),this._render(e,t,null!\u003ds?s:this.base))}has_finished(){return!0}notify_finished(){this.renderer.notify_finished()}_bounds(e){return e}bounds(){return this._bounds(this.index.bbox)}log_bounds(){const{x0:e,x1:t}\u003dthis.index.bounds(o.positive_x()),{y0:s,y1:i}\u003dthis.index.bounds(o.positive_y());return this._bounds({x0:e,y0:s,x1:t,y1:i})}get_anchor_point(e,t,[s,i]){switch(e){case\"center\":case\"center_center\":{const[e,n]\u003dthis.scenterxy(t,s,i);return{x:e,y:n}}default:return null}}scenterx(e,t,s){return this.scenterxy(e,t,s)[0]}scentery(e,t,s){return this.scenterxy(e,t,s)[1]}sdist(e,t,s,i\u003d\"edge\",n\u003d!1){const r\u003dt.length,a\u003dnew d.ScreenArray(r),o\u003de.s_compute;if(\"center\"\u003d\u003di)for(let e\u003d0;e\u003cr;e++){const i\u003dt[e],n\u003ds.get(e)/2,r\u003do(i-n),_\u003do(i+n);a[e]\u003db(_-r)}else for(let e\u003d0;e\u003cr;e++){const i\u003dt[e],n\u003do(i),r\u003do(i+s.get(e));a[e]\u003db(r-n)}return n\u0026\u0026p.inplace_map(a,(e\u003d\u003em(e))),a}draw_legend_for_index(e,t,s){}hit_test(e){switch(e.type){case\"point\":if(null!\u003dthis._hit_point)return this._hit_point(e);break;case\"span\":if(null!\u003dthis._hit_span)return this._hit_span(e);break;case\"rect\":if(null!\u003dthis._hit_rect)return this._hit_rect(e);break;case\"poly\":if(null!\u003dthis._hit_poly)return this._hit_poly(e)}return this._nohit_warned.has(e.type)||(h.logger.debug(`\u0027${e.type}\u0027 selection not available for ${this.model.type}`),this._nohit_warned.add(e.type)),null}_hit_rect_against_index(e){const{sx0:t,sx1:s,sy0:i,sy1:n}\u003de,[r,a]\u003dthis.renderer.coordinates.x_scale.r_invert(t,s),[o,_]\u003dthis.renderer.coordinates.y_scale.r_invert(i,n),l\u003d[...this.index.indices({x0:r,x1:a,y0:o,y1:_})];return new v.Selection({indices:l})}_project_data(){}*_iter_visuals(){for(const e of this.visuals)for(const t of e)(t instanceof a.VectorSpec||t instanceof a.ScalarSpec)\u0026\u0026(yield t)}set_base(e){e!\u003dthis\u0026\u0026e instanceof this.constructor\u0026\u0026(this.base\u003de)}_configure(e,t){Object.defineProperty(this,u.isString(e)?e:e.attr,Object.assign({configurable:!0,enumerable:!0},t))}set_visuals(e,t){var s;for(const s of this._iter_visuals()){const{base:i}\u003dthis;if(null!\u003di){const e\u003di.model.properties[s.attr];if(null!\u003de\u0026\u0026g.is_equal(s.get_value(),e.get_value())){this._configure(s,{get:()\u003d\u003ei[`${s.attr}`]});continue}}const n\u003ds.uniform(e).select(t);this._configure(s,{value:n})}for(const e of this.visuals)e.update();null\u003d\u003d\u003d(s\u003dthis.glglyph)||void 0\u003d\u003d\u003ds||s.set_visuals_changed()}set_data(e,t,s){var i;const{x_range:n,y_range:r}\u003dthis.renderer.coordinates,o\u003dnew Set(this._iter_visuals());this._data_size\u003dt.count;for(const s of this.model)if((s instanceof a.VectorSpec||s instanceof a.ScalarSpec)\u0026\u0026!o.has(s))if(s instanceof a.BaseCoordinateSpec){const i\u003ds.array(e);let o\u003dt.select(i);const _\u003d\"x\"\u003d\u003ds.dimension?n:r;if(_ instanceof x.FactorRange)if(s instanceof a.CoordinateSpec)o\u003d_.v_synthetic(o);else if(s instanceof a.CoordinateSeqSpec)for(let e\u003d0;e\u003co.length;e++)o[e]\u003d_.v_synthetic(o[e]);let l;l\u003ds instanceof a.CoordinateSeqSpec?f.RaggedArray.from(o,Float64Array):o,this._configure(`_${s.attr}`,{value:l})}else{const i\u003ds.uniform(e).select(t);if(this._configure(s,{value:i}),s instanceof a.DistanceSpec){const e\u003di.is_Scalar()?i.value:p.max(i.array);this._configure(`max_${s.attr}`,{value:e})}}this.renderer.plot_view.model.use_map\u0026\u0026this._project_data(),this._set_data(null!\u003ds?s:null),null\u003d\u003d\u003d(i\u003dthis.glglyph)||void 0\u003d\u003d\u003di||i.set_data_changed(),this.index_data()}_set_data(e){}get _index_size(){return this.data_size}index_data(){const e\u003dnew y.SpatialIndex(this._index_size);this._index_data(e),e.finish(),this._index\u003de}mask_data(){return null\u003d\u003dthis._mask_data?d.Indices.all_set(this.data_size):this._mask_data()}map_data(){var e;const t\u003dthis,{x_scale:s,y_scale:i}\u003dthis.renderer.coordinates;for(const e of this.model)if(e instanceof a.BaseCoordinateSpec){const n\u003d\"x\"\u003d\u003de.dimension?s:i;let r\u003dt[`_${e.attr}`];if(r instanceof f.RaggedArray){const e\u003dn.v_compute(r.array);r\u003dnew f.RaggedArray(r.offsets,e)}else r\u003dn.v_compute(r);this[`s${e.attr}`]\u003dr}this._map_data(),null\u003d\u003d\u003d(e\u003dthis.glglyph)||void 0\u003d\u003d\u003de||e.set_data_changed()}_map_data(){}}s.GlyphView\u003dw,w.__name__\u003d\"GlyphView\";class S extends c.Model{constructor(e){super(e)}}s.Glyph\u003dS,S.__name__\u003d\"Glyph\"},\n      function _(t,i,e,h,r){h();const s\u003dt(24),n\u003dt(26),{min:x,max:y}\u003dMath;e.empty\u003dfunction(){return{x0:1/0,y0:1/0,x1:-1/0,y1:-1/0}},e.positive_x\u003dfunction(){return{x0:Number.MIN_VALUE,y0:-1/0,x1:1/0,y1:1/0}},e.positive_y\u003dfunction(){return{x0:-1/0,y0:Number.MIN_VALUE,x1:1/0,y1:1/0}},e.union\u003dfunction(t,i){return{x0:x(t.x0,i.x0),x1:y(t.x1,i.x1),y0:x(t.y0,i.y0),y1:y(t.y1,i.y1)}};class o{constructor(t){if(null\u003d\u003dt)this.x0\u003d0,this.y0\u003d0,this.x1\u003d0,this.y1\u003d0;else if(\"x0\"in t){const{x0:i,y0:e,x1:h,y1:r}\u003dt;if(!(i\u003c\u003dh\u0026\u0026e\u003c\u003dr))throw new Error(`invalid bbox {x0: ${i}, y0: ${e}, x1: ${h}, y1: ${r}}`);this.x0\u003di,this.y0\u003de,this.x1\u003dh,this.y1\u003dr}else if(\"x\"in t){const{x:i,y:e,width:h,height:r}\u003dt;if(!(h\u003e\u003d0\u0026\u0026r\u003e\u003d0))throw new Error(`invalid bbox {x: ${i}, y: ${e}, width: ${h}, height: ${r}}`);this.x0\u003di,this.y0\u003de,this.x1\u003di+h,this.y1\u003de+r}else{let i,e,h,r;if(\"width\"in t)if(\"left\"in t)i\u003dt.left,e\u003di+t.width;else if(\"right\"in t)e\u003dt.right,i\u003de-t.width;else{const h\u003dt.width/2;i\u003dt.hcenter-h,e\u003dt.hcenter+h}else i\u003dt.left,e\u003dt.right;if(\"height\"in t)if(\"top\"in t)h\u003dt.top,r\u003dh+t.height;else if(\"bottom\"in t)r\u003dt.bottom,h\u003dr-t.height;else{const i\u003dt.height/2;h\u003dt.vcenter-i,r\u003dt.vcenter+i}else h\u003dt.top,r\u003dt.bottom;if(!(i\u003c\u003de\u0026\u0026h\u003c\u003dr))throw new Error(`invalid bbox {left: ${i}, top: ${h}, right: ${e}, bottom: ${r}}`);this.x0\u003di,this.y0\u003dh,this.x1\u003de,this.y1\u003dr}}static from_rect({left:t,right:i,top:e,bottom:h}){return new o({x0:Math.min(t,i),y0:Math.min(e,h),x1:Math.max(t,i),y1:Math.max(e,h)})}equals(t){return this.x0\u003d\u003dt.x0\u0026\u0026this.y0\u003d\u003dt.y0\u0026\u0026this.x1\u003d\u003dt.x1\u0026\u0026this.y1\u003d\u003dt.y1}[n.equals](t,i){return i.eq(this.x0,t.x0)\u0026\u0026i.eq(this.y0,t.y0)\u0026\u0026i.eq(this.x1,t.x1)\u0026\u0026i.eq(this.y1,t.y1)}toString(){return`BBox({left: ${this.left}, top: ${this.top}, width: ${this.width}, height: ${this.height}})`}get left(){return this.x0}get top(){return this.y0}get right(){return this.x1}get bottom(){return this.y1}get p0(){return[this.x0,this.y0]}get p1(){return[this.x1,this.y1]}get x(){return this.x0}get y(){return this.y0}get width(){return this.x1-this.x0}get height(){return this.y1-this.y0}get size(){return{width:this.width,height:this.height}}get rect(){const{x0:t,y0:i,x1:e,y1:h}\u003dthis;return{p0:{x:t,y:i},p1:{x:e,y:i},p2:{x:e,y:h},p3:{x:t,y:h}}}get box(){const{x:t,y:i,width:e,height:h}\u003dthis;return{x:t,y:i,width:e,height:h}}get h_range(){return{start:this.x0,end:this.x1}}get v_range(){return{start:this.y0,end:this.y1}}get ranges(){return[this.h_range,this.v_range]}get aspect(){return this.width/this.height}get hcenter(){return(this.left+this.right)/2}get vcenter(){return(this.top+this.bottom)/2}get area(){return this.width*this.height}relative(){const{width:t,height:i}\u003dthis;return new o({x:0,y:0,width:t,height:i})}translate(t,i){const{x:e,y:h,width:r,height:s}\u003dthis;return new o({x:t+e,y:i+h,width:r,height:s})}relativize(t,i){return[t-this.x,i-this.y]}contains(t,i){return this.x0\u003c\u003dt\u0026\u0026t\u003c\u003dthis.x1\u0026\u0026this.y0\u003c\u003di\u0026\u0026i\u003c\u003dthis.y1}clip(t,i){return t\u003cthis.x0?t\u003dthis.x0:t\u003ethis.x1\u0026\u0026(t\u003dthis.x1),i\u003cthis.y0?i\u003dthis.y0:i\u003ethis.y1\u0026\u0026(i\u003dthis.y1),[t,i]}grow_by(t){return new o({left:this.left-t,right:this.right+t,top:this.top-t,bottom:this.bottom+t})}shrink_by(t){return new o({left:this.left+t,right:this.right-t,top:this.top+t,bottom:this.bottom-t})}union(t){return new o({x0:x(this.x0,t.x0),y0:x(this.y0,t.y0),x1:y(this.x1,t.x1),y1:y(this.y1,t.y1)})}intersection(t){return this.intersects(t)?new o({x0:y(this.x0,t.x0),y0:y(this.y0,t.y0),x1:x(this.x1,t.x1),y1:x(this.y1,t.y1)}):null}intersects(t){return!(t.x1\u003cthis.x0||t.x0\u003ethis.x1||t.y1\u003cthis.y0||t.y0\u003ethis.y1)}get xview(){return{compute:t\u003d\u003ethis.left+t,v_compute:t\u003d\u003e{const i\u003dnew s.ScreenArray(t.length),e\u003dthis.left;for(let h\u003d0;h\u003ct.length;h++)i[h]\u003de+t[h];return i}}}get yview(){return{compute:t\u003d\u003ethis.bottom-t,v_compute:t\u003d\u003e{const i\u003dnew s.ScreenArray(t.length),e\u003dthis.bottom;for(let h\u003d0;h\u003ct.length;h++)i[h]\u003de-t[h];return i}}}}e.BBox\u003do,o.__name__\u003d\"BBox\"},\n      function _(t,s,r,e,n){e();const a\u003dt(26),o\u003dt(11);class h{constructor(t,s){this.offsets\u003dt,this.array\u003ds}[a.equals](t,s){return s.arrays(this.offsets,t.offsets)\u0026\u0026s.arrays(this.array,t.array)}get length(){return this.offsets.length}clone(){return new h(this.offsets.slice(),this.array.slice())}static from(t,s){const r\u003dt.length;let e\u003d0;const n\u003d(()\u003d\u003e{const s\u003dnew Uint32Array(r);for(let n\u003d0;n\u003cr;n++){const r\u003dt[n].length;s[n]\u003de,e+\u003dr}return e\u003c256?new Uint8Array(s):e\u003c65536?new Uint16Array(s):s})(),a\u003dnew s(e);for(let s\u003d0;s\u003cr;s++)a.set(t[s],n[s]);return new h(n,a)}*[Symbol.iterator](){const{offsets:t,length:s}\u003dthis;for(let r\u003d0;r\u003cs;r++)yield this.array.subarray(t[r],t[r+1])}_check_bounds(t){o.assert(0\u003c\u003dt\u0026\u0026t\u003cthis.length,`Out of bounds: 0 \u003c\u003d ${t} \u003c ${this.length}`)}get(t){this._check_bounds(t);const{offsets:s}\u003dthis;return this.array.subarray(s[t],s[t+1])}set(t,s){this._check_bounds(t),this.array.set(s,this.offsets[t])}}r.RaggedArray\u003dh,h.__name__\u003d\"RaggedArray\",h[Symbol.toStringTag]\u003d\"RaggedArray\"},\n      function _(n,i,t,e,s){e();const o\u003dn(1).__importDefault(n(102)),d\u003dn(24),x\u003dn(99);function h(n,i){let t\u003d0,e\u003di.length-1;for(;t\u003ce;){const s\u003dt+e\u003e\u003e1;i[s]\u003en?e\u003ds:t\u003ds+1}return i[t]}class r extends o.default{search_indices(n,i,t,e){if(this._pos!\u003d\u003dthis._boxes.length)throw new Error(\"Data not yet indexed - call index.finish().\");let s\u003dthis._boxes.length-4;const o\u003d[],x\u003dnew d.Indices(this.numItems);for(;void 0!\u003d\u003ds;){const d\u003dMath.min(s+4*this.nodeSize,h(s,this._levelBounds));for(let h\u003ds;h\u003cd;h+\u003d4){const d\u003d0|this._indices[h\u003e\u003e2];t\u003cthis._boxes[h+0]||(e\u003cthis._boxes[h+1]||n\u003ethis._boxes[h+2]||i\u003ethis._boxes[h+3]||(s\u003c4*this.numItems?x.set(d):o.push(d)))}s\u003do.pop()}return x}}r.__name__\u003d\"_FlatBush\";class l{constructor(n){this.index\u003dnull,n\u003e0\u0026\u0026(this.index\u003dnew r(n))}add(n,i,t,e){var s;null\u003d\u003d\u003d(s\u003dthis.index)||void 0\u003d\u003d\u003ds||s.add(n,i,t,e)}add_empty(){var n;null\u003d\u003d\u003d(n\u003dthis.index)||void 0\u003d\u003d\u003dn||n.add(1/0,1/0,-1/0,-1/0)}finish(){var n;null\u003d\u003d\u003d(n\u003dthis.index)||void 0\u003d\u003d\u003dn||n.finish()}_normalize(n){let{x0:i,y0:t,x1:e,y1:s}\u003dn;return i\u003ee\u0026\u0026([i,e]\u003d[e,i]),t\u003es\u0026\u0026([t,s]\u003d[s,t]),{x0:i,y0:t,x1:e,y1:s}}get bbox(){if(null\u003d\u003dthis.index)return x.empty();{const{minX:n,minY:i,maxX:t,maxY:e}\u003dthis.index;return{x0:n,y0:i,x1:t,y1:e}}}indices(n){if(null\u003d\u003dthis.index)return new d.Indices(0);{const{x0:i,y0:t,x1:e,y1:s}\u003dthis._normalize(n);return this.index.search_indices(i,t,e,s)}}bounds(n){const i\u003dx.empty();for(const t of this.indices(n)){const n\u003dthis.index._boxes,e\u003dn[4*t+0],s\u003dn[4*t+1],o\u003dn[4*t+2],d\u003dn[4*t+3];e\u003ci.x0\u0026\u0026(i.x0\u003de),o\u003ei.x1\u0026\u0026(i.x1\u003do),s\u003ci.y0\u0026\u0026(i.y0\u003ds),d\u003ei.y1\u0026\u0026(i.y1\u003dd)}return i}}t.SpatialIndex\u003dl,l.__name__\u003d\"SpatialIndex\"},\n      function _(t,s,i,e,h){e();const n\u003dt(1).__importDefault(t(103)),o\u003d[Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array];class r{static from(t){if(!(t instanceof ArrayBuffer))throw new Error(\"Data must be an instance of ArrayBuffer.\");const[s,i]\u003dnew Uint8Array(t,0,2);if(251!\u003d\u003ds)throw new Error(\"Data does not appear to be in a Flatbush format.\");if(i\u003e\u003e4!\u003d3)throw new Error(`Got v${i\u003e\u003e4} data when expected v3.`);const[e]\u003dnew Uint16Array(t,2,1),[h]\u003dnew Uint32Array(t,4,1);return new r(h,e,o[15\u0026i],t)}constructor(t,s\u003d16,i\u003dFloat64Array,e){if(void 0\u003d\u003d\u003dt)throw new Error(\"Missing required argument: numItems.\");if(isNaN(t)||t\u003c\u003d0)throw new Error(`Unpexpected numItems value: ${t}.`);this.numItems\u003d+t,this.nodeSize\u003dMath.min(Math.max(+s,2),65535);let h\u003dt,r\u003dh;this._levelBounds\u003d[4*h];do{h\u003dMath.ceil(h/this.nodeSize),r+\u003dh,this._levelBounds.push(4*r)}while(1!\u003d\u003dh);this.ArrayType\u003di||Float64Array,this.IndexArrayType\u003dr\u003c16384?Uint16Array:Uint32Array;const a\u003do.indexOf(this.ArrayType),_\u003d4*r*this.ArrayType.BYTES_PER_ELEMENT;if(a\u003c0)throw new Error(`Unexpected typed array class: ${i}.`);e\u0026\u0026e instanceof ArrayBuffer?(this.data\u003de,this._boxes\u003dnew this.ArrayType(this.data,8,4*r),this._indices\u003dnew this.IndexArrayType(this.data,8+_,r),this._pos\u003d4*r,this.minX\u003dthis._boxes[this._pos-4],this.minY\u003dthis._boxes[this._pos-3],this.maxX\u003dthis._boxes[this._pos-2],this.maxY\u003dthis._boxes[this._pos-1]):(this.data\u003dnew ArrayBuffer(8+_+r*this.IndexArrayType.BYTES_PER_ELEMENT),this._boxes\u003dnew this.ArrayType(this.data,8,4*r),this._indices\u003dnew this.IndexArrayType(this.data,8+_,r),this._pos\u003d0,this.minX\u003d1/0,this.minY\u003d1/0,this.maxX\u003d-1/0,this.maxY\u003d-1/0,new Uint8Array(this.data,0,2).set([251,48+a]),new Uint16Array(this.data,2,1)[0]\u003ds,new Uint32Array(this.data,4,1)[0]\u003dt),this._queue\u003dnew n.default}add(t,s,i,e){const h\u003dthis._pos\u003e\u003e2;return this._indices[h]\u003dh,this._boxes[this._pos++]\u003dt,this._boxes[this._pos++]\u003ds,this._boxes[this._pos++]\u003di,this._boxes[this._pos++]\u003de,t\u003cthis.minX\u0026\u0026(this.minX\u003dt),s\u003cthis.minY\u0026\u0026(this.minY\u003ds),i\u003ethis.maxX\u0026\u0026(this.maxX\u003di),e\u003ethis.maxY\u0026\u0026(this.maxY\u003de),h}finish(){if(this._pos\u003e\u003e2!\u003d\u003dthis.numItems)throw new Error(`Added ${this._pos\u003e\u003e2} items when expected ${this.numItems}.`);if(this.numItems\u003c\u003dthis.nodeSize)return this._boxes[this._pos++]\u003dthis.minX,this._boxes[this._pos++]\u003dthis.minY,this._boxes[this._pos++]\u003dthis.maxX,void(this._boxes[this._pos++]\u003dthis.maxY);const t\u003dthis.maxX-this.minX,s\u003dthis.maxY-this.minY,i\u003dnew Uint32Array(this.numItems);for(let e\u003d0;e\u003cthis.numItems;e++){let h\u003d4*e;const n\u003dthis._boxes[h++],o\u003dthis._boxes[h++],r\u003dthis._boxes[h++],a\u003dthis._boxes[h++],_\u003dMath.floor(65535*((n+r)/2-this.minX)/t),x\u003dMath.floor(65535*((o+a)/2-this.minY)/s);i[e]\u003dm(_,x)}x(i,this._boxes,this._indices,0,this.numItems-1,this.nodeSize);for(let t\u003d0,s\u003d0;t\u003cthis._levelBounds.length-1;t++){const i\u003dthis._levelBounds[t];for(;s\u003ci;){const t\u003ds;let e\u003d1/0,h\u003d1/0,n\u003d-1/0,o\u003d-1/0;for(let t\u003d0;t\u003cthis.nodeSize\u0026\u0026s\u003ci;t++)e\u003dMath.min(e,this._boxes[s++]),h\u003dMath.min(h,this._boxes[s++]),n\u003dMath.max(n,this._boxes[s++]),o\u003dMath.max(o,this._boxes[s++]);this._indices[this._pos\u003e\u003e2]\u003dt,this._boxes[this._pos++]\u003de,this._boxes[this._pos++]\u003dh,this._boxes[this._pos++]\u003dn,this._boxes[this._pos++]\u003do}}}search(t,s,i,e,h){if(this._pos!\u003d\u003dthis._boxes.length)throw new Error(\"Data not yet indexed - call index.finish().\");let n\u003dthis._boxes.length-4;const o\u003d[],r\u003d[];for(;void 0!\u003d\u003dn;){const a\u003dMath.min(n+4*this.nodeSize,_(n,this._levelBounds));for(let _\u003dn;_\u003ca;_+\u003d4){const a\u003d0|this._indices[_\u003e\u003e2];i\u003cthis._boxes[_]||(e\u003cthis._boxes[_+1]||t\u003ethis._boxes[_+2]||s\u003ethis._boxes[_+3]||(n\u003c4*this.numItems?(void 0\u003d\u003d\u003dh||h(a))\u0026\u0026r.push(a):o.push(a)))}n\u003do.pop()}return r}neighbors(t,s,i\u003d1/0,e\u003d1/0,h){if(this._pos!\u003d\u003dthis._boxes.length)throw new Error(\"Data not yet indexed - call index.finish().\");let n\u003dthis._boxes.length-4;const o\u003dthis._queue,r\u003d[],x\u003de*e;for(;void 0!\u003d\u003dn;){const e\u003dMath.min(n+4*this.nodeSize,_(n,this._levelBounds));for(let i\u003dn;i\u003ce;i+\u003d4){const e\u003d0|this._indices[i\u003e\u003e2],r\u003da(t,this._boxes[i],this._boxes[i+2]),_\u003da(s,this._boxes[i+1],this._boxes[i+3]),x\u003dr*r+_*_;n\u003c4*this.numItems?(void 0\u003d\u003d\u003dh||h(e))\u0026\u0026o.push(-e-1,x):o.push(e,x)}for(;o.length\u0026\u0026o.peek()\u003c0;){if(o.peekValue()\u003ex)return o.clear(),r;if(r.push(-o.pop()-1),r.length\u003d\u003d\u003di)return o.clear(),r}n\u003do.pop()}return o.clear(),r}}function a(t,s,i){return t\u003cs?s-t:t\u003c\u003di?0:t-i}function _(t,s){let i\u003d0,e\u003ds.length-1;for(;i\u003ce;){const h\u003di+e\u003e\u003e1;s[h]\u003et?e\u003dh:i\u003dh+1}return s[i]}function x(t,s,i,e,h,n){if(Math.floor(e/n)\u003e\u003dMath.floor(h/n))return;const o\u003dt[e+h\u003e\u003e1];let r\u003de-1,a\u003dh+1;for(;;){do{r++}while(t[r]\u003co);do{a--}while(t[a]\u003eo);if(r\u003e\u003da)break;d(t,s,i,r,a)}x(t,s,i,e,a,n),x(t,s,i,a+1,h,n)}function d(t,s,i,e,h){const n\u003dt[e];t[e]\u003dt[h],t[h]\u003dn;const o\u003d4*e,r\u003d4*h,a\u003ds[o],_\u003ds[o+1],x\u003ds[o+2],d\u003ds[o+3];s[o]\u003ds[r],s[o+1]\u003ds[r+1],s[o+2]\u003ds[r+2],s[o+3]\u003ds[r+3],s[r]\u003da,s[r+1]\u003d_,s[r+2]\u003dx,s[r+3]\u003dd;const m\u003di[e];i[e]\u003di[h],i[h]\u003dm}function m(t,s){let i\u003dt^s,e\u003d65535^i,h\u003d65535^(t|s),n\u003dt\u0026(65535^s),o\u003di|e\u003e\u003e1,r\u003di\u003e\u003e1^i,a\u003dh\u003e\u003e1^e\u0026n\u003e\u003e1^h,_\u003di\u0026h\u003e\u003e1^n\u003e\u003e1^n;i\u003do,e\u003dr,h\u003da,n\u003d_,o\u003di\u0026i\u003e\u003e2^e\u0026e\u003e\u003e2,r\u003di\u0026e\u003e\u003e2^e\u0026(i^e)\u003e\u003e2,a^\u003di\u0026h\u003e\u003e2^e\u0026n\u003e\u003e2,_^\u003de\u0026h\u003e\u003e2^(i^e)\u0026n\u003e\u003e2,i\u003do,e\u003dr,h\u003da,n\u003d_,o\u003di\u0026i\u003e\u003e4^e\u0026e\u003e\u003e4,r\u003di\u0026e\u003e\u003e4^e\u0026(i^e)\u003e\u003e4,a^\u003di\u0026h\u003e\u003e4^e\u0026n\u003e\u003e4,_^\u003de\u0026h\u003e\u003e4^(i^e)\u0026n\u003e\u003e4,i\u003do,e\u003dr,h\u003da,n\u003d_,a^\u003di\u0026h\u003e\u003e8^e\u0026n\u003e\u003e8,_^\u003de\u0026h\u003e\u003e8^(i^e)\u0026n\u003e\u003e8,i\u003da^a\u003e\u003e1,e\u003d_^_\u003e\u003e1;let x\u003dt^s,d\u003de|65535^(x|i);return x\u003d16711935\u0026(x|x\u003c\u003c8),x\u003d252645135\u0026(x|x\u003c\u003c4),x\u003d858993459\u0026(x|x\u003c\u003c2),x\u003d1431655765\u0026(x|x\u003c\u003c1),d\u003d16711935\u0026(d|d\u003c\u003c8),d\u003d252645135\u0026(d|d\u003c\u003c4),d\u003d858993459\u0026(d|d\u003c\u003c2),d\u003d1431655765\u0026(d|d\u003c\u003c1),(d\u003c\u003c1|x)\u003e\u003e\u003e0}i.default\u003dr},\n      function _(s,t,i,h,e){h();i.default\u003dclass{constructor(){this.ids\u003d[],this.values\u003d[],this.length\u003d0}clear(){this.length\u003d0}push(s,t){let i\u003dthis.length++;for(this.ids[i]\u003ds,this.values[i]\u003dt;i\u003e0;){const s\u003di-1\u003e\u003e1,h\u003dthis.values[s];if(t\u003e\u003dh)break;this.ids[i]\u003dthis.ids[s],this.values[i]\u003dh,i\u003ds}this.ids[i]\u003ds,this.values[i]\u003dt}pop(){if(0\u003d\u003d\u003dthis.length)return;const s\u003dthis.ids[0];if(this.length--,this.length\u003e0){const s\u003dthis.ids[0]\u003dthis.ids[this.length],t\u003dthis.values[0]\u003dthis.values[this.length],i\u003dthis.length\u003e\u003e1;let h\u003d0;for(;h\u003ci;){let s\u003d1+(h\u003c\u003c1);const i\u003ds+1;let e\u003dthis.ids[s],l\u003dthis.values[s];const n\u003dthis.values[i];if(i\u003cthis.length\u0026\u0026n\u003cl\u0026\u0026(s\u003di,e\u003dthis.ids[i],l\u003dn),l\u003e\u003dt)break;this.ids[h]\u003de,this.values[h]\u003dl,h\u003ds}this.ids[h]\u003ds,this.values[h]\u003dt}return s}peek(){if(0!\u003d\u003dthis.length)return this.ids[0]}peekValue(){if(0!\u003d\u003dthis.length)return this.values[0]}}},\n      function _(t,n,e,i,s){i();const r\u003dt(105),a\u003dt(20),o\u003dt(21),g\u003dt(24),p\u003dt(9),c\u003dt(8),l\u003dt(11);function u(t,n,e\u003d0){const i\u003dnew Map;for(let s\u003d0;s\u003ct.length;s++){const r\u003dt[s];if(i.has(r))throw new Error(`duplicate factor or subfactor: ${r}`);i.set(r,{value:.5+s*(1+n)+e})}return[i,(t.length-1)*n]}function h(t,n,e,i\u003d0){var s;const r\u003dnew Map,a\u003dnew Map;for(const[n,e]of t){const t\u003dnull!\u003d\u003d(s\u003da.get(n))\u0026\u0026void 0!\u003d\u003ds?s:[];a.set(n,[...t,e])}let o\u003di,g\u003d0;for(const[t,i]of a){const s\u003di.length,[a,c]\u003du(i,e,o);g+\u003dc;const l\u003dp.sum(i.map((t\u003d\u003ea.get(t).value)));r.set(t,{value:l/s,mapping:a}),o+\u003ds+n+c}return[r,(a.size-1)*n+g]}function d(t,n,e,i,s\u003d0){var r;const a\u003dnew Map,o\u003dnew Map;for(const[n,e,i]of t){const t\u003dnull!\u003d\u003d(r\u003do.get(n))\u0026\u0026void 0!\u003d\u003dr?r:[];o.set(n,[...t,[e,i]])}let g\u003ds,c\u003d0;for(const[t,s]of o){const r\u003ds.length,[o,l]\u003dh(s,e,i,g);c+\u003dl;const u\u003dp.sum(s.map((([t])\u003d\u003eo.get(t).value)));a.set(t,{value:u/r,mapping:o}),g+\u003dr+n+l}return[a,(o.size-1)*n+c]}e.Factor\u003do.Or(o.String,o.Tuple(o.String,o.String),o.Tuple(o.String,o.String,o.String)),e.FactorSeq\u003do.Or(o.Array(o.String),o.Array(o.Tuple(o.String,o.String)),o.Array(o.Tuple(o.String,o.String,o.String))),e.map_one_level\u003du,e.map_two_levels\u003dh,e.map_three_levels\u003dd;class _ extends r.Range{constructor(t){super(t)}static init_FactorRange(){this.define((({Number:t})\u003d\u003e({factors:[e.FactorSeq,[]],factor_padding:[t,0],subgroup_padding:[t,.8],group_padding:[t,1.4],range_padding:[t,0],range_padding_units:[a.PaddingUnits,\"percent\"],start:[t],end:[t]}))),this.internal((({Number:t,String:n,Array:e,Tuple:i,Nullable:s})\u003d\u003e({levels:[t],mids:[s(e(i(n,n))),null],tops:[s(e(n)),null]})))}get min(){return this.start}get max(){return this.end}initialize(){super.initialize(),this._init(!0)}connect_signals(){super.connect_signals(),this.connect(this.properties.factors.change,(()\u003d\u003ethis.reset())),this.connect(this.properties.factor_padding.change,(()\u003d\u003ethis.reset())),this.connect(this.properties.group_padding.change,(()\u003d\u003ethis.reset())),this.connect(this.properties.subgroup_padding.change,(()\u003d\u003ethis.reset())),this.connect(this.properties.range_padding.change,(()\u003d\u003ethis.reset())),this.connect(this.properties.range_padding_units.change,(()\u003d\u003ethis.reset()))}reset(){this._init(!1),this.change.emit()}_lookup(t){switch(t.length){case 1:{const[n]\u003dt,e\u003dthis._mapping.get(n);return null!\u003de?e.value:NaN}case 2:{const[n,e]\u003dt,i\u003dthis._mapping.get(n);if(null!\u003di){const t\u003di.mapping.get(e);if(null!\u003dt)return t.value}return NaN}case 3:{const[n,e,i]\u003dt,s\u003dthis._mapping.get(n);if(null!\u003ds){const t\u003ds.mapping.get(e);if(null!\u003dt){const n\u003dt.mapping.get(i);if(null!\u003dn)return n.value}}return NaN}default:l.unreachable()}}synthetic(t){if(c.isNumber(t))return t;if(c.isString(t))return this._lookup([t]);let n\u003d0;const e\u003dt[t.length-1];return c.isNumber(e)\u0026\u0026(n\u003de,t\u003dt.slice(0,-1)),this._lookup(t)+n}v_synthetic(t){const n\u003dt.length,e\u003dnew g.ScreenArray(n);for(let i\u003d0;i\u003cn;i++)e[i]\u003dthis.synthetic(t[i]);return e}_init(t){const{levels:n,mapping:e,tops:i,mids:s,inside_padding:r}\u003d(()\u003d\u003e{if(p.every(this.factors,c.isString)){const t\u003dthis.factors,[n,e]\u003du(t,this.factor_padding);return{levels:1,mapping:n,tops:null,mids:null,inside_padding:e}}if(p.every(this.factors,(t\u003d\u003ec.isArray(t)\u0026\u00262\u003d\u003dt.length\u0026\u0026c.isString(t[0])\u0026\u0026c.isString(t[1])))){const t\u003dthis.factors,[n,e]\u003dh(t,this.group_padding,this.factor_padding),i\u003d[...n.keys()];return{levels:2,mapping:n,tops:i,mids:null,inside_padding:e}}if(p.every(this.factors,(t\u003d\u003ec.isArray(t)\u0026\u00263\u003d\u003dt.length\u0026\u0026c.isString(t[0])\u0026\u0026c.isString(t[1])\u0026\u0026c.isString(t[2])))){const t\u003dthis.factors,[n,e]\u003dd(t,this.group_padding,this.subgroup_padding,this.factor_padding),i\u003d[...n.keys()],s\u003d[];for(const[t,e]of n)for(const n of e.mapping.keys())s.push([t,n]);return{levels:3,mapping:n,tops:i,mids:s,inside_padding:e}}l.unreachable()})();this._mapping\u003de,this.tops\u003di,this.mids\u003ds;let a\u003d0,o\u003dthis.factors.length+r;if(\"percent\"\u003d\u003dthis.range_padding_units){const t\u003d(o-a)*this.range_padding/2;a-\u003dt,o+\u003dt}else a-\u003dthis.range_padding,o+\u003dthis.range_padding;this.setv({start:a,end:o,levels:n},{silent:t}),\"auto\"\u003d\u003dthis.bounds\u0026\u0026this.setv({bounds:[a,o]},{silent:!0})}}e.FactorRange\u003d_,_.__name__\u003d\"FactorRange\",_.init_FactorRange()},\n      function _(e,t,i,n,s){n();const a\u003de(53);class l extends a.Model{constructor(e){super(e),this.have_updated_interactively\u003d!1}static init_Range(){this.define((({Number:e,Tuple:t,Or:i,Auto:n,Nullable:s})\u003d\u003e({bounds:[s(i(t(s(e),s(e)),n)),null],min_interval:[s(e),null],max_interval:[s(e),null]}))),this.internal((({Array:e,AnyRef:t})\u003d\u003e({plots:[e(t()),[]]})))}get is_reversed(){return this.start\u003ethis.end}get is_valid(){return isFinite(this.min)\u0026\u0026isFinite(this.max)}}i.Range\u003dl,l.__name__\u003d\"Range\",l.init_Range()},\n      function _(e,t,i,n,l){n();const o\u003de(1).__importStar(e(107));function a(e,t,{x0:i,x1:n,y0:l,y1:o},a){t.save(),t.beginPath(),t.moveTo(i,(l+o)/2),t.lineTo(n,(l+o)/2),e.line.doit\u0026\u0026(e.line.set_vectorize(t,a),t.stroke()),t.restore()}function r(e,t,{x0:i,x1:n,y0:l,y1:o},a){var r,c;const s\u003d.1*Math.abs(n-i),_\u003d.1*Math.abs(o-l),v\u003di+s,d\u003dn-s,h\u003dl+_,g\u003do-_;t.beginPath(),t.rect(v,h,d-v,g-h),e.fill.doit\u0026\u0026(e.fill.set_vectorize(t,a),t.fill()),(null\u003d\u003d\u003d(r\u003de.hatch)||void 0\u003d\u003d\u003dr?void 0:r.doit)\u0026\u0026(e.hatch.set_vectorize(t,a),t.fill()),(null\u003d\u003d\u003d(c\u003de.line)||void 0\u003d\u003d\u003dc?void 0:c.doit)\u0026\u0026(e.line.set_vectorize(t,a),t.stroke())}i.generic_line_scalar_legend\u003dfunction(e,t,{x0:i,x1:n,y0:l,y1:o}){t.save(),t.beginPath(),t.moveTo(i,(l+o)/2),t.lineTo(n,(l+o)/2),e.line.doit\u0026\u0026(e.line.set_value(t),t.stroke()),t.restore()},i.generic_line_vector_legend\u003da,i.generic_line_legend\u003da,i.generic_area_scalar_legend\u003dfunction(e,t,{x0:i,x1:n,y0:l,y1:o}){var a,r;const c\u003d.1*Math.abs(n-i),s\u003d.1*Math.abs(o-l),_\u003di+c,v\u003dn-c,d\u003dl+s,h\u003do-s;t.beginPath(),t.rect(_,d,v-_,h-d),e.fill.doit\u0026\u0026(e.fill.set_value(t),t.fill()),(null\u003d\u003d\u003d(a\u003de.hatch)||void 0\u003d\u003d\u003da?void 0:a.doit)\u0026\u0026(e.hatch.set_value(t),t.fill()),(null\u003d\u003d\u003d(r\u003de.line)||void 0\u003d\u003d\u003dr?void 0:r.doit)\u0026\u0026(e.line.set_value(t),t.stroke())},i.generic_area_vector_legend\u003dr,i.generic_area_legend\u003dr,i.line_interpolation\u003dfunction(e,t,i,n,l,a){const{sx:r,sy:c}\u003dt;let s,_,v,d;\"point\"\u003d\u003dt.type?([v,d]\u003de.yscale.r_invert(c-1,c+1),[s,_]\u003de.xscale.r_invert(r-1,r+1)):\"v\"\u003d\u003dt.direction?([v,d]\u003de.yscale.r_invert(c,c),[s,_]\u003d[Math.min(i-1,l-1),Math.max(i+1,l+1)]):([s,_]\u003de.xscale.r_invert(r,r),[v,d]\u003d[Math.min(n-1,a-1),Math.max(n+1,a+1)]);const{x:h,y:g}\u003do.check_2_segments_intersect(s,v,_,d,i,n,l,a);return[h,g]}},\n      function _(t,n,e,i,r){function s(t,n){return(t.x-n.x)**2+(t.y-n.y)**2}function o(t,n,e){const i\u003ds(n,e);if(0\u003d\u003di)return s(t,n);const r\u003d((t.x-n.x)*(e.x-n.x)+(t.y-n.y)*(e.y-n.y))/i;if(r\u003c0)return s(t,n);if(r\u003e1)return s(t,e);return s(t,{x:n.x+r*(e.x-n.x),y:n.y+r*(e.y-n.y)})}i(),e.point_in_poly\u003dfunction(t,n,e,i){let r\u003d!1,s\u003de[e.length-1],o\u003di[i.length-1];for(let u\u003d0;u\u003ce.length;u++){const c\u003de[u],_\u003di[u];o\u003cn!\u003d_\u003cn\u0026\u0026s+(n-o)/(_-o)*(c-s)\u003ct\u0026\u0026(r\u003d!r),s\u003dc,o\u003d_}return r},e.point_in_ellipse\u003dfunction(t,n,e,i,r,s,o){return((Math.cos(e)/r)**2+(Math.sin(e)/i)**2)*(t-s)**2+2*Math.cos(e)*Math.sin(e)*((1/r)**2-(1/i)**2)*(t-s)*(n-o)+((Math.cos(e)/i)**2+(Math.sin(e)/r)**2)*(n-o)**2\u003c\u003d1},e.dist_2_pts\u003ds,e.dist_to_segment_squared\u003do,e.dist_to_segment\u003dfunction(t,n,e){return Math.sqrt(o(t,n,e))},e.check_2_segments_intersect\u003dfunction(t,n,e,i,r,s,o,u){const c\u003d(u-s)*(e-t)-(o-r)*(i-n);if(0\u003d\u003dc)return{hit:!1,x:null,y:null};{let _\u003dn-s,h\u003dt-r;const l\u003d(e-t)*_-(i-n)*h;_\u003d((o-r)*_-(u-s)*h)/c,h\u003dl/c;return{hit:_\u003e0\u0026\u0026_\u003c1\u0026\u0026h\u003e0\u0026\u0026h\u003c1,x:t+_*(e-t),y:n+_*(i-n)}}}},\n      function _(t,e,s,i,a){i();const o\u003dt(1),n\u003dt(109),_\u003dt(113),r\u003do.__importDefault(t(114)),h\u003do.__importDefault(t(115)),l\u003dt(22),g\u003dt(46);class u{constructor(t){this._atlas\u003dnew Map,this._width\u003d256,this._height\u003d256,this.tex\u003dnew n.Texture2d(t),this.tex.set_wrapping(t.REPEAT,t.REPEAT),this.tex.set_interpolation(t.NEAREST,t.NEAREST),this.tex.set_size([this._width,this._height],t.RGBA),this.tex.set_data([0,0],[this._width,this._height],new Uint8Array(4*this._width*this._height)),this.get_atlas_data([1])}get_atlas_data(t){const e\u003dt.join(\"-\");let s\u003dthis._atlas.get(e);if(null\u003d\u003ds){const[i,a]\u003dthis.make_pattern(t),o\u003dthis._atlas.size;this.tex.set_data([0,o],[this._width,1],new Uint8Array(i.map((t\u003d\u003et+10)))),s\u003d[o/this._height,a],this._atlas.set(e,s)}return s}make_pattern(t){t.length\u003e1\u0026\u0026t.length%2\u0026\u0026(t\u003dt.concat(t));let e\u003d0;for(const s of t)e+\u003ds;const s\u003d[];let i\u003d0;for(let e\u003d0,a\u003dt.length+2;e\u003ca;e+\u003d2){const a\u003dMath.max(1e-4,t[e%t.length]),o\u003dMath.max(1e-4,t[(e+1)%t.length]);s.push(i,i+a),i+\u003da+o}const a\u003dthis._width,o\u003dnew Float32Array(4*a);for(let t\u003d0,i\u003da;t\u003ci;t++){let i,n,_;const r\u003de*t/(a-1);let h\u003d0,l\u003d1e16;for(let t\u003d0,e\u003ds.length;t\u003ce;t++){const e\u003dMath.abs(s[t]-r);e\u003cl\u0026\u0026(h\u003dt,l\u003de)}h%2\u003d\u003d0?(_\u003dr\u003c\u003ds[h]?1:0,n\u003ds[h],i\u003ds[h+1]):(_\u003dr\u003es[h]?-1:0,n\u003ds[h-1],i\u003ds[h]),o[4*t+0]\u003ds[h],o[4*t+1]\u003d_,o[4*t+2]\u003dn,o[4*t+3]\u003di}return[o,e]}}u.__name__\u003d\"DashAtlas\";const f\u003d{miter:0,round:1,bevel:2},c\u003d{\"\":0,none:0,\".\":0,round:1,\")\":1,\"(\":1,o:1,\"triangle in\":2,\"\u003c\":2,\"triangle out\":3,\"\u003e\":3,square:4,\"[\":4,\"]\":4,\"\u003d\":4,butt:5,\"|\":5};class d extends _.BaseGLGlyph{constructor(t,e){super(t,e),this.glyph\u003de,this._scale_aspect\u003d0;const s\u003dr.default,i\u003dh.default;this.prog\u003dnew n.Program(t),this.prog.set_shaders(s,i),this.index_buffer\u003dnew n.IndexBuffer(t),this.vbo_position\u003dnew n.VertexBuffer(t),this.vbo_tangents\u003dnew n.VertexBuffer(t),this.vbo_segment\u003dnew n.VertexBuffer(t),this.vbo_angles\u003dnew n.VertexBuffer(t),this.vbo_texcoord\u003dnew n.VertexBuffer(t),this.dash_atlas\u003dnew u(t)}draw(t,e,s){const i\u003de.glglyph;if(i.data_changed\u0026\u0026(i._set_data(),i.data_changed\u003d!1),this.visuals_changed\u0026\u0026(this._set_visuals(),this.visuals_changed\u003d!1),i._update_scale(1,1),this._scale_aspect\u003d1,this.prog.set_attribute(\"a_position\",\"vec2\",i.vbo_position),this.prog.set_attribute(\"a_tangents\",\"vec4\",i.vbo_tangents),this.prog.set_attribute(\"a_segment\",\"vec2\",i.vbo_segment),this.prog.set_attribute(\"a_angles\",\"vec2\",i.vbo_angles),this.prog.set_attribute(\"a_texcoord\",\"vec2\",i.vbo_texcoord),this.prog.set_uniform(\"u_length\",\"float\",[i.cumsum]),this.prog.set_texture(\"u_dash_atlas\",this.dash_atlas.tex),this.prog.set_uniform(\"u_pixel_ratio\",\"float\",[s.pixel_ratio]),this.prog.set_uniform(\"u_canvas_size\",\"vec2\",[s.width,s.height]),this.prog.set_uniform(\"u_scale_aspect\",\"vec2\",[1,1]),this.prog.set_uniform(\"u_scale_length\",\"float\",[Math.sqrt(2)]),this.I_triangles\u003di.I_triangles,this.I_triangles.length\u003c65535)this.index_buffer.set_size(2*this.I_triangles.length),this.index_buffer.set_data(0,new Uint16Array(this.I_triangles)),this.prog.draw(this.gl.TRIANGLES,this.index_buffer);else{t\u003dArray.from(this.I_triangles);const e\u003dthis.I_triangles.length,s\u003d64008,a\u003d[];for(let t\u003d0,i\u003dMath.ceil(e/s);t\u003ci;t++)a.push([]);for(let e\u003d0,i\u003dt.length;e\u003ci;e++){const i\u003dt[e]%s;a[Math.floor(t[e]/s)].push(i)}for(let t\u003d0,e\u003da.length;t\u003ce;t++){const e\u003dnew Uint16Array(a[t]),o\u003dt*s*4;0!\u003d\u003de.length\u0026\u0026(this.prog.set_attribute(\"a_position\",\"vec2\",i.vbo_position,0,2*o),this.prog.set_attribute(\"a_tangents\",\"vec4\",i.vbo_tangents,0,4*o),this.prog.set_attribute(\"a_segment\",\"vec2\",i.vbo_segment,0,2*o),this.prog.set_attribute(\"a_angles\",\"vec2\",i.vbo_angles,0,2*o),this.prog.set_attribute(\"a_texcoord\",\"vec2\",i.vbo_texcoord,0,2*o),this.index_buffer.set_size(2*e.length),this.index_buffer.set_data(0,e),this.prog.draw(this.gl.TRIANGLES,this.index_buffer))}}}_set_data(){this._bake(),this.vbo_position.set_size(4*this.V_position.length),this.vbo_position.set_data(0,this.V_position),this.vbo_tangents.set_size(4*this.V_tangents.length),this.vbo_tangents.set_data(0,this.V_tangents),this.vbo_angles.set_size(4*this.V_angles.length),this.vbo_angles.set_data(0,this.V_angles),this.vbo_texcoord.set_size(4*this.V_texcoord.length),this.vbo_texcoord.set_data(0,this.V_texcoord)}_set_visuals(){const{line_color:t,line_alpha:e,line_width:s,line_cap:i,line_join:a,line_dash:o,line_dash_offset:n}\u003dthis.glyph.visuals.line,[_,r,h,u]\u003dl.color2rgba(t.value,e.value),d\u003ds.value,p\u003dc[i.value],v\u003df[a.value];this.prog.set_uniform(\"u_color\",\"vec4\",[_/255,r/255,h/255,u/255]),this.prog.set_uniform(\"u_linewidth\",\"float\",[d]),this.prog.set_uniform(\"u_antialias\",\"float\",[.9]),this.prog.set_uniform(\"u_linecaps\",\"vec2\",[p,p]),this.prog.set_uniform(\"u_linejoin\",\"float\",[v]),this.prog.set_uniform(\"u_miter_limit\",\"float\",[10]);const b\u003dg.resolve_line_dash(o.value);let m\u003d0,w\u003d1;b.length\u0026\u0026([m,w]\u003dthis.dash_atlas.get_atlas_data(b)),this.prog.set_uniform(\"u_dash_index\",\"float\",[m]),this.prog.set_uniform(\"u_dash_phase\",\"float\",[n.value]),this.prog.set_uniform(\"u_dash_period\",\"float\",[w]),this.prog.set_uniform(\"u_dash_caps\",\"vec2\",[p,p]),this.prog.set_uniform(\"u_closed\",\"float\",[0])}_bake(){let t,e,s,i,a,o,n,_;const r\u003dthis.nvertices,h\u003dthis.glyph.sx,l\u003dthis.glyph.sy,g\u003dn\u003dnew Float32Array(2*r),u\u003dnew Float32Array(2*r),f\u003d_\u003dnew Float32Array(4*r);for(let t\u003d0,e\u003dr;t\u003ce;t++)g[2*t+0]\u003disFinite(h[t])?h[t]:0,g[2*t+1]\u003disFinite(l[t])?l[t]:0;this.tangents\u003de\u003dnew Float32Array(2*r-2);for(let t\u003d0,s\u003dr-1;t\u003cs;t++)e[2*t+0]\u003dn[2*(t+1)+0]-n[2*t+0],e[2*t+1]\u003dn[2*(t+1)+1]-n[2*t+1];for(let t\u003d0,s\u003dr-1;t\u003cs;t++)f[4*(t+1)+0]\u003de[2*t+0],f[4*(t+1)+1]\u003de[2*t+1],f[4*t+2]\u003de[2*t+0],f[4*t+3]\u003de[2*t+1];f[0]\u003de[0],f[1]\u003de[1],f[4*(r-1)+2]\u003de[2*(r-2)+0],f[4*(r-1)+3]\u003de[2*(r-2)+1];const c\u003dnew Float32Array(r);for(let t\u003d0,e\u003dr;t\u003ce;t++)c[t]\u003dMath.atan2(_[4*t+0]*_[4*t+3]-_[4*t+1]*_[4*t+2],_[4*t+0]*_[4*t+2]+_[4*t+1]*_[4*t+3]);for(let t\u003d0,e\u003dr-1;t\u003ce;t++)u[2*t+0]\u003dc[t],u[2*t+1]\u003dc[t+1];for(let t\u003d0,e\u003dr;t\u003ce;t++)isFinite(h[t])||(g[2*t+0]\u003dh[t]),isFinite(l[t])||(g[2*t+1]\u003dl[t]);const d\u003d4*r-4;this.V_position\u003di\u003dnew Float32Array(2*d),this.V_angles\u003ds\u003dnew Float32Array(2*d),this.V_tangents\u003da\u003dnew Float32Array(4*d),this.V_texcoord\u003do\u003dnew Float32Array(2*d);for(let t\u003d0,e\u003dr;t\u003ce;t++)for(let e\u003d0;e\u003c4;e++){for(let a\u003d0;a\u003c2;a++)i[2*(4*t+e-2)+a]\u003dg[2*t+a],s[2*(4*t+e)+a]\u003du[2*t+a];for(let s\u003d0;s\u003c4;s++)a[4*(4*t+e-2)+s]\u003df[4*t+s]}for(let t\u003d0,e\u003dr;t\u003ce;t++)o[2*(4*t+0)+0]\u003d-1,o[2*(4*t+1)+0]\u003d-1,o[2*(4*t+2)+0]\u003d1,o[2*(4*t+3)+0]\u003d1,o[2*(4*t+0)+1]\u003d-1,o[2*(4*t+1)+1]\u003d1,o[2*(4*t+2)+1]\u003d-1,o[2*(4*t+3)+1]\u003d1;const p\u003d6*(r-1);this.I_triangles\u003dt\u003dnew Uint32Array(p);for(let e\u003d0,s\u003dr;e\u003cs;e++)t[6*e+0]\u003d0+4*e,t[6*e+1]\u003d1+4*e,t[6*e+2]\u003d3+4*e,t[6*e+3]\u003d2+4*e,t[6*e+4]\u003d0+4*e,t[6*e+5]\u003d3+4*e}_update_scale(t,e){let s;const i\u003dthis.nvertices,a\u003d4*i-4,o\u003dthis.tangents,n\u003dnew Float32Array(i-1),_\u003dnew Float32Array(2*i);this.V_segment\u003ds\u003dnew Float32Array(2*a);for(let s\u003d0,a\u003di-1;s\u003ca;s++)n[s]\u003dMath.sqrt((o[2*s+0]*t)**2+(o[2*s+1]*e)**2);let r\u003d0;for(let t\u003d0,e\u003di-1;t\u003ce;t++)r+\u003dn[t],_[2*(t+1)+0]\u003dr,_[2*t+1]\u003dr;for(let t\u003d0,e\u003di;t\u003ce;t++)for(let e\u003d0;e\u003c4;e++)for(let i\u003d0;i\u003c2;i++)s[2*(4*t+e)+i]\u003d_[2*t+i];this.cumsum\u003dr,this.vbo_segment.set_size(4*this.V_segment.length),this.vbo_segment.set_data(0,this.V_segment)}}s.LineGL\u003dd,d.__name__\u003d\"LineGL\"},\n      function _(e,r,f,u,x){u(),x(\"Program\",e(110).Program),x(\"Texture2d\",e(112).Texture2d);var t\u003de(111);x(\"IndexBuffer\",t.IndexBuffer),x(\"VertexBuffer\",t.VertexBuffer)},\n      function _(t,e,i,s,a){s();const r\u003dt(111);class n{constructor(t){this.gl\u003dt,this.UTYPEMAP\u003d{float:\"uniform1fv\",vec2:\"uniform2fv\",vec3:\"uniform3fv\",vec4:\"uniform4fv\",int:\"uniform1iv\",ivec2:\"uniform2iv\",ivec3:\"uniform3iv\",ivec4:\"uniform4iv\",bool:\"uniform1iv\",bvec2:\"uniform2iv\",bvec3:\"uniform3iv\",bvec4:\"uniform4iv\",mat2:\"uniformMatrix2fv\",mat3:\"uniformMatrix3fv\",mat4:\"uniformMatrix4fv\",sampler1D:\"uniform1i\",sampler2D:\"uniform1i\",sampler3D:\"uniform1i\"},this.ATYPEMAP\u003d{float:\"vertexAttrib1f\",vec2:\"vertexAttrib2f\",vec3:\"vertexAttrib3f\",vec4:\"vertexAttrib4f\"},this.ATYPEINFO\u003d{float:[1,5126],vec2:[2,5126],vec3:[3,5126],vec4:[4,5126],vec4_uint8:[4,5121]},this._linked\u003d!1,this._validated\u003d!1,this._unset_variables\u003dnew Set,this._known_invalid\u003dnew Set,this._locations\u003dnew Map,this._samplers\u003dnew Map,this._attributes\u003dnew Map,this.handle\u003dthis.gl.createProgram()}delete(){this.gl.deleteProgram(this.handle)}activate(){this.gl.useProgram(this.handle)}deactivate(){this.gl.useProgram(0)}set_shaders(t,e){const i\u003dthis.gl;this._linked\u003d!1;const s\u003di.createShader(i.VERTEX_SHADER),a\u003di.createShader(i.FRAGMENT_SHADER),r\u003d[[t,s,\"vertex\"],[e,a,\"fragment\"]];for(const[t,e,s]of r){i.shaderSource(e,t),i.compileShader(e);if(!i.getShaderParameter(e,i.COMPILE_STATUS)){const t\u003di.getShaderInfoLog(e);throw new Error(`errors in ${s} shader:\\n${t}`)}}if(i.attachShader(this.handle,s),i.attachShader(this.handle,a),i.linkProgram(this.handle),!i.getProgramParameter(this.handle,i.LINK_STATUS)){const t\u003di.getProgramInfoLog(this.handle);throw new Error(`Program link error:\\n${t}`)}this._unset_variables\u003dthis._get_active_attributes_and_uniforms(),i.detachShader(this.handle,s),i.detachShader(this.handle,a),i.deleteShader(s),i.deleteShader(a),this._known_invalid.clear(),this._linked\u003d!0}_get_active_attributes_and_uniforms(){const t\u003dthis.gl;this._locations.clear();const e\u003dnew RegExp(\"(\\\\w+)\\\\s*(\\\\[(\\\\d+)\\\\])\\\\s*\"),i\u003dt.getProgramParameter(this.handle,t.ACTIVE_UNIFORMS),s\u003d[],a\u003d[],r\u003d[[s,t.getProgramParameter(this.handle,t.ACTIVE_ATTRIBUTES),t.getActiveAttrib,t.getAttribLocation],[a,i,t.getActiveUniform,t.getUniformLocation]];for(const[i,s,a,n]of r)for(let r\u003d0;r\u003cs;r+\u003d1){const s\u003da.call(t,this.handle,r),o\u003ds.name,h\u003do.match(e);if(null!\u003dh){const t\u003dh[1];for(let e\u003d0;e\u003cs.size;e+\u003d1)i.push([`${t}[${e}]`,s.type])}else i.push([o,s.type]);this._locations.set(o,n.call(t,this.handle,o))}const n\u003dnew Set;for(const[t]of s)n.add(t);for(const[t]of a)n.add(t);return n}set_texture(t,e){var i;if(!this._linked)throw new Error(\"Cannot set uniform when program has no code\");const s\u003dnull!\u003d\u003d(i\u003dthis._locations.get(t))\u0026\u0026void 0!\u003d\u003di?i:-1;if(s\u003c0)this._known_invalid.has(t)||(this._known_invalid.add(t),console.log(`\"Variable ${t} is not an active texture`));else{this._unset_variables.has(t)\u0026\u0026this._unset_variables.delete(t),this.activate();{let i\u003dthis._samplers.size;this._samplers.has(t)\u0026\u0026(i\u003dthis._samplers.get(t)[2]),this._samplers.set(t,[e._target,e.handle,i]),this.gl.uniform1i(s,i)}}}set_uniform(t,e,i){var s;if(!this._linked)throw new Error(\"Cannot set uniform when program has no code\");const a\u003dnull!\u003d\u003d(s\u003dthis._locations.get(t))\u0026\u0026void 0!\u003d\u003ds?s:-1;if(a\u003c0)return void(this._known_invalid.has(t)||(this._known_invalid.add(t),console.log(`Variable ${t} is not an active uniform`)));this._unset_variables.has(t)\u0026\u0026this._unset_variables.delete(t);let r\u003d1;if(!e.startsWith(\"mat\")){const t\u003d\"int\"\u003d\u003de||\"bool\"\u003d\u003de?\"float\":e.replace(/^ib/,\"\");r\u003dMath.floor(i.length/this.ATYPEINFO[t][0])}if(r\u003e1)for(let e\u003d0;e\u003cr;e+\u003d1)if(this._unset_variables.has(`${t}[${e}]`)){const i\u003d`${t}[${e}]`;this._unset_variables.has(i)\u0026\u0026this._unset_variables.delete(i)}const n\u003dthis.UTYPEMAP[e];this.activate(),e.startsWith(\"mat\")?this.gl[n](a,!1,i):this.gl[n](a,i)}set_attribute(t,e,i,s\u003d0,a\u003d0,n\u003d!1){var o;if(!this._linked)throw new Error(\"Cannot set attribute when program has no code\");const h\u003dnull!\u003d\u003d(o\u003dthis._locations.get(t))\u0026\u0026void 0!\u003d\u003do?o:-1;if(h\u003c0)this._known_invalid.has(t)||(this._known_invalid.add(t),i instanceof r.VertexBuffer\u0026\u0026a\u003e0||console.log(`Variable ${t} is not an active attribute`));else if(this._unset_variables.has(t)\u0026\u0026this._unset_variables.delete(t),this.activate(),i instanceof r.VertexBuffer){const[r,o]\u003dthis.ATYPEINFO[e],l\u003d\"vertexAttribPointer\",_\u003d[r,o,n,s,a];this._attributes.set(t,[i.handle,h,l,_])}else{const s\u003dthis.ATYPEMAP[e];this._attributes.set(t,[null,h,s,i])}}_pre_draw(){this.activate();for(const[t,e,i]of this._samplers.values())this.gl.activeTexture(this.gl.TEXTURE0+i),this.gl.bindTexture(t,e);for(const[t,e,i,s]of this._attributes.values())null!\u003dt?(this.gl.bindBuffer(this.gl.ARRAY_BUFFER,t),this.gl.enableVertexAttribArray(e),this.gl[i].apply(this.gl,[e,...s])):(this.gl.bindBuffer(this.gl.ARRAY_BUFFER,null),this.gl.disableVertexAttribArray(e),this.gl[i].apply(this.gl,[e,...s]));this._validated||(this._validated\u003d!0,this._validate())}_validate(){if(this._unset_variables.size\u0026\u0026console.log(`Program has unset variables: ${this._unset_variables}`),this.gl.validateProgram(this.handle),!this.gl.getProgramParameter(this.handle,this.gl.VALIDATE_STATUS))throw console.log(this.gl.getProgramInfoLog(this.handle)),new Error(\"Program validation error\")}draw(t,e){if(!this._linked)throw new Error(\"Cannot draw program if code has not been set\");if(e instanceof r.IndexBuffer){this._pre_draw(),e.activate();const i\u003de.buffer_size/2,s\u003dthis.gl.UNSIGNED_SHORT;this.gl.drawElements(t,i,s,0),e.deactivate()}else{const[i,s]\u003de;0!\u003ds\u0026\u0026(this._pre_draw(),this.gl.drawArrays(t,i,s))}}}i.Program\u003dn,n.__name__\u003d\"Program\"},\n      function _(t,e,s,i,a){i();class r{constructor(t){this.gl\u003dt,this._usage\u003d35048,this.buffer_size\u003d0,this.handle\u003dthis.gl.createBuffer()}delete(){this.gl.deleteBuffer(this.handle)}activate(){this.gl.bindBuffer(this._target,this.handle)}deactivate(){this.gl.bindBuffer(this._target,null)}set_size(t){t!\u003dthis.buffer_size\u0026\u0026(this.activate(),this.gl.bufferData(this._target,t,this._usage),this.buffer_size\u003dt)}set_data(t,e){this.activate(),this.gl.bufferSubData(this._target,t,e)}}s.Buffer\u003dr,r.__name__\u003d\"Buffer\";class f extends r{constructor(){super(...arguments),this._target\u003d34962}}s.VertexBuffer\u003df,f.__name__\u003d\"VertexBuffer\";class h extends r{constructor(){super(...arguments),this._target\u003d34963}}s.IndexBuffer\u003dh,h.__name__\u003d\"IndexBuffer\"},\n      function _(t,e,i,a,r){a();const s\u003dt(11);class h{constructor(t){this.gl\u003dt,this._target\u003d3553,this._types\u003d{Int8Array:5120,Uint8Array:5121,Int16Array:5122,Uint16Array:5123,Int32Array:5124,Uint32Array:5125,Float32Array:5126},this.handle\u003dthis.gl.createTexture()}delete(){this.gl.deleteTexture(this.handle)}activate(){this.gl.bindTexture(this._target,this.handle)}deactivate(){this.gl.bindTexture(this._target,0)}_get_alignment(t){const e\u003d[4,8,2,1];for(const i of e)if(t%i\u003d\u003d0)return i;s.unreachable()}set_wrapping(t,e){this.activate(),this.gl.texParameterf(this._target,this.gl.TEXTURE_WRAP_S,t),this.gl.texParameterf(this._target,this.gl.TEXTURE_WRAP_T,e)}set_interpolation(t,e){this.activate(),this.gl.texParameterf(this._target,this.gl.TEXTURE_MIN_FILTER,t),this.gl.texParameterf(this._target,this.gl.TEXTURE_MAG_FILTER,e)}set_size([t,e],i){var a,r,s;t\u003d\u003d(null\u003d\u003d\u003d(a\u003dthis._shape_format)||void 0\u003d\u003d\u003da?void 0:a.width)\u0026\u0026e\u003d\u003d(null\u003d\u003d\u003d(r\u003dthis._shape_format)||void 0\u003d\u003d\u003dr?void 0:r.height)\u0026\u0026i\u003d\u003d(null\u003d\u003d\u003d(s\u003dthis._shape_format)||void 0\u003d\u003d\u003ds?void 0:s.format)||(this._shape_format\u003d{width:t,height:e,format:i},this.activate(),this.gl.texImage2D(this._target,0,i,t,e,0,i,this.gl.UNSIGNED_BYTE,null))}set_data(t,[e,i],a){this.activate();const{format:r}\u003dthis._shape_format,[s,h]\u003dt,l\u003dthis._types[a.constructor.name];if(null\u003d\u003dl)throw new Error(`Type ${a.constructor.name} not allowed for texture`);const _\u003dthis._get_alignment(e);4!\u003d_\u0026\u0026this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,_),this.gl.texSubImage2D(this._target,0,s,h,e,i,r,l,a),4!\u003d_\u0026\u0026this.gl.pixelStorei(this.gl.UNPACK_ALIGNMENT,4)}}i.Texture2d\u003dh,h.__name__\u003d\"Texture2d\"},\n      function _(e,t,s,i,h){i();class a{constructor(e,t){this.gl\u003de,this.glyph\u003dt,this.nvertices\u003d0,this.size_changed\u003d!1,this.data_changed\u003d!1,this.visuals_changed\u003d!1}set_data_changed(){const{data_size:e}\u003dthis.glyph;e!\u003dthis.nvertices\u0026\u0026(this.nvertices\u003de,this.size_changed\u003d!0),this.data_changed\u003d!0}set_visuals_changed(){this.visuals_changed\u003d!0}render(e,t,s){if(0\u003d\u003dt.length)return!0;const{width:i,height:h}\u003dthis.glyph.renderer.plot_view.canvas_view.webgl.canvas,a\u003d{pixel_ratio:this.glyph.renderer.plot_view.canvas_view.pixel_ratio,width:i,height:h};return this.draw(t,s,a),!0}}s.BaseGLGlyph\u003da,a.__name__\u003d\"BaseGLGlyph\"},\n      function _(n,e,t,a,i){a();t.default\u003d\"\\nprecision mediump float;\\n\\nconst float PI \u003d 3.14159265358979323846264;\\nconst float THETA \u003d 15.0 * 3.14159265358979323846264/180.0;\\n\\nuniform float u_pixel_ratio;\\nuniform vec2 u_canvas_size, u_offset;\\nuniform vec2 u_scale_aspect;\\nuniform float u_scale_length;\\n\\nuniform vec4 u_color;\\nuniform float u_antialias;\\nuniform float u_length;\\nuniform float u_linewidth;\\nuniform float u_dash_index;\\nuniform float u_closed;\\n\\nattribute vec2 a_position;\\nattribute vec4 a_tangents;\\nattribute vec2 a_segment;\\nattribute vec2 a_angles;\\nattribute vec2 a_texcoord;\\n\\nvarying vec4  v_color;\\nvarying vec2  v_segment;\\nvarying vec2  v_angles;\\nvarying vec2  v_texcoord;\\nvarying vec2  v_miter;\\nvarying float v_length;\\nvarying float v_linewidth;\\n\\nfloat cross(in vec2 v1, in vec2 v2)\\n{\\n    return v1.x*v2.y - v1.y*v2.x;\\n}\\n\\nfloat signed_distance(in vec2 v1, in vec2 v2, in vec2 v3)\\n{\\n    return cross(v2-v1,v1-v3) / length(v2-v1);\\n}\\n\\nvoid rotate( in vec2 v, in float alpha, out vec2 result )\\n{\\n    float c \u003d cos(alpha);\\n    float s \u003d sin(alpha);\\n    result \u003d vec2( c*v.x - s*v.y,\\n                   s*v.x + c*v.y );\\n}\\n\\nvoid main()\\n{\\n    bool closed \u003d (u_closed \u003e 0.0);\\n\\n    // Attributes and uniforms to varyings\\n    v_color \u003d u_color;\\n    v_linewidth \u003d u_linewidth;\\n    v_segment \u003d a_segment * u_scale_length;\\n    v_length \u003d u_length * u_scale_length;\\n\\n    // Scale to map to pixel coordinates. The original algorithm from the paper\\n    // assumed isotropic scale. We obviously do not have this.\\n    vec2 abs_scale_aspect \u003d abs(u_scale_aspect);\\n    vec2 abs_scale \u003d u_scale_length * abs_scale_aspect;\\n\\n    // Correct angles for aspect ratio\\n    vec2 av;\\n    av \u003d vec2(1.0, tan(a_angles.x)) / abs_scale_aspect;\\n    v_angles.x \u003d atan(av.y, av.x);\\n    av \u003d vec2(1.0, tan(a_angles.y)) / abs_scale_aspect;\\n    v_angles.y \u003d atan(av.y, av.x);\\n\\n    // Thickness below 1 pixel are represented using a 1 pixel thickness\\n    // and a modified alpha\\n    v_color.a \u003d min(v_linewidth, v_color.a);\\n    v_linewidth \u003d max(v_linewidth, 1.0);\\n\\n    // If color is fully transparent we just will discard the fragment anyway\\n    if( v_color.a \u003c\u003d 0.0 ) {\\n        gl_Position \u003d vec4(0.0,0.0,0.0,1.0);\\n        return;\\n    }\\n\\n    // This is the actual half width of the line\\n    float w \u003d ceil(u_antialias+v_linewidth)/2.0;\\n\\n    vec2 position \u003d a_position;\\n\\n    vec2 t1 \u003d normalize(a_tangents.xy * abs_scale_aspect);  // note the scaling for aspect ratio here\\n    vec2 t2 \u003d normalize(a_tangents.zw * abs_scale_aspect);\\n    float u \u003d a_texcoord.x;\\n    float v \u003d a_texcoord.y;\\n    vec2 o1 \u003d vec2( +t1.y, -t1.x);\\n    vec2 o2 \u003d vec2( +t2.y, -t2.x);\\n\\n    // This is a join\\n    // ----------------------------------------------------------------\\n    if( t1 !\u003d t2 ) {\\n        float angle \u003d atan (t1.x*t2.y-t1.y*t2.x, t1.x*t2.x+t1.y*t2.y);  // Angle needs recalculation for some reason\\n        vec2 t  \u003d normalize(t1+t2);\\n        vec2 o  \u003d vec2( + t.y, - t.x);\\n\\n        if ( u_dash_index \u003e 0.0 )\\n        {\\n            // Broken angle\\n            // ----------------------------------------------------------------\\n            if( (abs(angle) \u003e THETA) ) {\\n                position +\u003d v * w * o / cos(angle/2.0);\\n                float s \u003d sign(angle);\\n                if( angle \u003c 0.0 ) {\\n                    if( u \u003d\u003d +1.0 ) {\\n                        u \u003d v_segment.y + v * w * tan(angle/2.0);\\n                        if( v \u003d\u003d 1.0 ) {\\n                            position -\u003d 2.0 * w * t1 / sin(angle);\\n                            u -\u003d 2.0 * w / sin(angle);\\n                        }\\n                    } else {\\n                        u \u003d v_segment.x - v * w * tan(angle/2.0);\\n                        if( v \u003d\u003d 1.0 ) {\\n                            position +\u003d 2.0 * w * t2 / sin(angle);\\n                            u +\u003d 2.0*w / sin(angle);\\n                        }\\n                    }\\n                } else {\\n                    if( u \u003d\u003d +1.0 ) {\\n                        u \u003d v_segment.y + v * w * tan(angle/2.0);\\n                        if( v \u003d\u003d -1.0 ) {\\n                            position +\u003d 2.0 * w * t1 / sin(angle);\\n                            u +\u003d 2.0 * w / sin(angle);\\n                        }\\n                    } else {\\n                        u \u003d v_segment.x - v * w * tan(angle/2.0);\\n                        if( v \u003d\u003d -1.0 ) {\\n                            position -\u003d 2.0 * w * t2 / sin(angle);\\n                            u -\u003d 2.0*w / sin(angle);\\n                        }\\n                    }\\n                }\\n                // Continuous angle\\n                // ------------------------------------------------------------\\n            } else {\\n                position +\u003d v * w * o / cos(angle/2.0);\\n                if( u \u003d\u003d +1.0 ) u \u003d v_segment.y;\\n                else            u \u003d v_segment.x;\\n            }\\n        }\\n\\n        // Solid line\\n        // --------------------------------------------------------------------\\n        else\\n        {\\n            position.xy +\u003d v * w * o / cos(angle/2.0);\\n            if( angle \u003c 0.0 ) {\\n                if( u \u003d\u003d +1.0 ) {\\n                    u \u003d v_segment.y + v * w * tan(angle/2.0);\\n                } else {\\n                    u \u003d v_segment.x - v * w * tan(angle/2.0);\\n                }\\n            } else {\\n                if( u \u003d\u003d +1.0 ) {\\n                    u \u003d v_segment.y + v * w * tan(angle/2.0);\\n                } else {\\n                    u \u003d v_segment.x - v * w * tan(angle/2.0);\\n                }\\n            }\\n        }\\n\\n    // This is a line start or end (t1 \u003d\u003d t2)\\n    // ------------------------------------------------------------------------\\n    } else {\\n        position +\u003d v * w * o1;\\n        if( u \u003d\u003d -1.0 ) {\\n            u \u003d v_segment.x - w;\\n            position -\u003d w * t1;\\n        } else {\\n            u \u003d v_segment.y + w;\\n            position +\u003d w * t2;\\n        }\\n    }\\n\\n    // Miter distance\\n    // ------------------------------------------------------------------------\\n    vec2 t;\\n    vec2 curr \u003d a_position * abs_scale;\\n    if( a_texcoord.x \u003c 0.0 ) {\\n        vec2 next \u003d curr + t2*(v_segment.y-v_segment.x);\\n\\n        rotate( t1, +v_angles.x/2.0, t);\\n        v_miter.x \u003d signed_distance(curr, curr+t, position);\\n\\n        rotate( t2, +v_angles.y/2.0, t);\\n        v_miter.y \u003d signed_distance(next, next+t, position);\\n    } else {\\n        vec2 prev \u003d curr - t1*(v_segment.y-v_segment.x);\\n\\n        rotate( t1, -v_angles.x/2.0,t);\\n        v_miter.x \u003d signed_distance(prev, prev+t, position);\\n\\n        rotate( t2, -v_angles.y/2.0,t);\\n        v_miter.y \u003d signed_distance(curr, curr+t, position);\\n    }\\n\\n    if (!closed \u0026\u0026 v_segment.x \u003c\u003d 0.0) {\\n        v_miter.x \u003d 1e10;\\n    }\\n    if (!closed \u0026\u0026 v_segment.y \u003e\u003d v_length)\\n    {\\n        v_miter.y \u003d 1e10;\\n    }\\n\\n    v_texcoord \u003d vec2( u, v*w );\\n\\n    // Calculate position in device coordinates. Note that we\\n    // already scaled with abs scale above.\\n    vec2 normpos \u003d position * sign(u_scale_aspect);\\n    normpos +\u003d 0.5;  // make up for Bokeh\u0027s offset\\n    normpos /\u003d u_canvas_size / u_pixel_ratio;  // in 0..1\\n    gl_Position \u003d vec4(normpos*2.0-1.0, 0.0, 1.0);\\n    gl_Position.y *\u003d -1.0;\\n}\\n\"},\n      function _(n,t,e,s,a){s();e.default\u003d\"\\nprecision mediump float;\\n\\nconst float PI \u003d 3.14159265358979323846264;\\nconst float THETA \u003d 15.0 * 3.14159265358979323846264/180.0;\\n\\nuniform sampler2D u_dash_atlas;\\n\\nuniform vec2 u_linecaps;\\nuniform float u_miter_limit;\\nuniform float u_linejoin;\\nuniform float u_antialias;\\nuniform float u_dash_phase;\\nuniform float u_dash_period;\\nuniform float u_dash_index;\\nuniform vec2 u_dash_caps;\\nuniform float u_closed;\\n\\nvarying vec4  v_color;\\nvarying vec2  v_segment;\\nvarying vec2  v_angles;\\nvarying vec2  v_texcoord;\\nvarying vec2  v_miter;\\nvarying float v_length;\\nvarying float v_linewidth;\\n\\n// Compute distance to cap ----------------------------------------------------\\nfloat cap( int type, float dx, float dy, float t, float linewidth )\\n{\\n    float d \u003d 0.0;\\n    dx \u003d abs(dx);\\n    dy \u003d abs(dy);\\n    if      (type \u003d\u003d 0)  discard;  // None\\n    else if (type \u003d\u003d 1)  d \u003d sqrt(dx*dx+dy*dy);  // Round\\n    else if (type \u003d\u003d 3)  d \u003d (dx+abs(dy));  // Triangle in\\n    else if (type \u003d\u003d 2)  d \u003d max(abs(dy),(t+dx-abs(dy)));  // Triangle out\\n    else if (type \u003d\u003d 4)  d \u003d max(dx,dy);  // Square\\n    else if (type \u003d\u003d 5)  d \u003d max(dx+t,dy);  // Butt\\n    return d;\\n}\\n\\n// Compute distance to join -------------------------------------------------\\nfloat join( in int type, in float d, in vec2 segment, in vec2 texcoord, in vec2 miter,\\n           in float linewidth )\\n{\\n    // texcoord.x is distance from start\\n    // texcoord.y is distance from centerline\\n    // segment.x and y indicate the limits (as for texcoord.x) for this segment\\n\\n    float dx \u003d texcoord.x;\\n\\n    // Round join\\n    if( type \u003d\u003d 1 ) {\\n        if (dx \u003c segment.x) {\\n            d \u003d max(d,length( texcoord - vec2(segment.x,0.0)));\\n            //d \u003d length( texcoord - vec2(segment.x,0.0));\\n        } else if (dx \u003e segment.y) {\\n            d \u003d max(d,length( texcoord - vec2(segment.y,0.0)));\\n            //d \u003d length( texcoord - vec2(segment.y,0.0));\\n        }\\n    }\\n    // Bevel join\\n    else if ( type \u003d\u003d 2 ) {\\n        if (dx \u003c segment.x) {\\n            vec2 x \u003d texcoord - vec2(segment.x,0.0);\\n            d \u003d max(d, max(abs(x.x), abs(x.y)));\\n\\n        } else if (dx \u003e segment.y) {\\n            vec2 x \u003d texcoord - vec2(segment.y,0.0);\\n            d \u003d max(d, max(abs(x.x), abs(x.y)));\\n        }\\n        /*  Original code for bevel which does not work for us\\n        if( (dx \u003c segment.x) ||  (dx \u003e segment.y) )\\n            d \u003d max(d, min(abs(x.x),abs(x.y)));\\n        */\\n    }\\n\\n    return d;\\n}\\n\\nvoid main()\\n{\\n    // If color is fully transparent we just discard the fragment\\n    if( v_color.a \u003c\u003d 0.0 ) {\\n        discard;\\n    }\\n\\n    // Test if dash pattern is the solid one (0)\\n    bool solid \u003d  (u_dash_index \u003d\u003d 0.0);\\n\\n    // Test if path is closed\\n    bool closed \u003d (u_closed \u003e 0.0);\\n\\n    vec4 color \u003d v_color;\\n    float dx \u003d v_texcoord.x;\\n    float dy \u003d v_texcoord.y;\\n    float t \u003d v_linewidth/2.0-u_antialias;\\n    float width \u003d 1.0;  //v_linewidth; original code had dashes scale with line width, we do not\\n    float d \u003d 0.0;\\n\\n    vec2 linecaps \u003d u_linecaps;\\n    vec2 dash_caps \u003d u_dash_caps;\\n    float line_start \u003d 0.0;\\n    float line_stop \u003d v_length;\\n\\n    // Apply miter limit; fragments too far into the miter are simply discarded\\n    if( (dx \u003c v_segment.x) || (dx \u003e v_segment.y) ) {\\n        float into_miter \u003d max(v_segment.x - dx, dx - v_segment.y);\\n        if (into_miter \u003e u_miter_limit*v_linewidth/2.0)\\n          discard;\\n    }\\n\\n    // Solid line --------------------------------------------------------------\\n    if( solid ) {\\n        d \u003d abs(dy);\\n        if( (!closed) \u0026\u0026 (dx \u003c line_start) ) {\\n            d \u003d cap( int(u_linecaps.x), abs(dx), abs(dy), t, v_linewidth );\\n        }\\n        else if( (!closed) \u0026\u0026  (dx \u003e line_stop) ) {\\n            d \u003d cap( int(u_linecaps.y), abs(dx)-line_stop, abs(dy), t, v_linewidth );\\n        }\\n        else {\\n            d \u003d join( int(u_linejoin), abs(dy), v_segment, v_texcoord, v_miter, v_linewidth );\\n        }\\n\\n    // Dash line --------------------------------------------------------------\\n    } else {\\n        float segment_start \u003d v_segment.x;\\n        float segment_stop  \u003d v_segment.y;\\n        float segment_center\u003d (segment_start+segment_stop)/2.0;\\n        float freq          \u003d u_dash_period*width;\\n        float u \u003d mod( dx + u_dash_phase*width, freq);\\n        vec4 tex \u003d texture2D(u_dash_atlas, vec2(u/freq, u_dash_index)) * 255.0 -10.0;  // conversion to int-like\\n        float dash_center\u003d tex.x * width;\\n        float dash_type  \u003d tex.y;\\n        float _start \u003d tex.z * width;\\n        float _stop  \u003d tex.a * width;\\n        float dash_start \u003d dx - u + _start;\\n        float dash_stop  \u003d dx - u + _stop;\\n\\n        // Compute extents of the first dash (the one relative to v_segment.x)\\n        // Note: this could be computed in the vertex shader\\n        if( (dash_stop \u003c segment_start) \u0026\u0026 (dash_caps.x !\u003d 5.0) ) {\\n            float u \u003d mod(segment_start + u_dash_phase*width, freq);\\n            vec4 tex \u003d texture2D(u_dash_atlas, vec2(u/freq, u_dash_index)) * 255.0 -10.0;  // conversion to int-like\\n            dash_center\u003d tex.x * width;\\n            //dash_type  \u003d tex.y;\\n            float _start \u003d tex.z * width;\\n            float _stop  \u003d tex.a * width;\\n            dash_start \u003d segment_start - u + _start;\\n            dash_stop \u003d segment_start - u + _stop;\\n        }\\n\\n        // Compute extents of the last dash (the one relatives to v_segment.y)\\n        // Note: This could be computed in the vertex shader\\n        else if( (dash_start \u003e segment_stop)  \u0026\u0026 (dash_caps.y !\u003d 5.0) ) {\\n            float u \u003d mod(segment_stop + u_dash_phase*width, freq);\\n            vec4 tex \u003d texture2D(u_dash_atlas, vec2(u/freq, u_dash_index)) * 255.0 -10.0;  // conversion to int-like\\n            dash_center\u003d tex.x * width;\\n            //dash_type  \u003d tex.y;\\n            float _start \u003d tex.z * width;\\n            float _stop  \u003d tex.a * width;\\n            dash_start \u003d segment_stop - u + _start;\\n            dash_stop  \u003d segment_stop - u + _stop;\\n        }\\n\\n        // This test if the we are dealing with a discontinuous angle\\n        bool discontinuous \u003d ((dx \u003c  segment_center) \u0026\u0026 abs(v_angles.x) \u003e THETA) ||\\n                             ((dx \u003e\u003d segment_center) \u0026\u0026 abs(v_angles.y) \u003e THETA);\\n        //if( dx \u003c line_start) discontinuous \u003d false;\\n        //if( dx \u003e line_stop)  discontinuous \u003d false;\\n\\n        float d_join \u003d join( int(u_linejoin), abs(dy),\\n                            v_segment, v_texcoord, v_miter, v_linewidth );\\n\\n        // When path is closed, we do not have room for linecaps, so we make room\\n        // by shortening the total length\\n        if (closed) {\\n             line_start +\u003d v_linewidth/2.0;\\n             line_stop  -\u003d v_linewidth/2.0;\\n        }\\n\\n        // We also need to take antialias area into account\\n        //line_start +\u003d u_antialias;\\n        //line_stop  -\u003d u_antialias;\\n\\n        // Check is dash stop is before line start\\n        if( dash_stop \u003c\u003d line_start ) {\\n            discard;\\n        }\\n        // Check is dash start is beyond line stop\\n        if( dash_start \u003e\u003d line_stop ) {\\n            discard;\\n        }\\n\\n        // Check if current dash start is beyond segment stop\\n        if( discontinuous ) {\\n            // Dash start is beyond segment, we discard\\n            if( (dash_start \u003e segment_stop) ) {\\n                discard;\\n                //gl_FragColor \u003d vec4(1.0,0.0,0.0,.25); return;\\n            }\\n\\n            // Dash stop is before segment, we discard\\n            if( (dash_stop \u003c segment_start) ) {\\n                discard;  //gl_FragColor \u003d vec4(0.0,1.0,0.0,.25); return;\\n            }\\n\\n            // Special case for round caps (nicer with this)\\n            if( dash_caps.x \u003d\u003d 1.0 ) {\\n                if( (u \u003e _stop) \u0026\u0026 (dash_stop \u003e segment_stop )  \u0026\u0026 (abs(v_angles.y) \u003c PI/2.0)) {\\n                    discard;\\n                }\\n            }\\n\\n            // Special case for round caps  (nicer with this)\\n            if( dash_caps.y \u003d\u003d 1.0 ) {\\n                if( (u \u003c _start) \u0026\u0026 (dash_start \u003c segment_start )  \u0026\u0026 (abs(v_angles.x) \u003c PI/2.0)) {\\n                    discard;\\n                }\\n            }\\n\\n            // Special case for triangle caps (in \u0026 out) and square\\n            // We make sure the cap stop at crossing frontier\\n            if( (dash_caps.x !\u003d 1.0) \u0026\u0026 (dash_caps.x !\u003d 5.0) ) {\\n                if( (dash_start \u003c segment_start )  \u0026\u0026 (abs(v_angles.x) \u003c PI/2.0) ) {\\n                    float a \u003d v_angles.x/2.0;\\n                    float x \u003d (segment_start-dx)*cos(a) - dy*sin(a);\\n                    float y \u003d (segment_start-dx)*sin(a) + dy*cos(a);\\n                    if( x \u003e 0.0 ) discard;\\n                    // We transform the cap into square to avoid holes\\n                    dash_caps.x \u003d 4.0;\\n                }\\n            }\\n\\n            // Special case for triangle caps (in \u0026 out) and square\\n            // We make sure the cap stop at crossing frontier\\n            if( (dash_caps.y !\u003d 1.0) \u0026\u0026 (dash_caps.y !\u003d 5.0) ) {\\n                if( (dash_stop \u003e segment_stop )  \u0026\u0026 (abs(v_angles.y) \u003c PI/2.0) ) {\\n                    float a \u003d v_angles.y/2.0;\\n                    float x \u003d (dx-segment_stop)*cos(a) - dy*sin(a);\\n                    float y \u003d (dx-segment_stop)*sin(a) + dy*cos(a);\\n                    if( x \u003e 0.0 ) discard;\\n                    // We transform the caps into square to avoid holes\\n                    dash_caps.y \u003d 4.0;\\n                }\\n            }\\n        }\\n\\n        // Line cap at start\\n        if( (dx \u003c line_start) \u0026\u0026 (dash_start \u003c line_start) \u0026\u0026 (dash_stop \u003e line_start) ) {\\n            d \u003d cap( int(linecaps.x), dx-line_start, dy, t, v_linewidth);\\n        }\\n        // Line cap at stop\\n        else if( (dx \u003e line_stop) \u0026\u0026 (dash_stop \u003e line_stop) \u0026\u0026 (dash_start \u003c line_stop) ) {\\n            d \u003d cap( int(linecaps.y), dx-line_stop, dy, t, v_linewidth);\\n        }\\n        // Dash cap left - dash_type \u003d -1, 0 or 1, but there may be roundoff errors\\n        else if( dash_type \u003c -0.5 ) {\\n            d \u003d cap( int(dash_caps.y), abs(u-dash_center), dy, t, v_linewidth);\\n            if( (dx \u003e line_start) \u0026\u0026 (dx \u003c line_stop) )\\n                d \u003d max(d,d_join);\\n        }\\n        // Dash cap right\\n        else if( dash_type \u003e 0.5 ) {\\n            d \u003d cap( int(dash_caps.x), abs(dash_center-u), dy, t, v_linewidth);\\n            if( (dx \u003e line_start) \u0026\u0026 (dx \u003c line_stop) )\\n                d \u003d max(d,d_join);\\n        }\\n        // Dash body (plain)\\n        else {// if( dash_type \u003e -0.5 \u0026\u0026  dash_type \u003c 0.5) {\\n            d \u003d abs(dy);\\n        }\\n\\n        // Line join\\n        if( (dx \u003e line_start) \u0026\u0026 (dx \u003c line_stop)) {\\n            if( (dx \u003c\u003d segment_start) \u0026\u0026 (dash_start \u003c\u003d segment_start)\\n                \u0026\u0026 (dash_stop \u003e\u003d segment_start) ) {\\n                d \u003d d_join;\\n                // Antialias at outer border\\n                float angle \u003d PI/2.+v_angles.x;\\n                float f \u003d abs( (segment_start - dx)*cos(angle) - dy*sin(angle));\\n                d \u003d max(f,d);\\n            }\\n            else if( (dx \u003e segment_stop) \u0026\u0026 (dash_start \u003c\u003d segment_stop)\\n                     \u0026\u0026 (dash_stop \u003e\u003d segment_stop) ) {\\n                d \u003d d_join;\\n                // Antialias at outer border\\n                float angle \u003d PI/2.+v_angles.y;\\n                float f \u003d abs((dx - segment_stop)*cos(angle) - dy*sin(angle));\\n                d \u003d max(f,d);\\n            }\\n            else if( dx \u003c (segment_start - v_linewidth/2.)) {\\n                discard;\\n            }\\n            else if( dx \u003e (segment_stop + v_linewidth/2.)) {\\n                discard;\\n            }\\n        }\\n        else if( dx \u003c (segment_start - v_linewidth/2.)) {\\n            discard;\\n        }\\n        else if( dx \u003e (segment_stop + v_linewidth/2.)) {\\n            discard;\\n        }\\n    }\\n\\n    // Distance to border ------------------------------------------------------\\n    d \u003d d - t;\\n    if( d \u003c 0.0 ) {\\n        gl_FragColor \u003d color;\\n    } else {\\n        d /\u003d u_antialias;\\n        gl_FragColor \u003d vec4(color.rgb, exp(-d*d)*color.a);\\n    }\\n}\\n\"},\n      function _(i,t,s,e,l){e();const a\u003di(1),n\u003di(64),_\u003di(106),o\u003da.__importStar(i(107)),h\u003da.__importStar(i(48)),c\u003di(59);class r extends n.XYGlyphView{_inner_loop(i,t,s,e,l){for(const a of t){const t\u003ds[a],n\u003de[a];0!\u003da?isNaN(t+n)?(i.closePath(),l.apply(i),i.beginPath()):i.lineTo(t,n):(i.beginPath(),i.moveTo(t,n))}i.closePath(),l.call(i)}_render(i,t,s){const{sx:e,sy:l}\u003dnull!\u003ds?s:this;this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_value(i),this._inner_loop(i,t,e,l,i.fill)),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_value(i),this._inner_loop(i,t,e,l,i.fill)),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_value(i),this._inner_loop(i,t,e,l,i.stroke))}draw_legend_for_index(i,t,s){_.generic_area_scalar_legend(this.visuals,i,t)}_hit_point(i){const t\u003dnew c.Selection;return o.point_in_poly(i.sx,i.sy,this.sx,this.sy)\u0026\u0026(t.add_to_selected_glyphs(this.model),t.view\u003dthis),t}}s.PatchView\u003dr,r.__name__\u003d\"PatchView\";class p extends n.XYGlyph{constructor(i){super(i)}static init_Patch(){this.prototype.default_view\u003dr,this.mixins([h.LineScalar,h.FillScalar,h.HatchScalar])}}s.Patch\u003dp,p.__name__\u003d\"Patch\",p.init_Patch()},\n      function _(t,e,s,i,n){i();const a\u003dt(1),r\u003dt(24),h\u003dt(118),_\u003da.__importStar(t(107)),l\u003da.__importStar(t(18)),o\u003dt(59);class c extends h.AreaView{_index_data(t){const{min:e,max:s}\u003dMath,{data_size:i}\u003dthis;for(let n\u003d0;n\u003ci;n++){const i\u003dthis._x1[n],a\u003dthis._x2[n],r\u003dthis._y[n];isNaN(i+a+r)||!isFinite(i+a+r)?t.add_empty():t.add(e(i,a),r,s(i,a),r)}}_inner(t,e,s,i,n){t.beginPath();for(let s\u003d0,n\u003de.length;s\u003cn;s++)t.lineTo(e[s],i[s]);for(let e\u003ds.length-1;e\u003e\u003d0;e--)t.lineTo(s[e],i[e]);t.closePath(),n.call(t)}_render(t,e,s){const{sx1:i,sx2:n,sy:a}\u003dnull!\u003ds?s:this;this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_value(t),this._inner(t,i,n,a,t.fill)),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_value(t),this._inner(t,i,n,a,t.fill))}_hit_point(t){const e\u003dthis.sy.length,s\u003dnew r.ScreenArray(2*e),i\u003dnew r.ScreenArray(2*e);for(let t\u003d0,n\u003de;t\u003cn;t++)s[t]\u003dthis.sx1[t],i[t]\u003dthis.sy[t],s[e+t]\u003dthis.sx2[e-t-1],i[e+t]\u003dthis.sy[e-t-1];const n\u003dnew o.Selection;return _.point_in_poly(t.sx,t.sy,s,i)\u0026\u0026(n.add_to_selected_glyphs(this.model),n.view\u003dthis),n}scenterxy(t){return[(this.sx1[t]+this.sx2[t])/2,this.sy[t]]}_map_data(){this.sx1\u003dthis.renderer.xscale.v_compute(this._x1),this.sx2\u003dthis.renderer.xscale.v_compute(this._x2),this.sy\u003dthis.renderer.yscale.v_compute(this._y)}}s.HAreaView\u003dc,c.__name__\u003d\"HAreaView\";class d extends h.Area{constructor(t){super(t)}static init_HArea(){this.prototype.default_view\u003dc,this.define((({})\u003d\u003e({x1:[l.XCoordinateSpec,{field:\"x1\"}],x2:[l.XCoordinateSpec,{field:\"x2\"}],y:[l.YCoordinateSpec,{field:\"y\"}]})))}}s.HArea\u003dd,d.__name__\u003d\"HArea\",d.init_HArea()},\n      function _(e,a,_,i,r){i();const s\u003de(1),n\u003de(98),t\u003de(106),c\u003ds.__importStar(e(48));class l extends n.GlyphView{draw_legend_for_index(e,a,_){t.generic_area_scalar_legend(this.visuals,e,a)}}_.AreaView\u003dl,l.__name__\u003d\"AreaView\";class d extends n.Glyph{constructor(e){super(e)}static init_Area(){this.mixins([c.FillScalar,c.HatchScalar])}}_.Area\u003dd,d.__name__\u003d\"Area\",d.init_Area()},\n      function _(t,e,s,i,n){i();const a\u003dt(1),r\u003dt(24),h\u003dt(118),_\u003da.__importStar(t(107)),l\u003da.__importStar(t(18)),o\u003dt(59);class c extends h.AreaView{_index_data(t){const{min:e,max:s}\u003dMath,{data_size:i}\u003dthis;for(let n\u003d0;n\u003ci;n++){const i\u003dthis._x[n],a\u003dthis._y1[n],r\u003dthis._y2[n];isNaN(i+a+r)||!isFinite(i+a+r)?t.add_empty():t.add(i,e(a,r),i,s(a,r))}}_inner(t,e,s,i,n){t.beginPath();for(let i\u003d0,n\u003ds.length;i\u003cn;i++)t.lineTo(e[i],s[i]);for(let s\u003di.length-1;s\u003e\u003d0;s--)t.lineTo(e[s],i[s]);t.closePath(),n.call(t)}_render(t,e,s){const{sx:i,sy1:n,sy2:a}\u003dnull!\u003ds?s:this;this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_value(t),this._inner(t,i,n,a,t.fill)),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_value(t),this._inner(t,i,n,a,t.fill))}scenterxy(t){return[this.sx[t],(this.sy1[t]+this.sy2[t])/2]}_hit_point(t){const e\u003dthis.sx.length,s\u003dnew r.ScreenArray(2*e),i\u003dnew r.ScreenArray(2*e);for(let t\u003d0,n\u003de;t\u003cn;t++)s[t]\u003dthis.sx[t],i[t]\u003dthis.sy1[t],s[e+t]\u003dthis.sx[e-t-1],i[e+t]\u003dthis.sy2[e-t-1];const n\u003dnew o.Selection;return _.point_in_poly(t.sx,t.sy,s,i)\u0026\u0026(n.add_to_selected_glyphs(this.model),n.view\u003dthis),n}_map_data(){this.sx\u003dthis.renderer.xscale.v_compute(this._x),this.sy1\u003dthis.renderer.yscale.v_compute(this._y1),this.sy2\u003dthis.renderer.yscale.v_compute(this._y2)}}s.VAreaView\u003dc,c.__name__\u003d\"VAreaView\";class d extends h.Area{constructor(t){super(t)}static init_VArea(){this.prototype.default_view\u003dc,this.define((({})\u003d\u003e({x:[l.XCoordinateSpec,{field:\"x\"}],y1:[l.YCoordinateSpec,{field:\"y1\"}],y2:[l.YCoordinateSpec,{field:\"y2\"}]})))}}s.VArea\u003dd,d.__name__\u003d\"VArea\",d.init_VArea()},\n      function _(i,e,s,t,n){t();const c\u003di(53),o\u003di(59),r\u003di(24),a\u003di(121),u\u003di(57);class _ extends c.Model{constructor(i){super(i)}static init_CDSView(){this.define((({Array:i,Ref:e})\u003d\u003e({filters:[i(e(a.Filter)),[]],source:[e(u.ColumnarDataSource)]}))),this.internal((({Int:i,Dict:e,Ref:s,Nullable:t})\u003d\u003e({indices:[s(r.Indices)],indices_map:[e(i),{}],masked:[t(s(r.Indices)),null]})))}initialize(){super.initialize(),this.compute_indices()}connect_signals(){super.connect_signals(),this.connect(this.properties.filters.change,(()\u003d\u003ethis.compute_indices()));const i\u003d()\u003d\u003e{const i\u003d()\u003d\u003ethis.compute_indices();null!\u003dthis.source\u0026\u0026(this.connect(this.source.change,i),this.source instanceof u.ColumnarDataSource\u0026\u0026(this.connect(this.source.streaming,i),this.connect(this.source.patching,i)))};let e\u003dnull!\u003dthis.source;e?i():this.connect(this.properties.source.change,(()\u003d\u003e{e||(i(),e\u003d!0)}))}compute_indices(){var i;const{source:e}\u003dthis;if(null\u003d\u003de)return;const s\u003dnull!\u003d\u003d(i\u003de.get_length())\u0026\u0026void 0!\u003d\u003di?i:1,t\u003dr.Indices.all_set(s);for(const i of this.filters)t.intersect(i.compute_indices(e));this.indices\u003dt,this._indices\u003d[...t],this.indices_map_to_subset()}indices_map_to_subset(){this.indices_map\u003d{};for(let i\u003d0;i\u003cthis._indices.length;i++)this.indices_map[this._indices[i]]\u003di}convert_selection_from_subset(i){const e\u003di.indices.map((i\u003d\u003ethis._indices[i]));return new o.Selection(Object.assign(Object.assign({},i.attributes),{indices:e}))}convert_selection_to_subset(i){const e\u003di.indices.map((i\u003d\u003ethis.indices_map[i]));return new o.Selection(Object.assign(Object.assign({},i.attributes),{indices:e}))}convert_indices_from_subset(i){return i.map((i\u003d\u003ethis._indices[i]))}}s.CDSView\u003d_,_.__name__\u003d\"CDSView\",_.init_CDSView()},\n      function _(e,t,n,s,c){s();const o\u003de(53);class r extends o.Model{constructor(e){super(e)}}n.Filter\u003dr,r.__name__\u003d\"Filter\"},\n      function _(n,e,t,i,o){i();const s\u003dn(9);async function c(n,e,t){const i\u003dnew n(Object.assign(Object.assign({},t),{model:e}));return i.initialize(),await i.lazy_initialize(),i}t.build_view\u003dasync function(n,e\u003d{parent:null},t\u003d(n\u003d\u003en.default_view)){const i\u003dawait c(t(n),n,e);return i.connect_signals(),i},t.build_views\u003dasync function(n,e,t\u003d{parent:null},i\u003d(n\u003d\u003en.default_view)){const o\u003ds.difference([...n.keys()],e);for(const e of o)n.get(e).remove(),n.delete(e);const a\u003d[],f\u003de.filter((e\u003d\u003e!n.has(e)));for(const e of f){const o\u003dawait c(i(e),e,t);n.set(e,o),a.push(o)}for(const n of a)n.connect_signals();return a},t.remove_views\u003dfunction(n){for(const[e,t]of n)t.remove(),n.delete(e)}},\n      function _(e,r,n,t,i){t();const s\u003de(62),o\u003de(61),l\u003de(124),d\u003de(125),a\u003de(126),p\u003de(122),_\u003de(64),h\u003de(127),c\u003de(128),u\u003de(11);class y extends s.DataRendererView{get glyph_view(){return this.node_view.glyph}async lazy_initialize(){await super.lazy_initialize();const e\u003dthis.model;let r\u003dnull,n\u003dnull;const t\u003dnew class extends l.Expression{_v_compute(n){u.assert(null\u003d\u003dr);const[t]\u003dr\u003de.layout_provider.get_edge_coordinates(n);return t}},i\u003dnew class extends l.Expression{_v_compute(e){u.assert(null!\u003dr);const[,n]\u003dr;return r\u003dnull,n}},s\u003dnew class extends l.Expression{_v_compute(r){u.assert(null\u003d\u003dn);const[t]\u003dn\u003de.layout_provider.get_node_coordinates(r);return t}},o\u003dnew class extends l.Expression{_v_compute(e){u.assert(null!\u003dn);const[,r]\u003dn;return n\u003dnull,r}},{edge_renderer:d,node_renderer:a}\u003dthis.model;if(!(d.glyph instanceof h.MultiLine||d.glyph instanceof c.Patches))throw new Error(`${this}.edge_renderer.glyph must be a MultiLine glyph`);if(!(a.glyph instanceof _.XYGlyph))throw new Error(`${this}.node_renderer.glyph must be a XYGlyph glyph`);d.glyph.properties.xs.internal\u003d!0,d.glyph.properties.ys.internal\u003d!0,a.glyph.properties.x.internal\u003d!0,a.glyph.properties.y.internal\u003d!0,d.glyph.xs\u003d{expr:t},d.glyph.ys\u003d{expr:i},a.glyph.x\u003d{expr:s},a.glyph.y\u003d{expr:o};const{parent:y}\u003dthis;this.edge_view\u003dawait p.build_view(d,{parent:y}),this.node_view\u003dawait p.build_view(a,{parent:y})}connect_signals(){super.connect_signals(),this.connect(this.model.layout_provider.change,(()\u003d\u003e{this.edge_view.set_data(),this.node_view.set_data(),this.request_render()}))}remove(){this.edge_view.remove(),this.node_view.remove(),super.remove()}_render(){this.edge_view.render(),this.node_view.render()}renderer_view(e){if(e instanceof o.GlyphRenderer){if(e\u003d\u003dthis.edge_view.model)return this.edge_view;if(e\u003d\u003dthis.node_view.model)return this.node_view}return super.renderer_view(e)}}n.GraphRendererView\u003dy,y.__name__\u003d\"GraphRendererView\";class g extends s.DataRenderer{constructor(e){super(e)}static init_GraphRenderer(){this.prototype.default_view\u003dy,this.define((({Ref:e})\u003d\u003e({layout_provider:[e(d.LayoutProvider)],node_renderer:[e(o.GlyphRenderer)],edge_renderer:[e(o.GlyphRenderer)],selection_policy:[e(a.GraphHitTestPolicy),()\u003d\u003enew a.NodesOnly],inspection_policy:[e(a.GraphHitTestPolicy),()\u003d\u003enew a.NodesOnly]})))}get_selection_manager(){return this.node_renderer.data_source.selection_manager}}n.GraphRenderer\u003dg,g.__name__\u003d\"GraphRenderer\",g.init_GraphRenderer()},\n      function _(e,t,s,n,i){n();const c\u003de(53);class l extends c.Model{constructor(e){super(e)}initialize(){super.initialize(),this._connected\u003dnew Set,this._result\u003dnew Map}v_compute(e){this._connected.has(e)||(this.connect(e.change,(()\u003d\u003ethis._result.delete(e))),this.connect(e.patching,(()\u003d\u003ethis._result.delete(e))),this.connect(e.streaming,(()\u003d\u003ethis._result.delete(e))),this._connected.add(e));let t\u003dthis._result.get(e);return null\u003d\u003dt\u0026\u0026(t\u003dthis._v_compute(e),this._result.set(e,t)),t}}s.Expression\u003dl,l.__name__\u003d\"Expression\";class h extends c.Model{constructor(e){super(e)}initialize(){super.initialize(),this._connected\u003dnew Set,this._result\u003dnew Map}compute(e){this._connected.has(e)||(this.connect(e.change,(()\u003d\u003ethis._result.delete(e))),this.connect(e.patching,(()\u003d\u003ethis._result.delete(e))),this.connect(e.streaming,(()\u003d\u003ethis._result.delete(e))),this._connected.add(e));let t\u003dthis._result.get(e);return null\u003d\u003dt\u0026\u0026(t\u003dthis._compute(e),this._result.set(e,t)),t}}s.ScalarExpression\u003dh,h.__name__\u003d\"ScalarExpression\"},\n      function _(o,e,r,t,n){t();const s\u003do(53);class c extends s.Model{constructor(o){super(o)}}r.LayoutProvider\u003dc,c.__name__\u003d\"LayoutProvider\"},\n      function _(e,t,d,n,s){n();const o\u003de(53),r\u003de(12),_\u003de(9),i\u003de(59);class c extends o.Model{constructor(e){super(e)}_hit_test(e,t,d){if(!t.model.visible)return null;const n\u003dd.glyph.hit_test(e);return null\u003d\u003dn?null:d.model.view.convert_selection_from_subset(n)}}d.GraphHitTestPolicy\u003dc,c.__name__\u003d\"GraphHitTestPolicy\";class a extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.edge_view)}do_selection(e,t,d,n){if(null\u003d\u003de)return!1;const s\u003dt.edge_renderer.data_source.selected;return s.update(e,d,n),t.edge_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null\u003d\u003de)return!1;const{edge_renderer:o}\u003dd.model,r\u003do.get_selection_manager().get_or_create_inspector(d.edge_view.model);return r.update(e,n,s),d.edge_view.model.data_source.setv({inspected:r},{silent:!0}),d.edge_view.model.data_source.inspect.emit([d.edge_view.model,{geometry:t}]),!r.is_empty()}}d.EdgesOnly\u003da,a.__name__\u003d\"EdgesOnly\";class l extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.node_view)}do_selection(e,t,d,n){if(null\u003d\u003de)return!1;const s\u003dt.node_renderer.data_source.selected;return s.update(e,d,n),t.node_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null\u003d\u003de)return!1;const{node_renderer:o}\u003dd.model,r\u003do.get_selection_manager().get_or_create_inspector(d.node_view.model);return r.update(e,n,s),d.node_view.model.data_source.setv({inspected:r},{silent:!0}),d.node_view.model.data_source.inspect.emit([d.node_view.model,{geometry:t}]),!r.is_empty()}}d.NodesOnly\u003dl,l.__name__\u003d\"NodesOnly\";class u extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.node_view)}get_linked_edges(e,t,d){let n\u003d[];\"selection\"\u003d\u003dd?n\u003de.selected.indices.map((t\u003d\u003ee.data.index[t])):\"inspection\"\u003d\u003dd\u0026\u0026(n\u003de.inspected.indices.map((t\u003d\u003ee.data.index[t])));const s\u003d[];for(let e\u003d0;e\u003ct.data.start.length;e++)(_.contains(n,t.data.start[e])||_.contains(n,t.data.end[e]))\u0026\u0026s.push(e);const o\u003dnew i.Selection;for(const e of s)o.multiline_indices[e]\u003d[0];return o.indices\u003ds,o}do_selection(e,t,d,n){if(null\u003d\u003de)return!1;const s\u003dt.node_renderer.data_source.selected;s.update(e,d,n);const o\u003dt.edge_renderer.data_source.selected,r\u003dthis.get_linked_edges(t.node_renderer.data_source,t.edge_renderer.data_source,\"selection\");return o.update(r,d,n),t.node_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null\u003d\u003de)return!1;const o\u003dd.node_view.model.data_source.selection_manager.get_or_create_inspector(d.node_view.model);o.update(e,n,s),d.node_view.model.data_source.setv({inspected:o},{silent:!0});const r\u003dd.edge_view.model.data_source.selection_manager.get_or_create_inspector(d.edge_view.model),_\u003dthis.get_linked_edges(d.node_view.model.data_source,d.edge_view.model.data_source,\"inspection\");return r.update(_,n,s),d.edge_view.model.data_source.setv({inspected:r},{silent:!0}),d.node_view.model.data_source.inspect.emit([d.node_view.model,{geometry:t}]),!o.is_empty()}}d.NodesAndLinkedEdges\u003du,u.__name__\u003d\"NodesAndLinkedEdges\";class m extends c{constructor(e){super(e)}hit_test(e,t){return this._hit_test(e,t,t.edge_view)}get_linked_nodes(e,t,d){let n\u003d[];\"selection\"\u003d\u003dd?n\u003dt.selected.indices:\"inspection\"\u003d\u003dd\u0026\u0026(n\u003dt.inspected.indices);const s\u003d[];for(const e of n)s.push(t.data.start[e]),s.push(t.data.end[e]);const o\u003d_.uniq(s).map((t\u003d\u003er.indexOf(e.data.index,t)));return new i.Selection({indices:o})}do_selection(e,t,d,n){if(null\u003d\u003de)return!1;const s\u003dt.edge_renderer.data_source.selected;s.update(e,d,n);const o\u003dt.node_renderer.data_source.selected,r\u003dthis.get_linked_nodes(t.node_renderer.data_source,t.edge_renderer.data_source,\"selection\");return o.update(r,d,n),t.edge_renderer.data_source._select.emit(),!s.is_empty()}do_inspection(e,t,d,n,s){if(null\u003d\u003de)return!1;const o\u003dd.edge_view.model.data_source.selection_manager.get_or_create_inspector(d.edge_view.model);o.update(e,n,s),d.edge_view.model.data_source.setv({inspected:o},{silent:!0});const r\u003dd.node_view.model.data_source.selection_manager.get_or_create_inspector(d.node_view.model),_\u003dthis.get_linked_nodes(d.node_view.model.data_source,d.edge_view.model.data_source,\"inspection\");return r.update(_,n,s),d.node_view.model.data_source.setv({inspected:r},{silent:!0}),d.edge_view.model.data_source.inspect.emit([d.edge_view.model,{geometry:t}]),!o.is_empty()}}d.EdgesAndLinkedNodes\u003dm,m.__name__\u003d\"EdgesAndLinkedNodes\"},\n      function _(t,e,i,n,s){n();const o\u003dt(1),l\u003dt(65),r\u003dt(48),_\u003do.__importStar(t(107)),c\u003do.__importStar(t(18)),h\u003dt(12),a\u003dt(13),d\u003dt(98),x\u003dt(106),y\u003dt(59);class g extends d.GlyphView{_project_data(){l.inplace.project_xy(this._xs.array,this._ys.array)}_index_data(t){const{data_size:e}\u003dthis;for(let i\u003d0;i\u003ce;i++){const e\u003dthis._xs.get(i);if(0\u003d\u003de.length){t.add_empty();continue}const n\u003dthis._ys.get(i);if(0\u003d\u003dn.length){t.add_empty();continue}const[s,o]\u003dh.minmax(e),[l,r]\u003dh.minmax(n);t.add(s,l,o,r)}}_render(t,e,i){const{sxs:n,sys:s}\u003dnull!\u003di?i:this;for(const i of e){const e\u003dn.get(i),o\u003ds.get(i),l\u003dMath.min(e.length,o.length);let r\u003d!0;t.beginPath();for(let i\u003d0;i\u003cl;i++){const n\u003de[i],s\u003do[i];isFinite(n+s)?r?(t.moveTo(n,s),r\u003d!1):t.lineTo(n,s):r\u003d!0}this.visuals.line.set_vectorize(t,i),t.stroke()}}_hit_point(t){const e\u003d{x:t.sx,y:t.sy};let i\u003d9999;const n\u003dnew Map;for(let t\u003d0,s\u003dthis.sxs.length;t\u003cs;t++){const s\u003dMath.max(2,this.line_width.get(t)/2),o\u003dthis.sxs.get(t),l\u003dthis.sys.get(t);let r\u003dnull;for(let t\u003d0,n\u003do.length-1;t\u003cn;t++){const n\u003d{x:o[t],y:l[t]},c\u003d{x:o[t+1],y:l[t+1]},h\u003d_.dist_to_segment(e,n,c);h\u003cs\u0026\u0026h\u003ci\u0026\u0026(i\u003dh,r\u003d[t])}null!\u003dr\u0026\u0026n.set(t,r)}return new y.Selection({indices:[...n.keys()],multiline_indices:a.to_object(n)})}_hit_span(t){const{sx:e,sy:i}\u003dt;let n,s;\"v\"\u003d\u003dt.direction?(n\u003dthis.renderer.yscale.invert(i),s\u003dthis._ys):(n\u003dthis.renderer.xscale.invert(e),s\u003dthis._xs);const o\u003dnew Map;for(let t\u003d0,e\u003ds.length;t\u003ce;t++){const e\u003ds.get(t),i\u003d[];for(let t\u003d0,s\u003de.length-1;t\u003cs;t++)e[t]\u003c\u003dn\u0026\u0026n\u003c\u003de[t+1]\u0026\u0026i.push(t);i.length\u003e0\u0026\u0026o.set(t,i)}return new y.Selection({indices:[...o.keys()],multiline_indices:a.to_object(o)})}get_interpolation_hit(t,e,i){const n\u003dthis._xs.get(t),s\u003dthis._ys.get(t),o\u003dn[e],l\u003ds[e],r\u003dn[e+1],_\u003ds[e+1];return x.line_interpolation(this.renderer,i,o,l,r,_)}draw_legend_for_index(t,e,i){x.generic_line_vector_legend(this.visuals,t,e,i)}scenterxy(){throw new Error(`${this}.scenterxy() is not implemented`)}}i.MultiLineView\u003dg,g.__name__\u003d\"MultiLineView\";class u extends d.Glyph{constructor(t){super(t)}static init_MultiLine(){this.prototype.default_view\u003dg,this.define((({})\u003d\u003e({xs:[c.XCoordinateSeqSpec,{field:\"xs\"}],ys:[c.YCoordinateSeqSpec,{field:\"ys\"}]}))),this.mixins(r.LineVector)}}i.MultiLine\u003du,u.__name__\u003d\"MultiLine\",u.init_MultiLine()},\n      function _(e,t,s,i,n){i();const r\u003de(1),o\u003de(98),a\u003de(106),_\u003de(12),c\u003de(48),l\u003dr.__importStar(e(107)),h\u003dr.__importStar(e(18)),d\u003de(59),y\u003de(11),p\u003de(65);class x extends o.GlyphView{_project_data(){p.inplace.project_xy(this._xs.array,this._ys.array)}_index_data(e){const{data_size:t}\u003dthis;for(let s\u003d0;s\u003ct;s++){const t\u003dthis._xs.get(s),i\u003dthis._ys.get(s);if(0\u003d\u003dt.length)e.add_empty();else{const[s,n]\u003d_.minmax(t),[r,o]\u003d_.minmax(i);e.add(s,r,n,o)}}}_mask_data(){const{x_range:e,y_range:t}\u003dthis.renderer.plot_view.frame;return this.index.indices({x0:e.min,x1:e.max,y0:t.min,y1:t.max})}_inner_loop(e,t,s,i){for(let n\u003d0,r\u003dt.length;n\u003cr;n++)0!\u003dn?isNaN(t[n]+s[n])?(e.closePath(),i.apply(e),e.beginPath()):e.lineTo(t[n],s[n]):(e.beginPath(),e.moveTo(t[n],s[n]));e.closePath(),i.call(e)}_render(e,t,s){const{sxs:i,sys:n}\u003dnull!\u003ds?s:this;for(const s of t){const t\u003di.get(s),r\u003dn.get(s);this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(e,s),this._inner_loop(e,t,r,e.fill)),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(e,s),this._inner_loop(e,t,r,e.fill)),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(e,s),this._inner_loop(e,t,r,e.stroke))}}_hit_rect(e){const{sx0:t,sx1:s,sy0:i,sy1:n}\u003de,r\u003d[t,s,s,t],o\u003d[i,i,n,n],[a,_]\u003dthis.renderer.xscale.r_invert(t,s),[c,h]\u003dthis.renderer.yscale.r_invert(i,n),y\u003dthis.index.indices({x0:a,x1:_,y0:c,y1:h}),p\u003d[];for(const e of y){const t\u003dthis.sxs.get(e),s\u003dthis.sys.get(e);let i\u003d!0;for(let e\u003d0,n\u003dt.length;e\u003cn;e++){const n\u003dt[e],a\u003ds[e];if(!l.point_in_poly(n,a,r,o)){i\u003d!1;break}}i\u0026\u0026p.push(e)}return new d.Selection({indices:p})}_hit_point(e){const{sx:t,sy:s}\u003de,i\u003dthis.renderer.xscale.invert(t),n\u003dthis.renderer.yscale.invert(s),r\u003dthis.index.indices({x0:i,y0:n,x1:i,y1:n}),o\u003d[];for(const e of r){const i\u003dthis.sxs.get(e),n\u003dthis.sys.get(e),r\u003di.length;for(let a\u003d0,_\u003d0;;_++){if(isNaN(i[_])||_\u003d\u003dr){const r\u003di.subarray(a,_),c\u003dn.subarray(a,_);if(l.point_in_poly(t,s,r,c)){o.push(e);break}a\u003d_+1}if(_\u003d\u003dr)break}}return new d.Selection({indices:o})}_get_snap_coord(e){return _.sum(e)/e.length}scenterxy(e,t,s){const i\u003dthis.sxs.get(e),n\u003dthis.sys.get(e),r\u003di.length;let o\u003d!1;for(let e\u003d0,a\u003d0;;a++){const _\u003disNaN(i[a]);if(o\u003do||_,a\u003d\u003dr\u0026\u0026!o){return[this._get_snap_coord(i),this._get_snap_coord(n)]}if(_||a\u003d\u003dr){const r\u003di.subarray(e,a),o\u003dn.subarray(e,a);if(l.point_in_poly(t,s,r,o)){return[this._get_snap_coord(r),this._get_snap_coord(o)]}e\u003da+1}if(a\u003d\u003dr)break}y.unreachable()}draw_legend_for_index(e,t,s){a.generic_area_vector_legend(this.visuals,e,t,s)}}s.PatchesView\u003dx,x.__name__\u003d\"PatchesView\";class f extends o.Glyph{constructor(e){super(e)}static init_Patches(){this.prototype.default_view\u003dx,this.define((({})\u003d\u003e({xs:[h.XCoordinateSeqSpec,{field:\"xs\"}],ys:[h.YCoordinateSeqSpec,{field:\"ys\"}]}))),this.mixins([c.LineVector,c.FillVector,c.HatchVector])}}s.Patches\u003df,f.__name__\u003d\"Patches\",f.init_Patches()},\n      function _(e,t,n,s,o){s();const r\u003de(53);class c extends r.Model{do_selection(e,t,n,s){return null!\u003de\u0026\u0026(t.selected.update(e,n,s),t._select.emit(),!t.selected.is_empty())}}n.SelectionPolicy\u003dc,c.__name__\u003d\"SelectionPolicy\";class l extends c{hit_test(e,t){const n\u003d[];for(const s of t){const t\u003ds.hit_test(e);null!\u003dt\u0026\u0026n.push(t)}if(n.length\u003e0){const e\u003dn[0];for(const t of n)e.update_through_intersection(t);return e}return null}}n.IntersectRenderers\u003dl,l.__name__\u003d\"IntersectRenderers\";class _ extends c{hit_test(e,t){const n\u003d[];for(const s of t){const t\u003ds.hit_test(e);null!\u003dt\u0026\u0026n.push(t)}if(n.length\u003e0){const e\u003dn[0];for(const t of n)e.update_through_union(t);return e}return null}}n.UnionRenderers\u003d_,_.__name__\u003d\"UnionRenderers\"},\n      function _(t,n,e,s,o){s();const r\u003dt(1),i\u003dt(57),l\u003dt(8),c\u003dt(13),a\u003dr.__importStar(t(131)),u\u003dt(132),h\u003dt(35);function d(t,n,e){if(l.isArray(t)){const s\u003dt.concat(n);return null!\u003de\u0026\u0026s.length\u003ee?s.slice(-e):s}if(l.isTypedArray(t)){const s\u003dt.length+n.length;if(null!\u003de\u0026\u0026s\u003ee){const o\u003ds-e,r\u003dt.length;let i;t.length\u003ce?(i\u003dnew t.constructor(e),i.set(t,0)):i\u003dt;for(let t\u003do,n\u003dr;t\u003cn;t++)i[t-o]\u003di[t];for(let t\u003d0,e\u003dn.length;t\u003ce;t++)i[t+(r-o)]\u003dn[t];return i}{const e\u003dnew t.constructor(n);return a.concat(t,e)}}throw new Error(\"unsupported array types\")}function f(t,n){let e,s,o;return l.isNumber(t)?(e\u003dt,o\u003dt+1,s\u003d1):(e\u003dnull!\u003dt.start?t.start:0,o\u003dnull!\u003dt.stop?t.stop:n,s\u003dnull!\u003dt.step?t.step:1),[e,o,s]}function m(t,n){const e\u003dnew Set;let s\u003d!1;for(const[o,r]of n){let n,i,c,a;if(l.isArray(o)){const[s]\u003do;e.add(s),n\u003dt[s].shape,i\u003dt[s],a\u003dr,2\u003d\u003d\u003do.length?(n\u003d[1,n[0]],c\u003d[o[0],0,o[1]]):c\u003do}else l.isNumber(o)?(a\u003d[r],e.add(o)):(a\u003dr,s\u003d!0),c\u003d[0,0,o],n\u003d[1,t.length],i\u003dt;let u\u003d0;const[h,d,m]\u003df(c[1],n[0]),[_,p,g]\u003df(c[2],n[1]);for(let t\u003dh;t\u003cd;t+\u003dm)for(let o\u003d_;o\u003cp;o+\u003dg)s\u0026\u0026e.add(o),i[t*n[1]+o]\u003da[u],u++}return e}e.stream_to_column\u003dd,e.slice\u003df,e.patch_to_column\u003dm;class _ extends i.ColumnarDataSource{constructor(t){super(t)}static init_ColumnDataSource(){this.define((({Dict:t,Any:n})\u003d\u003e({data:[t(n),{}]})))}stream(t,n,e){const{data:s}\u003dthis;for(const[e,o]of c.entries(t))s[e]\u003dd(s[e],o,n);if(this.setv({data:s},{silent:!0}),this.streaming.emit(),null!\u003dthis.document){const s\u003dnew h.ColumnsStreamedEvent(this.document,this.ref(),t,n);this.document._notify_change(this,\"data\",null,null,{setter_id:e,hint:s})}}patch(t,n){const{data:e}\u003dthis;let s\u003dnew Set;for(const[n,o]of c.entries(t))s\u003du.union(s,m(e[n],o));if(this.setv({data:e},{silent:!0}),this.patching.emit([...s]),null!\u003dthis.document){const e\u003dnew h.ColumnsPatchedEvent(this.document,this.ref(),t);this.document._notify_change(this,\"data\",null,null,{setter_id:n,hint:e})}}}e.ColumnDataSource\u003d_,_.__name__\u003d\"ColumnDataSource\",_.init_ColumnDataSource()},\n      function _(t,n,o,e,c){e(),o.concat\u003dfunction(t,...n){let o\u003dt.length;for(const t of n)o+\u003dt.length;const e\u003dnew t.constructor(o);e.set(t,0);let c\u003dt.length;for(const t of n)e.set(t,c),c+\u003dt.length;return e}},\n      function _(n,o,t,e,f){function c(...n){const o\u003dnew Set;for(const t of n)for(const n of t)o.add(n);return o}e(),t.union\u003dc,t.intersection\u003dfunction(n,...o){const t\u003dnew Set;n:for(const e of n){for(const n of o)if(!n.has(e))continue n;t.add(e)}return t},t.difference\u003dfunction(n,...o){const t\u003dnew Set(n);for(const n of c(...o))t.delete(n);return t}},\n      function _(e,i,t,s,o){s();const n\u003de(1),a\u003de(53),l\u003de(42),r\u003dn.__importStar(e(45)),_\u003de(48),c\u003dn.__importStar(e(18));class d extends l.View{initialize(){super.initialize(),this.visuals\u003dnew r.Visuals(this)}request_render(){this.parent.request_render()}get canvas(){return this.parent.canvas}set_data(e){const i\u003dthis;for(const t of this.model){if(!(t instanceof c.VectorSpec||t instanceof c.ScalarSpec))continue;const s\u003dt.uniform(e);i[`${t.attr}`]\u003ds}}}t.ArrowHeadView\u003dd,d.__name__\u003d\"ArrowHeadView\";class h extends a.Model{constructor(e){super(e)}static init_ArrowHead(){this.define((()\u003d\u003e({size:[c.NumberSpec,25]})))}}t.ArrowHead\u003dh,h.__name__\u003d\"ArrowHead\",h.init_ArrowHead();class v extends d{clip(e,i){this.visuals.line.set_vectorize(e,i);const t\u003dthis.size.get(i);e.moveTo(.5*t,t),e.lineTo(.5*t,-2),e.lineTo(-.5*t,-2),e.lineTo(-.5*t,t),e.lineTo(0,0),e.lineTo(.5*t,t)}render(e,i){if(this.visuals.line.doit){this.visuals.line.set_vectorize(e,i);const t\u003dthis.size.get(i);e.beginPath(),e.moveTo(.5*t,t),e.lineTo(0,0),e.lineTo(-.5*t,t),e.stroke()}}}t.OpenHeadView\u003dv,v.__name__\u003d\"OpenHeadView\";class u extends h{constructor(e){super(e)}static init_OpenHead(){this.prototype.default_view\u003dv,this.mixins(_.LineVector)}}t.OpenHead\u003du,u.__name__\u003d\"OpenHead\",u.init_OpenHead();class m extends d{clip(e,i){this.visuals.line.set_vectorize(e,i);const t\u003dthis.size.get(i);e.moveTo(.5*t,t),e.lineTo(.5*t,-2),e.lineTo(-.5*t,-2),e.lineTo(-.5*t,t),e.lineTo(.5*t,t)}render(e,i){this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(e,i),this._normal(e,i),e.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(e,i),this._normal(e,i),e.stroke())}_normal(e,i){const t\u003dthis.size.get(i);e.beginPath(),e.moveTo(.5*t,t),e.lineTo(0,0),e.lineTo(-.5*t,t),e.closePath()}}t.NormalHeadView\u003dm,m.__name__\u003d\"NormalHeadView\";class T extends h{constructor(e){super(e)}static init_NormalHead(){this.prototype.default_view\u003dm,this.mixins([_.LineVector,_.FillVector]),this.override({fill_color:\"black\"})}}t.NormalHead\u003dT,T.__name__\u003d\"NormalHead\",T.init_NormalHead();class p extends d{clip(e,i){this.visuals.line.set_vectorize(e,i);const t\u003dthis.size.get(i);e.moveTo(.5*t,t),e.lineTo(.5*t,-2),e.lineTo(-.5*t,-2),e.lineTo(-.5*t,t),e.lineTo(0,.5*t),e.lineTo(.5*t,t)}render(e,i){this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(e,i),this._vee(e,i),e.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(e,i),this._vee(e,i),e.stroke())}_vee(e,i){const t\u003dthis.size.get(i);e.beginPath(),e.moveTo(.5*t,t),e.lineTo(0,0),e.lineTo(-.5*t,t),e.lineTo(0,.5*t),e.closePath()}}t.VeeHeadView\u003dp,p.__name__\u003d\"VeeHeadView\";class H extends h{constructor(e){super(e)}static init_VeeHead(){this.prototype.default_view\u003dp,this.mixins([_.LineVector,_.FillVector]),this.override({fill_color:\"black\"})}}t.VeeHead\u003dH,H.__name__\u003d\"VeeHead\",H.init_VeeHead();class V extends d{render(e,i){if(this.visuals.line.doit){this.visuals.line.set_vectorize(e,i);const t\u003dthis.size.get(i);e.beginPath(),e.moveTo(.5*t,0),e.lineTo(-.5*t,0),e.stroke()}}clip(e,i){}}t.TeeHeadView\u003dV,V.__name__\u003d\"TeeHeadView\";class f extends h{constructor(e){super(e)}static init_TeeHead(){this.prototype.default_view\u003dV,this.mixins(_.LineVector)}}t.TeeHead\u003df,f.__name__\u003d\"TeeHead\",f.init_TeeHead()},\n      function _(s,e,i,t,l){t();const _\u003ds(1),o\u003ds(135),r\u003d_.__importStar(s(48));class h extends o.UpperLowerView{paint(s){s.beginPath(),s.moveTo(this._lower_sx[0],this._lower_sy[0]);for(let e\u003d0,i\u003dthis._lower_sx.length;e\u003ci;e++)s.lineTo(this._lower_sx[e],this._lower_sy[e]);for(let e\u003dthis._upper_sx.length-1;e\u003e\u003d0;e--)s.lineTo(this._upper_sx[e],this._upper_sy[e]);s.closePath(),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_value(s),s.fill()),s.beginPath(),s.moveTo(this._lower_sx[0],this._lower_sy[0]);for(let e\u003d0,i\u003dthis._lower_sx.length;e\u003ci;e++)s.lineTo(this._lower_sx[e],this._lower_sy[e]);this.visuals.line.doit\u0026\u0026(this.visuals.line.set_value(s),s.stroke()),s.beginPath(),s.moveTo(this._upper_sx[0],this._upper_sy[0]);for(let e\u003d0,i\u003dthis._upper_sx.length;e\u003ci;e++)s.lineTo(this._upper_sx[e],this._upper_sy[e]);this.visuals.line.doit\u0026\u0026(this.visuals.line.set_value(s),s.stroke())}}i.BandView\u003dh,h.__name__\u003d\"BandView\";class n extends o.UpperLower{constructor(s){super(s)}static init_Band(){this.prototype.default_view\u003dh,this.mixins([r.Line,r.Fill]),this.override({fill_color:\"#fff9ba\",fill_alpha:.4,line_color:\"#cccccc\",line_alpha:.3})}}i.Band\u003dn,n.__name__\u003d\"Band\",n.init_Band()},\n      function _(e,t,i,s,o){s();const r\u003de(1),p\u003de(56),n\u003de(20),_\u003dr.__importStar(e(18));class a extends p.DataAnnotationView{map_data(){const{frame:e}\u003dthis.plot_view,t\u003dthis.model.dimension,i\u003dthis.coordinates.x_scale,s\u003dthis.coordinates.y_scale,o\u003d\"height\"\u003d\u003dt?s:i,r\u003d\"height\"\u003d\u003dt?i:s,p\u003d\"height\"\u003d\u003dt?e.bbox.yview:e.bbox.xview,n\u003d\"height\"\u003d\u003dt?e.bbox.xview:e.bbox.yview;let _,a,h;_\u003d\"data\"\u003d\u003dthis.model.properties.lower.units?o.v_compute(this._lower):p.v_compute(this._lower),a\u003d\"data\"\u003d\u003dthis.model.properties.upper.units?o.v_compute(this._upper):p.v_compute(this._upper),h\u003d\"data\"\u003d\u003dthis.model.properties.base.units?r.v_compute(this._base):n.v_compute(this._base);const[d,c]\u003d\"height\"\u003d\u003dt?[1,0]:[0,1],u\u003d[_,h],l\u003d[a,h];this._lower_sx\u003du[d],this._lower_sy\u003du[c],this._upper_sx\u003dl[d],this._upper_sy\u003dl[c]}}i.UpperLowerView\u003da,a.__name__\u003d\"UpperLowerView\";class h extends _.CoordinateSpec{get dimension(){return\"width\"\u003d\u003dthis.obj.dimension?\"x\":\"y\"}get units(){var e;return null!\u003d\u003d(e\u003dthis.spec.units)\u0026\u0026void 0!\u003d\u003de?e:\"data\"}}i.XOrYCoordinateSpec\u003dh,h.__name__\u003d\"XOrYCoordinateSpec\";class d extends p.DataAnnotation{constructor(e){super(e)}static init_UpperLower(){this.define((()\u003d\u003e({dimension:[n.Dimension,\"height\"],lower:[h,{field:\"lower\"}],upper:[h,{field:\"upper\"}],base:[h,{field:\"base\"}]})))}}i.UpperLower\u003dd,d.__name__\u003d\"UpperLower\",d.init_UpperLower()},\n      function _(t,i,o,n,e){n();const s\u003dt(1),l\u003dt(40),a\u003ds.__importStar(t(48)),r\u003dt(20),h\u003dt(99);o.EDGE_TOLERANCE\u003d2.5;class c extends l.AnnotationView{constructor(){super(...arguments),this.bbox\u003dnew h.BBox}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.request_render()))}_render(){const{left:t,right:i,top:o,bottom:n}\u003dthis.model;if(null\u003d\u003dt\u0026\u0026null\u003d\u003di\u0026\u0026null\u003d\u003do\u0026\u0026null\u003d\u003dn)return;const{frame:e}\u003dthis.plot_view,s\u003dthis.coordinates.x_scale,l\u003dthis.coordinates.y_scale,a\u003d(t,i,o,n,e)\u003d\u003e{let s;return s\u003dnull!\u003dt?this.model.screen?t:\"data\"\u003d\u003di?o.compute(t):n.compute(t):e,s};this.bbox\u003dh.BBox.from_rect({left:a(t,this.model.left_units,s,e.bbox.xview,e.bbox.left),right:a(i,this.model.right_units,s,e.bbox.xview,e.bbox.right),top:a(o,this.model.top_units,l,e.bbox.yview,e.bbox.top),bottom:a(n,this.model.bottom_units,l,e.bbox.yview,e.bbox.bottom)}),this._paint_box()}_paint_box(){const{ctx:t}\u003dthis.layer;t.save();const{left:i,top:o,width:n,height:e}\u003dthis.bbox;t.beginPath(),t.rect(i,o,n,e),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_value(t),t.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_value(t),t.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_value(t),t.stroke()),t.restore()}interactive_bbox(){const t\u003dthis.model.line_width+o.EDGE_TOLERANCE;return this.bbox.grow_by(t)}interactive_hit(t,i){if(null\u003d\u003dthis.model.in_cursor)return!1;return this.interactive_bbox().contains(t,i)}cursor(t,i){const{left:o,right:n,bottom:e,top:s}\u003dthis.bbox;return Math.abs(t-o)\u003c3||Math.abs(t-n)\u003c3?this.model.ew_cursor:Math.abs(i-e)\u003c3||Math.abs(i-s)\u003c3?this.model.ns_cursor:this.bbox.contains(t,i)?this.model.in_cursor:null}}o.BoxAnnotationView\u003dc,c.__name__\u003d\"BoxAnnotationView\";class u extends l.Annotation{constructor(t){super(t)}static init_BoxAnnotation(){this.prototype.default_view\u003dc,this.mixins([a.Line,a.Fill,a.Hatch]),this.define((({Number:t,Nullable:i})\u003d\u003e({top:[i(t),null],top_units:[r.SpatialUnits,\"data\"],bottom:[i(t),null],bottom_units:[r.SpatialUnits,\"data\"],left:[i(t),null],left_units:[r.SpatialUnits,\"data\"],right:[i(t),null],right_units:[r.SpatialUnits,\"data\"],render_mode:[r.RenderMode,\"canvas\"]}))),this.internal((({Boolean:t,String:i,Nullable:o})\u003d\u003e({screen:[t,!1],ew_cursor:[o(i),null],ns_cursor:[o(i),null],in_cursor:[o(i),null]}))),this.override({fill_color:\"#fff9ba\",fill_alpha:.4,line_color:\"#cccccc\",line_alpha:.3})}update({left:t,right:i,top:o,bottom:n}){this.setv({left:t,right:i,top:o,bottom:n,screen:!0})}}o.BoxAnnotation\u003du,u.__name__\u003d\"BoxAnnotation\",u.init_BoxAnnotation()},\n      function _(t,e,i,o,n){o();const a\u003dt(1),r\u003dt(40),s\u003dt(138),l\u003dt(144),_\u003dt(162),c\u003dt(165),h\u003dt(198),u\u003dt(166),p\u003dt(205),m\u003dt(169),g\u003dt(203),d\u003dt(202),f\u003dt(209),w\u003dt(217),b\u003dt(220),v\u003dt(20),x\u003da.__importStar(t(48)),y\u003dt(9),k\u003dt(221),C\u003dt(222),z\u003dt(225),j\u003dt(140),B\u003dt(11),L\u003dt(122),S\u003dt(99),M\u003dt(8);class T extends r.AnnotationView{get orientation(){return this._orientation}initialize(){super.initialize();const{ticker:t,formatter:e,color_mapper:i}\u003dthis.model;this._ticker\u003d\"auto\"!\u003dt?t:(()\u003d\u003e{switch(!0){case i instanceof f.LogColorMapper:return new h.LogTicker;case i instanceof f.ScanningColorMapper:return new h.BinnedTicker({mapper:i});case i instanceof f.CategoricalColorMapper:return new h.CategoricalTicker;default:return new h.BasicTicker}})(),this._formatter\u003d\"auto\"!\u003de?e:(()\u003d\u003e{switch(!0){case this._ticker instanceof h.LogTicker:return new p.LogTickFormatter;case i instanceof f.CategoricalColorMapper:return new p.CategoricalTickFormatter;default:return new p.BasicTickFormatter}})(),this._major_range\u003d(()\u003d\u003e{if(i instanceof f.CategoricalColorMapper){const{factors:t}\u003di;return new b.FactorRange({factors:t})}if(i instanceof d.ContinuousColorMapper){const{min:t,max:e}\u003di.metrics;return new b.Range1d({start:t,end:e})}B.unreachable()})(),this._major_scale\u003d(()\u003d\u003e{if(i instanceof f.LinearColorMapper)return new w.LinearScale;if(i instanceof f.LogColorMapper)return new w.LogScale;if(i instanceof f.ScanningColorMapper){const{binning:t}\u003di.metrics;return new w.LinearInterpolationScale({binning:t})}if(i instanceof f.CategoricalColorMapper)return new w.CategoricalScale;B.unreachable()})(),this._minor_range\u003dnew b.Range1d({start:0,end:1}),this._minor_scale\u003dnew w.LinearScale;const o\u003dx.attrs_of(this.model,\"major_label_\",x.Text,!0),n\u003dx.attrs_of(this.model,\"major_tick_\",x.Line,!0),a\u003dx.attrs_of(this.model,\"minor_tick_\",x.Line,!0),r\u003dx.attrs_of(this.model,\"title_\",x.Text),l\u003di instanceof f.CategoricalColorMapper?_.CategoricalAxis:i instanceof f.LogColorMapper?_.LogAxis:_.LinearAxis;this._axis\u003dnew l(Object.assign(Object.assign(Object.assign({ticker:this._ticker,formatter:this._formatter,major_tick_in:this.model.major_tick_in,major_tick_out:this.model.major_tick_out,minor_tick_in:this.model.minor_tick_in,minor_tick_out:this.model.minor_tick_out,major_label_standoff:this.model.label_standoff,major_label_overrides:this.model.major_label_overrides,major_label_policy:this.model.major_label_policy,axis_line_color:null},o),n),a));const{title:c}\u003dthis.model;c\u0026\u0026(this._title\u003dnew s.Title(Object.assign({text:c,standoff:this.model.title_standoff},r)))}async lazy_initialize(){await super.lazy_initialize();const t\u003dthis,e\u003d{get parent(){return t.parent},get root(){return t.root},get frame(){return t._frame},get canvas_view(){return t.parent.canvas_view},request_layout(){t.parent.request_layout()}};this._axis_view\u003dawait L.build_view(this._axis,{parent:e}),null!\u003dthis._title\u0026\u0026(this._title_view\u003dawait L.build_view(this._title,{parent:e}))}remove(){var t;null\u003d\u003d\u003d(t\u003dthis._title_view)||void 0\u003d\u003d\u003dt||t.remove(),this._axis_view.remove(),super.remove()}connect_signals(){super.connect_signals(),this.connect(this._ticker.change,(()\u003d\u003ethis.request_render())),this.connect(this._formatter.change,(()\u003d\u003ethis.request_render())),this.connect(this.model.color_mapper.metrics_change,(()\u003d\u003e{const t\u003dthis._major_range,e\u003dthis._major_scale,{color_mapper:i}\u003dthis.model;if(i instanceof d.ContinuousColorMapper\u0026\u0026t instanceof b.Range1d){const{min:e,max:o}\u003di.metrics;t.setv({start:e,end:o})}if(i instanceof f.ScanningColorMapper\u0026\u0026e instanceof w.LinearInterpolationScale){const{binning:t}\u003di.metrics;e.binning\u003dt}this._set_canvas_image(),this.plot_view.request_layout()}))}_set_canvas_image(){const{orientation:t}\u003dthis,e\u003d(()\u003d\u003e{const{palette:e}\u003dthis.model.color_mapper;return\"vertical\"\u003d\u003dt?y.reversed(e):e})(),[i,o]\u003d\"vertical\"\u003d\u003dt?[1,e.length]:[e.length,1],n\u003dthis._image\u003ddocument.createElement(\"canvas\");n.width\u003di,n.height\u003do;const a\u003dn.getContext(\"2d\"),r\u003da.getImageData(0,0,i,o),s\u003dnew f.LinearColorMapper({palette:e}).rgba_mapper.v_compute(y.range(0,e.length));r.data.set(s),a.putImageData(r,0,0)}update_layout(){const{location:t,width:e,height:i,padding:o,margin:n}\u003dthis.model,[a,r]\u003d(()\u003d\u003e{if(!M.isString(t))return[\"end\",\"start\"];switch(t){case\"top_left\":return[\"start\",\"start\"];case\"top\":case\"top_center\":return[\"start\",\"center\"];case\"top_right\":return[\"start\",\"end\"];case\"bottom_left\":return[\"end\",\"start\"];case\"bottom\":case\"bottom_center\":return[\"end\",\"center\"];case\"bottom_right\":return[\"end\",\"end\"];case\"left\":case\"center_left\":return[\"center\",\"start\"];case\"center\":case\"center_center\":return[\"center\",\"center\"];case\"right\":case\"center_right\":return[\"center\",\"end\"]}})(),s\u003dthis._orientation\u003d(()\u003d\u003e{const{orientation:t}\u003dthis.model;return\"auto\"\u003d\u003dt?null!\u003dthis.panel?this.panel.is_horizontal?\"horizontal\":\"vertical\":\"start\"\u003d\u003dr||\"end\"\u003d\u003dr||\"center\"\u003d\u003dr\u0026\u0026\"center\"\u003d\u003da?\"vertical\":\"horizontal\":t})(),_\u003dnew C.NodeLayout,c\u003dnew C.VStack,h\u003dnew C.VStack,u\u003dnew C.HStack,p\u003dnew C.HStack;_.absolute\u003d!0,c.absolute\u003d!0,h.absolute\u003d!0,u.absolute\u003d!0,p.absolute\u003d!0;const[m,g,d,f]\u003d(()\u003d\u003e\"horizontal\"\u003d\u003ds?[this._major_scale,this._minor_scale,this._major_range,this._minor_range]:[this._minor_scale,this._major_scale,this._minor_range,this._major_range])();this._frame\u003dnew l.CartesianFrame(m,g,d,f),_.on_resize((t\u003d\u003ethis._frame.set_geometry(t)));const w\u003dnew z.BorderLayout;this._inner_layout\u003dw,w.absolute\u003d!0,w.center_panel\u003d_,w.top_panel\u003dc,w.bottom_panel\u003dh,w.left_panel\u003du,w.right_panel\u003dp;const b\u003d{left:o,right:o,top:o,bottom:o},v\u003d(()\u003d\u003e{if(null\u003d\u003dthis.panel){if(M.isString(t))return{left:n,right:n,top:n,bottom:n};{const[e,i]\u003dt;return{left:e,right:n,top:n,bottom:i}}}if(!M.isString(t)){const[e,i]\u003dt;return w.fixup_geometry\u003d(t,o)\u003d\u003e{const n\u003dt,a\u003dthis.layout.bbox,{width:r,height:s}\u003dt;if(t\u003dnew S.BBox({left:a.left+e,bottom:a.bottom-i,width:r,height:s}),null!\u003do){const e\u003dt.left-n.left,i\u003dt.top-n.top,{left:a,top:r,width:s,height:l}\u003do;o\u003dnew S.BBox({left:a+e,top:r+i,width:s,height:l})}return[t,o]},{left:e,right:0,top:0,bottom:i}}w.fixup_geometry\u003d(t,e)\u003d\u003e{const i\u003dt;if(\"horizontal\"\u003d\u003ds){const{top:e,width:i,height:o}\u003dt;if(\"end\"\u003d\u003dr){const{right:n}\u003dthis.layout.bbox;t\u003dnew S.BBox({right:n,top:e,width:i,height:o})}else if(\"center\"\u003d\u003dr){const{hcenter:n}\u003dthis.layout.bbox;t\u003dnew S.BBox({hcenter:Math.round(n),top:e,width:i,height:o})}}else{const{left:e,width:i,height:o}\u003dt;if(\"end\"\u003d\u003da){const{bottom:n}\u003dthis.layout.bbox;t\u003dnew S.BBox({left:e,bottom:n,width:i,height:o})}else if(\"center\"\u003d\u003da){const{vcenter:n}\u003dthis.layout.bbox;t\u003dnew S.BBox({left:e,vcenter:Math.round(n),width:i,height:o})}}if(null!\u003de){const o\u003dt.left-i.left,n\u003dt.top-i.top,{left:a,top:r,width:s,height:l}\u003de;e\u003dnew S.BBox({left:a+o,top:r+n,width:s,height:l})}return[t,e]}})();let x,y,B,L;if(w.padding\u003db,null!\u003dthis.panel?(x\u003d\"max\",y\u003dvoid 0,B\u003dvoid 0,L\u003dvoid 0):\"auto\"\u003d\u003d(\"horizontal\"\u003d\u003ds?e:i)?(x\u003d\"fixed\",y\u003d25*this.model.color_mapper.palette.length,B\u003d{percent:.3},L\u003d{percent:.8}):(x\u003d\"fit\",y\u003dvoid 0),\"horizontal\"\u003d\u003ds){const t\u003d\"auto\"\u003d\u003de?void 0:e,o\u003d\"auto\"\u003d\u003di?25:i;w.set_sizing({width_policy:x,height_policy:\"min\",width:y,min_width:B,max_width:L,halign:r,valign:a,margin:v}),w.center_panel.set_sizing({width_policy:\"auto\"\u003d\u003de?\"fit\":\"fixed\",height_policy:\"fixed\",width:t,height:o})}else{const t\u003d\"auto\"\u003d\u003de?25:e,o\u003d\"auto\"\u003d\u003di?void 0:i;w.set_sizing({width_policy:\"min\",height_policy:x,height:y,min_height:B,max_height:L,halign:r,valign:a,margin:v}),w.center_panel.set_sizing({width_policy:\"fixed\",height_policy:\"auto\"\u003d\u003di?\"fit\":\"fixed\",width:t,height:o})}c.set_sizing({width_policy:\"fit\",height_policy:\"min\"}),h.set_sizing({width_policy:\"fit\",height_policy:\"min\"}),u.set_sizing({width_policy:\"min\",height_policy:\"fit\"}),p.set_sizing({width_policy:\"min\",height_policy:\"fit\"});const{_title_view:T}\u003dthis;null!\u003dT\u0026\u0026(\"horizontal\"\u003d\u003ds?(T.panel\u003dnew j.Panel(\"above\"),T.update_layout(),c.children.push(T.layout)):(T.panel\u003dnew j.Panel(\"left\"),T.update_layout(),u.children.push(T.layout)));const{panel:A}\u003dthis,O\u003dnull!\u003dA\u0026\u0026s\u003d\u003dA.orientation?A.side:\"horizontal\"\u003d\u003ds?\"below\":\"right\",R\u003d(()\u003d\u003e{switch(O){case\"above\":return c;case\"below\":return h;case\"left\":return u;case\"right\":return p}})(),{_axis_view:F}\u003dthis;if(F.panel\u003dnew j.Panel(O),F.update_layout(),R.children.push(F.layout),null!\u003dthis.panel){const t\u003dnew k.Grid([{layout:w,row:0,col:0}]);t.absolute\u003d!0,\"horizontal\"\u003d\u003ds?t.set_sizing({width_policy:\"max\",height_policy:\"min\"}):t.set_sizing({width_policy:\"min\",height_policy:\"max\"}),this.layout\u003dt}else this.layout\u003dthis._inner_layout;const{visible:I}\u003dthis.model;this.layout.sizing.visible\u003dI,this._set_canvas_image()}_render(){var t;const{ctx:e}\u003dthis.layer;e.save(),this._paint_bbox(e,this._inner_layout.bbox),this._paint_image(e,this._inner_layout.center_panel.bbox),null\u003d\u003d\u003d(t\u003dthis._title_view)||void 0\u003d\u003d\u003dt||t.render(),this._axis_view.render(),e.restore()}_paint_bbox(t,e){const{x:i,y:o}\u003de;let{width:n,height:a}\u003de;i+n\u003e\u003dthis.parent.canvas_view.bbox.width\u0026\u0026(n-\u003d1),o+a\u003e\u003dthis.parent.canvas_view.bbox.height\u0026\u0026(a-\u003d1),t.save(),this.visuals.background_fill.doit\u0026\u0026(this.visuals.background_fill.set_value(t),t.fillRect(i,o,n,a)),this.visuals.border_line.doit\u0026\u0026(this.visuals.border_line.set_value(t),t.strokeRect(i,o,n,a)),t.restore()}_paint_image(t,e){const{x:i,y:o,width:n,height:a}\u003de;t.save(),t.setImageSmoothingEnabled(!1),t.globalAlpha\u003dthis.model.scale_alpha,t.drawImage(this._image,i,o,n,a),this.visuals.bar_line.doit\u0026\u0026(this.visuals.bar_line.set_value(t),t.strokeRect(i,o,n,a)),t.restore()}serializable_state(){const t\u003dsuper.serializable_state(),{children:e\u003d[]}\u003dt,i\u003da.__rest(t,[\"children\"]);return null!\u003dthis._title_view\u0026\u0026e.push(this._title_view.serializable_state()),e.push(this._axis_view.serializable_state()),Object.assign(Object.assign({},i),{children:e})}}i.ColorBarView\u003dT,T.__name__\u003d\"ColorBarView\";class A extends r.Annotation{constructor(t){super(t)}static init_ColorBar(){this.prototype.default_view\u003dT,this.mixins([[\"major_label_\",x.Text],[\"title_\",x.Text],[\"major_tick_\",x.Line],[\"minor_tick_\",x.Line],[\"border_\",x.Line],[\"bar_\",x.Line],[\"background_\",x.Fill]]),this.define((({Alpha:t,Number:e,String:i,Tuple:o,Dict:n,Or:a,Ref:r,Auto:s,Nullable:l})\u003d\u003e({location:[a(v.Anchor,o(e,e)),\"top_right\"],orientation:[a(v.Orientation,s),\"auto\"],title:[l(i),null],title_standoff:[e,2],width:[a(e,s),\"auto\"],height:[a(e,s),\"auto\"],scale_alpha:[t,1],ticker:[a(r(c.Ticker),s),\"auto\"],formatter:[a(r(u.TickFormatter),s),\"auto\"],major_label_overrides:[n(i),{}],major_label_policy:[r(m.LabelingPolicy),()\u003d\u003enew m.NoOverlap],color_mapper:[r(g.ColorMapper)],label_standoff:[e,5],margin:[e,30],padding:[e,10],major_tick_in:[e,5],major_tick_out:[e,0],minor_tick_in:[e,0],minor_tick_out:[e,0]}))),this.override({background_fill_color:\"#ffffff\",background_fill_alpha:.95,bar_line_color:null,border_line_color:null,major_label_text_font_size:\"11px\",major_tick_line_color:\"#ffffff\",minor_tick_line_color:null,title_text_font_size:\"13px\",title_text_font_style:\"italic\"})}}i.ColorBar\u003dA,A.__name__\u003d\"ColorBar\",A.init_ColorBar()},\n      function _(t,e,i,s,l){s();const o\u003dt(1),a\u003dt(139),n\u003dt(20),r\u003dt(143),c\u003do.__importStar(t(48));class h extends a.TextAnnotationView{_get_location(){const t\u003dthis.model.offset,e\u003dthis.model.standoff/2;let i,s;const{bbox:l}\u003dthis.layout;switch(this.panel.side){case\"above\":case\"below\":switch(this.model.vertical_align){case\"top\":s\u003dl.top+e;break;case\"middle\":s\u003dl.vcenter;break;case\"bottom\":s\u003dl.bottom-e}switch(this.model.align){case\"left\":i\u003dl.left+t;break;case\"center\":i\u003dl.hcenter;break;case\"right\":i\u003dl.right-t}break;case\"left\":switch(this.model.vertical_align){case\"top\":i\u003dl.left+e;break;case\"middle\":i\u003dl.hcenter;break;case\"bottom\":i\u003dl.right-e}switch(this.model.align){case\"left\":s\u003dl.bottom-t;break;case\"center\":s\u003dl.vcenter;break;case\"right\":s\u003dl.top+t}break;case\"right\":switch(this.model.vertical_align){case\"top\":i\u003dl.right-e;break;case\"middle\":i\u003dl.hcenter;break;case\"bottom\":i\u003dl.left+e}switch(this.model.align){case\"left\":s\u003dl.top+t;break;case\"center\":s\u003dl.vcenter;break;case\"right\":s\u003dl.bottom-t}}return[i,s]}_render(){const{text:t}\u003dthis.model;if(null\u003d\u003dt||0\u003d\u003dt.length)return;this.model.text_baseline\u003dthis.model.vertical_align,this.model.text_align\u003dthis.model.align;const[e,i]\u003dthis._get_location(),s\u003dthis.panel.get_label_angle_heuristic(\"parallel\");(\"canvas\"\u003d\u003dthis.model.render_mode?this._canvas_text.bind(this):this._css_text.bind(this))(this.layer.ctx,t,e,i,s)}_get_size(){const{text:t}\u003dthis.model;if(null\u003d\u003dt||0\u003d\u003dt.length)return{width:0,height:0};{const{ctx:e}\u003dthis.layer;this.visuals.text.set_value(e);const{width:i}\u003dthis.layer.ctx.measureText(t),{height:s}\u003dr.font_metrics(e.font);return{width:i,height:2+s*this.model.text_line_height+this.model.standoff}}}}i.TitleView\u003dh,h.__name__\u003d\"TitleView\";class _ extends a.TextAnnotation{constructor(t){super(t)}static init_Title(){this.prototype.default_view\u003dh,this.mixins([c.Text,[\"border_\",c.Line],[\"background_\",c.Fill]]),this.define((({Number:t,String:e})\u003d\u003e({text:[e,\"\"],vertical_align:[n.VerticalAlign,\"bottom\"],align:[n.TextAlign,\"left\"],offset:[t,0],standoff:[t,10]}))),this.prototype._props.text_align.options.internal\u003d!0,this.prototype._props.text_baseline.options.internal\u003d!0,this.override({text_font_size:\"13px\",text_font_style:\"bold\",text_line_height:1,background_fill_color:null,border_line_color:null})}}i.Title\u003d_,_.__name__\u003d\"Title\",_.init_Title()},\n      function _(e,t,s,i,n){i();const l\u003de(40),a\u003de(43),o\u003de(20),r\u003de(140),d\u003de(143),c\u003de(11);class _ extends l.AnnotationView{update_layout(){const{panel:e}\u003dthis;this.layout\u003dnull!\u003de?new r.SideLayout(e,(()\u003d\u003ethis.get_size()),!0):void 0}initialize(){super.initialize(),\"css\"\u003d\u003dthis.model.render_mode\u0026\u0026(this.el\u003da.div(),this.plot_view.canvas_view.add_overlay(this.el))}remove(){null!\u003dthis.el\u0026\u0026a.remove(this.el),super.remove()}connect_signals(){super.connect_signals(),\"css\"\u003d\u003dthis.model.render_mode?this.connect(this.model.change,(()\u003d\u003ethis.render())):this.connect(this.model.change,(()\u003d\u003ethis.request_render()))}render(){this.model.visible||\"css\"!\u003dthis.model.render_mode||a.undisplay(this.el),super.render()}_calculate_text_dimensions(e,t){const{width:s}\u003de.measureText(t),{height:i}\u003dd.font_metrics(this.visuals.text.font_value());return[s,i]}_calculate_bounding_box_dimensions(e,t){const[s,i]\u003dthis._calculate_text_dimensions(e,t);let n,l;switch(e.textAlign){case\"left\":n\u003d0;break;case\"center\":n\u003d-s/2;break;case\"right\":n\u003d-s;break;default:c.unreachable()}switch(e.textBaseline){case\"top\":l\u003d0;break;case\"middle\":l\u003d-.5*i;break;case\"bottom\":l\u003d-1*i;break;case\"alphabetic\":l\u003d-.8*i;break;case\"hanging\":l\u003d-.17*i;break;case\"ideographic\":l\u003d-.83*i;break;default:c.unreachable()}return[n,l,s,i]}_canvas_text(e,t,s,i,n){this.visuals.text.set_value(e);const l\u003dthis._calculate_bounding_box_dimensions(e,t);e.save(),e.beginPath(),e.translate(s,i),n\u0026\u0026e.rotate(n),e.rect(l[0],l[1],l[2],l[3]),this.visuals.background_fill.doit\u0026\u0026(this.visuals.background_fill.set_value(e),e.fill()),this.visuals.border_line.doit\u0026\u0026(this.visuals.border_line.set_value(e),e.stroke()),this.visuals.text.doit\u0026\u0026(this.visuals.text.set_value(e),e.fillText(t,0,0)),e.restore()}_css_text(e,t,s,i,n){const{el:l}\u003dthis;c.assert(null!\u003dl),a.undisplay(l),this.visuals.text.set_value(e);const[o,r]\u003dthis._calculate_bounding_box_dimensions(e,t);l.style.position\u003d\"absolute\",l.style.left\u003d`${s+o}px`,l.style.top\u003d`${i+r}px`,l.style.color\u003de.fillStyle,l.style.font\u003de.font,l.style.lineHeight\u003d\"normal\",n\u0026\u0026(l.style.transform\u003d`rotate(${n}rad)`),this.visuals.background_fill.doit\u0026\u0026(this.visuals.background_fill.set_value(e),l.style.backgroundColor\u003de.fillStyle),this.visuals.border_line.doit\u0026\u0026(this.visuals.border_line.set_value(e),l.style.borderStyle\u003de.lineDash.length\u003c2?\"solid\":\"dashed\",l.style.borderWidth\u003d`${e.lineWidth}px`,l.style.borderColor\u003de.strokeStyle),l.textContent\u003dt,a.display(l)}}s.TextAnnotationView\u003d_,_.__name__\u003d\"TextAnnotationView\";class u extends l.Annotation{constructor(e){super(e)}static init_TextAnnotation(){this.define((()\u003d\u003e({render_mode:[o.RenderMode,\"canvas\"]})))}}s.TextAnnotation\u003du,u.__name__\u003d\"TextAnnotation\",u.init_TextAnnotation()},\n      function _(t,e,i,l,r){l();const a\u003dt(141),o\u003dt(142),n\u003dt(8),h\u003dMath.PI/2,s\u003d{above:{parallel:0,normal:-h,horizontal:0,vertical:-h},below:{parallel:0,normal:h,horizontal:0,vertical:h},left:{parallel:-h,normal:0,horizontal:0,vertical:-h},right:{parallel:h,normal:0,horizontal:0,vertical:h}},c\u003d{above:{parallel:\"bottom\",normal:\"center\",horizontal:\"bottom\",vertical:\"center\"},below:{parallel:\"top\",normal:\"center\",horizontal:\"top\",vertical:\"center\"},left:{parallel:\"bottom\",normal:\"center\",horizontal:\"center\",vertical:\"bottom\"},right:{parallel:\"bottom\",normal:\"center\",horizontal:\"center\",vertical:\"bottom\"}},g\u003d{above:{parallel:\"center\",normal:\"left\",horizontal:\"center\",vertical:\"left\"},below:{parallel:\"center\",normal:\"left\",horizontal:\"center\",vertical:\"left\"},left:{parallel:\"center\",normal:\"right\",horizontal:\"right\",vertical:\"center\"},right:{parallel:\"center\",normal:\"left\",horizontal:\"left\",vertical:\"center\"}},_\u003d{above:\"right\",below:\"left\",left:\"right\",right:\"left\"},b\u003d{above:\"left\",below:\"right\",left:\"right\",right:\"left\"};class z{constructor(t){this.side\u003dt}get dimension(){return\"above\"\u003d\u003dthis.side||\"below\"\u003d\u003dthis.side?0:1}get normals(){switch(this.side){case\"above\":return[0,-1];case\"below\":return[0,1];case\"left\":return[-1,0];case\"right\":return[1,0]}}get orientation(){return this.is_horizontal?\"horizontal\":\"vertical\"}get is_horizontal(){return 0\u003d\u003dthis.dimension}get is_vertical(){return 1\u003d\u003dthis.dimension}get_label_text_heuristics(t){const{side:e}\u003dthis;return n.isString(t)?{vertical_align:c[e][t],align:g[e][t]}:{vertical_align:\"center\",align:(t\u003c0?_:b)[e]}}get_label_angle_heuristic(t){return n.isString(t)?s[this.side][t]:-t}}i.Panel\u003dz,z.__name__\u003d\"Panel\";class m extends o.ContentLayoutable{constructor(t,e,i\u003d!1){super(),this.panel\u003dt,this.get_size\u003de,this.rotate\u003di,this.panel.is_horizontal?this.set_sizing({width_policy:\"max\",height_policy:\"fixed\"}):this.set_sizing({width_policy:\"fixed\",height_policy:\"max\"})}_content_size(){const{width:t,height:e}\u003dthis.get_size();return!this.rotate||this.panel.is_horizontal?new a.Sizeable({width:t,height:e}):new a.Sizeable({width:e,height:t})}has_size_changed(){const{width:t,height:e}\u003dthis._content_size();return this.panel.is_horizontal?this.bbox.height!\u003de:this.bbox.width!\u003dt}}i.SideLayout\u003dm,m.__name__\u003d\"SideLayout\"},\n      function _(h,t,i,e,w){e();const n\u003dh(21),{min:d,max:s}\u003dMath;class g{constructor(h\u003d{}){this.width\u003dnull!\u003dh.width?h.width:0,this.height\u003dnull!\u003dh.height?h.height:0}bounded_to({width:h,height:t}){return new g({width:this.width\u003d\u003d1/0\u0026\u0026null!\u003dh?h:this.width,height:this.height\u003d\u003d1/0\u0026\u0026null!\u003dt?t:this.height})}expanded_to({width:h,height:t}){return new g({width:h!\u003d1/0?s(this.width,h):this.width,height:t!\u003d1/0?s(this.height,t):this.height})}expand_to({width:h,height:t}){this.width\u003ds(this.width,h),this.height\u003ds(this.height,t)}narrowed_to({width:h,height:t}){return new g({width:d(this.width,h),height:d(this.height,t)})}narrow_to({width:h,height:t}){this.width\u003dd(this.width,h),this.height\u003dd(this.height,t)}grow_by({left:h,right:t,top:i,bottom:e}){const w\u003dthis.width+h+t,n\u003dthis.height+i+e;return new g({width:w,height:n})}shrink_by({left:h,right:t,top:i,bottom:e}){const w\u003ds(this.width-h-t,0),n\u003ds(this.height-i-e,0);return new g({width:w,height:n})}map(h,t){return new g({width:h(this.width),height:(null!\u003dt?t:h)(this.height)})}}i.Sizeable\u003dg,g.__name__\u003d\"Sizeable\",i.SizingPolicy\u003dn.Enum(\"fixed\",\"fit\",\"min\",\"max\")},\n      function _(i,t,h,e,n){e();const s\u003di(141),r\u003di(99),g\u003di(8),{min:l,max:a,round:_}\u003dMath;class o{constructor(){this.absolute\u003d!1,this._bbox\u003dnew r.BBox,this._inner_bbox\u003dnew r.BBox,this._dirty\u003d!1,this._handlers\u003d[]}*[Symbol.iterator](){}get bbox(){return this._bbox}get inner_bbox(){return this._inner_bbox}get sizing(){return this._sizing}set visible(i){this._sizing.visible\u003di,this._dirty\u003d!0}set_sizing(i){var t,h,e,n,s;const r\u003dnull!\u003d\u003d(t\u003di.width_policy)\u0026\u0026void 0!\u003d\u003dt?t:\"fit\",g\u003di.width,l\u003di.min_width,a\u003di.max_width,_\u003dnull!\u003d\u003d(h\u003di.height_policy)\u0026\u0026void 0!\u003d\u003dh?h:\"fit\",o\u003di.height,d\u003di.min_height,u\u003di.max_height,c\u003di.aspect,w\u003dnull!\u003d\u003d(e\u003di.margin)\u0026\u0026void 0!\u003d\u003de?e:{top:0,right:0,bottom:0,left:0},m\u003d!1!\u003d\u003di.visible,x\u003dnull!\u003d\u003d(n\u003di.halign)\u0026\u0026void 0!\u003d\u003dn?n:\"start\",b\u003dnull!\u003d\u003d(s\u003di.valign)\u0026\u0026void 0!\u003d\u003ds?s:\"start\";this._sizing\u003d{width_policy:r,min_width:l,width:g,max_width:a,height_policy:_,min_height:d,height:o,max_height:u,aspect:c,margin:w,visible:m,halign:x,valign:b,size:{width:g,height:o}},this._init()}_init(){}_set_geometry(i,t){this._bbox\u003di,this._inner_bbox\u003dt}set_geometry(i,t){const{fixup_geometry:h}\u003dthis;null!\u003dh\u0026\u0026([i,t]\u003dh(i,t)),this._set_geometry(i,null!\u003dt?t:i);for(const i of this._handlers)i(this._bbox,this._inner_bbox)}on_resize(i){this._handlers.push(i)}is_width_expanding(){return\"max\"\u003d\u003dthis.sizing.width_policy}is_height_expanding(){return\"max\"\u003d\u003dthis.sizing.height_policy}apply_aspect(i,{width:t,height:h}){const{aspect:e}\u003dthis.sizing;if(null!\u003de){const{width_policy:n,height_policy:s}\u003dthis.sizing,r\u003d(i,t)\u003d\u003e{const h\u003d{max:4,fit:3,min:2,fixed:1};return h[i]\u003eh[t]};if(\"fixed\"!\u003dn\u0026\u0026\"fixed\"!\u003ds)if(n\u003d\u003ds){const n\u003dt,s\u003d_(t/e),r\u003d_(h*e),g\u003dh;Math.abs(i.width-n)+Math.abs(i.height-s)\u003c\u003dMath.abs(i.width-r)+Math.abs(i.height-g)?(t\u003dn,h\u003ds):(t\u003dr,h\u003dg)}else r(n,s)?h\u003d_(t/e):t\u003d_(h*e);else\"fixed\"\u003d\u003dn?h\u003d_(t/e):\"fixed\"\u003d\u003ds\u0026\u0026(t\u003d_(h*e))}return{width:t,height:h}}measure(i){if(!this.sizing.visible)return{width:0,height:0};const t\u003di\u003d\u003e\"fixed\"\u003d\u003dthis.sizing.width_policy\u0026\u0026null!\u003dthis.sizing.width?this.sizing.width:i,h\u003di\u003d\u003e\"fixed\"\u003d\u003dthis.sizing.height_policy\u0026\u0026null!\u003dthis.sizing.height?this.sizing.height:i,e\u003dnew s.Sizeable(i).shrink_by(this.sizing.margin).map(t,h),n\u003dthis._measure(e),r\u003dthis.clip_size(n,e),g\u003dt(r.width),l\u003dh(r.height),a\u003dthis.apply_aspect(e,{width:g,height:l});return Object.assign(Object.assign({},n),a)}compute(i\u003d{}){const t\u003dthis.measure({width:null!\u003di.width\u0026\u0026this.is_width_expanding()?i.width:1/0,height:null!\u003di.height\u0026\u0026this.is_height_expanding()?i.height:1/0}),{width:h,height:e}\u003dt,n\u003dnew r.BBox({left:0,top:0,width:h,height:e});let s;if(null!\u003dt.inner){const{left:i,top:n,right:g,bottom:l}\u003dt.inner;s\u003dnew r.BBox({left:i,top:n,right:h-g,bottom:e-l})}this.set_geometry(n,s)}get xview(){return this.bbox.xview}get yview(){return this.bbox.yview}clip_size(i,t){function h(i,t,h,e){return null\u003d\u003dh?h\u003d0:g.isNumber(h)||(h\u003dMath.round(h.percent*t)),null\u003d\u003de?e\u003d1/0:g.isNumber(e)||(e\u003dMath.round(e.percent*t)),a(h,l(i,e))}return{width:h(i.width,t.width,this.sizing.min_width,this.sizing.max_width),height:h(i.height,t.height,this.sizing.min_height,this.sizing.max_height)}}has_size_changed(){const{_dirty:i}\u003dthis;return this._dirty\u003d!1,i}}h.Layoutable\u003do,o.__name__\u003d\"Layoutable\";class d extends o{_measure(i){const{width_policy:t,height_policy:h}\u003dthis.sizing;return{width:(()\u003d\u003e{const{width:h}\u003dthis.sizing;if(i.width\u003d\u003d1/0)return null!\u003dh?h:0;switch(t){case\"fixed\":return null!\u003dh?h:0;case\"min\":return null!\u003dh?l(i.width,h):0;case\"fit\":return null!\u003dh?l(i.width,h):i.width;case\"max\":return null!\u003dh?a(i.width,h):i.width}})(),height:(()\u003d\u003e{const{height:t}\u003dthis.sizing;if(i.height\u003d\u003d1/0)return null!\u003dt?t:0;switch(h){case\"fixed\":return null!\u003dt?t:0;case\"min\":return null!\u003dt?l(i.height,t):0;case\"fit\":return null!\u003dt?l(i.height,t):i.height;case\"max\":return null!\u003dt?a(i.height,t):i.height}})()}}}h.LayoutItem\u003dd,d.__name__\u003d\"LayoutItem\";class u extends o{_measure(i){const t\u003dthis._content_size(),h\u003di.bounded_to(this.sizing.size).bounded_to(t);return{width:(()\u003d\u003e{switch(this.sizing.width_policy){case\"fixed\":return null!\u003dthis.sizing.width?this.sizing.width:t.width;case\"min\":return t.width;case\"fit\":return h.width;case\"max\":return Math.max(t.width,h.width)}})(),height:(()\u003d\u003e{switch(this.sizing.height_policy){case\"fixed\":return null!\u003dthis.sizing.height?this.sizing.height:t.height;case\"min\":return t.height;case\"fit\":return h.height;case\"max\":return Math.max(t.height,h.height)}})()}}}h.ContentLayoutable\u003du,u.__name__\u003d\"ContentLayoutable\"},\n      function _(t,e,n,r,l){r();const a\u003dt(11),c\u003d(()\u003d\u003e{try{return\"undefined\"!\u003dtypeof OffscreenCanvas\u0026\u0026null!\u003dnew OffscreenCanvas(0,0).getContext(\"2d\")}catch(t){return!1}})()?(t,e)\u003d\u003enew OffscreenCanvas(t,e):(t,e)\u003d\u003e{const n\u003ddocument.createElement(\"canvas\");return n.width\u003dt,n.height\u003de,n},o\u003d(()\u003d\u003e{const t\u003dc(0,0).getContext(\"2d\");return e\u003d\u003e{t.font\u003de;const n\u003dt.measureText(\"M\"),r\u003dt.measureText(\"x\"),l\u003dt.measureText(\"ÅŚg|\"),c\u003dl.fontBoundingBoxAscent,o\u003dl.fontBoundingBoxDescent;if(null!\u003dc\u0026\u0026null!\u003do)return{height:c+o,ascent:c,descent:o,cap_height:n.actualBoundingBoxAscent,x_height:r.actualBoundingBoxAscent};const s\u003dl.actualBoundingBoxAscent,u\u003dl.actualBoundingBoxDescent;if(null!\u003ds\u0026\u0026null!\u003du)return{height:s+u,ascent:s,descent:u,cap_height:n.actualBoundingBoxAscent,x_height:r.actualBoundingBoxAscent};a.unreachable()}})(),s\u003d(()\u003d\u003e{const t\u003dc(0,0).getContext(\"2d\");return(e,n)\u003d\u003e{t.font\u003dn;const r\u003dt.measureText(e),l\u003dr.actualBoundingBoxAscent,c\u003dr.actualBoundingBoxDescent;if(null!\u003dl\u0026\u0026null!\u003dc)return{width:r.width,height:l+c,ascent:l,descent:c};a.unreachable()}})(),u\u003d(()\u003d\u003e{const t\u003ddocument.createElement(\"canvas\"),e\u003dt.getContext(\"2d\");let n\u003d-1,r\u003d-1;return(l,a\u003d1)\u003d\u003e{e.font\u003dl;const{width:c}\u003de.measureText(\"M\"),o\u003dc*a,s\u003dMath.ceil(o),u\u003dMath.ceil(2*o),i\u003dMath.ceil(1.5*o);n\u003cs\u0026\u0026(n\u003ds,t.width\u003ds),r\u003cu\u0026\u0026(r\u003du,t.height\u003du),e.save(),e.scale(a,a),e.fillStyle\u003d\"#f00\",e.fillRect(0,0,s,u);const f\u003dt\u003d\u003e{let e\u003d0;for(let n\u003d0;n\u003c\u003di;n++)for(let r\u003d0;r\u003cs;r++,e+\u003d4)if(255!\u003dt[e])return i-n;return 0};e.font\u003dl,e.fillStyle\u003d\"#000\";for(const t of\"xa\")e.fillText(t,0,i/a);const{data:h}\u003de.getImageData(0,0,s,u),g\u003df(h)/a;for(const t of\"ASQ\")e.fillText(t,0,i/a);const{data:d}\u003de.getImageData(0,0,s,u),x\u003df(d)/a;for(const t of\"ÅŚgy\")e.fillText(t,0,i/a);const{data:m}\u003de.getImageData(0,0,s,u),B\u003df(m)/a,w\u003d(t\u003d\u003e{let e\u003dt.length-4;for(let n\u003du;n\u003e\u003di;n--)for(let r\u003d0;r\u003cs;r++,e-\u003d4)if(255!\u003dt[e])return n-i;return 0})(m)/a;return e.restore(),{height:B+w,ascent:B,cap_height:x,x_height:g,descent:w}}})(),i\u003d(()\u003d\u003e{const t\u003ddocument.createElement(\"canvas\"),e\u003dt.getContext(\"2d\");let n\u003d-1,r\u003d-1;return(l,a,c\u003d1)\u003d\u003e{e.font\u003da;const{width:o}\u003de.measureText(\"M\"),s\u003do*c,u\u003dMath.ceil(s),i\u003dMath.ceil(2*s),f\u003dMath.ceil(1.5*s);(n\u003cu||r\u003ci)\u0026\u0026(n\u003du,t.width\u003du,r\u003di,t.height\u003di),e.save(),e.scale(c,c),e.fillStyle\u003d\"#f00\",e.fillRect(0,0,u,i);e.font\u003da,e.fillStyle\u003d\"#000\",e.fillText(l,0,f/c);const h\u003de.measureText(l),{data:g}\u003de.getImageData(0,0,u,i),d\u003d(t\u003d\u003e{let e\u003d0;for(let n\u003d0;n\u003c\u003df;n++)for(let r\u003d0;r\u003cu;r++,e+\u003d4)if(255!\u003dt[e])return f-n;return 0})(g)/c,x\u003d(t\u003d\u003e{let e\u003dt.length-4;for(let n\u003di;n\u003e\u003df;n--)for(let r\u003d0;r\u003cu;r++,e-\u003d4)if(255!\u003dt[e])return n-f;return 0})(g)/c;return e.restore(),{width:h.width,height:d+x,ascent:d,descent:x}}})(),f\u003d(()\u003d\u003e{try{return o(\"normal 10px sans-serif\"),o}catch(t){return u}})(),h\u003d(()\u003d\u003e{try{return s(\"A\",\"normal 10px sans-serif\"),s}catch(t){return i}})(),g\u003dnew Map;function d(t){let e\u003dg.get(t);return null\u003d\u003de\u0026\u0026(e\u003d{font:f(t),glyphs:new Map},g.set(t,e)),e.font}n.font_metrics\u003dd,n.glyph_metrics\u003dfunction(t,e){let n\u003dg.get(e);null\u003d\u003dn\u0026\u0026(d(e),n\u003dg.get(e));let r\u003dn.glyphs.get(t);return null\u003d\u003dr\u0026\u0026(r\u003dh(t,e),n.glyphs.set(t,r)),r},n.parse_css_font_size\u003dfunction(t){const e\u003dt.match(/^\\s*(\\d+(\\.\\d+)?)(\\w+)\\s*$/);if(null!\u003de){const[,t,,n]\u003de,r\u003dNumber(t);if(isFinite(r))return{value:r,unit:n}}return null}},\n      function _(e,t,s,_,a){_();const r\u003de(145),n\u003de(157),g\u003de(156),i\u003de(159),c\u003de(104),h\u003de(99),o\u003de(13),l\u003de(11);class x{constructor(e,t,s,_,a\u003d{},r\u003d{}){this.in_x_scale\u003de,this.in_y_scale\u003dt,this.x_range\u003ds,this.y_range\u003d_,this.extra_x_ranges\u003da,this.extra_y_ranges\u003dr,this._bbox\u003dnew h.BBox,l.assert(null\u003d\u003de.source_range\u0026\u0026null\u003d\u003de.target_range),l.assert(null\u003d\u003dt.source_range\u0026\u0026null\u003d\u003dt.target_range),this._configure_scales()}get bbox(){return this._bbox}_get_ranges(e,t){return new Map(o.entries(Object.assign(Object.assign({},t),{default:e})))}_get_scales(e,t,s){const _\u003dnew Map;for(const[a,g]of t){if(g instanceof c.FactorRange!\u003de instanceof r.CategoricalScale)throw new Error(`Range ${g.type} is incompatible is Scale ${e.type}`);e instanceof n.LogScale\u0026\u0026g instanceof i.DataRange1d\u0026\u0026(g.scale_hint\u003d\"log\");const t\u003de.clone();t.setv({source_range:g,target_range:s}),_.set(a,t)}return _}_configure_frame_ranges(){const{bbox:e}\u003dthis;this._x_target\u003dnew g.Range1d({start:e.left,end:e.right}),this._y_target\u003dnew g.Range1d({start:e.bottom,end:e.top})}_configure_scales(){this._configure_frame_ranges(),this._x_ranges\u003dthis._get_ranges(this.x_range,this.extra_x_ranges),this._y_ranges\u003dthis._get_ranges(this.y_range,this.extra_y_ranges),this._x_scales\u003dthis._get_scales(this.in_x_scale,this._x_ranges,this._x_target),this._y_scales\u003dthis._get_scales(this.in_y_scale,this._y_ranges,this._y_target)}_update_scales(){this._configure_frame_ranges();for(const[,e]of this._x_scales)e.target_range\u003dthis._x_target;for(const[,e]of this._y_scales)e.target_range\u003dthis._y_target}set_geometry(e){this._bbox\u003de,this._update_scales()}get x_target(){return this._x_target}get y_target(){return this._y_target}get x_ranges(){return this._x_ranges}get y_ranges(){return this._y_ranges}get x_scales(){return this._x_scales}get y_scales(){return this._y_scales}get x_scale(){return this._x_scales.get(\"default\")}get y_scale(){return this._y_scales.get(\"default\")}get xscales(){return o.to_object(this.x_scales)}get yscales(){return o.to_object(this.y_scales)}}s.CartesianFrame\u003dx,x.__name__\u003d\"CartesianFrame\"},\n      function _(e,t,r,n,_){n();const c\u003de(146);class s extends c.Scale{constructor(e){super(e)}get s_compute(){const[e,t]\u003dthis._linear_compute_state(),r\u003dthis.source_range;return n\u003d\u003ee*r.synthetic(n)+t}compute(e){return super._linear_compute(this.source_range.synthetic(e))}v_compute(e){return super._linear_v_compute(this.source_range.v_synthetic(e))}invert(e){return this._linear_invert(e)}v_invert(e){return this._linear_v_invert(e)}}r.CategoricalScale\u003ds,s.__name__\u003d\"CategoricalScale\"},\n      function _(t,e,r,n,s){n();const i\u003dt(147),_\u003dt(105),a\u003dt(156),c\u003dt(24);class o extends i.Transform{constructor(t){super(t)}static init_Scale(){this.internal((({Ref:t})\u003d\u003e({source_range:[t(_.Range)],target_range:[t(a.Range1d)]})))}r_compute(t,e){return this.target_range.is_reversed?[this.compute(e),this.compute(t)]:[this.compute(t),this.compute(e)]}r_invert(t,e){return this.target_range.is_reversed?[this.invert(e),this.invert(t)]:[this.invert(t),this.invert(e)]}_linear_compute(t){const[e,r]\u003dthis._linear_compute_state();return e*t+r}_linear_v_compute(t){const[e,r]\u003dthis._linear_compute_state(),n\u003dnew c.ScreenArray(t.length);for(let s\u003d0;s\u003ct.length;s++)n[s]\u003de*t[s]+r;return n}_linear_invert(t){const[e,r]\u003dthis._linear_compute_state();return(t-r)/e}_linear_v_invert(t){const[e,r]\u003dthis._linear_compute_state(),n\u003dnew Float64Array(t.length);for(let s\u003d0;s\u003ct.length;s++)n[s]\u003d(t[s]-r)/e;return n}_linear_compute_state(){const t\u003dthis.source_range.start,e\u003dthis.source_range.end,r\u003dthis.target_range.start,n\u003d(this.target_range.end-r)/(e-t);return[n,-n*t+r]}}r.Scale\u003do,o.__name__\u003d\"Scale\",o.init_Scale()},\n      function _(r,o,t,e,n){e(),n(\"CustomJSTransform\",r(148).CustomJSTransform),n(\"Dodge\",r(150).Dodge),n(\"Interpolator\",r(152).Interpolator),n(\"Jitter\",r(153).Jitter),n(\"LinearInterpolator\",r(154).LinearInterpolator),n(\"StepInterpolator\",r(155).StepInterpolator),n(\"Transform\",r(149).Transform)},\n      function _(t,r,s,n,e){n();const a\u003dt(149),o\u003dt(13),u\u003dt(34);class m extends a.Transform{constructor(t){super(t)}static init_CustomJSTransform(){this.define((({Unknown:t,String:r,Dict:s})\u003d\u003e({args:[s(t),{}],func:[r,\"\"],v_func:[r,\"\"]})))}get names(){return o.keys(this.args)}get values(){return o.values(this.args)}_make_transform(t,r){return new Function(...this.names,t,u.use_strict(r))}get scalar_transform(){return this._make_transform(\"x\",this.func)}get vector_transform(){return this._make_transform(\"xs\",this.v_func)}compute(t){return this.scalar_transform(...this.values,t)}v_compute(t){return this.vector_transform(...this.values,t)}}s.CustomJSTransform\u003dm,m.__name__\u003d\"CustomJSTransform\",m.init_CustomJSTransform()},\n      function _(n,s,o,r,c){r();const e\u003dn(53);class t extends e.Model{constructor(n){super(n)}}o.Transform\u003dt,t.__name__\u003d\"Transform\"},\n      function _(e,t,n,o,s){o();const i\u003de(151);class r extends i.RangeTransform{constructor(e){super(e)}static init_Dodge(){this.define((({Number:e})\u003d\u003e({value:[e,0]})))}_compute(e){return e+this.value}}n.Dodge\u003dr,r.__name__\u003d\"Dodge\",r.init_Dodge()},\n      function _(e,n,t,r,s){r();const a\u003de(149),i\u003de(105),o\u003de(104),c\u003de(24),f\u003de(8);class u extends a.Transform{constructor(e){super(e)}static init_RangeTransform(){this.define((({Ref:e,Nullable:n})\u003d\u003e({range:[n(e(i.Range)),null]})))}v_compute(e){let n;if(this.range instanceof o.FactorRange)n\u003dthis.range.v_synthetic(e);else{if(!f.isArrayableOf(e,f.isNumber))throw new Error(\"unexpected\");n\u003de}const t\u003dnew(c.infer_type(n))(n.length);for(let e\u003d0;e\u003cn.length;e++){const r\u003dn[e];t[e]\u003dthis._compute(r)}return t}compute(e){if(this.range instanceof o.FactorRange)return this._compute(this.range.synthetic(e));if(f.isNumber(e))return this._compute(e);throw new Error(\"unexpected\")}}t.RangeTransform\u003du,u.__name__\u003d\"RangeTransform\",u.init_RangeTransform()},\n      function _(t,e,r,n,o){n();const s\u003dt(149),i\u003dt(57),a\u003dt(24),h\u003dt(9),l\u003dt(8);class d extends s.Transform{constructor(t){super(t),this._sorted_dirty\u003d!0}static init_Interpolator(){this.define((({Boolean:t,Number:e,String:r,Ref:n,Array:o,Or:s,Nullable:a})\u003d\u003e({x:[s(r,o(e))],y:[s(r,o(e))],data:[a(n(i.ColumnarDataSource)),null],clip:[t,!0]})))}connect_signals(){super.connect_signals(),this.connect(this.change,(()\u003d\u003ethis._sorted_dirty\u003d!0))}v_compute(t){const e\u003dnew(a.infer_type(t))(t.length);for(let r\u003d0;r\u003ct.length;r++){const n\u003dt[r];e[r]\u003dthis.compute(n)}return e}sort(t\u003d!1){if(!this._sorted_dirty)return;let e,r;if(l.isString(this.x)\u0026\u0026l.isString(this.y)\u0026\u0026null!\u003dthis.data){const t\u003dthis.data.columns();if(!h.includes(t,this.x))throw new Error(\"The x parameter does not correspond to a valid column name defined in the data parameter\");if(!h.includes(t,this.y))throw new Error(\"The y parameter does not correspond to a valid column name defined in the data parameter\");e\u003dthis.data.get_column(this.x),r\u003dthis.data.get_column(this.y)}else{if(!l.isArray(this.x)||!l.isArray(this.y))throw new Error(\"parameters \u0027x\u0027 and \u0027y\u0027 must be both either string fields or arrays\");e\u003dthis.x,r\u003dthis.y}if(e.length!\u003d\u003dr.length)throw new Error(\"The length for x and y do not match\");if(e.length\u003c2)throw new Error(\"x and y must have at least two elements to support interpolation\");const n\u003de.length,o\u003dnew Uint32Array(n);for(let t\u003d0;t\u003cn;t++)o[t]\u003dt;const s\u003dt?-1:1;o.sort(((t,r)\u003d\u003es*(e[t]-e[r]))),this._x_sorted\u003dnew(a.infer_type(e))(n),this._y_sorted\u003dnew(a.infer_type(r))(n);for(let t\u003d0;t\u003cn;t++)this._x_sorted[t]\u003de[o[t]],this._y_sorted[t]\u003dr[o[t]];this._sorted_dirty\u003d!1}}r.Interpolator\u003dd,d.__name__\u003d\"Interpolator\",d.init_Interpolator()},\n      function _(t,i,e,s,r){s();const n\u003dt(1),u\u003dt(151),o\u003dt(20),a\u003dn.__importStar(t(10));class h extends u.RangeTransform{constructor(t){super(t)}static init_Jitter(){this.define((({Number:t})\u003d\u003e({mean:[t,0],width:[t,1],distribution:[o.Distribution,\"uniform\"]})))}v_compute(t){return null!\u003dthis.previous_values\u0026\u0026this.previous_values.length\u003d\u003dt.length||(this.previous_values\u003dsuper.v_compute(t)),this.previous_values}_compute(t){switch(this.distribution){case\"uniform\":return t+this.mean+(a.random()-.5)*this.width;case\"normal\":return t+a.rnorm(this.mean,this.width)}}}e.Jitter\u003dh,h.__name__\u003d\"Jitter\",h.init_Jitter()},\n      function _(t,s,_,r,e){r();const i\u003dt(9),o\u003dt(152);class n extends o.Interpolator{constructor(t){super(t)}compute(t){if(this.sort(!1),this.clip){if(t\u003cthis._x_sorted[0]||t\u003ethis._x_sorted[this._x_sorted.length-1])return NaN}else{if(t\u003cthis._x_sorted[0])return this._y_sorted[0];if(t\u003ethis._x_sorted[this._x_sorted.length-1])return this._y_sorted[this._y_sorted.length-1]}if(t\u003d\u003dthis._x_sorted[0])return this._y_sorted[0];const s\u003di.find_last_index(this._x_sorted,(s\u003d\u003es\u003ct)),_\u003dthis._x_sorted[s],r\u003dthis._x_sorted[s+1],e\u003dthis._y_sorted[s],o\u003dthis._y_sorted[s+1];return e+(t-_)/(r-_)*(o-e)}}_.LinearInterpolator\u003dn,n.__name__\u003d\"LinearInterpolator\"},\n      function _(t,e,s,r,o){r();const i\u003dt(152),_\u003dt(20),n\u003dt(9);class d extends i.Interpolator{constructor(t){super(t)}static init_StepInterpolator(){this.define((()\u003d\u003e({mode:[_.StepMode,\"after\"]})))}compute(t){if(this.sort(!1),this.clip){if(t\u003cthis._x_sorted[0]||t\u003ethis._x_sorted[this._x_sorted.length-1])return NaN}else{if(t\u003cthis._x_sorted[0])return this._y_sorted[0];if(t\u003ethis._x_sorted[this._x_sorted.length-1])return this._y_sorted[this._y_sorted.length-1]}let e;switch(this.mode){case\"after\":e\u003dn.find_last_index(this._x_sorted,(e\u003d\u003et\u003e\u003de));break;case\"before\":e\u003dn.find_index(this._x_sorted,(e\u003d\u003et\u003c\u003de));break;case\"center\":{const s\u003dn.map(this._x_sorted,(e\u003d\u003eMath.abs(e-t))),r\u003dn.min(s);e\u003dn.find_index(s,(t\u003d\u003er\u003d\u003d\u003dt));break}default:throw new Error(`unknown mode: ${this.mode}`)}return-1!\u003de?this._y_sorted[e]:NaN}}s.StepInterpolator\u003dd,d.__name__\u003d\"StepInterpolator\",d.init_StepInterpolator()},\n      function _(t,e,s,n,i){n();const a\u003dt(105);class r extends a.Range{constructor(t){super(t)}static init_Range1d(){this.define((({Number:t,Nullable:e})\u003d\u003e({start:[t,0],end:[t,1],reset_start:[e(t),null,{on_update(t,e){e._reset_start\u003dnull!\u003dt?t:e.start}}],reset_end:[e(t),null,{on_update(t,e){e._reset_end\u003dnull!\u003dt?t:e.end}}]})))}_set_auto_bounds(){if(\"auto\"\u003d\u003dthis.bounds){const t\u003dMath.min(this._reset_start,this._reset_end),e\u003dMath.max(this._reset_start,this._reset_end);this.setv({bounds:[t,e]},{silent:!0})}}initialize(){super.initialize(),this._set_auto_bounds()}get min(){return Math.min(this.start,this.end)}get max(){return Math.max(this.start,this.end)}reset(){this._set_auto_bounds();const{_reset_start:t,_reset_end:e}\u003dthis;this.start!\u003dt||this.end!\u003de?this.setv({start:t,end:e}):this.change.emit()}map(t){return new r({start:t(this.start),end:t(this.end)})}widen(t){let{start:e,end:s}\u003dthis;return this.is_reversed?(e+\u003dt,s-\u003dt):(e-\u003dt,s+\u003dt),new r({start:e,end:s})}}s.Range1d\u003dr,r.__name__\u003d\"Range1d\",r.init_Range1d()},\n      function _(t,e,o,n,s){n();const a\u003dt(158),r\u003dt(24);class c extends a.ContinuousScale{constructor(t){super(t)}get s_compute(){const[t,e,o,n]\u003dthis._compute_state();return s\u003d\u003e{if(0\u003d\u003do)return 0;{const a\u003d(Math.log(s)-n)/o;return isFinite(a)?a*t+e:NaN}}}compute(t){const[e,o,n,s]\u003dthis._compute_state();let a;if(0\u003d\u003dn)a\u003d0;else{const r\u003d(Math.log(t)-s)/n;a\u003disFinite(r)?r*e+o:NaN}return a}v_compute(t){const[e,o,n,s]\u003dthis._compute_state(),a\u003dnew r.ScreenArray(t.length);if(0\u003d\u003dn)for(let e\u003d0;e\u003ct.length;e++)a[e]\u003d0;else for(let r\u003d0;r\u003ct.length;r++){const c\u003d(Math.log(t[r])-s)/n;let l;l\u003disFinite(c)?c*e+o:NaN,a[r]\u003dl}return a}invert(t){const[e,o,n,s]\u003dthis._compute_state(),a\u003d(t-o)/e;return Math.exp(n*a+s)}v_invert(t){const[e,o,n,s]\u003dthis._compute_state(),a\u003dnew Float64Array(t.length);for(let r\u003d0;r\u003ct.length;r++){const c\u003d(t[r]-o)/e;a[r]\u003dMath.exp(n*c+s)}return a}_get_safe_factor(t,e){let o\u003dt\u003c0?0:t,n\u003de\u003c0?0:e;if(o\u003d\u003dn)if(0\u003d\u003do)[o,n]\u003d[1,10];else{const t\u003dMath.log(o)/Math.log(10);o\u003d10**Math.floor(t),n\u003dMath.ceil(t)!\u003dMath.floor(t)?10**Math.ceil(t):10**(Math.ceil(t)+1)}return[o,n]}_compute_state(){const t\u003dthis.source_range.start,e\u003dthis.source_range.end,o\u003dthis.target_range.start,n\u003dthis.target_range.end-o,[s,a]\u003dthis._get_safe_factor(t,e);let r,c;0\u003d\u003ds?(r\u003dMath.log(a),c\u003d0):(r\u003dMath.log(a)-Math.log(s),c\u003dMath.log(s));return[n,o,r,c]}}o.LogScale\u003dc,c.__name__\u003d\"LogScale\"},\n      function _(n,c,o,s,e){s();const t\u003dn(146);class u extends t.Scale{constructor(n){super(n)}}o.ContinuousScale\u003du,u.__name__\u003d\"ContinuousScale\"},\n      function _(t,i,n,a,e){a();const s\u003dt(1),l\u003dt(160),_\u003dt(20),o\u003dt(9),h\u003dt(19),r\u003ds.__importStar(t(99)),d\u003dt(161);class u extends l.DataRange{constructor(t){super(t),this.have_updated_interactively\u003d!1}static init_DataRange1d(){this.define((({Boolean:t,Number:i,Nullable:n})\u003d\u003e({start:[i],end:[i],range_padding:[i,.1],range_padding_units:[_.PaddingUnits,\"percent\"],flipped:[t,!1],follow:[n(_.StartEnd),null],follow_interval:[n(i),null],default_span:[i,2],only_visible:[t,!1]}))),this.internal((({Enum:t})\u003d\u003e({scale_hint:[t(\"log\",\"auto\"),\"auto\"]})))}initialize(){super.initialize(),this._initial_start\u003dthis.start,this._initial_end\u003dthis.end,this._initial_range_padding\u003dthis.range_padding,this._initial_range_padding_units\u003dthis.range_padding_units,this._initial_follow\u003dthis.follow,this._initial_follow_interval\u003dthis.follow_interval,this._initial_default_span\u003dthis.default_span,this._plot_bounds\u003dnew Map}get min(){return Math.min(this.start,this.end)}get max(){return Math.max(this.start,this.end)}computed_renderers(){const{renderers:t,names:i}\u003dthis,n\u003do.concat(this.plots.map((t\u003d\u003et.data_renderers)));return d.compute_renderers(0\u003d\u003dt.length?\"auto\":t,n,i)}_compute_plot_bounds(t,i){let n\u003dr.empty();for(const a of t){const t\u003di.get(a);null\u003d\u003dt||!a.visible\u0026\u0026this.only_visible||(n\u003dr.union(n,t))}return n}adjust_bounds_for_aspect(t,i){const n\u003dr.empty();let a\u003dt.x1-t.x0;a\u003c\u003d0\u0026\u0026(a\u003d1);let e\u003dt.y1-t.y0;e\u003c\u003d0\u0026\u0026(e\u003d1);const s\u003d.5*(t.x1+t.x0),l\u003d.5*(t.y1+t.y0);return a\u003ci*e?a\u003di*e:e\u003da/i,n.x1\u003ds+.5*a,n.x0\u003ds-.5*a,n.y1\u003dl+.5*e,n.y0\u003dl-.5*e,n}_compute_min_max(t,i){let n,a,e\u003dr.empty();for(const i of t)e\u003dr.union(e,i);return[n,a]\u003d0\u003d\u003di?[e.x0,e.x1]:[e.y0,e.y1],[n,a]}_compute_range(t,i){const n\u003dthis.range_padding;let a,e;if(null!\u003dthis._initial_start\u0026\u0026(t\u003dthis._initial_start),null!\u003dthis._initial_end\u0026\u0026(i\u003dthis._initial_end),\"log\"\u003d\u003dthis.scale_hint){let s,l;if((isNaN(t)||!isFinite(t)||t\u003c\u003d0)\u0026\u0026(t\u003disNaN(i)||!isFinite(i)||i\u003c\u003d0?.1:i/100,h.logger.warn(`could not determine minimum data value for log axis, DataRange1d using value ${t}`)),(isNaN(i)||!isFinite(i)||i\u003c\u003d0)\u0026\u0026(i\u003disNaN(t)||!isFinite(t)||t\u003c\u003d0?10:100*t,h.logger.warn(`could not determine maximum data value for log axis, DataRange1d using value ${i}`)),i\u003d\u003dt)l\u003dthis.default_span+.001,s\u003dMath.log(t)/Math.log(10);else{let a,e;\"percent\"\u003d\u003dthis.range_padding_units?(a\u003dMath.log(t)/Math.log(10),e\u003dMath.log(i)/Math.log(10),l\u003d(e-a)*(1+n)):(a\u003dMath.log(t-n)/Math.log(10),e\u003dMath.log(i+n)/Math.log(10),l\u003de-a),s\u003d(a+e)/2}a\u003d10**(s-l/2),e\u003d10**(s+l/2)}else{let s;s\u003di\u003d\u003dt?this.default_span:\"percent\"\u003d\u003dthis.range_padding_units?(i-t)*(1+n):i-t+2*n;const l\u003d(i+t)/2;a\u003dl-s/2,e\u003dl+s/2}let s\u003d1;this.flipped\u0026\u0026([a,e]\u003d[e,a],s\u003d-1);const l\u003dthis.follow_interval;return null!\u003dl\u0026\u0026Math.abs(a-e)\u003el\u0026\u0026(\"start\"\u003d\u003dthis.follow?e\u003da+s*l:\"end\"\u003d\u003dthis.follow\u0026\u0026(a\u003de-s*l)),[a,e]}update(t,i,n,a){if(this.have_updated_interactively)return;const e\u003dthis.computed_renderers();let s\u003dthis._compute_plot_bounds(e,t);null!\u003da\u0026\u0026(s\u003dthis.adjust_bounds_for_aspect(s,a)),this._plot_bounds.set(n,s);const[l,_]\u003dthis._compute_min_max(this._plot_bounds.values(),i);let[o,h]\u003dthis._compute_range(l,_);null!\u003dthis._initial_start\u0026\u0026(\"log\"\u003d\u003dthis.scale_hint?this._initial_start\u003e0\u0026\u0026(o\u003dthis._initial_start):o\u003dthis._initial_start),null!\u003dthis._initial_end\u0026\u0026(\"log\"\u003d\u003dthis.scale_hint?this._initial_end\u003e0\u0026\u0026(h\u003dthis._initial_end):h\u003dthis._initial_end);let r\u003d!1;\"auto\"\u003d\u003dthis.bounds\u0026\u0026(this.setv({bounds:[o,h]},{silent:!0}),r\u003d!0);const[d,u]\u003d[this.start,this.end];if(o!\u003dd||h!\u003du){const t\u003d{};o!\u003dd\u0026\u0026(t.start\u003do),h!\u003du\u0026\u0026(t.end\u003dh),this.setv(t),r\u003d!1}r\u0026\u0026this.change.emit()}reset(){this.have_updated_interactively\u003d!1,this.setv({range_padding:this._initial_range_padding,range_padding_units:this._initial_range_padding_units,follow:this._initial_follow,follow_interval:this._initial_follow_interval,default_span:this._initial_default_span},{silent:!0}),this.change.emit()}}n.DataRange1d\u003du,u.__name__\u003d\"DataRange1d\",u.init_DataRange1d()},\n      function _(a,e,n,t,r){t();const s\u003da(105),i\u003da(62);class R extends s.Range{constructor(a){super(a)}static init_DataRange(){this.define((({String:a,Array:e,Ref:n})\u003d\u003e({names:[e(a),[]],renderers:[e(n(i.DataRenderer)),[]]})))}}n.DataRange\u003dR,R.__name__\u003d\"DataRange\",R.init_DataRange()},\n      function _(n,e,t,r,u){r();const l\u003dn(9);t.compute_renderers\u003dfunction(n,e,t){if(null\u003d\u003dn)return[];let r\u003d\"auto\"\u003d\u003dn?e:n;return t.length\u003e0\u0026\u0026(r\u003dr.filter((n\u003d\u003el.includes(t,n.name)))),r}},\n      function _(i,s,x,A,o){A(),o(\"Axis\",i(163).Axis),o(\"CategoricalAxis\",i(170).CategoricalAxis),o(\"ContinuousAxis\",i(173).ContinuousAxis),o(\"DatetimeAxis\",i(174).DatetimeAxis),o(\"LinearAxis\",i(175).LinearAxis),o(\"LogAxis\",i(192).LogAxis),o(\"MercatorAxis\",i(195).MercatorAxis)},\n      function _(t,e,i,s,o){s();const n\u003dt(1),a\u003dt(164),l\u003dt(165),r\u003dt(166),_\u003dt(169),h\u003dn.__importStar(t(48)),c\u003dt(20),b\u003dt(24),m\u003dt(140),d\u003dt(9),u\u003dt(8),x\u003dt(167),g\u003dt(104),{abs:f}\u003dMath;class p extends a.GuideRendererView{update_layout(){this.layout\u003dnew m.SideLayout(this.panel,(()\u003d\u003ethis.get_size()),!0),this.layout.on_resize((()\u003d\u003ethis._coordinates\u003dvoid 0))}get_size(){const{visible:t,fixed_location:e}\u003dthis.model;if(t\u0026\u0026null\u003d\u003de\u0026\u0026this.is_renderable){const{extents:t}\u003dthis;return{width:0,height:Math.round(t.tick+t.tick_label+t.axis_label)}}return{width:0,height:0}}get is_renderable(){const[t,e]\u003dthis.ranges;return t.is_valid\u0026\u0026e.is_valid}_render(){var t;if(!this.is_renderable)return;const{tick_coords:e,extents:i}\u003dthis,s\u003dthis.layer.ctx;s.save(),this._draw_rule(s,i),this._draw_major_ticks(s,i,e),this._draw_minor_ticks(s,i,e),this._draw_major_labels(s,i,e),this._draw_axis_label(s,i,e),null\u003d\u003d\u003d(t\u003dthis._paint)||void 0\u003d\u003d\u003dt||t.call(this,s,i,e),s.restore()}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.plot_view.request_layout()))}get needs_clip(){return null!\u003dthis.model.fixed_location}_draw_rule(t,e){if(!this.visuals.axis_line.doit)return;const[i,s]\u003dthis.rule_coords,[o,n]\u003dthis.coordinates.map_to_screen(i,s),[a,l]\u003dthis.normals,[r,_]\u003dthis.offsets;this.visuals.axis_line.set_value(t),t.beginPath();for(let e\u003d0;e\u003co.length;e++){const i\u003dMath.round(o[e]+a*r),s\u003dMath.round(n[e]+l*_);t.lineTo(i,s)}t.stroke()}_draw_major_ticks(t,e,i){const s\u003dthis.model.major_tick_in,o\u003dthis.model.major_tick_out,n\u003dthis.visuals.major_tick_line;this._draw_ticks(t,i.major,s,o,n)}_draw_minor_ticks(t,e,i){const s\u003dthis.model.minor_tick_in,o\u003dthis.model.minor_tick_out,n\u003dthis.visuals.minor_tick_line;this._draw_ticks(t,i.minor,s,o,n)}_draw_major_labels(t,e,i){const s\u003di.major,o\u003dthis.compute_labels(s[this.dimension]),n\u003dthis.model.major_label_orientation,a\u003de.tick+this.model.major_label_standoff,l\u003dthis.visuals.major_label_text;this._draw_oriented_labels(t,o,s,n,this.panel.side,a,l)}_axis_label_extent(){const t\u003dthis.model.axis_label;if(!t)return 0;const e\u003dnew x.TextBox({text:t});e.visuals\u003dthis.visuals.axis_label_text,e.angle\u003dthis.panel.get_label_angle_heuristic(\"parallel\"),e.base_font_size\u003dthis.plot_view.base_font_size;const i\u003de.size(),s\u003d0\u003d\u003dthis.dimension?i.height:i.width,o\u003dthis.model.axis_label_standoff;return s\u003e0?o+s+3:0}_draw_axis_label(t,e,i){const s\u003dthis.model.axis_label;if(!s||null!\u003dthis.model.fixed_location)return;const o\u003dnew x.TextBox({text:s});o.visuals\u003dthis.visuals.axis_label_text,o.angle\u003dthis.panel.get_label_angle_heuristic(\"parallel\"),o.base_font_size\u003dthis.plot_view.base_font_size;const[n,a]\u003d(()\u003d\u003e{const{bbox:t}\u003dthis.layout;switch(this.panel.side){case\"above\":return[t.hcenter,t.bottom];case\"below\":return[t.hcenter,t.top];case\"left\":return[t.right,t.vcenter];case\"right\":return[t.left,t.vcenter]}})(),[l,r]\u003dthis.normals,_\u003de.tick+e.tick_label+this.model.axis_label_standoff,{vertical_align:h,align:c}\u003dthis.panel.get_label_text_heuristics(\"parallel\");o.position\u003d{sx:n+l*_,sy:a+r*_,x_anchor:c,y_anchor:h},o.align\u003dc,o.paint(t)}_draw_ticks(t,e,i,s,o){if(!o.doit)return;const[n,a]\u003de,[l,r]\u003dthis.coordinates.map_to_screen(n,a),[_,h]\u003dthis.normals,[c,b]\u003dthis.offsets,[m,d]\u003d[_*(c-i),h*(b-i)],[u,x]\u003d[_*(c+s),h*(b+s)];o.set_value(t),t.beginPath();for(let e\u003d0;e\u003cl.length;e++){const i\u003dMath.round(l[e]+u),s\u003dMath.round(r[e]+x),o\u003dMath.round(l[e]+m),n\u003dMath.round(r[e]+d);t.moveTo(i,s),t.lineTo(o,n)}t.stroke()}_draw_oriented_labels(t,e,i,s,o,n,a){if(!a.doit||0\u003d\u003de.length)return;const[l,r]\u003di,[_,h]\u003dthis.coordinates.map_to_screen(l,r),[c,m]\u003dthis.offsets,[d,u]\u003dthis.normals,g\u003dd*(c+n),f\u003du*(m+n),{vertical_align:p,align:k}\u003dthis.panel.get_label_text_heuristics(s),w\u003dthis.panel.get_label_angle_heuristic(s);e.visuals\u003da,e.angle\u003dw,e.base_font_size\u003dthis.plot_view.base_font_size;for(let t\u003d0;t\u003ce.length;t++){const i\u003de.items[t];i.position\u003d{sx:_[t]+g,sy:h[t]+f,x_anchor:k,y_anchor:p},i instanceof x.TextBox\u0026\u0026(i.align\u003dk)}const j\u003de.length,v\u003db.Indices.all_set(j),{items:y}\u003de,z\u003dy.map((t\u003d\u003et.bbox())),T\u003d(()\u003d\u003e{const[t]\u003dthis.ranges;return t.is_reversed?0\u003d\u003dthis.dimension?(t,e)\u003d\u003ez[t].left-z[e].right:(t,e)\u003d\u003ez[e].top-z[t].bottom:0\u003d\u003dthis.dimension?(t,e)\u003d\u003ez[e].left-z[t].right:(t,e)\u003d\u003ez[t].top-z[e].bottom})(),{major_label_policy:O}\u003dthis.model,A\u003dO.filter(v,z,T),M\u003d[...A.ones()];if(0!\u003dM.length){const t\u003dthis.parent.canvas_view.bbox,e\u003de\u003d\u003e{const i\u003dz[e];if(i.left\u003c0){const t\u003d-i.left,{position:s}\u003dy[e];y[e].position\u003dObject.assign(Object.assign({},s),{sx:s.sx+t})}else if(i.right\u003et.width){const s\u003di.right-t.width,{position:o}\u003dy[e];y[e].position\u003dObject.assign(Object.assign({},o),{sx:o.sx-s})}},i\u003de\u003d\u003e{const i\u003dz[e];if(i.top\u003c0){const t\u003d-i.top,{position:s}\u003dy[e];y[e].position\u003dObject.assign(Object.assign({},s),{sy:s.sy+t})}else if(i.bottom\u003et.height){const s\u003di.bottom-t.height,{position:o}\u003dy[e];y[e].position\u003dObject.assign(Object.assign({},o),{sy:o.sy-s})}},s\u003dM[0],o\u003dM[M.length-1];0\u003d\u003dthis.dimension?(e(s),e(o)):(i(s),i(o))}for(const e of A){y[e].paint(t)}}_tick_extent(){return this.model.major_tick_out}_tick_label_extents(){const t\u003dthis.tick_coords.major,e\u003dthis.compute_labels(t[this.dimension]),i\u003dthis.model.major_label_orientation,s\u003dthis.model.major_label_standoff,o\u003dthis.visuals.major_label_text;return[this._oriented_labels_extent(e,i,s,o)]}get extents(){const t\u003dthis._tick_label_extents();return{tick:this._tick_extent(),tick_labels:t,tick_label:d.sum(t),axis_label:this._axis_label_extent()}}_oriented_labels_extent(t,e,i,s){if(0\u003d\u003dt.length)return 0;const o\u003dthis.panel.get_label_angle_heuristic(e);t.visuals\u003ds,t.angle\u003do,t.base_font_size\u003dthis.plot_view.base_font_size;const n\u003dt.max_size(),a\u003d0\u003d\u003dthis.dimension?n.height:n.width;return a\u003e0?i+a+3:0}get normals(){return this.panel.normals}get dimension(){return this.panel.dimension}compute_labels(t){const e\u003dthis.model.formatter.format_graphics(t,this),{major_label_overrides:i}\u003dthis.model;for(let s\u003d0;s\u003ct.length;s++){const o\u003di[t[s]];null!\u003do\u0026\u0026(e[s]\u003dnew x.TextBox({text:o}))}return new x.GraphicsBoxes(e)}get offsets(){if(null!\u003dthis.model.fixed_location)return[0,0];const{frame:t}\u003dthis.plot_view;let[e,i]\u003d[0,0];switch(this.panel.side){case\"below\":i\u003df(this.layout.bbox.top-t.bbox.bottom);break;case\"above\":i\u003df(this.layout.bbox.bottom-t.bbox.top);break;case\"right\":e\u003df(this.layout.bbox.left-t.bbox.right);break;case\"left\":e\u003df(this.layout.bbox.right-t.bbox.left)}return[e,i]}get ranges(){const t\u003dthis.dimension,e\u003d(t+1)%2,{ranges:i}\u003dthis.coordinates;return[i[t],i[e]]}get computed_bounds(){const[t]\u003dthis.ranges,e\u003dthis.model.bounds,i\u003d[t.min,t.max];if(\"auto\"\u003d\u003de)return[t.min,t.max];{let t,s;const[o,n]\u003de,[a,l]\u003di,{min:r,max:_}\u003dMath;return f(o-n)\u003ef(a-l)?(t\u003d_(r(o,n),a),s\u003dr(_(o,n),l)):(t\u003dr(o,n),s\u003d_(o,n)),[t,s]}}get rule_coords(){const t\u003dthis.dimension,e\u003d(t+1)%2,[i]\u003dthis.ranges,[s,o]\u003dthis.computed_bounds,n\u003d[new Array(2),new Array(2)];return n[t][0]\u003dMath.max(s,i.min),n[t][1]\u003dMath.min(o,i.max),n[t][0]\u003en[t][1]\u0026\u0026(n[t][0]\u003dn[t][1]\u003dNaN),n[e][0]\u003dthis.loc,n[e][1]\u003dthis.loc,n}get tick_coords(){const t\u003dthis.dimension,e\u003d(t+1)%2,[i]\u003dthis.ranges,[s,o]\u003dthis.computed_bounds,n\u003dthis.model.ticker.get_ticks(s,o,i,this.loc),a\u003dn.major,l\u003dn.minor,r\u003d[[],[]],_\u003d[[],[]],[h,c]\u003d[i.min,i.max];for(let i\u003d0;i\u003ca.length;i++)a[i]\u003ch||a[i]\u003ec||(r[t].push(a[i]),r[e].push(this.loc));for(let i\u003d0;i\u003cl.length;i++)l[i]\u003ch||l[i]\u003ec||(_[t].push(l[i]),_[e].push(this.loc));return{major:r,minor:_}}get loc(){const{fixed_location:t}\u003dthis.model;if(null!\u003dt){if(u.isNumber(t))return t;const[,e]\u003dthis.ranges;if(e instanceof g.FactorRange)return e.synthetic(t);throw new Error(\"unexpected\")}const[,e]\u003dthis.ranges;switch(this.panel.side){case\"left\":case\"below\":return e.start;case\"right\":case\"above\":return e.end}}serializable_state(){return Object.assign(Object.assign({},super.serializable_state()),{bbox:this.layout.bbox.box})}}i.AxisView\u003dp,p.__name__\u003d\"AxisView\";class k extends a.GuideRenderer{constructor(t){super(t)}static init_Axis(){this.prototype.default_view\u003dp,this.mixins([[\"axis_\",h.Line],[\"major_tick_\",h.Line],[\"minor_tick_\",h.Line],[\"major_label_\",h.Text],[\"axis_label_\",h.Text]]),this.define((({Any:t,Int:e,Number:i,String:s,Ref:o,Dict:n,Tuple:a,Or:h,Nullable:b,Auto:m})\u003d\u003e({bounds:[h(a(i,i),m),\"auto\"],ticker:[o(l.Ticker)],formatter:[o(r.TickFormatter)],axis_label:[b(s),\"\"],axis_label_standoff:[e,5],major_label_standoff:[e,5],major_label_orientation:[h(c.TickLabelOrientation,i),\"horizontal\"],major_label_overrides:[n(s),{}],major_label_policy:[o(_.LabelingPolicy),()\u003d\u003enew _.AllLabels],major_tick_in:[i,2],major_tick_out:[i,6],minor_tick_in:[i,0],minor_tick_out:[i,4],fixed_location:[b(h(i,t)),null]}))),this.override({axis_line_color:\"black\",major_tick_line_color:\"black\",minor_tick_line_color:\"black\",major_label_text_font_size:\"11px\",major_label_text_align:\"center\",major_label_text_baseline:\"alphabetic\",axis_label_text_font_size:\"13px\",axis_label_text_font_style:\"italic\"})}}i.Axis\u003dk,k.__name__\u003d\"Axis\",k.init_Axis()},\n      function _(e,r,d,i,n){i();const s\u003de(41);class t extends s.RendererView{}d.GuideRendererView\u003dt,t.__name__\u003d\"GuideRendererView\";class _ extends s.Renderer{constructor(e){super(e)}static init_GuideRenderer(){this.override({level:\"guide\"})}}d.GuideRenderer\u003d_,_.__name__\u003d\"GuideRenderer\",_.init_GuideRenderer()},\n      function _(c,e,n,s,o){s();const r\u003dc(53);class t extends r.Model{constructor(c){super(c)}}n.Ticker\u003dt,t.__name__\u003d\"Ticker\"},\n      function _(t,o,r,e,c){e();const n\u003dt(53),a\u003dt(167);class m extends n.Model{constructor(t){super(t)}format_graphics(t,o){return this.doFormat(t,o).map((t\u003d\u003enew a.TextBox({text:t})))}compute(t,o){return this.doFormat([t],null!\u003do?o:{loc:0})[0]}v_compute(t,o){return this.doFormat(t,null!\u003do?o:{loc:0})}}r.TickFormatter\u003dm,m.__name__\u003d\"TickFormatter\"},\n      function _(t,e,s,i,n){i();const h\u003dt(99),o\u003dt(143),a\u003dt(9),r\u003dt(8),c\u003dt(168),_\u003dt(22);s.text_width\u003d(()\u003d\u003e{const t\u003ddocument.createElement(\"canvas\").getContext(\"2d\");let e\u003d\"\";return(s,i)\u003d\u003e(i!\u003de\u0026\u0026(e\u003di,t.font\u003di),t.measureText(s).width)})();class l{constructor(){this._position\u003d{sx:0,sy:0},this.font_size_scale\u003d1,this._base_font_size\u003d13}set base_font_size(t){this._base_font_size\u003dt}get base_font_size(){return this._base_font_size}set position(t){this._position\u003dt}get position(){return this._position}infer_text_height(){return\"ascent_descent\"}bbox(){const{p0:t,p1:e,p2:s,p3:i}\u003dthis.rect(),n\u003dMath.min(t.x,e.x,s.x,i.x),o\u003dMath.min(t.y,e.y,s.y,i.y),a\u003dMath.max(t.x,e.x,s.x,i.x),r\u003dMath.max(t.y,e.y,s.y,i.y);return new h.BBox({left:n,right:a,top:o,bottom:r})}size(){const{width:t,height:e}\u003dthis._size(),{angle:s}\u003dthis;if(s){const i\u003dMath.cos(Math.abs(s)),n\u003dMath.sin(Math.abs(s));return{width:Math.abs(t*i+e*n),height:Math.abs(t*n+e*i)}}return{width:t,height:e}}rect(){const t\u003dthis._rect(),{angle:e}\u003dthis;if(e){const{sx:s,sy:i}\u003dthis.position,n\u003dnew c.AffineTransform;return n.translate(s,i),n.rotate(e),n.translate(-s,-i),n.apply_rect(t)}return t}paint_rect(t){const{p0:e,p1:s,p2:i,p3:n}\u003dthis.rect();t.save(),t.strokeStyle\u003d\"red\",t.lineWidth\u003d1,t.beginPath();const{round:h}\u003dMath;t.moveTo(h(e.x),h(e.y)),t.lineTo(h(s.x),h(s.y)),t.lineTo(h(i.x),h(i.y)),t.lineTo(h(n.x),h(n.y)),t.closePath(),t.stroke(),t.restore()}paint_bbox(t){const{x:e,y:s,width:i,height:n}\u003dthis.bbox();t.save(),t.strokeStyle\u003d\"blue\",t.lineWidth\u003d1,t.beginPath();const{round:h}\u003dMath;t.moveTo(h(e),h(s)),t.lineTo(h(e),h(s+n)),t.lineTo(h(e+i),h(s+n)),t.lineTo(h(e+i),h(s)),t.closePath(),t.stroke(),t.restore()}}s.GraphicsBox\u003dl,l.__name__\u003d\"GraphicsBox\";class x extends l{constructor({text:t}){super(),this.align\u003d\"left\",this.text\u003dt}set visuals(t){const e\u003dt.text_color.get_value(),s\u003dt.text_alpha.get_value(),i\u003dt.text_font_style.get_value();let n\u003dt.text_font_size.get_value();const h\u003dt.text_font.get_value(),{font_size_scale:a,base_font_size:r}\u003dthis,c\u003do.parse_css_font_size(n);if(null!\u003dc){let{value:t,unit:e}\u003dc;t*\u003da,\"em\"\u003d\u003de\u0026\u0026r\u0026\u0026(t*\u003dr,e\u003d\"px\"),n\u003d`${t}${e}`}const l\u003d`${i} ${n} ${h}`;this.font\u003dl,this.color\u003d_.color2css(e,s),this.line_height\u003dt.text_line_height.get_value()}infer_text_height(){if(this.text.includes(\"\\n\"))return\"ascent_descent\";return function(t){for(const e of new Set(t))if(!(\"0\"\u003c\u003de\u0026\u0026e\u003c\u003d\"9\"))switch(e){case\",\":case\".\":case\"+\":case\"-\":case\"−\":case\"e\":continue;default:return!1}return!0}(this.text)?\"cap\":\"ascent_descent\"}_text_line(t){var e;const s\u003dnull!\u003d\u003d(e\u003dthis.text_height_metric)\u0026\u0026void 0!\u003d\u003de?e:this.infer_text_height(),i\u003d(()\u003d\u003e{switch(s){case\"x\":case\"x_descent\":return t.x_height;case\"cap\":case\"cap_descent\":return t.cap_height;case\"ascent\":case\"ascent_descent\":return t.ascent}})(),n\u003d(()\u003d\u003e{switch(s){case\"x\":case\"cap\":case\"ascent\":return 0;case\"x_descent\":case\"cap_descent\":case\"ascent_descent\":return t.descent}})();return{height:i+n,ascent:i,descent:n}}get nlines(){return this.text.split(\"\\n\").length}_size(){var t,e;const{font:i}\u003dthis,n\u003do.font_metrics(i),h\u003d(this.line_height-1)*n.height,r\u003d\"\"\u003d\u003dthis.text,c\u003dthis.text.split(\"\\n\"),_\u003dc.length,l\u003dc.map((t\u003d\u003es.text_width(t,i))),x\u003dthis._text_line(n).height*_,u\u003d\"%\"\u003d\u003d(null\u003d\u003d\u003d(t\u003dthis.width)||void 0\u003d\u003d\u003dt?void 0:t.unit)?this.width.value:1,p\u003d\"%\"\u003d\u003d(null\u003d\u003d\u003d(e\u003dthis.height)||void 0\u003d\u003d\u003de?void 0:e.unit)?this.height.value:1;return{width:a.max(l)*u,height:r?0:(x+h*(_-1))*p,metrics:n}}_computed_position(t,e,s){const{width:i,height:n}\u003dt,{sx:h,sy:o,x_anchor:a\u003d\"left\",y_anchor:c\u003d\"center\"}\u003dthis.position;return{x:h-(()\u003d\u003e{if(r.isNumber(a))return a*i;switch(a){case\"left\":return 0;case\"center\":return.5*i;case\"right\":return i}})(),y:o-(()\u003d\u003e{var t;if(r.isNumber(c))return c*n;switch(c){case\"top\":return 0;case\"center\":return.5*n;case\"bottom\":return n;case\"baseline\":if(1!\u003ds)return.5*n;switch(null!\u003d\u003d(t\u003dthis.text_height_metric)\u0026\u0026void 0!\u003d\u003dt?t:this.infer_text_height()){case\"x\":case\"x_descent\":return e.x_height;case\"cap\":case\"cap_descent\":return e.cap_height;case\"ascent\":case\"ascent_descent\":return e.ascent}}})()}}_rect(){const{width:t,height:e,metrics:s}\u003dthis._size(),i\u003dthis.text.split(\"\\n\").length,{x:n,y:o}\u003dthis._computed_position({width:t,height:e},s,i);return new h.BBox({x:n,y:o,width:t,height:e}).rect}paint(t){var e,i;const{font:n}\u003dthis,h\u003do.font_metrics(n),r\u003d(this.line_height-1)*h.height,c\u003dthis.text.split(\"\\n\"),_\u003dc.length,l\u003dc.map((t\u003d\u003es.text_width(t,n))),x\u003dthis._text_line(h),u\u003dx.height*_,p\u003d\"%\"\u003d\u003d(null\u003d\u003d\u003d(e\u003dthis.width)||void 0\u003d\u003d\u003de?void 0:e.unit)?this.width.value:1,f\u003d\"%\"\u003d\u003d(null\u003d\u003d\u003d(i\u003dthis.height)||void 0\u003d\u003d\u003di?void 0:i.unit)?this.height.value:1,g\u003da.max(l)*p,d\u003d(u+r*(_-1))*f;t.save(),t.fillStyle\u003dthis.color,t.font\u003dthis.font,t.textAlign\u003d\"left\",t.textBaseline\u003d\"alphabetic\";const{sx:b,sy:m}\u003dthis.position,{align:y}\u003dthis,{angle:v}\u003dthis;v\u0026\u0026(t.translate(b,m),t.rotate(v),t.translate(-b,-m));let{x:w,y:z}\u003dthis._computed_position({width:g,height:d},h,_);if(\"justify\"\u003d\u003dy)for(let e\u003d0;e\u003c_;e++){let i\u003dw;const h\u003dc[e].split(\" \"),o\u003dh.length,_\u003dh.map((t\u003d\u003es.text_width(t,n))),l\u003d(g-a.sum(_))/(o-1);for(let e\u003d0;e\u003co;e++)t.fillText(h[e],i,z),i+\u003d_[e]+l;z+\u003dx.height+r}else for(let e\u003d0;e\u003c_;e++){const s\u003dw+(()\u003d\u003e{switch(y){case\"left\":return 0;case\"center\":return.5*(g-l[e]);case\"right\":return g-l[e]}})();t.fillStyle\u003dthis.color,t.fillText(c[e],s,z+x.ascent),z+\u003dx.height+r}t.restore()}}s.TextBox\u003dx,x.__name__\u003d\"TextBox\";class u extends l{constructor(t,e){super(),this.base\u003dt,this.expo\u003de}get children(){return[this.base,this.expo]}set base_font_size(t){super.base_font_size\u003dt,this.base.base_font_size\u003dt,this.expo.base_font_size\u003dt}set position(t){this._position\u003dt;const e\u003dthis.base.size(),s\u003dthis.expo.size(),i\u003dthis._shift_scale()*e.height,n\u003dMath.max(e.height,i+s.height);this.base.position\u003d{sx:0,x_anchor:\"left\",sy:n,y_anchor:\"bottom\"},this.expo.position\u003d{sx:e.width,x_anchor:\"left\",sy:i,y_anchor:\"bottom\"}}get position(){return this._position}set visuals(t){this.expo.font_size_scale\u003d.7,this.base.visuals\u003dt,this.expo.visuals\u003dt}_shift_scale(){if(this.base instanceof x\u0026\u00261\u003d\u003dthis.base.nlines){const{x_height:t,cap_height:e}\u003do.font_metrics(this.base.font);return t/e}return 2/3}infer_text_height(){return this.base.infer_text_height()}_rect(){const t\u003dthis.base.bbox(),e\u003dthis.expo.bbox(),s\u003dt.union(e),{x:i,y:n}\u003dthis._computed_position();return s.translate(i,n).rect}_size(){const t\u003dthis.base.size(),e\u003dthis.expo.size();return{width:t.width+e.width,height:Math.max(t.height,this._shift_scale()*t.height+e.height)}}paint(t){t.save();const{angle:e}\u003dthis;if(e){const{sx:s,sy:i}\u003dthis.position;t.translate(s,i),t.rotate(e),t.translate(-s,-i)}const{x:s,y:i}\u003dthis._computed_position();t.translate(s,i),this.base.paint(t),this.expo.paint(t),t.restore()}paint_bbox(t){super.paint_bbox(t);const{x:e,y:s}\u003dthis._computed_position();t.save(),t.translate(e,s);for(const e of this.children)e.paint_bbox(t);t.restore()}_computed_position(){const{width:t,height:e}\u003dthis._size(),{sx:s,sy:i,x_anchor:n\u003d\"left\",y_anchor:h\u003d\"center\"}\u003dthis.position;return{x:s-(()\u003d\u003e{if(r.isNumber(n))return n*t;switch(n){case\"left\":return 0;case\"center\":return.5*t;case\"right\":return t}})(),y:i-(()\u003d\u003e{if(r.isNumber(h))return h*e;switch(h){case\"top\":return 0;case\"center\":return.5*e;case\"bottom\":return e;case\"baseline\":return.5*e}})()}}}s.BaseExpo\u003du,u.__name__\u003d\"BaseExpo\";class p{constructor(t){this.items\u003dt}set base_font_size(t){for(const e of this.items)e.base_font_size\u003dt}get length(){return this.items.length}set visuals(t){for(const e of this.items)e.visuals\u003dt;const e\u003d{x:0,cap:1,ascent:2,x_descent:3,cap_descent:4,ascent_descent:5},s\u003da.max_by(this.items.map((t\u003d\u003et.infer_text_height())),(t\u003d\u003ee[t]));for(const t of this.items)t.text_height_metric\u003ds}set angle(t){for(const e of this.items)e.angle\u003dt}max_size(){let t\u003d0,e\u003d0;for(const s of this.items){const i\u003ds.size();t\u003dMath.max(t,i.width),e\u003dMath.max(e,i.height)}return{width:t,height:e}}}s.GraphicsBoxes\u003dp,p.__name__\u003d\"GraphicsBoxes\"},\n      function _(t,s,r,n,i){n();const{sin:e,cos:a}\u003dMath;class h{constructor(t\u003d1,s\u003d0,r\u003d0,n\u003d1,i\u003d0,e\u003d0){this.a\u003dt,this.b\u003ds,this.c\u003dr,this.d\u003dn,this.e\u003di,this.f\u003de}toString(){const{a:t,b:s,c:r,d:n,e:i,f:e}\u003dthis;return`matrix(${t}, ${s}, ${r}, ${n}, ${i}, ${e})`}clone(){const{a:t,b:s,c:r,d:n,e:i,f:e}\u003dthis;return new h(t,s,r,n,i,e)}get is_identity(){const{a:t,b:s,c:r,d:n,e:i,f:e}\u003dthis;return 1\u003d\u003dt\u0026\u00260\u003d\u003ds\u0026\u00260\u003d\u003dr\u0026\u00261\u003d\u003dn\u0026\u00260\u003d\u003di\u0026\u00260\u003d\u003de}apply_point(t){const[s,r]\u003dthis.apply(t.x,t.y);return{x:s,y:r}}apply_rect(t){return{p0:this.apply_point(t.p0),p1:this.apply_point(t.p1),p2:this.apply_point(t.p2),p3:this.apply_point(t.p3)}}apply(t,s){const{a:r,b:n,c:i,d:e,e:a,f:h}\u003dthis;return[r*t+i*s+a,n*t+e*s+h]}iv_apply(t,s){const{a:r,b:n,c:i,d:e,e:a,f:h}\u003dthis,p\u003dt.length;for(let o\u003d0;o\u003cp;o++){const p\u003dt[o],c\u003ds[o];t[o]\u003dr*p+i*c+a,s[o]\u003dn*p+e*c+h}}transform(t,s,r,n,i,e){const{a,b:h,c:p,d:o,e:c,f:l}\u003dthis;return this.a\u003da*t+p*s,this.c\u003da*r+p*n,this.e\u003da*i+p*e+c,this.b\u003dh*t+o*s,this.d\u003dh*r+o*n,this.f\u003dh*i+o*e+l,this}translate(t,s){return this.transform(1,0,0,1,t,s)}scale(t,s){return this.transform(t,0,0,s,0,0)}skew(t,s){return this.transform(1,s,t,1,0,0)}rotate(t){const s\u003de(t),r\u003da(t);return this.transform(r,s,-s,r,0,0)}rotate_ccw(t){return this.rotate(-t)}translate_x(t){return this.translate(t,0)}translate_y(t){return this.translate(0,t)}flip(){return this.scale(-1,-1)}flip_x(){return this.scale(1,-1)}flip_y(){return this.scale(-1,1)}}r.AffineTransform\u003dh,h.__name__\u003d\"AffineTransform\"},\n      function _(e,n,s,t,i){t();const l\u003de(53),c\u003de(13),o\u003de(34),r\u003de(8),a\u003de(24);class u extends l.Model{constructor(e){super(e)}}s.LabelingPolicy\u003du,u.__name__\u003d\"LabelingPolicy\";class _ extends u{constructor(e){super(e)}filter(e,n,s){return e}}s.AllLabels\u003d_,_.__name__\u003d\"AllLabels\";class d extends u{constructor(e){super(e)}static init_NoOverlap(){this.define((({Number:e})\u003d\u003e({min_distance:[e,5]})))}filter(e,n,s){const{min_distance:t}\u003dthis;let i\u003dnull;for(const n of e)null!\u003di\u0026\u0026s(i,n)\u003ct?e.unset(n):i\u003dn;return e}}s.NoOverlap\u003dd,d.__name__\u003d\"NoOverlap\",d.init_NoOverlap();class m extends u{constructor(e){super(e)}static init_CustomLabelingPolicy(){this.define((({Unknown:e,String:n,Dict:s})\u003d\u003e({args:[s(e),{}],code:[n,\"\"]})))}get names(){return c.keys(this.args)}get values(){return c.values(this.args)}get func(){const e\u003do.use_strict(this.code);return new a.GeneratorFunction(\"indices\",\"bboxes\",\"distance\",...this.names,e)}filter(e,n,s){const t\u003dObject.create(null),i\u003dthis.func.call(t,e,n,s,...this.values);let l\u003di.next();if(l.done\u0026\u0026void 0!\u003d\u003dl.value){const{value:n}\u003dl;return n instanceof a.Indices?n:void 0\u003d\u003d\u003dn?e:r.isIterable(n)?a.Indices.from_indices(e.size,n):a.Indices.all_unset(e.size)}{const n\u003d[];do{n.push(l.value),l\u003di.next()}while(!l.done);return a.Indices.from_indices(e.size,n)}}}s.CustomLabelingPolicy\u003dm,m.__name__\u003d\"CustomLabelingPolicy\",m.init_CustomLabelingPolicy()},\n      function _(t,s,e,o,i){o();const a\u003dt(1),r\u003dt(163),l\u003dt(171),_\u003dt(172),n\u003da.__importStar(t(48)),c\u003dt(20),p\u003dt(167),h\u003dt(8);class m extends r.AxisView{_paint(t,s,e){this._draw_group_separators(t,s,e)}_draw_group_separators(t,s,e){const[o]\u003dthis.ranges,[i,a]\u003dthis.computed_bounds;if(!o.tops||o.tops.length\u003c2||!this.visuals.separator_line.doit)return;const r\u003dthis.dimension,l\u003d(r+1)%2,_\u003d[[],[]];let n\u003d0;for(let t\u003d0;t\u003co.tops.length-1;t++){let s,e;for(let i\u003dn;i\u003co.factors.length;i++)if(o.factors[i][0]\u003d\u003do.tops[t+1]){[s,e]\u003d[o.factors[i-1],o.factors[i]],n\u003di;break}const c\u003d(o.synthetic(s)+o.synthetic(e))/2;c\u003ei\u0026\u0026c\u003ca\u0026\u0026(_[r].push(c),_[l].push(this.loc))}const c\u003dthis.extents.tick_label;this._draw_ticks(t,_,-3,c-6,this.visuals.separator_line)}_draw_major_labels(t,s,e){const o\u003dthis._get_factor_info();let i\u003ds.tick+this.model.major_label_standoff;for(let e\u003d0;e\u003co.length;e++){const[a,r,l,_]\u003do[e];this._draw_oriented_labels(t,a,r,l,this.panel.side,i,_),i+\u003ds.tick_labels[e]}}_tick_label_extents(){const t\u003dthis._get_factor_info(),s\u003d[];for(const[e,,o,i]of t){const t\u003dthis._oriented_labels_extent(e,o,this.model.major_label_standoff,i);s.push(t)}return s}_get_factor_info(){const[t]\u003dthis.ranges,[s,e]\u003dthis.computed_bounds,o\u003dthis.loc,i\u003dthis.model.ticker.get_ticks(s,e,t,o),a\u003dthis.tick_coords,r\u003d[],l\u003dt\u003d\u003enew p.GraphicsBoxes(t.map((t\u003d\u003eh.isString(t)?new p.TextBox({text:t}):t))),_\u003dt\u003d\u003el(this.model.formatter.doFormat(t,this));if(1\u003d\u003dt.levels){const t\u003d_(i.major);r.push([t,a.major,this.model.major_label_orientation,this.visuals.major_label_text])}else if(2\u003d\u003dt.levels){const t\u003d_(i.major.map((t\u003d\u003et[1])));r.push([t,a.major,this.model.major_label_orientation,this.visuals.major_label_text]),r.push([l(i.tops),a.tops,this.model.group_label_orientation,this.visuals.group_text])}else if(3\u003d\u003dt.levels){const t\u003d_(i.major.map((t\u003d\u003et[2]))),s\u003di.mids.map((t\u003d\u003et[1]));r.push([t,a.major,this.model.major_label_orientation,this.visuals.major_label_text]),r.push([l(s),a.mids,this.model.subgroup_label_orientation,this.visuals.subgroup_text]),r.push([l(i.tops),a.tops,this.model.group_label_orientation,this.visuals.group_text])}return r}get tick_coords(){const t\u003dthis.dimension,s\u003d(t+1)%2,[e]\u003dthis.ranges,[o,i]\u003dthis.computed_bounds,a\u003dthis.model.ticker.get_ticks(o,i,e,this.loc),r\u003d{major:[[],[]],mids:[[],[]],tops:[[],[]],minor:[[],[]]};return r.major[t]\u003da.major,r.major[s]\u003da.major.map((()\u003d\u003ethis.loc)),3\u003d\u003de.levels\u0026\u0026(r.mids[t]\u003da.mids,r.mids[s]\u003da.mids.map((()\u003d\u003ethis.loc))),e.levels\u003e1\u0026\u0026(r.tops[t]\u003da.tops,r.tops[s]\u003da.tops.map((()\u003d\u003ethis.loc))),r}}e.CategoricalAxisView\u003dm,m.__name__\u003d\"CategoricalAxisView\";class u extends r.Axis{constructor(t){super(t)}static init_CategoricalAxis(){this.prototype.default_view\u003dm,this.mixins([[\"separator_\",n.Line],[\"group_\",n.Text],[\"subgroup_\",n.Text]]),this.define((({Number:t,Or:s})\u003d\u003e({group_label_orientation:[s(c.TickLabelOrientation,t),\"parallel\"],subgroup_label_orientation:[s(c.TickLabelOrientation,t),\"parallel\"]}))),this.override({ticker:()\u003d\u003enew l.CategoricalTicker,formatter:()\u003d\u003enew _.CategoricalTickFormatter,separator_line_color:\"lightgrey\",separator_line_width:2,group_text_font_style:\"bold\",group_text_font_size:\"11px\",group_text_color:\"grey\",subgroup_text_font_style:\"bold\",subgroup_text_font_size:\"11px\"})}}e.CategoricalAxis\u003du,u.__name__\u003d\"CategoricalAxis\",u.init_CategoricalAxis()},\n      function _(t,c,o,s,e){s();const r\u003dt(165);class i extends r.Ticker{constructor(t){super(t)}get_ticks(t,c,o,s){var e,r;return{major:this._collect(o.factors,o,t,c),minor:[],tops:this._collect(null!\u003d\u003d(e\u003do.tops)\u0026\u0026void 0!\u003d\u003de?e:[],o,t,c),mids:this._collect(null!\u003d\u003d(r\u003do.mids)\u0026\u0026void 0!\u003d\u003dr?r:[],o,t,c)}}_collect(t,c,o,s){const e\u003d[];for(const r of t){const t\u003dc.synthetic(r);t\u003eo\u0026\u0026t\u003cs\u0026\u0026e.push(r)}return e}}o.CategoricalTicker\u003di,i.__name__\u003d\"CategoricalTicker\"},\n      function _(t,r,o,c,a){c();const e\u003dt(166),n\u003dt(9);class i extends e.TickFormatter{constructor(t){super(t)}doFormat(t,r){return n.copy(t)}}o.CategoricalTickFormatter\u003di,i.__name__\u003d\"CategoricalTickFormatter\"},\n      function _(s,n,i,o,u){o();const e\u003ds(163);class t extends e.AxisView{}i.ContinuousAxisView\u003dt,t.__name__\u003d\"ContinuousAxisView\";class _ extends e.Axis{constructor(s){super(s)}}i.ContinuousAxis\u003d_,_.__name__\u003d\"ContinuousAxis\"},\n      function _(e,t,i,s,a){s();const n\u003de(175),r\u003de(180),m\u003de(185);class _ extends n.LinearAxisView{}i.DatetimeAxisView\u003d_,_.__name__\u003d\"DatetimeAxisView\";class c extends n.LinearAxis{constructor(e){super(e)}static init_DatetimeAxis(){this.prototype.default_view\u003d_,this.override({ticker:()\u003d\u003enew m.DatetimeTicker,formatter:()\u003d\u003enew r.DatetimeTickFormatter})}}i.DatetimeAxis\u003dc,c.__name__\u003d\"DatetimeAxis\",c.init_DatetimeAxis()},\n      function _(i,e,s,n,t){n();const r\u003di(173),a\u003di(176),o\u003di(177);class c extends r.ContinuousAxisView{}s.LinearAxisView\u003dc,c.__name__\u003d\"LinearAxisView\";class _ extends r.ContinuousAxis{constructor(i){super(i)}static init_LinearAxis(){this.prototype.default_view\u003dc,this.override({ticker:()\u003d\u003enew o.BasicTicker,formatter:()\u003d\u003enew a.BasicTickFormatter})}}s.LinearAxis\u003d_,_.__name__\u003d\"LinearAxis\",_.init_LinearAxis()},\n      function _(i,t,e,n,o){n();const s\u003di(166),r\u003di(34);function c(i){let t\u003d\"\";for(const e of i)t+\u003d\"-\"\u003d\u003de?\"−\":e;return t}e.unicode_replace\u003dc;class _ extends s.TickFormatter{constructor(i){super(i),this.last_precision\u003d3}static init_BasicTickFormatter(){this.define((({Boolean:i,Int:t,Auto:e,Or:n})\u003d\u003e({precision:[n(t,e),\"auto\"],use_scientific:[i,!0],power_limit_high:[t,5],power_limit_low:[t,-3]})))}get scientific_limit_low(){return 10**this.power_limit_low}get scientific_limit_high(){return 10**this.power_limit_high}_need_sci(i){if(!this.use_scientific)return!1;const{scientific_limit_high:t}\u003dthis,{scientific_limit_low:e}\u003dthis,n\u003di.length\u003c2?0:Math.abs(i[1]-i[0])/1e4;for(const o of i){const i\u003dMath.abs(o);if(!(i\u003c\u003dn)\u0026\u0026(i\u003e\u003dt||i\u003c\u003de))return!0}return!1}_format_with_precision(i,t,e){return t?i.map((i\u003d\u003ec(i.toExponential(e)))):i.map((i\u003d\u003ec(r.to_fixed(i,e))))}_auto_precision(i,t){const e\u003dnew Array(i.length),n\u003dthis.last_precision\u003c\u003d15;i:for(let o\u003dthis.last_precision;n?o\u003c\u003d15:o\u003e\u003d1;n?o++:o--){if(t){e[0]\u003di[0].toExponential(o);for(let t\u003d1;t\u003ci.length;t++)if(e[t]\u003d\u003de[t-1])continue i;this.last_precision\u003do;break}e[0]\u003dr.to_fixed(i[0],o);for(let t\u003d1;t\u003ci.length;t++)if(e[t]\u003dr.to_fixed(i[t],o),e[t]\u003d\u003de[t-1])continue i;this.last_precision\u003do;break}return this.last_precision}doFormat(i,t){if(0\u003d\u003di.length)return[];const e\u003dthis._need_sci(i),n\u003d\"auto\"\u003d\u003dthis.precision?this._auto_precision(i,e):this.precision;return this._format_with_precision(i,e,n)}}e.BasicTickFormatter\u003d_,_.__name__\u003d\"BasicTickFormatter\",_.init_BasicTickFormatter()},\n      function _(c,e,s,i,n){i();const r\u003dc(178);class t extends r.AdaptiveTicker{constructor(c){super(c)}}s.BasicTicker\u003dt,t.__name__\u003d\"BasicTicker\"},\n      function _(t,i,a,e,s){e();const n\u003dt(179),r\u003dt(9),_\u003dt(10);class l extends n.ContinuousTicker{constructor(t){super(t)}static init_AdaptiveTicker(){this.define((({Number:t,Array:i,Nullable:a})\u003d\u003e({base:[t,10],mantissas:[i(t),[1,2,5]],min_interval:[t,0],max_interval:[a(t),null]})))}get_min_interval(){return this.min_interval}get_max_interval(){var t;return null!\u003d\u003d(t\u003dthis.max_interval)\u0026\u0026void 0!\u003d\u003dt?t:1/0}initialize(){super.initialize();const t\u003dr.nth(this.mantissas,-1)/this.base,i\u003dr.nth(this.mantissas,0)*this.base;this.extended_mantissas\u003d[t,...this.mantissas,i],this.base_factor\u003d0\u003d\u003d\u003dthis.get_min_interval()?1:this.get_min_interval()}get_interval(t,i,a){const e\u003di-t,s\u003dthis.get_ideal_interval(t,i,a),n\u003dMath.floor(_.log(s/this.base_factor,this.base)),l\u003dthis.base**n*this.base_factor,h\u003dthis.extended_mantissas,m\u003dh.map((t\u003d\u003eMath.abs(a-e/(t*l)))),v\u003dh[r.argmin(m)]*l;return _.clamp(v,this.get_min_interval(),this.get_max_interval())}}a.AdaptiveTicker\u003dl,l.__name__\u003d\"AdaptiveTicker\",l.init_AdaptiveTicker()},\n      function _(t,i,n,s,e){s();const o\u003dt(165),r\u003dt(9);class c extends o.Ticker{constructor(t){super(t)}static init_ContinuousTicker(){this.define((({Int:t})\u003d\u003e({num_minor_ticks:[t,5],desired_num_ticks:[t,6]})))}get_ticks(t,i,n,s){return this.get_ticks_no_defaults(t,i,s,this.desired_num_ticks)}get_ticks_no_defaults(t,i,n,s){const e\u003dthis.get_interval(t,i,s),o\u003dMath.floor(t/e),c\u003dMath.ceil(i/e);let _;_\u003disFinite(o)\u0026\u0026isFinite(c)?r.range(o,c+1):[];const u\u003d_.map((t\u003d\u003et*e)).filter((n\u003d\u003et\u003c\u003dn\u0026\u0026n\u003c\u003di)),a\u003dthis.num_minor_ticks,f\u003d[];if(a\u003e0\u0026\u0026u.length\u003e0){const n\u003de/a,s\u003dr.range(0,a).map((t\u003d\u003et*n));for(const n of s.slice(1)){const s\u003du[0]-n;t\u003c\u003ds\u0026\u0026s\u003c\u003di\u0026\u0026f.push(s)}for(const n of u)for(const e of s){const s\u003dn+e;t\u003c\u003ds\u0026\u0026s\u003c\u003di\u0026\u0026f.push(s)}}return{major:u,minor:f}}get_ideal_interval(t,i,n){return(i-t)/n}}n.ContinuousTicker\u003dc,c.__name__\u003d\"ContinuousTicker\",c.init_ContinuousTicker()},\n      function _(t,s,e,i,n){i();const r\u003dt(1).__importDefault(t(181)),o\u003dt(166),a\u003dt(19),c\u003dt(182),m\u003dt(9),u\u003dt(8);function h(t){return r.default(t,\"%Y %m %d %H %M %S\").split(/\\s+/).map((t\u003d\u003eparseInt(t,10)))}function d(t,s){if(u.isFunction(s))return s(t);{const e\u003dc.sprintf(\"$1%06d\",function(t){return Math.round(t/1e3%1*1e6)}(t));return-1\u003d\u003d(s\u003ds.replace(/((^|[^%])(%%)*)%f/,e)).indexOf(\"%\")?s:r.default(t,s)}}const l\u003d[\"microseconds\",\"milliseconds\",\"seconds\",\"minsec\",\"minutes\",\"hourmin\",\"hours\",\"days\",\"months\",\"years\"];class f extends o.TickFormatter{constructor(t){super(t),this.strip_leading_zeros\u003d!0}static init_DatetimeTickFormatter(){this.define((({String:t,Array:s})\u003d\u003e({microseconds:[s(t),[\"%fus\"]],milliseconds:[s(t),[\"%3Nms\",\"%S.%3Ns\"]],seconds:[s(t),[\"%Ss\"]],minsec:[s(t),[\":%M:%S\"]],minutes:[s(t),[\":%M\",\"%Mm\"]],hourmin:[s(t),[\"%H:%M\"]],hours:[s(t),[\"%Hh\",\"%H:%M\"]],days:[s(t),[\"%m/%d\",\"%a%d\"]],months:[s(t),[\"%m/%Y\",\"%b %Y\"]],years:[s(t),[\"%Y\"]]})))}initialize(){super.initialize(),this._update_width_formats()}_update_width_formats(){const t\u003d+r.default(new Date),s\u003dfunction(s){const e\u003ds.map((s\u003d\u003ed(t,s).length)),i\u003dm.sort_by(m.zip(e,s),(([t])\u003d\u003et));return m.unzip(i)};this._width_formats\u003d{microseconds:s(this.microseconds),milliseconds:s(this.milliseconds),seconds:s(this.seconds),minsec:s(this.minsec),minutes:s(this.minutes),hourmin:s(this.hourmin),hours:s(this.hours),days:s(this.days),months:s(this.months),years:s(this.years)}}_get_resolution_str(t,s){const e\u003d1.1*t;switch(!1){case!(e\u003c.001):return\"microseconds\";case!(e\u003c1):return\"milliseconds\";case!(e\u003c60):return s\u003e\u003d60?\"minsec\":\"seconds\";case!(e\u003c3600):return s\u003e\u003d3600?\"hourmin\":\"minutes\";case!(e\u003c86400):return\"hours\";case!(e\u003c2678400):return\"days\";case!(e\u003c31536e3):return\"months\";default:return\"years\"}}doFormat(t,s){if(0\u003d\u003dt.length)return[];const e\u003dMath.abs(t[t.length-1]-t[0])/1e3,i\u003de/(t.length-1),n\u003dthis._get_resolution_str(i,e),[,[r]]\u003dthis._width_formats[n],o\u003d[],c\u003dl.indexOf(n),m\u003d{};for(const t of l)m[t]\u003d0;m.seconds\u003d5,m.minsec\u003d4,m.minutes\u003d4,m.hourmin\u003d3,m.hours\u003d3;for(const s of t){let t,e;try{e\u003dh(s),t\u003dd(s,r)}catch(t){a.logger.warn(`unable to format tick for timestamp value ${s}`),a.logger.warn(` - ${t}`),o.push(\"ERR\");continue}let i\u003d!1,u\u003dc;for(;0\u003d\u003de[m[l[u]]];){let r;if(u+\u003d1,u\u003d\u003dl.length)break;if((\"minsec\"\u003d\u003dn||\"hourmin\"\u003d\u003dn)\u0026\u0026!i){if(\"minsec\"\u003d\u003dn\u0026\u00260\u003d\u003de[4]\u0026\u00260!\u003de[5]||\"hourmin\"\u003d\u003dn\u0026\u00260\u003d\u003de[3]\u0026\u00260!\u003de[4]){r\u003dthis._width_formats[l[c-1]][1][0],t\u003dd(s,r);break}i\u003d!0}r\u003dthis._width_formats[l[u]][1][0],t\u003dd(s,r)}if(this.strip_leading_zeros){let s\u003dt.replace(/^0+/g,\"\");s!\u003dt\u0026\u0026isNaN(parseInt(s))\u0026\u0026(s\u003d`0${s}`),o.push(s)}else o.push(t)}return o}}e.DatetimeTickFormatter\u003df,f.__name__\u003d\"DatetimeTickFormatter\",f.init_DatetimeTickFormatter()},\n      function _(e,t,n,r,o){!function(e){\"object\"\u003d\u003dtypeof t\u0026\u0026t.exports?t.exports\u003de():\"function\"\u003d\u003dtypeof define?define(e):this.tz\u003de()}((function(){function e(e,t,n){var r,o\u003dt.day[1];do{r\u003dnew Date(Date.UTC(n,t.month,Math.abs(o++)))}while(t.day[0]\u003c7\u0026\u0026r.getUTCDay()!\u003dt.day[0]);return(r\u003d{clock:t.clock,sort:r.getTime(),rule:t,save:6e4*t.save,offset:e.offset})[r.clock]\u003dr.sort+6e4*t.time,r.posix?r.wallclock\u003dr[r.clock]+(e.offset+t.saved):r.posix\u003dr[r.clock]-(e.offset+t.saved),r}function t(t,n,r){var o,a,u,i,l,s,c,f\u003dt[t.zone],h\u003d[],T\u003dnew Date(r).getUTCFullYear(),g\u003d1;for(o\u003d1,a\u003df.length;o\u003ca\u0026\u0026!(f[o][n]\u003c\u003dr);o++);if((u\u003df[o]).rules){for(s\u003dt[u.rules],c\u003dT+1;c\u003e\u003dT-g;--c)for(o\u003d0,a\u003ds.length;o\u003ca;o++)s[o].from\u003c\u003dc\u0026\u0026c\u003c\u003ds[o].to?h.push(e(u,s[o],c)):s[o].to\u003cc\u0026\u00261\u003d\u003dg\u0026\u0026(g\u003dc-s[o].to);for(h.sort((function(e,t){return e.sort-t.sort})),o\u003d0,a\u003dh.length;o\u003ca;o++)r\u003e\u003dh[o][n]\u0026\u0026h[o][h[o].clock]\u003eu[h[o].clock]\u0026\u0026(i\u003dh[o])}return i\u0026\u0026((l\u003d/^(.*)\\/(.*)$/.exec(u.format))?i.abbrev\u003dl[i.save?2:1]:i.abbrev\u003du.format.replace(/%s/,i.rule.letter)),i||u}function n(e,n){return\"UTC\"\u003d\u003de.zone?n:(e.entry\u003dt(e,\"posix\",n),n+e.entry.offset+e.entry.save)}function r(e,n){return\"UTC\"\u003d\u003de.zone?n:(e.entry\u003dr\u003dt(e,\"wallclock\",n),0\u003c(o\u003dn-r.wallclock)\u0026\u0026o\u003cr.save?null:n-r.offset-r.save);var r,o}function o(e,t,o){var a,i\u003d+(o[1]+1),s\u003do[2]*i,c\u003du.indexOf(o[3].toLowerCase());if(c\u003e9)t+\u003ds*l[c-10];else{if(a\u003dnew Date(n(e,t)),c\u003c7)for(;s;)a.setUTCDate(a.getUTCDate()+i),a.getUTCDay()\u003d\u003dc\u0026\u0026(s-\u003di);else 7\u003d\u003dc?a.setUTCFullYear(a.getUTCFullYear()+s):8\u003d\u003dc?a.setUTCMonth(a.getUTCMonth()+s):a.setUTCDate(a.getUTCDate()+s);null\u003d\u003d(t\u003dr(e,a.getTime()))\u0026\u0026(t\u003dr(e,a.getTime()+864e5*i)-864e5*i)}return t}var a\u003d{clock:function(){return+new Date},zone:\"UTC\",entry:{abbrev:\"UTC\",offset:0,save:0},UTC:1,z:function(e,t,n,r){var o,a,u\u003dthis.entry.offset+this.entry.save,i\u003dMath.abs(u/1e3),l\u003d[],s\u003d3600;for(o\u003d0;o\u003c3;o++)l.push((\"0\"+Math.floor(i/s)).slice(-2)),i%\u003ds,s/\u003d60;return\"^\"!\u003dn||u?(\"^\"\u003d\u003dn\u0026\u0026(r\u003d3),3\u003d\u003dr?(a\u003d(a\u003dl.join(\":\")).replace(/:00$/,\"\"),\"^\"!\u003dn\u0026\u0026(a\u003da.replace(/:00$/,\"\"))):r?(a\u003dl.slice(0,r+1).join(\":\"),\"^\"\u003d\u003dn\u0026\u0026(a\u003da.replace(/:00$/,\"\"))):a\u003dl.slice(0,2).join(\"\"),a\u003d(a\u003d(u\u003c0?\"-\":\"+\")+a).replace(/([-+])(0)/,{_:\" $1\",\"-\":\"$1\"}[n]||\"$1$2\")):\"Z\"},\"%\":function(e){return\"%\"},n:function(e){return\"\\n\"},t:function(e){return\"\\t\"},U:function(e){return s(e,0)},W:function(e){return s(e,1)},V:function(e){return c(e)[0]},G:function(e){return c(e)[1]},g:function(e){return c(e)[1]%100},j:function(e){return Math.floor((e.getTime()-Date.UTC(e.getUTCFullYear(),0))/864e5)+1},s:function(e){return Math.floor(e.getTime()/1e3)},C:function(e){return Math.floor(e.getUTCFullYear()/100)},N:function(e){return e.getTime()%1e3*1e6},m:function(e){return e.getUTCMonth()+1},Y:function(e){return e.getUTCFullYear()},y:function(e){return e.getUTCFullYear()%100},H:function(e){return e.getUTCHours()},M:function(e){return e.getUTCMinutes()},S:function(e){return e.getUTCSeconds()},e:function(e){return e.getUTCDate()},d:function(e){return e.getUTCDate()},u:function(e){return e.getUTCDay()||7},w:function(e){return e.getUTCDay()},l:function(e){return e.getUTCHours()%12||12},I:function(e){return e.getUTCHours()%12||12},k:function(e){return e.getUTCHours()},Z:function(e){return this.entry.abbrev},a:function(e){return this[this.locale].day.abbrev[e.getUTCDay()]},A:function(e){return this[this.locale].day.full[e.getUTCDay()]},h:function(e){return this[this.locale].month.abbrev[e.getUTCMonth()]},b:function(e){return this[this.locale].month.abbrev[e.getUTCMonth()]},B:function(e){return this[this.locale].month.full[e.getUTCMonth()]},P:function(e){return this[this.locale].meridiem[Math.floor(e.getUTCHours()/12)].toLowerCase()},p:function(e){return this[this.locale].meridiem[Math.floor(e.getUTCHours()/12)]},R:function(e,t){return this.convert([t,\"%H:%M\"])},T:function(e,t){return this.convert([t,\"%H:%M:%S\"])},D:function(e,t){return this.convert([t,\"%m/%d/%y\"])},F:function(e,t){return this.convert([t,\"%Y-%m-%d\"])},x:function(e,t){return this.convert([t,this[this.locale].date])},r:function(e,t){return this.convert([t,this[this.locale].time12||\"%I:%M:%S\"])},X:function(e,t){return this.convert([t,this[this.locale].time24])},c:function(e,t){return this.convert([t,this[this.locale].dateTime])},convert:function(e){if(!e.length)return\"1.0.23\";var t,a,u,l,s,c\u003dObject.create(this),f\u003d[];for(t\u003d0;t\u003ce.length;t++)if(l\u003de[t],Array.isArray(l))t||isNaN(l[1])?l.splice.apply(e,[t--,1].concat(l)):s\u003dl;else if(isNaN(l)){if(\"string\"\u003d\u003d(u\u003dtypeof l))~l.indexOf(\"%\")?c.format\u003dl:t||\"*\"!\u003dl?!t\u0026\u0026(u\u003d/^(\\d{4})-(\\d{2})-(\\d{2})(?:[T\\s](\\d{2}):(\\d{2})(?::(\\d{2})(?:\\.(\\d+))?)?(Z|(([+-])(\\d{2}(:\\d{2}){0,2})))?)?$/.exec(l))?((s\u003d[]).push.apply(s,u.slice(1,8)),u[9]?(s.push(u[10]+1),s.push.apply(s,u[11].split(/:/))):u[8]\u0026\u0026s.push(1)):/^\\w{2,3}_\\w{2}$/.test(l)?c.locale\u003dl:(u\u003di.exec(l))?f.push(u):c.zone\u003dl:s\u003dl;else if(\"function\"\u003d\u003du){if(u\u003dl.call(c))return u}else if(/^\\w{2,3}_\\w{2}$/.test(l.name))c[l.name]\u003dl;else if(l.zones){for(u in l.zones)c[u]\u003dl.zones[u];for(u in l.rules)c[u]\u003dl.rules[u]}}else t||(s\u003dl);if(c[c.locale]||delete c.locale,c[c.zone]||delete c.zone,null!\u003ds){if(\"*\"\u003d\u003ds)s\u003dc.clock();else if(Array.isArray(s)){for(u\u003d[],a\u003d!s[7],t\u003d0;t\u003c11;t++)u[t]\u003d+(s[t]||0);--u[1],s\u003dDate.UTC.apply(Date.UTC,u)+-u[7]*(36e5*u[8]+6e4*u[9]+1e3*u[10])}else s\u003dMath.floor(s);if(!isNaN(s)){if(a\u0026\u0026(s\u003dr(c,s)),null\u003d\u003ds)return s;for(t\u003d0,a\u003df.length;t\u003ca;t++)s\u003do(c,s,f[t]);return c.format?(u\u003dnew Date(n(c,s)),c.format.replace(/%([-0_^]?)(:{0,3})(\\d*)(.)/g,(function(e,t,n,r,o){var a,i,l\u003d\"0\";if(a\u003dc[o]){for(e\u003dString(a.call(c,u,s,t,n.length)),\"_\"\u003d\u003d(t||a.style)\u0026\u0026(l\u003d\" \"),i\u003d\"-\"\u003d\u003dt?0:a.pad||0;e.length\u003ci;)e\u003dl+e;for(i\u003d\"-\"\u003d\u003dt?0:r||a.pad;e.length\u003ci;)e\u003dl+e;\"N\"\u003d\u003do\u0026\u0026i\u003ce.length\u0026\u0026(e\u003de.slice(0,i)),\"^\"\u003d\u003dt\u0026\u0026(e\u003de.toUpperCase())}return e}))):s}}return function(){return c.convert(arguments)}},locale:\"en_US\",en_US:{date:\"%m/%d/%Y\",time24:\"%I:%M:%S %p\",time12:\"%I:%M:%S %p\",dateTime:\"%a %d %b %Y %I:%M:%S %p %Z\",meridiem:[\"AM\",\"PM\"],month:{abbrev:\"Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec\".split(\"|\"),full:\"January|February|March|April|May|June|July|August|September|October|November|December\".split(\"|\")},day:{abbrev:\"Sun|Mon|Tue|Wed|Thu|Fri|Sat\".split(\"|\"),full:\"Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday\".split(\"|\")}}},u\u003d\"Sunday|Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|year|month|day|hour|minute|second|millisecond\",i\u003dnew RegExp(\"^\\\\s*([+-])(\\\\d+)\\\\s+(\"+u+\")s?\\\\s*$\",\"i\"),l\u003d[36e5,6e4,1e3,1];function s(e,t){var n,r,o;return r\u003dnew Date(Date.UTC(e.getUTCFullYear(),0)),n\u003dMath.floor((e.getTime()-r.getTime())/864e5),r.getUTCDay()\u003d\u003dt?o\u003d0:8\u003d\u003d(o\u003d7-r.getUTCDay()+t)\u0026\u0026(o\u003d1),n\u003e\u003do?Math.floor((n-o)/7)+1:0}function c(e){var t,n,r;return n\u003de.getUTCFullYear(),t\u003dnew Date(Date.UTC(n,0)).getUTCDay(),(r\u003ds(e,1)+(t\u003e1\u0026\u0026t\u003c\u003d4?1:0))?53!\u003dr||4\u003d\u003dt||3\u003d\u003dt\u0026\u002629\u003d\u003dnew Date(n,1,29).getDate()?[r,e.getUTCFullYear()]:[1,e.getUTCFullYear()+1]:(n\u003de.getUTCFullYear()-1,[r\u003d4\u003d\u003d(t\u003dnew Date(Date.UTC(n,0)).getUTCDay())||3\u003d\u003dt\u0026\u002629\u003d\u003dnew Date(n,1,29).getDate()?53:52,e.getUTCFullYear()-1])}return u\u003du.toLowerCase().split(\"|\"),\"delmHMSUWVgCIky\".replace(/./g,(function(e){a[e].pad\u003d2})),a.N.pad\u003d9,a.j.pad\u003d3,a.k.style\u003d\"_\",a.l.style\u003d\"_\",a.e.style\u003d\"_\",function(){return a.convert(arguments)}}))},\n      function _(r,t,n,e,i){e();const u\u003dr(1),a\u003du.__importStar(r(183)),f\u003dr(184),o\u003du.__importDefault(r(181)),l\u003dr(21),s\u003dr(8);function c(r,...t){return f.sprintf(r,...t)}function m(r,t,n){if(s.isNumber(r)){return c((()\u003d\u003e{switch(!1){case Math.floor(r)!\u003dr:return\"%d\";case!(Math.abs(r)\u003e.1\u0026\u0026Math.abs(r)\u003c1e3):return\"%0.3f\";default:return\"%0.3e\"}})(),r)}return`${r}`}function p(r,t,e){if(null\u003d\u003dt)return m;if(null!\u003de\u0026\u0026r in e){const t\u003de[r];if(s.isString(t)){if(t in n.DEFAULT_FORMATTERS)return n.DEFAULT_FORMATTERS[t];throw new Error(`Unknown tooltip field formatter type \u0027${t}\u0027`)}return function(r,n,e){return t.format(r,n,e)}}return n.DEFAULT_FORMATTERS.numeral}function d(r,t,n,e){if(\"$\"\u003d\u003dr[0]){return function(r,t){if(r in t)return t[r];throw new Error(`Unknown special variable \u0027$${r}\u0027`)}(r.substring(1),e)}return function(r,t,n){const e\u003dt.get_column(r);if(null\u003d\u003de)return null;if(s.isNumber(n))return e[n];const i\u003de[n.index];if(s.isTypedArray(i)||s.isArray(i))return s.isArray(i[0])?i[n.dim2][n.dim1]:i[n.flat_index];return i}(r.substring(1).replace(/[{}]/g,\"\"),t,n)}n.FormatterType\u003dl.Enum(\"numeral\",\"printf\",\"datetime\"),n.DEFAULT_FORMATTERS\u003d{numeral:(r,t,n)\u003d\u003ea.format(r,t),datetime:(r,t,n)\u003d\u003eo.default(r,t),printf:(r,t,n)\u003d\u003ec(t,r)},n.sprintf\u003dc,n.basic_formatter\u003dm,n.get_formatter\u003dp,n.get_value\u003dd,n.replace_placeholders\u003dfunction(r,t,n,e,i\u003d{},u){let a,f;if(s.isString(r)?(a\u003dr,f\u003d!1):(a\u003dr.html,f\u003d!0),a\u003da.replace(/@\\$name/g,(r\u003d\u003e`@{${i.name}}`)),a\u003da.replace(/((?:\\$\\w+)|(?:@\\w+)|(?:@{(?:[^{}]+)}))(?:{([^{}]+)})?/g,((r,a,o)\u003d\u003e{const l\u003dd(a,t,n,i);if(null\u003d\u003dl)return u?u(\"???\"):\"???\";if(\"safe\"\u003d\u003do)return f\u003d!0,`${l}`;const s\u003d`${p(a,o,e)(l,o,i)}`;return u?u(s):s})),f){return[...(new DOMParser).parseFromString(a,\"text/html\").body.childNodes]}return a}},\n      function _(e,n,t,r,i){\n      /*!\n           * numbro.js\n           * version : 1.6.2\n           * author : Företagsplatsen AB\n           * license : MIT\n           * http://www.foretagsplatsen.se\n           */\n      var a,o\u003d{},l\u003do,u\u003d\"en-US\",c\u003dnull,s\u003d\"0,0\";void 0!\u003d\u003dn\u0026\u0026n.exports;function f(e){this._value\u003de}function d(e){var n,t\u003d\"\";for(n\u003d0;n\u003ce;n++)t+\u003d\"0\";return t}function h(e,n,t,r){var i,a,o\u003dMath.pow(10,n);return a\u003de.toFixed(0).search(\"e\")\u003e-1?function(e,n){var t,r,i,a;return t\u003d(a\u003de.toString()).split(\"e\")[0],i\u003da.split(\"e\")[1],a\u003dt.split(\".\")[0]+(r\u003dt.split(\".\")[1]||\"\")+d(i-r.length),n\u003e0\u0026\u0026(a+\u003d\".\"+d(n)),a}(e,n):(t(e*o)/o).toFixed(n),r\u0026\u0026(i\u003dnew RegExp(\"0{1,\"+r+\"}$\"),a\u003da.replace(i,\"\")),a}function p(e,n,t){return n.indexOf(\"$\")\u003e-1?function(e,n,t){var r,i,a\u003dn,l\u003da.indexOf(\"$\"),c\u003da.indexOf(\"(\"),s\u003da.indexOf(\"+\"),f\u003da.indexOf(\"-\"),d\u003d\"\",h\u003d\"\";-1\u003d\u003d\u003da.indexOf(\"$\")?\"infix\"\u003d\u003d\u003do[u].currency.position?(h\u003do[u].currency.symbol,o[u].currency.spaceSeparated\u0026\u0026(h\u003d\" \"+h+\" \")):o[u].currency.spaceSeparated\u0026\u0026(d\u003d\" \"):a.indexOf(\" $\")\u003e-1?(d\u003d\" \",a\u003da.replace(\" $\",\"\")):a.indexOf(\"$ \")\u003e-1?(d\u003d\" \",a\u003da.replace(\"$ \",\"\")):a\u003da.replace(\"$\",\"\");if(i\u003dm(e,a,t,h),-1\u003d\u003d\u003dn.indexOf(\"$\"))switch(o[u].currency.position){case\"postfix\":i.indexOf(\")\")\u003e-1?((i\u003di.split(\"\")).splice(-1,0,d+o[u].currency.symbol),i\u003di.join(\"\")):i\u003di+d+o[u].currency.symbol;break;case\"infix\":break;case\"prefix\":i.indexOf(\"(\")\u003e-1||i.indexOf(\"-\")\u003e-1?(i\u003di.split(\"\"),r\u003dMath.max(c,f)+1,i.splice(r,0,o[u].currency.symbol+d),i\u003di.join(\"\")):i\u003do[u].currency.symbol+d+i;break;default:throw Error(\u0027Currency position should be among [\"prefix\", \"infix\", \"postfix\"]\u0027)}else l\u003c\u003d1?i.indexOf(\"(\")\u003e-1||i.indexOf(\"+\")\u003e-1||i.indexOf(\"-\")\u003e-1?(r\u003d1,(l\u003cc||l\u003cs||l\u003cf)\u0026\u0026(r\u003d0),(i\u003di.split(\"\")).splice(r,0,o[u].currency.symbol+d),i\u003di.join(\"\")):i\u003do[u].currency.symbol+d+i:i.indexOf(\")\")\u003e-1?((i\u003di.split(\"\")).splice(-1,0,d+o[u].currency.symbol),i\u003di.join(\"\")):i\u003di+d+o[u].currency.symbol;return i}(e,n,t):n.indexOf(\"%\")\u003e-1?function(e,n,t){var r,i\u003d\"\";e*\u003d100,n.indexOf(\" %\")\u003e-1?(i\u003d\" \",n\u003dn.replace(\" %\",\"\")):n\u003dn.replace(\"%\",\"\");(r\u003dm(e,n,t)).indexOf(\")\")\u003e-1?((r\u003dr.split(\"\")).splice(-1,0,i+\"%\"),r\u003dr.join(\"\")):r\u003dr+i+\"%\";return r}(e,n,t):n.indexOf(\":\")\u003e-1?function(e){var n\u003dMath.floor(e/60/60),t\u003dMath.floor((e-60*n*60)/60),r\u003dMath.round(e-60*n*60-60*t);return n+\":\"+(t\u003c10?\"0\"+t:t)+\":\"+(r\u003c10?\"0\"+r:r)}(e):m(e,n,t)}function m(e,n,t,r){var i,a,l,s,f,d,p,m,x,g,O,b,w,y,M,v,$,B\u003d!1,E\u003d!1,F\u003d!1,k\u003d\"\",U\u003d!1,N\u003d!1,S\u003d!1,j\u003d!1,D\u003d!1,C\u003d\"\",L\u003d\"\",T\u003dMath.abs(e),K\u003d[\"B\",\"KiB\",\"MiB\",\"GiB\",\"TiB\",\"PiB\",\"EiB\",\"ZiB\",\"YiB\"],G\u003d[\"B\",\"KB\",\"MB\",\"GB\",\"TB\",\"PB\",\"EB\",\"ZB\",\"YB\"],I\u003d\"\",P\u003d!1,R\u003d!1;if(0\u003d\u003d\u003de\u0026\u0026null!\u003d\u003dc)return c;if(!isFinite(e))return\"\"+e;if(0\u003d\u003d\u003dn.indexOf(\"{\")){var W\u003dn.indexOf(\"}\");if(-1\u003d\u003d\u003dW)throw Error(\u0027Format should also contain a \"}\"\u0027);b\u003dn.slice(1,W),n\u003dn.slice(W+1)}else b\u003d\"\";if(n.indexOf(\"}\")\u003d\u003d\u003dn.length-1){var Y\u003dn.indexOf(\"{\");if(-1\u003d\u003d\u003dY)throw Error(\u0027Format should also contain a \"{\"\u0027);w\u003dn.slice(Y+1,-1),n\u003dn.slice(0,Y+1)}else w\u003d\"\";if(v\u003dnull\u003d\u003d\u003d($\u003d-1\u003d\u003d\u003dn.indexOf(\".\")?n.match(/([0-9]+).*/):n.match(/([0-9]+)\\..*/))?-1:$[1].length,-1!\u003d\u003dn.indexOf(\"-\")\u0026\u0026(P\u003d!0),n.indexOf(\"(\")\u003e-1?(B\u003d!0,n\u003dn.slice(1,-1)):n.indexOf(\"+\")\u003e-1\u0026\u0026(E\u003d!0,n\u003dn.replace(/\\+/g,\"\")),n.indexOf(\"a\")\u003e-1){if(g\u003dn.split(\".\")[0].match(/[0-9]+/g)||[\"0\"],g\u003dparseInt(g[0],10),U\u003dn.indexOf(\"aK\")\u003e\u003d0,N\u003dn.indexOf(\"aM\")\u003e\u003d0,S\u003dn.indexOf(\"aB\")\u003e\u003d0,j\u003dn.indexOf(\"aT\")\u003e\u003d0,D\u003dU||N||S||j,n.indexOf(\" a\")\u003e-1?(k\u003d\" \",n\u003dn.replace(\" a\",\"\")):n\u003dn.replace(\"a\",\"\"),p\u003d0\u003d\u003d\u003d(p\u003d(f\u003dMath.floor(Math.log(T)/Math.LN10)+1)%3)?3:p,g\u0026\u00260!\u003d\u003dT\u0026\u0026(d\u003dMath.floor(Math.log(T)/Math.LN10)+1-g,m\u003d3*~~((Math.min(g,f)-p)/3),T/\u003dMath.pow(10,m),-1\u003d\u003d\u003dn.indexOf(\".\")\u0026\u0026g\u003e3))for(n+\u003d\"[.]\",M\u003d(M\u003d0\u003d\u003d\u003dd?0:3*~~(d/3)-d)\u003c0?M+3:M,i\u003d0;i\u003cM;i++)n+\u003d\"0\";Math.floor(Math.log(Math.abs(e))/Math.LN10)+1!\u003d\u003dg\u0026\u0026(T\u003e\u003dMath.pow(10,12)\u0026\u0026!D||j?(k+\u003do[u].abbreviations.trillion,e/\u003dMath.pow(10,12)):T\u003cMath.pow(10,12)\u0026\u0026T\u003e\u003dMath.pow(10,9)\u0026\u0026!D||S?(k+\u003do[u].abbreviations.billion,e/\u003dMath.pow(10,9)):T\u003cMath.pow(10,9)\u0026\u0026T\u003e\u003dMath.pow(10,6)\u0026\u0026!D||N?(k+\u003do[u].abbreviations.million,e/\u003dMath.pow(10,6)):(T\u003cMath.pow(10,6)\u0026\u0026T\u003e\u003dMath.pow(10,3)\u0026\u0026!D||U)\u0026\u0026(k+\u003do[u].abbreviations.thousand,e/\u003dMath.pow(10,3)))}if(n.indexOf(\"b\")\u003e-1)for(n.indexOf(\" b\")\u003e-1?(C\u003d\" \",n\u003dn.replace(\" b\",\"\")):n\u003dn.replace(\"b\",\"\"),s\u003d0;s\u003c\u003dK.length;s++)if(a\u003dMath.pow(1024,s),l\u003dMath.pow(1024,s+1),e\u003e\u003da\u0026\u0026e\u003cl){C+\u003dK[s],a\u003e0\u0026\u0026(e/\u003da);break}if(n.indexOf(\"d\")\u003e-1)for(n.indexOf(\" d\")\u003e-1?(C\u003d\" \",n\u003dn.replace(\" d\",\"\")):n\u003dn.replace(\"d\",\"\"),s\u003d0;s\u003c\u003dG.length;s++)if(a\u003dMath.pow(1e3,s),l\u003dMath.pow(1e3,s+1),e\u003e\u003da\u0026\u0026e\u003cl){C+\u003dG[s],a\u003e0\u0026\u0026(e/\u003da);break}if(n.indexOf(\"o\")\u003e-1\u0026\u0026(n.indexOf(\" o\")\u003e-1?(L\u003d\" \",n\u003dn.replace(\" o\",\"\")):n\u003dn.replace(\"o\",\"\"),o[u].ordinal\u0026\u0026(L+\u003do[u].ordinal(e))),n.indexOf(\"[.]\")\u003e-1\u0026\u0026(F\u003d!0,n\u003dn.replace(\"[.]\",\".\")),x\u003de.toString().split(\".\")[0],O\u003dn.split(\".\")[1],y\u003dn.indexOf(\",\"),O){if(x\u003d(I\u003d-1!\u003d\u003dO.indexOf(\"*\")?h(e,e.toString().split(\".\")[1].length,t):O.indexOf(\"[\")\u003e-1?h(e,(O\u003d(O\u003dO.replace(\"]\",\"\")).split(\"[\"))[0].length+O[1].length,t,O[1].length):h(e,O.length,t)).split(\".\")[0],I.split(\".\")[1].length)I\u003d(r?k+r:o[u].delimiters.decimal)+I.split(\".\")[1];else I\u003d\"\";F\u0026\u00260\u003d\u003d\u003dNumber(I.slice(1))\u0026\u0026(I\u003d\"\")}else x\u003dh(e,null,t);return x.indexOf(\"-\")\u003e-1\u0026\u0026(x\u003dx.slice(1),R\u003d!0),x.length\u003cv\u0026\u0026(x\u003dnew Array(v-x.length+1).join(\"0\")+x),y\u003e-1\u0026\u0026(x\u003dx.toString().replace(/(\\d)(?\u003d(\\d{3})+(?!\\d))/g,\"$1\"+o[u].delimiters.thousands)),0\u003d\u003d\u003dn.indexOf(\".\")\u0026\u0026(x\u003d\"\"),b+(n.indexOf(\"(\")\u003cn.indexOf(\"-\")?(B\u0026\u0026R?\"(\":\"\")+(P\u0026\u0026R||!B\u0026\u0026R?\"-\":\"\"):(P\u0026\u0026R||!B\u0026\u0026R?\"-\":\"\")+(B\u0026\u0026R?\"(\":\"\"))+(!R\u0026\u0026E\u0026\u00260!\u003d\u003de?\"+\":\"\")+x+I+(L||\"\")+(k\u0026\u0026!r?k:\"\")+(C||\"\")+(B\u0026\u0026R?\")\":\"\")+w}function x(e,n){o[e]\u003dn}function g(e){u\u003de;var n\u003do[e].defaults;n\u0026\u0026n.format\u0026\u0026a.defaultFormat(n.format),n\u0026\u0026n.currencyFormat\u0026\u0026a.defaultCurrencyFormat(n.currencyFormat)}(a\u003dfunction(e){return a.isNumbro(e)?e\u003de.value():0\u003d\u003d\u003de||void 0\u003d\u003d\u003de?e\u003d0:Number(e)||(e\u003da.fn.unformat(e)),new f(Number(e))}).version\u003d\"1.6.2\",a.isNumbro\u003dfunction(e){return e instanceof f},a.setLanguage\u003dfunction(e,n){console.warn(\"`setLanguage` is deprecated since version 1.6.0. Use `setCulture` instead\");var t\u003de,r\u003de.split(\"-\")[0],i\u003dnull;l[t]||(Object.keys(l).forEach((function(e){i||e.split(\"-\")[0]!\u003d\u003dr||(i\u003de)})),t\u003di||n||\"en-US\"),g(t)},a.setCulture\u003dfunction(e,n){var t\u003de,r\u003de.split(\"-\")[1],i\u003dnull;o[t]||(r\u0026\u0026Object.keys(o).forEach((function(e){i||e.split(\"-\")[1]!\u003d\u003dr||(i\u003de)})),t\u003di||n||\"en-US\"),g(t)},a.language\u003dfunction(e,n){if(console.warn(\"`language` is deprecated since version 1.6.0. Use `culture` instead\"),!e)return u;if(e\u0026\u0026!n){if(!l[e])throw new Error(\"Unknown language : \"+e);g(e)}return!n\u0026\u0026l[e]||x(e,n),a},a.culture\u003dfunction(e,n){if(!e)return u;if(e\u0026\u0026!n){if(!o[e])throw new Error(\"Unknown culture : \"+e);g(e)}return!n\u0026\u0026o[e]||x(e,n),a},a.languageData\u003dfunction(e){if(console.warn(\"`languageData` is deprecated since version 1.6.0. Use `cultureData` instead\"),!e)return l[u];if(!l[e])throw new Error(\"Unknown language : \"+e);return l[e]},a.cultureData\u003dfunction(e){if(!e)return o[u];if(!o[e])throw new Error(\"Unknown culture : \"+e);return o[e]},a.culture(\"en-US\",{delimiters:{thousands:\",\",decimal:\".\"},abbreviations:{thousand:\"k\",million:\"m\",billion:\"b\",trillion:\"t\"},ordinal:function(e){var n\u003de%10;return 1\u003d\u003d~~(e%100/10)?\"th\":1\u003d\u003d\u003dn?\"st\":2\u003d\u003d\u003dn?\"nd\":3\u003d\u003d\u003dn?\"rd\":\"th\"},currency:{symbol:\"$\",position:\"prefix\"},defaults:{currencyFormat:\",0000 a\"},formats:{fourDigits:\"0000 a\",fullWithTwoDecimals:\"$ ,0.00\",fullWithTwoDecimalsNoCurrency:\",0.00\"}}),a.languages\u003dfunction(){return console.warn(\"`languages` is deprecated since version 1.6.0. Use `cultures` instead\"),l},a.cultures\u003dfunction(){return o},a.zeroFormat\u003dfunction(e){c\u003d\"string\"\u003d\u003dtypeof e?e:null},a.defaultFormat\u003dfunction(e){s\u003d\"string\"\u003d\u003dtypeof e?e:\"0.0\"},a.defaultCurrencyFormat\u003dfunction(e){\"string\"\u003d\u003dtypeof e?e:\"0$\"},a.validate\u003dfunction(e,n){var t,r,i,o,l,u,c,s;if(\"string\"!\u003dtypeof e\u0026\u0026(e+\u003d\"\",console.warn\u0026\u0026console.warn(\"Numbro.js: Value is not string. It has been co-erced to: \",e)),(e\u003de.trim()).match(/^\\d+$/))return!0;if(\"\"\u003d\u003d\u003de)return!1;try{c\u003da.cultureData(n)}catch(e){c\u003da.cultureData(a.culture())}return i\u003dc.currency.symbol,l\u003dc.abbreviations,t\u003dc.delimiters.decimal,r\u003d\".\"\u003d\u003d\u003dc.delimiters.thousands?\"\\\\.\":c.delimiters.thousands,(null\u003d\u003d\u003d(s\u003de.match(/^[^\\d]+/))||(e\u003de.substr(1),s[0]\u003d\u003d\u003di))\u0026\u0026((null\u003d\u003d\u003d(s\u003de.match(/[^\\d]+$/))||(e\u003de.slice(0,-1),s[0]\u003d\u003d\u003dl.thousand||s[0]\u003d\u003d\u003dl.million||s[0]\u003d\u003d\u003dl.billion||s[0]\u003d\u003d\u003dl.trillion))\u0026\u0026(u\u003dnew RegExp(r+\"{2}\"),!e.match(/[^\\d.,]/g)\u0026\u0026(!((o\u003de.split(t)).length\u003e2)\u0026\u0026(o.length\u003c2?!!o[0].match(/^\\d+.*\\d$/)\u0026\u0026!o[0].match(u):1\u003d\u003d\u003do[0].length?!!o[0].match(/^\\d+$/)\u0026\u0026!o[0].match(u)\u0026\u0026!!o[1].match(/^\\d+$/):!!o[0].match(/^\\d+.*\\d$/)\u0026\u0026!o[0].match(u)\u0026\u0026!!o[1].match(/^\\d+$/)))))},n.exports\u003d{format:function(e,n,t,r){return null!\u003dt\u0026\u0026t!\u003d\u003da.culture()\u0026\u0026a.setCulture(t),p(Number(e),null!\u003dn?n:s,null\u003d\u003dr?Math.round:r)}}},\n      function _(e,n,t,r,i){!function(){\"use strict\";var e\u003d{not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\\x25]+/,modulo:/^\\x25{2}/,placeholder:/^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|\u0027[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\\d]*)/i,key_access:/^\\.([a-z_][a-z_\\d]*)/i,index_access:/^\\[(\\d+)\\]/,sign:/^[+-]/};function n(e){return i(a(e),arguments)}function r(e,t){return n.apply(null,[e].concat(t||[]))}function i(t,r){var i,s,a,o,p,c,l,u,f,d\u003d1,g\u003dt.length,y\u003d\"\";for(s\u003d0;s\u003cg;s++)if(\"string\"\u003d\u003dtypeof t[s])y+\u003dt[s];else if(\"object\"\u003d\u003dtypeof t[s]){if((o\u003dt[s]).keys)for(i\u003dr[d],a\u003d0;a\u003co.keys.length;a++){if(null\u003d\u003di)throw new Error(n(\u0027[sprintf] Cannot access property \"%s\" of undefined value \"%s\"\u0027,o.keys[a],o.keys[a-1]));i\u003di[o.keys[a]]}else i\u003do.param_no?r[o.param_no]:r[d++];if(e.not_type.test(o.type)\u0026\u0026e.not_primitive.test(o.type)\u0026\u0026i instanceof Function\u0026\u0026(i\u003di()),e.numeric_arg.test(o.type)\u0026\u0026\"number\"!\u003dtypeof i\u0026\u0026isNaN(i))throw new TypeError(n(\"[sprintf] expecting number but found %T\",i));switch(e.number.test(o.type)\u0026\u0026(u\u003di\u003e\u003d0),o.type){case\"b\":i\u003dparseInt(i,10).toString(2);break;case\"c\":i\u003dString.fromCharCode(parseInt(i,10));break;case\"d\":case\"i\":i\u003dparseInt(i,10);break;case\"j\":i\u003dJSON.stringify(i,null,o.width?parseInt(o.width):0);break;case\"e\":i\u003do.precision?parseFloat(i).toExponential(o.precision):parseFloat(i).toExponential();break;case\"f\":i\u003do.precision?parseFloat(i).toFixed(o.precision):parseFloat(i);break;case\"g\":i\u003do.precision?String(Number(i.toPrecision(o.precision))):parseFloat(i);break;case\"o\":i\u003d(parseInt(i,10)\u003e\u003e\u003e0).toString(8);break;case\"s\":i\u003dString(i),i\u003do.precision?i.substring(0,o.precision):i;break;case\"t\":i\u003dString(!!i),i\u003do.precision?i.substring(0,o.precision):i;break;case\"T\":i\u003dObject.prototype.toString.call(i).slice(8,-1).toLowerCase(),i\u003do.precision?i.substring(0,o.precision):i;break;case\"u\":i\u003dparseInt(i,10)\u003e\u003e\u003e0;break;case\"v\":i\u003di.valueOf(),i\u003do.precision?i.substring(0,o.precision):i;break;case\"x\":i\u003d(parseInt(i,10)\u003e\u003e\u003e0).toString(16);break;case\"X\":i\u003d(parseInt(i,10)\u003e\u003e\u003e0).toString(16).toUpperCase()}e.json.test(o.type)?y+\u003di:(!e.number.test(o.type)||u\u0026\u0026!o.sign?f\u003d\"\":(f\u003du?\"+\":\"-\",i\u003di.toString().replace(e.sign,\"\")),c\u003do.pad_char?\"0\"\u003d\u003d\u003do.pad_char?\"0\":o.pad_char.charAt(1):\" \",l\u003do.width-(f+i).length,p\u003do.width\u0026\u0026l\u003e0?c.repeat(l):\"\",y+\u003do.align?f+i+p:\"0\"\u003d\u003d\u003dc?f+p+i:p+f+i)}return y}var s\u003dObject.create(null);function a(n){if(s[n])return s[n];for(var t,r\u003dn,i\u003d[],a\u003d0;r;){if(null!\u003d\u003d(t\u003de.text.exec(r)))i.push(t[0]);else if(null!\u003d\u003d(t\u003de.modulo.exec(r)))i.push(\"%\");else{if(null\u003d\u003d\u003d(t\u003de.placeholder.exec(r)))throw new SyntaxError(\"[sprintf] unexpected placeholder\");if(t[2]){a|\u003d1;var o\u003d[],p\u003dt[2],c\u003d[];if(null\u003d\u003d\u003d(c\u003de.key.exec(p)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");for(o.push(c[1]);\"\"!\u003d\u003d(p\u003dp.substring(c[0].length));)if(null!\u003d\u003d(c\u003de.key_access.exec(p)))o.push(c[1]);else{if(null\u003d\u003d\u003d(c\u003de.index_access.exec(p)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");o.push(c[1])}t[2]\u003do}else a|\u003d2;if(3\u003d\u003d\u003da)throw new Error(\"[sprintf] mixing positional and named placeholders is not (yet) supported\");i.push({placeholder:t[0],param_no:t[1],keys:t[2],sign:t[3],pad_char:t[4],align:t[5],width:t[6],precision:t[7],type:t[8]})}r\u003dr.substring(t[0].length)}return s[n]\u003di}void 0!\u003d\u003dt\u0026\u0026(t.sprintf\u003dn,t.vsprintf\u003dr),\"undefined\"!\u003dtypeof window\u0026\u0026(window.sprintf\u003dn,window.vsprintf\u003dr,\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd\u0026\u0026define((function(){return{sprintf:n,vsprintf:r}})))}()},\n      function _(e,i,n,t,a){t();const s\u003de(9),r\u003de(178),c\u003de(186),m\u003de(187),_\u003de(190),k\u003de(191),o\u003de(189);class T extends c.CompositeTicker{constructor(e){super(e)}static init_DatetimeTicker(){this.override({num_minor_ticks:0,tickers:()\u003d\u003e[new r.AdaptiveTicker({mantissas:[1,2,5],base:10,min_interval:0,max_interval:500*o.ONE_MILLI,num_minor_ticks:0}),new r.AdaptiveTicker({mantissas:[1,2,5,10,15,20,30],base:60,min_interval:o.ONE_SECOND,max_interval:30*o.ONE_MINUTE,num_minor_ticks:0}),new r.AdaptiveTicker({mantissas:[1,2,4,6,8,12],base:24,min_interval:o.ONE_HOUR,max_interval:12*o.ONE_HOUR,num_minor_ticks:0}),new m.DaysTicker({days:s.range(1,32)}),new m.DaysTicker({days:s.range(1,31,3)}),new m.DaysTicker({days:[1,8,15,22]}),new m.DaysTicker({days:[1,15]}),new _.MonthsTicker({months:s.range(0,12,1)}),new _.MonthsTicker({months:s.range(0,12,2)}),new _.MonthsTicker({months:s.range(0,12,4)}),new _.MonthsTicker({months:s.range(0,12,6)}),new k.YearsTicker({})]})}}n.DatetimeTicker\u003dT,T.__name__\u003d\"DatetimeTicker\",T.init_DatetimeTicker()},\n      function _(t,e,i,s,r){s();const n\u003dt(179),_\u003dt(9);class a extends n.ContinuousTicker{constructor(t){super(t)}static init_CompositeTicker(){this.define((({Array:t,Ref:e})\u003d\u003e({tickers:[t(e(n.ContinuousTicker)),[]]})))}get min_intervals(){return this.tickers.map((t\u003d\u003et.get_min_interval()))}get max_intervals(){return this.tickers.map((t\u003d\u003et.get_max_interval()))}get_min_interval(){return this.min_intervals[0]}get_max_interval(){return this.max_intervals[0]}get_best_ticker(t,e,i){const s\u003de-t,r\u003dthis.get_ideal_interval(t,e,i),n\u003d[_.sorted_index(this.min_intervals,r)-1,_.sorted_index(this.max_intervals,r)],a\u003d[this.min_intervals[n[0]],this.max_intervals[n[1]]].map((t\u003d\u003eMath.abs(i-s/t)));let c;if(_.is_empty(a.filter((t\u003d\u003e!isNaN(t)))))c\u003dthis.tickers[0];else{const t\u003dn[_.argmin(a)];c\u003dthis.tickers[t]}return c}get_interval(t,e,i){return this.get_best_ticker(t,e,i).get_interval(t,e,i)}get_ticks_no_defaults(t,e,i,s){return this.get_best_ticker(t,e,s).get_ticks_no_defaults(t,e,i,s)}}i.CompositeTicker\u003da,a.__name__\u003d\"CompositeTicker\",a.init_CompositeTicker()},\n      function _(t,e,n,i,s){i();const a\u003dt(188),o\u003dt(189),r\u003dt(9);class c extends a.SingleIntervalTicker{constructor(t){super(t)}static init_DaysTicker(){this.define((({Int:t,Array:e})\u003d\u003e({days:[e(t),[]]}))),this.override({num_minor_ticks:0})}initialize(){super.initialize();const t\u003dthis.days;t.length\u003e1?this.interval\u003d(t[1]-t[0])*o.ONE_DAY:this.interval\u003d31*o.ONE_DAY}get_ticks_no_defaults(t,e,n,i){const s\u003dfunction(t,e){const n\u003do.last_month_no_later_than(new Date(t)),i\u003do.last_month_no_later_than(new Date(e));i.setUTCMonth(i.getUTCMonth()+1);const s\u003d[],a\u003dn;for(;s.push(o.copy_date(a)),a.setUTCMonth(a.getUTCMonth()+1),!(a\u003ei););return s}(t,e),a\u003dthis.days,c\u003dthis.interval;return{major:r.concat(s.map((t\u003d\u003e((t,e)\u003d\u003e{const n\u003dt.getUTCMonth(),i\u003d[];for(const s of a){const a\u003do.copy_date(t);a.setUTCDate(s),new Date(a.getTime()+e/2).getUTCMonth()\u003d\u003dn\u0026\u0026i.push(a)}return i})(t,c)))).map((t\u003d\u003et.getTime())).filter((n\u003d\u003et\u003c\u003dn\u0026\u0026n\u003c\u003de)),minor:[]}}}n.DaysTicker\u003dc,c.__name__\u003d\"DaysTicker\",c.init_DaysTicker()},\n      function _(e,t,n,i,r){i();const l\u003de(179);class a extends l.ContinuousTicker{constructor(e){super(e)}static init_SingleIntervalTicker(){this.define((({Number:e})\u003d\u003e({interval:[e]})))}get_interval(e,t,n){return this.interval}get_min_interval(){return this.interval}get_max_interval(){return this.interval}}n.SingleIntervalTicker\u003da,a.__name__\u003d\"SingleIntervalTicker\",a.init_SingleIntervalTicker()},\n      function _(t,n,e,_,E){function N(t){return new Date(t.getTime())}function O(t){const n\u003dN(t);return n.setUTCDate(1),n.setUTCHours(0),n.setUTCMinutes(0),n.setUTCSeconds(0),n.setUTCMilliseconds(0),n}_(),e.ONE_MILLI\u003d1,e.ONE_SECOND\u003d1e3,e.ONE_MINUTE\u003d60*e.ONE_SECOND,e.ONE_HOUR\u003d60*e.ONE_MINUTE,e.ONE_DAY\u003d24*e.ONE_HOUR,e.ONE_MONTH\u003d30*e.ONE_DAY,e.ONE_YEAR\u003d365*e.ONE_DAY,e.copy_date\u003dN,e.last_month_no_later_than\u003dO,e.last_year_no_later_than\u003dfunction(t){const n\u003dO(t);return n.setUTCMonth(0),n}},\n      function _(t,e,n,i,s){i();const r\u003dt(188),a\u003dt(189),o\u003dt(9);class c extends r.SingleIntervalTicker{constructor(t){super(t)}static init_MonthsTicker(){this.define((({Int:t,Array:e})\u003d\u003e({months:[e(t),[]]})))}initialize(){super.initialize();const t\u003dthis.months;t.length\u003e1?this.interval\u003d(t[1]-t[0])*a.ONE_MONTH:this.interval\u003d12*a.ONE_MONTH}get_ticks_no_defaults(t,e,n,i){const s\u003dfunction(t,e){const n\u003da.last_year_no_later_than(new Date(t)),i\u003da.last_year_no_later_than(new Date(e));i.setUTCFullYear(i.getUTCFullYear()+1);const s\u003d[],r\u003dn;for(;s.push(a.copy_date(r)),r.setUTCFullYear(r.getUTCFullYear()+1),!(r\u003ei););return s}(t,e),r\u003dthis.months;return{major:o.concat(s.map((t\u003d\u003er.map((e\u003d\u003e{const n\u003da.copy_date(t);return n.setUTCMonth(e),n}))))).map((t\u003d\u003et.getTime())).filter((n\u003d\u003et\u003c\u003dn\u0026\u0026n\u003c\u003de)),minor:[]}}}n.MonthsTicker\u003dc,c.__name__\u003d\"MonthsTicker\",c.init_MonthsTicker()},\n      function _(e,t,a,i,r){i();const n\u003de(177),_\u003de(188),s\u003de(189);class c extends _.SingleIntervalTicker{constructor(e){super(e)}initialize(){super.initialize(),this.interval\u003ds.ONE_YEAR,this.basic_ticker\u003dnew n.BasicTicker({num_minor_ticks:0})}get_ticks_no_defaults(e,t,a,i){const r\u003ds.last_year_no_later_than(new Date(e)).getUTCFullYear(),n\u003ds.last_year_no_later_than(new Date(t)).getUTCFullYear();return{major:this.basic_ticker.get_ticks_no_defaults(r,n,a,i).major.map((e\u003d\u003eDate.UTC(e,0,1))).filter((a\u003d\u003ee\u003c\u003da\u0026\u0026a\u003c\u003dt)),minor:[]}}}a.YearsTicker\u003dc,c.__name__\u003d\"YearsTicker\"},\n      function _(i,s,t,e,o){e();const n\u003di(173),r\u003di(193),_\u003di(194);class c extends n.ContinuousAxisView{}t.LogAxisView\u003dc,c.__name__\u003d\"LogAxisView\";class x extends n.ContinuousAxis{constructor(i){super(i)}static init_LogAxis(){this.prototype.default_view\u003dc,this.override({ticker:()\u003d\u003enew _.LogTicker,formatter:()\u003d\u003enew r.LogTickFormatter})}}t.LogAxis\u003dx,x.__name__\u003d\"LogAxis\",x.init_LogAxis()},\n      function _(t,e,r,i,n){i();const o\u003dt(166),a\u003dt(176),s\u003dt(194),c\u003dt(167),{log:l,round:u}\u003dMath;class _ extends o.TickFormatter{constructor(t){super(t)}static init_LogTickFormatter(){this.define((({Ref:t,Nullable:e})\u003d\u003e({ticker:[e(t(s.LogTicker)),null]})))}initialize(){super.initialize(),this.basic_formatter\u003dnew a.BasicTickFormatter}format_graphics(t,e){var r,i;if(0\u003d\u003dt.length)return[];const n\u003dnull!\u003d\u003d(i\u003dnull\u003d\u003d\u003d(r\u003dthis.ticker)||void 0\u003d\u003d\u003dr?void 0:r.base)\u0026\u0026void 0!\u003d\u003di?i:10,o\u003dthis._exponents(t,n);return null\u003d\u003do?this.basic_formatter.format_graphics(t,e):o.map((t\u003d\u003e{const e\u003dnew c.TextBox({text:a.unicode_replace(`${n}`)}),r\u003dnew c.TextBox({text:a.unicode_replace(`${t}`)});return new c.BaseExpo(e,r)}))}_exponents(t,e){let r\u003dnull;const i\u003d[];for(const n of t){const t\u003du(l(n)/l(e));if(r\u003d\u003dt)return null;r\u003dt,i.push(t)}return i}doFormat(t,e){var r,i;if(0\u003d\u003dt.length)return[];const n\u003dnull!\u003d\u003d(i\u003dnull\u003d\u003d\u003d(r\u003dthis.ticker)||void 0\u003d\u003d\u003dr?void 0:r.base)\u0026\u0026void 0!\u003d\u003di?i:10,o\u003dthis._exponents(t,n);return null\u003d\u003do?this.basic_formatter.doFormat(t,e):o.map((t\u003d\u003ea.unicode_replace(`${n}^${t}`)))}}r.LogTickFormatter\u003d_,_.__name__\u003d\"LogTickFormatter\",_.init_LogTickFormatter()},\n      function _(t,o,e,i,s){i();const n\u003dt(178),r\u003dt(9);class c extends n.AdaptiveTicker{constructor(t){super(t)}static init_LogTicker(){this.override({mantissas:[1,5]})}get_ticks_no_defaults(t,o,e,i){const s\u003dthis.num_minor_ticks,n\u003d[],c\u003dthis.base,a\u003dMath.log(t)/Math.log(c),f\u003dMath.log(o)/Math.log(c),l\u003df-a;let h;if(isFinite(l))if(l\u003c2){const e\u003dthis.get_interval(t,o,i),c\u003dMath.floor(t/e),a\u003dMath.ceil(o/e);if(h\u003dr.range(c,a+1).filter((t\u003d\u003e0!\u003dt)).map((t\u003d\u003et*e)).filter((e\u003d\u003et\u003c\u003de\u0026\u0026e\u003c\u003do)),s\u003e0\u0026\u0026h.length\u003e0){const t\u003de/s,o\u003dr.range(0,s).map((o\u003d\u003eo*t));for(const t of o.slice(1))n.push(h[0]-t);for(const t of h)for(const e of o)n.push(t+e)}}else{const t\u003dMath.ceil(.999999*a),o\u003dMath.floor(1.000001*f),e\u003dMath.ceil((o-t)/9);if(h\u003dr.range(t-1,o+1,e).map((t\u003d\u003ec**t)),s\u003e0\u0026\u0026h.length\u003e0){const t\u003dc**e/s,o\u003dr.range(1,s+1).map((o\u003d\u003eo*t));for(const t of o)n.push(h[0]/t);n.push(h[0]);for(const t of h)for(const e of o)n.push(t*e)}}else h\u003d[];return{major:h.filter((e\u003d\u003et\u003c\u003de\u0026\u0026e\u003c\u003do)),minor:n.filter((e\u003d\u003et\u003c\u003de\u0026\u0026e\u003c\u003do))}}}e.LogTicker\u003dc,c.__name__\u003d\"LogTicker\",c.init_LogTicker()},\n      function _(e,t,i,r,s){r();const a\u003de(163),o\u003de(175),c\u003de(196),n\u003de(197);class _ extends a.AxisView{}i.MercatorAxisView\u003d_,_.__name__\u003d\"MercatorAxisView\";class x extends o.LinearAxis{constructor(e){super(e)}static init_MercatorAxis(){this.prototype.default_view\u003d_,this.override({ticker:()\u003d\u003enew n.MercatorTicker({dimension:\"lat\"}),formatter:()\u003d\u003enew c.MercatorTickFormatter({dimension:\"lat\"})})}}i.MercatorAxis\u003dx,x.__name__\u003d\"MercatorAxis\",x.init_MercatorAxis()},\n      function _(r,t,e,o,n){o();const i\u003dr(176),c\u003dr(20),a\u003dr(65);class s extends i.BasicTickFormatter{constructor(r){super(r)}static init_MercatorTickFormatter(){this.define((({Nullable:r})\u003d\u003e({dimension:[r(c.LatLon),null]})))}doFormat(r,t){if(null\u003d\u003dthis.dimension)throw new Error(\"MercatorTickFormatter.dimension not configured\");if(0\u003d\u003dr.length)return[];const e\u003dr.length,o\u003dnew Array(e);if(\"lon\"\u003d\u003dthis.dimension)for(let n\u003d0;n\u003ce;n++){const[e]\u003da.wgs84_mercator.invert(r[n],t.loc);o[n]\u003de}else for(let n\u003d0;n\u003ce;n++){const[,e]\u003da.wgs84_mercator.invert(t.loc,r[n]);o[n]\u003de}return super.doFormat(o,t)}}e.MercatorTickFormatter\u003ds,s.__name__\u003d\"MercatorTickFormatter\",s.init_MercatorTickFormatter()},\n      function _(t,o,n,r,s){r();const i\u003dt(177),e\u003dt(20),c\u003dt(65);class _ extends i.BasicTicker{constructor(t){super(t)}static init_MercatorTicker(){this.define((({Nullable:t})\u003d\u003e({dimension:[t(e.LatLon),null]})))}get_ticks_no_defaults(t,o,n,r){if(null\u003d\u003dthis.dimension)throw new Error(`${this}.dimension wasn\u0027t configured`);return[t,o]\u003dc.clip_mercator(t,o,this.dimension),\"lon\"\u003d\u003dthis.dimension?this._get_ticks_lon(t,o,n,r):this._get_ticks_lat(t,o,n,r)}_get_ticks_lon(t,o,n,r){const[s]\u003dc.wgs84_mercator.invert(t,n),[i,e]\u003dc.wgs84_mercator.invert(o,n),_\u003dsuper.get_ticks_no_defaults(s,i,n,r),a\u003d[];for(const t of _.major)if(c.in_bounds(t,\"lon\")){const[o]\u003dc.wgs84_mercator.compute(t,e);a.push(o)}const m\u003d[];for(const t of _.minor)if(c.in_bounds(t,\"lon\")){const[o]\u003dc.wgs84_mercator.compute(t,e);m.push(o)}return{major:a,minor:m}}_get_ticks_lat(t,o,n,r){const[,s]\u003dc.wgs84_mercator.invert(n,t),[i,e]\u003dc.wgs84_mercator.invert(n,o),_\u003dsuper.get_ticks_no_defaults(s,e,n,r),a\u003d[];for(const t of _.major)if(c.in_bounds(t,\"lat\")){const[,o]\u003dc.wgs84_mercator.compute(i,t);a.push(o)}const m\u003d[];for(const t of _.minor)if(c.in_bounds(t,\"lat\")){const[,o]\u003dc.wgs84_mercator.compute(i,t);m.push(o)}return{major:a,minor:m}}}n.MercatorTicker\u003d_,_.__name__\u003d\"MercatorTicker\",_.init_MercatorTicker()},\n      function _(e,i,r,c,k){c(),k(\"AdaptiveTicker\",e(178).AdaptiveTicker),k(\"BasicTicker\",e(177).BasicTicker),k(\"CategoricalTicker\",e(171).CategoricalTicker),k(\"CompositeTicker\",e(186).CompositeTicker),k(\"ContinuousTicker\",e(179).ContinuousTicker),k(\"DatetimeTicker\",e(185).DatetimeTicker),k(\"DaysTicker\",e(187).DaysTicker),k(\"FixedTicker\",e(199).FixedTicker),k(\"LogTicker\",e(194).LogTicker),k(\"MercatorTicker\",e(197).MercatorTicker),k(\"MonthsTicker\",e(190).MonthsTicker),k(\"SingleIntervalTicker\",e(188).SingleIntervalTicker),k(\"Ticker\",e(165).Ticker),k(\"YearsTicker\",e(191).YearsTicker),k(\"BinnedTicker\",e(200).BinnedTicker)},\n      function _(i,t,e,r,n){r();const s\u003di(179);class _ extends s.ContinuousTicker{constructor(i){super(i)}static init_FixedTicker(){this.define((({Number:i,Array:t})\u003d\u003e({ticks:[t(i),[]],minor_ticks:[t(i),[]]})))}get_ticks_no_defaults(i,t,e,r){return{major:this.ticks,minor:this.minor_ticks}}get_interval(i,t,e){return 0}get_min_interval(){return 0}get_max_interval(){return 0}}e.FixedTicker\u003d_,_.__name__\u003d\"FixedTicker\",_.init_FixedTicker()},\n      function _(e,n,t,i,r){i();const c\u003de(165),o\u003de(201),s\u003de(12);class a extends c.Ticker{constructor(e){super(e)}static init_BinnedTicker(){this.define((({Number:e,Ref:n,Or:t,Auto:i})\u003d\u003e({mapper:[n(o.ScanningColorMapper)],num_major_ticks:[t(e,i),8]})))}get_ticks(e,n,t,i){const{binning:r}\u003dthis.mapper.metrics,c\u003dMath.max(0,s.left_edge_index(e,r)),o\u003dMath.min(s.left_edge_index(n,r)+1,r.length-1),a\u003d[];for(let e\u003dc;e\u003c\u003do;e++)a.push(r[e]);const{num_major_ticks:_}\u003dthis,m\u003d[],h\u003d\"auto\"\u003d\u003d_?a.length:_,l\u003dMath.max(1,Math.floor(a.length/h));for(let e\u003d0;e\u003ca.length;e+\u003dl)m.push(a[e]);return{major:m,minor:[]}}}t.BinnedTicker\u003da,a.__name__\u003d\"BinnedTicker\",a.init_BinnedTicker()},\n      function _(n,e,i,r,o){r();const t\u003dn(202),a\u003dn(12);class c extends t.ContinuousColorMapper{constructor(n){super(n)}cmap(n,e,i,r,o){if(n\u003co.binning[0])return i;if(n\u003eo.binning[o.binning.length-1])return r;return e[a.left_edge_index(n,o.binning)]}}i.ScanningColorMapper\u003dc,c.__name__\u003d\"ScanningColorMapper\"},\n      function _(t,o,e,n,s){n();const l\u003dt(203),i\u003dt(61),c\u003dt(9),a\u003dt(8);class r extends l.ColorMapper{constructor(t){super(t),this._scan_data\u003dnull}static init_ContinuousColorMapper(){this.define((({Number:t,String:o,Ref:e,Color:n,Or:s,Tuple:l,Array:c,Nullable:a})\u003d\u003e({high:[a(t),null],low:[a(t),null],high_color:[a(n),null],low_color:[a(n),null],domain:[c(l(e(i.GlyphRenderer),s(o,c(o)))),[]]})))}connect_signals(){super.connect_signals();const t\u003d()\u003d\u003e{for(const[t]of this.domain)this.connect(t.view.change,(()\u003d\u003ethis.update_data())),this.connect(t.data_source.selected.change,(()\u003d\u003ethis.update_data()))};this.connect(this.properties.domain.change,(()\u003d\u003et())),t()}update_data(){const{domain:t,palette:o}\u003dthis,e\u003d[...this._collect(t)];this._scan_data\u003dthis.scan(e,o.length),this.metrics_change.emit(),this.change.emit()}get metrics(){return null\u003d\u003dthis._scan_data\u0026\u0026this.update_data(),this._scan_data}*_collect(t){for(const[o,e]of t)for(const t of a.isArray(e)?e:[e]){let e\u003do.data_source.get_column(t);e\u003do.view.indices.select(e);const n\u003do.view.masked,s\u003do.data_source.selected.indices;let l;if(null!\u003dn\u0026\u0026s.length\u003e0?l\u003dc.intersection([...n],s):null!\u003dn?l\u003d[...n]:s.length\u003e0\u0026\u0026(l\u003ds),null!\u003dl\u0026\u0026(e\u003dc.map(l,(t\u003d\u003ee[t]))),e.length\u003e0\u0026\u0026!a.isNumber(e[0]))for(const t of e)yield*t;else yield*e}}_v_compute(t,o,e,n){const{nan_color:s}\u003dn;let{low_color:l,high_color:i}\u003dn;null\u003d\u003dl\u0026\u0026(l\u003de[0]),null\u003d\u003di\u0026\u0026(i\u003de[e.length-1]);const{domain:a}\u003dthis,r\u003dc.is_empty(a)?t:[...this._collect(a)];this._scan_data\u003dthis.scan(r,e.length),this.metrics_change.emit();for(let n\u003d0,c\u003dt.length;n\u003cc;n++){const c\u003dt[n];isNaN(c)?o[n]\u003ds:o[n]\u003dthis.cmap(c,e,l,i,this._scan_data)}}_colors(t){return Object.assign(Object.assign({},super._colors(t)),{low_color:null!\u003dthis.low_color?t(this.low_color):void 0,high_color:null!\u003dthis.high_color?t(this.high_color):void 0})}}e.ContinuousColorMapper\u003dr,r.__name__\u003d\"ContinuousColorMapper\",r.init_ContinuousColorMapper()},\n      function _(t,r,e,n,o){n();const i\u003dt(204),a\u003dt(15),c\u003dt(24),_\u003dt(22),l\u003dt(27);function s(t){return _.encode_rgba(_.color2rgba(t))}function p(t){const r\u003dnew Uint32Array(t.length);for(let e\u003d0,n\u003dt.length;e\u003cn;e++)r[e]\u003ds(t[e]);return r}e._convert_color\u003ds,e._convert_palette\u003dp;class u extends i.Mapper{constructor(t){super(t)}initialize(){super.initialize(),this.metrics_change\u003dnew a.Signal0(this,\"metrics_change\")}static init_ColorMapper(){this.define((({Color:t,Array:r})\u003d\u003e({palette:[r(t)],nan_color:[t,\"gray\"]})))}v_compute(t){const r\u003dnew Array(t.length);return this._v_compute(t,r,this.palette,this._colors((t\u003d\u003et))),r}get rgba_mapper(){const t\u003dthis,r\u003dp(this.palette),e\u003dthis._colors(s);return{v_compute(n){const o\u003dnew c.ColorArray(n.length);return t._v_compute(n,o,r,e),new Uint8ClampedArray(l.to_big_endian(o).buffer)}}}_colors(t){return{nan_color:t(this.nan_color)}}}e.ColorMapper\u003du,u.__name__\u003d\"ColorMapper\",u.init_ColorMapper()},\n      function _(r,e,n,s,o){s();const p\u003dr(149);class t extends p.Transform{constructor(r){super(r)}compute(r){throw new Error(\"mapping single values is not supported\")}}n.Mapper\u003dt,t.__name__\u003d\"Mapper\"},\n      function _(t,r,a,e,c){e(),c(\"BasicTickFormatter\",t(176).BasicTickFormatter),c(\"CategoricalTickFormatter\",t(172).CategoricalTickFormatter),c(\"DatetimeTickFormatter\",t(180).DatetimeTickFormatter),c(\"FuncTickFormatter\",t(206).FuncTickFormatter),c(\"LogTickFormatter\",t(193).LogTickFormatter),c(\"MercatorTickFormatter\",t(196).MercatorTickFormatter),c(\"NumeralTickFormatter\",t(207).NumeralTickFormatter),c(\"PrintfTickFormatter\",t(208).PrintfTickFormatter),c(\"TickFormatter\",t(166).TickFormatter)},\n      function _(t,n,e,s,i){s();const r\u003dt(166),c\u003dt(13),a\u003dt(34);class u extends r.TickFormatter{constructor(t){super(t)}static init_FuncTickFormatter(){this.define((({Unknown:t,String:n,Dict:e})\u003d\u003e({args:[e(t),{}],code:[n,\"\"]})))}get names(){return c.keys(this.args)}get values(){return c.values(this.args)}_make_func(){const t\u003da.use_strict(this.code);return new Function(\"tick\",\"index\",\"ticks\",...this.names,t)}doFormat(t,n){const e\u003dthis._make_func().bind({});return t.map(((t,n,s)\u003d\u003e`${e(t,n,s,...this.values)}`))}}e.FuncTickFormatter\u003du,u.__name__\u003d\"FuncTickFormatter\",u.init_FuncTickFormatter()},\n      function _(r,t,n,e,a){e();const o\u003dr(1).__importStar(r(183)),i\u003dr(166),u\u003dr(20);class c extends i.TickFormatter{constructor(r){super(r)}static init_NumeralTickFormatter(){this.define((({String:r})\u003d\u003e({format:[r,\"0,0\"],language:[r,\"en\"],rounding:[u.RoundingFunction,\"round\"]})))}get _rounding_fn(){switch(this.rounding){case\"round\":case\"nearest\":return Math.round;case\"floor\":case\"rounddown\":return Math.floor;case\"ceil\":case\"roundup\":return Math.ceil}}doFormat(r,t){const{format:n,language:e,_rounding_fn:a}\u003dthis;return r.map((r\u003d\u003eo.format(r,n,e,a)))}}n.NumeralTickFormatter\u003dc,c.__name__\u003d\"NumeralTickFormatter\",c.init_NumeralTickFormatter()},\n      function _(t,r,i,n,o){n();const a\u003dt(166),e\u003dt(182);class c extends a.TickFormatter{constructor(t){super(t)}static init_PrintfTickFormatter(){this.define((({String:t})\u003d\u003e({format:[t,\"%s\"]})))}doFormat(t,r){return t.map((t\u003d\u003ee.sprintf(this.format,t)))}}i.PrintfTickFormatter\u003dc,c.__name__\u003d\"PrintfTickFormatter\",c.init_PrintfTickFormatter()},\n      function _(r,o,a,p,e){p(),e(\"CategoricalColorMapper\",r(210).CategoricalColorMapper),e(\"CategoricalMarkerMapper\",r(212).CategoricalMarkerMapper),e(\"CategoricalPatternMapper\",r(213).CategoricalPatternMapper),e(\"ContinuousColorMapper\",r(202).ContinuousColorMapper),e(\"ColorMapper\",r(203).ColorMapper),e(\"LinearColorMapper\",r(214).LinearColorMapper),e(\"LogColorMapper\",r(215).LogColorMapper),e(\"ScanningColorMapper\",r(201).ScanningColorMapper),e(\"EqHistColorMapper\",r(216).EqHistColorMapper)},\n      function _(t,o,a,r,e){r();const c\u003dt(211),l\u003dt(203),i\u003dt(104);class s extends l.ColorMapper{constructor(t){super(t)}static init_CategoricalColorMapper(){this.define((({Number:t,Nullable:o})\u003d\u003e({factors:[i.FactorSeq],start:[t,0],end:[o(t),null]})))}_v_compute(t,o,a,{nan_color:r}){c.cat_v_compute(t,this.factors,a,o,this.start,this.end,r)}}a.CategoricalColorMapper\u003ds,s.__name__\u003d\"CategoricalColorMapper\",s.init_CategoricalColorMapper()},\n      function _(n,t,e,l,i){l();const c\u003dn(12),u\u003dn(8);function f(n,t){if(n.length!\u003dt.length)return!1;for(let e\u003d0,l\u003dn.length;e\u003cl;e++)if(n[e]!\u003d\u003dt[e])return!1;return!0}e._cat_equals\u003df,e.cat_v_compute\u003dfunction(n,t,e,l,i,o,r){const _\u003dn.length;for(let g\u003d0;g\u003c_;g++){let _,s,h\u003dn[g];u.isString(h)?_\u003dc.index_of(t,h):(null!\u003di?h\u003dnull!\u003do?h.slice(i,o):h.slice(i):null!\u003do\u0026\u0026(h\u003dh.slice(0,o)),_\u003d1\u003d\u003dh.length?c.index_of(t,h[0]):c.find_index(t,(n\u003d\u003ef(n,h)))),s\u003d_\u003c0||_\u003e\u003de.length?r:e[_],l[g]\u003ds}}},\n      function _(r,e,a,t,s){t();const c\u003dr(211),i\u003dr(104),l\u003dr(204),n\u003dr(20);class p extends l.Mapper{constructor(r){super(r)}static init_CategoricalMarkerMapper(){this.define((({Number:r,Array:e,Nullable:a})\u003d\u003e({factors:[i.FactorSeq],markers:[e(n.MarkerType)],start:[r,0],end:[a(r),null],default_value:[n.MarkerType,\"circle\"]})))}v_compute(r){const e\u003dnew Array(r.length);return c.cat_v_compute(r,this.factors,this.markers,e,this.start,this.end,this.default_value),e}}a.CategoricalMarkerMapper\u003dp,p.__name__\u003d\"CategoricalMarkerMapper\",p.init_CategoricalMarkerMapper()},\n      function _(t,a,e,r,n){r();const s\u003dt(211),c\u003dt(104),i\u003dt(204),p\u003dt(20);class l extends i.Mapper{constructor(t){super(t)}static init_CategoricalPatternMapper(){this.define((({Number:t,Array:a,Nullable:e})\u003d\u003e({factors:[c.FactorSeq],patterns:[a(p.HatchPatternType)],start:[t,0],end:[e(t),null],default_value:[p.HatchPatternType,\" \"]})))}v_compute(t){const a\u003dnew Array(t.length);return s.cat_v_compute(t,this.factors,this.patterns,a,this.start,this.end,this.default_value),a}}e.CategoricalPatternMapper\u003dl,l.__name__\u003d\"CategoricalPatternMapper\",l.init_CategoricalPatternMapper()},\n      function _(n,r,o,t,a){t();const e\u003dn(202),i\u003dn(12);class s extends e.ContinuousColorMapper{constructor(n){super(n)}scan(n,r){const o\u003dnull!\u003dthis.low?this.low:i.min(n),t\u003dnull!\u003dthis.high?this.high:i.max(n);return{max:t,min:o,norm_factor:1/(t-o),normed_interval:1/r}}cmap(n,r,o,t,a){const e\u003dr.length-1;if(n\u003d\u003da.max)return r[e];const i\u003d(n-a.min)*a.norm_factor,s\u003dMath.floor(i/a.normed_interval);return s\u003c0?o:s\u003ee?t:r[s]}}o.LinearColorMapper\u003ds,s.__name__\u003d\"LinearColorMapper\"},\n      function _(o,t,n,r,l){r();const a\u003do(202),s\u003do(12);class e extends a.ContinuousColorMapper{constructor(o){super(o)}scan(o,t){const n\u003dnull!\u003dthis.low?this.low:s.min(o),r\u003dnull!\u003dthis.high?this.high:s.max(o);return{max:r,min:n,scale:t/(Math.log(r)-Math.log(n))}}cmap(o,t,n,r,l){const a\u003dt.length-1;if(o\u003el.max)return r;if(o\u003d\u003dl.max)return t[a];if(o\u003cl.min)return n;const s\u003dMath.log(o)-Math.log(l.min);let e\u003dMath.floor(s*l.scale);return e\u003ea\u0026\u0026(e\u003da),t[e]}}n.LogColorMapper\u003de,e.__name__\u003d\"LogColorMapper\"},\n      function _(n,t,i,e,o){e();const s\u003dn(201),r\u003dn(12),a\u003dn(9),l\u003dn(19);class c extends s.ScanningColorMapper{constructor(n){super(n)}static init_EqHistColorMapper(){this.define((({Int:n})\u003d\u003e({bins:[n,65536]})))}scan(n,t){const i\u003dnull!\u003dthis.low?this.low:r.min(n),e\u003dnull!\u003dthis.high?this.high:r.max(n),o\u003dthis.bins,s\u003da.linspace(i,e,o+1),c\u003dr.bin_counts(n,s),h\u003dnew Array(o);for(let n\u003d0,t\u003ds.length;n\u003ct-1;n++){const t\u003ds[n],i\u003ds[n+1];h[n]\u003d(t+i)/2}const p\u003da.cumsum(c),g\u003dp[p.length-1],u\u003dr.map(p,(n\u003d\u003en/g));let m\u003dt-1,M\u003d[],_\u003d0,f\u003d2*t;for(;m!\u003dt\u0026\u0026_\u003c4\u0026\u00260!\u003dm;){const n\u003df/m;if(n\u003e1e3)break;f\u003dMath.round(Math.max(t*n,t));const i\u003da.range(0,f),e\u003dr.map(u,(n\u003d\u003en*(f-1)));M\u003dr.interpolate(i,e,h);m\u003da.uniq(M).length-1,_++}if(0\u003d\u003dm){M\u003d[i,e];for(let n\u003d0;n\u003ct-1;n++)M.push(e)}else M\u003dM.slice(M.length-t-1),m!\u003dt\u0026\u0026l.logger.warn(\"EqHistColorMapper warning: Histogram equalization did not converge.\");return M[0]\u003di,M[M.length-1]\u003de,{min:i,max:e,binning:M}}}i.EqHistColorMapper\u003dc,c.__name__\u003d\"EqHistColorMapper\",c.init_EqHistColorMapper()},\n      function _(a,e,l,c,n){c(),n(\"CategoricalScale\",a(145).CategoricalScale),n(\"ContinuousScale\",a(158).ContinuousScale),n(\"LinearScale\",a(218).LinearScale),n(\"LinearInterpolationScale\",a(219).LinearInterpolationScale),n(\"LogScale\",a(157).LogScale),n(\"Scale\",a(146).Scale)},\n      function _(e,t,n,r,_){r();const i\u003de(158);class u extends i.ContinuousScale{constructor(e){super(e)}get s_compute(){const[e,t]\u003dthis._linear_compute_state();return n\u003d\u003ee*n+t}compute(e){return this._linear_compute(e)}v_compute(e){return this._linear_v_compute(e)}invert(e){return this._linear_invert(e)}v_invert(e){return this._linear_v_invert(e)}}n.LinearScale\u003du,u.__name__\u003d\"LinearScale\"},\n      function _(n,t,e,r,i){r();const a\u003dn(146),o\u003dn(12);class c extends a.Scale{constructor(n){super(n)}static init_LinearInterpolationScale(){this.internal((({Arrayable:n})\u003d\u003e({binning:[n]})))}get s_compute(){throw new Error(\"not implemented\")}compute(n){return n}v_compute(n){const{binning:t}\u003dthis,{start:e,end:r}\u003dthis.source_range,i\u003de,a\u003dr,c\u003dt.length,l\u003d(r-e)/(c-1),s\u003dnew Float64Array(c);for(let n\u003d0;n\u003cc;n++)s[n]\u003de+n*l;const u\u003do.map(n,(n\u003d\u003e{if(n\u003ci)return i;if(n\u003ea)return a;const e\u003do.left_edge_index(n,t);if(-1\u003d\u003de)return i;if(e\u003e\u003dc-1)return a;const r\u003dt[e],l\u003d(n-r)/(t[e+1]-r),u\u003ds[e];return u+l*(s[e+1]-u)}));return this._linear_v_compute(u)}invert(n){return n}v_invert(n){return new Float64Array(n)}}e.LinearInterpolationScale\u003dc,c.__name__\u003d\"LinearInterpolationScale\",c.init_LinearInterpolationScale()},\n      function _(a,n,e,g,R){g(),R(\"DataRange\",a(160).DataRange),R(\"DataRange1d\",a(159).DataRange1d),R(\"FactorRange\",a(104).FactorRange),R(\"Range\",a(105).Range),R(\"Range1d\",a(156).Range1d)},\n      function _(a,o,i,t,e){t();var n\u003da(141);e(\"Sizeable\",n.Sizeable),e(\"SizingPolicy\",n.SizingPolicy);var c\u003da(142);e(\"Layoutable\",c.Layoutable),e(\"LayoutItem\",c.LayoutItem);var r\u003da(222);e(\"HStack\",r.HStack),e(\"VStack\",r.VStack);var l\u003da(223);e(\"Grid\",l.Grid),e(\"Row\",l.Row),e(\"Column\",l.Column);var S\u003da(224);e(\"ContentBox\",S.ContentBox),e(\"VariadicBox\",S.VariadicBox)},\n      function _(t,e,h,i,r){i();const n\u003dt(142),o\u003dt(99);class s extends n.Layoutable{constructor(){super(...arguments),this.children\u003d[]}*[Symbol.iterator](){yield*this.children}}h.Stack\u003ds,s.__name__\u003d\"Stack\";class c extends s{_measure(t){let e\u003d0,h\u003d0;for(const t of this.children){const i\u003dt.measure({width:0,height:0});e+\u003di.width,h\u003dMath.max(h,i.height)}return{width:e,height:h}}_set_geometry(t,e){super._set_geometry(t,e);const h\u003dthis.absolute?t.top:0;let i\u003dthis.absolute?t.left:0;const{height:r}\u003dt;for(const t of this.children){const{width:e}\u003dt.measure({width:0,height:0});t.set_geometry(new o.BBox({left:i,width:e,top:h,height:r})),i+\u003de}}}h.HStack\u003dc,c.__name__\u003d\"HStack\";class a extends s{_measure(t){let e\u003d0,h\u003d0;for(const t of this.children){const i\u003dt.measure({width:0,height:0});e\u003dMath.max(e,i.width),h+\u003di.height}return{width:e,height:h}}_set_geometry(t,e){super._set_geometry(t,e);const h\u003dthis.absolute?t.left:0;let i\u003dthis.absolute?t.top:0;const{width:r}\u003dt;for(const t of this.children){const{height:e}\u003dt.measure({width:0,height:0});t.set_geometry(new o.BBox({top:i,height:e,left:h,width:r})),i+\u003de}}}h.VStack\u003da,a.__name__\u003d\"VStack\";class l extends n.Layoutable{constructor(){super(...arguments),this.children\u003d[]}*[Symbol.iterator](){yield*this.children}_measure(t){const{width_policy:e,height_policy:h}\u003dthis.sizing,{min:i,max:r}\u003dMath;let n\u003d0,o\u003d0;for(const e of this.children){const{width:h,height:i}\u003de.measure(t);n\u003dr(n,h),o\u003dr(o,i)}return{width:(()\u003d\u003e{const{width:h}\u003dthis.sizing;if(t.width\u003d\u003d1/0)return\"fixed\"\u003d\u003de\u0026\u0026null!\u003dh?h:n;switch(e){case\"fixed\":return null!\u003dh?h:n;case\"min\":return n;case\"fit\":return null!\u003dh?i(t.width,h):t.width;case\"max\":return null!\u003dh?r(t.width,h):t.width}})(),height:(()\u003d\u003e{const{height:e}\u003dthis.sizing;if(t.height\u003d\u003d1/0)return\"fixed\"\u003d\u003dh\u0026\u0026null!\u003de?e:o;switch(h){case\"fixed\":return null!\u003de?e:o;case\"min\":return o;case\"fit\":return null!\u003de?i(t.height,e):t.height;case\"max\":return null!\u003de?r(t.height,e):t.height}})()}}_set_geometry(t,e){super._set_geometry(t,e);const h\u003dthis.absolute?t:t.relative(),{left:i,right:r,top:n,bottom:s}\u003dh,c\u003dMath.round(h.vcenter),a\u003dMath.round(h.hcenter);for(const e of this.children){const{margin:h,halign:l,valign:d}\u003de.sizing,{width:u,height:g,inner:_}\u003de.measure(t),w\u003d(()\u003d\u003e{switch(`${d}_${l}`){case\"start_start\":return new o.BBox({left:i+h.left,top:n+h.top,width:u,height:g});case\"start_center\":return new o.BBox({hcenter:a,top:n+h.top,width:u,height:g});case\"start_end\":return new o.BBox({right:r-h.right,top:n+h.top,width:u,height:g});case\"center_start\":return new o.BBox({left:i+h.left,vcenter:c,width:u,height:g});case\"center_center\":return new o.BBox({hcenter:a,vcenter:c,width:u,height:g});case\"center_end\":return new o.BBox({right:r-h.right,vcenter:c,width:u,height:g});case\"end_start\":return new o.BBox({left:i+h.left,bottom:s-h.bottom,width:u,height:g});case\"end_center\":return new o.BBox({hcenter:a,bottom:s-h.bottom,width:u,height:g});case\"end_end\":return new o.BBox({right:r-h.right,bottom:s-h.bottom,width:u,height:g})}})(),m\u003dnull\u003d\u003d_?w:new o.BBox({left:w.left+_.left,top:w.top+_.top,right:w.right-_.right,bottom:w.bottom-_.bottom});e.set_geometry(w,m)}}}h.NodeLayout\u003dl,l.__name__\u003d\"NodeLayout\"},\n      function _(t,i,s,e,o){e();const n\u003dt(141),l\u003dt(142),r\u003dt(8),h\u003dt(99),c\u003dt(9),{max:a,round:g}\u003dMath;class p{constructor(t){this.def\u003dt,this._map\u003dnew Map}get(t){let i\u003dthis._map.get(t);return void 0\u003d\u003d\u003di\u0026\u0026(i\u003dthis.def(),this._map.set(t,i)),i}apply(t,i){const s\u003dthis.get(t);this._map.set(t,i(s))}}p.__name__\u003d\"DefaultMap\";class f{constructor(){this._items\u003d[],this._nrows\u003d0,this._ncols\u003d0}get nrows(){return this._nrows}get ncols(){return this._ncols}add(t,i){const{r1:s,c1:e}\u003dt;this._nrows\u003da(this._nrows,s+1),this._ncols\u003da(this._ncols,e+1),this._items.push({span:t,data:i})}at(t,i){return this._items.filter((({span:s})\u003d\u003es.r0\u003c\u003dt\u0026\u0026t\u003c\u003ds.r1\u0026\u0026s.c0\u003c\u003di\u0026\u0026i\u003c\u003ds.c1)).map((({data:t})\u003d\u003et))}row(t){return this._items.filter((({span:i})\u003d\u003ei.r0\u003c\u003dt\u0026\u0026t\u003c\u003di.r1)).map((({data:t})\u003d\u003et))}col(t){return this._items.filter((({span:i})\u003d\u003ei.c0\u003c\u003dt\u0026\u0026t\u003c\u003di.c1)).map((({data:t})\u003d\u003et))}foreach(t){for(const{span:i,data:s}of this._items)t(i,s)}map(t){const i\u003dnew f;for(const{span:s,data:e}of this._items)i.add(s,t(s,e));return i}}f.__name__\u003d\"Container\";class _ extends l.Layoutable{constructor(t\u003d[]){super(),this.items\u003dt,this.rows\u003d\"auto\",this.cols\u003d\"auto\",this.spacing\u003d0}*[Symbol.iterator](){for(const{layout:t}of this.items)yield t}is_width_expanding(){if(super.is_width_expanding())return!0;if(\"fixed\"\u003d\u003dthis.sizing.width_policy)return!1;const{cols:t}\u003dthis._state;return c.some(t,(t\u003d\u003e\"max\"\u003d\u003dt.policy))}is_height_expanding(){if(super.is_height_expanding())return!0;if(\"fixed\"\u003d\u003dthis.sizing.height_policy)return!1;const{rows:t}\u003dthis._state;return c.some(t,(t\u003d\u003e\"max\"\u003d\u003dt.policy))}_init(){var t,i,s,e;super._init();const o\u003dnew f;for(const{layout:t,row:i,col:s,row_span:e,col_span:n}of this.items)if(t.sizing.visible){const l\u003di,r\u003ds,h\u003di+(null!\u003de?e:1)-1,c\u003ds+(null!\u003dn?n:1)-1;o.add({r0:l,c0:r,r1:h,c1:c},t)}const{nrows:n,ncols:l}\u003do,h\u003dnew Array(n);for(let s\u003d0;s\u003cn;s++){const e\u003d(()\u003d\u003e{var t;const i\u003dr.isPlainObject(this.rows)?null!\u003d\u003d(t\u003dthis.rows[s])\u0026\u0026void 0!\u003d\u003dt?t:this.rows[\"*\"]:this.rows;return null\u003d\u003di?{policy:\"auto\"}:r.isNumber(i)?{policy:\"fixed\",height:i}:r.isString(i)?{policy:i}:i})(),n\u003dnull!\u003d\u003d(t\u003de.align)\u0026\u0026void 0!\u003d\u003dt?t:\"auto\";if(\"fixed\"\u003d\u003de.policy)h[s]\u003d{policy:\"fixed\",height:e.height,align:n};else if(\"min\"\u003d\u003de.policy)h[s]\u003d{policy:\"min\",align:n};else if(\"fit\"\u003d\u003de.policy||\"max\"\u003d\u003de.policy)h[s]\u003d{policy:e.policy,flex:null!\u003d\u003d(i\u003de.flex)\u0026\u0026void 0!\u003d\u003di?i:1,align:n};else{if(\"auto\"!\u003de.policy)throw new Error(\"unrechable\");c.some(o.row(s),(t\u003d\u003et.is_height_expanding()))?h[s]\u003d{policy:\"max\",flex:1,align:n}:h[s]\u003d{policy:\"min\",align:n}}}const a\u003dnew Array(l);for(let t\u003d0;t\u003cl;t++){const i\u003d(()\u003d\u003e{var i;const s\u003dr.isPlainObject(this.cols)?null!\u003d\u003d(i\u003dthis.cols[t])\u0026\u0026void 0!\u003d\u003di?i:this.cols[\"*\"]:this.cols;return null\u003d\u003ds?{policy:\"auto\"}:r.isNumber(s)?{policy:\"fixed\",width:s}:r.isString(s)?{policy:s}:s})(),n\u003dnull!\u003d\u003d(s\u003di.align)\u0026\u0026void 0!\u003d\u003ds?s:\"auto\";if(\"fixed\"\u003d\u003di.policy)a[t]\u003d{policy:\"fixed\",width:i.width,align:n};else if(\"min\"\u003d\u003di.policy)a[t]\u003d{policy:\"min\",align:n};else if(\"fit\"\u003d\u003di.policy||\"max\"\u003d\u003di.policy)a[t]\u003d{policy:i.policy,flex:null!\u003d\u003d(e\u003di.flex)\u0026\u0026void 0!\u003d\u003de?e:1,align:n};else{if(\"auto\"!\u003di.policy)throw new Error(\"unrechable\");c.some(o.col(t),(t\u003d\u003et.is_width_expanding()))?a[t]\u003d{policy:\"max\",flex:1,align:n}:a[t]\u003d{policy:\"min\",align:n}}}const[g,p]\u003dr.isNumber(this.spacing)?[this.spacing,this.spacing]:this.spacing;this._state\u003d{items:o,nrows:n,ncols:l,rows:h,cols:a,rspacing:g,cspacing:p}}_measure_totals(t,i){const{nrows:s,ncols:e,rspacing:o,cspacing:n}\u003dthis._state;return{height:c.sum(t)+(s-1)*o,width:c.sum(i)+(e-1)*n}}_measure_cells(t){const{items:i,nrows:s,ncols:e,rows:o,cols:l,rspacing:r,cspacing:h}\u003dthis._state,c\u003dnew Array(s);for(let t\u003d0;t\u003cs;t++){const i\u003do[t];c[t]\u003d\"fixed\"\u003d\u003di.policy?i.height:0}const p\u003dnew Array(e);for(let t\u003d0;t\u003ce;t++){const i\u003dl[t];p[t]\u003d\"fixed\"\u003d\u003di.policy?i.width:0}const _\u003dnew f;i.foreach(((i,s)\u003d\u003e{const{r0:e,c0:f,r1:d,c1:u}\u003di,w\u003d(d-e)*r,m\u003d(u-f)*h;let y\u003d0;for(let i\u003de;i\u003c\u003dd;i++)y+\u003dt(i,f).height;y+\u003dw;let x\u003d0;for(let i\u003df;i\u003c\u003du;i++)x+\u003dt(e,i).width;x+\u003dm;const b\u003ds.measure({width:x,height:y});_.add(i,{layout:s,size_hint:b});const z\u003dnew n.Sizeable(b).grow_by(s.sizing.margin);z.height-\u003dw,z.width-\u003dm;const v\u003d[];for(let t\u003de;t\u003c\u003dd;t++){const i\u003do[t];\"fixed\"\u003d\u003di.policy?z.height-\u003di.height:v.push(t)}if(z.height\u003e0){const t\u003dg(z.height/v.length);for(const i of v)c[i]\u003da(c[i],t)}const j\u003d[];for(let t\u003df;t\u003c\u003du;t++){const i\u003dl[t];\"fixed\"\u003d\u003di.policy?z.width-\u003di.width:j.push(t)}if(z.width\u003e0){const t\u003dg(z.width/j.length);for(const i of j)p[i]\u003da(p[i],t)}}));return{size:this._measure_totals(c,p),row_heights:c,col_widths:p,size_hints:_}}_measure_grid(t){const{nrows:i,ncols:s,rows:e,cols:o,rspacing:n,cspacing:l}\u003dthis._state,r\u003dthis._measure_cells(((t,i)\u003d\u003e{const s\u003de[t],n\u003do[i];return{width:\"fixed\"\u003d\u003dn.policy?n.width:1/0,height:\"fixed\"\u003d\u003ds.policy?s.height:1/0}}));let h;h\u003d\"fixed\"\u003d\u003dthis.sizing.height_policy\u0026\u0026null!\u003dthis.sizing.height?this.sizing.height:t.height!\u003d1/0\u0026\u0026this.is_height_expanding()?t.height:r.size.height;let c,p\u003d0;for(let t\u003d0;t\u003ci;t++){const i\u003de[t];\"fit\"\u003d\u003di.policy||\"max\"\u003d\u003di.policy?p+\u003di.flex:h-\u003dr.row_heights[t]}if(h-\u003d(i-1)*n,0!\u003dp\u0026\u0026h\u003e0)for(let t\u003d0;t\u003ci;t++){const i\u003de[t];if(\"fit\"\u003d\u003di.policy||\"max\"\u003d\u003di.policy){const s\u003dg(h*(i.flex/p));h-\u003ds,r.row_heights[t]\u003ds,p-\u003di.flex}}else if(h\u003c0){let t\u003d0;for(let s\u003d0;s\u003ci;s++){\"fixed\"!\u003de[s].policy\u0026\u0026t++}let s\u003d-h;for(let o\u003d0;o\u003ci;o++){if(\"fixed\"!\u003de[o].policy){const i\u003dr.row_heights[o],e\u003dg(s/t);r.row_heights[o]\u003da(i-e,0),s-\u003de\u003ei?i:e,t--}}}c\u003d\"fixed\"\u003d\u003dthis.sizing.width_policy\u0026\u0026null!\u003dthis.sizing.width?this.sizing.width:t.width!\u003d1/0\u0026\u0026this.is_width_expanding()?t.width:r.size.width;let f\u003d0;for(let t\u003d0;t\u003cs;t++){const i\u003do[t];\"fit\"\u003d\u003di.policy||\"max\"\u003d\u003di.policy?f+\u003di.flex:c-\u003dr.col_widths[t]}if(c-\u003d(s-1)*l,0!\u003df\u0026\u0026c\u003e0)for(let t\u003d0;t\u003cs;t++){const i\u003do[t];if(\"fit\"\u003d\u003di.policy||\"max\"\u003d\u003di.policy){const s\u003dg(c*(i.flex/f));c-\u003ds,r.col_widths[t]\u003ds,f-\u003di.flex}}else if(c\u003c0){let t\u003d0;for(let i\u003d0;i\u003cs;i++){\"fixed\"!\u003do[i].policy\u0026\u0026t++}let i\u003d-c;for(let e\u003d0;e\u003cs;e++){if(\"fixed\"!\u003do[e].policy){const s\u003dr.col_widths[e],o\u003dg(i/t);r.col_widths[e]\u003da(s-o,0),i-\u003do\u003es?s:o,t--}}}const{row_heights:_,col_widths:d,size_hints:u}\u003dthis._measure_cells(((t,i)\u003d\u003e({width:r.col_widths[i],height:r.row_heights[t]})));return{size:this._measure_totals(_,d),row_heights:_,col_widths:d,size_hints:u}}_measure(t){const{size:i}\u003dthis._measure_grid(t);return i}_set_geometry(t,i){super._set_geometry(t,i);const{nrows:s,ncols:e,rspacing:o,cspacing:n}\u003dthis._state,{row_heights:l,col_widths:r,size_hints:c}\u003dthis._measure_grid(t),f\u003dthis._state.rows.map(((t,i)\u003d\u003eObject.assign(Object.assign({},t),{top:0,height:l[i],get bottom(){return this.top+this.height}}))),_\u003dthis._state.cols.map(((t,i)\u003d\u003eObject.assign(Object.assign({},t),{left:0,width:r[i],get right(){return this.left+this.width}}))),d\u003dc.map(((t,i)\u003d\u003eObject.assign(Object.assign({},i),{outer:new h.BBox,inner:new h.BBox})));for(let i\u003d0,e\u003dthis.absolute?t.top:0;i\u003cs;i++){const t\u003df[i];t.top\u003de,e+\u003dt.height+o}for(let i\u003d0,s\u003dthis.absolute?t.left:0;i\u003ce;i++){const t\u003d_[i];t.left\u003ds,s+\u003dt.width+n}d.foreach((({r0:t,c0:i,r1:s,c1:e},l)\u003d\u003e{const{layout:r,size_hint:c}\u003dl,{sizing:a}\u003dr,{width:p,height:d}\u003dc,u\u003dfunction(t,i){let s\u003d(i-t)*n;for(let e\u003dt;e\u003c\u003di;e++)s+\u003d_[e].width;return s}(i,e),w\u003dfunction(t,i){let s\u003d(i-t)*o;for(let e\u003dt;e\u003c\u003di;e++)s+\u003df[e].height;return s}(t,s),m\u003di\u003d\u003de\u0026\u0026\"auto\"!\u003d_[i].align?_[i].align:a.halign,y\u003dt\u003d\u003ds\u0026\u0026\"auto\"!\u003df[t].align?f[t].align:a.valign;let x\u003d_[i].left;\"start\"\u003d\u003dm?x+\u003da.margin.left:\"center\"\u003d\u003dm?x+\u003dg((u-p)/2):\"end\"\u003d\u003dm\u0026\u0026(x+\u003du-a.margin.right-p);let b\u003df[t].top;\"start\"\u003d\u003dy?b+\u003da.margin.top:\"center\"\u003d\u003dy?b+\u003dg((w-d)/2):\"end\"\u003d\u003dy\u0026\u0026(b+\u003dw-a.margin.bottom-d),l.outer\u003dnew h.BBox({left:x,top:b,width:p,height:d})}));const u\u003df.map((()\u003d\u003e({start:new p((()\u003d\u003e0)),end:new p((()\u003d\u003e0))}))),w\u003d_.map((()\u003d\u003e({start:new p((()\u003d\u003e0)),end:new p((()\u003d\u003e0))})));d.foreach((({r0:t,c0:i,r1:s,c1:e},{size_hint:o,outer:n})\u003d\u003e{const{inner:l}\u003do;null!\u003dl\u0026\u0026(u[t].start.apply(n.top,(t\u003d\u003ea(t,l.top))),u[s].end.apply(f[s].bottom-n.bottom,(t\u003d\u003ea(t,l.bottom))),w[i].start.apply(n.left,(t\u003d\u003ea(t,l.left))),w[e].end.apply(_[e].right-n.right,(t\u003d\u003ea(t,l.right))))})),d.foreach((({r0:t,c0:i,r1:s,c1:e},o)\u003d\u003e{const{size_hint:n,outer:l}\u003do,r\u003dt\u003d\u003e{const i\u003dthis.absolute?l:l.relative(),s\u003di.left+t.left,e\u003di.top+t.top,o\u003di.right-t.right,n\u003di.bottom-t.bottom;return new h.BBox({left:s,top:e,right:o,bottom:n})};if(null!\u003dn.inner){let h\u003dr(n.inner);if(!1!\u003d\u003dn.align){const o\u003du[t].start.get(l.top),n\u003du[s].end.get(f[s].bottom-l.bottom),c\u003dw[i].start.get(l.left),a\u003dw[e].end.get(_[e].right-l.right);try{h\u003dr({top:o,bottom:n,left:c,right:a})}catch(t){}}o.inner\u003dh}else o.inner\u003dl})),d.foreach(((t,{layout:i,outer:s,inner:e})\u003d\u003e{i.set_geometry(s,e)}))}}s.Grid\u003d_,_.__name__\u003d\"Grid\";class d extends _{constructor(t){super(),this.items\u003dt.map(((t,i)\u003d\u003e({layout:t,row:0,col:i}))),this.rows\u003d\"fit\"}}s.Row\u003dd,d.__name__\u003d\"Row\";class u extends _{constructor(t){super(),this.items\u003dt.map(((t,i)\u003d\u003e({layout:t,row:i,col:0}))),this.cols\u003d\"fit\"}}s.Column\u003du,u.__name__\u003d\"Column\"},\n      function _(e,t,s,n,i){n();const a\u003de(142),c\u003de(141),o\u003de(43);class r extends a.ContentLayoutable{constructor(e){super(),this.content_size\u003do.unsized(e,(()\u003d\u003enew c.Sizeable(o.size(e))))}_content_size(){return this.content_size}}s.ContentBox\u003dr,r.__name__\u003d\"ContentBox\";class _ extends a.Layoutable{constructor(e){super(),this.el\u003de}_measure(e){const t\u003dnew c.Sizeable(e).bounded_to(this.sizing.size);return o.sized(this.el,t,(()\u003d\u003e{const e\u003dnew c.Sizeable(o.content_size(this.el)),{border:t,padding:s}\u003do.extents(this.el);return e.grow_by(t).grow_by(s).map(Math.ceil)}))}}s.VariadicBox\u003d_,_.__name__\u003d\"VariadicBox\";class h extends _{constructor(e){super(e),this._cache\u003dnew Map}_measure(e){const{width:t,height:s}\u003de,n\u003d`${t},${s}`;let i\u003dthis._cache.get(n);return null\u003d\u003di\u0026\u0026(i\u003dsuper._measure(e),this._cache.set(n,i)),i}invalidate_cache(){this._cache.clear()}}s.CachedVariadicBox\u003dh,h.__name__\u003d\"CachedVariadicBox\"},\n      function _(t,e,i,h,o){h();const s\u003dt(141),r\u003dt(142),n\u003dt(99);class g extends r.Layoutable{constructor(){super(...arguments),this.min_border\u003d{left:0,top:0,right:0,bottom:0},this.padding\u003d{left:0,top:0,right:0,bottom:0}}*[Symbol.iterator](){yield this.top_panel,yield this.bottom_panel,yield this.left_panel,yield this.right_panel,yield this.center_panel}_measure(t){t\u003dnew s.Sizeable({width:\"fixed\"\u003d\u003dthis.sizing.width_policy||t.width\u003d\u003d1/0?this.sizing.width:t.width,height:\"fixed\"\u003d\u003dthis.sizing.height_policy||t.height\u003d\u003d1/0?this.sizing.height:t.height});const e\u003dthis.left_panel.measure({width:0,height:t.height}),i\u003dMath.max(e.width,this.min_border.left)+this.padding.left,h\u003dthis.right_panel.measure({width:0,height:t.height}),o\u003dMath.max(h.width,this.min_border.right)+this.padding.right,r\u003dthis.top_panel.measure({width:t.width,height:0}),n\u003dMath.max(r.height,this.min_border.top)+this.padding.top,g\u003dthis.bottom_panel.measure({width:t.width,height:0}),a\u003dMath.max(g.height,this.min_border.bottom)+this.padding.bottom,d\u003dnew s.Sizeable(t).shrink_by({left:i,right:o,top:n,bottom:a}),l\u003dthis.center_panel.measure(d);return{width:i+l.width+o,height:n+l.height+a,inner:{left:i,right:o,top:n,bottom:a},align:(()\u003d\u003e{const{width_policy:t,height_policy:e}\u003dthis.center_panel.sizing;return\"fixed\"!\u003dt\u0026\u0026\"fixed\"!\u003de})()}}_set_geometry(t,e){super._set_geometry(t,e),this.center_panel.set_geometry(e);const i\u003dthis.left_panel.measure({width:0,height:t.height}),h\u003dthis.right_panel.measure({width:0,height:t.height}),o\u003dthis.top_panel.measure({width:t.width,height:0}),s\u003dthis.bottom_panel.measure({width:t.width,height:0}),{left:r,top:g,right:a,bottom:d}\u003de;this.top_panel.set_geometry(new n.BBox({left:r,right:a,bottom:g,height:o.height})),this.bottom_panel.set_geometry(new n.BBox({left:r,right:a,top:d,height:s.height})),this.left_panel.set_geometry(new n.BBox({top:g,bottom:d,right:r,width:i.width})),this.right_panel.set_geometry(new n.BBox({top:g,bottom:d,left:a,width:h.width}))}}i.BorderLayout\u003dg,g.__name__\u003d\"BorderLayout\"},\n      function _(t,e,i,s,n){s();const o\u003dt(1),l\u003dt(139),a\u003dt(10),_\u003dt(143),d\u003dt(20),h\u003do.__importStar(t(48));class r extends l.TextAnnotationView{_get_size(){const{ctx:t}\u003dthis.layer;this.visuals.text.set_value(t);const{width:e}\u003dt.measureText(this.model.text),{height:i}\u003d_.font_metrics(t.font);return{width:e,height:i}}_render(){const{angle:t,angle_units:e}\u003dthis.model,i\u003da.resolve_angle(t,e),s\u003dnull!\u003dthis.layout?this.layout:this.plot_view.frame,n\u003dthis.coordinates.x_scale,o\u003dthis.coordinates.y_scale;let l\u003d\"data\"\u003d\u003dthis.model.x_units?n.compute(this.model.x):s.bbox.xview.compute(this.model.x),_\u003d\"data\"\u003d\u003dthis.model.y_units?o.compute(this.model.y):s.bbox.yview.compute(this.model.y);l+\u003dthis.model.x_offset,_-\u003dthis.model.y_offset;(\"canvas\"\u003d\u003dthis.model.render_mode?this._canvas_text.bind(this):this._css_text.bind(this))(this.layer.ctx,this.model.text,l,_,i)}}i.LabelView\u003dr,r.__name__\u003d\"LabelView\";class c extends l.TextAnnotation{constructor(t){super(t)}static init_Label(){this.prototype.default_view\u003dr,this.mixins([h.Text,[\"border_\",h.Line],[\"background_\",h.Fill]]),this.define((({Number:t,String:e,Angle:i})\u003d\u003e({x:[t],x_units:[d.SpatialUnits,\"data\"],y:[t],y_units:[d.SpatialUnits,\"data\"],text:[e,\"\"],angle:[i,0],angle_units:[d.AngleUnits,\"rad\"],x_offset:[t,0],y_offset:[t,0]}))),this.override({background_fill_color:null,border_line_color:null})}}i.Label\u003dc,c.__name__\u003d\"Label\",c.init_Label()},\n      function _(t,e,s,i,o){i();const l\u003dt(1),n\u003dt(139),a\u003dt(56),r\u003dt(130),_\u003dl.__importStar(t(48)),c\u003dt(20),h\u003dt(43),d\u003dl.__importStar(t(18)),u\u003dt(143);class x extends n.TextAnnotationView{set_data(t){a.DataAnnotationView.prototype.set_data.call(this,t)}initialize(){if(super.initialize(),this.set_data(this.model.source),\"css\"\u003d\u003dthis.model.render_mode)for(let t\u003d0,e\u003dthis.text.length;t\u003ce;t++){const t\u003dh.div({style:{display:\"none\"}});this.el.appendChild(t)}}connect_signals(){super.connect_signals();const t\u003d()\u003d\u003e{this.set_data(this.model.source),\"css\"\u003d\u003dthis.model.render_mode?this.render():this.request_render()};this.connect(this.model.change,t),this.connect(this.model.source.streaming,t),this.connect(this.model.source.patching,t),this.connect(this.model.source.change,t)}_calculate_text_dimensions(t,e){const{width:s}\u003dt.measureText(e),{height:i}\u003du.font_metrics(this.visuals.text.font_value(0));return[s,i]}_map_data(){const t\u003dthis.coordinates.x_scale,e\u003dthis.coordinates.y_scale,s\u003dnull!\u003dthis.layout?this.layout:this.plot_view.frame;return[\"data\"\u003d\u003dthis.model.x_units?t.v_compute(this._x):s.bbox.xview.v_compute(this._x),\"data\"\u003d\u003dthis.model.y_units?e.v_compute(this._y):s.bbox.yview.v_compute(this._y)]}_render(){const t\u003d\"canvas\"\u003d\u003dthis.model.render_mode?this._v_canvas_text.bind(this):this._v_css_text.bind(this),{ctx:e}\u003dthis.layer,[s,i]\u003dthis._map_data();for(let o\u003d0,l\u003dthis.text.length;o\u003cl;o++)t(e,o,this.text.get(o),s[o]+this.x_offset.get(o),i[o]-this.y_offset.get(o),this.angle.get(o))}_get_size(){const{ctx:t}\u003dthis.layer;this.visuals.text.set_vectorize(t,0);const{width:e}\u003dt.measureText(this.text.get(0)),{height:s}\u003du.font_metrics(t.font);return{width:e,height:s}}_v_canvas_text(t,e,s,i,o,l){this.visuals.text.set_vectorize(t,e);const n\u003dthis._calculate_bounding_box_dimensions(t,s);t.save(),t.beginPath(),t.translate(i,o),t.rotate(l),t.rect(n[0],n[1],n[2],n[3]),this.visuals.background_fill.doit\u0026\u0026(this.visuals.background_fill.set_vectorize(t,e),t.fill()),this.visuals.border_line.doit\u0026\u0026(this.visuals.border_line.set_vectorize(t,e),t.stroke()),this.visuals.text.doit\u0026\u0026(this.visuals.text.set_vectorize(t,e),t.fillText(s,0,0)),t.restore()}_v_css_text(t,e,s,i,o,l){const n\u003dthis.el.children[e];n.textContent\u003ds,this.visuals.text.set_vectorize(t,e);const[a,r]\u003dthis._calculate_bounding_box_dimensions(t,s);n.style.position\u003d\"absolute\",n.style.left\u003d`${i+a}px`,n.style.top\u003d`${o+r}px`,n.style.color\u003dt.fillStyle,n.style.font\u003dt.font,n.style.lineHeight\u003d\"normal\",l\u0026\u0026(n.style.transform\u003d`rotate(${l}rad)`),this.visuals.background_fill.doit\u0026\u0026(this.visuals.background_fill.set_vectorize(t,e),n.style.backgroundColor\u003dt.fillStyle),this.visuals.border_line.doit\u0026\u0026(this.visuals.border_line.set_vectorize(t,e),n.style.borderStyle\u003dt.lineDash.length\u003c2?\"solid\":\"dashed\",n.style.borderWidth\u003d`${t.lineWidth}px`,n.style.borderColor\u003dt.strokeStyle),h.display(n)}}s.LabelSetView\u003dx,x.__name__\u003d\"LabelSetView\";class v extends n.TextAnnotation{constructor(t){super(t)}static init_LabelSet(){this.prototype.default_view\u003dx,this.mixins([_.TextVector,[\"border_\",_.LineVector],[\"background_\",_.FillVector]]),this.define((({Ref:t})\u003d\u003e({x:[d.XCoordinateSpec,{field:\"x\"}],y:[d.YCoordinateSpec,{field:\"y\"}],x_units:[c.SpatialUnits,\"data\"],y_units:[c.SpatialUnits,\"data\"],text:[d.StringSpec,{field:\"text\"}],angle:[d.AngleSpec,0],x_offset:[d.NumberSpec,{value:0}],y_offset:[d.NumberSpec,{value:0}],source:[t(r.ColumnDataSource),()\u003d\u003enew r.ColumnDataSource]}))),this.override({background_fill_color:null,border_line_color:null})}}s.LabelSet\u003dv,v.__name__\u003d\"LabelSet\",v.init_LabelSet()},\n      function _(t,e,i,s,l){s();const n\u003dt(1),h\u003dt(40),o\u003dt(229),a\u003dt(20),_\u003dn.__importStar(t(48)),r\u003dt(15),d\u003dt(140),c\u003dt(143),g\u003dt(99),m\u003dt(9),b\u003dt(8),f\u003dt(11);class u extends h.AnnotationView{update_layout(){const{panel:t}\u003dthis;this.layout\u003dnull!\u003dt?new d.SideLayout(t,(()\u003d\u003ethis.get_size())):void 0}cursor(t,e){return\"none\"\u003d\u003dthis.model.click_policy?null:\"pointer\"}get legend_padding(){return null!\u003dthis.model.border_line_color?this.model.padding:0}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.request_render())),this.connect(this.model.item_change,(()\u003d\u003ethis.request_render()))}compute_legend_bbox(){const t\u003dthis.model.get_legend_names(),{glyph_height:e,glyph_width:i}\u003dthis.model,{label_height:s,label_width:l}\u003dthis.model;this.max_label_height\u003dm.max([c.font_metrics(this.visuals.label_text.font_value()).height,s,e]);const{ctx:n}\u003dthis.layer;n.save(),this.visuals.label_text.set_value(n),this.text_widths\u003dnew Map;for(const e of t)this.text_widths.set(e,m.max([n.measureText(e).width,l]));this.visuals.title_text.set_value(n),this.title_height\u003dthis.model.title?c.font_metrics(this.visuals.title_text.font_value()).height+this.model.title_standoff:0,this.title_width\u003dthis.model.title?n.measureText(this.model.title).width:0,n.restore();const h\u003dMath.max(m.max([...this.text_widths.values()]),0),o\u003dthis.model.margin,{legend_padding:a}\u003dthis,_\u003dthis.model.spacing,{label_standoff:r}\u003dthis.model;let d,u;if(\"vertical\"\u003d\u003dthis.model.orientation)d\u003dt.length*this.max_label_height+Math.max(t.length-1,0)*_+2*a+this.title_height,u\u003dm.max([h+i+r+2*a,this.title_width+2*a]);else{let e\u003d2*a+Math.max(t.length-1,0)*_;for(const[,t]of this.text_widths)e+\u003dm.max([t,l])+i+r;u\u003dm.max([this.title_width+2*a,e]),d\u003dthis.max_label_height+this.title_height+2*a}const x\u003dnull!\u003dthis.layout?this.layout:this.plot_view.frame,[p,w]\u003dx.bbox.ranges,{location:v}\u003dthis.model;let y,k;if(b.isString(v))switch(v){case\"top_left\":y\u003dp.start+o,k\u003dw.start+o;break;case\"top\":case\"top_center\":y\u003d(p.end+p.start)/2-u/2,k\u003dw.start+o;break;case\"top_right\":y\u003dp.end-o-u,k\u003dw.start+o;break;case\"bottom_right\":y\u003dp.end-o-u,k\u003dw.end-o-d;break;case\"bottom\":case\"bottom_center\":y\u003d(p.end+p.start)/2-u/2,k\u003dw.end-o-d;break;case\"bottom_left\":y\u003dp.start+o,k\u003dw.end-o-d;break;case\"left\":case\"center_left\":y\u003dp.start+o,k\u003d(w.end+w.start)/2-d/2;break;case\"center\":case\"center_center\":y\u003d(p.end+p.start)/2-u/2,k\u003d(w.end+w.start)/2-d/2;break;case\"right\":case\"center_right\":y\u003dp.end-o-u,k\u003d(w.end+w.start)/2-d/2}else if(b.isArray(v)\u0026\u00262\u003d\u003dv.length){const[t,e]\u003dv;y\u003dx.bbox.xview.compute(t),k\u003dx.bbox.yview.compute(e)-d}else f.unreachable();return new g.BBox({left:y,top:k,width:u,height:d})}interactive_bbox(){return this.compute_legend_bbox()}interactive_hit(t,e){return this.interactive_bbox().contains(t,e)}on_hit(t,e){let i;const{glyph_width:s}\u003dthis.model,{legend_padding:l}\u003dthis,n\u003dthis.model.spacing,{label_standoff:h}\u003dthis.model;let o\u003di\u003dl;const a\u003dthis.compute_legend_bbox(),_\u003d\"vertical\"\u003d\u003dthis.model.orientation;for(const r of this.model.items){const d\u003dr.get_labels_list_from_label_prop();for(const c of d){const d\u003da.x+o,m\u003da.y+i+this.title_height;let b,f;[b,f]\u003d_?[a.width-2*l,this.max_label_height]:[this.text_widths.get(c)+s+h,this.max_label_height];if(new g.BBox({left:d,top:m,width:b,height:f}).contains(t,e)){switch(this.model.click_policy){case\"hide\":for(const t of r.renderers)t.visible\u003d!t.visible;break;case\"mute\":for(const t of r.renderers)t.muted\u003d!t.muted}return!0}_?i+\u003dthis.max_label_height+n:o+\u003dthis.text_widths.get(c)+s+h+n}}return!1}_render(){if(0\u003d\u003dthis.model.items.length)return;for(const t of this.model.items)t.legend\u003dthis.model;const{ctx:t}\u003dthis.layer,e\u003dthis.compute_legend_bbox();t.save(),this._draw_legend_box(t,e),this._draw_legend_items(t,e),this._draw_title(t,e),t.restore()}_draw_legend_box(t,e){t.beginPath(),t.rect(e.x,e.y,e.width,e.height),this.visuals.background_fill.set_value(t),t.fill(),this.visuals.border_line.doit\u0026\u0026(this.visuals.border_line.set_value(t),t.stroke())}_draw_legend_items(t,e){const{glyph_width:i,glyph_height:s}\u003dthis.model,{legend_padding:l}\u003dthis,n\u003dthis.model.spacing,{label_standoff:h}\u003dthis.model;let o\u003dl,a\u003dl;const _\u003d\"vertical\"\u003d\u003dthis.model.orientation;for(const r of this.model.items){const d\u003dr.get_labels_list_from_label_prop(),c\u003dr.get_field_from_label_prop();if(0\u003d\u003dd.length)continue;const g\u003d(()\u003d\u003e{switch(this.model.click_policy){case\"none\":return!0;case\"hide\":return m.every(r.renderers,(t\u003d\u003et.visible));case\"mute\":return m.every(r.renderers,(t\u003d\u003e!t.muted))}})();for(const m of d){const d\u003de.x+o,b\u003de.y+a+this.title_height,f\u003dd+i,u\u003db+s;_?a+\u003dthis.max_label_height+n:o+\u003dthis.text_widths.get(m)+i+h+n,this.visuals.label_text.set_value(t),t.fillText(m,f+h,b+this.max_label_height/2);for(const e of r.renderers){const i\u003dthis.plot_view.renderer_view(e);null\u003d\u003di||i.draw_legend(t,d,f,b,u,c,m,r.index)}if(!g){let s,n;[s,n]\u003d_?[e.width-2*l,this.max_label_height]:[this.text_widths.get(m)+i+h,this.max_label_height],t.beginPath(),t.rect(d,b,s,n),this.visuals.inactive_fill.set_value(t),t.fill()}}}}_draw_title(t,e){const{title:i}\u003dthis.model;i\u0026\u0026this.visuals.title_text.doit\u0026\u0026(t.save(),t.translate(e.x0,e.y0+this.title_height),this.visuals.title_text.set_value(t),t.fillText(i,this.legend_padding,this.legend_padding-this.model.title_standoff),t.restore())}_get_size(){const{width:t,height:e}\u003dthis.compute_legend_bbox();return{width:t+2*this.model.margin,height:e+2*this.model.margin}}}i.LegendView\u003du,u.__name__\u003d\"LegendView\";class x extends h.Annotation{constructor(t){super(t)}initialize(){super.initialize(),this.item_change\u003dnew r.Signal0(this,\"item_change\")}static init_Legend(){this.prototype.default_view\u003du,this.mixins([[\"label_\",_.Text],[\"title_\",_.Text],[\"inactive_\",_.Fill],[\"border_\",_.Line],[\"background_\",_.Fill]]),this.define((({Number:t,String:e,Array:i,Tuple:s,Or:l,Ref:n,Nullable:h})\u003d\u003e({orientation:[a.Orientation,\"vertical\"],location:[l(a.LegendLocation,s(t,t)),\"top_right\"],title:[h(e),null],title_standoff:[t,5],label_standoff:[t,5],glyph_height:[t,20],glyph_width:[t,20],label_height:[t,20],label_width:[t,20],margin:[t,10],padding:[t,10],spacing:[t,3],items:[i(n(o.LegendItem)),[]],click_policy:[a.LegendClickPolicy,\"none\"]}))),this.override({border_line_color:\"#e5e5e5\",border_line_alpha:.5,border_line_width:1,background_fill_color:\"#ffffff\",background_fill_alpha:.95,inactive_fill_color:\"white\",inactive_fill_alpha:.7,label_text_font_size:\"13px\",label_text_baseline:\"middle\",title_text_font_size:\"13px\",title_text_font_style:\"italic\"})}get_legend_names(){const t\u003d[];for(const e of this.items){const i\u003de.get_labels_list_from_label_prop();t.push(...i)}return t}}i.Legend\u003dx,x.__name__\u003d\"Legend\",x.init_Legend()},\n      function _(e,r,n,l,t){l();const i\u003de(1),s\u003de(53),o\u003de(61),_\u003de(57),a\u003de(230),u\u003di.__importStar(e(18)),d\u003de(19),c\u003de(9);class f extends s.Model{constructor(e){super(e)}static init_LegendItem(){this.define((({Int:e,Array:r,Ref:n,Nullable:l})\u003d\u003e({label:[u.NullStringSpec,null],renderers:[r(n(o.GlyphRenderer)),[]],index:[l(e),null]})))}_check_data_sources_on_renderers(){if(null!\u003dthis.get_field_from_label_prop()){if(this.renderers.length\u003c1)return!1;const e\u003dthis.renderers[0].data_source;if(null!\u003de)for(const r of this.renderers)if(r.data_source!\u003de)return!1}return!0}_check_field_label_on_data_source(){const e\u003dthis.get_field_from_label_prop();if(null!\u003de){if(this.renderers.length\u003c1)return!1;const r\u003dthis.renderers[0].data_source;if(null!\u003dr\u0026\u0026!c.includes(r.columns(),e))return!1}return!0}initialize(){super.initialize(),this.legend\u003dnull,this.connect(this.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis.legend)||void 0\u003d\u003d\u003de?void 0:e.item_change.emit()}));this._check_data_sources_on_renderers()||d.logger.error(\"Non matching data sources on legend item renderers\");this._check_field_label_on_data_source()||d.logger.error(`Bad column name on label: ${this.label}`)}get_field_from_label_prop(){const{label:e}\u003dthis;return a.isField(e)?e.field:null}get_labels_list_from_label_prop(){if(a.isValue(this.label)){const{value:e}\u003dthis.label;return null!\u003de?[e]:[]}const e\u003dthis.get_field_from_label_prop();if(null!\u003de){let r;if(!this.renderers[0]||null\u003d\u003dthis.renderers[0].data_source)return[\"No source found\"];if(r\u003dthis.renderers[0].data_source,r instanceof _.ColumnarDataSource){const n\u003dr.get_column(e);return null!\u003dn?c.uniq(Array.from(n)):[\"Invalid field\"]}}return[]}}n.LegendItem\u003df,f.__name__\u003d\"LegendItem\",f.init_LegendItem()},\n      function _(i,n,e,t,u){t();const c\u003di(8);e.isValue\u003dfunction(i){return c.isPlainObject(i)\u0026\u0026\"value\"in i},e.isField\u003dfunction(i){return c.isPlainObject(i)\u0026\u0026\"field\"in i},e.isExpr\u003dfunction(i){return c.isPlainObject(i)\u0026\u0026\"expr\"in i}},\n      function _(t,i,s,n,e){n();const o\u003dt(1),l\u003dt(40),a\u003do.__importStar(t(48)),c\u003dt(20);class h extends l.AnnotationView{connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.request_render()))}_render(){const{xs:t,ys:i}\u003dthis.model;if(t.length!\u003di.length)return;const s\u003dt.length;if(s\u003c3)return;const{frame:n}\u003dthis.plot_view,{ctx:e}\u003dthis.layer,o\u003dthis.coordinates.x_scale,l\u003dthis.coordinates.y_scale,{screen:a}\u003dthis.model;function c(t,i,s,n){return a?t:\"data\"\u003d\u003di?s.v_compute(t):n.v_compute(t)}const h\u003dc(t,this.model.xs_units,o,n.bbox.xview),r\u003dc(i,this.model.ys_units,l,n.bbox.yview);e.beginPath();for(let t\u003d0;t\u003cs;t++)e.lineTo(h[t],r[t]);e.closePath(),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_value(e),e.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_value(e),e.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_value(e),e.stroke())}}s.PolyAnnotationView\u003dh,h.__name__\u003d\"PolyAnnotationView\";class r extends l.Annotation{constructor(t){super(t)}static init_PolyAnnotation(){this.prototype.default_view\u003dh,this.mixins([a.Line,a.Fill,a.Hatch]),this.define((({Number:t,Array:i})\u003d\u003e({xs:[i(t),[]],xs_units:[c.SpatialUnits,\"data\"],ys:[i(t),[]],ys_units:[c.SpatialUnits,\"data\"]}))),this.internal((({Boolean:t})\u003d\u003e({screen:[t,!1]}))),this.override({fill_color:\"#fff9ba\",fill_alpha:.4,line_color:\"#cccccc\",line_alpha:.3})}update({xs:t,ys:i}){this.setv({xs:t,ys:i,screen:!0},{check_eq:!1})}}s.PolyAnnotation\u003dr,r.__name__\u003d\"PolyAnnotation\",r.init_PolyAnnotation()},\n      function _(e,t,i,n,o){n();const s\u003de(1),l\u003de(40),r\u003ds.__importStar(e(48));class c extends l.AnnotationView{connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.request_render()))}_render(){const{gradient:e,y_intercept:t}\u003dthis.model;if(null\u003d\u003de||null\u003d\u003dt)return;const{frame:i}\u003dthis.plot_view,n\u003dthis.coordinates.x_scale,o\u003dthis.coordinates.y_scale;let s,l,r,c;if(0\u003d\u003de)s\u003do.compute(t),l\u003ds,r\u003di.bbox.left,c\u003dr+i.bbox.width;else{s\u003di.bbox.top,l\u003ds+i.bbox.height;const a\u003d(o.invert(s)-t)/e,_\u003d(o.invert(l)-t)/e;r\u003dn.compute(a),c\u003dn.compute(_)}const{ctx:a}\u003dthis.layer;a.save(),a.beginPath(),this.visuals.line.set_value(a),a.moveTo(r,s),a.lineTo(c,l),a.stroke(),a.restore()}}i.SlopeView\u003dc,c.__name__\u003d\"SlopeView\";class a extends l.Annotation{constructor(e){super(e)}static init_Slope(){this.prototype.default_view\u003dc,this.mixins(r.Line),this.define((({Number:e,Nullable:t})\u003d\u003e({gradient:[t(e),null],y_intercept:[t(e),null]}))),this.override({line_color:\"black\"})}}i.Slope\u003da,a.__name__\u003d\"Slope\",a.init_Slope()},\n      function _(e,i,t,n,o){n();const s\u003de(1),a\u003de(40),l\u003ds.__importStar(e(48)),h\u003de(20);class c extends a.AnnotationView{connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.plot_view.request_paint(this)))}_render(){const{location:e}\u003dthis.model;if(null\u003d\u003de)return;const{frame:i}\u003dthis.plot_view,t\u003dthis.coordinates.x_scale,n\u003dthis.coordinates.y_scale,o\u003d(i,t)\u003d\u003e\"data\"\u003d\u003dthis.model.location_units?i.compute(e):this.model.for_hover?e:t.compute(e);let s,a,l,h;\"width\"\u003d\u003dthis.model.dimension?(l\u003do(n,i.bbox.yview),a\u003di.bbox.left,h\u003di.bbox.width,s\u003dthis.model.line_width):(l\u003di.bbox.top,a\u003do(t,i.bbox.xview),h\u003dthis.model.line_width,s\u003di.bbox.height);const{ctx:c}\u003dthis.layer;c.save(),c.beginPath(),this.visuals.line.set_value(c),c.moveTo(a,l),\"width\"\u003d\u003dthis.model.dimension?c.lineTo(a+h,l):c.lineTo(a,l+s),c.stroke(),c.restore()}}t.SpanView\u003dc,c.__name__\u003d\"SpanView\";class d extends a.Annotation{constructor(e){super(e)}static init_Span(){this.prototype.default_view\u003dc,this.mixins(l.Line),this.define((({Number:e,Nullable:i})\u003d\u003e({render_mode:[h.RenderMode,\"canvas\"],location:[i(e),null],location_units:[h.SpatialUnits,\"data\"],dimension:[h.Dimension,\"width\"]}))),this.internal((({Boolean:e})\u003d\u003e({for_hover:[e,!1]}))),this.override({line_color:\"black\"})}}t.Span\u003dd,d.__name__\u003d\"Span\",d.init_Span()},\n      function _(i,e,t,o,l){o();const s\u003di(40),a\u003di(235),n\u003di(122),r\u003di(43),_\u003di(140),h\u003di(99);class b extends s.AnnotationView{constructor(){super(...arguments),this._invalidate_toolbar\u003d!0,this._previous_bbox\u003dnew h.BBox}update_layout(){this.layout\u003dnew _.SideLayout(this.panel,(()\u003d\u003ethis.get_size()),!0)}initialize(){super.initialize(),this.el\u003dr.div(),this.plot_view.canvas_view.add_event(this.el)}async lazy_initialize(){await super.lazy_initialize(),this._toolbar_view\u003dawait n.build_view(this.model.toolbar,{parent:this}),this.plot_view.visibility_callbacks.push((i\u003d\u003ethis._toolbar_view.set_visibility(i)))}remove(){this._toolbar_view.remove(),r.remove(this.el),super.remove()}render(){this.model.visible||r.undisplay(this.el),super.render()}_render(){const{bbox:i}\u003dthis.layout;this._previous_bbox.equals(i)||(r.position(this.el,i),this._previous_bbox\u003di),this._invalidate_toolbar\u0026\u0026(this.el.style.position\u003d\"absolute\",this.el.style.overflow\u003d\"hidden\",this._toolbar_view.render(),r.empty(this.el),this.el.appendChild(this._toolbar_view.el),this._invalidate_toolbar\u003d!1),r.display(this.el)}_get_size(){const{tools:i,logo:e}\u003dthis.model.toolbar;return{width:30*i.length+(null!\u003de?25:0),height:30}}}t.ToolbarPanelView\u003db,b.__name__\u003d\"ToolbarPanelView\";class d extends s.Annotation{constructor(i){super(i)}static init_ToolbarPanel(){this.prototype.default_view\u003db,this.define((({Ref:i})\u003d\u003e({toolbar:[i(a.Toolbar)]})))}}t.ToolbarPanel\u003dd,d.__name__\u003d\"ToolbarPanel\",d.init_ToolbarPanel()},\n      function _(t,s,e,i,o){i();const c\u003dt(8),n\u003dt(9),a\u003dt(13),l\u003dt(236),r\u003dt(237),_\u003dt(247),p\u003dt(248);e.Drag\u003dl.Tool,e.Inspection\u003dl.Tool,e.Scroll\u003dl.Tool,e.Tap\u003dl.Tool;const u\u003dt\u003d\u003e{switch(t){case\"tap\":return\"active_tap\";case\"pan\":return\"active_drag\";case\"pinch\":case\"scroll\":return\"active_scroll\";case\"multi\":return\"active_multi\"}return null},h\u003dt\u003d\u003e\"tap\"\u003d\u003dt||\"pan\"\u003d\u003dt;class v extends p.ToolbarBase{constructor(t){super(t)}static init_Toolbar(){this.prototype.default_view\u003dp.ToolbarBaseView,this.define((({Or:t,Ref:s,Auto:i,Null:o,Nullable:c})\u003d\u003e({active_drag:[t(s(e.Drag),i,o),\"auto\"],active_inspect:[t(s(e.Inspection),i,o),\"auto\"],active_scroll:[t(s(e.Scroll),i,o),\"auto\"],active_tap:[t(s(e.Tap),i,o),\"auto\"],active_multi:[c(s(r.GestureTool)),null]})))}connect_signals(){super.connect_signals();const{tools:t,active_drag:s,active_inspect:e,active_scroll:i,active_tap:o,active_multi:c}\u003dthis.properties;this.on_change([t,s,e,i,o,c],(()\u003d\u003ethis._init_tools()))}_init_tools(){if(super._init_tools(),\"auto\"\u003d\u003dthis.active_inspect);else if(this.active_inspect instanceof _.InspectTool){let t\u003d!1;for(const s of this.inspectors)s!\u003dthis.active_inspect?s.active\u003d!1:t\u003d!0;t||(this.active_inspect\u003dnull)}else if(c.isArray(this.active_inspect)){const t\u003dn.intersection(this.active_inspect,this.inspectors);t.length!\u003dthis.active_inspect.length\u0026\u0026(this.active_inspect\u003dt);for(const t of this.inspectors)n.includes(this.active_inspect,t)||(t.active\u003d!1)}else if(null\u003d\u003dthis.active_inspect)for(const t of this.inspectors)t.active\u003d!1;const t\u003dt\u003d\u003e{t.active?this._active_change(t):t.active\u003d!0};for(const t of a.values(this.gestures)){t.tools\u003dn.sort_by(t.tools,(t\u003d\u003et.default_order));for(const s of t.tools)this.connect(s.properties.active.change,(()\u003d\u003ethis._active_change(s)))}for(const[s,e]of a.entries(this.gestures)){const i\u003du(s);if(i){const o\u003dthis[i];\"auto\"\u003d\u003do?0!\u003de.tools.length\u0026\u0026h(s)\u0026\u0026t(e.tools[0]):null!\u003do\u0026\u0026(n.includes(this.tools,o)?t(o):this[i]\u003dnull)}}}}e.Toolbar\u003dv,v.__name__\u003d\"Toolbar\",v.init_Toolbar()},\n      function _(t,e,n,i,o){i();const s\u003dt(42),a\u003dt(9),r\u003dt(53);class l extends s.View{get plot_view(){return this.parent}get plot_model(){return this.parent.model}connect_signals(){super.connect_signals(),this.connect(this.model.properties.active.change,(()\u003d\u003e{this.model.active?this.activate():this.deactivate()}))}activate(){}deactivate(){}}n.ToolView\u003dl,l.__name__\u003d\"ToolView\";class _ extends r.Model{constructor(t){super(t)}static init_Tool(){this.prototype._known_aliases\u003dnew Map,this.define((({String:t,Nullable:e})\u003d\u003e({description:[e(t),null]}))),this.internal((({Boolean:t})\u003d\u003e({active:[t,!1]})))}get synthetic_renderers(){return[]}_get_dim_limits([t,e],[n,i],o,s){const r\u003do.bbox.h_range;let l;\"width\"\u003d\u003ds||\"both\"\u003d\u003ds?(l\u003d[a.min([t,n]),a.max([t,n])],l\u003d[a.max([l[0],r.start]),a.min([l[1],r.end])]):l\u003d[r.start,r.end];const _\u003do.bbox.v_range;let c;return\"height\"\u003d\u003ds||\"both\"\u003d\u003ds?(c\u003d[a.min([e,i]),a.max([e,i])],c\u003d[a.max([c[0],_.start]),a.min([c[1],_.end])]):c\u003d[_.start,_.end],[l,c]}static register_alias(t,e){this.prototype._known_aliases.set(t,e)}static from_string(t){const e\u003dthis.prototype._known_aliases.get(t);if(null!\u003de)return e();{const e\u003d[...this.prototype._known_aliases.keys()];throw new Error(`unexpected tool name \u0027${t}\u0027, possible tools are ${e.join(\", \")}`)}}}n.Tool\u003d_,_.__name__\u003d\"Tool\",_.init_Tool()},\n      function _(e,o,t,s,n){s();const u\u003de(238),_\u003de(246);class l extends u.ButtonToolView{}t.GestureToolView\u003dl,l.__name__\u003d\"GestureToolView\";class i extends u.ButtonTool{constructor(e){super(e),this.button_view\u003d_.OnOffButtonView}}t.GestureTool\u003di,i.__name__\u003d\"GestureTool\"},\n      function _(t,e,o,i,s){i();const n\u003dt(1),l\u003dn.__importDefault(t(239)),r\u003dt(240),a\u003dt(236),u\u003dt(43),h\u003dt(34),_\u003dt(8),c\u003dt(9),d\u003dn.__importStar(t(241)),m\u003dd,p\u003dn.__importDefault(t(242)),g\u003dn.__importDefault(t(243)),v\u003dt(244);class f extends r.DOMView{initialize(){super.initialize();const t\u003dthis.model.menu;if(null!\u003dt){const e\u003dthis.parent.model.toolbar_location,o\u003d\"left\"\u003d\u003de||\"above\"\u003d\u003de,i\u003dthis.parent.model.horizontal?\"vertical\":\"horizontal\";this._menu\u003dnew v.ContextMenu(o?c.reversed(t):t,{orientation:i,prevent_hide:t\u003d\u003et.target\u003d\u003dthis.el})}this._hammer\u003dnew l.default(this.el,{touchAction:\"auto\",inputClass:l.default.TouchMouseInput}),this.connect(this.model.change,(()\u003d\u003ethis.render())),this._hammer.on(\"tap\",(t\u003d\u003e{var e;(null\u003d\u003d\u003d(e\u003dthis._menu)||void 0\u003d\u003d\u003de?void 0:e.is_open)?this._menu.hide():t.target\u003d\u003dthis.el\u0026\u0026this._clicked()})),this._hammer.on(\"press\",(()\u003d\u003ethis._pressed()))}remove(){var t;this._hammer.destroy(),null\u003d\u003d\u003d(t\u003dthis._menu)||void 0\u003d\u003d\u003dt||t.remove(),super.remove()}styles(){return[...super.styles(),d.default,p.default,g.default]}css_classes(){return super.css_classes().concat(m.toolbar_button)}render(){u.empty(this.el);const t\u003dthis.model.computed_icon;_.isString(t)\u0026\u0026(h.startsWith(t,\"data:image\")?this.el.style.backgroundImage\u003d\"url(\u0027\"+t+\"\u0027)\":this.el.classList.add(t)),this.el.title\u003dthis.model.tooltip,null!\u003dthis._menu\u0026\u0026this.root.el.appendChild(this._menu.el)}_pressed(){var t;const{left:e,top:o,right:i,bottom:s}\u003dthis.el.getBoundingClientRect(),n\u003d(()\u003d\u003e{switch(this.parent.model.toolbar_location){case\"right\":return{right:e,top:o};case\"left\":return{left:i,top:o};case\"above\":return{left:e,top:s};case\"below\":return{left:e,bottom:o}}})();null\u003d\u003d\u003d(t\u003dthis._menu)||void 0\u003d\u003d\u003dt||t.toggle(n)}}o.ButtonToolButtonView\u003df,f.__name__\u003d\"ButtonToolButtonView\";class b extends a.ToolView{}o.ButtonToolView\u003db,b.__name__\u003d\"ButtonToolView\";class B extends a.Tool{constructor(t){super(t)}static init_ButtonTool(){this.internal((({Boolean:t})\u003d\u003e({disabled:[t,!1]})))}_get_dim_tooltip(t){const{description:e,tool_name:o}\u003dthis;return null!\u003de?e:\"both\"\u003d\u003dt?o:`${o} (${\"width\"\u003d\u003dt?\"x\":\"y\"}-axis)`}get tooltip(){var t;return null!\u003d\u003d(t\u003dthis.description)\u0026\u0026void 0!\u003d\u003dt?t:this.tool_name}get computed_icon(){return this.icon}get menu(){return null}}o.ButtonTool\u003dB,B.__name__\u003d\"ButtonTool\",B.init_ButtonTool()},\n      function _(t,e,i,n,r){\n      /*! Hammer.JS - v2.0.7 - 2016-04-22\n           * http://hammerjs.github.io/\n           *\n           * Copyright (c) 2016 Jorik Tangelder;\n           * Licensed under the MIT license */\n      !function(t,i,n,r){\"use strict\";var s,o\u003d[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],a\u003di.createElement(\"div\"),h\u003dMath.round,u\u003dMath.abs,c\u003dDate.now;function l(t,e,i){return setTimeout(T(t,i),e)}function p(t,e,i){return!!Array.isArray(t)\u0026\u0026(f(t,i[e],i),!0)}function f(t,e,i){var n;if(t)if(t.forEach)t.forEach(e,i);else if(t.length!\u003d\u003dr)for(n\u003d0;n\u003ct.length;)e.call(i,t[n],n,t),n++;else for(n in t)t.hasOwnProperty(n)\u0026\u0026e.call(i,t[n],n,t)}function v(e,i,n){var r\u003d\"DEPRECATED METHOD: \"+i+\"\\n\"+n+\" AT \\n\";return function(){var i\u003dnew Error(\"get-stack-trace\"),n\u003di\u0026\u0026i.stack?i.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.\u003canonymous\u003e\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",s\u003dt.console\u0026\u0026(t.console.warn||t.console.log);return s\u0026\u0026s.call(t.console,r,n),e.apply(this,arguments)}}s\u003d\"function\"!\u003dtypeof Object.assign?function(t){if(t\u003d\u003d\u003dr||null\u003d\u003d\u003dt)throw new TypeError(\"Cannot convert undefined or null to object\");for(var e\u003dObject(t),i\u003d1;i\u003carguments.length;i++){var n\u003darguments[i];if(n!\u003d\u003dr\u0026\u0026null!\u003d\u003dn)for(var s in n)n.hasOwnProperty(s)\u0026\u0026(e[s]\u003dn[s])}return e}:Object.assign;var d\u003dv((function(t,e,i){for(var n\u003dObject.keys(e),s\u003d0;s\u003cn.length;)(!i||i\u0026\u0026t[n[s]]\u003d\u003d\u003dr)\u0026\u0026(t[n[s]]\u003de[n[s]]),s++;return t}),\"extend\",\"Use `assign`.\"),m\u003dv((function(t,e){return d(t,e,!0)}),\"merge\",\"Use `assign`.\");function g(t,e,i){var n,r\u003de.prototype;(n\u003dt.prototype\u003dObject.create(r)).constructor\u003dt,n._super\u003dr,i\u0026\u0026s(n,i)}function T(t,e){return function(){return t.apply(e,arguments)}}function y(t,e){return\"function\"\u003d\u003dtypeof t?t.apply(e\u0026\u0026e[0]||r,e):t}function E(t,e){return t\u003d\u003d\u003dr?e:t}function I(t,e,i){f(S(e),(function(e){t.addEventListener(e,i,!1)}))}function A(t,e,i){f(S(e),(function(e){t.removeEventListener(e,i,!1)}))}function _(t,e){for(;t;){if(t\u003d\u003de)return!0;t\u003dt.parentNode}return!1}function C(t,e){return t.indexOf(e)\u003e-1}function S(t){return t.trim().split(/\\s+/g)}function b(t,e,i){if(t.indexOf\u0026\u0026!i)return t.indexOf(e);for(var n\u003d0;n\u003ct.length;){if(i\u0026\u0026t[n][i]\u003d\u003de||!i\u0026\u0026t[n]\u003d\u003d\u003de)return n;n++}return-1}function P(t){return Array.prototype.slice.call(t,0)}function D(t,e,i){for(var n\u003d[],r\u003d[],s\u003d0;s\u003ct.length;){var o\u003de?t[s][e]:t[s];b(r,o)\u003c0\u0026\u0026n.push(t[s]),r[s]\u003do,s++}return i\u0026\u0026(n\u003de?n.sort((function(t,i){return t[e]\u003ei[e]})):n.sort()),n}function x(t,e){for(var i,n,s\u003de[0].toUpperCase()+e.slice(1),a\u003d0;a\u003co.length;){if((n\u003d(i\u003do[a])?i+s:e)in t)return n;a++}return r}var w\u003d1;function O(e){var i\u003de.ownerDocument||e;return i.defaultView||i.parentWindow||t}var R\u003d\"ontouchstart\"in t,M\u003dx(t,\"PointerEvent\")!\u003d\u003dr,z\u003dR\u0026\u0026/mobile|tablet|ip(ad|hone|od)|android/i.test(navigator.userAgent),N\u003d\"touch\",X\u003d\"mouse\",Y\u003d24,F\u003d[\"x\",\"y\"],W\u003d[\"clientX\",\"clientY\"];function q(t,e){var i\u003dthis;this.manager\u003dt,this.callback\u003de,this.element\u003dt.element,this.target\u003dt.options.inputTarget,this.domHandler\u003dfunction(e){y(t.options.enable,[t])\u0026\u0026i.handler(e)},this.init()}function k(t,e,i){var n\u003di.pointers.length,s\u003di.changedPointers.length,o\u003d1\u0026e\u0026\u0026n-s\u003d\u003d0,a\u003d12\u0026e\u0026\u0026n-s\u003d\u003d0;i.isFirst\u003d!!o,i.isFinal\u003d!!a,o\u0026\u0026(t.session\u003d{}),i.eventType\u003de,function(t,e){var i\u003dt.session,n\u003de.pointers,s\u003dn.length;i.firstInput||(i.firstInput\u003dH(e));s\u003e1\u0026\u0026!i.firstMultiple?i.firstMultiple\u003dH(e):1\u003d\u003d\u003ds\u0026\u0026(i.firstMultiple\u003d!1);var o\u003di.firstInput,a\u003di.firstMultiple,h\u003da?a.center:o.center,l\u003de.center\u003dL(n);e.timeStamp\u003dc(),e.deltaTime\u003de.timeStamp-o.timeStamp,e.angle\u003dG(h,l),e.distance\u003dj(h,l),function(t,e){var i\u003de.center,n\u003dt.offsetDelta||{},r\u003dt.prevDelta||{},s\u003dt.prevInput||{};1!\u003d\u003de.eventType\u0026\u00264!\u003d\u003ds.eventType||(r\u003dt.prevDelta\u003d{x:s.deltaX||0,y:s.deltaY||0},n\u003dt.offsetDelta\u003d{x:i.x,y:i.y});e.deltaX\u003dr.x+(i.x-n.x),e.deltaY\u003dr.y+(i.y-n.y)}(i,e),e.offsetDirection\u003dV(e.deltaX,e.deltaY);var p\u003dU(e.deltaTime,e.deltaX,e.deltaY);e.overallVelocityX\u003dp.x,e.overallVelocityY\u003dp.y,e.overallVelocity\u003du(p.x)\u003eu(p.y)?p.x:p.y,e.scale\u003da?(f\u003da.pointers,v\u003dn,j(v[0],v[1],W)/j(f[0],f[1],W)):1,e.rotation\u003da?function(t,e){return G(e[1],e[0],W)+G(t[1],t[0],W)}(a.pointers,n):0,e.maxPointers\u003di.prevInput?e.pointers.length\u003ei.prevInput.maxPointers?e.pointers.length:i.prevInput.maxPointers:e.pointers.length,function(t,e){var i,n,s,o,a\u003dt.lastInterval||e,h\u003de.timeStamp-a.timeStamp;if(8!\u003de.eventType\u0026\u0026(h\u003e25||a.velocity\u003d\u003d\u003dr)){var c\u003de.deltaX-a.deltaX,l\u003de.deltaY-a.deltaY,p\u003dU(h,c,l);n\u003dp.x,s\u003dp.y,i\u003du(p.x)\u003eu(p.y)?p.x:p.y,o\u003dV(c,l),t.lastInterval\u003de}else i\u003da.velocity,n\u003da.velocityX,s\u003da.velocityY,o\u003da.direction;e.velocity\u003di,e.velocityX\u003dn,e.velocityY\u003ds,e.direction\u003do}(i,e);var f,v;var d\u003dt.element;_(e.srcEvent.target,d)\u0026\u0026(d\u003de.srcEvent.target);e.target\u003dd}(t,i),t.emit(\"hammer.input\",i),t.recognize(i),t.session.prevInput\u003di}function H(t){for(var e\u003d[],i\u003d0;i\u003ct.pointers.length;)e[i]\u003d{clientX:h(t.pointers[i].clientX),clientY:h(t.pointers[i].clientY)},i++;return{timeStamp:c(),pointers:e,center:L(e),deltaX:t.deltaX,deltaY:t.deltaY}}function L(t){var e\u003dt.length;if(1\u003d\u003d\u003de)return{x:h(t[0].clientX),y:h(t[0].clientY)};for(var i\u003d0,n\u003d0,r\u003d0;r\u003ce;)i+\u003dt[r].clientX,n+\u003dt[r].clientY,r++;return{x:h(i/e),y:h(n/e)}}function U(t,e,i){return{x:e/t||0,y:i/t||0}}function V(t,e){return t\u003d\u003d\u003de?1:u(t)\u003e\u003du(e)?t\u003c0?2:4:e\u003c0?8:16}function j(t,e,i){i||(i\u003dF);var n\u003de[i[0]]-t[i[0]],r\u003de[i[1]]-t[i[1]];return Math.sqrt(n*n+r*r)}function G(t,e,i){i||(i\u003dF);var n\u003de[i[0]]-t[i[0]],r\u003de[i[1]]-t[i[1]];return 180*Math.atan2(r,n)/Math.PI}q.prototype\u003d{handler:function(){},init:function(){this.evEl\u0026\u0026I(this.element,this.evEl,this.domHandler),this.evTarget\u0026\u0026I(this.target,this.evTarget,this.domHandler),this.evWin\u0026\u0026I(O(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl\u0026\u0026A(this.element,this.evEl,this.domHandler),this.evTarget\u0026\u0026A(this.target,this.evTarget,this.domHandler),this.evWin\u0026\u0026A(O(this.element),this.evWin,this.domHandler)}};var Z\u003d{mousedown:1,mousemove:2,mouseup:4},B\u003d\"mousedown\",$\u003d\"mousemove mouseup\";function J(){this.evEl\u003dB,this.evWin\u003d$,this.pressed\u003d!1,q.apply(this,arguments)}g(J,q,{handler:function(t){var e\u003dZ[t.type];1\u0026e\u0026\u00260\u003d\u003d\u003dt.button\u0026\u0026(this.pressed\u003d!0),2\u0026e\u0026\u00261!\u003d\u003dt.which\u0026\u0026(e\u003d4),this.pressed\u0026\u0026(4\u0026e\u0026\u0026(this.pressed\u003d!1),this.callback(this.manager,e,{pointers:[t],changedPointers:[t],pointerType:X,srcEvent:t}))}});var K\u003d{pointerdown:1,pointermove:2,pointerup:4,pointercancel:8,pointerout:8},Q\u003d{2:N,3:\"pen\",4:X,5:\"kinect\"},tt\u003d\"pointerdown\",et\u003d\"pointermove pointerup pointercancel\";function it(){this.evEl\u003dtt,this.evWin\u003det,q.apply(this,arguments),this.store\u003dthis.manager.session.pointerEvents\u003d[]}t.MSPointerEvent\u0026\u0026!t.PointerEvent\u0026\u0026(tt\u003d\"MSPointerDown\",et\u003d\"MSPointerMove MSPointerUp MSPointerCancel\"),g(it,q,{handler:function(t){var e\u003dthis.store,i\u003d!1,n\u003dt.type.toLowerCase().replace(\"ms\",\"\"),r\u003dK[n],s\u003dQ[t.pointerType]||t.pointerType,o\u003ds\u003d\u003dN,a\u003db(e,t.pointerId,\"pointerId\");1\u0026r\u0026\u0026(0\u003d\u003d\u003dt.button||o)?a\u003c0\u0026\u0026(e.push(t),a\u003de.length-1):12\u0026r\u0026\u0026(i\u003d!0),a\u003c0||(e[a]\u003dt,this.callback(this.manager,r,{pointers:e,changedPointers:[t],pointerType:s,srcEvent:t}),i\u0026\u0026e.splice(a,1))}});var nt\u003d{touchstart:1,touchmove:2,touchend:4,touchcancel:8},rt\u003d\"touchstart\",st\u003d\"touchstart touchmove touchend touchcancel\";function ot(){this.evTarget\u003drt,this.evWin\u003dst,this.started\u003d!1,q.apply(this,arguments)}function at(t,e){var i\u003dP(t.touches),n\u003dP(t.changedTouches);return 12\u0026e\u0026\u0026(i\u003dD(i.concat(n),\"identifier\",!0)),[i,n]}g(ot,q,{handler:function(t){var e\u003dnt[t.type];if(1\u003d\u003d\u003de\u0026\u0026(this.started\u003d!0),this.started){var i\u003dat.call(this,t,e);12\u0026e\u0026\u0026i[0].length-i[1].length\u003d\u003d0\u0026\u0026(this.started\u003d!1),this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:N,srcEvent:t})}}});var ht\u003d{touchstart:1,touchmove:2,touchend:4,touchcancel:8},ut\u003d\"touchstart touchmove touchend touchcancel\";function ct(){this.evTarget\u003dut,this.targetIds\u003d{},q.apply(this,arguments)}function lt(t,e){var i\u003dP(t.touches),n\u003dthis.targetIds;if(3\u0026e\u0026\u00261\u003d\u003d\u003di.length)return n[i[0].identifier]\u003d!0,[i,i];var r,s,o\u003dP(t.changedTouches),a\u003d[],h\u003dthis.target;if(s\u003di.filter((function(t){return _(t.target,h)})),1\u003d\u003d\u003de)for(r\u003d0;r\u003cs.length;)n[s[r].identifier]\u003d!0,r++;for(r\u003d0;r\u003co.length;)n[o[r].identifier]\u0026\u0026a.push(o[r]),12\u0026e\u0026\u0026delete n[o[r].identifier],r++;return a.length?[D(s.concat(a),\"identifier\",!0),a]:void 0}g(ct,q,{handler:function(t){var e\u003dht[t.type],i\u003dlt.call(this,t,e);i\u0026\u0026this.callback(this.manager,e,{pointers:i[0],changedPointers:i[1],pointerType:N,srcEvent:t})}});function pt(){q.apply(this,arguments);var t\u003dT(this.handler,this);this.touch\u003dnew ct(this.manager,t),this.mouse\u003dnew J(this.manager,t),this.primaryTouch\u003dnull,this.lastTouches\u003d[]}function ft(t,e){1\u0026t?(this.primaryTouch\u003de.changedPointers[0].identifier,vt.call(this,e)):12\u0026t\u0026\u0026vt.call(this,e)}function vt(t){var e\u003dt.changedPointers[0];if(e.identifier\u003d\u003d\u003dthis.primaryTouch){var i\u003d{x:e.clientX,y:e.clientY};this.lastTouches.push(i);var n\u003dthis.lastTouches;setTimeout((function(){var t\u003dn.indexOf(i);t\u003e-1\u0026\u0026n.splice(t,1)}),2500)}}function dt(t){for(var e\u003dt.srcEvent.clientX,i\u003dt.srcEvent.clientY,n\u003d0;n\u003cthis.lastTouches.length;n++){var r\u003dthis.lastTouches[n],s\u003dMath.abs(e-r.x),o\u003dMath.abs(i-r.y);if(s\u003c\u003d25\u0026\u0026o\u003c\u003d25)return!0}return!1}g(pt,q,{handler:function(t,e,i){var n\u003di.pointerType\u003d\u003dN,r\u003di.pointerType\u003d\u003dX;if(!(r\u0026\u0026i.sourceCapabilities\u0026\u0026i.sourceCapabilities.firesTouchEvents)){if(n)ft.call(this,e,i);else if(r\u0026\u0026dt.call(this,i))return;this.callback(t,e,i)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var mt\u003dx(a.style,\"touchAction\"),gt\u003dmt!\u003d\u003dr,Tt\u003d\"compute\",yt\u003d\"auto\",Et\u003d\"manipulation\",It\u003d\"none\",At\u003d\"pan-x\",_t\u003d\"pan-y\",Ct\u003dfunction(){if(!gt)return!1;var e\u003d{},i\u003dt.CSS\u0026\u0026t.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach((function(n){e[n]\u003d!i||t.CSS.supports(\"touch-action\",n)})),e}();function St(t,e){this.manager\u003dt,this.set(e)}St.prototype\u003d{set:function(t){t\u003d\u003dTt\u0026\u0026(t\u003dthis.compute()),gt\u0026\u0026this.manager.element.style\u0026\u0026Ct[t]\u0026\u0026(this.manager.element.style[mt]\u003dt),this.actions\u003dt.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var t\u003d[];return f(this.manager.recognizers,(function(e){y(e.options.enable,[e])\u0026\u0026(t\u003dt.concat(e.getTouchAction()))})),function(t){if(C(t,It))return It;var e\u003dC(t,At),i\u003dC(t,_t);if(e\u0026\u0026i)return It;if(e||i)return e?At:_t;if(C(t,Et))return Et;return yt}(t.join(\" \"))},preventDefaults:function(t){var e\u003dt.srcEvent,i\u003dt.offsetDirection;if(this.manager.session.prevented)e.preventDefault();else{var n\u003dthis.actions,r\u003dC(n,It)\u0026\u0026!Ct.none,s\u003dC(n,_t)\u0026\u0026!Ct[\"pan-y\"],o\u003dC(n,At)\u0026\u0026!Ct[\"pan-x\"];if(r){var a\u003d1\u003d\u003d\u003dt.pointers.length,h\u003dt.distance\u003c2,u\u003dt.deltaTime\u003c250;if(a\u0026\u0026h\u0026\u0026u)return}if(!o||!s)return r||s\u0026\u00266\u0026i||o\u0026\u0026i\u0026Y?this.preventSrc(e):void 0}},preventSrc:function(t){this.manager.session.prevented\u003d!0,t.preventDefault()}};var bt\u003d32;function Pt(t){this.options\u003ds({},this.defaults,t||{}),this.id\u003dw++,this.manager\u003dnull,this.options.enable\u003dE(this.options.enable,!0),this.state\u003d1,this.simultaneous\u003d{},this.requireFail\u003d[]}function Dt(t){return 16\u0026t?\"cancel\":8\u0026t?\"end\":4\u0026t?\"move\":2\u0026t?\"start\":\"\"}function xt(t){return 16\u003d\u003dt?\"down\":8\u003d\u003dt?\"up\":2\u003d\u003dt?\"left\":4\u003d\u003dt?\"right\":\"\"}function wt(t,e){var i\u003de.manager;return i?i.get(t):t}function Ot(){Pt.apply(this,arguments)}function Rt(){Ot.apply(this,arguments),this.pX\u003dnull,this.pY\u003dnull}function Mt(){Ot.apply(this,arguments)}function zt(){Pt.apply(this,arguments),this._timer\u003dnull,this._input\u003dnull}function Nt(){Ot.apply(this,arguments)}function Xt(){Ot.apply(this,arguments)}function Yt(){Pt.apply(this,arguments),this.pTime\u003d!1,this.pCenter\u003d!1,this._timer\u003dnull,this._input\u003dnull,this.count\u003d0}function Ft(t,e){return(e\u003de||{}).recognizers\u003dE(e.recognizers,Ft.defaults.preset),new Wt(t,e)}Pt.prototype\u003d{defaults:{},set:function(t){return s(this.options,t),this.manager\u0026\u0026this.manager.touchAction.update(),this},recognizeWith:function(t){if(p(t,\"recognizeWith\",this))return this;var e\u003dthis.simultaneous;return e[(t\u003dwt(t,this)).id]||(e[t.id]\u003dt,t.recognizeWith(this)),this},dropRecognizeWith:function(t){return p(t,\"dropRecognizeWith\",this)||(t\u003dwt(t,this),delete this.simultaneous[t.id]),this},requireFailure:function(t){if(p(t,\"requireFailure\",this))return this;var e\u003dthis.requireFail;return-1\u003d\u003d\u003db(e,t\u003dwt(t,this))\u0026\u0026(e.push(t),t.requireFailure(this)),this},dropRequireFailure:function(t){if(p(t,\"dropRequireFailure\",this))return this;t\u003dwt(t,this);var e\u003db(this.requireFail,t);return e\u003e-1\u0026\u0026this.requireFail.splice(e,1),this},hasRequireFailures:function(){return this.requireFail.length\u003e0},canRecognizeWith:function(t){return!!this.simultaneous[t.id]},emit:function(t){var e\u003dthis,i\u003dthis.state;function n(i){e.manager.emit(i,t)}i\u003c8\u0026\u0026n(e.options.event+Dt(i)),n(e.options.event),t.additionalEvent\u0026\u0026n(t.additionalEvent),i\u003e\u003d8\u0026\u0026n(e.options.event+Dt(i))},tryEmit:function(t){if(this.canEmit())return this.emit(t);this.state\u003dbt},canEmit:function(){for(var t\u003d0;t\u003cthis.requireFail.length;){if(!(33\u0026this.requireFail[t].state))return!1;t++}return!0},recognize:function(t){var e\u003ds({},t);if(!y(this.options.enable,[this,e]))return this.reset(),void(this.state\u003dbt);56\u0026this.state\u0026\u0026(this.state\u003d1),this.state\u003dthis.process(e),30\u0026this.state\u0026\u0026this.tryEmit(e)},process:function(t){},getTouchAction:function(){},reset:function(){}},g(Ot,Pt,{defaults:{pointers:1},attrTest:function(t){var e\u003dthis.options.pointers;return 0\u003d\u003d\u003de||t.pointers.length\u003d\u003d\u003de},process:function(t){var e\u003dthis.state,i\u003dt.eventType,n\u003d6\u0026e,r\u003dthis.attrTest(t);return n\u0026\u0026(8\u0026i||!r)?16|e:n||r?4\u0026i?8|e:2\u0026e?4|e:2:bt}}),g(Rt,Ot,{defaults:{event:\"pan\",threshold:10,pointers:1,direction:30},getTouchAction:function(){var t\u003dthis.options.direction,e\u003d[];return 6\u0026t\u0026\u0026e.push(_t),t\u0026Y\u0026\u0026e.push(At),e},directionTest:function(t){var e\u003dthis.options,i\u003d!0,n\u003dt.distance,r\u003dt.direction,s\u003dt.deltaX,o\u003dt.deltaY;return r\u0026e.direction||(6\u0026e.direction?(r\u003d0\u003d\u003d\u003ds?1:s\u003c0?2:4,i\u003ds!\u003dthis.pX,n\u003dMath.abs(t.deltaX)):(r\u003d0\u003d\u003d\u003do?1:o\u003c0?8:16,i\u003do!\u003dthis.pY,n\u003dMath.abs(t.deltaY))),t.direction\u003dr,i\u0026\u0026n\u003ee.threshold\u0026\u0026r\u0026e.direction},attrTest:function(t){return Ot.prototype.attrTest.call(this,t)\u0026\u0026(2\u0026this.state||!(2\u0026this.state)\u0026\u0026this.directionTest(t))},emit:function(t){this.pX\u003dt.deltaX,this.pY\u003dt.deltaY;var e\u003dxt(t.direction);e\u0026\u0026(t.additionalEvent\u003dthis.options.event+e),this._super.emit.call(this,t)}}),g(Mt,Ot,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[It]},attrTest:function(t){return this._super.attrTest.call(this,t)\u0026\u0026(Math.abs(t.scale-1)\u003ethis.options.threshold||2\u0026this.state)},emit:function(t){if(1!\u003d\u003dt.scale){var e\u003dt.scale\u003c1?\"in\":\"out\";t.additionalEvent\u003dthis.options.event+e}this._super.emit.call(this,t)}}),g(zt,Pt,{defaults:{event:\"press\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[yt]},process:function(t){var e\u003dthis.options,i\u003dt.pointers.length\u003d\u003d\u003de.pointers,n\u003dt.distance\u003ce.threshold,r\u003dt.deltaTime\u003ee.time;if(this._input\u003dt,!n||!i||12\u0026t.eventType\u0026\u0026!r)this.reset();else if(1\u0026t.eventType)this.reset(),this._timer\u003dl((function(){this.state\u003d8,this.tryEmit()}),e.time,this);else if(4\u0026t.eventType)return 8;return bt},reset:function(){clearTimeout(this._timer)},emit:function(t){8\u003d\u003d\u003dthis.state\u0026\u0026(t\u0026\u00264\u0026t.eventType?this.manager.emit(this.options.event+\"up\",t):(this._input.timeStamp\u003dc(),this.manager.emit(this.options.event,this._input)))}}),g(Nt,Ot,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[It]},attrTest:function(t){return this._super.attrTest.call(this,t)\u0026\u0026(Math.abs(t.rotation)\u003ethis.options.threshold||2\u0026this.state)}}),g(Xt,Ot,{defaults:{event:\"swipe\",threshold:10,velocity:.3,direction:30,pointers:1},getTouchAction:function(){return Rt.prototype.getTouchAction.call(this)},attrTest:function(t){var e,i\u003dthis.options.direction;return 30\u0026i?e\u003dt.overallVelocity:6\u0026i?e\u003dt.overallVelocityX:i\u0026Y\u0026\u0026(e\u003dt.overallVelocityY),this._super.attrTest.call(this,t)\u0026\u0026i\u0026t.offsetDirection\u0026\u0026t.distance\u003ethis.options.threshold\u0026\u0026t.maxPointers\u003d\u003dthis.options.pointers\u0026\u0026u(e)\u003ethis.options.velocity\u0026\u00264\u0026t.eventType},emit:function(t){var e\u003dxt(t.offsetDirection);e\u0026\u0026this.manager.emit(this.options.event+e,t),this.manager.emit(this.options.event,t)}}),g(Yt,Pt,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[Et]},process:function(t){var e\u003dthis.options,i\u003dt.pointers.length\u003d\u003d\u003de.pointers,n\u003dt.distance\u003ce.threshold,r\u003dt.deltaTime\u003ce.time;if(this.reset(),1\u0026t.eventType\u0026\u00260\u003d\u003d\u003dthis.count)return this.failTimeout();if(n\u0026\u0026r\u0026\u0026i){if(4!\u003dt.eventType)return this.failTimeout();var s\u003d!this.pTime||t.timeStamp-this.pTime\u003ce.interval,o\u003d!this.pCenter||j(this.pCenter,t.center)\u003ce.posThreshold;if(this.pTime\u003dt.timeStamp,this.pCenter\u003dt.center,o\u0026\u0026s?this.count+\u003d1:this.count\u003d1,this._input\u003dt,0\u003d\u003d\u003dthis.count%e.taps)return this.hasRequireFailures()?(this._timer\u003dl((function(){this.state\u003d8,this.tryEmit()}),e.interval,this),2):8}return bt},failTimeout:function(){return this._timer\u003dl((function(){this.state\u003dbt}),this.options.interval,this),bt},reset:function(){clearTimeout(this._timer)},emit:function(){8\u003d\u003dthis.state\u0026\u0026(this._input.tapCount\u003dthis.count,this.manager.emit(this.options.event,this._input))}}),Ft.VERSION\u003d\"2.0.7\",Ft.defaults\u003d{domEvents:!1,touchAction:Tt,enable:!0,inputTarget:null,inputClass:null,preset:[[Nt,{enable:!1}],[Mt,{enable:!1},[\"rotate\"]],[Xt,{direction:6}],[Rt,{direction:6},[\"swipe\"]],[Yt],[Yt,{event:\"doubletap\",taps:2},[\"tap\"]],[zt]],cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}};function Wt(t,e){var i;this.options\u003ds({},Ft.defaults,e||{}),this.options.inputTarget\u003dthis.options.inputTarget||t,this.handlers\u003d{},this.session\u003d{},this.recognizers\u003d[],this.oldCssProps\u003d{},this.element\u003dt,this.input\u003dnew((i\u003dthis).options.inputClass||(M?it:z?ct:R?pt:J))(i,k),this.touchAction\u003dnew St(this,this.options.touchAction),qt(this,!0),f(this.options.recognizers,(function(t){var e\u003dthis.add(new t[0](t[1]));t[2]\u0026\u0026e.recognizeWith(t[2]),t[3]\u0026\u0026e.requireFailure(t[3])}),this)}function qt(t,e){var i,n\u003dt.element;n.style\u0026\u0026(f(t.options.cssProps,(function(r,s){i\u003dx(n.style,s),e?(t.oldCssProps[i]\u003dn.style[i],n.style[i]\u003dr):n.style[i]\u003dt.oldCssProps[i]||\"\"})),e||(t.oldCssProps\u003d{}))}Wt.prototype\u003d{set:function(t){return s(this.options,t),t.touchAction\u0026\u0026this.touchAction.update(),t.inputTarget\u0026\u0026(this.input.destroy(),this.input.target\u003dt.inputTarget,this.input.init()),this},stop:function(t){this.session.stopped\u003dt?2:1},recognize:function(t){var e\u003dthis.session;if(!e.stopped){var i;this.touchAction.preventDefaults(t);var n\u003dthis.recognizers,r\u003de.curRecognizer;(!r||r\u0026\u00268\u0026r.state)\u0026\u0026(r\u003de.curRecognizer\u003dnull);for(var s\u003d0;s\u003cn.length;)i\u003dn[s],2\u003d\u003d\u003de.stopped||r\u0026\u0026i!\u003dr\u0026\u0026!i.canRecognizeWith(r)?i.reset():i.recognize(t),!r\u0026\u002614\u0026i.state\u0026\u0026(r\u003de.curRecognizer\u003di),s++}},get:function(t){if(t instanceof Pt)return t;for(var e\u003dthis.recognizers,i\u003d0;i\u003ce.length;i++)if(e[i].options.event\u003d\u003dt)return e[i];return null},add:function(t){if(p(t,\"add\",this))return this;var e\u003dthis.get(t.options.event);return e\u0026\u0026this.remove(e),this.recognizers.push(t),t.manager\u003dthis,this.touchAction.update(),t},remove:function(t){if(p(t,\"remove\",this))return this;if(t\u003dthis.get(t)){var e\u003dthis.recognizers,i\u003db(e,t);-1!\u003d\u003di\u0026\u0026(e.splice(i,1),this.touchAction.update())}return this},on:function(t,e){if(t!\u003d\u003dr\u0026\u0026e!\u003d\u003dr){var i\u003dthis.handlers;return f(S(t),(function(t){i[t]\u003di[t]||[],i[t].push(e)})),this}},off:function(t,e){if(t!\u003d\u003dr){var i\u003dthis.handlers;return f(S(t),(function(t){e?i[t]\u0026\u0026i[t].splice(b(i[t],e),1):delete i[t]})),this}},emit:function(t,e){this.options.domEvents\u0026\u0026function(t,e){var n\u003di.createEvent(\"Event\");n.initEvent(t,!0,!0),n.gesture\u003de,e.target.dispatchEvent(n)}(t,e);var n\u003dthis.handlers[t]\u0026\u0026this.handlers[t].slice();if(n\u0026\u0026n.length){e.type\u003dt,e.preventDefault\u003dfunction(){e.srcEvent.preventDefault()};for(var r\u003d0;r\u003cn.length;)n[r](e),r++}},destroy:function(){this.element\u0026\u0026qt(this,!1),this.handlers\u003d{},this.session\u003d{},this.input.destroy(),this.element\u003dnull}},s(Ft,{INPUT_START:1,INPUT_MOVE:2,INPUT_END:4,INPUT_CANCEL:8,STATE_POSSIBLE:1,STATE_BEGAN:2,STATE_CHANGED:4,STATE_ENDED:8,STATE_RECOGNIZED:8,STATE_CANCELLED:16,STATE_FAILED:bt,DIRECTION_NONE:1,DIRECTION_LEFT:2,DIRECTION_RIGHT:4,DIRECTION_UP:8,DIRECTION_DOWN:16,DIRECTION_HORIZONTAL:6,DIRECTION_VERTICAL:Y,DIRECTION_ALL:30,Manager:Wt,Input:q,TouchAction:St,TouchInput:ct,MouseInput:J,PointerEventInput:it,TouchMouseInput:pt,SingleTouchInput:ot,Recognizer:Pt,AttrRecognizer:Ot,Tap:Yt,Pan:Rt,Swipe:Xt,Pinch:Mt,Rotate:Nt,Press:zt,on:I,off:A,each:f,merge:m,extend:d,assign:s,inherit:g,bindFn:T,prefixed:x}),(void 0!\u003d\u003dt?t:\"undefined\"!\u003dtypeof self?self:{}).Hammer\u003dFt,\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define((function(){return Ft})):void 0!\u003d\u003de\u0026\u0026e.exports?e.exports\u003dFt:t.Hammer\u003dFt}(window,document)},\n      function _(e,s,t,i,r){i();const n\u003de(42),a\u003de(43);class l extends n.View{initialize(){super.initialize(),this.el\u003dthis._createElement()}remove(){a.remove(this.el),super.remove()}css_classes(){return[]}render(){}renderTo(e){e.appendChild(this.el),this.render()}_createElement(){return a.createElement(this.tagName,{class:this.css_classes()})}}t.DOMView\u003dl,l.__name__\u003d\"DOMView\",l.prototype.tagName\u003d\"div\"},\n      function _(o,b,t,r,e){r(),t.root\u003d\"bk-root\",t.toolbar_hidden\u003d\"bk-toolbar-hidden\",t.toolbar\u003d\"bk-toolbar\",t.button_bar\u003d\"bk-button-bar\",t.logo\u003d\"bk-logo\",t.above\u003d\"bk-above\",t.below\u003d\"bk-below\",t.left\u003d\"bk-left\",t.right\u003d\"bk-right\",t.toolbar_button\u003d\"bk-toolbar-button\",t.active\u003d\"bk-active\",t.default\u003d\u0027.bk-root .bk-toolbar-hidden{visibility:hidden;opacity:0;transition:visibility 0.3s linear, opacity 0.3s linear;}.bk-root .bk-toolbar,.bk-root .bk-button-bar{display:flex;display:-webkit-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;align-items:center;-webkit-align-items:center;user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;}.bk-root .bk-toolbar .bk-logo{flex-shrink:0;-webkit-flex-shrink:0;}.bk-root .bk-toolbar.bk-above,.bk-root .bk-toolbar.bk-below{flex-direction:row;-webkit-flex-direction:row;justify-content:flex-end;-webkit-justify-content:flex-end;}.bk-root .bk-toolbar.bk-above .bk-button-bar,.bk-root .bk-toolbar.bk-below .bk-button-bar{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;}.bk-root .bk-toolbar.bk-above .bk-logo,.bk-root .bk-toolbar.bk-below .bk-logo{order:1;-webkit-order:1;margin-left:5px;margin-right:0px;}.bk-root .bk-toolbar.bk-left,.bk-root .bk-toolbar.bk-right{flex-direction:column;-webkit-flex-direction:column;justify-content:flex-start;-webkit-justify-content:flex-start;}.bk-root .bk-toolbar.bk-left .bk-button-bar,.bk-root .bk-toolbar.bk-right .bk-button-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;}.bk-root .bk-toolbar.bk-left .bk-logo,.bk-root .bk-toolbar.bk-right .bk-logo{order:0;-webkit-order:0;margin-bottom:5px;margin-top:0px;}.bk-root .bk-toolbar-button{width:30px;height:30px;cursor:pointer;background-size:60% 60%;background-origin:border-box;background-color:transparent;background-repeat:no-repeat;background-position:center center;}.bk-root .bk-toolbar-button:hover{background-color:rgba(192, 192, 192, 0.15);}.bk-root .bk-toolbar-button:focus{outline:none;}.bk-root .bk-toolbar-button::-moz-focus-inner{border:0;}.bk-root .bk-toolbar.bk-above .bk-toolbar-button{border-bottom:2px solid transparent;}.bk-root .bk-toolbar.bk-above .bk-toolbar-button.bk-active{border-bottom-color:#26aae1;}.bk-root .bk-toolbar.bk-below .bk-toolbar-button{border-top:2px solid transparent;}.bk-root .bk-toolbar.bk-below .bk-toolbar-button.bk-active{border-top-color:#26aae1;}.bk-root .bk-toolbar.bk-right .bk-toolbar-button{border-left:2px solid transparent;}.bk-root .bk-toolbar.bk-right .bk-toolbar-button.bk-active{border-left-color:#26aae1;}.bk-root .bk-toolbar.bk-left .bk-toolbar-button{border-right:2px solid transparent;}.bk-root .bk-toolbar.bk-left .bk-toolbar-button.bk-active{border-right-color:#26aae1;}.bk-root .bk-button-bar + .bk-button-bar:before{content:\" \";display:inline-block;background-color:lightgray;}.bk-root .bk-toolbar.bk-above .bk-button-bar + .bk-button-bar:before,.bk-root .bk-toolbar.bk-below .bk-button-bar + .bk-button-bar:before{height:10px;width:1px;}.bk-root .bk-toolbar.bk-left .bk-button-bar + .bk-button-bar:before,.bk-root .bk-toolbar.bk-right .bk-button-bar + .bk-button-bar:before{height:1px;width:10px;}\u0027},\n      function _(A,g,o,C,l){C(),o.root\u003d\"bk-root\",o.tool_icon_copy_to_clipboard\u003d\"bk-tool-icon-copy-to-clipboard\",o.tool_icon_replace_mode\u003d\"bk-tool-icon-replace-mode\",o.tool_icon_append_mode\u003d\"bk-tool-icon-append-mode\",o.tool_icon_intersect_mode\u003d\"bk-tool-icon-intersect-mode\",o.tool_icon_subtract_mode\u003d\"bk-tool-icon-subtract-mode\",o.tool_icon_clear_selection\u003d\"bk-tool-icon-clear-selection\",o.tool_icon_box_select\u003d\"bk-tool-icon-box-select\",o.tool_icon_box_zoom\u003d\"bk-tool-icon-box-zoom\",o.tool_icon_zoom_in\u003d\"bk-tool-icon-zoom-in\",o.tool_icon_zoom_out\u003d\"bk-tool-icon-zoom-out\",o.tool_icon_help\u003d\"bk-tool-icon-help\",o.tool_icon_hover\u003d\"bk-tool-icon-hover\",o.tool_icon_crosshair\u003d\"bk-tool-icon-crosshair\",o.tool_icon_lasso_select\u003d\"bk-tool-icon-lasso-select\",o.tool_icon_pan\u003d\"bk-tool-icon-pan\",o.tool_icon_xpan\u003d\"bk-tool-icon-xpan\",o.tool_icon_ypan\u003d\"bk-tool-icon-ypan\",o.tool_icon_range\u003d\"bk-tool-icon-range\",o.tool_icon_polygon_select\u003d\"bk-tool-icon-polygon-select\",o.tool_icon_redo\u003d\"bk-tool-icon-redo\",o.tool_icon_reset\u003d\"bk-tool-icon-reset\",o.tool_icon_save\u003d\"bk-tool-icon-save\",o.tool_icon_tap_select\u003d\"bk-tool-icon-tap-select\",o.tool_icon_undo\u003d\"bk-tool-icon-undo\",o.tool_icon_wheel_pan\u003d\"bk-tool-icon-wheel-pan\",o.tool_icon_wheel_zoom\u003d\"bk-tool-icon-wheel-zoom\",o.tool_icon_box_edit\u003d\"bk-tool-icon-box-edit\",o.tool_icon_freehand_draw\u003d\"bk-tool-icon-freehand-draw\",o.tool_icon_poly_draw\u003d\"bk-tool-icon-poly-draw\",o.tool_icon_point_draw\u003d\"bk-tool-icon-point-draw\",o.tool_icon_poly_edit\u003d\"bk-tool-icon-poly-edit\",o.tool_icon_line_edit\u003d\"bk-tool-icon-line-edit\",o.default\u003d\u0027.bk-root .bk-tool-icon-copy-to-clipboard{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AUSDBoBvcHQeQAAAG9JREFUWMNjXLhsJcNAAiaGAQYwB/xHwh/Q+ITEkfHQCwEWND4jmeb8H/JpgBwfI6cNBhLSEkqaGXRpgFRAcZoZsmlg1AGjDhh1wKgDRh0w6gCaVcf/R2wIkNqw+D9s0wADvUNiyIYA47BJAwPuAAAj/Cjd0TCN6wAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-replace-mode{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AUFFxokK3gniQAAAHpJREFUWMNjXLhsJcNAAiaGAQajDhhwB7DgEP+PxmeksvjgDwFcLmYkUh2hkBj8IcBIZXsYh1w2/I8v3sgAOM0bLYhGc8GgrwuICgldfQO88pcvXvg/aOuCUQeM5oLRuoCFCJcTbOMh5XOiW0JDNhdQS3y0IBp1ABwAAF8KGrhC1Eg6AAAAAElFTkSuQmCC\");}.bk-root .bk-tool-icon-append-mode{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AUFFxkZWD04WwAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAoUlEQVRYw+1WQQ6AIAwrhO8Y/bIXEz9jIMSDr8ETCUEPQzA4pMeFLKNbu4l5WR0CDOMEALBGIzMuQIBEZQjPgP9JLjwTfBjY9sO9lZsFA9IafZng3BlIyVefgd8XQFZBAWe8jfNxwsDhir6rzoCiPiy1K+J8/FRQemv2XfAdFcQ9znU4Viqg9ta1qYJ+D1BnAIBrkgGVOrXNqUA9rbyZm/AEzFh4jEeY/soAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-intersect-mode{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AUFFxkrkOpp2wAAAPhJREFUWMPtV1EKwjAMTUavI3oawR/vtn5srJdREfzwMvHHQlcT2mpdMzFfWxiP5r2+JMN+mAiCOB72CABgR1cln4oOGocJnuMTSxWk8jMm7OggYkYXA9gPE3uyd8NXHONJ+eYMdE/NqCJmEZ5ZqlJJ4sUksKN7cYSaPoCZFWR1QI+Xm1fBACU63Cw22x0AAJxudwrffVwvZ+JmQdAHZkw0d4EpAMCw8k87pMdbnwtizQumJYv3nwV6XOA1qbUT/oQLUJgFRbsiNwFVucBIlyR3p0tdMp+XmFjfLKi1LatyAXtCRjPWBdL3Ke3VuACJKFfDr/xFN2fgAR/Go0qaLlmEAAAAAElFTkSuQmCC\");}.bk-root .bk-tool-icon-subtract-mode{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AUFFxgsF5XNOQAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAABFUlEQVRYw9VWUQqDMAxNpWfxQxD1MoP97G7zQ5mH2RTZYLtM9lWoMbXtxLXNX4OG9r28l4hrd0PQoqxqAACYpxH25C/nkwCHyCBwSPoS09k1T5Fo+4EiExcC4v584xGFmyIXHBLRISAVZyZufUPVa4rcrwmPDgr93ylo+2GliLRUYHK6th/o/6r7nfLpqaCsagEA8Hh9FmcNKeRmgeYDC+SCq0B6FFi8/BcV6BdR9cL3gCv3ijPKOacsn3rBEcjmaVxpfGcg4wHxzgJJnc6241Hn23DERFRAu1bNcWa3Q0uXi62XR6sCaWoSejbtdLYmU3kTEunNgj0bUbQqYG/IcMaqwPS9jftoVCAQ0ZVDJwf0zQdH4AsyW6fpQu4YegAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-clear-selection{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AUGEhcuan3d3wAAAoRJREFUWMPtlzFP3EAQhd+b3TNSzg0N5TWXLkJQUUaKhIQ4fgP/g5ArrriE/I3opEgRrZtIVJR0FJQ010SioUmEZHtnUpwN9gWHGA5BJCy58MraffvmfZ41v3z9hqe8BE98vQh4cgG+Ydzmnrng8efvQJNi/uN7dznx/B3ggtfhf4ehNdUttRzBDIm/2VTiiWCG1HK0nc+3UWtq8BQIiEEakEQOADBIA4QCQmBqoHBhFNR27ikQSmGdYCdTqCpEHMDZmEKRWUBEv1gBDg5SzRJnpopILWICgWuRYflLamuzxB2BmtYqSRIka5VWU8QduXO+1hRc5YZu5GAwmP2ZJzND0IBu5HCV2+NQcAhAVRsnC2IbPzPdSjzd6to6VtfWkXi6YLaVWr7xoAwkfpb8MnC3SH7rKSMBe4M0jA/OTicFIbtCGRIyNbURhcf3ErCd6YwA1m0HgAxhw1NGQnlXBHG4kylVlSJuH0RfIP2CkL2I/qS1gIAAQiBl1QwFggIHtyxgrxK5PgyfC0JWKoT0HLh8LwoietB4TYKaIl7yeNURxB05UtMxDOcVQlZIrlRKdK6m47gjR/fuBRQihyLArtNeJD50Izcx2Eczu7iFkIug4VM3cpOr3MKDekFED0fWUHv9Zq0kpLnridjhY3XDg7NTN0jDrhO3X7O9Wg7wwyANu4mnayNg3gmbu0tCNoUyBNGv2l4rB9EXynA7082FOxAQLhU6rQVO9T2AvWowFToNCJcPORGxIRcnpjZSKATSU9NxvOQnAPArDSaQoUKnNI4iufkGtD4P3EHIcWZhz4HLceSOyrR3Izf5memPAL2cX3yhAkonysZVaWLBkd9dw1Ivv2a/AYPkK+ty1U1DAAAAAElFTkSuQmCC\");}.bk-root .bk-tool-icon-box-select{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg0kduFrowAAAIdJREFUWMPtVtEKwCAI9KL//4e9DPZ3+wP3KgOjNZouFYI4C8q7s7DtB1lGIeMoRMRinCLXg/ML3EcFqpjjloOyZxRntxpwQ8HsgHYARKFAtSFrCg3TCdMFCE1BuuALEXJLjC4qENsFVXCESZw38/kWLOkC/K4PcOc/Hj03WkoDT3EaWW9egQul6CUbq90JTwAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-box-zoom{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg82t254aQAAAkBJREFUWMPN11+E1FEUB/DPTFn2qaeIpcSwr5NlUyJiKWVXWUqvlUh/iE3RY9mUekkPPURtLKNRrFJEeuphGfUUaVliiX1aVjGs6aG7+XX9ZnZ+d2fTl2vmnHvPPfeee/79Sk+may2/UQq/q7Qu+bAJoxjHIKqB/wlfUMcMVqI9bLZ+DGIKwzlzQ2GcxCx2xwvKOUKlaHTiX8bHNspjDONHkOmJBW5jIof/FvPh/06MZOb6cRc7cGn1AKUE5cdzlM/gAr5F/O24H3xkFRfxAbVygvK+cIsspjGWo1zgjeFpxL+BvnLw7laBA4xjIFJwrgu52DoVjKdY4HBEX8dSF3JLYe1fe6UcYCii3xWQjdfuSTnAtoheKCC7GNED5Zx4L4qt61jbTLHA94geKSC7P7ZeShQ0Inoi1IJuEOeORooFXkV0FZNdZs5qvFfKAeqYy7nZ6yg//HG0MBfffh71lFrQDCW2EvEP4mt4okZUDftz9rmGZkotmMxJRtlisy+MTniAWrty3AlXw0hFM2TD89l+oNsoOJXjbIs4EpqNtTCLXbiZ0g+M4mFObj8U3vsNjoZCVcmk60ZwthpepLZkB/AsivWfOJZxtpUQHfWib7KWDwzjeegBZJSdKFiE2qJTFFTwElsi/unQ/awXrU4WGMD7nOJxBY/1EO2iYConq93CHT1GOwucjdqnRyFz+VcHmMNefMY9nNkA3SWUOoXhQviSWQ4huLIRFlirFixnQq/XaKXUgg2xQNGv4V7x/RcW+AXPB3h7H1PaiQAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-zoom-in{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgsUBmL8iQAAA2JJREFUWMO9l12IlFUYx3//MzPrLpSjkm5oN4FFIWVEl66IQlFYwtLOzozsjHdGRSCRF0sfBEXRVV0FQuQiLm5CZNBFgRRaRLVFhbJ2EdiN5gbK7toObTPn6eYdPTvNzPvOBz5Xh/ec5/n/n89zXtEHmZqeSXSuXBz/3zfdKvBWJHQrwZuRcP0El+QkbQXeBX6WZEgm6TtJk5lM5o4Lc+cV6qpf4Ga20Tm338zeATItVK9Ker6yvPzp4NDQ3+XieGsCU9MzTYumGbhz7m4ze9/MHgvBgItACrgfGAj2jgAvAYs3wlEujjc13kii8YyZrXXOfWhmo9GnFUlvOOemarVapVqtkslksmb2KjARqL62ecuWN9NxbRInzrldAXhV0uFSIfdew7G/gNLU9MwS8CwSmE3Oz88fcXG5blfpqVRq0Ix8VIAAX0XgrVL7HDCHGcCaWrV60LUBN8Dae58aQIxEqcA592I9M610JL0cpG/U9TIHJNKY3RV5z0R+7Nd4HZ0P1g/2RMBuegLAsRMnb4vT8d5vqKfMzOgtAlADrkmqGywmiMBTwfr3dC9j1Xv/r6Tvg/5/5ejxE6cO7M9faVbQZrYNOFSPmqQvVo9FKexvi5uWX58943aM7DwAfBDY+FbSCxP5sdkGx55GeguzrUEXPaSo2pFkAbiSZQCAzZJOmdkjwd6SpB/M7KykQTPbA2wDhoIzRzcNDx9MJwGNIXdJ0mEzmwbujL7dbma7gd03A7lKfnTOvf74nl0r6bonTUbujRSUCrm2d4L3/kvn3JPe+8+BDW2i9o+kT7z3kxP5sYsA6W47oE64TsR7P9tQL4vA2mh9WdIscKxUyJ0M7aR7acOGzikD65EQLEjaa2ZXzMwDFeB6qZBbbLTRE4EGeSaozNOZgYFf8qP7lmIvs354n0qlHpB0T7B9Ogl4IgJJrmjv/SiQjbrkD+BMUkfSbYATPdckrTOzkciWAXOlQu5cYgLdPEIapud9wMOR9zVJH3ViKx333mtHMJvNuoWFhZ3A+ojMcja77njXBEKwJJfTcqUyCIQ34Mf7nnh0paMnXacFuGoC1mr3AtuDfLzd8Zuyl+rfuGn4HLAD+Az4qZQf+61TAj0Noj8vX6oC35SL43u7teG6rf5+iXppwW7/JUL5D03qaFRvvUe+AAAAAElFTkSuQmCC\");}.bk-root .bk-tool-icon-zoom-out{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgsHgty9VwAAA0FJREFUWMO9l09oXFUUxn/fmXlpItppi22k7UJBRSlVkCytSAuKUloIdjKT0El3FXVXdVFKRVAQV7qQohsNwdA0UFvBhYtqUVyIVlRaogtFQVq7qSTVjA3z3nHzBq/jvPmTN/Ss7rv3nvN99/y794kByMzcfE/7picn/jenmwWeRUI3E7wdCRskuCSTdDfwBvCtJEdySV9KOhpF0e0/LF5SqKtBgbv7ZjObcvfXgShD9Zqk5+orKx8Oj4z8NT05kU1gZm6+bdK0Azezu9z9hLs/HoIBvwAF4H5gKFh7B3gBWFY3460kWve4+3oze9fdx9OpVUmvmNlMHMf1RqNBFEUldz8OHAxUX9q6bduryut+Sfvc/Wz62ZD0fK1afjND9y3gGSRwv1GMojstTxUUCoVhdyopEYDzKXjWwZ4FFnEHWBc3Goet00m7lZlZYQixKw0FZnakGZksHUnHgvCN5/KARBH37enpOVg58H13HV0Kxg/kIuD/ngSA2ZMLt3bTSZJkUzNk7k4+D0AM/CGpaXCyBw/sC8Y/qZd2GpZiuL9YLN4Sx/HpoP5/c/exQ1OVq+1yyt13SLoArEsJnMjlgfOffvK3u58Kprab2QezJxfG2iTzUzI70wRPG9jbmpmb95SNB9mpzp7/j2yVdNbdx4K565K+cvfPJQ27+x5gBzAS7Hlvy+jo4WIvoC3kWpcvS3rR3eeAO9K529x9N7C7zX6AC2b28hN7Hl1Vt44niVq13LUjmtlYkiQfA5s6eO+GpDNJkhw9NFX5ueNt2ARodyF1IHIN2JiOl4H16fiKpK+B2Vq1vBAqFAf4IJkGNiIhWJK0192vunsC1IE/a9XycquNXARa5OnApeeioaHvKuP7r3dTGsiLqFAo7JR0T7B8rhfwXARa2us4UEqr5Ffgs151i/08oTNKdIO770ptObBYq5Yv5ibQq/sl3Qc8lJ4+lnSqH1vFfp9koZRKJVtaWnqkWXqSVkqlDe+vmUDWpZMlK/X6MBDegKf3P/nYaj8ErN9fqZBYEsf3Ag8G8Xit33BaniTcvGX0IvAw8BHwTa1y4Md+CeRqRL9fudwAvpienNi7Vhu21uwflOT+L+i1X2TJP57iUvUFtHWsAAAAAElFTkSuQmCC\");}.bk-root .bk-tool-icon-help{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABltpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+NTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzI8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjcyPC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+MzI8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzI8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpDb2xvclNwYWNlPjE8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPHhtcE1NOkluc3RhbmNlSUQ+eG1wLmlpZDpBODVDNDBDMzIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRvY3VtZW50SUQ+eG1wLmRpZDpBODVDNDBDNDIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwveG1wTU06RG9jdW1lbnRJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpBODVDNDBDMTIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDpBODVDNDBDMjIwQjMxMUU0ODREQUYzNzM5QTM2MjBCRTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPGRjOnN1YmplY3Q+CiAgICAgICAgICAgIDxyZGY6U2VxLz4KICAgICAgICAgPC9kYzpzdWJqZWN0PgogICAgICAgICA8eG1wOk1vZGlmeURhdGU+MjAxNjoxMToyOCAxMToxMTo4MjwveG1wOk1vZGlmeURhdGU+CiAgICAgICAgIDx4bXA6Q3JlYXRvclRvb2w+UGl4ZWxtYXRvciAzLjY8L3htcDpDcmVhdG9yVG9vbD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+Cphjt2AAAAT7SURBVFgJxRdbaFxFdGb2bhui227BWrsVKYgf2kJUbP9EUPuzEB803WTXJjH61Q/7Ya1+CMYKEVTsh4J/EpvY7BoabUiNiA8s1p+4KIhpoUUEselHqyS76TbZ3HuP58ydc3d2u4+IkQxczpz3mZkzZ86VYpXjvenpjZsLhUcliE4AuUuASAgptmt1EFdwPiclzIIUUwubNn17OJlcXo1p2UpodHRiux9xB1Eug1+slbzhFxGOKc851tu7/0oznYYBDA8Pt0U2tL8KQryIq2tvZqQhD0QJHRz3yqWhgYGBpXpydQMwqz6NCnurleCSADkJEfgKfOePqL80R/wV1ZaQyr1LenKfkPCkEPKeaj0xg7vxVL3duCmA0Vyuw/fl52hgBxsBED+h4Cv9z3R/zbRm8MTJTx7HQN7GQB6w5C4L4SX7M5lfLBpurjXMyvNIShiyi0l1pL8n9b7EDGPR8fHxzSsQ6XDB3618/xqo6Pk25V5MpVJllgHM1BO58RdQ612kOYZ+GXdij70TYQB05mpj+1kU5G2fB+l3PZtOf8NGx6ambnMXb3yAxg8wjSEG6OKKR9oicBQD+ZvpH2Wzj0lQpxCPG9qMv1x6hHNCsSAlHM7ZOa682vlI9tRDbvHGbD3nZAPpDoD/3JIrLpAs26UFkC3EMUA99hpfGtEBfJjNJnS2Gwnadnvl+Xw+iuc3DAJuNyIaSCHpilVldyDjjUxj3WDZIAhxhHHyRcdNuA7AAfUaXzVKODpzFiZ4/uLvh5G+m2no+C/pyIf7MqlEJB7bpqR6nXkEUfbeawuLaZsW2ISfNQ2vtaktQlGFQyIVGT0o2+2EC4iQNGwjBIN9qdQ5Qg4mk4X4rW3vCClLtowE2FOFUxKDfNmiZci3ovKKRFPh4FK9q4Zbdr+lKKJiA13TcHR2dmLBgdmQ0GAS2MZaEowY+XbAk09IvgtYZGp16SyvFhaHcIUh645t8T9DBCcnz5zZ4hZLu3DzK2QlL1QQa0Y+pHiJKPSuOGj3PmZTheM5w2TwqBxnvBZOTk7G5gvXJ5Aelms8wnJURL+olSWcfEhf6gDoUXPMq6ZlqbzWU2pE+3hi4s6F68tfIj9cBMlikr7Z0/P0b/X0yIcUXsDCF1WhtL4OROHaXk+xlkbV0Cu732Nmhc4peaWSg73pA8dq5RkvO37ldUTfXCKZv2q45MkhvG87WQEzpCCUSvV1d9GONBy3lMvgKSwrZig8gjAietWY0QriylO2jIo4yVbOSb7KB/qmI9BPKjHpSSXYauRyn92Nq9/Kcrj13x3s3v8D481glQ/0raiNYgX9njPSBOImbrHZePl+tfFmc9sH+Xaoh8NjOKSVdDMhjjYzQLy+dFceH5+IJQf9VYXX4tROg4ZFU8m31M3mfPEqUoJqCGJfvWpo2xnNfdrhC28n06SCeSzNZxlvBINGRXCtKS7EY1uV6V7HWAm38y1cXaXsMcOCvr9ySPj+af7A1U2HJXHzVNvUXVLIGyPf+jV0pf8GHoN+TLAyPkidTCi2RpPApmnR0Bd1zGRaB/B8Oj2HSw7LLbVR1MmskW8RdEWVXSJf3JbpAMgRtc4IZoxTh9qotQjCasm46M0YX9pV1VmbpvRH5OwwgdRtSg2vKaAz/1dNKVtb17Y8DCL4HVufHxMOYl1/zTgIgiYvBnFKfaNp3YjTdPz3n9Na8//X7/k/O1tdwopcZlcAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-hover{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4oVHp0SwAAAQJJREFUWMPtlsENgzAMRb8RQ5VJItFDOgaZAMaAA0iZpN3KPZSoEEHSQBCViI/G8pfNt/KAFFcPshPdoAGgZkYVVYjQAFCyFLN8tlAbXRwAxp61nc9XCkGERpZCxRDvBl0zoxp7K98GAACxxH29srNNmPsK2l7zHoHHXZDr+/9vwDfB3kgeSB5IHkgeOH0DmesJjSXi6pUvkYt5u9teVy6aWREDM0D0BRvmGRV5N6DsQkMzI64FidtI5t3AOKWaFhuioY8dlYf9TO1PREUh/9HVeAqzIThHgWZ6MuNmC1jiL1mK4pAzlKUojEmNsxcmL0J60tazWjLZFpClPbd9BMJfL95145YajN5RHQAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-crosshair{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADEUlEQVRYR81XXVIaQRCeHqug8CXmBNETaE4gniDwIgpVspxAbxC9ATkBkCpQ8gKeQDiB5AQxNyAvUlrldr7eHxyGXZi1rMJ5opbp7m++7un+htSGF204vsoMoNXrlzSpfWa1oxQfhAegCZGaEtPorHo8znIoJwCt6+td8uk7ApUQCIHTF4BNAWzImq8ap6cP68CsBdDp9i9ZqXM7ML79g/EnCWD+jgMKENKqWT+tXK0CkQqgNRjs0OxpQIqKhoMxaG6/6JeRnK7T6yO2UvVqhYSlLX+ryORfgKn9ORDFIy7ky41yGcwsr0QAQfDH5zucOswx819fs4egI9OFCcD8DjBF7VNbEX0JzdWEt3NHSSASAcCxBDqMgt/623kvyTgNgNjJIfTjk4D4FqaJR1715MjmYAmA5Bx3AwUXQL+t105KaTlcBSC26XRvhjEIoLiq1yqXpr8FAGG16/ug4IT27fxBWu7EiQuAiImJpEMKE6nYM30uAIDDttSUOPfJP7JzbjPhAiBIh9QE67vIvoOi9WJfCwDavf40ulpjbCqmUf+W753ezURuh7Dg1SqflwAEHU6pgfyBq9Y4qx0LG++2fnZ/eUzcstmdM2AWH+jfc+liWdBJfSENf8Lifi3GVwC9mybOfi5dzatWVrbbLIHNva8p5h/16gkaFiLGGxbufkoE6XguwePiXLF3XmMfCUCUAqtKXU7sumd1CowOuJEi3Pg1FBpjitIGhyvVSfvmjci6ZR+rFQfDiPVE2jFYeICQ+PoewwjC5h7CZld6DBdyu6nDSKgzOyIMhmhK5TTqXYbRorZYM46TmpKAAOrGWwSJJekSB1yqJNOzp1Gs7YJ0EDeySDIMtJbQHh6Kf/uFfNFZkolJICRmz0P8DKWZuIG2g1hpok+Mk0Qphs0h9lzMtWRoNvYLuVImUWrmPJDlBKeRBDfATGOpHkhw670QSHWGLLckmF1PTsMlYqMJpyUbiO0weiMMceqLVTcotnMCYAYJJbcuQrVgZFP0NOOJYpr62pf3AmrHfWUG4O7abefGAfwH7EXSMJafOlYAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-lasso-select{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgwlGP1qdAAABMBJREFUWMO9V1uIVVUY/r61z57ZMx4DnbzgkbQXL5iCJphlWdpIGY4jpFBkEiU9ZNaDRRcITcIwMwgxoQtU2IMXdAZfMjFvpERXYiSbysyBEXFmyuHMnLP32uvrwT2xnY5nxvHQ93Jg7fWv71/r//7L4a59TRgqJk+Z6v3a+sv0OI5nk5wu6VaSVZImAThHsgjgrKTvM5nMUWvtmf5n8HodCIKgOgzDhc65pSTrJQWDsSNpJX1ljHnDOfdT37oZLLHv+8OMMasKhcIJ59xHAJYMlhwAJGUAzJfUTHLFuFzOG5QDU6dNMyQfs9Yedc5tBpAD4IYYNQGoBrDtQnt7/b0LFrJsCHzfn2itfQfAnZLiazytA3AaQAuAiwDaEgeNpGkkswAWSBqRONB38b88z5uTKePt6iiKXkk8jq+iJC5LOmiMaTLGHLPWhmWeHr7vV0dRtATAapAzIVmSo51zyzIlbm2stesFPA6pKk0r6Ryg93y/ek8YFvPOOTg3cDSiKCoC2OP7/rEoirYm4rUkF12lAWNM1lr7lqQn0+QA8gI2jBg5cj6Aj8OwmB+KAKIoukhyp6SRJAUgl0ndPLDWPi9pJQCbuviXvu+/GIZhW1dnJ24UJFuTjCCA2ADA8sYGWmsXS3qmL94kDYAtkh4Nw7ANlQJ5U6INT1KrAYC9zQdykl7nFSj5fXp5Y8NWVBhy7mUAjqShMYdMXV2dJ2klyRwAJ8lIeuGWCRMP7N7frEqSG2OmAFhKshNAp5wrmO7u7jEAngPQm1S2z2pqapr+OPt7XEly0oxwzq2RdFmSD2AMgKKJouhhAL4kA+Cs53l7e3t7uytJHgRBreTWkXwkKVJnJD0B4GAGwIJE9R6AFufc6UqSZ7PZbD6ff5dkA4CQZEHSqwAOISmXtwGIE+F1SeqqIP8d+Xz+C0mLJYWSAODteXffczjdDQNJ0BWMCoLg5gqIbRTJNwHsljQhUb0luWPM2LE7Thw/9m/5NCT/TByxAOYWi8X6/gdWV1dnfN8fNRBxJpMZTXKdc+6IpFVJWAEgkvSJpA0X2tvtVTaSjgOYBCAEEADYSHK87/sfhmEYA9gShuEDkgzJHyWtB/B1irQ2juP7ADxkrX0wOUOpzmdpzEY590HJ7Ni1r2kSyZOSiv2+hSRjSTXp/QAukzySNJOJkmalyNIl10hqMcasdc61XDNcQRD8BnITgNp+36r6kfcNFMMlLQGwTNLMEuQGQBfJl2bdPru+HDkAZAqFQux53jZHEsC6aw0eg2gylNRBcqcx5v04ji999+03AwsWAOI4Lsy9a94WkisAnE5a5WCJYwCfA1g7LJudI2lTHMeXBm1faiQzxkyRtF3S5CTupeAB+KG2tnZFT0/P30NO2VKLzrmfAbwGMipjG5Oc0dPTc0Md05SZ5U4Q2FxChErtEYD7jTGNQ3UgM8Asv90Yc9I5LSKRlXSI5CxJa0jWSALJjKRnAewfkniT+vwf7N7fXHK9rq7O7+jo+BTA/NRrdBpjnnLOnUrvXd7YMPQXSBunneno6IhIHgYwW1JtkgmBpBkATlVMAwOk3nFJ+VSoqgCMr6gIy2FcLtdKspAedyQN/98caDt/3kpyabUmf8WvG/8A1vODTBVE/0MAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-pan{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4lKssI9gAAAOtJREFUWMPVll0KwyAMgNPgoc0JzDX2Mtgp3csKErSamGabIEUo/T6bHz0ezxdsjPJ5kvUDaROem7VJAp3gufkbtwtI+JYEOsHNEugIN0mgM1wtsVoF1MnyKtZHZBW4DVxoMh6jaAW0MTfnBAbALyUwCD6UwEB4VyJN4FXx4aqUAACgFLjzrsRP9AECAP4Cm88QtJeJrGivdeNdPpko+j1H7XzUB+6WYHmo4eDk4wj41XFMEfBZGXpK0F/eB+QhVcXslVo7i6eANjF5NYSojCN7wi05MJNgbfKiMaPZA75TBVKCrWWbnGrb3DPePZ9Bcbe/QecAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-xpan{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4X4hxZdgAAAMpJREFUWMPtlsEKwjAMhr/pwOOedINJe/PobWXCfAIvgo/nA4heOiilZQqN2yE5lpD/I38SWt3uD9aMHSuHAiiAAmwaYCqoM/0KMABtQYDW11wEaHyiEei28bWb8LGOkk5C4iEEgE11YBQWDyHGuAMD0CeS30IQPfACbC3o+Vd2bOIOWMCtoO1mC+ap3CfmoCokFs/SZd6E0ILjnzrhvFbyEJ2FIZzXyB6iZ3AkjITn8WOdSbbAoaD4NSW+tIZdQYBOPyQKoAAKkIsPv0se4A/1UC0AAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-ypan{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4anK0lywAAAMVJREFUWMPtlzEKwzAMRX/S7rlpIMXeOnaLaME36FLo8XqCdNFghGljyc4kgQi2Q/SUj0F/eL7eMMTKz6j9wNlYPGRrFcSoLH4XxQPvdQeYuPOlcLbw2dRTgqvoXEaolWM0aP4LYm0NkHYWzyFSSwlmzjw2sR6OvAXNwgEcwAEcwAEcwAEcoGYk20SiMCHlmVoCzACoojEqjHBmCeJOCOo1lgPA7Q8E8TvdjMmHuzsV3NFD4w+1t+Ai/gTx3qHuOFqdMQB8ASMwJX0IEHOeAAAAAElFTkSuQmCC\");}.bk-root .bk-tool-icon-range{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAAXNSR0IArs4c6QAAAAlwSFlzAAALEwAACxMBAJqcGAAABCJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDUuNC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIgogICAgICAgICAgICB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyI+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjU8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjcyPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjMyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6Q29sb3JTcGFjZT4xPC9leGlmOkNvbG9yU3BhY2U+CiAgICAgICAgIDxleGlmOlBpeGVsWURpbWVuc2lvbj4zMjwvZXhpZjpQaXhlbFlEaW1lbnNpb24+CiAgICAgICAgIDxkYzpzdWJqZWN0PgogICAgICAgICAgICA8cmRmOkJhZy8+CiAgICAgICAgIDwvZGM6c3ViamVjdD4KICAgICAgICAgPHhtcDpNb2RpZnlEYXRlPjIwMTgtMDQtMjhUMTQ6MDQ6NDk8L3htcDpNb2RpZnlEYXRlPgogICAgICAgICA8eG1wOkNyZWF0b3JUb29sPlBpeGVsbWF0b3IgMy43PC94bXA6Q3JlYXRvclRvb2w+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgrsrWBhAAAD60lEQVRYCcVWv2scRxSemZ097SHbSeWkcYwwclDhzr1Q5T6QE1LghP6BGNIYJGRWNlaZItiFK1mr+JAu4HQu0kjpU8sgF3ITAsaFg0hOvt2Zyfvmdsa7a610Unx44Zgf773vvfneezPHNzrbhn3CT3xC3wPXYOC8LDzqdi8YY/gwh4BeknS/2th6dr2kf94AOp3OFyWgMyziOPbMDxV9FTtJnl1ut795Xd0/YQ0/vtYQwMT1KXWCfr2IjOWwtNehwN4xL9ykTrm6Pzl58yLn3J+mKh9mXbT3uRjGEDph+O8/TjfP5dBp7Ha7AX7O3o5nZeD/0E/OGyXntDgzA0X6qmCnrVutVlrUWV9f/3xo+pwhGDhvEPHOjoxnZjJggXmMHzBQ7NGNp9vxk61fr0HR7e/u7pZzCGHlc7qwBYYTT7tJYSx1AQzppyFPft5apta9w7SKcn0b7P7+/jCsDQ5mbc0dCmIJGDN0ehdcjsmkm6A6KUeKFOTE11PLxrC7Ukqh3ylL2fT0NAP9q6ur6rRCJJYsbKB0JsbCKMuy+xREePDyxQPCz+Crlw062QcA5wBOOt1l6vIl2WiI9F1fN6Q+BBqit6hEC4Hk08GQJMn4myjSP7RavVxgdaVUh/3U6HCMsPr9pYnJKRziHtWQ+un58+hGs6nsjQSjpuTyKGN3CX+FBwHXSiEVgjP+O8X6N12kIePES+GzTKAkGbNp8yJsGUMVzz8jPKReiyAQRimy5/cjye5RpF8utFp/+nwmT7d/NMzcFkS7yjJNGDaPURQxIQThEQy0SyF4l5WJYYhBa816vZ6dU7A6CAhbZVow/pDe0O9hVOoCi13r4BgBAvJHqMSQL2vE/iH6IAXEwgrRVUmBoRRwnwJQT98xEeVeSUyB4dJ5nwJBKdCFFGRmUCcu7rwIYypCTblaChuNBhWODrman5ub+4v0rMNBt8z6Ezh7GksJQpCbm79cMQE7QBFm/X6f0rjWnv8WRYg/QdbUpwDAEBy8vPyA8rNGzg3a8MiElwiM7dAtRqNoNptjGPM1laVxP9umWEMGLOKhKUOJDtBwDmzsw9fC/CzHr9SGuCTi2LbbKvVtmqXpCjMihBFa79Wrt5fGx9PDzc3fmu32Lf8qFliwU9emKhBSp+kRKn/hu9k1COEDbFdt/BoKWOAkuEbdVYyoIXv8+I/QK9dMHEb1Knb7MHOv8LFFOsjzCVHWOD7Ltn+MXCRF4729vWMDK+p8rLkvwjLg4N4v741m5YuwCI9CvHp1Ha8gFdBoPnQAkGsYYGxxcfEI7QQlFCTGUXwjAz4tWF+EpymOWu7fglE7qsOvrYE6g4+9/x/vhRbMdLOCFgAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-polygon-select{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEjc1OfiVKAAAAe1JREFUWMPt1r9rU1EUB/DPK0XbqphFHETo4OCiFhwF0V1KHbRSROLqon+AUMVRRFBwEbRFMBiV+mMW/wIxi5OD1kERRVKRJHUwLvfBTZrU5OWBGXLgQu7Jfe98z/ec7z0vKa88b2q1BDtRHdAPBaylm1NzsxsOjPnPNt6WSWprbft+/c3I3zOAjhT1Y4+fvcjEQJIXnVECSa+AhqIHqlHH5lWCZoe+Gk4GRgDG86j9SAUdlDBSQaZhlOkuHyoVdJmsw98D1S5fM4NYM1LCpqM+Lwa240oLgmZzpVZvzKT75VLZcqksSZKWlQeAy/iORVwIvh31xvotvK7VG3Px4aWHj3Jl4C2uYSvq+Bn8v6LLbaVWb9zsBiKLCvbiNG7gLm7jAYqbPHMJMziZ9lsKoh8GtqCEVVzHftwJn+TFHp4/hg8BSCYVfMOZoPEv2NZGdy9WCGUr9toDR3E2/H4V6nwRe/BmgN65H1ZhvMuB3XiKIyFoGefwO6ysVkUlrNUNsyAK/jli533Q+Y8cJFvAeXyMS1CI/jiMr/gUtD2LQwMGr4R3p7bY3oQHQ5b38CT4D2AXXg6YcQXHpyYnlqKsi5iOAVSwL9zd7zJ09r+Cpwq72omFMazjT9Dnibym0dTkRDUKrrgwH7MwXVyYB38BstaGDfLUTsgAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-redo{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4itK+dVQAAAaFJREFUWMPt1L1rFFEUBfDfJDaBBSslIFjbaSFp1FJQFMVCHkzhKIqdUYOCoBgErVz8rCwiTDMwBCIKipDWyip/gxAIWAmBgBC0eYFh2Gx2l9lFcA5M8e59782Zc84dWrT435Hs1siLchqn43MS0zgW22vYxjesYjVLw3YjBPKinMUTBOwf8J5fKLGYpWFjJAJ5Uc7gIW6jM6Kim3iNZ1katgYmEL/6I+YasvY7Lg6iRpIX5VF8wuEe/XV8wGf8jN6LWTiAc7iEQ7ucPZ+lYW0vAtfwvlbfwCKW9gpXDOv1mJvZHiSO91MiyYsyiQSuxtpXXM7SsDmM5nlRdrCMMz3sOJWl4Xevc/vwBzdwAl+yNNwZxfRI+GxelK9ikHcwh8d4NNR/YFRES1ZwoTYdR7I0rNf3TzVNIGbmSvR/Bx08mIgCFSVu4l2ltIWD9WxNGR+W8KOynqnZ0rwCeVG+wa0hjrxtWoF5dAfc28V8Mib/n+Nev5dnabg/zgw87aNEN/bHOwVRiRe4Wym9zNKwMKkpgIWKEt24njxiJlq0aPFv4i9ZWXMSPPhE/QAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-reset{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4gWqH8eQAABLdJREFUWMPtlktsVGUUx3/nfvfOlLQaY2IiRRMQIRpI0PjamJhoVASDvNpCpYw1vJQYSVwZwIVQF6wwRHmkAUof9ElrI6VqDAXcID4TF0IiYQMkSlTokNCZ+b7jove2t+NMH7rQBWd3v+989/zP+Z8X3Jb/WGQySvUNTQBJESkNguAVYIWqzhaRhwBU9WcR+QXoymazn6jqzUQiMQSQzWZRVdal1vwzAI2tHQBPOuc2AbWTdOyQ53n7nHNfRwee51GzqoIQMCLDpr3x/tLQ0oZzrk5Vj0/BOEBt+KYuOlBVGlrahr0Wob27t3gEjnZ2AyQzmUwHsDgP6J/AYRE553neDwDOuUdU9QngNeCumK4TkRMhZUORcYC1qysLA6iuSQHIwkWLD6lqapQsuSmwTVV3h99I7EcAR462A2xR2Ilq6ehTaejvO1774kuLNALR33eclsaGsQDe3fYegHl43vyNwEeqGl1963mm2jl7YZRTQ82qlWP4HM6ZToC5ztkW4LHQoALru7s6Di5dvlIj/e6ujrEAWoZDn8hmMjXATMACGaAVuBjXTVVXFc/AxhaA+4zvn1DV+eHxVWPMAmvtb5GeMWZyZVhI2rt7qVy2pOh9U1snwIPW2vMi4oWJuBPYHkVAVScPoKmtkzVVK6cEMsyJraHhiCqJqJUwj/JRz7TW1iSSyR2rVyylqa0Ta+24Ic8vXaAEmDFc/l5Z2A/80OibuVyuz/f9ElUdHCmvw82t5HK5h6y1PYhsz2YyGw43t2KtBZHIGwB6+j4rCkBVUdV7gXrggnPuu8h4eP+xMeZS2D0rJYZ6AdAMzAt1b4nI26p6IFZOY8pugijcKSIHVLUK0LyST4vnrVfnWr3mjmP4QTATaERkXkypRFX3isjmuHdRJEK6Ckqquopp06bdKCkp2Sgi7XnGLcg7gzeutwNIiPYc8HixqIrIOlU9ONVIhHPEd851icgSVXUiskVV94gIqoonIt0i8gfQCfwae38e6BWRXuBZz5jZ8VbaOE4EIqlZVUEQBLlkMplS1QER2RwkEnsSyaREDUzyeNsvIhvCMqkH1kdIJ2o+k8iJB1LVVRfjZ6nqqlEAIbdVQGto8Lrv+/dbawcjAL7vc+6bs+zetetfLSHxniIFGofGGsU2oC7eOCbDfZ7nQawBOSAX74SF9oEPImOq+r7nmVmxb5raukZa8UReGmNmhbMkAwwBH467EYVZe49z7kdgenj8k7V2oTHm8kgdWcvrNdVFjR8cHkYzjDH9wLjDaEwEzpwa4MypgWvAjtjxfGNMj4jMiT+M+kFsZI/Q6Pv+HGNMT8w4wI7TAyevxXVPD5z8+zD64tRXAMHVK1eaVLUyVvuDqroV2BOnJF4ZIedviUidqt4Re9s+vbx8zZXLl7PR2+nl5Tz/zNOFp2FzxzGAklw22wUsLLaSKXwf8vhosZUM6PeDYEUum70VHfpBwKsVyyfeikOP6oBNwN1TrLbfgX3A1kKLzKeff8nLLzw38T5wZDgxn1LnNk5lLRfP26/OnR2hwfNYW2Atn9RCsrf+EECyrKysDFimqhXhyjY3VLkAXBKRDqA7nU6nS0tLhyIj6XSaN9bVclv+l/IXAmkwvZc+jNUAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-save{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4UexUIzAAAAIRJREFUWMNjXLhs5X+GAQRMDAMMWJDYjGhyf7CoIQf8x2H+f0KGM9M7BBio5FNcITo408CoA0YdQM1cwEhtB/ylgqMkCJmFLwrOQguj/xTg50hmkeyARAYGhlNUCIXjDAwM0eREwTUGBgbz0Ww46oBRB4w6YNQBow4YdcCIahP+H5EhAAAH2R8hH3Rg0QAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-tap-select{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA2hpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMC1jMDYxIDY0LjE0MDk0OSwgMjAxMC8xMi8wNy0xMDo1NzowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo3NzIwRUFGMDYyMjE2ODExOTdBNUNBNjVEQTY5OTRDRSIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDpCOTJBQzE0RDQ0RDUxMUU0QTE0ODk2NTE1M0M0MkZENCIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDpCOTJBQzE0QzQ0RDUxMUU0QTE0ODk2NTE1M0M0MkZENCIgeG1wOkNyZWF0b3JUb29sPSJBZG9iZSBQaG90b3Nob3AgQ1M1LjEgTWFjaW50b3NoIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTQ0QzIwMUM1RjIxNjgxMUE3QkFFMzhGRjc2NTI3MjgiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6NzcyMEVBRjA2MjIxNjgxMTk3QTVDQTY1REE2OTk0Q0UiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6eYZ88AAADLklEQVR42rSXf2TUYRzHv7tuGcfE6Vwb5zLSSjEj7Y9KWqfEmFZJP+yPMdKKmUrrn0iUfjhWlLFi6YfNrF+StBoTo39iYkTGco4xxxG59P7k/T2PT8/37nu3bx9ezvPj+zyf5/PreS78bGLS8SmrwE6yje3NHJsDBTALpknBz6JhH3NiYAB0gHqPOVv52wJ6QQ48BzdAttTioRJjdeA8mAHHS2xuk3p+M8M16ipVQE49Ds6CiFO9RLjGONf05QLx6wPQaBlbBlPgJVgkP0ETiIJ2sB/E1XfimjfgBOOlKDUqCGOcqBcQnw6BYW5YTo4wbvQhMmCfGRemC2rBiGXzWUb+kM/NRZ6CHWBM9ce5R61NgX6ayhSJ5EPlItlDRNkz4JbFHf06BkSzHjXxM+gDv1S/mPUo2AXWgt9UUHL/IVhS8yUV1/EbV3o4N+NaoE9Fu/i827K5pNYHnqAVJECShWmAaddpscYFFXwR7vnXBRGlnUN/L6kqKJlxnRUuDbaDBiL+vst5d4gpcpBrqk/2jIgCKVUolhntplzivHmwh4stGOPfwBWwl/2dpp8p7xjQZqFLiQJtauKkivYm+kzccpK57yXfOUe+P23JqAnVbhMFmlXntCWnxbT31am9ZJ4BJifsUmNTqt0cYhA5ypympPg7VkEKunPbVb8cIG+0kyHLJZNR7fUMooUKFHAPkfQo58VLK+RzwRDd4FdWG9mjpaAXzqkJa1R7kQttqEABWXMjOOxxVRfnhRm5URX1prk/0pQHwNcKlchZ+jdpC+hFdVqO0my9Hj5dkYgCn1Rfh/KdlNDHrJhPqlDih+IfBd6qwpOgEqYMsorJ2HtWxtagLJDn/W3KRfPOZhoeBJfZPgVeGKeKrkQBh5dLXl25Ny3pc4/1fkTdbvFqFQgbxWeYD0hXulhQ0pYiM1jG547fcbMQpVnHTZEn9W3ljsCzwHxCdVteNHIZvQa7/7cC7nV6zHIfyFP9EXjFa7YxKAVqPP4bxhhoLWW+z9JyCb6M/MREg59/RlmmXbmneIybB+YC/ay+yrffqEddDzwGvKxxDmzhc0tc80XVgblqFfgjwAAPubcGjAOl1wAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-undo{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4em8Dh0gAAAatJREFUWMPt1rFrFFEQBvDfGhACASshkL/ALpWVrSAKEQV5sIULWlgZNSgIFkGIVQ412gkBt1lYLERREFJqJRaW1oHAoZUQsDqwecWy7N3tbe6C4H2wxc682Zn3zTfvLXPM8b8j6RqYF+UCzsfnHBawGt3fMcAX7GEvS8NgKgXkRbmMxwg41TLsN0psZmnodyogL8pFPMIdLHUk7hA7eJKl4U/rAuKu3+HslFr/FZezNPSTFslX8QErDe4DvMVH/Iq9F7VwGpdwZUjsPtaSFjv/1vCBPjaxO0xcNbHejLpZrrlvJCMCT+JzA+2fcC1Lw+GE4l3CG1yIptfjCtiKoqtiJ0vD3aM0Py/K57iIMxgkQxat4EdN7e9xdRzlk+LEEPvDWvIDXJ928sYxjL36icWK+VaWhlezOIqbGFirJd/H7szugrwoX+D2BDEvszSsT5OBdfRaru/F9dPXQF6U27g/KnmWhgctxqyzBrZGMNGL/rHI0nDkKXiKexXTsywNGx0OnFbFNk3BRoWJXnw//j+ivCi32/S8CxPVNiWOAdUiJtXITIqYY45/Cn8B2D97FYW2H+IAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-wheel-pan{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgswOmEYWAAABddJREFUWMO9l09oXNcVxn/n3vc0fzRjj2RHyIZ6ERuy6CarxJtS0pQSCsXNpqGFWK5tTHAwyqIGN7VdEts1LV04BEoxdlJnUbfNogtDCYWQRZOSxtAUCoFiJY0pWJVUjeTKM9LMe+9+Xcyb8ZMychuofeHCffeee7/vnXvOuefYlV/+mv932//tb91z/Y2rvxmMHQ+4FcEfOIGN4A+UwDDwoQScc7vM7AIwB8yZ2QXn3K77Ab6OgJnVgeOSbkqaBiaACUnTkm4Cx3OZzwf+qzcRQup1zNZ9RwDe+0YI4YKZTUn6zCGSMLOfAF/03r+QZdnyfwO+ePEiI6N1nPMgMDMkETLRbd2mXG8gCbd9YiIKIUxLKoLfBN7I+80+CUlTIYTp7RMT0b3Af37p8kh5y9gZcy4Fzt+5szqSaxkzUR7dwtrKMmaGW242d0t6vrD/He/90865o865o977p4F3Ctp4frnZ3L0Z+OryUrVSrZ0z8ZxhHjhcq1XPrS43q/0flDlK9XpPA2ma7gMeyvfPx3H8TJZlH4YQWiGEVpZlH8Zx/Awwn8s8lKbpvmq1ahvB641SXNk6dhLskNA2MIBtwKHK1vGTW8bKMRbAMgyPqWeETxUM8VSSJAv52JmZA0iSZMHMThWwnipXKp8hsLLcSaIR92oU8xjSayCQXotiHotG3Ku3m+0EOQwPQCDggMf7BzQajSs5eAk4B5zLx4O1vD2eJMmAQKliscgASJMw21pansFs1swQ/DNLmUmTMNuXX+taXHTDaj5OW612R1JZ0nFJJ/J+XFJ5aWmpA6S5bHV8fHsPHFU6q3pJCjtFxtrKMuXRLUUXXxdrRLazFOtUolZlsGhmACsgnHPTwJnCnjP5HMBKLotzxsTE9rgDL0t6LoriKsDIaB31ZEK+JxQJRHFUBR2NqLw8OTkZR0OC0ntm9k1JWU7OA4vD/mZ+YfElsANmNEKi75vztzB5M8uAr+bx48me88g757PQ1U5zNg52YH7hX8l6f+4Fi3c3BqHNmkI4YQOV2MGCNu9qHPYCewfzbrC+XSGcWEcgTRKA3wFfyzdDz5d+D3x9CIcfA4eBbQS9LscskgfLnHNPAnslvS/pbZDHLLPADpx9N9fqpSIBH8cxWZY9m6bpb4Ev5fN/iKLo2TRNgdx/eo8Wk5O7Ts/N/SOSdMjHdj4kmgkIEJLJzPZKetvMTkIvFLsR25Ml2gfuF5M7vnA66sdooJYkCSGERe/9VAjhzRxoKk3Tvg3U8nulVqvx8cyNpER2umM+SdOkbc5B8JhpqBdIgTRR24h+lpKen731aRIN7thscH9Zlv0d2F8YD2TIX7F2uw3A7ZWV1a0TYz9ca8cJZHRbuRuaDfUCw9/qJHamPOKToAwHtHN6lMvlSkH2o7wDMDo6WuGuQbbn5+YAKNcb3J5fSvrhtTY+vsOPuD1IOyRhMOkj9kSx29HfXB5RUnS964NT2+3vbGbxG9auO2cDNuV6A8NTb5TitBuOpQkfYD2vwOxgmvBB2g3Hto5X42EJyVsFlztbKpXGNgqVSqUxSWcLU2+tdToa9hasLjfPYlwGa+bTi8Dl1dvNsyvNtQQL9MO2w+HM7BqwlAtPdrvdq9773WAVsIr3fne3270KTOYyS2Z2bbXdHhogKmPj7YWF+VOSXs/v/9KdO+0fVBrjbRkgB/KIDBnYu9f/7D+ZmfmRxPd6qwB8YmZXcq1MAQ/nJhTM+OnDe/a8+PGNG9lm19V/D1Qw7HXZlcRa69+U6w38l5/4ipxzf5X0CPBILjcGPJH34pVcc8692FxcXLlXRnTwwH7+9P4f8aWe3fY59LIqo1NMyQBCCHNmdgx4BegUWefjDvCKmR0LIcz9L8nokSNH+PRvH4HC3YQ098pSbevg24qlmZmNmtmjkg4D3+j/tZldkvQXSa3PW5ptlpL3ZaIN99OS9F7+IgKUgSyEkNyv2nHT7DZX0dr9rpjua2l2r4rogRAYVqZvnPsPqVnpEXjEaB4AAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-wheel-zoom{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEgskILvMJQAABTtJREFUWMPdl1+MXVUVxn/fPvf2zrSFmUKnoBCUdjRoVaIxEpO2JhilMYBCtBQS2hejpg1Uo2NUrIFAoyGmtiE+GHwQGtvQJhqDmKYRBv+URFsFDNCSptH60DJTO3dKnX/33rM/H7rvsDu9M20fDMaVnGTvtb69z7fWXmvtc/TEzqd4OyXwNsv/FwFJQVI/sA14SZKRLOlPkr5TrVYXHz70quYkEEK4TtI2YAgYkrQthHDdhV5uuw+43/ZrwCbgRttgY/tjtrc0m83X3/f+D6ydnJhYcB4BSZcBA7aP2d4ELAGW2N5k+xgwkDB0IH19CGGH7R8B1aQeAf4KvAw0ku4K2zu7uru3ApdPEyiKohd4TNKjtjt5h6RHgccSNrddbvuHtm9Jqoak7xVF8WFgdavV+pSk5cCObNmXgK++85prCj3z28HKqZMnH7D9YAY4BvwujT8BvCuL1INX9vVt+dfwcCvNb7f9q2RuSfrGvWu/sL2Nf3LX7pzvj4ENSGBPVarVd4fRkZFltjdmoMGiKO4IIWwIIWwoiuIOYDDzeOPoyMiyFLkum7WJCMDztrcrTTrIRuAQZ6NcK1utL4dWq/VZoC8BhqvV6l1lWb4YYxyLMY6VZflitVq9CxhOmL60hhCKeYiV7WMKIXw9jT1HpXw3c+bOAKzOjJubzebJrKQCQLPZPClpc7bP6rMYKtjXth2OMf7tIkr11Wz8oQDc1Fb09vY+kQw1YAuwJY2nbUluAnCWpKkaFl6IQIzxivaR2SYA89sJVK/Xp2x32R6w/a30DNjuqtfrU0ArYecDCEqgLqm94T0dEm9mBG7PxkdDlkBnkhebgIezNQ8nHcCZPL9ijE1Jf/bZZoPtzbavmqNZLbf9tSxq+yoduuJ+SZ+zXSZyBXCqU+d8fvC5yRUrV+0G2j3g2hDCLyXd/+Su3QdnvP/zCuH72LWsgf2k0oHlH2c2odlkxcpVEdgr6aDtjyb8x20/J+mA7T9I6rL9SWA5dne2/GdXLl58qNJh398An85yTMA+4DOz8Dgu6Zu2dwJXJ91ltm8Gbp7Fgb+EEB4aHhpq5CEtACqVyr3AC0AlPS8k3TSmQ2YPhhBuS/1/LpmS9JTtNTHGfwBU2uUALARotVqniqJYH2Pck85pfavVaufAwnQvnHc0McaDKVptebN94QAnJB0EdtjekydyZXqjs/0ZgLIs/w6sy8bnYGYJ63pgERKC05JutT1kOwITwL9tvzlzUQUYB+Zjs2DBgu6xsbGJZHstByZbezregcBXeCsEz1bnzXt5anLyzLq71zDLxTRdVgemdx0fv2e2w5thO5DbiqL4oKT3ZKpnpyYnz+SY2ZpTAPZmJfdIrVZbNBNUq9UW2X4kU+2dcf53Aj1pj2PA7y/6m1DS00A9za9uNBq7iqJYBuoGdRdFsazRaOzKSqye1rTbaa/tlbYrqXQP2X4FIA9/J1l39xrC0v7+w5IeB8XkwS1lWe6TGJAYKMty31tfO4qSHl/a3384I3CDpI+kzC4lnRfrue6GytEjR8oQwlY73gC0L4qlth/q0M1/LYWtR48cKQF6enrC6dOnVwGLEpnxnp7en4+O1i/tszzGOCTpPmB7ahb57QUwBWyXdF+McWg6MScmuoA8OX8xOlpvXGz422XYTsB/SnpA0h7bX5R0WzI9HUL4qe2XbI+dk3xl+V7gxoztD5jRI+YK/zkEEokx2/uB/RdzIfUtueqVN04cXwF8G3iHY3z9Urw/j8ClyhsnjrcS2Vv/J/8NLxT+/zqBTkcxU/cfEkyEAu3kmjAAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-box-edit{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEg4QfHjM1QAAAGRJREFUWMNjXLhsJcNAAiaGAQYsDAwM/+lsJ+OgCwGsLqMB+D8o08CoA0YdMOqAUQewDFQdMBoFIyoN/B/U7YFRB7DQIc7xyo9GwbBMA4xDqhxgISH1klXbDYk0QOseEeOgDgEAIS0JQleje6IAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-freehand-draw{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAADTElEQVRYCeWWTWwMYRjH/88721X1lZJIGxJxcEE4OOiBgzjXWh8TJKR76kWacOBGxdEJIdk4VChZI/phidRBHMRRIr7DSUiaSCRFRM3u88gz+o7Z6bBTdjmYZPf9eJ55fv/5zzvvDPC/H9QsA66Olo9Ga+/MdR+Ljm2/KQIULsz9FqItGdOfJKLhApLgVkiSCGODjWit7QpKWy+TNrFeXvzKVUT8NiTVaIgDcbiCFJ7GiT8WkARXAdYBK0Lbhi/CenArRNskuM7/tgNp4ArQ42dwjf3WY5gWTqC7O/NbNn2Xkfw/YwdSw/We14HP2IEZwX+y9cZ9SH0LmgFP7UCz4KkENBNeV0Cz4b8U8DfgKiDxMWwUXETqLvJpCQpXZfawbzS7t9v5pL19cHBwfja7YA0y/lyCM0+E5hv5+piZXwKYcF23as+37bTXsQVqgkL0p/34fHR7DcBtbetFsBmGDwMOJCggYG55yw7dMlk6DuC1Bdu2RsCU9TYWQq2IoGbsreZ5NzvEqfSBsIsIy8OTbcdgiRHeh4o8AFAEwDakbY2AaCCpH7V9aGhoUUUy3UyVbkPYFuYLDlUZH8XBpwxkK0Dbgxg5HcVi0ent7a0RULMIozaHBSMfF9b2SzdutFcFB2FkwMIJOG6qfteXOa1nHZ48tyefuwyfT9s6wtzZ3t7eZse2DR2I228TtHXzuWCx9g8MtK5cuHCZTH4tiHEOa4xFngvTyS8f35d6enomiCi4/foEXBkZaQuukChL4FYA2Whd7YcC4gEdW3CpdL3LtGAVCVYJywEyTpAuJKeMOKXZs/Bw947C50KhUFOG4cwz35cjWNBlHGeD53n3xsfHP/T19U1qciggar8Fa4I3PHobIotBWBtc2hSiChyZxVzM53Pv7FVH6Tp3uVy+g0r1ImD2GjIrQGYIxjnfuXTZGICS5k/bBwJoubwEFX4TLah9EXomJGMA3za+f9913Yl4TnzsDQ+vE6YTZOjHh4ngibstt1pzQwd04F0bPStEBpXqRoBeQ/AKghfBnOEKgS+Q7z91Xfdz/HGKg8Ox7z8iYD9z6wqTkZFgnvhMGP9VZ2or1XVkPM9z0mytSfVsHa1RLBZbLoyNzUnK+ydz3wC6I9x+lwbngwAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-poly-draw{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEjglo9eZgwAAAc5JREFUWMPt1zFrU1EUB/DfS4OmVTGDIChCP4BgnQXRxVHqIJUupp9AB8VBQcRBQUXIB9DWQoMRiXZzcnQSA34A7aAuHSJKkgo2LvfBrU3aJnlYkBy4vHcP557zP/9z3r33JdXa647N0kHSZd5Nn0rSxc8G3cXp85sMcnZZ8vge3osZ+l3vB8CWFA0iL14t79h210swAjACMAIwAjACkB90D/8/GchI9ve4nPwTBh5E9ws7OepzGWb9EddSn51Op9ZstadSg4VK1UKlKkmSDSMLALewiuNh/hVJq71Wxttmqz0dG88vPc+MgWP4grvYG3SLOBrZFFFrttqPe4HIDxh4GSei+98iSlusuYopXEAjBtEPA3tQwUpwluAbDm4TPJUz+BTW9l2Ce6G7L0X/Bw8D3T/7SKKIDzHg7QCcxjvcQAEtXAnrrg/RP0/DKPbqgcN4iVOR7gcO4dcQgRuoh7HSqwlP4n20m63jJu5n8MkWMYfP3UowhzdR8FU8w9iQwevBdyq3/27CMRzAE5yLuvsRLg+ZcR1nJ8YL81HWJUzGAPaFZwe/Q5MdyYDyNHgjzO90YyGHtVDncuiJchaHw8R4oREFV5qdiVmYLM3OgD9k5209/atmIAAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-point-draw{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gEMEiERGWPELgAAA4RJREFUWMO1lr1uG1cQhb9ztdRSP7AF1QxgwKlcuZSqRC9gWUUUINWqTh5AnaFOnVPEteQmRuhCURqWsSqqc9IolREXdEvQBElxtdw7KURSFEVKu4w8wAKLxdw9Z+bMnRmZGXfZ29//II8th4WwGVNyIoQLYB5vxA9Caq04iUd9A+7ZlsNC2I7TdSd2hZXMJKlnTqp9jtl/GBaqoyQ0noFKpUIzBicYYc+DEFpxkglc4oVJa5gvDn8v1xV2irG3FM4NSVwjUKlUaMcpJhCGmSEJQ6QGD8M5WnHCd8+f3QCXpPLx8WNwv0j6Bm9FMK7FJ3WBE+R/2t7c/GBmFvSBrzRTCsyTDjXrxUgEMtpxynJYmJoBJ4VAybwVARgvL7Oik0okCodnKpVKX7P0leiVMb0VvbJT+upznK4vh0GIeQwwQStJkHQD3MwsCALTJRG7Qrdrj5m/djgYaIa0hlkRdJk26XEgC9txurccBtVW3IudBImmZuACUP+ZlIDBt9FKcubYNTcAH/X0RYM1E7utJPlqe+uZzPxUcEkiSS4sTT95n15Mud0xWC0o2PAWOCdK3KYZlFxfM+tHOcnMzNr1es18ug+cgsVjP4yBU/Ppfrter1m/+l0+zYygML1xRVHU7TSb1cSzBzoBzszsH+AMdJJ49jrNZjWKou6wBnwOzcyndBpNbuueURR1Dw8Pq35p9cc5p/Dy9Dypt7jXrtdGwQECS9NPhr6Gq6txUzNigE6zydLK6lTw12/KT4FGFEUfJX2YJNONq5tVs4ODA7sD/DnwJ/BoADZuE3tHFs12dna6d4C/BI6AlbyzI8ii2TTw12/KK33gb2cdXsNZoAntbZC2SeO4c9592k/5eNQbiwvFd1kJuFGwLJr1wSPg/SwpvyFBHufOeXcFeAlE97U/uCxOY+P3b+Bn4B3Q+L8EdJfD4a+/AbC4UBzPxiPg3wlHZquB28Cn2IuR9x3gr3uV4DbwfvSDOvi4uFA8BDZmIRHkjHpS9Ht9iRqd8+5G3g05mAGcQbsdiX5QJ428G7Kygo8XYdb1/K4NWVmjzkNge2sz84bs+ELmpDDLtqWsNZBXgvmw8CTtpWVMT7x5YWBjLARnwZfKQNYN2U2LPvrh+5nBt7c2M2/It9bArCTKR8eZN+SJ13AScPnoODeRdqNenH+wul5w2gUr2WUjMFAt8bZ/0axX/wNnv4H8vTFb1QAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .bk-tool-icon-poly-edit{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gELFi46qJmxxAAABV9JREFUWMOdl19vFFUYxn9n9u9sCyylUIzWUoMQBAWCMdEEIt6xIRQSLIEKtvHe6AcA4yeQb7CAUNJy0daLeomJN8SEULAC2kBBapBKoLvbmdl/c14vdmY7u91tF95kknPOnHmf95znPc97Ro2OTeBbdjFDT3c32ZxVHUOE9kSMB0/m6ExuoJn1H+ur6Y+OTfD50SMN5168OgrAlyf7CfuD+z7+iDs3p8hkLUQ0iFQ/yFl5Nm/qonfHVva+s32Zw9GxCYILsZ08tpNfBhbs+1YN4OH9+7huGdECSBVfqUosbsllfmauBqiR+cCNwOr7AEo8pPHJnymXykhg5fUWjoQpl0vVvhZhbSzGoUOHqgBlt6B6uruj2Zy1E9jo0fhfeyL2x4Mnc8VErK0KUEOB64JSyptfG4RSytsJjUJVxw2lsFy3urL9nx1Qd25ObctkrVMi+jQivd7U2ZyV/3Hzpq7h3h1b/7p9Y0o8v8rwAbTWrGpSocN/FGDlbAI0Rl23PCBan0Ok158H9Ipwzi25A/Mzc9Gl/BYx/E4kYqC1NKRARNAaDCNUM27Z+Zr+ouXs0q4+LSLBHPYCFkTkC6uU39kwCdsS7WRKmaYUiAhdnZ3MPX2K4+QjQI+C94A93rMzm8ltMwyDeDzWjMZeEb2pYQDdW3vITU2jtUZ5QThOPgm8C7wP7J15OPsBsB3oWpGnVWisCeDS1VHj4vBI92+/3tgB7Ab2AruAXiDBK5oIOkhtkEYRNRuJhObrd8Dl9ewf4D5wG7hVLpen29vb5wzD+BrkbBMaL3d1dk5nsrnlFDTTFWAWmAZueWD3gCemGde2k2fw1Al1YXhEvjozoO49eczdqekrWmsc2zlrmvEKOGoW1GUjFLqSk2KpJrCLwyMCPAP+BO54QL8DM6YZX/ClsP9YnwKkXnIBP4jdIpJRpdJTCYdMwwi98KU0Hjc/dDILNyUcwTCWdOSMJ0TRmBktGRhLugu0xyLk7CIqVNm+0bGJptl1YXikD0grpY4Rjc4a8Fbgdab/6OGbAJeCUuyJnnHmZH9pbSyGuBXV8NUwlUpR1EWyixmSyTWEwqGlJ2Swbo2JXbAAfgDGgGQA9I1A9t1tlq0AxrXxn0ilUpw4fhQqYkH/sT41OTnJJwf2s6FjI5mshdYa7bqVR2uezr9MJmJt14FvGrh/O9D+e6UkM/xyCuCqEKCYnJyUTKFQrZDHjxzGshwWLQcRsOz8Hi85P23id0ug/XilAMLBmm4tPGdoaKjSH5+oAGrhwvBI9SjZTn4QSK9yenoD7dlrExPoJlXW8G8ytpNHxRKk02lGxsdRKFwXLNvx5yY94HQLGhGk4LFCYQSqaE0AwWM1eOoEbR0dKBSW7bC4mKuffxs4D/wCLKwQQPAUzIkslfp6cVomROWSolh0GjldAM4nzDi2k9/i5UAzC9aKfwNJ3zgJg9YEvN6+C7SHgKm69+sD7RfNnKTTaZRPQfAut4oFV//IS7gkcB34VlVo8kGzphlfB+DU+TfNGBpZtRastvrvARJmfMF28ge9sc2B9/PNnCilMIDwK6y8/ow/Ai4kvILTljAXvDvEvrqKSUs60KolzPjBxspavQD2tKqCAGF/Ba+xE/Wbilu54wZV8NEKF5fXzQHl/bh4hUsE0WAXSlDMYcQSrQXgCmsTseXHsJkNnjqBFGwKJaHsKlxtUHYVhbLCzr1kaOA4bcn1y1Swmb+iLpJKpVrfgdpfsiVVCYcgluwgnU7jEgJ4s5UkLFtWYyHyEg0/N1q1tmQH+YXnAMFr97Nmv3p+0QsHQRsF8qpBOE5+rb9Nkaj50tVQKjqh4OU3GNL/1/So3vuUgbAAAAAASUVORK5CYII\u003d\");}.bk-root .bk-tool-icon-line-edit{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAG/3pUWHRSYXcgcHJvZmlsZSB0eXBlIGV4aWYAAHjarVdpknSpDfzPKXwEJBDLccQW4Rv4+E4BtXR198znCdeLLijgQUoppWg3//Pv5f6FDwefXJRcUk3J4xNrrKzoFH8+pyUf9/f+8J3C7y/j7jnBGApow/mZ5l2vGJfXCzne8fZ13OV+9yl3ozvx2DDYyXbauCDvRoHPON3frl5Imt7MuX8hH0seiz9/xwxnDMFgYMczUPD7m89J4fwp/iK+OVRbiMf6gm8K4bv/3NN1Pzjw2fvwn+93PLzccTZ6mJU+/HTHSX723/bSOyLi58n8jmiqz/798+a/tUZZax7rNCKOakzXqIcpu4eFDe483kh4Mv4E/byfiqd49R2OHzC1Od/woxLD44siDVJaNHfbqQNi5MkZLXPnsMdKyFy5gwwCHXhocXahhhEK+OhgLmCYn1hon1vtPBxWcPIgrGTCZrR5fHvc58A/fb5stJaFOZEvT18BF1t8AYYxZ99YBUJoXZ/K9i+50/jPjxEbwKBsNxcYqL6dLZrQK7bC5jl4cVga/Ql5yuNuABfhbAEYCmDAJwpCiXxmzkTwYwE/CuQcIjcwQOKEB1ByDCGBnMJ2Nt7JtNey8BmGvIAICSlkUFODgqwYJSbkW0EIqZMgUUSSZClSRVNIMUlKKSfTKc0hxyw55ZxLrllLKLFISSWXUmrRyjVAxsTVVHMttVZVHKpRsZdivWKgcQstNmmp5VZabdoRPj126annXnrtOniEAQlwI408yqhDJ02E0oxTZpp5llmnLsTaCisuWWnlVVZd+mTtsvqVtU/m/po1uqzxJsrW5RdrGM75sQWZnIhxBsY4EhjPxgACmo0zXyhGNuaMM185uBCEgVKMnEHGGBiMk1gWPbl7Mfcrbw7e/V9545+Yc0bd/4M5Z9S9Mfedtx9YG7rlNmyCLAvhUyhkQPrNhvO5AJFnrZIR0plaLL5liQYdDi5TubaIokFDkmoFEB8CzxZVxemssDqthPhUblPgW1iQU5g6XwNwyVI7bUFRm035iNziMkgWvEso2SXnsJfveR0Y4SlVF8YWC1pVQhJiQa8JwDvlMNIxAfq3F7GDObHU1LlhzlZaWwNp6BvACxAgInGXlllMGZCpEnZHrGA6GM2718xuFcz7YdUQxzEEfjdWz4GlkcwaonT0pgA6mB25grPILtnSMhuCpsGhmMU6uJbixJs4lbKHqh+wos1jW2rchyGRCIvN9MXu+KAmMSfAlIKVvi/tybhCPJZCu2Ow9pLdyo427+X2ovMBmKNu8PA0zgl3fS0PB1DWWkVYB47bkyiJHhkFPzTzCjzn4Dq1mqoIWzCmcDGsHQmQAQdEHsixK1IXESd5rLU7THVJNV8obHS8sZeN0G5Jdt5pQTVKCCbgK1hItTS8o92iEZpuWJ/oC2r/0+zTmhvFXoaMVKRe27altDtid6OvG1hENVwBnC61KKugNoemOiPCCNb3GoHAZOFuDxxPsD+07nbSPcr/o1Zmc4jARhotrA5F5ZcjP9rPk90vR8A+k028A+8+5wKlHVID542sMzMCuXktkRzUCpE+xCBZywjNcJITx0II9x5948CekBl4XaC5OCX2nCyObdwN3HwQh5DWL/BBEkhDYHn/vpXNgZkVTZs8rj+HO8JFC6qvDVhgAEQSYCDyC86rMhG1WPzAVB9ZldDWG6EzDcFiqJBDvFS8mXDv3SK2LPoguVB2kwUx7UL5KqZWiEzocsbvSjNnaYDNtcYJuA5cDcsrvHd6yCxGjqvl9+wh3Qh8Kc9py8sNW8ncU8qwxdPj1qIGfrPqlXeoS4/JLa/LwRLTCtxuSoZUT+2Su6kXW3QNacYQbId6NUKVbROpviybFSPQQL9lhB2MamEnFyB9Y+hrG1+xBg+L0QG2TZdTdlcsBdq9oHdt9Bu5/IM9+Nfh1AwrSqlboTA6Bgq568A7UfbaMrZjoQZhQphofvNw93+bN+5X7FYKBgLmRid+tSdV6c02A4R0cHwKobmoMt5+6WI9XNISFIywpf6RMd5/a91vE78FzVHIFmxud4woyJx76OMTCa4yhgN3iJO2VfRPFMv9sYTxFzU+1eWeYS52pwOoSJldZY6koib4P1O427rbeUrNZfu44hWjz5ZSuu/vKPpimoXbLkfxWSPetvxDWG5jQSaZCxA3ad+p6rlttDhK+YwwK1LHVe0drDtorc5vnQ1247g58vewDtU7L3DRwrG4dhCUDRKKOtYr2dXHtpt+33d1WZmfkAHdl7Q8ENF+CNgB+nOw29n5F7SeNo/ckbu4laLTCdqJLHjmhJbKzmrCEX7zULrhefuHmu0V/1nbP1pnb6FaT7sOxn4pvWkfrYhYtCeJ4Xv+kOXrroIs1eHWXN1/AfzaY94ms5vaAAABg2lDQ1BJQ0MgcHJvZmlsZQAAeJx9kT1Iw0AcxV/TSkUqDnYQUchQnSyIijhqFYpQIdQKrTqYXPoFTRqSFBdHwbXg4Mdi1cHFWVcHV0EQ/ABxcnRSdJES/5cUWsR4cNyPd/ced+8AoVFhmhUaBzTdNtPJhJjNrYrhV4QwjAgGIMrMMuYkKQXf8XWPAF/v4jzL/9yfo1fNWwwIiMSzzDBt4g3i6U3b4LxPHGUlWSU+Jx4z6YLEj1xXPH7jXHRZ4JlRM5OeJ44Si8UOVjqYlUyNeIo4pmo65QtZj1XOW5y1So217slfGMnrK8tcpzmEJBaxBAkiFNRQRgU24rTqpFhI037Cxz/o+iVyKeQqg5FjAVVokF0/+B/87tYqTE54SZEE0PXiOB8jQHgXaNYd5/vYcZonQPAZuNLb/moDmPkkvd7WYkdA3zZwcd3WlD3gcgcYeDJkU3alIE2hUADez+ibckD/LdCz5vXW2sfpA5ChrlI3wMEhMFqk7HWfd3d39vbvmVZ/P2aecqIM1FFZAAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5AQdDBkQmV+argAABM5JREFUWMOtl9trHFUcxz9n9jYzm7Tb9JIWGtqUllLwVgRBQWl90S6lTaGmF6E2/4H+A4r+A0offdlWodL4kEZw9bG+iC9iKqLF0os0EBq02dtcdmdnfj7szGZ2M5vulv5g4JwzZ873+7ufUfMLi0RSa1TZNzVFrW511xBhzMxx79EyOwrbGSSzZ073zOcXFnlv5lTi3mvfzAPwwYVZ0tHiq6+/xu+/LlGtWYgEINL9oG657N41yfSRgxw9cHjDgfMLi8QVsR0X23E3gMXnkXQJ3L9zB99vI4EA0sVXqsPF93xW7y73ACVJBJwE1j8HUBIi3Sz/QNtrIzHN+yWdSdNue915IMKWXI4TJ050Adp+U+2bmkrV6tZeYAXwEJExMyf3Hi0rM5fvAvS4wPdBKRW6vZeEUiq0RIBCddddpymu0+rRbPvEzkPVmmWLBA1EdGAbYNctt7V712QwfeSgd/uXJQnPVVoEEAQBTxXpuEMELNtNNFW1WrsrQdBCRImQEeE/wBUh53v+7tW7y5n1+BZRIoJSioXvy3itdgclURSZTBrP87AdV57G1TT0d4GPgC+Bw8Ca7bifATsTgzBvjlH1qgNdICJM7tjB8soKw4jtuD+Gw3c229e1wF+P/uHPpT86rhBBRHActwAcAl4EjgIvAYcFJnlOoq5dv6EBU8AR4OUQ6AVgGjATwuC5YUdZ4A+z+1mBTUM/AKwqpZSIpPfu2VP7+/6DYEMMPE9N83lzq23ZWwxDd4GaQnmgUloqperSCpKC8HGCXz8G7NANU8CWUKPzsUDbyLPVyjYC39e0VMZx3Ccoha4b4lQqbUlnsBqNWCXpEMgKfA38DNSBcdPQr4zlMtTtFiqlulmQmJv9ks2idUZGZMjZmZMAfBUvxWHR0y5dmPV2FcbPG9ncFdPQS3nTuAJQLBZpBS1qjSqFwjipdGr9SWlsHTewm9ZmnngMKAaV9nBd+/bmdxSLRc6dnemm3+yZ06pcLvPGW2+yfWIn1ZpFEAQEvt95goCV1TXMXH4zAt4woaRF7RTAVylAUS6Xpdpsdjvk2VMnsSyHhuVEZTh+xgywBhwLfZIdKRfj7dWqPGFubq7T428ukslkaHttLNsZ9P3nwIfh+DhwS4EO9DA0zByBCE2n1fPxpQuznSCaX1js9nFp2pjbtqGhobQ0jUY9CbgALERah3IM+El1rNqTaqaph5W1uYGAFrfA5YvnyE9MoFBYtjMI/BXgQR/4pqVDZL3V9/cYrX+x7SnsXh/H5TLwW2iBQbVLNgn65CDsrSPOIJOXwmdQ4fRHrZilUqmXwNXrNzbbfxv4ArgFVBLeJ95oDEMHwHHcvvUcRqEwuBf0SSUEB9gfxsAgAkO1kcj/WvwKPaR8EhvPAUvRtdIMtR1FtBH37w8DEeChaehXw/xfAnzHcVOjEkhHrIe0Qlz7T8PuWLEd9+2w9KphgUUgQJ7JAgAPDT13NTrJyOYqIilrlEwQv/NPMTSByxfPIU37eCqtq2zWmPYDjbavaLYVdn2NuffPjqRJK2hRLBaHzoK+X7L1QE+nIFeYoFQqkTVMaTn2UOe1LWtwEJqGzqgRnS9M4Fb+3XBJGfSrFzW9dBw0icioJBzHzUXdMJM18APwWo6Kmy1O6X+V8UHDotBqogAAAABJRU5ErkJggg\u003d\u003d\");}\u0027},\n      function _(o,r,e,t,b){t(),e.root\u003d\"bk-root\",e.menu_icon\u003d\"bk-menu-icon\",e.context_menu\u003d\"bk-context-menu\",e.horizontal\u003d\"bk-horizontal\",e.vertical\u003d\"bk-vertical\",e.divider\u003d\"bk-divider\",e.active\u003d\"bk-active\",e.menu\u003d\"bk-menu\",e.above\u003d\"bk-above\",e.below\u003d\"bk-below\",e.caret\u003d\"bk-caret\",e.down\u003d\"bk-down\",e.up\u003d\"bk-up\",e.left\u003d\"bk-left\",e.right\u003d\"bk-right\",e.default\u003d\".bk-root .bk-menu-icon{width:28px;height:28px;background-size:60%;background-color:transparent;background-repeat:no-repeat;background-position:center center;}.bk-root .bk-context-menu{position:absolute;display:inline-flex;display:-webkit-inline-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;width:auto;height:auto;z-index:100;cursor:pointer;font-size:12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 6px 12px rgba(0, 0, 0, 0.175);}.bk-root .bk-context-menu.bk-horizontal{flex-direction:row;-webkit-flex-direction:row;}.bk-root .bk-context-menu.bk-vertical{flex-direction:column;-webkit-flex-direction:column;}.bk-root .bk-context-menu \u003e .bk-divider{cursor:default;overflow:hidden;background-color:#e5e5e5;}.bk-root .bk-context-menu.bk-horizontal \u003e .bk-divider{width:1px;margin:5px 0;}.bk-root .bk-context-menu.bk-vertical \u003e .bk-divider{height:1px;margin:0 5px;}.bk-root .bk-context-menu \u003e :not(.bk-divider){border:1px solid transparent;}.bk-root .bk-context-menu \u003e :not(.bk-divider).bk-active{border-color:#26aae1;}.bk-root .bk-context-menu \u003e :not(.bk-divider):hover{background-color:#f9f9f9;}.bk-root .bk-context-menu.bk-horizontal \u003e :not(.bk-divider):first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;}.bk-root .bk-context-menu.bk-horizontal \u003e :not(.bk-divider):last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;}.bk-root .bk-context-menu.bk-vertical \u003e :not(.bk-divider):first-child{border-top-left-radius:4px;border-top-right-radius:4px;}.bk-root .bk-context-menu.bk-vertical \u003e :not(.bk-divider):last-child{border-bottom-left-radius:4px;border-bottom-right-radius:4px;}.bk-root .bk-menu{position:absolute;left:0;width:100%;z-index:100;cursor:pointer;font-size:12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;box-shadow:0 6px 12px rgba(0, 0, 0, 0.175);}.bk-root .bk-menu.bk-above{bottom:100%;}.bk-root .bk-menu.bk-below{top:100%;}.bk-root .bk-menu \u003e .bk-divider{height:1px;margin:7.5px 0;overflow:hidden;background-color:#e5e5e5;}.bk-root .bk-menu \u003e :not(.bk-divider){padding:6px 12px;}.bk-root .bk-menu \u003e :not(.bk-divider):hover,.bk-root .bk-menu \u003e :not(.bk-divider).bk-active{background-color:#e6e6e6;}.bk-root .bk-caret{display:inline-block;vertical-align:middle;width:0;height:0;margin:0 5px;}.bk-root .bk-caret.bk-down{border-top:4px solid;}.bk-root .bk-caret.bk-up{border-bottom:4px solid;}.bk-root .bk-caret.bk-down,.bk-root .bk-caret.bk-up{border-right:4px solid transparent;border-left:4px solid transparent;}.bk-root .bk-caret.bk-left{border-right:4px solid;}.bk-root .bk-caret.bk-right{border-left:4px solid;}.bk-root .bk-caret.bk-left,.bk-root .bk-caret.bk-right{border-top:4px solid transparent;border-bottom:4px solid transparent;}\"},\n      function _(t,e,i,n,s){n();const o\u003dt(1),l\u003dt(43),h\u003dt(245),d\u003do.__importStar(t(243));class r{constructor(t,e\u003d{}){this.items\u003dt,this.options\u003de,this.el\u003dl.div(),this._open\u003d!1,this._item_click\u003dt\u003d\u003e{var e;null\u003d\u003d\u003d(e\u003dthis.items[t])||void 0\u003d\u003d\u003de||e.handler(),this.hide()},this._on_mousedown\u003dt\u003d\u003e{var e,i;const{target:n}\u003dt;n instanceof Node\u0026\u0026this.el.contains(n)||(null\u003d\u003d\u003d(i\u003d(e\u003dthis.options).prevent_hide)||void 0\u003d\u003d\u003di?void 0:i.call(e,t))||this.hide()},this._on_keydown\u003dt\u003d\u003e{t.keyCode\u003d\u003dl.Keys.Esc\u0026\u0026this.hide()},this._on_blur\u003d()\u003d\u003e{this.hide()},l.undisplay(this.el)}get is_open(){return this._open}get can_open(){return 0!\u003dthis.items.length}remove(){l.remove(this.el),this._unlisten()}_listen(){document.addEventListener(\"mousedown\",this._on_mousedown),document.addEventListener(\"keydown\",this._on_keydown),window.addEventListener(\"blur\",this._on_blur)}_unlisten(){document.removeEventListener(\"mousedown\",this._on_mousedown),document.removeEventListener(\"keydown\",this._on_keydown),window.removeEventListener(\"blur\",this._on_blur)}_position(t){const e\u003dthis.el.parentElement;if(null!\u003de){const i\u003de.getBoundingClientRect();this.el.style.left\u003dnull!\u003dt.left?t.left-i.left+\"px\":\"\",this.el.style.top\u003dnull!\u003dt.top?t.top-i.top+\"px\":\"\",this.el.style.right\u003dnull!\u003dt.right?i.right-t.right+\"px\":\"\",this.el.style.bottom\u003dnull!\u003dt.bottom?i.bottom-t.bottom+\"px\":\"\"}}render(){var t,e;l.empty(this.el,!0);const i\u003dnull!\u003d\u003d(t\u003dthis.options.orientation)\u0026\u0026void 0!\u003d\u003dt?t:\"vertical\";l.classes(this.el).add(\"bk-context-menu\",`bk-${i}`);for(const[t,i]of h.enumerate(this.items)){let n;if(null\u003d\u003dt)n\u003dl.div({class:d.divider});else{if(null!\u003dt.if\u0026\u0026!t.if())continue;{const i\u003dnull!\u003dt.icon?l.div({class:[\"bk-menu-icon\",t.icon]}):null;n\u003dl.div({class:(null\u003d\u003d\u003d(e\u003dt.active)||void 0\u003d\u003d\u003de?void 0:e.call(t))?\"bk-active\":null,title:t.tooltip},i,t.label)}}n.addEventListener(\"click\",(()\u003d\u003ethis._item_click(i))),this.el.appendChild(n)}}show(t){if(0!\u003dthis.items.length\u0026\u0026!this._open){if(this.render(),0\u003d\u003dthis.el.children.length)return;this._position(null!\u003dt?t:{left:0,top:0}),l.display(this.el),this._listen(),this._open\u003d!0}}hide(){this._open\u0026\u0026(this._open\u003d!1,this._unlisten(),l.undisplay(this.el))}toggle(t){this._open?this.hide():this.show(t)}}i.ContextMenu\u003dr,r.__name__\u003d\"ContextMenu\"},\n      function _(n,e,o,t,r){t();const f\u003dn(9);function*i(n,e){const o\u003dn.length;if(e\u003eo)return;const t\u003df.range(e);for(yield t.map((e\u003d\u003en[e]));;){let r;for(const n of f.reversed(f.range(e)))if(t[n]!\u003dn+o-e){r\u003dn;break}if(null\u003d\u003dr)return;t[r]+\u003d1;for(const n of f.range(r+1,e))t[n]\u003dt[n-1]+1;yield t.map((e\u003d\u003en[e]))}}o.enumerate\u003dfunction*(n){let e\u003d0;for(const o of n)yield[o,e++]},o.combinations\u003di,o.subsets\u003dfunction*(n){for(const e of f.range(n.length+1))yield*i(n,e)}},\n      function _(t,e,i,n,o){n();const s\u003dt(1),c\u003dt(238),l\u003ds.__importStar(t(241)),a\u003dt(43);class _ extends c.ButtonToolButtonView{render(){super.render(),a.classes(this.el).toggle(l.active,this.model.active)}_clicked(){const{active:t}\u003dthis.model;this.model.active\u003d!t}}i.OnOffButtonView\u003d_,_.__name__\u003d\"OnOffButtonView\"},\n      function _(t,e,o,n,s){n();const i\u003dt(238),c\u003dt(246);class l extends i.ButtonToolView{}o.InspectToolView\u003dl,l.__name__\u003d\"InspectToolView\";class _ extends i.ButtonTool{constructor(t){super(t),this.event_type\u003d\"move\"}static init_InspectTool(){this.prototype.button_view\u003dc.OnOffButtonView,this.define((({Boolean:t})\u003d\u003e({toggleable:[t,!0]}))),this.override({active:!0})}}o.InspectTool\u003d_,_.__name__\u003d\"InspectTool\",_.init_InspectTool()},\n      function _(t,o,e,i,s){i();const l\u003dt(1),n\u003dt(19),a\u003dt(43),r\u003dt(122),c\u003dt(240),_\u003dt(20),u\u003dt(9),h\u003dt(13),v\u003dt(8),p\u003dt(249),d\u003dt(99),b\u003dt(53),g\u003dt(236),f\u003dt(237),m\u003dt(251),w\u003dt(252),y\u003dt(247),T\u003dl.__importStar(t(241)),z\u003dT,B\u003dl.__importStar(t(253)),x\u003dB;class L extends b.Model{constructor(t){super(t)}static init_ToolbarViewModel(){this.define((({Boolean:t,Nullable:o})\u003d\u003e({_visible:[o(t),null],autohide:[t,!1]})))}get visible(){return!this.autohide||null!\u003dthis._visible\u0026\u0026this._visible}}e.ToolbarViewModel\u003dL,L.__name__\u003d\"ToolbarViewModel\",L.init_ToolbarViewModel();class M extends c.DOMView{constructor(){super(...arguments),this.layout\u003d{bbox:new d.BBox}}initialize(){super.initialize(),this._tool_button_views\u003dnew Map,this._toolbar_view_model\u003dnew L({autohide:this.model.autohide})}async lazy_initialize(){await super.lazy_initialize(),await this._build_tool_button_views()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.tools.change,(async()\u003d\u003e{await this._build_tool_button_views(),this.render()})),this.connect(this.model.properties.autohide.change,(()\u003d\u003e{this._toolbar_view_model.autohide\u003dthis.model.autohide,this._on_visible_change()})),this.connect(this._toolbar_view_model.properties._visible.change,(()\u003d\u003ethis._on_visible_change()))}styles(){return[...super.styles(),T.default,B.default]}remove(){r.remove_views(this._tool_button_views),super.remove()}async _build_tool_button_views(){const t\u003dnull!\u003dthis.model._proxied_tools?this.model._proxied_tools:this.model.tools;await r.build_views(this._tool_button_views,t,{parent:this},(t\u003d\u003et.button_view))}set_visibility(t){t!\u003dthis._toolbar_view_model._visible\u0026\u0026(this._toolbar_view_model._visible\u003dt)}_on_visible_change(){const t\u003dthis._toolbar_view_model.visible,o\u003dz.toolbar_hidden;this.el.classList.contains(o)\u0026\u0026t?this.el.classList.remove(o):t||this.el.classList.add(o)}render(){if(a.empty(this.el),this.el.classList.add(z.toolbar),this.el.classList.add(z[this.model.toolbar_location]),this._toolbar_view_model.autohide\u003dthis.model.autohide,this._on_visible_change(),null!\u003dthis.model.logo){const t\u003d\"grey\"\u003d\u003d\u003dthis.model.logo?x.grey:null,o\u003da.a({href:\"https://bokeh.org/\",target:\"_blank\",class:[x.logo,x.logo_small,t]});this.el.appendChild(o)}for(const[,t]of this._tool_button_views)t.render();const t\u003d[],o\u003dt\u003d\u003ethis._tool_button_views.get(t).el,{gestures:e}\u003dthis.model;for(const i of h.values(e))t.push(i.tools.map(o));t.push(this.model.actions.map(o)),t.push(this.model.inspectors.filter((t\u003d\u003et.toggleable)).map(o));for(const o of t)if(0!\u003d\u003do.length){const t\u003da.div({class:z.button_bar},o);this.el.appendChild(t)}}update_layout(){}update_position(){}after_layout(){this._has_finished\u003d!0}export(t,o\u003d!0){const e\u003d\"png\"\u003d\u003dt?\"canvas\":\"svg\",i\u003dnew p.CanvasLayer(e,o);return i.resize(0,0),i}}function V(){return{pan:{tools:[],active:null},scroll:{tools:[],active:null},pinch:{tools:[],active:null},tap:{tools:[],active:null},doubletap:{tools:[],active:null},press:{tools:[],active:null},pressup:{tools:[],active:null},rotate:{tools:[],active:null},move:{tools:[],active:null},multi:{tools:[],active:null}}}e.ToolbarBaseView\u003dM,M.__name__\u003d\"ToolbarBaseView\";class S extends b.Model{constructor(t){super(t)}static init_ToolbarBase(){this.prototype.default_view\u003dM,this.define((({Boolean:t,Array:o,Ref:e,Nullable:i})\u003d\u003e({tools:[o(e(g.Tool)),[]],logo:[i(_.Logo),\"normal\"],autohide:[t,!1]}))),this.internal((({Array:t,Struct:o,Ref:e,Nullable:i})\u003d\u003e{const s\u003do({tools:t(e(f.GestureTool)),active:i(e(g.Tool))});return{gestures:[o({pan:s,scroll:s,pinch:s,tap:s,doubletap:s,press:s,pressup:s,rotate:s,move:s,multi:s}),V],actions:[t(e(m.ActionTool)),[]],inspectors:[t(e(y.InspectTool)),[]],help:[t(e(w.HelpTool)),[]],toolbar_location:[_.Location,\"right\"]}}))}initialize(){super.initialize(),this._init_tools()}_init_tools(){const t\u003dfunction(t,o){if(t.length!\u003do.length)return!0;const e\u003dnew Set(o.map((t\u003d\u003et.id)));return u.some(t,(t\u003d\u003e!e.has(t.id)))},o\u003dthis.tools.filter((t\u003d\u003et instanceof y.InspectTool));t(this.inspectors,o)\u0026\u0026(this.inspectors\u003do);const e\u003dthis.tools.filter((t\u003d\u003et instanceof w.HelpTool));t(this.help,e)\u0026\u0026(this.help\u003de);const i\u003dthis.tools.filter((t\u003d\u003et instanceof m.ActionTool));t(this.actions,i)\u0026\u0026(this.actions\u003di);const s\u003d(t,o)\u003d\u003e{t in this.gestures||n.logger.warn(`Toolbar: unknown event type \u0027${t}\u0027 for tool: ${o}`)},l\u003d{pan:{tools:[],active:null},scroll:{tools:[],active:null},pinch:{tools:[],active:null},tap:{tools:[],active:null},doubletap:{tools:[],active:null},press:{tools:[],active:null},pressup:{tools:[],active:null},rotate:{tools:[],active:null},move:{tools:[],active:null},multi:{tools:[],active:null}};for(const t of this.tools)if(t instanceof f.GestureTool\u0026\u0026t.event_type)if(v.isString(t.event_type))l[t.event_type].tools.push(t),s(t.event_type,t);else{l.multi.tools.push(t);for(const o of t.event_type)s(o,t)}for(const o of Object.keys(l)){const e\u003dthis.gestures[o];t(e.tools,l[o].tools)\u0026\u0026(e.tools\u003dl[o].tools),e.active\u0026\u0026u.every(e.tools,(t\u003d\u003et.id!\u003de.active.id))\u0026\u0026(e.active\u003dnull)}}get horizontal(){return\"above\"\u003d\u003d\u003dthis.toolbar_location||\"below\"\u003d\u003d\u003dthis.toolbar_location}get vertical(){return\"left\"\u003d\u003d\u003dthis.toolbar_location||\"right\"\u003d\u003d\u003dthis.toolbar_location}_active_change(t){const{event_type:o}\u003dt;if(null\u003d\u003do)return;const e\u003dv.isString(o)?[o]:o;for(const o of e)if(t.active){const e\u003dthis.gestures[o].active;null!\u003de\u0026\u0026t!\u003de\u0026\u0026(n.logger.debug(`Toolbar: deactivating tool: ${e} for event type \u0027${o}\u0027`),e.active\u003d!1),this.gestures[o].active\u003dt,n.logger.debug(`Toolbar: activating tool: ${t} for event type \u0027${o}\u0027`)}else this.gestures[o].active\u003dnull}}e.ToolbarBase\u003dS,S.__name__\u003d\"ToolbarBase\",S.init_ToolbarBase()},\n      function _(e,t,i,n,s){n();const o\u003de(250),a\u003de(99),r\u003de(43);function h(e){!function(e){void 0\u003d\u003d\u003de.lineDash\u0026\u0026Object.defineProperty(e,\"lineDash\",{get:()\u003d\u003ee.getLineDash(),set:t\u003d\u003ee.setLineDash(t)})}(e),function(e){e.setImageSmoothingEnabled\u003dt\u003d\u003e{e.imageSmoothingEnabled\u003dt,e.mozImageSmoothingEnabled\u003dt,e.oImageSmoothingEnabled\u003dt,e.webkitImageSmoothingEnabled\u003dt,e.msImageSmoothingEnabled\u003dt},e.getImageSmoothingEnabled\u003d()\u003d\u003e{const t\u003de.imageSmoothingEnabled;return null\u003d\u003dt||t}}(e),function(e){e.ellipse||(e.ellipse\u003dfunction(t,i,n,s,o,a,r,h\u003d!1){const l\u003d.551784;e.translate(t,i),e.rotate(o);let c\u003dn,g\u003ds;h\u0026\u0026(c\u003d-n,g\u003d-s),e.moveTo(-c,0),e.bezierCurveTo(-c,g*l,-c*l,g,0,g),e.bezierCurveTo(c*l,g,c,g*l,c,0),e.bezierCurveTo(c,-g*l,c*l,-g,0,-g),e.bezierCurveTo(-c*l,-g,-c,-g*l,-c,0),e.rotate(-o),e.translate(-t,-i)})}(e)}const l\u003d{position:\"absolute\",top:\"0\",left:\"0\",width:\"100%\",height:\"100%\"};class c{constructor(e,t){switch(this.backend\u003de,this.hidpi\u003dt,this.pixel_ratio\u003d1,this.bbox\u003dnew a.BBox,e){case\"webgl\":case\"canvas\":{this._el\u003dthis._canvas\u003dr.canvas({style:l});const e\u003dthis.canvas.getContext(\"2d\");if(null\u003d\u003de)throw new Error(\"unable to obtain 2D rendering context\");this._ctx\u003de,t\u0026\u0026(this.pixel_ratio\u003ddevicePixelRatio);break}case\"svg\":{const e\u003dnew o.SVGRenderingContext2D;this._ctx\u003de,this._canvas\u003de.get_svg(),this._el\u003dr.div({style:l},this._canvas);break}}h(this._ctx)}get canvas(){return this._canvas}get ctx(){return this._ctx}get el(){return this._el}resize(e,t){this.bbox\u003dnew a.BBox({left:0,top:0,width:e,height:t});const i\u003dthis._ctx instanceof o.SVGRenderingContext2D?this._ctx:this.canvas;i.width\u003de*this.pixel_ratio,i.height\u003dt*this.pixel_ratio}prepare(){const{ctx:e,hidpi:t,pixel_ratio:i}\u003dthis;e.save(),t\u0026\u0026(e.scale(i,i),e.translate(.5,.5)),this.clear()}clear(){const{x:e,y:t,width:i,height:n}\u003dthis.bbox;this.ctx.clearRect(e,t,i,n)}finish(){this.ctx.restore()}to_blob(){const{_canvas:e}\u003dthis;if(e instanceof HTMLCanvasElement)return null!\u003de.msToBlob?Promise.resolve(e.msToBlob()):new Promise(((t,i)\u003d\u003e{e.toBlob((e\u003d\u003enull!\u003de?t(e):i()),\"image/png\")}));{const e\u003dthis._ctx.get_serialized_svg(!0),t\u003dnew Blob([e],{type:\"image/svg+xml\"});return Promise.resolve(t)}}}i.CanvasLayer\u003dc,c.__name__\u003d\"CanvasLayer\"},\n      function _(t,e,i,s,n){s();const r\u003dt(168),a\u003dt(8),o\u003dt(43);function l(t){if(!t)throw new Error(\"cannot create a random attribute name for an undefined object\");const e\u003d\"ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz\";let i\u003d\"\";do{i\u003d\"\";for(let t\u003d0;t\u003c12;t++)i+\u003de[Math.floor(Math.random()*e.length)]}while(t[i]);return i}function h(t){var e;const i\u003d{left:\"start\",right:\"end\",center:\"middle\",start:\"start\",end:\"end\"};return null!\u003d\u003d(e\u003di[t])\u0026\u0026void 0!\u003d\u003de?e:i.start}function c(t){var e;const i\u003d{alphabetic:\"alphabetic\",hanging:\"hanging\",top:\"text-before-edge\",bottom:\"text-after-edge\",middle:\"central\"};return null!\u003d\u003d(e\u003di[t])\u0026\u0026void 0!\u003d\u003de?e:i.alphabetic}const _\u003dfunction(t,e){const i\u003dnew Map,s\u003dt.split(\",\");e\u003dnull!\u003de?e:10;for(let t\u003d0;t\u003cs.length;t+\u003d2){const n\u003d\"\u0026\"+s[t+1]+\";\",r\u003dparseInt(s[t],e);i.set(n,\"\u0026#\"+r+\";\")}return i.set(\"\\\\xa0\",\"\u0026#160;\"),i}(\"50,nbsp,51,iexcl,52,cent,53,pound,54,curren,55,yen,56,brvbar,57,sect,58,uml,59,copy,5a,ordf,5b,laquo,5c,not,5d,shy,5e,reg,5f,macr,5g,deg,5h,plusmn,5i,sup2,5j,sup3,5k,acute,5l,micro,5m,para,5n,middot,5o,cedil,5p,sup1,5q,ordm,5r,raquo,5s,frac14,5t,frac12,5u,frac34,5v,iquest,60,Agrave,61,Aacute,62,Acirc,63,Atilde,64,Auml,65,Aring,66,AElig,67,Ccedil,68,Egrave,69,Eacute,6a,Ecirc,6b,Euml,6c,Igrave,6d,Iacute,6e,Icirc,6f,Iuml,6g,ETH,6h,Ntilde,6i,Ograve,6j,Oacute,6k,Ocirc,6l,Otilde,6m,Ouml,6n,times,6o,Oslash,6p,Ugrave,6q,Uacute,6r,Ucirc,6s,Uuml,6t,Yacute,6u,THORN,6v,szlig,70,agrave,71,aacute,72,acirc,73,atilde,74,auml,75,aring,76,aelig,77,ccedil,78,egrave,79,eacute,7a,ecirc,7b,euml,7c,igrave,7d,iacute,7e,icirc,7f,iuml,7g,eth,7h,ntilde,7i,ograve,7j,oacute,7k,ocirc,7l,otilde,7m,ouml,7n,divide,7o,oslash,7p,ugrave,7q,uacute,7r,ucirc,7s,uuml,7t,yacute,7u,thorn,7v,yuml,ci,fnof,sh,Alpha,si,Beta,sj,Gamma,sk,Delta,sl,Epsilon,sm,Zeta,sn,Eta,so,Theta,sp,Iota,sq,Kappa,sr,Lambda,ss,Mu,st,Nu,su,Xi,sv,Omicron,t0,Pi,t1,Rho,t3,Sigma,t4,Tau,t5,Upsilon,t6,Phi,t7,Chi,t8,Psi,t9,Omega,th,alpha,ti,beta,tj,gamma,tk,delta,tl,epsilon,tm,zeta,tn,eta,to,theta,tp,iota,tq,kappa,tr,lambda,ts,mu,tt,nu,tu,xi,tv,omicron,u0,pi,u1,rho,u2,sigmaf,u3,sigma,u4,tau,u5,upsilon,u6,phi,u7,chi,u8,psi,u9,omega,uh,thetasym,ui,upsih,um,piv,812,bull,816,hellip,81i,prime,81j,Prime,81u,oline,824,frasl,88o,weierp,88h,image,88s,real,892,trade,89l,alefsym,8cg,larr,8ch,uarr,8ci,rarr,8cj,darr,8ck,harr,8dl,crarr,8eg,lArr,8eh,uArr,8ei,rArr,8ej,dArr,8ek,hArr,8g0,forall,8g2,part,8g3,exist,8g5,empty,8g7,nabla,8g8,isin,8g9,notin,8gb,ni,8gf,prod,8gh,sum,8gi,minus,8gn,lowast,8gq,radic,8gt,prop,8gu,infin,8h0,ang,8h7,and,8h8,or,8h9,cap,8ha,cup,8hb,int,8hk,there4,8hs,sim,8i5,cong,8i8,asymp,8j0,ne,8j1,equiv,8j4,le,8j5,ge,8k2,sub,8k3,sup,8k4,nsub,8k6,sube,8k7,supe,8kl,oplus,8kn,otimes,8l5,perp,8m5,sdot,8o8,lceil,8o9,rceil,8oa,lfloor,8ob,rfloor,8p9,lang,8pa,rang,9ea,loz,9j0,spades,9j3,clubs,9j5,hearts,9j6,diams,ai,OElig,aj,oelig,b0,Scaron,b1,scaron,bo,Yuml,m6,circ,ms,tilde,802,ensp,803,emsp,809,thinsp,80c,zwnj,80d,zwj,80e,lrm,80f,rlm,80j,ndash,80k,mdash,80o,lsquo,80p,rsquo,80q,sbquo,80s,ldquo,80t,rdquo,80u,bdquo,810,dagger,811,Dagger,81g,permil,81p,lsaquo,81q,rsaquo,85c,euro\",32),u\u003d{strokeStyle:{svgAttr:\"stroke\",canvas:\"#000000\",svg:\"none\",apply:\"stroke\"},fillStyle:{svgAttr:\"fill\",canvas:\"#000000\",svg:null,apply:\"fill\"},lineCap:{svgAttr:\"stroke-linecap\",canvas:\"butt\",svg:\"butt\",apply:\"stroke\"},lineJoin:{svgAttr:\"stroke-linejoin\",canvas:\"miter\",svg:\"miter\",apply:\"stroke\"},miterLimit:{svgAttr:\"stroke-miterlimit\",canvas:10,svg:4,apply:\"stroke\"},lineWidth:{svgAttr:\"stroke-width\",canvas:1,svg:1,apply:\"stroke\"},globalAlpha:{svgAttr:\"opacity\",canvas:1,svg:1,apply:\"fill stroke\"},font:{canvas:\"10px sans-serif\"},shadowColor:{canvas:\"#000000\"},shadowOffsetX:{canvas:0},shadowOffsetY:{canvas:0},shadowBlur:{canvas:0},textAlign:{canvas:\"start\"},textBaseline:{canvas:\"alphabetic\"},lineDash:{svgAttr:\"stroke-dasharray\",canvas:[],svg:null,apply:\"stroke\"}};class p{constructor(t,e){this.__root\u003dt,this.__ctx\u003de}addColorStop(t,e){const i\u003dthis.__ctx.__createElement(\"stop\");if(i.setAttribute(\"offset\",`${t}`),-1!\u003d\u003de.indexOf(\"rgba\")){const t\u003d/rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/gi.exec(e),[,s,n,r,a]\u003dt;i.setAttribute(\"stop-color\",`rgb(${s},${n},${r})`),i.setAttribute(\"stop-opacity\",a)}else i.setAttribute(\"stop-color\",e);this.__root.appendChild(i)}}p.__name__\u003d\"CanvasGradient\";class d{constructor(t,e){this.__root\u003dt,this.__ctx\u003de}}d.__name__\u003d\"CanvasPattern\";class m{constructor(t){var e,i,s;this.__currentPosition\u003dnull,this._transform\u003dnew r.AffineTransform,this._clip_path\u003dnull,this.__document\u003dnull!\u003d\u003d(e\u003dnull\u003d\u003dt?void 0:t.document)\u0026\u0026void 0!\u003d\u003de?e:document,(null\u003d\u003dt?void 0:t.ctx)?this.__ctx\u003dt.ctx:(this.__canvas\u003dthis.__document.createElement(\"canvas\"),this.__ctx\u003dthis.__canvas.getContext(\"2d\")),this.__setDefaultStyles(),this.__stack\u003d[],this.__root\u003dthis.__document.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\"),this.__root.setAttribute(\"version\",\"1.1\"),this.__root.setAttribute(\"xmlns\",\"http://www.w3.org/2000/svg\"),this.__root.setAttributeNS(\"http://www.w3.org/2000/xmlns/\",\"xmlns:xlink\",\"http://www.w3.org/1999/xlink\"),this.width\u003dnull!\u003d\u003d(i\u003dnull\u003d\u003dt?void 0:t.width)\u0026\u0026void 0!\u003d\u003di?i:500,this.height\u003dnull!\u003d\u003d(s\u003dnull\u003d\u003dt?void 0:t.height)\u0026\u0026void 0!\u003d\u003ds?s:500,this.__ids\u003d{},this.__defs\u003dthis.__document.createElementNS(\"http://www.w3.org/2000/svg\",\"defs\"),this.__root.appendChild(this.__defs)}get canvas(){return this}get width(){return this._width}set width(t){this._width\u003dt,this.__root.setAttribute(\"width\",`${t}`)}get height(){return this._height}set height(t){this._height\u003dt,this.__root.setAttribute(\"height\",`${t}`)}__createElement(t,e\u003d{},i\u003d!1){const s\u003dthis.__document.createElementNS(\"http://www.w3.org/2000/svg\",t);i\u0026\u0026(s.setAttribute(\"fill\",\"none\"),s.setAttribute(\"stroke\",\"none\"));const n\u003dObject.keys(e);for(const t of n)s.setAttribute(t,`${e[t]}`);return s}__setDefaultStyles(){const t\u003dObject.keys(u),e\u003dthis;for(let i\u003d0;i\u003ct.length;i++){const s\u003dt[i];e[s]\u003du[s].canvas}}__applyStyleState(t){const e\u003dObject.keys(t),i\u003dthis;for(let s\u003d0;s\u003ce.length;s++){const n\u003de[s];i[n]\u003dt[n]}}__getStyleState(){const t\u003dObject.keys(u),e\u003d{};for(let i\u003d0;i\u003ct.length;i++){const s\u003dt[i];e[s]\u003dthis[s]}return e}__applyStyleToCurrentElement(t){var e;const i\u003dthis.__currentElement,s\u003dObject.keys(u);for(let n\u003d0;n\u003cs.length;n++){const r\u003du[s[n]],o\u003dthis[s[n]];if(null\u003d\u003d\u003d(e\u003dr.apply)||void 0\u003d\u003d\u003de?void 0:e.includes(t))if(o instanceof d){for(const t of[...o.__ctx.__defs.childNodes])if(t instanceof Element){const e\u003dt.getAttribute(\"id\");this.__ids[e]\u003de,this.__defs.appendChild(t)}const t\u003do.__root.getAttribute(\"id\");i.setAttribute(r.apply,`url(#${t})`)}else if(o instanceof p){const t\u003do.__root.getAttribute(\"id\");i.setAttribute(r.apply,`url(#${t})`)}else if(r.svg!\u003d\u003do)if(\"stroke\"!\u003d\u003dr.svgAttr\u0026\u0026\"fill\"!\u003d\u003dr.svgAttr||!a.isString(o)||-1\u003d\u003d\u003do.indexOf(\"rgba\")){let e\u003dr.svgAttr;if(\"globalAlpha\"\u003d\u003d\u003ds[n]\u0026\u0026(e\u003dt+\"-\"+r.svgAttr,i.getAttribute(e)))continue;i.setAttribute(e,`${o}`)}else{const t\u003d/rgba\\(\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d?\\.?\\d*)\\s*\\)/gi.exec(o),[,e,s,n,a]\u003dt;i.setAttribute(r.svgAttr,`rgb(${e},${s},${n})`);let l\u003dparseFloat(a);const h\u003dthis.globalAlpha;null!\u003dh\u0026\u0026(l*\u003dh),i.setAttribute(r.svgAttr+\"-opacity\",`${l}`)}}}get_serialized_svg(t\u003d!1){let e\u003d(new XMLSerializer).serializeToString(this.__root);if(/xmlns\u003d\"http:\\/\\/www\\.w3\\.org\\/2000\\/svg\".+xmlns\u003d\"http:\\/\\/www\\.w3\\.org\\/2000\\/svg/gi.test(e)\u0026\u0026(e\u003de.replace(\u0027xmlns\u003d\"http://www.w3.org/2000/svg\u0027,\u0027xmlns:xlink\u003d\"http://www.w3.org/1999/xlink\u0027)),t)for(const[t,i]of _){const s\u003dnew RegExp(t,\"gi\");s.test(e)\u0026\u0026(e\u003de.replace(s,i))}return e}get_svg(){return this.__root}save(){this.__stack.push({transform:this._transform,clip_path:this._clip_path,attributes:this.__getStyleState()}),this._transform\u003dthis._transform.clone()}restore(){if(0\u003d\u003dthis.__stack.length)return;const{transform:t,clip_path:e,attributes:i}\u003dthis.__stack.pop();this._transform\u003dt,this._clip_path\u003de,this.__applyStyleState(i)}_apply_transform(t,e\u003dthis._transform){e.is_identity||t.setAttribute(\"transform\",e.toString())}scale(t,e){isFinite(t)\u0026\u0026(null\u003d\u003de||isFinite(e))\u0026\u0026this._transform.scale(t,null!\u003de?e:t)}rotate(t){isFinite(t)\u0026\u0026this._transform.rotate(t)}translate(t,e){isFinite(t+e)\u0026\u0026this._transform.translate(t,e)}transform(t,e,i,s,n,r){isFinite(t+e+i+s+n+r)\u0026\u0026this._transform.transform(t,e,i,s,n,r)}beginPath(){this.__currentDefaultPath\u003d\"\",this.__currentPosition\u003dnull;const t\u003dthis.__createElement(\"path\",{},!0);this.__root.appendChild(t),this.__currentElement\u003dt}__applyCurrentDefaultPath(){const t\u003dthis.__currentElement;\"path\"\u003d\u003d\u003dt.nodeName?t.setAttribute(\"d\",this.__currentDefaultPath):console.error(\"Attempted to apply path command to node\",t.nodeName)}__addPathCommand(t,e,i){const s\u003dthis.__currentDefaultPath?\" \":\"\";this.__currentDefaultPath+\u003ds+i,this.__currentPosition\u003d{x:t,y:e}}get _hasCurrentDefaultPath(){return!!this.__currentDefaultPath}moveTo(t,e){if(!isFinite(t+e))return;\"path\"!\u003d\u003dthis.__currentElement.nodeName\u0026\u0026this.beginPath();const[i,s]\u003dthis._transform.apply(t,e);this.__addPathCommand(i,s,`M ${i} ${s}`)}closePath(){this._hasCurrentDefaultPath\u0026\u0026this.__addPathCommand(NaN,NaN,\"Z\")}lineTo(t,e){if(isFinite(t+e))if(this._hasCurrentDefaultPath){const[i,s]\u003dthis._transform.apply(t,e);this.__addPathCommand(i,s,`L ${i} ${s}`)}else this.moveTo(t,e)}bezierCurveTo(t,e,i,s,n,r){if(!isFinite(t+e+i+s+n+r))return;const[a,o]\u003dthis._transform.apply(n,r),[l,h]\u003dthis._transform.apply(t,e),[c,_]\u003dthis._transform.apply(i,s);this.__addPathCommand(a,o,`C ${l} ${h} ${c} ${_} ${a} ${o}`)}quadraticCurveTo(t,e,i,s){if(!isFinite(t+e+i+s))return;const[n,r]\u003dthis._transform.apply(i,s),[a,o]\u003dthis._transform.apply(t,e);this.__addPathCommand(n,r,`Q ${a} ${o} ${n} ${r}`)}arcTo(t,e,i,s,n){if(!isFinite(t+e+i+s+n))return;if(null\u003d\u003dthis.__currentPosition)return;const r\u003dthis.__currentPosition.x,a\u003dthis.__currentPosition.y;if(n\u003c0)throw new Error(\"IndexSizeError: The radius provided (\"+n+\") is negative.\");if(r\u003d\u003d\u003dt\u0026\u0026a\u003d\u003d\u003de||t\u003d\u003d\u003di\u0026\u0026e\u003d\u003d\u003ds||0\u003d\u003d\u003dn)return void this.lineTo(t,e);function o([t,e]){const i\u003dMath.sqrt(t**2+e**2);return[t/i,e/i]}const l\u003do([r-t,a-e]),h\u003do([i-t,s-e]);if(l[0]*h[1]\u003d\u003dl[1]*h[0])return void this.lineTo(t,e);const c\u003dl[0]*h[0]+l[1]*h[1],_\u003dMath.acos(Math.abs(c)),u\u003do([l[0]+h[0],l[1]+h[1]]),p\u003dn/Math.sin(_/2),d\u003dt+p*u[0],m\u003de+p*u[1],f\u003d[-l[1],l[0]],g\u003d[h[1],-h[0]];function v(t){const e\u003dt[0];return t[1]\u003e\u003d0?Math.acos(e):-Math.acos(e)}const w\u003dv(f),b\u003dv(g);this.lineTo(d+f[0]*n,m+f[1]*n),this.arc(d,m,n,w,b)}stroke(){\"path\"\u003d\u003d\u003dthis.__currentElement.nodeName\u0026\u0026this.__currentElement.setAttribute(\"paint-order\",\"fill\"),this.__applyCurrentDefaultPath(),this.__applyStyleToCurrentElement(\"stroke\"),null!\u003dthis._clip_path\u0026\u0026this.__currentElement.setAttribute(\"clip-path\",this._clip_path)}fill(t){if(\"path\"\u003d\u003d\u003dthis.__currentElement.nodeName\u0026\u0026this.__currentElement.setAttribute(\"paint-order\",\"stroke\"),\"none\"!\u003dthis.__currentElement.getAttribute(\"fill\")){const t\u003dthis.__currentElement.cloneNode(!0);this.__root.appendChild(t),this.__currentElement\u003dt}this.__applyCurrentDefaultPath(),this.__applyStyleToCurrentElement(\"fill\"),null!\u003dt\u0026\u0026this.__currentElement.setAttribute(\"fill-rule\",t),null!\u003dthis._clip_path\u0026\u0026this.__currentElement.setAttribute(\"clip-path\",this._clip_path)}rect(t,e,i,s){isFinite(t+e+i+s)\u0026\u0026(\"path\"!\u003d\u003dthis.__currentElement.nodeName\u0026\u0026this.beginPath(),this.moveTo(t,e),this.lineTo(t+i,e),this.lineTo(t+i,e+s),this.lineTo(t,e+s),this.lineTo(t,e))}fillRect(t,e,i,s){isFinite(t+e+i+s)\u0026\u0026(this.beginPath(),this.rect(t,e,i,s),this.fill())}strokeRect(t,e,i,s){isFinite(t+e+i+s)\u0026\u0026(this.beginPath(),this.rect(t,e,i,s),this.stroke())}__clearCanvas(){o.empty(this.__defs),o.empty(this.__root),this.__root.appendChild(this.__defs),this.__currentElement\u003dthis.__root}clearRect(t,e,i,s){if(!isFinite(t+e+i+s))return;if(0\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003de\u0026\u0026i\u003d\u003d\u003dthis.width\u0026\u0026s\u003d\u003d\u003dthis.height)return void this.__clearCanvas();const n\u003dthis.__createElement(\"rect\",{x:t,y:e,width:i,height:s,fill:\"#FFFFFF\"},!0);this._apply_transform(n),this.__root.appendChild(n)}createLinearGradient(t,e,i,s){if(!isFinite(t+e+i+s))throw new Error(\"The provided double value is non-finite\");const[n,r]\u003dthis._transform.apply(t,e),[a,o]\u003dthis._transform.apply(i,s),h\u003dthis.__createElement(\"linearGradient\",{id:l(this.__ids),x1:`${n}px`,x2:`${a}px`,y1:`${r}px`,y2:`${o}px`,gradientUnits:\"userSpaceOnUse\"},!1);return this.__defs.appendChild(h),new p(h,this)}createRadialGradient(t,e,i,s,n,r){if(!isFinite(t+e+i+s+n+r))throw new Error(\"The provided double value is non-finite\");const[a,o]\u003dthis._transform.apply(t,e),[h,c]\u003dthis._transform.apply(s,n),_\u003dthis.__createElement(\"radialGradient\",{id:l(this.__ids),cx:`${h}px`,cy:`${c}px`,r:`${r}px`,fx:`${a}px`,fy:`${o}px`,gradientUnits:\"userSpaceOnUse\"},!1);return this.__defs.appendChild(_),new p(_,this)}__parseFont(){var t,e,i,s,n;const r\u003d/^\\s*(?\u003d(?:(?:[-a-z]+\\s*){0,2}(italic|oblique))?)(?\u003d(?:(?:[-a-z]+\\s*){0,2}(small-caps))?)(?\u003d(?:(?:[-a-z]+\\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\\1|\\2|\\3)\\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx]))(?:\\s*\\/\\s*(normal|[.\\d]+(?:\\%|in|[cem]m|ex|p[ctx])))?\\s*([-,\\\u0027\\\"\\sa-z0-9]+?)\\s*$/i.exec(this.font),a\u003d{style:null!\u003d\u003d(t\u003dr[1])\u0026\u0026void 0!\u003d\u003dt?t:\"normal\",size:null!\u003d\u003d(e\u003dr[4])\u0026\u0026void 0!\u003d\u003de?e:\"10px\",family:null!\u003d\u003d(i\u003dr[6])\u0026\u0026void 0!\u003d\u003di?i:\"sans-serif\",weight:null!\u003d\u003d(s\u003dr[3])\u0026\u0026void 0!\u003d\u003ds?s:\"normal\",decoration:null!\u003d\u003d(n\u003dr[2])\u0026\u0026void 0!\u003d\u003dn?n:\"normal\"};return\"underline\"\u003d\u003d\u003dthis.__fontUnderline\u0026\u0026(a.decoration\u003d\"underline\"),null!\u003dthis.__fontHref\u0026\u0026(a.href\u003dthis.__fontHref),a}__wrapTextLink(t,e){if(t.href){const i\u003dthis.__createElement(\"a\");return i.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",t.href),i.appendChild(e),i}return e}__applyText(t,e,i,s){const n\u003dthis.__parseFont(),r\u003dthis.__createElement(\"text\",{\"font-family\":n.family,\"font-size\":n.size,\"font-style\":n.style,\"font-weight\":n.weight,\"text-decoration\":n.decoration,x:e,y:i,\"text-anchor\":h(this.textAlign),\"dominant-baseline\":c(this.textBaseline)},!0);r.appendChild(this.__document.createTextNode(t)),this._apply_transform(r),this.__currentElement\u003dr,this.__applyStyleToCurrentElement(s),this.__root.appendChild(this.__wrapTextLink(n,r))}fillText(t,e,i){null!\u003dt\u0026\u0026isFinite(e+i)\u0026\u0026this.__applyText(t,e,i,\"fill\")}strokeText(t,e,i){null!\u003dt\u0026\u0026isFinite(e+i)\u0026\u0026this.__applyText(t,e,i,\"stroke\")}measureText(t){return this.__ctx.font\u003dthis.font,this.__ctx.measureText(t)}arc(t,e,i,s,n,r\u003d!1){if(!isFinite(t+e+i+s+n))return;if(s\u003d\u003d\u003dn)return;(s%\u003d2*Math.PI)\u003d\u003d\u003d(n%\u003d2*Math.PI)\u0026\u0026(n\u003d(n+2*Math.PI-.001*(r?-1:1))%(2*Math.PI));const a\u003dt+i*Math.cos(n),o\u003de+i*Math.sin(n),l\u003dt+i*Math.cos(s),h\u003de+i*Math.sin(s),c\u003dr?0:1;let _\u003d0,u\u003dn-s;u\u003c0\u0026\u0026(u+\u003d2*Math.PI),_\u003dr?u\u003eMath.PI?0:1:u\u003eMath.PI?1:0,this.lineTo(l,h);const p\u003di,d\u003di,[m,f]\u003dthis._transform.apply(a,o);this.__addPathCommand(m,f,`A ${p} ${d} 0 ${_} ${c} ${m} ${f}`)}clip(){const t\u003dthis.__createElement(\"clipPath\"),e\u003dl(this.__ids);this.__applyCurrentDefaultPath(),t.setAttribute(\"id\",e),t.appendChild(this.__currentElement),this.__defs.appendChild(t),this._clip_path\u003d`url(#${e})`}drawImage(t,...e){let i,s,n,r,a,o,l,h;if(2\u003d\u003de.length){if([i,s]\u003de,!isFinite(i+s))return;a\u003d0,o\u003d0,l\u003dt.width,h\u003dt.height,n\u003dl,r\u003dh}else if(4\u003d\u003de.length){if([i,s,n,r]\u003de,!isFinite(i+s+n+r))return;a\u003d0,o\u003d0,l\u003dt.width,h\u003dt.height}else{if(8!\u003d\u003de.length)throw new Error(`Inavlid number of arguments passed to drawImage: ${arguments.length}`);if([a,o,l,h,i,s,n,r]\u003de,!isFinite(a+o+l+h+i+s+n+r))return}const c\u003dthis.__root,_\u003dthis._transform.clone().translate(i,s);if(t instanceof m||t instanceof SVGSVGElement){const e\u003d(t instanceof SVGSVGElement?t:t.get_svg()).cloneNode(!0);let i;_.is_identity?i\u003dc:(i\u003dthis.__createElement(\"g\"),this._apply_transform(i,_),c.appendChild(i));for(const t of[...e.childNodes])if(t instanceof SVGDefsElement){for(const e of[...t.childNodes])if(e instanceof Element){const t\u003de.getAttribute(\"id\");this.__ids[t]\u003dt,this.__defs.appendChild(e)}}else i.appendChild(t)}else if(t instanceof HTMLImageElement||t instanceof SVGImageElement){const e\u003dthis.__createElement(\"image\");if(e.setAttribute(\"width\",`${n}`),e.setAttribute(\"height\",`${r}`),e.setAttribute(\"preserveAspectRatio\",\"none\"),a||o||l!\u003d\u003dt.width||h!\u003d\u003dt.height){const e\u003dthis.__document.createElement(\"canvas\");e.width\u003dn,e.height\u003dr;e.getContext(\"2d\").drawImage(t,a,o,l,h,0,0,n,r),t\u003de}this._apply_transform(e,_);const i\u003dt instanceof HTMLCanvasElement?t.toDataURL():t.getAttribute(\"src\");e.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",i),c.appendChild(e)}else if(t instanceof HTMLCanvasElement){const e\u003dthis.__createElement(\"image\");e.setAttribute(\"width\",`${n}`),e.setAttribute(\"height\",`${r}`),e.setAttribute(\"preserveAspectRatio\",\"none\");const i\u003dthis.__document.createElement(\"canvas\");i.width\u003dn,i.height\u003dr;const s\u003di.getContext(\"2d\");s.imageSmoothingEnabled\u003d!1,s.drawImage(t,a,o,l,h,0,0,n,r),t\u003di,this._apply_transform(e,_),e.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",t.toDataURL()),c.appendChild(e)}}createPattern(t,e){const i\u003dthis.__document.createElementNS(\"http://www.w3.org/2000/svg\",\"pattern\"),s\u003dl(this.__ids);if(i.setAttribute(\"id\",s),i.setAttribute(\"width\",`${this._to_number(t.width)}`),i.setAttribute(\"height\",`${this._to_number(t.height)}`),i.setAttribute(\"patternUnits\",\"userSpaceOnUse\"),t instanceof HTMLCanvasElement||t instanceof HTMLImageElement||t instanceof SVGImageElement){const e\u003dthis.__document.createElementNS(\"http://www.w3.org/2000/svg\",\"image\"),s\u003dt instanceof HTMLCanvasElement?t.toDataURL():t.getAttribute(\"src\");e.setAttributeNS(\"http://www.w3.org/1999/xlink\",\"xlink:href\",s),i.appendChild(e),this.__defs.appendChild(i)}else if(t instanceof m){for(const e of[...t.__root.childNodes])e instanceof SVGDefsElement||i.appendChild(e);this.__defs.appendChild(i)}else{if(!(t instanceof SVGSVGElement))throw new Error(\"unsupported\");for(const e of[...t.childNodes])e instanceof SVGDefsElement||i.appendChild(e);this.__defs.appendChild(i)}return new d(i,this)}setLineDash(t){t\u0026\u0026t.length\u003e0?this.lineDash\u003dt.join(\",\"):this.lineDash\u003dnull}_to_number(t){return a.isNumber(t)?t:t.baseVal.value}}i.SVGRenderingContext2D\u003dm,m.__name__\u003d\"SVGRenderingContext2D\"},\n      function _(o,t,n,i,e){i();const s\u003do(238),c\u003do(15);class l extends s.ButtonToolButtonView{_clicked(){this.model.do.emit(void 0)}}n.ActionToolButtonView\u003dl,l.__name__\u003d\"ActionToolButtonView\";class _ extends s.ButtonToolView{connect_signals(){super.connect_signals(),this.connect(this.model.do,(o\u003d\u003ethis.doit(o)))}}n.ActionToolView\u003d_,_.__name__\u003d\"ActionToolView\";class d extends s.ButtonTool{constructor(o){super(o),this.button_view\u003dl,this.do\u003dnew c.Signal(this,\"do\")}}n.ActionTool\u003dd,d.__name__\u003d\"ActionTool\"},\n      function _(o,e,t,i,l){i();const s\u003do(251),n\u003do(242);class r extends s.ActionToolView{doit(){window.open(this.model.redirect)}}t.HelpToolView\u003dr,r.__name__\u003d\"HelpToolView\";class c extends s.ActionTool{constructor(o){super(o),this.tool_name\u003d\"Help\",this.icon\u003dn.tool_icon_help}static init_HelpTool(){this.prototype.default_view\u003dr,this.define((({String:o})\u003d\u003e({redirect:[o,\"https://docs.bokeh.org/en/latest/docs/user_guide/tools.html\"]}))),this.override({description:\"Click the question mark to learn more about Bokeh plot tools.\"}),this.register_alias(\"help\",(()\u003d\u003enew c))}}t.HelpTool\u003dc,c.__name__\u003d\"HelpTool\",c.init_HelpTool()},\n      function _(o,l,g,A,r){A(),g.root\u003d\"bk-root\",g.logo\u003d\"bk-logo\",g.grey\u003d\"bk-grey\",g.logo_small\u003d\"bk-logo-small\",g.logo_notebook\u003d\"bk-logo-notebook\",g.default\u003d\".bk-root .bk-logo{margin:5px;position:relative;display:block;background-repeat:no-repeat;}.bk-root .bk-logo.bk-grey{filter:url(\\\"data:image/svg+xml;utf8,\u003csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027\u003e\u003cfilter id\u003d\u0027grayscale\u0027\u003e\u003cfeColorMatrix type\u003d\u0027matrix\u0027 values\u003d\u00270.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\u0027/\u003e\u003c/filter\u003e\u003c/svg\u003e#grayscale\\\");filter:gray;-webkit-filter:grayscale(100%);}.bk-root .bk-logo-small{width:20px;height:20px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAOkSURBVDiNjZRtaJVlGMd/1/08zzln5zjP1LWcU9N0NkN8m2CYjpgQYQXqSs0I84OLIC0hkEKoPtiH3gmKoiJDU7QpLgoLjLIQCpEsNJ1vqUOdO7ppbuec5+V+rj4ctwzd8IIbbi6u+8f1539dt3A78eXC7QizUF7gyV1fD1Yqg4JWz84yffhm0qkFqBogB9rM8tZdtwVsPUhWhGcFJngGeWrPzHm5oaMmkfEg1usvLFyc8jLRqDOMru7AyC8saQr7GG7f5fvDeH7Ej8CM66nIF+8yngt6HWaKh7k49Soy9nXurCi1o3qUbS3zWfrYeQDTB/Qj6kX6Ybhw4B+bOYoLKCC9H3Nu/leUTZ1JdRWkkn2ldcCamzrcf47KKXdAJllSlxAOkRgyHsGC/zRday5Qld9DyoM4/q/rUoy/CXh3jzOu3bHUVZeU+DEn8FInkPBFlu3+nW3Nw0mk6vCDiWg8CeJaxEwuHS3+z5RgY+YBR6V1Z1nxSOfoaPa4LASWxxdNp+VWTk7+4vzaou8v8PN+xo+KY2xsw6une2frhw05CTYOmQvsEhjhWjn0bmXPjpE1+kplmmkP3suftwTubK9Vq22qKmrBhpY4jvd5afdRA3wGjFAgcnTK2s4hY0/GPNIb0nErGMCRxWOOX64Z8RAC4oCXdklmEvcL8o0BfkNK4lUg9HTl+oPlQxdNo3Mg4Nv175e/1LDGzZen30MEjRUtmXSfiTVu1kK8W4txyV6BMKlbgk3lMwYCiusNy9fVfvvwMxv8Ynl6vxoByANLTWplvuj/nF9m2+PDtt1eiHPBr1oIfhCChQMBw6Aw0UulqTKZdfVvfG7VcfIqLG9bcldL/+pdWTLxLUy8Qq38heUIjh4XlzZxzQm19lLFlr8vdQ97rjZVOLf8nclzckbcD4wxXMidpX30sFd37Fv/GtwwhzhxGVAprjbg0gCAEeIgwCZyTV2Z1REEW8O4py0wsjeloKoMr6iCY6dP92H6Vw/oTyICIthibxjm/DfN9lVz8IqtqKYLUXfoKVMVQVVJOElGjrnnUt9T9wbgp8AyYKaGlqingHZU/uG2NTZSVqwHQTWkx9hxjkpWDaCg6Ckj5qebgBVbT3V3NNXMSiWSDdGV3hrtzla7J+duwPOToIg42ChPQOQjspnSlp1V+Gjdged7+8UN5CRAV7a5EdFNwCjEaBR27b3W890TE7g24NAP/mMDXRWrGoFPQI9ls/MWO2dWFAar/xcOIImbbpA3zgAAAABJRU5ErkJggg\u003d\u003d);}.bk-root .bk-logo-notebook{display:inline-block;vertical-align:middle;margin-right:5px;}\"},\n      function _(t,e,i,s,l){s();const o\u003dt(1),n\u003dt(40),h\u003dt(20),a\u003dt(43),r\u003do.__importStar(t(255)),c\u003dr;class d extends n.AnnotationView{initialize(){super.initialize(),this.el\u003da.div({class:c.tooltip}),a.undisplay(this.el),this.plot_view.canvas_view.add_overlay(this.el)}remove(){a.remove(this.el),super.remove()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.content.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.position.change,(()\u003d\u003ethis._reposition()))}styles(){return[...super.styles(),r.default]}render(){this.model.visible||a.undisplay(this.el),super.render()}_render(){const{content:t}\u003dthis.model;null!\u003dt?(a.empty(this.el),a.classes(this.el).toggle(\"bk-tooltip-custom\",this.model.custom),this.el.appendChild(t),this.model.show_arrow\u0026\u0026this.el.classList.add(c.tooltip_arrow)):a.undisplay(this.el)}_reposition(){const{position:t}\u003dthis.model;if(null\u003d\u003dt)return void a.undisplay(this.el);const[e,i]\u003dt,s\u003d(()\u003d\u003e{const t\u003dthis.parent.layout.bbox.relative(),{attachment:s}\u003dthis.model;switch(s){case\"horizontal\":return e\u003ct.hcenter?\"right\":\"left\";case\"vertical\":return i\u003ct.vcenter?\"below\":\"above\";default:return s}})();let l;this.el.classList.remove(c.right),this.el.classList.remove(c.left),this.el.classList.remove(c.above),this.el.classList.remove(c.below),a.display(this.el);let o\u003dnull,n\u003dnull;switch(s){case\"right\":this.el.classList.add(c.left),o\u003de+(this.el.offsetWidth-this.el.clientWidth)+10,l\u003di-this.el.offsetHeight/2;break;case\"left\":this.el.classList.add(c.right),n\u003dthis.plot_view.layout.bbox.width-e+10,l\u003di-this.el.offsetHeight/2;break;case\"below\":this.el.classList.add(c.above),l\u003di+(this.el.offsetHeight-this.el.clientHeight)+10,o\u003dMath.round(e-this.el.offsetWidth/2);break;case\"above\":this.el.classList.add(c.below),l\u003di-this.el.offsetHeight-10,o\u003dMath.round(e-this.el.offsetWidth/2)}this.el.style.top\u003d`${l}px`,this.el.style.left\u003dnull!\u003do?`${o}px`:\"auto\",this.el.style.right\u003dnull!\u003dn?`${n}px`:\"auto\"}}i.TooltipView\u003dd,d.__name__\u003d\"TooltipView\";class p extends n.Annotation{constructor(t){super(t)}static init_Tooltip(){this.prototype.default_view\u003dd,this.define((({Boolean:t})\u003d\u003e({attachment:[h.TooltipAttachment,\"horizontal\"],inner_only:[t,!0],show_arrow:[t,!0]}))),this.internal((({Boolean:t,Number:e,Tuple:i,Ref:s,Nullable:l})\u003d\u003e({position:[l(i(e,e)),null],content:[s(HTMLElement),()\u003d\u003ea.div()],custom:[t]}))),this.override({level:\"overlay\"})}clear(){this.position\u003dnull}}i.Tooltip\u003dp,p.__name__\u003d\"Tooltip\",p.init_Tooltip()},\n      function _(o,t,r,e,l){e(),r.root\u003d\"bk-root\",r.tooltip\u003d\"bk-tooltip\",r.left\u003d\"bk-left\",r.tooltip_arrow\u003d\"bk-tooltip-arrow\",r.right\u003d\"bk-right\",r.above\u003d\"bk-above\",r.below\u003d\"bk-below\",r.tooltip_row_label\u003d\"bk-tooltip-row-label\",r.tooltip_row_value\u003d\"bk-tooltip-row-value\",r.tooltip_color_block\u003d\"bk-tooltip-color-block\",r.default\u003d\u0027.bk-root{}.bk-root .bk-tooltip{font-weight:300;font-size:12px;position:absolute;padding:5px;border:1px solid #e5e5e5;color:#2f2f2f;background-color:white;pointer-events:none;opacity:0.95;z-index:100;}.bk-root .bk-tooltip \u003e div:not(:first-child){margin-top:5px;border-top:#e5e5e5 1px dashed;}.bk-root .bk-tooltip.bk-left.bk-tooltip-arrow::before{position:absolute;margin:-7px 0 0 0;top:50%;width:0;height:0;border-style:solid;border-width:7px 0 7px 0;border-color:transparent;content:\" \";display:block;left:-10px;border-right-width:10px;border-right-color:#909599;}.bk-root .bk-tooltip.bk-left::before{left:-10px;border-right-width:10px;border-right-color:#909599;}.bk-root .bk-tooltip.bk-right.bk-tooltip-arrow::after{position:absolute;margin:-7px 0 0 0;top:50%;width:0;height:0;border-style:solid;border-width:7px 0 7px 0;border-color:transparent;content:\" \";display:block;right:-10px;border-left-width:10px;border-left-color:#909599;}.bk-root .bk-tooltip.bk-right::after{right:-10px;border-left-width:10px;border-left-color:#909599;}.bk-root .bk-tooltip.bk-above::before{position:absolute;margin:0 0 0 -7px;left:50%;width:0;height:0;border-style:solid;border-width:0 7px 0 7px;border-color:transparent;content:\" \";display:block;top:-10px;border-bottom-width:10px;border-bottom-color:#909599;}.bk-root .bk-tooltip.bk-below::after{position:absolute;margin:0 0 0 -7px;left:50%;width:0;height:0;border-style:solid;border-width:0 7px 0 7px;border-color:transparent;content:\" \";display:block;bottom:-10px;border-top-width:10px;border-top-color:#909599;}.bk-root .bk-tooltip-row-label{text-align:right;color:#26aae1;}.bk-root .bk-tooltip-row-value{color:default;}.bk-root .bk-tooltip-color-block{width:12px;height:12px;margin-left:5px;margin-right:5px;outline:#dddddd solid 1px;display:inline-block;}\u0027},\n      function _(e,t,i,s,r){s();const a\u003de(135),h\u003de(133),_\u003de(122),l\u003de(48);class o extends a.UpperLowerView{async lazy_initialize(){await super.lazy_initialize();const{lower_head:e,upper_head:t}\u003dthis.model;null!\u003de\u0026\u0026(this.lower_head\u003dawait _.build_view(e,{parent:this})),null!\u003dt\u0026\u0026(this.upper_head\u003dawait _.build_view(t,{parent:this}))}set_data(e){var t,i;super.set_data(e),null\u003d\u003d\u003d(t\u003dthis.lower_head)||void 0\u003d\u003d\u003dt||t.set_data(e),null\u003d\u003d\u003d(i\u003dthis.upper_head)||void 0\u003d\u003d\u003di||i.set_data(e)}paint(e){if(this.visuals.line.doit)for(let t\u003d0,i\u003dthis._lower_sx.length;t\u003ci;t++)this.visuals.line.set_vectorize(e,t),e.beginPath(),e.moveTo(this._lower_sx[t],this._lower_sy[t]),e.lineTo(this._upper_sx[t],this._upper_sy[t]),e.stroke();const t\u003d\"height\"\u003d\u003dthis.model.dimension?0:Math.PI/2;if(null!\u003dthis.lower_head)for(let i\u003d0,s\u003dthis._lower_sx.length;i\u003cs;i++)e.save(),e.translate(this._lower_sx[i],this._lower_sy[i]),e.rotate(t+Math.PI),this.lower_head.render(e,i),e.restore();if(null!\u003dthis.upper_head)for(let i\u003d0,s\u003dthis._upper_sx.length;i\u003cs;i++)e.save(),e.translate(this._upper_sx[i],this._upper_sy[i]),e.rotate(t),this.upper_head.render(e,i),e.restore()}}i.WhiskerView\u003do,o.__name__\u003d\"WhiskerView\";class n extends a.UpperLower{constructor(e){super(e)}static init_Whisker(){this.prototype.default_view\u003do,this.mixins(l.LineVector),this.define((({Ref:e,Nullable:t})\u003d\u003e({lower_head:[t(e(h.ArrowHead)),()\u003d\u003enew h.TeeHead({size:10})],upper_head:[t(e(h.ArrowHead)),()\u003d\u003enew h.TeeHead({size:10})]}))),this.override({level:\"underlay\"})}}i.Whisker\u003dn,n.__name__\u003d\"Whisker\",n.init_Whisker()},\n      function _(n,o,t,u,e){u(),e(\"CustomJS\",n(258).CustomJS),e(\"OpenURL\",n(260).OpenURL)},\n      function _(t,s,e,n,c){n();const u\u003dt(259),i\u003dt(13),a\u003dt(34);class r extends u.Callback{constructor(t){super(t)}static init_CustomJS(){this.define((({Unknown:t,String:s,Dict:e})\u003d\u003e({args:[e(t),{}],code:[s,\"\"]})))}get names(){return i.keys(this.args)}get values(){return i.values(this.args)}get func(){const t\u003da.use_strict(this.code);return new Function(...this.names,\"cb_obj\",\"cb_data\",t)}execute(t,s\u003d{}){return this.func.apply(t,this.values.concat(t,s))}}e.CustomJS\u003dr,r.__name__\u003d\"CustomJS\",r.init_CustomJS()},\n      function _(c,a,l,n,s){n();const e\u003dc(53);class o extends e.Model{constructor(c){super(c)}}l.Callback\u003do,o.__name__\u003d\"Callback\"},\n      function _(e,t,n,i,o){i();const s\u003de(259),c\u003de(182),r\u003de(8);class a extends s.Callback{constructor(e){super(e)}static init_OpenURL(){this.define((({Boolean:e,String:t})\u003d\u003e({url:[t,\"http://\"],same_tab:[e,!1]})))}navigate(e){this.same_tab?window.location.href\u003de:window.open(e)}execute(e,{source:t}){const n\u003de\u003d\u003e{const n\u003dc.replace_placeholders(this.url,t,e,void 0,void 0,encodeURI);if(!r.isString(n))throw new Error(\"HTML output is not supported in this context\");this.navigate(n)},{selected:i}\u003dt;for(const e of i.indices)n(e);for(const e of i.line_indices)n(e)}}n.OpenURL\u003da,a.__name__\u003d\"OpenURL\",a.init_OpenURL()},\n      function _(a,n,e,r,s){r(),s(\"Canvas\",a(262).Canvas),s(\"CartesianFrame\",a(144).CartesianFrame)},\n      function _(e,t,s,i,a){i();const l\u003de(14),n\u003de(240),r\u003de(19),o\u003de(43),h\u003de(20),_\u003de(13),c\u003de(263),d\u003de(99),p\u003de(249),v\u003d(()\u003d\u003e{const e\u003ddocument.createElement(\"canvas\"),t\u003de.getContext(\"webgl\",{premultipliedAlpha:!0});return null!\u003dt?{canvas:e,gl:t}:void r.logger.trace(\"WebGL is not supported\")})(),u\u003d{position:\"absolute\",top:\"0\",left:\"0\",width:\"100%\",height:\"100%\"};class b extends n.DOMView{constructor(){super(...arguments),this.bbox\u003dnew d.BBox}initialize(){super.initialize(),\"webgl\"\u003d\u003dthis.model.output_backend\u0026\u0026(this.webgl\u003dv),this.underlays_el\u003do.div({style:u}),this.primary\u003dthis.create_layer(),this.overlays\u003dthis.create_layer(),this.overlays_el\u003do.div({style:u}),this.events_el\u003do.div({class:\"bk-canvas-events\",style:u});const e\u003d[this.underlays_el,this.primary.el,this.overlays.el,this.overlays_el,this.events_el];_.extend(this.el.style,u),o.append(this.el,...e),this.ui_event_bus\u003dnew c.UIEventBus(this)}remove(){this.ui_event_bus.destroy(),super.remove()}add_underlay(e){this.underlays_el.appendChild(e)}add_overlay(e){this.overlays_el.appendChild(e)}add_event(e){this.events_el.appendChild(e)}get pixel_ratio(){return this.primary.pixel_ratio}resize(e,t){this.bbox\u003dnew d.BBox({left:0,top:0,width:e,height:t}),this.primary.resize(e,t),this.overlays.resize(e,t)}prepare_webgl(e){const{webgl:t}\u003dthis;if(null!\u003dt){const{width:s,height:i}\u003dthis.bbox;t.canvas.width\u003dthis.pixel_ratio*s,t.canvas.height\u003dthis.pixel_ratio*i;const{gl:a}\u003dt;a.enable(a.SCISSOR_TEST);const[l,n,r,o]\u003de,{xview:h,yview:_}\u003dthis.bbox,c\u003dh.compute(l),d\u003d_.compute(n+o),p\u003dthis.pixel_ratio;a.scissor(p*c,p*d,p*r,p*o),a.enable(a.BLEND),a.blendFuncSeparate(a.SRC_ALPHA,a.ONE_MINUS_SRC_ALPHA,a.ONE_MINUS_DST_ALPHA,a.ONE),this._clear_webgl()}}blit_webgl(e){const{webgl:t}\u003dthis;if(null!\u003dt){if(r.logger.debug(\"Blitting WebGL canvas\"),e.restore(),e.drawImage(t.canvas,0,0),e.save(),this.model.hidpi){const t\u003dthis.pixel_ratio;e.scale(t,t),e.translate(.5,.5)}this._clear_webgl()}}_clear_webgl(){const{webgl:e}\u003dthis;if(null!\u003de){const{gl:t,canvas:s}\u003de;t.viewport(0,0,s.width,s.height),t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}}compose(){const e\u003dthis.create_layer(),{width:t,height:s}\u003dthis.bbox;return e.resize(t,s),e.ctx.drawImage(this.primary.canvas,0,0),e.ctx.drawImage(this.overlays.canvas,0,0),e}create_layer(){const{output_backend:e,hidpi:t}\u003dthis.model;return new p.CanvasLayer(e,t)}to_blob(){return this.compose().to_blob()}}s.CanvasView\u003db,b.__name__\u003d\"CanvasView\";class g extends l.HasProps{constructor(e){super(e)}static init_Canvas(){this.prototype.default_view\u003db,this.internal((({Boolean:e})\u003d\u003e({hidpi:[e,!0],output_backend:[h.OutputBackend,\"canvas\"]})))}}s.Canvas\u003dg,g.__name__\u003d\"Canvas\",g.init_Canvas()},\n      function _(t,e,s,n,i){n();const r\u003dt(1),a\u003dr.__importDefault(t(239)),_\u003dt(15),h\u003dt(19),o\u003dt(43),l\u003dr.__importStar(t(264)),c\u003dt(265),p\u003dt(9),u\u003dt(8),v\u003dt(27),d\u003dt(244);class g{constructor(t){this.canvas_view\u003dt,this.pan_start\u003dnew _.Signal(this,\"pan:start\"),this.pan\u003dnew _.Signal(this,\"pan\"),this.pan_end\u003dnew _.Signal(this,\"pan:end\"),this.pinch_start\u003dnew _.Signal(this,\"pinch:start\"),this.pinch\u003dnew _.Signal(this,\"pinch\"),this.pinch_end\u003dnew _.Signal(this,\"pinch:end\"),this.rotate_start\u003dnew _.Signal(this,\"rotate:start\"),this.rotate\u003dnew _.Signal(this,\"rotate\"),this.rotate_end\u003dnew _.Signal(this,\"rotate:end\"),this.tap\u003dnew _.Signal(this,\"tap\"),this.doubletap\u003dnew _.Signal(this,\"doubletap\"),this.press\u003dnew _.Signal(this,\"press\"),this.pressup\u003dnew _.Signal(this,\"pressup\"),this.move_enter\u003dnew _.Signal(this,\"move:enter\"),this.move\u003dnew _.Signal(this,\"move\"),this.move_exit\u003dnew _.Signal(this,\"move:exit\"),this.scroll\u003dnew _.Signal(this,\"scroll\"),this.keydown\u003dnew _.Signal(this,\"keydown\"),this.keyup\u003dnew _.Signal(this,\"keyup\"),this.hammer\u003dnew a.default(this.hit_area,{touchAction:\"auto\",inputClass:a.default.TouchMouseInput}),this._prev_move\u003dnull,this._curr_pan\u003dnull,this._curr_pinch\u003dnull,this._curr_rotate\u003dnull,this._configure_hammerjs(),this.hit_area.addEventListener(\"mousemove\",(t\u003d\u003ethis._mouse_move(t))),this.hit_area.addEventListener(\"mouseenter\",(t\u003d\u003ethis._mouse_enter(t))),this.hit_area.addEventListener(\"mouseleave\",(t\u003d\u003ethis._mouse_exit(t))),this.hit_area.addEventListener(\"contextmenu\",(t\u003d\u003ethis._context_menu(t))),this.hit_area.addEventListener(\"wheel\",(t\u003d\u003ethis._mouse_wheel(t))),document.addEventListener(\"keydown\",this),document.addEventListener(\"keyup\",this),this.menu\u003dnew d.ContextMenu([],{prevent_hide:t\u003d\u003e2\u003d\u003dt.button\u0026\u0026t.target\u003d\u003dthis.hit_area}),this.hit_area.appendChild(this.menu.el)}get hit_area(){return this.canvas_view.events_el}destroy(){this.menu.remove(),this.hammer.destroy(),document.removeEventListener(\"keydown\",this),document.removeEventListener(\"keyup\",this)}handleEvent(t){\"keydown\"\u003d\u003dt.type?this._key_down(t):\"keyup\"\u003d\u003dt.type\u0026\u0026this._key_up(t)}_configure_hammerjs(){this.hammer.get(\"doubletap\").recognizeWith(\"tap\"),this.hammer.get(\"tap\").requireFailure(\"doubletap\"),this.hammer.get(\"doubletap\").dropRequireFailure(\"tap\"),this.hammer.on(\"doubletap\",(t\u003d\u003ethis._doubletap(t))),this.hammer.on(\"tap\",(t\u003d\u003ethis._tap(t))),this.hammer.on(\"press\",(t\u003d\u003ethis._press(t))),this.hammer.on(\"pressup\",(t\u003d\u003ethis._pressup(t))),this.hammer.get(\"pan\").set({direction:a.default.DIRECTION_ALL}),this.hammer.on(\"panstart\",(t\u003d\u003ethis._pan_start(t))),this.hammer.on(\"pan\",(t\u003d\u003ethis._pan(t))),this.hammer.on(\"panend\",(t\u003d\u003ethis._pan_end(t))),this.hammer.get(\"pinch\").set({enable:!0}),this.hammer.on(\"pinchstart\",(t\u003d\u003ethis._pinch_start(t))),this.hammer.on(\"pinch\",(t\u003d\u003ethis._pinch(t))),this.hammer.on(\"pinchend\",(t\u003d\u003ethis._pinch_end(t))),this.hammer.get(\"rotate\").set({enable:!0}),this.hammer.on(\"rotatestart\",(t\u003d\u003ethis._rotate_start(t))),this.hammer.on(\"rotate\",(t\u003d\u003ethis._rotate(t))),this.hammer.on(\"rotateend\",(t\u003d\u003ethis._rotate_end(t)))}register_tool(t){const e\u003dt.model.event_type;null!\u003de\u0026\u0026(u.isString(e)?this._register_tool(t,e):e.forEach(((e,s)\u003d\u003ethis._register_tool(t,e,s\u003c1))))}_register_tool(t,e,s\u003d!0){const n\u003dt,{id:i}\u003dn.model,r\u003dt\u003d\u003ee\u003d\u003e{e.id\u003d\u003di\u0026\u0026t(e.e)},a\u003dt\u003d\u003ee\u003d\u003e{t(e.e)};switch(e){case\"pan\":null!\u003dn._pan_start\u0026\u0026n.connect(this.pan_start,r(n._pan_start.bind(n))),null!\u003dn._pan\u0026\u0026n.connect(this.pan,r(n._pan.bind(n))),null!\u003dn._pan_end\u0026\u0026n.connect(this.pan_end,r(n._pan_end.bind(n)));break;case\"pinch\":null!\u003dn._pinch_start\u0026\u0026n.connect(this.pinch_start,r(n._pinch_start.bind(n))),null!\u003dn._pinch\u0026\u0026n.connect(this.pinch,r(n._pinch.bind(n))),null!\u003dn._pinch_end\u0026\u0026n.connect(this.pinch_end,r(n._pinch_end.bind(n)));break;case\"rotate\":null!\u003dn._rotate_start\u0026\u0026n.connect(this.rotate_start,r(n._rotate_start.bind(n))),null!\u003dn._rotate\u0026\u0026n.connect(this.rotate,r(n._rotate.bind(n))),null!\u003dn._rotate_end\u0026\u0026n.connect(this.rotate_end,r(n._rotate_end.bind(n)));break;case\"move\":null!\u003dn._move_enter\u0026\u0026n.connect(this.move_enter,r(n._move_enter.bind(n))),null!\u003dn._move\u0026\u0026n.connect(this.move,r(n._move.bind(n))),null!\u003dn._move_exit\u0026\u0026n.connect(this.move_exit,r(n._move_exit.bind(n)));break;case\"tap\":null!\u003dn._tap\u0026\u0026n.connect(this.tap,r(n._tap.bind(n))),null!\u003dn._doubletap\u0026\u0026n.connect(this.doubletap,r(n._doubletap.bind(n)));break;case\"press\":null!\u003dn._press\u0026\u0026n.connect(this.press,r(n._press.bind(n))),null!\u003dn._pressup\u0026\u0026n.connect(this.pressup,r(n._pressup.bind(n)));break;case\"scroll\":null!\u003dn._scroll\u0026\u0026n.connect(this.scroll,r(n._scroll.bind(n)));break;default:throw new Error(`unsupported event_type: ${e}`)}s\u0026\u0026(null!\u003dn._keydown\u0026\u0026n.connect(this.keydown,a(n._keydown.bind(n))),null!\u003dn._keyup\u0026\u0026n.connect(this.keyup,a(n._keyup.bind(n))),v.is_mobile\u0026\u0026null!\u003dn._scroll\u0026\u0026\"pinch\"\u003d\u003de\u0026\u0026(h.logger.debug(\"Registering scroll on touch screen\"),n.connect(this.scroll,r(n._scroll.bind(n)))))}_hit_test_renderers(t,e,s){var n;const i\u003dt.get_renderer_views();for(const t of p.reversed(i))if(null\u003d\u003d\u003d(n\u003dt.interactive_hit)||void 0\u003d\u003d\u003dn?void 0:n.call(t,e,s))return t;return null}set_cursor(t\u003d\"default\"){this.hit_area.style.cursor\u003dt}_hit_test_frame(t,e,s){return t.frame.bbox.contains(e,s)}_hit_test_canvas(t,e,s){return t.layout.bbox.contains(e,s)}_hit_test_plot(t,e){for(const s of this.canvas_view.plot_views)if(s.layout.bbox.relative().contains(t,e))return s;return null}_trigger(t,e,s){var n;const{sx:i,sy:r}\u003de,a\u003dthis._hit_test_plot(i,r),_\u003dt\u003d\u003e{const[s,n]\u003d[i,r];return Object.assign(Object.assign({},e),{sx:s,sy:n})};if(\"panstart\"\u003d\u003de.type||\"pan\"\u003d\u003de.type||\"panend\"\u003d\u003de.type){let n;if(\"panstart\"\u003d\u003de.type\u0026\u0026null!\u003da?(this._curr_pan\u003d{plot_view:a},n\u003da):\"pan\"\u003d\u003de.type\u0026\u0026null!\u003dthis._curr_pan?n\u003dthis._curr_pan.plot_view:\"panend\"\u003d\u003de.type\u0026\u0026null!\u003dthis._curr_pan?(n\u003dthis._curr_pan.plot_view,this._curr_pan\u003dnull):n\u003dnull,null!\u003dn){const e\u003d_();this.__trigger(n,t,e,s)}}else if(\"pinchstart\"\u003d\u003de.type||\"pinch\"\u003d\u003de.type||\"pinchend\"\u003d\u003de.type){let n;if(\"pinchstart\"\u003d\u003de.type\u0026\u0026null!\u003da?(this._curr_pinch\u003d{plot_view:a},n\u003da):\"pinch\"\u003d\u003de.type\u0026\u0026null!\u003dthis._curr_pinch?n\u003dthis._curr_pinch.plot_view:\"pinchend\"\u003d\u003de.type\u0026\u0026null!\u003dthis._curr_pinch?(n\u003dthis._curr_pinch.plot_view,this._curr_pinch\u003dnull):n\u003dnull,null!\u003dn){const e\u003d_();this.__trigger(n,t,e,s)}}else if(\"rotatestart\"\u003d\u003de.type||\"rotate\"\u003d\u003de.type||\"rotateend\"\u003d\u003de.type){let n;if(\"rotatestart\"\u003d\u003de.type\u0026\u0026null!\u003da?(this._curr_rotate\u003d{plot_view:a},n\u003da):\"rotate\"\u003d\u003de.type\u0026\u0026null!\u003dthis._curr_rotate?n\u003dthis._curr_rotate.plot_view:\"rotateend\"\u003d\u003de.type\u0026\u0026null!\u003dthis._curr_rotate?(n\u003dthis._curr_rotate.plot_view,this._curr_rotate\u003dnull):n\u003dnull,null!\u003dn){const e\u003d_();this.__trigger(n,t,e,s)}}else if(\"mouseenter\"\u003d\u003de.type||\"mousemove\"\u003d\u003de.type||\"mouseleave\"\u003d\u003de.type){const h\u003dnull\u003d\u003d\u003d(n\u003dthis._prev_move)||void 0\u003d\u003d\u003dn?void 0:n.plot_view;if(null!\u003dh\u0026\u0026(\"mouseleave\"\u003d\u003de.type||h!\u003da)){const{sx:t,sy:e}\u003d_();this.__trigger(h,this.move_exit,{type:\"mouseleave\",sx:t,sy:e,shiftKey:!1,ctrlKey:!1},s)}if(null!\u003da\u0026\u0026(\"mouseenter\"\u003d\u003de.type||h!\u003da)){const{sx:t,sy:e}\u003d_();this.__trigger(a,this.move_enter,{type:\"mouseenter\",sx:t,sy:e,shiftKey:!1,ctrlKey:!1},s)}if(null!\u003da\u0026\u0026\"mousemove\"\u003d\u003de.type){const e\u003d_();this.__trigger(a,t,e,s)}this._prev_move\u003d{sx:i,sy:r,plot_view:a}}else if(null!\u003da){const e\u003d_();this.__trigger(a,t,e,s)}}__trigger(t,e,s,n){var i,r;const a\u003dt.model.toolbar.gestures,_\u003de.name.split(\":\")[0],h\u003dthis._hit_test_renderers(t,s.sx,s.sy),o\u003dthis._hit_test_canvas(t,s.sx,s.sy);switch(_){case\"move\":{const n\u003da[_].active;null!\u003dn\u0026\u0026this.trigger(e,s,n.id);const r\u003dt.model.toolbar.inspectors.filter((t\u003d\u003et.active));let l\u003d\"default\";null!\u003dh?(l\u003dnull!\u003d\u003d(i\u003dh.cursor(s.sx,s.sy))\u0026\u0026void 0!\u003d\u003di?i:l,p.is_empty(r)||(e\u003dthis.move_exit)):this._hit_test_frame(t,s.sx,s.sy)\u0026\u0026(p.is_empty(r)||(l\u003d\"crosshair\")),this.set_cursor(l),t.set_toolbar_visibility(o),r.map((t\u003d\u003ethis.trigger(e,s,t.id)));break}case\"tap\":{const{target:t}\u003dn;if(null!\u003dt\u0026\u0026t!\u003dthis.hit_area)return;null!\u003dh\u0026\u0026null!\u003dh.on_hit\u0026\u0026h.on_hit(s.sx,s.sy);const i\u003da[_].active;null!\u003di\u0026\u0026this.trigger(e,s,i.id);break}case\"doubletap\":{const t\u003dnull!\u003d\u003d(r\u003da.doubletap.active)\u0026\u0026void 0!\u003d\u003dr?r:a.tap.active;null!\u003dt\u0026\u0026this.trigger(e,s,t.id);break}case\"scroll\":{const t\u003da[v.is_mobile?\"pinch\":\"scroll\"].active;null!\u003dt\u0026\u0026(n.preventDefault(),n.stopPropagation(),this.trigger(e,s,t.id));break}case\"pan\":{const t\u003da[_].active;null!\u003dt\u0026\u0026(n.preventDefault(),this.trigger(e,s,t.id));break}default:{const t\u003da[_].active;null!\u003dt\u0026\u0026this.trigger(e,s,t.id)}}this._trigger_bokeh_event(t,s)}trigger(t,e,s\u003dnull){t.emit({id:s,e})}_trigger_bokeh_event(t,e){const s\u003d(()\u003d\u003e{const{sx:s,sy:n}\u003de,i\u003dt.frame.x_scale.invert(s),r\u003dt.frame.y_scale.invert(n);switch(e.type){case\"wheel\":return new l.MouseWheel(s,n,i,r,e.delta);case\"mousemove\":return new l.MouseMove(s,n,i,r);case\"mouseenter\":return new l.MouseEnter(s,n,i,r);case\"mouseleave\":return new l.MouseLeave(s,n,i,r);case\"tap\":return new l.Tap(s,n,i,r);case\"doubletap\":return new l.DoubleTap(s,n,i,r);case\"press\":return new l.Press(s,n,i,r);case\"pressup\":return new l.PressUp(s,n,i,r);case\"pan\":return new l.Pan(s,n,i,r,e.deltaX,e.deltaY);case\"panstart\":return new l.PanStart(s,n,i,r);case\"panend\":return new l.PanEnd(s,n,i,r);case\"pinch\":return new l.Pinch(s,n,i,r,e.scale);case\"pinchstart\":return new l.PinchStart(s,n,i,r);case\"pinchend\":return new l.PinchEnd(s,n,i,r);case\"rotate\":return new l.Rotate(s,n,i,r,e.rotation);case\"rotatestart\":return new l.RotateStart(s,n,i,r);case\"rotateend\":return new l.RotateEnd(s,n,i,r);default:return}})();null!\u003ds\u0026\u0026t.model.trigger_event(s)}_get_sxy(t){const{pageX:e,pageY:s}\u003dfunction(t){return\"undefined\"!\u003dtypeof TouchEvent\u0026\u0026t instanceof TouchEvent}(t)?(0!\u003dt.touches.length?t.touches:t.changedTouches)[0]:t,{left:n,top:i}\u003do.offset(this.hit_area);return{sx:e-n,sy:s-i}}_pan_event(t){return Object.assign(Object.assign({type:t.type},this._get_sxy(t.srcEvent)),{deltaX:t.deltaX,deltaY:t.deltaY,shiftKey:t.srcEvent.shiftKey,ctrlKey:t.srcEvent.ctrlKey})}_pinch_event(t){return Object.assign(Object.assign({type:t.type},this._get_sxy(t.srcEvent)),{scale:t.scale,shiftKey:t.srcEvent.shiftKey,ctrlKey:t.srcEvent.ctrlKey})}_rotate_event(t){return Object.assign(Object.assign({type:t.type},this._get_sxy(t.srcEvent)),{rotation:t.rotation,shiftKey:t.srcEvent.shiftKey,ctrlKey:t.srcEvent.ctrlKey})}_tap_event(t){return Object.assign(Object.assign({type:t.type},this._get_sxy(t.srcEvent)),{shiftKey:t.srcEvent.shiftKey,ctrlKey:t.srcEvent.ctrlKey})}_move_event(t){return Object.assign(Object.assign({type:t.type},this._get_sxy(t)),{shiftKey:t.shiftKey,ctrlKey:t.ctrlKey})}_scroll_event(t){return Object.assign(Object.assign({type:t.type},this._get_sxy(t)),{delta:c.getDeltaY(t),shiftKey:t.shiftKey,ctrlKey:t.ctrlKey})}_key_event(t){return{type:t.type,keyCode:t.keyCode}}_pan_start(t){const e\u003dthis._pan_event(t);e.sx-\u003dt.deltaX,e.sy-\u003dt.deltaY,this._trigger(this.pan_start,e,t.srcEvent)}_pan(t){this._trigger(this.pan,this._pan_event(t),t.srcEvent)}_pan_end(t){this._trigger(this.pan_end,this._pan_event(t),t.srcEvent)}_pinch_start(t){this._trigger(this.pinch_start,this._pinch_event(t),t.srcEvent)}_pinch(t){this._trigger(this.pinch,this._pinch_event(t),t.srcEvent)}_pinch_end(t){this._trigger(this.pinch_end,this._pinch_event(t),t.srcEvent)}_rotate_start(t){this._trigger(this.rotate_start,this._rotate_event(t),t.srcEvent)}_rotate(t){this._trigger(this.rotate,this._rotate_event(t),t.srcEvent)}_rotate_end(t){this._trigger(this.rotate_end,this._rotate_event(t),t.srcEvent)}_tap(t){this._trigger(this.tap,this._tap_event(t),t.srcEvent)}_doubletap(t){this._trigger(this.doubletap,this._tap_event(t),t.srcEvent)}_press(t){this._trigger(this.press,this._tap_event(t),t.srcEvent)}_pressup(t){this._trigger(this.pressup,this._tap_event(t),t.srcEvent)}_mouse_enter(t){this._trigger(this.move_enter,this._move_event(t),t)}_mouse_move(t){this._trigger(this.move,this._move_event(t),t)}_mouse_exit(t){this._trigger(this.move_exit,this._move_event(t),t)}_mouse_wheel(t){this._trigger(this.scroll,this._scroll_event(t),t)}_context_menu(t){!this.menu.is_open\u0026\u0026this.menu.can_open\u0026\u0026t.preventDefault();const{sx:e,sy:s}\u003dthis._get_sxy(t);this.menu.toggle({left:e,top:s})}_key_down(t){this.trigger(this.keydown,this._key_event(t))}_key_up(t){this.trigger(this.keyup,this._key_event(t))}}s.UIEventBus\u003dg,g.__name__\u003d\"UIEventBus\"},\n      function _(e,t,s,n,_){n();var a\u003dthis\u0026\u0026this.__decorate||function(e,t,s,n){var _,a\u003darguments.length,o\u003da\u003c3?t:null\u003d\u003d\u003dn?n\u003dObject.getOwnPropertyDescriptor(t,s):n;if(\"object\"\u003d\u003dtypeof Reflect\u0026\u0026\"function\"\u003d\u003dtypeof Reflect.decorate)o\u003dReflect.decorate(e,t,s,n);else for(var c\u003de.length-1;c\u003e\u003d0;c--)(_\u003de[c])\u0026\u0026(o\u003d(a\u003c3?_(o):a\u003e3?_(t,s,o):_(t,s))||o);return a\u003e3\u0026\u0026o\u0026\u0026Object.defineProperty(t,s,o),o};function o(e){return function(t){t.prototype.event_name\u003de}}class c{to_json(){const{event_name:e}\u003dthis;return{event_name:e,event_values:this._to_json()}}}s.BokehEvent\u003dc,c.__name__\u003d\"BokehEvent\";class r extends c{constructor(){super(...arguments),this.origin\u003dnull}_to_json(){return{model:this.origin}}}s.ModelEvent\u003dr,r.__name__\u003d\"ModelEvent\";let l\u003dclass extends c{_to_json(){return{}}};s.DocumentReady\u003dl,l.__name__\u003d\"DocumentReady\",s.DocumentReady\u003dl\u003da([o(\"document_ready\")],l);let i\u003dclass extends r{};s.ButtonClick\u003di,i.__name__\u003d\"ButtonClick\",s.ButtonClick\u003di\u003da([o(\"button_click\")],i);let u\u003dclass extends r{constructor(e){super(),this.item\u003de}_to_json(){const{item:e}\u003dthis;return Object.assign(Object.assign({},super._to_json()),{item:e})}};s.MenuItemClick\u003du,u.__name__\u003d\"MenuItemClick\",s.MenuItemClick\u003du\u003da([o(\"menu_item_click\")],u);class d extends r{}s.UIEvent\u003dd,d.__name__\u003d\"UIEvent\";let h\u003dclass extends d{};s.LODStart\u003dh,h.__name__\u003d\"LODStart\",s.LODStart\u003dh\u003da([o(\"lodstart\")],h);let m\u003dclass extends d{};s.LODEnd\u003dm,m.__name__\u003d\"LODEnd\",s.LODEnd\u003dm\u003da([o(\"lodend\")],m);let x\u003dclass extends d{constructor(e,t){super(),this.geometry\u003de,this.final\u003dt}_to_json(){const{geometry:e,final:t}\u003dthis;return Object.assign(Object.assign({},super._to_json()),{geometry:e,final:t})}};s.SelectionGeometry\u003dx,x.__name__\u003d\"SelectionGeometry\",s.SelectionGeometry\u003dx\u003da([o(\"selectiongeometry\")],x);let p\u003dclass extends d{};s.Reset\u003dp,p.__name__\u003d\"Reset\",s.Reset\u003dp\u003da([o(\"reset\")],p);class j extends d{constructor(e,t,s,n){super(),this.sx\u003de,this.sy\u003dt,this.x\u003ds,this.y\u003dn}_to_json(){const{sx:e,sy:t,x:s,y:n}\u003dthis;return Object.assign(Object.assign({},super._to_json()),{sx:e,sy:t,x:s,y:n})}}s.PointEvent\u003dj,j.__name__\u003d\"PointEvent\";let y\u003dclass extends j{constructor(e,t,s,n,_,a){super(e,t,s,n),this.sx\u003de,this.sy\u003dt,this.x\u003ds,this.y\u003dn,this.delta_x\u003d_,this.delta_y\u003da}_to_json(){const{delta_x:e,delta_y:t}\u003dthis;return Object.assign(Object.assign({},super._to_json()),{delta_x:e,delta_y:t})}};s.Pan\u003dy,y.__name__\u003d\"Pan\",s.Pan\u003dy\u003da([o(\"pan\")],y);let P\u003dclass extends j{constructor(e,t,s,n,_){super(e,t,s,n),this.sx\u003de,this.sy\u003dt,this.x\u003ds,this.y\u003dn,this.scale\u003d_}_to_json(){const{scale:e}\u003dthis;return Object.assign(Object.assign({},super._to_json()),{scale:e})}};s.Pinch\u003dP,P.__name__\u003d\"Pinch\",s.Pinch\u003dP\u003da([o(\"pinch\")],P);let v\u003dclass extends j{constructor(e,t,s,n,_){super(e,t,s,n),this.sx\u003de,this.sy\u003dt,this.x\u003ds,this.y\u003dn,this.rotation\u003d_}_to_json(){const{rotation:e}\u003dthis;return Object.assign(Object.assign({},super._to_json()),{rotation:e})}};s.Rotate\u003dv,v.__name__\u003d\"Rotate\",s.Rotate\u003dv\u003da([o(\"rotate\")],v);let g\u003dclass extends j{constructor(e,t,s,n,_){super(e,t,s,n),this.sx\u003de,this.sy\u003dt,this.x\u003ds,this.y\u003dn,this.delta\u003d_}_to_json(){const{delta:e}\u003dthis;return Object.assign(Object.assign({},super._to_json()),{delta:e})}};s.MouseWheel\u003dg,g.__name__\u003d\"MouseWheel\",s.MouseWheel\u003dg\u003da([o(\"wheel\")],g);let E\u003dclass extends j{};s.MouseMove\u003dE,E.__name__\u003d\"MouseMove\",s.MouseMove\u003dE\u003da([o(\"mousemove\")],E);let O\u003dclass extends j{};s.MouseEnter\u003dO,O.__name__\u003d\"MouseEnter\",s.MouseEnter\u003dO\u003da([o(\"mouseenter\")],O);let b\u003dclass extends j{};s.MouseLeave\u003db,b.__name__\u003d\"MouseLeave\",s.MouseLeave\u003db\u003da([o(\"mouseleave\")],b);let M\u003dclass extends j{};s.Tap\u003dM,M.__name__\u003d\"Tap\",s.Tap\u003dM\u003da([o(\"tap\")],M);let R\u003dclass extends j{};s.DoubleTap\u003dR,R.__name__\u003d\"DoubleTap\",s.DoubleTap\u003dR\u003da([o(\"doubletap\")],R);let f\u003dclass extends j{};s.Press\u003df,f.__name__\u003d\"Press\",s.Press\u003df\u003da([o(\"press\")],f);let S\u003dclass extends j{};s.PressUp\u003dS,S.__name__\u003d\"PressUp\",s.PressUp\u003dS\u003da([o(\"pressup\")],S);let D\u003dclass extends j{};s.PanStart\u003dD,D.__name__\u003d\"PanStart\",s.PanStart\u003dD\u003da([o(\"panstart\")],D);let k\u003dclass extends j{};s.PanEnd\u003dk,k.__name__\u003d\"PanEnd\",s.PanEnd\u003dk\u003da([o(\"panend\")],k);let L\u003dclass extends j{};s.PinchStart\u003dL,L.__name__\u003d\"PinchStart\",s.PinchStart\u003dL\u003da([o(\"pinchstart\")],L);let C\u003dclass extends j{};s.PinchEnd\u003dC,C.__name__\u003d\"PinchEnd\",s.PinchEnd\u003dC\u003da([o(\"pinchend\")],C);let T\u003dclass extends j{};s.RotateStart\u003dT,T.__name__\u003d\"RotateStart\",s.RotateStart\u003dT\u003da([o(\"rotatestart\")],T);let B\u003dclass extends j{};s.RotateEnd\u003dB,B.__name__\u003d\"RotateEnd\",s.RotateEnd\u003dB\u003da([o(\"rotateend\")],B)},\n      function _(t,e,n,l,o){\n      /*!\n           * jQuery Mousewheel 3.1.13\n           *\n           * Copyright jQuery Foundation and other contributors\n           * Released under the MIT license\n           * http://jquery.org/license\n           */\n      function u(t){const e\u003dgetComputedStyle(t).fontSize;return null!\u003de?parseInt(e,10):null}l(),n.getDeltaY\u003dfunction(t){let e\u003d-t.deltaY;if(t.target instanceof HTMLElement)switch(t.deltaMode){case t.DOM_DELTA_LINE:e*\u003d(n\u003dt.target,null!\u003d\u003d(a\u003dnull!\u003d\u003d(o\u003du(null!\u003d\u003d(l\u003dn.offsetParent)\u0026\u0026void 0!\u003d\u003dl?l:document.body))\u0026\u0026void 0!\u003d\u003do?o:u(n))\u0026\u0026void 0!\u003d\u003da?a:16);break;case t.DOM_DELTA_PAGE:e*\u003dfunction(t){return t.clientHeight}(t.target)}var n,l,o,a;return e}},\n      function _(m,i,u,s,a){s(),a(\"Expression\",m(124).Expression),a(\"CustomJSExpr\",m(267).CustomJSExpr),a(\"Stack\",m(268).Stack),a(\"CumSum\",m(269).CumSum),a(\"ScalarExpression\",m(124).ScalarExpression),a(\"Minimum\",m(270).Minimum),a(\"Maximum\",m(271).Maximum)},\n      function _(t,e,s,n,r){n();const i\u003dt(14),o\u003dt(124),a\u003dt(24),c\u003dt(9),u\u003dt(13),l\u003dt(34),h\u003dt(8);class p extends o.Expression{constructor(t){super(t)}static init_CustomJSExpr(){this.define((({Unknown:t,String:e,Dict:s})\u003d\u003e({args:[s(t),{}],code:[e,\"\"]})))}connect_signals(){super.connect_signals();for(const t of u.values(this.args))t instanceof i.HasProps\u0026\u0026t.change.connect((()\u003d\u003e{this._result.clear(),this.change.emit()}))}get names(){return u.keys(this.args)}get values(){return u.values(this.args)}get func(){const t\u003dl.use_strict(this.code);return new a.GeneratorFunction(...this.names,t)}_v_compute(t){const e\u003dthis.func.apply(t,this.values);let s\u003de.next();if(s.done\u0026\u0026void 0!\u003d\u003ds.value){const{value:e}\u003ds;return h.isArray(e)||h.isTypedArray(e)?e:h.isIterable(e)?[...e]:c.repeat(e,t.length)}{const t\u003d[];do{t.push(s.value),s\u003de.next()}while(!s.done);return t}}}s.CustomJSExpr\u003dp,p.__name__\u003d\"CustomJSExpr\",p.init_CustomJSExpr()},\n      function _(t,n,e,i,s){i();const a\u003dt(124);class c extends a.Expression{constructor(t){super(t)}static init_Stack(){this.define((({String:t,Array:n})\u003d\u003e({fields:[n(t),[]]})))}_v_compute(t){var n;const e\u003dnull!\u003d\u003d(n\u003dt.get_length())\u0026\u0026void 0!\u003d\u003dn?n:0,i\u003dnew Float64Array(e);for(const n of this.fields){const s\u003dt.data[n];if(null!\u003ds)for(let t\u003d0,n\u003dMath.min(e,s.length);t\u003cn;t++)i[t]+\u003ds[t]}return i}}e.Stack\u003dc,c.__name__\u003d\"Stack\",c.init_Stack()},\n      function _(e,t,n,i,u){i();const o\u003de(124);class r extends o.Expression{constructor(e){super(e)}static init_CumSum(){this.define((({Boolean:e,String:t})\u003d\u003e({field:[t],include_zero:[e,!1]})))}_v_compute(e){var t;const n\u003dnew Float64Array(null!\u003d\u003d(t\u003de.get_length())\u0026\u0026void 0!\u003d\u003dt?t:0),i\u003de.data[this.field],u\u003dthis.include_zero?1:0;n[0]\u003dthis.include_zero?0:i[0];for(let e\u003d1;e\u003cn.length;e++)n[e]\u003dn[e-1]+i[e-u];return n}}n.CumSum\u003dr,r.__name__\u003d\"CumSum\",r.init_CumSum()},\n      function _(i,n,t,l,u){l();const e\u003di(124),m\u003di(9);class s extends e.ScalarExpression{constructor(i){super(i)}static init_Minimum(){this.define((({Number:i,String:n,Nullable:t})\u003d\u003e({field:[n],initial:[t(i),null]})))}_compute(i){var n,t;const l\u003dnull!\u003d\u003d(n\u003di.data[this.field])\u0026\u0026void 0!\u003d\u003dn?n:[];return Math.min(null!\u003d\u003d(t\u003dthis.initial)\u0026\u0026void 0!\u003d\u003dt?t:1/0,m.min(l))}}t.Minimum\u003ds,s.__name__\u003d\"Minimum\",s.init_Minimum()},\n      function _(i,t,a,n,l){n();const u\u003di(124),e\u003di(9);class m extends u.ScalarExpression{constructor(i){super(i)}static init_Maximum(){this.define((({Number:i,String:t,Nullable:a})\u003d\u003e({field:[t],initial:[a(i),null]})))}_compute(i){var t,a;const n\u003dnull!\u003d\u003d(t\u003di.data[this.field])\u0026\u0026void 0!\u003d\u003dt?t:[];return Math.max(null!\u003d\u003d(a\u003dthis.initial)\u0026\u0026void 0!\u003d\u003da?a:-1/0,e.max(n))}}a.Maximum\u003dm,m.__name__\u003d\"Maximum\",m.init_Maximum()},\n      function _(e,t,l,r,i){r(),i(\"BooleanFilter\",e(273).BooleanFilter),i(\"CustomJSFilter\",e(274).CustomJSFilter),i(\"Filter\",e(121).Filter),i(\"GroupFilter\",e(275).GroupFilter),i(\"IndexFilter\",e(276).IndexFilter)},\n      function _(e,n,l,o,t){o();const i\u003de(121),s\u003de(24);class a extends i.Filter{constructor(e){super(e)}static init_BooleanFilter(){this.define((({Boolean:e,Array:n,Nullable:l})\u003d\u003e({booleans:[l(n(e)),null]})))}compute_indices(e){const n\u003de.length,{booleans:l}\u003dthis;return null\u003d\u003dl?s.Indices.all_set(n):s.Indices.from_booleans(n,l)}}l.BooleanFilter\u003da,a.__name__\u003d\"BooleanFilter\",a.init_BooleanFilter()},\n      function _(e,t,s,n,r){n();const i\u003de(121),o\u003de(24),u\u003de(13),c\u003de(8),a\u003de(34);class l extends i.Filter{constructor(e){super(e)}static init_CustomJSFilter(){this.define((({Unknown:e,String:t,Dict:s})\u003d\u003e({args:[s(e),{}],code:[t,\"\"]})))}get names(){return u.keys(this.args)}get values(){return u.values(this.args)}get func(){const e\u003da.use_strict(this.code);return new Function(...this.names,\"source\",e)}compute_indices(e){const t\u003de.length,s\u003dthis.func(...this.values,e);if(null\u003d\u003ds)return o.Indices.all_set(t);if(c.isArrayOf(s,c.isInteger))return o.Indices.from_indices(t,s);if(c.isArrayOf(s,c.isBoolean))return o.Indices.from_booleans(t,s);throw new Error(`expect an array of integers or booleans, or null, got ${s}`)}}s.CustomJSFilter\u003dl,l.__name__\u003d\"CustomJSFilter\",l.init_CustomJSFilter()},\n      function _(n,t,e,i,o){i();const r\u003dn(121),u\u003dn(24),s\u003dn(19);class c extends r.Filter{constructor(n){super(n)}static init_GroupFilter(){this.define((({String:n})\u003d\u003e({column_name:[n],group:[n]})))}compute_indices(n){const t\u003dn.get_column(this.column_name);if(null\u003d\u003dt)return s.logger.warn(`${this}: groupby column \u0027${this.column_name}\u0027 not found in the data source`),new u.Indices(n.length,1);{const e\u003dnew u.Indices(n.length);for(let n\u003d0;n\u003ce.size;n++)t[n]\u003d\u003d\u003dthis.group\u0026\u0026e.set(n);return e}}}e.GroupFilter\u003dc,c.__name__\u003d\"GroupFilter\",c.init_GroupFilter()},\n      function _(e,n,i,t,s){t();const l\u003de(121),c\u003de(24);class r extends l.Filter{constructor(e){super(e)}static init_IndexFilter(){this.define((({Int:e,Array:n,Nullable:i})\u003d\u003e({indices:[i(n(e)),null]})))}compute_indices(e){const n\u003de.length,{indices:i}\u003dthis;return null\u003d\u003di?c.Indices.all_set(n):c.Indices.from_indices(n,i)}}i.IndexFilter\u003dr,r.__name__\u003d\"IndexFilter\",r.init_IndexFilter()},\n      function _(e,a,l,i,t){i(),t(\"AnnularWedge\",e(278).AnnularWedge),t(\"Annulus\",e(279).Annulus),t(\"Arc\",e(280).Arc),t(\"Bezier\",e(281).Bezier),t(\"Circle\",e(282).Circle),t(\"Ellipse\",e(286).Ellipse),t(\"EllipseOval\",e(287).EllipseOval),t(\"Glyph\",e(98).Glyph),t(\"HArea\",e(117).HArea),t(\"HBar\",e(289).HBar),t(\"HexTile\",e(291).HexTile),t(\"Image\",e(292).Image),t(\"ImageRGBA\",e(294).ImageRGBA),t(\"ImageURL\",e(295).ImageURL),t(\"Line\",e(63).Line),t(\"MultiLine\",e(127).MultiLine),t(\"MultiPolygons\",e(297).MultiPolygons),t(\"Oval\",e(298).Oval),t(\"Patch\",e(116).Patch),t(\"Patches\",e(128).Patches),t(\"Quad\",e(299).Quad),t(\"Quadratic\",e(300).Quadratic),t(\"Ray\",e(301).Ray),t(\"Rect\",e(302).Rect),t(\"Scatter\",e(303).Scatter),t(\"Segment\",e(306).Segment),t(\"Spline\",e(307).Spline),t(\"Step\",e(309).Step),t(\"Text\",e(310).Text),t(\"VArea\",e(119).VArea),t(\"VBar\",e(311).VBar),t(\"Wedge\",e(312).Wedge)},\n      function _(e,t,s,i,r){i();const n\u003de(1),a\u003de(64),o\u003de(106),_\u003de(48),d\u003de(24),u\u003de(20),h\u003dn.__importStar(e(18)),l\u003de(10),c\u003de(59);class g extends a.XYGlyphView{_map_data(){\"data\"\u003d\u003dthis.model.properties.inner_radius.units?this.sinner_radius\u003dthis.sdist(this.renderer.xscale,this._x,this.inner_radius):this.sinner_radius\u003dd.to_screen(this.inner_radius),\"data\"\u003d\u003dthis.model.properties.outer_radius.units?this.souter_radius\u003dthis.sdist(this.renderer.xscale,this._x,this.outer_radius):this.souter_radius\u003dd.to_screen(this.outer_radius)}_render(e,t,s){const{sx:i,sy:r,start_angle:n,end_angle:a,sinner_radius:o,souter_radius:_}\u003dnull!\u003ds?s:this,d\u003d\"anticlock\"\u003d\u003dthis.model.direction;for(const s of t){const t\u003di[s],u\u003dr[s],h\u003do[s],l\u003d_[s],c\u003dn.get(s),g\u003da.get(s);if(isNaN(t+u+h+l+c+g))continue;const x\u003dg-c;e.translate(t,u),e.rotate(c),e.beginPath(),e.moveTo(l,0),e.arc(0,0,l,0,x,d),e.rotate(x),e.lineTo(h,0),e.arc(0,0,h,0,-x,!d),e.closePath(),e.rotate(-x-c),e.translate(-t,-u),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(e,s),e.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(e,s),e.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(e,s),e.stroke())}}_hit_point(e){const{sx:t,sy:s}\u003de,i\u003dthis.renderer.xscale.invert(t),r\u003dthis.renderer.yscale.invert(s);let n,a,o,_;if(\"data\"\u003d\u003dthis.model.properties.outer_radius.units)n\u003di-this.max_outer_radius,o\u003di+this.max_outer_radius,a\u003dr-this.max_outer_radius,_\u003dr+this.max_outer_radius;else{const e\u003dt-this.max_outer_radius,i\u003dt+this.max_outer_radius;[n,o]\u003dthis.renderer.xscale.r_invert(e,i);const r\u003ds-this.max_outer_radius,d\u003ds+this.max_outer_radius;[a,_]\u003dthis.renderer.yscale.r_invert(r,d)}const d\u003d[];for(const e of this.index.indices({x0:n,x1:o,y0:a,y1:_})){const t\u003dthis.souter_radius[e]**2,s\u003dthis.sinner_radius[e]**2,[n,a]\u003dthis.renderer.xscale.r_compute(i,this._x[e]),[o,_]\u003dthis.renderer.yscale.r_compute(r,this._y[e]),u\u003d(n-a)**2+(o-_)**2;u\u003c\u003dt\u0026\u0026u\u003e\u003ds\u0026\u0026d.push(e)}const u\u003d\"anticlock\"\u003d\u003dthis.model.direction,h\u003d[];for(const e of d){const i\u003dMath.atan2(s-this.sy[e],t-this.sx[e]);l.angle_between(-i,-this.start_angle.get(e),-this.end_angle.get(e),u)\u0026\u0026h.push(e)}return new c.Selection({indices:h})}draw_legend_for_index(e,t,s){o.generic_area_vector_legend(this.visuals,e,t,s)}scenterxy(e){const t\u003d(this.sinner_radius[e]+this.souter_radius[e])/2,s\u003d(this.start_angle.get(e)+this.end_angle.get(e))/2;return[this.sx[e]+t*Math.cos(s),this.sy[e]+t*Math.sin(s)]}}s.AnnularWedgeView\u003dg,g.__name__\u003d\"AnnularWedgeView\";class x extends a.XYGlyph{constructor(e){super(e)}static init_AnnularWedge(){this.prototype.default_view\u003dg,this.mixins([_.LineVector,_.FillVector,_.HatchVector]),this.define((({})\u003d\u003e({direction:[u.Direction,\"anticlock\"],inner_radius:[h.DistanceSpec,{field:\"inner_radius\"}],outer_radius:[h.DistanceSpec,{field:\"outer_radius\"}],start_angle:[h.AngleSpec,{field:\"start_angle\"}],end_angle:[h.AngleSpec,{field:\"end_angle\"}]})))}}s.AnnularWedge\u003dx,x.__name__\u003d\"AnnularWedge\",x.init_AnnularWedge()},\n      function _(s,i,t,e,r){e();const n\u003ds(1),a\u003ds(64),u\u003ds(24),_\u003ds(48),o\u003dn.__importStar(s(18)),h\u003ds(27),d\u003ds(59);class c extends a.XYGlyphView{_map_data(){\"data\"\u003d\u003dthis.model.properties.inner_radius.units?this.sinner_radius\u003dthis.sdist(this.renderer.xscale,this._x,this.inner_radius):this.sinner_radius\u003du.to_screen(this.inner_radius),\"data\"\u003d\u003dthis.model.properties.outer_radius.units?this.souter_radius\u003dthis.sdist(this.renderer.xscale,this._x,this.outer_radius):this.souter_radius\u003du.to_screen(this.outer_radius)}_render(s,i,t){const{sx:e,sy:r,sinner_radius:n,souter_radius:a}\u003dnull!\u003dt?t:this;for(const t of i){const i\u003de[t],_\u003dr[t],o\u003dn[t],d\u003da[t];function u(){if(s.beginPath(),h.is_ie)for(const t of[!1,!0])s.arc(i,_,o,0,Math.PI,t),s.arc(i,_,d,Math.PI,0,!t);else s.arc(i,_,o,0,2*Math.PI,!0),s.arc(i,_,d,2*Math.PI,0,!1)}isNaN(i+_+o+d)||(this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(s,t),u(),s.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(s,t),u(),s.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(s,t),s.beginPath(),s.arc(i,_,o,0,2*Math.PI),s.moveTo(i+d,_),s.arc(i,_,d,0,2*Math.PI),s.stroke()))}}_hit_point(s){const{sx:i,sy:t}\u003ds,e\u003dthis.renderer.xscale.invert(i),r\u003dthis.renderer.yscale.invert(t);let n,a,u,_;if(\"data\"\u003d\u003dthis.model.properties.outer_radius.units)n\u003de-this.max_outer_radius,u\u003de+this.max_outer_radius,a\u003dr-this.max_outer_radius,_\u003dr+this.max_outer_radius;else{const s\u003di-this.max_outer_radius,e\u003di+this.max_outer_radius;[n,u]\u003dthis.renderer.xscale.r_invert(s,e);const r\u003dt-this.max_outer_radius,o\u003dt+this.max_outer_radius;[a,_]\u003dthis.renderer.yscale.r_invert(r,o)}const o\u003d[];for(const s of this.index.indices({x0:n,x1:u,y0:a,y1:_})){const i\u003dthis.souter_radius[s]**2,t\u003dthis.sinner_radius[s]**2,[n,a]\u003dthis.renderer.xscale.r_compute(e,this._x[s]),[u,_]\u003dthis.renderer.yscale.r_compute(r,this._y[s]),h\u003d(n-a)**2+(u-_)**2;h\u003c\u003di\u0026\u0026h\u003e\u003dt\u0026\u0026o.push(s)}return new d.Selection({indices:o})}draw_legend_for_index(s,{x0:i,y0:t,x1:e,y1:r},n){const a\u003dn+1,u\u003dnew Array(a);u[n]\u003d(i+e)/2;const _\u003dnew Array(a);_[n]\u003d(t+r)/2;const o\u003d.5*Math.min(Math.abs(e-i),Math.abs(r-t)),h\u003dnew Array(a);h[n]\u003d.4*o;const d\u003dnew Array(a);d[n]\u003d.8*o,this._render(s,[n],{sx:u,sy:_,sinner_radius:h,souter_radius:d})}}t.AnnulusView\u003dc,c.__name__\u003d\"AnnulusView\";class l extends a.XYGlyph{constructor(s){super(s)}static init_Annulus(){this.prototype.default_view\u003dc,this.mixins([_.LineVector,_.FillVector,_.HatchVector]),this.define((({})\u003d\u003e({inner_radius:[o.DistanceSpec,{field:\"inner_radius\"}],outer_radius:[o.DistanceSpec,{field:\"outer_radius\"}]})))}}t.Annulus\u003dl,l.__name__\u003d\"Annulus\",l.init_Annulus()},\n      function _(e,i,s,t,n){t();const r\u003de(1),a\u003de(64),c\u003de(106),d\u003de(48),_\u003de(24),l\u003de(20),o\u003dr.__importStar(e(18));class h extends a.XYGlyphView{_map_data(){\"data\"\u003d\u003dthis.model.properties.radius.units?this.sradius\u003dthis.sdist(this.renderer.xscale,this._x,this.radius):this.sradius\u003d_.to_screen(this.radius)}_render(e,i,s){if(this.visuals.line.doit){const{sx:t,sy:n,sradius:r,start_angle:a,end_angle:c}\u003dnull!\u003ds?s:this,d\u003d\"anticlock\"\u003d\u003dthis.model.direction;for(const s of i){const i\u003dt[s],_\u003dn[s],l\u003dr[s],o\u003da.get(s),h\u003dc.get(s);isNaN(i+_+l+o+h)||(e.beginPath(),e.arc(i,_,l,o,h,d),this.visuals.line.set_vectorize(e,s),e.stroke())}}}draw_legend_for_index(e,i,s){c.generic_line_vector_legend(this.visuals,e,i,s)}}s.ArcView\u003dh,h.__name__\u003d\"ArcView\";class u extends a.XYGlyph{constructor(e){super(e)}static init_Arc(){this.prototype.default_view\u003dh,this.mixins(d.LineVector),this.define((({})\u003d\u003e({direction:[l.Direction,\"anticlock\"],radius:[o.DistanceSpec,{field:\"radius\"}],start_angle:[o.AngleSpec,{field:\"start_angle\"}],end_angle:[o.AngleSpec,{field:\"end_angle\"}]})))}}s.Arc\u003du,u.__name__\u003d\"Arc\",u.init_Arc()},\n      function _(e,t,i,s,n){s();const o\u003de(1),c\u003de(48),r\u003de(98),a\u003de(106),_\u003de(65),d\u003do.__importStar(e(18));function l(e,t,i,s,n,o,c,r){const a\u003d[],_\u003d[[],[]];for(let _\u003d0;_\u003c\u003d2;_++){let d,l,x;if(0\u003d\u003d\u003d_?(l\u003d6*e-12*i+6*n,d\u003d-3*e+9*i-9*n+3*c,x\u003d3*i-3*e):(l\u003d6*t-12*s+6*o,d\u003d-3*t+9*s-9*o+3*r,x\u003d3*s-3*t),Math.abs(d)\u003c1e-12){if(Math.abs(l)\u003c1e-12)continue;const e\u003d-x/l;0\u003ce\u0026\u0026e\u003c1\u0026\u0026a.push(e);continue}const h\u003dl*l-4*x*d,y\u003dMath.sqrt(h);if(h\u003c0)continue;const p\u003d(-l+y)/(2*d);0\u003cp\u0026\u0026p\u003c1\u0026\u0026a.push(p);const f\u003d(-l-y)/(2*d);0\u003cf\u0026\u0026f\u003c1\u0026\u0026a.push(f)}let d\u003da.length;const l\u003dd;for(;d--;){const l\u003da[d],x\u003d1-l,h\u003dx*x*x*e+3*x*x*l*i+3*x*l*l*n+l*l*l*c;_[0][d]\u003dh;const y\u003dx*x*x*t+3*x*x*l*s+3*x*l*l*o+l*l*l*r;_[1][d]\u003dy}return _[0][l]\u003de,_[1][l]\u003dt,_[0][l+1]\u003dc,_[1][l+1]\u003dr,[Math.min(..._[0]),Math.max(..._[1]),Math.max(..._[0]),Math.min(..._[1])]}class x extends r.GlyphView{_project_data(){_.inplace.project_xy(this._x0,this._y0),_.inplace.project_xy(this._x1,this._y1)}_index_data(e){const{data_size:t,_x0:i,_y0:s,_x1:n,_y1:o,_cx0:c,_cy0:r,_cx1:a,_cy1:_}\u003dthis;for(let d\u003d0;d\u003ct;d++){const t\u003di[d],x\u003ds[d],h\u003dn[d],y\u003do[d],p\u003dc[d],f\u003dr[d],u\u003da[d],m\u003d_[d];if(isNaN(t+h+x+y+p+f+u+m))e.add_empty();else{const[i,s,n,o]\u003dl(t,x,h,y,p,f,u,m);e.add(i,s,n,o)}}}_render(e,t,i){if(this.visuals.line.doit){const{sx0:s,sy0:n,sx1:o,sy1:c,scx0:r,scy0:a,scx1:_,scy1:d}\u003dnull!\u003di?i:this;for(const i of t){const t\u003ds[i],l\u003dn[i],x\u003do[i],h\u003dc[i],y\u003dr[i],p\u003da[i],f\u003d_[i],u\u003dd[i];isNaN(t+l+x+h+y+p+f+u)||(e.beginPath(),e.moveTo(t,l),e.bezierCurveTo(y,p,f,u,x,h),this.visuals.line.set_vectorize(e,i),e.stroke())}}}draw_legend_for_index(e,t,i){a.generic_line_vector_legend(this.visuals,e,t,i)}scenterxy(){throw new Error(`${this}.scenterxy() is not implemented`)}}i.BezierView\u003dx,x.__name__\u003d\"BezierView\";class h extends r.Glyph{constructor(e){super(e)}static init_Bezier(){this.prototype.default_view\u003dx,this.define((({})\u003d\u003e({x0:[d.XCoordinateSpec,{field:\"x0\"}],y0:[d.YCoordinateSpec,{field:\"y0\"}],x1:[d.XCoordinateSpec,{field:\"x1\"}],y1:[d.YCoordinateSpec,{field:\"y1\"}],cx0:[d.XCoordinateSpec,{field:\"cx0\"}],cy0:[d.YCoordinateSpec,{field:\"cy0\"}],cx1:[d.XCoordinateSpec,{field:\"cx1\"}],cy1:[d.YCoordinateSpec,{field:\"cy1\"}]}))),this.mixins(c.LineVector)}}i.Bezier\u003dh,h.__name__\u003d\"Bezier\",h.init_Bezier()},\n      function _(s,i,e,t,r){t();const a\u003ds(1),n\u003ds(64),h\u003ds(283),d\u003ds(48),l\u003ds(24),c\u003ds(20),_\u003da.__importStar(s(107)),u\u003da.__importStar(s(18)),o\u003ds(9),x\u003ds(12),m\u003ds(59);class y extends n.XYGlyphView{initialize(){super.initialize();const{webgl:s}\u003dthis.renderer.plot_view.canvas_view;null!\u003ds\u0026\u0026(this.glglyph\u003dnew h.MarkerGL(s.gl,this,\"circle\"))}get use_radius(){return!(this.radius.is_Scalar()\u0026\u0026isNaN(this.radius.value))}_map_data(){if(this.use_radius)if(\"data\"\u003d\u003dthis.model.properties.radius.units)switch(this.model.radius_dimension){case\"x\":this.sradius\u003dthis.sdist(this.renderer.xscale,this._x,this.radius);break;case\"y\":this.sradius\u003dthis.sdist(this.renderer.yscale,this._y,this.radius);break;case\"max\":{const s\u003dthis.sdist(this.renderer.xscale,this._x,this.radius),i\u003dthis.sdist(this.renderer.yscale,this._y,this.radius);this.sradius\u003dx.map(s,((s,e)\u003d\u003eMath.max(s,i[e])));break}case\"min\":{const s\u003dthis.sdist(this.renderer.xscale,this._x,this.radius),i\u003dthis.sdist(this.renderer.yscale,this._y,this.radius);this.sradius\u003dx.map(s,((s,e)\u003d\u003eMath.min(s,i[e])));break}}else this.sradius\u003dl.to_screen(this.radius),this._configure(\"max_size\",{value:2*this.max_radius});else{const s\u003dnew l.ScreenArray(this.size);this.sradius\u003dx.map(s,(s\u003d\u003es/2))}}_mask_data(){const{frame:s}\u003dthis.renderer.plot_view,i\u003ds.x_target,e\u003ds.y_target;let t,r;return this.use_radius\u0026\u0026\"data\"\u003d\u003dthis.model.properties.radius.units?(t\u003di.map((s\u003d\u003ethis.renderer.xscale.invert(s))).widen(this.max_radius),r\u003de.map((s\u003d\u003ethis.renderer.yscale.invert(s))).widen(this.max_radius)):(t\u003di.widen(this.max_size).map((s\u003d\u003ethis.renderer.xscale.invert(s))),r\u003de.widen(this.max_size).map((s\u003d\u003ethis.renderer.yscale.invert(s)))),this.index.indices({x0:t.start,x1:t.end,y0:r.start,y1:r.end})}_render(s,i,e){const{sx:t,sy:r,sradius:a}\u003dnull!\u003de?e:this;for(const e of i){const i\u003dt[e],n\u003dr[e],h\u003da[e];isNaN(i+n+h)||(s.beginPath(),s.arc(i,n,h,0,2*Math.PI,!1),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(s,e),s.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(s,e),s.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(s,e),s.stroke()))}}_hit_point(s){const{sx:i,sy:e}\u003ds,t\u003dthis.renderer.xscale.invert(i),r\u003dthis.renderer.yscale.invert(e),{hit_dilation:a}\u003dthis.model;let n,h,d,l;if(this.use_radius\u0026\u0026\"data\"\u003d\u003dthis.model.properties.radius.units)n\u003dt-this.max_radius*a,h\u003dt+this.max_radius*a,d\u003dr-this.max_radius*a,l\u003dr+this.max_radius*a;else{const s\u003di-this.max_size*a,t\u003di+this.max_size*a;[n,h]\u003dthis.renderer.xscale.r_invert(s,t);const r\u003de-this.max_size*a,c\u003de+this.max_size*a;[d,l]\u003dthis.renderer.yscale.r_invert(r,c)}const c\u003dthis.index.indices({x0:n,x1:h,y0:d,y1:l}),_\u003d[];if(this.use_radius\u0026\u0026\"data\"\u003d\u003dthis.model.properties.radius.units)for(const s of c){const i\u003d(this.sradius[s]*a)**2,[e,n]\u003dthis.renderer.xscale.r_compute(t,this._x[s]),[h,d]\u003dthis.renderer.yscale.r_compute(r,this._y[s]);(e-n)**2+(h-d)**2\u003c\u003di\u0026\u0026_.push(s)}else for(const s of c){const t\u003d(this.sradius[s]*a)**2;(this.sx[s]-i)**2+(this.sy[s]-e)**2\u003c\u003dt\u0026\u0026_.push(s)}return new m.Selection({indices:_})}_hit_span(s){const{sx:i,sy:e}\u003ds,t\u003dthis.bounds();let r,a,n,h;if(\"h\"\u003d\u003ds.direction){let s,e;if(n\u003dt.y0,h\u003dt.y1,this.use_radius\u0026\u0026\"data\"\u003d\u003dthis.model.properties.radius.units)s\u003di-this.max_radius,e\u003di+this.max_radius,[r,a]\u003dthis.renderer.xscale.r_invert(s,e);else{const t\u003dthis.max_size/2;s\u003di-t,e\u003di+t,[r,a]\u003dthis.renderer.xscale.r_invert(s,e)}}else{let s,i;if(r\u003dt.x0,a\u003dt.x1,this.use_radius\u0026\u0026\"data\"\u003d\u003dthis.model.properties.radius.units)s\u003de-this.max_radius,i\u003de+this.max_radius,[n,h]\u003dthis.renderer.yscale.r_invert(s,i);else{const t\u003dthis.max_size/2;s\u003de-t,i\u003de+t,[n,h]\u003dthis.renderer.yscale.r_invert(s,i)}}const d\u003d[...this.index.indices({x0:r,x1:a,y0:n,y1:h})];return new m.Selection({indices:d})}_hit_rect(s){const{sx0:i,sx1:e,sy0:t,sy1:r}\u003ds,[a,n]\u003dthis.renderer.xscale.r_invert(i,e),[h,d]\u003dthis.renderer.yscale.r_invert(t,r),l\u003d[...this.index.indices({x0:a,x1:n,y0:h,y1:d})];return new m.Selection({indices:l})}_hit_poly(s){const{sx:i,sy:e}\u003ds,t\u003do.range(0,this.sx.length),r\u003d[];for(let s\u003d0,a\u003dt.length;s\u003ca;s++){const a\u003dt[s];_.point_in_poly(this.sx[s],this.sy[s],i,e)\u0026\u0026r.push(a)}return new m.Selection({indices:r})}draw_legend_for_index(s,{x0:i,y0:e,x1:t,y1:r},a){const n\u003da+1,h\u003dnew Array(n);h[a]\u003d(i+t)/2;const d\u003dnew Array(n);d[a]\u003d(e+r)/2;const l\u003dnew Array(n);l[a]\u003d.2*Math.min(Math.abs(t-i),Math.abs(r-e)),this._render(s,[a],{sx:h,sy:d,sradius:l})}}e.CircleView\u003dy,y.__name__\u003d\"CircleView\";class p extends n.XYGlyph{constructor(s){super(s)}static init_Circle(){this.prototype.default_view\u003dy,this.mixins([d.LineVector,d.FillVector,d.HatchVector]),this.define((({Number:s})\u003d\u003e({angle:[u.AngleSpec,0],size:[u.ScreenDistanceSpec,{value:4}],radius:[u.NullDistanceSpec,null],radius_dimension:[c.RadiusDimension,\"x\"],hit_dilation:[s,1]})))}}e.Circle\u003dp,p.__name__\u003d\"Circle\",p.init_Circle()},\n      function _(t,e,s,i,a){i();const r\u003dt(1),o\u003dt(109),_\u003dt(113),l\u003dr.__importDefault(t(284)),h\u003dr.__importDefault(t(285)),n\u003dt(282),f\u003dt(12),u\u003dt(19),c\u003dt(24),g\u003dt(22),b\u003dt(11);function d(t,e,s,i,a,r,o){if(a.doit)if(r.is_Scalar()\u0026\u0026o.is_Scalar()){e.used\u003d!1;const[i,a,_,l]\u003dg.color2rgba(r.value,o.value);t.set_attribute(s,\"vec4\",[i/255,a/255,_/255,l/255])}else{let a;if(e.used\u003d!0,r.is_Vector()){const t\u003dnew c.ColorArray(r.array);if(a\u003dnew c.RGBAArray(t.buffer),!o.is_Scalar()||1!\u003do.value)for(let t\u003d0;t\u003ci;t++){const e\u003d4*t+3;255\u003d\u003da[e]\u0026\u0026(a[e]\u003d255*o.get(t))}}else if(r.is_Scalar()\u0026\u0026o.is_Vector()){const t\u003dnew c.ColorArray(i);t.fill(r.value),a\u003dnew c.RGBAArray(t.buffer);for(let t\u003d0;t\u003ci;t++)for(let t\u003d0;t\u003ci;t++){const e\u003d4*t+3;255\u003d\u003da[e]\u0026\u0026(a[e]\u003d255*o.get(t))}}else b.unreachable();e.set_size(4*i),e.set_data(0,a),t.set_attribute(s,\"vec4_uint8\",e,0,0,!0)}else e.used\u003d!1,t.set_attribute(s,\"vec4\",[0,0,0,0])}class p extends _.BaseGLGlyph{constructor(t,e,s){super(t,e),this.glyph\u003de,this.marker_type\u003ds;const i\u003d[`#define USE_${s.toUpperCase()}`],a\u003dl.default,r\u003d`${i.join(\"\\n\")}\\n\\n${h.default}`;this.prog\u003dnew o.Program(t),this.prog.set_shaders(a,r),this.vbo_sx\u003dnew o.VertexBuffer(t),this.prog.set_attribute(\"a_sx\",\"float\",this.vbo_sx),this.vbo_sy\u003dnew o.VertexBuffer(t),this.prog.set_attribute(\"a_sy\",\"float\",this.vbo_sy),this.vbo_s\u003dnew o.VertexBuffer(t),this.prog.set_attribute(\"a_size\",\"float\",this.vbo_s),this.vbo_a\u003dnew o.VertexBuffer(t),this.prog.set_attribute(\"a_angle\",\"float\",this.vbo_a),this.vbo_linewidth\u003dnew o.VertexBuffer(t),this.vbo_fg_color\u003dnew o.VertexBuffer(t),this.vbo_bg_color\u003dnew o.VertexBuffer(t),this.index_buffer\u003dnew o.IndexBuffer(t)}static is_supported(t){switch(t){case\"asterisk\":case\"circle\":case\"circle_cross\":case\"circle_x\":case\"cross\":case\"diamond\":case\"diamond_cross\":case\"hex\":case\"inverted_triangle\":case\"square\":case\"square_cross\":case\"square_x\":case\"star\":case\"triangle\":case\"x\":return!0;default:return!1}}draw(t,e,s){const i\u003de.glglyph,{nvertices:a}\u003di;if(i.data_changed\u0026\u0026(i._set_data(a),this.glyph instanceof n.CircleView\u0026\u0026null!\u003dthis.glyph.radius\u0026\u0026this.vbo_s.set_data(0,f.map(this.glyph.sradius,(t\u003d\u003e2*t))),i.data_changed\u003d!1),this.visuals_changed\u0026\u0026(this._set_visuals(a),this.visuals_changed\u003d!1),this.prog.set_uniform(\"u_pixel_ratio\",\"float\",[s.pixel_ratio]),this.prog.set_uniform(\"u_canvas_size\",\"vec2\",[s.width,s.height]),this.prog.set_attribute(\"a_sx\",\"float\",i.vbo_sx),this.prog.set_attribute(\"a_sy\",\"float\",i.vbo_sy),this.prog.set_attribute(\"a_size\",\"float\",i.vbo_s),this.prog.set_attribute(\"a_angle\",\"float\",i.vbo_a),0!\u003dt.length)if(t.length\u003d\u003d\u003da)this.prog.draw(this.gl.POINTS,[0,a]);else if(a\u003c65535){const e\u003dwindow.navigator.userAgent;e.indexOf(\"MSIE \")+e.indexOf(\"Trident/\")+e.indexOf(\"Edge/\")\u003e0\u0026\u0026u.logger.warn(\"WebGL warning: IE is known to produce 1px sprites whith selections.\"),this.index_buffer.set_size(2*t.length),this.index_buffer.set_data(0,new Uint16Array(t)),this.prog.draw(this.gl.POINTS,this.index_buffer)}else{const e\u003d64e3,s\u003d[];for(let t\u003d0,i\u003dMath.ceil(a/e);t\u003ci;t++)s.push([]);for(let i\u003d0,a\u003dt.length;i\u003ca;i++){const a\u003dt[i]%e;s[Math.floor(t[i]/e)].push(a)}for(let t\u003d0,a\u003ds.length;t\u003ca;t++){const a\u003dnew Uint16Array(s[t]),r\u003dt*e*4;0!\u003d\u003da.length\u0026\u0026(this.prog.set_attribute(\"a_sx\",\"float\",i.vbo_sx,0,r),this.prog.set_attribute(\"a_sy\",\"float\",i.vbo_sy,0,r),this.prog.set_attribute(\"a_size\",\"float\",i.vbo_s,0,r),this.prog.set_attribute(\"a_angle\",\"float\",i.vbo_a,0,r),this.vbo_linewidth.used\u0026\u0026this.prog.set_attribute(\"a_linewidth\",\"float\",this.vbo_linewidth,0,r),this.vbo_fg_color.used\u0026\u0026this.prog.set_attribute(\"a_fg_color\",\"vec4_uint8\",this.vbo_fg_color,0,4*r,!0),this.vbo_bg_color.used\u0026\u0026this.prog.set_attribute(\"a_bg_color\",\"vec4_uint8\",this.vbo_bg_color,0,4*r,!0),this.index_buffer.set_size(2*a.length),this.index_buffer.set_data(0,a),this.prog.draw(this.gl.POINTS,this.index_buffer))}}}_set_data(t){const e\u003d4*t;this.vbo_sx.set_size(e),this.vbo_sy.set_size(e),this.vbo_a.set_size(e),this.vbo_s.set_size(e),this.vbo_sx.set_data(0,this.glyph.sx),this.vbo_sy.set_data(0,this.glyph.sy),null!\u003dthis.glyph.angle\u0026\u0026this.vbo_a.set_data(0,new Float32Array(this.glyph.angle)),this.glyph instanceof n.CircleView\u0026\u0026null!\u003dthis.glyph.radius?this.vbo_s.set_data(0,f.map(this.glyph.sradius,(t\u003d\u003e2*t))):this.vbo_s.set_data(0,new Float32Array(this.glyph.size))}_set_visuals(t){const{line:e,fill:s}\u003dthis.glyph.visuals;!function(t,e,s,i,a,r){if(a.doit){if(r.is_Scalar())e.used\u003d!1,t.set_attribute(s,\"float\",[r.value]);else if(r.is_Vector()){e.used\u003d!0;const a\u003dnew Float32Array(r.array);e.set_size(4*i),e.set_data(0,a),t.set_attribute(s,\"float\",e)}}else e.used\u003d!1,t.set_attribute(s,\"float\",[0])}(this.prog,this.vbo_linewidth,\"a_linewidth\",t,e,e.line_width),d(this.prog,this.vbo_fg_color,\"a_fg_color\",t,e,e.line_color,e.line_alpha),d(this.prog,this.vbo_bg_color,\"a_bg_color\",t,s,s.fill_color,s.fill_alpha),this.prog.set_uniform(\"u_antialias\",\"float\",[.8])}}s.MarkerGL\u003dp,p.__name__\u003d\"MarkerGL\"},\n      function _(n,i,a,o,_){o();a.default\u003d\"\\nprecision mediump float;\\nconst float SQRT_2 \u003d 1.4142135623730951;\\n//\\nuniform float u_pixel_ratio;\\nuniform vec2 u_canvas_size;\\nuniform vec2 u_offset;\\nuniform vec2 u_scale;\\nuniform float u_antialias;\\n//\\nattribute float a_sx;\\nattribute float a_sy;\\nattribute float a_size;\\nattribute float a_angle;  // in radians\\nattribute float a_linewidth;\\nattribute vec4  a_fg_color;\\nattribute vec4  a_bg_color;\\n//\\nvarying float v_linewidth;\\nvarying float v_size;\\nvarying vec4  v_fg_color;\\nvarying vec4  v_bg_color;\\nvarying vec2  v_rotation;\\n\\nvoid main (void)\\n{\\n    v_size \u003d a_size * u_pixel_ratio;\\n    v_linewidth \u003d a_linewidth * u_pixel_ratio;\\n    v_fg_color \u003d a_fg_color;\\n    v_bg_color \u003d a_bg_color;\\n    v_rotation \u003d vec2(cos(-a_angle), sin(-a_angle));\\n    vec2 pos \u003d vec2(a_sx, a_sy);  // in pixels\\n    pos +\u003d 0.5;  // make up for Bokeh\u0027s offset\\n    pos /\u003d u_canvas_size / u_pixel_ratio;  // in 0..1\\n    gl_Position \u003d vec4(pos*2.0-1.0, 0.0, 1.0);\\n    gl_Position.y *\u003d -1.0;\\n    gl_PointSize \u003d SQRT_2 * v_size + 2.0 * (v_linewidth + 1.5*u_antialias);\\n}\\n\"},\n      function _(n,a,s,e,t){e();s.default\u003d\u0027\\nprecision mediump float;\\n\\nconst float SQRT_2 \u003d 1.4142135623730951;\\nconst float PI \u003d 3.14159265358979323846264;\\n\\nconst float IN_ANGLE \u003d 0.6283185307179586; // PI/5. \u003d 36 degrees (star of 5 pikes)\\n//const float OUT_ANGLE \u003d PI/2. - IN_ANGLE; // External angle for regular stars\\nconst float COS_A \u003d 0.8090169943749475; // cos(IN_ANGLE)\\nconst float SIN_A \u003d 0.5877852522924731; // sin(IN_ANGLE)\\nconst float COS_B \u003d 0.5877852522924731; // cos(OUT_ANGLE)\\nconst float SIN_B \u003d 0.8090169943749475; // sin(OUT_ANGLE)\\n\\n//\\nuniform float u_antialias;\\n//\\nvarying vec4  v_fg_color;\\nvarying vec4  v_bg_color;\\nvarying float v_linewidth;\\nvarying float v_size;\\nvarying vec2  v_rotation;\\n\\n#ifdef USE_ASTERISK\\n// asterisk\\nfloat marker(vec2 P, float size)\\n{\\n    // Masks\\n    float diamond \u003d max(abs(SQRT_2 / 2.0 * (P.x - P.y)), abs(SQRT_2 / 2.0 * (P.x + P.y))) - size / (2.0 * SQRT_2);\\n    float square \u003d max(abs(P.x), abs(P.y)) - size / (2.0 * SQRT_2);\\n    // Shapes\\n    float X \u003d min(abs(P.x - P.y), abs(P.x + P.y)) - size / 100.0;  // bit of \"width\" for aa\\n    float cross \u003d min(abs(P.x), abs(P.y)) - size / 100.0;  // bit of \"width\" for aa\\n    // Result is union of masked shapes\\n    return min(max(X, diamond), max(cross, square));\\n}\\n#endif\\n\\n#ifdef USE_CIRCLE\\n// circle\\nfloat marker(vec2 P, float size)\\n{\\n    return length(P) - size/2.0;\\n}\\n#endif\\n\\n#ifdef USE_SQUARE\\n// square\\nfloat marker(vec2 P, float size)\\n{\\n    return max(abs(P.x), abs(P.y)) - size/2.0;\\n}\\n#endif\\n\\n#ifdef USE_DIAMOND\\n// diamond\\nfloat marker(vec2 P, float size)\\n{\\n    float x \u003d SQRT_2 / 2.0 * (P.x * 1.5 - P.y);\\n    float y \u003d SQRT_2 / 2.0 * (P.x * 1.5 + P.y);\\n    float r1 \u003d max(abs(x), abs(y)) - size / (2.0 * SQRT_2);\\n    return r1 / SQRT_2;\\n}\\n#endif\\n\\n#ifdef USE_HEX\\n// hex\\nfloat marker(vec2 P, float size)\\n{\\n    vec2 q \u003d abs(P);\\n    return max(q.y * 0.57735 + q.x - 1.0 * size/2.0, q.y - 0.866 * size/2.0);\\n}\\n#endif\\n\\n#ifdef USE_STAR\\n// star\\n// https://iquilezles.org/www/articles/distfunctions2d/distfunctions2d.htm\\nfloat marker(vec2 P, float size)\\n{\\n    float bn \u003d mod(atan(P.x, -P.y), 2.0*IN_ANGLE) - IN_ANGLE;\\n    P \u003d length(P)*vec2(cos(bn), abs(sin(bn)));\\n    P -\u003d size*vec2(COS_A, SIN_A)/2.;\\n    P +\u003d vec2(COS_B, SIN_B)*clamp(-(P.x*COS_B + P.y*SIN_B), 0.0, size*SIN_A/SIN_B/2.);\\n\\n    return length(P)*sign(P.x);\\n}\\n#endif\\n\\n#ifdef USE_TRIANGLE\\n// triangle\\nfloat marker(vec2 P, float size)\\n{\\n    P.y -\u003d size * 0.3;\\n    float x \u003d SQRT_2 / 2.0 * (P.x * 1.7 - P.y);\\n    float y \u003d SQRT_2 / 2.0 * (P.x * 1.7 + P.y);\\n    float r1 \u003d max(abs(x), abs(y)) - size / 1.6;\\n    float r2 \u003d P.y;\\n    return max(r1 / SQRT_2, r2);  // Intersect diamond with rectangle\\n}\\n#endif\\n\\n#ifdef USE_INVERTED_TRIANGLE\\n// inverted_triangle\\nfloat marker(vec2 P, float size)\\n{\\n    P.y +\u003d size * 0.3;\\n    float x \u003d SQRT_2 / 2.0 * (P.x * 1.7 - P.y);\\n    float y \u003d SQRT_2 / 2.0 * (P.x * 1.7 + P.y);\\n    float r1 \u003d max(abs(x), abs(y)) - size / 1.6;\\n    float r2 \u003d - P.y;\\n    return max(r1 / SQRT_2, r2);  // Intersect diamond with rectangle\\n}\\n#endif\\n\\n#ifdef USE_CROSS\\n// cross\\nfloat marker(vec2 P, float size)\\n{\\n    float square \u003d max(abs(P.x), abs(P.y)) - size / 2.5;   // 2.5 is a tweak\\n    float cross \u003d min(abs(P.x), abs(P.y)) - size / 100.0;  // bit of \"width\" for aa\\n    return max(square, cross);\\n}\\n#endif\\n\\n#ifdef USE_CIRCLE_CROSS\\n// circle_cross\\nfloat marker(vec2 P, float size)\\n{\\n    // Define quadrants\\n    float qs \u003d size / 2.0;  // quadrant size\\n    float s1 \u003d max(abs(P.x - qs), abs(P.y - qs)) - qs;\\n    float s2 \u003d max(abs(P.x + qs), abs(P.y - qs)) - qs;\\n    float s3 \u003d max(abs(P.x - qs), abs(P.y + qs)) - qs;\\n    float s4 \u003d max(abs(P.x + qs), abs(P.y + qs)) - qs;\\n    // Intersect main shape with quadrants (to form cross)\\n    float circle \u003d length(P) - size/2.0;\\n    float c1 \u003d max(circle, s1);\\n    float c2 \u003d max(circle, s2);\\n    float c3 \u003d max(circle, s3);\\n    float c4 \u003d max(circle, s4);\\n    // Union\\n    return min(min(min(c1, c2), c3), c4);\\n}\\n#endif\\n\\n#ifdef USE_SQUARE_CROSS\\n// square_cross\\nfloat marker(vec2 P, float size)\\n{\\n    // Define quadrants\\n    float qs \u003d size / 2.0;  // quadrant size\\n    float s1 \u003d max(abs(P.x - qs), abs(P.y - qs)) - qs;\\n    float s2 \u003d max(abs(P.x + qs), abs(P.y - qs)) - qs;\\n    float s3 \u003d max(abs(P.x - qs), abs(P.y + qs)) - qs;\\n    float s4 \u003d max(abs(P.x + qs), abs(P.y + qs)) - qs;\\n    // Intersect main shape with quadrants (to form cross)\\n    float square \u003d max(abs(P.x), abs(P.y)) - size/2.0;\\n    float c1 \u003d max(square, s1);\\n    float c2 \u003d max(square, s2);\\n    float c3 \u003d max(square, s3);\\n    float c4 \u003d max(square, s4);\\n    // Union\\n    return min(min(min(c1, c2), c3), c4);\\n}\\n#endif\\n\\n#ifdef USE_DIAMOND_CROSS\\n// diamond_cross\\nfloat marker(vec2 P, float size)\\n{\\n    // Define quadrants\\n    float qs \u003d size / 2.0;  // quadrant size\\n    float s1 \u003d max(abs(P.x - qs), abs(P.y - qs)) - qs;\\n    float s2 \u003d max(abs(P.x + qs), abs(P.y - qs)) - qs;\\n    float s3 \u003d max(abs(P.x - qs), abs(P.y + qs)) - qs;\\n    float s4 \u003d max(abs(P.x + qs), abs(P.y + qs)) - qs;\\n    // Intersect main shape with quadrants (to form cross)\\n    float x \u003d SQRT_2 / 2.0 * (P.x * 1.5 - P.y);\\n    float y \u003d SQRT_2 / 2.0 * (P.x * 1.5 + P.y);\\n    float diamond \u003d max(abs(x), abs(y)) - size / (2.0 * SQRT_2);\\n    diamond /\u003d SQRT_2;\\n    float c1 \u003d max(diamond, s1);\\n    float c2 \u003d max(diamond, s2);\\n    float c3 \u003d max(diamond, s3);\\n    float c4 \u003d max(diamond, s4);\\n    // Union\\n    return min(min(min(c1, c2), c3), c4);\\n}\\n#endif\\n\\n#ifdef USE_X\\n// x\\nfloat marker(vec2 P, float size)\\n{\\n    float circle \u003d length(P) - size / 1.6;\\n    float X \u003d min(abs(P.x - P.y), abs(P.x + P.y)) - size / 100.0;  // bit of \"width\" for aa\\n    return max(circle, X);\\n}\\n#endif\\n\\n#ifdef USE_CIRCLE_X\\n// circle_x\\nfloat marker(vec2 P, float size)\\n{\\n    float x \u003d P.x - P.y;\\n    float y \u003d P.x + P.y;\\n    // Define quadrants\\n    float qs \u003d size / 2.0;  // quadrant size\\n    float s1 \u003d max(abs(x - qs), abs(y - qs)) - qs;\\n    float s2 \u003d max(abs(x + qs), abs(y - qs)) - qs;\\n    float s3 \u003d max(abs(x - qs), abs(y + qs)) - qs;\\n    float s4 \u003d max(abs(x + qs), abs(y + qs)) - qs;\\n    // Intersect main shape with quadrants (to form cross)\\n    float circle \u003d length(P) - size/2.0;\\n    float c1 \u003d max(circle, s1);\\n    float c2 \u003d max(circle, s2);\\n    float c3 \u003d max(circle, s3);\\n    float c4 \u003d max(circle, s4);\\n    // Union\\n    float almost \u003d min(min(min(c1, c2), c3), c4);\\n    // In this case, the X is also outside of the main shape\\n    float Xmask \u003d length(P) - size / 1.6;  // a circle\\n    float X \u003d min(abs(P.x - P.y), abs(P.x + P.y)) - size / 100.0;  // bit of \"width\" for aa\\n    return min(max(X, Xmask), almost);\\n}\\n#endif\\n\\n#ifdef USE_SQUARE_X\\n// square_x\\nfloat marker(vec2 P, float size)\\n{\\n    float x \u003d P.x - P.y;\\n    float y \u003d P.x + P.y;\\n    // Define quadrants\\n    float qs \u003d size / 2.0;  // quadrant size\\n    float s1 \u003d max(abs(x - qs), abs(y - qs)) - qs;\\n    float s2 \u003d max(abs(x + qs), abs(y - qs)) - qs;\\n    float s3 \u003d max(abs(x - qs), abs(y + qs)) - qs;\\n    float s4 \u003d max(abs(x + qs), abs(y + qs)) - qs;\\n    // Intersect main shape with quadrants (to form cross)\\n    float square \u003d max(abs(P.x), abs(P.y)) - size/2.0;\\n    float c1 \u003d max(square, s1);\\n    float c2 \u003d max(square, s2);\\n    float c3 \u003d max(square, s3);\\n    float c4 \u003d max(square, s4);\\n    // Union\\n    return min(min(min(c1, c2), c3), c4);\\n}\\n#endif\\n\\nvec4 outline(float distance, float linewidth, float antialias, vec4 fg_color, vec4 bg_color)\\n{\\n    vec4 frag_color;\\n    float t \u003d linewidth/2.0 - antialias;\\n    float signed_distance \u003d distance;\\n    float border_distance \u003d abs(signed_distance) - t;\\n    float alpha \u003d border_distance/antialias;\\n    alpha \u003d exp(-alpha*alpha);\\n\\n    // If fg alpha is zero, it probably means no outline. To avoid a dark outline\\n    // shining through due to aa, we set the fg color to the bg color. Avoid if (i.e. branching).\\n    float select \u003d float(bool(fg_color.a));\\n    fg_color.rgb \u003d select * fg_color.rgb + (1.0  - select) * bg_color.rgb;\\n    // Similarly, if we want a transparent bg\\n    select \u003d float(bool(bg_color.a));\\n    bg_color.rgb \u003d select * bg_color.rgb + (1.0  - select) * fg_color.rgb;\\n\\n    if( border_distance \u003c 0.0)\\n        frag_color \u003d fg_color;\\n    else if( signed_distance \u003c 0.0 ) {\\n        frag_color \u003d mix(bg_color, fg_color, sqrt(alpha));\\n    } else {\\n        if( abs(signed_distance) \u003c (linewidth/2.0 + antialias) ) {\\n            frag_color \u003d vec4(fg_color.rgb, fg_color.a * alpha);\\n        } else {\\n            discard;\\n        }\\n    }\\n    return frag_color;\\n}\\n\\nvoid main()\\n{\\n    vec2 P \u003d gl_PointCoord.xy - vec2(0.5, 0.5);\\n    P \u003d vec2(v_rotation.x*P.x - v_rotation.y*P.y,\\n             v_rotation.y*P.x + v_rotation.x*P.y);\\n    float point_size \u003d SQRT_2*v_size  + 2.0 * (v_linewidth + 1.5*u_antialias);\\n    float distance \u003d marker(P*point_size, v_size);\\n    gl_FragColor \u003d outline(distance, v_linewidth, u_antialias, v_fg_color, v_bg_color);\\n}\\n\u0027},\n      function _(e,l,i,s,t){s();const _\u003de(287);class p extends _.EllipseOvalView{}i.EllipseView\u003dp,p.__name__\u003d\"EllipseView\";class n extends _.EllipseOval{constructor(e){super(e)}static init_Ellipse(){this.prototype.default_view\u003dp}}i.Ellipse\u003dn,n.__name__\u003d\"Ellipse\",n.init_Ellipse()},\n      function _(t,s,i,e,h){e();const r\u003dt(1),a\u003dt(288),n\u003dr.__importStar(t(107)),l\u003dt(24),o\u003dt(59),_\u003dr.__importStar(t(18));class d extends a.CenterRotatableView{_map_data(){\"data\"\u003d\u003dthis.model.properties.width.units?this.sw\u003dthis.sdist(this.renderer.xscale,this._x,this.width,\"center\"):this.sw\u003dl.to_screen(this.width),\"data\"\u003d\u003dthis.model.properties.height.units?this.sh\u003dthis.sdist(this.renderer.yscale,this._y,this.height,\"center\"):this.sh\u003dl.to_screen(this.height)}_render(t,s,i){const{sx:e,sy:h,sw:r,sh:a,angle:n}\u003dnull!\u003di?i:this;for(const i of s){const s\u003de[i],l\u003dh[i],o\u003dr[i],_\u003da[i],d\u003dn.get(i);isNaN(s+l+o+_+d)||(t.beginPath(),t.ellipse(s,l,o/2,_/2,d,0,2*Math.PI),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(t,i),t.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(t,i),t.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(t,i),t.stroke()))}}_hit_point(t){let s,i,e,h,r,a,l,_,d;const{sx:c,sy:w}\u003dt,x\u003dthis.renderer.xscale.invert(c),p\u003dthis.renderer.yscale.invert(w);\"data\"\u003d\u003dthis.model.properties.width.units?(s\u003dx-this.max_width,i\u003dx+this.max_width):(a\u003dc-this.max_width,l\u003dc+this.max_width,[s,i]\u003dthis.renderer.xscale.r_invert(a,l)),\"data\"\u003d\u003dthis.model.properties.height.units?(e\u003dp-this.max_height,h\u003dp+this.max_height):(_\u003dw-this.max_height,d\u003dw+this.max_height,[e,h]\u003dthis.renderer.yscale.r_invert(_,d));const m\u003dthis.index.indices({x0:s,x1:i,y0:e,y1:h}),v\u003d[];for(const t of m)r\u003dn.point_in_ellipse(c,w,this.angle.get(t),this.sh[t]/2,this.sw[t]/2,this.sx[t],this.sy[t]),r\u0026\u0026v.push(t);return new o.Selection({indices:v})}draw_legend_for_index(t,{x0:s,y0:i,x1:e,y1:h},r){const a\u003dr+1,n\u003dnew Array(a);n[r]\u003d(s+e)/2;const l\u003dnew Array(a);l[r]\u003d(i+h)/2;const o\u003dthis.sw[r]/this.sh[r],d\u003d.8*Math.min(Math.abs(e-s),Math.abs(h-i)),c\u003dnew Array(a),w\u003dnew Array(a);o\u003e1?(c[r]\u003dd,w[r]\u003dd/o):(c[r]\u003dd*o,w[r]\u003dd);const x\u003dnew _.UniformScalar(0,a);this._render(t,[r],{sx:n,sy:l,sw:c,sh:w,angle:x})}}i.EllipseOvalView\u003dd,d.__name__\u003d\"EllipseOvalView\";class c extends a.CenterRotatable{constructor(t){super(t)}}i.EllipseOval\u003dc,c.__name__\u003d\"EllipseOval\"},\n      function _(t,e,i,a,n){a();const s\u003dt(1),h\u003dt(64),r\u003dt(48),o\u003ds.__importStar(t(18));class _ extends h.XYGlyphView{get max_w2(){return\"data\"\u003d\u003dthis.model.properties.width.units?this.max_width/2:0}get max_h2(){return\"data\"\u003d\u003dthis.model.properties.height.units?this.max_height/2:0}_bounds({x0:t,x1:e,y0:i,y1:a}){const{max_w2:n,max_h2:s}\u003dthis;return{x0:t-n,x1:e+n,y0:i-s,y1:a+s}}}i.CenterRotatableView\u003d_,_.__name__\u003d\"CenterRotatableView\";class l extends h.XYGlyph{constructor(t){super(t)}static init_CenterRotatable(){this.mixins([r.LineVector,r.FillVector,r.HatchVector]),this.define((({})\u003d\u003e({angle:[o.AngleSpec,0],width:[o.DistanceSpec,{field:\"width\"}],height:[o.DistanceSpec,{field:\"height\"}]})))}}i.CenterRotatable\u003dl,l.__name__\u003d\"CenterRotatable\",l.init_CenterRotatable()},\n      function _(t,e,s,i,h){i();const r\u003dt(1),a\u003dt(290),n\u003dt(24),_\u003dr.__importStar(t(18));class o extends a.BoxView{scenterxy(t){return[(this.sleft[t]+this.sright[t])/2,this.sy[t]]}_lrtb(t){const e\u003dthis._left[t],s\u003dthis._right[t],i\u003dthis._y[t],h\u003dthis.height.get(t)/2;return[Math.min(e,s),Math.max(e,s),i+h,i-h]}_map_data(){this.sy\u003dthis.renderer.yscale.v_compute(this._y),this.sh\u003dthis.sdist(this.renderer.yscale,this._y,this.height,\"center\"),this.sleft\u003dthis.renderer.xscale.v_compute(this._left),this.sright\u003dthis.renderer.xscale.v_compute(this._right);const t\u003dthis.sy.length;this.stop\u003dnew n.ScreenArray(t),this.sbottom\u003dnew n.ScreenArray(t);for(let e\u003d0;e\u003ct;e++)this.stop[e]\u003dthis.sy[e]-this.sh[e]/2,this.sbottom[e]\u003dthis.sy[e]+this.sh[e]/2;this._clamp_viewport()}}s.HBarView\u003do,o.__name__\u003d\"HBarView\";class c extends a.Box{constructor(t){super(t)}static init_HBar(){this.prototype.default_view\u003do,this.define((({})\u003d\u003e({left:[_.XCoordinateSpec,{value:0}],y:[_.YCoordinateSpec,{field:\"y\"}],height:[_.NumberSpec,{value:1}],right:[_.XCoordinateSpec,{field:\"right\"}]})))}}s.HBar\u003dc,c.__name__\u003d\"HBar\",c.init_HBar()},\n      function _(t,e,s,i,r){i();const n\u003dt(48),o\u003dt(98),a\u003dt(106),h\u003dt(59);class c extends o.GlyphView{get_anchor_point(t,e,s){const i\u003dMath.min(this.sleft[e],this.sright[e]),r\u003dMath.max(this.sright[e],this.sleft[e]),n\u003dMath.min(this.stop[e],this.sbottom[e]),o\u003dMath.max(this.sbottom[e],this.stop[e]);switch(t){case\"top_left\":return{x:i,y:n};case\"top\":case\"top_center\":return{x:(i+r)/2,y:n};case\"top_right\":return{x:r,y:n};case\"bottom_left\":return{x:i,y:o};case\"bottom\":case\"bottom_center\":return{x:(i+r)/2,y:o};case\"bottom_right\":return{x:r,y:o};case\"left\":case\"center_left\":return{x:i,y:(n+o)/2};case\"center\":case\"center_center\":return{x:(i+r)/2,y:(n+o)/2};case\"right\":case\"center_right\":return{x:r,y:(n+o)/2}}}_index_data(t){const{min:e,max:s}\u003dMath,{data_size:i}\u003dthis;for(let r\u003d0;r\u003ci;r++){const[i,n,o,a]\u003dthis._lrtb(r);isNaN(i+n+o+a)||!isFinite(i+n+o+a)?t.add_empty():t.add(e(i,n),e(o,a),s(n,i),s(o,a))}}_render(t,e,s){const{sleft:i,sright:r,stop:n,sbottom:o}\u003dnull!\u003ds?s:this;for(const s of e){const e\u003di[s],h\u003dn[s],c\u003dr[s],_\u003do[s];function a(){t.beginPath(),t.rect(e,h,c-e,_-h)}isNaN(e+h+c+_)||(this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(t,s),a(),t.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(t,s),a(),t.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(t,s),a(),t.stroke()))}}_clamp_viewport(){const t\u003dthis.renderer.plot_view.frame.bbox.h_range,e\u003dthis.renderer.plot_view.frame.bbox.v_range,s\u003dthis.stop.length;for(let i\u003d0;i\u003cs;i++)this.stop[i]\u003dMath.max(this.stop[i],e.start),this.sbottom[i]\u003dMath.min(this.sbottom[i],e.end),this.sleft[i]\u003dMath.max(this.sleft[i],t.start),this.sright[i]\u003dMath.min(this.sright[i],t.end)}_hit_rect(t){return this._hit_rect_against_index(t)}_hit_point(t){const{sx:e,sy:s}\u003dt,i\u003dthis.renderer.xscale.invert(e),r\u003dthis.renderer.yscale.invert(s),n\u003d[...this.index.indices({x0:i,y0:r,x1:i,y1:r})];return new h.Selection({indices:n})}_hit_span(t){const{sx:e,sy:s}\u003dt;let i;if(\"v\"\u003d\u003dt.direction){const t\u003dthis.renderer.yscale.invert(s),e\u003dthis.renderer.plot_view.frame.bbox.h_range,[r,n]\u003dthis.renderer.xscale.r_invert(e.start,e.end);i\u003d[...this.index.indices({x0:r,y0:t,x1:n,y1:t})]}else{const t\u003dthis.renderer.xscale.invert(e),s\u003dthis.renderer.plot_view.frame.bbox.v_range,[r,n]\u003dthis.renderer.yscale.r_invert(s.start,s.end);i\u003d[...this.index.indices({x0:t,y0:r,x1:t,y1:n})]}return new h.Selection({indices:i})}draw_legend_for_index(t,e,s){a.generic_area_vector_legend(this.visuals,t,e,s)}}s.BoxView\u003dc,c.__name__\u003d\"BoxView\";class _ extends o.Glyph{constructor(t){super(t)}static init_Box(){this.mixins([n.LineVector,n.FillVector,n.HatchVector])}}s.Box\u003d_,_.__name__\u003d\"Box\",_.init_Box()},\n      function _(e,t,s,i,r){i();const n\u003de(1),o\u003de(98),a\u003dn.__importStar(e(107)),c\u003dn.__importStar(e(18)),l\u003de(48),h\u003de(20),_\u003de(65),d\u003de(106),x\u003de(59);class p extends o.GlyphView{scenterxy(e){return[this.sx[e],this.sy[e]]}_set_data(){const{orientation:e,size:t,aspect_scale:s}\u003dthis.model,{q:i,r}\u003dthis,n\u003dthis.q.length;this._x\u003dnew Float64Array(n),this._y\u003dnew Float64Array(n);const{_x:o,_y:a}\u003dthis,c\u003dMath.sqrt(3);if(\"pointytop\"\u003d\u003de)for(let e\u003d0;e\u003cn;e++){const n\u003di.get(e),l\u003dr.get(e)/2;o[e]\u003dt*c*(n+l)/s,a[e]\u003d-3*t*l}else for(let e\u003d0;e\u003cn;e++){const n\u003di.get(e)/2,l\u003dr.get(e);o[e]\u003d3*t*n,a[e]\u003d-t*c*(l+n)*s}}_project_data(){_.inplace.project_xy(this._x,this._y)}_index_data(e){let t\u003dthis.model.size,s\u003dMath.sqrt(3)*t/2;\"flattop\"\u003d\u003dthis.model.orientation?([s,t]\u003d[t,s],t*\u003dthis.model.aspect_scale):s/\u003dthis.model.aspect_scale;const{data_size:i}\u003dthis;for(let r\u003d0;r\u003ci;r++){const i\u003dthis._x[r],n\u003dthis._y[r];isNaN(i+n)||!isFinite(i+n)?e.add_empty():e.add(i-s,n-t,i+s,n+t)}}map_data(){[this.sx,this.sy]\u003dthis.renderer.coordinates.map_to_screen(this._x,this._y),[this.svx,this.svy]\u003dthis._get_unscaled_vertices()}_get_unscaled_vertices(){const e\u003dthis.model.size,t\u003dthis.model.aspect_scale;if(\"pointytop\"\u003d\u003dthis.model.orientation){const s\u003dthis.renderer.yscale,i\u003dthis.renderer.xscale,r\u003dMath.abs(s.compute(0)-s.compute(e)),n\u003dMath.sqrt(3)/2*Math.abs(i.compute(0)-i.compute(e))/t,o\u003dr/2;return[[0,-n,-n,0,n,n],[r,o,-o,-r,-o,o]]}{const s\u003dthis.renderer.xscale,i\u003dthis.renderer.yscale,r\u003dMath.abs(s.compute(0)-s.compute(e)),n\u003dMath.sqrt(3)/2*Math.abs(i.compute(0)-i.compute(e))*t,o\u003dr/2;return[[r,o,-o,-r,-o,o],[0,-n,-n,0,n,n]]}}_render(e,t,s){const{sx:i,sy:r,svx:n,svy:o,scale:a}\u003dnull!\u003ds?s:this;for(const s of t){const t\u003di[s],c\u003dr[s],l\u003da.get(s);if(!isNaN(t+c+l)){e.translate(t,c),e.beginPath();for(let t\u003d0;t\u003c6;t++)e.lineTo(n[t]*l,o[t]*l);e.closePath(),e.translate(-t,-c),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(e,s),e.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(e,s),e.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(e,s),e.stroke())}}}_hit_point(e){const{sx:t,sy:s}\u003de,i\u003dthis.renderer.xscale.invert(t),r\u003dthis.renderer.yscale.invert(s),n\u003dthis.index.indices({x0:i,y0:r,x1:i,y1:r}),o\u003d[];for(const e of n)a.point_in_poly(t-this.sx[e],s-this.sy[e],this.svx,this.svy)\u0026\u0026o.push(e);return new x.Selection({indices:o})}_hit_span(e){const{sx:t,sy:s}\u003de;let i;if(\"v\"\u003d\u003de.direction){const e\u003dthis.renderer.yscale.invert(s),t\u003dthis.renderer.plot_view.frame.bbox.h_range,[r,n]\u003dthis.renderer.xscale.r_invert(t.start,t.end);i\u003d[...this.index.indices({x0:r,y0:e,x1:n,y1:e})]}else{const e\u003dthis.renderer.xscale.invert(t),s\u003dthis.renderer.plot_view.frame.bbox.v_range,[r,n]\u003dthis.renderer.yscale.r_invert(s.start,s.end);i\u003d[...this.index.indices({x0:e,y0:r,x1:e,y1:n})]}return new x.Selection({indices:i})}_hit_rect(e){const{sx0:t,sx1:s,sy0:i,sy1:r}\u003de,[n,o]\u003dthis.renderer.xscale.r_invert(t,s),[a,c]\u003dthis.renderer.yscale.r_invert(i,r),l\u003d[...this.index.indices({x0:n,x1:o,y0:a,y1:c})];return new x.Selection({indices:l})}draw_legend_for_index(e,t,s){d.generic_area_vector_legend(this.visuals,e,t,s)}}s.HexTileView\u003dp,p.__name__\u003d\"HexTileView\";class y extends o.Glyph{constructor(e){super(e)}static init_HexTile(){this.prototype.default_view\u003dp,this.mixins([l.LineVector,l.FillVector,l.HatchVector]),this.define((({Number:e})\u003d\u003e({r:[c.NumberSpec,{field:\"r\"}],q:[c.NumberSpec,{field:\"q\"}],scale:[c.NumberSpec,1],size:[e,1],aspect_scale:[e,1],orientation:[h.HexTileOrientation,\"pointytop\"]}))),this.override({line_color:null})}}s.HexTile\u003dy,y.__name__\u003d\"HexTile\",y.init_HexTile()},\n      function _(e,a,t,_,s){_();const i\u003de(293),n\u003de(203),r\u003de(214);class o extends i.ImageBaseView{connect_signals(){super.connect_signals(),this.connect(this.model.color_mapper.change,(()\u003d\u003ethis._update_image()))}_update_image(){null!\u003dthis.image_data\u0026\u0026(this._set_data(null),this.renderer.request_render())}_flat_img_to_buf8(e){return this.model.color_mapper.rgba_mapper.v_compute(e)}}t.ImageView\u003do,o.__name__\u003d\"ImageView\";class m extends i.ImageBase{constructor(e){super(e)}static init_Image(){this.prototype.default_view\u003do,this.define((({Ref:e})\u003d\u003e({color_mapper:[e(n.ColorMapper),()\u003d\u003enew r.LinearColorMapper({palette:[\"#000000\",\"#252525\",\"#525252\",\"#737373\",\"#969696\",\"#bdbdbd\",\"#d9d9d9\",\"#f0f0f0\",\"#ffffff\"]})]})))}}t.Image\u003dm,m.__name__\u003d\"Image\",m.init_Image()},\n      function _(e,t,i,s,a){s();const h\u003de(1),n\u003de(64),r\u003de(24),_\u003dh.__importStar(e(18)),d\u003de(59),l\u003de(9),g\u003de(29),o\u003de(11);class c extends n.XYGlyphView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.global_alpha.change,(()\u003d\u003ethis.renderer.request_render()))}_render(e,t,i){const{image_data:s,sx:a,sy:h,sw:n,sh:r}\u003dnull!\u003di?i:this,_\u003de.getImageSmoothingEnabled();e.setImageSmoothingEnabled(!1),e.globalAlpha\u003dthis.model.global_alpha;for(const i of t){const t\u003ds[i],_\u003da[i],d\u003dh[i],l\u003dn[i],g\u003dr[i];if(null\u003d\u003dt||isNaN(_+d+l+g))continue;const o\u003dd;e.translate(0,o),e.scale(1,-1),e.translate(0,-o),e.drawImage(t,0|_,0|d,l,g),e.translate(0,o),e.scale(1,-1),e.translate(0,-o)}e.setImageSmoothingEnabled(_)}_set_data(e){this._set_width_heigh_data();for(let t\u003d0,i\u003dthis.image.length;t\u003ci;t++){if(null!\u003de\u0026\u0026e.indexOf(t)\u003c0)continue;const i\u003dthis.image.get(t);let s;g.is_NDArray(i)?(o.assert(2\u003d\u003di.dimension,\"expected a 2D array\"),s\u003di,this._height[t]\u003di.shape[0],this._width[t]\u003di.shape[1]):(s\u003dl.concat(i),this._height[t]\u003di.length,this._width[t]\u003di[0].length);const a\u003dthis._flat_img_to_buf8(s);this._set_image_data_from_buffer(t,a)}}_index_data(e){const{data_size:t}\u003dthis;for(let i\u003d0;i\u003ct;i++){const[t,s,a,h]\u003dthis._lrtb(i);isNaN(t+s+a+h)||!isFinite(t+s+a+h)?e.add_empty():e.add(t,h,s,a)}}_lrtb(e){const t\u003dthis.dw.get(e),i\u003dthis.dh.get(e),s\u003dthis.renderer.xscale.source_range,a\u003dthis._x[e],h\u003ds.is_reversed?a-t:a+t,n\u003dthis.renderer.yscale.source_range,r\u003dthis._y[e],_\u003dn.is_reversed?r-i:r+i,[d,l]\u003da\u003ch?[a,h]:[h,a],[g,o]\u003dr\u003c_?[r,_]:[_,r];return[d,l,o,g]}_set_width_heigh_data(){null!\u003dthis.image_data\u0026\u0026this.image_data.length\u003d\u003dthis.image.length||(this.image_data\u003dnew Array(this.image.length)),null!\u003dthis._width\u0026\u0026this._width.length\u003d\u003dthis.image.length||(this._width\u003dnew Uint32Array(this.image.length)),null!\u003dthis._height\u0026\u0026this._height.length\u003d\u003dthis.image.length||(this._height\u003dnew Uint32Array(this.image.length))}_get_or_create_canvas(e){const t\u003dthis.image_data[e];if(null!\u003dt\u0026\u0026t.width\u003d\u003dthis._width[e]\u0026\u0026t.height\u003d\u003dthis._height[e])return t;{const t\u003ddocument.createElement(\"canvas\");return t.width\u003dthis._width[e],t.height\u003dthis._height[e],t}}_set_image_data_from_buffer(e,t){const i\u003dthis._get_or_create_canvas(e),s\u003di.getContext(\"2d\"),a\u003ds.getImageData(0,0,this._width[e],this._height[e]);a.data.set(t),s.putImageData(a,0,0),this.image_data[e]\u003di}_map_data(){\"data\"\u003d\u003dthis.model.properties.dw.units?this.sw\u003dthis.sdist(this.renderer.xscale,this._x,this.dw,\"edge\",this.model.dilate):this.sw\u003dr.to_screen(this.dw),\"data\"\u003d\u003dthis.model.properties.dh.units?this.sh\u003dthis.sdist(this.renderer.yscale,this._y,this.dh,\"edge\",this.model.dilate):this.sh\u003dr.to_screen(this.dh)}_image_index(e,t,i){const[s,a,h,n]\u003dthis._lrtb(e),r\u003dthis._width[e],_\u003dthis._height[e],d\u003d(a-s)/r,l\u003d(h-n)/_;let g\u003dMath.floor((t-s)/d),o\u003dMath.floor((i-n)/l);return this.renderer.xscale.source_range.is_reversed\u0026\u0026(g\u003dr-g-1),this.renderer.yscale.source_range.is_reversed\u0026\u0026(o\u003d_-o-1),{index:e,dim1:g,dim2:o,flat_index:o*r+g}}_hit_point(e){const{sx:t,sy:i}\u003de,s\u003dthis.renderer.xscale.invert(t),a\u003dthis.renderer.yscale.invert(i),h\u003dthis.index.indices({x0:s,x1:s,y0:a,y1:a}),n\u003dnew d.Selection;for(const e of h)t!\u003d1/0\u0026\u0026i!\u003d1/0\u0026\u0026n.image_indices.push(this._image_index(e,s,a));return n}}i.ImageBaseView\u003dc,c.__name__\u003d\"ImageBaseView\";class m extends n.XYGlyph{constructor(e){super(e)}static init_ImageBase(){this.define((({Boolean:e,Alpha:t})\u003d\u003e({image:[_.NDArraySpec,{field:\"image\"}],dw:[_.DistanceSpec,{field:\"dw\"}],dh:[_.DistanceSpec,{field:\"dh\"}],dilate:[e,!1],global_alpha:[t,1]})))}}i.ImageBase\u003dm,m.__name__\u003d\"ImageBase\",m.init_ImageBase()},\n      function _(e,a,t,_,i){_();const n\u003de(293),s\u003de(8);class r extends n.ImageBaseView{_flat_img_to_buf8(e){let a;return a\u003ds.isArray(e)?new Uint32Array(e):e,new Uint8ClampedArray(a.buffer)}}t.ImageRGBAView\u003dr,r.__name__\u003d\"ImageRGBAView\";class m extends n.ImageBase{constructor(e){super(e)}static init_ImageRGBA(){this.prototype.default_view\u003dr}}t.ImageRGBA\u003dm,m.__name__\u003d\"ImageRGBA\",m.init_ImageRGBA()},\n      function _(e,t,s,r,a){r();const i\u003de(1),n\u003de(64),o\u003de(24),c\u003de(20),_\u003di.__importStar(e(18)),h\u003de(12),l\u003de(296);class d extends n.XYGlyphView{constructor(){super(...arguments),this._images_rendered\u003d!1,this._set_data_iteration\u003d0}connect_signals(){super.connect_signals(),this.connect(this.model.properties.global_alpha.change,(()\u003d\u003ethis.renderer.request_render()))}_index_data(e){const{data_size:t}\u003dthis;for(let s\u003d0;s\u003ct;s++)e.add_empty()}_set_data(){this._set_data_iteration++;const e\u003dthis.url.length;this.image\u003dnew Array(e);const{retry_attempts:t,retry_timeout:s}\u003dthis.model,{_set_data_iteration:r}\u003dthis;for(let a\u003d0;a\u003ce;a++){const e\u003dthis.url.get(a);e\u0026\u0026new l.ImageLoader(e,{loaded:e\u003d\u003e{this._set_data_iteration\u003d\u003dr\u0026\u0026(this.image[a]\u003de,this.renderer.request_render())},attempts:t+1,timeout:s})}const a\u003d\"data\"\u003d\u003dthis.model.properties.w.units,i\u003d\"data\"\u003d\u003dthis.model.properties.h.units,n\u003dthis._x.length,c\u003dnew o.ScreenArray(a?2*n:n),_\u003dnew o.ScreenArray(i?2*n:n),{anchor:d}\u003dthis.model;function m(e,t){switch(d){case\"top_left\":case\"bottom_left\":case\"left\":case\"center_left\":return[e,e+t];case\"top\":case\"top_center\":case\"bottom\":case\"bottom_center\":case\"center\":case\"center_center\":return[e-t/2,e+t/2];case\"top_right\":case\"bottom_right\":case\"right\":case\"center_right\":return[e-t,e]}}function g(e,t){switch(d){case\"top_left\":case\"top\":case\"top_center\":case\"top_right\":return[e,e-t];case\"bottom_left\":case\"bottom\":case\"bottom_center\":case\"bottom_right\":return[e+t,e];case\"left\":case\"center_left\":case\"center\":case\"center_center\":case\"right\":case\"center_right\":return[e+t/2,e-t/2]}}if(a)for(let e\u003d0;e\u003cn;e++)[c[e],c[n+e]]\u003dm(this._x[e],this.w.get(e));else c.set(this._x,0);if(i)for(let e\u003d0;e\u003cn;e++)[_[e],_[n+e]]\u003dg(this._y[e],this.h.get(e));else _.set(this._y,0);const[u,p]\u003dh.minmax(c),[f,b]\u003dh.minmax(_);this._bounds_rect\u003d{x0:u,x1:p,y0:f,y1:b}}has_finished(){return super.has_finished()\u0026\u00261\u003d\u003dthis._images_rendered}_map_data(){\"data\"\u003d\u003dthis.model.properties.w.units?this.sw\u003dthis.sdist(this.renderer.xscale,this._x,this.w,\"edge\",this.model.dilate):this.sw\u003do.to_screen(this.w),\"data\"\u003d\u003dthis.model.properties.h.units?this.sh\u003dthis.sdist(this.renderer.yscale,this._y,this.h,\"edge\",this.model.dilate):this.sh\u003do.to_screen(this.h)}_render(e,t,s){const{image:r,sx:a,sy:i,sw:n,sh:o,angle:c}\u003dnull!\u003ds?s:this,{frame:_}\u003dthis.renderer.plot_view;e.rect(_.bbox.left+1,_.bbox.top+1,_.bbox.width-2,_.bbox.height-2),e.clip();let h\u003d!0;for(const s of t){if(isNaN(a[s]+i[s]+c.get(s)))continue;const t\u003dr[s];null!\u003dt?this._render_image(e,s,t,a,i,n,o,c):h\u003d!1}h\u0026\u0026!this._images_rendered\u0026\u0026(this._images_rendered\u003d!0,this.notify_finished())}_final_sx_sy(e,t,s,r,a){switch(e){case\"top_left\":return[t,s];case\"top\":case\"top_center\":return[t-r/2,s];case\"top_right\":return[t-r,s];case\"right\":case\"center_right\":return[t-r,s-a/2];case\"bottom_right\":return[t-r,s-a];case\"bottom\":case\"bottom_center\":return[t-r/2,s-a];case\"bottom_left\":return[t,s-a];case\"left\":case\"center_left\":return[t,s-a/2];case\"center\":case\"center_center\":return[t-r/2,s-a/2]}}_render_image(e,t,s,r,a,i,n,o){isNaN(i[t])\u0026\u0026(i[t]\u003ds.width),isNaN(n[t])\u0026\u0026(n[t]\u003ds.height);const c\u003di[t],_\u003dn[t],{anchor:h}\u003dthis.model,[l,d]\u003dthis._final_sx_sy(h,r[t],a[t],c,_),m\u003do.get(t);e.save(),e.globalAlpha\u003dthis.model.global_alpha;const g\u003dc/2,u\u003d_/2;m?(e.translate(l,d),e.translate(g,u),e.rotate(m),e.translate(-g,-u),e.drawImage(s,0,0,c,_),e.translate(g,u),e.rotate(-m),e.translate(-g,-u),e.translate(-l,-d)):e.drawImage(s,l,d,c,_),e.restore()}bounds(){return this._bounds_rect}}s.ImageURLView\u003dd,d.__name__\u003d\"ImageURLView\";class m extends n.XYGlyph{constructor(e){super(e)}static init_ImageURL(){this.prototype.default_view\u003dd,this.define((({Boolean:e,Int:t,Alpha:s})\u003d\u003e({url:[_.StringSpec,{field:\"url\"}],anchor:[c.Anchor,\"top_left\"],global_alpha:[s,1],angle:[_.AngleSpec,0],w:[_.NullDistanceSpec,null],h:[_.NullDistanceSpec,null],dilate:[e,!1],retry_attempts:[t,0],retry_timeout:[t,0]})))}}s.ImageURL\u003dm,m.__name__\u003d\"ImageURL\",m.init_ImageURL()},\n      function _(i,e,t,s,o){s();const a\u003di(19);class n{constructor(i,e\u003d{}){this._image\u003dnew Image,this._finished\u003d!1;const{attempts:t\u003d1,timeout:s\u003d1}\u003de;this.promise\u003dnew Promise(((o,n)\u003d\u003e{this._image.crossOrigin\u003d\"anonymous\";let r\u003d0;this._image.onerror\u003d()\u003d\u003e{if(++r\u003d\u003dt){const s\u003d`unable to load ${i} image after ${t} attempts`;if(a.logger.warn(s),null\u003d\u003dthis._image.crossOrigin)return void(null!\u003de.failed\u0026\u0026e.failed());a.logger.warn(`attempting to load ${i} without a cross origin policy`),this._image.crossOrigin\u003dnull,r\u003d0}setTimeout((()\u003d\u003ethis._image.src\u003di),s)},this._image.onload\u003d()\u003d\u003e{this._finished\u003d!0,null!\u003de.loaded\u0026\u0026e.loaded(this._image),o(this._image)},this._image.src\u003di}))}get finished(){return this._finished}get image(){if(this._finished)return this._image;throw new Error(\"not loaded yet\")}}t.ImageLoader\u003dn,n.__name__\u003d\"ImageLoader\"},\n      function _(t,s,e,i,n){i();const o\u003dt(1),l\u003dt(101),r\u003dt(98),h\u003dt(106),_\u003dt(12),a\u003dt(12),c\u003dt(48),d\u003do.__importStar(t(107)),x\u003do.__importStar(t(18)),y\u003dt(59),f\u003dt(11);class g extends r.GlyphView{_project_data(){}_index_data(t){const{min:s,max:e}\u003dMath,{data_size:i}\u003dthis;for(let n\u003d0;n\u003ci;n++){const i\u003dthis._xs[n],o\u003dthis._ys[n];if(0\u003d\u003di.length||0\u003d\u003do.length){t.add_empty();continue}let l\u003d1/0,r\u003d-1/0,h\u003d1/0,a\u003d-1/0;for(let t\u003d0,n\u003di.length;t\u003cn;t++){const n\u003di[t][0],c\u003do[t][0];if(0!\u003dn.length\u0026\u00260!\u003dc.length){const[t,i]\u003d_.minmax(n),[o,d]\u003d_.minmax(c);l\u003ds(l,t),r\u003de(r,i),h\u003ds(h,o),a\u003de(a,d)}}isFinite(l+r+h+a)?t.add(l,h,r,a):t.add_empty()}this._hole_index\u003dthis._index_hole_data()}_index_hole_data(){const{min:t,max:s}\u003dMath,{data_size:e}\u003dthis,i\u003dnew l.SpatialIndex(e);for(let n\u003d0;n\u003ce;n++){const e\u003dthis._xs[n],o\u003dthis._ys[n];if(0\u003d\u003de.length||0\u003d\u003do.length){i.add_empty();continue}let l\u003d1/0,r\u003d-1/0,h\u003d1/0,a\u003d-1/0;for(let i\u003d0,n\u003de.length;i\u003cn;i++){const n\u003de[i],c\u003do[i];if(n.length\u003e1\u0026\u0026c.length\u003e1)for(let e\u003d1,i\u003dn.length;e\u003ci;e++){const[i,o]\u003d_.minmax(n[e]),[d,x]\u003d_.minmax(c[e]);l\u003dt(l,i),r\u003ds(r,o),h\u003dt(h,d),a\u003ds(a,x)}}isFinite(l+r+h+a)?i.add(l,h,r,a):i.add_empty()}return i.finish(),i}_mask_data(){const{x_range:t,y_range:s}\u003dthis.renderer.plot_view.frame;return this.index.indices({x0:t.min,x1:t.max,y0:s.min,y1:s.max})}_inner_loop(t,s,e){t.beginPath();for(let i\u003d0,n\u003ds.length;i\u003cn;i++)for(let n\u003d0,o\u003ds[i].length;n\u003co;n++){const o\u003ds[i][n],l\u003de[i][n];for(let s\u003d0,e\u003do.length;s\u003ce;s++)0!\u003ds?t.lineTo(o[s],l[s]):t.moveTo(o[s],l[s]);t.closePath()}}_render(t,s,e){if(this.visuals.fill.doit||this.visuals.line.doit){const{sxs:i,sys:n}\u003dnull!\u003de?e:this;for(const e of s){const s\u003di[e],o\u003dn[e];this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(t,e),this._inner_loop(t,s,o),t.fill(\"evenodd\")),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(t,e),this._inner_loop(t,s,o),t.fill(\"evenodd\")),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(t,e),this._inner_loop(t,s,o),t.stroke())}}}_hit_rect(t){const{sx0:s,sx1:e,sy0:i,sy1:n}\u003dt,o\u003d[s,e,e,s],l\u003d[i,i,n,n],[r,h]\u003dthis.renderer.xscale.r_invert(s,e),[_,a]\u003dthis.renderer.yscale.r_invert(i,n),c\u003dthis.index.indices({x0:r,x1:h,y0:_,y1:a}),x\u003d[];for(const t of c){const s\u003dthis.sxs[t],e\u003dthis.sys[t];let i\u003d!0;for(let t\u003d0,n\u003ds.length;t\u003cn;t++){for(let n\u003d0,r\u003ds[t][0].length;n\u003cr;n++){const r\u003ds[t][0][n],h\u003de[t][0][n];if(!d.point_in_poly(r,h,o,l)){i\u003d!1;break}}if(!i)break}i\u0026\u0026x.push(t)}return new y.Selection({indices:x})}_hit_point(t){const{sx:s,sy:e}\u003dt,i\u003dthis.renderer.xscale.invert(s),n\u003dthis.renderer.yscale.invert(e),o\u003dthis.index.indices({x0:i,y0:n,x1:i,y1:n}),l\u003dthis._hole_index.indices({x0:i,y0:n,x1:i,y1:n}),r\u003d[];for(const t of o){const i\u003dthis.sxs[t],n\u003dthis.sys[t];for(let o\u003d0,h\u003di.length;o\u003ch;o++){const h\u003di[o].length;if(d.point_in_poly(s,e,i[o][0],n[o][0]))if(1\u003d\u003dh)r.push(t);else if(l.get(t)){if(h\u003e1){let l\u003d!1;for(let t\u003d1;t\u003ch;t++){const r\u003di[o][t],h\u003dn[o][t];if(d.point_in_poly(s,e,r,h)){l\u003d!0;break}}l||r.push(t)}}else r.push(t)}}return new y.Selection({indices:r})}_get_snap_coord(t){return a.sum(t)/t.length}scenterxy(t,s,e){if(1\u003d\u003dthis.sxs[t].length){return[this._get_snap_coord(this.sxs[t][0][0]),this._get_snap_coord(this.sys[t][0][0])]}{const i\u003dthis.sxs[t],n\u003dthis.sys[t];for(let t\u003d0,o\u003di.length;t\u003co;t++)if(d.point_in_poly(s,e,i[t][0],n[t][0])){return[this._get_snap_coord(i[t][0]),this._get_snap_coord(n[t][0])]}}f.unreachable()}map_data(){const t\u003dthis._xs.length;this.sxs\u003dnew Array(t),this.sys\u003dnew Array(t);for(let s\u003d0;s\u003ct;s++){const t\u003dthis._xs[s].length;this.sxs[s]\u003dnew Array(t),this.sys[s]\u003dnew Array(t);for(let e\u003d0;e\u003ct;e++){const t\u003dthis._xs[s][e].length;this.sxs[s][e]\u003dnew Array(t),this.sys[s][e]\u003dnew Array(t);for(let i\u003d0;i\u003ct;i++){const[t,n]\u003dthis.renderer.coordinates.map_to_screen(this._xs[s][e][i],this._ys[s][e][i]);this.sxs[s][e][i]\u003dt,this.sys[s][e][i]\u003dn}}}}draw_legend_for_index(t,s,e){h.generic_area_vector_legend(this.visuals,t,s,e)}}e.MultiPolygonsView\u003dg,g.__name__\u003d\"MultiPolygonsView\";class p extends r.Glyph{constructor(t){super(t)}static init_MultiPolygons(){this.prototype.default_view\u003dg,this.define((({})\u003d\u003e({xs:[x.XCoordinateSeqSeqSeqSpec,{field:\"xs\"}],ys:[x.YCoordinateSeqSeqSeqSpec,{field:\"ys\"}]}))),this.mixins([c.LineVector,c.FillVector,c.HatchVector])}}e.MultiPolygons\u003dp,p.__name__\u003d\"MultiPolygons\",p.init_MultiPolygons()},\n      function _(a,t,e,l,s){l();const _\u003da(287),i\u003da(12);class n extends _.EllipseOvalView{_map_data(){super._map_data(),i.mul(this.sw,.75)}}e.OvalView\u003dn,n.__name__\u003d\"OvalView\";class v extends _.EllipseOval{constructor(a){super(a)}static init_Oval(){this.prototype.default_view\u003dn}}e.Oval\u003dv,v.__name__\u003d\"Oval\",v.init_Oval()},\n      function _(t,e,i,o,s){o();const r\u003dt(1),_\u003dt(290),d\u003dr.__importStar(t(18));class n extends _.BoxView{scenterxy(t){return[this.sleft[t]/2+this.sright[t]/2,this.stop[t]/2+this.sbottom[t]/2]}_lrtb(t){return[this._left[t],this._right[t],this._top[t],this._bottom[t]]}}i.QuadView\u003dn,n.__name__\u003d\"QuadView\";class a extends _.Box{constructor(t){super(t)}static init_Quad(){this.prototype.default_view\u003dn,this.define((({})\u003d\u003e({right:[d.XCoordinateSpec,{field:\"right\"}],bottom:[d.YCoordinateSpec,{field:\"bottom\"}],left:[d.XCoordinateSpec,{field:\"left\"}],top:[d.YCoordinateSpec,{field:\"top\"}]})))}}i.Quad\u003da,a.__name__\u003d\"Quad\",a.init_Quad()},\n      function _(e,t,i,s,n){s();const a\u003de(1),c\u003de(48),o\u003de(65),r\u003de(98),_\u003de(106),d\u003da.__importStar(e(18));function l(e,t,i){if(t\u003d\u003d(e+i)/2)return[e,i];{const s\u003d(e-t)/(e-2*t+i),n\u003de*(1-s)**2+2*t*(1-s)*s+i*s**2;return[Math.min(e,i,n),Math.max(e,i,n)]}}class x extends r.GlyphView{_project_data(){o.inplace.project_xy(this._x0,this._y0),o.inplace.project_xy(this._x1,this._y1)}_index_data(e){const{_x0:t,_x1:i,_y0:s,_y1:n,_cx:a,_cy:c,data_size:o}\u003dthis;for(let r\u003d0;r\u003co;r++){const o\u003dt[r],_\u003di[r],d\u003ds[r],x\u003dn[r],y\u003da[r],h\u003dc[r];if(isNaN(o+_+d+x+y+h))e.add_empty();else{const[t,i]\u003dl(o,y,_),[s,n]\u003dl(d,h,x);e.add(t,s,i,n)}}}_render(e,t,i){if(this.visuals.line.doit){const{sx0:s,sy0:n,sx1:a,sy1:c,scx:o,scy:r}\u003dnull!\u003di?i:this;for(const i of t){const t\u003ds[i],_\u003dn[i],d\u003da[i],l\u003dc[i],x\u003do[i],y\u003dr[i];isNaN(t+_+d+l+x+y)||(e.beginPath(),e.moveTo(t,_),e.quadraticCurveTo(x,y,d,l),this.visuals.line.set_vectorize(e,i),e.stroke())}}}draw_legend_for_index(e,t,i){_.generic_line_vector_legend(this.visuals,e,t,i)}scenterxy(){throw new Error(`${this}.scenterxy() is not implemented`)}}i.QuadraticView\u003dx,x.__name__\u003d\"QuadraticView\";class y extends r.Glyph{constructor(e){super(e)}static init_Quadratic(){this.prototype.default_view\u003dx,this.define((({})\u003d\u003e({x0:[d.XCoordinateSpec,{field:\"x0\"}],y0:[d.YCoordinateSpec,{field:\"y0\"}],x1:[d.XCoordinateSpec,{field:\"x1\"}],y1:[d.YCoordinateSpec,{field:\"y1\"}],cx:[d.XCoordinateSpec,{field:\"cx\"}],cy:[d.YCoordinateSpec,{field:\"cy\"}]}))),this.mixins(c.LineVector)}}i.Quadratic\u003dy,y.__name__\u003d\"Quadratic\",y.init_Quadratic()},\n      function _(e,t,s,i,n){i();const a\u003de(1),l\u003de(64),h\u003de(106),r\u003de(48),o\u003de(24),_\u003da.__importStar(e(18));class c extends l.XYGlyphView{_map_data(){\"data\"\u003d\u003dthis.model.properties.length.units?this.slength\u003dthis.sdist(this.renderer.xscale,this._x,this.length):this.slength\u003do.to_screen(this.length);const{width:e,height:t}\u003dthis.renderer.plot_view.frame.bbox,s\u003d2*(e+t),{slength:i}\u003dthis;for(let e\u003d0,t\u003di.length;e\u003ct;e++)0\u003d\u003di[e]\u0026\u0026(i[e]\u003ds)}_render(e,t,s){const{sx:i,sy:n,slength:a,angle:l}\u003dnull!\u003ds?s:this;if(this.visuals.line.doit)for(const s of t){const t\u003di[s],h\u003dn[s],r\u003dl.get(s),o\u003da[s];isNaN(t+h+r+o)||(e.translate(t,h),e.rotate(r),e.beginPath(),e.moveTo(0,0),e.lineTo(o,0),this.visuals.line.set_vectorize(e,s),e.stroke(),e.rotate(-r),e.translate(-t,-h))}}draw_legend_for_index(e,t,s){h.generic_line_vector_legend(this.visuals,e,t,s)}}s.RayView\u003dc,c.__name__\u003d\"RayView\";class g extends l.XYGlyph{constructor(e){super(e)}static init_Ray(){this.prototype.default_view\u003dc,this.mixins(r.LineVector),this.define((({})\u003d\u003e({length:[_.DistanceSpec,0],angle:[_.AngleSpec,0]})))}}s.Ray\u003dg,g.__name__\u003d\"Ray\",g.init_Ray()},\n      function _(t,s,e,i,h){i();const r\u003dt(288),n\u003dt(106),a\u003dt(24),o\u003dt(12),l\u003dt(59);class _ extends r.CenterRotatableView{_map_data(){if(\"data\"\u003d\u003dthis.model.properties.width.units)[this.sw,this.sx0]\u003dthis._map_dist_corner_for_data_side_length(this._x,this.width,this.renderer.xscale);else{this.sw\u003da.to_screen(this.width);const t\u003dthis.sx.length;this.sx0\u003dnew a.ScreenArray(t);for(let s\u003d0;s\u003ct;s++)this.sx0[s]\u003dthis.sx[s]-this.sw[s]/2}if(\"data\"\u003d\u003dthis.model.properties.height.units)[this.sh,this.sy1]\u003dthis._map_dist_corner_for_data_side_length(this._y,this.height,this.renderer.yscale);else{this.sh\u003da.to_screen(this.height);const t\u003dthis.sy.length;this.sy1\u003dnew a.ScreenArray(t);for(let s\u003d0;s\u003ct;s++)this.sy1[s]\u003dthis.sy[s]-this.sh[s]/2}const t\u003dthis.sw.length;this.ssemi_diag\u003dnew a.ScreenArray(t);for(let s\u003d0;s\u003ct;s++)this.ssemi_diag[s]\u003dMath.sqrt(this.sw[s]/2*this.sw[s]/2+this.sh[s]/2*this.sh[s]/2)}_render(t,s,e){const{sx:i,sy:h,sx0:r,sy1:n,sw:a,sh:o,angle:l}\u003dnull!\u003de?e:this;for(const e of s){const s\u003di[e],_\u003dh[e],c\u003dr[e],d\u003dn[e],f\u003da[e],y\u003do[e],g\u003dl.get(e);isNaN(s+_+c+d+f+y+g)||0!\u003df\u0026\u00260!\u003dy\u0026\u0026(t.beginPath(),g?(t.translate(s,_),t.rotate(g),t.rect(-f/2,-y/2,f,y),t.rotate(-g),t.translate(-s,-_)):t.rect(c,d,f,y),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(t,e),t.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(t,e),t.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(t,e),t.stroke()))}}_hit_rect(t){return this._hit_rect_against_index(t)}_hit_point(t){let{sx:s,sy:e}\u003dt;const i\u003dthis.renderer.xscale.invert(s),h\u003dthis.renderer.yscale.invert(e),r\u003dthis.sx0.length,n\u003dnew a.ScreenArray(r);for(let t\u003d0;t\u003cr;t++)n[t]\u003dthis.sx0[t]+this.sw[t]/2;const _\u003dnew a.ScreenArray(r);for(let t\u003d0;t\u003cr;t++)_[t]\u003dthis.sy1[t]+this.sh[t]/2;const c\u003do.max(this._ddist(0,n,this.ssemi_diag)),d\u003do.max(this._ddist(1,_,this.ssemi_diag)),f\u003di-c,y\u003di+c,g\u003dh-d,w\u003dh+d;let x,u;const v\u003d[];for(const t of this.index.indices({x0:f,x1:y,y0:g,y1:w})){const i\u003dthis.angle.get(t);if(i){const h\u003dMath.sin(-i),r\u003dMath.cos(-i),n\u003dr*(s-this.sx[t])-h*(e-this.sy[t])+this.sx[t],a\u003dh*(s-this.sx[t])+r*(e-this.sy[t])+this.sy[t];s\u003dn,e\u003da,x\u003dMath.abs(this.sx[t]-s)\u003c\u003dthis.sw[t]/2,u\u003dMath.abs(this.sy[t]-e)\u003c\u003dthis.sh[t]/2}else{const i\u003ds-this.sx0[t],h\u003de-this.sy1[t];x\u003d0\u003c\u003di\u0026\u0026i\u003c\u003dthis.sw[t],u\u003d0\u003c\u003dh\u0026\u0026h\u003c\u003dthis.sh[t]}x\u0026\u0026u\u0026\u0026v.push(t)}return new l.Selection({indices:v})}_map_dist_corner_for_data_side_length(t,s,e){const i\u003dt.length,h\u003dnew Float64Array(i),r\u003dnew Float64Array(i);for(let e\u003d0;e\u003ci;e++){const i\u003dt[e],n\u003ds.get(e)/2;h[e]\u003di-n,r[e]\u003di+n}const n\u003de.v_compute(h),a\u003de.v_compute(r),o\u003dthis.sdist(e,h,s,\"edge\",this.model.dilate);let l\u003dn;for(let t\u003d0;t\u003ci;t++){const s\u003dn[t],e\u003da[t];if(!isNaN(s+e)\u0026\u0026s!\u003de){l\u003ds\u003ce?n:a;break}}return[o,l]}_ddist(t,s,e){const i\u003da.infer_type(s,e),h\u003d0\u003d\u003dt?this.renderer.xscale:this.renderer.yscale,r\u003ds,n\u003dr.length,o\u003dnew i(n);for(let t\u003d0;t\u003cn;t++)o[t]\u003dr[t]+e[t];const l\u003dh.v_invert(r),_\u003dh.v_invert(o),c\u003dl.length,d\u003dnew i(c);for(let t\u003d0;t\u003cc;t++)d[t]\u003dMath.abs(_[t]-l[t]);return d}draw_legend_for_index(t,s,e){n.generic_area_vector_legend(this.visuals,t,s,e)}}e.RectView\u003d_,_.__name__\u003d\"RectView\";class c extends r.CenterRotatable{constructor(t){super(t)}static init_Rect(){this.prototype.default_view\u003d_,this.define((({Boolean:t})\u003d\u003e({dilate:[t,!1]})))}}e.Rect\u003dc,c.__name__\u003d\"Rect\",c.init_Rect()},\n      function _(e,t,r,s,i){s();const a\u003de(1),n\u003de(304),_\u003de(305),l\u003de(283),c\u003da.__importStar(e(18));class o extends n.MarkerView{_init_webgl(){const{webgl:e}\u003dthis.renderer.plot_view.canvas_view;if(null!\u003de){const t\u003dnew Set(this.marker);if(1\u003d\u003dt.size){const[r]\u003d[...t];if(l.MarkerGL.is_supported(r)){const{glglyph:t}\u003dthis;if(null\u003d\u003dt||t.marker_type!\u003dr)return void(this.glglyph\u003dnew l.MarkerGL(e.gl,this,r))}}}delete this.glglyph}_set_data(e){super._set_data(e),this._init_webgl()}_render(e,t,r){const{sx:s,sy:i,size:a,angle:n,marker:l}\u003dnull!\u003dr?r:this;for(const r of t){const t\u003ds[r],c\u003di[r],o\u003da.get(r),g\u003dn.get(r),h\u003dl.get(r);if(isNaN(t+c+o+g)||null\u003d\u003dh)continue;const d\u003do/2;e.beginPath(),e.translate(t,c),g\u0026\u0026e.rotate(g),_.marker_funcs[h](e,r,d,this.visuals),g\u0026\u0026e.rotate(-g),e.translate(-t,-c)}}draw_legend_for_index(e,{x0:t,x1:r,y0:s,y1:i},a){const n\u003da+1,_\u003dthis.marker.get(a),l\u003dObject.assign(Object.assign({},this._get_legend_args({x0:t,x1:r,y0:s,y1:i},a)),{marker:new c.UniformScalar(_,n)});this._render(e,[a],l)}}r.ScatterView\u003do,o.__name__\u003d\"ScatterView\";class g extends n.Marker{constructor(e){super(e)}static init_Scatter(){this.prototype.default_view\u003do,this.define((()\u003d\u003e({marker:[c.MarkerSpec,{value:\"circle\"}]})))}}r.Scatter\u003dg,g.__name__\u003d\"Scatter\",g.init_Scatter()},\n      function _(e,t,s,i,n){i();const r\u003de(1),a\u003de(64),c\u003de(48),_\u003dr.__importStar(e(107)),o\u003dr.__importStar(e(18)),h\u003de(9),l\u003de(59);class x extends a.XYGlyphView{_render(e,t,s){const{sx:i,sy:n,size:r,angle:a}\u003dnull!\u003ds?s:this;for(const s of t){const t\u003di[s],c\u003dn[s],_\u003dr.get(s),o\u003da.get(s);if(isNaN(t+c+_+o))continue;const h\u003d_/2;e.beginPath(),e.translate(t,c),o\u0026\u0026e.rotate(o),this._render_one(e,s,h,this.visuals),o\u0026\u0026e.rotate(-o),e.translate(-t,-c)}}_mask_data(){const{x_target:e,y_target:t}\u003dthis.renderer.plot_view.frame,s\u003de.widen(this.max_size).map((e\u003d\u003ethis.renderer.xscale.invert(e))),i\u003dt.widen(this.max_size).map((e\u003d\u003ethis.renderer.yscale.invert(e)));return this.index.indices({x0:s.start,x1:s.end,y0:i.start,y1:i.end})}_hit_point(e){const{sx:t,sy:s}\u003de,{max_size:i}\u003dthis,{hit_dilation:n}\u003dthis.model,r\u003dt-i*n,a\u003dt+i*n,[c,_]\u003dthis.renderer.xscale.r_invert(r,a),o\u003ds-i*n,h\u003ds+i*n,[x,d]\u003dthis.renderer.yscale.r_invert(o,h),y\u003dthis.index.indices({x0:c,x1:_,y0:x,y1:d}),g\u003d[];for(const e of y){const i\u003dthis.size.get(e)/2*n;Math.abs(this.sx[e]-t)\u003c\u003di\u0026\u0026Math.abs(this.sy[e]-s)\u003c\u003di\u0026\u0026g.push(e)}return new l.Selection({indices:g})}_hit_span(e){const{sx:t,sy:s}\u003de,i\u003dthis.bounds(),n\u003dthis.max_size/2;let r,a,c,_;if(\"h\"\u003d\u003de.direction){c\u003di.y0,_\u003di.y1;const e\u003dt-n,s\u003dt+n;[r,a]\u003dthis.renderer.xscale.r_invert(e,s)}else{r\u003di.x0,a\u003di.x1;const e\u003ds-n,t\u003ds+n;[c,_]\u003dthis.renderer.yscale.r_invert(e,t)}const o\u003d[...this.index.indices({x0:r,x1:a,y0:c,y1:_})];return new l.Selection({indices:o})}_hit_rect(e){const{sx0:t,sx1:s,sy0:i,sy1:n}\u003de,[r,a]\u003dthis.renderer.xscale.r_invert(t,s),[c,_]\u003dthis.renderer.yscale.r_invert(i,n),o\u003d[...this.index.indices({x0:r,x1:a,y0:c,y1:_})];return new l.Selection({indices:o})}_hit_poly(e){const{sx:t,sy:s}\u003de,i\u003dh.range(0,this.sx.length),n\u003d[];for(let e\u003d0,r\u003di.length;e\u003cr;e++){const r\u003di[e];_.point_in_poly(this.sx[e],this.sy[e],t,s)\u0026\u0026n.push(r)}return new l.Selection({indices:n})}_get_legend_args({x0:e,x1:t,y0:s,y1:i},n){const r\u003dn+1,a\u003dnew Array(r),c\u003dnew Array(r);a[n]\u003d(e+t)/2,c[n]\u003d(s+i)/2;const _\u003d.4*Math.min(Math.abs(t-e),Math.abs(i-s));return{sx:a,sy:c,size:new o.UniformScalar(_,r),angle:new o.UniformScalar(0,r)}}draw_legend_for_index(e,{x0:t,x1:s,y0:i,y1:n},r){const a\u003dthis._get_legend_args({x0:t,x1:s,y0:i,y1:n},r);this._render(e,[r],a)}}s.MarkerView\u003dx,x.__name__\u003d\"MarkerView\";class d extends a.XYGlyph{constructor(e){super(e)}static init_Marker(){this.mixins([c.LineVector,c.FillVector,c.HatchVector]),this.define((({Number:e})\u003d\u003e({size:[o.ScreenDistanceSpec,{value:4}],angle:[o.AngleSpec,0],hit_dilation:[e,1]})))}}s.Marker\u003dd,d.__name__\u003d\"Marker\",d.init_Marker()},\n      function _(t,e,i,o,l){o();const n\u003dMath.sqrt(3),c\u003dMath.sqrt(5),r\u003d(c+1)/4,s\u003dMath.sqrt((5-c)/8),f\u003d(c-1)/4,a\u003dMath.sqrt((5+c)/8);function h(t,e){t.rotate(Math.PI/4),d(t,e),t.rotate(-Math.PI/4)}function v(t,e){const i\u003de*n,o\u003di/3;t.moveTo(-i/2,-o),t.lineTo(0,0),t.lineTo(i/2,-o),t.lineTo(0,0),t.lineTo(0,e)}function d(t,e){t.moveTo(0,e),t.lineTo(0,-e),t.moveTo(-e,0),t.lineTo(e,0)}function _(t,e){t.moveTo(0,e),t.lineTo(e/1.5,0),t.lineTo(0,-e),t.lineTo(-e/1.5,0),t.closePath()}function u(t,e){const i\u003de*n,o\u003di/3;t.moveTo(-e,o),t.lineTo(e,o),t.lineTo(0,o-i),t.closePath()}function z(t,e,i,o){t.arc(0,0,i,0,2*Math.PI,!1),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())}function T(t,e,i,o){_(t,i),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())}function k(t,e,i,o){!function(t,e){t.beginPath(),t.arc(0,0,e/4,0,2*Math.PI,!1),t.closePath()}(t,i),o.line.set_vectorize(t,e),t.fillStyle\u003dt.strokeStyle,t.fill()}function P(t,e,i,o){!function(t,e){const i\u003de/2,o\u003dn*i;t.moveTo(e,0),t.lineTo(i,-o),t.lineTo(-i,-o),t.lineTo(-e,0),t.lineTo(-i,o),t.lineTo(i,o),t.closePath()}(t,i),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())}function m(t,e,i,o){const l\u003d2*i;t.rect(-i,-i,l,l),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())}function q(t,e,i,o){!function(t,e){const i\u003dMath.sqrt(5-2*c)*e;t.moveTo(0,-e),t.lineTo(i*f,i*a-e),t.lineTo(i*(1+f),i*a-e),t.lineTo(i*(1+f-r),i*(a+s)-e),t.lineTo(i*(1+2*f-r),i*(2*a+s)-e),t.lineTo(0,2*i*a-e),t.lineTo(-i*(1+2*f-r),i*(2*a+s)-e),t.lineTo(-i*(1+f-r),i*(a+s)-e),t.lineTo(-i*(1+f),i*a-e),t.lineTo(-i*f,i*a-e),t.closePath()}(t,i),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())}function M(t,e,i,o){u(t,i),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())}i.marker_funcs\u003d{asterisk:function(t,e,i,o){d(t,i),h(t,i),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},circle:z,circle_cross:function(t,e,i,o){t.arc(0,0,i,0,2*Math.PI,!1),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),d(t,i),t.stroke())},circle_dot:function(t,e,i,o){z(t,e,i,o),k(t,e,i,o)},circle_y:function(t,e,i,o){t.arc(0,0,i,0,2*Math.PI,!1),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),v(t,i),t.stroke())},circle_x:function(t,e,i,o){t.arc(0,0,i,0,2*Math.PI,!1),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),h(t,i),t.stroke())},cross:function(t,e,i,o){d(t,i),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},diamond:T,diamond_dot:function(t,e,i,o){T(t,e,i,o),k(t,e,i,o)},diamond_cross:function(t,e,i,o){_(t,i),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.moveTo(0,i),t.lineTo(0,-i),t.moveTo(-i/1.5,0),t.lineTo(i/1.5,0),t.stroke())},dot:k,hex:P,hex_dot:function(t,e,i,o){P(t,e,i,o),k(t,e,i,o)},inverted_triangle:function(t,e,i,o){t.rotate(Math.PI),u(t,i),t.rotate(-Math.PI),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},plus:function(t,e,i,o){const l\u003d3*i/8,n\u003d[l,l,i,i,l,l,-l,-l,-i,-i,-l,-l],c\u003d[i,l,l,-l,-l,-i,-i,-l,-l,l,l,i];t.beginPath();for(let e\u003d0;e\u003c12;e++)t.lineTo(n[e],c[e]);t.closePath(),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},square:m,square_cross:function(t,e,i,o){const l\u003d2*i;t.rect(-i,-i,l,l),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),d(t,i),t.stroke())},square_dot:function(t,e,i,o){m(t,e,i,o),k(t,e,i,o)},square_pin:function(t,e,i,o){const l\u003d3*i/8;t.moveTo(-i,-i),t.quadraticCurveTo(0,-l,i,-i),t.quadraticCurveTo(l,0,i,i),t.quadraticCurveTo(0,l,-i,i),t.quadraticCurveTo(-l,0,-i,-i),t.closePath(),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},square_x:function(t,e,i,o){const l\u003d2*i;t.rect(-i,-i,l,l),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.moveTo(-i,i),t.lineTo(i,-i),t.moveTo(-i,-i),t.lineTo(i,i),t.stroke())},star:q,star_dot:function(t,e,i,o){q(t,e,i,o),k(t,e,i,o)},triangle:M,triangle_dot:function(t,e,i,o){M(t,e,i,o),k(t,e,i,o)},triangle_pin:function(t,e,i,o){const l\u003di*n,c\u003dl/3,r\u003d3*c/8;t.moveTo(-i,c),t.quadraticCurveTo(0,r,i,c),t.quadraticCurveTo(n*r/2,r/2,0,c-l),t.quadraticCurveTo(-n*r/2,r/2,-i,c),t.closePath(),o.fill.doit\u0026\u0026(o.fill.set_vectorize(t,e),t.fill()),o.hatch.doit\u0026\u0026(o.hatch.set_vectorize(t,e),t.fill()),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},dash:function(t,e,i,o){!function(t,e){t.moveTo(-e,0),t.lineTo(e,0)}(t,i),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},x:function(t,e,i,o){h(t,i),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())},y:function(t,e,i,o){v(t,i),o.line.doit\u0026\u0026(o.line.set_vectorize(t,e),t.stroke())}}},\n      function _(e,t,s,i,n){i();const r\u003de(1),_\u003dr.__importStar(e(107)),o\u003dr.__importStar(e(18)),h\u003de(48),a\u003de(65),c\u003de(98),d\u003de(106),x\u003de(59);class y extends c.GlyphView{_project_data(){a.inplace.project_xy(this._x0,this._y0),a.inplace.project_xy(this._x1,this._y1)}_index_data(e){const{min:t,max:s}\u003dMath,{_x0:i,_x1:n,_y0:r,_y1:_,data_size:o}\u003dthis;for(let h\u003d0;h\u003co;h++){const o\u003di[h],a\u003dn[h],c\u003dr[h],d\u003d_[h];isNaN(o+a+c+d)?e.add_empty():e.add(t(o,a),t(c,d),s(o,a),s(c,d))}}_render(e,t,s){if(this.visuals.line.doit){const{sx0:i,sy0:n,sx1:r,sy1:_}\u003dnull!\u003ds?s:this;for(const s of t){const t\u003di[s],o\u003dn[s],h\u003dr[s],a\u003d_[s];isNaN(t+o+h+a)||(e.beginPath(),e.moveTo(t,o),e.lineTo(h,a),this.visuals.line.set_vectorize(e,s),e.stroke())}}}_hit_point(e){const{sx:t,sy:s}\u003de,i\u003d{x:t,y:s},[n,r]\u003dthis.renderer.xscale.r_invert(t-2,t+2),[o,h]\u003dthis.renderer.yscale.r_invert(s-2,s+2),a\u003dthis.index.indices({x0:n,y0:o,x1:r,y1:h}),c\u003d[];for(const e of a){const t\u003dMath.max(2,this.line_width.get(e)/2)**2,s\u003d{x:this.sx0[e],y:this.sy0[e]},n\u003d{x:this.sx1[e],y:this.sy1[e]};_.dist_to_segment_squared(i,s,n)\u003ct\u0026\u0026c.push(e)}return new x.Selection({indices:c})}_hit_span(e){const[t,s]\u003dthis.renderer.plot_view.frame.bbox.ranges,{sx:i,sy:n}\u003de;let r,_,o;\"v\"\u003d\u003de.direction?(o\u003dthis.renderer.yscale.invert(n),[r,_]\u003d[this._y0,this._y1]):(o\u003dthis.renderer.xscale.invert(i),[r,_]\u003d[this._x0,this._x1]);const h\u003d[],[a,c]\u003dthis.renderer.xscale.r_invert(t.start,t.end),[d,y]\u003dthis.renderer.yscale.r_invert(s.start,s.end),l\u003dthis.index.indices({x0:a,y0:d,x1:c,y1:y});for(const t of l){(r[t]\u003c\u003do\u0026\u0026o\u003c\u003d_[t]||_[t]\u003c\u003do\u0026\u0026o\u003c\u003dr[t])\u0026\u0026h.push(t);const s\u003d1.5+this.line_width.get(t)/2;r[t]\u003d\u003d_[t]\u0026\u0026(\"h\"\u003d\u003de.direction?Math.abs(this.sx0[t]-i)\u003c\u003ds\u0026\u0026h.push(t):Math.abs(this.sy0[t]-n)\u003c\u003ds\u0026\u0026h.push(t))}return new x.Selection({indices:h})}scenterxy(e){return[this.sx0[e]/2+this.sx1[e]/2,this.sy0[e]/2+this.sy1[e]/2]}draw_legend_for_index(e,t,s){d.generic_line_vector_legend(this.visuals,e,t,s)}}s.SegmentView\u003dy,y.__name__\u003d\"SegmentView\";class l extends c.Glyph{constructor(e){super(e)}static init_Segment(){this.prototype.default_view\u003dy,this.define((({})\u003d\u003e({x0:[o.XCoordinateSpec,{field:\"x0\"}],y0:[o.YCoordinateSpec,{field:\"y0\"}],x1:[o.XCoordinateSpec,{field:\"x1\"}],y1:[o.YCoordinateSpec,{field:\"y1\"}]}))),this.mixins(h.LineVector)}}s.Segment\u003dl,l.__name__\u003d\"Segment\",l.init_Segment()},\n      function _(t,e,s,i,n){i();const _\u003dt(1),l\u003dt(64),o\u003d_.__importStar(t(48)),a\u003dt(308);class c extends l.XYGlyphView{_set_data(){const{tension:t,closed:e}\u003dthis.model;[this._xt,this._yt]\u003da.catmullrom_spline(this._x,this._y,20,t,e)}_map_data(){const{x_scale:t,y_scale:e}\u003dthis.renderer.coordinates;this.sxt\u003dt.v_compute(this._xt),this.syt\u003de.v_compute(this._yt)}_render(t,e,s){const{sxt:i,syt:n}\u003dnull!\u003ds?s:this;this.visuals.line.set_value(t);const _\u003di.length;for(let e\u003d0;e\u003c_;e++)0!\u003de?isNaN(i[e])||isNaN(n[e])?(t.stroke(),t.beginPath()):t.lineTo(i[e],n[e]):(t.beginPath(),t.moveTo(i[e],n[e]));t.stroke()}}s.SplineView\u003dc,c.__name__\u003d\"SplineView\";class h extends l.XYGlyph{constructor(t){super(t)}static init_Spline(){this.prototype.default_view\u003dc,this.mixins(o.LineScalar),this.define((({Boolean:t,Number:e})\u003d\u003e({tension:[e,.5],closed:[t,!1]})))}}s.Spline\u003dh,h.__name__\u003d\"Spline\",h.init_Spline()},\n      function _(n,t,e,o,s){o();const c\u003dn(24),l\u003dn(11);e.catmullrom_spline\u003dfunction(n,t,e\u003d10,o\u003d.5,s\u003d!1){l.assert(n.length\u003d\u003dt.length);const r\u003dn.length,f\u003ds?r+1:r,w\u003dc.infer_type(n,t),i\u003dnew w(f+2),u\u003dnew w(f+2);i.set(n,1),u.set(t,1),s?(i[0]\u003dn[r-1],u[0]\u003dt[r-1],i[f]\u003dn[0],u[f]\u003dt[0],i[f+1]\u003dn[1],u[f+1]\u003dt[1]):(i[0]\u003dn[0],u[0]\u003dt[0],i[f+1]\u003dn[r-1],u[f+1]\u003dt[r-1]);const g\u003dnew w(4*(e+1));for(let n\u003d0,t\u003d0;n\u003c\u003de;n++){const o\u003dn/e,s\u003do**2,c\u003do*s;g[t++]\u003d2*c-3*s+1,g[t++]\u003d-2*c+3*s,g[t++]\u003dc-2*s+o,g[t++]\u003dc-s}const h\u003dnew w((f-1)*(e+1)),_\u003dnew w((f-1)*(e+1));for(let n\u003d1,t\u003d0;n\u003cf;n++){const s\u003d(i[n+1]-i[n-1])*o,c\u003d(u[n+1]-u[n-1])*o,l\u003d(i[n+2]-i[n])*o,r\u003d(u[n+2]-u[n])*o;for(let o\u003d0;o\u003c\u003d4*e;t++){const e\u003dg[o++],f\u003dg[o++],w\u003dg[o++],a\u003dg[o++];h[t]\u003de*i[n]+f*i[n+1]+w*s+a*l,_[t]\u003de*u[n]+f*u[n+1]+w*c+a*r}}return[h,_]}},\n      function _(e,t,i,n,s){n();const o\u003de(1),l\u003de(64),r\u003de(106),a\u003do.__importStar(e(48)),_\u003de(20);class c extends l.XYGlyphView{_render(e,t,i){const{sx:n,sy:s}\u003dnull!\u003di?i:this;let o\u003d!1,l\u003dnull;this.visuals.line.set_value(e);const r\u003dt.length;if(!(r\u003c2)){e.beginPath(),e.moveTo(n[0],s[0]);for(const i of t){let t,r,a,_;switch(this.model.mode){case\"before\":[t,a]\u003d[n[i-1],s[i]],[r,_]\u003d[n[i],s[i]];break;case\"after\":[t,a]\u003d[n[i],s[i-1]],[r,_]\u003d[n[i],s[i]];break;case\"center\":{const e\u003d(n[i-1]+n[i])/2;[t,a]\u003d[e,s[i-1]],[r,_]\u003d[e,s[i]];break}default:throw new Error(\"unexpected\")}if(o){if(!isFinite(n[i]+s[i])){e.stroke(),e.beginPath(),o\u003d!1,l\u003di;continue}null!\u003dl\u0026\u0026i-l\u003e1\u0026\u0026(e.stroke(),o\u003d!1)}o?(e.lineTo(t,a),e.lineTo(r,_)):(e.beginPath(),e.moveTo(n[i],s[i]),o\u003d!0),l\u003di}e.lineTo(n[r-1],s[r-1]),e.stroke()}}draw_legend_for_index(e,t,i){r.generic_line_scalar_legend(this.visuals,e,t)}}i.StepView\u003dc,c.__name__\u003d\"StepView\";class d extends l.XYGlyph{constructor(e){super(e)}static init_Step(){this.prototype.default_view\u003dc,this.mixins(a.LineScalar),this.define((()\u003d\u003e({mode:[_.StepMode,\"before\"]})))}}i.Step\u003dd,d.__name__\u003d\"Step\",d.init_Step()},\n      function _(t,e,s,i,n){i();const o\u003dt(1),_\u003dt(64),h\u003dt(48),l\u003do.__importStar(t(107)),r\u003do.__importStar(t(18)),a\u003dt(143),c\u003dt(11),x\u003dt(59);class u extends _.XYGlyphView{_rotate_point(t,e,s,i,n){return[(t-s)*Math.cos(n)-(e-i)*Math.sin(n)+s,(t-s)*Math.sin(n)+(e-i)*Math.cos(n)+i]}_text_bounds(t,e,s,i){return[[t,t+s,t+s,t,t],[e,e,e-i,e-i,e]]}_render(t,e,s){const{sx:i,sy:n,x_offset:o,y_offset:_,angle:h,text:l}\u003dnull!\u003ds?s:this;this._sys\u003d[],this._sxs\u003d[];for(const s of e){const e\u003dthis._sxs[s]\u003d[],r\u003dthis._sys[s]\u003d[],c\u003di[s],x\u003dn[s],u\u003do.get(s),f\u003d_.get(s),p\u003dh.get(s),g\u003dl.get(s);if(!isNaN(c+x+u+f+p)\u0026\u0026null!\u003dg\u0026\u0026this.visuals.text.doit){const i\u003d`${g}`;t.save(),t.translate(c+u,x+f),t.rotate(p),this.visuals.text.set_vectorize(t,s);const n\u003dthis.visuals.text.font_value(s),{height:o}\u003da.font_metrics(n),_\u003dthis.text_line_height.get(s)*o;if(-1\u003d\u003di.indexOf(\"\\n\")){t.fillText(i,0,0);const s\u003dc+u,n\u003dx+f,o\u003dt.measureText(i).width,[h,l]\u003dthis._text_bounds(s,n,o,_);e.push(h),r.push(l)}else{const n\u003di.split(\"\\n\"),o\u003d_*n.length,h\u003dthis.text_baseline.get(s);let l;switch(h){case\"top\":l\u003d0;break;case\"middle\":l\u003d-o/2+_/2;break;case\"bottom\":l\u003d-o+_;break;default:l\u003d0,console.warn(`\u0027${h}\u0027 baseline not supported with multi line text`)}for(const s of n){t.fillText(s,0,l);const i\u003dc+u,n\u003dl+x+f,o\u003dt.measureText(s).width,[h,a]\u003dthis._text_bounds(i,n,o,_);e.push(h),r.push(a),l+\u003d_}}t.restore()}}}_hit_point(t){const{sx:e,sy:s}\u003dt,i\u003d[];for(let t\u003d0;t\u003cthis._sxs.length;t++){const n\u003dthis._sxs[t],o\u003dthis._sys[t],_\u003dn.length;for(let h\u003d0,r\u003d_;h\u003cr;h++){const[r,a]\u003dthis._rotate_point(e,s,n[_-1][0],o[_-1][0],-this.angle.get(t));l.point_in_poly(r,a,n[h],o[h])\u0026\u0026i.push(t)}}return new x.Selection({indices:i})}scenterxy(t){const e\u003dthis._sxs[t],s\u003dthis._sys[t];c.assert(0!\u003de.length\u0026\u00260!\u003ds.length);const i\u003de[0][0],n\u003ds[0][0],o\u003d(e[0][2]+i)/2,_\u003d(s[0][2]+n)/2,[h,l]\u003dthis._rotate_point(o,_,i,n,this.angle.get(t));return[h,l]}}s.TextView\u003du,u.__name__\u003d\"TextView\";class f extends _.XYGlyph{constructor(t){super(t)}static init_Text(){this.prototype.default_view\u003du,this.mixins(h.TextVector),this.define((({})\u003d\u003e({text:[r.NullStringSpec,{field:\"text\"}],angle:[r.AngleSpec,0],x_offset:[r.NumberSpec,0],y_offset:[r.NumberSpec,0]})))}}s.Text\u003df,f.__name__\u003d\"Text\",f.init_Text()},\n      function _(t,s,e,i,r){i();const h\u003dt(1),o\u003dt(290),a\u003dt(24),n\u003dh.__importStar(t(18));class _ extends o.BoxView{scenterxy(t){return[this.sx[t],(this.stop[t]+this.sbottom[t])/2]}_lrtb(t){const s\u003dthis.width.get(t)/2,e\u003dthis._x[t],i\u003dthis._top[t],r\u003dthis._bottom[t];return[e-s,e+s,Math.max(i,r),Math.min(i,r)]}_map_data(){this.sx\u003dthis.renderer.xscale.v_compute(this._x),this.sw\u003dthis.sdist(this.renderer.xscale,this._x,this.width,\"center\"),this.stop\u003dthis.renderer.yscale.v_compute(this._top),this.sbottom\u003dthis.renderer.yscale.v_compute(this._bottom);const t\u003dthis.sx.length;this.sleft\u003dnew a.ScreenArray(t),this.sright\u003dnew a.ScreenArray(t);for(let s\u003d0;s\u003ct;s++)this.sleft[s]\u003dthis.sx[s]-this.sw[s]/2,this.sright[s]\u003dthis.sx[s]+this.sw[s]/2;this._clamp_viewport()}}e.VBarView\u003d_,_.__name__\u003d\"VBarView\";class c extends o.Box{constructor(t){super(t)}static init_VBar(){this.prototype.default_view\u003d_,this.define((({})\u003d\u003e({x:[n.XCoordinateSpec,{field:\"x\"}],bottom:[n.YCoordinateSpec,{value:0}],width:[n.NumberSpec,{value:1}],top:[n.YCoordinateSpec,{field:\"top\"}]})))}}e.VBar\u003dc,c.__name__\u003d\"VBar\",c.init_VBar()},\n      function _(e,t,s,i,n){i();const r\u003de(1),a\u003de(64),l\u003de(106),c\u003de(48),d\u003de(24),h\u003de(20),o\u003dr.__importStar(e(18)),_\u003de(10),u\u003de(59);class g extends a.XYGlyphView{_map_data(){\"data\"\u003d\u003dthis.model.properties.radius.units?this.sradius\u003dthis.sdist(this.renderer.xscale,this._x,this.radius):this.sradius\u003dd.to_screen(this.radius)}_render(e,t,s){const{sx:i,sy:n,sradius:r,start_angle:a,end_angle:l}\u003dnull!\u003ds?s:this,c\u003d\"anticlock\"\u003d\u003dthis.model.direction;for(const s of t){const t\u003di[s],d\u003dn[s],h\u003dr[s],o\u003da.get(s),_\u003dl.get(s);isNaN(t+d+h+o+_)||(e.beginPath(),e.arc(t,d,h,o,_,c),e.lineTo(t,d),e.closePath(),this.visuals.fill.doit\u0026\u0026(this.visuals.fill.set_vectorize(e,s),e.fill()),this.visuals.hatch.doit\u0026\u0026(this.visuals.hatch.set_vectorize(e,s),e.fill()),this.visuals.line.doit\u0026\u0026(this.visuals.line.set_vectorize(e,s),e.stroke()))}}_hit_point(e){let t,s,i,n,r,a,l,c,d;const{sx:h,sy:o}\u003de,g\u003dthis.renderer.xscale.invert(h),p\u003dthis.renderer.yscale.invert(o),x\u003d2*this.max_radius;\"data\"\u003d\u003d\u003dthis.model.properties.radius.units?(a\u003dg-x,l\u003dg+x,c\u003dp-x,d\u003dp+x):(s\u003dh-x,i\u003dh+x,[a,l]\u003dthis.renderer.xscale.r_invert(s,i),n\u003do-x,r\u003do+x,[c,d]\u003dthis.renderer.yscale.r_invert(n,r));const f\u003d[];for(const e of this.index.indices({x0:a,x1:l,y0:c,y1:d})){const a\u003dthis.sradius[e]**2;[s,i]\u003dthis.renderer.xscale.r_compute(g,this._x[e]),[n,r]\u003dthis.renderer.yscale.r_compute(p,this._y[e]),t\u003d(s-i)**2+(n-r)**2,t\u003c\u003da\u0026\u0026f.push(e)}const v\u003d\"anticlock\"\u003d\u003dthis.model.direction,y\u003d[];for(const e of f){const t\u003dMath.atan2(o-this.sy[e],h-this.sx[e]);_.angle_between(-t,-this.start_angle.get(e),-this.end_angle.get(e),v)\u0026\u0026y.push(e)}return new u.Selection({indices:y})}draw_legend_for_index(e,t,s){l.generic_area_vector_legend(this.visuals,e,t,s)}scenterxy(e){const t\u003dthis.sradius[e]/2,s\u003d(this.start_angle.get(e)+this.end_angle.get(e))/2;return[this.sx[e]+t*Math.cos(s),this.sy[e]+t*Math.sin(s)]}}s.WedgeView\u003dg,g.__name__\u003d\"WedgeView\";class p extends a.XYGlyph{constructor(e){super(e)}static init_Wedge(){this.prototype.default_view\u003dg,this.mixins([c.LineVector,c.FillVector,c.HatchVector]),this.define((({})\u003d\u003e({direction:[h.Direction,\"anticlock\"],radius:[o.DistanceSpec,{field:\"radius\"}],start_angle:[o.AngleSpec,{field:\"start_angle\"}],end_angle:[o.AngleSpec,{field:\"end_angle\"}]})))}}s.Wedge\u003dp,p.__name__\u003d\"Wedge\",p.init_Wedge()},\n      function _(t,_,r,o,a){o();const e\u003dt(1);e.__exportStar(t(126),r),e.__exportStar(t(125),r),e.__exportStar(t(314),r)},\n      function _(t,a,o,r,e){r();const n\u003dt(125);class l extends n.LayoutProvider{constructor(t){super(t)}static init_StaticLayoutProvider(){this.define((({Number:t,Tuple:a,Dict:o})\u003d\u003e({graph_layout:[o(a(t,t)),{}]})))}get_node_coordinates(t){var a;const o\u003dnull!\u003d\u003d(a\u003dt.data.index)\u0026\u0026void 0!\u003d\u003da?a:[],r\u003do.length,e\u003dnew Float64Array(r),n\u003dnew Float64Array(r);for(let t\u003d0;t\u003cr;t++){const a\u003dthis.graph_layout[o[t]],[r,l]\u003dnull!\u003da?a:[NaN,NaN];e[t]\u003dr,n[t]\u003dl}return[e,n]}get_edge_coordinates(t){var a,o;const r\u003dnull!\u003d\u003d(a\u003dt.data.start)\u0026\u0026void 0!\u003d\u003da?a:[],e\u003dnull!\u003d\u003d(o\u003dt.data.end)\u0026\u0026void 0!\u003d\u003do?o:[],n\u003dMath.min(r.length,e.length),l\u003d[],i\u003d[],u\u003dnull!\u003dt.data.xs\u0026\u0026null!\u003dt.data.ys;for(let a\u003d0;a\u003cn;a++){const o\u003dnull!\u003dthis.graph_layout[r[a]]\u0026\u0026null!\u003dthis.graph_layout[e[a]];if(u\u0026\u0026o)l.push(t.data.xs[a]),i.push(t.data.ys[a]);else{let t,n;o?(t\u003dthis.graph_layout[r[a]],n\u003dthis.graph_layout[e[a]]):(t\u003d[NaN,NaN],n\u003d[NaN,NaN]),l.push([t[0],n[0]]),i.push([t[1],n[1]])}}return[l,i]}}o.StaticLayoutProvider\u003dl,l.__name__\u003d\"StaticLayoutProvider\",l.init_StaticLayoutProvider()},\n      function _(i,d,n,r,G){r(),G(\"Grid\",i(316).Grid)},\n      function _(i,e,t,s,n){s();const r\u003di(1),o\u003di(162),d\u003di(164),l\u003di(165),_\u003dr.__importStar(i(48)),a\u003di(8);class h extends d.GuideRendererView{_render(){const i\u003dthis.layer.ctx;i.save(),this._draw_regions(i),this._draw_minor_grids(i),this._draw_grids(i),i.restore()}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.request_render()))}_draw_regions(i){if(!this.visuals.band_fill.doit\u0026\u0026!this.visuals.band_hatch.doit)return;const[e,t]\u003dthis.grid_coords(\"major\",!1);for(let s\u003d0;s\u003ce.length-1;s++){if(s%2!\u003d1)continue;const[n,r]\u003dthis.coordinates.map_to_screen(e[s],t[s]),[o,d]\u003dthis.coordinates.map_to_screen(e[s+1],t[s+1]);i.beginPath(),i.rect(n[0],r[0],o[1]-n[0],d[1]-r[0]),this.visuals.band_fill.doit\u0026\u0026(this.visuals.band_fill.set_value(i),i.fill()),this.visuals.band_hatch.doit\u0026\u0026(this.visuals.band_hatch.set_value(i),i.fill())}}_draw_grids(i){if(!this.visuals.grid_line.doit)return;const[e,t]\u003dthis.grid_coords(\"major\");this._draw_grid_helper(i,this.visuals.grid_line,e,t)}_draw_minor_grids(i){if(!this.visuals.minor_grid_line.doit)return;const[e,t]\u003dthis.grid_coords(\"minor\");this._draw_grid_helper(i,this.visuals.minor_grid_line,e,t)}_draw_grid_helper(i,e,t,s){e.set_value(i),i.beginPath();for(let e\u003d0;e\u003ct.length;e++){const[n,r]\u003dthis.coordinates.map_to_screen(t[e],s[e]);i.moveTo(Math.round(n[0]),Math.round(r[0]));for(let e\u003d1;e\u003cn.length;e++)i.lineTo(Math.round(n[e]),Math.round(r[e]))}i.stroke()}ranges(){const i\u003dthis.model.dimension,e\u003d(i+1)%2,{ranges:t}\u003dthis.coordinates;return[t[i],t[e]]}computed_bounds(){const[i]\u003dthis.ranges(),e\u003dthis.model.bounds,t\u003d[i.min,i.max];let s,n;if(a.isArray(e))s\u003dMath.min(e[0],e[1]),n\u003dMath.max(e[0],e[1]),s\u003ct[0]\u0026\u0026(s\u003dt[0]),n\u003et[1]\u0026\u0026(n\u003dt[1]);else{[s,n]\u003dt;for(const i of this.plot_view.axis_views)i.dimension\u003d\u003dthis.model.dimension\u0026\u0026i.model.x_range_name\u003d\u003dthis.model.x_range_name\u0026\u0026i.model.y_range_name\u003d\u003dthis.model.y_range_name\u0026\u0026([s,n]\u003di.computed_bounds)}return[s,n]}grid_coords(i,e\u003d!0){const t\u003dthis.model.dimension,s\u003d(t+1)%2,[n,r]\u003dthis.ranges();let[o,d]\u003dthis.computed_bounds();[o,d]\u003d[Math.min(o,d),Math.max(o,d)];const l\u003d[[],[]],_\u003dthis.model.get_ticker();if(null\u003d\u003d_)return l;const a\u003d_.get_ticks(o,d,n,r.min)[i],h\u003dn.min,u\u003dn.max,c\u003dr.min,m\u003dr.max;e||(a[0]!\u003dh\u0026\u0026a.splice(0,0,h),a[a.length-1]!\u003du\u0026\u0026a.push(u));for(let i\u003d0;i\u003ca.length;i++){if((a[i]\u003d\u003dh||a[i]\u003d\u003du)\u0026\u0026e)continue;const n\u003d[],r\u003d[],o\u003d2;for(let e\u003d0;e\u003co;e++){const t\u003dc+(m-c)/(o-1)*e;n.push(a[i]),r.push(t)}l[t].push(n),l[s].push(r)}return l}}t.GridView\u003dh,h.__name__\u003d\"GridView\";class u extends d.GuideRenderer{constructor(i){super(i)}static init_Grid(){this.prototype.default_view\u003dh,this.mixins([[\"grid_\",_.Line],[\"minor_grid_\",_.Line],[\"band_\",_.Fill],[\"band_\",_.Hatch]]),this.define((({Number:i,Auto:e,Enum:t,Ref:s,Tuple:n,Or:r,Nullable:d})\u003d\u003e({bounds:[r(n(i,i),e),\"auto\"],dimension:[t(0,1),0],axis:[d(s(o.Axis)),null],ticker:[d(s(l.Ticker)),null]}))),this.override({level:\"underlay\",band_fill_color:null,band_fill_alpha:0,grid_line_color:\"#e5e5e5\",minor_grid_line_color:null})}get_ticker(){return null!\u003dthis.ticker?this.ticker:null!\u003dthis.axis?this.axis.ticker:null}}t.Grid\u003du,u.__name__\u003d\"Grid\",u.init_Grid()},\n      function _(o,a,x,B,e){B(),e(\"Box\",o(318).Box),e(\"Column\",o(320).Column),e(\"GridBox\",o(321).GridBox),e(\"HTMLBox\",o(322).HTMLBox),e(\"LayoutDOM\",o(319).LayoutDOM),e(\"Panel\",o(323).Panel),e(\"Row\",o(324).Row),e(\"Spacer\",o(325).Spacer),e(\"Tabs\",o(326).Tabs),e(\"WidgetBox\",o(329).WidgetBox)},\n      function _(e,n,i,t,s){t();const o\u003de(319);class c extends o.LayoutDOMView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.children.change,(()\u003d\u003ethis.rebuild()))}get child_models(){return this.model.children}}i.BoxView\u003dc,c.__name__\u003d\"BoxView\";class r extends o.LayoutDOM{constructor(e){super(e)}static init_Box(){this.define((({Number:e,Array:n,Ref:i})\u003d\u003e({children:[n(i(o.LayoutDOM)),[]],spacing:[e,0]})))}}i.Box\u003dr,r.__name__\u003d\"Box\",r.init_Box()},\n      function _(t,i,e,s,o){s();const l\u003dt(53),n\u003dt(20),h\u003dt(43),a\u003dt(19),r\u003dt(8),_\u003dt(22),d\u003dt(143),c\u003dt(122),u\u003dt(240),m\u003dt(221),p\u003dt(44),g\u003dt(249);class f extends u.DOMView{constructor(){super(...arguments),this._idle_notified\u003d!1,this._offset_parent\u003dnull,this._viewport\u003d{}}get base_font_size(){const t\u003dgetComputedStyle(this.el).fontSize,i\u003dd.parse_css_font_size(t);if(null!\u003di){const{value:t,unit:e}\u003di;if(\"px\"\u003d\u003de)return t}return 13}initialize(){super.initialize(),this.el.style.position\u003dthis.is_root?\"relative\":\"absolute\",this._child_views\u003dnew Map}async lazy_initialize(){await super.lazy_initialize(),await this.build_child_views()}remove(){for(const t of this.child_views)t.remove();this._child_views.clear(),super.remove()}connect_signals(){super.connect_signals(),this.is_root\u0026\u0026(this._on_resize\u003d()\u003d\u003ethis.resize_layout(),window.addEventListener(\"resize\",this._on_resize),this._parent_observer\u003dsetInterval((()\u003d\u003e{const t\u003dthis.el.offsetParent;this._offset_parent!\u003dt\u0026\u0026(this._offset_parent\u003dt,null!\u003dt\u0026\u0026(this.compute_viewport(),this.invalidate_layout()))}),250));const t\u003dthis.model.properties;this.on_change([t.width,t.height,t.min_width,t.min_height,t.max_width,t.max_height,t.margin,t.width_policy,t.height_policy,t.sizing_mode,t.aspect_ratio,t.visible],(()\u003d\u003ethis.invalidate_layout())),this.on_change([t.background,t.css_classes],(()\u003d\u003ethis.invalidate_render()))}disconnect_signals(){null!\u003dthis._parent_observer\u0026\u0026clearTimeout(this._parent_observer),null!\u003dthis._on_resize\u0026\u0026window.removeEventListener(\"resize\",this._on_resize),super.disconnect_signals()}css_classes(){return super.css_classes().concat(this.model.css_classes)}get child_views(){return this.child_models.map((t\u003d\u003ethis._child_views.get(t)))}async build_child_views(){await c.build_views(this._child_views,this.child_models,{parent:this})}render(){super.render(),h.empty(this.el);const{background:t}\u003dthis.model;this.el.style.backgroundColor\u003dnull!\u003dt?_.color2css(t):\"\",h.classes(this.el).clear().add(...this.css_classes());for(const t of this.child_views)this.el.appendChild(t.el),t.render()}update_layout(){for(const t of this.child_views)t.update_layout();this._update_layout()}update_position(){this.el.style.display\u003dthis.model.visible?\"block\":\"none\";const t\u003dthis.is_root?this.layout.sizing.margin:void 0;h.position(this.el,this.layout.bbox,t);for(const t of this.child_views)t.update_position()}after_layout(){for(const t of this.child_views)t.after_layout();this._has_finished\u003d!0}compute_viewport(){this._viewport\u003dthis._viewport_size()}renderTo(t){t.appendChild(this.el),this._offset_parent\u003dthis.el.offsetParent,this.compute_viewport(),this.build()}build(){return this.assert_root(),this.render(),this.update_layout(),this.compute_layout(),this}async rebuild(){await this.build_child_views(),this.invalidate_render()}compute_layout(){const t\u003dDate.now();this.layout.compute(this._viewport),this.update_position(),this.after_layout(),a.logger.debug(`layout computed in ${Date.now()-t} ms`),this.notify_finished()}resize_layout(){this.root.compute_viewport(),this.root.compute_layout()}invalidate_layout(){this.root.update_layout(),this.root.compute_layout()}invalidate_render(){this.render(),this.invalidate_layout()}has_finished(){if(!super.has_finished())return!1;for(const t of this.child_views)if(!t.has_finished())return!1;return!0}notify_finished(){this.is_root?!this._idle_notified\u0026\u0026this.has_finished()\u0026\u0026null!\u003dthis.model.document\u0026\u0026(this._idle_notified\u003d!0,this.model.document.notify_idle(this.model)):this.root.notify_finished()}_width_policy(){return null!\u003dthis.model.width?\"fixed\":\"fit\"}_height_policy(){return null!\u003dthis.model.height?\"fixed\":\"fit\"}box_sizing(){let{width_policy:t,height_policy:i,aspect_ratio:e}\u003dthis.model;\"auto\"\u003d\u003dt\u0026\u0026(t\u003dthis._width_policy()),\"auto\"\u003d\u003di\u0026\u0026(i\u003dthis._height_policy());const{sizing_mode:s}\u003dthis.model;if(null!\u003ds)if(\"fixed\"\u003d\u003ds)t\u003di\u003d\"fixed\";else if(\"stretch_both\"\u003d\u003ds)t\u003di\u003d\"max\";else if(\"stretch_width\"\u003d\u003ds)t\u003d\"max\";else if(\"stretch_height\"\u003d\u003ds)i\u003d\"max\";else switch(null\u003d\u003de\u0026\u0026(e\u003d\"auto\"),s){case\"scale_width\":t\u003d\"max\",i\u003d\"min\";break;case\"scale_height\":t\u003d\"min\",i\u003d\"max\";break;case\"scale_both\":t\u003d\"max\",i\u003d\"max\"}const o\u003d{width_policy:t,height_policy:i},{min_width:l,min_height:n}\u003dthis.model;null!\u003dl\u0026\u0026(o.min_width\u003dl),null!\u003dn\u0026\u0026(o.min_height\u003dn);const{width:h,height:a}\u003dthis.model;null!\u003dh\u0026\u0026(o.width\u003dh),null!\u003da\u0026\u0026(o.height\u003da);const{max_width:_,max_height:d}\u003dthis.model;null!\u003d_\u0026\u0026(o.max_width\u003d_),null!\u003dd\u0026\u0026(o.max_height\u003dd),\"auto\"\u003d\u003de\u0026\u0026null!\u003dh\u0026\u0026null!\u003da?o.aspect\u003dh/a:r.isNumber(e)\u0026\u0026(o.aspect\u003de);const{margin:c}\u003dthis.model;if(null!\u003dc)if(r.isNumber(c))o.margin\u003d{top:c,right:c,bottom:c,left:c};else if(2\u003d\u003dc.length){const[t,i]\u003dc;o.margin\u003d{top:t,right:i,bottom:t,left:i}}else{const[t,i,e,s]\u003dc;o.margin\u003d{top:t,right:i,bottom:e,left:s}}o.visible\u003dthis.model.visible;const{align:u}\u003dthis.model;return r.isArray(u)?[o.halign,o.valign]\u003du:o.halign\u003do.valign\u003du,o}_viewport_size(){return h.undisplayed(this.el,(()\u003d\u003e{let t\u003dthis.el;for(;t\u003dt.parentElement;){if(t.classList.contains(p.root))continue;if(t\u003d\u003ddocument.body){const{margin:{left:t,right:i,top:e,bottom:s}}\u003dh.extents(document.body);return{width:Math.ceil(document.documentElement.clientWidth-t-i),height:Math.ceil(document.documentElement.clientHeight-e-s)}}const{padding:{left:i,right:e,top:s,bottom:o}}\u003dh.extents(t),{width:l,height:n}\u003dt.getBoundingClientRect(),a\u003dMath.ceil(l-i-e),r\u003dMath.ceil(n-s-o);if(a\u003e0||r\u003e0)return{width:a\u003e0?a:void 0,height:r\u003e0?r:void 0}}return{}}))}export(t,i\u003d!0){const e\u003d\"png\"\u003d\u003dt?\"canvas\":\"svg\",s\u003dnew g.CanvasLayer(e,i),{width:o,height:l}\u003dthis.layout.bbox;s.resize(o,l);for(const e of this.child_views){const o\u003de.export(t,i),{x:l,y:n}\u003de.layout.bbox;s.ctx.drawImage(o.canvas,l,n)}return s}serializable_state(){return Object.assign(Object.assign({},super.serializable_state()),{bbox:this.layout.bbox.box,children:this.child_views.map((t\u003d\u003et.serializable_state()))})}}e.LayoutDOMView\u003df,f.__name__\u003d\"LayoutDOMView\";class w extends l.Model{constructor(t){super(t)}static init_LayoutDOM(){this.define((t\u003d\u003e{const{Boolean:i,Number:e,String:s,Auto:o,Color:l,Array:h,Tuple:a,Or:r,Null:_,Nullable:d}\u003dt,c\u003da(e,e),u\u003da(e,e,e,e);return{width:[d(e),null],height:[d(e),null],min_width:[d(e),null],min_height:[d(e),null],max_width:[d(e),null],max_height:[d(e),null],margin:[d(r(e,c,u)),[0,0,0,0]],width_policy:[r(m.SizingPolicy,o),\"auto\"],height_policy:[r(m.SizingPolicy,o),\"auto\"],aspect_ratio:[r(e,o,_),null],sizing_mode:[d(n.SizingMode),null],visible:[i,!0],disabled:[i,!1],align:[r(n.Align,a(n.Align,n.Align)),\"start\"],background:[d(l),null],css_classes:[h(s),[]]}}))}}e.LayoutDOM\u003dw,w.__name__\u003d\"LayoutDOM\",w.init_LayoutDOM()},\n      function _(t,s,i,o,n){o();const e\u003dt(318),l\u003dt(223);class u extends e.BoxView{_update_layout(){const t\u003dthis.child_views.map((t\u003d\u003et.layout));this.layout\u003dnew l.Column(t),this.layout.rows\u003dthis.model.rows,this.layout.spacing\u003d[this.model.spacing,0],this.layout.set_sizing(this.box_sizing())}}i.ColumnView\u003du,u.__name__\u003d\"ColumnView\";class a extends e.Box{constructor(t){super(t)}static init_Column(){this.prototype.default_view\u003du,this.define((({Any:t})\u003d\u003e({rows:[t,\"auto\"]})))}}i.Column\u003da,a.__name__\u003d\"Column\",a.init_Column()},\n      function _(t,s,i,o,e){o();const n\u003dt(319),l\u003dt(223);class a extends n.LayoutDOMView{connect_signals(){super.connect_signals();const{children:t,rows:s,cols:i,spacing:o}\u003dthis.model.properties;this.on_change([t,s,i,o],(()\u003d\u003ethis.rebuild()))}get child_models(){return this.model.children.map((([t])\u003d\u003et))}_update_layout(){this.layout\u003dnew l.Grid,this.layout.rows\u003dthis.model.rows,this.layout.cols\u003dthis.model.cols,this.layout.spacing\u003dthis.model.spacing;for(const[t,s,i,o,e]of this.model.children){const n\u003dthis._child_views.get(t);this.layout.items.push({layout:n.layout,row:s,col:i,row_span:o,col_span:e})}this.layout.set_sizing(this.box_sizing())}}i.GridBoxView\u003da,a.__name__\u003d\"GridBoxView\";class r extends n.LayoutDOM{constructor(t){super(t)}static init_GridBox(){this.prototype.default_view\u003da,this.define((({Any:t,Int:s,Number:i,Tuple:o,Array:e,Ref:l,Or:a,Opt:r})\u003d\u003e({children:[e(o(l(n.LayoutDOM),s,s,r(s),r(s))),[]],rows:[t,\"auto\"],cols:[t,\"auto\"],spacing:[a(i,o(i,i)),0]})))}}i.GridBox\u003dr,r.__name__\u003d\"GridBox\",r.init_GridBox()},\n      function _(t,e,o,s,n){s();const _\u003dt(319),i\u003dt(221);class a extends _.LayoutDOMView{get child_models(){return[]}_update_layout(){this.layout\u003dnew i.ContentBox(this.el),this.layout.set_sizing(this.box_sizing())}}o.HTMLBoxView\u003da,a.__name__\u003d\"HTMLBoxView\";class u extends _.LayoutDOM{constructor(t){super(t)}}o.HTMLBox\u003du,u.__name__\u003d\"HTMLBox\"},\n      function _(e,n,t,i,l){i();const a\u003de(53),o\u003de(319);class s extends a.Model{constructor(e){super(e)}static init_Panel(){this.define((({Boolean:e,String:n,Ref:t})\u003d\u003e({title:[n,\"\"],child:[t(o.LayoutDOM)],closable:[e,!1]})))}}t.Panel\u003ds,s.__name__\u003d\"Panel\",s.init_Panel()},\n      function _(t,s,i,o,e){o();const n\u003dt(318),a\u003dt(223);class _ extends n.BoxView{_update_layout(){const t\u003dthis.child_views.map((t\u003d\u003et.layout));this.layout\u003dnew a.Row(t),this.layout.cols\u003dthis.model.cols,this.layout.spacing\u003d[0,this.model.spacing],this.layout.set_sizing(this.box_sizing())}}i.RowView\u003d_,_.__name__\u003d\"RowView\";class l extends n.Box{constructor(t){super(t)}static init_Row(){this.prototype.default_view\u003d_,this.define((({Any:t})\u003d\u003e({cols:[t,\"auto\"]})))}}i.Row\u003dl,l.__name__\u003d\"Row\",l.init_Row()},\n      function _(t,e,a,i,s){i();const _\u003dt(319),c\u003dt(221);class n extends _.LayoutDOMView{get child_models(){return[]}_update_layout(){this.layout\u003dnew c.LayoutItem,this.layout.set_sizing(this.box_sizing())}}a.SpacerView\u003dn,n.__name__\u003d\"SpacerView\";class o extends _.LayoutDOM{constructor(t){super(t)}static init_Spacer(){this.prototype.default_view\u003dn}}a.Spacer\u003do,o.__name__\u003d\"Spacer\",o.init_Spacer()},\n      function _(e,t,s,i,l){i();const h\u003de(1),a\u003de(221),o\u003de(43),r\u003de(9),c\u003de(10),d\u003de(20),n\u003de(319),_\u003de(323),p\u003dh.__importStar(e(327)),b\u003dp,u\u003dh.__importStar(e(328)),m\u003du,g\u003dh.__importStar(e(243)),v\u003dg;class w extends n.LayoutDOMView{constructor(){super(...arguments),this._scroll_index\u003d0}connect_signals(){super.connect_signals(),this.connect(this.model.properties.tabs.change,(()\u003d\u003ethis.rebuild())),this.connect(this.model.properties.active.change,(()\u003d\u003ethis.on_active_change()))}styles(){return[...super.styles(),u.default,g.default,p.default]}get child_models(){return this.model.tabs.map((e\u003d\u003ee.child))}_update_layout(){const e\u003dthis.model.tabs_location,t\u003d\"above\"\u003d\u003de||\"below\"\u003d\u003de,{scroll_el:s,headers_el:i}\u003dthis;this.header\u003dnew class extends a.ContentBox{_measure(e){const l\u003do.size(s),h\u003do.children(i).slice(0,3).map((e\u003d\u003eo.size(e))),{width:a,height:c}\u003dsuper._measure(e);if(t){const t\u003dl.width+r.sum(h.map((e\u003d\u003ee.width)));return{width:e.width!\u003d1/0?e.width:t,height:c}}{const t\u003dl.height+r.sum(h.map((e\u003d\u003ee.height)));return{width:a,height:e.height!\u003d1/0?e.height:t}}}}(this.header_el),t?this.header.set_sizing({width_policy:\"fit\",height_policy:\"fixed\"}):this.header.set_sizing({width_policy:\"fixed\",height_policy:\"fit\"});let l\u003d1,h\u003d1;switch(e){case\"above\":l-\u003d1;break;case\"below\":l+\u003d1;break;case\"left\":h-\u003d1;break;case\"right\":h+\u003d1}const c\u003d{layout:this.header,row:l,col:h},d\u003dthis.child_views.map((e\u003d\u003e({layout:e.layout,row:1,col:1})));this.layout\u003dnew a.Grid([c,...d]),this.layout.set_sizing(this.box_sizing())}update_position(){super.update_position(),this.header_el.style.position\u003d\"absolute\",o.position(this.header_el,this.header.bbox);const e\u003dthis.model.tabs_location,t\u003d\"above\"\u003d\u003de||\"below\"\u003d\u003de,s\u003do.size(this.scroll_el),i\u003do.scroll_size(this.headers_el);if(t){const{width:e}\u003dthis.header.bbox;i.width\u003ee?(this.wrapper_el.style.maxWidth\u003de-s.width+\"px\",o.display(this.scroll_el),this.do_scroll(this.model.active)):(this.wrapper_el.style.maxWidth\u003d\"\",o.undisplay(this.scroll_el))}else{const{height:e}\u003dthis.header.bbox;i.height\u003ee?(this.wrapper_el.style.maxHeight\u003de-s.height+\"px\",o.display(this.scroll_el),this.do_scroll(this.model.active)):(this.wrapper_el.style.maxHeight\u003d\"\",o.undisplay(this.scroll_el))}const{child_views:l}\u003dthis;for(const e of l)o.hide(e.el);const h\u003dl[this.model.active];null!\u003dh\u0026\u0026o.show(h.el)}render(){super.render();const{active:e}\u003dthis.model,t\u003dthis.model.tabs.map(((t,s)\u003d\u003e{const i\u003do.div({class:[b.tab,s\u003d\u003de?b.active:null]},t.title);if(i.addEventListener(\"click\",(e\u003d\u003e{e.target\u003d\u003de.currentTarget\u0026\u0026this.change_active(s)})),t.closable){const e\u003do.div({class:b.close});e.addEventListener(\"click\",(e\u003d\u003e{if(e.target\u003d\u003de.currentTarget){this.model.tabs\u003dr.remove_at(this.model.tabs,s);const e\u003dthis.model.tabs.length;this.model.active\u003ee-1\u0026\u0026(this.model.active\u003de-1)}})),i.appendChild(e)}return i}));this.headers_el\u003do.div({class:[b.headers]},t),this.wrapper_el\u003do.div({class:b.headers_wrapper},this.headers_el),this.left_el\u003do.div({class:[m.btn,m.btn_default],disabled:\"\"},o.div({class:[v.caret,b.left]})),this.right_el\u003do.div({class:[m.btn,m.btn_default]},o.div({class:[v.caret,b.right]})),this.left_el.addEventListener(\"click\",(()\u003d\u003ethis.do_scroll(\"left\"))),this.right_el.addEventListener(\"click\",(()\u003d\u003ethis.do_scroll(\"right\"))),this.scroll_el\u003do.div({class:m.btn_group},this.left_el,this.right_el);const s\u003dthis.model.tabs_location;this.header_el\u003do.div({class:[b.tabs_header,b[s]]},this.scroll_el,this.wrapper_el),this.el.appendChild(this.header_el)}do_scroll(e){const t\u003dthis.model.tabs.length;\"left\"\u003d\u003de?this._scroll_index-\u003d1:\"right\"\u003d\u003de?this._scroll_index+\u003d1:this._scroll_index\u003de,this._scroll_index\u003dc.clamp(this._scroll_index,0,t-1),0\u003d\u003dthis._scroll_index?this.left_el.setAttribute(\"disabled\",\"\"):this.left_el.removeAttribute(\"disabled\"),this._scroll_index\u003d\u003dt-1?this.right_el.setAttribute(\"disabled\",\"\"):this.right_el.removeAttribute(\"disabled\");const s\u003do.children(this.headers_el).slice(0,this._scroll_index).map((e\u003d\u003ee.getBoundingClientRect())),i\u003dthis.model.tabs_location;if(\"above\"\u003d\u003di||\"below\"\u003d\u003di){const e\u003d-r.sum(s.map((e\u003d\u003ee.width)));this.headers_el.style.left\u003d`${e}px`}else{const e\u003d-r.sum(s.map((e\u003d\u003ee.height)));this.headers_el.style.top\u003d`${e}px`}}change_active(e){e!\u003dthis.model.active\u0026\u0026(this.model.active\u003de)}on_active_change(){const e\u003dthis.model.active,t\u003do.children(this.headers_el);for(const e of t)e.classList.remove(b.active);t[e].classList.add(b.active);const{child_views:s}\u003dthis;for(const e of s)o.hide(e.el);o.show(s[e].el)}}s.TabsView\u003dw,w.__name__\u003d\"TabsView\";class f extends n.LayoutDOM{constructor(e){super(e)}static init_Tabs(){this.prototype.default_view\u003dw,this.define((({Int:e,Array:t,Ref:s})\u003d\u003e({tabs:[t(s(_.Panel)),[]],tabs_location:[d.Location,\"above\"],active:[e,0]})))}}s.Tabs\u003df,f.__name__\u003d\"Tabs\",f.init_Tabs()},\n      function _(e,r,b,o,t){o(),b.root\u003d\"bk-root\",b.tabs_header\u003d\"bk-tabs-header\",b.btn_group\u003d\"bk-btn-group\",b.btn\u003d\"bk-btn\",b.headers_wrapper\u003d\"bk-headers-wrapper\",b.above\u003d\"bk-above\",b.right\u003d\"bk-right\",b.below\u003d\"bk-below\",b.left\u003d\"bk-left\",b.headers\u003d\"bk-headers\",b.tab\u003d\"bk-tab\",b.active\u003d\"bk-active\",b.close\u003d\"bk-close\",b.default\u003d\u0027.bk-root .bk-tabs-header{display:flex;display:-webkit-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;align-items:center;-webkit-align-items:center;overflow:hidden;user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;}.bk-root .bk-tabs-header .bk-btn-group{height:auto;margin-right:5px;}.bk-root .bk-tabs-header .bk-btn-group \u003e .bk-btn{flex-grow:0;-webkit-flex-grow:0;height:auto;padding:4px 4px;}.bk-root .bk-tabs-header .bk-headers-wrapper{flex-grow:1;-webkit-flex-grow:1;overflow:hidden;color:#666666;}.bk-root .bk-tabs-header.bk-above .bk-headers-wrapper{border-bottom:1px solid #e6e6e6;}.bk-root .bk-tabs-header.bk-right .bk-headers-wrapper{border-left:1px solid #e6e6e6;}.bk-root .bk-tabs-header.bk-below .bk-headers-wrapper{border-top:1px solid #e6e6e6;}.bk-root .bk-tabs-header.bk-left .bk-headers-wrapper{border-right:1px solid #e6e6e6;}.bk-root .bk-tabs-header.bk-above,.bk-root .bk-tabs-header.bk-below{flex-direction:row;-webkit-flex-direction:row;}.bk-root .bk-tabs-header.bk-above .bk-headers,.bk-root .bk-tabs-header.bk-below .bk-headers{flex-direction:row;-webkit-flex-direction:row;}.bk-root .bk-tabs-header.bk-left,.bk-root .bk-tabs-header.bk-right{flex-direction:column;-webkit-flex-direction:column;}.bk-root .bk-tabs-header.bk-left .bk-headers,.bk-root .bk-tabs-header.bk-right .bk-headers{flex-direction:column;-webkit-flex-direction:column;}.bk-root .bk-tabs-header .bk-headers{position:relative;display:flex;display:-webkit-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;align-items:center;-webkit-align-items:center;}.bk-root .bk-tabs-header .bk-tab{padding:4px 8px;border:solid transparent;white-space:nowrap;cursor:pointer;}.bk-root .bk-tabs-header .bk-tab:hover{background-color:#f2f2f2;}.bk-root .bk-tabs-header .bk-tab.bk-active{color:#4d4d4d;background-color:white;border-color:#e6e6e6;}.bk-root .bk-tabs-header .bk-tab .bk-close{margin-left:10px;}.bk-root .bk-tabs-header.bk-above .bk-tab{border-width:3px 1px 0px 1px;border-radius:4px 4px 0 0;}.bk-root .bk-tabs-header.bk-right .bk-tab{border-width:1px 3px 1px 0px;border-radius:0 4px 4px 0;}.bk-root .bk-tabs-header.bk-below .bk-tab{border-width:0px 1px 3px 1px;border-radius:0 0 4px 4px;}.bk-root .bk-tabs-header.bk-left .bk-tab{border-width:1px 0px 1px 3px;border-radius:4px 0 0 4px;}.bk-root .bk-close{display:inline-block;width:10px;height:10px;vertical-align:middle;background-image:url(\\\u0027data:image/svg+xml;utf8,      \u003csvg viewPort\u003d\"0 0 10 10\" version\u003d\"1.1\" xmlns\u003d\"http://www.w3.org/2000/svg\"\u003e        \u003cline x1\u003d\"1\" y1\u003d\"9\" x2\u003d\"9\" y2\u003d\"1\" stroke\u003d\"gray\" stroke-width\u003d\"2\"/\u003e        \u003cline x1\u003d\"1\" y1\u003d\"1\" x2\u003d\"9\" y2\u003d\"9\" stroke\u003d\"gray\" stroke-width\u003d\"2\"/\u003e      \u003c/svg\u003e\\\u0027);}.bk-root .bk-close:hover{background-image:url(\\\u0027data:image/svg+xml;utf8,      \u003csvg viewPort\u003d\"0 0 10 10\" version\u003d\"1.1\" xmlns\u003d\"http://www.w3.org/2000/svg\"\u003e        \u003cline x1\u003d\"1\" y1\u003d\"9\" x2\u003d\"9\" y2\u003d\"1\" stroke\u003d\"red\" stroke-width\u003d\"2\"/\u003e        \u003cline x1\u003d\"1\" y1\u003d\"1\" x2\u003d\"9\" y2\u003d\"9\" stroke\u003d\"red\" stroke-width\u003d\"2\"/\u003e      \u003c/svg\u003e\\\u0027);}\u0027},\n      function _(o,b,r,t,e){t(),r.root\u003d\"bk-root\",r.btn\u003d\"bk-btn\",r.active\u003d\"bk-active\",r.btn_default\u003d\"bk-btn-default\",r.btn_primary\u003d\"bk-btn-primary\",r.btn_success\u003d\"bk-btn-success\",r.btn_warning\u003d\"bk-btn-warning\",r.btn_danger\u003d\"bk-btn-danger\",r.btn_light\u003d\"bk-btn-light\",r.btn_group\u003d\"bk-btn-group\",r.dropdown_toggle\u003d\"bk-dropdown-toggle\",r.default\u003d\".bk-root .bk-btn{height:100%;display:inline-block;text-align:center;vertical-align:middle;white-space:nowrap;cursor:pointer;padding:6px 12px;font-size:12px;border:1px solid transparent;border-radius:4px;outline:0;user-select:none;-ms-user-select:none;-moz-user-select:none;-webkit-user-select:none;}.bk-root .bk-btn:hover,.bk-root .bk-btn:focus{text-decoration:none;}.bk-root .bk-btn:active,.bk-root .bk-btn.bk-active{background-image:none;box-shadow:inset 0 3px 5px rgba(0, 0, 0, 0.125);}.bk-root .bk-btn[disabled]{cursor:not-allowed;pointer-events:none;opacity:0.65;box-shadow:none;}.bk-root .bk-btn-default{color:#333;background-color:#fff;border-color:#ccc;}.bk-root .bk-btn-default:hover{background-color:#f5f5f5;border-color:#b8b8b8;}.bk-root .bk-btn-default.bk-active{background-color:#ebebeb;border-color:#adadad;}.bk-root .bk-btn-default[disabled],.bk-root .bk-btn-default[disabled]:hover,.bk-root .bk-btn-default[disabled]:focus,.bk-root .bk-btn-default[disabled]:active,.bk-root .bk-btn-default[disabled].bk-active{background-color:#e6e6e6;border-color:#ccc;}.bk-root .bk-btn-primary{color:#fff;background-color:#428bca;border-color:#357ebd;}.bk-root .bk-btn-primary:hover{background-color:#3681c1;border-color:#2c699e;}.bk-root .bk-btn-primary.bk-active{background-color:#3276b1;border-color:#285e8e;}.bk-root .bk-btn-primary[disabled],.bk-root .bk-btn-primary[disabled]:hover,.bk-root .bk-btn-primary[disabled]:focus,.bk-root .bk-btn-primary[disabled]:active,.bk-root .bk-btn-primary[disabled].bk-active{background-color:#506f89;border-color:#357ebd;}.bk-root .bk-btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c;}.bk-root .bk-btn-success:hover{background-color:#4eb24e;border-color:#409240;}.bk-root .bk-btn-success.bk-active{background-color:#47a447;border-color:#398439;}.bk-root .bk-btn-success[disabled],.bk-root .bk-btn-success[disabled]:hover,.bk-root .bk-btn-success[disabled]:focus,.bk-root .bk-btn-success[disabled]:active,.bk-root .bk-btn-success[disabled].bk-active{background-color:#667b66;border-color:#4cae4c;}.bk-root .bk-btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236;}.bk-root .bk-btn-warning:hover{background-color:#eea43b;border-color:#e89014;}.bk-root .bk-btn-warning.bk-active{background-color:#ed9c28;border-color:#d58512;}.bk-root .bk-btn-warning[disabled],.bk-root .bk-btn-warning[disabled]:hover,.bk-root .bk-btn-warning[disabled]:focus,.bk-root .bk-btn-warning[disabled]:active,.bk-root .bk-btn-warning[disabled].bk-active{background-color:#c89143;border-color:#eea236;}.bk-root .bk-btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a;}.bk-root .bk-btn-danger:hover{background-color:#d5433e;border-color:#bd2d29;}.bk-root .bk-btn-danger.bk-active{background-color:#d2322d;border-color:#ac2925;}.bk-root .bk-btn-danger[disabled],.bk-root .bk-btn-danger[disabled]:hover,.bk-root .bk-btn-danger[disabled]:focus,.bk-root .bk-btn-danger[disabled]:active,.bk-root .bk-btn-danger[disabled].bk-active{background-color:#a55350;border-color:#d43f3a;}.bk-root .bk-btn-light{color:#333;background-color:#fff;border-color:#ccc;border-color:transparent;}.bk-root .bk-btn-light:hover{background-color:#f5f5f5;border-color:#b8b8b8;}.bk-root .bk-btn-light.bk-active{background-color:#ebebeb;border-color:#adadad;}.bk-root .bk-btn-light[disabled],.bk-root .bk-btn-light[disabled]:hover,.bk-root .bk-btn-light[disabled]:focus,.bk-root .bk-btn-light[disabled]:active,.bk-root .bk-btn-light[disabled].bk-active{background-color:#e6e6e6;border-color:#ccc;}.bk-root .bk-btn-group{height:100%;display:flex;display:-webkit-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;align-items:center;-webkit-align-items:center;flex-direction:row;-webkit-flex-direction:row;}.bk-root .bk-btn-group \u003e .bk-btn{flex-grow:1;-webkit-flex-grow:1;}.bk-root .bk-btn-group \u003e .bk-btn + .bk-btn{margin-left:-1px;}.bk-root .bk-btn-group \u003e .bk-btn:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0;}.bk-root .bk-btn-group \u003e .bk-btn:not(:first-child):last-child{border-bottom-left-radius:0;border-top-left-radius:0;}.bk-root .bk-btn-group \u003e .bk-btn:not(:first-child):not(:last-child){border-radius:0;}.bk-root .bk-btn-group .bk-dropdown-toggle{flex:0 0 0;-webkit-flex:0 0 0;padding:6px 6px;}\"},\n      function _(t,e,i,o,n){o();const _\u003dt(320);class s extends _.ColumnView{}i.WidgetBoxView\u003ds,s.__name__\u003d\"WidgetBoxView\";class d extends _.Column{constructor(t){super(t)}static init_WidgetBox(){this.prototype.default_view\u003ds}}i.WidgetBox\u003dd,d.__name__\u003d\"WidgetBox\",d.init_WidgetBox()},\n      function _(p,o,t,a,n){a(),n(\"MapOptions\",p(331).MapOptions),n(\"GMapOptions\",p(331).GMapOptions),n(\"GMapPlot\",p(331).GMapPlot),n(\"Plot\",p(332).Plot)},\n      function _(t,i,n,e,a){e();const s\u003dt(332),o\u003dt(53),p\u003dt(156),_\u003dt(337);a(\"GMapPlotView\",_.GMapPlotView);class l extends o.Model{constructor(t){super(t)}static init_MapOptions(){this.define((({Int:t,Number:i})\u003d\u003e({lat:[i],lng:[i],zoom:[t,12]})))}}n.MapOptions\u003dl,l.__name__\u003d\"MapOptions\",l.init_MapOptions();class r extends l{constructor(t){super(t)}static init_GMapOptions(){this.define((({Boolean:t,Int:i,String:n})\u003d\u003e({map_type:[n,\"roadmap\"],scale_control:[t,!1],styles:[n],tilt:[i,45]})))}}n.GMapOptions\u003dr,r.__name__\u003d\"GMapOptions\",r.init_GMapOptions();class c extends s.Plot{constructor(t){super(t),this.use_map\u003d!0}static init_GMapPlot(){this.prototype.default_view\u003d_.GMapPlotView,this.define((({String:t,Ref:i})\u003d\u003e({map_options:[i(r)],api_key:[t],api_version:[t,\"3.43\"]}))),this.override({x_range:()\u003d\u003enew p.Range1d,y_range:()\u003d\u003enew p.Range1d})}}n.GMapPlot\u003dc,c.__name__\u003d\"GMapPlot\",c.init_GMapPlot()},\n      function _(e,t,i,n,r){n();const o\u003de(1),a\u003do.__importStar(e(48)),s\u003do.__importStar(e(18)),l\u003de(15),_\u003de(20),h\u003de(9),c\u003de(13),d\u003de(8),u\u003de(319),g\u003de(163),p\u003de(316),f\u003de(40),b\u003de(138),w\u003de(218),m\u003de(235),y\u003de(105),v\u003de(146),x\u003de(130),A\u003de(41),R\u003de(62),S\u003de(61),P\u003de(159),D\u003de(333);r(\"PlotView\",D.PlotView);class L extends u.LayoutDOM{constructor(e){super(e),this.use_map\u003d!1}static init_Plot(){this.prototype.default_view\u003dD.PlotView,this.mixins([[\"outline_\",a.Line],[\"background_\",a.Fill],[\"border_\",a.Fill]]),this.define((({Boolean:e,Number:t,String:i,Array:n,Dict:r,Or:o,Ref:a,Null:l,Nullable:h})\u003d\u003e({toolbar:[a(m.Toolbar),()\u003d\u003enew m.Toolbar],toolbar_location:[h(_.Location),\"right\"],toolbar_sticky:[e,!0],plot_width:[s.Alias(\"width\")],plot_height:[s.Alias(\"height\")],frame_width:[h(t),null],frame_height:[h(t),null],title:[o(a(b.Title),i,l),()\u003d\u003enew b.Title({text:\"\"})],title_location:[h(_.Location),\"above\"],above:[n(o(a(f.Annotation),a(g.Axis))),[]],below:[n(o(a(f.Annotation),a(g.Axis))),[]],left:[n(o(a(f.Annotation),a(g.Axis))),[]],right:[n(o(a(f.Annotation),a(g.Axis))),[]],center:[n(o(a(f.Annotation),a(p.Grid))),[]],renderers:[n(a(A.Renderer)),[]],x_range:[a(y.Range),()\u003d\u003enew P.DataRange1d],extra_x_ranges:[r(a(y.Range)),{}],y_range:[a(y.Range),()\u003d\u003enew P.DataRange1d],extra_y_ranges:[r(a(y.Range)),{}],x_scale:[a(v.Scale),()\u003d\u003enew w.LinearScale],y_scale:[a(v.Scale),()\u003d\u003enew w.LinearScale],lod_factor:[t,10],lod_interval:[t,300],lod_threshold:[h(t),2e3],lod_timeout:[t,500],hidpi:[e,!0],output_backend:[_.OutputBackend,\"canvas\"],min_border:[h(t),5],min_border_top:[h(t),null],min_border_left:[h(t),null],min_border_bottom:[h(t),null],min_border_right:[h(t),null],inner_width:[t,0],inner_height:[t,0],outer_width:[t,0],outer_height:[t,0],match_aspect:[e,!1],aspect_scale:[t,1],reset_policy:[_.ResetPolicy,\"standard\"]}))),this.override({width:600,height:600,outline_line_color:\"#e5e5e5\",border_fill_color:\"#ffffff\",background_fill_color:\"#ffffff\"})}_doc_attached(){super._doc_attached(),this._push_changes([[this.properties.inner_height,null,this.inner_height],[this.properties.inner_width,null,this.inner_width]])}initialize(){super.initialize(),this.reset\u003dnew l.Signal0(this,\"reset\");for(const e of c.values(this.extra_x_ranges).concat(this.x_range)){let t\u003de.plots;d.isArray(t)\u0026\u0026(t\u003dt.concat(this),e.setv({plots:t},{silent:!0}))}for(const e of c.values(this.extra_y_ranges).concat(this.y_range)){let t\u003de.plots;d.isArray(t)\u0026\u0026(t\u003dt.concat(this),e.setv({plots:t},{silent:!0}))}}add_layout(e,t\u003d\"center\"){const i\u003dthis.properties[t].get_value();this.setv({[t]:[...i,e]})}remove_layout(e){const t\u003dt\u003d\u003e{h.remove_by(t,(t\u003d\u003et\u003d\u003de))};t(this.left),t(this.right),t(this.above),t(this.below),t(this.center)}get data_renderers(){return this.renderers.filter((e\u003d\u003ee instanceof R.DataRenderer))}add_renderers(...e){this.renderers\u003dthis.renderers.concat(e)}add_glyph(e,t\u003dnew x.ColumnDataSource,i\u003d{}){const n\u003dnew S.GlyphRenderer(Object.assign(Object.assign({},i),{data_source:t,glyph:e}));return this.add_renderers(n),n}add_tools(...e){this.toolbar.tools\u003dthis.toolbar.tools.concat(e)}get panels(){return[...this.side_panels,...this.center]}get side_panels(){const{above:e,below:t,left:i,right:n}\u003dthis;return h.concat([e,t,i,n])}}i.Plot\u003dL,L.__name__\u003d\"Plot\",L.init_Plot()},\n      function _(e,t,i,s,a){s();const n\u003de(1),o\u003de(144),l\u003de(262),r\u003de(319),_\u003de(40),h\u003de(138),d\u003de(163),u\u003de(234),c\u003de(264),p\u003de(122),v\u003de(45),b\u003de(19),g\u003de(334),m\u003de(8),w\u003de(9),y\u003de(249),f\u003de(222),x\u003de(225),z\u003de(223),k\u003de(140),q\u003de(99),M\u003de(335),V\u003de(336),P\u003de(28);class R extends r.LayoutDOMView{constructor(){super(...arguments),this._outer_bbox\u003dnew q.BBox,this._inner_bbox\u003dnew q.BBox,this._needs_paint\u003d!0,this._needs_layout\u003d!1,this._invalidated_painters\u003dnew Set,this._invalidate_all\u003d!0}get canvas(){return this.canvas_view}get state(){return this._state_manager}set invalidate_dataranges(e){this._range_manager.invalidate_dataranges\u003de}renderer_view(e){const t\u003dthis.renderer_views.get(e);if(null\u003d\u003dt)for(const[,t]of this.renderer_views){const i\u003dt.renderer_view(e);if(null!\u003di)return i}return t}get is_paused(){return null!\u003dthis._is_paused\u0026\u00260!\u003d\u003dthis._is_paused}get child_models(){return[]}pause(){null\u003d\u003dthis._is_paused?this._is_paused\u003d1:this._is_paused+\u003d1}unpause(e\u003d!1){if(null\u003d\u003dthis._is_paused)throw new Error(\"wasn\u0027t paused\");this._is_paused-\u003d1,0!\u003dthis._is_paused||e||this.request_paint(\"everything\")}request_render(){this.request_paint(\"everything\")}request_paint(e){this.invalidate_painters(e),this.schedule_paint()}invalidate_painters(e){if(\"everything\"\u003d\u003de)this._invalidate_all\u003d!0;else if(m.isArray(e))for(const t of e)this._invalidated_painters.add(t);else this._invalidated_painters.add(e)}schedule_paint(){if(!this.is_paused){const e\u003dthis.throttled_paint();this._ready\u003dthis._ready.then((()\u003d\u003ee))}}request_layout(){this._needs_layout\u003d!0,this.request_paint(\"everything\")}reset(){\"standard\"\u003d\u003dthis.model.reset_policy\u0026\u0026(this.state.clear(),this.reset_range(),this.reset_selection()),this.model.trigger_event(new c.Reset)}remove(){p.remove_views(this.renderer_views),p.remove_views(this.tool_views),this.canvas_view.remove(),super.remove()}render(){super.render(),this.el.appendChild(this.canvas_view.el),this.canvas_view.render()}initialize(){this.pause(),super.initialize(),this.lod_started\u003d!1,this.visuals\u003dnew v.Visuals(this),this._initial_state\u003d{selection:new Map,dimensions:{width:0,height:0}},this.visibility_callbacks\u003d[],this.renderer_views\u003dnew Map,this.tool_views\u003dnew Map,this.frame\u003dnew o.CartesianFrame(this.model.x_scale,this.model.y_scale,this.model.x_range,this.model.y_range,this.model.extra_x_ranges,this.model.extra_y_ranges),this._range_manager\u003dnew M.RangeManager(this),this._state_manager\u003dnew V.StateManager(this,this._initial_state),this.throttled_paint\u003dg.throttle((()\u003d\u003ethis.repaint()),1e3/60);const{title_location:e,title:t}\u003dthis.model;null!\u003de\u0026\u0026null!\u003dt\u0026\u0026(this._title\u003dt instanceof h.Title?t:new h.Title({text:t}));const{toolbar_location:i,toolbar:s}\u003dthis.model;null!\u003di\u0026\u0026null!\u003ds\u0026\u0026(this._toolbar\u003dnew u.ToolbarPanel({toolbar:s}),s.toolbar_location\u003di)}async lazy_initialize(){await super.lazy_initialize();const{hidpi:e,output_backend:t}\u003dthis.model,i\u003dnew l.Canvas({hidpi:e,output_backend:t});this.canvas_view\u003dawait p.build_view(i,{parent:this}),this.canvas_view.plot_views\u003d[this],await this.build_renderer_views(),await this.build_tool_views(),this._range_manager.update_dataranges(),this.unpause(!0),b.logger.debug(\"PlotView initialized\")}_width_policy(){return null\u003d\u003dthis.model.frame_width?super._width_policy():\"min\"}_height_policy(){return null\u003d\u003dthis.model.frame_height?super._height_policy():\"min\"}_update_layout(){var e,t,i,s,a;this.layout\u003dnew x.BorderLayout,this.layout.set_sizing(this.box_sizing());const n\u003dw.copy(this.model.above),o\u003dw.copy(this.model.below),l\u003dw.copy(this.model.left),r\u003dw.copy(this.model.right),d\u003de\u003d\u003e{switch(e){case\"above\":return n;case\"below\":return o;case\"left\":return l;case\"right\":return r}},{title_location:c,title:p}\u003dthis.model;null!\u003dc\u0026\u0026null!\u003dp\u0026\u0026d(c).push(this._title);const{toolbar_location:v,toolbar:b}\u003dthis.model;if(null!\u003dv\u0026\u0026null!\u003db){const e\u003dd(v);let t\u003d!0;if(this.model.toolbar_sticky)for(let i\u003d0;i\u003ce.length;i++){const s\u003de[i];if(s instanceof h.Title){e[i]\u003d\"above\"\u003d\u003dv||\"below\"\u003d\u003dv?[s,this._toolbar]:[this._toolbar,s],t\u003d!1;break}}t\u0026\u0026e.push(this._toolbar)}const g\u003d(e,t)\u003d\u003e{var i;const s\u003dthis.renderer_view(t);return s.panel\u003dnew k.Panel(e),null\u003d\u003d\u003d(i\u003ds.update_layout)||void 0\u003d\u003d\u003di||i.call(s),s.layout},y\u003d(e,t)\u003d\u003e{const i\u003d\"above\"\u003d\u003de||\"below\"\u003d\u003de,s\u003d[];for(const a of t)if(m.isArray(a)){const t\u003da.map((t\u003d\u003e{const s\u003dg(e,t);if(t instanceof u.ToolbarPanel){const e\u003di?\"width_policy\":\"height_policy\";s.set_sizing(Object.assign(Object.assign({},s.sizing),{[e]:\"min\"}))}return s}));let n;i?(n\u003dnew z.Row(t),n.set_sizing({width_policy:\"max\",height_policy:\"min\"})):(n\u003dnew z.Column(t),n.set_sizing({width_policy:\"min\",height_policy:\"max\"})),n.absolute\u003d!0,s.push(n)}else s.push(g(e,a));return s},q\u003dnull!\u003d\u003d(e\u003dthis.model.min_border)\u0026\u0026void 0!\u003d\u003de?e:0;this.layout.min_border\u003d{left:null!\u003d\u003d(t\u003dthis.model.min_border_left)\u0026\u0026void 0!\u003d\u003dt?t:q,top:null!\u003d\u003d(i\u003dthis.model.min_border_top)\u0026\u0026void 0!\u003d\u003di?i:q,right:null!\u003d\u003d(s\u003dthis.model.min_border_right)\u0026\u0026void 0!\u003d\u003ds?s:q,bottom:null!\u003d\u003d(a\u003dthis.model.min_border_bottom)\u0026\u0026void 0!\u003d\u003da?a:q};const M\u003dnew f.NodeLayout,V\u003dnew f.VStack,P\u003dnew f.VStack,R\u003dnew f.HStack,O\u003dnew f.HStack;M.absolute\u003d!0,V.absolute\u003d!0,P.absolute\u003d!0,R.absolute\u003d!0,O.absolute\u003d!0,M.children\u003dthis.model.center.filter((e\u003d\u003ee instanceof _.Annotation)).map((e\u003d\u003e{var t;const i\u003dthis.renderer_view(e);return null\u003d\u003d\u003d(t\u003di.update_layout)||void 0\u003d\u003d\u003dt||t.call(i),i.layout})).filter((e\u003d\u003enull!\u003de));const{frame_width:S,frame_height:j}\u003dthis.model;M.set_sizing(Object.assign(Object.assign({},null!\u003dS?{width_policy:\"fixed\",width:S}:{width_policy:\"fit\"}),null!\u003dj?{height_policy:\"fixed\",height:j}:{height_policy:\"fit\"})),M.on_resize((e\u003d\u003ethis.frame.set_geometry(e))),V.children\u003dw.reversed(y(\"above\",n)),P.children\u003dy(\"below\",o),R.children\u003dw.reversed(y(\"left\",l)),O.children\u003dy(\"right\",r),V.set_sizing({width_policy:\"fit\",height_policy:\"min\"}),P.set_sizing({width_policy:\"fit\",height_policy:\"min\"}),R.set_sizing({width_policy:\"min\",height_policy:\"fit\"}),O.set_sizing({width_policy:\"min\",height_policy:\"fit\"}),this.layout.center_panel\u003dM,this.layout.top_panel\u003dV,this.layout.bottom_panel\u003dP,this.layout.left_panel\u003dR,this.layout.right_panel\u003dO}get axis_views(){const e\u003d[];for(const[,t]of this.renderer_views)t instanceof d.AxisView\u0026\u0026e.push(t);return e}set_toolbar_visibility(e){for(const t of this.visibility_callbacks)t(e)}update_range(e,t){this.pause(),this._range_manager.update(e,t),this.unpause()}reset_range(){this.update_range(null)}get_selection(){const e\u003dnew Map;for(const t of this.model.data_renderers){const{selected:i}\u003dt.selection_manager.source;e.set(t,i)}return e}update_selection(e){for(const t of this.model.data_renderers){const i\u003dt.selection_manager.source;if(null!\u003de){const s\u003de.get(t);null!\u003ds\u0026\u0026i.selected.update(s,!0)}else i.selection_manager.clear()}}reset_selection(){this.update_selection(null)}_invalidate_layout(){(()\u003d\u003e{var e;for(const t of this.model.side_panels){const i\u003dthis.renderer_views.get(t);if(null\u003d\u003d\u003d(e\u003di.layout)||void 0\u003d\u003d\u003de?void 0:e.has_size_changed())return this.invalidate_painters(i),!0}return!1})()\u0026\u0026this.root.compute_layout()}get_renderer_views(){return this.computed_renderers.map((e\u003d\u003ethis.renderer_views.get(e)))}*_compute_renderers(){const{above:e,below:t,left:i,right:s,center:a,renderers:n}\u003dthis.model;yield*n,yield*e,yield*t,yield*i,yield*s,yield*a,null!\u003dthis._title\u0026\u0026(yield this._title),null!\u003dthis._toolbar\u0026\u0026(yield this._toolbar);for(const e of this.model.toolbar.tools)null!\u003de.overlay\u0026\u0026(yield e.overlay),yield*e.synthetic_renderers}async build_renderer_views(){this.computed_renderers\u003d[...this._compute_renderers()],await p.build_views(this.renderer_views,this.computed_renderers,{parent:this})}async build_tool_views(){const e\u003dthis.model.toolbar.tools;(await p.build_views(this.tool_views,e,{parent:this})).map((e\u003d\u003ethis.canvas_view.ui_event_bus.register_tool(e)))}connect_signals(){super.connect_signals();const{x_ranges:e,y_ranges:t}\u003dthis.frame;for(const[,t]of e)this.connect(t.change,(()\u003d\u003e{this._needs_layout\u003d!0,this.request_paint(\"everything\")}));for(const[,e]of t)this.connect(e.change,(()\u003d\u003e{this._needs_layout\u003d!0,this.request_paint(\"everything\")}));const{above:i,below:s,left:a,right:n,center:o,renderers:l}\u003dthis.model.properties;this.on_change([i,s,a,n,o,l],(async()\u003d\u003eawait this.build_renderer_views())),this.connect(this.model.toolbar.properties.tools.change,(async()\u003d\u003e{await this.build_renderer_views(),await this.build_tool_views()})),this.connect(this.model.change,(()\u003d\u003ethis.request_paint(\"everything\"))),this.connect(this.model.reset,(()\u003d\u003ethis.reset()))}has_finished(){if(!super.has_finished())return!1;if(this.model.visible)for(const[,e]of this.renderer_views)if(!e.has_finished())return!1;return!0}after_layout(){var e;super.after_layout();for(const[,t]of this.renderer_views)t instanceof _.AnnotationView\u0026\u0026(null\u003d\u003d\u003d(e\u003dt.after_layout)||void 0\u003d\u003d\u003de||e.call(t));if(this._needs_layout\u003d!1,this.model.setv({inner_width:Math.round(this.frame.bbox.width),inner_height:Math.round(this.frame.bbox.height),outer_width:Math.round(this.layout.bbox.width),outer_height:Math.round(this.layout.bbox.height)},{no_change:!0}),!1!\u003d\u003dthis.model.match_aspect\u0026\u0026(this.pause(),this._range_manager.update_dataranges(),this.unpause(!0)),!this._outer_bbox.equals(this.layout.bbox)){const{width:e,height:t}\u003dthis.layout.bbox;this.canvas_view.resize(e,t),this._outer_bbox\u003dthis.layout.bbox,this._invalidate_all\u003d!0,this._needs_paint\u003d!0}const{inner_bbox:t}\u003dthis.layout;this._inner_bbox.equals(t)||(this._inner_bbox\u003dt,this._needs_paint\u003d!0),this._needs_paint\u0026\u0026this.paint()}repaint(){this._needs_layout\u0026\u0026this._invalidate_layout(),this.paint()}paint(){var e;if(this.is_paused||!this.model.visible)return;b.logger.trace(`PlotView.paint() for ${this.model.id}`);const{document:t}\u003dthis.model;if(null!\u003dt){const e\u003dt.interactive_duration();e\u003e\u003d0\u0026\u0026e\u003cthis.model.lod_interval?setTimeout((()\u003d\u003e{t.interactive_duration()\u003ethis.model.lod_timeout\u0026\u0026t.interactive_stop(),this.request_paint(\"everything\")}),this.model.lod_timeout):t.interactive_stop()}this._range_manager.invalidate_dataranges\u0026\u0026(this._range_manager.update_dataranges(),this._invalidate_layout());let i\u003d!1,s\u003d!1;if(this._invalidate_all)i\u003d!0,s\u003d!0;else for(const e of this._invalidated_painters){const{level:t}\u003de.model;if(\"overlay\"!\u003dt?i\u003d!0:s\u003d!0,i\u0026\u0026s)break}this._invalidated_painters.clear(),this._invalidate_all\u003d!1;const a\u003d[this.frame.bbox.left,this.frame.bbox.top,this.frame.bbox.width,this.frame.bbox.height],{primary:n,overlays:o}\u003dthis.canvas_view;i\u0026\u0026(n.prepare(),this.canvas_view.prepare_webgl(a),this._map_hook(n.ctx,a),this._paint_empty(n.ctx,a),this._paint_outline(n.ctx,a),this._paint_levels(n.ctx,\"image\",a,!0),this._paint_levels(n.ctx,\"underlay\",a,!0),this._paint_levels(n.ctx,\"glyph\",a,!0),this._paint_levels(n.ctx,\"guide\",a,!1),this._paint_levels(n.ctx,\"annotation\",a,!1),n.finish()),(s||P.settings.wireframe)\u0026\u0026(o.prepare(),this._paint_levels(o.ctx,\"overlay\",a,!1),P.settings.wireframe\u0026\u0026this._paint_layout(o.ctx,this.layout),o.finish()),null\u003d\u003dthis._initial_state.range\u0026\u0026(this._initial_state.range\u003dnull!\u003d\u003d(e\u003dthis._range_manager.compute_initial())\u0026\u0026void 0!\u003d\u003de?e:void 0),this._needs_paint\u003d!1}_paint_levels(e,t,i,s){for(const a of this.computed_renderers){if(a.level!\u003dt)continue;const n\u003dthis.renderer_views.get(a);e.save(),(s||n.needs_clip)\u0026\u0026(e.beginPath(),e.rect(...i),e.clip()),n.render(),e.restore(),n.has_webgl\u0026\u0026n.needs_webgl_blit\u0026\u0026this.canvas_view.blit_webgl(e)}}_paint_layout(e,t){const{x:i,y:s,width:a,height:n}\u003dt.bbox;e.strokeStyle\u003d\"blue\",e.strokeRect(i,s,a,n);for(const a of t)e.save(),t.absolute||e.translate(i,s),this._paint_layout(e,a),e.restore()}_map_hook(e,t){}_paint_empty(e,t){const[i,s,a,n]\u003d[0,0,this.layout.bbox.width,this.layout.bbox.height],[o,l,r,_]\u003dt;this.visuals.border_fill.doit\u0026\u0026(this.visuals.border_fill.set_value(e),e.fillRect(i,s,a,n),e.clearRect(o,l,r,_)),this.visuals.background_fill.doit\u0026\u0026(this.visuals.background_fill.set_value(e),e.fillRect(o,l,r,_))}_paint_outline(e,t){if(this.visuals.outline_line.doit){e.save(),this.visuals.outline_line.set_value(e);let[i,s,a,n]\u003dt;i+a\u003d\u003dthis.layout.bbox.width\u0026\u0026(a-\u003d1),s+n\u003d\u003dthis.layout.bbox.height\u0026\u0026(n-\u003d1),e.strokeRect(i,s,a,n),e.restore()}}to_blob(){return this.canvas_view.to_blob()}export(e,t\u003d!0){const i\u003d\"png\"\u003d\u003de?\"canvas\":\"svg\",s\u003dnew y.CanvasLayer(i,t),{width:a,height:n}\u003dthis.layout.bbox;s.resize(a,n);const{canvas:o}\u003dthis.canvas_view.compose();return s.ctx.drawImage(o,0,0),s}serializable_state(){const e\u003dsuper.serializable_state(),{children:t}\u003de,i\u003dn.__rest(e,[\"children\"]),s\u003dthis.get_renderer_views().map((e\u003d\u003ee.serializable_state())).filter((e\u003d\u003enull!\u003de.bbox));return Object.assign(Object.assign({},i),{children:[...null!\u003dt?t:[],...s]})}}i.PlotView\u003dR,R.__name__\u003d\"PlotView\"},\n      function _(t,n,e,o,u){o(),e.throttle\u003dfunction(t,n){let e\u003dnull,o\u003d0,u\u003d!1;return function(){return new Promise(((r,i)\u003d\u003e{const l\u003dfunction(){o\u003dDate.now(),e\u003dnull,u\u003d!1;try{t(),r()}catch(t){i(t)}},a\u003dDate.now(),c\u003dn-(a-o);c\u003c\u003d0\u0026\u0026!u?(null!\u003de\u0026\u0026clearTimeout(e),u\u003d!0,requestAnimationFrame(l)):e||u?r():e\u003dsetTimeout((()\u003d\u003erequestAnimationFrame(l)),c)}))}}},\n      function _(t,n,e,s,a){s();const o\u003dt(159),r\u003dt(19);class l{constructor(t){this.parent\u003dt,this.invalidate_dataranges\u003d!0}get frame(){return this.parent.frame}update(t,n){const{x_ranges:e,y_ranges:s}\u003dthis.frame;if(null\u003d\u003dt){for(const[,t]of e)t.reset();for(const[,t]of s)t.reset();this.update_dataranges()}else{const a\u003d[];for(const[n,s]of e)a.push([s,t.xrs.get(n)]);for(const[n,e]of s)a.push([e,t.yrs.get(n)]);(null\u003d\u003dn?void 0:n.scrolling)\u0026\u0026this._update_ranges_together(a),this._update_ranges_individually(a,n)}}reset(){this.update(null)}update_dataranges(){const t\u003dnew Map,n\u003dnew Map;let e\u003d!1;for(const[,t]of this.frame.x_ranges)t instanceof o.DataRange1d\u0026\u0026\"log\"\u003d\u003dt.scale_hint\u0026\u0026(e\u003d!0);for(const[,t]of this.frame.y_ranges)t instanceof o.DataRange1d\u0026\u0026\"log\"\u003d\u003dt.scale_hint\u0026\u0026(e\u003d!0);for(const s of this.parent.model.data_renderers){const a\u003dthis.parent.renderer_view(s);if(null\u003d\u003da)continue;const o\u003da.glyph_view.bounds();if(null!\u003do\u0026\u0026t.set(s,o),e){const t\u003da.glyph_view.log_bounds();null!\u003dt\u0026\u0026n.set(s,t)}}let s\u003d!1,a\u003d!1;const{width:l,height:i}\u003dthis.frame.bbox;let d;!1!\u003d\u003dthis.parent.model.match_aspect\u0026\u00260!\u003dl\u0026\u00260!\u003di\u0026\u0026(d\u003d1/this.parent.model.aspect_scale*(l/i));for(const[,e]of this.frame.x_ranges){if(e instanceof o.DataRange1d){const a\u003d\"log\"\u003d\u003de.scale_hint?n:t;e.update(a,0,this.parent.model,d),e.follow\u0026\u0026(s\u003d!0)}null!\u003de.bounds\u0026\u0026(a\u003d!0)}for(const[,e]of this.frame.y_ranges){if(e instanceof o.DataRange1d){const a\u003d\"log\"\u003d\u003de.scale_hint?n:t;e.update(a,1,this.parent.model,d),e.follow\u0026\u0026(s\u003d!0)}null!\u003de.bounds\u0026\u0026(a\u003d!0)}if(s\u0026\u0026a){r.logger.warn(\"Follow enabled so bounds are unset.\");for(const[,t]of this.frame.x_ranges)t.bounds\u003dnull;for(const[,t]of this.frame.y_ranges)t.bounds\u003dnull}this.invalidate_dataranges\u003d!1}compute_initial(){let t\u003d!0;const{x_ranges:n,y_ranges:e}\u003dthis.frame,s\u003dnew Map,a\u003dnew Map;for(const[e,a]of n){const{start:n,end:o}\u003da;if(null\u003d\u003dn||null\u003d\u003do||isNaN(n+o)){t\u003d!1;break}s.set(e,{start:n,end:o})}if(t)for(const[n,s]of e){const{start:e,end:o}\u003ds;if(null\u003d\u003de||null\u003d\u003do||isNaN(e+o)){t\u003d!1;break}a.set(n,{start:e,end:o})}return t?{xrs:s,yrs:a}:(r.logger.warn(\"could not set initial ranges\"),null)}_update_ranges_together(t){let n\u003d1;for(const[e,s]of t)n\u003dMath.min(n,this._get_weight_to_constrain_interval(e,s));if(n\u003c1)for(const[e,s]of t)s.start\u003dn*s.start+(1-n)*e.start,s.end\u003dn*s.end+(1-n)*e.end}_update_ranges_individually(t,n){const e\u003d!!(null\u003d\u003dn?void 0:n.panning),s\u003d!!(null\u003d\u003dn?void 0:n.scrolling);let a\u003d!1;for(const[n,o]of t){if(!s){const t\u003dthis._get_weight_to_constrain_interval(n,o);t\u003c1\u0026\u0026(o.start\u003dt*o.start+(1-t)*n.start,o.end\u003dt*o.end+(1-t)*n.end)}if(null!\u003dn.bounds\u0026\u0026\"auto\"!\u003dn.bounds){const[t,r]\u003dn.bounds,l\u003dMath.abs(o.end-o.start);n.is_reversed?(null!\u003dt\u0026\u0026t\u003e\u003do.end\u0026\u0026(a\u003d!0,o.end\u003dt,(e||s)\u0026\u0026(o.start\u003dt+l)),null!\u003dr\u0026\u0026r\u003c\u003do.start\u0026\u0026(a\u003d!0,o.start\u003dr,(e||s)\u0026\u0026(o.end\u003dr-l))):(null!\u003dt\u0026\u0026t\u003e\u003do.start\u0026\u0026(a\u003d!0,o.start\u003dt,(e||s)\u0026\u0026(o.end\u003dt+l)),null!\u003dr\u0026\u0026r\u003c\u003do.end\u0026\u0026(a\u003d!0,o.end\u003dr,(e||s)\u0026\u0026(o.start\u003dr-l)))}}if(!(s\u0026\u0026a\u0026\u0026(null\u003d\u003dn?void 0:n.maintain_focus)))for(const[n,e]of t)n.have_updated_interactively\u003d!0,n.start\u003d\u003de.start\u0026\u0026n.end\u003d\u003de.end||n.setv(e)}_get_weight_to_constrain_interval(t,n){const{min_interval:e}\u003dt;let{max_interval:s}\u003dt;if(null!\u003dt.bounds\u0026\u0026\"auto\"!\u003dt.bounds){const[n,e]\u003dt.bounds;if(null!\u003dn\u0026\u0026null!\u003de){const t\u003dMath.abs(e-n);s\u003dnull!\u003ds?Math.min(s,t):t}}let a\u003d1;if(null!\u003de||null!\u003ds){const o\u003dMath.abs(t.end-t.start),r\u003dMath.abs(n.end-n.start);null!\u003de\u0026\u0026e\u003e0\u0026\u0026r\u003ce\u0026\u0026(a\u003d(o-e)/(o-r)),null!\u003ds\u0026\u0026s\u003e0\u0026\u0026r\u003es\u0026\u0026(a\u003d(s-o)/(r-o)),a\u003dMath.max(0,Math.min(1,a))}return a}}e.RangeManager\u003dl,l.__name__\u003d\"RangeManager\"},\n      function _(t,i,s,e,n){e();const h\u003dt(15);class a{constructor(t,i){this.parent\u003dt,this.initial_state\u003di,this.changed\u003dnew h.Signal0(this.parent,\"state_changed\"),this.history\u003d[],this.index\u003d-1}_do_state_change(t){const i\u003dnull!\u003dthis.history[t]?this.history[t].state:this.initial_state;null!\u003di.range\u0026\u0026this.parent.update_range(i.range),null!\u003di.selection\u0026\u0026this.parent.update_selection(i.selection)}push(t,i){const{history:s,index:e}\u003dthis,n\u003dnull!\u003ds[e]?s[e].state:{},h\u003dObject.assign(Object.assign(Object.assign({},this.initial_state),n),i);this.history\u003dthis.history.slice(0,this.index+1),this.history.push({type:t,state:h}),this.index\u003dthis.history.length-1,this.changed.emit()}clear(){this.history\u003d[],this.index\u003d-1,this.changed.emit()}undo(){this.can_undo\u0026\u0026(this.index-\u003d1,this._do_state_change(this.index),this.changed.emit())}redo(){this.can_redo\u0026\u0026(this.index+\u003d1,this._do_state_change(this.index),this.changed.emit())}get can_undo(){return this.index\u003e\u003d0}get can_redo(){return this.index\u003cthis.history.length-1}}s.StateManager\u003da,a.__name__\u003d\"StateManager\"},\n      function _(t,e,s,o,i){o();const a\u003dt(19),n\u003dt(15),p\u003dt(43),l\u003dt(65),_\u003dt(22),h\u003dt(333),m\u003dnew n.Signal0({},\"gmaps_ready\");class d extends h.PlotView{initialize(){this.pause(),super.initialize(),this._tiles_loaded\u003d!1,this.zoom_count\u003d0;const{zoom:t,lat:e,lng:s}\u003dthis.model.map_options;if(this.initial_zoom\u003dt,this.initial_lat\u003de,this.initial_lng\u003ds,!this.model.api_key){const t\u003d\"https://developers.google.com/maps/documentation/javascript/get-api-key\";a.logger.error(`api_key is required. See ${t} for more information on how to obtain your own.`)}if(\"undefined\"\u003d\u003dtypeof google||null\u003d\u003dgoogle.maps){if(void 0\u003d\u003d\u003dwindow._bokeh_gmaps_callback){const{api_key:t,api_version:e}\u003dthis.model;!function(t,e){window._bokeh_gmaps_callback\u003d()\u003d\u003em.emit();const s\u003dencodeURIComponent,o\u003ddocument.createElement(\"script\");o.type\u003d\"text/javascript\",o.src\u003d`https://maps.googleapis.com/maps/api/js?v\u003d${s(e)}\u0026key\u003d${s(t)}\u0026callback\u003d_bokeh_gmaps_callback`,document.body.appendChild(o)}(t,e)}m.connect((()\u003d\u003ethis.request_paint(\"everything\")))}this.unpause()}remove(){p.remove(this.map_el),super.remove()}update_range(t,e){var s,o;if(null\u003d\u003dt)this.map.setCenter({lat:this.initial_lat,lng:this.initial_lng}),this.map.setOptions({zoom:this.initial_zoom}),super.update_range(null,e);else if(null!\u003dt.sdx||null!\u003dt.sdy)this.map.panBy(null!\u003d\u003d(s\u003dt.sdx)\u0026\u0026void 0!\u003d\u003ds?s:0,null!\u003d\u003d(o\u003dt.sdy)\u0026\u0026void 0!\u003d\u003do?o:0),super.update_range(t,e);else if(null!\u003dt.factor){if(10!\u003d\u003dthis.zoom_count)return void(this.zoom_count+\u003d1);this.zoom_count\u003d0,this.pause(),super.update_range(t,e);const s\u003dt.factor\u003c0?-1:1,o\u003dthis.map.getZoom(),i\u003do+s;if(i\u003e\u003d2){this.map.setZoom(i);const[t,e,,]\u003dthis._get_projected_bounds();e-t\u003c0\u0026\u0026this.map.setZoom(o)}this.unpause()}this._set_bokeh_ranges()}_build_map(){const{maps:t}\u003dgoogle;this.map_types\u003d{satellite:t.MapTypeId.SATELLITE,terrain:t.MapTypeId.TERRAIN,roadmap:t.MapTypeId.ROADMAP,hybrid:t.MapTypeId.HYBRID};const e\u003dthis.model.map_options,s\u003d{center:new t.LatLng(e.lat,e.lng),zoom:e.zoom,disableDefaultUI:!0,mapTypeId:this.map_types[e.map_type],scaleControl:e.scale_control,tilt:e.tilt};null!\u003de.styles\u0026\u0026(s.styles\u003dJSON.parse(e.styles)),this.map_el\u003dp.div({style:{position:\"absolute\"}}),this.canvas_view.add_underlay(this.map_el),this.map\u003dnew t.Map(this.map_el,s),t.event.addListener(this.map,\"idle\",(()\u003d\u003ethis._set_bokeh_ranges())),t.event.addListener(this.map,\"bounds_changed\",(()\u003d\u003ethis._set_bokeh_ranges())),t.event.addListenerOnce(this.map,\"tilesloaded\",(()\u003d\u003ethis._render_finished())),this.connect(this.model.properties.map_options.change,(()\u003d\u003ethis._update_options())),this.connect(this.model.map_options.properties.styles.change,(()\u003d\u003ethis._update_styles())),this.connect(this.model.map_options.properties.lat.change,(()\u003d\u003ethis._update_center(\"lat\"))),this.connect(this.model.map_options.properties.lng.change,(()\u003d\u003ethis._update_center(\"lng\"))),this.connect(this.model.map_options.properties.zoom.change,(()\u003d\u003ethis._update_zoom())),this.connect(this.model.map_options.properties.map_type.change,(()\u003d\u003ethis._update_map_type())),this.connect(this.model.map_options.properties.scale_control.change,(()\u003d\u003ethis._update_scale_control())),this.connect(this.model.map_options.properties.tilt.change,(()\u003d\u003ethis._update_tilt()))}_render_finished(){this._tiles_loaded\u003d!0,this.notify_finished()}has_finished(){return super.has_finished()\u0026\u0026!0\u003d\u003d\u003dthis._tiles_loaded}_get_latlon_bounds(){const t\u003dthis.map.getBounds(),e\u003dt.getNorthEast(),s\u003dt.getSouthWest();return[s.lng(),e.lng(),s.lat(),e.lat()]}_get_projected_bounds(){const[t,e,s,o]\u003dthis._get_latlon_bounds(),[i,a]\u003dl.wgs84_mercator.compute(t,s),[n,p]\u003dl.wgs84_mercator.compute(e,o);return[i,n,a,p]}_set_bokeh_ranges(){const[t,e,s,o]\u003dthis._get_projected_bounds();this.frame.x_range.setv({start:t,end:e}),this.frame.y_range.setv({start:s,end:o})}_update_center(t){const e\u003dthis.map.getCenter().toJSON();e[t]\u003dthis.model.map_options[t],this.map.setCenter(e),this._set_bokeh_ranges()}_update_map_type(){this.map.setOptions({mapTypeId:this.map_types[this.model.map_options.map_type]})}_update_scale_control(){this.map.setOptions({scaleControl:this.model.map_options.scale_control})}_update_tilt(){this.map.setOptions({tilt:this.model.map_options.tilt})}_update_options(){this._update_styles(),this._update_center(\"lat\"),this._update_center(\"lng\"),this._update_zoom(),this._update_map_type()}_update_styles(){this.map.setOptions({styles:JSON.parse(this.model.map_options.styles)})}_update_zoom(){this.map.setOptions({zoom:this.model.map_options.zoom}),this._set_bokeh_ranges()}_map_hook(t,e){if(null\u003d\u003dthis.map\u0026\u0026\"undefined\"!\u003dtypeof google\u0026\u0026null!\u003dgoogle.maps\u0026\u0026this._build_map(),null!\u003dthis.map_el){const[t,s,o,i]\u003de;this.map_el.style.top\u003d`${s}px`,this.map_el.style.left\u003d`${t}px`,this.map_el.style.width\u003d`${o}px`,this.map_el.style.height\u003d`${i}px`}}_paint_empty(t,e){const s\u003dthis.layout.bbox.width,o\u003dthis.layout.bbox.height,[i,a,n,p]\u003de;t.clearRect(0,0,s,o),t.beginPath(),t.moveTo(0,0),t.lineTo(0,o),t.lineTo(s,o),t.lineTo(s,0),t.lineTo(0,0),t.moveTo(i,a),t.lineTo(i+n,a),t.lineTo(i+n,a+p),t.lineTo(i,a+p),t.lineTo(i,a),t.closePath(),null!\u003dthis.model.border_fill_color\u0026\u0026(t.fillStyle\u003d_.color2css(this.model.border_fill_color),t.fill())}}s.GMapPlotView\u003dd,d.__name__\u003d\"GMapPlotView\"},\n      function _(t,_,n,o,r){o();t(1).__exportStar(t(169),n)},\n      function _(e,r,d,n,R){n(),R(\"GlyphRenderer\",e(61).GlyphRenderer),R(\"GraphRenderer\",e(123).GraphRenderer),R(\"GuideRenderer\",e(164).GuideRenderer),R(\"Renderer\",e(41).Renderer)},\n      function _(e,t,n,o,c){o();e(1).__exportStar(e(129),n),c(\"Selection\",e(59).Selection)},\n      function _(a,e,S,o,r){o(),r(\"ServerSentDataSource\",a(342).ServerSentDataSource),r(\"AjaxDataSource\",a(344).AjaxDataSource),r(\"ColumnDataSource\",a(130).ColumnDataSource),r(\"ColumnarDataSource\",a(57).ColumnarDataSource),r(\"CDSView\",a(120).CDSView),r(\"DataSource\",a(58).DataSource),r(\"GeoJSONDataSource\",a(345).GeoJSONDataSource),r(\"WebDataSource\",a(343).WebDataSource)},\n      function _(e,t,i,a,s){a();const n\u003de(343);class r extends n.WebDataSource{constructor(e){super(e),this.initialized\u003d!1}setup(){if(!this.initialized){this.initialized\u003d!0;new EventSource(this.data_url).onmessage\u003de\u003d\u003e{var t;this.load_data(JSON.parse(e.data),this.mode,null!\u003d\u003d(t\u003dthis.max_size)\u0026\u0026void 0!\u003d\u003dt?t:void 0)}}}}i.ServerSentDataSource\u003dr,r.__name__\u003d\"ServerSentDataSource\"},\n      function _(t,e,a,n,s){n();const r\u003dt(130),i\u003dt(20);class l extends r.ColumnDataSource{constructor(t){super(t)}get_column(t){const e\u003dthis.data[t];return null!\u003de?e:[]}get_length(){var t;return null!\u003d\u003d(t\u003dsuper.get_length())\u0026\u0026void 0!\u003d\u003dt?t:0}initialize(){super.initialize(),this.setup()}load_data(t,e,a){const{adapter:n}\u003dthis;let s;switch(s\u003dnull!\u003dn?n.execute(this,{response:t}):t,e){case\"replace\":this.data\u003ds;break;case\"append\":{const t\u003dthis.data;for(const e of this.columns()){const n\u003dArray.from(t[e]),r\u003dArray.from(s[e]),i\u003dn.concat(r);s[e]\u003dnull!\u003da?i.slice(-a):i}this.data\u003ds;break}}}static init_WebDataSource(){this.define((({Any:t,Int:e,String:a,Nullable:n})\u003d\u003e({max_size:[n(e),null],mode:[i.UpdateMode,\"replace\"],adapter:[n(t),null],data_url:[a]})))}}a.WebDataSource\u003dl,l.__name__\u003d\"WebDataSource\",l.init_WebDataSource()},\n      function _(t,e,i,s,a){s();const n\u003dt(343),r\u003dt(20),o\u003dt(19),l\u003dt(13);class d extends n.WebDataSource{constructor(t){super(t),this.interval\u003dnull,this.initialized\u003d!1}static init_AjaxDataSource(){this.define((({Boolean:t,Int:e,String:i,Dict:s,Nullable:a})\u003d\u003e({polling_interval:[a(e),null],content_type:[i,\"application/json\"],http_headers:[s(i),{}],method:[r.HTTPMethod,\"POST\"],if_modified:[t,!1]})))}destroy(){null!\u003dthis.interval\u0026\u0026clearInterval(this.interval),super.destroy()}setup(){if(!this.initialized\u0026\u0026(this.initialized\u003d!0,this.get_data(this.mode),null!\u003dthis.polling_interval)){const t\u003d()\u003d\u003ethis.get_data(this.mode,this.max_size,this.if_modified);this.interval\u003dsetInterval(t,this.polling_interval)}}get_data(t,e\u003dnull,i\u003d!1){const s\u003dthis.prepare_request();s.addEventListener(\"load\",(()\u003d\u003ethis.do_load(s,t,null!\u003de?e:void 0))),s.addEventListener(\"error\",(()\u003d\u003ethis.do_error(s))),s.send()}prepare_request(){const t\u003dnew XMLHttpRequest;t.open(this.method,this.data_url,!0),t.withCredentials\u003d!1,t.setRequestHeader(\"Content-Type\",this.content_type);const e\u003dthis.http_headers;for(const[i,s]of l.entries(e))t.setRequestHeader(i,s);return t}do_load(t,e,i){if(200\u003d\u003d\u003dt.status){const s\u003dJSON.parse(t.responseText);this.load_data(s,e,i)}}do_error(t){o.logger.error(`Failed to fetch JSON from ${this.data_url} with code ${t.status}`)}}i.AjaxDataSource\u003dd,d.__name__\u003d\"AjaxDataSource\",d.init_AjaxDataSource()},\n      function _(e,t,o,r,n){r();const s\u003de(57),a\u003de(19),i\u003de(9),l\u003de(13);function c(e){return null!\u003de?e:NaN}const{hasOwnProperty:_}\u003dObject.prototype;class g extends s.ColumnarDataSource{constructor(e){super(e)}static init_GeoJSONDataSource(){this.define((({String:e})\u003d\u003e({geojson:[e]}))),this.internal((({Dict:e,Arrayable:t})\u003d\u003e({data:[e(t),{}]})))}initialize(){super.initialize(),this._update_data()}connect_signals(){super.connect_signals(),this.connect(this.properties.geojson.change,(()\u003d\u003ethis._update_data()))}_update_data(){this.data\u003dthis.geojson_to_column_data()}_get_new_list_array(e){return i.range(0,e).map((e\u003d\u003e[]))}_get_new_nan_array(e){return i.range(0,e).map((e\u003d\u003eNaN))}_add_properties(e,t,o,r){var n;const s\u003dnull!\u003d\u003d(n\u003de.properties)\u0026\u0026void 0!\u003d\u003dn?n:{};for(const[e,n]of l.entries(s))_.call(t,e)||(t[e]\u003dthis._get_new_nan_array(r)),t[e][o]\u003dc(n)}_add_geometry(e,t,o){function r(e,t){return e.concat([[NaN,NaN,NaN]]).concat(t)}switch(e.type){case\"Point\":{const[r,n,s]\u003de.coordinates;t.x[o]\u003dr,t.y[o]\u003dn,t.z[o]\u003dc(s);break}case\"LineString\":{const{coordinates:r}\u003de;for(let e\u003d0;e\u003cr.length;e++){const[n,s,a]\u003dr[e];t.xs[o][e]\u003dn,t.ys[o][e]\u003ds,t.zs[o][e]\u003dc(a)}break}case\"Polygon\":{e.coordinates.length\u003e1\u0026\u0026a.logger.warn(\"Bokeh does not support Polygons with holes in, only exterior ring used.\");const r\u003de.coordinates[0];for(let e\u003d0;e\u003cr.length;e++){const[n,s,a]\u003dr[e];t.xs[o][e]\u003dn,t.ys[o][e]\u003ds,t.zs[o][e]\u003dc(a)}break}case\"MultiPoint\":a.logger.warn(\"MultiPoint not supported in Bokeh\");break;case\"MultiLineString\":{const n\u003de.coordinates.reduce(r);for(let e\u003d0;e\u003cn.length;e++){const[r,s,a]\u003dn[e];t.xs[o][e]\u003dr,t.ys[o][e]\u003ds,t.zs[o][e]\u003dc(a)}break}case\"MultiPolygon\":{const n\u003d[];for(const t of e.coordinates)t.length\u003e1\u0026\u0026a.logger.warn(\"Bokeh does not support Polygons with holes in, only exterior ring used.\"),n.push(t[0]);const s\u003dn.reduce(r);for(let e\u003d0;e\u003cs.length;e++){const[r,n,a]\u003ds[e];t.xs[o][e]\u003dr,t.ys[o][e]\u003dn,t.zs[o][e]\u003dc(a)}break}default:throw new Error(`Invalid GeoJSON geometry type: ${e.type}`)}}geojson_to_column_data(){const e\u003dJSON.parse(this.geojson);let t;switch(e.type){case\"GeometryCollection\":if(null\u003d\u003de.geometries)throw new Error(\"No geometries found in GeometryCollection\");if(0\u003d\u003d\u003de.geometries.length)throw new Error(\"geojson.geometries must have one or more items\");t\u003de.geometries;break;case\"FeatureCollection\":if(null\u003d\u003de.features)throw new Error(\"No features found in FeaturesCollection\");if(0\u003d\u003de.features.length)throw new Error(\"geojson.features must have one or more items\");t\u003de.features;break;default:throw new Error(\"Bokeh only supports type GeometryCollection and FeatureCollection at top level\")}let o\u003d0;for(const e of t){const t\u003d\"Feature\"\u003d\u003d\u003de.type?e.geometry:e;\"GeometryCollection\"\u003d\u003dt.type?o+\u003dt.geometries.length:o+\u003d1}const r\u003d{x:this._get_new_nan_array(o),y:this._get_new_nan_array(o),z:this._get_new_nan_array(o),xs:this._get_new_list_array(o),ys:this._get_new_list_array(o),zs:this._get_new_list_array(o)};let n\u003d0;for(const e of t){const t\u003d\"Feature\"\u003d\u003de.type?e.geometry:e;if(\"GeometryCollection\"\u003d\u003dt.type)for(const s of t.geometries)this._add_geometry(s,r,n),\"Feature\"\u003d\u003d\u003de.type\u0026\u0026this._add_properties(e,r,n,o),n+\u003d1;else this._add_geometry(t,r,n),\"Feature\"\u003d\u003d\u003de.type\u0026\u0026this._add_properties(e,r,n,o),n+\u003d1}return r}}o.GeoJSONDataSource\u003dg,g.__name__\u003d\"GeoJSONDataSource\",g.init_GeoJSONDataSource()},\n      function _(e,r,T,o,S){o(),S(\"BBoxTileSource\",e(347).BBoxTileSource),S(\"MercatorTileSource\",e(348).MercatorTileSource),S(\"QUADKEYTileSource\",e(351).QUADKEYTileSource),S(\"TileRenderer\",e(352).TileRenderer),S(\"TileSource\",e(349).TileSource),S(\"TMSTileSource\",e(355).TMSTileSource),S(\"WMTSTileSource\",e(353).WMTSTileSource)},\n      function _(e,t,r,i,o){i();const l\u003de(348);class n extends l.MercatorTileSource{constructor(e){super(e)}static init_BBoxTileSource(){this.define((({Boolean:e})\u003d\u003e({use_latlon:[e,!1]})))}get_image_url(e,t,r){const i\u003dthis.string_lookup_replace(this.url,this.extra_url_vars);let o,l,n,s;return this.use_latlon?[l,s,o,n]\u003dthis.get_tile_geographic_bounds(e,t,r):[l,s,o,n]\u003dthis.get_tile_meter_bounds(e,t,r),i.replace(\"{XMIN}\",l.toString()).replace(\"{YMIN}\",s.toString()).replace(\"{XMAX}\",o.toString()).replace(\"{YMAX}\",n.toString())}}r.BBoxTileSource\u003dn,n.__name__\u003d\"BBoxTileSource\",n.init_BBoxTileSource()},\n      function _(t,e,i,_,s){_();const r\u003dt(349),o\u003dt(9),n\u003dt(350);class l extends r.TileSource{constructor(t){super(t)}static init_MercatorTileSource(){this.define((({Boolean:t})\u003d\u003e({snap_to_zoom:[t,!1],wrap_around:[t,!0]}))),this.override({x_origin_offset:20037508.34,y_origin_offset:20037508.34,initial_resolution:156543.03392804097})}initialize(){super.initialize(),this._resolutions\u003do.range(this.min_zoom,this.max_zoom+1).map((t\u003d\u003ethis.get_resolution(t)))}_computed_initial_resolution(){return null!\u003dthis.initial_resolution?this.initial_resolution:2*Math.PI*6378137/this.tile_size}is_valid_tile(t,e,i){return!(!this.wrap_around\u0026\u0026(t\u003c0||t\u003e\u003d2**i))\u0026\u0026!(e\u003c0||e\u003e\u003d2**i)}parent_by_tile_xyz(t,e,i){const _\u003dthis.tile_xyz_to_quadkey(t,e,i),s\u003d_.substring(0,_.length-1);return this.quadkey_to_tile_xyz(s)}get_resolution(t){return this._computed_initial_resolution()/2**t}get_resolution_by_extent(t,e,i){return[(t[2]-t[0])/i,(t[3]-t[1])/e]}get_level_by_extent(t,e,i){const _\u003d(t[2]-t[0])/i,s\u003d(t[3]-t[1])/e,r\u003dMath.max(_,s);let o\u003d0;for(const t of this._resolutions){if(r\u003et){if(0\u003d\u003do)return 0;if(o\u003e0)return o-1}o+\u003d1}return o-1}get_closest_level_by_extent(t,e,i){const _\u003d(t[2]-t[0])/i,s\u003d(t[3]-t[1])/e,r\u003dMath.max(_,s),o\u003dthis._resolutions.reduce((function(t,e){return Math.abs(e-r)\u003cMath.abs(t-r)?e:t}));return this._resolutions.indexOf(o)}snap_to_zoom_level(t,e,i,_){const[s,r,o,n]\u003dt,l\u003dthis._resolutions[_];let u\u003di*l,a\u003de*l;if(!this.snap_to_zoom){const t\u003d(o-s)/u,e\u003d(n-r)/a;t\u003ee?(u\u003do-s,a*\u003dt):(u*\u003de,a\u003dn-r)}const h\u003d(u-(o-s))/2,c\u003d(a-(n-r))/2;return[s-h,r-c,o+h,n+c]}tms_to_wmts(t,e,i){return[t,2**i-1-e,i]}wmts_to_tms(t,e,i){return[t,2**i-1-e,i]}pixels_to_meters(t,e,i){const _\u003dthis.get_resolution(i);return[t*_-this.x_origin_offset,e*_-this.y_origin_offset]}meters_to_pixels(t,e,i){const _\u003dthis.get_resolution(i);return[(t+this.x_origin_offset)/_,(e+this.y_origin_offset)/_]}pixels_to_tile(t,e){let i\u003dMath.ceil(t/this.tile_size);i\u003d0\u003d\u003d\u003di?i:i-1;return[i,Math.max(Math.ceil(e/this.tile_size)-1,0)]}pixels_to_raster(t,e,i){return[t,(this.tile_size\u003c\u003ci)-e]}meters_to_tile(t,e,i){const[_,s]\u003dthis.meters_to_pixels(t,e,i);return this.pixels_to_tile(_,s)}get_tile_meter_bounds(t,e,i){const[_,s]\u003dthis.pixels_to_meters(t*this.tile_size,e*this.tile_size,i),[r,o]\u003dthis.pixels_to_meters((t+1)*this.tile_size,(e+1)*this.tile_size,i);return[_,s,r,o]}get_tile_geographic_bounds(t,e,i){const _\u003dthis.get_tile_meter_bounds(t,e,i),[s,r,o,l]\u003dn.meters_extent_to_geographic(_);return[s,r,o,l]}get_tiles_by_extent(t,e,i\u003d1){const[_,s,r,o]\u003dt;let[n,l]\u003dthis.meters_to_tile(_,s,e),[u,a]\u003dthis.meters_to_tile(r,o,e);n-\u003di,l-\u003di,u+\u003di,a+\u003di;const h\u003d[];for(let t\u003da;t\u003e\u003dl;t--)for(let i\u003dn;i\u003c\u003du;i++)this.is_valid_tile(i,t,e)\u0026\u0026h.push([i,t,e,this.get_tile_meter_bounds(i,t,e)]);return this.sort_tiles_from_center(h,[n,l,u,a]),h}quadkey_to_tile_xyz(t){let e\u003d0,i\u003d0;const _\u003dt.length;for(let s\u003d_;s\u003e0;s--){const r\u003d1\u003c\u003cs-1;switch(t.charAt(_-s)){case\"0\":continue;case\"1\":e|\u003dr;break;case\"2\":i|\u003dr;break;case\"3\":e|\u003dr,i|\u003dr;break;default:throw new TypeError(`Invalid Quadkey: ${t}`)}}return[e,i,_]}tile_xyz_to_quadkey(t,e,i){let _\u003d\"\";for(let s\u003di;s\u003e0;s--){const i\u003d1\u003c\u003cs-1;let r\u003d0;0!\u003d(t\u0026i)\u0026\u0026(r+\u003d1),0!\u003d(e\u0026i)\u0026\u0026(r+\u003d2),_+\u003dr.toString()}return _}children_by_tile_xyz(t,e,i){const _\u003dthis.tile_xyz_to_quadkey(t,e,i),s\u003d[];for(let t\u003d0;t\u003c\u003d3;t++){const[e,i,r]\u003dthis.quadkey_to_tile_xyz(_+t.toString()),o\u003dthis.get_tile_meter_bounds(e,i,r);s.push([e,i,r,o])}return s}get_closest_parent_by_tile_xyz(t,e,i){const _\u003dthis.calculate_world_x_by_tile_xyz(t,e,i);[t,e,i]\u003dthis.normalize_xyz(t,e,i);let s\u003dthis.tile_xyz_to_quadkey(t,e,i);for(;s.length\u003e0;)if(s\u003ds.substring(0,s.length-1),[t,e,i]\u003dthis.quadkey_to_tile_xyz(s),[t,e,i]\u003dthis.denormalize_xyz(t,e,i,_),this.tiles.has(this.tile_xyz_to_key(t,e,i)))return[t,e,i];return[0,0,0]}normalize_xyz(t,e,i){if(this.wrap_around){const _\u003d2**i;return[(t%_+_)%_,e,i]}return[t,e,i]}denormalize_xyz(t,e,i,_){return[t+_*2**i,e,i]}denormalize_meters(t,e,i,_){return[t+2*_*Math.PI*6378137,e]}calculate_world_x_by_tile_xyz(t,e,i){return Math.floor(t/2**i)}}i.MercatorTileSource\u003dl,l.__name__\u003d\"MercatorTileSource\",l.init_MercatorTileSource()},\n      function _(e,t,r,i,n){i();const l\u003de(53),s\u003de(13);class a extends l.Model{constructor(e){super(e)}static init_TileSource(){this.define((({Number:e,String:t,Dict:r,Nullable:i})\u003d\u003e({url:[t,\"\"],tile_size:[e,256],max_zoom:[e,30],min_zoom:[e,0],extra_url_vars:[r(t),{}],attribution:[t,\"\"],x_origin_offset:[e],y_origin_offset:[e],initial_resolution:[i(e),null]})))}initialize(){super.initialize(),this.tiles\u003dnew Map,this._normalize_case()}connect_signals(){super.connect_signals(),this.connect(this.change,(()\u003d\u003ethis._clear_cache()))}string_lookup_replace(e,t){let r\u003de;for(const[e,i]of s.entries(t))r\u003dr.replace(`{${e}}`,i);return r}_normalize_case(){const e\u003dthis.url.replace(\"{x}\",\"{X}\").replace(\"{y}\",\"{Y}\").replace(\"{z}\",\"{Z}\").replace(\"{q}\",\"{Q}\").replace(\"{xmin}\",\"{XMIN}\").replace(\"{ymin}\",\"{YMIN}\").replace(\"{xmax}\",\"{XMAX}\").replace(\"{ymax}\",\"{YMAX}\");this.url\u003de}_clear_cache(){this.tiles\u003dnew Map}tile_xyz_to_key(e,t,r){return`${e}:${t}:${r}`}key_to_tile_xyz(e){const[t,r,i]\u003de.split(\":\").map((e\u003d\u003eparseInt(e)));return[t,r,i]}sort_tiles_from_center(e,t){const[r,i,n,l]\u003dt,s\u003d(n-r)/2+r,a\u003d(l-i)/2+i;e.sort((function(e,t){return Math.sqrt((s-e[0])**2+(a-e[1])**2)-Math.sqrt((s-t[0])**2+(a-t[1])**2)}))}get_image_url(e,t,r){return this.string_lookup_replace(this.url,this.extra_url_vars).replace(\"{X}\",e.toString()).replace(\"{Y}\",t.toString()).replace(\"{Z}\",r.toString())}}r.TileSource\u003da,a.__name__\u003d\"TileSource\",a.init_TileSource()},\n      function _(t,e,r,n,o){n();const c\u003dt(65);function _(t,e){return c.wgs84_mercator.compute(t,e)}function g(t,e){return c.wgs84_mercator.invert(t,e)}r.geographic_to_meters\u003d_,r.meters_to_geographic\u003dg,r.geographic_extent_to_meters\u003dfunction(t){const[e,r,n,o]\u003dt,[c,g]\u003d_(e,r),[i,u]\u003d_(n,o);return[c,g,i,u]},r.meters_extent_to_geographic\u003dfunction(t){const[e,r,n,o]\u003dt,[c,_]\u003dg(e,r),[i,u]\u003dg(n,o);return[c,_,i,u]}},\n      function _(e,t,r,s,_){s();const o\u003de(348);class c extends o.MercatorTileSource{constructor(e){super(e)}get_image_url(e,t,r){const s\u003dthis.string_lookup_replace(this.url,this.extra_url_vars),[_,o,c]\u003dthis.tms_to_wmts(e,t,r),i\u003dthis.tile_xyz_to_quadkey(_,o,c);return s.replace(\"{Q}\",i)}}r.QUADKEYTileSource\u003dc,c.__name__\u003d\"QUADKEYTileSource\"},\n      function _(t,e,i,s,_){s();const n\u003dt(1),a\u003dt(349),h\u003dt(353),r\u003dt(41),o\u003dt(156),l\u003dt(43),d\u003dt(296),m\u003dt(9),c\u003dt(8),p\u003dn.__importStar(t(354));class g extends r.RendererView{initialize(){this._tiles\u003d[],super.initialize()}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.request_render())),this.connect(this.model.tile_source.change,(()\u003d\u003ethis.request_render()))}styles(){return[...super.styles(),p.default]}get_extent(){return[this.x_range.start,this.y_range.start,this.x_range.end,this.y_range.end]}get map_plot(){return this.plot_model}get map_canvas(){return this.layer.ctx}get map_frame(){return this.plot_view.frame}get x_range(){return this.map_plot.x_range}get y_range(){return this.map_plot.y_range}_set_data(){this.extent\u003dthis.get_extent(),this._last_height\u003dvoid 0,this._last_width\u003dvoid 0}_update_attribution(){null!\u003dthis.attribution_el\u0026\u0026l.removeElement(this.attribution_el);const{attribution:t}\u003dthis.model.tile_source;if(c.isString(t)\u0026\u0026t.length\u003e0){const{layout:e,frame:i}\u003dthis.plot_view,s\u003de.bbox.width-i.bbox.right,_\u003de.bbox.height-i.bbox.bottom,n\u003di.bbox.width;this.attribution_el\u003dl.div({class:p.tile_attribution,style:{position:\"absolute\",right:`${s}px`,bottom:`${_}px`,\"max-width\":n-4+\"px\",padding:\"2px\",\"background-color\":\"rgba(255,255,255,0.5)\",\"font-size\":\"9px\",\"line-height\":\"1.05\",\"white-space\":\"nowrap\",overflow:\"hidden\",\"text-overflow\":\"ellipsis\"}}),this.plot_view.canvas_view.add_event(this.attribution_el),this.attribution_el.innerHTML\u003dt,this.attribution_el.title\u003dthis.attribution_el.textContent.replace(/\\s*\\n\\s*/g,\" \")}}_map_data(){this.initial_extent\u003dthis.get_extent();const t\u003dthis.model.tile_source.get_level_by_extent(this.initial_extent,this.map_frame.bbox.height,this.map_frame.bbox.width),e\u003dthis.model.tile_source.snap_to_zoom_level(this.initial_extent,this.map_frame.bbox.height,this.map_frame.bbox.width,t);this.x_range.start\u003de[0],this.y_range.start\u003de[1],this.x_range.end\u003de[2],this.y_range.end\u003de[3],this.x_range instanceof o.Range1d\u0026\u0026(this.x_range.reset_start\u003de[0],this.x_range.reset_end\u003de[2]),this.y_range instanceof o.Range1d\u0026\u0026(this.y_range.reset_start\u003de[1],this.y_range.reset_end\u003de[3]),this._update_attribution()}_create_tile(t,e,i,s,_\u003d!1){const[n,a,h]\u003dthis.model.tile_source.normalize_xyz(t,e,i),r\u003d{img:void 0,tile_coords:[t,e,i],normalized_coords:[n,a,h],quadkey:this.model.tile_source.tile_xyz_to_quadkey(t,e,i),cache_key:this.model.tile_source.tile_xyz_to_key(t,e,i),bounds:s,loaded:!1,finished:!1,x_coord:s[0],y_coord:s[3]},o\u003dthis.model.tile_source.get_image_url(n,a,h);new d.ImageLoader(o,{loaded:t\u003d\u003e{Object.assign(r,{img:t,loaded:!0}),_?(r.finished\u003d!0,this.notify_finished()):this.request_render()},failed(){r.finished\u003d!0}}),this.model.tile_source.tiles.set(r.cache_key,r),this._tiles.push(r)}_enforce_aspect_ratio(){if(this._last_height!\u003d\u003dthis.map_frame.bbox.height||this._last_width!\u003d\u003dthis.map_frame.bbox.width){const t\u003dthis.get_extent(),e\u003dthis.model.tile_source.get_level_by_extent(t,this.map_frame.bbox.height,this.map_frame.bbox.width),i\u003dthis.model.tile_source.snap_to_zoom_level(t,this.map_frame.bbox.height,this.map_frame.bbox.width,e);this.x_range.setv({start:i[0],end:i[2]}),this.y_range.setv({start:i[1],end:i[3]}),this.extent\u003di,this._last_height\u003dthis.map_frame.bbox.height,this._last_width\u003dthis.map_frame.bbox.width}}has_finished(){if(!super.has_finished())return!1;if(0\u003d\u003d\u003dthis._tiles.length)return!1;for(const t of this._tiles)if(!t.finished)return!1;return!0}_render(){null\u003d\u003dthis.map_initialized\u0026\u0026(this._set_data(),this._map_data(),this.map_initialized\u003d!0),this._enforce_aspect_ratio(),this._update(),null!\u003dthis.prefetch_timer\u0026\u0026clearTimeout(this.prefetch_timer),this.prefetch_timer\u003dsetTimeout(this._prefetch_tiles.bind(this),500),this.has_finished()\u0026\u0026this.notify_finished()}_draw_tile(t){const e\u003dthis.model.tile_source.tiles.get(t);if(null!\u003de\u0026\u0026e.loaded){const[[t],[i]]\u003dthis.coordinates.map_to_screen([e.bounds[0]],[e.bounds[3]]),[[s],[_]]\u003dthis.coordinates.map_to_screen([e.bounds[2]],[e.bounds[1]]),n\u003ds-t,a\u003d_-i,h\u003dt,r\u003di,o\u003dthis.map_canvas.getImageSmoothingEnabled();this.map_canvas.setImageSmoothingEnabled(this.model.smoothing),this.map_canvas.drawImage(e.img,h,r,n,a),this.map_canvas.setImageSmoothingEnabled(o),e.finished\u003d!0}}_set_rect(){const t\u003dthis.plot_model.outline_line_width,e\u003dthis.map_frame.bbox.left+t/2,i\u003dthis.map_frame.bbox.top+t/2,s\u003dthis.map_frame.bbox.width-t,_\u003dthis.map_frame.bbox.height-t;this.map_canvas.rect(e,i,s,_),this.map_canvas.clip()}_render_tiles(t){this.map_canvas.save(),this._set_rect(),this.map_canvas.globalAlpha\u003dthis.model.alpha;for(const e of t)this._draw_tile(e);this.map_canvas.restore()}_prefetch_tiles(){const{tile_source:t}\u003dthis.model,e\u003dthis.get_extent(),i\u003dthis.map_frame.bbox.height,s\u003dthis.map_frame.bbox.width,_\u003dthis.model.tile_source.get_level_by_extent(e,i,s),n\u003dthis.model.tile_source.get_tiles_by_extent(e,_);for(let e\u003d0,i\u003dMath.min(10,n.length);e\u003ci;e++){const[i,s,_]\u003dn[e],a\u003dthis.model.tile_source.children_by_tile_xyz(i,s,_);for(const e of a){const[i,s,_,n]\u003de;t.tiles.has(t.tile_xyz_to_key(i,s,_))||this._create_tile(i,s,_,n,!0)}}}_fetch_tiles(t){for(const e of t){const[t,i,s,_]\u003de;this._create_tile(t,i,s,_)}}_update(){const{tile_source:t}\u003dthis.model,{min_zoom:e}\u003dt,{max_zoom:i}\u003dt;let s\u003dthis.get_extent();const _\u003dthis.extent[2]-this.extent[0]\u003cs[2]-s[0],n\u003dthis.map_frame.bbox.height,a\u003dthis.map_frame.bbox.width;let h\u003dt.get_level_by_extent(s,n,a),r\u003d!1;h\u003ce?(s\u003dthis.extent,h\u003de,r\u003d!0):h\u003ei\u0026\u0026(s\u003dthis.extent,h\u003di,r\u003d!0),r\u0026\u0026(this.x_range.setv({start:s[0],end:s[2]}),this.y_range.setv({start:s[1],end:s[3]})),this.extent\u003ds;const o\u003dt.get_tiles_by_extent(s,h),l\u003d[],d\u003d[],c\u003d[],p\u003d[];for(const e of o){const[i,s,n]\u003de,a\u003dt.tile_xyz_to_key(i,s,n),h\u003dt.tiles.get(a);if(null!\u003dh\u0026\u0026h.loaded)d.push(a);else if(this.model.render_parents){const[e,a,h]\u003dt.get_closest_parent_by_tile_xyz(i,s,n),r\u003dt.tile_xyz_to_key(e,a,h),o\u003dt.tiles.get(r);if(null!\u003do\u0026\u0026o.loaded\u0026\u0026!m.includes(c,r)\u0026\u0026c.push(r),_){const e\u003dt.children_by_tile_xyz(i,s,n);for(const[i,s,_]of e){const e\u003dt.tile_xyz_to_key(i,s,_);t.tiles.has(e)\u0026\u0026p.push(e)}}}null\u003d\u003dh\u0026\u0026l.push(e)}this._render_tiles(c),this._render_tiles(p),this._render_tiles(d),null!\u003dthis.render_timer\u0026\u0026clearTimeout(this.render_timer),this.render_timer\u003dsetTimeout((()\u003d\u003ethis._fetch_tiles(l)),65)}}i.TileRendererView\u003dg,g.__name__\u003d\"TileRendererView\";class u extends r.Renderer{constructor(t){super(t)}static init_TileRenderer(){this.prototype.default_view\u003dg,this.define((({Boolean:t,Number:e,Ref:i})\u003d\u003e({alpha:[e,1],smoothing:[t,!0],tile_source:[i(a.TileSource),()\u003d\u003enew h.WMTSTileSource],render_parents:[t,!0]}))),this.override({level:\"image\"})}}i.TileRenderer\u003du,u.__name__\u003d\"TileRenderer\",u.init_TileRenderer()},\n      function _(t,e,r,o,s){o();const c\u003dt(348);class i extends c.MercatorTileSource{constructor(t){super(t)}get_image_url(t,e,r){const o\u003dthis.string_lookup_replace(this.url,this.extra_url_vars),[s,c,i]\u003dthis.tms_to_wmts(t,e,r);return o.replace(\"{X}\",s.toString()).replace(\"{Y}\",c.toString()).replace(\"{Z}\",i.toString())}}r.WMTSTileSource\u003di,i.__name__\u003d\"WMTSTileSource\"},\n      function _(t,o,i,b,r){b(),i.root\u003d\"bk-root\",i.tile_attribution\u003d\"bk-tile-attribution\",i.default\u003d\".bk-root .bk-tile-attribution a{color:black;}\"},\n      function _(e,r,t,c,o){c();const i\u003de(348);class l extends i.MercatorTileSource{constructor(e){super(e)}get_image_url(e,r,t){return this.string_lookup_replace(this.url,this.extra_url_vars).replace(\"{X}\",e.toString()).replace(\"{Y}\",r.toString()).replace(\"{Z}\",t.toString())}}t.TMSTileSource\u003dl,l.__name__\u003d\"TMSTileSource\"},\n      function _(e,t,u,a,r){a(),r(\"CanvasTexture\",e(357).CanvasTexture),r(\"ImageURLTexture\",e(359).ImageURLTexture),r(\"Texture\",e(358).Texture)},\n      function _(t,e,n,c,s){c();const a\u003dt(358),i\u003dt(34);class r extends a.Texture{constructor(t){super(t)}static init_CanvasTexture(){this.define((({String:t})\u003d\u003e({code:[t]})))}get func(){const t\u003di.use_strict(this.code);return new Function(\"ctx\",\"color\",\"scale\",\"weight\",t)}get_pattern(t,e,n){const c\u003ddocument.createElement(\"canvas\");c.width\u003de,c.height\u003de;const s\u003dc.getContext(\"2d\");return this.func.call(this,s,t,e,n),c}}n.CanvasTexture\u003dr,r.__name__\u003d\"CanvasTexture\",r.init_CanvasTexture()},\n      function _(e,t,i,n,r){n();const s\u003de(53),u\u003de(20);class o extends s.Model{constructor(e){super(e)}static init_Texture(){this.define((()\u003d\u003e({repetition:[u.TextureRepetition,\"repeat\"]})))}}i.Texture\u003do,o.__name__\u003d\"Texture\",o.init_Texture()},\n      function _(e,t,i,r,n){r();const a\u003de(358),s\u003de(296);class u extends a.Texture{constructor(e){super(e)}static init_ImageURLTexture(){this.define((({String:e})\u003d\u003e({url:[e]})))}initialize(){super.initialize(),this._loader\u003dnew s.ImageLoader(this.url)}get_pattern(e,t,i){const{_loader:r}\u003dthis;return this._loader.finished?r.image:r.promise}}i.ImageURLTexture\u003du,u.__name__\u003d\"ImageURLTexture\",u.init_ImageURLTexture()},\n      function _(o,l,T,e,t){e(),t(\"ActionTool\",o(251).ActionTool),t(\"CustomAction\",o(361).CustomAction),t(\"HelpTool\",o(252).HelpTool),t(\"RedoTool\",o(362).RedoTool),t(\"ResetTool\",o(363).ResetTool),t(\"SaveTool\",o(364).SaveTool),t(\"UndoTool\",o(365).UndoTool),t(\"ZoomInTool\",o(366).ZoomInTool),t(\"ZoomOutTool\",o(369).ZoomOutTool),t(\"ButtonTool\",o(238).ButtonTool),t(\"EditTool\",o(370).EditTool),t(\"BoxEditTool\",o(371).BoxEditTool),t(\"FreehandDrawTool\",o(372).FreehandDrawTool),t(\"PointDrawTool\",o(373).PointDrawTool),t(\"PolyDrawTool\",o(374).PolyDrawTool),t(\"PolyTool\",o(375).PolyTool),t(\"PolyEditTool\",o(376).PolyEditTool),t(\"BoxSelectTool\",o(377).BoxSelectTool),t(\"BoxZoomTool\",o(379).BoxZoomTool),t(\"GestureTool\",o(237).GestureTool),t(\"LassoSelectTool\",o(380).LassoSelectTool),t(\"LineEditTool\",o(382).LineEditTool),t(\"PanTool\",o(384).PanTool),t(\"PolySelectTool\",o(381).PolySelectTool),t(\"RangeTool\",o(385).RangeTool),t(\"SelectTool\",o(378).SelectTool),t(\"TapTool\",o(386).TapTool),t(\"WheelPanTool\",o(387).WheelPanTool),t(\"WheelZoomTool\",o(388).WheelZoomTool),t(\"CrosshairTool\",o(389).CrosshairTool),t(\"CustomJSHover\",o(390).CustomJSHover),t(\"HoverTool\",o(391).HoverTool),t(\"InspectTool\",o(247).InspectTool),t(\"Tool\",o(236).Tool),t(\"ToolProxy\",o(392).ToolProxy),t(\"Toolbar\",o(235).Toolbar),t(\"ToolbarBase\",o(248).ToolbarBase),t(\"ProxyToolbar\",o(393).ProxyToolbar),t(\"ToolbarBox\",o(393).ToolbarBox)},\n      function _(t,o,i,s,n){s();const e\u003dt(251);class c extends e.ActionToolButtonView{css_classes(){return super.css_classes().concat(\"bk-toolbar-button-custom-action\")}}i.CustomActionButtonView\u003dc,c.__name__\u003d\"CustomActionButtonView\";class u extends e.ActionToolView{doit(){var t;null\u003d\u003d\u003d(t\u003dthis.model.callback)||void 0\u003d\u003d\u003dt||t.execute(this.model)}}i.CustomActionView\u003du,u.__name__\u003d\"CustomActionView\";class l extends e.ActionTool{constructor(t){super(t),this.tool_name\u003d\"Custom Action\",this.button_view\u003dc}static init_CustomAction(){this.prototype.default_view\u003du,this.define((({Any:t,String:o,Nullable:i})\u003d\u003e({callback:[i(t)],icon:[o]}))),this.override({description:\"Perform a Custom Action\"})}}i.CustomAction\u003dl,l.__name__\u003d\"CustomAction\",l.init_CustomAction()},\n      function _(o,e,t,i,s){i();const n\u003do(251),d\u003do(242);class l extends n.ActionToolView{connect_signals(){super.connect_signals(),this.connect(this.plot_view.state.changed,(()\u003d\u003ethis.model.disabled\u003d!this.plot_view.state.can_redo))}doit(){this.plot_view.state.redo()}}t.RedoToolView\u003dl,l.__name__\u003d\"RedoToolView\";class _ extends n.ActionTool{constructor(o){super(o),this.tool_name\u003d\"Redo\",this.icon\u003dd.tool_icon_redo}static init_RedoTool(){this.prototype.default_view\u003dl,this.override({disabled:!0}),this.register_alias(\"redo\",(()\u003d\u003enew _))}}t.RedoTool\u003d_,_.__name__\u003d\"RedoTool\",_.init_RedoTool()},\n      function _(e,t,o,s,i){s();const _\u003de(251),n\u003de(242);class l extends _.ActionToolView{doit(){this.plot_view.reset()}}o.ResetToolView\u003dl,l.__name__\u003d\"ResetToolView\";class c extends _.ActionTool{constructor(e){super(e),this.tool_name\u003d\"Reset\",this.icon\u003dn.tool_icon_reset}static init_ResetTool(){this.prototype.default_view\u003dl,this.register_alias(\"reset\",(()\u003d\u003enew c))}}o.ResetTool\u003dc,c.__name__\u003d\"ResetTool\",c.init_ResetTool()},\n      function _(o,e,t,a,i){a();const n\u003do(251),s\u003do(242);class c extends n.ActionToolView{async copy(){const o\u003dawait this.plot_view.to_blob(),e\u003dnew ClipboardItem({[o.type]:o});await navigator.clipboard.write([e])}async save(o){const e\u003dawait this.plot_view.to_blob(),t\u003ddocument.createElement(\"a\");t.href\u003dURL.createObjectURL(e),t.download\u003do,t.target\u003d\"_blank\",t.dispatchEvent(new MouseEvent(\"click\"))}doit(o\u003d\"save\"){switch(o){case\"save\":this.save(\"bokeh_plot\");break;case\"copy\":this.copy()}}}t.SaveToolView\u003dc,c.__name__\u003d\"SaveToolView\";class l extends n.ActionTool{constructor(o){super(o),this.tool_name\u003d\"Save\",this.icon\u003ds.tool_icon_save}static init_SaveTool(){this.prototype.default_view\u003dc,this.register_alias(\"save\",(()\u003d\u003enew l))}get menu(){return[{icon:\"bk-tool-icon-copy-to-clipboard\",tooltip:\"Copy image to clipboard\",if:()\u003d\u003e\"undefined\"!\u003dtypeof ClipboardItem,handler:()\u003d\u003e{this.do.emit(\"copy\")}}]}}t.SaveTool\u003dl,l.__name__\u003d\"SaveTool\",l.init_SaveTool()},\n      function _(o,t,n,i,e){i();const s\u003do(251),d\u003do(242);class l extends s.ActionToolView{connect_signals(){super.connect_signals(),this.connect(this.plot_view.state.changed,(()\u003d\u003ethis.model.disabled\u003d!this.plot_view.state.can_undo))}doit(){this.plot_view.state.undo()}}n.UndoToolView\u003dl,l.__name__\u003d\"UndoToolView\";class _ extends s.ActionTool{constructor(o){super(o),this.tool_name\u003d\"Undo\",this.icon\u003dd.tool_icon_undo}static init_UndoTool(){this.prototype.default_view\u003dl,this.override({disabled:!0}),this.register_alias(\"undo\",(()\u003d\u003enew _))}}n.UndoTool\u003d_,_.__name__\u003d\"UndoTool\",_.init_UndoTool()},\n      function _(o,i,n,s,e){s();const t\u003do(367),_\u003do(242);class m extends t.ZoomBaseToolView{}n.ZoomInToolView\u003dm,m.__name__\u003d\"ZoomInToolView\";class l extends t.ZoomBaseTool{constructor(o){super(o),this.sign\u003d1,this.tool_name\u003d\"Zoom In\",this.icon\u003d_.tool_icon_zoom_in}static init_ZoomInTool(){this.prototype.default_view\u003dm,this.register_alias(\"zoom_in\",(()\u003d\u003enew l({dimensions:\"both\"}))),this.register_alias(\"xzoom_in\",(()\u003d\u003enew l({dimensions:\"width\"}))),this.register_alias(\"yzoom_in\",(()\u003d\u003enew l({dimensions:\"height\"})))}}n.ZoomInTool\u003dl,l.__name__\u003d\"ZoomInTool\",l.init_ZoomInTool()},\n      function _(o,t,e,i,s){i();const n\u003do(251),l\u003do(20),a\u003do(368);class _ extends n.ActionToolView{doit(){var o;const t\u003dthis.plot_view.frame,e\u003dthis.model.dimensions,i\u003d\"width\"\u003d\u003de||\"both\"\u003d\u003de,s\u003d\"height\"\u003d\u003de||\"both\"\u003d\u003de,n\u003da.scale_range(t,this.model.sign*this.model.factor,i,s);this.plot_view.state.push(\"zoom_out\",{range:n}),this.plot_view.update_range(n,{scrolling:!0}),null\u003d\u003d\u003d(o\u003dthis.model.document)||void 0\u003d\u003d\u003do||o.interactive_start(this.plot_model)}}e.ZoomBaseToolView\u003d_,_.__name__\u003d\"ZoomBaseToolView\";class m extends n.ActionTool{constructor(o){super(o)}static init_ZoomBaseTool(){this.define((({Percent:o})\u003d\u003e({factor:[o,.1],dimensions:[l.Dimensions,\"both\"]})))}get tooltip(){return this._get_dim_tooltip(this.dimensions)}}e.ZoomBaseTool\u003dm,m.__name__\u003d\"ZoomBaseTool\",m.init_ZoomBaseTool()},\n      function _(n,t,o,r,s){r();const c\u003dn(10);function e(n,t,o){const[r,s]\u003d[n.start,n.end],c\u003dnull!\u003do?o:(s+r)/2;return[r-(r-c)*t,s-(s-c)*t]}function a(n,[t,o]){const r\u003dnew Map;for(const[s,c]of n){const[n,e]\u003dc.r_invert(t,o);r.set(s,{start:n,end:e})}return r}o.scale_highlow\u003de,o.get_info\u003da,o.scale_range\u003dfunction(n,t,o\u003d!0,r\u003d!0,s){t\u003dc.clamp(t,-.9,.9);const l\u003do?t:0,[u,i]\u003de(n.bbox.h_range,l,null!\u003ds?s.x:void 0),_\u003da(n.x_scales,[u,i]),f\u003dr?t:0,[g,x]\u003de(n.bbox.v_range,f,null!\u003ds?s.y:void 0);return{xrs:_,yrs:a(n.y_scales,[g,x]),factor:t}}},\n      function _(o,t,i,s,e){s();const n\u003do(367),_\u003do(242);class m extends n.ZoomBaseToolView{}i.ZoomOutToolView\u003dm,m.__name__\u003d\"ZoomOutToolView\";class l extends n.ZoomBaseTool{constructor(o){super(o),this.sign\u003d-1,this.tool_name\u003d\"Zoom Out\",this.icon\u003d_.tool_icon_zoom_out}static init_ZoomOutTool(){this.prototype.default_view\u003dm,this.register_alias(\"zoom_out\",(()\u003d\u003enew l({dimensions:\"both\"}))),this.register_alias(\"xzoom_out\",(()\u003d\u003enew l({dimensions:\"width\"}))),this.register_alias(\"yzoom_out\",(()\u003d\u003enew l({dimensions:\"height\"})))}}i.ZoomOutTool\u003dl,l.__name__\u003d\"ZoomOutTool\",l.init_ZoomOutTool()},\n      function _(e,t,s,o,n){o();const i\u003de(9),r\u003de(8),c\u003de(11),a\u003de(61),_\u003de(237);class l extends _.GestureToolView{constructor(){super(...arguments),this._mouse_in_frame\u003d!0}_select_mode(e){const{shiftKey:t,ctrlKey:s}\u003de;return t||s?t\u0026\u0026!s?\"append\":!t\u0026\u0026s?\"intersect\":t\u0026\u0026s?\"subtract\":void c.unreachable():\"replace\"}_move_enter(e){this._mouse_in_frame\u003d!0}_move_exit(e){this._mouse_in_frame\u003d!1}_map_drag(e,t,s){if(!this.plot_view.frame.bbox.contains(e,t))return null;const o\u003dthis.plot_view.renderer_view(s);if(null\u003d\u003do)return null;return[o.coordinates.x_scale.invert(e),o.coordinates.y_scale.invert(t)]}_delete_selected(e){const t\u003de.data_source,s\u003dt.selected.indices;s.sort();for(const e of t.columns()){const o\u003dt.get_array(e);for(let e\u003d0;e\u003cs.length;e++){const t\u003ds[e];o.splice(t-e,1)}}this._emit_cds_changes(t)}_pop_glyphs(e,t){const s\u003de.columns();if(t\u0026\u0026s.length)for(const o of s){let s\u003de.get_array(o);const n\u003ds.length-t+1;n\u003c1||(r.isArray(s)||(s\u003dArray.from(s),e.data[o]\u003ds),s.splice(0,n))}}_emit_cds_changes(e,t\u003d!0,s\u003d!0,o\u003d!0){s\u0026\u0026e.selection_manager.clear(),t\u0026\u0026e.change.emit(),o\u0026\u0026(e.data\u003de.data,e.properties.data.change.emit())}_drag_points(e,t,s\u003d\"both\"){if(null\u003d\u003dthis._basepoint)return;const[o,n]\u003dthis._basepoint;for(const i of t){const t\u003dthis._map_drag(o,n,i),r\u003dthis._map_drag(e.sx,e.sy,i);if(null\u003d\u003dr||null\u003d\u003dt)continue;const[c,a]\u003dr,[_,l]\u003dt,[d,u]\u003d[c-_,a-l],h\u003di.glyph,m\u003di.data_source,[p,f]\u003d[h.x.field,h.y.field];for(const e of m.selected.indices)!p||\"width\"!\u003ds\u0026\u0026\"both\"!\u003ds||(m.data[p][e]+\u003dd),!f||\"height\"!\u003ds\u0026\u0026\"both\"!\u003ds||(m.data[f][e]+\u003du);m.change.emit()}this._basepoint\u003d[e.sx,e.sy]}_pad_empty_columns(e,t){for(const s of e.columns())i.includes(t,s)||e.get_array(s).push(this.model.empty_value)}_select_event(e,t,s){const o\u003dthis.plot_view.frame,{sx:n,sy:i}\u003de;if(!o.bbox.contains(n,i))return[];const r\u003d{type:\"point\",sx:n,sy:i},c\u003d[];for(const e of s){const s\u003de.get_selection_manager(),o\u003de.data_source,n\u003dthis.plot_view.renderer_view(e);if(null!\u003dn){s.select([n],r,!0,t)\u0026\u0026c.push(e),o.properties.selected.change.emit()}}return c}}s.EditToolView\u003dl,l.__name__\u003d\"EditToolView\";class d extends _.GestureTool{constructor(e){super(e)}static init_EditTool(){this.define((({Unknown:e,String:t,Array:s,Ref:o,Nullable:n})\u003d\u003e({custom_icon:[n(t),null],empty_value:[e],renderers:[s(o(a.GlyphRenderer)),[]]})))}get computed_icon(){var e;return null!\u003d\u003d(e\u003dthis.custom_icon)\u0026\u0026void 0!\u003d\u003de?e:this.icon}}s.EditTool\u003dd,d.__name__\u003d\"EditTool\",d.init_EditTool()},\n      function _(e,t,s,i,_){i();const o\u003de(43),n\u003de(20),a\u003de(370),d\u003de(242);class l extends a.EditToolView{_tap(e){null\u003d\u003dthis._draw_basepoint\u0026\u0026null\u003d\u003dthis._basepoint\u0026\u0026this._select_event(e,this._select_mode(e),this.model.renderers)}_keyup(e){if(this.model.active\u0026\u0026this._mouse_in_frame)for(const t of this.model.renderers)if(e.keyCode\u003d\u003d\u003do.Keys.Backspace)this._delete_selected(t);else if(e.keyCode\u003d\u003do.Keys.Esc){t.data_source.selection_manager.clear()}}_set_extent([e,t],[s,i],_,o\u003d!1){const n\u003dthis.model.renderers[0],a\u003dthis.plot_view.renderer_view(n);if(null\u003d\u003da)return;const d\u003dn.glyph,l\u003dn.data_source,[r,h]\u003da.coordinates.x_scale.r_invert(e,t),[p,u]\u003da.coordinates.y_scale.r_invert(s,i),[c,m]\u003d[(r+h)/2,(p+u)/2],[f,b]\u003d[h-r,u-p],[x,y]\u003d[d.x.field,d.y.field],[w,v]\u003d[d.width.field,d.height.field];if(_)this._pop_glyphs(l,this.model.num_objects),x\u0026\u0026l.get_array(x).push(c),y\u0026\u0026l.get_array(y).push(m),w\u0026\u0026l.get_array(w).push(f),v\u0026\u0026l.get_array(v).push(b),this._pad_empty_columns(l,[x,y,w,v]);else{const e\u003dl.data[x].length-1;x\u0026\u0026(l.data[x][e]\u003dc),y\u0026\u0026(l.data[y][e]\u003dm),w\u0026\u0026(l.data[w][e]\u003df),v\u0026\u0026(l.data[v][e]\u003db)}this._emit_cds_changes(l,!0,!1,o)}_update_box(e,t\u003d!1,s\u003d!1){if(null\u003d\u003dthis._draw_basepoint)return;const i\u003d[e.sx,e.sy],_\u003dthis.plot_view.frame,o\u003dthis.model.dimensions,n\u003dthis.model._get_dim_limits(this._draw_basepoint,i,_,o);if(null!\u003dn){const[e,i]\u003dn;this._set_extent(e,i,t,s)}}_doubletap(e){this.model.active\u0026\u0026(null!\u003dthis._draw_basepoint?(this._update_box(e,!1,!0),this._draw_basepoint\u003dnull):(this._draw_basepoint\u003d[e.sx,e.sy],this._select_event(e,\"append\",this.model.renderers),this._update_box(e,!0,!1)))}_move(e){this._update_box(e,!1,!1)}_pan_start(e){if(e.shiftKey){if(null!\u003dthis._draw_basepoint)return;this._draw_basepoint\u003d[e.sx,e.sy],this._update_box(e,!0,!1)}else{if(null!\u003dthis._basepoint)return;this._select_event(e,\"append\",this.model.renderers),this._basepoint\u003d[e.sx,e.sy]}}_pan(e,t\u003d!1,s\u003d!1){if(e.shiftKey){if(null\u003d\u003dthis._draw_basepoint)return;this._update_box(e,t,s)}else{if(null\u003d\u003dthis._basepoint)return;this._drag_points(e,this.model.renderers)}}_pan_end(e){if(this._pan(e,!1,!0),e.shiftKey)this._draw_basepoint\u003dnull;else{this._basepoint\u003dnull;for(const e of this.model.renderers)this._emit_cds_changes(e.data_source,!1,!0,!0)}}}s.BoxEditToolView\u003dl,l.__name__\u003d\"BoxEditToolView\";class r extends a.EditTool{constructor(e){super(e),this.tool_name\u003d\"Box Edit Tool\",this.icon\u003dd.tool_icon_box_edit,this.event_type\u003d[\"tap\",\"pan\",\"move\"],this.default_order\u003d1}static init_BoxEditTool(){this.prototype.default_view\u003dl,this.define((({Int:e})\u003d\u003e({dimensions:[n.Dimensions,\"both\"],num_objects:[e,0]})))}}s.BoxEditTool\u003dr,r.__name__\u003d\"BoxEditTool\",r.init_BoxEditTool()},\n      function _(e,t,a,s,r){s();const _\u003de(43),i\u003de(8),o\u003de(370),d\u003de(242);class n extends o.EditToolView{_draw(e,t,a\u003d!1){if(!this.model.active)return;const s\u003dthis.model.renderers[0],r\u003dthis._map_drag(e.sx,e.sy,s);if(null\u003d\u003dr)return;const[_,o]\u003dr,d\u003ds.data_source,n\u003ds.glyph,[h,l]\u003d[n.xs.field,n.ys.field];if(\"new\"\u003d\u003dt)this._pop_glyphs(d,this.model.num_objects),h\u0026\u0026d.get_array(h).push([_]),l\u0026\u0026d.get_array(l).push([o]),this._pad_empty_columns(d,[h,l]);else if(\"add\"\u003d\u003dt){if(h){const e\u003dd.data[h].length-1;let t\u003dd.get_array(h)[e];i.isArray(t)||(t\u003dArray.from(t),d.data[h][e]\u003dt),t.push(_)}if(l){const e\u003dd.data[l].length-1;let t\u003dd.get_array(l)[e];i.isArray(t)||(t\u003dArray.from(t),d.data[l][e]\u003dt),t.push(o)}}this._emit_cds_changes(d,!0,!0,a)}_pan_start(e){this._draw(e,\"new\")}_pan(e){this._draw(e,\"add\")}_pan_end(e){this._draw(e,\"add\",!0)}_tap(e){this._select_event(e,this._select_mode(e),this.model.renderers)}_keyup(e){if(this.model.active\u0026\u0026this._mouse_in_frame)for(const t of this.model.renderers)e.keyCode\u003d\u003d\u003d_.Keys.Esc?t.data_source.selection_manager.clear():e.keyCode\u003d\u003d\u003d_.Keys.Backspace\u0026\u0026this._delete_selected(t)}}a.FreehandDrawToolView\u003dn,n.__name__\u003d\"FreehandDrawToolView\";class h extends o.EditTool{constructor(e){super(e),this.tool_name\u003d\"Freehand Draw Tool\",this.icon\u003dd.tool_icon_freehand_draw,this.event_type\u003d[\"pan\",\"tap\"],this.default_order\u003d3}static init_FreehandDrawTool(){this.prototype.default_view\u003dn,this.define((({Int:e})\u003d\u003e({num_objects:[e,0]}))),this.register_alias(\"freehand_draw\",(()\u003d\u003enew h))}}a.FreehandDrawTool\u003dh,h.__name__\u003d\"FreehandDrawTool\",h.init_FreehandDrawTool()},\n      function _(e,t,s,o,i){o();const a\u003de(43),n\u003de(370),_\u003de(242);class r extends n.EditToolView{_tap(e){if(this._select_event(e,this._select_mode(e),this.model.renderers).length||!this.model.add)return;const t\u003dthis.model.renderers[0],s\u003dthis._map_drag(e.sx,e.sy,t);if(null\u003d\u003ds)return;const o\u003dt.glyph,i\u003dt.data_source,[a,n]\u003d[o.x.field,o.y.field],[_,r]\u003ds;this._pop_glyphs(i,this.model.num_objects),a\u0026\u0026i.get_array(a).push(_),n\u0026\u0026i.get_array(n).push(r),this._pad_empty_columns(i,[a,n]),i.change.emit(),i.data\u003di.data,i.properties.data.change.emit()}_keyup(e){if(this.model.active\u0026\u0026this._mouse_in_frame)for(const t of this.model.renderers)e.keyCode\u003d\u003d\u003da.Keys.Backspace?this._delete_selected(t):e.keyCode\u003d\u003da.Keys.Esc\u0026\u0026t.data_source.selection_manager.clear()}_pan_start(e){this.model.drag\u0026\u0026(this._select_event(e,\"append\",this.model.renderers),this._basepoint\u003d[e.sx,e.sy])}_pan(e){this.model.drag\u0026\u0026null!\u003dthis._basepoint\u0026\u0026this._drag_points(e,this.model.renderers)}_pan_end(e){if(this.model.drag){this._pan(e);for(const e of this.model.renderers)this._emit_cds_changes(e.data_source,!1,!0,!0);this._basepoint\u003dnull}}}s.PointDrawToolView\u003dr,r.__name__\u003d\"PointDrawToolView\";class d extends n.EditTool{constructor(e){super(e),this.tool_name\u003d\"Point Draw Tool\",this.icon\u003d_.tool_icon_point_draw,this.event_type\u003d[\"tap\",\"pan\",\"move\"],this.default_order\u003d2}static init_PointDrawTool(){this.prototype.default_view\u003dr,this.define((({Boolean:e,Int:t})\u003d\u003e({add:[e,!0],drag:[e,!0],num_objects:[t,0]})))}}s.PointDrawTool\u003dd,d.__name__\u003d\"PointDrawTool\",d.init_PointDrawTool()},\n      function _(e,t,s,i,a){i();const o\u003de(43),r\u003de(8),n\u003de(375),_\u003de(242);class d extends n.PolyToolView{constructor(){super(...arguments),this._drawing\u003d!1,this._initialized\u003d!1}_tap(e){this._drawing?this._draw(e,\"add\",!0):this._select_event(e,this._select_mode(e),this.model.renderers)}_draw(e,t,s\u003d!1){const i\u003dthis.model.renderers[0],a\u003dthis._map_drag(e.sx,e.sy,i);if(this._initialized||this.activate(),null\u003d\u003da)return;const[o,n]\u003dthis._snap_to_vertex(e,...a),_\u003di.data_source,d\u003di.glyph,[l,h]\u003d[d.xs.field,d.ys.field];if(\"new\"\u003d\u003dt)this._pop_glyphs(_,this.model.num_objects),l\u0026\u0026_.get_array(l).push([o,o]),h\u0026\u0026_.get_array(h).push([n,n]),this._pad_empty_columns(_,[l,h]);else if(\"edit\"\u003d\u003dt){if(l){const e\u003d_.data[l][_.data[l].length-1];e[e.length-1]\u003do}if(h){const e\u003d_.data[h][_.data[h].length-1];e[e.length-1]\u003dn}}else if(\"add\"\u003d\u003dt){if(l){const e\u003d_.data[l].length-1;let t\u003d_.get_array(l)[e];const s\u003dt[t.length-1];t[t.length-1]\u003do,r.isArray(t)||(t\u003dArray.from(t),_.data[l][e]\u003dt),t.push(s)}if(h){const e\u003d_.data[h].length-1;let t\u003d_.get_array(h)[e];const s\u003dt[t.length-1];t[t.length-1]\u003dn,r.isArray(t)||(t\u003dArray.from(t),_.data[h][e]\u003dt),t.push(s)}}this._emit_cds_changes(_,!0,!1,s)}_show_vertices(){if(!this.model.active)return;const e\u003d[],t\u003d[];for(let s\u003d0;s\u003cthis.model.renderers.length;s++){const i\u003dthis.model.renderers[s],a\u003di.data_source,o\u003di.glyph,[r,n]\u003d[o.xs.field,o.ys.field];if(r)for(const t of a.get_array(r))e.push(...t);if(n)for(const e of a.get_array(n))t.push(...e);this._drawing\u0026\u0026s\u003d\u003dthis.model.renderers.length-1\u0026\u0026(e.splice(e.length-1,1),t.splice(t.length-1,1))}this._set_vertices(e,t)}_doubletap(e){this.model.active\u0026\u0026(this._drawing?(this._drawing\u003d!1,this._draw(e,\"edit\",!0)):(this._drawing\u003d!0,this._draw(e,\"new\",!0)))}_move(e){this._drawing\u0026\u0026this._draw(e,\"edit\")}_remove(){const e\u003dthis.model.renderers[0],t\u003de.data_source,s\u003de.glyph,[i,a]\u003d[s.xs.field,s.ys.field];if(i){const e\u003dt.data[i].length-1,s\u003dt.get_array(i)[e];s.splice(s.length-1,1)}if(a){const e\u003dt.data[a].length-1,s\u003dt.get_array(a)[e];s.splice(s.length-1,1)}this._emit_cds_changes(t)}_keyup(e){if(this.model.active\u0026\u0026this._mouse_in_frame)for(const t of this.model.renderers)e.keyCode\u003d\u003d\u003do.Keys.Backspace?this._delete_selected(t):e.keyCode\u003d\u003do.Keys.Esc\u0026\u0026(this._drawing\u0026\u0026(this._remove(),this._drawing\u003d!1),t.data_source.selection_manager.clear())}_pan_start(e){this.model.drag\u0026\u0026(this._select_event(e,\"append\",this.model.renderers),this._basepoint\u003d[e.sx,e.sy])}_pan(e){if(null\u003d\u003dthis._basepoint||!this.model.drag)return;const[t,s]\u003dthis._basepoint;for(const i of this.model.renderers){const a\u003dthis._map_drag(t,s,i),o\u003dthis._map_drag(e.sx,e.sy,i);if(null\u003d\u003do||null\u003d\u003da)continue;const r\u003di.data_source,n\u003di.glyph,[_,d]\u003d[n.xs.field,n.ys.field];if(!_\u0026\u0026!d)continue;const[l,h]\u003do,[c,g]\u003da,[f,p]\u003d[l-c,h-g];for(const e of r.selected.indices){let t,s,i;_\u0026\u0026(s\u003dr.data[_][e]),d?(i\u003dr.data[d][e],t\u003di.length):t\u003ds.length;for(let e\u003d0;e\u003ct;e++)s\u0026\u0026(s[e]+\u003df),i\u0026\u0026(i[e]+\u003dp)}r.change.emit()}this._basepoint\u003d[e.sx,e.sy]}_pan_end(e){if(this.model.drag){this._pan(e);for(const e of this.model.renderers)this._emit_cds_changes(e.data_source);this._basepoint\u003dnull}}activate(){if(this.model.vertex_renderer\u0026\u0026this.model.active){if(this._show_vertices(),!this._initialized)for(const e of this.model.renderers){const t\u003de.data_source;t.connect(t.properties.data.change,(()\u003d\u003ethis._show_vertices()))}this._initialized\u003d!0}}deactivate(){this._drawing\u0026\u0026(this._remove(),this._drawing\u003d!1),this.model.vertex_renderer\u0026\u0026this._hide_vertices()}}s.PolyDrawToolView\u003dd,d.__name__\u003d\"PolyDrawToolView\";class l extends n.PolyTool{constructor(e){super(e),this.tool_name\u003d\"Polygon Draw Tool\",this.icon\u003d_.tool_icon_poly_draw,this.event_type\u003d[\"pan\",\"tap\",\"move\"],this.default_order\u003d3}static init_PolyDrawTool(){this.prototype.default_view\u003dd,this.define((({Boolean:e,Int:t})\u003d\u003e({drag:[e,!0],num_objects:[t,0]})))}}s.PolyDrawTool\u003dl,l.__name__\u003d\"PolyDrawTool\",l.init_PolyDrawTool()},\n      function _(e,t,r,o,s){o();const i\u003de(8),l\u003de(370);class _ extends l.EditToolView{_set_vertices(e,t){const r\u003dthis.model.vertex_renderer.glyph,o\u003dthis.model.vertex_renderer.data_source,[s,l]\u003d[r.x.field,r.y.field];s\u0026\u0026(i.isArray(e)?o.data[s]\u003de:r.x\u003d{value:e}),l\u0026\u0026(i.isArray(t)?o.data[l]\u003dt:r.y\u003d{value:t}),this._emit_cds_changes(o,!0,!0,!1)}_hide_vertices(){this._set_vertices([],[])}_snap_to_vertex(e,t,r){if(this.model.vertex_renderer){const o\u003dthis._select_event(e,\"replace\",[this.model.vertex_renderer]),s\u003dthis.model.vertex_renderer.data_source,i\u003dthis.model.vertex_renderer.glyph,[l,_]\u003d[i.x.field,i.y.field];if(o.length){const e\u003ds.selected.indices[0];l\u0026\u0026(t\u003ds.data[l][e]),_\u0026\u0026(r\u003ds.data[_][e]),s.selection_manager.clear()}}return[t,r]}}r.PolyToolView\u003d_,_.__name__\u003d\"PolyToolView\";class d extends l.EditTool{constructor(e){super(e)}static init_PolyTool(){this.define((({AnyRef:e})\u003d\u003e({vertex_renderer:[e()]})))}}r.PolyTool\u003dd,d.__name__\u003d\"PolyTool\",d.init_PolyTool()},\n      function _(e,t,s,r,i){r();const _\u003de(43),d\u003de(8),n\u003de(375),l\u003de(242);class a extends n.PolyToolView{constructor(){super(...arguments),this._drawing\u003d!1,this._cur_index\u003dnull}_doubletap(e){if(!this.model.active)return;const t\u003dthis._map_drag(e.sx,e.sy,this.model.vertex_renderer);if(null\u003d\u003dt)return;const[s,r]\u003dt,i\u003dthis._select_event(e,\"replace\",[this.model.vertex_renderer]),_\u003dthis.model.vertex_renderer.data_source,d\u003dthis.model.vertex_renderer.glyph,[n,l]\u003d[d.x.field,d.y.field];if(i.length\u0026\u0026null!\u003dthis._selected_renderer){const e\u003d_.selected.indices[0];this._drawing?(this._drawing\u003d!1,_.selection_manager.clear()):(_.selected.indices\u003d[e+1],n\u0026\u0026_.get_array(n).splice(e+1,0,s),l\u0026\u0026_.get_array(l).splice(e+1,0,r),this._drawing\u003d!0),_.change.emit(),this._emit_cds_changes(this._selected_renderer.data_source)}else this._show_vertices(e)}_show_vertices(e){if(!this.model.active)return;const t\u003dthis.model.renderers[0],s\u003d()\u003d\u003ethis._update_vertices(t),r\u003dnull\u003d\u003dt?void 0:t.data_source,i\u003dthis._select_event(e,\"replace\",this.model.renderers);if(!i.length)return this._set_vertices([],[]),this._selected_renderer\u003dnull,this._drawing\u003d!1,this._cur_index\u003dnull,void(null!\u003dr\u0026\u0026r.disconnect(r.properties.data.change,s));null!\u003dr\u0026\u0026r.connect(r.properties.data.change,s),this._cur_index\u003di[0].data_source.selected.indices[0],this._update_vertices(i[0])}_update_vertices(e){const t\u003de.glyph,s\u003de.data_source,r\u003dthis._cur_index,[i,_]\u003d[t.xs.field,t.ys.field];if(this._drawing)return;if(null\u003d\u003dr\u0026\u0026(i||_))return;let n,l;i\u0026\u0026null!\u003dr?(n\u003ds.data[i][r],d.isArray(n)||(s.data[i][r]\u003dn\u003dArray.from(n))):n\u003dt.xs.value,_\u0026\u0026null!\u003dr?(l\u003ds.data[_][r],d.isArray(l)||(s.data[_][r]\u003dl\u003dArray.from(l))):l\u003dt.ys.value,this._selected_renderer\u003de,this._set_vertices(n,l)}_move(e){if(this._drawing\u0026\u0026null!\u003dthis._selected_renderer){const t\u003dthis.model.vertex_renderer,s\u003dt.data_source,r\u003dt.glyph,i\u003dthis._map_drag(e.sx,e.sy,t);if(null\u003d\u003di)return;let[_,d]\u003di;const n\u003ds.selected.indices;[_,d]\u003dthis._snap_to_vertex(e,_,d),s.selected.indices\u003dn;const[l,a]\u003d[r.x.field,r.y.field],c\u003dn[0];l\u0026\u0026(s.data[l][c]\u003d_),a\u0026\u0026(s.data[a][c]\u003dd),s.change.emit(),this._selected_renderer.data_source.change.emit()}}_tap(e){const t\u003dthis.model.vertex_renderer,s\u003dthis._map_drag(e.sx,e.sy,t);if(null\u003d\u003ds)return;if(this._drawing\u0026\u0026this._selected_renderer){let[r,i]\u003ds;const _\u003dt.data_source,d\u003dt.glyph,[n,l]\u003d[d.x.field,d.y.field],a\u003d_.selected.indices;[r,i]\u003dthis._snap_to_vertex(e,r,i);const c\u003da[0];if(_.selected.indices\u003d[c+1],n){const e\u003d_.get_array(n),t\u003de[c];e[c]\u003dr,e.splice(c+1,0,t)}if(l){const e\u003d_.get_array(l),t\u003de[c];e[c]\u003di,e.splice(c+1,0,t)}return _.change.emit(),void this._emit_cds_changes(this._selected_renderer.data_source,!0,!1,!0)}const r\u003dthis._select_mode(e);this._select_event(e,r,[t]),this._select_event(e,r,this.model.renderers)}_remove_vertex(){if(!this._drawing||!this._selected_renderer)return;const e\u003dthis.model.vertex_renderer,t\u003de.data_source,s\u003de.glyph,r\u003dt.selected.indices[0],[i,_]\u003d[s.x.field,s.y.field];i\u0026\u0026t.get_array(i).splice(r,1),_\u0026\u0026t.get_array(_).splice(r,1),t.change.emit(),this._emit_cds_changes(this._selected_renderer.data_source)}_pan_start(e){this._select_event(e,\"append\",[this.model.vertex_renderer]),this._basepoint\u003d[e.sx,e.sy]}_pan(e){null!\u003dthis._basepoint\u0026\u0026(this._drag_points(e,[this.model.vertex_renderer]),this._selected_renderer\u0026\u0026this._selected_renderer.data_source.change.emit())}_pan_end(e){null!\u003dthis._basepoint\u0026\u0026(this._drag_points(e,[this.model.vertex_renderer]),this._emit_cds_changes(this.model.vertex_renderer.data_source,!1,!0,!0),this._selected_renderer\u0026\u0026this._emit_cds_changes(this._selected_renderer.data_source),this._basepoint\u003dnull)}_keyup(e){if(!this.model.active||!this._mouse_in_frame)return;let t;t\u003dthis._selected_renderer?[this.model.vertex_renderer]:this.model.renderers;for(const s of t)e.keyCode\u003d\u003d\u003d_.Keys.Backspace?(this._delete_selected(s),this._selected_renderer\u0026\u0026this._emit_cds_changes(this._selected_renderer.data_source)):e.keyCode\u003d\u003d_.Keys.Esc\u0026\u0026(this._drawing?(this._remove_vertex(),this._drawing\u003d!1):this._selected_renderer\u0026\u0026this._hide_vertices(),s.data_source.selection_manager.clear())}deactivate(){this._selected_renderer\u0026\u0026(this._drawing\u0026\u0026(this._remove_vertex(),this._drawing\u003d!1),this._hide_vertices())}}s.PolyEditToolView\u003da,a.__name__\u003d\"PolyEditToolView\";class c extends n.PolyTool{constructor(e){super(e),this.tool_name\u003d\"Poly Edit Tool\",this.icon\u003dl.tool_icon_poly_edit,this.event_type\u003d[\"tap\",\"pan\",\"move\"],this.default_order\u003d4}static init_PolyEditTool(){this.prototype.default_view\u003da}}s.PolyEditTool\u003dc,c.__name__\u003d\"PolyEditTool\",c.init_PolyEditTool()},\n      function _(e,t,o,s,i){s();const l\u003de(378),n\u003de(136),_\u003de(20),c\u003de(242);class h extends l.SelectToolView{_compute_limits(e){const t\u003dthis.plot_view.frame,o\u003dthis.model.dimensions;let s\u003dthis._base_point;if(\"center\"\u003d\u003dthis.model.origin){const[t,o]\u003ds,[i,l]\u003de;s\u003d[t-(i-t),o-(l-o)]}return this.model._get_dim_limits(s,e,t,o)}_pan_start(e){const{sx:t,sy:o}\u003de;this._base_point\u003d[t,o]}_pan(e){const{sx:t,sy:o}\u003de,s\u003d[t,o],[i,l]\u003dthis._compute_limits(s);this.model.overlay.update({left:i[0],right:i[1],top:l[0],bottom:l[1]}),this.model.select_every_mousemove\u0026\u0026this._do_select(i,l,!1,this._select_mode(e))}_pan_end(e){const{sx:t,sy:o}\u003de,s\u003d[t,o],[i,l]\u003dthis._compute_limits(s);this._do_select(i,l,!0,this._select_mode(e)),this.model.overlay.update({left:null,right:null,top:null,bottom:null}),this._base_point\u003dnull,this.plot_view.state.push(\"box_select\",{selection:this.plot_view.get_selection()})}_do_select([e,t],[o,s],i,l\u003d\"replace\"){const n\u003d{type:\"rect\",sx0:e,sx1:t,sy0:o,sy1:s};this._select(n,i,l)}}o.BoxSelectToolView\u003dh,h.__name__\u003d\"BoxSelectToolView\";const r\u003d()\u003d\u003enew n.BoxAnnotation({level:\"overlay\",top_units:\"screen\",left_units:\"screen\",bottom_units:\"screen\",right_units:\"screen\",fill_color:\"lightgrey\",fill_alpha:.5,line_color:\"black\",line_alpha:1,line_width:2,line_dash:[4,4]});class a extends l.SelectTool{constructor(e){super(e),this.tool_name\u003d\"Box Select\",this.icon\u003dc.tool_icon_box_select,this.event_type\u003d\"pan\",this.default_order\u003d30}static init_BoxSelectTool(){this.prototype.default_view\u003dh,this.define((({Boolean:e,Ref:t})\u003d\u003e({dimensions:[_.Dimensions,\"both\"],select_every_mousemove:[e,!1],overlay:[t(n.BoxAnnotation),r],origin:[_.BoxOrigin,\"corner\"]}))),this.register_alias(\"box_select\",(()\u003d\u003enew a)),this.register_alias(\"xbox_select\",(()\u003d\u003enew a({dimensions:\"width\"}))),this.register_alias(\"ybox_select\",(()\u003d\u003enew a({dimensions:\"height\"})))}get tooltip(){return this._get_dim_tooltip(this.dimensions)}}o.BoxSelectTool\u003da,a.__name__\u003d\"BoxSelectTool\",a.init_BoxSelectTool()},\n      function _(e,t,s,n,o){n();const r\u003de(237),c\u003de(61),i\u003de(123),l\u003de(62),a\u003de(161),_\u003de(20),d\u003de(43),h\u003de(264),p\u003de(15),u\u003de(11);class m extends r.GestureToolView{connect_signals(){super.connect_signals(),this.model.clear.connect((()\u003d\u003ethis._clear()))}get computed_renderers(){const{renderers:e,names:t}\u003dthis.model,s\u003dthis.plot_model.data_renderers;return a.compute_renderers(e,s,t)}_computed_renderers_by_data_source(){var e;const t\u003dnew Map;for(const s of this.computed_renderers){let n;if(s instanceof c.GlyphRenderer)n\u003ds.data_source;else{if(!(s instanceof i.GraphRenderer))continue;n\u003ds.node_renderer.data_source}const o\u003dnull!\u003d\u003d(e\u003dt.get(n))\u0026\u0026void 0!\u003d\u003de?e:[];t.set(n,[...o,s])}return t}_select_mode(e){const{shiftKey:t,ctrlKey:s}\u003de;return t||s?t\u0026\u0026!s?\"append\":!t\u0026\u0026s?\"intersect\":t\u0026\u0026s?\"subtract\":void u.unreachable():this.model.mode}_keyup(e){e.keyCode\u003d\u003dd.Keys.Esc\u0026\u0026this._clear()}_clear(){for(const e of this.computed_renderers)e.get_selection_manager().clear();const e\u003dthis.computed_renderers.map((e\u003d\u003ethis.plot_view.renderer_view(e)));this.plot_view.request_paint(e)}_select(e,t,s){const n\u003dthis._computed_renderers_by_data_source();for(const[,o]of n){const n\u003do[0].get_selection_manager(),r\u003d[];for(const e of o){const t\u003dthis.plot_view.renderer_view(e);null!\u003dt\u0026\u0026r.push(t)}n.select(r,e,t,s)}null!\u003dthis.model.callback\u0026\u0026this._emit_callback(e),this._emit_selection_event(e,t)}_emit_selection_event(e,t\u003d!0){const{x_scale:s,y_scale:n}\u003dthis.plot_view.frame;let o;switch(e.type){case\"point\":{const{sx:t,sy:r}\u003de,c\u003ds.invert(t),i\u003dn.invert(r);o\u003dObject.assign(Object.assign({},e),{x:c,y:i});break}case\"span\":{const{sx:t,sy:r}\u003de,c\u003ds.invert(t),i\u003dn.invert(r);o\u003dObject.assign(Object.assign({},e),{x:c,y:i});break}case\"rect\":{const{sx0:t,sx1:r,sy0:c,sy1:i}\u003de,[l,a]\u003ds.r_invert(t,r),[_,d]\u003dn.r_invert(c,i);o\u003dObject.assign(Object.assign({},e),{x0:l,y0:_,x1:a,y1:d});break}case\"poly\":{const{sx:t,sy:r}\u003de,c\u003ds.v_invert(t),i\u003dn.v_invert(r);o\u003dObject.assign(Object.assign({},e),{x:c,y:i});break}}this.plot_model.trigger_event(new h.SelectionGeometry(o,t))}}s.SelectToolView\u003dm,m.__name__\u003d\"SelectToolView\";class v extends r.GestureTool{constructor(e){super(e)}initialize(){super.initialize(),this.clear\u003dnew p.Signal0(this,\"clear\")}static init_SelectTool(){this.define((({String:e,Array:t,Ref:s,Or:n,Auto:o})\u003d\u003e({renderers:[n(t(s(l.DataRenderer)),o),\"auto\"],names:[t(e),[]],mode:[_.SelectionMode,\"replace\"]})))}get menu(){return[{icon:\"bk-tool-icon-replace-mode\",tooltip:\"Replace the current selection\",active:()\u003d\u003e\"replace\"\u003d\u003dthis.mode,handler:()\u003d\u003e{this.mode\u003d\"replace\",this.active\u003d!0}},{icon:\"bk-tool-icon-append-mode\",tooltip:\"Append to the current selection (Shift)\",active:()\u003d\u003e\"append\"\u003d\u003dthis.mode,handler:()\u003d\u003e{this.mode\u003d\"append\",this.active\u003d!0}},{icon:\"bk-tool-icon-intersect-mode\",tooltip:\"Intersect with the current selection (Ctrl)\",active:()\u003d\u003e\"intersect\"\u003d\u003dthis.mode,handler:()\u003d\u003e{this.mode\u003d\"intersect\",this.active\u003d!0}},{icon:\"bk-tool-icon-subtract-mode\",tooltip:\"Subtract from the current selection (Shift+Ctrl)\",active:()\u003d\u003e\"subtract\"\u003d\u003dthis.mode,handler:()\u003d\u003e{this.mode\u003d\"subtract\",this.active\u003d!0}},null,{icon:\"bk-tool-icon-clear-selection\",tooltip:\"Clear the current selection (Esc)\",handler:()\u003d\u003e{this.clear.emit()}}]}}s.SelectTool\u003dv,v.__name__\u003d\"SelectTool\",v.init_SelectTool()},\n      function _(t,o,e,s,i){s();const n\u003dt(237),_\u003dt(136),a\u003dt(20),l\u003dt(242);class r extends n.GestureToolView{_match_aspect(t,o,e){const s\u003de.bbox.aspect,i\u003de.bbox.h_range.end,n\u003de.bbox.h_range.start,_\u003de.bbox.v_range.end,a\u003de.bbox.v_range.start;let l\u003dMath.abs(t[0]-o[0]),r\u003dMath.abs(t[1]-o[1]);const h\u003d0\u003d\u003dr?0:l/r,[c]\u003dh\u003e\u003ds?[1,h/s]:[s/h,1];let m,p,d,b;return t[0]\u003c\u003do[0]?(m\u003dt[0],p\u003dt[0]+l*c,p\u003ei\u0026\u0026(p\u003di)):(p\u003dt[0],m\u003dt[0]-l*c,m\u003cn\u0026\u0026(m\u003dn)),l\u003dMath.abs(p-m),t[1]\u003c\u003do[1]?(b\u003dt[1],d\u003dt[1]+l/s,d\u003e_\u0026\u0026(d\u003d_)):(d\u003dt[1],b\u003dt[1]-l/s,b\u003ca\u0026\u0026(b\u003da)),r\u003dMath.abs(d-b),t[0]\u003c\u003do[0]?p\u003dt[0]+s*r:m\u003dt[0]-s*r,[[m,p],[b,d]]}_compute_limits(t){const o\u003dthis.plot_view.frame,e\u003dthis.model.dimensions;let s,i,n\u003dthis._base_point;if(\"center\"\u003d\u003dthis.model.origin){const[o,e]\u003dn,[s,i]\u003dt;n\u003d[o-(s-o),e-(i-e)]}return this.model.match_aspect\u0026\u0026\"both\"\u003d\u003de?[s,i]\u003dthis._match_aspect(n,t,o):[s,i]\u003dthis.model._get_dim_limits(n,t,o,e),[s,i]}_pan_start(t){this._base_point\u003d[t.sx,t.sy]}_pan(t){const o\u003d[t.sx,t.sy],[e,s]\u003dthis._compute_limits(o);this.model.overlay.update({left:e[0],right:e[1],top:s[0],bottom:s[1]})}_pan_end(t){const o\u003d[t.sx,t.sy],[e,s]\u003dthis._compute_limits(o);this._update(e,s),this.model.overlay.update({left:null,right:null,top:null,bottom:null}),this._base_point\u003dnull}_update([t,o],[e,s]){if(Math.abs(o-t)\u003c\u003d5||Math.abs(s-e)\u003c\u003d5)return;const{x_scales:i,y_scales:n}\u003dthis.plot_view.frame,_\u003dnew Map;for(const[e,s]of i){const[i,n]\u003ds.r_invert(t,o);_.set(e,{start:i,end:n})}const a\u003dnew Map;for(const[t,o]of n){const[i,n]\u003do.r_invert(e,s);a.set(t,{start:i,end:n})}const l\u003d{xrs:_,yrs:a};this.plot_view.state.push(\"box_zoom\",{range:l}),this.plot_view.update_range(l)}}e.BoxZoomToolView\u003dr,r.__name__\u003d\"BoxZoomToolView\";const h\u003d()\u003d\u003enew _.BoxAnnotation({level:\"overlay\",top_units:\"screen\",left_units:\"screen\",bottom_units:\"screen\",right_units:\"screen\",fill_color:\"lightgrey\",fill_alpha:.5,line_color:\"black\",line_alpha:1,line_width:2,line_dash:[4,4]});class c extends n.GestureTool{constructor(t){super(t),this.tool_name\u003d\"Box Zoom\",this.icon\u003dl.tool_icon_box_zoom,this.event_type\u003d\"pan\",this.default_order\u003d20}static init_BoxZoomTool(){this.prototype.default_view\u003dr,this.define((({Boolean:t,Ref:o})\u003d\u003e({dimensions:[a.Dimensions,\"both\"],overlay:[o(_.BoxAnnotation),h],match_aspect:[t,!1],origin:[a.BoxOrigin,\"corner\"]}))),this.register_alias(\"box_zoom\",(()\u003d\u003enew c({dimensions:\"both\"}))),this.register_alias(\"xbox_zoom\",(()\u003d\u003enew c({dimensions:\"width\"}))),this.register_alias(\"ybox_zoom\",(()\u003d\u003enew c({dimensions:\"height\"})))}get tooltip(){return this._get_dim_tooltip(this.dimensions)}}e.BoxZoomTool\u003dc,c.__name__\u003d\"BoxZoomTool\",c.init_BoxZoomTool()},\n      function _(s,e,t,o,i){o();const l\u003ds(378),_\u003ds(231),a\u003ds(381),c\u003ds(43),n\u003ds(242);class h extends l.SelectToolView{constructor(){super(...arguments),this.sxs\u003d[],this.sys\u003d[]}connect_signals(){super.connect_signals(),this.connect(this.model.properties.active.change,(()\u003d\u003ethis._active_change()))}_active_change(){this.model.active||this._clear_overlay()}_keyup(s){s.keyCode\u003d\u003dc.Keys.Enter\u0026\u0026this._clear_overlay()}_pan_start(s){this.sxs\u003d[],this.sys\u003d[];const{sx:e,sy:t}\u003ds;this._append_overlay(e,t)}_pan(s){const[e,t]\u003dthis.plot_view.frame.bbox.clip(s.sx,s.sy);this._append_overlay(e,t),this.model.select_every_mousemove\u0026\u0026this._do_select(this.sxs,this.sys,!1,this._select_mode(s))}_pan_end(s){const{sxs:e,sys:t}\u003dthis;this._clear_overlay(),this._do_select(e,t,!0,this._select_mode(s)),this.plot_view.state.push(\"lasso_select\",{selection:this.plot_view.get_selection()})}_append_overlay(s,e){const{sxs:t,sys:o}\u003dthis;t.push(s),o.push(e),this.model.overlay.update({xs:t,ys:o})}_clear_overlay(){this.sxs\u003d[],this.sys\u003d[],this.model.overlay.update({xs:this.sxs,ys:this.sys})}_do_select(s,e,t,o){const i\u003d{type:\"poly\",sx:s,sy:e};this._select(i,t,o)}}t.LassoSelectToolView\u003dh,h.__name__\u003d\"LassoSelectToolView\";class r extends l.SelectTool{constructor(s){super(s),this.tool_name\u003d\"Lasso Select\",this.icon\u003dn.tool_icon_lasso_select,this.event_type\u003d\"pan\",this.default_order\u003d12}static init_LassoSelectTool(){this.prototype.default_view\u003dh,this.define((({Boolean:s,Ref:e})\u003d\u003e({select_every_mousemove:[s,!0],overlay:[e(_.PolyAnnotation),a.DEFAULT_POLY_OVERLAY]}))),this.register_alias(\"lasso_select\",(()\u003d\u003enew r))}}t.LassoSelectTool\u003dr,r.__name__\u003d\"LassoSelectTool\",r.init_LassoSelectTool()},\n      function _(e,t,s,l,o){l();const i\u003de(378),a\u003de(231),_\u003de(43),c\u003de(9),n\u003de(242);class h extends i.SelectToolView{initialize(){super.initialize(),this.data\u003d{sx:[],sy:[]}}connect_signals(){super.connect_signals(),this.connect(this.model.properties.active.change,(()\u003d\u003ethis._active_change()))}_active_change(){this.model.active||this._clear_data()}_keyup(e){e.keyCode\u003d\u003d_.Keys.Enter\u0026\u0026this._clear_data()}_doubletap(e){this._do_select(this.data.sx,this.data.sy,!0,this._select_mode(e)),this.plot_view.state.push(\"poly_select\",{selection:this.plot_view.get_selection()}),this._clear_data()}_clear_data(){this.data\u003d{sx:[],sy:[]},this.model.overlay.update({xs:[],ys:[]})}_tap(e){const{sx:t,sy:s}\u003de;this.plot_view.frame.bbox.contains(t,s)\u0026\u0026(this.data.sx.push(t),this.data.sy.push(s),this.model.overlay.update({xs:c.copy(this.data.sx),ys:c.copy(this.data.sy)}))}_do_select(e,t,s,l){const o\u003d{type:\"poly\",sx:e,sy:t};this._select(o,s,l)}}s.PolySelectToolView\u003dh,h.__name__\u003d\"PolySelectToolView\";s.DEFAULT_POLY_OVERLAY\u003d()\u003d\u003enew a.PolyAnnotation({level:\"overlay\",xs_units:\"screen\",ys_units:\"screen\",fill_color:\"lightgrey\",fill_alpha:.5,line_color:\"black\",line_alpha:1,line_width:2,line_dash:[4,4]});class y extends i.SelectTool{constructor(e){super(e),this.tool_name\u003d\"Poly Select\",this.icon\u003dn.tool_icon_polygon_select,this.event_type\u003d\"tap\",this.default_order\u003d11}static init_PolySelectTool(){this.prototype.default_view\u003dh,this.define((({Ref:e})\u003d\u003e({overlay:[e(a.PolyAnnotation),s.DEFAULT_POLY_OVERLAY]}))),this.register_alias(\"poly_select\",(()\u003d\u003enew y))}}s.PolySelectTool\u003dy,y.__name__\u003d\"PolySelectTool\",y.init_PolySelectTool()},\n      function _(e,t,i,s,n){s();const r\u003de(20),_\u003de(383),d\u003de(242);class o extends _.LineToolView{constructor(){super(...arguments),this._drawing\u003d!1}_doubletap(e){if(!this.model.active)return;const t\u003dthis.model.renderers;for(const i of t){1\u003d\u003dthis._select_event(e,\"replace\",[i]).length\u0026\u0026(this._selected_renderer\u003di)}this._show_intersections(),this._update_line_cds()}_show_intersections(){if(!this.model.active)return;if(null\u003d\u003dthis._selected_renderer)return;if(!this.model.renderers.length)return this._set_intersection([],[]),this._selected_renderer\u003dnull,void(this._drawing\u003d!1);const e\u003dthis._selected_renderer.data_source,t\u003dthis._selected_renderer.glyph,[i,s]\u003d[t.x.field,t.y.field],n\u003de.get_array(i),r\u003de.get_array(s);this._set_intersection(n,r)}_tap(e){const t\u003dthis.model.intersection_renderer;if(null\u003d\u003dthis._map_drag(e.sx,e.sy,t))return;if(this._drawing\u0026\u0026this._selected_renderer){const i\u003dthis._select_mode(e);if(0\u003d\u003dthis._select_event(e,i,[t]).length)return}const i\u003dthis._select_mode(e);this._select_event(e,i,[t]),this._select_event(e,i,this.model.renderers)}_update_line_cds(){if(null\u003d\u003dthis._selected_renderer)return;const e\u003dthis.model.intersection_renderer.glyph,t\u003dthis.model.intersection_renderer.data_source,[i,s]\u003d[e.x.field,e.y.field];if(i\u0026\u0026s){const e\u003dt.data[i],n\u003dt.data[s];this._selected_renderer.data_source.data[i]\u003de,this._selected_renderer.data_source.data[s]\u003dn}this._emit_cds_changes(this._selected_renderer.data_source,!0,!0,!1)}_pan_start(e){this._select_event(e,\"append\",[this.model.intersection_renderer]),this._basepoint\u003d[e.sx,e.sy]}_pan(e){null!\u003dthis._basepoint\u0026\u0026(this._drag_points(e,[this.model.intersection_renderer],this.model.dimensions),this._selected_renderer\u0026\u0026this._selected_renderer.data_source.change.emit())}_pan_end(e){null!\u003dthis._basepoint\u0026\u0026(this._drag_points(e,[this.model.intersection_renderer]),this._emit_cds_changes(this.model.intersection_renderer.data_source,!1,!0,!0),this._selected_renderer\u0026\u0026this._emit_cds_changes(this._selected_renderer.data_source),this._basepoint\u003dnull)}activate(){this._drawing\u003d!0}deactivate(){this._selected_renderer\u0026\u0026(this._drawing\u0026\u0026(this._drawing\u003d!1),this._hide_intersections())}}i.LineEditToolView\u003do,o.__name__\u003d\"LineEditToolView\";class l extends _.LineTool{constructor(e){super(e),this.tool_name\u003d\"Line Edit Tool\",this.icon\u003dd.tool_icon_line_edit,this.event_type\u003d[\"tap\",\"pan\",\"move\"],this.default_order\u003d4}static init_LineEditTool(){this.prototype.default_view\u003do,this.define((()\u003d\u003e({dimensions:[r.Dimensions,\"both\"]})))}get tooltip(){return this._get_dim_tooltip(this.dimensions)}}i.LineEditTool\u003dl,l.__name__\u003d\"LineEditTool\",l.init_LineEditTool()},\n      function _(e,i,t,n,o){n();const s\u003de(8),_\u003de(370);class r extends _.EditToolView{_set_intersection(e,i){const t\u003dthis.model.intersection_renderer.glyph,n\u003dthis.model.intersection_renderer.data_source,[o,_]\u003d[t.x.field,t.y.field];o\u0026\u0026(s.isArray(e)?n.data[o]\u003de:t.x\u003d{value:e}),_\u0026\u0026(s.isArray(i)?n.data[_]\u003di:t.y\u003d{value:i}),this._emit_cds_changes(n,!0,!0,!1)}_hide_intersections(){this._set_intersection([],[])}}t.LineToolView\u003dr,r.__name__\u003d\"LineToolView\";class c extends _.EditTool{constructor(e){super(e)}static init_LineTool(){this.define((({AnyRef:e})\u003d\u003e({intersection_renderer:[e()]})))}}t.LineTool\u003dc,c.__name__\u003d\"LineTool\",c.init_LineTool()},\n      function _(t,s,i,n,e){n();const o\u003dt(1),a\u003dt(237),_\u003dt(20),h\u003do.__importStar(t(242));function l(t,s,i){const n\u003dnew Map;for(const[e,o]of t){const[t,a]\u003do.r_invert(s,i);n.set(e,{start:t,end:a})}return n}i.update_ranges\u003dl;class r extends a.GestureToolView{_pan_start(t){var s;this.last_dx\u003d0,this.last_dy\u003d0;const{sx:i,sy:n}\u003dt,e\u003dthis.plot_view.frame.bbox;if(!e.contains(i,n)){const t\u003de.h_range,s\u003de.v_range;(i\u003ct.start||i\u003et.end)\u0026\u0026(this.v_axis_only\u003d!0),(n\u003cs.start||n\u003es.end)\u0026\u0026(this.h_axis_only\u003d!0)}null\u003d\u003d\u003d(s\u003dthis.model.document)||void 0\u003d\u003d\u003ds||s.interactive_start(this.plot_model)}_pan(t){var s;this._update(t.deltaX,t.deltaY),null\u003d\u003d\u003d(s\u003dthis.model.document)||void 0\u003d\u003d\u003ds||s.interactive_start(this.plot_model)}_pan_end(t){this.h_axis_only\u003d!1,this.v_axis_only\u003d!1,null!\u003dthis.pan_info\u0026\u0026this.plot_view.state.push(\"pan\",{range:this.pan_info})}_update(t,s){const i\u003dthis.plot_view.frame,n\u003dt-this.last_dx,e\u003ds-this.last_dy,o\u003di.bbox.h_range,a\u003do.start-n,_\u003do.end-n,h\u003di.bbox.v_range,r\u003dh.start-e,d\u003dh.end-e,p\u003dthis.model.dimensions;let c,m,u,x,v,y;\"width\"!\u003dp\u0026\u0026\"both\"!\u003dp||this.v_axis_only?(c\u003do.start,m\u003do.end,u\u003d0):(c\u003da,m\u003d_,u\u003d-n),\"height\"!\u003dp\u0026\u0026\"both\"!\u003dp||this.h_axis_only?(x\u003dh.start,v\u003dh.end,y\u003d0):(x\u003dr,v\u003dd,y\u003d-e),this.last_dx\u003dt,this.last_dy\u003ds;const{x_scales:g,y_scales:w}\u003di,f\u003dl(g,c,m),b\u003dl(w,x,v);this.pan_info\u003d{xrs:f,yrs:b,sdx:u,sdy:y},this.plot_view.update_range(this.pan_info,{panning:!0})}}i.PanToolView\u003dr,r.__name__\u003d\"PanToolView\";class d extends a.GestureTool{constructor(t){super(t),this.tool_name\u003d\"Pan\",this.event_type\u003d\"pan\",this.default_order\u003d10}static init_PanTool(){this.prototype.default_view\u003dr,this.define((()\u003d\u003e({dimensions:[_.Dimensions,\"both\",{on_update(t,s){switch(t){case\"both\":s.icon\u003dh.tool_icon_pan;break;case\"width\":s.icon\u003dh.tool_icon_xpan;break;case\"height\":s.icon\u003dh.tool_icon_ypan}}}]}))),this.register_alias(\"pan\",(()\u003d\u003enew d({dimensions:\"both\"}))),this.register_alias(\"xpan\",(()\u003d\u003enew d({dimensions:\"width\"}))),this.register_alias(\"ypan\",(()\u003d\u003enew d({dimensions:\"height\"})))}get tooltip(){return this._get_dim_tooltip(this.dimensions)}}i.PanTool\u003dd,d.__name__\u003d\"PanTool\",d.init_PanTool()},\n      function _(t,e,i,s,n){s();const l\u003dt(136),a\u003dt(156),r\u003dt(19),o\u003dt(237),_\u003dt(242);function h(t){switch(t){case 1:return 2;case 2:return 1;case 4:return 5;case 5:return 4;default:return t}}function d(t,e,i,s){if(null\u003d\u003de)return!1;const n\u003di.compute(e);return Math.abs(t-n)\u003cs}function u(t,e,i,s,n){let l\u003d!0;if(null!\u003dn.left\u0026\u0026null!\u003dn.right){const e\u003di.invert(t);(e\u003cn.left||e\u003en.right)\u0026\u0026(l\u003d!1)}if(null!\u003dn.bottom\u0026\u0026null!\u003dn.top){const t\u003ds.invert(e);(t\u003cn.bottom||t\u003en.top)\u0026\u0026(l\u003d!1)}return l}function c(t,e,i){let s\u003d0;return t\u003e\u003di.start\u0026\u0026t\u003c\u003di.end\u0026\u0026(s+\u003d1),e\u003e\u003di.start\u0026\u0026e\u003c\u003di.end\u0026\u0026(s+\u003d1),s}function g(t,e,i,s){const n\u003de.compute(t),l\u003de.invert(n+i);return l\u003e\u003ds.start\u0026\u0026l\u003c\u003ds.end?l:t}function y(t,e,i){return t\u003ee.start?(e.end\u003dt,i):(e.end\u003de.start,e.start\u003dt,h(i))}function f(t,e,i){return t\u003ce.end?(e.start\u003dt,i):(e.start\u003de.end,e.end\u003dt,h(i))}function m(t,e,i,s){const[n,l]\u003de.r_compute(t.start,t.end),[a,r]\u003de.r_invert(n+i,l+i),o\u003dc(t.start,t.end,s);c(a,r,s)\u003e\u003do\u0026\u0026(t.start\u003da,t.end\u003dr)}i.flip_side\u003dh,i.is_near\u003dd,i.is_inside\u003du,i.sides_inside\u003dc,i.compute_value\u003dg,i.update_range_end_side\u003dy,i.update_range_start_side\u003df,i.update_range\u003dm;class v extends o.GestureToolView{initialize(){super.initialize(),this.side\u003d0,this.model.update_overlay_from_ranges()}connect_signals(){super.connect_signals(),null!\u003dthis.model.x_range\u0026\u0026this.connect(this.model.x_range.change,(()\u003d\u003ethis.model.update_overlay_from_ranges())),null!\u003dthis.model.y_range\u0026\u0026this.connect(this.model.y_range.change,(()\u003d\u003ethis.model.update_overlay_from_ranges()))}_pan_start(t){this.last_dx\u003d0,this.last_dy\u003d0;const e\u003dthis.model.x_range,i\u003dthis.model.y_range,{frame:s}\u003dthis.plot_view,n\u003ds.x_scale,a\u003ds.y_scale,r\u003dthis.model.overlay,{left:o,right:_,top:h,bottom:c}\u003dr,g\u003dthis.model.overlay.line_width+l.EDGE_TOLERANCE;null!\u003de\u0026\u0026this.model.x_interaction\u0026\u0026(d(t.sx,o,n,g)?this.side\u003d1:d(t.sx,_,n,g)?this.side\u003d2:u(t.sx,t.sy,n,a,r)\u0026\u0026(this.side\u003d3)),null!\u003di\u0026\u0026this.model.y_interaction\u0026\u0026(0\u003d\u003dthis.side\u0026\u0026d(t.sy,c,a,g)\u0026\u0026(this.side\u003d4),0\u003d\u003dthis.side\u0026\u0026d(t.sy,h,a,g)?this.side\u003d5:u(t.sx,t.sy,n,a,this.model.overlay)\u0026\u0026(3\u003d\u003dthis.side?this.side\u003d7:this.side\u003d6))}_pan(t){const e\u003dthis.plot_view.frame,i\u003dt.deltaX-this.last_dx,s\u003dt.deltaY-this.last_dy,n\u003dthis.model.x_range,l\u003dthis.model.y_range,a\u003de.x_scale,r\u003de.y_scale;if(null!\u003dn)if(3\u003d\u003dthis.side||7\u003d\u003dthis.side)m(n,a,i,e.x_range);else if(1\u003d\u003dthis.side){const t\u003dg(n.start,a,i,e.x_range);this.side\u003df(t,n,this.side)}else if(2\u003d\u003dthis.side){const t\u003dg(n.end,a,i,e.x_range);this.side\u003dy(t,n,this.side)}if(null!\u003dl)if(6\u003d\u003dthis.side||7\u003d\u003dthis.side)m(l,r,s,e.y_range);else if(4\u003d\u003dthis.side){const t\u003dg(l.start,r,s,e.y_range);this.side\u003df(t,l,this.side)}else if(5\u003d\u003dthis.side){const t\u003dg(l.end,r,s,e.y_range);this.side\u003dy(t,l,this.side)}this.last_dx\u003dt.deltaX,this.last_dy\u003dt.deltaY}_pan_end(t){this.side\u003d0}}i.RangeToolView\u003dv,v.__name__\u003d\"RangeToolView\";const p\u003d()\u003d\u003enew l.BoxAnnotation({level:\"overlay\",fill_color:\"lightgrey\",fill_alpha:.5,line_color:\"black\",line_alpha:1,line_width:.5,line_dash:[2,2]});class x extends o.GestureTool{constructor(t){super(t),this.tool_name\u003d\"Range Tool\",this.icon\u003d_.tool_icon_range,this.event_type\u003d\"pan\",this.default_order\u003d1}static init_RangeTool(){this.prototype.default_view\u003dv,this.define((({Boolean:t,Ref:e,Nullable:i})\u003d\u003e({x_range:[i(e(a.Range1d)),null],x_interaction:[t,!0],y_range:[i(e(a.Range1d)),null],y_interaction:[t,!0],overlay:[e(l.BoxAnnotation),p]})))}initialize(){super.initialize(),this.overlay.in_cursor\u003d\"grab\",this.overlay.ew_cursor\u003dnull!\u003dthis.x_range\u0026\u0026this.x_interaction?\"ew-resize\":null,this.overlay.ns_cursor\u003dnull!\u003dthis.y_range\u0026\u0026this.y_interaction?\"ns-resize\":null}update_overlay_from_ranges(){null\u003d\u003dthis.x_range\u0026\u0026null\u003d\u003dthis.y_range\u0026\u0026(this.overlay.left\u003dnull,this.overlay.right\u003dnull,this.overlay.bottom\u003dnull,this.overlay.top\u003dnull,r.logger.warn(\"RangeTool not configured with any Ranges.\")),null\u003d\u003dthis.x_range?(this.overlay.left\u003dnull,this.overlay.right\u003dnull):(this.overlay.left\u003dthis.x_range.start,this.overlay.right\u003dthis.x_range.end),null\u003d\u003dthis.y_range?(this.overlay.bottom\u003dnull,this.overlay.top\u003dnull):(this.overlay.bottom\u003dthis.y_range.start,this.overlay.top\u003dthis.y_range.end)}}i.RangeTool\u003dx,x.__name__\u003d\"RangeTool\",x.init_RangeTool()},\n      function _(e,t,s,o,i){o();const l\u003de(378),a\u003de(20),n\u003de(242);class c extends l.SelectToolView{_tap(e){\"tap\"\u003d\u003dthis.model.gesture\u0026\u0026this._handle_tap(e)}_doubletap(e){\"doubletap\"\u003d\u003dthis.model.gesture\u0026\u0026this._handle_tap(e)}_handle_tap(e){const{sx:t,sy:s}\u003de,o\u003d{type:\"point\",sx:t,sy:s};this._select(o,!0,this._select_mode(e))}_select(e,t,s){const{callback:o}\u003dthis.model;if(\"select\"\u003d\u003dthis.model.behavior){const i\u003dthis._computed_renderers_by_data_source();for(const[,l]of i){const i\u003dl[0].get_selection_manager(),a\u003dl.map((e\u003d\u003ethis.plot_view.renderer_view(e))).filter((e\u003d\u003enull!\u003de));if(i.select(a,e,t,s)\u0026\u0026null!\u003do){const t\u003da[0].coordinates.x_scale.invert(e.sx),s\u003da[0].coordinates.y_scale.invert(e.sy),l\u003d{geometries:Object.assign(Object.assign({},e),{x:t,y:s}),source:i.source};o.execute(this.model,l)}}this._emit_selection_event(e),this.plot_view.state.push(\"tap\",{selection:this.plot_view.get_selection()})}else for(const t of this.computed_renderers){const s\u003dthis.plot_view.renderer_view(t);if(null\u003d\u003ds)continue;const i\u003dt.get_selection_manager();if(i.inspect(s,e)\u0026\u0026null!\u003do){const t\u003ds.coordinates.x_scale.invert(e.sx),l\u003ds.coordinates.y_scale.invert(e.sy),a\u003d{geometries:Object.assign(Object.assign({},e),{x:t,y:l}),source:i.source};o.execute(this.model,a)}}}}s.TapToolView\u003dc,c.__name__\u003d\"TapToolView\";class _ extends l.SelectTool{constructor(e){super(e),this.tool_name\u003d\"Tap\",this.icon\u003dn.tool_icon_tap_select,this.event_type\u003d\"tap\",this.default_order\u003d10}static init_TapTool(){this.prototype.default_view\u003dc,this.define((({Any:e,Enum:t,Nullable:s})\u003d\u003e({behavior:[a.TapBehavior,\"select\"],gesture:[t(\"tap\",\"doubletap\"),\"tap\"],callback:[s(e)]}))),this.register_alias(\"click\",(()\u003d\u003enew _({behavior:\"inspect\"}))),this.register_alias(\"tap\",(()\u003d\u003enew _)),this.register_alias(\"doubletap\",(()\u003d\u003enew _({gesture:\"doubletap\"})))}}s.TapTool\u003d_,_.__name__\u003d\"TapTool\",_.init_TapTool()},\n      function _(e,t,s,i,n){i();const o\u003de(237),a\u003de(20),l\u003de(242),_\u003de(384);class h extends o.GestureToolView{_scroll(e){let t\u003dthis.model.speed*e.delta;t\u003e.9?t\u003d.9:t\u003c-.9\u0026\u0026(t\u003d-.9),this._update_ranges(t)}_update_ranges(e){var t;const{frame:s}\u003dthis.plot_view,i\u003ds.bbox.h_range,n\u003ds.bbox.v_range,[o,a]\u003d[i.start,i.end],[l,h]\u003d[n.start,n.end];let r,d,c,p;switch(this.model.dimension){case\"height\":{const t\u003dMath.abs(h-l);r\u003do,d\u003da,c\u003dl-t*e,p\u003dh-t*e;break}case\"width\":{const t\u003dMath.abs(a-o);r\u003do-t*e,d\u003da-t*e,c\u003dl,p\u003dh;break}}const{x_scales:m,y_scales:u}\u003ds,w\u003d{xrs:_.update_ranges(m,r,d),yrs:_.update_ranges(u,c,p),factor:e};this.plot_view.state.push(\"wheel_pan\",{range:w}),this.plot_view.update_range(w,{scrolling:!0}),null\u003d\u003d\u003d(t\u003dthis.model.document)||void 0\u003d\u003d\u003dt||t.interactive_start(this.plot_model)}}s.WheelPanToolView\u003dh,h.__name__\u003d\"WheelPanToolView\";class r extends o.GestureTool{constructor(e){super(e),this.tool_name\u003d\"Wheel Pan\",this.icon\u003dl.tool_icon_wheel_pan,this.event_type\u003d\"scroll\",this.default_order\u003d12}static init_WheelPanTool(){this.prototype.default_view\u003dh,this.define((()\u003d\u003e({dimension:[a.Dimension,\"width\"]}))),this.internal((({Number:e})\u003d\u003e({speed:[e,.001]}))),this.register_alias(\"xwheel_pan\",(()\u003d\u003enew r({dimension:\"width\"}))),this.register_alias(\"ywheel_pan\",(()\u003d\u003enew r({dimension:\"height\"})))}get tooltip(){return this._get_dim_tooltip(this.dimension)}}s.WheelPanTool\u003dr,r.__name__\u003d\"WheelPanTool\",r.init_WheelPanTool()},\n      function _(e,o,t,s,i){s();const l\u003de(237),n\u003de(368),h\u003de(20),_\u003de(27),a\u003de(242);class m extends l.GestureToolView{_pinch(e){const{sx:o,sy:t,scale:s,ctrlKey:i,shiftKey:l}\u003de;let n;n\u003ds\u003e\u003d1?20*(s-1):-20/s,this._scroll({type:\"wheel\",sx:o,sy:t,delta:n,ctrlKey:i,shiftKey:l})}_scroll(e){var o;const{frame:t}\u003dthis.plot_view,s\u003dt.bbox.h_range,i\u003dt.bbox.v_range,{sx:l,sy:h}\u003de,_\u003dthis.model.dimensions,a\u003d(\"width\"\u003d\u003d_||\"both\"\u003d\u003d_)\u0026\u0026s.start\u003cl\u0026\u0026l\u003cs.end,m\u003d(\"height\"\u003d\u003d_||\"both\"\u003d\u003d_)\u0026\u0026i.start\u003ch\u0026\u0026h\u003ci.end;if(!(a\u0026\u0026m||this.model.zoom_on_axis))return;const r\u003dthis.model.speed*e.delta,d\u003dn.scale_range(t,r,a,m,{x:l,y:h});this.plot_view.state.push(\"wheel_zoom\",{range:d});const{maintain_focus:c}\u003dthis.model;this.plot_view.update_range(d,{scrolling:!0,maintain_focus:c}),null\u003d\u003d\u003d(o\u003dthis.model.document)||void 0\u003d\u003d\u003do||o.interactive_start(this.plot_model)}}t.WheelZoomToolView\u003dm,m.__name__\u003d\"WheelZoomToolView\";class r extends l.GestureTool{constructor(e){super(e),this.tool_name\u003d\"Wheel Zoom\",this.icon\u003da.tool_icon_wheel_zoom,this.event_type\u003d_.is_mobile?\"pinch\":\"scroll\",this.default_order\u003d10}static init_WheelZoomTool(){this.prototype.default_view\u003dm,this.define((({Boolean:e,Number:o})\u003d\u003e({dimensions:[h.Dimensions,\"both\"],maintain_focus:[e,!0],zoom_on_axis:[e,!0],speed:[o,1/600]}))),this.register_alias(\"wheel_zoom\",(()\u003d\u003enew r({dimensions:\"both\"}))),this.register_alias(\"xwheel_zoom\",(()\u003d\u003enew r({dimensions:\"width\"}))),this.register_alias(\"ywheel_zoom\",(()\u003d\u003enew r({dimensions:\"height\"})))}get tooltip(){return this._get_dim_tooltip(this.dimensions)}}t.WheelZoomTool\u003dr,r.__name__\u003d\"WheelZoomTool\",r.init_WheelZoomTool()},\n      function _(i,s,t,o,e){o();const n\u003di(247),l\u003di(233),h\u003di(20),a\u003di(13),r\u003di(242);class _ extends n.InspectToolView{_move(i){if(!this.model.active)return;const{sx:s,sy:t}\u003di;this.plot_view.frame.bbox.contains(s,t)?this._update_spans(s,t):this._update_spans(null,null)}_move_exit(i){this._update_spans(null,null)}_update_spans(i,s){const t\u003dthis.model.dimensions;\"width\"!\u003dt\u0026\u0026\"both\"!\u003dt||(this.model.spans.width.location\u003ds),\"height\"!\u003dt\u0026\u0026\"both\"!\u003dt||(this.model.spans.height.location\u003di)}}t.CrosshairToolView\u003d_,_.__name__\u003d\"CrosshairToolView\";class c extends n.InspectTool{constructor(i){super(i),this.tool_name\u003d\"Crosshair\",this.icon\u003dr.tool_icon_crosshair}static init_CrosshairTool(){function i(i,s){return new l.Span({for_hover:!0,dimension:s,location_units:\"screen\",level:\"overlay\",line_color:i.line_color,line_width:i.line_width,line_alpha:i.line_alpha})}this.prototype.default_view\u003d_,this.define((({Alpha:i,Number:s,Color:t})\u003d\u003e({dimensions:[h.Dimensions,\"both\"],line_color:[t,\"black\"],line_width:[s,1],line_alpha:[i,1]}))),this.internal((({Struct:s,Ref:t})\u003d\u003e({spans:[s({width:t(l.Span),height:t(l.Span)}),s\u003d\u003e({width:i(s,\"width\"),height:i(s,\"height\")})]}))),this.register_alias(\"crosshair\",(()\u003d\u003enew c))}get tooltip(){return this._get_dim_tooltip(this.dimensions)}get synthetic_renderers(){return a.values(this.spans)}}t.CrosshairTool\u003dc,c.__name__\u003d\"CrosshairTool\",c.init_CrosshairTool()},\n      function _(t,e,s,o,r){o();const n\u003dt(53),i\u003dt(13),a\u003dt(34);class u extends n.Model{constructor(t){super(t)}static init_CustomJSHover(){this.define((({Unknown:t,String:e,Dict:s})\u003d\u003e({args:[s(t),{}],code:[e,\"\"]})))}get values(){return i.values(this.args)}_make_code(t,e,s,o){return new Function(...i.keys(this.args),t,e,s,a.use_strict(o))}format(t,e,s){return this._make_code(\"value\",\"format\",\"special_vars\",this.code)(...this.values,t,e,s)}}s.CustomJSHover\u003du,u.__name__\u003d\"CustomJSHover\",u.init_CustomJSHover()},\n      function _(e,t,n,s,o){s();const i\u003de(1),r\u003de(247),l\u003de(390),a\u003de(254),c\u003de(61),_\u003de(123),d\u003de(62),p\u003de(63),h\u003de(127),u\u003di.__importStar(e(107)),m\u003de(182),y\u003de(43),f\u003de(22),x\u003de(13),v\u003de(245),w\u003de(8),g\u003de(122),b\u003de(20),k\u003de(242),C\u003de(15),S\u003de(161),T\u003di.__importStar(e(255));function $(e,t,n,s,o,i){const r\u003d{x:o[e],y:i[e]},l\u003d{x:o[e+1],y:i[e+1]};let a,c;if(\"span\"\u003d\u003dt.type)\"h\"\u003d\u003dt.direction?(a\u003dMath.abs(r.x-n),c\u003dMath.abs(l.x-n)):(a\u003dMath.abs(r.y-s),c\u003dMath.abs(l.y-s));else{const e\u003d{x:n,y:s};a\u003du.dist_2_pts(r,e),c\u003du.dist_2_pts(l,e)}return a\u003cc?[[r.x,r.y],e]:[[l.x,l.y],e+1]}function R(e,t,n){return[[e[n],t[n]],n]}n._nearest_line_hit\u003d$,n._line_hit\u003dR;class H extends r.InspectToolView{initialize(){super.initialize(),this._ttmodels\u003dnew Map,this._ttviews\u003dnew Map}async lazy_initialize(){await super.lazy_initialize(),await this._update_ttmodels()}remove(){g.remove_views(this._ttviews),super.remove()}connect_signals(){super.connect_signals();const e\u003dthis.plot_model.properties.renderers,{renderers:t,tooltips:n}\u003dthis.model.properties;this.on_change(n,(()\u003d\u003edelete this._template_el)),this.on_change([e,t,n],(async()\u003d\u003eawait this._update_ttmodels()))}async _update_ttmodels(){const{_ttmodels:e,computed_renderers:t}\u003dthis;e.clear();const{tooltips:n}\u003dthis.model;if(null!\u003dn)for(const t of this.computed_renderers){const s\u003dnew a.Tooltip({custom:w.isString(n)||w.isFunction(n),attachment:this.model.attachment,show_arrow:this.model.show_arrow});t instanceof c.GlyphRenderer?e.set(t,s):t instanceof _.GraphRenderer\u0026\u0026(e.set(t.node_renderer,s),e.set(t.edge_renderer,s))}const s\u003dawait g.build_views(this._ttviews,[...e.values()],{parent:this.plot_view});for(const e of s)e.render();const o\u003d[...function*(){for(const e of t)e instanceof c.GlyphRenderer?yield e:e instanceof _.GraphRenderer\u0026\u0026(yield e.node_renderer,yield e.edge_renderer)}()],i\u003dthis._slots.get(this._update);if(null!\u003di){const e\u003dnew Set(o.map((e\u003d\u003ee.data_source)));C.Signal.disconnect_receiver(this,i,e)}for(const e of o)this.connect(e.data_source.inspect,this._update)}get computed_renderers(){const{renderers:e,names:t}\u003dthis.model,n\u003dthis.plot_model.data_renderers;return S.compute_renderers(e,n,t)}get ttmodels(){return this._ttmodels}_clear(){this._inspect(1/0,1/0);for(const[,e]of this.ttmodels)e.clear()}_move(e){if(!this.model.active)return;const{sx:t,sy:n}\u003de;this.plot_view.frame.bbox.contains(t,n)?this._inspect(t,n):this._clear()}_move_exit(){this._clear()}_inspect(e,t){let n;if(\"mouse\"\u003d\u003dthis.model.mode)n\u003d{type:\"point\",sx:e,sy:t};else{n\u003d{type:\"span\",direction:\"vline\"\u003d\u003dthis.model.mode?\"h\":\"v\",sx:e,sy:t}}for(const e of this.computed_renderers){const t\u003de.get_selection_manager(),s\u003dthis.plot_view.renderer_view(e);null!\u003ds\u0026\u0026t.inspect(s,n)}this._emit_callback(n)}_update([e,{geometry:t}]){var n,s;if(!this.model.active)return;if(\"point\"!\u003dt.type\u0026\u0026\"span\"!\u003dt.type)return;if(!(e instanceof c.GlyphRenderer))return;if(\"ignore\"\u003d\u003dthis.model.muted_policy\u0026\u0026e.muted)return;const o\u003dthis.ttmodels.get(e);if(null\u003d\u003do)return;const i\u003de.get_selection_manager();let r\u003di.inspectors.get(e);if(r\u003de.view.convert_selection_to_subset(r),r.is_empty())return void o.clear();const l\u003di.source,a\u003dthis.plot_view.renderer_view(e);if(null\u003d\u003da)return;const{sx:_,sy:d}\u003dt,u\u003da.coordinates.x_scale,m\u003da.coordinates.y_scale,f\u003du.invert(_),v\u003dm.invert(d),{glyph:w}\u003da,g\u003d[];if(w instanceof p.LineView)for(const n of r.line_indices){let s,o,i\u003dw._x[n+1],a\u003dw._y[n+1],c\u003dn;switch(this.model.line_policy){case\"interp\":[i,a]\u003dw.get_interpolation_hit(n,t),s\u003du.compute(i),o\u003dm.compute(a);break;case\"prev\":[[s,o],c]\u003dR(w.sx,w.sy,n);break;case\"next\":[[s,o],c]\u003dR(w.sx,w.sy,n+1);break;case\"nearest\":[[s,o],c]\u003d$(n,t,_,d,w.sx,w.sy),i\u003dw._x[c],a\u003dw._y[c];break;default:[s,o]\u003d[_,d]}const p\u003d{index:c,x:f,y:v,sx:_,sy:d,data_x:i,data_y:a,rx:s,ry:o,indices:r.line_indices,name:e.name};g.push([s,o,this._render_tooltips(l,c,p)])}for(const t of r.image_indices){const n\u003d{index:t.index,x:f,y:v,sx:_,sy:d,name:e.name},s\u003dthis._render_tooltips(l,t,n);g.push([_,d,s])}for(const o of r.indices)if(w instanceof h.MultiLineView\u0026\u0026!x.isEmpty(r.multiline_indices))for(const n of r.multiline_indices[o.toString()]){let s,i,a,p\u003dw._xs.get(o)[n],h\u003dw._ys.get(o)[n],y\u003dn;switch(this.model.line_policy){case\"interp\":[p,h]\u003dw.get_interpolation_hit(o,n,t),s\u003du.compute(p),i\u003dm.compute(h);break;case\"prev\":[[s,i],y]\u003dR(w.sxs.get(o),w.sys.get(o),n);break;case\"next\":[[s,i],y]\u003dR(w.sxs.get(o),w.sys.get(o),n+1);break;case\"nearest\":[[s,i],y]\u003d$(n,t,_,d,w.sxs.get(o),w.sys.get(o)),p\u003dw._xs.get(o)[y],h\u003dw._ys.get(o)[y];break;default:throw new Error(\"shouldn\u0027t have happened\")}a\u003de instanceof c.GlyphRenderer?e.view.convert_indices_from_subset([o])[0]:o;const x\u003d{index:a,x:f,y:v,sx:_,sy:d,data_x:p,data_y:h,segment_index:y,indices:r.multiline_indices,name:e.name};g.push([s,i,this._render_tooltips(l,a,x)])}else{const t\u003dnull\u003d\u003d\u003d(n\u003dw._x)||void 0\u003d\u003d\u003dn?void 0:n[o],i\u003dnull\u003d\u003d\u003d(s\u003dw._y)||void 0\u003d\u003d\u003ds?void 0:s[o];let a,p,h;if(\"snap_to_data\"\u003d\u003dthis.model.point_policy){let e\u003dw.get_anchor_point(this.model.anchor,o,[_,d]);if(null\u003d\u003de\u0026\u0026(e\u003dw.get_anchor_point(\"center\",o,[_,d]),null\u003d\u003de))continue;a\u003de.x,p\u003de.y}else[a,p]\u003d[_,d];h\u003de instanceof c.GlyphRenderer?e.view.convert_indices_from_subset([o])[0]:o;const u\u003d{index:h,x:f,y:v,sx:_,sy:d,data_x:t,data_y:i,indices:r.indices,name:e.name};g.push([a,p,this._render_tooltips(l,h,u)])}if(0\u003d\u003dg.length)o.clear();else{const{content:e}\u003do;y.empty(o.content);for(const[,,t]of g)null!\u003dt\u0026\u0026e.appendChild(t);const[t,n]\u003dg[g.length-1];o.setv({position:[t,n]},{check_eq:!1})}}_emit_callback(e){const{callback:t}\u003dthis.model;if(null!\u003dt)for(const n of this.computed_renderers){if(!(n instanceof c.GlyphRenderer))continue;const s\u003dthis.plot_view.renderer_view(n);if(null\u003d\u003ds)continue;const{x_scale:o,y_scale:i}\u003ds.coordinates,r\u003do.invert(e.sx),l\u003di.invert(e.sy),a\u003dn.data_source.inspected;t.execute(this.model,{geometry:Object.assign({x:r,y:l},e),renderer:n,index:a})}}_create_template(e){const t\u003dy.div({style:{display:\"table\",borderSpacing:\"2px\"}});for(const[n]of e){const e\u003dy.div({style:{display:\"table-row\"}});t.appendChild(e);const s\u003dy.div({style:{display:\"table-cell\"},class:T.tooltip_row_label},0!\u003dn.length?`${n}: `:\"\");e.appendChild(s);const o\u003dy.span();o.dataset.value\u003d\"\";const i\u003dy.span({class:T.tooltip_color_block},\" \");i.dataset.swatch\u003d\"\",y.undisplay(i);const r\u003dy.div({style:{display:\"table-cell\"},class:T.tooltip_row_value},o,i);e.appendChild(r)}return t}_render_template(e,t,n,s,o){const i\u003de.cloneNode(!0),r\u003di.querySelectorAll(\"[data-value]\"),l\u003di.querySelectorAll(\"[data-swatch]\"),a\u003d/\\$color(\\[.*\\])?:(\\w*)/,c\u003d/\\$swatch:(\\w*)/;for(const[[,e],i]of v.enumerate(t)){const t\u003de.match(c),_\u003de.match(a);if(null!\u003dt||null!\u003d_){if(null!\u003dt){const[,e]\u003dt,o\u003dn.get_column(e);if(null\u003d\u003do)r[i].textContent\u003d`${e} unknown`;else{const e\u003dw.isNumber(s)?o[s]:null;null!\u003de\u0026\u0026(l[i].style.backgroundColor\u003df.color2css(e),y.display(l[i]))}}if(null!\u003d_){const[,e\u003d\"\",t]\u003d_,o\u003dn.get_column(t);if(null\u003d\u003do){r[i].textContent\u003d`${t} unknown`;continue}const a\u003de.indexOf(\"hex\")\u003e\u003d0,c\u003de.indexOf(\"swatch\")\u003e\u003d0,d\u003dw.isNumber(s)?o[s]:null;if(null\u003d\u003dd){r[i].textContent\u003d\"(null)\";continue}r[i].textContent\u003da?f.color2hex(d):f.color2css(d),c\u0026\u0026(l[i].style.backgroundColor\u003df.color2css(d),y.display(l[i]))}}else{const t\u003dm.replace_placeholders(e.replace(\"$~\",\"$data_\"),n,s,this.model.formatters,o);if(w.isString(t))r[i].textContent\u003dt;else for(const e of t)r[i].appendChild(e)}}return i}_render_tooltips(e,t,n){var s;const{tooltips:o}\u003dthis.model;if(w.isString(o)){const s\u003dm.replace_placeholders({html:o},e,t,this.model.formatters,n);return y.div({},s)}if(w.isFunction(o))return o(e,n);if(null!\u003do){const i\u003dnull!\u003d\u003d(s\u003dthis._template_el)\u0026\u0026void 0!\u003d\u003ds?s:this._template_el\u003dthis._create_template(o);return this._render_template(i,o,e,t,n)}return null}}n.HoverToolView\u003dH,H.__name__\u003d\"HoverToolView\";class M extends r.InspectTool{constructor(e){super(e),this.tool_name\u003d\"Hover\",this.icon\u003dk.tool_icon_hover}static init_HoverTool(){this.prototype.default_view\u003dH,this.define((({Any:e,Boolean:t,String:n,Array:s,Tuple:o,Dict:i,Or:r,Ref:a,Function:c,Auto:_,Nullable:p})\u003d\u003e({tooltips:[p(r(n,s(o(n,n)),c())),[[\"index\",\"$index\"],[\"data (x, y)\",\"($x, $y)\"],[\"screen (x, y)\",\"($sx, $sy)\"]]],formatters:[i(r(a(l.CustomJSHover),m.FormatterType)),{}],renderers:[r(s(a(d.DataRenderer)),_),\"auto\"],names:[s(n),[]],mode:[b.HoverMode,\"mouse\"],muted_policy:[b.MutedPolicy,\"show\"],point_policy:[b.PointPolicy,\"snap_to_data\"],line_policy:[b.LinePolicy,\"nearest\"],show_arrow:[t,!0],anchor:[b.Anchor,\"center\"],attachment:[b.TooltipAttachment,\"horizontal\"],callback:[p(e)]}))),this.register_alias(\"hover\",(()\u003d\u003enew M))}}n.HoverTool\u003dM,M.__name__\u003d\"HoverTool\",M.init_HoverTool()},\n      function _(t,o,e,n,i){n();const s\u003dt(15),l\u003dt(53),c\u003dt(238),r\u003dt(247),a\u003dt(245);class u extends l.Model{constructor(t){super(t)}static init_ToolProxy(){this.define((({Boolean:t,Array:o,Ref:e})\u003d\u003e({tools:[o(e(c.ButtonTool)),[]],active:[t,!1],disabled:[t,!1]})))}get button_view(){return this.tools[0].button_view}get event_type(){return this.tools[0].event_type}get tooltip(){return this.tools[0].tooltip}get tool_name(){return this.tools[0].tool_name}get icon(){return this.tools[0].computed_icon}get computed_icon(){return this.icon}get toggleable(){const t\u003dthis.tools[0];return t instanceof r.InspectTool\u0026\u0026t.toggleable}initialize(){super.initialize(),this.do\u003dnew s.Signal0(this,\"do\")}connect_signals(){super.connect_signals(),this.connect(this.do,(()\u003d\u003ethis.doit())),this.connect(this.properties.active.change,(()\u003d\u003ethis.set_active()));for(const t of this.tools)this.connect(t.properties.active.change,(()\u003d\u003e{this.active\u003dt.active}))}doit(){for(const t of this.tools)t.do.emit()}set_active(){for(const t of this.tools)t.active\u003dthis.active}get menu(){const{menu:t}\u003dthis.tools[0];if(null\u003d\u003dt)return null;const o\u003d[];for(const[e,n]of a.enumerate(t))if(null\u003d\u003de)o.push(null);else{const t\u003d()\u003d\u003e{var t,o;for(const e of this.tools)null\u003d\u003d\u003d(o\u003dnull\u003d\u003d\u003d(t\u003de.menu)||void 0\u003d\u003d\u003dt?void 0:t[n])||void 0\u003d\u003d\u003do||o.handler()};o.push(Object.assign(Object.assign({},e),{handler:t}))}return o}}e.ToolProxy\u003du,u.__name__\u003d\"ToolProxy\",u.init_ToolProxy()},\n      function _(o,t,s,i,e){i();const n\u003do(20),r\u003do(9),l\u003do(13),c\u003do(248),h\u003do(235),a\u003do(392),_\u003do(319),p\u003do(221);class f extends c.ToolbarBase{constructor(o){super(o)}static init_ProxyToolbar(){this.define((({Array:o,Ref:t})\u003d\u003e({toolbars:[o(t(h.Toolbar)),[]]})))}initialize(){super.initialize(),this._merge_tools()}_merge_tools(){this._proxied_tools\u003d[];const o\u003d{},t\u003d{},s\u003d{},i\u003d[],e\u003d[];for(const o of this.help)r.includes(e,o.redirect)||(i.push(o),e.push(o.redirect));this._proxied_tools.push(...i),this.help\u003di;for(const[o,t]of l.entries(this.gestures)){o in s||(s[o]\u003d{});for(const i of t.tools)i.type in s[o]||(s[o][i.type]\u003d[]),s[o][i.type].push(i)}for(const t of this.inspectors)t.type in o||(o[t.type]\u003d[]),o[t.type].push(t);for(const o of this.actions)o.type in t||(t[o.type]\u003d[]),t[o.type].push(o);const n\u003d(o,t\u003d!1)\u003d\u003e{const s\u003dnew a.ToolProxy({tools:o,active:t});return this._proxied_tools.push(s),s};for(const o of l.keys(s)){const t\u003dthis.gestures[o];t.tools\u003d[];for(const i of l.keys(s[o])){const e\u003ds[o][i];if(e.length\u003e0)if(\"multi\"\u003d\u003do)for(const o of e){const s\u003dn([o]);t.tools.push(s),this.connect(s.properties.active.change,(()\u003d\u003ethis._active_change(s)))}else{const o\u003dn(e);t.tools.push(o),this.connect(o.properties.active.change,(()\u003d\u003ethis._active_change(o)))}}}this.actions\u003d[];for(const[o,s]of l.entries(t))if(\"CustomAction\"\u003d\u003do)for(const o of s)this.actions.push(n([o]));else s.length\u003e0\u0026\u0026this.actions.push(n(s));this.inspectors\u003d[];for(const t of l.values(o))t.length\u003e0\u0026\u0026this.inspectors.push(n(t,!0));for(const[o,t]of l.entries(this.gestures))0!\u003dt.tools.length\u0026\u0026(t.tools\u003dr.sort_by(t.tools,(o\u003d\u003eo.default_order)),\"pinch\"!\u003do\u0026\u0026\"scroll\"!\u003do\u0026\u0026\"multi\"!\u003do\u0026\u0026(t.tools[0].active\u003d!0))}}s.ProxyToolbar\u003df,f.__name__\u003d\"ProxyToolbar\",f.init_ProxyToolbar();class u extends _.LayoutDOMView{initialize(){this.model.toolbar.toolbar_location\u003dthis.model.toolbar_location,super.initialize()}get child_models(){return[this.model.toolbar]}_update_layout(){this.layout\u003dnew p.ContentBox(this.child_views[0].el);const{toolbar:o}\u003dthis.model;o.horizontal?this.layout.set_sizing({width_policy:\"fit\",min_width:100,height_policy:\"fixed\"}):this.layout.set_sizing({width_policy:\"fixed\",height_policy:\"fit\",min_height:100})}}s.ToolbarBoxView\u003du,u.__name__\u003d\"ToolbarBoxView\";class y extends _.LayoutDOM{constructor(o){super(o)}static init_ToolbarBox(){this.prototype.default_view\u003du,this.define((({Ref:o})\u003d\u003e({toolbar:[o(c.ToolbarBase)],toolbar_location:[n.Location,\"right\"]})))}}s.ToolbarBox\u003dy,y.__name__\u003d\"ToolbarBox\",y.init_ToolbarBox()},\n      function _(e,n,r,t,o){t();const s\u003de(1),u\u003de(53),c\u003ds.__importStar(e(21)),a\u003de(8),l\u003de(13);r.resolve_defs\u003dfunction(e,n){var r,t,o,s;function i(e){return null!\u003de.module?`${e.module}.${e.name}`:e.name}function f(e){if(a.isString(e))switch(e){case\"Any\":return c.Any;case\"Unknown\":return c.Unknown;case\"Boolean\":return c.Boolean;case\"Number\":return c.Number;case\"Int\":return c.Int;case\"String\":return c.String;case\"Null\":return c.Null}else switch(e[0]){case\"Nullable\":{const[,n]\u003de;return c.Nullable(f(n))}case\"Or\":{const[,...n]\u003de;return c.Or(...n.map(f))}case\"Tuple\":{const[,n,...r]\u003de;return c.Tuple(f(n),...r.map(f))}case\"Array\":{const[,n]\u003de;return c.Array(f(n))}case\"Struct\":{const[,...n]\u003de,r\u003dn.map((([e,n])\u003d\u003e[e,f(n)]));return c.Struct(l.to_object(r))}case\"Dict\":{const[,n]\u003de;return c.Dict(f(n))}case\"Map\":{const[,n,r]\u003de;return c.Map(f(n),f(r))}case\"Enum\":{const[,...n]\u003de;return c.Enum(...n)}case\"Ref\":{const[,r]\u003de,t\u003dn.get(i(r));if(null!\u003dt)return c.Ref(t);throw new Error(`${i(r)} wasn\u0027t defined before referencing it`)}case\"AnyRef\":return c.AnyRef()}}for(const c of e){const e\u003d(()\u003d\u003e{if(null\u003d\u003dc.extends)return u.Model;{const e\u003dn.get(i(c.extends));if(null!\u003de)return e;throw new Error(`base model ${i(c.extends)} of ${i(c)} is not defined`)}})(),a\u003d((s\u003dclass extends e{}).__name__\u003dc.name,s.__module__\u003dc.module,s);for(const e of null!\u003d\u003d(r\u003dc.properties)\u0026\u0026void 0!\u003d\u003dr?r:[]){const n\u003df(null!\u003d\u003d(t\u003de.kind)\u0026\u0026void 0!\u003d\u003dt?t:\"Unknown\");a.define({[e.name]:[n,e.default]})}for(const e of null!\u003d\u003d(o\u003dc.overrides)\u0026\u0026void 0!\u003d\u003do?o:[])a.override({[e.name]:e.default});n.register(a)}}},\n      function _(n,e,t,o,i){o();const d\u003dn(5),c\u003dn(240),s\u003dn(122),a\u003dn(43),l\u003dn(396);t.index\u003d{},t.add_document_standalone\u003dasync function(n,e,o\u003d[],i\u003d!1){const u\u003dnew Map;async function f(i){let d;const f\u003dn.roots().indexOf(i),r\u003do[f];null!\u003dr?d\u003dr:e.classList.contains(l.BOKEH_ROOT)?d\u003de:(d\u003da.div({class:l.BOKEH_ROOT}),e.appendChild(d));const w\u003dawait s.build_view(i,{parent:null});return w instanceof c.DOMView\u0026\u0026w.renderTo(d),u.set(i,w),t.index[i.id]\u003dw,w}for(const e of n.roots())await f(e);return i\u0026\u0026(window.document.title\u003dn.title()),n.on_change((n\u003d\u003e{n instanceof d.RootAddedEvent?f(n.model):n instanceof d.RootRemovedEvent?function(n){const e\u003du.get(n);null!\u003de\u0026\u0026(e.remove(),u.delete(n),delete t.index[n.id])}(n.model):i\u0026\u0026n instanceof d.TitleChangedEvent\u0026\u0026(window.document.title\u003dn.title)})),[...u.values()]}},\n      function _(o,e,n,t,r){t();const l\u003do(43),d\u003do(44);function u(o){let e\u003ddocument.getElementById(o);if(null\u003d\u003de)throw new Error(`Error rendering Bokeh model: could not find #${o} HTML tag`);if(!document.body.contains(e))throw new Error(`Error rendering Bokeh model: element #${o} must be under \u003cbody\u003e`);if(\"SCRIPT\"\u003d\u003de.tagName){const o\u003dl.div({class:n.BOKEH_ROOT});l.replaceWith(e,o),e\u003do}return e}n.BOKEH_ROOT\u003dd.root,n._resolve_element\u003dfunction(o){const{elementid:e}\u003do;return null!\u003de?u(e):document.body},n._resolve_root_elements\u003dfunction(o){const e\u003d[];if(null!\u003do.root_ids\u0026\u0026null!\u003do.roots)for(const n of o.root_ids)e.push(u(o.roots[n]));return e}},\n      function _(n,o,t,s,e){s();const c\u003dn(398),r\u003dn(19),a\u003dn(395);t._get_ws_url\u003dfunction(n,o){let t,s\u003d\"ws:\";return\"https:\"\u003d\u003dwindow.location.protocol\u0026\u0026(s\u003d\"wss:\"),null!\u003do?(t\u003ddocument.createElement(\"a\"),t.href\u003do):t\u003dwindow.location,null!\u003dn?\"/\"\u003d\u003dn\u0026\u0026(n\u003d\"\"):n\u003dt.pathname.replace(/\\/+$/,\"\"),s+\"//\"+t.host+n+\"/ws\"};const i\u003d{};t.add_document_from_session\u003dasync function(n,o,t,s\u003d[],e\u003d!1){const l\u003dwindow.location.search.substr(1);let d;try{d\u003dawait function(n,o,t){const s\u003dc.parse_token(o).session_id;n in i||(i[n]\u003d{});const e\u003di[n];return s in e||(e[s]\u003dc.pull_session(n,o,t)),e[s]}(n,o,l)}catch(n){const t\u003dc.parse_token(o).session_id;throw r.logger.error(`Failed to load Bokeh session ${t}: ${n}`),n}return a.add_document_standalone(d.document,t,s,e)}},\n      function _(e,s,n,t,o){t();const r\u003de(19),i\u003de(5),c\u003de(399),l\u003de(400),_\u003de(401);n.DEFAULT_SERVER_WEBSOCKET_URL\u003d\"ws://localhost:5006/ws\",n.DEFAULT_TOKEN\u003d\"eyJzZXNzaW9uX2lkIjogImRlZmF1bHQifQ\";let h\u003d0;function a(e){let s\u003de.split(\".\")[0];const n\u003ds.length%4;return 0!\u003dn\u0026\u0026(s+\u003d\"\u003d\".repeat(4-n)),JSON.parse(atob(s.replace(/_/g,\"/\").replace(/-/g,\"+\")))}n.parse_token\u003da;class d{constructor(e\u003dn.DEFAULT_SERVER_WEBSOCKET_URL,s\u003dn.DEFAULT_TOKEN,t\u003dnull){this.url\u003de,this.token\u003ds,this.args_string\u003dt,this._number\u003dh++,this.socket\u003dnull,this.session\u003dnull,this.closed_permanently\u003d!1,this._current_handler\u003dnull,this._pending_replies\u003dnew Map,this._pending_messages\u003d[],this._receiver\u003dnew l.Receiver,this.id\u003da(s).session_id.split(\".\")[0],r.logger.debug(`Creating websocket ${this._number} to \u0027${this.url}\u0027 session \u0027${this.id}\u0027`)}async connect(){if(this.closed_permanently)throw new Error(\"Cannot connect() a closed ClientConnection\");if(null!\u003dthis.socket)throw new Error(\"Already connected\");this._current_handler\u003dnull,this._pending_replies.clear(),this._pending_messages\u003d[];try{let e\u003d`${this.url}`;return null!\u003dthis.args_string\u0026\u0026this.args_string.length\u003e0\u0026\u0026(e+\u003d`?${this.args_string}`),this.socket\u003dnew WebSocket(e,[\"bokeh\",this.token]),new Promise(((e,s)\u003d\u003e{this.socket.binaryType\u003d\"arraybuffer\",this.socket.onopen\u003d()\u003d\u003ethis._on_open(e,s),this.socket.onmessage\u003de\u003d\u003ethis._on_message(e),this.socket.onclose\u003de\u003d\u003ethis._on_close(e,s),this.socket.onerror\u003d()\u003d\u003ethis._on_error(s)}))}catch(e){throw r.logger.error(`websocket creation failed to url: ${this.url}`),r.logger.error(` - ${e}`),e}}close(){this.closed_permanently||(r.logger.debug(`Permanently closing websocket connection ${this._number}`),this.closed_permanently\u003d!0,null!\u003dthis.socket\u0026\u0026this.socket.close(1e3,`close method called on ClientConnection ${this._number}`),this.session._connection_closed())}_schedule_reconnect(e){setTimeout((()\u003d\u003e{this.closed_permanently||r.logger.info(`Websocket connection ${this._number} disconnected, will not attempt to reconnect`)}),e)}send(e){if(null\u003d\u003dthis.socket)throw new Error(`not connected so cannot send ${e}`);e.send(this.socket)}async send_with_reply(e){const s\u003dawait new Promise(((s,n)\u003d\u003e{this._pending_replies.set(e.msgid(),{resolve:s,reject:n}),this.send(e)}));if(\"ERROR\"\u003d\u003d\u003ds.msgtype())throw new Error(`Error reply ${s.content.text}`);return s}async _pull_doc_json(){const e\u003dc.Message.create(\"PULL-DOC-REQ\",{}),s\u003dawait this.send_with_reply(e);if(!(\"doc\"in s.content))throw new Error(\"No \u0027doc\u0027 field in PULL-DOC-REPLY\");return s.content.doc}async _repull_session_doc(e,s){var n;r.logger.debug(this.session?\"Repulling session\":\"Pulling session for first time\");try{const n\u003dawait this._pull_doc_json();if(null\u003d\u003dthis.session)if(this.closed_permanently)r.logger.debug(\"Got new document after connection was already closed\"),s(new Error(\"The connection has been closed\"));else{const s\u003di.Document.from_json(n),t\u003di.Document._compute_patch_since_json(n,s);if(t.events.length\u003e0){r.logger.debug(`Sending ${t.events.length} changes from model construction back to server`);const e\u003dc.Message.create(\"PATCH-DOC\",{},t);this.send(e)}this.session\u003dnew _.ClientSession(this,s,this.id);for(const e of this._pending_messages)this.session.handle(e);this._pending_messages\u003d[],r.logger.debug(\"Created a new session from new pulled doc\"),e(this.session)}else this.session.document.replace_with_json(n),r.logger.debug(\"Updated existing session with new pulled doc\")}catch(e){null\u003d\u003d\u003d(n\u003dconsole.trace)||void 0\u003d\u003d\u003dn||n.call(console,e),r.logger.error(`Failed to repull session ${e}`),s(e instanceof Error?e:`${e}`)}}_on_open(e,s){r.logger.info(`Websocket connection ${this._number} is now open`),this._current_handler\u003dn\u003d\u003e{this._awaiting_ack_handler(n,e,s)}}_on_message(e){null\u003d\u003dthis._current_handler\u0026\u0026r.logger.error(\"Got a message with no current handler set\");try{this._receiver.consume(e.data)}catch(e){this._close_bad_protocol(`${e}`)}const s\u003dthis._receiver.message;if(null!\u003ds){const e\u003ds.problem();null!\u003de\u0026\u0026this._close_bad_protocol(e),this._current_handler(s)}}_on_close(e,s){r.logger.info(`Lost websocket ${this._number} connection, ${e.code} (${e.reason})`),this.socket\u003dnull,this._pending_replies.forEach((e\u003d\u003ee.reject(\"Disconnected\"))),this._pending_replies.clear(),this.closed_permanently||this._schedule_reconnect(2e3),s(new Error(`Lost websocket connection, ${e.code} (${e.reason})`))}_on_error(e){r.logger.debug(`Websocket error on socket ${this._number}`);const s\u003d\"Could not open websocket\";r.logger.error(`Failed to connect to Bokeh server: ${s}`),e(new Error(s))}_close_bad_protocol(e){r.logger.error(`Closing connection: ${e}`),null!\u003dthis.socket\u0026\u0026this.socket.close(1002,e)}_awaiting_ack_handler(e,s,n){\"ACK\"\u003d\u003d\u003de.msgtype()?(this._current_handler\u003de\u003d\u003ethis._steady_state_handler(e),this._repull_session_doc(s,n)):this._close_bad_protocol(\"First message was not an ACK\")}_steady_state_handler(e){const s\u003de.reqid(),n\u003dthis._pending_replies.get(s);n?(this._pending_replies.delete(s),n.resolve(e)):this.session?this.session.handle(e):\"PATCH-DOC\"!\u003de.msgtype()\u0026\u0026this._pending_messages.push(e)}}n.ClientConnection\u003dd,d.__name__\u003d\"ClientConnection\",n.pull_session\u003dfunction(e,s,n){return new d(e,s,n).connect()}},\n      function _(e,s,t,r,n){r();const i\u003de(34);class a{constructor(e,s,t){this.header\u003de,this.metadata\u003ds,this.content\u003dt,this.buffers\u003dnew Map}static assemble(e,s,t){const r\u003dJSON.parse(e),n\u003dJSON.parse(s),i\u003dJSON.parse(t);return new a(r,n,i)}assemble_buffer(e,s){const t\u003dnull!\u003dthis.header.num_buffers?this.header.num_buffers:0;if(t\u003c\u003dthis.buffers.size)throw new Error(`too many buffers received, expecting ${t}`);const{id:r}\u003dJSON.parse(e);this.buffers.set(r,s)}static create(e,s,t\u003d{}){const r\u003da.create_header(e);return new a(r,s,t)}static create_header(e){return{msgid:i.uniqueId(),msgtype:e}}complete(){return null!\u003dthis.header\u0026\u0026null!\u003dthis.metadata\u0026\u0026null!\u003dthis.content\u0026\u0026(null\u003d\u003dthis.header.num_buffers||this.buffers.size\u003d\u003dthis.header.num_buffers)}send(e){if((null!\u003dthis.header.num_buffers?this.header.num_buffers:0)\u003e0)throw new Error(\"BokehJS only supports receiving buffers, not sending\");const s\u003dJSON.stringify(this.header),t\u003dJSON.stringify(this.metadata),r\u003dJSON.stringify(this.content);e.send(s),e.send(t),e.send(r)}msgid(){return this.header.msgid}msgtype(){return this.header.msgtype}reqid(){return this.header.reqid}problem(){return\"msgid\"in this.header?\"msgtype\"in this.header?null:\"No msgtype in header\":\"No msgid in header\"}}t.Message\u003da,a.__name__\u003d\"Message\"},\n      function _(e,t,s,_,r){_();const i\u003de(399),h\u003de(8);class a{constructor(){this.message\u003dnull,this._partial\u003dnull,this._fragments\u003d[],this._buf_header\u003dnull,this._current_consumer\u003dthis._HEADER}consume(e){this._current_consumer(e)}_HEADER(e){this._assume_text(e),this.message\u003dnull,this._partial\u003dnull,this._fragments\u003d[e],this._buf_header\u003dnull,this._current_consumer\u003dthis._METADATA}_METADATA(e){this._assume_text(e),this._fragments.push(e),this._current_consumer\u003dthis._CONTENT}_CONTENT(e){this._assume_text(e),this._fragments.push(e);const[t,s,_]\u003dthis._fragments.slice(0,3);this._partial\u003di.Message.assemble(t,s,_),this._check_complete()}_BUFFER_HEADER(e){this._assume_text(e),this._buf_header\u003de,this._current_consumer\u003dthis._BUFFER_PAYLOAD}_BUFFER_PAYLOAD(e){this._assume_binary(e),this._partial.assemble_buffer(this._buf_header,e),this._check_complete()}_assume_text(e){if(!h.isString(e))throw new Error(\"Expected text fragment but received binary fragment\")}_assume_binary(e){if(!(e instanceof ArrayBuffer))throw new Error(\"Expected binary fragment but received text fragment\")}_check_complete(){this._partial.complete()?(this.message\u003dthis._partial,this._current_consumer\u003dthis._HEADER):this._current_consumer\u003dthis._BUFFER_HEADER}}s.Receiver\u003da,a.__name__\u003d\"Receiver\"},\n      function _(e,t,n,s,o){s();const c\u003de(5),i\u003de(399),_\u003de(19);class r{constructor(e,t,n){this._connection\u003de,this.document\u003dt,this.id\u003dn,this._document_listener\u003de\u003d\u003e{this._document_changed(e)},this.document.on_change(this._document_listener,!0)}handle(e){const t\u003de.msgtype();\"PATCH-DOC\"\u003d\u003d\u003dt?this._handle_patch(e):\"OK\"\u003d\u003d\u003dt?this._handle_ok(e):\"ERROR\"\u003d\u003d\u003dt?this._handle_error(e):_.logger.debug(`Doing nothing with message ${e.msgtype()}`)}close(){this._connection.close()}_connection_closed(){this.document.remove_on_change(this._document_listener)}async request_server_info(){const e\u003di.Message.create(\"SERVER-INFO-REQ\",{});return(await this._connection.send_with_reply(e)).content}async force_roundtrip(){await this.request_server_info()}_document_changed(e){if(e.setter_id\u003d\u003d\u003dthis.id)return;const t\u003de instanceof c.DocumentEventBatch?e.events:[e],n\u003dthis.document.create_json_patch(t),s\u003di.Message.create(\"PATCH-DOC\",{},n);this._connection.send(s)}_handle_patch(e){this.document.apply_json_patch(e.content,e.buffers,this.id)}_handle_ok(e){_.logger.trace(`Unhandled OK reply to ${e.reqid()}`)}_handle_error(e){_.logger.error(`Unhandled ERROR reply to ${e.reqid()}: ${e.content.text}`)}}n.ClientSession\u003dr,r.__name__\u003d\"ClientSession\"},\n      function _(e,o,t,n,r){n();const s\u003de(1),l\u003de(5),i\u003de(400),a\u003de(19),c\u003de(43),g\u003de(13),f\u003de(395),u\u003de(396),m\u003ds.__importDefault(e(44)),p\u003ds.__importDefault(e(253)),d\u003ds.__importDefault(e(403));function _(e,o){o.buffers.length\u003e0?e.consume(o.buffers[0].buffer):e.consume(o.content.data);const t\u003de.message;null!\u003dt\u0026\u0026this.apply_json_patch(t.content,t.buffers)}function b(e,o){if(\"undefined\"!\u003dtypeof Jupyter\u0026\u0026null!\u003dJupyter.notebook.kernel){a.logger.info(`Registering Jupyter comms for target ${e}`);const t\u003dJupyter.notebook.kernel.comm_manager;try{t.register_target(e,(t\u003d\u003e{a.logger.info(`Registering Jupyter comms for target ${e}`);const n\u003dnew i.Receiver;t.on_msg(_.bind(o,n))}))}catch(e){a.logger.warn(`Jupyter comms failed to register. push_notebook() will not function. (exception reported: ${e})`)}}else if(o.roots()[0].id in t.kernels){a.logger.info(`Registering JupyterLab comms for target ${e}`);const n\u003dt.kernels[o.roots()[0].id];try{n.registerCommTarget(e,(t\u003d\u003e{a.logger.info(`Registering JupyterLab comms for target ${e}`);const n\u003dnew i.Receiver;t.onMsg\u003d_.bind(o,n)}))}catch(e){a.logger.warn(`Jupyter comms failed to register. push_notebook() will not function. (exception reported: ${e})`)}}else if(\"undefined\"!\u003dtypeof google\u0026\u0026null!\u003dgoogle.colab.kernel){a.logger.info(`Registering Google Colab comms for target ${e}`);const t\u003dgoogle.colab.kernel.comms;try{t.registerTarget(e,(async t\u003d\u003e{var n,r,l;a.logger.info(`Registering Google Colab comms for target ${e}`);const c\u003dnew i.Receiver;try{for(var g,f\u003ds.__asyncValues(t.messages);!(g\u003dawait f.next()).done;){const e\u003dg.value,t\u003d{data:e.data},n\u003d[];for(const o of null!\u003d\u003d(l\u003de.buffers)\u0026\u0026void 0!\u003d\u003dl?l:[])n.push(new DataView(o));const r\u003d{content:t,buffers:n};_.bind(o)(c,r)}}catch(e){n\u003d{error:e}}finally{try{g\u0026\u0026!g.done\u0026\u0026(r\u003df.return)\u0026\u0026await r.call(f)}finally{if(n)throw n.error}}}))}catch(e){a.logger.warn(`Google Colab comms failed to register. push_notebook() will not function. (exception reported: ${e})`)}}else console.warn(\"Jupyter notebooks comms not available. push_notebook() will not function. If running JupyterLab ensure the latest @bokeh/jupyter_bokeh extension is installed. In an exported notebook this warning is expected.\")}c.stylesheet.append(m.default),c.stylesheet.append(p.default),c.stylesheet.append(d.default),t.kernels\u003d{},t.embed_items_notebook\u003dfunction(e,o){if(1!\u003dg.size(e))throw new Error(\"embed_items_notebook expects exactly one document in docs_json\");const t\u003dl.Document.from_json(g.values(e)[0]);for(const e of o){null!\u003de.notebook_comms_target\u0026\u0026b(e.notebook_comms_target,t);const o\u003du._resolve_element(e),n\u003du._resolve_root_elements(e);f.add_document_standalone(t,o,n)}}},\n      function _(t,o,r,e,d){e(),r.root\u003d\"bk-root\",r.tooltip\u003d\"bk-tooltip\",r.default\u003d\".rendered_html .bk-root .bk-tooltip table,.rendered_html .bk-root .bk-tooltip tr,.rendered_html .bk-root .bk-tooltip th,.rendered_html .bk-root .bk-tooltip td{border:none;padding:1px;}\"},\n      function _(t,_,o,r,n){r();const a\u003dt(1);a.__exportStar(t(399),o),a.__exportStar(t(400),o)},\n      function _(e,t,n,s,o){function l(){const e\u003ddocument.getElementsByTagName(\"body\")[0],t\u003ddocument.getElementsByClassName(\"bokeh-test-div\");1\u003d\u003dt.length\u0026\u0026(e.removeChild(t[0]),delete t[0]);const n\u003ddocument.createElement(\"div\");n.classList.add(\"bokeh-test-div\"),n.style.display\u003d\"none\",e.insertBefore(n,e.firstChild)}s(),n.results\u003d{},n.init\u003dfunction(){l()},n.record0\u003dfunction(e,t){n.results[e]\u003dt},n.record\u003dfunction(e,t){n.results[e]\u003dt,l()},n.count\u003dfunction(e){null\u003d\u003dn.results[e]\u0026\u0026(n.results[e]\u003d0),n.results[e]+\u003d1,l()}},\n      function _(e,t,o,n,l){n(),o.safely\u003dfunction(e,t\u003d!1){try{return e()}catch(e){if(function(e){const t\u003ddocument.createElement(\"div\");t.style.backgroundColor\u003d\"#f2dede\",t.style.border\u003d\"1px solid #a94442\",t.style.borderRadius\u003d\"4px\",t.style.display\u003d\"inline-block\",t.style.fontFamily\u003d\"sans-serif\",t.style.marginTop\u003d\"5px\",t.style.minWidth\u003d\"200px\",t.style.padding\u003d\"5px 5px 5px 10px\",t.classList.add(\"bokeh-error-box-into-flames\");const o\u003ddocument.createElement(\"span\");o.style.backgroundColor\u003d\"#a94442\",o.style.borderRadius\u003d\"0px 4px 0px 0px\",o.style.color\u003d\"white\",o.style.cursor\u003d\"pointer\",o.style.cssFloat\u003d\"right\",o.style.fontSize\u003d\"0.8em\",o.style.margin\u003d\"-6px -6px 0px 0px\",o.style.padding\u003d\"2px 5px 4px 5px\",o.title\u003d\"close\",o.setAttribute(\"aria-label\",\"close\"),o.appendChild(document.createTextNode(\"x\")),o.addEventListener(\"click\",(()\u003d\u003es.removeChild(t)));const n\u003ddocument.createElement(\"h3\");n.style.color\u003d\"#a94442\",n.style.margin\u003d\"8px 0px 0px 0px\",n.style.padding\u003d\"0px\",n.appendChild(document.createTextNode(\"Bokeh Error\"));const l\u003ddocument.createElement(\"pre\");l.style.whiteSpace\u003d\"unset\",l.style.overflowX\u003d\"auto\",l.appendChild(document.createTextNode(e)),t.appendChild(o),t.appendChild(n),t.appendChild(l);const s\u003ddocument.getElementsByTagName(\"body\")[0];s.insertBefore(t,s.firstChild)}(e instanceof Error\u0026\u0026e.stack?e.stack:`${e}`),t)return;throw e}}},\n      ], 0, {\"main\":0,\"tslib\":1,\"index\":2,\"version\":3,\"embed/index\":4,\"document/index\":5,\"document/document\":6,\"base\":7,\"core/util/types\":8,\"core/util/array\":9,\"core/util/math\":10,\"core/util/assert\":11,\"core/util/arrayable\":12,\"core/util/object\":13,\"core/has_props\":14,\"core/signaling\":15,\"core/util/defer\":16,\"core/util/refs\":17,\"core/properties\":18,\"core/logging\":19,\"core/enums\":20,\"core/kinds\":21,\"core/util/color\":22,\"core/util/svg_colors\":23,\"core/types\":24,\"core/util/bitset\":25,\"core/util/eq\":26,\"core/util/platform\":27,\"core/settings\":28,\"core/util/ndarray\":29,\"core/serializer\":30,\"core/util/serialization\":31,\"core/util/buffer\":32,\"core/uniforms\":33,\"core/util/string\":34,\"document/events\":35,\"core/util/pretty\":36,\"core/util/cloneable\":37,\"models/index\":38,\"models/annotations/index\":39,\"models/annotations/annotation\":40,\"models/renderers/renderer\":41,\"core/view\":42,\"core/dom\":43,\"styles/root.css\":44,\"core/visuals/index\":45,\"core/visuals/line\":46,\"core/visuals/visual\":47,\"core/property_mixins\":48,\"core/visuals/fill\":49,\"core/visuals/text\":50,\"core/visuals/hatch\":51,\"core/visuals/patterns\":52,\"model\":53,\"models/canvas/coordinates\":54,\"models/annotations/arrow\":55,\"models/annotations/data_annotation\":56,\"models/sources/columnar_data_source\":57,\"models/sources/data_source\":58,\"models/selections/selection\":59,\"core/selection_manager\":60,\"models/renderers/glyph_renderer\":61,\"models/renderers/data_renderer\":62,\"models/glyphs/line\":63,\"models/glyphs/xy_glyph\":64,\"core/util/projections\":65,\"models/glyphs/glyph\":98,\"core/util/bbox\":99,\"core/util/ragged_array\":100,\"core/util/spatial\":101,\"models/ranges/factor_range\":104,\"models/ranges/range\":105,\"models/glyphs/utils\":106,\"core/hittest\":107,\"models/glyphs/webgl/line\":108,\"models/glyphs/webgl/utils/index\":109,\"models/glyphs/webgl/utils/program\":110,\"models/glyphs/webgl/utils/buffer\":111,\"models/glyphs/webgl/utils/texture\":112,\"models/glyphs/webgl/base\":113,\"models/glyphs/webgl/line.vert\":114,\"models/glyphs/webgl/line.frag\":115,\"models/glyphs/patch\":116,\"models/glyphs/harea\":117,\"models/glyphs/area\":118,\"models/glyphs/varea\":119,\"models/sources/cds_view\":120,\"models/filters/filter\":121,\"core/build_views\":122,\"models/renderers/graph_renderer\":123,\"models/expressions/expression\":124,\"models/graphs/layout_provider\":125,\"models/graphs/graph_hit_test_policy\":126,\"models/glyphs/multi_line\":127,\"models/glyphs/patches\":128,\"models/selections/interaction_policy\":129,\"models/sources/column_data_source\":130,\"core/util/typed_array\":131,\"core/util/set\":132,\"models/annotations/arrow_head\":133,\"models/annotations/band\":134,\"models/annotations/upper_lower\":135,\"models/annotations/box_annotation\":136,\"models/annotations/color_bar\":137,\"models/annotations/title\":138,\"models/annotations/text_annotation\":139,\"core/layout/side_panel\":140,\"core/layout/types\":141,\"core/layout/layoutable\":142,\"core/util/text\":143,\"models/canvas/cartesian_frame\":144,\"models/scales/categorical_scale\":145,\"models/scales/scale\":146,\"models/transforms/index\":147,\"models/transforms/customjs_transform\":148,\"models/transforms/transform\":149,\"models/transforms/dodge\":150,\"models/transforms/range_transform\":151,\"models/transforms/interpolator\":152,\"models/transforms/jitter\":153,\"models/transforms/linear_interpolator\":154,\"models/transforms/step_interpolator\":155,\"models/ranges/range1d\":156,\"models/scales/log_scale\":157,\"models/scales/continuous_scale\":158,\"models/ranges/data_range1d\":159,\"models/ranges/data_range\":160,\"models/util\":161,\"models/axes/index\":162,\"models/axes/axis\":163,\"models/renderers/guide_renderer\":164,\"models/tickers/ticker\":165,\"models/formatters/tick_formatter\":166,\"core/graphics\":167,\"core/util/affine\":168,\"models/policies/labeling\":169,\"models/axes/categorical_axis\":170,\"models/tickers/categorical_ticker\":171,\"models/formatters/categorical_tick_formatter\":172,\"models/axes/continuous_axis\":173,\"models/axes/datetime_axis\":174,\"models/axes/linear_axis\":175,\"models/formatters/basic_tick_formatter\":176,\"models/tickers/basic_ticker\":177,\"models/tickers/adaptive_ticker\":178,\"models/tickers/continuous_ticker\":179,\"models/formatters/datetime_tick_formatter\":180,\"core/util/templating\":182,\"models/tickers/datetime_ticker\":185,\"models/tickers/composite_ticker\":186,\"models/tickers/days_ticker\":187,\"models/tickers/single_interval_ticker\":188,\"models/tickers/util\":189,\"models/tickers/months_ticker\":190,\"models/tickers/years_ticker\":191,\"models/axes/log_axis\":192,\"models/formatters/log_tick_formatter\":193,\"models/tickers/log_ticker\":194,\"models/axes/mercator_axis\":195,\"models/formatters/mercator_tick_formatter\":196,\"models/tickers/mercator_ticker\":197,\"models/tickers/index\":198,\"models/tickers/fixed_ticker\":199,\"models/tickers/binned_ticker\":200,\"models/mappers/scanning_color_mapper\":201,\"models/mappers/continuous_color_mapper\":202,\"models/mappers/color_mapper\":203,\"models/mappers/mapper\":204,\"models/formatters/index\":205,\"models/formatters/func_tick_formatter\":206,\"models/formatters/numeral_tick_formatter\":207,\"models/formatters/printf_tick_formatter\":208,\"models/mappers/index\":209,\"models/mappers/categorical_color_mapper\":210,\"models/mappers/categorical_mapper\":211,\"models/mappers/categorical_marker_mapper\":212,\"models/mappers/categorical_pattern_mapper\":213,\"models/mappers/linear_color_mapper\":214,\"models/mappers/log_color_mapper\":215,\"models/mappers/eqhist_color_mapper\":216,\"models/scales/index\":217,\"models/scales/linear_scale\":218,\"models/scales/linear_interpolation_scale\":219,\"models/ranges/index\":220,\"core/layout/index\":221,\"core/layout/alignments\":222,\"core/layout/grid\":223,\"core/layout/html\":224,\"core/layout/border\":225,\"models/annotations/label\":226,\"models/annotations/label_set\":227,\"models/annotations/legend\":228,\"models/annotations/legend_item\":229,\"core/vectorization\":230,\"models/annotations/poly_annotation\":231,\"models/annotations/slope\":232,\"models/annotations/span\":233,\"models/annotations/toolbar_panel\":234,\"models/tools/toolbar\":235,\"models/tools/tool\":236,\"models/tools/gestures/gesture_tool\":237,\"models/tools/button_tool\":238,\"core/dom_view\":240,\"styles/toolbar.css\":241,\"styles/icons.css\":242,\"styles/menus.css\":243,\"core/util/menus\":244,\"core/util/iterator\":245,\"models/tools/on_off_button\":246,\"models/tools/inspectors/inspect_tool\":247,\"models/tools/toolbar_base\":248,\"core/util/canvas\":249,\"core/util/svg\":250,\"models/tools/actions/action_tool\":251,\"models/tools/actions/help_tool\":252,\"styles/logo.css\":253,\"models/annotations/tooltip\":254,\"styles/tooltips.css\":255,\"models/annotations/whisker\":256,\"models/callbacks/index\":257,\"models/callbacks/customjs\":258,\"models/callbacks/callback\":259,\"models/callbacks/open_url\":260,\"models/canvas/index\":261,\"models/canvas/canvas\":262,\"core/ui_events\":263,\"core/bokeh_events\":264,\"core/util/wheel\":265,\"models/expressions/index\":266,\"models/expressions/customjs_expr\":267,\"models/expressions/stack\":268,\"models/expressions/cumsum\":269,\"models/expressions/minimum\":270,\"models/expressions/maximum\":271,\"models/filters/index\":272,\"models/filters/boolean_filter\":273,\"models/filters/customjs_filter\":274,\"models/filters/group_filter\":275,\"models/filters/index_filter\":276,\"models/glyphs/index\":277,\"models/glyphs/annular_wedge\":278,\"models/glyphs/annulus\":279,\"models/glyphs/arc\":280,\"models/glyphs/bezier\":281,\"models/glyphs/circle\":282,\"models/glyphs/webgl/markers\":283,\"models/glyphs/webgl/markers.vert\":284,\"models/glyphs/webgl/markers.frag\":285,\"models/glyphs/ellipse\":286,\"models/glyphs/ellipse_oval\":287,\"models/glyphs/center_rotatable\":288,\"models/glyphs/hbar\":289,\"models/glyphs/box\":290,\"models/glyphs/hex_tile\":291,\"models/glyphs/image\":292,\"models/glyphs/image_base\":293,\"models/glyphs/image_rgba\":294,\"models/glyphs/image_url\":295,\"core/util/image\":296,\"models/glyphs/multi_polygons\":297,\"models/glyphs/oval\":298,\"models/glyphs/quad\":299,\"models/glyphs/quadratic\":300,\"models/glyphs/ray\":301,\"models/glyphs/rect\":302,\"models/glyphs/scatter\":303,\"models/glyphs/marker\":304,\"models/glyphs/defs\":305,\"models/glyphs/segment\":306,\"models/glyphs/spline\":307,\"core/util/interpolation\":308,\"models/glyphs/step\":309,\"models/glyphs/text\":310,\"models/glyphs/vbar\":311,\"models/glyphs/wedge\":312,\"models/graphs/index\":313,\"models/graphs/static_layout_provider\":314,\"models/grids/index\":315,\"models/grids/grid\":316,\"models/layouts/index\":317,\"models/layouts/box\":318,\"models/layouts/layout_dom\":319,\"models/layouts/column\":320,\"models/layouts/grid_box\":321,\"models/layouts/html_box\":322,\"models/layouts/panel\":323,\"models/layouts/row\":324,\"models/layouts/spacer\":325,\"models/layouts/tabs\":326,\"styles/tabs.css\":327,\"styles/buttons.css\":328,\"models/layouts/widget_box\":329,\"models/plots/index\":330,\"models/plots/gmap_plot\":331,\"models/plots/plot\":332,\"models/plots/plot_canvas\":333,\"core/util/throttle\":334,\"models/plots/range_manager\":335,\"models/plots/state_manager\":336,\"models/plots/gmap_plot_canvas\":337,\"models/policies/index\":338,\"models/renderers/index\":339,\"models/selections/index\":340,\"models/sources/index\":341,\"models/sources/server_sent_data_source\":342,\"models/sources/web_data_source\":343,\"models/sources/ajax_data_source\":344,\"models/sources/geojson_data_source\":345,\"models/tiles/index\":346,\"models/tiles/bbox_tile_source\":347,\"models/tiles/mercator_tile_source\":348,\"models/tiles/tile_source\":349,\"models/tiles/tile_utils\":350,\"models/tiles/quadkey_tile_source\":351,\"models/tiles/tile_renderer\":352,\"models/tiles/wmts_tile_source\":353,\"styles/tiles.css\":354,\"models/tiles/tms_tile_source\":355,\"models/textures/index\":356,\"models/textures/canvas_texture\":357,\"models/textures/texture\":358,\"models/textures/image_url_texture\":359,\"models/tools/index\":360,\"models/tools/actions/custom_action\":361,\"models/tools/actions/redo_tool\":362,\"models/tools/actions/reset_tool\":363,\"models/tools/actions/save_tool\":364,\"models/tools/actions/undo_tool\":365,\"models/tools/actions/zoom_in_tool\":366,\"models/tools/actions/zoom_base_tool\":367,\"core/util/zoom\":368,\"models/tools/actions/zoom_out_tool\":369,\"models/tools/edit/edit_tool\":370,\"models/tools/edit/box_edit_tool\":371,\"models/tools/edit/freehand_draw_tool\":372,\"models/tools/edit/point_draw_tool\":373,\"models/tools/edit/poly_draw_tool\":374,\"models/tools/edit/poly_tool\":375,\"models/tools/edit/poly_edit_tool\":376,\"models/tools/gestures/box_select_tool\":377,\"models/tools/gestures/select_tool\":378,\"models/tools/gestures/box_zoom_tool\":379,\"models/tools/gestures/lasso_select_tool\":380,\"models/tools/gestures/poly_select_tool\":381,\"models/tools/edit/line_edit_tool\":382,\"models/tools/edit/line_tool\":383,\"models/tools/gestures/pan_tool\":384,\"models/tools/gestures/range_tool\":385,\"models/tools/gestures/tap_tool\":386,\"models/tools/gestures/wheel_pan_tool\":387,\"models/tools/gestures/wheel_zoom_tool\":388,\"models/tools/inspectors/crosshair_tool\":389,\"models/tools/inspectors/customjs_hover\":390,\"models/tools/inspectors/hover_tool\":391,\"models/tools/tool_proxy\":392,\"models/tools/toolbar_box\":393,\"document/defs\":394,\"embed/standalone\":395,\"embed/dom\":396,\"embed/server\":397,\"client/connection\":398,\"protocol/message\":399,\"protocol/receiver\":400,\"client/session\":401,\"embed/notebook\":402,\"styles/notebook.css\":403,\"protocol/index\":404,\"testing\":405,\"safely\":406}, {});});\n\n      /* END bokeh.min.js */\n    },\n    \n    function(Bokeh) {\n      /* BEGIN bokeh-widgets.min.js */\n      /*!\n       * Copyright (c) 2012 - 2021, Anaconda, Inc., and Bokeh Contributors\n       * All rights reserved.\n       * \n       * Redistribution and use in source and binary forms, with or without modification,\n       * are permitted provided that the following conditions are met:\n       * \n       * Redistributions of source code must retain the above copyright notice,\n       * this list of conditions and the following disclaimer.\n       * \n       * Redistributions in binary form must reproduce the above copyright notice,\n       * this list of conditions and the following disclaimer in the documentation\n       * and/or other materials provided with the distribution.\n       * \n       * Neither the name of Anaconda nor the names of any contributors\n       * may be used to endorse or promote products derived from this software\n       * without specific prior written permission.\n       * \n       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n       * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n       * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n       * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n       * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n       * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n       * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n       * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n       * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n       * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n       * THE POSSIBILITY OF SUCH DAMAGE.\n       */\n      (function(root, factory) {\n        factory(root[\"Bokeh\"], \"2.3.3\");\n      })(this, function(Bokeh, version) {\n        var define;\n        return (function(modules, entry, aliases, externals) {\n          const bokeh \u003d typeof Bokeh !\u003d\u003d \"undefined\" \u0026\u0026 (version !\u003d null ? Bokeh[version] : Bokeh);\n          if (bokeh !\u003d null) {\n            return bokeh.register_plugin(modules, entry, aliases);\n          } else {\n            throw new Error(\"Cannot find Bokeh \" + version + \". You have to load it prior to loading plugins.\");\n          }\n        })\n      ({\n      417: function _(t,e,i,o,r){o();const s\u003dt(1).__importStar(t(418));i.Widgets\u003ds;t(7).register_models(s)},\n      418: function _(t,e,o,r,u){r(),u(\"AbstractButton\",t(419).AbstractButton),u(\"AbstractIcon\",t(422).AbstractIcon),u(\"AutocompleteInput\",t(423).AutocompleteInput),u(\"Button\",t(428).Button),u(\"CheckboxButtonGroup\",t(429).CheckboxButtonGroup),u(\"CheckboxGroup\",t(431).CheckboxGroup),u(\"ColorPicker\",t(433).ColorPicker),u(\"DatePicker\",t(434).DatePicker),u(\"DateRangeSlider\",t(437).DateRangeSlider),u(\"DateSlider\",t(442).DateSlider),u(\"Div\",t(443).Div),u(\"Dropdown\",t(446).Dropdown),u(\"FileInput\",t(447).FileInput),u(\"InputWidget\",t(426).InputWidget),u(\"Markup\",t(444).Markup),u(\"MultiSelect\",t(448).MultiSelect),u(\"Paragraph\",t(449).Paragraph),u(\"PasswordInput\",t(450).PasswordInput),u(\"MultiChoice\",t(451).MultiChoice),u(\"NumericInput\",t(454).NumericInput),u(\"PreText\",t(455).PreText),u(\"RadioButtonGroup\",t(456).RadioButtonGroup),u(\"RadioGroup\",t(457).RadioGroup),u(\"RangeSlider\",t(458).RangeSlider),u(\"Select\",t(459).Select),u(\"Slider\",t(460).Slider),u(\"Spinner\",t(461).Spinner),u(\"TextInput\",t(424).TextInput),u(\"TextAreaInput\",t(462).TextAreaInput),u(\"Toggle\",t(463).Toggle),u(\"Widget\",t(488).Widget)},\n      419: function _(t,e,n,i,s){i();const l\u003dt(1),o\u003dt(20),r\u003dt(43),c\u003dt(122),u\u003dt(420),_\u003dt(422),a\u003dl.__importStar(t(328)),b\u003da;class d extends u.ControlView{*controls(){yield this.button_el}async lazy_initialize(){await super.lazy_initialize();const{icon:t}\u003dthis.model;null!\u003dt\u0026\u0026(this.icon_view\u003dawait c.build_view(t,{parent:this}))}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.render()))}remove(){null!\u003dthis.icon_view\u0026\u0026this.icon_view.remove(),super.remove()}styles(){return[...super.styles(),a.default]}_render_button(...t){return r.button({type:\"button\",disabled:this.model.disabled,class:[b.btn,b[`btn_${this.model.button_type}`]]},...t)}render(){super.render(),this.button_el\u003dthis._render_button(this.model.label),this.button_el.addEventListener(\"click\",(()\u003d\u003ethis.click())),null!\u003dthis.icon_view\u0026\u0026(\"\"!\u003dthis.model.label?r.prepend(this.button_el,this.icon_view.el,r.nbsp()):r.prepend(this.button_el,this.icon_view.el),this.icon_view.render()),this.group_el\u003dr.div({class:b.btn_group},this.button_el),this.el.appendChild(this.group_el)}click(){}}n.AbstractButtonView\u003dd,d.__name__\u003d\"AbstractButtonView\";class h extends u.Control{constructor(t){super(t)}static init_AbstractButton(){this.define((({String:t,Ref:e,Nullable:n})\u003d\u003e({label:[t,\"Button\"],icon:[n(e(_.AbstractIcon)),null],button_type:[o.ButtonType,\"default\"]})))}}n.AbstractButton\u003dh,h.__name__\u003d\"AbstractButton\",h.init_AbstractButton()},\n      420: function _(t,e,o,s,n){s();const i\u003dt(488),l\u003dt(43);class c extends i.WidgetView{connect_signals(){super.connect_signals();const t\u003dthis.model.properties;this.on_change(t.disabled,(()\u003d\u003e{for(const t of this.controls())l.toggle_attribute(t,\"disabled\",this.model.disabled)}))}}o.ControlView\u003dc,c.__name__\u003d\"ControlView\";class r extends i.Widget{constructor(t){super(t)}}o.Control\u003dr,r.__name__\u003d\"Control\"},\n      488: function _(i,t,e,o,n){o();const s\u003di(322),r\u003di(20);class d extends s.HTMLBoxView{_width_policy(){return\"horizontal\"\u003d\u003dthis.model.orientation?super._width_policy():\"fixed\"}_height_policy(){return\"horizontal\"\u003d\u003dthis.model.orientation?\"fixed\":super._height_policy()}box_sizing(){const i\u003dsuper.box_sizing();return\"horizontal\"\u003d\u003dthis.model.orientation?null\u003d\u003di.width\u0026\u0026(i.width\u003dthis.model.default_size):null\u003d\u003di.height\u0026\u0026(i.height\u003dthis.model.default_size),i}}e.WidgetView\u003dd,d.__name__\u003d\"WidgetView\";class _ extends s.HTMLBox{constructor(i){super(i)}static init_Widget(){this.define((({Number:i})\u003d\u003e({orientation:[r.Orientation,\"horizontal\"],default_size:[i,300]}))),this.override({margin:[5,5,5,5]})}}e.Widget\u003d_,_.__name__\u003d\"Widget\",_.init_Widget()},\n      422: function _(c,t,s,n,e){n();const o\u003dc(53),_\u003dc(240);class a extends _.DOMView{}s.AbstractIconView\u003da,a.__name__\u003d\"AbstractIconView\";class r extends o.Model{constructor(c){super(c)}}s.AbstractIcon\u003dr,r.__name__\u003d\"AbstractIcon\"},\n      423: function _(e,t,n,i,s){i();const h\u003de(1),o\u003de(424),_\u003de(43),u\u003de(10),r\u003dh.__importStar(e(243)),c\u003dr;class l extends o.TextInputView{constructor(){super(...arguments),this._open\u003d!1,this._last_value\u003d\"\",this._hover_index\u003d0}styles(){return[...super.styles(),r.default]}render(){super.render(),this.input_el.addEventListener(\"keydown\",(e\u003d\u003ethis._keydown(e))),this.input_el.addEventListener(\"keyup\",(e\u003d\u003ethis._keyup(e))),this.menu\u003d_.div({class:[c.menu,c.below]}),this.menu.addEventListener(\"click\",(e\u003d\u003ethis._menu_click(e))),this.menu.addEventListener(\"mouseover\",(e\u003d\u003ethis._menu_hover(e))),this.el.appendChild(this.menu),_.undisplay(this.menu)}change_input(){this._open\u0026\u0026this.menu.children.length\u003e0\u0026\u0026(this.model.value\u003dthis.menu.children[this._hover_index].textContent,this.input_el.focus(),this._hide_menu()),this.model.restrict||super.change_input()}_update_completions(e){_.empty(this.menu);for(const t of e){const e\u003d_.div({},t);this.menu.appendChild(e)}e.length\u003e0\u0026\u0026this.menu.children[0].classList.add(c.active)}_show_menu(){if(!this._open){this._open\u003d!0,this._hover_index\u003d0,this._last_value\u003dthis.model.value,_.display(this.menu);const e\u003dt\u003d\u003e{const{target:n}\u003dt;n instanceof HTMLElement\u0026\u0026!this.el.contains(n)\u0026\u0026(document.removeEventListener(\"click\",e),this._hide_menu())};document.addEventListener(\"click\",e)}}_hide_menu(){this._open\u0026\u0026(this._open\u003d!1,_.undisplay(this.menu))}_menu_click(e){e.target!\u003de.currentTarget\u0026\u0026e.target instanceof Element\u0026\u0026(this.model.value\u003de.target.textContent,this.input_el.focus(),this._hide_menu())}_menu_hover(e){if(e.target!\u003de.currentTarget\u0026\u0026e.target instanceof Element){let t\u003d0;for(t\u003d0;t\u003cthis.menu.children.length\u0026\u0026this.menu.children[t].textContent!\u003de.target.textContent;t++);this._bump_hover(t)}}_bump_hover(e){const t\u003dthis.menu.children.length;this._open\u0026\u0026t\u003e0\u0026\u0026(this.menu.children[this._hover_index].classList.remove(c.active),this._hover_index\u003du.clamp(e,0,t-1),this.menu.children[this._hover_index].classList.add(c.active))}_keydown(e){}_keyup(e){switch(e.keyCode){case _.Keys.Enter:this.change_input();break;case _.Keys.Esc:this._hide_menu();break;case _.Keys.Up:this._bump_hover(this._hover_index-1);break;case _.Keys.Down:this._bump_hover(this._hover_index+1);break;default:{const e\u003dthis.input_el.value;if(e.length\u003cthis.model.min_characters)return void this._hide_menu();const t\u003d[],{case_sensitive:n}\u003dthis.model;let i;i\u003dn?e\u003d\u003ee:e\u003d\u003ee.toLowerCase();for(const n of this.model.completions)i(n).startsWith(i(e))\u0026\u0026t.push(n);this._update_completions(t),0\u003d\u003dt.length?this._hide_menu():this._show_menu()}}}}n.AutocompleteInputView\u003dl,l.__name__\u003d\"AutocompleteInputView\";class a extends o.TextInput{constructor(e){super(e)}static init_AutocompleteInput(){this.prototype.default_view\u003dl,this.define((({Boolean:e,Int:t,String:n,Array:i})\u003d\u003e({completions:[i(n),[]],min_characters:[t,2],case_sensitive:[e,!0],restrict:[e,!0]})))}}n.AutocompleteInput\u003da,a.__name__\u003d\"AutocompleteInput\",a.init_AutocompleteInput()},\n      424: function _(t,e,n,i,p){i();const _\u003dt(1),u\u003dt(425),s\u003dt(43),x\u003d_.__importStar(t(427));class a extends u.TextLikeInputView{_render_input(){this.input_el\u003ds.input({type:\"text\",class:x.input})}}n.TextInputView\u003da,a.__name__\u003d\"TextInputView\";class c extends u.TextLikeInput{constructor(t){super(t)}static init_TextInput(){this.prototype.default_view\u003da}}n.TextInput\u003dc,c.__name__\u003d\"TextInput\",c.init_TextInput()},\n      425: function _(e,t,n,i,l){i();const s\u003de(426);class h extends s.InputWidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.name.change,(()\u003d\u003e{var e;return this.input_el.name\u003dnull!\u003d\u003d(e\u003dthis.model.name)\u0026\u0026void 0!\u003d\u003de?e:\"\"})),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.input_el.value\u003dthis.model.value)),this.connect(this.model.properties.value_input.change,(()\u003d\u003ethis.input_el.value\u003dthis.model.value_input)),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.input_el.disabled\u003dthis.model.disabled)),this.connect(this.model.properties.placeholder.change,(()\u003d\u003ethis.input_el.placeholder\u003dthis.model.placeholder)),this.connect(this.model.properties.max_length.change,(()\u003d\u003e{const{max_length:e}\u003dthis.model;null!\u003de?this.input_el.maxLength\u003de:this.input_el.removeAttribute(\"maxLength\")}))}render(){var e;super.render(),this._render_input();const{input_el:t}\u003dthis;t.name\u003dnull!\u003d\u003d(e\u003dthis.model.name)\u0026\u0026void 0!\u003d\u003de?e:\"\",t.value\u003dthis.model.value,t.disabled\u003dthis.model.disabled,t.placeholder\u003dthis.model.placeholder,null!\u003dthis.model.max_length\u0026\u0026(t.maxLength\u003dthis.model.max_length),t.addEventListener(\"change\",(()\u003d\u003ethis.change_input())),t.addEventListener(\"input\",(()\u003d\u003ethis.change_input_value())),this.group_el.appendChild(t)}change_input(){this.model.value\u003dthis.input_el.value,super.change_input()}change_input_value(){this.model.value_input\u003dthis.input_el.value,super.change_input()}}n.TextLikeInputView\u003dh,h.__name__\u003d\"TextLikeInputView\";class a extends s.InputWidget{constructor(e){super(e)}static init_TextLikeInput(){this.define((({Int:e,String:t,Nullable:n})\u003d\u003e({value:[t,\"\"],value_input:[t,\"\"],placeholder:[t,\"\"],max_length:[n(e),null]})))}}n.TextLikeInput\u003da,a.__name__\u003d\"TextLikeInput\",a.init_TextLikeInput()},\n      426: function _(t,e,i,n,s){n();const l\u003dt(1),o\u003dt(420),r\u003dt(43),_\u003dl.__importStar(t(427)),p\u003d_;class d extends o.ControlView{*controls(){yield this.input_el}connect_signals(){super.connect_signals(),this.connect(this.model.properties.title.change,(()\u003d\u003e{this.label_el.textContent\u003dthis.model.title}))}styles(){return[...super.styles(),_.default]}render(){super.render();const{title:t}\u003dthis.model;this.label_el\u003dr.label({style:{display:0\u003d\u003dt.length?\"none\":\"\"}},t),this.group_el\u003dr.div({class:p.input_group},this.label_el),this.el.appendChild(this.group_el)}change_input(){}}i.InputWidgetView\u003dd,d.__name__\u003d\"InputWidgetView\";class u extends o.Control{constructor(t){super(t)}static init_InputWidget(){this.define((({String:t})\u003d\u003e({title:[t,\"\"]})))}}i.InputWidget\u003du,u.__name__\u003d\"InputWidget\",u.init_InputWidget()},\n      427: function _(o,i,t,n,p){n(),t.root\u003d\"bk-root\",t.input\u003d\"bk-input\",t.input_group\u003d\"bk-input-group\",t.inline\u003d\"bk-inline\",t.spin_wrapper\u003d\"bk-spin-wrapper\",t.spin_btn\u003d\"bk-spin-btn\",t.spin_btn_up\u003d\"bk-spin-btn-up\",t.spin_btn_down\u003d\"bk-spin-btn-down\",t.default\u003d\u0027.bk-root .bk-input{display:inline-block;width:100%;flex-grow:1;-webkit-flex-grow:1;min-height:31px;padding:0 12px;background-color:#fff;border:1px solid #ccc;border-radius:4px;}.bk-root .bk-input:focus{border-color:#66afe9;outline:0;box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(102, 175, 233, 0.6);}.bk-root .bk-input::placeholder,.bk-root .bk-input:-ms-input-placeholder,.bk-root .bk-input::-moz-placeholder,.bk-root .bk-input::-webkit-input-placeholder{color:#999;opacity:1;}.bk-root .bk-input[disabled]{cursor:not-allowed;background-color:#eee;opacity:1;}.bk-root select:not([multiple]).bk-input,.bk-root select:not([size]).bk-input{height:auto;appearance:none;-webkit-appearance:none;background-image:url(\\\u0027data:image/svg+xml;utf8,\u003csvg version\u003d\"1.1\" viewBox\u003d\"0 0 25 20\" xmlns\u003d\"http://www.w3.org/2000/svg\"\u003e\u003cpath d\u003d\"M 0,0 25,0 12.5,20 Z\" fill\u003d\"black\" /\u003e\u003c/svg\u003e\\\u0027);background-position:right 0.5em center;background-size:8px 6px;background-repeat:no-repeat;}.bk-root select[multiple].bk-input,.bk-root select[size].bk-input,.bk-root textarea.bk-input{height:auto;}.bk-root .bk-input-group{width:100%;height:100%;display:inline-flex;display:-webkit-inline-flex;flex-wrap:nowrap;-webkit-flex-wrap:nowrap;align-items:start;-webkit-align-items:start;flex-direction:column;-webkit-flex-direction:column;white-space:nowrap;}.bk-root .bk-input-group.bk-inline{flex-direction:row;-webkit-flex-direction:row;}.bk-root .bk-input-group.bk-inline \u003e *:not(:first-child){margin-left:5px;}.bk-root .bk-input-group input[type\u003d\"checkbox\"] + span,.bk-root .bk-input-group input[type\u003d\"radio\"] + span{position:relative;top:-2px;margin-left:3px;}.bk-root .bk-input-group \u003e .bk-spin-wrapper{display:inherit;width:inherit;height:inherit;position:relative;overflow:hidden;padding:0;vertical-align:middle;}.bk-root .bk-input-group \u003e .bk-spin-wrapper input{padding-right:20px;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn{position:absolute;display:block;height:50%;min-height:0;min-width:0;width:30px;padding:0;margin:0;right:0;border:none;background:none;cursor:pointer;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn:before{content:\"\";display:inline-block;transform:translateY(-50%);border-left:5px solid transparent;border-right:5px solid transparent;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn.bk-spin-btn-up{top:0;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn.bk-spin-btn-up:before{border-bottom:5px solid black;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn.bk-spin-btn-up:disabled:before{border-bottom-color:grey;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn.bk-spin-btn-down{bottom:0;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn.bk-spin-btn-down:before{border-top:5px solid black;}.bk-root .bk-input-group \u003e .bk-spin-wrapper \u003e .bk-spin-btn.bk-spin-btn-down:disabled:before{border-top-color:grey;}\u0027},\n      428: function _(t,e,n,i,o){i();const s\u003dt(419),u\u003dt(264);class c extends s.AbstractButtonView{click(){this.model.trigger_event(new u.ButtonClick),super.click()}}n.ButtonView\u003dc,c.__name__\u003d\"ButtonView\";class _ extends s.AbstractButton{constructor(t){super(t)}static init_Button(){this.prototype.default_view\u003dc,this.override({label:\"Button\"})}}n.Button\u003d_,_.__name__\u003d\"Button\",_.init_Button()},\n      429: function _(t,e,o,i,c){i();const n\u003dt(1),s\u003dt(430),a\u003dt(43),u\u003dn.__importStar(t(328));class r extends s.ButtonGroupView{get active(){return new Set(this.model.active)}change_active(t){const{active:e}\u003dthis;e.has(t)?e.delete(t):e.add(t),this.model.active\u003d[...e].sort()}_update_active(){const{active:t}\u003dthis;this._buttons.forEach(((e,o)\u003d\u003e{a.classes(e).toggle(u.active,t.has(o))}))}}o.CheckboxButtonGroupView\u003dr,r.__name__\u003d\"CheckboxButtonGroupView\";class _ extends s.ButtonGroup{constructor(t){super(t)}static init_CheckboxButtonGroup(){this.prototype.default_view\u003dr,this.define((({Int:t,Array:e})\u003d\u003e({active:[e(t),[]]})))}}o.CheckboxButtonGroup\u003d_,_.__name__\u003d\"CheckboxButtonGroup\",_.init_CheckboxButtonGroup()},\n      430: function _(t,e,n,s,i){s();const o\u003dt(1),r\u003dt(420),u\u003dt(20),a\u003dt(43),_\u003do.__importStar(t(328)),l\u003d_;class c extends r.ControlView{*controls(){yield*this._buttons}connect_signals(){super.connect_signals();const t\u003dthis.model.properties;this.on_change(t.button_type,(()\u003d\u003ethis.render())),this.on_change(t.labels,(()\u003d\u003ethis.render())),this.on_change(t.active,(()\u003d\u003ethis._update_active()))}styles(){return[...super.styles(),_.default]}render(){super.render(),this._buttons\u003dthis.model.labels.map(((t,e)\u003d\u003e{const n\u003da.div({class:[l.btn,l[`btn_${this.model.button_type}`]],disabled:this.model.disabled},t);return n.addEventListener(\"click\",(()\u003d\u003ethis.change_active(e))),n})),this._update_active();const t\u003da.div({class:l.btn_group},this._buttons);this.el.appendChild(t)}}n.ButtonGroupView\u003dc,c.__name__\u003d\"ButtonGroupView\";class d extends r.Control{constructor(t){super(t)}static init_ButtonGroup(){this.define((({String:t,Array:e})\u003d\u003e({labels:[e(t),[]],button_type:[u.ButtonType,\"default\"]})))}}n.ButtonGroup\u003dd,d.__name__\u003d\"ButtonGroup\",d.init_ButtonGroup()},\n      431: function _(e,t,i,n,s){n();const o\u003de(1),c\u003de(432),a\u003de(43),l\u003de(9),d\u003do.__importStar(e(427));class h extends c.InputGroupView{render(){super.render();const e\u003da.div({class:[d.input_group,this.model.inline?d.inline:null]});this.el.appendChild(e);const{active:t,labels:i}\u003dthis.model;this._inputs\u003d[];for(let n\u003d0;n\u003ci.length;n++){const s\u003da.input({type:\"checkbox\",value:`${n}`});s.addEventListener(\"change\",(()\u003d\u003ethis.change_active(n))),this._inputs.push(s),this.model.disabled\u0026\u0026(s.disabled\u003d!0),l.includes(t,n)\u0026\u0026(s.checked\u003d!0);const o\u003da.label({},s,a.span({},i[n]));e.appendChild(o)}}change_active(e){const t\u003dnew Set(this.model.active);t.has(e)?t.delete(e):t.add(e),this.model.active\u003d[...t].sort()}}i.CheckboxGroupView\u003dh,h.__name__\u003d\"CheckboxGroupView\";class p extends c.InputGroup{constructor(e){super(e)}static init_CheckboxGroup(){this.prototype.default_view\u003dh,this.define((({Boolean:e,Int:t,String:i,Array:n})\u003d\u003e({active:[n(t),[]],labels:[n(i),[]],inline:[e,!1]})))}}i.CheckboxGroup\u003dp,p.__name__\u003d\"CheckboxGroup\",p.init_CheckboxGroup()},\n      432: function _(n,t,e,s,o){s();const r\u003dn(1),u\u003dn(420),c\u003dr.__importDefault(n(427));class _ extends u.ControlView{*controls(){yield*this._inputs}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.render()))}styles(){return[...super.styles(),c.default]}}e.InputGroupView\u003d_,_.__name__\u003d\"InputGroupView\";class i extends u.Control{constructor(n){super(n)}}e.InputGroup\u003di,i.__name__\u003d\"InputGroup\"},\n      433: function _(e,i,t,n,o){n();const s\u003de(1),l\u003de(426),r\u003de(43),c\u003de(22),a\u003ds.__importStar(e(427));class d extends l.InputWidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.name.change,(()\u003d\u003e{var e;return this.input_el.name\u003dnull!\u003d\u003d(e\u003dthis.model.name)\u0026\u0026void 0!\u003d\u003de?e:\"\"})),this.connect(this.model.properties.color.change,(()\u003d\u003ethis.input_el.value\u003dc.color2hexrgb(this.model.color))),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.input_el.disabled\u003dthis.model.disabled))}render(){super.render(),this.input_el\u003dr.input({type:\"color\",class:a.input,name:this.model.name,value:this.model.color,disabled:this.model.disabled}),this.input_el.addEventListener(\"change\",(()\u003d\u003ethis.change_input())),this.group_el.appendChild(this.input_el)}change_input(){this.model.color\u003dthis.input_el.value,super.change_input()}}t.ColorPickerView\u003dd,d.__name__\u003d\"ColorPickerView\";class h extends l.InputWidget{constructor(e){super(e)}static init_ColorPicker(){this.prototype.default_view\u003dd,this.define((({Color:e})\u003d\u003e({color:[e,\"#000000\"]})))}}t.ColorPicker\u003dh,h.__name__\u003d\"ColorPicker\",h.init_ColorPicker()},\n      434: function _(e,t,i,n,s){n();const a\u003de(1),l\u003da.__importDefault(e(435)),o\u003de(426),d\u003de(43),r\u003de(20),c\u003de(8),h\u003da.__importStar(e(427)),u\u003da.__importDefault(e(436));function _(e){const t\u003d[];for(const i of e)if(c.isString(i))t.push(i);else{const[e,n]\u003di;t.push({from:e,to:n})}return t}class p extends o.InputWidgetView{connect_signals(){super.connect_signals();const{value:e,min_date:t,max_date:i,disabled_dates:n,enabled_dates:s,position:a,inline:l}\u003dthis.model.properties;this.connect(e.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.setDate(this.model.value)})),this.connect(t.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"minDate\",this.model.min_date)})),this.connect(i.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"maxDate\",this.model.max_date)})),this.connect(n.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"disable\",this.model.disabled_dates)})),this.connect(s.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"enable\",this.model.enabled_dates)})),this.connect(a.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"position\",this.model.position)})),this.connect(l.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"inline\",this.model.inline)}))}remove(){var e;null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de||e.destroy(),super.remove()}styles(){return[...super.styles(),u.default]}render(){var e,t;null\u003d\u003dthis._picker\u0026\u0026(super.render(),this.input_el\u003dd.input({type:\"text\",class:h.input,disabled:this.model.disabled}),this.group_el.appendChild(this.input_el),this._picker\u003dl.default(this.input_el,{defaultDate:this.model.value,minDate:null!\u003d\u003d(e\u003dthis.model.min_date)\u0026\u0026void 0!\u003d\u003de?e:void 0,maxDate:null!\u003d\u003d(t\u003dthis.model.max_date)\u0026\u0026void 0!\u003d\u003dt?t:void 0,inline:this.model.inline,position:this.model.position,disable:_(this.model.disabled_dates),enable:_(this.model.enabled_dates),onChange:(e,t,i)\u003d\u003ethis._on_change(e,t,i)}))}_on_change(e,t,i){this.model.value\u003dt,this.change_input()}}i.DatePickerView\u003dp,p.__name__\u003d\"DatePickerView\";class m extends o.InputWidget{constructor(e){super(e)}static init_DatePicker(){this.prototype.default_view\u003dp,this.define((({Boolean:e,String:t,Array:i,Tuple:n,Or:s,Nullable:a})\u003d\u003e{const l\u003di(s(t,n(t,t)));return{value:[t],min_date:[a(t),null],max_date:[a(t),null],disabled_dates:[l,[]],enabled_dates:[l,[]],position:[r.CalendarPosition,\"auto\"],inline:[e,!1]}}))}}i.DatePicker\u003dm,m.__name__\u003d\"DatePicker\",m.init_DatePicker()},\n      435: function _(e,n,t,a,i){\n      /* flatpickr v4.6.6, @license MIT */var o,r;o\u003dthis,r\u003dfunction(){\"use strict\";\n      /*! *****************************************************************************\n              Copyright (c) Microsoft Corporation.\n          \n              Permission to use, copy, modify, and/or distribute this software for any\n              purpose with or without fee is hereby granted.\n          \n              THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n              REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n              AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n              INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n              LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n              OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n              PERFORMANCE OF THIS SOFTWARE.\n              ***************************************************************************** */var e\u003dfunction(){return(e\u003dObject.assign||function(e){for(var n,t\u003d1,a\u003darguments.length;t\u003ca;t++)for(var i in n\u003darguments[t])Object.prototype.hasOwnProperty.call(n,i)\u0026\u0026(e[i]\u003dn[i]);return e}).apply(this,arguments)};function n(){for(var e\u003d0,n\u003d0,t\u003darguments.length;n\u003ct;n++)e+\u003darguments[n].length;var a\u003dArray(e),i\u003d0;for(n\u003d0;n\u003ct;n++)for(var o\u003darguments[n],r\u003d0,l\u003do.length;r\u003cl;r++,i++)a[i]\u003do[r];return a}var t\u003d[\"onChange\",\"onClose\",\"onDayCreate\",\"onDestroy\",\"onKeyDown\",\"onMonthChange\",\"onOpen\",\"onParseConfig\",\"onReady\",\"onValueUpdate\",\"onYearChange\",\"onPreCalendarPosition\"],a\u003d{_disable:[],_enable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:\"F j, Y\",altInput:!1,altInputClass:\"form-control input\",animate:\"object\"\u003d\u003dtypeof window\u0026\u0026-1\u003d\u003d\u003dwindow.navigator.userAgent.indexOf(\"MSIE\"),ariaDateFormat:\"F j, Y\",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:\", \",dateFormat:\"Y-m-d\",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enable:[],enableSeconds:!1,enableTime:!1,errorHandler:function(e){return\"undefined\"!\u003dtypeof console\u0026\u0026console.warn(e)},getWeek:function(e){var n\u003dnew Date(e.getTime());n.setHours(0,0,0,0),n.setDate(n.getDate()+3-(n.getDay()+6)%7);var t\u003dnew Date(n.getFullYear(),0,4);return 1+Math.round(((n.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:\"default\",minuteIncrement:5,mode:\"single\",monthSelectorType:\"dropdown\",nextArrow:\"\u003csvg version\u003d\u00271.1\u0027 xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 xmlns:xlink\u003d\u0027http://www.w3.org/1999/xlink\u0027 viewBox\u003d\u00270 0 17 17\u0027\u003e\u003cg\u003e\u003c/g\u003e\u003cpath d\u003d\u0027M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z\u0027 /\u003e\u003c/svg\u003e\",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:\"auto\",positionElement:void 0,prevArrow:\"\u003csvg version\u003d\u00271.1\u0027 xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 xmlns:xlink\u003d\u0027http://www.w3.org/1999/xlink\u0027 viewBox\u003d\u00270 0 17 17\u0027\u003e\u003cg\u003e\u003c/g\u003e\u003cpath d\u003d\u0027M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z\u0027 /\u003e\u003c/svg\u003e\",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i\u003d{weekdays:{shorthand:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],longhand:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},months:{shorthand:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],longhand:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var n\u003de%100;if(n\u003e3\u0026\u0026n\u003c21)return\"th\";switch(n%10){case 1:return\"st\";case 2:return\"nd\";case 3:return\"rd\";default:return\"th\"}},rangeSeparator:\" to \",weekAbbreviation:\"Wk\",scrollTitle:\"Scroll to increment\",toggleTitle:\"Click to toggle\",amPM:[\"AM\",\"PM\"],yearAriaLabel:\"Year\",monthAriaLabel:\"Month\",hourAriaLabel:\"Hour\",minuteAriaLabel:\"Minute\",time_24hr:!1},o\u003dfunction(e,n){return void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d2),(\"000\"+e).slice(-1*n)},r\u003dfunction(e){return!0\u003d\u003d\u003de?1:0};function l(e,n,t){var a;return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d!1),function(){var i\u003dthis,o\u003darguments;null!\u003d\u003da\u0026\u0026clearTimeout(a),a\u003dwindow.setTimeout((function(){a\u003dnull,t||e.apply(i,o)}),n),t\u0026\u0026!a\u0026\u0026e.apply(i,o)}}var c\u003dfunction(e){return e instanceof Array?e:[e]};function d(e,n,t){if(!0\u003d\u003d\u003dt)return e.classList.add(n);e.classList.remove(n)}function s(e,n,t){var a\u003dwindow.document.createElement(e);return n\u003dn||\"\",t\u003dt||\"\",a.className\u003dn,void 0!\u003d\u003dt\u0026\u0026(a.textContent\u003dt),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,n){return n(e)?e:e.parentNode?f(e.parentNode,n):void 0}function m(e,n){var t\u003ds(\"div\",\"numInputWrapper\"),a\u003ds(\"input\",\"numInput \"+e),i\u003ds(\"span\",\"arrowUp\"),o\u003ds(\"span\",\"arrowDown\");if(-1\u003d\u003d\u003dnavigator.userAgent.indexOf(\"MSIE 9.0\")?a.type\u003d\"number\":(a.type\u003d\"text\",a.pattern\u003d\"\\\\d*\"),void 0!\u003d\u003dn)for(var r in n)a.setAttribute(r,n[r]);return t.appendChild(a),t.appendChild(i),t.appendChild(o),t}function g(e){try{return\"function\"\u003d\u003dtypeof e.composedPath?e.composedPath()[0]:e.target}catch(n){return e.target}}var p\u003dfunction(){},h\u003dfunction(e,n,t){return t.months[n?\"shorthand\":\"longhand\"][e]},v\u003d{D:p,F:function(e,n,t){e.setMonth(t.months.longhand.indexOf(n))},G:function(e,n){e.setHours(parseFloat(n))},H:function(e,n){e.setHours(parseFloat(n))},J:function(e,n){e.setDate(parseFloat(n))},K:function(e,n,t){e.setHours(e.getHours()%12+12*r(new RegExp(t.amPM[1],\"i\").test(n)))},M:function(e,n,t){e.setMonth(t.months.shorthand.indexOf(n))},S:function(e,n){e.setSeconds(parseFloat(n))},U:function(e,n){return new Date(1e3*parseFloat(n))},W:function(e,n,t){var a\u003dparseInt(n),i\u003dnew Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+t.firstDayOfWeek),i},Y:function(e,n){e.setFullYear(parseFloat(n))},Z:function(e,n){return new Date(n)},d:function(e,n){e.setDate(parseFloat(n))},h:function(e,n){e.setHours(parseFloat(n))},i:function(e,n){e.setMinutes(parseFloat(n))},j:function(e,n){e.setDate(parseFloat(n))},l:p,m:function(e,n){e.setMonth(parseFloat(n)-1)},n:function(e,n){e.setMonth(parseFloat(n)-1)},s:function(e,n){e.setSeconds(parseFloat(n))},u:function(e,n){return new Date(parseFloat(n))},w:p,y:function(e,n){e.setFullYear(2e3+parseFloat(n))}},D\u003d{D:\"(\\\\w+)\",F:\"(\\\\w+)\",G:\"(\\\\d\\\\d|\\\\d)\",H:\"(\\\\d\\\\d|\\\\d)\",J:\"(\\\\d\\\\d|\\\\d)\\\\w+\",K:\"\",M:\"(\\\\w+)\",S:\"(\\\\d\\\\d|\\\\d)\",U:\"(.+)\",W:\"(\\\\d\\\\d|\\\\d)\",Y:\"(\\\\d{4})\",Z:\"(.+)\",d:\"(\\\\d\\\\d|\\\\d)\",h:\"(\\\\d\\\\d|\\\\d)\",i:\"(\\\\d\\\\d|\\\\d)\",j:\"(\\\\d\\\\d|\\\\d)\",l:\"(\\\\w+)\",m:\"(\\\\d\\\\d|\\\\d)\",n:\"(\\\\d\\\\d|\\\\d)\",s:\"(\\\\d\\\\d|\\\\d)\",u:\"(.+)\",w:\"(\\\\d\\\\d|\\\\d)\",y:\"(\\\\d{2})\"},w\u003d{Z:function(e){return e.toISOString()},D:function(e,n,t){return n.weekdays.shorthand[w.w(e,n,t)]},F:function(e,n,t){return h(w.n(e,n,t)-1,!1,n)},G:function(e,n,t){return o(w.h(e,n,t))},H:function(e){return o(e.getHours())},J:function(e,n){return void 0!\u003d\u003dn.ordinal?e.getDate()+n.ordinal(e.getDate()):e.getDate()},K:function(e,n){return n.amPM[r(e.getHours()\u003e11)]},M:function(e,n){return h(e.getMonth(),!0,n)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,n,t){return t.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,n){return n.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},b\u003dfunction(e){var n\u003de.config,t\u003dvoid 0\u003d\u003d\u003dn?a:n,o\u003de.l10n,r\u003dvoid 0\u003d\u003d\u003do?i:o,l\u003de.isMobile,c\u003dvoid 0!\u003d\u003dl\u0026\u0026l;return function(e,n,a){var i\u003da||r;return void 0\u003d\u003d\u003dt.formatDate||c?n.split(\"\").map((function(n,a,o){return w[n]\u0026\u0026\"\\\\\"!\u003d\u003do[a-1]?w[n](e,i,t):\"\\\\\"!\u003d\u003dn?n:\"\"})).join(\"\"):t.formatDate(e,n,i)}},C\u003dfunction(e){var n\u003de.config,t\u003dvoid 0\u003d\u003d\u003dn?a:n,o\u003de.l10n,r\u003dvoid 0\u003d\u003d\u003do?i:o;return function(e,n,i,o){if(0\u003d\u003d\u003de||e){var l,c\u003do||r,d\u003de;if(e instanceof Date)l\u003dnew Date(e.getTime());else if(\"string\"!\u003dtypeof e\u0026\u0026void 0!\u003d\u003de.toFixed)l\u003dnew Date(e);else if(\"string\"\u003d\u003dtypeof e){var s\u003dn||(t||a).dateFormat,u\u003dString(e).trim();if(\"today\"\u003d\u003d\u003du)l\u003dnew Date,i\u003d!0;else if(/Z$/.test(u)||/GMT$/.test(u))l\u003dnew Date(e);else if(t\u0026\u0026t.parseDate)l\u003dt.parseDate(e,s);else{l\u003dt\u0026\u0026t.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f\u003dvoid 0,m\u003d[],g\u003d0,p\u003d0,h\u003d\"\";g\u003cs.length;g++){var w\u003ds[g],b\u003d\"\\\\\"\u003d\u003d\u003dw,C\u003d\"\\\\\"\u003d\u003d\u003ds[g-1]||b;if(D[w]\u0026\u0026!C){h+\u003dD[w];var M\u003dnew RegExp(h).exec(e);M\u0026\u0026(f\u003d!0)\u0026\u0026m[\"Y\"!\u003d\u003dw?\"push\":\"unshift\"]({fn:v[w],val:M[++p]})}else b||(h+\u003d\".\");m.forEach((function(e){var n\u003de.fn,t\u003de.val;return l\u003dn(l,t,c)||l}))}l\u003df?l:void 0}}if(l instanceof Date\u0026\u0026!isNaN(l.getTime()))return!0\u003d\u003d\u003di\u0026\u0026l.setHours(0,0,0,0),l;t.errorHandler(new Error(\"Invalid date provided: \"+d))}}};function M(e,n,t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d!0),!1!\u003d\u003dt?new Date(e.getTime()).setHours(0,0,0,0)-new Date(n.getTime()).setHours(0,0,0,0):e.getTime()-n.getTime()}var y\u003d864e5;function x(p,v){var w\u003d{config:e(e({},a),k.defaultConfig),l10n:i};function x(e){return e.bind(w)}function E(){var e\u003dw.config;!1\u003d\u003d\u003de.weekNumbers\u0026\u00261\u003d\u003d\u003de.showMonths||!0!\u003d\u003de.noCalendar\u0026\u0026window.requestAnimationFrame((function(){if(void 0!\u003d\u003dw.calendarContainer\u0026\u0026(w.calendarContainer.style.visibility\u003d\"hidden\",w.calendarContainer.style.display\u003d\"block\"),void 0!\u003d\u003dw.daysContainer){var n\u003d(w.days.offsetWidth+1)*e.showMonths;w.daysContainer.style.width\u003dn+\"px\",w.calendarContainer.style.width\u003dn+(void 0!\u003d\u003dw.weekWrapper?w.weekWrapper.offsetWidth:0)+\"px\",w.calendarContainer.style.removeProperty(\"visibility\"),w.calendarContainer.style.removeProperty(\"display\")}}))}function T(e){if(0\u003d\u003d\u003dw.selectedDates.length){var n\u003dvoid 0!\u003d\u003dw.config.minDate?new Date(w.config.minDate.getTime()):new Date,t\u003d_(),a\u003dt.hours,i\u003dt.minutes,l\u003dt.seconds;n.setHours(a,i,l,0),w.setDate(n,!1)}void 0!\u003d\u003de\u0026\u0026\"blur\"!\u003d\u003de.type\u0026\u0026function(e){e.preventDefault();var n\u003d\"keydown\"\u003d\u003d\u003de.type,t\u003dg(e),a\u003dt;void 0!\u003d\u003dw.amPM\u0026\u0026t\u003d\u003d\u003dw.amPM\u0026\u0026(w.amPM.textContent\u003dw.l10n.amPM[r(w.amPM.textContent\u003d\u003d\u003dw.l10n.amPM[0])]);var i\u003dparseFloat(a.getAttribute(\"min\")),l\u003dparseFloat(a.getAttribute(\"max\")),c\u003dparseFloat(a.getAttribute(\"step\")),d\u003dparseInt(a.value,10),s\u003de.delta||(n?38\u003d\u003d\u003de.which?1:-1:0),u\u003dd+c*s;if(void 0!\u003d\u003da.value\u0026\u00262\u003d\u003d\u003da.value.length){var f\u003da\u003d\u003d\u003dw.hourElement,m\u003da\u003d\u003d\u003dw.minuteElement;u\u003ci?(u\u003dl+u+r(!f)+(r(f)\u0026\u0026r(!w.amPM)),m\u0026\u0026H(void 0,-1,w.hourElement)):u\u003el\u0026\u0026(u\u003da\u003d\u003d\u003dw.hourElement?u-l-r(!w.amPM):i,m\u0026\u0026H(void 0,1,w.hourElement)),w.amPM\u0026\u0026f\u0026\u0026(1\u003d\u003d\u003dc?u+d\u003d\u003d\u003d23:Math.abs(u-d)\u003ec)\u0026\u0026(w.amPM.textContent\u003dw.l10n.amPM[r(w.amPM.textContent\u003d\u003d\u003dw.l10n.amPM[0])]),a.value\u003do(u)}}(e);var c\u003dw._input.value;I(),be(),w._input.value!\u003d\u003dc\u0026\u0026w._debouncedChange()}function I(){if(void 0!\u003d\u003dw.hourElement\u0026\u0026void 0!\u003d\u003dw.minuteElement){var e,n,t\u003d(parseInt(w.hourElement.value.slice(-2),10)||0)%24,a\u003d(parseInt(w.minuteElement.value,10)||0)%60,i\u003dvoid 0!\u003d\u003dw.secondElement?(parseInt(w.secondElement.value,10)||0)%60:0;void 0!\u003d\u003dw.amPM\u0026\u0026(e\u003dt,n\u003dw.amPM.textContent,t\u003de%12+12*r(n\u003d\u003d\u003dw.l10n.amPM[1]));var o\u003dvoid 0!\u003d\u003dw.config.minTime||w.config.minDate\u0026\u0026w.minDateHasTime\u0026\u0026w.latestSelectedDateObj\u0026\u00260\u003d\u003d\u003dM(w.latestSelectedDateObj,w.config.minDate,!0);if(void 0!\u003d\u003dw.config.maxTime||w.config.maxDate\u0026\u0026w.maxDateHasTime\u0026\u0026w.latestSelectedDateObj\u0026\u00260\u003d\u003d\u003dM(w.latestSelectedDateObj,w.config.maxDate,!0)){var l\u003dvoid 0!\u003d\u003dw.config.maxTime?w.config.maxTime:w.config.maxDate;(t\u003dMath.min(t,l.getHours()))\u003d\u003d\u003dl.getHours()\u0026\u0026(a\u003dMath.min(a,l.getMinutes())),a\u003d\u003d\u003dl.getMinutes()\u0026\u0026(i\u003dMath.min(i,l.getSeconds()))}if(o){var c\u003dvoid 0!\u003d\u003dw.config.minTime?w.config.minTime:w.config.minDate;(t\u003dMath.max(t,c.getHours()))\u003d\u003d\u003dc.getHours()\u0026\u0026(a\u003dMath.max(a,c.getMinutes())),a\u003d\u003d\u003dc.getMinutes()\u0026\u0026(i\u003dMath.max(i,c.getSeconds()))}O(t,a,i)}}function S(e){var n\u003de||w.latestSelectedDateObj;n\u0026\u0026O(n.getHours(),n.getMinutes(),n.getSeconds())}function _(){var e\u003dw.config.defaultHour,n\u003dw.config.defaultMinute,t\u003dw.config.defaultSeconds;if(void 0!\u003d\u003dw.config.minDate){var a\u003dw.config.minDate.getHours(),i\u003dw.config.minDate.getMinutes();(e\u003dMath.max(e,a))\u003d\u003d\u003da\u0026\u0026(n\u003dMath.max(i,n)),e\u003d\u003d\u003da\u0026\u0026n\u003d\u003d\u003di\u0026\u0026(t\u003dw.config.minDate.getSeconds())}if(void 0!\u003d\u003dw.config.maxDate){var o\u003dw.config.maxDate.getHours(),r\u003dw.config.maxDate.getMinutes();(e\u003dMath.min(e,o))\u003d\u003d\u003do\u0026\u0026(n\u003dMath.min(r,n)),e\u003d\u003d\u003do\u0026\u0026n\u003d\u003d\u003dr\u0026\u0026(t\u003dw.config.maxDate.getSeconds())}return{hours:e,minutes:n,seconds:t}}function O(e,n,t){void 0!\u003d\u003dw.latestSelectedDateObj\u0026\u0026w.latestSelectedDateObj.setHours(e%24,n,t||0,0),w.hourElement\u0026\u0026w.minuteElement\u0026\u0026!w.isMobile\u0026\u0026(w.hourElement.value\u003do(w.config.time_24hr?e:(12+e)%12+12*r(e%12\u003d\u003d0)),w.minuteElement.value\u003do(n),void 0!\u003d\u003dw.amPM\u0026\u0026(w.amPM.textContent\u003dw.l10n.amPM[r(e\u003e\u003d12)]),void 0!\u003d\u003dw.secondElement\u0026\u0026(w.secondElement.value\u003do(t)))}function F(e){var n\u003dg(e),t\u003dparseInt(n.value)+(e.delta||0);(t/1e3\u003e1||\"Enter\"\u003d\u003d\u003de.key\u0026\u0026!/[^\\d]/.test(t.toString()))\u0026\u0026Q(t)}function N(e,n,t,a){return n instanceof Array?n.forEach((function(n){return N(e,n,t,a)})):e instanceof Array?e.forEach((function(e){return N(e,n,t,a)})):(e.addEventListener(n,t,a),void w._handlers.push({element:e,event:n,handler:t,options:a}))}function A(){pe(\"onChange\")}function P(e,n){var t\u003dvoid 0!\u003d\u003de?w.parseDate(e):w.latestSelectedDateObj||(w.config.minDate\u0026\u0026w.config.minDate\u003ew.now?w.config.minDate:w.config.maxDate\u0026\u0026w.config.maxDate\u003cw.now?w.config.maxDate:w.now),a\u003dw.currentYear,i\u003dw.currentMonth;try{void 0!\u003d\u003dt\u0026\u0026(w.currentYear\u003dt.getFullYear(),w.currentMonth\u003dt.getMonth())}catch(e){e.message\u003d\"Invalid date supplied: \"+t,w.config.errorHandler(e)}n\u0026\u0026w.currentYear!\u003d\u003da\u0026\u0026(pe(\"onYearChange\"),K()),!n||w.currentYear\u003d\u003d\u003da\u0026\u0026w.currentMonth\u003d\u003d\u003di||pe(\"onMonthChange\"),w.redraw()}function Y(e){var n\u003dg(e);~n.className.indexOf(\"arrow\")\u0026\u0026H(e,n.classList.contains(\"arrowUp\")?1:-1)}function H(e,n,t){var a\u003de\u0026\u0026g(e),i\u003dt||a\u0026\u0026a.parentNode\u0026\u0026a.parentNode.firstChild,o\u003dhe(\"increment\");o.delta\u003dn,i\u0026\u0026i.dispatchEvent(o)}function j(e,n,t,a){var i\u003dX(n,!0),o\u003ds(\"span\",\"flatpickr-day \"+e,n.getDate().toString());return o.dateObj\u003dn,o.$i\u003da,o.setAttribute(\"aria-label\",w.formatDate(n,w.config.ariaDateFormat)),-1\u003d\u003d\u003de.indexOf(\"hidden\")\u0026\u00260\u003d\u003d\u003dM(n,w.now)\u0026\u0026(w.todayDateElem\u003do,o.classList.add(\"today\"),o.setAttribute(\"aria-current\",\"date\")),i?(o.tabIndex\u003d-1,ve(n)\u0026\u0026(o.classList.add(\"selected\"),w.selectedDateElem\u003do,\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026(d(o,\"startRange\",w.selectedDates[0]\u0026\u00260\u003d\u003d\u003dM(n,w.selectedDates[0],!0)),d(o,\"endRange\",w.selectedDates[1]\u0026\u00260\u003d\u003d\u003dM(n,w.selectedDates[1],!0)),\"nextMonthDay\"\u003d\u003d\u003de\u0026\u0026o.classList.add(\"inRange\")))):o.classList.add(\"flatpickr-disabled\"),\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026function(e){return!(\"range\"!\u003d\u003dw.config.mode||w.selectedDates.length\u003c2)\u0026\u0026M(e,w.selectedDates[0])\u003e\u003d0\u0026\u0026M(e,w.selectedDates[1])\u003c\u003d0}(n)\u0026\u0026!ve(n)\u0026\u0026o.classList.add(\"inRange\"),w.weekNumbers\u0026\u00261\u003d\u003d\u003dw.config.showMonths\u0026\u0026\"prevMonthDay\"!\u003d\u003de\u0026\u0026t%7\u003d\u003d1\u0026\u0026w.weekNumbers.insertAdjacentHTML(\"beforeend\",\"\u003cspan class\u003d\u0027flatpickr-day\u0027\u003e\"+w.config.getWeek(n)+\"\u003c/span\u003e\"),pe(\"onDayCreate\",o),o}function L(e){e.focus(),\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026ae(e)}function W(e){for(var n\u003de\u003e0?0:w.config.showMonths-1,t\u003de\u003e0?w.config.showMonths:-1,a\u003dn;a!\u003dt;a+\u003de)for(var i\u003dw.daysContainer.children[a],o\u003de\u003e0?0:i.children.length-1,r\u003de\u003e0?i.children.length:-1,l\u003do;l!\u003dr;l+\u003de){var c\u003di.children[l];if(-1\u003d\u003d\u003dc.className.indexOf(\"hidden\")\u0026\u0026X(c.dateObj))return c}}function R(e,n){var t\u003dee(document.activeElement||document.body),a\u003dvoid 0!\u003d\u003de?e:t?document.activeElement:void 0!\u003d\u003dw.selectedDateElem\u0026\u0026ee(w.selectedDateElem)?w.selectedDateElem:void 0!\u003d\u003dw.todayDateElem\u0026\u0026ee(w.todayDateElem)?w.todayDateElem:W(n\u003e0?1:-1);void 0\u003d\u003d\u003da?w._input.focus():t?function(e,n){for(var t\u003d-1\u003d\u003d\u003de.className.indexOf(\"Month\")?e.dateObj.getMonth():w.currentMonth,a\u003dn\u003e0?w.config.showMonths:-1,i\u003dn\u003e0?1:-1,o\u003dt-w.currentMonth;o!\u003da;o+\u003di)for(var r\u003dw.daysContainer.children[o],l\u003dt-w.currentMonth\u003d\u003d\u003do?e.$i+n:n\u003c0?r.children.length-1:0,c\u003dr.children.length,d\u003dl;d\u003e\u003d0\u0026\u0026d\u003cc\u0026\u0026d!\u003d(n\u003e0?c:-1);d+\u003di){var s\u003dr.children[d];if(-1\u003d\u003d\u003ds.className.indexOf(\"hidden\")\u0026\u0026X(s.dateObj)\u0026\u0026Math.abs(e.$i-d)\u003e\u003dMath.abs(n))return L(s)}w.changeMonth(i),R(W(i),0)}(a,n):L(a)}function B(e,n){for(var t\u003d(new Date(e,n,1).getDay()-w.l10n.firstDayOfWeek+7)%7,a\u003dw.utils.getDaysInMonth((n-1+12)%12,e),i\u003dw.utils.getDaysInMonth(n,e),o\u003dwindow.document.createDocumentFragment(),r\u003dw.config.showMonths\u003e1,l\u003dr?\"prevMonthDay hidden\":\"prevMonthDay\",c\u003dr?\"nextMonthDay hidden\":\"nextMonthDay\",d\u003da+1-t,u\u003d0;d\u003c\u003da;d++,u++)o.appendChild(j(l,new Date(e,n-1,d),d,u));for(d\u003d1;d\u003c\u003di;d++,u++)o.appendChild(j(\"\",new Date(e,n,d),d,u));for(var f\u003di+1;f\u003c\u003d42-t\u0026\u0026(1\u003d\u003d\u003dw.config.showMonths||u%7!\u003d0);f++,u++)o.appendChild(j(c,new Date(e,n+1,f%i),f,u));var m\u003ds(\"div\",\"dayContainer\");return m.appendChild(o),m}function J(){if(void 0!\u003d\u003dw.daysContainer){u(w.daysContainer),w.weekNumbers\u0026\u0026u(w.weekNumbers);for(var e\u003ddocument.createDocumentFragment(),n\u003d0;n\u003cw.config.showMonths;n++){var t\u003dnew Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),e.appendChild(B(t.getFullYear(),t.getMonth()))}w.daysContainer.appendChild(e),w.days\u003dw.daysContainer.firstChild,\"range\"\u003d\u003d\u003dw.config.mode\u0026\u00261\u003d\u003d\u003dw.selectedDates.length\u0026\u0026ae()}}function K(){if(!(w.config.showMonths\u003e1||\"dropdown\"!\u003d\u003dw.config.monthSelectorType)){var e\u003dfunction(e){return!(void 0!\u003d\u003dw.config.minDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.minDate.getFullYear()\u0026\u0026e\u003cw.config.minDate.getMonth()||void 0!\u003d\u003dw.config.maxDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.maxDate.getFullYear()\u0026\u0026e\u003ew.config.maxDate.getMonth())};w.monthsDropdownContainer.tabIndex\u003d-1,w.monthsDropdownContainer.innerHTML\u003d\"\";for(var n\u003d0;n\u003c12;n++)if(e(n)){var t\u003ds(\"option\",\"flatpickr-monthDropdown-month\");t.value\u003dnew Date(w.currentYear,n).getMonth().toString(),t.textContent\u003dh(n,w.config.shorthandCurrentMonth,w.l10n),t.tabIndex\u003d-1,w.currentMonth\u003d\u003d\u003dn\u0026\u0026(t.selected\u003d!0),w.monthsDropdownContainer.appendChild(t)}}}function U(){var e,n\u003ds(\"div\",\"flatpickr-month\"),t\u003dwindow.document.createDocumentFragment();w.config.showMonths\u003e1||\"static\"\u003d\u003d\u003dw.config.monthSelectorType?e\u003ds(\"span\",\"cur-month\"):(w.monthsDropdownContainer\u003ds(\"select\",\"flatpickr-monthDropdown-months\"),w.monthsDropdownContainer.setAttribute(\"aria-label\",w.l10n.monthAriaLabel),N(w.monthsDropdownContainer,\"change\",(function(e){var n\u003dg(e),t\u003dparseInt(n.value,10);w.changeMonth(t-w.currentMonth),pe(\"onMonthChange\")})),K(),e\u003dw.monthsDropdownContainer);var a\u003dm(\"cur-year\",{tabindex:\"-1\"}),i\u003da.getElementsByTagName(\"input\")[0];i.setAttribute(\"aria-label\",w.l10n.yearAriaLabel),w.config.minDate\u0026\u0026i.setAttribute(\"min\",w.config.minDate.getFullYear().toString()),w.config.maxDate\u0026\u0026(i.setAttribute(\"max\",w.config.maxDate.getFullYear().toString()),i.disabled\u003d!!w.config.minDate\u0026\u0026w.config.minDate.getFullYear()\u003d\u003d\u003dw.config.maxDate.getFullYear());var o\u003ds(\"div\",\"flatpickr-current-month\");return o.appendChild(e),o.appendChild(a),t.appendChild(o),n.appendChild(t),{container:n,yearElement:i,monthElement:e}}function q(){u(w.monthNav),w.monthNav.appendChild(w.prevMonthNav),w.config.showMonths\u0026\u0026(w.yearElements\u003d[],w.monthElements\u003d[]);for(var e\u003dw.config.showMonths;e--;){var n\u003dU();w.yearElements.push(n.yearElement),w.monthElements.push(n.monthElement),w.monthNav.appendChild(n.container)}w.monthNav.appendChild(w.nextMonthNav)}function $(){w.weekdayContainer?u(w.weekdayContainer):w.weekdayContainer\u003ds(\"div\",\"flatpickr-weekdays\");for(var e\u003dw.config.showMonths;e--;){var n\u003ds(\"div\",\"flatpickr-weekdaycontainer\");w.weekdayContainer.appendChild(n)}return z(),w.weekdayContainer}function z(){if(w.weekdayContainer){var e\u003dw.l10n.firstDayOfWeek,t\u003dn(w.l10n.weekdays.shorthand);e\u003e0\u0026\u0026e\u003ct.length\u0026\u0026(t\u003dn(t.splice(e,t.length),t.splice(0,e)));for(var a\u003dw.config.showMonths;a--;)w.weekdayContainer.children[a].innerHTML\u003d\"\\n      \u003cspan class\u003d\u0027flatpickr-weekday\u0027\u003e\\n        \"+t.join(\"\u003c/span\u003e\u003cspan class\u003d\u0027flatpickr-weekday\u0027\u003e\")+\"\\n      \u003c/span\u003e\\n      \"}}function G(e,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0);var t\u003dn?e:e-w.currentMonth;t\u003c0\u0026\u0026!0\u003d\u003d\u003dw._hidePrevMonthArrow||t\u003e0\u0026\u0026!0\u003d\u003d\u003dw._hideNextMonthArrow||(w.currentMonth+\u003dt,(w.currentMonth\u003c0||w.currentMonth\u003e11)\u0026\u0026(w.currentYear+\u003dw.currentMonth\u003e11?1:-1,w.currentMonth\u003d(w.currentMonth+12)%12,pe(\"onYearChange\"),K()),J(),pe(\"onMonthChange\"),De())}function V(e){return!(!w.config.appendTo||!w.config.appendTo.contains(e))||w.calendarContainer.contains(e)}function Z(e){if(w.isOpen\u0026\u0026!w.config.inline){var n\u003dg(e),t\u003dV(n),a\u003dn\u003d\u003d\u003dw.input||n\u003d\u003d\u003dw.altInput||w.element.contains(n)||e.path\u0026\u0026e.path.indexOf\u0026\u0026(~e.path.indexOf(w.input)||~e.path.indexOf(w.altInput)),i\u003d\"blur\"\u003d\u003d\u003de.type?a\u0026\u0026e.relatedTarget\u0026\u0026!V(e.relatedTarget):!a\u0026\u0026!t\u0026\u0026!V(e.relatedTarget),o\u003d!w.config.ignoredFocusElements.some((function(e){return e.contains(n)}));i\u0026\u0026o\u0026\u0026(void 0!\u003d\u003dw.timeContainer\u0026\u0026void 0!\u003d\u003dw.minuteElement\u0026\u0026void 0!\u003d\u003dw.hourElement\u0026\u0026\"\"!\u003d\u003dw.input.value\u0026\u0026void 0!\u003d\u003dw.input.value\u0026\u0026T(),w.close(),w.config\u0026\u0026\"range\"\u003d\u003d\u003dw.config.mode\u0026\u00261\u003d\u003d\u003dw.selectedDates.length\u0026\u0026(w.clear(!1),w.redraw()))}}function Q(e){if(!(!e||w.config.minDate\u0026\u0026e\u003cw.config.minDate.getFullYear()||w.config.maxDate\u0026\u0026e\u003ew.config.maxDate.getFullYear())){var n\u003de,t\u003dw.currentYear!\u003d\u003dn;w.currentYear\u003dn||w.currentYear,w.config.maxDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.maxDate.getFullYear()?w.currentMonth\u003dMath.min(w.config.maxDate.getMonth(),w.currentMonth):w.config.minDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.minDate.getFullYear()\u0026\u0026(w.currentMonth\u003dMath.max(w.config.minDate.getMonth(),w.currentMonth)),t\u0026\u0026(w.redraw(),pe(\"onYearChange\"),K())}}function X(e,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0);var t\u003dw.parseDate(e,void 0,n);if(w.config.minDate\u0026\u0026t\u0026\u0026M(t,w.config.minDate,void 0!\u003d\u003dn?n:!w.minDateHasTime)\u003c0||w.config.maxDate\u0026\u0026t\u0026\u0026M(t,w.config.maxDate,void 0!\u003d\u003dn?n:!w.maxDateHasTime)\u003e0)return!1;if(0\u003d\u003d\u003dw.config.enable.length\u0026\u00260\u003d\u003d\u003dw.config.disable.length)return!0;if(void 0\u003d\u003d\u003dt)return!1;for(var a\u003dw.config.enable.length\u003e0,i\u003da?w.config.enable:w.config.disable,o\u003d0,r\u003dvoid 0;o\u003ci.length;o++){if(\"function\"\u003d\u003dtypeof(r\u003di[o])\u0026\u0026r(t))return a;if(r instanceof Date\u0026\u0026void 0!\u003d\u003dt\u0026\u0026r.getTime()\u003d\u003d\u003dt.getTime())return a;if(\"string\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003dt){var l\u003dw.parseDate(r,void 0,!0);return l\u0026\u0026l.getTime()\u003d\u003d\u003dt.getTime()?a:!a}if(\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003dt\u0026\u0026r.from\u0026\u0026r.to\u0026\u0026t.getTime()\u003e\u003dr.from.getTime()\u0026\u0026t.getTime()\u003c\u003dr.to.getTime())return a}return!a}function ee(e){return void 0!\u003d\u003dw.daysContainer\u0026\u0026-1\u003d\u003d\u003de.className.indexOf(\"hidden\")\u0026\u0026-1\u003d\u003d\u003de.className.indexOf(\"flatpickr-disabled\")\u0026\u0026w.daysContainer.contains(e)}function ne(e){e.target!\u003d\u003dw._input||e.relatedTarget\u0026\u0026V(e.relatedTarget)||w.setDate(w._input.value,!0,e.target\u003d\u003d\u003dw.altInput?w.config.altFormat:w.config.dateFormat)}function te(e){var n\u003dg(e),t\u003dw.config.wrap?p.contains(n):n\u003d\u003d\u003dw._input,a\u003dw.config.allowInput,i\u003dw.isOpen\u0026\u0026(!a||!t),o\u003dw.config.inline\u0026\u0026t\u0026\u0026!a;if(13\u003d\u003d\u003de.keyCode\u0026\u0026t){if(a)return w.setDate(w._input.value,!0,n\u003d\u003d\u003dw.altInput?w.config.altFormat:w.config.dateFormat),n.blur();w.open()}else if(V(n)||i||o){var r\u003d!!w.timeContainer\u0026\u0026w.timeContainer.contains(n);switch(e.keyCode){case 13:r?(e.preventDefault(),T(),se()):ue(e);break;case 27:e.preventDefault(),se();break;case 8:case 46:t\u0026\u0026!w.config.allowInput\u0026\u0026(e.preventDefault(),w.clear());break;case 37:case 39:if(r||t)w.hourElement\u0026\u0026w.hourElement.focus();else if(e.preventDefault(),void 0!\u003d\u003dw.daysContainer\u0026\u0026(!1\u003d\u003d\u003da||document.activeElement\u0026\u0026ee(document.activeElement))){var l\u003d39\u003d\u003d\u003de.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),G(l),R(W(1),0)):R(void 0,l)}break;case 38:case 40:e.preventDefault();var c\u003d40\u003d\u003d\u003de.keyCode?1:-1;w.daysContainer\u0026\u0026void 0!\u003d\u003dn.$i||n\u003d\u003d\u003dw.input||n\u003d\u003d\u003dw.altInput?e.ctrlKey?(e.stopPropagation(),Q(w.currentYear-c),R(W(1),0)):r||R(void 0,7*c):n\u003d\u003d\u003dw.currentYearElement?Q(w.currentYear-c):w.config.enableTime\u0026\u0026(!r\u0026\u0026w.hourElement\u0026\u0026w.hourElement.focus(),T(e),w._debouncedChange());break;case 9:if(r){var d\u003d[w.hourElement,w.minuteElement,w.secondElement,w.amPM].concat(w.pluginElements).filter((function(e){return e})),s\u003dd.indexOf(n);if(-1!\u003d\u003ds){var u\u003dd[s+(e.shiftKey?-1:1)];e.preventDefault(),(u||w._input).focus()}}else!w.config.noCalendar\u0026\u0026w.daysContainer\u0026\u0026w.daysContainer.contains(n)\u0026\u0026e.shiftKey\u0026\u0026(e.preventDefault(),w._input.focus())}}if(void 0!\u003d\u003dw.amPM\u0026\u0026n\u003d\u003d\u003dw.amPM)switch(e.key){case w.l10n.amPM[0].charAt(0):case w.l10n.amPM[0].charAt(0).toLowerCase():w.amPM.textContent\u003dw.l10n.amPM[0],I(),be();break;case w.l10n.amPM[1].charAt(0):case w.l10n.amPM[1].charAt(0).toLowerCase():w.amPM.textContent\u003dw.l10n.amPM[1],I(),be()}(t||V(n))\u0026\u0026pe(\"onKeyDown\",e)}function ae(e){if(1\u003d\u003d\u003dw.selectedDates.length\u0026\u0026(!e||e.classList.contains(\"flatpickr-day\")\u0026\u0026!e.classList.contains(\"flatpickr-disabled\"))){for(var n\u003de?e.dateObj.getTime():w.days.firstElementChild.dateObj.getTime(),t\u003dw.parseDate(w.selectedDates[0],void 0,!0).getTime(),a\u003dMath.min(n,w.selectedDates[0].getTime()),i\u003dMath.max(n,w.selectedDates[0].getTime()),o\u003d!1,r\u003d0,l\u003d0,c\u003da;c\u003ci;c+\u003dy)X(new Date(c),!0)||(o\u003do||c\u003ea\u0026\u0026c\u003ci,c\u003ct\u0026\u0026(!r||c\u003er)?r\u003dc:c\u003et\u0026\u0026(!l||c\u003cl)\u0026\u0026(l\u003dc));for(var d\u003d0;d\u003cw.config.showMonths;d++)for(var s\u003dw.daysContainer.children[d],u\u003dfunction(a,i){var c,d,u,f\u003ds.children[a],m\u003df.dateObj.getTime(),g\u003dr\u003e0\u0026\u0026m\u003cr||l\u003e0\u0026\u0026m\u003el;return g?(f.classList.add(\"notAllowed\"),[\"inRange\",\"startRange\",\"endRange\"].forEach((function(e){f.classList.remove(e)})),\"continue\"):o\u0026\u0026!g?\"continue\":([\"startRange\",\"inRange\",\"endRange\",\"notAllowed\"].forEach((function(e){f.classList.remove(e)})),void(void 0!\u003d\u003de\u0026\u0026(e.classList.add(n\u003c\u003dw.selectedDates[0].getTime()?\"startRange\":\"endRange\"),t\u003cn\u0026\u0026m\u003d\u003d\u003dt?f.classList.add(\"startRange\"):t\u003en\u0026\u0026m\u003d\u003d\u003dt\u0026\u0026f.classList.add(\"endRange\"),m\u003e\u003dr\u0026\u0026(0\u003d\u003d\u003dl||m\u003c\u003dl)\u0026\u0026(d\u003dt,u\u003dn,(c\u003dm)\u003eMath.min(d,u)\u0026\u0026c\u003cMath.max(d,u))\u0026\u0026f.classList.add(\"inRange\"))))},f\u003d0,m\u003ds.children.length;f\u003cm;f++)u(f)}}function ie(){!w.isOpen||w.config.static||w.config.inline||ce()}function oe(e){return function(n){var t\u003dw.config[\"_\"+e+\"Date\"]\u003dw.parseDate(n,w.config.dateFormat),a\u003dw.config[\"_\"+(\"min\"\u003d\u003d\u003de?\"max\":\"min\")+\"Date\"];void 0!\u003d\u003dt\u0026\u0026(w[\"min\"\u003d\u003d\u003de?\"minDateHasTime\":\"maxDateHasTime\"]\u003dt.getHours()\u003e0||t.getMinutes()\u003e0||t.getSeconds()\u003e0),w.selectedDates\u0026\u0026(w.selectedDates\u003dw.selectedDates.filter((function(e){return X(e)})),w.selectedDates.length||\"min\"!\u003d\u003de||S(t),be()),w.daysContainer\u0026\u0026(de(),void 0!\u003d\u003dt?w.currentYearElement[e]\u003dt.getFullYear().toString():w.currentYearElement.removeAttribute(e),w.currentYearElement.disabled\u003d!!a\u0026\u0026void 0!\u003d\u003dt\u0026\u0026a.getFullYear()\u003d\u003d\u003dt.getFullYear())}}function re(){return w.config.wrap?p.querySelector(\"[data-input]\"):p}function le(){\"object\"!\u003dtypeof w.config.locale\u0026\u0026void 0\u003d\u003d\u003dk.l10ns[w.config.locale]\u0026\u0026w.config.errorHandler(new Error(\"flatpickr: invalid locale \"+w.config.locale)),w.l10n\u003de(e({},k.l10ns.default),\"object\"\u003d\u003dtypeof w.config.locale?w.config.locale:\"default\"!\u003d\u003dw.config.locale?k.l10ns[w.config.locale]:void 0),D.K\u003d\"(\"+w.l10n.amPM[0]+\"|\"+w.l10n.amPM[1]+\"|\"+w.l10n.amPM[0].toLowerCase()+\"|\"+w.l10n.amPM[1].toLowerCase()+\")\",void 0\u003d\u003d\u003de(e({},v),JSON.parse(JSON.stringify(p.dataset||{}))).time_24hr\u0026\u0026void 0\u003d\u003d\u003dk.defaultConfig.time_24hr\u0026\u0026(w.config.time_24hr\u003dw.l10n.time_24hr),w.formatDate\u003db(w),w.parseDate\u003dC({config:w.config,l10n:w.l10n})}function ce(e){if(void 0!\u003d\u003dw.calendarContainer){pe(\"onPreCalendarPosition\");var n\u003de||w._positionElement,t\u003dArray.prototype.reduce.call(w.calendarContainer.children,(function(e,n){return e+n.offsetHeight}),0),a\u003dw.calendarContainer.offsetWidth,i\u003dw.config.position.split(\" \"),o\u003di[0],r\u003di.length\u003e1?i[1]:null,l\u003dn.getBoundingClientRect(),c\u003dwindow.innerHeight-l.bottom,s\u003d\"above\"\u003d\u003d\u003do||\"below\"!\u003d\u003do\u0026\u0026c\u003ct\u0026\u0026l.top\u003et,u\u003dwindow.pageYOffset+l.top+(s?-t-2:n.offsetHeight+2);if(d(w.calendarContainer,\"arrowTop\",!s),d(w.calendarContainer,\"arrowBottom\",s),!w.config.inline){var f\u003dwindow.pageXOffset+l.left,m\u003d!1,g\u003d!1;\"center\"\u003d\u003d\u003dr?(f-\u003d(a-l.width)/2,m\u003d!0):\"right\"\u003d\u003d\u003dr\u0026\u0026(f-\u003da-l.width,g\u003d!0),d(w.calendarContainer,\"arrowLeft\",!m\u0026\u0026!g),d(w.calendarContainer,\"arrowCenter\",m),d(w.calendarContainer,\"arrowRight\",g);var p\u003dwindow.document.body.offsetWidth-(window.pageXOffset+l.right),h\u003df+a\u003ewindow.document.body.offsetWidth,v\u003dp+a\u003ewindow.document.body.offsetWidth;if(d(w.calendarContainer,\"rightMost\",h),!w.config.static)if(w.calendarContainer.style.top\u003du+\"px\",h)if(v){var D\u003dfunction(){for(var e\u003dnull,n\u003d0;n\u003cdocument.styleSheets.length;n++){var t\u003ddocument.styleSheets[n];try{t.cssRules}catch(e){continue}e\u003dt;break}return null!\u003de?e:(a\u003ddocument.createElement(\"style\"),document.head.appendChild(a),a.sheet);var a}();if(void 0\u003d\u003d\u003dD)return;var b\u003dwindow.document.body.offsetWidth,C\u003dMath.max(0,b/2-a/2),M\u003dD.cssRules.length,y\u003d\"{left:\"+l.left+\"px;right:auto;}\";d(w.calendarContainer,\"rightMost\",!1),d(w.calendarContainer,\"centerMost\",!0),D.insertRule(\".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after\"+y,M),w.calendarContainer.style.left\u003dC+\"px\",w.calendarContainer.style.right\u003d\"auto\"}else w.calendarContainer.style.left\u003d\"auto\",w.calendarContainer.style.right\u003dp+\"px\";else w.calendarContainer.style.left\u003df+\"px\",w.calendarContainer.style.right\u003d\"auto\"}}}function de(){w.config.noCalendar||w.isMobile||(K(),De(),J())}function se(){w._input.focus(),-1!\u003d\u003dwindow.navigator.userAgent.indexOf(\"MSIE\")||void 0!\u003d\u003dnavigator.msMaxTouchPoints?setTimeout(w.close,0):w.close()}function ue(e){e.preventDefault(),e.stopPropagation();var n\u003df(g(e),(function(e){return e.classList\u0026\u0026e.classList.contains(\"flatpickr-day\")\u0026\u0026!e.classList.contains(\"flatpickr-disabled\")\u0026\u0026!e.classList.contains(\"notAllowed\")}));if(void 0!\u003d\u003dn){var t\u003dn,a\u003dw.latestSelectedDateObj\u003dnew Date(t.dateObj.getTime()),i\u003d(a.getMonth()\u003cw.currentMonth||a.getMonth()\u003ew.currentMonth+w.config.showMonths-1)\u0026\u0026\"range\"!\u003d\u003dw.config.mode;if(w.selectedDateElem\u003dt,\"single\"\u003d\u003d\u003dw.config.mode)w.selectedDates\u003d[a];else if(\"multiple\"\u003d\u003d\u003dw.config.mode){var o\u003dve(a);o?w.selectedDates.splice(parseInt(o),1):w.selectedDates.push(a)}else\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026(2\u003d\u003d\u003dw.selectedDates.length\u0026\u0026w.clear(!1,!1),w.latestSelectedDateObj\u003da,w.selectedDates.push(a),0!\u003d\u003dM(a,w.selectedDates[0],!0)\u0026\u0026w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()})));if(I(),i){var r\u003dw.currentYear!\u003d\u003da.getFullYear();w.currentYear\u003da.getFullYear(),w.currentMonth\u003da.getMonth(),r\u0026\u0026(pe(\"onYearChange\"),K()),pe(\"onMonthChange\")}if(De(),J(),be(),i||\"range\"\u003d\u003d\u003dw.config.mode||1!\u003d\u003dw.config.showMonths?void 0!\u003d\u003dw.selectedDateElem\u0026\u0026void 0\u003d\u003d\u003dw.hourElement\u0026\u0026w.selectedDateElem\u0026\u0026w.selectedDateElem.focus():L(t),void 0!\u003d\u003dw.hourElement\u0026\u0026void 0!\u003d\u003dw.hourElement\u0026\u0026w.hourElement.focus(),w.config.closeOnSelect){var l\u003d\"single\"\u003d\u003d\u003dw.config.mode\u0026\u0026!w.config.enableTime,c\u003d\"range\"\u003d\u003d\u003dw.config.mode\u0026\u00262\u003d\u003d\u003dw.selectedDates.length\u0026\u0026!w.config.enableTime;(l||c)\u0026\u0026se()}A()}}w.parseDate\u003dC({config:w.config,l10n:w.l10n}),w._handlers\u003d[],w.pluginElements\u003d[],w.loadedPlugins\u003d[],w._bind\u003dN,w._setHoursFromDate\u003dS,w._positionCalendar\u003dce,w.changeMonth\u003dG,w.changeYear\u003dQ,w.clear\u003dfunction(e,n){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!0),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0),w.input.value\u003d\"\",void 0!\u003d\u003dw.altInput\u0026\u0026(w.altInput.value\u003d\"\"),void 0!\u003d\u003dw.mobileInput\u0026\u0026(w.mobileInput.value\u003d\"\"),w.selectedDates\u003d[],w.latestSelectedDateObj\u003dvoid 0,!0\u003d\u003d\u003dn\u0026\u0026(w.currentYear\u003dw._initialDate.getFullYear(),w.currentMonth\u003dw._initialDate.getMonth()),!0\u003d\u003d\u003dw.config.enableTime){var t\u003d_(),a\u003dt.hours,i\u003dt.minutes,o\u003dt.seconds;O(a,i,o)}w.redraw(),e\u0026\u0026pe(\"onChange\")},w.close\u003dfunction(){w.isOpen\u003d!1,w.isMobile||(void 0!\u003d\u003dw.calendarContainer\u0026\u0026w.calendarContainer.classList.remove(\"open\"),void 0!\u003d\u003dw._input\u0026\u0026w._input.classList.remove(\"active\")),pe(\"onClose\")},w._createElement\u003ds,w.destroy\u003dfunction(){void 0!\u003d\u003dw.config\u0026\u0026pe(\"onDestroy\");for(var e\u003dw._handlers.length;e--;){var n\u003dw._handlers[e];n.element.removeEventListener(n.event,n.handler,n.options)}if(w._handlers\u003d[],w.mobileInput)w.mobileInput.parentNode\u0026\u0026w.mobileInput.parentNode.removeChild(w.mobileInput),w.mobileInput\u003dvoid 0;else if(w.calendarContainer\u0026\u0026w.calendarContainer.parentNode)if(w.config.static\u0026\u0026w.calendarContainer.parentNode){var t\u003dw.calendarContainer.parentNode;if(t.lastChild\u0026\u0026t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else w.calendarContainer.parentNode.removeChild(w.calendarContainer);w.altInput\u0026\u0026(w.input.type\u003d\"text\",w.altInput.parentNode\u0026\u0026w.altInput.parentNode.removeChild(w.altInput),delete w.altInput),w.input\u0026\u0026(w.input.type\u003dw.input._type,w.input.classList.remove(\"flatpickr-input\"),w.input.removeAttribute(\"readonly\")),[\"_showTimeInput\",\"latestSelectedDateObj\",\"_hideNextMonthArrow\",\"_hidePrevMonthArrow\",\"__hideNextMonthArrow\",\"__hidePrevMonthArrow\",\"isMobile\",\"isOpen\",\"selectedDateElem\",\"minDateHasTime\",\"maxDateHasTime\",\"days\",\"daysContainer\",\"_input\",\"_positionElement\",\"innerContainer\",\"rContainer\",\"monthNav\",\"todayDateElem\",\"calendarContainer\",\"weekdayContainer\",\"prevMonthNav\",\"nextMonthNav\",\"monthsDropdownContainer\",\"currentMonthElement\",\"currentYearElement\",\"navigationCurrentMonth\",\"selectedDateElem\",\"config\"].forEach((function(e){try{delete w[e]}catch(e){}}))},w.isEnabled\u003dX,w.jumpToDate\u003dP,w.open\u003dfunction(e,n){if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dw._positionElement),!0\u003d\u003d\u003dw.isMobile){if(e){e.preventDefault();var t\u003dg(e);t\u0026\u0026t.blur()}return void 0!\u003d\u003dw.mobileInput\u0026\u0026(w.mobileInput.focus(),w.mobileInput.click()),void pe(\"onOpen\")}if(!w._input.disabled\u0026\u0026!w.config.inline){var a\u003dw.isOpen;w.isOpen\u003d!0,a||(w.calendarContainer.classList.add(\"open\"),w._input.classList.add(\"active\"),pe(\"onOpen\"),ce(n)),!0\u003d\u003d\u003dw.config.enableTime\u0026\u0026!0\u003d\u003d\u003dw.config.noCalendar\u0026\u0026(!1!\u003d\u003dw.config.allowInput||void 0!\u003d\u003de\u0026\u0026w.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return w.hourElement.select()}),50))}},w.redraw\u003dde,w.set\u003dfunction(e,n){if(null!\u003d\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e)for(var a in Object.assign(w.config,e),e)void 0!\u003d\u003dfe[a]\u0026\u0026fe[a].forEach((function(e){return e()}));else w.config[e]\u003dn,void 0!\u003d\u003dfe[e]?fe[e].forEach((function(e){return e()})):t.indexOf(e)\u003e-1\u0026\u0026(w.config[e]\u003dc(n));w.redraw(),be(!0)},w.setDate\u003dfunction(e,n,t){if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!1),void 0\u003d\u003d\u003dt\u0026\u0026(t\u003dw.config.dateFormat),0!\u003d\u003de\u0026\u0026!e||e instanceof Array\u0026\u00260\u003d\u003d\u003de.length)return w.clear(n);me(e,t),w.latestSelectedDateObj\u003dw.selectedDates[w.selectedDates.length-1],w.redraw(),P(void 0,n),S(),0\u003d\u003d\u003dw.selectedDates.length\u0026\u0026w.clear(!1),be(n),n\u0026\u0026pe(\"onChange\")},w.toggle\u003dfunction(e){if(!0\u003d\u003d\u003dw.isOpen)return w.close();w.open(e)};var fe\u003d{locale:[le,z],showMonths:[q,E,$],minDate:[P],maxDate:[P]};function me(e,n){var t\u003d[];if(e instanceof Array)t\u003de.map((function(e){return w.parseDate(e,n)}));else if(e instanceof Date||\"number\"\u003d\u003dtypeof e)t\u003d[w.parseDate(e,n)];else if(\"string\"\u003d\u003dtypeof e)switch(w.config.mode){case\"single\":case\"time\":t\u003d[w.parseDate(e,n)];break;case\"multiple\":t\u003de.split(w.config.conjunction).map((function(e){return w.parseDate(e,n)}));break;case\"range\":t\u003de.split(w.l10n.rangeSeparator).map((function(e){return w.parseDate(e,n)}))}else w.config.errorHandler(new Error(\"Invalid date supplied: \"+JSON.stringify(e)));w.selectedDates\u003dw.config.allowInvalidPreload?t:t.filter((function(e){return e instanceof Date\u0026\u0026X(e,!1)})),\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()}))}function ge(e){return e.slice().map((function(e){return\"string\"\u003d\u003dtypeof e||\"number\"\u003d\u003dtypeof e||e instanceof Date?w.parseDate(e,void 0,!0):e\u0026\u0026\"object\"\u003d\u003dtypeof e\u0026\u0026e.from\u0026\u0026e.to?{from:w.parseDate(e.from,void 0),to:w.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function pe(e,n){if(void 0!\u003d\u003dw.config){var t\u003dw.config[e];if(void 0!\u003d\u003dt\u0026\u0026t.length\u003e0)for(var a\u003d0;t[a]\u0026\u0026a\u003ct.length;a++)t[a](w.selectedDates,w.input.value,w,n);\"onChange\"\u003d\u003d\u003de\u0026\u0026(w.input.dispatchEvent(he(\"change\")),w.input.dispatchEvent(he(\"input\")))}}function he(e){var n\u003ddocument.createEvent(\"Event\");return n.initEvent(e,!0,!0),n}function ve(e){for(var n\u003d0;n\u003cw.selectedDates.length;n++)if(0\u003d\u003d\u003dM(w.selectedDates[n],e))return\"\"+n;return!1}function De(){w.config.noCalendar||w.isMobile||!w.monthNav||(w.yearElements.forEach((function(e,n){var t\u003dnew Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),w.config.showMonths\u003e1||\"static\"\u003d\u003d\u003dw.config.monthSelectorType?w.monthElements[n].textContent\u003dh(t.getMonth(),w.config.shorthandCurrentMonth,w.l10n)+\" \":w.monthsDropdownContainer.value\u003dt.getMonth().toString(),e.value\u003dt.getFullYear().toString()})),w._hidePrevMonthArrow\u003dvoid 0!\u003d\u003dw.config.minDate\u0026\u0026(w.currentYear\u003d\u003d\u003dw.config.minDate.getFullYear()?w.currentMonth\u003c\u003dw.config.minDate.getMonth():w.currentYear\u003cw.config.minDate.getFullYear()),w._hideNextMonthArrow\u003dvoid 0!\u003d\u003dw.config.maxDate\u0026\u0026(w.currentYear\u003d\u003d\u003dw.config.maxDate.getFullYear()?w.currentMonth+1\u003ew.config.maxDate.getMonth():w.currentYear\u003ew.config.maxDate.getFullYear()))}function we(e){return w.selectedDates.map((function(n){return w.formatDate(n,e)})).filter((function(e,n,t){return\"range\"!\u003d\u003dw.config.mode||w.config.enableTime||t.indexOf(e)\u003d\u003d\u003dn})).join(\"range\"!\u003d\u003dw.config.mode?w.config.conjunction:w.l10n.rangeSeparator)}function be(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!0),void 0!\u003d\u003dw.mobileInput\u0026\u0026w.mobileFormatStr\u0026\u0026(w.mobileInput.value\u003dvoid 0!\u003d\u003dw.latestSelectedDateObj?w.formatDate(w.latestSelectedDateObj,w.mobileFormatStr):\"\"),w.input.value\u003dwe(w.config.dateFormat),void 0!\u003d\u003dw.altInput\u0026\u0026(w.altInput.value\u003dwe(w.config.altFormat)),!1!\u003d\u003de\u0026\u0026pe(\"onValueUpdate\")}function Ce(e){var n\u003dg(e),t\u003dw.prevMonthNav.contains(n),a\u003dw.nextMonthNav.contains(n);t||a?G(t?-1:1):w.yearElements.indexOf(n)\u003e\u003d0?n.select():n.classList.contains(\"arrowUp\")?w.changeYear(w.currentYear+1):n.classList.contains(\"arrowDown\")\u0026\u0026w.changeYear(w.currentYear-1)}return function(){w.element\u003dw.input\u003dp,w.isOpen\u003d!1,function(){var n\u003d[\"wrap\",\"weekNumbers\",\"allowInput\",\"allowInvalidPreload\",\"clickOpens\",\"time_24hr\",\"enableTime\",\"noCalendar\",\"altInput\",\"shorthandCurrentMonth\",\"inline\",\"static\",\"enableSeconds\",\"disableMobile\"],i\u003de(e({},JSON.parse(JSON.stringify(p.dataset||{}))),v),o\u003d{};w.config.parseDate\u003di.parseDate,w.config.formatDate\u003di.formatDate,Object.defineProperty(w.config,\"enable\",{get:function(){return w.config._enable},set:function(e){w.config._enable\u003dge(e)}}),Object.defineProperty(w.config,\"disable\",{get:function(){return w.config._disable},set:function(e){w.config._disable\u003dge(e)}});var r\u003d\"time\"\u003d\u003d\u003di.mode;if(!i.dateFormat\u0026\u0026(i.enableTime||r)){var l\u003dk.defaultConfig.dateFormat||a.dateFormat;o.dateFormat\u003di.noCalendar||r?\"H:i\"+(i.enableSeconds?\":S\":\"\"):l+\" H:i\"+(i.enableSeconds?\":S\":\"\")}if(i.altInput\u0026\u0026(i.enableTime||r)\u0026\u0026!i.altFormat){var d\u003dk.defaultConfig.altFormat||a.altFormat;o.altFormat\u003di.noCalendar||r?\"h:i\"+(i.enableSeconds?\":S K\":\" K\"):d+\" h:i\"+(i.enableSeconds?\":S\":\"\")+\" K\"}Object.defineProperty(w.config,\"minDate\",{get:function(){return w.config._minDate},set:oe(\"min\")}),Object.defineProperty(w.config,\"maxDate\",{get:function(){return w.config._maxDate},set:oe(\"max\")});var s\u003dfunction(e){return function(n){w.config[\"min\"\u003d\u003d\u003de?\"_minTime\":\"_maxTime\"]\u003dw.parseDate(n,\"H:i:S\")}};Object.defineProperty(w.config,\"minTime\",{get:function(){return w.config._minTime},set:s(\"min\")}),Object.defineProperty(w.config,\"maxTime\",{get:function(){return w.config._maxTime},set:s(\"max\")}),\"time\"\u003d\u003d\u003di.mode\u0026\u0026(w.config.noCalendar\u003d!0,w.config.enableTime\u003d!0),Object.assign(w.config,o,i);for(var u\u003d0;u\u003cn.length;u++)w.config[n[u]]\u003d!0\u003d\u003d\u003dw.config[n[u]]||\"true\"\u003d\u003d\u003dw.config[n[u]];for(t.filter((function(e){return void 0!\u003d\u003dw.config[e]})).forEach((function(e){w.config[e]\u003dc(w.config[e]||[]).map(x)})),w.isMobile\u003d!w.config.disableMobile\u0026\u0026!w.config.inline\u0026\u0026\"single\"\u003d\u003d\u003dw.config.mode\u0026\u0026!w.config.disable.length\u0026\u0026!w.config.enable.length\u0026\u0026!w.config.weekNumbers\u0026\u0026/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),u\u003d0;u\u003cw.config.plugins.length;u++){var f\u003dw.config.plugins[u](w)||{};for(var m in f)t.indexOf(m)\u003e-1?w.config[m]\u003dc(f[m]).map(x).concat(w.config[m]):void 0\u003d\u003d\u003di[m]\u0026\u0026(w.config[m]\u003df[m])}i.altInputClass||(w.config.altInputClass\u003dre().className+\" \"+w.config.altInputClass),pe(\"onParseConfig\")}(),le(),w.input\u003dre(),w.input?(w.input._type\u003dw.input.type,w.input.type\u003d\"text\",w.input.classList.add(\"flatpickr-input\"),w._input\u003dw.input,w.config.altInput\u0026\u0026(w.altInput\u003ds(w.input.nodeName,w.config.altInputClass),w._input\u003dw.altInput,w.altInput.placeholder\u003dw.input.placeholder,w.altInput.disabled\u003dw.input.disabled,w.altInput.required\u003dw.input.required,w.altInput.tabIndex\u003dw.input.tabIndex,w.altInput.type\u003d\"text\",w.input.setAttribute(\"type\",\"hidden\"),!w.config.static\u0026\u0026w.input.parentNode\u0026\u0026w.input.parentNode.insertBefore(w.altInput,w.input.nextSibling)),w.config.allowInput||w._input.setAttribute(\"readonly\",\"readonly\"),w._positionElement\u003dw.config.positionElement||w._input):w.config.errorHandler(new Error(\"Invalid input element specified\")),function(){w.selectedDates\u003d[],w.now\u003dw.parseDate(w.config.now)||new Date;var e\u003dw.config.defaultDate||(\"INPUT\"!\u003d\u003dw.input.nodeName\u0026\u0026\"TEXTAREA\"!\u003d\u003dw.input.nodeName||!w.input.placeholder||w.input.value!\u003d\u003dw.input.placeholder?w.input.value:null);e\u0026\u0026me(e,w.config.dateFormat),w._initialDate\u003dw.selectedDates.length\u003e0?w.selectedDates[0]:w.config.minDate\u0026\u0026w.config.minDate.getTime()\u003ew.now.getTime()?w.config.minDate:w.config.maxDate\u0026\u0026w.config.maxDate.getTime()\u003cw.now.getTime()?w.config.maxDate:w.now,w.currentYear\u003dw._initialDate.getFullYear(),w.currentMonth\u003dw._initialDate.getMonth(),w.selectedDates.length\u003e0\u0026\u0026(w.latestSelectedDateObj\u003dw.selectedDates[0]),void 0!\u003d\u003dw.config.minTime\u0026\u0026(w.config.minTime\u003dw.parseDate(w.config.minTime,\"H:i\")),void 0!\u003d\u003dw.config.maxTime\u0026\u0026(w.config.maxTime\u003dw.parseDate(w.config.maxTime,\"H:i\")),w.minDateHasTime\u003d!!w.config.minDate\u0026\u0026(w.config.minDate.getHours()\u003e0||w.config.minDate.getMinutes()\u003e0||w.config.minDate.getSeconds()\u003e0),w.maxDateHasTime\u003d!!w.config.maxDate\u0026\u0026(w.config.maxDate.getHours()\u003e0||w.config.maxDate.getMinutes()\u003e0||w.config.maxDate.getSeconds()\u003e0)}(),w.utils\u003d{getDaysInMonth:function(e,n){return void 0\u003d\u003d\u003de\u0026\u0026(e\u003dw.currentMonth),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dw.currentYear),1\u003d\u003d\u003de\u0026\u0026(n%4\u003d\u003d0\u0026\u0026n%100!\u003d0||n%400\u003d\u003d0)?29:w.l10n.daysInMonth[e]}},w.isMobile||function(){var e\u003dwindow.document.createDocumentFragment();if(w.calendarContainer\u003ds(\"div\",\"flatpickr-calendar\"),w.calendarContainer.tabIndex\u003d-1,!w.config.noCalendar){if(e.appendChild((w.monthNav\u003ds(\"div\",\"flatpickr-months\"),w.yearElements\u003d[],w.monthElements\u003d[],w.prevMonthNav\u003ds(\"span\",\"flatpickr-prev-month\"),w.prevMonthNav.innerHTML\u003dw.config.prevArrow,w.nextMonthNav\u003ds(\"span\",\"flatpickr-next-month\"),w.nextMonthNav.innerHTML\u003dw.config.nextArrow,q(),Object.defineProperty(w,\"_hidePrevMonthArrow\",{get:function(){return w.__hidePrevMonthArrow},set:function(e){w.__hidePrevMonthArrow!\u003d\u003de\u0026\u0026(d(w.prevMonthNav,\"flatpickr-disabled\",e),w.__hidePrevMonthArrow\u003de)}}),Object.defineProperty(w,\"_hideNextMonthArrow\",{get:function(){return w.__hideNextMonthArrow},set:function(e){w.__hideNextMonthArrow!\u003d\u003de\u0026\u0026(d(w.nextMonthNav,\"flatpickr-disabled\",e),w.__hideNextMonthArrow\u003de)}}),w.currentYearElement\u003dw.yearElements[0],De(),w.monthNav)),w.innerContainer\u003ds(\"div\",\"flatpickr-innerContainer\"),w.config.weekNumbers){var n\u003dfunction(){w.calendarContainer.classList.add(\"hasWeeks\");var e\u003ds(\"div\",\"flatpickr-weekwrapper\");e.appendChild(s(\"span\",\"flatpickr-weekday\",w.l10n.weekAbbreviation));var n\u003ds(\"div\",\"flatpickr-weeks\");return e.appendChild(n),{weekWrapper:e,weekNumbers:n}}(),t\u003dn.weekWrapper,a\u003dn.weekNumbers;w.innerContainer.appendChild(t),w.weekNumbers\u003da,w.weekWrapper\u003dt}w.rContainer\u003ds(\"div\",\"flatpickr-rContainer\"),w.rContainer.appendChild($()),w.daysContainer||(w.daysContainer\u003ds(\"div\",\"flatpickr-days\"),w.daysContainer.tabIndex\u003d-1),J(),w.rContainer.appendChild(w.daysContainer),w.innerContainer.appendChild(w.rContainer),e.appendChild(w.innerContainer)}w.config.enableTime\u0026\u0026e.appendChild(function(){w.calendarContainer.classList.add(\"hasTime\"),w.config.noCalendar\u0026\u0026w.calendarContainer.classList.add(\"noCalendar\"),w.timeContainer\u003ds(\"div\",\"flatpickr-time\"),w.timeContainer.tabIndex\u003d-1;var e\u003ds(\"span\",\"flatpickr-time-separator\",\":\"),n\u003dm(\"flatpickr-hour\",{\"aria-label\":w.l10n.hourAriaLabel});w.hourElement\u003dn.getElementsByTagName(\"input\")[0];var t\u003dm(\"flatpickr-minute\",{\"aria-label\":w.l10n.minuteAriaLabel});if(w.minuteElement\u003dt.getElementsByTagName(\"input\")[0],w.hourElement.tabIndex\u003dw.minuteElement.tabIndex\u003d-1,w.hourElement.value\u003do(w.latestSelectedDateObj?w.latestSelectedDateObj.getHours():w.config.time_24hr?w.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(w.config.defaultHour)),w.minuteElement.value\u003do(w.latestSelectedDateObj?w.latestSelectedDateObj.getMinutes():w.config.defaultMinute),w.hourElement.setAttribute(\"step\",w.config.hourIncrement.toString()),w.minuteElement.setAttribute(\"step\",w.config.minuteIncrement.toString()),w.hourElement.setAttribute(\"min\",w.config.time_24hr?\"0\":\"1\"),w.hourElement.setAttribute(\"max\",w.config.time_24hr?\"23\":\"12\"),w.minuteElement.setAttribute(\"min\",\"0\"),w.minuteElement.setAttribute(\"max\",\"59\"),w.timeContainer.appendChild(n),w.timeContainer.appendChild(e),w.timeContainer.appendChild(t),w.config.time_24hr\u0026\u0026w.timeContainer.classList.add(\"time24hr\"),w.config.enableSeconds){w.timeContainer.classList.add(\"hasSeconds\");var a\u003dm(\"flatpickr-second\");w.secondElement\u003da.getElementsByTagName(\"input\")[0],w.secondElement.value\u003do(w.latestSelectedDateObj?w.latestSelectedDateObj.getSeconds():w.config.defaultSeconds),w.secondElement.setAttribute(\"step\",w.minuteElement.getAttribute(\"step\")),w.secondElement.setAttribute(\"min\",\"0\"),w.secondElement.setAttribute(\"max\",\"59\"),w.timeContainer.appendChild(s(\"span\",\"flatpickr-time-separator\",\":\")),w.timeContainer.appendChild(a)}return w.config.time_24hr||(w.amPM\u003ds(\"span\",\"flatpickr-am-pm\",w.l10n.amPM[r((w.latestSelectedDateObj?w.hourElement.value:w.config.defaultHour)\u003e11)]),w.amPM.title\u003dw.l10n.toggleTitle,w.amPM.tabIndex\u003d-1,w.timeContainer.appendChild(w.amPM)),w.timeContainer}()),d(w.calendarContainer,\"rangeMode\",\"range\"\u003d\u003d\u003dw.config.mode),d(w.calendarContainer,\"animate\",!0\u003d\u003d\u003dw.config.animate),d(w.calendarContainer,\"multiMonth\",w.config.showMonths\u003e1),w.calendarContainer.appendChild(e);var i\u003dvoid 0!\u003d\u003dw.config.appendTo\u0026\u0026void 0!\u003d\u003dw.config.appendTo.nodeType;if((w.config.inline||w.config.static)\u0026\u0026(w.calendarContainer.classList.add(w.config.inline?\"inline\":\"static\"),w.config.inline\u0026\u0026(!i\u0026\u0026w.element.parentNode?w.element.parentNode.insertBefore(w.calendarContainer,w._input.nextSibling):void 0!\u003d\u003dw.config.appendTo\u0026\u0026w.config.appendTo.appendChild(w.calendarContainer)),w.config.static)){var l\u003ds(\"div\",\"flatpickr-wrapper\");w.element.parentNode\u0026\u0026w.element.parentNode.insertBefore(l,w.element),l.appendChild(w.element),w.altInput\u0026\u0026l.appendChild(w.altInput),l.appendChild(w.calendarContainer)}w.config.static||w.config.inline||(void 0!\u003d\u003dw.config.appendTo?w.config.appendTo:window.document.body).appendChild(w.calendarContainer)}(),function(){if(w.config.wrap\u0026\u0026[\"open\",\"close\",\"toggle\",\"clear\"].forEach((function(e){Array.prototype.forEach.call(w.element.querySelectorAll(\"[data-\"+e+\"]\"),(function(n){return N(n,\"click\",w[e])}))})),w.isMobile)!function(){var e\u003dw.config.enableTime?w.config.noCalendar?\"time\":\"datetime-local\":\"date\";w.mobileInput\u003ds(\"input\",w.input.className+\" flatpickr-mobile\"),w.mobileInput.tabIndex\u003d1,w.mobileInput.type\u003de,w.mobileInput.disabled\u003dw.input.disabled,w.mobileInput.required\u003dw.input.required,w.mobileInput.placeholder\u003dw.input.placeholder,w.mobileFormatStr\u003d\"datetime-local\"\u003d\u003d\u003de?\"Y-m-d\\\\TH:i:S\":\"date\"\u003d\u003d\u003de?\"Y-m-d\":\"H:i:S\",w.selectedDates.length\u003e0\u0026\u0026(w.mobileInput.defaultValue\u003dw.mobileInput.value\u003dw.formatDate(w.selectedDates[0],w.mobileFormatStr)),w.config.minDate\u0026\u0026(w.mobileInput.min\u003dw.formatDate(w.config.minDate,\"Y-m-d\")),w.config.maxDate\u0026\u0026(w.mobileInput.max\u003dw.formatDate(w.config.maxDate,\"Y-m-d\")),w.input.getAttribute(\"step\")\u0026\u0026(w.mobileInput.step\u003dString(w.input.getAttribute(\"step\"))),w.input.type\u003d\"hidden\",void 0!\u003d\u003dw.altInput\u0026\u0026(w.altInput.type\u003d\"hidden\");try{w.input.parentNode\u0026\u0026w.input.parentNode.insertBefore(w.mobileInput,w.input.nextSibling)}catch(e){}N(w.mobileInput,\"change\",(function(e){w.setDate(g(e).value,!1,w.mobileFormatStr),pe(\"onChange\"),pe(\"onClose\")}))}();else{var e\u003dl(ie,50);if(w._debouncedChange\u003dl(A,300),w.daysContainer\u0026\u0026!/iPhone|iPad|iPod/i.test(navigator.userAgent)\u0026\u0026N(w.daysContainer,\"mouseover\",(function(e){\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026ae(g(e))})),N(window.document.body,\"keydown\",te),w.config.inline||w.config.static||N(window,\"resize\",e),void 0!\u003d\u003dwindow.ontouchstart?N(window.document,\"touchstart\",Z):N(window.document,\"click\",Z),N(window.document,\"focus\",Z,{capture:!0}),!0\u003d\u003d\u003dw.config.clickOpens\u0026\u0026(N(w._input,\"focus\",w.open),N(w._input,\"click\",w.open)),void 0!\u003d\u003dw.daysContainer\u0026\u0026(N(w.monthNav,\"click\",Ce),N(w.monthNav,[\"keyup\",\"increment\"],F),N(w.daysContainer,\"click\",ue)),void 0!\u003d\u003dw.timeContainer\u0026\u0026void 0!\u003d\u003dw.minuteElement\u0026\u0026void 0!\u003d\u003dw.hourElement){var n\u003dfunction(e){return g(e).select()};N(w.timeContainer,[\"increment\"],T),N(w.timeContainer,\"blur\",T,{capture:!0}),N(w.timeContainer,\"click\",Y),N([w.hourElement,w.minuteElement],[\"focus\",\"click\"],n),void 0!\u003d\u003dw.secondElement\u0026\u0026N(w.secondElement,\"focus\",(function(){return w.secondElement\u0026\u0026w.secondElement.select()})),void 0!\u003d\u003dw.amPM\u0026\u0026N(w.amPM,\"click\",(function(e){T(e),A()}))}w.config.allowInput\u0026\u0026N(w._input,\"blur\",ne)}}(),(w.selectedDates.length||w.config.noCalendar)\u0026\u0026(w.config.enableTime\u0026\u0026S(w.config.noCalendar?w.latestSelectedDateObj||w.config.minDate:void 0),be(!1)),E();var n\u003d/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!w.isMobile\u0026\u0026n\u0026\u0026ce(),pe(\"onReady\")}(),w}function E(e,n){for(var t\u003dArray.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a\u003d[],i\u003d0;i\u003ct.length;i++){var o\u003dt[i];try{if(null!\u003d\u003do.getAttribute(\"data-fp-omit\"))continue;void 0!\u003d\u003do._flatpickr\u0026\u0026(o._flatpickr.destroy(),o._flatpickr\u003dvoid 0),o._flatpickr\u003dx(o,n||{}),a.push(o._flatpickr)}catch(e){console.error(e)}}return 1\u003d\u003d\u003da.length?a[0]:a}\"function\"!\u003dtypeof Object.assign\u0026\u0026(Object.assign\u003dfunction(e){for(var n\u003d[],t\u003d1;t\u003carguments.length;t++)n[t-1]\u003darguments[t];if(!e)throw TypeError(\"Cannot convert undefined or null to object\");for(var a\u003dfunction(n){n\u0026\u0026Object.keys(n).forEach((function(t){return e[t]\u003dn[t]}))},i\u003d0,o\u003dn;i\u003co.length;i++){var r\u003do[i];a(r)}return e}),\"undefined\"!\u003dtypeof HTMLElement\u0026\u0026\"undefined\"!\u003dtypeof HTMLCollection\u0026\u0026\"undefined\"!\u003dtypeof NodeList\u0026\u0026(HTMLCollection.prototype.flatpickr\u003dNodeList.prototype.flatpickr\u003dfunction(e){return E(this,e)},HTMLElement.prototype.flatpickr\u003dfunction(e){return E([this],e)});var k\u003dfunction(e,n){return\"string\"\u003d\u003dtypeof e?E(window.document.querySelectorAll(e),n):e instanceof Node?E([e],n):E(e,n)};return k.defaultConfig\u003d{},k.l10ns\u003d{en:e({},i),default:e({},i)},k.localize\u003dfunction(n){k.l10ns.default\u003de(e({},k.l10ns.default),n)},k.setDefaults\u003dfunction(n){k.defaultConfig\u003de(e({},k.defaultConfig),n)},k.parseDate\u003dC({}),k.formatDate\u003db({}),k.compareDates\u003dM,\"undefined\"!\u003dtypeof jQuery\u0026\u0026void 0!\u003d\u003djQuery.fn\u0026\u0026(jQuery.fn.flatpickr\u003dfunction(e){return E(this,e)}),Date.prototype.fp_incr\u003dfunction(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+(\"string\"\u003d\u003dtypeof e?parseInt(e,10):e))},\"undefined\"!\u003dtypeof window\u0026\u0026(window.flatpickr\u003dk),k},\"object\"\u003d\u003dtypeof t\u0026\u0026void 0!\u003d\u003dn?n.exports\u003dr():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(r):(o\u003do||self).flatpickr\u003dr()},\n      436: function _(t,e,a,r,i){r(),a.default\u003d\u0027.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;background:#fff;-webkit-box-shadow:1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0, 0, 0, 0.08);box-shadow:1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0, 0, 0, 0.08);}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible;}.flatpickr-calendar.open{display:inline-block;z-index:99999;}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);animation:fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);}.flatpickr-calendar.inline{display:block;position:relative;top:2px;}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px);}.flatpickr-calendar.static.open{z-index:999;display:block;}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important;}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0;}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0;}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #e6e6e6;}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto;}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:\\\u0027\\\u0027;height:0;width:0;left:22px;}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px;}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%;}.flatpickr-calendar:before{border-width:5px;margin:0 -5px;}.flatpickr-calendar:after{border-width:4px;margin:0 -4px;}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%;}.flatpickr-calendar.arrowTop:before{border-bottom-color:#e6e6e6;}.flatpickr-calendar.arrowTop:after{border-bottom-color:#fff;}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%;}.flatpickr-calendar.arrowBottom:before{border-top-color:#e6e6e6;}.flatpickr-calendar.arrowBottom:after{border-top-color:#fff;}.flatpickr-calendar:focus{outline:0;}.flatpickr-wrapper{position:relative;display:inline-block;}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.flatpickr-months .flatpickr-month{background:transparent;color:rgba(0, 0, 0, 0.9);fill:rgba(0, 0, 0, 0.9);height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:rgba(0, 0, 0, 0.9);fill:rgba(0, 0, 0, 0.9);}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none;}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative;}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0;}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0;}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#959ea9;}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747;}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px;}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill 0.1s;transition:fill 0.1s;fill:inherit;}.numInputWrapper{position:relative;height:auto;}.numInputWrapper input,.numInputWrapper span{display:inline-block;}.numInputWrapper input{width:100%;}.numInputWrapper input::-ms-clear{display:none;}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none;}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(57, 57, 57, 0.15);-webkit-box-sizing:border-box;box-sizing:border-box;}.numInputWrapper span:hover{background:rgba(0, 0, 0, 0.1);}.numInputWrapper span:active{background:rgba(0, 0, 0, 0.2);}.numInputWrapper span:after{display:block;content:\"\";position:absolute;}.numInputWrapper span.arrowUp{top:0;border-bottom:0;}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(57, 57, 57, 0.6);top:26%;}.numInputWrapper span.arrowDown{top:50%;}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(57, 57, 57, 0.6);top:40%;}.numInputWrapper span svg{width:inherit;height:auto;}.numInputWrapper span svg path{fill:rgba(0, 0, 0, 0.5);}.numInputWrapper:hover{background:rgba(0, 0, 0, 0.05);}.numInputWrapper:hover span{opacity:1;}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0px, 0px, 0px);transform:translate3d(0px, 0px, 0px);}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:0.5ch;padding:0;}.flatpickr-current-month span.cur-month:hover{background:rgba(0, 0, 0, 0.05);}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\\0;display:inline-block;}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:rgba(0, 0, 0, 0.9);}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:rgba(0, 0, 0, 0.9);}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 0.5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;}.flatpickr-current-month input.cur-year:focus{outline:0;}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(0, 0, 0, 0.5);background:transparent;pointer-events:none;}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:transparent;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 0.5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto;}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none;}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0, 0, 0, 0.05);}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:transparent;outline:none;padding:0;}.flatpickr-weekdays{background:transparent;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px;}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;}span.flatpickr-weekday{cursor:default;font-size:90%;background:transparent;color:rgba(0, 0, 0, 0.54);line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder;}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0;}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px;}.flatpickr-days:focus{outline:0;}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0px, 0px, 0px);transform:translate3d(0px, 0px, 0px);opacity:1;}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #e6e6e6;box-shadow:-1px 0 0 #e6e6e6;}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#393939;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e6e6e6;border-color:#e6e6e6;}.flatpickr-day.today{border-color:#959ea9;}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#959ea9;background:#959ea9;color:#fff;}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#569ff7;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#569ff7;}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px;}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0;}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #569ff7;box-shadow:-10px 0 0 #569ff7;}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px;}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;box-shadow:-5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(57, 57, 57, 0.3);background:transparent;border-color:transparent;cursor:default;}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(57, 57, 57, 0.1);}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #569ff7, 5px 0 0 #569ff7;box-shadow:-5px 0 0 #569ff7, 5px 0 0 #569ff7;}.flatpickr-day.hidden{visibility:hidden;}.rangeMode .flatpickr-day{margin-top:1px;}.flatpickr-weekwrapper{float:left;}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;-webkit-box-shadow:1px 0 0 #e6e6e6;box-shadow:1px 0 0 #e6e6e6;}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px;}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(57, 57, 57, 0.3);background:transparent;cursor:default;border:none;}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box;}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.flatpickr-time:after{content:\"\";display:table;clear:both;}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left;}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#393939;}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#393939;}.flatpickr-time.hasSeconds .numInputWrapper{width:26%;}.flatpickr-time.time24hr .numInputWrapper{width:49%;}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#393939;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;}.flatpickr-time input.flatpickr-hour{font-weight:bold;}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400;}.flatpickr-time input:focus{outline:0;border:0;}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#393939;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400;}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eee;}.flatpickr-input[readonly]{cursor:pointer;}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0);}to{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0);}to{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);}}.flatpickr-calendar{background:transparent;opacity:0;display:none;text-align:center;visibility:hidden;padding:0;-webkit-animation:none;animation:none;direction:ltr;border:0;font-size:14px;line-height:24px;border-radius:5px;position:absolute;width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;-ms-touch-action:manipulation;touch-action:manipulation;-webkit-box-shadow:0 3px 13px rgba(0, 0, 0, 0.08);box-shadow:0 3px 13px rgba(0, 0, 0, 0.08);}.flatpickr-calendar.open,.flatpickr-calendar.inline{opacity:1;max-height:640px;visibility:visible;}.flatpickr-calendar.open{display:inline-block;z-index:99999;}.flatpickr-calendar.animate.open{-webkit-animation:fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);animation:fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);}.flatpickr-calendar.inline{display:block;position:relative;top:2px;}.flatpickr-calendar.static{position:absolute;top:calc(100% + 2px);}.flatpickr-calendar.static.open{z-index:999;display:block;}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7){-webkit-box-shadow:none !important;box-shadow:none !important;}.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1){-webkit-box-shadow:-2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;box-shadow:-2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;}.flatpickr-calendar .hasWeeks .dayContainer,.flatpickr-calendar .hasTime .dayContainer{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0;}.flatpickr-calendar .hasWeeks .dayContainer{border-left:0;}.flatpickr-calendar.hasTime .flatpickr-time{height:40px;border-top:1px solid #eceef1;}.flatpickr-calendar.hasTime .flatpickr-innerContainer{border-bottom:0;}.flatpickr-calendar.hasTime .flatpickr-time{border:1px solid #eceef1;}.flatpickr-calendar.noCalendar.hasTime .flatpickr-time{height:auto;}.flatpickr-calendar:before,.flatpickr-calendar:after{position:absolute;display:block;pointer-events:none;border:solid transparent;content:\\\u0027\\\u0027;height:0;width:0;left:22px;}.flatpickr-calendar.rightMost:before,.flatpickr-calendar.arrowRight:before,.flatpickr-calendar.rightMost:after,.flatpickr-calendar.arrowRight:after{left:auto;right:22px;}.flatpickr-calendar.arrowCenter:before,.flatpickr-calendar.arrowCenter:after{left:50%;right:50%;}.flatpickr-calendar:before{border-width:5px;margin:0 -5px;}.flatpickr-calendar:after{border-width:4px;margin:0 -4px;}.flatpickr-calendar.arrowTop:before,.flatpickr-calendar.arrowTop:after{bottom:100%;}.flatpickr-calendar.arrowTop:before{border-bottom-color:#eceef1;}.flatpickr-calendar.arrowTop:after{border-bottom-color:#eceef1;}.flatpickr-calendar.arrowBottom:before,.flatpickr-calendar.arrowBottom:after{top:100%;}.flatpickr-calendar.arrowBottom:before{border-top-color:#eceef1;}.flatpickr-calendar.arrowBottom:after{border-top-color:#eceef1;}.flatpickr-calendar:focus{outline:0;}.flatpickr-wrapper{position:relative;display:inline-block;}.flatpickr-months{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}.flatpickr-months .flatpickr-month{border-radius:5px 5px 0 0;background:#eceef1;color:#5a6171;fill:#5a6171;height:34px;line-height:1;text-align:center;position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;overflow:hidden;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;}.flatpickr-months .flatpickr-prev-month,.flatpickr-months .flatpickr-next-month{text-decoration:none;cursor:pointer;position:absolute;top:0;height:34px;padding:10px;z-index:3;color:#5a6171;fill:#5a6171;}.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,.flatpickr-months .flatpickr-next-month.flatpickr-disabled{display:none;}.flatpickr-months .flatpickr-prev-month i,.flatpickr-months .flatpickr-next-month i{position:relative;}.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,.flatpickr-months .flatpickr-next-month.flatpickr-prev-month{left:0;}.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,.flatpickr-months .flatpickr-next-month.flatpickr-next-month{right:0;}.flatpickr-months .flatpickr-prev-month:hover,.flatpickr-months .flatpickr-next-month:hover{color:#bbb;}.flatpickr-months .flatpickr-prev-month:hover svg,.flatpickr-months .flatpickr-next-month:hover svg{fill:#f64747;}.flatpickr-months .flatpickr-prev-month svg,.flatpickr-months .flatpickr-next-month svg{width:14px;height:14px;}.flatpickr-months .flatpickr-prev-month svg path,.flatpickr-months .flatpickr-next-month svg path{-webkit-transition:fill 0.1s;transition:fill 0.1s;fill:inherit;}.numInputWrapper{position:relative;height:auto;}.numInputWrapper input,.numInputWrapper span{display:inline-block;}.numInputWrapper input{width:100%;}.numInputWrapper input::-ms-clear{display:none;}.numInputWrapper input::-webkit-outer-spin-button,.numInputWrapper input::-webkit-inner-spin-button{margin:0;-webkit-appearance:none;}.numInputWrapper span{position:absolute;right:0;width:14px;padding:0 4px 0 2px;height:50%;line-height:50%;opacity:0;cursor:pointer;border:1px solid rgba(72, 72, 72, 0.15);-webkit-box-sizing:border-box;box-sizing:border-box;}.numInputWrapper span:hover{background:rgba(0, 0, 0, 0.1);}.numInputWrapper span:active{background:rgba(0, 0, 0, 0.2);}.numInputWrapper span:after{display:block;content:\"\";position:absolute;}.numInputWrapper span.arrowUp{top:0;border-bottom:0;}.numInputWrapper span.arrowUp:after{border-left:4px solid transparent;border-right:4px solid transparent;border-bottom:4px solid rgba(72, 72, 72, 0.6);top:26%;}.numInputWrapper span.arrowDown{top:50%;}.numInputWrapper span.arrowDown:after{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid rgba(72, 72, 72, 0.6);top:40%;}.numInputWrapper span svg{width:inherit;height:auto;}.numInputWrapper span svg path{fill:rgba(90, 97, 113, 0.5);}.numInputWrapper:hover{background:rgba(0, 0, 0, 0.05);}.numInputWrapper:hover span{opacity:1;}.flatpickr-current-month{font-size:135%;line-height:inherit;font-weight:300;color:inherit;position:absolute;width:75%;left:12.5%;padding:7.48px 0 0 0;line-height:1;height:34px;display:inline-block;text-align:center;-webkit-transform:translate3d(0px, 0px, 0px);transform:translate3d(0px, 0px, 0px);}.flatpickr-current-month span.cur-month{font-family:inherit;font-weight:700;color:inherit;display:inline-block;margin-left:0.5ch;padding:0;}.flatpickr-current-month span.cur-month:hover{background:rgba(0, 0, 0, 0.05);}.flatpickr-current-month .numInputWrapper{width:6ch;width:7ch\\0;display:inline-block;}.flatpickr-current-month .numInputWrapper span.arrowUp:after{border-bottom-color:#5a6171;}.flatpickr-current-month .numInputWrapper span.arrowDown:after{border-top-color:#5a6171;}.flatpickr-current-month input.cur-year{background:transparent;-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;cursor:text;padding:0 0 0 0.5ch;margin:0;display:inline-block;font-size:inherit;font-family:inherit;font-weight:300;line-height:inherit;height:auto;border:0;border-radius:0;vertical-align:initial;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;}.flatpickr-current-month input.cur-year:focus{outline:0;}.flatpickr-current-month input.cur-year[disabled],.flatpickr-current-month input.cur-year[disabled]:hover{font-size:100%;color:rgba(90, 97, 113, 0.5);background:transparent;pointer-events:none;}.flatpickr-current-month .flatpickr-monthDropdown-months{appearance:menulist;background:#eceef1;border:none;border-radius:0;box-sizing:border-box;color:inherit;cursor:pointer;font-size:inherit;font-family:inherit;font-weight:300;height:auto;line-height:inherit;margin:-1px 0 0 0;outline:none;padding:0 0 0 0.5ch;position:relative;vertical-align:initial;-webkit-box-sizing:border-box;-webkit-appearance:menulist;-moz-appearance:menulist;width:auto;}.flatpickr-current-month .flatpickr-monthDropdown-months:focus,.flatpickr-current-month .flatpickr-monthDropdown-months:active{outline:none;}.flatpickr-current-month .flatpickr-monthDropdown-months:hover{background:rgba(0, 0, 0, 0.05);}.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month{background-color:#eceef1;outline:none;padding:0;}.flatpickr-weekdays{background:#eceef1;text-align:center;overflow:hidden;width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;height:28px;}.flatpickr-weekdays .flatpickr-weekdaycontainer{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;}span.flatpickr-weekday{cursor:default;font-size:90%;background:#eceef1;color:#5a6171;line-height:1;margin:0;text-align:center;display:block;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;font-weight:bolder;}.dayContainer,.flatpickr-weeks{padding:1px 0 0 0;}.flatpickr-days{position:relative;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:start;-webkit-align-items:flex-start;-ms-flex-align:start;align-items:flex-start;width:307.875px;border-left:1px solid #eceef1;border-right:1px solid #eceef1;}.flatpickr-days:focus{outline:0;}.dayContainer{padding:0;outline:0;text-align:left;width:307.875px;min-width:307.875px;max-width:307.875px;-webkit-box-sizing:border-box;box-sizing:border-box;display:inline-block;display:-ms-flexbox;display:-webkit-box;display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-wrap:wrap;-ms-flex-pack:justify;-webkit-justify-content:space-around;justify-content:space-around;-webkit-transform:translate3d(0px, 0px, 0px);transform:translate3d(0px, 0px, 0px);opacity:1;}.dayContainer + .dayContainer{-webkit-box-shadow:-1px 0 0 #eceef1;box-shadow:-1px 0 0 #eceef1;}.flatpickr-day{background:none;border:1px solid transparent;border-radius:150px;-webkit-box-sizing:border-box;box-sizing:border-box;color:#484848;cursor:pointer;font-weight:400;width:14.2857143%;-webkit-flex-basis:14.2857143%;-ms-flex-preferred-size:14.2857143%;flex-basis:14.2857143%;max-width:39px;height:39px;line-height:39px;margin:0;display:inline-block;position:relative;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;text-align:center;}.flatpickr-day.inRange,.flatpickr-day.prevMonthDay.inRange,.flatpickr-day.nextMonthDay.inRange,.flatpickr-day.today.inRange,.flatpickr-day.prevMonthDay.today.inRange,.flatpickr-day.nextMonthDay.today.inRange,.flatpickr-day:hover,.flatpickr-day.prevMonthDay:hover,.flatpickr-day.nextMonthDay:hover,.flatpickr-day:focus,.flatpickr-day.prevMonthDay:focus,.flatpickr-day.nextMonthDay:focus{cursor:pointer;outline:0;background:#e2e2e2;border-color:#e2e2e2;}.flatpickr-day.today{border-color:#bbb;}.flatpickr-day.today:hover,.flatpickr-day.today:focus{border-color:#bbb;background:#bbb;color:#fff;}.flatpickr-day.selected,.flatpickr-day.startRange,.flatpickr-day.endRange,.flatpickr-day.selected.inRange,.flatpickr-day.startRange.inRange,.flatpickr-day.endRange.inRange,.flatpickr-day.selected:focus,.flatpickr-day.startRange:focus,.flatpickr-day.endRange:focus,.flatpickr-day.selected:hover,.flatpickr-day.startRange:hover,.flatpickr-day.endRange:hover,.flatpickr-day.selected.prevMonthDay,.flatpickr-day.startRange.prevMonthDay,.flatpickr-day.endRange.prevMonthDay,.flatpickr-day.selected.nextMonthDay,.flatpickr-day.startRange.nextMonthDay,.flatpickr-day.endRange.nextMonthDay{background:#ff5a5f;-webkit-box-shadow:none;box-shadow:none;color:#fff;border-color:#ff5a5f;}.flatpickr-day.selected.startRange,.flatpickr-day.startRange.startRange,.flatpickr-day.endRange.startRange{border-radius:50px 0 0 50px;}.flatpickr-day.selected.endRange,.flatpickr-day.startRange.endRange,.flatpickr-day.endRange.endRange{border-radius:0 50px 50px 0;}.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)){-webkit-box-shadow:-10px 0 0 #ff5a5f;box-shadow:-10px 0 0 #ff5a5f;}.flatpickr-day.selected.startRange.endRange,.flatpickr-day.startRange.startRange.endRange,.flatpickr-day.endRange.startRange.endRange{border-radius:50px;}.flatpickr-day.inRange{border-radius:0;-webkit-box-shadow:-5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2;box-shadow:-5px 0 0 #e2e2e2, 5px 0 0 #e2e2e2;}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover,.flatpickr-day.prevMonthDay,.flatpickr-day.nextMonthDay,.flatpickr-day.notAllowed,.flatpickr-day.notAllowed.prevMonthDay,.flatpickr-day.notAllowed.nextMonthDay{color:rgba(72, 72, 72, 0.3);background:transparent;border-color:transparent;cursor:default;}.flatpickr-day.flatpickr-disabled,.flatpickr-day.flatpickr-disabled:hover{cursor:not-allowed;color:rgba(72, 72, 72, 0.1);}.flatpickr-day.week.selected{border-radius:0;-webkit-box-shadow:-5px 0 0 #ff5a5f, 5px 0 0 #ff5a5f;box-shadow:-5px 0 0 #ff5a5f, 5px 0 0 #ff5a5f;}.flatpickr-day.hidden{visibility:hidden;}.rangeMode .flatpickr-day{margin-top:1px;}.flatpickr-weekwrapper{float:left;}.flatpickr-weekwrapper .flatpickr-weeks{padding:0 12px;border-left:1px solid #eceef1;}.flatpickr-weekwrapper .flatpickr-weekday{float:none;width:100%;line-height:28px;}.flatpickr-weekwrapper span.flatpickr-day,.flatpickr-weekwrapper span.flatpickr-day:hover{display:block;width:100%;max-width:none;color:rgba(72, 72, 72, 0.3);background:transparent;cursor:default;border:none;}.flatpickr-innerContainer{display:block;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;background:#fff;border-bottom:1px solid #eceef1;}.flatpickr-rContainer{display:inline-block;padding:0;-webkit-box-sizing:border-box;box-sizing:border-box;}.flatpickr-time{text-align:center;outline:0;display:block;height:0;line-height:40px;max-height:40px;-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;background:#fff;border-radius:0 0 5px 5px;}.flatpickr-time:after{content:\"\";display:table;clear:both;}.flatpickr-time .numInputWrapper{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:40%;height:40px;float:left;}.flatpickr-time .numInputWrapper span.arrowUp:after{border-bottom-color:#484848;}.flatpickr-time .numInputWrapper span.arrowDown:after{border-top-color:#484848;}.flatpickr-time.hasSeconds .numInputWrapper{width:26%;}.flatpickr-time.time24hr .numInputWrapper{width:49%;}.flatpickr-time input{background:transparent;-webkit-box-shadow:none;box-shadow:none;border:0;border-radius:0;text-align:center;margin:0;padding:0;height:inherit;line-height:inherit;color:#484848;font-size:14px;position:relative;-webkit-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:textfield;-moz-appearance:textfield;appearance:textfield;}.flatpickr-time input.flatpickr-hour{font-weight:bold;}.flatpickr-time input.flatpickr-minute,.flatpickr-time input.flatpickr-second{font-weight:400;}.flatpickr-time input:focus{outline:0;border:0;}.flatpickr-time .flatpickr-time-separator,.flatpickr-time .flatpickr-am-pm{height:inherit;float:left;line-height:inherit;color:#484848;font-weight:bold;width:2%;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;}.flatpickr-time .flatpickr-am-pm{outline:0;width:18%;cursor:pointer;text-align:center;font-weight:400;}.flatpickr-time input:hover,.flatpickr-time .flatpickr-am-pm:hover,.flatpickr-time input:focus,.flatpickr-time .flatpickr-am-pm:focus{background:#eaeaea;}.flatpickr-input[readonly]{cursor:pointer;}@-webkit-keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0);}to{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);}}@keyframes fpFadeInDown{from{opacity:0;-webkit-transform:translate3d(0, -20px, 0);transform:translate3d(0, -20px, 0);}to{opacity:1;-webkit-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);}}span.flatpickr-day.selected{font-weight:bold;}\u0027},\n      437: function _(e,t,a,i,r){i();const n\u003de(1).__importDefault(e(181)),s\u003de(438),d\u003de(8);class _ extends s.AbstractRangeSliderView{}a.DateRangeSliderView\u003d_,_.__name__\u003d\"DateRangeSliderView\";class l extends s.AbstractSlider{constructor(e){super(e),this.behaviour\u003d\"drag\",this.connected\u003d[!1,!0,!1]}static init_DateRangeSlider(){this.prototype.default_view\u003d_,this.override({format:\"%d %b %Y\"})}_formatter(e,t){return d.isString(t)?n.default(e,t):t.compute(e)}}a.DateRangeSlider\u003dl,l.__name__\u003d\"DateRangeSlider\",l.init_DateRangeSlider()},\n      438: function _(t,e,i,s,l){s();const r\u003dt(1),o\u003dr.__importStar(t(439)),n\u003dt(43),a\u003dt(9),d\u003dt(22),_\u003dt(420),h\u003dt(166),c\u003dr.__importStar(t(440)),m\u003dc,u\u003dr.__importDefault(t(441)),p\u003dr.__importStar(t(427));class b extends _.ControlView{*controls(){yield this.slider_el}get noUiSlider(){return this.slider_el.noUiSlider}connect_signals(){super.connect_signals();const{direction:t,orientation:e,tooltips:i}\u003dthis.model.properties;this.on_change([t,e,i],(()\u003d\u003ethis.render()));const{start:s,end:l,value:r,step:o,title:n}\u003dthis.model.properties;this.on_change([s,l,r,o],(()\u003d\u003e{const{start:t,end:e,value:i,step:s}\u003dthis._calc_to();this.noUiSlider.updateOptions({range:{min:t,max:e},start:i,step:s})}));const{bar_color:a}\u003dthis.model.properties;this.on_change(a,(()\u003d\u003e{this._set_bar_color()}));const{show_value:d}\u003dthis.model.properties;this.on_change([r,n,d],(()\u003d\u003ethis._update_title()))}styles(){return[...super.styles(),u.default,c.default]}_update_title(){var t;n.empty(this.title_el);const e\u003dnull\u003d\u003dthis.model.title||0\u003d\u003dthis.model.title.length\u0026\u0026!this.model.show_value;if(this.title_el.style.display\u003de?\"none\":\"\",!e\u0026\u0026(0!\u003d(null\u003d\u003d\u003d(t\u003dthis.model.title)||void 0\u003d\u003d\u003dt?void 0:t.length)\u0026\u0026(this.title_el.textContent\u003d`${this.model.title}: `),this.model.show_value)){const{value:t}\u003dthis._calc_to(),e\u003dt.map((t\u003d\u003ethis.model.pretty(t))).join(\" .. \");this.title_el.appendChild(n.span({class:m.slider_value},e))}}_set_bar_color(){if(!this.model.disabled){this.slider_el.querySelector(\".noUi-connect\").style.backgroundColor\u003dd.color2css(this.model.bar_color)}}render(){super.render();const{start:t,end:e,value:i,step:s}\u003dthis._calc_to();let l;if(this.model.tooltips){const t\u003d{to:t\u003d\u003ethis.model.pretty(t)};l\u003da.repeat(t,i.length)}else l\u003d!1;if(null\u003d\u003dthis.slider_el){this.slider_el\u003dn.div(),o.create(this.slider_el,{range:{min:t,max:e},start:i,step:s,behaviour:this.model.behaviour,connect:this.model.connected,tooltips:l,orientation:this.model.orientation,direction:this.model.direction}),this.noUiSlider.on(\"slide\",((t,e,i)\u003d\u003ethis._slide(i))),this.noUiSlider.on(\"change\",((t,e,i)\u003d\u003ethis._change(i)));const r\u003d(t,e)\u003d\u003e{if(!l)return;this.slider_el.querySelectorAll(\".noUi-handle\")[t].querySelector(\".noUi-tooltip\").style.display\u003de?\"block\":\"\"};this.noUiSlider.on(\"start\",((t,e)\u003d\u003er(e,!0))),this.noUiSlider.on(\"end\",((t,e)\u003d\u003er(e,!1)))}else this.noUiSlider.updateOptions({range:{min:t,max:e},start:i,step:s});this._set_bar_color(),this.model.disabled?this.slider_el.setAttribute(\"disabled\",\"true\"):this.slider_el.removeAttribute(\"disabled\"),this.title_el\u003dn.div({class:m.slider_title}),this._update_title(),this.group_el\u003dn.div({class:p.input_group},this.title_el,this.slider_el),this.el.appendChild(this.group_el)}_slide(t){this.model.value\u003dthis._calc_from(t)}_change(t){const e\u003dthis._calc_from(t);this.model.setv({value:e,value_throttled:e})}}b.__name__\u003d\"AbstractBaseSliderView\";class v extends b{_calc_to(){return{start:this.model.start,end:this.model.end,value:[this.model.value],step:this.model.step}}_calc_from([t]){return Number.isInteger(this.model.start)\u0026\u0026Number.isInteger(this.model.end)\u0026\u0026Number.isInteger(this.model.step)?Math.round(t):t}}i.AbstractSliderView\u003dv,v.__name__\u003d\"AbstractSliderView\";class g extends b{_calc_to(){return{start:this.model.start,end:this.model.end,value:this.model.value,step:this.model.step}}_calc_from(t){return t}}i.AbstractRangeSliderView\u003dg,g.__name__\u003d\"AbstractRangeSliderView\";class S extends _.Control{constructor(t){super(t),this.connected\u003d!1}static init_AbstractSlider(){this.define((({Any:t,Boolean:e,Number:i,String:s,Color:l,Or:r,Enum:o,Ref:n,Nullable:a})\u003d\u003e({title:[a(s),\"\"],show_value:[e,!0],start:[t],end:[t],value:[t],value_throttled:[t],step:[i,1],format:[r(s,n(h.TickFormatter))],direction:[o(\"ltr\",\"rtl\"),\"ltr\"],tooltips:[e,!0],bar_color:[l,\"#e6e6e6\"]})))}pretty(t){return this._formatter(t,this.format)}}i.AbstractSlider\u003dS,S.__name__\u003d\"AbstractSlider\",S.init_AbstractSlider()},\n      439: function _(t,e,r,n,i){\n      /*! nouislider - 14.6.3 - 11/19/2020 */\n      var o;o\u003dfunction(){\"use strict\";var t\u003d\"14.6.3\";function e(t){t.parentElement.removeChild(t)}function r(t){return null!\u003dt}function n(t){t.preventDefault()}function i(t){return\"number\"\u003d\u003dtypeof t\u0026\u0026!isNaN(t)\u0026\u0026isFinite(t)}function o(t,e,r){r\u003e0\u0026\u0026(u(t,e),setTimeout((function(){c(t,e)}),r))}function s(t){return Math.max(Math.min(t,100),0)}function a(t){return Array.isArray(t)?t:[t]}function l(t){var e\u003d(t\u003dString(t)).split(\".\");return e.length\u003e1?e[1].length:0}function u(t,e){t.classList\u0026\u0026!/\\s/.test(e)?t.classList.add(e):t.className+\u003d\" \"+e}function c(t,e){t.classList\u0026\u0026!/\\s/.test(e)?t.classList.remove(e):t.className\u003dt.className.replace(new RegExp(\"(^|\\\\b)\"+e.split(\" \").join(\"|\")+\"(\\\\b|$)\",\"gi\"),\" \")}function p(t){var e\u003dvoid 0!\u003d\u003dwindow.pageXOffset,r\u003d\"CSS1Compat\"\u003d\u003d\u003d(t.compatMode||\"\");return{x:e?window.pageXOffset:r?t.documentElement.scrollLeft:t.body.scrollLeft,y:e?window.pageYOffset:r?t.documentElement.scrollTop:t.body.scrollTop}}function f(t,e){return 100/(e-t)}function d(t,e,r){return 100*e/(t[r+1]-t[r])}function h(t,e){for(var r\u003d1;t\u003e\u003de[r];)r+\u003d1;return r}function m(t,e,r){if(r\u003e\u003dt.slice(-1)[0])return 100;var n\u003dh(r,t),i\u003dt[n-1],o\u003dt[n],s\u003de[n-1],a\u003de[n];return s+function(t,e){return d(t,t[0]\u003c0?e+Math.abs(t[0]):e-t[0],0)}([i,o],r)/f(s,a)}function g(t,e,r,n){if(100\u003d\u003d\u003dn)return n;var i\u003dh(n,t),o\u003dt[i-1],s\u003dt[i];return r?n-o\u003e(s-o)/2?s:o:e[i-1]?t[i-1]+function(t,e){return Math.round(t/e)*e}(n-t[i-1],e[i-1]):n}function v(t,e,r){var n;if(\"number\"\u003d\u003dtypeof e\u0026\u0026(e\u003d[e]),!Array.isArray(e))throw new Error(\"noUiSlider (14.6.3): \u0027range\u0027 contains invalid value.\");if(!i(n\u003d\"min\"\u003d\u003d\u003dt?0:\"max\"\u003d\u003d\u003dt?100:parseFloat(t))||!i(e[0]))throw new Error(\"noUiSlider (14.6.3): \u0027range\u0027 value isn\u0027t numeric.\");r.xPct.push(n),r.xVal.push(e[0]),n?r.xSteps.push(!isNaN(e[1])\u0026\u0026e[1]):isNaN(e[1])||(r.xSteps[0]\u003de[1]),r.xHighestCompleteStep.push(0)}function b(t,e,r){if(e)if(r.xVal[t]!\u003d\u003dr.xVal[t+1]){r.xSteps[t]\u003dd([r.xVal[t],r.xVal[t+1]],e,0)/f(r.xPct[t],r.xPct[t+1]);var n\u003d(r.xVal[t+1]-r.xVal[t])/r.xNumSteps[t],i\u003dMath.ceil(Number(n.toFixed(3))-1),o\u003dr.xVal[t]+r.xNumSteps[t]*i;r.xHighestCompleteStep[t]\u003do}else r.xSteps[t]\u003dr.xHighestCompleteStep[t]\u003dr.xVal[t]}function x(t,e,r){var n;this.xPct\u003d[],this.xVal\u003d[],this.xSteps\u003d[r||!1],this.xNumSteps\u003d[!1],this.xHighestCompleteStep\u003d[],this.snap\u003de;var i\u003d[];for(n in t)t.hasOwnProperty(n)\u0026\u0026i.push([t[n],n]);for(i.length\u0026\u0026\"object\"\u003d\u003dtypeof i[0][0]?i.sort((function(t,e){return t[0][0]-e[0][0]})):i.sort((function(t,e){return t[0]-e[0]})),n\u003d0;n\u003ci.length;n++)v(i[n][1],i[n][0],this);for(this.xNumSteps\u003dthis.xSteps.slice(0),n\u003d0;n\u003cthis.xNumSteps.length;n++)b(n,this.xNumSteps[n],this)}x.prototype.getDistance\u003dfunction(t){var e,r\u003d[];for(e\u003d0;e\u003cthis.xNumSteps.length-1;e++){var n\u003dthis.xNumSteps[e];if(n\u0026\u0026t/n%1!\u003d0)throw new Error(\"noUiSlider (14.6.3): \u0027limit\u0027, \u0027margin\u0027 and \u0027padding\u0027 of \"+this.xPct[e]+\"% range must be divisible by step.\");r[e]\u003dd(this.xVal,t,e)}return r},x.prototype.getAbsoluteDistance\u003dfunction(t,e,r){var n,i\u003d0;if(t\u003cthis.xPct[this.xPct.length-1])for(;t\u003ethis.xPct[i+1];)i++;else t\u003d\u003d\u003dthis.xPct[this.xPct.length-1]\u0026\u0026(i\u003dthis.xPct.length-2);r||t!\u003d\u003dthis.xPct[i+1]||i++;var o\u003d1,s\u003de[i],a\u003d0,l\u003d0,u\u003d0,c\u003d0;for(n\u003dr?(t-this.xPct[i])/(this.xPct[i+1]-this.xPct[i]):(this.xPct[i+1]-t)/(this.xPct[i+1]-this.xPct[i]);s\u003e0;)a\u003dthis.xPct[i+1+c]-this.xPct[i+c],e[i+c]*o+100-100*n\u003e100?(l\u003da*n,o\u003d(s-100*n)/e[i+c],n\u003d1):(l\u003de[i+c]*a/100*o,o\u003d0),r?(u-\u003dl,this.xPct.length+c\u003e\u003d1\u0026\u0026c--):(u+\u003dl,this.xPct.length-c\u003e\u003d1\u0026\u0026c++),s\u003de[i+c]*o;return t+u},x.prototype.toStepping\u003dfunction(t){return t\u003dm(this.xVal,this.xPct,t)},x.prototype.fromStepping\u003dfunction(t){return function(t,e,r){if(r\u003e\u003d100)return t.slice(-1)[0];var n\u003dh(r,e),i\u003dt[n-1],o\u003dt[n],s\u003de[n-1];return function(t,e){return e*(t[1]-t[0])/100+t[0]}([i,o],(r-s)*f(s,e[n]))}(this.xVal,this.xPct,t)},x.prototype.getStep\u003dfunction(t){return t\u003dg(this.xPct,this.xSteps,this.snap,t)},x.prototype.getDefaultStep\u003dfunction(t,e,r){var n\u003dh(t,this.xPct);return(100\u003d\u003d\u003dt||e\u0026\u0026t\u003d\u003d\u003dthis.xPct[n-1])\u0026\u0026(n\u003dMath.max(n-1,1)),(this.xVal[n]-this.xVal[n-1])/r},x.prototype.getNearbySteps\u003dfunction(t){var e\u003dh(t,this.xPct);return{stepBefore:{startValue:this.xVal[e-2],step:this.xNumSteps[e-2],highestStep:this.xHighestCompleteStep[e-2]},thisStep:{startValue:this.xVal[e-1],step:this.xNumSteps[e-1],highestStep:this.xHighestCompleteStep[e-1]},stepAfter:{startValue:this.xVal[e],step:this.xNumSteps[e],highestStep:this.xHighestCompleteStep[e]}}},x.prototype.countStepDecimals\u003dfunction(){var t\u003dthis.xNumSteps.map(l);return Math.max.apply(null,t)},x.prototype.convert\u003dfunction(t){return this.getStep(this.toStepping(t))};var S\u003d{to:function(t){return void 0!\u003d\u003dt\u0026\u0026t.toFixed(2)},from:Number},w\u003d{target:\"target\",base:\"base\",origin:\"origin\",handle:\"handle\",handleLower:\"handle-lower\",handleUpper:\"handle-upper\",touchArea:\"touch-area\",horizontal:\"horizontal\",vertical:\"vertical\",background:\"background\",connect:\"connect\",connects:\"connects\",ltr:\"ltr\",rtl:\"rtl\",textDirectionLtr:\"txt-dir-ltr\",textDirectionRtl:\"txt-dir-rtl\",draggable:\"draggable\",drag:\"state-drag\",tap:\"state-tap\",active:\"active\",tooltip:\"tooltip\",pips:\"pips\",pipsHorizontal:\"pips-horizontal\",pipsVertical:\"pips-vertical\",marker:\"marker\",markerHorizontal:\"marker-horizontal\",markerVertical:\"marker-vertical\",markerNormal:\"marker-normal\",markerLarge:\"marker-large\",markerSub:\"marker-sub\",value:\"value\",valueHorizontal:\"value-horizontal\",valueVertical:\"value-vertical\",valueNormal:\"value-normal\",valueLarge:\"value-large\",valueSub:\"value-sub\"},y\u003d\".__tooltips\",E\u003d\".__aria\";function C(t){if(function(t){return\"object\"\u003d\u003dtypeof t\u0026\u0026\"function\"\u003d\u003dtypeof t.to\u0026\u0026\"function\"\u003d\u003dtypeof t.from}(t))return!0;throw new Error(\"noUiSlider (14.6.3): \u0027format\u0027 requires \u0027to\u0027 and \u0027from\u0027 methods.\")}function P(t,e){if(!i(e))throw new Error(\"noUiSlider (14.6.3): \u0027step\u0027 is not numeric.\");t.singleStep\u003de}function N(t,e){if(!i(e))throw new Error(\"noUiSlider (14.6.3): \u0027keyboardPageMultiplier\u0027 is not numeric.\");t.keyboardPageMultiplier\u003de}function k(t,e){if(!i(e))throw new Error(\"noUiSlider (14.6.3): \u0027keyboardDefaultStep\u0027 is not numeric.\");t.keyboardDefaultStep\u003de}function U(t,e){if(\"object\"!\u003dtypeof e||Array.isArray(e))throw new Error(\"noUiSlider (14.6.3): \u0027range\u0027 is not an object.\");if(void 0\u003d\u003d\u003de.min||void 0\u003d\u003d\u003de.max)throw new Error(\"noUiSlider (14.6.3): Missing \u0027min\u0027 or \u0027max\u0027 in \u0027range\u0027.\");if(e.min\u003d\u003d\u003de.max)throw new Error(\"noUiSlider (14.6.3): \u0027range\u0027 \u0027min\u0027 and \u0027max\u0027 cannot be equal.\");t.spectrum\u003dnew x(e,t.snap,t.singleStep)}function A(t,e){if(e\u003da(e),!Array.isArray(e)||!e.length)throw new Error(\"noUiSlider (14.6.3): \u0027start\u0027 option is incorrect.\");t.handles\u003de.length,t.start\u003de}function V(t,e){if(t.snap\u003de,\"boolean\"!\u003dtypeof e)throw new Error(\"noUiSlider (14.6.3): \u0027snap\u0027 option must be a boolean.\")}function D(t,e){if(t.animate\u003de,\"boolean\"!\u003dtypeof e)throw new Error(\"noUiSlider (14.6.3): \u0027animate\u0027 option must be a boolean.\")}function M(t,e){if(t.animationDuration\u003de,\"number\"!\u003dtypeof e)throw new Error(\"noUiSlider (14.6.3): \u0027animationDuration\u0027 option must be a number.\")}function O(t,e){var r,n\u003d[!1];if(\"lower\"\u003d\u003d\u003de?e\u003d[!0,!1]:\"upper\"\u003d\u003d\u003de\u0026\u0026(e\u003d[!1,!0]),!0\u003d\u003d\u003de||!1\u003d\u003d\u003de){for(r\u003d1;r\u003ct.handles;r++)n.push(e);n.push(!1)}else{if(!Array.isArray(e)||!e.length||e.length!\u003d\u003dt.handles+1)throw new Error(\"noUiSlider (14.6.3): \u0027connect\u0027 option doesn\u0027t match handle count.\");n\u003de}t.connect\u003dn}function L(t,e){switch(e){case\"horizontal\":t.ort\u003d0;break;case\"vertical\":t.ort\u003d1;break;default:throw new Error(\"noUiSlider (14.6.3): \u0027orientation\u0027 option is invalid.\")}}function z(t,e){if(!i(e))throw new Error(\"noUiSlider (14.6.3): \u0027margin\u0027 option must be numeric.\");0!\u003d\u003de\u0026\u0026(t.margin\u003dt.spectrum.getDistance(e))}function H(t,e){if(!i(e))throw new Error(\"noUiSlider (14.6.3): \u0027limit\u0027 option must be numeric.\");if(t.limit\u003dt.spectrum.getDistance(e),!t.limit||t.handles\u003c2)throw new Error(\"noUiSlider (14.6.3): \u0027limit\u0027 option is only supported on linear sliders with 2 or more handles.\")}function j(t,e){var r;if(!i(e)\u0026\u0026!Array.isArray(e))throw new Error(\"noUiSlider (14.6.3): \u0027padding\u0027 option must be numeric or array of exactly 2 numbers.\");if(Array.isArray(e)\u0026\u00262!\u003d\u003de.length\u0026\u0026!i(e[0])\u0026\u0026!i(e[1]))throw new Error(\"noUiSlider (14.6.3): \u0027padding\u0027 option must be numeric or array of exactly 2 numbers.\");if(0!\u003d\u003de){for(Array.isArray(e)||(e\u003d[e,e]),t.padding\u003d[t.spectrum.getDistance(e[0]),t.spectrum.getDistance(e[1])],r\u003d0;r\u003ct.spectrum.xNumSteps.length-1;r++)if(t.padding[0][r]\u003c0||t.padding[1][r]\u003c0)throw new Error(\"noUiSlider (14.6.3): \u0027padding\u0027 option must be a positive number(s).\");var n\u003de[0]+e[1],o\u003dt.spectrum.xVal[0];if(n/(t.spectrum.xVal[t.spectrum.xVal.length-1]-o)\u003e1)throw new Error(\"noUiSlider (14.6.3): \u0027padding\u0027 option must not exceed 100% of the range.\")}}function F(t,e){switch(e){case\"ltr\":t.dir\u003d0;break;case\"rtl\":t.dir\u003d1;break;default:throw new Error(\"noUiSlider (14.6.3): \u0027direction\u0027 option was not recognized.\")}}function R(t,e){if(\"string\"!\u003dtypeof e)throw new Error(\"noUiSlider (14.6.3): \u0027behaviour\u0027 must be a string containing options.\");var r\u003de.indexOf(\"tap\")\u003e\u003d0,n\u003de.indexOf(\"drag\")\u003e\u003d0,i\u003de.indexOf(\"fixed\")\u003e\u003d0,o\u003de.indexOf(\"snap\")\u003e\u003d0,s\u003de.indexOf(\"hover\")\u003e\u003d0,a\u003de.indexOf(\"unconstrained\")\u003e\u003d0;if(i){if(2!\u003d\u003dt.handles)throw new Error(\"noUiSlider (14.6.3): \u0027fixed\u0027 behaviour must be used with 2 handles\");z(t,t.start[1]-t.start[0])}if(a\u0026\u0026(t.margin||t.limit))throw new Error(\"noUiSlider (14.6.3): \u0027unconstrained\u0027 behaviour cannot be used with margin or limit\");t.events\u003d{tap:r||o,drag:n,fixed:i,snap:o,hover:s,unconstrained:a}}function T(t,e){if(!1!\u003d\u003de)if(!0\u003d\u003d\u003de){t.tooltips\u003d[];for(var r\u003d0;r\u003ct.handles;r++)t.tooltips.push(!0)}else{if(t.tooltips\u003da(e),t.tooltips.length!\u003d\u003dt.handles)throw new Error(\"noUiSlider (14.6.3): must pass a formatter for all handles.\");t.tooltips.forEach((function(t){if(\"boolean\"!\u003dtypeof t\u0026\u0026(\"object\"!\u003dtypeof t||\"function\"!\u003dtypeof t.to))throw new Error(\"noUiSlider (14.6.3): \u0027tooltips\u0027 must be passed a formatter or \u0027false\u0027.\")}))}}function _(t,e){t.ariaFormat\u003de,C(e)}function B(t,e){t.format\u003de,C(e)}function q(t,e){if(t.keyboardSupport\u003de,\"boolean\"!\u003dtypeof e)throw new Error(\"noUiSlider (14.6.3): \u0027keyboardSupport\u0027 option must be a boolean.\")}function X(t,e){t.documentElement\u003de}function Y(t,e){if(\"string\"!\u003dtypeof e\u0026\u0026!1!\u003d\u003de)throw new Error(\"noUiSlider (14.6.3): \u0027cssPrefix\u0027 must be a string or `false`.\");t.cssPrefix\u003de}function I(t,e){if(\"object\"!\u003dtypeof e)throw new Error(\"noUiSlider (14.6.3): \u0027cssClasses\u0027 must be an object.\");if(\"string\"\u003d\u003dtypeof t.cssPrefix)for(var r in t.cssClasses\u003d{},e)e.hasOwnProperty(r)\u0026\u0026(t.cssClasses[r]\u003dt.cssPrefix+e[r]);else t.cssClasses\u003de}function W(t){var e\u003d{margin:0,limit:0,padding:0,animate:!0,animationDuration:300,ariaFormat:S,format:S},n\u003d{step:{r:!1,t:P},keyboardPageMultiplier:{r:!1,t:N},keyboardDefaultStep:{r:!1,t:k},start:{r:!0,t:A},connect:{r:!0,t:O},direction:{r:!0,t:F},snap:{r:!1,t:V},animate:{r:!1,t:D},animationDuration:{r:!1,t:M},range:{r:!0,t:U},orientation:{r:!1,t:L},margin:{r:!1,t:z},limit:{r:!1,t:H},padding:{r:!1,t:j},behaviour:{r:!0,t:R},ariaFormat:{r:!1,t:_},format:{r:!1,t:B},tooltips:{r:!1,t:T},keyboardSupport:{r:!0,t:q},documentElement:{r:!1,t:X},cssPrefix:{r:!0,t:Y},cssClasses:{r:!0,t:I}},i\u003d{connect:!1,direction:\"ltr\",behaviour:\"tap\",orientation:\"horizontal\",keyboardSupport:!0,cssPrefix:\"noUi-\",cssClasses:w,keyboardPageMultiplier:5,keyboardDefaultStep:10};t.format\u0026\u0026!t.ariaFormat\u0026\u0026(t.ariaFormat\u003dt.format),Object.keys(n).forEach((function(o){if(!r(t[o])\u0026\u0026void 0\u003d\u003d\u003di[o]){if(n[o].r)throw new Error(\"noUiSlider (14.6.3): \u0027\"+o+\"\u0027 is required.\");return!0}n[o].t(e,r(t[o])?t[o]:i[o])})),e.pips\u003dt.pips;var o\u003ddocument.createElement(\"div\"),s\u003dvoid 0!\u003d\u003do.style.msTransform,a\u003dvoid 0!\u003d\u003do.style.transform;return e.transformRule\u003da?\"transform\":s?\"msTransform\":\"webkitTransform\",e.style\u003d[[\"left\",\"top\"],[\"right\",\"bottom\"]][e.dir][e.ort],e}function $(t,r,i){var l,f,d,h,m,g,v,b,x\u003dwindow.navigator.pointerEnabled?{start:\"pointerdown\",move:\"pointermove\",end:\"pointerup\"}:window.navigator.msPointerEnabled?{start:\"MSPointerDown\",move:\"MSPointerMove\",end:\"MSPointerUp\"}:{start:\"mousedown touchstart\",move:\"mousemove touchmove\",end:\"mouseup touchend\"},S\u003dwindow.CSS\u0026\u0026CSS.supports\u0026\u0026CSS.supports(\"touch-action\",\"none\")\u0026\u0026function(){var t\u003d!1;try{var e\u003dObject.defineProperty({},\"passive\",{get:function(){t\u003d!0}});window.addEventListener(\"test\",null,e)}catch(t){}return t}(),w\u003dt,C\u003dr.spectrum,P\u003d[],N\u003d[],k\u003d[],U\u003d0,A\u003d{},V\u003dt.ownerDocument,D\u003dr.documentElement||V.documentElement,M\u003dV.body,O\u003d\"rtl\"\u003d\u003d\u003dV.dir||1\u003d\u003d\u003dr.ort?0:100;function L(t,e){var r\u003dV.createElement(\"div\");return e\u0026\u0026u(r,e),t.appendChild(r),r}function z(t,e){var n\u003dL(t,r.cssClasses.origin),i\u003dL(n,r.cssClasses.handle);return L(i,r.cssClasses.touchArea),i.setAttribute(\"data-handle\",e),r.keyboardSupport\u0026\u0026(i.setAttribute(\"tabindex\",\"0\"),i.addEventListener(\"keydown\",(function(t){return function(t,e){if(F()||R(e))return!1;var n\u003d[\"Left\",\"Right\"],i\u003d[\"Down\",\"Up\"],o\u003d[\"PageDown\",\"PageUp\"],s\u003d[\"Home\",\"End\"];r.dir\u0026\u0026!r.ort?n.reverse():r.ort\u0026\u0026!r.dir\u0026\u0026(i.reverse(),o.reverse());var a,l\u003dt.key.replace(\"Arrow\",\"\"),u\u003dl\u003d\u003d\u003do[0],c\u003dl\u003d\u003d\u003do[1],p\u003dl\u003d\u003d\u003di[0]||l\u003d\u003d\u003dn[0]||u,f\u003dl\u003d\u003d\u003di[1]||l\u003d\u003d\u003dn[1]||c,d\u003dl\u003d\u003d\u003ds[0],h\u003dl\u003d\u003d\u003ds[1];if(!(p||f||d||h))return!0;if(t.preventDefault(),f||p){var m\u003dr.keyboardPageMultiplier,g\u003dp?0:1,v\u003dht(e)[g];if(null\u003d\u003d\u003dv)return!1;!1\u003d\u003d\u003dv\u0026\u0026(v\u003dC.getDefaultStep(N[e],p,r.keyboardDefaultStep)),(c||u)\u0026\u0026(v*\u003dm),v\u003dMath.max(v,1e-7),v*\u003dp?-1:1,a\u003dP[e]+v}else a\u003dh?r.spectrum.xVal[r.spectrum.xVal.length-1]:r.spectrum.xVal[0];return ut(e,C.toStepping(a),!0,!0),nt(\"slide\",e),nt(\"update\",e),nt(\"change\",e),nt(\"set\",e),!1}(t,e)}))),i.setAttribute(\"role\",\"slider\"),i.setAttribute(\"aria-orientation\",r.ort?\"vertical\":\"horizontal\"),0\u003d\u003d\u003de?u(i,r.cssClasses.handleLower):e\u003d\u003d\u003dr.handles-1\u0026\u0026u(i,r.cssClasses.handleUpper),n}function H(t,e){return!!e\u0026\u0026L(t,r.cssClasses.connect)}function j(t,e){return!!r.tooltips[e]\u0026\u0026L(t.firstChild,r.cssClasses.tooltip)}function F(){return w.hasAttribute(\"disabled\")}function R(t){return f[t].hasAttribute(\"disabled\")}function T(){m\u0026\u0026(rt(\"update\"+y),m.forEach((function(t){t\u0026\u0026e(t)})),m\u003dnull)}function _(){T(),m\u003df.map(j),et(\"update\"+y,(function(t,e,n){if(m[e]){var i\u003dt[e];!0!\u003d\u003dr.tooltips[e]\u0026\u0026(i\u003dr.tooltips[e].to(n[e])),m[e].innerHTML\u003di}}))}function B(t,e,n){var i\u003dV.createElement(\"div\"),o\u003d[];o[0]\u003dr.cssClasses.valueNormal,o[1]\u003dr.cssClasses.valueLarge,o[2]\u003dr.cssClasses.valueSub;var s\u003d[];s[0]\u003dr.cssClasses.markerNormal,s[1]\u003dr.cssClasses.markerLarge,s[2]\u003dr.cssClasses.markerSub;var a\u003d[r.cssClasses.valueHorizontal,r.cssClasses.valueVertical],l\u003d[r.cssClasses.markerHorizontal,r.cssClasses.markerVertical];function c(t,e){var n\u003de\u003d\u003d\u003dr.cssClasses.value,i\u003dn?o:s;return e+\" \"+(n?a:l)[r.ort]+\" \"+i[t]}return u(i,r.cssClasses.pips),u(i,0\u003d\u003d\u003dr.ort?r.cssClasses.pipsHorizontal:r.cssClasses.pipsVertical),Object.keys(t).forEach((function(o){!function(t,o,s){if(-1!\u003d\u003d(s\u003de?e(o,s):s)){var a\u003dL(i,!1);a.className\u003dc(s,r.cssClasses.marker),a.style[r.style]\u003dt+\"%\",s\u003e0\u0026\u0026((a\u003dL(i,!1)).className\u003dc(s,r.cssClasses.value),a.setAttribute(\"data-value\",o),a.style[r.style]\u003dt+\"%\",a.innerHTML\u003dn.to(o))}}(o,t[o][0],t[o][1])})),i}function q(){h\u0026\u0026(e(h),h\u003dnull)}function X(t){q();var e\u003dt.mode,r\u003dt.density||1,n\u003dt.filter||!1,i\u003dfunction(t,e,r){if(\"range\"\u003d\u003d\u003dt||\"steps\"\u003d\u003d\u003dt)return C.xVal;if(\"count\"\u003d\u003d\u003dt){if(e\u003c2)throw new Error(\"noUiSlider (14.6.3): \u0027values\u0027 (\u003e\u003d 2) required for mode \u0027count\u0027.\");var n\u003de-1,i\u003d100/n;for(e\u003d[];n--;)e[n]\u003dn*i;e.push(100),t\u003d\"positions\"}return\"positions\"\u003d\u003d\u003dt?e.map((function(t){return C.fromStepping(r?C.getStep(t):t)})):\"values\"\u003d\u003d\u003dt?r?e.map((function(t){return C.fromStepping(C.getStep(C.toStepping(t)))})):e:void 0}(e,t.values||!1,t.stepped||!1),o\u003dfunction(t,e,r){var n,i\u003d{},o\u003dC.xVal[0],s\u003dC.xVal[C.xVal.length-1],a\u003d!1,l\u003d!1,u\u003d0;return n\u003dr.slice().sort((function(t,e){return t-e})),(r\u003dn.filter((function(t){return!this[t]\u0026\u0026(this[t]\u003d!0)}),{}))[0]!\u003d\u003do\u0026\u0026(r.unshift(o),a\u003d!0),r[r.length-1]!\u003d\u003ds\u0026\u0026(r.push(s),l\u003d!0),r.forEach((function(n,o){var s,c,p,f,d,h,m,g,v,b,x\u003dn,S\u003dr[o+1],w\u003d\"steps\"\u003d\u003d\u003de;if(w\u0026\u0026(s\u003dC.xNumSteps[o]),s||(s\u003dS-x),!1!\u003d\u003dx)for(void 0\u003d\u003d\u003dS\u0026\u0026(S\u003dx),s\u003dMath.max(s,1e-7),c\u003dx;c\u003c\u003dS;c\u003d(c+s).toFixed(7)/1){for(g\u003d(d\u003d(f\u003dC.toStepping(c))-u)/t,b\u003dd/(v\u003dMath.round(g)),p\u003d1;p\u003c\u003dv;p+\u003d1)i[(h\u003du+p*b).toFixed(5)]\u003d[C.fromStepping(h),0];m\u003dr.indexOf(c)\u003e-1?1:w?2:0,!o\u0026\u0026a\u0026\u0026c!\u003d\u003dS\u0026\u0026(m\u003d0),c\u003d\u003d\u003dS\u0026\u0026l||(i[f.toFixed(5)]\u003d[c,m]),u\u003df}})),i}(r,e,i),s\u003dt.format||{to:Math.round};return h\u003dw.appendChild(B(o,n,s))}function Y(){var t\u003dl.getBoundingClientRect(),e\u003d\"offset\"+[\"Width\",\"Height\"][r.ort];return 0\u003d\u003d\u003dr.ort?t.width||l[e]:t.height||l[e]}function I(t,e,n,i){var o\u003dfunction(o){return!!(o\u003dfunction(t,e,r){var n,i,o\u003d0\u003d\u003d\u003dt.type.indexOf(\"touch\"),s\u003d0\u003d\u003d\u003dt.type.indexOf(\"mouse\"),a\u003d0\u003d\u003d\u003dt.type.indexOf(\"pointer\");if(0\u003d\u003d\u003dt.type.indexOf(\"MSPointer\")\u0026\u0026(a\u003d!0),\"mousedown\"\u003d\u003d\u003dt.type\u0026\u0026!t.buttons\u0026\u0026!t.touches)return!1;if(o){var l\u003dfunction(t){return t.target\u003d\u003d\u003dr||r.contains(t.target)||t.target.shadowRoot\u0026\u0026t.target.shadowRoot.contains(r)};if(\"touchstart\"\u003d\u003d\u003dt.type){var u\u003dArray.prototype.filter.call(t.touches,l);if(u.length\u003e1)return!1;n\u003du[0].pageX,i\u003du[0].pageY}else{var c\u003dArray.prototype.find.call(t.changedTouches,l);if(!c)return!1;n\u003dc.pageX,i\u003dc.pageY}}return e\u003de||p(V),(s||a)\u0026\u0026(n\u003dt.clientX+e.x,i\u003dt.clientY+e.y),t.pageOffset\u003de,t.points\u003d[n,i],t.cursor\u003ds||a,t}(o,i.pageOffset,i.target||e))\u0026\u0026!(F()\u0026\u0026!i.doNotReject)\u0026\u0026(s\u003dw,a\u003dr.cssClasses.tap,!((s.classList?s.classList.contains(a):new RegExp(\"\\\\b\"+a+\"\\\\b\").test(s.className))\u0026\u0026!i.doNotReject)\u0026\u0026!(t\u003d\u003d\u003dx.start\u0026\u0026void 0!\u003d\u003do.buttons\u0026\u0026o.buttons\u003e1)\u0026\u0026(!i.hover||!o.buttons)\u0026\u0026(S||o.preventDefault(),o.calcPoint\u003do.points[r.ort],void n(o,i)));var s,a},s\u003d[];return t.split(\" \").forEach((function(t){e.addEventListener(t,o,!!S\u0026\u0026{passive:!0}),s.push([t,o])})),s}function $(t){var e,n,i,o,a,u,c\u003d100*(t-(e\u003dl,n\u003dr.ort,i\u003de.getBoundingClientRect(),o\u003de.ownerDocument,a\u003do.documentElement,u\u003dp(o),/webkit.*Chrome.*Mobile/i.test(navigator.userAgent)\u0026\u0026(u.x\u003d0),n?i.top+u.y-a.clientTop:i.left+u.x-a.clientLeft))/Y();return c\u003ds(c),r.dir?100-c:c}function G(t,e){\"mouseout\"\u003d\u003d\u003dt.type\u0026\u0026\"HTML\"\u003d\u003d\u003dt.target.nodeName\u0026\u0026null\u003d\u003d\u003dt.relatedTarget\u0026\u0026K(t,e)}function J(t,e){if(-1\u003d\u003d\u003dnavigator.appVersion.indexOf(\"MSIE 9\")\u0026\u00260\u003d\u003d\u003dt.buttons\u0026\u00260!\u003d\u003de.buttonsProperty)return K(t,e);var n\u003d(r.dir?-1:1)*(t.calcPoint-e.startCalcPoint);st(n\u003e0,100*n/e.baseSize,e.locations,e.handleNumbers)}function K(t,e){e.handle\u0026\u0026(c(e.handle,r.cssClasses.active),U-\u003d1),e.listeners.forEach((function(t){D.removeEventListener(t[0],t[1])})),0\u003d\u003d\u003dU\u0026\u0026(c(w,r.cssClasses.drag),lt(),t.cursor\u0026\u0026(M.style.cursor\u003d\"\",M.removeEventListener(\"selectstart\",n))),e.handleNumbers.forEach((function(t){nt(\"change\",t),nt(\"set\",t),nt(\"end\",t)}))}function Q(t,e){if(e.handleNumbers.some(R))return!1;var i;1\u003d\u003d\u003de.handleNumbers.length\u0026\u0026(i\u003df[e.handleNumbers[0]].children[0],U+\u003d1,u(i,r.cssClasses.active)),t.stopPropagation();var o\u003d[],s\u003dI(x.move,D,J,{target:t.target,handle:i,listeners:o,startCalcPoint:t.calcPoint,baseSize:Y(),pageOffset:t.pageOffset,handleNumbers:e.handleNumbers,buttonsProperty:t.buttons,locations:N.slice()}),a\u003dI(x.end,D,K,{target:t.target,handle:i,listeners:o,doNotReject:!0,handleNumbers:e.handleNumbers}),l\u003dI(\"mouseout\",D,G,{target:t.target,handle:i,listeners:o,doNotReject:!0,handleNumbers:e.handleNumbers});o.push.apply(o,s.concat(a,l)),t.cursor\u0026\u0026(M.style.cursor\u003dgetComputedStyle(t.target).cursor,f.length\u003e1\u0026\u0026u(w,r.cssClasses.drag),M.addEventListener(\"selectstart\",n,!1)),e.handleNumbers.forEach((function(t){nt(\"start\",t)}))}function Z(t){t.stopPropagation();var e\u003d$(t.calcPoint),n\u003dfunction(t){var e\u003d100,r\u003d!1;return f.forEach((function(n,i){if(!R(i)){var o\u003dN[i],s\u003dMath.abs(o-t);(s\u003ce||s\u003c\u003de\u0026\u0026t\u003eo||100\u003d\u003d\u003ds\u0026\u0026100\u003d\u003d\u003de)\u0026\u0026(r\u003di,e\u003ds)}})),r}(e);if(!1\u003d\u003d\u003dn)return!1;r.events.snap||o(w,r.cssClasses.tap,r.animationDuration),ut(n,e,!0,!0),lt(),nt(\"slide\",n,!0),nt(\"update\",n,!0),nt(\"change\",n,!0),nt(\"set\",n,!0),r.events.snap\u0026\u0026Q(t,{handleNumbers:[n]})}function tt(t){var e\u003d$(t.calcPoint),r\u003dC.getStep(e),n\u003dC.fromStepping(r);Object.keys(A).forEach((function(t){\"hover\"\u003d\u003d\u003dt.split(\".\")[0]\u0026\u0026A[t].forEach((function(t){t.call(g,n)}))}))}function et(t,e){A[t]\u003dA[t]||[],A[t].push(e),\"update\"\u003d\u003d\u003dt.split(\".\")[0]\u0026\u0026f.forEach((function(t,e){nt(\"update\",e)}))}function rt(t){var e\u003dt\u0026\u0026t.split(\".\")[0],r\u003de?t.substring(e.length):t;Object.keys(A).forEach((function(t){var n\u003dt.split(\".\")[0],i\u003dt.substring(n.length);e\u0026\u0026e!\u003d\u003dn||r\u0026\u0026r!\u003d\u003di||function(t){return t\u003d\u003d\u003dE||t\u003d\u003d\u003dy}(i)\u0026\u0026r!\u003d\u003di||delete A[t]}))}function nt(t,e,n){Object.keys(A).forEach((function(i){var o\u003di.split(\".\")[0];t\u003d\u003d\u003do\u0026\u0026A[i].forEach((function(t){t.call(g,P.map(r.format.to),e,P.slice(),n||!1,N.slice(),g)}))}))}function it(t,e,n,i,o,a){var l;return f.length\u003e1\u0026\u0026!r.events.unconstrained\u0026\u0026(i\u0026\u0026e\u003e0\u0026\u0026(l\u003dC.getAbsoluteDistance(t[e-1],r.margin,0),n\u003dMath.max(n,l)),o\u0026\u0026e\u003cf.length-1\u0026\u0026(l\u003dC.getAbsoluteDistance(t[e+1],r.margin,1),n\u003dMath.min(n,l))),f.length\u003e1\u0026\u0026r.limit\u0026\u0026(i\u0026\u0026e\u003e0\u0026\u0026(l\u003dC.getAbsoluteDistance(t[e-1],r.limit,0),n\u003dMath.min(n,l)),o\u0026\u0026e\u003cf.length-1\u0026\u0026(l\u003dC.getAbsoluteDistance(t[e+1],r.limit,1),n\u003dMath.max(n,l))),r.padding\u0026\u0026(0\u003d\u003d\u003de\u0026\u0026(l\u003dC.getAbsoluteDistance(0,r.padding[0],0),n\u003dMath.max(n,l)),e\u003d\u003d\u003df.length-1\u0026\u0026(l\u003dC.getAbsoluteDistance(100,r.padding[1],1),n\u003dMath.min(n,l))),!((n\u003ds(n\u003dC.getStep(n)))\u003d\u003d\u003dt[e]\u0026\u0026!a)\u0026\u0026n}function ot(t,e){var n\u003dr.ort;return(n?e:t)+\", \"+(n?t:e)}function st(t,e,r,n){var i\u003dr.slice(),o\u003d[!t,t],s\u003d[t,!t];n\u003dn.slice(),t\u0026\u0026n.reverse(),n.length\u003e1?n.forEach((function(t,r){var n\u003dit(i,t,i[t]+e,o[r],s[r],!1);!1\u003d\u003d\u003dn?e\u003d0:(e\u003dn-i[t],i[t]\u003dn)})):o\u003ds\u003d[!0];var a\u003d!1;n.forEach((function(t,n){a\u003dut(t,r[t]+e,o[n],s[n])||a})),a\u0026\u0026n.forEach((function(t){nt(\"update\",t),nt(\"slide\",t)}))}function at(t,e){return r.dir?100-t-e:t}function lt(){k.forEach((function(t){var e\u003dN[t]\u003e50?-1:1,r\u003d3+(f.length+e*t);f[t].style.zIndex\u003dr}))}function ut(t,e,n,i,o){return o||(e\u003dit(N,t,e,n,i,!1)),!1!\u003d\u003de\u0026\u0026(function(t,e){N[t]\u003de,P[t]\u003dC.fromStepping(e);var n\u003d\"translate(\"+ot(10*(at(e,0)-O)+\"%\",\"0\")+\")\";f[t].style[r.transformRule]\u003dn,ct(t),ct(t+1)}(t,e),!0)}function ct(t){if(d[t]){var e\u003d0,n\u003d100;0!\u003d\u003dt\u0026\u0026(e\u003dN[t-1]),t!\u003d\u003dd.length-1\u0026\u0026(n\u003dN[t]);var i\u003dn-e,o\u003d\"translate(\"+ot(at(e,i)+\"%\",\"0\")+\")\",s\u003d\"scale(\"+ot(i/100,\"1\")+\")\";d[t].style[r.transformRule]\u003do+\" \"+s}}function pt(t,e){return null\u003d\u003d\u003dt||!1\u003d\u003d\u003dt||void 0\u003d\u003d\u003dt?N[e]:(\"number\"\u003d\u003dtypeof t\u0026\u0026(t\u003dString(t)),t\u003dr.format.from(t),!1\u003d\u003d\u003d(t\u003dC.toStepping(t))||isNaN(t)?N[e]:t)}function ft(t,e,n){var i\u003da(t),s\u003dvoid 0\u003d\u003d\u003dN[0];e\u003dvoid 0\u003d\u003d\u003de||!!e,r.animate\u0026\u0026!s\u0026\u0026o(w,r.cssClasses.tap,r.animationDuration),k.forEach((function(t){ut(t,pt(i[t],t),!0,!1,n)}));for(var l\u003d1\u003d\u003d\u003dk.length?0:1;l\u003ck.length;++l)k.forEach((function(t){ut(t,N[t],!0,!0,n)}));lt(),k.forEach((function(t){nt(\"update\",t),null!\u003d\u003di[t]\u0026\u0026e\u0026\u0026nt(\"set\",t)}))}function dt(){var t\u003dP.map(r.format.to);return 1\u003d\u003d\u003dt.length?t[0]:t}function ht(t){var e\u003dN[t],n\u003dC.getNearbySteps(e),i\u003dP[t],o\u003dn.thisStep.step,s\u003dnull;if(r.snap)return[i-n.stepBefore.startValue||null,n.stepAfter.startValue-i||null];!1!\u003d\u003do\u0026\u0026i+o\u003en.stepAfter.startValue\u0026\u0026(o\u003dn.stepAfter.startValue-i),s\u003di\u003en.thisStep.startValue?n.thisStep.step:!1!\u003d\u003dn.stepBefore.step\u0026\u0026i-n.stepBefore.highestStep,100\u003d\u003d\u003de?o\u003dnull:0\u003d\u003d\u003de\u0026\u0026(s\u003dnull);var a\u003dC.countStepDecimals();return null!\u003d\u003do\u0026\u0026!1!\u003d\u003do\u0026\u0026(o\u003dNumber(o.toFixed(a))),null!\u003d\u003ds\u0026\u0026!1!\u003d\u003ds\u0026\u0026(s\u003dNumber(s.toFixed(a))),[s,o]}return u(v\u003dw,r.cssClasses.target),0\u003d\u003d\u003dr.dir?u(v,r.cssClasses.ltr):u(v,r.cssClasses.rtl),0\u003d\u003d\u003dr.ort?u(v,r.cssClasses.horizontal):u(v,r.cssClasses.vertical),u(v,\"rtl\"\u003d\u003d\u003dgetComputedStyle(v).direction?r.cssClasses.textDirectionRtl:r.cssClasses.textDirectionLtr),l\u003dL(v,r.cssClasses.base),function(t,e){var n\u003dL(e,r.cssClasses.connects);f\u003d[],(d\u003d[]).push(H(n,t[0]));for(var i\u003d0;i\u003cr.handles;i++)f.push(z(e,i)),k[i]\u003di,d.push(H(n,t[i+1]))}(r.connect,l),(b\u003dr.events).fixed||f.forEach((function(t,e){I(x.start,t.children[0],Q,{handleNumbers:[e]})})),b.tap\u0026\u0026I(x.start,l,Z,{}),b.hover\u0026\u0026I(x.move,l,tt,{hover:!0}),b.drag\u0026\u0026d.forEach((function(t,e){if(!1!\u003d\u003dt\u0026\u00260!\u003d\u003de\u0026\u0026e!\u003d\u003dd.length-1){var n\u003df[e-1],i\u003df[e],o\u003d[t];u(t,r.cssClasses.draggable),b.fixed\u0026\u0026(o.push(n.children[0]),o.push(i.children[0])),o.forEach((function(t){I(x.start,t,Q,{handles:[n,i],handleNumbers:[e-1,e]})}))}})),ft(r.start),r.pips\u0026\u0026X(r.pips),r.tooltips\u0026\u0026_(),rt(\"update\"+E),et(\"update\"+E,(function(t,e,n,i,o){k.forEach((function(t){var e\u003df[t],i\u003dit(N,t,0,!0,!0,!0),s\u003dit(N,t,100,!0,!0,!0),a\u003do[t],l\u003dr.ariaFormat.to(n[t]);i\u003dC.fromStepping(i).toFixed(1),s\u003dC.fromStepping(s).toFixed(1),a\u003dC.fromStepping(a).toFixed(1),e.children[0].setAttribute(\"aria-valuemin\",i),e.children[0].setAttribute(\"aria-valuemax\",s),e.children[0].setAttribute(\"aria-valuenow\",a),e.children[0].setAttribute(\"aria-valuetext\",l)}))})),g\u003d{destroy:function(){for(var t in rt(E),rt(y),r.cssClasses)r.cssClasses.hasOwnProperty(t)\u0026\u0026c(w,r.cssClasses[t]);for(;w.firstChild;)w.removeChild(w.firstChild);delete w.noUiSlider},steps:function(){return k.map(ht)},on:et,off:rt,get:dt,set:ft,setHandle:function(t,e,r,n){if(!((t\u003dNumber(t))\u003e\u003d0\u0026\u0026t\u003ck.length))throw new Error(\"noUiSlider (14.6.3): invalid handle number, got: \"+t);ut(t,pt(e,t),!0,!0,n),nt(\"update\",t),r\u0026\u0026nt(\"set\",t)},reset:function(t){ft(r.start,t)},__moveHandles:function(t,e,r){st(t,e,N,r)},options:i,updateOptions:function(t,e){var n\u003ddt(),o\u003d[\"margin\",\"limit\",\"padding\",\"range\",\"animate\",\"snap\",\"step\",\"format\",\"pips\",\"tooltips\"];o.forEach((function(e){void 0!\u003d\u003dt[e]\u0026\u0026(i[e]\u003dt[e])}));var s\u003dW(i);o.forEach((function(e){void 0!\u003d\u003dt[e]\u0026\u0026(r[e]\u003ds[e])})),C\u003ds.spectrum,r.margin\u003ds.margin,r.limit\u003ds.limit,r.padding\u003ds.padding,r.pips?X(r.pips):q(),r.tooltips?_():T(),N\u003d[],ft(t.start||n,e)},target:w,removePips:q,removeTooltips:T,getTooltips:function(){return m},getOrigins:function(){return f},pips:X}}return{__spectrum:x,version:t,cssClasses:w,create:function(t,e){if(!t||!t.nodeName)throw new Error(\"noUiSlider (14.6.3): create requires a single element, got: \"+t);if(t.noUiSlider)throw new Error(\"noUiSlider (14.6.3): Slider was already initialized.\");var r\u003d$(t,W(e),e);return t.noUiSlider\u003dr,r}}},\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define([],o):\"object\"\u003d\u003dtypeof r?e.exports\u003do():window.noUiSlider\u003do()},\n      440: function _(e,t,l,i,o){i(),l.root\u003d\"bk-root\",l.slider_title\u003d\"bk-slider-title\",l.slider_value\u003d\"bk-slider-value\",l.default\u003d\".bk-root .bk-slider-title{white-space:nowrap;}.bk-root .bk-slider-value{font-weight:600;}\"},\n      441: function _(o,t,r,i,n){i(),r.root\u003d\"bk-root\",r.default\u003d\u0027.bk-root{}.bk-root .noUi-target,.bk-root .noUi-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0, 0, 0, 0);-webkit-user-select:none;-ms-touch-action:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;-moz-box-sizing:border-box;box-sizing:border-box;}.bk-root .noUi-target{position:relative;}.bk-root .noUi-base,.bk-root .noUi-connects{width:100%;height:100%;position:relative;z-index:1;}.bk-root .noUi-connects{overflow:hidden;z-index:0;}.bk-root .noUi-connect,.bk-root .noUi-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat;}.bk-root .noUi-connect{height:100%;width:100%;}.bk-root .noUi-origin{height:10%;width:10%;}.bk-root .noUi-txt-dir-rtl.noUi-horizontal .noUi-origin{left:0;right:auto;}.bk-root .noUi-vertical .noUi-origin{width:0;}.bk-root .noUi-horizontal .noUi-origin{height:0;}.bk-root .noUi-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute;}.bk-root .noUi-touch-area{height:100%;width:100%;}.bk-root .noUi-state-tap .noUi-connect,.bk-root .noUi-state-tap .noUi-origin{-webkit-transition:transform 0.3s;transition:transform 0.3s;}.bk-root .noUi-state-drag *{cursor:inherit !important;}.bk-root .noUi-horizontal{height:18px;}.bk-root .noUi-horizontal .noUi-handle{width:34px;height:28px;right:-17px;top:-6px;}.bk-root .noUi-vertical{width:18px;}.bk-root .noUi-vertical .noUi-handle{width:28px;height:34px;right:-6px;top:-17px;}.bk-root .noUi-txt-dir-rtl.noUi-horizontal .noUi-handle{left:-17px;right:auto;}.bk-root .noUi-target{background:#FAFAFA;border-radius:4px;border:1px solid #D3D3D3;box-shadow:inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;}.bk-root .noUi-connects{border-radius:3px;}.bk-root .noUi-connect{background:#3FB8AF;}.bk-root .noUi-draggable{cursor:ew-resize;}.bk-root .noUi-vertical .noUi-draggable{cursor:ns-resize;}.bk-root .noUi-handle{border:1px solid #D9D9D9;border-radius:3px;background:#FFF;cursor:default;box-shadow:inset 0 0 1px #FFF, inset 0 1px 7px #EBEBEB, 0 3px 6px -3px #BBB;}.bk-root .noUi-active{box-shadow:inset 0 0 1px #FFF, inset 0 1px 7px #DDD, 0 3px 6px -3px #BBB;}.bk-root .noUi-handle:before,.bk-root .noUi-handle:after{content:\"\";display:block;position:absolute;height:14px;width:1px;background:#E8E7E6;left:14px;top:6px;}.bk-root .noUi-handle:after{left:17px;}.bk-root .noUi-vertical .noUi-handle:before,.bk-root .noUi-vertical .noUi-handle:after{width:14px;height:1px;left:6px;top:14px;}.bk-root .noUi-vertical .noUi-handle:after{top:17px;}.bk-root [disabled] .noUi-connect{background:#B8B8B8;}.bk-root [disabled].noUi-target,.bk-root [disabled].noUi-handle,.bk-root [disabled] .noUi-handle{cursor:not-allowed;}.bk-root .noUi-pips,.bk-root .noUi-pips *{-moz-box-sizing:border-box;box-sizing:border-box;}.bk-root .noUi-pips{position:absolute;color:#999;}.bk-root .noUi-value{position:absolute;white-space:nowrap;text-align:center;}.bk-root .noUi-value-sub{color:#ccc;font-size:10px;}.bk-root .noUi-marker{position:absolute;background:#CCC;}.bk-root .noUi-marker-sub{background:#AAA;}.bk-root .noUi-marker-large{background:#AAA;}.bk-root .noUi-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%;}.bk-root .noUi-value-horizontal{-webkit-transform:translate(-50%, 50%);transform:translate(-50%, 50%);}.bk-root .noUi-rtl .noUi-value-horizontal{-webkit-transform:translate(50%, 50%);transform:translate(50%, 50%);}.bk-root .noUi-marker-horizontal.noUi-marker{margin-left:-1px;width:2px;height:5px;}.bk-root .noUi-marker-horizontal.noUi-marker-sub{height:10px;}.bk-root .noUi-marker-horizontal.noUi-marker-large{height:15px;}.bk-root .noUi-pips-vertical{padding:0 10px;height:100%;top:0;left:100%;}.bk-root .noUi-value-vertical{-webkit-transform:translate(0, -50%);transform:translate(0, -50%);padding-left:25px;}.bk-root .noUi-rtl .noUi-value-vertical{-webkit-transform:translate(0, 50%);transform:translate(0, 50%);}.bk-root .noUi-marker-vertical.noUi-marker{width:5px;height:2px;margin-top:-1px;}.bk-root .noUi-marker-vertical.noUi-marker-sub{width:10px;}.bk-root .noUi-marker-vertical.noUi-marker-large{width:15px;}.bk-root .noUi-tooltip{display:block;position:absolute;border:1px solid #D9D9D9;border-radius:3px;background:#fff;color:#000;padding:5px;text-align:center;white-space:nowrap;}.bk-root .noUi-horizontal .noUi-tooltip{-webkit-transform:translate(-50%, 0);transform:translate(-50%, 0);left:50%;bottom:120%;}.bk-root .noUi-vertical .noUi-tooltip{-webkit-transform:translate(0, -50%);transform:translate(0, -50%);top:50%;right:120%;}.bk-root .noUi-horizontal .noUi-origin \u003e .noUi-tooltip{-webkit-transform:translate(50%, 0);transform:translate(50%, 0);left:auto;bottom:10px;}.bk-root .noUi-vertical .noUi-origin \u003e .noUi-tooltip{-webkit-transform:translate(0, -18px);transform:translate(0, -18px);top:auto;right:28px;}.bk-root .noUi-handle{cursor:grab;cursor:-webkit-grab;}.bk-root .noUi-handle.noUi-active{cursor:grabbing;cursor:-webkit-grabbing;}.bk-root .noUi-handle:after,.bk-root .noUi-handle:before{display:none;}.bk-root .noUi-tooltip{display:none;white-space:nowrap;}.bk-root .noUi-handle:hover .noUi-tooltip{display:block;}.bk-root .noUi-horizontal{width:100%;height:10px;}.bk-root .noUi-vertical{width:10px;height:100%;}.bk-root .noUi-horizontal .noUi-handle{width:14px;height:18px;right:-7px;top:-5px;}.bk-root .noUi-vertical .noUi-handle{width:18px;height:14px;right:-5px;top:-7px;}.bk-root .noUi-target.noUi-horizontal{margin:5px 0px;}.bk-root .noUi-target.noUi-vertical{margin:0px 5px;}\u0027},\n      442: function _(t,e,i,r,a){r();const s\u003dt(1).__importDefault(t(181)),d\u003dt(438),_\u003dt(8);class n extends d.AbstractSliderView{}i.DateSliderView\u003dn,n.__name__\u003d\"DateSliderView\";class l extends d.AbstractSlider{constructor(t){super(t),this.behaviour\u003d\"tap\",this.connected\u003d[!0,!1]}static init_DateSlider(){this.prototype.default_view\u003dn,this.override({format:\"%d %b %Y\"})}_formatter(t,e){return _.isString(e)?s.default(t,e):e.compute(t)}}i.DateSlider\u003dl,l.__name__\u003d\"DateSlider\",l.init_DateSlider()},\n      443: function _(e,t,i,n,s){n();const r\u003de(444);class _ extends r.MarkupView{render(){super.render(),this.model.render_as_text?this.markup_el.textContent\u003dthis.model.text:this.markup_el.innerHTML\u003dthis.model.text}}i.DivView\u003d_,_.__name__\u003d\"DivView\";class a extends r.Markup{constructor(e){super(e)}static init_Div(){this.prototype.default_view\u003d_,this.define((({Boolean:e})\u003d\u003e({render_as_text:[e,!1]})))}}i.Div\u003da,a.__name__\u003d\"Div\",a.init_Div()},\n      444: function _(t,e,s,i,a){i();const n\u003dt(1),l\u003dt(224),r\u003dt(43),c\u003dt(488),u\u003dn.__importStar(t(445));class _ extends c.WidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003e{this.layout.invalidate_cache(),this.render(),this.root.compute_layout()}))}styles(){return[...super.styles(),u.default]}_update_layout(){this.layout\u003dnew l.CachedVariadicBox(this.el),this.layout.set_sizing(this.box_sizing())}render(){super.render();const t\u003dObject.assign(Object.assign({},this.model.style),{display:\"inline-block\"});this.markup_el\u003dr.div({class:u.clearfix,style:t}),this.el.appendChild(this.markup_el)}}s.MarkupView\u003d_,_.__name__\u003d\"MarkupView\";class o extends c.Widget{constructor(t){super(t)}static init_Markup(){this.define((({String:t,Dict:e})\u003d\u003e({text:[t,\"\"],style:[e(t),{}]})))}}s.Markup\u003do,o.__name__\u003d\"Markup\",o.init_Markup()},\n      445: function _(o,r,e,t,a){t(),e.root\u003d\"bk-root\",e.clearfix\u003d\"bk-clearfix\",e.default\u003d\u0027.bk-root .bk-clearfix:before,.bk-root .bk-clearfix:after{content:\"\";display:table;}.bk-root .bk-clearfix:after{clear:both;}\u0027},\n      446: function _(e,t,i,n,s){n();const o\u003de(1),r\u003de(419),l\u003de(264),d\u003de(43),_\u003de(8),u\u003do.__importStar(e(328)),c\u003do.__importStar(e(243)),h\u003dc;class p extends r.AbstractButtonView{constructor(){super(...arguments),this._open\u003d!1}styles(){return[...super.styles(),c.default]}render(){super.render();const e\u003dd.div({class:[h.caret,h.down]});if(this.model.is_split){const t\u003dthis._render_button(e);t.classList.add(u.dropdown_toggle),t.addEventListener(\"click\",(()\u003d\u003ethis._toggle_menu())),this.group_el.appendChild(t)}else this.button_el.appendChild(e);const t\u003dthis.model.menu.map(((e,t)\u003d\u003e{if(null\u003d\u003de)return d.div({class:h.divider});{const i\u003d_.isString(e)?e:e[0],n\u003dd.div({},i);return n.addEventListener(\"click\",(()\u003d\u003ethis._item_click(t))),n}}));this.menu\u003dd.div({class:[h.menu,h.below]},t),this.el.appendChild(this.menu),d.undisplay(this.menu)}_show_menu(){if(!this._open){this._open\u003d!0,d.display(this.menu);const e\u003dt\u003d\u003e{const{target:i}\u003dt;i instanceof HTMLElement\u0026\u0026!this.el.contains(i)\u0026\u0026(document.removeEventListener(\"click\",e),this._hide_menu())};document.addEventListener(\"click\",e)}}_hide_menu(){this._open\u0026\u0026(this._open\u003d!1,d.undisplay(this.menu))}_toggle_menu(){this._open?this._hide_menu():this._show_menu()}click(){this.model.is_split?(this._hide_menu(),this.model.trigger_event(new l.ButtonClick),super.click()):this._toggle_menu()}_item_click(e){this._hide_menu();const t\u003dthis.model.menu[e];if(null!\u003dt){const i\u003d_.isString(t)?t:t[1];_.isString(i)?this.model.trigger_event(new l.MenuItemClick(i)):i.execute(this.model,{index:e})}}}i.DropdownView\u003dp,p.__name__\u003d\"DropdownView\";class m extends r.AbstractButton{constructor(e){super(e)}static init_Dropdown(){this.prototype.default_view\u003dp,this.define((({Null:e,Boolean:t,String:i,Array:n,Tuple:s,Or:o})\u003d\u003e({split:[t,!1],menu:[n(o(i,s(i,o(i)),e)),[]]}))),this.override({label:\"Dropdown\"})}get is_split(){return this.split}}i.Dropdown\u003dm,m.__name__\u003d\"Dropdown\",m.init_Dropdown()},\n      447: function _(e,i,l,t,s){t();const n\u003de(43),a\u003de(488);class o extends a.WidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.render()))}render(){const{multiple:e,accept:i,disabled:l,width:t}\u003dthis.model;null\u003d\u003dthis.dialog_el\u0026\u0026(this.dialog_el\u003dn.input({type:\"file\",multiple:e}),this.dialog_el.onchange\u003d()\u003d\u003e{const{files:e}\u003dthis.dialog_el;null!\u003de\u0026\u0026this.load_files(e)},this.el.appendChild(this.dialog_el)),null!\u003di\u0026\u0026\"\"!\u003di\u0026\u0026(this.dialog_el.accept\u003di),this.dialog_el.style.width\u003d`${t}px`,this.dialog_el.disabled\u003dl}async load_files(e){const i\u003d[],l\u003d[],t\u003d[];for(const s of e){const e\u003dawait this._read_file(s),[,n\u003d\"\",,a\u003d\"\"]\u003de.split(/[:;,]/,4);i.push(a),l.push(s.name),t.push(n)}this.model.multiple?(this.model.value\u003di,this.model.filename\u003dl,this.model.mime_type\u003dt):(this.model.value\u003di[0],this.model.filename\u003dl[0],this.model.mime_type\u003dt[0])}_read_file(e){return new Promise(((i,l)\u003d\u003e{const t\u003dnew FileReader;t.onload\u003d()\u003d\u003e{var s;const{result:n}\u003dt;null!\u003dn?i(n):l(null!\u003d\u003d(s\u003dt.error)\u0026\u0026void 0!\u003d\u003ds?s:new Error(`unable to read \u0027${e.name}\u0027`))},t.readAsDataURL(e)}))}}l.FileInputView\u003do,o.__name__\u003d\"FileInputView\";class d extends a.Widget{constructor(e){super(e)}static init_FileInput(){this.prototype.default_view\u003do,this.define((({Boolean:e,String:i,Array:l,Or:t})\u003d\u003e({value:[t(i,l(i)),\"\"],mime_type:[t(i,l(i)),\"\"],filename:[t(i,l(i)),\"\"],accept:[i,\"\"],multiple:[e,!1]})))}}l.FileInput\u003dd,d.__name__\u003d\"FileInput\",d.init_FileInput()},\n      448: function _(e,t,i,s,n){s();const l\u003de(1),o\u003de(43),r\u003de(8),c\u003de(426),h\u003dl.__importStar(e(427));class p extends c.InputWidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.render_selection())),this.connect(this.model.properties.options.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.name.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.title.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.size.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.render()))}render(){super.render();const e\u003dthis.model.options.map((e\u003d\u003e{let t,i;return r.isString(e)?t\u003di\u003de:[t,i]\u003de,o.option({value:t},i)}));this.input_el\u003do.select({multiple:!0,class:h.input,name:this.model.name,disabled:this.model.disabled},e),this.input_el.addEventListener(\"change\",(()\u003d\u003ethis.change_input())),this.group_el.appendChild(this.input_el),this.render_selection()}render_selection(){const e\u003dnew Set(this.model.value);for(const t of this.el.querySelectorAll(\"option\"))t.selected\u003de.has(t.value);this.input_el.size\u003dthis.model.size}change_input(){const e\u003dnull!\u003dthis.el.querySelector(\"select:focus\"),t\u003d[];for(const e of this.el.querySelectorAll(\"option\"))e.selected\u0026\u0026t.push(e.value);this.model.value\u003dt,super.change_input(),e\u0026\u0026this.input_el.focus()}}i.MultiSelectView\u003dp,p.__name__\u003d\"MultiSelectView\";class u extends c.InputWidget{constructor(e){super(e)}static init_MultiSelect(){this.prototype.default_view\u003dp,this.define((({Int:e,String:t,Array:i,Tuple:s,Or:n})\u003d\u003e({value:[i(t),[]],options:[i(n(t,s(t,t))),[]],size:[e,4]})))}}i.MultiSelect\u003du,u.__name__\u003d\"MultiSelect\",u.init_MultiSelect()},\n      449: function _(a,r,e,t,p){t();const s\u003da(444),i\u003da(43);class n extends s.MarkupView{render(){super.render();const a\u003di.p({style:{margin:0}},this.model.text);this.markup_el.appendChild(a)}}e.ParagraphView\u003dn,n.__name__\u003d\"ParagraphView\";class _ extends s.Markup{constructor(a){super(a)}static init_Paragraph(){this.prototype.default_view\u003dn}}e.Paragraph\u003d_,_.__name__\u003d\"Paragraph\",_.init_Paragraph()},\n      450: function _(s,t,e,n,r){n();const p\u003ds(424);class u extends p.TextInputView{render(){super.render(),this.input_el.type\u003d\"password\"}}e.PasswordInputView\u003du,u.__name__\u003d\"PasswordInputView\";class a extends p.TextInput{constructor(s){super(s)}static init_PasswordInput(){this.prototype.default_view\u003du}}e.PasswordInput\u003da,a.__name__\u003d\"PasswordInput\",a.init_PasswordInput()},\n      451: function _(e,t,i,l,s){l();const o\u003de(1),n\u003do.__importDefault(e(452)),h\u003de(43),a\u003de(8),u\u003de(224),c\u003do.__importStar(e(427)),d\u003do.__importDefault(e(453)),_\u003de(426);class r extends _.InputWidgetView{constructor(){super(...arguments),this._last_height\u003dnull}connect_signals(){super.connect_signals(),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.set_disabled()));const{value:e,max_items:t,option_limit:i,delete_button:l,placeholder:s,options:o,name:n,title:h}\u003dthis.model.properties;this.on_change([e,t,i,l,s,o,n,h],(()\u003d\u003ethis.render()))}styles(){return[...super.styles(),d.default]}_update_layout(){this.layout\u003dnew u.CachedVariadicBox(this.el),this.layout.set_sizing(this.box_sizing())}render(){super.render(),this.input_el\u003dh.select({multiple:!0,class:c.input,name:this.model.name,disabled:this.model.disabled}),this.group_el.appendChild(this.input_el);const e\u003dnew Set(this.model.value),t\u003dthis.model.options.map((t\u003d\u003e{let i,l;return a.isString(t)?i\u003dl\u003dt:[i,l]\u003dt,{value:i,label:l,selected:e.has(i)}})),i\u003dthis.model.solid?\"solid\":\"light\",l\u003d`choices__item ${i}`,s\u003d`choices__button ${i}`,o\u003d{choices:t,duplicateItemsAllowed:!1,removeItemButton:this.model.delete_button,classNames:{item:l,button:s}};null!\u003dthis.model.placeholder\u0026\u0026(o.placeholderValue\u003dthis.model.placeholder),null!\u003dthis.model.max_items\u0026\u0026(o.maxItemCount\u003dthis.model.max_items),null!\u003dthis.model.option_limit\u0026\u0026(o.renderChoiceLimit\u003dthis.model.option_limit),this.choice_el\u003dnew n.default(this.input_el,o);const u\u003d()\u003d\u003ethis.choice_el.containerOuter.element.getBoundingClientRect().height;null!\u003dthis._last_height\u0026\u0026this._last_height!\u003du()\u0026\u0026this.root.invalidate_layout(),this._last_height\u003du(),this.input_el.addEventListener(\"change\",(()\u003d\u003ethis.change_input()))}set_disabled(){this.model.disabled?this.choice_el.disable():this.choice_el.enable()}change_input(){const e\u003dnull!\u003dthis.el.querySelector(\"select:focus\"),t\u003d[];for(const e of this.el.querySelectorAll(\"option\"))e.selected\u0026\u0026t.push(e.value);this.model.value\u003dt,super.change_input(),e\u0026\u0026this.input_el.focus()}}i.MultiChoiceView\u003dr,r.__name__\u003d\"MultiChoiceView\";class m extends _.InputWidget{constructor(e){super(e)}static init_MultiChoice(){this.prototype.default_view\u003dr,this.define((({Boolean:e,Int:t,String:i,Array:l,Tuple:s,Or:o,Nullable:n})\u003d\u003e({value:[l(i),[]],options:[l(o(i,s(i,i))),[]],max_items:[n(t),null],delete_button:[e,!0],placeholder:[n(i),null],option_limit:[n(t),null],solid:[e,!0]})))}}i.MultiChoice\u003dm,m.__name__\u003d\"MultiChoice\",m.init_MultiChoice()},\n      452: function _(e,t,i,n,s){\n      /*! choices.js v9.0.1 | © 2019 Josh Johnson | https://github.com/jshjohnson/Choices#readme */\n      var r,o;r\u003dwindow,o\u003dfunction(){return function(e){var t\u003d{};function i(n){if(t[n])return t[n].exports;var s\u003dt[n]\u003d{i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l\u003d!0,s.exports}return i.m\u003de,i.c\u003dt,i.d\u003dfunction(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r\u003dfunction(e){\"undefined\"!\u003dtypeof Symbol\u0026\u0026Symbol.toStringTag\u0026\u0026Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i.t\u003dfunction(e,t){if(1\u0026t\u0026\u0026(e\u003di(e)),8\u0026t)return e;if(4\u0026t\u0026\u0026\"object\"\u003d\u003dtypeof e\u0026\u0026e\u0026\u0026e.__esModule)return e;var n\u003dObject.create(null);if(i.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2\u0026t\u0026\u0026\"string\"!\u003dtypeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n\u003dfunction(e){var t\u003de\u0026\u0026e.__esModule?function(){return e.default}:function(){return e};return i.d(t,\"a\",t),t},i.o\u003dfunction(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p\u003d\"/public/assets/scripts/\",i(i.s\u003d4)}([function(e,t,i){\"use strict\";var n\u003dfunction(e){return function(e){return!!e\u0026\u0026\"object\"\u003d\u003dtypeof e}(e)\u0026\u0026!function(e){var t\u003dObject.prototype.toString.call(e);return\"[object RegExp]\"\u003d\u003d\u003dt||\"[object Date]\"\u003d\u003d\u003dt||function(e){return e.$$typeof\u003d\u003d\u003ds}(e)}(e)},s\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026Symbol.for?Symbol.for(\"react.element\"):60103;function r(e,t){return!1!\u003d\u003dt.clone\u0026\u0026t.isMergeableObject(e)?l((i\u003de,Array.isArray(i)?[]:{}),e,t):e;var i}function o(e,t,i){return e.concat(t).map((function(e){return r(e,i)}))}function a(e){return Object.keys(e).concat(function(e){return Object.getOwnPropertySymbols?Object.getOwnPropertySymbols(e).filter((function(t){return e.propertyIsEnumerable(t)})):[]}(e))}function c(e,t,i){var n\u003d{};return i.isMergeableObject(e)\u0026\u0026a(e).forEach((function(t){n[t]\u003dr(e[t],i)})),a(t).forEach((function(s){(function(e,t){try{return t in e\u0026\u0026!(Object.hasOwnProperty.call(e,t)\u0026\u0026Object.propertyIsEnumerable.call(e,t))}catch(e){return!1}})(e,s)||(i.isMergeableObject(t[s])\u0026\u0026e[s]?n[s]\u003dfunction(e,t){if(!t.customMerge)return l;var i\u003dt.customMerge(e);return\"function\"\u003d\u003dtypeof i?i:l}(s,i)(e[s],t[s],i):n[s]\u003dr(t[s],i))})),n}function l(e,t,i){(i\u003di||{}).arrayMerge\u003di.arrayMerge||o,i.isMergeableObject\u003di.isMergeableObject||n,i.cloneUnlessOtherwiseSpecified\u003dr;var s\u003dArray.isArray(t);return s\u003d\u003d\u003dArray.isArray(e)?s?i.arrayMerge(e,t,i):c(e,t,i):r(t,i)}l.all\u003dfunction(e,t){if(!Array.isArray(e))throw new Error(\"first argument should be an array\");return e.reduce((function(e,i){return l(e,i,t)}),{})};var h\u003dl;e.exports\u003dh},function(e,t,i){\"use strict\";(function(e,n){var s,r\u003di(3);s\u003d\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:void 0!\u003d\u003de?e:n;var o\u003dObject(r.a)(s);t.a\u003do}).call(this,i(5),i(6)(e))},function(e,t,i){\n      /*!\n                       * Fuse.js v3.4.5 - Lightweight fuzzy-search (http://fusejs.io)\n                       *\n                       * Copyright (c) 2012-2017 Kirollos Risk (http://kiro.me)\n                       * All Rights Reserved. Apache Software License 2.0\n                       *\n                       * http://www.apache.org/licenses/LICENSE-2.0\n                       */\n      e.exports\u003dfunction(e){var t\u003d{};function i(n){if(t[n])return t[n].exports;var s\u003dt[n]\u003d{i:n,l:!1,exports:{}};return e[n].call(s.exports,s,s.exports,i),s.l\u003d!0,s.exports}return i.m\u003de,i.c\u003dt,i.d\u003dfunction(e,t,n){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},i.r\u003dfunction(e){\"undefined\"!\u003dtypeof Symbol\u0026\u0026Symbol.toStringTag\u0026\u0026Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},i.t\u003dfunction(e,t){if(1\u0026t\u0026\u0026(e\u003di(e)),8\u0026t)return e;if(4\u0026t\u0026\u0026\"object\"\u003d\u003dtypeof e\u0026\u0026e\u0026\u0026e.__esModule)return e;var n\u003dObject.create(null);if(i.r(n),Object.defineProperty(n,\"default\",{enumerable:!0,value:e}),2\u0026t\u0026\u0026\"string\"!\u003dtypeof e)for(var s in e)i.d(n,s,function(t){return e[t]}.bind(null,s));return n},i.n\u003dfunction(e){var t\u003de\u0026\u0026e.__esModule?function(){return e.default}:function(){return e};return i.d(t,\"a\",t),t},i.o\u003dfunction(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p\u003d\"\",i(i.s\u003d1)}([function(e,t){e.exports\u003dfunction(e){return Array.isArray?Array.isArray(e):\"[object Array]\"\u003d\u003d\u003dObject.prototype.toString.call(e)}},function(e,t,i){function n(e){return(n\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(e){return typeof e}:function(e){return e\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026e.constructor\u003d\u003d\u003dSymbol\u0026\u0026e!\u003d\u003dSymbol.prototype?\"symbol\":typeof e})(e)}function s(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var r\u003di(2),o\u003di(8),a\u003di(0),c\u003dfunction(){function e(t,i){var n\u003di.location,s\u003dvoid 0\u003d\u003d\u003dn?0:n,r\u003di.distance,a\u003dvoid 0\u003d\u003d\u003dr?100:r,c\u003di.threshold,l\u003dvoid 0\u003d\u003d\u003dc?.6:c,h\u003di.maxPatternLength,u\u003dvoid 0\u003d\u003d\u003dh?32:h,d\u003di.caseSensitive,p\u003dvoid 0!\u003d\u003dd\u0026\u0026d,m\u003di.tokenSeparator,f\u003dvoid 0\u003d\u003d\u003dm?/ +/g:m,v\u003di.findAllMatches,g\u003dvoid 0!\u003d\u003dv\u0026\u0026v,_\u003di.minMatchCharLength,b\u003dvoid 0\u003d\u003d\u003d_?1:_,y\u003di.id,E\u003dvoid 0\u003d\u003d\u003dy?null:y,I\u003di.keys,S\u003dvoid 0\u003d\u003d\u003dI?[]:I,w\u003di.shouldSort,O\u003dvoid 0\u003d\u003d\u003dw||w,C\u003di.getFn,A\u003dvoid 0\u003d\u003d\u003dC?o:C,L\u003di.sortFn,T\u003dvoid 0\u003d\u003d\u003dL?function(e,t){return e.score-t.score}:L,x\u003di.tokenize,k\u003dvoid 0!\u003d\u003dx\u0026\u0026x,P\u003di.matchAllTokens,D\u003dvoid 0!\u003d\u003dP\u0026\u0026P,M\u003di.includeMatches,N\u003dvoid 0!\u003d\u003dM\u0026\u0026M,F\u003di.includeScore,j\u003dvoid 0!\u003d\u003dF\u0026\u0026F,K\u003di.verbose,R\u003dvoid 0!\u003d\u003dK\u0026\u0026K;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options\u003d{location:s,distance:a,threshold:l,maxPatternLength:u,isCaseSensitive:p,tokenSeparator:f,findAllMatches:g,minMatchCharLength:b,id:E,keys:S,includeMatches:N,includeScore:j,shouldSort:O,getFn:A,sortFn:T,verbose:R,tokenize:k,matchAllTokens:D},this.setCollection(t)}var t,i,c;return t\u003de,(i\u003d[{key:\"setCollection\",value:function(e){return this.list\u003de,e}},{key:\"search\",value:function(e){var t\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:{limit:!1};this._log(\u0027---------\\nSearch pattern: \"\u0027.concat(e,\u0027\"\u0027));var i\u003dthis._prepareSearchers(e),n\u003di.tokenSearchers,s\u003di.fullSearcher,r\u003dthis._search(n,s),o\u003dr.weights,a\u003dr.results;return this._computeScore(o,a),this.options.shouldSort\u0026\u0026this._sort(a),t.limit\u0026\u0026\"number\"\u003d\u003dtypeof t.limit\u0026\u0026(a\u003da.slice(0,t.limit)),this._format(a)}},{key:\"_prepareSearchers\",value:function(){var e\u003darguments.length\u003e0\u0026\u0026void 0!\u003d\u003darguments[0]?arguments[0]:\"\",t\u003d[];if(this.options.tokenize)for(var i\u003de.split(this.options.tokenSeparator),n\u003d0,s\u003di.length;n\u003cs;n+\u003d1)t.push(new r(i[n],this.options));return{tokenSearchers:t,fullSearcher:new r(e,this.options)}}},{key:\"_search\",value:function(){var e\u003darguments.length\u003e0\u0026\u0026void 0!\u003d\u003darguments[0]?arguments[0]:[],t\u003darguments.length\u003e1?arguments[1]:void 0,i\u003dthis.list,n\u003d{},s\u003d[];if(\"string\"\u003d\u003dtypeof i[0]){for(var r\u003d0,o\u003di.length;r\u003co;r+\u003d1)this._analyze({key:\"\",value:i[r],record:r,index:r},{resultMap:n,results:s,tokenSearchers:e,fullSearcher:t});return{weights:null,results:s}}for(var a\u003d{},c\u003d0,l\u003di.length;c\u003cl;c+\u003d1)for(var h\u003di[c],u\u003d0,d\u003dthis.options.keys.length;u\u003cd;u+\u003d1){var p\u003dthis.options.keys[u];if(\"string\"!\u003dtypeof p){if(a[p.name]\u003d{weight:1-p.weight||1},p.weight\u003c\u003d0||p.weight\u003e1)throw new Error(\"Key weight has to be \u003e 0 and \u003c\u003d 1\");p\u003dp.name}else a[p]\u003d{weight:1};this._analyze({key:p,value:this.options.getFn(h,p),record:h,index:c},{resultMap:n,results:s,tokenSearchers:e,fullSearcher:t})}return{weights:a,results:s}}},{key:\"_analyze\",value:function(e,t){var i\u003de.key,n\u003de.arrayIndex,s\u003dvoid 0\u003d\u003d\u003dn?-1:n,r\u003de.value,o\u003de.record,c\u003de.index,l\u003dt.tokenSearchers,h\u003dvoid 0\u003d\u003d\u003dl?[]:l,u\u003dt.fullSearcher,d\u003dvoid 0\u003d\u003d\u003du?[]:u,p\u003dt.resultMap,m\u003dvoid 0\u003d\u003d\u003dp?{}:p,f\u003dt.results,v\u003dvoid 0\u003d\u003d\u003df?[]:f;if(null!\u003dr){var g\u003d!1,_\u003d-1,b\u003d0;if(\"string\"\u003d\u003dtypeof r){this._log(\"\\nKey: \".concat(\"\"\u003d\u003d\u003di?\"-\":i));var y\u003dd.search(r);if(this._log(\u0027Full text: \"\u0027.concat(r,\u0027\", score: \u0027).concat(y.score)),this.options.tokenize){for(var E\u003dr.split(this.options.tokenSeparator),I\u003d[],S\u003d0;S\u003ch.length;S+\u003d1){var w\u003dh[S];this._log(\u0027\\nPattern: \"\u0027.concat(w.pattern,\u0027\"\u0027));for(var O\u003d!1,C\u003d0;C\u003cE.length;C+\u003d1){var A\u003dE[C],L\u003dw.search(A),T\u003d{};L.isMatch?(T[A]\u003dL.score,g\u003d!0,O\u003d!0,I.push(L.score)):(T[A]\u003d1,this.options.matchAllTokens||I.push(1)),this._log(\u0027Token: \"\u0027.concat(A,\u0027\", score: \u0027).concat(T[A]))}O\u0026\u0026(b+\u003d1)}_\u003dI[0];for(var x\u003dI.length,k\u003d1;k\u003cx;k+\u003d1)_+\u003dI[k];_/\u003dx,this._log(\"Token score average:\",_)}var P\u003dy.score;_\u003e-1\u0026\u0026(P\u003d(P+_)/2),this._log(\"Score average:\",P);var D\u003d!this.options.tokenize||!this.options.matchAllTokens||b\u003e\u003dh.length;if(this._log(\"\\nCheck Matches: \".concat(D)),(g||y.isMatch)\u0026\u0026D){var M\u003dm[c];M?M.output.push({key:i,arrayIndex:s,value:r,score:P,matchedIndices:y.matchedIndices}):(m[c]\u003d{item:o,output:[{key:i,arrayIndex:s,value:r,score:P,matchedIndices:y.matchedIndices}]},v.push(m[c]))}}else if(a(r))for(var N\u003d0,F\u003dr.length;N\u003cF;N+\u003d1)this._analyze({key:i,arrayIndex:N,value:r[N],record:o,index:c},{resultMap:m,results:v,tokenSearchers:h,fullSearcher:d})}}},{key:\"_computeScore\",value:function(e,t){this._log(\"\\n\\nComputing score:\\n\");for(var i\u003d0,n\u003dt.length;i\u003cn;i+\u003d1){for(var s\u003dt[i].output,r\u003ds.length,o\u003d1,a\u003d1,c\u003d0;c\u003cr;c+\u003d1){var l\u003de?e[s[c].key].weight:1,h\u003d(1\u003d\u003d\u003dl?s[c].score:s[c].score||.001)*l;1!\u003d\u003dl?a\u003dMath.min(a,h):(s[c].nScore\u003dh,o*\u003dh)}t[i].score\u003d1\u003d\u003d\u003da?o:a,this._log(t[i])}}},{key:\"_sort\",value:function(e){this._log(\"\\n\\nSorting....\"),e.sort(this.options.sortFn)}},{key:\"_format\",value:function(e){var t\u003d[];if(this.options.verbose){var i\u003d[];this._log(\"\\n\\nOutput:\\n\\n\",JSON.stringify(e,(function(e,t){if(\"object\"\u003d\u003d\u003dn(t)\u0026\u0026null!\u003d\u003dt){if(-1!\u003d\u003di.indexOf(t))return;i.push(t)}return t}))),i\u003dnull}var s\u003d[];this.options.includeMatches\u0026\u0026s.push((function(e,t){var i\u003de.output;t.matches\u003d[];for(var n\u003d0,s\u003di.length;n\u003cs;n+\u003d1){var r\u003di[n];if(0!\u003d\u003dr.matchedIndices.length){var o\u003d{indices:r.matchedIndices,value:r.value};r.key\u0026\u0026(o.key\u003dr.key),r.hasOwnProperty(\"arrayIndex\")\u0026\u0026r.arrayIndex\u003e-1\u0026\u0026(o.arrayIndex\u003dr.arrayIndex),t.matches.push(o)}}})),this.options.includeScore\u0026\u0026s.push((function(e,t){t.score\u003de.score}));for(var r\u003d0,o\u003de.length;r\u003co;r+\u003d1){var a\u003de[r];if(this.options.id\u0026\u0026(a.item\u003dthis.options.getFn(a.item,this.options.id)[0]),s.length){for(var c\u003d{item:a.item},l\u003d0,h\u003ds.length;l\u003ch;l+\u003d1)s[l](a,c);t.push(c)}else t.push(a.item)}return t}},{key:\"_log\",value:function(){var e;this.options.verbose\u0026\u0026(e\u003dconsole).log.apply(e,arguments)}}])\u0026\u0026s(t.prototype,i),c\u0026\u0026s(t,c),e}();e.exports\u003dc},function(e,t,i){function n(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var s\u003di(3),r\u003di(4),o\u003di(7),a\u003dfunction(){function e(t,i){var n\u003di.location,s\u003dvoid 0\u003d\u003d\u003dn?0:n,r\u003di.distance,a\u003dvoid 0\u003d\u003d\u003dr?100:r,c\u003di.threshold,l\u003dvoid 0\u003d\u003d\u003dc?.6:c,h\u003di.maxPatternLength,u\u003dvoid 0\u003d\u003d\u003dh?32:h,d\u003di.isCaseSensitive,p\u003dvoid 0!\u003d\u003dd\u0026\u0026d,m\u003di.tokenSeparator,f\u003dvoid 0\u003d\u003d\u003dm?/ +/g:m,v\u003di.findAllMatches,g\u003dvoid 0!\u003d\u003dv\u0026\u0026v,_\u003di.minMatchCharLength,b\u003dvoid 0\u003d\u003d\u003d_?1:_;!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.options\u003d{location:s,distance:a,threshold:l,maxPatternLength:u,isCaseSensitive:p,tokenSeparator:f,findAllMatches:g,minMatchCharLength:b},this.pattern\u003dthis.options.isCaseSensitive?t:t.toLowerCase(),this.pattern.length\u003c\u003du\u0026\u0026(this.patternAlphabet\u003do(this.pattern))}var t,i,a;return t\u003de,(i\u003d[{key:\"search\",value:function(e){if(this.options.isCaseSensitive||(e\u003de.toLowerCase()),this.pattern\u003d\u003d\u003de)return{isMatch:!0,score:0,matchedIndices:[[0,e.length-1]]};var t\u003dthis.options,i\u003dt.maxPatternLength,n\u003dt.tokenSeparator;if(this.pattern.length\u003ei)return s(e,this.pattern,n);var o\u003dthis.options,a\u003do.location,c\u003do.distance,l\u003do.threshold,h\u003do.findAllMatches,u\u003do.minMatchCharLength;return r(e,this.pattern,this.patternAlphabet,{location:a,distance:c,threshold:l,findAllMatches:h,minMatchCharLength:u})}}])\u0026\u0026n(t.prototype,i),a\u0026\u0026n(t,a),e}();e.exports\u003da},function(e,t){var i\u003d/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g;e.exports\u003dfunction(e,t){var n\u003darguments.length\u003e2\u0026\u0026void 0!\u003d\u003darguments[2]?arguments[2]:/ +/g,s\u003dnew RegExp(t.replace(i,\"\\\\$\u0026\").replace(n,\"|\")),r\u003de.match(s),o\u003d!!r,a\u003d[];if(o)for(var c\u003d0,l\u003dr.length;c\u003cl;c+\u003d1){var h\u003dr[c];a.push([e.indexOf(h),h.length-1])}return{score:o?.5:1,isMatch:o,matchedIndices:a}}},function(e,t,i){var n\u003di(5),s\u003di(6);e.exports\u003dfunction(e,t,i,r){for(var o\u003dr.location,a\u003dvoid 0\u003d\u003d\u003do?0:o,c\u003dr.distance,l\u003dvoid 0\u003d\u003d\u003dc?100:c,h\u003dr.threshold,u\u003dvoid 0\u003d\u003d\u003dh?.6:h,d\u003dr.findAllMatches,p\u003dvoid 0!\u003d\u003dd\u0026\u0026d,m\u003dr.minMatchCharLength,f\u003dvoid 0\u003d\u003d\u003dm?1:m,v\u003da,g\u003de.length,_\u003du,b\u003de.indexOf(t,v),y\u003dt.length,E\u003d[],I\u003d0;I\u003cg;I+\u003d1)E[I]\u003d0;if(-1!\u003d\u003db){var S\u003dn(t,{errors:0,currentLocation:b,expectedLocation:v,distance:l});if(_\u003dMath.min(S,_),-1!\u003d\u003d(b\u003de.lastIndexOf(t,v+y))){var w\u003dn(t,{errors:0,currentLocation:b,expectedLocation:v,distance:l});_\u003dMath.min(w,_)}}b\u003d-1;for(var O\u003d[],C\u003d1,A\u003dy+g,L\u003d1\u003c\u003cy-1,T\u003d0;T\u003cy;T+\u003d1){for(var x\u003d0,k\u003dA;x\u003ck;)n(t,{errors:T,currentLocation:v+k,expectedLocation:v,distance:l})\u003c\u003d_?x\u003dk:A\u003dk,k\u003dMath.floor((A-x)/2+x);A\u003dk;var P\u003dMath.max(1,v-k+1),D\u003dp?g:Math.min(v+k,g)+y,M\u003dArray(D+2);M[D+1]\u003d(1\u003c\u003cT)-1;for(var N\u003dD;N\u003e\u003dP;N-\u003d1){var F\u003dN-1,j\u003di[e.charAt(F)];if(j\u0026\u0026(E[F]\u003d1),M[N]\u003d(M[N+1]\u003c\u003c1|1)\u0026j,0!\u003d\u003dT\u0026\u0026(M[N]|\u003d(O[N+1]|O[N])\u003c\u003c1|1|O[N+1]),M[N]\u0026L\u0026\u0026(C\u003dn(t,{errors:T,currentLocation:F,expectedLocation:v,distance:l}))\u003c\u003d_){if(_\u003dC,(b\u003dF)\u003c\u003dv)break;P\u003dMath.max(1,2*v-b)}}if(n(t,{errors:T+1,currentLocation:v,expectedLocation:v,distance:l})\u003e_)break;O\u003dM}return{isMatch:b\u003e\u003d0,score:0\u003d\u003d\u003dC?.001:C,matchedIndices:s(E,f)}}},function(e,t){e.exports\u003dfunction(e,t){var i\u003dt.errors,n\u003dvoid 0\u003d\u003d\u003di?0:i,s\u003dt.currentLocation,r\u003dvoid 0\u003d\u003d\u003ds?0:s,o\u003dt.expectedLocation,a\u003dvoid 0\u003d\u003d\u003do?0:o,c\u003dt.distance,l\u003dvoid 0\u003d\u003d\u003dc?100:c,h\u003dn/e.length,u\u003dMath.abs(a-r);return l?h+u/l:u?1:h}},function(e,t){e.exports\u003dfunction(){for(var e\u003darguments.length\u003e0\u0026\u0026void 0!\u003d\u003darguments[0]?arguments[0]:[],t\u003darguments.length\u003e1\u0026\u0026void 0!\u003d\u003darguments[1]?arguments[1]:1,i\u003d[],n\u003d-1,s\u003d-1,r\u003d0,o\u003de.length;r\u003co;r+\u003d1){var a\u003de[r];a\u0026\u0026-1\u003d\u003d\u003dn?n\u003dr:a||-1\u003d\u003d\u003dn||((s\u003dr-1)-n+1\u003e\u003dt\u0026\u0026i.push([n,s]),n\u003d-1)}return e[r-1]\u0026\u0026r-n\u003e\u003dt\u0026\u0026i.push([n,r-1]),i}},function(e,t){e.exports\u003dfunction(e){for(var t\u003d{},i\u003de.length,n\u003d0;n\u003ci;n+\u003d1)t[e.charAt(n)]\u003d0;for(var s\u003d0;s\u003ci;s+\u003d1)t[e.charAt(s)]|\u003d1\u003c\u003ci-s-1;return t}},function(e,t,i){var n\u003di(0);e.exports\u003dfunction(e,t){return function e(t,i,s){if(i){var r\u003di.indexOf(\".\"),o\u003di,a\u003dnull;-1!\u003d\u003dr\u0026\u0026(o\u003di.slice(0,r),a\u003di.slice(r+1));var c\u003dt[o];if(null!\u003dc)if(a||\"string\"!\u003dtypeof c\u0026\u0026\"number\"!\u003dtypeof c)if(n(c))for(var l\u003d0,h\u003dc.length;l\u003ch;l+\u003d1)e(c[l],a,s);else a\u0026\u0026e(c,a,s);else s.push(c.toString())}else s.push(t);return s}(e,t,[])}}])},function(e,t,i){\"use strict\";function n(e){var t,i\u003de.Symbol;return\"function\"\u003d\u003dtypeof i?i.observable?t\u003di.observable:(t\u003di(\"observable\"),i.observable\u003dt):t\u003d\"@@observable\",t}i.d(t,\"a\",(function(){return n}))},function(e,t,i){e.exports\u003di(7)},function(e,t){var i;i\u003dfunction(){return this}();try{i\u003di||new Function(\"return this\")()}catch(e){\"object\"\u003d\u003dtypeof window\u0026\u0026(i\u003dwindow)}e.exports\u003di},function(e,t){e.exports\u003dfunction(e){if(!e.webpackPolyfill){var t\u003dObject.create(e);t.children||(t.children\u003d[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),Object.defineProperty(t,\"exports\",{enumerable:!0}),t.webpackPolyfill\u003d1}return t}},function(e,t,i){\"use strict\";i.r(t);var n\u003di(2),s\u003di.n(n),r\u003di(0),o\u003di.n(r),a\u003di(1),c\u003dfunction(){return Math.random().toString(36).substring(7).split(\"\").join(\".\")},l\u003d{INIT:\"@@redux/INIT\"+c(),REPLACE:\"@@redux/REPLACE\"+c(),PROBE_UNKNOWN_ACTION:function(){return\"@@redux/PROBE_UNKNOWN_ACTION\"+c()}};function h(e){if(\"object\"!\u003dtypeof e||null\u003d\u003d\u003de)return!1;for(var t\u003de;null!\u003d\u003dObject.getPrototypeOf(t);)t\u003dObject.getPrototypeOf(t);return Object.getPrototypeOf(e)\u003d\u003d\u003dt}function u(e,t,i){var n;if(\"function\"\u003d\u003dtypeof t\u0026\u0026\"function\"\u003d\u003dtypeof i||\"function\"\u003d\u003dtypeof i\u0026\u0026\"function\"\u003d\u003dtypeof arguments[3])throw new Error(\"It looks like you are passing several store enhancers to createStore(). This is not supported. Instead, compose them together to a single function.\");if(\"function\"\u003d\u003dtypeof t\u0026\u0026void 0\u003d\u003d\u003di\u0026\u0026(i\u003dt,t\u003dvoid 0),void 0!\u003d\u003di){if(\"function\"!\u003dtypeof i)throw new Error(\"Expected the enhancer to be a function.\");return i(u)(e,t)}if(\"function\"!\u003dtypeof e)throw new Error(\"Expected the reducer to be a function.\");var s\u003de,r\u003dt,o\u003d[],c\u003do,d\u003d!1;function p(){c\u003d\u003d\u003do\u0026\u0026(c\u003do.slice())}function m(){if(d)throw new Error(\"You may not call store.getState() while the reducer is executing. The reducer has already received the state as an argument. Pass it down from the top reducer instead of reading it from the store.\");return r}function f(e){if(\"function\"!\u003dtypeof e)throw new Error(\"Expected the listener to be a function.\");if(d)throw new Error(\"You may not call store.subscribe() while the reducer is executing. If you would like to be notified after the store has been updated, subscribe from a component and invoke store.getState() in the callback to access the latest state. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.\");var t\u003d!0;return p(),c.push(e),function(){if(t){if(d)throw new Error(\"You may not unsubscribe from a store listener while the reducer is executing. See https://redux.js.org/api-reference/store#subscribe(listener) for more details.\");t\u003d!1,p();var i\u003dc.indexOf(e);c.splice(i,1)}}}function v(e){if(!h(e))throw new Error(\"Actions must be plain objects. Use custom middleware for async actions.\");if(void 0\u003d\u003d\u003de.type)throw new Error(\u0027Actions may not have an undefined \"type\" property. Have you misspelled a constant?\u0027);if(d)throw new Error(\"Reducers may not dispatch actions.\");try{d\u003d!0,r\u003ds(r,e)}finally{d\u003d!1}for(var t\u003do\u003dc,i\u003d0;i\u003ct.length;i++)(0,t[i])();return e}function g(e){if(\"function\"!\u003dtypeof e)throw new Error(\"Expected the nextReducer to be a function.\");s\u003de,v({type:l.REPLACE})}function _(){var e,t\u003df;return(e\u003d{subscribe:function(e){if(\"object\"!\u003dtypeof e||null\u003d\u003d\u003de)throw new TypeError(\"Expected the observer to be an object.\");function i(){e.next\u0026\u0026e.next(m())}return i(),{unsubscribe:t(i)}}})[a.a]\u003dfunction(){return this},e}return v({type:l.INIT}),(n\u003d{dispatch:v,subscribe:f,getState:m,replaceReducer:g})[a.a]\u003d_,n}function d(e,t){var i\u003dt\u0026\u0026t.type;return\"Given \"+(i\u0026\u0026\u0027action \"\u0027+String(i)+\u0027\"\u0027||\"an action\")+\u0027, reducer \"\u0027+e+\u0027\" returned undefined. To ignore an action, you must explicitly return the previous state. If you want this reducer to hold no value, you can return null instead of undefined.\u0027}var p,m\u003d[],f\u003d[],v\u003d[],g\u003d{loading:!1},_\u003dfunction(e,t){switch(void 0\u003d\u003d\u003de\u0026\u0026(e\u003dg),t.type){case\"SET_IS_LOADING\":return{loading:t.isLoading};default:return e}},b\u003dfunction(e){return Array.from({length:e},(function(){return(e\u003d0,t\u003d36,Math.floor(Math.random()*(t-e)+e)).toString(36);var e,t})).join(\"\")},y\u003dfunction(e){return Object.prototype.toString.call(e).slice(8,-1)},E\u003dfunction(e,t){return null!\u003dt\u0026\u0026y(t)\u003d\u003d\u003de},I\u003dfunction(e){return\"string\"!\u003dtypeof e?e:e.replace(/\u0026/g,\"\u0026amp;\").replace(/\u003e/g,\"\u0026rt;\").replace(/\u003c/g,\"\u0026lt;\").replace(/\"/g,\"\u0026quot;\")},S\u003d(p\u003ddocument.createElement(\"div\"),function(e){var t\u003de.trim();p.innerHTML\u003dt;for(var i\u003dp.children[0];p.firstChild;)p.removeChild(p.firstChild);return i}),w\u003dfunction(e,t){return e.score-t.score},O\u003dfunction(e){return JSON.parse(JSON.stringify(e))},C\u003dfunction(e){for(var t\u003dObject.keys(e),i\u003d{},n\u003d0;n\u003ct.length;n++){var s\u003dt[n];\"function\"\u003d\u003dtypeof e[s]\u0026\u0026(i[s]\u003de[s])}var r,o\u003dObject.keys(i);try{!function(e){Object.keys(e).forEach((function(t){var i\u003de[t];if(void 0\u003d\u003d\u003di(void 0,{type:l.INIT}))throw new Error(\u0027Reducer \"\u0027+t+\"\\\" returned undefined during initialization. If the state passed to the reducer is undefined, you must explicitly return the initial state. The initial state may not be undefined. If you don\u0027t want to set a value for this reducer, you can use null instead of undefined.\");if(void 0\u003d\u003d\u003di(void 0,{type:l.PROBE_UNKNOWN_ACTION()}))throw new Error(\u0027Reducer \"\u0027+t+\"\\\" returned undefined when probed with a random type. Don\u0027t try to handle \"+l.INIT+\u0027 or other actions in \"redux/*\" namespace. They are considered private. Instead, you must return the current state for any unknown actions, unless it is undefined, in which case you must return the initial state, regardless of the action type. The initial state may not be undefined, but can be null.\u0027)}))}(i)}catch(e){r\u003de}return function(e,t){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{}),r)throw r;for(var n\u003d!1,s\u003d{},a\u003d0;a\u003co.length;a++){var c\u003do[a],l\u003di[c],h\u003de[c],u\u003dl(h,t);if(void 0\u003d\u003d\u003du){var p\u003dd(c,t);throw new Error(p)}s[c]\u003du,n\u003dn||u!\u003d\u003dh}return n?s:e}}({items:function(e,t){switch(void 0\u003d\u003d\u003de\u0026\u0026(e\u003dm),t.type){case\"ADD_ITEM\":return[].concat(e,[{id:t.id,choiceId:t.choiceId,groupId:t.groupId,value:t.value,label:t.label,active:!0,highlighted:!1,customProperties:t.customProperties,placeholder:t.placeholder||!1,keyCode:null}]).map((function(e){var t\u003de;return t.highlighted\u003d!1,t}));case\"REMOVE_ITEM\":return e.map((function(e){var i\u003de;return i.id\u003d\u003d\u003dt.id\u0026\u0026(i.active\u003d!1),i}));case\"HIGHLIGHT_ITEM\":return e.map((function(e){var i\u003de;return i.id\u003d\u003d\u003dt.id\u0026\u0026(i.highlighted\u003dt.highlighted),i}));default:return e}},groups:function(e,t){switch(void 0\u003d\u003d\u003de\u0026\u0026(e\u003df),t.type){case\"ADD_GROUP\":return[].concat(e,[{id:t.id,value:t.value,active:t.active,disabled:t.disabled}]);case\"CLEAR_CHOICES\":return[];default:return e}},choices:function(e,t){switch(void 0\u003d\u003d\u003de\u0026\u0026(e\u003dv),t.type){case\"ADD_CHOICE\":return[].concat(e,[{id:t.id,elementId:t.elementId,groupId:t.groupId,value:t.value,label:t.label||t.value,disabled:t.disabled||!1,selected:!1,active:!0,score:9999,customProperties:t.customProperties,placeholder:t.placeholder||!1,keyCode:null}]);case\"ADD_ITEM\":return t.activateOptions?e.map((function(e){var i\u003de;return i.active\u003dt.active,i})):t.choiceId\u003e-1?e.map((function(e){var i\u003de;return i.id\u003d\u003d\u003dparseInt(t.choiceId,10)\u0026\u0026(i.selected\u003d!0),i})):e;case\"REMOVE_ITEM\":return t.choiceId\u003e-1?e.map((function(e){var i\u003de;return i.id\u003d\u003d\u003dparseInt(t.choiceId,10)\u0026\u0026(i.selected\u003d!1),i})):e;case\"FILTER_CHOICES\":return e.map((function(e){var i\u003de;return i.active\u003dt.results.some((function(e){var t\u003de.item,n\u003de.score;return t.id\u003d\u003d\u003di.id\u0026\u0026(i.score\u003dn,!0)})),i}));case\"ACTIVATE_CHOICES\":return e.map((function(e){var i\u003de;return i.active\u003dt.active,i}));case\"CLEAR_CHOICES\":return v;default:return e}},general:_}),A\u003dfunction(e,t){var i\u003de;if(\"CLEAR_ALL\"\u003d\u003d\u003dt.type)i\u003dvoid 0;else if(\"RESET_TO\"\u003d\u003d\u003dt.type)return O(t.state);return C(i,t)};function L(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var T\u003dfunction(){function e(){this._store\u003du(A,window.__REDUX_DEVTOOLS_EXTENSION__\u0026\u0026window.__REDUX_DEVTOOLS_EXTENSION__())}var t,i,n,s\u003de.prototype;return s.subscribe\u003dfunction(e){this._store.subscribe(e)},s.dispatch\u003dfunction(e){this._store.dispatch(e)},s.isLoading\u003dfunction(){return this.state.general.loading},s.getChoiceById\u003dfunction(e){return this.activeChoices.find((function(t){return t.id\u003d\u003d\u003dparseInt(e,10)}))},s.getGroupById\u003dfunction(e){return this.groups.find((function(t){return t.id\u003d\u003d\u003de}))},t\u003de,(i\u003d[{key:\"state\",get:function(){return this._store.getState()}},{key:\"items\",get:function(){return this.state.items}},{key:\"activeItems\",get:function(){return this.items.filter((function(e){return!0\u003d\u003d\u003de.active}))}},{key:\"highlightedActiveItems\",get:function(){return this.items.filter((function(e){return e.active\u0026\u0026e.highlighted}))}},{key:\"choices\",get:function(){return this.state.choices}},{key:\"activeChoices\",get:function(){return this.choices.filter((function(e){return!0\u003d\u003d\u003de.active}))}},{key:\"selectableChoices\",get:function(){return this.choices.filter((function(e){return!0!\u003d\u003de.disabled}))}},{key:\"searchableChoices\",get:function(){return this.selectableChoices.filter((function(e){return!0!\u003d\u003de.placeholder}))}},{key:\"placeholderChoice\",get:function(){return[].concat(this.choices).reverse().find((function(e){return!0\u003d\u003d\u003de.placeholder}))}},{key:\"groups\",get:function(){return this.state.groups}},{key:\"activeGroups\",get:function(){var e\u003dthis.groups,t\u003dthis.choices;return e.filter((function(e){var i\u003d!0\u003d\u003d\u003de.active\u0026\u0026!1\u003d\u003d\u003de.disabled,n\u003dt.some((function(e){return!0\u003d\u003d\u003de.active\u0026\u0026!1\u003d\u003d\u003de.disabled}));return i\u0026\u0026n}),[])}}])\u0026\u0026L(t.prototype,i),n\u0026\u0026L(t,n),e}();function x(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var k\u003dfunction(){function e(e){var t\u003de.element,i\u003de.type,n\u003de.classNames;this.element\u003dt,this.classNames\u003dn,this.type\u003di,this.isActive\u003d!1}var t,i,n,s\u003de.prototype;return s.getChild\u003dfunction(e){return this.element.querySelector(e)},s.show\u003dfunction(){return this.element.classList.add(this.classNames.activeState),this.element.setAttribute(\"aria-expanded\",\"true\"),this.isActive\u003d!0,this},s.hide\u003dfunction(){return this.element.classList.remove(this.classNames.activeState),this.element.setAttribute(\"aria-expanded\",\"false\"),this.isActive\u003d!1,this},t\u003de,(i\u003d[{key:\"distanceFromTopWindow\",get:function(){return this.element.getBoundingClientRect().bottom}}])\u0026\u0026x(t.prototype,i),n\u0026\u0026x(t,n),e}(),P\u003d{items:[],choices:[],silent:!1,renderChoiceLimit:-1,maxItemCount:-1,addItems:!0,addItemFilter:null,removeItems:!0,removeItemButton:!1,editItems:!1,duplicateItemsAllowed:!0,delimiter:\",\",paste:!0,searchEnabled:!0,searchChoices:!0,searchFloor:1,searchResultLimit:4,searchFields:[\"label\",\"value\"],position:\"auto\",resetScrollPosition:!0,shouldSort:!0,shouldSortItems:!1,sorter:function(e,t){var i\u003de.value,n\u003de.label,s\u003dvoid 0\u003d\u003d\u003dn?i:n,r\u003dt.value,o\u003dt.label,a\u003dvoid 0\u003d\u003d\u003do?r:o;return s.localeCompare(a,[],{sensitivity:\"base\",ignorePunctuation:!0,numeric:!0})},placeholder:!0,placeholderValue:null,searchPlaceholderValue:null,prependValue:null,appendValue:null,renderSelectedChoices:\"auto\",loadingText:\"Loading...\",noResultsText:\"No results found\",noChoicesText:\"No choices to choose from\",itemSelectText:\"Press to select\",uniqueItemText:\"Only unique values can be added\",customAddItemText:\"Only values matching specific conditions can be added\",addItemText:function(e){return\u0027Press Enter to add \u003cb\u003e\"\u0027+I(e)+\u0027\"\u003c/b\u003e\u0027},maxItemText:function(e){return\"Only \"+e+\" values can be added\"},valueComparer:function(e,t){return e\u003d\u003d\u003dt},fuseOptions:{includeScore:!0},callbackOnInit:null,callbackOnCreateTemplates:null,classNames:{containerOuter:\"choices\",containerInner:\"choices__inner\",input:\"choices__input\",inputCloned:\"choices__input--cloned\",list:\"choices__list\",listItems:\"choices__list--multiple\",listSingle:\"choices__list--single\",listDropdown:\"choices__list--dropdown\",item:\"choices__item\",itemSelectable:\"choices__item--selectable\",itemDisabled:\"choices__item--disabled\",itemChoice:\"choices__item--choice\",placeholder:\"choices__placeholder\",group:\"choices__group\",groupHeading:\"choices__heading\",button:\"choices__button\",activeState:\"is-active\",focusState:\"is-focused\",openState:\"is-open\",disabledState:\"is-disabled\",highlightedState:\"is-highlighted\",selectedState:\"is-selected\",flippedState:\"is-flipped\",loadingState:\"is-loading\",noResults:\"has-no-results\",noChoices:\"has-no-choices\"}},D\u003d\"showDropdown\",M\u003d\"hideDropdown\",N\u003d\"change\",F\u003d\"choice\",j\u003d\"search\",K\u003d\"addItem\",R\u003d\"removeItem\",H\u003d\"highlightItem\",B\u003d\"highlightChoice\",V\u003d\"ADD_CHOICE\",G\u003d\"FILTER_CHOICES\",q\u003d\"ACTIVATE_CHOICES\",U\u003d\"CLEAR_CHOICES\",z\u003d\"ADD_GROUP\",W\u003d\"ADD_ITEM\",X\u003d\"REMOVE_ITEM\",$\u003d\"HIGHLIGHT_ITEM\",J\u003d46,Y\u003d8,Z\u003d13,Q\u003d65,ee\u003d27,te\u003d38,ie\u003d40,ne\u003d33,se\u003d34,re\u003d\"text\",oe\u003d\"select-one\",ae\u003d\"select-multiple\",ce\u003dfunction(){function e(e){var t\u003de.element,i\u003de.type,n\u003de.classNames,s\u003de.position;this.element\u003dt,this.classNames\u003dn,this.type\u003di,this.position\u003ds,this.isOpen\u003d!1,this.isFlipped\u003d!1,this.isFocussed\u003d!1,this.isDisabled\u003d!1,this.isLoading\u003d!1,this._onFocus\u003dthis._onFocus.bind(this),this._onBlur\u003dthis._onBlur.bind(this)}var t\u003de.prototype;return t.addEventListeners\u003dfunction(){this.element.addEventListener(\"focus\",this._onFocus),this.element.addEventListener(\"blur\",this._onBlur)},t.removeEventListeners\u003dfunction(){this.element.removeEventListener(\"focus\",this._onFocus),this.element.removeEventListener(\"blur\",this._onBlur)},t.shouldFlip\u003dfunction(e){if(\"number\"!\u003dtypeof e)return!1;var t\u003d!1;return\"auto\"\u003d\u003d\u003dthis.position?t\u003d!window.matchMedia(\"(min-height: \"+(e+1)+\"px)\").matches:\"top\"\u003d\u003d\u003dthis.position\u0026\u0026(t\u003d!0),t},t.setActiveDescendant\u003dfunction(e){this.element.setAttribute(\"aria-activedescendant\",e)},t.removeActiveDescendant\u003dfunction(){this.element.removeAttribute(\"aria-activedescendant\")},t.open\u003dfunction(e){this.element.classList.add(this.classNames.openState),this.element.setAttribute(\"aria-expanded\",\"true\"),this.isOpen\u003d!0,this.shouldFlip(e)\u0026\u0026(this.element.classList.add(this.classNames.flippedState),this.isFlipped\u003d!0)},t.close\u003dfunction(){this.element.classList.remove(this.classNames.openState),this.element.setAttribute(\"aria-expanded\",\"false\"),this.removeActiveDescendant(),this.isOpen\u003d!1,this.isFlipped\u0026\u0026(this.element.classList.remove(this.classNames.flippedState),this.isFlipped\u003d!1)},t.focus\u003dfunction(){this.isFocussed||this.element.focus()},t.addFocusState\u003dfunction(){this.element.classList.add(this.classNames.focusState)},t.removeFocusState\u003dfunction(){this.element.classList.remove(this.classNames.focusState)},t.enable\u003dfunction(){this.element.classList.remove(this.classNames.disabledState),this.element.removeAttribute(\"aria-disabled\"),this.type\u003d\u003d\u003doe\u0026\u0026this.element.setAttribute(\"tabindex\",\"0\"),this.isDisabled\u003d!1},t.disable\u003dfunction(){this.element.classList.add(this.classNames.disabledState),this.element.setAttribute(\"aria-disabled\",\"true\"),this.type\u003d\u003d\u003doe\u0026\u0026this.element.setAttribute(\"tabindex\",\"-1\"),this.isDisabled\u003d!0},t.wrap\u003dfunction(e){!function(e,t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003ddocument.createElement(\"div\")),e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.appendChild(e)}(e,this.element)},t.unwrap\u003dfunction(e){this.element.parentNode.insertBefore(e,this.element),this.element.parentNode.removeChild(this.element)},t.addLoadingState\u003dfunction(){this.element.classList.add(this.classNames.loadingState),this.element.setAttribute(\"aria-busy\",\"true\"),this.isLoading\u003d!0},t.removeLoadingState\u003dfunction(){this.element.classList.remove(this.classNames.loadingState),this.element.removeAttribute(\"aria-busy\"),this.isLoading\u003d!1},t._onFocus\u003dfunction(){this.isFocussed\u003d!0},t._onBlur\u003dfunction(){this.isFocussed\u003d!1},e}();function le(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var he\u003dfunction(){function e(e){var t\u003de.element,i\u003de.type,n\u003de.classNames,s\u003de.preventPaste;this.element\u003dt,this.type\u003di,this.classNames\u003dn,this.preventPaste\u003ds,this.isFocussed\u003dthis.element\u003d\u003d\u003ddocument.activeElement,this.isDisabled\u003dt.disabled,this._onPaste\u003dthis._onPaste.bind(this),this._onInput\u003dthis._onInput.bind(this),this._onFocus\u003dthis._onFocus.bind(this),this._onBlur\u003dthis._onBlur.bind(this)}var t,i,n,s\u003de.prototype;return s.addEventListeners\u003dfunction(){this.element.addEventListener(\"paste\",this._onPaste),this.element.addEventListener(\"input\",this._onInput,{passive:!0}),this.element.addEventListener(\"focus\",this._onFocus,{passive:!0}),this.element.addEventListener(\"blur\",this._onBlur,{passive:!0})},s.removeEventListeners\u003dfunction(){this.element.removeEventListener(\"input\",this._onInput,{passive:!0}),this.element.removeEventListener(\"paste\",this._onPaste),this.element.removeEventListener(\"focus\",this._onFocus,{passive:!0}),this.element.removeEventListener(\"blur\",this._onBlur,{passive:!0})},s.enable\u003dfunction(){this.element.removeAttribute(\"disabled\"),this.isDisabled\u003d!1},s.disable\u003dfunction(){this.element.setAttribute(\"disabled\",\"\"),this.isDisabled\u003d!0},s.focus\u003dfunction(){this.isFocussed||this.element.focus()},s.blur\u003dfunction(){this.isFocussed\u0026\u0026this.element.blur()},s.clear\u003dfunction(e){return void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!0),this.element.value\u0026\u0026(this.element.value\u003d\"\"),e\u0026\u0026this.setWidth(),this},s.setWidth\u003dfunction(){var e\u003dthis.element,t\u003de.style,i\u003de.value,n\u003de.placeholder;t.minWidth\u003dn.length+1+\"ch\",t.width\u003di.length+1+\"ch\"},s.setActiveDescendant\u003dfunction(e){this.element.setAttribute(\"aria-activedescendant\",e)},s.removeActiveDescendant\u003dfunction(){this.element.removeAttribute(\"aria-activedescendant\")},s._onInput\u003dfunction(){this.type!\u003d\u003doe\u0026\u0026this.setWidth()},s._onPaste\u003dfunction(e){this.preventPaste\u0026\u0026e.preventDefault()},s._onFocus\u003dfunction(){this.isFocussed\u003d!0},s._onBlur\u003dfunction(){this.isFocussed\u003d!1},t\u003de,(i\u003d[{key:\"placeholder\",set:function(e){this.element.placeholder\u003de}},{key:\"value\",get:function(){return I(this.element.value)},set:function(e){this.element.value\u003de}}])\u0026\u0026le(t.prototype,i),n\u0026\u0026le(t,n),e}(),ue\u003dfunction(){function e(e){var t\u003de.element;this.element\u003dt,this.scrollPos\u003dthis.element.scrollTop,this.height\u003dthis.element.offsetHeight}var t\u003de.prototype;return t.clear\u003dfunction(){this.element.innerHTML\u003d\"\"},t.append\u003dfunction(e){this.element.appendChild(e)},t.getChild\u003dfunction(e){return this.element.querySelector(e)},t.hasChildren\u003dfunction(){return this.element.hasChildNodes()},t.scrollToTop\u003dfunction(){this.element.scrollTop\u003d0},t.scrollToChildElement\u003dfunction(e,t){var i\u003dthis;if(e){var n\u003dthis.element.offsetHeight,s\u003dthis.element.scrollTop+n,r\u003de.offsetHeight,o\u003de.offsetTop+r,a\u003dt\u003e0?this.element.scrollTop+o-s:e.offsetTop;requestAnimationFrame((function(){i._animateScroll(a,t)}))}},t._scrollDown\u003dfunction(e,t,i){var n\u003d(i-e)/t,s\u003dn\u003e1?n:1;this.element.scrollTop\u003de+s},t._scrollUp\u003dfunction(e,t,i){var n\u003d(e-i)/t,s\u003dn\u003e1?n:1;this.element.scrollTop\u003de-s},t._animateScroll\u003dfunction(e,t){var i\u003dthis,n\u003dthis.element.scrollTop,s\u003d!1;t\u003e0?(this._scrollDown(n,4,e),n\u003ce\u0026\u0026(s\u003d!0)):(this._scrollUp(n,4,e),n\u003ee\u0026\u0026(s\u003d!0)),s\u0026\u0026requestAnimationFrame((function(){i._animateScroll(e,t)}))},e}();function de(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var pe\u003dfunction(){function e(e){var t\u003de.element,i\u003de.classNames;if(this.element\u003dt,this.classNames\u003di,!(t instanceof HTMLInputElement||t instanceof HTMLSelectElement))throw new TypeError(\"Invalid element passed\");this.isDisabled\u003d!1}var t,i,n,s\u003de.prototype;return s.conceal\u003dfunction(){this.element.classList.add(this.classNames.input),this.element.hidden\u003d!0,this.element.tabIndex\u003d-1;var e\u003dthis.element.getAttribute(\"style\");e\u0026\u0026this.element.setAttribute(\"data-choice-orig-style\",e),this.element.setAttribute(\"data-choice\",\"active\")},s.reveal\u003dfunction(){this.element.classList.remove(this.classNames.input),this.element.hidden\u003d!1,this.element.removeAttribute(\"tabindex\");var e\u003dthis.element.getAttribute(\"data-choice-orig-style\");e?(this.element.removeAttribute(\"data-choice-orig-style\"),this.element.setAttribute(\"style\",e)):this.element.removeAttribute(\"style\"),this.element.removeAttribute(\"data-choice\"),this.element.value\u003dthis.element.value},s.enable\u003dfunction(){this.element.removeAttribute(\"disabled\"),this.element.disabled\u003d!1,this.isDisabled\u003d!1},s.disable\u003dfunction(){this.element.setAttribute(\"disabled\",\"\"),this.element.disabled\u003d!0,this.isDisabled\u003d!0},s.triggerEvent\u003dfunction(e,t){!function(e,t,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003dnull);var n\u003dnew CustomEvent(t,{detail:i,bubbles:!0,cancelable:!0});e.dispatchEvent(n)}(this.element,e,t)},t\u003de,(i\u003d[{key:\"isActive\",get:function(){return\"active\"\u003d\u003d\u003dthis.element.dataset.choice}},{key:\"dir\",get:function(){return this.element.dir}},{key:\"value\",get:function(){return this.element.value},set:function(e){this.element.value\u003de}}])\u0026\u0026de(t.prototype,i),n\u0026\u0026de(t,n),e}();function me(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var fe\u003dfunction(e){var t,i,n,s,r;function o(t){var i,n\u003dt.element,s\u003dt.classNames,r\u003dt.delimiter;return(i\u003de.call(this,{element:n,classNames:s})||this).delimiter\u003dr,i}return i\u003de,(t\u003do).prototype\u003dObject.create(i.prototype),t.prototype.constructor\u003dt,t.__proto__\u003di,n\u003do,(s\u003d[{key:\"value\",get:function(){return this.element.value},set:function(e){var t\u003de.map((function(e){return e.value})).join(this.delimiter);this.element.setAttribute(\"value\",t),this.element.value\u003dt}}])\u0026\u0026me(n.prototype,s),r\u0026\u0026me(n,r),o}(pe);function ve(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var ge\u003dfunction(e){var t,i,n,s,r;function o(t){var i,n\u003dt.element,s\u003dt.classNames,r\u003dt.template;return(i\u003de.call(this,{element:n,classNames:s})||this).template\u003dr,i}return i\u003de,(t\u003do).prototype\u003dObject.create(i.prototype),t.prototype.constructor\u003dt,t.__proto__\u003di,o.prototype.appendDocFragment\u003dfunction(e){this.element.innerHTML\u003d\"\",this.element.appendChild(e)},n\u003do,(s\u003d[{key:\"placeholderOption\",get:function(){return this.element.querySelector(\u0027option[value\u003d\"\"]\u0027)||this.element.querySelector(\"option[placeholder]\")}},{key:\"optionGroups\",get:function(){return Array.from(this.element.getElementsByTagName(\"OPTGROUP\"))}},{key:\"options\",get:function(){return Array.from(this.element.options)},set:function(e){var t\u003dthis,i\u003ddocument.createDocumentFragment();e.forEach((function(e){return n\u003de,s\u003dt.template(n),void i.appendChild(s);var n,s})),this.appendDocFragment(i)}}])\u0026\u0026ve(n.prototype,s),r\u0026\u0026ve(n,r),o}(pe),_e\u003d{containerOuter:function(e,t,i,n,s,r){var o\u003de.containerOuter,a\u003dObject.assign(document.createElement(\"div\"),{className:o});return a.dataset.type\u003dr,t\u0026\u0026(a.dir\u003dt),n\u0026\u0026(a.tabIndex\u003d0),i\u0026\u0026(a.setAttribute(\"role\",s?\"combobox\":\"listbox\"),s\u0026\u0026a.setAttribute(\"aria-autocomplete\",\"list\")),a.setAttribute(\"aria-haspopup\",\"true\"),a.setAttribute(\"aria-expanded\",\"false\"),a},containerInner:function(e){var t\u003de.containerInner;return Object.assign(document.createElement(\"div\"),{className:t})},itemList:function(e,t){var i\u003de.list,n\u003de.listSingle,s\u003de.listItems;return Object.assign(document.createElement(\"div\"),{className:i+\" \"+(t?n:s)})},placeholder:function(e,t){var i\u003de.placeholder;return Object.assign(document.createElement(\"div\"),{className:i,innerHTML:t})},item:function(e,t,i){var n\u003de.item,s\u003de.button,r\u003de.highlightedState,o\u003de.itemSelectable,a\u003de.placeholder,c\u003dt.id,l\u003dt.value,h\u003dt.label,u\u003dt.customProperties,d\u003dt.active,p\u003dt.disabled,m\u003dt.highlighted,f\u003dt.placeholder,v\u003dObject.assign(document.createElement(\"div\"),{className:n,innerHTML:h});if(Object.assign(v.dataset,{item:\"\",id:c,value:l,customProperties:u}),d\u0026\u0026v.setAttribute(\"aria-selected\",\"true\"),p\u0026\u0026v.setAttribute(\"aria-disabled\",\"true\"),f\u0026\u0026v.classList.add(a),v.classList.add(m?r:o),i){p\u0026\u0026v.classList.remove(o),v.dataset.deletable\u003d\"\";var g\u003d\"Remove item\",_\u003dObject.assign(document.createElement(\"button\"),{type:\"button\",className:s,innerHTML:g});_.setAttribute(\"aria-label\",\"Remove item: \u0027\"+l+\"\u0027\"),_.dataset.button\u003d\"\",v.appendChild(_)}return v},choiceList:function(e,t){var i\u003de.list,n\u003dObject.assign(document.createElement(\"div\"),{className:i});return t||n.setAttribute(\"aria-multiselectable\",\"true\"),n.setAttribute(\"role\",\"listbox\"),n},choiceGroup:function(e,t){var i\u003de.group,n\u003de.groupHeading,s\u003de.itemDisabled,r\u003dt.id,o\u003dt.value,a\u003dt.disabled,c\u003dObject.assign(document.createElement(\"div\"),{className:i+\" \"+(a?s:\"\")});return c.setAttribute(\"role\",\"group\"),Object.assign(c.dataset,{group:\"\",id:r,value:o}),a\u0026\u0026c.setAttribute(\"aria-disabled\",\"true\"),c.appendChild(Object.assign(document.createElement(\"div\"),{className:n,innerHTML:o})),c},choice:function(e,t,i){var n\u003de.item,s\u003de.itemChoice,r\u003de.itemSelectable,o\u003de.selectedState,a\u003de.itemDisabled,c\u003de.placeholder,l\u003dt.id,h\u003dt.value,u\u003dt.label,d\u003dt.groupId,p\u003dt.elementId,m\u003dt.disabled,f\u003dt.selected,v\u003dt.placeholder,g\u003dObject.assign(document.createElement(\"div\"),{id:p,innerHTML:u,className:n+\" \"+s});return f\u0026\u0026g.classList.add(o),v\u0026\u0026g.classList.add(c),g.setAttribute(\"role\",d\u003e0?\"treeitem\":\"option\"),Object.assign(g.dataset,{choice:\"\",id:l,value:h,selectText:i}),m?(g.classList.add(a),g.dataset.choiceDisabled\u003d\"\",g.setAttribute(\"aria-disabled\",\"true\")):(g.classList.add(r),g.dataset.choiceSelectable\u003d\"\"),g},input:function(e,t){var i\u003de.input,n\u003de.inputCloned,s\u003dObject.assign(document.createElement(\"input\"),{type:\"text\",className:i+\" \"+n,autocomplete:\"off\",autocapitalize:\"off\",spellcheck:!1});return s.setAttribute(\"role\",\"textbox\"),s.setAttribute(\"aria-autocomplete\",\"list\"),s.setAttribute(\"aria-label\",t),s},dropdown:function(e){var t\u003de.list,i\u003de.listDropdown,n\u003ddocument.createElement(\"div\");return n.classList.add(t,i),n.setAttribute(\"aria-expanded\",\"false\"),n},notice:function(e,t,i){var n\u003de.item,s\u003de.itemChoice,r\u003de.noResults,o\u003de.noChoices;void 0\u003d\u003d\u003di\u0026\u0026(i\u003d\"\");var a\u003d[n,s];return\"no-choices\"\u003d\u003d\u003di?a.push(o):\"no-results\"\u003d\u003d\u003di\u0026\u0026a.push(r),Object.assign(document.createElement(\"div\"),{innerHTML:t,className:a.join(\" \")})},option:function(e){var t\u003de.label,i\u003de.value,n\u003de.customProperties,s\u003de.active,r\u003de.disabled,o\u003dnew Option(t,i,!1,s);return n\u0026\u0026(o.dataset.customProperties\u003dn),o.disabled\u003dr,o}},be\u003dfunction(e){return void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!0),{type:q,active:e}},ye\u003dfunction(e,t){return{type:$,id:e,highlighted:t}},Ee\u003dfunction(e){var t\u003de.value,i\u003de.id,n\u003de.active,s\u003de.disabled;return{type:z,value:t,id:i,active:n,disabled:s}},Ie\u003dfunction(e){return{type:\"SET_IS_LOADING\",isLoading:e}};function Se(e,t){for(var i\u003d0;i\u003ct.length;i++){var n\u003dt[i];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(e,n.key,n)}}var we\u003d\"-ms-scroll-limit\"in document.documentElement.style\u0026\u0026\"-ms-ime-align\"in document.documentElement.style,Oe\u003d{},Ce\u003dfunction(){var e,t,i;function n(e,t){var i\u003dthis;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"[data-choice]\"),void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d{}),this.config\u003do.a.all([P,n.defaults.options,t],{arrayMerge:function(e,t){return[].concat(t)}});var s,r,a,c,l\u003d(s\u003dthis.config,r\u003dP,a\u003dObject.keys(s).sort(),c\u003dObject.keys(r).sort(),a.filter((function(e){return c.indexOf(e)\u003c0})));l.length\u0026\u0026console.warn(\"Unknown config option(s) passed\",l.join(\", \"));var h\u003d\"string\"\u003d\u003dtypeof e?document.querySelector(e):e;if(!(h instanceof HTMLInputElement||h instanceof HTMLSelectElement))throw TypeError(\"Expected one of the following types text|select-one|select-multiple\");if(this._isTextElement\u003dh.type\u003d\u003d\u003dre,this._isSelectOneElement\u003dh.type\u003d\u003d\u003doe,this._isSelectMultipleElement\u003dh.type\u003d\u003d\u003dae,this._isSelectElement\u003dthis._isSelectOneElement||this._isSelectMultipleElement,this.config.searchEnabled\u003dthis._isSelectMultipleElement||this.config.searchEnabled,[\"auto\",\"always\"].includes(this.config.renderSelectedChoices)||(this.config.renderSelectedChoices\u003d\"auto\"),t.addItemFilter\u0026\u0026\"function\"!\u003dtypeof t.addItemFilter){var u\u003dt.addItemFilter instanceof RegExp?t.addItemFilter:new RegExp(t.addItemFilter);this.config.addItemFilter\u003du.test.bind(u)}if(this._isTextElement?this.passedElement\u003dnew fe({element:h,classNames:this.config.classNames,delimiter:this.config.delimiter}):this.passedElement\u003dnew ge({element:h,classNames:this.config.classNames,template:function(e){return i._templates.option(e)}}),this.initialised\u003d!1,this._store\u003dnew T,this._initialState\u003d{},this._currentState\u003d{},this._prevState\u003d{},this._currentValue\u003d\"\",this._canSearch\u003dthis.config.searchEnabled,this._isScrollingOnIe\u003d!1,this._highlightPosition\u003d0,this._wasTap\u003d!0,this._placeholderValue\u003dthis._generatePlaceholderValue(),this._baseId\u003dfunction(e,t){var i\u003de.id||e.name\u0026\u0026e.name+\"-\"+b(2)||b(4);return t+\"-\"+i.replace(/(:|\\.|\\[|\\]|,)/g,\"\")}(this.passedElement.element,\"choices-\"),this._direction\u003dthis.passedElement.dir,!this._direction){var d\u003dwindow.getComputedStyle(this.passedElement.element).direction;d!\u003d\u003dwindow.getComputedStyle(document.documentElement).direction\u0026\u0026(this._direction\u003dd)}if(this._idNames\u003d{itemChoice:\"item-choice\"},this._presetGroups\u003dthis.passedElement.optionGroups,this._presetOptions\u003dthis.passedElement.options,this._presetChoices\u003dthis.config.choices,this._presetItems\u003dthis.config.items,this.passedElement.value\u0026\u0026(this._presetItems\u003dthis._presetItems.concat(this.passedElement.value.split(this.config.delimiter))),this.passedElement.options\u0026\u0026this.passedElement.options.forEach((function(e){i._presetChoices.push({value:e.value,label:e.innerHTML,selected:e.selected,disabled:e.disabled||e.parentNode.disabled,placeholder:\"\"\u003d\u003d\u003de.value||e.hasAttribute(\"placeholder\"),customProperties:e.getAttribute(\"data-custom-properties\")})})),this._render\u003dthis._render.bind(this),this._onFocus\u003dthis._onFocus.bind(this),this._onBlur\u003dthis._onBlur.bind(this),this._onKeyUp\u003dthis._onKeyUp.bind(this),this._onKeyDown\u003dthis._onKeyDown.bind(this),this._onClick\u003dthis._onClick.bind(this),this._onTouchMove\u003dthis._onTouchMove.bind(this),this._onTouchEnd\u003dthis._onTouchEnd.bind(this),this._onMouseDown\u003dthis._onMouseDown.bind(this),this._onMouseOver\u003dthis._onMouseOver.bind(this),this._onFormReset\u003dthis._onFormReset.bind(this),this._onAKey\u003dthis._onAKey.bind(this),this._onEnterKey\u003dthis._onEnterKey.bind(this),this._onEscapeKey\u003dthis._onEscapeKey.bind(this),this._onDirectionKey\u003dthis._onDirectionKey.bind(this),this._onDeleteKey\u003dthis._onDeleteKey.bind(this),this.passedElement.isActive)return this.config.silent||console.warn(\"Trying to initialise Choices on element already initialised\"),void(this.initialised\u003d!0);this.init()}e\u003dn,i\u003d[{key:\"defaults\",get:function(){return Object.preventExtensions({get options(){return Oe},get templates(){return _e}})}}],(t\u003dnull)\u0026\u0026Se(e.prototype,t),i\u0026\u0026Se(e,i);var r\u003dn.prototype;return r.init\u003dfunction(){if(!this.initialised){this._createTemplates(),this._createElements(),this._createStructure(),this._initialState\u003dO(this._store.state),this._store.subscribe(this._render),this._render(),this._addEventListeners(),(!this.config.addItems||this.passedElement.element.hasAttribute(\"disabled\"))\u0026\u0026this.disable(),this.initialised\u003d!0;var e\u003dthis.config.callbackOnInit;e\u0026\u0026\"function\"\u003d\u003dtypeof e\u0026\u0026e.call(this)}},r.destroy\u003dfunction(){this.initialised\u0026\u0026(this._removeEventListeners(),this.passedElement.reveal(),this.containerOuter.unwrap(this.passedElement.element),this.clearStore(),this._isSelectElement\u0026\u0026(this.passedElement.options\u003dthis._presetOptions),this._templates\u003dnull,this.initialised\u003d!1)},r.enable\u003dfunction(){return this.passedElement.isDisabled\u0026\u0026this.passedElement.enable(),this.containerOuter.isDisabled\u0026\u0026(this._addEventListeners(),this.input.enable(),this.containerOuter.enable()),this},r.disable\u003dfunction(){return this.passedElement.isDisabled||this.passedElement.disable(),this.containerOuter.isDisabled||(this._removeEventListeners(),this.input.disable(),this.containerOuter.disable()),this},r.highlightItem\u003dfunction(e,t){if(void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d!0),!e)return this;var i\u003de.id,n\u003de.groupId,s\u003dvoid 0\u003d\u003d\u003dn?-1:n,r\u003de.value,o\u003dvoid 0\u003d\u003d\u003dr?\"\":r,a\u003de.label,c\u003dvoid 0\u003d\u003d\u003da?\"\":a,l\u003ds\u003e\u003d0?this._store.getGroupById(s):null;return this._store.dispatch(ye(i,!0)),t\u0026\u0026this.passedElement.triggerEvent(H,{id:i,value:o,label:c,groupValue:l\u0026\u0026l.value?l.value:null}),this},r.unhighlightItem\u003dfunction(e){if(!e)return this;var t\u003de.id,i\u003de.groupId,n\u003dvoid 0\u003d\u003d\u003di?-1:i,s\u003de.value,r\u003dvoid 0\u003d\u003d\u003ds?\"\":s,o\u003de.label,a\u003dvoid 0\u003d\u003d\u003do?\"\":o,c\u003dn\u003e\u003d0?this._store.getGroupById(n):null;return this._store.dispatch(ye(t,!1)),this.passedElement.triggerEvent(H,{id:t,value:r,label:a,groupValue:c\u0026\u0026c.value?c.value:null}),this},r.highlightAll\u003dfunction(){var e\u003dthis;return this._store.items.forEach((function(t){return e.highlightItem(t)})),this},r.unhighlightAll\u003dfunction(){var e\u003dthis;return this._store.items.forEach((function(t){return e.unhighlightItem(t)})),this},r.removeActiveItemsByValue\u003dfunction(e){var t\u003dthis;return this._store.activeItems.filter((function(t){return t.value\u003d\u003d\u003de})).forEach((function(e){return t._removeItem(e)})),this},r.removeActiveItems\u003dfunction(e){var t\u003dthis;return this._store.activeItems.filter((function(t){return t.id!\u003d\u003de})).forEach((function(e){return t._removeItem(e)})),this},r.removeHighlightedItems\u003dfunction(e){var t\u003dthis;return void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1),this._store.highlightedActiveItems.forEach((function(i){t._removeItem(i),e\u0026\u0026t._triggerChange(i.value)})),this},r.showDropdown\u003dfunction(e){var t\u003dthis;return this.dropdown.isActive||requestAnimationFrame((function(){t.dropdown.show(),t.containerOuter.open(t.dropdown.distanceFromTopWindow),!e\u0026\u0026t._canSearch\u0026\u0026t.input.focus(),t.passedElement.triggerEvent(D,{})})),this},r.hideDropdown\u003dfunction(e){var t\u003dthis;return this.dropdown.isActive?(requestAnimationFrame((function(){t.dropdown.hide(),t.containerOuter.close(),!e\u0026\u0026t._canSearch\u0026\u0026(t.input.removeActiveDescendant(),t.input.blur()),t.passedElement.triggerEvent(M,{})})),this):this},r.getValue\u003dfunction(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1);var t\u003dthis._store.activeItems.reduce((function(t,i){var n\u003de?i.value:i;return t.push(n),t}),[]);return this._isSelectOneElement?t[0]:t},r.setValue\u003dfunction(e){var t\u003dthis;return this.initialised?(e.forEach((function(e){return t._setChoiceOrItem(e)})),this):this},r.setChoiceByValue\u003dfunction(e){var t\u003dthis;return!this.initialised||this._isTextElement||(Array.isArray(e)?e:[e]).forEach((function(e){return t._findAndSelectChoiceByValue(e)})),this},r.setChoices\u003dfunction(e,t,i,n){var s\u003dthis;if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]),void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d\"value\"),void 0\u003d\u003d\u003di\u0026\u0026(i\u003d\"label\"),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!1),!this.initialised)throw new ReferenceError(\"setChoices was called on a non-initialized instance of Choices\");if(!this._isSelectElement)throw new TypeError(\"setChoices can\u0027t be used with INPUT based Choices\");if(\"string\"!\u003dtypeof t||!t)throw new TypeError(\"value parameter must be a name of \u0027value\u0027 field in passed objects\");if(n\u0026\u0026this.clearChoices(),\"function\"\u003d\u003dtypeof e){var r\u003de(this);if(\"function\"\u003d\u003dtypeof Promise\u0026\u0026r instanceof Promise)return new Promise((function(e){return requestAnimationFrame(e)})).then((function(){return s._handleLoadingState(!0)})).then((function(){return r})).then((function(e){return s.setChoices(e,t,i,n)})).catch((function(e){s.config.silent||console.error(e)})).then((function(){return s._handleLoadingState(!1)})).then((function(){return s}));if(!Array.isArray(r))throw new TypeError(\".setChoices first argument function must return either array of choices or Promise, got: \"+typeof r);return this.setChoices(r,t,i,!1)}if(!Array.isArray(e))throw new TypeError(\".setChoices must be called either with array of choices with a function resulting into Promise of array of choices\");return this.containerOuter.removeLoadingState(),this._startLoading(),e.forEach((function(e){e.choices?s._addGroup({id:parseInt(e.id,10)||null,group:e,valueKey:t,labelKey:i}):s._addChoice({value:e[t],label:e[i],isSelected:e.selected,isDisabled:e.disabled,customProperties:e.customProperties,placeholder:e.placeholder})})),this._stopLoading(),this},r.clearChoices\u003dfunction(){return this._store.dispatch({type:U}),this},r.clearStore\u003dfunction(){return this._store.dispatch({type:\"CLEAR_ALL\"}),this},r.clearInput\u003dfunction(){var e\u003d!this._isSelectOneElement;return this.input.clear(e),!this._isTextElement\u0026\u0026this._canSearch\u0026\u0026(this._isSearching\u003d!1,this._store.dispatch(be(!0))),this},r._render\u003dfunction(){if(!this._store.isLoading()){this._currentState\u003dthis._store.state;var e\u003dthis._currentState.choices!\u003d\u003dthis._prevState.choices||this._currentState.groups!\u003d\u003dthis._prevState.groups||this._currentState.items!\u003d\u003dthis._prevState.items,t\u003dthis._isSelectElement,i\u003dthis._currentState.items!\u003d\u003dthis._prevState.items;e\u0026\u0026(t\u0026\u0026this._renderChoices(),i\u0026\u0026this._renderItems(),this._prevState\u003dthis._currentState)}},r._renderChoices\u003dfunction(){var e\u003dthis,t\u003dthis._store,i\u003dt.activeGroups,n\u003dt.activeChoices,s\u003ddocument.createDocumentFragment();if(this.choiceList.clear(),this.config.resetScrollPosition\u0026\u0026requestAnimationFrame((function(){return e.choiceList.scrollToTop()})),i.length\u003e\u003d1\u0026\u0026!this._isSearching){var r\u003dn.filter((function(e){return!0\u003d\u003d\u003de.placeholder\u0026\u0026-1\u003d\u003d\u003de.groupId}));r.length\u003e\u003d1\u0026\u0026(s\u003dthis._createChoicesFragment(r,s)),s\u003dthis._createGroupsFragment(i,n,s)}else n.length\u003e\u003d1\u0026\u0026(s\u003dthis._createChoicesFragment(n,s));if(s.childNodes\u0026\u0026s.childNodes.length\u003e0){var o\u003dthis._store.activeItems,a\u003dthis._canAddItem(o,this.input.value);a.response?(this.choiceList.append(s),this._highlightChoice()):this.choiceList.append(this._getTemplate(\"notice\",a.notice))}else{var c,l;this._isSearching?(l\u003d\"function\"\u003d\u003dtypeof this.config.noResultsText?this.config.noResultsText():this.config.noResultsText,c\u003dthis._getTemplate(\"notice\",l,\"no-results\")):(l\u003d\"function\"\u003d\u003dtypeof this.config.noChoicesText?this.config.noChoicesText():this.config.noChoicesText,c\u003dthis._getTemplate(\"notice\",l,\"no-choices\")),this.choiceList.append(c)}},r._renderItems\u003dfunction(){var e\u003dthis._store.activeItems||[];this.itemList.clear();var t\u003dthis._createItemsFragment(e);t.childNodes\u0026\u0026this.itemList.append(t)},r._createGroupsFragment\u003dfunction(e,t,i){var n\u003dthis;return void 0\u003d\u003d\u003di\u0026\u0026(i\u003ddocument.createDocumentFragment()),this.config.shouldSort\u0026\u0026e.sort(this.config.sorter),e.forEach((function(e){var s\u003dfunction(e){return t.filter((function(t){return n._isSelectOneElement?t.groupId\u003d\u003d\u003de.id:t.groupId\u003d\u003d\u003de.id\u0026\u0026(\"always\"\u003d\u003d\u003dn.config.renderSelectedChoices||!t.selected)}))}(e);if(s.length\u003e\u003d1){var r\u003dn._getTemplate(\"choiceGroup\",e);i.appendChild(r),n._createChoicesFragment(s,i,!0)}})),i},r._createChoicesFragment\u003dfunction(e,t,i){var n\u003dthis;void 0\u003d\u003d\u003dt\u0026\u0026(t\u003ddocument.createDocumentFragment()),void 0\u003d\u003d\u003di\u0026\u0026(i\u003d!1);var s\u003dthis.config,r\u003ds.renderSelectedChoices,o\u003ds.searchResultLimit,a\u003ds.renderChoiceLimit,c\u003dthis._isSearching?w:this.config.sorter,l\u003dfunction(e){if(\"auto\"!\u003d\u003dr||n._isSelectOneElement||!e.selected){var i\u003dn._getTemplate(\"choice\",e,n.config.itemSelectText);t.appendChild(i)}},h\u003de;\"auto\"!\u003d\u003dr||this._isSelectOneElement||(h\u003de.filter((function(e){return!e.selected})));var u\u003dh.reduce((function(e,t){return t.placeholder?e.placeholderChoices.push(t):e.normalChoices.push(t),e}),{placeholderChoices:[],normalChoices:[]}),d\u003du.placeholderChoices,p\u003du.normalChoices;(this.config.shouldSort||this._isSearching)\u0026\u0026p.sort(c);var m\u003dh.length,f\u003dthis._isSelectOneElement?[].concat(d,p):p;this._isSearching?m\u003do:a\u0026\u0026a\u003e0\u0026\u0026!i\u0026\u0026(m\u003da);for(var v\u003d0;v\u003cm;v+\u003d1)f[v]\u0026\u0026l(f[v]);return t},r._createItemsFragment\u003dfunction(e,t){var i\u003dthis;void 0\u003d\u003d\u003dt\u0026\u0026(t\u003ddocument.createDocumentFragment());var n\u003dthis.config,s\u003dn.shouldSortItems,r\u003dn.sorter,o\u003dn.removeItemButton;return s\u0026\u0026!this._isSelectOneElement\u0026\u0026e.sort(r),this._isTextElement?this.passedElement.value\u003de:this.passedElement.options\u003de,e.forEach((function(e){var n\u003di._getTemplate(\"item\",e,o);t.appendChild(n)})),t},r._triggerChange\u003dfunction(e){null!\u003de\u0026\u0026this.passedElement.triggerEvent(N,{value:e})},r._selectPlaceholderChoice\u003dfunction(){var e\u003dthis._store.placeholderChoice;e\u0026\u0026(this._addItem({value:e.value,label:e.label,choiceId:e.id,groupId:e.groupId,placeholder:e.placeholder}),this._triggerChange(e.value))},r._handleButtonAction\u003dfunction(e,t){if(e\u0026\u0026t\u0026\u0026this.config.removeItems\u0026\u0026this.config.removeItemButton){var i\u003dt.parentNode.getAttribute(\"data-id\"),n\u003de.find((function(e){return e.id\u003d\u003d\u003dparseInt(i,10)}));this._removeItem(n),this._triggerChange(n.value),this._isSelectOneElement\u0026\u0026this._selectPlaceholderChoice()}},r._handleItemAction\u003dfunction(e,t,i){var n\u003dthis;if(void 0\u003d\u003d\u003di\u0026\u0026(i\u003d!1),e\u0026\u0026t\u0026\u0026this.config.removeItems\u0026\u0026!this._isSelectOneElement){var s\u003dt.getAttribute(\"data-id\");e.forEach((function(e){e.id!\u003d\u003dparseInt(s,10)||e.highlighted?!i\u0026\u0026e.highlighted\u0026\u0026n.unhighlightItem(e):n.highlightItem(e)})),this.input.focus()}},r._handleChoiceAction\u003dfunction(e,t){if(e\u0026\u0026t){var i\u003dt.dataset.id,n\u003dthis._store.getChoiceById(i);if(n){var s\u003de[0]\u0026\u0026e[0].keyCode?e[0].keyCode:null,r\u003dthis.dropdown.isActive;n.keyCode\u003ds,this.passedElement.triggerEvent(F,{choice:n}),n.selected||n.disabled||this._canAddItem(e,n.value).response\u0026\u0026(this._addItem({value:n.value,label:n.label,choiceId:n.id,groupId:n.groupId,customProperties:n.customProperties,placeholder:n.placeholder,keyCode:n.keyCode}),this._triggerChange(n.value)),this.clearInput(),r\u0026\u0026this._isSelectOneElement\u0026\u0026(this.hideDropdown(!0),this.containerOuter.focus())}}},r._handleBackspace\u003dfunction(e){if(this.config.removeItems\u0026\u0026e){var t\u003de[e.length-1],i\u003de.some((function(e){return e.highlighted}));this.config.editItems\u0026\u0026!i\u0026\u0026t?(this.input.value\u003dt.value,this.input.setWidth(),this._removeItem(t),this._triggerChange(t.value)):(i||this.highlightItem(t,!1),this.removeHighlightedItems(!0))}},r._startLoading\u003dfunction(){this._store.dispatch(Ie(!0))},r._stopLoading\u003dfunction(){this._store.dispatch(Ie(!1))},r._handleLoadingState\u003dfunction(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!0);var t\u003dthis.itemList.getChild(\".\"+this.config.classNames.placeholder);e?(this.disable(),this.containerOuter.addLoadingState(),this._isSelectOneElement?t?t.innerHTML\u003dthis.config.loadingText:(t\u003dthis._getTemplate(\"placeholder\",this.config.loadingText),this.itemList.append(t)):this.input.placeholder\u003dthis.config.loadingText):(this.enable(),this.containerOuter.removeLoadingState(),this._isSelectOneElement?t.innerHTML\u003dthis._placeholderValue||\"\":this.input.placeholder\u003dthis._placeholderValue||\"\")},r._handleSearch\u003dfunction(e){if(e\u0026\u0026this.input.isFocussed){var t\u003dthis._store.choices,i\u003dthis.config,n\u003di.searchFloor,s\u003di.searchChoices,r\u003dt.some((function(e){return!e.active}));if(e\u0026\u0026e.length\u003e\u003dn){var o\u003ds?this._searchChoices(e):0;this.passedElement.triggerEvent(j,{value:e,resultCount:o})}else r\u0026\u0026(this._isSearching\u003d!1,this._store.dispatch(be(!0)))}},r._canAddItem\u003dfunction(e,t){var i\u003d!0,n\u003d\"function\"\u003d\u003dtypeof this.config.addItemText?this.config.addItemText(t):this.config.addItemText;if(!this._isSelectOneElement){var s\u003dfunction(e,t,i){return void 0\u003d\u003d\u003di\u0026\u0026(i\u003d\"value\"),e.some((function(e){return\"string\"\u003d\u003dtypeof t?e[i]\u003d\u003d\u003dt.trim():e[i]\u003d\u003d\u003dt}))}(e,t);this.config.maxItemCount\u003e0\u0026\u0026this.config.maxItemCount\u003c\u003de.length\u0026\u0026(i\u003d!1,n\u003d\"function\"\u003d\u003dtypeof this.config.maxItemText?this.config.maxItemText(this.config.maxItemCount):this.config.maxItemText),!this.config.duplicateItemsAllowed\u0026\u0026s\u0026\u0026i\u0026\u0026(i\u003d!1,n\u003d\"function\"\u003d\u003dtypeof this.config.uniqueItemText?this.config.uniqueItemText(t):this.config.uniqueItemText),this._isTextElement\u0026\u0026this.config.addItems\u0026\u0026i\u0026\u0026\"function\"\u003d\u003dtypeof this.config.addItemFilter\u0026\u0026!this.config.addItemFilter(t)\u0026\u0026(i\u003d!1,n\u003d\"function\"\u003d\u003dtypeof this.config.customAddItemText?this.config.customAddItemText(t):this.config.customAddItemText)}return{response:i,notice:n}},r._searchChoices\u003dfunction(e){var t\u003d\"string\"\u003d\u003dtypeof e?e.trim():e,i\u003d\"string\"\u003d\u003dtypeof this._currentValue?this._currentValue.trim():this._currentValue;if(t.length\u003c1\u0026\u0026t\u003d\u003d\u003di+\" \")return 0;var n\u003dthis._store.searchableChoices,r\u003dt,o\u003d[].concat(this.config.searchFields),a\u003dObject.assign(this.config.fuseOptions,{keys:o}),c\u003dnew s.a(n,a).search(r);return this._currentValue\u003dt,this._highlightPosition\u003d0,this._isSearching\u003d!0,this._store.dispatch(function(e){return{type:G,results:e}}(c)),c.length},r._addEventListeners\u003dfunction(){var e\u003ddocument.documentElement;e.addEventListener(\"touchend\",this._onTouchEnd,!0),this.containerOuter.element.addEventListener(\"keydown\",this._onKeyDown,!0),this.containerOuter.element.addEventListener(\"mousedown\",this._onMouseDown,!0),e.addEventListener(\"click\",this._onClick,{passive:!0}),e.addEventListener(\"touchmove\",this._onTouchMove,{passive:!0}),this.dropdown.element.addEventListener(\"mouseover\",this._onMouseOver,{passive:!0}),this._isSelectOneElement\u0026\u0026(this.containerOuter.element.addEventListener(\"focus\",this._onFocus,{passive:!0}),this.containerOuter.element.addEventListener(\"blur\",this._onBlur,{passive:!0})),this.input.element.addEventListener(\"keyup\",this._onKeyUp,{passive:!0}),this.input.element.addEventListener(\"focus\",this._onFocus,{passive:!0}),this.input.element.addEventListener(\"blur\",this._onBlur,{passive:!0}),this.input.element.form\u0026\u0026this.input.element.form.addEventListener(\"reset\",this._onFormReset,{passive:!0}),this.input.addEventListeners()},r._removeEventListeners\u003dfunction(){var e\u003ddocument.documentElement;e.removeEventListener(\"touchend\",this._onTouchEnd,!0),this.containerOuter.element.removeEventListener(\"keydown\",this._onKeyDown,!0),this.containerOuter.element.removeEventListener(\"mousedown\",this._onMouseDown,!0),e.removeEventListener(\"click\",this._onClick),e.removeEventListener(\"touchmove\",this._onTouchMove),this.dropdown.element.removeEventListener(\"mouseover\",this._onMouseOver),this._isSelectOneElement\u0026\u0026(this.containerOuter.element.removeEventListener(\"focus\",this._onFocus),this.containerOuter.element.removeEventListener(\"blur\",this._onBlur)),this.input.element.removeEventListener(\"keyup\",this._onKeyUp),this.input.element.removeEventListener(\"focus\",this._onFocus),this.input.element.removeEventListener(\"blur\",this._onBlur),this.input.element.form\u0026\u0026this.input.element.form.removeEventListener(\"reset\",this._onFormReset),this.input.removeEventListeners()},r._onKeyDown\u003dfunction(e){var t,i\u003de.target,n\u003de.keyCode,s\u003de.ctrlKey,r\u003de.metaKey,o\u003dthis._store.activeItems,a\u003dthis.input.isFocussed,c\u003dthis.dropdown.isActive,l\u003dthis.itemList.hasChildren(),h\u003dString.fromCharCode(n),u\u003dJ,d\u003dY,p\u003dZ,m\u003dQ,f\u003dee,v\u003dte,g\u003die,_\u003dne,b\u003dse,y\u003ds||r;!this._isTextElement\u0026\u0026/[a-zA-Z0-9-_ ]/.test(h)\u0026\u0026this.showDropdown();var E\u003d((t\u003d{})[m]\u003dthis._onAKey,t[p]\u003dthis._onEnterKey,t[f]\u003dthis._onEscapeKey,t[v]\u003dthis._onDirectionKey,t[_]\u003dthis._onDirectionKey,t[g]\u003dthis._onDirectionKey,t[b]\u003dthis._onDirectionKey,t[d]\u003dthis._onDeleteKey,t[u]\u003dthis._onDeleteKey,t);E[n]\u0026\u0026E[n]({event:e,target:i,keyCode:n,metaKey:r,activeItems:o,hasFocusedInput:a,hasActiveDropdown:c,hasItems:l,hasCtrlDownKeyPressed:y})},r._onKeyUp\u003dfunction(e){var t\u003de.target,i\u003de.keyCode,n\u003dthis.input.value,s\u003dthis._store.activeItems,r\u003dthis._canAddItem(s,n),o\u003dJ,a\u003dY;if(this._isTextElement)if(r.notice\u0026\u0026n){var c\u003dthis._getTemplate(\"notice\",r.notice);this.dropdown.element.innerHTML\u003dc.outerHTML,this.showDropdown(!0)}else this.hideDropdown(!0);else{var l\u003d(i\u003d\u003d\u003do||i\u003d\u003d\u003da)\u0026\u0026!t.value,h\u003d!this._isTextElement\u0026\u0026this._isSearching,u\u003dthis._canSearch\u0026\u0026r.response;l\u0026\u0026h?(this._isSearching\u003d!1,this._store.dispatch(be(!0))):u\u0026\u0026this._handleSearch(this.input.value)}this._canSearch\u003dthis.config.searchEnabled},r._onAKey\u003dfunction(e){var t\u003de.hasItems;e.hasCtrlDownKeyPressed\u0026\u0026t\u0026\u0026(this._canSearch\u003d!1,this.config.removeItems\u0026\u0026!this.input.value\u0026\u0026this.input.element\u003d\u003d\u003ddocument.activeElement\u0026\u0026this.highlightAll())},r._onEnterKey\u003dfunction(e){var t\u003de.event,i\u003de.target,n\u003de.activeItems,s\u003de.hasActiveDropdown,r\u003dZ,o\u003di.hasAttribute(\"data-button\");if(this._isTextElement\u0026\u0026i.value){var a\u003dthis.input.value;this._canAddItem(n,a).response\u0026\u0026(this.hideDropdown(!0),this._addItem({value:a}),this._triggerChange(a),this.clearInput())}if(o\u0026\u0026(this._handleButtonAction(n,i),t.preventDefault()),s){var c\u003dthis.dropdown.getChild(\".\"+this.config.classNames.highlightedState);c\u0026\u0026(n[0]\u0026\u0026(n[0].keyCode\u003dr),this._handleChoiceAction(n,c)),t.preventDefault()}else this._isSelectOneElement\u0026\u0026(this.showDropdown(),t.preventDefault())},r._onEscapeKey\u003dfunction(e){e.hasActiveDropdown\u0026\u0026(this.hideDropdown(!0),this.containerOuter.focus())},r._onDirectionKey\u003dfunction(e){var t,i,n,s\u003de.event,r\u003de.hasActiveDropdown,o\u003de.keyCode,a\u003de.metaKey,c\u003die,l\u003dne,h\u003dse;if(r||this._isSelectOneElement){this.showDropdown(),this._canSearch\u003d!1;var u,d\u003do\u003d\u003d\u003dc||o\u003d\u003d\u003dh?1:-1,p\u003d\"[data-choice-selectable]\";if(a||o\u003d\u003d\u003dh||o\u003d\u003d\u003dl)u\u003dd\u003e0?this.dropdown.element.querySelector(\"[data-choice-selectable]:last-of-type\"):this.dropdown.element.querySelector(p);else{var m\u003dthis.dropdown.element.querySelector(\".\"+this.config.classNames.highlightedState);u\u003dm?function(e,t,i){if(void 0\u003d\u003d\u003di\u0026\u0026(i\u003d1),e instanceof Element\u0026\u0026\"string\"\u003d\u003dtypeof t){for(var n\u003d(i\u003e0?\"next\":\"previous\")+\"ElementSibling\",s\u003de[n];s;){if(s.matches(t))return s;s\u003ds[n]}return s}}(m,p,d):this.dropdown.element.querySelector(p)}u\u0026\u0026(t\u003du,i\u003dthis.choiceList.element,void 0\u003d\u003d\u003d(n\u003dd)\u0026\u0026(n\u003d1),t\u0026\u0026(n\u003e0?i.scrollTop+i.offsetHeight\u003e\u003dt.offsetTop+t.offsetHeight:t.offsetTop\u003e\u003di.scrollTop)||this.choiceList.scrollToChildElement(u,d),this._highlightChoice(u)),s.preventDefault()}},r._onDeleteKey\u003dfunction(e){var t\u003de.event,i\u003de.target,n\u003de.hasFocusedInput,s\u003de.activeItems;!n||i.value||this._isSelectOneElement||(this._handleBackspace(s),t.preventDefault())},r._onTouchMove\u003dfunction(){this._wasTap\u0026\u0026(this._wasTap\u003d!1)},r._onTouchEnd\u003dfunction(e){var t\u003d(e||e.touches[0]).target;this._wasTap\u0026\u0026this.containerOuter.element.contains(t)\u0026\u0026((t\u003d\u003d\u003dthis.containerOuter.element||t\u003d\u003d\u003dthis.containerInner.element)\u0026\u0026(this._isTextElement?this.input.focus():this._isSelectMultipleElement\u0026\u0026this.showDropdown()),e.stopPropagation()),this._wasTap\u003d!0},r._onMouseDown\u003dfunction(e){var t\u003de.target;if(t instanceof HTMLElement){if(we\u0026\u0026this.choiceList.element.contains(t)){var i\u003dthis.choiceList.element.firstElementChild,n\u003d\"ltr\"\u003d\u003d\u003dthis._direction?e.offsetX\u003e\u003di.offsetWidth:e.offsetX\u003ci.offsetLeft;this._isScrollingOnIe\u003dn}if(t!\u003d\u003dthis.input.element){var s\u003dt.closest(\"[data-button],[data-item],[data-choice]\");if(s instanceof HTMLElement){var r\u003de.shiftKey,o\u003dthis._store.activeItems,a\u003ds.dataset;\"button\"in a?this._handleButtonAction(o,s):\"item\"in a?this._handleItemAction(o,s,r):\"choice\"in a\u0026\u0026this._handleChoiceAction(o,s)}e.preventDefault()}}},r._onMouseOver\u003dfunction(e){var t\u003de.target;t instanceof HTMLElement\u0026\u0026\"choice\"in t.dataset\u0026\u0026this._highlightChoice(t)},r._onClick\u003dfunction(e){var t\u003de.target;this.containerOuter.element.contains(t)?this.dropdown.isActive||this.containerOuter.isDisabled?this._isSelectOneElement\u0026\u0026t!\u003d\u003dthis.input.element\u0026\u0026!this.dropdown.element.contains(t)\u0026\u0026this.hideDropdown():this._isTextElement?document.activeElement!\u003d\u003dthis.input.element\u0026\u0026this.input.focus():(this.showDropdown(),this.containerOuter.focus()):(this._store.highlightedActiveItems.length\u003e0\u0026\u0026this.unhighlightAll(),this.containerOuter.removeFocusState(),this.hideDropdown(!0))},r._onFocus\u003dfunction(e){var t,i\u003dthis,n\u003de.target;this.containerOuter.element.contains(n)\u0026\u0026((t\u003d{}).text\u003dfunction(){n\u003d\u003d\u003di.input.element\u0026\u0026i.containerOuter.addFocusState()},t[\"select-one\"]\u003dfunction(){i.containerOuter.addFocusState(),n\u003d\u003d\u003di.input.element\u0026\u0026i.showDropdown(!0)},t[\"select-multiple\"]\u003dfunction(){n\u003d\u003d\u003di.input.element\u0026\u0026(i.showDropdown(!0),i.containerOuter.addFocusState())},t)[this.passedElement.element.type]()},r._onBlur\u003dfunction(e){var t\u003dthis,i\u003de.target;if(this.containerOuter.element.contains(i)\u0026\u0026!this._isScrollingOnIe){var n,s\u003dthis._store.activeItems.some((function(e){return e.highlighted}));((n\u003d{}).text\u003dfunction(){i\u003d\u003d\u003dt.input.element\u0026\u0026(t.containerOuter.removeFocusState(),s\u0026\u0026t.unhighlightAll(),t.hideDropdown(!0))},n[\"select-one\"]\u003dfunction(){t.containerOuter.removeFocusState(),(i\u003d\u003d\u003dt.input.element||i\u003d\u003d\u003dt.containerOuter.element\u0026\u0026!t._canSearch)\u0026\u0026t.hideDropdown(!0)},n[\"select-multiple\"]\u003dfunction(){i\u003d\u003d\u003dt.input.element\u0026\u0026(t.containerOuter.removeFocusState(),t.hideDropdown(!0),s\u0026\u0026t.unhighlightAll())},n)[this.passedElement.element.type]()}else this._isScrollingOnIe\u003d!1,this.input.element.focus()},r._onFormReset\u003dfunction(){this._store.dispatch({type:\"RESET_TO\",state:this._initialState})},r._highlightChoice\u003dfunction(e){var t\u003dthis;void 0\u003d\u003d\u003de\u0026\u0026(e\u003dnull);var i\u003dArray.from(this.dropdown.element.querySelectorAll(\"[data-choice-selectable]\"));if(i.length){var n\u003de;Array.from(this.dropdown.element.querySelectorAll(\".\"+this.config.classNames.highlightedState)).forEach((function(e){e.classList.remove(t.config.classNames.highlightedState),e.setAttribute(\"aria-selected\",\"false\")})),n?this._highlightPosition\u003di.indexOf(n):(n\u003di.length\u003ethis._highlightPosition?i[this._highlightPosition]:i[i.length-1])||(n\u003di[0]),n.classList.add(this.config.classNames.highlightedState),n.setAttribute(\"aria-selected\",\"true\"),this.passedElement.triggerEvent(B,{el:n}),this.dropdown.isActive\u0026\u0026(this.input.setActiveDescendant(n.id),this.containerOuter.setActiveDescendant(n.id))}},r._addItem\u003dfunction(e){var t\u003de.value,i\u003de.label,n\u003dvoid 0\u003d\u003d\u003di?null:i,s\u003de.choiceId,r\u003dvoid 0\u003d\u003d\u003ds?-1:s,o\u003de.groupId,a\u003dvoid 0\u003d\u003d\u003do?-1:o,c\u003de.customProperties,l\u003dvoid 0\u003d\u003d\u003dc?null:c,h\u003de.placeholder,u\u003dvoid 0!\u003d\u003dh\u0026\u0026h,d\u003de.keyCode,p\u003dvoid 0\u003d\u003d\u003dd?null:d,m\u003d\"string\"\u003d\u003dtypeof t?t.trim():t,f\u003dp,v\u003dl,g\u003dthis._store.items,_\u003dn||m,b\u003dr||-1,y\u003da\u003e\u003d0?this._store.getGroupById(a):null,E\u003dg?g.length+1:1;return this.config.prependValue\u0026\u0026(m\u003dthis.config.prependValue+m.toString()),this.config.appendValue\u0026\u0026(m+\u003dthis.config.appendValue.toString()),this._store.dispatch(function(e){var t\u003de.value,i\u003de.label,n\u003de.id,s\u003de.choiceId,r\u003de.groupId,o\u003de.customProperties,a\u003de.placeholder,c\u003de.keyCode;return{type:W,value:t,label:i,id:n,choiceId:s,groupId:r,customProperties:o,placeholder:a,keyCode:c}}({value:m,label:_,id:E,choiceId:b,groupId:a,customProperties:l,placeholder:u,keyCode:f})),this._isSelectOneElement\u0026\u0026this.removeActiveItems(E),this.passedElement.triggerEvent(K,{id:E,value:m,label:_,customProperties:v,groupValue:y\u0026\u0026y.value?y.value:void 0,keyCode:f}),this},r._removeItem\u003dfunction(e){if(!e||!E(\"Object\",e))return this;var t\u003de.id,i\u003de.value,n\u003de.label,s\u003de.choiceId,r\u003de.groupId,o\u003dr\u003e\u003d0?this._store.getGroupById(r):null;return this._store.dispatch(function(e,t){return{type:X,id:e,choiceId:t}}(t,s)),o\u0026\u0026o.value?this.passedElement.triggerEvent(R,{id:t,value:i,label:n,groupValue:o.value}):this.passedElement.triggerEvent(R,{id:t,value:i,label:n}),this},r._addChoice\u003dfunction(e){var t\u003de.value,i\u003de.label,n\u003dvoid 0\u003d\u003d\u003di?null:i,s\u003de.isSelected,r\u003dvoid 0!\u003d\u003ds\u0026\u0026s,o\u003de.isDisabled,a\u003dvoid 0!\u003d\u003do\u0026\u0026o,c\u003de.groupId,l\u003dvoid 0\u003d\u003d\u003dc?-1:c,h\u003de.customProperties,u\u003dvoid 0\u003d\u003d\u003dh?null:h,d\u003de.placeholder,p\u003dvoid 0!\u003d\u003dd\u0026\u0026d,m\u003de.keyCode,f\u003dvoid 0\u003d\u003d\u003dm?null:m;if(null!\u003dt){var v\u003dthis._store.choices,g\u003dn||t,_\u003dv?v.length+1:1,b\u003dthis._baseId+\"-\"+this._idNames.itemChoice+\"-\"+_;this._store.dispatch(function(e){var t\u003de.value,i\u003de.label,n\u003de.id,s\u003de.groupId,r\u003de.disabled,o\u003de.elementId,a\u003de.customProperties,c\u003de.placeholder,l\u003de.keyCode;return{type:V,value:t,label:i,id:n,groupId:s,disabled:r,elementId:o,customProperties:a,placeholder:c,keyCode:l}}({id:_,groupId:l,elementId:b,value:t,label:g,disabled:a,customProperties:u,placeholder:p,keyCode:f})),r\u0026\u0026this._addItem({value:t,label:g,choiceId:_,customProperties:u,placeholder:p,keyCode:f})}},r._addGroup\u003dfunction(e){var t\u003dthis,i\u003de.group,n\u003de.id,s\u003de.valueKey,r\u003dvoid 0\u003d\u003d\u003ds?\"value\":s,o\u003de.labelKey,a\u003dvoid 0\u003d\u003d\u003do?\"label\":o,c\u003dE(\"Object\",i)?i.choices:Array.from(i.getElementsByTagName(\"OPTION\")),l\u003dn||Math.floor((new Date).valueOf()*Math.random()),h\u003d!!i.disabled\u0026\u0026i.disabled;c?(this._store.dispatch(Ee({value:i.label,id:l,active:!0,disabled:h})),c.forEach((function(e){var i\u003de.disabled||e.parentNode\u0026\u0026e.parentNode.disabled;t._addChoice({value:e[r],label:E(\"Object\",e)?e[a]:e.innerHTML,isSelected:e.selected,isDisabled:i,groupId:l,customProperties:e.customProperties,placeholder:e.placeholder})}))):this._store.dispatch(Ee({value:i.label,id:i.id,active:!1,disabled:i.disabled}))},r._getTemplate\u003dfunction(e){var t;if(!e)return null;for(var i\u003dthis.config.classNames,n\u003darguments.length,s\u003dnew Array(n\u003e1?n-1:0),r\u003d1;r\u003cn;r++)s[r-1]\u003darguments[r];return(t\u003dthis._templates[e]).call.apply(t,[this,i].concat(s))},r._createTemplates\u003dfunction(){var e\u003dthis.config.callbackOnCreateTemplates,t\u003d{};e\u0026\u0026\"function\"\u003d\u003dtypeof e\u0026\u0026(t\u003de.call(this,S)),this._templates\u003do()(_e,t)},r._createElements\u003dfunction(){this.containerOuter\u003dnew ce({element:this._getTemplate(\"containerOuter\",this._direction,this._isSelectElement,this._isSelectOneElement,this.config.searchEnabled,this.passedElement.element.type),classNames:this.config.classNames,type:this.passedElement.element.type,position:this.config.position}),this.containerInner\u003dnew ce({element:this._getTemplate(\"containerInner\"),classNames:this.config.classNames,type:this.passedElement.element.type,position:this.config.position}),this.input\u003dnew he({element:this._getTemplate(\"input\",this._placeholderValue),classNames:this.config.classNames,type:this.passedElement.element.type,preventPaste:!this.config.paste}),this.choiceList\u003dnew ue({element:this._getTemplate(\"choiceList\",this._isSelectOneElement)}),this.itemList\u003dnew ue({element:this._getTemplate(\"itemList\",this._isSelectOneElement)}),this.dropdown\u003dnew k({element:this._getTemplate(\"dropdown\"),classNames:this.config.classNames,type:this.passedElement.element.type})},r._createStructure\u003dfunction(){this.passedElement.conceal(),this.containerInner.wrap(this.passedElement.element),this.containerOuter.wrap(this.containerInner.element),this._isSelectOneElement?this.input.placeholder\u003dthis.config.searchPlaceholderValue||\"\":this._placeholderValue\u0026\u0026(this.input.placeholder\u003dthis._placeholderValue,this.input.setWidth()),this.containerOuter.element.appendChild(this.containerInner.element),this.containerOuter.element.appendChild(this.dropdown.element),this.containerInner.element.appendChild(this.itemList.element),this._isTextElement||this.dropdown.element.appendChild(this.choiceList.element),this._isSelectOneElement?this.config.searchEnabled\u0026\u0026this.dropdown.element.insertBefore(this.input.element,this.dropdown.element.firstChild):this.containerInner.element.appendChild(this.input.element),this._isSelectElement\u0026\u0026(this._highlightPosition\u003d0,this._isSearching\u003d!1,this._startLoading(),this._presetGroups.length?this._addPredefinedGroups(this._presetGroups):this._addPredefinedChoices(this._presetChoices),this._stopLoading()),this._isTextElement\u0026\u0026this._addPredefinedItems(this._presetItems)},r._addPredefinedGroups\u003dfunction(e){var t\u003dthis,i\u003dthis.passedElement.placeholderOption;i\u0026\u0026\"SELECT\"\u003d\u003d\u003di.parentNode.tagName\u0026\u0026this._addChoice({value:i.value,label:i.innerHTML,isSelected:i.selected,isDisabled:i.disabled,placeholder:!0}),e.forEach((function(e){return t._addGroup({group:e,id:e.id||null})}))},r._addPredefinedChoices\u003dfunction(e){var t\u003dthis;this.config.shouldSort\u0026\u0026e.sort(this.config.sorter);var i\u003de.some((function(e){return e.selected})),n\u003de.findIndex((function(e){return void 0\u003d\u003d\u003de.disabled||!e.disabled}));e.forEach((function(e,s){var r\u003de.value,o\u003de.label,a\u003de.customProperties,c\u003de.placeholder;if(t._isSelectElement)if(e.choices)t._addGroup({group:e,id:e.id||null});else{var l\u003d!(!t._isSelectOneElement||i||s!\u003d\u003dn)||e.selected,h\u003de.disabled;t._addChoice({value:r,label:o,isSelected:l,isDisabled:h,customProperties:a,placeholder:c})}else t._addChoice({value:r,label:o,isSelected:e.selected,isDisabled:e.disabled,customProperties:a,placeholder:c})}))},r._addPredefinedItems\u003dfunction(e){var t\u003dthis;e.forEach((function(e){\"object\"\u003d\u003dtypeof e\u0026\u0026e.value\u0026\u0026t._addItem({value:e.value,label:e.label,choiceId:e.id,customProperties:e.customProperties,placeholder:e.placeholder}),\"string\"\u003d\u003dtypeof e\u0026\u0026t._addItem({value:e})}))},r._setChoiceOrItem\u003dfunction(e){var t\u003dthis;({object:function(){e.value\u0026\u0026(t._isTextElement?t._addItem({value:e.value,label:e.label,choiceId:e.id,customProperties:e.customProperties,placeholder:e.placeholder}):t._addChoice({value:e.value,label:e.label,isSelected:!0,isDisabled:!1,customProperties:e.customProperties,placeholder:e.placeholder}))},string:function(){t._isTextElement?t._addItem({value:e}):t._addChoice({value:e,label:e,isSelected:!0,isDisabled:!1})}})[y(e).toLowerCase()]()},r._findAndSelectChoiceByValue\u003dfunction(e){var t\u003dthis,i\u003dthis._store.choices.find((function(i){return t.config.valueComparer(i.value,e)}));i\u0026\u0026!i.selected\u0026\u0026this._addItem({value:i.value,label:i.label,choiceId:i.id,groupId:i.groupId,customProperties:i.customProperties,placeholder:i.placeholder,keyCode:i.keyCode})},r._generatePlaceholderValue\u003dfunction(){if(this._isSelectElement){var e\u003dthis.passedElement.placeholderOption;return!!e\u0026\u0026e.text}var t\u003dthis.config,i\u003dt.placeholder,n\u003dt.placeholderValue,s\u003dthis.passedElement.element.dataset;if(i){if(n)return n;if(s.placeholder)return s.placeholder}return!1},n}();t.default\u003dCe}]).default},\"object\"\u003d\u003dtypeof i\u0026\u0026\"object\"\u003d\u003dtypeof t?t.exports\u003do():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define([],o):\"object\"\u003d\u003dtypeof i?i.Choices\u003do():r.Choices\u003do()},\n      453: function _(o,e,i,t,r){t(),i.root\u003d\"bk-root\",i.default\u003d\".bk-root{}.bk-root .choices{position:relative;margin-bottom:24px;font-size:16px;}.bk-root .choices:focus{outline:none;}.bk-root .choices:last-child{margin-bottom:0;}.bk-root .choices.is-disabled .choices__inner,.bk-root .choices.is-disabled .choices__input{background-color:#eaeaea;cursor:not-allowed;-webkit-user-select:none;-ms-user-select:none;user-select:none;}.bk-root .choices.is-disabled .choices__item{cursor:not-allowed;}.bk-root .choices [hidden]{display:none !important;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027]{cursor:pointer;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027] .choices__inner{padding-bottom:7.5px;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027] .choices__input{display:block;width:100%;padding:10px;border-bottom:1px solid #dddddd;background-color:#ffffff;margin:0;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027] .choices__button{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg\u003d\u003d);padding:0;background-size:8px;position:absolute;top:50%;right:0;margin-top:-10px;margin-right:25px;height:20px;width:20px;border-radius:10em;opacity:0.5;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027] .choices__button:hover,.bk-root .choices[data-type*\u003d\u0027select-one\u0027] .choices__button:focus{opacity:1;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027] .choices__button:focus{box-shadow:0px 0px 0px 2px #00bcd4;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027] .choices__item[data-value\u003d\u0027\u0027] .choices__button{display:none;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027]:after{content:\u0027\u0027;height:0;width:0;border-style:solid;border-color:#333333 transparent transparent transparent;border-width:5px;position:absolute;right:11.5px;top:50%;margin-top:-2.5px;pointer-events:none;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027].is-open:after{border-color:transparent transparent #333333 transparent;margin-top:-7.5px;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027][dir\u003d\u0027rtl\u0027]:after{left:11.5px;right:auto;}.bk-root .choices[data-type*\u003d\u0027select-one\u0027][dir\u003d\u0027rtl\u0027] .choices__button{right:auto;left:0;margin-left:25px;margin-right:0;}.bk-root .choices[data-type*\u003d\u0027select-multiple\u0027] .choices__inner,.bk-root .choices[data-type*\u003d\u0027text\u0027] .choices__inner{cursor:text;}.bk-root .choices[data-type*\u003d\u0027select-multiple\u0027] .choices__button,.bk-root .choices[data-type*\u003d\u0027text\u0027] .choices__button{position:relative;display:inline-block;margin-top:0;margin-right:-4px;margin-bottom:0;margin-left:8px;padding-left:16px;border-left:1px solid #008fa1;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg\u003d\u003d);background-size:8px;width:8px;line-height:1;opacity:0.75;border-radius:0;}.bk-root .choices[data-type*\u003d\u0027select-multiple\u0027] .choices__button:hover,.bk-root .choices[data-type*\u003d\u0027select-multiple\u0027] .choices__button:focus,.bk-root .choices[data-type*\u003d\u0027text\u0027] .choices__button:hover,.bk-root .choices[data-type*\u003d\u0027text\u0027] .choices__button:focus{opacity:1;}.bk-root .choices__inner{display:inline-block;vertical-align:top;width:100%;background-color:#f9f9f9;padding:7.5px 7.5px 3.75px;border:1px solid #dddddd;border-radius:2.5px;font-size:14px;min-height:44px;overflow:hidden;}.bk-root .is-focused .choices__inner,.bk-root .is-open .choices__inner{border-color:#b7b7b7;}.bk-root .is-open .choices__inner{border-radius:2.5px 2.5px 0 0;}.bk-root .is-flipped.is-open .choices__inner{border-radius:0 0 2.5px 2.5px;}.bk-root .choices__list{margin:0;padding-left:0;list-style:none;}.bk-root .choices__list--single{display:inline-block;padding:4px 16px 4px 4px;width:100%;}.bk-root [dir\u003d\u0027rtl\u0027] .choices__list--single{padding-right:4px;padding-left:16px;}.bk-root .choices__list--single .choices__item{width:100%;}.bk-root .choices__list--multiple{display:inline;}.bk-root .choices__list--multiple .choices__item{display:inline-block;vertical-align:middle;border-radius:20px;padding:4px 10px;font-size:12px;font-weight:500;margin-right:3.75px;margin-bottom:3.75px;background-color:#00bcd4;border:1px solid #00a5bb;color:#ffffff;word-break:break-all;box-sizing:border-box;}.bk-root .choices__list--multiple .choices__item[data-deletable]{padding-right:5px;}.bk-root [dir\u003d\u0027rtl\u0027] .choices__list--multiple .choices__item{margin-right:0;margin-left:3.75px;}.bk-root .choices__list--multiple .choices__item.is-highlighted{background-color:#00a5bb;border:1px solid #008fa1;}.bk-root .is-disabled .choices__list--multiple .choices__item{background-color:#aaaaaa;border:1px solid #919191;}.bk-root .choices__list--dropdown{visibility:hidden;z-index:1;position:absolute;width:100%;background-color:#ffffff;border:1px solid #dddddd;top:100%;margin-top:-1px;border-bottom-left-radius:2.5px;border-bottom-right-radius:2.5px;overflow:hidden;word-break:break-all;will-change:visibility;}.bk-root .choices__list--dropdown.is-active{visibility:visible;}.bk-root .is-open .choices__list--dropdown{border-color:#b7b7b7;}.bk-root .is-flipped .choices__list--dropdown{top:auto;bottom:100%;margin-top:0;margin-bottom:-1px;border-radius:0.25rem 0.25rem 0 0;}.bk-root .choices__list--dropdown .choices__list{position:relative;max-height:300px;overflow:auto;-webkit-overflow-scrolling:touch;will-change:scroll-position;}.bk-root .choices__list--dropdown .choices__item{position:relative;padding:10px;font-size:14px;}.bk-root [dir\u003d\u0027rtl\u0027] .choices__list--dropdown .choices__item{text-align:right;}@media (min-width: 640px){.bk-root .choices__list--dropdown .choices__item--selectable{padding-right:100px;}.bk-root .choices__list--dropdown .choices__item--selectable:after{content:attr(data-select-text);font-size:12px;opacity:0;position:absolute;right:10px;top:50%;transform:translateY(-50%);}.bk-root [dir\u003d\u0027rtl\u0027] .choices__list--dropdown .choices__item--selectable{text-align:right;padding-left:100px;padding-right:10px;}.bk-root [dir\u003d\u0027rtl\u0027] .choices__list--dropdown .choices__item--selectable:after{right:auto;left:10px;}}.bk-root .choices__list--dropdown .choices__item--selectable.is-highlighted{background-color:#f2f2f2;}.bk-root .choices__list--dropdown .choices__item--selectable.is-highlighted:after{opacity:0.5;}.bk-root .choices__item{cursor:default;}.bk-root .choices__item--selectable{cursor:pointer;}.bk-root .choices__item--disabled{cursor:not-allowed;-webkit-user-select:none;-ms-user-select:none;user-select:none;opacity:0.5;}.bk-root .choices__heading{font-weight:600;font-size:12px;padding:10px;border-bottom:1px solid #f7f7f7;color:gray;}.bk-root .choices__button{text-indent:-9999px;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:0;background-color:transparent;background-repeat:no-repeat;background-position:center;cursor:pointer;}.bk-root .choices__button:focus{outline:none;}.bk-root .choices__input{display:inline-block;vertical-align:baseline;background-color:#f9f9f9;font-size:14px;margin-bottom:5px;border:0;border-radius:0;max-width:100%;padding:4px 0 4px 2px;}.bk-root .choices__input:focus{outline:0;}.bk-root [dir\u003d\u0027rtl\u0027] .choices__input{padding-right:2px;padding-left:0;}.bk-root .choices__placeholder{opacity:0.5;}.bk-root .choices{width:100%;}.bk-root .choices{box-sizing:border-box;}.bk-root .choices *,.bk-root .choices *:before,.bk-root .choices *:after{box-sizing:inherit;}.bk-root .choices__inner .choices__item.light{background-color:rgba(0, 126, 255, 0.08);border-radius:5px;border:1px solid rgba(0, 126, 255, 0.24);color:#007eff;}.bk-root .choices__inner .choices__item.solid{background-color:#1f77b4;border:none;border-radius:5px;color:white;}.bk-root .choices__inner .choices__item.solid .is-highlighted{background-color:#1f77b4;border:none;}.bk-root .choices__input{background-color:transparent;}.bk-root .choices__inner{background:transparent;border:1px solid darkgray;border-radius:5px;min-height:unset;}.bk-root .choices__list{white-space:initial;}.bk-root .choices__list--dropdown{z-index:100;}.bk-root .choices[data-type*\u003dselect-multiple] .choices__button.light{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMDA3ZWZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg\u003d\u003d);}.bk-root .choices[data-type*\u003dselect-multiple] .choices__button.solid{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjEiIGhlaWdodD0iMjEiIHZpZXdCb3g9IjAgMCAyMSAyMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjZmZmZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yLjU5Mi4wNDRsMTguMzY0IDE4LjM2NC0yLjU0OCAyLjU0OEwuMDQ0IDIuNTkyeiIvPjxwYXRoIGQ9Ik0wIDE4LjM2NEwxOC4zNjQgMGwyLjU0OCAyLjU0OEwyLjU0OCAyMC45MTJ6Ii8+PC9nPjwvc3ZnPg\u003d\u003d);border-left:1px solid white;opacity:1;}\"},\n      454: function _(e,t,l,i,n){i();const s\u003de(1),u\u003ds.__importStar(e(183)),h\u003de(426),o\u003de(166),a\u003de(43),r\u003de(8),d\u003de(11),p\u003ds.__importStar(e(427)),_\u003d/^[-+]?\\d*$/,m\u003d/^[-+]?\\d*\\.?\\d*(?:(?:\\d|\\d.)[eE][-+]?)*\\d*$/;class c extends h.InputWidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.name.change,(()\u003d\u003e{var e;return this.input_el.name\u003dnull!\u003d\u003d(e\u003dthis.model.name)\u0026\u0026void 0!\u003d\u003de?e:\"\"})),this.connect(this.model.properties.value.change,(()\u003d\u003e{this.input_el.value\u003dthis.format_value,this.old_value\u003dthis.input_el.value})),this.connect(this.model.properties.low.change,(()\u003d\u003e{const{value:e,low:t,high:l}\u003dthis.model;null!\u003dt\u0026\u0026null!\u003dl\u0026\u0026d.assert(t\u003c\u003dl,\"Invalid bounds, low must be inferior to high\"),null!\u003de\u0026\u0026null!\u003dt\u0026\u0026(this.model.value\u003dMath.max(e,t))})),this.connect(this.model.properties.high.change,(()\u003d\u003e{const{value:e,low:t,high:l}\u003dthis.model;null!\u003dt\u0026\u0026null!\u003dl\u0026\u0026d.assert(l\u003e\u003dt,\"Invalid bounds, high must be superior to low\"),null!\u003de\u0026\u0026null!\u003dl\u0026\u0026(this.model.value\u003dMath.min(e,l))})),this.connect(this.model.properties.high.change,(()\u003d\u003ethis.input_el.placeholder\u003dthis.model.placeholder)),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.input_el.disabled\u003dthis.model.disabled)),this.connect(this.model.properties.placeholder.change,(()\u003d\u003ethis.input_el.placeholder\u003dthis.model.placeholder))}get format_value(){return null!\u003dthis.model.value?this.model.pretty(this.model.value):\"\"}_set_input_filter(e){this.input_el.addEventListener(\"input\",(()\u003d\u003e{const{selectionStart:t,selectionEnd:l}\u003dthis.input_el;if(e(this.input_el.value))this.old_value\u003dthis.input_el.value;else{const e\u003dthis.old_value.length-this.input_el.value.length;this.input_el.value\u003dthis.old_value,t\u0026\u0026l\u0026\u0026this.input_el.setSelectionRange(t-1,l+e)}}))}render(){super.render(),this.input_el\u003da.input({type:\"text\",class:p.input,name:this.model.name,value:this.format_value,disabled:this.model.disabled,placeholder:this.model.placeholder}),this.old_value\u003dthis.format_value,this.set_input_filter(),this.input_el.addEventListener(\"change\",(()\u003d\u003ethis.change_input())),this.input_el.addEventListener(\"focusout\",(()\u003d\u003ethis.input_el.value\u003dthis.format_value)),this.group_el.appendChild(this.input_el)}set_input_filter(){\"int\"\u003d\u003dthis.model.mode?this._set_input_filter((e\u003d\u003e_.test(e))):\"float\"\u003d\u003dthis.model.mode\u0026\u0026this._set_input_filter((e\u003d\u003em.test(e)))}bound_value(e){let t\u003de;const{low:l,high:i}\u003dthis.model;return t\u003dnull!\u003dl?Math.max(l,t):t,t\u003dnull!\u003di?Math.min(i,t):t,t}get value(){let e\u003d\"\"!\u003dthis.input_el.value?Number(this.input_el.value):null;return null!\u003de\u0026\u0026(e\u003dthis.bound_value(e)),e}change_input(){null\u003d\u003dthis.value?this.model.value\u003dnull:Number.isNaN(this.value)||(this.model.value\u003dthis.value)}}l.NumericInputView\u003dc,c.__name__\u003d\"NumericInputView\";class v extends h.InputWidget{constructor(e){super(e)}static init_NumericInput(){this.prototype.default_view\u003dc,this.define((({Number:e,String:t,Enum:l,Ref:i,Or:n,Nullable:s})\u003d\u003e({value:[s(e),null],placeholder:[t,\"\"],mode:[l(\"int\",\"float\"),\"int\"],format:[s(n(t,i(o.TickFormatter))),null],low:[s(e),null],high:[s(e),null]})))}_formatter(e,t){return r.isString(t)?u.format(e,t):t.doFormat([e],{loc:0})[0]}pretty(e){return null!\u003dthis.format?this._formatter(e,this.format):`${e}`}}l.NumericInput\u003dv,v.__name__\u003d\"NumericInput\",v.init_NumericInput()},\n      455: function _(e,t,r,s,i){s();const n\u003de(444),_\u003de(43);class a extends n.MarkupView{render(){super.render();const e\u003d_.pre({style:{overflow:\"auto\"}},this.model.text);this.markup_el.appendChild(e)}}r.PreTextView\u003da,a.__name__\u003d\"PreTextView\";class o extends n.Markup{constructor(e){super(e)}static init_PreText(){this.prototype.default_view\u003da}}r.PreText\u003do,o.__name__\u003d\"PreText\",o.init_PreText()},\n      456: function _(t,o,i,e,a){e();const n\u003dt(1),u\u003dt(430),s\u003dt(43),c\u003dn.__importStar(t(328));class _ extends u.ButtonGroupView{change_active(t){this.model.active!\u003d\u003dt\u0026\u0026(this.model.active\u003dt)}_update_active(){const{active:t}\u003dthis.model;this._buttons.forEach(((o,i)\u003d\u003e{s.classes(o).toggle(c.active,t\u003d\u003d\u003di)}))}}i.RadioButtonGroupView\u003d_,_.__name__\u003d\"RadioButtonGroupView\";class r extends u.ButtonGroup{constructor(t){super(t)}static init_RadioButtonGroup(){this.prototype.default_view\u003d_,this.define((({Int:t,Nullable:o})\u003d\u003e({active:[o(t),null]})))}}i.RadioButtonGroup\u003dr,r.__name__\u003d\"RadioButtonGroup\",r.init_RadioButtonGroup()},\n      457: function _(e,i,t,n,a){n();const s\u003de(1),o\u003de(43),l\u003de(34),d\u003de(432),p\u003ds.__importStar(e(427));class u extends d.InputGroupView{render(){super.render();const e\u003do.div({class:[p.input_group,this.model.inline?p.inline:null]});this.el.appendChild(e);const i\u003dl.uniqueId(),{active:t,labels:n}\u003dthis.model;this._inputs\u003d[];for(let a\u003d0;a\u003cn.length;a++){const s\u003do.input({type:\"radio\",name:i,value:`${a}`});s.addEventListener(\"change\",(()\u003d\u003ethis.change_active(a))),this._inputs.push(s),this.model.disabled\u0026\u0026(s.disabled\u003d!0),a\u003d\u003dt\u0026\u0026(s.checked\u003d!0);const l\u003do.label({},s,o.span({},n[a]));e.appendChild(l)}}change_active(e){this.model.active\u003de}}t.RadioGroupView\u003du,u.__name__\u003d\"RadioGroupView\";class r extends d.InputGroup{constructor(e){super(e)}static init_RadioGroup(){this.prototype.default_view\u003du,this.define((({Boolean:e,Int:i,String:t,Array:n,Nullable:a})\u003d\u003e({active:[a(i),null],labels:[n(t),[]],inline:[e,!1]})))}}t.RadioGroup\u003dr,r.__name__\u003d\"RadioGroup\",r.init_RadioGroup()},\n      458: function _(e,t,i,r,a){r();const n\u003de(1).__importStar(e(183)),s\u003de(438),_\u003de(8);class d extends s.AbstractRangeSliderView{}i.RangeSliderView\u003dd,d.__name__\u003d\"RangeSliderView\";class o extends s.AbstractSlider{constructor(e){super(e),this.behaviour\u003d\"drag\",this.connected\u003d[!1,!0,!1]}static init_RangeSlider(){this.prototype.default_view\u003dd,this.override({format:\"0[.]00\"})}_formatter(e,t){return _.isString(t)?n.format(e,t):t.compute(e)}}i.RangeSlider\u003do,o.__name__\u003d\"RangeSlider\",o.init_RangeSlider()},\n      459: function _(e,t,n,i,s){i();const l\u003de(1),u\u003de(43),a\u003de(8),o\u003de(13),_\u003de(426),p\u003dl.__importStar(e(427));class r extends _.InputWidgetView{constructor(){super(...arguments),this._known_values\u003dnew Set}connect_signals(){super.connect_signals();const{value:e,options:t}\u003dthis.model.properties;this.on_change(e,(()\u003d\u003e{this._update_value()})),this.on_change(t,(()\u003d\u003e{u.empty(this.input_el),u.append(this.input_el,...this.options_el()),this._update_value()}))}options_el(){const{_known_values:e}\u003dthis;function t(t){return t.map((t\u003d\u003e{let n,i;return a.isString(t)?n\u003di\u003dt:[n,i]\u003dt,e.add(n),u.option({value:n},i)}))}e.clear();const{options:n}\u003dthis.model;return a.isArray(n)?t(n):o.entries(n).map((([e,n])\u003d\u003eu.optgroup({label:e},t(n))))}render(){super.render(),this.input_el\u003du.select({class:p.input,name:this.model.name,disabled:this.model.disabled},this.options_el()),this._update_value(),this.input_el.addEventListener(\"change\",(()\u003d\u003ethis.change_input())),this.group_el.appendChild(this.input_el)}change_input(){const e\u003dthis.input_el.value;this.model.value\u003de,super.change_input()}_update_value(){const{value:e}\u003dthis.model;this._known_values.has(e)?this.input_el.value\u003de:this.input_el.removeAttribute(\"value\")}}n.SelectView\u003dr,r.__name__\u003d\"SelectView\";class c extends _.InputWidget{constructor(e){super(e)}static init_Select(){this.prototype.default_view\u003dr,this.define((({String:e,Array:t,Tuple:n,Dict:i,Or:s})\u003d\u003e{const l\u003dt(s(e,n(e,e)));return{value:[e,\"\"],options:[s(l,i(l)),[]]}}))}}n.Select\u003dc,c.__name__\u003d\"Select\",c.init_Select()},\n      460: function _(t,e,i,r,s){r();const _\u003dt(1).__importStar(t(183)),a\u003dt(438),n\u003dt(8);class o extends a.AbstractSliderView{}i.SliderView\u003do,o.__name__\u003d\"SliderView\";class d extends a.AbstractSlider{constructor(t){super(t),this.behaviour\u003d\"tap\",this.connected\u003d[!0,!1]}static init_Slider(){this.prototype.default_view\u003do,this.override({format:\"0[.]00\"})}_formatter(t,e){return n.isString(e)?_.format(t,e):e.compute(t)}}i.Slider\u003dd,d.__name__\u003d\"Slider\",d.init_Slider()},\n      461: function _(e,t,i,n,s){n();const l\u003de(454),o\u003de(43),{min:r,max:a,floor:h,abs:_}\u003dMath;function u(e){return h(e)!\u003d\u003de?e.toFixed(16).replace(/0+$/,\"\").split(\".\")[1].length:0}class d extends l.NumericInputView{*buttons(){yield this.btn_up_el,yield this.btn_down_el}initialize(){super.initialize(),this._handles\u003d{interval:void 0,timeout:void 0},this._interval\u003d200}connect_signals(){super.connect_signals();const e\u003dthis.model.properties;this.on_change(e.disabled,(()\u003d\u003e{for(const e of this.buttons())o.toggle_attribute(e,\"disabled\",this.model.disabled)}))}render(){super.render(),this.wrapper_el\u003do.div({class:\"bk-spin-wrapper\"}),this.group_el.replaceChild(this.wrapper_el,this.input_el),this.btn_up_el\u003do.button({class:\"bk-spin-btn bk-spin-btn-up\"}),this.btn_down_el\u003do.button({class:\"bk-spin-btn bk-spin-btn-down\"}),this.wrapper_el.appendChild(this.input_el),this.wrapper_el.appendChild(this.btn_up_el),this.wrapper_el.appendChild(this.btn_down_el);for(const e of this.buttons())o.toggle_attribute(e,\"disabled\",this.model.disabled),e.addEventListener(\"mousedown\",(e\u003d\u003ethis._btn_mouse_down(e))),e.addEventListener(\"mouseup\",(()\u003d\u003ethis._btn_mouse_up())),e.addEventListener(\"mouseleave\",(()\u003d\u003ethis._btn_mouse_leave()));this.input_el.addEventListener(\"keydown\",(e\u003d\u003ethis._input_key_down(e))),this.input_el.addEventListener(\"keyup\",(()\u003d\u003ethis.model.value_throttled\u003dthis.model.value)),this.input_el.addEventListener(\"wheel\",(e\u003d\u003ethis._input_mouse_wheel(e))),this.input_el.addEventListener(\"wheel\",function(e,t,i\u003d!1){let n;return function(...s){const l\u003dthis,o\u003di\u0026\u0026void 0\u003d\u003d\u003dn;void 0!\u003d\u003dn\u0026\u0026clearTimeout(n),n\u003dsetTimeout((function(){n\u003dvoid 0,i||e.apply(l,s)}),t),o\u0026\u0026e.apply(l,s)}}((()\u003d\u003e{this.model.value_throttled\u003dthis.model.value}),this.model.wheel_wait,!1))}get precision(){const{low:e,high:t,step:i}\u003dthis.model,n\u003du;return a(n(_(null!\u003de?e:0)),n(_(null!\u003dt?t:0)),n(_(i)))}remove(){this._stop_incrementation(),super.remove()}_start_incrementation(e){clearInterval(this._handles.interval),this._counter\u003d0;const{step:t}\u003dthis.model,i\u003de\u003d\u003e{if(this._counter+\u003d1,this._counter%5\u003d\u003d0){const t\u003dMath.floor(this._counter/5);t\u003c10?(clearInterval(this._handles.interval),this._handles.interval\u003dsetInterval((()\u003d\u003ei(e)),this._interval/(t+1))):t\u003e\u003d10\u0026\u0026t\u003c\u003d13\u0026\u0026(clearInterval(this._handles.interval),this._handles.interval\u003dsetInterval((()\u003d\u003ei(2*e)),this._interval/10))}this.increment(e)};this._handles.interval\u003dsetInterval((()\u003d\u003ei(e*t)),this._interval)}_stop_incrementation(){clearTimeout(this._handles.timeout),this._handles.timeout\u003dvoid 0,clearInterval(this._handles.interval),this._handles.interval\u003dvoid 0,this.model.value_throttled\u003dthis.model.value}_btn_mouse_down(e){e.preventDefault();const t\u003de.currentTarget\u003d\u003d\u003dthis.btn_up_el?1:-1;this.increment(t*this.model.step),this.input_el.focus(),this._handles.timeout\u003dsetTimeout((()\u003d\u003ethis._start_incrementation(t)),this._interval)}_btn_mouse_up(){this._stop_incrementation()}_btn_mouse_leave(){this._stop_incrementation()}_input_mouse_wheel(e){if(document.activeElement\u003d\u003d\u003dthis.input_el){e.preventDefault();const t\u003de.deltaY\u003e0?-1:1;this.increment(t*this.model.step)}}_input_key_down(e){switch(e.keyCode){case o.Keys.Up:return e.preventDefault(),this.increment(this.model.step);case o.Keys.Down:return e.preventDefault(),this.increment(-this.model.step);case o.Keys.PageUp:return e.preventDefault(),this.increment(this.model.page_step_multiplier*this.model.step);case o.Keys.PageDown:return e.preventDefault(),this.increment(-this.model.page_step_multiplier*this.model.step)}}adjust_to_precision(e){return this.bound_value(Number(e.toFixed(this.precision)))}increment(e){const{low:t,high:i}\u003dthis.model;null\u003d\u003dthis.model.value?e\u003e0?this.model.value\u003dnull!\u003dt?t:null!\u003di?r(0,i):0:e\u003c0\u0026\u0026(this.model.value\u003dnull!\u003di?i:null!\u003dt?a(t,0):0):this.model.value\u003dthis.adjust_to_precision(this.model.value+e)}change_input(){super.change_input(),this.model.value_throttled\u003dthis.model.value}}i.SpinnerView\u003dd,d.__name__\u003d\"SpinnerView\";class p extends l.NumericInput{constructor(e){super(e)}static init_Spinner(){this.prototype.default_view\u003dd,this.define((({Number:e,Nullable:t})\u003d\u003e({value_throttled:[t(e),null],step:[e,1],page_step_multiplier:[e,10],wheel_wait:[e,100]}))),this.override({mode:\"float\"})}}i.Spinner\u003dp,p.__name__\u003d\"Spinner\",p.init_Spinner()},\n      462: function _(e,t,s,n,i){n();const r\u003de(1),o\u003de(425),p\u003de(43),c\u003dr.__importStar(e(427));class l extends o.TextLikeInputView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.rows.change,(()\u003d\u003ethis.input_el.rows\u003dthis.model.rows)),this.connect(this.model.properties.cols.change,(()\u003d\u003ethis.input_el.cols\u003dthis.model.cols))}_render_input(){this.input_el\u003dp.textarea({class:c.input})}render(){super.render(),this.input_el.cols\u003dthis.model.cols,this.input_el.rows\u003dthis.model.rows}}s.TextAreaInputView\u003dl,l.__name__\u003d\"TextAreaInputView\";class _ extends o.TextLikeInput{constructor(e){super(e)}static init_TextAreaInput(){this.prototype.default_view\u003dl,this.define((({Int:e})\u003d\u003e({cols:[e,20],rows:[e,2]}))),this.override({max_length:500})}}s.TextAreaInput\u003d_,_.__name__\u003d\"TextAreaInput\",_.init_TextAreaInput()},\n      463: function _(e,t,i,s,c){s();const o\u003de(1),a\u003de(419),n\u003de(43),l\u003do.__importStar(e(328));class _ extends a.AbstractButtonView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.active.change,(()\u003d\u003ethis._update_active()))}render(){super.render(),this._update_active()}click(){this.model.active\u003d!this.model.active,super.click()}_update_active(){n.classes(this.button_el).toggle(l.active,this.model.active)}}i.ToggleView\u003d_,_.__name__\u003d\"ToggleView\";class g extends a.AbstractButton{constructor(e){super(e)}static init_Toggle(){this.prototype.default_view\u003d_,this.define((({Boolean:e})\u003d\u003e({active:[e,!1]}))),this.override({label:\"Toggle\"})}}i.Toggle\u003dg,g.__name__\u003d\"Toggle\",g.init_Toggle()},\n      }, 417, {\"models/widgets/main\":417,\"models/widgets/index\":418,\"models/widgets/abstract_button\":419,\"models/widgets/control\":420,\"models/widgets/widget\":488,\"models/widgets/abstract_icon\":422,\"models/widgets/autocomplete_input\":423,\"models/widgets/text_input\":424,\"models/widgets/text_like_input\":425,\"models/widgets/input_widget\":426,\"styles/widgets/inputs.css\":427,\"models/widgets/button\":428,\"models/widgets/checkbox_button_group\":429,\"models/widgets/button_group\":430,\"models/widgets/checkbox_group\":431,\"models/widgets/input_group\":432,\"models/widgets/color_picker\":433,\"models/widgets/date_picker\":434,\"styles/widgets/flatpickr.css\":436,\"models/widgets/date_range_slider\":437,\"models/widgets/abstract_slider\":438,\"styles/widgets/sliders.css\":440,\"styles/widgets/nouislider.css\":441,\"models/widgets/date_slider\":442,\"models/widgets/div\":443,\"models/widgets/markup\":444,\"styles/clearfix.css\":445,\"models/widgets/dropdown\":446,\"models/widgets/file_input\":447,\"models/widgets/multiselect\":448,\"models/widgets/paragraph\":449,\"models/widgets/password_input\":450,\"models/widgets/multichoice\":451,\"styles/widgets/choices.css\":453,\"models/widgets/numeric_input\":454,\"models/widgets/pretext\":455,\"models/widgets/radio_button_group\":456,\"models/widgets/radio_group\":457,\"models/widgets/range_slider\":458,\"models/widgets/selectbox\":459,\"models/widgets/slider\":460,\"models/widgets/spinner\":461,\"models/widgets/textarea_input\":462,\"models/widgets/toggle\":463}, {});});\n\n      /* END bokeh-widgets.min.js */\n    },\n    \n    function(Bokeh) {\n      /* BEGIN bokeh-tables.min.js */\n      /*!\n       * Copyright (c) 2012 - 2021, Anaconda, Inc., and Bokeh Contributors\n       * All rights reserved.\n       * \n       * Redistribution and use in source and binary forms, with or without modification,\n       * are permitted provided that the following conditions are met:\n       * \n       * Redistributions of source code must retain the above copyright notice,\n       * this list of conditions and the following disclaimer.\n       * \n       * Redistributions in binary form must reproduce the above copyright notice,\n       * this list of conditions and the following disclaimer in the documentation\n       * and/or other materials provided with the distribution.\n       * \n       * Neither the name of Anaconda nor the names of any contributors\n       * may be used to endorse or promote products derived from this software\n       * without specific prior written permission.\n       * \n       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n       * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n       * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n       * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n       * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n       * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n       * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n       * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n       * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n       * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n       * THE POSSIBILITY OF SUCH DAMAGE.\n       */\n      (function(root, factory) {\n        factory(root[\"Bokeh\"], \"2.3.3\");\n      })(this, function(Bokeh, version) {\n        var define;\n        return (function(modules, entry, aliases, externals) {\n          const bokeh \u003d typeof Bokeh !\u003d\u003d \"undefined\" \u0026\u0026 (version !\u003d null ? Bokeh[version] : Bokeh);\n          if (bokeh !\u003d null) {\n            return bokeh.register_plugin(modules, entry, aliases);\n          } else {\n            throw new Error(\"Cannot find Bokeh \" + version + \". You have to load it prior to loading plugins.\");\n          }\n        })\n      ({\n      464: function _(t,e,o,r,s){r();const _\u003dt(1).__importStar(t(465));o.Tables\u003d_;t(7).register_models(_)},\n      465: function _(g,a,r,e,t){e();const o\u003dg(1);o.__exportStar(g(466),r),o.__exportStar(g(469),r),t(\"DataTable\",g(472).DataTable),t(\"TableColumn\",g(490).TableColumn),t(\"TableWidget\",g(489).TableWidget);var n\u003dg(492);t(\"AvgAggregator\",n.AvgAggregator),t(\"MinAggregator\",n.MinAggregator),t(\"MaxAggregator\",n.MaxAggregator),t(\"SumAggregator\",n.SumAggregator);var A\u003dg(493);t(\"GroupingInfo\",A.GroupingInfo),t(\"DataCube\",A.DataCube)},\n      466: function _(e,t,i,s,r){s();const a\u003de(1),n\u003de(43),l\u003de(240),u\u003de(53),d\u003de(467),o\u003da.__importStar(e(468));class _ extends l.DOMView{constructor(e){const{model:t,parent:i}\u003de.column;super(Object.assign({model:t,parent:i},e)),this.args\u003de,this.initialize(),this.render()}get emptyValue(){return null}initialize(){super.initialize(),this.inputEl\u003dthis._createInput(),this.defaultValue\u003dnull}async lazy_initialize(){throw new Error(\"unsupported\")}css_classes(){return super.css_classes().concat(o.cell_editor)}render(){super.render(),this.args.container.append(this.el),this.el.appendChild(this.inputEl),this.renderEditor(),this.disableNavigation()}renderEditor(){}disableNavigation(){this.inputEl.addEventListener(\"keydown\",(e\u003d\u003e{switch(e.keyCode){case n.Keys.Left:case n.Keys.Right:case n.Keys.Up:case n.Keys.Down:case n.Keys.PageUp:case n.Keys.PageDown:e.stopImmediatePropagation()}}))}destroy(){this.remove()}focus(){this.inputEl.focus()}show(){}hide(){}position(){}getValue(){return this.inputEl.value}setValue(e){this.inputEl.value\u003de}serializeValue(){return this.getValue()}isValueChanged(){return!(\"\"\u003d\u003dthis.getValue()\u0026\u0026null\u003d\u003dthis.defaultValue)\u0026\u0026this.getValue()!\u003d\u003dthis.defaultValue}applyValue(e,t){const i\u003dthis.args.grid.getData(),s\u003di.index.indexOf(e[d.DTINDEX_NAME]);i.setField(s,this.args.column.field,t)}loadValue(e){const t\u003de[this.args.column.field];this.defaultValue\u003dnull!\u003dt?t:this.emptyValue,this.setValue(this.defaultValue)}validateValue(e){if(this.args.column.validator){const t\u003dthis.args.column.validator(e);if(!t.valid)return t}return{valid:!0,msg:null}}validate(){return this.validateValue(this.getValue())}}i.CellEditorView\u003d_,_.__name__\u003d\"CellEditorView\";class c extends u.Model{}i.CellEditor\u003dc,c.__name__\u003d\"CellEditor\";class p extends _{get emptyValue(){return\"\"}_createInput(){return n.input({type:\"text\"})}renderEditor(){this.inputEl.focus(),this.inputEl.select()}loadValue(e){super.loadValue(e),this.inputEl.defaultValue\u003dthis.defaultValue,this.inputEl.select()}}i.StringEditorView\u003dp,p.__name__\u003d\"StringEditorView\";class h extends c{static init_StringEditor(){this.prototype.default_view\u003dp,this.define((({String:e,Array:t})\u003d\u003e({completions:[t(e),[]]})))}}i.StringEditor\u003dh,h.__name__\u003d\"StringEditor\",h.init_StringEditor();class E extends _{_createInput(){return n.textarea()}renderEditor(){this.inputEl.focus(),this.inputEl.select()}}i.TextEditorView\u003dE,E.__name__\u003d\"TextEditorView\";class V extends c{static init_TextEditor(){this.prototype.default_view\u003dE}}i.TextEditor\u003dV,V.__name__\u003d\"TextEditor\",V.init_TextEditor();class m extends _{_createInput(){return n.select()}renderEditor(){for(const e of this.model.options)this.inputEl.appendChild(n.option({value:e},e));this.focus()}}i.SelectEditorView\u003dm,m.__name__\u003d\"SelectEditorView\";class f extends c{static init_SelectEditor(){this.prototype.default_view\u003dm,this.define((({String:e,Array:t})\u003d\u003e({options:[t(e),[]]})))}}i.SelectEditor\u003df,f.__name__\u003d\"SelectEditor\",f.init_SelectEditor();class x extends _{_createInput(){return n.input({type:\"text\"})}}i.PercentEditorView\u003dx,x.__name__\u003d\"PercentEditorView\";class g extends c{static init_PercentEditor(){this.prototype.default_view\u003dx}}i.PercentEditor\u003dg,g.__name__\u003d\"PercentEditor\",g.init_PercentEditor();class w extends _{_createInput(){return n.input({type:\"checkbox\"})}renderEditor(){this.focus()}loadValue(e){this.defaultValue\u003d!!e[this.args.column.field],this.inputEl.checked\u003dthis.defaultValue}serializeValue(){return this.inputEl.checked}}i.CheckboxEditorView\u003dw,w.__name__\u003d\"CheckboxEditorView\";class v extends c{static init_CheckboxEditor(){this.prototype.default_view\u003dw}}i.CheckboxEditor\u003dv,v.__name__\u003d\"CheckboxEditor\",v.init_CheckboxEditor();class y extends _{_createInput(){return n.input({type:\"text\"})}renderEditor(){this.inputEl.focus(),this.inputEl.select()}remove(){super.remove()}serializeValue(){var e;return null!\u003d\u003d(e\u003dparseInt(this.getValue(),10))\u0026\u0026void 0!\u003d\u003de?e:0}loadValue(e){super.loadValue(e),this.inputEl.defaultValue\u003dthis.defaultValue,this.inputEl.select()}validateValue(e){return isNaN(e)?{valid:!1,msg:\"Please enter a valid integer\"}:super.validateValue(e)}}i.IntEditorView\u003dy,y.__name__\u003d\"IntEditorView\";class I extends c{static init_IntEditor(){this.prototype.default_view\u003dy,this.define((({Int:e})\u003d\u003e({step:[e,1]})))}}i.IntEditor\u003dI,I.__name__\u003d\"IntEditor\",I.init_IntEditor();class b extends _{_createInput(){return n.input({type:\"text\"})}renderEditor(){this.inputEl.focus(),this.inputEl.select()}remove(){super.remove()}serializeValue(){var e;return null!\u003d\u003d(e\u003dparseFloat(this.getValue()))\u0026\u0026void 0!\u003d\u003de?e:0}loadValue(e){super.loadValue(e),this.inputEl.defaultValue\u003dthis.defaultValue,this.inputEl.select()}validateValue(e){return isNaN(e)?{valid:!1,msg:\"Please enter a valid number\"}:super.validateValue(e)}}i.NumberEditorView\u003db,b.__name__\u003d\"NumberEditorView\";class N extends c{static init_NumberEditor(){this.prototype.default_view\u003db,this.define((({Number:e})\u003d\u003e({step:[e,.01]})))}}i.NumberEditor\u003dN,N.__name__\u003d\"NumberEditor\",N.init_NumberEditor();class S extends _{_createInput(){return n.input({type:\"text\"})}}i.TimeEditorView\u003dS,S.__name__\u003d\"TimeEditorView\";class C extends c{static init_TimeEditor(){this.prototype.default_view\u003dS}}i.TimeEditor\u003dC,C.__name__\u003d\"TimeEditor\",C.init_TimeEditor();class D extends _{_createInput(){return n.input({type:\"text\"})}get emptyValue(){return new Date}renderEditor(){this.inputEl.focus(),this.inputEl.select()}destroy(){super.destroy()}show(){super.show()}hide(){super.hide()}position(){return super.position()}getValue(){}setValue(e){}}i.DateEditorView\u003dD,D.__name__\u003d\"DateEditorView\";class T extends c{static init_DateEditor(){this.prototype.default_view\u003dD}}i.DateEditor\u003dT,T.__name__\u003d\"DateEditor\",T.init_DateEditor()},\n      467: function _(_,n,i,t,d){t(),i.DTINDEX_NAME\u003d\"__bkdt_internal_index__\"},\n      468: function _(e,l,o,t,r){t(),o.root\u003d\"bk-root\",o.data_table\u003d\"bk-data-table\",o.cell_special_defaults\u003d\"bk-cell-special-defaults\",o.cell_select\u003d\"bk-cell-select\",o.cell_index\u003d\"bk-cell-index\",o.header_index\u003d\"bk-header-index\",o.cell_editor\u003d\"bk-cell-editor\",o.cell_editor_completion\u003d\"bk-cell-editor-completion\",o.default\u003d\u0027.bk-root .bk-data-table{box-sizing:content-box;font-size:11px;}.bk-root .bk-data-table input[type\u003d\"checkbox\"]{margin-left:4px;margin-right:4px;}.bk-root .bk-cell-special-defaults{border-right-color:silver;border-right-style:solid;background:#f5f5f5;}.bk-root .bk-cell-select{border-right-color:silver;border-right-style:solid;background:#f5f5f5;}.bk-root .slick-cell.bk-cell-index{border-right-color:silver;border-right-style:solid;background:#f5f5f5;text-align:right;background:#f0f0f0;color:#909090;}.bk-root .bk-header-index .slick-column-name{float:right;}.bk-root .slick-row.selected .bk-cell-index{background-color:transparent;}.bk-root .slick-row.odd{background:#f0f0f0;}.bk-root .slick-cell{padding-left:4px;padding-right:4px;border-right-color:transparent;border:0.25px solid transparent;}.bk-root .slick-cell .bk{line-height:inherit;}.bk-root .slick-cell.active{border-style:dashed;}.bk-root .slick-cell.selected{background-color:#F0F8FF;}.bk-root .slick-cell.editable{padding-left:0;padding-right:0;}.bk-root .bk-cell-editor{display:contents;}.bk-root .bk-cell-editor input,.bk-root .bk-cell-editor select{width:100%;height:100%;border:0;margin:0;padding:0;outline:0;background:transparent;vertical-align:baseline;}.bk-root .bk-cell-editor input{padding-left:4px;padding-right:4px;}.bk-root .bk-cell-editor-completion{font-size:11px;}\u0027},\n      469: function _(t,e,r,a,n){a();const i\u003dt(1),o\u003di.__importDefault(t(181)),s\u003di.__importStar(t(183)),l\u003dt(470),c\u003dt(43),m\u003dt(20),u\u003dt(8),_\u003dt(34),F\u003dt(22),d\u003dt(53);class f extends d.Model{constructor(t){super(t)}doFormat(t,e,r,a,n){return null\u003d\u003dr?\"\":(r+\"\").replace(/\u0026/g,\"\u0026amp;\").replace(/\u003c/g,\"\u0026lt;\").replace(/\u003e/g,\"\u0026gt;\")}}r.CellFormatter\u003df,f.__name__\u003d\"CellFormatter\";class h extends f{constructor(t){super(t)}static init_StringFormatter(){this.define((({Color:t,Nullable:e})\u003d\u003e({font_style:[m.FontStyle,\"normal\"],text_align:[m.TextAlign,\"left\"],text_color:[e(t),null]})))}doFormat(t,e,r,a,n){const{font_style:i,text_align:o,text_color:s}\u003dthis,l\u003dc.div({},null\u003d\u003dr?\"\":`${r}`);switch(i){case\"bold\":l.style.fontWeight\u003d\"bold\";break;case\"italic\":l.style.fontStyle\u003d\"italic\"}return null!\u003do\u0026\u0026(l.style.textAlign\u003do),null!\u003ds\u0026\u0026(l.style.color\u003dF.color2css(s)),l.outerHTML}}r.StringFormatter\u003dh,h.__name__\u003d\"StringFormatter\",h.init_StringFormatter();class g extends h{constructor(t){super(t)}static init_ScientificFormatter(){this.define((({Number:t,String:e,Nullable:r})\u003d\u003e({nan_format:[r(e),null],precision:[t,10],power_limit_high:[t,5],power_limit_low:[t,-3]})))}get scientific_limit_low(){return 10**this.power_limit_low}get scientific_limit_high(){return 10**this.power_limit_high}doFormat(t,e,r,a,n){const i\u003dMath.abs(r)\u003c\u003dthis.scientific_limit_low||Math.abs(r)\u003e\u003dthis.scientific_limit_high;let o\u003dthis.precision;return o\u003c1\u0026\u0026(o\u003d1),r\u003dnull!\u003dr\u0026\u0026!isNaN(r)||null\u003d\u003dthis.nan_format?0\u003d\u003dr?_.to_fixed(r,1):i?r.toExponential(o):_.to_fixed(r,o):this.nan_format,super.doFormat(t,e,r,a,n)}}r.ScientificFormatter\u003dg,g.__name__\u003d\"ScientificFormatter\",g.init_ScientificFormatter();class p extends h{constructor(t){super(t)}static init_NumberFormatter(){this.define((({String:t,Nullable:e})\u003d\u003e({format:[t,\"0,0\"],language:[t,\"en\"],rounding:[m.RoundingFunction,\"round\"],nan_format:[e(t),null]})))}doFormat(t,e,r,a,n){const{format:i,language:o,nan_format:l}\u003dthis,c\u003d(()\u003d\u003e{switch(this.rounding){case\"round\":case\"nearest\":return Math.round;case\"floor\":case\"rounddown\":return Math.floor;case\"ceil\":case\"roundup\":return Math.ceil}})();return r\u003dnull!\u003dr\u0026\u0026!isNaN(r)||null\u003d\u003dl?s.format(r,i,o,c):l,super.doFormat(t,e,r,a,n)}}r.NumberFormatter\u003dp,p.__name__\u003d\"NumberFormatter\",p.init_NumberFormatter();class S extends f{constructor(t){super(t)}static init_BooleanFormatter(){this.define((({String:t})\u003d\u003e({icon:[t,\"check\"]})))}doFormat(t,e,r,a,n){return r?c.i({class:this.icon}).outerHTML:\"\"}}r.BooleanFormatter\u003dS,S.__name__\u003d\"BooleanFormatter\",S.init_BooleanFormatter();class b extends h{constructor(t){super(t)}static init_DateFormatter(){this.define((({String:t,Nullable:e})\u003d\u003e({format:[t,\"ISO-8601\"],nan_format:[e(t),null]})))}getFormat(){switch(this.format){case\"ATOM\":case\"W3C\":case\"RFC-3339\":case\"ISO-8601\":return\"%Y-%m-%d\";case\"COOKIE\":return\"%a, %d %b %Y\";case\"RFC-850\":return\"%A, %d-%b-%y\";case\"RFC-1123\":case\"RFC-2822\":return\"%a, %e %b %Y\";case\"RSS\":case\"RFC-822\":case\"RFC-1036\":return\"%a, %e %b %y\";case\"TIMESTAMP\":return;default:return this.format}}doFormat(t,e,r,a,n){const{nan_format:i}\u003dthis;let s;return s\u003dnull!\u003d(r\u003du.isString(r)?parseInt(r,10):r)\u0026\u0026!isNaN(r)\u0026\u0026-9223372036854776!\u003d\u003dr||null\u003d\u003di?null\u003d\u003dr?\"\":o.default(r,this.getFormat()):i,super.doFormat(t,e,s,a,n)}}r.DateFormatter\u003db,b.__name__\u003d\"DateFormatter\",b.init_DateFormatter();class x extends f{constructor(t){super(t)}static init_HTMLTemplateFormatter(){this.define((({String:t})\u003d\u003e({template:[t,\"\u003c%\u003d value %\u003e\"]})))}doFormat(t,e,r,a,n){const{template:i}\u003dthis;if(null\u003d\u003dr)return\"\";return l._.template(i)(Object.assign(Object.assign({},n),{value:r}))}}r.HTMLTemplateFormatter\u003dx,x.__name__\u003d\"HTMLTemplateFormatter\",x.init_HTMLTemplateFormatter()},\n      470: function _(e,n,t,f,i){var o\u003de(471),d\u003do.template;function r(e,n,t){return d(e,n,t)}r._\u003do,n.exports\u003dr,\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define((function(){return r})):\"undefined\"\u003d\u003dtypeof window\u0026\u0026\"undefined\"\u003d\u003dtypeof navigator||(window.UnderscoreTemplate\u003dr)},\n      471: function _(r,e,n,t,a){\n      //     (c) 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters \u0026 Editors\n      //     Underscore may be freely distributed under the MIT license.\n      var u\u003d{},c\u003dArray.prototype,o\u003dObject.prototype,l\u003dc.slice,i\u003do.toString,f\u003do.hasOwnProperty,s\u003dc.forEach,p\u003dObject.keys,_\u003dArray.isArray,h\u003dfunction(){},v\u003dh.each\u003dh.forEach\u003dfunction(r,e,n){if(null!\u003dr)if(s\u0026\u0026r.forEach\u003d\u003d\u003ds)r.forEach(e,n);else if(r.length\u003d\u003d\u003d+r.length){for(var t\u003d0,a\u003dr.length;t\u003ca;t++)if(e.call(n,r[t],t,r)\u003d\u003d\u003du)return}else{var c\u003dh.keys(r);for(t\u003d0,a\u003dc.length;t\u003ca;t++)if(e.call(n,r[c[t]],c[t],r)\u003d\u003d\u003du)return}};h.keys\u003dp||function(r){if(r!\u003d\u003dObject(r))throw new TypeError(\"Invalid object\");var e\u003d[];for(var n in r)h.has(r,n)\u0026\u0026e.push(n);return e},h.defaults\u003dfunction(r){return v(l.call(arguments,1),(function(e){if(e)for(var n in e)void 0\u003d\u003d\u003dr[n]\u0026\u0026(r[n]\u003de[n])})),r},h.isArray\u003d_||function(r){return\"[object Array]\"\u003d\u003d\u003di.call(r)},h.has\u003dfunction(r,e){if(!h.isArray(e))return null!\u003dr\u0026\u0026f.call(r,e);for(var n\u003de.length,t\u003d0;t\u003cn;t++){var a\u003de[t];if(null\u003d\u003dr||!f.call(r,a))return!1;r\u003dr[a]}return!!n};var g\u003d{escape:{\"\u0026\":\"\u0026amp;\",\"\u003c\":\"\u0026lt;\",\"\u003e\":\"\u0026gt;\",\u0027\"\u0027:\"\u0026quot;\",\"\u0027\":\"\u0026#x27;\"}},y\u003d{escape:new RegExp(\"[\"+h.keys(g.escape).join(\"\")+\"]\",\"g\")};h.each([\"escape\"],(function(r){h[r]\u003dfunction(e){return null\u003d\u003de?\"\":(\"\"+e).replace(y[r],(function(e){return g[r][e]}))}})),h.templateSettings\u003d{evaluate:/\u003c%([\\s\\S]+?)%\u003e/g,interpolate:/\u003c%\u003d([\\s\\S]+?)%\u003e/g,escape:/\u003c%-([\\s\\S]+?)%\u003e/g};var j\u003d/(.)^/,b\u003d{\"\u0027\":\"\u0027\",\"\\\\\":\"\\\\\",\"\\r\":\"r\",\"\\n\":\"n\",\"\\t\":\"t\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},w\u003d/\\\\|\u0027|\\r|\\n|\\t|\\u2028|\\u2029/g;h.template\u003dfunction(r,e,n){var t;n\u003dh.defaults({},n,h.templateSettings);var a\u003dnew RegExp([(n.escape||j).source,(n.interpolate||j).source,(n.evaluate||j).source].join(\"|\")+\"|$\",\"g\"),u\u003d0,c\u003d\"__p+\u003d\u0027\";r.replace(a,(function(e,n,t,a,o){return c+\u003dr.slice(u,o).replace(w,(function(r){return\"\\\\\"+b[r]})),n\u0026\u0026(c+\u003d\"\u0027+\\n((__t\u003d(\"+n+\"))\u003d\u003dnull?\u0027\u0027:_.escape(__t))+\\n\u0027\"),t\u0026\u0026(c+\u003d\"\u0027+\\n((__t\u003d(\"+t+\"))\u003d\u003dnull?\u0027\u0027:__t)+\\n\u0027\"),a\u0026\u0026(c+\u003d\"\u0027;\\n\"+a+\"\\n__p+\u003d\u0027\"),u\u003do+e.length,e})),c+\u003d\"\u0027;\\n\",n.variable||(c\u003d\"with(obj||{}){\\n\"+c+\"}\\n\"),c\u003d\"var __t,__p\u003d\u0027\u0027,__j\u003dArray.prototype.join,print\u003dfunction(){__p+\u003d__j.call(arguments,\u0027\u0027);};\\n\"+c+\"return __p;\\n\";try{t\u003dnew Function(n.variable||\"obj\",\"_\",c)}catch(r){throw r.source\u003dc,r}if(e)return t(e,h);var o\u003dfunction(r){return t.call(this,r,h)};return o.source\u003d\"function(\"+(n.variable||\"obj\")+\"){\\n\"+c+\"}\",o},e.exports\u003dh},\n      472: function _(e,t,i,s,o){s();const n\u003de(1),l\u003de(473),r\u003de(477),d\u003de(478),a\u003de(479),h\u003de(34),u\u003de(8),c\u003de(9),_\u003de(13),m\u003de(19),g\u003de(488),p\u003de(467),f\u003de(489),b\u003de(490),w\u003dn.__importStar(e(468)),x\u003dw,C\u003dn.__importDefault(e(491));i.AutosizeModes\u003d{fit_columns:\"FCV\",fit_viewport:\"FVC\",force_fit:\"LFF\",none:\"NOA\"};let z\u003d!1;class v{constructor(e,t){this.init(e,t)}init(e,t){if(p.DTINDEX_NAME in e.data)throw new Error(`special name ${p.DTINDEX_NAME} cannot be used as a data table column`);this.source\u003de,this.view\u003dt,this.index\u003d[...this.view.indices]}getLength(){return this.index.length}getItem(e){const t\u003d{};for(const i of _.keys(this.source.data))t[i]\u003dthis.source.data[i][this.index[e]];return t[p.DTINDEX_NAME]\u003dthis.index[e],t}getField(e,t){return t\u003d\u003dp.DTINDEX_NAME?this.index[e]:this.source.data[t][this.index[e]]}setField(e,t,i){const s\u003dthis.index[e];this.source.patch({[t]:[[s,i]]})}getRecords(){return c.range(0,this.getLength()).map((e\u003d\u003ethis.getItem(e)))}getItems(){return this.getRecords()}slice(e,t,i){return e\u003dnull!\u003de?e:0,t\u003dnull!\u003dt?t:this.getLength(),i\u003dnull!\u003di?i:1,c.range(e,t,i).map((e\u003d\u003ethis.getItem(e)))}sort(e){let t\u003de.map((e\u003d\u003e[e.sortCol.field,e.sortAsc?1:-1]));0\u003d\u003dt.length\u0026\u0026(t\u003d[[p.DTINDEX_NAME,1]]);const i\u003dthis.getRecords(),s\u003dthis.index.slice();this.index.sort(((e,o)\u003d\u003e{for(const[n,l]of t){const t\u003di[s.indexOf(e)][n],r\u003di[s.indexOf(o)][n];if(t!\u003d\u003dr)return u.isNumber(t)\u0026\u0026u.isNumber(r)?l*(t-r||+isNaN(t)-+isNaN(r)):`${t}`\u003e`${r}`?l:-l}return 0}))}}i.TableDataProvider\u003dv,v.__name__\u003d\"TableDataProvider\";class A extends g.WidgetView{constructor(){super(...arguments),this._in_selection_update\u003d!1,this._width\u003dnull}connect_signals(){super.connect_signals(),this.connect(this.model.change,(()\u003d\u003ethis.render())),this.connect(this.model.source.streaming,(()\u003d\u003ethis.updateGrid())),this.connect(this.model.source.patching,(()\u003d\u003ethis.updateGrid())),this.connect(this.model.source.change,(()\u003d\u003ethis.updateGrid())),this.connect(this.model.source.properties.data.change,(()\u003d\u003ethis.updateGrid())),this.connect(this.model.source.selected.change,(()\u003d\u003ethis.updateSelection())),this.connect(this.model.source.selected.properties.indices.change,(()\u003d\u003ethis.updateSelection()))}remove(){var e;null\u003d\u003d\u003d(e\u003dthis.grid)||void 0\u003d\u003d\u003de||e.destroy(),super.remove()}styles(){return[...super.styles(),C.default,w.default]}update_position(){super.update_position(),this.grid.resizeCanvas()}after_layout(){super.after_layout(),this.updateLayout(!0,!1)}box_sizing(){const e\u003dsuper.box_sizing();return\"fit_viewport\"\u003d\u003d\u003dthis.model.autosize_mode\u0026\u0026null!\u003dthis._width\u0026\u0026(e.width\u003dthis._width),e}updateLayout(e,t){const s\u003dthis.autosize;s\u003d\u003d\u003di.AutosizeModes.fit_columns||s\u003d\u003d\u003di.AutosizeModes.force_fit?(e||this.grid.resizeCanvas(),this.grid.autosizeColumns()):e\u0026\u0026t\u0026\u0026s\u003d\u003d\u003di.AutosizeModes.fit_viewport\u0026\u0026this.invalidate_layout()}updateGrid(){if(this.model.view.compute_indices(),this.data.init(this.model.source,this.model.view),this.model.sortable){const e\u003dthis.grid.getColumns(),t\u003dthis.grid.getSortColumns().map((t\u003d\u003e({sortCol:{field:e[this.grid.getColumnIndex(t.columnId)].field},sortAsc:t.sortAsc})));this.data.sort(t)}this.grid.invalidate(),this.updateLayout(!0,!0)}updateSelection(){if(this._in_selection_update)return;const{selected:e}\u003dthis.model.source,t\u003de.indices.map((e\u003d\u003ethis.data.index.indexOf(e))).sort();this._in_selection_update\u003d!0,this.grid.setSelectedRows(t),this._in_selection_update\u003d!1;const i\u003dthis.grid.getViewport(),s\u003dthis.model.get_scroll_index(i,t);null!\u003ds\u0026\u0026this.grid.scrollRowToTop(s)}newIndexColumn(){return{id:h.uniqueId(),name:this.model.index_header,field:p.DTINDEX_NAME,width:this.model.index_width,behavior:\"select\",cannotTriggerInsert:!0,resizable:!1,selectable:!1,sortable:!0,cssClass:x.cell_index,headerCssClass:x.header_index}}css_classes(){return super.css_classes().concat(x.data_table)}get autosize(){let e;return e\u003d!0\u003d\u003d\u003dthis.model.fit_columns?i.AutosizeModes.force_fit:!1\u003d\u003d\u003dthis.model.fit_columns?i.AutosizeModes.none:i.AutosizeModes[this.model.autosize_mode],e}render(){var e;const t\u003dthis.model.columns.map((e\u003d\u003eObject.assign(Object.assign({},e.toColumn()),{parent:this})));let s\u003dnull;if(\"checkbox\"\u003d\u003dthis.model.selectable\u0026\u0026(s\u003dnew r.CheckboxSelectColumn({cssClass:x.cell_select}),t.unshift(s.getColumnDefinition())),null!\u003dthis.model.index_position){const e\u003dthis.model.index_position,i\u003dthis.newIndexColumn();-1\u003d\u003de?t.push(i):e\u003c-1?t.splice(e+1,0,i):t.splice(e,0,i)}let{reorderable:o}\u003dthis.model;!o||\"undefined\"!\u003dtypeof $\u0026\u0026null!\u003d$.fn\u0026\u0026null!\u003d$.fn.sortable||(z||(m.logger.warn(\"jquery-ui is required to enable DataTable.reorderable\"),z\u003d!0),o\u003d!1);let n\u003d-1,h\u003d!1;const{frozen_rows:c,frozen_columns:_}\u003dthis.model,g\u003dnull\u003d\u003d_?-1:_-1;null!\u003dc\u0026\u0026(h\u003dc\u003c0,n\u003dMath.abs(c));const p\u003d{enableCellNavigation:!1!\u003d\u003dthis.model.selectable,enableColumnReorder:o,autosizeColsMode:this.autosize,multiColumnSort:this.model.sortable,editable:this.model.editable,autoEdit:this.model.auto_edit,autoHeight:!1,rowHeight:this.model.row_height,frozenColumn:g,frozenRow:n,frozenBottom:h},f\u003dnull!\u003dthis.grid;if(this.data\u003dnew v(this.model.source,this.model.view),this.grid\u003dnew a.Grid(this.el,this.data,t,p),this.autosize\u003d\u003di.AutosizeModes.fit_viewport){this.grid.autosizeColumns();let i\u003d0;for(const s of t)i+\u003dnull!\u003d\u003d(e\u003ds.width)\u0026\u0026void 0!\u003d\u003de?e:0;this._width\u003dMath.ceil(i)}if(this.grid.onSort.subscribe(((e,t)\u003d\u003e{if(!this.model.sortable)return;const i\u003dt.sortCols;null!\u003di\u0026\u0026(this.data.sort(i),this.grid.invalidate(),this.updateSelection(),this.grid.render(),this.model.header_row||this._hide_header(),this.model.update_sort_columns(i))})),!1!\u003d\u003dthis.model.selectable){this.grid.setSelectionModel(new l.RowSelectionModel({selectActiveRow:null\u003d\u003ds})),null!\u003ds\u0026\u0026this.grid.registerPlugin(s);const e\u003d{dataItemColumnValueExtractor(e,t){let i\u003de[t.field];return u.isString(i)\u0026\u0026(i\u003di.replace(/\\n/g,\"\\\\n\")),i},includeHeaderWhenCopying:!1};this.grid.registerPlugin(new d.CellExternalCopyManager(e)),this.grid.onSelectedRowsChanged.subscribe(((e,t)\u003d\u003e{this._in_selection_update||(this.model.source.selected.indices\u003dt.rows.map((e\u003d\u003ethis.data.index[e])))})),this.updateSelection(),this.model.header_row||this._hide_header()}f\u0026\u0026this.updateLayout(f,!1)}_hide_header(){for(const e of this.el.querySelectorAll(\".slick-header-columns\"))e.style.height\u003d\"0px\";this.grid.resizeCanvas()}}i.DataTableView\u003dA,A.__name__\u003d\"DataTableView\";class D extends f.TableWidget{constructor(e){super(e),this._sort_columns\u003d[]}get sort_columns(){return this._sort_columns}static init_DataTable(){this.prototype.default_view\u003dA,this.define((({Array:e,Boolean:t,Int:i,Ref:s,String:o,Enum:n,Or:l,Nullable:r})\u003d\u003e({autosize_mode:[n(\"fit_columns\",\"fit_viewport\",\"none\",\"force_fit\"),\"force_fit\"],auto_edit:[t,!1],columns:[e(s(b.TableColumn)),[]],fit_columns:[r(t),null],frozen_columns:[r(i),null],frozen_rows:[r(i),null],sortable:[t,!0],reorderable:[t,!0],editable:[t,!1],selectable:[l(t,n(\"checkbox\")),!0],index_position:[r(i),0],index_header:[o,\"#\"],index_width:[i,40],scroll_to_selection:[t,!0],header_row:[t,!0],row_height:[i,25]}))),this.override({width:600,height:400})}update_sort_columns(e){this._sort_columns\u003de.map((({sortCol:e,sortAsc:t})\u003d\u003e({field:e.field,sortAsc:t})))}get_scroll_index(e,t){return this.scroll_to_selection\u0026\u00260!\u003dt.length?c.some(t,(t\u003d\u003ee.top\u003c\u003dt\u0026\u0026t\u003c\u003de.bottom))?null:Math.max(0,Math.min(...t)-1):null}}i.DataTable\u003dD,D.__name__\u003d\"DataTable\",D.init_DataTable()},\n      473: function _(e,t,n,o,r){var l\u003de(474),i\u003de(476);t.exports\u003d{RowSelectionModel:function(e){var t,n,o,r\u003d[],c\u003dthis,u\u003dnew i.EventHandler,s\u003d{selectActiveRow:!0};function a(e){return function(){n||(n\u003d!0,e.apply(this,arguments),n\u003d!1)}}function f(e){for(var t\u003d[],n\u003d0;n\u003ce.length;n++)for(var o\u003de[n].fromRow;o\u003c\u003de[n].toRow;o++)t.push(o);return t}function h(e){for(var n\u003d[],o\u003dt.getColumns().length-1,r\u003d0;r\u003ce.length;r++)n.push(new i.Range(e[r],0,e[r],o));return n}function w(){return f(r)}function g(e){(r\u0026\u00260!\u003d\u003dr.length||e\u0026\u00260!\u003d\u003de.length)\u0026\u0026(r\u003de,c.onSelectedRangesChanged.notify(r))}function v(e,n){o.selectActiveRow\u0026\u0026null!\u003dn.row\u0026\u0026g([new i.Range(n.row,0,n.row,t.getColumns().length-1)])}function p(e){var n\u003dt.getActiveCell();if(t.getOptions().multiSelect\u0026\u0026n\u0026\u0026e.shiftKey\u0026\u0026!e.ctrlKey\u0026\u0026!e.altKey\u0026\u0026!e.metaKey\u0026\u0026(e.which\u003d\u003di.keyCode.UP||e.which\u003d\u003di.keyCode.DOWN)){var o\u003dw();o.sort((function(e,t){return e-t})),o.length||(o\u003d[n.row]);var r,l\u003do[0],c\u003do[o.length-1];if((r\u003de.which\u003d\u003di.keyCode.DOWN?n.row\u003cc||l\u003d\u003dc?++c:++l:n.row\u003cc?--c:--l)\u003e\u003d0\u0026\u0026r\u003ct.getDataLength())t.scrollRowIntoView(r),g(h(function(e,t){var n,o\u003d[];for(n\u003de;n\u003c\u003dt;n++)o.push(n);for(n\u003dt;n\u003ce;n++)o.push(n);return o}(l,c)));e.preventDefault(),e.stopPropagation()}}function y(e){var n\u003dt.getCellFromEvent(e);if(!n||!t.canCellBeActive(n.row,n.cell))return!1;if(!t.getOptions().multiSelect||!e.ctrlKey\u0026\u0026!e.shiftKey\u0026\u0026!e.metaKey)return!1;var o\u003df(r),i\u003dl.inArray(n.row,o);if(-1\u003d\u003d\u003di\u0026\u0026(e.ctrlKey||e.metaKey))o.push(n.row),t.setActiveCell(n.row,n.cell);else if(-1!\u003d\u003di\u0026\u0026(e.ctrlKey||e.metaKey))o\u003dl.grep(o,(function(e,t){return e!\u003d\u003dn.row})),t.setActiveCell(n.row,n.cell);else if(o.length\u0026\u0026e.shiftKey){var c\u003do.pop(),u\u003dMath.min(n.row,c),s\u003dMath.max(n.row,c);o\u003d[];for(var a\u003du;a\u003c\u003ds;a++)a!\u003d\u003dc\u0026\u0026o.push(a);o.push(c),t.setActiveCell(n.row,n.cell)}return g(h(o)),e.stopImmediatePropagation(),!0}l.extend(this,{getSelectedRows:w,setSelectedRows:function(e){g(h(e))},getSelectedRanges:function(){return r},setSelectedRanges:g,init:function(n){o\u003dl.extend(!0,{},s,e),t\u003dn,u.subscribe(t.onActiveCellChanged,a(v)),u.subscribe(t.onKeyDown,a(p)),u.subscribe(t.onClick,a(y))},destroy:function(){u.unsubscribeAll()},pluginName:\"RowSelectionModel\",onSelectedRangesChanged:new i.Event})}}},\n      474: function _(e,n,f,o,t){n.exports\u003d\"undefined\"!\u003dtypeof $?$:e(475)},\n      475: function _(e,t,n,r,i){\n      /*!\n           * jQuery JavaScript Library v3.5.1\n           * https://jquery.com/\n           *\n           * Includes Sizzle.js\n           * https://sizzlejs.com/\n           *\n           * Copyright JS Foundation and other contributors\n           * Released under the MIT license\n           * https://jquery.org/license\n           *\n           * Date: 2020-05-04T22:49Z\n           */\n      !function(e,n){\"use strict\";\"object\"\u003d\u003dtypeof t\u0026\u0026\"object\"\u003d\u003dtypeof t.exports?t.exports\u003de.document?n(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return n(e)}:n(e)}(\"undefined\"!\u003dtypeof window?window:this,(function(e,t){\"use strict\";var n\u003d[],r\u003dObject.getPrototypeOf,i\u003dn.slice,o\u003dn.flat?function(e){return n.flat.call(e)}:function(e){return n.concat.apply([],e)},a\u003dn.push,s\u003dn.indexOf,u\u003d{},l\u003du.toString,c\u003du.hasOwnProperty,f\u003dc.toString,p\u003df.call(Object),d\u003d{},h\u003dfunction(e){return\"function\"\u003d\u003dtypeof e\u0026\u0026\"number\"!\u003dtypeof e.nodeType},g\u003dfunction(e){return null!\u003de\u0026\u0026e\u003d\u003d\u003de.window},v\u003de.document,y\u003d{type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o\u003d(n\u003dn||v).createElement(\"script\");if(o.text\u003de,t)for(r in y)(i\u003dt[r]||t.getAttribute\u0026\u0026t.getAttribute(r))\u0026\u0026o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null\u003d\u003de?e+\"\":\"object\"\u003d\u003dtypeof e||\"function\"\u003d\u003dtypeof e?u[l.call(e)]||\"object\":typeof e}var b\u003d\"3.5.1\",w\u003dfunction(e,t){return new w.fn.init(e,t)};function T(e){var t\u003d!!e\u0026\u0026\"length\"in e\u0026\u0026e.length,n\u003dx(e);return!h(e)\u0026\u0026!g(e)\u0026\u0026(\"array\"\u003d\u003d\u003dn||0\u003d\u003d\u003dt||\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e0\u0026\u0026t-1 in e)}w.fn\u003dw.prototype\u003d{jquery:b,constructor:w,length:0,toArray:function(){return i.call(this)},get:function(e){return null\u003d\u003de?i.call(this):e\u003c0?this[e+this.length]:this[e]},pushStack:function(e){var t\u003dw.merge(this.constructor(),e);return t.prevObject\u003dthis,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(i.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(w.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(w.grep(this,(function(e,t){return t%2})))},eq:function(e){var t\u003dthis.length,n\u003d+e+(e\u003c0?t:0);return this.pushStack(n\u003e\u003d0\u0026\u0026n\u003ct?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:a,sort:n.sort,splice:n.splice},w.extend\u003dw.fn.extend\u003dfunction(){var e,t,n,r,i,o,a\u003darguments[0]||{},s\u003d1,u\u003darguments.length,l\u003d!1;for(\"boolean\"\u003d\u003dtypeof a\u0026\u0026(l\u003da,a\u003darguments[s]||{},s++),\"object\"\u003d\u003dtypeof a||h(a)||(a\u003d{}),s\u003d\u003d\u003du\u0026\u0026(a\u003dthis,s--);s\u003cu;s++)if(null!\u003d(e\u003darguments[s]))for(t in e)r\u003de[t],\"__proto__\"!\u003d\u003dt\u0026\u0026a!\u003d\u003dr\u0026\u0026(l\u0026\u0026r\u0026\u0026(w.isPlainObject(r)||(i\u003dArray.isArray(r)))?(n\u003da[t],o\u003di\u0026\u0026!Array.isArray(n)?[]:i||w.isPlainObject(n)?n:{},i\u003d!1,a[t]\u003dw.extend(l,o,r)):void 0!\u003d\u003dr\u0026\u0026(a[t]\u003dr));return a},w.extend({expando:\"jQuery\"+(b+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!\u003d\u003dl.call(e))\u0026\u0026(!(t\u003dr(e))||\"function\"\u003d\u003dtypeof(n\u003dc.call(t,\"constructor\")\u0026\u0026t.constructor)\u0026\u0026f.call(n)\u003d\u003d\u003dp)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t\u0026\u0026t.nonce},n)},each:function(e,t){var n,r\u003d0;if(T(e))for(n\u003de.length;r\u003cn\u0026\u0026!1!\u003d\u003dt.call(e[r],r,e[r]);r++);else for(r in e)if(!1\u003d\u003d\u003dt.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n\u003dt||[];return null!\u003de\u0026\u0026(T(Object(e))?w.merge(n,\"string\"\u003d\u003dtypeof e?[e]:e):a.call(n,e)),n},inArray:function(e,t,n){return null\u003d\u003dt?-1:s.call(t,e,n)},merge:function(e,t){for(var n\u003d+t.length,r\u003d0,i\u003de.length;r\u003cn;r++)e[i++]\u003dt[r];return e.length\u003di,e},grep:function(e,t,n){for(var r\u003d[],i\u003d0,o\u003de.length,a\u003d!n;i\u003co;i++)!t(e[i],i)!\u003d\u003da\u0026\u0026r.push(e[i]);return r},map:function(e,t,n){var r,i,a\u003d0,s\u003d[];if(T(e))for(r\u003de.length;a\u003cr;a++)null!\u003d(i\u003dt(e[a],a,n))\u0026\u0026s.push(i);else for(a in e)null!\u003d(i\u003dt(e[a],a,n))\u0026\u0026s.push(i);return o(s)},guid:1,support:d}),\"function\"\u003d\u003dtypeof Symbol\u0026\u0026(w.fn[Symbol.iterator]\u003dn[Symbol.iterator]),w.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),(function(e,t){u[\"[object \"+t+\"]\"]\u003dt.toLowerCase()}));var C\u003d\n      /*!\n               * Sizzle CSS Selector Engine v2.3.5\n               * https://sizzlejs.com/\n               *\n               * Copyright JS Foundation and other contributors\n               * Released under the MIT license\n               * https://js.foundation/\n               *\n               * Date: 2020-03-14\n               */\n      function(e){var t,n,r,i,o,a,s,u,l,c,f,p,d,h,g,v,y,m,x,b\u003d\"sizzle\"+1*new Date,w\u003de.document,T\u003d0,C\u003d0,E\u003due(),S\u003due(),k\u003due(),A\u003due(),N\u003dfunction(e,t){return e\u003d\u003d\u003dt\u0026\u0026(f\u003d!0),0},D\u003d{}.hasOwnProperty,j\u003d[],q\u003dj.pop,L\u003dj.push,H\u003dj.push,O\u003dj.slice,P\u003dfunction(e,t){for(var n\u003d0,r\u003de.length;n\u003cr;n++)if(e[n]\u003d\u003d\u003dt)return n;return-1},R\u003d\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M\u003d\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I\u003d\"(?:\\\\\\\\[\\\\da-fA-F]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|\\\\\\\\[^\\\\r\\\\n\\\\f]|[\\\\w-]|[^\\0-\\\\x7f])+\",W\u003d\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\"+I+\")(?:\"+M+\"*([*^$|!~]?\u003d)\"+M+\"*(?:\u0027((?:\\\\\\\\.|[^\\\\\\\\\u0027])*)\u0027|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",F\u003d\":(\"+I+\")(?:\\\\(((\u0027((?:\\\\\\\\.|[^\\\\\\\\\u0027])*)\u0027|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",B\u003dnew RegExp(M+\"+\",\"g\"),$\u003dnew RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]+$\",\"g\"),_\u003dnew RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*,[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),z\u003dnew RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*([\u003e+~]|[\\\\x20\\\\t\\\\r\\\\n\\\\f])[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\"),U\u003dnew RegExp(M+\"|\u003e\"),X\u003dnew RegExp(F),V\u003dnew RegExp(\"^\"+I+\"$\"),G\u003d{ID:new RegExp(\"^#(\"+I+\")\"),CLASS:new RegExp(\"^\\\\.(\"+I+\")\"),TAG:new RegExp(\"^(\"+I+\"|[*])\"),ATTR:new RegExp(\"^\"+W),PSEUDO:new RegExp(\"^\"+F),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*(even|odd|(([+-]|)(\\\\d*)n|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:([+-]|)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(\\\\d+)|))[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+R+\")$\",\"i\"),needsContext:new RegExp(\"^[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[\u003e+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\([\\\\x20\\\\t\\\\r\\\\n\\\\f]*((?:-\\\\d)?\\\\d*)[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\\\\)|)(?\u003d[^-]|$)\",\"i\")},Y\u003d/HTML$/i,Q\u003d/^(?:input|select|textarea|button)$/i,J\u003d/^h\\d$/i,K\u003d/^[^{]+\\{\\s*\\[native \\w/,Z\u003d/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee\u003d/[+~]/,te\u003dnew RegExp(\"\\\\\\\\[\\\\da-fA-F]{1,6}[\\\\x20\\\\t\\\\r\\\\n\\\\f]?|\\\\\\\\([^\\\\r\\\\n\\\\f])\",\"g\"),ne\u003dfunction(e,t){var n\u003d\"0x\"+e.slice(1)-65536;return t||(n\u003c0?String.fromCharCode(n+65536):String.fromCharCode(n\u003e\u003e10|55296,1023\u0026n|56320))},re\u003d/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie\u003dfunction(e,t){return t?\"\\0\"\u003d\u003d\u003de?\"�\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},oe\u003dfunction(){p()},ae\u003dbe((function(e){return!0\u003d\u003d\u003de.disabled\u0026\u0026\"fieldset\"\u003d\u003d\u003de.nodeName.toLowerCase()}),{dir:\"parentNode\",next:\"legend\"});try{H.apply(j\u003dO.call(w.childNodes),w.childNodes),j[w.childNodes.length].nodeType}catch(e){H\u003d{apply:j.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){for(var n\u003de.length,r\u003d0;e[n++]\u003dt[r++];);e.length\u003dn-1}}}function se(e,t,r,i){var o,s,l,c,f,h,y,m\u003dt\u0026\u0026t.ownerDocument,w\u003dt?t.nodeType:9;if(r\u003dr||[],\"string\"!\u003dtypeof e||!e||1!\u003d\u003dw\u0026\u00269!\u003d\u003dw\u0026\u002611!\u003d\u003dw)return r;if(!i\u0026\u0026(p(t),t\u003dt||d,g)){if(11!\u003d\u003dw\u0026\u0026(f\u003dZ.exec(e)))if(o\u003df[1]){if(9\u003d\u003d\u003dw){if(!(l\u003dt.getElementById(o)))return r;if(l.id\u003d\u003d\u003do)return r.push(l),r}else if(m\u0026\u0026(l\u003dm.getElementById(o))\u0026\u0026x(t,l)\u0026\u0026l.id\u003d\u003d\u003do)return r.push(l),r}else{if(f[2])return H.apply(r,t.getElementsByTagName(e)),r;if((o\u003df[3])\u0026\u0026n.getElementsByClassName\u0026\u0026t.getElementsByClassName)return H.apply(r,t.getElementsByClassName(o)),r}if(n.qsa\u0026\u0026!A[e+\" \"]\u0026\u0026(!v||!v.test(e))\u0026\u0026(1!\u003d\u003dw||\"object\"!\u003d\u003dt.nodeName.toLowerCase())){if(y\u003de,m\u003dt,1\u003d\u003d\u003dw\u0026\u0026(U.test(e)||z.test(e))){for((m\u003dee.test(e)\u0026\u0026ye(t.parentNode)||t)\u003d\u003d\u003dt\u0026\u0026n.scope||((c\u003dt.getAttribute(\"id\"))?c\u003dc.replace(re,ie):t.setAttribute(\"id\",c\u003db)),s\u003d(h\u003da(e)).length;s--;)h[s]\u003d(c?\"#\"+c:\":scope\")+\" \"+xe(h[s]);y\u003dh.join(\",\")}try{return H.apply(r,m.querySelectorAll(y)),r}catch(t){A(e,!0)}finally{c\u003d\u003d\u003db\u0026\u0026t.removeAttribute(\"id\")}}}return u(e.replace($,\"$1\"),t,r,i)}function ue(){var e\u003d[];return function t(n,i){return e.push(n+\" \")\u003er.cacheLength\u0026\u0026delete t[e.shift()],t[n+\" \"]\u003di}}function le(e){return e[b]\u003d!0,e}function ce(e){var t\u003dd.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode\u0026\u0026t.parentNode.removeChild(t),t\u003dnull}}function fe(e,t){for(var n\u003de.split(\"|\"),i\u003dn.length;i--;)r.attrHandle[n[i]]\u003dt}function pe(e,t){var n\u003dt\u0026\u0026e,r\u003dn\u0026\u00261\u003d\u003d\u003de.nodeType\u0026\u00261\u003d\u003d\u003dt.nodeType\u0026\u0026e.sourceIndex-t.sourceIndex;if(r)return r;if(n)for(;n\u003dn.nextSibling;)if(n\u003d\u003d\u003dt)return-1;return e?1:-1}function de(e){return function(t){return\"input\"\u003d\u003d\u003dt.nodeName.toLowerCase()\u0026\u0026t.type\u003d\u003d\u003de}}function he(e){return function(t){var n\u003dt.nodeName.toLowerCase();return(\"input\"\u003d\u003d\u003dn||\"button\"\u003d\u003d\u003dn)\u0026\u0026t.type\u003d\u003d\u003de}}function ge(e){return function(t){return\"form\"in t?t.parentNode\u0026\u0026!1\u003d\u003d\u003dt.disabled?\"label\"in t?\"label\"in t.parentNode?t.parentNode.disabled\u003d\u003d\u003de:t.disabled\u003d\u003d\u003de:t.isDisabled\u003d\u003d\u003de||t.isDisabled!\u003d\u003d!e\u0026\u0026ae(t)\u003d\u003d\u003de:t.disabled\u003d\u003d\u003de:\"label\"in t\u0026\u0026t.disabled\u003d\u003d\u003de}}function ve(e){return le((function(t){return t\u003d+t,le((function(n,r){for(var i,o\u003de([],n.length,t),a\u003do.length;a--;)n[i\u003do[a]]\u0026\u0026(n[i]\u003d!(r[i]\u003dn[i]))}))}))}function ye(e){return e\u0026\u0026void 0!\u003d\u003de.getElementsByTagName\u0026\u0026e}for(t in n\u003dse.support\u003d{},o\u003dse.isXML\u003dfunction(e){var t\u003de.namespaceURI,n\u003d(e.ownerDocument||e).documentElement;return!Y.test(t||n\u0026\u0026n.nodeName||\"HTML\")},p\u003dse.setDocument\u003dfunction(e){var t,i,a\u003de?e.ownerDocument||e:w;return a!\u003dd\u0026\u00269\u003d\u003d\u003da.nodeType\u0026\u0026a.documentElement?(h\u003d(d\u003da).documentElement,g\u003d!o(d),w!\u003dd\u0026\u0026(i\u003dd.defaultView)\u0026\u0026i.top!\u003d\u003di\u0026\u0026(i.addEventListener?i.addEventListener(\"unload\",oe,!1):i.attachEvent\u0026\u0026i.attachEvent(\"onunload\",oe)),n.scope\u003dce((function(e){return h.appendChild(e).appendChild(d.createElement(\"div\")),void 0!\u003d\u003de.querySelectorAll\u0026\u0026!e.querySelectorAll(\":scope fieldset div\").length})),n.attributes\u003dce((function(e){return e.className\u003d\"i\",!e.getAttribute(\"className\")})),n.getElementsByTagName\u003dce((function(e){return e.appendChild(d.createComment(\"\")),!e.getElementsByTagName(\"*\").length})),n.getElementsByClassName\u003dK.test(d.getElementsByClassName),n.getById\u003dce((function(e){return h.appendChild(e).id\u003db,!d.getElementsByName||!d.getElementsByName(b).length})),n.getById?(r.filter.ID\u003dfunction(e){var t\u003de.replace(te,ne);return function(e){return e.getAttribute(\"id\")\u003d\u003d\u003dt}},r.find.ID\u003dfunction(e,t){if(void 0!\u003d\u003dt.getElementById\u0026\u0026g){var n\u003dt.getElementById(e);return n?[n]:[]}}):(r.filter.ID\u003dfunction(e){var t\u003de.replace(te,ne);return function(e){var n\u003dvoid 0!\u003d\u003de.getAttributeNode\u0026\u0026e.getAttributeNode(\"id\");return n\u0026\u0026n.value\u003d\u003d\u003dt}},r.find.ID\u003dfunction(e,t){if(void 0!\u003d\u003dt.getElementById\u0026\u0026g){var n,r,i,o\u003dt.getElementById(e);if(o){if((n\u003do.getAttributeNode(\"id\"))\u0026\u0026n.value\u003d\u003d\u003de)return[o];for(i\u003dt.getElementsByName(e),r\u003d0;o\u003di[r++];)if((n\u003do.getAttributeNode(\"id\"))\u0026\u0026n.value\u003d\u003d\u003de)return[o]}return[]}}),r.find.TAG\u003dn.getElementsByTagName?function(e,t){return void 0!\u003d\u003dt.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r\u003d[],i\u003d0,o\u003dt.getElementsByTagName(e);if(\"*\"\u003d\u003d\u003de){for(;n\u003do[i++];)1\u003d\u003d\u003dn.nodeType\u0026\u0026r.push(n);return r}return o},r.find.CLASS\u003dn.getElementsByClassName\u0026\u0026function(e,t){if(void 0!\u003d\u003dt.getElementsByClassName\u0026\u0026g)return t.getElementsByClassName(e)},y\u003d[],v\u003d[],(n.qsa\u003dK.test(d.querySelectorAll))\u0026\u0026(ce((function(e){var t;h.appendChild(e).innerHTML\u003d\"\u003ca id\u003d\u0027\"+b+\"\u0027\u003e\u003c/a\u003e\u003cselect id\u003d\u0027\"+b+\"-\\r\\\\\u0027 msallowcapture\u003d\u0027\u0027\u003e\u003coption selected\u003d\u0027\u0027\u003e\u003c/option\u003e\u003c/select\u003e\",e.querySelectorAll(\"[msallowcapture^\u003d\u0027\u0027]\").length\u0026\u0026v.push(\"[*^$]\u003d[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:\u0027\u0027|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:value|\"+R+\")\"),e.querySelectorAll(\"[id~\u003d\"+b+\"-]\").length||v.push(\"~\u003d\"),(t\u003dd.createElement(\"input\")).setAttribute(\"name\",\"\"),e.appendChild(t),e.querySelectorAll(\"[name\u003d\u0027\u0027]\").length||v.push(\"\\\\[[\\\\x20\\\\t\\\\r\\\\n\\\\f]*name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*\u003d[\\\\x20\\\\t\\\\r\\\\n\\\\f]*(?:\u0027\u0027|\\\"\\\")\"),e.querySelectorAll(\":checked\").length||v.push(\":checked\"),e.querySelectorAll(\"a#\"+b+\"+*\").length||v.push(\".#.+[+~]\"),e.querySelectorAll(\"\\\\\\f\"),v.push(\"[\\\\r\\\\n\\\\f]\")})),ce((function(e){e.innerHTML\u003d\"\u003ca href\u003d\u0027\u0027 disabled\u003d\u0027disabled\u0027\u003e\u003c/a\u003e\u003cselect disabled\u003d\u0027disabled\u0027\u003e\u003coption/\u003e\u003c/select\u003e\";var t\u003dd.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name\u003dd]\").length\u0026\u0026v.push(\"name[\\\\x20\\\\t\\\\r\\\\n\\\\f]*[*^$|!~]?\u003d\"),2!\u003d\u003de.querySelectorAll(\":enabled\").length\u0026\u0026v.push(\":enabled\",\":disabled\"),h.appendChild(e).disabled\u003d!0,2!\u003d\u003de.querySelectorAll(\":disabled\").length\u0026\u0026v.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),v.push(\",.*:\")}))),(n.matchesSelector\u003dK.test(m\u003dh.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))\u0026\u0026ce((function(e){n.disconnectedMatch\u003dm.call(e,\"*\"),m.call(e,\"[s!\u003d\u0027\u0027]:x\"),y.push(\"!\u003d\",F)})),v\u003dv.length\u0026\u0026new RegExp(v.join(\"|\")),y\u003dy.length\u0026\u0026new RegExp(y.join(\"|\")),t\u003dK.test(h.compareDocumentPosition),x\u003dt||K.test(h.contains)?function(e,t){var n\u003d9\u003d\u003d\u003de.nodeType?e.documentElement:e,r\u003dt\u0026\u0026t.parentNode;return e\u003d\u003d\u003dr||!(!r||1!\u003d\u003dr.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition\u0026\u002616\u0026e.compareDocumentPosition(r)))}:function(e,t){if(t)for(;t\u003dt.parentNode;)if(t\u003d\u003d\u003de)return!0;return!1},N\u003dt?function(e,t){if(e\u003d\u003d\u003dt)return f\u003d!0,0;var r\u003d!e.compareDocumentPosition-!t.compareDocumentPosition;return r||(1\u0026(r\u003d(e.ownerDocument||e)\u003d\u003d(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached\u0026\u0026t.compareDocumentPosition(e)\u003d\u003d\u003dr?e\u003d\u003dd||e.ownerDocument\u003d\u003dw\u0026\u0026x(w,e)?-1:t\u003d\u003dd||t.ownerDocument\u003d\u003dw\u0026\u0026x(w,t)?1:c?P(c,e)-P(c,t):0:4\u0026r?-1:1)}:function(e,t){if(e\u003d\u003d\u003dt)return f\u003d!0,0;var n,r\u003d0,i\u003de.parentNode,o\u003dt.parentNode,a\u003d[e],s\u003d[t];if(!i||!o)return e\u003d\u003dd?-1:t\u003d\u003dd?1:i?-1:o?1:c?P(c,e)-P(c,t):0;if(i\u003d\u003d\u003do)return pe(e,t);for(n\u003de;n\u003dn.parentNode;)a.unshift(n);for(n\u003dt;n\u003dn.parentNode;)s.unshift(n);for(;a[r]\u003d\u003d\u003ds[r];)r++;return r?pe(a[r],s[r]):a[r]\u003d\u003dw?-1:s[r]\u003d\u003dw?1:0},d):d},se.matches\u003dfunction(e,t){return se(e,null,null,t)},se.matchesSelector\u003dfunction(e,t){if(p(e),n.matchesSelector\u0026\u0026g\u0026\u0026!A[t+\" \"]\u0026\u0026(!y||!y.test(t))\u0026\u0026(!v||!v.test(t)))try{var r\u003dm.call(e,t);if(r||n.disconnectedMatch||e.document\u0026\u002611!\u003d\u003de.document.nodeType)return r}catch(e){A(t,!0)}return se(t,d,null,[e]).length\u003e0},se.contains\u003dfunction(e,t){return(e.ownerDocument||e)!\u003dd\u0026\u0026p(e),x(e,t)},se.attr\u003dfunction(e,t){(e.ownerDocument||e)!\u003dd\u0026\u0026p(e);var i\u003dr.attrHandle[t.toLowerCase()],o\u003di\u0026\u0026D.call(r.attrHandle,t.toLowerCase())?i(e,t,!g):void 0;return void 0!\u003d\u003do?o:n.attributes||!g?e.getAttribute(t):(o\u003de.getAttributeNode(t))\u0026\u0026o.specified?o.value:null},se.escape\u003dfunction(e){return(e+\"\").replace(re,ie)},se.error\u003dfunction(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort\u003dfunction(e){var t,r\u003d[],i\u003d0,o\u003d0;if(f\u003d!n.detectDuplicates,c\u003d!n.sortStable\u0026\u0026e.slice(0),e.sort(N),f){for(;t\u003de[o++];)t\u003d\u003d\u003de[o]\u0026\u0026(i\u003dr.push(o));for(;i--;)e.splice(r[i],1)}return c\u003dnull,e},i\u003dse.getText\u003dfunction(e){var t,n\u003d\"\",r\u003d0,o\u003de.nodeType;if(o){if(1\u003d\u003d\u003do||9\u003d\u003d\u003do||11\u003d\u003d\u003do){if(\"string\"\u003d\u003dtypeof e.textContent)return e.textContent;for(e\u003de.firstChild;e;e\u003de.nextSibling)n+\u003di(e)}else if(3\u003d\u003d\u003do||4\u003d\u003d\u003do)return e.nodeValue}else for(;t\u003de[r++];)n+\u003di(t);return n},(r\u003dse.selectors\u003d{cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\"\u003e\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]\u003de[1].replace(te,ne),e[3]\u003d(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~\u003d\"\u003d\u003d\u003de[2]\u0026\u0026(e[3]\u003d\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]\u003de[1].toLowerCase(),\"nth\"\u003d\u003d\u003de[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]\u003d+(e[4]?e[5]+(e[6]||1):2*(\"even\"\u003d\u003d\u003de[3]||\"odd\"\u003d\u003d\u003de[3])),e[5]\u003d+(e[7]+e[8]||\"odd\"\u003d\u003d\u003de[3])):e[3]\u0026\u0026se.error(e[0]),e},PSEUDO:function(e){var t,n\u003d!e[6]\u0026\u0026e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]\u003de[4]||e[5]||\"\":n\u0026\u0026X.test(n)\u0026\u0026(t\u003da(n,!0))\u0026\u0026(t\u003dn.indexOf(\")\",n.length-t)-n.length)\u0026\u0026(e[0]\u003de[0].slice(0,t),e[2]\u003dn.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t\u003de.replace(te,ne).toLowerCase();return\"*\"\u003d\u003d\u003de?function(){return!0}:function(e){return e.nodeName\u0026\u0026e.nodeName.toLowerCase()\u003d\u003d\u003dt}},CLASS:function(e){var t\u003dE[e+\" \"];return t||(t\u003dnew RegExp(\"(^|[\\\\x20\\\\t\\\\r\\\\n\\\\f])\"+e+\"(\"+M+\"|$)\"))\u0026\u0026E(e,(function(e){return t.test(\"string\"\u003d\u003dtypeof e.className\u0026\u0026e.className||void 0!\u003d\u003de.getAttribute\u0026\u0026e.getAttribute(\"class\")||\"\")}))},ATTR:function(e,t,n){return function(r){var i\u003dse.attr(r,e);return null\u003d\u003di?\"!\u003d\"\u003d\u003d\u003dt:!t||(i+\u003d\"\",\"\u003d\"\u003d\u003d\u003dt?i\u003d\u003d\u003dn:\"!\u003d\"\u003d\u003d\u003dt?i!\u003d\u003dn:\"^\u003d\"\u003d\u003d\u003dt?n\u0026\u00260\u003d\u003d\u003di.indexOf(n):\"*\u003d\"\u003d\u003d\u003dt?n\u0026\u0026i.indexOf(n)\u003e-1:\"$\u003d\"\u003d\u003d\u003dt?n\u0026\u0026i.slice(-n.length)\u003d\u003d\u003dn:\"~\u003d\"\u003d\u003d\u003dt?(\" \"+i.replace(B,\" \")+\" \").indexOf(n)\u003e-1:\"|\u003d\"\u003d\u003d\u003dt\u0026\u0026(i\u003d\u003d\u003dn||i.slice(0,n.length+1)\u003d\u003d\u003dn+\"-\"))}},CHILD:function(e,t,n,r,i){var o\u003d\"nth\"!\u003d\u003de.slice(0,3),a\u003d\"last\"!\u003d\u003de.slice(-4),s\u003d\"of-type\"\u003d\u003d\u003dt;return 1\u003d\u003d\u003dr\u0026\u00260\u003d\u003d\u003di?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,d,h,g\u003do!\u003d\u003da?\"nextSibling\":\"previousSibling\",v\u003dt.parentNode,y\u003ds\u0026\u0026t.nodeName.toLowerCase(),m\u003d!u\u0026\u0026!s,x\u003d!1;if(v){if(o){for(;g;){for(p\u003dt;p\u003dp[g];)if(s?p.nodeName.toLowerCase()\u003d\u003d\u003dy:1\u003d\u003d\u003dp.nodeType)return!1;h\u003dg\u003d\"only\"\u003d\u003d\u003de\u0026\u0026!h\u0026\u0026\"nextSibling\"}return!0}if(h\u003d[a?v.firstChild:v.lastChild],a\u0026\u0026m){for(x\u003d(d\u003d(l\u003d(c\u003d(f\u003d(p\u003dv)[b]||(p[b]\u003d{}))[p.uniqueID]||(f[p.uniqueID]\u003d{}))[e]||[])[0]\u003d\u003d\u003dT\u0026\u0026l[1])\u0026\u0026l[2],p\u003dd\u0026\u0026v.childNodes[d];p\u003d++d\u0026\u0026p\u0026\u0026p[g]||(x\u003dd\u003d0)||h.pop();)if(1\u003d\u003d\u003dp.nodeType\u0026\u0026++x\u0026\u0026p\u003d\u003d\u003dt){c[e]\u003d[T,d,x];break}}else if(m\u0026\u0026(x\u003dd\u003d(l\u003d(c\u003d(f\u003d(p\u003dt)[b]||(p[b]\u003d{}))[p.uniqueID]||(f[p.uniqueID]\u003d{}))[e]||[])[0]\u003d\u003d\u003dT\u0026\u0026l[1]),!1\u003d\u003d\u003dx)for(;(p\u003d++d\u0026\u0026p\u0026\u0026p[g]||(x\u003dd\u003d0)||h.pop())\u0026\u0026((s?p.nodeName.toLowerCase()!\u003d\u003dy:1!\u003d\u003dp.nodeType)||!++x||(m\u0026\u0026((c\u003d(f\u003dp[b]||(p[b]\u003d{}))[p.uniqueID]||(f[p.uniqueID]\u003d{}))[e]\u003d[T,x]),p!\u003d\u003dt)););return(x-\u003di)\u003d\u003d\u003dr||x%r\u003d\u003d0\u0026\u0026x/r\u003e\u003d0}}},PSEUDO:function(e,t){var n,i\u003dr.pseudos[e]||r.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return i[b]?i(t):i.length\u003e1?(n\u003d[e,e,\"\",t],r.setFilters.hasOwnProperty(e.toLowerCase())?le((function(e,n){for(var r,o\u003di(e,t),a\u003do.length;a--;)e[r\u003dP(e,o[a])]\u003d!(n[r]\u003do[a])})):function(e){return i(e,0,n)}):i}},pseudos:{not:le((function(e){var t\u003d[],n\u003d[],r\u003ds(e.replace($,\"$1\"));return r[b]?le((function(e,t,n,i){for(var o,a\u003dr(e,null,i,[]),s\u003de.length;s--;)(o\u003da[s])\u0026\u0026(e[s]\u003d!(t[s]\u003do))})):function(e,i,o){return t[0]\u003de,r(t,null,o,n),t[0]\u003dnull,!n.pop()}})),has:le((function(e){return function(t){return se(e,t).length\u003e0}})),contains:le((function(e){return e\u003de.replace(te,ne),function(t){return(t.textContent||i(t)).indexOf(e)\u003e-1}})),lang:le((function(e){return V.test(e||\"\")||se.error(\"unsupported lang: \"+e),e\u003de.replace(te,ne).toLowerCase(),function(t){var n;do{if(n\u003dg?t.lang:t.getAttribute(\"xml:lang\")||t.getAttribute(\"lang\"))return(n\u003dn.toLowerCase())\u003d\u003d\u003de||0\u003d\u003d\u003dn.indexOf(e+\"-\")}while((t\u003dt.parentNode)\u0026\u00261\u003d\u003d\u003dt.nodeType);return!1}})),target:function(t){var n\u003de.location\u0026\u0026e.location.hash;return n\u0026\u0026n.slice(1)\u003d\u003d\u003dt.id},root:function(e){return e\u003d\u003d\u003dh},focus:function(e){return e\u003d\u003d\u003dd.activeElement\u0026\u0026(!d.hasFocus||d.hasFocus())\u0026\u0026!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t\u003de.nodeName.toLowerCase();return\"input\"\u003d\u003d\u003dt\u0026\u0026!!e.checked||\"option\"\u003d\u003d\u003dt\u0026\u0026!!e.selected},selected:function(e){return e.parentNode\u0026\u0026e.parentNode.selectedIndex,!0\u003d\u003d\u003de.selected},empty:function(e){for(e\u003de.firstChild;e;e\u003de.nextSibling)if(e.nodeType\u003c6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t\u003de.nodeName.toLowerCase();return\"input\"\u003d\u003d\u003dt\u0026\u0026\"button\"\u003d\u003d\u003de.type||\"button\"\u003d\u003d\u003dt},text:function(e){var t;return\"input\"\u003d\u003d\u003de.nodeName.toLowerCase()\u0026\u0026\"text\"\u003d\u003d\u003de.type\u0026\u0026(null\u003d\u003d(t\u003de.getAttribute(\"type\"))||\"text\"\u003d\u003d\u003dt.toLowerCase())},first:ve((function(){return[0]})),last:ve((function(e,t){return[t-1]})),eq:ve((function(e,t,n){return[n\u003c0?n+t:n]})),even:ve((function(e,t){for(var n\u003d0;n\u003ct;n+\u003d2)e.push(n);return e})),odd:ve((function(e,t){for(var n\u003d1;n\u003ct;n+\u003d2)e.push(n);return e})),lt:ve((function(e,t,n){for(var r\u003dn\u003c0?n+t:n\u003et?t:n;--r\u003e\u003d0;)e.push(r);return e})),gt:ve((function(e,t,n){for(var r\u003dn\u003c0?n+t:n;++r\u003ct;)e.push(r);return e}))}}).pseudos.nth\u003dr.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]\u003dde(t);for(t in{submit:!0,reset:!0})r.pseudos[t]\u003dhe(t);function me(){}function xe(e){for(var t\u003d0,n\u003de.length,r\u003d\"\";t\u003cn;t++)r+\u003de[t].value;return r}function be(e,t,n){var r\u003dt.dir,i\u003dt.next,o\u003di||r,a\u003dn\u0026\u0026\"parentNode\"\u003d\u003d\u003do,s\u003dC++;return t.first?function(t,n,i){for(;t\u003dt[r];)if(1\u003d\u003d\u003dt.nodeType||a)return e(t,n,i);return!1}:function(t,n,u){var l,c,f,p\u003d[T,s];if(u){for(;t\u003dt[r];)if((1\u003d\u003d\u003dt.nodeType||a)\u0026\u0026e(t,n,u))return!0}else for(;t\u003dt[r];)if(1\u003d\u003d\u003dt.nodeType||a)if(c\u003d(f\u003dt[b]||(t[b]\u003d{}))[t.uniqueID]||(f[t.uniqueID]\u003d{}),i\u0026\u0026i\u003d\u003d\u003dt.nodeName.toLowerCase())t\u003dt[r]||t;else{if((l\u003dc[o])\u0026\u0026l[0]\u003d\u003d\u003dT\u0026\u0026l[1]\u003d\u003d\u003ds)return p[2]\u003dl[2];if(c[o]\u003dp,p[2]\u003de(t,n,u))return!0}return!1}}function we(e){return e.length\u003e1?function(t,n,r){for(var i\u003de.length;i--;)if(!e[i](t,n,r))return!1;return!0}:e[0]}function Te(e,t,n,r,i){for(var o,a\u003d[],s\u003d0,u\u003de.length,l\u003dnull!\u003dt;s\u003cu;s++)(o\u003de[s])\u0026\u0026(n\u0026\u0026!n(o,r,i)||(a.push(o),l\u0026\u0026t.push(s)));return a}function Ce(e,t,n,r,i,o){return r\u0026\u0026!r[b]\u0026\u0026(r\u003dCe(r)),i\u0026\u0026!i[b]\u0026\u0026(i\u003dCe(i,o)),le((function(o,a,s,u){var l,c,f,p\u003d[],d\u003d[],h\u003da.length,g\u003do||function(e,t,n){for(var r\u003d0,i\u003dt.length;r\u003ci;r++)se(e,t[r],n);return n}(t||\"*\",s.nodeType?[s]:s,[]),v\u003d!e||!o\u0026\u0026t?g:Te(g,p,e,s,u),y\u003dn?i||(o?e:h||r)?[]:a:v;if(n\u0026\u0026n(v,y,s,u),r)for(l\u003dTe(y,d),r(l,[],s,u),c\u003dl.length;c--;)(f\u003dl[c])\u0026\u0026(y[d[c]]\u003d!(v[d[c]]\u003df));if(o){if(i||e){if(i){for(l\u003d[],c\u003dy.length;c--;)(f\u003dy[c])\u0026\u0026l.push(v[c]\u003df);i(null,y\u003d[],l,u)}for(c\u003dy.length;c--;)(f\u003dy[c])\u0026\u0026(l\u003di?P(o,f):p[c])\u003e-1\u0026\u0026(o[l]\u003d!(a[l]\u003df))}}else y\u003dTe(y\u003d\u003d\u003da?y.splice(h,y.length):y),i?i(null,a,y,u):H.apply(a,y)}))}function Ee(e){for(var t,n,i,o\u003de.length,a\u003dr.relative[e[0].type],s\u003da||r.relative[\" \"],u\u003da?1:0,c\u003dbe((function(e){return e\u003d\u003d\u003dt}),s,!0),f\u003dbe((function(e){return P(t,e)\u003e-1}),s,!0),p\u003d[function(e,n,r){var i\u003d!a\u0026\u0026(r||n!\u003d\u003dl)||((t\u003dn).nodeType?c(e,n,r):f(e,n,r));return t\u003dnull,i}];u\u003co;u++)if(n\u003dr.relative[e[u].type])p\u003d[be(we(p),n)];else{if((n\u003dr.filter[e[u].type].apply(null,e[u].matches))[b]){for(i\u003d++u;i\u003co\u0026\u0026!r.relative[e[i].type];i++);return Ce(u\u003e1\u0026\u0026we(p),u\u003e1\u0026\u0026xe(e.slice(0,u-1).concat({value:\" \"\u003d\u003d\u003de[u-2].type?\"*\":\"\"})).replace($,\"$1\"),n,u\u003ci\u0026\u0026Ee(e.slice(u,i)),i\u003co\u0026\u0026Ee(e\u003de.slice(i)),i\u003co\u0026\u0026xe(e))}p.push(n)}return we(p)}return me.prototype\u003dr.filters\u003dr.pseudos,r.setFilters\u003dnew me,a\u003dse.tokenize\u003dfunction(e,t){var n,i,o,a,s,u,l,c\u003dS[e+\" \"];if(c)return t?0:c.slice(0);for(s\u003de,u\u003d[],l\u003dr.preFilter;s;){for(a in n\u0026\u0026!(i\u003d_.exec(s))||(i\u0026\u0026(s\u003ds.slice(i[0].length)||s),u.push(o\u003d[])),n\u003d!1,(i\u003dz.exec(s))\u0026\u0026(n\u003di.shift(),o.push({value:n,type:i[0].replace($,\" \")}),s\u003ds.slice(n.length)),r.filter)!(i\u003dG[a].exec(s))||l[a]\u0026\u0026!(i\u003dl[a](i))||(n\u003di.shift(),o.push({value:n,type:a,matches:i}),s\u003ds.slice(n.length));if(!n)break}return t?s.length:s?se.error(e):S(e,u).slice(0)},s\u003dse.compile\u003dfunction(e,t){var n,i\u003d[],o\u003d[],s\u003dk[e+\" \"];if(!s){for(t||(t\u003da(e)),n\u003dt.length;n--;)(s\u003dEe(t[n]))[b]?i.push(s):o.push(s);(s\u003dk(e,function(e,t){var n\u003dt.length\u003e0,i\u003de.length\u003e0,o\u003dfunction(o,a,s,u,c){var f,h,v,y\u003d0,m\u003d\"0\",x\u003do\u0026\u0026[],b\u003d[],w\u003dl,C\u003do||i\u0026\u0026r.find.TAG(\"*\",c),E\u003dT+\u003dnull\u003d\u003dw?1:Math.random()||.1,S\u003dC.length;for(c\u0026\u0026(l\u003da\u003d\u003dd||a||c);m!\u003d\u003dS\u0026\u0026null!\u003d(f\u003dC[m]);m++){if(i\u0026\u0026f){for(h\u003d0,a||f.ownerDocument\u003d\u003dd||(p(f),s\u003d!g);v\u003de[h++];)if(v(f,a||d,s)){u.push(f);break}c\u0026\u0026(T\u003dE)}n\u0026\u0026((f\u003d!v\u0026\u0026f)\u0026\u0026y--,o\u0026\u0026x.push(f))}if(y+\u003dm,n\u0026\u0026m!\u003d\u003dy){for(h\u003d0;v\u003dt[h++];)v(x,b,a,s);if(o){if(y\u003e0)for(;m--;)x[m]||b[m]||(b[m]\u003dq.call(u));b\u003dTe(b)}H.apply(u,b),c\u0026\u0026!o\u0026\u0026b.length\u003e0\u0026\u0026y+t.length\u003e1\u0026\u0026se.uniqueSort(u)}return c\u0026\u0026(T\u003dE,l\u003dw),x};return n?le(o):o}(o,i))).selector\u003de}return s},u\u003dse.select\u003dfunction(e,t,n,i){var o,u,l,c,f,p\u003d\"function\"\u003d\u003dtypeof e\u0026\u0026e,d\u003d!i\u0026\u0026a(e\u003dp.selector||e);if(n\u003dn||[],1\u003d\u003d\u003dd.length){if((u\u003dd[0]\u003dd[0].slice(0)).length\u003e2\u0026\u0026\"ID\"\u003d\u003d\u003d(l\u003du[0]).type\u0026\u00269\u003d\u003d\u003dt.nodeType\u0026\u0026g\u0026\u0026r.relative[u[1].type]){if(!(t\u003d(r.find.ID(l.matches[0].replace(te,ne),t)||[])[0]))return n;p\u0026\u0026(t\u003dt.parentNode),e\u003de.slice(u.shift().value.length)}for(o\u003dG.needsContext.test(e)?0:u.length;o--\u0026\u0026(l\u003du[o],!r.relative[c\u003dl.type]);)if((f\u003dr.find[c])\u0026\u0026(i\u003df(l.matches[0].replace(te,ne),ee.test(u[0].type)\u0026\u0026ye(t.parentNode)||t))){if(u.splice(o,1),!(e\u003di.length\u0026\u0026xe(u)))return H.apply(n,i),n;break}}return(p||s(e,d))(i,t,!g,n,!t||ee.test(e)\u0026\u0026ye(t.parentNode)||t),n},n.sortStable\u003db.split(\"\").sort(N).join(\"\")\u003d\u003d\u003db,n.detectDuplicates\u003d!!f,p(),n.sortDetached\u003dce((function(e){return 1\u0026e.compareDocumentPosition(d.createElement(\"fieldset\"))})),ce((function(e){return e.innerHTML\u003d\"\u003ca href\u003d\u0027#\u0027\u003e\u003c/a\u003e\",\"#\"\u003d\u003d\u003de.firstChild.getAttribute(\"href\")}))||fe(\"type|href|height|width\",(function(e,t,n){if(!n)return e.getAttribute(t,\"type\"\u003d\u003d\u003dt.toLowerCase()?1:2)})),n.attributes\u0026\u0026ce((function(e){return e.innerHTML\u003d\"\u003cinput/\u003e\",e.firstChild.setAttribute(\"value\",\"\"),\"\"\u003d\u003d\u003de.firstChild.getAttribute(\"value\")}))||fe(\"value\",(function(e,t,n){if(!n\u0026\u0026\"input\"\u003d\u003d\u003de.nodeName.toLowerCase())return e.defaultValue})),ce((function(e){return null\u003d\u003de.getAttribute(\"disabled\")}))||fe(R,(function(e,t,n){var r;if(!n)return!0\u003d\u003d\u003de[t]?t.toLowerCase():(r\u003de.getAttributeNode(t))\u0026\u0026r.specified?r.value:null})),se}(e);w.find\u003dC,w.expr\u003dC.selectors,w.expr[\":\"]\u003dw.expr.pseudos,w.uniqueSort\u003dw.unique\u003dC.uniqueSort,w.text\u003dC.getText,w.isXMLDoc\u003dC.isXML,w.contains\u003dC.contains,w.escapeSelector\u003dC.escape;var E\u003dfunction(e,t,n){for(var r\u003d[],i\u003dvoid 0!\u003d\u003dn;(e\u003de[t])\u0026\u00269!\u003d\u003de.nodeType;)if(1\u003d\u003d\u003de.nodeType){if(i\u0026\u0026w(e).is(n))break;r.push(e)}return r},S\u003dfunction(e,t){for(var n\u003d[];e;e\u003de.nextSibling)1\u003d\u003d\u003de.nodeType\u0026\u0026e!\u003d\u003dt\u0026\u0026n.push(e);return n},k\u003dw.expr.match.needsContext;function A(e,t){return e.nodeName\u0026\u0026e.nodeName.toLowerCase()\u003d\u003d\u003dt.toLowerCase()}var N\u003d/^\u003c([a-z][^\\/\\0\u003e:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?\u003e(?:\u003c\\/\\1\u003e|)$/i;function D(e,t,n){return h(t)?w.grep(e,(function(e,r){return!!t.call(e,r,e)!\u003d\u003dn})):t.nodeType?w.grep(e,(function(e){return e\u003d\u003d\u003dt!\u003d\u003dn})):\"string\"!\u003dtypeof t?w.grep(e,(function(e){return s.call(t,e)\u003e-1!\u003d\u003dn})):w.filter(t,e,n)}w.filter\u003dfunction(e,t,n){var r\u003dt[0];return n\u0026\u0026(e\u003d\":not(\"+e+\")\"),1\u003d\u003d\u003dt.length\u0026\u00261\u003d\u003d\u003dr.nodeType?w.find.matchesSelector(r,e)?[r]:[]:w.find.matches(e,w.grep(t,(function(e){return 1\u003d\u003d\u003de.nodeType})))},w.fn.extend({find:function(e){var t,n,r\u003dthis.length,i\u003dthis;if(\"string\"!\u003dtypeof e)return this.pushStack(w(e).filter((function(){for(t\u003d0;t\u003cr;t++)if(w.contains(i[t],this))return!0})));for(n\u003dthis.pushStack([]),t\u003d0;t\u003cr;t++)w.find(e,i[t],n);return r\u003e1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,\"string\"\u003d\u003dtypeof e\u0026\u0026k.test(e)?w(e):e||[],!1).length}});var j,q\u003d/^(?:\\s*(\u003c[\\w\\W]+\u003e)[^\u003e]*|#([\\w-]+))$/;(w.fn.init\u003dfunction(e,t,n){var r,i;if(!e)return this;if(n\u003dn||j,\"string\"\u003d\u003dtypeof e){if(!(r\u003d\"\u003c\"\u003d\u003d\u003de[0]\u0026\u0026\"\u003e\"\u003d\u003d\u003de[e.length-1]\u0026\u0026e.length\u003e\u003d3?[null,e,null]:q.exec(e))||!r[1]\u0026\u0026t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t\u003dt instanceof w?t[0]:t,w.merge(this,w.parseHTML(r[1],t\u0026\u0026t.nodeType?t.ownerDocument||t:v,!0)),N.test(r[1])\u0026\u0026w.isPlainObject(t))for(r in t)h(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i\u003dv.getElementById(r[2]))\u0026\u0026(this[0]\u003di,this.length\u003d1),this}return e.nodeType?(this[0]\u003de,this.length\u003d1,this):h(e)?void 0!\u003d\u003dn.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype\u003dw.fn,j\u003dw(v);var L\u003d/^(?:parents|prev(?:Until|All))/,H\u003d{children:!0,contents:!0,next:!0,prev:!0};function O(e,t){for(;(e\u003de[t])\u0026\u00261!\u003d\u003de.nodeType;);return e}w.fn.extend({has:function(e){var t\u003dw(e,this),n\u003dt.length;return this.filter((function(){for(var e\u003d0;e\u003cn;e++)if(w.contains(this,t[e]))return!0}))},closest:function(e,t){var n,r\u003d0,i\u003dthis.length,o\u003d[],a\u003d\"string\"!\u003dtypeof e\u0026\u0026w(e);if(!k.test(e))for(;r\u003ci;r++)for(n\u003dthis[r];n\u0026\u0026n!\u003d\u003dt;n\u003dn.parentNode)if(n.nodeType\u003c11\u0026\u0026(a?a.index(n)\u003e-1:1\u003d\u003d\u003dn.nodeType\u0026\u0026w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length\u003e1?w.uniqueSort(o):o)},index:function(e){return e?\"string\"\u003d\u003dtypeof e?s.call(w(e),this[0]):s.call(this,e.jquery?e[0]:e):this[0]\u0026\u0026this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null\u003d\u003de?this.prevObject:this.prevObject.filter(e))}}),w.each({parent:function(e){var t\u003de.parentNode;return t\u0026\u002611!\u003d\u003dt.nodeType?t:null},parents:function(e){return E(e,\"parentNode\")},parentsUntil:function(e,t,n){return E(e,\"parentNode\",n)},next:function(e){return O(e,\"nextSibling\")},prev:function(e){return O(e,\"previousSibling\")},nextAll:function(e){return E(e,\"nextSibling\")},prevAll:function(e){return E(e,\"previousSibling\")},nextUntil:function(e,t,n){return E(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return E(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return null!\u003de.contentDocument\u0026\u0026r(e.contentDocument)?e.contentDocument:(A(e,\"template\")\u0026\u0026(e\u003de.content||e),w.merge([],e.childNodes))}},(function(e,t){w.fn[e]\u003dfunction(n,r){var i\u003dw.map(this,t,n);return\"Until\"!\u003d\u003de.slice(-5)\u0026\u0026(r\u003dn),r\u0026\u0026\"string\"\u003d\u003dtypeof r\u0026\u0026(i\u003dw.filter(r,i)),this.length\u003e1\u0026\u0026(H[e]||w.uniqueSort(i),L.test(e)\u0026\u0026i.reverse()),this.pushStack(i)}}));var P\u003d/[^\\x20\\t\\r\\n\\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e\u0026\u0026h(i\u003de.promise)?i.call(e).done(t).fail(n):e\u0026\u0026h(i\u003de.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}w.Callbacks\u003dfunction(e){e\u003d\"string\"\u003d\u003dtypeof e?function(e){var t\u003d{};return w.each(e.match(P)||[],(function(e,n){t[n]\u003d!0})),t}(e):w.extend({},e);var t,n,r,i,o\u003d[],a\u003d[],s\u003d-1,u\u003dfunction(){for(i\u003di||e.once,r\u003dt\u003d!0;a.length;s\u003d-1)for(n\u003da.shift();++s\u003co.length;)!1\u003d\u003d\u003do[s].apply(n[0],n[1])\u0026\u0026e.stopOnFalse\u0026\u0026(s\u003do.length,n\u003d!1);e.memory||(n\u003d!1),t\u003d!1,i\u0026\u0026(o\u003dn?[]:\"\")},l\u003d{add:function(){return o\u0026\u0026(n\u0026\u0026!t\u0026\u0026(s\u003do.length-1,a.push(n)),function t(n){w.each(n,(function(n,r){h(r)?e.unique\u0026\u0026l.has(r)||o.push(r):r\u0026\u0026r.length\u0026\u0026\"string\"!\u003d\u003dx(r)\u0026\u0026t(r)}))}(arguments),n\u0026\u0026!t\u0026\u0026u()),this},remove:function(){return w.each(arguments,(function(e,t){for(var n;(n\u003dw.inArray(t,o,n))\u003e-1;)o.splice(n,1),n\u003c\u003ds\u0026\u0026s--})),this},has:function(e){return e?w.inArray(e,o)\u003e-1:o.length\u003e0},empty:function(){return o\u0026\u0026(o\u003d[]),this},disable:function(){return i\u003da\u003d[],o\u003dn\u003d\"\",this},disabled:function(){return!o},lock:function(){return i\u003da\u003d[],n||t||(o\u003dn\u003d\"\"),this},locked:function(){return!!i},fireWith:function(e,n){return i||(n\u003d[e,(n\u003dn||[]).slice?n.slice():n],a.push(n),t||u()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},w.extend({Deferred:function(t){var n\u003d[[\"notify\",\"progress\",w.Callbacks(\"memory\"),w.Callbacks(\"memory\"),2],[\"resolve\",\"done\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",w.Callbacks(\"once memory\"),w.Callbacks(\"once memory\"),1,\"rejected\"]],r\u003d\"pending\",i\u003d{state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return i.then(null,e)},pipe:function(){var e\u003darguments;return w.Deferred((function(t){w.each(n,(function(n,r){var i\u003dh(e[r[4]])\u0026\u0026e[r[4]];o[r[1]]((function(){var e\u003di\u0026\u0026i.apply(this,arguments);e\u0026\u0026h(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[r[0]+\"With\"](this,i?[e]:arguments)}))})),e\u003dnull})).promise()},then:function(t,r,i){var o\u003d0;function a(t,n,r,i){return function(){var s\u003dthis,u\u003darguments,l\u003dfunction(){var e,l;if(!(t\u003co)){if((e\u003dr.apply(s,u))\u003d\u003d\u003dn.promise())throw new TypeError(\"Thenable self-resolution\");l\u003de\u0026\u0026(\"object\"\u003d\u003dtypeof e||\"function\"\u003d\u003dtypeof e)\u0026\u0026e.then,h(l)?i?l.call(e,a(o,n,R,i),a(o,n,M,i)):(o++,l.call(e,a(o,n,R,i),a(o,n,M,i),a(o,n,R,n.notifyWith))):(r!\u003d\u003dR\u0026\u0026(s\u003dvoid 0,u\u003d[e]),(i||n.resolveWith)(s,u))}},c\u003di?l:function(){try{l()}catch(e){w.Deferred.exceptionHook\u0026\u0026w.Deferred.exceptionHook(e,c.stackTrace),t+1\u003e\u003do\u0026\u0026(r!\u003d\u003dM\u0026\u0026(s\u003dvoid 0,u\u003d[e]),n.rejectWith(s,u))}};t?c():(w.Deferred.getStackHook\u0026\u0026(c.stackTrace\u003dw.Deferred.getStackHook()),e.setTimeout(c))}}return w.Deferred((function(e){n[0][3].add(a(0,e,h(i)?i:R,e.notifyWith)),n[1][3].add(a(0,e,h(t)?t:R)),n[2][3].add(a(0,e,h(r)?r:M))})).promise()},promise:function(e){return null!\u003de?w.extend(e,i):i}},o\u003d{};return w.each(n,(function(e,t){var a\u003dt[2],s\u003dt[5];i[t[1]]\u003da.add,s\u0026\u0026a.add((function(){r\u003ds}),n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]\u003dfunction(){return o[t[0]+\"With\"](this\u003d\u003d\u003do?void 0:this,arguments),this},o[t[0]+\"With\"]\u003da.fireWith})),i.promise(o),t\u0026\u0026t.call(o,o),o},when:function(e){var t\u003darguments.length,n\u003dt,r\u003dArray(n),o\u003di.call(arguments),a\u003dw.Deferred(),s\u003dfunction(e){return function(n){r[e]\u003dthis,o[e]\u003darguments.length\u003e1?i.call(arguments):n,--t||a.resolveWith(r,o)}};if(t\u003c\u003d1\u0026\u0026(I(e,a.done(s(n)).resolve,a.reject,!t),\"pending\"\u003d\u003d\u003da.state()||h(o[n]\u0026\u0026o[n].then)))return a.then();for(;n--;)I(o[n],s(n),a.reject);return a.promise()}});var W\u003d/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook\u003dfunction(t,n){e.console\u0026\u0026e.console.warn\u0026\u0026t\u0026\u0026W.test(t.name)\u0026\u0026e.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,n)},w.readyException\u003dfunction(t){e.setTimeout((function(){throw t}))};var F\u003dw.Deferred();function B(){v.removeEventListener(\"DOMContentLoaded\",B),e.removeEventListener(\"load\",B),w.ready()}w.fn.ready\u003dfunction(e){return F.then(e).catch((function(e){w.readyException(e)})),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0\u003d\u003d\u003de?--w.readyWait:w.isReady)||(w.isReady\u003d!0,!0!\u003d\u003de\u0026\u0026--w.readyWait\u003e0||F.resolveWith(v,[w]))}}),w.ready.then\u003dF.then,\"complete\"\u003d\u003d\u003dv.readyState||\"loading\"!\u003d\u003dv.readyState\u0026\u0026!v.documentElement.doScroll?e.setTimeout(w.ready):(v.addEventListener(\"DOMContentLoaded\",B),e.addEventListener(\"load\",B));var $\u003dfunction(e,t,n,r,i,o,a){var s\u003d0,u\u003de.length,l\u003dnull\u003d\u003dn;if(\"object\"\u003d\u003d\u003dx(n))for(s in i\u003d!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!\u003d\u003dr\u0026\u0026(i\u003d!0,h(r)||(a\u003d!0),l\u0026\u0026(a?(t.call(e,r),t\u003dnull):(l\u003dt,t\u003dfunction(e,t,n){return l.call(w(e),n)})),t))for(;s\u003cu;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_\u003d/^-ms-/,z\u003d/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,\"ms-\").replace(z,U)}var V\u003dfunction(e){return 1\u003d\u003d\u003de.nodeType||9\u003d\u003d\u003de.nodeType||!+e.nodeType};function G(){this.expando\u003dw.expando+G.uid++}G.uid\u003d1,G.prototype\u003d{cache:function(e){var t\u003de[this.expando];return t||(t\u003d{},V(e)\u0026\u0026(e.nodeType?e[this.expando]\u003dt:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i\u003dthis.cache(e);if(\"string\"\u003d\u003dtypeof t)i[X(t)]\u003dn;else for(r in t)i[X(r)]\u003dt[r];return i},get:function(e,t){return void 0\u003d\u003d\u003dt?this.cache(e):e[this.expando]\u0026\u0026e[this.expando][X(t)]},access:function(e,t,n){return void 0\u003d\u003d\u003dt||t\u0026\u0026\"string\"\u003d\u003dtypeof t\u0026\u0026void 0\u003d\u003d\u003dn?this.get(e,t):(this.set(e,t,n),void 0!\u003d\u003dn?n:t)},remove:function(e,t){var n,r\u003de[this.expando];if(void 0!\u003d\u003dr){if(void 0!\u003d\u003dt){n\u003d(t\u003dArray.isArray(t)?t.map(X):(t\u003dX(t))in r?[t]:t.match(P)||[]).length;for(;n--;)delete r[t[n]]}(void 0\u003d\u003d\u003dt||w.isEmptyObject(r))\u0026\u0026(e.nodeType?e[this.expando]\u003dvoid 0:delete e[this.expando])}},hasData:function(e){var t\u003de[this.expando];return void 0!\u003d\u003dt\u0026\u0026!w.isEmptyObject(t)}};var Y\u003dnew G,Q\u003dnew G,J\u003d/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,K\u003d/[A-Z]/g;function Z(e,t,n){var r;if(void 0\u003d\u003d\u003dn\u0026\u00261\u003d\u003d\u003de.nodeType)if(r\u003d\"data-\"+t.replace(K,\"-$\u0026\").toLowerCase(),\"string\"\u003d\u003dtypeof(n\u003de.getAttribute(r))){try{n\u003dfunction(e){return\"true\"\u003d\u003d\u003de||\"false\"!\u003d\u003de\u0026\u0026(\"null\"\u003d\u003d\u003de?null:e\u003d\u003d\u003d+e+\"\"?+e:J.test(e)?JSON.parse(e):e)}(n)}catch(e){}Q.set(e,t,n)}else n\u003dvoid 0;return n}w.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),w.fn.extend({data:function(e,t){var n,r,i,o\u003dthis[0],a\u003do\u0026\u0026o.attributes;if(void 0\u003d\u003d\u003de){if(this.length\u0026\u0026(i\u003dQ.get(o),1\u003d\u003d\u003do.nodeType\u0026\u0026!Y.get(o,\"hasDataAttrs\"))){for(n\u003da.length;n--;)a[n]\u0026\u00260\u003d\u003d\u003d(r\u003da[n].name).indexOf(\"data-\")\u0026\u0026(r\u003dX(r.slice(5)),Z(o,r,i[r]));Y.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"\u003d\u003dtypeof e?this.each((function(){Q.set(this,e)})):$(this,(function(t){var n;if(o\u0026\u0026void 0\u003d\u003d\u003dt)return void 0!\u003d\u003d(n\u003dQ.get(o,e))||void 0!\u003d\u003d(n\u003dZ(o,e))?n:void 0;this.each((function(){Q.set(this,e,t)}))}),null,t,arguments.length\u003e1,null,!0)},removeData:function(e){return this.each((function(){Q.remove(this,e)}))}}),w.extend({queue:function(e,t,n){var r;if(e)return t\u003d(t||\"fx\")+\"queue\",r\u003dY.get(e,t),n\u0026\u0026(!r||Array.isArray(n)?r\u003dY.access(e,t,w.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t\u003dt||\"fx\";var n\u003dw.queue(e,t),r\u003dn.length,i\u003dn.shift(),o\u003dw._queueHooks(e,t);\"inprogress\"\u003d\u003d\u003di\u0026\u0026(i\u003dn.shift(),r--),i\u0026\u0026(\"fx\"\u003d\u003d\u003dt\u0026\u0026n.unshift(\"inprogress\"),delete o.stop,i.call(e,(function(){w.dequeue(e,t)}),o)),!r\u0026\u0026o\u0026\u0026o.empty.fire()},_queueHooks:function(e,t){var n\u003dt+\"queueHooks\";return Y.get(e,n)||Y.access(e,n,{empty:w.Callbacks(\"once memory\").add((function(){Y.remove(e,[t+\"queue\",n])}))})}}),w.fn.extend({queue:function(e,t){var n\u003d2;return\"string\"!\u003dtypeof e\u0026\u0026(t\u003de,e\u003d\"fx\",n--),arguments.length\u003cn?w.queue(this[0],e):void 0\u003d\u003d\u003dt?this:this.each((function(){var n\u003dw.queue(this,e,t);w._queueHooks(this,e),\"fx\"\u003d\u003d\u003de\u0026\u0026\"inprogress\"!\u003d\u003dn[0]\u0026\u0026w.dequeue(this,e)}))},dequeue:function(e){return this.each((function(){w.dequeue(this,e)}))},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r\u003d1,i\u003dw.Deferred(),o\u003dthis,a\u003dthis.length,s\u003dfunction(){--r||i.resolveWith(o,[o])};for(\"string\"!\u003dtypeof e\u0026\u0026(t\u003de,e\u003dvoid 0),e\u003de||\"fx\";a--;)(n\u003dY.get(o[a],e+\"queueHooks\"))\u0026\u0026n.empty\u0026\u0026(r++,n.empty.add(s));return s(),i.promise(t)}});var ee\u003d/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,te\u003dnew RegExp(\"^(?:([+-])\u003d|)(\"+ee+\")([a-z%]*)$\",\"i\"),ne\u003d[\"Top\",\"Right\",\"Bottom\",\"Left\"],re\u003dv.documentElement,ie\u003dfunction(e){return w.contains(e.ownerDocument,e)},oe\u003d{composed:!0};re.getRootNode\u0026\u0026(ie\u003dfunction(e){return w.contains(e.ownerDocument,e)||e.getRootNode(oe)\u003d\u003d\u003de.ownerDocument});var ae\u003dfunction(e,t){return\"none\"\u003d\u003d\u003d(e\u003dt||e).style.display||\"\"\u003d\u003d\u003de.style.display\u0026\u0026ie(e)\u0026\u0026\"none\"\u003d\u003d\u003dw.css(e,\"display\")};function se(e,t,n,r){var i,o,a\u003d20,s\u003dr?function(){return r.cur()}:function(){return w.css(e,t,\"\")},u\u003ds(),l\u003dn\u0026\u0026n[3]||(w.cssNumber[t]?\"\":\"px\"),c\u003de.nodeType\u0026\u0026(w.cssNumber[t]||\"px\"!\u003d\u003dl\u0026\u0026+u)\u0026\u0026te.exec(w.css(e,t));if(c\u0026\u0026c[3]!\u003d\u003dl){for(u/\u003d2,l\u003dl||c[3],c\u003d+u||1;a--;)w.style(e,t,c+l),(1-o)*(1-(o\u003ds()/u||.5))\u003c\u003d0\u0026\u0026(a\u003d0),c/\u003do;c*\u003d2,w.style(e,t,c+l),n\u003dn||[]}return n\u0026\u0026(c\u003d+c||+u||0,i\u003dn[1]?c+(n[1]+1)*n[2]:+n[2],r\u0026\u0026(r.unit\u003dl,r.start\u003dc,r.end\u003di)),i}var ue\u003d{};function le(e){var t,n\u003de.ownerDocument,r\u003de.nodeName,i\u003due[r];return i||(t\u003dn.body.appendChild(n.createElement(r)),i\u003dw.css(t,\"display\"),t.parentNode.removeChild(t),\"none\"\u003d\u003d\u003di\u0026\u0026(i\u003d\"block\"),ue[r]\u003di,i)}function ce(e,t){for(var n,r,i\u003d[],o\u003d0,a\u003de.length;o\u003ca;o++)(r\u003de[o]).style\u0026\u0026(n\u003dr.style.display,t?(\"none\"\u003d\u003d\u003dn\u0026\u0026(i[o]\u003dY.get(r,\"display\")||null,i[o]||(r.style.display\u003d\"\")),\"\"\u003d\u003d\u003dr.style.display\u0026\u0026ae(r)\u0026\u0026(i[o]\u003dle(r))):\"none\"!\u003d\u003dn\u0026\u0026(i[o]\u003d\"none\",Y.set(r,\"display\",n)));for(o\u003d0;o\u003ca;o++)null!\u003di[o]\u0026\u0026(e[o].style.display\u003di[o]);return e}w.fn.extend({show:function(){return ce(this,!0)},hide:function(){return ce(this)},toggle:function(e){return\"boolean\"\u003d\u003dtypeof e?e?this.show():this.hide():this.each((function(){ae(this)?w(this).show():w(this).hide()}))}});var fe,pe,de\u003d/^(?:checkbox|radio)$/i,he\u003d/\u003c([a-z][^\\/\\0\u003e\\x20\\t\\r\\n\\f]*)/i,ge\u003d/^$|^module$|\\/(?:java|ecma)script/i;fe\u003dv.createDocumentFragment().appendChild(v.createElement(\"div\")),(pe\u003dv.createElement(\"input\")).setAttribute(\"type\",\"radio\"),pe.setAttribute(\"checked\",\"checked\"),pe.setAttribute(\"name\",\"t\"),fe.appendChild(pe),d.checkClone\u003dfe.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.innerHTML\u003d\"\u003ctextarea\u003ex\u003c/textarea\u003e\",d.noCloneChecked\u003d!!fe.cloneNode(!0).lastChild.defaultValue,fe.innerHTML\u003d\"\u003coption\u003e\u003c/option\u003e\",d.option\u003d!!fe.lastChild;var ve\u003d{thead:[1,\"\u003ctable\u003e\",\"\u003c/table\u003e\"],col:[2,\"\u003ctable\u003e\u003ccolgroup\u003e\",\"\u003c/colgroup\u003e\u003c/table\u003e\"],tr:[2,\"\u003ctable\u003e\u003ctbody\u003e\",\"\u003c/tbody\u003e\u003c/table\u003e\"],td:[3,\"\u003ctable\u003e\u003ctbody\u003e\u003ctr\u003e\",\"\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\"],_default:[0,\"\",\"\"]};function ye(e,t){var n;return n\u003dvoid 0!\u003d\u003de.getElementsByTagName?e.getElementsByTagName(t||\"*\"):void 0!\u003d\u003de.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0\u003d\u003d\u003dt||t\u0026\u0026A(e,t)?w.merge([e],n):n}function me(e,t){for(var n\u003d0,r\u003de.length;n\u003cr;n++)Y.set(e[n],\"globalEval\",!t||Y.get(t[n],\"globalEval\"))}ve.tbody\u003dve.tfoot\u003dve.colgroup\u003dve.caption\u003dve.thead,ve.th\u003dve.td,d.option||(ve.optgroup\u003dve.option\u003d[1,\"\u003cselect multiple\u003d\u0027multiple\u0027\u003e\",\"\u003c/select\u003e\"]);var xe\u003d/\u003c|\u0026#?\\w+;/;function be(e,t,n,r,i){for(var o,a,s,u,l,c,f\u003dt.createDocumentFragment(),p\u003d[],d\u003d0,h\u003de.length;d\u003ch;d++)if((o\u003de[d])||0\u003d\u003d\u003do)if(\"object\"\u003d\u003d\u003dx(o))w.merge(p,o.nodeType?[o]:o);else if(xe.test(o)){for(a\u003da||f.appendChild(t.createElement(\"div\")),s\u003d(he.exec(o)||[\"\",\"\"])[1].toLowerCase(),u\u003dve[s]||ve._default,a.innerHTML\u003du[1]+w.htmlPrefilter(o)+u[2],c\u003du[0];c--;)a\u003da.lastChild;w.merge(p,a.childNodes),(a\u003df.firstChild).textContent\u003d\"\"}else p.push(t.createTextNode(o));for(f.textContent\u003d\"\",d\u003d0;o\u003dp[d++];)if(r\u0026\u0026w.inArray(o,r)\u003e-1)i\u0026\u0026i.push(o);else if(l\u003die(o),a\u003dye(f.appendChild(o),\"script\"),l\u0026\u0026me(a),n)for(c\u003d0;o\u003da[c++];)ge.test(o.type||\"\")\u0026\u0026n.push(o);return f}var we\u003d/^key/,Te\u003d/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce\u003d/^([^.]*)(?:\\.(.+)|)/;function Ee(){return!0}function Se(){return!1}function ke(e,t){return e\u003d\u003d\u003dfunction(){try{return v.activeElement}catch(e){}}()\u003d\u003d(\"focus\"\u003d\u003d\u003dt)}function Ae(e,t,n,r,i,o){var a,s;if(\"object\"\u003d\u003dtypeof t){for(s in\"string\"!\u003dtypeof n\u0026\u0026(r\u003dr||n,n\u003dvoid 0),t)Ae(e,s,n,r,t[s],o);return e}if(null\u003d\u003dr\u0026\u0026null\u003d\u003di?(i\u003dn,r\u003dn\u003dvoid 0):null\u003d\u003di\u0026\u0026(\"string\"\u003d\u003dtypeof n?(i\u003dr,r\u003dvoid 0):(i\u003dr,r\u003dn,n\u003dvoid 0)),!1\u003d\u003d\u003di)i\u003dSe;else if(!i)return e;return 1\u003d\u003d\u003do\u0026\u0026(a\u003di,(i\u003dfunction(e){return w().off(e),a.apply(this,arguments)}).guid\u003da.guid||(a.guid\u003dw.guid++)),e.each((function(){w.event.add(this,t,i,r,n)}))}function Ne(e,t,n){n?(Y.set(e,t,!1),w.event.add(e,t,{namespace:!1,handler:function(e){var r,o,a\u003dY.get(this,t);if(1\u0026e.isTrigger\u0026\u0026this[t]){if(a.length)(w.event.special[t]||{}).delegateType\u0026\u0026e.stopPropagation();else if(a\u003di.call(arguments),Y.set(this,t,a),r\u003dn(this,t),this[t](),a!\u003d\u003d(o\u003dY.get(this,t))||r?Y.set(this,t,!1):o\u003d{},a!\u003d\u003do)return e.stopImmediatePropagation(),e.preventDefault(),o.value}else a.length\u0026\u0026(Y.set(this,t,{value:w.event.trigger(w.extend(a[0],w.Event.prototype),a.slice(1),this)}),e.stopImmediatePropagation())}})):void 0\u003d\u003d\u003dY.get(e,t)\u0026\u0026w.event.add(e,t,Ee)}w.event\u003d{global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v\u003dY.get(e);if(V(e))for(n.handler\u0026\u0026(n\u003d(o\u003dn).handler,i\u003do.selector),i\u0026\u0026w.find.matchesSelector(re,i),n.guid||(n.guid\u003dw.guid++),(u\u003dv.events)||(u\u003dv.events\u003dObject.create(null)),(a\u003dv.handle)||(a\u003dv.handle\u003dfunction(t){return void 0!\u003d\u003dw\u0026\u0026w.event.triggered!\u003d\u003dt.type?w.event.dispatch.apply(e,arguments):void 0}),l\u003d(t\u003d(t||\"\").match(P)||[\"\"]).length;l--;)d\u003dg\u003d(s\u003dCe.exec(t[l])||[])[1],h\u003d(s[2]||\"\").split(\".\").sort(),d\u0026\u0026(f\u003dw.event.special[d]||{},d\u003d(i?f.delegateType:f.bindType)||d,f\u003dw.event.special[d]||{},c\u003dw.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i\u0026\u0026w.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p\u003du[d])||((p\u003du[d]\u003d[]).delegateCount\u003d0,f.setup\u0026\u0026!1!\u003d\u003df.setup.call(e,r,h,a)||e.addEventListener\u0026\u0026e.addEventListener(d,a)),f.add\u0026\u0026(f.add.call(e,c),c.handler.guid||(c.handler.guid\u003dn.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]\u003d!0)},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v\u003dY.hasData(e)\u0026\u0026Y.get(e);if(v\u0026\u0026(u\u003dv.events)){for(l\u003d(t\u003d(t||\"\").match(P)||[\"\"]).length;l--;)if(d\u003dg\u003d(s\u003dCe.exec(t[l])||[])[1],h\u003d(s[2]||\"\").split(\".\").sort(),d){for(f\u003dw.event.special[d]||{},p\u003du[d\u003d(r?f.delegateType:f.bindType)||d]||[],s\u003ds[2]\u0026\u0026new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a\u003do\u003dp.length;o--;)c\u003dp[o],!i\u0026\u0026g!\u003d\u003dc.origType||n\u0026\u0026n.guid!\u003d\u003dc.guid||s\u0026\u0026!s.test(c.namespace)||r\u0026\u0026r!\u003d\u003dc.selector\u0026\u0026(\"**\"!\u003d\u003dr||!c.selector)||(p.splice(o,1),c.selector\u0026\u0026p.delegateCount--,f.remove\u0026\u0026f.remove.call(e,c));a\u0026\u0026!p.length\u0026\u0026(f.teardown\u0026\u0026!1!\u003d\u003df.teardown.call(e,h,v.handle)||w.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)\u0026\u0026Y.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s\u003dnew Array(arguments.length),u\u003dw.event.fix(e),l\u003d(Y.get(this,\"events\")||Object.create(null))[u.type]||[],c\u003dw.event.special[u.type]||{};for(s[0]\u003du,t\u003d1;t\u003carguments.length;t++)s[t]\u003darguments[t];if(u.delegateTarget\u003dthis,!c.preDispatch||!1!\u003d\u003dc.preDispatch.call(this,u)){for(a\u003dw.event.handlers.call(this,u,l),t\u003d0;(i\u003da[t++])\u0026\u0026!u.isPropagationStopped();)for(u.currentTarget\u003di.elem,n\u003d0;(o\u003di.handlers[n++])\u0026\u0026!u.isImmediatePropagationStopped();)u.rnamespace\u0026\u0026!1!\u003d\u003do.namespace\u0026\u0026!u.rnamespace.test(o.namespace)||(u.handleObj\u003do,u.data\u003do.data,void 0!\u003d\u003d(r\u003d((w.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))\u0026\u0026!1\u003d\u003d\u003d(u.result\u003dr)\u0026\u0026(u.preventDefault(),u.stopPropagation()));return c.postDispatch\u0026\u0026c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s\u003d[],u\u003dt.delegateCount,l\u003de.target;if(u\u0026\u0026l.nodeType\u0026\u0026!(\"click\"\u003d\u003d\u003de.type\u0026\u0026e.button\u003e\u003d1))for(;l!\u003d\u003dthis;l\u003dl.parentNode||this)if(1\u003d\u003d\u003dl.nodeType\u0026\u0026(\"click\"!\u003d\u003de.type||!0!\u003d\u003dl.disabled)){for(o\u003d[],a\u003d{},n\u003d0;n\u003cu;n++)void 0\u003d\u003d\u003da[i\u003d(r\u003dt[n]).selector+\" \"]\u0026\u0026(a[i]\u003dr.needsContext?w(i,this).index(l)\u003e-1:w.find(i,this,null,[l]).length),a[i]\u0026\u0026o.push(r);o.length\u0026\u0026s.push({elem:l,handlers:o})}return l\u003dthis,u\u003ct.length\u0026\u0026s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(e,t){Object.defineProperty(w.Event.prototype,e,{enumerable:!0,configurable:!0,get:h(t)?function(){if(this.originalEvent)return t(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[e]},set:function(t){Object.defineProperty(this,e,{enumerable:!0,configurable:!0,writable:!0,value:t})}})},fix:function(e){return e[w.expando]?e:new w.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t\u003dthis||e;return de.test(t.type)\u0026\u0026t.click\u0026\u0026A(t,\"input\")\u0026\u0026Ne(t,\"click\",Ee),!1},trigger:function(e){var t\u003dthis||e;return de.test(t.type)\u0026\u0026t.click\u0026\u0026A(t,\"input\")\u0026\u0026Ne(t,\"click\"),!0},_default:function(e){var t\u003de.target;return de.test(t.type)\u0026\u0026t.click\u0026\u0026A(t,\"input\")\u0026\u0026Y.get(t,\"click\")||A(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!\u003d\u003de.result\u0026\u0026e.originalEvent\u0026\u0026(e.originalEvent.returnValue\u003de.result)}}}},w.removeEvent\u003dfunction(e,t,n){e.removeEventListener\u0026\u0026e.removeEventListener(t,n)},w.Event\u003dfunction(e,t){if(!(this instanceof w.Event))return new w.Event(e,t);e\u0026\u0026e.type?(this.originalEvent\u003de,this.type\u003de.type,this.isDefaultPrevented\u003de.defaultPrevented||void 0\u003d\u003d\u003de.defaultPrevented\u0026\u0026!1\u003d\u003d\u003de.returnValue?Ee:Se,this.target\u003de.target\u0026\u00263\u003d\u003d\u003de.target.nodeType?e.target.parentNode:e.target,this.currentTarget\u003de.currentTarget,this.relatedTarget\u003de.relatedTarget):this.type\u003de,t\u0026\u0026w.extend(this,t),this.timeStamp\u003de\u0026\u0026e.timeStamp||Date.now(),this[w.expando]\u003d!0},w.Event.prototype\u003d{constructor:w.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e\u003dthis.originalEvent;this.isDefaultPrevented\u003dEe,e\u0026\u0026!this.isSimulated\u0026\u0026e.preventDefault()},stopPropagation:function(){var e\u003dthis.originalEvent;this.isPropagationStopped\u003dEe,e\u0026\u0026!this.isSimulated\u0026\u0026e.stopPropagation()},stopImmediatePropagation:function(){var e\u003dthis.originalEvent;this.isImmediatePropagationStopped\u003dEe,e\u0026\u0026!this.isSimulated\u0026\u0026e.stopImmediatePropagation(),this.stopPropagation()}},w.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t\u003de.button;return null\u003d\u003de.which\u0026\u0026we.test(e.type)?null!\u003de.charCode?e.charCode:e.keyCode:!e.which\u0026\u0026void 0!\u003d\u003dt\u0026\u0026Te.test(e.type)?1\u0026t?1:2\u0026t?3:4\u0026t?2:0:e.which}},w.event.addProp),w.each({focus:\"focusin\",blur:\"focusout\"},(function(e,t){w.event.special[e]\u003d{setup:function(){return Ne(this,e,ke),!1},trigger:function(){return Ne(this,e),!0},delegateType:t}})),w.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},(function(e,t){w.event.special[e]\u003d{delegateType:t,bindType:t,handle:function(e){var n,r\u003dthis,i\u003de.relatedTarget,o\u003de.handleObj;return i\u0026\u0026(i\u003d\u003d\u003dr||w.contains(r,i))||(e.type\u003do.origType,n\u003do.handler.apply(this,arguments),e.type\u003dt),n}}})),w.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e\u0026\u0026e.preventDefault\u0026\u0026e.handleObj)return r\u003de.handleObj,w(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"\u003d\u003dtypeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!\u003d\u003dt\u0026\u0026\"function\"!\u003dtypeof t||(n\u003dt,t\u003dvoid 0),!1\u003d\u003d\u003dn\u0026\u0026(n\u003dSe),this.each((function(){w.event.remove(this,e,n,t)}))}});var De\u003d/\u003cscript|\u003cstyle|\u003clink/i,je\u003d/checked\\s*(?:[^\u003d]|\u003d\\s*.checked.)/i,qe\u003d/^\\s*\u003c!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)\u003e\\s*$/g;function Le(e,t){return A(e,\"table\")\u0026\u0026A(11!\u003d\u003dt.nodeType?t:t.firstChild,\"tr\")\u0026\u0026w(e).children(\"tbody\")[0]||e}function He(e){return e.type\u003d(null!\u003d\u003de.getAttribute(\"type\"))+\"/\"+e.type,e}function Oe(e){return\"true/\"\u003d\u003d\u003d(e.type||\"\").slice(0,5)?e.type\u003de.type.slice(5):e.removeAttribute(\"type\"),e}function Pe(e,t){var n,r,i,o,a,s;if(1\u003d\u003d\u003dt.nodeType){if(Y.hasData(e)\u0026\u0026(s\u003dY.get(e).events))for(i in Y.remove(t,\"handle events\"),s)for(n\u003d0,r\u003ds[i].length;n\u003cr;n++)w.event.add(t,i,s[i][n]);Q.hasData(e)\u0026\u0026(o\u003dQ.access(e),a\u003dw.extend({},o),Q.set(t,a))}}function Re(e,t){var n\u003dt.nodeName.toLowerCase();\"input\"\u003d\u003d\u003dn\u0026\u0026de.test(e.type)?t.checked\u003de.checked:\"input\"!\u003d\u003dn\u0026\u0026\"textarea\"!\u003d\u003dn||(t.defaultValue\u003de.defaultValue)}function Me(e,t,n,r){t\u003do(t);var i,a,s,u,l,c,f\u003d0,p\u003de.length,g\u003dp-1,v\u003dt[0],y\u003dh(v);if(y||p\u003e1\u0026\u0026\"string\"\u003d\u003dtypeof v\u0026\u0026!d.checkClone\u0026\u0026je.test(v))return e.each((function(i){var o\u003de.eq(i);y\u0026\u0026(t[0]\u003dv.call(this,i,o.html())),Me(o,t,n,r)}));if(p\u0026\u0026(a\u003d(i\u003dbe(t,e[0].ownerDocument,!1,e,r)).firstChild,1\u003d\u003d\u003di.childNodes.length\u0026\u0026(i\u003da),a||r)){for(u\u003d(s\u003dw.map(ye(i,\"script\"),He)).length;f\u003cp;f++)l\u003di,f!\u003d\u003dg\u0026\u0026(l\u003dw.clone(l,!0,!0),u\u0026\u0026w.merge(s,ye(l,\"script\"))),n.call(e[f],l,f);if(u)for(c\u003ds[s.length-1].ownerDocument,w.map(s,Oe),f\u003d0;f\u003cu;f++)l\u003ds[f],ge.test(l.type||\"\")\u0026\u0026!Y.access(l,\"globalEval\")\u0026\u0026w.contains(c,l)\u0026\u0026(l.src\u0026\u0026\"module\"!\u003d\u003d(l.type||\"\").toLowerCase()?w._evalUrl\u0026\u0026!l.noModule\u0026\u0026w._evalUrl(l.src,{nonce:l.nonce||l.getAttribute(\"nonce\")},c):m(l.textContent.replace(qe,\"\"),l,c))}return e}function Ie(e,t,n){for(var r,i\u003dt?w.filter(t,e):e,o\u003d0;null!\u003d(r\u003di[o]);o++)n||1!\u003d\u003dr.nodeType||w.cleanData(ye(r)),r.parentNode\u0026\u0026(n\u0026\u0026ie(r)\u0026\u0026me(ye(r,\"script\")),r.parentNode.removeChild(r));return e}w.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s\u003de.cloneNode(!0),u\u003die(e);if(!(d.noCloneChecked||1!\u003d\u003de.nodeType\u0026\u002611!\u003d\u003de.nodeType||w.isXMLDoc(e)))for(a\u003dye(s),r\u003d0,i\u003d(o\u003dye(e)).length;r\u003ci;r++)Re(o[r],a[r]);if(t)if(n)for(o\u003do||ye(e),a\u003da||ye(s),r\u003d0,i\u003do.length;r\u003ci;r++)Pe(o[r],a[r]);else Pe(e,s);return(a\u003dye(s,\"script\")).length\u003e0\u0026\u0026me(a,!u\u0026\u0026ye(e,\"script\")),s},cleanData:function(e){for(var t,n,r,i\u003dw.event.special,o\u003d0;void 0!\u003d\u003d(n\u003de[o]);o++)if(V(n)){if(t\u003dn[Y.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[Y.expando]\u003dvoid 0}n[Q.expando]\u0026\u0026(n[Q.expando]\u003dvoid 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return $(this,(function(e){return void 0\u003d\u003d\u003de?w.text(this):this.empty().each((function(){1!\u003d\u003dthis.nodeType\u0026\u002611!\u003d\u003dthis.nodeType\u0026\u00269!\u003d\u003dthis.nodeType||(this.textContent\u003de)}))}),null,e,arguments.length)},append:function(){return Me(this,arguments,(function(e){1!\u003d\u003dthis.nodeType\u0026\u002611!\u003d\u003dthis.nodeType\u0026\u00269!\u003d\u003dthis.nodeType||Le(this,e).appendChild(e)}))},prepend:function(){return Me(this,arguments,(function(e){if(1\u003d\u003d\u003dthis.nodeType||11\u003d\u003d\u003dthis.nodeType||9\u003d\u003d\u003dthis.nodeType){var t\u003dLe(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Me(this,arguments,(function(e){this.parentNode\u0026\u0026this.parentNode.insertBefore(e,this)}))},after:function(){return Me(this,arguments,(function(e){this.parentNode\u0026\u0026this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t\u003d0;null!\u003d(e\u003dthis[t]);t++)1\u003d\u003d\u003de.nodeType\u0026\u0026(w.cleanData(ye(e,!1)),e.textContent\u003d\"\");return this},clone:function(e,t){return e\u003dnull!\u003de\u0026\u0026e,t\u003dnull\u003d\u003dt?e:t,this.map((function(){return w.clone(this,e,t)}))},html:function(e){return $(this,(function(e){var t\u003dthis[0]||{},n\u003d0,r\u003dthis.length;if(void 0\u003d\u003d\u003de\u0026\u00261\u003d\u003d\u003dt.nodeType)return t.innerHTML;if(\"string\"\u003d\u003dtypeof e\u0026\u0026!De.test(e)\u0026\u0026!ve[(he.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e\u003dw.htmlPrefilter(e);try{for(;n\u003cr;n++)1\u003d\u003d\u003d(t\u003dthis[n]||{}).nodeType\u0026\u0026(w.cleanData(ye(t,!1)),t.innerHTML\u003de);t\u003d0}catch(e){}}t\u0026\u0026this.empty().append(e)}),null,e,arguments.length)},replaceWith:function(){var e\u003d[];return Me(this,arguments,(function(t){var n\u003dthis.parentNode;w.inArray(this,e)\u003c0\u0026\u0026(w.cleanData(ye(this)),n\u0026\u0026n.replaceChild(t,this))}),e)}}),w.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},(function(e,t){w.fn[e]\u003dfunction(e){for(var n,r\u003d[],i\u003dw(e),o\u003di.length-1,s\u003d0;s\u003c\u003do;s++)n\u003ds\u003d\u003d\u003do?this:this.clone(!0),w(i[s])[t](n),a.apply(r,n.get());return this.pushStack(r)}}));var We\u003dnew RegExp(\"^(\"+ee+\")(?!px)[a-z%]+$\",\"i\"),Fe\u003dfunction(t){var n\u003dt.ownerDocument.defaultView;return n\u0026\u0026n.opener||(n\u003de),n.getComputedStyle(t)},Be\u003dfunction(e,t,n){var r,i,o\u003d{};for(i in t)o[i]\u003de.style[i],e.style[i]\u003dt[i];for(i in r\u003dn.call(e),t)e.style[i]\u003do[i];return r},$e\u003dnew RegExp(ne.join(\"|\"),\"i\");function _e(e,t,n){var r,i,o,a,s\u003de.style;return(n\u003dn||Fe(e))\u0026\u0026(\"\"!\u003d\u003d(a\u003dn.getPropertyValue(t)||n[t])||ie(e)||(a\u003dw.style(e,t)),!d.pixelBoxStyles()\u0026\u0026We.test(a)\u0026\u0026$e.test(t)\u0026\u0026(r\u003ds.width,i\u003ds.minWidth,o\u003ds.maxWidth,s.minWidth\u003ds.maxWidth\u003ds.width\u003da,a\u003dn.width,s.width\u003dr,s.minWidth\u003di,s.maxWidth\u003do)),void 0!\u003d\u003da?a+\"\":a}function ze(e,t){return{get:function(){if(!e())return(this.get\u003dt).apply(this,arguments);delete this.get}}}!function(){function t(){if(c){l.style.cssText\u003d\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",c.style.cssText\u003d\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",re.appendChild(l).appendChild(c);var t\u003de.getComputedStyle(c);r\u003d\"1%\"!\u003d\u003dt.top,u\u003d12\u003d\u003d\u003dn(t.marginLeft),c.style.right\u003d\"60%\",a\u003d36\u003d\u003d\u003dn(t.right),i\u003d36\u003d\u003d\u003dn(t.width),c.style.position\u003d\"absolute\",o\u003d12\u003d\u003d\u003dn(c.offsetWidth/3),re.removeChild(l),c\u003dnull}}function n(e){return Math.round(parseFloat(e))}var r,i,o,a,s,u,l\u003dv.createElement(\"div\"),c\u003dv.createElement(\"div\");c.style\u0026\u0026(c.style.backgroundClip\u003d\"content-box\",c.cloneNode(!0).style.backgroundClip\u003d\"\",d.clearCloneStyle\u003d\"content-box\"\u003d\u003d\u003dc.style.backgroundClip,w.extend(d,{boxSizingReliable:function(){return t(),i},pixelBoxStyles:function(){return t(),a},pixelPosition:function(){return t(),r},reliableMarginLeft:function(){return t(),u},scrollboxSize:function(){return t(),o},reliableTrDimensions:function(){var t,n,r,i;return null\u003d\u003ds\u0026\u0026(t\u003dv.createElement(\"table\"),n\u003dv.createElement(\"tr\"),r\u003dv.createElement(\"div\"),t.style.cssText\u003d\"position:absolute;left:-11111px\",n.style.height\u003d\"1px\",r.style.height\u003d\"9px\",re.appendChild(t).appendChild(n).appendChild(r),i\u003de.getComputedStyle(n),s\u003dparseInt(i.height)\u003e3,re.removeChild(t)),s}}))}();var Ue\u003d[\"Webkit\",\"Moz\",\"ms\"],Xe\u003dv.createElement(\"div\").style,Ve\u003d{};function Ge(e){var t\u003dw.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]\u003dfunction(e){for(var t\u003de[0].toUpperCase()+e.slice(1),n\u003dUe.length;n--;)if((e\u003dUe[n]+t)in Xe)return e}(e)||e)}var Ye\u003d/^(none|table(?!-c[ea]).+)/,Qe\u003d/^--/,Je\u003d{position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ke\u003d{letterSpacing:\"0\",fontWeight:\"400\"};function Ze(e,t,n){var r\u003dte.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function et(e,t,n,r,i,o){var a\u003d\"width\"\u003d\u003d\u003dt?1:0,s\u003d0,u\u003d0;if(n\u003d\u003d\u003d(r?\"border\":\"content\"))return 0;for(;a\u003c4;a+\u003d2)\"margin\"\u003d\u003d\u003dn\u0026\u0026(u+\u003dw.css(e,n+ne[a],!0,i)),r?(\"content\"\u003d\u003d\u003dn\u0026\u0026(u-\u003dw.css(e,\"padding\"+ne[a],!0,i)),\"margin\"!\u003d\u003dn\u0026\u0026(u-\u003dw.css(e,\"border\"+ne[a]+\"Width\",!0,i))):(u+\u003dw.css(e,\"padding\"+ne[a],!0,i),\"padding\"!\u003d\u003dn?u+\u003dw.css(e,\"border\"+ne[a]+\"Width\",!0,i):s+\u003dw.css(e,\"border\"+ne[a]+\"Width\",!0,i));return!r\u0026\u0026o\u003e\u003d0\u0026\u0026(u+\u003dMath.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r\u003dFe(e),i\u003d(!d.boxSizingReliable()||n)\u0026\u0026\"border-box\"\u003d\u003d\u003dw.css(e,\"boxSizing\",!1,r),o\u003di,a\u003d_e(e,t,r),s\u003d\"offset\"+t[0].toUpperCase()+t.slice(1);if(We.test(a)){if(!n)return a;a\u003d\"auto\"}return(!d.boxSizingReliable()\u0026\u0026i||!d.reliableTrDimensions()\u0026\u0026A(e,\"tr\")||\"auto\"\u003d\u003d\u003da||!parseFloat(a)\u0026\u0026\"inline\"\u003d\u003d\u003dw.css(e,\"display\",!1,r))\u0026\u0026e.getClientRects().length\u0026\u0026(i\u003d\"border-box\"\u003d\u003d\u003dw.css(e,\"boxSizing\",!1,r),(o\u003ds in e)\u0026\u0026(a\u003de[s])),(a\u003dparseFloat(a)||0)+et(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n\u003d_e(e,\"opacity\");return\"\"\u003d\u003d\u003dn?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e\u0026\u00263!\u003d\u003de.nodeType\u0026\u00268!\u003d\u003de.nodeType\u0026\u0026e.style){var i,o,a,s\u003dX(t),u\u003dQe.test(t),l\u003de.style;if(u||(t\u003dGe(s)),a\u003dw.cssHooks[t]||w.cssHooks[s],void 0\u003d\u003d\u003dn)return a\u0026\u0026\"get\"in a\u0026\u0026void 0!\u003d\u003d(i\u003da.get(e,!1,r))?i:l[t];\"string\"\u003d\u003d\u003d(o\u003dtypeof n)\u0026\u0026(i\u003dte.exec(n))\u0026\u0026i[1]\u0026\u0026(n\u003dse(e,t,i),o\u003d\"number\"),null!\u003dn\u0026\u0026n\u003d\u003dn\u0026\u0026(\"number\"!\u003d\u003do||u||(n+\u003di\u0026\u0026i[3]||(w.cssNumber[s]?\"\":\"px\")),d.clearCloneStyle||\"\"!\u003d\u003dn||0!\u003d\u003dt.indexOf(\"background\")||(l[t]\u003d\"inherit\"),a\u0026\u0026\"set\"in a\u0026\u0026void 0\u003d\u003d\u003d(n\u003da.set(e,n,r))||(u?l.setProperty(t,n):l[t]\u003dn))}},css:function(e,t,n,r){var i,o,a,s\u003dX(t);return Qe.test(t)||(t\u003dGe(s)),(a\u003dw.cssHooks[t]||w.cssHooks[s])\u0026\u0026\"get\"in a\u0026\u0026(i\u003da.get(e,!0,n)),void 0\u003d\u003d\u003di\u0026\u0026(i\u003d_e(e,t,r)),\"normal\"\u003d\u003d\u003di\u0026\u0026t in Ke\u0026\u0026(i\u003dKe[t]),\"\"\u003d\u003d\u003dn||n?(o\u003dparseFloat(i),!0\u003d\u003d\u003dn||isFinite(o)?o||0:i):i}}),w.each([\"height\",\"width\"],(function(e,t){w.cssHooks[t]\u003d{get:function(e,n,r){if(n)return!Ye.test(w.css(e,\"display\"))||e.getClientRects().length\u0026\u0026e.getBoundingClientRect().width?tt(e,t,r):Be(e,Je,(function(){return tt(e,t,r)}))},set:function(e,n,r){var i,o\u003dFe(e),a\u003d!d.scrollboxSize()\u0026\u0026\"absolute\"\u003d\u003d\u003do.position,s\u003d(a||r)\u0026\u0026\"border-box\"\u003d\u003d\u003dw.css(e,\"boxSizing\",!1,o),u\u003dr?et(e,t,r,s,o):0;return s\u0026\u0026a\u0026\u0026(u-\u003dMath.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-et(e,t,\"border\",!1,o)-.5)),u\u0026\u0026(i\u003dte.exec(n))\u0026\u0026\"px\"!\u003d\u003d(i[3]||\"px\")\u0026\u0026(e.style[t]\u003dn,n\u003dw.css(e,t)),Ze(0,n,u)}}})),w.cssHooks.marginLeft\u003dze(d.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(_e(e,\"marginLeft\"))||e.getBoundingClientRect().left-Be(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+\"px\"})),w.each({margin:\"\",padding:\"\",border:\"Width\"},(function(e,t){w.cssHooks[e+t]\u003d{expand:function(n){for(var r\u003d0,i\u003d{},o\u003d\"string\"\u003d\u003dtypeof n?n.split(\" \"):[n];r\u003c4;r++)i[e+ne[r]+t]\u003do[r]||o[r-2]||o[0];return i}},\"margin\"!\u003d\u003de\u0026\u0026(w.cssHooks[e+t].set\u003dZe)})),w.fn.extend({css:function(e,t){return $(this,(function(e,t,n){var r,i,o\u003d{},a\u003d0;if(Array.isArray(t)){for(r\u003dFe(e),i\u003dt.length;a\u003ci;a++)o[t[a]]\u003dw.css(e,t[a],!1,r);return o}return void 0!\u003d\u003dn?w.style(e,t,n):w.css(e,t)}),e,t,arguments.length\u003e1)}}),w.Tween\u003dnt,nt.prototype\u003d{constructor:nt,init:function(e,t,n,r,i,o){this.elem\u003de,this.prop\u003dn,this.easing\u003di||w.easing._default,this.options\u003dt,this.start\u003dthis.now\u003dthis.cur(),this.end\u003dr,this.unit\u003do||(w.cssNumber[n]?\"\":\"px\")},cur:function(){var e\u003dnt.propHooks[this.prop];return e\u0026\u0026e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n\u003dnt.propHooks[this.prop];return this.options.duration?this.pos\u003dt\u003dw.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos\u003dt\u003de,this.now\u003d(this.end-this.start)*t+this.start,this.options.step\u0026\u0026this.options.step.call(this.elem,this.now,this),n\u0026\u0026n.set?n.set(this):nt.propHooks._default.set(this),this}},nt.prototype.init.prototype\u003dnt.prototype,nt.propHooks\u003d{_default:{get:function(e){var t;return 1!\u003d\u003de.elem.nodeType||null!\u003de.elem[e.prop]\u0026\u0026null\u003d\u003de.elem.style[e.prop]?e.elem[e.prop]:(t\u003dw.css(e.elem,e.prop,\"\"))\u0026\u0026\"auto\"!\u003d\u003dt?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!\u003d\u003de.elem.nodeType||!w.cssHooks[e.prop]\u0026\u0026null\u003d\u003de.elem.style[Ge(e.prop)]?e.elem[e.prop]\u003de.now:w.style(e.elem,e.prop,e.now+e.unit)}}},nt.propHooks.scrollTop\u003dnt.propHooks.scrollLeft\u003d{set:function(e){e.elem.nodeType\u0026\u0026e.elem.parentNode\u0026\u0026(e.elem[e.prop]\u003de.now)}},w.easing\u003d{linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},w.fx\u003dnt.prototype.init,w.fx.step\u003d{};var rt,it,ot\u003d/^(?:toggle|show|hide)$/,at\u003d/queueHooks$/;function st(){it\u0026\u0026(!1\u003d\u003d\u003dv.hidden\u0026\u0026e.requestAnimationFrame?e.requestAnimationFrame(st):e.setTimeout(st,w.fx.interval),w.fx.tick())}function ut(){return e.setTimeout((function(){rt\u003dvoid 0})),rt\u003dDate.now()}function lt(e,t){var n,r\u003d0,i\u003d{height:e};for(t\u003dt?1:0;r\u003c4;r+\u003d2-t)i[\"margin\"+(n\u003dne[r])]\u003di[\"padding\"+n]\u003de;return t\u0026\u0026(i.opacity\u003di.width\u003de),i}function ct(e,t,n){for(var r,i\u003d(ft.tweeners[t]||[]).concat(ft.tweeners[\"*\"]),o\u003d0,a\u003di.length;o\u003ca;o++)if(r\u003di[o].call(n,t,e))return r}function ft(e,t,n){var r,i,o\u003d0,a\u003dft.prefilters.length,s\u003dw.Deferred().always((function(){delete u.elem})),u\u003dfunction(){if(i)return!1;for(var t\u003drt||ut(),n\u003dMath.max(0,l.startTime+l.duration-t),r\u003d1-(n/l.duration||0),o\u003d0,a\u003dl.tweens.length;o\u003ca;o++)l.tweens[o].run(r);return s.notifyWith(e,[l,r,n]),r\u003c1\u0026\u0026a?n:(a||s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l]),!1)},l\u003ds.promise({elem:e,props:w.extend({},t),opts:w.extend(!0,{specialEasing:{},easing:w.easing._default},n),originalProperties:t,originalOptions:n,startTime:rt||ut(),duration:n.duration,tweens:[],createTween:function(t,n){var r\u003dw.Tween(e,l.opts,t,n,l.opts.specialEasing[t]||l.opts.easing);return l.tweens.push(r),r},stop:function(t){var n\u003d0,r\u003dt?l.tweens.length:0;if(i)return this;for(i\u003d!0;n\u003cr;n++)l.tweens[n].run(1);return t?(s.notifyWith(e,[l,1,0]),s.resolveWith(e,[l,t])):s.rejectWith(e,[l,t]),this}}),c\u003dl.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i\u003dt[r\u003dX(n)],o\u003de[n],Array.isArray(o)\u0026\u0026(i\u003do[1],o\u003de[n]\u003do[0]),n!\u003d\u003dr\u0026\u0026(e[r]\u003do,delete e[n]),(a\u003dw.cssHooks[r])\u0026\u0026\"expand\"in a)for(n in o\u003da.expand(o),delete e[r],o)n in e||(e[n]\u003do[n],t[n]\u003di);else t[r]\u003di}(c,l.opts.specialEasing);o\u003ca;o++)if(r\u003dft.prefilters[o].call(l,e,c,l.opts))return h(r.stop)\u0026\u0026(w._queueHooks(l.elem,l.opts.queue).stop\u003dr.stop.bind(r)),r;return w.map(c,ct,l),h(l.opts.start)\u0026\u0026l.opts.start.call(e,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),w.fx.timer(w.extend(u,{elem:e,anim:l,queue:l.opts.queue})),l}w.Animation\u003dw.extend(ft,{tweeners:{\"*\":[function(e,t){var n\u003dthis.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){h(e)?(t\u003de,e\u003d[\"*\"]):e\u003de.match(P);for(var n,r\u003d0,i\u003de.length;r\u003ci;r++)n\u003de[r],ft.tweeners[n]\u003dft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f\u003d\"width\"in t||\"height\"in t,p\u003dthis,d\u003d{},h\u003de.style,g\u003de.nodeType\u0026\u0026ae(e),v\u003dY.get(e,\"fxshow\");for(r in n.queue||(null\u003d\u003d(a\u003dw._queueHooks(e,\"fx\")).unqueued\u0026\u0026(a.unqueued\u003d0,s\u003da.empty.fire,a.empty.fire\u003dfunction(){a.unqueued||s()}),a.unqueued++,p.always((function(){p.always((function(){a.unqueued--,w.queue(e,\"fx\").length||a.empty.fire()}))}))),t)if(i\u003dt[r],ot.test(i)){if(delete t[r],o\u003do||\"toggle\"\u003d\u003d\u003di,i\u003d\u003d\u003d(g?\"hide\":\"show\")){if(\"show\"!\u003d\u003di||!v||void 0\u003d\u003d\u003dv[r])continue;g\u003d!0}d[r]\u003dv\u0026\u0026v[r]||w.style(e,r)}if((u\u003d!w.isEmptyObject(t))||!w.isEmptyObject(d))for(r in f\u0026\u00261\u003d\u003d\u003de.nodeType\u0026\u0026(n.overflow\u003d[h.overflow,h.overflowX,h.overflowY],null\u003d\u003d(l\u003dv\u0026\u0026v.display)\u0026\u0026(l\u003dY.get(e,\"display\")),\"none\"\u003d\u003d\u003d(c\u003dw.css(e,\"display\"))\u0026\u0026(l?c\u003dl:(ce([e],!0),l\u003de.style.display||l,c\u003dw.css(e,\"display\"),ce([e]))),(\"inline\"\u003d\u003d\u003dc||\"inline-block\"\u003d\u003d\u003dc\u0026\u0026null!\u003dl)\u0026\u0026\"none\"\u003d\u003d\u003dw.css(e,\"float\")\u0026\u0026(u||(p.done((function(){h.display\u003dl})),null\u003d\u003dl\u0026\u0026(c\u003dh.display,l\u003d\"none\"\u003d\u003d\u003dc?\"\":c)),h.display\u003d\"inline-block\")),n.overflow\u0026\u0026(h.overflow\u003d\"hidden\",p.always((function(){h.overflow\u003dn.overflow[0],h.overflowX\u003dn.overflow[1],h.overflowY\u003dn.overflow[2]}))),u\u003d!1,d)u||(v?\"hidden\"in v\u0026\u0026(g\u003dv.hidden):v\u003dY.access(e,\"fxshow\",{display:l}),o\u0026\u0026(v.hidden\u003d!g),g\u0026\u0026ce([e],!0),p.done((function(){for(r in g||ce([e]),Y.remove(e,\"fxshow\"),d)w.style(e,r,d[r])}))),u\u003dct(g?v[r]:0,r,p),r in v||(v[r]\u003du.start,g\u0026\u0026(u.end\u003du.start,u.start\u003d0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),w.speed\u003dfunction(e,t,n){var r\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e?w.extend({},e):{complete:n||!n\u0026\u0026t||h(e)\u0026\u0026e,duration:e,easing:n\u0026\u0026t||t\u0026\u0026!h(t)\u0026\u0026t};return w.fx.off?r.duration\u003d0:\"number\"!\u003dtypeof r.duration\u0026\u0026(r.duration in w.fx.speeds?r.duration\u003dw.fx.speeds[r.duration]:r.duration\u003dw.fx.speeds._default),null!\u003dr.queue\u0026\u0026!0!\u003d\u003dr.queue||(r.queue\u003d\"fx\"),r.old\u003dr.complete,r.complete\u003dfunction(){h(r.old)\u0026\u0026r.old.call(this),r.queue\u0026\u0026w.dequeue(this,r.queue)},r},w.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(e,t,n,r){var i\u003dw.isEmptyObject(e),o\u003dw.speed(t,n,r),a\u003dfunction(){var t\u003dft(this,w.extend({},e),o);(i||Y.get(this,\"finish\"))\u0026\u0026t.stop(!0)};return a.finish\u003da,i||!1\u003d\u003d\u003do.queue?this.each(a):this.queue(o.queue,a)},stop:function(e,t,n){var r\u003dfunction(e){var t\u003de.stop;delete e.stop,t(n)};return\"string\"!\u003dtypeof e\u0026\u0026(n\u003dt,t\u003de,e\u003dvoid 0),t\u0026\u0026this.queue(e||\"fx\",[]),this.each((function(){var t\u003d!0,i\u003dnull!\u003de\u0026\u0026e+\"queueHooks\",o\u003dw.timers,a\u003dY.get(this);if(i)a[i]\u0026\u0026a[i].stop\u0026\u0026r(a[i]);else for(i in a)a[i]\u0026\u0026a[i].stop\u0026\u0026at.test(i)\u0026\u0026r(a[i]);for(i\u003do.length;i--;)o[i].elem!\u003d\u003dthis||null!\u003de\u0026\u0026o[i].queue!\u003d\u003de||(o[i].anim.stop(n),t\u003d!1,o.splice(i,1));!t\u0026\u0026n||w.dequeue(this,e)}))},finish:function(e){return!1!\u003d\u003de\u0026\u0026(e\u003de||\"fx\"),this.each((function(){var t,n\u003dY.get(this),r\u003dn[e+\"queue\"],i\u003dn[e+\"queueHooks\"],o\u003dw.timers,a\u003dr?r.length:0;for(n.finish\u003d!0,w.queue(this,e,[]),i\u0026\u0026i.stop\u0026\u0026i.stop.call(this,!0),t\u003do.length;t--;)o[t].elem\u003d\u003d\u003dthis\u0026\u0026o[t].queue\u003d\u003d\u003de\u0026\u0026(o[t].anim.stop(!0),o.splice(t,1));for(t\u003d0;t\u003ca;t++)r[t]\u0026\u0026r[t].finish\u0026\u0026r[t].finish.call(this);delete n.finish}))}}),w.each([\"toggle\",\"show\",\"hide\"],(function(e,t){var n\u003dw.fn[t];w.fn[t]\u003dfunction(e,r,i){return null\u003d\u003de||\"boolean\"\u003d\u003dtypeof e?n.apply(this,arguments):this.animate(lt(t,!0),e,r,i)}})),w.each({slideDown:lt(\"show\"),slideUp:lt(\"hide\"),slideToggle:lt(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},(function(e,t){w.fn[e]\u003dfunction(e,n,r){return this.animate(t,e,n,r)}})),w.timers\u003d[],w.fx.tick\u003dfunction(){var e,t\u003d0,n\u003dw.timers;for(rt\u003dDate.now();t\u003cn.length;t++)(e\u003dn[t])()||n[t]!\u003d\u003de||n.splice(t--,1);n.length||w.fx.stop(),rt\u003dvoid 0},w.fx.timer\u003dfunction(e){w.timers.push(e),w.fx.start()},w.fx.interval\u003d13,w.fx.start\u003dfunction(){it||(it\u003d!0,st())},w.fx.stop\u003dfunction(){it\u003dnull},w.fx.speeds\u003d{slow:600,fast:200,_default:400},w.fn.delay\u003dfunction(t,n){return t\u003dw.fx\u0026\u0026w.fx.speeds[t]||t,n\u003dn||\"fx\",this.queue(n,(function(n,r){var i\u003de.setTimeout(n,t);r.stop\u003dfunction(){e.clearTimeout(i)}}))},function(){var e\u003dv.createElement(\"input\"),t\u003dv.createElement(\"select\").appendChild(v.createElement(\"option\"));e.type\u003d\"checkbox\",d.checkOn\u003d\"\"!\u003d\u003de.value,d.optSelected\u003dt.selected,(e\u003dv.createElement(\"input\")).value\u003d\"t\",e.type\u003d\"radio\",d.radioValue\u003d\"t\"\u003d\u003d\u003de.value}();var pt,dt\u003dw.expr.attrHandle;w.fn.extend({attr:function(e,t){return $(this,w.attr,e,t,arguments.length\u003e1)},removeAttr:function(e){return this.each((function(){w.removeAttr(this,e)}))}}),w.extend({attr:function(e,t,n){var r,i,o\u003de.nodeType;if(3!\u003d\u003do\u0026\u00268!\u003d\u003do\u0026\u00262!\u003d\u003do)return void 0\u003d\u003d\u003de.getAttribute?w.prop(e,t,n):(1\u003d\u003d\u003do\u0026\u0026w.isXMLDoc(e)||(i\u003dw.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?pt:void 0)),void 0!\u003d\u003dn?null\u003d\u003d\u003dn?void w.removeAttr(e,t):i\u0026\u0026\"set\"in i\u0026\u0026void 0!\u003d\u003d(r\u003di.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i\u0026\u0026\"get\"in i\u0026\u0026null!\u003d\u003d(r\u003di.get(e,t))?r:null\u003d\u003d(r\u003dw.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!d.radioValue\u0026\u0026\"radio\"\u003d\u003d\u003dt\u0026\u0026A(e,\"input\")){var n\u003de.value;return e.setAttribute(\"type\",t),n\u0026\u0026(e.value\u003dn),t}}}},removeAttr:function(e,t){var n,r\u003d0,i\u003dt\u0026\u0026t.match(P);if(i\u0026\u00261\u003d\u003d\u003de.nodeType)for(;n\u003di[r++];)e.removeAttribute(n)}}),pt\u003d{set:function(e,t,n){return!1\u003d\u003d\u003dt?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\\w+/g),(function(e,t){var n\u003ddt[t]||w.find.attr;dt[t]\u003dfunction(e,t,r){var i,o,a\u003dt.toLowerCase();return r||(o\u003ddt[a],dt[a]\u003di,i\u003dnull!\u003dn(e,t,r)?a:null,dt[a]\u003do),i}}));var ht\u003d/^(?:input|select|textarea|button)$/i,gt\u003d/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(\" \")}function yt(e){return e.getAttribute\u0026\u0026e.getAttribute(\"class\")||\"\"}function mt(e){return Array.isArray(e)?e:\"string\"\u003d\u003dtypeof e\u0026\u0026e.match(P)||[]}w.fn.extend({prop:function(e,t){return $(this,w.prop,e,t,arguments.length\u003e1)},removeProp:function(e){return this.each((function(){delete this[w.propFix[e]||e]}))}}),w.extend({prop:function(e,t,n){var r,i,o\u003de.nodeType;if(3!\u003d\u003do\u0026\u00268!\u003d\u003do\u0026\u00262!\u003d\u003do)return 1\u003d\u003d\u003do\u0026\u0026w.isXMLDoc(e)||(t\u003dw.propFix[t]||t,i\u003dw.propHooks[t]),void 0!\u003d\u003dn?i\u0026\u0026\"set\"in i\u0026\u0026void 0!\u003d\u003d(r\u003di.set(e,n,t))?r:e[t]\u003dn:i\u0026\u0026\"get\"in i\u0026\u0026null!\u003d\u003d(r\u003di.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t\u003dw.find.attr(e,\"tabindex\");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)\u0026\u0026e.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),d.optSelected||(w.propHooks.selected\u003d{get:function(e){var t\u003de.parentNode;return t\u0026\u0026t.parentNode\u0026\u0026t.parentNode.selectedIndex,null},set:function(e){var t\u003de.parentNode;t\u0026\u0026(t.selectedIndex,t.parentNode\u0026\u0026t.parentNode.selectedIndex)}}),w.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],(function(){w.propFix[this.toLowerCase()]\u003dthis})),w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u\u003d0;if(h(e))return this.each((function(t){w(this).addClass(e.call(this,t,yt(this)))}));if((t\u003dmt(e)).length)for(;n\u003dthis[u++];)if(i\u003dyt(n),r\u003d1\u003d\u003d\u003dn.nodeType\u0026\u0026\" \"+vt(i)+\" \"){for(a\u003d0;o\u003dt[a++];)r.indexOf(\" \"+o+\" \")\u003c0\u0026\u0026(r+\u003do+\" \");i!\u003d\u003d(s\u003dvt(r))\u0026\u0026n.setAttribute(\"class\",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u\u003d0;if(h(e))return this.each((function(t){w(this).removeClass(e.call(this,t,yt(this)))}));if(!arguments.length)return this.attr(\"class\",\"\");if((t\u003dmt(e)).length)for(;n\u003dthis[u++];)if(i\u003dyt(n),r\u003d1\u003d\u003d\u003dn.nodeType\u0026\u0026\" \"+vt(i)+\" \"){for(a\u003d0;o\u003dt[a++];)for(;r.indexOf(\" \"+o+\" \")\u003e-1;)r\u003dr.replace(\" \"+o+\" \",\" \");i!\u003d\u003d(s\u003dvt(r))\u0026\u0026n.setAttribute(\"class\",s)}return this},toggleClass:function(e,t){var n\u003dtypeof e,r\u003d\"string\"\u003d\u003d\u003dn||Array.isArray(e);return\"boolean\"\u003d\u003dtypeof t\u0026\u0026r?t?this.addClass(e):this.removeClass(e):h(e)?this.each((function(n){w(this).toggleClass(e.call(this,n,yt(this),t),t)})):this.each((function(){var t,i,o,a;if(r)for(i\u003d0,o\u003dw(this),a\u003dmt(e);t\u003da[i++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!\u003d\u003de\u0026\u0026\"boolean\"!\u003d\u003dn||((t\u003dyt(this))\u0026\u0026Y.set(this,\"__className__\",t),this.setAttribute\u0026\u0026this.setAttribute(\"class\",t||!1\u003d\u003d\u003de?\"\":Y.get(this,\"__className__\")||\"\"))}))},hasClass:function(e){var t,n,r\u003d0;for(t\u003d\" \"+e+\" \";n\u003dthis[r++];)if(1\u003d\u003d\u003dn.nodeType\u0026\u0026(\" \"+vt(yt(n))+\" \").indexOf(t)\u003e-1)return!0;return!1}});var xt\u003d/\\r/g;w.fn.extend({val:function(e){var t,n,r,i\u003dthis[0];return arguments.length?(r\u003dh(e),this.each((function(n){var i;1\u003d\u003d\u003dthis.nodeType\u0026\u0026(null\u003d\u003d(i\u003dr?e.call(this,n,w(this).val()):e)?i\u003d\"\":\"number\"\u003d\u003dtypeof i?i+\u003d\"\":Array.isArray(i)\u0026\u0026(i\u003dw.map(i,(function(e){return null\u003d\u003de?\"\":e+\"\"}))),(t\u003dw.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])\u0026\u0026\"set\"in t\u0026\u0026void 0!\u003d\u003dt.set(this,i,\"value\")||(this.value\u003di))}))):i?(t\u003dw.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])\u0026\u0026\"get\"in t\u0026\u0026void 0!\u003d\u003d(n\u003dt.get(i,\"value\"))?n:\"string\"\u003d\u003dtypeof(n\u003di.value)?n.replace(xt,\"\"):null\u003d\u003dn?\"\":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t\u003dw.find.attr(e,\"value\");return null!\u003dt?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i\u003de.options,o\u003de.selectedIndex,a\u003d\"select-one\"\u003d\u003d\u003de.type,s\u003da?null:[],u\u003da?o+1:i.length;for(r\u003do\u003c0?u:a?o:0;r\u003cu;r++)if(((n\u003di[r]).selected||r\u003d\u003d\u003do)\u0026\u0026!n.disabled\u0026\u0026(!n.parentNode.disabled||!A(n.parentNode,\"optgroup\"))){if(t\u003dw(n).val(),a)return t;s.push(t)}return s},set:function(e,t){for(var n,r,i\u003de.options,o\u003dw.makeArray(t),a\u003di.length;a--;)((r\u003di[a]).selected\u003dw.inArray(w.valHooks.option.get(r),o)\u003e-1)\u0026\u0026(n\u003d!0);return n||(e.selectedIndex\u003d-1),o}}}}),w.each([\"radio\",\"checkbox\"],(function(){w.valHooks[this]\u003d{set:function(e,t){if(Array.isArray(t))return e.checked\u003dw.inArray(w(e).val(),t)\u003e-1}},d.checkOn||(w.valHooks[this].get\u003dfunction(e){return null\u003d\u003d\u003de.getAttribute(\"value\")?\"on\":e.value})})),d.focusin\u003d\"onfocusin\"in e;var bt\u003d/^(?:focusinfocus|focusoutblur)$/,wt\u003dfunction(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,r,i){var o,a,s,u,l,f,p,d,y\u003d[r||v],m\u003dc.call(t,\"type\")?t.type:t,x\u003dc.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(a\u003dd\u003ds\u003dr\u003dr||v,3!\u003d\u003dr.nodeType\u0026\u00268!\u003d\u003dr.nodeType\u0026\u0026!bt.test(m+w.event.triggered)\u0026\u0026(m.indexOf(\".\")\u003e-1\u0026\u0026(x\u003dm.split(\".\"),m\u003dx.shift(),x.sort()),l\u003dm.indexOf(\":\")\u003c0\u0026\u0026\"on\"+m,(t\u003dt[w.expando]?t:new w.Event(m,\"object\"\u003d\u003dtypeof t\u0026\u0026t)).isTrigger\u003di?2:3,t.namespace\u003dx.join(\".\"),t.rnamespace\u003dt.namespace?new RegExp(\"(^|\\\\.)\"+x.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result\u003dvoid 0,t.target||(t.target\u003dr),n\u003dnull\u003d\u003dn?[t]:w.makeArray(n,[t]),p\u003dw.event.special[m]||{},i||!p.trigger||!1!\u003d\u003dp.trigger.apply(r,n))){if(!i\u0026\u0026!p.noBubble\u0026\u0026!g(r)){for(u\u003dp.delegateType||m,bt.test(u+m)||(a\u003da.parentNode);a;a\u003da.parentNode)y.push(a),s\u003da;s\u003d\u003d\u003d(r.ownerDocument||v)\u0026\u0026y.push(s.defaultView||s.parentWindow||e)}for(o\u003d0;(a\u003dy[o++])\u0026\u0026!t.isPropagationStopped();)d\u003da,t.type\u003do\u003e1?u:p.bindType||m,(f\u003d(Y.get(a,\"events\")||Object.create(null))[t.type]\u0026\u0026Y.get(a,\"handle\"))\u0026\u0026f.apply(a,n),(f\u003dl\u0026\u0026a[l])\u0026\u0026f.apply\u0026\u0026V(a)\u0026\u0026(t.result\u003df.apply(a,n),!1\u003d\u003d\u003dt.result\u0026\u0026t.preventDefault());return t.type\u003dm,i||t.isDefaultPrevented()||p._default\u0026\u0026!1!\u003d\u003dp._default.apply(y.pop(),n)||!V(r)||l\u0026\u0026h(r[m])\u0026\u0026!g(r)\u0026\u0026((s\u003dr[l])\u0026\u0026(r[l]\u003dnull),w.event.triggered\u003dm,t.isPropagationStopped()\u0026\u0026d.addEventListener(m,wt),r[m](),t.isPropagationStopped()\u0026\u0026d.removeEventListener(m,wt),w.event.triggered\u003dvoid 0,s\u0026\u0026(r[l]\u003ds)),t.result}},simulate:function(e,t,n){var r\u003dw.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each((function(){w.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n\u003dthis[0];if(n)return w.event.trigger(e,t,n,!0)}}),d.focusin||w.each({focus:\"focusin\",blur:\"focusout\"},(function(e,t){var n\u003dfunction(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]\u003d{setup:function(){var r\u003dthis.ownerDocument||this.document||this,i\u003dY.access(r,t);i||r.addEventListener(e,n,!0),Y.access(r,t,(i||0)+1)},teardown:function(){var r\u003dthis.ownerDocument||this.document||this,i\u003dY.access(r,t)-1;i?Y.access(r,t,i):(r.removeEventListener(e,n,!0),Y.remove(r,t))}}}));var Tt\u003de.location,Ct\u003d{guid:Date.now()},Et\u003d/\\?/;w.parseXML\u003dfunction(t){var n;if(!t||\"string\"!\u003dtypeof t)return null;try{n\u003d(new e.DOMParser).parseFromString(t,\"text/xml\")}catch(e){n\u003dvoid 0}return n\u0026\u0026!n.getElementsByTagName(\"parsererror\").length||w.error(\"Invalid XML: \"+t),n};var St\u003d/\\[\\]$/,kt\u003d/\\r?\\n/g,At\u003d/^(?:submit|button|image|reset|file)$/i,Nt\u003d/^(?:input|select|textarea|keygen)/i;function Dt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,(function(t,i){n||St.test(e)?r(e,i):Dt(e+\"[\"+(\"object\"\u003d\u003dtypeof i\u0026\u0026null!\u003di?t:\"\")+\"]\",i,n,r)}));else if(n||\"object\"!\u003d\u003dx(t))r(e,t);else for(i in t)Dt(e+\"[\"+i+\"]\",t[i],n,r)}w.param\u003dfunction(e,t){var n,r\u003d[],i\u003dfunction(e,t){var n\u003dh(t)?t():t;r[r.length]\u003dencodeURIComponent(e)+\"\u003d\"+encodeURIComponent(null\u003d\u003dn?\"\":n)};if(null\u003d\u003de)return\"\";if(Array.isArray(e)||e.jquery\u0026\u0026!w.isPlainObject(e))w.each(e,(function(){i(this.name,this.value)}));else for(n in e)Dt(n,e[n],t,i);return r.join(\"\u0026\")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e\u003dw.prop(this,\"elements\");return e?w.makeArray(e):this})).filter((function(){var e\u003dthis.type;return this.name\u0026\u0026!w(this).is(\":disabled\")\u0026\u0026Nt.test(this.nodeName)\u0026\u0026!At.test(e)\u0026\u0026(this.checked||!de.test(e))})).map((function(e,t){var n\u003dw(this).val();return null\u003d\u003dn?null:Array.isArray(n)?w.map(n,(function(e){return{name:t.name,value:e.replace(kt,\"\\r\\n\")}})):{name:t.name,value:n.replace(kt,\"\\r\\n\")}})).get()}});var jt\u003d/%20/g,qt\u003d/#.*$/,Lt\u003d/([?\u0026])_\u003d[^\u0026]*/,Ht\u003d/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Ot\u003d/^(?:GET|HEAD)$/,Pt\u003d/^\\/\\//,Rt\u003d{},Mt\u003d{},It\u003d\"*/\".concat(\"*\"),Wt\u003dv.createElement(\"a\");function Ft(e){return function(t,n){\"string\"!\u003dtypeof t\u0026\u0026(n\u003dt,t\u003d\"*\");var r,i\u003d0,o\u003dt.toLowerCase().match(P)||[];if(h(n))for(;r\u003do[i++];)\"+\"\u003d\u003d\u003dr[0]?(r\u003dr.slice(1)||\"*\",(e[r]\u003de[r]||[]).unshift(n)):(e[r]\u003de[r]||[]).push(n)}}function Bt(e,t,n,r){var i\u003d{},o\u003de\u003d\u003d\u003dMt;function a(s){var u;return i[s]\u003d!0,w.each(e[s]||[],(function(e,s){var l\u003ds(t,n,r);return\"string\"!\u003dtypeof l||o||i[l]?o?!(u\u003dl):void 0:(t.dataTypes.unshift(l),a(l),!1)})),u}return a(t.dataTypes[0])||!i[\"*\"]\u0026\u0026a(\"*\")}function $t(e,t){var n,r,i\u003dw.ajaxSettings.flatOptions||{};for(n in t)void 0!\u003d\u003dt[n]\u0026\u0026((i[n]?e:r||(r\u003d{}))[n]\u003dt[n]);return r\u0026\u0026w.extend(!0,e,r),e}Wt.href\u003dTt.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset\u003dUTF-8\",accepts:{\"*\":It,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,w.ajaxSettings),t):$t(w.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(t,n){\"object\"\u003d\u003dtypeof t\u0026\u0026(n\u003dt,t\u003dvoid 0),n\u003dn||{};var r,i,o,a,s,u,l,c,f,p,d\u003dw.ajaxSetup({},n),h\u003dd.context||d,g\u003dd.context\u0026\u0026(h.nodeType||h.jquery)?w(h):w.event,y\u003dw.Deferred(),m\u003dw.Callbacks(\"once memory\"),x\u003dd.statusCode||{},b\u003d{},T\u003d{},C\u003d\"canceled\",E\u003d{readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a\u003d{};t\u003dHt.exec(o);)a[t[1].toLowerCase()+\" \"]\u003d(a[t[1].toLowerCase()+\" \"]||[]).concat(t[2]);t\u003da[e.toLowerCase()+\" \"]}return null\u003d\u003dt?null:t.join(\", \")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null\u003d\u003dl\u0026\u0026(e\u003dT[e.toLowerCase()]\u003dT[e.toLowerCase()]||e,b[e]\u003dt),this},overrideMimeType:function(e){return null\u003d\u003dl\u0026\u0026(d.mimeType\u003de),this},statusCode:function(e){var t;if(e)if(l)E.always(e[E.status]);else for(t in e)x[t]\u003d[x[t],e[t]];return this},abort:function(e){var t\u003de||C;return r\u0026\u0026r.abort(t),S(0,t),this}};if(y.promise(E),d.url\u003d((t||d.url||Tt.href)+\"\").replace(Pt,Tt.protocol+\"//\"),d.type\u003dn.method||n.type||d.method||d.type,d.dataTypes\u003d(d.dataType||\"*\").toLowerCase().match(P)||[\"\"],null\u003d\u003dd.crossDomain){u\u003dv.createElement(\"a\");try{u.href\u003dd.url,u.href\u003du.href,d.crossDomain\u003dWt.protocol+\"//\"+Wt.host!\u003du.protocol+\"//\"+u.host}catch(e){d.crossDomain\u003d!0}}if(d.data\u0026\u0026d.processData\u0026\u0026\"string\"!\u003dtypeof d.data\u0026\u0026(d.data\u003dw.param(d.data,d.traditional)),Bt(Rt,d,n,E),l)return E;for(f in(c\u003dw.event\u0026\u0026d.global)\u0026\u00260\u003d\u003dw.active++\u0026\u0026w.event.trigger(\"ajaxStart\"),d.type\u003dd.type.toUpperCase(),d.hasContent\u003d!Ot.test(d.type),i\u003dd.url.replace(qt,\"\"),d.hasContent?d.data\u0026\u0026d.processData\u0026\u00260\u003d\u003d\u003d(d.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")\u0026\u0026(d.data\u003dd.data.replace(jt,\"+\")):(p\u003dd.url.slice(i.length),d.data\u0026\u0026(d.processData||\"string\"\u003d\u003dtypeof d.data)\u0026\u0026(i+\u003d(Et.test(i)?\"\u0026\":\"?\")+d.data,delete d.data),!1\u003d\u003d\u003dd.cache\u0026\u0026(i\u003di.replace(Lt,\"$1\"),p\u003d(Et.test(i)?\"\u0026\":\"?\")+\"_\u003d\"+Ct.guid+++p),d.url\u003di+p),d.ifModified\u0026\u0026(w.lastModified[i]\u0026\u0026E.setRequestHeader(\"If-Modified-Since\",w.lastModified[i]),w.etag[i]\u0026\u0026E.setRequestHeader(\"If-None-Match\",w.etag[i])),(d.data\u0026\u0026d.hasContent\u0026\u0026!1!\u003d\u003dd.contentType||n.contentType)\u0026\u0026E.setRequestHeader(\"Content-Type\",d.contentType),E.setRequestHeader(\"Accept\",d.dataTypes[0]\u0026\u0026d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(\"*\"!\u003d\u003dd.dataTypes[0]?\", \"+It+\"; q\u003d0.01\":\"\"):d.accepts[\"*\"]),d.headers)E.setRequestHeader(f,d.headers[f]);if(d.beforeSend\u0026\u0026(!1\u003d\u003d\u003dd.beforeSend.call(h,E,d)||l))return E.abort();if(C\u003d\"abort\",m.add(d.complete),E.done(d.success),E.fail(d.error),r\u003dBt(Mt,d,n,E)){if(E.readyState\u003d1,c\u0026\u0026g.trigger(\"ajaxSend\",[E,d]),l)return E;d.async\u0026\u0026d.timeout\u003e0\u0026\u0026(s\u003de.setTimeout((function(){E.abort(\"timeout\")}),d.timeout));try{l\u003d!1,r.send(b,S)}catch(e){if(l)throw e;S(-1,e)}}else S(-1,\"No Transport\");function S(t,n,a,u){var f,p,v,b,T,C\u003dn;l||(l\u003d!0,s\u0026\u0026e.clearTimeout(s),r\u003dvoid 0,o\u003du||\"\",E.readyState\u003dt\u003e0?4:0,f\u003dt\u003e\u003d200\u0026\u0026t\u003c300||304\u003d\u003d\u003dt,a\u0026\u0026(b\u003dfunction(e,t,n){for(var r,i,o,a,s\u003de.contents,u\u003de.dataTypes;\"*\"\u003d\u003d\u003du[0];)u.shift(),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003de.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]\u0026\u0026s[i].test(r)){u.unshift(i);break}if(u[0]in n)o\u003du[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o\u003di;break}a||(a\u003di)}o\u003do||a}if(o)return o!\u003d\u003du[0]\u0026\u0026u.unshift(o),n[o]}(d,E,a)),!f\u0026\u0026w.inArray(\"script\",d.dataTypes)\u003e-1\u0026\u0026(d.converters[\"text script\"]\u003dfunction(){}),b\u003dfunction(e,t,n,r){var i,o,a,s,u,l\u003d{},c\u003de.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]\u003de.converters[a];for(o\u003dc.shift();o;)if(e.responseFields[o]\u0026\u0026(n[e.responseFields[o]]\u003dt),!u\u0026\u0026r\u0026\u0026e.dataFilter\u0026\u0026(t\u003de.dataFilter(t,e.dataType)),u\u003do,o\u003dc.shift())if(\"*\"\u003d\u003d\u003do)o\u003du;else if(\"*\"!\u003d\u003du\u0026\u0026u!\u003d\u003do){if(!(a\u003dl[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s\u003di.split(\" \"))[1]\u003d\u003d\u003do\u0026\u0026(a\u003dl[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0\u003d\u003d\u003da?a\u003dl[i]:!0!\u003d\u003dl[i]\u0026\u0026(o\u003ds[0],c.unshift(s[1]));break}if(!0!\u003d\u003da)if(a\u0026\u0026e.throws)t\u003da(t);else try{t\u003da(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(d,b,E,f),f?(d.ifModified\u0026\u0026((T\u003dE.getResponseHeader(\"Last-Modified\"))\u0026\u0026(w.lastModified[i]\u003dT),(T\u003dE.getResponseHeader(\"etag\"))\u0026\u0026(w.etag[i]\u003dT)),204\u003d\u003d\u003dt||\"HEAD\"\u003d\u003d\u003dd.type?C\u003d\"nocontent\":304\u003d\u003d\u003dt?C\u003d\"notmodified\":(C\u003db.state,p\u003db.data,f\u003d!(v\u003db.error))):(v\u003dC,!t\u0026\u0026C||(C\u003d\"error\",t\u003c0\u0026\u0026(t\u003d0))),E.status\u003dt,E.statusText\u003d(n||C)+\"\",f?y.resolveWith(h,[p,C,E]):y.rejectWith(h,[E,C,v]),E.statusCode(x),x\u003dvoid 0,c\u0026\u0026g.trigger(f?\"ajaxSuccess\":\"ajaxError\",[E,d,f?p:v]),m.fireWith(h,[E,C]),c\u0026\u0026(g.trigger(\"ajaxComplete\",[E,d]),--w.active||w.event.trigger(\"ajaxStop\")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,\"json\")},getScript:function(e,t){return w.get(e,void 0,t,\"script\")}}),w.each([\"get\",\"post\"],(function(e,t){w[t]\u003dfunction(e,n,r,i){return h(n)\u0026\u0026(i\u003di||r,r\u003dn,n\u003dvoid 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)\u0026\u0026e))}})),w.ajaxPrefilter((function(e){var t;for(t in e.headers)\"content-type\"\u003d\u003d\u003dt.toLowerCase()\u0026\u0026(e.contentType\u003de.headers[t]||\"\")})),w._evalUrl\u003dfunction(e,t,n){return w.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){w.globalEval(e,t,n)}})},w.fn.extend({wrapAll:function(e){var t;return this[0]\u0026\u0026(h(e)\u0026\u0026(e\u003de.call(this[0])),t\u003dw(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode\u0026\u0026t.insertBefore(this[0]),t.map((function(){for(var e\u003dthis;e.firstElementChild;)e\u003de.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return h(e)?this.each((function(t){w(this).wrapInner(e.call(this,t))})):this.each((function(){var t\u003dw(this),n\u003dt.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t\u003dh(e);return this.each((function(n){w(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not(\"body\").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden\u003dfunction(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible\u003dfunction(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr\u003dfunction(){try{return new e.XMLHttpRequest}catch(e){}};var _t\u003d{0:200,1223:204},zt\u003dw.ajaxSettings.xhr();d.cors\u003d!!zt\u0026\u0026\"withCredentials\"in zt,d.ajax\u003dzt\u003d!!zt,w.ajaxTransport((function(t){var n,r;if(d.cors||zt\u0026\u0026!t.crossDomain)return{send:function(i,o){var a,s\u003dt.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]\u003dt.xhrFields[a];for(a in t.mimeType\u0026\u0026s.overrideMimeType\u0026\u0026s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]\u003d\"XMLHttpRequest\"),i)s.setRequestHeader(a,i[a]);n\u003dfunction(e){return function(){n\u0026\u0026(n\u003dr\u003ds.onload\u003ds.onerror\u003ds.onabort\u003ds.ontimeout\u003ds.onreadystatechange\u003dnull,\"abort\"\u003d\u003d\u003de?s.abort():\"error\"\u003d\u003d\u003de?\"number\"!\u003dtypeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(_t[s.status]||s.status,s.statusText,\"text\"!\u003d\u003d(s.responseType||\"text\")||\"string\"!\u003dtypeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload\u003dn(),r\u003ds.onerror\u003ds.ontimeout\u003dn(\"error\"),void 0!\u003d\u003ds.onabort?s.onabort\u003dr:s.onreadystatechange\u003dfunction(){4\u003d\u003d\u003ds.readyState\u0026\u0026e.setTimeout((function(){n\u0026\u0026r()}))},n\u003dn(\"abort\");try{s.send(t.hasContent\u0026\u0026t.data||null)}catch(e){if(n)throw e}},abort:function(){n\u0026\u0026n()}}})),w.ajaxPrefilter((function(e){e.crossDomain\u0026\u0026(e.contents.script\u003d!1)})),w.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter(\"script\",(function(e){void 0\u003d\u003d\u003de.cache\u0026\u0026(e.cache\u003d!1),e.crossDomain\u0026\u0026(e.type\u003d\"GET\")})),w.ajaxTransport(\"script\",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(r,i){t\u003dw(\"\u003cscript\u003e\").attr(e.scriptAttrs||{}).prop({charset:e.scriptCharset,src:e.url}).on(\"load error\",n\u003dfunction(e){t.remove(),n\u003dnull,e\u0026\u0026i(\"error\"\u003d\u003d\u003de.type?404:200,e.type)}),v.head.appendChild(t[0])},abort:function(){n\u0026\u0026n()}}}));var Ut,Xt\u003d[],Vt\u003d/(\u003d)\\?(?\u003d\u0026|$)|\\?\\?/;w.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e\u003dXt.pop()||w.expando+\"_\"+Ct.guid++;return this[e]\u003d!0,e}}),w.ajaxPrefilter(\"json jsonp\",(function(t,n,r){var i,o,a,s\u003d!1!\u003d\u003dt.jsonp\u0026\u0026(Vt.test(t.url)?\"url\":\"string\"\u003d\u003dtypeof t.data\u0026\u00260\u003d\u003d\u003d(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")\u0026\u0026Vt.test(t.data)\u0026\u0026\"data\");if(s||\"jsonp\"\u003d\u003d\u003dt.dataTypes[0])return i\u003dt.jsonpCallback\u003dh(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]\u003dt[s].replace(Vt,\"$1\"+i):!1!\u003d\u003dt.jsonp\u0026\u0026(t.url+\u003d(Et.test(t.url)?\"\u0026\":\"?\")+t.jsonp+\"\u003d\"+i),t.converters[\"script json\"]\u003dfunction(){return a||w.error(i+\" was not called\"),a[0]},t.dataTypes[0]\u003d\"json\",o\u003de[i],e[i]\u003dfunction(){a\u003darguments},r.always((function(){void 0\u003d\u003d\u003do?w(e).removeProp(i):e[i]\u003do,t[i]\u0026\u0026(t.jsonpCallback\u003dn.jsonpCallback,Xt.push(i)),a\u0026\u0026h(o)\u0026\u0026o(a[0]),a\u003do\u003dvoid 0})),\"script\"})),d.createHTMLDocument\u003d((Ut\u003dv.implementation.createHTMLDocument(\"\").body).innerHTML\u003d\"\u003cform\u003e\u003c/form\u003e\u003cform\u003e\u003c/form\u003e\",2\u003d\u003d\u003dUt.childNodes.length),w.parseHTML\u003dfunction(e,t,n){return\"string\"!\u003dtypeof e?[]:(\"boolean\"\u003d\u003dtypeof t\u0026\u0026(n\u003dt,t\u003d!1),t||(d.createHTMLDocument?((r\u003d(t\u003dv.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href\u003dv.location.href,t.head.appendChild(r)):t\u003dv),o\u003d!n\u0026\u0026[],(i\u003dN.exec(e))?[t.createElement(i[1])]:(i\u003dbe([e],t,o),o\u0026\u0026o.length\u0026\u0026w(o).remove(),w.merge([],i.childNodes)));var r,i,o},w.fn.load\u003dfunction(e,t,n){var r,i,o,a\u003dthis,s\u003de.indexOf(\" \");return s\u003e-1\u0026\u0026(r\u003dvt(e.slice(s)),e\u003de.slice(0,s)),h(t)?(n\u003dt,t\u003dvoid 0):t\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026(i\u003d\"POST\"),a.length\u003e0\u0026\u0026w.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done((function(e){o\u003darguments,a.html(r?w(\"\u003cdiv\u003e\").append(w.parseHTML(e)).find(r):e)})).always(n\u0026\u0026function(e,t){a.each((function(){n.apply(this,o||[e.responseText,t,e])}))}),this},w.expr.pseudos.animated\u003dfunction(e){return w.grep(w.timers,(function(t){return e\u003d\u003d\u003dt.elem})).length},w.offset\u003d{setOffset:function(e,t,n){var r,i,o,a,s,u,l\u003dw.css(e,\"position\"),c\u003dw(e),f\u003d{};\"static\"\u003d\u003d\u003dl\u0026\u0026(e.style.position\u003d\"relative\"),s\u003dc.offset(),o\u003dw.css(e,\"top\"),u\u003dw.css(e,\"left\"),(\"absolute\"\u003d\u003d\u003dl||\"fixed\"\u003d\u003d\u003dl)\u0026\u0026(o+u).indexOf(\"auto\")\u003e-1?(a\u003d(r\u003dc.position()).top,i\u003dr.left):(a\u003dparseFloat(o)||0,i\u003dparseFloat(u)||0),h(t)\u0026\u0026(t\u003dt.call(e,n,w.extend({},s))),null!\u003dt.top\u0026\u0026(f.top\u003dt.top-s.top+a),null!\u003dt.left\u0026\u0026(f.left\u003dt.left-s.left+i),\"using\"in t?t.using.call(e,f):(\"number\"\u003d\u003dtypeof f.top\u0026\u0026(f.top+\u003d\"px\"),\"number\"\u003d\u003dtypeof f.left\u0026\u0026(f.left+\u003d\"px\"),c.css(f))}},w.fn.extend({offset:function(e){if(arguments.length)return void 0\u003d\u003d\u003de?this:this.each((function(t){w.offset.setOffset(this,e,t)}));var t,n,r\u003dthis[0];return r?r.getClientRects().length?(t\u003dr.getBoundingClientRect(),n\u003dr.ownerDocument.defaultView,{top:t.top+n.pageYOffset,left:t.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r\u003dthis[0],i\u003d{top:0,left:0};if(\"fixed\"\u003d\u003d\u003dw.css(r,\"position\"))t\u003dr.getBoundingClientRect();else{for(t\u003dthis.offset(),n\u003dr.ownerDocument,e\u003dr.offsetParent||n.documentElement;e\u0026\u0026(e\u003d\u003d\u003dn.body||e\u003d\u003d\u003dn.documentElement)\u0026\u0026\"static\"\u003d\u003d\u003dw.css(e,\"position\");)e\u003de.parentNode;e\u0026\u0026e!\u003d\u003dr\u0026\u00261\u003d\u003d\u003de.nodeType\u0026\u0026((i\u003dw(e).offset()).top+\u003dw.css(e,\"borderTopWidth\",!0),i.left+\u003dw.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-w.css(r,\"marginTop\",!0),left:t.left-i.left-w.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map((function(){for(var e\u003dthis.offsetParent;e\u0026\u0026\"static\"\u003d\u003d\u003dw.css(e,\"position\");)e\u003de.offsetParent;return e||re}))}}),w.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},(function(e,t){var n\u003d\"pageYOffset\"\u003d\u003d\u003dt;w.fn[e]\u003dfunction(r){return $(this,(function(e,r,i){var o;if(g(e)?o\u003de:9\u003d\u003d\u003de.nodeType\u0026\u0026(o\u003de.defaultView),void 0\u003d\u003d\u003di)return o?o[t]:e[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):e[r]\u003di}),e,r,arguments.length)}})),w.each([\"top\",\"left\"],(function(e,t){w.cssHooks[t]\u003dze(d.pixelPosition,(function(e,n){if(n)return n\u003d_e(e,t),We.test(n)?w(e).position()[t]+\"px\":n}))})),w.each({Height:\"height\",Width:\"width\"},(function(e,t){w.each({padding:\"inner\"+e,content:t,\"\":\"outer\"+e},(function(n,r){w.fn[r]\u003dfunction(i,o){var a\u003darguments.length\u0026\u0026(n||\"boolean\"!\u003dtypeof i),s\u003dn||(!0\u003d\u003d\u003di||!0\u003d\u003d\u003do?\"margin\":\"border\");return $(this,(function(t,n,i){var o;return g(t)?0\u003d\u003d\u003dr.indexOf(\"outer\")?t[\"inner\"+e]:t.document.documentElement[\"client\"+e]:9\u003d\u003d\u003dt.nodeType?(o\u003dt.documentElement,Math.max(t.body[\"scroll\"+e],o[\"scroll\"+e],t.body[\"offset\"+e],o[\"offset\"+e],o[\"client\"+e])):void 0\u003d\u003d\u003di?w.css(t,n,s):w.style(t,n,i,s)}),t,a?i:void 0,a)}}))})),w.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],(function(e,t){w.fn[t]\u003dfunction(e){return this.on(t,e)}})),w.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1\u003d\u003d\u003darguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),w.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),(function(e,t){w.fn[t]\u003dfunction(e,n){return arguments.length\u003e0?this.on(t,null,e,n):this.trigger(t)}}));var Gt\u003d/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;w.proxy\u003dfunction(e,t){var n,r,o;if(\"string\"\u003d\u003dtypeof t\u0026\u0026(n\u003de[t],t\u003de,e\u003dn),h(e))return r\u003di.call(arguments,2),(o\u003dfunction(){return e.apply(t||this,r.concat(i.call(arguments)))}).guid\u003de.guid\u003de.guid||w.guid++,o},w.holdReady\u003dfunction(e){e?w.readyWait++:w.ready(!0)},w.isArray\u003dArray.isArray,w.parseJSON\u003dJSON.parse,w.nodeName\u003dA,w.isFunction\u003dh,w.isWindow\u003dg,w.camelCase\u003dX,w.type\u003dx,w.now\u003dDate.now,w.isNumeric\u003dfunction(e){var t\u003dw.type(e);return(\"number\"\u003d\u003d\u003dt||\"string\"\u003d\u003d\u003dt)\u0026\u0026!isNaN(e-parseFloat(e))},w.trim\u003dfunction(e){return null\u003d\u003de?\"\":(e+\"\").replace(Gt,\"\")},\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd\u0026\u0026define(\"jquery\",[],(function(){return w}));var Yt\u003de.jQuery,Qt\u003de.$;return w.noConflict\u003dfunction(t){return e.$\u003d\u003d\u003dw\u0026\u0026(e.$\u003dQt),t\u0026\u0026e.jQuery\u003d\u003d\u003dw\u0026\u0026(e.jQuery\u003dYt),w},void 0\u003d\u003d\u003dt\u0026\u0026(e.jQuery\u003de.$\u003dw),w}))},\n      476: function _(t,n,i,o,e){var r\u003dt(474);function u(){var t\u003d!1,n\u003d!1;this.stopPropagation\u003dfunction(){t\u003d!0},this.isPropagationStopped\u003dfunction(){return t},this.stopImmediatePropagation\u003dfunction(){n\u003d!0},this.isImmediatePropagationStopped\u003dfunction(){return n}}function s(){this.__nonDataRow\u003d!0}function l(){this.__group\u003d!0,this.level\u003d0,this.count\u003d0,this.value\u003dnull,this.title\u003dnull,this.collapsed\u003d!1,this.selectChecked\u003d!1,this.totals\u003dnull,this.rows\u003d[],this.groups\u003dnull,this.groupingKey\u003dnull}function c(){this.__groupTotals\u003d!0,this.group\u003dnull,this.initialized\u003d!1}function h(){var t\u003dnull;this.isActive\u003dfunction(n){return n?t\u003d\u003d\u003dn:null!\u003d\u003dt},this.activate\u003dfunction(n){if(n!\u003d\u003dt){if(null!\u003d\u003dt)throw new Error(\"SlickGrid.EditorLock.activate: an editController is still active, can\u0027t activate another editController\");if(!n.commitCurrentEdit)throw new Error(\"SlickGrid.EditorLock.activate: editController must implement .commitCurrentEdit()\");if(!n.cancelCurrentEdit)throw new Error(\"SlickGrid.EditorLock.activate: editController must implement .cancelCurrentEdit()\");t\u003dn}},this.deactivate\u003dfunction(n){if(t!\u003d\u003dn)throw new Error(\"SlickGrid.EditorLock.deactivate: specified editController is not the currently active one\");t\u003dnull},this.commitCurrentEdit\u003dfunction(){return!t||t.commitCurrentEdit()},this.cancelCurrentEdit\u003dfunction(){return!t||t.cancelCurrentEdit()}}l.prototype\u003dnew s,l.prototype.equals\u003dfunction(t){return this.value\u003d\u003d\u003dt.value\u0026\u0026this.count\u003d\u003d\u003dt.count\u0026\u0026this.collapsed\u003d\u003d\u003dt.collapsed\u0026\u0026this.title\u003d\u003d\u003dt.title},c.prototype\u003dnew s,n.exports\u003d{Event:function(){var t\u003d[];this.subscribe\u003dfunction(n){t.push(n)},this.unsubscribe\u003dfunction(n){for(var i\u003dt.length-1;i\u003e\u003d0;i--)t[i]\u003d\u003d\u003dn\u0026\u0026t.splice(i,1)},this.notify\u003dfunction(n,i,o){var e;i\u003di||new u,o\u003do||this;for(var r\u003d0;r\u003ct.length\u0026\u0026!i.isPropagationStopped()\u0026\u0026!i.isImmediatePropagationStopped();r++)e\u003dt[r].call(o,i,n);return e}},EventData:u,EventHandler:function(){var t\u003d[];this.subscribe\u003dfunction(n,i){return t.push({event:n,handler:i}),n.subscribe(i),this},this.unsubscribe\u003dfunction(n,i){for(var o\u003dt.length;o--;)if(t[o].event\u003d\u003d\u003dn\u0026\u0026t[o].handler\u003d\u003d\u003di)return t.splice(o,1),void n.unsubscribe(i);return this},this.unsubscribeAll\u003dfunction(){for(var n\u003dt.length;n--;)t[n].event.unsubscribe(t[n].handler);return t\u003d[],this}},Range:function(t,n,i,o){void 0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003do\u0026\u0026(i\u003dt,o\u003dn),this.fromRow\u003dMath.min(t,i),this.fromCell\u003dMath.min(n,o),this.toRow\u003dMath.max(t,i),this.toCell\u003dMath.max(n,o),this.isSingleRow\u003dfunction(){return this.fromRow\u003d\u003dthis.toRow},this.isSingleCell\u003dfunction(){return this.fromRow\u003d\u003dthis.toRow\u0026\u0026this.fromCell\u003d\u003dthis.toCell},this.contains\u003dfunction(t,n){return t\u003e\u003dthis.fromRow\u0026\u0026t\u003c\u003dthis.toRow\u0026\u0026n\u003e\u003dthis.fromCell\u0026\u0026n\u003c\u003dthis.toCell},this.toString\u003dfunction(){return this.isSingleCell()?\"(\"+this.fromRow+\":\"+this.fromCell+\")\":\"(\"+this.fromRow+\":\"+this.fromCell+\" - \"+this.toRow+\":\"+this.toCell+\")\"}},NonDataRow:s,Group:l,GroupTotals:c,EditorLock:h,GlobalEditorLock:new h,TreeColumns:function(t){var n\u003d{};function i(t){t.forEach((function(t){n[t.id]\u003dt,t.columns\u0026\u0026i(t.columns)}))}function o(t,n){return t.filter((function(t){var i\u003dn.call(t);return i\u0026\u0026t.columns\u0026\u0026(t.columns\u003do(t.columns,n)),i\u0026\u0026(!t.columns||t.columns.length)}))}function e(t,n){t.sort((function(t,i){return u(n.getColumnIndex(t.id))-u(n.getColumnIndex(i.id))})).forEach((function(t){t.columns\u0026\u0026e(t.columns,n)}))}function u(t){return void 0\u003d\u003d\u003dt?-1:t}function s(t){if(!t.length)return t.columns?1+s(t.columns):1;for(var n in t)return s(t[n])}function l(t,n,i){var o\u003d[];if(n\u003d\u003d(i\u003di||0))return t.length\u0026\u0026t.forEach((function(t){t.columns\u0026\u0026(t.extractColumns\u003dfunction(){return c(t)})})),t;for(var e in t)t[e].columns\u0026\u0026(o\u003do.concat(l(t[e].columns,n,i+1)));return o}function c(t){var n\u003d[];if(t.hasOwnProperty(\"length\"))for(var i\u003d0;i\u003ct.length;i++)n\u003dn.concat(c(t[i]));else{if(!t.hasOwnProperty(\"columns\"))return t;n\u003dn.concat(c(t.columns))}return n}function h(){return r.extend(!0,[],t)}i(t),this.hasDepth\u003dfunction(){for(var n in t)if(t[n].hasOwnProperty(\"columns\"))return!0;return!1},this.getTreeColumns\u003dfunction(){return t},this.extractColumns\u003dfunction(){return this.hasDepth()?c(t):t},this.getDepth\u003dfunction(){return s(t)},this.getColumnsInDepth\u003dfunction(n){return l(t,n)},this.getColumnsInGroup\u003dfunction(t){return c(t)},this.visibleColumns\u003dfunction(){return o(h(),(function(){return this.visible}))},this.filter\u003dfunction(t){return o(h(),t)},this.reOrder\u003dfunction(n){return e(t,n)},this.getById\u003dfunction(t){return n[t]},this.getInIds\u003dfunction(t){return t.map((function(t){return n[t]}))}},keyCode:{SPACE:8,BACKSPACE:8,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,ESC:27,HOME:36,INSERT:45,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,RIGHT:39,TAB:9,UP:38,A:65,C:67,V:86},preClickClassName:\"slick-edit-preclick\",GridAutosizeColsMode:{None:\"NOA\",LegacyOff:\"LOF\",LegacyForceFit:\"LFF\",IgnoreViewport:\"IGV\",FitColsToViewport:\"FCV\",FitViewportToCols:\"FVC\"},ColAutosizeMode:{Locked:\"LCK\",Guide:\"GUI\",Content:\"CON\",ContentIntelligent:\"CTI\"},RowSelectionMode:{FirstRow:\"FS1\",FirstNRows:\"FSN\",AllRows:\"ALL\",LastRow:\"LS1\"},ValueFilterMode:{None:\"NONE\",DeDuplicate:\"DEDP\",GetGreatestAndSub:\"GR8T\",GetLongestTextAndSub:\"LNSB\",GetLongestText:\"LNSC\"},WidthEvalMode:{CanvasTextSize:\"CANV\",HTML:\"HTML\"}}},\n      477: function _(e,t,o,l,n){var i\u003de(474),c\u003de(476);t.exports\u003d{CheckboxSelectColumn:function(e){var t,o\u003dnull,l\u003dk(),n\u003dnew c.EventHandler,r\u003d{},d\u003d!1,a\u003di.extend(!0,{},{columnId:\"_checkbox_selector\",cssClass:null,hideSelectAllCheckbox:!1,toolTip:\"Select/Deselect All\",width:30,hideInColumnTitleRow:!1,hideInFilterHeaderRow:!0},e);function s(){t.updateColumnHeader(a.columnId,\"\",\"\")}function u(){i(\"#filter-checkbox-selectall-container\").hide()}function h(e,n){var c,s,u,h\u003dt.getSelectedRows(),f\u003d{},p\u003d0;if(\"function\"\u003d\u003dtypeof o)for(u\u003d0;u\u003ct.getDataLength();u++){C(s,t.getDataItem(u),t)||p++}var b\u003d[];for(s\u003d0;s\u003ch.length;s++){c\u003dh[s],C(s,t.getDataItem(c),t)?(f[c]\u003d!0,f[c]!\u003d\u003dr[c]\u0026\u0026(t.invalidateRow(c),delete r[c])):b.push(c)}for(s in r)t.invalidateRow(s);(r\u003df,t.render(),d\u003dh.length\u0026\u0026h.length+p\u003e\u003dt.getDataLength(),a.hideInColumnTitleRow||a.hideSelectAllCheckbox||R(d),a.hideInFilterHeaderRow)||i(\"#header-filter-selector\"+l).prop(\"checked\",d);if(b.length\u003e0){for(s\u003d0;s\u003cb.length;s++){var m\u003dh.indexOf(b[s]);h.splice(m,1)}t.setSelectedRows(h)}}function f(e,o){32\u003d\u003de.which\u0026\u0026t.getColumns()[o.cell].id\u003d\u003d\u003da.columnId\u0026\u0026(t.getEditorLock().isActive()\u0026\u0026!t.getEditorLock().commitCurrentEdit()||b(o.row),e.preventDefault(),e.stopImmediatePropagation())}function p(e,o){if(t.getColumns()[o.cell].id\u003d\u003d\u003da.columnId\u0026\u0026i(e.target).is(\":checkbox\")){if(t.getEditorLock().isActive()\u0026\u0026!t.getEditorLock().commitCurrentEdit())return e.preventDefault(),void e.stopImmediatePropagation();b(o.row),e.stopPropagation(),e.stopImmediatePropagation()}}function b(e){var o\u003dt.getDataItem(e);C(e,o,t)\u0026\u0026(r[e]?t.setSelectedRows(i.grep(t.getSelectedRows(),(function(t){return t!\u003de}))):t.setSelectedRows(t.getSelectedRows().concat(e)),t.setActiveCell(e,function(){if(null\u003d\u003d\u003dg){g\u003d0;for(var e\u003dt.getColumns(),o\u003d0;o\u003ce.length;o++)e[o].id\u003d\u003da.columnId\u0026\u0026(g\u003do)}return g}()))}function m(e,o){if(o.column.id\u003d\u003da.columnId\u0026\u0026i(e.target).is(\":checkbox\")){if(t.getEditorLock().isActive()\u0026\u0026!t.getEditorLock().commitCurrentEdit())return e.preventDefault(),void e.stopImmediatePropagation();if(i(e.target).is(\":checked\")){for(var l\u003d[],n\u003d0;n\u003ct.getDataLength();n++){C(n,t.getDataItem(n),t)\u0026\u0026l.push(n)}t.setSelectedRows(l)}else t.setSelectedRows([]);e.stopPropagation(),e.stopImmediatePropagation()}}\"function\"\u003d\u003dtypeof a.selectableOverride\u0026\u0026v(a.selectableOverride);var g\u003dnull;function k(){return Math.round(1e7*Math.random())}function w(e,t,o,l,n,i){var c\u003dk()+e;return n\u0026\u0026C(e,n,i)?r[e]?\"\u003cinput id\u003d\u0027selector\"+c+\"\u0027 type\u003d\u0027checkbox\u0027 checked\u003d\u0027checked\u0027\u003e\u003clabel for\u003d\u0027selector\"+c+\"\u0027\u003e\u003c/label\u003e\":\"\u003cinput id\u003d\u0027selector\"+c+\"\u0027 type\u003d\u0027checkbox\u0027\u003e\u003clabel for\u003d\u0027selector\"+c+\"\u0027\u003e\u003c/label\u003e\":null}function C(e,t,l){return\"function\"!\u003dtypeof o||o(e,t,l)}function R(e){e?t.updateColumnHeader(a.columnId,\"\u003cinput id\u003d\u0027header-selector\"+l+\"\u0027 type\u003d\u0027checkbox\u0027 checked\u003d\u0027checked\u0027\u003e\u003clabel for\u003d\u0027header-selector\"+l+\"\u0027\u003e\u003c/label\u003e\",a.toolTip):t.updateColumnHeader(a.columnId,\"\u003cinput id\u003d\u0027header-selector\"+l+\"\u0027 type\u003d\u0027checkbox\u0027\u003e\u003clabel for\u003d\u0027header-selector\"+l+\"\u0027\u003e\u003c/label\u003e\",a.toolTip)}function v(e){o\u003de}i.extend(this,{init:function(e){t\u003de,n.subscribe(t.onSelectedRowsChanged,h).subscribe(t.onClick,p).subscribe(t.onKeyDown,f),a.hideInFilterHeaderRow||function(e){e.onHeaderRowCellRendered.subscribe((function(e,t){\"sel\"\u003d\u003d\u003dt.column.field\u0026\u0026(i(t.node).empty(),i(\"\u003cspan id\u003d\u0027filter-checkbox-selectall-container\u0027\u003e\u003cinput id\u003d\u0027header-filter-selector\"+l+\"\u0027 type\u003d\u0027checkbox\u0027\u003e\u003clabel for\u003d\u0027header-filter-selector\"+l+\"\u0027\u003e\u003c/label\u003e\u003c/span\u003e\").appendTo(t.node).on(\"click\",(function(e){m(e,t)})))}))}(e),a.hideInColumnTitleRow||n.subscribe(t.onHeaderClick,m)},destroy:function(){n.unsubscribeAll()},pluginName:\"CheckboxSelectColumn\",deSelectRows:function(e){var o,l\u003de.length,n\u003d[];for(o\u003d0;o\u003cl;o++)r[e[o]]\u0026\u0026(n[n.length]\u003de[o]);t.setSelectedRows(i.grep(t.getSelectedRows(),(function(e){return n.indexOf(e)\u003c0})))},selectRows:function(e){var o,l\u003de.length,n\u003d[];for(o\u003d0;o\u003cl;o++)r[e[o]]||(n[n.length]\u003de[o]);t.setSelectedRows(t.getSelectedRows().concat(n))},getColumnDefinition:function(){return{id:a.columnId,name:a.hideSelectAllCheckbox||a.hideInColumnTitleRow?\"\":\"\u003cinput id\u003d\u0027header-selector\"+l+\"\u0027 type\u003d\u0027checkbox\u0027\u003e\u003clabel for\u003d\u0027header-selector\"+l+\"\u0027\u003e\u003c/label\u003e\",toolTip:a.hideSelectAllCheckbox||a.hideInColumnTitleRow?\"\":a.toolTip,field:\"sel\",width:a.width,resizable:!1,sortable:!1,cssClass:a.cssClass,hideSelectAllCheckbox:a.hideSelectAllCheckbox,formatter:w}},getOptions:function(){return a},selectableOverride:v,setOptions:function(e){if((a\u003di.extend(!0,{},a,e)).hideSelectAllCheckbox)s(),u();else if(a.hideInColumnTitleRow?s():(R(d),n.subscribe(t.onHeaderClick,m)),a.hideInFilterHeaderRow)u();else{var o\u003di(\"#filter-checkbox-selectall-container\");o.show(),o.find(\u0027input[type\u003d\"checkbox\"]\u0027).prop(\"checked\",d)}}})}}},\n      478: function _(e,t,o,l,n){var a\u003de(474),r\u003de(476),i\u003dr.keyCode;t.exports\u003d{CellExternalCopyManager:function(e){var t,o,l\u003dthis,n\u003de||{},s\u003dn.copiedCellStyleLayerKey||\"copy-manager\",u\u003dn.copiedCellStyle||\"copied\",c\u003d0,d\u003dn.bodyElement||document.body,f\u003dn.onCopyInit||null,h\u003dn.onCopySuccess||null;function C(e){if(n.headerColumnValueExtractor){var t\u003dn.headerColumnValueExtractor(e);if(t)return t}return e.name}function m(e,o,l){if(n.dataItemColumnValueExtractor){var r\u003dn.dataItemColumnValueExtractor(e,o);if(r)return r}var i\u003d\"\";if(o.editor){var s\u003d{container:a(\"\u003cp\u003e\"),column:o,position:{top:0,left:0},grid:t,event:l},u\u003dnew o.editor(s);u.loadValue(e),i\u003du.serializeValue(),u.destroy()}else i\u003de[o.field];return i}function g(e,o,l){if(o.denyPaste)return null;if(n.dataItemColumnValueSetter)return n.dataItemColumnValueSetter(e,o,l);if(o.editor){var r\u003d{container:a(\"body\"),column:o,position:{top:0,left:0},grid:t},i\u003dnew o.editor(r);i.loadValue(e),i.applyValue(e,l),i.destroy()}else e[o.field]\u003dl}function p(e){var t\u003ddocument.createElement(\"textarea\");return t.style.position\u003d\"absolute\",t.style.left\u003d\"-1000px\",t.style.top\u003ddocument.body.scrollTop+\"px\",t.value\u003de,d.appendChild(t),t.select(),t}function y(e,a){var r;if(!t.getEditorLock().isActive()||t.getOptions().autoEdit){if(e.which\u003d\u003di.ESC\u0026\u0026o\u0026\u0026(e.preventDefault(),w(),l.onCopyCancelled.notify({ranges:o}),o\u003dnull),(e.which\u003d\u003d\u003di.C||e.which\u003d\u003d\u003di.INSERT)\u0026\u0026(e.ctrlKey||e.metaKey)\u0026\u0026!e.shiftKey\u0026\u0026(f\u0026\u0026f.call(),0!\u003d\u003d(r\u003dt.getSelectionModel().getSelectedRanges()).length)){o\u003dr,v(r),l.onCopyCells.notify({ranges:r});for(var s\u003dt.getColumns(),u\u003d\"\",c\u003d0;c\u003cr.length;c++){for(var y\u003dr[c],D\u003d[],S\u003dy.fromRow;S\u003cy.toRow+1;S++){var R\u003d[],x\u003dt.getDataItem(S);if(0\u003d\u003d\u003dD.length\u0026\u0026n.includeHeaderWhenCopying){for(var E\u003d[],V\u003dy.fromCell;V\u003cy.toCell+1;V++)s[V].name.length\u003e0\u0026\u0026E.push(C(s[V]));D.push(E.join(\"\\t\"))}for(V\u003dy.fromCell;V\u003cy.toCell+1;V++)R.push(m(x,s[V],e));D.push(R.join(\"\\t\"))}u+\u003dD.join(\"\\r\\n\")+\"\\r\\n\"}if(window.clipboardData)return window.clipboardData.setData(\"Text\",u),!0;var b\u003ddocument.activeElement;if((M\u003dp(u)).focus(),setTimeout((function(){d.removeChild(M),b?b.focus():console.log(\"Not element to restore focus to after copy?\")}),100),h){var I\u003d0;I\u003d1\u003d\u003d\u003dr.length?r[0].toRow+1-r[0].fromRow:r.length,h.call(this,I)}return!1}if(!n.readOnlyMode\u0026\u0026(e.which\u003d\u003d\u003di.V\u0026\u0026(e.ctrlKey||e.metaKey)\u0026\u0026!e.shiftKey||e.which\u003d\u003d\u003di.INSERT\u0026\u0026e.shiftKey\u0026\u0026!e.ctrlKey)){var M\u003dp(\"\");return setTimeout((function(){!function(e,t){var o\u003de.getColumns(),a\u003dt.value.split(/[\\n\\f\\r]/);\"\"\u003d\u003d\u003da[a.length-1]\u0026\u0026a.pop();var r\u003d[],i\u003d0;d.removeChild(t);for(var s\u003d0;s\u003ca.length;s++)\"\"!\u003d\u003da[s]?r[i++]\u003da[s].split(\"\\t\"):r[i++]\u003d[\"\"];var u\u003de.getActiveCell(),c\u003de.getSelectionModel().getSelectedRanges(),f\u003dc\u0026\u0026c.length?c[0]:null,h\u003dnull,C\u003dnull;if(f)h\u003df.fromRow,C\u003df.fromCell;else{if(!u)return;h\u003du.row,C\u003du.cell}var m\u003d!1,p\u003dr.length,y\u003dr.length?r[0].length:0;1\u003d\u003dr.length\u0026\u00261\u003d\u003dr[0].length\u0026\u0026f\u0026\u0026(m\u003d!0,p\u003df.toRow-f.fromRow+1,y\u003df.toCell-f.fromCell+1);var w\u003de.getData().length-h,D\u003d0;if(w\u003cp\u0026\u0026n.newRowCreator){var S\u003de.getData();for(D\u003d1;D\u003c\u003dp-w;D++)S.push({});e.setData(S),e.render()}var R\u003dh+p\u003ee.getDataLength();if(n.newRowCreator\u0026\u0026R){var x\u003dh+p-e.getDataLength();n.newRowCreator(x)}var E\u003d{isClipboardCommand:!0,clippedRange:r,oldValues:[],cellExternalCopyManager:l,_options:n,setDataItemValueForColumn:g,markCopySelection:v,oneCellToMultiple:m,activeRow:h,activeCell:C,destH:p,destW:y,maxDestY:e.getDataLength(),maxDestX:e.getColumns().length,h:0,w:0,execute:function(){this.h\u003d0;for(var t\u003d0;t\u003cthis.destH;t++){this.oldValues[t]\u003d[],this.w\u003d0,this.h++;for(var l\u003d0;l\u003cthis.destW;l++){this.w++;var n\u003dh+t,a\u003dC+l;if(n\u003cthis.maxDestY\u0026\u0026a\u003cthis.maxDestX){e.getCellNode(n,a);var i\u003de.getDataItem(n);this.oldValues[t][l]\u003di[o[a].field],m?this.setDataItemValueForColumn(i,o[a],r[0][0]):this.setDataItemValueForColumn(i,o[a],r[t]?r[t][l]:\"\"),e.updateCell(n,a),e.onCellChange.notify({row:n,cell:a,item:i,grid:e})}}}var s\u003d{fromCell:C,fromRow:h,toCell:C+this.w-1,toRow:h+this.h-1};this.markCopySelection([s]),e.getSelectionModel().setSelectedRanges([s]),this.cellExternalCopyManager.onPasteCells.notify({ranges:[s]})},undo:function(){for(var t\u003d0;t\u003cthis.destH;t++)for(var l\u003d0;l\u003cthis.destW;l++){var n\u003dh+t,a\u003dC+l;if(n\u003cthis.maxDestY\u0026\u0026a\u003cthis.maxDestX){e.getCellNode(n,a);var r\u003de.getDataItem(n);m?this.setDataItemValueForColumn(r,o[a],this.oldValues[0][0]):this.setDataItemValueForColumn(r,o[a],this.oldValues[t][l]),e.updateCell(n,a),e.onCellChange.notify({row:n,cell:a,item:r,grid:e})}}var i\u003d{fromCell:C,fromRow:h,toCell:C+this.w-1,toRow:h+this.h-1};if(this.markCopySelection([i]),e.getSelectionModel().setSelectedRanges([i]),this.cellExternalCopyManager.onPasteCells.notify({ranges:[i]}),D\u003e1){for(var s\u003de.getData();D\u003e1;D--)s.splice(s.length-1,1);e.setData(s),e.render()}}};n.clipboardCommandHandler?n.clipboardCommandHandler(E):E.execute()}(t,M)}),100),!1}}}function v(e){w();for(var o\u003dt.getColumns(),n\u003d{},a\u003d0;a\u003ce.length;a++)for(var r\u003de[a].fromRow;r\u003c\u003de[a].toRow;r++){n[r]\u003d{};for(var i\u003de[a].fromCell;i\u003c\u003de[a].toCell\u0026\u0026i\u003co.length;i++)n[r][o[i].id]\u003du}t.setCellCssStyles(s,n),clearTimeout(c),c\u003dsetTimeout((function(){l.clearCopySelection()}),2e3)}function w(){t.removeCellCssStyles(s)}a.extend(this,{init:function(e){(t\u003de).onKeyDown.subscribe(y);var o\u003de.getSelectionModel();if(!o)throw new Error(\"Selection model is mandatory for this plugin. Please set a selection model on the grid before adding this plugin: grid.setSelectionModel(new Slick.CellSelectionModel())\");o.onSelectedRangesChanged.subscribe((function(e,o){t.focus()}))},destroy:function(){t.onKeyDown.unsubscribe(y)},pluginName:\"CellExternalCopyManager\",clearCopySelection:w,handleKeyDown:y,onCopyCells:new r.Event,onCopyCancelled:new r.Event,onPasteCells:new r.Event,setIncludeHeaderWhenCopying:function(e){n.includeHeaderWhenCopying\u003de}})}}},\n      479: function _(r,t,o,_,e){var p\u003dr(1);p.__exportStar(r(476),t.exports),p.__exportStar(r(480),t.exports),p.__exportStar(r(483),t.exports),p.__exportStar(r(484),t.exports),p.__exportStar(r(485),t.exports),p.__exportStar(r(486),t.exports),p.__exportStar(r(487),t.exports)},\n      480: function _(require,module,exports,__esModule,__esExport){\n      /**\n           * @license\n           * (c) 2009-2016 Michael Leibman\n           * michael{dot}leibman{at}gmail{dot}com\n           * http://github.com/mleibman/slickgrid\n           *\n           * Distributed under MIT license.\n           * All rights reserved.\n           *\n           * SlickGrid v2.4\n           *\n           * NOTES:\n           *     Cell/row DOM manipulations are done directly bypassing jQuery\u0027s DOM manipulation methods.\n           *     This increases the speed dramatically, but can only be done safely because there are no event handlers\n           *     or data associated with any cell/row DOM nodes.  Cell editors must make sure they implement .destroy()\n           *     and do proper cleanup.\n           */\n      var $\u003drequire(474),Slick\u003drequire(476),scrollbarDimensions,maxSupportedCssHeight;function SlickGrid(container,data,columns,options){$.fn.drag||require(481),$.fn.drop||require(482);var defaults\u003d{alwaysShowVerticalScroll:!1,alwaysAllowHorizontalScroll:!1,explicitInitialization:!1,rowHeight:25,defaultColumnWidth:80,enableAddRow:!1,leaveSpaceForNewRows:!1,editable:!1,autoEdit:!0,suppressActiveCellChangeOnEdit:!1,enableCellNavigation:!0,enableColumnReorder:!0,asyncEditorLoading:!1,asyncEditorLoadDelay:100,forceFitColumns:!1,enableAsyncPostRender:!1,asyncPostRenderDelay:50,enableAsyncPostRenderCleanup:!1,asyncPostRenderCleanupDelay:40,autoHeight:!1,editorLock:Slick.GlobalEditorLock,showColumnHeader:!0,showHeaderRow:!1,headerRowHeight:25,createFooterRow:!1,showFooterRow:!1,footerRowHeight:25,createPreHeaderPanel:!1,showPreHeaderPanel:!1,preHeaderPanelHeight:25,showTopPanel:!1,topPanelHeight:25,formatterFactory:null,editorFactory:null,cellFlashingCssClass:\"flashing\",selectedCellCssClass:\"selected\",multiSelect:!0,enableTextSelectionOnCells:!1,dataItemColumnValueExtractor:null,frozenBottom:!1,frozenColumn:-1,frozenRow:-1,fullWidthRows:!1,multiColumnSort:!1,numberedMultiColumnSort:!1,tristateMultiColumnSort:!1,sortColNumberInSeparateSpan:!1,defaultFormatter,forceSyncScrolling:!1,addNewRowCssClass:\"new-row\",preserveCopiedSelectionOnPaste:!1,showCellSelection:!0,viewportClass:null,minRowBuffer:3,emulatePagingWhenScrolling:!0,editorCellNavOnLRKeys:!1,doPaging:!0,autosizeColsMode:Slick.GridAutosizeColsMode.LegacyOff,autosizeColPaddingPx:4,autosizeTextAvgToMWidthRatio:.75,viewportSwitchToScrollModeWidthPercent:void 0,viewportMinWidthPx:void 0,viewportMaxWidthPx:void 0},columnDefaults\u003d{name:\"\",resizable:!0,sortable:!1,minWidth:30,maxWidth:void 0,rerenderOnResize:!1,headerCssClass:null,defaultSortAsc:!0,focusable:!0,selectable:!0},columnAutosizeDefaults\u003d{ignoreHeaderText:!1,colValueArray:void 0,allowAddlPercent:void 0,formatterOverride:void 0,autosizeMode:Slick.ColAutosizeMode.ContentIntelligent,rowSelectionModeOnInit:void 0,rowSelectionMode:Slick.RowSelectionMode.FirstNRows,rowSelectionCount:100,valueFilterMode:Slick.ValueFilterMode.None,widthEvalMode:Slick.WidthEvalMode.CanvasTextSize,sizeToRemaining:void 0,widthPx:void 0,colDataTypeOf:void 0},th,h,ph,n,cj,page\u003d0,offset\u003d0,vScrollDir\u003d1,initialized\u003d!1,$container,uid\u003d\"slickgrid_\"+Math.round(1e6*Math.random()),self\u003dthis,$focusSink,$focusSink2,$groupHeaders\u003d$(),$headerScroller,$headers,$headerRow,$headerRowScroller,$headerRowSpacerL,$headerRowSpacerR,$footerRow,$footerRowScroller,$footerRowSpacerL,$footerRowSpacerR,$preHeaderPanel,$preHeaderPanelScroller,$preHeaderPanelSpacer,$preHeaderPanelR,$preHeaderPanelScrollerR,$preHeaderPanelSpacerR,$topPanelScroller,$topPanel,$viewport,$canvas,$style,$boundAncestors,treeColumns,stylesheet,columnCssRulesL,columnCssRulesR,viewportH,viewportW,canvasWidth,canvasWidthL,canvasWidthR,headersWidth,headersWidthL,headersWidthR,viewportHasHScroll,viewportHasVScroll,headerColumnWidthDiff\u003d0,headerColumnHeightDiff\u003d0,cellWidthDiff\u003d0,cellHeightDiff\u003d0,jQueryNewWidthBehaviour\u003d!1,absoluteColumnMinWidth,hasFrozenRows\u003d!1,frozenRowsHeight\u003d0,actualFrozenRow\u003d-1,paneTopH\u003d0,paneBottomH\u003d0,viewportTopH\u003d0,viewportBottomH\u003d0,topPanelH\u003d0,headerRowH\u003d0,footerRowH\u003d0,tabbingDirection\u003d1,$activeCanvasNode,$activeViewportNode,activePosX,activeRow,activeCell,activeCellNode\u003dnull,currentEditor\u003dnull,serializedEditorValue,editController,rowsCache\u003d{},renderedRows\u003d0,numVisibleRows\u003d0,prevScrollTop\u003d0,scrollTop\u003d0,lastRenderedScrollTop\u003d0,lastRenderedScrollLeft\u003d0,prevScrollLeft\u003d0,scrollLeft\u003d0,selectionModel,selectedRows\u003d[],plugins\u003d[],cellCssClasses\u003d{},columnsById\u003d{},sortColumns\u003d[],columnPosLeft\u003d[],columnPosRight\u003d[],pagingActive\u003d!1,pagingIsLastPage\u003d!1,scrollThrottle\u003dActionThrottle(render,50),h_editorLoader\u003dnull,h_render\u003dnull,h_postrender\u003dnull,h_postrenderCleanup\u003dnull,postProcessedRows\u003d{},postProcessToRow\u003dnull,postProcessFromRow\u003dnull,postProcessedCleanupQueue\u003d[],postProcessgroupId\u003d0,counter_rows_rendered\u003d0,counter_rows_removed\u003d0,rowNodeFromLastMouseWheelEvent,zombieRowNodeFromLastMouseWheelEvent,zombieRowCacheFromLastMouseWheelEvent,zombieRowPostProcessedFromLastMouseWheelEvent,$paneHeaderL,$paneHeaderR,$paneTopL,$paneTopR,$paneBottomL,$paneBottomR,$headerScrollerL,$headerScrollerR,$headerL,$headerR,$groupHeadersL,$groupHeadersR,$headerRowScrollerL,$headerRowScrollerR,$footerRowScrollerL,$footerRowScrollerR,$headerRowL,$headerRowR,$footerRowL,$footerRowR,$topPanelScrollerL,$topPanelScrollerR,$topPanelL,$topPanelR,$viewportTopL,$viewportTopR,$viewportBottomL,$viewportBottomR,$canvasTopL,$canvasTopR,$canvasBottomL,$canvasBottomR,$viewportScrollContainerX,$viewportScrollContainerY,$headerScrollContainer,$headerRowScrollContainer,$footerRowScrollContainer,cssShow\u003d{position:\"absolute\",visibility:\"hidden\",display:\"block\"},$hiddenParents,oldProps\u003d[],columnResizeDragging\u003d!1;function init(){if(($container\u003dcontainer instanceof $?container:$(container)).length\u003c1)throw new Error(\"SlickGrid requires a valid container, \"+container+\" does not exist in the DOM.\");if(cacheCssForHiddenInit(),maxSupportedCssHeight\u003dmaxSupportedCssHeight||getMaxSupportedCssHeight(),options\u003d$.extend({},defaults,options),validateAndEnforceOptions(),columnDefaults.width\u003doptions.defaultColumnWidth,treeColumns\u003dnew Slick.TreeColumns(columns),columns\u003dtreeColumns.extractColumns(),updateColumnProps(),options.enableColumnReorder\u0026\u0026!$.fn.sortable)throw new Error(\"SlickGrid\u0027s \u0027enableColumnReorder \u003d true\u0027 option requires jquery-ui.sortable module to be loaded\");if(editController\u003d{commitCurrentEdit,cancelCurrentEdit},$container.empty().css(\"overflow\",\"hidden\").css(\"outline\",0).addClass(uid).addClass(\"ui-widget\"),/relative|absolute|fixed/.test($container.css(\"position\"))||$container.css(\"position\",\"relative\"),$focusSink\u003d$(\"\u003cdiv tabIndex\u003d\u00270\u0027 hideFocus style\u003d\u0027position:fixed;width:0;height:0;top:0;left:0;outline:0;\u0027\u003e\u003c/div\u003e\").appendTo($container),$paneHeaderL\u003d$(\"\u003cdiv class\u003d\u0027slick-pane slick-pane-header slick-pane-left\u0027 tabIndex\u003d\u00270\u0027 /\u003e\").appendTo($container),$paneHeaderR\u003d$(\"\u003cdiv class\u003d\u0027slick-pane slick-pane-header slick-pane-right\u0027 tabIndex\u003d\u00270\u0027 /\u003e\").appendTo($container),$paneTopL\u003d$(\"\u003cdiv class\u003d\u0027slick-pane slick-pane-top slick-pane-left\u0027 tabIndex\u003d\u00270\u0027 /\u003e\").appendTo($container),$paneTopR\u003d$(\"\u003cdiv class\u003d\u0027slick-pane slick-pane-top slick-pane-right\u0027 tabIndex\u003d\u00270\u0027 /\u003e\").appendTo($container),$paneBottomL\u003d$(\"\u003cdiv class\u003d\u0027slick-pane slick-pane-bottom slick-pane-left\u0027 tabIndex\u003d\u00270\u0027 /\u003e\").appendTo($container),$paneBottomR\u003d$(\"\u003cdiv class\u003d\u0027slick-pane slick-pane-bottom slick-pane-right\u0027 tabIndex\u003d\u00270\u0027 /\u003e\").appendTo($container),options.createPreHeaderPanel\u0026\u0026($preHeaderPanelScroller\u003d$(\"\u003cdiv class\u003d\u0027slick-preheader-panel ui-state-default\u0027 style\u003d\u0027overflow:hidden;position:relative;\u0027 /\u003e\").appendTo($paneHeaderL),$preHeaderPanel\u003d$(\"\u003cdiv /\u003e\").appendTo($preHeaderPanelScroller),$preHeaderPanelSpacer\u003d$(\"\u003cdiv style\u003d\u0027display:block;height:1px;position:absolute;top:0;left:0;\u0027\u003e\u003c/div\u003e\").appendTo($preHeaderPanelScroller),$preHeaderPanelScrollerR\u003d$(\"\u003cdiv class\u003d\u0027slick-preheader-panel ui-state-default\u0027 style\u003d\u0027overflow:hidden;position:relative;\u0027 /\u003e\").appendTo($paneHeaderR),$preHeaderPanelR\u003d$(\"\u003cdiv /\u003e\").appendTo($preHeaderPanelScrollerR),$preHeaderPanelSpacerR\u003d$(\"\u003cdiv style\u003d\u0027display:block;height:1px;position:absolute;top:0;left:0;\u0027\u003e\u003c/div\u003e\").appendTo($preHeaderPanelScrollerR),options.showPreHeaderPanel||($preHeaderPanelScroller.hide(),$preHeaderPanelScrollerR.hide())),$headerScrollerL\u003d$(\"\u003cdiv class\u003d\u0027slick-header ui-state-default slick-header-left\u0027 /\u003e\").appendTo($paneHeaderL),$headerScrollerR\u003d$(\"\u003cdiv class\u003d\u0027slick-header ui-state-default slick-header-right\u0027 /\u003e\").appendTo($paneHeaderR),$headerScroller\u003d$().add($headerScrollerL).add($headerScrollerR),treeColumns.hasDepth()){$groupHeadersL\u003d[],$groupHeadersR\u003d[];for(var e\u003d0;e\u003ctreeColumns.getDepth()-1;e++)$groupHeadersL[e]\u003d$(\"\u003cdiv class\u003d\u0027slick-group-header-columns slick-group-header-columns-left\u0027 style\u003d\u0027left:-1000px\u0027 /\u003e\").appendTo($headerScrollerL),$groupHeadersR[e]\u003d$(\"\u003cdiv class\u003d\u0027slick-group-header-columns slick-group-header-columns-right\u0027 style\u003d\u0027left:-1000px\u0027 /\u003e\").appendTo($headerScrollerR);$groupHeaders\u003d$().add($groupHeadersL).add($groupHeadersR)}$headerL\u003d$(\"\u003cdiv class\u003d\u0027slick-header-columns slick-header-columns-left\u0027 style\u003d\u0027left:-1000px\u0027 /\u003e\").appendTo($headerScrollerL),$headerR\u003d$(\"\u003cdiv class\u003d\u0027slick-header-columns slick-header-columns-right\u0027 style\u003d\u0027left:-1000px\u0027 /\u003e\").appendTo($headerScrollerR),$headers\u003d$().add($headerL).add($headerR),$headerRowScrollerL\u003d$(\"\u003cdiv class\u003d\u0027slick-headerrow ui-state-default\u0027 /\u003e\").appendTo($paneTopL),$headerRowScrollerR\u003d$(\"\u003cdiv class\u003d\u0027slick-headerrow ui-state-default\u0027 /\u003e\").appendTo($paneTopR),$headerRowScroller\u003d$().add($headerRowScrollerL).add($headerRowScrollerR),$headerRowSpacerL\u003d$(\"\u003cdiv style\u003d\u0027display:block;height:1px;position:absolute;top:0;left:0;\u0027\u003e\u003c/div\u003e\").appendTo($headerRowScrollerL),$headerRowSpacerR\u003d$(\"\u003cdiv style\u003d\u0027display:block;height:1px;position:absolute;top:0;left:0;\u0027\u003e\u003c/div\u003e\").appendTo($headerRowScrollerR),$headerRowL\u003d$(\"\u003cdiv class\u003d\u0027slick-headerrow-columns slick-headerrow-columns-left\u0027 /\u003e\").appendTo($headerRowScrollerL),$headerRowR\u003d$(\"\u003cdiv class\u003d\u0027slick-headerrow-columns slick-headerrow-columns-right\u0027 /\u003e\").appendTo($headerRowScrollerR),$headerRow\u003d$().add($headerRowL).add($headerRowR),$topPanelScrollerL\u003d$(\"\u003cdiv class\u003d\u0027slick-top-panel-scroller ui-state-default\u0027 /\u003e\").appendTo($paneTopL),$topPanelScrollerR\u003d$(\"\u003cdiv class\u003d\u0027slick-top-panel-scroller ui-state-default\u0027 /\u003e\").appendTo($paneTopR),$topPanelScroller\u003d$().add($topPanelScrollerL).add($topPanelScrollerR),$topPanelL\u003d$(\"\u003cdiv class\u003d\u0027slick-top-panel\u0027 style\u003d\u0027width:10000px\u0027 /\u003e\").appendTo($topPanelScrollerL),$topPanelR\u003d$(\"\u003cdiv class\u003d\u0027slick-top-panel\u0027 style\u003d\u0027width:10000px\u0027 /\u003e\").appendTo($topPanelScrollerR),$topPanel\u003d$().add($topPanelL).add($topPanelR),options.showColumnHeader||$headerScroller.hide(),options.showTopPanel||$topPanelScroller.hide(),options.showHeaderRow||$headerRowScroller.hide(),$viewportTopL\u003d$(\"\u003cdiv class\u003d\u0027slick-viewport slick-viewport-top slick-viewport-left\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($paneTopL),$viewportTopR\u003d$(\"\u003cdiv class\u003d\u0027slick-viewport slick-viewport-top slick-viewport-right\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($paneTopR),$viewportBottomL\u003d$(\"\u003cdiv class\u003d\u0027slick-viewport slick-viewport-bottom slick-viewport-left\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($paneBottomL),$viewportBottomR\u003d$(\"\u003cdiv class\u003d\u0027slick-viewport slick-viewport-bottom slick-viewport-right\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($paneBottomR),$viewport\u003d$().add($viewportTopL).add($viewportTopR).add($viewportBottomL).add($viewportBottomR),$activeViewportNode\u003d$viewportTopL,$canvasTopL\u003d$(\"\u003cdiv class\u003d\u0027grid-canvas grid-canvas-top grid-canvas-left\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($viewportTopL),$canvasTopR\u003d$(\"\u003cdiv class\u003d\u0027grid-canvas grid-canvas-top grid-canvas-right\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($viewportTopR),$canvasBottomL\u003d$(\"\u003cdiv class\u003d\u0027grid-canvas grid-canvas-bottom grid-canvas-left\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($viewportBottomL),$canvasBottomR\u003d$(\"\u003cdiv class\u003d\u0027grid-canvas grid-canvas-bottom grid-canvas-right\u0027 tabIndex\u003d\u00270\u0027 hideFocus /\u003e\").appendTo($viewportBottomR),options.viewportClass\u0026\u0026$viewport.toggleClass(options.viewportClass,!0),$canvas\u003d$().add($canvasTopL).add($canvasTopR).add($canvasBottomL).add($canvasBottomR),scrollbarDimensions\u003dscrollbarDimensions||measureScrollbar(),$activeCanvasNode\u003d$canvasTopL,$preHeaderPanelSpacer\u0026\u0026$preHeaderPanelSpacer.css(\"width\",getCanvasWidth()+scrollbarDimensions.width+\"px\"),$headers.width(getHeadersWidth()),$headerRowSpacerL.css(\"width\",getCanvasWidth()+scrollbarDimensions.width+\"px\"),$headerRowSpacerR.css(\"width\",getCanvasWidth()+scrollbarDimensions.width+\"px\"),options.createFooterRow\u0026\u0026($footerRowScrollerR\u003d$(\"\u003cdiv class\u003d\u0027slick-footerrow ui-state-default\u0027 /\u003e\").appendTo($paneTopR),$footerRowScrollerL\u003d$(\"\u003cdiv class\u003d\u0027slick-footerrow ui-state-default\u0027 /\u003e\").appendTo($paneTopL),$footerRowScroller\u003d$().add($footerRowScrollerL).add($footerRowScrollerR),$footerRowSpacerL\u003d$(\"\u003cdiv style\u003d\u0027display:block;height:1px;position:absolute;top:0;left:0;\u0027\u003e\u003c/div\u003e\").css(\"width\",getCanvasWidth()+scrollbarDimensions.width+\"px\").appendTo($footerRowScrollerL),$footerRowSpacerR\u003d$(\"\u003cdiv style\u003d\u0027display:block;height:1px;position:absolute;top:0;left:0;\u0027\u003e\u003c/div\u003e\").css(\"width\",getCanvasWidth()+scrollbarDimensions.width+\"px\").appendTo($footerRowScrollerR),$footerRowL\u003d$(\"\u003cdiv class\u003d\u0027slick-footerrow-columns slick-footerrow-columns-left\u0027 /\u003e\").appendTo($footerRowScrollerL),$footerRowR\u003d$(\"\u003cdiv class\u003d\u0027slick-footerrow-columns slick-footerrow-columns-right\u0027 /\u003e\").appendTo($footerRowScrollerR),$footerRow\u003d$().add($footerRowL).add($footerRowR),options.showFooterRow||$footerRowScroller.hide()),$focusSink2\u003d$focusSink.clone().appendTo($container),options.explicitInitialization||finishInitialization()}function finishInitialization(){initialized||(initialized\u003d!0,getViewportWidth(),getViewportHeight(),measureCellPaddingAndBorder(),disableSelection($headers),options.enableTextSelectionOnCells||$viewport.on(\"selectstart.ui\",(function(e){return $(e.target).is(\"input,textarea\")})),setFrozenOptions(),setPaneVisibility(),setScroller(),setOverflow(),updateColumnCaches(),createColumnHeaders(),createColumnGroupHeaders(),createColumnFooter(),setupColumnSort(),createCssRules(),resizeCanvas(),bindAncestorScrollEvents(),$container.on(\"resize.slickgrid\",resizeCanvas),$viewport.on(\"scroll\",handleScroll),$.fn.mousewheel\u0026\u0026$viewport.on(\"mousewheel\",handleMouseWheel),$headerScroller.on(\"contextmenu\",handleHeaderContextMenu).on(\"click\",handleHeaderClick).on(\"mouseenter\",\".slick-header-column\",handleHeaderMouseEnter).on(\"mouseleave\",\".slick-header-column\",handleHeaderMouseLeave),$headerRowScroller.on(\"scroll\",handleHeaderRowScroll),options.createFooterRow\u0026\u0026($footerRow.on(\"contextmenu\",handleFooterContextMenu).on(\"click\",handleFooterClick),$footerRowScroller.on(\"scroll\",handleFooterRowScroll)),options.createPreHeaderPanel\u0026\u0026$preHeaderPanelScroller.on(\"scroll\",handlePreHeaderPanelScroll),$focusSink.add($focusSink2).on(\"keydown\",handleKeyDown),$canvas.on(\"keydown\",handleKeyDown).on(\"click\",handleClick).on(\"dblclick\",handleDblClick).on(\"contextmenu\",handleContextMenu).on(\"draginit\",handleDragInit).on(\"dragstart\",{distance:3},handleDragStart).on(\"drag\",handleDrag).on(\"dragend\",handleDragEnd).on(\"mouseenter\",\".slick-cell\",handleMouseEnter).on(\"mouseleave\",\".slick-cell\",handleMouseLeave),restoreCssFromHiddenInit())}function cacheCssForHiddenInit(){($hiddenParents\u003d$container.parents().addBack().not(\":visible\")).each((function(){var e\u003d{};for(var o in cssShow)e[o]\u003dthis.style[o],this.style[o]\u003dcssShow[o];oldProps.push(e)}))}function restoreCssFromHiddenInit(){$hiddenParents.each((function(e){var o\u003doldProps[e];for(var t in cssShow)this.style[t]\u003do[t]}))}function hasFrozenColumns(){return options.frozenColumn\u003e-1}function registerPlugin(e){plugins.unshift(e),e.init(self)}function unregisterPlugin(e){for(var o\u003dplugins.length;o\u003e\u003d0;o--)if(plugins[o]\u003d\u003d\u003de){plugins[o].destroy\u0026\u0026plugins[o].destroy(),plugins.splice(o,1);break}}function getPluginByName(e){for(var o\u003dplugins.length-1;o\u003e\u003d0;o--)if(plugins[o].pluginName\u003d\u003d\u003de)return plugins[o]}function setSelectionModel(e){selectionModel\u0026\u0026(selectionModel.onSelectedRangesChanged.unsubscribe(handleSelectedRangesChanged),selectionModel.destroy\u0026\u0026selectionModel.destroy()),(selectionModel\u003de)\u0026\u0026(selectionModel.init(self),selectionModel.onSelectedRangesChanged.subscribe(handleSelectedRangesChanged))}function getSelectionModel(){return selectionModel}function getCanvasNode(e,o){e||(e\u003d0),o||(o\u003d0);var t\u003d\"number\"\u003d\u003dtypeof e?e:getColumnIndex(e);return hasFrozenRows\u0026\u0026o\u003e\u003dactualFrozenRow+(options.frozenBottom?0:1)?hasFrozenColumns()\u0026\u0026t\u003eoptions.frozenColumn?$canvasBottomR[0]:$canvasBottomL[0]:hasFrozenColumns()\u0026\u0026t\u003eoptions.frozenColumn?$canvasTopR[0]:$canvasTopL[0]}function getActiveCanvasNode(e){return setActiveCanvasNode(e),$activeCanvasNode[0]}function getCanvases(){return $canvas}function setActiveCanvasNode(e){e\u0026\u0026($activeCanvasNode\u003d$(e.target).closest(\".grid-canvas\"))}function getViewportNode(){return $viewport[0]}function getActiveViewportNode(e){return setActiveViewPortNode(e),$activeViewportNode[0]}function setActiveViewportNode(e){e\u0026\u0026($activeViewportNode\u003d$(e.target).closest(\".slick-viewport\"))}function measureScrollbar(){var e\u003d$(\u0027\u003cdiv class\u003d\"\u0027+$viewport.className+\u0027\" style\u003d\"position:absolute; top:-10000px; left:-10000px; overflow:auto; width:100px; height:100px;\"\u003e\u003c/div\u003e\u0027).appendTo(\"body\"),o\u003d$(\u0027\u003cdiv style\u003d\"width:200px; height:200px; overflow:auto;\"\u003e\u003c/div\u003e\u0027).appendTo(e),t\u003d{width:e[0].offsetWidth-e[0].clientWidth,height:e[0].offsetHeight-e[0].clientHeight};return o.remove(),e.remove(),t}function getHeadersWidth(){headersWidth\u003dheadersWidthL\u003dheadersWidthR\u003d0;for(var e\u003d!options.autoHeight,o\u003d0,t\u003dcolumns.length;o\u003ct;o++){var n\u003dcolumns[o].width;options.frozenColumn\u003e-1\u0026\u0026o\u003eoptions.frozenColumn?headersWidthR+\u003dn:headersWidthL+\u003dn}return e\u0026\u0026(options.frozenColumn\u003e-1\u0026\u0026o\u003eoptions.frozenColumn?headersWidthR+\u003dscrollbarDimensions.width:headersWidthL+\u003dscrollbarDimensions.width),hasFrozenColumns()?(headersWidthL+\u003d1e3,headersWidthR\u003dMath.max(headersWidthR,viewportW)+headersWidthL,headersWidthR+\u003dscrollbarDimensions.width):(headersWidthL+\u003dscrollbarDimensions.width,headersWidthL\u003dMath.max(headersWidthL,viewportW)+1e3),headersWidth\u003dheadersWidthL+headersWidthR,Math.max(headersWidth,viewportW)+1e3}function getHeadersWidthL(){return headersWidthL\u003d0,columns.forEach((function(e,o){options.frozenColumn\u003e-1\u0026\u0026o\u003eoptions.frozenColumn||(headersWidthL+\u003de.width)})),hasFrozenColumns()?headersWidthL+\u003d1e3:(headersWidthL+\u003dscrollbarDimensions.width,headersWidthL\u003dMath.max(headersWidthL,viewportW)+1e3),headersWidthL}function getHeadersWidthR(){return headersWidthR\u003d0,columns.forEach((function(e,o){options.frozenColumn\u003e-1\u0026\u0026o\u003eoptions.frozenColumn\u0026\u0026(headersWidthR+\u003de.width)})),hasFrozenColumns()\u0026\u0026(headersWidthR\u003dMath.max(headersWidthR,viewportW)+getHeadersWidthL(),headersWidthR+\u003dscrollbarDimensions.width),headersWidthR}function getCanvasWidth(){var e\u003dviewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW,o\u003dcolumns.length;for(canvasWidthL\u003dcanvasWidthR\u003d0;o--;)hasFrozenColumns()\u0026\u0026o\u003eoptions.frozenColumn?canvasWidthR+\u003dcolumns[o].width:canvasWidthL+\u003dcolumns[o].width;var t\u003dcanvasWidthL+canvasWidthR;return options.fullWidthRows?Math.max(t,e):t}function updateCanvasWidth(e){var o,t\u003dcanvasWidth,n\u003dcanvasWidthL,l\u003dcanvasWidthR;((o\u003d(canvasWidth\u003dgetCanvasWidth())!\u003d\u003dt||canvasWidthL!\u003d\u003dn||canvasWidthR!\u003d\u003dl)||hasFrozenColumns()||hasFrozenRows)\u0026\u0026($canvasTopL.width(canvasWidthL),getHeadersWidth(),$headerL.width(headersWidthL),$headerR.width(headersWidthR),hasFrozenColumns()?($canvasTopR.width(canvasWidthR),$paneHeaderL.width(canvasWidthL),$paneHeaderR.css(\"left\",canvasWidthL),$paneHeaderR.css(\"width\",viewportW-canvasWidthL),$paneTopL.width(canvasWidthL),$paneTopR.css(\"left\",canvasWidthL),$paneTopR.css(\"width\",viewportW-canvasWidthL),$headerRowScrollerL.width(canvasWidthL),$headerRowScrollerR.width(viewportW-canvasWidthL),$headerRowL.width(canvasWidthL),$headerRowR.width(canvasWidthR),options.createFooterRow\u0026\u0026($footerRowScrollerL.width(canvasWidthL),$footerRowScrollerR.width(viewportW-canvasWidthL),$footerRowL.width(canvasWidthL),$footerRowR.width(canvasWidthR)),options.createPreHeaderPanel\u0026\u0026$preHeaderPanel.width(canvasWidth),$viewportTopL.width(canvasWidthL),$viewportTopR.width(viewportW-canvasWidthL),hasFrozenRows\u0026\u0026($paneBottomL.width(canvasWidthL),$paneBottomR.css(\"left\",canvasWidthL),$viewportBottomL.width(canvasWidthL),$viewportBottomR.width(viewportW-canvasWidthL),$canvasBottomL.width(canvasWidthL),$canvasBottomR.width(canvasWidthR))):($paneHeaderL.width(\"100%\"),$paneTopL.width(\"100%\"),$headerRowScrollerL.width(\"100%\"),$headerRowL.width(canvasWidth),options.createFooterRow\u0026\u0026($footerRowScrollerL.width(\"100%\"),$footerRowL.width(canvasWidth)),options.createPreHeaderPanel\u0026\u0026($preHeaderPanel.width(\"100%\"),$preHeaderPanel.width(canvasWidth)),$viewportTopL.width(\"100%\"),hasFrozenRows\u0026\u0026($viewportBottomL.width(\"100%\"),$canvasBottomL.width(canvasWidthL))),viewportHasHScroll\u003dcanvasWidth\u003eviewportW-scrollbarDimensions.width),$headerRowSpacerL.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),$headerRowSpacerR.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),options.createFooterRow\u0026\u0026($footerRowSpacerL.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0)),$footerRowSpacerR.width(canvasWidth+(viewportHasVScroll?scrollbarDimensions.width:0))),(o||e)\u0026\u0026applyColumnWidths()}function disableSelection(e){e\u0026\u0026e.jquery\u0026\u0026e.attr(\"unselectable\",\"on\").css(\"MozUserSelect\",\"none\").on(\"selectstart.ui\",(function(){return!1}))}function getMaxSupportedCssHeight(){for(var e\u003d1e6,o\u003dnavigator.userAgent.toLowerCase().match(/firefox/)?6e6:1e9,t\u003d$(\"\u003cdiv style\u003d\u0027display:none\u0027 /\u003e\").appendTo(document.body);;){var n\u003d2*e;if(t.css(\"height\",n),n\u003eo||t.height()!\u003d\u003dn)break;e\u003dn}return t.remove(),e}function getUID(){return uid}function getHeaderColumnWidthDiff(){return headerColumnWidthDiff}function getScrollbarDimensions(){return scrollbarDimensions}function bindAncestorScrollEvents(){for(var e\u003dhasFrozenRows\u0026\u0026!options.frozenBottom?$canvasBottomL[0]:$canvasTopL[0];(e\u003de.parentNode)!\u003ddocument.body\u0026\u0026null!\u003de;)if(e\u003d\u003d$viewportTopL[0]||e.scrollWidth!\u003de.clientWidth||e.scrollHeight!\u003de.clientHeight){var o\u003d$(e);$boundAncestors\u003d$boundAncestors?$boundAncestors.add(o):o,o.on(\"scroll.\"+uid,handleActiveCellPositionChange)}}function unbindAncestorScrollEvents(){$boundAncestors\u0026\u0026($boundAncestors.off(\"scroll.\"+uid),$boundAncestors\u003dnull)}function updateColumnHeader(e,o,t){if(initialized){var n\u003dgetColumnIndex(e);if(null!\u003dn){var l\u003dcolumns[n],r\u003d$headers.children().eq(n);r\u0026\u0026(void 0!\u003d\u003do\u0026\u0026(columns[n].name\u003do),void 0!\u003d\u003dt\u0026\u0026(columns[n].toolTip\u003dt),trigger(self.onBeforeHeaderCellDestroy,{node:r[0],column:l,grid:self}),r.attr(\"title\",t||\"\").children().eq(0).html(o),trigger(self.onHeaderCellRendered,{node:r[0],column:l,grid:self}))}}}function getHeader(e){if(!e)return hasFrozenColumns()?$headers:$headerL;var o\u003dgetColumnIndex(e.id);return hasFrozenColumns()?o\u003c\u003doptions.frozenColumn?$headerL:$headerR:$headerL}function getHeaderColumn(e){var o\u003d\"number\"\u003d\u003dtypeof e?e:getColumnIndex(e),t\u003dhasFrozenColumns()?o\u003c\u003doptions.frozenColumn?$headerL:$headerR:$headerL,n\u003dhasFrozenColumns()?o\u003c\u003doptions.frozenColumn?o:o-options.frozenColumn-1:o,l\u003dt.children().eq(n);return l\u0026\u0026l[0]}function getHeaderRow(){return hasFrozenColumns()?$headerRow:$headerRow[0]}function getFooterRow(){return hasFrozenColumns()?$footerRow:$footerRow[0]}function getPreHeaderPanel(){return $preHeaderPanel[0]}function getPreHeaderPanelRight(){return $preHeaderPanelR[0]}function getHeaderRowColumn(e){var o,t\u003d\"number\"\u003d\u003dtypeof e?e:getColumnIndex(e);hasFrozenColumns()?t\u003c\u003doptions.frozenColumn?o\u003d$headerRowL:(o\u003d$headerRowR,t-\u003doptions.frozenColumn+1):o\u003d$headerRowL;var n\u003do.children().eq(t);return n\u0026\u0026n[0]}function getFooterRowColumn(e){var o,t\u003d\"number\"\u003d\u003dtypeof e?e:getColumnIndex(e);hasFrozenColumns()?t\u003c\u003doptions.frozenColumn?o\u003d$footerRowL:(o\u003d$footerRowR,t-\u003doptions.frozenColumn+1):o\u003d$footerRowL;var n\u003do\u0026\u0026o.children().eq(t);return n\u0026\u0026n[0]}function createColumnFooter(){if(options.createFooterRow){$footerRow.find(\".slick-footerrow-column\").each((function(){var e\u003d$(this).data(\"column\");e\u0026\u0026trigger(self.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:self})})),$footerRowL.empty(),$footerRowR.empty();for(var e\u003d0;e\u003ccolumns.length;e++){var o\u003dcolumns[e],t\u003d$(\"\u003cdiv class\u003d\u0027ui-state-default slick-footerrow-column l\"+e+\" r\"+e+\"\u0027\u003e\u003c/div\u003e\").data(\"column\",o).addClass(hasFrozenColumns()\u0026\u0026e\u003c\u003doptions.frozenColumn?\"frozen\":\"\").appendTo(hasFrozenColumns()\u0026\u0026e\u003eoptions.frozenColumn?$footerRowR:$footerRowL);trigger(self.onFooterRowCellRendered,{node:t[0],column:o,grid:self})}}}function createColumnGroupHeaders(){var e\u003d0,o\u003d!1;if(treeColumns.hasDepth()){for(var t\u003d0;t\u003c$groupHeadersL.length;t++){$groupHeadersL[t].empty(),$groupHeadersR[t].empty();var n\u003dtreeColumns.getColumnsInDepth(t);for(var l in n){var r\u003dn[l];e+\u003dr.extractColumns().length,hasFrozenColumns()\u0026\u00260\u003d\u003d\u003dt\u0026\u0026e-1\u003d\u003d\u003doptions.frozenColumn\u0026\u0026(o\u003d!0),$(\"\u003cdiv class\u003d\u0027ui-state-default slick-group-header-column\u0027 /\u003e\").html(\"\u003cspan class\u003d\u0027slick-column-name\u0027\u003e\"+r.name+\"\u003c/span\u003e\").attr(\"id\",\"\"+uid+r.id).attr(\"title\",r.toolTip||\"\").data(\"column\",r).addClass(r.headerCssClass||\"\").addClass(hasFrozenColumns()\u0026\u0026e-1\u003eoptions.frozenColumn?\"frozen\":\"\").appendTo(hasFrozenColumns()\u0026\u0026e-1\u003eoptions.frozenColumn?$groupHeadersR[t]:$groupHeadersL[t])}if(hasFrozenColumns()\u0026\u00260\u003d\u003d\u003dt\u0026\u0026!o){$groupHeadersL[t].empty(),$groupHeadersR[t].empty(),alert(\"All columns of group should to be grouped!\");break}}applyColumnGroupHeaderWidths()}}function createColumnHeaders(){function e(){$(this).addClass(\"ui-state-hover\")}function o(){$(this).removeClass(\"ui-state-hover\")}$headers.find(\".slick-header-column\").each((function(){var e\u003d$(this).data(\"column\");e\u0026\u0026trigger(self.onBeforeHeaderCellDestroy,{node:this,column:e,grid:self})})),$headerL.empty(),$headerR.empty(),getHeadersWidth(),$headerL.width(headersWidthL),$headerR.width(headersWidthR),$headerRow.find(\".slick-headerrow-column\").each((function(){var e\u003d$(this).data(\"column\");e\u0026\u0026trigger(self.onBeforeHeaderRowCellDestroy,{node:this,column:e,grid:self})})),$headerRowL.empty(),$headerRowR.empty(),options.createFooterRow\u0026\u0026($footerRowL.find(\".slick-footerrow-column\").each((function(){var e\u003d$(this).data(\"column\");e\u0026\u0026trigger(self.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:self})})),$footerRowL.empty(),hasFrozenColumns()\u0026\u0026($footerRowR.find(\".slick-footerrow-column\").each((function(){var e\u003d$(this).data(\"column\");e\u0026\u0026trigger(self.onBeforeFooterRowCellDestroy,{node:this,column:e,grid:self})})),$footerRowR.empty()));for(var t\u003d0;t\u003ccolumns.length;t++){var n\u003dcolumns[t],l\u003dhasFrozenColumns()?t\u003c\u003doptions.frozenColumn?$headerL:$headerR:$headerL,r\u003dhasFrozenColumns()?t\u003c\u003doptions.frozenColumn?$headerRowL:$headerRowR:$headerRowL,i\u003d$(\"\u003cdiv class\u003d\u0027ui-state-default slick-header-column\u0027 /\u003e\").html(\"\u003cspan class\u003d\u0027slick-column-name\u0027\u003e\"+n.name+\"\u003c/span\u003e\").width(n.width-headerColumnWidthDiff).attr(\"id\",\"\"+uid+n.id).attr(\"title\",n.toolTip||\"\").data(\"column\",n).addClass(n.headerCssClass||\"\").addClass(hasFrozenColumns()\u0026\u0026t\u003c\u003doptions.frozenColumn?\"frozen\":\"\").appendTo(l);if((options.enableColumnReorder||n.sortable)\u0026\u0026i.on(\"mouseenter\",e).on(\"mouseleave\",o),n.hasOwnProperty(\"headerCellAttrs\")\u0026\u0026n.headerCellAttrs instanceof Object)for(var a in n.headerCellAttrs)n.headerCellAttrs.hasOwnProperty(a)\u0026\u0026i.attr(a,n.headerCellAttrs[a]);if(n.sortable\u0026\u0026(i.addClass(\"slick-header-sortable\"),i.append(\"\u003cspan class\u003d\u0027slick-sort-indicator\"+(options.numberedMultiColumnSort\u0026\u0026!options.sortColNumberInSeparateSpan?\" slick-sort-indicator-numbered\":\"\")+\"\u0027 /\u003e\"),options.numberedMultiColumnSort\u0026\u0026options.sortColNumberInSeparateSpan\u0026\u0026i.append(\"\u003cspan class\u003d\u0027slick-sort-indicator-numbered\u0027 /\u003e\")),trigger(self.onHeaderCellRendered,{node:i[0],column:n,grid:self}),options.showHeaderRow){var s\u003d$(\"\u003cdiv class\u003d\u0027ui-state-default slick-headerrow-column l\"+t+\" r\"+t+\"\u0027\u003e\u003c/div\u003e\").data(\"column\",n).addClass(hasFrozenColumns()\u0026\u0026t\u003c\u003doptions.frozenColumn?\"frozen\":\"\").appendTo(r);trigger(self.onHeaderRowCellRendered,{node:s[0],column:n,grid:self})}if(options.createFooterRow\u0026\u0026options.showFooterRow){var d\u003d$(\"\u003cdiv class\u003d\u0027ui-state-default slick-footerrow-column l\"+t+\" r\"+t+\"\u0027\u003e\u003c/div\u003e\").data(\"column\",n).appendTo($footerRow);trigger(self.onFooterRowCellRendered,{node:d[0],column:n,grid:self})}}setSortColumns(sortColumns),setupColumnResize(),options.enableColumnReorder\u0026\u0026(\"function\"\u003d\u003dtypeof options.enableColumnReorder?options.enableColumnReorder(self,$headers,headerColumnWidthDiff,setColumns,setupColumnResize,columns,getColumnIndex,uid,trigger):setupColumnReorder())}function setupColumnSort(){$headers.click((function(e){if(!columnResizeDragging\u0026\u0026(e.metaKey\u003de.metaKey||e.ctrlKey,!$(e.target).hasClass(\"slick-resizable-handle\"))){var o\u003d$(e.target).closest(\".slick-header-column\");if(o.length){var t\u003do.data(\"column\");if(t.sortable){if(!getEditorLock().commitCurrentEdit())return;for(var n\u003dnull,l\u003d0;l\u003csortColumns.length;l++)if(sortColumns[l].columnId\u003d\u003dt.id){(n\u003dsortColumns[l]).sortAsc\u003d!n.sortAsc;break}var r\u003d!!n;options.tristateMultiColumnSort?(n||(n\u003d{columnId:t.id,sortAsc:t.defaultSortAsc}),r\u0026\u0026n.sortAsc\u0026\u0026(sortColumns.splice(l,1),n\u003dnull),options.multiColumnSort||(sortColumns\u003d[]),!n||r\u0026\u0026options.multiColumnSort||sortColumns.push(n)):e.metaKey\u0026\u0026options.multiColumnSort?n\u0026\u0026sortColumns.splice(l,1):((e.shiftKey||e.metaKey)\u0026\u0026options.multiColumnSort||(sortColumns\u003d[]),n?0\u003d\u003d\u003dsortColumns.length\u0026\u0026sortColumns.push(n):(n\u003d{columnId:t.id,sortAsc:t.defaultSortAsc},sortColumns.push(n))),setSortColumns(sortColumns),options.multiColumnSort?trigger(self.onSort,{multiColumnSort:!0,sortCols:$.map(sortColumns,(function(e){return{columnId:columns[getColumnIndex(e.columnId)].id,sortCol:columns[getColumnIndex(e.columnId)],sortAsc:e.sortAsc}}))},e):trigger(self.onSort,{multiColumnSort:!1,columnId:sortColumns.length\u003e0?t.id:null,sortCol:sortColumns.length\u003e0?t:null,sortAsc:!(sortColumns.length\u003e0)||sortColumns[0].sortAsc},e)}}}}))}function currentPositionInHeader(e){var o\u003d0;return $headers.find(\".slick-header-column\").each((function(t){if(this.id\u003d\u003de)return o\u003dt,!1})),o}function limitPositionInGroup(e){var o,t\u003d0,n\u003d0;return treeColumns.getColumnsInDepth($groupHeadersL.length-1).some((function(l){return t\u003dn,n+\u003dl.columns.length,l.columns.some((function(t){return t.id\u003d\u003d\u003de\u0026\u0026(o\u003dl),o})),o})),n--,{start:t,end:n,group:o}}function remove(e,o){var t\u003de.lastIndexOf(o);t\u003e-1\u0026\u0026(e.splice(t,1),remove(e,o))}function columnPositionValidInGroup(e){var o\u003dcurrentPositionInHeader(e[0].id),t\u003dlimitPositionInGroup(e.data(\"column\").id),n\u003dt.start\u003c\u003do\u0026\u0026o\u003c\u003dt.end;return{limit:t,valid:n,message:n?\"\":\u0027Column \"\u0027.concat(e.text(),\u0027\" can be reordered only within the \"\u0027,t.group.name,\u0027\" group!\u0027)}}function setupColumnReorder(){$headers.filter(\":ui-sortable\").sortable(\"destroy\");var e,o\u003dnull;function t(){$viewportScrollContainerX[0].scrollLeft\u003d$viewportScrollContainerX[0].scrollLeft+10}function n(){$viewportScrollContainerX[0].scrollLeft\u003d$viewportScrollContainerX[0].scrollLeft-10}$headers.sortable({containment:\"parent\",distance:3,axis:\"x\",cursor:\"default\",tolerance:\"intersection\",helper:\"clone\",placeholder:\"slick-sortable-placeholder ui-state-default slick-header-column\",start:function(o,t){t.placeholder.width(t.helper.outerWidth()-headerColumnWidthDiff),e\u003d!hasFrozenColumns()||t.placeholder.offset().left+t.placeholder.width()\u003e$viewportScrollContainerX.offset().left,$(t.helper).addClass(\"slick-header-column-active\")},beforeStop:function(e,o){$(o.helper).removeClass(\"slick-header-column-active\")},sort:function(l,r){e\u0026\u0026l.originalEvent.pageX\u003e$container[0].clientWidth?o||(o\u003dsetInterval(t,100)):e\u0026\u0026l.originalEvent.pageX\u003c$viewportScrollContainerX.offset().left?o||(o\u003dsetInterval(n,100)):(clearInterval(o),o\u003dnull)},stop:function(e,t){var n\u003d!1;clearInterval(o),o\u003dnull;var l\u003dnull;if(treeColumns.hasDepth()){var r\u003dcolumnPositionValidInGroup(t.item);l\u003dr.limit,(n\u003d!r.valid)\u0026\u0026alert(r.message)}if(!n\u0026\u0026getEditorLock().commitCurrentEdit()){var i\u003d$headerL.sortable(\"toArray\");i\u003di.concat($headerR.sortable(\"toArray\"));for(var a\u003d[],s\u003d0;s\u003ci.length;s++)a.push(columns[getColumnIndex(i[s].replace(uid,\"\"))]);setColumns(a),trigger(self.onColumnsReordered,{impactedColumns:getImpactedColumns(l)}),e.stopPropagation(),setupColumnResize()}else $(this).sortable(\"cancel\")}})}function getImpactedColumns(e){var o\u003d[];if(e)for(var t\u003de.start;t\u003c\u003de.end;t++)o.push(columns[t]);else o\u003dcolumns;return o}function setupColumnResize(){var e,o,t,n,l,r,i,a,s;(l\u003d$headers.children()).find(\".slick-resizable-handle\").remove(),l.each((function(e,o){e\u003e\u003dcolumns.length||columns[e].resizable\u0026\u0026(void 0\u003d\u003d\u003da\u0026\u0026(a\u003de),s\u003de)})),void 0!\u003d\u003da\u0026\u0026l.each((function(d,c){d\u003e\u003dcolumns.length||d\u003ca||options.forceFitColumns\u0026\u0026d\u003e\u003ds||($(c),$(\"\u003cdiv class\u003d\u0027slick-resizable-handle\u0027 /\u003e\").appendTo(c).on(\"dragstart\",(function(o,a){if(!getEditorLock().commitCurrentEdit())return!1;n\u003do.pageX,$(this).parent().addClass(\"slick-header-column-active\");var s\u003dnull,c\u003dnull;if(l.each((function(e,o){e\u003e\u003dcolumns.length||(columns[e].previousWidth\u003d$(o).outerWidth())})),options.forceFitColumns)for(s\u003d0,c\u003d0,e\u003dd+1;e\u003ccolumns.length;e++)(t\u003dcolumns[e]).resizable\u0026\u0026(null!\u003d\u003dc\u0026\u0026(t.maxWidth?c+\u003dt.maxWidth-t.previousWidth:c\u003dnull),s+\u003dt.previousWidth-Math.max(t.minWidth||0,absoluteColumnMinWidth));var u\u003d0,h\u003d0;for(e\u003d0;e\u003c\u003dd;e++)(t\u003dcolumns[e]).resizable\u0026\u0026(null!\u003d\u003dh\u0026\u0026(t.maxWidth?h+\u003dt.maxWidth-t.previousWidth:h\u003dnull),u+\u003dt.previousWidth-Math.max(t.minWidth||0,absoluteColumnMinWidth));null\u003d\u003d\u003ds\u0026\u0026(s\u003d1e5),null\u003d\u003d\u003du\u0026\u0026(u\u003d1e5),null\u003d\u003d\u003dc\u0026\u0026(c\u003d1e5),null\u003d\u003d\u003dh\u0026\u0026(h\u003d1e5),i\u003dn+Math.min(s,h),r\u003dn-Math.min(u,c)})).on(\"drag\",(function(l,a){columnResizeDragging\u003d!0;var s,c,u\u003dMath.min(i,Math.max(r,l.pageX))-n,h\u003d0;if(u\u003c0){for(c\u003du,e\u003dd;e\u003e\u003d0;e--)(t\u003dcolumns[e]).resizable\u0026\u0026(s\u003dMath.max(t.minWidth||0,absoluteColumnMinWidth),c\u0026\u0026t.previousWidth+c\u003cs?(c+\u003dt.previousWidth-s,t.width\u003ds):(t.width\u003dt.previousWidth+c,c\u003d0));for(o\u003d0;o\u003c\u003dd;o++)t\u003dcolumns[o],hasFrozenColumns()\u0026\u0026o\u003eoptions.frozenColumn?t.width:h+\u003dt.width;if(options.forceFitColumns)for(c\u003d-u,e\u003dd+1;e\u003ccolumns.length;e++)(t\u003dcolumns[e]).resizable\u0026\u0026(c\u0026\u0026t.maxWidth\u0026\u0026t.maxWidth-t.previousWidth\u003cc?(c-\u003dt.maxWidth-t.previousWidth,t.width\u003dt.maxWidth):(t.width\u003dt.previousWidth+c,c\u003d0),hasFrozenColumns()\u0026\u0026e\u003eoptions.frozenColumn?t.width:h+\u003dt.width);else for(e\u003dd+1;e\u003ccolumns.length;e++)t\u003dcolumns[e],hasFrozenColumns()\u0026\u0026e\u003eoptions.frozenColumn?t.width:h+\u003dt.width;if(options.forceFitColumns)for(c\u003d-u,e\u003dd+1;e\u003ccolumns.length;e++)(t\u003dcolumns[e]).resizable\u0026\u0026(c\u0026\u0026t.maxWidth\u0026\u0026t.maxWidth-t.previousWidth\u003cc?(c-\u003dt.maxWidth-t.previousWidth,t.width\u003dt.maxWidth):(t.width\u003dt.previousWidth+c,c\u003d0))}else{for(c\u003du,h\u003d0,0,e\u003dd;e\u003e\u003d0;e--)(t\u003dcolumns[e]).resizable\u0026\u0026(c\u0026\u0026t.maxWidth\u0026\u0026t.maxWidth-t.previousWidth\u003cc?(c-\u003dt.maxWidth-t.previousWidth,t.width\u003dt.maxWidth):(t.width\u003dt.previousWidth+c,c\u003d0));for(o\u003d0;o\u003c\u003dd;o++)t\u003dcolumns[o],hasFrozenColumns()\u0026\u0026o\u003eoptions.frozenColumn?t.width:h+\u003dt.width;if(options.forceFitColumns)for(c\u003d-u,e\u003dd+1;e\u003ccolumns.length;e++)(t\u003dcolumns[e]).resizable\u0026\u0026(s\u003dMath.max(t.minWidth||0,absoluteColumnMinWidth),c\u0026\u0026t.previousWidth+c\u003cs?(c+\u003dt.previousWidth-s,t.width\u003ds):(t.width\u003dt.previousWidth+c,c\u003d0),hasFrozenColumns()\u0026\u0026e\u003eoptions.frozenColumn?t.width:h+\u003dt.width);else for(e\u003dd+1;e\u003ccolumns.length;e++)t\u003dcolumns[e],hasFrozenColumns()\u0026\u0026e\u003eoptions.frozenColumn?t.width:h+\u003dt.width}hasFrozenColumns()\u0026\u0026h!\u003dcanvasWidthL\u0026\u0026($headerL.width(h+1e3),$paneHeaderR.css(\"left\",h)),applyColumnHeaderWidths(),applyColumnGroupHeaderWidths(),options.syncColumnCellResize\u0026\u0026applyColumnWidths(),trigger(self.onColumnsDrag,{triggeredByColumn:$(this).parent().attr(\"id\").replace(uid,\"\"),resizeHandle:$(this)})})).on(\"dragend\",(function(o,n){$(this).parent().removeClass(\"slick-header-column-active\");var r,i\u003d$(this).parent().attr(\"id\").replace(uid,\"\");for(!0\u003d\u003d\u003dtrigger(self.onBeforeColumnsResize,{triggeredByColumn:i})\u0026\u0026(applyColumnHeaderWidths(),applyColumnGroupHeaderWidths()),e\u003d0;e\u003ccolumns.length;e++)t\u003dcolumns[e],r\u003d$(l[e]).outerWidth(),t.previousWidth!\u003d\u003dr\u0026\u0026t.rerenderOnResize\u0026\u0026invalidateAllRows();updateCanvasWidth(!0),render(),trigger(self.onColumnsResized,{triggeredByColumn:i}),setTimeout((function(){columnResizeDragging\u003d!1}),300)})))}))}function getVBoxDelta(e){var o\u003d0;return e\u0026\u0026\"function\"\u003d\u003dtypeof e.css\u0026\u0026$.each([\"borderTopWidth\",\"borderBottomWidth\",\"paddingTop\",\"paddingBottom\"],(function(t,n){o+\u003dparseFloat(e.css(n))||0})),o}function setFrozenOptions(){if(options.frozenColumn\u003doptions.frozenColumn\u003e\u003d0\u0026\u0026options.frozenColumn\u003ccolumns.length?parseInt(options.frozenColumn):-1,options.frozenRow\u003e-1){hasFrozenRows\u003d!0,frozenRowsHeight\u003doptions.frozenRow*options.rowHeight;var e\u003dgetDataLength();actualFrozenRow\u003doptions.frozenBottom?e-options.frozenRow:options.frozenRow}else hasFrozenRows\u003d!1}function setPaneVisibility(){hasFrozenColumns()?($paneHeaderR.show(),$paneTopR.show(),hasFrozenRows?($paneBottomL.show(),$paneBottomR.show()):($paneBottomR.hide(),$paneBottomL.hide())):($paneHeaderR.hide(),$paneTopR.hide(),$paneBottomR.hide(),hasFrozenRows?$paneBottomL.show():($paneBottomR.hide(),$paneBottomL.hide()))}function setOverflow(){$viewportTopL.css({\"overflow-x\":hasFrozenColumns()?hasFrozenRows\u0026\u0026!options.alwaysAllowHorizontalScroll?\"hidden\":\"scroll\":hasFrozenRows\u0026\u0026!options.alwaysAllowHorizontalScroll?\"hidden\":\"auto\",\"overflow-y\":options.alwaysShowVerticalScroll?\"scroll\":hasFrozenColumns()?\"hidden\":hasFrozenRows?\"scroll\":\"auto\"}),$viewportTopR.css({\"overflow-x\":hasFrozenColumns()?hasFrozenRows\u0026\u0026!options.alwaysAllowHorizontalScroll?\"hidden\":\"scroll\":hasFrozenRows\u0026\u0026!options.alwaysAllowHorizontalScroll?\"hidden\":\"auto\",\"overflow-y\":options.alwaysShowVerticalScroll?\"scroll\":(hasFrozenColumns(),hasFrozenRows?\"scroll\":\"auto\")}),$viewportBottomL.css({\"overflow-x\":hasFrozenColumns()?hasFrozenRows\u0026\u0026!options.alwaysAllowHorizontalScroll?\"scroll\":\"auto\":(hasFrozenRows\u0026\u0026options.alwaysAllowHorizontalScroll,\"auto\"),\"overflow-y\":options.alwaysShowVerticalScroll?\"scroll\":hasFrozenColumns()?\"hidden\":hasFrozenRows?\"scroll\":\"auto\"}),$viewportBottomR.css({\"overflow-x\":hasFrozenColumns()?hasFrozenRows\u0026\u0026!options.alwaysAllowHorizontalScroll?\"scroll\":\"auto\":(hasFrozenRows\u0026\u0026options.alwaysAllowHorizontalScroll,\"auto\"),\"overflow-y\":options.alwaysShowVerticalScroll?\"scroll\":(hasFrozenColumns(),\"auto\")}),options.viewportClass\u0026\u0026($viewportTopL.toggleClass(options.viewportClass,!0),$viewportTopR.toggleClass(options.viewportClass,!0),$viewportBottomL.toggleClass(options.viewportClass,!0),$viewportBottomR.toggleClass(options.viewportClass,!0))}function setScroller(){hasFrozenColumns()?($headerScrollContainer\u003d$headerScrollerR,$headerRowScrollContainer\u003d$headerRowScrollerR,$footerRowScrollContainer\u003d$footerRowScrollerR,hasFrozenRows?options.frozenBottom?($viewportScrollContainerX\u003d$viewportBottomR,$viewportScrollContainerY\u003d$viewportTopR):$viewportScrollContainerX\u003d$viewportScrollContainerY\u003d$viewportBottomR:$viewportScrollContainerX\u003d$viewportScrollContainerY\u003d$viewportTopR):($headerScrollContainer\u003d$headerScrollerL,$headerRowScrollContainer\u003d$headerRowScrollerL,$footerRowScrollContainer\u003d$footerRowScrollerL,hasFrozenRows?options.frozenBottom?($viewportScrollContainerX\u003d$viewportBottomL,$viewportScrollContainerY\u003d$viewportTopL):$viewportScrollContainerX\u003d$viewportScrollContainerY\u003d$viewportBottomL:$viewportScrollContainerX\u003d$viewportScrollContainerY\u003d$viewportTopL)}function measureCellPaddingAndBorder(){var e,o\u003d[\"borderLeftWidth\",\"borderRightWidth\",\"paddingLeft\",\"paddingRight\"],t\u003d[\"borderTopWidth\",\"borderBottomWidth\",\"paddingTop\",\"paddingBottom\"],n\u003d$.fn.jquery.split(\".\");jQueryNewWidthBehaviour\u003d1\u003d\u003dn[0]\u0026\u0026n[1]\u003e\u003d8||n[0]\u003e\u003d2,e\u003d$(\"\u003cdiv class\u003d\u0027ui-state-default slick-header-column\u0027 style\u003d\u0027visibility:hidden\u0027\u003e-\u003c/div\u003e\").appendTo($headers),headerColumnWidthDiff\u003dheaderColumnHeightDiff\u003d0,\"border-box\"!\u003de.css(\"box-sizing\")\u0026\u0026\"border-box\"!\u003de.css(\"-moz-box-sizing\")\u0026\u0026\"border-box\"!\u003de.css(\"-webkit-box-sizing\")\u0026\u0026($.each(o,(function(o,t){headerColumnWidthDiff+\u003dparseFloat(e.css(t))||0})),$.each(t,(function(o,t){headerColumnHeightDiff+\u003dparseFloat(e.css(t))||0}))),e.remove();var l\u003d$(\"\u003cdiv class\u003d\u0027slick-row\u0027 /\u003e\").appendTo($canvas);e\u003d$(\"\u003cdiv class\u003d\u0027slick-cell\u0027 id\u003d\u0027\u0027 style\u003d\u0027visibility:hidden\u0027\u003e-\u003c/div\u003e\").appendTo(l),cellWidthDiff\u003dcellHeightDiff\u003d0,\"border-box\"!\u003de.css(\"box-sizing\")\u0026\u0026\"border-box\"!\u003de.css(\"-moz-box-sizing\")\u0026\u0026\"border-box\"!\u003de.css(\"-webkit-box-sizing\")\u0026\u0026($.each(o,(function(o,t){cellWidthDiff+\u003dparseFloat(e.css(t))||0})),$.each(t,(function(o,t){cellHeightDiff+\u003dparseFloat(e.css(t))||0}))),l.remove(),absoluteColumnMinWidth\u003dMath.max(headerColumnWidthDiff,cellWidthDiff)}function createCssRules(){$style\u003d$(\"\u003cstyle type\u003d\u0027text/css\u0027 rel\u003d\u0027stylesheet\u0027 /\u003e\").appendTo($(\"head\"));for(var e\u003doptions.rowHeight-cellHeightDiff,o\u003d[\".\"+uid+\" .slick-group-header-column { left: 1000px; }\",\".\"+uid+\" .slick-header-column { left: 1000px; }\",\".\"+uid+\" .slick-top-panel { height:\"+options.topPanelHeight+\"px; }\",\".\"+uid+\" .slick-preheader-panel { height:\"+options.preHeaderPanelHeight+\"px; }\",\".\"+uid+\" .slick-headerrow-columns { height:\"+options.headerRowHeight+\"px; }\",\".\"+uid+\" .slick-footerrow-columns { height:\"+options.footerRowHeight+\"px; }\",\".\"+uid+\" .slick-cell { height:\"+e+\"px; }\",\".\"+uid+\" .slick-row { height:\"+options.rowHeight+\"px; }\"],t\u003d0;t\u003ccolumns.length;t++)o.push(\".\"+uid+\" .l\"+t+\" { }\"),o.push(\".\"+uid+\" .r\"+t+\" { }\");$style[0].styleSheet?$style[0].styleSheet.cssText\u003do.join(\" \"):$style[0].appendChild(document.createTextNode(o.join(\" \")))}function getColumnCssRules(e){var o;if(!stylesheet){var t\u003ddocument.styleSheets;for(o\u003d0;o\u003ct.length;o++)if((t[o].ownerNode||t[o].owningElement)\u003d\u003d$style[0]){stylesheet\u003dt[o];break}if(!stylesheet)throw new Error(\"Cannot find stylesheet.\");columnCssRulesL\u003d[],columnCssRulesR\u003d[];var n,l,r\u003dstylesheet.cssRules||stylesheet.rules;for(o\u003d0;o\u003cr.length;o++){var i\u003dr[o].selectorText;(n\u003d/\\.l\\d+/.exec(i))?(l\u003dparseInt(n[0].substr(2,n[0].length-2),10),columnCssRulesL[l]\u003dr[o]):(n\u003d/\\.r\\d+/.exec(i))\u0026\u0026(l\u003dparseInt(n[0].substr(2,n[0].length-2),10),columnCssRulesR[l]\u003dr[o])}}return{left:columnCssRulesL[e],right:columnCssRulesR[e]}}function removeCssRules(){$style.remove(),stylesheet\u003dnull}function destroy(){getEditorLock().cancelCurrentEdit(),trigger(self.onBeforeDestroy,{});for(var e\u003dplugins.length;e--;)unregisterPlugin(plugins[e]);options.enableColumnReorder\u0026\u0026$headers.filter(\":ui-sortable\").sortable(\"destroy\"),unbindAncestorScrollEvents(),$container.off(\".slickgrid\"),removeCssRules(),$canvas.off(\"draginit dragstart dragend drag\"),$container.empty().removeClass(uid)}var canvas\u003dnull,canvas_context\u003dnull;function autosizeColumn(e,o){var t\u003de;if(\"number\"\u003d\u003dtypeof e)t\u003dcolumns[e];else if(\"string\"\u003d\u003dtypeof e)for(var n\u003d0;n\u003ccolumns.length;n++)columns[n].Id\u003d\u003d\u003de\u0026\u0026(t\u003dcolumns[n]);getColAutosizeWidth(t,$(getCanvasNode(0,0)),o)}function autosizeColumns(e,o){if((e\u003de||options.autosizeColsMode)!\u003d\u003dSlick.GridAutosizeColsMode.LegacyForceFit\u0026\u0026e!\u003d\u003dSlick.GridAutosizeColsMode.LegacyOff){if(e!\u003d\u003dSlick.GridAutosizeColsMode.None){(canvas\u003ddocument.createElement(\"canvas\"))\u0026\u0026canvas.getContext\u0026\u0026(canvas_context\u003dcanvas.getContext(\"2d\"));var t,n,l,r,i\u003d$(getCanvasNode(0,0)),a\u003dviewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW,s\u003d0,d\u003d0,c\u003d0,u\u003d0,h\u003d0;for(t\u003d0;t\u003ccolumns.length;t++)getColAutosizeWidth(n\u003dcolumns[t],i,o),h+\u003dn.autoSize.autosizeMode\u003d\u003d\u003dSlick.ColAutosizeMode.Locked?n.width:0,u+\u003dn.autoSize.autosizeMode\u003d\u003d\u003dSlick.ColAutosizeMode.Locked?n.width:n.minWidth,s+\u003dn.autoSize.widthPx,d+\u003dn.autoSize.sizeToRemaining?0:n.autoSize.widthPx,c+\u003dn.autoSize.sizeToRemaining\u0026\u0026n.minWidth||0;var p\u003ds-d;if(e\u003d\u003d\u003dSlick.GridAutosizeColsMode.FitViewportToCols){var m\u003ds+scrollbarDimensions.width;e\u003dSlick.GridAutosizeColsMode.IgnoreViewport,options.viewportMaxWidthPx\u0026\u0026m\u003eoptions.viewportMaxWidthPx?(m\u003doptions.viewportMaxWidthPx,e\u003dSlick.GridAutosizeColsMode.FitColsToViewport):options.viewportMinWidthPx\u0026\u0026m\u003coptions.viewportMinWidthPx\u0026\u0026(m\u003doptions.viewportMinWidthPx,e\u003dSlick.GridAutosizeColsMode.FitColsToViewport),$container.width(m)}if(e\u003d\u003d\u003dSlick.GridAutosizeColsMode.FitColsToViewport)if(p\u003e0\u0026\u0026d\u003ca-c)for(t\u003d0;t\u003ccolumns.length;t++){var w\u003da-d;l\u003d(n\u003dcolumns[t]).autoSize.sizeToRemaining?w*n.autoSize.widthPx/p:n.autoSize.widthPx,n.rerenderOnResize\u0026\u0026n.width!\u003dl\u0026\u0026(r\u003d!0),n.width\u003dl}else if(options.viewportSwitchToScrollModeWidthPercent\u0026\u0026d+c\u003ea*options.viewportSwitchToScrollModeWidthPercent/100||u\u003ea)e\u003dSlick.GridAutosizeColsMode.IgnoreViewport;else{var v\u003dd-h,f\u003da-h-c;for(t\u003d0;t\u003ccolumns.length;t++)l\u003d(n\u003dcolumns[t]).width,n.autoSize.autosizeMode!\u003d\u003dSlick.ColAutosizeMode.Locked\u0026\u0026(n.autoSize.sizeToRemaining?l\u003dn.minWidth:((l\u003df/v*n.autoSize.widthPx)\u003cn.minWidth\u0026\u0026(l\u003dn.minWidth),v-\u003dn.autoSize.widthPx,f-\u003dl)),n.rerenderOnResize\u0026\u0026n.width!\u003dl\u0026\u0026(r\u003d!0),n.width\u003dl}if(e\u003d\u003d\u003dSlick.GridAutosizeColsMode.IgnoreViewport)for(t\u003d0;t\u003ccolumns.length;t++)l\u003dcolumns[t].autoSize.widthPx,columns[t].rerenderOnResize\u0026\u0026columns[t].width!\u003dl\u0026\u0026(r\u003d!0),columns[t].width\u003dl;reRenderColumns(r)}}else legacyAutosizeColumns()}function LogColWidths(){for(var e\u003d\"Col Widths:\",o\u003d0;o\u003ccolumns.length;o++)e+\u003d\" \"+columns[o].width;console.log(e)}function getColAutosizeWidth(e,o,t){var n\u003de.autoSize;if(n.widthPx\u003de.width,n.autosizeMode!\u003d\u003dSlick.ColAutosizeMode.Locked\u0026\u0026n.autosizeMode!\u003d\u003dSlick.ColAutosizeMode.Guide){var l\u003dgetDataLength();if(n.autosizeMode\u003d\u003d\u003dSlick.ColAutosizeMode.ContentIntelligent){var r,i\u003dn.colDataTypeOf;if(l\u003e0){var a\u003dgetDataItem(0);a\u0026\u0026\"object\"\u003d\u003d\u003d(i\u003dtypeof(r\u003da[e.field]))\u0026\u0026(r instanceof Date\u0026\u0026(i\u003d\"date\"),\"undefined\"!\u003dtypeof moment\u0026\u0026r instanceof moment\u0026\u0026(i\u003d\"moment\"))}\"boolean\"\u003d\u003d\u003di\u0026\u0026(n.colValueArray\u003d[!0,!1]),\"number\"\u003d\u003d\u003di\u0026\u0026(n.valueFilterMode\u003dSlick.ValueFilterMode.GetGreatestAndSub,n.rowSelectionMode\u003dSlick.RowSelectionMode.AllRows),\"string\"\u003d\u003d\u003di\u0026\u0026(n.valueFilterMode\u003dSlick.ValueFilterMode.GetLongestText,n.rowSelectionMode\u003dSlick.RowSelectionMode.AllRows,n.allowAddlPercent\u003d5),\"date\"\u003d\u003d\u003di\u0026\u0026(n.colValueArray\u003d[new Date(2009,8,30,12,20,20)]),\"moment\"\u003d\u003d\u003di\u0026\u0026\"undefined\"!\u003dtypeof moment\u0026\u0026(n.colValueArray\u003d[moment([2009,8,30,12,20,20])])}var s\u003dgetColContentSize(e,o,t);s\u003ds*(n.allowAddlPercent?1+n.allowAddlPercent/100:1)+options.autosizeColPaddingPx,e.minWidth\u0026\u0026s\u003ce.minWidth\u0026\u0026(s\u003de.minWidth),e.maxWidth\u0026\u0026s\u003ee.maxWidth\u0026\u0026(s\u003de.maxWidth),n.widthPx\u003ds}}function getColContentSize(e,o,t){var n,l\u003de.autoSize,r\u003d1,i\u003d0,a\u003d0;if(l.ignoreHeaderText||(a\u003dgetColHeaderWidth(e)),l.colValueArray)return i\u003dgetColWidth(e,o,l.colValueArray),Math.max(a,i);var s\u003dgetData();s.getItems\u0026\u0026(s\u003ds.getItems());var d\u003d(t?l.rowSelectionModeOnInit:void 0)||l.rowSelectionMode;if(d\u003d\u003d\u003dSlick.RowSelectionMode.FirstRow\u0026\u0026(s\u003ds.slice(0,1)),d\u003d\u003d\u003dSlick.RowSelectionMode.LastRow\u0026\u0026(s\u003ds.slice(s.length-1,s.length)),d\u003d\u003d\u003dSlick.RowSelectionMode.FirstNRows\u0026\u0026(s\u003ds.slice(0,l.rowSelectionCount)),l.valueFilterMode\u003d\u003d\u003dSlick.ValueFilterMode.DeDuplicate){var c\u003d{};for(u\u003d0,n\u003ds.length;u\u003cn;u++)c[s[u][e.field]]\u003d!0;if(Object.keys)s\u003dObject.keys(c);else for(var u in s\u003d[],c)s.push(u)}if(l.valueFilterMode\u003d\u003d\u003dSlick.ValueFilterMode.GetGreatestAndSub){var h,p\u003d0;for(u\u003d0,n\u003ds.length;u\u003cn;u++)w\u003ds[u][e.field],Math.abs(w)\u003ep\u0026\u0026(h\u003dw,p\u003dMath.abs(w));h\u003d\"\"+h,s\u003d[h\u003d+(h\u003dArray(h.length+1).join(\"9\"))]}if(l.valueFilterMode\u003d\u003d\u003dSlick.ValueFilterMode.GetLongestTextAndSub){var m\u003d0;for(u\u003d0,n\u003ds.length;u\u003cn;u++)((w\u003ds[u][e.field])||\"\").length\u003em\u0026\u0026(m\u003dw.length);w\u003dArray(m+1).join(\"m\"),r\u003doptions.autosizeTextAvgToMWidthRatio,s\u003d[w]}if(l.valueFilterMode\u003d\u003d\u003dSlick.ValueFilterMode.GetLongestText){m\u003d0;var w,v\u003d0;for(u\u003d0,n\u003ds.length;u\u003cn;u++)((w\u003ds[u][e.field])||\"\").length\u003em\u0026\u0026(m\u003dw.length,v\u003du);s\u003d[w\u003ds[v][e.field]]}return i\u003dgetColWidth(e,o,s)*r,Math.max(a,i)}function getColWidth(e,o,t){var n\u003dgetColumnIndex(e.id),l\u003d$(\u0027\u003cdiv class\u003d\"slick-row ui-widget-content\"\u003e\u003c/div\u003e\u0027),r\u003d$(\u0027\u003cdiv class\u003d\"slick-cell\"\u003e\u003c/div\u003e\u0027);r.css({position:\"absolute\",visibility:\"hidden\",\"text-overflow\":\"initial\",\"white-space\":\"nowrap\"}),l.append(r),o.append(l);var i,a,s,d,c\u003d0;return canvas_context\u0026\u0026e.autoSize.widthEvalMode\u003d\u003d\u003dSlick.WidthEvalMode.CanvasTextSize?(canvas_context.font\u003dr.css(\"font-size\")+\" \"+r.css(\"font-family\"),$(t).each((function(o,t){d\u003dArray.isArray(t)?t[e.field]:t,(i\u003d(a\u003d\"\"+d)?canvas_context.measureText(a).width:0)\u003ec\u0026\u0026(c\u003di,s\u003da)})),r.html(s),i\u003dr.outerWidth(),l.remove(),i):($(t).each((function(o,t){d\u003dArray.isArray(t)?t[e.field]:t,applyFormatResultToCellNode(e.formatterOverride?e.formatterOverride(o,n,d,e,t):e.formatter?e.formatter(o,n,d,e,t):\"\"+d,r[0]),(i\u003dr.outerWidth())\u003ec\u0026\u0026(c\u003di)})),l.remove(),c)}function getColHeaderWidth(e){var o\u003d0,t\u003dgetUID()+e.id,n\u003ddocument.getElementById(t),l\u003dt+\"_\";if(n){var r\u003dn.cloneNode(!0);r.id\u003dl,r.style.cssText\u003d\"position: absolute; visibility: hidden;right: auto;text-overflow: initial;white-space: nowrap;\",n.parentNode.insertBefore(r,n),o\u003dr.offsetWidth,r.parentNode.removeChild(r)}else{var i\u003dgetHeader(e);o\u003d(n\u003d$(\"\u003cdiv class\u003d\u0027ui-state-default slick-header-column\u0027 /\u003e\").html(\"\u003cspan class\u003d\u0027slick-column-name\u0027\u003e\"+e.name+\"\u003c/span\u003e\").attr(\"id\",l).css({position:\"absolute\",visibility:\"hidden\",right:\"auto\",\"text-overflow:\":\"initial\",\"white-space\":\"nowrap\"}).addClass(e.headerCssClass||\"\").appendTo(i))[0].offsetWidth,i[0].removeChild(n[0])}return o}function legacyAutosizeColumns(){var e,o,t,n\u003d[],l\u003d0,r\u003d0,i\u003dviewportHasVScroll?viewportW-scrollbarDimensions.width:viewportW;for(e\u003d0;e\u003ccolumns.length;e++)o\u003dcolumns[e],n.push(o.width),r+\u003do.width,o.resizable\u0026\u0026(l+\u003do.width-Math.max(o.minWidth,absoluteColumnMinWidth));for(t\u003dr;r\u003ei\u0026\u0026l;){var a\u003d(r-i)/l;for(e\u003d0;e\u003ccolumns.length\u0026\u0026r\u003ei;e++){o\u003dcolumns[e];var s\u003dn[e];if(!(!o.resizable||s\u003c\u003do.minWidth||s\u003c\u003dabsoluteColumnMinWidth)){var d\u003dMath.max(o.minWidth,absoluteColumnMinWidth),c\u003dMath.floor(a*(s-d))||1;r-\u003dc\u003dMath.min(c,s-d),l-\u003dc,n[e]-\u003dc}}if(t\u003c\u003dr)break;t\u003dr}for(t\u003dr;r\u003ci;){var u\u003di/r;for(e\u003d0;e\u003ccolumns.length\u0026\u0026r\u003ci;e++){o\u003dcolumns[e];var h,p\u003dn[e];r+\u003dh\u003d!o.resizable||o.maxWidth\u003c\u003dp?0:Math.min(Math.floor(u*p)-p,o.maxWidth-p||1e6)||1,n[e]+\u003dr\u003c\u003di?h:0}if(t\u003e\u003dr)break;t\u003dr}var m\u003d!1;for(e\u003d0;e\u003ccolumns.length;e++)columns[e].rerenderOnResize\u0026\u0026columns[e].width!\u003dn[e]\u0026\u0026(m\u003d!0),columns[e].width\u003dn[e];reRenderColumns(m)}function reRenderColumns(e){applyColumnHeaderWidths(),applyColumnGroupHeaderWidths(),updateCanvasWidth(!0),trigger(self.onAutosizeColumns,{columns}),e\u0026\u0026(invalidateAllRows(),render())}function trigger(e,o,t){return t\u003dt||new Slick.EventData,(o\u003do||{}).grid\u003dself,e.notify(o,t,self)}function getEditorLock(){return options.editorLock}function getEditController(){return editController}function getColumnIndex(e){return columnsById[e]}function applyColumnGroupHeaderWidths(){if(treeColumns.hasDepth())for(var e\u003d$groupHeadersL.length-1;e\u003e\u003d0;e--){treeColumns.getColumnsInDepth(e);$().add($groupHeadersL[e]).add($groupHeadersR[e]).each((function(e){var o\u003d$(this),t\u003d0;o.width(0\u003d\u003d\u003de?getHeadersWidthL():getHeadersWidthR()),o.children().each((function(){var e\u003d$(this),n\u003d$(this).data(\"column\");n.width\u003d0,n.columns.forEach((function(){var e\u003do.next().children(\":eq(\"+t+++\")\");n.width+\u003de.outerWidth()})),e.width(n.width-headerColumnWidthDiff)}))}))}}function applyColumnHeaderWidths(){if(initialized){for(var e,o\u003d0,t\u003d$headers.children(),n\u003dcolumns.length;o\u003cn;o++)e\u003d$(t[o]),jQueryNewWidthBehaviour?e.outerWidth()!\u003d\u003dcolumns[o].width\u0026\u0026e.outerWidth(columns[o].width):e.width()!\u003d\u003dcolumns[o].width-headerColumnWidthDiff\u0026\u0026e.width(columns[o].width-headerColumnWidthDiff);updateColumnCaches()}}function applyColumnWidths(){for(var e,o,t\u003d0,n\u003d0;n\u003ccolumns.length;n++)e\u003dcolumns[n].width,(o\u003dgetColumnCssRules(n)).left.style.left\u003dt+\"px\",o.right.style.right\u003d(-1!\u003doptions.frozenColumn\u0026\u0026n\u003eoptions.frozenColumn?canvasWidthR:canvasWidthL)-t-e+\"px\",options.frozenColumn\u003d\u003dn?t\u003d0:t+\u003dcolumns[n].width}function setSortColumn(e,o){setSortColumns([{columnId:e,sortAsc:o}])}function setSortColumns(e){sortColumns\u003de;var o\u003doptions.numberedMultiColumnSort\u0026\u0026sortColumns.length\u003e1,t\u003d$headers.children();t.removeClass(\"slick-header-column-sorted\").find(\".slick-sort-indicator\").removeClass(\"slick-sort-indicator-asc slick-sort-indicator-desc\"),t.find(\".slick-sort-indicator-numbered\").text(\"\"),$.each(sortColumns,(function(e,n){null\u003d\u003dn.sortAsc\u0026\u0026(n.sortAsc\u003d!0);var l\u003dgetColumnIndex(n.columnId);null!\u003dl\u0026\u0026(t.eq(l).addClass(\"slick-header-column-sorted\").find(\".slick-sort-indicator\").addClass(n.sortAsc?\"slick-sort-indicator-asc\":\"slick-sort-indicator-desc\"),o\u0026\u0026t.eq(l).find(\".slick-sort-indicator-numbered\").text(e+1))}))}function getSortColumns(){return sortColumns}function handleSelectedRangesChanged(e,o){var t\u003dselectedRows.slice(0);selectedRows\u003d[];for(var n\u003d{},l\u003d0;l\u003co.length;l++)for(var r\u003do[l].fromRow;r\u003c\u003do[l].toRow;r++){n[r]||(selectedRows.push(r),n[r]\u003d{});for(var i\u003do[l].fromCell;i\u003c\u003do[l].toCell;i++)canCellBeSelected(r,i)\u0026\u0026(n[r][columns[i].id]\u003doptions.selectedCellCssClass)}setCellCssStyles(options.selectedCellCssClass,n),simpleArrayEquals(t,selectedRows)\u0026\u0026trigger(self.onSelectedRowsChanged,{rows:getSelectedRows(),previousSelectedRows:t},e)}function simpleArrayEquals(e,o){return Array.isArray(e)\u0026\u0026Array.isArray(o)\u0026\u0026o.sort().toString()!\u003d\u003de.sort().toString()}function getColumns(){return columns}function updateColumnCaches(){columnPosLeft\u003d[],columnPosRight\u003d[];for(var e\u003d0,o\u003d0,t\u003dcolumns.length;o\u003ct;o++)columnPosLeft[o]\u003de,columnPosRight[o]\u003de+columns[o].width,options.frozenColumn\u003d\u003do?e\u003d0:e+\u003dcolumns[o].width}function updateColumnProps(){columnsById\u003d{};for(var e\u003d0;e\u003ccolumns.length;e++){columns[e].width\u0026\u0026(columns[e].widthRequest\u003dcolumns[e].width);var o\u003dcolumns[e]\u003d$.extend({},columnDefaults,columns[e]);o.autoSize\u003d$.extend({},columnAutosizeDefaults,o.autoSize),columnsById[o.id]\u003de,o.minWidth\u0026\u0026o.width\u003co.minWidth\u0026\u0026(o.width\u003do.minWidth),o.maxWidth\u0026\u0026o.width\u003eo.maxWidth\u0026\u0026(o.width\u003do.maxWidth),o.resizable}}function setColumns(e){var o\u003dnew Slick.TreeColumns(e);columns\u003do.hasDepth()?(treeColumns\u003do).extractColumns():e,updateColumnProps(),updateColumnCaches(),initialized\u0026\u0026(setPaneVisibility(),setOverflow(),invalidateAllRows(),createColumnHeaders(),createColumnGroupHeaders(),createColumnFooter(),removeCssRules(),createCssRules(),resizeCanvas(),updateCanvasWidth(),applyColumnHeaderWidths(),applyColumnWidths(),handleScroll())}function getOptions(){return options}function setOptions(e,o){if(getEditorLock().commitCurrentEdit()){makeActiveCellNormal(),void 0!\u003d\u003de.showColumnHeader\u0026\u0026setColumnHeaderVisibility(e.showColumnHeader),options.enableAddRow!\u003d\u003de.enableAddRow\u0026\u0026invalidateRow(getDataLength());var t\u003d$.extend(!0,{},options);options\u003d$.extend(options,e),trigger(self.onSetOptions,{optionsBefore:t,optionsAfter:options}),validateAndEnforceOptions(),$viewport.css(\"overflow-y\",options.autoHeight?\"hidden\":\"auto\"),o||render(),setFrozenOptions(),setScroller(),zombieRowNodeFromLastMouseWheelEvent\u003dnull,setColumns(treeColumns.extractColumns())}}function validateAndEnforceOptions(){options.autoHeight\u0026\u0026(options.leaveSpaceForNewRows\u003d!1),options.forceFitColumns\u0026\u0026(options.autosizeColsMode\u003dSlick.GridAutosizeColsMode.LegacyForceFit,console.log(\"forceFitColumns option is deprecated - use autosizeColsMode\"))}function setData(e,o){data\u003de,invalidateAllRows(),updateRowCount(),o\u0026\u0026scrollTo(0)}function getData(){return data}function getDataLength(){return data.getLength?data.getLength():data\u0026\u0026data.length||0}function getDataLengthIncludingAddNew(){return getDataLength()+(options.enableAddRow\u0026\u0026(!pagingActive||pagingIsLastPage)?1:0)}function getDataItem(e){return data.getItem?data.getItem(e):data[e]}function getTopPanel(){return $topPanel[0]}function setTopPanelVisibility(e,o){var t\u003d!1!\u003d\u003do;options.showTopPanel!\u003de\u0026\u0026(options.showTopPanel\u003de,e?t?$topPanelScroller.slideDown(\"fast\",resizeCanvas):($topPanelScroller.show(),resizeCanvas()):t?$topPanelScroller.slideUp(\"fast\",resizeCanvas):($topPanelScroller.hide(),resizeCanvas()))}function setHeaderRowVisibility(e,o){var t\u003d!1!\u003d\u003do;options.showHeaderRow!\u003de\u0026\u0026(options.showHeaderRow\u003de,e?t?$headerRowScroller.slideDown(\"fast\",resizeCanvas):($headerRowScroller.show(),resizeCanvas()):t?$headerRowScroller.slideUp(\"fast\",resizeCanvas):($headerRowScroller.hide(),resizeCanvas()))}function setColumnHeaderVisibility(e,o){options.showColumnHeader!\u003de\u0026\u0026(options.showColumnHeader\u003de,e?o?$headerScroller.slideDown(\"fast\",resizeCanvas):($headerScroller.show(),resizeCanvas()):o?$headerScroller.slideUp(\"fast\",resizeCanvas):($headerScroller.hide(),resizeCanvas()))}function setFooterRowVisibility(e,o){var t\u003d!1!\u003d\u003do;options.showFooterRow!\u003de\u0026\u0026(options.showFooterRow\u003de,e?t?$footerRowScroller.slideDown(\"fast\",resizeCanvas):($footerRowScroller.show(),resizeCanvas()):t?$footerRowScroller.slideUp(\"fast\",resizeCanvas):($footerRowScroller.hide(),resizeCanvas()))}function setPreHeaderPanelVisibility(e,o){var t\u003d!1!\u003d\u003do;options.showPreHeaderPanel!\u003de\u0026\u0026(options.showPreHeaderPanel\u003de,e?t?$preHeaderPanelScroller.slideDown(\"fast\",resizeCanvas):($preHeaderPanelScroller.show(),resizeCanvas()):t?$preHeaderPanelScroller.slideUp(\"fast\",resizeCanvas):($preHeaderPanelScroller.hide(),resizeCanvas()))}function getContainerNode(){return $container.get(0)}function getRowTop(e){return options.rowHeight*e-offset}function getRowFromPosition(e){return Math.floor((e+offset)/options.rowHeight)}function scrollTo(e){e\u003dMath.max(e,0),e\u003dMath.min(e,th-$viewportScrollContainerY.height()+(viewportHasHScroll||hasFrozenColumns()?scrollbarDimensions.height:0));var o\u003doffset;page\u003dMath.min(n-1,Math.floor(e/ph));var t\u003de-(offset\u003dMath.round(page*cj));offset!\u003do\u0026\u0026(cleanupRows(getVisibleRange(t)),updateRowPositions());prevScrollTop!\u003dt\u0026\u0026(vScrollDir\u003dprevScrollTop+o\u003ct+offset?1:-1,lastRenderedScrollTop\u003dscrollTop\u003dprevScrollTop\u003dt,hasFrozenColumns()\u0026\u0026($viewportTopL[0].scrollTop\u003dt),hasFrozenRows\u0026\u0026($viewportBottomL[0].scrollTop\u003d$viewportBottomR[0].scrollTop\u003dt),$viewportScrollContainerY[0].scrollTop\u003dt,trigger(self.onViewportChanged,{}))}function defaultFormatter(e,o,t,n,l,r){return null\u003d\u003dt?\"\":(t+\"\").replace(/\u0026/g,\"\u0026amp;\").replace(/\u003c/g,\"\u0026lt;\").replace(/\u003e/g,\"\u0026gt;\")}function getFormatter(e,o){var t\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(e),n\u003dt\u0026\u0026t.columns\u0026\u0026(t.columns[o.id]||t.columns[getColumnIndex(o.id)]);return n\u0026\u0026n.formatter||t\u0026\u0026t.formatter||o.formatter||options.formatterFactory\u0026\u0026options.formatterFactory.getFormatter(o)||options.defaultFormatter}function callFormatter(e,o,t,n,l,r){var i,a\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(e);if(a\u003da\u0026\u0026a.columns){var s\u003da[n.id]||a[o];i\u003dgetFormatter(e,n)(e,o,t,n,l,s)}else i\u003dgetFormatter(e,n)(e,o,t,n,l);return i}function getEditor(e,o){var t\u003dcolumns[o],n\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(e),l\u003dn\u0026\u0026n.columns;return l\u0026\u0026l[t.id]\u0026\u0026void 0!\u003d\u003dl[t.id].editor?l[t.id].editor:l\u0026\u0026l[o]\u0026\u0026void 0!\u003d\u003dl[o].editor?l[o].editor:t.editor||options.editorFactory\u0026\u0026options.editorFactory.getEditor(t)}function getDataItemValueForColumn(e,o){return options.dataItemColumnValueExtractor?options.dataItemColumnValueExtractor(e,o):e[o.field]}function appendRowHtml(e,o,t,n,l){var r\u003dgetDataItem(t),i\u003dt\u003cl\u0026\u0026!r,a\u003d\"slick-row\"+(hasFrozenRows\u0026\u0026t\u003c\u003doptions.frozenRow?\" frozen\":\"\")+(i?\" loading\":\"\")+(t\u003d\u003d\u003dactiveRow\u0026\u0026options.showCellSelection?\" active\":\"\")+(t%2\u003d\u003d1?\" odd\":\" even\");r||(a+\u003d\" \"+options.addNewRowCssClass);var s\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(t);s\u0026\u0026s.cssClasses\u0026\u0026(a+\u003d\" \"+s.cssClasses);var d,c,u\u003dgetFrozenRowOffset(t),h\u003d\"\u003cdiv class\u003d\u0027ui-widget-content \"+a+\"\u0027 style\u003d\u0027top:\"+(getRowTop(t)-u)+\"px\u0027\u003e\";e.push(h),hasFrozenColumns()\u0026\u0026o.push(h);for(var p\u003d0,m\u003dcolumns.length;p\u003cm;p++){if(c\u003dcolumns[p],d\u003d1,s\u0026\u0026s.columns){var w\u003ds.columns[c.id]||s.columns[p];\"*\"\u003d\u003d\u003d(d\u003dw\u0026\u0026w.colspan||1)\u0026\u0026(d\u003dm-p)}if(columnPosRight[Math.min(m-1,p+d-1)]\u003en.leftPx){if(!c.alwaysRenderColumn\u0026\u0026columnPosLeft[p]\u003en.rightPx)break;hasFrozenColumns()\u0026\u0026p\u003eoptions.frozenColumn?appendCellHtml(o,t,p,d,r):appendCellHtml(e,t,p,d,r)}else(c.alwaysRenderColumn||hasFrozenColumns()\u0026\u0026p\u003c\u003doptions.frozenColumn)\u0026\u0026appendCellHtml(e,t,p,d,r);d\u003e1\u0026\u0026(p+\u003dd-1)}e.push(\"\u003c/div\u003e\"),hasFrozenColumns()\u0026\u0026o.push(\"\u003c/div\u003e\")}function appendCellHtml(e,o,t,n,l){var r\u003dcolumns[t],i\u003d\"slick-cell l\"+t+\" r\"+Math.min(columns.length-1,t+n-1)+(r.cssClass?\" \"+r.cssClass:\"\");for(var a in hasFrozenColumns()\u0026\u0026t\u003c\u003doptions.frozenColumn\u0026\u0026(i+\u003d\" frozen\"),o\u003d\u003d\u003dactiveRow\u0026\u0026t\u003d\u003d\u003dactiveCell\u0026\u0026options.showCellSelection\u0026\u0026(i+\u003d\" active\"),cellCssClasses)cellCssClasses[a][o]\u0026\u0026cellCssClasses[a][o][r.id]\u0026\u0026(i+\u003d\" \"+cellCssClasses[a][o][r.id]);var s\u003dnull,d\u003d\"\";l\u0026\u0026(s\u003dgetDataItemValueForColumn(l,r),null\u003d\u003d(d\u003dgetFormatter(o,r)(o,t,s,r,l,self))\u0026\u0026(d\u003d\"\"));var c\u003dtrigger(self.onBeforeAppendCell,{row:o,cell:t,value:s,dataContext:l})||\"\";c+\u003dd\u0026\u0026d.addClasses?(c?\" \":\"\")+d.addClasses:\"\";var u\u003dd\u0026\u0026d.toolTip?\"title\u003d\u0027\"+d.toolTip+\"\u0027\":\"\",h\u003d\"\";if(r.hasOwnProperty(\"cellAttrs\")\u0026\u0026r.cellAttrs instanceof Object)for(var a in r.cellAttrs)r.cellAttrs.hasOwnProperty(a)\u0026\u0026(h+\u003d\" \"+a+\u0027\u003d\"\u0027+r.cellAttrs[a]+\u0027\" \u0027);e.push(\"\u003cdiv class\u003d\u0027\"+i+(c?\" \"+c:\"\")+\"\u0027 \"+u+h+\"\u003e\"),l\u0026\u0026e.push(\"[object Object]\"!\u003d\u003dObject.prototype.toString.call(d)?d:d.text),e.push(\"\u003c/div\u003e\"),rowsCache[o].cellRenderQueue.push(t),rowsCache[o].cellColSpans[t]\u003dn}function cleanupRows(e){for(var o in rowsCache){var t\u003d!0;hasFrozenRows\u0026\u0026(options.frozenBottom\u0026\u0026o\u003e\u003dactualFrozenRow||!options.frozenBottom\u0026\u0026o\u003c\u003dactualFrozenRow)\u0026\u0026(t\u003d!1),(o\u003dparseInt(o,10))!\u003d\u003dactiveRow\u0026\u0026(o\u003ce.top||o\u003ee.bottom)\u0026\u0026t\u0026\u0026removeRowFromCache(o)}options.enableAsyncPostRenderCleanup\u0026\u0026startPostProcessingCleanup()}function invalidate(){updateRowCount(),invalidateAllRows(),render()}function invalidateAllRows(){for(var e in currentEditor\u0026\u0026makeActiveCellNormal(),rowsCache)removeRowFromCache(e);options.enableAsyncPostRenderCleanup\u0026\u0026startPostProcessingCleanup()}function queuePostProcessedRowForCleanup(e,o,t){for(var n in postProcessgroupId++,o)o.hasOwnProperty(n)\u0026\u0026postProcessedCleanupQueue.push({actionType:\"C\",groupId:postProcessgroupId,node:e.cellNodesByColumnIdx[0|n],columnIdx:0|n,rowIdx:t});postProcessedCleanupQueue.push({actionType:\"R\",groupId:postProcessgroupId,node:e.rowNode}),$(e.rowNode).detach()}function queuePostProcessedCellForCleanup(e,o,t){postProcessedCleanupQueue.push({actionType:\"C\",groupId:postProcessgroupId,node:e,columnIdx:o,rowIdx:t}),$(e).detach()}function removeRowFromCache(e){var o\u003drowsCache[e];o\u0026\u0026(rowNodeFromLastMouseWheelEvent\u003d\u003do.rowNode[0]||hasFrozenColumns()\u0026\u0026rowNodeFromLastMouseWheelEvent\u003d\u003do.rowNode[1]?(o.rowNode.hide(),zombieRowNodeFromLastMouseWheelEvent\u003do.rowNode):o.rowNode.each((function(){this.parentElement.removeChild(this)})),delete rowsCache[e],delete postProcessedRows[e],renderedRows--,counter_rows_removed++)}function invalidateRows(e){var o,t;if(e\u0026\u0026e.length){for(vScrollDir\u003d0,t\u003de.length,o\u003d0;o\u003ct;o++)currentEditor\u0026\u0026activeRow\u003d\u003d\u003de[o]\u0026\u0026makeActiveCellNormal(),rowsCache[e[o]]\u0026\u0026removeRowFromCache(e[o]);options.enableAsyncPostRenderCleanup\u0026\u0026startPostProcessingCleanup()}}function invalidateRow(e){(e||0\u003d\u003d\u003de)\u0026\u0026invalidateRows([e])}function applyFormatResultToCellNode(e,o,t){null\u003d\u003de\u0026\u0026(e\u003d\"\"),\"[object Object]\"\u003d\u003d\u003dObject.prototype.toString.call(e)?(o.innerHTML\u003de.text,e.removeClasses\u0026\u0026!t\u0026\u0026$(o).removeClass(e.removeClasses),e.addClasses\u0026\u0026$(o).addClass(e.addClasses),e.toolTip\u0026\u0026$(o).attr(\"title\",e.toolTip)):o.innerHTML\u003de}function updateCell(e,o){var t\u003dgetCellNode(e,o);if(t){var n\u003dcolumns[o],l\u003dgetDataItem(e);if(currentEditor\u0026\u0026activeRow\u003d\u003d\u003de\u0026\u0026activeCell\u003d\u003d\u003do)currentEditor.loadValue(l);else applyFormatResultToCellNode(l?getFormatter(e,n)(e,o,getDataItemValueForColumn(l,n),n,l,self):\"\",t),invalidatePostProcessingResults(e)}}function updateRow(e){var o\u003drowsCache[e];if(o){ensureCellNodesInRowsCache(e);var t\u003dgetDataItem(e);for(var n in o.cellNodesByColumnIdx)if(o.cellNodesByColumnIdx.hasOwnProperty(n)){var l\u003dcolumns[n|\u003d0],r\u003do.cellNodesByColumnIdx[n][0];e\u003d\u003d\u003dactiveRow\u0026\u0026n\u003d\u003d\u003dactiveCell\u0026\u0026currentEditor?currentEditor.loadValue(t):t?applyFormatResultToCellNode(getFormatter(e,l)(e,n,getDataItemValueForColumn(t,l),l,t,self),r):r.innerHTML\u003d\"\"}invalidatePostProcessingResults(e)}}function getViewportHeight(){if(options.autoHeight\u0026\u0026-1\u003d\u003doptions.frozenColumn||(topPanelH\u003doptions.showTopPanel?options.topPanelHeight+getVBoxDelta($topPanelScroller):0,headerRowH\u003doptions.showHeaderRow?options.headerRowHeight+getVBoxDelta($headerRowScroller):0,footerRowH\u003doptions.showFooterRow?options.footerRowHeight+getVBoxDelta($footerRowScroller):0),options.autoHeight){var e\u003d$paneHeaderL.outerHeight();e+\u003doptions.showHeaderRow?options.headerRowHeight+getVBoxDelta($headerRowScroller):0,e+\u003doptions.showFooterRow?options.footerRowHeight+getVBoxDelta($footerRowScroller):0,e+\u003dgetCanvasWidth()\u003eviewportW?scrollbarDimensions.height:0,viewportH\u003doptions.rowHeight*getDataLengthIncludingAddNew()+(-1\u003d\u003doptions.frozenColumn?e:0)}else{var o\u003doptions.showColumnHeader?parseFloat($.css($headerScroller[0],\"height\"))+getVBoxDelta($headerScroller):0,t\u003doptions.createPreHeaderPanel\u0026\u0026options.showPreHeaderPanel?options.preHeaderPanelHeight+getVBoxDelta($preHeaderPanelScroller):0;viewportH\u003dparseFloat($.css($container[0],\"height\",!0))-parseFloat($.css($container[0],\"paddingTop\",!0))-parseFloat($.css($container[0],\"paddingBottom\",!0))-o-topPanelH-headerRowH-footerRowH-t}return numVisibleRows\u003dMath.ceil(viewportH/options.rowHeight),viewportH}function getViewportWidth(){viewportW\u003dparseFloat($container.width())}function resizeCanvas(){if(initialized){paneTopH\u003d0,paneBottomH\u003d0,viewportTopH\u003d0,viewportBottomH\u003d0,getViewportWidth(),getViewportHeight(),hasFrozenRows?options.frozenBottom?(paneTopH\u003dviewportH-frozenRowsHeight-scrollbarDimensions.height,paneBottomH\u003dfrozenRowsHeight+scrollbarDimensions.height):(paneTopH\u003dfrozenRowsHeight,paneBottomH\u003dviewportH-frozenRowsHeight):paneTopH\u003dviewportH,paneTopH+\u003dtopPanelH+headerRowH+footerRowH,hasFrozenColumns()\u0026\u0026options.autoHeight\u0026\u0026(paneTopH+\u003dscrollbarDimensions.height),viewportTopH\u003dpaneTopH-topPanelH-headerRowH-footerRowH,options.autoHeight\u0026\u0026(hasFrozenColumns()\u0026\u0026$container.height(paneTopH+parseFloat($.css($headerScrollerL[0],\"height\"))),$paneTopL.css(\"position\",\"relative\")),$paneTopL.css({top:$paneHeaderL.height(),height:paneTopH});var e\u003d$paneTopL.position().top+paneTopH;options.autoHeight||$viewportTopL.height(viewportTopH),hasFrozenColumns()?($paneTopR.css({top:$paneHeaderL.height(),height:paneTopH}),$viewportTopR.height(viewportTopH),hasFrozenRows\u0026\u0026($paneBottomL.css({top:e,height:paneBottomH}),$paneBottomR.css({top:e,height:paneBottomH}),$viewportBottomR.height(paneBottomH))):hasFrozenRows\u0026\u0026($paneBottomL.css({width:\"100%\",height:paneBottomH}),$paneBottomL.css(\"top\",e)),hasFrozenRows?($viewportBottomL.height(paneBottomH),options.frozenBottom?($canvasBottomL.height(frozenRowsHeight),hasFrozenColumns()\u0026\u0026$canvasBottomR.height(frozenRowsHeight)):($canvasTopL.height(frozenRowsHeight),hasFrozenColumns()\u0026\u0026$canvasTopR.height(frozenRowsHeight))):$viewportTopR.height(viewportTopH),scrollbarDimensions\u0026\u0026scrollbarDimensions.width||(scrollbarDimensions\u003dmeasureScrollbar()),options.autosizeColsMode\u003d\u003d\u003dSlick.GridAutosizeColsMode.LegacyForceFit\u0026\u0026autosizeColumns(),updateRowCount(),handleScroll(),lastRenderedScrollLeft\u003d-1,render()}}function updatePagingStatusFromView(e){pagingActive\u003d0!\u003d\u003de.pageSize,pagingIsLastPage\u003de.pageNum\u003d\u003de.totalPages-1}function updateRowCount(){if(initialized){var e\u003dgetDataLength(),o\u003dgetDataLengthIncludingAddNew(),t\u003d0,l\u003dhasFrozenRows\u0026\u0026!options.frozenBottom?$canvasBottomL.height():$canvasTopL.height();if(hasFrozenRows)t\u003dgetDataLength()-options.frozenRow;else t\u003do+(options.leaveSpaceForNewRows?numVisibleRows-1:0);var r\u003d$viewportScrollContainerY.height(),i\u003dviewportHasVScroll;viewportHasVScroll\u003doptions.alwaysShowVerticalScroll||!options.autoHeight\u0026\u0026t*options.rowHeight\u003er,makeActiveCellNormal();var a\u003de-1;for(var s in rowsCache)s\u003ea\u0026\u0026removeRowFromCache(s);options.enableAsyncPostRenderCleanup\u0026\u0026startPostProcessingCleanup(),activeCellNode\u0026\u0026activeRow\u003ea\u0026\u0026resetActiveCell();l\u003dh;options.autoHeight?h\u003doptions.rowHeight*t:(th\u003dMath.max(options.rowHeight*t,r-scrollbarDimensions.height))\u003cmaxSupportedCssHeight?(h\u003dph\u003dth,n\u003d1,cj\u003d0):(ph\u003d(h\u003dmaxSupportedCssHeight)/100,n\u003dMath.floor(th/ph),cj\u003d(th-h)/(n-1)),h!\u003d\u003dl\u0026\u0026(hasFrozenRows\u0026\u0026!options.frozenBottom?($canvasBottomL.css(\"height\",h),hasFrozenColumns()\u0026\u0026$canvasBottomR.css(\"height\",h)):($canvasTopL.css(\"height\",h),$canvasTopR.css(\"height\",h)),scrollTop\u003d$viewportScrollContainerY[0].scrollTop);var d\u003dscrollTop+offset\u003c\u003dth-r;0\u003d\u003dth||0\u003d\u003dscrollTop?page\u003doffset\u003d0:scrollTo(d?scrollTop+offset:th-r),h!\u003dl\u0026\u0026options.autoHeight\u0026\u0026resizeCanvas(),options.autosizeColsMode\u003d\u003d\u003dSlick.GridAutosizeColsMode.LegacyForceFit\u0026\u0026i!\u003dviewportHasVScroll\u0026\u0026autosizeColumns(),updateCanvasWidth(!1)}}function getVisibleRange(e,o){return null\u003d\u003de\u0026\u0026(e\u003dscrollTop),null\u003d\u003do\u0026\u0026(o\u003dscrollLeft),{top:getRowFromPosition(e),bottom:getRowFromPosition(e+viewportH)+1,leftPx:o,rightPx:o+viewportW}}function getRenderedRange(e,o){var t\u003dgetVisibleRange(e,o),n\u003dMath.round(viewportH/options.rowHeight),l\u003doptions.minRowBuffer;return-1\u003d\u003dvScrollDir?(t.top-\u003dn,t.bottom+\u003dl):1\u003d\u003dvScrollDir?(t.top-\u003dl,t.bottom+\u003dn):(t.top-\u003dl,t.bottom+\u003dl),t.top\u003dMath.max(0,t.top),t.bottom\u003dMath.min(getDataLengthIncludingAddNew()-1,t.bottom),t.leftPx-\u003dviewportW,t.rightPx+\u003dviewportW,t.leftPx\u003dMath.max(0,t.leftPx),t.rightPx\u003dMath.min(canvasWidth,t.rightPx),t}function ensureCellNodesInRowsCache(e){var o\u003drowsCache[e];if(o\u0026\u0026o.cellRenderQueue.length)for(var t\u003do.rowNode.children().last();o.cellRenderQueue.length;){var n\u003do.cellRenderQueue.pop();o.cellNodesByColumnIdx[n]\u003dt,0\u003d\u003d\u003d(t\u003dt.prev()).length\u0026\u0026(t\u003d$(o.rowNode[0]).children().last())}}function cleanUpCells(e,o){if(!hasFrozenRows||!(options.frozenBottom\u0026\u0026o\u003eactualFrozenRow||o\u003c\u003dactualFrozenRow)){var t,n\u003drowsCache[o],l\u003d[];for(var r in n.cellNodesByColumnIdx)if(n.cellNodesByColumnIdx.hasOwnProperty(r)\u0026\u0026!((r|\u003d0)\u003c\u003doptions.frozenColumn||Array.isArray(columns)\u0026\u0026columns[r]\u0026\u0026columns[r].alwaysRenderColumn)){var i\u003dn.cellColSpans[r];(columnPosLeft[r]\u003ee.rightPx||columnPosRight[Math.min(columns.length-1,r+i-1)]\u003ce.leftPx)\u0026\u0026(o\u003d\u003dactiveRow\u0026\u0026r\u003d\u003dactiveCell||l.push(r))}for(;null!\u003d(t\u003dl.pop());)n.cellNodesByColumnIdx[t][0].parentElement.removeChild(n.cellNodesByColumnIdx[t][0]),delete n.cellColSpans[t],delete n.cellNodesByColumnIdx[t],postProcessedRows[o]\u0026\u0026delete postProcessedRows[o][t]}}function cleanUpAndRenderCells(e){for(var o,t,n,l\u003d[],r\u003d[],i\u003de.top,a\u003de.bottom;i\u003c\u003da;i++)if(o\u003drowsCache[i]){ensureCellNodesInRowsCache(i),cleanUpCells(e,i),t\u003d0;var s\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(i);s\u003ds\u0026\u0026s.columns;for(var d\u003dgetDataItem(i),c\u003d0,u\u003dcolumns.length;c\u003cu\u0026\u0026!(columnPosLeft[c]\u003ee.rightPx);c++)if(null\u003d\u003d(n\u003do.cellColSpans[c])){if(n\u003d1,s){var h\u003ds[columns[c].id]||s[c];\"*\"\u003d\u003d\u003d(n\u003dh\u0026\u0026h.colspan||1)\u0026\u0026(n\u003du-c)}columnPosRight[Math.min(u-1,c+n-1)]\u003ee.leftPx\u0026\u0026(appendCellHtml(l,i,c,n,d),t++),c+\u003dn\u003e1?n-1:0}else c+\u003dn\u003e1?n-1:0;t\u0026\u0026(t,r.push(i))}if(l.length){var p,m,w\u003ddocument.createElement(\"div\");for(w.innerHTML\u003dl.join(\"\");null!\u003d(p\u003dr.pop());){var v;for(o\u003drowsCache[p];null!\u003d(v\u003do.cellRenderQueue.pop());)m\u003dw.lastChild,hasFrozenColumns()\u0026\u0026v\u003eoptions.frozenColumn?o.rowNode[1].appendChild(m):o.rowNode[0].appendChild(m),o.cellNodesByColumnIdx[v]\u003d$(m)}}}function renderRows(e){for(var o\u003d[],t\u003d[],n\u003d[],l\u003d!1,r\u003dgetDataLength(),i\u003de.top,a\u003de.bottom;i\u003c\u003da;i++)rowsCache[i]||hasFrozenRows\u0026\u0026options.frozenBottom\u0026\u0026i\u003d\u003dgetDataLength()||(renderedRows++,n.push(i),rowsCache[i]\u003d{rowNode:null,cellColSpans:[],cellNodesByColumnIdx:[],cellRenderQueue:[]},appendRowHtml(o,t,i,e,r),activeCellNode\u0026\u0026activeRow\u003d\u003d\u003di\u0026\u0026(l\u003d!0),counter_rows_rendered++);if(n.length){var s\u003ddocument.createElement(\"div\"),d\u003ddocument.createElement(\"div\");s.innerHTML\u003do.join(\"\"),d.innerHTML\u003dt.join(\"\");for(i\u003d0,a\u003dn.length;i\u003ca;i++)hasFrozenRows\u0026\u0026n[i]\u003e\u003dactualFrozenRow?hasFrozenColumns()?rowsCache[n[i]].rowNode\u003d$().add($(s.firstChild).appendTo($canvasBottomL)).add($(d.firstChild).appendTo($canvasBottomR)):rowsCache[n[i]].rowNode\u003d$().add($(s.firstChild).appendTo($canvasBottomL)):hasFrozenColumns()?rowsCache[n[i]].rowNode\u003d$().add($(s.firstChild).appendTo($canvasTopL)).add($(d.firstChild).appendTo($canvasTopR)):rowsCache[n[i]].rowNode\u003d$().add($(s.firstChild).appendTo($canvasTopL));l\u0026\u0026(activeCellNode\u003dgetCellNode(activeRow,activeCell))}}function startPostProcessing(){options.enableAsyncPostRender\u0026\u0026(clearTimeout(h_postrender),h_postrender\u003dsetTimeout(asyncPostProcessRows,options.asyncPostRenderDelay))}function startPostProcessingCleanup(){options.enableAsyncPostRenderCleanup\u0026\u0026(clearTimeout(h_postrenderCleanup),h_postrenderCleanup\u003dsetTimeout(asyncPostProcessCleanupRows,options.asyncPostRenderCleanupDelay))}function invalidatePostProcessingResults(e){for(var o in postProcessedRows[e])postProcessedRows[e].hasOwnProperty(o)\u0026\u0026(postProcessedRows[e][o]\u003d\"C\");postProcessFromRow\u003dMath.min(postProcessFromRow,e),postProcessToRow\u003dMath.max(postProcessToRow,e),startPostProcessing()}function updateRowPositions(){for(var e in rowsCache){var o\u003de?parseInt(e):0;rowsCache[o].rowNode[0].style.top\u003dgetRowTop(o)+\"px\"}}function render(){if(initialized){scrollThrottle.dequeue();var e\u003dgetVisibleRange(),o\u003dgetRenderedRange();if(cleanupRows(o),lastRenderedScrollLeft!\u003dscrollLeft){if(hasFrozenRows){var t\u003d$.extend(!0,{},o);options.frozenBottom?(t.top\u003dactualFrozenRow,t.bottom\u003dgetDataLength()):(t.top\u003d0,t.bottom\u003doptions.frozenRow),cleanUpAndRenderCells(t)}cleanUpAndRenderCells(o)}renderRows(o),hasFrozenRows\u0026\u0026(options.frozenBottom?renderRows({top:actualFrozenRow,bottom:getDataLength()-1,leftPx:o.leftPx,rightPx:o.rightPx}):renderRows({top:0,bottom:options.frozenRow-1,leftPx:o.leftPx,rightPx:o.rightPx})),postProcessFromRow\u003de.top,postProcessToRow\u003dMath.min(getDataLengthIncludingAddNew()-1,e.bottom),startPostProcessing(),lastRenderedScrollTop\u003dscrollTop,lastRenderedScrollLeft\u003dscrollLeft,h_render\u003dnull,trigger(self.onRendered,{startRow:e.top,endRow:e.bottom,grid:self})}}function handleHeaderScroll(){handleElementScroll($headerScrollContainer[0])}function handleHeaderRowScroll(){var e\u003d$headerRowScrollContainer[0].scrollLeft;e!\u003d$viewportScrollContainerX[0].scrollLeft\u0026\u0026($viewportScrollContainerX[0].scrollLeft\u003de)}function handleFooterRowScroll(){var e\u003d$footerRowScrollContainer[0].scrollLeft;e!\u003d$viewportScrollContainerX[0].scrollLeft\u0026\u0026($viewportScrollContainerX[0].scrollLeft\u003de)}function handlePreHeaderPanelScroll(){handleElementScroll($preHeaderPanelScroller[0])}function handleElementScroll(e){var o\u003de.scrollLeft;o!\u003d$viewportScrollContainerX[0].scrollLeft\u0026\u0026($viewportScrollContainerX[0].scrollLeft\u003do)}function handleScroll(){return scrollTop\u003d$viewportScrollContainerY[0].scrollTop,scrollLeft\u003d$viewportScrollContainerX[0].scrollLeft,_handleScroll(!1)}function _handleScroll(e){var o\u003d$viewportScrollContainerY[0].scrollHeight-$viewportScrollContainerY[0].clientHeight,t\u003d$viewportScrollContainerY[0].scrollWidth-$viewportScrollContainerY[0].clientWidth;o\u003dMath.max(0,o),t\u003dMath.max(0,t),scrollTop\u003eo\u0026\u0026(scrollTop\u003do),scrollLeft\u003et\u0026\u0026(scrollLeft\u003dt);var l\u003dMath.abs(scrollTop-prevScrollTop),r\u003dMath.abs(scrollLeft-prevScrollLeft);if(r\u0026\u0026(prevScrollLeft\u003dscrollLeft,$viewportScrollContainerX[0].scrollLeft\u003dscrollLeft,$headerScrollContainer[0].scrollLeft\u003dscrollLeft,$topPanelScroller[0].scrollLeft\u003dscrollLeft,$headerRowScrollContainer[0].scrollLeft\u003dscrollLeft,options.createFooterRow\u0026\u0026($footerRowScrollContainer[0].scrollLeft\u003dscrollLeft),options.createPreHeaderPanel\u0026\u0026(hasFrozenColumns()?$preHeaderPanelScrollerR[0].scrollLeft\u003dscrollLeft:$preHeaderPanelScroller[0].scrollLeft\u003dscrollLeft),hasFrozenColumns()?hasFrozenRows\u0026\u0026($viewportTopR[0].scrollLeft\u003dscrollLeft):hasFrozenRows\u0026\u0026($viewportTopL[0].scrollLeft\u003dscrollLeft)),l)if(vScrollDir\u003dprevScrollTop\u003cscrollTop?1:-1,prevScrollTop\u003dscrollTop,e\u0026\u0026($viewportScrollContainerY[0].scrollTop\u003dscrollTop),hasFrozenColumns()\u0026\u0026(hasFrozenRows\u0026\u0026!options.frozenBottom?$viewportBottomL[0].scrollTop\u003dscrollTop:$viewportTopL[0].scrollTop\u003dscrollTop),l\u003cviewportH)scrollTo(scrollTop+offset);else{var i\u003doffset;page\u003dh\u003d\u003dviewportH?0:Math.min(n-1,Math.floor(scrollTop*((th-viewportH)/(h-viewportH))*(1/ph))),i!\u003d(offset\u003dMath.round(page*cj))\u0026\u0026invalidateAllRows()}if(r||l){var a\u003dMath.abs(lastRenderedScrollLeft-scrollLeft),s\u003dMath.abs(lastRenderedScrollTop-scrollTop);(a\u003e20||s\u003e20)\u0026\u0026(options.forceSyncScrolling||s\u003cviewportH\u0026\u0026a\u003cviewportW?render():scrollThrottle.enqueue(),trigger(self.onViewportChanged,{}))}return trigger(self.onScroll,{scrollLeft,scrollTop}),!(!r\u0026\u0026!l)}function ActionThrottle(e,o){var t\u003d!1,n\u003d!1;function l(){n\u003d!1}function r(){t\u003d!0,setTimeout(i,o),e()}function i(){n?(l(),r()):t\u003d!1}return{enqueue:function(){t?n\u003d!0:r()},dequeue:l}}function asyncPostProcessRows(){for(var e\u003dgetDataLength();postProcessFromRow\u003c\u003dpostProcessToRow;){var o\u003dvScrollDir\u003e\u003d0?postProcessFromRow++:postProcessToRow--,t\u003drowsCache[o];if(t\u0026\u0026!(o\u003e\u003de)){for(var n in postProcessedRows[o]||(postProcessedRows[o]\u003d{}),ensureCellNodesInRowsCache(o),t.cellNodesByColumnIdx)if(t.cellNodesByColumnIdx.hasOwnProperty(n)){var l\u003dcolumns[n|\u003d0],r\u003dpostProcessedRows[o][n];if(l.asyncPostRender\u0026\u0026\"R\"!\u003d\u003dr){var i\u003dt.cellNodesByColumnIdx[n];i\u0026\u0026l.asyncPostRender(i,o,getDataItem(o),l,\"C\"\u003d\u003d\u003dr),postProcessedRows[o][n]\u003d\"R\"}}return void(h_postrender\u003dsetTimeout(asyncPostProcessRows,options.asyncPostRenderDelay))}}}function asyncPostProcessCleanupRows(){if(postProcessedCleanupQueue.length\u003e0){for(var e\u003dpostProcessedCleanupQueue[0].groupId;postProcessedCleanupQueue.length\u003e0\u0026\u0026postProcessedCleanupQueue[0].groupId\u003d\u003de;){var o\u003dpostProcessedCleanupQueue.shift();if(\"R\"\u003d\u003do.actionType\u0026\u0026$(o.node).remove(),\"C\"\u003d\u003do.actionType){var t\u003dcolumns[o.columnIdx];t.asyncPostRenderCleanup\u0026\u0026o.node\u0026\u0026t.asyncPostRenderCleanup(o.node,o.rowIdx,t)}}h_postrenderCleanup\u003dsetTimeout(asyncPostProcessCleanupRows,options.asyncPostRenderCleanupDelay)}}function updateCellCssStylesOnRenderedRows(e,o){var t,n,l,r;for(var i in rowsCache){if(r\u003do\u0026\u0026o[i],l\u003de\u0026\u0026e[i],r)for(n in r)l\u0026\u0026r[n]\u003d\u003dl[n]||(t\u003dgetCellNode(i,getColumnIndex(n)))\u0026\u0026$(t).removeClass(r[n]);if(l)for(n in l)r\u0026\u0026r[n]\u003d\u003dl[n]||(t\u003dgetCellNode(i,getColumnIndex(n)))\u0026\u0026$(t).addClass(l[n])}}function addCellCssStyles(e,o){if(cellCssClasses[e])throw new Error(\"addCellCssStyles: cell CSS hash with key \u0027\"+e+\"\u0027 already exists.\");cellCssClasses[e]\u003do,updateCellCssStylesOnRenderedRows(o,null),trigger(self.onCellCssStylesChanged,{key:e,hash:o,grid:self})}function removeCellCssStyles(e){cellCssClasses[e]\u0026\u0026(updateCellCssStylesOnRenderedRows(null,cellCssClasses[e]),delete cellCssClasses[e],trigger(self.onCellCssStylesChanged,{key:e,hash:null,grid:self}))}function setCellCssStyles(e,o){var t\u003dcellCssClasses[e];cellCssClasses[e]\u003do,updateCellCssStylesOnRenderedRows(o,t),trigger(self.onCellCssStylesChanged,{key:e,hash:o,grid:self})}function getCellCssStyles(e){return cellCssClasses[e]}function flashCell(e,o,t){(t\u003dt||100,rowsCache[e])\u0026\u0026function e(o,n){n\u0026\u0026setTimeout((function(){o.queue((function(){o.toggleClass(options.cellFlashingCssClass).dequeue(),e(o,n-1)}))}),t)}($(getCellNode(e,o)),4)}function handleMouseWheel(e,o,t,n){var l\u003d$(e.target).closest(\".slick-row\"),r\u003dl[0];if(r!\u003drowNodeFromLastMouseWheelEvent){var i\u003dl.parents(\".grid-canvas\").hasClass(\"grid-canvas-left\");if(zombieRowNodeFromLastMouseWheelEvent\u0026\u0026zombieRowNodeFromLastMouseWheelEvent[i?0:1]!\u003dr){var a\u003dzombieRowNodeFromLastMouseWheelEvent[i||1\u003d\u003dzombieRowNodeFromLastMouseWheelEvent.length?0:1];a.parentElement.removeChild(a),zombieRowNodeFromLastMouseWheelEvent\u003dnull}rowNodeFromLastMouseWheelEvent\u003dr}scrollTop\u003dMath.max(0,$viewportScrollContainerY[0].scrollTop-n*options.rowHeight),scrollLeft\u003d$viewportScrollContainerX[0].scrollLeft+10*t,_handleScroll(!0)\u0026\u0026e.preventDefault()}function handleDragInit(e,o){var t\u003dgetCellFromEvent(e);if(!t||!cellExists(t.row,t.cell))return!1;var n\u003dtrigger(self.onDragInit,o,e);return!!e.isImmediatePropagationStopped()\u0026\u0026n}function handleDragStart(e,o){var t\u003dgetCellFromEvent(e);if(!t||!cellExists(t.row,t.cell))return!1;var n\u003dtrigger(self.onDragStart,o,e);return!!e.isImmediatePropagationStopped()\u0026\u0026n}function handleDrag(e,o){return trigger(self.onDrag,o,e)}function handleDragEnd(e,o){trigger(self.onDragEnd,o,e)}function handleKeyDown(e){trigger(self.onKeyDown,{row:activeRow,cell:activeCell},e);var o\u003de.isImmediatePropagationStopped(),t\u003dSlick.keyCode;if(!o\u0026\u0026!e.shiftKey\u0026\u0026!e.altKey){if(options.editable\u0026\u0026currentEditor\u0026\u0026currentEditor.keyCaptureList\u0026\u0026currentEditor.keyCaptureList.indexOf(e.which)\u003e-1)return;e.which\u003d\u003dt.HOME?o\u003de.ctrlKey?navigateTop():navigateRowStart():e.which\u003d\u003dt.END\u0026\u0026(o\u003de.ctrlKey?navigateBottom():navigateRowEnd())}if(!o)if(e.shiftKey||e.altKey||e.ctrlKey)e.which!\u003dt.TAB||!e.shiftKey||e.ctrlKey||e.altKey||(o\u003dnavigatePrev());else{if(options.editable\u0026\u0026currentEditor\u0026\u0026currentEditor.keyCaptureList\u0026\u0026currentEditor.keyCaptureList.indexOf(e.which)\u003e-1)return;if(e.which\u003d\u003dt.ESCAPE){if(!getEditorLock().isActive())return;cancelEditAndSetFocus()}else e.which\u003d\u003dt.PAGE_DOWN?(navigatePageDown(),o\u003d!0):e.which\u003d\u003dt.PAGE_UP?(navigatePageUp(),o\u003d!0):e.which\u003d\u003dt.LEFT?o\u003dnavigateLeft():e.which\u003d\u003dt.RIGHT?o\u003dnavigateRight():e.which\u003d\u003dt.UP?o\u003dnavigateUp():e.which\u003d\u003dt.DOWN?o\u003dnavigateDown():e.which\u003d\u003dt.TAB?o\u003dnavigateNext():e.which\u003d\u003dt.ENTER\u0026\u0026(options.editable\u0026\u0026(currentEditor?activeRow\u003d\u003d\u003dgetDataLength()?navigateDown():commitEditAndSetFocus():getEditorLock().commitCurrentEdit()\u0026\u0026makeActiveCellEditable(void 0,void 0,e)),o\u003d!0)}if(o){e.stopPropagation(),e.preventDefault();try{e.originalEvent.keyCode\u003d0}catch(e){}}}function handleClick(e){currentEditor||(e.target!\u003ddocument.activeElement||$(e.target).hasClass(\"slick-cell\"))\u0026\u0026setFocus();var o\u003dgetCellFromEvent(e);if(o\u0026\u0026(null\u003d\u003d\u003dcurrentEditor||activeRow!\u003do.row||activeCell!\u003do.cell)\u0026\u0026(trigger(self.onClick,{row:o.row,cell:o.cell},e),!e.isImmediatePropagationStopped()\u0026\u0026canCellBeActive(o.row,o.cell)\u0026\u0026(!getEditorLock().isActive()||getEditorLock().commitCurrentEdit()))){scrollRowIntoView(o.row,!1);var t\u003de.target\u0026\u0026e.target.className\u003d\u003d\u003dSlick.preClickClassName,n\u003dcolumns[o.cell],l\u003d!!(options.editable\u0026\u0026n\u0026\u0026n.editor\u0026\u0026options.suppressActiveCellChangeOnEdit);setActiveCellInternal(getCellNode(o.row,o.cell),null,t,l,e)}}function handleContextMenu(e){var o\u003d$(e.target).closest(\".slick-cell\",$canvas);0!\u003d\u003do.length\u0026\u0026(activeCellNode\u003d\u003d\u003do[0]\u0026\u0026null!\u003d\u003dcurrentEditor||trigger(self.onContextMenu,{},e))}function handleDblClick(e){var o\u003dgetCellFromEvent(e);!o||null!\u003d\u003dcurrentEditor\u0026\u0026activeRow\u003d\u003do.row\u0026\u0026activeCell\u003d\u003do.cell||(trigger(self.onDblClick,{row:o.row,cell:o.cell},e),e.isImmediatePropagationStopped()||options.editable\u0026\u0026gotoCell(o.row,o.cell,!0,e))}function handleHeaderMouseEnter(e){trigger(self.onHeaderMouseEnter,{column:$(this).data(\"column\"),grid:self},e)}function handleHeaderMouseLeave(e){trigger(self.onHeaderMouseLeave,{column:$(this).data(\"column\"),grid:self},e)}function handleHeaderContextMenu(e){var o\u003d$(e.target).closest(\".slick-header-column\",\".slick-header-columns\"),t\u003do\u0026\u0026o.data(\"column\");trigger(self.onHeaderContextMenu,{column:t},e)}function handleHeaderClick(e){if(!columnResizeDragging){var o\u003d$(e.target).closest(\".slick-header-column\",\".slick-header-columns\"),t\u003do\u0026\u0026o.data(\"column\");t\u0026\u0026trigger(self.onHeaderClick,{column:t},e)}}function handleFooterContextMenu(e){var o\u003d$(e.target).closest(\".slick-footerrow-column\",\".slick-footerrow-columns\"),t\u003do\u0026\u0026o.data(\"column\");trigger(self.onFooterContextMenu,{column:t},e)}function handleFooterClick(e){var o\u003d$(e.target).closest(\".slick-footerrow-column\",\".slick-footerrow-columns\"),t\u003do\u0026\u0026o.data(\"column\");trigger(self.onFooterClick,{column:t},e)}function handleMouseEnter(e){trigger(self.onMouseEnter,{},e)}function handleMouseLeave(e){trigger(self.onMouseLeave,{},e)}function cellExists(e,o){return!(e\u003c0||e\u003e\u003dgetDataLength()||o\u003c0||o\u003e\u003dcolumns.length)}function getCellFromPoint(e,o){for(var t\u003dgetRowFromPosition(o),n\u003d0,l\u003d0,r\u003d0;r\u003ccolumns.length\u0026\u0026l\u003ce;r++)l+\u003dcolumns[r].width,n++;return n\u003c0\u0026\u0026(n\u003d0),{row:t,cell:n-1}}function getCellFromNode(e){var o\u003d/l\\d+/.exec(e.className);if(!o)throw new Error(\"getCellFromNode: cannot get cell - \"+e.className);return parseInt(o[0].substr(1,o[0].length-1),10)}function getRowFromNode(e){for(var o in rowsCache)for(var t in rowsCache[o].rowNode)if(rowsCache[o].rowNode[t]\u003d\u003d\u003de)return o?parseInt(o):0;return null}function getFrozenRowOffset(e){return hasFrozenRows?options.frozenBottom?e\u003e\u003dactualFrozenRow?h\u003cviewportTopH?actualFrozenRow*options.rowHeight:h:0:e\u003e\u003dactualFrozenRow?frozenRowsHeight:0:0}function getCellFromEvent(e){var o,t,n\u003d$(e.target).closest(\".slick-cell\",$canvas);if(!n.length)return null;if(o\u003dgetRowFromNode(n[0].parentNode),hasFrozenRows){var l\u003dn.parents(\".grid-canvas\").offset(),r\u003d0;n.parents(\".grid-canvas-bottom\").length\u0026\u0026(r\u003doptions.frozenBottom?$canvasTopL.height():frozenRowsHeight),o\u003dgetCellFromPoint(e.clientX-l.left,e.clientY-l.top+r+$(document).scrollTop()).row}return t\u003dgetCellFromNode(n[0]),null\u003d\u003do||null\u003d\u003dt?null:{row:o,cell:t}}function getCellNodeBox(e,o){if(!cellExists(e,o))return null;for(var t\u003dgetFrozenRowOffset(e),n\u003dgetRowTop(e)-t,l\u003dn+options.rowHeight-1,r\u003d0,i\u003d0;i\u003co;i++)r+\u003dcolumns[i].width,options.frozenColumn\u003d\u003di\u0026\u0026(r\u003d0);return{top:n,left:r,bottom:l,right:r+columns[o].width}}function resetActiveCell(){setActiveCellInternal(null,!1)}function setFocus(){-1\u003d\u003dtabbingDirection?$focusSink[0].focus():$focusSink2[0].focus()}function scrollCellIntoView(e,o,t){if(scrollRowIntoView(e,t),!(o\u003c\u003doptions.frozenColumn)){var n\u003dgetColspan(e,o);internalScrollColumnIntoView(columnPosLeft[o],columnPosRight[o+(n\u003e1?n-1:0)])}}function internalScrollColumnIntoView(e,o){var t\u003dscrollLeft+$viewportScrollContainerX.width();e\u003cscrollLeft?($viewportScrollContainerX.scrollLeft(e),handleScroll(),render()):o\u003et\u0026\u0026($viewportScrollContainerX.scrollLeft(Math.min(e,o-$viewportScrollContainerX[0].clientWidth)),handleScroll(),render())}function scrollColumnIntoView(e){internalScrollColumnIntoView(columnPosLeft[e],columnPosRight[e])}function setActiveCellInternal(e,o,t,n,l){null!\u003d\u003dactiveCellNode\u0026\u0026(makeActiveCellNormal(),$(activeCellNode).removeClass(\"active\"),rowsCache[activeRow]\u0026\u0026$(rowsCache[activeRow].rowNode).removeClass(\"active\"));if(null!\u003d(activeCellNode\u003de)){var r\u003d$(activeCellNode),i\u003dr.offset(),a\u003dMath.floor(r.parents(\".grid-canvas\").offset().top),s\u003dr.parents(\".grid-canvas-bottom\").length;hasFrozenRows\u0026\u0026s\u0026\u0026(a-\u003doptions.frozenBottom?$canvasTopL.height():frozenRowsHeight);var d\u003dgetCellFromPoint(i.left,Math.ceil(i.top)-a);activeRow\u003dd.row,activeCell\u003dactivePosX\u003dactiveCell\u003dactivePosX\u003dgetCellFromNode(activeCellNode),null\u003d\u003do\u0026\u0026(o\u003dactiveRow\u003d\u003dgetDataLength()||options.autoEdit),options.showCellSelection\u0026\u0026(r.addClass(\"active\"),rowsCache[activeRow]\u0026\u0026$(rowsCache[activeRow].rowNode).addClass(\"active\")),options.editable\u0026\u0026o\u0026\u0026isCellPotentiallyEditable(activeRow,activeCell)\u0026\u0026(clearTimeout(h_editorLoader),options.asyncEditorLoading?h_editorLoader\u003dsetTimeout((function(){makeActiveCellEditable(void 0,t,l)}),options.asyncEditorLoadDelay):makeActiveCellEditable(void 0,t,l))}else activeRow\u003dactiveCell\u003dnull;n||trigger(self.onActiveCellChanged,getActiveCell())}function clearTextSelection(){if(document.selection\u0026\u0026document.selection.empty)try{document.selection.empty()}catch(e){}else if(window.getSelection){var e\u003dwindow.getSelection();e\u0026\u0026e.removeAllRanges\u0026\u0026e.removeAllRanges()}}function isCellPotentiallyEditable(e,o){var t\u003dgetDataLength();return!(e\u003ct\u0026\u0026!getDataItem(e))\u0026\u0026(!(columns[o].cannotTriggerInsert\u0026\u0026e\u003e\u003dt)\u0026\u0026!!getEditor(e,o))}function makeActiveCellNormal(){if(currentEditor){if(trigger(self.onBeforeCellEditorDestroy,{editor:currentEditor}),currentEditor.destroy(),currentEditor\u003dnull,activeCellNode){var e\u003dgetDataItem(activeRow);if($(activeCellNode).removeClass(\"editable invalid\"),e){var o\u003dcolumns[activeCell];applyFormatResultToCellNode(getFormatter(activeRow,o)(activeRow,activeCell,getDataItemValueForColumn(e,o),o,e,self),activeCellNode),invalidatePostProcessingResults(activeRow)}}navigator.userAgent.toLowerCase().match(/msie/)\u0026\u0026clearTextSelection(),getEditorLock().deactivate(editController)}}function makeActiveCellEditable(e,o,t){if(activeCellNode){if(!options.editable)throw new Error(\"Grid : makeActiveCellEditable : should never get called when options.editable is false\");if(clearTimeout(h_editorLoader),isCellPotentiallyEditable(activeRow,activeCell)){var n\u003dcolumns[activeCell],l\u003dgetDataItem(activeRow);if(!1!\u003d\u003dtrigger(self.onBeforeEditCell,{row:activeRow,cell:activeCell,item:l,column:n})){getEditorLock().activate(editController),$(activeCellNode).addClass(\"editable\");var r\u003de||getEditor(activeRow,activeCell);e||r.suppressClearOnEdit||(activeCellNode.innerHTML\u003d\"\");var i\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(activeRow),a\u003d(i\u003di\u0026\u0026i.columns)\u0026\u0026(i[n.id]||i[activeCell]);currentEditor\u003dnew r({grid:self,gridPosition:absBox($container[0]),position:absBox(activeCellNode),container:activeCellNode,column:n,columnMetaData:a,item:l||{},event:t,commitChanges:commitEditAndSetFocus,cancelChanges:cancelEditAndSetFocus}),l\u0026\u0026(currentEditor.loadValue(l),o\u0026\u0026currentEditor.preClick\u0026\u0026currentEditor.preClick()),serializedEditorValue\u003dcurrentEditor.serializeValue(),currentEditor.position\u0026\u0026handleActiveCellPositionChange()}else setFocus()}}}function commitEditAndSetFocus(){getEditorLock().commitCurrentEdit()\u0026\u0026(setFocus(),options.autoEdit\u0026\u0026navigateDown())}function cancelEditAndSetFocus(){getEditorLock().cancelCurrentEdit()\u0026\u0026setFocus()}function absBox(e){var o\u003d{top:e.offsetTop,left:e.offsetLeft,bottom:0,right:0,width:$(e).outerWidth(),height:$(e).outerHeight(),visible:!0};o.bottom\u003do.top+o.height,o.right\u003do.left+o.width;for(var t\u003de.offsetParent;(e\u003de.parentNode)!\u003ddocument.body\u0026\u0026null!\u003de;)o.visible\u0026\u0026e.scrollHeight!\u003de.offsetHeight\u0026\u0026\"visible\"!\u003d$(e).css(\"overflowY\")\u0026\u0026(o.visible\u003do.bottom\u003ee.scrollTop\u0026\u0026o.top\u003ce.scrollTop+e.clientHeight),o.visible\u0026\u0026e.scrollWidth!\u003de.offsetWidth\u0026\u0026\"visible\"!\u003d$(e).css(\"overflowX\")\u0026\u0026(o.visible\u003do.right\u003ee.scrollLeft\u0026\u0026o.left\u003ce.scrollLeft+e.clientWidth),o.left-\u003de.scrollLeft,o.top-\u003de.scrollTop,e\u003d\u003d\u003dt\u0026\u0026(o.left+\u003de.offsetLeft,o.top+\u003de.offsetTop,t\u003de.offsetParent),o.bottom\u003do.top+o.height,o.right\u003do.left+o.width;return o}function getActiveCellPosition(){return absBox(activeCellNode)}function getGridPosition(){return absBox($container[0])}function handleActiveCellPositionChange(){if(activeCellNode\u0026\u0026(trigger(self.onActiveCellPositionChanged,{}),currentEditor)){var e\u003dgetActiveCellPosition();currentEditor.show\u0026\u0026currentEditor.hide\u0026\u0026(e.visible?currentEditor.show():currentEditor.hide()),currentEditor.position\u0026\u0026currentEditor.position(e)}}function getCellEditor(){return currentEditor}function getActiveCell(){return activeCellNode?{row:activeRow,cell:activeCell}:null}function getActiveCellNode(){return activeCellNode}function scrollRowIntoView(e,o){if(!hasFrozenRows||!options.frozenBottom\u0026\u0026e\u003eactualFrozenRow-1||options.frozenBottom\u0026\u0026e\u003cactualFrozenRow-1){var t\u003d$viewportScrollContainerY.height(),n\u003dhasFrozenRows\u0026\u0026!options.frozenBottom?e-options.frozenRow:e,l\u003dn*options.rowHeight,r\u003d(n+1)*options.rowHeight-t+(viewportHasHScroll?scrollbarDimensions.height:0);(n+1)*options.rowHeight\u003escrollTop+t+offset?(scrollTo(o?l:r),render()):n*options.rowHeight\u003cscrollTop+offset\u0026\u0026(scrollTo(o?r:l),render())}}function scrollRowToTop(e){scrollTo(e*options.rowHeight),render()}function scrollPage(e){var o\u003de*numVisibleRows;if(scrollTo((getRowFromPosition(scrollTop+options.rowHeight-1)+o)*options.rowHeight),render(),options.enableCellNavigation\u0026\u0026null!\u003dactiveRow){var t\u003dactiveRow+o,n\u003dgetDataLengthIncludingAddNew();t\u003e\u003dn\u0026\u0026(t\u003dn-1),t\u003c0\u0026\u0026(t\u003d0);for(var l\u003d0,r\u003dnull,i\u003dactivePosX;l\u003c\u003dactivePosX;)canCellBeActive(t,l)\u0026\u0026(r\u003dl),l+\u003dgetColspan(t,l);null!\u003d\u003dr?(setActiveCellInternal(getCellNode(t,r)),activePosX\u003di):resetActiveCell()}}function navigatePageDown(){scrollPage(1)}function navigatePageUp(){scrollPage(-1)}function navigateTop(){navigateToRow(0)}function navigateBottom(){navigateToRow(getDataLength()-1)}function navigateToRow(e){var o\u003dgetDataLength();if(!o)return!0;if(e\u003c0?e\u003d0:e\u003e\u003do\u0026\u0026(e\u003do-1),scrollCellIntoView(e,0,!0),options.enableCellNavigation\u0026\u0026null!\u003dactiveRow){for(var t\u003d0,n\u003dnull,l\u003dactivePosX;t\u003c\u003dactivePosX;)canCellBeActive(e,t)\u0026\u0026(n\u003dt),t+\u003dgetColspan(e,t);null!\u003d\u003dn?(setActiveCellInternal(getCellNode(e,n)),activePosX\u003dl):resetActiveCell()}return!0}function getColspan(e,o){var t\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(e);if(!t||!t.columns)return 1;var n\u003dt.columns[columns[o].id]||t.columns[o],l\u003dn\u0026\u0026n.colspan;return l\u003d\"*\"\u003d\u003d\u003dl?columns.length-o:l||1}function findFirstFocusableCell(e){for(var o\u003d0;o\u003ccolumns.length;){if(canCellBeActive(e,o))return o;o+\u003dgetColspan(e,o)}return null}function findLastFocusableCell(e){for(var o\u003d0,t\u003dnull;o\u003ccolumns.length;)canCellBeActive(e,o)\u0026\u0026(t\u003do),o+\u003dgetColspan(e,o);return t}function gotoRight(e,o,t){if(o\u003e\u003dcolumns.length)return null;do{o+\u003dgetColspan(e,o)}while(o\u003ccolumns.length\u0026\u0026!canCellBeActive(e,o));return o\u003ccolumns.length?{row:e,cell:o,posX:o}:null}function gotoLeft(e,o,t){if(o\u003c\u003d0)return null;var n\u003dfindFirstFocusableCell(e);if(null\u003d\u003d\u003dn||n\u003e\u003do)return null;for(var l,r\u003d{row:e,cell:n,posX:n};;){if(!(l\u003dgotoRight(r.row,r.cell,r.posX)))return null;if(l.cell\u003e\u003do)return r;r\u003dl}}function gotoDown(e,o,t){for(var n,l\u003dgetDataLengthIncludingAddNew();;){if(++e\u003e\u003dl)return null;for(n\u003do\u003d0;o\u003c\u003dt;)n\u003do,o+\u003dgetColspan(e,o);if(canCellBeActive(e,n))return{row:e,cell:n,posX:t}}}function gotoUp(e,o,t){for(var n;;){if(--e\u003c0)return null;for(n\u003do\u003d0;o\u003c\u003dt;)n\u003do,o+\u003dgetColspan(e,o);if(canCellBeActive(e,n))return{row:e,cell:n,posX:t}}}function gotoNext(e,o,t){if(null\u003d\u003de\u0026\u0026null\u003d\u003do\u0026\u0026canCellBeActive(e\u003do\u003dt\u003d0,o))return{row:e,cell:o,posX:o};var n\u003dgotoRight(e,o,t);if(n)return n;var l\u003dnull,r\u003dgetDataLengthIncludingAddNew();for(e\u003d\u003d\u003dr-1\u0026\u0026e--;++e\u003cr;)if(null!\u003d\u003d(l\u003dfindFirstFocusableCell(e)))return{row:e,cell:l,posX:l};return null}function gotoPrev(e,o,t){if(null\u003d\u003de\u0026\u0026null\u003d\u003do\u0026\u0026canCellBeActive(e\u003dgetDataLengthIncludingAddNew()-1,o\u003dt\u003dcolumns.length-1))return{row:e,cell:o,posX:o};for(var n,l;!n\u0026\u0026!(n\u003dgotoLeft(e,o,t));){if(--e\u003c0)return null;o\u003d0,null!\u003d\u003d(l\u003dfindLastFocusableCell(e))\u0026\u0026(n\u003d{row:e,cell:l,posX:l})}return n}function gotoRowStart(e,o,t){var n\u003dfindFirstFocusableCell(e);return null\u003d\u003d\u003dn?null:{row:e,cell:n,posX:n}}function gotoRowEnd(e,o,t){var n\u003dfindLastFocusableCell(e);return null\u003d\u003d\u003dn?null:{row:e,cell:n,posX:n}}function navigateRight(){return navigate(\"right\")}function navigateLeft(){return navigate(\"left\")}function navigateDown(){return navigate(\"down\")}function navigateUp(){return navigate(\"up\")}function navigateNext(){return navigate(\"next\")}function navigatePrev(){return navigate(\"prev\")}function navigateRowStart(){return navigate(\"home\")}function navigateRowEnd(){return navigate(\"end\")}function navigate(e){if(!options.enableCellNavigation)return!1;if(!activeCellNode\u0026\u0026\"prev\"!\u003de\u0026\u0026\"next\"!\u003de)return!1;if(!getEditorLock().commitCurrentEdit())return!0;setFocus();tabbingDirection\u003d{up:-1,down:1,left:-1,right:1,prev:-1,next:1,home:-1,end:1}[e];var o\u003d(0,{up:gotoUp,down:gotoDown,left:gotoLeft,right:gotoRight,prev:gotoPrev,next:gotoNext,home:gotoRowStart,end:gotoRowEnd}[e])(activeRow,activeCell,activePosX);if(o){if(hasFrozenRows\u0026\u0026options.frozenBottom\u0026o.row\u003d\u003dgetDataLength())return;var t\u003do.row\u003d\u003dgetDataLength();return(!options.frozenBottom\u0026\u0026o.row\u003e\u003dactualFrozenRow||options.frozenBottom\u0026\u0026o.row\u003cactualFrozenRow)\u0026\u0026scrollCellIntoView(o.row,o.cell,!t\u0026\u0026options.emulatePagingWhenScrolling),setActiveCellInternal(getCellNode(o.row,o.cell)),activePosX\u003do.posX,!0}return setActiveCellInternal(getCellNode(activeRow,activeCell)),!1}function getCellNode(e,o){if(rowsCache[e]){ensureCellNodesInRowsCache(e);try{return rowsCache[e].cellNodesByColumnIdx.length\u003eo?rowsCache[e].cellNodesByColumnIdx[o][0]:null}catch(t){return rowsCache[e].cellNodesByColumnIdx[o]}}return null}function setActiveCell(e,o,t,n,l){initialized\u0026\u0026(e\u003egetDataLength()||e\u003c0||o\u003e\u003dcolumns.length||o\u003c0||options.enableCellNavigation\u0026\u0026(scrollCellIntoView(e,o,!1),setActiveCellInternal(getCellNode(e,o),t,n,l)))}function canCellBeActive(e,o){if(!options.enableCellNavigation||e\u003e\u003dgetDataLengthIncludingAddNew()||e\u003c0||o\u003e\u003dcolumns.length||o\u003c0)return!1;var t\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(e);if(t\u0026\u0026void 0!\u003d\u003dt.focusable)return!!t.focusable;var n\u003dt\u0026\u0026t.columns;return n\u0026\u0026n[columns[o].id]\u0026\u0026void 0!\u003d\u003dn[columns[o].id].focusable?!!n[columns[o].id].focusable:n\u0026\u0026n[o]\u0026\u0026void 0!\u003d\u003dn[o].focusable?!!n[o].focusable:!!columns[o].focusable}function canCellBeSelected(e,o){if(e\u003e\u003dgetDataLength()||e\u003c0||o\u003e\u003dcolumns.length||o\u003c0)return!1;var t\u003ddata.getItemMetadata\u0026\u0026data.getItemMetadata(e);if(t\u0026\u0026void 0!\u003d\u003dt.selectable)return!!t.selectable;var n\u003dt\u0026\u0026t.columns\u0026\u0026(t.columns[columns[o].id]||t.columns[o]);return n\u0026\u0026void 0!\u003d\u003dn.selectable?!!n.selectable:!!columns[o].selectable}function gotoCell(e,o,t,n){if(initialized\u0026\u0026canCellBeActive(e,o)\u0026\u0026getEditorLock().commitCurrentEdit()){scrollCellIntoView(e,o,!1);var l\u003dgetCellNode(e,o),r\u003dcolumns[o],i\u003d!!(options.editable\u0026\u0026r\u0026\u0026r.editor\u0026\u0026options.suppressActiveCellChangeOnEdit);setActiveCellInternal(l,t||e\u003d\u003d\u003dgetDataLength()||options.autoEdit,null,i,n),currentEditor||setFocus()}}function commitCurrentEdit(){var e\u003dgetDataItem(activeRow),o\u003dcolumns[activeCell];if(currentEditor){if(currentEditor.isValueChanged()){var t\u003dcurrentEditor.validate();if(t.valid){if(activeRow\u003cgetDataLength()){var n\u003d{row:activeRow,cell:activeCell,editor:currentEditor,serializedValue:currentEditor.serializeValue(),prevSerializedValue:serializedEditorValue,execute:function(){this.editor.applyValue(e,this.serializedValue),updateRow(this.row),trigger(self.onCellChange,{row:this.row,cell:this.cell,item:e})},undo:function(){this.editor.applyValue(e,this.prevSerializedValue),updateRow(this.row),trigger(self.onCellChange,{row:this.row,cell:this.cell,item:e})}};options.editCommandHandler?(makeActiveCellNormal(),options.editCommandHandler(e,o,n)):(n.execute(),makeActiveCellNormal())}else{var l\u003d{};currentEditor.applyValue(l,currentEditor.serializeValue()),makeActiveCellNormal(),trigger(self.onAddNewRow,{item:l,column:o})}return!getEditorLock().isActive()}return $(activeCellNode).removeClass(\"invalid\"),$(activeCellNode).width(),$(activeCellNode).addClass(\"invalid\"),trigger(self.onValidationError,{editor:currentEditor,cellNode:activeCellNode,validationResults:t,row:activeRow,cell:activeCell,column:o}),currentEditor.focus(),!1}makeActiveCellNormal()}return!0}function cancelCurrentEdit(){return makeActiveCellNormal(),!0}function rowsToRanges(e){for(var o\u003d[],t\u003dcolumns.length-1,n\u003d0;n\u003ce.length;n++)o.push(new Slick.Range(e[n],0,e[n],t));return o}function getSelectedRows(){if(!selectionModel)throw new Error(\"Selection model is not set\");return selectedRows.slice(0)}function setSelectedRows(e){if(!selectionModel)throw new Error(\"Selection model is not set\");self\u0026\u0026self.getEditorLock\u0026\u0026!self.getEditorLock().isActive()\u0026\u0026selectionModel.setSelectedRanges(rowsToRanges(e))}this.debug\u003dfunction(){var e\u003d\"\";e+\u003d\"\\ncounter_rows_rendered:  \"+counter_rows_rendered,e+\u003d\"\\ncounter_rows_removed:  \"+counter_rows_removed,e+\u003d\"\\nrenderedRows:  \"+renderedRows,e+\u003d\"\\nnumVisibleRows:  \"+numVisibleRows,e+\u003d\"\\nmaxSupportedCssHeight:  \"+maxSupportedCssHeight,e+\u003d\"\\nn(umber of pages):  \"+n,e+\u003d\"\\n(current) page:  \"+page,e+\u003d\"\\npage height (ph):  \"+ph,e+\u003d\"\\nvScrollDir:  \"+vScrollDir,alert(e)},this.eval\u003dfunction(expr){return eval(expr)},$.extend(this,{slickGridVersion:\"2.4.27\",onScroll:new Slick.Event,onSort:new Slick.Event,onHeaderMouseEnter:new Slick.Event,onHeaderMouseLeave:new Slick.Event,onHeaderContextMenu:new Slick.Event,onHeaderClick:new Slick.Event,onHeaderCellRendered:new Slick.Event,onBeforeHeaderCellDestroy:new Slick.Event,onHeaderRowCellRendered:new Slick.Event,onFooterRowCellRendered:new Slick.Event,onFooterContextMenu:new Slick.Event,onFooterClick:new Slick.Event,onBeforeHeaderRowCellDestroy:new Slick.Event,onBeforeFooterRowCellDestroy:new Slick.Event,onMouseEnter:new Slick.Event,onMouseLeave:new Slick.Event,onClick:new Slick.Event,onDblClick:new Slick.Event,onContextMenu:new Slick.Event,onKeyDown:new Slick.Event,onAddNewRow:new Slick.Event,onBeforeAppendCell:new Slick.Event,onValidationError:new Slick.Event,onViewportChanged:new Slick.Event,onColumnsReordered:new Slick.Event,onColumnsDrag:new Slick.Event,onColumnsResized:new Slick.Event,onBeforeColumnsResize:new Slick.Event,onCellChange:new Slick.Event,onBeforeEditCell:new Slick.Event,onBeforeCellEditorDestroy:new Slick.Event,onBeforeDestroy:new Slick.Event,onActiveCellChanged:new Slick.Event,onActiveCellPositionChanged:new Slick.Event,onDragInit:new Slick.Event,onDragStart:new Slick.Event,onDrag:new Slick.Event,onDragEnd:new Slick.Event,onSelectedRowsChanged:new Slick.Event,onCellCssStylesChanged:new Slick.Event,onAutosizeColumns:new Slick.Event,onRendered:new Slick.Event,onSetOptions:new Slick.Event,registerPlugin,unregisterPlugin,getPluginByName,getColumns,setColumns,getColumnIndex,updateColumnHeader,setSortColumn,setSortColumns,getSortColumns,autosizeColumns,autosizeColumn,getOptions,setOptions,getData,getDataLength,getDataItem,setData,getSelectionModel,setSelectionModel,getSelectedRows,setSelectedRows,getContainerNode,updatePagingStatusFromView,applyFormatResultToCellNode,render,invalidate,invalidateRow,invalidateRows,invalidateAllRows,updateCell,updateRow,getViewport:getVisibleRange,getRenderedRange,resizeCanvas,updateRowCount,scrollRowIntoView,scrollRowToTop,scrollCellIntoView,scrollColumnIntoView,getCanvasNode,getUID,getHeaderColumnWidthDiff,getScrollbarDimensions,getHeadersWidth,getCanvasWidth,getCanvases,getActiveCanvasNode,setActiveCanvasNode,getViewportNode,getActiveViewportNode,setActiveViewportNode,focus:setFocus,scrollTo,getCellFromPoint,getCellFromEvent,getActiveCell,setActiveCell,getActiveCellNode,getActiveCellPosition,resetActiveCell,editActiveCell:makeActiveCellEditable,getCellEditor,getCellNode,getCellNodeBox,canCellBeSelected,canCellBeActive,navigatePrev,navigateNext,navigateUp,navigateDown,navigateLeft,navigateRight,navigatePageUp,navigatePageDown,navigateTop,navigateBottom,navigateRowStart,navigateRowEnd,gotoCell,getTopPanel,setTopPanelVisibility,getPreHeaderPanel,getPreHeaderPanelLeft:getPreHeaderPanel,getPreHeaderPanelRight,setPreHeaderPanelVisibility,getHeader,getHeaderColumn,setHeaderRowVisibility,getHeaderRow,getHeaderRowColumn,setFooterRowVisibility,getFooterRow,getFooterRowColumn,getGridPosition,flashCell,addCellCssStyles,setCellCssStyles,removeCellCssStyles,getCellCssStyles,getFrozenRowOffset,setColumnHeaderVisibility,init:finishInitialization,destroy,getEditorLock,getEditController}),init()}module.exports\u003d{Grid:SlickGrid}},\n      481: function _(t,e,a,n,r){\n      /*!\n           * jquery.event.drag - v 2.3.0\n           * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com\n           * Open Source MIT License - http://threedubmedia.com/code/license\n           */\n      var o\u003dt(474);o.fn.drag\u003dfunction(t,e,a){var n\u003d\"string\"\u003d\u003dtypeof t?t:\"\",r\u003do.isFunction(t)?t:o.isFunction(e)?e:null;return 0!\u003d\u003dn.indexOf(\"drag\")\u0026\u0026(n\u003d\"drag\"+n),a\u003d(t\u003d\u003dr?e:a)||{},r?this.on(n,a,r):this.trigger(n)};var i\u003do.event,d\u003di.special,s\u003dd.drag\u003d{defaults:{which:1,distance:0,not:\":input\",handle:null,relative:!1,drop:!0,click:!1},datakey:\"dragdata\",noBubble:!0,add:function(t){var e\u003do.data(this,s.datakey),a\u003dt.data||{};e.related+\u003d1,o.each(s.defaults,(function(t,n){void 0!\u003d\u003da[t]\u0026\u0026(e[t]\u003da[t])}))},remove:function(){o.data(this,s.datakey).related-\u003d1},setup:function(){if(!o.data(this,s.datakey)){var t\u003do.extend({related:0},s.defaults);o.data(this,s.datakey,t),i.add(this,\"touchstart mousedown\",s.init,t),this.attachEvent\u0026\u0026this.attachEvent(\"ondragstart\",s.dontstart)}},teardown:function(){(o.data(this,s.datakey)||{}).related||(o.removeData(this,s.datakey),i.remove(this,\"touchstart mousedown\",s.init),s.textselect(!0),this.detachEvent\u0026\u0026this.detachEvent(\"ondragstart\",s.dontstart))},init:function(t){if(!s.touched){var e,a\u003dt.data;if(!(0!\u003dt.which\u0026\u0026a.which\u003e0\u0026\u0026t.which!\u003da.which)){var n\u003do(t.target).attr(\"class\")||\"\";if(!o(t.target).is(a.not)\u0026\u0026n\u0026\u0026-1!\u003d\u003dn.toString().indexOf(\"slick\")\u0026\u0026(!a.handle||o(t.target).closest(a.handle,t.currentTarget).length)\u0026\u0026(s.touched\u003d\"touchstart\"\u003d\u003dt.type?this:null,a.propagates\u003d1,a.mousedown\u003dthis,a.interactions\u003d[s.interaction(this,a)],a.target\u003dt.target,a.pageX\u003dt.pageX,a.pageY\u003dt.pageY,a.dragging\u003dnull,e\u003ds.hijack(t,\"draginit\",a),a.propagates))return(e\u003ds.flatten(e))\u0026\u0026e.length\u0026\u0026(a.interactions\u003d[],o.each(e,(function(){a.interactions.push(s.interaction(this,a))}))),a.propagates\u003da.interactions.length,!1!\u003d\u003da.drop\u0026\u0026d.drop\u0026\u0026d.drop.handler(t,a),s.textselect(!1),s.touched?i.add(s.touched,\"touchmove touchend\",s.handler,a):i.add(document,\"mousemove mouseup\",s.handler,a),!(!s.touched||a.live)\u0026\u0026void 0}}},interaction:function(t,e){var a\u003dt\u0026\u0026t.ownerDocument\u0026\u0026o(t)[e.relative?\"position\":\"offset\"]()||{top:0,left:0};return{drag:t,callback:new s.callback,droppable:[],offset:a}},handler:function(t){var e\u003dt.data;switch(t.type){case!e.dragging\u0026\u0026\"touchmove\":t.preventDefault();case!e.dragging\u0026\u0026\"mousemove\":if(Math.pow(t.pageX-e.pageX,2)+Math.pow(t.pageY-e.pageY,2)\u003cMath.pow(e.distance,2))break;t.target\u003de.target,s.hijack(t,\"dragstart\",e),e.propagates\u0026\u0026(e.dragging\u003d!0);case\"touchmove\":t.preventDefault();case\"mousemove\":if(e.dragging){if(s.hijack(t,\"drag\",e),e.propagates){!1!\u003d\u003de.drop\u0026\u0026d.drop\u0026\u0026d.drop.handler(t,e);break}t.type\u003d\"mouseup\"}case\"touchend\":case\"mouseup\":default:s.touched?i.remove(s.touched,\"touchmove touchend\",s.handler):i.remove(document,\"mousemove mouseup\",s.handler),e.dragging\u0026\u0026(!1!\u003d\u003de.drop\u0026\u0026d.drop\u0026\u0026d.drop.handler(t,e),s.hijack(t,\"dragend\",e)),s.textselect(!0),!1\u003d\u003d\u003de.click\u0026\u0026e.dragging\u0026\u0026o.data(e.mousedown,\"suppress.click\",(new Date).getTime()+5),e.dragging\u003ds.touched\u003d!1}},hijack:function(t,e,a,n,r){if(a){var d,c,l,p\u003d{event:t.originalEvent,type:t.type},u\u003de.indexOf(\"drop\")?\"drag\":\"drop\",g\u003dn||0,h\u003disNaN(n)?a.interactions.length:n;t.type\u003de;var f\u003dfunction(){};t.originalEvent\u003dnew o.Event(p.event,{preventDefault:f,stopPropagation:f,stopImmediatePropagation:f}),a.results\u003d[];do{if(c\u003da.interactions[g]){if(\"dragend\"!\u003d\u003de\u0026\u0026c.cancelled)continue;l\u003ds.properties(t,a,c),c.results\u003d[],o(r||c[u]||a.droppable).each((function(n,r){if(l.target\u003dr,t.isPropagationStopped\u003dfunction(){return!1},!1\u003d\u003d\u003d(d\u003dr?i.dispatch.call(r,t,l):null)?(\"drag\"\u003d\u003du\u0026\u0026(c.cancelled\u003d!0,a.propagates-\u003d1),\"drop\"\u003d\u003de\u0026\u0026(c[u][n]\u003dnull)):\"dropinit\"\u003d\u003de\u0026\u0026c.droppable.push(s.element(d)||r),\"dragstart\"\u003d\u003de\u0026\u0026(c.proxy\u003do(s.element(d)||c.drag)[0]),c.results.push(d),delete t.result,\"dropinit\"!\u003d\u003de)return d})),a.results[g]\u003ds.flatten(c.results),\"dropinit\"\u003d\u003de\u0026\u0026(c.droppable\u003ds.flatten(c.droppable)),\"dragstart\"!\u003de||c.cancelled||l.update()}}while(++g\u003ch);return t.type\u003dp.type,t.originalEvent\u003dp.event,s.flatten(a.results)}},properties:function(t,e,a){var n\u003da.callback;return n.drag\u003da.drag,n.proxy\u003da.proxy||a.drag,n.startX\u003de.pageX,n.startY\u003de.pageY,n.deltaX\u003dt.pageX-e.pageX,n.deltaY\u003dt.pageY-e.pageY,n.originalX\u003da.offset.left,n.originalY\u003da.offset.top,n.offsetX\u003dn.originalX+n.deltaX,n.offsetY\u003dn.originalY+n.deltaY,n.drop\u003ds.flatten((a.drop||[]).slice()),n.available\u003ds.flatten((a.droppable||[]).slice()),n},element:function(t){if(t\u0026\u0026(t.jquery||1\u003d\u003dt.nodeType))return t},flatten:function(t){return o.map(t,(function(t){return t\u0026\u0026t.jquery?o.makeArray(t):t\u0026\u0026t.length?s.flatten(t):t}))},textselect:function(t){o(document)[t?\"off\":\"on\"](\"selectstart\",s.dontstart).css(\"MozUserSelect\",t?\"\":\"none\"),document.unselectable\u003dt?\"off\":\"on\"},dontstart:function(){return!1},callback:function(){}};s.callback.prototype\u003d{update:function(){d.drop\u0026\u0026this.available.length\u0026\u0026o.each(this.available,(function(t){d.drop.locate(this,t)}))}};var c\u003di.dispatch;i.dispatch\u003dfunction(t){if(!(o.data(this,\"suppress.\"+t.type)-(new Date).getTime()\u003e0))return c.apply(this,arguments);o.removeData(this,\"suppress.\"+t.type)},d.draginit\u003dd.dragstart\u003dd.dragend\u003ds},\n      482: function _(t,e,a,n,i){\n      /*!\n           * jquery.event.drop - v 2.3.0\n           * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com\n           * Open Source MIT License - http://threedubmedia.com/code/license\n           */\n      var o\u003dt(474);o.fn.drop\u003dfunction(t,e,a){var n\u003d\"string\"\u003d\u003dtypeof t?t:\"\",i\u003do.isFunction(t)?t:o.isFunction(e)?e:null;return 0!\u003d\u003dn.indexOf(\"drop\")\u0026\u0026(n\u003d\"drop\"+n),a\u003d(t\u003d\u003di?e:a)||{},i?this.on(n,a,i):this.trigger(n)},o.drop\u003dfunction(t){t\u003dt||{},d.multi\u003d!0\u003d\u003d\u003dt.multi?1/0:!1\u003d\u003d\u003dt.multi?1:isNaN(t.multi)?d.multi:t.multi,d.delay\u003dt.delay||d.delay,d.tolerance\u003do.isFunction(t.tolerance)?t.tolerance:null\u003d\u003d\u003dt.tolerance?null:d.tolerance,d.mode\u003dt.mode||d.mode||\"intersect\"};var r\u003do.event.special,d\u003do.event.special.drop\u003d{multi:1,delay:20,mode:\"overlap\",targets:[],datakey:\"dropdata\",noBubble:!0,add:function(t){o.data(this,d.datakey).related+\u003d1},remove:function(){o.data(this,d.datakey).related-\u003d1},setup:function(){if(!o.data(this,d.datakey)){o.data(this,d.datakey,{related:0,active:[],anyactive:0,winner:0,location:{}}),d.targets.push(this)}},teardown:function(){if(!(o.data(this,d.datakey)||{}).related){o.removeData(this,d.datakey);var t\u003dthis;d.targets\u003do.grep(d.targets,(function(e){return e!\u003d\u003dt}))}},handler:function(t,e){var a;if(e)switch(t.type){case\"mousedown\":case\"touchstart\":a\u003do(d.targets),\"string\"\u003d\u003dtypeof e.drop\u0026\u0026(a\u003da.filter(e.drop)),a.each((function(){var t\u003do.data(this,d.datakey);t.active\u003d[],t.anyactive\u003d0,t.winner\u003d0})),e.droppable\u003da,r.drag.hijack(t,\"dropinit\",e);break;case\"mousemove\":case\"touchmove\":d.event\u003dt,d.timer||d.tolerate(e);break;case\"mouseup\":case\"touchend\":d.timer\u003dclearTimeout(d.timer),e.propagates\u0026\u0026(r.drag.hijack(t,\"drop\",e),r.drag.hijack(t,\"dropend\",e))}},locate:function(t,e){var a\u003do.data(t,d.datakey),n\u003do(t),i\u003dn.length\u0026\u0026!n.is(document)?n.offset():{},r\u003dn.outerHeight(),l\u003dn.outerWidth(),c\u003d{elem:t,width:l,height:r,top:i.top,left:i.left,right:i.left+l,bottom:i.top+r};return a\u0026\u0026(a.location\u003dc,a.index\u003de,a.elem\u003dt),c},contains:function(t,e){return(e[0]||e.left)\u003e\u003dt.left\u0026\u0026(e[0]||e.right)\u003c\u003dt.right\u0026\u0026(e[1]||e.top)\u003e\u003dt.top\u0026\u0026(e[1]||e.bottom)\u003c\u003dt.bottom},modes:{intersect:function(t,e,a){return this.contains(a,[t.pageX,t.pageY])?1e9:this.modes.overlap.apply(this,arguments)},overlap:function(t,e,a){return Math.max(0,Math.min(a.bottom,e.bottom)-Math.max(a.top,e.top))*Math.max(0,Math.min(a.right,e.right)-Math.max(a.left,e.left))},fit:function(t,e,a){return this.contains(a,e)?1:0},middle:function(t,e,a){return this.contains(a,[e.left+.5*e.width,e.top+.5*e.height])?1:0}},sort:function(t,e){return e.winner-t.winner||t.index-e.index},tolerate:function(t){var e,a,n,i,l,c,s,u,p\u003d0,h\u003dt.interactions.length,m\u003d[d.event.pageX,d.event.pageY],f\u003dd.tolerance||d.modes[d.mode];do{if(u\u003dt.interactions[p]){if(!u)return;u.drop\u003d[],l\u003d[],c\u003du.droppable.length,f\u0026\u0026(n\u003dd.locate(u.proxy)),e\u003d0;do{if(s\u003du.droppable[e]){if(!(a\u003d(i\u003do.data(s,d.datakey)).location))continue;i.winner\u003df?f.call(d,d.event,n,a):d.contains(a,m)?1:0,l.push(i)}}while(++e\u003cc);l.sort(d.sort),e\u003d0;do{(i\u003dl[e])\u0026\u0026(i.winner\u0026\u0026u.drop.length\u003cd.multi?(i.active[p]||i.anyactive||(!1!\u003d\u003dr.drag.hijack(d.event,\"dropstart\",t,p,i.elem)[0]?(i.active[p]\u003d1,i.anyactive+\u003d1):i.winner\u003d0),i.winner\u0026\u0026u.drop.push(i.elem)):i.active[p]\u0026\u00261\u003d\u003di.anyactive\u0026\u0026(r.drag.hijack(d.event,\"dropend\",t,p,i.elem),i.active[p]\u003d0,i.anyactive-\u003d1))}while(++e\u003cc)}}while(++p\u003ch);d.last\u0026\u0026m[0]\u003d\u003dd.last.pageX\u0026\u0026m[1]\u003d\u003dd.last.pageY?delete d.timer:d.timer\u003dsetTimeout((function(){d.tolerate(t)}),d.delay),d.last\u003dd.event}};r.dropinit\u003dr.dropstart\u003dr.dropend\u003dd},\n      483: function _(e,t,n,r,o){var i\u003de(474),l\u003de(476);var a\u003d{Avg:function(e){this.field_\u003de,this.init\u003dfunction(){this.count_\u003d0,this.nonNullCount_\u003d0,this.sum_\u003d0},this.accumulate\u003dfunction(e){var t\u003de[this.field_];this.count_++,null\u003d\u003dt||\"\"\u003d\u003d\u003dt||isNaN(t)||(this.nonNullCount_++,this.sum_+\u003dparseFloat(t))},this.storeResult\u003dfunction(e){e.avg||(e.avg\u003d{}),0!\u003d\u003dthis.nonNullCount_\u0026\u0026(e.avg[this.field_]\u003dthis.sum_/this.nonNullCount_)}},Min:function(e){this.field_\u003de,this.init\u003dfunction(){this.min_\u003dnull},this.accumulate\u003dfunction(e){var t\u003de[this.field_];null\u003d\u003dt||\"\"\u003d\u003d\u003dt||isNaN(t)||(null\u003d\u003dthis.min_||t\u003cthis.min_)\u0026\u0026(this.min_\u003dt)},this.storeResult\u003dfunction(e){e.min||(e.min\u003d{}),e.min[this.field_]\u003dthis.min_}},Max:function(e){this.field_\u003de,this.init\u003dfunction(){this.max_\u003dnull},this.accumulate\u003dfunction(e){var t\u003de[this.field_];null\u003d\u003dt||\"\"\u003d\u003d\u003dt||isNaN(t)||(null\u003d\u003dthis.max_||t\u003ethis.max_)\u0026\u0026(this.max_\u003dt)},this.storeResult\u003dfunction(e){e.max||(e.max\u003d{}),e.max[this.field_]\u003dthis.max_}},Sum:function(e){this.field_\u003de,this.init\u003dfunction(){this.sum_\u003dnull},this.accumulate\u003dfunction(e){var t\u003de[this.field_];null\u003d\u003dt||\"\"\u003d\u003d\u003dt||isNaN(t)||(this.sum_+\u003dparseFloat(t))},this.storeResult\u003dfunction(e){e.sum||(e.sum\u003d{}),e.sum[this.field_]\u003dthis.sum_}},Count:function(e){this.field_\u003de,this.init\u003dfunction(){},this.storeResult\u003dfunction(e){e.count||(e.count\u003d{}),e.count[this.field_]\u003de.group.rows.length}}};t.exports\u003d{DataView:function(e){var t,n,r,o,a,u\u003dthis,s\u003d\"id\",g\u003d[],c\u003d[],f\u003d{},h\u003dnull,p\u003dnull,d\u003dnull,m\u003d!1,v\u003d!0,_\u003d{},w\u003d{},y\u003d[],$\u003d[],C\u003d{getter:null,formatter:null,comparer:function(e,t){return e.value\u003d\u003d\u003dt.value?0:e.value\u003et.value?1:-1},predefinedValues:[],aggregators:[],aggregateEmpty:!1,aggregateCollapsed:!1,aggregateChildGroups:!1,collapsed:!1,displayTotalsRow:!0,lazyTotalsCalculation:!1},I\u003d[],R\u003d[],x\u003d[],E\u003d\":|:\",M\u003d0,S\u003d0,b\u003d0,F\u003dnew l.Event,A\u003dnew l.Event,N\u003dnew l.Event,G\u003dnew l.Event,T\u003dnew l.Event,O\u003dnew l.Event,P\u003dnew l.Event,D\u003dnew l.Event;function K(e){for(var t,n\u003de\u003de||0,r\u003dg.length;n\u003cr;n++){if(void 0\u003d\u003d\u003d(t\u003dg[n][s]))throw new Error(\"Each data element must implement a unique \u0027id\u0027 property\");f[t]\u003dn}}function j(){var e\u003dM?Math.max(1,Math.ceil(b/M)):1;return{pageSize:M,pageNum:S,totalRows:b,totalPages:e,dataView:u}}function B(e,r){v\u003dr,n\u003de,t\u003dnull,!1\u003d\u003d\u003dr\u0026\u0026g.reverse(),g.sort(e),!1\u003d\u003d\u003dr\u0026\u0026g.reverse(),f\u003d{},K(),se()}function z(e,r){v\u003dr,t\u003de,n\u003dnull;var o\u003dObject.prototype.toString;Object.prototype.toString\u003d\"function\"\u003d\u003dtypeof e?e:function(){return this[e]},!1\u003d\u003d\u003dr\u0026\u0026g.reverse(),g.sort(),Object.prototype.toString\u003do,!1\u003d\u003d\u003dr\u0026\u0026g.reverse(),f\u003d{},K(),se()}function V(t){e.groupItemMetadataProvider||(e.groupItemMetadataProvider\u003dnew l.Data.GroupItemMetadataProvider),R\u003d[],x\u003d[],I\u003d(t\u003dt||[])instanceof Array?t:[t];for(var n\u003d0;n\u003cI.length;n++){var r\u003dI[n]\u003di.extend(!0,{},C,I[n]);r.getterIsAFn\u003d\"function\"\u003d\u003dtypeof r.getter,r.compiledAccumulators\u003d[];for(var o\u003dr.aggregators.length;o--;)r.compiledAccumulators[o]\u003dre(r.aggregators[o]);x[n]\u003d{}}se()}function q(){if(!h){h\u003d{};for(var e\u003d0,t\u003dc.length;e\u003ct;e++)h[c[e][s]]\u003de}}function U(e){return g[f[e]]}function L(e,t){if(void 0\u003d\u003d\u003df[e])throw new Error(\"Invalid id\");if(e!\u003d\u003dt[s]){var n\u003dt[s];if(null\u003d\u003dn)throw new Error(\"Cannot update item to associate with a null id\");if(void 0!\u003d\u003df[n])throw new Error(\"Cannot update item to associate with a non-unique id\");f[n]\u003df[e],delete f[e],d\u0026\u0026d[e]\u0026\u0026delete d[e],e\u003dn}g[f[e]]\u003dt,d||(d\u003d{}),d[e]\u003d!0,se()}function k(e,t){g.splice(e,0,t),K(e),se()}function H(e){var t\u003df[e];if(void 0\u003d\u003d\u003dt)throw new Error(\"Invalid id\");delete f[e],g.splice(t,1),K(t),se()}function W(e){if(!n)throw new Error(\"sortedAddItem() requires a sort comparer, use sort()\");k(function(e){var t\u003d0,r\u003dg.length;for(;t\u003cr;){var o\u003dt+r\u003e\u003e\u003e1;-1\u003d\u003d\u003dn(g[o],e)?t\u003do+1:r\u003do}return t}(e),e)}function J(e,t){if(null\u003d\u003de)for(var n\u003d0;n\u003cI.length;n++)x[n]\u003d{},I[n].collapsed\u003dt,!0\u003d\u003d\u003dt?D.notify({level:n,groupingKey:null}):P.notify({level:n,groupingKey:null});else x[e]\u003d{},I[e].collapsed\u003dt,!0\u003d\u003d\u003dt?D.notify({level:e,groupingKey:null}):P.notify({level:e,groupingKey:null});se()}function Q(e,t,n){x[e][t]\u003dI[e].collapsed^n,se()}function X(e,t){for(var n,r,o,i\u003d[],a\u003d{},u\u003dt?t.level+1:0,s\u003dI[u],g\u003d0,c\u003ds.predefinedValues.length;g\u003cc;g++)(n\u003da[r\u003ds.predefinedValues[g]])||((n\u003dnew l.Group).value\u003dr,n.level\u003du,n.groupingKey\u003d(t?t.groupingKey+E:\"\")+r,i[i.length]\u003dn,a[r]\u003dn);for(g\u003d0,c\u003de.length;g\u003cc;g++)o\u003de[g],(n\u003da[r\u003ds.getterIsAFn?s.getter(o):o[s.getter]])||((n\u003dnew l.Group).value\u003dr,n.level\u003du,n.groupingKey\u003d(t?t.groupingKey+E:\"\")+r,i[i.length]\u003dn,a[r]\u003dn),n.rows[n.count++]\u003do;if(u\u003cI.length-1)for(g\u003d0;g\u003ci.length;g++)(n\u003di[g]).groups\u003dX(n.rows,n);return i.length\u0026\u0026ee(i,u),i.sort(I[u].comparer),i}function Y(e){var t,n\u003de.group,r\u003dI[n.level],o\u003dn.level\u003d\u003dI.length,i\u003dr.aggregators.length;if(!o\u0026\u0026r.aggregateChildGroups)for(var l\u003dn.groups.length;l--;)n.groups[l].totals.initialized||Y(n.groups[l].totals);for(;i--;)(t\u003dr.aggregators[i]).init(),!o\u0026\u0026r.aggregateChildGroups?r.compiledAccumulators[i].call(t,n.groups):r.compiledAccumulators[i].call(t,n.rows),t.storeResult(e);e.initialized\u003d!0}function Z(e){var t\u003dI[e.level],n\u003dnew l.GroupTotals;n.group\u003de,e.totals\u003dn,t.lazyTotalsCalculation||Y(n)}function ee(e,t){for(var n,r\u003dI[t\u003dt||0],o\u003dr.collapsed,i\u003dx[t],l\u003de.length;l--;)(n\u003de[l]).collapsed\u0026\u0026!r.aggregateCollapsed||(n.groups\u0026\u0026ee(n.groups,t+1),r.aggregators.length\u0026\u0026(r.aggregateEmpty||n.rows.length||n.groups\u0026\u0026n.groups.length)\u0026\u0026Z(n),n.collapsed\u003do^i[n.groupingKey],n.title\u003dr.formatter?r.formatter(n):n.value)}function te(e,t){for(var n,r,o\u003dI[t\u003dt||0],i\u003d[],l\u003d0,a\u003d0,u\u003de.length;a\u003cu;a++){if(r\u003de[a],i[l++]\u003dr,!r.collapsed)for(var s\u003d0,g\u003d(n\u003dr.groups?te(r.groups,t+1):r.rows).length;s\u003cg;s++)i[l++]\u003dn[s];r.totals\u0026\u0026o.displayTotalsRow\u0026\u0026(!r.collapsed||o.aggregateCollapsed)\u0026\u0026(i[l++]\u003dr.totals)}return i}function ne(e){var t\u003de.toString().indexOf(\"function\")\u003e\u003d0?/^function[^(]*\\(([^)]*)\\)\\s*{([\\s\\S]*)}$/:/^[^(]*\\(([^)]*)\\)\\s*{([\\s\\S]*)}$/,n\u003de.toString().match(t);return{params:n[1].split(\",\"),body:n[2]}}function re(e){if(e.accumulate){var t\u003dne(e.accumulate),n\u003dnew Function(\"_items\",\"for (var \"+t.params[0]+\", _i\u003d0, _il\u003d_items.length; _i\u003c_il; _i++) {\"+t.params[0]+\" \u003d _items[_i]; \"+t.body+\"}\"),r\u003d\"compiledAccumulatorLoop\";return n.displayName\u003dr,n.name\u003doe(n,r),n}return function(){}}function oe(e,t){try{Object.defineProperty(e,\"name\",{writable:!0,value:t})}catch(n){e.name\u003dt}}function ie(e,t){for(var n\u003d[],r\u003d0,o\u003d0,i\u003de.length;o\u003ci;o++)p(e[o],t)\u0026\u0026(n[r++]\u003de[o]);return n}function le(e,t,n){for(var r,o\u003d[],i\u003d0,l\u003d0,a\u003de.length;l\u003ca;l++)r\u003de[l],n[l]?o[i++]\u003dr:p(r,t)\u0026\u0026(o[i++]\u003dr,n[l]\u003d!0);return o}function ae(t){if(p){var n\u003de.inlineFilters?o:ie,i\u003de.inlineFilters?a:le;_.isFilterNarrowing?y\u003dn(y,r):_.isFilterExpanding?y\u003di(t,r,$):_.isFilterUnchanged||(y\u003dn(t,r))}else y\u003dM?t:t.concat();var l;return M?(y.length\u003c\u003dS*M\u0026\u0026(S\u003d0\u003d\u003d\u003dy.length?0:Math.floor((y.length-1)/M)),l\u003dy.slice(M*S,M*S+M)):l\u003dy,{totalRows:y.length,rows:l}}function ue(e){h\u003dnull,_.isFilterNarrowing\u003d\u003dw.isFilterNarrowing\u0026\u0026_.isFilterExpanding\u003d\u003dw.isFilterExpanding||($\u003d[]);var t\u003dae(e);b\u003dt.totalRows;var n\u003dt.rows;R\u003d[],I.length\u0026\u0026(R\u003dX(n)).length\u0026\u0026(n\u003dte(R));var r\u003dfunction(e,t){var n,r,o,i\u003d[],l\u003d0,a\u003dMath.max(t.length,e.length);_\u0026\u0026_.ignoreDiffsBefore\u0026\u0026(l\u003dMath.max(0,Math.min(t.length,_.ignoreDiffsBefore))),_\u0026\u0026_.ignoreDiffsAfter\u0026\u0026(a\u003dMath.min(t.length,Math.max(0,_.ignoreDiffsAfter)));for(var u\u003dl,g\u003de.length;u\u003ca;u++)u\u003e\u003dg?i[i.length]\u003du:(n\u003dt[u],r\u003de[u],(!n||I.length\u0026\u0026(o\u003dn.__nonDataRow||r.__nonDataRow)\u0026\u0026n.__group!\u003d\u003dr.__group||n.__group\u0026\u0026!n.equals(r)||o\u0026\u0026(n.__groupTotals||r.__groupTotals)||n[s]!\u003dr[s]||d\u0026\u0026d[n[s]])\u0026\u0026(i[i.length]\u003du));return i}(c,n);return c\u003dn,r}function se(){if(!m){var e\u003di.extend(!0,{},j()),t\u003dc.length,n\u003db,r\u003due(g);M\u0026\u0026b\u003cS*M\u0026\u0026(S\u003dMath.max(0,Math.ceil(b/M)-1),r\u003due(g)),d\u003dnull,w\u003d_,_\u003d{},n!\u003d\u003db\u0026\u0026(T.notify(e,null,u),O.notify(j(),null,u)),t!\u003d\u003dc.length\u0026\u0026A.notify({previous:t,current:c.length,dataView:u,callingOnRowsChanged:r.length\u003e0},null,u),r.length\u003e0\u0026\u0026N.notify({rows:r,dataView:u,calledOnRowCountChanged:t!\u003d\u003dc.length},null,u),(t!\u003d\u003dc.length||r.length\u003e0)\u0026\u0026G.notify({rowsDiff:r,previousRowCount:t,currentRowCount:c.length,rowCountChanged:t!\u003d\u003dc.length,rowsChanged:r.length\u003e0,dataView:u},null,u)}}e\u003di.extend(!0,{},{groupItemMetadataProvider:null,inlineFilters:!1},e),i.extend(this,{beginUpdate:function(){m\u003d!0},endUpdate:function(){m\u003d!1,se()},setPagingOptions:function(e){T.notify(j(),null,u),null!\u003de.pageSize\u0026\u0026(M\u003de.pageSize,S\u003dM?Math.min(S,Math.max(0,Math.ceil(b/M)-1)):0),null!\u003de.pageNum\u0026\u0026(S\u003dMath.min(e.pageNum,Math.max(0,Math.ceil(b/M)-1))),O.notify(j(),null,u),se()},getPagingInfo:j,getIdPropertyName:function(){return s},getItems:function(){return g},setItems:function(e,t){void 0!\u003d\u003dt\u0026\u0026(s\u003dt),g\u003dy\u003de,f\u003d{},K(),function(){for(var e,t\u003d0,n\u003dg.length;t\u003cn;t++)if(void 0\u003d\u003d\u003d(e\u003dg[t][s])||f[e]!\u003d\u003dt)throw new Error(\"Each data element must implement a unique \u0027id\u0027 property\")}(),se(),F.notify({idProperty:t},null,u)},setFilter:function(t){p\u003dt,e.inlineFilters\u0026\u0026(o\u003dfunction(){var e\u003dne(p),t\u003d\"{ continue _coreloop; }$1\",n\u003d\"{ _retval[_idx++] \u003d $item$; continue _coreloop; }$1\",r\u003de.body.replace(/return false\\s*([;}]|\\}|$)/gi,t).replace(/return!1([;}]|\\}|$)/gi,t).replace(/return true\\s*([;}]|\\}|$)/gi,n).replace(/return!0([;}]|\\}|$)/gi,n).replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\"{ if ($1) { _retval[_idx++] \u003d $item$; }; continue _coreloop; }$2\"),o\u003d[\"var _retval \u003d [], _idx \u003d 0; \",\"var $item$, $args$ \u003d _args; \",\"_coreloop: \",\"for (var _i \u003d 0, _il \u003d _items.length; _i \u003c _il; _i++) { \",\"$item$ \u003d _items[_i]; \",\"$filter$; \",\"} \",\"return _retval; \"].join(\"\");o\u003d(o\u003d(o\u003do.replace(/\\$filter\\$/gi,r)).replace(/\\$item\\$/gi,e.params[0])).replace(/\\$args\\$/gi,e.params[1]);var i\u003dnew Function(\"_items,_args\",o),l\u003d\"compiledFilter\";return i.displayName\u003dl,i.name\u003doe(i,l),i}(),a\u003dfunction(){var e\u003dne(p),t\u003d\"{ continue _coreloop; }$1\",n\u003d\"{ _cache[_i] \u003d true;_retval[_idx++] \u003d $item$; continue _coreloop; }$1\",r\u003de.body.replace(/return false\\s*([;}]|\\}|$)/gi,t).replace(/return!1([;}]|\\}|$)/gi,t).replace(/return true\\s*([;}]|\\}|$)/gi,n).replace(/return!0([;}]|\\}|$)/gi,n).replace(/return ([^;}]+?)\\s*([;}]|$)/gi,\"{ if ((_cache[_i] \u003d $1)) { _retval[_idx++] \u003d $item$; }; continue _coreloop; }$2\"),o\u003d[\"var _retval \u003d [], _idx \u003d 0; \",\"var $item$, $args$ \u003d _args; \",\"_coreloop: \",\"for (var _i \u003d 0, _il \u003d _items.length; _i \u003c _il; _i++) { \",\"$item$ \u003d _items[_i]; \",\"if (_cache[_i]) { \",\"_retval[_idx++] \u003d $item$; \",\"continue _coreloop; \",\"} \",\"$filter$; \",\"} \",\"return _retval; \"].join(\"\");o\u003d(o\u003d(o\u003do.replace(/\\$filter\\$/gi,r)).replace(/\\$item\\$/gi,e.params[0])).replace(/\\$args\\$/gi,e.params[1]);var i\u003dnew Function(\"_items,_args,_cache\",o),l\u003d\"compiledFilterWithCaching\";return i.displayName\u003dl,i.name\u003doe(i,l),i}()),se()},getFilter:function(){return p},getFilteredItems:function(){return y},sort:B,fastSort:z,reSort:function(){n?B(n,v):t\u0026\u0026z(t,v)},setGrouping:V,getGrouping:function(){return I},groupBy:function(e,t,n){V(null!\u003de?{getter:e,formatter:t,comparer:n}:[])},setAggregators:function(e,t){if(!I.length)throw new Error(\"At least one grouping must be specified before calling setAggregators().\");I[0].aggregators\u003de,I[0].aggregateCollapsed\u003dt,V(I)},collapseAllGroups:function(e){J(e,!0)},expandAllGroups:function(e){J(e,!1)},collapseGroup:function(e){var t,n,r\u003dArray.prototype.slice.call(arguments),o\u003dr[0];1\u003d\u003d\u003dr.length\u0026\u0026-1!\u003d\u003do.indexOf(E)?(t\u003do,n\u003do.split(E).length-1):(t\u003dr.join(E),n\u003dr.length-1),Q(n,t,!0),D.notify({level:n,groupingKey:t})},expandGroup:function(e){var t,n,r\u003dArray.prototype.slice.call(arguments),o\u003dr[0];1\u003d\u003d\u003dr.length\u0026\u0026-1!\u003d\u003do.indexOf(E)?(n\u003do.split(E).length-1,t\u003do):(n\u003dr.length-1,t\u003dr.join(E)),Q(n,t,!1),P.notify({level:n,groupingKey:t})},getGroups:function(){return R},getIdxById:function(e){return f[e]},getRowByItem:function(e){return q(),h[e[s]]},getRowById:function(e){return q(),h[e]},getItemById:U,getItemByIdx:function(e){return g[e]},mapItemsToRows:function(e){var t\u003d[];q();for(var n\u003d0,r\u003de.length;n\u003cr;n++){var o\u003dh[e[n][s]];null!\u003do\u0026\u0026(t[t.length]\u003do)}return t},mapRowsToIds:function(e){for(var t\u003d[],n\u003d0,r\u003de.length;n\u003cr;n++)e[n]\u003cc.length\u0026\u0026(t[t.length]\u003dc[e[n]][s]);return t},mapIdsToRows:function(e){var t\u003d[];q();for(var n\u003d0,r\u003de.length;n\u003cr;n++){var o\u003dh[e[n]];null!\u003do\u0026\u0026(t[t.length]\u003do)}return t},setRefreshHints:function(e){_\u003de},setFilterArgs:function(e){r\u003de},refresh:se,updateItem:L,insertItem:k,addItem:function(e){g.push(e),K(g.length-1),se()},deleteItem:H,sortedAddItem:W,sortedUpdateItem:function(e,t){if(void 0\u003d\u003d\u003df[e]||e!\u003d\u003dt[s])throw new Error(\"Invalid or non-matching id \"+f[e]);if(!n)throw new Error(\"sortedUpdateItem() requires a sort comparer, use sort()\");var r\u003dU(e);0!\u003d\u003dn(r,t)?(H(e),W(t)):L(e,t)},syncGridSelection:function(e,t,n){var r,o\u003dthis,a\u003do.mapRowsToIds(e.getSelectedRows()),u\u003dnew l.Event;function s(t){a.join(\",\")!\u003dt.join(\",\")\u0026\u0026(a\u003dt,u.notify({grid:e,ids:a,dataView:o},new l.EventData,o))}return e.onSelectedRowsChanged.subscribe((function(t,l){if(!r){var u\u003do.mapRowsToIds(e.getSelectedRows());if(n\u0026\u0026e.getOptions().multiSelect)s(i.grep(a,(function(e){return void 0\u003d\u003d\u003do.getRowById(e)})).concat(u));else s(u)}})),this.onRowsOrCountChanged.subscribe((function(){if(a.length\u003e0){r\u003d!0;var n\u003do.mapIdsToRows(a);t||s(o.mapRowsToIds(n)),e.setSelectedRows(n),r\u003d!1}})),u},syncGridCellCssStyles:function(e,t){var n,r;function o(e){for(var t in n\u003d{},e){var r\u003dc[t][s];n[r]\u003de[t]}}function i(){if(n){r\u003d!0,q();var o\u003d{};for(var i in n){var l\u003dh[i];null!\u003dl\u0026\u0026(o[l]\u003dn[i])}e.setCellCssStyles(t,o),r\u003d!1}}o(e.getCellCssStyles(t)),e.onCellCssStylesChanged.subscribe((function(n,l){r||t\u003d\u003dl.key\u0026\u0026(l.hash?o(l.hash):(e.onCellCssStylesChanged.unsubscribe(),u.onRowsOrCountChanged.unsubscribe(i)))})),this.onRowsOrCountChanged.subscribe(i)},getLength:function(){return c.length},getItem:function(e){var t\u003dc[e];if(t\u0026\u0026t.__group\u0026\u0026t.totals\u0026\u0026!t.totals.initialized){var n\u003dI[t.level];n.displayTotalsRow||(Y(t.totals),t.title\u003dn.formatter?n.formatter(t):t.value)}else t\u0026\u0026t.__groupTotals\u0026\u0026!t.initialized\u0026\u0026Y(t);return t},getItemMetadata:function(t){var n\u003dc[t];return void 0\u003d\u003d\u003dn?null:n.__group?e.groupItemMetadataProvider.getGroupRowMetadata(n):n.__groupTotals?e.groupItemMetadataProvider.getTotalsRowMetadata(n):null},onSetItemsCalled:F,onRowCountChanged:A,onRowsChanged:N,onRowsOrCountChanged:G,onBeforePagingInfoChanged:T,onPagingInfoChanged:O,onGroupExpanded:P,onGroupCollapsed:D})},Aggregators:a,Data:{Aggregators:a}}},\n      484: function _(e,t,i,n,o){var l\u003de(474),a\u003de(476);function s(e){var t,i;function n(){var t\u003de.column.editorFixedDecimalPlaces;return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003ds.DefaultDecimalPlaces),t||0\u003d\u003d\u003dt?t:null}this.init\u003dfunction(){var i\u003de.grid.getOptions().editorCellNavOnLRKeys;t\u003dl(\"\u003cINPUT type\u003dtext class\u003d\u0027editor-text\u0027 /\u003e\").appendTo(e.container).on(\"keydown.nav\",i?u:c).focus().select()},this.destroy\u003dfunction(){t.remove()},this.focus\u003dfunction(){t.focus()},this.loadValue\u003dfunction(o){i\u003do[e.column.field];var l\u003dn();null!\u003d\u003dl\u0026\u0026(i||0\u003d\u003d\u003di)\u0026\u0026i.toFixed\u0026\u0026(i\u003di.toFixed(l)),t.val(i),t[0].defaultValue\u003di,t.select()},this.serializeValue\u003dfunction(){var e\u003dparseFloat(t.val());s.AllowEmptyValue?e||0\u003d\u003d\u003de||(e\u003d\"\"):e\u003de||0;var i\u003dn();return null!\u003d\u003di\u0026\u0026(e||0\u003d\u003d\u003de)\u0026\u0026e.toFixed\u0026\u0026(e\u003dparseFloat(e.toFixed(i))),e},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return!(\"\"\u003d\u003d\u003dt.val()\u0026\u0026null\u003d\u003di)\u0026\u0026t.val()!\u003di},this.validate\u003dfunction(){if(isNaN(t.val()))return{valid:!1,msg:\"Please enter a valid number\"};if(e.column.validator){var i\u003de.column.validator(t.val());if(!i.valid)return i}return{valid:!0,msg:null}},this.init()}function u(e){var t\u003dthis.selectionStart,i\u003dthis.value.length;(e.keyCode\u003d\u003d\u003da.keyCode.LEFT\u0026\u0026t\u003e0||e.keyCode\u003d\u003d\u003da.keyCode.RIGHT\u0026\u0026t\u003ci-1)\u0026\u0026e.stopImmediatePropagation()}function c(e){e.keyCode!\u003d\u003da.keyCode.LEFT\u0026\u0026e.keyCode!\u003d\u003da.keyCode.RIGHT||e.stopImmediatePropagation()}s.DefaultDecimalPlaces\u003dnull,s.AllowEmptyValue\u003d!1,t.exports\u003d{Editors:{Text:function(e){var t,i;this.init\u003dfunction(){var i\u003de.grid.getOptions().editorCellNavOnLRKeys;t\u003dl(\"\u003cINPUT type\u003dtext class\u003d\u0027editor-text\u0027 /\u003e\").appendTo(e.container).on(\"keydown.nav\",i?u:c).focus().select()},this.destroy\u003dfunction(){t.remove()},this.focus\u003dfunction(){t.focus()},this.getValue\u003dfunction(){return t.val()},this.setValue\u003dfunction(e){t.val(e)},this.loadValue\u003dfunction(n){i\u003dn[e.column.field]||\"\",t.val(i),t[0].defaultValue\u003di,t.select()},this.serializeValue\u003dfunction(){return t.val()},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return!(\"\"\u003d\u003d\u003dt.val()\u0026\u0026null\u003d\u003di)\u0026\u0026t.val()!\u003di},this.validate\u003dfunction(){if(e.column.validator){var i\u003de.column.validator(t.val());if(!i.valid)return i}return{valid:!0,msg:null}},this.init()},Integer:function(e){var t,i;this.init\u003dfunction(){var i\u003de.grid.getOptions().editorCellNavOnLRKeys;t\u003dl(\"\u003cINPUT type\u003dtext class\u003d\u0027editor-text\u0027 /\u003e\").appendTo(e.container).on(\"keydown.nav\",i?u:c).focus().select()},this.destroy\u003dfunction(){t.remove()},this.focus\u003dfunction(){t.focus()},this.loadValue\u003dfunction(n){i\u003dn[e.column.field],t.val(i),t[0].defaultValue\u003di,t.select()},this.serializeValue\u003dfunction(){return parseInt(t.val(),10)||0},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return!(\"\"\u003d\u003d\u003dt.val()\u0026\u0026null\u003d\u003di)\u0026\u0026t.val()!\u003di},this.validate\u003dfunction(){if(isNaN(t.val()))return{valid:!1,msg:\"Please enter a valid integer\"};if(e.column.validator){var i\u003de.column.validator(t.val());if(!i.valid)return i}return{valid:!0,msg:null}},this.init()},Float:s,Date:function(e){var t,i,n\u003d!1;this.init\u003dfunction(){(t\u003dl(\"\u003cINPUT type\u003dtext class\u003d\u0027editor-text\u0027 /\u003e\")).appendTo(e.container),t.focus().select(),t.datepicker({showOn:\"button\",buttonImageOnly:!0,beforeShow:function(){n\u003d!0},onClose:function(){n\u003d!1}}),t.width(t.width()-18)},this.destroy\u003dfunction(){l.datepicker.dpDiv.stop(!0,!0),t.datepicker(\"hide\"),t.datepicker(\"destroy\"),t.remove()},this.show\u003dfunction(){n\u0026\u0026l.datepicker.dpDiv.stop(!0,!0).show()},this.hide\u003dfunction(){n\u0026\u0026l.datepicker.dpDiv.stop(!0,!0).hide()},this.position\u003dfunction(e){n\u0026\u0026l.datepicker.dpDiv.css(\"top\",e.top+30).css(\"left\",e.left)},this.focus\u003dfunction(){t.focus()},this.loadValue\u003dfunction(n){i\u003dn[e.column.field],t.val(i),t[0].defaultValue\u003di,t.select()},this.serializeValue\u003dfunction(){return t.val()},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return!(\"\"\u003d\u003d\u003dt.val()\u0026\u0026null\u003d\u003di)\u0026\u0026t.val()!\u003di},this.validate\u003dfunction(){if(e.column.validator){var i\u003de.column.validator(t.val());if(!i.valid)return i}return{valid:!0,msg:null}},this.init()},YesNoSelect:function(e){var t,i;this.init\u003dfunction(){(t\u003dl(\"\u003cSELECT tabIndex\u003d\u00270\u0027 class\u003d\u0027editor-yesno\u0027\u003e\u003cOPTION value\u003d\u0027yes\u0027\u003eYes\u003c/OPTION\u003e\u003cOPTION value\u003d\u0027no\u0027\u003eNo\u003c/OPTION\u003e\u003c/SELECT\u003e\")).appendTo(e.container),t.focus()},this.destroy\u003dfunction(){t.remove()},this.focus\u003dfunction(){t.focus()},this.loadValue\u003dfunction(n){t.val((i\u003dn[e.column.field])?\"yes\":\"no\"),t.select()},this.serializeValue\u003dfunction(){return\"yes\"\u003d\u003dt.val()},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return t.val()!\u003di},this.validate\u003dfunction(){return{valid:!0,msg:null}},this.init()},Checkbox:function(e){var t,i;this.init\u003dfunction(){(t\u003dl(\"\u003cINPUT type\u003dcheckbox value\u003d\u0027true\u0027 class\u003d\u0027editor-checkbox\u0027 hideFocus\u003e\")).appendTo(e.container),t.focus()},this.destroy\u003dfunction(){t.remove()},this.focus\u003dfunction(){t.focus()},this.loadValue\u003dfunction(n){(i\u003d!!n[e.column.field])?t.prop(\"checked\",!0):t.prop(\"checked\",!1)},this.preClick\u003dfunction(){t.prop(\"checked\",!t.prop(\"checked\"))},this.serializeValue\u003dfunction(){return t.prop(\"checked\")},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return this.serializeValue()!\u003d\u003di},this.validate\u003dfunction(){return{valid:!0,msg:null}},this.init()},PercentComplete:function(e){var t,i,n;this.init\u003dfunction(){(t\u003dl(\"\u003cINPUT type\u003dtext class\u003d\u0027editor-percentcomplete\u0027 /\u003e\")).width(l(e.container).innerWidth()-25),t.appendTo(e.container),(i\u003dl(\"\u003cdiv class\u003d\u0027editor-percentcomplete-picker\u0027 /\u003e\").appendTo(e.container)).append(\"\u003cdiv class\u003d\u0027editor-percentcomplete-helper\u0027\u003e\u003cdiv class\u003d\u0027editor-percentcomplete-wrapper\u0027\u003e\u003cdiv class\u003d\u0027editor-percentcomplete-slider\u0027 /\u003e\u003cdiv class\u003d\u0027editor-percentcomplete-buttons\u0027 /\u003e\u003c/div\u003e\u003c/div\u003e\"),i.find(\".editor-percentcomplete-buttons\").append(\"\u003cbutton val\u003d0\u003eNot started\u003c/button\u003e\u003cbr/\u003e\u003cbutton val\u003d50\u003eIn Progress\u003c/button\u003e\u003cbr/\u003e\u003cbutton val\u003d100\u003eComplete\u003c/button\u003e\"),t.focus().select(),i.find(\".editor-percentcomplete-slider\").slider({orientation:\"vertical\",range:\"min\",value:n,slide:function(e,i){t.val(i.value)}}),i.find(\".editor-percentcomplete-buttons button\").on(\"click\",(function(e){t.val(l(this).attr(\"val\")),i.find(\".editor-percentcomplete-slider\").slider(\"value\",l(this).attr(\"val\"))}))},this.destroy\u003dfunction(){t.remove(),i.remove()},this.focus\u003dfunction(){t.focus()},this.loadValue\u003dfunction(i){t.val(n\u003di[e.column.field]),t.select()},this.serializeValue\u003dfunction(){return parseInt(t.val(),10)||0},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return!(\"\"\u003d\u003d\u003dt.val()\u0026\u0026null\u003d\u003dn)\u0026\u0026(parseInt(t.val(),10)||0)!\u003dn},this.validate\u003dfunction(){return isNaN(parseInt(t.val(),10))?{valid:!1,msg:\"Please enter a valid positive number\"}:{valid:!0,msg:null}},this.init()},LongText:function(e){var t,i,n,o\u003dthis;this.init\u003dfunction(){var n\u003dl(\"body\");e.grid.getOptions().editorCellNavOnLRKeys;i\u003dl(\"\u003cDIV style\u003d\u0027z-index:10000;position:absolute;background:white;padding:5px;border:3px solid gray; -moz-border-radius:10px; border-radius:10px;\u0027/\u003e\").appendTo(n),t\u003dl(\"\u003cTEXTAREA hidefocus rows\u003d5 style\u003d\u0027background:white;width:250px;height:80px;border:0;outline:0\u0027\u003e\").appendTo(i),l(\"\u003cDIV style\u003d\u0027text-align:right\u0027\u003e\u003cBUTTON\u003eSave\u003c/BUTTON\u003e\u003cBUTTON\u003eCancel\u003c/BUTTON\u003e\u003c/DIV\u003e\").appendTo(i),i.find(\"button:first\").on(\"click\",this.save),i.find(\"button:last\").on(\"click\",this.cancel),t.on(\"keydown\",this.handleKeyDown),o.position(e.position),t.focus().select()},this.handleKeyDown\u003dfunction(t){if(t.which\u003d\u003da.keyCode.ENTER\u0026\u0026t.ctrlKey)o.save();else if(t.which\u003d\u003da.keyCode.ESCAPE)t.preventDefault(),o.cancel();else if(t.which\u003d\u003da.keyCode.TAB\u0026\u0026t.shiftKey)t.preventDefault(),e.grid.navigatePrev();else if(t.which\u003d\u003da.keyCode.TAB)t.preventDefault(),e.grid.navigateNext();else if((t.which\u003d\u003da.keyCode.LEFT||t.which\u003d\u003da.keyCode.RIGHT)\u0026\u0026e.grid.getOptions().editorCellNavOnLRKeys){var i\u003dthis.selectionStart,n\u003dthis.value.length;t.keyCode\u003d\u003d\u003da.keyCode.LEFT\u0026\u00260\u003d\u003d\u003di\u0026\u0026e.grid.navigatePrev(),t.keyCode\u003d\u003d\u003da.keyCode.RIGHT\u0026\u0026i\u003e\u003dn-1\u0026\u0026e.grid.navigateNext()}},this.save\u003dfunction(){e.commitChanges()},this.cancel\u003dfunction(){t.val(n),e.cancelChanges()},this.hide\u003dfunction(){i.hide()},this.show\u003dfunction(){i.show()},this.position\u003dfunction(e){i.css(\"top\",e.top-5).css(\"left\",e.left-5)},this.destroy\u003dfunction(){i.remove()},this.focus\u003dfunction(){t.focus()},this.loadValue\u003dfunction(i){t.val(n\u003di[e.column.field]),t.select()},this.serializeValue\u003dfunction(){return t.val()},this.applyValue\u003dfunction(t,i){t[e.column.field]\u003di},this.isValueChanged\u003dfunction(){return!(\"\"\u003d\u003d\u003dt.val()\u0026\u0026null\u003d\u003dn)\u0026\u0026t.val()!\u003dn},this.validate\u003dfunction(){if(e.column.validator){var i\u003de.column.validator(t.val());if(!i.valid)return i}return{valid:!0,msg:null}},this.init()}}}},\n      485: function _(e,n,r,t,c){e(476);n.exports\u003d{Formatters:{PercentComplete:function(e,n,r,t,c){return null\u003d\u003dr||\"\"\u003d\u003d\u003dr?\"-\":r\u003c50?\"\u003cspan style\u003d\u0027color:red;font-weight:bold;\u0027\u003e\"+r+\"%\u003c/span\u003e\":\"\u003cspan style\u003d\u0027color:green\u0027\u003e\"+r+\"%\u003c/span\u003e\"},PercentCompleteBar:function(e,n,r,t,c){return null\u003d\u003dr||\"\"\u003d\u003d\u003dr?\"\":\"\u003cspan class\u003d\u0027percent-complete-bar\u0027 style\u003d\u0027background:\"+(r\u003c30?\"red\":r\u003c70?\"silver\":\"green\")+\";width:\"+r+\"%\u0027\u003e\u003c/span\u003e\"},YesNo:function(e,n,r,t,c){return r?\"Yes\":\"No\"},Checkmark:function(e,n,r,t,c){return r?\"\u003cimg src\u003d\u0027../images/tick.png\u0027\u003e\":\"\"},Checkbox:function(e,n,r,t,c){return\u0027\u003cimg class\u003d\"slick-edit-preclick\" src\u003d\"../images/\u0027+(r?\"CheckboxY\":\"CheckboxN\")+\u0027.png\"\u003e\u0027}}}},\n      486: function _(t,o,r,e,n){var a\u003dt(474),l\u003dt(476);o.exports\u003d{RemoteModel:function(){var t\u003d50,o\u003d{length:0},r\u003d\"\",e\u003dnull,n\u003d1,i\u003dnull,s\u003dnull,u\u003dnew l.Event,f\u003dnew l.Event;function c(){for(var t in o)delete o[t];o.length\u003d0}function h(l,c){if(s){s.abort();for(var h\u003ds.fromPage;h\u003c\u003ds.toPage;h++)o[h*t]\u003dvoid 0}l\u003c0\u0026\u0026(l\u003d0),o.length\u003e0\u0026\u0026(c\u003dMath.min(c,o.length-1));for(var v\u003dMath.floor(l/t),m\u003dMath.floor(c/t);void 0!\u003d\u003do[v*t]\u0026\u0026v\u003cm;)v++;for(;void 0!\u003d\u003do[m*t]\u0026\u0026v\u003cm;)m--;if(v\u003em||v\u003d\u003dm\u0026\u0026void 0!\u003d\u003do[v*t])f.notify({from:l,to:c});else{var g\u003d\"http://octopart.com/api/v3/parts/search?apikey\u003d68b25f31\u0026include[]\u003dshort_description\u0026show[]\u003duid\u0026show[]\u003dmanufacturer\u0026show[]\u003dmpn\u0026show[]\u003dbrand\u0026show[]\u003doctopart_url\u0026show[]\u003dshort_description\u0026q\u003d\"+r+\"\u0026start\u003d\"+v*t+\"\u0026limit\u003d\"+((m-v)*t+t);null!\u003de\u0026\u0026(g+\u003d\"\u0026sortby\u003d\"+e+(n\u003e0?\"+asc\":\"+desc\")),null!\u003di\u0026\u0026clearTimeout(i),i\u003dsetTimeout((function(){for(var r\u003dv;r\u003c\u003dm;r++)o[r*t]\u003dnull;u.notify({from:l,to:c}),(s\u003da.jsonp({url:g,callbackParameter:\"callback\",cache:!0,success:d,error:function(){!function(t,o){alert(\"error loading pages \"+t+\" to \"+o)}(v,m)}})).fromPage\u003dv,s.toPage\u003dm}),50)}}function d(t){var r\u003dt.request.start,e\u003dr+t.results.length;o.length\u003dMath.min(parseInt(t.hits),1e3);for(var n\u003d0;n\u003ct.results.length;n++){var a\u003dt.results[n].item;o[r+n]\u003da,o[r+n].index\u003dr+n}s\u003dnull,f.notify({from:r,to:e})}return{data:o,clear:c,isDataLoaded:function(t,r){for(var e\u003dt;e\u003c\u003dr;e++)if(null\u003d\u003do[e]||null\u003d\u003do[e])return!1;return!0},ensureData:h,reloadData:function(t,r){for(var e\u003dt;e\u003c\u003dr;e++)delete o[e];h(t,r)},setSort:function(t,o){e\u003dt,n\u003do,c()},setSearch:function(t){r\u003dt,c()},onDataLoading:u,onDataLoaded:f}}}},\n      487: function _(e,s,t,o,l){var a\u003de(474),r\u003de(476);s.exports\u003d{GroupItemMetadataProvider:function(e){var s,t\u003d{checkboxSelect:!1,checkboxSelectCssClass:\"slick-group-select-checkbox\",checkboxSelectPlugin:null,groupCssClass:\"slick-group\",groupTitleCssClass:\"slick-group-title\",totalsCssClass:\"slick-group-totals\",groupFocusable:!0,totalsFocusable:!1,toggleCssClass:\"slick-group-toggle\",toggleExpandedCssClass:\"expanded\",toggleCollapsedCssClass:\"collapsed\",enableExpandCollapse:!0,groupFormatter:function(e,s,t,l,a,r){if(!o.enableExpandCollapse)return a.title;var c\u003d15*a.level+\"px\";return(o.checkboxSelect?\u0027\u003cspan class\u003d\"\u0027+o.checkboxSelectCssClass+\" \"+(a.selectChecked?\"checked\":\"unchecked\")+\u0027\"\u003e\u003c/span\u003e\u0027:\"\")+\"\u003cspan class\u003d\u0027\"+o.toggleCssClass+\" \"+(a.collapsed?o.toggleCollapsedCssClass:o.toggleExpandedCssClass)+\"\u0027 style\u003d\u0027margin-left:\"+c+\"\u0027\u003e\u003c/span\u003e\u003cspan class\u003d\u0027\"+o.groupTitleCssClass+\"\u0027 level\u003d\u0027\"+a.level+\"\u0027\u003e\"+a.title+\"\u003c/span\u003e\"},totalsFormatter:function(e,s,t,o,l,a){return o.groupTotalsFormatter\u0026\u0026o.groupTotalsFormatter(l,o,a)||\"\"},includeHeaderTotals:!1},o\u003da.extend(!0,{},t,e);function l(e,t){var l\u003da(e.target),c\u003dthis.getDataItem(t.row);if(c\u0026\u0026c instanceof r.Group\u0026\u0026l.hasClass(o.toggleCssClass)){var n\u003ds.getRenderedRange();this.getData().setRefreshHints({ignoreDiffsBefore:n.top,ignoreDiffsAfter:n.bottom+1}),c.collapsed?this.getData().expandGroup(c.groupingKey):this.getData().collapseGroup(c.groupingKey),e.stopImmediatePropagation(),e.preventDefault()}if(c\u0026\u0026c instanceof r.Group\u0026\u0026l.hasClass(o.checkboxSelectCssClass)){c.selectChecked\u003d!c.selectChecked,l.removeClass(c.selectChecked?\"unchecked\":\"checked\"),l.addClass(c.selectChecked?\"checked\":\"unchecked\");var i\u003ds.getData().mapItemsToRows(c.rows);(c.selectChecked?o.checkboxSelectPlugin.selectRows:o.checkboxSelectPlugin.deSelectRows)(i)}}function c(e,t){if(o.enableExpandCollapse\u0026\u0026e.which\u003d\u003dr.keyCode.SPACE){var l\u003dthis.getActiveCell();if(l){var a\u003dthis.getDataItem(l.row);if(a\u0026\u0026a instanceof r.Group){var c\u003ds.getRenderedRange();this.getData().setRefreshHints({ignoreDiffsBefore:c.top,ignoreDiffsAfter:c.bottom+1}),a.collapsed?this.getData().expandGroup(a.groupingKey):this.getData().collapseGroup(a.groupingKey),e.stopImmediatePropagation(),e.preventDefault()}}}}return{init:function(e){(s\u003de).onClick.subscribe(l),s.onKeyDown.subscribe(c)},destroy:function(){s\u0026\u0026(s.onClick.unsubscribe(l),s.onKeyDown.unsubscribe(c))},getGroupRowMetadata:function(e){var s\u003de\u0026\u0026e.level;return{selectable:!1,focusable:o.groupFocusable,cssClasses:o.groupCssClass+\" slick-group-level-\"+s,formatter:o.includeHeaderTotals\u0026\u0026o.totalsFormatter,columns:{0:{colspan:o.includeHeaderTotals?\"1\":\"*\",formatter:o.groupFormatter,editor:null}}}},getTotalsRowMetadata:function(e){var s\u003de\u0026\u0026e.group\u0026\u0026e.group.level;return{selectable:!1,focusable:o.totalsFocusable,cssClasses:o.totalsCssClass+\" slick-group-level-\"+s,formatter:o.totalsFormatter,editor:null}},getOptions:function(){return o},setOptions:function(e){a.extend(!0,o,e)}}}}},\n      488: function _(i,t,e,o,n){o();const s\u003di(322),r\u003di(20);class d extends s.HTMLBoxView{_width_policy(){return\"horizontal\"\u003d\u003dthis.model.orientation?super._width_policy():\"fixed\"}_height_policy(){return\"horizontal\"\u003d\u003dthis.model.orientation?\"fixed\":super._height_policy()}box_sizing(){const i\u003dsuper.box_sizing();return\"horizontal\"\u003d\u003dthis.model.orientation?null\u003d\u003di.width\u0026\u0026(i.width\u003dthis.model.default_size):null\u003d\u003di.height\u0026\u0026(i.height\u003dthis.model.default_size),i}}e.WidgetView\u003dd,d.__name__\u003d\"WidgetView\";class _ extends s.HTMLBox{constructor(i){super(i)}static init_Widget(){this.define((({Number:i})\u003d\u003e({orientation:[r.Orientation,\"horizontal\"],default_size:[i,300]}))),this.override({margin:[5,5,5,5]})}}e.Widget\u003d_,_.__name__\u003d\"Widget\",_.init_Widget()},\n      489: function _(e,i,t,s,n){s();const c\u003de(488),u\u003de(130),a\u003de(120);class o extends c.Widget{constructor(e){super(e)}static init_TableWidget(){this.define((({Ref:e})\u003d\u003e({source:[e(u.ColumnDataSource),()\u003d\u003enew u.ColumnDataSource],view:[e(a.CDSView),()\u003d\u003enew a.CDSView]})))}initialize(){super.initialize(),null\u003d\u003dthis.view.source\u0026\u0026(this.view.source\u003dthis.source,this.view.compute_indices())}}t.TableWidget\u003do,o.__name__\u003d\"TableWidget\",o.init_TableWidget()},\n      490: function _(t,e,i,r,o){r();const l\u003dt(469),n\u003dt(466),d\u003dt(34),a\u003dt(20),s\u003dt(53);class u extends s.Model{constructor(t){super(t)}static init_TableColumn(){this.define((({Boolean:t,Number:e,String:i,Nullable:r,Ref:o})\u003d\u003e({field:[i],title:[r(i),null],width:[e,300],formatter:[o(l.StringFormatter),()\u003d\u003enew l.StringFormatter],editor:[o(n.StringEditor),()\u003d\u003enew n.StringEditor],sortable:[t,!0],default_sort:[a.Sort,\"ascending\"]})))}toColumn(){var t;return{id:d.uniqueId(),field:this.field,name:null!\u003d\u003d(t\u003dthis.title)\u0026\u0026void 0!\u003d\u003dt?t:this.field,width:this.width,formatter:null!\u003dthis.formatter?this.formatter.doFormat.bind(this.formatter):void 0,model:this.editor,editor:this.editor.default_view,sortable:this.sortable,defaultSortAsc:\"ascending\"\u003d\u003dthis.default_sort}}}i.TableColumn\u003du,u.__name__\u003d\"TableColumn\",u.init_TableColumn()},\n      491: function _(A,o,e,r,i){r(),e.root\u003d\"bk-root\",e.default\u003d\u0027.bk-root{}.bk-root .slick-header.ui-state-default,.bk-root .slick-headerrow.ui-state-default,.bk-root .slick-footerrow.ui-state-default,.bk-root .slick-top-panel-scroller.ui-state-default,.bk-root .slick-group-header.ui-state-default{width:100%;overflow:auto;position:relative;border-left:0px !important;}.bk-root .slick-header.ui-state-default{overflow:inherit;}.bk-root .slick-header::-webkit-scrollbar,.bk-root .slick-headerrow::-webkit-scrollbar,.bk-root .slick-footerrow::-webkit-scrollbar{display:none;}.bk-root .slick-header-columns,.bk-root .slick-headerrow-columns,.bk-root .slick-footerrow-columns,.bk-root .slick-group-header-columns{position:relative;white-space:nowrap;cursor:default;overflow:hidden;}.bk-root .slick-header-column.ui-state-default,.bk-root .slick-group-header-column.ui-state-default{position:relative;display:inline-block;box-sizing:content-box !important;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;height:16px;line-height:16px;margin:0;padding:4px;border-right:1px solid silver;border-left:0px !important;border-top:0px !important;border-bottom:0px !important;float:left;}.bk-root .slick-footerrow-column.ui-state-default{-o-text-overflow:ellipsis;text-overflow:ellipsis;margin:0;padding:4px;border-right:1px solid silver;border-left:0px;border-top:0px;border-bottom:0px;float:left;line-height:20px;vertical-align:middle;}.bk-root .slick-headerrow-column.ui-state-default,.bk-root .slick-footerrow-column.ui-state-default{padding:4px;}.bk-root .slick-header-column-sorted{font-style:italic;}.bk-root .slick-sort-indicator{display:inline-block;width:8px;height:5px;margin-left:4px;margin-top:6px;float:left;}.bk-root .slick-sort-indicator-numbered{display:inline-block;width:8px;height:5px;margin-left:4px;margin-top:0;line-height:20px;float:left;font-family:Arial;font-style:normal;font-weight:bold;color:#6190CD;}.bk-root .slick-sort-indicator-desc{background:url(images/sort-desc.gif);}.bk-root .slick-sort-indicator-asc{background:url(images/sort-asc.gif);}.bk-root .slick-resizable-handle{position:absolute;font-size:0.1px;display:block;cursor:col-resize;width:9px;right:-5px;top:0;height:100%;z-index:1;}.bk-root .slick-sortable-placeholder{background:silver;}.bk-root .grid-canvas{position:relative;outline:0;}.bk-root .slick-row.ui-widget-content,.bk-root .slick-row.ui-state-active{position:absolute;border:0px;width:100%;}.bk-root .slick-cell,.bk-root .slick-headerrow-column,.bk-root .slick-footerrow-column{position:absolute;border:1px solid transparent;border-right:1px dotted silver;border-bottom-color:silver;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis;vertical-align:middle;z-index:1;padding:1px 2px 2px 1px;margin:0;white-space:nowrap;cursor:default;}.bk-root .slick-cell,.bk-root .slick-headerrow-column{border-bottom-color:silver;}.bk-root .slick-footerrow-column{border-top-color:silver;}.bk-root .slick-group-toggle{display:inline-block;}.bk-root .slick-cell.highlighted{background:lightskyblue;background:rgba(0, 0, 255, 0.2);-webkit-transition:all 0.5s;-moz-transition:all 0.5s;-o-transition:all 0.5s;transition:all 0.5s;}.bk-root .slick-cell.flashing{border:1px solid red !important;}.bk-root .slick-cell.editable{z-index:11;overflow:visible;background:white;border-color:black;border-style:solid;}.bk-root .slick-cell:focus{outline:none;}.bk-root .slick-reorder-proxy{display:inline-block;background:blue;opacity:0.15;cursor:move;}.bk-root .slick-reorder-guide{display:inline-block;height:2px;background:blue;opacity:0.7;}.bk-root .slick-selection{z-index:10;position:absolute;border:2px dashed black;}.bk-root .slick-pane{position:absolute;outline:0;overflow:hidden;width:100%;}.bk-root .slick-pane-header{display:block;}.bk-root .slick-header{overflow:hidden;position:relative;}.bk-root .slick-headerrow{overflow:hidden;position:relative;}.bk-root .slick-top-panel-scroller{overflow:hidden;position:relative;}.bk-root .slick-top-panel{width:10000px;}.bk-root .slick-viewport{position:relative;outline:0;width:100%;}.bk-root .slick-header-columns{background:url(\\\u0027images/header-columns-bg.gif\\\u0027) repeat-x center bottom;border-bottom:1px solid silver;}.bk-root .slick-header-column{background:url(\\\u0027images/header-columns-bg.gif\\\u0027) repeat-x center bottom;border-right:1px solid silver;}.bk-root .slick-header-column:hover,.bk-root .slick-header-column-active{background:white url(\\\u0027images/header-columns-over-bg.gif\\\u0027) repeat-x center bottom;}.bk-root .slick-headerrow{background:#fafafa;}.bk-root .slick-headerrow-column{background:#fafafa;border-bottom:0;height:100%;}.bk-root .slick-row.ui-state-active{background:#F5F7D7;}.bk-root .slick-row{position:absolute;background:white;border:0px;line-height:20px;}.bk-root .slick-row.selected{z-index:10;background:#DFE8F6;}.bk-root .slick-cell{padding-left:4px;padding-right:4px;}.bk-root .slick-group{border-bottom:2px solid silver;}.bk-root .slick-group-toggle{width:9px;height:9px;margin-right:5px;}.bk-root .slick-group-toggle.expanded{background:url(images/collapse.gif) no-repeat center center;}.bk-root .slick-group-toggle.collapsed{background:url(images/expand.gif) no-repeat center center;}.bk-root .slick-group-totals{color:gray;background:white;}.bk-root .slick-group-select-checkbox{width:13px;height:13px;margin:3px 10px 0 0;display:inline-block;}.bk-root .slick-group-select-checkbox.checked{background:url(images/GrpCheckboxY.png) no-repeat center center;}.bk-root .slick-group-select-checkbox.unchecked{background:url(images/GrpCheckboxN.png) no-repeat center center;}.bk-root .slick-cell.selected{background-color:beige;}.bk-root .slick-cell.active{border-color:gray;border-style:solid;}.bk-root .slick-sortable-placeholder{background:silver !important;}.bk-root .slick-row.odd{background:#fafafa;}.bk-root .slick-row.ui-state-active{background:#F5F7D7;}.bk-root .slick-row.loading{opacity:0.5;}.bk-root .slick-cell.invalid{border-color:red;-moz-animation-duration:0.2s;-webkit-animation-duration:0.2s;-moz-animation-name:slickgrid-invalid-hilite;-webkit-animation-name:slickgrid-invalid-hilite;}@-moz-keyframes slickgrid-invalid-hilite{from{box-shadow:0 0 6px red;}to{box-shadow:none;}}@-webkit-keyframes slickgrid-invalid-hilite{from{box-shadow:0 0 6px red;}to{box-shadow:none;}}.bk-root .slick-column-name,.bk-root .slick-sort-indicator{display:inline-block;float:left;margin-bottom:100px;}.bk-root .slick-header-button{display:inline-block;float:right;vertical-align:top;margin:1px;margin-bottom:100px;height:15px;width:15px;background-repeat:no-repeat;background-position:center center;cursor:pointer;}.bk-root .slick-header-button-hidden{width:0;-webkit-transition:0.2s width;-ms-transition:0.2s width;transition:0.2s width;}.bk-root .slick-header-column:hover \u003e .slick-header-button{width:15px;}.bk-root .slick-header-menubutton{position:absolute;right:0;top:0;bottom:0;width:14px;background-repeat:no-repeat;background-position:left center;background-image:url(../images/down.gif);cursor:pointer;display:none;border-left:thin ridge silver;}.bk-root .slick-header-column:hover \u003e .slick-header-menubutton,.bk-root .slick-header-column-active .slick-header-menubutton{display:inline-block;}.bk-root .slick-header-menu{position:absolute;display:inline-block;margin:0;padding:2px;cursor:default;}.bk-root .slick-header-menuitem{list-style:none;margin:0;padding:0;cursor:pointer;}.bk-root .slick-header-menuicon{display:inline-block;width:16px;height:16px;vertical-align:middle;margin-right:4px;background-repeat:no-repeat;background-position:center center;}.bk-root .slick-header-menucontent{display:inline-block;vertical-align:middle;}.bk-root .slick-header-menuitem-disabled{color:silver;}.bk-root .slick-header-menuitem.slick-header-menuitem-divider{cursor:default;border:none;overflow:hidden;padding:0;height:1px;margin:8px 2px;background-color:#cecece;}.bk-root .slick-header-menuitem-divider.slick-header-menuitem:hover{background-color:#cecece;}.bk-root .slick-columnpicker{border:1px solid #718BB7;background:#f0f0f0;padding:6px;-moz-box-shadow:2px 2px 2px silver;-webkit-box-shadow:2px 2px 2px silver;box-shadow:2px 2px 2px silver;min-width:150px;cursor:default;position:absolute;z-index:20;overflow:auto;resize:both;}.bk-root .slick-columnpicker \u003e .close{float:right;}.bk-root .slick-columnpicker .title{font-size:16px;width:60%;border-bottom:solid 1px #d6d6d6;margin-bottom:10px;}.bk-root .slick-columnpicker li{list-style:none;margin:0;padding:0;background:none;}.bk-root .slick-columnpicker input{margin:4px;}.bk-root .slick-columnpicker li a{display:block;padding:4px;font-weight:bold;}.bk-root .slick-columnpicker li a:hover{background:white;}.bk-root .slick-columnpicker-list li.hidden{display:none;}.bk-root .slick-pager{width:100%;height:26px;border:1px solid gray;border-top:0;background:url(\\\u0027../images/header-columns-bg.gif\\\u0027) repeat-x center bottom;vertical-align:middle;}.bk-root .slick-pager .slick-pager-status{display:inline-block;padding:6px;}.bk-root .slick-pager .ui-icon-container{display:inline-block;margin:2px;border-color:gray;}.bk-root .slick-pager .slick-pager-nav{display:inline-block;float:left;padding:2px;}.bk-root .slick-pager .slick-pager-settings{display:block;float:right;padding:2px;}.bk-root .slick-pager .slick-pager-settings *{vertical-align:middle;}.bk-root .slick-pager .slick-pager-settings a{padding:2px;text-decoration:underline;cursor:pointer;}.bk-root .slick-header-columns{border-bottom:1px solid silver;background-image:none;}.bk-root .slick-header-column{border-right:1px solid transparent;background-image:none;}.bk-root .slick-header-column:last-of-type{border-right-color:transparent;}.bk-root .slick-header-column:hover,.bk-root .slick-header-column-active{background-color:#F0F8FF;background-image:none;}.bk-root .slick-group-toggle.expanded{background-image:url(\"data:image/gif;base64,R0lGODlhCQAJAPcAAAFGeoCAgNXz/+v5/+v6/+z5/+36//L7//X8//j9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAACQAJAAAIMwADCBxIUIDBgwIEChgwwECBAgQUFjBAkaJCABgxGlB4AGHCAAIQiBypEEECkScJqgwQEAA7\");}.bk-root .slick-group-toggle.collapsed{background-image:url(\"data:image/gif;base64,R0lGODlhCQAJAPcAAAFGeoCAgNXz/+v5/+v6/+z5/+36//L7//X8//j9/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAACQAJAAAIOAADCBxIUIDBgwIEChgwAECBAgQUFjAAQIABAwoBaNSIMYCAAwIqGlSIAEHFkiQTIBCgkqDLAAEBADs\u003d\");}.bk-root .slick-group-select-checkbox.checked{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAIAAACQKrqGAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNkRpr/UAAAEcSURBVChTjdI9S8NQFAbg/raQXVwCRRFE7GK7OXTwD+ikk066VF3a0ja0hQTyQdJrwNq0zrYSQRLEXMSWSlCIb8glqRcFD+9yz3nugXwU4n9XQqMoGjj36uBJsTwuaNo3EwBG4Yy7pe7Gv8YcvhJCGFVsjxsjxujj6OTSGlHv+U2WZUZbPWKOv1ZjT5a7pbIoiptbO5b73mwrjHa1B27l8VlTEIS1damlTnEE+EEN9/P8WrfH81qdAIGeXvTTmzltdCy46sEhxpKUINReZR9NnqZbr9puugxV3NjWh/k74WmmEdWhmUNy2jNmWRc6fZTVADCqao52u+DGWTACYNT3fRxwtatPufTNR4yCIGAUn5hS+vJHhWGY/ANx/A3tvdv+1tZmuwAAAABJRU5ErkJggg\u003d\u003d\");}.bk-root .slick-group-select-checkbox.unchecked{background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAIAAACQKrqGAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAOwQAADsEBuJFr7QAAABl0RVh0U29mdHdhcmUAcGFpbnQubmV0IDQuMC4xNkRpr/UAAACXSURBVChT1dIxC4MwEAXg/v8/VOhQVDBNakV0KA6pxS4JhWRSIYPEJxwdDi1de7wleR+3JIf486w0hKCKRpSvvOhZcCmvNQBRuKqdah03U7UjNNH81rOaBYDo8SQaPX8JANFEaLaGBeAPaaY61rGksiN6TmR5H1j9CSoAosYYHLA7vTxYMvVEZa0liif23r93xjm3/oEYF8PiDn/I2FHCAAAAAElFTkSuQmCC\");}.bk-root .slick-sort-indicator-desc{background-image:url(\"data:image/gif;base64,R0lGODlhDQAFAIcAAGGQzUD/QOPu+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAEALAAAAAANAAUAAAgeAAUAGEgQgIAACBEKLHgwYcKFBh1KFNhQosOKEgMCADs\u003d\");}.bk-root .slick-sort-indicator-asc{background-image:url(\"data:image/gif;base64,R0lGODlhDQAFAIcAAGGQzUD/QOPu+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAMAAAEALAAAAAANAAUAAAgbAAMIDABgoEGDABIeRJhQ4cKGEA8KmEiRosGAADs\u003d\");}.bk-root .slick-header-menubutton{background-image:url(\"data:image/gif;base64,R0lGODlhDgAOAIABADtKYwAAACH5BAEAAAEALAAAAAAOAA4AAAISjI+py+0PHZgUsGobhTn6DxoFADs\u003d\");}.bk-root .slick-pager{background-image:none;}\u0027},\n      492: function _(t,e,s,r,a){r();const i\u003dt(479),{Avg:g,Min:n,Max:o,Sum:u}\u003di.Data.Aggregators,c\u003dt(53);class _ extends c.Model{constructor(t){super(t)}static init_RowAggregator(){this.define((({String:t})\u003d\u003e({field_:[t,\"\"]})))}}s.RowAggregator\u003d_,_.__name__\u003d\"RowAggregator\",_.init_RowAggregator();const l\u003dnew g;class m extends _{constructor(){super(...arguments),this.key\u003d\"avg\",this.init\u003dl.init,this.accumulate\u003dl.accumulate,this.storeResult\u003dl.storeResult}}s.AvgAggregator\u003dm,m.__name__\u003d\"AvgAggregator\";const h\u003dnew n;class A extends _{constructor(){super(...arguments),this.key\u003d\"min\",this.init\u003dh.init,this.accumulate\u003dh.accumulate,this.storeResult\u003dh.storeResult}}s.MinAggregator\u003dA,A.__name__\u003d\"MinAggregator\";const R\u003dnew o;class x extends _{constructor(){super(...arguments),this.key\u003d\"max\",this.init\u003dR.init,this.accumulate\u003dR.accumulate,this.storeResult\u003dR.storeResult}}s.MaxAggregator\u003dx,x.__name__\u003d\"MaxAggregator\";const d\u003dnew u;class w extends _{constructor(){super(...arguments),this.key\u003d\"sum\",this.init\u003dd.init,this.accumulate\u003dd.accumulate,this.storeResult\u003dd.storeResult}}s.SumAggregator\u003dw,w.__name__\u003d\"SumAggregator\"},\n      493: function _(t,e,s,o,r){o();const i\u003dt(43),a\u003dt(479),n\u003dt(467),l\u003dt(472),u\u003dt(130),g\u003dt(492),c\u003dt(53);function p(t,e,s,o,r){const{collapsed:a,level:n,title:l}\u003dr,u\u003di.span({class:\"slick-group-toggle \"+(a?\"collapsed\":\"expanded\"),style:{\"margin-left\":15*n+\"px\"}}),g\u003di.span({class:\"slick-group-title\",level:n},l);return`${u.outerHTML}${g.outerHTML}`}function h(t,e){const s\u003dthis.getDataItem(e.row);s instanceof a.Group\u0026\u0026t.target.classList.contains(\"slick-group-toggle\")\u0026\u0026(s.collapsed?this.getData().expandGroup(s.groupingKey):this.getData().collapseGroup(s.groupingKey),t.stopImmediatePropagation(),t.preventDefault(),this.invalidate(),this.render())}class d extends c.Model{constructor(t){super(t)}static init_GroupingInfo(){this.define((({Boolean:t,String:e,Array:s,Ref:o})\u003d\u003e({getter:[e,\"\"],aggregators:[s(o(g.RowAggregator)),[]],collapsed:[t,!1]})))}get comparer(){return(t,e)\u003d\u003et.value\u003d\u003d\u003de.value?0:t.value\u003ee.value?1:-1}}s.GroupingInfo\u003dd,d.__name__\u003d\"GroupingInfo\",d.init_GroupingInfo();class f extends l.TableDataProvider{constructor(t,e,s,o){super(t,e),this.columns\u003ds,this.groupingInfos\u003d[],this.groupingDelimiter\u003d\":|:\",this.target\u003do}setGrouping(t){this.groupingInfos\u003dt,this.toggledGroupsByLevel\u003dt.map((()\u003d\u003e({}))),this.refresh()}extractGroups(t,e){const s\u003d[],o\u003dnew Map,r\u003de?e.level+1:0,{comparer:i,getter:n}\u003dthis.groupingInfos[r];return t.forEach((t\u003d\u003e{const i\u003dthis.source.data[n][t];let l\u003do.get(i);if(!l){const t\u003de?`${e.groupingKey}${this.groupingDelimiter}${i}`:`${i}`;l\u003dObject.assign(new a.Group,{value:i,level:r,groupingKey:t}),s.push(l),o.set(i,l)}l.rows.push(t)})),r\u003cthis.groupingInfos.length-1\u0026\u0026s.forEach((t\u003d\u003e{t.groups\u003dthis.extractGroups(t.rows,t)})),s.sort(i),s}calculateTotals(t,e){const s\u003d{avg:{},max:{},min:{},sum:{}},{source:{data:o}}\u003dthis,r\u003dObject.keys(o),i\u003dt.rows.map((t\u003d\u003er.reduce(((e,s)\u003d\u003eObject.assign(Object.assign({},e),{[s]:o[s][t]})),{})));return e.forEach((t\u003d\u003e{t.init(),i.forEach((e\u003d\u003et.accumulate(e))),t.storeResult(s)})),s}addTotals(t,e\u003d0){const{aggregators:s,collapsed:o}\u003dthis.groupingInfos[e],r\u003dthis.toggledGroupsByLevel[e];t.forEach((t\u003d\u003e{t.groups\u0026\u0026this.addTotals(t.groups,e+1),s.length\u0026\u0026t.rows.length\u0026\u0026(t.totals\u003dthis.calculateTotals(t,s)),t.collapsed\u003do!\u003d\u003dr[t.groupingKey],t.title\u003dt.value?`${t.value}`:\"\"}))}flattenedGroupedRows(t,e\u003d0){const s\u003d[];return t.forEach((t\u003d\u003e{if(s.push(t),!t.collapsed){const o\u003dt.groups?this.flattenedGroupedRows(t.groups,e+1):t.rows;s.push(...o)}})),s}refresh(){const t\u003dthis.extractGroups([...this.view.indices]),e\u003dthis.source.data[this.columns[0].field];t.length\u0026\u0026(this.addTotals(t),this.rows\u003dthis.flattenedGroupedRows(t),this.target.data\u003d{row_indices:this.rows.map((t\u003d\u003et instanceof a.Group?t.rows:t)),labels:this.rows.map((t\u003d\u003et instanceof a.Group?t.title:e[t]))})}getLength(){return this.rows.length}getItem(t){const e\u003dthis.rows[t],{source:{data:s}}\u003dthis;return e instanceof a.Group?e:Object.keys(s).reduce(((t,o)\u003d\u003eObject.assign(Object.assign({},t),{[o]:s[o][e]})),{[n.DTINDEX_NAME]:e})}getItemMetadata(t){const e\u003dthis.rows[t],s\u003dthis.columns.slice(1),o\u003de instanceof a.Group?this.groupingInfos[e.level].aggregators:[];return e instanceof a.Group?{selectable:!1,focusable:!1,cssClasses:\"slick-group\",columns:[{formatter:p},...s.map((function(t){const{field:e,formatter:s}\u003dt,r\u003do.find((({field_:t})\u003d\u003et\u003d\u003d\u003de));if(r){const{key:t}\u003dr;return{formatter:(o,r,i,a,n)\u003d\u003es?s(o,r,n.totals[t][e],a,n):\"\"}}return{}}))]}:{}}collapseGroup(t){const e\u003dt.split(this.groupingDelimiter).length-1;this.toggledGroupsByLevel[e][t]\u003d!this.groupingInfos[e].collapsed,this.refresh()}expandGroup(t){const e\u003dt.split(this.groupingDelimiter).length-1;this.toggledGroupsByLevel[e][t]\u003dthis.groupingInfos[e].collapsed,this.refresh()}}s.DataCubeProvider\u003df,f.__name__\u003d\"DataCubeProvider\";class m extends l.DataTableView{render(){const t\u003d{enableCellNavigation:!1!\u003d\u003dthis.model.selectable,enableColumnReorder:!1,autosizeColsMode:this.autosize,multiColumnSort:!1,editable:this.model.editable,autoEdit:this.model.auto_edit,rowHeight:this.model.row_height},e\u003dthis.model.columns.map((t\u003d\u003et.toColumn()));var s,o;e[0].formatter\u003d(s\u003de[0].formatter,o\u003dthis.model.grouping.length,(t,e,r,a,n)\u003d\u003e{const l\u003di.span({class:\"slick-group-toggle\",style:{\"margin-left\":15*(null!\u003do?o:0)+\"px\"}}),u\u003ds?s(t,e,r,a,n):`${r}`;return`${l.outerHTML}${u\u0026\u0026u.replace(/^\u003cdiv/,\"\u003cspan\").replace(/div\u003e$/,\"span\u003e\")}`}),delete e[0].editor,this.data\u003dnew f(this.model.source,this.model.view,e,this.model.target),this.data.setGrouping(this.model.grouping),this.el.style.width\u003d`${this.model.width}px`,this.grid\u003dnew a.Grid(this.el,this.data,e,t),this.grid.onClick.subscribe(h)}}s.DataCubeView\u003dm,m.__name__\u003d\"DataCubeView\";class w extends l.DataTable{constructor(t){super(t)}static init_DataCube(){this.prototype.default_view\u003dm,this.define((({Array:t,Ref:e})\u003d\u003e({grouping:[t(e(d)),[]],target:[e(u.ColumnDataSource)]})))}}s.DataCube\u003dw,w.__name__\u003d\"DataCube\",w.init_DataCube()},\n      }, 464, {\"models/widgets/tables/main\":464,\"models/widgets/tables/index\":465,\"models/widgets/tables/cell_editors\":466,\"models/widgets/tables/definitions\":467,\"styles/widgets/tables.css\":468,\"models/widgets/tables/cell_formatters\":469,\"models/widgets/tables/data_table\":472,\"models/widgets/widget\":488,\"models/widgets/tables/table_widget\":489,\"models/widgets/tables/table_column\":490,\"styles/widgets/slickgrid.css\":491,\"models/widgets/tables/row_aggregators\":492,\"models/widgets/tables/data_cube\":493}, {});});\n\n      /* END bokeh-tables.min.js */\n    },\n    \n    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\n    \n    function(Bokeh) {\n      /* BEGIN panel.min.js */\n      /*!\n       * Copyright (c) 2012 - 2021, Anaconda, Inc., and Bokeh Contributors\n       * All rights reserved.\n       * \n       * Redistribution and use in source and binary forms, with or without modification,\n       * are permitted provided that the following conditions are met:\n       * \n       * Redistributions of source code must retain the above copyright notice,\n       * this list of conditions and the following disclaimer.\n       * \n       * Redistributions in binary form must reproduce the above copyright notice,\n       * this list of conditions and the following disclaimer in the documentation\n       * and/or other materials provided with the distribution.\n       * \n       * Neither the name of Anaconda nor the names of any contributors\n       * may be used to endorse or promote products derived from this software\n       * without specific prior written permission.\n       * \n       * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n       * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n       * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n       * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE\n       * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR\n       * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF\n       * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS\n       * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN\n       * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n       * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF\n       * THE POSSIBILITY OF SUCH DAMAGE.\n       */\n      (function(root, factory) {\n        factory(root[\"Bokeh\"], undefined);\n      })(this, function(Bokeh, version) {\n        var define;\n        return (function(modules, entry, aliases, externals) {\n          const bokeh \u003d typeof Bokeh !\u003d\u003d \"undefined\" \u0026\u0026 (version !\u003d null ? Bokeh[version] : Bokeh);\n          if (bokeh !\u003d null) {\n            return bokeh.register_plugin(modules, entry, aliases);\n          } else {\n            throw new Error(\"Cannot find Bokeh \" + version + \". You have to load it prior to loading plugins.\");\n          }\n        })\n      ({\n      \"4e90918c0a\": function _(e,s,t,o,i){o();const n\u003de(\"tslib\").__importStar(e(\"7898617fc4\"));t.Panel\u003dn;e(\"@bokehjs/base\").register_models(n)},\n      \"7898617fc4\": function _(e,a,t,c,o){c();const d\u003de(\"tslib\");o(\"AcePlot\",e(\"be520eff91\").AcePlot),o(\"Audio\",e(\"339f84d639\").Audio),o(\"Card\",e(\"c816112d20\").Card),o(\"CommManager\",e(\"e552778259\").CommManager),o(\"DataTabulator\",e(\"1385cb5c7e\").DataTabulator),o(\"DatetimePicker\",e(\"6e11b2cfe2\").DatetimePicker),o(\"DeckGLPlot\",e(\"df2378664f\").DeckGLPlot),o(\"ECharts\",e(\"9d046c4720\").ECharts),o(\"HTML\",e(\"2839081043\").HTML),o(\"IDOM\",e(\"7d45bd3bc4\").IDOM),o(\"IPyWidget\",e(\"0eae77d68f\").IPyWidget),o(\"JSON\",e(\"0d30bea0c8\").JSON),o(\"FileDownload\",e(\"1767172ffa\").FileDownload),o(\"KaTeX\",e(\"7b859fb3cf\").KaTeX),o(\"Location\",e(\"642aa56b24\").Location),o(\"MathJax\",e(\"0c21036737\").MathJax),o(\"Perspective\",e(\"84a772681d\").Perspective),o(\"Player\",e(\"2e8044c920\").Player),o(\"PlotlyPlot\",e(\"c23bb1717d\").PlotlyPlot),o(\"Progress\",e(\"9f787650b9\").Progress),o(\"ReactiveHTML\",e(\"d536149aaa\").ReactiveHTML),o(\"SingleSelect\",e(\"3b85956787\").SingleSelect),o(\"SpeechToText\",e(\"aaa48703af\").SpeechToText),o(\"State\",e(\"bfa46a5f19\").State),o(\"Terminal\",e(\"91fe88c277\").Terminal),o(\"TextToSpeech\",e(\"33cd2c254e\").TextToSpeech),o(\"TrendIndicator\",e(\"7e6584ca79\").TrendIndicator),o(\"VegaPlot\",e(\"4feb5fa522\").VegaPlot),o(\"Video\",e(\"ffe54b53c3\").Video),o(\"VideoStream\",e(\"e3e9b8e495\").VideoStream),d.__exportStar(e(\"c51f25e2a7\"),t)},\n      \"be520eff91\": function _(e,t,i,o,s){o();const n\u003de(\"@bokehjs/models/layouts/html_box\"),a\u003de(\"@bokehjs/core/dom\"),d\u003de(\"4c755983eb\");class h extends d.PanelHTMLBoxView{initialize(){super.initialize(),this._ace\u003dwindow.ace,this._container\u003da.div({id:\"_\"+Math.random().toString(36).substr(2,9),style:{width:\"100%\",height:\"100%\",zIndex:0}})}connect_signals(){super.connect_signals(),this.connect(this.model.properties.code.change,(()\u003d\u003ethis._update_code_from_model())),this.connect(this.model.properties.theme.change,(()\u003d\u003ethis._update_theme())),this.connect(this.model.properties.language.change,(()\u003d\u003ethis._update_language())),this.connect(this.model.properties.filename.change,(()\u003d\u003ethis._update_filename())),this.connect(this.model.properties.print_margin.change,(()\u003d\u003ethis._update_print_margin())),this.connect(this.model.properties.annotations.change,(()\u003d\u003ethis._add_annotations())),this.connect(this.model.properties.readonly.change,(()\u003d\u003e{this._editor.setReadOnly(this.model.readonly)}))}render(){super.render(),this._container!\u003d\u003dthis.el.childNodes[0]\u0026\u0026this.el.appendChild(this._container),this._container.textContent\u003dthis.model.code,this._editor\u003dthis._ace.edit(this._container.id),this._langTools\u003dthis._ace.require(\"ace/ext/language_tools\"),this._modelist\u003dthis._ace.require(\"ace/ext/modelist\"),this._editor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,fontFamily:\"monospace\"}),this._update_theme(),this._update_filename(),this._update_language(),this._editor.setReadOnly(this.model.readonly),this._editor.setShowPrintMargin(this.model.print_margin),this._editor.on(\"change\",(()\u003d\u003ethis._update_code_from_editor()))}_update_code_from_model(){this._editor\u0026\u0026this._editor.getValue()!\u003dthis.model.code\u0026\u0026this._editor.setValue(this.model.code)}_update_print_margin(){this._editor.setShowPrintMargin(this.model.print_margin)}_update_code_from_editor(){this._editor.getValue()!\u003dthis.model.code\u0026\u0026(this.model.code\u003dthis._editor.getValue())}_update_theme(){this._editor.setTheme(`ace/theme/${this.model.theme}`)}_update_filename(){if(this.model.filename){const e\u003dthis._modelist.getModeForPath(this.model.filename).mode;this.model.language\u003de.slice(9)}}_update_language(){null!\u003dthis.model.language\u0026\u0026this._editor.session.setMode(`ace/mode/${this.model.language}`)}_add_annotations(){this._editor.session.setAnnotations(this.model.annotations)}after_layout(){super.after_layout(),this._editor.resize()}}i.AcePlotView\u003dh,h.__name__\u003d\"AcePlotView\";class _ extends n.HTMLBox{constructor(e){super(e)}static init_AcePlot(){this.prototype.default_view\u003dh,this.define((({Any:e,Array:t,Boolean:i,String:o})\u003d\u003e({code:[o,\"\"],filename:[o],language:[o],theme:[o,\"chrome\"],annotations:[t(e),[]],readonly:[i,!1],print_margin:[i,!1]}))),this.override({height:300,width:300})}}i.AcePlot\u003d_,_.__name__\u003d\"AcePlot\",_.__module__\u003d\"panel.models.ace\",_.init_AcePlot()},\n      \"4c755983eb\": function _(e,i,t,s,h){s();const n\u003de(\"@bokehjs/core/layout/html\"),_\u003de(\"@bokehjs/core/layout/types\"),a\u003de(\"@bokehjs/core/dom\"),l\u003de(\"@bokehjs/models/widgets/markup\"),o\u003de(\"@bokehjs/models/layouts/html_box\");function d(e,i){let t\u003dnull!\u003di.width?\"fixed\":\"fit\",s\u003dnull!\u003di.height?\"fixed\":\"fit\";const{sizing_mode:h}\u003di;if(null!\u003dh)if(\"fixed\"\u003d\u003dh)t\u003ds\u003d\"fixed\";else if(\"stretch_both\"\u003d\u003dh)t\u003ds\u003d\"max\";else if(\"stretch_width\"\u003d\u003dh)t\u003d\"max\";else if(\"stretch_height\"\u003d\u003dh)s\u003d\"max\";else switch(h){case\"scale_width\":t\u003d\"max\",s\u003d\"min\";break;case\"scale_height\":t\u003d\"min\",s\u003d\"max\";break;case\"scale_both\":t\u003d\"max\",s\u003d\"max\";break;default:throw new Error(\"unreachable\")}\"fixed\"\u003d\u003dt\u0026\u0026i.width?e.style.width\u003di.width+\"px\":\"max\"\u003d\u003dt\u0026\u0026(e.style.width\u003d\"100%\"),null!\u003di.min_width\u0026\u0026(e.style.minWidth\u003di.min_width+\"px\"),null!\u003di.max_width\u0026\u0026(e.style.maxWidth\u003di.max_width+\"px\"),\"fixed\"\u003d\u003ds\u0026\u0026i.height?e.style.height\u003di.height+\"px\":\"max\"\u003d\u003ds\u0026\u0026(e.style.height\u003d\"100%\"),null!\u003di.min_height\u0026\u0026(e.style.minHeight\u003di.min_height+\"px\"),null!\u003di.max_width\u0026\u0026(e.style.maxHeight\u003di.max_height+\"px\")}t.set_size\u003dd;class m extends n.VariadicBox{constructor(e,i,t){super(e),this.el\u003de,this.sizing_mode\u003di,this.changed\u003dt,this._cache\u003dnew Map,this._cache_count\u003dnew Map}_measure(e){const i\u003d[e.width,e.height,this.sizing_mode].toString(),t\u003dthis.changed\u0026\u0026\"fixed\"!\u003dthis.sizing_mode\u0026\u0026null!\u003dthis.sizing_mode?1:0,s\u003dthis._cache.get(i),h\u003dthis._cache_count.get(i);if(null!\u003ds\u0026\u0026null!\u003dh\u0026\u0026h\u003e\u003dt)return this._cache_count.set(i,h+1),s;const n\u003dnew _.Sizeable(e).bounded_to(this.sizing.size),l\u003da.sized(this.el,n,(()\u003d\u003e{const e\u003dnew _.Sizeable(a.content_size(this.el)),{border:i,padding:t}\u003da.extents(this.el);return e.grow_by(i).grow_by(t).map(Math.ceil)}));return this._cache.set(i,l),this._cache_count.set(i,0),l}invalidate_cache(){}}t.CachedVariadicBox\u003dm,m.__name__\u003d\"CachedVariadicBox\";class c extends l.MarkupView{_update_layout(){let e\u003dvoid 0!\u003d\u003dthis._prev_sizing_mode\u0026\u0026this._prev_sizing_mode!\u003d\u003dthis.model.sizing_mode;this._prev_sizing_mode\u003dthis.model.sizing_mode,this.layout\u003dnew m(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())}render(){super.render(),d(this.markup_el,this.model)}}t.PanelMarkupView\u003dc,c.__name__\u003d\"PanelMarkupView\";class r extends o.HTMLBoxView{_update_layout(){let e\u003dvoid 0!\u003d\u003dthis._prev_sizing_mode\u0026\u0026this._prev_sizing_mode!\u003d\u003dthis.model.sizing_mode;this._prev_sizing_mode\u003dthis.model.sizing_mode,this.layout\u003dnew m(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())}render(){super.render(),d(this.el,this.model)}}t.PanelHTMLBoxView\u003dr,r.__name__\u003d\"PanelHTMLBoxView\"},\n      \"339f84d639\": function _(e,t,i,o,s){o();const l\u003de(\"@bokehjs/models/layouts/html_box\"),d\u003de(\"4c755983eb\");class u extends d.PanelHTMLBoxView{initialize(){super.initialize(),this._blocked\u003d!1,this._setting\u003d!1,this._time\u003dDate.now()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.loop.change,(()\u003d\u003ethis.set_loop())),this.connect(this.model.properties.paused.change,(()\u003d\u003ethis.set_paused())),this.connect(this.model.properties.time.change,(()\u003d\u003ethis.set_time())),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.set_value())),this.connect(this.model.properties.volume.change,(()\u003d\u003ethis.set_volume()))}render(){super.render(),this.audioEl\u003ddocument.createElement(\"audio\"),this.audioEl.controls\u003d!0,this.audioEl.src\u003dthis.model.value,this.audioEl.currentTime\u003dthis.model.time,this.audioEl.loop\u003dthis.model.loop,null!\u003dthis.model.volume?this.audioEl.volume\u003dthis.model.volume/100:this.model.volume\u003d100*this.audioEl.volume,this.audioEl.onpause\u003d()\u003d\u003ethis.model.paused\u003d!0,this.audioEl.onplay\u003d()\u003d\u003ethis.model.paused\u003d!1,this.audioEl.ontimeupdate\u003d()\u003d\u003ethis.update_time(this),this.audioEl.onvolumechange\u003d()\u003d\u003ethis.update_volume(this),this.el.appendChild(this.audioEl),this.model.paused||this.audioEl.play()}update_time(e){e._setting?e._setting\u003d!1:Date.now()-e._time\u003ce.model.throttle||(e._blocked\u003d!0,e.model.time\u003de.audioEl.currentTime,e._time\u003dDate.now())}update_volume(e){e._setting?e._setting\u003d!1:(e._blocked\u003d!0,e.model.volume\u003d100*e.audioEl.volume)}set_loop(){this.audioEl.loop\u003dthis.model.loop}set_paused(){!this.audioEl.paused\u0026\u0026this.model.paused\u0026\u0026this.audioEl.pause(),this.audioEl.paused\u0026\u0026!this.model.paused\u0026\u0026this.audioEl.play()}set_volume(){this._blocked?this._blocked\u003d!1:(this._setting\u003d!0,null!\u003dthis.model.volume\u0026\u0026(this.audioEl.volume\u003dthis.model.volume/100))}set_time(){this._blocked?this._blocked\u003d!1:(this._setting\u003d!0,this.audioEl.currentTime\u003dthis.model.time)}set_value(){this.audioEl.src\u003dthis.model.value}}i.AudioView\u003du,u.__name__\u003d\"AudioView\";class h extends l.HTMLBox{constructor(e){super(e)}static init_Audio(){this.prototype.default_view\u003du,this.define((({Any:e,Boolean:t,Int:i,Number:o})\u003d\u003e({loop:[t,!1],paused:[t,!0],time:[o,0],throttle:[o,250],value:[e,\"\"],volume:[i]})))}}i.Audio\u003dh,h.__name__\u003d\"Audio\",h.__module__\u003d\"panel.models.widgets\",h.init_Audio()},\n      \"c816112d20\": function _(e,s,l,t,o){t();const i\u003de(\"tslib\"),a\u003de(\"@bokehjs/models/layouts/column\"),n\u003de(\"@bokehjs/core/util/bbox\"),c\u003di.__importStar(e(\"@bokehjs/core/dom\")),d\u003de(\"@bokehjs/core/dom\"),r\u003de(\"@bokehjs/core/layout/grid\"),h\u003de(\"@bokehjs/core/util/color\");class _ extends a.ColumnView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.collapsed.change,(()\u003d\u003ethis._collapse()));const{active_header_background:e,header_background:s,header_color:l}\u003dthis.model.properties;this.on_change([e,s,l],(()\u003d\u003ethis.render()))}_update_layout(){const e\u003d(this.model.collapsed?this.child_views.slice(0,1):this.child_views).map((e\u003d\u003ee.layout));this.layout\u003dnew r.Column(e),this.layout.rows\u003dthis.model.rows,this.layout.spacing\u003d[this.model.spacing,0],this.layout.set_sizing(this.box_sizing())}update_position(){if(this.model.collapsible){const e\u003dthis.child_views[0],s\u003de.layout.bbox,l\u003de.layout.inner_bbox;if(0!\u003ds.x1){const t\u003dgetComputedStyle(this.button_el.children[0]),o\u003dparseFloat(t.width)+parseFloat(t.marginLeft),i\u003dnew n.BBox({x0:s.x0,x1:s.x1-o,y0:s.y0,y1:s.y1}),a\u003dnew n.BBox({x0:l.x0,x1:l.x1-o,y0:l.y0,y1:l.y1});e.layout.set_geometry(i,a)}}super.update_position()}render(){d.empty(this.el);const{background:e,button_css_classes:s,header_color:l,header_tag:t,header_css_classes:o}\u003dthis.model;this.el.style.backgroundColor\u003dnull!\u003de?h.color2css(e):\"\",d.classes(this.el).clear().add(...this.css_classes());let i\u003dthis.model.header_background;!this.model.collapsed\u0026\u0026this.model.active_header_background\u0026\u0026(i\u003dthis.model.active_header_background);const a\u003dthis.child_views[0];let n;if(this.model.collapsible){this.button_el\u003dc.createElement(\"button\",{type:\"button\",class:o});const e\u003dc.createElement(\"div\",{class:s});e.innerHTML\u003dthis.model.collapsed?\"►\":\"▼\",this.button_el.appendChild(e),this.button_el.style.backgroundColor\u003dnull!\u003di?i:\"\",a.el.style.backgroundColor\u003dnull!\u003di?i:\"\",this.button_el.appendChild(a.el),this.button_el.onclick\u003d()\u003d\u003ethis._toggle_button(),n\u003dthis.button_el}else n\u003dc.createElement(t,{class:o}),n.style.backgroundColor\u003dnull!\u003di?i:\"\",n.appendChild(a.el);n.style.color\u003dnull!\u003dl?l:\"\",this.el.appendChild(n),a.render();for(const e of this.child_views.slice(1))this.model.collapsed||this.el.appendChild(e.el),e.render()}_toggle_button(){this.model.collapsed\u003d!this.model.collapsed}_collapse(){this.invalidate_render()}_createElement(){return c.createElement(this.model.tag,{class:this.css_classes()})}}l.CardView\u003d_,_.__name__\u003d\"CardView\";class u extends a.Column{constructor(e){super(e)}static init_Card(){this.prototype.default_view\u003d_,this.define((({Array:e,Boolean:s,Nullable:l,String:t})\u003d\u003e({active_header_background:[l(t),null],button_css_classes:[e(t),[]],collapsed:[s,!0],collapsible:[s,!0],header_background:[l(t),null],header_color:[l(t),null],header_css_classes:[e(t),[]],header_tag:[t,\"div\"],tag:[t,\"div\"]})))}}l.Card\u003du,u.__name__\u003d\"Card\",u.__module__\u003d\"panel.models.layout\",u.init_Card()},\n      \"e552778259\": function _(e,t,n,o,i){o();const s\u003de(\"@bokehjs/document\"),c\u003de(\"@bokehjs/core/view\"),_\u003de(\"@bokehjs/model\"),l\u003de(\"@bokehjs/protocol/message\"),a\u003de(\"@bokehjs/protocol/receiver\");class h extends c.View{renderTo(){}}n.CommManagerView\u003dh,h.__name__\u003d\"CommManagerView\";class m extends _.Model{constructor(e){super(e),this._document_listener\u003de\u003d\u003ethis._document_changed(e),this._receiver\u003dnew a.Receiver,this._event_buffer\u003d[],this._blocked\u003d!1,this._timeout\u003dDate.now(),null!\u003dwindow.PyViz\u0026\u0026window.PyViz.comm_manager?(this.ns\u003dwindow.PyViz,this.ns.comm_manager.register_target(this.plot_id,this.comm_id,(e\u003d\u003ethis.msg_handler(e))),this._client_comm\u003dthis.ns.comm_manager.get_client_comm(this.plot_id,this.client_comm_id,(e\u003d\u003ethis.on_ack(e)))):console.log(\"Could not find comm manager on window.PyViz, ensure the extension is loaded.\")}_doc_attached(){super._doc_attached(),null!\u003dthis.document\u0026\u0026this.document.on_change(this._document_listener)}_document_changed(e){e.setter_id!\u003d\u003dthis.id\u0026\u0026(e instanceof s.ModelChangedEvent\u0026\u0026!(e.attr in e.model.serializable_attributes())||(this._event_buffer.push(e),(!this._blocked||Date.now()\u003ethis._timeout)\u0026\u0026(setTimeout((()\u003d\u003ethis.process_events()),this.debounce),this._blocked\u003d!0,this._timeout\u003dDate.now()+this.timeout)))}process_events(){if(null\u003d\u003dthis.document||null\u003d\u003dthis._client_comm)return;const e\u003dthis.document.create_json_patch(this._event_buffer);this._event_buffer\u003d[];const t\u003dl.Message.create(\"PATCH-DOC\",{},e);this._client_comm.send(t)}on_ack(e){const t\u003de.metadata;this._event_buffer.length?(this._blocked\u003d!0,this._timeout\u003dDate.now()+this.timeout,this.process_events()):this._blocked\u003d!1,\"Ready\"\u003d\u003dt.msg_type\u0026\u0026t.content?console.log(\"Python callback returned following output:\",t.content):\"Error\"\u003d\u003dt.msg_type\u0026\u0026console.log(\"Python failed with the following traceback:\",t.traceback)}msg_handler(e){const t\u003de.metadata,n\u003de.buffers,o\u003de.content.data,i\u003dthis.plot_id;if(\"Ready\"\u003d\u003dt.msg_type)t.content?console.log(\"Python callback returned following output:\",t.content):\"Error\"\u003d\u003dt.msg_type\u0026\u0026console.log(\"Python failed with the following traceback:\",t.traceback);else if(null!\u003di){let e\u003dnull;if(i in this.ns.plot_index\u0026\u0026null!\u003dthis.ns.plot_index[i]?e\u003dthis.ns.plot_index[i]:void 0!\u003d\u003dwindow.Bokeh\u0026\u0026i in window.Bokeh.index\u0026\u0026(e\u003dwindow.Bokeh.index[i]),null\u003d\u003de)return;null!\u003dn\u0026\u0026n.length\u003e0?this._receiver.consume(n[0].buffer):this._receiver.consume(o);const t\u003dthis._receiver.message;null!\u003dt\u0026\u0026Object.keys(t.content).length\u003e0\u0026\u0026null!\u003dthis.document\u0026\u0026this.document.apply_json_patch(t.content,t.buffers,this.id)}}static init_CommManager(){this.prototype.default_view\u003dh,this.define((({Int:e,String:t})\u003d\u003e({plot_id:[t],comm_id:[t],client_comm_id:[t],timeout:[e,5e3],debounce:[e,50]})))}}n.CommManager\u003dm,m.__name__\u003d\"CommManager\",m.__module__\u003d\"panel.models.comm_manager\",m.init_CommManager()},\n      \"1385cb5c7e\": function _(t,e,s,i,o){i();const l\u003dt(\"@bokehjs/core/util/types\"),a\u003dt(\"@bokehjs/models/layouts/html_box\"),n\u003dt(\"@bokehjs/core/dom\"),r\u003dt(\"@bokehjs/core/kinds\"),d\u003dt(\"@bokehjs/models/sources/column_data_source\"),c\u003dt(\"@bokehjs/models/widgets/tables\"),u\u003dt(\"f1971f81bf\"),h\u003dt(\"4c755983eb\");class m extends h.PanelHTMLBoxView{constructor(){super(...arguments),this._tabulator_cell_updating\u003d!1,this._selection_updating\u003d!1,this._styled_cells\u003d[]}connect_signals(){super.connect_signals();const{configuration:t,layout:e,columns:s,theme:i,groupby:o}\u003dthis.model.properties;this.on_change([t,e,s,o],(()\u003d\u003ethis.render_and_resize())),this.on_change([i],(()\u003d\u003ethis.setCSS())),this.connect(this.model.properties.download.change,(()\u003d\u003e{const t\u003dthis.model.filename.endsWith(\".json\")?\"json\":\"csv\";this.tabulator.download(t,this.model.filename)})),this.connect(this.model.properties.hidden_columns.change,(()\u003d\u003e{this.hideColumns()})),this.connect(this.model.properties.page_size.change,(()\u003d\u003e{this.setPageSize()})),this.connect(this.model.properties.page.change,(()\u003d\u003e{this.setPage()})),this.connect(this.model.properties.max_page.change,(()\u003d\u003e{this.setMaxPage()})),this.connect(this.model.properties.frozen_rows.change,(()\u003d\u003e{this.freezeRows()})),this.connect(this.model.properties.styles.change,(()\u003d\u003e{this.updateStyles()})),this.connect(this.model.source.properties.data.change,(()\u003d\u003e{this.setData()})),this.connect(this.model.source.streaming,(()\u003d\u003ethis.addData())),this.connect(this.model.source.patching,(()\u003d\u003ethis.updateOrAddData())),this.connect(this.model.source.selected.change,(()\u003d\u003ethis.updateSelection())),this.connect(this.model.source.selected.properties.indices.change,(()\u003d\u003ethis.updateSelection()))}render_and_resize(){this.render(),this.update_layout(),this.compute_layout(),this.root!\u003d\u003dthis\u0026\u0026this.invalidate_layout()}render(){super.render();if(this.setCSS())return;this._initializing\u003d!0;const t\u003dn.div({class:\"pnx-tabulator\"});h.set_size(t,this.model);let e\u003dthis.getConfiguration();this.tabulator\u003dnew Tabulator(t,e),\"remote\"\u003d\u003d\u003dthis.model.pagination\u0026\u0026(this.tabulator.options.pagination\u003dthis.model.pagination,this.tabulator.modules.page.mode\u003d\"remote\"),this.setGroupBy(),this.hideColumns(),this.model.pagination?(this.setMaxPage(),this.tabulator.setPage(this.model.page),this.setData()):this.freezeRows(),this.el.appendChild(t)}tableInit(t,e){const s\u003de.modules.ajax;s.sendRequest\u003d()\u003d\u003et.requestPage(s.params.page,s.params.sorters),e.modules.page._parseRemoteData\u003d()\u003d\u003e{}}requestPage(t,e){return new Promise(((s,i)\u003d\u003e{try{null!\u003dt\u0026\u0026null!\u003de\u0026\u0026(this.model.page\u003dt||1,this.model.sorters\u003de),s([])}catch(t){i(t)}}))}renderComplete(){this._initializing\u0026\u0026(this.updateStyles(),this.updateSelection()),this._initializing\u003d!1}freezeRows(){for(const t of this.model.frozen_rows)this.tabulator.getRow(t).freeze()}getLayout(){switch(this.model.layout){case\"fit_data\":return\"fitData\";case\"fit_data_fill\":return\"fitDataFill\";case\"fit_data_stretch\":return\"fitDataStretch\";case\"fit_data_table\":return\"fitDataTable\";case\"fit_columns\":return\"fitColumns\"}}getConfiguration(){const t\u003d\"remote\"\u003d\u003dthis.model.pagination?\"local\":this.model.pagination||!1;let e\u003d!(\"boolean\"\u003d\u003dtypeof this.model.select_mode);const s\u003dthis;let i\u003dObject.assign(Object.assign({},this.model.configuration),{index:\"_index\",nestedFieldSeparator:!1,selectable:e,tableBuilding:function(){s.tableInit(s,this)},renderComplete:()\u003d\u003ethis.renderComplete(),rowSelectionChanged:(t,e)\u003d\u003ethis.rowSelectionChanged(t,e),rowClick:(t,e)\u003d\u003ethis.rowClicked(t,e),cellEdited:t\u003d\u003ethis.cellEdited(t),columns:this.getColumns(),layout:this.getLayout(),pagination:t,paginationSize:this.model.page_size,paginationInitialPage:1,selectableCheck:t\u003d\u003e{const e\u003dthis.model.selectable_rows;return null\u003d\u003de||e.indexOf(t._row.data._index)\u003e\u003d0},tooltips:t\u003d\u003et.getColumn().getField()+\": \"+t.getValue()});t\u0026\u0026(i.ajaxURL\u003d\"http://panel.pyviz.org\",i.ajaxSorting\u003d!0);const o\u003dthis.model.source;let l;return l\u003dnull\u003d\u003d\u003do||0\u003d\u003d\u003do.columns().length?[]:u.transform_cds_to_records(o,!0),Object.assign(Object.assign({},i),{data:l})}getColumns(){var t;const e\u003dnull\u003d\u003d\u003d(t\u003dthis.model.configuration)||void 0\u003d\u003d\u003dt?void 0:t.columns;let s\u003d[];if(null!\u003de)for(const t of e)if(null!\u003dt.columns){const e\u003d[];for(const s of t.columns)e.push(Object.assign({},s));s.push(Object.assign(Object.assign({},t),{columns:e}))}else s.push(Object.assign({},t));for(const t of this.model.columns){let i\u003dnull;if(null!\u003de)for(const e of s)if(null!\u003de.columns){for(const s of e.columns)if(t.field\u003d\u003d\u003ds.field){i\u003ds;break}if(null!\u003di)break}else if(t.field\u003d\u003d\u003de.field){i\u003de;break}if(null\u003d\u003di\u0026\u0026(i\u003d{field:t.field}),null\u003d\u003di.title\u0026\u0026(i.title\u003dt.title),null\u003d\u003di.width\u0026\u0026null!\u003dt.width\u0026\u00260!\u003dt.width\u0026\u0026(i.width\u003dt.width),null\u003d\u003di.formatter\u0026\u0026null!\u003dt.formatter){const e\u003dt.formatter.type;i.formatter\u003d\"BooleanFormatter\"\u003d\u003d\u003de?\"tickCross\":e\u003d\u003et.formatter.doFormat(e.getRow(),e,e.getValue(),null,null)}const o\u003dt.editor,l\u003do.type;null!\u003di.editor||(\"StringEditor\"\u003d\u003d\u003dl?o.completions.length\u003e0?(i.editor\u003d\"autocomplete\",i.editorParams\u003d{values:o.completions}):i.editor\u003d\"input\":\"TextEditor\"\u003d\u003d\u003dl?i.editor\u003d\"textarea\":\"IntEditor\"\u003d\u003d\u003dl||\"NumberEditor\"\u003d\u003d\u003dl?(i.editor\u003d\"number\",i.editorParams\u003d{step:o.step}):\"CheckboxEditor\"\u003d\u003d\u003dl?i.editor\u003d\"tickCross\":\"SelectEditor\"\u003d\u003d\u003dl?(i.editor\u003d\"select\",i.editorParams\u003d{values:o.options}):null!\u003do\u0026\u0026null!\u003do.default_view\u0026\u0026(i.editor\u003d(e,s,i,o)\u003d\u003ethis.renderEditor(t,e,s,i,o))),i.editable\u003d()\u003d\u003ethis.model.editable\u0026\u0026null!\u003do.default_view,null\u003d\u003de\u0026\u0026s.push(i)}return s}renderEditor(t,e,s,i,o){const l\u003dt.editor,a\u003dnew l.default_view({column:t,model:l,parent:this,container:e._cell.element});return a.initialize(),a.connect_signals(),s((()\u003d\u003e{a.setValue(e.getValue())})),a.inputEl.addEventListener(\"change\",(()\u003d\u003e{const t\u003da.serializeValue(),s\u003de.getValue(),l\u003da.validate();l.valid||o(l.msg),null!\u003ds\u0026\u0026typeof t!\u003dtypeof s?o(\"Mismatching type\"):i(a.serializeValue())})),a.inputEl}after_layout(){super.after_layout(),null!\u003dthis.tabulator\u0026\u0026this.tabulator.redraw(!0),this.updateStyles()}setData(){const t\u003du.transform_cds_to_records(this.model.source,!0);null!\u003dthis.model.pagination?this.tabulator.rowManager.setData(t,!0,!1):this.tabulator.setData(t),this.freezeRows(),this.updateSelection()}setGroupBy(){if(0\u003d\u003dthis.model.groupby.length)return void this.tabulator.setGroupBy(!1);this.tabulator.setGroupBy((t\u003d\u003e{const e\u003d[];for(const s of this.model.groupby){const i\u003ds+\": \"+t[s];e.push(i)}return e.join(\", \")}))}setCSS(){let t;t\u003d\"default\"\u003d\u003dthis.model.theme?\"tabulator\":\"tabulator_\"+this.model.theme;const e\u003dthis.model.theme_url+t+\".min.css\";let s\u003dnull;const i\u003ddocument.getElementsByTagName(\"link\"),o\u003dthis.model.theme_url.indexOf(\"dist/\"),l\u003dthis.model.theme_url.slice(0,o);for(const t of i)if(t.href.indexOf(l)\u003e\u003d0){s\u003dt;break}if(null!\u003ds)return!s.href.endsWith(e)\u0026\u0026(s.href\u003de,setTimeout((()\u003d\u003ethis.render_and_resize()),100),!0);let a\u003ddocument.getElementsByTagName(\"head\")[0];const n\u003ddocument.createElement(\"link\");return n.type\u003d\"text/css\",n.rel\u003d\"stylesheet\",n.media\u003d\"screen\",n.href\u003de,n.onload\u003d()\u003d\u003e{this.render_and_resize()},a.appendChild(n),!0}updateStyles(){for(const t of this._styled_cells)t.cssText\u003d\"\";if(this._styled_cells\u003d[],null!\u003dthis.model.styles\u0026\u0026null!\u003dthis.tabulator\u0026\u00260!\u003dthis.tabulator.getDataCount()){for(const t in this.model.styles){const e\u003dthis.model.styles[t],s\u003dthis.tabulator.getRow(t);if(!s)continue;const i\u003ds._row.cells;for(const t in e){const s\u003de[t],o\u003di[t];if(null\u003d\u003do||!s.length)continue;const a\u003do.element;this._styled_cells.push(a),a.cssText\u003d\"\";for(const t of s){let e,s;if(l.isArray(t))[e,s]\u003dt;else{if(!t.includes(\":\"))continue;[e,s]\u003dt.split(\":\")}a.style.setProperty(e,s.trimLeft())}}}this.model.styles\u003d{}}}addData(){const t\u003dthis.tabulator.rowManager.getRows(),e\u003dt[t.length-1];let s\u003du.transform_cds_to_records(this.model.source,!0);this.tabulator.setData(s),this.model.follow\u0026\u0026this.tabulator.scrollToRow(e.data._index||0,\"top\",!1),this.freezeRows(),this.updateSelection()}updateOrAddData(){if(this._tabulator_cell_updating)return;let t\u003du.transform_cds_to_records(this.model.source,!0);this.tabulator.setData(t),this.freezeRows(),this.updateSelection()}hideColumns(){for(const t of this.tabulator.getColumns())this.model.hidden_columns.indexOf(t._column.field)\u003e-1?t.hide():t.show()}setMaxPage(){this.tabulator.setMaxPage(Math.max(this.model.page,this.model.max_page)),this.tabulator.modules.page._setPageButtons()}setPage(){this.tabulator.setPage(this.model.page)}setPageSize(){this.tabulator.setPageSize(this.model.page_size)}updateSelection(){if(null\u003d\u003dthis.tabulator||this._selection_updating)return;const t\u003dthis.model.source.selected.indices,e\u003dthis.tabulator.getSelectedData().map((t\u003d\u003et._index));JSON.stringify(t)!\u003dJSON.stringify(e)\u0026\u0026(this._selection_updating\u003d!0,this.tabulator.deselectRow(),this.tabulator.selectRow(t),this.tabulator.scrollToRow(t[0],\"bottom\",!1),this._selection_updating\u003d!1)}rowClicked(t,e){if(this._selection_updating||this._initializing||!0!\u003d\u003dthis.model.select_mode)return;let s\u003d[];const i\u003dthis.model.source.selected,o\u003de._row.data._index;if(t.ctrlKey||t.metaKey)s\u003dthis.model.source.selected.indices;else if(t.shiftKey\u0026\u0026i.indices.length){const t\u003di.indices[i.indices.length-1];if(o\u003et)for(let e\u003dt;e\u003co;e++)s.push(e);else for(let e\u003dt;e\u003eo;e--)s.push(e)}s.indexOf(o)\u003c0?s.push(o):s.splice(s.indexOf(o),1);const l\u003dthis._filter_selected(s);this.tabulator.deselectRow(),this.tabulator.selectRow(l),this._selection_updating\u003d!0,i.indices\u003dl,this._selection_updating\u003d!1}_filter_selected(t){const e\u003d[];for(const s of t)(null\u003d\u003dthis.model.selectable_rows||this.model.selectable_rows.indexOf(s)\u003e\u003d0)\u0026\u0026e.push(s);return e}rowSelectionChanged(t,e){if(this._selection_updating||this._initializing||\"boolean\"\u003d\u003dtypeof this.model.select_mode)return;const s\u003dt.map((t\u003d\u003et._index)),i\u003dthis._filter_selected(s);this._selection_updating\u003ds.length\u003d\u003d\u003di.length,this.model.source.selected.indices\u003di,this._selection_updating\u003d!1}cellEdited(t){const e\u003dt._cell.column.field,s\u003dt._cell.row.data._index,i\u003dt._cell.value;this._tabulator_cell_updating\u003d!0,this.model.source.patch({[e]:[[s,i]]}),this._tabulator_cell_updating\u003d!1}}s.DataTabulatorView\u003dm,m.__name__\u003d\"DataTabulatorView\",s.TableLayout\u003dr.Enum(\"fit_data\",\"fit_data_fill\",\"fit_data_stretch\",\"fit_data_table\",\"fit_columns\");class _ extends a.HTMLBox{constructor(t){super(t)}static init_DataTabulator(){this.prototype.default_view\u003dm,this.define((({Any:t,Array:e,Boolean:i,Nullable:o,Number:l,Ref:a,String:n})\u003d\u003e({configuration:[t,{}],columns:[e(a(c.TableColumn)),[]],download:[i,!0],editable:[i,!0],filename:[n,\"table.csv\"],follow:[i,!0],frozen_rows:[e(l),[]],groupby:[e(n),[]],hidden_columns:[e(n),[]],layout:[s.TableLayout,\"fit_data\"],max_page:[l,0],pagination:[o(n),null],page:[l,0],page_size:[l,0],select_mode:[t,!0],selectable_rows:[o(e(l)),null],source:[a(d.ColumnDataSource)],sorters:[e(t),[]],styles:[t,{}],theme:[n,\"simple\"],theme_url:[n,\"https://unpkg.com/tabulator-tables@4.9.3/dist/css/\"]})))}}s.DataTabulator\u003d_,_.__name__\u003d\"DataTabulator\",_.__module__\u003d\"panel.models.tabulator\",_.init_DataTabulator()},\n      \"f1971f81bf\": function _(n,t,e,o,r){o(),e.transform_cds_to_records\u003dfunction(n,t\u003d!1){const e\u003d[],o\u003dn.columns(),r\u003dn.get_length();if(0\u003d\u003d\u003do.length||null\u003d\u003d\u003dr)return[];for(let l\u003d0;l\u003cr;l++){const r\u003d{};for(const t of o){let e\u003dn.get_array(t);const o\u003dnull\u003d\u003de[0].shape?null:e[0].shape;null!\u003do\u0026\u0026o.length\u003e1\u0026\u0026\"number\"\u003d\u003dtypeof o[0]?r[t]\u003de.slice(l*o[1],l*o[1]+o[1]):r[t]\u003de[l]}t\u0026\u0026(r._index\u003dl),e.push(r)}return e},e.dict_to_records\u003dfunction(n,t\u003d!0){for(let e\u003d0;e\u003cn.index.length;e++){const o\u003d{};for(const r of n)(t||\"index\"!\u003d\u003dr)\u0026\u0026(o[r]\u003dn[r][e])}return[]}},\n      \"6e11b2cfe2\": function _(e,t,i,s,n){s();const o\u003de(\"tslib\"),l\u003do.__importDefault(e(\"50d3473f3f\")),d\u003de(\"@bokehjs/models/widgets/input_widget\"),a\u003de(\"@bokehjs/core/dom\"),r\u003de(\"@bokehjs/core/enums\"),c\u003de(\"@bokehjs/core/util/types\"),m\u003do.__importStar(e(\"@bokehjs/styles/widgets/inputs.css\")),h\u003do.__importDefault(e(\"@bokehjs/styles/widgets/flatpickr.css\"));function _(e){const t\u003d[];for(const i of e)if(c.isString(i))t.push(i);else{const[e,s]\u003di;t.push({from:e,to:s})}return t}class u extends d.InputWidgetView{connect_signals(){super.connect_signals();const{value:e,min_date:t,max_date:i,disabled_dates:s,enabled_dates:n,position:o,inline:l,enable_time:d,enable_seconds:a,military_time:r,date_format:c,mode:m}\u003dthis.model.properties;this.connect(e.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.setDate(this.model.value)})),this.connect(t.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"minDate\",this.model.min_date)})),this.connect(i.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"maxDate\",this.model.max_date)})),this.connect(s.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"disable\",this.model.disabled_dates)})),this.connect(n.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"enable\",this.model.enabled_dates)})),this.connect(o.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"position\",this.model.position)})),this.connect(l.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"inline\",this.model.inline)})),this.connect(d.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"enableTime\",this.model.enable_time)})),this.connect(a.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"enableSeconds\",this.model.enable_seconds)})),this.connect(r.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"time_24hr\",this.model.military_time)})),this.connect(m.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"mode\",this.model.mode)})),this.connect(c.change,(()\u003d\u003e{var e;return null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de?void 0:e.set(\"dateFormat\",this.model.date_format)}))}remove(){var e;null\u003d\u003d\u003d(e\u003dthis._picker)||void 0\u003d\u003d\u003de||e.destroy(),super.remove()}styles(){return[...super.styles(),h.default]}render(){var e,t;null\u003d\u003dthis._picker\u0026\u0026(super.render(),this.input_el\u003da.input({type:\"text\",class:m.input,disabled:this.model.disabled}),this.group_el.appendChild(this.input_el),this._picker\u003dl.default(this.input_el,{defaultDate:this.model.value,minDate:null!\u003d\u003d(e\u003dthis.model.min_date)\u0026\u0026void 0!\u003d\u003de?e:void 0,maxDate:null!\u003d\u003d(t\u003dthis.model.max_date)\u0026\u0026void 0!\u003d\u003dt?t:void 0,inline:this.model.inline,position:this.model.position,disable:_(this.model.disabled_dates),enable:_(this.model.enabled_dates),enableTime:this.model.enable_time,enableSeconds:this.model.enable_seconds,time_24hr:this.model.military_time,dateFormat:this.model.date_format,mode:this.model.mode,onClose:(e,t,i)\u003d\u003ethis._on_close(e,t,i)}))}_on_close(e,t,i){(\"range\"!\u003dthis.model.mode||t.includes(\"to\"))\u0026\u0026(this.model.value\u003dt,this.change_input())}}i.DatetimePickerView\u003du,u.__name__\u003d\"DatetimePickerView\";class p extends d.InputWidget{constructor(e){super(e)}static init_DatetimePicker(){this.prototype.default_view\u003du,this.define((({Boolean:e,String:t,Array:i,Tuple:s,Or:n,Nullable:o})\u003d\u003e{const l\u003di(n(t,s(t,t)));return{value:[t],min_date:[o(t),null],max_date:[o(t),null],disabled_dates:[l,[]],enabled_dates:[l,[]],position:[r.CalendarPosition,\"auto\"],inline:[e,!1],enable_time:[e,!0],enable_seconds:[e,!0],military_time:[e,!0],date_format:[t,\"Y-m-d H:i:S\"],mode:[t,\"single\"]}}))}}i.DatetimePicker\u003dp,p.__name__\u003d\"DatetimePicker\",p.__module__\u003d\"panel.models.datetime_picker\",p.init_DatetimePicker()},\n      \"50d3473f3f\": function _(e,n,t,a,i){\n      /* flatpickr v4.6.6, @license MIT */var o,r;o\u003dthis,r\u003dfunction(){\"use strict\";\n      /*! *****************************************************************************\n              Copyright (c) Microsoft Corporation.\n          \n              Permission to use, copy, modify, and/or distribute this software for any\n              purpose with or without fee is hereby granted.\n          \n              THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\n              REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\n              AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\n              INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\n              LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\n              OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\n              PERFORMANCE OF THIS SOFTWARE.\n              ***************************************************************************** */var e\u003dfunction(){return(e\u003dObject.assign||function(e){for(var n,t\u003d1,a\u003darguments.length;t\u003ca;t++)for(var i in n\u003darguments[t])Object.prototype.hasOwnProperty.call(n,i)\u0026\u0026(e[i]\u003dn[i]);return e}).apply(this,arguments)};function n(){for(var e\u003d0,n\u003d0,t\u003darguments.length;n\u003ct;n++)e+\u003darguments[n].length;var a\u003dArray(e),i\u003d0;for(n\u003d0;n\u003ct;n++)for(var o\u003darguments[n],r\u003d0,l\u003do.length;r\u003cl;r++,i++)a[i]\u003do[r];return a}var t\u003d[\"onChange\",\"onClose\",\"onDayCreate\",\"onDestroy\",\"onKeyDown\",\"onMonthChange\",\"onOpen\",\"onParseConfig\",\"onReady\",\"onValueUpdate\",\"onYearChange\",\"onPreCalendarPosition\"],a\u003d{_disable:[],_enable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:\"F j, Y\",altInput:!1,altInputClass:\"form-control input\",animate:\"object\"\u003d\u003dtypeof window\u0026\u0026-1\u003d\u003d\u003dwindow.navigator.userAgent.indexOf(\"MSIE\"),ariaDateFormat:\"F j, Y\",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:\", \",dateFormat:\"Y-m-d\",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enable:[],enableSeconds:!1,enableTime:!1,errorHandler:function(e){return\"undefined\"!\u003dtypeof console\u0026\u0026console.warn(e)},getWeek:function(e){var n\u003dnew Date(e.getTime());n.setHours(0,0,0,0),n.setDate(n.getDate()+3-(n.getDay()+6)%7);var t\u003dnew Date(n.getFullYear(),0,4);return 1+Math.round(((n.getTime()-t.getTime())/864e5-3+(t.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:\"default\",minuteIncrement:5,mode:\"single\",monthSelectorType:\"dropdown\",nextArrow:\"\u003csvg version\u003d\u00271.1\u0027 xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 xmlns:xlink\u003d\u0027http://www.w3.org/1999/xlink\u0027 viewBox\u003d\u00270 0 17 17\u0027\u003e\u003cg\u003e\u003c/g\u003e\u003cpath d\u003d\u0027M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z\u0027 /\u003e\u003c/svg\u003e\",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:\"auto\",positionElement:void 0,prevArrow:\"\u003csvg version\u003d\u00271.1\u0027 xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 xmlns:xlink\u003d\u0027http://www.w3.org/1999/xlink\u0027 viewBox\u003d\u00270 0 17 17\u0027\u003e\u003cg\u003e\u003c/g\u003e\u003cpath d\u003d\u0027M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z\u0027 /\u003e\u003c/svg\u003e\",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},i\u003d{weekdays:{shorthand:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],longhand:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"]},months:{shorthand:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],longhand:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var n\u003de%100;if(n\u003e3\u0026\u0026n\u003c21)return\"th\";switch(n%10){case 1:return\"st\";case 2:return\"nd\";case 3:return\"rd\";default:return\"th\"}},rangeSeparator:\" to \",weekAbbreviation:\"Wk\",scrollTitle:\"Scroll to increment\",toggleTitle:\"Click to toggle\",amPM:[\"AM\",\"PM\"],yearAriaLabel:\"Year\",monthAriaLabel:\"Month\",hourAriaLabel:\"Hour\",minuteAriaLabel:\"Minute\",time_24hr:!1},o\u003dfunction(e,n){return void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d2),(\"000\"+e).slice(-1*n)},r\u003dfunction(e){return!0\u003d\u003d\u003de?1:0};function l(e,n,t){var a;return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d!1),function(){var i\u003dthis,o\u003darguments;null!\u003d\u003da\u0026\u0026clearTimeout(a),a\u003dwindow.setTimeout((function(){a\u003dnull,t||e.apply(i,o)}),n),t\u0026\u0026!a\u0026\u0026e.apply(i,o)}}var c\u003dfunction(e){return e instanceof Array?e:[e]};function d(e,n,t){if(!0\u003d\u003d\u003dt)return e.classList.add(n);e.classList.remove(n)}function s(e,n,t){var a\u003dwindow.document.createElement(e);return n\u003dn||\"\",t\u003dt||\"\",a.className\u003dn,void 0!\u003d\u003dt\u0026\u0026(a.textContent\u003dt),a}function u(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function f(e,n){return n(e)?e:e.parentNode?f(e.parentNode,n):void 0}function m(e,n){var t\u003ds(\"div\",\"numInputWrapper\"),a\u003ds(\"input\",\"numInput \"+e),i\u003ds(\"span\",\"arrowUp\"),o\u003ds(\"span\",\"arrowDown\");if(-1\u003d\u003d\u003dnavigator.userAgent.indexOf(\"MSIE 9.0\")?a.type\u003d\"number\":(a.type\u003d\"text\",a.pattern\u003d\"\\\\d*\"),void 0!\u003d\u003dn)for(var r in n)a.setAttribute(r,n[r]);return t.appendChild(a),t.appendChild(i),t.appendChild(o),t}function g(e){try{return\"function\"\u003d\u003dtypeof e.composedPath?e.composedPath()[0]:e.target}catch(n){return e.target}}var p\u003dfunction(){},h\u003dfunction(e,n,t){return t.months[n?\"shorthand\":\"longhand\"][e]},v\u003d{D:p,F:function(e,n,t){e.setMonth(t.months.longhand.indexOf(n))},G:function(e,n){e.setHours(parseFloat(n))},H:function(e,n){e.setHours(parseFloat(n))},J:function(e,n){e.setDate(parseFloat(n))},K:function(e,n,t){e.setHours(e.getHours()%12+12*r(new RegExp(t.amPM[1],\"i\").test(n)))},M:function(e,n,t){e.setMonth(t.months.shorthand.indexOf(n))},S:function(e,n){e.setSeconds(parseFloat(n))},U:function(e,n){return new Date(1e3*parseFloat(n))},W:function(e,n,t){var a\u003dparseInt(n),i\u003dnew Date(e.getFullYear(),0,2+7*(a-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+t.firstDayOfWeek),i},Y:function(e,n){e.setFullYear(parseFloat(n))},Z:function(e,n){return new Date(n)},d:function(e,n){e.setDate(parseFloat(n))},h:function(e,n){e.setHours(parseFloat(n))},i:function(e,n){e.setMinutes(parseFloat(n))},j:function(e,n){e.setDate(parseFloat(n))},l:p,m:function(e,n){e.setMonth(parseFloat(n)-1)},n:function(e,n){e.setMonth(parseFloat(n)-1)},s:function(e,n){e.setSeconds(parseFloat(n))},u:function(e,n){return new Date(parseFloat(n))},w:p,y:function(e,n){e.setFullYear(2e3+parseFloat(n))}},D\u003d{D:\"(\\\\w+)\",F:\"(\\\\w+)\",G:\"(\\\\d\\\\d|\\\\d)\",H:\"(\\\\d\\\\d|\\\\d)\",J:\"(\\\\d\\\\d|\\\\d)\\\\w+\",K:\"\",M:\"(\\\\w+)\",S:\"(\\\\d\\\\d|\\\\d)\",U:\"(.+)\",W:\"(\\\\d\\\\d|\\\\d)\",Y:\"(\\\\d{4})\",Z:\"(.+)\",d:\"(\\\\d\\\\d|\\\\d)\",h:\"(\\\\d\\\\d|\\\\d)\",i:\"(\\\\d\\\\d|\\\\d)\",j:\"(\\\\d\\\\d|\\\\d)\",l:\"(\\\\w+)\",m:\"(\\\\d\\\\d|\\\\d)\",n:\"(\\\\d\\\\d|\\\\d)\",s:\"(\\\\d\\\\d|\\\\d)\",u:\"(.+)\",w:\"(\\\\d\\\\d|\\\\d)\",y:\"(\\\\d{2})\"},w\u003d{Z:function(e){return e.toISOString()},D:function(e,n,t){return n.weekdays.shorthand[w.w(e,n,t)]},F:function(e,n,t){return h(w.n(e,n,t)-1,!1,n)},G:function(e,n,t){return o(w.h(e,n,t))},H:function(e){return o(e.getHours())},J:function(e,n){return void 0!\u003d\u003dn.ordinal?e.getDate()+n.ordinal(e.getDate()):e.getDate()},K:function(e,n){return n.amPM[r(e.getHours()\u003e11)]},M:function(e,n){return h(e.getMonth(),!0,n)},S:function(e){return o(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,n,t){return t.getWeek(e)},Y:function(e){return o(e.getFullYear(),4)},d:function(e){return o(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return o(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,n){return n.weekdays.longhand[e.getDay()]},m:function(e){return o(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},b\u003dfunction(e){var n\u003de.config,t\u003dvoid 0\u003d\u003d\u003dn?a:n,o\u003de.l10n,r\u003dvoid 0\u003d\u003d\u003do?i:o,l\u003de.isMobile,c\u003dvoid 0!\u003d\u003dl\u0026\u0026l;return function(e,n,a){var i\u003da||r;return void 0\u003d\u003d\u003dt.formatDate||c?n.split(\"\").map((function(n,a,o){return w[n]\u0026\u0026\"\\\\\"!\u003d\u003do[a-1]?w[n](e,i,t):\"\\\\\"!\u003d\u003dn?n:\"\"})).join(\"\"):t.formatDate(e,n,i)}},C\u003dfunction(e){var n\u003de.config,t\u003dvoid 0\u003d\u003d\u003dn?a:n,o\u003de.l10n,r\u003dvoid 0\u003d\u003d\u003do?i:o;return function(e,n,i,o){if(0\u003d\u003d\u003de||e){var l,c\u003do||r,d\u003de;if(e instanceof Date)l\u003dnew Date(e.getTime());else if(\"string\"!\u003dtypeof e\u0026\u0026void 0!\u003d\u003de.toFixed)l\u003dnew Date(e);else if(\"string\"\u003d\u003dtypeof e){var s\u003dn||(t||a).dateFormat,u\u003dString(e).trim();if(\"today\"\u003d\u003d\u003du)l\u003dnew Date,i\u003d!0;else if(/Z$/.test(u)||/GMT$/.test(u))l\u003dnew Date(e);else if(t\u0026\u0026t.parseDate)l\u003dt.parseDate(e,s);else{l\u003dt\u0026\u0026t.noCalendar?new Date((new Date).setHours(0,0,0,0)):new Date((new Date).getFullYear(),0,1,0,0,0,0);for(var f\u003dvoid 0,m\u003d[],g\u003d0,p\u003d0,h\u003d\"\";g\u003cs.length;g++){var w\u003ds[g],b\u003d\"\\\\\"\u003d\u003d\u003dw,C\u003d\"\\\\\"\u003d\u003d\u003ds[g-1]||b;if(D[w]\u0026\u0026!C){h+\u003dD[w];var M\u003dnew RegExp(h).exec(e);M\u0026\u0026(f\u003d!0)\u0026\u0026m[\"Y\"!\u003d\u003dw?\"push\":\"unshift\"]({fn:v[w],val:M[++p]})}else b||(h+\u003d\".\");m.forEach((function(e){var n\u003de.fn,t\u003de.val;return l\u003dn(l,t,c)||l}))}l\u003df?l:void 0}}if(l instanceof Date\u0026\u0026!isNaN(l.getTime()))return!0\u003d\u003d\u003di\u0026\u0026l.setHours(0,0,0,0),l;t.errorHandler(new Error(\"Invalid date provided: \"+d))}}};function M(e,n,t){return void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d!0),!1!\u003d\u003dt?new Date(e.getTime()).setHours(0,0,0,0)-new Date(n.getTime()).setHours(0,0,0,0):e.getTime()-n.getTime()}var y\u003d864e5;function x(p,v){var w\u003d{config:e(e({},a),k.defaultConfig),l10n:i};function x(e){return e.bind(w)}function E(){var e\u003dw.config;!1\u003d\u003d\u003de.weekNumbers\u0026\u00261\u003d\u003d\u003de.showMonths||!0!\u003d\u003de.noCalendar\u0026\u0026window.requestAnimationFrame((function(){if(void 0!\u003d\u003dw.calendarContainer\u0026\u0026(w.calendarContainer.style.visibility\u003d\"hidden\",w.calendarContainer.style.display\u003d\"block\"),void 0!\u003d\u003dw.daysContainer){var n\u003d(w.days.offsetWidth+1)*e.showMonths;w.daysContainer.style.width\u003dn+\"px\",w.calendarContainer.style.width\u003dn+(void 0!\u003d\u003dw.weekWrapper?w.weekWrapper.offsetWidth:0)+\"px\",w.calendarContainer.style.removeProperty(\"visibility\"),w.calendarContainer.style.removeProperty(\"display\")}}))}function T(e){if(0\u003d\u003d\u003dw.selectedDates.length){var n\u003dvoid 0!\u003d\u003dw.config.minDate?new Date(w.config.minDate.getTime()):new Date,t\u003d_(),a\u003dt.hours,i\u003dt.minutes,l\u003dt.seconds;n.setHours(a,i,l,0),w.setDate(n,!1)}void 0!\u003d\u003de\u0026\u0026\"blur\"!\u003d\u003de.type\u0026\u0026function(e){e.preventDefault();var n\u003d\"keydown\"\u003d\u003d\u003de.type,t\u003dg(e),a\u003dt;void 0!\u003d\u003dw.amPM\u0026\u0026t\u003d\u003d\u003dw.amPM\u0026\u0026(w.amPM.textContent\u003dw.l10n.amPM[r(w.amPM.textContent\u003d\u003d\u003dw.l10n.amPM[0])]);var i\u003dparseFloat(a.getAttribute(\"min\")),l\u003dparseFloat(a.getAttribute(\"max\")),c\u003dparseFloat(a.getAttribute(\"step\")),d\u003dparseInt(a.value,10),s\u003de.delta||(n?38\u003d\u003d\u003de.which?1:-1:0),u\u003dd+c*s;if(void 0!\u003d\u003da.value\u0026\u00262\u003d\u003d\u003da.value.length){var f\u003da\u003d\u003d\u003dw.hourElement,m\u003da\u003d\u003d\u003dw.minuteElement;u\u003ci?(u\u003dl+u+r(!f)+(r(f)\u0026\u0026r(!w.amPM)),m\u0026\u0026H(void 0,-1,w.hourElement)):u\u003el\u0026\u0026(u\u003da\u003d\u003d\u003dw.hourElement?u-l-r(!w.amPM):i,m\u0026\u0026H(void 0,1,w.hourElement)),w.amPM\u0026\u0026f\u0026\u0026(1\u003d\u003d\u003dc?u+d\u003d\u003d\u003d23:Math.abs(u-d)\u003ec)\u0026\u0026(w.amPM.textContent\u003dw.l10n.amPM[r(w.amPM.textContent\u003d\u003d\u003dw.l10n.amPM[0])]),a.value\u003do(u)}}(e);var c\u003dw._input.value;I(),be(),w._input.value!\u003d\u003dc\u0026\u0026w._debouncedChange()}function I(){if(void 0!\u003d\u003dw.hourElement\u0026\u0026void 0!\u003d\u003dw.minuteElement){var e,n,t\u003d(parseInt(w.hourElement.value.slice(-2),10)||0)%24,a\u003d(parseInt(w.minuteElement.value,10)||0)%60,i\u003dvoid 0!\u003d\u003dw.secondElement?(parseInt(w.secondElement.value,10)||0)%60:0;void 0!\u003d\u003dw.amPM\u0026\u0026(e\u003dt,n\u003dw.amPM.textContent,t\u003de%12+12*r(n\u003d\u003d\u003dw.l10n.amPM[1]));var o\u003dvoid 0!\u003d\u003dw.config.minTime||w.config.minDate\u0026\u0026w.minDateHasTime\u0026\u0026w.latestSelectedDateObj\u0026\u00260\u003d\u003d\u003dM(w.latestSelectedDateObj,w.config.minDate,!0);if(void 0!\u003d\u003dw.config.maxTime||w.config.maxDate\u0026\u0026w.maxDateHasTime\u0026\u0026w.latestSelectedDateObj\u0026\u00260\u003d\u003d\u003dM(w.latestSelectedDateObj,w.config.maxDate,!0)){var l\u003dvoid 0!\u003d\u003dw.config.maxTime?w.config.maxTime:w.config.maxDate;(t\u003dMath.min(t,l.getHours()))\u003d\u003d\u003dl.getHours()\u0026\u0026(a\u003dMath.min(a,l.getMinutes())),a\u003d\u003d\u003dl.getMinutes()\u0026\u0026(i\u003dMath.min(i,l.getSeconds()))}if(o){var c\u003dvoid 0!\u003d\u003dw.config.minTime?w.config.minTime:w.config.minDate;(t\u003dMath.max(t,c.getHours()))\u003d\u003d\u003dc.getHours()\u0026\u0026(a\u003dMath.max(a,c.getMinutes())),a\u003d\u003d\u003dc.getMinutes()\u0026\u0026(i\u003dMath.max(i,c.getSeconds()))}O(t,a,i)}}function S(e){var n\u003de||w.latestSelectedDateObj;n\u0026\u0026O(n.getHours(),n.getMinutes(),n.getSeconds())}function _(){var e\u003dw.config.defaultHour,n\u003dw.config.defaultMinute,t\u003dw.config.defaultSeconds;if(void 0!\u003d\u003dw.config.minDate){var a\u003dw.config.minDate.getHours(),i\u003dw.config.minDate.getMinutes();(e\u003dMath.max(e,a))\u003d\u003d\u003da\u0026\u0026(n\u003dMath.max(i,n)),e\u003d\u003d\u003da\u0026\u0026n\u003d\u003d\u003di\u0026\u0026(t\u003dw.config.minDate.getSeconds())}if(void 0!\u003d\u003dw.config.maxDate){var o\u003dw.config.maxDate.getHours(),r\u003dw.config.maxDate.getMinutes();(e\u003dMath.min(e,o))\u003d\u003d\u003do\u0026\u0026(n\u003dMath.min(r,n)),e\u003d\u003d\u003do\u0026\u0026n\u003d\u003d\u003dr\u0026\u0026(t\u003dw.config.maxDate.getSeconds())}return{hours:e,minutes:n,seconds:t}}function O(e,n,t){void 0!\u003d\u003dw.latestSelectedDateObj\u0026\u0026w.latestSelectedDateObj.setHours(e%24,n,t||0,0),w.hourElement\u0026\u0026w.minuteElement\u0026\u0026!w.isMobile\u0026\u0026(w.hourElement.value\u003do(w.config.time_24hr?e:(12+e)%12+12*r(e%12\u003d\u003d0)),w.minuteElement.value\u003do(n),void 0!\u003d\u003dw.amPM\u0026\u0026(w.amPM.textContent\u003dw.l10n.amPM[r(e\u003e\u003d12)]),void 0!\u003d\u003dw.secondElement\u0026\u0026(w.secondElement.value\u003do(t)))}function F(e){var n\u003dg(e),t\u003dparseInt(n.value)+(e.delta||0);(t/1e3\u003e1||\"Enter\"\u003d\u003d\u003de.key\u0026\u0026!/[^\\d]/.test(t.toString()))\u0026\u0026Q(t)}function N(e,n,t,a){return n instanceof Array?n.forEach((function(n){return N(e,n,t,a)})):e instanceof Array?e.forEach((function(e){return N(e,n,t,a)})):(e.addEventListener(n,t,a),void w._handlers.push({element:e,event:n,handler:t,options:a}))}function A(){pe(\"onChange\")}function P(e,n){var t\u003dvoid 0!\u003d\u003de?w.parseDate(e):w.latestSelectedDateObj||(w.config.minDate\u0026\u0026w.config.minDate\u003ew.now?w.config.minDate:w.config.maxDate\u0026\u0026w.config.maxDate\u003cw.now?w.config.maxDate:w.now),a\u003dw.currentYear,i\u003dw.currentMonth;try{void 0!\u003d\u003dt\u0026\u0026(w.currentYear\u003dt.getFullYear(),w.currentMonth\u003dt.getMonth())}catch(e){e.message\u003d\"Invalid date supplied: \"+t,w.config.errorHandler(e)}n\u0026\u0026w.currentYear!\u003d\u003da\u0026\u0026(pe(\"onYearChange\"),K()),!n||w.currentYear\u003d\u003d\u003da\u0026\u0026w.currentMonth\u003d\u003d\u003di||pe(\"onMonthChange\"),w.redraw()}function Y(e){var n\u003dg(e);~n.className.indexOf(\"arrow\")\u0026\u0026H(e,n.classList.contains(\"arrowUp\")?1:-1)}function H(e,n,t){var a\u003de\u0026\u0026g(e),i\u003dt||a\u0026\u0026a.parentNode\u0026\u0026a.parentNode.firstChild,o\u003dhe(\"increment\");o.delta\u003dn,i\u0026\u0026i.dispatchEvent(o)}function j(e,n,t,a){var i\u003dX(n,!0),o\u003ds(\"span\",\"flatpickr-day \"+e,n.getDate().toString());return o.dateObj\u003dn,o.$i\u003da,o.setAttribute(\"aria-label\",w.formatDate(n,w.config.ariaDateFormat)),-1\u003d\u003d\u003de.indexOf(\"hidden\")\u0026\u00260\u003d\u003d\u003dM(n,w.now)\u0026\u0026(w.todayDateElem\u003do,o.classList.add(\"today\"),o.setAttribute(\"aria-current\",\"date\")),i?(o.tabIndex\u003d-1,ve(n)\u0026\u0026(o.classList.add(\"selected\"),w.selectedDateElem\u003do,\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026(d(o,\"startRange\",w.selectedDates[0]\u0026\u00260\u003d\u003d\u003dM(n,w.selectedDates[0],!0)),d(o,\"endRange\",w.selectedDates[1]\u0026\u00260\u003d\u003d\u003dM(n,w.selectedDates[1],!0)),\"nextMonthDay\"\u003d\u003d\u003de\u0026\u0026o.classList.add(\"inRange\")))):o.classList.add(\"flatpickr-disabled\"),\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026function(e){return!(\"range\"!\u003d\u003dw.config.mode||w.selectedDates.length\u003c2)\u0026\u0026M(e,w.selectedDates[0])\u003e\u003d0\u0026\u0026M(e,w.selectedDates[1])\u003c\u003d0}(n)\u0026\u0026!ve(n)\u0026\u0026o.classList.add(\"inRange\"),w.weekNumbers\u0026\u00261\u003d\u003d\u003dw.config.showMonths\u0026\u0026\"prevMonthDay\"!\u003d\u003de\u0026\u0026t%7\u003d\u003d1\u0026\u0026w.weekNumbers.insertAdjacentHTML(\"beforeend\",\"\u003cspan class\u003d\u0027flatpickr-day\u0027\u003e\"+w.config.getWeek(n)+\"\u003c/span\u003e\"),pe(\"onDayCreate\",o),o}function L(e){e.focus(),\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026ae(e)}function W(e){for(var n\u003de\u003e0?0:w.config.showMonths-1,t\u003de\u003e0?w.config.showMonths:-1,a\u003dn;a!\u003dt;a+\u003de)for(var i\u003dw.daysContainer.children[a],o\u003de\u003e0?0:i.children.length-1,r\u003de\u003e0?i.children.length:-1,l\u003do;l!\u003dr;l+\u003de){var c\u003di.children[l];if(-1\u003d\u003d\u003dc.className.indexOf(\"hidden\")\u0026\u0026X(c.dateObj))return c}}function R(e,n){var t\u003dee(document.activeElement||document.body),a\u003dvoid 0!\u003d\u003de?e:t?document.activeElement:void 0!\u003d\u003dw.selectedDateElem\u0026\u0026ee(w.selectedDateElem)?w.selectedDateElem:void 0!\u003d\u003dw.todayDateElem\u0026\u0026ee(w.todayDateElem)?w.todayDateElem:W(n\u003e0?1:-1);void 0\u003d\u003d\u003da?w._input.focus():t?function(e,n){for(var t\u003d-1\u003d\u003d\u003de.className.indexOf(\"Month\")?e.dateObj.getMonth():w.currentMonth,a\u003dn\u003e0?w.config.showMonths:-1,i\u003dn\u003e0?1:-1,o\u003dt-w.currentMonth;o!\u003da;o+\u003di)for(var r\u003dw.daysContainer.children[o],l\u003dt-w.currentMonth\u003d\u003d\u003do?e.$i+n:n\u003c0?r.children.length-1:0,c\u003dr.children.length,d\u003dl;d\u003e\u003d0\u0026\u0026d\u003cc\u0026\u0026d!\u003d(n\u003e0?c:-1);d+\u003di){var s\u003dr.children[d];if(-1\u003d\u003d\u003ds.className.indexOf(\"hidden\")\u0026\u0026X(s.dateObj)\u0026\u0026Math.abs(e.$i-d)\u003e\u003dMath.abs(n))return L(s)}w.changeMonth(i),R(W(i),0)}(a,n):L(a)}function B(e,n){for(var t\u003d(new Date(e,n,1).getDay()-w.l10n.firstDayOfWeek+7)%7,a\u003dw.utils.getDaysInMonth((n-1+12)%12,e),i\u003dw.utils.getDaysInMonth(n,e),o\u003dwindow.document.createDocumentFragment(),r\u003dw.config.showMonths\u003e1,l\u003dr?\"prevMonthDay hidden\":\"prevMonthDay\",c\u003dr?\"nextMonthDay hidden\":\"nextMonthDay\",d\u003da+1-t,u\u003d0;d\u003c\u003da;d++,u++)o.appendChild(j(l,new Date(e,n-1,d),d,u));for(d\u003d1;d\u003c\u003di;d++,u++)o.appendChild(j(\"\",new Date(e,n,d),d,u));for(var f\u003di+1;f\u003c\u003d42-t\u0026\u0026(1\u003d\u003d\u003dw.config.showMonths||u%7!\u003d0);f++,u++)o.appendChild(j(c,new Date(e,n+1,f%i),f,u));var m\u003ds(\"div\",\"dayContainer\");return m.appendChild(o),m}function J(){if(void 0!\u003d\u003dw.daysContainer){u(w.daysContainer),w.weekNumbers\u0026\u0026u(w.weekNumbers);for(var e\u003ddocument.createDocumentFragment(),n\u003d0;n\u003cw.config.showMonths;n++){var t\u003dnew Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),e.appendChild(B(t.getFullYear(),t.getMonth()))}w.daysContainer.appendChild(e),w.days\u003dw.daysContainer.firstChild,\"range\"\u003d\u003d\u003dw.config.mode\u0026\u00261\u003d\u003d\u003dw.selectedDates.length\u0026\u0026ae()}}function K(){if(!(w.config.showMonths\u003e1||\"dropdown\"!\u003d\u003dw.config.monthSelectorType)){var e\u003dfunction(e){return!(void 0!\u003d\u003dw.config.minDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.minDate.getFullYear()\u0026\u0026e\u003cw.config.minDate.getMonth()||void 0!\u003d\u003dw.config.maxDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.maxDate.getFullYear()\u0026\u0026e\u003ew.config.maxDate.getMonth())};w.monthsDropdownContainer.tabIndex\u003d-1,w.monthsDropdownContainer.innerHTML\u003d\"\";for(var n\u003d0;n\u003c12;n++)if(e(n)){var t\u003ds(\"option\",\"flatpickr-monthDropdown-month\");t.value\u003dnew Date(w.currentYear,n).getMonth().toString(),t.textContent\u003dh(n,w.config.shorthandCurrentMonth,w.l10n),t.tabIndex\u003d-1,w.currentMonth\u003d\u003d\u003dn\u0026\u0026(t.selected\u003d!0),w.monthsDropdownContainer.appendChild(t)}}}function U(){var e,n\u003ds(\"div\",\"flatpickr-month\"),t\u003dwindow.document.createDocumentFragment();w.config.showMonths\u003e1||\"static\"\u003d\u003d\u003dw.config.monthSelectorType?e\u003ds(\"span\",\"cur-month\"):(w.monthsDropdownContainer\u003ds(\"select\",\"flatpickr-monthDropdown-months\"),w.monthsDropdownContainer.setAttribute(\"aria-label\",w.l10n.monthAriaLabel),N(w.monthsDropdownContainer,\"change\",(function(e){var n\u003dg(e),t\u003dparseInt(n.value,10);w.changeMonth(t-w.currentMonth),pe(\"onMonthChange\")})),K(),e\u003dw.monthsDropdownContainer);var a\u003dm(\"cur-year\",{tabindex:\"-1\"}),i\u003da.getElementsByTagName(\"input\")[0];i.setAttribute(\"aria-label\",w.l10n.yearAriaLabel),w.config.minDate\u0026\u0026i.setAttribute(\"min\",w.config.minDate.getFullYear().toString()),w.config.maxDate\u0026\u0026(i.setAttribute(\"max\",w.config.maxDate.getFullYear().toString()),i.disabled\u003d!!w.config.minDate\u0026\u0026w.config.minDate.getFullYear()\u003d\u003d\u003dw.config.maxDate.getFullYear());var o\u003ds(\"div\",\"flatpickr-current-month\");return o.appendChild(e),o.appendChild(a),t.appendChild(o),n.appendChild(t),{container:n,yearElement:i,monthElement:e}}function q(){u(w.monthNav),w.monthNav.appendChild(w.prevMonthNav),w.config.showMonths\u0026\u0026(w.yearElements\u003d[],w.monthElements\u003d[]);for(var e\u003dw.config.showMonths;e--;){var n\u003dU();w.yearElements.push(n.yearElement),w.monthElements.push(n.monthElement),w.monthNav.appendChild(n.container)}w.monthNav.appendChild(w.nextMonthNav)}function $(){w.weekdayContainer?u(w.weekdayContainer):w.weekdayContainer\u003ds(\"div\",\"flatpickr-weekdays\");for(var e\u003dw.config.showMonths;e--;){var n\u003ds(\"div\",\"flatpickr-weekdaycontainer\");w.weekdayContainer.appendChild(n)}return z(),w.weekdayContainer}function z(){if(w.weekdayContainer){var e\u003dw.l10n.firstDayOfWeek,t\u003dn(w.l10n.weekdays.shorthand);e\u003e0\u0026\u0026e\u003ct.length\u0026\u0026(t\u003dn(t.splice(e,t.length),t.splice(0,e)));for(var a\u003dw.config.showMonths;a--;)w.weekdayContainer.children[a].innerHTML\u003d\"\\n      \u003cspan class\u003d\u0027flatpickr-weekday\u0027\u003e\\n        \"+t.join(\"\u003c/span\u003e\u003cspan class\u003d\u0027flatpickr-weekday\u0027\u003e\")+\"\\n      \u003c/span\u003e\\n      \"}}function G(e,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0);var t\u003dn?e:e-w.currentMonth;t\u003c0\u0026\u0026!0\u003d\u003d\u003dw._hidePrevMonthArrow||t\u003e0\u0026\u0026!0\u003d\u003d\u003dw._hideNextMonthArrow||(w.currentMonth+\u003dt,(w.currentMonth\u003c0||w.currentMonth\u003e11)\u0026\u0026(w.currentYear+\u003dw.currentMonth\u003e11?1:-1,w.currentMonth\u003d(w.currentMonth+12)%12,pe(\"onYearChange\"),K()),J(),pe(\"onMonthChange\"),De())}function V(e){return!(!w.config.appendTo||!w.config.appendTo.contains(e))||w.calendarContainer.contains(e)}function Z(e){if(w.isOpen\u0026\u0026!w.config.inline){var n\u003dg(e),t\u003dV(n),a\u003dn\u003d\u003d\u003dw.input||n\u003d\u003d\u003dw.altInput||w.element.contains(n)||e.path\u0026\u0026e.path.indexOf\u0026\u0026(~e.path.indexOf(w.input)||~e.path.indexOf(w.altInput)),i\u003d\"blur\"\u003d\u003d\u003de.type?a\u0026\u0026e.relatedTarget\u0026\u0026!V(e.relatedTarget):!a\u0026\u0026!t\u0026\u0026!V(e.relatedTarget),o\u003d!w.config.ignoredFocusElements.some((function(e){return e.contains(n)}));i\u0026\u0026o\u0026\u0026(void 0!\u003d\u003dw.timeContainer\u0026\u0026void 0!\u003d\u003dw.minuteElement\u0026\u0026void 0!\u003d\u003dw.hourElement\u0026\u0026\"\"!\u003d\u003dw.input.value\u0026\u0026void 0!\u003d\u003dw.input.value\u0026\u0026T(),w.close(),w.config\u0026\u0026\"range\"\u003d\u003d\u003dw.config.mode\u0026\u00261\u003d\u003d\u003dw.selectedDates.length\u0026\u0026(w.clear(!1),w.redraw()))}}function Q(e){if(!(!e||w.config.minDate\u0026\u0026e\u003cw.config.minDate.getFullYear()||w.config.maxDate\u0026\u0026e\u003ew.config.maxDate.getFullYear())){var n\u003de,t\u003dw.currentYear!\u003d\u003dn;w.currentYear\u003dn||w.currentYear,w.config.maxDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.maxDate.getFullYear()?w.currentMonth\u003dMath.min(w.config.maxDate.getMonth(),w.currentMonth):w.config.minDate\u0026\u0026w.currentYear\u003d\u003d\u003dw.config.minDate.getFullYear()\u0026\u0026(w.currentMonth\u003dMath.max(w.config.minDate.getMonth(),w.currentMonth)),t\u0026\u0026(w.redraw(),pe(\"onYearChange\"),K())}}function X(e,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0);var t\u003dw.parseDate(e,void 0,n);if(w.config.minDate\u0026\u0026t\u0026\u0026M(t,w.config.minDate,void 0!\u003d\u003dn?n:!w.minDateHasTime)\u003c0||w.config.maxDate\u0026\u0026t\u0026\u0026M(t,w.config.maxDate,void 0!\u003d\u003dn?n:!w.maxDateHasTime)\u003e0)return!1;if(0\u003d\u003d\u003dw.config.enable.length\u0026\u00260\u003d\u003d\u003dw.config.disable.length)return!0;if(void 0\u003d\u003d\u003dt)return!1;for(var a\u003dw.config.enable.length\u003e0,i\u003da?w.config.enable:w.config.disable,o\u003d0,r\u003dvoid 0;o\u003ci.length;o++){if(\"function\"\u003d\u003dtypeof(r\u003di[o])\u0026\u0026r(t))return a;if(r instanceof Date\u0026\u0026void 0!\u003d\u003dt\u0026\u0026r.getTime()\u003d\u003d\u003dt.getTime())return a;if(\"string\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003dt){var l\u003dw.parseDate(r,void 0,!0);return l\u0026\u0026l.getTime()\u003d\u003d\u003dt.getTime()?a:!a}if(\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003dt\u0026\u0026r.from\u0026\u0026r.to\u0026\u0026t.getTime()\u003e\u003dr.from.getTime()\u0026\u0026t.getTime()\u003c\u003dr.to.getTime())return a}return!a}function ee(e){return void 0!\u003d\u003dw.daysContainer\u0026\u0026-1\u003d\u003d\u003de.className.indexOf(\"hidden\")\u0026\u0026-1\u003d\u003d\u003de.className.indexOf(\"flatpickr-disabled\")\u0026\u0026w.daysContainer.contains(e)}function ne(e){e.target!\u003d\u003dw._input||e.relatedTarget\u0026\u0026V(e.relatedTarget)||w.setDate(w._input.value,!0,e.target\u003d\u003d\u003dw.altInput?w.config.altFormat:w.config.dateFormat)}function te(e){var n\u003dg(e),t\u003dw.config.wrap?p.contains(n):n\u003d\u003d\u003dw._input,a\u003dw.config.allowInput,i\u003dw.isOpen\u0026\u0026(!a||!t),o\u003dw.config.inline\u0026\u0026t\u0026\u0026!a;if(13\u003d\u003d\u003de.keyCode\u0026\u0026t){if(a)return w.setDate(w._input.value,!0,n\u003d\u003d\u003dw.altInput?w.config.altFormat:w.config.dateFormat),n.blur();w.open()}else if(V(n)||i||o){var r\u003d!!w.timeContainer\u0026\u0026w.timeContainer.contains(n);switch(e.keyCode){case 13:r?(e.preventDefault(),T(),se()):ue(e);break;case 27:e.preventDefault(),se();break;case 8:case 46:t\u0026\u0026!w.config.allowInput\u0026\u0026(e.preventDefault(),w.clear());break;case 37:case 39:if(r||t)w.hourElement\u0026\u0026w.hourElement.focus();else if(e.preventDefault(),void 0!\u003d\u003dw.daysContainer\u0026\u0026(!1\u003d\u003d\u003da||document.activeElement\u0026\u0026ee(document.activeElement))){var l\u003d39\u003d\u003d\u003de.keyCode?1:-1;e.ctrlKey?(e.stopPropagation(),G(l),R(W(1),0)):R(void 0,l)}break;case 38:case 40:e.preventDefault();var c\u003d40\u003d\u003d\u003de.keyCode?1:-1;w.daysContainer\u0026\u0026void 0!\u003d\u003dn.$i||n\u003d\u003d\u003dw.input||n\u003d\u003d\u003dw.altInput?e.ctrlKey?(e.stopPropagation(),Q(w.currentYear-c),R(W(1),0)):r||R(void 0,7*c):n\u003d\u003d\u003dw.currentYearElement?Q(w.currentYear-c):w.config.enableTime\u0026\u0026(!r\u0026\u0026w.hourElement\u0026\u0026w.hourElement.focus(),T(e),w._debouncedChange());break;case 9:if(r){var d\u003d[w.hourElement,w.minuteElement,w.secondElement,w.amPM].concat(w.pluginElements).filter((function(e){return e})),s\u003dd.indexOf(n);if(-1!\u003d\u003ds){var u\u003dd[s+(e.shiftKey?-1:1)];e.preventDefault(),(u||w._input).focus()}}else!w.config.noCalendar\u0026\u0026w.daysContainer\u0026\u0026w.daysContainer.contains(n)\u0026\u0026e.shiftKey\u0026\u0026(e.preventDefault(),w._input.focus())}}if(void 0!\u003d\u003dw.amPM\u0026\u0026n\u003d\u003d\u003dw.amPM)switch(e.key){case w.l10n.amPM[0].charAt(0):case w.l10n.amPM[0].charAt(0).toLowerCase():w.amPM.textContent\u003dw.l10n.amPM[0],I(),be();break;case w.l10n.amPM[1].charAt(0):case w.l10n.amPM[1].charAt(0).toLowerCase():w.amPM.textContent\u003dw.l10n.amPM[1],I(),be()}(t||V(n))\u0026\u0026pe(\"onKeyDown\",e)}function ae(e){if(1\u003d\u003d\u003dw.selectedDates.length\u0026\u0026(!e||e.classList.contains(\"flatpickr-day\")\u0026\u0026!e.classList.contains(\"flatpickr-disabled\"))){for(var n\u003de?e.dateObj.getTime():w.days.firstElementChild.dateObj.getTime(),t\u003dw.parseDate(w.selectedDates[0],void 0,!0).getTime(),a\u003dMath.min(n,w.selectedDates[0].getTime()),i\u003dMath.max(n,w.selectedDates[0].getTime()),o\u003d!1,r\u003d0,l\u003d0,c\u003da;c\u003ci;c+\u003dy)X(new Date(c),!0)||(o\u003do||c\u003ea\u0026\u0026c\u003ci,c\u003ct\u0026\u0026(!r||c\u003er)?r\u003dc:c\u003et\u0026\u0026(!l||c\u003cl)\u0026\u0026(l\u003dc));for(var d\u003d0;d\u003cw.config.showMonths;d++)for(var s\u003dw.daysContainer.children[d],u\u003dfunction(a,i){var c,d,u,f\u003ds.children[a],m\u003df.dateObj.getTime(),g\u003dr\u003e0\u0026\u0026m\u003cr||l\u003e0\u0026\u0026m\u003el;return g?(f.classList.add(\"notAllowed\"),[\"inRange\",\"startRange\",\"endRange\"].forEach((function(e){f.classList.remove(e)})),\"continue\"):o\u0026\u0026!g?\"continue\":([\"startRange\",\"inRange\",\"endRange\",\"notAllowed\"].forEach((function(e){f.classList.remove(e)})),void(void 0!\u003d\u003de\u0026\u0026(e.classList.add(n\u003c\u003dw.selectedDates[0].getTime()?\"startRange\":\"endRange\"),t\u003cn\u0026\u0026m\u003d\u003d\u003dt?f.classList.add(\"startRange\"):t\u003en\u0026\u0026m\u003d\u003d\u003dt\u0026\u0026f.classList.add(\"endRange\"),m\u003e\u003dr\u0026\u0026(0\u003d\u003d\u003dl||m\u003c\u003dl)\u0026\u0026(d\u003dt,u\u003dn,(c\u003dm)\u003eMath.min(d,u)\u0026\u0026c\u003cMath.max(d,u))\u0026\u0026f.classList.add(\"inRange\"))))},f\u003d0,m\u003ds.children.length;f\u003cm;f++)u(f)}}function ie(){!w.isOpen||w.config.static||w.config.inline||ce()}function oe(e){return function(n){var t\u003dw.config[\"_\"+e+\"Date\"]\u003dw.parseDate(n,w.config.dateFormat),a\u003dw.config[\"_\"+(\"min\"\u003d\u003d\u003de?\"max\":\"min\")+\"Date\"];void 0!\u003d\u003dt\u0026\u0026(w[\"min\"\u003d\u003d\u003de?\"minDateHasTime\":\"maxDateHasTime\"]\u003dt.getHours()\u003e0||t.getMinutes()\u003e0||t.getSeconds()\u003e0),w.selectedDates\u0026\u0026(w.selectedDates\u003dw.selectedDates.filter((function(e){return X(e)})),w.selectedDates.length||\"min\"!\u003d\u003de||S(t),be()),w.daysContainer\u0026\u0026(de(),void 0!\u003d\u003dt?w.currentYearElement[e]\u003dt.getFullYear().toString():w.currentYearElement.removeAttribute(e),w.currentYearElement.disabled\u003d!!a\u0026\u0026void 0!\u003d\u003dt\u0026\u0026a.getFullYear()\u003d\u003d\u003dt.getFullYear())}}function re(){return w.config.wrap?p.querySelector(\"[data-input]\"):p}function le(){\"object\"!\u003dtypeof w.config.locale\u0026\u0026void 0\u003d\u003d\u003dk.l10ns[w.config.locale]\u0026\u0026w.config.errorHandler(new Error(\"flatpickr: invalid locale \"+w.config.locale)),w.l10n\u003de(e({},k.l10ns.default),\"object\"\u003d\u003dtypeof w.config.locale?w.config.locale:\"default\"!\u003d\u003dw.config.locale?k.l10ns[w.config.locale]:void 0),D.K\u003d\"(\"+w.l10n.amPM[0]+\"|\"+w.l10n.amPM[1]+\"|\"+w.l10n.amPM[0].toLowerCase()+\"|\"+w.l10n.amPM[1].toLowerCase()+\")\",void 0\u003d\u003d\u003de(e({},v),JSON.parse(JSON.stringify(p.dataset||{}))).time_24hr\u0026\u0026void 0\u003d\u003d\u003dk.defaultConfig.time_24hr\u0026\u0026(w.config.time_24hr\u003dw.l10n.time_24hr),w.formatDate\u003db(w),w.parseDate\u003dC({config:w.config,l10n:w.l10n})}function ce(e){if(void 0!\u003d\u003dw.calendarContainer){pe(\"onPreCalendarPosition\");var n\u003de||w._positionElement,t\u003dArray.prototype.reduce.call(w.calendarContainer.children,(function(e,n){return e+n.offsetHeight}),0),a\u003dw.calendarContainer.offsetWidth,i\u003dw.config.position.split(\" \"),o\u003di[0],r\u003di.length\u003e1?i[1]:null,l\u003dn.getBoundingClientRect(),c\u003dwindow.innerHeight-l.bottom,s\u003d\"above\"\u003d\u003d\u003do||\"below\"!\u003d\u003do\u0026\u0026c\u003ct\u0026\u0026l.top\u003et,u\u003dwindow.pageYOffset+l.top+(s?-t-2:n.offsetHeight+2);if(d(w.calendarContainer,\"arrowTop\",!s),d(w.calendarContainer,\"arrowBottom\",s),!w.config.inline){var f\u003dwindow.pageXOffset+l.left,m\u003d!1,g\u003d!1;\"center\"\u003d\u003d\u003dr?(f-\u003d(a-l.width)/2,m\u003d!0):\"right\"\u003d\u003d\u003dr\u0026\u0026(f-\u003da-l.width,g\u003d!0),d(w.calendarContainer,\"arrowLeft\",!m\u0026\u0026!g),d(w.calendarContainer,\"arrowCenter\",m),d(w.calendarContainer,\"arrowRight\",g);var p\u003dwindow.document.body.offsetWidth-(window.pageXOffset+l.right),h\u003df+a\u003ewindow.document.body.offsetWidth,v\u003dp+a\u003ewindow.document.body.offsetWidth;if(d(w.calendarContainer,\"rightMost\",h),!w.config.static)if(w.calendarContainer.style.top\u003du+\"px\",h)if(v){var D\u003dfunction(){for(var e\u003dnull,n\u003d0;n\u003cdocument.styleSheets.length;n++){var t\u003ddocument.styleSheets[n];try{t.cssRules}catch(e){continue}e\u003dt;break}return null!\u003de?e:(a\u003ddocument.createElement(\"style\"),document.head.appendChild(a),a.sheet);var a}();if(void 0\u003d\u003d\u003dD)return;var b\u003dwindow.document.body.offsetWidth,C\u003dMath.max(0,b/2-a/2),M\u003dD.cssRules.length,y\u003d\"{left:\"+l.left+\"px;right:auto;}\";d(w.calendarContainer,\"rightMost\",!1),d(w.calendarContainer,\"centerMost\",!0),D.insertRule(\".flatpickr-calendar.centerMost:before,.flatpickr-calendar.centerMost:after\"+y,M),w.calendarContainer.style.left\u003dC+\"px\",w.calendarContainer.style.right\u003d\"auto\"}else w.calendarContainer.style.left\u003d\"auto\",w.calendarContainer.style.right\u003dp+\"px\";else w.calendarContainer.style.left\u003df+\"px\",w.calendarContainer.style.right\u003d\"auto\"}}}function de(){w.config.noCalendar||w.isMobile||(K(),De(),J())}function se(){w._input.focus(),-1!\u003d\u003dwindow.navigator.userAgent.indexOf(\"MSIE\")||void 0!\u003d\u003dnavigator.msMaxTouchPoints?setTimeout(w.close,0):w.close()}function ue(e){e.preventDefault(),e.stopPropagation();var n\u003df(g(e),(function(e){return e.classList\u0026\u0026e.classList.contains(\"flatpickr-day\")\u0026\u0026!e.classList.contains(\"flatpickr-disabled\")\u0026\u0026!e.classList.contains(\"notAllowed\")}));if(void 0!\u003d\u003dn){var t\u003dn,a\u003dw.latestSelectedDateObj\u003dnew Date(t.dateObj.getTime()),i\u003d(a.getMonth()\u003cw.currentMonth||a.getMonth()\u003ew.currentMonth+w.config.showMonths-1)\u0026\u0026\"range\"!\u003d\u003dw.config.mode;if(w.selectedDateElem\u003dt,\"single\"\u003d\u003d\u003dw.config.mode)w.selectedDates\u003d[a];else if(\"multiple\"\u003d\u003d\u003dw.config.mode){var o\u003dve(a);o?w.selectedDates.splice(parseInt(o),1):w.selectedDates.push(a)}else\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026(2\u003d\u003d\u003dw.selectedDates.length\u0026\u0026w.clear(!1,!1),w.latestSelectedDateObj\u003da,w.selectedDates.push(a),0!\u003d\u003dM(a,w.selectedDates[0],!0)\u0026\u0026w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()})));if(I(),i){var r\u003dw.currentYear!\u003d\u003da.getFullYear();w.currentYear\u003da.getFullYear(),w.currentMonth\u003da.getMonth(),r\u0026\u0026(pe(\"onYearChange\"),K()),pe(\"onMonthChange\")}if(De(),J(),be(),i||\"range\"\u003d\u003d\u003dw.config.mode||1!\u003d\u003dw.config.showMonths?void 0!\u003d\u003dw.selectedDateElem\u0026\u0026void 0\u003d\u003d\u003dw.hourElement\u0026\u0026w.selectedDateElem\u0026\u0026w.selectedDateElem.focus():L(t),void 0!\u003d\u003dw.hourElement\u0026\u0026void 0!\u003d\u003dw.hourElement\u0026\u0026w.hourElement.focus(),w.config.closeOnSelect){var l\u003d\"single\"\u003d\u003d\u003dw.config.mode\u0026\u0026!w.config.enableTime,c\u003d\"range\"\u003d\u003d\u003dw.config.mode\u0026\u00262\u003d\u003d\u003dw.selectedDates.length\u0026\u0026!w.config.enableTime;(l||c)\u0026\u0026se()}A()}}w.parseDate\u003dC({config:w.config,l10n:w.l10n}),w._handlers\u003d[],w.pluginElements\u003d[],w.loadedPlugins\u003d[],w._bind\u003dN,w._setHoursFromDate\u003dS,w._positionCalendar\u003dce,w.changeMonth\u003dG,w.changeYear\u003dQ,w.clear\u003dfunction(e,n){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!0),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0),w.input.value\u003d\"\",void 0!\u003d\u003dw.altInput\u0026\u0026(w.altInput.value\u003d\"\"),void 0!\u003d\u003dw.mobileInput\u0026\u0026(w.mobileInput.value\u003d\"\"),w.selectedDates\u003d[],w.latestSelectedDateObj\u003dvoid 0,!0\u003d\u003d\u003dn\u0026\u0026(w.currentYear\u003dw._initialDate.getFullYear(),w.currentMonth\u003dw._initialDate.getMonth()),!0\u003d\u003d\u003dw.config.enableTime){var t\u003d_(),a\u003dt.hours,i\u003dt.minutes,o\u003dt.seconds;O(a,i,o)}w.redraw(),e\u0026\u0026pe(\"onChange\")},w.close\u003dfunction(){w.isOpen\u003d!1,w.isMobile||(void 0!\u003d\u003dw.calendarContainer\u0026\u0026w.calendarContainer.classList.remove(\"open\"),void 0!\u003d\u003dw._input\u0026\u0026w._input.classList.remove(\"active\")),pe(\"onClose\")},w._createElement\u003ds,w.destroy\u003dfunction(){void 0!\u003d\u003dw.config\u0026\u0026pe(\"onDestroy\");for(var e\u003dw._handlers.length;e--;){var n\u003dw._handlers[e];n.element.removeEventListener(n.event,n.handler,n.options)}if(w._handlers\u003d[],w.mobileInput)w.mobileInput.parentNode\u0026\u0026w.mobileInput.parentNode.removeChild(w.mobileInput),w.mobileInput\u003dvoid 0;else if(w.calendarContainer\u0026\u0026w.calendarContainer.parentNode)if(w.config.static\u0026\u0026w.calendarContainer.parentNode){var t\u003dw.calendarContainer.parentNode;if(t.lastChild\u0026\u0026t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else w.calendarContainer.parentNode.removeChild(w.calendarContainer);w.altInput\u0026\u0026(w.input.type\u003d\"text\",w.altInput.parentNode\u0026\u0026w.altInput.parentNode.removeChild(w.altInput),delete w.altInput),w.input\u0026\u0026(w.input.type\u003dw.input._type,w.input.classList.remove(\"flatpickr-input\"),w.input.removeAttribute(\"readonly\")),[\"_showTimeInput\",\"latestSelectedDateObj\",\"_hideNextMonthArrow\",\"_hidePrevMonthArrow\",\"__hideNextMonthArrow\",\"__hidePrevMonthArrow\",\"isMobile\",\"isOpen\",\"selectedDateElem\",\"minDateHasTime\",\"maxDateHasTime\",\"days\",\"daysContainer\",\"_input\",\"_positionElement\",\"innerContainer\",\"rContainer\",\"monthNav\",\"todayDateElem\",\"calendarContainer\",\"weekdayContainer\",\"prevMonthNav\",\"nextMonthNav\",\"monthsDropdownContainer\",\"currentMonthElement\",\"currentYearElement\",\"navigationCurrentMonth\",\"selectedDateElem\",\"config\"].forEach((function(e){try{delete w[e]}catch(e){}}))},w.isEnabled\u003dX,w.jumpToDate\u003dP,w.open\u003dfunction(e,n){if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dw._positionElement),!0\u003d\u003d\u003dw.isMobile){if(e){e.preventDefault();var t\u003dg(e);t\u0026\u0026t.blur()}return void 0!\u003d\u003dw.mobileInput\u0026\u0026(w.mobileInput.focus(),w.mobileInput.click()),void pe(\"onOpen\")}if(!w._input.disabled\u0026\u0026!w.config.inline){var a\u003dw.isOpen;w.isOpen\u003d!0,a||(w.calendarContainer.classList.add(\"open\"),w._input.classList.add(\"active\"),pe(\"onOpen\"),ce(n)),!0\u003d\u003d\u003dw.config.enableTime\u0026\u0026!0\u003d\u003d\u003dw.config.noCalendar\u0026\u0026(!1!\u003d\u003dw.config.allowInput||void 0!\u003d\u003de\u0026\u0026w.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return w.hourElement.select()}),50))}},w.redraw\u003dde,w.set\u003dfunction(e,n){if(null!\u003d\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e)for(var a in Object.assign(w.config,e),e)void 0!\u003d\u003dfe[a]\u0026\u0026fe[a].forEach((function(e){return e()}));else w.config[e]\u003dn,void 0!\u003d\u003dfe[e]?fe[e].forEach((function(e){return e()})):t.indexOf(e)\u003e-1\u0026\u0026(w.config[e]\u003dc(n));w.redraw(),be(!0)},w.setDate\u003dfunction(e,n,t){if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!1),void 0\u003d\u003d\u003dt\u0026\u0026(t\u003dw.config.dateFormat),0!\u003d\u003de\u0026\u0026!e||e instanceof Array\u0026\u00260\u003d\u003d\u003de.length)return w.clear(n);me(e,t),w.latestSelectedDateObj\u003dw.selectedDates[w.selectedDates.length-1],w.redraw(),P(void 0,n),S(),0\u003d\u003d\u003dw.selectedDates.length\u0026\u0026w.clear(!1),be(n),n\u0026\u0026pe(\"onChange\")},w.toggle\u003dfunction(e){if(!0\u003d\u003d\u003dw.isOpen)return w.close();w.open(e)};var fe\u003d{locale:[le,z],showMonths:[q,E,$],minDate:[P],maxDate:[P]};function me(e,n){var t\u003d[];if(e instanceof Array)t\u003de.map((function(e){return w.parseDate(e,n)}));else if(e instanceof Date||\"number\"\u003d\u003dtypeof e)t\u003d[w.parseDate(e,n)];else if(\"string\"\u003d\u003dtypeof e)switch(w.config.mode){case\"single\":case\"time\":t\u003d[w.parseDate(e,n)];break;case\"multiple\":t\u003de.split(w.config.conjunction).map((function(e){return w.parseDate(e,n)}));break;case\"range\":t\u003de.split(w.l10n.rangeSeparator).map((function(e){return w.parseDate(e,n)}))}else w.config.errorHandler(new Error(\"Invalid date supplied: \"+JSON.stringify(e)));w.selectedDates\u003dw.config.allowInvalidPreload?t:t.filter((function(e){return e instanceof Date\u0026\u0026X(e,!1)})),\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026w.selectedDates.sort((function(e,n){return e.getTime()-n.getTime()}))}function ge(e){return e.slice().map((function(e){return\"string\"\u003d\u003dtypeof e||\"number\"\u003d\u003dtypeof e||e instanceof Date?w.parseDate(e,void 0,!0):e\u0026\u0026\"object\"\u003d\u003dtypeof e\u0026\u0026e.from\u0026\u0026e.to?{from:w.parseDate(e.from,void 0),to:w.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function pe(e,n){if(void 0!\u003d\u003dw.config){var t\u003dw.config[e];if(void 0!\u003d\u003dt\u0026\u0026t.length\u003e0)for(var a\u003d0;t[a]\u0026\u0026a\u003ct.length;a++)t[a](w.selectedDates,w.input.value,w,n);\"onChange\"\u003d\u003d\u003de\u0026\u0026(w.input.dispatchEvent(he(\"change\")),w.input.dispatchEvent(he(\"input\")))}}function he(e){var n\u003ddocument.createEvent(\"Event\");return n.initEvent(e,!0,!0),n}function ve(e){for(var n\u003d0;n\u003cw.selectedDates.length;n++)if(0\u003d\u003d\u003dM(w.selectedDates[n],e))return\"\"+n;return!1}function De(){w.config.noCalendar||w.isMobile||!w.monthNav||(w.yearElements.forEach((function(e,n){var t\u003dnew Date(w.currentYear,w.currentMonth,1);t.setMonth(w.currentMonth+n),w.config.showMonths\u003e1||\"static\"\u003d\u003d\u003dw.config.monthSelectorType?w.monthElements[n].textContent\u003dh(t.getMonth(),w.config.shorthandCurrentMonth,w.l10n)+\" \":w.monthsDropdownContainer.value\u003dt.getMonth().toString(),e.value\u003dt.getFullYear().toString()})),w._hidePrevMonthArrow\u003dvoid 0!\u003d\u003dw.config.minDate\u0026\u0026(w.currentYear\u003d\u003d\u003dw.config.minDate.getFullYear()?w.currentMonth\u003c\u003dw.config.minDate.getMonth():w.currentYear\u003cw.config.minDate.getFullYear()),w._hideNextMonthArrow\u003dvoid 0!\u003d\u003dw.config.maxDate\u0026\u0026(w.currentYear\u003d\u003d\u003dw.config.maxDate.getFullYear()?w.currentMonth+1\u003ew.config.maxDate.getMonth():w.currentYear\u003ew.config.maxDate.getFullYear()))}function we(e){return w.selectedDates.map((function(n){return w.formatDate(n,e)})).filter((function(e,n,t){return\"range\"!\u003d\u003dw.config.mode||w.config.enableTime||t.indexOf(e)\u003d\u003d\u003dn})).join(\"range\"!\u003d\u003dw.config.mode?w.config.conjunction:w.l10n.rangeSeparator)}function be(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!0),void 0!\u003d\u003dw.mobileInput\u0026\u0026w.mobileFormatStr\u0026\u0026(w.mobileInput.value\u003dvoid 0!\u003d\u003dw.latestSelectedDateObj?w.formatDate(w.latestSelectedDateObj,w.mobileFormatStr):\"\"),w.input.value\u003dwe(w.config.dateFormat),void 0!\u003d\u003dw.altInput\u0026\u0026(w.altInput.value\u003dwe(w.config.altFormat)),!1!\u003d\u003de\u0026\u0026pe(\"onValueUpdate\")}function Ce(e){var n\u003dg(e),t\u003dw.prevMonthNav.contains(n),a\u003dw.nextMonthNav.contains(n);t||a?G(t?-1:1):w.yearElements.indexOf(n)\u003e\u003d0?n.select():n.classList.contains(\"arrowUp\")?w.changeYear(w.currentYear+1):n.classList.contains(\"arrowDown\")\u0026\u0026w.changeYear(w.currentYear-1)}return function(){w.element\u003dw.input\u003dp,w.isOpen\u003d!1,function(){var n\u003d[\"wrap\",\"weekNumbers\",\"allowInput\",\"allowInvalidPreload\",\"clickOpens\",\"time_24hr\",\"enableTime\",\"noCalendar\",\"altInput\",\"shorthandCurrentMonth\",\"inline\",\"static\",\"enableSeconds\",\"disableMobile\"],i\u003de(e({},JSON.parse(JSON.stringify(p.dataset||{}))),v),o\u003d{};w.config.parseDate\u003di.parseDate,w.config.formatDate\u003di.formatDate,Object.defineProperty(w.config,\"enable\",{get:function(){return w.config._enable},set:function(e){w.config._enable\u003dge(e)}}),Object.defineProperty(w.config,\"disable\",{get:function(){return w.config._disable},set:function(e){w.config._disable\u003dge(e)}});var r\u003d\"time\"\u003d\u003d\u003di.mode;if(!i.dateFormat\u0026\u0026(i.enableTime||r)){var l\u003dk.defaultConfig.dateFormat||a.dateFormat;o.dateFormat\u003di.noCalendar||r?\"H:i\"+(i.enableSeconds?\":S\":\"\"):l+\" H:i\"+(i.enableSeconds?\":S\":\"\")}if(i.altInput\u0026\u0026(i.enableTime||r)\u0026\u0026!i.altFormat){var d\u003dk.defaultConfig.altFormat||a.altFormat;o.altFormat\u003di.noCalendar||r?\"h:i\"+(i.enableSeconds?\":S K\":\" K\"):d+\" h:i\"+(i.enableSeconds?\":S\":\"\")+\" K\"}Object.defineProperty(w.config,\"minDate\",{get:function(){return w.config._minDate},set:oe(\"min\")}),Object.defineProperty(w.config,\"maxDate\",{get:function(){return w.config._maxDate},set:oe(\"max\")});var s\u003dfunction(e){return function(n){w.config[\"min\"\u003d\u003d\u003de?\"_minTime\":\"_maxTime\"]\u003dw.parseDate(n,\"H:i:S\")}};Object.defineProperty(w.config,\"minTime\",{get:function(){return w.config._minTime},set:s(\"min\")}),Object.defineProperty(w.config,\"maxTime\",{get:function(){return w.config._maxTime},set:s(\"max\")}),\"time\"\u003d\u003d\u003di.mode\u0026\u0026(w.config.noCalendar\u003d!0,w.config.enableTime\u003d!0),Object.assign(w.config,o,i);for(var u\u003d0;u\u003cn.length;u++)w.config[n[u]]\u003d!0\u003d\u003d\u003dw.config[n[u]]||\"true\"\u003d\u003d\u003dw.config[n[u]];for(t.filter((function(e){return void 0!\u003d\u003dw.config[e]})).forEach((function(e){w.config[e]\u003dc(w.config[e]||[]).map(x)})),w.isMobile\u003d!w.config.disableMobile\u0026\u0026!w.config.inline\u0026\u0026\"single\"\u003d\u003d\u003dw.config.mode\u0026\u0026!w.config.disable.length\u0026\u0026!w.config.enable.length\u0026\u0026!w.config.weekNumbers\u0026\u0026/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),u\u003d0;u\u003cw.config.plugins.length;u++){var f\u003dw.config.plugins[u](w)||{};for(var m in f)t.indexOf(m)\u003e-1?w.config[m]\u003dc(f[m]).map(x).concat(w.config[m]):void 0\u003d\u003d\u003di[m]\u0026\u0026(w.config[m]\u003df[m])}i.altInputClass||(w.config.altInputClass\u003dre().className+\" \"+w.config.altInputClass),pe(\"onParseConfig\")}(),le(),w.input\u003dre(),w.input?(w.input._type\u003dw.input.type,w.input.type\u003d\"text\",w.input.classList.add(\"flatpickr-input\"),w._input\u003dw.input,w.config.altInput\u0026\u0026(w.altInput\u003ds(w.input.nodeName,w.config.altInputClass),w._input\u003dw.altInput,w.altInput.placeholder\u003dw.input.placeholder,w.altInput.disabled\u003dw.input.disabled,w.altInput.required\u003dw.input.required,w.altInput.tabIndex\u003dw.input.tabIndex,w.altInput.type\u003d\"text\",w.input.setAttribute(\"type\",\"hidden\"),!w.config.static\u0026\u0026w.input.parentNode\u0026\u0026w.input.parentNode.insertBefore(w.altInput,w.input.nextSibling)),w.config.allowInput||w._input.setAttribute(\"readonly\",\"readonly\"),w._positionElement\u003dw.config.positionElement||w._input):w.config.errorHandler(new Error(\"Invalid input element specified\")),function(){w.selectedDates\u003d[],w.now\u003dw.parseDate(w.config.now)||new Date;var e\u003dw.config.defaultDate||(\"INPUT\"!\u003d\u003dw.input.nodeName\u0026\u0026\"TEXTAREA\"!\u003d\u003dw.input.nodeName||!w.input.placeholder||w.input.value!\u003d\u003dw.input.placeholder?w.input.value:null);e\u0026\u0026me(e,w.config.dateFormat),w._initialDate\u003dw.selectedDates.length\u003e0?w.selectedDates[0]:w.config.minDate\u0026\u0026w.config.minDate.getTime()\u003ew.now.getTime()?w.config.minDate:w.config.maxDate\u0026\u0026w.config.maxDate.getTime()\u003cw.now.getTime()?w.config.maxDate:w.now,w.currentYear\u003dw._initialDate.getFullYear(),w.currentMonth\u003dw._initialDate.getMonth(),w.selectedDates.length\u003e0\u0026\u0026(w.latestSelectedDateObj\u003dw.selectedDates[0]),void 0!\u003d\u003dw.config.minTime\u0026\u0026(w.config.minTime\u003dw.parseDate(w.config.minTime,\"H:i\")),void 0!\u003d\u003dw.config.maxTime\u0026\u0026(w.config.maxTime\u003dw.parseDate(w.config.maxTime,\"H:i\")),w.minDateHasTime\u003d!!w.config.minDate\u0026\u0026(w.config.minDate.getHours()\u003e0||w.config.minDate.getMinutes()\u003e0||w.config.minDate.getSeconds()\u003e0),w.maxDateHasTime\u003d!!w.config.maxDate\u0026\u0026(w.config.maxDate.getHours()\u003e0||w.config.maxDate.getMinutes()\u003e0||w.config.maxDate.getSeconds()\u003e0)}(),w.utils\u003d{getDaysInMonth:function(e,n){return void 0\u003d\u003d\u003de\u0026\u0026(e\u003dw.currentMonth),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dw.currentYear),1\u003d\u003d\u003de\u0026\u0026(n%4\u003d\u003d0\u0026\u0026n%100!\u003d0||n%400\u003d\u003d0)?29:w.l10n.daysInMonth[e]}},w.isMobile||function(){var e\u003dwindow.document.createDocumentFragment();if(w.calendarContainer\u003ds(\"div\",\"flatpickr-calendar\"),w.calendarContainer.tabIndex\u003d-1,!w.config.noCalendar){if(e.appendChild((w.monthNav\u003ds(\"div\",\"flatpickr-months\"),w.yearElements\u003d[],w.monthElements\u003d[],w.prevMonthNav\u003ds(\"span\",\"flatpickr-prev-month\"),w.prevMonthNav.innerHTML\u003dw.config.prevArrow,w.nextMonthNav\u003ds(\"span\",\"flatpickr-next-month\"),w.nextMonthNav.innerHTML\u003dw.config.nextArrow,q(),Object.defineProperty(w,\"_hidePrevMonthArrow\",{get:function(){return w.__hidePrevMonthArrow},set:function(e){w.__hidePrevMonthArrow!\u003d\u003de\u0026\u0026(d(w.prevMonthNav,\"flatpickr-disabled\",e),w.__hidePrevMonthArrow\u003de)}}),Object.defineProperty(w,\"_hideNextMonthArrow\",{get:function(){return w.__hideNextMonthArrow},set:function(e){w.__hideNextMonthArrow!\u003d\u003de\u0026\u0026(d(w.nextMonthNav,\"flatpickr-disabled\",e),w.__hideNextMonthArrow\u003de)}}),w.currentYearElement\u003dw.yearElements[0],De(),w.monthNav)),w.innerContainer\u003ds(\"div\",\"flatpickr-innerContainer\"),w.config.weekNumbers){var n\u003dfunction(){w.calendarContainer.classList.add(\"hasWeeks\");var e\u003ds(\"div\",\"flatpickr-weekwrapper\");e.appendChild(s(\"span\",\"flatpickr-weekday\",w.l10n.weekAbbreviation));var n\u003ds(\"div\",\"flatpickr-weeks\");return e.appendChild(n),{weekWrapper:e,weekNumbers:n}}(),t\u003dn.weekWrapper,a\u003dn.weekNumbers;w.innerContainer.appendChild(t),w.weekNumbers\u003da,w.weekWrapper\u003dt}w.rContainer\u003ds(\"div\",\"flatpickr-rContainer\"),w.rContainer.appendChild($()),w.daysContainer||(w.daysContainer\u003ds(\"div\",\"flatpickr-days\"),w.daysContainer.tabIndex\u003d-1),J(),w.rContainer.appendChild(w.daysContainer),w.innerContainer.appendChild(w.rContainer),e.appendChild(w.innerContainer)}w.config.enableTime\u0026\u0026e.appendChild(function(){w.calendarContainer.classList.add(\"hasTime\"),w.config.noCalendar\u0026\u0026w.calendarContainer.classList.add(\"noCalendar\"),w.timeContainer\u003ds(\"div\",\"flatpickr-time\"),w.timeContainer.tabIndex\u003d-1;var e\u003ds(\"span\",\"flatpickr-time-separator\",\":\"),n\u003dm(\"flatpickr-hour\",{\"aria-label\":w.l10n.hourAriaLabel});w.hourElement\u003dn.getElementsByTagName(\"input\")[0];var t\u003dm(\"flatpickr-minute\",{\"aria-label\":w.l10n.minuteAriaLabel});if(w.minuteElement\u003dt.getElementsByTagName(\"input\")[0],w.hourElement.tabIndex\u003dw.minuteElement.tabIndex\u003d-1,w.hourElement.value\u003do(w.latestSelectedDateObj?w.latestSelectedDateObj.getHours():w.config.time_24hr?w.config.defaultHour:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(w.config.defaultHour)),w.minuteElement.value\u003do(w.latestSelectedDateObj?w.latestSelectedDateObj.getMinutes():w.config.defaultMinute),w.hourElement.setAttribute(\"step\",w.config.hourIncrement.toString()),w.minuteElement.setAttribute(\"step\",w.config.minuteIncrement.toString()),w.hourElement.setAttribute(\"min\",w.config.time_24hr?\"0\":\"1\"),w.hourElement.setAttribute(\"max\",w.config.time_24hr?\"23\":\"12\"),w.minuteElement.setAttribute(\"min\",\"0\"),w.minuteElement.setAttribute(\"max\",\"59\"),w.timeContainer.appendChild(n),w.timeContainer.appendChild(e),w.timeContainer.appendChild(t),w.config.time_24hr\u0026\u0026w.timeContainer.classList.add(\"time24hr\"),w.config.enableSeconds){w.timeContainer.classList.add(\"hasSeconds\");var a\u003dm(\"flatpickr-second\");w.secondElement\u003da.getElementsByTagName(\"input\")[0],w.secondElement.value\u003do(w.latestSelectedDateObj?w.latestSelectedDateObj.getSeconds():w.config.defaultSeconds),w.secondElement.setAttribute(\"step\",w.minuteElement.getAttribute(\"step\")),w.secondElement.setAttribute(\"min\",\"0\"),w.secondElement.setAttribute(\"max\",\"59\"),w.timeContainer.appendChild(s(\"span\",\"flatpickr-time-separator\",\":\")),w.timeContainer.appendChild(a)}return w.config.time_24hr||(w.amPM\u003ds(\"span\",\"flatpickr-am-pm\",w.l10n.amPM[r((w.latestSelectedDateObj?w.hourElement.value:w.config.defaultHour)\u003e11)]),w.amPM.title\u003dw.l10n.toggleTitle,w.amPM.tabIndex\u003d-1,w.timeContainer.appendChild(w.amPM)),w.timeContainer}()),d(w.calendarContainer,\"rangeMode\",\"range\"\u003d\u003d\u003dw.config.mode),d(w.calendarContainer,\"animate\",!0\u003d\u003d\u003dw.config.animate),d(w.calendarContainer,\"multiMonth\",w.config.showMonths\u003e1),w.calendarContainer.appendChild(e);var i\u003dvoid 0!\u003d\u003dw.config.appendTo\u0026\u0026void 0!\u003d\u003dw.config.appendTo.nodeType;if((w.config.inline||w.config.static)\u0026\u0026(w.calendarContainer.classList.add(w.config.inline?\"inline\":\"static\"),w.config.inline\u0026\u0026(!i\u0026\u0026w.element.parentNode?w.element.parentNode.insertBefore(w.calendarContainer,w._input.nextSibling):void 0!\u003d\u003dw.config.appendTo\u0026\u0026w.config.appendTo.appendChild(w.calendarContainer)),w.config.static)){var l\u003ds(\"div\",\"flatpickr-wrapper\");w.element.parentNode\u0026\u0026w.element.parentNode.insertBefore(l,w.element),l.appendChild(w.element),w.altInput\u0026\u0026l.appendChild(w.altInput),l.appendChild(w.calendarContainer)}w.config.static||w.config.inline||(void 0!\u003d\u003dw.config.appendTo?w.config.appendTo:window.document.body).appendChild(w.calendarContainer)}(),function(){if(w.config.wrap\u0026\u0026[\"open\",\"close\",\"toggle\",\"clear\"].forEach((function(e){Array.prototype.forEach.call(w.element.querySelectorAll(\"[data-\"+e+\"]\"),(function(n){return N(n,\"click\",w[e])}))})),w.isMobile)!function(){var e\u003dw.config.enableTime?w.config.noCalendar?\"time\":\"datetime-local\":\"date\";w.mobileInput\u003ds(\"input\",w.input.className+\" flatpickr-mobile\"),w.mobileInput.tabIndex\u003d1,w.mobileInput.type\u003de,w.mobileInput.disabled\u003dw.input.disabled,w.mobileInput.required\u003dw.input.required,w.mobileInput.placeholder\u003dw.input.placeholder,w.mobileFormatStr\u003d\"datetime-local\"\u003d\u003d\u003de?\"Y-m-d\\\\TH:i:S\":\"date\"\u003d\u003d\u003de?\"Y-m-d\":\"H:i:S\",w.selectedDates.length\u003e0\u0026\u0026(w.mobileInput.defaultValue\u003dw.mobileInput.value\u003dw.formatDate(w.selectedDates[0],w.mobileFormatStr)),w.config.minDate\u0026\u0026(w.mobileInput.min\u003dw.formatDate(w.config.minDate,\"Y-m-d\")),w.config.maxDate\u0026\u0026(w.mobileInput.max\u003dw.formatDate(w.config.maxDate,\"Y-m-d\")),w.input.getAttribute(\"step\")\u0026\u0026(w.mobileInput.step\u003dString(w.input.getAttribute(\"step\"))),w.input.type\u003d\"hidden\",void 0!\u003d\u003dw.altInput\u0026\u0026(w.altInput.type\u003d\"hidden\");try{w.input.parentNode\u0026\u0026w.input.parentNode.insertBefore(w.mobileInput,w.input.nextSibling)}catch(e){}N(w.mobileInput,\"change\",(function(e){w.setDate(g(e).value,!1,w.mobileFormatStr),pe(\"onChange\"),pe(\"onClose\")}))}();else{var e\u003dl(ie,50);if(w._debouncedChange\u003dl(A,300),w.daysContainer\u0026\u0026!/iPhone|iPad|iPod/i.test(navigator.userAgent)\u0026\u0026N(w.daysContainer,\"mouseover\",(function(e){\"range\"\u003d\u003d\u003dw.config.mode\u0026\u0026ae(g(e))})),N(window.document.body,\"keydown\",te),w.config.inline||w.config.static||N(window,\"resize\",e),void 0!\u003d\u003dwindow.ontouchstart?N(window.document,\"touchstart\",Z):N(window.document,\"click\",Z),N(window.document,\"focus\",Z,{capture:!0}),!0\u003d\u003d\u003dw.config.clickOpens\u0026\u0026(N(w._input,\"focus\",w.open),N(w._input,\"click\",w.open)),void 0!\u003d\u003dw.daysContainer\u0026\u0026(N(w.monthNav,\"click\",Ce),N(w.monthNav,[\"keyup\",\"increment\"],F),N(w.daysContainer,\"click\",ue)),void 0!\u003d\u003dw.timeContainer\u0026\u0026void 0!\u003d\u003dw.minuteElement\u0026\u0026void 0!\u003d\u003dw.hourElement){var n\u003dfunction(e){return g(e).select()};N(w.timeContainer,[\"increment\"],T),N(w.timeContainer,\"blur\",T,{capture:!0}),N(w.timeContainer,\"click\",Y),N([w.hourElement,w.minuteElement],[\"focus\",\"click\"],n),void 0!\u003d\u003dw.secondElement\u0026\u0026N(w.secondElement,\"focus\",(function(){return w.secondElement\u0026\u0026w.secondElement.select()})),void 0!\u003d\u003dw.amPM\u0026\u0026N(w.amPM,\"click\",(function(e){T(e),A()}))}w.config.allowInput\u0026\u0026N(w._input,\"blur\",ne)}}(),(w.selectedDates.length||w.config.noCalendar)\u0026\u0026(w.config.enableTime\u0026\u0026S(w.config.noCalendar?w.latestSelectedDateObj||w.config.minDate:void 0),be(!1)),E();var n\u003d/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!w.isMobile\u0026\u0026n\u0026\u0026ce(),pe(\"onReady\")}(),w}function E(e,n){for(var t\u003dArray.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),a\u003d[],i\u003d0;i\u003ct.length;i++){var o\u003dt[i];try{if(null!\u003d\u003do.getAttribute(\"data-fp-omit\"))continue;void 0!\u003d\u003do._flatpickr\u0026\u0026(o._flatpickr.destroy(),o._flatpickr\u003dvoid 0),o._flatpickr\u003dx(o,n||{}),a.push(o._flatpickr)}catch(e){console.error(e)}}return 1\u003d\u003d\u003da.length?a[0]:a}\"function\"!\u003dtypeof Object.assign\u0026\u0026(Object.assign\u003dfunction(e){for(var n\u003d[],t\u003d1;t\u003carguments.length;t++)n[t-1]\u003darguments[t];if(!e)throw TypeError(\"Cannot convert undefined or null to object\");for(var a\u003dfunction(n){n\u0026\u0026Object.keys(n).forEach((function(t){return e[t]\u003dn[t]}))},i\u003d0,o\u003dn;i\u003co.length;i++){var r\u003do[i];a(r)}return e}),\"undefined\"!\u003dtypeof HTMLElement\u0026\u0026\"undefined\"!\u003dtypeof HTMLCollection\u0026\u0026\"undefined\"!\u003dtypeof NodeList\u0026\u0026(HTMLCollection.prototype.flatpickr\u003dNodeList.prototype.flatpickr\u003dfunction(e){return E(this,e)},HTMLElement.prototype.flatpickr\u003dfunction(e){return E([this],e)});var k\u003dfunction(e,n){return\"string\"\u003d\u003dtypeof e?E(window.document.querySelectorAll(e),n):e instanceof Node?E([e],n):E(e,n)};return k.defaultConfig\u003d{},k.l10ns\u003d{en:e({},i),default:e({},i)},k.localize\u003dfunction(n){k.l10ns.default\u003de(e({},k.l10ns.default),n)},k.setDefaults\u003dfunction(n){k.defaultConfig\u003de(e({},k.defaultConfig),n)},k.parseDate\u003dC({}),k.formatDate\u003db({}),k.compareDates\u003dM,\"undefined\"!\u003dtypeof jQuery\u0026\u0026void 0!\u003d\u003djQuery.fn\u0026\u0026(jQuery.fn.flatpickr\u003dfunction(e){return E(this,e)}),Date.prototype.fp_incr\u003dfunction(e){return new Date(this.getFullYear(),this.getMonth(),this.getDate()+(\"string\"\u003d\u003dtypeof e?parseInt(e,10):e))},\"undefined\"!\u003dtypeof window\u0026\u0026(window.flatpickr\u003dk),k},\"object\"\u003d\u003dtypeof t\u0026\u0026void 0!\u003d\u003dn?n.exports\u003dr():\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd?define(r):(o\u003do||self).flatpickr\u003dr()},\n      \"df2378664f\": function _(e,t,o,i,a){i();const n\u003de(\"tslib\"),s\u003de(\"@bokehjs/core/dom\"),c\u003de(\"@bokehjs/models/layouts/html_box\"),r\u003de(\"@bokehjs/models/sources/column_data_source\"),d\u003de(\"f1971f81bf\"),l\u003de(\"4c755983eb\"),_\u003de(\"6e04fbe567\"),h\u003dn.__importDefault(e(\"093eb75864\"));function p(){const e\u003d{},t\u003dwindow.deck,o\u003dObject.keys(t).filter((e\u003d\u003ee.charAt(0)\u003d\u003d\u003de.charAt(0).toUpperCase()));for(const i of o)e[i]\u003dt[i];return e}class u extends l.PanelHTMLBoxView{connect_signals(){super.connect_signals();const{data:e,mapbox_api_key:t,tooltip:o,layers:i,initialViewState:a,data_sources:n}\u003dthis.model.properties;this.on_change([t,o],(()\u003d\u003ethis.render())),this.on_change([e,a],(()\u003d\u003ethis.updateDeck())),this.on_change([i],(()\u003d\u003ethis._update_layers())),this.on_change([n],(()\u003d\u003ethis._connect_sources(!0))),this._layer_map\u003d{},this._connected\u003d[],this._connect_sources()}_update_layers(){this._layer_map\u003d{},this._update_data(!0)}_connect_sources(e\u003d!1){for(const e of this.model.data_sources)this._connected.indexOf(e)\u003c0\u0026\u0026(this.connect(e.properties.data.change,(()\u003d\u003ethis._update_data(!0))),this._connected.push(e));this._update_data(e)}initialize(){if(super.initialize(),window.deck.JSONConverter){const{CSVLoader:e,Tile3DLoader:t}\u003dwindow.loaders;window.loaders.registerLoaders([t,e]);const o\u003d{classes:p(),enumerations:{COORDINATE_SYSTEM:window.deck.COORDINATE_SYSTEM,GL:h.default},constants:{Tile3DLoader:t}};this.jsonConverter\u003dnew window.deck.JSONConverter({configuration:o})}}_update_data(e\u003d!0){let t\u003d0;for(const e of this.model.layers){let o;if(t+\u003d1,t-1 in this._layer_map)o\u003dthis.model.data_sources[this._layer_map[t-1]];else{if(\"number\"!\u003dtypeof e.data)continue;this._layer_map[t-1]\u003de.data,o\u003dthis.model.data_sources[e.data]}e.data\u003dd.transform_cds_to_records(o)}e\u0026\u0026this.updateDeck()}_on_click_event(e){const t\u003d{coordinate:e.coordinate,lngLat:e.lngLat,index:e.index};this.model.clickState\u003dt}_on_hover_event(e){if(null\u003d\u003de.coordinate)return;const t\u003d{coordinate:e.coordinate,lngLat:e.lngLat,index:e.index};this.model.hoverState\u003dt}_on_viewState_event(e){this.model.viewState\u003de.viewState}getData(){return Object.assign(Object.assign({},this.model.data),{layers:this.model.layers,initialViewState:this.model.initialViewState,onViewStateChange:e\u003d\u003ethis._on_viewState_event(e),onClick:e\u003d\u003ethis._on_click_event(e),onHover:e\u003d\u003ethis._on_hover_event(e)})}updateDeck(){if(!this.deckGL)return void this.render();const e\u003dthis.getData();if(window.deck.updateDeck)window.deck.updateDeck(e,this.deckGL);else{const t\u003dthis.jsonConverter.convert(e);this.deckGL.setProps(t)}}createDeck({mapboxApiKey:e,container:t,jsonInput:o,tooltip:i}){let a;try{const n\u003dthis.jsonConverter.convert(o),s\u003d_.makeTooltip(i,n.layers);a\u003dnew window.deck.DeckGL(Object.assign(Object.assign({},n),{map:window.mapboxgl,mapboxApiAccessToken:e,container:t,getTooltip:s}))}catch(e){console.error(e)}return a}render(){super.render();const e\u003ds.div({class:\"deckgl\"});l.set_size(e,this.model);const t\u003dthis.model.mapbox_api_key,o\u003dthis.model.tooltip,i\u003dthis.getData();window.deck.createDeck?this.deckGL\u003dwindow.deck.createDeck({mapboxApiKey:t,container:e,jsonInput:i,tooltip:o}):this.deckGL\u003dthis.createDeck({mapboxApiKey:t,container:e,jsonInput:i,tooltip:o}),this.el.appendChild(e)}}o.DeckGLPlotView\u003du,u.__name__\u003d\"DeckGLPlotView\";class k extends c.HTMLBox{constructor(e){super(e)}static init_DeckGLPlot(){this.prototype.default_view\u003du,this.define((({Any:e,Array:t,String:o,Ref:i})\u003d\u003e({data:[e],data_sources:[t(i(r.ColumnDataSource)),[]],clickState:[e,{}],hoverState:[e,{}],initialViewState:[e,{}],layers:[t(e),[]],mapbox_api_key:[o,\"\"],tooltip:[e,{}],viewState:[e,{}]}))),this.override({height:400,width:600})}}o.DeckGLPlot\u003dk,k.__name__\u003d\"DeckGLPlot\",k.__module__\u003d\"panel.models.deckgl\",k.init_DeckGLPlot()},\n      \"6e04fbe567\": function _(t,e,n,i,l){\n      /*\n          This file was adapted from https://github.com/uber/deck.gl/ the LICENSE\n          below is preserved to comply with the original license.\n          \n          Copyright (c) 2015 - 2017 Uber Technologies, Inc.\n          \n          Permission is hereby granted, free of charge, to any person obtaining a copy\n          of this software and associated documentation files (the \"Software\"), to deal\n          in the Software without restriction, including without limitation the rights\n          to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n          copies of the Software, and to permit persons to whom the Software is\n          furnished to do so, subject to the following conditions:\n          \n          The above copyright notice and this permission notice shall be included in\n          all copies or substantial portions of the Software.\n          \n          THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n          IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n          FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n          AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n          LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n          OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n          THE SOFTWARE.\n          */\n      let o,r;i();const c\u003d{fontFamily:\u0027\"Helvetica Neue\", Helvetica, Arial, sans-serif\u0027,display:\"flex\",flex:\"wrap\",maxWidth:\"500px\",flexDirection:\"column\",zIndex:2};function s(){return document.createElement(\"div\")}function a(t){if(!t.picked)return null;if(t.object\u003d\u003d\u003do)return r;const e\u003d{html:u(t.object),style:c};return r\u003de,o\u003dt.object,e}n.getTooltipDefault\u003da;const f\u003dnew Set([\"position\",\"index\"]);function u(t){const e\u003ds();for(const n in t){if(f.has(n))continue;const i\u003ds();i.className\u003d\"header\",i.textContent\u003dn;const l\u003ds();l.className\u003d\"value\",l.textContent\u003dh(t[n]);const o\u003ds();p(o,i,l),o.appendChild(i),o.appendChild(l),e.appendChild(o)}return e.innerHTML}function p(t,e,n){Object.assign(e.style,{fontWeight:700,marginRight:\"10px\",flex:\"1 1 0%\"}),Object.assign(n.style,{flex:\"none\",maxWidth:\"250px\",overflow:\"hidden\",whiteSpace:\"nowrap\",textOverflow:\"ellipsis\"}),Object.assign(t.style,{display:\"flex\",flexDirection:\"row\",justifyContent:\"space-between\",alignItems:\"stretch\"})}function h(t){let e;if(Array.isArray(t)\u0026\u0026t.length\u003e4)e\u003d`Array\u003c${t.length}\u003e`;else if(\"string\"\u003d\u003dtypeof t)e\u003dt;else if(\"number\"\u003d\u003dtypeof t)e\u003dString(t);else try{e\u003dJSON.stringify(t)}catch(t){e\u003d\"\u003cNon-Serializable Object\u003e\"}return e.length\u003e50\u0026\u0026(e\u003de.slice(0,50)),e}function d(t,e){let n\u003dt;for(const t in e){if(\"object\"\u003d\u003dtypeof e[t])for(const i in e[t])n\u003dn.replace(`{${t}.${i}}`,e[t][i]);n\u003dn.replace(`{${t}}`,e[t])}return n}n.tabularize\u003du,n.toText\u003dh,n.substituteIn\u003dd,n.makeTooltip\u003dfunction(t,e){if(!t)return null;let n\u003d!1;const i\u003d{};for(let l\u003d0;l\u003ce.length;l++){const o\u003de[l].id;\"boolean\"!\u003dtypeof t\u0026\u0026(l.toString()in t||o in t)\u0026\u0026(i[o]\u003do in t?t[o]:t[l.toString()],n\u003d!0)}return t.html||t.text||n?e\u003d\u003e{if(!e.picked)return null;const l\u003dn?i[e.layer.id]:t;if(null\u003d\u003dl)return;if(\"boolean\"\u003d\u003dtypeof l)return l?a(e):null;const o\u003d{style:l.style||c};return l.html?o.html\u003dd(l.html,e.object):o.text\u003dd(l.text,e.object),o}:a}},\n      \"093eb75864\": function _(E,_,R,T,A){_.exports\u003d{DEPTH_BUFFER_BIT:256,STENCIL_BUFFER_BIT:1024,COLOR_BUFFER_BIT:16384,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,ZERO:0,ONE:1,SRC_COLOR:768,ONE_MINUS_SRC_COLOR:769,SRC_ALPHA:770,ONE_MINUS_SRC_ALPHA:771,DST_ALPHA:772,ONE_MINUS_DST_ALPHA:773,DST_COLOR:774,ONE_MINUS_DST_COLOR:775,SRC_ALPHA_SATURATE:776,CONSTANT_COLOR:32769,ONE_MINUS_CONSTANT_COLOR:32770,CONSTANT_ALPHA:32771,ONE_MINUS_CONSTANT_ALPHA:32772,FUNC_ADD:32774,FUNC_SUBTRACT:32778,FUNC_REVERSE_SUBTRACT:32779,BLEND_EQUATION:32777,BLEND_EQUATION_RGB:32777,BLEND_EQUATION_ALPHA:34877,BLEND_DST_RGB:32968,BLEND_SRC_RGB:32969,BLEND_DST_ALPHA:32970,BLEND_SRC_ALPHA:32971,BLEND_COLOR:32773,ARRAY_BUFFER_BINDING:34964,ELEMENT_ARRAY_BUFFER_BINDING:34965,LINE_WIDTH:2849,ALIASED_POINT_SIZE_RANGE:33901,ALIASED_LINE_WIDTH_RANGE:33902,CULL_FACE_MODE:2885,FRONT_FACE:2886,DEPTH_RANGE:2928,DEPTH_WRITEMASK:2930,DEPTH_CLEAR_VALUE:2931,DEPTH_FUNC:2932,STENCIL_CLEAR_VALUE:2961,STENCIL_FUNC:2962,STENCIL_FAIL:2964,STENCIL_PASS_DEPTH_FAIL:2965,STENCIL_PASS_DEPTH_PASS:2966,STENCIL_REF:2967,STENCIL_VALUE_MASK:2963,STENCIL_WRITEMASK:2968,STENCIL_BACK_FUNC:34816,STENCIL_BACK_FAIL:34817,STENCIL_BACK_PASS_DEPTH_FAIL:34818,STENCIL_BACK_PASS_DEPTH_PASS:34819,STENCIL_BACK_REF:36003,STENCIL_BACK_VALUE_MASK:36004,STENCIL_BACK_WRITEMASK:36005,VIEWPORT:2978,SCISSOR_BOX:3088,COLOR_CLEAR_VALUE:3106,COLOR_WRITEMASK:3107,UNPACK_ALIGNMENT:3317,PACK_ALIGNMENT:3333,MAX_TEXTURE_SIZE:3379,MAX_VIEWPORT_DIMS:3386,SUBPIXEL_BITS:3408,RED_BITS:3410,GREEN_BITS:3411,BLUE_BITS:3412,ALPHA_BITS:3413,DEPTH_BITS:3414,STENCIL_BITS:3415,POLYGON_OFFSET_UNITS:10752,POLYGON_OFFSET_FACTOR:32824,TEXTURE_BINDING_2D:32873,SAMPLE_BUFFERS:32936,SAMPLES:32937,SAMPLE_COVERAGE_VALUE:32938,SAMPLE_COVERAGE_INVERT:32939,COMPRESSED_TEXTURE_FORMATS:34467,VENDOR:7936,RENDERER:7937,VERSION:7938,IMPLEMENTATION_COLOR_READ_TYPE:35738,IMPLEMENTATION_COLOR_READ_FORMAT:35739,BROWSER_DEFAULT_WEBGL:37444,STATIC_DRAW:35044,STREAM_DRAW:35040,DYNAMIC_DRAW:35048,ARRAY_BUFFER:34962,ELEMENT_ARRAY_BUFFER:34963,BUFFER_SIZE:34660,BUFFER_USAGE:34661,CURRENT_VERTEX_ATTRIB:34342,VERTEX_ATTRIB_ARRAY_ENABLED:34338,VERTEX_ATTRIB_ARRAY_SIZE:34339,VERTEX_ATTRIB_ARRAY_STRIDE:34340,VERTEX_ATTRIB_ARRAY_TYPE:34341,VERTEX_ATTRIB_ARRAY_NORMALIZED:34922,VERTEX_ATTRIB_ARRAY_POINTER:34373,VERTEX_ATTRIB_ARRAY_BUFFER_BINDING:34975,CULL_FACE:2884,FRONT:1028,BACK:1029,FRONT_AND_BACK:1032,BLEND:3042,DEPTH_TEST:2929,DITHER:3024,POLYGON_OFFSET_FILL:32823,SAMPLE_ALPHA_TO_COVERAGE:32926,SAMPLE_COVERAGE:32928,SCISSOR_TEST:3089,STENCIL_TEST:2960,NO_ERROR:0,INVALID_ENUM:1280,INVALID_VALUE:1281,INVALID_OPERATION:1282,OUT_OF_MEMORY:1285,CONTEXT_LOST_WEBGL:37442,CW:2304,CCW:2305,DONT_CARE:4352,FASTEST:4353,NICEST:4354,GENERATE_MIPMAP_HINT:33170,BYTE:5120,UNSIGNED_BYTE:5121,SHORT:5122,UNSIGNED_SHORT:5123,INT:5124,UNSIGNED_INT:5125,FLOAT:5126,DOUBLE:5130,DEPTH_COMPONENT:6402,ALPHA:6406,RGB:6407,RGBA:6408,LUMINANCE:6409,LUMINANCE_ALPHA:6410,UNSIGNED_SHORT_4_4_4_4:32819,UNSIGNED_SHORT_5_5_5_1:32820,UNSIGNED_SHORT_5_6_5:33635,FRAGMENT_SHADER:35632,VERTEX_SHADER:35633,COMPILE_STATUS:35713,DELETE_STATUS:35712,LINK_STATUS:35714,VALIDATE_STATUS:35715,ATTACHED_SHADERS:35717,ACTIVE_ATTRIBUTES:35721,ACTIVE_UNIFORMS:35718,MAX_VERTEX_ATTRIBS:34921,MAX_VERTEX_UNIFORM_VECTORS:36347,MAX_VARYING_VECTORS:36348,MAX_COMBINED_TEXTURE_IMAGE_UNITS:35661,MAX_VERTEX_TEXTURE_IMAGE_UNITS:35660,MAX_TEXTURE_IMAGE_UNITS:34930,MAX_FRAGMENT_UNIFORM_VECTORS:36349,SHADER_TYPE:35663,SHADING_LANGUAGE_VERSION:35724,CURRENT_PROGRAM:35725,NEVER:512,ALWAYS:519,LESS:513,EQUAL:514,LEQUAL:515,GREATER:516,GEQUAL:518,NOTEQUAL:517,KEEP:7680,REPLACE:7681,INCR:7682,DECR:7683,INVERT:5386,INCR_WRAP:34055,DECR_WRAP:34056,NEAREST:9728,LINEAR:9729,NEAREST_MIPMAP_NEAREST:9984,LINEAR_MIPMAP_NEAREST:9985,NEAREST_MIPMAP_LINEAR:9986,LINEAR_MIPMAP_LINEAR:9987,TEXTURE_MAG_FILTER:10240,TEXTURE_MIN_FILTER:10241,TEXTURE_WRAP_S:10242,TEXTURE_WRAP_T:10243,TEXTURE_2D:3553,TEXTURE:5890,TEXTURE_CUBE_MAP:34067,TEXTURE_BINDING_CUBE_MAP:34068,TEXTURE_CUBE_MAP_POSITIVE_X:34069,TEXTURE_CUBE_MAP_NEGATIVE_X:34070,TEXTURE_CUBE_MAP_POSITIVE_Y:34071,TEXTURE_CUBE_MAP_NEGATIVE_Y:34072,TEXTURE_CUBE_MAP_POSITIVE_Z:34073,TEXTURE_CUBE_MAP_NEGATIVE_Z:34074,MAX_CUBE_MAP_TEXTURE_SIZE:34076,TEXTURE0:33984,ACTIVE_TEXTURE:34016,REPEAT:10497,CLAMP_TO_EDGE:33071,MIRRORED_REPEAT:33648,TEXTURE_WIDTH:4096,TEXTURE_HEIGHT:4097,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,INT_VEC2:35667,INT_VEC3:35668,INT_VEC4:35669,BOOL:35670,BOOL_VEC2:35671,BOOL_VEC3:35672,BOOL_VEC4:35673,FLOAT_MAT2:35674,FLOAT_MAT3:35675,FLOAT_MAT4:35676,SAMPLER_2D:35678,SAMPLER_CUBE:35680,LOW_FLOAT:36336,MEDIUM_FLOAT:36337,HIGH_FLOAT:36338,LOW_INT:36339,MEDIUM_INT:36340,HIGH_INT:36341,FRAMEBUFFER:36160,RENDERBUFFER:36161,RGBA4:32854,RGB5_A1:32855,RGB565:36194,DEPTH_COMPONENT16:33189,STENCIL_INDEX:6401,STENCIL_INDEX8:36168,DEPTH_STENCIL:34041,RENDERBUFFER_WIDTH:36162,RENDERBUFFER_HEIGHT:36163,RENDERBUFFER_INTERNAL_FORMAT:36164,RENDERBUFFER_RED_SIZE:36176,RENDERBUFFER_GREEN_SIZE:36177,RENDERBUFFER_BLUE_SIZE:36178,RENDERBUFFER_ALPHA_SIZE:36179,RENDERBUFFER_DEPTH_SIZE:36180,RENDERBUFFER_STENCIL_SIZE:36181,FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE:36048,FRAMEBUFFER_ATTACHMENT_OBJECT_NAME:36049,FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL:36050,FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE:36051,COLOR_ATTACHMENT0:36064,DEPTH_ATTACHMENT:36096,STENCIL_ATTACHMENT:36128,DEPTH_STENCIL_ATTACHMENT:33306,NONE:0,FRAMEBUFFER_COMPLETE:36053,FRAMEBUFFER_INCOMPLETE_ATTACHMENT:36054,FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:36055,FRAMEBUFFER_INCOMPLETE_DIMENSIONS:36057,FRAMEBUFFER_UNSUPPORTED:36061,FRAMEBUFFER_BINDING:36006,RENDERBUFFER_BINDING:36007,READ_FRAMEBUFFER:36008,DRAW_FRAMEBUFFER:36009,MAX_RENDERBUFFER_SIZE:34024,INVALID_FRAMEBUFFER_OPERATION:1286,UNPACK_FLIP_Y_WEBGL:37440,UNPACK_PREMULTIPLY_ALPHA_WEBGL:37441,UNPACK_COLORSPACE_CONVERSION_WEBGL:37443,READ_BUFFER:3074,UNPACK_ROW_LENGTH:3314,UNPACK_SKIP_ROWS:3315,UNPACK_SKIP_PIXELS:3316,PACK_ROW_LENGTH:3330,PACK_SKIP_ROWS:3331,PACK_SKIP_PIXELS:3332,TEXTURE_BINDING_3D:32874,UNPACK_SKIP_IMAGES:32877,UNPACK_IMAGE_HEIGHT:32878,MAX_3D_TEXTURE_SIZE:32883,MAX_ELEMENTS_VERTICES:33e3,MAX_ELEMENTS_INDICES:33001,MAX_TEXTURE_LOD_BIAS:34045,MAX_FRAGMENT_UNIFORM_COMPONENTS:35657,MAX_VERTEX_UNIFORM_COMPONENTS:35658,MAX_ARRAY_TEXTURE_LAYERS:35071,MIN_PROGRAM_TEXEL_OFFSET:35076,MAX_PROGRAM_TEXEL_OFFSET:35077,MAX_VARYING_COMPONENTS:35659,FRAGMENT_SHADER_DERIVATIVE_HINT:35723,RASTERIZER_DISCARD:35977,VERTEX_ARRAY_BINDING:34229,MAX_VERTEX_OUTPUT_COMPONENTS:37154,MAX_FRAGMENT_INPUT_COMPONENTS:37157,MAX_SERVER_WAIT_TIMEOUT:37137,MAX_ELEMENT_INDEX:36203,RED:6403,RGB8:32849,RGBA8:32856,RGB10_A2:32857,TEXTURE_3D:32879,TEXTURE_WRAP_R:32882,TEXTURE_MIN_LOD:33082,TEXTURE_MAX_LOD:33083,TEXTURE_BASE_LEVEL:33084,TEXTURE_MAX_LEVEL:33085,TEXTURE_COMPARE_MODE:34892,TEXTURE_COMPARE_FUNC:34893,SRGB:35904,SRGB8:35905,SRGB8_ALPHA8:35907,COMPARE_REF_TO_TEXTURE:34894,RGBA32F:34836,RGB32F:34837,RGBA16F:34842,RGB16F:34843,TEXTURE_2D_ARRAY:35866,TEXTURE_BINDING_2D_ARRAY:35869,R11F_G11F_B10F:35898,RGB9_E5:35901,RGBA32UI:36208,RGB32UI:36209,RGBA16UI:36214,RGB16UI:36215,RGBA8UI:36220,RGB8UI:36221,RGBA32I:36226,RGB32I:36227,RGBA16I:36232,RGB16I:36233,RGBA8I:36238,RGB8I:36239,RED_INTEGER:36244,RGB_INTEGER:36248,RGBA_INTEGER:36249,R8:33321,RG8:33323,R16F:33325,R32F:33326,RG16F:33327,RG32F:33328,R8I:33329,R8UI:33330,R16I:33331,R16UI:33332,R32I:33333,R32UI:33334,RG8I:33335,RG8UI:33336,RG16I:33337,RG16UI:33338,RG32I:33339,RG32UI:33340,R8_SNORM:36756,RG8_SNORM:36757,RGB8_SNORM:36758,RGBA8_SNORM:36759,RGB10_A2UI:36975,TEXTURE_IMMUTABLE_FORMAT:37167,TEXTURE_IMMUTABLE_LEVELS:33503,UNSIGNED_INT_2_10_10_10_REV:33640,UNSIGNED_INT_10F_11F_11F_REV:35899,UNSIGNED_INT_5_9_9_9_REV:35902,FLOAT_32_UNSIGNED_INT_24_8_REV:36269,UNSIGNED_INT_24_8:34042,HALF_FLOAT:5131,RG:33319,RG_INTEGER:33320,INT_2_10_10_10_REV:36255,CURRENT_QUERY:34917,QUERY_RESULT:34918,QUERY_RESULT_AVAILABLE:34919,ANY_SAMPLES_PASSED:35887,ANY_SAMPLES_PASSED_CONSERVATIVE:36202,MAX_DRAW_BUFFERS:34852,DRAW_BUFFER0:34853,DRAW_BUFFER1:34854,DRAW_BUFFER2:34855,DRAW_BUFFER3:34856,DRAW_BUFFER4:34857,DRAW_BUFFER5:34858,DRAW_BUFFER6:34859,DRAW_BUFFER7:34860,DRAW_BUFFER8:34861,DRAW_BUFFER9:34862,DRAW_BUFFER10:34863,DRAW_BUFFER11:34864,DRAW_BUFFER12:34865,DRAW_BUFFER13:34866,DRAW_BUFFER14:34867,DRAW_BUFFER15:34868,MAX_COLOR_ATTACHMENTS:36063,COLOR_ATTACHMENT1:36065,COLOR_ATTACHMENT2:36066,COLOR_ATTACHMENT3:36067,COLOR_ATTACHMENT4:36068,COLOR_ATTACHMENT5:36069,COLOR_ATTACHMENT6:36070,COLOR_ATTACHMENT7:36071,COLOR_ATTACHMENT8:36072,COLOR_ATTACHMENT9:36073,COLOR_ATTACHMENT10:36074,COLOR_ATTACHMENT11:36075,COLOR_ATTACHMENT12:36076,COLOR_ATTACHMENT13:36077,COLOR_ATTACHMENT14:36078,COLOR_ATTACHMENT15:36079,SAMPLER_3D:35679,SAMPLER_2D_SHADOW:35682,SAMPLER_2D_ARRAY:36289,SAMPLER_2D_ARRAY_SHADOW:36292,SAMPLER_CUBE_SHADOW:36293,INT_SAMPLER_2D:36298,INT_SAMPLER_3D:36299,INT_SAMPLER_CUBE:36300,INT_SAMPLER_2D_ARRAY:36303,UNSIGNED_INT_SAMPLER_2D:36306,UNSIGNED_INT_SAMPLER_3D:36307,UNSIGNED_INT_SAMPLER_CUBE:36308,UNSIGNED_INT_SAMPLER_2D_ARRAY:36311,MAX_SAMPLES:36183,SAMPLER_BINDING:35097,PIXEL_PACK_BUFFER:35051,PIXEL_UNPACK_BUFFER:35052,PIXEL_PACK_BUFFER_BINDING:35053,PIXEL_UNPACK_BUFFER_BINDING:35055,COPY_READ_BUFFER:36662,COPY_WRITE_BUFFER:36663,COPY_READ_BUFFER_BINDING:36662,COPY_WRITE_BUFFER_BINDING:36663,FLOAT_MAT2x3:35685,FLOAT_MAT2x4:35686,FLOAT_MAT3x2:35687,FLOAT_MAT3x4:35688,FLOAT_MAT4x2:35689,FLOAT_MAT4x3:35690,UNSIGNED_INT_VEC2:36294,UNSIGNED_INT_VEC3:36295,UNSIGNED_INT_VEC4:36296,UNSIGNED_NORMALIZED:35863,SIGNED_NORMALIZED:36764,VERTEX_ATTRIB_ARRAY_INTEGER:35069,VERTEX_ATTRIB_ARRAY_DIVISOR:35070,TRANSFORM_FEEDBACK_BUFFER_MODE:35967,MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS:35968,TRANSFORM_FEEDBACK_VARYINGS:35971,TRANSFORM_FEEDBACK_BUFFER_START:35972,TRANSFORM_FEEDBACK_BUFFER_SIZE:35973,TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN:35976,MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS:35978,MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS:35979,INTERLEAVED_ATTRIBS:35980,SEPARATE_ATTRIBS:35981,TRANSFORM_FEEDBACK_BUFFER:35982,TRANSFORM_FEEDBACK_BUFFER_BINDING:35983,TRANSFORM_FEEDBACK:36386,TRANSFORM_FEEDBACK_PAUSED:36387,TRANSFORM_FEEDBACK_ACTIVE:36388,TRANSFORM_FEEDBACK_BINDING:36389,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING:33296,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE:33297,FRAMEBUFFER_ATTACHMENT_RED_SIZE:33298,FRAMEBUFFER_ATTACHMENT_GREEN_SIZE:33299,FRAMEBUFFER_ATTACHMENT_BLUE_SIZE:33300,FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE:33301,FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE:33302,FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE:33303,FRAMEBUFFER_DEFAULT:33304,DEPTH24_STENCIL8:35056,DRAW_FRAMEBUFFER_BINDING:36006,READ_FRAMEBUFFER_BINDING:36010,RENDERBUFFER_SAMPLES:36011,FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER:36052,FRAMEBUFFER_INCOMPLETE_MULTISAMPLE:36182,UNIFORM_BUFFER:35345,UNIFORM_BUFFER_BINDING:35368,UNIFORM_BUFFER_START:35369,UNIFORM_BUFFER_SIZE:35370,MAX_VERTEX_UNIFORM_BLOCKS:35371,MAX_FRAGMENT_UNIFORM_BLOCKS:35373,MAX_COMBINED_UNIFORM_BLOCKS:35374,MAX_UNIFORM_BUFFER_BINDINGS:35375,MAX_UNIFORM_BLOCK_SIZE:35376,MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS:35377,MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS:35379,UNIFORM_BUFFER_OFFSET_ALIGNMENT:35380,ACTIVE_UNIFORM_BLOCKS:35382,UNIFORM_TYPE:35383,UNIFORM_SIZE:35384,UNIFORM_BLOCK_INDEX:35386,UNIFORM_OFFSET:35387,UNIFORM_ARRAY_STRIDE:35388,UNIFORM_MATRIX_STRIDE:35389,UNIFORM_IS_ROW_MAJOR:35390,UNIFORM_BLOCK_BINDING:35391,UNIFORM_BLOCK_DATA_SIZE:35392,UNIFORM_BLOCK_ACTIVE_UNIFORMS:35394,UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES:35395,UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER:35396,UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER:35398,OBJECT_TYPE:37138,SYNC_CONDITION:37139,SYNC_STATUS:37140,SYNC_FLAGS:37141,SYNC_FENCE:37142,SYNC_GPU_COMMANDS_COMPLETE:37143,UNSIGNALED:37144,SIGNALED:37145,ALREADY_SIGNALED:37146,TIMEOUT_EXPIRED:37147,CONDITION_SATISFIED:37148,WAIT_FAILED:37149,SYNC_FLUSH_COMMANDS_BIT:1,COLOR:6144,DEPTH:6145,STENCIL:6146,MIN:32775,MAX:32776,DEPTH_COMPONENT24:33190,STREAM_READ:35041,STREAM_COPY:35042,STATIC_READ:35045,STATIC_COPY:35046,DYNAMIC_READ:35049,DYNAMIC_COPY:35050,DEPTH_COMPONENT32F:36012,DEPTH32F_STENCIL8:36013,INVALID_INDEX:4294967295,TIMEOUT_IGNORED:-1,MAX_CLIENT_WAIT_TIMEOUT_WEBGL:37447,VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE:35070,UNMASKED_VENDOR_WEBGL:37445,UNMASKED_RENDERER_WEBGL:37446,MAX_TEXTURE_MAX_ANISOTROPY_EXT:34047,TEXTURE_MAX_ANISOTROPY_EXT:34046,COMPRESSED_RGB_S3TC_DXT1_EXT:33776,COMPRESSED_RGBA_S3TC_DXT1_EXT:33777,COMPRESSED_RGBA_S3TC_DXT3_EXT:33778,COMPRESSED_RGBA_S3TC_DXT5_EXT:33779,COMPRESSED_R11_EAC:37488,COMPRESSED_SIGNED_R11_EAC:37489,COMPRESSED_RG11_EAC:37490,COMPRESSED_SIGNED_RG11_EAC:37491,COMPRESSED_RGB8_ETC2:37492,COMPRESSED_RGBA8_ETC2_EAC:37493,COMPRESSED_SRGB8_ETC2:37494,COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:37495,COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2:37496,COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2:37497,COMPRESSED_RGB_PVRTC_4BPPV1_IMG:35840,COMPRESSED_RGBA_PVRTC_4BPPV1_IMG:35842,COMPRESSED_RGB_PVRTC_2BPPV1_IMG:35841,COMPRESSED_RGBA_PVRTC_2BPPV1_IMG:35843,COMPRESSED_RGB_ETC1_WEBGL:36196,COMPRESSED_RGB_ATC_WEBGL:35986,COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL:35986,COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL:34798,UNSIGNED_INT_24_8_WEBGL:34042,HALF_FLOAT_OES:36193,RGBA32F_EXT:34836,RGB32F_EXT:34837,FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT:33297,UNSIGNED_NORMALIZED_EXT:35863,MIN_EXT:32775,MAX_EXT:32776,SRGB_EXT:35904,SRGB_ALPHA_EXT:35906,SRGB8_ALPHA8_EXT:35907,FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT:33296,FRAGMENT_SHADER_DERIVATIVE_HINT_OES:35723,COLOR_ATTACHMENT0_WEBGL:36064,COLOR_ATTACHMENT1_WEBGL:36065,COLOR_ATTACHMENT2_WEBGL:36066,COLOR_ATTACHMENT3_WEBGL:36067,COLOR_ATTACHMENT4_WEBGL:36068,COLOR_ATTACHMENT5_WEBGL:36069,COLOR_ATTACHMENT6_WEBGL:36070,COLOR_ATTACHMENT7_WEBGL:36071,COLOR_ATTACHMENT8_WEBGL:36072,COLOR_ATTACHMENT9_WEBGL:36073,COLOR_ATTACHMENT10_WEBGL:36074,COLOR_ATTACHMENT11_WEBGL:36075,COLOR_ATTACHMENT12_WEBGL:36076,COLOR_ATTACHMENT13_WEBGL:36077,COLOR_ATTACHMENT14_WEBGL:36078,COLOR_ATTACHMENT15_WEBGL:36079,DRAW_BUFFER0_WEBGL:34853,DRAW_BUFFER1_WEBGL:34854,DRAW_BUFFER2_WEBGL:34855,DRAW_BUFFER3_WEBGL:34856,DRAW_BUFFER4_WEBGL:34857,DRAW_BUFFER5_WEBGL:34858,DRAW_BUFFER6_WEBGL:34859,DRAW_BUFFER7_WEBGL:34860,DRAW_BUFFER8_WEBGL:34861,DRAW_BUFFER9_WEBGL:34862,DRAW_BUFFER10_WEBGL:34863,DRAW_BUFFER11_WEBGL:34864,DRAW_BUFFER12_WEBGL:34865,DRAW_BUFFER13_WEBGL:34866,DRAW_BUFFER14_WEBGL:34867,DRAW_BUFFER15_WEBGL:34868,MAX_COLOR_ATTACHMENTS_WEBGL:36063,MAX_DRAW_BUFFERS_WEBGL:34852,VERTEX_ARRAY_BINDING_OES:34229,QUERY_COUNTER_BITS_EXT:34916,CURRENT_QUERY_EXT:34917,QUERY_RESULT_EXT:34918,QUERY_RESULT_AVAILABLE_EXT:34919,TIME_ELAPSED_EXT:35007,TIMESTAMP_EXT:36392,GPU_DISJOINT_EXT:36795}},\n      \"9d046c4720\": function _(t,e,s,h,i){h();const r\u003dt(\"@bokehjs/models/layouts/html_box\");class n extends r.HTMLBoxView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.data.change,(()\u003d\u003ethis._plot()));const{width:t,height:e,renderer:s,theme:h}\u003dthis.model.properties;this.on_change([t,e],(()\u003d\u003ethis._resize())),this.on_change([h,s],(()\u003d\u003ethis.render()))}render(){super.render();const t\u003d{width:this.model.width,height:this.model.height,renderer:this.model.renderer};null!\u003dthis._chart\u0026\u0026window.echarts.dispose(this._chart),this._chart\u003dwindow.echarts.init(this.el,this.model.theme,t),this._plot()}after_layout(){super.after_layout(),this._chart.resize()}_plot(){null!\u003dwindow.echarts\u0026\u0026this._chart.setOption(this.model.data)}_resize(){this._chart.resize({width:this.model.width,height:this.model.height})}}s.EChartsView\u003dn,n.__name__\u003d\"EChartsView\";class a extends r.HTMLBox{constructor(t){super(t)}static init_ECharts(){this.prototype.default_view\u003dn,this.define((({Any:t,String:e})\u003d\u003e({data:[t,{}],theme:[e,\"default\"],renderer:[e,\"canvas\"]})))}}s.ECharts\u003da,a.__name__\u003d\"ECharts\",a.__module__\u003d\"panel.models.echarts\",a.init_ECharts()},\n      \"2839081043\": function _(e,t,n,s,r){s();const o\u003de(\"@bokehjs/models/widgets/markup\"),i\u003de(\"@bokehjs/core/bokeh_events\"),_\u003de(\"4c755983eb\"),l\u003de(\"3329d4aa5b\");class c extends i.ModelEvent{constructor(e,t){super(),this.node\u003de,this.data\u003dt,this.event_name\u003d\"dom_event\"}_to_json(){return{model:this.origin,node:this.node,data:this.data}}}function a(e){return(new DOMParser).parseFromString(e,\"text/html\").documentElement.textContent}function d(e){Array.from(e.querySelectorAll(\"script\")).forEach((e\u003d\u003e{const t\u003ddocument.createElement(\"script\");Array.from(e.attributes).forEach((e\u003d\u003et.setAttribute(e.name,e.value))),t.appendChild(document.createTextNode(e.innerHTML)),e.parentNode\u0026\u0026e.parentNode.replaceChild(t,e)}))}n.DOMEvent\u003dc,c.__name__\u003d\"DOMEvent\",n.htmlDecode\u003da,n.runScripts\u003dd;class u extends _.PanelMarkupView{constructor(){super(...arguments),this._event_listeners\u003d{}}connect_signals(){super.connect_signals(),this.connect(this.model.properties.events.change,(()\u003d\u003e{this._remove_event_listeners(),this._setup_event_listeners()}))}render(){super.render();const e\u003da(this.model.text)||this.model.text;e?(this.markup_el.innerHTML\u003de,d(this.markup_el),this._setup_event_listeners()):this.markup_el.innerHTML\u003d\"\"}_remove_event_listeners(){for(const e in this._event_listeners){const t\u003ddocument.getElementById(e);if(null!\u003dt)for(const n in this._event_listeners[e]){const s\u003dthis._event_listeners[e][n];t.removeEventListener(n,s)}else console.warn(`DOM node \u0027${e}\u0027 could not be found. Cannot subscribe to DOM events.`)}this._event_listeners\u003d{}}_setup_event_listeners(){for(const e in this.model.events){const t\u003ddocument.getElementById(e);if(null!\u003dt)for(const n of this.model.events[e]){const s\u003dt\u003d\u003e{this.model.trigger_event(new c(e,l.serializeEvent(t)))};t.addEventListener(n,s),e in this._event_listeners||(this._event_listeners[e]\u003d{}),this._event_listeners[e][n]\u003ds}else console.warn(`DOM node \u0027${e}\u0027 could not be found. Cannot subscribe to DOM events.`)}}}n.HTMLView\u003du,u.__name__\u003d\"HTMLView\";class h extends o.Markup{constructor(e){super(e)}static init_HTML(){this.prototype.default_view\u003du,this.define((({Any:e})\u003d\u003e({events:[e,{}]})))}}n.HTML\u003dh,h.__name__\u003d\"HTML\",h.__module__\u003d\"panel.models.markup\",h.init_HTML()},\n      \"3329d4aa5b\": function _(e,t,o,a,i){function n(e){const t\u003d{type:e.type};return\"value\"in e.target\u0026\u0026(t.value\u003de.target.value),e.type in c\u0026\u0026Object.assign(t,c[e.type](e)),t}a(),o.serializeEvent\u003dn;const r\u003d{clipboard:e\u003d\u003e({clipboardData:e.clipboardData}),composition:e\u003d\u003e({data:e.data}),keyboard:e\u003d\u003e({altKey:e.altKey,charCode:e.charCode,ctrlKey:e.ctrlKey,key:e.key,keyCode:e.keyCode,locale:e.locale||null,location:e.location,metaKey:e.metaKey,repeat:e.repeat,shiftKey:e.shiftKey,which:e.which}),mouse:e\u003d\u003e({altKey:e.altKey,button:e.button,buttons:e.buttons,clientX:e.clientX,clientY:e.clientY,ctrlKey:e.ctrlKey,metaKey:e.metaKey,pageX:e.pageX,pageY:e.pageY,screenX:e.screenX,screenY:e.screenY,shiftKey:e.shiftKey}),pointer:e\u003d\u003e({pointerId:e.pointerId,width:e.width,height:e.height,pressure:e.pressure,tiltX:e.tiltX,tiltY:e.tiltY,pointerType:e.pointerType,isPrimary:e.isPrimary}),touch:e\u003d\u003e({altKey:e.altKey,ctrlKey:e.ctrlKey,metaKey:e.metaKey,shiftKey:e.shiftKey}),ui:e\u003d\u003e({detail:e.detail}),wheel:e\u003d\u003e({deltaMode:e.deltaMode,deltaX:e.deltaX,deltaY:e.deltaY,deltaZ:e.deltaZ}),animation:e\u003d\u003e({animationName:e.animationName,pseudoElement:e.pseudoElement,elapsedTime:e.elapsedTime}),transition:e\u003d\u003e({propertyName:e.propertyName,pseudoElement:e.pseudoElement,elapsedTime:e.elapsedTime})},l\u003d{clipboard:[\"copy\",\"cut\",\"paste\"],composition:[\"compositionend\",\"compositionstart\",\"compositionupdate\"],keyboard:[\"keydown\",\"keypress\",\"keyup\"],mouse:[\"click\",\"contextmenu\",\"doubleclick\",\"drag\",\"dragend\",\"dragenter\",\"dragexit\",\"dragleave\",\"dragover\",\"dragstart\",\"drop\",\"mousedown\",\"mouseenter\",\"mouseleave\",\"mousemove\",\"mouseout\",\"mouseover\",\"mouseup\"],pointer:[\"pointerdown\",\"pointermove\",\"pointerup\",\"pointercancel\",\"gotpointercapture\",\"lostpointercapture\",\"pointerenter\",\"pointerleave\",\"pointerover\",\"pointerout\"],selection:[\"select\"],touch:[\"touchcancel\",\"touchend\",\"touchmove\",\"touchstart\"],ui:[\"scroll\"],wheel:[\"wheel\"],animation:[\"animationstart\",\"animationend\",\"animationiteration\"],transition:[\"transitionend\"]},c\u003d{};Object.keys(l).forEach((e\u003d\u003e{l[e].forEach((t\u003d\u003e{c[t]\u003dr[e]}))})),o.default\u003dn},\n      \"7d45bd3bc4\": function _(require,module,exports,__esModule,__esExport){__esModule();const preact_1\u003drequire(\"6f11f2ef27\"),hooks_1\u003drequire(\"4c02a9b43f\"),preact_2\u003drequire(\"b3f51db71c\"),fast_json_patch_1\u003drequire(\"cbecfde9cd\"),html_box_1\u003drequire(\"@bokehjs/models/layouts/html_box\"),layout_1\u003drequire(\"4c755983eb\"),event_to_object_1\u003drequire(\"3329d4aa5b\"),LayoutConfigContext\u003dpreact_1.createContext({});function mountLayout(e,t,o,n){preact_1.render(preact_2.html`\n            \u003c${Layout}\n              saveUpdateHook\u003d${t}\n              sendEvent\u003d${o}\n              importSourceUrl\u003d${n}\n            /\u003e\n          `,e)}function Layout({saveUpdateHook:e,sendEvent:t,importSourceUrl:o}){const[n,r]\u003duseInplaceJsonPatch({});return hooks_1.useEffect((()\u003d\u003ee(r)),[r]),n.tagName?preact_2.html`\n            \u003c${LayoutConfigContext.Provider}\n              value\u003d${{sendEvent:t,importSourceUrl:o}}\n            \u003e\n              \u003c${Element} model\u003d${n} /\u003e\n            \u003c//\u003e\n          `:preact_2.html`\u003cdiv /\u003e`}function Element({model:e}){return e.importSource?preact_2.html`\u003c${ImportedElement} model\u003d${e} /\u003e`:preact_2.html`\u003c${StandardElement} model\u003d${e} /\u003e`}function ImportedElement({model:e}){const t\u003dhooks_1.useContext(LayoutConfigContext),o\u003duseLazyModule(e.importSource.source,t.importSourceUrl);if(o){const n\u003dgetPathProperty(o,e.tagName),r\u003delementChildren(e),a\u003delementAttributes(e,t.sendEvent);return preact_2.html`\u003c${n} ...${a}\u003e${r}\u003c//\u003e`}{const t\u003de.importSource.fallback;if(!t)return preact_2.html`\u003cdiv /\u003e`;switch(typeof t){case\"object\":return preact_2.html`\u003c${Element} model\u003d${t} /\u003e`;case\"string\":return preact_2.html`\u003cdiv\u003e${t}\u003c/div\u003e`;default:return null}}}function StandardElement({model:e}){const t\u003dhooks_1.useContext(LayoutConfigContext),o\u003delementChildren(e),n\u003delementAttributes(e,t.sendEvent);return e.children\u0026\u0026e.children.length?preact_2.html`\u003c${e.tagName} ...${n}\u003e${o}\u003c//\u003e`:preact_2.html`\u003c${e.tagName} ...${n} /\u003e`}function elementChildren(e){return e.children?e.children.map((e\u003d\u003e{switch(typeof e){case\"object\":return preact_2.html`\u003c${Element} model\u003d${e} /\u003e`;case\"string\":return e;default:return null}})):[]}function elementAttributes(e,t){const o\u003dObject.assign({},e.attributes);return e.eventHandlers\u0026\u0026Object.keys(e.eventHandlers).forEach((n\u003d\u003e{const r\u003de.eventHandlers[n];o[n]\u003deventHandler(t,r)})),o}function eventHandler(e,t){return function(){const o\u003dArray.from(arguments).map((e\u003d\u003e\"object\"\u003d\u003dtypeof e?(t.preventDefault\u0026\u0026e.preventDefault(),t.stopPropagation\u0026\u0026e.stopPropagation(),event_to_object_1.serializeEvent(e)):e));return new Promise((n\u003d\u003e{const r\u003d{data:o,target:t.target};e(r),n(r)}))}}function useLazyModule(source,sourceUrlBase\u003d\"\"){const[module,setModule]\u003dhooks_1.useState(null);return module||eval(`import(\u0027${joinUrl(sourceUrlBase,source)}\u0027)`).then(setModule),module}function getPathProperty(e,t){const o\u003dt.split(\".\");let n\u003de[o.shift()];for(let e\u003d0;e\u003co.length;e++)n\u003dn[o[e]];return n}function useInplaceJsonPatch(e){const t\u003dhooks_1.useRef(e),o\u003duseForceUpdate(),n\u003dhooks_1.useCallback(((e,n)\u003d\u003e{applyPatchInplace(t.current,e,n),o()}),[t,o]);return[t.current,n]}function applyPatchInplace(e,t,o){t?fast_json_patch_1.applyPatch(e,[{op:\"replace\",path:t,value:fast_json_patch_1.applyPatch(fast_json_patch_1.getValueByPointer(e,t),o,!1,!1).newDocument}]):fast_json_patch_1.applyPatch(e,o)}function useForceUpdate(){const[,e]\u003dhooks_1.useState({});return hooks_1.useCallback((()\u003d\u003ee({})),[])}function joinUrl(e,t){return t.startsWith(\"./\")?(e.endsWith(\"/\")?e.slice(0,-1):e)+t.slice(1):t}exports.mountLayout\u003dmountLayout,exports.default\u003dLayout;class IDOMView extends layout_1.PanelHTMLBoxView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.event.change,(()\u003d\u003e{this._update(...this.model.event),setTimeout((()\u003d\u003e{requestAnimationFrame((()\u003d\u003ethis.fix_layout()))}))}))}fix_layout(){this.update_layout(),this.compute_layout(),this.invalidate_layout(),layout_1.set_size(this.el,this.model)}initialize(){super.initialize(),mountLayout(this.el,(e\u003d\u003ethis._save_update(e)),(e\u003d\u003ethis._send(e)),this.model.importSourceUrl)}async lazy_initialize(){await super.lazy_initialize(),await new Promise((e\u003d\u003e{const t\u003d()\u003d\u003e{this._update?e(null):setTimeout(t,100)};t()}))}_save_update(e){this._update\u003de}async render(){super.render(),this._update(...this.model.event),await new Promise((e\u003d\u003e{const t\u003d()\u003d\u003e{this.el.children.length?(this.fix_layout(),e(null)):setTimeout(t,50)};t()}))}_send(e){this.model.msg\u003de}}exports.IDOMView\u003dIDOMView,IDOMView.__name__\u003d\"IDOMView\";class IDOM extends html_box_1.HTMLBox{constructor(e){super(e)}static init_IDOM(){this.prototype.default_view\u003dIDOMView,this.define((({Any:e,String:t})\u003d\u003e({event:[e,[]],importSourceUrl:[t,\"\"],msg:[e,{}]})))}}exports.IDOM\u003dIDOM,IDOM.__name__\u003d\"IDOM\",IDOM.__module__\u003d\"panel.models.idom\",IDOM.init_IDOM()},\n      \"6f11f2ef27\": function _(e,n,t,_,l){_();var o,r,i,u,s,c,f\u003d{},p\u003d[],a\u003d/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i;function d(e,n){for(var t in n)e[t]\u003dn[t];return e}function h(e){var n\u003de.parentNode;n\u0026\u0026n.removeChild(e)}function v(e,n,t){var _,l,o,r\u003darguments,i\u003d{};for(o in n)\"key\"\u003d\u003do?_\u003dn[o]:\"ref\"\u003d\u003do?l\u003dn[o]:i[o]\u003dn[o];if(arguments.length\u003e3)for(t\u003d[t],o\u003d3;o\u003carguments.length;o++)t.push(r[o]);if(null!\u003dt\u0026\u0026(i.children\u003dt),\"function\"\u003d\u003dtypeof e\u0026\u0026null!\u003de.defaultProps)for(o in e.defaultProps)void 0\u003d\u003d\u003di[o]\u0026\u0026(i[o]\u003de.defaultProps[o]);return y(e,i,_,l,null)}function y(e,n,t,_,l){var r\u003d{type:e,props:n,key:t,ref:_,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null\u003d\u003dl?++o.__v:l};return null!\u003do.vnode\u0026\u0026o.vnode(r),r}function m(e){return e.children}function k(e,n){this.props\u003de,this.context\u003dn}function g(e,n){if(null\u003d\u003dn)return e.__?g(e.__,e.__.__k.indexOf(e)+1):null;for(var t;n\u003ce.__k.length;n++)if(null!\u003d(t\u003de.__k[n])\u0026\u0026null!\u003dt.__e)return t.__e;return\"function\"\u003d\u003dtypeof e.type?g(e):null}function b(e){var n,t;if(null!\u003d(e\u003de.__)\u0026\u0026null!\u003de.__c){for(e.__e\u003de.__c.base\u003dnull,n\u003d0;n\u003ce.__k.length;n++)if(null!\u003d(t\u003de.__k[n])\u0026\u0026null!\u003dt.__e){e.__e\u003de.__c.base\u003dt.__e;break}return b(e)}}function C(e){(!e.__d\u0026\u0026(e.__d\u003d!0)\u0026\u0026i.push(e)\u0026\u0026!x.__r++||s!\u003d\u003do.debounceRendering)\u0026\u0026((s\u003do.debounceRendering)||u)(x)}function x(){for(var e;x.__r\u003di.length;)e\u003di.sort((function(e,n){return e.__v.__b-n.__v.__b})),i\u003d[],e.some((function(e){var n,t,_,l,o,r;e.__d\u0026\u0026(o\u003d(l\u003d(n\u003de).__v).__e,(r\u003dn.__P)\u0026\u0026(t\u003d[],(_\u003dd({},l)).__v\u003dl.__v+1,A(r,l,_,n.__n,void 0!\u003d\u003dr.ownerSVGElement,null!\u003dl.__h?[o]:null,t,null\u003d\u003do?g(l):o,l.__h),N(t,l),l.__e!\u003do\u0026\u0026b(l)))}))}function P(e,n,t,_,l,o,r,i,u,s){var c,a,d,h,v,k,b,C\u003d_\u0026\u0026_.__k||p,x\u003dC.length;for(t.__k\u003d[],c\u003d0;c\u003cn.length;c++)if(null!\u003d(h\u003dt.__k[c]\u003dnull\u003d\u003d(h\u003dn[c])||\"boolean\"\u003d\u003dtypeof h?null:\"string\"\u003d\u003dtypeof h||\"number\"\u003d\u003dtypeof h?y(null,h,null,null,h):Array.isArray(h)?y(m,{children:h},null,null,null):h.__b\u003e0?y(h.type,h.props,h.key,null,h.__v):h)){if(h.__\u003dt,h.__b\u003dt.__b+1,null\u003d\u003d\u003d(d\u003dC[c])||d\u0026\u0026h.key\u003d\u003dd.key\u0026\u0026h.type\u003d\u003d\u003dd.type)C[c]\u003dvoid 0;else for(a\u003d0;a\u003cx;a++){if((d\u003dC[a])\u0026\u0026h.key\u003d\u003dd.key\u0026\u0026h.type\u003d\u003d\u003dd.type){C[a]\u003dvoid 0;break}d\u003dnull}A(e,h,d\u003dd||f,l,o,r,i,u,s),v\u003dh.__e,(a\u003dh.ref)\u0026\u0026d.ref!\u003da\u0026\u0026(b||(b\u003d[]),d.ref\u0026\u0026b.push(d.ref,null,h),b.push(a,h.__c||v,h)),null!\u003dv?(null\u003d\u003dk\u0026\u0026(k\u003dv),\"function\"\u003d\u003dtypeof h.type\u0026\u0026null!\u003dh.__k\u0026\u0026h.__k\u003d\u003d\u003dd.__k?h.__d\u003du\u003dS(h,u,e):u\u003dE(e,h,d,C,v,u),s||\"option\"!\u003d\u003dt.type?\"function\"\u003d\u003dtypeof t.type\u0026\u0026(t.__d\u003du):e.value\u003d\"\"):u\u0026\u0026d.__e\u003d\u003du\u0026\u0026u.parentNode!\u003de\u0026\u0026(u\u003dg(d))}for(t.__e\u003dk,c\u003dx;c--;)null!\u003dC[c]\u0026\u0026(\"function\"\u003d\u003dtypeof t.type\u0026\u0026null!\u003dC[c].__e\u0026\u0026C[c].__e\u003d\u003dt.__d\u0026\u0026(t.__d\u003dg(_,c+1)),M(C[c],C[c]));if(b)for(c\u003d0;c\u003cb.length;c++)L(b[c],b[++c],b[++c])}function S(e,n,t){var _,l;for(_\u003d0;_\u003ce.__k.length;_++)(l\u003de.__k[_])\u0026\u0026(l.__\u003de,n\u003d\"function\"\u003d\u003dtypeof l.type?S(l,n,t):E(t,l,l,e.__k,l.__e,n));return n}function E(e,n,t,_,l,o){var r,i,u;if(void 0!\u003d\u003dn.__d)r\u003dn.__d,n.__d\u003dvoid 0;else if(null\u003d\u003dt||l!\u003do||null\u003d\u003dl.parentNode)e:if(null\u003d\u003do||o.parentNode!\u003d\u003de)e.appendChild(l),r\u003dnull;else{for(i\u003do,u\u003d0;(i\u003di.nextSibling)\u0026\u0026u\u003c_.length;u+\u003d2)if(i\u003d\u003dl)break e;e.insertBefore(l,o),r\u003do}return void 0!\u003d\u003dr?r:l.nextSibling}function w(e,n,t){\"-\"\u003d\u003d\u003dn[0]?e.setProperty(n,t):e[n]\u003dnull\u003d\u003dt?\"\":\"number\"!\u003dtypeof t||a.test(n)?t:t+\"px\"}function U(e,n,t,_,l){var o;e:if(\"style\"\u003d\u003d\u003dn)if(\"string\"\u003d\u003dtypeof t)e.style.cssText\u003dt;else{if(\"string\"\u003d\u003dtypeof _\u0026\u0026(e.style.cssText\u003d_\u003d\"\"),_)for(n in _)t\u0026\u0026n in t||w(e.style,n,\"\");if(t)for(n in t)_\u0026\u0026t[n]\u003d\u003d\u003d_[n]||w(e.style,n,t[n])}else if(\"o\"\u003d\u003d\u003dn[0]\u0026\u0026\"n\"\u003d\u003d\u003dn[1])o\u003dn!\u003d\u003d(n\u003dn.replace(/Capture$/,\"\")),n\u003dn.toLowerCase()in e?n.toLowerCase().slice(2):n.slice(2),e.l||(e.l\u003d{}),e.l[n+o]\u003dt,t?_||e.addEventListener(n,o?T:D,o):e.removeEventListener(n,o?T:D,o);else if(\"dangerouslySetInnerHTML\"!\u003d\u003dn){if(l)n\u003dn.replace(/xlink[H:h]/,\"h\").replace(/sName$/,\"s\");else if(\"href\"!\u003d\u003dn\u0026\u0026\"list\"!\u003d\u003dn\u0026\u0026\"form\"!\u003d\u003dn\u0026\u0026\"download\"!\u003d\u003dn\u0026\u0026n in e)try{e[n]\u003dnull\u003d\u003dt?\"\":t;break e}catch(e){}\"function\"\u003d\u003dtypeof t||(null!\u003dt\u0026\u0026(!1!\u003d\u003dt||\"a\"\u003d\u003d\u003dn[0]\u0026\u0026\"r\"\u003d\u003d\u003dn[1])?e.setAttribute(n,t):e.removeAttribute(n))}}function D(e){this.l[e.type+!1](o.event?o.event(e):e)}function T(e){this.l[e.type+!0](o.event?o.event(e):e)}function A(e,n,t,_,l,r,i,u,s){var c,f,p,a,h,v,y,g,b,C,x,S\u003dn.type;if(void 0!\u003d\u003dn.constructor)return null;null!\u003dt.__h\u0026\u0026(s\u003dt.__h,u\u003dn.__e\u003dt.__e,n.__h\u003dnull,r\u003d[u]),(c\u003do.__b)\u0026\u0026c(n);try{e:if(\"function\"\u003d\u003dtypeof S){if(g\u003dn.props,b\u003d(c\u003dS.contextType)\u0026\u0026_[c.__c],C\u003dc?b?b.props.value:c.__:_,t.__c?y\u003d(f\u003dn.__c\u003dt.__c).__\u003df.__E:(\"prototype\"in S\u0026\u0026S.prototype.render?n.__c\u003df\u003dnew S(g,C):(n.__c\u003df\u003dnew k(g,C),f.constructor\u003dS,f.render\u003dF),b\u0026\u0026b.sub(f),f.props\u003dg,f.state||(f.state\u003d{}),f.context\u003dC,f.__n\u003d_,p\u003df.__d\u003d!0,f.__h\u003d[]),null\u003d\u003df.__s\u0026\u0026(f.__s\u003df.state),null!\u003dS.getDerivedStateFromProps\u0026\u0026(f.__s\u003d\u003df.state\u0026\u0026(f.__s\u003dd({},f.__s)),d(f.__s,S.getDerivedStateFromProps(g,f.__s))),a\u003df.props,h\u003df.state,p)null\u003d\u003dS.getDerivedStateFromProps\u0026\u0026null!\u003df.componentWillMount\u0026\u0026f.componentWillMount(),null!\u003df.componentDidMount\u0026\u0026f.__h.push(f.componentDidMount);else{if(null\u003d\u003dS.getDerivedStateFromProps\u0026\u0026g!\u003d\u003da\u0026\u0026null!\u003df.componentWillReceiveProps\u0026\u0026f.componentWillReceiveProps(g,C),!f.__e\u0026\u0026null!\u003df.shouldComponentUpdate\u0026\u0026!1\u003d\u003d\u003df.shouldComponentUpdate(g,f.__s,C)||n.__v\u003d\u003d\u003dt.__v){f.props\u003dg,f.state\u003df.__s,n.__v!\u003d\u003dt.__v\u0026\u0026(f.__d\u003d!1),f.__v\u003dn,n.__e\u003dt.__e,n.__k\u003dt.__k,f.__h.length\u0026\u0026i.push(f);break e}null!\u003df.componentWillUpdate\u0026\u0026f.componentWillUpdate(g,f.__s,C),null!\u003df.componentDidUpdate\u0026\u0026f.__h.push((function(){f.componentDidUpdate(a,h,v)}))}f.context\u003dC,f.props\u003dg,f.state\u003df.__s,(c\u003do.__r)\u0026\u0026c(n),f.__d\u003d!1,f.__v\u003dn,f.__P\u003de,c\u003df.render(f.props,f.state,f.context),f.state\u003df.__s,null!\u003df.getChildContext\u0026\u0026(_\u003dd(d({},_),f.getChildContext())),p||null\u003d\u003df.getSnapshotBeforeUpdate||(v\u003df.getSnapshotBeforeUpdate(a,h)),x\u003dnull!\u003dc\u0026\u0026c.type\u003d\u003d\u003dm\u0026\u0026null\u003d\u003dc.key?c.props.children:c,P(e,Array.isArray(x)?x:[x],n,t,_,l,r,i,u,s),f.base\u003dn.__e,n.__h\u003dnull,f.__h.length\u0026\u0026i.push(f),y\u0026\u0026(f.__E\u003df.__\u003dnull),f.__e\u003d!1}else null\u003d\u003dr\u0026\u0026n.__v\u003d\u003d\u003dt.__v?(n.__k\u003dt.__k,n.__e\u003dt.__e):n.__e\u003dW(t.__e,n,t,_,l,r,i,s);(c\u003do.diffed)\u0026\u0026c(n)}catch(e){n.__v\u003dnull,(s||null!\u003dr)\u0026\u0026(n.__e\u003du,n.__h\u003d!!s,r[r.indexOf(u)]\u003dnull),o.__e(e,n,t)}}function N(e,n){o.__c\u0026\u0026o.__c(n,e),e.some((function(n){try{e\u003dn.__h,n.__h\u003d[],e.some((function(e){e.call(n)}))}catch(e){o.__e(e,n.__v)}}))}function W(e,n,t,_,l,o,r,i){var u,s,c,a,d\u003dt.props,v\u003dn.props,y\u003dn.type,m\u003d0;if(\"svg\"\u003d\u003d\u003dy\u0026\u0026(l\u003d!0),null!\u003do)for(;m\u003co.length;m++)if((u\u003do[m])\u0026\u0026(u\u003d\u003d\u003de||(y?u.localName\u003d\u003dy:3\u003d\u003du.nodeType))){e\u003du,o[m]\u003dnull;break}if(null\u003d\u003de){if(null\u003d\u003d\u003dy)return document.createTextNode(v);e\u003dl?document.createElementNS(\"http://www.w3.org/2000/svg\",y):document.createElement(y,v.is\u0026\u0026v),o\u003dnull,i\u003d!1}if(null\u003d\u003d\u003dy)d\u003d\u003d\u003dv||i\u0026\u0026e.data\u003d\u003d\u003dv||(e.data\u003dv);else{if(o\u003do\u0026\u0026p.slice.call(e.childNodes),s\u003d(d\u003dt.props||f).dangerouslySetInnerHTML,c\u003dv.dangerouslySetInnerHTML,!i){if(null!\u003do)for(d\u003d{},a\u003d0;a\u003ce.attributes.length;a++)d[e.attributes[a].name]\u003de.attributes[a].value;(c||s)\u0026\u0026(c\u0026\u0026(s\u0026\u0026c.__html\u003d\u003ds.__html||c.__html\u003d\u003d\u003de.innerHTML)||(e.innerHTML\u003dc\u0026\u0026c.__html||\"\"))}if(function(e,n,t,_,l){var o;for(o in t)\"children\"\u003d\u003d\u003do||\"key\"\u003d\u003d\u003do||o in n||U(e,o,null,t[o],_);for(o in n)l\u0026\u0026\"function\"!\u003dtypeof n[o]||\"children\"\u003d\u003d\u003do||\"key\"\u003d\u003d\u003do||\"value\"\u003d\u003d\u003do||\"checked\"\u003d\u003d\u003do||t[o]\u003d\u003d\u003dn[o]||U(e,o,n[o],t[o],_)}(e,v,d,l,i),c)n.__k\u003d[];else if(m\u003dn.props.children,P(e,Array.isArray(m)?m:[m],n,t,_,l\u0026\u0026\"foreignObject\"!\u003d\u003dy,o,r,e.firstChild,i),null!\u003do)for(m\u003do.length;m--;)null!\u003do[m]\u0026\u0026h(o[m]);i||(\"value\"in v\u0026\u0026void 0!\u003d\u003d(m\u003dv.value)\u0026\u0026(m!\u003d\u003de.value||\"progress\"\u003d\u003d\u003dy\u0026\u0026!m)\u0026\u0026U(e,\"value\",m,d.value,!1),\"checked\"in v\u0026\u0026void 0!\u003d\u003d(m\u003dv.checked)\u0026\u0026m!\u003d\u003de.checked\u0026\u0026U(e,\"checked\",m,d.checked,!1))}return e}function L(e,n,t){try{\"function\"\u003d\u003dtypeof e?e(n):e.current\u003dn}catch(e){o.__e(e,t)}}function M(e,n,t){var _,l,r;if(o.unmount\u0026\u0026o.unmount(e),(_\u003de.ref)\u0026\u0026(_.current\u0026\u0026_.current!\u003d\u003de.__e||L(_,null,n)),t||\"function\"\u003d\u003dtypeof e.type||(t\u003dnull!\u003d(l\u003de.__e)),e.__e\u003de.__d\u003dvoid 0,null!\u003d(_\u003de.__c)){if(_.componentWillUnmount)try{_.componentWillUnmount()}catch(e){o.__e(e,n)}_.base\u003d_.__P\u003dnull}if(_\u003de.__k)for(r\u003d0;r\u003c_.length;r++)_[r]\u0026\u0026M(_[r],n,t);null!\u003dl\u0026\u0026h(l)}function F(e,n,t){return this.constructor(e,t)}function H(e,n,t){var _,l,r;o.__\u0026\u0026o.__(e,n),l\u003d(_\u003d\"function\"\u003d\u003dtypeof t)?null:t\u0026\u0026t.__k||n.__k,r\u003d[],A(n,e\u003d(!_\u0026\u0026t||n).__k\u003dv(m,null,[e]),l||f,f,void 0!\u003d\u003dn.ownerSVGElement,!_\u0026\u0026t?[t]:l?null:n.firstChild?p.slice.call(n.childNodes):null,r,!_\u0026\u0026t?t:l?l.__e:n.firstChild,_),N(r,e)}t.options\u003do,t.isValidElement\u003dr,t.createElement\u003dv,t.h\u003dv,t.createRef\u003dfunction(){return{current:null}},t.Fragment\u003dm,t.Component\u003dk,t.toChildArray\u003dfunction e(n,t){return t\u003dt||[],null\u003d\u003dn||\"boolean\"\u003d\u003dtypeof n||(Array.isArray(n)?n.some((function(n){e(n,t)})):t.push(n)),t},t.render\u003dH,t.hydrate\u003dfunction e(n,t){H(n,t,e)},t.cloneElement\u003dfunction(e,n,t){var _,l,o,r\u003darguments,i\u003dd({},e.props);for(o in n)\"key\"\u003d\u003do?_\u003dn[o]:\"ref\"\u003d\u003do?l\u003dn[o]:i[o]\u003dn[o];if(arguments.length\u003e3)for(t\u003d[t],o\u003d3;o\u003carguments.length;o++)t.push(r[o]);return null!\u003dt\u0026\u0026(i.children\u003dt),y(e.type,i,_||e.key,l||e.ref,null)},t.createContext\u003dfunction(e,n){var t\u003d{__c:n\u003d\"__cC\"+c++,__:e,Consumer:function(e,n){return e.children(n)},Provider:function(e){var t,_;return this.getChildContext||(t\u003d[],(_\u003d{})[n]\u003dthis,this.getChildContext\u003dfunction(){return _},this.shouldComponentUpdate\u003dfunction(e){this.props.value!\u003d\u003de.value\u0026\u0026t.some(C)},this.sub\u003dfunction(e){t.push(e);var n\u003de.componentWillUnmount;e.componentWillUnmount\u003dfunction(){t.splice(t.indexOf(e),1),n\u0026\u0026n.call(e)}}),e.children}};return t.Provider.__\u003dt.Consumer.contextType\u003dt},t.options\u003do\u003d{__e:function(e,n){for(var t,_,l;n\u003dn.__;)if((t\u003dn.__c)\u0026\u0026!t.__)try{if((_\u003dt.constructor)\u0026\u0026null!\u003d_.getDerivedStateFromError\u0026\u0026(t.setState(_.getDerivedStateFromError(e)),l\u003dt.__d),null!\u003dt.componentDidCatch\u0026\u0026(t.componentDidCatch(e),l\u003dt.__d),l)return t.__E\u003dt}catch(n){e\u003dn}throw e},__v:0},t.isValidElement\u003dr\u003dfunction(e){return null!\u003de\u0026\u0026void 0\u003d\u003d\u003de.constructor},k.prototype.setState\u003dfunction(e,n){var t;t\u003dnull!\u003dthis.__s\u0026\u0026this.__s!\u003d\u003dthis.state?this.__s:this.__s\u003dd({},this.state),\"function\"\u003d\u003dtypeof e\u0026\u0026(e\u003de(d({},t),this.props)),e\u0026\u0026d(t,e),null!\u003de\u0026\u0026this.__v\u0026\u0026(n\u0026\u0026this.__h.push(n),C(this))},k.prototype.forceUpdate\u003dfunction(e){this.__v\u0026\u0026(this.__e\u003d!0,e\u0026\u0026this.__h.push(e),C(this))},k.prototype.render\u003dm,i\u003d[],u\u003d\"function\"\u003d\u003dtypeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,x.__r\u003d0,c\u003d0},\n      \"4c02a9b43f\": function _(_,n,t,o,u){o();const e\u003d_(\"6f11f2ef27\");var i,c,r,f\u003d0,a\u003d[],s\u003de.options.__b,h\u003de.options.__r,p\u003de.options.diffed,v\u003de.options.__c,m\u003de.options.unmount;function l(_,n){e.options.__h\u0026\u0026e.options.__h(c,_,f||n),f\u003d0;var t\u003dc.__H||(c.__H\u003d{__:[],__h:[]});return _\u003e\u003dt.__.length\u0026\u0026t.__.push({}),t.__[_]}function H(_){return f\u003d1,d(q,_)}function d(_,n,t){var o\u003dl(i++,2);return o.t\u003d_,o.__c||(o.__\u003d[t?t(n):q(void 0,n),function(_){var n\u003do.t(o.__[0],_);o.__[0]!\u003d\u003dn\u0026\u0026(o.__\u003d[n,o.__[1]],o.__c.setState({}))}],o.__c\u003dc),o.__}function E(_,n){var t\u003dl(i++,4);!e.options.__s\u0026\u0026F(t.__H,n)\u0026\u0026(t.__\u003d_,t.__H\u003dn,c.__h.push(t))}function y(_,n){var t\u003dl(i++,7);return F(t.__H,n)\u0026\u0026(t.__\u003d_(),t.__H\u003dn,t.__h\u003d_),t.__}function b(){a.forEach((function(_){if(_.__P)try{_.__H.__h.forEach(A),_.__H.__h.forEach(D),_.__H.__h\u003d[]}catch(n){_.__H.__h\u003d[],e.options.__e(n,_.__v)}})),a\u003d[]}t.useState\u003dH,t.useReducer\u003dd,t.useEffect\u003dfunction(_,n){var t\u003dl(i++,3);!e.options.__s\u0026\u0026F(t.__H,n)\u0026\u0026(t.__\u003d_,t.__H\u003dn,c.__H.__h.push(t))},t.useLayoutEffect\u003dE,t.useRef\u003dfunction(_){return f\u003d5,y((function(){return{current:_}}),[])},t.useImperativeHandle\u003dfunction(_,n,t){f\u003d6,E((function(){\"function\"\u003d\u003dtypeof _?_(n()):_\u0026\u0026(_.current\u003dn())}),null\u003d\u003dt?t:t.concat(_))},t.useMemo\u003dy,t.useCallback\u003dfunction(_,n){return f\u003d8,y((function(){return _}),n)},t.useContext\u003dfunction(_){var n\u003dc.context[_.__c],t\u003dl(i++,9);return t.__c\u003d_,n?(null\u003d\u003dt.__\u0026\u0026(t.__\u003d!0,n.sub(c)),n.props.value):_.__},t.useDebugValue\u003dfunction(_,n){e.options.useDebugValue\u0026\u0026e.options.useDebugValue(n?n(_):_)},t.useErrorBoundary\u003dfunction(_){var n\u003dl(i++,10),t\u003dH();return n.__\u003d_,c.componentDidCatch||(c.componentDidCatch\u003dfunction(_){n.__\u0026\u0026n.__(_),t[1](_)}),[t[0],function(){t[1](void 0)}]},e.options.__b\u003dfunction(_){c\u003dnull,s\u0026\u0026s(_)},e.options.__r\u003dfunction(_){h\u0026\u0026h(_),i\u003d0;var n\u003d(c\u003d_.__c).__H;n\u0026\u0026(n.__h.forEach(A),n.__h.forEach(D),n.__h\u003d[])},e.options.diffed\u003dfunction(_){p\u0026\u0026p(_);var n\u003d_.__c;n\u0026\u0026n.__H\u0026\u0026n.__H.__h.length\u0026\u0026(1!\u003d\u003da.push(n)\u0026\u0026r\u003d\u003d\u003de.options.requestAnimationFrame||((r\u003de.options.requestAnimationFrame)||function(_){var n,t\u003dfunction(){clearTimeout(o),g\u0026\u0026cancelAnimationFrame(n),setTimeout(_)},o\u003dsetTimeout(t,100);g\u0026\u0026(n\u003drequestAnimationFrame(t))})(b)),c\u003dvoid 0},e.options.__c\u003dfunction(_,n){n.some((function(_){try{_.__h.forEach(A),_.__h\u003d_.__h.filter((function(_){return!_.__||D(_)}))}catch(t){n.some((function(_){_.__h\u0026\u0026(_.__h\u003d[])})),n\u003d[],e.options.__e(t,_.__v)}})),v\u0026\u0026v(_,n)},e.options.unmount\u003dfunction(_){m\u0026\u0026m(_);var n\u003d_.__c;if(n\u0026\u0026n.__H)try{n.__H.__.forEach(A)}catch(_){e.options.__e(_,n.__v)}};var g\u003d\"function\"\u003d\u003dtypeof requestAnimationFrame;function A(_){var n\u003dc;\"function\"\u003d\u003dtypeof _.__c\u0026\u0026_.__c(),c\u003dn}function D(_){var n\u003dc;_.__c\u003d_.__(),c\u003dn}function F(_,n){return!_||_.length!\u003d\u003dn.length||n.some((function(n,t){return n!\u003d\u003d_[t]}))}function q(_,n){return\"function\"\u003d\u003dtypeof n?n(_):n}},\n      \"b3f51db71c\": function _(e,f,n,t,o){t();const r\u003de(\"tslib\"),d\u003de(\"6f11f2ef27\");var a\u003de(\"6f11f2ef27\");o(\"h\",a.h),o(\"render\",a.render),o(\"Component\",a.Component);var h\u003dr.__importDefault(e(\"ab33dd3f38\")).default.bind(d.h);n.html\u003dh},\n      \"ab33dd3f38\": function _(n,t,s,u,r){u();var e\u003dfunction(n,t,s,u){var r;t[0]\u003d0;for(var h\u003d1;h\u003ct.length;h++){var p\u003dt[h++],a\u003dt[h]?(t[0]|\u003dp?1:2,s[t[h++]]):t[++h];3\u003d\u003d\u003dp?u[0]\u003da:4\u003d\u003d\u003dp?u[1]\u003dObject.assign(u[1]||{},a):5\u003d\u003d\u003dp?(u[1]\u003du[1]||{})[t[++h]]\u003da:6\u003d\u003d\u003dp?u[1][t[++h]]+\u003da+\"\":p?(r\u003dn.apply(a,e(n,a,s,[\"\",null])),u.push(r),a[0]?t[0]|\u003d2:(t[h-2]\u003d0,t[h]\u003dr)):u.push(a)}return u},h\u003dnew Map;s.default\u003dfunction(n){var t\u003dh.get(this);return t||(t\u003dnew Map,h.set(this,t)),(t\u003de(this,t.get(n)||(t.set(n,t\u003dfunction(n){for(var t,s,u\u003d1,r\u003d\"\",e\u003d\"\",h\u003d[0],p\u003dfunction(n){1\u003d\u003d\u003du\u0026\u0026(n||(r\u003dr.replace(/^\\s*\\n\\s*|\\s*\\n\\s*$/g,\"\")))?h.push(0,n,r):3\u003d\u003d\u003du\u0026\u0026(n||r)?(h.push(3,n,r),u\u003d2):2\u003d\u003d\u003du\u0026\u0026\"...\"\u003d\u003d\u003dr\u0026\u0026n?h.push(4,n,0):2\u003d\u003d\u003du\u0026\u0026r\u0026\u0026!n?h.push(5,0,!0,r):u\u003e\u003d5\u0026\u0026((r||!n\u0026\u00265\u003d\u003d\u003du)\u0026\u0026(h.push(u,0,r,s),u\u003d6),n\u0026\u0026(h.push(u,n,0,s),u\u003d6)),r\u003d\"\"},a\u003d0;a\u003cn.length;a++){a\u0026\u0026(1\u003d\u003d\u003du\u0026\u0026p(),p(a));for(var f\u003d0;f\u003cn[a].length;f++)t\u003dn[a][f],1\u003d\u003d\u003du?\"\u003c\"\u003d\u003d\u003dt?(p(),h\u003d[h],u\u003d3):r+\u003dt:4\u003d\u003d\u003du?\"--\"\u003d\u003d\u003dr\u0026\u0026\"\u003e\"\u003d\u003d\u003dt?(u\u003d1,r\u003d\"\"):r\u003dt+r[0]:e?t\u003d\u003d\u003de?e\u003d\"\":r+\u003dt:\u0027\"\u0027\u003d\u003d\u003dt||\"\u0027\"\u003d\u003d\u003dt?e\u003dt:\"\u003e\"\u003d\u003d\u003dt?(p(),u\u003d1):u\u0026\u0026(\"\u003d\"\u003d\u003d\u003dt?(u\u003d5,s\u003dr,r\u003d\"\"):\"/\"\u003d\u003d\u003dt\u0026\u0026(u\u003c5||\"\u003e\"\u003d\u003d\u003dn[a][f+1])?(p(),3\u003d\u003d\u003du\u0026\u0026(h\u003dh[0]),u\u003dh,(h\u003dh[0]).push(2,0,u),u\u003d0):\" \"\u003d\u003d\u003dt||\"\\t\"\u003d\u003d\u003dt||\"\\n\"\u003d\u003d\u003dt||\"\\r\"\u003d\u003d\u003dt?(p(),u\u003d2):r+\u003dt),3\u003d\u003d\u003du\u0026\u0026\"!--\"\u003d\u003d\u003dr\u0026\u0026(u\u003d4,h\u003dh[0])}return p(),h}(n)),t),arguments,[])).length\u003e1?t:t[0]}},\n      \"cbecfde9cd\": function _(e,n,t,o,a){var r\u003dthis\u0026\u0026this.__assign||function(){return(r\u003dObject.assign||function(e){for(var n,t\u003d1,o\u003darguments.length;t\u003co;t++)for(var a in n\u003darguments[t])Object.prototype.hasOwnProperty.call(n,a)\u0026\u0026(e[a]\u003dn[a]);return e}).apply(this,arguments)};o();\n      /*!\n           * https://github.com/Starcounter-Jack/JSON-Patch\n           * (c) 2017 Joachim Wester\n           * MIT license\n           */\n      var p\u003de(\"cb21060ee5\"),s\u003de(\"b2f693e532\"),c\u003de(\"b2f693e532\");t.applyOperation\u003dc.applyOperation,t.applyPatch\u003dc.applyPatch,t.applyReducer\u003dc.applyReducer,t.getValueByPointer\u003dc.getValueByPointer,t.validate\u003dc.validate,t.validator\u003dc.validator;var i\u003de(\"cb21060ee5\");t.JsonPatchError\u003di.PatchError,t.deepClone\u003di._deepClone,t.escapePathComponent\u003di.escapePathComponent,t.unescapePathComponent\u003di.unescapePathComponent;var u\u003dnew WeakMap,l\u003dfunction(e){this.observers\u003dnew Map,this.obj\u003de},v\u003dfunction(e,n){this.callback\u003de,this.observer\u003dn};function h(e,n){n.unobserve()}function d(e,n){var t,o\u003dfunction(e){return u.get(e)}(e);if(o){var a\u003dfunction(e,n){return e.observers.get(n)}(o,n);t\u003da\u0026\u0026a.observer}else o\u003dnew l(e),u.set(e,o);if(t)return t;if(t\u003d{},o.value\u003dp._deepClone(e),n){t.callback\u003dn,t.next\u003dnull;var r\u003dfunction(){f(t)},s\u003dfunction(){clearTimeout(t.next),t.next\u003dsetTimeout(r)};\"undefined\"!\u003dtypeof window\u0026\u0026(window.addEventListener(\"mouseup\",s),window.addEventListener(\"keyup\",s),window.addEventListener(\"mousedown\",s),window.addEventListener(\"keydown\",s),window.addEventListener(\"change\",s))}return t.patches\u003d[],t.object\u003de,t.unobserve\u003dfunction(){f(t),clearTimeout(t.next),function(e,n){e.observers.delete(n.callback)}(o,t),\"undefined\"!\u003dtypeof window\u0026\u0026(window.removeEventListener(\"mouseup\",s),window.removeEventListener(\"keyup\",s),window.removeEventListener(\"mousedown\",s),window.removeEventListener(\"keydown\",s),window.removeEventListener(\"change\",s))},o.observers.set(n,new v(n,t)),t}function f(e,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!1);var t\u003du.get(e.object);w(t.value,e.object,e.patches,\"\",n),e.patches.length\u0026\u0026s.applyPatch(t.value,e.patches);var o\u003de.patches;return o.length\u003e0\u0026\u0026(e.patches\u003d[],e.callback\u0026\u0026e.callback(o)),o}function w(e,n,t,o,a){if(n!\u003d\u003de){\"function\"\u003d\u003dtypeof n.toJSON\u0026\u0026(n\u003dn.toJSON());for(var r\u003dp._objectKeys(n),s\u003dp._objectKeys(e),c\u003d!1,i\u003ds.length-1;i\u003e\u003d0;i--){var u\u003de[v\u003ds[i]];if(!p.hasOwnProperty(n,v)||void 0\u003d\u003d\u003dn[v]\u0026\u0026void 0!\u003d\u003du\u0026\u0026!1\u003d\u003d\u003dArray.isArray(n))Array.isArray(e)\u003d\u003d\u003dArray.isArray(n)?(a\u0026\u0026t.push({op:\"test\",path:o+\"/\"+p.escapePathComponent(v),value:p._deepClone(u)}),t.push({op:\"remove\",path:o+\"/\"+p.escapePathComponent(v)}),c\u003d!0):(a\u0026\u0026t.push({op:\"test\",path:o,value:e}),t.push({op:\"replace\",path:o,value:n}),!0);else{var l\u003dn[v];\"object\"\u003d\u003dtypeof u\u0026\u0026null!\u003du\u0026\u0026\"object\"\u003d\u003dtypeof l\u0026\u0026null!\u003dl?w(u,l,t,o+\"/\"+p.escapePathComponent(v),a):u!\u003d\u003dl\u0026\u0026(!0,a\u0026\u0026t.push({op:\"test\",path:o+\"/\"+p.escapePathComponent(v),value:p._deepClone(u)}),t.push({op:\"replace\",path:o+\"/\"+p.escapePathComponent(v),value:p._deepClone(l)}))}}if(c||r.length!\u003ds.length)for(i\u003d0;i\u003cr.length;i++){var v\u003dr[i];p.hasOwnProperty(e,v)||void 0\u003d\u003d\u003dn[v]||t.push({op:\"add\",path:o+\"/\"+p.escapePathComponent(v),value:p._deepClone(n[v])})}}}function b(e,n,t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d!1);var o\u003d[];return w(e,n,o,\"\",t),o}t.unobserve\u003dh,t.observe\u003dd,t.generate\u003df,t.compare\u003db;var y\u003de(\"b2f693e532\"),m\u003de(\"cb21060ee5\");t.default\u003dr({},y,{unobserve:h,observe:d,generate:f,compare:b,JsonPatchError:m.PatchError,deepClone:p._deepClone,escapePathComponent:p.escapePathComponent,unescapePathComponent:m.unescapePathComponent})},\n      \"cb21060ee5\": function _(r,e,t,n,o){\n      /*!\n           * https://github.com/Starcounter-Jack/JSON-Patch\n           * (c) 2017 Joachim Wester\n           * MIT license\n           */\n      var i,f\u003dthis\u0026\u0026this.__extends||(i\u003dfunction(r,e){return(i\u003dObject.setPrototypeOf||{__proto__:[]}instanceof Array\u0026\u0026function(r,e){r.__proto__\u003de}||function(r,e){for(var t in e)e.hasOwnProperty(t)\u0026\u0026(r[t]\u003de[t])})(r,e)},function(r,e){function t(){this.constructor\u003dr}i(r,e),r.prototype\u003dnull\u003d\u003d\u003de?Object.create(e):(t.prototype\u003de.prototype,new t)});n();var u\u003dObject.prototype.hasOwnProperty;function a(r,e){return u.call(r,e)}function c(r){if(Array.isArray(r)){for(var e\u003dnew Array(r.length),t\u003d0;t\u003ce.length;t++)e[t]\u003d\"\"+t;return e}if(Object.keys)return Object.keys(r);e\u003d[];for(var n in r)a(r,n)\u0026\u0026e.push(n);return e}function p(r){return-1\u003d\u003d\u003dr.indexOf(\"/\")\u0026\u0026-1\u003d\u003d\u003dr.indexOf(\"~\")?r:r.replace(/~/g,\"~0\").replace(/\\//g,\"~1\")}function s(r,e){var t;for(var n in r)if(a(r,n)){if(r[n]\u003d\u003d\u003de)return p(n)+\"/\";if(\"object\"\u003d\u003dtypeof r[n]\u0026\u0026\"\"!\u003d(t\u003ds(r[n],e)))return p(n)+\"/\"+t}return\"\"}function h(r,e){var t\u003d[r];for(var n in e){var o\u003d\"object\"\u003d\u003dtypeof e[n]?JSON.stringify(e[n],null,2):e[n];void 0!\u003d\u003do\u0026\u0026t.push(n+\": \"+o)}return t.join(\"\\n\")}t.hasOwnProperty\u003da,t._objectKeys\u003dc,t._deepClone\u003dfunction(r){switch(typeof r){case\"object\":return JSON.parse(JSON.stringify(r));case\"undefined\":return null;default:return r}},t.isInteger\u003dfunction(r){for(var e,t\u003d0,n\u003dr.length;t\u003cn;){if(!((e\u003dr.charCodeAt(t))\u003e\u003d48\u0026\u0026e\u003c\u003d57))return!1;t++}return!0},t.escapePathComponent\u003dp,t.unescapePathComponent\u003dfunction(r){return r.replace(/~1/g,\"/\").replace(/~0/g,\"~\")},t._getPathRecursive\u003ds,t.getPath\u003dfunction(r,e){if(r\u003d\u003d\u003de)return\"/\";var t\u003ds(r,e);if(\"\"\u003d\u003d\u003dt)throw new Error(\"Object not found in root\");return\"/\"+t},t.hasUndefined\u003dfunction r(e){if(void 0\u003d\u003d\u003de)return!0;if(e)if(Array.isArray(e)){for(var t\u003d0,n\u003de.length;t\u003cn;t++)if(r(e[t]))return!0}else if(\"object\"\u003d\u003dtypeof e){var o\u003dc(e),i\u003do.length;for(t\u003d0;t\u003ci;t++)if(r(e[o[t]]))return!0}return!1};var y\u003dfunction(r){function e(e,t,n,o,i){var f\u003dthis.constructor,u\u003dr.call(this,h(e,{name:t,index:n,operation:o,tree:i}))||this;return u.name\u003dt,u.index\u003dn,u.operation\u003do,u.tree\u003di,Object.setPrototypeOf(u,f.prototype),u.message\u003dh(e,{name:t,index:n,operation:o,tree:i}),u}return f(e,r),e}(Error);t.PatchError\u003dy},\n      \"b2f693e532\": function _(e,t,o,r,n){r();var a\u003de(\"0c8122087b\"),i\u003de(\"cb21060ee5\");o.JsonPatchError\u003di.PatchError,o.deepClone\u003di._deepClone;var p\u003d{add:function(e,t,o){return e[t]\u003dthis.value,{newDocument:o}},remove:function(e,t,o){var r\u003de[t];return delete e[t],{newDocument:o,removed:r}},replace:function(e,t,o){var r\u003de[t];return e[t]\u003dthis.value,{newDocument:o,removed:r}},move:function(e,t,o){var r\u003dh(o,this.path);r\u0026\u0026(r\u003di._deepClone(r));var n\u003dc(o,{op:\"remove\",path:this.from}).removed;return c(o,{op:\"add\",path:this.path,value:n}),{newDocument:o,removed:r}},copy:function(e,t,o){var r\u003dh(o,this.from);return c(o,{op:\"add\",path:this.path,value:i._deepClone(r)}),{newDocument:o}},test:function(e,t,o){return{newDocument:o,test:a(e[t],this.value)}},_get:function(e,t,o){return this.value\u003de[t],{newDocument:o}}},s\u003d{add:function(e,t,o){return i.isInteger(t)?e.splice(t,0,this.value):e[t]\u003dthis.value,{newDocument:o,index:t}},remove:function(e,t,o){return{newDocument:o,removed:e.splice(t,1)[0]}},replace:function(e,t,o){var r\u003de[t];return e[t]\u003dthis.value,{newDocument:o,removed:r}},move:p.move,copy:p.copy,test:p.test,_get:p._get};function h(e,t){if(\"\"\u003d\u003dt)return e;var o\u003d{op:\"_get\",path:t};return c(e,o),o.value}function c(e,t,r,n,c,u){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d!1),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0),void 0\u003d\u003d\u003dc\u0026\u0026(c\u003d!0),void 0\u003d\u003d\u003du\u0026\u0026(u\u003d0),r\u0026\u0026(\"function\"\u003d\u003dtypeof r?r(t,0,e,t.path):d(t,0)),\"\"\u003d\u003d\u003dt.path){var f\u003d{newDocument:e};if(\"add\"\u003d\u003d\u003dt.op)return f.newDocument\u003dt.value,f;if(\"replace\"\u003d\u003d\u003dt.op)return f.newDocument\u003dt.value,f.removed\u003de,f;if(\"move\"\u003d\u003d\u003dt.op||\"copy\"\u003d\u003d\u003dt.op)return f.newDocument\u003dh(e,t.from),\"move\"\u003d\u003d\u003dt.op\u0026\u0026(f.removed\u003de),f;if(\"test\"\u003d\u003d\u003dt.op){if(f.test\u003da(e,t.value),!1\u003d\u003d\u003df.test)throw new o.JsonPatchError(\"Test operation failed\",\"TEST_OPERATION_FAILED\",u,t,e);return f.newDocument\u003de,f}if(\"remove\"\u003d\u003d\u003dt.op)return f.removed\u003de,f.newDocument\u003dnull,f;if(\"_get\"\u003d\u003d\u003dt.op)return t.value\u003de,f;if(r)throw new o.JsonPatchError(\"Operation `op` property is not one of operations defined in RFC-6902\",\"OPERATION_OP_INVALID\",u,t,e);return f}n||(e\u003di._deepClone(e));var l\u003d(t.path||\"\").split(\"/\"),v\u003de,E\u003d1,_\u003dl.length,O\u003dvoid 0,w\u003dvoid 0,A\u003dvoid 0;for(A\u003d\"function\"\u003d\u003dtypeof r?r:d;;){if(w\u003dl[E],c\u0026\u0026\"__proto__\"\u003d\u003dw)throw new TypeError(\"JSON-Patch: modifying `__proto__` prop is banned for security reasons, if this was on purpose, please set `banPrototypeModifications` flag false and pass it to this function. More info in fast-json-patch README\");if(r\u0026\u0026void 0\u003d\u003d\u003dO\u0026\u0026(void 0\u003d\u003d\u003dv[w]?O\u003dl.slice(0,E).join(\"/\"):E\u003d\u003d_-1\u0026\u0026(O\u003dt.path),void 0!\u003d\u003dO\u0026\u0026A(t,0,e,O)),E++,Array.isArray(v)){if(\"-\"\u003d\u003d\u003dw)w\u003dv.length;else{if(r\u0026\u0026!i.isInteger(w))throw new o.JsonPatchError(\"Expected an unsigned base-10 integer value, making the new referenced value the array element with the zero-based index\",\"OPERATION_PATH_ILLEGAL_ARRAY_INDEX\",u,t,e);i.isInteger(w)\u0026\u0026(w\u003d~~w)}if(E\u003e\u003d_){if(r\u0026\u0026\"add\"\u003d\u003d\u003dt.op\u0026\u0026w\u003ev.length)throw new o.JsonPatchError(\"The specified index MUST NOT be greater than the number of elements in the array\",\"OPERATION_VALUE_OUT_OF_BOUNDS\",u,t,e);if(!1\u003d\u003d\u003d(f\u003ds[t.op].call(t,v,w,e)).test)throw new o.JsonPatchError(\"Test operation failed\",\"TEST_OPERATION_FAILED\",u,t,e);return f}}else if(w\u0026\u0026-1!\u003dw.indexOf(\"~\")\u0026\u0026(w\u003di.unescapePathComponent(w)),E\u003e\u003d_){if(!1\u003d\u003d\u003d(f\u003dp[t.op].call(t,v,w,e)).test)throw new o.JsonPatchError(\"Test operation failed\",\"TEST_OPERATION_FAILED\",u,t,e);return f}v\u003dv[w]}}function u(e,t,r,n,a){if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d!0),void 0\u003d\u003d\u003da\u0026\u0026(a\u003d!0),r\u0026\u0026!Array.isArray(t))throw new o.JsonPatchError(\"Patch sequence must be an array\",\"SEQUENCE_NOT_AN_ARRAY\");n||(e\u003di._deepClone(e));for(var p\u003dnew Array(t.length),s\u003d0,h\u003dt.length;s\u003ch;s++)p[s]\u003dc(e,t[s],r,!0,a,s),e\u003dp[s].newDocument;return p.newDocument\u003de,p}function f(e,t,r){var n\u003dc(e,t);if(!1\u003d\u003d\u003dn.test)throw new o.JsonPatchError(\"Test operation failed\",\"TEST_OPERATION_FAILED\",r,t,e);return n.newDocument}function d(e,t,r,n){if(\"object\"!\u003dtypeof e||null\u003d\u003d\u003de||Array.isArray(e))throw new o.JsonPatchError(\"Operation is not an object\",\"OPERATION_NOT_AN_OBJECT\",t,e,r);if(!p[e.op])throw new o.JsonPatchError(\"Operation `op` property is not one of operations defined in RFC-6902\",\"OPERATION_OP_INVALID\",t,e,r);if(\"string\"!\u003dtypeof e.path)throw new o.JsonPatchError(\"Operation `path` property is not a string\",\"OPERATION_PATH_INVALID\",t,e,r);if(0!\u003d\u003de.path.indexOf(\"/\")\u0026\u0026e.path.length\u003e0)throw new o.JsonPatchError(\u0027Operation `path` property must start with \"/\"\u0027,\"OPERATION_PATH_INVALID\",t,e,r);if((\"move\"\u003d\u003d\u003de.op||\"copy\"\u003d\u003d\u003de.op)\u0026\u0026\"string\"!\u003dtypeof e.from)throw new o.JsonPatchError(\"Operation `from` property is not present (applicable in `move` and `copy` operations)\",\"OPERATION_FROM_REQUIRED\",t,e,r);if((\"add\"\u003d\u003d\u003de.op||\"replace\"\u003d\u003d\u003de.op||\"test\"\u003d\u003d\u003de.op)\u0026\u0026void 0\u003d\u003d\u003de.value)throw new o.JsonPatchError(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_REQUIRED\",t,e,r);if((\"add\"\u003d\u003d\u003de.op||\"replace\"\u003d\u003d\u003de.op||\"test\"\u003d\u003d\u003de.op)\u0026\u0026i.hasUndefined(e.value))throw new o.JsonPatchError(\"Operation `value` property is not present (applicable in `add`, `replace` and `test` operations)\",\"OPERATION_VALUE_CANNOT_CONTAIN_UNDEFINED\",t,e,r);if(r)if(\"add\"\u003d\u003de.op){var a\u003de.path.split(\"/\").length,s\u003dn.split(\"/\").length;if(a!\u003d\u003ds+1\u0026\u0026a!\u003d\u003ds)throw new o.JsonPatchError(\"Cannot perform an `add` operation at the desired path\",\"OPERATION_PATH_CANNOT_ADD\",t,e,r)}else if(\"replace\"\u003d\u003d\u003de.op||\"remove\"\u003d\u003d\u003de.op||\"_get\"\u003d\u003d\u003de.op){if(e.path!\u003d\u003dn)throw new o.JsonPatchError(\"Cannot perform the operation at a path that does not exist\",\"OPERATION_PATH_UNRESOLVABLE\",t,e,r)}else if(\"move\"\u003d\u003d\u003de.op||\"copy\"\u003d\u003d\u003de.op){var h\u003dl([{op:\"_get\",path:e.from,value:void 0}],r);if(h\u0026\u0026\"OPERATION_PATH_UNRESOLVABLE\"\u003d\u003d\u003dh.name)throw new o.JsonPatchError(\"Cannot perform the operation from a path that does not exist\",\"OPERATION_FROM_UNRESOLVABLE\",t,e,r)}}function l(e,t,r){try{if(!Array.isArray(e))throw new o.JsonPatchError(\"Patch sequence must be an array\",\"SEQUENCE_NOT_AN_ARRAY\");if(t)u(i._deepClone(t),i._deepClone(e),r||!0);else{r\u003dr||d;for(var n\u003d0;n\u003ce.length;n++)r(e[n],n,t,void 0)}}catch(e){if(e instanceof o.JsonPatchError)return e;throw e}}o.getValueByPointer\u003dh,o.applyOperation\u003dc,o.applyPatch\u003du,o.applyReducer\u003df,o.validator\u003dd,o.validate\u003dl,o.default\u003d{JsonPatchError:o.JsonPatchError,deepClone:o.deepClone,getValueByPointer:h,applyOperation:c,applyPatch:u,applyReducer:f,validator:d,validate:l}},\n      \"0c8122087b\": function _(r,t,e,n,f){var i\u003dArray.isArray,o\u003dObject.keys,u\u003dObject.prototype.hasOwnProperty;t.exports\u003dfunction r(t,e){if(t\u003d\u003d\u003de)return!0;if(t\u0026\u0026e\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026\"object\"\u003d\u003dtypeof e){var n,f,a,c\u003di(t),g\u003di(e);if(c\u0026\u0026g){if((f\u003dt.length)!\u003de.length)return!1;for(n\u003df;0!\u003dn--;)if(!r(t[n],e[n]))return!1;return!0}if(c!\u003dg)return!1;var p\u003dt instanceof Date,s\u003de instanceof Date;if(p!\u003ds)return!1;if(p\u0026\u0026s)return t.getTime()\u003d\u003de.getTime();var y\u003dt instanceof RegExp,l\u003de instanceof RegExp;if(y!\u003dl)return!1;if(y\u0026\u0026l)return t.toString()\u003d\u003de.toString();var h\u003do(t);if((f\u003dh.length)!\u003d\u003do(e).length)return!1;for(n\u003df;0!\u003dn--;)if(!u.call(e,h[n]))return!1;for(n\u003df;0!\u003dn--;)if(!r(t[a\u003dh[n]],e[a]))return!1;return!0}return t!\u003dt\u0026\u0026e!\u003de}},\n      \"0eae77d68f\": function _(e,i,t,n,d){n();const s\u003de(\"@bokehjs/models/layouts/html_box\"),l\u003de(\"4c755983eb\"),o\u003dwindow.Jupyter;class a extends l.PanelHTMLBoxView{constructor(){super(...arguments),this.rendered\u003d!1}render(){super.render(),this._render().then((()\u003d\u003e{this.rendered\u003d!0,this.invalidate_layout(),this.notify_finished()}))}has_finished(){return this.rendered\u0026\u0026super.has_finished()}async _render(){const{spec:e,state:i}\u003dthis.model.bundle;let t;if(null!\u003do\u0026\u0026null!\u003do.notebook?t\u003do.notebook.kernel.widget_manager:null!\u003dwindow.PyViz.widget_manager\u0026\u0026(t\u003dwindow.PyViz.widget_manager),t)if(null\u003d\u003dthis.ipyview){const n\u003d(await t.set_state(i)).find((i\u003d\u003ei.model_id\u003d\u003de.model_id));if(null!\u003dn){const e\u003dawait t.create_view(n,{el:this.el});if(this.ipyview\u003de,e.children_views)for(const i of e.children_views.views)await i;this.el.appendChild(e.el),e.trigger(\"displayed\",e)}}else this.el.appendChild(this.ipyview.el);else console.log(\"Panel IPyWidget model could not find a WidgetManager\")}}t.IPyWidgetView\u003da,a.__name__\u003d\"IPyWidgetView\";class r extends s.HTMLBox{constructor(e){super(e)}static init_IPyWidget(){this.prototype.default_view\u003da,this.define((({Any:e})\u003d\u003e({bundle:[e,{}]})))}}t.IPyWidget\u003dr,r.__name__\u003d\"IPyWidget\",r.__module__\u003d\"panel.models.ipywidget\",r.init_IPyWidget()},\n      \"0d30bea0c8\": function _(e,t,r,s,n){s();const i\u003de(\"tslib\"),o\u003de(\"@bokehjs/core/kinds\"),d\u003de(\"@bokehjs/models/widgets/markup\"),l\u003di.__importDefault(e(\"18bba7b7e1\")),a\u003de(\"4c755983eb\");class h extends a.PanelMarkupView{connect_signals(){super.connect_signals();const{depth:e,hover_preview:t,theme:r}\u003dthis.model.properties;this.on_change([e,t,r],(()\u003d\u003ethis.render()))}render(){super.render();const e\u003dthis.model.text.replace(/(\\r\\n|\\n|\\r)/gm,\"\");let t;try{t\u003dwindow.JSON.parse(e)}catch(e){return void(this.markup_el.innerHTML\u003d\"\u003cb\u003eInvalid JSON:\u003c/b\u003e \"+e.toString())}const r\u003d{hoverPreviewEnabled:this.model.hover_preview,theme:this.model.theme},s\u003dnull\u003d\u003dthis.model.depth?1/0:this.model.depth,n\u003dnew l.default(t,s,r).render();let i\u003d\"border-radius: 5px; padding: 10px;\";\"dark\"\u003d\u003dthis.model.theme?n.style.cssText\u003d\"background-color: rgb(30, 30, 30);\"+i:n.style.cssText\u003di,this.markup_el.append(n)}}r.JSONView\u003dh,h.__name__\u003d\"JSONView\",r.JSONTheme\u003do.Enum(\"dark\",\"light\");class p extends d.Markup{constructor(e){super(e)}static init_JSON(){this.prototype.default_view\u003dh,this.define((({Boolean:e,Int:t,Nullable:s})\u003d\u003e({depth:[s(t),1],hover_preview:[e,!1],theme:[r.JSONTheme,\"dark\"]})))}}r.JSON\u003dp,p.__name__\u003d\"JSON\",p.__module__\u003d\"panel.models.markup\",p.init_JSON()},\n      \"18bba7b7e1\": function _(t,e,r,n,o){function i(t){return null\u003d\u003d\u003dt?\"null\":typeof t}function s(t){return!!t\u0026\u0026\"object\"\u003d\u003dtypeof t}function a(t){if(void 0\u003d\u003d\u003dt)return\"\";if(null\u003d\u003d\u003dt)return\"Object\";if(\"object\"\u003d\u003dtypeof t\u0026\u0026!t.constructor)return\"Object\";var e\u003d/function ([^(]*)/.exec(t.constructor.toString());return e\u0026\u0026e.length\u003e1?e[1]:\"\"}function f(t,e,r){return\"null\"\u003d\u003d\u003dt||\"undefined\"\u003d\u003d\u003dt?t:(\"string\"!\u003d\u003dt\u0026\u0026\"stringifiable\"!\u003d\u003dt||(r\u003d\u0027\"\u0027+r.replace(/\"/g,\u0027\\\\\"\u0027)+\u0027\"\u0027),\"function\"\u003d\u003d\u003dt?e.toString().replace(/[\\r\\n]/g,\"\").replace(/\\{.*\\}/,\"\")+\"{…}\":r)}function m(t){var e\u003d\"\";return s(t)?(e\u003da(t),Array.isArray(t)\u0026\u0026(e+\u003d\"[\"+t.length+\"]\")):e\u003df(i(t),t,t),e}function l(t){return\"json-formatter-\"+t}function d(t,e,r){var n\u003ddocument.createElement(t);return e\u0026\u0026n.classList.add(l(e)),void 0!\u003d\u003dr\u0026\u0026(r instanceof Node?n.appendChild(r):n.appendChild(document.createTextNode(String(r)))),n}n(),function(t){if(\"undefined\"!\u003dtypeof window){var e\u003ddocument.createElement(\"style\");e.setAttribute(\"media\",\"screen\"),e.innerHTML\u003dt,document.head.appendChild(e)}}(\u0027.json-formatter-row {\\n  font-family: monospace;\\n}\\n.json-formatter-row,\\n.json-formatter-row a,\\n.json-formatter-row a:hover {\\n  color: black;\\n  text-decoration: none;\\n}\\n.json-formatter-row .json-formatter-row {\\n  margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty {\\n  opacity: 0.5;\\n  margin-left: 1rem;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n  display: none;\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n  content: \"No properties\";\\n}\\n.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n  content: \"[]\";\\n}\\n.json-formatter-row .json-formatter-string,\\n.json-formatter-row .json-formatter-stringifiable {\\n  color: green;\\n  white-space: pre;\\n  word-wrap: break-word;\\n}\\n.json-formatter-row .json-formatter-number {\\n  color: blue;\\n}\\n.json-formatter-row .json-formatter-boolean {\\n  color: red;\\n}\\n.json-formatter-row .json-formatter-null {\\n  color: #855A00;\\n}\\n.json-formatter-row .json-formatter-undefined {\\n  color: #ca0b69;\\n}\\n.json-formatter-row .json-formatter-function {\\n  color: #FF20ED;\\n}\\n.json-formatter-row .json-formatter-date {\\n  background-color: rgba(0, 0, 0, 0.05);\\n}\\n.json-formatter-row .json-formatter-url {\\n  text-decoration: underline;\\n  color: blue;\\n  cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-bracket {\\n  color: blue;\\n}\\n.json-formatter-row .json-formatter-key {\\n  color: #00008B;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler-link {\\n  cursor: pointer;\\n}\\n.json-formatter-row .json-formatter-toggler {\\n  line-height: 1.2rem;\\n  font-size: 0.7rem;\\n  vertical-align: middle;\\n  opacity: 0.6;\\n  cursor: pointer;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-row .json-formatter-toggler:after {\\n  display: inline-block;\\n  transition: transform 100ms ease-in;\\n  content: \"►\";\\n}\\n.json-formatter-row \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0;\\n  transition: opacity 0.15s ease-in;\\n  font-style: italic;\\n}\\n.json-formatter-row:hover \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0.6;\\n}\\n.json-formatter-row.json-formatter-open \u003e .json-formatter-toggler-link .json-formatter-toggler:after {\\n  transform: rotate(90deg);\\n}\\n.json-formatter-row.json-formatter-open \u003e .json-formatter-children:after {\\n  display: inline-block;\\n}\\n.json-formatter-row.json-formatter-open \u003e a \u003e .json-formatter-preview-text {\\n  display: none;\\n}\\n.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n  display: block;\\n}\\n.json-formatter-dark.json-formatter-row {\\n  font-family: monospace;\\n}\\n.json-formatter-dark.json-formatter-row,\\n.json-formatter-dark.json-formatter-row a,\\n.json-formatter-dark.json-formatter-row a:hover {\\n  color: white;\\n  text-decoration: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-row {\\n  margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty {\\n  opacity: 0.5;\\n  margin-left: 1rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty:after {\\n  display: none;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-object:after {\\n  content: \"No properties\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-children.json-formatter-empty.json-formatter-array:after {\\n  content: \"[]\";\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-string,\\n.json-formatter-dark.json-formatter-row .json-formatter-stringifiable {\\n  color: #31F031;\\n  white-space: pre;\\n  word-wrap: break-word;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-number {\\n  color: #66C2FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-boolean {\\n  color: #EC4242;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-null {\\n  color: #EEC97D;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-undefined {\\n  color: #ef8fbe;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-function {\\n  color: #FD48CB;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-date {\\n  background-color: rgba(255, 255, 255, 0.05);\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-url {\\n  text-decoration: underline;\\n  color: #027BFF;\\n  cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-bracket {\\n  color: #9494FF;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-key {\\n  color: #23A0DB;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler-link {\\n  cursor: pointer;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler {\\n  line-height: 1.2rem;\\n  font-size: 0.7rem;\\n  vertical-align: middle;\\n  opacity: 0.6;\\n  cursor: pointer;\\n  padding-right: 0.2rem;\\n}\\n.json-formatter-dark.json-formatter-row .json-formatter-toggler:after {\\n  display: inline-block;\\n  transition: transform 100ms ease-in;\\n  content: \"►\";\\n}\\n.json-formatter-dark.json-formatter-row \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0;\\n  transition: opacity 0.15s ease-in;\\n  font-style: italic;\\n}\\n.json-formatter-dark.json-formatter-row:hover \u003e a \u003e .json-formatter-preview-text {\\n  opacity: 0.6;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open \u003e .json-formatter-toggler-link .json-formatter-toggler:after {\\n  transform: rotate(90deg);\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open \u003e .json-formatter-children:after {\\n  display: inline-block;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open \u003e a \u003e .json-formatter-preview-text {\\n  display: none;\\n}\\n.json-formatter-dark.json-formatter-row.json-formatter-open.json-formatter-empty:after {\\n  display: block;\\n}\\n\u0027);var c\u003d/(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?\u003d[012])\\d:[0-5])\\d\\s*[ap]m)?$/,p\u003d/\\d{2}:\\d{2}:\\d{2} GMT-\\d{4}/,j\u003d/\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/,h\u003dwindow.requestAnimationFrame||function(t){return t(),0},u\u003d{hoverPreviewEnabled:!1,hoverPreviewArrayCount:100,hoverPreviewFieldCount:5,animateOpen:!0,animateClose:!0,theme:null,useToJSON:!0,sortPropertiesBy:null},g\u003dfunction(){function t(t,e,r,n){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d1),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003du),this.json\u003dt,this.open\u003de,this.config\u003dr,this.key\u003dn,this._isOpen\u003dnull,void 0\u003d\u003d\u003dthis.config.hoverPreviewEnabled\u0026\u0026(this.config.hoverPreviewEnabled\u003du.hoverPreviewEnabled),void 0\u003d\u003d\u003dthis.config.hoverPreviewArrayCount\u0026\u0026(this.config.hoverPreviewArrayCount\u003du.hoverPreviewArrayCount),void 0\u003d\u003d\u003dthis.config.hoverPreviewFieldCount\u0026\u0026(this.config.hoverPreviewFieldCount\u003du.hoverPreviewFieldCount),void 0\u003d\u003d\u003dthis.config.useToJSON\u0026\u0026(this.config.useToJSON\u003du.useToJSON),\"\"\u003d\u003d\u003dthis.key\u0026\u0026(this.key\u003d\u0027\"\"\u0027)}return Object.defineProperty(t.prototype,\"isOpen\",{get:function(){return null!\u003d\u003dthis._isOpen?this._isOpen:this.open\u003e0},set:function(t){this._isOpen\u003dt},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isDate\",{get:function(){return this.json instanceof Date||\"string\"\u003d\u003d\u003dthis.type\u0026\u0026(c.test(this.json)||j.test(this.json)||p.test(this.json))},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isUrl\",{get:function(){return\"string\"\u003d\u003d\u003dthis.type\u0026\u00260\u003d\u003d\u003dthis.json.indexOf(\"http\")},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isArray\",{get:function(){return Array.isArray(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isObject\",{get:function(){return s(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmptyObject\",{get:function(){return!this.keys.length\u0026\u0026!this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"isEmpty\",{get:function(){return this.isEmptyObject||this.keys\u0026\u0026!this.keys.length\u0026\u0026this.isArray},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"useToJSON\",{get:function(){return this.config.useToJSON\u0026\u0026\"stringifiable\"\u003d\u003d\u003dthis.type},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"hasKey\",{get:function(){return void 0!\u003d\u003dthis.key},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"constructorName\",{get:function(){return a(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"type\",{get:function(){return this.config.useToJSON\u0026\u0026this.json\u0026\u0026this.json.toJSON?\"stringifiable\":i(this.json)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,\"keys\",{get:function(){if(this.isObject){var t\u003dObject.keys(this.json);return!this.isArray\u0026\u0026this.config.sortPropertiesBy?t.sort(this.config.sortPropertiesBy):t}return[]},enumerable:!0,configurable:!0}),t.prototype.toggleOpen\u003dfunction(){this.isOpen\u003d!this.isOpen,this.element\u0026\u0026(this.isOpen?this.appendChildren(this.config.animateOpen):this.removeChildren(this.config.animateClose),this.element.classList.toggle(l(\"open\")))},t.prototype.openAtDepth\u003dfunction(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d1),t\u003c0||(this.open\u003dt,this.isOpen\u003d0!\u003d\u003dt,this.element\u0026\u0026(this.removeChildren(!1),0\u003d\u003d\u003dt?this.element.classList.remove(l(\"open\")):(this.appendChildren(this.config.animateOpen),this.element.classList.add(l(\"open\")))))},t.prototype.getInlinepreview\u003dfunction(){var t\u003dthis;if(this.isArray)return this.json.length\u003ethis.config.hoverPreviewArrayCount?\"Array[\"+this.json.length+\"]\":\"[\"+this.json.map(m).join(\", \")+\"]\";var e\u003dthis.keys,r\u003de.slice(0,this.config.hoverPreviewFieldCount).map((function(e){return e+\":\"+m(t.json[e])})),n\u003de.length\u003e\u003dthis.config.hoverPreviewFieldCount?\"…\":\"\";return\"{\"+r.join(\", \")+n+\"}\"},t.prototype.render\u003dfunction(){this.element\u003dd(\"div\",\"row\");var t\u003dthis.isObject?d(\"a\",\"toggler-link\"):d(\"span\");if(this.isObject\u0026\u0026!this.useToJSON\u0026\u0026t.appendChild(d(\"span\",\"toggler\")),this.hasKey\u0026\u0026t.appendChild(d(\"span\",\"key\",this.key+\":\")),this.isObject\u0026\u0026!this.useToJSON){var e\u003dd(\"span\",\"value\"),r\u003dd(\"span\"),n\u003dd(\"span\",\"constructor-name\",this.constructorName);if(r.appendChild(n),this.isArray){var o\u003dd(\"span\");o.appendChild(d(\"span\",\"bracket\",\"[\")),o.appendChild(d(\"span\",\"number\",this.json.length)),o.appendChild(d(\"span\",\"bracket\",\"]\")),r.appendChild(o)}e.appendChild(r),t.appendChild(e)}else{(e\u003dthis.isUrl?d(\"a\"):d(\"span\")).classList.add(l(this.type)),this.isDate\u0026\u0026e.classList.add(l(\"date\")),this.isUrl\u0026\u0026(e.classList.add(l(\"url\")),e.setAttribute(\"href\",this.json));var i\u003df(this.type,this.json,this.useToJSON?this.json.toJSON():this.json);e.appendChild(document.createTextNode(i)),t.appendChild(e)}if(this.isObject\u0026\u0026this.config.hoverPreviewEnabled){var s\u003dd(\"span\",\"preview-text\");s.appendChild(document.createTextNode(this.getInlinepreview())),t.appendChild(s)}var a\u003dd(\"div\",\"children\");return this.isObject\u0026\u0026a.classList.add(l(\"object\")),this.isArray\u0026\u0026a.classList.add(l(\"array\")),this.isEmpty\u0026\u0026a.classList.add(l(\"empty\")),this.config\u0026\u0026this.config.theme\u0026\u0026this.element.classList.add(l(this.config.theme)),this.isOpen\u0026\u0026this.element.classList.add(l(\"open\")),this.element.appendChild(t),this.element.appendChild(a),this.isObject\u0026\u0026this.isOpen\u0026\u0026this.appendChildren(),this.isObject\u0026\u0026!this.useToJSON\u0026\u0026t.addEventListener(\"click\",this.toggleOpen.bind(this)),this.element},t.prototype.appendChildren\u003dfunction(e){var r\u003dthis;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1);var n\u003dthis.element.querySelector(\"div.\"+l(\"children\"));if(n\u0026\u0026!this.isEmpty)if(e){var o\u003d0,i\u003dfunction(){var e\u003dr.keys[o],s\u003dnew t(r.json[e],r.open-1,r.config,e);n.appendChild(s.render()),(o+\u003d1)\u003cr.keys.length\u0026\u0026(o\u003e10?i():h(i))};h(i)}else this.keys.forEach((function(e){var o\u003dnew t(r.json[e],r.open-1,r.config,e);n.appendChild(o.render())}))},t.prototype.removeChildren\u003dfunction(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d!1);var e\u003dthis.element.querySelector(\"div.\"+l(\"children\"));if(t){var r\u003d0,n\u003dfunction(){e\u0026\u0026e.children.length\u0026\u0026(e.removeChild(e.children[0]),(r+\u003d1)\u003e10?n():h(n))};h(n)}else e\u0026\u0026(e.innerHTML\u003d\"\")},t}();r.default\u003dg},\n      \"1767172ffa\": function _(e,t,i,s,l){s();const n\u003de(\"tslib\"),o\u003de(\"@bokehjs/models/widgets/input_widget\"),a\u003dn.__importStar(e(\"@bokehjs/styles/buttons.css\")),h\u003da,d\u003de(\"@bokehjs/core/dom\"),_\u003de(\"@bokehjs/core/enums\");class r extends o.InputWidgetView{constructor(){super(...arguments),this._downloadable\u003d!1,this._embed\u003d!1,this._prev_href\u003d\"\",this._prev_download\u003d\"\"}initialize(){super.initialize(),this.model.data\u0026\u0026this.model.filename\u0026\u0026(this._embed\u003d!0)}connect_signals(){super.connect_signals(),this.connect(this.model.properties.button_type.change,(()\u003d\u003ethis._update_button_style())),this.connect(this.model.properties.filename.change,(()\u003d\u003ethis._update_download())),this.connect(this.model.properties._transfers.change,(()\u003d\u003ethis._handle_click())),this.connect(this.model.properties.label.change,(()\u003d\u003ethis._update_label())),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.set_disabled()))}render(){super.render(),this.group_el.style.display\u003d\"flex\",this.group_el.style.alignItems\u003d\"stretch\",this.anchor_el\u003ddocument.createElement(\"a\"),this._update_button_style(),this._update_label(),this.model.disabled?(this.anchor_el.setAttribute(\"disabled\",\"\"),this._downloadable\u003d!1):(this.anchor_el.removeAttribute(\"disabled\"),this._prev_download\u0026\u0026(this.anchor_el.download\u003dthis._prev_download),this._prev_href\u0026\u0026(this.anchor_el.href\u003dthis._prev_href),this.anchor_el.download\u0026\u0026this.anchor_el.download\u0026\u0026(this._downloadable\u003d!0)),this._embed?this._make_link_downloadable():(this._click_listener\u003dthis._increment_clicks.bind(this),this.anchor_el.addEventListener(\"click\",this._click_listener)),this.group_el.appendChild(this.anchor_el),this.input_el\u003dd.input({type:\"bk_btn, bk_btn_type\"}),this.input_el.addEventListener(\"change\",(()\u003d\u003ethis.change_input()))}styles(){return[...super.styles(),a.default]}_increment_clicks(){this.model.clicks\u003dthis.model.clicks+1}_handle_click(){!this.model.auto\u0026\u0026this._downloadable||(this._make_link_downloadable(),!this._embed\u0026\u0026this.model.auto\u0026\u0026(this.anchor_el.removeEventListener(\"click\",this._click_listener),this.anchor_el.click(),this.anchor_el.removeAttribute(\"href\"),this.anchor_el.removeAttribute(\"download\"),this.anchor_el.addEventListener(\"click\",this._click_listener)),this._prev_href\u003dthis.anchor_el.getAttribute(\"href\"),this._prev_download\u003dthis.anchor_el.getAttribute(\"download\"))}_make_link_downloadable(){this._update_href(),this._update_download(),this.anchor_el.download\u0026\u0026this.anchor_el.href\u0026\u0026(this._downloadable\u003d!0)}_update_href(){if(this.model.data){const e\u003dfunction(e){const t\u003datob(e.split(\",\")[1]),i\u003de.split(\",\")[0].split(\":\")[1].split(\";\")[0],s\u003dnew ArrayBuffer(t.length),l\u003dnew Uint8Array(s);for(let e\u003d0;e\u003ct.length;e++)l[e]\u003dt.charCodeAt(e);return new Blob([s],{type:i})}(this.model.data);this.anchor_el.href\u003dURL.createObjectURL(e)}}_update_download(){this.model.filename\u0026\u0026(this.anchor_el.download\u003dthis.model.filename)}_update_label(){this.anchor_el.textContent\u003dthis.model.label}_update_button_style(){const e\u003dh[`btn_${this.model.button_type}`];if(this.anchor_el.hasAttribute(\"class\")){const t\u003dthis.anchor_el.classList.item(1);t\u0026\u0026this.anchor_el.classList.replace(t,e)}else this.anchor_el.classList.add(h.btn),this.anchor_el.classList.add(e)}set_disabled(){this.model.disabled?this.anchor_el.setAttribute(\"disabled\",\"\"):this.anchor_el.removeAttribute(\"disabled\")}}i.FileDownloadView\u003dr,r.__name__\u003d\"FileDownloadView\";class c extends o.InputWidget{constructor(e){super(e)}static init_FileDownload(){this.prototype.default_view\u003dr,this.define((({Boolean:e,Int:t,Nullable:i,String:s})\u003d\u003e({auto:[e,!1],clicks:[t,0],data:[i(s),null],label:[s,\"Download\"],filename:[i(s),null],button_type:[_.ButtonType,\"default\"],_transfers:[t,0]}))),this.override({title:\"\"})}}i.FileDownload\u003dc,c.__name__\u003d\"FileDownload\",c.__module__\u003d\"panel.models.widgets\",c.init_FileDownload()},\n      \"7b859fb3cf\": function _(e,t,i,a,n){a();const s\u003de(\"@bokehjs/models/widgets/markup\"),r\u003de(\"4c755983eb\");class l extends r.PanelMarkupView{render(){super.render(),this.markup_el.innerHTML\u003dthis.model.text,window.renderMathInElement\u0026\u0026window.renderMathInElement(this.el,{delimiters:[{left:\"$$\",right:\"$$\",display:!0},{left:\"\\\\[\",right:\"\\\\]\",display:!0},{left:\"$\",right:\"$\",display:!1},{left:\"\\\\(\",right:\"\\\\)\",display:!1}]})}}i.KaTeXView\u003dl,l.__name__\u003d\"KaTeXView\";class d extends s.Markup{constructor(e){super(e)}static init_KaTeX(){this.prototype.default_view\u003dl}}i.KaTeX\u003dd,d.__name__\u003d\"KaTeX\",d.__module__\u003d\"panel.models.katex\",d.init_KaTeX()},\n      \"642aa56b24\": function _(o,e,t,i,a){i();const h\u003do(\"@bokehjs/core/view\"),n\u003do(\"@bokehjs/model\");class s extends h.View{initialize(){super.initialize(),this.model.pathname\u003dwindow.location.pathname,this.model.search\u003dwindow.location.search,this.model.hash\u003dwindow.location.hash,this.model.href\u003dwindow.location.href,this.model.hostname\u003dwindow.location.hostname,this.model.protocol\u003dwindow.location.protocol,this.model.port\u003dwindow.location.port}connect_signals(){super.connect_signals(),this.connect(this.model.properties.pathname.change,(()\u003d\u003ethis.update(\"pathname\"))),this.connect(this.model.properties.search.change,(()\u003d\u003ethis.update(\"search\"))),this.connect(this.model.properties.hash.change,(()\u003d\u003ethis.update(\"hash\"))),this.connect(this.model.properties.reload.change,(()\u003d\u003ethis.update(\"reload\")))}update(o){this.model.reload\u0026\u0026\"reload\"!\u003d\u003do?(\"pathname\"\u003d\u003do\u0026\u0026(window.location.pathname\u003dthis.model.pathname),\"search\"\u003d\u003do\u0026\u0026(window.location.search\u003dthis.model.search),\"hash\"\u003d\u003do\u0026\u0026(window.location.hash\u003dthis.model.hash)):(window.history.pushState({},\"\",`${this.model.pathname}${this.model.search}${this.model.hash}`),this.model.href\u003dwindow.location.href,\"reload\"\u003d\u003d\u003do\u0026\u0026window.location.reload())}}t.LocationView\u003ds,s.__name__\u003d\"LocationView\";class c extends n.Model{constructor(o){super(o)}static init_Location(){this.prototype.default_view\u003ds,this.define((({Boolean:o,String:e})\u003d\u003e({href:[e,\"\"],hostname:[e,\"\"],pathname:[e,\"\"],protocol:[e,\"\"],port:[e,\"\"],search:[e,\"\"],hash:[e,\"\"],reload:[o,!1]})))}}t.Location\u003dc,c.__name__\u003d\"Location\",c.__module__\u003d\"panel.models.location\",c.init_Location()},\n      \"0c21036737\": function _(e,t,a,i,s){i();const h\u003de(\"@bokehjs/models/widgets/markup\"),_\u003de(\"4c755983eb\");class n extends _.PanelMarkupView{initialize(){super.initialize(),this._hub\u003dwindow.MathJax.Hub,this._hub.Config({tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]}})}render(){super.render(),this._hub\u0026\u0026(this.markup_el.innerHTML\u003dthis.model.text,this._hub.Queue([\"Typeset\",this._hub,this.markup_el]))}}a.MathJaxView\u003dn,n.__name__\u003d\"MathJaxView\";class u extends h.Markup{constructor(e){super(e)}static init_MathJax(){this.prototype.default_view\u003dn}}a.MathJax\u003du,u.__name__\u003d\"MathJax\",u.__module__\u003d\"panel.models.mathjax\",u.init_MathJax()},\n      \"84a772681d\": function _(e,t,i,s,n){s();const o\u003de(\"@bokehjs/models/layouts/html_box\"),l\u003de(\"@bokehjs/core/dom\"),r\u003de(\"@bokehjs/models/sources/column_data_source\"),c\u003de(\"4c755983eb\"),h\u003d[\"perspective-viewer-material\",\"perspective-viewer-material-dark\",\"perspective-viewer-material-dense\",\"perspective-viewer-material-dense-dark\",\"perspective-viewer-vaporwave\"];function p(e){return!h.includes(e)}function a(e){return\"perspective-viewer-\"+e}class u extends c.PanelHTMLBoxView{constructor(){super(...arguments),this._updating\u003d!1,this._config_listener\u003dnull,this._event_listener\u003dnull,this._loaded\u003d!1}connect_signals(){super.connect_signals(),this.connect(this.model.source.properties.data.change,(()\u003d\u003ethis.setData())),this.connect(this.model.properties.toggle_config.change,(()\u003d\u003e{this.perspective_element.toggleConfig(),this.fix_layout()})),this.connect(this.model.properties.columns.change,(()\u003d\u003e{this.updateAttribute(\"columns\",this.model.columns,!0)})),this.connect(this.model.properties.computed_columns.change,(()\u003d\u003e{this.updateAttribute(\"computed-columns\",this.model.computed_columns,!0)})),this.connect(this.model.properties.column_pivots.change,(()\u003d\u003e{this.updateAttribute(\"column-pivots\",this.model.column_pivots,!0)})),this.connect(this.model.properties.row_pivots.change,(()\u003d\u003e{this.updateAttribute(\"row-pivots\",this.model.row_pivots,!0)})),this.connect(this.model.properties.aggregates.change,(()\u003d\u003e{this.updateAttribute(\"aggregates\",this.model.aggregates,!0)})),this.connect(this.model.properties.filters.change,(()\u003d\u003e{this.updateAttribute(\"filters\",this.model.filters,!0)})),this.connect(this.model.properties.sort.change,(()\u003d\u003e{this.updateAttribute(\"sort\",this.model.sort,!0)})),this.connect(this.model.properties.plugin.change,(()\u003d\u003e{this.updateAttribute(\"plugin\",this.model.plugin,!1)})),this.connect(this.model.properties.selectable.change,(()\u003d\u003e{this.updateAttribute(\"selectable\",this.model.selectable,!0)})),this.connect(this.model.properties.editable.change,(()\u003d\u003e{this.updateAttribute(\"editable\",this.model.editable,!0)})),this.connect(this.model.properties.theme.change,(()\u003d\u003ethis.updateTheme())),null!\u003dthis.model.document\u0026\u0026(this._event_listener\u003de\u003d\u003ethis.on_event(e),this.model.document.on_change(this._event_listener))}disconnect_signals(){null!\u003dthis._config_listener\u0026\u0026this.perspective_element.removeEventListener(\"perspective-config-update\",this._config_listener),this._config_listener\u003dnull,null!\u003dthis.model.document\u0026\u0026null!\u003dthis._event_listener\u0026\u0026this.model.document.remove_on_change(this._event_listener),this._event_listener\u003dnull,super.disconnect_signals()}render(){super.render(),this.worker\u003dwindow.perspective.worker(),this.table\u003dthis.worker.table(this.model.schema),this.table.update(this.data);const e\u003dl.div({class:\"pnx-perspective-viewer\",style:{zIndex:0}});c.set_size(e,this.model),e.innerHTML\u003dthis.getInnerHTML(),this.perspective_element\u003de.children[0],c.set_size(this.perspective_element,this.model),this.el.appendChild(e),this.perspective_element.load(this.table).then((()\u003d\u003e{this.update_config(),this._config_listener\u003d()\u003d\u003ethis.sync_config(),this.model.toggle_config\u0026\u0026this.perspective_element.toggleConfig(),this.perspective_element.addEventListener(\"perspective-config-update\",this._config_listener),this._loaded\u003d!0}))}fix_layout(){this.update_layout(),this.compute_layout(),this.invalidate_layout()}sync_config(){if(this._updating)return;const e\u003dthis.perspective_element.save(),t\u003d{};for(const i in e){const s\u003di.replace(\"-\",\"_\"),n\u003de[i];void 0\u003d\u003d\u003dn||\"plugin\"\u003d\u003ds\u0026\u0026\"debug\"\u003d\u003d\u003dn||(t[s]\u003dn)}this._updating\u003d!0,this.model.setv(t),this._updating\u003d!1}update_config(){if(this._updating)return;const e\u003dthis.perspective_element.save();for(const t in e){const i\u003dt.replace(\"-\",\"_\");let s\u003dthis.model.property(i).get_value();e[t]!\u003d\u003ds\u0026\u0026(this._updating\u003d!0,\"plugin\"!\u003d\u003di\u0026\u0026(s\u003dJSON.stringify(s)),this.perspective_element.setAttribute(t,s),this._updating\u003d!1)}}on_event(e){null!\u003d(e\u003de.hint)\u0026\u0026null!\u003de.column_source\u0026\u0026e.column_source.id\u003d\u003dthis.model.source.id\u0026\u0026(void 0!\u003d\u003de.rollover?this.stream(e.data,e.rollover):void 0!\u003d\u003de.patches\u0026\u0026this.patch(e.patches))}get data(){const e\u003d{};for(const t of this.model.source.columns())e[t]\u003dthis.model.source.get_array(t);return e}stream(e,t){this._loaded\u0026\u0026(null\u003d\u003dt?this.table.update(e):this.table.replace(this.data))}patch(e){this.table.replace(this.data)}getInnerHTML(){let e\u003d\"\u003cperspective-viewer style\u003d\u0027height:100%;width:100%;\u0027\";var t,i;return e+\u003d(t\u003d\"class\",null\u003d\u003d(i\u003da(this.model.theme))?\"\":(\"string\"!\u003dtypeof i\u0026\u0026(i\u003dJSON.stringify(i)),\" \"+t+\"\u003d\u0027\"+i+\"\u0027\")),e+\u003d\"\u003e\u003c/perspective-viewer\u003e\",e}setData(){this._loaded\u0026\u0026this.table.load(this.data)}updateAttribute(e,t,i){if(this._updating)return;t!\u003dthis.perspective_element.save()[e]\u0026\u0026(i\u0026\u0026(t\u003dJSON.stringify(t)),this._updating\u003d!0,this.perspective_element.setAttribute(e,t),this._updating\u003d!1)}updateTheme(){let e\u003dthis.perspective_element.getAttribute(\"class\"),t\u003dthis.toNewClassAttribute(e,this.model.theme);this.perspective_element.setAttribute(\"class\",t)}toNewClassAttribute(e,t){let i\u003d[];return null!\u003de\u0026\u0026(i\u003de.split(\" \").filter(p)),i.push(a(t)),i.join(\" \")}}i.PerspectiveView\u003du,u.__name__\u003d\"PerspectiveView\";class d extends o.HTMLBox{constructor(e){super(e)}static init_Perspective(){this.prototype.default_view\u003du,this.define((({Any:e,Array:t,Boolean:i,Ref:s,Nullable:n,String:o})\u003d\u003e({aggregates:[e],column_pivots:[n(t(o))],columns:[t(o)],computed_columns:[n(t(o))],editable:[n(i)],filters:[n(t(e))],plugin:[o],plugin_config:[e],row_pivots:[n(t(o))],selectable:[n(i)],schema:[e,{}],toggle_config:[i,!0],sort:[n(t(t(o)))],source:[s(r.ColumnDataSource)],theme:[o]})))}}i.Perspective\u003dd,d.__name__\u003d\"Perspective\",d.__module__\u003d\"panel.models.perspective\",d.init_Perspective()},\n      \"2e8044c920\": function _(e,t,i,s,o){s();const l\u003de(\"@bokehjs/core/kinds\"),n\u003de(\"@bokehjs/core/dom\"),a\u003de(\"@bokehjs/models/widgets/widget\");function r(e){e.forEach((e\u003d\u003ee.style.borderStyle\u003d\"inset\"))}function d(e){e.forEach((e\u003d\u003ee.style.borderStyle\u003d\"outset\"))}class h extends a.WidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.loop_policy.change,(()\u003d\u003ethis.set_loop_state(this.model.loop_policy))),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.toggle_disable())),this.connect(this.model.properties.show_loop_controls.change,(()\u003d\u003e{this.model.show_loop_controls\u0026\u0026this.loop_state.parentNode!\u003dthis.groupEl?this.groupEl.appendChild(this.loop_state):this.model.show_loop_controls||this.loop_state.parentNode!\u003dthis.groupEl||this.groupEl.removeChild(this.loop_state)}))}toggle_disable(){this.sliderEl.disabled\u003dthis.model.disabled;for(const e of this.buttonEl.children){e.disabled\u003dthis.model.disabled}for(const e of this.loop_state.children)if(\"input\"\u003d\u003de.tagName){e.disabled\u003dthis.model.disabled}}get_height(){return 250}render(){if(null!\u003dthis.sliderEl)return this.sliderEl.min\u003dString(this.model.start),this.sliderEl.max\u003dString(this.model.end),void(this.sliderEl.value\u003dString(this.model.value));super.render(),this.groupEl\u003dn.div(),this.groupEl.style.display\u003d\"flex\",this.groupEl.style.flexDirection\u003d\"column\",this.groupEl.style.alignItems\u003d\"center\",this.sliderEl\u003ddocument.createElement(\"input\"),this.sliderEl.style.width\u003d\"100%\",this.sliderEl.setAttribute(\"type\",\"range\"),this.sliderEl.value\u003dString(this.model.value),this.sliderEl.min\u003dString(this.model.start),this.sliderEl.max\u003dString(this.model.end),this.sliderEl.onchange\u003de\u003d\u003ethis.set_frame(parseInt(e.target.value));const e\u003dn.div();this.buttonEl\u003de,e.style.cssText\u003d\"margin: 0 auto; display: flex; padding: 5px; align-items: stretch; width: 100%;\";const t\u003d\"text-align: center; min-width: 20px; flex-grow: 1; margin: 2px\",i\u003d\"text-align: center; min-width: 40px; flex-grow: 2; margin: 2px\",s\u003ddocument.createElement(\"button\");s.style.cssText\u003dt,s.appendChild(document.createTextNode(\"–\")),s.onclick\u003d()\u003d\u003ethis.slower(),e.appendChild(s);const o\u003ddocument.createElement(\"button\");o.style.cssText\u003di,o.appendChild(document.createTextNode(\"❚◀◀\")),o.onclick\u003d()\u003d\u003ethis.first_frame(),e.appendChild(o);const l\u003ddocument.createElement(\"button\");l.style.cssText\u003di,l.appendChild(document.createTextNode(\"❚◀\")),l.onclick\u003d()\u003d\u003ethis.previous_frame(),e.appendChild(l);const a\u003ddocument.createElement(\"button\");a.style.cssText\u003di,a.appendChild(document.createTextNode(\"◀\")),a.onclick\u003d()\u003d\u003ethis.reverse_animation(),e.appendChild(a);const h\u003ddocument.createElement(\"button\");h.style.cssText\u003di,h.appendChild(document.createTextNode(\"❚❚\")),h.onclick\u003d()\u003d\u003ethis.pause_animation(),e.appendChild(h);const c\u003ddocument.createElement(\"button\");c.style.cssText\u003di,c.appendChild(document.createTextNode(\"▶\")),c.onclick\u003d()\u003d\u003ethis.play_animation(),e.appendChild(c);const p\u003ddocument.createElement(\"button\");p.style.cssText\u003di,p.appendChild(document.createTextNode(\"▶❚\")),p.onclick\u003d()\u003d\u003ethis.next_frame(),e.appendChild(p);const m\u003ddocument.createElement(\"button\");m.style.cssText\u003di,m.appendChild(document.createTextNode(\"▶▶❚\")),m.onclick\u003d()\u003d\u003ethis.last_frame(),e.appendChild(m);const _\u003ddocument.createElement(\"button\");_.style.cssText\u003dt,_.appendChild(document.createTextNode(\"+\")),_.onclick\u003d()\u003d\u003ethis.faster(),e.appendChild(_),this._toggle_reverse\u003d()\u003d\u003e{d([h,c]),r([a])},this._toogle_pause\u003d()\u003d\u003e{d([a,c]),r([h])},this._toggle_play\u003d()\u003d\u003e{d([a,h]),r([c])},this.loop_state\u003ddocument.createElement(\"form\"),this.loop_state.style.cssText\u003d\"margin: 0 auto; display: table\";const u\u003ddocument.createElement(\"input\");u.type\u003d\"radio\",u.value\u003d\"once\",u.name\u003d\"state\";const g\u003ddocument.createElement(\"label\");g.innerHTML\u003d\"Once\",g.style.cssText\u003d\"padding: 0 10px 0 5px; user-select:none;\";const f\u003ddocument.createElement(\"input\");f.setAttribute(\"type\",\"radio\"),f.setAttribute(\"value\",\"loop\"),f.setAttribute(\"name\",\"state\");const v\u003ddocument.createElement(\"label\");v.innerHTML\u003d\"Loop\",v.style.cssText\u003d\"padding: 0 10px 0 5px; user-select:none;\";const y\u003ddocument.createElement(\"input\");y.setAttribute(\"type\",\"radio\"),y.setAttribute(\"value\",\"reflect\"),y.setAttribute(\"name\",\"state\");const x\u003ddocument.createElement(\"label\");x.innerHTML\u003d\"Reflect\",x.style.cssText\u003d\"padding: 0 10px 0 5px; user-select:none;\",\"once\"\u003d\u003dthis.model.loop_policy?u.checked\u003d!0:\"loop\"\u003d\u003dthis.model.loop_policy?f.checked\u003d!0:y.checked\u003d!0,this.loop_state.appendChild(u),this.loop_state.appendChild(g),this.loop_state.appendChild(f),this.loop_state.appendChild(v),this.loop_state.appendChild(y),this.loop_state.appendChild(x),this.groupEl.appendChild(this.sliderEl),this.groupEl.appendChild(e),this.model.show_loop_controls\u0026\u0026this.groupEl.appendChild(this.loop_state),this.toggle_disable(),this.el.appendChild(this.groupEl)}set_frame(e){this.model.value!\u003de\u0026\u0026(this.model.value\u003de),this.sliderEl.value!\u003dString(e)\u0026\u0026(this.sliderEl.value\u003dString(e))}get_loop_state(){for(var e\u003dthis.loop_state.state,t\u003d0;t\u003ce.length;t++){var i\u003de[t];if(i.checked)return i.value}return\"once\"}set_loop_state(e){for(var t\u003dthis.loop_state.state,i\u003d0;i\u003ct.length;i++){var s\u003dt[i];s.value\u003d\u003de\u0026\u0026(s.checked\u003d!0)}}next_frame(){this.set_frame(Math.min(this.model.end,this.model.value+this.model.step))}previous_frame(){this.set_frame(Math.max(this.model.start,this.model.value-this.model.step))}first_frame(){this.set_frame(this.model.start)}last_frame(){this.set_frame(this.model.end)}slower(){this.model.interval\u003dMath.round(this.model.interval/.7),this.model.direction\u003e0?this.play_animation():this.model.direction\u003c0\u0026\u0026this.reverse_animation()}faster(){this.model.interval\u003dMath.round(.7*this.model.interval),this.model.direction\u003e0?this.play_animation():this.model.direction\u003c0\u0026\u0026this.reverse_animation()}anim_step_forward(){if(this.model.value\u003cthis.model.end)this.next_frame();else{var e\u003dthis.get_loop_state();\"loop\"\u003d\u003de?this.first_frame():\"reflect\"\u003d\u003de?(this.last_frame(),this.reverse_animation()):(this.pause_animation(),this.last_frame())}}anim_step_reverse(){if(this.model.value\u003ethis.model.start)this.previous_frame();else{var e\u003dthis.get_loop_state();\"loop\"\u003d\u003de?this.last_frame():\"reflect\"\u003d\u003de?(this.first_frame(),this.play_animation()):(this.pause_animation(),this.first_frame())}}pause_animation(){this._toogle_pause(),this.model.direction\u003d0,this.timer\u0026\u0026(clearInterval(this.timer),this.timer\u003dnull)}play_animation(){this.pause_animation(),this._toggle_play(),this.model.direction\u003d1,this.timer||(this.timer\u003dsetInterval((()\u003d\u003ethis.anim_step_forward()),this.model.interval))}reverse_animation(){this.pause_animation(),this._toggle_reverse(),this.model.direction\u003d-1,this.timer||(this.timer\u003dsetInterval((()\u003d\u003ethis.anim_step_reverse()),this.model.interval))}}i.PlayerView\u003dh,h.__name__\u003d\"PlayerView\",i.LoopPolicy\u003dl.Enum(\"once\",\"loop\",\"reflect\");class c extends a.Widget{constructor(e){super(e)}static init_Player(){this.prototype.default_view\u003dh,this.define((({Boolean:e,Int:t})\u003d\u003e({direction:[t,0],interval:[t,500],start:[t,0],end:[t,10],step:[t,1],loop_policy:[i.LoopPolicy,\"once\"],value:[t,0],show_loop_controls:[e,!0]}))),this.override({width:400})}}i.Player\u003dc,c.__name__\u003d\"Player\",c.__module__\u003d\"panel.models.widgets\",c.init_Player()},\n      \"c23bb1717d\": function _(t,e,o,r,l){r();const i\u003dt(\"@bokehjs/core/dom\"),s\u003dt(\"@bokehjs/core/util/object\"),a\u003dt(\"@bokehjs/core/util/eq\"),n\u003dt(\"@bokehjs/models/layouts/html_box\"),p\u003dt(\"@bokehjs/models/sources/column_data_source\"),_\u003dt(\"99a25e6992\"),h\u003dt(\"990b5dd5c7\"),u\u003dt(\"4c755983eb\"),d\u003d(t,e,o)\u003d\u003e{let r\u003dArray.isArray(e)?[]:{};if(\"click\"\u003d\u003d\u003do||\"hover\"\u003d\u003d\u003do||\"selected\"\u003d\u003d\u003do){const o\u003d[];if(null\u003d\u003de)return null;const l\u003dt.data;for(let t\u003d0;t\u003ce.points.length;t++){const r\u003de.points[t];let i\u003d{};for(let t in r){const e\u003dr[t];!r.hasOwnProperty(t)||Array.isArray(e)||h.isPlainObject(e)||(i[t]\u003de)}null!\u003dr\u0026\u0026(r.hasOwnProperty(\"curveNumber\")\u0026\u0026r.hasOwnProperty(\"pointNumber\")\u0026\u0026l[r.curveNumber].hasOwnProperty(\"customdata\")\u0026\u0026(i.customdata\u003dl[r.curveNumber].customdata[r.pointNumber]),r.hasOwnProperty(\"pointNumbers\")\u0026\u0026(i.pointNumbers\u003dr.pointNumbers)),o[t]\u003di}r.points\u003do}else if(\"relayout\"\u003d\u003d\u003do||\"restyle\"\u003d\u003d\u003do)for(let t in e)e.hasOwnProperty(t)\u0026\u0026(r[t]\u003de[t]);return e.hasOwnProperty(\"range\")\u0026\u0026(r.range\u003de.range),e.hasOwnProperty(\"lassoPoints\")\u0026\u0026(r.lassoPoints\u003de.lassoPoints),r};class c extends u.PanelHTMLBoxView{constructor(){super(...arguments),this._settingViewport\u003d!1,this._plotInitialized\u003d!1,this._reacting\u003d!1,this._relayouting\u003d!1,this._end_relayouting\u003d_.debounce((()\u003d\u003e{this._relayouting\u003d!1}),2e3,!1)}connect_signals(){super.connect_signals();const{data:t,data_sources:e,layout:o,relayout:r,restyle:l}\u003dthis.model.properties;this.on_change([t,e,o],(()\u003d\u003e{const t\u003dthis.model._render_count;setTimeout((()\u003d\u003e{this.model._render_count\u003d\u003d\u003dt\u0026\u0026(this.model._render_count+\u003d1)}),250)})),this.on_change([r],(()\u003d\u003e{null!\u003dthis.model.relayout\u0026\u0026(window.Plotly.relayout(this._layout_wrapper,this.model.relayout),this.model.relayout\u003dnull)})),this.on_change([l],(()\u003d\u003e{null!\u003dthis.model.restyle\u0026\u0026(window.Plotly.restyle(this._layout_wrapper,this.model.restyle.data,this.model.restyle.traces),this.model.restyle\u003dnull)})),this.connect(this.model.properties.viewport_update_policy.change,(()\u003d\u003e{this._updateSetViewportFunction()})),this.connect(this.model.properties.viewport_update_throttle.change,(()\u003d\u003e{this._updateSetViewportFunction()})),this.connect(this.model.properties._render_count.change,(()\u003d\u003ethis.plot())),this.connect(this.model.properties.viewport.change,(()\u003d\u003ethis._updateViewportFromProperty()))}render(){super.render(),this._layout_wrapper\u003di.div({style:\"height: 100%; width: 100%\"}),this.el.appendChild(this._layout_wrapper),window.Plotly\u0026\u0026this.plot()}_trace_data(){const t\u003d[];for(let e\u003d0;e\u003cthis.model.data.length;e++)t.push(this._get_trace(e,!1));return t}_layout_data(){const t\u003dh.deepCopy(this.model.layout);if(this._relayouting){const{layout:e}\u003dthis._layout_wrapper;Object.keys(e).reduce(((e,o)\u003d\u003e{\"axis\"\u003d\u003d\u003do.slice(1,5)\u0026\u0026\"range\"in e\u0026\u0026(t[o].range\u003de.range)}),{})}return t}_install_callbacks(){this._layout_wrapper.on(\"plotly_relayout\",(t\u003d\u003e{!0!\u003d\u003dt._update_from_property\u0026\u0026(this.model.relayout_data\u003dd(this._layout_wrapper,t,\"relayout\"),this._updateViewportProperty(),this._end_relayouting())})),this._layout_wrapper.on(\"plotly_relayouting\",(()\u003d\u003e{\"mouseup\"!\u003d\u003dthis.model.viewport_update_policy\u0026\u0026(this._relayouting\u003d!0,this._updateViewportProperty())})),this._layout_wrapper.on(\"plotly_restyle\",(t\u003d\u003e{this.model.restyle_data\u003dd(this._layout_wrapper,t,\"restyle\"),this._updateViewportProperty()})),this._layout_wrapper.on(\"plotly_click\",(t\u003d\u003e{this.model.click_data\u003dd(this._layout_wrapper,t,\"click\")})),this._layout_wrapper.on(\"plotly_hover\",(t\u003d\u003e{this.model.hover_data\u003dd(this._layout_wrapper,t,\"hover\")})),this._layout_wrapper.on(\"plotly_selected\",(t\u003d\u003e{this.model.selected_data\u003dd(this._layout_wrapper,t,\"selected\")})),this._layout_wrapper.on(\"plotly_clickannotation\",(t\u003d\u003e{delete t.event,delete t.fullAnnotation,this.model.clickannotation_data\u003dt})),this._layout_wrapper.on(\"plotly_deselect\",(()\u003d\u003e{this.model.selected_data\u003dnull})),this._layout_wrapper.on(\"plotly_unhover\",(()\u003d\u003e{this.model.hover_data\u003dnull}))}plot(){if(!window.Plotly)return;const t\u003dthis._trace_data(),e\u003dthis._layout_data();this._reacting\u003d!0,window.Plotly.react(this._layout_wrapper,t,e,this.model.config).then((()\u003d\u003e{var t,e;this._updateSetViewportFunction(),this._updateViewportProperty(),this._plotInitialized||this._install_callbacks(),this._plotInitialized\u003d!0,this._reacting\u003d!1,t\u003dthis._layout_wrapper,(e\u003dwindow.getComputedStyle(t).display)\u0026\u0026\"none\"!\u003d\u003de\u0026\u0026window.Plotly.Plots.resize(this._layout_wrapper)}))}_get_trace(t,e){const o\u003ds.clone(this.model.data[t]),r\u003dthis.model.data_sources[t];for(const t of r.columns()){let l\u003dr.get_array(t)[0];if(null!\u003dl.shape\u0026\u0026l.shape.length\u003e1){const t\u003d[],e\u003dl.shape;for(let o\u003d0;o\u003ce[0];o++)t.push(l.slice(o*e[1],(o+1)*e[1]));l\u003dt}let i\u003dt.split(\".\"),s\u003di[i.length-1],a\u003do;for(let t of i.slice(0,-1))a\u003da[t];e\u0026\u00261\u003d\u003di.length?a[s]\u003d[l]:a[s]\u003dl}return o}_updateViewportFromProperty(){if(!window.Plotly||this._settingViewport||this._reacting||!this.model.viewport)return;const t\u003dthis._layout_wrapper._fullLayout;Object.keys(this.model.viewport).reduce(((e,o)\u003d\u003e{if(a.isEqual(h.get(t,o),e))return!0;{let t\u003dh.deepCopy(this.model.viewport);return t._update_from_property\u003d!0,window.Plotly.relayout(this.el,t),!1}}),{})}_updateViewportProperty(){const t\u003dthis._layout_wrapper._fullLayout;let e\u003d{};for(let o in t){if(!t.hasOwnProperty(o))continue;let r\u003do.slice(0,5);\"xaxis\"!\u003d\u003dr\u0026\u0026\"yaxis\"!\u003d\u003dr||(e[o+\".range\"]\u003dh.deepCopy(t[o].range))}a.isEqual(e,this.model.viewport)||this._setViewport(e)}_updateSetViewportFunction(){\"continuous\"\u003d\u003d\u003dthis.model.viewport_update_policy||\"mouseup\"\u003d\u003d\u003dthis.model.viewport_update_policy?this._setViewport\u003dt\u003d\u003e{this._settingViewport||(this._settingViewport\u003d!0,this.model.viewport\u003dt,this._settingViewport\u003d!1)}:this._setViewport\u003dh.throttle((t\u003d\u003e{this._settingViewport||(this._settingViewport\u003d!0,this.model.viewport\u003dt,this._settingViewport\u003d!1)}),this.model.viewport_update_throttle)}}o.PlotlyPlotView\u003dc,c.__name__\u003d\"PlotlyPlotView\";class y extends n.HTMLBox{constructor(t){super(t)}static init_PlotlyPlot(){this.prototype.default_view\u003dc,this.define((({Array:t,Any:e,Ref:o,String:r,Nullable:l,Number:i})\u003d\u003e({data:[t(e),[]],layout:[e,{}],config:[e,{}],data_sources:[t(o(p.ColumnDataSource)),[]],relayout:[l(e),{}],restyle:[l(e),{}],relayout_data:[e,{}],restyle_data:[t(e),[]],click_data:[e,{}],hover_data:[e,{}],clickannotation_data:[e,{}],selected_data:[e,{}],viewport:[e,{}],viewport_update_policy:[r,\"mouseup\"],viewport_update_throttle:[i,200],_render_count:[i,0]})))}}o.PlotlyPlot\u003dy,y.__name__\u003d\"PlotlyPlot\",y.__module__\u003d\"panel.models.plotly\",y.init_PlotlyPlot()},\n      \"99a25e6992\": function _(n,l,u,t,e){function o(n,l,u){var t,e,o,a,r;function i(){var c\u003dDate.now()-a;c\u003cl\u0026\u0026c\u003e\u003d0?t\u003dsetTimeout(i,l-c):(t\u003dnull,u||(r\u003dn.apply(o,e),o\u003de\u003dnull))}null\u003d\u003dl\u0026\u0026(l\u003d100);var c\u003dfunction(){o\u003dthis,e\u003darguments,a\u003dDate.now();var c\u003du\u0026\u0026!t;return t||(t\u003dsetTimeout(i,l)),c\u0026\u0026(r\u003dn.apply(o,e),o\u003de\u003dnull),r};return c.clear\u003dfunction(){t\u0026\u0026(clearTimeout(t),t\u003dnull)},c.flush\u003dfunction(){t\u0026\u0026(r\u003dn.apply(o,e),o\u003de\u003dnull,clearTimeout(t),t\u003dnull)},c}o.debounce\u003do,l.exports\u003do},\n      \"990b5dd5c7\": function _(t,n,r,e,o){e();r.get\u003d(t,n,r)\u003d\u003e{const e\u003dr\u003d\u003eString.prototype.split.call(n,r).filter(Boolean).reduce(((t,n)\u003d\u003enull!\u003dt?t[n]:t),t),o\u003de(/[,[\\]]+?/)||e(/[,[\\].]+?/);return void 0\u003d\u003d\u003do||o\u003d\u003d\u003dt?r:o},r.throttle\u003dfunction(t,n){var r\u003d0;return function(){var e\u003dNumber(new Date);e-r\u003e\u003dn\u0026\u0026(t(),r\u003de)}},r.deepCopy\u003dfunction t(n){var r;if(null\u003d\u003dn||\"object\"!\u003dtypeof n)return n;if(n instanceof Array){r\u003d[];for(var e\u003d0,o\u003dn.length;e\u003co;e++)r[e]\u003dt(n[e]);return r}if(n instanceof Object){const r\u003d{};for(const e in n){const o\u003de;n.hasOwnProperty(o)\u0026\u0026(r[o]\u003dt(n[o]))}return r}throw new Error(\"Unable to copy obj! Its type isn\u0027t supported.\")},r.isPlainObject\u003dfunction(t){return\"[object Object]\"\u003d\u003d\u003dObject.prototype.toString.call(t)}},\n      \"9f787650b9\": function _(e,s,t,i,o){i();const r\u003de(\"tslib\").__importStar(e(\"@bokehjs/core/properties\")),h\u003de(\"@bokehjs/models/layouts/html_box\"),l\u003de(\"4c755983eb\");class n extends h.HTMLBoxView{connect_signals(){super.connect_signals();const e\u003d()\u003d\u003e{this.render(),this.root.compute_layout()};this.connect(this.model.properties.height.change,e),this.connect(this.model.properties.width.change,e),this.connect(this.model.properties.height_policy.change,e),this.connect(this.model.properties.width_policy.change,e),this.connect(this.model.properties.sizing_mode.change,e),this.connect(this.model.properties.active.change,(()\u003d\u003ethis.setCSS())),this.connect(this.model.properties.bar_color.change,(()\u003d\u003ethis.setCSS())),this.connect(this.model.properties.css_classes.change,(()\u003d\u003ethis.setCSS())),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.setValue())),this.connect(this.model.properties.max.change,(()\u003d\u003ethis.setMax()))}render(){super.render();const e\u003dObject.assign(Object.assign({},this.model.style),{display:\"inline-block\"});this.progressEl\u003ddocument.createElement(\"progress\"),this.setValue(),this.setMax(),l.set_size(this.progressEl,this.model),this.setCSS();for(const s in e)this.progressEl.style.setProperty(s,e[s]);this.el.appendChild(this.progressEl)}setCSS(){let e\u003dthis.model.css_classes.join(\" \")+\" \"+this.model.bar_color;this.model.active\u0026\u0026(e+\u003d\" active\"),this.progressEl.className\u003de}setValue(){null!\u003dthis.model.value\u0026\u0026(this.progressEl.value\u003dthis.model.value)}setMax(){null!\u003dthis.model.max\u0026\u0026(this.progressEl.max\u003dthis.model.max)}_update_layout(){let e\u003dvoid 0!\u003d\u003dthis._prev_sizing_mode\u0026\u0026this._prev_sizing_mode!\u003d\u003dthis.model.sizing_mode;this._prev_sizing_mode\u003dthis.model.sizing_mode,this.layout\u003dnew l.CachedVariadicBox(this.el,this.model.sizing_mode,e),this.layout.set_sizing(this.box_sizing())}}t.ProgressView\u003dn,n.__name__\u003d\"ProgressView\";class c extends h.HTMLBox{constructor(e){super(e)}static init_Progress(){this.prototype.default_view\u003dn,this.define({active:[r.Boolean,!0],bar_color:[r.String,\"primary\"],style:[r.Any,{}],max:[r.Number,100],value:[r.Any,null]})}}t.Progress\u003dc,c.__name__\u003d\"Progress\",c.__module__\u003d\"panel.models.widgets\",c.init_Progress()},\n      \"d536149aaa\": function _(e,t,n,s,i){s();const o\u003de(\"6f11f2ef27\"),l\u003de(\"4c02a9b43f\"),r\u003de(\"b3f51db71c\"),c\u003de(\"@bokehjs/core/build_views\"),a\u003de(\"@bokehjs/core/util/types\"),h\u003de(\"@bokehjs/models/layouts/html_box\"),d\u003de(\"@bokehjs/core/dom\"),_\u003de(\"@bokehjs/core/util/color\"),u\u003de(\"f1971f81bf\"),m\u003de(\"3329d4aa5b\"),p\u003de(\"2839081043\"),f\u003de(\"4c755983eb\");function v(e,t,n){const s\u003d{};for(const e of n)s[`{${e}}`]\u003d\"(.*)\";const i\u003d[];let o\u003d\"^\"+(e.replace(/[-\\/\\\\^$*+?.()|[\\]]/g,\"\\\\$\u0026\")+\"$\");let l,r,c;for(const t in s)if(r\u003de.indexOf(t),r\u003e-1){for(o\u003do.replace(t,s[t]),c\u003d{index:r,token:t},l\u003d0;l\u003ci.length\u0026\u0026i[l].index\u003cr;l++);l\u003ci.length?i.splice(l,0,c):i.push(c)}o\u003do.replace(/\\{[^{}]+\\}/g,\".*\");var a\u003dnew RegExp(o).exec(t);let h\u003dnull;if(a)for(h\u003d{},l\u003d0;l\u003ci.length;l++)h[i[l].token.slice(1,-1)]\u003da[l+1];return h}class g extends f.PanelHTMLBoxView{constructor(){super(...arguments),this._parent\u003dnull,this._changing\u003d!1,this._event_listeners\u003d{},this._mutation_observers\u003d[],this._script_fns\u003d{},this._state\u003d{}}initialize(){super.initialize(),this.html\u003dp.htmlDecode(this.model.html)||this.model.html}_recursive_connect(e,t,n){for(const s in e.properties){let i;i\u003dn.length?`${n}.${s}`:s;const o\u003de[s];null!\u003do.properties\u0026\u0026this._recursive_connect(o,!0,i),this.connect(e.properties[s].change,(()\u003d\u003e{if(t)for(const t in this.model.children)if(this.model.children[t]\u003d\u003ds){let n\u003de[s];return a.isArray(n)||(n\u003d[n]),this._render_node(t,n),void this.invalidate_layout()}this._changing||(this._update(i),this.invalidate_layout())}))}}connect_signals(){super.connect_signals(),this.connect(this.model.properties.children.change,(async()\u003d\u003e{this.html\u003dp.htmlDecode(this.model.html)||this.model.html,await this.rebuild(),this.invalidate_layout()})),this._recursive_connect(this.model.data,!0,\"\"),this.connect(this.model.properties.events.change,(()\u003d\u003e{this._remove_event_listeners(),this._setup_event_listeners()})),this.connect_scripts()}connect_scripts(){const e\u003dthis.model.data.id;for(let t in this.model.scripts){const n\u003dthis.model.scripts[t];let s,i\u003dthis.model.data;if(t.indexOf(\".\")\u003e\u003d0){const e\u003dt.split(\".\");s\u003de[e.length-1];for(const t of e.slice(0,-1))i\u003di[t]}else s\u003dt;for(const o of n){const n\u003dp.htmlDecode(o)||o,l\u003dthis._render_script(n,e);this._script_fns[t]\u003dl;const r\u003di.properties[s];null!\u003dr\u0026\u0026this.connect(r.change,(()\u003d\u003e{this._changing||this.run_script(t)}))}}}run_script(e,t\u003d!1){const n\u003dthis._script_fns[e];if(void 0\u003d\u003d\u003dn)return void(t||console.log(`Script \u0027${e}\u0027 could not be found.`));const s\u003d{get_records:(e,t)\u003d\u003ethis.get_records(e,t)};for(const e in this._script_fns)s[e]\u003d()\u003d\u003ethis.run_script(e);return n(this.model,this.model.data,this._state,this,(e\u003d\u003ethis.run_script(e)),s)}get_records(e,t\u003d!0){return u.dict_to_records(this.model.data[e],t)}disconnect_signals(){super.disconnect_signals(),this._remove_event_listeners(),this._remove_mutation_observers(),this.run_script(\"remove\",!0)}get child_models(){const e\u003d[];for(const t in this.model.children)for(const n of this.model.children[t])\"string\"!\u003dtypeof n\u0026\u0026e.push(n);return e}async build_child_views(){await c.build_views(this._child_views,this.child_models,{parent:null})}compute_layout(){this.root!\u003dthis?super.compute_layout():(this.update_position(),this.after_layout(),this.notify_finished())}after_layout(){for(const e of this.child_views)e.after_layout();this.run_script(\"after_layout\",!0),this._has_finished\u003d!0}update_layout(){for(const e of this.child_views)this._align_view(e),e.compute_viewport(),e.update_layout(),e.compute_layout();this.root!\u003dthis\u0026\u0026this._update_layout()}_align_view(e){const{align:t}\u003de.model;let n,s;a.isArray(t)?[n,s]\u003dt:n\u003ds\u003dt,\"center\"\u003d\u003d\u003dn?(e.el.style.marginLeft\u003d\"auto\",e.el.style.marginRight\u003d\"auto\"):\"end\"\u003d\u003d\u003dn\u0026\u0026(e.el.style.marginLeft\u003d\"auto\"),\"center\"\u003d\u003d\u003ds?(e.el.style.marginTop\u003d\"auto\",e.el.style.marginBottom\u003d\"auto\"):\"end\"\u003d\u003d\u003ds\u0026\u0026(e.el.style.marginTop\u003d\"auto\")}render(){d.empty(this.el);const{background:e}\u003dthis.model;this.el.style.backgroundColor\u003dnull!\u003de?_.color2css(e):\"\",d.classes(this.el).clear().add(...this.css_classes()),this._update(),this._render_children(),this._setup_mutation_observers(),this._setup_event_listeners(),this.run_script(\"render\",!0)}_send_event(e,t,n){let s\u003dm.serializeEvent(n);s.type\u003dt,this.model.trigger_event(new p.DOMEvent(e,s))}_render_child(e,t){const n\u003dthis._child_views.get(e);null\u003d\u003dn?t.innerHTML\u003de:(n._parent\u003dthis,n.renderTo(t))}resize_layout(){null!\u003dthis._parent\u0026\u0026this._parent.resize_layout(),this.root!\u003dthis\u0026\u0026super.resize_layout()}invalidate_layout(){null!\u003dthis._parent\u0026\u0026this._parent.invalidate_layout(),this.root!\u003dthis\u0026\u0026super.invalidate_layout()}update_position(){if(this.root!\u003dthis)return void super.update_position();this.el.style.display\u003dthis.model.visible?\"block\":\"none\",f.set_size(this.el,this.model);let{margin:e}\u003dthis.model,t\u003dnull;if(null\u003d\u003de)this.el.style.margin\u003d\"\";else{if(a.isNumber(e))t\u003d{top:e,right:e,bottom:e,left:e};else if(2\u003d\u003de.length){const[n,s]\u003de;t\u003d{top:n,right:s,bottom:n,left:s}}else{const[n,s,i,o]\u003de;t\u003d{top:n,right:s,bottom:i,left:o}}const{top:n,right:s,bottom:i,left:o}\u003dt;this.el.style.padding\u003d`${n}px ${s}px ${i}px ${o}px`}for(const e of this.child_views)e.update_position()}_render_node(e,t){const n\u003dthis.model.data.id;if(this.model.looped.indexOf(e)\u003e-1)for(let s\u003d0;s\u003ct.length;s++){let i\u003ddocument.getElementById(`${e}-${s}-${n}`);null!\u003di?this._render_child(t[s],i):console.warn(`DOM node \u0027${e}-${s}-${n}\u0027 could not be found. Cannot render children.`)}else{let s\u003ddocument.getElementById(`${e}-${n}`);if(null\u003d\u003ds)return void console.warn(`DOM node \u0027${e}-${n}\u0027 could not be found. Cannot render children.`);for(const e of t)this._render_child(e,s)}}_render_children(){for(const e in this.model.children){let t\u003dthis.model.children[e];\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003dthis.model.data[t],a.isArray(t)||(t\u003d[t])),this._render_node(e,t)}}_render_html(e,t\u003d{}){let n\u003de,s\u003d\"\";const i\u003d[];for(const e in this.model.callbacks)for(const t of this.model.callbacks[e]){const[o,l]\u003dt;let r;if(n\u003dn.replace(\"${\"+l,\"$--{\"+l),l.startsWith(\"script(\")){const e\u003dl.replace(\"(\u0027\",\"_\").replace(\"\u0027)\",\"\").replace(\u0027(\"\u0027,\"_\").replace(\u0027\")\u0027,\"\").replace(\"-\",\"_\"),t\u003de.replace(\"script_\",\"\");n\u003dn.replace(l,e),r\u003d`\\n          const ${e} \u003d (event) \u003d\u003e {\\n            view._state.event \u003d event\\n            view.run_script(\"${t}\")\\n            delete view._state.event\\n          }\\n          `}else r\u003d`\\n          const ${l} \u003d (event) \u003d\u003e {\\n            view._send_event(\"${e}\", \"${o}\", event)\\n          }\\n          `;i.indexOf(l)\u003e-1||(i.push(l),s+\u003dr)}return n\u003dn.replaceAll(\"${model.\",\"$-{model.\").replaceAll(\"${\",\"${data.\").replaceAll(\"$-{model.\",\"${model.\").replaceAll(\"$--{\",\"${\"),new Function(\"view, model, data, state, html, useCallback\",s+\"return html`\"+n+\"`;\")(this,this.model,this.model.data,t,r.html,l.useCallback)}_render_script(e,t){const n\u003d[];for(const s of this.model.nodes){if(s in this.model.children\u0026\u0026\"string\"!\u003dtypeof this.model.children[s])continue;const i\u003ds.replace(\"-\",\"_\");if(-1\u003d\u003d\u003de.indexOf(i))continue;const o\u003d`\\n      const ${i} \u003d document.getElementById(\u0027${s}-${t}\u0027)\\n      if (${i} \u003d\u003d null) {\\n        console.warn(\"DOM node \u0027${s}\u0027 could not be found. Cannot execute callback.\")\\n        return\\n      }\\n      `;n.push(o)}return n.push(\"\\n    if (state.event !\u003d\u003d undefined) {\\n      const event \u003d state.event\\n    }\\n    \"),n.push(e),new Function(\"model, data, state, view, script, self\",n.join(\"\\n\"))}_remove_mutation_observers(){for(const e of this._mutation_observers)e.disconnect();this._mutation_observers\u003d[]}_setup_mutation_observers(){const e\u003dthis.model.data.id;for(const t in this.model.attrs){const n\u003ddocument.getElementById(`${t}-${e}`);if(null\u003d\u003dn){console.warn(`DOM node \u0027${t}-${e}\u0027 could not be found. Cannot set up MutationObserver.`);continue}const s\u003dnew MutationObserver((()\u003d\u003e{this._update_model(n,t)}));s.observe(n,{attributes:!0}),this._mutation_observers.push(s)}}_remove_event_listeners(){const e\u003dthis.model.data.id;for(const t in this._event_listeners){const n\u003ddocument.getElementById(`${t}-${e}`);if(null!\u003dn)for(const e in this._event_listeners[t]){const s\u003dthis._event_listeners[t][e];n.removeEventListener(e,s)}}this._event_listeners\u003d{}}_setup_event_listeners(){const e\u003dthis.model.data.id;for(const t in this.model.events){const n\u003ddocument.getElementById(`${t}-${e}`);if(null\u003d\u003dn){console.warn(`DOM node \u0027${t}-${e}\u0027 could not be found. Cannot subscribe to DOM events.`);continue}const s\u003dthis.model.events[t];for(const e in s){const i\u003di\u003d\u003e{this._send_event(t,e,i),t in this.model.attrs\u0026\u0026s[e]\u0026\u0026this._update_model(n,t)};n.addEventListener(e,i),t in this._event_listeners||(this._event_listeners[t]\u003d{}),this._event_listeners[t][e]\u003di}}}_update(e\u003dnull){if(null\u003d\u003de||this.html.indexOf(`\\${${e}}`)\u003e-1){const e\u003dthis._render_html(this.html);try{this._changing\u003d!0,o.render(e,this.el)}finally{this._changing\u003d!1}}}_update_model(e,t){if(this._changing)return;const n\u003d{};for(const s of this.model.attrs[t]){const[i,o,l]\u003ds;let r\u003d\"children\"\u003d\u003d\u003di?e.innerHTML:e[i];if(1\u003d\u003d\u003do.length\u0026\u0026`{${o[0]}}`\u003d\u003d\u003dl)n[o[0]]\u003dr;else if(\"string\"\u003d\u003dtypeof r)if(r\u003dv(l,r,o),null\u003d\u003dr)console.warn(`Could not resolve parameters in ${t} element ${i} attribute value ${r}.`);else for(const e in r)void 0\u003d\u003d\u003dr[e]?console.warn(`Could not resolve ${e} in ${t} element ${i} attribute value ${r}.`):n[e]\u003dr[e]}try{this._changing\u003d!0,this.model.data.setv(function(e){const t\u003d{};for(const n in e){let s\u003de[n];\"string\"!\u003dtypeof s?s\u003ds:\"\"\u003d\u003d\u003ds||\"NaN\"!\u003d\u003ds\u0026\u0026isNaN(Number(s))?\"false\"!\u003d\u003ds\u0026\u0026\"true\"!\u003d\u003ds||(s\u003d\"true\"\u003d\u003d\u003ds):s\u003dNumber(s),t[n]\u003ds}return t}(n))}catch(e){console.log(\"Could not serialize\",n)}finally{this._changing\u003d!1}}}n.ReactiveHTMLView\u003dg,g.__name__\u003d\"ReactiveHTMLView\";class $ extends h.HTMLBox{constructor(e){super(e)}static init_ReactiveHTML(){this.prototype.default_view\u003dg,this.define((({Array:e,Any:t,String:n})\u003d\u003e({attrs:[t,{}],callbacks:[t,{}],children:[t,{}],data:[t],events:[t,{}],html:[n,\"\"],looped:[e(n),[]],nodes:[e(n),[]],scripts:[t,{}]})))}}n.ReactiveHTML\u003d$,$.__name__\u003d\"ReactiveHTML\",$.__module__\u003d\"panel.models.reactive_html\",$.init_ReactiveHTML()},\n      \"3b85956787\": function _(e,t,s,i,n){i();const l\u003de(\"tslib\"),o\u003de(\"@bokehjs/core/dom\"),c\u003de(\"@bokehjs/core/util/types\"),r\u003de(\"@bokehjs/models/widgets/input_widget\"),h\u003dl.__importStar(e(\"@bokehjs/styles/widgets/inputs.css\"));class d extends r.InputWidgetView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.render_selection())),this.connect(this.model.properties.options.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.name.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.title.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.size.change,(()\u003d\u003ethis.render())),this.connect(this.model.properties.disabled.change,(()\u003d\u003ethis.render()))}render(){super.render();const e\u003dthis.model.options.map((e\u003d\u003e{let t,s;return c.isString(e)?t\u003ds\u003de:[t,s]\u003de,o.option({value:t},s)}));this.select_el\u003do.select({multiple:!1,class:h.input,name:this.model.name,disabled:this.model.disabled},e),this.select_el.style.backgroundImage\u003d\"none\",this.select_el.addEventListener(\"change\",(()\u003d\u003ethis.change_input())),this.group_el.appendChild(this.select_el),this.render_selection()}render_selection(){const e\u003dthis.model.value;for(const t of this.el.querySelectorAll(\"option\"))t.value\u003d\u003d\u003de\u0026\u0026(t.selected\u003d!0);this.select_el.size\u003dthis.model.size}change_input(){const e\u003dnull!\u003dthis.el.querySelector(\"select:focus\");let t\u003dnull;for(const e of this.el.querySelectorAll(\"option\"))if(e.selected){t\u003de.value;break}this.model.value\u003dt,super.change_input(),e\u0026\u0026this.select_el.focus()}}s.SingleSelectView\u003dd,d.__name__\u003d\"SingleSelectView\";class a extends r.InputWidget{constructor(e){super(e)}static init_SingleSelect(){this.prototype.default_view\u003dd,this.define((({Any:e,Array:t,Int:s,String:i})\u003d\u003e({value:[i,\"\"],options:[t(e),[]],size:[s,4]})))}}s.SingleSelect\u003da,a.__name__\u003d\"SingleSelect\",a.__module__\u003d\"panel.models.widgets\",a.init_SingleSelect()},\n      \"aaa48703af\": function _(t,e,i,o,n){o();const s\u003dt(\"tslib\").__importStar(t(\"@bokehjs/core/properties\")),r\u003dt(\"@bokehjs/models/layouts/html_box\"),h\u003d\"Click to START the speech recognition.\",{webkitSpeechRecognition:a}\u003dwindow,{webkitSpeechGrammarList:l}\u003dwindow;class c extends r.HTMLBoxView{initialize(){var t,e;super.initialize(),this.recognition\u003dnew a,this.recognition.lang\u003dthis.model.lang,this.recognition.continuous\u003dthis.model.continuous,this.recognition.interimResults\u003dthis.model.interim_results,this.recognition.maxAlternatives\u003dthis.model.max_alternatives,this.recognition.serviceURI\u003dthis.model.service_uri,this.setGrammars(),this.recognition.onresult\u003dt\u003d\u003e{this.model.results\u003dfunction(t){const e\u003d[];for(let o of t){let t\u003d[],n\u003d{is_final:o.isFinal,alternatives:t};for(let e\u003d0;e\u003co.length;e++){let n\u003d{confidence:(i\u003do[e].confidence,Math.round(100*(i+Number.EPSILON))/100),transcript:o[e].transcript};t.push(n)}n.alternatives\u003dt,e.push(n)}var i;return e}(t.results)},this.recognition.onerror\u003dt\u003d\u003e{console.log(\"SpeechToText Error\"),console.log(t)},this.recognition.onnomatch\u003dt\u003d\u003e{console.log(\"SpeechToText No Match\"),console.log(t)},this.recognition.onaudiostart\u003d()\u003d\u003ethis.model.audio_started\u003d!0,this.recognition.onaudioend\u003d()\u003d\u003ethis.model.audio_started\u003d!1,this.recognition.onsoundstart\u003d()\u003d\u003ethis.model.sound_started\u003d!0,this.recognition.onsoundend\u003d()\u003d\u003ethis.model.sound_started\u003d!1,this.recognition.onspeechstart\u003d()\u003d\u003ethis.model.speech_started\u003d!0,this.recognition.onspeechend\u003d()\u003d\u003ethis.model.speech_started\u003d!1,this.recognition.onstart\u003d()\u003d\u003e{this.buttonEl.onclick\u003d()\u003d\u003e{this.recognition.stop()},this.buttonEl.innerHTML\u003dthis.iconStarted(),this.buttonEl.setAttribute(\"title\",\"Click to STOP the speech recognition.\"),this.model.started\u003d!0},this.recognition.onend\u003d()\u003d\u003e{this.buttonEl.onclick\u003d()\u003d\u003e{this.recognition.start()},this.buttonEl.innerHTML\u003dthis.iconNotStarted(),this.buttonEl.setAttribute(\"title\",h),this.model.started\u003d!1},this.buttonEl\u003d(t\u003d`\u003cbutton class\u003d\"bk bk-btn bk-btn-${this.model.button_type}\" type\u003d\"button\" title\u003d\"${h}\"\u003e\u003c/button\u003e`,e\u003ddocument.createElement(\"template\"),t\u003dt.trim(),e.innerHTML\u003dt,e.content.firstChild),this.buttonEl.innerHTML\u003dthis.iconNotStarted(),this.buttonEl.onclick\u003d()\u003d\u003ethis.recognition.start()}iconStarted(){return\"\"!\u003d\u003dthis.model.button_started?this.model.button_started:\u0027\u003csvg xmlns\u003d\"http://www.w3.org/2000/svg\" height\u003d\"22px\" style\u003d\"vertical-align: middle;\" fill\u003d\"currentColor\" class\u003d\"bi bi-mic\" viewBox\u003d\"0 0 16 16\"\u003e\\n  \u003cpath fill-rule\u003d\"evenodd\" d\u003d\"M3.5 6.5A.5.5 0 0 1 4 7v1a4 4 0 0 0 8 0V7a.5.5 0 0 1 1 0v1a5 5 0 0 1-4.5 4.975V15h3a.5.5 0 0 1 0 1h-7a.5.5 0 0 1 0-1h3v-2.025A5 5 0 0 1 3 8V7a.5.5 0 0 1 .5-.5z\"/\u003e\\n  \u003cpath fill-rule\u003d\"evenodd\" d\u003d\"M10 8V3a2 2 0 1 0-4 0v5a2 2 0 1 0 4 0zM8 0a3 3 0 0 0-3 3v5a3 3 0 0 0 6 0V3a3 3 0 0 0-3-3z\"/\u003e\\n\u003c/svg\u003e\u0027}iconNotStarted(){return\"\"!\u003d\u003dthis.model.button_not_started?this.model.button_not_started:\u0027\u003csvg xmlns\u003d\"http://www.w3.org/2000/svg\" height\u003d\"22px\" style\u003d\"vertical-align: middle;\" fill\u003d\"currentColor\" class\u003d\"bi bi-mic-mute\" viewBox\u003d\"0 0 16 16\"\u003e\\n\u003cpath fill-rule\u003d\"evenodd\" d\u003d\"M12.734 9.613A4.995 4.995 0 0 0 13 8V7a.5.5 0 0 0-1 0v1c0 .274-.027.54-.08.799l.814.814zm-2.522 1.72A4 4 0 0 1 4 8V7a.5.5 0 0 0-1 0v1a5 5 0 0 0 4.5 4.975V15h-3a.5.5 0 0 0 0 1h7a.5.5 0 0 0 0-1h-3v-2.025a4.973 4.973 0 0 0 2.43-.923l-.718-.719zM11 7.88V3a3 3 0 0 0-5.842-.963l.845.845A2 2 0 0 1 10 3v3.879l1 1zM8.738 9.86l.748.748A3 3 0 0 1 5 8V6.121l1 1V8a2 2 0 0 0 2.738 1.86zm4.908 3.494l-12-12 .708-.708 12 12-.708.707z\"/\u003e\\n\u003c/svg\u003e\u0027}setIcon(){this.model.started?this.buttonEl.innerHTML\u003dthis.iconStarted():this.buttonEl.innerHTML\u003dthis.iconNotStarted()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.start.change,(()\u003d\u003e{this.model.start\u003d!1,this.recognition.start()})),this.connect(this.model.properties.stop.change,(()\u003d\u003e{this.model.stop\u003d!1,this.recognition.stop()})),this.connect(this.model.properties.abort.change,(()\u003d\u003e{this.model.abort\u003d!1,this.recognition.abort()})),this.connect(this.model.properties.grammars.change,(()\u003d\u003ethis.setGrammars())),this.connect(this.model.properties.lang.change,(()\u003d\u003ethis.recognition.lang\u003dthis.model.lang)),this.connect(this.model.properties.continuous.change,(()\u003d\u003ethis.recognition.continuous\u003dthis.model.continuous)),this.connect(this.model.properties.interim_results.change,(()\u003d\u003ethis.recognition.interimResults\u003dthis.model.interim_results)),this.connect(this.model.properties.max_alternatives.change,(()\u003d\u003ethis.recognition.maxAlternatives\u003dthis.model.max_alternatives)),this.connect(this.model.properties.service_uri.change,(()\u003d\u003ethis.recognition.serviceURI\u003dthis.model.service_uri)),this.connect(this.model.properties.button_type.change,(()\u003d\u003ethis.buttonEl.className\u003d`bk bk-btn bk-btn-${this.model.button_type}`)),this.connect(this.model.properties.button_hide.change,(()\u003d\u003ethis.render()));const{button_not_started:t,button_started:e}\u003dthis.model.properties;this.on_change([t,e],(()\u003d\u003ethis.setIcon()))}setGrammars(){this.recognition.grammars\u003dfunction(t){if(t){var e\u003dnew l;for(let i of t)i.src?e.addFromString(i.src,i.weight):i.uri\u0026\u0026e.addFromURI(i.uri,i.weight);return e}return null}(this.model.grammars)}render(){super.render(),this.model.button_hide||this.el.appendChild(this.buttonEl)}}i.SpeechToTextView\u003dc,c.__name__\u003d\"SpeechToTextView\";class d extends r.HTMLBox{constructor(t){super(t)}static init_SpeechToText(){this.prototype.default_view\u003dc,this.define({start:[s.Boolean,!1],stop:[s.Boolean,!1],abort:[s.Boolean,!1],grammars:[s.Array,[]],lang:[s.String,\"\"],continuous:[s.Boolean,!1],interim_results:[s.Boolean,!1],max_alternatives:[s.Number,1],service_uri:[s.String],started:[s.Boolean,!1],audio_started:[s.Boolean,!1],sound_started:[s.Boolean,!1],speech_started:[s.Boolean,!1],button_type:[s.String,\"light\"],button_hide:[s.Boolean,!1],button_not_started:[s.String,\"\"],button_started:[s.String,\"\"],results:[s.Array,[]]})}}i.SpeechToText\u003dd,d.__name__\u003d\"SpeechToText\",d.__module__\u003d\"panel.models.speech_to_text\",d.init_SpeechToText()},\n      \"bfa46a5f19\": function _(e,t,s,a,i){a();const o\u003de(\"@bokehjs/core/view\"),c\u003de(\"@bokehjs/core/util/array\"),n\u003de(\"@bokehjs/model\"),h\u003de(\"@bokehjs/protocol/receiver\");class _ extends o.View{renderTo(){}}s.StateView\u003d_,_.__name__\u003d\"StateView\";class r extends n.Model{constructor(e){super(e),this._receiver\u003dnew h.Receiver,this._cache\u003d{}}apply_state(e){this._receiver.consume(e.header),this._receiver.consume(e.metadata),this._receiver.consume(e.content),this._receiver.message\u0026\u0026this.document\u0026\u0026this.document.apply_json_patch(this._receiver.message.content)}_receive_json(e,t){const s\u003dJSON.parse(e);this._cache[t]\u003ds;let a\u003dthis.state;for(const e of this.values)a\u003da[e];a\u003d\u003d\u003dt?this.apply_state(s):this._cache[a]\u0026\u0026this.apply_state(this._cache[a])}set_state(e,t){let s\u003dc.copy(this.values);s[this.widgets[e.id]]\u003dt;let a\u003dthis.state;for(const e of s)a\u003da[e];var i,o,n;this.values\u003ds,this.json?this._cache[a]?this.apply_state(this._cache[a]):(i\u003da,o\u003de\u003d\u003ethis._receive_json(e,a),(n\u003dnew XMLHttpRequest).overrideMimeType(\"application/json\"),n.open(\"GET\",i,!0),n.onreadystatechange\u003dfunction(){4\u003d\u003dn.readyState\u0026\u0026200\u003d\u003dn.status\u0026\u0026o(n.responseText)},n.send(null)):this.apply_state(a)}static init_State(){this.prototype.default_view\u003d_,this.define((({Any:e,Boolean:t})\u003d\u003e({json:[t,!1],state:[e,{}],widgets:[e,{}],values:[e,[]]})))}}s.State\u003dr,r.__name__\u003d\"State\",r.__module__\u003d\"panel.models.state\",r.init_State()},\n      \"91fe88c277\": function _(e,t,i,n,s){n();const r\u003de(\"@bokehjs/models/layouts/html_box\"),o\u003de(\"@bokehjs/core/dom\"),a\u003de(\"4c755983eb\");class l extends a.PanelHTMLBoxView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.output.change,this.write),this.connect(this.model.properties._clears.change,this.clear)}render(){super.render(),this.container\u003do.div({class:\"terminal-container\"}),a.set_size(this.container,this.model),this.term\u003dthis.getNewTerminal(),this.term.onData((e\u003d\u003e{this.handleOnData(e)})),this.webLinksAddon\u003dthis.getNewWebLinksAddon(),this.term.loadAddon(this.webLinksAddon),this.term.open(this.container),this.term.onRender((()\u003d\u003e{this._rendered||this.fit()})),this.write(),this.el.appendChild(this.container)}getNewTerminal(){const e\u003dwindow;return e.Terminal?new e.Terminal(this.model.options):new e.xtermjs.Terminal(this.model.options)}getNewWebLinksAddon(){return new window.WebLinksAddon.WebLinksAddon}handleOnData(e){this.model.input\u003d\u003d\u003de?this.model._value_repeats+\u003d1:this.model.input\u003de}write(){const e\u003dthis.model.output;if(null\u003d\u003de||!e.length)return;const t\u003de.replace(/\\r?\\n/g,\"\\r\\n\");this.term.write(t)}clear(){this.term.clear()}fit(){const e\u003dthis.layout.inner_bbox.width,t\u003dthis.layout.inner_bbox.height,i\u003dthis.term._core._renderService,n\u003di.dimensions.actualCellWidth,s\u003di.dimensions.actualCellHeight;if(0\u003d\u003d\u003dn||0\u003d\u003d\u003ds)return;const r\u003dMath.max(2,Math.floor(e/n)),o\u003dMath.max(1,Math.floor(t/s));this.term.rows\u003d\u003d\u003do\u0026\u0026this.term.cols\u003d\u003d\u003dr||(i.clear(),this.term.resize(r,o)),this._rendered\u003d!0}after_layout(){super.after_layout(),this.fit()}resize_layout(){super.resize_layout(),this.fit()}}i.TerminalView\u003dl,l.__name__\u003d\"TerminalView\";class h extends r.HTMLBox{constructor(e){super(e)}static init_Terminal(){this.prototype.default_view\u003dl,this.define((({Any:e,Int:t,String:i})\u003d\u003e({options:[e,{}],output:[i],input:[i],_clears:[t,0],_value_repeats:[t,0]})))}}i.Terminal\u003dh,h.__name__\u003d\"Terminal\",h.__module__\u003d\"panel.models.terminal\",h.init_Terminal()},\n      \"33cd2c254e\": function _(e,s,i,t,n){t();const h\u003de(\"@bokehjs/models/layouts/html_box\");function o(e){var s\u003d[];for(let t of e){var i\u003d{default:t.default,lang:t.lang,local_service:t.localService,name:t.name,voice_uri:t.voiceURI};s.push(i)}return s}class c extends h.HTMLBoxView{initialize(){super.initialize(),this.model.paused\u003dspeechSynthesis.paused,this.model.pending\u003dspeechSynthesis.pending,this.model.speaking\u003dspeechSynthesis.speaking,this._callback\u003dwindow.setInterval((function(){!speechSynthesis.paused\u0026\u0026speechSynthesis.speaking\u0026\u0026window.speechSynthesis.resume()}),1e4);const e\u003d()\u003d\u003e{\"undefined\"!\u003dtypeof speechSynthesis\u0026\u0026(this.voices\u003dspeechSynthesis.getVoices(),this.voices\u0026\u0026(this.model.voices\u003do(this.voices)))};e(),\"undefined\"!\u003dtypeof speechSynthesis\u0026\u0026void 0!\u003d\u003dspeechSynthesis.onvoiceschanged\u0026\u0026(speechSynthesis.onvoiceschanged\u003de)}remove(){null!\u003dthis._callback\u0026\u0026clearInterval(this._callback),speechSynthesis.cancel(),super.remove()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.speak.change,(()\u003d\u003e{this.speak()})),this.connect(this.model.properties.pause.change,(()\u003d\u003e{this.model.pause\u003d!1,speechSynthesis.pause()})),this.connect(this.model.properties.resume.change,(()\u003d\u003e{this.model.resume\u003d!1,speechSynthesis.resume()})),this.connect(this.model.properties.cancel.change,(()\u003d\u003e{this.model.cancel\u003d!1,speechSynthesis.cancel()}))}speak(){let e\u003dnew SpeechSynthesisUtterance(this.model.speak.text);if(e.pitch\u003dthis.model.speak.pitch,e.volume\u003dthis.model.speak.volume,e.rate\u003dthis.model.speak.rate,this.model.voices)for(let s of this.voices)s.name\u003d\u003d\u003dthis.model.speak.voice\u0026\u0026(e.voice\u003ds);e.onpause\u003d()\u003d\u003ethis.model.paused\u003d!0,e.onstart\u003d()\u003d\u003e{this.model.speaking\u003d!0,this.model.paused\u003d!1,this.model.pending\u003dspeechSynthesis.pending},e.onresume\u003d()\u003d\u003ethis.model.paused\u003d!1,e.onend\u003d()\u003d\u003e{this.model.speaking\u003d!1,this.model.paused\u003d!1,this.model.pending\u003dspeechSynthesis.pending},speechSynthesis.speak(e),this.model.paused\u003dspeechSynthesis.paused,this.model.pending\u003dspeechSynthesis.pending}render(){super.render(),this.model.voices||(this.model.voices\u003do(this.voices)),null!\u003dthis.model.speak\u0026\u0026this.model.speak.text\u0026\u0026this.speak()}}i.TextToSpeechView\u003dc,c.__name__\u003d\"TextToSpeechView\";class p extends h.HTMLBox{constructor(e){super(e)}static init_TextToSpeech(){this.prototype.default_view\u003dc,this.define((({Any:e,Array:s,Boolean:i})\u003d\u003e({paused:[i,!1],pending:[i,!1],speaking:[i,!1],voices:[s(e),[]],cancel:[i,!1],pause:[i,!1],resume:[i,!1],speak:[e,{}]})))}}i.TextToSpeech\u003dp,p.__name__\u003d\"TextToSpeech\",p.__module__\u003d\"panel.models.text_to_speech\",p.init_TextToSpeech()},\n      \"7e6584ca79\": function _(t,e,i,l,o){l();const s\u003dt(\"@bokehjs/models/layouts/html_box\"),h\u003dt(\"@bokehjs/core/build_views\"),n\u003dt(\"@bokehjs/models/plots\"),a\u003dt(\"@bokehjs/models/glyphs\"),d\u003dt(\"@bokehjs/core/dom\"),r\u003dt(\"@bokehjs/models/sources/column_data_source\"),c\u003dt(\"@bokehjs/models/formatters\");class p extends s.HTMLBoxView{initialize(){super.initialize(),this.containerDiv\u003dd.div({style:\"height:100%; width:100%;\"}),this.titleDiv\u003dd.div({style:\"font-size: 1em; word-wrap: break-word;\"}),this.valueDiv\u003dd.div({style:\"font-size: 2em\"}),this.value2Div\u003dd.div({style:\"font-size: 1em; opacity: 0.5; display: inline\"}),this.changeDiv\u003dd.div({style:\"font-size: 1em; opacity: 0.5; display: inline\"}),this.textDiv\u003dd.div({},this.titleDiv,this.valueDiv,d.div({},this.changeDiv,this.value2Div)),this.updateTitle(),this.updateValue(),this.updateValue2(),this.updateValueChange(),this.updateTextFontSize(),this.plotDiv\u003dd.div({}),this.containerDiv\u003dd.div({style:\"height:100%; width:100%\"},this.textDiv,this.plotDiv),this.updateLayout()}connect_signals(){super.connect_signals();const{pos_color:t,neg_color:e}\u003dthis.model.properties;this.on_change([t,e],(()\u003d\u003ethis.updateValueChange()));const{plot_color:i,plot_type:l,width:o,height:s,sizing_mode:h}\u003dthis.model.properties;this.on_change([i,l,o,s,h],(()\u003d\u003ethis.render())),this.connect(this.model.properties.title.change,(()\u003d\u003ethis.updateTitle(!0))),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.updateValue(!0))),this.connect(this.model.properties.value_change.change,(()\u003d\u003ethis.updateValue2(!0))),this.connect(this.model.properties.layout.change,(()\u003d\u003ethis.updateLayout()))}async render(){super.render(),this.el.appendChild(this.containerDiv),await this.setPlot()}async setPlot(){this.plot\u003dnew n.Plot({background_fill_color:null,border_fill_color:null,outline_line_color:null,min_border:0,sizing_mode:\"stretch_both\",toolbar_location:null});var t\u003dthis.model.source;if(\"line\"\u003d\u003d\u003dthis.model.plot_type){var e\u003dnew a.Line({x:{field:this.model.plot_x},y:{field:this.model.plot_y},line_width:4,line_color:this.model.plot_color});this.plot.add_glyph(e,t)}else if(\"step\"\u003d\u003d\u003dthis.model.plot_type){var i\u003dnew a.Step({x:{field:this.model.plot_x},y:{field:this.model.plot_y},line_width:3,line_color:this.model.plot_color});this.plot.add_glyph(i,t)}else if(\"area\"\u003d\u003d\u003dthis.model.plot_type){var l\u003dnew a.VArea({x:{field:this.model.plot_x},y1:{field:this.model.plot_y},y2:0,fill_color:this.model.plot_color,fill_alpha:.5});this.plot.add_glyph(l,t);e\u003dnew a.Line({x:{field:this.model.plot_x},y:{field:this.model.plot_y},line_width:3,line_color:this.model.plot_color});this.plot.add_glyph(e,t)}else{var o\u003dnew a.VBar({x:{field:this.model.plot_x},top:{field:this.model.plot_y},width:.9,line_color:null,fill_color:this.model.plot_color});this.plot.add_glyph(o,t)}const s\u003dawait h.build_view(this.plot);this.plotDiv.innerHTML\u003d\"\",s.renderTo(this.plotDiv)}after_layout(){super.after_layout(),this.updateTextFontSize()}updateTextFontSize(){this.updateTextFontSizeColumn()}updateTextFontSizeColumn(){let t\u003dthis.containerDiv.clientWidth,e\u003dthis.containerDiv.clientHeight;\"column\"\u003d\u003d\u003dthis.model.layout?e\u003dMath.round(e/2):t\u003dMath.round(t/2);const i\u003dt/this.model.title.length*2,l\u003dt/(2*this._value_format.length)*1.8,o\u003dt/(this._value_change_format.length+1)*2,s\u003de/6,h\u003dMath.min(i,l,o,s);this.textDiv.style.fontSize\u003dMath.trunc(h)+\"px\",this.textDiv.style.lineHeight\u003d\"1.3\"}updateTitle(t\u003d!1){this.titleDiv.innerText\u003dthis.model.title,t\u0026\u0026this.updateTextFontSize()}updateValue(t\u003d!1){this._value_format\u003dthis.model.formatter.doFormat([this.model.value],{loc:0})[0],this.valueDiv.innerText\u003dthis._value_format,t\u0026\u0026this.updateTextFontSize()}updateValue2(t\u003d!1){this._value_change_format\u003dthis.model.change_formatter.doFormat([this.model.value_change],{loc:0})[0],this.value2Div.innerText\u003dthis._value_change_format,this.updateValueChange(),t\u0026\u0026this.updateTextFontSize()}updateValueChange(){this.model.value_change\u003e0?(this.changeDiv.innerHTML\u003d\"\u0026#9650;\",this.changeDiv.style.color\u003dthis.model.pos_color):this.model.value_change\u003c0?(this.changeDiv.innerHTML\u003d\"\u0026#9660;\",this.changeDiv.style.color\u003dthis.model.neg_color):(this.changeDiv.innerHTML\u003d\"\u0026nbsp;\",this.changeDiv.style.color\u003d\"inherit\")}updateLayout(){\"column\"\u003d\u003d\u003dthis.model.layout?(this.containerDiv.style.display\u003d\"block\",this.textDiv.style.height\u003d\"50%\",this.textDiv.style.width\u003d\"100%\",this.plotDiv.style.height\u003d\"50%\",this.plotDiv.style.width\u003d\"100%\"):(this.containerDiv.style.display\u003d\"flex\",this.textDiv.style.height\u003d\"100%\",this.textDiv.style.width\u003d\"\",this.plotDiv.style.height\u003d\"100%\",this.plotDiv.style.width\u003d\"\",this.textDiv.style.flex\u003d\"1\",this.plotDiv.style.flex\u003d\"1\"),window.dispatchEvent(new Event(\"resize\"))}}i.TrendIndicatorView\u003dp,p.__name__\u003d\"TrendIndicatorView\";class _ extends s.HTMLBox{constructor(t){super(t)}static init_TrendIndicator(){this.prototype.default_view\u003dp,this.define((({Number:t,String:e,Ref:i})\u003d\u003e({description:[e,\"\"],formatter:[i(c.TickFormatter),()\u003d\u003enew c.BasicTickFormatter],change_formatter:[i(c.TickFormatter),()\u003d\u003enew c.NumeralTickFormatter],layout:[e,\"column\"],source:[i(r.ColumnDataSource)],plot_x:[e,\"x\"],plot_y:[e,\"y\"],plot_color:[e,\"#428bca\"],plot_type:[e,\"bar\"],pos_color:[e,\"#5cb85c\"],neg_color:[e,\"#d9534f\"],title:[e,\"\"],value:[t,0],value_change:[t,0]})))}}i.TrendIndicator\u003d_,_.__name__\u003d\"TrendIndicator\",_.__module__\u003d\"panel.models.trend\",_.init_TrendIndicator()},\n      \"4feb5fa522\": function _(t,e,s,o,a){o();const n\u003dt(\"@bokehjs/core/util/types\"),c\u003dt(\"@bokehjs/models/layouts/html_box\");class d extends c.HTMLBoxView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.data.change,this._plot),this.connect(this.model.properties.data_sources.change,(()\u003d\u003ethis._connect_sources())),this._connected\u003d[],this._connect_sources()}_connect_sources(){for(const t in this.model.data_sources){const e\u003dthis.model.data_sources[t];this._connected.indexOf(t)\u003c0\u0026\u0026(this.connect(e.properties.data.change,this._plot),this._connected.push(t))}}_fetch_datasets(){const t\u003d{};for(const e in this.model.data_sources){const s\u003dthis.model.data_sources[e],o\u003d[],a\u003ds.columns();for(let t\u003d0;t\u003cs.get_length();t++){const e\u003d{};for(const o of a)e[o]\u003ds.data[o][t];o.push(e)}t[e]\u003do}return t}render(){super.render(),this._plot()}_plot(){const t\u003dthis.model.data;if(null!\u003dt\u0026\u0026window.vegaEmbed){if(this.model.data_sources\u0026\u0026Object.keys(this.model.data_sources).length\u003e0){const e\u003dthis._fetch_datasets();if(\"data\"in e\u0026\u0026(t.data.values\u003de.data,delete e.data),null!\u003dt.data){const s\u003dn.isArray(t.data)?t.data:[t.data];for(const t of s)t.name in e\u0026\u0026(t.values\u003de[t.name],delete e[t.name])}this.model.data.datasets\u003de}window.vegaEmbed(this.el,this.model.data,{actions:!1})}}}s.VegaPlotView\u003dd,d.__name__\u003d\"VegaPlotView\";class i extends c.HTMLBox{constructor(t){super(t)}static init_VegaPlot(){this.prototype.default_view\u003dd,this.define((({Any:t})\u003d\u003e({data:[t,{}],data_sources:[t,{}]})))}}s.VegaPlot\u003di,i.__name__\u003d\"VegaPlot\",i.__module__\u003d\"panel.models.vega\",i.init_VegaPlot()},\n      \"ffe54b53c3\": function _(e,i,t,o,s){o();const l\u003de(\"@bokehjs/models/layouts/html_box\"),d\u003de(\"4c755983eb\");class h extends d.PanelHTMLBoxView{initialize(){super.initialize(),this._blocked\u003d!1,this._setting\u003d!1,this._time\u003dDate.now()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.loop.change,(()\u003d\u003ethis.set_loop())),this.connect(this.model.properties.paused.change,(()\u003d\u003ethis.set_paused())),this.connect(this.model.properties.time.change,(()\u003d\u003ethis.set_time())),this.connect(this.model.properties.value.change,(()\u003d\u003ethis.set_value())),this.connect(this.model.properties.volume.change,(()\u003d\u003ethis.set_volume()))}render(){super.render(),this.videoEl\u003ddocument.createElement(\"video\"),this.model.sizing_mode\u0026\u0026\"fixed\"!\u003d\u003dthis.model.sizing_mode||(this.model.height\u0026\u0026(this.videoEl.height\u003dthis.model.height),this.model.width\u0026\u0026(this.videoEl.width\u003dthis.model.width)),this.videoEl.style.objectFit\u003d\"fill\",this.videoEl.style.minWidth\u003d\"100%\",this.videoEl.style.minHeight\u003d\"100%\",this.videoEl.controls\u003d!0,this.videoEl.src\u003dthis.model.value,this.videoEl.currentTime\u003dthis.model.time,this.videoEl.loop\u003dthis.model.loop,null!\u003dthis.model.volume?this.videoEl.volume\u003dthis.model.volume/100:this.model.volume\u003d100*this.videoEl.volume,this.videoEl.onpause\u003d()\u003d\u003ethis.model.paused\u003d!0,this.videoEl.onplay\u003d()\u003d\u003ethis.model.paused\u003d!1,this.videoEl.ontimeupdate\u003d()\u003d\u003ethis.update_time(this),this.videoEl.onvolumechange\u003d()\u003d\u003ethis.update_volume(this),this.el.appendChild(this.videoEl),this.model.paused||this.videoEl.play()}update_time(e){e._setting?e._setting\u003d!1:Date.now()-e._time\u003ce.model.throttle||(e._blocked\u003d!0,e.model.time\u003de.videoEl.currentTime,e._time\u003dDate.now())}update_volume(e){e._setting?e._setting\u003d!1:(e._blocked\u003d!0,e.model.volume\u003d100*e.videoEl.volume)}set_loop(){this.videoEl.loop\u003dthis.model.loop}set_paused(){!this.videoEl.paused\u0026\u0026this.model.paused\u0026\u0026this.videoEl.pause(),this.videoEl.paused\u0026\u0026!this.model.paused\u0026\u0026this.videoEl.play()}set_volume(){this._blocked?this._blocked\u003d!1:(this._setting\u003d!0,null!\u003dthis.model.volume\u0026\u0026(this.videoEl.volume\u003dthis.model.volume/100))}set_time(){this._blocked?this._blocked\u003d!1:(this._setting\u003d!0,this.videoEl.currentTime\u003dthis.model.time)}set_value(){this.videoEl.src\u003dthis.model.value}}t.VideoView\u003dh,h.__name__\u003d\"VideoView\";class m extends l.HTMLBox{constructor(e){super(e)}static init_Video(){this.prototype.default_view\u003dh,this.define((({Any:e,Boolean:i,Int:t,Number:o})\u003d\u003e({loop:[i,!1],paused:[i,!0],time:[o,0],throttle:[t,250],value:[e,\"\"],volume:[t]})))}}t.Video\u003dm,m.__name__\u003d\"Video\",m.__module__\u003d\"panel.models.widgets\",m.init_Video()},\n      \"e3e9b8e495\": function _(e,t,i,s,o){s();const h\u003de(\"@bokehjs/models/layouts/html_box\"),l\u003de(\"4c755983eb\");class a extends l.PanelHTMLBoxView{constructor(){super(...arguments),this.constraints\u003d{audio:!1,video:!0}}initialize(){super.initialize(),null!\u003d\u003dthis.model.timeout\u0026\u0026this.set_timeout()}connect_signals(){super.connect_signals(),this.connect(this.model.properties.timeout.change,(()\u003d\u003ethis.set_timeout())),this.connect(this.model.properties.snapshot.change,(()\u003d\u003ethis.snapshot())),this.connect(this.model.properties.paused.change,(()\u003d\u003ethis.pause()))}pause(){this.model.paused?(null!\u003dthis.timer\u0026\u0026(clearInterval(this.timer),this.timer\u003dnull),this.videoEl.pause()):this.videoEl.play(),this.set_timeout()}set_timeout(){this.timer\u0026\u0026(clearInterval(this.timer),this.timer\u003dnull),null!\u003dthis.model.timeout\u0026\u0026this.model.timeout\u003e0\u0026\u0026(this.timer\u003dsetInterval((()\u003d\u003ethis.snapshot()),this.model.timeout))}snapshot(){this.canvasEl.width\u003dthis.videoEl.videoWidth,this.canvasEl.height\u003dthis.videoEl.videoHeight;const e\u003dthis.canvasEl.getContext(\"2d\");e\u0026\u0026e.drawImage(this.videoEl,0,0,this.canvasEl.width,this.canvasEl.height),this.model.value\u003dthis.canvasEl.toDataURL(\"image/\"+this.model.format,.95)}remove(){super.remove(),this.timer\u0026\u0026(clearInterval(this.timer),this.timer\u003dnull)}render(){super.render(),this.videoEl||(this.videoEl\u003ddocument.createElement(\"video\"),this.model.sizing_mode\u0026\u0026\"fixed\"!\u003d\u003dthis.model.sizing_mode||(this.model.height\u0026\u0026(this.videoEl.height\u003dthis.model.height),this.model.width\u0026\u0026(this.videoEl.width\u003dthis.model.width)),this.videoEl.style.objectFit\u003d\"fill\",this.videoEl.style.minWidth\u003d\"100%\",this.videoEl.style.minHeight\u003d\"100%\",this.canvasEl\u003ddocument.createElement(\"canvas\"),this.el.appendChild(this.videoEl),navigator.mediaDevices.getUserMedia\u0026\u0026navigator.mediaDevices.getUserMedia(this.constraints).then((e\u003d\u003e{this.videoEl.srcObject\u003de,this.model.paused||this.videoEl.play()})).catch(console.error))}}i.VideoStreamView\u003da,a.__name__\u003d\"VideoStreamView\";class n extends h.HTMLBox{constructor(e){super(e)}static init_VideoStream(){this.prototype.default_view\u003da,this.define((({Any:e,Boolean:t,Int:i,Nullable:s,String:o})\u003d\u003e({format:[o,\"png\"],paused:[t,!1],snapshot:[t,!1],timeout:[s(i),null],value:[e]}))),this.override({height:240,width:320})}}i.VideoStream\u003dn,n.__name__\u003d\"VideoStream\",n.__module__\u003d\"panel.models.widgets\",n.init_VideoStream()},\n      \"c51f25e2a7\": function _(o,V,e,l,K){l(),K(\"VTKJSPlot\",o(\"34fc7779c7\").VTKJSPlot),K(\"VTKVolumePlot\",o(\"89262e43a1\").VTKVolumePlot),K(\"VTKAxes\",o(\"db7a0079c0\").VTKAxes),K(\"VTKSynchronizedPlot\",o(\"4baab0b7ce\").VTKSynchronizedPlot)},\n      \"34fc7779c7\": function _(e,t,n,i,s){i();const a\u003de(\"46fdad9667\"),r\u003de(\"4eb45e35aa\");class _ extends a.AbstractVTKView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.data.change,(()\u003d\u003e{this.invalidate_render()}))}render(){super.render(),this._create_orientation_widget(),this._set_axes()}invalidate_render(){this._vtk_renwin\u003dnull,super.invalidate_render()}init_vtk_renwin(){this._vtk_renwin\u003dr.vtkns.FullScreenRenderWindow.newInstance({rootContainer:this.el,container:this._vtk_container})}plot(){if(!this.model.data)return void this._vtk_renwin.getRenderWindow().render();const e\u003dr.vtkns.DataAccessHelper.get(\"zip\",{zipContent:atob(this.model.data),callback:t\u003d\u003e{const n\u003dr.vtkns.HttpSceneLoader.newInstance({renderer:this._vtk_renwin.getRenderer(),dataAccessHelper:e}),i\u003dr.vtk.macro.debounce((()\u003d\u003esetTimeout((()\u003d\u003e{null\u003d\u003dthis._axes\u0026\u0026this.model.axes\u0026\u0026this._set_axes(),this._set_camera_state(),this._get_camera_state()}),100)),100);n.setUrl(\"index.json\"),n.onReady(i)}})}}n.VTKJSPlotView\u003d_,_.__name__\u003d\"VTKJSPlotView\";class o extends a.AbstractVTKPlot{static init_VTKJSPlot(){this.prototype.default_view\u003d_,this.define((({Boolean:e,Nullable:t,String:n})\u003d\u003e({data:[t(n)],enable_keybindings:[e,!1]})))}}n.VTKJSPlot\u003do,o.__name__\u003d\"VTKJSPlot\",o.init_VTKJSPlot()},\n      \"46fdad9667\": function _(e,t,i,n,s){n();const a\u003de(\"@bokehjs/core/dom\"),o\u003de(\"@bokehjs/models/layouts/html_box\"),r\u003de(\"@bokehjs/core/util/object\"),_\u003de(\"@bokehjs/models/mappers/color_mapper\"),d\u003de(\"@bokehjs/core/kinds\"),h\u003de(\"4c755983eb\"),c\u003de(\"4eb45e35aa\"),l\u003de(\"c010237f8b\"),g\u003de(\"db7a0079c0\"),p\u003d{padding:\"0px 2px 0px 2px\",maxHeight:\"150px\",height:\"auto\",backgroundColor:\"rgba(255, 255, 255, 0.4)\",borderRadius:\"10px\",margin:\"2px\",boxSizing:\"border-box\",overflow:\"hidden\",overflowY:\"auto\",transition:\"width 0.1s linear\",bottom:\"0px\",position:\"absolute\"},m\u003dd.Enum(\"LowerLeft\",\"LowerRight\",\"UpperLeft\",\"UpperRight\",\"LowerEdge\",\"RightEdge\",\"LeftEdge\",\"UpperEdge\");class v extends h.PanelHTMLBoxView{initialize(){super.initialize(),this._camera_callbacks\u003d[],this._renderable\u003d!0,this._setting_camera\u003d!1}_add_colorbars(){const e\u003dthis.el.querySelector(\".vtk_info\");if(e\u0026\u0026this.el.removeChild(e),this.model.color_mappers.length\u003c1)return;const t\u003ddocument.createElement(\"div\"),i\u003d\"350px\",n\u003d\"30px\";t.classList.add(\"vtk_info\"),c.applyStyle(t,p),c.applyStyle(t,{width:i}),this.el.appendChild(t);const s\u003d[];this.model.color_mappers.forEach((e\u003d\u003e{const i\u003dnew l.VTKColorBar(t,e);s.push(i)}));const a\u003ddocument.createElement(\"div\");c.applyStyle(a,{textAlign:\"center\",fontSize:\"20px\"}),a.innerText\u003d\"...\",t.addEventListener(\"click\",(()\u003d\u003e{t.style.width\u003d\u003d\u003dn?(t.removeChild(a),c.applyStyle(t,{height:\"auto\",width:i}),s.forEach((e\u003d\u003et.appendChild(e.canvas)))):(s.forEach((e\u003d\u003et.removeChild(e.canvas))),c.applyStyle(t,{height:n,width:n}),t.appendChild(a))})),t.click()}_init_annotations_container(){this._annotations_container||(this._annotations_container\u003ddocument.createElement(\"div\"),this._annotations_container.style.position\u003d\"absolute\",this._annotations_container.style.width\u003d\"100%\",this._annotations_container.style.height\u003d\"100%\",this._annotations_container.style.top\u003d\"0\",this._annotations_container.style.left\u003d\"0\",this._annotations_container.style.pointerEvents\u003d\"none\")}_clean_annotations(){if(this._annotations_container)for(;this._annotations_container.firstElementChild;)this._annotations_container.firstElementChild.remove()}_add_annotations(){this._clean_annotations();const{annotations:e}\u003dthis.model;if(null!\u003de)for(let t of e){const{viewport:e,color:i,fontSize:n,fontFamily:s}\u003dt;m.values.forEach((a\u003d\u003e{const o\u003dt[a];if(o){const t\u003ddocument.createElement(\"div\");t.textContent\u003do;const{style:r}\u003dt;r.position\u003d\"absolute\",r.color\u003d`rgb(${i.map((e\u003d\u003e255*e)).join(\",\")})`,r.fontSize\u003d`${n}px`,r.padding\u003d\"5px\",r.fontFamily\u003ds,r.width\u003d\"fit-content\",\"UpperLeft\"\u003d\u003da\u0026\u0026(r.top\u003d100*(1-e[3])+\"%\",r.left\u003d100*e[0]+\"%\"),\"UpperRight\"\u003d\u003da\u0026\u0026(r.top\u003d100*(1-e[3])+\"%\",r.right\u003d100*(1-e[2])+\"%\"),\"LowerLeft\"\u003d\u003da\u0026\u0026(r.bottom\u003d100*e[1]+\"%\",r.left\u003d100*e[0]+\"%\"),\"LowerRight\"\u003d\u003da\u0026\u0026(r.bottom\u003d100*e[1]+\"%\",r.right\u003d100*(1-e[2])+\"%\"),\"UpperEdge\"\u003d\u003da\u0026\u0026(r.top\u003d100*(1-e[3])+\"%\",r.left\u003d100*(e[0]+(e[2]-e[0])/2)+\"%\",r.transform\u003d\"translateX(-50%)\"),\"LowerEdge\"\u003d\u003da\u0026\u0026(r.bottom\u003d100*e[1]+\"%\",r.left\u003d100*(e[0]+(e[2]-e[0])/2)+\"%\",r.transform\u003d\"translateX(-50%)\"),\"LeftEdge\"\u003d\u003da\u0026\u0026(r.left\u003d100*e[0]+\"%\",r.top\u003d100*(1-e[3]+(e[3]-e[1])/2)+\"%\",r.transform\u003d\"translateY(-50%)\"),\"RightEdge\"\u003d\u003da\u0026\u0026(r.right\u003d100*(1-e[2])+\"%\",r.top\u003d100*(1-e[3]+(e[3]-e[1])/2)+\"%\",r.transform\u003d\"translateY(-50%)\"),this._annotations_container.appendChild(t)}}))}console.log(this.model.annotations)}connect_signals(){super.connect_signals(),this.on_change(this.model.properties.orientation_widget,(()\u003d\u003e{this._orientation_widget_visibility(this.model.orientation_widget)})),this.on_change(this.model.properties.camera,(()\u003d\u003ethis._set_camera_state())),this.on_change(this.model.properties.axes,(()\u003d\u003e{this._delete_axes(),this.model.axes\u0026\u0026this._set_axes(),this._vtk_render()})),this.on_change(this.model.properties.color_mappers,(()\u003d\u003ethis._add_colorbars())),this.on_change(this.model.properties.annotations,(()\u003d\u003ethis._add_annotations()))}render(){super.render(),this._vtk_renwin\u0026\u0026this._vtk_container?(h.set_size(this._vtk_container,this.model),this.el.appendChild(this._vtk_container)):(this._orientationWidget\u003dnull,this._axes\u003dnull,this._vtk_container\u003da.div(),this.init_vtk_renwin(),this._init_annotations_container(),h.set_size(this._vtk_container,this.model),this.el.appendChild(this._vtk_container),this._vtk_renwin.getInteractor().onEndAnimation((()\u003d\u003ethis._get_camera_state())),this._remove_default_key_binding(),this._bind_key_events(),this.plot(),this._add_colorbars(),this._add_annotations(),this.model.renderer_el\u003dthis._vtk_renwin),this.el.appendChild(this._annotations_container)}after_layout(){super.after_layout(),this._renderable\u0026\u0026this._vtk_renwin.resize(),this._vtk_render()}invalidate_render(){this._unsubscribe_camera_cb(),super.invalidate_render()}resize_layout(){this.layout\u0026\u0026super.resize_layout()}remove(){this._unsubscribe_camera_cb(),window.removeEventListener(\"resize\",this._vtk_renwin.resize),this._vtk_renwin.delete(),super.remove()}get _vtk_camera_state(){const e\u003dthis._vtk_renwin.getRenderer().getActiveCamera();let t;return e\u0026\u0026(t\u003dr.clone(e.get()),delete t.classHierarchy,delete t.vtkObject,delete t.vtkCamera,delete t.viewPlaneNormal,delete t.flattenedDepIds,delete t.managedInstanceId,delete t.directionOfProjection),t}get _axes_canvas(){let e\u003dthis._vtk_container.querySelector(\".axes-canvas\");return e||(e\u003da.canvas({style:{position:\"absolute\",top:\"0\",left:\"0\",width:\"100%\",height:\"100%\"}}),e.classList.add(\"axes-canvas\"),this._vtk_container.appendChild(e),this._vtk_renwin.setResizeCallback((()\u003d\u003e{if(this._axes_canvas){const e\u003dthis._vtk_container.getBoundingClientRect(),t\u003dMath.floor(e.width*window.devicePixelRatio),i\u003dMath.floor(e.height*window.devicePixelRatio);this._axes_canvas.setAttribute(\"width\",t.toFixed()),this._axes_canvas.setAttribute(\"height\",i.toFixed())}}))),e}_bind_key_events(){this.el.addEventListener(\"mouseenter\",(()\u003d\u003e{const e\u003dthis._vtk_renwin.getInteractor();this.model.enable_keybindings\u0026\u0026(document.querySelector(\"body\").addEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").addEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").addEventListener(\"keyup\",e.handleKeyUp))})),this.el.addEventListener(\"mouseleave\",(()\u003d\u003e{const e\u003dthis._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)}))}_create_orientation_widget(){const e\u003dc.vtkns.AxesActor.newInstance();this._orientationWidget\u003dc.vtkns.OrientationMarkerWidget.newInstance({actor:e,interactor:this._vtk_renwin.getInteractor()}),this._orientationWidget.setEnabled(!0),this._orientationWidget.setViewportCorner(c.vtkns.OrientationMarkerWidget.Corners.BOTTOM_RIGHT),this._orientationWidget.setViewportSize(.15),this._orientationWidget.setMinPixelSize(75),this._orientationWidget.setMaxPixelSize(300),this.model.interactive_orientation_widget\u0026\u0026this._make_orientation_widget_interactive(),this._orientation_widget_visibility(this.model.orientation_widget)}_make_orientation_widget_interactive(){this._widgetManager\u003dc.vtkns.WidgetManager.newInstance(),this._widgetManager.setRenderer(this._orientationWidget.getRenderer());const e\u003dthis._orientationWidget.getActor(),t\u003dc.vtkns.InteractiveOrientationWidget.newInstance();t.placeWidget(e.getBounds()),t.setBounds(e.getBounds()),t.setPlaceFactor(1);this._widgetManager.addWidget(t).onOrientationChange((({direction:e})\u003d\u003e{const t\u003dthis._vtk_renwin.getRenderer().getActiveCamera(),i\u003dt.getFocalPoint(),n\u003dt.getPosition(),s\u003dt.getViewUp(),a\u003dMath.sqrt(Math.pow(n[0]-i[0],2)+Math.pow(n[1]-i[1],2)+Math.pow(n[2]-i[2],2));t.setPosition(i[0]+e[0]*a,i[1]+e[1]*a,i[2]+e[2]*a),e[0]\u0026\u0026t.setViewUp(c.majorAxis(s,1,2)),e[1]\u0026\u0026t.setViewUp(c.majorAxis(s,0,2)),e[2]\u0026\u0026t.setViewUp(c.majorAxis(s,0,1)),this._vtk_renwin.getRenderer().resetCameraClippingRange(),this._vtk_render(),this._get_camera_state()}))}_delete_axes(){if(this._axes){Object.keys(this._axes).forEach((e\u003d\u003ethis._vtk_renwin.getRenderer().removeActor(this._axes[e]))),this._axes\u003dnull;const e\u003dthis._axes_canvas.getContext(\"2d\");e\u0026\u0026e.clearRect(0,0,this._axes_canvas.clientWidth*window.devicePixelRatio,this._axes_canvas.clientHeight*window.devicePixelRatio)}}_get_camera_state(){this._setting_camera||(this._setting_camera\u003d!0,this.model.camera\u003dthis._vtk_camera_state,this._setting_camera\u003d!1)}_orientation_widget_visibility(e){this._orientationWidget.setEnabled(e),null!\u003dthis._widgetManager\u0026\u0026(e?this._widgetManager.enablePicking():this._widgetManager.disablePicking()),this._vtk_render()}_remove_default_key_binding(){const e\u003dthis._vtk_renwin.getInteractor();document.querySelector(\"body\").removeEventListener(\"keypress\",e.handleKeyPress),document.querySelector(\"body\").removeEventListener(\"keydown\",e.handleKeyDown),document.querySelector(\"body\").removeEventListener(\"keyup\",e.handleKeyUp)}_set_axes(){if(this.model.axes\u0026\u0026this._vtk_renwin.getRenderer()){const{psActor:e,axesActor:t,gridActor:i}\u003dthis.model.axes.create_axes(this._axes_canvas);this._axes\u003d{psActor:e,axesActor:t,gridActor:i},e\u0026\u0026this._vtk_renwin.getRenderer().addActor(e),t\u0026\u0026this._vtk_renwin.getRenderer().addActor(t),i\u0026\u0026this._vtk_renwin.getRenderer().addActor(i)}}_set_camera_state(){this._setting_camera||void 0\u003d\u003d\u003dthis._vtk_renwin.getRenderer()||(this._setting_camera\u003d!0,this.model.camera\u0026\u0026JSON.stringify(this.model.camera)!\u003dJSON.stringify(this._vtk_camera_state)\u0026\u0026this._vtk_renwin.getRenderer().getActiveCamera().set(this.model.camera),this._vtk_renwin.getRenderer().resetCameraClippingRange(),this._vtk_render(),this._setting_camera\u003d!1)}_unsubscribe_camera_cb(){this._camera_callbacks.splice(0,this._camera_callbacks.length).map((e\u003d\u003ee.unsubscribe()))}_vtk_render(){this._renderable\u0026\u0026(this._orientationWidget\u0026\u0026this._orientationWidget.updateMarkerOrientation(),this._vtk_renwin.getRenderWindow().render())}}i.AbstractVTKView\u003dv,v.__name__\u003d\"AbstractVTKView\";class w extends o.HTMLBox{constructor(e){super(e)}getActors(){return this.renderer_el.getRenderer().getActors()}static init_AbstractVTKPlot(){this.define((({Any:e,Ref:t,Array:i,Boolean:n,Nullable:s})\u003d\u003e({axes:[s(t(g.VTKAxes)),null],camera:[e],color_mappers:[i(t(_.ColorMapper)),[]],orientation_widget:[n,!1],interactive_orientation_widget:[n,!1],annotations:[s(i(e)),null]}))),this.override({height:300,width:300})}}i.AbstractVTKPlot\u003dw,w.__name__\u003d\"AbstractVTKPlot\",w.__module__\u003d\"panel.models.vtk\",w.init_AbstractVTKPlot()},\n      \"4eb45e35aa\": function _(e,t,n,r,a){r();const o\u003de(\"@bokehjs/core/util/array\"),k\u003de(\"@bokehjs/core/kinds\");if(n.ARRAY_TYPES\u003d{uint8:Uint8Array,int8:Int8Array,uint16:Uint16Array,int16:Int16Array,uint32:Uint32Array,int32:Int32Array,float32:Float32Array,float64:Float64Array},n.vtk\u003dwindow.vtk,n.vtkns\u003d{},n.vtk){n.vtkns.Actor\u003dn.vtk.Rendering.Core.vtkActor,n.vtkns.AxesActor\u003dn.vtk.Rendering.Core.vtkAxesActor,n.vtkns.Base64\u003dn.vtk.Common.Core.vtkBase64,n.vtkns.BoundingBox\u003dn.vtk.Common.DataModel.vtkBoundingBox,n.vtkns.Camera\u003dn.vtk.Rendering.Core.vtkCamera,n.vtkns.ColorTransferFunction\u003dn.vtk.Rendering.Core.vtkColorTransferFunction,n.vtkns.CubeSource\u003dn.vtk.Filters.Sources.vtkCubeSource,n.vtkns.DataAccessHelper\u003dn.vtk.IO.Core.DataAccessHelper,n.vtkns.DataArray\u003dn.vtk.Common.Core.vtkDataArray,n.vtkns.Follower\u003dn.vtk.Rendering.Core.vtkFollower,n.vtkns.FullScreenRenderWindow\u003dn.vtk.Rendering.Misc.vtkFullScreenRenderWindow,n.vtkns.Glyph3DMapper\u003dn.vtk.Rendering.Core.vtkGlyph3DMapper,n.vtkns.HttpSceneLoader\u003dn.vtk.IO.Core.vtkHttpSceneLoader,n.vtkns.ImageData\u003dn.vtk.Common.DataModel.vtkImageData,n.vtkns.ImageMapper\u003dn.vtk.Rendering.Core.vtkImageMapper,n.vtkns.ImageProperty\u003dn.vtk.Rendering.Core.vtkImageProperty,n.vtkns.ImageSlice\u003dn.vtk.Rendering.Core.vtkImageSlice,n.vtkns.InteractiveOrientationWidget\u003dn.vtk.Widgets.Widgets3D.vtkInteractiveOrientationWidget,n.vtkns.InteractorStyleTrackballCamera\u003dn.vtk.Interaction.Style.vtkInteractorStyleTrackballCamera,n.vtkns.Light\u003dn.vtk.Rendering.Core.vtkLight,n.vtkns.LineSource\u003dn.vtk.Filters.Sources.vtkLineSource,n.vtkns.LookupTable\u003dn.vtk.Common.Core.vtkLookupTable,n.vtkns.macro\u003dn.vtk.macro,n.vtkns.Mapper\u003dn.vtk.Rendering.Core.vtkMapper,n.vtkns.OpenGLRenderWindow\u003dn.vtk.Rendering.OpenGL.vtkRenderWindow,n.vtkns.OrientationMarkerWidget\u003dn.vtk.Interaction.Widgets.vtkOrientationMarkerWidget,n.vtkns.OutlineFilter\u003dn.vtk.Filters.General.vtkOutlineFilter,n.vtkns.PiecewiseFunction\u003dn.vtk.Common.DataModel.vtkPiecewiseFunction,n.vtkns.PixelSpaceCallbackMapper\u003dn.vtk.Rendering.Core.vtkPixelSpaceCallbackMapper,n.vtkns.PlaneSource\u003dn.vtk.Filters.Sources.vtkPlaneSource,n.vtkns.PointSource\u003dn.vtk.Filters.Sources.vtkPointSource,n.vtkns.PolyData\u003dn.vtk.Common.DataModel.vtkPolyData,n.vtkns.Property\u003dn.vtk.Rendering.Core.vtkProperty,n.vtkns.Renderer\u003dn.vtk.Rendering.Core.vtkRenderer,n.vtkns.RenderWindow\u003dn.vtk.Rendering.Core.vtkRenderWindow,n.vtkns.RenderWindowInteractor\u003dn.vtk.Rendering.Core.vtkRenderWindowInteractor,n.vtkns.SphereMapper\u003dn.vtk.Rendering.Core.vtkSphereMapper,n.vtkns.SynchronizableRenderWindow\u003dn.vtk.Rendering.Misc.vtkSynchronizableRenderWindow,n.vtkns.ThirdParty\u003dn.vtk.ThirdParty,n.vtkns.Texture\u003dn.vtk.Rendering.Core.vtkTexture,n.vtkns.Volume\u003dn.vtk.Rendering.Core.vtkVolume,n.vtkns.VolumeController\u003dn.vtk.Interaction.UI.vtkVolumeController,n.vtkns.VolumeMapper\u003dn.vtk.Rendering.Core.vtkVolumeMapper,n.vtkns.VolumeProperty\u003dn.vtk.Rendering.Core.vtkVolumeProperty,n.vtkns.WidgetManager\u003dn.vtk.Widgets.Core.vtkWidgetManager;const{vtkObjectManager:e}\u003dn.vtkns.SynchronizableRenderWindow;e.setTypeMapping(\"vtkVolumeMapper\",n.vtkns.VolumeMapper.newInstance,e.oneTimeGenericUpdater),e.setTypeMapping(\"vtkSmartVolumeMapper\",n.vtkns.VolumeMapper.newInstance,e.oneTimeGenericUpdater),e.setTypeMapping(\"vtkFollower\",n.vtkns.Follower.newInstance,e.genericUpdater),e.setTypeMapping(\"vtkOpenGLGlyph3DMapper\",n.vtkns.Glyph3DMapper.newInstance,e.genericUpdater)}function i(e){const t\u003dMath.min(Math.max(Math.round(e),0),255).toString(16);return 2\u003d\u003dt.length?t:\"0\"+t}function v(e,t,n){return\"#\"+i(e)+i(t)+i(n)}function s(e){for(var t\u003dnew ArrayBuffer(e.length),n\u003dnew Uint8Array(t),r\u003d0,a\u003de.length;r\u003ca;r++)n[r]\u003de.charCodeAt(r);return t}n.Interpolation\u003dk.Enum(\"fast_linear\",\"linear\",\"nearest\"),n.applyStyle\u003dfunction(e,t){Object.keys(t).forEach((n\u003d\u003e{e.style[n]\u003dt[n]}))},n.hexToRGB\u003dfunction(e){return[parseInt(e.slice(1,3),16)/255,parseInt(e.slice(3,5),16)/255,parseInt(e.slice(5,7),16)/255]},n.rgbToHex\u003dv,n.vtkLutToMapper\u003dfunction(e){const{scale:t,nodes:r}\u003de.get(\"scale\",\"nodes\");if(t!\u003d\u003dn.vtkns.ColorTransferFunction.Scale.LINEAR)throw\"Error transfer function scale not handle\";const a\u003dr.map((e\u003d\u003ee.x)),k\u003dMath.min(...a),i\u003dMath.max(...a),s\u003do.linspace(k,i,255),c\u003d[0,0,0];return{low:k,high:i,palette:s.map((t\u003d\u003e(e.getColor(t,c),v(255*c[0],255*c[1],255*c[2]))))}},n.data2VTKImageData\u003dfunction(e){const t\u003dn.vtkns.ImageData.newInstance({spacing:e.spacing});t.setDimensions(e.dims),t.setOrigin(null!\u003de.origin?e.origin:e.dims.map((e\u003d\u003ee/2)));const r\u003dn.vtkns.DataArray.newInstance({name:\"scalars\",numberOfComponents:1,values:new n.ARRAY_TYPES[e.dtype](s(atob(e.buffer)))});return t.getPointData().setScalars(r),t},n.majorAxis\u003dfunction(e,t,n){const r\u003d[0,0,0],a\u003dMath.abs(e[t])\u003eMath.abs(e[n])?t:n,o\u003de[a]\u003e0?1:-1;return r[a]\u003do,r},n.cartesian_product\u003dfunction(...e){return e.reduce(((e,t)\u003d\u003ee.flatMap((e\u003d\u003et.map((t\u003d\u003e[].concat(e,t)))))))}},\n      \"c010237f8b\": function _(t,i,e,s,h){s();const a\u003dt(\"@bokehjs/models/mappers\"),n\u003dt(\"@bokehjs/core/util/array\");class c{constructor(t,i,e\u003d{}){this.parent\u003dt,this.mapper\u003di,this.options\u003de,e.ticksNum||(e.ticksNum\u003d5),e.fontFamily||(e.fontFamily\u003d\"Arial\"),e.fontSize||(e.fontSize\u003d\"12px\"),e.ticksSize||(e.ticksSize\u003d2),this.canvas\u003ddocument.createElement(\"canvas\"),this.canvas.style.width\u003d\"100%\",this.parent.appendChild(this.canvas),this.ctx\u003dthis.canvas.getContext(\"2d\"),this.ctx.font\u003d`${this.options.fontSize} ${this.options.fontFamily}`,this.ctx.lineWidth\u003de.ticksSize,e.height||(e.height\u003d4*(this.font_height+1)+\"px\"),this.canvas.style.height\u003de.height,this.draw_colorbar()}get values(){const{min:t,max:i}\u003dthis.mapper.metrics;return n.linspace(t,i,this.options.ticksNum)}get ticks(){return this.values.map((t\u003d\u003et.toExponential(3)))}get title(){return this.mapper.name?this.mapper.name:\"scalars\"}get font_height(){let t\u003d0;return this.values.forEach((i\u003d\u003e{const{actualBoundingBoxAscent:e,actualBoundingBoxDescent:s}\u003dthis.ctx.measureText(`${i}`),h\u003de+s;t\u003ch\u0026\u0026(t\u003dh)})),t}draw_colorbar(){this.canvas.width\u003dthis.canvas.clientWidth,this.canvas.height\u003dthis.canvas.clientHeight;const{palette:t}\u003dthis.mapper;this.ctx.font\u003d`${this.options.fontSize} ${this.options.fontFamily}`;const i\u003dthis.font_height;this.ctx.save();const e\u003ddocument.createElement(\"canvas\"),s\u003dt.length;e.width\u003ds,e.height\u003d1;const h\u003de.getContext(\"2d\"),c\u003dh.getImageData(0,0,s,1),o\u003dnew a.LinearColorMapper({palette:t}).rgba_mapper.v_compute(n.range(0,t.length));c.data.set(o),h.putImageData(c,0,0),this.ctx.drawImage(e,0,2*(this.font_height+1)+1,this.canvas.width,this.canvas.height),this.ctx.restore(),this.ctx.save(),this.ctx.textAlign\u003d\"center\",this.ctx.fillText(this.title,this.canvas.width/2,i+1),this.ctx.restore(),this.ctx.save();const r\u003dn.linspace(0,this.canvas.width,5);r.forEach(((t,e)\u003d\u003e{let s\u003dt;0\u003d\u003de?(s\u003dt+Math.ceil(this.ctx.lineWidth/2),this.ctx.textAlign\u003d\"left\"):e\u003d\u003dr.length-1?(s\u003dt-Math.ceil(this.ctx.lineWidth/2),this.ctx.textAlign\u003d\"right\"):this.ctx.textAlign\u003d\"center\",this.ctx.moveTo(s,2*(i+1)),this.ctx.lineTo(s,2*(i+1)+5),this.ctx.stroke(),this.ctx.fillText(`${this.ticks[e]}`,t,2*(i+1))})),this.ctx.restore()}}e.VTKColorBar\u003dc,c.__name__\u003d\"VTKColorBar\"},\n      \"db7a0079c0\": function _(t,s,i,e,n){e();const a\u003dt(\"tslib\").__importStar(t(\"@bokehjs/core/properties\")),r\u003dt(\"@bokehjs/model\"),c\u003dt(\"2f3fd5db07\"),h\u003dt(\"4eb45e35aa\");class l extends r.Model{constructor(t){super(t)}static init_VTKAxes(){this.define({origin:[a.Array],xticker:[a.Instance],yticker:[a.Instance],zticker:[a.Instance],digits:[a.Number,1],show_grid:[a.Boolean,!0],grid_opacity:[a.Number,.1],axes_opacity:[a.Number,1],fontsize:[a.Number,12]})}get xticks(){return this.xticker?this.xticker.ticks:[]}get yticks(){return this.yticker?this.yticker.ticks:[]}get zticks(){return this.zticker?this.zticker.ticks:[]}get xlabels(){return this.xticker.labels?this.xticker.labels:this.xticks.map((t\u003d\u003et.toFixed(this.digits)))}get ylabels(){return this.yticker.labels?this.yticker.labels:this.yticks.map((t\u003d\u003et.toFixed(this.digits)))}get zlabels(){return this.zticker.labels?this.zticker.labels:this.zticks.map((t\u003d\u003et.toFixed(this.digits)))}_make_grid_lines(t,s,i){const e\u003d[];for(let n\u003d0;n\u003ct-1;n++)for(let t\u003d0;t\u003cs-1;t++){const a\u003dn*s+t+i,r\u003d[5,a,n*s+t+1+i,(n+1)*s+t+1+i,(n+1)*s+t+i,a];e.push(r)}return e}_create_grid_axes(){const t\u003d[];t.push(h.cartesian_product(this.xticks,this.yticks,[this.origin[2]])),t.push(h.cartesian_product([this.origin[0]],this.yticks,this.zticks)),t.push(h.cartesian_product(this.xticks,[this.origin[1]],this.zticks));const s\u003d[];let i\u003d0;s.push(this._make_grid_lines(this.xticks.length,this.yticks.length,i)),i+\u003dthis.xticks.length*this.yticks.length,s.push(this._make_grid_lines(this.yticks.length,this.zticks.length,i)),i+\u003dthis.yticks.length*this.zticks.length,s.push(this._make_grid_lines(this.xticks.length,this.zticks.length,i));const e\u003dh.vtk({vtkClass:\"vtkPolyData\",points:{vtkClass:\"vtkPoints\",dataType:\"Float32Array\",numberOfComponents:3,values:t.flat(2)},lines:{vtkClass:\"vtkCellArray\",dataType:\"Uint32Array\",values:s.flat(2)}}),n\u003dh.vtkns.Mapper.newInstance(),a\u003dh.vtkns.Actor.newInstance();return n.setInputData(e),a.setMapper(n),a.getProperty().setOpacity(this.grid_opacity),a.setVisibility(this.show_grid),a}create_axes(t){if(null\u003d\u003dthis.origin)return{psActor:null,axesActor:null,gridActor:null};const s\u003d[this.xticks,this.yticks,this.zticks].map(((t,s)\u003d\u003e{let i\u003dnull;switch(s){case 0:i\u003dh.cartesian_product(t,[this.origin[1]],[this.origin[2]]);break;case 1:i\u003dh.cartesian_product([this.origin[0]],t,[this.origin[2]]);break;case 2:i\u003dh.cartesian_product([this.origin[0]],[this.origin[1]],t)}return i})).flat(2),i\u003dh.vtk({vtkClass:\"vtkPolyData\",points:{vtkClass:\"vtkPoints\",dataType:\"Float32Array\",numberOfComponents:3,values:s},lines:{vtkClass:\"vtkCellArray\",dataType:\"Uint32Array\",values:[2,0,this.xticks.length-1,2,this.xticks.length,this.xticks.length+this.yticks.length-1,2,this.xticks.length+this.yticks.length,this.xticks.length+this.yticks.length+this.zticks.length-1]}}),e\u003dh.vtkns.PixelSpaceCallbackMapper.newInstance();e.setInputData(i),e.setUseZValues(!0),e.setCallback(((s,i,n)\u003d\u003e{const a\u003dt.getContext(\"2d\");if(a){const r\u003d{height:t.clientHeight*window.devicePixelRatio,width:t.clientWidth*window.devicePixelRatio},h\u003de.getInputData().getPoints(),l\u003di.getViewMatrix();c.mat4.transpose(l,l);const o\u003di.getProjectionMatrix(n,-1,1);c.mat4.transpose(o,o),a.clearRect(0,0,r.width,r.height),s.forEach(((t,s)\u003d\u003e{const i\u003dh.getPoint(s),e\u003dc.vec3.fromValues(i[0],i[1],i[2]);if(c.vec3.transformMat4(e,e,l),e[2]+\u003d.05,c.vec3.transformMat4(e,e,o),e[2]-.001\u003ct[3]){let i;a.font\u003d\"30px serif\",a.textAlign\u003d\"center\",a.textBaseline\u003d\"alphabetic\",a.fillText(\".\",t[0],r.height-t[1]+2),a.font\u003dthis.fontsize*window.devicePixelRatio+\"px serif\",a.textAlign\u003d\"right\",a.textBaseline\u003d\"top\",i\u003ds\u003cthis.xticks.length?this.xlabels[s]:s\u003e\u003dthis.xticks.length\u0026\u0026s\u003cthis.xticks.length+this.yticks.length?this.ylabels[s-this.xticks.length]:this.zlabels[s-(this.xticks.length+this.yticks.length)],a.fillText(`${i}`,t[0],r.height-t[1])}}))}}));const n\u003dh.vtkns.Actor.newInstance();n.setMapper(e);const a\u003dh.vtkns.Mapper.newInstance();a.setInputData(i);const r\u003dh.vtkns.Actor.newInstance();r.setMapper(a),r.getProperty().setOpacity(this.axes_opacity);return{psActor:n,axesActor:r,gridActor:this._create_grid_axes()}}}i.VTKAxes\u003dl,l.__name__\u003d\"VTKAxes\",l.__module__\u003d\"panel.models.vtk\",l.init_VTKAxes()},\n      \"2f3fd5db07\": function _(t,c,a,o,r){o();const _\u003dt(\"tslib\"),m\u003d_.__importStar(t(\"68ca94c15c\"));a.glMatrix\u003dm;const i\u003d_.__importStar(t(\"7c0b8e6048\"));a.mat2\u003di;const n\u003d_.__importStar(t(\"dc03f0a621\"));a.mat2d\u003dn;const s\u003d_.__importStar(t(\"0285c50a7e\"));a.mat3\u003ds;const p\u003d_.__importStar(t(\"a427635f32\"));a.mat4\u003dp;const S\u003d_.__importStar(t(\"eb06fc032a\"));a.quat\u003dS;const e\u003d_.__importStar(t(\"277615c682\"));a.quat2\u003de;const f\u003d_.__importStar(t(\"c56d9ff837\"));a.vec2\u003df;const b\u003d_.__importStar(t(\"2c5eb22089\"));a.vec3\u003db;const d\u003d_.__importStar(t(\"c1aa33d719\"));a.vec4\u003dd},\n      \"68ca94c15c\": function _(t,a,r,n,o){n(),r.EPSILON\u003d1e-6,r.ARRAY_TYPE\u003d\"undefined\"!\u003dtypeof Float32Array?Float32Array:Array,r.RANDOM\u003dMath.random,r.setMatrixArrayType\u003dfunction(t){r.ARRAY_TYPE\u003dt};var h\u003dMath.PI/180;r.toRadian\u003dfunction(t){return t*h},r.equals\u003dfunction(t,a){return Math.abs(t-a)\u003c\u003dr.EPSILON*Math.max(1,Math.abs(t),Math.abs(a))},Math.hypot||(Math.hypot\u003dfunction(){for(var t\u003d0,a\u003darguments.length;a--;)t+\u003darguments[a]*arguments[a];return Math.sqrt(t)})},\n      \"7c0b8e6048\": function _(t,n,r,a,u){a();const e\u003dt(\"tslib\").__importStar(t(\"68ca94c15c\"));function o(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2],o\u003dn[3],c\u003dr[0],i\u003dr[1],f\u003dr[2],s\u003dr[3];return t[0]\u003da*c+e*i,t[1]\u003du*c+o*i,t[2]\u003da*f+e*s,t[3]\u003du*f+o*s,t}function c(t,n,r){return t[0]\u003dn[0]-r[0],t[1]\u003dn[1]-r[1],t[2]\u003dn[2]-r[2],t[3]\u003dn[3]-r[3],t}r.create\u003dfunction(){var t\u003dnew e.ARRAY_TYPE(4);return e.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[1]\u003d0,t[2]\u003d0),t[0]\u003d1,t[3]\u003d1,t},r.clone\u003dfunction(t){var n\u003dnew e.ARRAY_TYPE(4);return n[0]\u003dt[0],n[1]\u003dt[1],n[2]\u003dt[2],n[3]\u003dt[3],n},r.copy\u003dfunction(t,n){return t[0]\u003dn[0],t[1]\u003dn[1],t[2]\u003dn[2],t[3]\u003dn[3],t},r.identity\u003dfunction(t){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d1,t},r.fromValues\u003dfunction(t,n,r,a){var u\u003dnew e.ARRAY_TYPE(4);return u[0]\u003dt,u[1]\u003dn,u[2]\u003dr,u[3]\u003da,u},r.set\u003dfunction(t,n,r,a,u){return t[0]\u003dn,t[1]\u003dr,t[2]\u003da,t[3]\u003du,t},r.transpose\u003dfunction(t,n){if(t\u003d\u003d\u003dn){var r\u003dn[1];t[1]\u003dn[2],t[2]\u003dr}else t[0]\u003dn[0],t[1]\u003dn[2],t[2]\u003dn[1],t[3]\u003dn[3];return t},r.invert\u003dfunction(t,n){var r\u003dn[0],a\u003dn[1],u\u003dn[2],e\u003dn[3],o\u003dr*e-u*a;return o?(o\u003d1/o,t[0]\u003de*o,t[1]\u003d-a*o,t[2]\u003d-u*o,t[3]\u003dr*o,t):null},r.adjoint\u003dfunction(t,n){var r\u003dn[0];return t[0]\u003dn[3],t[1]\u003d-n[1],t[2]\u003d-n[2],t[3]\u003dr,t},r.determinant\u003dfunction(t){return t[0]*t[3]-t[2]*t[1]},r.multiply\u003do,r.rotate\u003dfunction(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2],o\u003dn[3],c\u003dMath.sin(r),i\u003dMath.cos(r);return t[0]\u003da*i+e*c,t[1]\u003du*i+o*c,t[2]\u003da*-c+e*i,t[3]\u003du*-c+o*i,t},r.scale\u003dfunction(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2],o\u003dn[3],c\u003dr[0],i\u003dr[1];return t[0]\u003da*c,t[1]\u003du*c,t[2]\u003de*i,t[3]\u003do*i,t},r.fromRotation\u003dfunction(t,n){var r\u003dMath.sin(n),a\u003dMath.cos(n);return t[0]\u003da,t[1]\u003dr,t[2]\u003d-r,t[3]\u003da,t},r.fromScaling\u003dfunction(t,n){return t[0]\u003dn[0],t[1]\u003d0,t[2]\u003d0,t[3]\u003dn[1],t},r.str\u003dfunction(t){return\"mat2(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},r.frob\u003dfunction(t){return Math.hypot(t[0],t[1],t[2],t[3])},r.LDU\u003dfunction(t,n,r,a){return t[2]\u003da[2]/a[0],r[0]\u003da[0],r[1]\u003da[1],r[3]\u003da[3]-t[2]*r[1],[t,n,r]},r.add\u003dfunction(t,n,r){return t[0]\u003dn[0]+r[0],t[1]\u003dn[1]+r[1],t[2]\u003dn[2]+r[2],t[3]\u003dn[3]+r[3],t},r.subtract\u003dc,r.exactEquals\u003dfunction(t,n){return t[0]\u003d\u003d\u003dn[0]\u0026\u0026t[1]\u003d\u003d\u003dn[1]\u0026\u0026t[2]\u003d\u003d\u003dn[2]\u0026\u0026t[3]\u003d\u003d\u003dn[3]},r.equals\u003dfunction(t,n){var r\u003dt[0],a\u003dt[1],u\u003dt[2],o\u003dt[3],c\u003dn[0],i\u003dn[1],f\u003dn[2],s\u003dn[3];return Math.abs(r-c)\u003c\u003de.EPSILON*Math.max(1,Math.abs(r),Math.abs(c))\u0026\u0026Math.abs(a-i)\u003c\u003de.EPSILON*Math.max(1,Math.abs(a),Math.abs(i))\u0026\u0026Math.abs(u-f)\u003c\u003de.EPSILON*Math.max(1,Math.abs(u),Math.abs(f))\u0026\u0026Math.abs(o-s)\u003c\u003de.EPSILON*Math.max(1,Math.abs(o),Math.abs(s))},r.multiplyScalar\u003dfunction(t,n,r){return t[0]\u003dn[0]*r,t[1]\u003dn[1]*r,t[2]\u003dn[2]*r,t[3]\u003dn[3]*r,t},r.multiplyScalarAndAdd\u003dfunction(t,n,r,a){return t[0]\u003dn[0]+r[0]*a,t[1]\u003dn[1]+r[1]*a,t[2]\u003dn[2]+r[2]*a,t[3]\u003dn[3]+r[3]*a,t},r.mul\u003do,r.sub\u003dc},\n      \"dc03f0a621\": function _(t,n,a,r,u){r();const o\u003dt(\"tslib\").__importStar(t(\"68ca94c15c\"));function e(t,n,a){var r\u003dn[0],u\u003dn[1],o\u003dn[2],e\u003dn[3],c\u003dn[4],i\u003dn[5],s\u003da[0],h\u003da[1],f\u003da[2],M\u003da[3],b\u003da[4],l\u003da[5];return t[0]\u003dr*s+o*h,t[1]\u003du*s+e*h,t[2]\u003dr*f+o*M,t[3]\u003du*f+e*M,t[4]\u003dr*b+o*l+c,t[5]\u003du*b+e*l+i,t}function c(t,n,a){return t[0]\u003dn[0]-a[0],t[1]\u003dn[1]-a[1],t[2]\u003dn[2]-a[2],t[3]\u003dn[3]-a[3],t[4]\u003dn[4]-a[4],t[5]\u003dn[5]-a[5],t}a.create\u003dfunction(){var t\u003dnew o.ARRAY_TYPE(6);return o.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[1]\u003d0,t[2]\u003d0,t[4]\u003d0,t[5]\u003d0),t[0]\u003d1,t[3]\u003d1,t},a.clone\u003dfunction(t){var n\u003dnew o.ARRAY_TYPE(6);return n[0]\u003dt[0],n[1]\u003dt[1],n[2]\u003dt[2],n[3]\u003dt[3],n[4]\u003dt[4],n[5]\u003dt[5],n},a.copy\u003dfunction(t,n){return t[0]\u003dn[0],t[1]\u003dn[1],t[2]\u003dn[2],t[3]\u003dn[3],t[4]\u003dn[4],t[5]\u003dn[5],t},a.identity\u003dfunction(t){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d1,t[4]\u003d0,t[5]\u003d0,t},a.fromValues\u003dfunction(t,n,a,r,u,e){var c\u003dnew o.ARRAY_TYPE(6);return c[0]\u003dt,c[1]\u003dn,c[2]\u003da,c[3]\u003dr,c[4]\u003du,c[5]\u003de,c},a.set\u003dfunction(t,n,a,r,u,o,e){return t[0]\u003dn,t[1]\u003da,t[2]\u003dr,t[3]\u003du,t[4]\u003do,t[5]\u003de,t},a.invert\u003dfunction(t,n){var a\u003dn[0],r\u003dn[1],u\u003dn[2],o\u003dn[3],e\u003dn[4],c\u003dn[5],i\u003da*o-r*u;return i?(i\u003d1/i,t[0]\u003do*i,t[1]\u003d-r*i,t[2]\u003d-u*i,t[3]\u003da*i,t[4]\u003d(u*c-o*e)*i,t[5]\u003d(r*e-a*c)*i,t):null},a.determinant\u003dfunction(t){return t[0]*t[3]-t[1]*t[2]},a.multiply\u003de,a.rotate\u003dfunction(t,n,a){var r\u003dn[0],u\u003dn[1],o\u003dn[2],e\u003dn[3],c\u003dn[4],i\u003dn[5],s\u003dMath.sin(a),h\u003dMath.cos(a);return t[0]\u003dr*h+o*s,t[1]\u003du*h+e*s,t[2]\u003dr*-s+o*h,t[3]\u003du*-s+e*h,t[4]\u003dc,t[5]\u003di,t},a.scale\u003dfunction(t,n,a){var r\u003dn[0],u\u003dn[1],o\u003dn[2],e\u003dn[3],c\u003dn[4],i\u003dn[5],s\u003da[0],h\u003da[1];return t[0]\u003dr*s,t[1]\u003du*s,t[2]\u003do*h,t[3]\u003de*h,t[4]\u003dc,t[5]\u003di,t},a.translate\u003dfunction(t,n,a){var r\u003dn[0],u\u003dn[1],o\u003dn[2],e\u003dn[3],c\u003dn[4],i\u003dn[5],s\u003da[0],h\u003da[1];return t[0]\u003dr,t[1]\u003du,t[2]\u003do,t[3]\u003de,t[4]\u003dr*s+o*h+c,t[5]\u003du*s+e*h+i,t},a.fromRotation\u003dfunction(t,n){var a\u003dMath.sin(n),r\u003dMath.cos(n);return t[0]\u003dr,t[1]\u003da,t[2]\u003d-a,t[3]\u003dr,t[4]\u003d0,t[5]\u003d0,t},a.fromScaling\u003dfunction(t,n){return t[0]\u003dn[0],t[1]\u003d0,t[2]\u003d0,t[3]\u003dn[1],t[4]\u003d0,t[5]\u003d0,t},a.fromTranslation\u003dfunction(t,n){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d1,t[4]\u003dn[0],t[5]\u003dn[1],t},a.str\u003dfunction(t){return\"mat2d(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\")\"},a.frob\u003dfunction(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],1)},a.add\u003dfunction(t,n,a){return t[0]\u003dn[0]+a[0],t[1]\u003dn[1]+a[1],t[2]\u003dn[2]+a[2],t[3]\u003dn[3]+a[3],t[4]\u003dn[4]+a[4],t[5]\u003dn[5]+a[5],t},a.subtract\u003dc,a.multiplyScalar\u003dfunction(t,n,a){return t[0]\u003dn[0]*a,t[1]\u003dn[1]*a,t[2]\u003dn[2]*a,t[3]\u003dn[3]*a,t[4]\u003dn[4]*a,t[5]\u003dn[5]*a,t},a.multiplyScalarAndAdd\u003dfunction(t,n,a,r){return t[0]\u003dn[0]+a[0]*r,t[1]\u003dn[1]+a[1]*r,t[2]\u003dn[2]+a[2]*r,t[3]\u003dn[3]+a[3]*r,t[4]\u003dn[4]+a[4]*r,t[5]\u003dn[5]+a[5]*r,t},a.exactEquals\u003dfunction(t,n){return t[0]\u003d\u003d\u003dn[0]\u0026\u0026t[1]\u003d\u003d\u003dn[1]\u0026\u0026t[2]\u003d\u003d\u003dn[2]\u0026\u0026t[3]\u003d\u003d\u003dn[3]\u0026\u0026t[4]\u003d\u003d\u003dn[4]\u0026\u0026t[5]\u003d\u003d\u003dn[5]},a.equals\u003dfunction(t,n){var a\u003dt[0],r\u003dt[1],u\u003dt[2],e\u003dt[3],c\u003dt[4],i\u003dt[5],s\u003dn[0],h\u003dn[1],f\u003dn[2],M\u003dn[3],b\u003dn[4],l\u003dn[5];return Math.abs(a-s)\u003c\u003do.EPSILON*Math.max(1,Math.abs(a),Math.abs(s))\u0026\u0026Math.abs(r-h)\u003c\u003do.EPSILON*Math.max(1,Math.abs(r),Math.abs(h))\u0026\u0026Math.abs(u-f)\u003c\u003do.EPSILON*Math.max(1,Math.abs(u),Math.abs(f))\u0026\u0026Math.abs(e-M)\u003c\u003do.EPSILON*Math.max(1,Math.abs(e),Math.abs(M))\u0026\u0026Math.abs(c-b)\u003c\u003do.EPSILON*Math.max(1,Math.abs(c),Math.abs(b))\u0026\u0026Math.abs(i-l)\u003c\u003do.EPSILON*Math.max(1,Math.abs(i),Math.abs(l))},a.mul\u003de,a.sub\u003dc},\n      \"0285c50a7e\": function _(t,a,n,r,u){r();const o\u003dt(\"tslib\").__importStar(t(\"68ca94c15c\"));function e(t,a,n){var r\u003da[0],u\u003da[1],o\u003da[2],e\u003da[3],i\u003da[4],c\u003da[5],s\u003da[6],M\u003da[7],h\u003da[8],f\u003dn[0],b\u003dn[1],l\u003dn[2],m\u003dn[3],v\u003dn[4],E\u003dn[5],P\u003dn[6],S\u003dn[7],A\u003dn[8];return t[0]\u003df*r+b*e+l*s,t[1]\u003df*u+b*i+l*M,t[2]\u003df*o+b*c+l*h,t[3]\u003dm*r+v*e+E*s,t[4]\u003dm*u+v*i+E*M,t[5]\u003dm*o+v*c+E*h,t[6]\u003dP*r+S*e+A*s,t[7]\u003dP*u+S*i+A*M,t[8]\u003dP*o+S*c+A*h,t}function i(t,a,n){return t[0]\u003da[0]-n[0],t[1]\u003da[1]-n[1],t[2]\u003da[2]-n[2],t[3]\u003da[3]-n[3],t[4]\u003da[4]-n[4],t[5]\u003da[5]-n[5],t[6]\u003da[6]-n[6],t[7]\u003da[7]-n[7],t[8]\u003da[8]-n[8],t}n.create\u003dfunction(){var t\u003dnew o.ARRAY_TYPE(9);return o.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0),t[0]\u003d1,t[4]\u003d1,t[8]\u003d1,t},n.fromMat4\u003dfunction(t,a){return t[0]\u003da[0],t[1]\u003da[1],t[2]\u003da[2],t[3]\u003da[4],t[4]\u003da[5],t[5]\u003da[6],t[6]\u003da[8],t[7]\u003da[9],t[8]\u003da[10],t},n.clone\u003dfunction(t){var a\u003dnew o.ARRAY_TYPE(9);return a[0]\u003dt[0],a[1]\u003dt[1],a[2]\u003dt[2],a[3]\u003dt[3],a[4]\u003dt[4],a[5]\u003dt[5],a[6]\u003dt[6],a[7]\u003dt[7],a[8]\u003dt[8],a},n.copy\u003dfunction(t,a){return t[0]\u003da[0],t[1]\u003da[1],t[2]\u003da[2],t[3]\u003da[3],t[4]\u003da[4],t[5]\u003da[5],t[6]\u003da[6],t[7]\u003da[7],t[8]\u003da[8],t},n.fromValues\u003dfunction(t,a,n,r,u,e,i,c,s){var M\u003dnew o.ARRAY_TYPE(9);return M[0]\u003dt,M[1]\u003da,M[2]\u003dn,M[3]\u003dr,M[4]\u003du,M[5]\u003de,M[6]\u003di,M[7]\u003dc,M[8]\u003ds,M},n.set\u003dfunction(t,a,n,r,u,o,e,i,c,s){return t[0]\u003da,t[1]\u003dn,t[2]\u003dr,t[3]\u003du,t[4]\u003do,t[5]\u003de,t[6]\u003di,t[7]\u003dc,t[8]\u003ds,t},n.identity\u003dfunction(t){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d1,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0,t[8]\u003d1,t},n.transpose\u003dfunction(t,a){if(t\u003d\u003d\u003da){var n\u003da[1],r\u003da[2],u\u003da[5];t[1]\u003da[3],t[2]\u003da[6],t[3]\u003dn,t[5]\u003da[7],t[6]\u003dr,t[7]\u003du}else t[0]\u003da[0],t[1]\u003da[3],t[2]\u003da[6],t[3]\u003da[1],t[4]\u003da[4],t[5]\u003da[7],t[6]\u003da[2],t[7]\u003da[5],t[8]\u003da[8];return t},n.invert\u003dfunction(t,a){var n\u003da[0],r\u003da[1],u\u003da[2],o\u003da[3],e\u003da[4],i\u003da[5],c\u003da[6],s\u003da[7],M\u003da[8],h\u003dM*e-i*s,f\u003d-M*o+i*c,b\u003ds*o-e*c,l\u003dn*h+r*f+u*b;return l?(l\u003d1/l,t[0]\u003dh*l,t[1]\u003d(-M*r+u*s)*l,t[2]\u003d(i*r-u*e)*l,t[3]\u003df*l,t[4]\u003d(M*n-u*c)*l,t[5]\u003d(-i*n+u*o)*l,t[6]\u003db*l,t[7]\u003d(-s*n+r*c)*l,t[8]\u003d(e*n-r*o)*l,t):null},n.adjoint\u003dfunction(t,a){var n\u003da[0],r\u003da[1],u\u003da[2],o\u003da[3],e\u003da[4],i\u003da[5],c\u003da[6],s\u003da[7],M\u003da[8];return t[0]\u003de*M-i*s,t[1]\u003du*s-r*M,t[2]\u003dr*i-u*e,t[3]\u003di*c-o*M,t[4]\u003dn*M-u*c,t[5]\u003du*o-n*i,t[6]\u003do*s-e*c,t[7]\u003dr*c-n*s,t[8]\u003dn*e-r*o,t},n.determinant\u003dfunction(t){var a\u003dt[0],n\u003dt[1],r\u003dt[2],u\u003dt[3],o\u003dt[4],e\u003dt[5],i\u003dt[6],c\u003dt[7],s\u003dt[8];return a*(s*o-e*c)+n*(-s*u+e*i)+r*(c*u-o*i)},n.multiply\u003de,n.translate\u003dfunction(t,a,n){var r\u003da[0],u\u003da[1],o\u003da[2],e\u003da[3],i\u003da[4],c\u003da[5],s\u003da[6],M\u003da[7],h\u003da[8],f\u003dn[0],b\u003dn[1];return t[0]\u003dr,t[1]\u003du,t[2]\u003do,t[3]\u003de,t[4]\u003di,t[5]\u003dc,t[6]\u003df*r+b*e+s,t[7]\u003df*u+b*i+M,t[8]\u003df*o+b*c+h,t},n.rotate\u003dfunction(t,a,n){var r\u003da[0],u\u003da[1],o\u003da[2],e\u003da[3],i\u003da[4],c\u003da[5],s\u003da[6],M\u003da[7],h\u003da[8],f\u003dMath.sin(n),b\u003dMath.cos(n);return t[0]\u003db*r+f*e,t[1]\u003db*u+f*i,t[2]\u003db*o+f*c,t[3]\u003db*e-f*r,t[4]\u003db*i-f*u,t[5]\u003db*c-f*o,t[6]\u003ds,t[7]\u003dM,t[8]\u003dh,t},n.scale\u003dfunction(t,a,n){var r\u003dn[0],u\u003dn[1];return t[0]\u003dr*a[0],t[1]\u003dr*a[1],t[2]\u003dr*a[2],t[3]\u003du*a[3],t[4]\u003du*a[4],t[5]\u003du*a[5],t[6]\u003da[6],t[7]\u003da[7],t[8]\u003da[8],t},n.fromTranslation\u003dfunction(t,a){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d1,t[5]\u003d0,t[6]\u003da[0],t[7]\u003da[1],t[8]\u003d1,t},n.fromRotation\u003dfunction(t,a){var n\u003dMath.sin(a),r\u003dMath.cos(a);return t[0]\u003dr,t[1]\u003dn,t[2]\u003d0,t[3]\u003d-n,t[4]\u003dr,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0,t[8]\u003d1,t},n.fromScaling\u003dfunction(t,a){return t[0]\u003da[0],t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003da[1],t[5]\u003d0,t[6]\u003d0,t[7]\u003d0,t[8]\u003d1,t},n.fromMat2d\u003dfunction(t,a){return t[0]\u003da[0],t[1]\u003da[1],t[2]\u003d0,t[3]\u003da[2],t[4]\u003da[3],t[5]\u003d0,t[6]\u003da[4],t[7]\u003da[5],t[8]\u003d1,t},n.fromQuat\u003dfunction(t,a){var n\u003da[0],r\u003da[1],u\u003da[2],o\u003da[3],e\u003dn+n,i\u003dr+r,c\u003du+u,s\u003dn*e,M\u003dr*e,h\u003dr*i,f\u003du*e,b\u003du*i,l\u003du*c,m\u003do*e,v\u003do*i,E\u003do*c;return t[0]\u003d1-h-l,t[3]\u003dM-E,t[6]\u003df+v,t[1]\u003dM+E,t[4]\u003d1-s-l,t[7]\u003db-m,t[2]\u003df-v,t[5]\u003db+m,t[8]\u003d1-s-h,t},n.normalFromMat4\u003dfunction(t,a){var n\u003da[0],r\u003da[1],u\u003da[2],o\u003da[3],e\u003da[4],i\u003da[5],c\u003da[6],s\u003da[7],M\u003da[8],h\u003da[9],f\u003da[10],b\u003da[11],l\u003da[12],m\u003da[13],v\u003da[14],E\u003da[15],P\u003dn*i-r*e,S\u003dn*c-u*e,A\u003dn*s-o*e,x\u003dr*c-u*i,d\u003dr*s-o*i,I\u003du*s-o*c,L\u003dM*m-h*l,N\u003dM*v-f*l,O\u003dM*E-b*l,R\u003dh*v-f*m,p\u003dh*E-b*m,Y\u003df*E-b*v,y\u003dP*Y-S*p+A*R+x*O-d*N+I*L;return y?(y\u003d1/y,t[0]\u003d(i*Y-c*p+s*R)*y,t[1]\u003d(c*O-e*Y-s*N)*y,t[2]\u003d(e*p-i*O+s*L)*y,t[3]\u003d(u*p-r*Y-o*R)*y,t[4]\u003d(n*Y-u*O+o*N)*y,t[5]\u003d(r*O-n*p-o*L)*y,t[6]\u003d(m*I-v*d+E*x)*y,t[7]\u003d(v*A-l*I-E*S)*y,t[8]\u003d(l*d-m*A+E*P)*y,t):null},n.projection\u003dfunction(t,a,n){return t[0]\u003d2/a,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d-2/n,t[5]\u003d0,t[6]\u003d-1,t[7]\u003d1,t[8]\u003d1,t},n.str\u003dfunction(t){return\"mat3(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\")\"},n.frob\u003dfunction(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8])},n.add\u003dfunction(t,a,n){return t[0]\u003da[0]+n[0],t[1]\u003da[1]+n[1],t[2]\u003da[2]+n[2],t[3]\u003da[3]+n[3],t[4]\u003da[4]+n[4],t[5]\u003da[5]+n[5],t[6]\u003da[6]+n[6],t[7]\u003da[7]+n[7],t[8]\u003da[8]+n[8],t},n.subtract\u003di,n.multiplyScalar\u003dfunction(t,a,n){return t[0]\u003da[0]*n,t[1]\u003da[1]*n,t[2]\u003da[2]*n,t[3]\u003da[3]*n,t[4]\u003da[4]*n,t[5]\u003da[5]*n,t[6]\u003da[6]*n,t[7]\u003da[7]*n,t[8]\u003da[8]*n,t},n.multiplyScalarAndAdd\u003dfunction(t,a,n,r){return t[0]\u003da[0]+n[0]*r,t[1]\u003da[1]+n[1]*r,t[2]\u003da[2]+n[2]*r,t[3]\u003da[3]+n[3]*r,t[4]\u003da[4]+n[4]*r,t[5]\u003da[5]+n[5]*r,t[6]\u003da[6]+n[6]*r,t[7]\u003da[7]+n[7]*r,t[8]\u003da[8]+n[8]*r,t},n.exactEquals\u003dfunction(t,a){return t[0]\u003d\u003d\u003da[0]\u0026\u0026t[1]\u003d\u003d\u003da[1]\u0026\u0026t[2]\u003d\u003d\u003da[2]\u0026\u0026t[3]\u003d\u003d\u003da[3]\u0026\u0026t[4]\u003d\u003d\u003da[4]\u0026\u0026t[5]\u003d\u003d\u003da[5]\u0026\u0026t[6]\u003d\u003d\u003da[6]\u0026\u0026t[7]\u003d\u003d\u003da[7]\u0026\u0026t[8]\u003d\u003d\u003da[8]},n.equals\u003dfunction(t,a){var n\u003dt[0],r\u003dt[1],u\u003dt[2],e\u003dt[3],i\u003dt[4],c\u003dt[5],s\u003dt[6],M\u003dt[7],h\u003dt[8],f\u003da[0],b\u003da[1],l\u003da[2],m\u003da[3],v\u003da[4],E\u003da[5],P\u003da[6],S\u003da[7],A\u003da[8];return Math.abs(n-f)\u003c\u003do.EPSILON*Math.max(1,Math.abs(n),Math.abs(f))\u0026\u0026Math.abs(r-b)\u003c\u003do.EPSILON*Math.max(1,Math.abs(r),Math.abs(b))\u0026\u0026Math.abs(u-l)\u003c\u003do.EPSILON*Math.max(1,Math.abs(u),Math.abs(l))\u0026\u0026Math.abs(e-m)\u003c\u003do.EPSILON*Math.max(1,Math.abs(e),Math.abs(m))\u0026\u0026Math.abs(i-v)\u003c\u003do.EPSILON*Math.max(1,Math.abs(i),Math.abs(v))\u0026\u0026Math.abs(c-E)\u003c\u003do.EPSILON*Math.max(1,Math.abs(c),Math.abs(E))\u0026\u0026Math.abs(s-P)\u003c\u003do.EPSILON*Math.max(1,Math.abs(s),Math.abs(P))\u0026\u0026Math.abs(M-S)\u003c\u003do.EPSILON*Math.max(1,Math.abs(M),Math.abs(S))\u0026\u0026Math.abs(h-A)\u003c\u003do.EPSILON*Math.max(1,Math.abs(h),Math.abs(A))},n.mul\u003de,n.sub\u003di},\n      \"a427635f32\": function _(t,a,n,r,h){r();const o\u003dt(\"tslib\").__importStar(t(\"68ca94c15c\"));function u(t){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}function M(t,a,n){var r\u003da[0],h\u003da[1],o\u003da[2],u\u003da[3],M\u003da[4],s\u003da[5],e\u003da[6],i\u003da[7],c\u003da[8],f\u003da[9],b\u003da[10],l\u003da[11],m\u003da[12],v\u003da[13],P\u003da[14],E\u003da[15],S\u003dn[0],I\u003dn[1],O\u003dn[2],L\u003dn[3];return t[0]\u003dS*r+I*M+O*c+L*m,t[1]\u003dS*h+I*s+O*f+L*v,t[2]\u003dS*o+I*e+O*b+L*P,t[3]\u003dS*u+I*i+O*l+L*E,S\u003dn[4],I\u003dn[5],O\u003dn[6],L\u003dn[7],t[4]\u003dS*r+I*M+O*c+L*m,t[5]\u003dS*h+I*s+O*f+L*v,t[6]\u003dS*o+I*e+O*b+L*P,t[7]\u003dS*u+I*i+O*l+L*E,S\u003dn[8],I\u003dn[9],O\u003dn[10],L\u003dn[11],t[8]\u003dS*r+I*M+O*c+L*m,t[9]\u003dS*h+I*s+O*f+L*v,t[10]\u003dS*o+I*e+O*b+L*P,t[11]\u003dS*u+I*i+O*l+L*E,S\u003dn[12],I\u003dn[13],O\u003dn[14],L\u003dn[15],t[12]\u003dS*r+I*M+O*c+L*m,t[13]\u003dS*h+I*s+O*f+L*v,t[14]\u003dS*o+I*e+O*b+L*P,t[15]\u003dS*u+I*i+O*l+L*E,t}function s(t,a,n){var r\u003da[0],h\u003da[1],o\u003da[2],u\u003da[3],M\u003dr+r,s\u003dh+h,e\u003do+o,i\u003dr*M,c\u003dr*s,f\u003dr*e,b\u003dh*s,l\u003dh*e,m\u003do*e,v\u003du*M,P\u003du*s,E\u003du*e;return t[0]\u003d1-(b+m),t[1]\u003dc+E,t[2]\u003df-P,t[3]\u003d0,t[4]\u003dc-E,t[5]\u003d1-(i+m),t[6]\u003dl+v,t[7]\u003d0,t[8]\u003df+P,t[9]\u003dl-v,t[10]\u003d1-(i+b),t[11]\u003d0,t[12]\u003dn[0],t[13]\u003dn[1],t[14]\u003dn[2],t[15]\u003d1,t}function e(t,a){var n\u003da[0],r\u003da[1],h\u003da[2],o\u003da[4],u\u003da[5],M\u003da[6],s\u003da[8],e\u003da[9],i\u003da[10];return t[0]\u003dMath.hypot(n,r,h),t[1]\u003dMath.hypot(o,u,M),t[2]\u003dMath.hypot(s,e,i),t}function i(t,a,n){return t[0]\u003da[0]-n[0],t[1]\u003da[1]-n[1],t[2]\u003da[2]-n[2],t[3]\u003da[3]-n[3],t[4]\u003da[4]-n[4],t[5]\u003da[5]-n[5],t[6]\u003da[6]-n[6],t[7]\u003da[7]-n[7],t[8]\u003da[8]-n[8],t[9]\u003da[9]-n[9],t[10]\u003da[10]-n[10],t[11]\u003da[11]-n[11],t[12]\u003da[12]-n[12],t[13]\u003da[13]-n[13],t[14]\u003da[14]-n[14],t[15]\u003da[15]-n[15],t}n.create\u003dfunction(){var t\u003dnew o.ARRAY_TYPE(16);return o.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0),t[0]\u003d1,t[5]\u003d1,t[10]\u003d1,t[15]\u003d1,t},n.clone\u003dfunction(t){var a\u003dnew o.ARRAY_TYPE(16);return a[0]\u003dt[0],a[1]\u003dt[1],a[2]\u003dt[2],a[3]\u003dt[3],a[4]\u003dt[4],a[5]\u003dt[5],a[6]\u003dt[6],a[7]\u003dt[7],a[8]\u003dt[8],a[9]\u003dt[9],a[10]\u003dt[10],a[11]\u003dt[11],a[12]\u003dt[12],a[13]\u003dt[13],a[14]\u003dt[14],a[15]\u003dt[15],a},n.copy\u003dfunction(t,a){return t[0]\u003da[0],t[1]\u003da[1],t[2]\u003da[2],t[3]\u003da[3],t[4]\u003da[4],t[5]\u003da[5],t[6]\u003da[6],t[7]\u003da[7],t[8]\u003da[8],t[9]\u003da[9],t[10]\u003da[10],t[11]\u003da[11],t[12]\u003da[12],t[13]\u003da[13],t[14]\u003da[14],t[15]\u003da[15],t},n.fromValues\u003dfunction(t,a,n,r,h,u,M,s,e,i,c,f,b,l,m,v){var P\u003dnew o.ARRAY_TYPE(16);return P[0]\u003dt,P[1]\u003da,P[2]\u003dn,P[3]\u003dr,P[4]\u003dh,P[5]\u003du,P[6]\u003dM,P[7]\u003ds,P[8]\u003de,P[9]\u003di,P[10]\u003dc,P[11]\u003df,P[12]\u003db,P[13]\u003dl,P[14]\u003dm,P[15]\u003dv,P},n.set\u003dfunction(t,a,n,r,h,o,u,M,s,e,i,c,f,b,l,m,v){return t[0]\u003da,t[1]\u003dn,t[2]\u003dr,t[3]\u003dh,t[4]\u003do,t[5]\u003du,t[6]\u003dM,t[7]\u003ds,t[8]\u003de,t[9]\u003di,t[10]\u003dc,t[11]\u003df,t[12]\u003db,t[13]\u003dl,t[14]\u003dm,t[15]\u003dv,t},n.identity\u003du,n.transpose\u003dfunction(t,a){if(t\u003d\u003d\u003da){var n\u003da[1],r\u003da[2],h\u003da[3],o\u003da[6],u\u003da[7],M\u003da[11];t[1]\u003da[4],t[2]\u003da[8],t[3]\u003da[12],t[4]\u003dn,t[6]\u003da[9],t[7]\u003da[13],t[8]\u003dr,t[9]\u003do,t[11]\u003da[14],t[12]\u003dh,t[13]\u003du,t[14]\u003dM}else t[0]\u003da[0],t[1]\u003da[4],t[2]\u003da[8],t[3]\u003da[12],t[4]\u003da[1],t[5]\u003da[5],t[6]\u003da[9],t[7]\u003da[13],t[8]\u003da[2],t[9]\u003da[6],t[10]\u003da[10],t[11]\u003da[14],t[12]\u003da[3],t[13]\u003da[7],t[14]\u003da[11],t[15]\u003da[15];return t},n.invert\u003dfunction(t,a){var n\u003da[0],r\u003da[1],h\u003da[2],o\u003da[3],u\u003da[4],M\u003da[5],s\u003da[6],e\u003da[7],i\u003da[8],c\u003da[9],f\u003da[10],b\u003da[11],l\u003da[12],m\u003da[13],v\u003da[14],P\u003da[15],E\u003dn*M-r*u,S\u003dn*s-h*u,I\u003dn*e-o*u,O\u003dr*s-h*M,L\u003dr*e-o*M,N\u003dh*e-o*s,p\u003di*m-c*l,R\u003di*v-f*l,x\u003di*P-b*l,A\u003dc*v-f*m,y\u003dc*P-b*m,Y\u003df*P-b*v,g\u003dE*Y-S*y+I*A+O*x-L*R+N*p;return g?(g\u003d1/g,t[0]\u003d(M*Y-s*y+e*A)*g,t[1]\u003d(h*y-r*Y-o*A)*g,t[2]\u003d(m*N-v*L+P*O)*g,t[3]\u003d(f*L-c*N-b*O)*g,t[4]\u003d(s*x-u*Y-e*R)*g,t[5]\u003d(n*Y-h*x+o*R)*g,t[6]\u003d(v*I-l*N-P*S)*g,t[7]\u003d(i*N-f*I+b*S)*g,t[8]\u003d(u*y-M*x+e*p)*g,t[9]\u003d(r*x-n*y-o*p)*g,t[10]\u003d(l*L-m*I+P*E)*g,t[11]\u003d(c*I-i*L-b*E)*g,t[12]\u003d(M*R-u*A-s*p)*g,t[13]\u003d(n*A-r*R+h*p)*g,t[14]\u003d(m*S-l*O-v*E)*g,t[15]\u003d(i*O-c*S+f*E)*g,t):null},n.adjoint\u003dfunction(t,a){var n\u003da[0],r\u003da[1],h\u003da[2],o\u003da[3],u\u003da[4],M\u003da[5],s\u003da[6],e\u003da[7],i\u003da[8],c\u003da[9],f\u003da[10],b\u003da[11],l\u003da[12],m\u003da[13],v\u003da[14],P\u003da[15];return t[0]\u003dM*(f*P-b*v)-c*(s*P-e*v)+m*(s*b-e*f),t[1]\u003d-(r*(f*P-b*v)-c*(h*P-o*v)+m*(h*b-o*f)),t[2]\u003dr*(s*P-e*v)-M*(h*P-o*v)+m*(h*e-o*s),t[3]\u003d-(r*(s*b-e*f)-M*(h*b-o*f)+c*(h*e-o*s)),t[4]\u003d-(u*(f*P-b*v)-i*(s*P-e*v)+l*(s*b-e*f)),t[5]\u003dn*(f*P-b*v)-i*(h*P-o*v)+l*(h*b-o*f),t[6]\u003d-(n*(s*P-e*v)-u*(h*P-o*v)+l*(h*e-o*s)),t[7]\u003dn*(s*b-e*f)-u*(h*b-o*f)+i*(h*e-o*s),t[8]\u003du*(c*P-b*m)-i*(M*P-e*m)+l*(M*b-e*c),t[9]\u003d-(n*(c*P-b*m)-i*(r*P-o*m)+l*(r*b-o*c)),t[10]\u003dn*(M*P-e*m)-u*(r*P-o*m)+l*(r*e-o*M),t[11]\u003d-(n*(M*b-e*c)-u*(r*b-o*c)+i*(r*e-o*M)),t[12]\u003d-(u*(c*v-f*m)-i*(M*v-s*m)+l*(M*f-s*c)),t[13]\u003dn*(c*v-f*m)-i*(r*v-h*m)+l*(r*f-h*c),t[14]\u003d-(n*(M*v-s*m)-u*(r*v-h*m)+l*(r*s-h*M)),t[15]\u003dn*(M*f-s*c)-u*(r*f-h*c)+i*(r*s-h*M),t},n.determinant\u003dfunction(t){var a\u003dt[0],n\u003dt[1],r\u003dt[2],h\u003dt[3],o\u003dt[4],u\u003dt[5],M\u003dt[6],s\u003dt[7],e\u003dt[8],i\u003dt[9],c\u003dt[10],f\u003dt[11],b\u003dt[12],l\u003dt[13],m\u003dt[14],v\u003dt[15];return(a*u-n*o)*(c*v-f*m)-(a*M-r*o)*(i*v-f*l)+(a*s-h*o)*(i*m-c*l)+(n*M-r*u)*(e*v-f*b)-(n*s-h*u)*(e*m-c*b)+(r*s-h*M)*(e*l-i*b)},n.multiply\u003dM,n.translate\u003dfunction(t,a,n){var r,h,o,u,M,s,e,i,c,f,b,l,m\u003dn[0],v\u003dn[1],P\u003dn[2];return a\u003d\u003d\u003dt?(t[12]\u003da[0]*m+a[4]*v+a[8]*P+a[12],t[13]\u003da[1]*m+a[5]*v+a[9]*P+a[13],t[14]\u003da[2]*m+a[6]*v+a[10]*P+a[14],t[15]\u003da[3]*m+a[7]*v+a[11]*P+a[15]):(r\u003da[0],h\u003da[1],o\u003da[2],u\u003da[3],M\u003da[4],s\u003da[5],e\u003da[6],i\u003da[7],c\u003da[8],f\u003da[9],b\u003da[10],l\u003da[11],t[0]\u003dr,t[1]\u003dh,t[2]\u003do,t[3]\u003du,t[4]\u003dM,t[5]\u003ds,t[6]\u003de,t[7]\u003di,t[8]\u003dc,t[9]\u003df,t[10]\u003db,t[11]\u003dl,t[12]\u003dr*m+M*v+c*P+a[12],t[13]\u003dh*m+s*v+f*P+a[13],t[14]\u003do*m+e*v+b*P+a[14],t[15]\u003du*m+i*v+l*P+a[15]),t},n.scale\u003dfunction(t,a,n){var r\u003dn[0],h\u003dn[1],o\u003dn[2];return t[0]\u003da[0]*r,t[1]\u003da[1]*r,t[2]\u003da[2]*r,t[3]\u003da[3]*r,t[4]\u003da[4]*h,t[5]\u003da[5]*h,t[6]\u003da[6]*h,t[7]\u003da[7]*h,t[8]\u003da[8]*o,t[9]\u003da[9]*o,t[10]\u003da[10]*o,t[11]\u003da[11]*o,t[12]\u003da[12],t[13]\u003da[13],t[14]\u003da[14],t[15]\u003da[15],t},n.rotate\u003dfunction(t,a,n,r){var h,u,M,s,e,i,c,f,b,l,m,v,P,E,S,I,O,L,N,p,R,x,A,y,Y\u003dr[0],g\u003dr[1],T\u003dr[2],d\u003dMath.hypot(Y,g,T);return d\u003co.EPSILON?null:(Y*\u003dd\u003d1/d,g*\u003dd,T*\u003dd,h\u003dMath.sin(n),M\u003d1-(u\u003dMath.cos(n)),s\u003da[0],e\u003da[1],i\u003da[2],c\u003da[3],f\u003da[4],b\u003da[5],l\u003da[6],m\u003da[7],v\u003da[8],P\u003da[9],E\u003da[10],S\u003da[11],I\u003dY*Y*M+u,O\u003dg*Y*M+T*h,L\u003dT*Y*M-g*h,N\u003dY*g*M-T*h,p\u003dg*g*M+u,R\u003dT*g*M+Y*h,x\u003dY*T*M+g*h,A\u003dg*T*M-Y*h,y\u003dT*T*M+u,t[0]\u003ds*I+f*O+v*L,t[1]\u003de*I+b*O+P*L,t[2]\u003di*I+l*O+E*L,t[3]\u003dc*I+m*O+S*L,t[4]\u003ds*N+f*p+v*R,t[5]\u003de*N+b*p+P*R,t[6]\u003di*N+l*p+E*R,t[7]\u003dc*N+m*p+S*R,t[8]\u003ds*x+f*A+v*y,t[9]\u003de*x+b*A+P*y,t[10]\u003di*x+l*A+E*y,t[11]\u003dc*x+m*A+S*y,a!\u003d\u003dt\u0026\u0026(t[12]\u003da[12],t[13]\u003da[13],t[14]\u003da[14],t[15]\u003da[15]),t)},n.rotateX\u003dfunction(t,a,n){var r\u003dMath.sin(n),h\u003dMath.cos(n),o\u003da[4],u\u003da[5],M\u003da[6],s\u003da[7],e\u003da[8],i\u003da[9],c\u003da[10],f\u003da[11];return a!\u003d\u003dt\u0026\u0026(t[0]\u003da[0],t[1]\u003da[1],t[2]\u003da[2],t[3]\u003da[3],t[12]\u003da[12],t[13]\u003da[13],t[14]\u003da[14],t[15]\u003da[15]),t[4]\u003do*h+e*r,t[5]\u003du*h+i*r,t[6]\u003dM*h+c*r,t[7]\u003ds*h+f*r,t[8]\u003de*h-o*r,t[9]\u003di*h-u*r,t[10]\u003dc*h-M*r,t[11]\u003df*h-s*r,t},n.rotateY\u003dfunction(t,a,n){var r\u003dMath.sin(n),h\u003dMath.cos(n),o\u003da[0],u\u003da[1],M\u003da[2],s\u003da[3],e\u003da[8],i\u003da[9],c\u003da[10],f\u003da[11];return a!\u003d\u003dt\u0026\u0026(t[4]\u003da[4],t[5]\u003da[5],t[6]\u003da[6],t[7]\u003da[7],t[12]\u003da[12],t[13]\u003da[13],t[14]\u003da[14],t[15]\u003da[15]),t[0]\u003do*h-e*r,t[1]\u003du*h-i*r,t[2]\u003dM*h-c*r,t[3]\u003ds*h-f*r,t[8]\u003do*r+e*h,t[9]\u003du*r+i*h,t[10]\u003dM*r+c*h,t[11]\u003ds*r+f*h,t},n.rotateZ\u003dfunction(t,a,n){var r\u003dMath.sin(n),h\u003dMath.cos(n),o\u003da[0],u\u003da[1],M\u003da[2],s\u003da[3],e\u003da[4],i\u003da[5],c\u003da[6],f\u003da[7];return a!\u003d\u003dt\u0026\u0026(t[8]\u003da[8],t[9]\u003da[9],t[10]\u003da[10],t[11]\u003da[11],t[12]\u003da[12],t[13]\u003da[13],t[14]\u003da[14],t[15]\u003da[15]),t[0]\u003do*h+e*r,t[1]\u003du*h+i*r,t[2]\u003dM*h+c*r,t[3]\u003ds*h+f*r,t[4]\u003de*h-o*r,t[5]\u003di*h-u*r,t[6]\u003dc*h-M*r,t[7]\u003df*h-s*r,t},n.fromTranslation\u003dfunction(t,a){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003da[0],t[13]\u003da[1],t[14]\u003da[2],t[15]\u003d1,t},n.fromScaling\u003dfunction(t,a){return t[0]\u003da[0],t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003da[1],t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003da[2],t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t},n.fromRotation\u003dfunction(t,a,n){var r,h,u,M\u003dn[0],s\u003dn[1],e\u003dn[2],i\u003dMath.hypot(M,s,e);return i\u003co.EPSILON?null:(M*\u003di\u003d1/i,s*\u003di,e*\u003di,r\u003dMath.sin(a),u\u003d1-(h\u003dMath.cos(a)),t[0]\u003dM*M*u+h,t[1]\u003ds*M*u+e*r,t[2]\u003de*M*u-s*r,t[3]\u003d0,t[4]\u003dM*s*u-e*r,t[5]\u003ds*s*u+h,t[6]\u003de*s*u+M*r,t[7]\u003d0,t[8]\u003dM*e*u+s*r,t[9]\u003ds*e*u-M*r,t[10]\u003de*e*u+h,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t)},n.fromXRotation\u003dfunction(t,a){var n\u003dMath.sin(a),r\u003dMath.cos(a);return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003dr,t[6]\u003dn,t[7]\u003d0,t[8]\u003d0,t[9]\u003d-n,t[10]\u003dr,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t},n.fromYRotation\u003dfunction(t,a){var n\u003dMath.sin(a),r\u003dMath.cos(a);return t[0]\u003dr,t[1]\u003d0,t[2]\u003d-n,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003dn,t[9]\u003d0,t[10]\u003dr,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t},n.fromZRotation\u003dfunction(t,a){var n\u003dMath.sin(a),r\u003dMath.cos(a);return t[0]\u003dr,t[1]\u003dn,t[2]\u003d0,t[3]\u003d0,t[4]\u003d-n,t[5]\u003dr,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t},n.fromRotationTranslation\u003ds,n.fromQuat2\u003dfunction(t,a){var n\u003dnew o.ARRAY_TYPE(3),r\u003d-a[0],h\u003d-a[1],u\u003d-a[2],M\u003da[3],e\u003da[4],i\u003da[5],c\u003da[6],f\u003da[7],b\u003dr*r+h*h+u*u+M*M;return b\u003e0?(n[0]\u003d2*(e*M+f*r+i*u-c*h)/b,n[1]\u003d2*(i*M+f*h+c*r-e*u)/b,n[2]\u003d2*(c*M+f*u+e*h-i*r)/b):(n[0]\u003d2*(e*M+f*r+i*u-c*h),n[1]\u003d2*(i*M+f*h+c*r-e*u),n[2]\u003d2*(c*M+f*u+e*h-i*r)),s(t,a,n),t},n.getTranslation\u003dfunction(t,a){return t[0]\u003da[12],t[1]\u003da[13],t[2]\u003da[14],t},n.getScaling\u003de,n.getRotation\u003dfunction(t,a){var n\u003dnew o.ARRAY_TYPE(3);e(n,a);var r\u003d1/n[0],h\u003d1/n[1],u\u003d1/n[2],M\u003da[0]*r,s\u003da[1]*h,i\u003da[2]*u,c\u003da[4]*r,f\u003da[5]*h,b\u003da[6]*u,l\u003da[8]*r,m\u003da[9]*h,v\u003da[10]*u,P\u003dM+f+v,E\u003d0;return P\u003e0?(E\u003d2*Math.sqrt(P+1),t[3]\u003d.25*E,t[0]\u003d(b-m)/E,t[1]\u003d(l-i)/E,t[2]\u003d(s-c)/E):M\u003ef\u0026\u0026M\u003ev?(E\u003d2*Math.sqrt(1+M-f-v),t[3]\u003d(b-m)/E,t[0]\u003d.25*E,t[1]\u003d(s+c)/E,t[2]\u003d(l+i)/E):f\u003ev?(E\u003d2*Math.sqrt(1+f-M-v),t[3]\u003d(l-i)/E,t[0]\u003d(s+c)/E,t[1]\u003d.25*E,t[2]\u003d(b+m)/E):(E\u003d2*Math.sqrt(1+v-M-f),t[3]\u003d(s-c)/E,t[0]\u003d(l+i)/E,t[1]\u003d(b+m)/E,t[2]\u003d.25*E),t},n.fromRotationTranslationScale\u003dfunction(t,a,n,r){var h\u003da[0],o\u003da[1],u\u003da[2],M\u003da[3],s\u003dh+h,e\u003do+o,i\u003du+u,c\u003dh*s,f\u003dh*e,b\u003dh*i,l\u003do*e,m\u003do*i,v\u003du*i,P\u003dM*s,E\u003dM*e,S\u003dM*i,I\u003dr[0],O\u003dr[1],L\u003dr[2];return t[0]\u003d(1-(l+v))*I,t[1]\u003d(f+S)*I,t[2]\u003d(b-E)*I,t[3]\u003d0,t[4]\u003d(f-S)*O,t[5]\u003d(1-(c+v))*O,t[6]\u003d(m+P)*O,t[7]\u003d0,t[8]\u003d(b+E)*L,t[9]\u003d(m-P)*L,t[10]\u003d(1-(c+l))*L,t[11]\u003d0,t[12]\u003dn[0],t[13]\u003dn[1],t[14]\u003dn[2],t[15]\u003d1,t},n.fromRotationTranslationScaleOrigin\u003dfunction(t,a,n,r,h){var o\u003da[0],u\u003da[1],M\u003da[2],s\u003da[3],e\u003do+o,i\u003du+u,c\u003dM+M,f\u003do*e,b\u003do*i,l\u003do*c,m\u003du*i,v\u003du*c,P\u003dM*c,E\u003ds*e,S\u003ds*i,I\u003ds*c,O\u003dr[0],L\u003dr[1],N\u003dr[2],p\u003dh[0],R\u003dh[1],x\u003dh[2],A\u003d(1-(m+P))*O,y\u003d(b+I)*O,Y\u003d(l-S)*O,g\u003d(b-I)*L,T\u003d(1-(f+P))*L,d\u003d(v+E)*L,_\u003d(l+S)*N,q\u003d(v-E)*N,w\u003d(1-(f+m))*N;return t[0]\u003dA,t[1]\u003dy,t[2]\u003dY,t[3]\u003d0,t[4]\u003dg,t[5]\u003dT,t[6]\u003dd,t[7]\u003d0,t[8]\u003d_,t[9]\u003dq,t[10]\u003dw,t[11]\u003d0,t[12]\u003dn[0]+p-(A*p+g*R+_*x),t[13]\u003dn[1]+R-(y*p+T*R+q*x),t[14]\u003dn[2]+x-(Y*p+d*R+w*x),t[15]\u003d1,t},n.fromQuat\u003dfunction(t,a){var n\u003da[0],r\u003da[1],h\u003da[2],o\u003da[3],u\u003dn+n,M\u003dr+r,s\u003dh+h,e\u003dn*u,i\u003dr*u,c\u003dr*M,f\u003dh*u,b\u003dh*M,l\u003dh*s,m\u003do*u,v\u003do*M,P\u003do*s;return t[0]\u003d1-c-l,t[1]\u003di+P,t[2]\u003df-v,t[3]\u003d0,t[4]\u003di-P,t[5]\u003d1-e-l,t[6]\u003db+m,t[7]\u003d0,t[8]\u003df+v,t[9]\u003db-m,t[10]\u003d1-e-c,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t},n.frustum\u003dfunction(t,a,n,r,h,o,u){var M\u003d1/(n-a),s\u003d1/(h-r),e\u003d1/(o-u);return t[0]\u003d2*o*M,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d2*o*s,t[6]\u003d0,t[7]\u003d0,t[8]\u003d(n+a)*M,t[9]\u003d(h+r)*s,t[10]\u003d(u+o)*e,t[11]\u003d-1,t[12]\u003d0,t[13]\u003d0,t[14]\u003du*o*2*e,t[15]\u003d0,t},n.perspective\u003dfunction(t,a,n,r,h){var o,u\u003d1/Math.tan(a/2);return t[0]\u003du/n,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003du,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[11]\u003d-1,t[12]\u003d0,t[13]\u003d0,t[15]\u003d0,null!\u003dh\u0026\u0026h!\u003d\u003d1/0?(o\u003d1/(r-h),t[10]\u003d(h+r)*o,t[14]\u003d2*h*r*o):(t[10]\u003d-1,t[14]\u003d-2*r),t},n.perspectiveFromFieldOfView\u003dfunction(t,a,n,r){var h\u003dMath.tan(a.upDegrees*Math.PI/180),o\u003dMath.tan(a.downDegrees*Math.PI/180),u\u003dMath.tan(a.leftDegrees*Math.PI/180),M\u003dMath.tan(a.rightDegrees*Math.PI/180),s\u003d2/(u+M),e\u003d2/(h+o);return t[0]\u003ds,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003de,t[6]\u003d0,t[7]\u003d0,t[8]\u003d-(u-M)*s*.5,t[9]\u003d(h-o)*e*.5,t[10]\u003dr/(n-r),t[11]\u003d-1,t[12]\u003d0,t[13]\u003d0,t[14]\u003dr*n/(n-r),t[15]\u003d0,t},n.ortho\u003dfunction(t,a,n,r,h,o,u){var M\u003d1/(a-n),s\u003d1/(r-h),e\u003d1/(o-u);return t[0]\u003d-2*M,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d-2*s,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d2*e,t[11]\u003d0,t[12]\u003d(a+n)*M,t[13]\u003d(h+r)*s,t[14]\u003d(u+o)*e,t[15]\u003d1,t},n.lookAt\u003dfunction(t,a,n,r){var h,M,s,e,i,c,f,b,l,m,v\u003da[0],P\u003da[1],E\u003da[2],S\u003dr[0],I\u003dr[1],O\u003dr[2],L\u003dn[0],N\u003dn[1],p\u003dn[2];return Math.abs(v-L)\u003co.EPSILON\u0026\u0026Math.abs(P-N)\u003co.EPSILON\u0026\u0026Math.abs(E-p)\u003co.EPSILON?u(t):(f\u003dv-L,b\u003dP-N,l\u003dE-p,h\u003dI*(l*\u003dm\u003d1/Math.hypot(f,b,l))-O*(b*\u003dm),M\u003dO*(f*\u003dm)-S*l,s\u003dS*b-I*f,(m\u003dMath.hypot(h,M,s))?(h*\u003dm\u003d1/m,M*\u003dm,s*\u003dm):(h\u003d0,M\u003d0,s\u003d0),e\u003db*s-l*M,i\u003dl*h-f*s,c\u003df*M-b*h,(m\u003dMath.hypot(e,i,c))?(e*\u003dm\u003d1/m,i*\u003dm,c*\u003dm):(e\u003d0,i\u003d0,c\u003d0),t[0]\u003dh,t[1]\u003de,t[2]\u003df,t[3]\u003d0,t[4]\u003dM,t[5]\u003di,t[6]\u003db,t[7]\u003d0,t[8]\u003ds,t[9]\u003dc,t[10]\u003dl,t[11]\u003d0,t[12]\u003d-(h*v+M*P+s*E),t[13]\u003d-(e*v+i*P+c*E),t[14]\u003d-(f*v+b*P+l*E),t[15]\u003d1,t)},n.targetTo\u003dfunction(t,a,n,r){var h\u003da[0],o\u003da[1],u\u003da[2],M\u003dr[0],s\u003dr[1],e\u003dr[2],i\u003dh-n[0],c\u003do-n[1],f\u003du-n[2],b\u003di*i+c*c+f*f;b\u003e0\u0026\u0026(i*\u003db\u003d1/Math.sqrt(b),c*\u003db,f*\u003db);var l\u003ds*f-e*c,m\u003de*i-M*f,v\u003dM*c-s*i;return(b\u003dl*l+m*m+v*v)\u003e0\u0026\u0026(l*\u003db\u003d1/Math.sqrt(b),m*\u003db,v*\u003db),t[0]\u003dl,t[1]\u003dm,t[2]\u003dv,t[3]\u003d0,t[4]\u003dc*v-f*m,t[5]\u003df*l-i*v,t[6]\u003di*m-c*l,t[7]\u003d0,t[8]\u003di,t[9]\u003dc,t[10]\u003df,t[11]\u003d0,t[12]\u003dh,t[13]\u003do,t[14]\u003du,t[15]\u003d1,t},n.str\u003dfunction(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"},n.frob\u003dfunction(t){return Math.hypot(t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[7],t[8],t[9],t[10],t[11],t[12],t[13],t[14],t[15])},n.add\u003dfunction(t,a,n){return t[0]\u003da[0]+n[0],t[1]\u003da[1]+n[1],t[2]\u003da[2]+n[2],t[3]\u003da[3]+n[3],t[4]\u003da[4]+n[4],t[5]\u003da[5]+n[5],t[6]\u003da[6]+n[6],t[7]\u003da[7]+n[7],t[8]\u003da[8]+n[8],t[9]\u003da[9]+n[9],t[10]\u003da[10]+n[10],t[11]\u003da[11]+n[11],t[12]\u003da[12]+n[12],t[13]\u003da[13]+n[13],t[14]\u003da[14]+n[14],t[15]\u003da[15]+n[15],t},n.subtract\u003di,n.multiplyScalar\u003dfunction(t,a,n){return t[0]\u003da[0]*n,t[1]\u003da[1]*n,t[2]\u003da[2]*n,t[3]\u003da[3]*n,t[4]\u003da[4]*n,t[5]\u003da[5]*n,t[6]\u003da[6]*n,t[7]\u003da[7]*n,t[8]\u003da[8]*n,t[9]\u003da[9]*n,t[10]\u003da[10]*n,t[11]\u003da[11]*n,t[12]\u003da[12]*n,t[13]\u003da[13]*n,t[14]\u003da[14]*n,t[15]\u003da[15]*n,t},n.multiplyScalarAndAdd\u003dfunction(t,a,n,r){return t[0]\u003da[0]+n[0]*r,t[1]\u003da[1]+n[1]*r,t[2]\u003da[2]+n[2]*r,t[3]\u003da[3]+n[3]*r,t[4]\u003da[4]+n[4]*r,t[5]\u003da[5]+n[5]*r,t[6]\u003da[6]+n[6]*r,t[7]\u003da[7]+n[7]*r,t[8]\u003da[8]+n[8]*r,t[9]\u003da[9]+n[9]*r,t[10]\u003da[10]+n[10]*r,t[11]\u003da[11]+n[11]*r,t[12]\u003da[12]+n[12]*r,t[13]\u003da[13]+n[13]*r,t[14]\u003da[14]+n[14]*r,t[15]\u003da[15]+n[15]*r,t},n.exactEquals\u003dfunction(t,a){return t[0]\u003d\u003d\u003da[0]\u0026\u0026t[1]\u003d\u003d\u003da[1]\u0026\u0026t[2]\u003d\u003d\u003da[2]\u0026\u0026t[3]\u003d\u003d\u003da[3]\u0026\u0026t[4]\u003d\u003d\u003da[4]\u0026\u0026t[5]\u003d\u003d\u003da[5]\u0026\u0026t[6]\u003d\u003d\u003da[6]\u0026\u0026t[7]\u003d\u003d\u003da[7]\u0026\u0026t[8]\u003d\u003d\u003da[8]\u0026\u0026t[9]\u003d\u003d\u003da[9]\u0026\u0026t[10]\u003d\u003d\u003da[10]\u0026\u0026t[11]\u003d\u003d\u003da[11]\u0026\u0026t[12]\u003d\u003d\u003da[12]\u0026\u0026t[13]\u003d\u003d\u003da[13]\u0026\u0026t[14]\u003d\u003d\u003da[14]\u0026\u0026t[15]\u003d\u003d\u003da[15]},n.equals\u003dfunction(t,a){var n\u003dt[0],r\u003dt[1],h\u003dt[2],u\u003dt[3],M\u003dt[4],s\u003dt[5],e\u003dt[6],i\u003dt[7],c\u003dt[8],f\u003dt[9],b\u003dt[10],l\u003dt[11],m\u003dt[12],v\u003dt[13],P\u003dt[14],E\u003dt[15],S\u003da[0],I\u003da[1],O\u003da[2],L\u003da[3],N\u003da[4],p\u003da[5],R\u003da[6],x\u003da[7],A\u003da[8],y\u003da[9],Y\u003da[10],g\u003da[11],T\u003da[12],d\u003da[13],_\u003da[14],q\u003da[15];return Math.abs(n-S)\u003c\u003do.EPSILON*Math.max(1,Math.abs(n),Math.abs(S))\u0026\u0026Math.abs(r-I)\u003c\u003do.EPSILON*Math.max(1,Math.abs(r),Math.abs(I))\u0026\u0026Math.abs(h-O)\u003c\u003do.EPSILON*Math.max(1,Math.abs(h),Math.abs(O))\u0026\u0026Math.abs(u-L)\u003c\u003do.EPSILON*Math.max(1,Math.abs(u),Math.abs(L))\u0026\u0026Math.abs(M-N)\u003c\u003do.EPSILON*Math.max(1,Math.abs(M),Math.abs(N))\u0026\u0026Math.abs(s-p)\u003c\u003do.EPSILON*Math.max(1,Math.abs(s),Math.abs(p))\u0026\u0026Math.abs(e-R)\u003c\u003do.EPSILON*Math.max(1,Math.abs(e),Math.abs(R))\u0026\u0026Math.abs(i-x)\u003c\u003do.EPSILON*Math.max(1,Math.abs(i),Math.abs(x))\u0026\u0026Math.abs(c-A)\u003c\u003do.EPSILON*Math.max(1,Math.abs(c),Math.abs(A))\u0026\u0026Math.abs(f-y)\u003c\u003do.EPSILON*Math.max(1,Math.abs(f),Math.abs(y))\u0026\u0026Math.abs(b-Y)\u003c\u003do.EPSILON*Math.max(1,Math.abs(b),Math.abs(Y))\u0026\u0026Math.abs(l-g)\u003c\u003do.EPSILON*Math.max(1,Math.abs(l),Math.abs(g))\u0026\u0026Math.abs(m-T)\u003c\u003do.EPSILON*Math.max(1,Math.abs(m),Math.abs(T))\u0026\u0026Math.abs(v-d)\u003c\u003do.EPSILON*Math.max(1,Math.abs(v),Math.abs(d))\u0026\u0026Math.abs(P-_)\u003c\u003do.EPSILON*Math.max(1,Math.abs(P),Math.abs(_))\u0026\u0026Math.abs(E-q)\u003c\u003do.EPSILON*Math.max(1,Math.abs(E),Math.abs(q))},n.mul\u003dM,n.sub\u003di},\n      \"eb06fc032a\": function _(t,a,r,n,e){n();const o\u003dt(\"tslib\"),s\u003do.__importStar(t(\"68ca94c15c\")),u\u003do.__importStar(t(\"0285c50a7e\")),c\u003do.__importStar(t(\"2c5eb22089\")),i\u003do.__importStar(t(\"c1aa33d719\"));function h(){var t\u003dnew s.ARRAY_TYPE(4);return s.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[0]\u003d0,t[1]\u003d0,t[2]\u003d0),t[3]\u003d1,t}function M(t,a,r){r*\u003d.5;var n\u003dMath.sin(r);return t[0]\u003dn*a[0],t[1]\u003dn*a[1],t[2]\u003dn*a[2],t[3]\u003dMath.cos(r),t}function l(t,a,r){var n\u003da[0],e\u003da[1],o\u003da[2],s\u003da[3],u\u003dr[0],c\u003dr[1],i\u003dr[2],h\u003dr[3];return t[0]\u003dn*h+s*u+e*i-o*c,t[1]\u003de*h+s*c+o*u-n*i,t[2]\u003do*h+s*i+n*c-e*u,t[3]\u003ds*h-n*u-e*c-o*i,t}function f(t,a){var r\u003da[0],n\u003da[1],e\u003da[2],o\u003da[3],s\u003dMath.sqrt(r*r+n*n+e*e),u\u003dMath.exp(o),c\u003ds\u003e0?u*Math.sin(s)/s:0;return t[0]\u003dr*c,t[1]\u003dn*c,t[2]\u003de*c,t[3]\u003du*Math.cos(s),t}function v(t,a){var r\u003da[0],n\u003da[1],e\u003da[2],o\u003da[3],s\u003dMath.sqrt(r*r+n*n+e*e),u\u003ds\u003e0?Math.atan2(s,o)/s:0;return t[0]\u003dr*u,t[1]\u003dn*u,t[2]\u003de*u,t[3]\u003d.5*Math.log(r*r+n*n+e*e+o*o),t}function m(t,a,r,n){var e,o,u,c,i,h\u003da[0],M\u003da[1],l\u003da[2],f\u003da[3],v\u003dr[0],m\u003dr[1],q\u003dr[2],d\u003dr[3];return(o\u003dh*v+M*m+l*q+f*d)\u003c0\u0026\u0026(o\u003d-o,v\u003d-v,m\u003d-m,q\u003d-q,d\u003d-d),1-o\u003es.EPSILON?(e\u003dMath.acos(o),u\u003dMath.sin(e),c\u003dMath.sin((1-n)*e)/u,i\u003dMath.sin(n*e)/u):(c\u003d1-n,i\u003dn),t[0]\u003dc*h+i*v,t[1]\u003dc*M+i*m,t[2]\u003dc*l+i*q,t[3]\u003dc*f+i*d,t}function q(t,a){var r,n\u003da[0]+a[4]+a[8];if(n\u003e0)r\u003dMath.sqrt(n+1),t[3]\u003d.5*r,r\u003d.5/r,t[0]\u003d(a[5]-a[7])*r,t[1]\u003d(a[6]-a[2])*r,t[2]\u003d(a[1]-a[3])*r;else{var e\u003d0;a[4]\u003ea[0]\u0026\u0026(e\u003d1),a[8]\u003ea[3*e+e]\u0026\u0026(e\u003d2);var o\u003d(e+1)%3,s\u003d(e+2)%3;r\u003dMath.sqrt(a[3*e+e]-a[3*o+o]-a[3*s+s]+1),t[e]\u003d.5*r,r\u003d.5/r,t[3]\u003d(a[3*o+s]-a[3*s+o])*r,t[o]\u003d(a[3*o+e]+a[3*e+o])*r,t[s]\u003d(a[3*s+e]+a[3*e+s])*r}return t}var d,p,A,g,_,P;r.create\u003dh,r.identity\u003dfunction(t){return t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d1,t},r.setAxisAngle\u003dM,r.getAxisAngle\u003dfunction(t,a){var r\u003d2*Math.acos(a[3]),n\u003dMath.sin(r/2);return n\u003es.EPSILON?(t[0]\u003da[0]/n,t[1]\u003da[1]/n,t[2]\u003da[2]/n):(t[0]\u003d1,t[1]\u003d0,t[2]\u003d0),r},r.getAngle\u003dfunction(t,a){var n\u003dr.dot(t,a);return Math.acos(2*n*n-1)},r.multiply\u003dl,r.rotateX\u003dfunction(t,a,r){r*\u003d.5;var n\u003da[0],e\u003da[1],o\u003da[2],s\u003da[3],u\u003dMath.sin(r),c\u003dMath.cos(r);return t[0]\u003dn*c+s*u,t[1]\u003de*c+o*u,t[2]\u003do*c-e*u,t[3]\u003ds*c-n*u,t},r.rotateY\u003dfunction(t,a,r){r*\u003d.5;var n\u003da[0],e\u003da[1],o\u003da[2],s\u003da[3],u\u003dMath.sin(r),c\u003dMath.cos(r);return t[0]\u003dn*c-o*u,t[1]\u003de*c+s*u,t[2]\u003do*c+n*u,t[3]\u003ds*c-e*u,t},r.rotateZ\u003dfunction(t,a,r){r*\u003d.5;var n\u003da[0],e\u003da[1],o\u003da[2],s\u003da[3],u\u003dMath.sin(r),c\u003dMath.cos(r);return t[0]\u003dn*c+e*u,t[1]\u003de*c-n*u,t[2]\u003do*c+s*u,t[3]\u003ds*c-o*u,t},r.calculateW\u003dfunction(t,a){var r\u003da[0],n\u003da[1],e\u003da[2];return t[0]\u003dr,t[1]\u003dn,t[2]\u003de,t[3]\u003dMath.sqrt(Math.abs(1-r*r-n*n-e*e)),t},r.exp\u003df,r.ln\u003dv,r.pow\u003dfunction(t,a,n){return v(t,a),r.scale(t,t,n),f(t,t),t},r.slerp\u003dm,r.random\u003dfunction(t){var a\u003ds.RANDOM(),r\u003ds.RANDOM(),n\u003ds.RANDOM(),e\u003dMath.sqrt(1-a),o\u003dMath.sqrt(a);return t[0]\u003de*Math.sin(2*Math.PI*r),t[1]\u003de*Math.cos(2*Math.PI*r),t[2]\u003do*Math.sin(2*Math.PI*n),t[3]\u003do*Math.cos(2*Math.PI*n),t},r.invert\u003dfunction(t,a){var r\u003da[0],n\u003da[1],e\u003da[2],o\u003da[3],s\u003dr*r+n*n+e*e+o*o,u\u003ds?1/s:0;return t[0]\u003d-r*u,t[1]\u003d-n*u,t[2]\u003d-e*u,t[3]\u003do*u,t},r.conjugate\u003dfunction(t,a){return t[0]\u003d-a[0],t[1]\u003d-a[1],t[2]\u003d-a[2],t[3]\u003da[3],t},r.fromMat3\u003dq,r.fromEuler\u003dfunction(t,a,r,n){var e\u003d.5*Math.PI/180;a*\u003de,r*\u003de,n*\u003de;var o\u003dMath.sin(a),s\u003dMath.cos(a),u\u003dMath.sin(r),c\u003dMath.cos(r),i\u003dMath.sin(n),h\u003dMath.cos(n);return t[0]\u003do*c*h-s*u*i,t[1]\u003ds*u*h+o*c*i,t[2]\u003ds*c*i-o*u*h,t[3]\u003ds*c*h+o*u*i,t},r.str\u003dfunction(t){return\"quat(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},r.clone\u003di.clone,r.fromValues\u003di.fromValues,r.copy\u003di.copy,r.set\u003di.set,r.add\u003di.add,r.mul\u003dl,r.scale\u003di.scale,r.dot\u003di.dot,r.lerp\u003di.lerp,r.length\u003di.length,r.len\u003dr.length,r.squaredLength\u003di.squaredLength,r.sqrLen\u003dr.squaredLength,r.normalize\u003di.normalize,r.exactEquals\u003di.exactEquals,r.equals\u003di.equals,r.rotationTo\u003d(d\u003dc.create(),p\u003dc.fromValues(1,0,0),A\u003dc.fromValues(0,1,0),function(t,a,n){var e\u003dc.dot(a,n);return e\u003c-.999999?(c.cross(d,p,a),c.len(d)\u003c1e-6\u0026\u0026c.cross(d,A,a),c.normalize(d,d),M(t,d,Math.PI),t):e\u003e.999999?(t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d1,t):(c.cross(d,a,n),t[0]\u003dd[0],t[1]\u003dd[1],t[2]\u003dd[2],t[3]\u003d1+e,r.normalize(t,t))}),r.sqlerp\u003d(g\u003dh(),_\u003dh(),function(t,a,r,n,e,o){return m(g,a,e,o),m(_,r,n,o),m(t,g,_,2*o*(1-o)),t}),r.setAxes\u003d(P\u003du.create(),function(t,a,n,e){return P[0]\u003dn[0],P[3]\u003dn[1],P[6]\u003dn[2],P[1]\u003de[0],P[4]\u003de[1],P[7]\u003de[2],P[2]\u003d-a[0],P[5]\u003d-a[1],P[8]\u003d-a[2],r.normalize(t,q(t,P))})},\n      \"2c5eb22089\": function _(t,n,r,a,u){a();const e\u003dt(\"tslib\").__importStar(t(\"68ca94c15c\"));function o(){var t\u003dnew e.ARRAY_TYPE(3);return e.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[0]\u003d0,t[1]\u003d0,t[2]\u003d0),t}function i(t){var n\u003dt[0],r\u003dt[1],a\u003dt[2];return Math.hypot(n,r,a)}function c(t,n,r){return t[0]\u003dn[0]-r[0],t[1]\u003dn[1]-r[1],t[2]\u003dn[2]-r[2],t}function h(t,n,r){return t[0]\u003dn[0]*r[0],t[1]\u003dn[1]*r[1],t[2]\u003dn[2]*r[2],t}function M(t,n,r){return t[0]\u003dn[0]/r[0],t[1]\u003dn[1]/r[1],t[2]\u003dn[2]/r[2],t}function s(t,n){var r\u003dn[0]-t[0],a\u003dn[1]-t[1],u\u003dn[2]-t[2];return Math.hypot(r,a,u)}function f(t,n){var r\u003dn[0]-t[0],a\u003dn[1]-t[1],u\u003dn[2]-t[2];return r*r+a*a+u*u}function v(t){var n\u003dt[0],r\u003dt[1],a\u003dt[2];return n*n+r*r+a*a}function l(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]}var m;r.create\u003do,r.clone\u003dfunction(t){var n\u003dnew e.ARRAY_TYPE(3);return n[0]\u003dt[0],n[1]\u003dt[1],n[2]\u003dt[2],n},r.length\u003di,r.fromValues\u003dfunction(t,n,r){var a\u003dnew e.ARRAY_TYPE(3);return a[0]\u003dt,a[1]\u003dn,a[2]\u003dr,a},r.copy\u003dfunction(t,n){return t[0]\u003dn[0],t[1]\u003dn[1],t[2]\u003dn[2],t},r.set\u003dfunction(t,n,r,a){return t[0]\u003dn,t[1]\u003dr,t[2]\u003da,t},r.add\u003dfunction(t,n,r){return t[0]\u003dn[0]+r[0],t[1]\u003dn[1]+r[1],t[2]\u003dn[2]+r[2],t},r.subtract\u003dc,r.multiply\u003dh,r.divide\u003dM,r.ceil\u003dfunction(t,n){return t[0]\u003dMath.ceil(n[0]),t[1]\u003dMath.ceil(n[1]),t[2]\u003dMath.ceil(n[2]),t},r.floor\u003dfunction(t,n){return t[0]\u003dMath.floor(n[0]),t[1]\u003dMath.floor(n[1]),t[2]\u003dMath.floor(n[2]),t},r.min\u003dfunction(t,n,r){return t[0]\u003dMath.min(n[0],r[0]),t[1]\u003dMath.min(n[1],r[1]),t[2]\u003dMath.min(n[2],r[2]),t},r.max\u003dfunction(t,n,r){return t[0]\u003dMath.max(n[0],r[0]),t[1]\u003dMath.max(n[1],r[1]),t[2]\u003dMath.max(n[2],r[2]),t},r.round\u003dfunction(t,n){return t[0]\u003dMath.round(n[0]),t[1]\u003dMath.round(n[1]),t[2]\u003dMath.round(n[2]),t},r.scale\u003dfunction(t,n,r){return t[0]\u003dn[0]*r,t[1]\u003dn[1]*r,t[2]\u003dn[2]*r,t},r.scaleAndAdd\u003dfunction(t,n,r,a){return t[0]\u003dn[0]+r[0]*a,t[1]\u003dn[1]+r[1]*a,t[2]\u003dn[2]+r[2]*a,t},r.distance\u003ds,r.squaredDistance\u003df,r.squaredLength\u003dv,r.negate\u003dfunction(t,n){return t[0]\u003d-n[0],t[1]\u003d-n[1],t[2]\u003d-n[2],t},r.inverse\u003dfunction(t,n){return t[0]\u003d1/n[0],t[1]\u003d1/n[1],t[2]\u003d1/n[2],t},r.normalize\u003dfunction(t,n){var r\u003dn[0],a\u003dn[1],u\u003dn[2],e\u003dr*r+a*a+u*u;return e\u003e0\u0026\u0026(e\u003d1/Math.sqrt(e)),t[0]\u003dn[0]*e,t[1]\u003dn[1]*e,t[2]\u003dn[2]*e,t},r.dot\u003dl,r.cross\u003dfunction(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2],o\u003dr[0],i\u003dr[1],c\u003dr[2];return t[0]\u003du*c-e*i,t[1]\u003de*o-a*c,t[2]\u003da*i-u*o,t},r.lerp\u003dfunction(t,n,r,a){var u\u003dn[0],e\u003dn[1],o\u003dn[2];return t[0]\u003du+a*(r[0]-u),t[1]\u003de+a*(r[1]-e),t[2]\u003do+a*(r[2]-o),t},r.hermite\u003dfunction(t,n,r,a,u,e){var o\u003de*e,i\u003do*(2*e-3)+1,c\u003do*(e-2)+e,h\u003do*(e-1),M\u003do*(3-2*e);return t[0]\u003dn[0]*i+r[0]*c+a[0]*h+u[0]*M,t[1]\u003dn[1]*i+r[1]*c+a[1]*h+u[1]*M,t[2]\u003dn[2]*i+r[2]*c+a[2]*h+u[2]*M,t},r.bezier\u003dfunction(t,n,r,a,u,e){var o\u003d1-e,i\u003do*o,c\u003de*e,h\u003di*o,M\u003d3*e*i,s\u003d3*c*o,f\u003dc*e;return t[0]\u003dn[0]*h+r[0]*M+a[0]*s+u[0]*f,t[1]\u003dn[1]*h+r[1]*M+a[1]*s+u[1]*f,t[2]\u003dn[2]*h+r[2]*M+a[2]*s+u[2]*f,t},r.random\u003dfunction(t,n){n\u003dn||1;var r\u003d2*e.RANDOM()*Math.PI,a\u003d2*e.RANDOM()-1,u\u003dMath.sqrt(1-a*a)*n;return t[0]\u003dMath.cos(r)*u,t[1]\u003dMath.sin(r)*u,t[2]\u003da*n,t},r.transformMat4\u003dfunction(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2],o\u003dr[3]*a+r[7]*u+r[11]*e+r[15];return o\u003do||1,t[0]\u003d(r[0]*a+r[4]*u+r[8]*e+r[12])/o,t[1]\u003d(r[1]*a+r[5]*u+r[9]*e+r[13])/o,t[2]\u003d(r[2]*a+r[6]*u+r[10]*e+r[14])/o,t},r.transformMat3\u003dfunction(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2];return t[0]\u003da*r[0]+u*r[3]+e*r[6],t[1]\u003da*r[1]+u*r[4]+e*r[7],t[2]\u003da*r[2]+u*r[5]+e*r[8],t},r.transformQuat\u003dfunction(t,n,r){var a\u003dr[0],u\u003dr[1],e\u003dr[2],o\u003dr[3],i\u003dn[0],c\u003dn[1],h\u003dn[2],M\u003du*h-e*c,s\u003de*i-a*h,f\u003da*c-u*i,v\u003du*f-e*s,l\u003de*M-a*f,m\u003da*s-u*M,d\u003d2*o;return M*\u003dd,s*\u003dd,f*\u003dd,v*\u003d2,l*\u003d2,m*\u003d2,t[0]\u003di+M+v,t[1]\u003dc+s+l,t[2]\u003dh+f+m,t},r.rotateX\u003dfunction(t,n,r,a){var u\u003d[],e\u003d[];return u[0]\u003dn[0]-r[0],u[1]\u003dn[1]-r[1],u[2]\u003dn[2]-r[2],e[0]\u003du[0],e[1]\u003du[1]*Math.cos(a)-u[2]*Math.sin(a),e[2]\u003du[1]*Math.sin(a)+u[2]*Math.cos(a),t[0]\u003de[0]+r[0],t[1]\u003de[1]+r[1],t[2]\u003de[2]+r[2],t},r.rotateY\u003dfunction(t,n,r,a){var u\u003d[],e\u003d[];return u[0]\u003dn[0]-r[0],u[1]\u003dn[1]-r[1],u[2]\u003dn[2]-r[2],e[0]\u003du[2]*Math.sin(a)+u[0]*Math.cos(a),e[1]\u003du[1],e[2]\u003du[2]*Math.cos(a)-u[0]*Math.sin(a),t[0]\u003de[0]+r[0],t[1]\u003de[1]+r[1],t[2]\u003de[2]+r[2],t},r.rotateZ\u003dfunction(t,n,r,a){var u\u003d[],e\u003d[];return u[0]\u003dn[0]-r[0],u[1]\u003dn[1]-r[1],u[2]\u003dn[2]-r[2],e[0]\u003du[0]*Math.cos(a)-u[1]*Math.sin(a),e[1]\u003du[0]*Math.sin(a)+u[1]*Math.cos(a),e[2]\u003du[2],t[0]\u003de[0]+r[0],t[1]\u003de[1]+r[1],t[2]\u003de[2]+r[2],t},r.angle\u003dfunction(t,n){var r\u003dt[0],a\u003dt[1],u\u003dt[2],e\u003dn[0],o\u003dn[1],i\u003dn[2],c\u003dMath.sqrt(r*r+a*a+u*u)*Math.sqrt(e*e+o*o+i*i),h\u003dc\u0026\u0026l(t,n)/c;return Math.acos(Math.min(Math.max(h,-1),1))},r.zero\u003dfunction(t){return t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t},r.str\u003dfunction(t){return\"vec3(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\")\"},r.exactEquals\u003dfunction(t,n){return t[0]\u003d\u003d\u003dn[0]\u0026\u0026t[1]\u003d\u003d\u003dn[1]\u0026\u0026t[2]\u003d\u003d\u003dn[2]},r.equals\u003dfunction(t,n){var r\u003dt[0],a\u003dt[1],u\u003dt[2],o\u003dn[0],i\u003dn[1],c\u003dn[2];return Math.abs(r-o)\u003c\u003de.EPSILON*Math.max(1,Math.abs(r),Math.abs(o))\u0026\u0026Math.abs(a-i)\u003c\u003de.EPSILON*Math.max(1,Math.abs(a),Math.abs(i))\u0026\u0026Math.abs(u-c)\u003c\u003de.EPSILON*Math.max(1,Math.abs(u),Math.abs(c))},r.sub\u003dc,r.mul\u003dh,r.div\u003dM,r.dist\u003ds,r.sqrDist\u003df,r.len\u003di,r.sqrLen\u003dv,r.forEach\u003d(m\u003do(),function(t,n,r,a,u,e){var o,i;for(n||(n\u003d3),r||(r\u003d0),i\u003da?Math.min(a*n+r,t.length):t.length,o\u003dr;o\u003ci;o+\u003dn)m[0]\u003dt[o],m[1]\u003dt[o+1],m[2]\u003dt[o+2],u(m,m,e),t[o]\u003dm[0],t[o+1]\u003dm[1],t[o+2]\u003dm[2];return t})},\n      \"c1aa33d719\": function _(t,n,r,a,u){a();const e\u003dt(\"tslib\").__importStar(t(\"68ca94c15c\"));function o(){var t\u003dnew e.ARRAY_TYPE(4);return e.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0),t}function i(t,n,r){return t[0]\u003dn[0]-r[0],t[1]\u003dn[1]-r[1],t[2]\u003dn[2]-r[2],t[3]\u003dn[3]-r[3],t}function c(t,n,r){return t[0]\u003dn[0]*r[0],t[1]\u003dn[1]*r[1],t[2]\u003dn[2]*r[2],t[3]\u003dn[3]*r[3],t}function h(t,n,r){return t[0]\u003dn[0]/r[0],t[1]\u003dn[1]/r[1],t[2]\u003dn[2]/r[2],t[3]\u003dn[3]/r[3],t}function M(t,n){var r\u003dn[0]-t[0],a\u003dn[1]-t[1],u\u003dn[2]-t[2],e\u003dn[3]-t[3];return Math.hypot(r,a,u,e)}function f(t,n){var r\u003dn[0]-t[0],a\u003dn[1]-t[1],u\u003dn[2]-t[2],e\u003dn[3]-t[3];return r*r+a*a+u*u+e*e}function s(t){var n\u003dt[0],r\u003dt[1],a\u003dt[2],u\u003dt[3];return Math.hypot(n,r,a,u)}function l(t){var n\u003dt[0],r\u003dt[1],a\u003dt[2],u\u003dt[3];return n*n+r*r+a*a+u*u}var m;r.create\u003do,r.clone\u003dfunction(t){var n\u003dnew e.ARRAY_TYPE(4);return n[0]\u003dt[0],n[1]\u003dt[1],n[2]\u003dt[2],n[3]\u003dt[3],n},r.fromValues\u003dfunction(t,n,r,a){var u\u003dnew e.ARRAY_TYPE(4);return u[0]\u003dt,u[1]\u003dn,u[2]\u003dr,u[3]\u003da,u},r.copy\u003dfunction(t,n){return t[0]\u003dn[0],t[1]\u003dn[1],t[2]\u003dn[2],t[3]\u003dn[3],t},r.set\u003dfunction(t,n,r,a,u){return t[0]\u003dn,t[1]\u003dr,t[2]\u003da,t[3]\u003du,t},r.add\u003dfunction(t,n,r){return t[0]\u003dn[0]+r[0],t[1]\u003dn[1]+r[1],t[2]\u003dn[2]+r[2],t[3]\u003dn[3]+r[3],t},r.subtract\u003di,r.multiply\u003dc,r.divide\u003dh,r.ceil\u003dfunction(t,n){return t[0]\u003dMath.ceil(n[0]),t[1]\u003dMath.ceil(n[1]),t[2]\u003dMath.ceil(n[2]),t[3]\u003dMath.ceil(n[3]),t},r.floor\u003dfunction(t,n){return t[0]\u003dMath.floor(n[0]),t[1]\u003dMath.floor(n[1]),t[2]\u003dMath.floor(n[2]),t[3]\u003dMath.floor(n[3]),t},r.min\u003dfunction(t,n,r){return t[0]\u003dMath.min(n[0],r[0]),t[1]\u003dMath.min(n[1],r[1]),t[2]\u003dMath.min(n[2],r[2]),t[3]\u003dMath.min(n[3],r[3]),t},r.max\u003dfunction(t,n,r){return t[0]\u003dMath.max(n[0],r[0]),t[1]\u003dMath.max(n[1],r[1]),t[2]\u003dMath.max(n[2],r[2]),t[3]\u003dMath.max(n[3],r[3]),t},r.round\u003dfunction(t,n){return t[0]\u003dMath.round(n[0]),t[1]\u003dMath.round(n[1]),t[2]\u003dMath.round(n[2]),t[3]\u003dMath.round(n[3]),t},r.scale\u003dfunction(t,n,r){return t[0]\u003dn[0]*r,t[1]\u003dn[1]*r,t[2]\u003dn[2]*r,t[3]\u003dn[3]*r,t},r.scaleAndAdd\u003dfunction(t,n,r,a){return t[0]\u003dn[0]+r[0]*a,t[1]\u003dn[1]+r[1]*a,t[2]\u003dn[2]+r[2]*a,t[3]\u003dn[3]+r[3]*a,t},r.distance\u003dM,r.squaredDistance\u003df,r.length\u003ds,r.squaredLength\u003dl,r.negate\u003dfunction(t,n){return t[0]\u003d-n[0],t[1]\u003d-n[1],t[2]\u003d-n[2],t[3]\u003d-n[3],t},r.inverse\u003dfunction(t,n){return t[0]\u003d1/n[0],t[1]\u003d1/n[1],t[2]\u003d1/n[2],t[3]\u003d1/n[3],t},r.normalize\u003dfunction(t,n){var r\u003dn[0],a\u003dn[1],u\u003dn[2],e\u003dn[3],o\u003dr*r+a*a+u*u+e*e;return o\u003e0\u0026\u0026(o\u003d1/Math.sqrt(o)),t[0]\u003dr*o,t[1]\u003da*o,t[2]\u003du*o,t[3]\u003de*o,t},r.dot\u003dfunction(t,n){return t[0]*n[0]+t[1]*n[1]+t[2]*n[2]+t[3]*n[3]},r.cross\u003dfunction(t,n,r,a){var u\u003dr[0]*a[1]-r[1]*a[0],e\u003dr[0]*a[2]-r[2]*a[0],o\u003dr[0]*a[3]-r[3]*a[0],i\u003dr[1]*a[2]-r[2]*a[1],c\u003dr[1]*a[3]-r[3]*a[1],h\u003dr[2]*a[3]-r[3]*a[2],M\u003dn[0],f\u003dn[1],s\u003dn[2],l\u003dn[3];return t[0]\u003df*h-s*c+l*i,t[1]\u003d-M*h+s*o-l*e,t[2]\u003dM*c-f*o+l*u,t[3]\u003d-M*i+f*e-s*u,t},r.lerp\u003dfunction(t,n,r,a){var u\u003dn[0],e\u003dn[1],o\u003dn[2],i\u003dn[3];return t[0]\u003du+a*(r[0]-u),t[1]\u003de+a*(r[1]-e),t[2]\u003do+a*(r[2]-o),t[3]\u003di+a*(r[3]-i),t},r.random\u003dfunction(t,n){var r,a,u,o,i,c;n\u003dn||1;do{i\u003d(r\u003d2*e.RANDOM()-1)*r+(a\u003d2*e.RANDOM()-1)*a}while(i\u003e\u003d1);do{c\u003d(u\u003d2*e.RANDOM()-1)*u+(o\u003d2*e.RANDOM()-1)*o}while(c\u003e\u003d1);var h\u003dMath.sqrt((1-i)/c);return t[0]\u003dn*r,t[1]\u003dn*a,t[2]\u003dn*u*h,t[3]\u003dn*o*h,t},r.transformMat4\u003dfunction(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2],o\u003dn[3];return t[0]\u003dr[0]*a+r[4]*u+r[8]*e+r[12]*o,t[1]\u003dr[1]*a+r[5]*u+r[9]*e+r[13]*o,t[2]\u003dr[2]*a+r[6]*u+r[10]*e+r[14]*o,t[3]\u003dr[3]*a+r[7]*u+r[11]*e+r[15]*o,t},r.transformQuat\u003dfunction(t,n,r){var a\u003dn[0],u\u003dn[1],e\u003dn[2],o\u003dr[0],i\u003dr[1],c\u003dr[2],h\u003dr[3],M\u003dh*a+i*e-c*u,f\u003dh*u+c*a-o*e,s\u003dh*e+o*u-i*a,l\u003d-o*a-i*u-c*e;return t[0]\u003dM*h+l*-o+f*-c-s*-i,t[1]\u003df*h+l*-i+s*-o-M*-c,t[2]\u003ds*h+l*-c+M*-i-f*-o,t[3]\u003dn[3],t},r.zero\u003dfunction(t){return t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t},r.str\u003dfunction(t){return\"vec4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\")\"},r.exactEquals\u003dfunction(t,n){return t[0]\u003d\u003d\u003dn[0]\u0026\u0026t[1]\u003d\u003d\u003dn[1]\u0026\u0026t[2]\u003d\u003d\u003dn[2]\u0026\u0026t[3]\u003d\u003d\u003dn[3]},r.equals\u003dfunction(t,n){var r\u003dt[0],a\u003dt[1],u\u003dt[2],o\u003dt[3],i\u003dn[0],c\u003dn[1],h\u003dn[2],M\u003dn[3];return Math.abs(r-i)\u003c\u003de.EPSILON*Math.max(1,Math.abs(r),Math.abs(i))\u0026\u0026Math.abs(a-c)\u003c\u003de.EPSILON*Math.max(1,Math.abs(a),Math.abs(c))\u0026\u0026Math.abs(u-h)\u003c\u003de.EPSILON*Math.max(1,Math.abs(u),Math.abs(h))\u0026\u0026Math.abs(o-M)\u003c\u003de.EPSILON*Math.max(1,Math.abs(o),Math.abs(M))},r.sub\u003di,r.mul\u003dc,r.div\u003dh,r.dist\u003dM,r.sqrDist\u003df,r.len\u003ds,r.sqrLen\u003dl,r.forEach\u003d(m\u003do(),function(t,n,r,a,u,e){var o,i;for(n||(n\u003d4),r||(r\u003d0),i\u003da?Math.min(a*n+r,t.length):t.length,o\u003dr;o\u003ci;o+\u003dn)m[0]\u003dt[o],m[1]\u003dt[o+1],m[2]\u003dt[o+2],m[3]\u003dt[o+3],u(m,m,e),t[o]\u003dm[0],t[o+1]\u003dm[1],t[o+2]\u003dm[2],t[o+3]\u003dm[3];return t})},\n      \"277615c682\": function _(t,a,n,r,e){r();const u\u003dt(\"tslib\"),o\u003du.__importStar(t(\"68ca94c15c\")),i\u003du.__importStar(t(\"eb06fc032a\")),s\u003du.__importStar(t(\"a427635f32\"));function c(t,a,n){var r\u003d.5*n[0],e\u003d.5*n[1],u\u003d.5*n[2],o\u003da[0],i\u003da[1],s\u003da[2],c\u003da[3];return t[0]\u003do,t[1]\u003di,t[2]\u003ds,t[3]\u003dc,t[4]\u003dr*c+e*s-u*i,t[5]\u003de*c+u*o-r*s,t[6]\u003du*c+r*i-e*o,t[7]\u003d-r*o-e*i-u*s,t}function h(t,a){return t[0]\u003da[0],t[1]\u003da[1],t[2]\u003da[2],t[3]\u003da[3],t[4]\u003da[4],t[5]\u003da[5],t[6]\u003da[6],t[7]\u003da[7],t}function f(t,a,n){var r\u003da[0],e\u003da[1],u\u003da[2],o\u003da[3],i\u003dn[4],s\u003dn[5],c\u003dn[6],h\u003dn[7],f\u003da[4],M\u003da[5],b\u003da[6],l\u003da[7],v\u003dn[0],m\u003dn[1],R\u003dn[2],A\u003dn[3];return t[0]\u003dr*A+o*v+e*R-u*m,t[1]\u003de*A+o*m+u*v-r*R,t[2]\u003du*A+o*R+r*m-e*v,t[3]\u003do*A-r*v-e*m-u*R,t[4]\u003dr*h+o*i+e*c-u*s+f*A+l*v+M*R-b*m,t[5]\u003de*h+o*s+u*i-r*c+M*A+l*m+b*v-f*R,t[6]\u003du*h+o*c+r*s-e*i+b*A+l*R+f*m-M*v,t[7]\u003do*h-r*i-e*s-u*c+l*A-f*v-M*m-b*R,t}n.create\u003dfunction(){var t\u003dnew o.ARRAY_TYPE(8);return o.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[4]\u003d0,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0),t[3]\u003d1,t},n.clone\u003dfunction(t){var a\u003dnew o.ARRAY_TYPE(8);return a[0]\u003dt[0],a[1]\u003dt[1],a[2]\u003dt[2],a[3]\u003dt[3],a[4]\u003dt[4],a[5]\u003dt[5],a[6]\u003dt[6],a[7]\u003dt[7],a},n.fromValues\u003dfunction(t,a,n,r,e,u,i,s){var c\u003dnew o.ARRAY_TYPE(8);return c[0]\u003dt,c[1]\u003da,c[2]\u003dn,c[3]\u003dr,c[4]\u003de,c[5]\u003du,c[6]\u003di,c[7]\u003ds,c},n.fromRotationTranslationValues\u003dfunction(t,a,n,r,e,u,i){var s\u003dnew o.ARRAY_TYPE(8);s[0]\u003dt,s[1]\u003da,s[2]\u003dn,s[3]\u003dr;var c\u003d.5*e,h\u003d.5*u,f\u003d.5*i;return s[4]\u003dc*r+h*n-f*a,s[5]\u003dh*r+f*t-c*n,s[6]\u003df*r+c*a-h*t,s[7]\u003d-c*t-h*a-f*n,s},n.fromRotationTranslation\u003dc,n.fromTranslation\u003dfunction(t,a){return t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d1,t[4]\u003d.5*a[0],t[5]\u003d.5*a[1],t[6]\u003d.5*a[2],t[7]\u003d0,t},n.fromRotation\u003dfunction(t,a){return t[0]\u003da[0],t[1]\u003da[1],t[2]\u003da[2],t[3]\u003da[3],t[4]\u003d0,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0,t},n.fromMat4\u003dfunction(t,a){var n\u003di.create();s.getRotation(n,a);var r\u003dnew o.ARRAY_TYPE(3);return s.getTranslation(r,a),c(t,n,r),t},n.copy\u003dh,n.identity\u003dfunction(t){return t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d1,t[4]\u003d0,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0,t},n.set\u003dfunction(t,a,n,r,e,u,o,i,s){return t[0]\u003da,t[1]\u003dn,t[2]\u003dr,t[3]\u003de,t[4]\u003du,t[5]\u003do,t[6]\u003di,t[7]\u003ds,t},n.getReal\u003di.copy,n.getDual\u003dfunction(t,a){return t[0]\u003da[4],t[1]\u003da[5],t[2]\u003da[6],t[3]\u003da[7],t},n.setReal\u003di.copy,n.setDual\u003dfunction(t,a){return t[4]\u003da[0],t[5]\u003da[1],t[6]\u003da[2],t[7]\u003da[3],t},n.getTranslation\u003dfunction(t,a){var n\u003da[4],r\u003da[5],e\u003da[6],u\u003da[7],o\u003d-a[0],i\u003d-a[1],s\u003d-a[2],c\u003da[3];return t[0]\u003d2*(n*c+u*o+r*s-e*i),t[1]\u003d2*(r*c+u*i+e*o-n*s),t[2]\u003d2*(e*c+u*s+n*i-r*o),t},n.translate\u003dfunction(t,a,n){var r\u003da[0],e\u003da[1],u\u003da[2],o\u003da[3],i\u003d.5*n[0],s\u003d.5*n[1],c\u003d.5*n[2],h\u003da[4],f\u003da[5],M\u003da[6],b\u003da[7];return t[0]\u003dr,t[1]\u003de,t[2]\u003du,t[3]\u003do,t[4]\u003do*i+e*c-u*s+h,t[5]\u003do*s+u*i-r*c+f,t[6]\u003do*c+r*s-e*i+M,t[7]\u003d-r*i-e*s-u*c+b,t},n.rotateX\u003dfunction(t,a,n){var r\u003d-a[0],e\u003d-a[1],u\u003d-a[2],o\u003da[3],s\u003da[4],c\u003da[5],h\u003da[6],f\u003da[7],M\u003ds*o+f*r+c*u-h*e,b\u003dc*o+f*e+h*r-s*u,l\u003dh*o+f*u+s*e-c*r,v\u003df*o-s*r-c*e-h*u;return i.rotateX(t,a,n),r\u003dt[0],e\u003dt[1],u\u003dt[2],o\u003dt[3],t[4]\u003dM*o+v*r+b*u-l*e,t[5]\u003db*o+v*e+l*r-M*u,t[6]\u003dl*o+v*u+M*e-b*r,t[7]\u003dv*o-M*r-b*e-l*u,t},n.rotateY\u003dfunction(t,a,n){var r\u003d-a[0],e\u003d-a[1],u\u003d-a[2],o\u003da[3],s\u003da[4],c\u003da[5],h\u003da[6],f\u003da[7],M\u003ds*o+f*r+c*u-h*e,b\u003dc*o+f*e+h*r-s*u,l\u003dh*o+f*u+s*e-c*r,v\u003df*o-s*r-c*e-h*u;return i.rotateY(t,a,n),r\u003dt[0],e\u003dt[1],u\u003dt[2],o\u003dt[3],t[4]\u003dM*o+v*r+b*u-l*e,t[5]\u003db*o+v*e+l*r-M*u,t[6]\u003dl*o+v*u+M*e-b*r,t[7]\u003dv*o-M*r-b*e-l*u,t},n.rotateZ\u003dfunction(t,a,n){var r\u003d-a[0],e\u003d-a[1],u\u003d-a[2],o\u003da[3],s\u003da[4],c\u003da[5],h\u003da[6],f\u003da[7],M\u003ds*o+f*r+c*u-h*e,b\u003dc*o+f*e+h*r-s*u,l\u003dh*o+f*u+s*e-c*r,v\u003df*o-s*r-c*e-h*u;return i.rotateZ(t,a,n),r\u003dt[0],e\u003dt[1],u\u003dt[2],o\u003dt[3],t[4]\u003dM*o+v*r+b*u-l*e,t[5]\u003db*o+v*e+l*r-M*u,t[6]\u003dl*o+v*u+M*e-b*r,t[7]\u003dv*o-M*r-b*e-l*u,t},n.rotateByQuatAppend\u003dfunction(t,a,n){var r\u003dn[0],e\u003dn[1],u\u003dn[2],o\u003dn[3],i\u003da[0],s\u003da[1],c\u003da[2],h\u003da[3];return t[0]\u003di*o+h*r+s*u-c*e,t[1]\u003ds*o+h*e+c*r-i*u,t[2]\u003dc*o+h*u+i*e-s*r,t[3]\u003dh*o-i*r-s*e-c*u,i\u003da[4],s\u003da[5],c\u003da[6],h\u003da[7],t[4]\u003di*o+h*r+s*u-c*e,t[5]\u003ds*o+h*e+c*r-i*u,t[6]\u003dc*o+h*u+i*e-s*r,t[7]\u003dh*o-i*r-s*e-c*u,t},n.rotateByQuatPrepend\u003dfunction(t,a,n){var r\u003da[0],e\u003da[1],u\u003da[2],o\u003da[3],i\u003dn[0],s\u003dn[1],c\u003dn[2],h\u003dn[3];return t[0]\u003dr*h+o*i+e*c-u*s,t[1]\u003de*h+o*s+u*i-r*c,t[2]\u003du*h+o*c+r*s-e*i,t[3]\u003do*h-r*i-e*s-u*c,i\u003dn[4],s\u003dn[5],c\u003dn[6],h\u003dn[7],t[4]\u003dr*h+o*i+e*c-u*s,t[5]\u003de*h+o*s+u*i-r*c,t[6]\u003du*h+o*c+r*s-e*i,t[7]\u003do*h-r*i-e*s-u*c,t},n.rotateAroundAxis\u003dfunction(t,a,n,r){if(Math.abs(r)\u003co.EPSILON)return h(t,a);var e\u003dMath.hypot(n[0],n[1],n[2]);r*\u003d.5;var u\u003dMath.sin(r),i\u003du*n[0]/e,s\u003du*n[1]/e,c\u003du*n[2]/e,f\u003dMath.cos(r),M\u003da[0],b\u003da[1],l\u003da[2],v\u003da[3];t[0]\u003dM*f+v*i+b*c-l*s,t[1]\u003db*f+v*s+l*i-M*c,t[2]\u003dl*f+v*c+M*s-b*i,t[3]\u003dv*f-M*i-b*s-l*c;var m\u003da[4],R\u003da[5],A\u003da[6],E\u003da[7];return t[4]\u003dm*f+E*i+R*c-A*s,t[5]\u003dR*f+E*s+A*i-m*c,t[6]\u003dA*f+E*c+m*s-R*i,t[7]\u003dE*f-m*i-R*s-A*c,t},n.add\u003dfunction(t,a,n){return t[0]\u003da[0]+n[0],t[1]\u003da[1]+n[1],t[2]\u003da[2]+n[2],t[3]\u003da[3]+n[3],t[4]\u003da[4]+n[4],t[5]\u003da[5]+n[5],t[6]\u003da[6]+n[6],t[7]\u003da[7]+n[7],t},n.multiply\u003df,n.mul\u003df,n.scale\u003dfunction(t,a,n){return t[0]\u003da[0]*n,t[1]\u003da[1]*n,t[2]\u003da[2]*n,t[3]\u003da[3]*n,t[4]\u003da[4]*n,t[5]\u003da[5]*n,t[6]\u003da[6]*n,t[7]\u003da[7]*n,t},n.dot\u003di.dot,n.lerp\u003dfunction(t,a,r,e){var u\u003d1-e;return n.dot(a,r)\u003c0\u0026\u0026(e\u003d-e),t[0]\u003da[0]*u+r[0]*e,t[1]\u003da[1]*u+r[1]*e,t[2]\u003da[2]*u+r[2]*e,t[3]\u003da[3]*u+r[3]*e,t[4]\u003da[4]*u+r[4]*e,t[5]\u003da[5]*u+r[5]*e,t[6]\u003da[6]*u+r[6]*e,t[7]\u003da[7]*u+r[7]*e,t},n.invert\u003dfunction(t,a){var r\u003dn.squaredLength(a);return t[0]\u003d-a[0]/r,t[1]\u003d-a[1]/r,t[2]\u003d-a[2]/r,t[3]\u003da[3]/r,t[4]\u003d-a[4]/r,t[5]\u003d-a[5]/r,t[6]\u003d-a[6]/r,t[7]\u003da[7]/r,t},n.conjugate\u003dfunction(t,a){return t[0]\u003d-a[0],t[1]\u003d-a[1],t[2]\u003d-a[2],t[3]\u003da[3],t[4]\u003d-a[4],t[5]\u003d-a[5],t[6]\u003d-a[6],t[7]\u003da[7],t},n.length\u003di.length,n.len\u003dn.length,n.squaredLength\u003di.squaredLength,n.sqrLen\u003dn.squaredLength,n.normalize\u003dfunction(t,a){var r\u003dn.squaredLength(a);if(r\u003e0){r\u003dMath.sqrt(r);var e\u003da[0]/r,u\u003da[1]/r,o\u003da[2]/r,i\u003da[3]/r,s\u003da[4],c\u003da[5],h\u003da[6],f\u003da[7],M\u003de*s+u*c+o*h+i*f;t[0]\u003de,t[1]\u003du,t[2]\u003do,t[3]\u003di,t[4]\u003d(s-e*M)/r,t[5]\u003d(c-u*M)/r,t[6]\u003d(h-o*M)/r,t[7]\u003d(f-i*M)/r}return t},n.str\u003dfunction(t){return\"quat2(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\")\"},n.exactEquals\u003dfunction(t,a){return t[0]\u003d\u003d\u003da[0]\u0026\u0026t[1]\u003d\u003d\u003da[1]\u0026\u0026t[2]\u003d\u003d\u003da[2]\u0026\u0026t[3]\u003d\u003d\u003da[3]\u0026\u0026t[4]\u003d\u003d\u003da[4]\u0026\u0026t[5]\u003d\u003d\u003da[5]\u0026\u0026t[6]\u003d\u003d\u003da[6]\u0026\u0026t[7]\u003d\u003d\u003da[7]},n.equals\u003dfunction(t,a){var n\u003dt[0],r\u003dt[1],e\u003dt[2],u\u003dt[3],i\u003dt[4],s\u003dt[5],c\u003dt[6],h\u003dt[7],f\u003da[0],M\u003da[1],b\u003da[2],l\u003da[3],v\u003da[4],m\u003da[5],R\u003da[6],A\u003da[7];return Math.abs(n-f)\u003c\u003do.EPSILON*Math.max(1,Math.abs(n),Math.abs(f))\u0026\u0026Math.abs(r-M)\u003c\u003do.EPSILON*Math.max(1,Math.abs(r),Math.abs(M))\u0026\u0026Math.abs(e-b)\u003c\u003do.EPSILON*Math.max(1,Math.abs(e),Math.abs(b))\u0026\u0026Math.abs(u-l)\u003c\u003do.EPSILON*Math.max(1,Math.abs(u),Math.abs(l))\u0026\u0026Math.abs(i-v)\u003c\u003do.EPSILON*Math.max(1,Math.abs(i),Math.abs(v))\u0026\u0026Math.abs(s-m)\u003c\u003do.EPSILON*Math.max(1,Math.abs(s),Math.abs(m))\u0026\u0026Math.abs(c-R)\u003c\u003do.EPSILON*Math.max(1,Math.abs(c),Math.abs(R))\u0026\u0026Math.abs(h-A)\u003c\u003do.EPSILON*Math.max(1,Math.abs(h),Math.abs(A))}},\n      \"c56d9ff837\": function _(n,t,r,a,u){a();const e\u003dn(\"tslib\").__importStar(n(\"68ca94c15c\"));function o(){var n\u003dnew e.ARRAY_TYPE(2);return e.ARRAY_TYPE!\u003dFloat32Array\u0026\u0026(n[0]\u003d0,n[1]\u003d0),n}function c(n,t,r){return n[0]\u003dt[0]-r[0],n[1]\u003dt[1]-r[1],n}function i(n,t,r){return n[0]\u003dt[0]*r[0],n[1]\u003dt[1]*r[1],n}function f(n,t,r){return n[0]\u003dt[0]/r[0],n[1]\u003dt[1]/r[1],n}function s(n,t){var r\u003dt[0]-n[0],a\u003dt[1]-n[1];return Math.hypot(r,a)}function h(n,t){var r\u003dt[0]-n[0],a\u003dt[1]-n[1];return r*r+a*a}function M(n){var t\u003dn[0],r\u003dn[1];return Math.hypot(t,r)}function l(n){var t\u003dn[0],r\u003dn[1];return t*t+r*r}var v;r.create\u003do,r.clone\u003dfunction(n){var t\u003dnew e.ARRAY_TYPE(2);return t[0]\u003dn[0],t[1]\u003dn[1],t},r.fromValues\u003dfunction(n,t){var r\u003dnew e.ARRAY_TYPE(2);return r[0]\u003dn,r[1]\u003dt,r},r.copy\u003dfunction(n,t){return n[0]\u003dt[0],n[1]\u003dt[1],n},r.set\u003dfunction(n,t,r){return n[0]\u003dt,n[1]\u003dr,n},r.add\u003dfunction(n,t,r){return n[0]\u003dt[0]+r[0],n[1]\u003dt[1]+r[1],n},r.subtract\u003dc,r.multiply\u003di,r.divide\u003df,r.ceil\u003dfunction(n,t){return n[0]\u003dMath.ceil(t[0]),n[1]\u003dMath.ceil(t[1]),n},r.floor\u003dfunction(n,t){return n[0]\u003dMath.floor(t[0]),n[1]\u003dMath.floor(t[1]),n},r.min\u003dfunction(n,t,r){return n[0]\u003dMath.min(t[0],r[0]),n[1]\u003dMath.min(t[1],r[1]),n},r.max\u003dfunction(n,t,r){return n[0]\u003dMath.max(t[0],r[0]),n[1]\u003dMath.max(t[1],r[1]),n},r.round\u003dfunction(n,t){return n[0]\u003dMath.round(t[0]),n[1]\u003dMath.round(t[1]),n},r.scale\u003dfunction(n,t,r){return n[0]\u003dt[0]*r,n[1]\u003dt[1]*r,n},r.scaleAndAdd\u003dfunction(n,t,r,a){return n[0]\u003dt[0]+r[0]*a,n[1]\u003dt[1]+r[1]*a,n},r.distance\u003ds,r.squaredDistance\u003dh,r.length\u003dM,r.squaredLength\u003dl,r.negate\u003dfunction(n,t){return n[0]\u003d-t[0],n[1]\u003d-t[1],n},r.inverse\u003dfunction(n,t){return n[0]\u003d1/t[0],n[1]\u003d1/t[1],n},r.normalize\u003dfunction(n,t){var r\u003dt[0],a\u003dt[1],u\u003dr*r+a*a;return u\u003e0\u0026\u0026(u\u003d1/Math.sqrt(u)),n[0]\u003dt[0]*u,n[1]\u003dt[1]*u,n},r.dot\u003dfunction(n,t){return n[0]*t[0]+n[1]*t[1]},r.cross\u003dfunction(n,t,r){var a\u003dt[0]*r[1]-t[1]*r[0];return n[0]\u003dn[1]\u003d0,n[2]\u003da,n},r.lerp\u003dfunction(n,t,r,a){var u\u003dt[0],e\u003dt[1];return n[0]\u003du+a*(r[0]-u),n[1]\u003de+a*(r[1]-e),n},r.random\u003dfunction(n,t){t\u003dt||1;var r\u003d2*e.RANDOM()*Math.PI;return n[0]\u003dMath.cos(r)*t,n[1]\u003dMath.sin(r)*t,n},r.transformMat2\u003dfunction(n,t,r){var a\u003dt[0],u\u003dt[1];return n[0]\u003dr[0]*a+r[2]*u,n[1]\u003dr[1]*a+r[3]*u,n},r.transformMat2d\u003dfunction(n,t,r){var a\u003dt[0],u\u003dt[1];return n[0]\u003dr[0]*a+r[2]*u+r[4],n[1]\u003dr[1]*a+r[3]*u+r[5],n},r.transformMat3\u003dfunction(n,t,r){var a\u003dt[0],u\u003dt[1];return n[0]\u003dr[0]*a+r[3]*u+r[6],n[1]\u003dr[1]*a+r[4]*u+r[7],n},r.transformMat4\u003dfunction(n,t,r){var a\u003dt[0],u\u003dt[1];return n[0]\u003dr[0]*a+r[4]*u+r[12],n[1]\u003dr[1]*a+r[5]*u+r[13],n},r.rotate\u003dfunction(n,t,r,a){var u\u003dt[0]-r[0],e\u003dt[1]-r[1],o\u003dMath.sin(a),c\u003dMath.cos(a);return n[0]\u003du*c-e*o+r[0],n[1]\u003du*o+e*c+r[1],n},r.angle\u003dfunction(n,t){var r\u003dn[0],a\u003dn[1],u\u003dt[0],e\u003dt[1],o\u003dMath.sqrt(r*r+a*a)*Math.sqrt(u*u+e*e),c\u003do\u0026\u0026(r*u+a*e)/o;return Math.acos(Math.min(Math.max(c,-1),1))},r.zero\u003dfunction(n){return n[0]\u003d0,n[1]\u003d0,n},r.str\u003dfunction(n){return\"vec2(\"+n[0]+\", \"+n[1]+\")\"},r.exactEquals\u003dfunction(n,t){return n[0]\u003d\u003d\u003dt[0]\u0026\u0026n[1]\u003d\u003d\u003dt[1]},r.equals\u003dfunction(n,t){var r\u003dn[0],a\u003dn[1],u\u003dt[0],o\u003dt[1];return Math.abs(r-u)\u003c\u003de.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))\u0026\u0026Math.abs(a-o)\u003c\u003de.EPSILON*Math.max(1,Math.abs(a),Math.abs(o))},r.len\u003dM,r.sub\u003dc,r.mul\u003di,r.div\u003df,r.dist\u003ds,r.sqrDist\u003dh,r.sqrLen\u003dl,r.forEach\u003d(v\u003do(),function(n,t,r,a,u,e){var o,c;for(t||(t\u003d2),r||(r\u003d0),c\u003da?Math.min(a*t+r,n.length):n.length,o\u003dr;o\u003cc;o+\u003dt)v[0]\u003dn[o],v[1]\u003dn[o+1],u(v,v,e),n[o]\u003dv[0],n[o+1]\u003dv[1];return n})},\n      \"89262e43a1\": function _(e,t,i,s,n){s();const r\u003de(\"46fdad9667\"),o\u003de(\"4eb45e35aa\");class a extends r.AbstractVTKView{connect_signals(){super.connect_signals(),this.connect(this.model.properties.data.change,(()\u003d\u003e{this._vtk_image_data\u003do.data2VTKImageData(this.model.data),this.invalidate_render()})),this.connect(this.model.properties.colormap.change,(()\u003d\u003e{this.colormap_selector.value\u003dthis.model.colormap;const e\u003dnew Event(\"change\");this.colormap_selector.dispatchEvent(e)})),this.connect(this.model.properties.shadow.change,(()\u003d\u003e{this.shadow_selector.value\u003dthis.model.shadow?\"1\":\"0\";const e\u003dnew Event(\"change\");this.shadow_selector.dispatchEvent(e)})),this.connect(this.model.properties.sampling.change,(()\u003d\u003e{this.sampling_slider.value\u003dthis.model.sampling.toFixed(2);const e\u003dnew Event(\"input\");this.sampling_slider.dispatchEvent(e)})),this.connect(this.model.properties.edge_gradient.change,(()\u003d\u003e{this.edge_gradient_slider.value\u003dthis.model.edge_gradient.toFixed(2);const e\u003dnew Event(\"input\");this.edge_gradient_slider.dispatchEvent(e)})),this.connect(this.model.properties.rescale.change,(()\u003d\u003e{this._controllerWidget.setRescaleColorMap(this.model.rescale),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.ambient.change,(()\u003d\u003e{this.volume.getProperty().setAmbient(this.model.ambient),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.diffuse.change,(()\u003d\u003e{this.volume.getProperty().setDiffuse(this.model.diffuse),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.specular.change,(()\u003d\u003e{this.volume.getProperty().setSpecular(this.model.specular),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.specular_power.change,(()\u003d\u003e{this.volume.getProperty().setSpecularPower(this.model.specular_power),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.display_volume.change,(()\u003d\u003e{this._set_volume_visibility(this.model.display_volume),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.display_slices.change,(()\u003d\u003e{this._set_slices_visibility(this.model.display_slices),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.slice_i.change,(()\u003d\u003e{void 0!\u003d\u003dthis.image_actor_i\u0026\u0026(this.image_actor_i.getMapper().setISlice(this.model.slice_i),this._vtk_renwin.getRenderWindow().render())})),this.connect(this.model.properties.slice_j.change,(()\u003d\u003e{void 0!\u003d\u003dthis.image_actor_j\u0026\u0026(this.image_actor_j.getMapper().setJSlice(this.model.slice_j),this._vtk_renwin.getRenderWindow().render())})),this.connect(this.model.properties.slice_k.change,(()\u003d\u003e{void 0!\u003d\u003dthis.image_actor_k\u0026\u0026(this.image_actor_k.getMapper().setKSlice(this.model.slice_k),this._vtk_renwin.getRenderWindow().render())})),this.connect(this.model.properties.render_background.change,(()\u003d\u003e{this._vtk_renwin.getRenderer().setBackground(...o.hexToRGB(this.model.render_background)),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.interpolation.change,(()\u003d\u003e{this._set_interpolation(this.model.interpolation),this._vtk_renwin.getRenderWindow().render()})),this.connect(this.model.properties.controller_expanded.change,(()\u003d\u003e{null!\u003dthis._controllerWidget\u0026\u0026this._controllerWidget.setExpanded(this.model.controller_expanded)}))}render(){this._vtk_renwin\u003dnull,this._orientationWidget\u003dnull,this._axes\u003dnull,super.render(),this._create_orientation_widget(),this._set_axes(),this.model.camera?this._set_camera_state():this._vtk_renwin.getRenderer().resetCamera(),this._get_camera_state()}invalidate_render(){this._vtk_renwin\u003dnull,super.invalidate_render()}init_vtk_renwin(){this._vtk_renwin\u003do.vtkns.FullScreenRenderWindow.newInstance({rootContainer:this.el,container:this._vtk_container})}plot(){this._controllerWidget\u003do.vtkns.VolumeController.newInstance({size:[400,150],rescaleColorMap:this.model.rescale}),this._plot_volume(),this._plot_slices(),this._controllerWidget.setupContent(this._vtk_renwin.getRenderWindow(),this.volume,!0),this._controllerWidget.setContainer(this.el),this._controllerWidget.setExpanded(this.model.controller_expanded),this._connect_js_controls(),this._vtk_renwin.getRenderWindow().getInteractor(),this._vtk_renwin.getRenderWindow().getInteractor().setDesiredUpdateRate(45),this._set_volume_visibility(this.model.display_volume),this._set_slices_visibility(this.model.display_slices),this._vtk_renwin.getRenderer().setBackground(...o.hexToRGB(this.model.render_background)),this._set_interpolation(this.model.interpolation),this._set_camera_state()}get vtk_image_data(){return this._vtk_image_data||(this._vtk_image_data\u003do.data2VTKImageData(this.model.data)),this._vtk_image_data}get volume(){return this._vtk_renwin.getRenderer().getVolumes()[0]}get image_actor_i(){return this._vtk_renwin.getRenderer().getActors()[0]}get image_actor_j(){return this._vtk_renwin.getRenderer().getActors()[1]}get image_actor_k(){return this._vtk_renwin.getRenderer().getActors()[2]}get shadow_selector(){return this.el.querySelector(\".js-shadow\")}get edge_gradient_slider(){return this.el.querySelector(\".js-edge\")}get sampling_slider(){return this.el.querySelector(\".js-spacing\")}get colormap_selector(){return this.el.querySelector(\".js-color-preset\")}_connect_js_controls(){const{el:e}\u003dthis._controllerWidget.get(\"el\");if(void 0!\u003d\u003de){e.querySelector(\".js-button\").addEventListener(\"click\",(()\u003d\u003ethis.model.controller_expanded\u003dthis._controllerWidget.getExpanded()))}this.colormap_selector.addEventListener(\"change\",(()\u003d\u003e{this.model.colormap\u003dthis.colormap_selector.value})),this.model.colormap?this.model.properties.colormap.change.emit():this.model.colormap\u003dthis.colormap_selector.value,this.shadow_selector.addEventListener(\"change\",(()\u003d\u003e{this.model.shadow\u003d!!Number(this.shadow_selector.value)})),(this.model.shadow\u003d!!Number(this.shadow_selector.value))\u0026\u0026this.model.properties.shadow.change.emit(),this.sampling_slider.addEventListener(\"input\",(()\u003d\u003e{const e\u003dNumber(this.sampling_slider.value);Math.abs(this.model.sampling-e)\u003e\u003d.005\u0026\u0026(this.model.sampling\u003de)})),Math.abs(this.model.sampling-Number(this.shadow_selector.value))\u003e\u003d.005\u0026\u0026this.model.properties.sampling.change.emit(),this.edge_gradient_slider.addEventListener(\"input\",(()\u003d\u003e{const e\u003dNumber(this.edge_gradient_slider.value);Math.abs(this.model.edge_gradient-e)\u003e\u003d.005\u0026\u0026(this.model.edge_gradient\u003de)})),Math.abs(this.model.edge_gradient-Number(this.edge_gradient_slider.value))\u003e\u003d.005\u0026\u0026this.model.properties.edge_gradient.change.emit()}_plot_slices(){const e\u003dthis._vtk_image_data,t\u003do.vtkns.ImageSlice.newInstance(),i\u003do.vtkns.ImageSlice.newInstance(),s\u003do.vtkns.ImageSlice.newInstance(),n\u003do.vtkns.ImageMapper.newInstance(),r\u003do.vtkns.ImageMapper.newInstance(),a\u003do.vtkns.ImageMapper.newInstance();n.setInputData(e),n.setISlice(this.model.slice_i),t.setMapper(n),r.setInputData(e),r.setJSlice(this.model.slice_j),i.setMapper(r),a.setInputData(e),a.setKSlice(this.model.slice_k),s.setMapper(a);const l\u003do.vtkns.PiecewiseFunction.newInstance();l.removeAllPoints(),l.addPoint(0,1);const d\u003dthis.volume.getProperty().getRGBTransferFunction(0),c\u003dt.getProperty();i.setProperty(c),s.setProperty(c),c.setRGBTransferFunction(d),c.setScalarOpacity(l);const _\u003dthis._vtk_renwin.getRenderer();_.addActor(t),_.addActor(i),_.addActor(s)}_plot_volume(){const e\u003dthis.vtk_image_data,t\u003do.vtkns.Volume.newInstance(),i\u003do.vtkns.VolumeMapper.newInstance();t.setMapper(i),i.setInputData(e);const s\u003d(e.getPointData().getScalars()||e.getPointData().getArrays()[0]).getRange(),n\u003do.vtkns.ColorTransferFunction.newInstance();n.onModified((()\u003d\u003ethis.model.mapper\u003do.vtkLutToMapper(n)));const r\u003do.vtkns.PiecewiseFunction.newInstance(),a\u003d.7*Math.sqrt(e.getSpacing().map((e\u003d\u003ee*e)).reduce(((e,t)\u003d\u003ee+t),0));i.setSampleDistance(a),t.getProperty().setRGBTransferFunction(0,n),t.getProperty().setScalarOpacity(0,r),t.getProperty().setInterpolationTypeToFastLinear(),t.getProperty().setScalarOpacityUnitDistance(0,o.vtkns.BoundingBox.getDiagonalLength(e.getBounds())/Math.max(...e.getDimensions())),t.getProperty().setGradientOpacityMinimumValue(0,0),t.getProperty().setGradientOpacityMaximumValue(0,.05*(s[1]-s[0])),t.getProperty().setShade(this.model.shadow),t.getProperty().setUseGradientOpacity(0,!0),t.getProperty().setGradientOpacityMinimumOpacity(0,0),t.getProperty().setGradientOpacityMaximumOpacity(0,1),t.getProperty().setAmbient(this.model.ambient),t.getProperty().setDiffuse(this.model.diffuse),t.getProperty().setSpecular(this.model.specular),t.getProperty().setSpecularPower(this.model.specular_power),this._vtk_renwin.getRenderer().addVolume(t)}_set_interpolation(e){\"fast_linear\"\u003d\u003de?(this.volume.getProperty().setInterpolationTypeToFastLinear(),this.image_actor_i.getProperty().setInterpolationTypeToLinear()):\"linear\"\u003d\u003de?(this.volume.getProperty().setInterpolationTypeToLinear(),this.image_actor_i.getProperty().setInterpolationTypeToLinear()):(this.volume.getProperty().setInterpolationTypeToNearest(),this.image_actor_i.getProperty().setInterpolationTypeToNearest())}_set_slices_visibility(e){this._vtk_renwin.getRenderer().getActors().map((t\u003d\u003et.setVisibility(e)))}_set_volume_visibility(e){this.volume.setVisibility(e)}}i.VTKVolumePlotView\u003da,a.__name__\u003d\"VTKVolumePlotView\";class l extends r.AbstractVTKPlot{constructor(e){super(e)}static init_VTKVolumePlot(){this.prototype.default_view\u003da,this.define((({Any:e,Array:t,Boolean:i,Int:s,Number:n,String:r,Struct:a})\u003d\u003e({ambient:[n,.2],colormap:[r],data:[e],diffuse:[n,.7],display_slices:[i,!1],display_volume:[i,!0],edge_gradient:[n,.2],interpolation:[o.Interpolation,\"fast_linear\"],mapper:[a({palette:t(r),low:n,high:n})],render_background:[r,\"#52576e\"],rescale:[i,!1],sampling:[n,.4],shadow:[i,!0],slice_i:[s,0],slice_j:[s,0],slice_k:[s,0],specular:[n,.3],specular_power:[n,8],controller_expanded:[i,!0]})))}}i.VTKVolumePlot\u003dl,l.__name__\u003d\"VTKVolumePlot\",l.init_VTKVolumePlot()},\n      \"4baab0b7ce\": function _(e,t,n,s,r){s();const i\u003de(\"tslib\").__importStar(e(\"@bokehjs/core/properties\")),o\u003de(\"@bokehjs/core/util/object\"),_\u003de(\"46fdad9667\"),a\u003de(\"4eb45e35aa\"),h\u003de(\"11e0707a8f\"),c\u003d\"panel\";class d extends _.AbstractVTKView{initialize(){super.initialize(),this._promises\u003d[],this._renderable\u003d!1,this._arrays\u003d{},this._decoded_arrays\u003d{},this._pending_arrays\u003d{},this.getArray\u003de\u003d\u003ethis._arrays[e]?Promise.resolve(this._arrays[e]):new Promise(((t,n)\u003d\u003e{this._pending_arrays[e]\u003d{resolve:t,reject:n}})),this.registerArray\u003d(e,t)\u003d\u003e(this._arrays[e]\u003dt,this._pending_arrays[e]\u0026\u0026this._pending_arrays[e].resolve(t),!0),this._synchronizer_context\u003da.vtkns.SynchronizableRenderWindow.getSynchronizerContext(c)}connect_signals(){super.connect_signals(),this.connect(this.model.properties.arrays.change,(()\u003d\u003ethis._decode_arrays())),this.connect(this.model.properties.scene.change,(()\u003d\u003e{if(this.model.rebuild)this._vtk_renwin\u003dnull,this.invalidate_render();else{const e\u003do.clone(this.model.scene);Promise.all(this._promises).then((()\u003d\u003e{this._sync_plot(e,(()\u003d\u003e{this._on_scene_ready()}))}))}})),this.connect(this.model.properties.one_time_reset.change,(()\u003d\u003e{this._vtk_renwin.getRenderWindow().clearOneTimeUpdaters()}))}init_vtk_renwin(){this._vtk_renwin\u003dh.FullScreenRenderWindowSynchronized.newInstance({rootContainer:this.el,container:this._vtk_container,synchronizerContext:this._synchronizer_context})}plot(){this._vtk_renwin.getRenderWindow().clearOneTimeUpdaters(),this._decode_arrays();const e\u003do.clone(this.model.scene);Promise.all(this._promises).then((()\u003d\u003e{this._sync_plot(e,(()\u003d\u003ethis._on_scene_ready())).then((()\u003d\u003e{this._set_camera_state(),this._get_camera_state()}))}))}_decode_arrays(){const e\u003dnew a.vtkns.ThirdParty.JSZip,t\u003dthis.model.arrays,n\u003dthis.registerArray,s\u003dthis.model.arrays_processed,r\u003dthis.model;Object.keys(t).forEach((i\u003d\u003e{this._decoded_arrays[i]||(this._decoded_arrays[i]\u003d!0,this._promises.push(function(i){return e.loadAsync(atob(t[i])).then((e\u003d\u003ee.file(\"data/\"+i))).then((e\u003d\u003ee.async(\"arraybuffer\"))).then((e\u003d\u003en(i,e))).then((()\u003d\u003e{s.push(i),r.properties.arrays_processed.change.emit()}))}(i)))}))}_on_scene_ready(){this._promises.length\u003e0||(this._renderable\u003d!0,this._camera_callbacks.push(this._vtk_renwin.getRenderer().getActiveCamera().onModified((()\u003d\u003ethis._vtk_render()))),this._orientationWidget||this._create_orientation_widget(),this._axes||this._set_axes(),this._vtk_renwin.resize(),this._vtk_render())}_sync_plot(e,t){this._renderable\u003d!1,this._promises\u003d[],this._unsubscribe_camera_cb(),this._synchronizer_context.setFetchArrayFunction((e\u003d\u003ePromise.resolve(this._arrays[e])));const n\u003dthis._synchronizer_context.getInstance(this.model.scene.dependencies[0].id);return n\u0026\u0026!this._vtk_renwin.getRenderer()\u0026\u0026this._vtk_renwin.getRenderWindow().addRenderer(n),this._vtk_renwin.getRenderWindow().synchronize(e).then(t)}}n.VTKSynchronizedPlotView\u003dd,d.__name__\u003d\"VTKSynchronizedPlotView\";class l extends _.AbstractVTKPlot{constructor(e){super(e),this.outline\u003da.vtkns.OutlineFilter.newInstance();const t\u003da.vtkns.Mapper.newInstance();t.setInputConnection(this.outline.getOutputPort()),this.outline_actor\u003da.vtkns.Actor.newInstance(),this.outline_actor.setMapper(t)}getActors(e){let t\u003dthis.renderer_el.getRenderer().getActors();if(e){const n\u003dthis.renderer_el.getSynchronizerContext(c);t\u003dt.filter((t\u003d\u003e{const s\u003dn.getInstanceId(t);return!!s\u0026\u0026s.slice(-16)\u003d\u003de.slice(1,17)}))}return t}static init_VTKSynchronizedPlot(){this.prototype.default_view\u003dd,this.define({arrays:[i.Any,{}],arrays_processed:[i.Array,[]],enable_keybindings:[i.Boolean,!1],one_time_reset:[i.Boolean],rebuild:[i.Boolean,!1],scene:[i.Any,{}]}),this.override({height:300,width:300})}}n.VTKSynchronizedPlot\u003dl,l.__name__\u003d\"VTKSynchronizedPlot\",l.__module__\u003d\"panel.models.vtk\",l.init_VTKSynchronizedPlot()},\n      \"11e0707a8f\": function _(e,n,o,t,r){t();const i\u003de(\"4eb45e35aa\");if(i.vtk){const e\u003d{containerStyle:null,controlPanelStyle:null,listenWindowResize:!0,resizeCallback:null,controllerVisibility:!0,synchronizerContextName:\"default\"},n\u003d{position:\"absolute\",left:\"25px\",top:\"25px\",backgroundColor:\"white\",borderRadius:\"5px\",listStyle:\"none\",padding:\"5px 10px\",margin:\"0\",display:\"block\",border:\"solid 1px black\",maxWidth:\"calc(100vw - 70px)\",maxHeight:\"calc(100vh - 60px)\",overflow:\"auto\"};o.FullScreenRenderWindowSynchronized\u003d{newInstance:i.vtk.macro.newInstance(((o,t,r\u003d{})\u003d\u003e{Object.assign(t,e,r),i.vtk.macro.obj(o,t),i.vtk.macro.get(o,t,[\"renderWindow\",\"openGLRenderWindow\",\"interactor\",\"rootContainer\",\"container\",\"controlContainer\",\"synchronizerContext\"]),function(e,o){o.renderWindow\u003di.vtkns.SynchronizableRenderWindow.newInstance({synchronizerContext:o.synchronizerContext}),o.openGLRenderWindow\u003di.vtkns.OpenGLRenderWindow.newInstance(),o.openGLRenderWindow.setContainer(o.container),o.renderWindow.addView(o.openGLRenderWindow),o.interactor\u003di.vtkns.RenderWindowInteractor.newInstance(),o.interactor.setInteractorStyle(i.vtkns.InteractorStyleTrackballCamera.newInstance()),o.interactor.setView(o.openGLRenderWindow),o.interactor.initialize(),o.interactor.bindEvents(o.container),e.getRenderer\u003d()\u003d\u003eo.renderWindow.getRenderers()[0],e.removeController\u003d()\u003d\u003e{const e\u003do.controlContainer;e\u0026\u0026e.parentNode.removeChild(e)},e.setControllerVisibility\u003de\u003d\u003e{o.controllerVisibility\u003de,o.controlContainer\u0026\u0026(o.controlContainer.style.display\u003de?\"block\":\"none\")},e.toggleControllerVisibility\u003d()\u003d\u003e{e.setControllerVisibility(!o.controllerVisibility)},e.addController\u003dt\u003d\u003e{o.controlContainer\u003ddocument.createElement(\"div\"),i.applyStyle(o.controlContainer,o.controlPanelStyle||n),o.rootContainer.appendChild(o.controlContainer),o.controlContainer.innerHTML\u003dt,e.setControllerVisibility(o.controllerVisibility),o.rootContainer.addEventListener(\"keypress\",(n\u003d\u003e{\"c\"\u003d\u003d\u003dString.fromCharCode(n.charCode)\u0026\u0026e.toggleControllerVisibility()}))},e.delete\u003di.vtk.macro.chain(e.setContainer,o.openGLRenderWindow.delete,e.delete),e.resize\u003d()\u003d\u003e{const e\u003do.container.getBoundingClientRect(),n\u003dwindow.devicePixelRatio||1;o.openGLRenderWindow.setSize(Math.floor(e.width*n),Math.floor(e.height*n)),o.resizeCallback\u0026\u0026o.resizeCallback(e),o.renderWindow.render()},e.setResizeCallback\u003dn\u003d\u003e{o.resizeCallback\u003dn,e.resize()},o.listenWindowResize\u0026\u0026window.addEventListener(\"resize\",e.resize),e.resize()}(o,t)}))}}},\n      }, \"4e90918c0a\", {\"index\":\"4e90918c0a\",\"models/index\":\"7898617fc4\",\"models/ace\":\"be520eff91\",\"models/layout\":\"4c755983eb\",\"models/audio\":\"339f84d639\",\"models/card\":\"c816112d20\",\"models/comm_manager\":\"e552778259\",\"models/tabulator\":\"1385cb5c7e\",\"models/data\":\"f1971f81bf\",\"models/datetime_picker\":\"6e11b2cfe2\",\"models/deckgl\":\"df2378664f\",\"models/tooltips\":\"6e04fbe567\",\"models/echarts\":\"9d046c4720\",\"models/html\":\"2839081043\",\"models/event-to-object\":\"3329d4aa5b\",\"models/idom\":\"7d45bd3bc4\",\"models/ipywidget\":\"0eae77d68f\",\"models/json\":\"0d30bea0c8\",\"models/file_download\":\"1767172ffa\",\"models/katex\":\"7b859fb3cf\",\"models/location\":\"642aa56b24\",\"models/mathjax\":\"0c21036737\",\"models/perspective\":\"84a772681d\",\"models/player\":\"2e8044c920\",\"models/plotly\":\"c23bb1717d\",\"models/util\":\"990b5dd5c7\",\"models/progress\":\"9f787650b9\",\"models/reactive_html\":\"d536149aaa\",\"models/singleselect\":\"3b85956787\",\"models/speech_to_text\":\"aaa48703af\",\"models/state\":\"bfa46a5f19\",\"models/terminal\":\"91fe88c277\",\"models/text_to_speech\":\"33cd2c254e\",\"models/trend\":\"7e6584ca79\",\"models/vega\":\"4feb5fa522\",\"models/video\":\"ffe54b53c3\",\"models/videostream\":\"e3e9b8e495\",\"models/vtk/index\":\"c51f25e2a7\",\"models/vtk/vtkjs\":\"34fc7779c7\",\"models/vtk/vtklayout\":\"46fdad9667\",\"models/vtk/util\":\"4eb45e35aa\",\"models/vtk/vtkcolorbar\":\"c010237f8b\",\"models/vtk/vtkaxes\":\"db7a0079c0\",\"models/vtk/vtkvolume\":\"89262e43a1\",\"models/vtk/vtksynchronized\":\"4baab0b7ce\",\"models/vtk/panel_fullscreen_renwin_sync\":\"11e0707a8f\"}, {});});\n\n      /* END panel.min.js */\n    },\n    function(Bokeh) {} // ensure no trailing comma for IE\n  ];\n\n  function run_inline_js() {\n    if ((root.Bokeh !\u003d\u003d undefined) || (force \u003d\u003d\u003d true)) {\n      for (var i \u003d 0; i \u003c inline_js.length; i++) {\n        inline_js[i].call(root, root.Bokeh);\n      }} else if (Date.now() \u003c root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load \u003d true;\n    }\n  }\n\n  if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, js_modules, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window)); \u003c/script\u003e\n\n"
          },
          {
            "type": "HTML",
            "data": "\u003cscript\u003e \nif ((window.PyViz \u003d\u003d\u003d undefined) || (window.PyViz instanceof HTMLElement)) {\n  window.PyViz \u003d {comms: {}, comm_status:{}, kernels:{}, receivers: {}, plot_index: []}\n}\n\n\n    function JupyterCommManager() {\n    }\n\n    JupyterCommManager.prototype.register_target \u003d function(plot_id, comm_id, msg_handler) {\n      if (window.comm_manager || ((window.Jupyter !\u003d\u003d undefined) \u0026\u0026 (Jupyter.notebook.kernel !\u003d null))) {\n        var comm_manager \u003d window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n        comm_manager.register_target(comm_id, function(comm) {\n          comm.on_msg(msg_handler);\n        });\n      } else if ((plot_id in window.PyViz.kernels) \u0026\u0026 (window.PyViz.kernels[plot_id])) {\n        window.PyViz.kernels[plot_id].registerCommTarget(comm_id, function(comm) {\n          comm.onMsg \u003d msg_handler;\n        });\n      } else if (typeof google !\u003d \u0027undefined\u0027 \u0026\u0026 google.colab.kernel !\u003d null) {\n        google.colab.kernel.comms.registerTarget(comm_id, (comm) \u003d\u003e {\n          var messages \u003d comm.messages[Symbol.asyncIterator]();\n          function processIteratorResult(result) {\n            var message \u003d result.value;\n            console.log(message)\n            var content \u003d {data: message.data, comm_id};\n            var buffers \u003d []\n            for (var buffer of message.buffers || []) {\n              buffers.push(new DataView(buffer))\n            }\n            var metadata \u003d message.metadata || {};\n            var msg \u003d {content, buffers, metadata}\n            msg_handler(msg);\n            return messages.next().then(processIteratorResult);\n          }\n          return messages.next().then(processIteratorResult);\n        })\n      }\n    }\n\n    JupyterCommManager.prototype.get_client_comm \u003d function(plot_id, comm_id, msg_handler) {\n      if (comm_id in window.PyViz.comms) {\n        return window.PyViz.comms[comm_id];\n      } else if (window.comm_manager || ((window.Jupyter !\u003d\u003d undefined) \u0026\u0026 (Jupyter.notebook.kernel !\u003d null))) {\n        var comm_manager \u003d window.comm_manager || Jupyter.notebook.kernel.comm_manager;\n        var comm \u003d comm_manager.new_comm(comm_id, {}, {}, {}, comm_id);\n        if (msg_handler) {\n          comm.on_msg(msg_handler);\n        }\n      } else if ((plot_id in window.PyViz.kernels) \u0026\u0026 (window.PyViz.kernels[plot_id])) {\n        var comm \u003d window.PyViz.kernels[plot_id].connectToComm(comm_id);\n        comm.open();\n        if (msg_handler) {\n          comm.onMsg \u003d msg_handler;\n        }\n      } else if (typeof google !\u003d \u0027undefined\u0027 \u0026\u0026 google.colab.kernel !\u003d null) {\n        var comm_promise \u003d google.colab.kernel.comms.open(comm_id)\n        comm_promise.then((comm) \u003d\u003e {\n          window.PyViz.comms[comm_id] \u003d comm;\n          if (msg_handler) {\n            var messages \u003d comm.messages[Symbol.asyncIterator]();\n            function processIteratorResult(result) {\n              var message \u003d result.value;\n              var content \u003d {data: message.data};\n              var metadata \u003d message.metadata || {comm_id};\n              var msg \u003d {content, metadata}\n              msg_handler(msg);\n              return messages.next().then(processIteratorResult);\n            }\n            return messages.next().then(processIteratorResult);\n          }\n        }) \n        var sendClosure \u003d (data, metadata, buffers, disposeOnDone) \u003d\u003e {\n          return comm_promise.then((comm) \u003d\u003e {\n            comm.send(data, metadata, buffers, disposeOnDone);\n          });\n        };\n        var comm \u003d {\n          send: sendClosure\n        };\n      }\n      window.PyViz.comms[comm_id] \u003d comm;\n      return comm;\n    }\n    window.PyViz.comm_manager \u003d new JupyterCommManager();\n    \n\n\nvar JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\nvar HTML_MIME_TYPE \u003d \u0027text/html\u0027;\nvar EXEC_MIME_TYPE \u003d \u0027application/vnd.holoviews_exec.v0+json\u0027;\nvar CLASS_NAME \u003d \u0027output\u0027;\n\n/**\n * Render data to the DOM node\n */\nfunction render(props, node) {\n  var div \u003d document.createElement(\"div\");\n  var script \u003d document.createElement(\"script\");\n  node.appendChild(div);\n  node.appendChild(script);\n}\n\n/**\n * Handle when a new output is added\n */\nfunction handle_add_output(event, handle) {\n  var output_area \u003d handle.output_area;\n  var output \u003d handle.output;\n  if ((output.data \u003d\u003d undefined) || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n    return\n  }\n  var id \u003d output.metadata[EXEC_MIME_TYPE][\"id\"];\n  var toinsert \u003d output_area.element.find(\".\" + CLASS_NAME.split(\u0027 \u0027)[0]);\n  if (id !\u003d\u003d undefined) {\n    var nchildren \u003d toinsert.length;\n    var html_node \u003d toinsert[nchildren-1].children[0];\n    html_node.innerHTML \u003d output.data[HTML_MIME_TYPE];\n    var scripts \u003d [];\n    var nodelist \u003d html_node.querySelectorAll(\"script\");\n    for (var i in nodelist) {\n      if (nodelist.hasOwnProperty(i)) {\n        scripts.push(nodelist[i])\n      }\n    }\n\n    scripts.forEach( function (oldScript) {\n      var newScript \u003d document.createElement(\"script\");\n      var attrs \u003d [];\n      var nodemap \u003d oldScript.attributes;\n      for (var j in nodemap) {\n        if (nodemap.hasOwnProperty(j)) {\n          attrs.push(nodemap[j])\n        }\n      }\n      attrs.forEach(function(attr) { newScript.setAttribute(attr.name, attr.value) });\n      newScript.appendChild(document.createTextNode(oldScript.innerHTML));\n      oldScript.parentNode.replaceChild(newScript, oldScript);\n    });\n    if (JS_MIME_TYPE in output.data) {\n      toinsert[nchildren-1].children[1].textContent \u003d output.data[JS_MIME_TYPE];\n    }\n    output_area._hv_plot_id \u003d id;\n    if ((window.Bokeh !\u003d\u003d undefined) \u0026\u0026 (id in Bokeh.index)) {\n      window.PyViz.plot_index[id] \u003d Bokeh.index[id];\n    } else {\n      window.PyViz.plot_index[id] \u003d null;\n    }\n  } else if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !\u003d\u003d undefined) {\n    var bk_div \u003d document.createElement(\"div\");\n    bk_div.innerHTML \u003d output.data[HTML_MIME_TYPE];\n    var script_attrs \u003d bk_div.children[0].attributes;\n    for (var i \u003d 0; i \u003c script_attrs.length; i++) {\n      toinsert[toinsert.length - 1].childNodes[1].setAttribute(script_attrs[i].name, script_attrs[i].value);\n    }\n    // store reference to server id on output_area\n    output_area._bokeh_server_id \u003d output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n  }\n}\n\n/**\n * Handle when an output is cleared or removed\n */\nfunction handle_clear_output(event, handle) {\n  var id \u003d handle.cell.output_area._hv_plot_id;\n  var server_id \u003d handle.cell.output_area._bokeh_server_id;\n  if (((id \u003d\u003d\u003d undefined) || !(id in PyViz.plot_index)) \u0026\u0026 (server_id !\u003d\u003d undefined)) { return; }\n  var comm \u003d window.PyViz.comm_manager.get_client_comm(\"hv-extension-comm\", \"hv-extension-comm\", function () {});\n  if (server_id !\u003d\u003d null) {\n    comm.send({event_type: \u0027server_delete\u0027, \u0027id\u0027: server_id});\n    return;\n  } else if (comm !\u003d\u003d null) {\n    comm.send({event_type: \u0027delete\u0027, \u0027id\u0027: id});\n  }\n  delete PyViz.plot_index[id];\n  if ((window.Bokeh !\u003d\u003d undefined) \u0026 (id in window.Bokeh.index)) {\n    var doc \u003d window.Bokeh.index[id].model.document\n    doc.clear();\n    const i \u003d window.Bokeh.documents.indexOf(doc);\n    if (i \u003e -1) {\n      window.Bokeh.documents.splice(i, 1);\n    }\n  }\n}\n\n/**\n * Handle kernel restart event\n */\nfunction handle_kernel_cleanup(event, handle) {\n  delete PyViz.comms[\"hv-extension-comm\"];\n  window.PyViz.plot_index \u003d {}\n}\n\n/**\n * Handle update_display_data messages\n */\nfunction handle_update_output(event, handle) {\n  handle_clear_output(event, {cell: {output_area: handle.output_area}})\n  handle_add_output(event, handle)\n}\n\nfunction register_renderer(events, OutputArea) {\n  function append_mime(data, metadata, element) {\n    // create a DOM node to render to\n    var toinsert \u003d this.create_output_subarea(\n    metadata,\n    CLASS_NAME,\n    EXEC_MIME_TYPE\n    );\n    this.keyboard_manager.register_events(toinsert);\n    // Render to node\n    var props \u003d {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n    render(props, toinsert[0]);\n    element.append(toinsert);\n    return toinsert\n  }\n\n  events.on(\u0027output_added.OutputArea\u0027, handle_add_output);\n  events.on(\u0027output_updated.OutputArea\u0027, handle_update_output);\n  events.on(\u0027clear_output.CodeCell\u0027, handle_clear_output);\n  events.on(\u0027delete.Cell\u0027, handle_clear_output);\n  events.on(\u0027kernel_ready.Kernel\u0027, handle_kernel_cleanup);\n\n  OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n    safe: true,\n    index: 0\n  });\n}\n\nif (window.Jupyter !\u003d\u003d undefined) {\n  try {\n    var events \u003d require(\u0027base/js/events\u0027);\n    var OutputArea \u003d require(\u0027notebook/js/outputarea\u0027).OutputArea;\n    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) \u003d\u003d -1) {\n      register_renderer(events, OutputArea);\n    }\n  } catch(err) {\n  }\n}\n \u003c/script\u003e\n\n"
          },
          {
            "type": "HTML",
            "data": "\n\u003cdiv class\u003d\"logo-block\"\u003e\n\u003cimg src\u003d\u0027data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAB+wAAAfsBxc2miwAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAA6zSURB\nVHic7ZtpeFRVmsf/5966taWqUlUJ2UioBBJiIBAwCZtog9IOgjqACsogKtqirT2ttt069nQ/zDzt\ntI4+CrJIREFaFgWhBXpUNhHZQoKBkIUASchWla1S+3ar7r1nPkDaCAnZKoQP/D7mnPOe9/xy76n3\nnFSAW9ziFoPFNED2LLK5wcyBDObkb8ZkxuaoSYlI6ZcOKq1eWFdedqNzGHQBk9RMEwFAASkk0Xw3\nETacDNi2vtvc7L0ROdw0AjoSotQVkKSvHQz/wRO1lScGModBFbDMaNRN1A4tUBCS3lk7BWhQkgpD\nlG4852/+7DWr1R3uHAZVQDsbh6ZPN7CyxUrCzJMRouusj0ipRwD2uKm0Zn5d2dFwzX1TCGhnmdGo\nG62Nna+isiUqhkzuKrkQaJlPEv5mFl2fvGg2t/VnzkEV8F5ioioOEWkLG86fvbpthynjdhXYZziQ\nx1hC9J2NFyi8vCTt91Fh04KGip0AaG9zuCk2wQCVyoNU3Hjezee9bq92duzzTmxsRJoy+jEZZZYo\nGTKJ6SJngdJqAfRzpze0+jHreUtPc7gpBLQnIYK6BYp/uGhw9YK688eu7v95ysgshcg9qSLMo3JC\n4jqLKQFBgdKDPoQ+Pltb8dUyQLpeDjeVgI6EgLIQFT5tEl3rn2losHVsexbZ3EyT9wE1uGdkIPcy\nBGxn8QUq1QrA5nqW5i2tLqvrrM9NK6AdkVIvL9E9bZL/oyfMVd/jqvc8LylzRBKDJSzIExwhQzuL\nQYGQj4rHfFTc8mUdu3E7yoLtbTe9gI4EqVgVkug2i5+uXGo919ixbRog+3fTbQ8qJe4ZOYNfMoTI\nOoshUNosgO60AisX15aeI2PSIp5KiFLI9ubb1vV3Qb2ltwLakUCDAkWX7/nHKRmmGIl9VgYsUhJm\n2NXjKYADtM1ygne9QQDIXlk49FBstMKx66D1v4+XuQr7vqTe0VcBHQlRWiOCbmmSYe2SqtL6q5rJ\nzsTb7lKx3FKOYC4DoqyS/B5bvLPxvD9Qtf6saxYLQGJErmDOdOMr/zo96km1nElr8bmPOBwI9COv\nHnFPRIwmkSOv9kcAS4heRsidOkpeWBgZM+UBrTFAXNYL5Vf2ii9c1trNzpYdaoVil3WIc+wdk+gQ\nnoie3ecCcxt9ITcLAPWt/laGEO/9U6PmzZkenTtsSMQ8uYywJVW+grCstAvCIaAdArAsIWkRDDs/\nKzLm2YcjY1Lv0UdW73HabE9n6V66cxSzfEmuJssTpKGVp+0vHq73FwL46eOjpMpbRAnNmJFrGJNu\nUkf9Yrz+3rghiumCKNXXWPhLYcjxGsIpoCMsIRoFITkW8AuyM8jC1+/QLx4bozCEJIq38+1rtpR6\nV/yzb8eBlRb3fo5l783N0CWolAzJHaVNzkrTzlEp2bQ2q3TC5gn6wpnoQAmwSiGh2GitnTmVMc5O\nUyfKWUKCIsU7+fZDKwqdT6DDpvkzAX4/+AMFjk0tDp5GRXLpQ2MUmhgDp5gxQT8+Y7hyPsMi8uxF\n71H0oebujHALECjFKaW9Lm68n18wXp2kVzIcABytD5iXFzg+WVXkegpAsOOYziqo0OkK76GyquC3\nltZAzMhhqlSNmmWTE5T6e3IN05ITFLM4GdN0vtZ3ob8Jh1NAKXFbm5PtLU/eqTSlGjkNAJjdgn/N\naedXa0tdi7+t9G0FIF49rtMSEgAs1kDLkTPO7ebm4IUWeyh1bKomXqlgMG6kJmHcSM0clYLJ8XtR\n1GTnbV3F6I5wCGikAb402npp1h1s7LQUZZSMIfALFOuL3UUrfnS8+rez7v9qcold5tilgHbO1fjK\n9ubb17u9oshxzMiUBKXWqJNxd+fqb0tLVs4lILFnK71H0Ind7uiPgACVcFJlrb0tV6DzxqqTIhUM\nCwDf1/rrVhTa33/3pGPxJYdQ2l2cbgVcQSosdx8uqnDtbGjh9SlDVSMNWhlnilfqZk42Th2ZpLpf\nxrHec5e815zrr0dfBZSwzkZfqsv+1FS1KUknUwPARVvItfKUY+cn57yP7qv07UE3p8B2uhUwLk09\ne0SCOrK+hbdYHYLjRIl71wWzv9jpEoeOHhGRrJAzyEyNiJuUqX0g2sBN5kGK6y2Blp5M3lsB9Qh4\ny2Ja6x6+i0ucmKgwMATwhSjdUu49tKrQ/pvN5d53ml2CGwCmJipmKjgmyuaXzNeL2a0AkQ01Th5j\n2DktO3Jyk8f9vcOBQHV94OK+fPumJmvQHxJoWkaKWq9Vs+yUsbq0zGT1I4RgeH2b5wef7+c7bl8F\neKgoHVVZa8ZPEORzR6sT1BzDUAD/d9F78e2Tzv99v8D+fLVTqAKAsbGamKey1Mt9Ann4eH3gTXTz\nidWtAJ8PQWOk7NzSeQn/OTHDuEikVF1R4z8BQCy+6D1aWRfY0tTGG2OM8rRoPaeIj5ZHzJxszElN\nVM8K8JS5WOfv8mzRnQAKoEhmt8gyPM4lU9SmBK1MCQBnW4KONT86v1hZ1PbwSXPw4JWussVjtH9Y\nNCoiL9UoH/6PSu8jFrfY2t36erQHXLIEakMi1SydmzB31h3GGXFDFNPaK8Rme9B79Ixrd0WN+1ij\nNRQ/doRmuFLBkHSTOm5GruG+pFjFdAmorG4IXH1Qua6ASniclfFtDYt+oUjKipPrCQB7QBQ2lrgP\nfFzm+9XWUtcqJ3/5vDLDpJ79XHZk3u8nGZ42qlj1+ydtbxysCezrydp6ugmipNJ7WBPB5tydY0jP\nHaVNzs3QzeE4ZpTbI+ZbnSFPbVOw9vsfnVvqWnirPyCNGD08IlqtYkh2hjZ5dErEQzoNm+6ykyOt\nLt5/PQEuSRRKo22VkydK+vvS1XEKlhCJAnsqvcVvH7f/ZU2R67eXbMEGAMiIV5oWZWiWvz5Fv2xG\nsjqNJQRvn3Rs2lji/lNP19VjAQDgD7FHhujZB9OGqYxRkZxixgRDVlqS6uEOFaJUVu0rPFzctrnF\nJqijImVp8dEKVWyUXDk92zAuMZ6bFwpBU1HrOw6AdhQgUooChb0+ItMbWJitSo5Ws3IAOGEOtL53\n0vHZih9sC4vtofZ7Qu6523V/fmGcds1TY3V36pUsBwAbSlxnVh2xLfAD/IAIMDf7XYIkNmXfpp2l\n18rkAJAy9HKFaIr/qULkeQQKy9zf1JgDB2uaeFNGijo5QsUyacNUUTOnGO42xSnv4oOwpDi1zYkc\nefUc3I5Gk6PhyTuVKaOGyLUAYPGIoY9Pu/atL/L92+4q9wbflRJ2Trpm/jPjdBtfnqB/dIThcl8A\nKG7hbRuKnb8qsQsVvVlTrwQAQMUlf3kwJI24Z4JhPMtcfng5GcH49GsrxJpGvvHIaeem2ma+KSjQ\nlIwUdYyCY8j4dE1KzijNnIP2llF2wcXNnsoapw9XxsgYAl6k+KzUXbi2yP3KR2ecf6z3BFsBICdW\nnvnIaG3eHybqX7vbpEqUMT+9OL4Qpe8VON7dXuFd39v19FoAABRVePbGGuXTszO0P7tu6lghUonE\nllRdrhArLvmKdh9u29jcFiRRkfLUxBiFNiqSU9icoZQHo5mYBI1MBgBH6wMNb+U7Pnw337H4gi1Y\nciWs+uks3Z9fztUvfzxTm9Ne8XXkvQLHNytOOZeiD4e0PgkAIAYCYknKUNUDSXEKzdWNpnil7r4p\nxqkjTarZMtk/K8TQ6Qve78qqvXurGwIJqcOUKfUWHsm8KGvxSP68YudXq4pcj39X49uOK2X142O0\nTz5/u/7TVybqH0rSya6ZBwD21/gubbrgWdDgEOx9WUhfBaC2ibcEBYm7a7x+ukrBMNcEZggyR0TE\nT8zUPjikQ4VosQZbTpS4vqizBKvqmvjsqnpfzaZyx9JPiz1/bfGKdgD45XB1zoIMzYbfTdS/NClB\nGct0USiY3YL/g0LHy/uq/Ef6uo5+n0R/vyhp17Klpge763f8rMu6YU/zrn2nml+2WtH+Z+5IAAFc\n2bUTdTDOSNa9+cQY7YLsOIXhevEkCvzph7a8laecz/Un/z4/Ae04XeL3UQb57IwU9ZDr9UuKVajv\nnxp1+1UVIo/LjztZkKH59fO3G/JemqCfmaCRqbqbd90ZZ8FfjtkfAyD0J/9+C2h1hDwsSxvGjNDc\nb4zk5NfrSwiQblLHzZhg+Jf4aPlUwpDqkQqa9nimbt1/TDH8OitGMaQnj+RJS6B1fbF7SY1TqO5v\n/v0WAADl1f7zokgS7s7VT2DZ7pegUjBM7mjtiDZbcN4j0YrHH0rXpCtY0qPX0cVL0rv5jv/ZXend\n0u/EESYBAFBU4T4Qa5TflZOhTe7pmKpaP8kCVUVw1+yhXfJWvn1P3hnXi33JsTN6PnP3hHZ8Z3/h\naLHzmkNPuPj7Bc/F/Q38CwjTpSwQXgE4Vmwry9tpfq/ZFgqFMy4AVDtCvi8rvMvOmv0N4YwbVgEA\nsPM72/KVnzfspmH7HQGCRLG2yL1+z8XwvPcdCbsAANh+xPzstgMtxeGKt+6MK3/tacfvwhWvIwMi\noKEBtm0H7W+UVfkc/Y1V0BhoPlDr/w1w/eu1vjIgAgDg22OtX6/eYfnEz/focrZTHAFR+PSs56/7\nq32nwpjazxgwAQCwcU/T62t3WL7r6/jVRa6/byp1rei+Z98ZUAEAhEPHPc8fKnTU9nbgtnOe8h0l\n9hcGIqmODLQAHCy2Xti6v/XNRivf43f4fFvIteu854+VHnR7q9tfBlwAAGz+pnndB9vM26UebAe8\nSLHujPOTPVW+rwY+sxskAAC2HrA8t2Vvc7ffP1r9o+vwR2dcr92InIAbKKC1FZ5tB1tf+/G8p8sv\nN/9Q5zd/XR34LYCwV5JdccMEAMDBk45DH243r/X4xGvqxFa/GNpS7n6rwOwNWwHVE26oAADYurf1\nzx/utOzt+DMKYM0p17YtZZ5VNzqfsB2HewG1WXE8PoZ7gOclbTIvynZf9JV+fqZtfgs/8F/Nu5rB\nEIBmJ+8QRMmpU7EzGRsf2FzuePqYRbzh/zE26EwdrT10f6r6o8HOYzCJB9Dpff8tbnGLG8L/A/WE\nroTBs2RqAAAAAElFTkSuQmCC\u0027\n     style\u003d\u0027height:25px; border-radius:12px; display: inline-block; float: left; vertical-align: middle\u0027\u003e\u003c/img\u003e\n\n\n  \u003cimg src\u003d\u0027data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACMAAAAjCAYAAAAe2bNZAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK6wAACusBgosNWgAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNui8sowAAAf9SURBVFiFvZh7cFTVHcc/59y7793sJiFAwkvAYDRqFWwdraLVlj61diRYsDjqCFbFKrYo0CltlSq1tLaC2GprGIriGwqjFu10OlrGv8RiK/IICYECSWBDkt3s695zTv9IAtlHeOn0O7Mzu797z+/3Ob/z+p0VfBq9doNFljuABwAXw2PcvGHt6bgwxhz7Ls4YZNVXxxANLENwE2D1W9PAGmAhszZ0/X9gll5yCbHoOirLzmaQs0F6F8QMZq1v/8xgNm7DYwwjgXJLYL4witQ16+sv/U9HdDmV4WrKw6B06cZC/RMrM4MZ7xz61DAbtzEXmAvUAX4pMOVecg9/MFFu3j3Gz7gQBLygS2RGumBkL0cubiFRsR3LzVBV1UMk3IrW73PT9C2lYOwhQB4ClhX1AuKpjLcV27oEjyUpNUJCg1CvcejykWTCXyQgzic2HIIBjg3pS6+uRLKAhumZvD4U+tq0jTrgkVKQQtLekfTtxIPAkhTNF6G7kZm7aPp6M9myKVQEoaYaIhEQYvD781DML/RfBGNZXAl4irJiwBa07e/y7cQnBaJghIX6ENl2GR/fGCBoz6cm5qeyEqQA5ZYA5x5eeiV0Qph4gjFAUSwAr6QllQgcxS/Jm25Cr2Tmpsk03XI9NfI31FTZBEOgVOk51adqDBNPCNPSRlkiDXbBEwOU2WxH+I7itQZ62g56OjM33suq1YsZHVtGZSUI2QdyYgkgOthQNIF7BIGDnRAJgJSgj69cUx1gB8PkOGwL4E1gPrM27gIg7NlGKLQApc7BmEnAxP5g/rw4YqBrCDB5xHkw5rdR/1qTrN/hKNo6YUwVDNpFsnjYS8RbidBPcPXFP6R6yfExuOXmN4A3jv1+8ZUwgY9D2OWjUZE6lO88jDwHI8ZixGiMKSeYTBamCoDk6kDAb6y1OcH1a6KpD/fZesoFw5FlIXAVCIiH4PxrV+p2npVDToTBmtjY8t1swh2V61E9KqWiyuPEjM8dbfxuvfa49Zayf9R136Wr8mBSf/T7bNteA8zwaGEUbFpckWwq95n59dUIywKl2fbOIS5e8bWSu0tJ1a5redAYfqkdjesodFajcgaVNWhXo1C9SrkN3Usmv3UMJrc6/DDwkwEntkEJLe67tSLhvyzK8rHDQWleve5CGk4VZEB1r+5bg2E2si+Y0QatDK6jUVkX5eg2YYlp++ZM+rfMNYamAj8Y7MAVWFqaR1f/t2xzU4IHjybBtthzuiAASqv7jTF7jOqDMAakFHgDNsFyP+FhwZHBmH9F7cutIYkQCylYYv1AZSqsn1/+bX51OMMjPSl2nAnM7hnjOx2v53YgNWAzHM9Q/9l0lQWPSCBSyokAtOBC1Rj+w/1Xs+STDp4/E5g7Rs2zm2+oeVd7PUuHKDf6A4r5EsPT5K3gfCnBXNUYnvGzb+KcCczYYWOnLpy4eOXuG2oec0PBN8XQQAnpvS35AvAykr56rWhPBiV4MvtceGLxk5Mr6A1O8IfK7rl7xJ0r9kyumuP4fa0lMqTBLJIAJqEf1J3qE92lMBndlyfRD2YBghHC4hlny7ASqCeWo5zaoDdIWfnIefNGTb9fC73QDfhyBUCNOxrGPSUBfPem9us253YTV+3mcBbdkUYfzmHiLqZbYdIGHHON2ZlemXouaJUOO6TqtdHEQuXYY8Yt+EbDgmlS6RdzkaDTv2P9A3gICiq93sWhb5mc5wVhuU3Y7m5hOc3So7qFT3SLgOXHb/cyOfMn7xROegoC/PTcn3v8gbKPgDopJFk3R/uBPWQiwQ+2/GJevRMObLUzqe/saJjQUQTTftEVMW9tWxPgAocwcj9abNcZe7s+6t2R2xXZG7zyYLp8Q1PiRBBHym5bYuXi8Qt+/LvGu9f/5YDAxABsaRNPH6Xr4D4Sk87a897SOy9v/fKwjoF2eQel95yDESGEF6gEMwKhLwKus3wOVjTtes7qzgLdXTMnNCNoEpbcrtNuq6N7Xh/+eqcbj94xQkp7mdKpW5XbtbR8Z26kgMCAf2UU5YEovRUVRHbu2b3vK1UdDFkDCyMRQxbpdv8nhKAGIa7QaQedzT07fFPny53R738JoVYBdVrnsNx9XZ9v33UeGO+AA2MMUkgqQ5UcdDLZSFeVgONnXeHqSAC5Ew1BXwko0D1Zct3dT1duOjS3MzZnEUJtBuoQAq3SGOLR4ekjn9NC5nVOaYXf9lETrUkmOJy3pOz8OKIb2A1cWhJCCEzOxU2mUPror+2/L3yyM3pkM7jTjr1nBOgkGeyQ7erxpdJsMAS9wb2F9rzMxNY1K2PMU0WtZV82VU8Wp6vbKJVo9Lx/+4cydORdxCCQ/kDGTZCWsRpLu7VD7bfKqL8V2orKTp/PtzaXy42jr6TwAuisi+7JolUG4wY+8vyrISCMtRrLKWpvjAOqx/QGhp0rjRo5xD3x98CWQuOQN8qumRMmI7jKZPUEpzNVZsj4Zbaq1to5tZZsKIydLWojhIXrJnES79EaOzv3du2NytKuxzJKAA6wF8xqEE8s2jo/1wd/khslQGxd81Zg62Bbp31XBH+iETt7Y3ELA0iU6iGDlQ5mexe0VEx4a3x8V1AaYwFJgTiwaOsDmeK2J8nMUOqsnB1A+dcA04ucCYt0urkjmflk9iT2v30q/gZn5rQPvor4n9Ou634PeBzoznes/iot/7WnClKoM/+zCIjH5kwT8ChQjTHPIPTjFV3PpU/Hx+DM/A9U3IXI4SPCYAAAAABJRU5ErkJggg\u003d\u003d\u0027\n       style\u003d\u0027height:15px; border-radius:12px; display: inline-block; float: left\u0027\u003e\u003c/img\u003e\n  \n\n\n\n\n\u003c/div\u003e\n\n"
          },
          {
            "type": "HTML",
            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1164\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n"
          },
          {
            "type": "HTML",
            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d \u0027application/vnd.bokehjs_exec.v0+json\u0027;\n  var CLASS_NAME \u003d \u0027output_bokeh rendered_html\u0027;\n\n  /**\n   * Render data to the DOM node\n   */\n  function render(props, node) {\n    var script \u003d document.createElement(\"script\");\n    node.appendChild(script);\n  }\n\n  /**\n   * Handle when an output is cleared or removed\n   */\n  function handleClearOutput(event, handle) {\n    var cell \u003d handle.cell;\n\n    var id \u003d cell.output_area._bokeh_element_id;\n    var server_id \u003d cell.output_area._bokeh_server_id;\n    // Clean up Bokeh references\n    if (id !\u003d null \u0026\u0026 id in Bokeh.index) {\n      Bokeh.index[id].model.document.clear();\n      delete Bokeh.index[id];\n    }\n\n    if (server_id !\u003d\u003d undefined) {\n      // Clean up Bokeh references\n      var cmd \u003d \"from bokeh.io.state import curstate; print(curstate().uuid_to_server[\u0027\" + server_id + \"\u0027].get_sessions()[0].document.roots[0]._id)\";\n      cell.notebook.kernel.execute(cmd, {\n        iopub: {\n          output: function(msg) {\n            var id \u003d msg.content.text.trim();\n            if (id in Bokeh.index) {\n              Bokeh.index[id].model.document.clear();\n              delete Bokeh.index[id];\n            }\n          }\n        }\n      });\n      // Destroy server and session\n      var cmd \u003d \"import bokeh.io.notebook as ion; ion.destroy_server(\u0027\" + server_id + \"\u0027)\";\n      cell.notebook.kernel.execute(cmd);\n    }\n  }\n\n  /**\n   * Handle when a new output is added\n   */\n  function handleAddOutput(event, handle) {\n    var output_area \u003d handle.output_area;\n    var output \u003d handle.output;\n\n    // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n    if ((output.output_type !\u003d \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n      return\n    }\n\n    var toinsert \u003d output_area.element.find(\".\" + CLASS_NAME.split(\u0027 \u0027)[0]);\n\n    if (output.metadata[EXEC_MIME_TYPE][\"id\"] !\u003d\u003d undefined) {\n      toinsert[toinsert.length - 1].firstChild.textContent \u003d output.data[JS_MIME_TYPE];\n      // store reference to embed id on output_area\n      output_area._bokeh_element_id \u003d output.metadata[EXEC_MIME_TYPE][\"id\"];\n    }\n    if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !\u003d\u003d undefined) {\n      var bk_div \u003d document.createElement(\"div\");\n      bk_div.innerHTML \u003d output.data[HTML_MIME_TYPE];\n      var script_attrs \u003d bk_div.children[0].attributes;\n      for (var i \u003d 0; i \u003c script_attrs.length; i++) {\n        toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n        toinsert[toinsert.length - 1].firstChild.textContent \u003d bk_div.children[0].textContent\n      }\n      // store reference to server id on output_area\n      output_area._bokeh_server_id \u003d output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n    }\n  }\n\n  function register_renderer(events, OutputArea) {\n\n    function append_mime(data, metadata, element) {\n      // create a DOM node to render to\n      var toinsert \u003d this.create_output_subarea(\n        metadata,\n        CLASS_NAME,\n        EXEC_MIME_TYPE\n      );\n      this.keyboard_manager.register_events(toinsert);\n      // Render to node\n      var props \u003d {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n      render(props, toinsert[toinsert.length - 1]);\n      element.append(toinsert);\n      return toinsert\n    }\n\n    /* Handle when an output is cleared or removed */\n    events.on(\u0027clear_output.CodeCell\u0027, handleClearOutput);\n    events.on(\u0027delete.Cell\u0027, handleClearOutput);\n\n    /* Handle when a new output is added */\n    events.on(\u0027output_added.OutputArea\u0027, handleAddOutput);\n\n    /**\n     * Register the mime type and append_mime function with output_area\n     */\n    OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n      /* Is output safe? */\n      safe: true,\n      /* Index of renderer in `output_area.display_order` */\n      index: 0\n    });\n  }\n\n  // register the mime type if in Jupyter Notebook environment and previously unregistered\n  if (root.Jupyter !\u003d\u003d undefined) {\n    var events \u003d require(\u0027base/js/events\u0027);\n    var OutputArea \u003d require(\u0027notebook/js/outputarea\u0027).OutputArea;\n\n    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) \u003d\u003d -1) {\n      register_renderer(events, OutputArea);\n    }\n  }\n\n  \n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_timeout \u003d Date.now() + 5000;\n    root._bokeh_failed_load \u003d false;\n  }\n\n  var NB_LOAD_WARNING \u003d {\u0027data\u0027: {\u0027text/html\u0027:\n     \"\u003cdiv style\u003d\u0027background-color: #fdd\u0027\u003e\\n\"+\n     \"\u003cp\u003e\\n\"+\n     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n     \"\u003c/p\u003e\\n\"+\n     \"\u003cul\u003e\\n\"+\n     \"\u003cli\u003ere-rerun `output_notebook()` to attempt to load from CDN again, or\u003c/li\u003e\\n\"+\n     \"\u003cli\u003euse INLINE resources instead, as so:\u003c/li\u003e\\n\"+\n     \"\u003c/ul\u003e\\n\"+\n     \"\u003ccode\u003e\\n\"+\n     \"from bokeh.resources import INLINE\\n\"+\n     \"output_notebook(resources\u003dINLINE)\\n\"+\n     \"\u003c/code\u003e\\n\"+\n     \"\u003c/div\u003e\"}};\n\n  function display_loaded() {\n    var el \u003d document.getElementById(\"1164\");\n    if (el !\u003d null) {\n      el.textContent \u003d \"BokehJS is loading...\";\n    }\n    if (root.Bokeh !\u003d\u003d undefined) {\n      if (el !\u003d null) {\n        el.textContent \u003d \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n      }\n    } else if (Date.now() \u003c root._bokeh_timeout) {\n      setTimeout(display_loaded, 100)\n    }\n  }\n\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback !\u003d null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, callback) {\n    if (css_urls \u003d\u003d null) css_urls \u003d [];\n    if (js_urls \u003d\u003d null) js_urls \u003d [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading \u003e 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls \u003d\u003d null || js_urls.length \u003d\u003d\u003d 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading \u003d css_urls.length + js_urls.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error(url) {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (let i \u003d 0; i \u003c css_urls.length; i++) {\n      const url \u003d css_urls[i];\n      const element \u003d document.createElement(\"link\");\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error.bind(null, url);\n      element.rel \u003d \"stylesheet\";\n      element.type \u003d \"text/css\";\n      element.href \u003d url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    const hashes \u003d {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.3.min.js\": \"dM3QQsP+wXdHg42wTqW85BjZQdLNNIXqlPw/BgKoExPmTG7ZLML4EGqLMfqHT6ON\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.3.min.js\": \"8x57I4YuIfu8XyZfFo0XVr2WAT8EK4rh/uDe3wF7YuW2FNUSNEpJbsPaB1nJ2fz2\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.3.min.js\": \"3QTqdz9LyAm2i0sG5XTePsHec3UHWwVsrOL68SYRoAXsafvfAyqtQ+h440+qIBhS\"};\n\n    for (let i \u003d 0; i \u003c js_urls.length; i++) {\n      const url \u003d js_urls[i];\n      const element \u003d document.createElement(\u0027script\u0027);\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error.bind(null, url);\n      element.async \u003d false;\n      element.src \u003d url;\n      if (url in hashes) {\n        element.crossOrigin \u003d \"anonymous\";\n        element.integrity \u003d \"sha384-\" + hashes[url];\n      }\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n  };\n\n  function inject_raw_css(css) {\n    const element \u003d document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  \n  var js_urls \u003d [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.3.min.js\", \"https://unpkg.com/@holoviz/panel@0.12.0/dist/panel.min.js\"];\n  var css_urls \u003d [];\n  \n\n  var inline_js \u003d [\n    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\n    function(Bokeh) {\n    \n    \n    }\n  ];\n\n  function run_inline_js() {\n    \n    if (root.Bokeh !\u003d\u003d undefined || force \u003d\u003d\u003d true) {\n      \n    for (var i \u003d 0; i \u003c inline_js.length; i++) {\n      inline_js[i].call(root, root.Bokeh);\n    }\n    if (force \u003d\u003d\u003d true) {\n        display_loaded();\n      }} else if (Date.now() \u003c root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load \u003d true;\n    } else if (force !\u003d\u003d true) {\n      var cell \u003d $(document.getElementById(\"1164\")).parents(\u0027.cell\u0027).data().cell;\n      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n    }\n\n  }\n\n  if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window)); \u003c/script\u003e\n"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482815_131583170",
      "id": "20180120-131731_1558753626",
      "dateCreated": "2020-02-05 14:34:42.815",
      "dateStarted": "2021-07-26 03:16:15.689",
      "dateFinished": "2021-07-26 03:16:17.599",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nstation_info \u003d pd.read_csv(\u0027https://raw.githubusercontent.com/holoviz/holoviews/master/examples/assets/station_info.csv\u0027)\nstation_info.head()\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:17.690",
      "progress": 0,
      "config": {
        "colWidth": 12.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv\u003e\n\u003cstyle scoped\u003e\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n\u003c/style\u003e\n\u003ctable border\u003d\"1\" class\u003d\"dataframe\"\u003e\n  \u003cthead\u003e\n    \u003ctr style\u003d\"text-align: right;\"\u003e\n      \u003cth\u003e\u003c/th\u003e\n      \u003cth\u003ename\u003c/th\u003e\n      \u003cth\u003elat\u003c/th\u003e\n      \u003cth\u003elon\u003c/th\u003e\n      \u003cth\u003eopened\u003c/th\u003e\n      \u003cth\u003eservices\u003c/th\u003e\n      \u003cth\u003eservice_names\u003c/th\u003e\n      \u003cth\u003eridership\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003cth\u003e0\u003c/th\u003e\n      \u003ctd\u003eFirst Avenue\u003c/td\u003e\n      \u003ctd\u003e40.730953\u003c/td\u003e\n      \u003ctd\u003e-73.981628\u003c/td\u003e\n      \u003ctd\u003e1924\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e[\u0027L\u0027]\u003c/td\u003e\n      \u003ctd\u003e7.702110\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e1\u003c/th\u003e\n      \u003ctd\u003eSecond Avenue\u003c/td\u003e\n      \u003ctd\u003e40.723402\u003c/td\u003e\n      \u003ctd\u003e-73.989938\u003c/td\u003e\n      \u003ctd\u003e1936\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e[\u0027F\u0027]\u003c/td\u003e\n      \u003ctd\u003e5.847710\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e2\u003c/th\u003e\n      \u003ctd\u003eThird Avenue\u003c/td\u003e\n      \u003ctd\u003e40.732849\u003c/td\u003e\n      \u003ctd\u003e-73.986122\u003c/td\u003e\n      \u003ctd\u003e1924\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e[\u0027L\u0027]\u003c/td\u003e\n      \u003ctd\u003e2.386533\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e3\u003c/th\u003e\n      \u003ctd\u003eFifth Avenue\u003c/td\u003e\n      \u003ctd\u003e40.753821\u003c/td\u003e\n      \u003ctd\u003e-73.981963\u003c/td\u003e\n      \u003ctd\u003e1920\u003c/td\u003e\n      \u003ctd\u003e6\u003c/td\u003e\n      \u003ctd\u003e[\u00277\u0027, \u0027E\u0027, \u0027M\u0027, \u0027N\u0027, \u0027R\u0027, \u0027W\u0027]\u003c/td\u003e\n      \u003ctd\u003e16.220605\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003cth\u003e4\u003c/th\u003e\n      \u003ctd\u003eSixth Avenue\u003c/td\u003e\n      \u003ctd\u003e40.737335\u003c/td\u003e\n      \u003ctd\u003e-73.996786\u003c/td\u003e\n      \u003ctd\u003e1924\u003c/td\u003e\n      \u003ctd\u003e1\u003c/td\u003e\n      \u003ctd\u003e[\u0027L\u0027]\u003c/td\u003e\n      \u003ctd\u003e16.121318\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885453474_1167659991",
      "id": "paragraph_1580885453474_1167659991",
      "dateCreated": "2020-02-05 14:50:53.474",
      "dateStarted": "2021-07-26 03:16:17.711",
      "dateFinished": "2021-07-26 03:16:18.288",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nscatter \u003d hv.Scatter(station_info, \u0027services\u0027, \u0027ridership\u0027)\nscatter",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:18.310",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv id\u003d\u00271165\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"1c7f1418-6489-4c6a-988e-f36175608189\" data-root-id\u003d\"1165\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"e9e99715-f598-42dc-bebd-e356bd13519a\":{\"defs\":[{\"extends\":null,\"module\":null,\"name\":\"ReactiveHTML1\",\"overrides\":[],\"properties\":[]},{\"extends\":null,\"module\":null,\"name\":\"FlexBox1\",\"overrides\":[],\"properties\":[{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_content\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_items\"},{\"default\":\"row\",\"kind\":null,\"name\":\"flex_direction\"},{\"default\":\"wrap\",\"kind\":null,\"name\":\"flex_wrap\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"justify_content\"}]},{\"extends\":null,\"module\":null,\"name\":\"TemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]},{\"extends\":null,\"module\":null,\"name\":\"MaterialTemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]}],\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"1187\",\"type\":\"PanTool\"},{\"attributes\":{\"end\":16.4,\"reset_end\":16.4,\"reset_start\":-0.40000000000000013,\"start\":-0.40000000000000013,\"tags\":[[[\"services\",\"services\",null]]]},\"id\":\"1167\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1211\",\"type\":\"AllLabels\"},{\"attributes\":{\"children\":[{\"id\":\"1166\"},{\"id\":\"1169\"},{\"id\":\"1233\"}],\"margin\":[0,0,0,0],\"name\":\"Row01558\",\"tags\":[\"embedded\"]},\"id\":\"1165\",\"type\":\"Row\"},{\"attributes\":{\"axis_label\":\"services\",\"formatter\":{\"id\":\"1207\"},\"major_label_policy\":{\"id\":\"1208\"},\"ticker\":{\"id\":\"1179\"}},\"id\":\"1178\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1188\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1176\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1199\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1191\"}},\"id\":\"1189\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1186\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1190\",\"type\":\"ResetTool\"},{\"attributes\":{\"angle\":{\"value\":0.0},\"fill_alpha\":{\"value\":1.0},\"fill_color\":{\"value\":\"#30a2da\"},\"hatch_alpha\":{\"value\":1.0},\"hatch_color\":{\"value\":\"black\"},\"hatch_scale\":{\"value\":12.0},\"hatch_weight\":{\"value\":1.0},\"line_alpha\":{\"value\":1.0},\"line_cap\":{\"value\":\"butt\"},\"line_color\":{\"value\":\"#30a2da\"},\"line_dash\":{\"value\":[]},\"line_dash_offset\":{\"value\":0},\"line_join\":{\"value\":\"bevel\"},\"line_width\":{\"value\":1},\"marker\":{\"value\":\"circle\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1206\",\"type\":\"Scatter\"},{\"attributes\":{\"fill_color\":{\"value\":\"#30a2da\"},\"line_color\":{\"value\":\"#30a2da\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1201\",\"type\":\"Scatter\"},{\"attributes\":{\"data\":{\"ridership\":{\"__ndarray__\":\"O8eA7PXOHkD59xkXDmQXQCCZDp2eFwNAhlW8kXk4MECHakqyDh8wQIWy8PW1BihAxca8jjiUF0ADfSJPkuI+QDasqSwKqUFAXDtREhJpBUBxy0dS0iFDQMpTVtP17C9At7OvPEhnI0BhxhSscTpLQIodjUP9llBAfotOlloPIEAkmdU73Ho0QBpuwOeH4RJAaR1VTRCROUAfuTXptkw3QMK/CBozKR9AEXLe/8d5JEAaMh6lElIwQFhYcD/geSlAsRcK2A5WEkBsJt9sc2M4QLpm8s02nyNAObh0zHnWEEDhRV9BmgknQEOQgxJmyhVAc3/1uG9VKUBoBYasbvXyP4VbPpKSTiJAl631RUJb/T9zf/W4b1UpQLYTJSGR9iRAak/JObHvNkDVdaimJDlBQJRL4xde6QpAP6iLFMpC/T8eMuVDULUFQOoENBE2dCBAQWK7e4BOEkDqBDQRNnQgQNLHfECgs/s/qwfMQ6ZQN0B9WkV/aF5HQFsomZzagSRAQN1AgXeCEUAIkncOZWg1QMMrSZ7rixVA2liJeVbCE0DBAS1dwXb/PwUx0LUvgCFAaAdcV8xYHkCKHY1D/ZZQQP1pozoduCxA91eP+1ZLLEAFMdC1L4AhQOWc2EP76DBA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[60]},\"services\":[1,1,1,6,1,7,4,8,8,2,13,8,2,15,7,4,2,1,3,6,2,2,8,2,3,10,6,4,7,2,2,2,2,2,4,3,13,7,2,3,3,1,1,3,2,8,5,2,2,7,4,4,1,1,5,7,4,7,3,1]},\"selected\":{\"id\":\"1199\"},\"selection_policy\":{\"id\":\"1220\"}},\"id\":\"1198\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1207\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1208\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1174\",\"type\":\"LinearScale\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer01563\",\"sizing_mode\":\"stretch_width\"},\"id\":\"1233\",\"type\":\"Spacer\"},{\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"},\"id\":\"1170\",\"type\":\"Title\"},{\"attributes\":{\"axis\":{\"id\":\"1182\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"1185\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1179\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1178\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1181\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1210\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1183\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"ridership\",\"formatter\":{\"id\":\"1210\"},\"major_label_policy\":{\"id\":\"1211\"},\"ticker\":{\"id\":\"1183\"}},\"id\":\"1182\",\"type\":\"LinearAxis\"},{\"attributes\":{\"data_source\":{\"id\":\"1198\"},\"glyph\":{\"id\":\"1201\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1203\"},\"nonselection_glyph\":{\"id\":\"1202\"},\"selection_glyph\":{\"id\":\"1206\"},\"view\":{\"id\":\"1205\"}},\"id\":\"1204\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1220\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1198\"}},\"id\":\"1205\",\"type\":\"CDSView\"},{\"attributes\":{\"end\":72.8766368,\"reset_end\":72.8766368,\"reset_start\":-5.332508799999999,\"start\":-5.332508799999999,\"tags\":[[[\"ridership\",\"ridership\",null]]]},\"id\":\"1168\",\"type\":\"Range1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#30a2da\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#30a2da\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1203\",\"type\":\"Scatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1191\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer01562\",\"sizing_mode\":\"stretch_width\"},\"id\":\"1166\",\"type\":\"Spacer\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"1186\"},{\"id\":\"1187\"},{\"id\":\"1188\"},{\"id\":\"1189\"},{\"id\":\"1190\"}]},\"id\":\"1192\",\"type\":\"Toolbar\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#30a2da\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#30a2da\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1202\",\"type\":\"Scatter\"},{\"attributes\":{\"below\":[{\"id\":\"1178\"}],\"center\":[{\"id\":\"1181\"},{\"id\":\"1185\"}],\"height\":300,\"left\":[{\"id\":\"1182\"}],\"margin\":[5,5,5,5],\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"min_border_top\":10,\"renderers\":[{\"id\":\"1204\"}],\"sizing_mode\":\"fixed\",\"title\":{\"id\":\"1170\"},\"toolbar\":{\"id\":\"1192\"},\"width\":300,\"x_range\":{\"id\":\"1167\"},\"x_scale\":{\"id\":\"1174\"},\"y_range\":{\"id\":\"1168\"},\"y_scale\":{\"id\":\"1176\"}},\"id\":\"1169\",\"subtype\":\"Figure\",\"type\":\"Plot\"}],\"root_ids\":[\"1165\"]},\"title\":\"Bokeh Application\",\"version\":\"2.3.3\"}};\n    var render_items \u003d [{\"docid\":\"e9e99715-f598-42dc-bebd-e356bd13519a\",\"root_ids\":[\"1165\"],\"roots\":{\"1165\":\"1c7f1418-6489-4c6a-988e-f36175608189\"}}];\n    root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n    embed_document(root);\n  } else {\n    var attempts \u003d 0;\n    var timer \u003d setInterval(function(root) {\n      if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else if (document.readyState \u003d\u003d \"complete\") {\n        attempts++;\n        if (attempts \u003e 200) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 25, root)\n  }\n})(window);\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885519951_-291252209",
      "id": "paragraph_1580885519951_-291252209",
      "dateCreated": "2020-02-05 14:51:59.951",
      "dateStarted": "2021-07-26 03:16:18.347",
      "dateFinished": "2021-07-26 03:16:18.459",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nlayout \u003d scatter + hv.Histogram(np.histogram(station_info[\u0027opened\u0027], bins\u003d24), kdims\u003d[\u0027opened\u0027])\nlayout",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:18.547",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv id\u003d\u00271285\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"bc0c7250-f4b9-41ba-bbec-4a0294ba14eb\" data-root-id\u003d\"1285\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"f6a6473c-920b-4784-a8d1-8f294abca1ae\":{\"defs\":[{\"extends\":null,\"module\":null,\"name\":\"ReactiveHTML1\",\"overrides\":[],\"properties\":[]},{\"extends\":null,\"module\":null,\"name\":\"FlexBox1\",\"overrides\":[],\"properties\":[{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_content\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_items\"},{\"default\":\"row\",\"kind\":null,\"name\":\"flex_direction\"},{\"default\":\"wrap\",\"kind\":null,\"name\":\"flex_wrap\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"justify_content\"}]},{\"extends\":null,\"module\":null,\"name\":\"TemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]},{\"extends\":null,\"module\":null,\"name\":\"MaterialTemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]}],\"roots\":{\"references\":[{\"attributes\":{\"source\":{\"id\":\"1364\"}},\"id\":\"1371\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"1318\"},\"glyph\":{\"id\":\"1321\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1323\"},\"nonselection_glyph\":{\"id\":\"1322\"},\"selection_glyph\":{\"id\":\"1326\"},\"view\":{\"id\":\"1325\"}},\"id\":\"1324\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1340\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1299\",\"type\":\"BasicTicker\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer01640\",\"sizing_mode\":\"stretch_width\"},\"id\":\"1585\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"1374\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis\":{\"id\":\"1298\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1301\",\"type\":\"Grid\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":1.0},\"fill_color\":{\"value\":\"#30a2da\"},\"hatch_alpha\":{\"value\":1.0},\"hatch_color\":{\"value\":\"black\"},\"hatch_scale\":{\"value\":12.0},\"hatch_weight\":{\"value\":1.0},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":1.0},\"line_cap\":{\"value\":\"butt\"},\"line_color\":{\"value\":\"black\"},\"line_dash\":{\"value\":[]},\"line_dash_offset\":{\"value\":0},\"line_join\":{\"value\":\"bevel\"},\"line_width\":{\"value\":1},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"1372\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"1397\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"ridership\",\"formatter\":{\"id\":\"1330\"},\"major_label_policy\":{\"id\":\"1331\"},\"ticker\":{\"id\":\"1303\"}},\"id\":\"1302\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1303\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1373\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"axis\":{\"id\":\"1302\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"1305\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#30a2da\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#30a2da\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1323\",\"type\":\"Scatter\"},{\"attributes\":{\"end\":2019.5,\"reset_end\":2019.5,\"reset_start\":1893.5,\"start\":1893.5,\"tags\":[[[\"opened\",\"opened\",null]]]},\"id\":\"1333\",\"type\":\"Range1d\"},{\"attributes\":{\"end\":23.1,\"reset_end\":23.1,\"reset_start\":0.0,\"tags\":[[[\"Frequency\",\"Frequency\",null]]]},\"id\":\"1334\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1328\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1306\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1377\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1365\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1307\",\"type\":\"PanTool\"},{\"attributes\":{\"children\":[{\"id\":\"1286\"},{\"id\":\"1404\"},{\"id\":\"1585\"}],\"margin\":[0,0,0,0],\"name\":\"Row01635\",\"tags\":[\"embedded\"]},\"id\":\"1285\",\"type\":\"Row\"},{\"attributes\":{\"below\":[{\"id\":\"1344\"}],\"center\":[{\"id\":\"1347\"},{\"id\":\"1351\"}],\"height\":300,\"left\":[{\"id\":\"1348\"}],\"margin\":null,\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"min_border_top\":10,\"renderers\":[{\"id\":\"1370\"}],\"sizing_mode\":\"fixed\",\"title\":{\"id\":\"1336\"},\"toolbar\":{\"id\":\"1358\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1333\"},\"x_scale\":{\"id\":\"1340\"},\"y_range\":{\"id\":\"1334\"},\"y_scale\":{\"id\":\"1342\"}},\"id\":\"1335\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1308\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1311\"}},\"id\":\"1309\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1296\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1386\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1342\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1310\",\"type\":\"ResetTool\"},{\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"},\"id\":\"1336\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"opened\",\"formatter\":{\"id\":\"1373\"},\"major_label_policy\":{\"id\":\"1374\"},\"ticker\":{\"id\":\"1345\"}},\"id\":\"1344\",\"type\":\"LinearAxis\"},{\"attributes\":{\"end\":72.8766368,\"reset_end\":72.8766368,\"reset_start\":-5.332508799999999,\"start\":-5.332508799999999,\"tags\":[[[\"ridership\",\"ridership\",null]]]},\"id\":\"1288\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1294\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1330\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"1352\"},{\"id\":\"1353\"},{\"id\":\"1354\"},{\"id\":\"1355\"},{\"id\":\"1356\"}]},\"id\":\"1358\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis\":{\"id\":\"1348\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"1351\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1345\",\"type\":\"BasicTicker\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer01639\",\"sizing_mode\":\"stretch_width\"},\"id\":\"1286\",\"type\":\"Spacer\"},{\"attributes\":{\"axis_label\":\"services\",\"formatter\":{\"id\":\"1327\"},\"major_label_policy\":{\"id\":\"1328\"},\"ticker\":{\"id\":\"1299\"}},\"id\":\"1298\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1344\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1347\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1349\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Frequency\",\"formatter\":{\"id\":\"1376\"},\"major_label_policy\":{\"id\":\"1377\"},\"ticker\":{\"id\":\"1349\"}},\"id\":\"1348\",\"type\":\"LinearAxis\"},{\"attributes\":{\"end\":16.4,\"reset_end\":16.4,\"reset_start\":-0.40000000000000013,\"start\":-0.40000000000000013,\"tags\":[[[\"services\",\"services\",null]]]},\"id\":\"1287\",\"type\":\"Range1d\"},{\"attributes\":{\"data_source\":{\"id\":\"1364\"},\"glyph\":{\"id\":\"1367\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1369\"},\"nonselection_glyph\":{\"id\":\"1368\"},\"selection_glyph\":{\"id\":\"1372\"},\"view\":{\"id\":\"1371\"}},\"id\":\"1370\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"left\":{\"__ndarray__\":\"AAAAAADAnUAAAAAAgNGdQAAAAAAA451AAAAAAID0nUAAAAAAAAaeQAAAAACAF55AAAAAAAApnkAAAAAAgDqeQAAAAAAATJ5AAAAAAIBdnkAAAAAAAG+eQAAAAACAgJ5AAAAAAACSnkAAAAAAgKOeQAAAAAAAtZ5AAAAAAIDGnkAAAAAAANieQAAAAACA6Z5AAAAAAAD7nkAAAAAAgAyfQAAAAAAAHp9AAAAAAIAvn0AAAAAAAEGfQAAAAACAUp9A\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[24]},\"right\":{\"__ndarray__\":\"AAAAAIDRnUAAAAAAAOOdQAAAAACA9J1AAAAAAAAGnkAAAAAAgBeeQAAAAAAAKZ5AAAAAAIA6nkAAAAAAAEyeQAAAAACAXZ5AAAAAAABvnkAAAAAAgICeQAAAAAAAkp5AAAAAAICjnkAAAAAAALWeQAAAAACAxp5AAAAAAADYnkAAAAAAgOmeQAAAAAAA+55AAAAAAIAMn0AAAAAAAB6fQAAAAACAL59AAAAAAABBn0AAAAAAgFKfQAAAAAAAZJ9A\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[24]},\"top\":[21,0,6,17,3,0,5,4,0,0,0,0,0,0,2,0,0,0,0,1,0,0,0,1]},\"selected\":{\"id\":\"1365\"},\"selection_policy\":{\"id\":\"1397\"}},\"id\":\"1364\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"1306\"},{\"id\":\"1307\"},{\"id\":\"1308\"},{\"id\":\"1309\"},{\"id\":\"1310\"}]},\"id\":\"1312\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1376\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1319\",\"type\":\"Selection\"},{\"attributes\":{\"children\":[{\"id\":\"1403\"},{\"id\":\"1401\"}]},\"id\":\"1404\",\"type\":\"Column\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1311\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"toolbar\":{\"id\":\"1402\"},\"toolbar_location\":\"above\"},\"id\":\"1403\",\"type\":\"ToolbarBox\"},{\"attributes\":{},\"id\":\"1352\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#30a2da\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#30a2da\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1322\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1353\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1318\"}},\"id\":\"1325\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1354\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1298\"}],\"center\":[{\"id\":\"1301\"},{\"id\":\"1305\"}],\"height\":300,\"left\":[{\"id\":\"1302\"}],\"margin\":null,\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"min_border_top\":10,\"renderers\":[{\"id\":\"1324\"}],\"sizing_mode\":\"fixed\",\"title\":{\"id\":\"1290\"},\"toolbar\":{\"id\":\"1312\"},\"toolbar_location\":null,\"width\":300,\"x_range\":{\"id\":\"1287\"},\"x_scale\":{\"id\":\"1294\"},\"y_range\":{\"id\":\"1288\"},\"y_scale\":{\"id\":\"1296\"}},\"id\":\"1289\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1357\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"overlay\":{\"id\":\"1357\"}},\"id\":\"1355\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1356\",\"type\":\"ResetTool\"},{\"attributes\":{\"angle\":{\"value\":0.0},\"fill_alpha\":{\"value\":1.0},\"fill_color\":{\"value\":\"#30a2da\"},\"hatch_alpha\":{\"value\":1.0},\"hatch_color\":{\"value\":\"black\"},\"hatch_scale\":{\"value\":12.0},\"hatch_weight\":{\"value\":1.0},\"line_alpha\":{\"value\":1.0},\"line_cap\":{\"value\":\"butt\"},\"line_color\":{\"value\":\"#30a2da\"},\"line_dash\":{\"value\":[]},\"line_dash_offset\":{\"value\":0},\"line_join\":{\"value\":\"bevel\"},\"line_width\":{\"value\":1},\"marker\":{\"value\":\"circle\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1326\",\"type\":\"Scatter\"},{\"attributes\":{\"toolbars\":[{\"id\":\"1312\"},{\"id\":\"1358\"}],\"tools\":[{\"id\":\"1306\"},{\"id\":\"1307\"},{\"id\":\"1308\"},{\"id\":\"1309\"},{\"id\":\"1310\"},{\"id\":\"1352\"},{\"id\":\"1353\"},{\"id\":\"1354\"},{\"id\":\"1355\"},{\"id\":\"1356\"}]},\"id\":\"1402\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"fill_color\":{\"value\":\"#30a2da\"},\"line_color\":{\"value\":\"#30a2da\"},\"size\":{\"value\":2.449489742783178},\"x\":{\"field\":\"services\"},\"y\":{\"field\":\"ridership\"}},\"id\":\"1321\",\"type\":\"Scatter\"},{\"attributes\":{},\"id\":\"1327\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#30a2da\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.1},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"1368\",\"type\":\"Quad\"},{\"attributes\":{},\"id\":\"1331\",\"type\":\"AllLabels\"},{\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"},\"id\":\"1290\",\"type\":\"Title\"},{\"attributes\":{\"data\":{\"ridership\":{\"__ndarray__\":\"O8eA7PXOHkD59xkXDmQXQCCZDp2eFwNAhlW8kXk4MECHakqyDh8wQIWy8PW1BihAxca8jjiUF0ADfSJPkuI+QDasqSwKqUFAXDtREhJpBUBxy0dS0iFDQMpTVtP17C9At7OvPEhnI0BhxhSscTpLQIodjUP9llBAfotOlloPIEAkmdU73Ho0QBpuwOeH4RJAaR1VTRCROUAfuTXptkw3QMK/CBozKR9AEXLe/8d5JEAaMh6lElIwQFhYcD/geSlAsRcK2A5WEkBsJt9sc2M4QLpm8s02nyNAObh0zHnWEEDhRV9BmgknQEOQgxJmyhVAc3/1uG9VKUBoBYasbvXyP4VbPpKSTiJAl631RUJb/T9zf/W4b1UpQLYTJSGR9iRAak/JObHvNkDVdaimJDlBQJRL4xde6QpAP6iLFMpC/T8eMuVDULUFQOoENBE2dCBAQWK7e4BOEkDqBDQRNnQgQNLHfECgs/s/qwfMQ6ZQN0B9WkV/aF5HQFsomZzagSRAQN1AgXeCEUAIkncOZWg1QMMrSZ7rixVA2liJeVbCE0DBAS1dwXb/PwUx0LUvgCFAaAdcV8xYHkCKHY1D/ZZQQP1pozoduCxA91eP+1ZLLEAFMdC1L4AhQOWc2EP76DBA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[60]},\"services\":[1,1,1,6,1,7,4,8,8,2,13,8,2,15,7,4,2,1,3,6,2,2,8,2,3,10,6,4,7,2,2,2,2,2,4,3,13,7,2,3,3,1,1,3,2,8,5,2,2,7,4,4,1,1,5,7,4,7,3,1]},\"selected\":{\"id\":\"1319\"},\"selection_policy\":{\"id\":\"1386\"}},\"id\":\"1318\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"children\":[[{\"id\":\"1289\"},0,0],[{\"id\":\"1335\"},0,1]]},\"id\":\"1401\",\"type\":\"GridBox\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#30a2da\"},\"left\":{\"field\":\"left\"},\"line_alpha\":{\"value\":0.2},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"1369\",\"type\":\"Quad\"},{\"attributes\":{\"bottom\":{\"value\":0},\"fill_color\":{\"value\":\"#30a2da\"},\"left\":{\"field\":\"left\"},\"right\":{\"field\":\"right\"},\"top\":{\"field\":\"top\"}},\"id\":\"1367\",\"type\":\"Quad\"}],\"root_ids\":[\"1285\"]},\"title\":\"Bokeh Application\",\"version\":\"2.3.3\"}};\n    var render_items \u003d [{\"docid\":\"f6a6473c-920b-4784-a8d1-8f294abca1ae\",\"root_ids\":[\"1285\"],\"roots\":{\"1285\":\"bc0c7250-f4b9-41ba-bbec-4a0294ba14eb\"}}];\n    root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n    embed_document(root);\n  } else {\n    var attempts \u003d 0;\n    var timer \u003d setInterval(function(root) {\n      if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else if (document.readyState \u003d\u003d \"complete\") {\n        attempts++;\n        if (attempts \u003e 200) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 25, root)\n  }\n})(window);\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885548751_1272982082",
      "id": "paragraph_1580885548751_1272982082",
      "dateCreated": "2020-02-05 14:52:28.751",
      "dateStarted": "2021-07-26 03:16:18.567",
      "dateFinished": "2021-07-26 03:16:19.028",
      "status": "FINISHED"
    },
    {
      "title": "HvPlot",
      "text": "%md\n\n# HvPlot\n\n[HvPlot](https://hvplot.holoviz.org/) is a high-level plotting API for the PyData ecosystem built on HoloViews.\n\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:19.067",
      "progress": 0,
      "config": {
        "colWidth": 12.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "text",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/text",
        "title": false,
        "editorHide": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eHvPlot\u003c/h1\u003e\n\u003cp\u003e\u003ca href\u003d\"https://hvplot.holoviz.org/\"\u003eHvPlot\u003c/a\u003e is a high-level plotting API for the PyData ecosystem built on HoloViews.\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580884482945_-1037962389",
      "id": "20180119-091845_1603850480",
      "dateCreated": "2020-02-05 14:34:42.945",
      "dateStarted": "2021-07-26 03:16:19.089",
      "dateFinished": "2021-07-26 03:16:19.094",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nfrom bokeh.io import output_notebook\noutput_notebook()\n\nimport pandas as pd, numpy as np\n\n\nidx \u003d pd.date_range(\u00271/1/2000\u0027, periods\u003d1000)\ndf  \u003d pd.DataFrame(np.random.randn(1000, 4), index\u003didx, columns\u003dlist(\u0027ABCD\u0027)).cumsum()\n\nimport hvplot.pandas\ndf.hvplot()\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:19.188",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\n    \u003cdiv class\u003d\"bk-root\"\u003e\n        \u003ca href\u003d\"https://bokeh.org\" target\u003d\"_blank\" class\u003d\"bk-logo bk-logo-small bk-logo-notebook\"\u003e\u003c/a\u003e\n        \u003cspan id\u003d\"1687\"\u003eLoading BokehJS ...\u003c/span\u003e\n    \u003c/div\u003e\n"
          },
          {
            "type": "HTML",
            "data": "\u003cscript\u003e \n(function(root) {\n  function now() {\n    return new Date();\n  }\n\n  var force \u003d true;\n\n  if (typeof root._bokeh_onload_callbacks \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_onload_callbacks \u003d [];\n    root._bokeh_is_loading \u003d undefined;\n  }\n\n  var JS_MIME_TYPE \u003d \u0027application/javascript\u0027;\n  var HTML_MIME_TYPE \u003d \u0027text/html\u0027;\n  var EXEC_MIME_TYPE \u003d \u0027application/vnd.bokehjs_exec.v0+json\u0027;\n  var CLASS_NAME \u003d \u0027output_bokeh rendered_html\u0027;\n\n  /**\n   * Render data to the DOM node\n   */\n  function render(props, node) {\n    var script \u003d document.createElement(\"script\");\n    node.appendChild(script);\n  }\n\n  /**\n   * Handle when an output is cleared or removed\n   */\n  function handleClearOutput(event, handle) {\n    var cell \u003d handle.cell;\n\n    var id \u003d cell.output_area._bokeh_element_id;\n    var server_id \u003d cell.output_area._bokeh_server_id;\n    // Clean up Bokeh references\n    if (id !\u003d null \u0026\u0026 id in Bokeh.index) {\n      Bokeh.index[id].model.document.clear();\n      delete Bokeh.index[id];\n    }\n\n    if (server_id !\u003d\u003d undefined) {\n      // Clean up Bokeh references\n      var cmd \u003d \"from bokeh.io.state import curstate; print(curstate().uuid_to_server[\u0027\" + server_id + \"\u0027].get_sessions()[0].document.roots[0]._id)\";\n      cell.notebook.kernel.execute(cmd, {\n        iopub: {\n          output: function(msg) {\n            var id \u003d msg.content.text.trim();\n            if (id in Bokeh.index) {\n              Bokeh.index[id].model.document.clear();\n              delete Bokeh.index[id];\n            }\n          }\n        }\n      });\n      // Destroy server and session\n      var cmd \u003d \"import bokeh.io.notebook as ion; ion.destroy_server(\u0027\" + server_id + \"\u0027)\";\n      cell.notebook.kernel.execute(cmd);\n    }\n  }\n\n  /**\n   * Handle when a new output is added\n   */\n  function handleAddOutput(event, handle) {\n    var output_area \u003d handle.output_area;\n    var output \u003d handle.output;\n\n    // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n    if ((output.output_type !\u003d \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n      return\n    }\n\n    var toinsert \u003d output_area.element.find(\".\" + CLASS_NAME.split(\u0027 \u0027)[0]);\n\n    if (output.metadata[EXEC_MIME_TYPE][\"id\"] !\u003d\u003d undefined) {\n      toinsert[toinsert.length - 1].firstChild.textContent \u003d output.data[JS_MIME_TYPE];\n      // store reference to embed id on output_area\n      output_area._bokeh_element_id \u003d output.metadata[EXEC_MIME_TYPE][\"id\"];\n    }\n    if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !\u003d\u003d undefined) {\n      var bk_div \u003d document.createElement(\"div\");\n      bk_div.innerHTML \u003d output.data[HTML_MIME_TYPE];\n      var script_attrs \u003d bk_div.children[0].attributes;\n      for (var i \u003d 0; i \u003c script_attrs.length; i++) {\n        toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n        toinsert[toinsert.length - 1].firstChild.textContent \u003d bk_div.children[0].textContent\n      }\n      // store reference to server id on output_area\n      output_area._bokeh_server_id \u003d output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n    }\n  }\n\n  function register_renderer(events, OutputArea) {\n\n    function append_mime(data, metadata, element) {\n      // create a DOM node to render to\n      var toinsert \u003d this.create_output_subarea(\n        metadata,\n        CLASS_NAME,\n        EXEC_MIME_TYPE\n      );\n      this.keyboard_manager.register_events(toinsert);\n      // Render to node\n      var props \u003d {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n      render(props, toinsert[toinsert.length - 1]);\n      element.append(toinsert);\n      return toinsert\n    }\n\n    /* Handle when an output is cleared or removed */\n    events.on(\u0027clear_output.CodeCell\u0027, handleClearOutput);\n    events.on(\u0027delete.Cell\u0027, handleClearOutput);\n\n    /* Handle when a new output is added */\n    events.on(\u0027output_added.OutputArea\u0027, handleAddOutput);\n\n    /**\n     * Register the mime type and append_mime function with output_area\n     */\n    OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n      /* Is output safe? */\n      safe: true,\n      /* Index of renderer in `output_area.display_order` */\n      index: 0\n    });\n  }\n\n  // register the mime type if in Jupyter Notebook environment and previously unregistered\n  if (root.Jupyter !\u003d\u003d undefined) {\n    var events \u003d require(\u0027base/js/events\u0027);\n    var OutputArea \u003d require(\u0027notebook/js/outputarea\u0027).OutputArea;\n\n    if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) \u003d\u003d -1) {\n      register_renderer(events, OutputArea);\n    }\n  }\n\n  \n  if (typeof (root._bokeh_timeout) \u003d\u003d\u003d \"undefined\" || force \u003d\u003d\u003d true) {\n    root._bokeh_timeout \u003d Date.now() + 5000;\n    root._bokeh_failed_load \u003d false;\n  }\n\n  var NB_LOAD_WARNING \u003d {\u0027data\u0027: {\u0027text/html\u0027:\n     \"\u003cdiv style\u003d\u0027background-color: #fdd\u0027\u003e\\n\"+\n     \"\u003cp\u003e\\n\"+\n     \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n     \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n     \"\u003c/p\u003e\\n\"+\n     \"\u003cul\u003e\\n\"+\n     \"\u003cli\u003ere-rerun `output_notebook()` to attempt to load from CDN again, or\u003c/li\u003e\\n\"+\n     \"\u003cli\u003euse INLINE resources instead, as so:\u003c/li\u003e\\n\"+\n     \"\u003c/ul\u003e\\n\"+\n     \"\u003ccode\u003e\\n\"+\n     \"from bokeh.resources import INLINE\\n\"+\n     \"output_notebook(resources\u003dINLINE)\\n\"+\n     \"\u003c/code\u003e\\n\"+\n     \"\u003c/div\u003e\"}};\n\n  function display_loaded() {\n    var el \u003d document.getElementById(\"1687\");\n    if (el !\u003d null) {\n      el.textContent \u003d \"BokehJS is loading...\";\n    }\n    if (root.Bokeh !\u003d\u003d undefined) {\n      if (el !\u003d null) {\n        el.textContent \u003d \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n      }\n    } else if (Date.now() \u003c root._bokeh_timeout) {\n      setTimeout(display_loaded, 100)\n    }\n  }\n\n\n  function run_callbacks() {\n    try {\n      root._bokeh_onload_callbacks.forEach(function(callback) {\n        if (callback !\u003d null)\n          callback();\n      });\n    } finally {\n      delete root._bokeh_onload_callbacks\n    }\n    console.debug(\"Bokeh: all callbacks have finished\");\n  }\n\n  function load_libs(css_urls, js_urls, callback) {\n    if (css_urls \u003d\u003d null) css_urls \u003d [];\n    if (js_urls \u003d\u003d null) js_urls \u003d [];\n\n    root._bokeh_onload_callbacks.push(callback);\n    if (root._bokeh_is_loading \u003e 0) {\n      console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n      return null;\n    }\n    if (js_urls \u003d\u003d null || js_urls.length \u003d\u003d\u003d 0) {\n      run_callbacks();\n      return null;\n    }\n    console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n    root._bokeh_is_loading \u003d css_urls.length + js_urls.length;\n\n    function on_load() {\n      root._bokeh_is_loading--;\n      if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n        console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n        run_callbacks()\n      }\n    }\n\n    function on_error(url) {\n      console.error(\"failed to load \" + url);\n    }\n\n    for (let i \u003d 0; i \u003c css_urls.length; i++) {\n      const url \u003d css_urls[i];\n      const element \u003d document.createElement(\"link\");\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error.bind(null, url);\n      element.rel \u003d \"stylesheet\";\n      element.type \u003d \"text/css\";\n      element.href \u003d url;\n      console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n      document.body.appendChild(element);\n    }\n\n    const hashes \u003d {\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.3.min.js\": \"dM3QQsP+wXdHg42wTqW85BjZQdLNNIXqlPw/BgKoExPmTG7ZLML4EGqLMfqHT6ON\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.3.min.js\": \"8x57I4YuIfu8XyZfFo0XVr2WAT8EK4rh/uDe3wF7YuW2FNUSNEpJbsPaB1nJ2fz2\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.3.min.js\": \"3QTqdz9LyAm2i0sG5XTePsHec3UHWwVsrOL68SYRoAXsafvfAyqtQ+h440+qIBhS\"};\n\n    for (let i \u003d 0; i \u003c js_urls.length; i++) {\n      const url \u003d js_urls[i];\n      const element \u003d document.createElement(\u0027script\u0027);\n      element.onload \u003d on_load;\n      element.onerror \u003d on_error.bind(null, url);\n      element.async \u003d false;\n      element.src \u003d url;\n      if (url in hashes) {\n        element.crossOrigin \u003d \"anonymous\";\n        element.integrity \u003d \"sha384-\" + hashes[url];\n      }\n      console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n      document.head.appendChild(element);\n    }\n  };\n\n  function inject_raw_css(css) {\n    const element \u003d document.createElement(\"style\");\n    element.appendChild(document.createTextNode(css));\n    document.body.appendChild(element);\n  }\n\n  \n  var js_urls \u003d [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.3.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.3.3.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.3.3.min.js\", \"https://unpkg.com/@holoviz/panel@0.12.0/dist/panel.min.js\"];\n  var css_urls \u003d [];\n  \n\n  var inline_js \u003d [\n    function(Bokeh) {\n      Bokeh.set_log_level(\"info\");\n    },\n    function(Bokeh) {\n    \n    \n    }\n  ];\n\n  function run_inline_js() {\n    \n    if (root.Bokeh !\u003d\u003d undefined || force \u003d\u003d\u003d true) {\n      \n    for (var i \u003d 0; i \u003c inline_js.length; i++) {\n      inline_js[i].call(root, root.Bokeh);\n    }\n    if (force \u003d\u003d\u003d true) {\n        display_loaded();\n      }} else if (Date.now() \u003c root._bokeh_timeout) {\n      setTimeout(run_inline_js, 100);\n    } else if (!root._bokeh_failed_load) {\n      console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n      root._bokeh_failed_load \u003d true;\n    } else if (force !\u003d\u003d true) {\n      var cell \u003d $(document.getElementById(\"1687\")).parents(\u0027.cell\u0027).data().cell;\n      cell.output_area.append_execute_result(NB_LOAD_WARNING)\n    }\n\n  }\n\n  if (root._bokeh_is_loading \u003d\u003d\u003d 0) {\n    console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n    run_inline_js();\n  } else {\n    load_libs(css_urls, js_urls, function() {\n      console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n      run_inline_js();\n    });\n  }\n}(window)); \u003c/script\u003e\n\n"
          },
          {
            "type": "HTML",
            "data": "\u003cdiv id\u003d\u00271688\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"ce1fb142-9429-4d32-9859-83736fd24202\" data-root-id\u003d\"1688\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"edeea07d-9404-4080-91b6-a4220aaeb419\":{\"defs\":[{\"extends\":null,\"module\":null,\"name\":\"ReactiveHTML1\",\"overrides\":[],\"properties\":[]},{\"extends\":null,\"module\":null,\"name\":\"FlexBox1\",\"overrides\":[],\"properties\":[{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_content\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_items\"},{\"default\":\"row\",\"kind\":null,\"name\":\"flex_direction\"},{\"default\":\"wrap\",\"kind\":null,\"name\":\"flex_wrap\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"justify_content\"}]},{\"extends\":null,\"module\":null,\"name\":\"TemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]},{\"extends\":null,\"module\":null,\"name\":\"MaterialTemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]}],\"roots\":{\"references\":[{\"attributes\":{\"data_source\":{\"id\":\"1732\"},\"glyph\":{\"id\":\"1735\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1737\"},\"nonselection_glyph\":{\"id\":\"1736\"},\"selection_glyph\":{\"id\":\"1764\"},\"view\":{\"id\":\"1739\"}},\"id\":\"1738\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1818\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"source\":{\"id\":\"1732\"}},\"id\":\"1739\",\"type\":\"CDSView\"},{\"attributes\":{\"num_minor_ticks\":5,\"tickers\":[{\"id\":\"1750\"},{\"id\":\"1751\"},{\"id\":\"1752\"},{\"id\":\"1753\"},{\"id\":\"1754\"},{\"id\":\"1755\"},{\"id\":\"1756\"},{\"id\":\"1757\"},{\"id\":\"1758\"},{\"id\":\"1759\"},{\"id\":\"1760\"},{\"id\":\"1761\"}]},\"id\":\"1706\",\"type\":\"DatetimeTicker\"},{\"attributes\":{\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1764\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1701\",\"type\":\"LinearScale\"},{\"attributes\":{\"label\":{\"value\":\"C\"},\"renderers\":[{\"id\":\"1805\"}]},\"id\":\"1833\",\"type\":\"LegendItem\"},{\"attributes\":{\"below\":[{\"id\":\"1705\"}],\"center\":[{\"id\":\"1708\"},{\"id\":\"1712\"}],\"height\":300,\"left\":[{\"id\":\"1709\"}],\"margin\":[5,5,5,5],\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"min_border_top\":10,\"renderers\":[{\"id\":\"1738\"},{\"id\":\"1771\"},{\"id\":\"1805\"},{\"id\":\"1841\"}],\"right\":[{\"id\":\"1762\"}],\"sizing_mode\":\"fixed\",\"title\":{\"id\":\"1697\"},\"toolbar\":{\"id\":\"1719\"},\"width\":700,\"x_range\":{\"id\":\"1690\"},\"x_scale\":{\"id\":\"1701\"},\"y_range\":{\"id\":\"1691\"},\"y_scale\":{\"id\":\"1703\"}},\"id\":\"1696\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"source\":{\"id\":\"1835\"}},\"id\":\"1842\",\"type\":\"CDSView\"},{\"attributes\":{\"click_policy\":\"mute\",\"items\":[{\"id\":\"1763\"},{\"id\":\"1797\"},{\"id\":\"1833\"},{\"id\":\"1871\"}],\"location\":[0,0],\"title\":\"Variable\"},\"id\":\"1762\",\"type\":\"Legend\"},{\"attributes\":{\"data\":{\"Variable\":[\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\",\"A\"],\"index\":{\"__ndarray__\":\"AACA9VmNa0IAAADB/o1rQgAAgIyjjmtCAAAAWEiPa0IAAIAj7Y9rQgAAAO+RkGtCAACAujaRa0IAAACG25FrQgAAgFGAkmtCAAAAHSWTa0IAAIDoyZNrQgAAALRulGtCAACAfxOVa0IAAABLuJVrQgAAgBZdlmtCAAAA4gGXa0IAAICtppdrQgAAAHlLmGtCAACARPCYa0IAAAAQlZlrQgAAgNs5mmtCAAAAp96aa0IAAIByg5trQgAAAD4onGtCAACACc2ca0IAAADVcZ1rQgAAgKAWnmtCAAAAbLuea0IAAIA3YJ9rQgAAAAMFoGtCAACAzqmga0IAAACaTqFrQgAAgGXzoWtCAAAAMZiia0IAAID8PKNrQgAAAMjho2tCAACAk4aka0IAAABfK6VrQgAAgCrQpWtCAAAA9nSma0IAAIDBGadrQgAAAI2+p2tCAACAWGOoa0IAAAAkCKlrQgAAgO+sqWtCAAAAu1Gqa0IAAICG9qprQgAAAFKbq2tCAACAHUCsa0IAAADp5KxrQgAAgLSJrWtCAAAAgC6ua0IAAIBL065rQgAAABd4r2tCAACA4hywa0IAAACuwbBrQgAAgHlmsWtCAAAARQuya0IAAIAQsLJrQgAAANxUs2tCAACAp/mza0IAAABznrRrQgAAgD5DtWtCAAAACui1a0IAAIDVjLZrQgAAAKExt2tCAACAbNa3a0IAAAA4e7hrQgAAgAMguWtCAAAAz8S5a0IAAICaabprQgAAAGYOu2tCAACAMbO7a0IAAAD9V7xrQgAAgMj8vGtCAAAAlKG9a0IAAIBfRr5rQgAAACvrvmtCAACA9o+/a0IAAADCNMBrQgAAgI3ZwGtCAAAAWX7Ba0IAAIAkI8JrQgAAAPDHwmtCAACAu2zDa0IAAACHEcRrQgAAgFK2xGtCAAAAHlvFa0IAAIDp/8VrQgAAALWkxmtCAACAgEnHa0IAAABM7sdrQgAAgBeTyGtCAAAA4zfJa0IAAICu3MlrQgAAAHqBymtCAACARSbLa0IAAAARy8trQgAAgNxvzGtCAAAAqBTNa0IAAIBzuc1rQgAAAD9ezmtCAACACgPPa0IAAADWp89rQgAAgKFM0GtCAAAAbfHQa0IAAIA4ltFrQgAAAAQ70mtCAACAz9/Sa0IAAACbhNNrQgAAgGYp1GtCAAAAMs7Ua0IAAID9ctVrQgAAAMkX1mtCAACAlLzWa0IAAABgYddrQgAAgCsG2GtCAAAA96rYa0IAAIDCT9lrQgAAAI702WtCAACAWZnaa0IAAAAlPttrQgAAgPDi22tCAAAAvIfca0IAAICHLN1rQgAAAFPR3WtCAACAHnbea0IAAADqGt9rQgAAgLW/32tCAAAAgWTga0IAAIBMCeFrQgAAABiu4WtCAACA41Lia0IAAACv9+JrQgAAgHqc42tCAAAARkHka0IAAIAR5uRrQgAAAN2K5WtCAACAqC/ma0IAAAB01OZrQgAAgD9552tCAAAACx7oa0IAAIDWwuhrQgAAAKJn6WtCAACAbQzqa0IAAAA5seprQgAAgARW62tCAAAA0Prra0IAAICbn+xrQgAAAGdE7WtCAACAMunta0IAAAD+je5rQgAAgMky72tCAAAAldfva0IAAIBgfPBrQgAAACwh8WtCAACA98Xxa0IAAADDavJrQgAAgI4P82tCAAAAWrTza0IAAIAlWfRrQgAAAPH99GtCAACAvKL1a0IAAACIR/ZrQgAAgFPs9mtCAAAAH5H3a0IAAIDqNfhrQgAAALba+GtCAACAgX/5a0IAAABNJPprQgAAgBjJ+mtCAAAA5G37a0IAAICvEvxrQgAAAHu3/GtCAACARlz9a0IAAAASAf5rQgAAgN2l/mtCAAAAqUr/a0IAAIB07/9rQgAAAECUAGxCAACACzkBbEIAAADX3QFsQgAAgKKCAmxCAAAAbicDbEIAAIA5zANsQgAAAAVxBGxCAACA0BUFbEIAAACcugVsQgAAgGdfBmxCAAAAMwQHbEIAAID+qAdsQgAAAMpNCGxCAACAlfIIbEIAAABhlwlsQgAAgCw8CmxCAAAA+OAKbEIAAIDDhQtsQgAAAI8qDGxCAACAWs8MbEIAAAAmdA1sQgAAgPEYDmxCAAAAvb0ObEIAAICIYg9sQgAAAFQHEGxCAACAH6wQbEIAAADrUBFsQgAAgLb1EWxCAAAAgpoSbEIAAIBNPxNsQgAAABnkE2xCAACA5IgUbEIAAACwLRVsQgAAgHvSFWxCAAAAR3cWbEIAAIASHBdsQgAAAN7AF2xCAACAqWUYbEIAAAB1ChlsQgAAgECvGWxCAAAADFQabEIAAIDX+BpsQgAAAKOdG2xCAACAbkIcbEIAAAA65xxsQgAAgAWMHWxCAAAA0TAebEIAAICc1R5sQgAAAGh6H2xCAACAMx8gbEIAAAD/wyBsQgAAgMpoIWxCAAAAlg0ibEIAAIBhsiJsQgAAAC1XI2xCAACA+PsjbEIAAADEoCRsQgAAgI9FJWxCAAAAW+olbEIAAIAmjyZsQgAAAPIzJ2xCAACAvdgnbEIAAACJfShsQgAAgFQiKWxCAAAAIMcpbEIAAIDraypsQgAAALcQK2xCAACAgrUrbEIAAABOWixsQgAAgBn/LGxCAAAA5aMtbEIAAICwSC5sQgAAAHztLmxCAACAR5IvbEIAAAATNzBsQgAAgN7bMGxCAAAAqoAxbEIAAIB1JTJsQgAAAEHKMmxCAACADG8zbEIAAADYEzRsQgAAgKO4NGxCAAAAb101bEIAAIA6AjZsQgAAAAanNmxCAACA0Us3bEIAAACd8DdsQgAAgGiVOGxCAAAANDo5bEIAAID/3jlsQgAAAMuDOmxCAACAlig7bEIAAABizTtsQgAAgC1yPGxCAAAA+RY9bEIAAIDEuz1sQgAAAJBgPmxCAACAWwU/bEIAAAAnqj9sQgAAgPJOQGxCAAAAvvNAbEIAAICJmEFsQgAAAFU9QmxCAACAIOJCbEIAAADshkNsQgAAgLcrRGxCAAAAg9BEbEIAAIBOdUVsQgAAABoaRmxCAACA5b5GbEIAAACxY0dsQgAAgHwISGxCAAAASK1IbEIAAIATUklsQgAAAN/2SWxCAACAqptKbEIAAAB2QEtsQgAAgEHlS2xCAAAADYpMbEIAAIDYLk1sQgAAAKTTTWxCAACAb3hObEIAAAA7HU9sQgAAgAbCT2xCAAAA0mZQbEIAAICdC1FsQgAAAGmwUWxCAACANFVSbEIAAAAA+lJsQgAAgMueU2xCAAAAl0NUbEIAAIBi6FRsQgAAAC6NVWxCAACA+TFWbEIAAADF1lZsQgAAgJB7V2xCAAAAXCBYbEIAAIAnxVhsQgAAAPNpWWxCAACAvg5abEIAAACKs1psQgAAgFVYW2xCAAAAIf1bbEIAAIDsoVxsQgAAALhGXWxCAACAg+tdbEIAAABPkF5sQgAAgBo1X2xCAAAA5tlfbEIAAICxfmBsQgAAAH0jYWxCAACASMhhbEIAAAAUbWJsQgAAgN8RY2xCAAAAq7ZjbEIAAIB2W2RsQgAAAEIAZWxCAACADaVlbEIAAADZSWZsQgAAgKTuZmxCAAAAcJNnbEIAAIA7OGhsQgAAAAfdaGxCAACA0oFpbEIAAACeJmpsQgAAgGnLamxCAAAANXBrbEIAAIAAFWxsQgAAAMy5bGxCAACAl15tbEIAAABjA25sQgAAgC6obmxCAAAA+kxvbEIAAIDF8W9sQgAAAJGWcGxCAACAXDtxbEIAAAAo4HFsQgAAgPOEcmxCAAAAvylzbEIAAICKznNsQgAAAFZzdGxCAACAIRh1bEIAAADtvHVsQgAAgLhhdmxCAAAAhAZ3bEIAAIBPq3dsQgAAABtQeGxCAACA5vR4bEIAAACymXlsQgAAgH0+emxCAAAASeN6bEIAAIAUiHtsQgAAAOAsfGxCAACAq9F8bEIAAAB3dn1sQgAAgEIbfmxCAAAADsB+bEIAAIDZZH9sQgAAAKUJgGxCAACAcK6AbEIAAAA8U4FsQgAAgAf4gWxCAAAA05yCbEIAAICeQYNsQgAAAGrmg2xCAACANYuEbEIAAAABMIVsQgAAgMzUhWxCAAAAmHmGbEIAAIBjHodsQgAAAC/Dh2xCAACA+meIbEIAAADGDIlsQgAAgJGxiWxCAAAAXVaKbEIAAIAo+4psQgAAAPSfi2xCAACAv0SMbEIAAACL6YxsQgAAgFaOjWxCAAAAIjOObEIAAIDt145sQgAAALl8j2xCAACAhCGQbEIAAABQxpBsQgAAgBtrkWxCAAAA5w+SbEIAAICytJJsQgAAAH5Zk2xCAACASf6TbEIAAAAVo5RsQgAAgOBHlWxCAAAArOyVbEIAAIB3kZZsQgAAAEM2l2xCAACADtuXbEIAAADaf5hsQgAAgKUkmWxCAAAAccmZbEIAAIA8bppsQgAAAAgTm2xCAACA07ebbEIAAACfXJxsQgAAgGoBnWxCAAAANqadbEIAAIABS55sQgAAAM3vnmxCAACAmJSfbEIAAABkOaBsQgAAgC/eoGxCAAAA+4KhbEIAAIDGJ6JsQgAAAJLMomxCAACAXXGjbEIAAAApFqRsQgAAgPS6pGxCAAAAwF+lbEIAAICLBKZsQgAAAFeppmxCAACAIk6nbEIAAADu8qdsQgAAgLmXqGxCAAAAhTypbEIAAIBQ4alsQgAAAByGqmxCAACA5yqrbEIAAACzz6tsQgAAgH50rGxCAAAAShmtbEIAAIAVvq1sQgAAAOFirmxCAACArAevbEIAAAB4rK9sQgAAgENRsGxCAAAAD/awbEIAAIDamrFsQgAAAKY/smxCAACAceSybEIAAAA9ibNsQgAAgAgutGxCAAAA1NK0bEIAAICfd7VsQgAAAGsctmxCAACANsG2bEIAAAACZrdsQgAAgM0KuGxCAAAAma+4bEIAAIBkVLlsQgAAADD5uWxCAACA+526bEIAAADHQrtsQgAAgJLnu2xCAAAAXoy8bEIAAIApMb1sQgAAAPXVvWxCAACAwHq+bEIAAACMH79sQgAAgFfEv2xCAAAAI2nAbEIAAIDuDcFsQgAAALqywWxCAACAhVfCbEIAAABR/MJsQgAAgByhw2xCAAAA6EXEbEIAAICz6sRsQgAAAH+PxWxCAACASjTGbEIAAAAW2cZsQgAAgOF9x2xCAAAArSLIbEIAAIB4x8hsQgAAAERsyWxCAACADxHKbEIAAADbtcpsQgAAgKZay2xCAAAAcv/LbEIAAIA9pMxsQgAAAAlJzWxCAACA1O3NbEIAAACgks5sQgAAgGs3z2xCAAAAN9zPbEIAAIACgdBsQgAAAM4l0WxCAACAmcrRbEIAAABlb9JsQgAAgDAU02xCAAAA/LjTbEIAAIDHXdRsQgAAAJMC1WxCAACAXqfVbEIAAAAqTNZsQgAAgPXw1mxCAAAAwZXXbEIAAICMOthsQgAAAFjf2GxCAACAI4TZbEIAAADvKNpsQgAAgLrN2mxCAAAAhnLbbEIAAIBRF9xsQgAAAB283GxCAACA6GDdbEIAAAC0Bd5sQgAAgH+q3mxCAAAAS0/fbEIAAIAW9N9sQgAAAOKY4GxCAACArT3hbEIAAAB54uFsQgAAgESH4mxCAAAAECzjbEIAAIDb0ONsQgAAAKd15GxCAACAchrlbEIAAAA+v+VsQgAAgAlk5mxCAAAA1QjnbEIAAICgredsQgAAAGxS6GxCAACAN/fobEIAAAADnOlsQgAAgM5A6mxCAAAAmuXqbEIAAIBliutsQgAAADEv7GxCAACA/NPsbEIAAADIeO1sQgAAgJMd7mxCAAAAX8LubEIAAIAqZ+9sQgAAAPYL8GxCAACAwbDwbEIAAACNVfFsQgAAgFj68WxCAAAAJJ/ybEIAAIDvQ/NsQgAAALvo82xCAACAho30bEIAAABSMvVsQgAAgB3X9WxCAAAA6Xv2bEIAAIC0IPdsQgAAAIDF92xCAACAS2r4bEIAAAAXD/lsQgAAgOKz+WxCAAAArlj6bEIAAIB5/fpsQgAAAEWi+2xCAACAEEf8bEIAAADc6/xsQgAAgKeQ/WxCAAAAczX+bEIAAIA+2v5sQgAAAAp//2xCAACA1SMAbUIAAAChyABtQgAAgGxtAW1CAAAAOBICbUIAAIADtwJtQgAAAM9bA21CAACAmgAEbUIAAABmpQRtQgAAgDFKBW1CAAAA/e4FbUIAAIDIkwZtQgAAAJQ4B21CAACAX90HbUIAAAArgghtQgAAgPYmCW1CAAAAwssJbUIAAICNcAptQgAAAFkVC21CAACAJLoLbUIAAADwXgxtQgAAgLsDDW1CAAAAh6gNbUIAAIBSTQ5tQgAAAB7yDm1CAACA6ZYPbUIAAAC1OxBtQgAAgIDgEG1CAAAATIURbUIAAIAXKhJtQgAAAOPOEm1CAACArnMTbUIAAAB6GBRtQgAAgEW9FG1CAAAAEWIVbUIAAIDcBhZtQgAAAKirFm1CAACAc1AXbUIAAAA/9RdtQgAAgAqaGG1CAAAA1j4ZbUIAAICh4xltQgAAAG2IGm1CAACAOC0bbUIAAAAE0httQgAAgM92HG1CAAAAmxsdbUIAAIBmwB1tQgAAADJlHm1CAACA/QkfbUIAAADJrh9tQgAAgJRTIG1CAAAAYPggbUIAAIArnSFtQgAAAPdBIm1CAACAwuYibUIAAACOiyNtQgAAgFkwJG1CAAAAJdUkbUIAAIDweSVtQgAAALweJm1CAACAh8MmbUIAAABTaCdtQgAAgB4NKG1CAAAA6rEobUIAAIC1ViltQgAAAIH7KW1CAACATKAqbUIAAAAYRSttQgAAgOPpK21CAAAAr44sbUIAAIB6My1tQgAAAEbYLW1CAACAEX0ubUIAAADdIS9tQgAAgKjGL21CAAAAdGswbUIAAIA/EDFtQgAAAAu1MW1CAACA1lkybUIAAACi/jJtQgAAgG2jM21CAAAAOUg0bUIAAIAE7TRtQgAAANCRNW1CAACAmzY2bUIAAABn2zZtQgAAgDKAN21CAAAA/iQ4bUIAAIDJyThtQgAAAJVuOW1CAACAYBM6bUIAAAAsuDptQgAAgPdcO21CAAAAwwE8bUIAAICOpjxtQgAAAFpLPW1CAACAJfA9bUIAAADxlD5tQgAAgLw5P21CAAAAiN4/bUIAAIBTg0BtQgAAAB8oQW1CAACA6sxBbUIAAAC2cUJtQgAAgIEWQ21CAAAATbtDbUIAAIAYYERtQgAAAOQERW1CAACAr6lFbUIAAAB7TkZtQgAAgEbzRm1CAAAAEphHbUIAAIDdPEhtQgAAAKnhSG1CAACAdIZJbUIAAABAK0ptQgAAgAvQSm1CAAAA13RLbUIAAICiGUxtQgAAAG6+TG1CAACAOWNNbUIAAAAFCE5tQgAAgNCsTm1CAAAAnFFPbUIAAIBn9k9tQgAAADObUG1CAACA/j9RbUIAAADK5FFtQgAAgJWJUm1CAAAAYS5TbUIAAIAs01NtQgAAAPh3VG1CAACAwxxVbUIAAACPwVVtQgAAgFpmVm1CAAAAJgtXbUIAAIDxr1dtQgAAAL1UWG1CAACAiPlYbUIAAABUnlltQgAAgB9DWm1CAAAA6+dabUIAAIC2jFttQgAAAIIxXG1CAACATdZcbUIAAAAZe11tQgAAgOQfXm1CAAAAsMRebUIAAIB7aV9tQgAAAEcOYG1CAACAErNgbUIAAADeV2FtQgAAgKn8YW1CAAAAdaFibUIAAIBARmNtQgAAAAzrY21CAACA149kbUIAAACjNGVtQgAAgG7ZZW1CAAAAOn5mbUIAAIAFI2dtQgAAANHHZ21CAACAnGxobUIAAABoEWltQgAAgDO2aW1CAAAA/1pqbUIAAIDK/2ptQgAAAJaka21CAACAYUlsbUIAAAAt7mxtQgAAgPiSbW1CAAAAxDdubUIAAICP3G5tQgAAAFuBb21CAACAJiZwbUIAAADyynBtQgAAgL1vcW1CAAAAiRRybUIAAIBUuXJtQgAAACBec21CAACA6wJ0bUIAAAC3p3RtQgAAgIJMdW1CAAAATvF1bUIAAIAZlnZtQgAAAOU6d21CAACAsN93bUIAAAB8hHhtQgAAgEcpeW1CAAAAE855bUIAAIDecnptQgAAAKoXe21CAACAdbx7bUIAAABBYXxtQgAAgAwGfW1CAAAA2Kp9bUIAAICjT35tQgAAAG/0fm1CAACAOpl/bUIAAAAGPoBtQgAAgNHigG1CAAAAnYeBbUIAAIBoLIJtQgAAADTRgm1CAACA/3WDbUIAAADLGoRtQgAAgJa/hG1CAAAAYmSFbUIAAIAtCYZtQgAAAPmthm1CAACAxFKHbUIAAACQ94dtQgAAgFuciG1CAAAAJ0GJbUIAAIDy5YltQgAAAL6Kim1CAACAiS+LbUIAAABV1IttQgAAgCB5jG1CAAAA7B2NbUIAAIC3wo1tQgAAAINnjm1CAACATgyPbUIAAAAasY9tQgAAgOVVkG1CAAAAsfqQbUIAAIB8n5FtQgAAAEhEkm1CAACAE+mSbUIAAADfjZNtQgAAgKoylG1CAAAAdteUbUIAAIBBfJVtQgAAAA0hlm1CAACA2MWWbUIAAACkapdtQgAAgG8PmG1CAAAAO7SYbUIAAIAGWZltQgAAANL9mW1CAACAnaKabUIAAABpR5ttQgAAgDTsm21CAAAAAJGcbUIAAIDLNZ1tQgAAAJfanW1CAACAYn+ebUIAAAAuJJ9tQgAAgPnIn21CAAAAxW2gbUIAAICQEqFtQgAAAFy3oW1CAACAJ1yibUIAAADzAKNtQgAAgL6lo21CAAAAikqkbUIAAIBV76RtQgAAACGUpW1CAACA7DimbUIAAAC43aZtQgAAgIOCp21CAAAATyeobUIAAIAazKhtQgAAAOZwqW1CAACAsRWqbUIAAAB9uqptQgAAgEhfq21CAAAAFASsbUIAAIDfqKxtQgAAAKtNrW1CAACAdvKtbUIAAABCl65tQgAAgA08r21CAAAA2eCvbUIAAICkhbBtQgAAAHAqsW1CAACAO8+xbUIAAAAHdLJtQgAAgNIYs21CAAAAnr2zbUIAAIBpYrRtQgAAADUHtW1CAACAAKy1bUIAAADMULZtQgAAgJf1tm1CAAAAY5q3bUIAAIAuP7htQgAAAPrjuG1CAACAxYi5bUIAAACRLbptQgAAgFzSum1CAAAAKHe7bUIAAIDzG7xtQgAAAL/AvG1CAACAimW9bUIAAABWCr5tQgAAgCGvvm1CAAAA7VO/bUIAAIC4+L9tQgAAAISdwG1CAACAT0LBbUIAAAAb58FtQgAAgOaLwm1CAAAAsjDDbUIAAIB91cNtQgAAAEl6xG1CAACAFB/FbUIAAADgw8VtQgAAgKtoxm1CAAAAdw3HbUIAAIBCssdtQgAAAA5XyG1CAACA2fvIbUIAAACloMltQgAAgHBFym1CAAAAPOrKbUIAAIAHj8ttQgAAANMzzG1CAACAntjMbUIAAABqfc1tQgAAgDUizm1CAAAAAcfObUIAAIDMa89tQgAAAJgQ0G1CAACAY7XQbUIAAAAvWtFtQgAAgPr+0W1CAAAAxqPSbUIAAICRSNNtQgAAAF3t021CAACAKJLUbUIAAAD0NtVtQgAAgL/b1W1CAAAAi4DWbUIAAIBWJddtQgAAACLK121CAACA7W7YbUIAAAC5E9ltQgAAgIS42W1CAAAAUF3abUIAAIAbAtttQgAAAOem221CAACAskvcbUIAAAB+8NxtQgAAgEmV3W1CAAAAFTrebUIAAIDg3t5tQgAAAKyD321CAACAdyjgbUIAAABDzeBtQgAAgA5y4W1CAAAA2hbibUIAAIClu+JtQgAAAHFg421CAACAPAXkbUIAAAAIquRtQgAAgNNO5W1CAAAAn/PlbUIAAIBqmOZtQgAAADY9521CAACAAeLnbUIAAADNhuhtQgAAgJgr6W1CAAAAZNDpbUIAAIAvdeptQgAAAPsZ621CAACAxr7rbUIAAACSY+xtQgAAgF0I7W1CAAAAKa3tbUIAAID0Ue5tQgAAAMD27m1CAACAi5vvbUIAAABXQPBtQgAAgCLl8G1CAAAA7onxbUIAAIC5LvJtQgAAAIXT8m1CAACAUHjzbUIAAAAcHfRtQgAAgOfB9G1CAAAAs2b1bUIAAIB+C/ZtQgAAAEqw9m1CAACAFVX3bUIAAADh+fdtQgAAgKye+G1CAAAAeEP5bUIAAIBD6PltQgAAAA+N+m1CAACA2jH7bUIAAACm1vttQgAAgHF7/G1CAAAAPSD9bUIAAIAIxf1tQgAAANRp/m1CAACAnw7/bUIAAABrs/9tQgAAgDZYAG5CAAAAAv0AbkIAAIDNoQFuQgAAAJlGAm5CAACAZOsCbkIAAAAwkANuQgAAgPs0BG5CAAAAx9kEbkIAAICSfgVuQgAAAF4jBm5CAACAKcgGbkIAAAD1bAduQgAAgMARCG5CAAAAjLYIbkIAAIBXWwluQgAAACMACm5CAACA7qQKbkIAAAC6SQtuQgAAgIXuC25CAAAAUZMMbkIAAIAcOA1uQgAAAOjcDW5CAACAs4EObkIAAAB/Jg9uQgAAgErLD25CAAAAFnAQbkI\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]},\"value\":{\"__ndarray__\":\"/7eLhhpz+z9YGwZnYpsAQBUBw/LuEQtAUDxQi1miAUBEUVdJTbYDQEIW0RLVaAFAOLz4yk+nB0DqWuzzeuMUQKQlwXhWIhJAV4226ZBGEkBvqelcCgcUQHGAFsgq9RBA0nyevDZCFkB7stFEdP8XQOzAVRHGsRZAZEmrns7bFkAinQYADd0RQGn/eBW6QBFAs+KZhDc7EEBQah0sQvcOQESULFsq7hJAaXgFiaJYDkBufr2kuob7P4Hq6sphdwNAHiUF+4NBAUBDg8CejWsBQAswSj5VzPI/qrme//i37b/RLRo2sAL1Py07MI6RQ/Q/IrVSAK/z7z/Fo6/wumX2PxQPSeXLbgNAc1VYxDMmC0BBzXmZBuoLQObs38NKwgxAdBO8SHLZAUDQxnvrRksDQEzRTvxE3OY/3DRkW4Bu1b/zW2wjFP72v6tNSYWr/QPAcGY+O32NEsCLanTsUisQwHIs5/Wt6xPA/oh/N9WHGMBcrKnHaSQawIwBBcE9MxTAimXFiu4OFMBWkZxhe4kYwF6a/401LxnAIrKHmoMAFMDepqupKEkRwJKFdRp3JwrAFhAKH9LEBMDW6UjebmYEwGTnw3pwSvS/6pAFguy14L/mtKRy5Mj3v1wxokzRvwjA/3k/TUaYDcALOaNrraYSwPFzj+WZaAzAmW5XvUdHEcDvI7DjgdMHwBWeoWfocgHAnc+NvWYfDcB6qLO++dYSwIXi3SN45BHAZPBadQpAEMAv9HxWc2cOwLYzlxziGQvAfkU+A41tD8AdroSIaQQQwL2XmQE+5hLA84y96MqzE8ANVm/D1voRwKegYmPlqQjAVhj9GeYOEsCbOu5TANoKwIRu2DNItBHAR3i2t0L8FsCAFLiOO4wgwLQr4xbXNBrAxpB2KWwaG8AL/pWaYWMgwM6UgVPefiLA3N/j2tYbIcBumVG9Om8gwNAsEonK9iHACNIWjYnbI8CqhnXBIUkkwCPxtY9sayjAXvnp3TvbKcBKkEKsxL8qwEI3SSkDFyrA2FyxQVs8J8DK1qj34nspwJyAoscXqivAHvu2mkP/LMCDmcIdPSwswFQ5jBTdTSzACKAzzYMsKsDkKC4q0GErwMM5sdB6xy3AB2TcFr6hLMColvxt0dsqwIu88jYV3SrAJPtWGnAyKcBgjuyhR0gnwMcruzCUhCbAhfLt2Ii0I8DKBCZxLlckwAolE+Q8aybA1c1NHNiNJMDQRYW7k6siwKzWLXVO5yPAqykbJ6AVIcC7uxll4q0gwK047bPPdyHAZ8C+A5gnI8Aej/wYNGQiwGfqbVdlpCXAD7bJnM2dJsCAeBJZ4M8nwDCe25jiISnANjC+IR+pKMCso2AieoUmwG2bI+LsOyfABuh+7BMpJ8AQDafQ5WUqwPm4ZyKK2CvALykz1Y0YK8DIT+OSQX0qwIBehHm9+CrAFjY2rsQvKMC2OcjLF+ImwKsra6a0jSTA8rEnDzPDI8AQKDE4zdwjwHK4pIO13iPAnhCecANBJsAQMIZaWAAqwD6z4KeENCnA8jrWnqBsLMBSpuie5hsswLzAT3CtAi7Aenpd9wQhLMBK+NkOKgEuwIx59wZUEC7AKjYZgy++LcDKpQ5/Ut4wwFzUhh0w2C/A53MTD1fpLcAvk2Yca48uwNWw+DOv8SrAnaNMfoJaKsCtyDa8sHwqwEOZm/2o8SrAvBF/3/lJKMCy7Ynm9m0lwGuP21XxfSHA7WpESaNmJMB86s/nHu0iwGJDR3vzxiDAZN72100yHcC2DniOsMIhwDy/HHdUUB/AstjfnRljIMCGpuKvFbEgwAt4YBBQBSXAZX/k44+7J8AK9BaN2dwiwCBVtTawJSTAZa+la5PjI8Ahc3ZVESEmwEY3GAk45CjAV68kRQ3DKcA1vixdsVgpwM1NV428iCrAm22EolRLLsBJjv7MJm4swC85FC399i7AdOmKtyQjLMDw1qKUA4EqwF0M+t9kjinAARiU8qa+K8Dy/7Kg7FUvwKMRut0lpyzAL2SQs1SxLsDMkJtgYggtwFY6zbsWLi3AgozaqB0aK8DgFeRUEFkqwGaI0+9k0ifAENQEPSq5JsAHs2NaS0MnwAkWbdrUASPAVPLWKbXzIcAyRnNLt14iwLiw0Que9iXAjS869tPPJcBXXwls3kUpwKCDgIrKCSrAs5+C27+NKsAXDUYAzScrwMUXocsG/SfAXwLh63EdKsC31ClxinwrwJKBknIq8inAOKvC0XccKsBSyvLw6T8owPYnVRU5zyfA3uBnXZSsJsCvHolsGzwjwEfCC1MUjyLAD+MGMS13IsDZSBRnsMkhwMWVTGkM5B/A8rNnfMzmHsCpikozVzEewCDFc0pRyRvANI0CwMceEsD2uHIPfkABwFldNuhkRfC/vGFDcZAy/L9gv8YggM/4v9J0B0jDOAHAsYE2CipwAcAgTjXErGsCwDZCAcqhNQbAuA6N7KUSC8C4r7nxaGITwLAXo49W9xTAmIJhqpBUFcAEYiJ08rMZwBsxxlE/IhnAbWAEpgfNGMAnvrMdy2wdwAYOEhhdvyDA57EZXtb4IMCPGsq+QUkgwH60D+qDrh3AZwEHoepbGMDw5HvX7zgTwFbV91wDjRLAmY9u99YDFcBMY1uDR5MUwIGPJkWbQhLAr6g2IquFEMAkcF2I2ScUwIxA6ATKoxbA10aEM3k3F8DJSn90NisRwNmVv6gG6wvArAlRtLRIDcAe7tLfiwwUwLaipcvUrQ7A0XVrAKtoDMBPS3nPlMwIwOzoMqd/fBLA8gBI/eMWEcB3WxUFSIQRwDpQVSbkLhPAYX0Z15uMFsBg8IhKP/sRwOhA2ahclAnA7jmo7/xDBcCDxdSQui8EwP7eIq7+gvi/2WO5DZvy779uMBs0x4P2vxjQtdWNufe/KG7vMEj6A8AbLBG/o0cDwIAC2mBBNey/nSs+ZFcH8L/3MJyci9vvv82dYj8rAQDAxCs/gtJC/r+YCFXO674IwD9KzukDSA/AxR6uGi5KEcAuKfE7bl4PwNChF8tMfRDAxBOYlhr2EMBAyvEw53wLwHyKCgwcCALASMiPUno0+7+MddbOe9YFwCtRFw2EywvAKuIXuPLrEMAYDSkMrtINwNSmRQF+bwrAYycJ+0vSCsCPQrniIMoPwMoF7XPG8wfAAHU17MCG/r9AEHBWwHX3vzoh193AlPa/GB22tGad9b+VDC8lnprmv4RqMIuj3ME/5FH/uKX70r83cszh5bLqv1rhpgpKwd2/UCfTeOYHzL9b81COSJbQvyZWWh4WIeI/+Xw43bFz/D+3JmQ0KLjsP+a8fPohrgFAyQpHSUgS+j+2f84C7pziP1/i/p7XE/K/nTeNeqek9r+8L9Ro8ATzv9Xya9JfrQXAvA21boXB+7+wfHCX5Mj4v1zwb1fgeQTA9g9Vi5zfCcBwox7ADnMWwKRbHF44KBXAScS9nnBBF8Di9USLIrkXwD9z5xKeWhLAd+wXsE+UEsDq+iA2AO4NwK6SwmLcwg/AgmFE7MMoDcCsvwMZ1xsFwAtiebpcgvm/D1i+WuZg478n8ItUgMDwvxDPK258gcW/7FyRtf9E9D+uybRq4gT1P4HiFi14mfo/7kBORL96CEDTbNe1s8kHQKwgmyJOww9AOGBUCaJ/CEBlL/zdjbgEQHYs8wQtS/8/JqIBWNU8CECk3eXmR43qP86u4AMEUPI/+JAYk5VwAEC3Bcwxmtb0P0fmFW+Kxfo/1CRIN2sx/j9cF66AYOD/P45hOW1kc/s/POL3cEX5BkBi/GBYZc8GQESkd5MK6A1ABARqu1LHD0A9KHT5O9wFQIuk8V/dhghAYHoScyIcDUAJAbzKFwcIQP/zBJCevAtAiHTRMkoWEUAI6mpZcpEIQHecSyH7HgVAMqEHtJOSC0CcGT5SBcwHQP5JFEg9zQ5Ahljoq8bSB0AHFtkU7A4IQDp+Ybul6AlAGBCxPpDtBkAUK9tPOs3zP5HodZKI0vs/+/CusPc5+j9/foQvsP0CQPJJDUhL7QBAoM83VK+7A0DiyxHGwzkEQLKN4/9wwAZAzsgbpdq0A0CAZByAtvwLQN1IAjaqSA1AYzcVCAi9DkAwEpD7SjgTQBiYHn7k5RdAL0Ijqfd0GkCnzW+Mg1EYQAi9agcHGRVA39d1y6O9GEB0IJu83t0XQNVLzhofXhdAl7jlGrsnGUAWs8rjXW4YQFt5kYKD8RZAsW8rvbCMGECfH1QWrksfQJxBDPyAZyJAwLo3t8i/HkDSxWZ9pcoaQHyZdae0NB1AfKro49D3F0C2mgiuuFQWQLvNXJJzGBpAnNiga4DHGkBnWqguegobQCSrZqaGZhxAlNVFL9tEF0AkSnpFr24bQJFJq2rVrhlApy64uNV2G0DAlRpwz08fQMi5vtfjKyBAJpdphXjGH0BGd6977dQTQBhp8PuYcBJAsgQn7djyFEDlpSDlEHAWQGMnBKIkARVAwBH/HE2vE0Dg4fAzzwESQF0YZGYgphVAIsBsSqWSFEDjG0xHgvoWQPbtAKQiKhBAoszVIgzuDEAVHD9Hz6AHQDpakb582Q1ANXmK7dXuDUA4V6RzfvkLQIQU2o53WAhAj9BNjTVF8z+SHD9P5RDVP56N2IiRl/U/CmtYULa//j+h2Q/hoYQEQCDf7Gh5qvI/KyDEoB2d/z8pJQcqTsYGQGx0IohmdAtASotcsWUSBEC2KP1MQGcPQBZhQfzHjAhAwlaH+N76E0D1OJNlHYEZQGiPuNrf+RhASvxNSY64GEA4iLq0uskYQCwEklNerRVApqSeGdePF0DeotC4FCIWQO4EgljRVBhA9rPVUjwXGECZprZVQO4XQFMHYyfyZhZAXmgDBmHVGUD+aq9egnIYQPZIY+x+pRNAqN7GJoCUCUCrm7RFx+ICQGtOl7S8JPk/C4LQaKRp9z8voVrlPIXpPz8cVtV7ogJAmNShseai7D9TbtzYatv6P1MhMYFdpf4/QDz+mGHW7D9E5XLmIV34P//ESPTJKfs/dOwQLA8yC0AgjJMlMWgNQOcKrYvemA5AlqTh7pfO+T+rzBN3B7gCQPY0vhhEYQVA4ig1p8NZ9j8mZZ8yCkn/P/sQxY+dfgNAdhNs0HrP/T9ydwB79UYBQJj81ow+DgVAbkSWaQyR/D9A/Hx7BQnTv3lfs7Xkoum/yHAzd4vs9z+CmsHsrxECQOQB+AYwlv8/8CPJuj1rzb9fUCajsXbrv/W8AMOlTuS/IAo4dogXDcDUaJ4cF5wRwNC0B5RZzw/ARDLRnJ5bFsCrjH6HU2MbwDQJntcvDxvA4r7CjN09G8CrtG8acPkbwJkO5gQIQBnAv2+DO6hIFcCGUW2+ynQTwA2NscIwGxLAi2HFDyNhEMCFFDYwshUWwOylSqw/mxDA+cUzEp/SCsAv8Q9MYH4FwO5UPXOEHQvAPXRcsoxPCsB6M9PvfVUBwD9wS+cAXAHA+mk+QMiS4L8TEy8fTjz7P/Op1c25zAlAykm8u1dkAECLWnQnb0AAQIw0k/H6Uf4/MqtytGov6z/sXDOV1sX4P4CvTBGB0IO/+nI0yQuH27/PL0XDKWHZv/5tcvWDIwFAt8tdogLfBEB2mqhe6WPxP9w1jlluF9o/Yigq+/7R8r8Ei6mPQIH8vw7Sjcmrw/+/fal9l0Hc+L9IHOFFz7PWv7q3wYXuePM/SGMVpUNM3z/g8tHar4juP6qlMPlaqOY/qETuKHYSxT/1qaGuLfHQv7zaF/Rjb+o/gf4QqcKm8T/MhNeImc/3P8pNnlCZlf0/ShGmxwpwBkCMIUJ3UIwTQPOsYKVOPBpAX7znN5CmGUDotkD2A24ZQNdczFqURSBAY0QaXBtMGkAO6S+NdcIdQJek5n1ZEhhAFqF0BvXtGEDoS6HQXQYaQKr7hRiDrxpAXq+sZs7nFkCBIHL466USQCZBAAyKoQtAYn1QzdlPEUBhAxiU+SkRQMSnt/hRfRBAsji1QhYOD0DcKrJ0kcgFQFD8j7ft2AhAhL/fJlzHA0BkcAldzbwBQMSm8nQc3Oe/cFwKgeYEyD84h932PyHuv+KagyaQuva/mX1ZbNYrAcDFpQqSn3v5v4wORrCWnN2/2GWoCtz97b+s4PtZj78IwBaVNZR4Mg7AsbeUxQKWC8CWEl0d2YIMwHsVrM0hQhLAGF5PAGFyEcCrVa0zNcwPwL69vEHgvQzAIB27j5Kb/r9gRyyCvS7lP5qcZRnCjvI/27e2RfhZAUBgrcdYKhHBv/7/tdEBdua/BlJ2QBrIBsA7mOQr5gkHwGCUY+S5zAzANQ/CW62uEsDQYLD3G5oUwMS1yKRHzRrADHOk1qrWFsClgpDGvokdwPg4Jg0zjh/A0NzcWXtgIMCopn0Q/+AgwM1ci6kKjR3AkJ/Qt40IIMCkn/PITncmwM+3JIM18ijAAWh5GQhxKsDiOpc+q9orwPAfX+qYbCvAEJW/88cpK8AGaxg1UUwrwKPF7BjYmCrAIAe/eVBNKsCcE4lxopQqwEtwdtbG3CbArypsANC5JsBnq8PnbzklwLQfLOKjuybALoVvAIj6JcCvgjYsRyAkwAP2mIP1gCLAfsKNQz22IsBkYST6evchwIpYfVwRAh/Aegtl1G+oHMBHG4RpkWAbwLLfnC4mDhzAHsjzEzuaHcBmnaLEZfEXwDoca6kcdxbA34ufHkfyEcD7CcdrZk0SwO2RNSBrZxHAVW2ESOI2DcDI/OBTWsgMwGRrwE4bvADA7U7J7Y85EcA2XRDxUS0SwFcuA74xHBDADU3vu1q8DsCDF7mwOJATwCyQPLFIWRnAv+aWV7CbFcC47LvkaakYwGP1suRV1BnA1HBZfx4ZHsCmjm4ngnYdwJ7L8Ce/ZBfAdNwuVG0kFcBYW9NvWRMawLuPtvybQyDA9FF7/oe+IcD45+Tqe50jwCM8JgZoziLAVLFt8PeqIcD5e83F5SYjwGUjEm2c+SHASBdKt4hKIcA8kxQqU4YiwJnCLkUSASPAjXkQiDyMJsADtgNQfoQmwJLIX96LNybAhNE46qzjJcCXgxPIz2EkwD0LKoFXryPArtpYqksqIMBBjWEeZYIewFaLtXaKhhzAtuIrvhGQHcBEgCMiRvUiwEbLN1w6YCTA2DlgaztOIsAjEkV+6NAhwFVoo39EWCTAlnH+s80DJcDoLEUN0O0kwNtgSs6MBSPAPJNYBXLMIsC6Dz5SKZMjwIZCoWGasiDAiLYlOVozIMCi0fHHAO4cwN0Xk0ZpxR7A+IEFbs6KIMA19ynpx20fwNhjHUdCSRzA11auBM8lIMDqk9gDHw0jwM9DHMiElyLAQXZNMv+rIMBYuGQEgMQhwGSIUUuyfSDALXyFuhSSIcDOvYoosjEjwNSssdOn4ybAv4yBdGh6JcCl23PhcFYnwJpk88Be6yXAiX9h4+62IsDPQDRR8n4jwL5f7GdO9yHA5qFntRHiI8CnN33+rNsiwP9QteHHPSLAiD7Qwx8LIsA6GiQ9gF8gwHTwpj4rNB3Aq0QYb4sOG8BtP1cv54odwF6afR36HCLA6RNjh7h4HMAMFWHPMVkfwFo64qivrx/AiyIrfZXkH8Bts7r62wckwMSwtL1flyLAU8tg686NI8Dh47rmzdAhwEMQ7RsnvyTA8/H8Jp8bJsAYDE2iJOElwFeCVHWb9yTA5uE1aXSFJ8AdHwzRcqMlwHUQmZRjbCPASdYb56AyJcDUTib+RponwLR1BwBh6ijAW9+zodu2KcBVkQLq2+YmwKAbKWvZpCbAixF86QQ0J8BE+AKXkCQqwNwiFQHamSbAmAdC1qEVJcBrUpB83I8owHA6xiT57yvAuJ4pgxk1K8CmpQ194LstwPIoCJ5ANDHA1JbZv4ZqMcBiEB9LY6IzwC3zE4uB+jHA5cwYeCg2MsATQvKV3n4xwIggrrgcmi/A+xRZWDR2MMDdoBx26SkwwHBM3K3JbTHAjPm24x4kMMBPw2lgt0swwPri5cvrXjDAEutAAgP/MMAxFJOntaExwKHl1EbKsTHAG5FufqIbMcB9cCj4j/ItwHJrdvIrUi7As+GFqOfHKsC0D08c0jIqwI6nOaLvfSvAxCugFWsALMDr2AhnemUswF4Wfr7eaSvA0eiuc9OVLMDb5pnZBH4pwPdzl32Q+inAFYxnXHAVK8Bjc1PG2kEmwLHt2/xJaCXAdQxfmItAJsAQseIjx4knwEfgOOfvNifArCcUAcI1KcA0SxIyJQ4owIqdtuXsZybAd1yn+GwvJMCuwnYAatUjwBL9WaR+nyDArgk+xjM6IMARwflYOb0gwDBjDYFcqCLA0uBJyRRoIsDBFocrd/EhwL6MhR4GzyDAasArZmS1IcACzhLplGgkwFdgCRtLTCTAI47a9X/qIsBmSEF+EUUjwAXWy/qLUCTAU9QkRSLhIsB0kIprPuAhwKShE2KgZBzAd7PyhVTTGMDVzXHArZgbwO4mY8CiuBvAxqbCMjFwGcDg51jV5PQWwDzCJAHMrB3A3j31po2RIMDdt8q0cRwiwCAhMbZ+oiHAcXUWTbmDJsCTEh10pDUmwDxXHob+WCXACTsojYJlJsA0xAod9a0owO7GmrIeySXAHpJdi6doJsBw4XY1cBQpwIwG7kBP/ivAy3n/YGqiLMB5Kk9GlRgtwLjDZvIuETDAcfHP0hDkMMAPY72qsAEywEqNx4/jpDLAgjs7oX5eM8BO4AuIQqUywJQduoacyzHAQK0ATifVMcDiw9WgkKowwFq4vWkYSDLA6+bd2BNZMsCCDUSJAFIzwNn4Xan3ujLAoeLosJIhNMAU/3z+oHk0wNyoJN4TbTTAGY+lBdixM8BTv+Tkle00wCPQuXKY+jTAzv29tgVrNcCl0SMJT5M0wKnY9fQABjXAXbRPrVKeNcBmolqHBgQ0wFJwhMWIsTPAuN+JICvLM8Cs5Lr6neIzwCDbxZriMjPAKVshc4i0M8BDIg0ko70ywBMFxHCI9jHA6ZOvPw8fMsC+iuAFc2EywBfSzFKJ3TLAYrzhQ9t9MsBlLNxgusMzwGgFMJe0mTLAZExx4JEJNMAnFONesks1wN2zsAOl1zTA1glIuC4iNcCnye22QMI2wGPPNENl2jfAJukBJSiEN8Af164XBmU3wENjZBiP1zbAlDWEv0LgNsCjhdy4JEE4wGOhT7kV2znADwq8qBo1OcB0F1QlgJQ5wH0abPj+OznAVLuUfM8tOcAabDrE3RA5wJzxImzhjDfA5/1ERkDpN8CXgAJcwWE4wEv8HO6x2TjAoa1CibHlOcBMZ32GD/Q2wLOqTXzkizbAIH6Xf8XlNsAQpziiWZ43wEKSraB+/zXAURv64b4UN8Bem3UmGyw2wOFvKec4xzTAYkfwGR5wNsBHoJks2ic2wL1xOX7MuTfAPzo1ZHWMOMCSm3VkI6E5wGCBge9rQDrAOJt4KRLlOcCQCGpTL643wGo5sio7PjfA2Xd8WeK6OMCVuKvxLNQ5wN5EaLO9szjAIVAM3hbpN8CNmu9IfFY2wDEueiOWOzXA+xdMH4psNcCI8IgV+ig2wKz6gA/QGTbAR9vUuymkNMA0xg6uDZA0wKaZe9JMujPAsAYztpzfM8AKB5VUV3YzwGym0+TM8TLAKS7SpwgNMsBL8YwIhEIywC0/qDoDsjDAGefN0yH4L8A4blKarrswwIwFiDKivDDAZiGHT4xGL8DMyIum8AAuwF56BwjyOjDAYbKIKjOQMMBOXQfDtmovwPq1rpJgFy/AwyFOWDOkL8B+mDCJrJIwwC/A8iKGwjDAGHrlk3KOMMAYRBV4wNwvwOJGRSlQFTHAqI9fzaJuMMB934qgYyAtwIZRucAX8C7A16uq0KkiLsAyDJYpDhYswHcuZG68NSnATF/gb4SdKcASai0bGhwtwMCCshg5fy3AFGJ+/SVlLsCgCJiL6+0wwGSpqBsmCTHAL8khUbQoMcAJukYINp0ywPQE9nAxBTLA3dS1IvcnMsDez/VYRJYwwJqFM/3pOjHAyKcMPedIM8DnvViO9pAzwA7AezPVAzPA77JMYtrjMcAd0OeMrtMwwEdyq0jZ9TDADqoMWv9ZL8CglKKpfE4vwDlvp5UimivAyLqdEQGJKMBDWcuCgw0mwIkJzXpbWSjAu09HWvR1KMDgd6Ga/7AowGw6i00ASynAKIPCDJtxJ8DAN4DR2E8lwCgr+s38gSPAqYrO2p3hHsC98LST6J4dwDRI9YHCYh7An7aD4iz9IMCGCFdPCfgdwP5ail5m3x7AeWjfgU6HGcDLMhItIAMYwMLpTTB4ZBbAhqt4gwi5GcB5lclHOUcTwIQf4oAQPhLA7Uo4mVRiFsCO9Vh1gYQawOi5mNuY4BjAHVZC2eASHcCYjLf2YmgfwM1AjuD04h3AaOaAA493HsDUXEYIO9AdwKumwa828BXAFS45gRnaFMDB4IyxfmcYwOJpbVyKHxbAlHXc7YBXFMCY3ABtwh4UwGuFWQdSZxLArk8cmZ1cFMAk9+8IoKsTwOaNk+lswA7AnmsLNt0lGMDykEIOnPsPwCzaxRVBgv6/g+0ZooWOBsCMP7ognp4NwOTXRKZmsAHAeQSSao7yAMBoPSt6fS3zv47MblqnZ+a/UA7qvUWA57/AI1jYSMz+v62WNkrDNwDA8JK2bwLl678\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]}},\"selected\":{\"id\":\"1733\"},\"selection_policy\":{\"id\":\"1747\"}},\"id\":\"1732\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#6d904f\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1838\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#e5ae38\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1834\",\"type\":\"Line\"},{\"attributes\":{\"months\":[0,1,2,3,4,5,6,7,8,9,10,11]},\"id\":\"1757\",\"type\":\"MonthsTicker\"},{\"attributes\":{},\"id\":\"1710\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1726\",\"type\":\"DatetimeTickFormatter\"},{\"attributes\":{\"months\":[0,2,4,6,8,10]},\"id\":\"1758\",\"type\":\"MonthsTicker\"},{\"attributes\":{\"end\":1032998400000.0,\"reset_end\":1032998400000.0,\"reset_start\":946684800000.0,\"start\":946684800000.0,\"tags\":[[[\"index\",\"index\",null]]]},\"id\":\"1690\",\"type\":\"Range1d\"},{\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"},\"id\":\"1697\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#6d904f\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1840\",\"type\":\"Line\"},{\"attributes\":{\"axis_label\":\"\",\"formatter\":{\"id\":\"1726\"},\"major_label_policy\":{\"id\":\"1727\"},\"ticker\":{\"id\":\"1706\"}},\"id\":\"1705\",\"type\":\"DatetimeAxis\"},{\"attributes\":{\"months\":[0,4,8]},\"id\":\"1759\",\"type\":\"MonthsTicker\"},{\"attributes\":{},\"id\":\"1703\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#6d904f\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1839\",\"type\":\"Line\"},{\"attributes\":{\"axis\":{\"id\":\"1705\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"1708\",\"type\":\"Grid\"},{\"attributes\":{\"months\":[0,6]},\"id\":\"1760\",\"type\":\"MonthsTicker\"},{\"attributes\":{},\"id\":\"1836\",\"type\":\"Selection\"},{\"attributes\":{\"axis\":{\"id\":\"1709\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"1712\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1761\",\"type\":\"YearsTicker\"},{\"attributes\":{\"axis_label\":\"\",\"formatter\":{\"id\":\"1729\"},\"major_label_policy\":{\"id\":\"1730\"},\"ticker\":{\"id\":\"1710\"}},\"id\":\"1709\",\"type\":\"LinearAxis\"},{\"attributes\":{\"label\":{\"value\":\"A\"},\"renderers\":[{\"id\":\"1738\"}]},\"id\":\"1763\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1737\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1718\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"source\":{\"id\":\"1765\"}},\"id\":\"1772\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"1835\"},\"glyph\":{\"id\":\"1838\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1840\"},\"nonselection_glyph\":{\"id\":\"1839\"},\"selection_glyph\":{\"id\":\"1872\"},\"view\":{\"id\":\"1842\"}},\"id\":\"1841\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":\"#fc4f30\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1768\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1730\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1735\",\"type\":\"Line\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"1692\"},{\"id\":\"1713\"},{\"id\":\"1714\"},{\"id\":\"1715\"},{\"id\":\"1716\"},{\"id\":\"1717\"}]},\"id\":\"1719\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#fc4f30\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1769\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1856\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"#e5ae38\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1802\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1713\",\"type\":\"SaveTool\"},{\"attributes\":{\"callback\":null,\"formatters\":{\"@{index}\":\"datetime\"},\"renderers\":[{\"id\":\"1738\"},{\"id\":\"1771\"},{\"id\":\"1805\"},{\"id\":\"1841\"}],\"tags\":[\"hv_created\"],\"tooltips\":[[\"Variable\",\"@{Variable}\"],[\"index\",\"@{index}{%F %T}\"],[\"value\",\"@{value}\"]]},\"id\":\"1692\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"1766\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1714\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"1799\"}},\"id\":\"1806\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"D\"},\"renderers\":[{\"id\":\"1841\"}]},\"id\":\"1871\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#fc4f30\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1770\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1715\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#e5ae38\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1803\",\"type\":\"Line\"},{\"attributes\":{\"overlay\":{\"id\":\"1718\"}},\"id\":\"1716\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_color\":\"#6d904f\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1872\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"1765\"},\"glyph\":{\"id\":\"1768\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1770\"},\"nonselection_glyph\":{\"id\":\"1769\"},\"selection_glyph\":{\"id\":\"1798\"},\"view\":{\"id\":\"1772\"}},\"id\":\"1771\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1727\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1717\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1782\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"days\":[1,4,7,10,13,16,19,22,25,28]},\"id\":\"1754\",\"type\":\"DaysTicker\"},{\"attributes\":{\"base\":24,\"mantissas\":[1,2,4,6,8,12],\"max_interval\":43200000.0,\"min_interval\":3600000.0,\"num_minor_ticks\":0},\"id\":\"1752\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"days\":[1,15]},\"id\":\"1756\",\"type\":\"DaysTicker\"},{\"attributes\":{},\"id\":\"1729\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"label\":{\"value\":\"B\"},\"renderers\":[{\"id\":\"1771\"}]},\"id\":\"1797\",\"type\":\"LegendItem\"},{\"attributes\":{\"days\":[1,8,15,22]},\"id\":\"1755\",\"type\":\"DaysTicker\"},{\"attributes\":{\"data\":{\"Variable\":[\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\",\"C\"],\"index\":{\"__ndarray__\":\"AACA9VmNa0IAAADB/o1rQgAAgIyjjmtCAAAAWEiPa0IAAIAj7Y9rQgAAAO+RkGtCAACAujaRa0IAAACG25FrQgAAgFGAkmtCAAAAHSWTa0IAAIDoyZNrQgAAALRulGtCAACAfxOVa0IAAABLuJVrQgAAgBZdlmtCAAAA4gGXa0IAAICtppdrQgAAAHlLmGtCAACARPCYa0IAAAAQlZlrQgAAgNs5mmtCAAAAp96aa0IAAIByg5trQgAAAD4onGtCAACACc2ca0IAAADVcZ1rQgAAgKAWnmtCAAAAbLuea0IAAIA3YJ9rQgAAAAMFoGtCAACAzqmga0IAAACaTqFrQgAAgGXzoWtCAAAAMZiia0IAAID8PKNrQgAAAMjho2tCAACAk4aka0IAAABfK6VrQgAAgCrQpWtCAAAA9nSma0IAAIDBGadrQgAAAI2+p2tCAACAWGOoa0IAAAAkCKlrQgAAgO+sqWtCAAAAu1Gqa0IAAICG9qprQgAAAFKbq2tCAACAHUCsa0IAAADp5KxrQgAAgLSJrWtCAAAAgC6ua0IAAIBL065rQgAAABd4r2tCAACA4hywa0IAAACuwbBrQgAAgHlmsWtCAAAARQuya0IAAIAQsLJrQgAAANxUs2tCAACAp/mza0IAAABznrRrQgAAgD5DtWtCAAAACui1a0IAAIDVjLZrQgAAAKExt2tCAACAbNa3a0IAAAA4e7hrQgAAgAMguWtCAAAAz8S5a0IAAICaabprQgAAAGYOu2tCAACAMbO7a0IAAAD9V7xrQgAAgMj8vGtCAAAAlKG9a0IAAIBfRr5rQgAAACvrvmtCAACA9o+/a0IAAADCNMBrQgAAgI3ZwGtCAAAAWX7Ba0IAAIAkI8JrQgAAAPDHwmtCAACAu2zDa0IAAACHEcRrQgAAgFK2xGtCAAAAHlvFa0IAAIDp/8VrQgAAALWkxmtCAACAgEnHa0IAAABM7sdrQgAAgBeTyGtCAAAA4zfJa0IAAICu3MlrQgAAAHqBymtCAACARSbLa0IAAAARy8trQgAAgNxvzGtCAAAAqBTNa0IAAIBzuc1rQgAAAD9ezmtCAACACgPPa0IAAADWp89rQgAAgKFM0GtCAAAAbfHQa0IAAIA4ltFrQgAAAAQ70mtCAACAz9/Sa0IAAACbhNNrQgAAgGYp1GtCAAAAMs7Ua0IAAID9ctVrQgAAAMkX1mtCAACAlLzWa0IAAABgYddrQgAAgCsG2GtCAAAA96rYa0IAAIDCT9lrQgAAAI702WtCAACAWZnaa0IAAAAlPttrQgAAgPDi22tCAAAAvIfca0IAAICHLN1rQgAAAFPR3WtCAACAHnbea0IAAADqGt9rQgAAgLW/32tCAAAAgWTga0IAAIBMCeFrQgAAABiu4WtCAACA41Lia0IAAACv9+JrQgAAgHqc42tCAAAARkHka0IAAIAR5uRrQgAAAN2K5WtCAACAqC/ma0IAAAB01OZrQgAAgD9552tCAAAACx7oa0IAAIDWwuhrQgAAAKJn6WtCAACAbQzqa0IAAAA5seprQgAAgARW62tCAAAA0Prra0IAAICbn+xrQgAAAGdE7WtCAACAMunta0IAAAD+je5rQgAAgMky72tCAAAAldfva0IAAIBgfPBrQgAAACwh8WtCAACA98Xxa0IAAADDavJrQgAAgI4P82tCAAAAWrTza0IAAIAlWfRrQgAAAPH99GtCAACAvKL1a0IAAACIR/ZrQgAAgFPs9mtCAAAAH5H3a0IAAIDqNfhrQgAAALba+GtCAACAgX/5a0IAAABNJPprQgAAgBjJ+mtCAAAA5G37a0IAAICvEvxrQgAAAHu3/GtCAACARlz9a0IAAAASAf5rQgAAgN2l/mtCAAAAqUr/a0IAAIB07/9rQgAAAECUAGxCAACACzkBbEIAAADX3QFsQgAAgKKCAmxCAAAAbicDbEIAAIA5zANsQgAAAAVxBGxCAACA0BUFbEIAAACcugVsQgAAgGdfBmxCAAAAMwQHbEIAAID+qAdsQgAAAMpNCGxCAACAlfIIbEIAAABhlwlsQgAAgCw8CmxCAAAA+OAKbEIAAIDDhQtsQgAAAI8qDGxCAACAWs8MbEIAAAAmdA1sQgAAgPEYDmxCAAAAvb0ObEIAAICIYg9sQgAAAFQHEGxCAACAH6wQbEIAAADrUBFsQgAAgLb1EWxCAAAAgpoSbEIAAIBNPxNsQgAAABnkE2xCAACA5IgUbEIAAACwLRVsQgAAgHvSFWxCAAAAR3cWbEIAAIASHBdsQgAAAN7AF2xCAACAqWUYbEIAAAB1ChlsQgAAgECvGWxCAAAADFQabEIAAIDX+BpsQgAAAKOdG2xCAACAbkIcbEIAAAA65xxsQgAAgAWMHWxCAAAA0TAebEIAAICc1R5sQgAAAGh6H2xCAACAMx8gbEIAAAD/wyBsQgAAgMpoIWxCAAAAlg0ibEIAAIBhsiJsQgAAAC1XI2xCAACA+PsjbEIAAADEoCRsQgAAgI9FJWxCAAAAW+olbEIAAIAmjyZsQgAAAPIzJ2xCAACAvdgnbEIAAACJfShsQgAAgFQiKWxCAAAAIMcpbEIAAIDraypsQgAAALcQK2xCAACAgrUrbEIAAABOWixsQgAAgBn/LGxCAAAA5aMtbEIAAICwSC5sQgAAAHztLmxCAACAR5IvbEIAAAATNzBsQgAAgN7bMGxCAAAAqoAxbEIAAIB1JTJsQgAAAEHKMmxCAACADG8zbEIAAADYEzRsQgAAgKO4NGxCAAAAb101bEIAAIA6AjZsQgAAAAanNmxCAACA0Us3bEIAAACd8DdsQgAAgGiVOGxCAAAANDo5bEIAAID/3jlsQgAAAMuDOmxCAACAlig7bEIAAABizTtsQgAAgC1yPGxCAAAA+RY9bEIAAIDEuz1sQgAAAJBgPmxCAACAWwU/bEIAAAAnqj9sQgAAgPJOQGxCAAAAvvNAbEIAAICJmEFsQgAAAFU9QmxCAACAIOJCbEIAAADshkNsQgAAgLcrRGxCAAAAg9BEbEIAAIBOdUVsQgAAABoaRmxCAACA5b5GbEIAAACxY0dsQgAAgHwISGxCAAAASK1IbEIAAIATUklsQgAAAN/2SWxCAACAqptKbEIAAAB2QEtsQgAAgEHlS2xCAAAADYpMbEIAAIDYLk1sQgAAAKTTTWxCAACAb3hObEIAAAA7HU9sQgAAgAbCT2xCAAAA0mZQbEIAAICdC1FsQgAAAGmwUWxCAACANFVSbEIAAAAA+lJsQgAAgMueU2xCAAAAl0NUbEIAAIBi6FRsQgAAAC6NVWxCAACA+TFWbEIAAADF1lZsQgAAgJB7V2xCAAAAXCBYbEIAAIAnxVhsQgAAAPNpWWxCAACAvg5abEIAAACKs1psQgAAgFVYW2xCAAAAIf1bbEIAAIDsoVxsQgAAALhGXWxCAACAg+tdbEIAAABPkF5sQgAAgBo1X2xCAAAA5tlfbEIAAICxfmBsQgAAAH0jYWxCAACASMhhbEIAAAAUbWJsQgAAgN8RY2xCAAAAq7ZjbEIAAIB2W2RsQgAAAEIAZWxCAACADaVlbEIAAADZSWZsQgAAgKTuZmxCAAAAcJNnbEIAAIA7OGhsQgAAAAfdaGxCAACA0oFpbEIAAACeJmpsQgAAgGnLamxCAAAANXBrbEIAAIAAFWxsQgAAAMy5bGxCAACAl15tbEIAAABjA25sQgAAgC6obmxCAAAA+kxvbEIAAIDF8W9sQgAAAJGWcGxCAACAXDtxbEIAAAAo4HFsQgAAgPOEcmxCAAAAvylzbEIAAICKznNsQgAAAFZzdGxCAACAIRh1bEIAAADtvHVsQgAAgLhhdmxCAAAAhAZ3bEIAAIBPq3dsQgAAABtQeGxCAACA5vR4bEIAAACymXlsQgAAgH0+emxCAAAASeN6bEIAAIAUiHtsQgAAAOAsfGxCAACAq9F8bEIAAAB3dn1sQgAAgEIbfmxCAAAADsB+bEIAAIDZZH9sQgAAAKUJgGxCAACAcK6AbEIAAAA8U4FsQgAAgAf4gWxCAAAA05yCbEIAAICeQYNsQgAAAGrmg2xCAACANYuEbEIAAAABMIVsQgAAgMzUhWxCAAAAmHmGbEIAAIBjHodsQgAAAC/Dh2xCAACA+meIbEIAAADGDIlsQgAAgJGxiWxCAAAAXVaKbEIAAIAo+4psQgAAAPSfi2xCAACAv0SMbEIAAACL6YxsQgAAgFaOjWxCAAAAIjOObEIAAIDt145sQgAAALl8j2xCAACAhCGQbEIAAABQxpBsQgAAgBtrkWxCAAAA5w+SbEIAAICytJJsQgAAAH5Zk2xCAACASf6TbEIAAAAVo5RsQgAAgOBHlWxCAAAArOyVbEIAAIB3kZZsQgAAAEM2l2xCAACADtuXbEIAAADaf5hsQgAAgKUkmWxCAAAAccmZbEIAAIA8bppsQgAAAAgTm2xCAACA07ebbEIAAACfXJxsQgAAgGoBnWxCAAAANqadbEIAAIABS55sQgAAAM3vnmxCAACAmJSfbEIAAABkOaBsQgAAgC/eoGxCAAAA+4KhbEIAAIDGJ6JsQgAAAJLMomxCAACAXXGjbEIAAAApFqRsQgAAgPS6pGxCAAAAwF+lbEIAAICLBKZsQgAAAFeppmxCAACAIk6nbEIAAADu8qdsQgAAgLmXqGxCAAAAhTypbEIAAIBQ4alsQgAAAByGqmxCAACA5yqrbEIAAACzz6tsQgAAgH50rGxCAAAAShmtbEIAAIAVvq1sQgAAAOFirmxCAACArAevbEIAAAB4rK9sQgAAgENRsGxCAAAAD/awbEIAAIDamrFsQgAAAKY/smxCAACAceSybEIAAAA9ibNsQgAAgAgutGxCAAAA1NK0bEIAAICfd7VsQgAAAGsctmxCAACANsG2bEIAAAACZrdsQgAAgM0KuGxCAAAAma+4bEIAAIBkVLlsQgAAADD5uWxCAACA+526bEIAAADHQrtsQgAAgJLnu2xCAAAAXoy8bEIAAIApMb1sQgAAAPXVvWxCAACAwHq+bEIAAACMH79sQgAAgFfEv2xCAAAAI2nAbEIAAIDuDcFsQgAAALqywWxCAACAhVfCbEIAAABR/MJsQgAAgByhw2xCAAAA6EXEbEIAAICz6sRsQgAAAH+PxWxCAACASjTGbEIAAAAW2cZsQgAAgOF9x2xCAAAArSLIbEIAAIB4x8hsQgAAAERsyWxCAACADxHKbEIAAADbtcpsQgAAgKZay2xCAAAAcv/LbEIAAIA9pMxsQgAAAAlJzWxCAACA1O3NbEIAAACgks5sQgAAgGs3z2xCAAAAN9zPbEIAAIACgdBsQgAAAM4l0WxCAACAmcrRbEIAAABlb9JsQgAAgDAU02xCAAAA/LjTbEIAAIDHXdRsQgAAAJMC1WxCAACAXqfVbEIAAAAqTNZsQgAAgPXw1mxCAAAAwZXXbEIAAICMOthsQgAAAFjf2GxCAACAI4TZbEIAAADvKNpsQgAAgLrN2mxCAAAAhnLbbEIAAIBRF9xsQgAAAB283GxCAACA6GDdbEIAAAC0Bd5sQgAAgH+q3mxCAAAAS0/fbEIAAIAW9N9sQgAAAOKY4GxCAACArT3hbEIAAAB54uFsQgAAgESH4mxCAAAAECzjbEIAAIDb0ONsQgAAAKd15GxCAACAchrlbEIAAAA+v+VsQgAAgAlk5mxCAAAA1QjnbEIAAICgredsQgAAAGxS6GxCAACAN/fobEIAAAADnOlsQgAAgM5A6mxCAAAAmuXqbEIAAIBliutsQgAAADEv7GxCAACA/NPsbEIAAADIeO1sQgAAgJMd7mxCAAAAX8LubEIAAIAqZ+9sQgAAAPYL8GxCAACAwbDwbEIAAACNVfFsQgAAgFj68WxCAAAAJJ/ybEIAAIDvQ/NsQgAAALvo82xCAACAho30bEIAAABSMvVsQgAAgB3X9WxCAAAA6Xv2bEIAAIC0IPdsQgAAAIDF92xCAACAS2r4bEIAAAAXD/lsQgAAgOKz+WxCAAAArlj6bEIAAIB5/fpsQgAAAEWi+2xCAACAEEf8bEIAAADc6/xsQgAAgKeQ/WxCAAAAczX+bEIAAIA+2v5sQgAAAAp//2xCAACA1SMAbUIAAAChyABtQgAAgGxtAW1CAAAAOBICbUIAAIADtwJtQgAAAM9bA21CAACAmgAEbUIAAABmpQRtQgAAgDFKBW1CAAAA/e4FbUIAAIDIkwZtQgAAAJQ4B21CAACAX90HbUIAAAArgghtQgAAgPYmCW1CAAAAwssJbUIAAICNcAptQgAAAFkVC21CAACAJLoLbUIAAADwXgxtQgAAgLsDDW1CAAAAh6gNbUIAAIBSTQ5tQgAAAB7yDm1CAACA6ZYPbUIAAAC1OxBtQgAAgIDgEG1CAAAATIURbUIAAIAXKhJtQgAAAOPOEm1CAACArnMTbUIAAAB6GBRtQgAAgEW9FG1CAAAAEWIVbUIAAIDcBhZtQgAAAKirFm1CAACAc1AXbUIAAAA/9RdtQgAAgAqaGG1CAAAA1j4ZbUIAAICh4xltQgAAAG2IGm1CAACAOC0bbUIAAAAE0httQgAAgM92HG1CAAAAmxsdbUIAAIBmwB1tQgAAADJlHm1CAACA/QkfbUIAAADJrh9tQgAAgJRTIG1CAAAAYPggbUIAAIArnSFtQgAAAPdBIm1CAACAwuYibUIAAACOiyNtQgAAgFkwJG1CAAAAJdUkbUIAAIDweSVtQgAAALweJm1CAACAh8MmbUIAAABTaCdtQgAAgB4NKG1CAAAA6rEobUIAAIC1ViltQgAAAIH7KW1CAACATKAqbUIAAAAYRSttQgAAgOPpK21CAAAAr44sbUIAAIB6My1tQgAAAEbYLW1CAACAEX0ubUIAAADdIS9tQgAAgKjGL21CAAAAdGswbUIAAIA/EDFtQgAAAAu1MW1CAACA1lkybUIAAACi/jJtQgAAgG2jM21CAAAAOUg0bUIAAIAE7TRtQgAAANCRNW1CAACAmzY2bUIAAABn2zZtQgAAgDKAN21CAAAA/iQ4bUIAAIDJyThtQgAAAJVuOW1CAACAYBM6bUIAAAAsuDptQgAAgPdcO21CAAAAwwE8bUIAAICOpjxtQgAAAFpLPW1CAACAJfA9bUIAAADxlD5tQgAAgLw5P21CAAAAiN4/bUIAAIBTg0BtQgAAAB8oQW1CAACA6sxBbUIAAAC2cUJtQgAAgIEWQ21CAAAATbtDbUIAAIAYYERtQgAAAOQERW1CAACAr6lFbUIAAAB7TkZtQgAAgEbzRm1CAAAAEphHbUIAAIDdPEhtQgAAAKnhSG1CAACAdIZJbUIAAABAK0ptQgAAgAvQSm1CAAAA13RLbUIAAICiGUxtQgAAAG6+TG1CAACAOWNNbUIAAAAFCE5tQgAAgNCsTm1CAAAAnFFPbUIAAIBn9k9tQgAAADObUG1CAACA/j9RbUIAAADK5FFtQgAAgJWJUm1CAAAAYS5TbUIAAIAs01NtQgAAAPh3VG1CAACAwxxVbUIAAACPwVVtQgAAgFpmVm1CAAAAJgtXbUIAAIDxr1dtQgAAAL1UWG1CAACAiPlYbUIAAABUnlltQgAAgB9DWm1CAAAA6+dabUIAAIC2jFttQgAAAIIxXG1CAACATdZcbUIAAAAZe11tQgAAgOQfXm1CAAAAsMRebUIAAIB7aV9tQgAAAEcOYG1CAACAErNgbUIAAADeV2FtQgAAgKn8YW1CAAAAdaFibUIAAIBARmNtQgAAAAzrY21CAACA149kbUIAAACjNGVtQgAAgG7ZZW1CAAAAOn5mbUIAAIAFI2dtQgAAANHHZ21CAACAnGxobUIAAABoEWltQgAAgDO2aW1CAAAA/1pqbUIAAIDK/2ptQgAAAJaka21CAACAYUlsbUIAAAAt7mxtQgAAgPiSbW1CAAAAxDdubUIAAICP3G5tQgAAAFuBb21CAACAJiZwbUIAAADyynBtQgAAgL1vcW1CAAAAiRRybUIAAIBUuXJtQgAAACBec21CAACA6wJ0bUIAAAC3p3RtQgAAgIJMdW1CAAAATvF1bUIAAIAZlnZtQgAAAOU6d21CAACAsN93bUIAAAB8hHhtQgAAgEcpeW1CAAAAE855bUIAAIDecnptQgAAAKoXe21CAACAdbx7bUIAAABBYXxtQgAAgAwGfW1CAAAA2Kp9bUIAAICjT35tQgAAAG/0fm1CAACAOpl/bUIAAAAGPoBtQgAAgNHigG1CAAAAnYeBbUIAAIBoLIJtQgAAADTRgm1CAACA/3WDbUIAAADLGoRtQgAAgJa/hG1CAAAAYmSFbUIAAIAtCYZtQgAAAPmthm1CAACAxFKHbUIAAACQ94dtQgAAgFuciG1CAAAAJ0GJbUIAAIDy5YltQgAAAL6Kim1CAACAiS+LbUIAAABV1IttQgAAgCB5jG1CAAAA7B2NbUIAAIC3wo1tQgAAAINnjm1CAACATgyPbUIAAAAasY9tQgAAgOVVkG1CAAAAsfqQbUIAAIB8n5FtQgAAAEhEkm1CAACAE+mSbUIAAADfjZNtQgAAgKoylG1CAAAAdteUbUIAAIBBfJVtQgAAAA0hlm1CAACA2MWWbUIAAACkapdtQgAAgG8PmG1CAAAAO7SYbUIAAIAGWZltQgAAANL9mW1CAACAnaKabUIAAABpR5ttQgAAgDTsm21CAAAAAJGcbUIAAIDLNZ1tQgAAAJfanW1CAACAYn+ebUIAAAAuJJ9tQgAAgPnIn21CAAAAxW2gbUIAAICQEqFtQgAAAFy3oW1CAACAJ1yibUIAAADzAKNtQgAAgL6lo21CAAAAikqkbUIAAIBV76RtQgAAACGUpW1CAACA7DimbUIAAAC43aZtQgAAgIOCp21CAAAATyeobUIAAIAazKhtQgAAAOZwqW1CAACAsRWqbUIAAAB9uqptQgAAgEhfq21CAAAAFASsbUIAAIDfqKxtQgAAAKtNrW1CAACAdvKtbUIAAABCl65tQgAAgA08r21CAAAA2eCvbUIAAICkhbBtQgAAAHAqsW1CAACAO8+xbUIAAAAHdLJtQgAAgNIYs21CAAAAnr2zbUIAAIBpYrRtQgAAADUHtW1CAACAAKy1bUIAAADMULZtQgAAgJf1tm1CAAAAY5q3bUIAAIAuP7htQgAAAPrjuG1CAACAxYi5bUIAAACRLbptQgAAgFzSum1CAAAAKHe7bUIAAIDzG7xtQgAAAL/AvG1CAACAimW9bUIAAABWCr5tQgAAgCGvvm1CAAAA7VO/bUIAAIC4+L9tQgAAAISdwG1CAACAT0LBbUIAAAAb58FtQgAAgOaLwm1CAAAAsjDDbUIAAIB91cNtQgAAAEl6xG1CAACAFB/FbUIAAADgw8VtQgAAgKtoxm1CAAAAdw3HbUIAAIBCssdtQgAAAA5XyG1CAACA2fvIbUIAAACloMltQgAAgHBFym1CAAAAPOrKbUIAAIAHj8ttQgAAANMzzG1CAACAntjMbUIAAABqfc1tQgAAgDUizm1CAAAAAcfObUIAAIDMa89tQgAAAJgQ0G1CAACAY7XQbUIAAAAvWtFtQgAAgPr+0W1CAAAAxqPSbUIAAICRSNNtQgAAAF3t021CAACAKJLUbUIAAAD0NtVtQgAAgL/b1W1CAAAAi4DWbUIAAIBWJddtQgAAACLK121CAACA7W7YbUIAAAC5E9ltQgAAgIS42W1CAAAAUF3abUIAAIAbAtttQgAAAOem221CAACAskvcbUIAAAB+8NxtQgAAgEmV3W1CAAAAFTrebUIAAIDg3t5tQgAAAKyD321CAACAdyjgbUIAAABDzeBtQgAAgA5y4W1CAAAA2hbibUIAAIClu+JtQgAAAHFg421CAACAPAXkbUIAAAAIquRtQgAAgNNO5W1CAAAAn/PlbUIAAIBqmOZtQgAAADY9521CAACAAeLnbUIAAADNhuhtQgAAgJgr6W1CAAAAZNDpbUIAAIAvdeptQgAAAPsZ621CAACAxr7rbUIAAACSY+xtQgAAgF0I7W1CAAAAKa3tbUIAAID0Ue5tQgAAAMD27m1CAACAi5vvbUIAAABXQPBtQgAAgCLl8G1CAAAA7onxbUIAAIC5LvJtQgAAAIXT8m1CAACAUHjzbUIAAAAcHfRtQgAAgOfB9G1CAAAAs2b1bUIAAIB+C/ZtQgAAAEqw9m1CAACAFVX3bUIAAADh+fdtQgAAgKye+G1CAAAAeEP5bUIAAIBD6PltQgAAAA+N+m1CAACA2jH7bUIAAACm1vttQgAAgHF7/G1CAAAAPSD9bUIAAIAIxf1tQgAAANRp/m1CAACAnw7/bUIAAABrs/9tQgAAgDZYAG5CAAAAAv0AbkIAAIDNoQFuQgAAAJlGAm5CAACAZOsCbkIAAAAwkANuQgAAgPs0BG5CAAAAx9kEbkIAAICSfgVuQgAAAF4jBm5CAACAKcgGbkIAAAD1bAduQgAAgMARCG5CAAAAjLYIbkIAAIBXWwluQgAAACMACm5CAACA7qQKbkIAAAC6SQtuQgAAgIXuC25CAAAAUZMMbkIAAIAcOA1uQgAAAOjcDW5CAACAs4EObkIAAAB/Jg9uQgAAgErLD25CAAAAFnAQbkI\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]},\"value\":{\"__ndarray__\":\"2apWuQq+yL+gZuTU/6PPv16agp42kNK/AuJuaTYB3L/1dgHgdDTJvz3NYLliG8i/UriBQpdF0D+4TZjz217mP0AiSfSKes6/4FhhaKFE2j+0zzq3Q7TnPxcbvXoCrPO/guy6LBsz+b9ibCDx0dIDwN+KTLbaEAjA+BhZFAUpA8C+jeNhzFwBwJwA6TLFGdO/oTtk6hci7L+y5lzhqPjyv93liESHYPe/ikYGbBbY9b8uWQTtX0gBwHJQuLlgFg3AW2XmYi2uDsCakdAjdHURwFY0APr0fRLAFzBJV4XsFMBCvhwNOQQZwEw8dz6NHhfAKeGxsYuIGsCShmsYLlIfwFLXaZ6nJRzA5/JoBvYNHsAZItVrrxYgwNbdXy0GgRrALwsNJTPGEsDYE25QdH8ZwGhZ5SQj4xjACiwB0uEBGMBTGlTcqL8WwEwHgBATwhPALLO+un/5EsAOvt9FliYbwBoPZ9D+XhXAHm4kWluAGMBay79pmJkcwK6ooU4YFRrAAhuIkl/AHsBQ94GkTModwEe0/YGnsiDACF4mUZqeI8AIqxyDCkgmwDFtmOoD8CLAsbUy8VNdIsCli3tYDbYhwK5VmFvboyLAzo82F408IMCyrDozXaQjwHr6R+XnrR7AEmFwyhwiHMAA8sgOZCQawB1Q7CCy3RvAYlFH1ZyRHsBN9wzPoK0YwOCJPQW1AxTAoMSFhLwbFcC1Qdb2nrIYwGg+PfBd9RLAwAlM1+9vC8CxRctuhLUQwCadHyze5QvABAPC6bdrC8AbOPRiBQX3v1el8LMyqPK/gRYeqYMl+r+MO+MaEQnXv2yoJcmdSt+/VGtIEyyyB8A8Snd2TBT/v7wgxCkC9eu//JVa2tyY+b9nHJ1LzGsJwOWD3NJf8wLAYdf2AYGhAMCQqeXbA2kHwLa0kyRFtwrANzUXTL8AE8Afk4mgWFIRwLjC1F4SxQ7AtZ4Ep8DHEMCEZ98REbsMwBPq/3B+rhDAVsdiiuk/EcCvpxPn0A4SwCjR4K/WShDAKKh4EkrXCsA+d1wiasUHwGh8UjaKKQ/AaPdNmDXNA8BHw1DzZuQQwPMeWk5ergfAV10VdCorBMAiqIGVHmYNwHxu4Na+jwzA3u0Ow+zYC8ApcK2NyM8IwGuZOu1xbgbAXA7lnP9dDcBcV4nqvecFwDVeG6o6rPG/DpgMf1lmBsAd3ncbD0kHwHUKjPhV+gPAze4ZpHlFCMD31KM6ej7/v2+GRERKugTAeA6x/v9v+79k12sQNyfnv1yrDCm0fPi/pIDlp355AsCGwxbGNE75v24O7g2I5gPActpiT6mfAsBcx27Sn00EwB2GSR186xDA2hpoBf2KBMA57MfVneAQwANpooHpGxPAII0zd6UYGcCH5TV+8oIZwPhIYlLuyxzA+jx5WCZYHMDuRgcJ0PYbwEh+xWI6ER3A8DE9prIlH8DMTztP/CUfwJkMx5aHRiHAMXP2m4QYIsArv1HLVpsjwGy4mRHdtiLAiBKogMjRHcBcv70COQokwE2nwx3qBCXA6K3whxIaJsBg4Za4B9AmwEGXH3jm9SbA4XaeCj2lJsCMLfnGRssnwLk7H7mOiCfAOP0aPXI7KMBDqJEARfIlwGRBGZIqGCbArdRzcdWOI8BIhllbogwkwOqJici5yiTANH7SDHiaI8BIAoTt2NggwPi3suDn7iLAd8xQQGiBIcAJcglLB3sjwF1xKLQHxiTADLxfRpdVJ8DsJcvhYL4pwPXbDOPBeSjAeQ+4+ZVsKMAP5E1HJKQjwOkM1/y+giHA4rbmL9GKIsCtfSPpZzgiwBl8oXHlrCLAc3AT9Nt/IcBovRJ3uyUiwBW3mwR0dyDAJQyrIlYyHsAy2BXSWy0bwL1MbiSm+h/AOCC+y9M7GcAdJtXfUNYawA9Fd10R5x7AiIq9VI5oG8CVF9qWuk4iwF34HKnVEiLAofwr74YbJMCFIcCFyaAgwOJDd9JO7STAhyqCiYoBKcB4kzvkj6wowJw7WXvimivAPublU4k6KsCT8C4l7L0swGFbGJSYHyvAMPUg8WIaLcDQe+xrgPgrwJD6Dc1iVy3ARq313idiLMAvPc0oOx4wwL5mLoGpri/Ap1hSgXvUMcAMkBzXLRcxwMuLgnthgjDAbKsZacUdMcDphNC1mxcywJH2lF0C6zHAtSbM1jjrMcBINpVL+b0ywJjhssYsEDPAYFMRYCjrMsBvYdjeVqczwG1FKKSeYTPAeuQtQzNBM8Dfp1xeaoA0wLxip8uaKTXAN8YHCLXONcA/4IqZBG81wPtQ/aajZTbAMjjElfv+NMAZ86AtdN00wIHBAI2XrzXAVhbJ95jHNMDK1KcsRe00wJcv0YTLrTPAH8fD2EXyNMARbFCmI6Y0wPli0/Th/DPAE+kFzmr4MsCDpjcnB2gzwGSrC8BrdzTACU3Epat/NMDY6IEVMdM0wP1MuElmajXA8rayDZTiNcC5tOZmY4MzwBw4Hu7T5TPAXUtxoWrJM8Dd0UB8HpcxwNlnc/bP1jLAlH5Ilgs8M8AoKEr/sIUzwKPOizccajLA25qqoJ8QNMBjUQpuIIwzwB5+u0djdzPAgLy08MT7M8D6xYL2lq0ywLSgZy5ZlzHAnc17EqgWMcAWazAtQ4owwIn6qt5HRTDAjxywe5BALMA8sn1dFiAvwA+XnHBHGzDA+Cx0NH7KMMAUXiqE6TkwwHxWucSaDTHAy4juzYHAM8C5he5ntRs0wKW/6tOTojPA1cYol5DMMsDWwnqk7MozwDwiDBREkzPAcVvgNhgmM8Br9J0VNPkzwI+4jF+6XzTA1RJ1gQTjNMAIQVJ3UqI0wE45bgAnrTTAQrw4+29kNMCzqBJ/DdA1wL7x1PYrpjbAixqEApx3NcDbn8rgNNU1wN7+l12iUzfAJxskYVUUOcDHmelNdzE6wIxkq2NXOzjAz1qjcKgLOcC7Lwfxfu05wCx+A5pAZDrABNntKLKHO8BG0lYO2Xo7wNXExrmIQjrAJ/LIu/msOsDs2UNfss85wFSXz5aFfTrAhIHHwdCgO8CPvyQGxlg7wNdjvyiR6DrAE4BSIptfOsCDBgduzdg6wPh6phUp3zrAVDRkSwfIOcAeCJ/qgFc5wJFWITDcBTjA5/ZVmcIzNsBbMmm8YKw2wFzjVQb+rjbAOeGYapZHNsDmbTyJU4c1wGET6D+lYDXAD6qtQBOgNcDRfLeK6x02wNvRzMEc5TXAhG3OrPaiNsAwuMlOU1E2wDszWEXOpDbAU1boWPSkNsBruZzNYHE3wP9zNr9HaTnAjPynGslROsC998tHliI6wLi5XPWw/DjA+B7gGQKhN8AQPj3JjtY2wJdXQkRwLjXAdoEPUCwiNcBcuJtSHVg1wMJRq7pDyzbAolWu3H0oN8BGq4UNqDI2wBvQLZPYJzjAxW9edtOKOMANSP87hjk4wFlDK//OwDjAVDHgJdLwOcAGxoDhVcY6wEERbuRdjzvAMHySnyFWO8AP5tx6jIE8wNAQfTF9ET7Aqd1GffdyPMCd+la9yy0+wO90JgkQ4D7AJsVsoe2sPsD5y05/gi9AwBarECJkTkDAHUrb2oLCP8CLq/IIs9s+wBzQB8BYKT/A+HIyHBq4P8DioXZK/io/wGb3bNHVFT/AiqE2CD6mP8Ce8HsobC5AwKZqhCFSxT/AgDfErc4XQMCkEK7aNAlAwJ8lNqIWCj/A41Kw0PwFQMDGsexPZMJAwDqf1CsM2EDAlGQ5LD0VQcDyjh1oZV5BwMYqdgar1kHAvaTWOdLQQMCt4XqDc+ZAwC8SOi4HykDA57NRdmnhQMCWP9px3X1BwKAcH16UjUDALvSEUaXtQMAuse23LatAwMFB88Kuw0DADgouYLUqQMADqZeCvV5AwPz43jVAAUDAIK2/FeqMQMCcSvwdxkFAwA5nZgm5SkDA7dSmMTrxQMDg4o0nss9BwH/f2awLLkLAbooPLcT6QcBm7EMhyFJBwFcOYEh1/0DA7LkVVBXVQMAWWAWpJ7FBwHKYOdQGaUHAHnuBbZCZQcCdGQ1tRTdBwJyrXneHq0DAacSK2nzqQMDgYZUr8wRAwK58ExSYCUDASGvqlwYIQMCyv4onCvY+wD3XtEHa0j7AWYZ5BGsbQMBMmp/Q7kpAwF2qrHqCJEHAp01ccxhUQMA4NN0eKMFAwB4lmx9Vz0DAJO7cCRDvQMCzOqNoQ0dBwLiUWY56xUHA2P3fnfstQsAuiXEy2vRCwOWtlnmyhkLAYN//rrmGQsAN9OWbIgJDwC9Wwu4ZMELAKEAKi/BkQsD3QaflwahBwIL4/YsE80HAgpvGKq3bQcD0xdjKcdhBwEIpziIQKEHAZCaoGEhTQMA0j8ITB9U/wO1xyIld6z/AMQ25iVl5P8C60khX87E+wACxFxShlj/AsS3SIJ5cQMB5gP6XuFxAwB1CfCudiUDAbx3MBjLNQMCXyljVZcZAwJpCTIwmhUDAx3w4st55QMBfEFM4pBRBwBu72t9cs0HAcWsSgNd3QcCRY7cvRYRBwCsF4AN+jkHAA3mR/88JQcCuwTvRrvI/wEZFLNA8QEDAyuHeh2raQMD8isOgLolBwMh0z6xNn0DAKTy8nrK6QMCzNQVit3g/wKwhUUldzT7A4zMUX1J6PsACa+0dZfg+wF/hqmoR6z/A/W8vEi4AP8BGaqje71g/wHGVRTwJ8D7AO258Oy09PsCUoBU4NTc9wL55YN0s2T3Avba1qU5KPcBWIezYkJY6wLmyEbQqITrAmWyQjSP8OcDiy+zeUOk5wFJH2DrGkTfAau2tmrJzOMDSUiWjRhA5wKJtWYZh+DjAz3zQRbDIO8BYJndxNDs8wAzOMc6VuTvAB1hyMcTeOsCkBtQ9KRI+wGxR7mL1fz3Aog9tvNS1PcBFVYsBIxM9wJw5DbWNcD7AqDT4+6O+PcC5YQX2BL89wHkIeqOUhj3AEKwVZ7/OPcB7CkqY9n88wOOWji5iET3AUR9iVnfSPMCux+o8Kcg7wNVqRveUYzvAOKY00O2hOsA0/JcUubU7wO2aMz0lETvAciu+gOTqOcBNEUeSCBk6wKK+xUEDGTvAX4IyyKqQO8BBsFHzCH07wGj/NER8zjvAJHDMtcTMO8AISJnJMOo8wDRg3fqGPD7ANm4KENKfP8BCO3+RfEo/wEK6y+mh/z/A7+u3K7i9P8Asp4T5L/A9wA9alGhqojzA9KRs5I+UOsCMTsvYLKI7wBdWpLxT5TrASVdDaUKjO8CtK1TxgrM7wMovcX/WETrAU2upmvDjOcBqu/ra8o06wJ3NzMzHKzvAqqF21iNVOsBQu4ht5eA6wE+pN5qctjzAqJ6VEqbTO8AKNQeBohU7wBFehza8EDzA0qS/naH3OsBzbztWic86wPcHtVHe3jrAJIOpTPUiPMBBPfRRSOk8wGT7wTbqFzzAox1wOpfIPsDHDumLnkQ/wMBDo7IZ0T/AFWumcNf0P8Aws/jrkOA+wLjXTs1/9T7AD790t9iUPsCzdh9AQxk+wMtHLWKNiT7AT0En78p2PcA/tAqDsXE9wPdCJJnCdT3A6ZyF7YA0PsAzk8bskws9wOF0Rt5SID3A19rvPNlKPsBJiozt1gs+wGSiaIGrjzzAryZwo+wUO8AJC8Rgy1Q8wOTzGSNGoTvAsqgMJ3R7PMDUsAKxE1o7wLKBwJxn5jzArzD25sj2O8AU9qDiDzU7wFGCsMUtITrAIqUNzoLjOcCAmxujMf84wOSwQePfPznA7q01J2NyOcA32xYPFRk7wGQPoPNX3jnAiVqSLnorOsCLqfCcYPg5wOENbWLaCzrAAIk1wK1cOsCmVG6JPnc5wElxfeYFXjjASEOYlZ9MOcBOGNkGYYU6wMXR43ZYlDrAtetXjnTIOsB+g6SuNRc7wEhnskQD+jzAD+OLLX2YPcDMhEtcjLo7wN3En+XVxDrAvgzRpl1ROsAnGNyYpXw6wFAZAVDXADvAXgJaAmejOcATPyTUKGw7wCBgumJpgTvA08SSXRqqO8AURaI4JGI8wJqqV4ZSeTvAvmXtJHJ+OsCZrpwiBsU5wMl7QeXrqjjALBML/VsKOMDgoiKyW9o3wPs4kHDuyjjAh1oEZlS1N8AuZiR80bc3wNTCrZEVYzfAbXJ+oMdAN8AfVWpT2ts3wEpztpUSCDjAZubLVoX1N8D57Dd5biQ4wHsSEZTSEjjAhHejpQ2qOMCezG6dmW45wCRN6+HRGzrADMvTsDJbOcA0qdfzS4E7wCpoLiCMND3Al5TwlD+ZPcDeNE2pKDU+wB0bWpVZRz/AjMdXoBuXP8DdAINL4VdAwL2HD74dRUDA1EWnGuwrQMDk8Xw74r1AwAAsMff9G0HAKR9qkK/CQcAVj1RrdgFBwP4b6GFAVEHAqgT5tRNSQcDbZHqjPfhAwI8T4HL3mUHAjuHDWVtfQcCcELU6e21BwOWzELtjDEHACHXE2216QcCqXmIgt8xBwGyFa1tfDELAakOmTjPmQcAsjTIGmqZBwGkk8xR+HELAgXyU1LQcQsAn+IAnQNpAwDd0agp4BEHAdVK8ooWCQcDKCHK9JrpAwCOJkrltGEDAoX4IeHcjQMADmZJzWb0/wLv9JRQqwD7AagCxup2uPcCZhEyPiMs8wNDVwooRCT3AMN+YTNaOOsCqvniJixA8wEZk2y0+cjvA3ChPgs/+O8BB492zcDw7wGijJ4tgHzzArB8wT64xO8B4pUAjp3k6wM+h0Bs5yTvA2EwQt6kBOsC/A2F452Y6wBXk5BqqAznArJKYm1AeN8C+nAKX2os3wBhHcJ3McjfAU9RHL7bDN8Bmed0R8Q44wGdTK1kOgjjAxs9BmtwEOsASeHE33O85wEMVqjMRPDnAOvcf8aZgOMCV4r0Whts4wBuRDUTrsTjAQvhB5toBOMDyCzFk8183wOB7hFF08zbAj34Y5Q5MN8D83DWVwQs5wA28O6TTRjjAzkpQ/GdhOMBzq8TIqNM4wCMlX7bkSDnA/v6mVMT9OMBfKG8osbw3wBZS+GuP0TjAFj8b+A6xOcCydAd7/3k5wNGBhmT/cjjANfqw4CafOMCTtcCbPmg5wDBmC4aPITrA8YQt3QYyOsDKfnZMRso4wCwrb4tUbDjA7BTK/Wp9N8AM8AvQoFM3wFwN5a7+HjfA5SIFEhUtOMD5/X0scdQ2wJogMi2ewzbAbDLjI/7xOMCYsqFPaRo5wJvzuJpUOTjAYk6SyDJEN8ChYG4YzyE3wM8KDUBLUTfATGZ6DzCwN8DWvx1ZKNA2wPvYqeV8ajXAk+x1tN/mM8BADrFSJbM0wOfp9aF/LjbAfO8tz/RXNcDGTefwTno2wFhaGeN+czXA9EV+gvN5NsBRhdULWzU1wFlAwJHASzTA+Dd+fXfPNcB9c+Il6Wc3wMZXEJGypjbAbo/1ahHFNcA/wzgWgWo1wCC4F76rWDXAX1cryH10NsAmqpWbrI82wAAmkvipDDbAhxS5iivpMsDUHmhBEDc0wNISCdfvPzTAhm0DFS4zNMDUVXMTSeo0wBT2wiu0VTPA7enn3DeSM8CLUZ1nKH80wI0SkDnv1TPAWDyQFUoeNMBycTqVcF40wKHMbK/PuzTAeAPzKTqQNcDQOp6KqQM3wDPqDAcOczbAioB23nbENcACvLQxqTE2wLm8BjaxqzXAnvClY6umNcDYtR5Dy7I0wN23aBnX3DTAMMu42ZQqNcAmfqmX78E1wKrtjO/QBzbAzBGZBO0MOMA7B70d9YU4wLbadV0poznA7fuw7++GOsDQUKwGrR46wENGVhXQ3zjAl5x7wk3dN8Ds4jN4KpQ4wCfnsTXOUTfAYq3uLXtzN8DlydKGJKI4wDcrz83EkTnA8sBsx/opO8B3X9/FU546wABNeCZ8lTrA+K723IxvOsCKVe91PKc6wFXj/WUzpDrAn/tL4LK4OcCGLPLpKB04wKbkIOOLJzfAi7Xk9CMxNcD0m9vcNh82wP8dvRDLNDTAyemOA85uNcD9bNcdd7c1wFz5f9iwGTXApY27C74GNcBWHwHiY8ozwBHd9f25KjTAO+o0WEnhMsD7YqnGA/8ywEOmwtNHVzHAfWDNRzB9MsA4Q72lq4YzwAzGk8oVDjTAtuh7kSy3NMArd35EKkQ1wBRqxuEZJDTApwscz1+wMsDfF2NV5Z4xwI2UPc6c+jDAofb+xd1FMcDdMSZ0Ge8xwK2RWijIuDDACyMvBVkdMcAkVPegtOsxwEQpfK5srzDA9vOSm4+CMMDkcmfqKo0xwEbSrIy8ry/Ab+OIBHYNMMA0EZVIdmgvwN/KiUgTBi/ARqBW+KEXMMAwmj0BPaUwwBAVrZlXlCzA6cbQT08FMMD5kTwJIJYxwBAVVeWpTDDAPP6G6PqLMMC5J3DQkpMxwGQgeso/jDLA3s0mjbsKNMBHHiRT4Ok1wJTI6FrNRjXAMV16l6vsNMDUKkJ8zhE1wDLhhdGK9DTAookwfWMANsDd/svE7HQzwGZc8cMeyTPAPqmndaaCNMBJsAtCqgg3wEetjtii4zbAZEyb/Cg9NsB9nsWzVho1wBlKQvJAJDXA7dlMUJu2NcCLgYCKiyk3wDTHZNqknDbAsYxLhcuTN8DObN0f2zM5wCmKQVNZWDnAbZQmlKKmOsDrZdREvUI6wE+jX+DhQDrAsTQpOGFBOsAW/vrlKek6wBiP2vJrZzvAxgszFgT/OsBQ0XvU6nE7wNbsQPz69jvANsQCipW2O8CoBo/td2M5wCObAD2jsTfAlfvttZ65N8A1lN32Yhw3wDBCCbYdVDfAYCf6/bbaNsCu3TLdsVY3wOOhIJsSIjbAeknksBcVNcC3P/x5Mf40wGsMCcFbOTTA7GBzLj3zNMAfuKaRW141wLydViGfbDTAflAo7FwWNMCScnaL5IMzwAGE/wyOJDPAxOlyKzqfM8DjSyzbyB4zwAideVEunTXAMAdVGl4xNsCyCS7IhCk0wB2iwlypdTPAt3Eqiu2kM8CGgzW45PAwwMVUyLW4zTHANvLxl3gcMsCRYApx1IUwwKjKQpl00DDAqLxloAN5MsDXAq9t/5kywCEKuWhnni/AFwRocMjMMMDlH9dcB5YuwDMJi4/ACzHAc8SCI7NtMMD3NV3j4+stwBozyjz+KjDAH4qZa11eMsB+0kBErQ8xwMX3rEoPZzLApGac8cDyMsAwJ3aNQy4zwKK2FEAOazLAYUY7lz+AMsB7aWyYhWU0wPnPxRlOyzPAAxIS2PghNMBboevjxFw1wGxz4RUIjzXAJ1KJlLZXNcB0/1cl04UzwE3wwRX+CTXApZY/67EGNcAgXxK7wWw1wHF1z5uRWzbAew3/HSYBNcAYY2FBcoEywJVdgZ18BjPAyfIpXyDCMcD1lJbowxwxwPdLy1djIzHAXQx9lXHsMcCuR+R/fJYywLGe4VHfhjLAxbr5WvxjMcARoLvbWw8wwJV/GtPj+S7ASJsrUH8WMcCPOECMSYYwwNRgvGTxAC/ApwfAwYkyMMBrZ30Wqr8uwLV2WcJnxC3A07byw6xZKcBMGdH9gccowI3DY2Shdi3AEkXyyAKUL8AfQLpLyjAwwPIXjECuPzDA6BvhW7xtL8BhT/ukCgcvwII6XfIUqC7AbjtlAkLWLsAE1aBBjwAtwJPyGrMQbivAkcz1VXVJKcDi8AppBlAowH0p5W+9yCnAdglAXwXyKcCI86HO1A4qwL83v/8SCyvAWvLPHgiFK8CApZQJceArwBTKTm1vRyjAVcl0ZZq8KcCXAwZSwQcqwJvgMyB84SnA4QIH3xISKsBQoanA2QspwECC6PbhhC3Ak0ZlI+35L8DIbap90LQwwBxKhPtoxTDAZEC1F9rOMcABqYKpt0sxwOehm6K6pC7AlwKvjt3wK8DXoclbkU4qwF7pZ4jWOSnAVXhLBgA+KsBHQHlRFe0qwGFBVgdKqynAhE+E+0NNKMDGhoznr0ckwBphwtGQaiXAHko+aXjDI8Aj8Kha/dEiwOTh4ht4riLA4muYkwzkI8C0pzA/2KYhwD9BXlZBRiLAneHnC5yUIcCyz8oRVDciwAWjrtYP5BzA7/gakDivH8CwFOhS08UhwISiDKsUvSPAt3AeCGBCJcBEJ2c0iS8mwPv/hvDWLCPAuuvYcCuiJMDKWd/5Ck4mwBxT5xWo/yfAu+OPsKE9KcCUOTDt1mApwGjX7h66LSbAVT6M+iyZJcDd/4VfOUMjwET5d8iaDSXAUzce3U2yJ8DuK3qOSrEjwCHtgpxbVSPAsW/Bo/gbI8BuDVjAwb0iwMHnDXnIRiXARSoUzzAiJcBKesgxiqUlwBBfhxyW7SjA90+4T0eNKcBwHxPRD/krwB+72YUC3ivAGVfGaChiKcCtbZBzgM8lwG7l4CAIlSfA9fKtnsNTJ8ACFKUT3LEjwOmwTIlmASHA5x0KxdoXIsDIDh7C6ekhwOENVn8h+CDAUhiuxNuIHcBn8U8toMwdwLfM64/ViiDAr4ePnfP4JMC5sY5LRKEgwIy/RQYf8iDALgb9HmpxIsC/Ku6Onp8iwEfoIBMSdh/ANcfyL7toHMBCLiiv9AsawD2fnVs10hTAwK4eFAA6HMBBwETRVp4gwIqdXosQiyHAvM5AnIyYJcDW3gMh+XolwGSq7vPj5iLATCLHq7JHIcA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]}},\"selected\":{\"id\":\"1800\"},\"selection_policy\":{\"id\":\"1818\"}},\"id\":\"1799\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"end\":24.01651500631982,\"reset_end\":24.01651500631982,\"reset_start\":-43.65606265385797,\"start\":-43.65606265385797,\"tags\":[[[\"value\",\"value\",null]]]},\"id\":\"1691\",\"type\":\"Range1d\"},{\"attributes\":{\"children\":[{\"id\":\"1689\"},{\"id\":\"1696\"},{\"id\":\"2125\"}],\"margin\":[0,0,0,0],\"name\":\"Row01978\",\"tags\":[\"embedded\"]},\"id\":\"1688\",\"type\":\"Row\"},{\"attributes\":{\"days\":[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]},\"id\":\"1753\",\"type\":\"DaysTicker\"},{\"attributes\":{\"base\":60,\"mantissas\":[1,2,5,10,15,20,30],\"max_interval\":1800000.0,\"min_interval\":1000.0,\"num_minor_ticks\":0},\"id\":\"1751\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{\"line_color\":\"#fc4f30\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1798\",\"type\":\"Line\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer01982\",\"sizing_mode\":\"stretch_width\"},\"id\":\"1689\",\"type\":\"Spacer\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#e5ae38\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1804\",\"type\":\"Line\"},{\"attributes\":{\"mantissas\":[1,2,5],\"max_interval\":500.0,\"num_minor_ticks\":0},\"id\":\"1750\",\"type\":\"AdaptiveTicker\"},{\"attributes\":{},\"id\":\"1747\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"Selection\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer01983\",\"sizing_mode\":\"stretch_width\"},\"id\":\"2125\",\"type\":\"Spacer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"index\"},\"y\":{\"field\":\"value\"}},\"id\":\"1736\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"Variable\":[\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\",\"D\"],\"index\":{\"__ndarray__\":\"AACA9VmNa0IAAADB/o1rQgAAgIyjjmtCAAAAWEiPa0IAAIAj7Y9rQgAAAO+RkGtCAACAujaRa0IAAACG25FrQgAAgFGAkmtCAAAAHSWTa0IAAIDoyZNrQgAAALRulGtCAACAfxOVa0IAAABLuJVrQgAAgBZdlmtCAAAA4gGXa0IAAICtppdrQgAAAHlLmGtCAACARPCYa0IAAAAQlZlrQgAAgNs5mmtCAAAAp96aa0IAAIByg5trQgAAAD4onGtCAACACc2ca0IAAADVcZ1rQgAAgKAWnmtCAAAAbLuea0IAAIA3YJ9rQgAAAAMFoGtCAACAzqmga0IAAACaTqFrQgAAgGXzoWtCAAAAMZiia0IAAID8PKNrQgAAAMjho2tCAACAk4aka0IAAABfK6VrQgAAgCrQpWtCAAAA9nSma0IAAIDBGadrQgAAAI2+p2tCAACAWGOoa0IAAAAkCKlrQgAAgO+sqWtCAAAAu1Gqa0IAAICG9qprQgAAAFKbq2tCAACAHUCsa0IAAADp5KxrQgAAgLSJrWtCAAAAgC6ua0IAAIBL065rQgAAABd4r2tCAACA4hywa0IAAACuwbBrQgAAgHlmsWtCAAAARQuya0IAAIAQsLJrQgAAANxUs2tCAACAp/mza0IAAABznrRrQgAAgD5DtWtCAAAACui1a0IAAIDVjLZrQgAAAKExt2tCAACAbNa3a0IAAAA4e7hrQgAAgAMguWtCAAAAz8S5a0IAAICaabprQgAAAGYOu2tCAACAMbO7a0IAAAD9V7xrQgAAgMj8vGtCAAAAlKG9a0IAAIBfRr5rQgAAACvrvmtCAACA9o+/a0IAAADCNMBrQgAAgI3ZwGtCAAAAWX7Ba0IAAIAkI8JrQgAAAPDHwmtCAACAu2zDa0IAAACHEcRrQgAAgFK2xGtCAAAAHlvFa0IAAIDp/8VrQgAAALWkxmtCAACAgEnHa0IAAABM7sdrQgAAgBeTyGtCAAAA4zfJa0IAAICu3MlrQgAAAHqBymtCAACARSbLa0IAAAARy8trQgAAgNxvzGtCAAAAqBTNa0IAAIBzuc1rQgAAAD9ezmtCAACACgPPa0IAAADWp89rQgAAgKFM0GtCAAAAbfHQa0IAAIA4ltFrQgAAAAQ70mtCAACAz9/Sa0IAAACbhNNrQgAAgGYp1GtCAAAAMs7Ua0IAAID9ctVrQgAAAMkX1mtCAACAlLzWa0IAAABgYddrQgAAgCsG2GtCAAAA96rYa0IAAIDCT9lrQgAAAI702WtCAACAWZnaa0IAAAAlPttrQgAAgPDi22tCAAAAvIfca0IAAICHLN1rQgAAAFPR3WtCAACAHnbea0IAAADqGt9rQgAAgLW/32tCAAAAgWTga0IAAIBMCeFrQgAAABiu4WtCAACA41Lia0IAAACv9+JrQgAAgHqc42tCAAAARkHka0IAAIAR5uRrQgAAAN2K5WtCAACAqC/ma0IAAAB01OZrQgAAgD9552tCAAAACx7oa0IAAIDWwuhrQgAAAKJn6WtCAACAbQzqa0IAAAA5seprQgAAgARW62tCAAAA0Prra0IAAICbn+xrQgAAAGdE7WtCAACAMunta0IAAAD+je5rQgAAgMky72tCAAAAldfva0IAAIBgfPBrQgAAACwh8WtCAACA98Xxa0IAAADDavJrQgAAgI4P82tCAAAAWrTza0IAAIAlWfRrQgAAAPH99GtCAACAvKL1a0IAAACIR/ZrQgAAgFPs9mtCAAAAH5H3a0IAAIDqNfhrQgAAALba+GtCAACAgX/5a0IAAABNJPprQgAAgBjJ+mtCAAAA5G37a0IAAICvEvxrQgAAAHu3/GtCAACARlz9a0IAAAASAf5rQgAAgN2l/mtCAAAAqUr/a0IAAIB07/9rQgAAAECUAGxCAACACzkBbEIAAADX3QFsQgAAgKKCAmxCAAAAbicDbEIAAIA5zANsQgAAAAVxBGxCAACA0BUFbEIAAACcugVsQgAAgGdfBmxCAAAAMwQHbEIAAID+qAdsQgAAAMpNCGxCAACAlfIIbEIAAABhlwlsQgAAgCw8CmxCAAAA+OAKbEIAAIDDhQtsQgAAAI8qDGxCAACAWs8MbEIAAAAmdA1sQgAAgPEYDmxCAAAAvb0ObEIAAICIYg9sQgAAAFQHEGxCAACAH6wQbEIAAADrUBFsQgAAgLb1EWxCAAAAgpoSbEIAAIBNPxNsQgAAABnkE2xCAACA5IgUbEIAAACwLRVsQgAAgHvSFWxCAAAAR3cWbEIAAIASHBdsQgAAAN7AF2xCAACAqWUYbEIAAAB1ChlsQgAAgECvGWxCAAAADFQabEIAAIDX+BpsQgAAAKOdG2xCAACAbkIcbEIAAAA65xxsQgAAgAWMHWxCAAAA0TAebEIAAICc1R5sQgAAAGh6H2xCAACAMx8gbEIAAAD/wyBsQgAAgMpoIWxCAAAAlg0ibEIAAIBhsiJsQgAAAC1XI2xCAACA+PsjbEIAAADEoCRsQgAAgI9FJWxCAAAAW+olbEIAAIAmjyZsQgAAAPIzJ2xCAACAvdgnbEIAAACJfShsQgAAgFQiKWxCAAAAIMcpbEIAAIDraypsQgAAALcQK2xCAACAgrUrbEIAAABOWixsQgAAgBn/LGxCAAAA5aMtbEIAAICwSC5sQgAAAHztLmxCAACAR5IvbEIAAAATNzBsQgAAgN7bMGxCAAAAqoAxbEIAAIB1JTJsQgAAAEHKMmxCAACADG8zbEIAAADYEzRsQgAAgKO4NGxCAAAAb101bEIAAIA6AjZsQgAAAAanNmxCAACA0Us3bEIAAACd8DdsQgAAgGiVOGxCAAAANDo5bEIAAID/3jlsQgAAAMuDOmxCAACAlig7bEIAAABizTtsQgAAgC1yPGxCAAAA+RY9bEIAAIDEuz1sQgAAAJBgPmxCAACAWwU/bEIAAAAnqj9sQgAAgPJOQGxCAAAAvvNAbEIAAICJmEFsQgAAAFU9QmxCAACAIOJCbEIAAADshkNsQgAAgLcrRGxCAAAAg9BEbEIAAIBOdUVsQgAAABoaRmxCAACA5b5GbEIAAACxY0dsQgAAgHwISGxCAAAASK1IbEIAAIATUklsQgAAAN/2SWxCAACAqptKbEIAAAB2QEtsQgAAgEHlS2xCAAAADYpMbEIAAIDYLk1sQgAAAKTTTWxCAACAb3hObEIAAAA7HU9sQgAAgAbCT2xCAAAA0mZQbEIAAICdC1FsQgAAAGmwUWxCAACANFVSbEIAAAAA+lJsQgAAgMueU2xCAAAAl0NUbEIAAIBi6FRsQgAAAC6NVWxCAACA+TFWbEIAAADF1lZsQgAAgJB7V2xCAAAAXCBYbEIAAIAnxVhsQgAAAPNpWWxCAACAvg5abEIAAACKs1psQgAAgFVYW2xCAAAAIf1bbEIAAIDsoVxsQgAAALhGXWxCAACAg+tdbEIAAABPkF5sQgAAgBo1X2xCAAAA5tlfbEIAAICxfmBsQgAAAH0jYWxCAACASMhhbEIAAAAUbWJsQgAAgN8RY2xCAAAAq7ZjbEIAAIB2W2RsQgAAAEIAZWxCAACADaVlbEIAAADZSWZsQgAAgKTuZmxCAAAAcJNnbEIAAIA7OGhsQgAAAAfdaGxCAACA0oFpbEIAAACeJmpsQgAAgGnLamxCAAAANXBrbEIAAIAAFWxsQgAAAMy5bGxCAACAl15tbEIAAABjA25sQgAAgC6obmxCAAAA+kxvbEIAAIDF8W9sQgAAAJGWcGxCAACAXDtxbEIAAAAo4HFsQgAAgPOEcmxCAAAAvylzbEIAAICKznNsQgAAAFZzdGxCAACAIRh1bEIAAADtvHVsQgAAgLhhdmxCAAAAhAZ3bEIAAIBPq3dsQgAAABtQeGxCAACA5vR4bEIAAACymXlsQgAAgH0+emxCAAAASeN6bEIAAIAUiHtsQgAAAOAsfGxCAACAq9F8bEIAAAB3dn1sQgAAgEIbfmxCAAAADsB+bEIAAIDZZH9sQgAAAKUJgGxCAACAcK6AbEIAAAA8U4FsQgAAgAf4gWxCAAAA05yCbEIAAICeQYNsQgAAAGrmg2xCAACANYuEbEIAAAABMIVsQgAAgMzUhWxCAAAAmHmGbEIAAIBjHodsQgAAAC/Dh2xCAACA+meIbEIAAADGDIlsQgAAgJGxiWxCAAAAXVaKbEIAAIAo+4psQgAAAPSfi2xCAACAv0SMbEIAAACL6YxsQgAAgFaOjWxCAAAAIjOObEIAAIDt145sQgAAALl8j2xCAACAhCGQbEIAAABQxpBsQgAAgBtrkWxCAAAA5w+SbEIAAICytJJsQgAAAH5Zk2xCAACASf6TbEIAAAAVo5RsQgAAgOBHlWxCAAAArOyVbEIAAIB3kZZsQgAAAEM2l2xCAACADtuXbEIAAADaf5hsQgAAgKUkmWxCAAAAccmZbEIAAIA8bppsQgAAAAgTm2xCAACA07ebbEIAAACfXJxsQgAAgGoBnWxCAAAANqadbEIAAIABS55sQgAAAM3vnmxCAACAmJSfbEIAAABkOaBsQgAAgC/eoGxCAAAA+4KhbEIAAIDGJ6JsQgAAAJLMomxCAACAXXGjbEIAAAApFqRsQgAAgPS6pGxCAAAAwF+lbEIAAICLBKZsQgAAAFeppmxCAACAIk6nbEIAAADu8qdsQgAAgLmXqGxCAAAAhTypbEIAAIBQ4alsQgAAAByGqmxCAACA5yqrbEIAAACzz6tsQgAAgH50rGxCAAAAShmtbEIAAIAVvq1sQgAAAOFirmxCAACArAevbEIAAAB4rK9sQgAAgENRsGxCAAAAD/awbEIAAIDamrFsQgAAAKY/smxCAACAceSybEIAAAA9ibNsQgAAgAgutGxCAAAA1NK0bEIAAICfd7VsQgAAAGsctmxCAACANsG2bEIAAAACZrdsQgAAgM0KuGxCAAAAma+4bEIAAIBkVLlsQgAAADD5uWxCAACA+526bEIAAADHQrtsQgAAgJLnu2xCAAAAXoy8bEIAAIApMb1sQgAAAPXVvWxCAACAwHq+bEIAAACMH79sQgAAgFfEv2xCAAAAI2nAbEIAAIDuDcFsQgAAALqywWxCAACAhVfCbEIAAABR/MJsQgAAgByhw2xCAAAA6EXEbEIAAICz6sRsQgAAAH+PxWxCAACASjTGbEIAAAAW2cZsQgAAgOF9x2xCAAAArSLIbEIAAIB4x8hsQgAAAERsyWxCAACADxHKbEIAAADbtcpsQgAAgKZay2xCAAAAcv/LbEIAAIA9pMxsQgAAAAlJzWxCAACA1O3NbEIAAACgks5sQgAAgGs3z2xCAAAAN9zPbEIAAIACgdBsQgAAAM4l0WxCAACAmcrRbEIAAABlb9JsQgAAgDAU02xCAAAA/LjTbEIAAIDHXdRsQgAAAJMC1WxCAACAXqfVbEIAAAAqTNZsQgAAgPXw1mxCAAAAwZXXbEIAAICMOthsQgAAAFjf2GxCAACAI4TZbEIAAADvKNpsQgAAgLrN2mxCAAAAhnLbbEIAAIBRF9xsQgAAAB283GxCAACA6GDdbEIAAAC0Bd5sQgAAgH+q3mxCAAAAS0/fbEIAAIAW9N9sQgAAAOKY4GxCAACArT3hbEIAAAB54uFsQgAAgESH4mxCAAAAECzjbEIAAIDb0ONsQgAAAKd15GxCAACAchrlbEIAAAA+v+VsQgAAgAlk5mxCAAAA1QjnbEIAAICgredsQgAAAGxS6GxCAACAN/fobEIAAAADnOlsQgAAgM5A6mxCAAAAmuXqbEIAAIBliutsQgAAADEv7GxCAACA/NPsbEIAAADIeO1sQgAAgJMd7mxCAAAAX8LubEIAAIAqZ+9sQgAAAPYL8GxCAACAwbDwbEIAAACNVfFsQgAAgFj68WxCAAAAJJ/ybEIAAIDvQ/NsQgAAALvo82xCAACAho30bEIAAABSMvVsQgAAgB3X9WxCAAAA6Xv2bEIAAIC0IPdsQgAAAIDF92xCAACAS2r4bEIAAAAXD/lsQgAAgOKz+WxCAAAArlj6bEIAAIB5/fpsQgAAAEWi+2xCAACAEEf8bEIAAADc6/xsQgAAgKeQ/WxCAAAAczX+bEIAAIA+2v5sQgAAAAp//2xCAACA1SMAbUIAAAChyABtQgAAgGxtAW1CAAAAOBICbUIAAIADtwJtQgAAAM9bA21CAACAmgAEbUIAAABmpQRtQgAAgDFKBW1CAAAA/e4FbUIAAIDIkwZtQgAAAJQ4B21CAACAX90HbUIAAAArgghtQgAAgPYmCW1CAAAAwssJbUIAAICNcAptQgAAAFkVC21CAACAJLoLbUIAAADwXgxtQgAAgLsDDW1CAAAAh6gNbUIAAIBSTQ5tQgAAAB7yDm1CAACA6ZYPbUIAAAC1OxBtQgAAgIDgEG1CAAAATIURbUIAAIAXKhJtQgAAAOPOEm1CAACArnMTbUIAAAB6GBRtQgAAgEW9FG1CAAAAEWIVbUIAAIDcBhZtQgAAAKirFm1CAACAc1AXbUIAAAA/9RdtQgAAgAqaGG1CAAAA1j4ZbUIAAICh4xltQgAAAG2IGm1CAACAOC0bbUIAAAAE0httQgAAgM92HG1CAAAAmxsdbUIAAIBmwB1tQgAAADJlHm1CAACA/QkfbUIAAADJrh9tQgAAgJRTIG1CAAAAYPggbUIAAIArnSFtQgAAAPdBIm1CAACAwuYibUIAAACOiyNtQgAAgFkwJG1CAAAAJdUkbUIAAIDweSVtQgAAALweJm1CAACAh8MmbUIAAABTaCdtQgAAgB4NKG1CAAAA6rEobUIAAIC1ViltQgAAAIH7KW1CAACATKAqbUIAAAAYRSttQgAAgOPpK21CAAAAr44sbUIAAIB6My1tQgAAAEbYLW1CAACAEX0ubUIAAADdIS9tQgAAgKjGL21CAAAAdGswbUIAAIA/EDFtQgAAAAu1MW1CAACA1lkybUIAAACi/jJtQgAAgG2jM21CAAAAOUg0bUIAAIAE7TRtQgAAANCRNW1CAACAmzY2bUIAAABn2zZtQgAAgDKAN21CAAAA/iQ4bUIAAIDJyThtQgAAAJVuOW1CAACAYBM6bUIAAAAsuDptQgAAgPdcO21CAAAAwwE8bUIAAICOpjxtQgAAAFpLPW1CAACAJfA9bUIAAADxlD5tQgAAgLw5P21CAAAAiN4/bUIAAIBTg0BtQgAAAB8oQW1CAACA6sxBbUIAAAC2cUJtQgAAgIEWQ21CAAAATbtDbUIAAIAYYERtQgAAAOQERW1CAACAr6lFbUIAAAB7TkZtQgAAgEbzRm1CAAAAEphHbUIAAIDdPEhtQgAAAKnhSG1CAACAdIZJbUIAAABAK0ptQgAAgAvQSm1CAAAA13RLbUIAAICiGUxtQgAAAG6+TG1CAACAOWNNbUIAAAAFCE5tQgAAgNCsTm1CAAAAnFFPbUIAAIBn9k9tQgAAADObUG1CAACA/j9RbUIAAADK5FFtQgAAgJWJUm1CAAAAYS5TbUIAAIAs01NtQgAAAPh3VG1CAACAwxxVbUIAAACPwVVtQgAAgFpmVm1CAAAAJgtXbUIAAIDxr1dtQgAAAL1UWG1CAACAiPlYbUIAAABUnlltQgAAgB9DWm1CAAAA6+dabUIAAIC2jFttQgAAAIIxXG1CAACATdZcbUIAAAAZe11tQgAAgOQfXm1CAAAAsMRebUIAAIB7aV9tQgAAAEcOYG1CAACAErNgbUIAAADeV2FtQgAAgKn8YW1CAAAAdaFibUIAAIBARmNtQgAAAAzrY21CAACA149kbUIAAACjNGVtQgAAgG7ZZW1CAAAAOn5mbUIAAIAFI2dtQgAAANHHZ21CAACAnGxobUIAAABoEWltQgAAgDO2aW1CAAAA/1pqbUIAAIDK/2ptQgAAAJaka21CAACAYUlsbUIAAAAt7mxtQgAAgPiSbW1CAAAAxDdubUIAAICP3G5tQgAAAFuBb21CAACAJiZwbUIAAADyynBtQgAAgL1vcW1CAAAAiRRybUIAAIBUuXJtQgAAACBec21CAACA6wJ0bUIAAAC3p3RtQgAAgIJMdW1CAAAATvF1bUIAAIAZlnZtQgAAAOU6d21CAACAsN93bUIAAAB8hHhtQgAAgEcpeW1CAAAAE855bUIAAIDecnptQgAAAKoXe21CAACAdbx7bUIAAABBYXxtQgAAgAwGfW1CAAAA2Kp9bUIAAICjT35tQgAAAG/0fm1CAACAOpl/bUIAAAAGPoBtQgAAgNHigG1CAAAAnYeBbUIAAIBoLIJtQgAAADTRgm1CAACA/3WDbUIAAADLGoRtQgAAgJa/hG1CAAAAYmSFbUIAAIAtCYZtQgAAAPmthm1CAACAxFKHbUIAAACQ94dtQgAAgFuciG1CAAAAJ0GJbUIAAIDy5YltQgAAAL6Kim1CAACAiS+LbUIAAABV1IttQgAAgCB5jG1CAAAA7B2NbUIAAIC3wo1tQgAAAINnjm1CAACATgyPbUIAAAAasY9tQgAAgOVVkG1CAAAAsfqQbUIAAIB8n5FtQgAAAEhEkm1CAACAE+mSbUIAAADfjZNtQgAAgKoylG1CAAAAdteUbUIAAIBBfJVtQgAAAA0hlm1CAACA2MWWbUIAAACkapdtQgAAgG8PmG1CAAAAO7SYbUIAAIAGWZltQgAAANL9mW1CAACAnaKabUIAAABpR5ttQgAAgDTsm21CAAAAAJGcbUIAAIDLNZ1tQgAAAJfanW1CAACAYn+ebUIAAAAuJJ9tQgAAgPnIn21CAAAAxW2gbUIAAICQEqFtQgAAAFy3oW1CAACAJ1yibUIAAADzAKNtQgAAgL6lo21CAAAAikqkbUIAAIBV76RtQgAAACGUpW1CAACA7DimbUIAAAC43aZtQgAAgIOCp21CAAAATyeobUIAAIAazKhtQgAAAOZwqW1CAACAsRWqbUIAAAB9uqptQgAAgEhfq21CAAAAFASsbUIAAIDfqKxtQgAAAKtNrW1CAACAdvKtbUIAAABCl65tQgAAgA08r21CAAAA2eCvbUIAAICkhbBtQgAAAHAqsW1CAACAO8+xbUIAAAAHdLJtQgAAgNIYs21CAAAAnr2zbUIAAIBpYrRtQgAAADUHtW1CAACAAKy1bUIAAADMULZtQgAAgJf1tm1CAAAAY5q3bUIAAIAuP7htQgAAAPrjuG1CAACAxYi5bUIAAACRLbptQgAAgFzSum1CAAAAKHe7bUIAAIDzG7xtQgAAAL/AvG1CAACAimW9bUIAAABWCr5tQgAAgCGvvm1CAAAA7VO/bUIAAIC4+L9tQgAAAISdwG1CAACAT0LBbUIAAAAb58FtQgAAgOaLwm1CAAAAsjDDbUIAAIB91cNtQgAAAEl6xG1CAACAFB/FbUIAAADgw8VtQgAAgKtoxm1CAAAAdw3HbUIAAIBCssdtQgAAAA5XyG1CAACA2fvIbUIAAACloMltQgAAgHBFym1CAAAAPOrKbUIAAIAHj8ttQgAAANMzzG1CAACAntjMbUIAAABqfc1tQgAAgDUizm1CAAAAAcfObUIAAIDMa89tQgAAAJgQ0G1CAACAY7XQbUIAAAAvWtFtQgAAgPr+0W1CAAAAxqPSbUIAAICRSNNtQgAAAF3t021CAACAKJLUbUIAAAD0NtVtQgAAgL/b1W1CAAAAi4DWbUIAAIBWJddtQgAAACLK121CAACA7W7YbUIAAAC5E9ltQgAAgIS42W1CAAAAUF3abUIAAIAbAtttQgAAAOem221CAACAskvcbUIAAAB+8NxtQgAAgEmV3W1CAAAAFTrebUIAAIDg3t5tQgAAAKyD321CAACAdyjgbUIAAABDzeBtQgAAgA5y4W1CAAAA2hbibUIAAIClu+JtQgAAAHFg421CAACAPAXkbUIAAAAIquRtQgAAgNNO5W1CAAAAn/PlbUIAAIBqmOZtQgAAADY9521CAACAAeLnbUIAAADNhuhtQgAAgJgr6W1CAAAAZNDpbUIAAIAvdeptQgAAAPsZ621CAACAxr7rbUIAAACSY+xtQgAAgF0I7W1CAAAAKa3tbUIAAID0Ue5tQgAAAMD27m1CAACAi5vvbUIAAABXQPBtQgAAgCLl8G1CAAAA7onxbUIAAIC5LvJtQgAAAIXT8m1CAACAUHjzbUIAAAAcHfRtQgAAgOfB9G1CAAAAs2b1bUIAAIB+C/ZtQgAAAEqw9m1CAACAFVX3bUIAAADh+fdtQgAAgKye+G1CAAAAeEP5bUIAAIBD6PltQgAAAA+N+m1CAACA2jH7bUIAAACm1vttQgAAgHF7/G1CAAAAPSD9bUIAAIAIxf1tQgAAANRp/m1CAACAnw7/bUIAAABrs/9tQgAAgDZYAG5CAAAAAv0AbkIAAIDNoQFuQgAAAJlGAm5CAACAZOsCbkIAAAAwkANuQgAAgPs0BG5CAAAAx9kEbkIAAICSfgVuQgAAAF4jBm5CAACAKcgGbkIAAAD1bAduQgAAgMARCG5CAAAAjLYIbkIAAIBXWwluQgAAACMACm5CAACA7qQKbkIAAAC6SQtuQgAAgIXuC25CAAAAUZMMbkIAAIAcOA1uQgAAAOjcDW5CAACAs4EObkIAAAB/Jg9uQgAAgErLD25CAAAAFnAQbkI\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]},\"value\":{\"__ndarray__\":\"7zKCVP+N5z9EkK/Qswf2P0xIF4ILbgNA9u0mNE5LAEAALpl1ennwP94oBL953PQ/FrU3gTZV8T/8W565c+PgP0f5a1O1avk/JIskSNj3BkANdtCmfXQLQLlkDPxcDg9A2kh62IPnEUDx9yw3A+ASQNJNxcP8gxBANcADQHMyCkA9UZQD+m8OQK+oodcRZw5AeKQNGUhpAEDu2mqMpIXmP0/G3qyk3fI/1q61KuJx9T9uZ4ymHBoIQGTB7geZEwVAbsr1H1yRCEDqA1+gjG0GQCbIR/e8pe8/Ur8Y/es68T9gwC/nA0+qvwlgwHN5Eug/ZBaXSgWtB0DrYYCFtgwLQPQPxkZSeQ5A2mZvWiTNEUAwa+ZawqURQJ2ER2CQrA5A/CfdMYR1C0BkWubk9pIAQBZCT0Jk6g1Aj5ndiCpwCkBNsLcS47oQQDkg8o/cghRAxBljpxzVF0BYg12Kp+0XQGcnW5z+NhRALkxt31NEEkC3naYyiCMOQP+kg/dClA5ABe0S1biaEkBguiqSQCEbQE9ZDg9s6hJATS0qPeINGUDLxoi0LIgXQOqbLKQ+NBtAImlqqaTTGUBRyVk1zIwaQEWKoW4kBCBA4uPKSzYlIEAxu0HCyQMhQB06/oHQ8SBAz41MZbGeIkAAucsLgR4iQA33mhuMtiRAQ1RaFMHqJEAs9Hx2AqkoQJax1BUX7ylAtdZoxpcnLUCLVgiMKj0sQMQUkST1lSpAwBbx9vc+KEAW1I8+ATUpQE+E5607PCtA/4Y7nN6iL0Def04tr/IoQMYOFx5HlitAjSnv/eTTLEC+46BfoB0wQOv2FnXWAi9Al4Hg8GdVLEDC6ew2wsYuQFeaU0V/Zy5APozehRuRL0BsIWqLSPkqQPnAW2FSPi1AvDxd2/fHLEBwvEC2jtwpQCH5wvJ0HylAQC+pGDRfKEA1L34q7VknQH0v5qs3pSZA7me5BaMqJUDhwmi8QhElQA3KnjZi/yRA2kmAv3HIJ0AZZa91QRAnQDa/2b5n3yhAqA/U2oBSLED9P1+NgGUtQPfHwlJOvC1AH5WSgrlZLUDxLe5Bxx8vQNyhJniGuTBAPakozoMsMEAU5G0Wp5EvQAYb0amOLDBAHn/F0otgMkDJL2pIzvgwQGoAnk++WTFAqa2FUD+1L0BsbL/tm64vQK7C3una3yxA532MkAenLEBI0L5hKewrQCeSOMJPmylAKQ3gcECYKUDuvU/XAB8sQCy20aPHxipA7/XlaV5/KEBt6GB+QhAqQNWGl6NMWCxAc9WA8qFKKUCWydMdEXUtQBRw+dTpZS9Aovp8c8jTLUBol5coFDYqQLWRcRjtZidA54t47UCSKUC4BM6hBbwpQCjcyMvk0SxA5pBGQoKGLUC0GTCE0i4uQEqZzCY+6S5AHc8ig8R/MEBsEej4VOsvQEP23VP1AjBAvH0i5zfdLUDWIY4nKVUtQOabVLfJMS1AhTTBt6cOLUCG1adsvE0vQMDZkF6JTC1ArLB1b9ieLEA2K1zYSUQvQD30JQ3PTjBAKQJoM8g2LkAbyOzQdjUwQKKLrl2H2yxAs5Ef7WVoK0BCf9hG8N0sQASJQArkNSpAXuJ0zz2ZKkBUZlz0fLcqQJ0UtIrMnipAY9PEqHwkLkDgOOoMYNEuQJgwihiQDDJAJr+RQd9dMEAT7Y+y6zAwQILEuis/EDBAgjQlAl14LkDAWesd2hkrQFgx0F1KOilANKU1239fJ0AdgehsYOImQDnaRVyYviZAQ9UHSZ9JKEDmDHJAf5UoQKafAkOTwilA/Nd6QRFfJ0Cp8dhFhtckQBQ+rcFVnSZA6N7a+7BiJ0DKyhbrx54oQMoeHa6QNCdA6v0vT2tgKEBfnBXBY48nQAT030o2KidA0t/grJ3FJkAjXSJD52smQMLSKAgLrShA2gefAqicJUAZ0adDOn4lQLg0oJKQ8yZAY+hyjkMaJEA0tp+h3fcgQNm3AMp9ox9AYqVXoCU+G0ANhzitLJUZQAJp+YyvvxxAYWHX8EbHGEDq2Dak+d4WQJB5EMyfFRhApPY1wnWAHUDiEE99lZceQL3Sv2fRihpAFgc1v9yuHkBku9y+1MsfQLXJe0NsTiFARqH1Su58H0DFm1YQXwsgQF6glFjtSBpA+e2No8xtGEDkypIdb0oWQCPaVLCKCRVADTGtsMoAEkDhtrDiEtsUQH2Q+//YuhBALdFzZgbdEkD599YRkUoUQG+whGozjBhAOjdeAgi1F0BmHWB1gKgaQEsns1IV9xdA2b7bimo4FUAFtmvY93ETQKgfCWk35hZAh7HyLkp1GEBCU0le8ScYQKiku70qSh5AsWT96TJUHkBaifaBC+MbQOjg5XvPzxVAyBq8CDo+F0Dls0cb2UgUQCISUH+yLRFApuMi8JRBFkAms6Q35LkUQJeXxst54A1A+AMRiFjuEkCQtblBOUoNQId4mkG4RhJA8cpQWYJgE0BkwH3E13UUQHr1Hc7vERpAfFRjEg3JHEBxGYOEcQkaQOSyrDU+RRpAg76ShVk5GkCi+HdWzB0eQI93z4rxPxtAZ8Gu5HuJGECAnrHBRYkbQAi1PQ9z/xdAcDVXQJgbGEBwgZewOOAZQEmhDjo8TBlA5uZksZw/IEDzwWURrX4iQMa2CiTIFyJA7e4kYc2HIEDoy+chiNshQI//zkneLCVAuXD8M+egIUCQ9YzLWmoiQJRuOG3ovSFAHaDvoOQDI0BP9hp7LQUiQHXSXKTlTB5ASUr3EHfcGECyxpAH04MUQMMpo/84TwhAMAWT8+MyEEAx9esSrAQNQKsOqJpnJg9AIuyJkP3QD0Ahtq8WZIoPQCiGQAAovwRA9wTiF748/z+Nz8T/xhQFQPFWcHiwAA1A2gvfo0S+EUAmc05MrAkbQDQDR/nEYBhACNcOQaNmHUDmXs7mKfohQO5fGEQsrSFAA/TQ+Te+IUBn3NVNHjIjQGRdTeKN1yJABtDFy6zXI0DPhTjdtAElQBvOiG1JkyRAcn8PEIX4KED+uzNL3t4nQLfz33DslyhAmwVpBbtpJ0CLFSiXXHsmQGnKN1vkQSVAdgKhwHo1I0DFS+6YfuUiQCorKEQYjyVAxq3RP9A2JUDnHQrci9MhQGSlhiEAkCJAf9q1tWG6JED17qbzLkMmQGsWdHywHCRAZbBG/GuuJEDiDiCAymUkQJUxn+onqSBAc4phmc9jIUCVtUud5w8bQBltpCyAdxxAfZk/4p0CFkCf/8MzjF4XQLTyLLLRmR1AmtraMpDdG0DVV7CSDqwfQPBitfwmJSNAVbaxBGONIkBb8fNnY8YhQHonS7o/7CFAV960Yhg3HUDRik0CU5wXQLFBLW3RFxVAFNCBnlPsEEBBJhpZMVcIQOfZXDZNcgVA5hl9aroMEkB2FUBOu70NQNhdtwXcrApAPgnWMP92EkAYopyE+wMUQKLA5oeQWhNAnABWljU0D0AYjbcmG20KQLU+kGaFSgxAaJ7xLx/WB0D9Pq40jMUTQFGhsMdNxhZAa5Lel48qFkAW4zNN4i4SQO5uOlloIQtAwbYWCTrDEEAae0Gmr2gSQHnLsKTgPRNAy1z2qmREE0B1bQuScbIYQJQQAfROvxNAUPtO5+snEEAT0n+tVGsQQDqdPeKNsQhAIPYwLWQFCECppeF8Q7EGQKt/ylSBcv0/BEH/hY3nDEBaTuujQMoSQMtC2yi2tQ9ANnSD0AyPE0BuGM2B+1EWQKjTc89tUhhAKB9bfCBCIEB6x/ateRMcQL2cysHVOBpA2WI6bHktIUBh6SA4UGIfQH4E71QDvxlAyqqP0pZSHkA0mBqdaikcQIVp8glA+hZAzeNvqeGFGkCkznIjR/8SQBJVE+Mkzw5AY3XNXvYJDECTYqqhtXETQDYT66kNxBZAyOIEtu2kFEDL0LcLrRoWQKMYTn0ZhwxA+/o1bMysEkAe+F9wYdsXQN2xNXz/PhhATLC7OD1/HkAWW5ONKZMgQFrtIxSDMiFA1zCbrj3TIkD+vMKt1xwhQApGF6BT3R5AVk0xGSGFGUC2SgUhX6AQQOg1/08sEA5Ak/q7taF8B0B3thIAvJ7wPwYZ0N7Odfo/xhAJmMJVAUCzy7kHW/nwPyBq6gtRW6E/2ghUNDeZzL/9AINjYnL2P6LQvoOab9s/VLKHsEB/8T9bDVboh5/zPwJzbMMMZ+Q/NIQLBRRg5L/gHAIFcozCP6T8SnR27/Q/glJ1hlw9+T8PjLjAcmAEQI1w5Vy1LPQ/LiCEbFd/6j9ovrvz2eDUv77apw4ASr2/ECszBIMf8L8AB8LmuQRxvw6WN+xCkfU/MHilLEX2uD+ihtqrLq/wPxh0kz89kfo/Ku6SEW624z95cd184bn7PySCx7UTFfk/9QnKL2x0A0AjH8S4p/PyP9lokl9Une4/rvDL67DC0L9OprFO+X/4vy+jHoaTZfC/qgQn/BCn87/KbsrGwI3nvyeqHmlf2te/Mi07oa4A5j9v8MYqB831P8QC9+OLTABALNmM/6YRBECLwvKHq8IJQCwsSxb/HRBA7LLPkUf2CkAlRq7irMQHQCdjZZjDLglAxj45ADcj+D9RcsXHnQzpP9h810MUOrQ/TkCWZ1BGtb8hwQ8GJhP0P85KPgvRUOk/Uv5b9qut8z8Gf17dTbj4P7IqRcfSWgVAOA5kVbxp/T8xn7VajVr/P7A2e2RMAfU/q9vHPiKf/T+4mIxL+QQBQLZT6wkUsQlABsLi24cs9D8WPHyp1L3eP8crJIN6qPE/QqFuga0EB0BS1S6OpIoJQBRAf8ttVPU/WBk6348k/j+vCR0smroCQE7WO8zDjvM/EIdEJ3ytAkBInzVAgFv6PxQlPKbyZfE/jPrClfEABEDBouHS77oFQCjqrjUiUQtAzoQITsmRAUAoHSEgh8MGQFIJmRDZewFAmO7Q6xYu+T8oYG4WkF3/PxyfK7naZQJA+s89o0iH+j9EzO0GSMABQMlkBOOv6whAJPKFWm4oAUCaB2PDuBn4PyLRx7PslOI/Xm3k7KDBxz9OrODWh+7EP4EtqT4sL9a/UlgVfP5/zD+U0+dNyh/4P+DsqUX3CLq/PHnFwwp2A8AKBPO2f1cJwNdLNa4yrgPAEpOp+/Cs/r+XAwYVJHIBwEO20gYlOQHA+KqPecBK4b8BMhdvkDTsv7TSh7fGZ/q/BYT5uj9DAsDHHHvbax0DwPAYWfCREwLAzHqcF6U047+q2ALIJmb0v+JEZw2Retq/gNIoeIjhyz/C/vOXtHzsvyQkJf3/39C/NgaaqBUyvr+GYBbDf7PyPzqvR29MPPE/fI5wk3K17z9WkDrmEqH5P6Mujz9ECvg/YrXysrT4AEBHv1tZU1IDQIOElGin4whA/l7L35fbAEBq5tw9SPr2Px4YcNbhJ/E/gM15AOzD3r+R8ujY/9Ldv3nF8AzrnPW/HZKZwEte479k0EgqqNzIv2MVyz0dAALA1imKa7Sc/r9H6DkQujUPwBbBTWcGuAvAK0VWDfacC8CJOHLDIjoLwL5QBMSyiBDAiD36PdARFsBniRnrhbUTwKdUmL8W4BDA9/0PuRM7EcATUKSzIawPwMJZEyGzWhHA4J4fUj7lE8Aq4Wex/moFwHCXN7ILr9O/jXeaSuz31r9fiEqpY37wvwBhNKycT8u/0epRsrl+5T/gJpQJxeX9PzzMeQQdpvk/BlHwRop9BkBZxZdxTsr1Pwhh9FB8Tti/jzR4cEY997+5PWDGAEvyvxzaKyMtygHATkdIByK877+QKCbNseO+v4wvehZcP6O/ti2Bv1YwyD/4rqiMa7j6v5hMl7r4oAnAyJR+S7Jh9L/QwTgfv2b+v9wj+lMT//W/fK+X9VOI/b8MmYf/YCDTv23XkXarnOO/5kGt+t/H8L9cQUKwsbHzvy9rAsBTmQDAgBzvBVF1lD+ZuEx0RRTyv/rLu3Ais9u/wvpLZc3R3r/Ytggnw1j0vzZw8wosg+A/EL0T1vBZ3L9S+rFxEqrpP1jh2ZjKXgRAgFWdk7IABUDvKx2RlyYGQE52rORkKANAwMvxV+YwD0BQevcYbcoSQNphPuQOGRpASp15iku/HECVkKfdZMQdQJ5Zs2Q/1BlAwRo1lfaFFUC3ontPXUcaQDRrnmz+IxZAeoZ1bIb/E0Do6JSiEOMSQBkWGI+xLhZAUIthEqCcE0AKpSnHmyMXQJN5W4THNxpAXQOaq6FBGUDdqR2KkhMaQM7j7yH8XBtACuhWR4GQGkC7kDKV2EodQJq9OqD/xBdAMRtnSQa9FEAEI9J0wewSQCGWk4tPcxJAdy+2fDSsEUCqy1Iy9m0TQAkqgiREFhRAFvF0kqVXEUDGSnbVk6ALQLmfDOygNRFAH2JLQNxyFUAklMN6zj4WQNZBQCbUwBJA4YydTeKzCkAqOa3r/PUEQBiB/cUtvwZAlkcEpOq7BUDR8VX5n3oOQBEske9RqA5AmnVtCgBwEkBalIIofz4VQGYRVfuqGBFADpMRAZJ1EkBYZfWFWgUJQGj9+O3DYxFAWJ5E4HG6DUAG956Vn8wKQNIkbEOdiBBAEkjnisgUEkDZSJUqoH4RQDJJLdKM5QpAY7+xt0a+EEABYf+zXmoSQP/rZNMHnAlAHI1A2KEuFEAUczHzz8URQAba8/DJ1BdAXLQeuOS9FkC7+tu9r10YQE9Hefo1chtA5iT2Us8qHEAcfIf6G1IgQMUVGqfH/BpA/zoABQgrH0DWZ6Kvkp4gQNr8x+GtFCBAuRt8MHFpIUD+FF8YqKYhQC/Y+RXohRtAqKxfU5x4HUCOJn25KIUbQALuS+FawSBAPAqUQyXCGkCIZKr76lobQL1njPB3/RVA07228DkOF0CeeZ7KSF0ZQDlDaX9MHh5A2hD+73QiIEDCtzQ89YkgQKp3c5q1ICJAaKlhAEkPJEAA1oM2yxckQNw882OHPSNAADRRsgWDI0DJSlAoTx0lQLf49X0hkyhAFgTXc6YyLEAraPPy/Y4tQOombkq07ihAb8YFk8c2KUBBczm+72QoQDfPSZ6MlC1AHm/vD8VxLkBXssEHdAktQG3WR305qy5ApJAKWFqNK0CrXRcNrTAtQO2r1hw3SixA9gHma9gXLEBiVOsgNZwqQMogpFlUiipAmyM3M6voKUBRvrB5aVsnQL7e+F5RpSdA2bAT2AM/KECZljkzk2knQPLrKxOieClAncNfoSLUKkAI17fpZPcuQAC2IV5abS1A8hvQzyvJLUDqbENRq4QsQIx9v/j4Bi1AVESX+SUWK0DQ1YPN49spQO8Sf4tDwiZA7JW63l8vJUBQihX2mngkQBfiJYzCpCJAutYRqIIUJ0D1/RgJLbgjQGK8PROUxyNAVt1mUExYI0ARfm3xa9kjQNe0O16rxCFAMWamSfxSIkCYT/GT3cshQMMxWUPQASRAqgFzLWwoKEDriF+54Q4lQNNemQ+dyiRAjAAUJYtjIEBRJQi+tA8bQJV3HyJrKxpAtMv1wYAQEkCuR4E+t/sVQKNw4jac6hlAqbsw29WOFkA3dfHlyvwZQBj2pr9l0R1A5nqwWdl5F0C56YSkLm0UQBpYYA95YQxAmOKbcIjuB0BI1ZeznWACQKZl2TIL3AdA7u71B8DPDEBWEdv1fHIQQEZwL6LopRJAQ4H1kr+eFEDaqLVY/k8UQObtm5e8ChdAupJ6bESEEkAGVcyQLhAZQBU7hJ/GsR5APyFuRbX0IUCcjRq1LGkgQHjiQYUk/iBAh52G91cbIkBcUEpmTpghQNdHoApyKyJATw9q60aHI0DsuoULkzchQGJcwANBKCBAcOdWM+dzIECWJcAZigUcQGqecYBNJBFABzqDQ8E5EUDbx8CK3BEVQKyWKtVFqxJADZyj7YHuFEBuWO8P58wSQBAS1tv2dxVApW0cyCfSGED/RzYTUHAaQECcXFsC1RdAhd+5FvYJE0CHntZiCWoSQLJXrngfdRdAs5ZNP7/0FUAXH4P46bYXQGtD3MtLsxlAy4b+NvtkHkBCEIw7scAXQDTgcD9z9xZAI5N3vGwqFED+/rbaoOcfQOGg4isXlx5AYBLVmJYdIEBYlQi+epceQDnDg85E7x9AhYIew3FPIkD06/hKlIQjQAnWvrov2iNAXSvuMavrH0ArtTkW0/UgQHZwcQPyRBpA8j8dNOVpHEBiTHcEL7saQOhaGQiT6RpAbATuuemXGUBSGI5hTYcYQPLj3jyE2BtAu6AaYBhaHkCnxhAQHDEXQMzK1oOHABZAiNnbngxxFUAKKa8ow6cNQBGg4MRRlAxAJqs8rHQ8F0Acj1z1sowRQEoLElDmzQ5AvwuEo5oCC0DPiguH0Nj6P0s856GzKvo/Sz06wPsjA0BZRiZARNX0Px/GLcIyKvg/jP8ytfTG8D9Wrp+QFaz1P6KLy95rbv0/zqsESj+JB0BJwvU+QEgQQKvjWn4KtRJAcKJ11fsTFkCANKrw8YAOQHg1ZiF+5wVA0mAlZpvyBkA6ecutQTj+PwSxwvDDHvU/a6PNRa5x9j86/aDB2wb/P9dnFq5qXQtAaEZGrY75AkAUCN42ZUz3P4FWQp+n/O0/zSZfroZU8T8dhZbWS1IGQJaetszUigVA0wMlLLN8BkB4PBd2X40EQH90XmA7oglAkqnswAAr8z8wqF9MDqPCv6hK/VBA68w/drAR0wkG6r+N+xpUtCoEwM4si/cQmwjAZgjq5E0WFcCcfLW4boQQwI3BosUsFwzA/Xgc+jZiEcCFGneyVUsEwJepot5VCAnAStXgrtDyCsAtorBTe0AMwA5Mpy4qxBDAFQBnGme0DsCwGi+IGdUDwKIerIE7/gjAwUAMOEyyBsDFy3P8hBQMwEx954jiJhHAh+VISeaJFsASMI7WP+YZwH24AGj2URzA7sKDJdrrIMBq/+s9zjohwBGDf5w0cCTA35IVek3yJMCrb+TNQyYmwKJdMltalCPAZimXYK6PJMD8TMrr+3ElwPLok7C95CXAsr2ty8xiJ8AIjwwWCxEmwOkPgDXDACnAleigbhsyK8CjAt7hDMsqwMGAWsg+UinA+pjyzldTJsAE051cU6UjwAUTrZgt/SLA+2DGiBzQIsBm4rwvECMjwJR5TOKmFSLAoImYccnpIcBi/222npshwLbJ+vxNuh/AUiu8L0J8GsASootXAmEdwFQGmkbZpiDAwmljYLeFIsCRzAJUAIUhwDjlUGxTlSHAaGpd/NYUIMCx+jzFqtgXwHVXYkfmlA3A/vDWSBwkB8DrOFpJK/gGwP4Re3TAow7Afi8bKHZGFMDq5GnmQu39v1wNNJMguvO/nnN0UsHCBMDsZ+IXvzMNwD75YGHGAxHA1UK6YOLbE8AiTzhwwHQOwHkwLslU9gLAXp5rwHm6B8AxywspNIIPwFypxaIGPQXAC23lIb7ABMB2AHbHHi8PwGqiJwfG3AjAeC60a4YkFsAZLZmpVD8cwK6sE5bsyxzANGGntcNAHcCC6cDzOIAgwH+70kjpWh/A5gyplB+VFsCa5af9osoYwDHMo91M+xjAMls7ZVf2GMB4p/5WXfwWwHQUgqg+lBXAjXhdZ0gTIMDKitGVLSUjwHBRYdY8YyXA8sjXf1QXKMDFUvRu6sAnwMh+ThOMEifAeX2/Ku7PKsDT0kQSMi0pwPMh6I8E1ynAkihTVqCVKcCj9XaQ/5kqwCFdzRZuzCrABl6jdDRuLcBxHAPuSlktwAgXB8r4mi/A5tEoJK74L8Bn6UvbzGUwwPpVfquANjDAsjSL7W2iMcC4qrm5fxUxwF0S/eY7li/AoCV2PquLMMCgBssxldMwwBBnlUWGTDDAbx+1GQVkLsDEAcazoNIuwISspqeXKDHACcbXq8A0McD7vEb2lGEywNdTY7U84THAAAYRy1rMMsCIH90VhN0ywJ0kDOMPDzPA42Vy2fbOM8C70KUWYTg0wDgO7oQwijPA3Yjjt/mHMsDzhI7SCrMywA9jny8EXjLAbHkL2MaeMcDWI3Nyg9g0wFI10dhdjTPAYyPWXpDtNMALOg0sqqs1wMraw9q7ujXAr1HT13UuNsDz/xfQgYo1wFjrMAjoEzTAtMH2HnTRM8BNmZfY/T80wOcUREHfnDTA0k2kakOfNMDJeu2Z97Q0wBcI2CoXjDLA/l4VbVYWM8C/spICZqEzwJs0R6j6RzPAB0txgTWeM8Awu6Sv0RI0wByq2ZwX8zTAQ5Z5OL9LNcC9/2YVan40wCUSWClTNjPAxsoGGcLCMcB54CCZqIctwFwLWQSnZjLAcA1BaEcQM8C0yaSFICQ0wOP0PytfZzPAyS7kMyQ9McBxQjzJNUkvwK1w0Le9ii3AIywkts/UJ8D3o2fHivcqwFcrRdnubSvA16uHntp5KsBs1XjLM+cpwMdqgo4eoCnAf7Ypkem5KcCBP3DBleIowKNZQdIPjynA0YxLOibvJsCmZBhKW3kowPY+/6RVAiXAyiFdKYJ4KsC3z8SbdZwowIXXvsmcuSjAs/B5dvMYKcA8DWlix38pwB6ag1e3ginAlhu2mzcCKsBPR6bczKYrwEZtC9UGVCzA1TOjoAjgL8ABcWDHdFswwPHbJmt+KjDAyIPLkOuCMcB+6XaSdngvwBnhvRLkHTHA5nqhm+QGMsDph5+4GuUxwAU7sijjVTLAzyTfVsgRMMA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]}},\"selected\":{\"id\":\"1836\"},\"selection_policy\":{\"id\":\"1856\"}},\"id\":\"1835\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"Variable\":[\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\",\"B\"],\"index\":{\"__ndarray__\":\"AACA9VmNa0IAAADB/o1rQgAAgIyjjmtCAAAAWEiPa0IAAIAj7Y9rQgAAAO+RkGtCAACAujaRa0IAAACG25FrQgAAgFGAkmtCAAAAHSWTa0IAAIDoyZNrQgAAALRulGtCAACAfxOVa0IAAABLuJVrQgAAgBZdlmtCAAAA4gGXa0IAAICtppdrQgAAAHlLmGtCAACARPCYa0IAAAAQlZlrQgAAgNs5mmtCAAAAp96aa0IAAIByg5trQgAAAD4onGtCAACACc2ca0IAAADVcZ1rQgAAgKAWnmtCAAAAbLuea0IAAIA3YJ9rQgAAAAMFoGtCAACAzqmga0IAAACaTqFrQgAAgGXzoWtCAAAAMZiia0IAAID8PKNrQgAAAMjho2tCAACAk4aka0IAAABfK6VrQgAAgCrQpWtCAAAA9nSma0IAAIDBGadrQgAAAI2+p2tCAACAWGOoa0IAAAAkCKlrQgAAgO+sqWtCAAAAu1Gqa0IAAICG9qprQgAAAFKbq2tCAACAHUCsa0IAAADp5KxrQgAAgLSJrWtCAAAAgC6ua0IAAIBL065rQgAAABd4r2tCAACA4hywa0IAAACuwbBrQgAAgHlmsWtCAAAARQuya0IAAIAQsLJrQgAAANxUs2tCAACAp/mza0IAAABznrRrQgAAgD5DtWtCAAAACui1a0IAAIDVjLZrQgAAAKExt2tCAACAbNa3a0IAAAA4e7hrQgAAgAMguWtCAAAAz8S5a0IAAICaabprQgAAAGYOu2tCAACAMbO7a0IAAAD9V7xrQgAAgMj8vGtCAAAAlKG9a0IAAIBfRr5rQgAAACvrvmtCAACA9o+/a0IAAADCNMBrQgAAgI3ZwGtCAAAAWX7Ba0IAAIAkI8JrQgAAAPDHwmtCAACAu2zDa0IAAACHEcRrQgAAgFK2xGtCAAAAHlvFa0IAAIDp/8VrQgAAALWkxmtCAACAgEnHa0IAAABM7sdrQgAAgBeTyGtCAAAA4zfJa0IAAICu3MlrQgAAAHqBymtCAACARSbLa0IAAAARy8trQgAAgNxvzGtCAAAAqBTNa0IAAIBzuc1rQgAAAD9ezmtCAACACgPPa0IAAADWp89rQgAAgKFM0GtCAAAAbfHQa0IAAIA4ltFrQgAAAAQ70mtCAACAz9/Sa0IAAACbhNNrQgAAgGYp1GtCAAAAMs7Ua0IAAID9ctVrQgAAAMkX1mtCAACAlLzWa0IAAABgYddrQgAAgCsG2GtCAAAA96rYa0IAAIDCT9lrQgAAAI702WtCAACAWZnaa0IAAAAlPttrQgAAgPDi22tCAAAAvIfca0IAAICHLN1rQgAAAFPR3WtCAACAHnbea0IAAADqGt9rQgAAgLW/32tCAAAAgWTga0IAAIBMCeFrQgAAABiu4WtCAACA41Lia0IAAACv9+JrQgAAgHqc42tCAAAARkHka0IAAIAR5uRrQgAAAN2K5WtCAACAqC/ma0IAAAB01OZrQgAAgD9552tCAAAACx7oa0IAAIDWwuhrQgAAAKJn6WtCAACAbQzqa0IAAAA5seprQgAAgARW62tCAAAA0Prra0IAAICbn+xrQgAAAGdE7WtCAACAMunta0IAAAD+je5rQgAAgMky72tCAAAAldfva0IAAIBgfPBrQgAAACwh8WtCAACA98Xxa0IAAADDavJrQgAAgI4P82tCAAAAWrTza0IAAIAlWfRrQgAAAPH99GtCAACAvKL1a0IAAACIR/ZrQgAAgFPs9mtCAAAAH5H3a0IAAIDqNfhrQgAAALba+GtCAACAgX/5a0IAAABNJPprQgAAgBjJ+mtCAAAA5G37a0IAAICvEvxrQgAAAHu3/GtCAACARlz9a0IAAAASAf5rQgAAgN2l/mtCAAAAqUr/a0IAAIB07/9rQgAAAECUAGxCAACACzkBbEIAAADX3QFsQgAAgKKCAmxCAAAAbicDbEIAAIA5zANsQgAAAAVxBGxCAACA0BUFbEIAAACcugVsQgAAgGdfBmxCAAAAMwQHbEIAAID+qAdsQgAAAMpNCGxCAACAlfIIbEIAAABhlwlsQgAAgCw8CmxCAAAA+OAKbEIAAIDDhQtsQgAAAI8qDGxCAACAWs8MbEIAAAAmdA1sQgAAgPEYDmxCAAAAvb0ObEIAAICIYg9sQgAAAFQHEGxCAACAH6wQbEIAAADrUBFsQgAAgLb1EWxCAAAAgpoSbEIAAIBNPxNsQgAAABnkE2xCAACA5IgUbEIAAACwLRVsQgAAgHvSFWxCAAAAR3cWbEIAAIASHBdsQgAAAN7AF2xCAACAqWUYbEIAAAB1ChlsQgAAgECvGWxCAAAADFQabEIAAIDX+BpsQgAAAKOdG2xCAACAbkIcbEIAAAA65xxsQgAAgAWMHWxCAAAA0TAebEIAAICc1R5sQgAAAGh6H2xCAACAMx8gbEIAAAD/wyBsQgAAgMpoIWxCAAAAlg0ibEIAAIBhsiJsQgAAAC1XI2xCAACA+PsjbEIAAADEoCRsQgAAgI9FJWxCAAAAW+olbEIAAIAmjyZsQgAAAPIzJ2xCAACAvdgnbEIAAACJfShsQgAAgFQiKWxCAAAAIMcpbEIAAIDraypsQgAAALcQK2xCAACAgrUrbEIAAABOWixsQgAAgBn/LGxCAAAA5aMtbEIAAICwSC5sQgAAAHztLmxCAACAR5IvbEIAAAATNzBsQgAAgN7bMGxCAAAAqoAxbEIAAIB1JTJsQgAAAEHKMmxCAACADG8zbEIAAADYEzRsQgAAgKO4NGxCAAAAb101bEIAAIA6AjZsQgAAAAanNmxCAACA0Us3bEIAAACd8DdsQgAAgGiVOGxCAAAANDo5bEIAAID/3jlsQgAAAMuDOmxCAACAlig7bEIAAABizTtsQgAAgC1yPGxCAAAA+RY9bEIAAIDEuz1sQgAAAJBgPmxCAACAWwU/bEIAAAAnqj9sQgAAgPJOQGxCAAAAvvNAbEIAAICJmEFsQgAAAFU9QmxCAACAIOJCbEIAAADshkNsQgAAgLcrRGxCAAAAg9BEbEIAAIBOdUVsQgAAABoaRmxCAACA5b5GbEIAAACxY0dsQgAAgHwISGxCAAAASK1IbEIAAIATUklsQgAAAN/2SWxCAACAqptKbEIAAAB2QEtsQgAAgEHlS2xCAAAADYpMbEIAAIDYLk1sQgAAAKTTTWxCAACAb3hObEIAAAA7HU9sQgAAgAbCT2xCAAAA0mZQbEIAAICdC1FsQgAAAGmwUWxCAACANFVSbEIAAAAA+lJsQgAAgMueU2xCAAAAl0NUbEIAAIBi6FRsQgAAAC6NVWxCAACA+TFWbEIAAADF1lZsQgAAgJB7V2xCAAAAXCBYbEIAAIAnxVhsQgAAAPNpWWxCAACAvg5abEIAAACKs1psQgAAgFVYW2xCAAAAIf1bbEIAAIDsoVxsQgAAALhGXWxCAACAg+tdbEIAAABPkF5sQgAAgBo1X2xCAAAA5tlfbEIAAICxfmBsQgAAAH0jYWxCAACASMhhbEIAAAAUbWJsQgAAgN8RY2xCAAAAq7ZjbEIAAIB2W2RsQgAAAEIAZWxCAACADaVlbEIAAADZSWZsQgAAgKTuZmxCAAAAcJNnbEIAAIA7OGhsQgAAAAfdaGxCAACA0oFpbEIAAACeJmpsQgAAgGnLamxCAAAANXBrbEIAAIAAFWxsQgAAAMy5bGxCAACAl15tbEIAAABjA25sQgAAgC6obmxCAAAA+kxvbEIAAIDF8W9sQgAAAJGWcGxCAACAXDtxbEIAAAAo4HFsQgAAgPOEcmxCAAAAvylzbEIAAICKznNsQgAAAFZzdGxCAACAIRh1bEIAAADtvHVsQgAAgLhhdmxCAAAAhAZ3bEIAAIBPq3dsQgAAABtQeGxCAACA5vR4bEIAAACymXlsQgAAgH0+emxCAAAASeN6bEIAAIAUiHtsQgAAAOAsfGxCAACAq9F8bEIAAAB3dn1sQgAAgEIbfmxCAAAADsB+bEIAAIDZZH9sQgAAAKUJgGxCAACAcK6AbEIAAAA8U4FsQgAAgAf4gWxCAAAA05yCbEIAAICeQYNsQgAAAGrmg2xCAACANYuEbEIAAAABMIVsQgAAgMzUhWxCAAAAmHmGbEIAAIBjHodsQgAAAC/Dh2xCAACA+meIbEIAAADGDIlsQgAAgJGxiWxCAAAAXVaKbEIAAIAo+4psQgAAAPSfi2xCAACAv0SMbEIAAACL6YxsQgAAgFaOjWxCAAAAIjOObEIAAIDt145sQgAAALl8j2xCAACAhCGQbEIAAABQxpBsQgAAgBtrkWxCAAAA5w+SbEIAAICytJJsQgAAAH5Zk2xCAACASf6TbEIAAAAVo5RsQgAAgOBHlWxCAAAArOyVbEIAAIB3kZZsQgAAAEM2l2xCAACADtuXbEIAAADaf5hsQgAAgKUkmWxCAAAAccmZbEIAAIA8bppsQgAAAAgTm2xCAACA07ebbEIAAACfXJxsQgAAgGoBnWxCAAAANqadbEIAAIABS55sQgAAAM3vnmxCAACAmJSfbEIAAABkOaBsQgAAgC/eoGxCAAAA+4KhbEIAAIDGJ6JsQgAAAJLMomxCAACAXXGjbEIAAAApFqRsQgAAgPS6pGxCAAAAwF+lbEIAAICLBKZsQgAAAFeppmxCAACAIk6nbEIAAADu8qdsQgAAgLmXqGxCAAAAhTypbEIAAIBQ4alsQgAAAByGqmxCAACA5yqrbEIAAACzz6tsQgAAgH50rGxCAAAAShmtbEIAAIAVvq1sQgAAAOFirmxCAACArAevbEIAAAB4rK9sQgAAgENRsGxCAAAAD/awbEIAAIDamrFsQgAAAKY/smxCAACAceSybEIAAAA9ibNsQgAAgAgutGxCAAAA1NK0bEIAAICfd7VsQgAAAGsctmxCAACANsG2bEIAAAACZrdsQgAAgM0KuGxCAAAAma+4bEIAAIBkVLlsQgAAADD5uWxCAACA+526bEIAAADHQrtsQgAAgJLnu2xCAAAAXoy8bEIAAIApMb1sQgAAAPXVvWxCAACAwHq+bEIAAACMH79sQgAAgFfEv2xCAAAAI2nAbEIAAIDuDcFsQgAAALqywWxCAACAhVfCbEIAAABR/MJsQgAAgByhw2xCAAAA6EXEbEIAAICz6sRsQgAAAH+PxWxCAACASjTGbEIAAAAW2cZsQgAAgOF9x2xCAAAArSLIbEIAAIB4x8hsQgAAAERsyWxCAACADxHKbEIAAADbtcpsQgAAgKZay2xCAAAAcv/LbEIAAIA9pMxsQgAAAAlJzWxCAACA1O3NbEIAAACgks5sQgAAgGs3z2xCAAAAN9zPbEIAAIACgdBsQgAAAM4l0WxCAACAmcrRbEIAAABlb9JsQgAAgDAU02xCAAAA/LjTbEIAAIDHXdRsQgAAAJMC1WxCAACAXqfVbEIAAAAqTNZsQgAAgPXw1mxCAAAAwZXXbEIAAICMOthsQgAAAFjf2GxCAACAI4TZbEIAAADvKNpsQgAAgLrN2mxCAAAAhnLbbEIAAIBRF9xsQgAAAB283GxCAACA6GDdbEIAAAC0Bd5sQgAAgH+q3mxCAAAAS0/fbEIAAIAW9N9sQgAAAOKY4GxCAACArT3hbEIAAAB54uFsQgAAgESH4mxCAAAAECzjbEIAAIDb0ONsQgAAAKd15GxCAACAchrlbEIAAAA+v+VsQgAAgAlk5mxCAAAA1QjnbEIAAICgredsQgAAAGxS6GxCAACAN/fobEIAAAADnOlsQgAAgM5A6mxCAAAAmuXqbEIAAIBliutsQgAAADEv7GxCAACA/NPsbEIAAADIeO1sQgAAgJMd7mxCAAAAX8LubEIAAIAqZ+9sQgAAAPYL8GxCAACAwbDwbEIAAACNVfFsQgAAgFj68WxCAAAAJJ/ybEIAAIDvQ/NsQgAAALvo82xCAACAho30bEIAAABSMvVsQgAAgB3X9WxCAAAA6Xv2bEIAAIC0IPdsQgAAAIDF92xCAACAS2r4bEIAAAAXD/lsQgAAgOKz+WxCAAAArlj6bEIAAIB5/fpsQgAAAEWi+2xCAACAEEf8bEIAAADc6/xsQgAAgKeQ/WxCAAAAczX+bEIAAIA+2v5sQgAAAAp//2xCAACA1SMAbUIAAAChyABtQgAAgGxtAW1CAAAAOBICbUIAAIADtwJtQgAAAM9bA21CAACAmgAEbUIAAABmpQRtQgAAgDFKBW1CAAAA/e4FbUIAAIDIkwZtQgAAAJQ4B21CAACAX90HbUIAAAArgghtQgAAgPYmCW1CAAAAwssJbUIAAICNcAptQgAAAFkVC21CAACAJLoLbUIAAADwXgxtQgAAgLsDDW1CAAAAh6gNbUIAAIBSTQ5tQgAAAB7yDm1CAACA6ZYPbUIAAAC1OxBtQgAAgIDgEG1CAAAATIURbUIAAIAXKhJtQgAAAOPOEm1CAACArnMTbUIAAAB6GBRtQgAAgEW9FG1CAAAAEWIVbUIAAIDcBhZtQgAAAKirFm1CAACAc1AXbUIAAAA/9RdtQgAAgAqaGG1CAAAA1j4ZbUIAAICh4xltQgAAAG2IGm1CAACAOC0bbUIAAAAE0httQgAAgM92HG1CAAAAmxsdbUIAAIBmwB1tQgAAADJlHm1CAACA/QkfbUIAAADJrh9tQgAAgJRTIG1CAAAAYPggbUIAAIArnSFtQgAAAPdBIm1CAACAwuYibUIAAACOiyNtQgAAgFkwJG1CAAAAJdUkbUIAAIDweSVtQgAAALweJm1CAACAh8MmbUIAAABTaCdtQgAAgB4NKG1CAAAA6rEobUIAAIC1ViltQgAAAIH7KW1CAACATKAqbUIAAAAYRSttQgAAgOPpK21CAAAAr44sbUIAAIB6My1tQgAAAEbYLW1CAACAEX0ubUIAAADdIS9tQgAAgKjGL21CAAAAdGswbUIAAIA/EDFtQgAAAAu1MW1CAACA1lkybUIAAACi/jJtQgAAgG2jM21CAAAAOUg0bUIAAIAE7TRtQgAAANCRNW1CAACAmzY2bUIAAABn2zZtQgAAgDKAN21CAAAA/iQ4bUIAAIDJyThtQgAAAJVuOW1CAACAYBM6bUIAAAAsuDptQgAAgPdcO21CAAAAwwE8bUIAAICOpjxtQgAAAFpLPW1CAACAJfA9bUIAAADxlD5tQgAAgLw5P21CAAAAiN4/bUIAAIBTg0BtQgAAAB8oQW1CAACA6sxBbUIAAAC2cUJtQgAAgIEWQ21CAAAATbtDbUIAAIAYYERtQgAAAOQERW1CAACAr6lFbUIAAAB7TkZtQgAAgEbzRm1CAAAAEphHbUIAAIDdPEhtQgAAAKnhSG1CAACAdIZJbUIAAABAK0ptQgAAgAvQSm1CAAAA13RLbUIAAICiGUxtQgAAAG6+TG1CAACAOWNNbUIAAAAFCE5tQgAAgNCsTm1CAAAAnFFPbUIAAIBn9k9tQgAAADObUG1CAACA/j9RbUIAAADK5FFtQgAAgJWJUm1CAAAAYS5TbUIAAIAs01NtQgAAAPh3VG1CAACAwxxVbUIAAACPwVVtQgAAgFpmVm1CAAAAJgtXbUIAAIDxr1dtQgAAAL1UWG1CAACAiPlYbUIAAABUnlltQgAAgB9DWm1CAAAA6+dabUIAAIC2jFttQgAAAIIxXG1CAACATdZcbUIAAAAZe11tQgAAgOQfXm1CAAAAsMRebUIAAIB7aV9tQgAAAEcOYG1CAACAErNgbUIAAADeV2FtQgAAgKn8YW1CAAAAdaFibUIAAIBARmNtQgAAAAzrY21CAACA149kbUIAAACjNGVtQgAAgG7ZZW1CAAAAOn5mbUIAAIAFI2dtQgAAANHHZ21CAACAnGxobUIAAABoEWltQgAAgDO2aW1CAAAA/1pqbUIAAIDK/2ptQgAAAJaka21CAACAYUlsbUIAAAAt7mxtQgAAgPiSbW1CAAAAxDdubUIAAICP3G5tQgAAAFuBb21CAACAJiZwbUIAAADyynBtQgAAgL1vcW1CAAAAiRRybUIAAIBUuXJtQgAAACBec21CAACA6wJ0bUIAAAC3p3RtQgAAgIJMdW1CAAAATvF1bUIAAIAZlnZtQgAAAOU6d21CAACAsN93bUIAAAB8hHhtQgAAgEcpeW1CAAAAE855bUIAAIDecnptQgAAAKoXe21CAACAdbx7bUIAAABBYXxtQgAAgAwGfW1CAAAA2Kp9bUIAAICjT35tQgAAAG/0fm1CAACAOpl/bUIAAAAGPoBtQgAAgNHigG1CAAAAnYeBbUIAAIBoLIJtQgAAADTRgm1CAACA/3WDbUIAAADLGoRtQgAAgJa/hG1CAAAAYmSFbUIAAIAtCYZtQgAAAPmthm1CAACAxFKHbUIAAACQ94dtQgAAgFuciG1CAAAAJ0GJbUIAAIDy5YltQgAAAL6Kim1CAACAiS+LbUIAAABV1IttQgAAgCB5jG1CAAAA7B2NbUIAAIC3wo1tQgAAAINnjm1CAACATgyPbUIAAAAasY9tQgAAgOVVkG1CAAAAsfqQbUIAAIB8n5FtQgAAAEhEkm1CAACAE+mSbUIAAADfjZNtQgAAgKoylG1CAAAAdteUbUIAAIBBfJVtQgAAAA0hlm1CAACA2MWWbUIAAACkapdtQgAAgG8PmG1CAAAAO7SYbUIAAIAGWZltQgAAANL9mW1CAACAnaKabUIAAABpR5ttQgAAgDTsm21CAAAAAJGcbUIAAIDLNZ1tQgAAAJfanW1CAACAYn+ebUIAAAAuJJ9tQgAAgPnIn21CAAAAxW2gbUIAAICQEqFtQgAAAFy3oW1CAACAJ1yibUIAAADzAKNtQgAAgL6lo21CAAAAikqkbUIAAIBV76RtQgAAACGUpW1CAACA7DimbUIAAAC43aZtQgAAgIOCp21CAAAATyeobUIAAIAazKhtQgAAAOZwqW1CAACAsRWqbUIAAAB9uqptQgAAgEhfq21CAAAAFASsbUIAAIDfqKxtQgAAAKtNrW1CAACAdvKtbUIAAABCl65tQgAAgA08r21CAAAA2eCvbUIAAICkhbBtQgAAAHAqsW1CAACAO8+xbUIAAAAHdLJtQgAAgNIYs21CAAAAnr2zbUIAAIBpYrRtQgAAADUHtW1CAACAAKy1bUIAAADMULZtQgAAgJf1tm1CAAAAY5q3bUIAAIAuP7htQgAAAPrjuG1CAACAxYi5bUIAAACRLbptQgAAgFzSum1CAAAAKHe7bUIAAIDzG7xtQgAAAL/AvG1CAACAimW9bUIAAABWCr5tQgAAgCGvvm1CAAAA7VO/bUIAAIC4+L9tQgAAAISdwG1CAACAT0LBbUIAAAAb58FtQgAAgOaLwm1CAAAAsjDDbUIAAIB91cNtQgAAAEl6xG1CAACAFB/FbUIAAADgw8VtQgAAgKtoxm1CAAAAdw3HbUIAAIBCssdtQgAAAA5XyG1CAACA2fvIbUIAAACloMltQgAAgHBFym1CAAAAPOrKbUIAAIAHj8ttQgAAANMzzG1CAACAntjMbUIAAABqfc1tQgAAgDUizm1CAAAAAcfObUIAAIDMa89tQgAAAJgQ0G1CAACAY7XQbUIAAAAvWtFtQgAAgPr+0W1CAAAAxqPSbUIAAICRSNNtQgAAAF3t021CAACAKJLUbUIAAAD0NtVtQgAAgL/b1W1CAAAAi4DWbUIAAIBWJddtQgAAACLK121CAACA7W7YbUIAAAC5E9ltQgAAgIS42W1CAAAAUF3abUIAAIAbAtttQgAAAOem221CAACAskvcbUIAAAB+8NxtQgAAgEmV3W1CAAAAFTrebUIAAIDg3t5tQgAAAKyD321CAACAdyjgbUIAAABDzeBtQgAAgA5y4W1CAAAA2hbibUIAAIClu+JtQgAAAHFg421CAACAPAXkbUIAAAAIquRtQgAAgNNO5W1CAAAAn/PlbUIAAIBqmOZtQgAAADY9521CAACAAeLnbUIAAADNhuhtQgAAgJgr6W1CAAAAZNDpbUIAAIAvdeptQgAAAPsZ621CAACAxr7rbUIAAACSY+xtQgAAgF0I7W1CAAAAKa3tbUIAAID0Ue5tQgAAAMD27m1CAACAi5vvbUIAAABXQPBtQgAAgCLl8G1CAAAA7onxbUIAAIC5LvJtQgAAAIXT8m1CAACAUHjzbUIAAAAcHfRtQgAAgOfB9G1CAAAAs2b1bUIAAIB+C/ZtQgAAAEqw9m1CAACAFVX3bUIAAADh+fdtQgAAgKye+G1CAAAAeEP5bUIAAIBD6PltQgAAAA+N+m1CAACA2jH7bUIAAACm1vttQgAAgHF7/G1CAAAAPSD9bUIAAIAIxf1tQgAAANRp/m1CAACAnw7/bUIAAABrs/9tQgAAgDZYAG5CAAAAAv0AbkIAAIDNoQFuQgAAAJlGAm5CAACAZOsCbkIAAAAwkANuQgAAgPs0BG5CAAAAx9kEbkIAAICSfgVuQgAAAF4jBm5CAACAKcgGbkIAAAD1bAduQgAAgMARCG5CAAAAjLYIbkIAAIBXWwluQgAAACMACm5CAACA7qQKbkIAAAC6SQtuQgAAgIXuC25CAAAAUZMMbkIAAIAcOA1uQgAAAOjcDW5CAACAs4EObkIAAAB/Jg9uQgAAgErLD25CAAAAFnAQbkI\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]},\"value\":{\"__ndarray__\":\"U6sO8VzO6r8AHky2evKEP+npGAlRT9K/DCYjIAsBy78KnB2RhqTDv56XeTYpNuO/N93rDGzR8D/g4QOWX3DlP1KOav1td/s/mIUgY3yKzr8wSAFcRboAwJDnuWUbRQrAVI4j48/iBcC7NWyiMvAEwIJLKAcnAQPA+s6D5c5Q/r+rHgmdzV8FwCSb2DniTQbAiKdEDuziCsC6F0Z7LFARwJPU22Us9Q3AUOiIoqJ/CsB5EYSqVdEGwHp4PImTYwHA6NtcJa5ODsDnRRMEeF8RwMcP1Lwz/xHA/zi1LmaYDMAafZbMTT4GwHph91iS/P2/NQWM3d/iA8AyaExHXB/8vz58FUQUuQXA8p6eZXFFCsAnmmJ6OVQNwKmn2WnYLgzAiU4ClOIsEcBLN4PW3A4KwG5GMdwlrwTAAOY57jnRA8DwMOi/OJQEwABVGmoqQvW/st7gi/sU/r9KkvhTdXQAwKzBQNvAnNq/3LRodDUQ9r+AyakS+svNP4A7RE7eT6u/x2E2BsdxsD9dXn5YoLqyv1e47RkykPg/QMIpxJveoj84tShChKi7v+CdbOUQkoI/QGCmOxPl0z/GSG2WBWDkP30iaD3vVP4/yN3cjTgg+j/QQFMgOmS0vyrA5DdccNa/a7HVk28b4j/4nXHnMmPbPwqPQw1OjNG/bif1GW6bsL9sFDOds2PzP8wTOC4Pq/w/ow798GTCAUDI6e9ommEMQER3gw9/sQZArN9Epv7Z/j8uXkbgZXEFQNh1pLmITgRA4FVAaOq/3T+FMiaiX/XiP/qC5mVb/Ny/FMkyub375r8Yq82ERdDxv8g91n/9Zfa/+yMOOnHq+L+Ia4h15R/1vyIIEfd/x+a/FKcX3qhl2T+MmAVxJGn+P1vv8dnfVPo/OmVVFm+dA0DeH36Toxf/P0sVT0tVlQpAF5kskkKRC0C9w9jabREMQCLxMU9aIBFA1Mv5hl9rBUBHXjyxIjsMQI7AkO13VAJAAHw+zlbLAEAZydrbWzsFQKmMxYP8JQJAoMRc/uUu7D9vTvb4pOH4P+D3xrjMWec/c+EAkTlHA0Bb1HYjZz0BQAIrVEdFdAdAQr1D9Rh9BEBqIMzM8bf1P3zYowl40ue/2NMDKSTp9D8KQeWzc8LwP+QmHwh//+8/xpLv0B4e0z/gMG/oMcPhPyEm6cLdpeE/lMYRPgoB6z+0fO/eTwDHP+SHCp688Nu/ZEdtsgoFxj9cPWnbEvj1v8/y4B6n4wHAM/K1cb0oBcDRYLX9E/AMwJSz4ySmLwfAFnkGI5D+DMDM11SQLRgUwKu4nV+mpwvASocXzg/fFcATyWZN0zMSwGbv6HqCYhPAHRWvYIlxEsBrnZfdyZUSwDM1Vvj6zhTA5NWC8qE6EsBWWEUjD18IwK43kr2d0RHA+8w5uBI9DsDme02t7dgQwKDo/KQaAxXAOS8bhkvUE8D+804DOdsSwL1vICwZ7RPA3tdQI7ZfD8Dl+/Rf1gENwCDrg0WuEAnAcMmm3UvPBMCMQRU18ST1v3CHFH2ABdQ/QhLX3HsQAEAQOA6QuB/tP37I6nBvs/c/KDjjS39/2T/AfbnoWqh0P5E0NjhkB9G/h9otafG60D+L7JXH9xDEP1Q3aHZwgts/HPkr3gDevT+snAkBZgniP/AYiQo+wrk/gpXnjqHQ9T9CCgRtlMH4P94ro47Ycf8/qW63SMn7/z8r0wgGrNgDQNJFdj0NOgFAOK777CW//z/DrlgA1xICQIlpbpU0UhVAc20AO4zwFEBcTDhrxJoXQL4Er3MGcBJASG3zsLJ1EECZRSeAmEkLQPxvVJP6zAZAlkF+jEPzDkANHaobJ/4KQFKQZ/C9UBNAsPFtXXfkDUAM1K+DzZULQEQlt9FZjApA7fD+A3vwDUDAouMA+WgDQFaEY0mYJAVA539RitpkB0CjfGiSprcCQBvJz2HLUwtA0IAtQo4qAECcqGTvQ2XcPx+2DAyXqdM/xIkYnpv/6z+pUMLnAjzqP+53C4O1g9C/AttlIuz40b/YHhz1yETYvwwU56kbEQDAMxq5abnzA8AgYtUPvScHwDpczISCOfS/eijnpNDf6b+t8qHD3gbtv5PLuYimsuE/h8hqjajT3z8VFrBmRD34P0dda8a04fA/GGf3l5hc1L+iu4YwsFbnv8+Y1tVXMfu/c/T6uk1o9b/GT+kxMyPuv4DZODHEKeO/yBanxKHM3b9N6CekRzD+v+cSKV0s7+y/BMkxTGnqzL+Y6GwIoh6UP57xQG3388i/4pF25g6v5788Z84KN5nsv57yT4aXT/S/eRYORnSq9r/g0JFqLUDFv/i9+vdQc+S/DCcbWz5R+r93z261VJECwCY/BPoUMhHARyEHZDtVEMDuDmZ+Ub8SwNKw/4kO5BHANbf8sajcF8D4+PoBAAccwE6w2TMIvCDAAALo6lvPH8CoCIkGTYsgwAvRNnJdQCPAk9HVvFDeIsCbiEQqPKgiwP4abwesqSPAy7/t0S9fJMADAtkCMvQiwJTAQRgamh7A7jB2s2acHsA/p3aneGIgwIG5LLdEUh3AvYvrxyhyIcCOtezg+m0jwLenEJir7iTAP1ccBlpSIMBMR+QubQUgwHsujh21UiDAMnefXPjfGcA4oSCg11sdwDlneBBpohnAD2KUoj2rGMAuyg0iQTMWwA5mKnm+khLAZh3FNcU9H8DL/45N2LIcwEaoIr1kdBzAdTGlbVhDG8CtcIk66g0hwDwbnLjpQhnANstbWAzVGMB7NdU07TYZwH2T0VZEQhrAaVFFWvh4EsBbSNvg4JUNwGZtHFiEUwnATgUVNEEGEMB1wP9jggsVwCPQ/o7dLBHAqtm3/GYxEMA0hRKdLX0GwM6QM70ejQXAVAq8SxKuCcBeKALE9rERwO+I4FKzbxTAbUcd310BC8CyrQLDpV8GwBqpX66tw+u/FrLklmTp0r8vdUm3C8bvP5MHlR5gj+s/EElbNsgK8z/lJXbwWCDjP9xEAQ3CJte/NXgix6LD9r8kA+Srqm3Vv34UoBPqC+e/hUqS41Bn5b+mDPrDvUTHv4kuNf1sRfi/cbHeg1DB8L9btAJ/oA3yvwp1XE56ugLA4g4jSBsA+79GKdJxO/MBwP8qgmOrAAXAXLRWZR5Z+796SKoeC6MAwFNdXkfCnQTA7juyZBmwBMCRii165i0GwIlnUfPl+RLAjx8A0lewEMAdOikX/t4SwBdo1+CVIg7AhsMqQe6yDcDZijioNzIOwH36nwvZQwjA5do3H97ZBMBITZN1KjMHwOXe1xGGDQ/AyGoVngJACcA8Uy4ETXP1vwFLxxikG/K/vDIFbZR8+r+wIBXE+hcCwHoDRmvBOv2/vogtl99fBsDG2kSJ4p8NwFE714hzkRfAMwjCPuppGMDbUUYCe3oYwPBIeJrUMhjAHtFd/HOtF8AUCe1h398awJLMyJFwViLAXYIqRdHkI8CXSBCevNokwHWVV//z7CTA+TToqcvaIsBQ07C350QhwBp7vhzmeiLAof/S+nJjJcCDiqDct+gkwN23anOV6CPAGbUwEFFZIcBl5bOcvuYhwI3MJdXdAx/A5qkCtI41HMAyBdbcz0kewOxh3YPi3xfArDY2rYifHcDr1Pj+UHAZwO7H/+CjkRfAUiQkV1ANFMCNJ6ZUbPgQwBxGSz+u0QvAl35daEc0DMBE2nClYRMFwBWT4V9hBf+/CfDaDTbw+L+M1BRTjpzzv3EyZkpjRPS/GJqa+GEy/r/hMO2eD8b9v47W3mqB3va/QsUt04wR979AdHRvbGPzv/JXR25TT/G/mLe9QGSs3b97CkLqgW/2vx82PLxcFee/QHYCvGwr479dl0sqOJPjv4aGHEpXVPS/rLtDC9pl6r+sbyvnKb/RPx5AYWAEo8m/L/OCkWMw0j/QHfMDTbqwv7b4+U4Ocug/AITul3/Fdr+3PjcBjhPjP2AoVzwYofw/SDwr3XlJBUCANO3ZDIf/P3SFVMvT5ARAbWu9ERee/D8Ag6LP65v+P55QYq88kfQ/pnwsVsa54b/M7BkSgLYEwNuBOssT2wHAexgyJeKt9r8euGD8gsn8v82HwVVuive/nPwr6Xnz879SrRMh8Efnv6C0yxGsb9k/fpbdNjKZAEBCHeXGUyr3P8AO2lfntAJAFozm4/gzAEACao1i2WcGQIu0bUssbQRAkqI6ItDGDEBI5ZLYVyUQQCVbVnnbDA1ABoH3YN7VEUD3+dtToEkVQMrAKm/bYhNAono1wtiNE0BJOD/qTWQWQDdW4moCnxZA+/+0FCk7DUBMiNGeMTIJQDaD7F4kjAJAX8sUBsdWBUDO7d25HXMFQOiSIiVUeO0/wIDnT/Pc1z9GbaSWXH3wP1RaMWO29NO/3s39vBSV1j9b4lesUorvP3ZVAr3SPuM/8lsYMHKY3D/YGWd1VvGnP3ty1dtfgva/80OY2rIA/r/zTkRhGCYJwI7avNTU+QbAp3IGqOG0BcBG2z8xlH0CwIBgtx8e0wLAToM/JPtsAsD2nsUVwgv4vzQp52IGSgfAPiYizQvnCsAM6L6ljnUQwAxA65Fe+A3A7l8aVdwEE8CypEEZ0T8SwFQ179PzXwnAAvVO4T+wCcBC8JMFy3IHwA9BgxG9ZQnAEQCWoqfcAcArNu/QOCABwBDLYKORmOm/1vTGlbMn7L8aFfHpvjjgvzQep1CMSuS/TLzdTowW4L+Mg9d/mSzzv3X2YBdTQALAkKJFOsb2/7/3FmRvJHwGwPM5qB/qbw7AFHeFym7mCsCjZXKUl3IOwAKaXBKG+hPAvGXA0xgLFsAmOeyBL6oWwLrPzWsY9BjA3DG8CCA8F8Ac3kOUWjQawEaQtD4S7BzAoPYiR7knHcCc4oLpNbIYwByzJsocpxvAOsijSoLGHcC57zjmvMIgwOlz7R7QfhvAa3+Egzp2IMA5Exnl33ggwKiETul8+BvAukoznpg0FcDdNMToabMDwFbMnU59iAPAgHcqG6nt7r/QsOKC0zSzP7Jf3t2vFta/7bAPXfWB378W/j/FGCLFv7By2kG9dfi/n+mCS8y8A8BzjIbQdf8KwKQaDhsPIA7AawBTGBwjCsCF/3aVrkgJwBzv7vP3fQnAP7GxG8cODcDDFpCS/xUFwLe8zYJ8QBDAv/LrFoyvD8BP37ip0CASwKSMzE0LtBTAb24KEbhMEsB+urfQV5QPwJbOKvSc9hTAPkcTaDKFG8B9VS7wcl4XwPZCebg+kyDAJX9mvt52H8C1jvPIGL4fwM0zz9ZLih7ABSrv/5p3IMDV5fkRhmUdwDfHbMPysR3ANQd1TxBxH8BAxG3I3P8kwPvrtMiaeyPASBtboYUdJMC3OX/NEyIlwPmZ8evskSLAIk3E/gA2IMAbZGZsI54awKwdSIcbcRjA92HcChOmE8CIsQLFIHMWwN9mxkfuLxnAlZv5hTd9GsAWfGsY6ogdwPs2S3/QuBTAHyHnb7c0FsB+rvx0fS8VwGuAGnAZXRjAN5900GGEF8AFugB1umcXwCz2fqyQZB7A0PvVhdDAI8A/DlfTnfIjwDMTNYA79CPA38iure+TIcA3mEW2mxQhwNKuUNSsKiDAxOfl6X5zIsAxdXQ/hKAiwHGaVQVp2yHAOktTRqCSIcCrFaGi8mgbwBxaq6vEXhvAuNkJZw8mGcBDpKnMfM8awEoI+kOmmRrA81gjOgxzFsD8yYP1BI8gwN2C5o8UcRzAzk2Hn8aEIMBzPA6G5oEgwBiMgYVJMBnA/gEiFjTdFMABt0OEYxAVwD1jxzd1HhPARZvteQqGF8CK30ui8VEWwO73aUdzMxfAOolqEUTMGcDaPrsdNQ8ewKcg+ZKmvCDAv1Cv9P0aIcAety3r2HEiwF29tFJqjyXAxbwuvPxEIsDrNlI9bXYgwObftmiebyHAEhjwKB1nIMDU2UzwUkAhwClo07mQlSDAXCGlW5m4GsAZ5akc53YTwA7Ft/aOcBHA8wtNLpdVFsBPDTFDh8MUwHh/q9yIYRnAUB3HXPMbFsAxYzX7BeQYwF8SAYBOthzAy55hrzRMHsBTzCJVwt0cwPxUy1UEAhzAHq9tXoHPHsCFJdsfHYkfwNzZOOPWLiDAgH0CikvYIMCEVVSd4bsgwIoiHCcqnSLAV34m0BMAIMA8DCf0uT4fwCSxex66UyDAOyfOlgIEH8BvSVZy7YcdwFQZIGu1lSLAUl0MvdKnHsDCzFTAAq4dwPymtWGiPCDA7b/yEw/KIsA2z7epv0cjwOQuNmpB5yHA0rho9wEsJsA+C+Z9x1olwCJ/DK8y6SLAL28l2Y4FJcA66AZ4knQlwJ3VhVZ2fiXAMqiAa51JIsCp0IH2vloewL76iUWm4SDAoZNl7SeGHcBwveZY1XggwNo+rQ14tSLAcaADLsgPIsD2rtIdvPMiwGOYEklsNiTA4dI49SjaJMCAJWWAKBYlwFbJ8jK0JSTAV/GO8xPxJsCYwiTdh8ckwK1/gqhyiyPAsU1Zc0FxI8BMSNMMdHshwNtFNt3rvCLAeR7XO5u8I8AXSwCfUpcjwBNU61gevCTAduavDDXzJsBL0WJcL1gjwGX9/8tH2yXA068fiEFBJMAK5RWETAsmwKKa3c6oECbAgRYvbPjAJsD0FHkNnPgmwOo4LiR6tibAtixNzP84JcCyxK/7AU0jwHGj4m+BxCLAqlLH6yyII8A78sHNaHklwKx3yQ4bNCbAoVY2lWmdKMADBrqaO5MowOvqzWDgNiTAsvfRYGMSIsDv380UHCghwDfcSbg68CPATnXYV81VJcBImiF8kUslwNYDwHztDSTA1usHiuGUH8D5QfQs1sUawFM1XhsHoBnAzJQADqzjHMA3Ol65UzwgwKBQN9bIMhnA1JZskgcMGsDCgOfS4CEfwOrMYrvPqxzAW2vi1VWzHcCMr7IalJAcwHj1YymYVBvAtv3bik35G8AdHh/fVocgwKgOAJdrTRrA7E1YUXPWGMBwySn30fYTwH2te+Kv2BnASAVTYSfkGcBE7fjCTT4XwDGbRgfVLxLAjddILf2PE8DEiFHaK88UwDglAM5UdRfACPuJ5AdKFsAiZTWiDnEUwP3dqZt13BbAq/gxYQpbEsBUT45DPi4XwAqqzZDRFBTAXNB4IifvDcDuzV1K1tQDwIhHOYf3nQTA6FTqNp0qEMBSNJldQ5ARwJJhVO8z9wbAGZuhA8SFAcBTtqsMKFkEwAuOKwGxtQXAeplPwYEyBMAdKaAGHSEEwCHTyDBPIALAuZnqfFFVEMBqCIbAKMoQwDMiFVzjPBTAvvdV6aQMEcCYEFJLg6IHwECZ2ezBLgrAtttd7wPvBcC4AX699RcLwP57fCXn7APA8CK2CXzV0b9wmDmkKy/hP2grRYyaA9S/f69zp83b6r9sqh2uk+77v9EPRTjjnPe/XHjS6ijJ27/4xA0UMQL5v2JydaU58ua/JrYZ1zJZ9b/kqzK2VjYCwKI0CG6KzPG/6qX0HKjs6b+xXRzdsDb6PwjhAqoE5gFAcIaUm2Vd9T+zHAWYwXzmP84TAkIGNuQ/gLgsFBf6uz/fJ+CnHKvkP8P7GOeBAfM/9MqTTAbMA0BTLQqZEQ8HQB18+2EN5Q1ACG4U+q3sBkBnRiqs324QQFJkjGn7uxJAEPeHKywyE0BAU4eHU78TQA3S2hxZaR9ArlrhhSJGGkCmH+VFiQIXQCCr6dgbOhpAwYGrbjSPHkBHjXgGNdQdQA+GM5Jh0yBAiYLpEhFMIEBCKy57kIAdQGPaEOqbSR1ABrTbDZQRFkDYWQMfEacTQKuonjycQhBANbIurPPEEEDvOZchkAkHQFcToOGiKwRAI+9h3a01B0C3YnF3uZIJQBbFr1d3uhJA8EqbliZBCEArAHz3RTj4P1kEAn6Yz/A/vHZNeYRG5z9+Ts+qA7Tov+wOkPRordA/poNAYYCV7z9M9NHiRg7KP4D8+yCDTIg/XapB/w1f7z+cGURLfsXbPwEel2ZOyvI/isvdQLNM7z+0kco/l+LxPwpX5G/kaQhATAi2fdVQEkBynaCmQggUQLgCnYH1VB1AO/tdBOJVHkDNDh8DTxMgQDJQx85C2yJAFAj+L2xXI0Aza2WA1ocjQJE02vHDiCVA99GwrgblJUCX6OSahaMkQDW0Sut6wSRAiJy/MD5XJUBrdFfL3aokQMPTl8S0wCdAQ2QqORO2K0Dvp8j7kRApQElfTB7XTypAWhQwWSN9KkBhG8AI5tkpQNJQQE1mLSpAjg4PU7TMK0AtfN2VJgUvQDqsy6RbGipAX4ooxkYXK0DZl6KnGaAsQJvee5Oray1AnICexJYlLECnYIGuKkosQC1ZmhjMWy5AuqHoHwrRLUC220mNl/MuQPggXx4RSjBAg5UanqpML0CSsfEmoEYxQPlqtnVyxzBA84j1Gj85MEBiJJCKAGMwQFYJzdXTnS9AhlF8tWnBLkCTqKsejI4uQCLfe8GIZixAGhQaUAoHKkCAMvOkQvUpQMj512AeYyxABZwGNuXlK0DUAMVnYz4rQMsk1g9S5itA8ErlvPb5KkDRWXkg8bssQMeRVZaQqipASBLXhyqOK0AqGbJh7zMnQKcvvROi0iZAV4V//iZJJECAmE67Bk0jQBU0aCPiyyRAAq7GQlaAJkASqw2VEwYmQOnlk3Eg/yRARpOO1nidIkBLCseauW0kQAGz92GxJiJAunu1pjdkJEDUWUE3d/AkQEOpe6byySZAD6TRuZVxJkALlonFo5MmQMJPnq9seidAlxj2kajuJkBjDTuihIomQCIPEypZ2CZArzdiIFCdI0D+RRGK3aojQGj1GRUbjCVAV2BEsaKhJUDjjQLgK2IkQJXn7OnIjiFA4AVMNiBBI0CZQa/Jzo0hQLfCR4tnSCNAFuM2v6s7J0CBgwWuKpcmQKR6uPVWdyRAQW7/ZEEbJkBVigyX8kknQJVL0ETbFSZA/g5JxHM5I0BEPmFmO0kiQEGRr4Am0CZAmCTNd7rqIUChsIaHXfskQPq24kfgYSZAIAPHcWbaJ0DN0q/zd7MlQOMdQKc2fSdAZ+Hcj5NiJkCMkj5QXpUnQEElYyE5RCxAy08t/PVgKkD4Ufwb0b0nQEswivyPAyhAQFuDhETBJkAQHBkTSpUoQCGePtvNnypAOSSWersLK0B/7V8zTpcrQJOb8aPPcStA0N7BKjGTKkDdUloN9gQuQGhkoam+mTBAjGGZZz4RMEAoj2+lbysxQDgIL5g+TjBA9UhxAaJCLkBnkTKI2WgvQHLTlhHe3i9A5nmjBVTZLkCOfgDFTXgqQJwlqHf9WSpAEopYuee/KEBEqDQe+uEpQP1Q9BWHBSpAW1uNROcgKEBpW/VvId0mQNZyu2cUHSdAukaxEguNK0A73bdBFN4tQEhq5WSNjytABoOpxWoSK0BR/SS/Ib8rQNszGyJOwStAqRVBal/DLUDGJ7hN5vYsQDzNKaO6Wy1AvLm7uqpDMEDYBfG9R4ItQNn9QPApySxAC1uYY0l7LUC6mVoEoegqQFIAYDNNNSpAbO2difceKUDkSmWaYx4mQBwxhMiIVihAjur9ELTTJ0DEu3Pe5EooQLs2gMT0oihA5w1ggnnbK0AdAg2Op8MoQKjVAx1FpyhA3noIJfSJKEAW/wCddjErQNvkoILMMi5AAfApC9UXLEBtz3S9FsArQDbI3On88ypAydB+6I5VKkCUjThyC8wlQG/E7v0RhSVA0+H668i5JUBvcZS7hdolQIOgZnljmyVAiRxPcn3aKEAoegN8iLImQEGuc6qWTyhAvXgpaEyPK0CoobYvFNYtQC2VjV8oEjBAUSQNi909MECzJwA95C0wQAE8faDdfi9AA14jef4zL0DNgSFfAgIuQKuw82P/9StAG5/6ajFqMEAsnUBdMYwwQEQW2K+jZzBAkBDN7JMlMECKBBusxgowQHyiod8pBy5ASvyWnvHBKkAuaWDtqGUqQFxXcmYFFylAIFbKNMW+K0CGmE81vqcqQN6Ye4YHDCxAKpXSm1//KkA+EcMU3IEsQJJEQMEMkTBAy5PqlUqnMEA1O9Yq+qwvQDwH3Arx5C9A5ISFzA9ILUApkIw2rJsrQKFE0gy7MipAC6rm/2QyLECxjAQFIGgpQGjO/yYocSNANHzim8pFHkDcjxspbichQFnk4mBWPSBA5OyRlL4kGkBxr8rGhO4aQGwmRYgRKhxAHWnXCbAUIUAyZ39Jm7YeQCvQg35PGh5AlIWSl4NZHEA1jhz8E1EeQGY96Fp8mxxAlDYpSaYCG0Bw2RPD1lEfQMZOMgKCyR9AwsC5CNWeIEAEvzqmc7MeQB6ZCSBb+xlAJ6NJ0XLbHkC2l0tYNxEfQL8yhA6Tux1AaMWM8yssIECSfF33sx0hQLq5gY40IyJAckaSJY6FJUC9QePNwiAoQBxzvjLUbiZANzyxrzO4JkC+HjBWyegkQFCujIc/NCNA7poOp8UaJUBzA3WYB9olQB4MGc/m9iZADaOkSjCaJUC1ZxICzYkkQMpVQS4E7SJALWNJxq5dIUATh1miijsgQF6w4/sDkBhAbKr8HV8zFEDzSaXCLf8WQOZasi+ydxRAaOAgQPVYEUASCXga8osJQOzLT3+IkwtAmvvs3U4pAUB033dt60AGQO2qtVdkpv8/QI3fETIr5z8\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[1000]}},\"selected\":{\"id\":\"1766\"},\"selection_policy\":{\"id\":\"1782\"}},\"id\":\"1765\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1733\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"1799\"},\"glyph\":{\"id\":\"1802\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1804\"},\"nonselection_glyph\":{\"id\":\"1803\"},\"selection_glyph\":{\"id\":\"1834\"},\"view\":{\"id\":\"1806\"}},\"id\":\"1805\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"1688\"]},\"title\":\"Bokeh Application\",\"version\":\"2.3.3\"}};\n    var render_items \u003d [{\"docid\":\"edeea07d-9404-4080-91b6-a4220aaeb419\",\"root_ids\":[\"1688\"],\"roots\":{\"1688\":\"ce1fb142-9429-4d32-9859-83736fd24202\"}}];\n    root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n    embed_document(root);\n  } else {\n    var attempts \u003d 0;\n    var timer \u003d setInterval(function(root) {\n      if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else if (document.readyState \u003d\u003d \"complete\") {\n        attempts++;\n        if (attempts \u003e 200) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 25, root)\n  }\n})(window);\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885707198_-1652524072",
      "id": "paragraph_1580885707198_-1652524072",
      "dateCreated": "2020-02-05 14:55:07.198",
      "dateStarted": "2021-07-26 03:16:19.213",
      "dateFinished": "2021-07-26 03:16:19.698",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nfrom hvplot.sample_data import us_crime, airline_flights\n\ncrime \u003d us_crime.read()\nprint(type(crime))\ncrime.hvplot.line(x\u003d\u0027Year\u0027, y\u003d\u0027Violent Crime rate\u0027)\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:19.713",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "TEXT",
            "data": "\u003cclass \u0027pandas.core.frame.DataFrame\u0027\u003e\n\n"
          },
          {
            "type": "HTML",
            "data": "\u003cdiv id\u003d\u00272267\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"27ced165-e49c-4e94-8ea5-a22d91023106\" data-root-id\u003d\"2267\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"0c4b73cb-78d8-477a-9468-f6ff07efd9cb\":{\"defs\":[{\"extends\":null,\"module\":null,\"name\":\"ReactiveHTML1\",\"overrides\":[],\"properties\":[]},{\"extends\":null,\"module\":null,\"name\":\"FlexBox1\",\"overrides\":[],\"properties\":[{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_content\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_items\"},{\"default\":\"row\",\"kind\":null,\"name\":\"flex_direction\"},{\"default\":\"wrap\",\"kind\":null,\"name\":\"flex_wrap\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"justify_content\"}]},{\"extends\":null,\"module\":null,\"name\":\"TemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]},{\"extends\":null,\"module\":null,\"name\":\"MaterialTemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]}],\"roots\":{\"references\":[{\"attributes\":{\"axis\":{\"id\":\"2281\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"2284\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2315\",\"type\":\"AllLabels\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer02691\",\"sizing_mode\":\"stretch_width\"},\"id\":\"2268\",\"type\":\"Spacer\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer02692\",\"sizing_mode\":\"stretch_width\"},\"id\":\"2337\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2286\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"Year\",\"formatter\":{\"id\":\"2311\"},\"major_label_policy\":{\"id\":\"2312\"},\"ticker\":{\"id\":\"2282\"}},\"id\":\"2281\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis_label\":\"Violent Crime rate\",\"formatter\":{\"id\":\"2314\"},\"major_label_policy\":{\"id\":\"2315\"},\"ticker\":{\"id\":\"2286\"}},\"id\":\"2285\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"2285\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"2288\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"2303\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2277\",\"type\":\"LinearScale\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"2294\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"Year\"},\"y\":{\"field\":\"Violent Crime rate\"}},\"id\":\"2305\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"Year\"},\"y\":{\"field\":\"Violent Crime rate\"}},\"id\":\"2306\",\"type\":\"Line\"},{\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"},\"id\":\"2273\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"Year\"},\"y\":{\"field\":\"Violent Crime rate\"}},\"id\":\"2307\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"2302\"}},\"id\":\"2309\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2289\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2290\",\"type\":\"PanTool\"},{\"attributes\":{\"below\":[{\"id\":\"2281\"}],\"center\":[{\"id\":\"2284\"},{\"id\":\"2288\"}],\"height\":300,\"left\":[{\"id\":\"2285\"}],\"margin\":[5,5,5,5],\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"min_border_top\":10,\"renderers\":[{\"id\":\"2308\"}],\"sizing_mode\":\"fixed\",\"title\":{\"id\":\"2273\"},\"toolbar\":{\"id\":\"2295\"},\"width\":700,\"x_range\":{\"id\":\"2269\"},\"x_scale\":{\"id\":\"2277\"},\"y_range\":{\"id\":\"2270\"},\"y_scale\":{\"id\":\"2279\"}},\"id\":\"2272\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2291\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"end\":2014.0,\"reset_end\":2014.0,\"reset_start\":1960.0,\"start\":1960.0,\"tags\":[[[\"Year\",\"Year\",null]]]},\"id\":\"2269\",\"type\":\"Range1d\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"2271\"},{\"id\":\"2289\"},{\"id\":\"2290\"},{\"id\":\"2291\"},{\"id\":\"2292\"},{\"id\":\"2293\"}]},\"id\":\"2295\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_color\":\"#30a2da\",\"line_width\":2,\"x\":{\"field\":\"Year\"},\"y\":{\"field\":\"Violent Crime rate\"}},\"id\":\"2310\",\"type\":\"Line\"},{\"attributes\":{\"end\":818.21,\"reset_end\":818.21,\"reset_start\":98.08999999999999,\"start\":98.08999999999999,\"tags\":[[[\"Violent Crime rate\",\"Violent Crime rate\",null]]]},\"id\":\"2270\",\"type\":\"Range1d\"},{\"attributes\":{\"data\":{\"Violent Crime rate\":{\"__ndarray__\":\"zczMzMwcZEAzMzMzM8NjQJqZmZmZSWRAZmZmZmYGZUAzMzMzM9NnQGZmZmZmBmlAAAAAAACAa0BmZmZmZqZvQGZmZmZmpnJAMzMzMzOLdEAAAAAAALh2QAAAAAAAwHhAAAAAAAAQeUBmZmZmZhZ6QJqZmZmZ0XxAzczMzMx8fkDNzMzMzDx9QGZmZmZmvn1AzczMzMwcf0AzMzMzMyeBQM3MzMzMpIJAAAAAAACMgkBmZmZmZtaBQM3MzMzM0IBAMzMzMzPfgEDNzMzMzHCBQM3MzMzMYINAAAAAAAAkg0DNzMzMzASEQDMzMzMz14RAzczMzMzMhkCamZmZmbGHQJqZmZmZrYdAzczMzMxYh0DNzMzMzEyGQAAAAAAAZIVAzczMzMzkg0AAAAAAABiDQM3MzMzMvIFAAAAAAABYgEAAAAAAAKh/QAAAAAAAiH9AZmZmZmbmfkDNzMzMzLx9QDMzMzMz83xAAAAAAABQfUDNzMzMzPR9QM3MzMzMfH1AmpmZmZmpfEBmZmZmZv56QAAAAAAASHlAmpmZmZkxeEDNzMzMzDx4QJqZmZmZsXdAMzMzMzN7d0A\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]},\"Violent_Crime_rate\":{\"__ndarray__\":\"zczMzMwcZEAzMzMzM8NjQJqZmZmZSWRAZmZmZmYGZUAzMzMzM9NnQGZmZmZmBmlAAAAAAACAa0BmZmZmZqZvQGZmZmZmpnJAMzMzMzOLdEAAAAAAALh2QAAAAAAAwHhAAAAAAAAQeUBmZmZmZhZ6QJqZmZmZ0XxAzczMzMx8fkDNzMzMzDx9QGZmZmZmvn1AzczMzMwcf0AzMzMzMyeBQM3MzMzMpIJAAAAAAACMgkBmZmZmZtaBQM3MzMzM0IBAMzMzMzPfgEDNzMzMzHCBQM3MzMzMYINAAAAAAAAkg0DNzMzMzASEQDMzMzMz14RAzczMzMzMhkCamZmZmbGHQJqZmZmZrYdAzczMzMxYh0DNzMzMzEyGQAAAAAAAZIVAzczMzMzkg0AAAAAAABiDQM3MzMzMvIFAAAAAAABYgEAAAAAAAKh/QAAAAAAAiH9AZmZmZmbmfkDNzMzMzLx9QDMzMzMz83xAAAAAAABQfUDNzMzMzPR9QM3MzMzMfH1AmpmZmZmpfEBmZmZmZv56QAAAAAAASHlAmpmZmZkxeEDNzMzMzDx4QJqZmZmZsXdAMzMzMzN7d0A\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]},\"Year\":[1960,1961,1962,1963,1964,1965,1966,1967,1968,1969,1970,1971,1972,1973,1974,1975,1976,1977,1978,1979,1980,1981,1982,1983,1984,1985,1986,1987,1988,1989,1990,1991,1992,1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014]},\"selected\":{\"id\":\"2303\"},\"selection_policy\":{\"id\":\"2324\"}},\"id\":\"2302\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"2294\"}},\"id\":\"2292\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2312\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2311\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"data_source\":{\"id\":\"2302\"},\"glyph\":{\"id\":\"2305\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2307\"},\"nonselection_glyph\":{\"id\":\"2306\"},\"selection_glyph\":{\"id\":\"2310\"},\"view\":{\"id\":\"2309\"}},\"id\":\"2308\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"2293\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"2308\"}],\"tags\":[\"hv_created\"],\"tooltips\":[[\"Year\",\"@{Year}\"],[\"Violent Crime rate\",\"@{Violent_Crime_rate}\"]]},\"id\":\"2271\",\"type\":\"HoverTool\"},{\"attributes\":{},\"id\":\"2324\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2314\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2279\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"2282\",\"type\":\"BasicTicker\"},{\"attributes\":{\"children\":[{\"id\":\"2268\"},{\"id\":\"2272\"},{\"id\":\"2337\"}],\"margin\":[0,0,0,0],\"name\":\"Row02687\",\"tags\":[\"embedded\"]},\"id\":\"2267\",\"type\":\"Row\"}],\"root_ids\":[\"2267\"]},\"title\":\"Bokeh Application\",\"version\":\"2.3.3\"}};\n    var render_items \u003d [{\"docid\":\"0c4b73cb-78d8-477a-9468-f6ff07efd9cb\",\"root_ids\":[\"2267\"],\"roots\":{\"2267\":\"27ced165-e49c-4e94-8ea5-a22d91023106\"}}];\n    root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n    embed_document(root);\n  } else {\n    var attempts \u003d 0;\n    var timer \u003d setInterval(function(root) {\n      if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else if (document.readyState \u003d\u003d \"complete\") {\n        attempts++;\n        if (attempts \u003e 200) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 25, root)\n  }\n})(window);\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885736306_456675117",
      "id": "paragraph_1580885736306_456675117",
      "dateCreated": "2020-02-05 14:55:36.307",
      "dateStarted": "2021-07-26 03:16:19.738",
      "dateFinished": "2021-07-26 03:16:20.407",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nus_crime.plot.bivariate(\u0027Burglary rate\u0027, \u0027Property crime rate\u0027, legend\u003dFalse, width\u003d500, height\u003d400) * \\\nus_crime.plot.scatter(  \u0027Burglary rate\u0027, \u0027Property crime rate\u0027, color\u003d\u0027black\u0027, size\u003d15, legend\u003dFalse) + \\\nus_crime.plot.table([\u0027Burglary rate\u0027, \u0027Property crime rate\u0027], width\u003d350, height\u003d350)",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:20.438",
      "progress": 0,
      "config": {
        "colWidth": 12.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv id\u003d\u00272389\u0027\u003e\n\n\n\n\n\n  \u003cdiv class\u003d\"bk-root\" id\u003d\"d1042cde-eb40-4853-8118-1e70ca71fdda\" data-root-id\u003d\"2389\"\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type\u003d\"application/javascript\"\u003e(function(root) {\n  function embed_document(root) {\n    var docs_json \u003d {\"d3743814-ca8d-4bab-b0a5-aeec74578236\":{\"defs\":[{\"extends\":null,\"module\":null,\"name\":\"ReactiveHTML1\",\"overrides\":[],\"properties\":[]},{\"extends\":null,\"module\":null,\"name\":\"FlexBox1\",\"overrides\":[],\"properties\":[{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_content\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"align_items\"},{\"default\":\"row\",\"kind\":null,\"name\":\"flex_direction\"},{\"default\":\"wrap\",\"kind\":null,\"name\":\"flex_wrap\"},{\"default\":\"flex-start\",\"kind\":null,\"name\":\"justify_content\"}]},{\"extends\":null,\"module\":null,\"name\":\"TemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]},{\"extends\":null,\"module\":null,\"name\":\"MaterialTemplateActions1\",\"overrides\":[],\"properties\":[{\"default\":0,\"kind\":null,\"name\":\"open_modal\"},{\"default\":0,\"kind\":null,\"name\":\"close_modal\"}]}],\"roots\":{\"references\":[{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"2417\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"2462\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"black\"},\"line_alpha\":{\"value\":0.1},\"size\":{\"value\":3.872983346207417},\"x\":{\"field\":\"Burglary rate\"},\"y\":{\"field\":\"Property crime rate\"}},\"id\":\"2447\",\"type\":\"Scatter\"},{\"attributes\":{\"data_source\":{\"id\":\"2443\"},\"glyph\":{\"id\":\"2446\"},\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"2448\"},\"nonselection_glyph\":{\"id\":\"2447\"},\"selection_glyph\":{\"id\":\"2451\"},\"view\":{\"id\":\"2450\"}},\"id\":\"2449\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_color\":{\"field\":\"Density\",\"transform\":{\"id\":\"2432\"}},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"2436\",\"type\":\"MultiLine\"},{\"attributes\":{},\"id\":\"2546\",\"type\":\"NumberEditor\"},{\"attributes\":{\"editor\":{\"id\":\"2546\"},\"field\":\"Burglary_rate\",\"formatter\":{\"id\":\"2545\"},\"title\":\"Burglary rate\"},\"id\":\"2547\",\"type\":\"TableColumn\"},{\"attributes\":{\"format\":\"0,0.0[00000]\"},\"id\":\"2545\",\"type\":\"NumberFormatter\"},{\"attributes\":{\"format\":\"0,0.0[00000]\"},\"id\":\"2550\",\"type\":\"NumberFormatter\"},{\"attributes\":{},\"id\":\"2551\",\"type\":\"NumberEditor\"},{\"attributes\":{\"below\":[{\"id\":\"2404\"}],\"center\":[{\"id\":\"2407\"},{\"id\":\"2411\"}],\"height\":400,\"left\":[{\"id\":\"2408\"}],\"margin\":null,\"min_border_bottom\":10,\"min_border_left\":10,\"min_border_right\":10,\"min_border_top\":10,\"renderers\":[{\"id\":\"2438\"},{\"id\":\"2449\"}],\"right\":[{\"id\":\"2441\"}],\"sizing_mode\":\"fixed\",\"title\":{\"id\":\"2396\"},\"toolbar\":{\"id\":\"2418\"},\"toolbar_location\":null,\"width\":500,\"x_range\":{\"id\":\"2391\"},\"x_scale\":{\"id\":\"2400\"},\"y_range\":{\"id\":\"2392\"},\"y_scale\":{\"id\":\"2402\"}},\"id\":\"2395\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"2400\",\"type\":\"LinearScale\"},{\"attributes\":{\"editor\":{\"id\":\"2551\"},\"field\":\"Property_crime_rate\",\"formatter\":{\"id\":\"2550\"},\"title\":\"Property crime rate\"},\"id\":\"2552\",\"type\":\"TableColumn\"},{\"attributes\":{},\"id\":\"2544\",\"type\":\"Selection\"},{\"attributes\":{\"toolbar\":{\"id\":\"2575\"},\"toolbar_location\":\"above\"},\"id\":\"2576\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"data\":{\"Burglary_rate\":{\"__ndarray__\":\"mpmZmZnJf0AzMzMzMzeAQJqZmZmZuYBAMzMzMzMDgkCamZmZmdWDQJqZmZmZtYRAAAAAAACIhkDNzMzMzNSJQGZmZmZmIo1AzczMzMzAjkCamZmZmfOQQAAAAAAALpJAMzMzMzPTkUAAAAAAABqTQM3MzMzMdpZAZmZmZmbwl0DNzMzMzKCWQDMzMzMzL5ZAZmZmZmZqlkCamZmZmZ+XQGZmZmZmUJpAzczMzMy8mUAAAAAAAECXQM3MzMzM6pRAAAAAAADGk0DNzMzMzC6UQDMzMzMzF5VAzczMzMzelEDNzMzMzJCUQGZmZmZmDpRAzczMzMxAk0BmZmZmZpCTQJqZmZmZQZJAzczMzMwukUBmZmZmZkiQQAAAAAAA2I5AAAAAAACIjUBmZmZmZraMQJqZmZmZ+YpAMzMzMzMTiEBmZmZmZsaGQGZmZmZmLodAAAAAAABYh0AAAAAAACiHQGZmZmZm0oZAMzMzMzO3hkDNzMzMzOiGQM3MzMzMsIZAAAAAAADohkCamZmZmW2GQAAAAAAA6IVAZmZmZmbqhUCamZmZmQGFQDMzMzMzE4NAAAAAAAD0gEA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]},\"Property_crime_rate\":{\"__ndarray__\":\"MzMzMzP5mkCamZmZmU+bQAAAAAAABp1AZmZmZmZwn0AAAAAAACuhQJqZmZmZkaFAzczMzMwlo0AAAAAAAGGlQJqZmZmZ/6dAmpmZmZkuqkAAAAAAAEqsQJqZmZmZca1AzczMzMzQq0AAAAAAADKtQM3MzMxMJbFAMzMzM7PKskAAAAAAgNOyQDMzMzOz+bFAAAAAAIAiskCamZmZmZizQM3MzMxM6bRAAAAAAICItEAzMzMzs6WzQJqZmZkZIbJAAAAAAICSsUBmZmZmZjqyQM3MzMzMEbNAAAAAAABjs0AAAAAAAL6zQJqZmZkZ87NAmpmZmRnRs0AzMzMzMxS0QDMzMzOzJ7NAAAAAAACEskAzMzMzMzSyQAAAAACA7rFAAAAAAABjsUDNzMzMTNywQAAAAAAAqa9AMzMzMzM/rUCamZmZmUSsQDMzMzMzlKxAMzMzMzNdrEBmZmZmZg6sQDMzMzMzdKtAAAAAAADPqkAzMzMzMyWqQM3MzMzMmKlAMzMzMzMdqUCamZmZmcKnQM3MzMzMA6dAzczMzMyypkAAAAAAAGimQJqZmZmZWqVAMzMzMzNIpEA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]}},\"selected\":{\"id\":\"2544\"},\"selection_policy\":{\"id\":\"2572\"}},\"id\":\"2543\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"2449\"}],\"tags\":[\"hv_created\"],\"tooltips\":[[\"Burglary rate\",\"@{Burglary_rate}\"],[\"Property crime rate\",\"@{Property_crime_rate}\"]]},\"id\":\"2394\",\"type\":\"HoverTool\"},{\"attributes\":{\"source\":{\"id\":\"2543\"}},\"id\":\"2557\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"2405\",\"type\":\"BasicTicker\"},{\"attributes\":{\"text_color\":\"black\",\"text_font_size\":\"12pt\"},\"id\":\"2396\",\"type\":\"Title\"},{\"attributes\":{\"children\":[{\"id\":\"2576\"},{\"id\":\"2574\"}]},\"id\":\"2577\",\"type\":\"Column\"},{\"attributes\":{\"data\":{\"Density\":{\"__ndarray__\":\"Ooww4o55dT46jDDijnmFPixppCkrG5A+Ooww4o55lT5Ir7ya8teaPixppCkrG6A+s3rqBV3Koj46jDDijnmlPsGddr7AKKg+\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[9]},\"xs\":[{\"__ndarray__\":\"EBe0mic9dEAXQvThTmd0QGCcIob9GXhAQ5viBPs1eED1aQMYf/t6QLghkXHT9ntASI0cGiyufUAD0yJy18h/QAin/1yp039A/phazIYZgUAsFjekP9iBQJqhyAwLCoJAyNp2Y38fg0DVWO6ZqsaDQDomXM3984NA11Ncb7QBhUBnysPiOLGFQICbpY8VtYVAVCdN1XDJhkDAatIrS3qHQCjeXIWAo4dAzHGLH+V5iEAeKm9CGzqJQNAgFHvrkYlACCSpqy0XikDNPMYTsPSKQHtjy3BWgItAYjTQhbOui0DgCSs8OrOMQNlUf3ZsZo1AJKaCZsFujUBXu1pJ7YOOQK4k/pNoS49AzOg5XCxdj0BwLXWOwTeQQD5rcmFioZBAvJX4qMulkEDY8izK2zaRQBA31CMBnZFAGThdedejkUDg7rt4HjaSQGTYr542lJJAsgkkfoijkkAr61EcBi+TQLh5ixlsi5NAaW6t6VmWk0BQzjXooR+UQLFEtkUvf5RADhtnlKGClEBQUX6ZfwiVQGyuA65MaJVAYrxCD9d5lUBYMlJhkeqVQEH70tR5TZZAtl0eigxxlkBafoC6l8WWQKwEIp7BLpdADP/5BEJol0Cuo+JyxZaXQEAWNxCECphAE1SUfBlcmEBgoNV/d1+YQLvOjJsb3ZhApdEbc2M0mUC0QbH6rFaZQHgogW8ToJlA3iz+n7sDmkBXnQGybUuaQArjjHXiTZpAHjfpcQ3DmkAs/VoX3xObQF6EaPAXRZtAeBxVYfZkm0AnKC237sibQELTxKUBD5xAsiVEa008nEBzJlWtqVecQJ4c+DQIrZxASdlcNqDpnECmAtGBGRydQAbHH+aCM51AdeCdcc9SnUDDA9R7wnedQNdINC+vfZ1AHQAgSsdJnUAGxx/mgjOdQLIlRGtNPJxA5L1eGWT+m0BehGjwF0WbQJfPJWIObJpACuOMdeJNmkC0QbH6rFaZQJ5N6joPBZlAYKDVf3dfmEAM//kEQmiXQLZdHooMcZZAtgnwQXJvlkDYMdXqLX+VQGK8Qg/XeZVAeknUFyC1lEAOG2eUoYKUQMeElW389ZNAuHmLGWyLk0CaY+YtXEmTQFXLLGp+rZJAZNivnjaUkkCKBMGFcASSQBA31CMBnZFAo3xmh9x1kUC50HO2jeCQQLyV+KjLpZBA3LoF4TdQkEDJWFK7vqWPQMzoOVwsXY9AfDvljBCJjkCfc8wglKqNQCSmgmbBbo1AeKUDnFyZjEDMobSB2ceLQHxjy3BWgItAUTUDDafMikDRkdxfPvmJQNAgFHvrkYlAmYbmBXwliUBO2Ly2RD6IQC4ra1nQp4dAKN5chYCjh0CmLOBUfpuGQPJLJzxp9YVAgJuljxW1hUCiMnfcjR2FQE1g/3bCVIRAowXT8jbPg0DUWO6ZqsaDQIqBK4uz1YJAngpTOqk1gkAsFjekP9iBQIX+bPs3moFAQoWB5BTDgECaJOJ2dDmAQAin/1yp039AeE9M0U1Nf0CbQCr3/NB9QNg2bcB303xAmYSaqRYPfEC4IZFx0/Z7QHF3BjuMv3pAXj9c9nzEeUDxyKQ7Jgd5QKIOiX9Qa3hAYJwihv0ZeEB7bwEs6qx3QKFKaIHZz3ZAIMt+BAUcdkDzxYX3boV1QCNXcIAbBHVASfvvHwaQdEAQF7SaJz10QJlumIDGG3RA1e+Ck5u9c0AiCQ4B/q9zQLZOPRXo6nNA4Iv0ztYkdEBukMO1ZNlzQE1/x4o4FnNAqX8ef+tKckCno0KL+p5xQDAJeJgUCXFA556vb9V2cEDAkUWvUWBwQNa3Xw0bvm9A7H1RWdx6b0DAkUWvUWBwQLwYTb/F4HBAEBe0mic9dEA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[175]},{\"__ndarray__\":\"YJwihv0ZeEAmv/GZoNF4QLghkXHT9ntANSqrUiBofEBytr2oguB+QAin/1yp039AA4JupbKvgEAVTX4l6LKBQCwWN6Q/2IFAgDbw4wfLgkC4N9OV+qiDQNRY7pmqxoNAotP4DhaxhEDiv3w/tHuFQICbpY8VtYVA5tel/aZyhkBLXGGEDjqHQCjeXIWAo4dAUver4pMWiEBqeFuueuqIQNAgFHvrkYlA1exThO+jiUCmyhSCh5OKQEoLVeVQT4tAfGPLcFaAi0BSR8aBjEGMQCxGPtIBEY1AJKaCZsFujUC7RgUSHAaOQJWhP9hU645AzOg5XCxdj0AkKkZqteuPQAQTVcRJb5BAvJX4qMulkEDE6mJ7dvSQQJY3F0x2bpFAEDfUIwGdkUDdpcjGAvSRQBML7q1PapJAZNivnjaUkkA434uqbOySQPS7xWlDXpNAuHmLGWyLk0D0X7DobNuTQMU7sDKqSpRADhtnlKGClECtHL9tV8KUQCsD2Ef+MZVAYrxCD9d5lUAezea9/qKVQCczyPAPFpZAtl0eigxxlkDttO34/3yWQMbR1cNQ9pZAFxfanU5Xl0AM//kEQmiXQBvJHKiZz5dAxsR0m+QwmEBgoNV/d1+YQK1F0u2KnJhAgGkeZ1gCmUAEFAhxmVWZQLRBsfqsVplAQoJ9OwzGmUAyFNEoEBqaQArjjHXiTZpADp6pZzdymkC8L84qc82aQBApnOxFFZtAXoRo8BdFm0ABiMt+12CbQAA+XeVuqZtAwts71iffm0AGkxAZAgqcQBv+hRWVJ5xA1tiLUy4BnEBehGjwF0WbQHpKNsczfZpACuOMdeJNmkC0QbH6rFaZQGCg1X93X5hADP/5BEJol0C2XR6KDHGWQGK8Qg/XeZVAzEoiodUulUAOG2eUoYKUQDW5UDNBTJRAJ1ywnkSRk0C4eYsZbIuTQDeW9Suk4ZJAZNivnjaUkkBUvUSL/DiSQDHl22UMppFAEDfUIwGdkUDgDFVAYgiRQLyV+KjLpZBAfBeuxYx8kEAsBeYcC+aPQMzoOVwsXY9AlgFK+OTZjkBln8haB+SNQCSmgmbBbo1A5KGgYxrojECRSWicMQGMQHxjy3BWgItAwnxvQbEdi0C4CYL6GDeKQNEgFHvrkYlAAniHrrF7iUCf0W5hloOIQKOu293r04dAKN5chYCjh0B8VAXM0+qGQC7dD7SNLoZAgJuljxW1hUDv7RwK2HqFQKzP0FupnoRAQ1YI03AChEDUWO6ZqsaDQCFOOo7IOINAovr4y66EgkDShyMDZPyBQCwWN6Q/2IFA270ZHmw9gUB8IohIXqGAQE6dYFhVKIBACKf/XKnTf0AGTog0xTR/QEi6KAlYGH5ALrkuzNdAfUAPFc4LrIx8QLghkXHT9ntAGL7FJuHme0BAsW41Rw97QBwLMHj0XnpA528z/RTJeUAfbQ5GS0h5QCjYFniG2HhAf0mWCS96eEClhHwf8kB4QBPCTbWRX3hA/FSMOKfIeEDDQxgjtO54QDqhRJlpsHhAQv3czrwzeEBgnCKG/Rl4QPVHX2pnN3dAjjp5gklfdkALYNCpjLh1QNGl9xFqM3VAusnFoezedEBpMXvAAPJ1QGCcIob9GXhA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[153]},{\"__ndarray__\":\"uCGRcdP2e0BUWO1CkVJ+QAin/1yp039AJSDU8XWVgECrlZBmhbWBQCwWN6Q/2IFAXov+3mvBgkAtbpuke7KDQNRY7pmqxoNAtO5M+BuphEDAQKY2V3uFQICbpY8VtYVAkNDrPDRnhkCqgmKO3iuHQCjeXIWAo4dAupT6SRwHiECGALp4rM6IQM8gFHvrkYlA1oEpjNSSiUDqGYYLk2yKQGd5kBOtL4tAfGPLcFaAi0CAam6ThBOMQLJcvKoH5IxAJKaCZsFujUCR64ksGtWNQGZwrmKFuI5AzOg5XCxdj0As2R+R3LmPQHPuEFSgVZBAvJX4qMulkEBnwSj7EduQQPhPRZZCVZFAEDfUIwGdkUBG3LWEndmRQOerBP/AUJJAZNivnjaUkkCQYjwb1NCSQGqgEousQ5NAuHmLGWyLk0BGRC+ulL+TQEfbGDzkL5RADhtnlKGClEAjVTBviaiUQDYwvBkkGZVAYrxCD9d5lUC1sMcW1I2VQKiqyjnAAJZA9upRi1JulkC2XR6KDHGWQAJYB+tV5JZAN3MPhAhMl0AM//kEQmiXQAbXHPk1v5dAKDadFuYimEBgoNV/d1+YQM7+LuZxi5hAf6CuSLrumEAAREEDQkaZQLRBsfqsVplAQ9gZLzOpmUAiDQScw/qZQGxAs1D0R5pACuOMdeJNmkAqZn7zUZeaQLJbr9NQ05pAYnTKrhUEm0AyRPa6riibQE5KyRyfB5tACuOMdeJNmkAwGDl8GamZQLRBsfqsVplAYKDVf3dfmEAM//kEQmiXQLZdHooMcZZAYrxCD9d5lUAOG2eUoYKUQBT7H4sHbZRApIHvO0ybk0C4eYsZbIuTQB0qaBZ955JAZNivnjaUkkAbc2JNkjiSQBA31CMBnZFAwZKcQOyakUB8eyCfwAORQLyV+KjLpZBAlKpDUO1wkECwIAlFNdiPQMzoOVwsXY9Ax+rzPsLFjkBszND9LNaNQCSmgmbBbo1ANPGibirVjEBCl3I1ivaLQHxjy3BWgItAngK93MwIi0DBjZERBzCKQNAgFHvrkYlAEHhyaVxfiUC2kVehDH6IQOy6fLU5yIdAKN5chYCjh0D6/YHtlOOGQLhAg/53LIZAgJuljxW1hUC2mc7EG26FQH4e8U61pIRAi8B/yZ8GhEDUWO6ZqsaDQKzoTDZzR4NAXuOqP6CegkAP3+geuhSCQCwWN6Q/2IFAHUx7Da9ygUC7bVXQcOGAQLj5wxQZbYBAITyZcuMEgEAIp/9cqdN/QIRZt+abH39Ah73CGkhafkDCRe3vEbZ9QBjBtfhcJn1AaxEj5MajfECpj4fzzyV8QLghkXHT9ntAognFHjqte0CxDxHVtW17QGc5XWmNh3tAuCGRcdP2e0AINNbZ4ip8QEr+8Jriy3xAxsgm2aC0fECZwskzZzh8QLghkXHT9ntAAiHIce1Ie0BUnE9uZ2Z6QCweqBKMs3lAxtOrjwUceUAuSzVVyKl4QLghkXHT9ntA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[141]},{\"__ndarray__\":\"uCGRcdP2e0AIp/9cqdN/QBC9vqwJeoBALBY3pD/YgUAF3yko3dmBQKrsDy1txIJA1FjumarGg0CGHR2xg9aDQBWxEurRrYRAIY+RdFWOhUCAm6WPFbWFQLA1PpI3ZoZAHk/Gg58lh0Ao3lyFgKOHQDwgw0xkAIhALP4CM8+ziEBSXTkVOoeJQNAgFHvrkYlA2oPRLKRCikA4N3Q1YgCLQHxjy3BWgItAFvk2bpjgi0Cunq01ZZ+MQCWmgmbBbo1AvIXH+NSejUDcnl9ebWqOQMzoOVwsXY9A07i4JMyDj0BEYzjTxi6QQLyV+KjLpZBAv8iTlYfAkECthqDpyTCRQBA31CMBnZFAyNyEA0+/kUBUnJAWdy6SQGTYr542lJJAY/XMb2S3kkCifWkNPCSTQLh5ixlsi5NANi1T1Jipk0Cyy+3bTBaUQA4bZ5ShgpRAzlbIb6uZlECDTEX2SQiVQGK8Qg/XeZVA3M9oy1uIlUCwKgBaZ/iVQLZdHooMcZZA7Zg0OF1xlkB83YIxT+GWQA4bqUZaTpdADP/5BEJol0Du90Ggk72XQILhG5IYIJhAYKDVf3dfmED8LFUg24eYQLRZOW7C4phA0M70KC45mUC0QbH6rFaZQLdzX+qLj5lAxo5pqXXTmUCY95i4eA+aQBNqLXJrSppACuOMdeJNmkAH8GPIN1iaQArjjHXiTZpAtEGx+qxWmUATVJSban+YQGCg1X93X5hADP/5BEJol0C2XR6KDHGWQCvDGcNjjJVAYrxCD9d5lUAOTQsz1y2VQA4bZ5ShgpRAMpBQRJ+ak0C4eYsZbIuTQHQy+L+/3pJAZNivnjaUkkBbN2jfMyqSQBA31CMBnZFAAHkHKOJ/kUBygrU0uO6QQLyV+KjLpZBAzeuMgZBYkEB7XXnD0KaPQMzoOVwsXY9AJmhiEUKYjkDI4fZ3UqWNQCSmgmbBbo1AUoLWFeiojEACsKkbr8uLQHxjy3BWgItAxFSFFgraikAzLjzecQuKQNAgFHvrkYlAynTTZC0oiUAu5YapmVyIQCjeXIWAo4dAxh70JpyYh0Dex0elVcGGQGpdQGWZD4ZAgJuljxW1hUC45tnK+UaFQHMpecn7k4RAOleGnmv2g0DUWO6ZqsaDQOw+MnzcQINAwK5UbUOqgkBg8nv2MiaCQCwWN6Q/2IFAJj5KSIyagUCNi/wTrB6BQCFtfmLauYBAZfmw3wFhgEDYBJBNWA+AQAin/1yp039ANvn//zh/f0AnJQ9SDPR+QPJpeREqh35AmkmgF5pEfkB2+ebdP0l+QM0rdSxe2H5ACKf/XKnTf0D62ju1NxaAQJokKe0yS4BADllSjWQWgEAIp/9cqdN/QO/QHyYsO39AcjF4r0lSfkBBqmbx05J9QBSGA8N82XxAuCGRcdP2e0B5ApuRnO17QLghkXHT9ntAAAAAAAAA+H8kpoJmwW6NQEvZpkxjKI1AMORmllwsjUBk0h+YXliNQCSmgmbBbo1AeQzhoJTijUDchTFufWSOQBAJmP0L1Y5ASCyjLXJFj0DM6DlcLF2PQKTTdtDVHpBADIvxk/53kEC8lfioy6WQQG6c27XRNJFAEDfUIwGdkUBqprauhdKRQG8pfPWI1ZFABYXWIxS+kUAQN9QjAZ2RQJtVEN74ipFAdDzPb/5EkUCqe4VccACRQOlxYUTiqpBAvJX4qMulkECSE+wMzDKQQBY12931no9AzOg5XCxdj0Da9yjBmhOOQCSmgmbBbo1A\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[165]},{\"__ndarray__\":\"CKf/XKnTf0DsjcQqaHqBQCwWN6Q/2IFA+NHK/j6dgkDUWO6ZqsaDQGshf51M4INAJi1607eUhEDFcyiykoiFQICbpY8VtYVABnoOPJpFhkD3IzxiPu+GQCjeXIWAo4dA9tSbiejUh0DRlqIJbFuIQODmWi6XBYlA0CAUe+uRiUDPC1xmSM+JQO5WpafsNIpAInSm0W+9ikB8Y8twVoCLQKC3Gfxyk4tAfGPLcFaAi0AY9ymzQGiKQBFkAG0ShIpAd8xlQsW5ikDeottN4/OKQCxnIzPuNYtAfGPLcFaAi0DzncyXwIOLQMqbXJZTB4xAhiai/MBvjECYyjH5dtOMQLaByuLYPI1AJKaCZsFujUA3WMcS/9iNQORU7A4Fc45A3iIJPSYDj0DM6DlcLF2PQOEhrQlKzo9A1stXT8JLkEC8lfioy6WQQKprifaMs5BA0ivvOMBGkUAQN9QjAZ2RQPgXsPpL9pFAZNivnjaUkkC684xhOOuSQA7xZQ1N8ZJADs2u7K3mkkDyh5wlfNSSQOyIs+iKuZJAZNivnjaUkkAVnnrJNo2SQGxTtWrnZpJAcKOqp0BCkkDtRAPGcSOSQGTYr542lJJAcq5BBPfKkkALczL6rVyTQLh5ixlsi5NAhl1YnJPfk0ANG2eUoYKUQEeP4m42g5RAasoEDzfulEBhvEIP13mVQGpqrih8gpVAhTF86jDwlUC2XR6KDHGWQMJH9t6VdpZAPmF9xyzglkDms5qQ1lOXQAz/+QRCaJdAysf+DYe7l0C41SF/iRqYQGCg1X93X5hAaW8x2UJ/mEBOC1CKdMuYQFHyxSx2E5lAs0Gx+qxWmUAg3R8C916ZQANqUDnJeZlAtEGx+qxWmUBgoNV/d1+YQA3/+QRCaJdAmv4euHhml0C2XR6KDHGWQK99Nq4qxJVAYrxCD9d5lUDM4krsnD+VQA5yEJQvlpRADhtnlKGClECafF+YllOUQLh5ixlsi5NAb8EhqFvpkkBk2K+eNpSSQOwcYZLhI5JAEDfUIwGdkUDwykQ0bmyRQOpX1d3V1JBAvJX4qMulkED/v/YJQEOQQMvoOVwsXY9A4AP0JFdaj0CAHlTRcGuOQCSmgmbBbo1AYG069kVbjUAtDE/n63qMQPbN3IjwhItAfGPLcFaAi0AQMuWUR6mKQDVCnKst04lA0CAUe+uRiUByD5Gd+fCIQL6K15GPLohAKN5chYCjh0AFTwxMM1aHQHQ0kWgwmYZAbj2ti5zjhUCAm6WPFbWFQFyScslXIYVAPOPWnBuAhEB2/A1B/eCDQNRY7pmqxoNAcH7Au8w/g0Cgd3D7n72CQE731pa/RoJALBY3pD/YgUBiHTUTP9CBQCCeY1LRboFAUPk4ywQggUBL7HKs79yAQHiLWEPto4BA8u9NGFp2gEAtjiKjll2AQA4//bCoiYBAZGq0t26kgUAsFjekP9iBQFfEfSLfiIJAYhW3l7BTgkArFjekP9iBQJ1XD4SMzIFAjnSRAapHgUD2Mri4jOOAQANQ5dBHhoBACKf/XKnTf0DYOZMJ3cB/QAin/1yp039AAAAAAAAA+H8QN9QjAZ2RQNGXlq3YspFAFgim7MizkUAQN9QjAZ2RQM75UgfomZFAbu2wZpKAkUAQN9QjAZ2RQA\u003d\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[155]},{\"__ndarray__\":\"1FjumarGg0APC9lL0tuDQNRY7pmqxoNAOnZ7x7mug0DUWO6ZqsaDQAAAAAAAAPh/LBY3pD/YgUA3sdt+fhyCQNRY7pmqxoNAZ4wFejz3hECAm6WPFbWFQCNye31yJ4ZAOtMqR131hkCK1Z1mnpSHQCjeXIWAo4dABBBbw4RdiEB81zQC6t2IQFqUSYRJUYlA0CAUe+uRiUAgOfVWBNmJQB6piXLxTYpAoJcv/TSyikA7xb/DJhaLQHxjy3BWgItAqXokYSOHi0Dsk0BlGAyMQOhLrJJmhIxAljHutGYAjUAkpoJmwW6NQH99NfCXoI1ARQPMOTc8jkDF0/3Y49SOQMzoOVwsXY9AhpfvDl6hj0DXZanXAi2QQCpbIljllZBAvJX4qMulkEBjhj636Q2RQLAhv0sBfZFAEDfUIwGdkUARu4adNgWSQOmgcc/7bpJAZNivnjaUkkAyHZflYOGSQD8Ls3Iq7JJAZNivnjaUkkBfbHapJmaSQBA31CMBnZFAQtJIxzR4kUCQH6TVH9CQQLyV+KjLpZBAV4fvv5FBkEDM6DlcLF2PQDhbsSqPMY9AuKtM8qlTjkAkpoJmwW6NQFpo9LIoKo1AvW23iJ9XjEB8Y8twVoCLQOw1jksdR4tApI6wB51/ikDQIBR765GJQLU5m5FZhYlAZwmrqIXCiEDRGe+5E/eHQCjeXIWAo4dAfQvia8cih0D+PPPIW3SGQICbpY8VtYVARPtrybOuhUA9byebywmFQGAkwwszd4RAuWzNEZzYg0DUWO6ZqsaDQN78ZAANVYNAZvBP437sgkAtqJm2x46CQBi4lDnxNoJA59al8iTigUAsFjekP9iBQL7TVQuHqoFA20NQ5i6IgUCTxmxC3IaBQOrQBSFt0IFALBY3pD/YgUAAAAAAAAD4fw4bZ5ShgpRA/RTsCqOolEDfARKZn1SVQGK8Qg/XeZVAmCm4OgXXlUC2XR6KDHGWQG6nUUj/cZZAqLZt7o3SlkCa98zPGUmXQAz/+QRCaJdADDFk/Qypl0BmjdSVNviXQIiST/c8W5hAYKDVf3dfmEDYY1LWUoSYQCaFj/OodphAYKDVf3dfmECgdyQZhw2YQAz/+QRCaJdA1QLwM12qlkC2XR6KDHGWQNdUNXeix5VAYrxCD9d5lUAGNzNiQxmVQP1/aFASr5RADhtnlKGClEARzLF26FaUQHSDyLw3H5RA5pTfK7T7k0BKEV2sROSTQGoop07425NAs5fxQe4GlEAOG2eUoYKUQA\u003d\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[119]},{\"__ndarray__\":\"1FjumarGg0BUGGkk4AKEQOEPr5j0VYVAgJuljxW1hUDwSLAuqV+GQDO/ZZqbFodAKN5chYCjh0CfVA3FpduHQHYi1BMIZIhAxszEARPfiEAS4mpMlmGJQNAgFHvrkYlA+s0lqGPiiUBiOXJARVGKQOAthz9vvopAOlXDf5Y7i0B8Y8twVoCLQBoWjkL0y4tAUIO9xKNBjED4gDjarbmMQCSmgmbBbo1Aq+OONkh1jUAuLD94TvWNQEobL96KaI5AtOcn57NLj0AkpoJmwW6NQIQNkohOKo1ALMMUIXFljEB8Y8twVoCLQBLbxGMMLItA6CBG40VrikDQIBR765GJQA2Ifr97VolA7uE/cu2kiEAL1/NPMbSHQCjeXIWAo4dAjTw5BhsFh0DworaNDV6GQICbpY8VtYVAPvt3mXuThUBLTHjWaA2FQCqdIeODj4RAM6AZcwQEhEDUWO6ZqsaDQH/pyC8+koNAiHXG6exNg0B8UzyMzxmDQBgiRRXf+IJAti1UBUj9gkBydFvebX2DQNRY7pmqxoNAAAAAAAAA+H/M6DlcLF2PQL6SDM5PxY9AKd4+KSGEj0DM6DlcLF2PQLqe7gCkVI9A1iDN82q9jkDM6DlcLF2PQAAAAAAAAPh/YrxCD9d5lUACILyxC9eVQLZdHooMcZZAnXqSJveTlkCO+m1UDNKWQM4tdKaBv5ZAtl0eigxxlkCmNUywNmmWQMgfN1v585VAY7xCD9d5lUCPVpfdAm2VQKdsC4f4R5VAYrxCD9d5lUA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[73]},{\"__ndarray__\":\"gJuljxW1hUAGyTNAVNOFQEdABk61bYZA6hrwZ6A5h0Ao3lyFgKOHQOCjf68v8IdAkEd8CoxiiEAyyZTKZ9yIQKqFjhD0hYlA0CAUe+uRiUCBIB0lsfaJQG4ElyioVYpAzE8Euvy0ikB8Y8twVoCLQAvVjNTggotANW8TAmjMi0AsG9UyCcmLQHxjy3BWgItA+3HngL5Yi0BVR/Ws1tOKQNAgFHvrkYlACqqQKsdSiUBEAZeoL7eIQCjeXIWAo4dAHDx/Q9qVh0DbDarAAg+HQGDmbzcBe4ZAgJuljxW1hUA2dC2hnqOFQJzNdbRrRoVAi4aMqLj5hEBMUpqMa7yEQIbSOL7UoIRAe/QJHJsphUCAm6WPFbWFQA\u003d\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[35]},{\"__ndarray__\":\"Kd5chYCjh0Doda/fMbSHQKIjPBLw24dAKN5chYCjh0CeMzKT0YCHQKutIhndhYdAKd5chYCjh0A\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[7]}],\"ys\":[{\"__ndarray__\":\"xyx2b7CtjkD6371BGNGOQD8/p5ENtZBAhrWgic7CkEAOe2LyEB2SQBZjBzkKj5JAlkAkW1N3k0AfBubDldGUQH1eu5Ww15RAp8unLNgrlkD7xZa6zk6XQDCRaZUahpdAt1Yr/lzgmEAX/75MGAeaQD8c7WafOppAyOGuz+GUm0BRp3A4JO+cQN9aGwQs9pxA2GwyoWZJnkBhMvQJqaOfQH6d3+gi9p9A9PtaufV+oEC43rvtFiyhQF2+2JVsiKFAfMEcIjjZoUBCpH1WWYaiQIexP9o4GKNABofeinozo0DKaT+/m+CjQI5MoPO8jaRAYLOoXDeVpEBSLwEo3jqlQBYSYlz/56VA4WucWKX2pUDa9MKQIJWmQJ7XI8VBQqdA37CAfhJJp0BiuoT5Yu+nQCLXwkjxlKhAJp3lLYScqEDqf0ZipUmpQKjUNapl5alArmKnlsb2qUB0RQjL56OqQLI67QlYRKtAOChp/whRq0D8CsozKv6rQMDtKmhLq6xAW8u8Ly+xrECE0IucbFitQEiz7NCNBa5AThQWyfAkrkAMlk0Fr7KuQNB4rjnQX69AXj49eJ2ir0DKrQe3eAawQCwfOFEJXbBA/1NlXGOWsECPkGjrmbOwQPEBmYUqCrFAU3PJH7tgsUAbG2K4G2SxQLXk+blLt7FAF1YqVNwNskDy0+6GszOyQHnHWu5sZLJA2ziLiP26skA9qrsijhGzQAXNFsxnFLNAnxvsvB5os0ABjRxXr76zQPzUY/VM/rNAY/5M8T8VtEDFb32L0Gu0QCfhrSVhwrRA7HG/qrMCtUCKUt6/8Ri1QOzDDlqCb7VATjU/9BLGtUCwpm+Ooxy2QLuV3VDOSbZAExigKDRztkB0idDCxMm2QNf6AF1VILdAOGwx9+V2t0DG0QN1+IS3QBo8WTnYhbdAOGwx9+V2t0CKNO9511G3QNb6AF1VILdA7NtAVr8Zt0Agvly2Yg63QNb6AF1VILdA8qE8n/NMt0BMGejYt1i3QKBo3HH4ILdA1voAXVUgt0B0idDCxMm2QMdaps4syLZAEhigKDRztkD4wwYqPV62QLCmb46jHLZAAKu9x/nltUBONT/0Esa1QOzDDlqCb7VAeMBapHphtUCKUt6/8Ri1QMg6VVBt1rRAKOGtJWHCtEDFb32L0Gu0QKC1XB70QrRAY/5M8T8VtEABjRxXr76zQBC5llERo7NAnxvsvB5os0A9qrsijhGzQE7/TcRc+LJA2ziLiP26skB5x1rubGSyQKLFLkvhQrJAF1YqVNwNskC15Pm5S7exQO0KubE5gbFAU3PJH7tgsUDxAZmFKgqxQI+QaOuZs7BA0rFlZUqxsEAsHzhRCV2wQMqtB7d4BrBAuhdkgCzAr0DQeK450F+vQAyWTQWvsq5ASLPs0I0FrkAdSBBw8/qtQITQi5xsWK1AwO0qaEurrEAoz9m/8SesQPwKyjMq/qtAOChp/whRq0B0RQjL56OqQKRZZ/NsKKpArmKnlsb2qUDqf0ZipUmpQCad5S2EnKhAYrqE+WLvp0CiF2kl1NinQJ7XI8VBQqdA2vTCkCCVpkAWEmJc/+elQFIvASjeOqVAOE7CiInVpECOTKDzvI2kQMppP7+b4KNABofeinozo0BCpH1WWYaiQHzBHCI42aFAuN677RYsoUB0ybDPyqGgQPT7Wrn1fqBAYjL0Camjn0DZbDKhZkmeQFGncDgk75xAyeGuz+GUm0A/HO1mnzqaQLdWK/5c4JhAL5FplRqGl0Cny6cs2CuWQB8G5sOV0ZRAlkAkW1N3k0BFc4TaGDWTQA57YvIQHZJAhrWgic7CkEAxUQImueOOQPrfvUEY0Y5Axyx2b7CtjkA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[175]},{\"__ndarray__\":\"jvj9NxYkk0CWQCRbU3eTQLfDiBV9lJRAHwbmw5XRlECny6cs2CuWQDF6lup9npZALpFplRqGl0C3Viv+XOCYQAQWzXe9DJlAPxztZp86mkDJ4a7P4ZSbQMLdBohtv5tAUadwOCTvnEDZbDKhZkmeQLaxCrGNqJ5AYTL0Camjn0D0+1q59X6gQKbRu5G336BAuN677RYsoUB8wRwiONmhQEHRRaOfeqJAQqR9VlmGokAGh96KejOjQMppP7+b4KNAXxenlFcLpECOTKDzvI2kQFIvASjeOqVADL0g/4mHpUAWEmJc/+elQNr0wpAglaZAwfITbAfrpkCe1yPFQUKnQGK6hPli76dAsbMtWhg9qEAmneUthJyoQOp/RmKlSalAJEScqz6LqUCuYqeWxvapQHRFCMvno6pADLmVnp7gqkA4KGn/CFGrQPwKyjMq/qtAhlxv6pdCrEDA7SpoS6usQITQi5xsWK1ANHCvjQaxrUBIs+zQjQWuQAyWTQWvsq5Ayi+4gR0pr0DQeK450F+vQMqtB7d4BrBAkkQ3hx5VsEAsHzhRCV2wQI+QaOuZs7BA8QGZhSoKsUAsnVfOnhixQFNzyR+7YLFAteT5uUu3sUA2+NrZ+eKxQBdWKlTcDbJAecda7mxkskDbOIuI/bqyQAXqucYPvLJAPaq7Io4Rs0CfG+y8HmizQC4rpcE8orNAAI0cV6++s0Bj/kzxPxW0QMVvfYvQa7RAEvwinsqotEAn4a0lYcK0QIpS3r/xGLVA7MMOWoJvtUBONT/0Esa1QLCmb46jHLZAEhigKDRztkBEmBk4zJq2QBIYoCg0c7ZA/PMAK9trtkDeNyL7Yje2QH2d0pLpHrZAnLD5nl9btkB66DXY+3G2QMTXJqcwO7ZAsKZvjqMctkAybQ0jTd+1QE41P/QSxrVA7MMOWoJvtUBiux3OHW21QIpS3r/xGLVAhJcdcZnxtEAn4a0lYcK0QMVvfYvQa7RAU6EuPNlmtEBj/kzxPxW0QPi7kxap1bNAAY0cV6++s0CfG+y8HmizQITIoMntN7NAPaq7Io4Rs0DbOIuI/bqyQGaOWc9ojbJAecda7mxkskAXVipU3A2yQJY4owsw1rFAteT5uUu3sUBTc8kfu2CxQBorfKA7EbFA8QGZhSoKsUCPkGjrmbOwQCwfOFEJXbBAuuJn60dFsEDKrQe3eAawQNB4rjnQX69ALksBHyParkAMlk0Fr7KuQEiz7NCNBa5AhNCLnGxYrUBzzyZTyxKtQMDtKmhLq6xA/ArKMyr+q0A4KGn/CFGrQKhBBm/nIatAdEUIy+ejqkCuYqeWxvapQOp/RmKlSalAMsUa0PXnqEAmneUthJyoQGK6hPli76dAntcjxUFCp0Da9MKQIJWmQJDOKmzV8qVAFhJiXP/npUBSLwEo3jqlQI5MoPO8jaRAymk/v5vgo0AGh96KejOjQEKkfVZZhqJAfMEcIjjZoUC43rvtFiyhQPT7Wrn1fqBAYTL0Camjn0DabDKhZkmeQFGncDgk75xAyeGuz+GUm0B9wq2ceWSbQD8c7WafOppAtlYr/lzgmEAvkWmVGoaXQKbLpyzYK5ZAHwbmw5XRlECWQCRbU3eTQI74/TcWJJNA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[153]},{\"__ndarray__\":\"57itOjJQlkAvkWmVGoaXQNSWCdf4DZhAuFYr/lzgmEA/HO1mnzqaQOQSk3G+XJpAyeGuz+GUm0BRp3A4JO+cQEpGNd5yCJ1A2WwyoWZJnkBhMvQJqaOfQE2HOsQU+p9A9PtaufV+oEC43rvtFiyhQHT5q0qGkKFAfMEcIjjZoUBCpH1WWYaiQJ6MLhbVMqNAB4feinozo0DKaT+/m+CjQI5MoPO8jaRA9Dl8erbNpEBSLwEo3jqlQBYSYlz/56VADDctH5FOpkDa9MKQIJWmQJ7XI8VBQqdAGoH/eo2yp0BiuoT5Yu+nQCad5S2EnKhA37m94m4EqUDqf0ZipUmpQK5ip5bG9qlAcMLzZ3BTqkB0RQjL56OqQDgoaf8IUatAzBqctwSrq0D7CsozKv6rQMDtKmhLq6xAwldt7S4PrUCE0IucbFitQEiz7NCNBa5AyMSl+CZ9rkAMlk0Fr7KuQNB4rjnQX69AvE6Wc+Lwr0DKrQe3eAawQCwfOFEJXbBAj5Bo65mzsEAecGBnjbWwQPEBmYUqCrFAU3PJH7tgsUC4AHq++HaxQLXk+blLt7FAF1YqVNwNskCno3dJVkOyQHnHWu5sZLJA2ziLiP26skA9qrsijhGzQJVJ5lB+IbNAnhvsvB5os0ABjRxXr76zQGP+TPE/FbRAbJQgcDMctEDFb32L0Gu0QCfhrSVhwrRAilLev/EYtUDsww5agm+1QE41P/QSxrVAB/V2p2TotUBONT/0Esa1QN/GCfext7VA/RKTXLmDtUDIQclqGHC1QBQ2t8CDtLVAl6Miae68tUBfT4rLQnm1QOvDDlqCb7VAilLev/EYtUCVer8ghBO1QCfhrSVhwrRAPizbX3KctEDFb32L0Gu0QBnOAoVkFrRAY/5M8T8VtEABjRxXr76zQKkgcvIBh7NAnxvsvB5os0A9qrsijhGzQOqx7gDl6bJA2ziLiP26skB5x1rubGSyQBQklem9P7JAF1YqVNwNskC15Pm5S7exQFZYj4/CiLFAU3PJH7tgsUDxAZmFKgqxQNEaiKrExLBAj5Bo65mzsEAsHzhRCV2wQMqtB7d4BrBAVKmmtyzsr0DQeK450F+vQAyWTQWvsq5ATQzZ7VM5rkBJs+zQjQWuQITQi5xsWK1AwO0qaEurrEDMb1MGcmSsQPwKyjMq/qtAOChp/whRq0B0RQjL56OqQAOj4W4zVapArmKnlsb2qUDqf0ZipUmpQCad5S2EnKhAYrqE+WLvp0BAirCqIr6nQJ7XI8VBQqdA2vTCkCCVpkAWEmJc/+elQFIvASjeOqVAjkyg87yNpEDKaT+/m+CjQHJBKQoVmKNABofeinozo0BCpH1WWYaiQHzBHCI42aFABv6XLS5ToUC43rvtFiyhQPT7Wrn1fqBAYTL0Camjn0DZbDKhZkmeQNHWv7ha251AUadwOCTvnEDJ4a7P4ZSbQD8c7WafOppAtlYr/lzgmEAvkWmVGoaXQOe4rToyUJZA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[141]},{\"__ndarray__\":\"3OQFtKrjmECZ6FB6r4GZQD8c7WafOppA7O2dQbiSm0DJ4a7P4ZSbQFGncDgk75xAbQtBQPAynkDZbDKhZkmeQGAy9Ampo59A9PtaufV+oEBof2OkhZigQLjeu+0WLKFAfMEcIjjZoUBqaRkVVDmiQEKkfVZZhqJABofeinozo0DKaT+/m+CjQK8qSDqD6KNAjkyg87yNpEBSLwEo3jqlQHvxJnC6lqVAFhJiXP/npUDa9MKQIJWmQGKfaYNzHadAntcjxUFCp0BiuoT5Yu+nQKJweui2gKhAJ53lLYScqEDqf0ZipUmpQIb2pPG+0KlArmKnlsb2qUB0RQjL56OqQAmpEKcNH6tAOChp/whRq0D8CsozKv6rQMvKaUt9dqxAwO0qaEurrECE0IucbFitQLDuk2bF161ASLPs0I0FrkAMlk0Fr7KuQMVoaq08Pa9Az3iuOdBfr0DKrQe3eAawQMybUzNRUrBALB84UQldsECPkGjrmbOwQCpcsE7vCbFA8QGZhSoKsUBTc8kfu2CxQLXk+blLt7FAG7UH3TDKsUAXVipU3A2yQHnHWu5sZLJAzoIiY8KZskDbOIuI/bqyQD2quyKOEbNAnxvsvB5os0CL94cjPIWzQACNHFevvrNAY/5M8T8VtEDFb32L0Gu0QCfhrSVhwrRAqssm1tTStECKUt6/8Ri1QC70cM1uLLVAd78a5qFItUCKUt6/8Ri1QIoN/baYErVAAL8R1U7etEBOmz47rM20QIpS3r/xGLVA4Hf9rhYetUCKUt6/8Ri1QPTTIRKxELVAJ+GtJWHCtEDnPgvSmL60QMVvfYvQa7RAuOhOI7pOtEBj/kzxPxW0QEZM7VJTz7NAAY0cV6++s0CfG+y8HmizQF2C5h1CQbNAPaq7Io4Rs0DbOIuI/bqyQNZBE2XIpbJAecda7mxkskAXVipU3A2yQDwoCU6k/LFAteT5uUu3sUBTc8kfu2CxQJYG9HBMRrFA8QGZhSoKsUCPkGjrmbOwQGolT+ezg7BALB84UQldsEDKrQe3eAawQDtxLIHHZ69A0HiuOdBfr0AMlk0Fr7KuQEiz7NCNBa5Acq1oeVSwrUCE0IucbFitQMDtKmhLq6xA/ArKMyr+q0DbI6yq6cqrQDgoaf8IUatAdEUIy+ejqkCuYqeWxvapQIsLmaywjalA6X9GYqVJqUAmneUthJyoQGK6hPli76dAntcjxUFCp0Da9MKQIJWmQJGzuvQWP6ZAFhJiXP/npUBSLwEo3jqlQI5MoPO8jaRAymk/v5vgo0AGh96KejOjQEKkfVZZhqJAT3TYfvv8oUB8wRwiONmhQLjeu+0WLKFA9PtaufV+oEAl/8R0xTygQGEy9Ampo59A2WwyoWZJnkBRp3A4JO+cQMnhrs/hlJtAV/qslQBNmkA/HO1mnzqaQNzkBbSq45hAAAAAAAAA+H+LJu+VC9eqQDgoaf8IUatA/ArKMyr+q0DA7SpoS6usQGSmdLvM36xAhNCLnGxYrUBIs+zQjQWuQAyWTQWvsq5A0HiuOdBfr0B4ItO4YX2vQMqtB7d4BrBALB84UQldsECF4Sao2ouwQI+QaOuZs7BACThBOZP4sECPkGjrmbOwQCwfOFEJXbBAyq0Ht3gGsEAlSr2+nI+vQM94rjnQX69ADJZNBa+yrkBIs+zQjQWuQITQi5xsWK1AM2Jc3nRQrUDA7SpoS6usQPwKyjMq/qtABB55FtDOq0A4KGn/CFGrQIwm75UL16pA\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[165]},{\"__ndarray__\":\"0hGRDx05nEBRp3A4JO+cQFW6fcOL85xA2WwyoWZJnkAX8M2JgnqfQGEy9Ampo59A9PtaufV+oEC43rvtFiyhQPIaubQWRKFAfMEcIjjZoUBCpH1WWYaiQBFpOo+6AaNABofeinozo0DKaT+/m+CjQI5MoPO8jaRAR8dQfm/upEBSLwEo3jqlQBYSYlz/56VA2vTCkCCVpkBoxO+DxR2nQJ7XI8VBQqdA+HxMPkFzp0BiuoT5Yu+nQCad5S2EnKhA6n9GYqVJqUCuYqeWxvapQHRFCMvno6pA9FlV7MJMq0A4KGn/CFGrQPwKyjMq/qtAwO0qaEurrECE0IucbFitQEiz7NCNBa5AplKX5z1JrkAMlk0Fr7KuQNB4rjnQX69Ayq0Ht3gGsEAgz//n8DSwQCwfOFEJXbBAj5Bo65mzsEA7os1AAwSxQPEBmYUqCrFAU3PJH7tgsUCXgZCgA6KxQLXk+blLt7FAodsoMJYMskC15Pm5S7exQFNzyR+7YLFA8QGZhSoKsUCPkGjrmbOwQCwfOFEJXbBAC/yEI7IWsEDKrQe3eAawQNB4rjnQX69ADJZNBa+yrkBIs+zQjQWuQNFJR5/nl61ASLPs0I0FrkAMlk0Fr7KuQE7flym9y65A0HiuOdBfr0CJC0cnAwawQMqtB7d4BrBALB84UQldsEDeAqqk8KywQI6QaOuZs7BA8gGZhSoKsUAJvGpac1yxQFNzyR+7YLFAtOT5uUu3sUAXVipU3A2yQAiPk2u6G7JAecda7mxkskDbOIuI/bqyQIrj/5G287JAPaq7Io4Rs0CfG+y8HmizQAGNHFevvrNABkmP0dsJtEBj/kzxPxW0QMRvfYvQa7RA6wmTI66/tEDm/uzAaqq0QOvlcx8sbLRAxW99i9BrtEB/5dHUCS20QGP+TPE/FbRABibwF2sEtEBj/kzxPxW0QMVvfYvQa7RAyRZ6KCJytEDFb32L0Gu0QPWsjJaMWbRAY/5M8T8VtEAwCiYrLvyzQAKNHFevvrNAgzfg+yiFs0CfG+y8HmizQD2quyKOEbNAzf4vBDz8skDbOIuI/bqyQOY8ZqJdZbJAecda7mxkskAWVipU3A2yQO1ns9IfvrFAteT5uUu3sUBTc8kfu2CxQPEBmYUqCrFAC9G038wIsUCPkGjrmbOwQCwfOFEJXbBAUgTqaqVGsEDKrQe3eAawQNB4rjnQX69AKkLsNEzwrkAMlk0Fr7KuQEiz7NCNBa5AhNCLnGxYrUAGqp+wsy+tQMDtKmhLq6xA/ArKMyr+q0A4KGn/CFGrQBL2Q1zeNKtAdEUIy+ejqkCuYqeWxvapQOp/RmKlSalAe66CY3qnqEAmneUthJyoQGK6hPli76dAntcjxUFCp0Da9MKQIJWmQBYSYlz/56VAUi8BKN46pUCOTKDzvI2kQMppP7+b4KNABofeinozo0CsbK2xHBqjQEKkfVZZhqJAfMEcIjjZoUDDRAwopTyhQLjeu+0WLKFA9PtaufV+oEBhMvQJqaOfQNlsMqFmSZ5Ae/oHN+kTnUBRp3A4JO+cQNIRkQ8dOZxAAAAAAAAA+H/AvzjXIHqsQMDtKmhLq6xAhNCLnGxYrUAUaIOtjmCtQIPQi5xsWK1AwO0qaEurrEDAvzjXIHqsQA\u003d\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[155]},{\"__ndarray__\":\"JVdWUu4FoUC43rvtFiyhQLBTFhDrWaFAuN677RYsoUAlV1ZS7gWhQAAAAAAAAPh/C09U/OmFpECPTKDzvI2kQLNqEaJjsaRAUi8BKN46pUCyg+Go9aelQBYSYlz/56VA2vTCkCCVpkCe1yPFQUKnQDyoynrgT6dAYrqE+WLvp0AmneUthJyoQOp/RmKlSalAhMP3wbGjqUCuYqeWxvapQHRFCMvno6pAOChp/whRq0D8CsozKv6rQJZrLIBkoqxAwO0qaEurrECE0IucbFitQEiz7NCNBa5ADJZNBa+yrkD7+D+ShS2vQNB4rjnQX69Ayq0Ht3gGsEAsHzhRCV2wQG80mRqNmLBAj5Bo65mzsEDxAZmFKgqxQFNzyR+7YLFAjSD6YbFrsUC15Pm5S7exQBdWKlTcDbJAIGi8tnEjskB4x1rubGSyQNs4i4j9urJAVLJku6DYskA8qrsijhGzQKAb7LweaLNADhZPxkyAs0CfG+y8HmizQLf1vJjMKLNAPaq7Io4Rs0DbOIuI/bqyQFRl+Pr5rbJAecda7mxkskC/31wDqx2yQBdWKlTcDbJAteT5uUu3sUCWUW2DKHuxQFNzyR+7YLFA8QGZhSoKsUBS2ehvRcqwQI+QaOuZs7BALB84UQldsEBjD6vQewuwQMqtB7d4BrBA0HiuOdBfr0AMlk0Fr7KuQGsTCRbrd65ASLPs0I0FrkCE0IucbFitQIYO9ZwDsaxAwO0qaEurrED8CsozKv6rQDgoaf8IUatAdEUIy+ejqkDJUV3w4o+qQK5ip5bG9qlA6n9GYqVJqUAmneUthJyoQGK6hPli76dAntcjxUFCp0BKkeotbCqnQNr0wpAglaZAFhJiXP/npUBSLwEo3jqlQI5MoPO8jaRAC09U/OmFpEAAAAAAAAD4f56C1MjnlbBAj5Bo65mzsEDxAZmFKgqxQB5gEAg7FbFAU3PJH7tgsUCuAq5hhLaxQLXk+blLt7FAF1YqVNwNskB5x1rubGSyQEg0v613eLJA2ziLiP26skA9qrsijhGzQJ8b7LweaLNAWmIvACJts0ACjRxXr76zQGP+TPE/FbRASEN9NMQktEBj/kzxPxW0QOz+VAu7/LNAAY0cV6++s0A3w6aYNauzQJ8b7LweaLNAjPbdYPw/s0A9qrsijhGzQNs4i4j9urJApft46V+NskB5x1rubGSyQBdWKlTcDbJAteT5uUu3sUBTc8kfu2CxQPEBmYUqCrFAj5Bo65mzsECegtTI55WwQA\u003d\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[119]},{\"__ndarray__\":\"MBd0QrDHpUAWEmJc/+elQNr0wpAglaZAXvXqIZK1pkCe1yPFQUKnQGK6hPli76dAPrPTAOZiqEAnneUthJyoQOp/RmKlSalArmKnlsb2qUB0RQjL56OqQEEWWrTL3KpAOChp/whRq0D8CsozKv6rQMDtKmhLq6xAhNCLnGxYrUDAc7PJcKGtQEiz7NCNBa5ADJZNBa+yrkDQeK450F+vQJvqPU3nArBAyq0Ht3gGsEAsHzhRCV2wQI+QaOuZs7BA8QGZhSoKsUCuwYWiSyixQPEBmYUqCrFAj5Bo65mzsEAvyqNfm4KwQCwfOFEJXbBAyq0Ht3gGsEBVKn3xnpSvQNB4rjnQX69ADJZNBa+yrkBIs+zQjQWuQPQc1N7s+61AhNCLnGxYrUDA7SpoS6usQJPtkQNoIaxA/ArKMyr+q0A4KGn/CFGrQHRFCMvno6pArmKnlsb2qUCgmOdQZaqpQOp/RmKlSalAJp3lLYScqEBiuoT5Yu+nQJ7XI8VBQqdA2vTCkCCVpkAVEmJc/+elQDAXdEKwx6VAAAAAAAAA+H/Mfaygkg2xQFNzyR+7YLFAteT5uUu3sUB9WjS51LqxQLXk+blLt7FAU3PJH7tgsUDMfaygkg2xQAAAAAAAAPh/AQ5O8B27sUAYVipU3A2yQI69tKFgPrJAecda7mxkskDbOIuI/bqyQD2quyKOEbNA7JP2upMVs0A9qrsijhGzQNs4i4j9urJALrjapDVxskB4x1rubGSyQBdWKlTcDbJAAQ5O8B27sUA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[73]},{\"__ndarray__\":\"OecWzXjRp0BiuoT5Yu+nQCad5S2EnKhA6n9GYqVJqUB8Uq6Ns4mpQK9ip5bG9qlAdEUIy+ejqkA4KGn/CFGrQPwKyjMq/qtACS+vs0sHrEDB7SpoS6usQITQi5xsWK1ASLPs0I0FrkAX44Sy3K6uQAyWTQWvsq5A0HiuOdBfr0DKrQe3eAawQEkxcAbDG7BAyq0Ht3gGsEDQeK450F+vQNDXR/4U9K5ADJZNBa+yrkBIs+zQjQWuQP032HmDZq1AhNCLnGxYrUDA7SpoS6usQPwKyjMq/qtA4i2yAR1oq0A4KGn/CFGrQHRFCMvno6pArmKnlsb2qUDqf0ZipUmpQCad5S2EnKhAYrqE+WLvp0A55xbNeNGnQA\u003d\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[35]},{\"__ndarray__\":\"pmOofEgxq0A4KGn/CFGrQPwKyjMq/qtAOvsv2VlMrED8CsozKv6rQDgoaf8IUatApmOofEgxq0A\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[7]}]},\"selected\":{\"id\":\"2434\"},\"selection_policy\":{\"id\":\"2460\"}},\"id\":\"2433\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"columns\":[{\"id\":\"2547\"},{\"id\":\"2552\"}],\"height\":350,\"reorderable\":false,\"source\":{\"id\":\"2543\"},\"view\":{\"id\":\"2557\"},\"width\":350},\"id\":\"2555\",\"type\":\"DataTable\"},{\"attributes\":{\"axis_label\":\"Burglary rate\",\"formatter\":{\"id\":\"2426\"},\"major_label_policy\":{\"id\":\"2427\"},\"ticker\":{\"id\":\"2405\"}},\"id\":\"2404\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2572\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer03047\",\"sizing_mode\":\"stretch_width\"},\"id\":\"2713\",\"type\":\"Spacer\"},{\"attributes\":{\"line_alpha\":{\"value\":1.0},\"line_cap\":{\"value\":\"butt\"},\"line_color\":{\"field\":\"Density\",\"transform\":{\"id\":\"2432\"}},\"line_dash\":{\"value\":[]},\"line_dash_offset\":{\"value\":0},\"line_join\":{\"value\":\"bevel\"},\"line_width\":{\"value\":1},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"2442\",\"type\":\"MultiLine\"},{\"attributes\":{},\"id\":\"2429\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2402\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis\":{\"id\":\"2404\"},\"grid_line_color\":null,\"ticker\":null},\"id\":\"2407\",\"type\":\"Grid\"},{\"attributes\":{\"angle\":{\"value\":0.0},\"fill_alpha\":{\"value\":1.0},\"fill_color\":{\"value\":\"black\"},\"hatch_alpha\":{\"value\":1.0},\"hatch_color\":{\"value\":\"black\"},\"hatch_scale\":{\"value\":12.0},\"hatch_weight\":{\"value\":1.0},\"line_alpha\":{\"value\":1.0},\"line_cap\":{\"value\":\"butt\"},\"line_color\":{\"value\":\"black\"},\"line_dash\":{\"value\":[]},\"line_dash_offset\":{\"value\":0},\"line_join\":{\"value\":\"bevel\"},\"line_width\":{\"value\":1},\"marker\":{\"value\":\"circle\"},\"size\":{\"value\":3.872983346207417},\"x\":{\"field\":\"Burglary rate\"},\"y\":{\"field\":\"Property crime rate\"}},\"id\":\"2451\",\"type\":\"Scatter\"},{\"attributes\":{\"callback\":null,\"renderers\":[{\"id\":\"2438\"}],\"tags\":[\"hv_created\"],\"tooltips\":[[\"Density\",\"@{Density}\"]]},\"id\":\"2393\",\"type\":\"HoverTool\"},{\"attributes\":{\"children\":[{\"id\":\"2390\"},{\"id\":\"2577\"},{\"id\":\"2713\"}],\"margin\":[0,0,0,0],\"name\":\"Row03042\",\"tags\":[\"embedded\"]},\"id\":\"2389\",\"type\":\"Row\"},{\"attributes\":{\"axis_label\":\"Property crime rate\",\"formatter\":{\"id\":\"2429\"},\"major_label_policy\":{\"id\":\"2430\"},\"ticker\":{\"id\":\"2409\"}},\"id\":\"2408\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"2409\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"2408\"},\"dimension\":1,\"grid_line_color\":null,\"ticker\":null},\"id\":\"2411\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":{\"value\":0.1},\"line_color\":{\"field\":\"Density\",\"transform\":{\"id\":\"2432\"}},\"xs\":{\"field\":\"xs\"},\"ys\":{\"field\":\"ys\"}},\"id\":\"2437\",\"type\":\"MultiLine\"},{\"attributes\":{\"data\":{\"Burglary rate\":{\"__ndarray__\":\"mpmZmZnJf0AzMzMzMzeAQJqZmZmZuYBAMzMzMzMDgkCamZmZmdWDQJqZmZmZtYRAAAAAAACIhkDNzMzMzNSJQGZmZmZmIo1AzczMzMzAjkCamZmZmfOQQAAAAAAALpJAMzMzMzPTkUAAAAAAABqTQM3MzMzMdpZAZmZmZmbwl0DNzMzMzKCWQDMzMzMzL5ZAZmZmZmZqlkCamZmZmZ+XQGZmZmZmUJpAzczMzMy8mUAAAAAAAECXQM3MzMzM6pRAAAAAAADGk0DNzMzMzC6UQDMzMzMzF5VAzczMzMzelEDNzMzMzJCUQGZmZmZmDpRAzczMzMxAk0BmZmZmZpCTQJqZmZmZQZJAzczMzMwukUBmZmZmZkiQQAAAAAAA2I5AAAAAAACIjUBmZmZmZraMQJqZmZmZ+YpAMzMzMzMTiEBmZmZmZsaGQGZmZmZmLodAAAAAAABYh0AAAAAAACiHQGZmZmZm0oZAMzMzMzO3hkDNzMzMzOiGQM3MzMzMsIZAAAAAAADohkCamZmZmW2GQAAAAAAA6IVAZmZmZmbqhUCamZmZmQGFQDMzMzMzE4NAAAAAAAD0gEA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]},\"Burglary_rate\":{\"__ndarray__\":\"mpmZmZnJf0AzMzMzMzeAQJqZmZmZuYBAMzMzMzMDgkCamZmZmdWDQJqZmZmZtYRAAAAAAACIhkDNzMzMzNSJQGZmZmZmIo1AzczMzMzAjkCamZmZmfOQQAAAAAAALpJAMzMzMzPTkUAAAAAAABqTQM3MzMzMdpZAZmZmZmbwl0DNzMzMzKCWQDMzMzMzL5ZAZmZmZmZqlkCamZmZmZ+XQGZmZmZmUJpAzczMzMy8mUAAAAAAAECXQM3MzMzM6pRAAAAAAADGk0DNzMzMzC6UQDMzMzMzF5VAzczMzMzelEDNzMzMzJCUQGZmZmZmDpRAzczMzMxAk0BmZmZmZpCTQJqZmZmZQZJAzczMzMwukUBmZmZmZkiQQAAAAAAA2I5AAAAAAACIjUBmZmZmZraMQJqZmZmZ+YpAMzMzMzMTiEBmZmZmZsaGQGZmZmZmLodAAAAAAABYh0AAAAAAACiHQGZmZmZm0oZAMzMzMzO3hkDNzMzMzOiGQM3MzMzMsIZAAAAAAADohkCamZmZmW2GQAAAAAAA6IVAZmZmZmbqhUCamZmZmQGFQDMzMzMzE4NAAAAAAAD0gEA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]},\"Property crime rate\":{\"__ndarray__\":\"MzMzMzP5mkCamZmZmU+bQAAAAAAABp1AZmZmZmZwn0AAAAAAACuhQJqZmZmZkaFAzczMzMwlo0AAAAAAAGGlQJqZmZmZ/6dAmpmZmZkuqkAAAAAAAEqsQJqZmZmZca1AzczMzMzQq0AAAAAAADKtQM3MzMxMJbFAMzMzM7PKskAAAAAAgNOyQDMzMzOz+bFAAAAAAIAiskCamZmZmZizQM3MzMxM6bRAAAAAAICItEAzMzMzs6WzQJqZmZkZIbJAAAAAAICSsUBmZmZmZjqyQM3MzMzMEbNAAAAAAABjs0AAAAAAAL6zQJqZmZkZ87NAmpmZmRnRs0AzMzMzMxS0QDMzMzOzJ7NAAAAAAACEskAzMzMzMzSyQAAAAACA7rFAAAAAAABjsUDNzMzMTNywQAAAAAAAqa9AMzMzMzM/rUCamZmZmUSsQDMzMzMzlKxAMzMzMzNdrEBmZmZmZg6sQDMzMzMzdKtAAAAAAADPqkAzMzMzMyWqQM3MzMzMmKlAMzMzMzMdqUCamZmZmcKnQM3MzMzMA6dAzczMzMyypkAAAAAAAGimQJqZmZmZWqVAMzMzMzNIpEA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]},\"Property_crime_rate\":{\"__ndarray__\":\"MzMzMzP5mkCamZmZmU+bQAAAAAAABp1AZmZmZmZwn0AAAAAAACuhQJqZmZmZkaFAzczMzMwlo0AAAAAAAGGlQJqZmZmZ/6dAmpmZmZkuqkAAAAAAAEqsQJqZmZmZca1AzczMzMzQq0AAAAAAADKtQM3MzMxMJbFAMzMzM7PKskAAAAAAgNOyQDMzMzOz+bFAAAAAAIAiskCamZmZmZizQM3MzMxM6bRAAAAAAICItEAzMzMzs6WzQJqZmZkZIbJAAAAAAICSsUBmZmZmZjqyQM3MzMzMEbNAAAAAAABjs0AAAAAAAL6zQJqZmZkZ87NAmpmZmRnRs0AzMzMzMxS0QDMzMzOzJ7NAAAAAAACEskAzMzMzMzSyQAAAAACA7rFAAAAAAABjsUDNzMzMTNywQAAAAAAAqa9AMzMzMzM/rUCamZmZmUSsQDMzMzMzlKxAMzMzMzNdrEBmZmZmZg6sQDMzMzMzdKtAAAAAAADPqkAzMzMzMyWqQM3MzMzMmKlAMzMzMzMdqUCamZmZmcKnQM3MzMzMA6dAzczMzMyypkAAAAAAAGimQJqZmZmZWqVAMzMzMzNIpEA\u003d\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[55]}},\"selected\":{\"id\":\"2444\"},\"selection_policy\":{\"id\":\"2462\"}},\"id\":\"2443\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"margin\":[5,5,5,5],\"name\":\"HSpacer03046\",\"sizing_mode\":\"stretch_width\"},\"id\":\"2390\",\"type\":\"Spacer\"},{\"attributes\":{},\"id\":\"2434\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"2440\",\"type\":\"BasicTicker\"},{\"attributes\":{\"active_multi\":null,\"tools\":[{\"id\":\"2393\"},{\"id\":\"2394\"},{\"id\":\"2412\"},{\"id\":\"2413\"},{\"id\":\"2414\"},{\"id\":\"2415\"},{\"id\":\"2416\"}]},\"id\":\"2418\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"2433\"},\"glyph\":{\"id\":\"2436\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"2437\"},\"selection_glyph\":{\"id\":\"2442\"},\"view\":{\"id\":\"2439\"}},\"id\":\"2438\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"high\":7.2e-07,\"low\":8e-08,\"palette\":[\"#b3fef5\",\"#b0fef5\",\"#adfdf5\",\"#a9fcf5\",\"#a6fbf6\",\"#a3faf6\",\"#a0faf6\",\"#9df9f6\",\"#9af8f6\",\"#97f7f6\",\"#93f7f6\",\"#90f6f6\",\"#8df5f6\",\"#8af4f7\",\"#87f3f7\",\"#83f2f7\",\"#80f2f7\",\"#7df1f7\",\"#79f0f7\",\"#76eff7\",\"#73eef7\",\"#6fedf8\",\"#6cecf8\",\"#68ecf8\",\"#65ebf8\",\"#61eaf8\",\"#5ee9f8\",\"#5ae8f8\",\"#57e7f8\",\"#53e6f8\",\"#50e5f9\",\"#4ce4f9\",\"#49e3f9\",\"#45e2f9\",\"#42e1f9\",\"#3ee0f9\",\"#3bdff9\",\"#38def9\",\"#35ddf9\",\"#32dcf9\",\"#30dbfa\",\"#2ed9fa\",\"#2dd8fa\",\"#2cd7fa\",\"#2bd6fa\",\"#2bd5fa\",\"#2ad3fa\",\"#2ad2fa\",\"#29d1fa\",\"#29d0fb\",\"#29cffb\",\"#28cdfb\",\"#28ccfb\",\"#28cbfb\",\"#28cafb\",\"#28c8fb\",\"#28c7fb\",\"#29c6fb\",\"#29c5fb\",\"#29c4fb\",\"#29c2fb\",\"#2ac1fb\",\"#2ac0fb\",\"#2bbffb\",\"#2bbdfc\",\"#2cbcfc\",\"#2dbbfc\",\"#2db9fc\",\"#2eb8fc\",\"#2fb7fc\",\"#2fb6fc\",\"#30b4fc\",\"#31b3fc\",\"#32b2fc\",\"#32b0fc\",\"#33affc\",\"#33aefc\",\"#34adfc\",\"#34abfc\",\"#34aafc\",\"#35a9fc\",\"#35a8fc\",\"#35a6fc\",\"#35a5fc\",\"#35a4fc\",\"#35a3fc\",\"#35a1fc\",\"#35a0fc\",\"#359ffc\",\"#359dfc\",\"#359cfc\",\"#359bfc\",\"#349afd\",\"#3498fd\",\"#3497fd\",\"#3396fd\",\"#3395fd\",\"#3293fd\",\"#3292fd\",\"#3191fd\",\"#3090fd\",\"#308ffd\",\"#2f8dfd\",\"#2f8cfd\",\"#2e8bfd\",\"#2e8afd\",\"#2d88fd\",\"#2d87fd\",\"#2c86fd\",\"#2c84fd\",\"#2c83fd\",\"#2c82fd\",\"#2b81fd\",\"#2b7ffd\",\"#2b7efd\",\"#2b7dfd\",\"#2b7bfd\",\"#2b7afd\",\"#2b79fd\",\"#2b77fd\",\"#2b76fd\",\"#2b75fd\",\"#2b73fd\",\"#2c72fd\",\"#2c71fd\",\"#2c6ffd\",\"#2c6efd\",\"#2d6cfd\",\"#2d6bfd\",\"#2d6afc\",\"#2e68fc\",\"#2e67fc\",\"#2e65fc\",\"#2e64fc\",\"#2f62fc\",\"#2f61fc\",\"#2f5ffc\",\"#2f5efc\",\"#2f5dfc\",\"#2f5bfc\",\"#2f5afc\",\"#2f58fb\",\"#2f57fb\",\"#2f55fb\",\"#2f53fb\",\"#2f52fb\",\"#2f50fb\",\"#2f4ffb\",\"#2f4dfb\",\"#2e4cfb\",\"#2e4afb\",\"#2e48fb\",\"#2e47fa\",\"#2d45fa\",\"#2d43fa\",\"#2d42fa\",\"#2d40fa\",\"#2c3efa\",\"#2c3dfa\",\"#2b3bf9\",\"#2b39f9\",\"#2a37f9\",\"#2a36f8\",\"#2934f8\",\"#2832f7\",\"#2831f7\",\"#272ff6\",\"#262ef5\",\"#252cf5\",\"#252af4\",\"#2429f3\",\"#2327f2\",\"#2226f1\",\"#2124f0\",\"#2023ef\",\"#1f22ee\",\"#1e20ed\",\"#1d1feb\",\"#1c1eea\",\"#1b1ce9\",\"#1a1be7\",\"#181ae6\",\"#1719e5\",\"#1618e3\",\"#1417e1\",\"#1316e0\",\"#1215de\",\"#1014dc\",\"#0f13db\",\"#0e12d9\",\"#0d11d7\",\"#0c10d5\",\"#0b0fd3\",\"#0a0ed1\",\"#090dd0\",\"#080dce\",\"#080ccc\",\"#070bca\",\"#070ac8\",\"#0709c6\",\"#0708c4\",\"#0707c2\",\"#0707bf\",\"#0806bd\",\"#0806bb\",\"#0905b9\",\"#0904b7\",\"#0a04b5\",\"#0a04b2\",\"#0b03b0\",\"#0c03ae\",\"#0d02ab\",\"#0e02a9\",\"#0e02a7\",\"#0f02a4\",\"#0f01a2\",\"#1001a0\",\"#10019d\",\"#10019b\",\"#100199\",\"#100197\",\"#100194\",\"#0f0192\",\"#0f0190\",\"#0f018e\",\"#0e018b\",\"#0e0189\",\"#0d0187\",\"#0d0185\",\"#0c0183\",\"#0b0181\",\"#0b017e\",\"#0a017c\",\"#09017a\",\"#090178\",\"#080276\",\"#070274\",\"#060272\",\"#060270\",\"#05026e\",\"#04026c\",\"#030269\",\"#030267\",\"#020265\",\"#010263\",\"#010261\",\"#00025f\",\"#00025d\",\"#00025b\",\"#000259\",\"#000257\",\"#000255\",\"#000154\",\"#000152\",\"#000150\",\"#00004e\"]},\"id\":\"2432\",\"type\":\"LinearColorMapper\"},{\"attributes\":{},\"id\":\"2412\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"black\"},\"line_alpha\":{\"value\":0.2},\"size\":{\"value\":3.872983346207417},\"x\":{\"field\":\"Burglary rate\"},\"y\":{\"field\":\"Property crime rate\"}},\"id\":\"2448\",\"type\":\"Scatter\"},{\"attributes\":{\"bar_line_color\":\"black\",\"color_mapper\":{\"id\":\"2432\"},\"label_standoff\":8,\"location\":[0,0],\"major_label_policy\":{\"id\":\"2456\"},\"major_tick_line_color\":\"black\",\"ticker\":{\"id\":\"2440\"}},\"id\":\"2441\",\"type\":\"ColorBar\"},{\"attributes\":{},\"id\":\"2413\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2456\",\"type\":\"NoOverlap\"},{\"attributes\":{},\"id\":\"2414\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"2416\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"2427\",\"type\":\"AllLabels\"},{\"attributes\":{\"children\":[[{\"id\":\"2395\"},0,0],[{\"id\":\"2555\"},0,1]]},\"id\":\"2574\",\"type\":\"GridBox\"},{\"attributes\":{\"source\":{\"id\":\"2443\"}},\"id\":\"2450\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"2417\"}},\"id\":\"2415\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"black\"},\"size\":{\"value\":3.872983346207417},\"x\":{\"field\":\"Burglary rate\"},\"y\":{\"field\":\"Property crime rate\"}},\"id\":\"2446\",\"type\":\"Scatter\"},{\"attributes\":{\"end\":2018.2676129432377,\"reset_end\":2018.2676129432377,\"reset_start\":120.99286362318159,\"start\":120.99286362318159,\"tags\":[[[\"Burglary rate\",\"Burglary rate\",null]]]},\"id\":\"2391\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"2430\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"2460\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"2426\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2444\",\"type\":\"Selection\"},{\"attributes\":{\"end\":6525.857972567144,\"reset_end\":6525.857972567144,\"reset_start\":477.6978025988086,\"start\":477.6978025988086,\"tags\":[[[\"Property crime rate\",\"Property crime rate\",null]]]},\"id\":\"2392\",\"type\":\"Range1d\"},{\"attributes\":{\"source\":{\"id\":\"2433\"}},\"id\":\"2439\",\"type\":\"CDSView\"},{\"attributes\":{\"toolbars\":[{\"id\":\"2418\"}],\"tools\":[{\"id\":\"2393\"},{\"id\":\"2394\"},{\"id\":\"2412\"},{\"id\":\"2413\"},{\"id\":\"2414\"},{\"id\":\"2415\"},{\"id\":\"2416\"}]},\"id\":\"2575\",\"type\":\"ProxyToolbar\"}],\"root_ids\":[\"2389\"]},\"title\":\"Bokeh Application\",\"version\":\"2.3.3\"}};\n    var render_items \u003d [{\"docid\":\"d3743814-ca8d-4bab-b0a5-aeec74578236\",\"root_ids\":[\"2389\"],\"roots\":{\"2389\":\"d1042cde-eb40-4853-8118-1e70ca71fdda\"}}];\n    root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n  }\n  if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n    embed_document(root);\n  } else {\n    var attempts \u003d 0;\n    var timer \u003d setInterval(function(root) {\n      if (root.Bokeh !\u003d\u003d undefined \u0026\u0026 root.Bokeh.Panel !\u003d\u003d undefined) {\n        clearInterval(timer);\n        embed_document(root);\n      } else if (document.readyState \u003d\u003d \"complete\") {\n        attempts++;\n        if (attempts \u003e 200) {\n          clearInterval(timer);\n          console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n        }\n      }\n    }, 25, root)\n  }\n})(window);\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885746483_-68202156",
      "id": "paragraph_1580885746483_-68202156",
      "dateCreated": "2020-02-05 14:55:46.483",
      "dateStarted": "2021-07-26 03:16:20.458",
      "dateFinished": "2021-07-26 03:16:20.825",
      "status": "FINISHED"
    },
    {
      "title": "Altair",
      "text": "%md\n\n# Altair\n\n[Altair](https://altair-viz.github.io/) is a declarative statistical visualization library for Python, based on Vega and Vega-Lite, and the source is available on GitHub.\n\nWith Altair, you can spend more time understanding your data and its meaning. Altair’s API is simple, friendly and consistent and built on top of the powerful Vega-Lite visualization grammar. This elegant simplicity produces beautiful and effective visualizations with a minimal amount of code.\n\nThere\u0027s still one bug in Altair which make altair doesn\u0027t work very well with Zeppelin. The first run may not succeed, after Zeppelin load altair javascript properly, the following run will work.\n\n",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:20.858",
      "progress": 0,
      "config": {
        "colWidth": 12.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "text",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/text",
        "title": false,
        "editorHide": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003ch1\u003eAltair\u003c/h1\u003e\n\u003cp\u003e\u003ca href\u003d\"https://altair-viz.github.io/\"\u003eAltair\u003c/a\u003e is a declarative statistical visualization library for Python, based on Vega and Vega-Lite, and the source is available on GitHub.\u003c/p\u003e\n\u003cp\u003eWith Altair, you can spend more time understanding your data and its meaning. Altair’s API is simple, friendly and consistent and built on top of the powerful Vega-Lite visualization grammar. This elegant simplicity produces beautiful and effective visualizations with a minimal amount of code.\u003c/p\u003e\n\u003cp\u003eThere\u0026rsquo;s still one bug in Altair which make altair doesn\u0026rsquo;t work very well with Zeppelin. The first run may not succeed, after Zeppelin load altair javascript properly, the following run will work.\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580886248807_819045686",
      "id": "paragraph_1580886248807_819045686",
      "dateCreated": "2020-02-05 15:04:08.807",
      "dateStarted": "2021-07-26 03:16:20.886",
      "dateFinished": "2021-07-26 03:16:20.892",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nimport altair as alt\n\nalt.renderers.enable(\u0027zeppelin\u0027)\n\n# load a simple dataset as a pandas DataFrame\nfrom vega_datasets import data\ncars \u003d data.cars()\n\nalt.Chart(cars).mark_point().encode(\n    x\u003d\u0027Horsepower\u0027,\n    y\u003d\u0027Miles_per_Gallon\u0027,\n    color\u003d\u0027Origin\u0027,\n)",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:20.986",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\n\u003cdiv id\u003d\"altair-viz-3238d72fa8514e61a8dabc806df2cb20\"\u003e\u003c/div\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n  (function(spec, embedOpt){\n    let outputDiv \u003d document.currentScript.previousElementSibling;\n    if (outputDiv.id !\u003d\u003d \"altair-viz-3238d72fa8514e61a8dabc806df2cb20\") {\n      outputDiv \u003d document.getElementById(\"altair-viz-3238d72fa8514e61a8dabc806df2cb20\");\n    }\n    const paths \u003d {\n      \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n      \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n      \"vega-lite\": \"https://cdn.jsdelivr.net/npm//vega-lite@4.8.1?noext\",\n      \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n    };\n\n    function loadScript(lib) {\n      return new Promise(function(resolve, reject) {\n        var s \u003d document.createElement(\u0027script\u0027);\n        s.src \u003d paths[lib];\n        s.async \u003d true;\n        s.onload \u003d () \u003d\u003e resolve(paths[lib]);\n        s.onerror \u003d () \u003d\u003e reject(`Error loading script: ${paths[lib]}`);\n        document.getElementsByTagName(\"head\")[0].appendChild(s);\n      });\n    }\n\n    function showError(err) {\n      outputDiv.innerHTML \u003d `\u003cdiv class\u003d\"error\" style\u003d\"color:red;\"\u003e${err}\u003c/div\u003e`;\n      throw err;\n    }\n\n    function displayChart(vegaEmbed) {\n      vegaEmbed(outputDiv, spec, embedOpt)\n        .catch(err \u003d\u003e showError(`Javascript Error: ${err.message}\u003cbr\u003eThis usually means there\u0027s a typo in your chart specification. See the javascript console for the full traceback.`));\n    }\n\n    if(typeof define \u003d\u003d\u003d \"function\" \u0026\u0026 define.amd) {\n      requirejs.config({paths});\n      require([\"vega-embed\"], displayChart, err \u003d\u003e showError(`Error loading script: ${err.message}`));\n    } else if (typeof vegaEmbed \u003d\u003d\u003d \"function\") {\n      displayChart(vegaEmbed);\n    } else {\n      loadScript(\"vega\")\n        .then(() \u003d\u003e loadScript(\"vega-lite\"))\n        .then(() \u003d\u003e loadScript(\"vega-embed\"))\n        .catch(showError)\n        .then(() \u003d\u003e displayChart(vegaEmbed));\n    }\n  })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-f02450ab61490a1363517a0190416235\"}, \"mark\": \"point\", \"encoding\": {\"color\": {\"type\": \"nominal\", \"field\": \"Origin\"}, \"x\": {\"type\": \"quantitative\", \"field\": \"Horsepower\"}, \"y\": {\"type\": \"quantitative\", \"field\": \"Miles_per_Gallon\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.8.1.json\", \"datasets\": {\"data-f02450ab61490a1363517a0190416235\": [{\"Name\": \"chevrolet chevelle malibu\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 8, \"Displacement\": 307.0, \"Horsepower\": 130.0, \"Weight_in_lbs\": 3504, \"Acceleration\": 12.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick skylark 320\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 165.0, \"Weight_in_lbs\": 3693, \"Acceleration\": 11.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth satellite\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3436, \"Acceleration\": 11.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc rebel sst\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 304.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3433, \"Acceleration\": 12.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford torino\", \"Miles_per_Gallon\": 17.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 3449, \"Acceleration\": 10.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford galaxie 500\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 429.0, \"Horsepower\": 198.0, \"Weight_in_lbs\": 4341, \"Acceleration\": 10.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet impala\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 454.0, \"Horsepower\": 220.0, \"Weight_in_lbs\": 4354, \"Acceleration\": 9.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth fury iii\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 440.0, \"Horsepower\": 215.0, \"Weight_in_lbs\": 4312, \"Acceleration\": 8.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac catalina\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 455.0, \"Horsepower\": 225.0, \"Weight_in_lbs\": 4425, \"Acceleration\": 10.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc ambassador dpl\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 390.0, \"Horsepower\": 190.0, \"Weight_in_lbs\": 3850, \"Acceleration\": 8.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"citroen ds-21 pallas\", \"Miles_per_Gallon\": null, \"Cylinders\": 4, \"Displacement\": 133.0, \"Horsepower\": 115.0, \"Weight_in_lbs\": 3090, \"Acceleration\": 17.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"chevrolet chevelle concours (sw)\", \"Miles_per_Gallon\": null, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 165.0, \"Weight_in_lbs\": 4142, \"Acceleration\": 11.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford torino (sw)\", \"Miles_per_Gallon\": null, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 153.0, \"Weight_in_lbs\": 4034, \"Acceleration\": 11.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth satellite (sw)\", \"Miles_per_Gallon\": null, \"Cylinders\": 8, \"Displacement\": 383.0, \"Horsepower\": 175.0, \"Weight_in_lbs\": 4166, \"Acceleration\": 10.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc rebel sst (sw)\", \"Miles_per_Gallon\": null, \"Cylinders\": 8, \"Displacement\": 360.0, \"Horsepower\": 175.0, \"Weight_in_lbs\": 3850, \"Acceleration\": 11.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge challenger se\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 383.0, \"Horsepower\": 170.0, \"Weight_in_lbs\": 3563, \"Acceleration\": 10.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth \u0027cuda 340\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 340.0, \"Horsepower\": 160.0, \"Weight_in_lbs\": 3609, \"Acceleration\": 8.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford mustang boss 302\", \"Miles_per_Gallon\": null, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 3353, \"Acceleration\": 8.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet monte carlo\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3761, \"Acceleration\": 9.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick estate wagon (sw)\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 455.0, \"Horsepower\": 225.0, \"Weight_in_lbs\": 3086, \"Acceleration\": 10.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corona mark ii\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 113.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2372, \"Acceleration\": 15.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"plymouth duster\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 6, \"Displacement\": 198.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2833, \"Acceleration\": 15.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc hornet\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 199.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2774, \"Acceleration\": 15.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford maverick\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 2587, \"Acceleration\": 16.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun pl510\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2130, \"Acceleration\": 14.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"volkswagen 1131 deluxe sedan\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 46.0, \"Weight_in_lbs\": 1835, \"Acceleration\": 20.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"peugeot 504\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 110.0, \"Horsepower\": 87.0, \"Weight_in_lbs\": 2672, \"Acceleration\": 17.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"audi 100 ls\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 107.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2430, \"Acceleration\": 14.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"saab 99e\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 104.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2375, \"Acceleration\": 17.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"bmw 2002\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 113.0, \"Weight_in_lbs\": 2234, \"Acceleration\": 12.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"amc gremlin\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 6, \"Displacement\": 199.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2648, \"Acceleration\": 15.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford f250\", \"Miles_per_Gallon\": 10.0, \"Cylinders\": 8, \"Displacement\": 360.0, \"Horsepower\": 215.0, \"Weight_in_lbs\": 4615, \"Acceleration\": 14.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevy c20\", \"Miles_per_Gallon\": 10.0, \"Cylinders\": 8, \"Displacement\": 307.0, \"Horsepower\": 200.0, \"Weight_in_lbs\": 4376, \"Acceleration\": 15.0, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge d200\", \"Miles_per_Gallon\": 11.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 210.0, \"Weight_in_lbs\": 4382, \"Acceleration\": 13.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"hi 1200d\", \"Miles_per_Gallon\": 9.0, \"Cylinders\": 8, \"Displacement\": 304.0, \"Horsepower\": 193.0, \"Weight_in_lbs\": 4732, \"Acceleration\": 18.5, \"Year\": \"1970-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun pl510\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2130, \"Acceleration\": 14.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"chevrolet vega 2300\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2264, \"Acceleration\": 15.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corona\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 113.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2228, \"Acceleration\": 14.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"ford pinto\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": null, \"Weight_in_lbs\": 2046, \"Acceleration\": 19.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen super beetle 117\", \"Miles_per_Gallon\": null, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 48.0, \"Weight_in_lbs\": 1978, \"Acceleration\": 20.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"amc gremlin\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 2634, \"Acceleration\": 13.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth satellite custom\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3439, \"Acceleration\": 15.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet chevelle malibu\", \"Miles_per_Gallon\": 17.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3329, \"Acceleration\": 15.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford torino 500\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 3302, \"Acceleration\": 15.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc matador\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3288, \"Acceleration\": 15.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet impala\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 165.0, \"Weight_in_lbs\": 4209, \"Acceleration\": 12.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac catalina brougham\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 175.0, \"Weight_in_lbs\": 4464, \"Acceleration\": 11.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford galaxie 500\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 153.0, \"Weight_in_lbs\": 4154, \"Acceleration\": 13.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth fury iii\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4096, \"Acceleration\": 13.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge monaco (sw)\", \"Miles_per_Gallon\": 12.0, \"Cylinders\": 8, \"Displacement\": 383.0, \"Horsepower\": 180.0, \"Weight_in_lbs\": 4955, \"Acceleration\": 11.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford country squire (sw)\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 170.0, \"Weight_in_lbs\": 4746, \"Acceleration\": 12.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac safari (sw)\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 175.0, \"Weight_in_lbs\": 5140, \"Acceleration\": 12.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc hornet sportabout (sw)\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 258.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 2962, \"Acceleration\": 13.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet vega (sw)\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 72.0, \"Weight_in_lbs\": 2408, \"Acceleration\": 19.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac firebird\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3282, \"Acceleration\": 15.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford mustang\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 3139, \"Acceleration\": 14.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury capri 2000\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 122.0, \"Horsepower\": 86.0, \"Weight_in_lbs\": 2220, \"Acceleration\": 14.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"opel 1900\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 116.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2123, \"Acceleration\": 14.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"peugeot 304\", \"Miles_per_Gallon\": 30.0, \"Cylinders\": 4, \"Displacement\": 79.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 2074, \"Acceleration\": 19.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"fiat 124b\", \"Miles_per_Gallon\": 30.0, \"Cylinders\": 4, \"Displacement\": 88.0, \"Horsepower\": 76.0, \"Weight_in_lbs\": 2065, \"Acceleration\": 14.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"toyota corolla 1200\", \"Miles_per_Gallon\": 31.0, \"Cylinders\": 4, \"Displacement\": 71.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 1773, \"Acceleration\": 19.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 1200\", \"Miles_per_Gallon\": 35.0, \"Cylinders\": 4, \"Displacement\": 72.0, \"Horsepower\": 69.0, \"Weight_in_lbs\": 1613, \"Acceleration\": 18.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"volkswagen model 111\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 60.0, \"Weight_in_lbs\": 1834, \"Acceleration\": 19.0, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"plymouth cricket\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 1955, \"Acceleration\": 20.5, \"Year\": \"1971-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corona hardtop\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 113.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2278, \"Acceleration\": 15.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge colt hardtop\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 97.5, \"Horsepower\": 80.0, \"Weight_in_lbs\": 2126, \"Acceleration\": 17.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen type 3\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 54.0, \"Weight_in_lbs\": 2254, \"Acceleration\": 23.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"chevrolet vega\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2408, \"Acceleration\": 19.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford pinto runabout\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 4, \"Displacement\": 122.0, \"Horsepower\": 86.0, \"Weight_in_lbs\": 2226, \"Acceleration\": 16.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet impala\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 165.0, \"Weight_in_lbs\": 4274, \"Acceleration\": 12.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac catalina\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 175.0, \"Weight_in_lbs\": 4385, \"Acceleration\": 12.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth fury iii\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4135, \"Acceleration\": 13.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford galaxie 500\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 153.0, \"Weight_in_lbs\": 4129, \"Acceleration\": 13.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc ambassador sst\", \"Miles_per_Gallon\": 17.0, \"Cylinders\": 8, \"Displacement\": 304.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3672, \"Acceleration\": 11.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury marquis\", \"Miles_per_Gallon\": 11.0, \"Cylinders\": 8, \"Displacement\": 429.0, \"Horsepower\": 208.0, \"Weight_in_lbs\": 4633, \"Acceleration\": 11.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick lesabre custom\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 155.0, \"Weight_in_lbs\": 4502, \"Acceleration\": 13.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"oldsmobile delta 88 royale\", \"Miles_per_Gallon\": 12.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 160.0, \"Weight_in_lbs\": 4456, \"Acceleration\": 13.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chrysler newport royal\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 190.0, \"Weight_in_lbs\": 4422, \"Acceleration\": 12.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mazda rx2 coupe\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 3, \"Displacement\": 70.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2330, \"Acceleration\": 13.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"amc matador (sw)\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 304.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3892, \"Acceleration\": 12.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet chevelle concours (sw)\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 307.0, \"Horsepower\": 130.0, \"Weight_in_lbs\": 4098, \"Acceleration\": 14.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford gran torino (sw)\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 4294, \"Acceleration\": 16.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth satellite custom (sw)\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4077, \"Acceleration\": 14.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volvo 145e (sw)\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 112.0, \"Weight_in_lbs\": 2933, \"Acceleration\": 14.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"volkswagen 411 (sw)\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 76.0, \"Weight_in_lbs\": 2511, \"Acceleration\": 18.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"peugeot 504 (sw)\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 87.0, \"Weight_in_lbs\": 2979, \"Acceleration\": 19.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"renault 12 (sw)\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 96.0, \"Horsepower\": 69.0, \"Weight_in_lbs\": 2189, \"Acceleration\": 18.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"ford pinto (sw)\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 4, \"Displacement\": 122.0, \"Horsepower\": 86.0, \"Weight_in_lbs\": 2395, \"Acceleration\": 16.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun 510 (sw)\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 92.0, \"Weight_in_lbs\": 2288, \"Acceleration\": 17.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"toyouta corona mark ii (sw)\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2506, \"Acceleration\": 14.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge colt (sw)\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 80.0, \"Weight_in_lbs\": 2164, \"Acceleration\": 15.0, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corolla 1600 (sw)\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2100, \"Acceleration\": 16.5, \"Year\": \"1972-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"buick century 350\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 175.0, \"Weight_in_lbs\": 4100, \"Acceleration\": 13.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc matador\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 304.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3672, \"Acceleration\": 11.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet malibu\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 145.0, \"Weight_in_lbs\": 3988, \"Acceleration\": 13.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford gran torino\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 137.0, \"Weight_in_lbs\": 4042, \"Acceleration\": 14.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge coronet custom\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3777, \"Acceleration\": 12.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury marquis brougham\", \"Miles_per_Gallon\": 12.0, \"Cylinders\": 8, \"Displacement\": 429.0, \"Horsepower\": 198.0, \"Weight_in_lbs\": 4952, \"Acceleration\": 11.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet caprice classic\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4464, \"Acceleration\": 12.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford ltd\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 158.0, \"Weight_in_lbs\": 4363, \"Acceleration\": 13.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth fury gran sedan\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4237, \"Acceleration\": 14.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chrysler new yorker brougham\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 440.0, \"Horsepower\": 215.0, \"Weight_in_lbs\": 4735, \"Acceleration\": 11.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick electra 225 custom\", \"Miles_per_Gallon\": 12.0, \"Cylinders\": 8, \"Displacement\": 455.0, \"Horsepower\": 225.0, \"Weight_in_lbs\": 4951, \"Acceleration\": 11.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc ambassador brougham\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 360.0, \"Horsepower\": 175.0, \"Weight_in_lbs\": 3821, \"Acceleration\": 11.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth valiant\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3121, \"Acceleration\": 16.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet nova custom\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3278, \"Acceleration\": 18.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc hornet\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 2945, \"Acceleration\": 16.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford maverick\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 3021, \"Acceleration\": 16.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth duster\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 6, \"Displacement\": 198.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2904, \"Acceleration\": 16.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen super beetle\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 46.0, \"Weight_in_lbs\": 1950, \"Acceleration\": 21.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"chevrolet impala\", \"Miles_per_Gallon\": 11.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4997, \"Acceleration\": 14.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford country\", \"Miles_per_Gallon\": 12.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 167.0, \"Weight_in_lbs\": 4906, \"Acceleration\": 12.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth custom suburb\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 360.0, \"Horsepower\": 170.0, \"Weight_in_lbs\": 4654, \"Acceleration\": 13.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"oldsmobile vista cruiser\", \"Miles_per_Gallon\": 12.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 180.0, \"Weight_in_lbs\": 4499, \"Acceleration\": 12.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc gremlin\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 2789, \"Acceleration\": 15.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota carina\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2279, \"Acceleration\": 19.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"chevrolet vega\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 72.0, \"Weight_in_lbs\": 2401, \"Acceleration\": 19.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun 610\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 4, \"Displacement\": 108.0, \"Horsepower\": 94.0, \"Weight_in_lbs\": 2379, \"Acceleration\": 16.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"maxda rx3\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 3, \"Displacement\": 70.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2124, \"Acceleration\": 13.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"ford pinto\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 4, \"Displacement\": 122.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 2310, \"Acceleration\": 18.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury capri v6\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 6, \"Displacement\": 155.0, \"Horsepower\": 107.0, \"Weight_in_lbs\": 2472, \"Acceleration\": 14.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"fiat 124 sport coupe\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2265, \"Acceleration\": 15.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"chevrolet monte carlo s\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 145.0, \"Weight_in_lbs\": 4082, \"Acceleration\": 13.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac grand prix\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 230.0, \"Weight_in_lbs\": 4278, \"Acceleration\": 9.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"fiat 128\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 68.0, \"Horsepower\": 49.0, \"Weight_in_lbs\": 1867, \"Acceleration\": 19.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"opel manta\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 116.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2158, \"Acceleration\": 15.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"audi 100ls\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 4, \"Displacement\": 114.0, \"Horsepower\": 91.0, \"Weight_in_lbs\": 2582, \"Acceleration\": 14.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"volvo 144ea\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 112.0, \"Weight_in_lbs\": 2868, \"Acceleration\": 15.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"dodge dart custom\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3399, \"Acceleration\": 11.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"saab 99le\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 2660, \"Acceleration\": 14.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"toyota mark ii\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 6, \"Displacement\": 156.0, \"Horsepower\": 122.0, \"Weight_in_lbs\": 2807, \"Acceleration\": 13.5, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"oldsmobile omega\", \"Miles_per_Gallon\": 11.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 180.0, \"Weight_in_lbs\": 3664, \"Acceleration\": 11.0, \"Year\": \"1973-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth duster\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 6, \"Displacement\": 198.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 3102, \"Acceleration\": 16.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford maverick\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": null, \"Weight_in_lbs\": 2875, \"Acceleration\": 17.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc hornet\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 2901, \"Acceleration\": 16.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet nova\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3336, \"Acceleration\": 17.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun b210\", \"Miles_per_Gallon\": 31.0, \"Cylinders\": 4, \"Displacement\": 79.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 1950, \"Acceleration\": 19.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"ford pinto\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 122.0, \"Horsepower\": 80.0, \"Weight_in_lbs\": 2451, \"Acceleration\": 16.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corolla 1200\", \"Miles_per_Gallon\": 32.0, \"Cylinders\": 4, \"Displacement\": 71.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 1836, \"Acceleration\": 21.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"chevrolet vega\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2542, \"Acceleration\": 17.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet chevelle malibu classic\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3781, \"Acceleration\": 17.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc matador\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 6, \"Displacement\": 258.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3632, \"Acceleration\": 18.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth satellite sebring\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3613, \"Acceleration\": 16.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford gran torino\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 4141, \"Acceleration\": 14.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick century luxus (sw)\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4699, \"Acceleration\": 14.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge coronet custom (sw)\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4457, \"Acceleration\": 13.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford gran torino (sw)\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 4638, \"Acceleration\": 16.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc matador (sw)\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 304.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4257, \"Acceleration\": 15.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"audi fox\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 83.0, \"Weight_in_lbs\": 2219, \"Acceleration\": 16.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"volkswagen dasher\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 79.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 1963, \"Acceleration\": 15.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"opel manta\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 78.0, \"Weight_in_lbs\": 2300, \"Acceleration\": 14.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"toyota corona\", \"Miles_per_Gallon\": 31.0, \"Cylinders\": 4, \"Displacement\": 76.0, \"Horsepower\": 52.0, \"Weight_in_lbs\": 1649, \"Acceleration\": 16.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 710\", \"Miles_per_Gallon\": 32.0, \"Cylinders\": 4, \"Displacement\": 83.0, \"Horsepower\": 61.0, \"Weight_in_lbs\": 2003, \"Acceleration\": 19.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge colt\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2125, \"Acceleration\": 14.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"fiat 128\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2108, \"Acceleration\": 15.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"fiat 124 tc\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 116.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2246, \"Acceleration\": 14.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"honda civic\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2489, \"Acceleration\": 15.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"subaru\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 108.0, \"Horsepower\": 93.0, \"Weight_in_lbs\": 2391, \"Acceleration\": 15.5, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"fiat x1.9\", \"Miles_per_Gallon\": 31.0, \"Cylinders\": 4, \"Displacement\": 79.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 2000, \"Acceleration\": 16.0, \"Year\": \"1974-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"plymouth valiant custom\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 3264, \"Acceleration\": 16.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet nova\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3459, \"Acceleration\": 16.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury monarch\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 72.0, \"Weight_in_lbs\": 3432, \"Acceleration\": 21.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford maverick\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 72.0, \"Weight_in_lbs\": 3158, \"Acceleration\": 19.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac catalina\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 170.0, \"Weight_in_lbs\": 4668, \"Acceleration\": 11.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet bel air\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 145.0, \"Weight_in_lbs\": 4440, \"Acceleration\": 14.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth grand fury\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4498, \"Acceleration\": 14.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford ltd\", \"Miles_per_Gallon\": 14.0, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 148.0, \"Weight_in_lbs\": 4657, \"Acceleration\": 13.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick century\", \"Miles_per_Gallon\": 17.0, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3907, \"Acceleration\": 21.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevroelt chevelle malibu\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3897, \"Acceleration\": 18.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc matador\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 6, \"Displacement\": 258.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3730, \"Acceleration\": 19.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth fury\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 3785, \"Acceleration\": 19.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick skyhawk\", \"Miles_per_Gallon\": 21.0, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3039, \"Acceleration\": 15.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet monza 2+2\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 8, \"Displacement\": 262.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3221, \"Acceleration\": 13.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford mustang ii\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 129.0, \"Weight_in_lbs\": 3169, \"Acceleration\": 12.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corolla\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2171, \"Acceleration\": 16.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"ford pinto\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 83.0, \"Weight_in_lbs\": 2639, \"Acceleration\": 17.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc gremlin\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 2914, \"Acceleration\": 16.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac astro\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 78.0, \"Weight_in_lbs\": 2592, \"Acceleration\": 18.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corona\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 134.0, \"Horsepower\": 96.0, \"Weight_in_lbs\": 2702, \"Acceleration\": 13.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"volkswagen dasher\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 71.0, \"Weight_in_lbs\": 2223, \"Acceleration\": 16.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"datsun 710\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 119.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2545, \"Acceleration\": 17.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"ford pinto\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 171.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2984, \"Acceleration\": 14.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen rabbit\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 1937, \"Acceleration\": 14.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"amc pacer\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 3211, \"Acceleration\": 17.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"audi 100ls\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 115.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2694, \"Acceleration\": 15.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"peugeot 504\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2957, \"Acceleration\": 17.0, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"volvo 244dl\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 98.0, \"Weight_in_lbs\": 2945, \"Acceleration\": 14.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"saab 99le\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 115.0, \"Weight_in_lbs\": 2671, \"Acceleration\": 13.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"honda civic cvcc\", \"Miles_per_Gallon\": 33.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 53.0, \"Weight_in_lbs\": 1795, \"Acceleration\": 17.5, \"Year\": \"1975-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"fiat 131\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 107.0, \"Horsepower\": 86.0, \"Weight_in_lbs\": 2464, \"Acceleration\": 15.5, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"opel 1900\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 116.0, \"Horsepower\": 81.0, \"Weight_in_lbs\": 2220, \"Acceleration\": 16.9, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"capri ii\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 92.0, \"Weight_in_lbs\": 2572, \"Acceleration\": 14.9, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge colt\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 79.0, \"Weight_in_lbs\": 2255, \"Acceleration\": 17.7, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"renault 12tl\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 101.0, \"Horsepower\": 83.0, \"Weight_in_lbs\": 2202, \"Acceleration\": 15.3, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"chevrolet chevelle malibu classic\", \"Miles_per_Gallon\": 17.5, \"Cylinders\": 8, \"Displacement\": 305.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 4215, \"Acceleration\": 13.0, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge coronet brougham\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 4190, \"Acceleration\": 13.0, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc matador\", \"Miles_per_Gallon\": 15.5, \"Cylinders\": 8, \"Displacement\": 304.0, \"Horsepower\": 120.0, \"Weight_in_lbs\": 3962, \"Acceleration\": 13.9, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford gran torino\", \"Miles_per_Gallon\": 14.5, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 152.0, \"Weight_in_lbs\": 4215, \"Acceleration\": 12.8, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth valiant\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3233, \"Acceleration\": 15.4, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet nova\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3353, \"Acceleration\": 14.5, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford maverick\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": 81.0, \"Weight_in_lbs\": 3012, \"Acceleration\": 17.6, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc hornet\", \"Miles_per_Gallon\": 22.5, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 3085, \"Acceleration\": 17.6, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet chevette\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": 52.0, \"Weight_in_lbs\": 2035, \"Acceleration\": 22.2, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet woody\", \"Miles_per_Gallon\": 24.5, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 60.0, \"Weight_in_lbs\": 2164, \"Acceleration\": 22.1, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"vw rabbit\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 1937, \"Acceleration\": 14.2, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"honda civic\", \"Miles_per_Gallon\": 33.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 53.0, \"Weight_in_lbs\": 1795, \"Acceleration\": 17.4, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge aspen se\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3651, \"Acceleration\": 17.7, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford granada ghia\", \"Miles_per_Gallon\": 18.0, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 78.0, \"Weight_in_lbs\": 3574, \"Acceleration\": 21.0, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac ventura sj\", \"Miles_per_Gallon\": 18.5, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3645, \"Acceleration\": 16.2, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc pacer d/l\", \"Miles_per_Gallon\": 17.5, \"Cylinders\": 6, \"Displacement\": 258.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 3193, \"Acceleration\": 17.8, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen rabbit\", \"Miles_per_Gallon\": 29.5, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 71.0, \"Weight_in_lbs\": 1825, \"Acceleration\": 12.2, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"datsun b-210\", \"Miles_per_Gallon\": 32.0, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 1990, \"Acceleration\": 17.0, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"toyota corolla\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2155, \"Acceleration\": 16.4, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"ford pinto\", \"Miles_per_Gallon\": 26.5, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 72.0, \"Weight_in_lbs\": 2565, \"Acceleration\": 13.6, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volvo 245\", \"Miles_per_Gallon\": 20.0, \"Cylinders\": 4, \"Displacement\": 130.0, \"Horsepower\": 102.0, \"Weight_in_lbs\": 3150, \"Acceleration\": 15.7, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"plymouth volare premier v8\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3940, \"Acceleration\": 13.2, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"peugeot 504\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 3270, \"Acceleration\": 21.9, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"toyota mark ii\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 156.0, \"Horsepower\": 108.0, \"Weight_in_lbs\": 2930, \"Acceleration\": 15.5, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"mercedes-benz 280s\", \"Miles_per_Gallon\": 16.5, \"Cylinders\": 6, \"Displacement\": 168.0, \"Horsepower\": 120.0, \"Weight_in_lbs\": 3820, \"Acceleration\": 16.7, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"cadillac seville\", \"Miles_per_Gallon\": 16.5, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 180.0, \"Weight_in_lbs\": 4380, \"Acceleration\": 12.1, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevy c10\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 145.0, \"Weight_in_lbs\": 4055, \"Acceleration\": 12.0, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford f108\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 130.0, \"Weight_in_lbs\": 3870, \"Acceleration\": 15.0, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge d100\", \"Miles_per_Gallon\": 13.0, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3755, \"Acceleration\": 14.0, \"Year\": \"1976-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"honda Accelerationord cvcc\", \"Miles_per_Gallon\": 31.5, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 68.0, \"Weight_in_lbs\": 2045, \"Acceleration\": 18.5, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"buick opel isuzu deluxe\", \"Miles_per_Gallon\": 30.0, \"Cylinders\": 4, \"Displacement\": 111.0, \"Horsepower\": 80.0, \"Weight_in_lbs\": 2155, \"Acceleration\": 14.8, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"renault 5 gtl\", \"Miles_per_Gallon\": 36.0, \"Cylinders\": 4, \"Displacement\": 79.0, \"Horsepower\": 58.0, \"Weight_in_lbs\": 1825, \"Acceleration\": 18.6, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"plymouth arrow gs\", \"Miles_per_Gallon\": 25.5, \"Cylinders\": 4, \"Displacement\": 122.0, \"Horsepower\": 96.0, \"Weight_in_lbs\": 2300, \"Acceleration\": 15.5, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun f-10 hatchback\", \"Miles_per_Gallon\": 33.5, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 1945, \"Acceleration\": 16.8, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"chevrolet caprice classic\", \"Miles_per_Gallon\": 17.5, \"Cylinders\": 8, \"Displacement\": 305.0, \"Horsepower\": 145.0, \"Weight_in_lbs\": 3880, \"Acceleration\": 12.5, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"oldsmobile cutlass supreme\", \"Miles_per_Gallon\": 17.0, \"Cylinders\": 8, \"Displacement\": 260.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 4060, \"Acceleration\": 19.0, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge monaco brougham\", \"Miles_per_Gallon\": 15.5, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 145.0, \"Weight_in_lbs\": 4140, \"Acceleration\": 13.7, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury cougar brougham\", \"Miles_per_Gallon\": 15.0, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 130.0, \"Weight_in_lbs\": 4295, \"Acceleration\": 14.9, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet concours\", \"Miles_per_Gallon\": 17.5, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3520, \"Acceleration\": 16.4, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick skylark\", \"Miles_per_Gallon\": 20.5, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3425, \"Acceleration\": 16.9, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth volare custom\", \"Miles_per_Gallon\": 19.0, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3630, \"Acceleration\": 17.7, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford granada\", \"Miles_per_Gallon\": 18.5, \"Cylinders\": 6, \"Displacement\": 250.0, \"Horsepower\": 98.0, \"Weight_in_lbs\": 3525, \"Acceleration\": 19.0, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac grand prix lj\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 180.0, \"Weight_in_lbs\": 4220, \"Acceleration\": 11.1, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet monte carlo landau\", \"Miles_per_Gallon\": 15.5, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 170.0, \"Weight_in_lbs\": 4165, \"Acceleration\": 11.4, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chrysler cordoba\", \"Miles_per_Gallon\": 15.5, \"Cylinders\": 8, \"Displacement\": 400.0, \"Horsepower\": 190.0, \"Weight_in_lbs\": 4325, \"Acceleration\": 12.2, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford thunderbird\", \"Miles_per_Gallon\": 16.0, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 149.0, \"Weight_in_lbs\": 4335, \"Acceleration\": 14.5, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen rabbit custom\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 78.0, \"Weight_in_lbs\": 1940, \"Acceleration\": 14.5, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"pontiac sunbird coupe\", \"Miles_per_Gallon\": 24.5, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2740, \"Acceleration\": 16.0, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corolla liftback\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2265, \"Acceleration\": 18.2, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"ford mustang ii 2+2\", \"Miles_per_Gallon\": 25.5, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 89.0, \"Weight_in_lbs\": 2755, \"Acceleration\": 15.8, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet chevette\", \"Miles_per_Gallon\": 30.5, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 63.0, \"Weight_in_lbs\": 2051, \"Acceleration\": 17.0, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge colt m/m\", \"Miles_per_Gallon\": 33.5, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 83.0, \"Weight_in_lbs\": 2075, \"Acceleration\": 15.9, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"subaru dl\", \"Miles_per_Gallon\": 30.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 1985, \"Acceleration\": 16.4, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"volkswagen dasher\", \"Miles_per_Gallon\": 30.5, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 78.0, \"Weight_in_lbs\": 2190, \"Acceleration\": 14.1, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"datsun 810\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 6, \"Displacement\": 146.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2815, \"Acceleration\": 14.5, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"bmw 320i\", \"Miles_per_Gallon\": 21.5, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 2600, \"Acceleration\": 12.8, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"mazda rx-4\", \"Miles_per_Gallon\": 21.5, \"Cylinders\": 3, \"Displacement\": 80.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 2720, \"Acceleration\": 13.5, \"Year\": \"1977-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"volkswagen rabbit custom diesel\", \"Miles_per_Gallon\": 43.1, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 48.0, \"Weight_in_lbs\": 1985, \"Acceleration\": 21.5, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"ford fiesta\", \"Miles_per_Gallon\": 36.1, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 66.0, \"Weight_in_lbs\": 1800, \"Acceleration\": 14.4, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mazda glc deluxe\", \"Miles_per_Gallon\": 32.8, \"Cylinders\": 4, \"Displacement\": 78.0, \"Horsepower\": 52.0, \"Weight_in_lbs\": 1985, \"Acceleration\": 19.4, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun b210 gx\", \"Miles_per_Gallon\": 39.4, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 2070, \"Acceleration\": 18.6, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"honda civic cvcc\", \"Miles_per_Gallon\": 36.1, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 60.0, \"Weight_in_lbs\": 1800, \"Acceleration\": 16.4, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"oldsmobile cutlass salon brougham\", \"Miles_per_Gallon\": 19.9, \"Cylinders\": 8, \"Displacement\": 260.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3365, \"Acceleration\": 15.5, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge diplomat\", \"Miles_per_Gallon\": 19.4, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 3735, \"Acceleration\": 13.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury monarch ghia\", \"Miles_per_Gallon\": 20.2, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 139.0, \"Weight_in_lbs\": 3570, \"Acceleration\": 12.8, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac phoenix lj\", \"Miles_per_Gallon\": 19.2, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3535, \"Acceleration\": 19.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet malibu\", \"Miles_per_Gallon\": 20.5, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 3155, \"Acceleration\": 18.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford fairmont (auto)\", \"Miles_per_Gallon\": 20.2, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 2965, \"Acceleration\": 15.8, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford fairmont (man)\", \"Miles_per_Gallon\": 25.1, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2720, \"Acceleration\": 15.4, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth volare\", \"Miles_per_Gallon\": 20.5, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 3430, \"Acceleration\": 17.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc concord\", \"Miles_per_Gallon\": 19.4, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 3210, \"Acceleration\": 17.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick century special\", \"Miles_per_Gallon\": 20.6, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3380, \"Acceleration\": 15.8, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury zephyr\", \"Miles_per_Gallon\": 20.8, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 3070, \"Acceleration\": 16.7, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge aspen\", \"Miles_per_Gallon\": 18.6, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3620, \"Acceleration\": 18.7, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc concord d/l\", \"Miles_per_Gallon\": 18.1, \"Cylinders\": 6, \"Displacement\": 258.0, \"Horsepower\": 120.0, \"Weight_in_lbs\": 3410, \"Acceleration\": 15.1, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet monte carlo landau\", \"Miles_per_Gallon\": 19.2, \"Cylinders\": 8, \"Displacement\": 305.0, \"Horsepower\": 145.0, \"Weight_in_lbs\": 3425, \"Acceleration\": 13.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick regal sport coupe (turbo)\", \"Miles_per_Gallon\": 17.7, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 165.0, \"Weight_in_lbs\": 3445, \"Acceleration\": 13.4, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford futura\", \"Miles_per_Gallon\": 18.1, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 139.0, \"Weight_in_lbs\": 3205, \"Acceleration\": 11.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge magnum xe\", \"Miles_per_Gallon\": 17.5, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 140.0, \"Weight_in_lbs\": 4080, \"Acceleration\": 13.7, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet chevette\", \"Miles_per_Gallon\": 30.0, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 68.0, \"Weight_in_lbs\": 2155, \"Acceleration\": 16.5, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota corona\", \"Miles_per_Gallon\": 27.5, \"Cylinders\": 4, \"Displacement\": 134.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2560, \"Acceleration\": 14.2, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 510\", \"Miles_per_Gallon\": 27.2, \"Cylinders\": 4, \"Displacement\": 119.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2300, \"Acceleration\": 14.7, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge omni\", \"Miles_per_Gallon\": 30.9, \"Cylinders\": 4, \"Displacement\": 105.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2230, \"Acceleration\": 14.5, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota celica gt liftback\", \"Miles_per_Gallon\": 21.1, \"Cylinders\": 4, \"Displacement\": 134.0, \"Horsepower\": 95.0, \"Weight_in_lbs\": 2515, \"Acceleration\": 14.8, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"plymouth sapporo\", \"Miles_per_Gallon\": 23.2, \"Cylinders\": 4, \"Displacement\": 156.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 2745, \"Acceleration\": 16.7, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"oldsmobile starfire sx\", \"Miles_per_Gallon\": 23.8, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 2855, \"Acceleration\": 17.6, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun 200-sx\", \"Miles_per_Gallon\": 23.9, \"Cylinders\": 4, \"Displacement\": 119.0, \"Horsepower\": 97.0, \"Weight_in_lbs\": 2405, \"Acceleration\": 14.9, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"audi 5000\", \"Miles_per_Gallon\": 20.3, \"Cylinders\": 5, \"Displacement\": 131.0, \"Horsepower\": 103.0, \"Weight_in_lbs\": 2830, \"Acceleration\": 15.9, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"volvo 264gl\", \"Miles_per_Gallon\": 17.0, \"Cylinders\": 6, \"Displacement\": 163.0, \"Horsepower\": 125.0, \"Weight_in_lbs\": 3140, \"Acceleration\": 13.6, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"saab 99gle\", \"Miles_per_Gallon\": 21.6, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 115.0, \"Weight_in_lbs\": 2795, \"Acceleration\": 15.7, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"peugeot 604sl\", \"Miles_per_Gallon\": 16.2, \"Cylinders\": 6, \"Displacement\": 163.0, \"Horsepower\": 133.0, \"Weight_in_lbs\": 3410, \"Acceleration\": 15.8, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"volkswagen scirocco\", \"Miles_per_Gallon\": 31.5, \"Cylinders\": 4, \"Displacement\": 89.0, \"Horsepower\": 71.0, \"Weight_in_lbs\": 1990, \"Acceleration\": 14.9, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"honda Accelerationord lx\", \"Miles_per_Gallon\": 29.5, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 68.0, \"Weight_in_lbs\": 2135, \"Acceleration\": 16.6, \"Year\": \"1978-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"pontiac lemans v6\", \"Miles_per_Gallon\": 21.5, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 115.0, \"Weight_in_lbs\": 3245, \"Acceleration\": 15.4, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury zephyr 6\", \"Miles_per_Gallon\": 19.8, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 2990, \"Acceleration\": 18.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford fairmont 4\", \"Miles_per_Gallon\": 22.3, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2890, \"Acceleration\": 17.3, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc concord dl 6\", \"Miles_per_Gallon\": 20.2, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 3265, \"Acceleration\": 18.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge aspen 6\", \"Miles_per_Gallon\": 20.6, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3360, \"Acceleration\": 16.6, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet caprice classic\", \"Miles_per_Gallon\": 17.0, \"Cylinders\": 8, \"Displacement\": 305.0, \"Horsepower\": 130.0, \"Weight_in_lbs\": 3840, \"Acceleration\": 15.4, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford ltd landau\", \"Miles_per_Gallon\": 17.6, \"Cylinders\": 8, \"Displacement\": 302.0, \"Horsepower\": 129.0, \"Weight_in_lbs\": 3725, \"Acceleration\": 13.4, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury grand marquis\", \"Miles_per_Gallon\": 16.5, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 138.0, \"Weight_in_lbs\": 3955, \"Acceleration\": 13.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge st. regis\", \"Miles_per_Gallon\": 18.2, \"Cylinders\": 8, \"Displacement\": 318.0, \"Horsepower\": 135.0, \"Weight_in_lbs\": 3830, \"Acceleration\": 15.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick estate wagon (sw)\", \"Miles_per_Gallon\": 16.9, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 155.0, \"Weight_in_lbs\": 4360, \"Acceleration\": 14.9, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford country squire (sw)\", \"Miles_per_Gallon\": 15.5, \"Cylinders\": 8, \"Displacement\": 351.0, \"Horsepower\": 142.0, \"Weight_in_lbs\": 4054, \"Acceleration\": 14.3, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet malibu classic (sw)\", \"Miles_per_Gallon\": 19.2, \"Cylinders\": 8, \"Displacement\": 267.0, \"Horsepower\": 125.0, \"Weight_in_lbs\": 3605, \"Acceleration\": 15.0, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chrysler lebaron town @ country (sw)\", \"Miles_per_Gallon\": 18.5, \"Cylinders\": 8, \"Displacement\": 360.0, \"Horsepower\": 150.0, \"Weight_in_lbs\": 3940, \"Acceleration\": 13.0, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"vw rabbit custom\", \"Miles_per_Gallon\": 31.9, \"Cylinders\": 4, \"Displacement\": 89.0, \"Horsepower\": 71.0, \"Weight_in_lbs\": 1925, \"Acceleration\": 14.0, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"maxda glc deluxe\", \"Miles_per_Gallon\": 34.1, \"Cylinders\": 4, \"Displacement\": 86.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 1975, \"Acceleration\": 15.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge colt hatchback custom\", \"Miles_per_Gallon\": 35.7, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 80.0, \"Weight_in_lbs\": 1915, \"Acceleration\": 14.4, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc spirit dl\", \"Miles_per_Gallon\": 27.4, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 80.0, \"Weight_in_lbs\": 2670, \"Acceleration\": 15.0, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercedes benz 300d\", \"Miles_per_Gallon\": 25.4, \"Cylinders\": 5, \"Displacement\": 183.0, \"Horsepower\": 77.0, \"Weight_in_lbs\": 3530, \"Acceleration\": 20.1, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"cadillac eldorado\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 125.0, \"Weight_in_lbs\": 3900, \"Acceleration\": 17.4, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"peugeot 504\", \"Miles_per_Gallon\": 27.2, \"Cylinders\": 4, \"Displacement\": 141.0, \"Horsepower\": 71.0, \"Weight_in_lbs\": 3190, \"Acceleration\": 24.8, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"oldsmobile cutlass salon brougham\", \"Miles_per_Gallon\": 23.9, \"Cylinders\": 8, \"Displacement\": 260.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 3420, \"Acceleration\": 22.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth horizon\", \"Miles_per_Gallon\": 34.2, \"Cylinders\": 4, \"Displacement\": 105.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 2200, \"Acceleration\": 13.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth horizon tc3\", \"Miles_per_Gallon\": 34.5, \"Cylinders\": 4, \"Displacement\": 105.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 2150, \"Acceleration\": 14.9, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun 210\", \"Miles_per_Gallon\": 31.8, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 2020, \"Acceleration\": 19.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"fiat strada custom\", \"Miles_per_Gallon\": 37.3, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 69.0, \"Weight_in_lbs\": 2130, \"Acceleration\": 14.7, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"buick skylark limited\", \"Miles_per_Gallon\": 28.4, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2670, \"Acceleration\": 16.0, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet citation\", \"Miles_per_Gallon\": 28.8, \"Cylinders\": 6, \"Displacement\": 173.0, \"Horsepower\": 115.0, \"Weight_in_lbs\": 2595, \"Acceleration\": 11.3, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"oldsmobile omega brougham\", \"Miles_per_Gallon\": 26.8, \"Cylinders\": 6, \"Displacement\": 173.0, \"Horsepower\": 115.0, \"Weight_in_lbs\": 2700, \"Acceleration\": 12.9, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac phoenix\", \"Miles_per_Gallon\": 33.5, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2556, \"Acceleration\": 13.2, \"Year\": \"1979-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"vw rabbit\", \"Miles_per_Gallon\": 41.5, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 76.0, \"Weight_in_lbs\": 2144, \"Acceleration\": 14.7, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"toyota corolla tercel\", \"Miles_per_Gallon\": 38.1, \"Cylinders\": 4, \"Displacement\": 89.0, \"Horsepower\": 60.0, \"Weight_in_lbs\": 1968, \"Acceleration\": 18.8, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"chevrolet chevette\", \"Miles_per_Gallon\": 32.1, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 2120, \"Acceleration\": 15.5, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun 310\", \"Miles_per_Gallon\": 37.2, \"Cylinders\": 4, \"Displacement\": 86.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 2019, \"Acceleration\": 16.4, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"chevrolet citation\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2678, \"Acceleration\": 16.5, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford fairmont\", \"Miles_per_Gallon\": 26.4, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2870, \"Acceleration\": 18.1, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc concord\", \"Miles_per_Gallon\": 24.3, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 3003, \"Acceleration\": 20.1, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge aspen\", \"Miles_per_Gallon\": 19.1, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 3381, \"Acceleration\": 18.7, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"audi 4000\", \"Miles_per_Gallon\": 34.3, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 78.0, \"Weight_in_lbs\": 2188, \"Acceleration\": 15.8, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"toyota corona liftback\", \"Miles_per_Gallon\": 29.8, \"Cylinders\": 4, \"Displacement\": 134.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2711, \"Acceleration\": 15.5, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"mazda 626\", \"Miles_per_Gallon\": 31.3, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2542, \"Acceleration\": 17.5, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 510 hatchback\", \"Miles_per_Gallon\": 37.0, \"Cylinders\": 4, \"Displacement\": 119.0, \"Horsepower\": 92.0, \"Weight_in_lbs\": 2434, \"Acceleration\": 15.0, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"toyota corolla\", \"Miles_per_Gallon\": 32.2, \"Cylinders\": 4, \"Displacement\": 108.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2265, \"Acceleration\": 15.2, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"mazda glc\", \"Miles_per_Gallon\": 46.6, \"Cylinders\": 4, \"Displacement\": 86.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 2110, \"Acceleration\": 17.9, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge colt\", \"Miles_per_Gallon\": 27.9, \"Cylinders\": 4, \"Displacement\": 156.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 2800, \"Acceleration\": 14.4, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"datsun 210\", \"Miles_per_Gallon\": 40.8, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 2110, \"Acceleration\": 19.2, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"vw rabbit c (diesel)\", \"Miles_per_Gallon\": 44.3, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 48.0, \"Weight_in_lbs\": 2085, \"Acceleration\": 21.7, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"vw dasher (diesel)\", \"Miles_per_Gallon\": 43.4, \"Cylinders\": 4, \"Displacement\": 90.0, \"Horsepower\": 48.0, \"Weight_in_lbs\": 2335, \"Acceleration\": 23.7, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"audi 5000s (diesel)\", \"Miles_per_Gallon\": 36.4, \"Cylinders\": 5, \"Displacement\": 121.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 2950, \"Acceleration\": 19.9, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"mercedes-benz 240d\", \"Miles_per_Gallon\": 30.0, \"Cylinders\": 4, \"Displacement\": 146.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 3250, \"Acceleration\": 21.8, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"honda civic 1500 gl\", \"Miles_per_Gallon\": 44.6, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 1850, \"Acceleration\": 13.8, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"renault lecar deluxe\", \"Miles_per_Gallon\": 40.9, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": null, \"Weight_in_lbs\": 1835, \"Acceleration\": 17.3, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"subaru dl\", \"Miles_per_Gallon\": 33.8, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 2145, \"Acceleration\": 18.0, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"vokswagen rabbit\", \"Miles_per_Gallon\": 29.8, \"Cylinders\": 4, \"Displacement\": 89.0, \"Horsepower\": 62.0, \"Weight_in_lbs\": 1845, \"Acceleration\": 15.3, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"datsun 280-zx\", \"Miles_per_Gallon\": 32.7, \"Cylinders\": 6, \"Displacement\": 168.0, \"Horsepower\": 132.0, \"Weight_in_lbs\": 2910, \"Acceleration\": 11.4, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"mazda rx-7 gs\", \"Miles_per_Gallon\": 23.7, \"Cylinders\": 3, \"Displacement\": 70.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 2420, \"Acceleration\": 12.5, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"triumph tr7 coupe\", \"Miles_per_Gallon\": 35.0, \"Cylinders\": 4, \"Displacement\": 122.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2500, \"Acceleration\": 15.1, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"ford mustang cobra\", \"Miles_per_Gallon\": 23.6, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": null, \"Weight_in_lbs\": 2905, \"Acceleration\": 14.3, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"honda Accelerationord\", \"Miles_per_Gallon\": 32.4, \"Cylinders\": 4, \"Displacement\": 107.0, \"Horsepower\": 72.0, \"Weight_in_lbs\": 2290, \"Acceleration\": 17.0, \"Year\": \"1980-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"plymouth reliant\", \"Miles_per_Gallon\": 27.2, \"Cylinders\": 4, \"Displacement\": 135.0, \"Horsepower\": 84.0, \"Weight_in_lbs\": 2490, \"Acceleration\": 15.7, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"buick skylark\", \"Miles_per_Gallon\": 26.6, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 84.0, \"Weight_in_lbs\": 2635, \"Acceleration\": 16.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge aries wagon (sw)\", \"Miles_per_Gallon\": 25.8, \"Cylinders\": 4, \"Displacement\": 156.0, \"Horsepower\": 92.0, \"Weight_in_lbs\": 2620, \"Acceleration\": 14.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet citation\", \"Miles_per_Gallon\": 23.5, \"Cylinders\": 6, \"Displacement\": 173.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 2725, \"Acceleration\": 12.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"plymouth reliant\", \"Miles_per_Gallon\": 30.0, \"Cylinders\": 4, \"Displacement\": 135.0, \"Horsepower\": 84.0, \"Weight_in_lbs\": 2385, \"Acceleration\": 12.9, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota starlet\", \"Miles_per_Gallon\": 39.1, \"Cylinders\": 4, \"Displacement\": 79.0, \"Horsepower\": 58.0, \"Weight_in_lbs\": 1755, \"Acceleration\": 16.9, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"plymouth champ\", \"Miles_per_Gallon\": 39.0, \"Cylinders\": 4, \"Displacement\": 86.0, \"Horsepower\": 64.0, \"Weight_in_lbs\": 1875, \"Acceleration\": 16.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"honda civic 1300\", \"Miles_per_Gallon\": 35.1, \"Cylinders\": 4, \"Displacement\": 81.0, \"Horsepower\": 60.0, \"Weight_in_lbs\": 1760, \"Acceleration\": 16.1, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"subaru\", \"Miles_per_Gallon\": 32.3, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 2065, \"Acceleration\": 17.8, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 210\", \"Miles_per_Gallon\": 37.0, \"Cylinders\": 4, \"Displacement\": 85.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 1975, \"Acceleration\": 19.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"toyota tercel\", \"Miles_per_Gallon\": 37.7, \"Cylinders\": 4, \"Displacement\": 89.0, \"Horsepower\": 62.0, \"Weight_in_lbs\": 2050, \"Acceleration\": 17.3, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"mazda glc 4\", \"Miles_per_Gallon\": 34.1, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 68.0, \"Weight_in_lbs\": 1985, \"Acceleration\": 16.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"plymouth horizon 4\", \"Miles_per_Gallon\": 34.7, \"Cylinders\": 4, \"Displacement\": 105.0, \"Horsepower\": 63.0, \"Weight_in_lbs\": 2215, \"Acceleration\": 14.9, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford escort 4w\", \"Miles_per_Gallon\": 34.4, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 2045, \"Acceleration\": 16.2, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford escort 2h\", \"Miles_per_Gallon\": 29.9, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 65.0, \"Weight_in_lbs\": 2380, \"Acceleration\": 20.7, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen jetta\", \"Miles_per_Gallon\": 33.0, \"Cylinders\": 4, \"Displacement\": 105.0, \"Horsepower\": 74.0, \"Weight_in_lbs\": 2190, \"Acceleration\": 14.2, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"renault 18i\", \"Miles_per_Gallon\": 34.5, \"Cylinders\": 4, \"Displacement\": 100.0, \"Horsepower\": null, \"Weight_in_lbs\": 2320, \"Acceleration\": 15.8, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"honda prelude\", \"Miles_per_Gallon\": 33.7, \"Cylinders\": 4, \"Displacement\": 107.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2210, \"Acceleration\": 14.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"toyota corolla\", \"Miles_per_Gallon\": 32.4, \"Cylinders\": 4, \"Displacement\": 108.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2350, \"Acceleration\": 16.8, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 200sx\", \"Miles_per_Gallon\": 32.9, \"Cylinders\": 4, \"Displacement\": 119.0, \"Horsepower\": 100.0, \"Weight_in_lbs\": 2615, \"Acceleration\": 14.8, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"mazda 626\", \"Miles_per_Gallon\": 31.6, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 74.0, \"Weight_in_lbs\": 2635, \"Acceleration\": 18.3, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"peugeot 505s turbo diesel\", \"Miles_per_Gallon\": 28.1, \"Cylinders\": 4, \"Displacement\": 141.0, \"Horsepower\": 80.0, \"Weight_in_lbs\": 3230, \"Acceleration\": 20.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"saab 900s\", \"Miles_per_Gallon\": null, \"Cylinders\": 4, \"Displacement\": 121.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 2800, \"Acceleration\": 15.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"volvo diesel\", \"Miles_per_Gallon\": 30.7, \"Cylinders\": 6, \"Displacement\": 145.0, \"Horsepower\": 76.0, \"Weight_in_lbs\": 3160, \"Acceleration\": 19.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"toyota cressida\", \"Miles_per_Gallon\": 25.4, \"Cylinders\": 6, \"Displacement\": 168.0, \"Horsepower\": 116.0, \"Weight_in_lbs\": 2900, \"Acceleration\": 12.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 810 maxima\", \"Miles_per_Gallon\": 24.2, \"Cylinders\": 6, \"Displacement\": 146.0, \"Horsepower\": 120.0, \"Weight_in_lbs\": 2930, \"Acceleration\": 13.8, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"buick century\", \"Miles_per_Gallon\": 22.4, \"Cylinders\": 6, \"Displacement\": 231.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 3415, \"Acceleration\": 15.8, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"oldsmobile cutlass ls\", \"Miles_per_Gallon\": 26.6, \"Cylinders\": 8, \"Displacement\": 350.0, \"Horsepower\": 105.0, \"Weight_in_lbs\": 3725, \"Acceleration\": 19.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford granada gl\", \"Miles_per_Gallon\": 20.2, \"Cylinders\": 6, \"Displacement\": 200.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 3060, \"Acceleration\": 17.1, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chrysler lebaron salon\", \"Miles_per_Gallon\": 17.6, \"Cylinders\": 6, \"Displacement\": 225.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 3465, \"Acceleration\": 16.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet cavalier\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 112.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2605, \"Acceleration\": 19.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet cavalier wagon\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 112.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2640, \"Acceleration\": 18.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet cavalier 2-door\", \"Miles_per_Gallon\": 34.0, \"Cylinders\": 4, \"Displacement\": 112.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2395, \"Acceleration\": 18.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac j2000 se hatchback\", \"Miles_per_Gallon\": 31.0, \"Cylinders\": 4, \"Displacement\": 112.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 2575, \"Acceleration\": 16.2, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"dodge aries se\", \"Miles_per_Gallon\": 29.0, \"Cylinders\": 4, \"Displacement\": 135.0, \"Horsepower\": 84.0, \"Weight_in_lbs\": 2525, \"Acceleration\": 16.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"pontiac phoenix\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2735, \"Acceleration\": 18.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford fairmont futura\", \"Miles_per_Gallon\": 24.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 92.0, \"Weight_in_lbs\": 2865, \"Acceleration\": 16.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"amc concord dl\", \"Miles_per_Gallon\": 23.0, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": null, \"Weight_in_lbs\": 3035, \"Acceleration\": 20.5, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"volkswagen rabbit l\", \"Miles_per_Gallon\": 36.0, \"Cylinders\": 4, \"Displacement\": 105.0, \"Horsepower\": 74.0, \"Weight_in_lbs\": 1980, \"Acceleration\": 15.3, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"mazda glc custom l\", \"Miles_per_Gallon\": 37.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 68.0, \"Weight_in_lbs\": 2025, \"Acceleration\": 18.2, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"mazda glc custom\", \"Miles_per_Gallon\": 31.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 68.0, \"Weight_in_lbs\": 1970, \"Acceleration\": 17.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"plymouth horizon miser\", \"Miles_per_Gallon\": 38.0, \"Cylinders\": 4, \"Displacement\": 105.0, \"Horsepower\": 63.0, \"Weight_in_lbs\": 2125, \"Acceleration\": 14.7, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"mercury lynx l\", \"Miles_per_Gallon\": 36.0, \"Cylinders\": 4, \"Displacement\": 98.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 2125, \"Acceleration\": 17.3, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"nissan stanza xe\", \"Miles_per_Gallon\": 36.0, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 88.0, \"Weight_in_lbs\": 2160, \"Acceleration\": 14.5, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"honda Accelerationord\", \"Miles_per_Gallon\": 36.0, \"Cylinders\": 4, \"Displacement\": 107.0, \"Horsepower\": 75.0, \"Weight_in_lbs\": 2205, \"Acceleration\": 14.5, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"toyota corolla\", \"Miles_per_Gallon\": 34.0, \"Cylinders\": 4, \"Displacement\": 108.0, \"Horsepower\": 70.0, \"Weight_in_lbs\": 2245, \"Acceleration\": 16.9, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"honda civic\", \"Miles_per_Gallon\": 38.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 1965, \"Acceleration\": 15.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"honda civic (auto)\", \"Miles_per_Gallon\": 32.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 1965, \"Acceleration\": 15.7, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"datsun 310 gx\", \"Miles_per_Gallon\": 38.0, \"Cylinders\": 4, \"Displacement\": 91.0, \"Horsepower\": 67.0, \"Weight_in_lbs\": 1995, \"Acceleration\": 16.2, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"buick century limited\", \"Miles_per_Gallon\": 25.0, \"Cylinders\": 6, \"Displacement\": 181.0, \"Horsepower\": 110.0, \"Weight_in_lbs\": 2945, \"Acceleration\": 16.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"oldsmobile cutlass ciera (diesel)\", \"Miles_per_Gallon\": 38.0, \"Cylinders\": 6, \"Displacement\": 262.0, \"Horsepower\": 85.0, \"Weight_in_lbs\": 3015, \"Acceleration\": 17.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chrysler lebaron medallion\", \"Miles_per_Gallon\": 26.0, \"Cylinders\": 4, \"Displacement\": 156.0, \"Horsepower\": 92.0, \"Weight_in_lbs\": 2585, \"Acceleration\": 14.5, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford granada l\", \"Miles_per_Gallon\": 22.0, \"Cylinders\": 6, \"Displacement\": 232.0, \"Horsepower\": 112.0, \"Weight_in_lbs\": 2835, \"Acceleration\": 14.7, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"toyota celica gt\", \"Miles_per_Gallon\": 32.0, \"Cylinders\": 4, \"Displacement\": 144.0, \"Horsepower\": 96.0, \"Weight_in_lbs\": 2665, \"Acceleration\": 13.9, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Japan\"}, {\"Name\": \"dodge charger 2.2\", \"Miles_per_Gallon\": 36.0, \"Cylinders\": 4, \"Displacement\": 135.0, \"Horsepower\": 84.0, \"Weight_in_lbs\": 2370, \"Acceleration\": 13.0, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevrolet camaro\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 151.0, \"Horsepower\": 90.0, \"Weight_in_lbs\": 2950, \"Acceleration\": 17.3, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford mustang gl\", \"Miles_per_Gallon\": 27.0, \"Cylinders\": 4, \"Displacement\": 140.0, \"Horsepower\": 86.0, \"Weight_in_lbs\": 2790, \"Acceleration\": 15.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"vw pickup\", \"Miles_per_Gallon\": 44.0, \"Cylinders\": 4, \"Displacement\": 97.0, \"Horsepower\": 52.0, \"Weight_in_lbs\": 2130, \"Acceleration\": 24.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"Europe\"}, {\"Name\": \"dodge rampage\", \"Miles_per_Gallon\": 32.0, \"Cylinders\": 4, \"Displacement\": 135.0, \"Horsepower\": 84.0, \"Weight_in_lbs\": 2295, \"Acceleration\": 11.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"ford ranger\", \"Miles_per_Gallon\": 28.0, \"Cylinders\": 4, \"Displacement\": 120.0, \"Horsepower\": 79.0, \"Weight_in_lbs\": 2625, \"Acceleration\": 18.6, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}, {\"Name\": \"chevy s-10\", \"Miles_per_Gallon\": 31.0, \"Cylinders\": 4, \"Displacement\": 119.0, \"Horsepower\": 82.0, \"Weight_in_lbs\": 2720, \"Acceleration\": 19.4, \"Year\": \"1982-01-01T00:00:00\", \"Origin\": \"USA\"}]}}, {\"mode\": \"vega-lite\"});\n\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580885762824_-1733991523",
      "id": "paragraph_1580885762824_-1733991523",
      "dateCreated": "2020-02-05 14:56:02.824",
      "dateStarted": "2021-07-26 03:16:21.006",
      "dateFinished": "2021-07-26 03:16:21.231",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nimport altair as alt\nimport numpy as np\nimport pandas as pd\n\n# Compute x^2 + y^2 across a 2D grid\nx, y \u003d np.meshgrid(range(-5, 5), range(-5, 5))\nz \u003d x ** 2 + y ** 2\n\n# Convert this grid to columnar data expected by Altair\nsource \u003d pd.DataFrame({\u0027x\u0027: x.ravel(),\n                     \u0027y\u0027: y.ravel(),\n                     \u0027z\u0027: z.ravel()})\n\nalt.Chart(source).mark_rect().encode(\n    x\u003d\u0027x:O\u0027,\n    y\u003d\u0027y:O\u0027,\n    color\u003d\u0027z:Q\u0027\n)",
      "user": "anonymous",
      "dateUpdated": "2021-07-26 03:16:21.306",
      "progress": 0,
      "config": {
        "colWidth": 6.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "editorMode": "ace/mode/python"
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\n\u003cdiv id\u003d\"altair-viz-65b7a25b172c42faba6cdaa3e44507fb\"\u003e\u003c/div\u003e\n\u003cscript type\u003d\"text/javascript\"\u003e\n  (function(spec, embedOpt){\n    let outputDiv \u003d document.currentScript.previousElementSibling;\n    if (outputDiv.id !\u003d\u003d \"altair-viz-65b7a25b172c42faba6cdaa3e44507fb\") {\n      outputDiv \u003d document.getElementById(\"altair-viz-65b7a25b172c42faba6cdaa3e44507fb\");\n    }\n    const paths \u003d {\n      \"vega\": \"https://cdn.jsdelivr.net/npm//vega@5?noext\",\n      \"vega-lib\": \"https://cdn.jsdelivr.net/npm//vega-lib?noext\",\n      \"vega-lite\": \"https://cdn.jsdelivr.net/npm//vega-lite@4.8.1?noext\",\n      \"vega-embed\": \"https://cdn.jsdelivr.net/npm//vega-embed@6?noext\",\n    };\n\n    function loadScript(lib) {\n      return new Promise(function(resolve, reject) {\n        var s \u003d document.createElement(\u0027script\u0027);\n        s.src \u003d paths[lib];\n        s.async \u003d true;\n        s.onload \u003d () \u003d\u003e resolve(paths[lib]);\n        s.onerror \u003d () \u003d\u003e reject(`Error loading script: ${paths[lib]}`);\n        document.getElementsByTagName(\"head\")[0].appendChild(s);\n      });\n    }\n\n    function showError(err) {\n      outputDiv.innerHTML \u003d `\u003cdiv class\u003d\"error\" style\u003d\"color:red;\"\u003e${err}\u003c/div\u003e`;\n      throw err;\n    }\n\n    function displayChart(vegaEmbed) {\n      vegaEmbed(outputDiv, spec, embedOpt)\n        .catch(err \u003d\u003e showError(`Javascript Error: ${err.message}\u003cbr\u003eThis usually means there\u0027s a typo in your chart specification. See the javascript console for the full traceback.`));\n    }\n\n    if(typeof define \u003d\u003d\u003d \"function\" \u0026\u0026 define.amd) {\n      requirejs.config({paths});\n      require([\"vega-embed\"], displayChart, err \u003d\u003e showError(`Error loading script: ${err.message}`));\n    } else if (typeof vegaEmbed \u003d\u003d\u003d \"function\") {\n      displayChart(vegaEmbed);\n    } else {\n      loadScript(\"vega\")\n        .then(() \u003d\u003e loadScript(\"vega-lite\"))\n        .then(() \u003d\u003e loadScript(\"vega-embed\"))\n        .catch(showError)\n        .then(() \u003d\u003e displayChart(vegaEmbed));\n    }\n  })({\"config\": {\"view\": {\"continuousWidth\": 400, \"continuousHeight\": 300}}, \"data\": {\"name\": \"data-1487c93b91dee61ec4c167e470e512f4\"}, \"mark\": \"rect\", \"encoding\": {\"color\": {\"type\": \"quantitative\", \"field\": \"z\"}, \"x\": {\"type\": \"ordinal\", \"field\": \"x\"}, \"y\": {\"type\": \"ordinal\", \"field\": \"y\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v4.8.1.json\", \"datasets\": {\"data-1487c93b91dee61ec4c167e470e512f4\": [{\"x\": -5, \"y\": -5, \"z\": 50}, {\"x\": -4, \"y\": -5, \"z\": 41}, {\"x\": -3, \"y\": -5, \"z\": 34}, {\"x\": -2, \"y\": -5, \"z\": 29}, {\"x\": -1, \"y\": -5, \"z\": 26}, {\"x\": 0, \"y\": -5, \"z\": 25}, {\"x\": 1, \"y\": -5, \"z\": 26}, {\"x\": 2, \"y\": -5, \"z\": 29}, {\"x\": 3, \"y\": -5, \"z\": 34}, {\"x\": 4, \"y\": -5, \"z\": 41}, {\"x\": -5, \"y\": -4, \"z\": 41}, {\"x\": -4, \"y\": -4, \"z\": 32}, {\"x\": -3, \"y\": -4, \"z\": 25}, {\"x\": -2, \"y\": -4, \"z\": 20}, {\"x\": -1, \"y\": -4, \"z\": 17}, {\"x\": 0, \"y\": -4, \"z\": 16}, {\"x\": 1, \"y\": -4, \"z\": 17}, {\"x\": 2, \"y\": -4, \"z\": 20}, {\"x\": 3, \"y\": -4, \"z\": 25}, {\"x\": 4, \"y\": -4, \"z\": 32}, {\"x\": -5, \"y\": -3, \"z\": 34}, {\"x\": -4, \"y\": -3, \"z\": 25}, {\"x\": -3, \"y\": -3, \"z\": 18}, {\"x\": -2, \"y\": -3, \"z\": 13}, {\"x\": -1, \"y\": -3, \"z\": 10}, {\"x\": 0, \"y\": -3, \"z\": 9}, {\"x\": 1, \"y\": -3, \"z\": 10}, {\"x\": 2, \"y\": -3, \"z\": 13}, {\"x\": 3, \"y\": -3, \"z\": 18}, {\"x\": 4, \"y\": -3, \"z\": 25}, {\"x\": -5, \"y\": -2, \"z\": 29}, {\"x\": -4, \"y\": -2, \"z\": 20}, {\"x\": -3, \"y\": -2, \"z\": 13}, {\"x\": -2, \"y\": -2, \"z\": 8}, {\"x\": -1, \"y\": -2, \"z\": 5}, {\"x\": 0, \"y\": -2, \"z\": 4}, {\"x\": 1, \"y\": -2, \"z\": 5}, {\"x\": 2, \"y\": -2, \"z\": 8}, {\"x\": 3, \"y\": -2, \"z\": 13}, {\"x\": 4, \"y\": -2, \"z\": 20}, {\"x\": -5, \"y\": -1, \"z\": 26}, {\"x\": -4, \"y\": -1, \"z\": 17}, {\"x\": -3, \"y\": -1, \"z\": 10}, {\"x\": -2, \"y\": -1, \"z\": 5}, {\"x\": -1, \"y\": -1, \"z\": 2}, {\"x\": 0, \"y\": -1, \"z\": 1}, {\"x\": 1, \"y\": -1, \"z\": 2}, {\"x\": 2, \"y\": -1, \"z\": 5}, {\"x\": 3, \"y\": -1, \"z\": 10}, {\"x\": 4, \"y\": -1, \"z\": 17}, {\"x\": -5, \"y\": 0, \"z\": 25}, {\"x\": -4, \"y\": 0, \"z\": 16}, {\"x\": -3, \"y\": 0, \"z\": 9}, {\"x\": -2, \"y\": 0, \"z\": 4}, {\"x\": -1, \"y\": 0, \"z\": 1}, {\"x\": 0, \"y\": 0, \"z\": 0}, {\"x\": 1, \"y\": 0, \"z\": 1}, {\"x\": 2, \"y\": 0, \"z\": 4}, {\"x\": 3, \"y\": 0, \"z\": 9}, {\"x\": 4, \"y\": 0, \"z\": 16}, {\"x\": -5, \"y\": 1, \"z\": 26}, {\"x\": -4, \"y\": 1, \"z\": 17}, {\"x\": -3, \"y\": 1, \"z\": 10}, {\"x\": -2, \"y\": 1, \"z\": 5}, {\"x\": -1, \"y\": 1, \"z\": 2}, {\"x\": 0, \"y\": 1, \"z\": 1}, {\"x\": 1, \"y\": 1, \"z\": 2}, {\"x\": 2, \"y\": 1, \"z\": 5}, {\"x\": 3, \"y\": 1, \"z\": 10}, {\"x\": 4, \"y\": 1, \"z\": 17}, {\"x\": -5, \"y\": 2, \"z\": 29}, {\"x\": -4, \"y\": 2, \"z\": 20}, {\"x\": -3, \"y\": 2, \"z\": 13}, {\"x\": -2, \"y\": 2, \"z\": 8}, {\"x\": -1, \"y\": 2, \"z\": 5}, {\"x\": 0, \"y\": 2, \"z\": 4}, {\"x\": 1, \"y\": 2, \"z\": 5}, {\"x\": 2, \"y\": 2, \"z\": 8}, {\"x\": 3, \"y\": 2, \"z\": 13}, {\"x\": 4, \"y\": 2, \"z\": 20}, {\"x\": -5, \"y\": 3, \"z\": 34}, {\"x\": -4, \"y\": 3, \"z\": 25}, {\"x\": -3, \"y\": 3, \"z\": 18}, {\"x\": -2, \"y\": 3, \"z\": 13}, {\"x\": -1, \"y\": 3, \"z\": 10}, {\"x\": 0, \"y\": 3, \"z\": 9}, {\"x\": 1, \"y\": 3, \"z\": 10}, {\"x\": 2, \"y\": 3, \"z\": 13}, {\"x\": 3, \"y\": 3, \"z\": 18}, {\"x\": 4, \"y\": 3, \"z\": 25}, {\"x\": -5, \"y\": 4, \"z\": 41}, {\"x\": -4, \"y\": 4, \"z\": 32}, {\"x\": -3, \"y\": 4, \"z\": 25}, {\"x\": -2, \"y\": 4, \"z\": 20}, {\"x\": -1, \"y\": 4, \"z\": 17}, {\"x\": 0, \"y\": 4, \"z\": 16}, {\"x\": 1, \"y\": 4, \"z\": 17}, {\"x\": 2, \"y\": 4, \"z\": 20}, {\"x\": 3, \"y\": 4, \"z\": 25}, {\"x\": 4, \"y\": 4, \"z\": 32}]}}, {\"mode\": \"vega-lite\"});\n\u003c/script\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580886216808_1963511607",
      "id": "paragraph_1580886216808_1963511607",
      "dateCreated": "2020-02-05 15:03:36.808",
      "dateStarted": "2021-07-26 03:16:21.326",
      "dateFinished": "2021-07-26 03:16:21.384",
      "status": "FINISHED"
    },
    {
      "title": "Plotly",
      "text": "%md\n\n[plotly.py](https://plotly.com/python/) is an interactive, open-source, and browser-based graphing library for Python\n",
      "user": "anonymous",
      "dateUpdated": "2021-08-01 05:31:06.316",
      "progress": 0,
      "config": {
        "colWidth": 12.0,
        "fontSize": 9.0,
        "enabled": true,
        "results": {},
        "editorSetting": {
          "language": "markdown",
          "editOnDblClick": true,
          "completionKey": "TAB",
          "completionSupport": false
        },
        "editorMode": "ace/mode/markdown",
        "title": true,
        "editorHide": true,
        "tableHide": false
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003cdiv class\u003d\"markdown-body\"\u003e\n\u003cp\u003e\u003ca href\u003d\"https://plotly.com/python/\"\u003eplotly.py\u003c/a\u003e is an interactive, open-source, and browser-based graphing library for Python\u003c/p\u003e\n\n\u003c/div\u003e"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1580886440097_1853064047",
      "id": "paragraph_1580886440097_1853064047",
      "dateCreated": "2020-02-05 15:07:20.097",
      "dateStarted": "2021-08-01 05:31:06.314",
      "dateFinished": "2021-08-01 05:31:06.341",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n\nimport plotly.graph_objects as go\nfig \u003d go.Figure()\nfig.add_trace(go.Scatter(y\u003d[2, 1, 4, 3]))\nfig.add_trace(go.Bar(y\u003d[1, 4, 3, 2]))\nfig.update_layout(title \u003d \u0027Hello Figure\u0027)\n\nprint(\"%html {0}\".format(fig.to_html()))\n",
      "user": "anonymous",
      "dateUpdated": "2021-08-01 05:31:26.498",
      "progress": 0,
      "config": {
        "editorSetting": {
          "language": "python",
          "editOnDblClick": false,
          "completionKey": "TAB",
          "completionSupport": true
        },
        "colWidth": 12.0,
        "editorMode": "ace/mode/python",
        "fontSize": 9.0,
        "results": {},
        "enabled": true
      },
      "settings": {
        "params": {},
        "forms": {}
      },
      "results": {
        "code": "SUCCESS",
        "msg": [
          {
            "type": "HTML",
            "data": "\u003chtml\u003e\n\u003chead\u003e\u003cmeta charset\u003d\"utf-8\" /\u003e\u003c/head\u003e\n\u003cbody\u003e\n    \u003cdiv\u003e                        \u003cscript type\u003d\"text/javascript\"\u003ewindow.PlotlyConfig \u003d {MathJaxConfig: \u0027local\u0027};\u003c/script\u003e\n        \u003cscript type\u003d\"text/javascript\"\u003e/**\n* plotly.js v2.2.0\n* Copyright 2012-2021, Plotly, Inc.\n* All rights reserved.\n* Licensed under the MIT license\n*/\n!function(t){if(\"object\"\u003d\u003dtypeof exports\u0026\u0026\"undefined\"!\u003dtypeof module)module.exports\u003dt();else if(\"function\"\u003d\u003dtypeof define\u0026\u0026define.amd)define([],t);else{(\"undefined\"!\u003dtypeof window?window:\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:this).Plotly\u003dt()}}((function(){return function t(e,r,n){function i(o,s){if(!r[o]){if(!e[o]){var l\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require;if(!s\u0026\u0026l)return l(o,!0);if(a)return a(o,!0);var c\u003dnew Error(\"Cannot find module \u0027\"+o+\"\u0027\");throw c.code\u003d\"MODULE_NOT_FOUND\",c}var u\u003dr[o]\u003d{exports:{}};e[o][0].call(u.exports,(function(t){return i(e[o][1][t]||t)}),u,u.exports,t,e,r,n)}return r[o].exports}for(var a\u003d\"function\"\u003d\u003dtypeof require\u0026\u0026require,o\u003d0;o\u003cn.length;o++)i(n[o]);return i}({1:[function(t,e,r){\"use strict\";var n\u003dt(\"../src/lib\"),i\u003d{\"X,X div\":\u0027direction:ltr;font-family:\"Open Sans\",verdana,arial,sans-serif;margin:0;padding:0;\u0027,\"X input,X button\":\u0027font-family:\"Open Sans\",verdana,arial,sans-serif;\u0027,\"X input:focus,X button:focus\":\"outline:none;\",\"X a\":\"text-decoration:none;\",\"X a:hover\":\"text-decoration:none;\",\"X .crisp\":\"shape-rendering:crispEdges;\",\"X .user-select-none\":\"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;\",\"X svg\":\"overflow:hidden;\",\"X svg a\":\"fill:#447adb;\",\"X svg a:hover\":\"fill:#3c6dc5;\",\"X .main-svg\":\"position:absolute;top:0;left:0;pointer-events:none;\",\"X .main-svg .draglayer\":\"pointer-events:all;\",\"X .cursor-default\":\"cursor:default;\",\"X .cursor-pointer\":\"cursor:pointer;\",\"X .cursor-crosshair\":\"cursor:crosshair;\",\"X .cursor-move\":\"cursor:move;\",\"X .cursor-col-resize\":\"cursor:col-resize;\",\"X .cursor-row-resize\":\"cursor:row-resize;\",\"X .cursor-ns-resize\":\"cursor:ns-resize;\",\"X .cursor-ew-resize\":\"cursor:ew-resize;\",\"X .cursor-sw-resize\":\"cursor:sw-resize;\",\"X .cursor-s-resize\":\"cursor:s-resize;\",\"X .cursor-se-resize\":\"cursor:se-resize;\",\"X .cursor-w-resize\":\"cursor:w-resize;\",\"X .cursor-e-resize\":\"cursor:e-resize;\",\"X .cursor-nw-resize\":\"cursor:nw-resize;\",\"X .cursor-n-resize\":\"cursor:n-resize;\",\"X .cursor-ne-resize\":\"cursor:ne-resize;\",\"X .cursor-grab\":\"cursor:-webkit-grab;cursor:grab;\",\"X .modebar\":\"position:absolute;top:2px;right:2px;\",\"X .ease-bg\":\"-webkit-transition:background-color .3s ease 0s;-moz-transition:background-color .3s ease 0s;-ms-transition:background-color .3s ease 0s;-o-transition:background-color .3s ease 0s;transition:background-color .3s ease 0s;\",\"X .modebar--hover\u003e:not(.watermark)\":\"opacity:0;-webkit-transition:opacity .3s ease 0s;-moz-transition:opacity .3s ease 0s;-ms-transition:opacity .3s ease 0s;-o-transition:opacity .3s ease 0s;transition:opacity .3s ease 0s;\",\"X:hover .modebar--hover .modebar-group\":\"opacity:1;\",\"X .modebar-group\":\"float:left;display:inline-block;box-sizing:border-box;padding-left:8px;position:relative;vertical-align:middle;white-space:nowrap;\",\"X .modebar-btn\":\"position:relative;font-size:16px;padding:3px 4px;height:22px;cursor:pointer;line-height:normal;box-sizing:border-box;\",\"X .modebar-btn svg\":\"position:relative;top:2px;\",\"X .modebar.vertical\":\"display:flex;flex-direction:column;flex-wrap:wrap;align-content:flex-end;max-height:100%;\",\"X .modebar.vertical svg\":\"top:-1px;\",\"X .modebar.vertical .modebar-group\":\"display:block;float:none;padding-left:0px;padding-bottom:8px;\",\"X .modebar.vertical .modebar-group .modebar-btn\":\"display:block;text-align:center;\",\"X [data-title]:before,X [data-title]:after\":\"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;\",\"X [data-title]:hover:before,X [data-title]:hover:after\":\"display:block;opacity:1;\",\"X [data-title]:before\":\u0027content:\"\";position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;\u0027,\"X [data-title]:after\":\"content:attr(data-title);background:#69738a;color:#fff;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;\",\"X .vertical [data-title]:before,X .vertical [data-title]:after\":\"top:0%;right:200%;\",\"X .vertical [data-title]:before\":\"border:6px solid transparent;border-left-color:#69738a;margin-top:8px;margin-right:-30px;\",\"X .select-outline\":\"fill:none;stroke-width:1;shape-rendering:crispEdges;\",\"X .select-outline-1\":\"stroke:#fff;\",\"X .select-outline-2\":\"stroke:#000;stroke-dasharray:2px 2px;\",Y:\u0027font-family:\"Open Sans\",verdana,arial,sans-serif;position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;\u0027,\"Y p\":\"margin:0;\",\"Y .notifier-note\":\"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,.9);color:#fff;padding:10px;overflow-wrap:break-word;word-wrap:break-word;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;\",\"Y .notifier-close\":\"color:#fff;opacity:.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;\",\"Y .notifier-close:hover\":\"color:#444;text-decoration:none;cursor:pointer;\"};for(var a in i){var o\u003da.replace(/^,/,\" ,\").replace(/X/g,\".js-plotly-plot .plotly\").replace(/Y/g,\".plotly-notifier\");n.addStyleRule(o,i[a])}},{\"../src/lib\":799}],2:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/transforms/aggregate\")},{\"../src/transforms/aggregate\":1395}],3:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/bar\")},{\"../src/traces/bar\":945}],4:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/barpolar\")},{\"../src/traces/barpolar\":958}],5:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/box\")},{\"../src/traces/box\":968}],6:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/components/calendars\")},{\"../src/components/calendars\":660}],7:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/candlestick\")},{\"../src/traces/candlestick\":977}],8:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/carpet\")},{\"../src/traces/carpet\":996}],9:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/choropleth\")},{\"../src/traces/choropleth\":1010}],10:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/choroplethmapbox\")},{\"../src/traces/choroplethmapbox\":1017}],11:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/cone\")},{\"../src/traces/cone\":1023}],12:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/contour\")},{\"../src/traces/contour\":1038}],13:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/contourcarpet\")},{\"../src/traces/contourcarpet\":1049}],14:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/core\")},{\"../src/core\":777}],15:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/densitymapbox\")},{\"../src/traces/densitymapbox\":1057}],16:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/transforms/filter\")},{\"../src/transforms/filter\":1396}],17:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/funnel\")},{\"../src/traces/funnel\":1067}],18:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/funnelarea\")},{\"../src/traces/funnelarea\":1076}],19:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/transforms/groupby\")},{\"../src/transforms/groupby\":1397}],20:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/heatmap\")},{\"../src/traces/heatmap\":1089}],21:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/heatmapgl\")},{\"../src/traces/heatmapgl\":1099}],22:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/histogram\")},{\"../src/traces/histogram\":1111}],23:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/histogram2d\")},{\"../src/traces/histogram2d\":1117}],24:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/histogram2dcontour\")},{\"../src/traces/histogram2dcontour\":1121}],25:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/icicle\")},{\"../src/traces/icicle\":1127}],26:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/image\")},{\"../src/traces/image\":1140}],27:[function(t,e,r){\"use strict\";var n\u003dt(\"./core\");n.register([t(\"./bar\"),t(\"./box\"),t(\"./heatmap\"),t(\"./histogram\"),t(\"./histogram2d\"),t(\"./histogram2dcontour\"),t(\"./contour\"),t(\"./scatterternary\"),t(\"./violin\"),t(\"./funnel\"),t(\"./waterfall\"),t(\"./image\"),t(\"./pie\"),t(\"./sunburst\"),t(\"./treemap\"),t(\"./icicle\"),t(\"./funnelarea\"),t(\"./scatter3d\"),t(\"./surface\"),t(\"./isosurface\"),t(\"./volume\"),t(\"./mesh3d\"),t(\"./cone\"),t(\"./streamtube\"),t(\"./scattergeo\"),t(\"./choropleth\"),t(\"./scattergl\"),t(\"./splom\"),t(\"./pointcloud\"),t(\"./heatmapgl\"),t(\"./parcoords\"),t(\"./parcats\"),t(\"./scattermapbox\"),t(\"./choroplethmapbox\"),t(\"./densitymapbox\"),t(\"./sankey\"),t(\"./indicator\"),t(\"./table\"),t(\"./carpet\"),t(\"./scattercarpet\"),t(\"./contourcarpet\"),t(\"./ohlc\"),t(\"./candlestick\"),t(\"./scatterpolar\"),t(\"./scatterpolargl\"),t(\"./barpolar\"),t(\"./aggregate\"),t(\"./filter\"),t(\"./groupby\"),t(\"./sort\"),t(\"./calendars\")]),e.exports\u003dn},{\"./aggregate\":2,\"./bar\":3,\"./barpolar\":4,\"./box\":5,\"./calendars\":6,\"./candlestick\":7,\"./carpet\":8,\"./choropleth\":9,\"./choroplethmapbox\":10,\"./cone\":11,\"./contour\":12,\"./contourcarpet\":13,\"./core\":14,\"./densitymapbox\":15,\"./filter\":16,\"./funnel\":17,\"./funnelarea\":18,\"./groupby\":19,\"./heatmap\":20,\"./heatmapgl\":21,\"./histogram\":22,\"./histogram2d\":23,\"./histogram2dcontour\":24,\"./icicle\":25,\"./image\":26,\"./indicator\":28,\"./isosurface\":29,\"./mesh3d\":30,\"./ohlc\":31,\"./parcats\":32,\"./parcoords\":33,\"./pie\":34,\"./pointcloud\":35,\"./sankey\":36,\"./scatter3d\":37,\"./scattercarpet\":38,\"./scattergeo\":39,\"./scattergl\":40,\"./scattermapbox\":41,\"./scatterpolar\":42,\"./scatterpolargl\":43,\"./scatterternary\":44,\"./sort\":45,\"./splom\":46,\"./streamtube\":47,\"./sunburst\":48,\"./surface\":49,\"./table\":50,\"./treemap\":51,\"./violin\":52,\"./volume\":53,\"./waterfall\":54}],28:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/indicator\")},{\"../src/traces/indicator\":1148}],29:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/isosurface\")},{\"../src/traces/isosurface\":1154}],30:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/mesh3d\")},{\"../src/traces/mesh3d\":1159}],31:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/ohlc\")},{\"../src/traces/ohlc\":1164}],32:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/parcats\")},{\"../src/traces/parcats\":1173}],33:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/parcoords\")},{\"../src/traces/parcoords\":1183}],34:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/pie\")},{\"../src/traces/pie\":1194}],35:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/pointcloud\")},{\"../src/traces/pointcloud\":1203}],36:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/sankey\")},{\"../src/traces/sankey\":1209}],37:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scatter3d\")},{\"../src/traces/scatter3d\":1247}],38:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scattercarpet\")},{\"../src/traces/scattercarpet\":1254}],39:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scattergeo\")},{\"../src/traces/scattergeo\":1262}],40:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scattergl\")},{\"../src/traces/scattergl\":1275}],41:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scattermapbox\")},{\"../src/traces/scattermapbox\":1285}],42:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scatterpolar\")},{\"../src/traces/scatterpolar\":1293}],43:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scatterpolargl\")},{\"../src/traces/scatterpolargl\":1300}],44:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/scatterternary\")},{\"../src/traces/scatterternary\":1308}],45:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/transforms/sort\")},{\"../src/transforms/sort\":1399}],46:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/splom\")},{\"../src/traces/splom\":1317}],47:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/streamtube\")},{\"../src/traces/streamtube\":1325}],48:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/sunburst\")},{\"../src/traces/sunburst\":1333}],49:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/surface\")},{\"../src/traces/surface\":1342}],50:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/table\")},{\"../src/traces/table\":1350}],51:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/treemap\")},{\"../src/traces/treemap\":1361}],52:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/violin\")},{\"../src/traces/violin\":1374}],53:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/volume\")},{\"../src/traces/volume\":1382}],54:[function(t,e,r){\"use strict\";e.exports\u003dt(\"../src/traces/waterfall\")},{\"../src/traces/waterfall\":1390}],55:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003d(t\u003dt||{}).eye||[0,0,1],r\u003dt.center||[0,0,0],s\u003dt.up||[0,1,0],l\u003dt.distanceLimits||[0,1/0],c\u003dt.mode||\"turntable\",u\u003dn(),f\u003di(),h\u003da();return u.setDistanceLimits(l[0],l[1]),u.lookAt(0,e,r,s),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,s),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,s),new o({turntable:u,orbit:f,matrix:h},c)};var n\u003dt(\"turntable-camera-controller\"),i\u003dt(\"orbit-camera-controller\"),a\u003dt(\"matrix-camera-controller\");function o(t,e){this._controllerNames\u003dObject.keys(t),this._controllerList\u003dthis._controllerNames.map((function(e){return t[e]})),this._mode\u003de,this._active\u003dt[e],this._active||(this._mode\u003d\"turntable\",this._active\u003dt.turntable),this.modes\u003dthis._controllerNames,this.computedMatrix\u003dthis._active.computedMatrix,this.computedEye\u003dthis._active.computedEye,this.computedUp\u003dthis._active.computedUp,this.computedCenter\u003dthis._active.computedCenter,this.computedRadius\u003dthis._active.computedRadius}var s\u003do.prototype;[[\"flush\",1],[\"idle\",1],[\"lookAt\",4],[\"rotate\",4],[\"pan\",4],[\"translate\",4],[\"setMatrix\",2],[\"setDistanceLimits\",2],[\"setDistance\",2]].forEach((function(t){for(var e\u003dt[0],r\u003d[],n\u003d0;n\u003ct[1];++n)r.push(\"a\"+n);var i\u003d\"var cc\u003dthis._controllerList;for(var i\u003d0;i\u003ccc.length;++i){cc[i].\"+t[0]+\"(\"+r.join()+\")}\";s[e]\u003dFunction.apply(null,r.concat(i))})),s.recalcMatrix\u003dfunction(t){this._active.recalcMatrix(t)},s.getDistance\u003dfunction(t){return this._active.getDistance(t)},s.getDistanceLimits\u003dfunction(t){return this._active.getDistanceLimits(t)},s.lastT\u003dfunction(){return this._active.lastT()},s.setMode\u003dfunction(t){if(t!\u003d\u003dthis._mode){var e\u003dthis._controllerNames.indexOf(t);if(!(e\u003c0)){var r\u003dthis._active,n\u003dthis._controllerList[e],i\u003dMath.max(r.lastT(),n.lastT());r.recalcMatrix(i),n.setMatrix(i,r.computedMatrix),this._active\u003dn,this._mode\u003dt,this.computedMatrix\u003dthis._active.computedMatrix,this.computedEye\u003dthis._active.computedEye,this.computedUp\u003dthis._active.computedUp,this.computedCenter\u003dthis._active.computedCenter,this.computedRadius\u003dthis._active.computedRadius}}},s.getMode\u003dfunction(){return this._mode}},{\"matrix-camera-controller\":464,\"orbit-camera-controller\":485,\"turntable-camera-controller\":599}],56:[function(t,e,r){!function(n,i){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?i(r,t(\"d3-array\"),t(\"d3-collection\"),t(\"d3-shape\"),t(\"elementary-circuits-directed-graph\")):i(n.d3\u003dn.d3||{},n.d3,n.d3,n.d3,null)}(this,(function(t,e,r,n,i){\"use strict\";function a(t){return t.target.depth}function o(t,e){return t.sourceLinks.length?t.depth:e-1}function s(t){return function(){return t}}i\u003di\u0026\u0026i.hasOwnProperty(\"default\")?i.default:i;var l\u003d\"function\"\u003d\u003dtypeof Symbol\u0026\u0026\"symbol\"\u003d\u003dtypeof Symbol.iterator?function(t){return typeof t}:function(t){return t\u0026\u0026\"function\"\u003d\u003dtypeof Symbol\u0026\u0026t.constructor\u003d\u003d\u003dSymbol\u0026\u0026t!\u003d\u003dSymbol.prototype?\"symbol\":typeof t};function c(t,e){return f(t.source,e.source)||t.index-e.index}function u(t,e){return f(t.target,e.target)||t.index-e.index}function f(t,e){return t.partOfCycle\u003d\u003d\u003de.partOfCycle?t.y0-e.y0:\"top\"\u003d\u003d\u003dt.circularLinkType||\"bottom\"\u003d\u003d\u003de.circularLinkType?-1:1}function h(t){return t.value}function p(t){return(t.y0+t.y1)/2}function d(t){return p(t.source)}function m(t){return p(t.target)}function g(t){return t.index}function v(t){return t.nodes}function y(t){return t.links}function x(t,e){var r\u003dt.get(e);if(!r)throw new Error(\"missing: \"+e);return r}function b(t,e){return e(t)}function _(t,e,r){var n\u003d0;if(null\u003d\u003d\u003dr){for(var a\u003d[],o\u003d0;o\u003ct.links.length;o++){var s\u003dt.links[o],l\u003ds.source.index,c\u003ds.target.index;a[l]||(a[l]\u003d[]),a[c]||(a[c]\u003d[]),-1\u003d\u003d\u003da[l].indexOf(c)\u0026\u0026a[l].push(c)}var u\u003di(a);u.sort((function(t,e){return t.length-e.length}));var f\u003d{};for(o\u003d0;o\u003cu.length;o++){var h\u003du[o].slice(-2);f[h[0]]||(f[h[0]]\u003d{}),f[h[0]][h[1]]\u003d!0}t.links.forEach((function(t){var e\u003dt.target.index,r\u003dt.source.index;e\u003d\u003d\u003dr||f[r]\u0026\u0026f[r][e]?(t.circular\u003d!0,t.circularLinkID\u003dn,n+\u003d1):t.circular\u003d!1}))}else t.links.forEach((function(t){t.source[r]\u003ct.target[r]?t.circular\u003d!1:(t.circular\u003d!0,t.circularLinkID\u003dn,n+\u003d1)}))}function w(t,e){var r\u003d0,n\u003d0;t.links.forEach((function(i){i.circular\u0026\u0026(i.source.circularLinkType||i.target.circularLinkType?i.circularLinkType\u003di.source.circularLinkType?i.source.circularLinkType:i.target.circularLinkType:i.circularLinkType\u003dr\u003cn?\"top\":\"bottom\",\"top\"\u003d\u003di.circularLinkType?r+\u003d1:n+\u003d1,t.nodes.forEach((function(t){b(t,e)!\u003db(i.source,e)\u0026\u0026b(t,e)!\u003db(i.target,e)||(t.circularLinkType\u003di.circularLinkType)})))})),t.links.forEach((function(t){t.circular\u0026\u0026(t.source.circularLinkType\u003d\u003dt.target.circularLinkType\u0026\u0026(t.circularLinkType\u003dt.source.circularLinkType),H(t,e)\u0026\u0026(t.circularLinkType\u003dt.source.circularLinkType))}))}function T(t){var e\u003dMath.abs(t.y1-t.y0),r\u003dMath.abs(t.target.x0-t.source.x1);return Math.atan(r/e)}function k(t,e){var r\u003d0;t.sourceLinks.forEach((function(t){r\u003dt.circular\u0026\u0026!H(t,e)?r+1:r}));var n\u003d0;return t.targetLinks.forEach((function(t){n\u003dt.circular\u0026\u0026!H(t,e)?n+1:n})),r+n}function M(t){var e\u003dt.source.sourceLinks,r\u003d0;e.forEach((function(t){r\u003dt.circular?r+1:r}));var n\u003dt.target.targetLinks,i\u003d0;return n.forEach((function(t){i\u003dt.circular?i+1:i})),!(r\u003e1||i\u003e1)}function A(t,e,r){return t.sort(E),t.forEach((function(n,i){var a,o,s\u003d0;if(H(n,r)\u0026\u0026M(n))n.circularPathData.verticalBuffer\u003ds+n.width/2;else{for(var l\u003d0;l\u003ci;l++)if(a\u003dt[i],o\u003dt[l],!(a.source.column\u003co.target.column||a.target.column\u003eo.source.column)){var c\u003dt[l].circularPathData.verticalBuffer+t[l].width/2+e;s\u003dc\u003es?c:s}n.circularPathData.verticalBuffer\u003ds+n.width/2}})),t}function S(t,r,i,a){var o\u003de.min(t.links,(function(t){return t.source.y0}));t.links.forEach((function(t){t.circular\u0026\u0026(t.circularPathData\u003d{})})),A(t.links.filter((function(t){return\"top\"\u003d\u003dt.circularLinkType})),r,a),A(t.links.filter((function(t){return\"bottom\"\u003d\u003dt.circularLinkType})),r,a),t.links.forEach((function(e){if(e.circular){if(e.circularPathData.arcRadius\u003de.width+10,e.circularPathData.leftNodeBuffer\u003d5,e.circularPathData.rightNodeBuffer\u003d5,e.circularPathData.sourceWidth\u003de.source.x1-e.source.x0,e.circularPathData.sourceX\u003de.source.x0+e.circularPathData.sourceWidth,e.circularPathData.targetX\u003de.target.x0,e.circularPathData.sourceY\u003de.y0,e.circularPathData.targetY\u003de.y1,H(e,a)\u0026\u0026M(e))e.circularPathData.leftSmallArcRadius\u003d10+e.width/2,e.circularPathData.leftLargeArcRadius\u003d10+e.width/2,e.circularPathData.rightSmallArcRadius\u003d10+e.width/2,e.circularPathData.rightLargeArcRadius\u003d10+e.width/2,\"bottom\"\u003d\u003de.circularLinkType?(e.circularPathData.verticalFullExtent\u003de.source.y1+25+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent\u003de.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent\u003de.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent\u003de.source.y0-25-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent\u003de.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent\u003de.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius);else{var s\u003de.source.column,l\u003de.circularLinkType,c\u003dt.links.filter((function(t){return t.source.column\u003d\u003ds\u0026\u0026t.circularLinkType\u003d\u003dl}));\"bottom\"\u003d\u003de.circularLinkType?c.sort(C):c.sort(L);var u\u003d0;c.forEach((function(t,n){t.circularLinkID\u003d\u003de.circularLinkID\u0026\u0026(e.circularPathData.leftSmallArcRadius\u003d10+e.width/2+u,e.circularPathData.leftLargeArcRadius\u003d10+e.width/2+n*r+u),u+\u003dt.width})),s\u003de.target.column,c\u003dt.links.filter((function(t){return t.target.column\u003d\u003ds\u0026\u0026t.circularLinkType\u003d\u003dl})),\"bottom\"\u003d\u003de.circularLinkType?c.sort(I):c.sort(P),u\u003d0,c.forEach((function(t,n){t.circularLinkID\u003d\u003de.circularLinkID\u0026\u0026(e.circularPathData.rightSmallArcRadius\u003d10+e.width/2+u,e.circularPathData.rightLargeArcRadius\u003d10+e.width/2+n*r+u),u+\u003dt.width})),\"bottom\"\u003d\u003de.circularLinkType?(e.circularPathData.verticalFullExtent\u003dMath.max(i,e.source.y1,e.target.y1)+25+e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent\u003de.circularPathData.verticalFullExtent-e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent\u003de.circularPathData.verticalFullExtent-e.circularPathData.rightLargeArcRadius):(e.circularPathData.verticalFullExtent\u003do-25-e.circularPathData.verticalBuffer,e.circularPathData.verticalLeftInnerExtent\u003de.circularPathData.verticalFullExtent+e.circularPathData.leftLargeArcRadius,e.circularPathData.verticalRightInnerExtent\u003de.circularPathData.verticalFullExtent+e.circularPathData.rightLargeArcRadius)}e.circularPathData.leftInnerExtent\u003de.circularPathData.sourceX+e.circularPathData.leftNodeBuffer,e.circularPathData.rightInnerExtent\u003de.circularPathData.targetX-e.circularPathData.rightNodeBuffer,e.circularPathData.leftFullExtent\u003de.circularPathData.sourceX+e.circularPathData.leftLargeArcRadius+e.circularPathData.leftNodeBuffer,e.circularPathData.rightFullExtent\u003de.circularPathData.targetX-e.circularPathData.rightLargeArcRadius-e.circularPathData.rightNodeBuffer}if(e.circular)e.path\u003dfunction(t){var e\u003d\"\";e\u003d\"top\"\u003d\u003dt.circularLinkType?\"M\"+t.circularPathData.sourceX+\" \"+t.circularPathData.sourceY+\" L\"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.sourceY+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftSmallArcRadius+\" 0 0 0 \"+t.circularPathData.leftFullExtent+\" \"+(t.circularPathData.sourceY-t.circularPathData.leftSmallArcRadius)+\" L\"+t.circularPathData.leftFullExtent+\" \"+t.circularPathData.verticalLeftInnerExtent+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftLargeArcRadius+\" 0 0 0 \"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" L\"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightLargeArcRadius+\" 0 0 0 \"+t.circularPathData.rightFullExtent+\" \"+t.circularPathData.verticalRightInnerExtent+\" L\"+t.circularPathData.rightFullExtent+\" \"+(t.circularPathData.targetY-t.circularPathData.rightSmallArcRadius)+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightSmallArcRadius+\" 0 0 0 \"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.targetY+\" L\"+t.circularPathData.targetX+\" \"+t.circularPathData.targetY:\"M\"+t.circularPathData.sourceX+\" \"+t.circularPathData.sourceY+\" L\"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.sourceY+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftSmallArcRadius+\" 0 0 1 \"+t.circularPathData.leftFullExtent+\" \"+(t.circularPathData.sourceY+t.circularPathData.leftSmallArcRadius)+\" L\"+t.circularPathData.leftFullExtent+\" \"+t.circularPathData.verticalLeftInnerExtent+\" A\"+t.circularPathData.leftLargeArcRadius+\" \"+t.circularPathData.leftLargeArcRadius+\" 0 0 1 \"+t.circularPathData.leftInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" L\"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.verticalFullExtent+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightLargeArcRadius+\" 0 0 1 \"+t.circularPathData.rightFullExtent+\" \"+t.circularPathData.verticalRightInnerExtent+\" L\"+t.circularPathData.rightFullExtent+\" \"+(t.circularPathData.targetY+t.circularPathData.rightSmallArcRadius)+\" A\"+t.circularPathData.rightLargeArcRadius+\" \"+t.circularPathData.rightSmallArcRadius+\" 0 0 1 \"+t.circularPathData.rightInnerExtent+\" \"+t.circularPathData.targetY+\" L\"+t.circularPathData.targetX+\" \"+t.circularPathData.targetY;return e}(e);else{var f\u003dn.linkHorizontal().source((function(t){return[t.source.x0+(t.source.x1-t.source.x0),t.y0]})).target((function(t){return[t.target.x0,t.y1]}));e.path\u003df(e)}}))}function E(t,e){return O(t)\u003d\u003dO(e)?\"bottom\"\u003d\u003dt.circularLinkType?C(t,e):L(t,e):O(e)-O(t)}function L(t,e){return t.y0-e.y0}function C(t,e){return e.y0-t.y0}function P(t,e){return t.y1-e.y1}function I(t,e){return e.y1-t.y1}function O(t){return t.target.column-t.source.column}function z(t){return t.target.x0-t.source.x1}function D(t,e){var r\u003dT(t),n\u003dz(e)/Math.tan(r);return\"up\"\u003d\u003dq(t)?t.y1+n:t.y1-n}function R(t,e){var r\u003dT(t),n\u003dz(e)/Math.tan(r);return\"up\"\u003d\u003dq(t)?t.y1-n:t.y1+n}function F(t,e,r,n){t.links.forEach((function(i){if(!i.circular\u0026\u0026i.target.column-i.source.column\u003e1){var a\u003di.source.column+1,o\u003di.target.column-1,s\u003d1,l\u003do-a+1;for(s\u003d1;a\u003c\u003do;a++,s++)t.nodes.forEach((function(o){if(o.column\u003d\u003da){var c,u\u003ds/(l+1),f\u003dMath.pow(1-u,3),h\u003d3*u*Math.pow(1-u,2),p\u003d3*Math.pow(u,2)*(1-u),d\u003dMath.pow(u,3),m\u003df*i.y0+h*i.y0+p*i.y1+d*i.y1,g\u003dm-i.width/2,v\u003dm+i.width/2;g\u003eo.y0\u0026\u0026g\u003co.y1?(c\u003do.y1-g+10,c\u003d\"bottom\"\u003d\u003do.circularLinkType?c:-c,o\u003dN(o,c,e,r),t.nodes.forEach((function(t){b(t,n)!\u003db(o,n)\u0026\u0026t.column\u003d\u003do.column\u0026\u0026B(o,t)\u0026\u0026N(t,c,e,r)}))):(v\u003eo.y0\u0026\u0026v\u003co.y1||g\u003co.y0\u0026\u0026v\u003eo.y1)\u0026\u0026(c\u003dv-o.y0+10,o\u003dN(o,c,e,r),t.nodes.forEach((function(t){b(t,n)!\u003db(o,n)\u0026\u0026t.column\u003d\u003do.column\u0026\u0026t.y0\u003co.y1\u0026\u0026t.y1\u003eo.y1\u0026\u0026N(t,c,e,r)})))}}))}}))}function B(t,e){return t.y0\u003ee.y0\u0026\u0026t.y0\u003ce.y1||(t.y1\u003ee.y0\u0026\u0026t.y1\u003ce.y1||t.y0\u003ce.y0\u0026\u0026t.y1\u003ee.y1)}function N(t,e,r,n){return t.y0+e\u003e\u003dr\u0026\u0026t.y1+e\u003c\u003dn\u0026\u0026(t.y0\u003dt.y0+e,t.y1\u003dt.y1+e,t.targetLinks.forEach((function(t){t.y1\u003dt.y1+e})),t.sourceLinks.forEach((function(t){t.y0\u003dt.y0+e}))),t}function j(t,e,r,n){t.nodes.forEach((function(i){n\u0026\u0026i.y+(i.y1-i.y0)\u003ee\u0026\u0026(i.y\u003di.y-(i.y+(i.y1-i.y0)-e));var a\u003dt.links.filter((function(t){return b(t.source,r)\u003d\u003db(i,r)})),o\u003da.length;o\u003e1\u0026\u0026a.sort((function(t,e){if(!t.circular\u0026\u0026!e.circular){if(t.target.column\u003d\u003de.target.column)return t.y1-e.y1;if(!V(t,e))return t.y1-e.y1;if(t.target.column\u003ee.target.column){var r\u003dR(e,t);return t.y1-r}if(e.target.column\u003et.target.column)return R(t,e)-e.y1}return t.circular\u0026\u0026!e.circular?\"top\"\u003d\u003dt.circularLinkType?-1:1:e.circular\u0026\u0026!t.circular?\"top\"\u003d\u003de.circularLinkType?1:-1:t.circular\u0026\u0026e.circular?t.circularLinkType\u003d\u003d\u003de.circularLinkType\u0026\u0026\"top\"\u003d\u003dt.circularLinkType?t.target.column\u003d\u003d\u003de.target.column?t.target.y1-e.target.y1:e.target.column-t.target.column:t.circularLinkType\u003d\u003d\u003de.circularLinkType\u0026\u0026\"bottom\"\u003d\u003dt.circularLinkType?t.target.column\u003d\u003d\u003de.target.column?e.target.y1-t.target.y1:t.target.column-e.target.column:\"top\"\u003d\u003dt.circularLinkType?-1:1:void 0}));var s\u003di.y0;a.forEach((function(t){t.y0\u003ds+t.width/2,s+\u003dt.width})),a.forEach((function(t,e){if(\"bottom\"\u003d\u003dt.circularLinkType){for(var r\u003de+1,n\u003d0;r\u003co;r++)n+\u003da[r].width;t.y0\u003di.y1-n-t.width/2}}))}))}function U(t,e,r){t.nodes.forEach((function(e){var n\u003dt.links.filter((function(t){return b(t.target,r)\u003d\u003db(e,r)})),i\u003dn.length;i\u003e1\u0026\u0026n.sort((function(t,e){if(!t.circular\u0026\u0026!e.circular){if(t.source.column\u003d\u003de.source.column)return t.y0-e.y0;if(!V(t,e))return t.y0-e.y0;if(e.source.column\u003ct.source.column){var r\u003dD(e,t);return t.y0-r}if(t.source.column\u003ce.source.column)return D(t,e)-e.y0}return t.circular\u0026\u0026!e.circular?\"top\"\u003d\u003dt.circularLinkType?-1:1:e.circular\u0026\u0026!t.circular?\"top\"\u003d\u003de.circularLinkType?1:-1:t.circular\u0026\u0026e.circular?t.circularLinkType\u003d\u003d\u003de.circularLinkType\u0026\u0026\"top\"\u003d\u003dt.circularLinkType?t.source.column\u003d\u003d\u003de.source.column?t.source.y1-e.source.y1:t.source.column-e.source.column:t.circularLinkType\u003d\u003d\u003de.circularLinkType\u0026\u0026\"bottom\"\u003d\u003dt.circularLinkType?t.source.column\u003d\u003d\u003de.source.column?t.source.y1-e.source.y1:e.source.column-t.source.column:\"top\"\u003d\u003dt.circularLinkType?-1:1:void 0}));var a\u003de.y0;n.forEach((function(t){t.y1\u003da+t.width/2,a+\u003dt.width})),n.forEach((function(t,r){if(\"bottom\"\u003d\u003dt.circularLinkType){for(var a\u003dr+1,o\u003d0;a\u003ci;a++)o+\u003dn[a].width;t.y1\u003de.y1-o-t.width/2}}))}))}function V(t,e){return q(t)\u003d\u003dq(e)}function q(t){return t.y0-t.y1\u003e0?\"up\":\"down\"}function H(t,e){return b(t.source,e)\u003d\u003db(t.target,e)}function G(t,r,n){var i\u003dt.nodes,a\u003dt.links,o\u003d!1,s\u003d!1;if(a.forEach((function(t){\"top\"\u003d\u003dt.circularLinkType?o\u003d!0:\"bottom\"\u003d\u003dt.circularLinkType\u0026\u0026(s\u003d!0)})),0\u003d\u003do||0\u003d\u003ds){var l\u003de.min(i,(function(t){return t.y0})),c\u003d(n-r)/(e.max(i,(function(t){return t.y1}))-l);i.forEach((function(t){var e\u003d(t.y1-t.y0)*c;t.y0\u003d(t.y0-l)*c,t.y1\u003dt.y0+e})),a.forEach((function(t){t.y0\u003d(t.y0-l)*c,t.y1\u003d(t.y1-l)*c,t.width\u003dt.width*c}))}}t.sankeyCircular\u003dfunction(){var t,n,i\u003d0,a\u003d0,b\u003d1,T\u003d1,M\u003d24,A\u003dg,E\u003do,L\u003dv,C\u003dy,P\u003d32,I\u003d2,O\u003dnull;function z(){var t\u003d{nodes:L.apply(null,arguments),links:C.apply(null,arguments)};D(t),_(t,A,O),R(t),B(t),w(t,A),N(t,P,A),V(t);for(var e\u003d4,r\u003d0;r\u003ce;r++)j(t,T,A),U(t,T,A),F(t,a,T,A),j(t,T,A),U(t,T,A);return G(t,a,T),S(t,I,T,A),t}function D(t){t.nodes.forEach((function(t,e){t.index\u003de,t.sourceLinks\u003d[],t.targetLinks\u003d[]}));var e\u003dr.map(t.nodes,A);return t.links.forEach((function(t,r){t.index\u003dr;var n\u003dt.source,i\u003dt.target;\"object\"!\u003d\u003d(void 0\u003d\u003d\u003dn?\"undefined\":l(n))\u0026\u0026(n\u003dt.source\u003dx(e,n)),\"object\"!\u003d\u003d(void 0\u003d\u003d\u003di?\"undefined\":l(i))\u0026\u0026(i\u003dt.target\u003dx(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)})),t}function R(t){t.nodes.forEach((function(t){t.partOfCycle\u003d!1,t.value\u003dMath.max(e.sum(t.sourceLinks,h),e.sum(t.targetLinks,h)),t.sourceLinks.forEach((function(e){e.circular\u0026\u0026(t.partOfCycle\u003d!0,t.circularLinkType\u003de.circularLinkType)})),t.targetLinks.forEach((function(e){e.circular\u0026\u0026(t.partOfCycle\u003d!0,t.circularLinkType\u003de.circularLinkType)}))}))}function B(t){var e,r,n;for(e\u003dt.nodes,r\u003d[],n\u003d0;e.length;++n,e\u003dr,r\u003d[])e.forEach((function(t){t.depth\u003dn,t.sourceLinks.forEach((function(t){r.indexOf(t.target)\u003c0\u0026\u0026!t.circular\u0026\u0026r.push(t.target)}))}));for(e\u003dt.nodes,r\u003d[],n\u003d0;e.length;++n,e\u003dr,r\u003d[])e.forEach((function(t){t.height\u003dn,t.targetLinks.forEach((function(t){r.indexOf(t.source)\u003c0\u0026\u0026!t.circular\u0026\u0026r.push(t.source)}))}));t.nodes.forEach((function(t){t.column\u003dMath.floor(E.call(null,t,n))}))}function N(o,s,l){var c\u003dr.nest().key((function(t){return t.column})).sortKeys(e.ascending).entries(o.nodes).map((function(t){return t.values}));!function(r){if(n){var s\u003d1/0;c.forEach((function(t){var e\u003dT*n/(t.length+1);s\u003de\u003cs?e:s})),t\u003ds}var l\u003de.min(c,(function(r){return(T-a-(r.length-1)*t)/e.sum(r,h)}));l*\u003d.3,o.links.forEach((function(t){t.width\u003dt.value*l}));var u\u003dfunction(t){var r\u003d0,n\u003d0,i\u003d0,a\u003d0,o\u003de.max(t.nodes,(function(t){return t.column}));return t.links.forEach((function(t){t.circular\u0026\u0026(\"top\"\u003d\u003dt.circularLinkType?r+\u003dt.width:n+\u003dt.width,0\u003d\u003dt.target.column\u0026\u0026(a+\u003dt.width),t.source.column\u003d\u003do\u0026\u0026(i+\u003dt.width))})),{top:r\u003dr\u003e0?r+25+10:r,bottom:n\u003dn\u003e0?n+25+10:n,left:a\u003da\u003e0?a+25+10:a,right:i\u003di\u003e0?i+25+10:i}}(o),f\u003dfunction(t,r){var n\u003de.max(t.nodes,(function(t){return t.column})),o\u003db-i,s\u003dT-a,l\u003do/(o+r.right+r.left),c\u003ds/(s+r.top+r.bottom);return i\u003di*l+r.left,b\u003d0\u003d\u003dr.right?b:b*l,a\u003da*c+r.top,T*\u003dc,t.nodes.forEach((function(t){t.x0\u003di+t.column*((b-i-M)/n),t.x1\u003dt.x0+M})),c}(o,u);l*\u003df,o.links.forEach((function(t){t.width\u003dt.value*l})),c.forEach((function(t){var e\u003dt.length;t.forEach((function(t,n){t.depth\u003d\u003dc.length-1\u0026\u00261\u003d\u003de||0\u003d\u003dt.depth\u0026\u00261\u003d\u003de?(t.y0\u003dT/2-t.value*l,t.y1\u003dt.y0+t.value*l):t.partOfCycle?0\u003d\u003dk(t,r)?(t.y0\u003dT/2+n,t.y1\u003dt.y0+t.value*l):\"top\"\u003d\u003dt.circularLinkType?(t.y0\u003da+n,t.y1\u003dt.y0+t.value*l):(t.y0\u003dT-t.value*l-n,t.y1\u003dt.y0+t.value*l):0\u003d\u003du.top||0\u003d\u003du.bottom?(t.y0\u003d(T-a)/e*n,t.y1\u003dt.y0+t.value*l):(t.y0\u003d(T-a)/2-e/2+n,t.y1\u003dt.y0+t.value*l)}))}))}(l),y();for(var u\u003d1,g\u003ds;g\u003e0;--g)v(u*\u003d.99,l),y();function v(t,r){var n\u003dc.length;c.forEach((function(i){var a\u003di.length,o\u003di[0].depth;i.forEach((function(i){var s;if(i.sourceLinks.length||i.targetLinks.length)if(i.partOfCycle\u0026\u0026k(i,r)\u003e0);else if(0\u003d\u003do\u0026\u00261\u003d\u003da)s\u003di.y1-i.y0,i.y0\u003dT/2-s/2,i.y1\u003dT/2+s/2;else if(o\u003d\u003dn-1\u0026\u00261\u003d\u003da)s\u003di.y1-i.y0,i.y0\u003dT/2-s/2,i.y1\u003dT/2+s/2;else{var l\u003de.mean(i.sourceLinks,m),c\u003de.mean(i.targetLinks,d),u\u003d((l\u0026\u0026c?(l+c)/2:l||c)-p(i))*t;i.y0+\u003du,i.y1+\u003du}}))}))}function y(){c.forEach((function(e){var r,n,i,o\u003da,s\u003de.length;for(e.sort(f),i\u003d0;i\u003cs;++i)(n\u003do-(r\u003de[i]).y0)\u003e0\u0026\u0026(r.y0+\u003dn,r.y1+\u003dn),o\u003dr.y1+t;if((n\u003do-t-T)\u003e0)for(o\u003dr.y0-\u003dn,r.y1-\u003dn,i\u003ds-2;i\u003e\u003d0;--i)(n\u003d(r\u003de[i]).y1+t-o)\u003e0\u0026\u0026(r.y0-\u003dn,r.y1-\u003dn),o\u003dr.y0}))}}function V(t){t.nodes.forEach((function(t){t.sourceLinks.sort(u),t.targetLinks.sort(c)})),t.nodes.forEach((function(t){var e\u003dt.y0,r\u003de,n\u003dt.y1,i\u003dn;t.sourceLinks.forEach((function(t){t.circular?(t.y0\u003dn-t.width/2,n-\u003dt.width):(t.y0\u003de+t.width/2,e+\u003dt.width)})),t.targetLinks.forEach((function(t){t.circular?(t.y1\u003di-t.width/2,i-\u003dt.width):(t.y1\u003dr+t.width/2,r+\u003dt.width)}))}))}return z.nodeId\u003dfunction(t){return arguments.length?(A\u003d\"function\"\u003d\u003dtypeof t?t:s(t),z):A},z.nodeAlign\u003dfunction(t){return arguments.length?(E\u003d\"function\"\u003d\u003dtypeof t?t:s(t),z):E},z.nodeWidth\u003dfunction(t){return arguments.length?(M\u003d+t,z):M},z.nodePadding\u003dfunction(e){return arguments.length?(t\u003d+e,z):t},z.nodes\u003dfunction(t){return arguments.length?(L\u003d\"function\"\u003d\u003dtypeof t?t:s(t),z):L},z.links\u003dfunction(t){return arguments.length?(C\u003d\"function\"\u003d\u003dtypeof t?t:s(t),z):C},z.size\u003dfunction(t){return arguments.length?(i\u003da\u003d0,b\u003d+t[0],T\u003d+t[1],z):[b-i,T-a]},z.extent\u003dfunction(t){return arguments.length?(i\u003d+t[0][0],b\u003d+t[1][0],a\u003d+t[0][1],T\u003d+t[1][1],z):[[i,a],[b,T]]},z.iterations\u003dfunction(t){return arguments.length?(P\u003d+t,z):P},z.circularLinkGap\u003dfunction(t){return arguments.length?(I\u003d+t,z):I},z.nodePaddingRatio\u003dfunction(t){return arguments.length?(n\u003d+t,z):n},z.sortNodes\u003dfunction(t){return arguments.length?(O\u003dt,z):O},z.update\u003dfunction(t){return w(t,A),V(t),t.links.forEach((function(t){t.circular\u0026\u0026(t.circularLinkType\u003dt.y0+t.y1\u003cT?\"top\":\"bottom\",t.source.circularLinkType\u003dt.circularLinkType,t.target.circularLinkType\u003dt.circularLinkType)})),j(t,T,A,!1),U(t,T,A),S(t,I,T,A),t},z},t.sankeyCenter\u003dfunction(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,a)-1:0},t.sankeyLeft\u003dfunction(t){return t.depth},t.sankeyRight\u003dfunction(t,e){return e-1-t.height},t.sankeyJustify\u003do,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-array\":162,\"d3-collection\":163,\"d3-shape\":171,\"elementary-circuits-directed-graph\":184}],57:[function(t,e,r){!function(n,i){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?i(r,t(\"d3-array\"),t(\"d3-collection\"),t(\"d3-shape\")):i(n.d3\u003dn.d3||{},n.d3,n.d3,n.d3)}(this,(function(t,e,r,n){\"use strict\";function i(t){return t.target.depth}function a(t,e){return t.sourceLinks.length?t.depth:e-1}function o(t){return function(){return t}}function s(t,e){return c(t.source,e.source)||t.index-e.index}function l(t,e){return c(t.target,e.target)||t.index-e.index}function c(t,e){return t.y0-e.y0}function u(t){return t.value}function f(t){return(t.y0+t.y1)/2}function h(t){return f(t.source)*t.value}function p(t){return f(t.target)*t.value}function d(t){return t.index}function m(t){return t.nodes}function g(t){return t.links}function v(t,e){var r\u003dt.get(e);if(!r)throw new Error(\"missing: \"+e);return r}function y(t){return[t.source.x1,t.y0]}function x(t){return[t.target.x0,t.y1]}t.sankey\u003dfunction(){var t\u003d0,n\u003d0,i\u003d1,y\u003d1,x\u003d24,b\u003d8,_\u003dd,w\u003da,T\u003dm,k\u003dg,M\u003d32;function A(){var t\u003d{nodes:T.apply(null,arguments),links:k.apply(null,arguments)};return S(t),E(t),L(t),C(t),P(t),t}function S(t){t.nodes.forEach((function(t,e){t.index\u003de,t.sourceLinks\u003d[],t.targetLinks\u003d[]}));var e\u003dr.map(t.nodes,_);t.links.forEach((function(t,r){t.index\u003dr;var n\u003dt.source,i\u003dt.target;\"object\"!\u003dtypeof n\u0026\u0026(n\u003dt.source\u003dv(e,n)),\"object\"!\u003dtypeof i\u0026\u0026(i\u003dt.target\u003dv(e,i)),n.sourceLinks.push(t),i.targetLinks.push(t)}))}function E(t){t.nodes.forEach((function(t){t.value\u003dMath.max(e.sum(t.sourceLinks,u),e.sum(t.targetLinks,u))}))}function L(e){var r,n,a;for(r\u003de.nodes,n\u003d[],a\u003d0;r.length;++a,r\u003dn,n\u003d[])r.forEach((function(t){t.depth\u003da,t.sourceLinks.forEach((function(t){n.indexOf(t.target)\u003c0\u0026\u0026n.push(t.target)}))}));for(r\u003de.nodes,n\u003d[],a\u003d0;r.length;++a,r\u003dn,n\u003d[])r.forEach((function(t){t.height\u003da,t.targetLinks.forEach((function(t){n.indexOf(t.source)\u003c0\u0026\u0026n.push(t.source)}))}));var o\u003d(i-t-x)/(a-1);e.nodes.forEach((function(e){e.x1\u003d(e.x0\u003dt+Math.max(0,Math.min(a-1,Math.floor(w.call(null,e,a))))*o)+x}))}function C(t){var i\u003dr.nest().key((function(t){return t.x0})).sortKeys(e.ascending).entries(t.nodes).map((function(t){return t.values}));!function(){var r\u003de.max(i,(function(t){return t.length})),a\u003d2/3*(y-n)/(r-1);b\u003ea\u0026\u0026(b\u003da);var o\u003de.min(i,(function(t){return(y-n-(t.length-1)*b)/e.sum(t,u)}));i.forEach((function(t){t.forEach((function(t,e){t.y1\u003d(t.y0\u003de)+t.value*o}))})),t.links.forEach((function(t){t.width\u003dt.value*o}))}(),d();for(var a\u003d1,o\u003dM;o\u003e0;--o)l(a*\u003d.99),d(),s(a),d();function s(t){i.forEach((function(r){r.forEach((function(r){if(r.targetLinks.length){var n\u003d(e.sum(r.targetLinks,h)/e.sum(r.targetLinks,u)-f(r))*t;r.y0+\u003dn,r.y1+\u003dn}}))}))}function l(t){i.slice().reverse().forEach((function(r){r.forEach((function(r){if(r.sourceLinks.length){var n\u003d(e.sum(r.sourceLinks,p)/e.sum(r.sourceLinks,u)-f(r))*t;r.y0+\u003dn,r.y1+\u003dn}}))}))}function d(){i.forEach((function(t){var e,r,i,a\u003dn,o\u003dt.length;for(t.sort(c),i\u003d0;i\u003co;++i)(r\u003da-(e\u003dt[i]).y0)\u003e0\u0026\u0026(e.y0+\u003dr,e.y1+\u003dr),a\u003de.y1+b;if((r\u003da-b-y)\u003e0)for(a\u003de.y0-\u003dr,e.y1-\u003dr,i\u003do-2;i\u003e\u003d0;--i)(r\u003d(e\u003dt[i]).y1+b-a)\u003e0\u0026\u0026(e.y0-\u003dr,e.y1-\u003dr),a\u003de.y0}))}}function P(t){t.nodes.forEach((function(t){t.sourceLinks.sort(l),t.targetLinks.sort(s)})),t.nodes.forEach((function(t){var e\u003dt.y0,r\u003de;t.sourceLinks.forEach((function(t){t.y0\u003de+t.width/2,e+\u003dt.width})),t.targetLinks.forEach((function(t){t.y1\u003dr+t.width/2,r+\u003dt.width}))}))}return A.update\u003dfunction(t){return P(t),t},A.nodeId\u003dfunction(t){return arguments.length?(_\u003d\"function\"\u003d\u003dtypeof t?t:o(t),A):_},A.nodeAlign\u003dfunction(t){return arguments.length?(w\u003d\"function\"\u003d\u003dtypeof t?t:o(t),A):w},A.nodeWidth\u003dfunction(t){return arguments.length?(x\u003d+t,A):x},A.nodePadding\u003dfunction(t){return arguments.length?(b\u003d+t,A):b},A.nodes\u003dfunction(t){return arguments.length?(T\u003d\"function\"\u003d\u003dtypeof t?t:o(t),A):T},A.links\u003dfunction(t){return arguments.length?(k\u003d\"function\"\u003d\u003dtypeof t?t:o(t),A):k},A.size\u003dfunction(e){return arguments.length?(t\u003dn\u003d0,i\u003d+e[0],y\u003d+e[1],A):[i-t,y-n]},A.extent\u003dfunction(e){return arguments.length?(t\u003d+e[0][0],i\u003d+e[1][0],n\u003d+e[0][1],y\u003d+e[1][1],A):[[t,n],[i,y]]},A.iterations\u003dfunction(t){return arguments.length?(M\u003d+t,A):M},A},t.sankeyCenter\u003dfunction(t){return t.targetLinks.length?t.depth:t.sourceLinks.length?e.min(t.sourceLinks,i)-1:0},t.sankeyLeft\u003dfunction(t){return t.depth},t.sankeyRight\u003dfunction(t,e){return e-1-t.height},t.sankeyJustify\u003da,t.sankeyLinkHorizontal\u003dfunction(){return n.linkHorizontal().source(y).target(x)},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-array\":162,\"d3-collection\":163,\"d3-shape\":171}],58:[function(t,e,r){(function(){var t\u003d{version:\"3.6.1\"},r\u003d[].slice,n\u003dfunction(t){return r.call(t)},i\u003dthis.document;function a(t){return t\u0026\u0026(t.ownerDocument||t.document||t).documentElement}function o(t){return t\u0026\u0026(t.ownerDocument\u0026\u0026t.ownerDocument.defaultView||t.document\u0026\u0026t||t.defaultView)}if(i)try{n(i.documentElement.childNodes)[0].nodeType}catch(t){n\u003dfunction(t){for(var e\u003dt.length,r\u003dnew Array(e);e--;)r[e]\u003dt[e];return r}}if(Date.now||(Date.now\u003dfunction(){return+new Date}),i)try{i.createElement(\"DIV\").style.setProperty(\"opacity\",0,\"\")}catch(t){var s\u003dthis.Element.prototype,l\u003ds.setAttribute,c\u003ds.setAttributeNS,u\u003dthis.CSSStyleDeclaration.prototype,f\u003du.setProperty;s.setAttribute\u003dfunction(t,e){l.call(this,t,e+\"\")},s.setAttributeNS\u003dfunction(t,e,r){c.call(this,t,e,r+\"\")},u.setProperty\u003dfunction(t,e,r){f.call(this,t,e+\"\",r)}}function h(t,e){return t\u003ce?-1:t\u003ee?1:t\u003e\u003de?0:NaN}function p(t){return null\u003d\u003d\u003dt?NaN:+t}function d(t){return!isNaN(t)}function m(t){return{left:function(e,r,n,i){for(arguments.length\u003c3\u0026\u0026(n\u003d0),arguments.length\u003c4\u0026\u0026(i\u003de.length);n\u003ci;){var a\u003dn+i\u003e\u003e\u003e1;t(e[a],r)\u003c0?n\u003da+1:i\u003da}return n},right:function(e,r,n,i){for(arguments.length\u003c3\u0026\u0026(n\u003d0),arguments.length\u003c4\u0026\u0026(i\u003de.length);n\u003ci;){var a\u003dn+i\u003e\u003e\u003e1;t(e[a],r)\u003e0?i\u003da:n\u003da+1}return n}}}t.ascending\u003dh,t.descending\u003dfunction(t,e){return e\u003ct?-1:e\u003et?1:e\u003e\u003dt?0:NaN},t.min\u003dfunction(t,e){var r,n,i\u003d-1,a\u003dt.length;if(1\u003d\u003d\u003darguments.length){for(;++i\u003ca;)if(null!\u003d(n\u003dt[i])\u0026\u0026n\u003e\u003dn){r\u003dn;break}for(;++i\u003ca;)null!\u003d(n\u003dt[i])\u0026\u0026r\u003en\u0026\u0026(r\u003dn)}else{for(;++i\u003ca;)if(null!\u003d(n\u003de.call(t,t[i],i))\u0026\u0026n\u003e\u003dn){r\u003dn;break}for(;++i\u003ca;)null!\u003d(n\u003de.call(t,t[i],i))\u0026\u0026r\u003en\u0026\u0026(r\u003dn)}return r},t.max\u003dfunction(t,e){var r,n,i\u003d-1,a\u003dt.length;if(1\u003d\u003d\u003darguments.length){for(;++i\u003ca;)if(null!\u003d(n\u003dt[i])\u0026\u0026n\u003e\u003dn){r\u003dn;break}for(;++i\u003ca;)null!\u003d(n\u003dt[i])\u0026\u0026n\u003er\u0026\u0026(r\u003dn)}else{for(;++i\u003ca;)if(null!\u003d(n\u003de.call(t,t[i],i))\u0026\u0026n\u003e\u003dn){r\u003dn;break}for(;++i\u003ca;)null!\u003d(n\u003de.call(t,t[i],i))\u0026\u0026n\u003er\u0026\u0026(r\u003dn)}return r},t.extent\u003dfunction(t,e){var r,n,i,a\u003d-1,o\u003dt.length;if(1\u003d\u003d\u003darguments.length){for(;++a\u003co;)if(null!\u003d(n\u003dt[a])\u0026\u0026n\u003e\u003dn){r\u003di\u003dn;break}for(;++a\u003co;)null!\u003d(n\u003dt[a])\u0026\u0026(r\u003en\u0026\u0026(r\u003dn),i\u003cn\u0026\u0026(i\u003dn))}else{for(;++a\u003co;)if(null!\u003d(n\u003de.call(t,t[a],a))\u0026\u0026n\u003e\u003dn){r\u003di\u003dn;break}for(;++a\u003co;)null!\u003d(n\u003de.call(t,t[a],a))\u0026\u0026(r\u003en\u0026\u0026(r\u003dn),i\u003cn\u0026\u0026(i\u003dn))}return[r,i]},t.sum\u003dfunction(t,e){var r,n\u003d0,i\u003dt.length,a\u003d-1;if(1\u003d\u003d\u003darguments.length)for(;++a\u003ci;)d(r\u003d+t[a])\u0026\u0026(n+\u003dr);else for(;++a\u003ci;)d(r\u003d+e.call(t,t[a],a))\u0026\u0026(n+\u003dr);return n},t.mean\u003dfunction(t,e){var r,n\u003d0,i\u003dt.length,a\u003d-1,o\u003di;if(1\u003d\u003d\u003darguments.length)for(;++a\u003ci;)d(r\u003dp(t[a]))?n+\u003dr:--o;else for(;++a\u003ci;)d(r\u003dp(e.call(t,t[a],a)))?n+\u003dr:--o;if(o)return n/o},t.quantile\u003dfunction(t,e){var r\u003d(t.length-1)*e+1,n\u003dMath.floor(r),i\u003d+t[n-1],a\u003dr-n;return a?i+a*(t[n]-i):i},t.median\u003dfunction(e,r){var n,i\u003d[],a\u003de.length,o\u003d-1;if(1\u003d\u003d\u003darguments.length)for(;++o\u003ca;)d(n\u003dp(e[o]))\u0026\u0026i.push(n);else for(;++o\u003ca;)d(n\u003dp(r.call(e,e[o],o)))\u0026\u0026i.push(n);if(i.length)return t.quantile(i.sort(h),.5)},t.variance\u003dfunction(t,e){var r,n,i\u003dt.length,a\u003d0,o\u003d0,s\u003d-1,l\u003d0;if(1\u003d\u003d\u003darguments.length)for(;++s\u003ci;)d(r\u003dp(t[s]))\u0026\u0026(o+\u003d(n\u003dr-a)*(r-(a+\u003dn/++l)));else for(;++s\u003ci;)d(r\u003dp(e.call(t,t[s],s)))\u0026\u0026(o+\u003d(n\u003dr-a)*(r-(a+\u003dn/++l)));if(l\u003e1)return o/(l-1)},t.deviation\u003dfunction(){var e\u003dt.variance.apply(this,arguments);return e?Math.sqrt(e):e};var g\u003dm(h);function v(t){return t.length}t.bisectLeft\u003dg.left,t.bisect\u003dt.bisectRight\u003dg.right,t.bisector\u003dfunction(t){return m(1\u003d\u003d\u003dt.length?function(e,r){return h(t(e),r)}:t)},t.shuffle\u003dfunction(t,e,r){(a\u003darguments.length)\u003c3\u0026\u0026(r\u003dt.length,a\u003c2\u0026\u0026(e\u003d0));for(var n,i,a\u003dr-e;a;)i\u003dMath.random()*a--|0,n\u003dt[a+e],t[a+e]\u003dt[i+e],t[i+e]\u003dn;return t},t.permute\u003dfunction(t,e){for(var r\u003de.length,n\u003dnew Array(r);r--;)n[r]\u003dt[e[r]];return n},t.pairs\u003dfunction(t){for(var e\u003d0,r\u003dt.length-1,n\u003dt[0],i\u003dnew Array(r\u003c0?0:r);e\u003cr;)i[e]\u003d[n,n\u003dt[++e]];return i},t.transpose\u003dfunction(e){if(!(a\u003de.length))return[];for(var r\u003d-1,n\u003dt.min(e,v),i\u003dnew Array(n);++r\u003cn;)for(var a,o\u003d-1,s\u003di[r]\u003dnew Array(a);++o\u003ca;)s[o]\u003de[o][r];return i},t.zip\u003dfunction(){return t.transpose(arguments)},t.keys\u003dfunction(t){var e\u003d[];for(var r in t)e.push(r);return e},t.values\u003dfunction(t){var e\u003d[];for(var r in t)e.push(t[r]);return e},t.entries\u003dfunction(t){var e\u003d[];for(var r in t)e.push({key:r,value:t[r]});return e},t.merge\u003dfunction(t){for(var e,r,n,i\u003dt.length,a\u003d-1,o\u003d0;++a\u003ci;)o+\u003dt[a].length;for(r\u003dnew Array(o);--i\u003e\u003d0;)for(e\u003d(n\u003dt[i]).length;--e\u003e\u003d0;)r[--o]\u003dn[e];return r};var y\u003dMath.abs;function x(t){for(var e\u003d1;t*e%1;)e*\u003d10;return e}function b(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function _(){this._\u003dObject.create(null)}t.range\u003dfunction(t,e,r){if(arguments.length\u003c3\u0026\u0026(r\u003d1,arguments.length\u003c2\u0026\u0026(e\u003dt,t\u003d0)),(e-t)/r\u003d\u003d1/0)throw new Error(\"infinite range\");var n,i\u003d[],a\u003dx(y(r)),o\u003d-1;if(t*\u003da,e*\u003da,(r*\u003da)\u003c0)for(;(n\u003dt+r*++o)\u003ee;)i.push(n/a);else for(;(n\u003dt+r*++o)\u003ce;)i.push(n/a);return i},t.map\u003dfunction(t,e){var r\u003dnew _;if(t instanceof _)t.forEach((function(t,e){r.set(t,e)}));else if(Array.isArray(t)){var n,i\u003d-1,a\u003dt.length;if(1\u003d\u003d\u003darguments.length)for(;++i\u003ca;)r.set(i,t[i]);else for(;++i\u003ca;)r.set(e.call(t,n\u003dt[i],i),n)}else for(var o in t)r.set(o,t[o]);return r};function w(t){return\"__proto__\"\u003d\u003d(t+\u003d\"\")||\"\\0\"\u003d\u003d\u003dt[0]?\"\\0\"+t:t}function T(t){return\"\\0\"\u003d\u003d\u003d(t+\u003d\"\")[0]?t.slice(1):t}function k(t){return w(t)in this._}function M(t){return(t\u003dw(t))in this._\u0026\u0026delete this._[t]}function A(){var t\u003d[];for(var e in this._)t.push(T(e));return t}function S(){var t\u003d0;for(var e in this._)++t;return t}function E(){for(var t in this._)return!1;return!0}function L(){this._\u003dObject.create(null)}function C(t){return t}function P(t,e,r){return function(){var n\u003dr.apply(e,arguments);return n\u003d\u003d\u003de?t:n}}function I(t,e){if(e in t)return e;e\u003de.charAt(0).toUpperCase()+e.slice(1);for(var r\u003d0,n\u003dO.length;r\u003cn;++r){var i\u003dO[r]+e;if(i in t)return i}}b(_,{has:k,get:function(t){return this._[w(t)]},set:function(t,e){return this._[w(t)]\u003de},remove:M,keys:A,values:function(){var t\u003d[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t\u003d[];for(var e in this._)t.push({key:T(e),value:this._[e]});return t},size:S,empty:E,forEach:function(t){for(var e in this._)t.call(this,T(e),this._[e])}}),t.nest\u003dfunction(){var e,r,n\u003d{},i\u003d[],a\u003d[];function o(t,a,s){if(s\u003e\u003di.length)return r?r.call(n,a):e?a.sort(e):a;for(var l,c,u,f,h\u003d-1,p\u003da.length,d\u003di[s++],m\u003dnew _;++h\u003cp;)(f\u003dm.get(l\u003dd(c\u003da[h])))?f.push(c):m.set(l,[c]);return t?(c\u003dt(),u\u003dfunction(e,r){c.set(e,o(t,r,s))}):(c\u003d{},u\u003dfunction(e,r){c[e]\u003do(t,r,s)}),m.forEach(u),c}return n.map\u003dfunction(t,e){return o(e,t,0)},n.entries\u003dfunction(e){return function t(e,r){if(r\u003e\u003di.length)return e;var n\u003d[],o\u003da[r++];return e.forEach((function(e,i){n.push({key:e,values:t(i,r)})})),o?n.sort((function(t,e){return o(t.key,e.key)})):n}(o(t.map,e,0),0)},n.key\u003dfunction(t){return i.push(t),n},n.sortKeys\u003dfunction(t){return a[i.length-1]\u003dt,n},n.sortValues\u003dfunction(t){return e\u003dt,n},n.rollup\u003dfunction(t){return r\u003dt,n},n},t.set\u003dfunction(t){var e\u003dnew L;if(t)for(var r\u003d0,n\u003dt.length;r\u003cn;++r)e.add(t[r]);return e},b(L,{has:k,add:function(t){return this._[w(t+\u003d\"\")]\u003d!0,t},remove:M,values:A,size:S,empty:E,forEach:function(t){for(var e in this._)t.call(this,T(e))}}),t.behavior\u003d{},t.rebind\u003dfunction(t,e){for(var r,n\u003d1,i\u003darguments.length;++n\u003ci;)t[r\u003darguments[n]]\u003dP(t,e,e[r]);return t};var O\u003d[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];function z(){}function D(){}function R(t){var e\u003d[],r\u003dnew _;function n(){for(var r,n\u003de,i\u003d-1,a\u003dn.length;++i\u003ca;)(r\u003dn[i].on)\u0026\u0026r.apply(this,arguments);return t}return n.on\u003dfunction(n,i){var a,o\u003dr.get(n);return arguments.length\u003c2?o\u0026\u0026o.on:(o\u0026\u0026(o.on\u003dnull,e\u003de.slice(0,a\u003de.indexOf(o)).concat(e.slice(a+1)),r.remove(n)),i\u0026\u0026e.push(r.set(n,{on:i})),t)},n}function F(){t.event.preventDefault()}function B(){for(var e,r\u003dt.event;e\u003dr.sourceEvent;)r\u003de;return r}function N(e){for(var r\u003dnew D,n\u003d0,i\u003darguments.length;++n\u003ci;)r[arguments[n]]\u003dR(r);return r.of\u003dfunction(n,i){return function(a){try{var o\u003da.sourceEvent\u003dt.event;a.target\u003de,t.event\u003da,r[a.type].apply(n,i)}finally{t.event\u003do}}},r}t.dispatch\u003dfunction(){for(var t\u003dnew D,e\u003d-1,r\u003darguments.length;++e\u003cr;)t[arguments[e]]\u003dR(t);return t},D.prototype.on\u003dfunction(t,e){var r\u003dt.indexOf(\".\"),n\u003d\"\";if(r\u003e\u003d0\u0026\u0026(n\u003dt.slice(r+1),t\u003dt.slice(0,r)),t)return arguments.length\u003c2?this[t].on(n):this[t].on(n,e);if(2\u003d\u003d\u003darguments.length){if(null\u003d\u003de)for(t in this)this.hasOwnProperty(t)\u0026\u0026this[t].on(n,null);return this}},t.event\u003dnull,t.requote\u003dfunction(t){return t.replace(j,\"\\\\$\u0026\")};var j\u003d/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,U\u003d{}.__proto__?function(t,e){t.__proto__\u003de}:function(t,e){for(var r in e)t[r]\u003de[r]};function V(t){return U(t,Y),t}var q\u003dfunction(t,e){return e.querySelector(t)},H\u003dfunction(t,e){return e.querySelectorAll(t)},G\u003dfunction(t,e){var r\u003dt.matches||t[I(t,\"matchesSelector\")];return(G\u003dfunction(t,e){return r.call(t,e)})(t,e)};\"function\"\u003d\u003dtypeof Sizzle\u0026\u0026(q\u003dfunction(t,e){return Sizzle(t,e)[0]||null},H\u003dSizzle,G\u003dSizzle.matchesSelector),t.selection\u003dfunction(){return t.select(i.documentElement)};var Y\u003dt.selection.prototype\u003d[];function W(t){return\"function\"\u003d\u003dtypeof t?t:function(){return q(t,this)}}function X(t){return\"function\"\u003d\u003dtypeof t?t:function(){return H(t,this)}}Y.select\u003dfunction(t){var e,r,n,i,a\u003d[];t\u003dW(t);for(var o\u003d-1,s\u003dthis.length;++o\u003cs;){a.push(e\u003d[]),e.parentNode\u003d(n\u003dthis[o]).parentNode;for(var l\u003d-1,c\u003dn.length;++l\u003cc;)(i\u003dn[l])?(e.push(r\u003dt.call(i,i.__data__,l,o)),r\u0026\u0026\"__data__\"in i\u0026\u0026(r.__data__\u003di.__data__)):e.push(null)}return V(a)},Y.selectAll\u003dfunction(t){var e,r,i\u003d[];t\u003dX(t);for(var a\u003d-1,o\u003dthis.length;++a\u003co;)for(var s\u003dthis[a],l\u003d-1,c\u003ds.length;++l\u003cc;)(r\u003ds[l])\u0026\u0026(i.push(e\u003dn(t.call(r,r.__data__,l,a))),e.parentNode\u003dr);return V(i)};var Z\u003d\"http://www.w3.org/1999/xhtml\",J\u003d{svg:\"http://www.w3.org/2000/svg\",xhtml:Z,xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};function K(e,r){return e\u003dt.ns.qualify(e),null\u003d\u003dr?e.local?function(){this.removeAttributeNS(e.space,e.local)}:function(){this.removeAttribute(e)}:\"function\"\u003d\u003dtypeof r?e.local?function(){var t\u003dr.apply(this,arguments);null\u003d\u003dt?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,t)}:function(){var t\u003dr.apply(this,arguments);null\u003d\u003dt?this.removeAttribute(e):this.setAttribute(e,t)}:e.local?function(){this.setAttributeNS(e.space,e.local,r)}:function(){this.setAttribute(e,r)}}function Q(t){return t.trim().replace(/\\s+/g,\" \")}function $(e){return new RegExp(\"(?:^|\\\\s+)\"+t.requote(e)+\"(?:\\\\s+|$)\",\"g\")}function tt(t){return(t+\"\").trim().split(/^|\\s+/)}function et(t,e){var r\u003d(t\u003dtt(t).map(rt)).length;return\"function\"\u003d\u003dtypeof e?function(){for(var n\u003d-1,i\u003de.apply(this,arguments);++n\u003cr;)t[n](this,i)}:function(){for(var n\u003d-1;++n\u003cr;)t[n](this,e)}}function rt(t){var e\u003d$(t);return function(r,n){if(i\u003dr.classList)return n?i.add(t):i.remove(t);var i\u003dr.getAttribute(\"class\")||\"\";n?(e.lastIndex\u003d0,e.test(i)||r.setAttribute(\"class\",Q(i+\" \"+t))):r.setAttribute(\"class\",Q(i.replace(e,\" \")))}}function nt(t,e,r){return null\u003d\u003de?function(){this.style.removeProperty(t)}:\"function\"\u003d\u003dtypeof e?function(){var n\u003de.apply(this,arguments);null\u003d\u003dn?this.style.removeProperty(t):this.style.setProperty(t,n,r)}:function(){this.style.setProperty(t,e,r)}}function it(t,e){return null\u003d\u003de?function(){delete this[t]}:\"function\"\u003d\u003dtypeof e?function(){var r\u003de.apply(this,arguments);null\u003d\u003dr?delete this[t]:this[t]\u003dr}:function(){this[t]\u003de}}function at(e){return\"function\"\u003d\u003dtypeof e?e:(e\u003dt.ns.qualify(e)).local?function(){return this.ownerDocument.createElementNS(e.space,e.local)}:function(){var t\u003dthis.ownerDocument,r\u003dthis.namespaceURI;return r\u003d\u003d\u003dZ\u0026\u0026t.documentElement.namespaceURI\u003d\u003d\u003dZ?t.createElement(e):t.createElementNS(r,e)}}function ot(){var t\u003dthis.parentNode;t\u0026\u0026t.removeChild(this)}function st(t){return{__data__:t}}function lt(t){return function(){return G(this,t)}}function ct(t){return arguments.length||(t\u003dh),function(e,r){return e\u0026\u0026r?t(e.__data__,r.__data__):!e-!r}}function ut(t,e){for(var r\u003d0,n\u003dt.length;r\u003cn;r++)for(var i,a\u003dt[r],o\u003d0,s\u003da.length;o\u003cs;o++)(i\u003da[o])\u0026\u0026e(i,o,r);return t}function ft(t){return U(t,ht),t}t.ns\u003d{prefix:J,qualify:function(t){var e\u003dt.indexOf(\":\"),r\u003dt;return e\u003e\u003d0\u0026\u0026\"xmlns\"!\u003d\u003d(r\u003dt.slice(0,e))\u0026\u0026(t\u003dt.slice(e+1)),J.hasOwnProperty(r)?{space:J[r],local:t}:t}},Y.attr\u003dfunction(e,r){if(arguments.length\u003c2){if(\"string\"\u003d\u003dtypeof e){var n\u003dthis.node();return(e\u003dt.ns.qualify(e)).local?n.getAttributeNS(e.space,e.local):n.getAttribute(e)}for(r in e)this.each(K(r,e[r]));return this}return this.each(K(e,r))},Y.classed\u003dfunction(t,e){if(arguments.length\u003c2){if(\"string\"\u003d\u003dtypeof t){var r\u003dthis.node(),n\u003d(t\u003dtt(t)).length,i\u003d-1;if(e\u003dr.classList){for(;++i\u003cn;)if(!e.contains(t[i]))return!1}else for(e\u003dr.getAttribute(\"class\");++i\u003cn;)if(!$(t[i]).test(e))return!1;return!0}for(e in t)this.each(et(e,t[e]));return this}return this.each(et(t,e))},Y.style\u003dfunction(t,e,r){var n\u003darguments.length;if(n\u003c3){if(\"string\"!\u003dtypeof t){for(r in n\u003c2\u0026\u0026(e\u003d\"\"),t)this.each(nt(r,t[r],e));return this}if(n\u003c2){var i\u003dthis.node();return o(i).getComputedStyle(i,null).getPropertyValue(t)}r\u003d\"\"}return this.each(nt(t,e,r))},Y.property\u003dfunction(t,e){if(arguments.length\u003c2){if(\"string\"\u003d\u003dtypeof t)return this.node()[t];for(e in t)this.each(it(e,t[e]));return this}return this.each(it(t,e))},Y.text\u003dfunction(t){return arguments.length?this.each(\"function\"\u003d\u003dtypeof t?function(){var e\u003dt.apply(this,arguments);this.textContent\u003dnull\u003d\u003de?\"\":e}:null\u003d\u003dt?function(){this.textContent\u003d\"\"}:function(){this.textContent\u003dt}):this.node().textContent},Y.html\u003dfunction(t){return arguments.length?this.each(\"function\"\u003d\u003dtypeof t?function(){var e\u003dt.apply(this,arguments);this.innerHTML\u003dnull\u003d\u003de?\"\":e}:null\u003d\u003dt?function(){this.innerHTML\u003d\"\"}:function(){this.innerHTML\u003dt}):this.node().innerHTML},Y.append\u003dfunction(t){return t\u003dat(t),this.select((function(){return this.appendChild(t.apply(this,arguments))}))},Y.insert\u003dfunction(t,e){return t\u003dat(t),e\u003dW(e),this.select((function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)}))},Y.remove\u003dfunction(){return this.each(ot)},Y.data\u003dfunction(t,e){var r,n,i\u003d-1,a\u003dthis.length;if(!arguments.length){for(t\u003dnew Array(a\u003d(r\u003dthis[0]).length);++i\u003ca;)(n\u003dr[i])\u0026\u0026(t[i]\u003dn.__data__);return t}function o(t,r){var n,i,a,o\u003dt.length,u\u003dr.length,f\u003dMath.min(o,u),h\u003dnew Array(u),p\u003dnew Array(u),d\u003dnew Array(o);if(e){var m,g\u003dnew _,v\u003dnew Array(o);for(n\u003d-1;++n\u003co;)(i\u003dt[n])\u0026\u0026(g.has(m\u003de.call(i,i.__data__,n))?d[n]\u003di:g.set(m,i),v[n]\u003dm);for(n\u003d-1;++n\u003cu;)(i\u003dg.get(m\u003de.call(r,a\u003dr[n],n)))?!0!\u003d\u003di\u0026\u0026(h[n]\u003di,i.__data__\u003da):p[n]\u003dst(a),g.set(m,!0);for(n\u003d-1;++n\u003co;)n in v\u0026\u0026!0!\u003d\u003dg.get(v[n])\u0026\u0026(d[n]\u003dt[n])}else{for(n\u003d-1;++n\u003cf;)i\u003dt[n],a\u003dr[n],i?(i.__data__\u003da,h[n]\u003di):p[n]\u003dst(a);for(;n\u003cu;++n)p[n]\u003dst(r[n]);for(;n\u003co;++n)d[n]\u003dt[n]}p.update\u003dh,p.parentNode\u003dh.parentNode\u003dd.parentNode\u003dt.parentNode,s.push(p),l.push(h),c.push(d)}var s\u003dft([]),l\u003dV([]),c\u003dV([]);if(\"function\"\u003d\u003dtypeof t)for(;++i\u003ca;)o(r\u003dthis[i],t.call(r,r.parentNode.__data__,i));else for(;++i\u003ca;)o(r\u003dthis[i],t);return l.enter\u003dfunction(){return s},l.exit\u003dfunction(){return c},l},Y.datum\u003dfunction(t){return arguments.length?this.property(\"__data__\",t):this.property(\"__data__\")},Y.filter\u003dfunction(t){var e,r,n,i\u003d[];\"function\"!\u003dtypeof t\u0026\u0026(t\u003dlt(t));for(var a\u003d0,o\u003dthis.length;a\u003co;a++){i.push(e\u003d[]),e.parentNode\u003d(r\u003dthis[a]).parentNode;for(var s\u003d0,l\u003dr.length;s\u003cl;s++)(n\u003dr[s])\u0026\u0026t.call(n,n.__data__,s,a)\u0026\u0026e.push(n)}return V(i)},Y.order\u003dfunction(){for(var t\u003d-1,e\u003dthis.length;++t\u003ce;)for(var r,n\u003dthis[t],i\u003dn.length-1,a\u003dn[i];--i\u003e\u003d0;)(r\u003dn[i])\u0026\u0026(a\u0026\u0026a!\u003d\u003dr.nextSibling\u0026\u0026a.parentNode.insertBefore(r,a),a\u003dr);return this},Y.sort\u003dfunction(t){t\u003dct.apply(this,arguments);for(var e\u003d-1,r\u003dthis.length;++e\u003cr;)this[e].sort(t);return this.order()},Y.each\u003dfunction(t){return ut(this,(function(e,r,n){t.call(e,e.__data__,r,n)}))},Y.call\u003dfunction(t){var e\u003dn(arguments);return t.apply(e[0]\u003dthis,e),this},Y.empty\u003dfunction(){return!this.node()},Y.node\u003dfunction(){for(var t\u003d0,e\u003dthis.length;t\u003ce;t++)for(var r\u003dthis[t],n\u003d0,i\u003dr.length;n\u003ci;n++){var a\u003dr[n];if(a)return a}return null},Y.size\u003dfunction(){var t\u003d0;return ut(this,(function(){++t})),t};var ht\u003d[];function pt(t){var e,r;return function(n,i,a){var o,s\u003dt[a].update,l\u003ds.length;for(a!\u003dr\u0026\u0026(r\u003da,e\u003d0),i\u003e\u003de\u0026\u0026(e\u003di+1);!(o\u003ds[e])\u0026\u0026++e\u003cl;);return o}}function dt(e,r,i){var a\u003d\"__on\"+e,o\u003de.indexOf(\".\"),s\u003dgt;o\u003e0\u0026\u0026(e\u003de.slice(0,o));var l\u003dmt.get(e);function c(){var t\u003dthis[a];t\u0026\u0026(this.removeEventListener(e,t,t.$),delete this[a])}return l\u0026\u0026(e\u003dl,s\u003dvt),o?r?function(){var t\u003ds(r,n(arguments));c.call(this),this.addEventListener(e,this[a]\u003dt,t.$\u003di),t._\u003dr}:c:r?z:function(){var r,n\u003dnew RegExp(\"^__on([^.]+)\"+t.requote(e)+\"$\");for(var i in this)if(r\u003di.match(n)){var a\u003dthis[i];this.removeEventListener(r[1],a,a.$),delete this[i]}}}t.selection.enter\u003dft,t.selection.enter.prototype\u003dht,ht.append\u003dY.append,ht.empty\u003dY.empty,ht.node\u003dY.node,ht.call\u003dY.call,ht.size\u003dY.size,ht.select\u003dfunction(t){for(var e,r,n,i,a,o\u003d[],s\u003d-1,l\u003dthis.length;++s\u003cl;){n\u003d(i\u003dthis[s]).update,o.push(e\u003d[]),e.parentNode\u003di.parentNode;for(var c\u003d-1,u\u003di.length;++c\u003cu;)(a\u003di[c])?(e.push(n[c]\u003dr\u003dt.call(i.parentNode,a.__data__,c,s)),r.__data__\u003da.__data__):e.push(null)}return V(o)},ht.insert\u003dfunction(t,e){return arguments.length\u003c2\u0026\u0026(e\u003dpt(this)),Y.insert.call(this,t,e)},t.select\u003dfunction(t){var e;return\"string\"\u003d\u003dtypeof t?(e\u003d[q(t,i)]).parentNode\u003di.documentElement:(e\u003d[t]).parentNode\u003da(t),V([e])},t.selectAll\u003dfunction(t){var e;return\"string\"\u003d\u003dtypeof t?(e\u003dn(H(t,i))).parentNode\u003di.documentElement:(e\u003dn(t)).parentNode\u003dnull,V([e])},Y.on\u003dfunction(t,e,r){var n\u003darguments.length;if(n\u003c3){if(\"string\"!\u003dtypeof t){for(r in n\u003c2\u0026\u0026(e\u003d!1),t)this.each(dt(r,t[r],e));return this}if(n\u003c2)return(n\u003dthis.node()[\"__on\"+t])\u0026\u0026n._;r\u003d!1}return this.each(dt(t,e,r))};var mt\u003dt.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});function gt(e,r){return function(n){var i\u003dt.event;t.event\u003dn,r[0]\u003dthis.__data__;try{e.apply(this,r)}finally{t.event\u003di}}}function vt(t,e){var r\u003dgt(t,e);return function(t){var e\u003dt.relatedTarget;e\u0026\u0026(e\u003d\u003d\u003dthis||8\u0026e.compareDocumentPosition(this))||r.call(this,t)}}i\u0026\u0026mt.forEach((function(t){\"on\"+t in i\u0026\u0026mt.remove(t)}));var yt,xt\u003d0;function bt(e){var r\u003d\".dragsuppress-\"+ ++xt,n\u003d\"click\"+r,i\u003dt.select(o(e)).on(\"touchmove\"+r,F).on(\"dragstart\"+r,F).on(\"selectstart\"+r,F);if(null\u003d\u003dyt\u0026\u0026(yt\u003d!(\"onselectstart\"in e)\u0026\u0026I(e.style,\"userSelect\")),yt){var s\u003da(e).style,l\u003ds[yt];s[yt]\u003d\"none\"}return function(t){if(i.on(r,null),yt\u0026\u0026(s[yt]\u003dl),t){var e\u003dfunction(){i.on(n,null)};i.on(n,(function(){F(),e()}),!0),setTimeout(e,0)}}}t.mouse\u003dfunction(t){return wt(t,B())};var _t\u003dthis.navigator\u0026\u0026/WebKit/.test(this.navigator.userAgent)?-1:0;function wt(e,r){r.changedTouches\u0026\u0026(r\u003dr.changedTouches[0]);var n\u003de.ownerSVGElement||e;if(n.createSVGPoint){var i\u003dn.createSVGPoint();if(_t\u003c0){var a\u003do(e);if(a.scrollX||a.scrollY){var s\u003d(n\u003dt.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\"))[0][0].getScreenCTM();_t\u003d!(s.f||s.e),n.remove()}}return _t?(i.x\u003dr.pageX,i.y\u003dr.pageY):(i.x\u003dr.clientX,i.y\u003dr.clientY),[(i\u003di.matrixTransform(e.getScreenCTM().inverse())).x,i.y]}var l\u003de.getBoundingClientRect();return[r.clientX-l.left-e.clientLeft,r.clientY-l.top-e.clientTop]}function Tt(){return t.event.changedTouches[0].identifier}t.touch\u003dfunction(t,e,r){if(arguments.length\u003c3\u0026\u0026(r\u003de,e\u003dB().changedTouches),e)for(var n,i\u003d0,a\u003de.length;i\u003ca;++i)if((n\u003de[i]).identifier\u003d\u003d\u003dr)return wt(t,n)},t.behavior.drag\u003dfunction(){var e\u003dN(a,\"drag\",\"dragstart\",\"dragend\"),r\u003dnull,n\u003ds(z,t.mouse,o,\"mousemove\",\"mouseup\"),i\u003ds(Tt,t.touch,C,\"touchmove\",\"touchend\");function a(){this.on(\"mousedown.drag\",n).on(\"touchstart.drag\",i)}function s(n,i,a,o,s){return function(){var l,c\u003dthis,u\u003dt.event.target.correspondingElement||t.event.target,f\u003dc.parentNode,h\u003de.of(c,arguments),p\u003d0,d\u003dn(),m\u003d\".drag\"+(null\u003d\u003dd?\"\":\"-\"+d),g\u003dt.select(a(u)).on(o+m,x).on(s+m,b),v\u003dbt(u),y\u003di(f,d);function x(){var t,e,r\u003di(f,d);r\u0026\u0026(t\u003dr[0]-y[0],e\u003dr[1]-y[1],p|\u003dt|e,y\u003dr,h({type:\"drag\",x:r[0]+l[0],y:r[1]+l[1],dx:t,dy:e}))}function b(){i(f,d)\u0026\u0026(g.on(o+m,null).on(s+m,null),v(p),h({type:\"dragend\"}))}l\u003dr?[(l\u003dr.apply(c,arguments)).x-y[0],l.y-y[1]]:[0,0],h({type:\"dragstart\"})}}return a.origin\u003dfunction(t){return arguments.length?(r\u003dt,a):r},t.rebind(a,e,\"on\")},t.touches\u003dfunction(t,e){return arguments.length\u003c2\u0026\u0026(e\u003dB().touches),e?n(e).map((function(e){var r\u003dwt(t,e);return r.identifier\u003de.identifier,r})):[]};var kt\u003d1e-6,Mt\u003d1e-12,At\u003dMath.PI,St\u003d2*At,Et\u003dSt-kt,Lt\u003dAt/2,Ct\u003dAt/180,Pt\u003d180/At;function It(t){return t\u003e0?1:t\u003c0?-1:0}function Ot(t,e,r){return(e[0]-t[0])*(r[1]-t[1])-(e[1]-t[1])*(r[0]-t[0])}function zt(t){return t\u003e1?0:t\u003c-1?At:Math.acos(t)}function Dt(t){return t\u003e1?Lt:t\u003c-1?-Lt:Math.asin(t)}function Rt(t){return((t\u003dMath.exp(t))+1/t)/2}function Ft(t){return(t\u003dMath.sin(t/2))*t}var Bt\u003dMath.SQRT2;t.interpolateZoom\u003dfunction(t,e){var r,n,i\u003dt[0],a\u003dt[1],o\u003dt[2],s\u003de[0],l\u003de[1],c\u003de[2],u\u003ds-i,f\u003dl-a,h\u003du*u+f*f;if(h\u003cMt)n\u003dMath.log(c/o)/Bt,r\u003dfunction(t){return[i+t*u,a+t*f,o*Math.exp(Bt*t*n)]};else{var p\u003dMath.sqrt(h),d\u003d(c*c-o*o+4*h)/(2*o*2*p),m\u003d(c*c-o*o-4*h)/(2*c*2*p),g\u003dMath.log(Math.sqrt(d*d+1)-d),v\u003dMath.log(Math.sqrt(m*m+1)-m);n\u003d(v-g)/Bt,r\u003dfunction(t){var e,r\u003dt*n,s\u003dRt(g),l\u003do/(2*p)*(s*(e\u003dBt*r+g,((e\u003dMath.exp(2*e))-1)/(e+1))-function(t){return((t\u003dMath.exp(t))-1/t)/2}(g));return[i+l*u,a+l*f,o*s/Rt(Bt*r+g)]}}return r.duration\u003d1e3*n,r},t.behavior.zoom\u003dfunction(){var e,r,n,a,s,l,c,u,f,h\u003d{x:0,y:0,k:1},p\u003d[960,500],d\u003dUt,m\u003d250,g\u003d0,v\u003d\"mousedown.zoom\",y\u003d\"mousemove.zoom\",x\u003d\"mouseup.zoom\",b\u003d\"touchstart.zoom\",_\u003dN(w,\"zoomstart\",\"zoom\",\"zoomend\");function w(t){t.on(v,P).on(jt+\".zoom\",O).on(\"dblclick.zoom\",z).on(b,I)}function T(t){return[(t[0]-h.x)/h.k,(t[1]-h.y)/h.k]}function k(t){h.k\u003dMath.max(d[0],Math.min(d[1],t))}function M(t,e){e\u003dfunction(t){return[t[0]*h.k+h.x,t[1]*h.k+h.y]}(e),h.x+\u003dt[0]-e[0],h.y+\u003dt[1]-e[1]}function A(e,n,i,a){e.__chart__\u003d{x:h.x,y:h.y,k:h.k},k(Math.pow(2,a)),M(r\u003dn,i),e\u003dt.select(e),m\u003e0\u0026\u0026(e\u003de.transition().duration(m)),e.call(w.event)}function S(){c\u0026\u0026c.domain(l.range().map((function(t){return(t-h.x)/h.k})).map(l.invert)),f\u0026\u0026f.domain(u.range().map((function(t){return(t-h.y)/h.k})).map(u.invert))}function E(t){g++||t({type:\"zoomstart\"})}function L(t){S(),t({type:\"zoom\",scale:h.k,translate:[h.x,h.y]})}function C(t){--g||(t({type:\"zoomend\"}),r\u003dnull)}function P(){var e\u003dthis,r\u003d_.of(e,arguments),n\u003d0,i\u003dt.select(o(e)).on(y,l).on(x,c),a\u003dT(t.mouse(e)),s\u003dbt(e);function l(){n\u003d1,M(t.mouse(e),a),L(r)}function c(){i.on(y,null).on(x,null),s(n),C(r)}vs.call(e),E(r)}function I(){var e,r\u003dthis,n\u003d_.of(r,arguments),i\u003d{},a\u003d0,o\u003d\".zoom-\"+t.event.changedTouches[0].identifier,l\u003d\"touchmove\"+o,c\u003d\"touchend\"+o,u\u003d[],f\u003dt.select(r),p\u003dbt(r);function d(){var n\u003dt.touches(r);return e\u003dh.k,n.forEach((function(t){t.identifier in i\u0026\u0026(i[t.identifier]\u003dT(t))})),n}function m(){var e\u003dt.event.target;t.select(e).on(l,g).on(c,y),u.push(e);for(var n\u003dt.event.changedTouches,o\u003d0,f\u003dn.length;o\u003cf;++o)i[n[o].identifier]\u003dnull;var p\u003dd(),m\u003dDate.now();if(1\u003d\u003d\u003dp.length){if(m-s\u003c500){var v\u003dp[0];A(r,v,i[v.identifier],Math.floor(Math.log(h.k)/Math.LN2)+1),F()}s\u003dm}else if(p.length\u003e1){v\u003dp[0];var x\u003dp[1],b\u003dv[0]-x[0],_\u003dv[1]-x[1];a\u003db*b+_*_}}function g(){var o,l,c,u,f\u003dt.touches(r);vs.call(r);for(var h\u003d0,p\u003df.length;h\u003cp;++h,u\u003dnull)if(c\u003df[h],u\u003di[c.identifier]){if(l)break;o\u003dc,l\u003du}if(u){var d\u003d(d\u003dc[0]-o[0])*d+(d\u003dc[1]-o[1])*d,m\u003da\u0026\u0026Math.sqrt(d/a);o\u003d[(o[0]+c[0])/2,(o[1]+c[1])/2],l\u003d[(l[0]+u[0])/2,(l[1]+u[1])/2],k(m*e)}s\u003dnull,M(o,l),L(n)}function y(){if(t.event.touches.length){for(var e\u003dt.event.changedTouches,r\u003d0,a\u003de.length;r\u003ca;++r)delete i[e[r].identifier];for(var s in i)return void d()}t.selectAll(u).on(o,null),f.on(v,P).on(b,I),p(),C(n)}m(),E(n),f.on(v,null).on(b,m)}function O(){var i\u003d_.of(this,arguments);a?clearTimeout(a):(vs.call(this),e\u003dT(r\u003dn||t.mouse(this)),E(i)),a\u003dsetTimeout((function(){a\u003dnull,C(i)}),50),F(),k(Math.pow(2,.002*Nt())*h.k),M(r,e),L(i)}function z(){var e\u003dt.mouse(this),r\u003dMath.log(h.k)/Math.LN2;A(this,e,T(e),t.event.shiftKey?Math.ceil(r)-1:Math.floor(r)+1)}return jt||(jt\u003d\"onwheel\"in i?(Nt\u003dfunction(){return-t.event.deltaY*(t.event.deltaMode?120:1)},\"wheel\"):\"onmousewheel\"in i?(Nt\u003dfunction(){return t.event.wheelDelta},\"mousewheel\"):(Nt\u003dfunction(){return-t.event.detail},\"MozMousePixelScroll\")),w.event\u003dfunction(e){e.each((function(){var e\u003d_.of(this,arguments),n\u003dh;bs?t.select(this).transition().each(\"start.zoom\",(function(){h\u003dthis.__chart__||{x:0,y:0,k:1},E(e)})).tween(\"zoom:zoom\",(function(){var i\u003dp[0],a\u003dp[1],o\u003dr?r[0]:i/2,s\u003dr?r[1]:a/2,l\u003dt.interpolateZoom([(o-h.x)/h.k,(s-h.y)/h.k,i/h.k],[(o-n.x)/n.k,(s-n.y)/n.k,i/n.k]);return function(t){var r\u003dl(t),n\u003di/r[2];this.__chart__\u003dh\u003d{x:o-r[0]*n,y:s-r[1]*n,k:n},L(e)}})).each(\"interrupt.zoom\",(function(){C(e)})).each(\"end.zoom\",(function(){C(e)})):(this.__chart__\u003dh,E(e),L(e),C(e))}))},w.translate\u003dfunction(t){return arguments.length?(h\u003d{x:+t[0],y:+t[1],k:h.k},S(),w):[h.x,h.y]},w.scale\u003dfunction(t){return arguments.length?(h\u003d{x:h.x,y:h.y,k:null},k(+t),S(),w):h.k},w.scaleExtent\u003dfunction(t){return arguments.length?(d\u003dnull\u003d\u003dt?Ut:[+t[0],+t[1]],w):d},w.center\u003dfunction(t){return arguments.length?(n\u003dt\u0026\u0026[+t[0],+t[1]],w):n},w.size\u003dfunction(t){return arguments.length?(p\u003dt\u0026\u0026[+t[0],+t[1]],w):p},w.duration\u003dfunction(t){return arguments.length?(m\u003d+t,w):m},w.x\u003dfunction(t){return arguments.length?(c\u003dt,l\u003dt.copy(),h\u003d{x:0,y:0,k:1},w):c},w.y\u003dfunction(t){return arguments.length?(f\u003dt,u\u003dt.copy(),h\u003d{x:0,y:0,k:1},w):f},t.rebind(w,_,\"on\")};var Nt,jt,Ut\u003d[0,1/0];function Vt(){}function qt(t,e,r){return this instanceof qt?(this.h\u003d+t,this.s\u003d+e,void(this.l\u003d+r)):arguments.length\u003c2?t instanceof qt?new qt(t.h,t.s,t.l):le(\"\"+t,ce,qt):new qt(t,e,r)}t.color\u003dVt,Vt.prototype.toString\u003dfunction(){return this.rgb()+\"\"},t.hsl\u003dqt;var Ht\u003dqt.prototype\u003dnew Vt;function Gt(t,e,r){var n,i;function a(t){return Math.round(255*function(t){return t\u003e360?t-\u003d360:t\u003c0\u0026\u0026(t+\u003d360),t\u003c60?n+(i-n)*t/60:t\u003c180?i:t\u003c240?n+(i-n)*(240-t)/60:n}(t))}return t\u003disNaN(t)?0:(t%\u003d360)\u003c0?t+360:t,e\u003disNaN(e)||e\u003c0?0:e\u003e1?1:e,n\u003d2*(r\u003dr\u003c0?0:r\u003e1?1:r)-(i\u003dr\u003c\u003d.5?r*(1+e):r+e-r*e),new ne(a(t+120),a(t),a(t-120))}function Yt(e,r,n){return this instanceof Yt?(this.h\u003d+e,this.c\u003d+r,void(this.l\u003d+n)):arguments.length\u003c2?e instanceof Yt?new Yt(e.h,e.c,e.l):$t(e instanceof Zt?e.l:(e\u003due((e\u003dt.rgb(e)).r,e.g,e.b)).l,e.a,e.b):new Yt(e,r,n)}Ht.brighter\u003dfunction(t){return t\u003dMath.pow(.7,arguments.length?t:1),new qt(this.h,this.s,this.l/t)},Ht.darker\u003dfunction(t){return t\u003dMath.pow(.7,arguments.length?t:1),new qt(this.h,this.s,t*this.l)},Ht.rgb\u003dfunction(){return Gt(this.h,this.s,this.l)},t.hcl\u003dYt;var Wt\u003dYt.prototype\u003dnew Vt;function Xt(t,e,r){return isNaN(t)\u0026\u0026(t\u003d0),isNaN(e)\u0026\u0026(e\u003d0),new Zt(r,Math.cos(t*\u003dCt)*e,Math.sin(t)*e)}function Zt(t,e,r){return this instanceof Zt?(this.l\u003d+t,this.a\u003d+e,void(this.b\u003d+r)):arguments.length\u003c2?t instanceof Zt?new Zt(t.l,t.a,t.b):t instanceof Yt?Xt(t.h,t.c,t.l):ue((t\u003dne(t)).r,t.g,t.b):new Zt(t,e,r)}Wt.brighter\u003dfunction(t){return new Yt(this.h,this.c,Math.min(100,this.l+Jt*(arguments.length?t:1)))},Wt.darker\u003dfunction(t){return new Yt(this.h,this.c,Math.max(0,this.l-Jt*(arguments.length?t:1)))},Wt.rgb\u003dfunction(){return Xt(this.h,this.c,this.l).rgb()},t.lab\u003dZt;var Jt\u003d18,Kt\u003dZt.prototype\u003dnew Vt;function Qt(t,e,r){var n\u003d(t+16)/116,i\u003dn+e/500,a\u003dn-r/200;return new ne(re(3.2404542*(i\u003d.95047*te(i))-1.5371385*(n\u003d1*te(n))-.4985314*(a\u003d1.08883*te(a))),re(-.969266*i+1.8760108*n+.041556*a),re(.0556434*i-.2040259*n+1.0572252*a))}function $t(t,e,r){return t\u003e0?new Yt(Math.atan2(r,e)*Pt,Math.sqrt(e*e+r*r),t):new Yt(NaN,NaN,t)}function te(t){return t\u003e.206893034?t*t*t:(t-4/29)/7.787037}function ee(t){return t\u003e.008856?Math.pow(t,1/3):7.787037*t+4/29}function re(t){return Math.round(255*(t\u003c\u003d.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function ne(t,e,r){return this instanceof ne?(this.r\u003d~~t,this.g\u003d~~e,void(this.b\u003d~~r)):arguments.length\u003c2?t instanceof ne?new ne(t.r,t.g,t.b):le(\"\"+t,ne,Gt):new ne(t,e,r)}function ie(t){return new ne(t\u003e\u003e16,t\u003e\u003e8\u0026255,255\u0026t)}function ae(t){return ie(t)+\"\"}Kt.brighter\u003dfunction(t){return new Zt(Math.min(100,this.l+Jt*(arguments.length?t:1)),this.a,this.b)},Kt.darker\u003dfunction(t){return new Zt(Math.max(0,this.l-Jt*(arguments.length?t:1)),this.a,this.b)},Kt.rgb\u003dfunction(){return Qt(this.l,this.a,this.b)},t.rgb\u003dne;var oe\u003dne.prototype\u003dnew Vt;function se(t){return t\u003c16?\"0\"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function le(t,e,r){var n,i,a,o\u003d0,s\u003d0,l\u003d0;if(n\u003d/([a-z]+)\\((.*)\\)/.exec(t\u003dt.toLowerCase()))switch(i\u003dn[2].split(\",\"),n[1]){case\"hsl\":return r(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case\"rgb\":return e(he(i[0]),he(i[1]),he(i[2]))}return(a\u003dpe.get(t))?e(a.r,a.g,a.b):(null\u003d\u003dt||\"#\"!\u003d\u003dt.charAt(0)||isNaN(a\u003dparseInt(t.slice(1),16))||(4\u003d\u003d\u003dt.length?(o\u003d(3840\u0026a)\u003e\u003e4,o|\u003do\u003e\u003e4,s\u003d240\u0026a,s|\u003ds\u003e\u003e4,l\u003d15\u0026a,l|\u003dl\u003c\u003c4):7\u003d\u003d\u003dt.length\u0026\u0026(o\u003d(16711680\u0026a)\u003e\u003e16,s\u003d(65280\u0026a)\u003e\u003e8,l\u003d255\u0026a)),e(o,s,l))}function ce(t,e,r){var n,i,a\u003dMath.min(t/\u003d255,e/\u003d255,r/\u003d255),o\u003dMath.max(t,e,r),s\u003do-a,l\u003d(o+a)/2;return s?(i\u003dl\u003c.5?s/(o+a):s/(2-o-a),n\u003dt\u003d\u003do?(e-r)/s+(e\u003cr?6:0):e\u003d\u003do?(r-t)/s+2:(t-e)/s+4,n*\u003d60):(n\u003dNaN,i\u003dl\u003e0\u0026\u0026l\u003c1?0:n),new qt(n,i,l)}function ue(t,e,r){var n\u003dee((.4124564*(t\u003dfe(t))+.3575761*(e\u003dfe(e))+.1804375*(r\u003dfe(r)))/.95047),i\u003dee((.2126729*t+.7151522*e+.072175*r)/1);return Zt(116*i-16,500*(n-i),200*(i-ee((.0193339*t+.119192*e+.9503041*r)/1.08883)))}function fe(t){return(t/\u003d255)\u003c\u003d.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function he(t){var e\u003dparseFloat(t);return\"%\"\u003d\u003d\u003dt.charAt(t.length-1)?Math.round(2.55*e):e}oe.brighter\u003dfunction(t){t\u003dMath.pow(.7,arguments.length?t:1);var e\u003dthis.r,r\u003dthis.g,n\u003dthis.b,i\u003d30;return e||r||n?(e\u0026\u0026e\u003ci\u0026\u0026(e\u003di),r\u0026\u0026r\u003ci\u0026\u0026(r\u003di),n\u0026\u0026n\u003ci\u0026\u0026(n\u003di),new ne(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new ne(i,i,i)},oe.darker\u003dfunction(t){return new ne((t\u003dMath.pow(.7,arguments.length?t:1))*this.r,t*this.g,t*this.b)},oe.hsl\u003dfunction(){return ce(this.r,this.g,this.b)},oe.toString\u003dfunction(){return\"#\"+se(this.r)+se(this.g)+se(this.b)};var pe\u003dt.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});function de(t){return\"function\"\u003d\u003dtypeof t?t:function(){return t}}function me(t){return function(e,r,n){return 2\u003d\u003d\u003darguments.length\u0026\u0026\"function\"\u003d\u003dtypeof r\u0026\u0026(n\u003dr,r\u003dnull),ge(e,r,t,n)}}function ge(e,r,i,a){var o\u003d{},s\u003dt.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),l\u003d{},c\u003dnew XMLHttpRequest,u\u003dnull;function f(){var t,e\u003dc.status;if(!e\u0026\u0026function(t){var e\u003dt.responseType;return e\u0026\u0026\"text\"!\u003d\u003de?t.response:t.responseText}(c)||e\u003e\u003d200\u0026\u0026e\u003c300||304\u003d\u003d\u003de){try{t\u003di.call(o,c)}catch(t){return void s.error.call(o,t)}s.load.call(o,t)}else s.error.call(o,c)}return self.XDomainRequest\u0026\u0026!(\"withCredentials\"in c)\u0026\u0026/^(http(s)?:)?\\/\\//.test(e)\u0026\u0026(c\u003dnew XDomainRequest),\"onload\"in c?c.onload\u003dc.onerror\u003df:c.onreadystatechange\u003dfunction(){c.readyState\u003e3\u0026\u0026f()},c.onprogress\u003dfunction(e){var r\u003dt.event;t.event\u003de;try{s.progress.call(o,c)}finally{t.event\u003dr}},o.header\u003dfunction(t,e){return t\u003d(t+\"\").toLowerCase(),arguments.length\u003c2?l[t]:(null\u003d\u003de?delete l[t]:l[t]\u003de+\"\",o)},o.mimeType\u003dfunction(t){return arguments.length?(r\u003dnull\u003d\u003dt?null:t+\"\",o):r},o.responseType\u003dfunction(t){return arguments.length?(u\u003dt,o):u},o.response\u003dfunction(t){return i\u003dt,o},[\"get\",\"post\"].forEach((function(t){o[t]\u003dfunction(){return o.send.apply(o,[t].concat(n(arguments)))}})),o.send\u003dfunction(t,n,i){if(2\u003d\u003d\u003darguments.length\u0026\u0026\"function\"\u003d\u003dtypeof n\u0026\u0026(i\u003dn,n\u003dnull),c.open(t,e,!0),null\u003d\u003dr||\"accept\"in l||(l.accept\u003dr+\",*/*\"),c.setRequestHeader)for(var a in l)c.setRequestHeader(a,l[a]);return null!\u003dr\u0026\u0026c.overrideMimeType\u0026\u0026c.overrideMimeType(r),null!\u003du\u0026\u0026(c.responseType\u003du),null!\u003di\u0026\u0026o.on(\"error\",i).on(\"load\",(function(t){i(null,t)})),s.beforesend.call(o,c),c.send(null\u003d\u003dn?null:n),o},o.abort\u003dfunction(){return c.abort(),o},t.rebind(o,s,\"on\"),null\u003d\u003da?o:o.get(function(t){return 1\u003d\u003d\u003dt.length?function(e,r){t(null\u003d\u003de?r:null)}:t}(a))}pe.forEach((function(t,e){pe.set(t,ie(e))})),t.functor\u003dde,t.xhr\u003dme(C),t.dsv\u003dfunction(t,e){var r\u003dnew RegExp(\u0027[\"\u0027+t+\"\\n]\"),n\u003dt.charCodeAt(0);function i(t,r,n){arguments.length\u003c3\u0026\u0026(n\u003dr,r\u003dnull);var i\u003dge(t,e,null\u003d\u003dr?a:o(r),n);return i.row\u003dfunction(t){return arguments.length?i.response(null\u003d\u003d(r\u003dt)?a:o(t)):r},i}function a(t){return i.parse(t.responseText)}function o(t){return function(e){return i.parse(e.responseText,t)}}function s(e){return e.map(l).join(t)}function l(t){return r.test(t)?\u0027\"\u0027+t.replace(/\\\"/g,\u0027\"\"\u0027)+\u0027\"\u0027:t}return i.parse\u003dfunction(t,e){var r;return i.parseRows(t,(function(t,n){if(r)return r(t,n-1);var i\u003dfunction(e){for(var r\u003d{},n\u003dt.length,i\u003d0;i\u003cn;++i)r[t[i]]\u003de[i];return r};r\u003de?function(t,r){return e(i(t),r)}:i}))},i.parseRows\u003dfunction(t,e){var r,i,a\u003d{},o\u003d{},s\u003d[],l\u003dt.length,c\u003d0,u\u003d0;function f(){if(c\u003e\u003dl)return o;if(i)return i\u003d!1,a;var e\u003dc;if(34\u003d\u003d\u003dt.charCodeAt(e)){for(var r\u003de;r++\u003cl;)if(34\u003d\u003d\u003dt.charCodeAt(r)){if(34!\u003d\u003dt.charCodeAt(r+1))break;++r}return c\u003dr+2,13\u003d\u003d\u003d(s\u003dt.charCodeAt(r+1))?(i\u003d!0,10\u003d\u003d\u003dt.charCodeAt(r+2)\u0026\u0026++c):10\u003d\u003d\u003ds\u0026\u0026(i\u003d!0),t.slice(e+1,r).replace(/\"\"/g,\u0027\"\u0027)}for(;c\u003cl;){var s,u\u003d1;if(10\u003d\u003d\u003d(s\u003dt.charCodeAt(c++)))i\u003d!0;else if(13\u003d\u003d\u003ds)i\u003d!0,10\u003d\u003d\u003dt.charCodeAt(c)\u0026\u0026(++c,++u);else if(s!\u003d\u003dn)continue;return t.slice(e,c-u)}return t.slice(e)}for(;(r\u003df())!\u003d\u003do;){for(var h\u003d[];r!\u003d\u003da\u0026\u0026r!\u003d\u003do;)h.push(r),r\u003df();e\u0026\u0026null\u003d\u003d(h\u003de(h,u++))||s.push(h)}return s},i.format\u003dfunction(e){if(Array.isArray(e[0]))return i.formatRows(e);var r\u003dnew L,n\u003d[];return e.forEach((function(t){for(var e in t)r.has(e)||n.push(r.add(e))})),[n.map(l).join(t)].concat(e.map((function(e){return n.map((function(t){return l(e[t])})).join(t)}))).join(\"\\n\")},i.formatRows\u003dfunction(t){return t.map(s).join(\"\\n\")},i},t.csv\u003dt.dsv(\",\",\"text/csv\"),t.tsv\u003dt.dsv(\"\\t\",\"text/tab-separated-values\");var ve,ye,xe,be,_e\u003dthis[I(this,\"requestAnimationFrame\")]||function(t){setTimeout(t,17)};function we(t,e,r){var n\u003darguments.length;n\u003c2\u0026\u0026(e\u003d0),n\u003c3\u0026\u0026(r\u003dDate.now());var i\u003dr+e,a\u003d{c:t,t:i,n:null};return ye?ye.n\u003da:ve\u003da,ye\u003da,xe||(be\u003dclearTimeout(be),xe\u003d1,_e(Te)),a}function Te(){var t\u003dke(),e\u003dMe()-t;e\u003e24?(isFinite(e)\u0026\u0026(clearTimeout(be),be\u003dsetTimeout(Te,e)),xe\u003d0):(xe\u003d1,_e(Te))}function ke(){for(var t\u003dDate.now(),e\u003dve;e;)t\u003e\u003de.t\u0026\u0026e.c(t-e.t)\u0026\u0026(e.c\u003dnull),e\u003de.n;return t}function Me(){for(var t,e\u003dve,r\u003d1/0;e;)e.c?(e.t\u003cr\u0026\u0026(r\u003de.t),e\u003d(t\u003de).n):e\u003dt?t.n\u003de.n:ve\u003de.n;return ye\u003dt,r}function Ae(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)}t.timer\u003dfunction(){we.apply(this,arguments)},t.timer.flush\u003dfunction(){ke(),Me()},t.round\u003dfunction(t,e){return e?Math.round(t*(e\u003dMath.pow(10,e)))/e:Math.round(t)};var Se\u003d[\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xb5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"].map((function(t,e){var r\u003dMath.pow(10,3*y(8-e));return{scale:e\u003e8?function(t){return t/r}:function(t){return t*r},symbol:t}}));function Ee(e){var r\u003de.decimal,n\u003de.thousands,i\u003de.grouping,a\u003de.currency,o\u003di\u0026\u0026n?function(t,e){for(var r\u003dt.length,a\u003d[],o\u003d0,s\u003di[0],l\u003d0;r\u003e0\u0026\u0026s\u003e0\u0026\u0026(l+s+1\u003ee\u0026\u0026(s\u003dMath.max(1,e-l)),a.push(t.substring(r-\u003ds,r+s)),!((l+\u003ds+1)\u003ee));)s\u003di[o\u003d(o+1)%i.length];return a.reverse().join(n)}:C;return function(e){var n\u003dLe.exec(e),i\u003dn[1]||\" \",s\u003dn[2]||\"\u003e\",l\u003dn[3]||\"-\",c\u003dn[4]||\"\",u\u003dn[5],f\u003d+n[6],h\u003dn[7],p\u003dn[8],d\u003dn[9],m\u003d1,g\u003d\"\",v\u003d\"\",y\u003d!1,x\u003d!0;switch(p\u0026\u0026(p\u003d+p.substring(1)),(u||\"0\"\u003d\u003d\u003di\u0026\u0026\"\u003d\"\u003d\u003d\u003ds)\u0026\u0026(u\u003di\u003d\"0\",s\u003d\"\u003d\"),d){case\"n\":h\u003d!0,d\u003d\"g\";break;case\"%\":m\u003d100,v\u003d\"%\",d\u003d\"f\";break;case\"p\":m\u003d100,v\u003d\"%\",d\u003d\"r\";break;case\"b\":case\"o\":case\"x\":case\"X\":\"#\"\u003d\u003d\u003dc\u0026\u0026(g\u003d\"0\"+d.toLowerCase());case\"c\":x\u003d!1;case\"d\":y\u003d!0,p\u003d0;break;case\"s\":m\u003d-1,d\u003d\"r\"}\"$\"\u003d\u003d\u003dc\u0026\u0026(g\u003da[0],v\u003da[1]),\"r\"!\u003dd||p||(d\u003d\"g\"),null!\u003dp\u0026\u0026(\"g\"\u003d\u003dd?p\u003dMath.max(1,Math.min(21,p)):\"e\"!\u003dd\u0026\u0026\"f\"!\u003dd||(p\u003dMath.max(0,Math.min(20,p)))),d\u003dCe.get(d)||Pe;var b\u003du\u0026\u0026h;return function(e){var n\u003dv;if(y\u0026\u0026e%1)return\"\";var a\u003de\u003c0||0\u003d\u003d\u003de\u0026\u00261/e\u003c0?(e\u003d-e,\"-\"):\"-\"\u003d\u003d\u003dl?\"\":l;if(m\u003c0){var c\u003dt.formatPrefix(e,p);e\u003dc.scale(e),n\u003dc.symbol+v}else e*\u003dm;var _,w,T\u003d(e\u003dd(e,p)).lastIndexOf(\".\");if(T\u003c0){var k\u003dx?e.lastIndexOf(\"e\"):-1;k\u003c0?(_\u003de,w\u003d\"\"):(_\u003de.substring(0,k),w\u003de.substring(k))}else _\u003de.substring(0,T),w\u003dr+e.substring(T+1);!u\u0026\u0026h\u0026\u0026(_\u003do(_,1/0));var M\u003dg.length+_.length+w.length+(b?0:a.length),A\u003dM\u003cf?new Array(M\u003df-M+1).join(i):\"\";return b\u0026\u0026(_\u003do(A+_,A.length?f-w.length:1/0)),a+\u003dg,e\u003d_+w,(\"\u003c\"\u003d\u003d\u003ds?a+e+A:\"\u003e\"\u003d\u003d\u003ds?A+a+e:\"^\"\u003d\u003d\u003ds?A.substring(0,M\u003e\u003e\u003d1)+a+e+A.substring(M):a+(b?e:A+e))+n}}}t.formatPrefix\u003dfunction(e,r){var n\u003d0;return(e\u003d+e)\u0026\u0026(e\u003c0\u0026\u0026(e*\u003d-1),r\u0026\u0026(e\u003dt.round(e,Ae(e,r))),n\u003d1+Math.floor(1e-12+Math.log(e)/Math.LN10),n\u003dMath.max(-24,Math.min(24,3*Math.floor((n-1)/3)))),Se[8+n/3]};var Le\u003d/(?:([^{])?([\u003c\u003e\u003d^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,Ce\u003dt.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(e,r){return(e\u003dt.round(e,Ae(e,r))).toFixed(Math.max(0,Math.min(20,Ae(e*(1+1e-15),r))))}});function Pe(t){return t+\"\"}var Ie\u003dt.time\u003d{},Oe\u003dDate;function ze(){this._\u003dnew Date(arguments.length\u003e1?Date.UTC.apply(this,arguments):arguments[0])}ze.prototype\u003d{getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){De.setUTCDate.apply(this._,arguments)},setDay:function(){De.setUTCDay.apply(this._,arguments)},setFullYear:function(){De.setUTCFullYear.apply(this._,arguments)},setHours:function(){De.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){De.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){De.setUTCMinutes.apply(this._,arguments)},setMonth:function(){De.setUTCMonth.apply(this._,arguments)},setSeconds:function(){De.setUTCSeconds.apply(this._,arguments)},setTime:function(){De.setTime.apply(this._,arguments)}};var De\u003dDate.prototype;function Re(t,e,r){function n(e){var r\u003dt(e),n\u003da(r,1);return e-r\u003cn-e?r:n}function i(r){return e(r\u003dt(new Oe(r-1)),1),r}function a(t,r){return e(t\u003dnew Oe(+t),r),t}function o(t,n,a){var o\u003di(t),s\u003d[];if(a\u003e1)for(;o\u003cn;)r(o)%a||s.push(new Date(+o)),e(o,1);else for(;o\u003cn;)s.push(new Date(+o)),e(o,1);return s}t.floor\u003dt,t.round\u003dn,t.ceil\u003di,t.offset\u003da,t.range\u003do;var s\u003dt.utc\u003dFe(t);return s.floor\u003ds,s.round\u003dFe(n),s.ceil\u003dFe(i),s.offset\u003dFe(a),s.range\u003dfunction(t,e,r){try{Oe\u003dze;var n\u003dnew ze;return n._\u003dt,o(n,e,r)}finally{Oe\u003dDate}},t}function Fe(t){return function(e,r){try{Oe\u003dze;var n\u003dnew ze;return n._\u003de,t(n,r)._}finally{Oe\u003dDate}}}function Be(e){var r\u003de.dateTime,n\u003de.date,i\u003de.time,a\u003de.periods,o\u003de.days,s\u003de.shortDays,l\u003de.months,c\u003de.shortMonths;function u(t){var e\u003dt.length;function r(r){for(var n,i,a,o\u003d[],s\u003d-1,l\u003d0;++s\u003ce;)37\u003d\u003d\u003dt.charCodeAt(s)\u0026\u0026(o.push(t.slice(l,s)),null!\u003d(i\u003dNe[n\u003dt.charAt(++s)])\u0026\u0026(n\u003dt.charAt(++s)),(a\u003d_[n])\u0026\u0026(n\u003da(r,null\u003d\u003di?\"e\"\u003d\u003d\u003dn?\" \":\"0\":i)),o.push(n),l\u003ds+1);return o.push(t.slice(l,s)),o.join(\"\")}return r.parse\u003dfunction(e){var r\u003d{y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null};if(f(r,t,e,0)!\u003de.length)return null;\"p\"in r\u0026\u0026(r.H\u003dr.H%12+12*r.p);var n\u003dnull!\u003dr.Z\u0026\u0026Oe!\u003d\u003dze,i\u003dnew(n?ze:Oe);return\"j\"in r?i.setFullYear(r.y,0,r.j):\"W\"in r||\"U\"in r?(\"w\"in r||(r.w\u003d\"W\"in r?1:0),i.setFullYear(r.y,0,1),i.setFullYear(r.y,0,\"W\"in r?(r.w+6)%7+7*r.W-(i.getDay()+5)%7:r.w+7*r.U-(i.getDay()+6)%7)):i.setFullYear(r.y,r.m,r.d),i.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),n?i._:i},r.toString\u003dfunction(){return t},r}function f(t,e,r,n){for(var i,a,o,s\u003d0,l\u003de.length,c\u003dr.length;s\u003cl;){if(n\u003e\u003dc)return-1;if(37\u003d\u003d\u003d(i\u003de.charCodeAt(s++))){if(o\u003de.charAt(s++),!(a\u003dw[o in Ne?e.charAt(s++):o])||(n\u003da(t,r,n))\u003c0)return-1}else if(i!\u003dr.charCodeAt(n++))return-1}return n}u.utc\u003dfunction(t){var e\u003du(t);function r(t){try{var r\u003dnew(Oe\u003dze);return r._\u003dt,e(r)}finally{Oe\u003dDate}}return r.parse\u003dfunction(t){try{Oe\u003dze;var r\u003de.parse(t);return r\u0026\u0026r._}finally{Oe\u003dDate}},r.toString\u003de.toString,r},u.multi\u003du.utc.multi\u003dor;var h\u003dt.map(),p\u003dqe(o),d\u003dHe(o),m\u003dqe(s),g\u003dHe(s),v\u003dqe(l),y\u003dHe(l),x\u003dqe(c),b\u003dHe(c);a.forEach((function(t,e){h.set(t.toLowerCase(),e)}));var _\u003d{a:function(t){return s[t.getDay()]},A:function(t){return o[t.getDay()]},b:function(t){return c[t.getMonth()]},B:function(t){return l[t.getMonth()]},c:u(r),d:function(t,e){return Ve(t.getDate(),e,2)},e:function(t,e){return Ve(t.getDate(),e,2)},H:function(t,e){return Ve(t.getHours(),e,2)},I:function(t,e){return Ve(t.getHours()%12||12,e,2)},j:function(t,e){return Ve(1+Ie.dayOfYear(t),e,3)},L:function(t,e){return Ve(t.getMilliseconds(),e,3)},m:function(t,e){return Ve(t.getMonth()+1,e,2)},M:function(t,e){return Ve(t.getMinutes(),e,2)},p:function(t){return a[+(t.getHours()\u003e\u003d12)]},S:function(t,e){return Ve(t.getSeconds(),e,2)},U:function(t,e){return Ve(Ie.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Ve(Ie.mondayOfYear(t),e,2)},x:u(n),X:u(i),y:function(t,e){return Ve(t.getFullYear()%100,e,2)},Y:function(t,e){return Ve(t.getFullYear()%1e4,e,4)},Z:ir,\"%\":function(){return\"%\"}},w\u003d{a:function(t,e,r){m.lastIndex\u003d0;var n\u003dm.exec(e.slice(r));return n?(t.w\u003dg.get(n[0].toLowerCase()),r+n[0].length):-1},A:function(t,e,r){p.lastIndex\u003d0;var n\u003dp.exec(e.slice(r));return n?(t.w\u003dd.get(n[0].toLowerCase()),r+n[0].length):-1},b:function(t,e,r){x.lastIndex\u003d0;var n\u003dx.exec(e.slice(r));return n?(t.m\u003db.get(n[0].toLowerCase()),r+n[0].length):-1},B:function(t,e,r){v.lastIndex\u003d0;var n\u003dv.exec(e.slice(r));return n?(t.m\u003dy.get(n[0].toLowerCase()),r+n[0].length):-1},c:function(t,e,r){return f(t,_.c.toString(),e,r)},d:Qe,e:Qe,H:tr,I:tr,j:$e,L:nr,m:Ke,M:er,p:function(t,e,r){var n\u003dh.get(e.slice(r,r+\u003d2).toLowerCase());return null\u003d\u003dn?-1:(t.p\u003dn,r)},S:rr,U:Ye,w:Ge,W:We,x:function(t,e,r){return f(t,_.x.toString(),e,r)},X:function(t,e,r){return f(t,_.X.toString(),e,r)},y:Ze,Y:Xe,Z:Je,\"%\":ar};return u}Ie.year\u003dRe((function(t){return(t\u003dIe.day(t)).setMonth(0,1),t}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t){return t.getFullYear()})),Ie.years\u003dIe.year.range,Ie.years.utc\u003dIe.year.utc.range,Ie.day\u003dRe((function(t){var e\u003dnew Oe(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t){return t.getDate()-1})),Ie.days\u003dIe.day.range,Ie.days.utc\u003dIe.day.utc.range,Ie.dayOfYear\u003dfunction(t){var e\u003dIe.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},[\"sunday\",\"monday\",\"tuesday\",\"wednesday\",\"thursday\",\"friday\",\"saturday\"].forEach((function(t,e){e\u003d7-e;var r\u003dIe[t]\u003dRe((function(t){return(t\u003dIe.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t}),(function(t,e){t.setDate(t.getDate()+7*Math.floor(e))}),(function(t){var r\u003dIe.year(t).getDay();return Math.floor((Ie.dayOfYear(t)+(r+e)%7)/7)-(r!\u003d\u003de)}));Ie[t+\"s\"]\u003dr.range,Ie[t+\"s\"].utc\u003dr.utc.range,Ie[t+\"OfYear\"]\u003dfunction(t){var r\u003dIe.year(t).getDay();return Math.floor((Ie.dayOfYear(t)+(r+e)%7)/7)}})),Ie.week\u003dIe.sunday,Ie.weeks\u003dIe.sunday.range,Ie.weeks.utc\u003dIe.sunday.utc.range,Ie.weekOfYear\u003dIe.sundayOfYear;var Ne\u003d{\"-\":\"\",_:\" \",0:\"0\"},je\u003d/^\\s*\\d+/,Ue\u003d/^%/;function Ve(t,e,r){var n\u003dt\u003c0?\"-\":\"\",i\u003d(n?-t:t)+\"\",a\u003di.length;return n+(a\u003cr?new Array(r-a+1).join(e)+i:i)}function qe(e){return new RegExp(\"^(?:\"+e.map(t.requote).join(\"|\")+\")\",\"i\")}function He(t){for(var e\u003dnew _,r\u003d-1,n\u003dt.length;++r\u003cn;)e.set(t[r].toLowerCase(),r);return e}function Ge(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+1));return n?(t.w\u003d+n[0],r+n[0].length):-1}function Ye(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r));return n?(t.U\u003d+n[0],r+n[0].length):-1}function We(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r));return n?(t.W\u003d+n[0],r+n[0].length):-1}function Xe(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+4));return n?(t.y\u003d+n[0],r+n[0].length):-1}function Ze(t,e,r){je.lastIndex\u003d0;var n,i\u003dje.exec(e.slice(r,r+2));return i?(t.y\u003d(n\u003d+i[0])+(n\u003e68?1900:2e3),r+i[0].length):-1}function Je(t,e,r){return/^[+-]\\d{4}$/.test(e\u003de.slice(r,r+5))?(t.Z\u003d-e,r+5):-1}function Ke(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+2));return n?(t.m\u003dn[0]-1,r+n[0].length):-1}function Qe(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+2));return n?(t.d\u003d+n[0],r+n[0].length):-1}function $e(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+3));return n?(t.j\u003d+n[0],r+n[0].length):-1}function tr(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+2));return n?(t.H\u003d+n[0],r+n[0].length):-1}function er(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+2));return n?(t.M\u003d+n[0],r+n[0].length):-1}function rr(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+2));return n?(t.S\u003d+n[0],r+n[0].length):-1}function nr(t,e,r){je.lastIndex\u003d0;var n\u003dje.exec(e.slice(r,r+3));return n?(t.L\u003d+n[0],r+n[0].length):-1}function ir(t){var e\u003dt.getTimezoneOffset(),r\u003de\u003e0?\"-\":\"+\",n\u003dy(e)/60|0,i\u003dy(e)%60;return r+Ve(n,\"0\",2)+Ve(i,\"0\",2)}function ar(t,e,r){Ue.lastIndex\u003d0;var n\u003dUe.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function or(t){for(var e\u003dt.length,r\u003d-1;++r\u003ce;)t[r][0]\u003dthis(t[r][0]);return function(e){for(var r\u003d0,n\u003dt[r];!n[1](e);)n\u003dt[++r];return n[0](e)}}t.locale\u003dfunction(t){return{numberFormat:Ee(t),timeFormat:Be(t)}};var sr\u003dt.locale({decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],dateTime:\"%a %b %e %X %Y\",date:\"%m/%d/%Y\",time:\"%H:%M:%S\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]});function lr(){}t.format\u003dsr.numberFormat,t.geo\u003d{},lr.prototype\u003d{s:0,t:0,add:function(t){ur(t,this.t,cr),ur(cr.s,this.s,this),this.s?this.t+\u003dcr.t:this.s\u003dcr.t},reset:function(){this.s\u003dthis.t\u003d0},valueOf:function(){return this.s}};var cr\u003dnew lr;function ur(t,e,r){var n\u003dr.s\u003dt+e,i\u003dn-t,a\u003dn-i;r.t\u003dt-a+(e-i)}function fr(t,e){t\u0026\u0026pr.hasOwnProperty(t.type)\u0026\u0026pr[t.type](t,e)}t.geo.stream\u003dfunction(t,e){t\u0026\u0026hr.hasOwnProperty(t.type)?hr[t.type](t,e):fr(t,e)};var hr\u003d{Feature:function(t,e){fr(t.geometry,e)},FeatureCollection:function(t,e){for(var r\u003dt.features,n\u003d-1,i\u003dr.length;++n\u003ci;)fr(r[n].geometry,e)}},pr\u003d{Sphere:function(t,e){e.sphere()},Point:function(t,e){t\u003dt.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r\u003dt.coordinates,n\u003d-1,i\u003dr.length;++n\u003ci;)t\u003dr[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){dr(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r\u003dt.coordinates,n\u003d-1,i\u003dr.length;++n\u003ci;)dr(r[n],e,0)},Polygon:function(t,e){mr(t.coordinates,e)},MultiPolygon:function(t,e){for(var r\u003dt.coordinates,n\u003d-1,i\u003dr.length;++n\u003ci;)mr(r[n],e)},GeometryCollection:function(t,e){for(var r\u003dt.geometries,n\u003d-1,i\u003dr.length;++n\u003ci;)fr(r[n],e)}};function dr(t,e,r){var n,i\u003d-1,a\u003dt.length-r;for(e.lineStart();++i\u003ca;)n\u003dt[i],e.point(n[0],n[1],n[2]);e.lineEnd()}function mr(t,e){var r\u003d-1,n\u003dt.length;for(e.polygonStart();++r\u003cn;)dr(t[r],e,1);e.polygonEnd()}t.geo.area\u003dfunction(e){return gr\u003d0,t.geo.stream(e,Lr),gr};var gr,vr,yr,xr,br,_r,wr,Tr,kr,Mr,Ar,Sr,Er\u003dnew lr,Lr\u003d{sphere:function(){gr+\u003d4*At},point:z,lineStart:z,lineEnd:z,polygonStart:function(){Er.reset(),Lr.lineStart\u003dCr},polygonEnd:function(){var t\u003d2*Er;gr+\u003dt\u003c0?4*At+t:t,Lr.lineStart\u003dLr.lineEnd\u003dLr.point\u003dz}};function Cr(){var t,e,r,n,i;function a(t,e){e\u003de*Ct/2+At/4;var a\u003d(t*\u003dCt)-r,o\u003da\u003e\u003d0?1:-1,s\u003do*a,l\u003dMath.cos(e),c\u003dMath.sin(e),u\u003di*c,f\u003dn*l+u*Math.cos(s),h\u003du*o*Math.sin(s);Er.add(Math.atan2(h,f)),r\u003dt,n\u003dl,i\u003dc}Lr.point\u003dfunction(o,s){Lr.point\u003da,r\u003d(t\u003do)*Ct,n\u003dMath.cos(s\u003d(e\u003ds)*Ct/2+At/4),i\u003dMath.sin(s)},Lr.lineEnd\u003dfunction(){a(t,e)}}function Pr(t){var e\u003dt[0],r\u003dt[1],n\u003dMath.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}function Ir(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Or(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function zr(t,e){t[0]+\u003de[0],t[1]+\u003de[1],t[2]+\u003de[2]}function Dr(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function Rr(t){var e\u003dMath.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/\u003de,t[1]/\u003de,t[2]/\u003de}function Fr(t){return[Math.atan2(t[1],t[0]),Dt(t[2])]}function Br(t,e){return y(t[0]-e[0])\u003ckt\u0026\u0026y(t[1]-e[1])\u003ckt}t.geo.bounds\u003dfunction(){var e,r,n,i,a,o,s,l,c,u,f,h\u003d{point:p,lineStart:m,lineEnd:g,polygonStart:function(){h.point\u003dv,h.lineStart\u003dx,h.lineEnd\u003db,c\u003d0,Lr.polygonStart()},polygonEnd:function(){Lr.polygonEnd(),h.point\u003dp,h.lineStart\u003dm,h.lineEnd\u003dg,Er\u003c0?(e\u003d-(n\u003d180),r\u003d-(i\u003d90)):c\u003ekt?i\u003d90:c\u003c-kt\u0026\u0026(r\u003d-90),f[0]\u003de,f[1]\u003dn}};function p(t,a){u.push(f\u003d[e\u003dt,n\u003dt]),a\u003cr\u0026\u0026(r\u003da),a\u003ei\u0026\u0026(i\u003da)}function d(t,o){var s\u003dPr([t*Ct,o*Ct]);if(l){var c\u003dOr(l,s),u\u003dOr([c[1],-c[0],0],c);Rr(u),u\u003dFr(u);var f\u003dt-a,h\u003df\u003e0?1:-1,d\u003du[0]*Pt*h,m\u003dy(f)\u003e180;if(m^(h*a\u003cd\u0026\u0026d\u003ch*t))(g\u003du[1]*Pt)\u003ei\u0026\u0026(i\u003dg);else if(m^(h*a\u003c(d\u003d(d+360)%360-180)\u0026\u0026d\u003ch*t)){var g;(g\u003d-u[1]*Pt)\u003cr\u0026\u0026(r\u003dg)}else o\u003cr\u0026\u0026(r\u003do),o\u003ei\u0026\u0026(i\u003do);m?t\u003ca?_(e,t)\u003e_(e,n)\u0026\u0026(n\u003dt):_(t,n)\u003e_(e,n)\u0026\u0026(e\u003dt):n\u003e\u003de?(t\u003ce\u0026\u0026(e\u003dt),t\u003en\u0026\u0026(n\u003dt)):t\u003ea?_(e,t)\u003e_(e,n)\u0026\u0026(n\u003dt):_(t,n)\u003e_(e,n)\u0026\u0026(e\u003dt)}else p(t,o);l\u003ds,a\u003dt}function m(){h.point\u003dd}function g(){f[0]\u003de,f[1]\u003dn,h.point\u003dp,l\u003dnull}function v(t,e){if(l){var r\u003dt-a;c+\u003dy(r)\u003e180?r+(r\u003e0?360:-360):r}else o\u003dt,s\u003de;Lr.point(t,e),d(t,e)}function x(){Lr.lineStart()}function b(){v(o,s),Lr.lineEnd(),y(c)\u003ekt\u0026\u0026(e\u003d-(n\u003d180)),f[0]\u003de,f[1]\u003dn,l\u003dnull}function _(t,e){return(e-\u003dt)\u003c0?e+360:e}function w(t,e){return t[0]-e[0]}function T(t,e){return e[0]\u003c\u003de[1]?e[0]\u003c\u003dt\u0026\u0026t\u003c\u003de[1]:t\u003ce[0]||e[1]\u003ct}return function(a){if(i\u003dn\u003d-(e\u003dr\u003d1/0),u\u003d[],t.geo.stream(a,h),c\u003du.length){u.sort(w);for(var o\u003d1,s\u003d[m\u003du[0]];o\u003cc;++o)T((p\u003du[o])[0],m)||T(p[1],m)?(_(m[0],p[1])\u003e_(m[0],m[1])\u0026\u0026(m[1]\u003dp[1]),_(p[0],m[1])\u003e_(m[0],m[1])\u0026\u0026(m[0]\u003dp[0])):s.push(m\u003dp);for(var l,c,p,d\u003d-1/0,m\u003d(o\u003d0,s[c\u003ds.length-1]);o\u003c\u003dc;m\u003dp,++o)p\u003ds[o],(l\u003d_(m[1],p[0]))\u003ed\u0026\u0026(d\u003dl,e\u003dp[0],n\u003dm[1])}return u\u003df\u003dnull,e\u003d\u003d\u003d1/0||r\u003d\u003d\u003d1/0?[[NaN,NaN],[NaN,NaN]]:[[e,r],[n,i]]}}(),t.geo.centroid\u003dfunction(e){vr\u003dyr\u003dxr\u003dbr\u003d_r\u003dwr\u003dTr\u003dkr\u003dMr\u003dAr\u003dSr\u003d0,t.geo.stream(e,Nr);var r\u003dMr,n\u003dAr,i\u003dSr,a\u003dr*r+n*n+i*i;return a\u003cMt\u0026\u0026(r\u003dwr,n\u003dTr,i\u003dkr,yr\u003ckt\u0026\u0026(r\u003dxr,n\u003dbr,i\u003d_r),(a\u003dr*r+n*n+i*i)\u003cMt)?[NaN,NaN]:[Math.atan2(n,r)*Pt,Dt(i/Math.sqrt(a))*Pt]};var Nr\u003d{sphere:z,point:jr,lineStart:Vr,lineEnd:qr,polygonStart:function(){Nr.lineStart\u003dHr},polygonEnd:function(){Nr.lineStart\u003dVr}};function jr(t,e){t*\u003dCt;var r\u003dMath.cos(e*\u003dCt);Ur(r*Math.cos(t),r*Math.sin(t),Math.sin(e))}function Ur(t,e,r){++vr,xr+\u003d(t-xr)/vr,br+\u003d(e-br)/vr,_r+\u003d(r-_r)/vr}function Vr(){var t,e,r;function n(n,i){n*\u003dCt;var a\u003dMath.cos(i*\u003dCt),o\u003da*Math.cos(n),s\u003da*Math.sin(n),l\u003dMath.sin(i),c\u003dMath.atan2(Math.sqrt((c\u003de*l-r*s)*c+(c\u003dr*o-t*l)*c+(c\u003dt*s-e*o)*c),t*o+e*s+r*l);yr+\u003dc,wr+\u003dc*(t+(t\u003do)),Tr+\u003dc*(e+(e\u003ds)),kr+\u003dc*(r+(r\u003dl)),Ur(t,e,r)}Nr.point\u003dfunction(i,a){i*\u003dCt;var o\u003dMath.cos(a*\u003dCt);t\u003do*Math.cos(i),e\u003do*Math.sin(i),r\u003dMath.sin(a),Nr.point\u003dn,Ur(t,e,r)}}function qr(){Nr.point\u003djr}function Hr(){var t,e,r,n,i;function a(t,e){t*\u003dCt;var a\u003dMath.cos(e*\u003dCt),o\u003da*Math.cos(t),s\u003da*Math.sin(t),l\u003dMath.sin(e),c\u003dn*l-i*s,u\u003di*o-r*l,f\u003dr*s-n*o,h\u003dMath.sqrt(c*c+u*u+f*f),p\u003dr*o+n*s+i*l,d\u003dh\u0026\u0026-zt(p)/h,m\u003dMath.atan2(h,p);Mr+\u003dd*c,Ar+\u003dd*u,Sr+\u003dd*f,yr+\u003dm,wr+\u003dm*(r+(r\u003do)),Tr+\u003dm*(n+(n\u003ds)),kr+\u003dm*(i+(i\u003dl)),Ur(r,n,i)}Nr.point\u003dfunction(o,s){t\u003do,e\u003ds,Nr.point\u003da,o*\u003dCt;var l\u003dMath.cos(s*\u003dCt);r\u003dl*Math.cos(o),n\u003dl*Math.sin(o),i\u003dMath.sin(s),Ur(r,n,i)},Nr.lineEnd\u003dfunction(){a(t,e),Nr.lineEnd\u003dqr,Nr.point\u003djr}}function Gr(t,e){function r(r,n){return r\u003dt(r,n),e(r[0],r[1])}return t.invert\u0026\u0026e.invert\u0026\u0026(r.invert\u003dfunction(r,n){return(r\u003de.invert(r,n))\u0026\u0026t.invert(r[0],r[1])}),r}function Yr(){return!0}function Wr(t,e,r,n,i){var a\u003d[],o\u003d[];if(t.forEach((function(t){if(!((e\u003dt.length-1)\u003c\u003d0)){var e,r\u003dt[0],n\u003dt[e];if(Br(r,n)){i.lineStart();for(var s\u003d0;s\u003ce;++s)i.point((r\u003dt[s])[0],r[1]);i.lineEnd()}else{var l\u003dnew Zr(r,t,null,!0),c\u003dnew Zr(r,null,l,!1);l.o\u003dc,a.push(l),o.push(c),l\u003dnew Zr(n,t,null,!1),c\u003dnew Zr(n,null,l,!0),l.o\u003dc,a.push(l),o.push(c)}}})),o.sort(e),Xr(a),Xr(o),a.length){for(var s\u003d0,l\u003dr,c\u003do.length;s\u003cc;++s)o[s].e\u003dl\u003d!l;for(var u,f,h\u003da[0];;){for(var p\u003dh,d\u003d!0;p.v;)if((p\u003dp.n)\u003d\u003d\u003dh)return;u\u003dp.z,i.lineStart();do{if(p.v\u003dp.o.v\u003d!0,p.e){if(d)for(s\u003d0,c\u003du.length;s\u003cc;++s)i.point((f\u003du[s])[0],f[1]);else n(p.x,p.n.x,1,i);p\u003dp.n}else{if(d)for(s\u003d(u\u003dp.p.z).length-1;s\u003e\u003d0;--s)i.point((f\u003du[s])[0],f[1]);else n(p.x,p.p.x,-1,i);p\u003dp.p}u\u003d(p\u003dp.o).z,d\u003d!d}while(!p.v);i.lineEnd()}}}function Xr(t){if(e\u003dt.length){for(var e,r,n\u003d0,i\u003dt[0];++n\u003ce;)i.n\u003dr\u003dt[n],r.p\u003di,i\u003dr;i.n\u003dr\u003dt[0],r.p\u003di}}function Zr(t,e,r,n){this.x\u003dt,this.z\u003de,this.o\u003dr,this.e\u003dn,this.v\u003d!1,this.n\u003dthis.p\u003dnull}function Jr(e,r,n,i){return function(a,o){var s,l\u003dr(o),c\u003da.invert(i[0],i[1]),u\u003d{point:f,lineStart:p,lineEnd:d,polygonStart:function(){u.point\u003db,u.lineStart\u003d_,u.lineEnd\u003dw,s\u003d[],m\u003d[]},polygonEnd:function(){u.point\u003df,u.lineStart\u003dp,u.lineEnd\u003dd,s\u003dt.merge(s);var e\u003dfunction(t,e){var r\u003dt[0],n\u003dt[1],i\u003d[Math.sin(r),-Math.cos(r),0],a\u003d0,o\u003d0;Er.reset();for(var s\u003d0,l\u003de.length;s\u003cl;++s){var c\u003de[s],u\u003dc.length;if(u)for(var f\u003dc[0],h\u003df[0],p\u003df[1]/2+At/4,d\u003dMath.sin(p),m\u003dMath.cos(p),g\u003d1;;){g\u003d\u003d\u003du\u0026\u0026(g\u003d0);var v\u003d(t\u003dc[g])[0],y\u003dt[1]/2+At/4,x\u003dMath.sin(y),b\u003dMath.cos(y),_\u003dv-h,w\u003d_\u003e\u003d0?1:-1,T\u003dw*_,k\u003dT\u003eAt,M\u003dd*x;if(Er.add(Math.atan2(M*w*Math.sin(T),m*b+M*Math.cos(T))),a+\u003dk?_+w*St:_,k^h\u003e\u003dr^v\u003e\u003dr){var A\u003dOr(Pr(f),Pr(t));Rr(A);var S\u003dOr(i,A);Rr(S);var E\u003d(k^_\u003e\u003d0?-1:1)*Dt(S[2]);(n\u003eE||n\u003d\u003d\u003dE\u0026\u0026(A[0]||A[1]))\u0026\u0026(o+\u003dk^_\u003e\u003d0?1:-1)}if(!g++)break;h\u003dv,d\u003dx,m\u003db,f\u003dt}}return(a\u003c-kt||a\u003ckt\u0026\u0026Er\u003c-kt)^1\u0026o}(c,m);s.length?(x||(o.polygonStart(),x\u003d!0),Wr(s,$r,e,n,o)):e\u0026\u0026(x||(o.polygonStart(),x\u003d!0),o.lineStart(),n(null,null,1,o),o.lineEnd()),x\u0026\u0026(o.polygonEnd(),x\u003d!1),s\u003dm\u003dnull},sphere:function(){o.polygonStart(),o.lineStart(),n(null,null,1,o),o.lineEnd(),o.polygonEnd()}};function f(t,r){var n\u003da(t,r);e(t\u003dn[0],r\u003dn[1])\u0026\u0026o.point(t,r)}function h(t,e){var r\u003da(t,e);l.point(r[0],r[1])}function p(){u.point\u003dh,l.lineStart()}function d(){u.point\u003df,l.lineEnd()}var m,g,v\u003dQr(),y\u003dr(v),x\u003d!1;function b(t,e){g.push([t,e]);var r\u003da(t,e);y.point(r[0],r[1])}function _(){y.lineStart(),g\u003d[]}function w(){b(g[0][0],g[0][1]),y.lineEnd();var t,e\u003dy.clean(),r\u003dv.buffer(),n\u003dr.length;if(g.pop(),m.push(g),g\u003dnull,n)if(1\u0026e){var i,a\u003d-1;if((n\u003d(t\u003dr[0]).length-1)\u003e0){for(x||(o.polygonStart(),x\u003d!0),o.lineStart();++a\u003cn;)o.point((i\u003dt[a])[0],i[1]);o.lineEnd()}}else n\u003e1\u0026\u00262\u0026e\u0026\u0026r.push(r.pop().concat(r.shift())),s.push(r.filter(Kr))}return u}}function Kr(t){return t.length\u003e1}function Qr(){var t,e\u003d[];return{lineStart:function(){e.push(t\u003d[])},point:function(e,r){t.push([e,r])},lineEnd:z,buffer:function(){var r\u003de;return e\u003d[],t\u003dnull,r},rejoin:function(){e.length\u003e1\u0026\u0026e.push(e.pop().concat(e.shift()))}}}function $r(t,e){return((t\u003dt.x)[0]\u003c0?t[1]-Lt-kt:Lt-t[1])-((e\u003de.x)[0]\u003c0?e[1]-Lt-kt:Lt-e[1])}var tn\u003dJr(Yr,(function(t){var e,r\u003dNaN,n\u003dNaN,i\u003dNaN;return{lineStart:function(){t.lineStart(),e\u003d1},point:function(a,o){var s\u003da\u003e0?At:-At,l\u003dy(a-r);y(l-At)\u003ckt?(t.point(r,n\u003d(n+o)/2\u003e0?Lt:-Lt),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),t.point(a,n),e\u003d0):i!\u003d\u003ds\u0026\u0026l\u003e\u003dAt\u0026\u0026(y(r-i)\u003ckt\u0026\u0026(r-\u003di*kt),y(a-s)\u003ckt\u0026\u0026(a-\u003ds*kt),n\u003dfunction(t,e,r,n){var i,a,o\u003dMath.sin(t-r);return y(o)\u003ekt?Math.atan((Math.sin(e)*(a\u003dMath.cos(n))*Math.sin(r)-Math.sin(n)*(i\u003dMath.cos(e))*Math.sin(t))/(i*a*o)):(e+n)/2}(r,n,a,o),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),e\u003d0),t.point(r\u003da,n\u003do),i\u003ds},lineEnd:function(){t.lineEnd(),r\u003dn\u003dNaN},clean:function(){return 2-e}}}),(function(t,e,r,n){var i;if(null\u003d\u003dt)i\u003dr*Lt,n.point(-At,i),n.point(0,i),n.point(At,i),n.point(At,0),n.point(At,-i),n.point(0,-i),n.point(-At,-i),n.point(-At,0),n.point(-At,i);else if(y(t[0]-e[0])\u003ekt){var a\u003dt[0]\u003ce[0]?At:-At;i\u003dr*a/2,n.point(-a,i),n.point(0,i),n.point(a,i)}else n.point(e[0],e[1])}),[-At,-At/2]);function en(t){var e\u003dMath.cos(t),r\u003de\u003e0,n\u003dy(e)\u003ekt;return Jr(i,(function(t){var e,s,l,c,u;return{lineStart:function(){c\u003dl\u003d!1,u\u003d1},point:function(f,h){var p,d\u003d[f,h],m\u003di(f,h),g\u003dr?m?0:o(f,h):m?o(f+(f\u003c0?At:-At),h):0;if(!e\u0026\u0026(c\u003dl\u003dm)\u0026\u0026t.lineStart(),m!\u003d\u003dl\u0026\u0026(p\u003da(e,d),(Br(e,p)||Br(d,p))\u0026\u0026(d[0]+\u003dkt,d[1]+\u003dkt,m\u003di(d[0],d[1]))),m!\u003d\u003dl)u\u003d0,m?(t.lineStart(),p\u003da(d,e),t.point(p[0],p[1])):(p\u003da(e,d),t.point(p[0],p[1]),t.lineEnd()),e\u003dp;else if(n\u0026\u0026e\u0026\u0026r^m){var v;g\u0026s||!(v\u003da(d,e,!0))||(u\u003d0,r?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||e\u0026\u0026Br(e,d)||t.point(d[0],d[1]),e\u003dd,l\u003dm,s\u003dg},lineEnd:function(){l\u0026\u0026t.lineEnd(),e\u003dnull},clean:function(){return u|(c\u0026\u0026l)\u003c\u003c1}}}),Bn(t,6*Ct),r?[0,-t]:[-At,t-At]);function i(t,r){return Math.cos(t)*Math.cos(r)\u003ee}function a(t,r,n){var i\u003d[1,0,0],a\u003dOr(Pr(t),Pr(r)),o\u003dIr(a,a),s\u003da[0],l\u003do-s*s;if(!l)return!n\u0026\u0026t;var c\u003de*o/l,u\u003d-e*s/l,f\u003dOr(i,a),h\u003dDr(i,c);zr(h,Dr(a,u));var p\u003df,d\u003dIr(h,p),m\u003dIr(p,p),g\u003dd*d-m*(Ir(h,h)-1);if(!(g\u003c0)){var v\u003dMath.sqrt(g),x\u003dDr(p,(-d-v)/m);if(zr(x,h),x\u003dFr(x),!n)return x;var b,_\u003dt[0],w\u003dr[0],T\u003dt[1],k\u003dr[1];w\u003c_\u0026\u0026(b\u003d_,_\u003dw,w\u003db);var M\u003dw-_,A\u003dy(M-At)\u003ckt;if(!A\u0026\u0026k\u003cT\u0026\u0026(b\u003dT,T\u003dk,k\u003db),A||M\u003ckt?A?T+k\u003e0^x[1]\u003c(y(x[0]-_)\u003ckt?T:k):T\u003c\u003dx[1]\u0026\u0026x[1]\u003c\u003dk:M\u003eAt^(_\u003c\u003dx[0]\u0026\u0026x[0]\u003c\u003dw)){var S\u003dDr(p,(-d+v)/m);return zr(S,h),[x,Fr(S)]}}}function o(e,n){var i\u003dr?t:At-t,a\u003d0;return e\u003c-i?a|\u003d1:e\u003ei\u0026\u0026(a|\u003d2),n\u003c-i?a|\u003d4:n\u003ei\u0026\u0026(a|\u003d8),a}}function rn(t,e,r,n){return function(i){var a,o\u003di.a,s\u003di.b,l\u003do.x,c\u003do.y,u\u003d0,f\u003d1,h\u003ds.x-l,p\u003ds.y-c;if(a\u003dt-l,h||!(a\u003e0)){if(a/\u003dh,h\u003c0){if(a\u003cu)return;a\u003cf\u0026\u0026(f\u003da)}else if(h\u003e0){if(a\u003ef)return;a\u003eu\u0026\u0026(u\u003da)}if(a\u003dr-l,h||!(a\u003c0)){if(a/\u003dh,h\u003c0){if(a\u003ef)return;a\u003eu\u0026\u0026(u\u003da)}else if(h\u003e0){if(a\u003cu)return;a\u003cf\u0026\u0026(f\u003da)}if(a\u003de-c,p||!(a\u003e0)){if(a/\u003dp,p\u003c0){if(a\u003cu)return;a\u003cf\u0026\u0026(f\u003da)}else if(p\u003e0){if(a\u003ef)return;a\u003eu\u0026\u0026(u\u003da)}if(a\u003dn-c,p||!(a\u003c0)){if(a/\u003dp,p\u003c0){if(a\u003ef)return;a\u003eu\u0026\u0026(u\u003da)}else if(p\u003e0){if(a\u003cu)return;a\u003cf\u0026\u0026(f\u003da)}return u\u003e0\u0026\u0026(i.a\u003d{x:l+u*h,y:c+u*p}),f\u003c1\u0026\u0026(i.b\u003d{x:l+f*h,y:c+f*p}),i}}}}}}function nn(e,r,n,i){return function(l){var c,u,f,h,p,d,m,g,v,y,x,b\u003dl,_\u003dQr(),w\u003drn(e,r,n,i),T\u003d{point:A,lineStart:function(){T.point\u003dS,u\u0026\u0026u.push(f\u003d[]);y\u003d!0,v\u003d!1,m\u003dg\u003dNaN},lineEnd:function(){c\u0026\u0026(S(h,p),d\u0026\u0026v\u0026\u0026_.rejoin(),c.push(_.buffer()));T.point\u003dA,v\u0026\u0026l.lineEnd()},polygonStart:function(){l\u003d_,c\u003d[],u\u003d[],x\u003d!0},polygonEnd:function(){l\u003db,c\u003dt.merge(c);var r\u003dfunction(t){for(var e\u003d0,r\u003du.length,n\u003dt[1],i\u003d0;i\u003cr;++i)for(var a,o\u003d1,s\u003du[i],l\u003ds.length,c\u003ds[0];o\u003cl;++o)a\u003ds[o],c[1]\u003c\u003dn?a[1]\u003en\u0026\u0026Ot(c,a,t)\u003e0\u0026\u0026++e:a[1]\u003c\u003dn\u0026\u0026Ot(c,a,t)\u003c0\u0026\u0026--e,c\u003da;return 0!\u003d\u003de}([e,i]),n\u003dx\u0026\u0026r,a\u003dc.length;(n||a)\u0026\u0026(l.polygonStart(),n\u0026\u0026(l.lineStart(),k(null,null,1,l),l.lineEnd()),a\u0026\u0026Wr(c,o,r,k,l),l.polygonEnd()),c\u003du\u003df\u003dnull}};function k(t,o,l,c){var u\u003d0,f\u003d0;if(null\u003d\u003dt||(u\u003da(t,l))!\u003d\u003d(f\u003da(o,l))||s(t,o)\u003c0^l\u003e0)do{c.point(0\u003d\u003d\u003du||3\u003d\u003d\u003du?e:n,u\u003e1?i:r)}while((u\u003d(u+l+4)%4)!\u003d\u003df);else c.point(o[0],o[1])}function M(t,a){return e\u003c\u003dt\u0026\u0026t\u003c\u003dn\u0026\u0026r\u003c\u003da\u0026\u0026a\u003c\u003di}function A(t,e){M(t,e)\u0026\u0026l.point(t,e)}function S(t,e){var r\u003dM(t\u003dMath.max(-1e9,Math.min(1e9,t)),e\u003dMath.max(-1e9,Math.min(1e9,e)));if(u\u0026\u0026f.push([t,e]),y)h\u003dt,p\u003de,d\u003dr,y\u003d!1,r\u0026\u0026(l.lineStart(),l.point(t,e));else if(r\u0026\u0026v)l.point(t,e);else{var n\u003d{a:{x:m,y:g},b:{x:t,y:e}};w(n)?(v||(l.lineStart(),l.point(n.a.x,n.a.y)),l.point(n.b.x,n.b.y),r||l.lineEnd(),x\u003d!1):r\u0026\u0026(l.lineStart(),l.point(t,e),x\u003d!1)}m\u003dt,g\u003de,v\u003dr}return T};function a(t,i){return y(t[0]-e)\u003ckt?i\u003e0?0:3:y(t[0]-n)\u003ckt?i\u003e0?2:1:y(t[1]-r)\u003ckt?i\u003e0?1:0:i\u003e0?3:2}function o(t,e){return s(t.x,e.x)}function s(t,e){var r\u003da(t,1),n\u003da(e,1);return r!\u003d\u003dn?r-n:0\u003d\u003d\u003dr?e[1]-t[1]:1\u003d\u003d\u003dr?t[0]-e[0]:2\u003d\u003d\u003dr?t[1]-e[1]:e[0]-t[0]}}function an(t){var e\u003d0,r\u003dAt/3,n\u003dCn(t),i\u003dn(e,r);return i.parallels\u003dfunction(t){return arguments.length?n(e\u003dt[0]*At/180,r\u003dt[1]*At/180):[e/At*180,r/At*180]},i}function on(t,e){var r\u003dMath.sin(t),n\u003d(r+Math.sin(e))/2,i\u003d1+r*(2*n-r),a\u003dMath.sqrt(i)/n;function o(t,e){var r\u003dMath.sqrt(i-2*n*Math.sin(e))/n;return[r*Math.sin(t*\u003dn),a-r*Math.cos(t)]}return o.invert\u003dfunction(t,e){var r\u003da-e;return[Math.atan2(t,r)/n,Dt((i-(t*t+r*r)*n*n)/(2*n))]},o}t.geo.clipExtent\u003dfunction(){var t,e,r,n,i,a,o\u003d{stream:function(t){return i\u0026\u0026(i.valid\u003d!1),(i\u003da(t)).valid\u003d!0,i},extent:function(s){return arguments.length?(a\u003dnn(t\u003d+s[0][0],e\u003d+s[0][1],r\u003d+s[1][0],n\u003d+s[1][1]),i\u0026\u0026(i.valid\u003d!1,i\u003dnull),o):[[t,e],[r,n]]}};return o.extent([[0,0],[960,500]])},(t.geo.conicEqualArea\u003dfunction(){return an(on)}).raw\u003don,t.geo.albers\u003dfunction(){return t.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},t.geo.albersUsa\u003dfunction(){var e,r,n,i,a\u003dt.geo.albers(),o\u003dt.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s\u003dt.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l\u003d{point:function(t,r){e\u003d[t,r]}};function c(t){var a\u003dt[0],o\u003dt[1];return e\u003dnull,r(a,o),e||(n(a,o),e)||i(a,o),e}return c.invert\u003dfunction(t){var e\u003da.scale(),r\u003da.translate(),n\u003d(t[0]-r[0])/e,i\u003d(t[1]-r[1])/e;return(i\u003e\u003d.12\u0026\u0026i\u003c.234\u0026\u0026n\u003e\u003d-.425\u0026\u0026n\u003c-.214?o:i\u003e\u003d.166\u0026\u0026i\u003c.234\u0026\u0026n\u003e\u003d-.214\u0026\u0026n\u003c-.115?s:a).invert(t)},c.stream\u003dfunction(t){var e\u003da.stream(t),r\u003do.stream(t),n\u003ds.stream(t);return{point:function(t,i){e.point(t,i),r.point(t,i),n.point(t,i)},sphere:function(){e.sphere(),r.sphere(),n.sphere()},lineStart:function(){e.lineStart(),r.lineStart(),n.lineStart()},lineEnd:function(){e.lineEnd(),r.lineEnd(),n.lineEnd()},polygonStart:function(){e.polygonStart(),r.polygonStart(),n.polygonStart()},polygonEnd:function(){e.polygonEnd(),r.polygonEnd(),n.polygonEnd()}}},c.precision\u003dfunction(t){return arguments.length?(a.precision(t),o.precision(t),s.precision(t),c):a.precision()},c.scale\u003dfunction(t){return arguments.length?(a.scale(t),o.scale(.35*t),s.scale(t),c.translate(a.translate())):a.scale()},c.translate\u003dfunction(t){if(!arguments.length)return a.translate();var e\u003da.scale(),u\u003d+t[0],f\u003d+t[1];return r\u003da.translate(t).clipExtent([[u-.455*e,f-.238*e],[u+.455*e,f+.238*e]]).stream(l).point,n\u003do.translate([u-.307*e,f+.201*e]).clipExtent([[u-.425*e+kt,f+.12*e+kt],[u-.214*e-kt,f+.234*e-kt]]).stream(l).point,i\u003ds.translate([u-.205*e,f+.212*e]).clipExtent([[u-.214*e+kt,f+.166*e+kt],[u-.115*e-kt,f+.234*e-kt]]).stream(l).point,c},c.scale(1070)};var sn,ln,cn,un,fn,hn,pn\u003d{point:z,lineStart:z,lineEnd:z,polygonStart:function(){ln\u003d0,pn.lineStart\u003ddn},polygonEnd:function(){pn.lineStart\u003dpn.lineEnd\u003dpn.point\u003dz,sn+\u003dy(ln/2)}};function dn(){var t,e,r,n;function i(t,e){ln+\u003dn*t-r*e,r\u003dt,n\u003de}pn.point\u003dfunction(a,o){pn.point\u003di,t\u003dr\u003da,e\u003dn\u003do},pn.lineEnd\u003dfunction(){i(t,e)}}var mn\u003d{point:function(t,e){t\u003ccn\u0026\u0026(cn\u003dt);t\u003efn\u0026\u0026(fn\u003dt);e\u003cun\u0026\u0026(un\u003de);e\u003ehn\u0026\u0026(hn\u003de)},lineStart:z,lineEnd:z,polygonStart:z,polygonEnd:z};function gn(){var t\u003dvn(4.5),e\u003d[],r\u003d{point:n,lineStart:function(){r.point\u003di},lineEnd:o,polygonStart:function(){r.lineEnd\u003ds},polygonEnd:function(){r.lineEnd\u003do,r.point\u003dn},pointRadius:function(e){return t\u003dvn(e),r},result:function(){if(e.length){var t\u003de.join(\"\");return e\u003d[],t}}};function n(r,n){e.push(\"M\",r,\",\",n,t)}function i(t,n){e.push(\"M\",t,\",\",n),r.point\u003da}function a(t,r){e.push(\"L\",t,\",\",r)}function o(){r.point\u003dn}function s(){e.push(\"Z\")}return r}function vn(t){return\"m0,\"+t+\"a\"+t+\",\"+t+\" 0 1,1 0,\"+-2*t+\"a\"+t+\",\"+t+\" 0 1,1 0,\"+2*t+\"z\"}var yn,xn\u003d{point:bn,lineStart:_n,lineEnd:wn,polygonStart:function(){xn.lineStart\u003dTn},polygonEnd:function(){xn.point\u003dbn,xn.lineStart\u003d_n,xn.lineEnd\u003dwn}};function bn(t,e){xr+\u003dt,br+\u003de,++_r}function _n(){var t,e;function r(r,n){var i\u003dr-t,a\u003dn-e,o\u003dMath.sqrt(i*i+a*a);wr+\u003do*(t+r)/2,Tr+\u003do*(e+n)/2,kr+\u003do,bn(t\u003dr,e\u003dn)}xn.point\u003dfunction(n,i){xn.point\u003dr,bn(t\u003dn,e\u003di)}}function wn(){xn.point\u003dbn}function Tn(){var t,e,r,n;function i(t,e){var i\u003dt-r,a\u003de-n,o\u003dMath.sqrt(i*i+a*a);wr+\u003do*(r+t)/2,Tr+\u003do*(n+e)/2,kr+\u003do,Mr+\u003d(o\u003dn*t-r*e)*(r+t),Ar+\u003do*(n+e),Sr+\u003d3*o,bn(r\u003dt,n\u003de)}xn.point\u003dfunction(a,o){xn.point\u003di,bn(t\u003dr\u003da,e\u003dn\u003do)},xn.lineEnd\u003dfunction(){i(t,e)}}function kn(t){var e\u003d4.5,r\u003d{point:n,lineStart:function(){r.point\u003di},lineEnd:o,polygonStart:function(){r.lineEnd\u003ds},polygonEnd:function(){r.lineEnd\u003do,r.point\u003dn},pointRadius:function(t){return e\u003dt,r},result:z};function n(r,n){t.moveTo(r+e,n),t.arc(r,n,e,0,St)}function i(e,n){t.moveTo(e,n),r.point\u003da}function a(e,r){t.lineTo(e,r)}function o(){r.point\u003dn}function s(){t.closePath()}return r}function Mn(t){var e\u003d.5,r\u003dMath.cos(30*Ct),n\u003d16;function i(t){return(n?o:a)(t)}function a(e){return En(e,(function(r,n){r\u003dt(r,n),e.point(r[0],r[1])}))}function o(e){var r,i,a,o,l,c,u,f,h,p,d,m,g\u003d{point:v,lineStart:y,lineEnd:b,polygonStart:function(){e.polygonStart(),g.lineStart\u003d_},polygonEnd:function(){e.polygonEnd(),g.lineStart\u003dy}};function v(r,n){r\u003dt(r,n),e.point(r[0],r[1])}function y(){f\u003dNaN,g.point\u003dx,e.lineStart()}function x(r,i){var a\u003dPr([r,i]),o\u003dt(r,i);s(f,h,u,p,d,m,f\u003do[0],h\u003do[1],u\u003dr,p\u003da[0],d\u003da[1],m\u003da[2],n,e),e.point(f,h)}function b(){g.point\u003dv,e.lineEnd()}function _(){y(),g.point\u003dw,g.lineEnd\u003dT}function w(t,e){x(r\u003dt,e),i\u003df,a\u003dh,o\u003dp,l\u003dd,c\u003dm,g.point\u003dx}function T(){s(f,h,u,p,d,m,i,a,r,o,l,c,n,e),g.lineEnd\u003db,b()}return g}function s(n,i,a,o,l,c,u,f,h,p,d,m,g,v){var x\u003du-n,b\u003df-i,_\u003dx*x+b*b;if(_\u003e4*e\u0026\u0026g--){var w\u003do+p,T\u003dl+d,k\u003dc+m,M\u003dMath.sqrt(w*w+T*T+k*k),A\u003dMath.asin(k/\u003dM),S\u003dy(y(k)-1)\u003ckt||y(a-h)\u003ckt?(a+h)/2:Math.atan2(T,w),E\u003dt(S,A),L\u003dE[0],C\u003dE[1],P\u003dL-n,I\u003dC-i,O\u003db*P-x*I;(O*O/_\u003ee||y((x*P+b*I)/_-.5)\u003e.3||o*p+l*d+c*m\u003cr)\u0026\u0026(s(n,i,a,o,l,c,L,C,S,w/\u003dM,T/\u003dM,k,g,v),v.point(L,C),s(L,C,S,w,T,k,u,f,h,p,d,m,g,v))}}return i.precision\u003dfunction(t){return arguments.length?(n\u003d(e\u003dt*t)\u003e0\u0026\u002616,i):Math.sqrt(e)},i}function An(t){var e\u003dMn((function(e,r){return t([e*Pt,r*Pt])}));return function(t){return Pn(e(t))}}function Sn(t){this.stream\u003dt}function En(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function Ln(t){return Cn((function(){return t}))()}function Cn(e){var r,n,i,a,o,s,l\u003dMn((function(t,e){return[(t\u003dr(t,e))[0]*c+a,o-t[1]*c]})),c\u003d150,u\u003d480,f\u003d250,h\u003d0,p\u003d0,d\u003d0,m\u003d0,g\u003d0,v\u003dtn,y\u003dC,x\u003dnull,b\u003dnull;function _(t){return[(t\u003di(t[0]*Ct,t[1]*Ct))[0]*c+a,o-t[1]*c]}function w(t){return(t\u003di.invert((t[0]-a)/c,(o-t[1])/c))\u0026\u0026[t[0]*Pt,t[1]*Pt]}function T(){i\u003dGr(n\u003dzn(d,m,g),r);var t\u003dr(h,p);return a\u003du-t[0]*c,o\u003df+t[1]*c,k()}function k(){return s\u0026\u0026(s.valid\u003d!1,s\u003dnull),_}return _.stream\u003dfunction(t){return s\u0026\u0026(s.valid\u003d!1),(s\u003dPn(v(n,l(y(t))))).valid\u003d!0,s},_.clipAngle\u003dfunction(t){return arguments.length?(v\u003dnull\u003d\u003dt?(x\u003dt,tn):en((x\u003d+t)*Ct),k()):x},_.clipExtent\u003dfunction(t){return arguments.length?(b\u003dt,y\u003dt?nn(t[0][0],t[0][1],t[1][0],t[1][1]):C,k()):b},_.scale\u003dfunction(t){return arguments.length?(c\u003d+t,T()):c},_.translate\u003dfunction(t){return arguments.length?(u\u003d+t[0],f\u003d+t[1],T()):[u,f]},_.center\u003dfunction(t){return arguments.length?(h\u003dt[0]%360*Ct,p\u003dt[1]%360*Ct,T()):[h*Pt,p*Pt]},_.rotate\u003dfunction(t){return arguments.length?(d\u003dt[0]%360*Ct,m\u003dt[1]%360*Ct,g\u003dt.length\u003e2?t[2]%360*Ct:0,T()):[d*Pt,m*Pt,g*Pt]},t.rebind(_,l,\"precision\"),function(){return r\u003de.apply(this,arguments),_.invert\u003dr.invert\u0026\u0026w,T()}}function Pn(t){return En(t,(function(e,r){t.point(e*Ct,r*Ct)}))}function In(t,e){return[t,e]}function On(t,e){return[t\u003eAt?t-St:t\u003c-At?t+St:t,e]}function zn(t,e,r){return t?e||r?Gr(Rn(t),Fn(e,r)):Rn(t):e||r?Fn(e,r):On}function Dn(t){return function(e,r){return[(e+\u003dt)\u003eAt?e-St:e\u003c-At?e+St:e,r]}}function Rn(t){var e\u003dDn(t);return e.invert\u003dDn(-t),e}function Fn(t,e){var r\u003dMath.cos(t),n\u003dMath.sin(t),i\u003dMath.cos(e),a\u003dMath.sin(e);function o(t,e){var o\u003dMath.cos(e),s\u003dMath.cos(t)*o,l\u003dMath.sin(t)*o,c\u003dMath.sin(e),u\u003dc*r+s*n;return[Math.atan2(l*i-u*a,s*r-c*n),Dt(u*i+l*a)]}return o.invert\u003dfunction(t,e){var o\u003dMath.cos(e),s\u003dMath.cos(t)*o,l\u003dMath.sin(t)*o,c\u003dMath.sin(e),u\u003dc*i-l*a;return[Math.atan2(l*i+c*a,s*r+u*n),Dt(u*r-s*n)]},o}function Bn(t,e){var r\u003dMath.cos(t),n\u003dMath.sin(t);return function(i,a,o,s){var l\u003do*e;null!\u003di?(i\u003dNn(r,i),a\u003dNn(r,a),(o\u003e0?i\u003ca:i\u003ea)\u0026\u0026(i+\u003do*St)):(i\u003dt+o*St,a\u003dt-.5*l);for(var c,u\u003di;o\u003e0?u\u003ea:u\u003ca;u-\u003dl)s.point((c\u003dFr([r,-n*Math.cos(u),-n*Math.sin(u)]))[0],c[1])}}function Nn(t,e){var r\u003dPr(e);r[0]-\u003dt,Rr(r);var n\u003dzt(-r[1]);return((-r[2]\u003c0?-n:n)+2*Math.PI-kt)%(2*Math.PI)}function jn(e,r,n){var i\u003dt.range(e,r-kt,n).concat(r);return function(t){return i.map((function(e){return[t,e]}))}}function Un(e,r,n){var i\u003dt.range(e,r-kt,n).concat(r);return function(t){return i.map((function(e){return[e,t]}))}}function Vn(t){return t.source}function qn(t){return t.target}t.geo.path\u003dfunction(){var e,r,n,i,a,o\u003d4.5;function s(e){return e\u0026\u0026(\"function\"\u003d\u003dtypeof o\u0026\u0026i.pointRadius(+o.apply(this,arguments)),a\u0026\u0026a.valid||(a\u003dn(i)),t.geo.stream(e,a)),i.result()}function l(){return a\u003dnull,s}return s.area\u003dfunction(e){return sn\u003d0,t.geo.stream(e,n(pn)),sn},s.centroid\u003dfunction(e){return xr\u003dbr\u003d_r\u003dwr\u003dTr\u003dkr\u003dMr\u003dAr\u003dSr\u003d0,t.geo.stream(e,n(xn)),Sr?[Mr/Sr,Ar/Sr]:kr?[wr/kr,Tr/kr]:_r?[xr/_r,br/_r]:[NaN,NaN]},s.bounds\u003dfunction(e){return fn\u003dhn\u003d-(cn\u003dun\u003d1/0),t.geo.stream(e,n(mn)),[[cn,un],[fn,hn]]},s.projection\u003dfunction(t){return arguments.length?(n\u003d(e\u003dt)?t.stream||An(t):C,l()):e},s.context\u003dfunction(t){return arguments.length?(i\u003dnull\u003d\u003d(r\u003dt)?new gn:new kn(t),\"function\"!\u003dtypeof o\u0026\u0026i.pointRadius(o),l()):r},s.pointRadius\u003dfunction(t){return arguments.length?(o\u003d\"function\"\u003d\u003dtypeof t?t:(i.pointRadius(+t),+t),s):o},s.projection(t.geo.albersUsa()).context(null)},t.geo.transform\u003dfunction(t){return{stream:function(e){var r\u003dnew Sn(e);for(var n in t)r[n]\u003dt[n];return r}}},Sn.prototype\u003d{point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},t.geo.projection\u003dLn,t.geo.projectionMutator\u003dCn,(t.geo.equirectangular\u003dfunction(){return Ln(In)}).raw\u003dIn.invert\u003dIn,t.geo.rotation\u003dfunction(t){function e(e){return(e\u003dt(e[0]*Ct,e[1]*Ct))[0]*\u003dPt,e[1]*\u003dPt,e}return t\u003dzn(t[0]%360*Ct,t[1]*Ct,t.length\u003e2?t[2]*Ct:0),e.invert\u003dfunction(e){return(e\u003dt.invert(e[0]*Ct,e[1]*Ct))[0]*\u003dPt,e[1]*\u003dPt,e},e},On.invert\u003dIn,t.geo.circle\u003dfunction(){var t,e,r\u003d[0,0],n\u003d6;function i(){var t\u003d\"function\"\u003d\u003dtypeof r?r.apply(this,arguments):r,n\u003dzn(-t[0]*Ct,-t[1]*Ct,0).invert,i\u003d[];return e(null,null,1,{point:function(t,e){i.push(t\u003dn(t,e)),t[0]*\u003dPt,t[1]*\u003dPt}}),{type:\"Polygon\",coordinates:[i]}}return i.origin\u003dfunction(t){return arguments.length?(r\u003dt,i):r},i.angle\u003dfunction(r){return arguments.length?(e\u003dBn((t\u003d+r)*Ct,n*Ct),i):t},i.precision\u003dfunction(r){return arguments.length?(e\u003dBn(t*Ct,(n\u003d+r)*Ct),i):n},i.angle(90)},t.geo.distance\u003dfunction(t,e){var r,n\u003d(e[0]-t[0])*Ct,i\u003dt[1]*Ct,a\u003de[1]*Ct,o\u003dMath.sin(n),s\u003dMath.cos(n),l\u003dMath.sin(i),c\u003dMath.cos(i),u\u003dMath.sin(a),f\u003dMath.cos(a);return Math.atan2(Math.sqrt((r\u003df*o)*r+(r\u003dc*u-l*f*s)*r),l*u+c*f*s)},t.geo.graticule\u003dfunction(){var e,r,n,i,a,o,s,l,c,u,f,h,p\u003d10,d\u003dp,m\u003d90,g\u003d360,v\u003d2.5;function x(){return{type:\"MultiLineString\",coordinates:b()}}function b(){return t.range(Math.ceil(i/m)*m,n,m).map(f).concat(t.range(Math.ceil(l/g)*g,s,g).map(h)).concat(t.range(Math.ceil(r/p)*p,e,p).filter((function(t){return y(t%m)\u003ekt})).map(c)).concat(t.range(Math.ceil(o/d)*d,a,d).filter((function(t){return y(t%g)\u003ekt})).map(u))}return x.lines\u003dfunction(){return b().map((function(t){return{type:\"LineString\",coordinates:t}}))},x.outline\u003dfunction(){return{type:\"Polygon\",coordinates:[f(i).concat(h(s).slice(1),f(n).reverse().slice(1),h(l).reverse().slice(1))]}},x.extent\u003dfunction(t){return arguments.length?x.majorExtent(t).minorExtent(t):x.minorExtent()},x.majorExtent\u003dfunction(t){return arguments.length?(i\u003d+t[0][0],n\u003d+t[1][0],l\u003d+t[0][1],s\u003d+t[1][1],i\u003en\u0026\u0026(t\u003di,i\u003dn,n\u003dt),l\u003es\u0026\u0026(t\u003dl,l\u003ds,s\u003dt),x.precision(v)):[[i,l],[n,s]]},x.minorExtent\u003dfunction(t){return arguments.length?(r\u003d+t[0][0],e\u003d+t[1][0],o\u003d+t[0][1],a\u003d+t[1][1],r\u003ee\u0026\u0026(t\u003dr,r\u003de,e\u003dt),o\u003ea\u0026\u0026(t\u003do,o\u003da,a\u003dt),x.precision(v)):[[r,o],[e,a]]},x.step\u003dfunction(t){return arguments.length?x.majorStep(t).minorStep(t):x.minorStep()},x.majorStep\u003dfunction(t){return arguments.length?(m\u003d+t[0],g\u003d+t[1],x):[m,g]},x.minorStep\u003dfunction(t){return arguments.length?(p\u003d+t[0],d\u003d+t[1],x):[p,d]},x.precision\u003dfunction(t){return arguments.length?(v\u003d+t,c\u003djn(o,a,90),u\u003dUn(r,e,v),f\u003djn(l,s,90),h\u003dUn(i,n,v),x):v},x.majorExtent([[-180,-90+kt],[180,90-kt]]).minorExtent([[-180,-80-kt],[180,80+kt]])},t.geo.greatArc\u003dfunction(){var e,r,n\u003dVn,i\u003dqn;function a(){return{type:\"LineString\",coordinates:[e||n.apply(this,arguments),r||i.apply(this,arguments)]}}return a.distance\u003dfunction(){return t.geo.distance(e||n.apply(this,arguments),r||i.apply(this,arguments))},a.source\u003dfunction(t){return arguments.length?(n\u003dt,e\u003d\"function\"\u003d\u003dtypeof t?null:t,a):n},a.target\u003dfunction(t){return arguments.length?(i\u003dt,r\u003d\"function\"\u003d\u003dtypeof t?null:t,a):i},a.precision\u003dfunction(){return arguments.length?a:0},a},t.geo.interpolate\u003dfunction(t,e){return r\u003dt[0]*Ct,n\u003dt[1]*Ct,i\u003de[0]*Ct,a\u003de[1]*Ct,o\u003dMath.cos(n),s\u003dMath.sin(n),l\u003dMath.cos(a),c\u003dMath.sin(a),u\u003do*Math.cos(r),f\u003do*Math.sin(r),h\u003dl*Math.cos(i),p\u003dl*Math.sin(i),d\u003d2*Math.asin(Math.sqrt(Ft(a-n)+o*l*Ft(i-r))),m\u003d1/Math.sin(d),(g\u003dd?function(t){var e\u003dMath.sin(t*\u003dd)*m,r\u003dMath.sin(d-t)*m,n\u003dr*u+e*h,i\u003dr*f+e*p,a\u003dr*s+e*c;return[Math.atan2(i,n)*Pt,Math.atan2(a,Math.sqrt(n*n+i*i))*Pt]}:function(){return[r*Pt,n*Pt]}).distance\u003dd,g;var r,n,i,a,o,s,l,c,u,f,h,p,d,m,g},t.geo.length\u003dfunction(e){return yn\u003d0,t.geo.stream(e,Hn),yn};var Hn\u003d{sphere:z,point:z,lineStart:function(){var t,e,r;function n(n,i){var a\u003dMath.sin(i*\u003dCt),o\u003dMath.cos(i),s\u003dy((n*\u003dCt)-t),l\u003dMath.cos(s);yn+\u003dMath.atan2(Math.sqrt((s\u003do*Math.sin(s))*s+(s\u003dr*a-e*o*l)*s),e*a+r*o*l),t\u003dn,e\u003da,r\u003do}Hn.point\u003dfunction(i,a){t\u003di*Ct,e\u003dMath.sin(a*\u003dCt),r\u003dMath.cos(a),Hn.point\u003dn},Hn.lineEnd\u003dfunction(){Hn.point\u003dHn.lineEnd\u003dz}},lineEnd:z,polygonStart:z,polygonEnd:z};function Gn(t,e){function r(e,r){var n\u003dMath.cos(e),i\u003dMath.cos(r),a\u003dt(n*i);return[a*i*Math.sin(e),a*Math.sin(r)]}return r.invert\u003dfunction(t,r){var n\u003dMath.sqrt(t*t+r*r),i\u003de(n),a\u003dMath.sin(i),o\u003dMath.cos(i);return[Math.atan2(t*a,n*o),Math.asin(n\u0026\u0026r*a/n)]},r}var Yn\u003dGn((function(t){return Math.sqrt(2/(1+t))}),(function(t){return 2*Math.asin(t/2)}));(t.geo.azimuthalEqualArea\u003dfunction(){return Ln(Yn)}).raw\u003dYn;var Wn\u003dGn((function(t){var e\u003dMath.acos(t);return e\u0026\u0026e/Math.sin(e)}),C);function Xn(t,e){var r\u003dMath.cos(t),n\u003dfunction(t){return Math.tan(At/4+t/2)},i\u003dt\u003d\u003d\u003de?Math.sin(t):Math.log(r/Math.cos(e))/Math.log(n(e)/n(t)),a\u003dr*Math.pow(n(t),i)/i;if(!i)return Kn;function o(t,e){a\u003e0?e\u003c-Lt+kt\u0026\u0026(e\u003d-Lt+kt):e\u003eLt-kt\u0026\u0026(e\u003dLt-kt);var r\u003da/Math.pow(n(e),i);return[r*Math.sin(i*t),a-r*Math.cos(i*t)]}return o.invert\u003dfunction(t,e){var r\u003da-e,n\u003dIt(i)*Math.sqrt(t*t+r*r);return[Math.atan2(t,r)/i,2*Math.atan(Math.pow(a/n,1/i))-Lt]},o}function Zn(t,e){var r\u003dMath.cos(t),n\u003dt\u003d\u003d\u003de?Math.sin(t):(r-Math.cos(e))/(e-t),i\u003dr/n+t;if(y(n)\u003ckt)return In;function a(t,e){var r\u003di-e;return[r*Math.sin(n*t),i-r*Math.cos(n*t)]}return a.invert\u003dfunction(t,e){var r\u003di-e;return[Math.atan2(t,r)/n,i-It(n)*Math.sqrt(t*t+r*r)]},a}(t.geo.azimuthalEquidistant\u003dfunction(){return Ln(Wn)}).raw\u003dWn,(t.geo.conicConformal\u003dfunction(){return an(Xn)}).raw\u003dXn,(t.geo.conicEquidistant\u003dfunction(){return an(Zn)}).raw\u003dZn;var Jn\u003dGn((function(t){return 1/t}),Math.atan);function Kn(t,e){return[t,Math.log(Math.tan(At/4+e/2))]}function Qn(t){var e,r\u003dLn(t),n\u003dr.scale,i\u003dr.translate,a\u003dr.clipExtent;return r.scale\u003dfunction(){var t\u003dn.apply(r,arguments);return t\u003d\u003d\u003dr?e?r.clipExtent(null):r:t},r.translate\u003dfunction(){var t\u003di.apply(r,arguments);return t\u003d\u003d\u003dr?e?r.clipExtent(null):r:t},r.clipExtent\u003dfunction(t){var o\u003da.apply(r,arguments);if(o\u003d\u003d\u003dr){if(e\u003dnull\u003d\u003dt){var s\u003dAt*n(),l\u003di();a([[l[0]-s,l[1]-s],[l[0]+s,l[1]+s]])}}else e\u0026\u0026(o\u003dnull);return o},r.clipExtent(null)}(t.geo.gnomonic\u003dfunction(){return Ln(Jn)}).raw\u003dJn,Kn.invert\u003dfunction(t,e){return[t,2*Math.atan(Math.exp(e))-Lt]},(t.geo.mercator\u003dfunction(){return Qn(Kn)}).raw\u003dKn;var $n\u003dGn((function(){return 1}),Math.asin);(t.geo.orthographic\u003dfunction(){return Ln($n)}).raw\u003d$n;var ti\u003dGn((function(t){return 1/(1+t)}),(function(t){return 2*Math.atan(t)}));function ei(t,e){return[Math.log(Math.tan(At/4+e/2)),-t]}function ri(t){return t[0]}function ni(t){return t[1]}function ii(t){for(var e\u003dt.length,r\u003d[0,1],n\u003d2,i\u003d2;i\u003ce;i++){for(;n\u003e1\u0026\u0026Ot(t[r[n-2]],t[r[n-1]],t[i])\u003c\u003d0;)--n;r[n++]\u003di}return r.slice(0,n)}function ai(t,e){return t[0]-e[0]||t[1]-e[1]}(t.geo.stereographic\u003dfunction(){return Ln(ti)}).raw\u003dti,ei.invert\u003dfunction(t,e){return[-e,2*Math.atan(Math.exp(t))-Lt]},(t.geo.transverseMercator\u003dfunction(){var t\u003dQn(ei),e\u003dt.center,r\u003dt.rotate;return t.center\u003dfunction(t){return t?e([-t[1],t[0]]):[(t\u003de())[1],-t[0]]},t.rotate\u003dfunction(t){return t?r([t[0],t[1],t.length\u003e2?t[2]+90:90]):[(t\u003dr())[0],t[1],t[2]-90]},r([0,0,90])}).raw\u003dei,t.geom\u003d{},t.geom.hull\u003dfunction(t){var e\u003dri,r\u003dni;if(arguments.length)return n(t);function n(t){if(t.length\u003c3)return[];var n,i\u003dde(e),a\u003dde(r),o\u003dt.length,s\u003d[],l\u003d[];for(n\u003d0;n\u003co;n++)s.push([+i.call(this,t[n],n),+a.call(this,t[n],n),n]);for(s.sort(ai),n\u003d0;n\u003co;n++)l.push([s[n][0],-s[n][1]]);var c\u003dii(s),u\u003dii(l),f\u003du[0]\u003d\u003d\u003dc[0],h\u003du[u.length-1]\u003d\u003d\u003dc[c.length-1],p\u003d[];for(n\u003dc.length-1;n\u003e\u003d0;--n)p.push(t[s[c[n]][2]]);for(n\u003d+f;n\u003cu.length-h;++n)p.push(t[s[u[n]][2]]);return p}return n.x\u003dfunction(t){return arguments.length?(e\u003dt,n):e},n.y\u003dfunction(t){return arguments.length?(r\u003dt,n):r},n},t.geom.polygon\u003dfunction(t){return U(t,oi),t};var oi\u003dt.geom.polygon.prototype\u003d[];function si(t,e,r){return(r[0]-e[0])*(t[1]-e[1])\u003c(r[1]-e[1])*(t[0]-e[0])}function li(t,e,r,n){var i\u003dt[0],a\u003dr[0],o\u003de[0]-i,s\u003dn[0]-a,l\u003dt[1],c\u003dr[1],u\u003de[1]-l,f\u003dn[1]-c,h\u003d(s*(l-c)-f*(i-a))/(f*o-s*u);return[i+h*o,l+h*u]}function ci(t){var e\u003dt[0],r\u003dt[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}oi.area\u003dfunction(){for(var t,e\u003d-1,r\u003dthis.length,n\u003dthis[r-1],i\u003d0;++e\u003cr;)t\u003dn,n\u003dthis[e],i+\u003dt[1]*n[0]-t[0]*n[1];return.5*i},oi.centroid\u003dfunction(t){var e,r,n\u003d-1,i\u003dthis.length,a\u003d0,o\u003d0,s\u003dthis[i-1];for(arguments.length||(t\u003d-1/(6*this.area()));++n\u003ci;)e\u003ds,s\u003dthis[n],r\u003de[0]*s[1]-s[0]*e[1],a+\u003d(e[0]+s[0])*r,o+\u003d(e[1]+s[1])*r;return[a*t,o*t]},oi.clip\u003dfunction(t){for(var e,r,n,i,a,o,s\u003dci(t),l\u003d-1,c\u003dthis.length-ci(this),u\u003dthis[c-1];++l\u003cc;){for(e\u003dt.slice(),t.length\u003d0,i\u003dthis[l],a\u003de[(n\u003de.length-s)-1],r\u003d-1;++r\u003cn;)si(o\u003de[r],u,i)?(si(a,u,i)||t.push(li(a,o,u,i)),t.push(o)):si(a,u,i)\u0026\u0026t.push(li(a,o,u,i)),a\u003do;s\u0026\u0026t.push(t[0]),u\u003di}return t};var ui,fi,hi,pi,di,mi\u003d[],gi\u003d[];function vi(){Ri(this),this.edge\u003dthis.site\u003dthis.circle\u003dnull}function yi(t){var e\u003dmi.pop()||new vi;return e.site\u003dt,e}function xi(t){Ei(t),hi.remove(t),mi.push(t),Ri(t)}function bi(t){var e\u003dt.circle,r\u003de.x,n\u003de.cy,i\u003d{x:r,y:n},a\u003dt.P,o\u003dt.N,s\u003d[t];xi(t);for(var l\u003da;l.circle\u0026\u0026y(r-l.circle.x)\u003ckt\u0026\u0026y(n-l.circle.cy)\u003ckt;)a\u003dl.P,s.unshift(l),xi(l),l\u003da;s.unshift(l),Ei(l);for(var c\u003do;c.circle\u0026\u0026y(r-c.circle.x)\u003ckt\u0026\u0026y(n-c.circle.cy)\u003ckt;)o\u003dc.N,s.push(c),xi(c),c\u003do;s.push(c),Ei(c);var u,f\u003ds.length;for(u\u003d1;u\u003cf;++u)c\u003ds[u],l\u003ds[u-1],Oi(c.edge,l.site,c.site,i);l\u003ds[0],(c\u003ds[f-1]).edge\u003dPi(l.site,c.site,null,i),Si(l),Si(c)}function _i(t){for(var e,r,n,i,a\u003dt.x,o\u003dt.y,s\u003dhi._;s;)if((n\u003dwi(s,o)-a)\u003ekt)s\u003ds.L;else{if(!((i\u003da-Ti(s,o))\u003ekt)){n\u003e-kt?(e\u003ds.P,r\u003ds):i\u003e-kt?(e\u003ds,r\u003ds.N):e\u003dr\u003ds;break}if(!s.R){e\u003ds;break}s\u003ds.R}var l\u003dyi(t);if(hi.insert(e,l),e||r){if(e\u003d\u003d\u003dr)return Ei(e),r\u003dyi(e.site),hi.insert(l,r),l.edge\u003dr.edge\u003dPi(e.site,l.site),Si(e),void Si(r);if(r){Ei(e),Ei(r);var c\u003de.site,u\u003dc.x,f\u003dc.y,h\u003dt.x-u,p\u003dt.y-f,d\u003dr.site,m\u003dd.x-u,g\u003dd.y-f,v\u003d2*(h*g-p*m),y\u003dh*h+p*p,x\u003dm*m+g*g,b\u003d{x:(g*y-p*x)/v+u,y:(h*x-m*y)/v+f};Oi(r.edge,c,d,b),l.edge\u003dPi(c,t,null,b),r.edge\u003dPi(t,d,null,b),Si(e),Si(r)}else l.edge\u003dPi(e.site,l.site)}}function wi(t,e){var r\u003dt.site,n\u003dr.x,i\u003dr.y,a\u003di-e;if(!a)return n;var o\u003dt.P;if(!o)return-1/0;var s\u003d(r\u003do.site).x,l\u003dr.y,c\u003dl-e;if(!c)return s;var u\u003ds-n,f\u003d1/a-1/c,h\u003du/c;return f?(-h+Math.sqrt(h*h-2*f*(u*u/(-2*c)-l+c/2+i-a/2)))/f+n:(n+s)/2}function Ti(t,e){var r\u003dt.N;if(r)return wi(r,e);var n\u003dt.site;return n.y\u003d\u003d\u003de?n.x:1/0}function ki(t){this.site\u003dt,this.edges\u003d[]}function Mi(t,e){return e.angle-t.angle}function Ai(){Ri(this),this.x\u003dthis.y\u003dthis.arc\u003dthis.site\u003dthis.cy\u003dnull}function Si(t){var e\u003dt.P,r\u003dt.N;if(e\u0026\u0026r){var n\u003de.site,i\u003dt.site,a\u003dr.site;if(n!\u003d\u003da){var o\u003di.x,s\u003di.y,l\u003dn.x-o,c\u003dn.y-s,u\u003da.x-o,f\u003d2*(l*(g\u003da.y-s)-c*u);if(!(f\u003e\u003d-Mt)){var h\u003dl*l+c*c,p\u003du*u+g*g,d\u003d(g*h-c*p)/f,m\u003d(l*p-u*h)/f,g\u003dm+s,v\u003dgi.pop()||new Ai;v.arc\u003dt,v.site\u003di,v.x\u003dd+o,v.y\u003dg+Math.sqrt(d*d+m*m),v.cy\u003dg,t.circle\u003dv;for(var y\u003dnull,x\u003ddi._;x;)if(v.y\u003cx.y||v.y\u003d\u003d\u003dx.y\u0026\u0026v.x\u003c\u003dx.x){if(!x.L){y\u003dx.P;break}x\u003dx.L}else{if(!x.R){y\u003dx;break}x\u003dx.R}di.insert(y,v),y||(pi\u003dv)}}}}function Ei(t){var e\u003dt.circle;e\u0026\u0026(e.P||(pi\u003de.N),di.remove(e),gi.push(e),Ri(e),t.circle\u003dnull)}function Li(t,e){var r\u003dt.b;if(r)return!0;var n,i,a\u003dt.a,o\u003de[0][0],s\u003de[1][0],l\u003de[0][1],c\u003de[1][1],u\u003dt.l,f\u003dt.r,h\u003du.x,p\u003du.y,d\u003df.x,m\u003df.y,g\u003d(h+d)/2,v\u003d(p+m)/2;if(m\u003d\u003d\u003dp){if(g\u003co||g\u003e\u003ds)return;if(h\u003ed){if(a){if(a.y\u003e\u003dc)return}else a\u003d{x:g,y:l};r\u003d{x:g,y:c}}else{if(a){if(a.y\u003cl)return}else a\u003d{x:g,y:c};r\u003d{x:g,y:l}}}else if(i\u003dv-(n\u003d(h-d)/(m-p))*g,n\u003c-1||n\u003e1)if(h\u003ed){if(a){if(a.y\u003e\u003dc)return}else a\u003d{x:(l-i)/n,y:l};r\u003d{x:(c-i)/n,y:c}}else{if(a){if(a.y\u003cl)return}else a\u003d{x:(c-i)/n,y:c};r\u003d{x:(l-i)/n,y:l}}else if(p\u003cm){if(a){if(a.x\u003e\u003ds)return}else a\u003d{x:o,y:n*o+i};r\u003d{x:s,y:n*s+i}}else{if(a){if(a.x\u003co)return}else a\u003d{x:s,y:n*s+i};r\u003d{x:o,y:n*o+i}}return t.a\u003da,t.b\u003dr,!0}function Ci(t,e){this.l\u003dt,this.r\u003de,this.a\u003dthis.b\u003dnull}function Pi(t,e,r,n){var i\u003dnew Ci(t,e);return ui.push(i),r\u0026\u0026Oi(i,t,e,r),n\u0026\u0026Oi(i,e,t,n),fi[t.i].edges.push(new zi(i,t,e)),fi[e.i].edges.push(new zi(i,e,t)),i}function Ii(t,e,r){var n\u003dnew Ci(t,null);return n.a\u003de,n.b\u003dr,ui.push(n),n}function Oi(t,e,r,n){t.a||t.b?t.l\u003d\u003d\u003dr?t.b\u003dn:t.a\u003dn:(t.a\u003dn,t.l\u003de,t.r\u003dr)}function zi(t,e,r){var n\u003dt.a,i\u003dt.b;this.edge\u003dt,this.site\u003de,this.angle\u003dr?Math.atan2(r.y-e.y,r.x-e.x):t.l\u003d\u003d\u003de?Math.atan2(i.x-n.x,n.y-i.y):Math.atan2(n.x-i.x,i.y-n.y)}function Di(){this._\u003dnull}function Ri(t){t.U\u003dt.C\u003dt.L\u003dt.R\u003dt.P\u003dt.N\u003dnull}function Fi(t,e){var r\u003de,n\u003de.R,i\u003dr.U;i?i.L\u003d\u003d\u003dr?i.L\u003dn:i.R\u003dn:t._\u003dn,n.U\u003di,r.U\u003dn,r.R\u003dn.L,r.R\u0026\u0026(r.R.U\u003dr),n.L\u003dr}function Bi(t,e){var r\u003de,n\u003de.L,i\u003dr.U;i?i.L\u003d\u003d\u003dr?i.L\u003dn:i.R\u003dn:t._\u003dn,n.U\u003di,r.U\u003dn,r.L\u003dn.R,r.L\u0026\u0026(r.L.U\u003dr),n.R\u003dr}function Ni(t){for(;t.L;)t\u003dt.L;return t}function ji(t,e){var r,n,i,a\u003dt.sort(Ui).pop();for(ui\u003d[],fi\u003dnew Array(t.length),hi\u003dnew Di,di\u003dnew Di;;)if(i\u003dpi,a\u0026\u0026(!i||a.y\u003ci.y||a.y\u003d\u003d\u003di.y\u0026\u0026a.x\u003ci.x))a.x\u003d\u003d\u003dr\u0026\u0026a.y\u003d\u003d\u003dn||(fi[a.i]\u003dnew ki(a),_i(a),r\u003da.x,n\u003da.y),a\u003dt.pop();else{if(!i)break;bi(i.arc)}e\u0026\u0026(function(t){for(var e,r\u003dui,n\u003drn(t[0][0],t[0][1],t[1][0],t[1][1]),i\u003dr.length;i--;)(!Li(e\u003dr[i],t)||!n(e)||y(e.a.x-e.b.x)\u003ckt\u0026\u0026y(e.a.y-e.b.y)\u003ckt)\u0026\u0026(e.a\u003de.b\u003dnull,r.splice(i,1))}(e),function(t){for(var e,r,n,i,a,o,s,l,c,u,f\u003dt[0][0],h\u003dt[1][0],p\u003dt[0][1],d\u003dt[1][1],m\u003dfi,g\u003dm.length;g--;)if((a\u003dm[g])\u0026\u0026a.prepare())for(l\u003d(s\u003da.edges).length,o\u003d0;o\u003cl;)n\u003d(u\u003ds[o].end()).x,i\u003du.y,e\u003d(c\u003ds[++o%l].start()).x,r\u003dc.y,(y(n-e)\u003ekt||y(i-r)\u003ekt)\u0026\u0026(s.splice(o,0,new zi(Ii(a.site,u,y(n-f)\u003ckt\u0026\u0026d-i\u003ekt?{x:f,y:y(e-f)\u003ckt?r:d}:y(i-d)\u003ckt\u0026\u0026h-n\u003ekt?{x:y(r-d)\u003ckt?e:h,y:d}:y(n-h)\u003ckt\u0026\u0026i-p\u003ekt?{x:h,y:y(e-h)\u003ckt?r:p}:y(i-p)\u003ckt\u0026\u0026n-f\u003ekt?{x:y(r-p)\u003ckt?e:f,y:p}:null),a.site,null)),++l)}(e));var o\u003d{cells:fi,edges:ui};return hi\u003ddi\u003dui\u003dfi\u003dnull,o}function Ui(t,e){return e.y-t.y||e.x-t.x}ki.prototype.prepare\u003dfunction(){for(var t,e\u003dthis.edges,r\u003de.length;r--;)(t\u003de[r].edge).b\u0026\u0026t.a||e.splice(r,1);return e.sort(Mi),e.length},zi.prototype\u003d{start:function(){return this.edge.l\u003d\u003d\u003dthis.site?this.edge.a:this.edge.b},end:function(){return this.edge.l\u003d\u003d\u003dthis.site?this.edge.b:this.edge.a}},Di.prototype\u003d{insert:function(t,e){var r,n,i;if(t){if(e.P\u003dt,e.N\u003dt.N,t.N\u0026\u0026(t.N.P\u003de),t.N\u003de,t.R){for(t\u003dt.R;t.L;)t\u003dt.L;t.L\u003de}else t.R\u003de;r\u003dt}else this._?(t\u003dNi(this._),e.P\u003dnull,e.N\u003dt,t.P\u003dt.L\u003de,r\u003dt):(e.P\u003de.N\u003dnull,this._\u003de,r\u003dnull);for(e.L\u003de.R\u003dnull,e.U\u003dr,e.C\u003d!0,t\u003de;r\u0026\u0026r.C;)r\u003d\u003d\u003d(n\u003dr.U).L?(i\u003dn.R)\u0026\u0026i.C?(r.C\u003di.C\u003d!1,n.C\u003d!0,t\u003dn):(t\u003d\u003d\u003dr.R\u0026\u0026(Fi(this,r),r\u003d(t\u003dr).U),r.C\u003d!1,n.C\u003d!0,Bi(this,n)):(i\u003dn.L)\u0026\u0026i.C?(r.C\u003di.C\u003d!1,n.C\u003d!0,t\u003dn):(t\u003d\u003d\u003dr.L\u0026\u0026(Bi(this,r),r\u003d(t\u003dr).U),r.C\u003d!1,n.C\u003d!0,Fi(this,n)),r\u003dt.U;this._.C\u003d!1},remove:function(t){t.N\u0026\u0026(t.N.P\u003dt.P),t.P\u0026\u0026(t.P.N\u003dt.N),t.N\u003dt.P\u003dnull;var e,r,n,i\u003dt.U,a\u003dt.L,o\u003dt.R;if(r\u003da?o?Ni(o):a:o,i?i.L\u003d\u003d\u003dt?i.L\u003dr:i.R\u003dr:this._\u003dr,a\u0026\u0026o?(n\u003dr.C,r.C\u003dt.C,r.L\u003da,a.U\u003dr,r!\u003d\u003do?(i\u003dr.U,r.U\u003dt.U,t\u003dr.R,i.L\u003dt,r.R\u003do,o.U\u003dr):(r.U\u003di,i\u003dr,t\u003dr.R)):(n\u003dt.C,t\u003dr),t\u0026\u0026(t.U\u003di),!n)if(t\u0026\u0026t.C)t.C\u003d!1;else{do{if(t\u003d\u003d\u003dthis._)break;if(t\u003d\u003d\u003di.L){if((e\u003di.R).C\u0026\u0026(e.C\u003d!1,i.C\u003d!0,Fi(this,i),e\u003di.R),e.L\u0026\u0026e.L.C||e.R\u0026\u0026e.R.C){e.R\u0026\u0026e.R.C||(e.L.C\u003d!1,e.C\u003d!0,Bi(this,e),e\u003di.R),e.C\u003di.C,i.C\u003de.R.C\u003d!1,Fi(this,i),t\u003dthis._;break}}else if((e\u003di.L).C\u0026\u0026(e.C\u003d!1,i.C\u003d!0,Bi(this,i),e\u003di.L),e.L\u0026\u0026e.L.C||e.R\u0026\u0026e.R.C){e.L\u0026\u0026e.L.C||(e.R.C\u003d!1,e.C\u003d!0,Fi(this,e),e\u003di.L),e.C\u003di.C,i.C\u003de.L.C\u003d!1,Bi(this,i),t\u003dthis._;break}e.C\u003d!0,t\u003di,i\u003di.U}while(!t.C);t\u0026\u0026(t.C\u003d!1)}}},t.geom.voronoi\u003dfunction(t){var e\u003dri,r\u003dni,n\u003de,i\u003dr,a\u003dVi;if(t)return o(t);function o(t){var e\u003dnew Array(t.length),r\u003da[0][0],n\u003da[0][1],i\u003da[1][0],o\u003da[1][1];return ji(s(t),a).cells.forEach((function(a,s){var l\u003da.edges,c\u003da.site;(e[s]\u003dl.length?l.map((function(t){var e\u003dt.start();return[e.x,e.y]})):c.x\u003e\u003dr\u0026\u0026c.x\u003c\u003di\u0026\u0026c.y\u003e\u003dn\u0026\u0026c.y\u003c\u003do?[[r,o],[i,o],[i,n],[r,n]]:[]).point\u003dt[s]})),e}function s(t){return t.map((function(t,e){return{x:Math.round(n(t,e)/kt)*kt,y:Math.round(i(t,e)/kt)*kt,i:e}}))}return o.links\u003dfunction(t){return ji(s(t)).edges.filter((function(t){return t.l\u0026\u0026t.r})).map((function(e){return{source:t[e.l.i],target:t[e.r.i]}}))},o.triangles\u003dfunction(t){var e\u003d[];return ji(s(t)).cells.forEach((function(r,n){for(var i,a,o,s,l\u003dr.site,c\u003dr.edges.sort(Mi),u\u003d-1,f\u003dc.length,h\u003dc[f-1].edge,p\u003dh.l\u003d\u003d\u003dl?h.r:h.l;++u\u003cf;)h,i\u003dp,p\u003d(h\u003dc[u].edge).l\u003d\u003d\u003dl?h.r:h.l,n\u003ci.i\u0026\u0026n\u003cp.i\u0026\u0026(o\u003di,s\u003dp,((a\u003dl).x-s.x)*(o.y-a.y)-(a.x-o.x)*(s.y-a.y)\u003c0)\u0026\u0026e.push([t[n],t[i.i],t[p.i]])})),e},o.x\u003dfunction(t){return arguments.length?(n\u003dde(e\u003dt),o):e},o.y\u003dfunction(t){return arguments.length?(i\u003dde(r\u003dt),o):r},o.clipExtent\u003dfunction(t){return arguments.length?(a\u003dnull\u003d\u003dt?Vi:t,o):a\u003d\u003d\u003dVi?null:a},o.size\u003dfunction(t){return arguments.length?o.clipExtent(t\u0026\u0026[[0,0],t]):a\u003d\u003d\u003dVi?null:a\u0026\u0026a[1]},o};var Vi\u003d[[-1e6,-1e6],[1e6,1e6]];function qi(t){return t.x}function Hi(t){return t.y}function Gi(t,e,r,n,i,a){if(!t(e,r,n,i,a)){var o\u003d.5*(r+i),s\u003d.5*(n+a),l\u003de.nodes;l[0]\u0026\u0026Gi(t,l[0],r,n,o,s),l[1]\u0026\u0026Gi(t,l[1],o,n,i,s),l[2]\u0026\u0026Gi(t,l[2],r,s,o,a),l[3]\u0026\u0026Gi(t,l[3],o,s,i,a)}}function Yi(t,e,r,n,i,a,o){var s,l\u003d1/0;return function t(c,u,f,h,p){if(!(u\u003ea||f\u003eo||h\u003cn||p\u003ci)){if(d\u003dc.point){var d,m\u003de-c.x,g\u003dr-c.y,v\u003dm*m+g*g;if(v\u003cl){var y\u003dMath.sqrt(l\u003dv);n\u003de-y,i\u003dr-y,a\u003de+y,o\u003dr+y,s\u003dd}}for(var x\u003dc.nodes,b\u003d.5*(u+h),_\u003d.5*(f+p),w\u003d(r\u003e\u003d_)\u003c\u003c1|e\u003e\u003db,T\u003dw+4;w\u003cT;++w)if(c\u003dx[3\u0026w])switch(3\u0026w){case 0:t(c,u,f,b,_);break;case 1:t(c,b,f,h,_);break;case 2:t(c,u,_,b,p);break;case 3:t(c,b,_,h,p)}}}(t,n,i,a,o),s}function Wi(e,r){e\u003dt.rgb(e),r\u003dt.rgb(r);var n\u003de.r,i\u003de.g,a\u003de.b,o\u003dr.r-n,s\u003dr.g-i,l\u003dr.b-a;return function(t){return\"#\"+se(Math.round(n+o*t))+se(Math.round(i+s*t))+se(Math.round(a+l*t))}}function Xi(t,e){var r,n\u003d{},i\u003d{};for(r in t)r in e?n[r]\u003d$i(t[r],e[r]):i[r]\u003dt[r];for(r in e)r in t||(i[r]\u003de[r]);return function(t){for(r in n)i[r]\u003dn[r](t);return i}}function Zi(t,e){return t\u003d+t,e\u003d+e,function(r){return t*(1-r)+e*r}}function Ji(t,e){var r,n,i,a\u003dKi.lastIndex\u003dQi.lastIndex\u003d0,o\u003d-1,s\u003d[],l\u003d[];for(t+\u003d\"\",e+\u003d\"\";(r\u003dKi.exec(t))\u0026\u0026(n\u003dQi.exec(e));)(i\u003dn.index)\u003ea\u0026\u0026(i\u003de.slice(a,i),s[o]?s[o]+\u003di:s[++o]\u003di),(r\u003dr[0])\u003d\u003d\u003d(n\u003dn[0])?s[o]?s[o]+\u003dn:s[++o]\u003dn:(s[++o]\u003dnull,l.push({i:o,x:Zi(r,n)})),a\u003dQi.lastIndex;return a\u003ce.length\u0026\u0026(i\u003de.slice(a),s[o]?s[o]+\u003di:s[++o]\u003di),s.length\u003c2?l[0]?(e\u003dl[0].x,function(t){return e(t)+\"\"}):function(){return e}:(e\u003dl.length,function(t){for(var r,n\u003d0;n\u003ce;++n)s[(r\u003dl[n]).i]\u003dr.x(t);return s.join(\"\")})}t.geom.delaunay\u003dfunction(e){return t.geom.voronoi().triangles(e)},t.geom.quadtree\u003dfunction(t,e,r,n,i){var a,o\u003dri,s\u003dni;if(a\u003darguments.length)return o\u003dqi,s\u003dHi,3\u003d\u003d\u003da\u0026\u0026(i\u003dr,n\u003de,r\u003de\u003d0),l(t);function l(t){var l,c,u,f,h,p,d,m,g,v\u003dde(o),x\u003dde(s);if(null!\u003de)p\u003de,d\u003dr,m\u003dn,g\u003di;else if(m\u003dg\u003d-(p\u003dd\u003d1/0),c\u003d[],u\u003d[],h\u003dt.length,a)for(f\u003d0;f\u003ch;++f)(l\u003dt[f]).x\u003cp\u0026\u0026(p\u003dl.x),l.y\u003cd\u0026\u0026(d\u003dl.y),l.x\u003em\u0026\u0026(m\u003dl.x),l.y\u003eg\u0026\u0026(g\u003dl.y),c.push(l.x),u.push(l.y);else for(f\u003d0;f\u003ch;++f){var b\u003d+v(l\u003dt[f],f),_\u003d+x(l,f);b\u003cp\u0026\u0026(p\u003db),_\u003cd\u0026\u0026(d\u003d_),b\u003em\u0026\u0026(m\u003db),_\u003eg\u0026\u0026(g\u003d_),c.push(b),u.push(_)}var w\u003dm-p,T\u003dg-d;function k(t,e,r,n,i,a,o,s){if(!isNaN(r)\u0026\u0026!isNaN(n))if(t.leaf){var l\u003dt.x,c\u003dt.y;if(null!\u003dl)if(y(l-r)+y(c-n)\u003c.01)M(t,e,r,n,i,a,o,s);else{var u\u003dt.point;t.x\u003dt.y\u003dt.point\u003dnull,M(t,u,l,c,i,a,o,s),M(t,e,r,n,i,a,o,s)}else t.x\u003dr,t.y\u003dn,t.point\u003de}else M(t,e,r,n,i,a,o,s)}function M(t,e,r,n,i,a,o,s){var l\u003d.5*(i+o),c\u003d.5*(a+s),u\u003dr\u003e\u003dl,f\u003dn\u003e\u003dc,h\u003df\u003c\u003c1|u;t.leaf\u003d!1,u?i\u003dl:o\u003dl,f?a\u003dc:s\u003dc,k(t\u003dt.nodes[h]||(t.nodes[h]\u003d{leaf:!0,nodes:[],point:null,x:null,y:null}),e,r,n,i,a,o,s)}w\u003eT?g\u003dd+w:m\u003dp+T;var A\u003d{leaf:!0,nodes:[],point:null,x:null,y:null,add:function(t){k(A,t,+v(t,++f),+x(t,f),p,d,m,g)},visit:function(t){Gi(t,A,p,d,m,g)},find:function(t){return Yi(A,t[0],t[1],p,d,m,g)}};if(f\u003d-1,null\u003d\u003de){for(;++f\u003ch;)k(A,t[f],c[f],u[f],p,d,m,g);--f}else t.forEach(A.add);return c\u003du\u003dt\u003dl\u003dnull,A}return l.x\u003dfunction(t){return arguments.length?(o\u003dt,l):o},l.y\u003dfunction(t){return arguments.length?(s\u003dt,l):s},l.extent\u003dfunction(t){return arguments.length?(null\u003d\u003dt?e\u003dr\u003dn\u003di\u003dnull:(e\u003d+t[0][0],r\u003d+t[0][1],n\u003d+t[1][0],i\u003d+t[1][1]),l):null\u003d\u003de?null:[[e,r],[n,i]]},l.size\u003dfunction(t){return arguments.length?(null\u003d\u003dt?e\u003dr\u003dn\u003di\u003dnull:(e\u003dr\u003d0,n\u003d+t[0],i\u003d+t[1]),l):null\u003d\u003de?null:[n-e,i-r]},l},t.interpolateRgb\u003dWi,t.interpolateObject\u003dXi,t.interpolateNumber\u003dZi,t.interpolateString\u003dJi;var Ki\u003d/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,Qi\u003dnew RegExp(Ki.source,\"g\");function $i(e,r){for(var n,i\u003dt.interpolators.length;--i\u003e\u003d0\u0026\u0026!(n\u003dt.interpolators[i](e,r)););return n}function ta(t,e){var r,n\u003d[],i\u003d[],a\u003dt.length,o\u003de.length,s\u003dMath.min(t.length,e.length);for(r\u003d0;r\u003cs;++r)n.push($i(t[r],e[r]));for(;r\u003ca;++r)i[r]\u003dt[r];for(;r\u003co;++r)i[r]\u003de[r];return function(t){for(r\u003d0;r\u003cs;++r)i[r]\u003dn[r](t);return i}}t.interpolate\u003d$i,t.interpolators\u003d[function(t,e){var r\u003dtypeof e;return(\"string\"\u003d\u003d\u003dr?pe.has(e.toLowerCase())||/^(#|rgb\\(|hsl\\()/i.test(e)?Wi:Ji:e instanceof Vt?Wi:Array.isArray(e)?ta:\"object\"\u003d\u003d\u003dr\u0026\u0026isNaN(e)?Xi:Zi)(t,e)}],t.interpolateArray\u003dta;var ea\u003dfunction(){return C},ra\u003dt.map({linear:ea,poly:function(t){return function(e){return Math.pow(e,t)}},quad:function(){return sa},cubic:function(){return la},sin:function(){return ua},exp:function(){return fa},circle:function(){return ha},elastic:function(t,e){var r;arguments.length\u003c2\u0026\u0026(e\u003d.45);arguments.length?r\u003de/St*Math.asin(1/t):(t\u003d1,r\u003de/4);return function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*St/e)}},back:function(t){t||(t\u003d1.70158);return function(e){return e*e*((t+1)*e-t)}},bounce:function(){return pa}}),na\u003dt.map({in:C,out:aa,\"in-out\":oa,\"out-in\":function(t){return oa(aa(t))}});function ia(t){return function(e){return e\u003c\u003d0?0:e\u003e\u003d1?1:t(e)}}function aa(t){return function(e){return 1-t(1-e)}}function oa(t){return function(e){return.5*(e\u003c.5?t(2*e):2-t(2-2*e))}}function sa(t){return t*t}function la(t){return t*t*t}function ca(t){if(t\u003c\u003d0)return 0;if(t\u003e\u003d1)return 1;var e\u003dt*t,r\u003de*t;return 4*(t\u003c.5?r:3*(t-e)+r-.75)}function ua(t){return 1-Math.cos(t*Lt)}function fa(t){return Math.pow(2,10*(t-1))}function ha(t){return 1-Math.sqrt(1-t*t)}function pa(t){return t\u003c1/2.75?7.5625*t*t:t\u003c2/2.75?7.5625*(t-\u003d1.5/2.75)*t+.75:t\u003c2.5/2.75?7.5625*(t-\u003d2.25/2.75)*t+.9375:7.5625*(t-\u003d2.625/2.75)*t+.984375}function da(t,e){return e-\u003dt,function(r){return Math.round(t+e*r)}}function ma(t){var e,r,n,i\u003d[t.a,t.b],a\u003d[t.c,t.d],o\u003dva(i),s\u003dga(i,a),l\u003dva(((e\u003da)[0]+\u003d(n\u003d-s)*(r\u003di)[0],e[1]+\u003dn*r[1],e))||0;i[0]*a[1]\u003ca[0]*i[1]\u0026\u0026(i[0]*\u003d-1,i[1]*\u003d-1,o*\u003d-1,s*\u003d-1),this.rotate\u003d(o?Math.atan2(i[1],i[0]):Math.atan2(-a[0],a[1]))*Pt,this.translate\u003d[t.e,t.f],this.scale\u003d[o,l],this.skew\u003dl?Math.atan2(s,l)*Pt:0}function ga(t,e){return t[0]*e[0]+t[1]*e[1]}function va(t){var e\u003dMath.sqrt(ga(t,t));return e\u0026\u0026(t[0]/\u003de,t[1]/\u003de),e}t.ease\u003dfunction(t){var e\u003dt.indexOf(\"-\"),n\u003de\u003e\u003d0?t.slice(0,e):t,i\u003de\u003e\u003d0?t.slice(e+1):\"in\";return n\u003dra.get(n)||ea,ia((i\u003dna.get(i)||C)(n.apply(null,r.call(arguments,1))))},t.interpolateHcl\u003dfunction(e,r){e\u003dt.hcl(e),r\u003dt.hcl(r);var n\u003de.h,i\u003de.c,a\u003de.l,o\u003dr.h-n,s\u003dr.c-i,l\u003dr.l-a;isNaN(s)\u0026\u0026(s\u003d0,i\u003disNaN(i)?r.c:i);isNaN(o)?(o\u003d0,n\u003disNaN(n)?r.h:n):o\u003e180?o-\u003d360:o\u003c-180\u0026\u0026(o+\u003d360);return function(t){return Xt(n+o*t,i+s*t,a+l*t)+\"\"}},t.interpolateHsl\u003dfunction(e,r){e\u003dt.hsl(e),r\u003dt.hsl(r);var n\u003de.h,i\u003de.s,a\u003de.l,o\u003dr.h-n,s\u003dr.s-i,l\u003dr.l-a;isNaN(s)\u0026\u0026(s\u003d0,i\u003disNaN(i)?r.s:i);isNaN(o)?(o\u003d0,n\u003disNaN(n)?r.h:n):o\u003e180?o-\u003d360:o\u003c-180\u0026\u0026(o+\u003d360);return function(t){return Gt(n+o*t,i+s*t,a+l*t)+\"\"}},t.interpolateLab\u003dfunction(e,r){e\u003dt.lab(e),r\u003dt.lab(r);var n\u003de.l,i\u003de.a,a\u003de.b,o\u003dr.l-n,s\u003dr.a-i,l\u003dr.b-a;return function(t){return Qt(n+o*t,i+s*t,a+l*t)+\"\"}},t.interpolateRound\u003dda,t.transform\u003dfunction(e){var r\u003di.createElementNS(t.ns.prefix.svg,\"g\");return(t.transform\u003dfunction(t){if(null!\u003dt){r.setAttribute(\"transform\",t);var e\u003dr.transform.baseVal.consolidate()}return new ma(e?e.matrix:ya)})(e)},ma.prototype.toString\u003dfunction(){return\"translate(\"+this.translate+\")rotate(\"+this.rotate+\")skewX(\"+this.skew+\")scale(\"+this.scale+\")\"};var ya\u003d{a:1,b:0,c:0,d:1,e:0,f:0};function xa(t){return t.length?t.pop()+\",\":\"\"}function ba(e,r){var n\u003d[],i\u003d[];return e\u003dt.transform(e),r\u003dt.transform(r),function(t,e,r,n){if(t[0]!\u003d\u003de[0]||t[1]!\u003d\u003de[1]){var i\u003dr.push(\"translate(\",null,\",\",null,\")\");n.push({i:i-4,x:Zi(t[0],e[0])},{i:i-2,x:Zi(t[1],e[1])})}else(e[0]||e[1])\u0026\u0026r.push(\"translate(\"+e+\")\")}(e.translate,r.translate,n,i),function(t,e,r,n){t!\u003d\u003de?(t-e\u003e180?e+\u003d360:e-t\u003e180\u0026\u0026(t+\u003d360),n.push({i:r.push(xa(r)+\"rotate(\",null,\")\")-2,x:Zi(t,e)})):e\u0026\u0026r.push(xa(r)+\"rotate(\"+e+\")\")}(e.rotate,r.rotate,n,i),function(t,e,r,n){t!\u003d\u003de?n.push({i:r.push(xa(r)+\"skewX(\",null,\")\")-2,x:Zi(t,e)}):e\u0026\u0026r.push(xa(r)+\"skewX(\"+e+\")\")}(e.skew,r.skew,n,i),function(t,e,r,n){if(t[0]!\u003d\u003de[0]||t[1]!\u003d\u003de[1]){var i\u003dr.push(xa(r)+\"scale(\",null,\",\",null,\")\");n.push({i:i-4,x:Zi(t[0],e[0])},{i:i-2,x:Zi(t[1],e[1])})}else 1\u003d\u003d\u003de[0]\u0026\u00261\u003d\u003d\u003de[1]||r.push(xa(r)+\"scale(\"+e+\")\")}(e.scale,r.scale,n,i),e\u003dr\u003dnull,function(t){for(var e,r\u003d-1,a\u003di.length;++r\u003ca;)n[(e\u003di[r]).i]\u003de.x(t);return n.join(\"\")}}function _a(t,e){return e\u003d(e-\u003dt\u003d+t)||1/e,function(r){return(r-t)/e}}function wa(t,e){return e\u003d(e-\u003dt\u003d+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function Ta(t){for(var e\u003dt.source,r\u003dt.target,n\u003dfunction(t,e){if(t\u003d\u003d\u003de)return t;var r\u003dka(t),n\u003dka(e),i\u003dr.pop(),a\u003dn.pop(),o\u003dnull;for(;i\u003d\u003d\u003da;)o\u003di,i\u003dr.pop(),a\u003dn.pop();return o}(e,r),i\u003d[e];e!\u003d\u003dn;)e\u003de.parent,i.push(e);for(var a\u003di.length;r!\u003d\u003dn;)i.splice(a,0,r),r\u003dr.parent;return i}function ka(t){for(var e\u003d[],r\u003dt.parent;null!\u003dr;)e.push(t),t\u003dr,r\u003dr.parent;return e.push(t),e}function Ma(t){t.fixed|\u003d2}function Aa(t){t.fixed\u0026\u003d-7}function Sa(t){t.fixed|\u003d4,t.px\u003dt.x,t.py\u003dt.y}function Ea(t){t.fixed\u0026\u003d-5}t.interpolateTransform\u003dba,t.layout\u003d{},t.layout.bundle\u003dfunction(){return function(t){for(var e\u003d[],r\u003d-1,n\u003dt.length;++r\u003cn;)e.push(Ta(t[r]));return e}},t.layout.chord\u003dfunction(){var e,r,n,i,a,o,s,l\u003d{},c\u003d0;function u(){var l,u,h,p,d,m\u003d{},g\u003d[],v\u003dt.range(i),y\u003d[];for(e\u003d[],r\u003d[],l\u003d0,p\u003d-1;++p\u003ci;){for(u\u003d0,d\u003d-1;++d\u003ci;)u+\u003dn[p][d];g.push(u),y.push(t.range(i)),l+\u003du}for(a\u0026\u0026v.sort((function(t,e){return a(g[t],g[e])})),o\u0026\u0026y.forEach((function(t,e){t.sort((function(t,r){return o(n[e][t],n[e][r])}))})),l\u003d(St-c*i)/l,u\u003d0,p\u003d-1;++p\u003ci;){for(h\u003du,d\u003d-1;++d\u003ci;){var x\u003dv[p],b\u003dy[x][d],_\u003dn[x][b],w\u003du,T\u003du+\u003d_*l;m[x+\"-\"+b]\u003d{index:x,subindex:b,startAngle:w,endAngle:T,value:_}}r[x]\u003d{index:x,startAngle:h,endAngle:u,value:g[x]},u+\u003dc}for(p\u003d-1;++p\u003ci;)for(d\u003dp-1;++d\u003ci;){var k\u003dm[p+\"-\"+d],M\u003dm[d+\"-\"+p];(k.value||M.value)\u0026\u0026e.push(k.value\u003cM.value?{source:M,target:k}:{source:k,target:M})}s\u0026\u0026f()}function f(){e.sort((function(t,e){return s((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)}))}return l.matrix\u003dfunction(t){return arguments.length?(i\u003d(n\u003dt)\u0026\u0026n.length,e\u003dr\u003dnull,l):n},l.padding\u003dfunction(t){return arguments.length?(c\u003dt,e\u003dr\u003dnull,l):c},l.sortGroups\u003dfunction(t){return arguments.length?(a\u003dt,e\u003dr\u003dnull,l):a},l.sortSubgroups\u003dfunction(t){return arguments.length?(o\u003dt,e\u003dnull,l):o},l.sortChords\u003dfunction(t){return arguments.length?(s\u003dt,e\u0026\u0026f(),l):s},l.chords\u003dfunction(){return e||u(),e},l.groups\u003dfunction(){return r||u(),r},l},t.layout.force\u003dfunction(){var e,r,n,i,a,o,s\u003d{},l\u003dt.dispatch(\"start\",\"tick\",\"end\"),c\u003d[1,1],u\u003d.9,f\u003dLa,h\u003dCa,p\u003d-30,d\u003dPa,m\u003d.1,g\u003d.64,v\u003d[],y\u003d[];function x(t){return function(e,r,n,i){if(e.point!\u003d\u003dt){var a\u003de.cx-t.x,o\u003de.cy-t.y,s\u003di-r,l\u003da*a+o*o;if(s*s/g\u003cl){if(l\u003cd){var c\u003de.charge/l;t.px-\u003da*c,t.py-\u003do*c}return!0}if(e.point\u0026\u0026l\u0026\u0026l\u003cd){c\u003de.pointCharge/l;t.px-\u003da*c,t.py-\u003do*c}}return!e.charge}}function b(e){e.px\u003dt.event.x,e.py\u003dt.event.y,s.resume()}return s.tick\u003dfunction(){if((n*\u003d.99)\u003c.005)return e\u003dnull,l.end({type:\"end\",alpha:n\u003d0}),!0;var r,s,f,h,d,g,b,_,w,T\u003dv.length,k\u003dy.length;for(s\u003d0;s\u003ck;++s)h\u003d(f\u003dy[s]).source,(g\u003d(_\u003d(d\u003df.target).x-h.x)*_+(w\u003dd.y-h.y)*w)\u0026\u0026(_*\u003dg\u003dn*a[s]*((g\u003dMath.sqrt(g))-i[s])/g,w*\u003dg,d.x-\u003d_*(b\u003dh.weight+d.weight?h.weight/(h.weight+d.weight):.5),d.y-\u003dw*b,h.x+\u003d_*(b\u003d1-b),h.y+\u003dw*b);if((b\u003dn*m)\u0026\u0026(_\u003dc[0]/2,w\u003dc[1]/2,s\u003d-1,b))for(;++s\u003cT;)(f\u003dv[s]).x+\u003d(_-f.x)*b,f.y+\u003d(w-f.y)*b;if(p)for(!function t(e,r,n){var i\u003d0,a\u003d0;if(e.charge\u003d0,!e.leaf)for(var o,s\u003de.nodes,l\u003ds.length,c\u003d-1;++c\u003cl;)null!\u003d(o\u003ds[c])\u0026\u0026(t(o,r,n),e.charge+\u003do.charge,i+\u003do.charge*o.cx,a+\u003do.charge*o.cy);if(e.point){e.leaf||(e.point.x+\u003dMath.random()-.5,e.point.y+\u003dMath.random()-.5);var u\u003dr*n[e.point.index];e.charge+\u003de.pointCharge\u003du,i+\u003du*e.point.x,a+\u003du*e.point.y}e.cx\u003di/e.charge,e.cy\u003da/e.charge}(r\u003dt.geom.quadtree(v),n,o),s\u003d-1;++s\u003cT;)(f\u003dv[s]).fixed||r.visit(x(f));for(s\u003d-1;++s\u003cT;)(f\u003dv[s]).fixed?(f.x\u003df.px,f.y\u003df.py):(f.x-\u003d(f.px-(f.px\u003df.x))*u,f.y-\u003d(f.py-(f.py\u003df.y))*u);l.tick({type:\"tick\",alpha:n})},s.nodes\u003dfunction(t){return arguments.length?(v\u003dt,s):v},s.links\u003dfunction(t){return arguments.length?(y\u003dt,s):y},s.size\u003dfunction(t){return arguments.length?(c\u003dt,s):c},s.linkDistance\u003dfunction(t){return arguments.length?(f\u003d\"function\"\u003d\u003dtypeof t?t:+t,s):f},s.distance\u003ds.linkDistance,s.linkStrength\u003dfunction(t){return arguments.length?(h\u003d\"function\"\u003d\u003dtypeof t?t:+t,s):h},s.friction\u003dfunction(t){return arguments.length?(u\u003d+t,s):u},s.charge\u003dfunction(t){return arguments.length?(p\u003d\"function\"\u003d\u003dtypeof t?t:+t,s):p},s.chargeDistance\u003dfunction(t){return arguments.length?(d\u003dt*t,s):Math.sqrt(d)},s.gravity\u003dfunction(t){return arguments.length?(m\u003d+t,s):m},s.theta\u003dfunction(t){return arguments.length?(g\u003dt*t,s):Math.sqrt(g)},s.alpha\u003dfunction(t){return arguments.length?(t\u003d+t,n?t\u003e0?n\u003dt:(e.c\u003dnull,e.t\u003dNaN,e\u003dnull,l.end({type:\"end\",alpha:n\u003d0})):t\u003e0\u0026\u0026(l.start({type:\"start\",alpha:n\u003dt}),e\u003dwe(s.tick)),s):n},s.start\u003dfunction(){var t,e,r,n\u003dv.length,l\u003dy.length,u\u003dc[0],d\u003dc[1];for(t\u003d0;t\u003cn;++t)(r\u003dv[t]).index\u003dt,r.weight\u003d0;for(t\u003d0;t\u003cl;++t)\"number\"\u003d\u003dtypeof(r\u003dy[t]).source\u0026\u0026(r.source\u003dv[r.source]),\"number\"\u003d\u003dtypeof r.target\u0026\u0026(r.target\u003dv[r.target]),++r.source.weight,++r.target.weight;for(t\u003d0;t\u003cn;++t)r\u003dv[t],isNaN(r.x)\u0026\u0026(r.x\u003dm(\"x\",u)),isNaN(r.y)\u0026\u0026(r.y\u003dm(\"y\",d)),isNaN(r.px)\u0026\u0026(r.px\u003dr.x),isNaN(r.py)\u0026\u0026(r.py\u003dr.y);if(i\u003d[],\"function\"\u003d\u003dtypeof f)for(t\u003d0;t\u003cl;++t)i[t]\u003d+f.call(this,y[t],t);else for(t\u003d0;t\u003cl;++t)i[t]\u003df;if(a\u003d[],\"function\"\u003d\u003dtypeof h)for(t\u003d0;t\u003cl;++t)a[t]\u003d+h.call(this,y[t],t);else for(t\u003d0;t\u003cl;++t)a[t]\u003dh;if(o\u003d[],\"function\"\u003d\u003dtypeof p)for(t\u003d0;t\u003cn;++t)o[t]\u003d+p.call(this,v[t],t);else for(t\u003d0;t\u003cn;++t)o[t]\u003dp;function m(r,i){if(!e){for(e\u003dnew Array(n),c\u003d0;c\u003cn;++c)e[c]\u003d[];for(c\u003d0;c\u003cl;++c){var a\u003dy[c];e[a.source.index].push(a.target),e[a.target.index].push(a.source)}}for(var o,s\u003de[t],c\u003d-1,u\u003ds.length;++c\u003cu;)if(!isNaN(o\u003ds[c][r]))return o;return Math.random()*i}return s.resume()},s.resume\u003dfunction(){return s.alpha(.1)},s.stop\u003dfunction(){return s.alpha(0)},s.drag\u003dfunction(){if(r||(r\u003dt.behavior.drag().origin(C).on(\"dragstart.force\",Ma).on(\"drag.force\",b).on(\"dragend.force\",Aa)),!arguments.length)return r;this.on(\"mouseover.force\",Sa).on(\"mouseout.force\",Ea).call(r)},t.rebind(s,l,\"on\")};var La\u003d20,Ca\u003d1,Pa\u003d1/0;function Ia(e,r){return t.rebind(e,r,\"sort\",\"children\",\"value\"),e.nodes\u003de,e.links\u003dBa,e}function Oa(t,e){for(var r\u003d[t];null!\u003d(t\u003dr.pop());)if(e(t),(i\u003dt.children)\u0026\u0026(n\u003di.length))for(var n,i;--n\u003e\u003d0;)r.push(i[n])}function za(t,e){for(var r\u003d[t],n\u003d[];null!\u003d(t\u003dr.pop());)if(n.push(t),(a\u003dt.children)\u0026\u0026(i\u003da.length))for(var i,a,o\u003d-1;++o\u003ci;)r.push(a[o]);for(;null!\u003d(t\u003dn.pop());)e(t)}function Da(t){return t.children}function Ra(t){return t.value}function Fa(t,e){return e.value-t.value}function Ba(e){return t.merge(e.map((function(t){return(t.children||[]).map((function(e){return{source:t,target:e}}))})))}t.layout.hierarchy\u003dfunction(){var t\u003dFa,e\u003dDa,r\u003dRa;function n(i){var a,o\u003d[i],s\u003d[];for(i.depth\u003d0;null!\u003d(a\u003do.pop());)if(s.push(a),(c\u003de.call(n,a,a.depth))\u0026\u0026(l\u003dc.length)){for(var l,c,u;--l\u003e\u003d0;)o.push(u\u003dc[l]),u.parent\u003da,u.depth\u003da.depth+1;r\u0026\u0026(a.value\u003d0),a.children\u003dc}else r\u0026\u0026(a.value\u003d+r.call(n,a,a.depth)||0),delete a.children;return za(i,(function(e){var n,i;t\u0026\u0026(n\u003de.children)\u0026\u0026n.sort(t),r\u0026\u0026(i\u003de.parent)\u0026\u0026(i.value+\u003de.value)})),s}return n.sort\u003dfunction(e){return arguments.length?(t\u003de,n):t},n.children\u003dfunction(t){return arguments.length?(e\u003dt,n):e},n.value\u003dfunction(t){return arguments.length?(r\u003dt,n):r},n.revalue\u003dfunction(t){return r\u0026\u0026(Oa(t,(function(t){t.children\u0026\u0026(t.value\u003d0)})),za(t,(function(t){var e;t.children||(t.value\u003d+r.call(n,t,t.depth)||0),(e\u003dt.parent)\u0026\u0026(e.value+\u003dt.value)}))),t},n},t.layout.partition\u003dfunction(){var e\u003dt.layout.hierarchy(),r\u003d[1,1];function n(t,n){var i\u003de.call(this,t,n);return function t(e,r,n,i){var a\u003de.children;if(e.x\u003dr,e.y\u003de.depth*i,e.dx\u003dn,e.dy\u003di,a\u0026\u0026(o\u003da.length)){var o,s,l,c\u003d-1;for(n\u003de.value?n/e.value:0;++c\u003co;)t(s\u003da[c],r,l\u003ds.value*n,i),r+\u003dl}}(i[0],0,r[0],r[1]/function t(e){var r\u003de.children,n\u003d0;if(r\u0026\u0026(i\u003dr.length))for(var i,a\u003d-1;++a\u003ci;)n\u003dMath.max(n,t(r[a]));return 1+n}(i[0])),i}return n.size\u003dfunction(t){return arguments.length?(r\u003dt,n):r},Ia(n,e)},t.layout.pie\u003dfunction(){var e\u003dNumber,r\u003dNa,n\u003d0,i\u003dSt,a\u003d0;function o(s){var l,c\u003ds.length,u\u003ds.map((function(t,r){return+e.call(o,t,r)})),f\u003d+(\"function\"\u003d\u003dtypeof n?n.apply(this,arguments):n),h\u003d(\"function\"\u003d\u003dtypeof i?i.apply(this,arguments):i)-f,p\u003dMath.min(Math.abs(h)/c,+(\"function\"\u003d\u003dtypeof a?a.apply(this,arguments):a)),d\u003dp*(h\u003c0?-1:1),m\u003dt.sum(u),g\u003dm?(h-c*d)/m:0,v\u003dt.range(c),y\u003d[];return null!\u003dr\u0026\u0026v.sort(r\u003d\u003d\u003dNa?function(t,e){return u[e]-u[t]}:function(t,e){return r(s[t],s[e])}),v.forEach((function(t){y[t]\u003d{data:s[t],value:l\u003du[t],startAngle:f,endAngle:f+\u003dl*g+d,padAngle:p}})),y}return o.value\u003dfunction(t){return arguments.length?(e\u003dt,o):e},o.sort\u003dfunction(t){return arguments.length?(r\u003dt,o):r},o.startAngle\u003dfunction(t){return arguments.length?(n\u003dt,o):n},o.endAngle\u003dfunction(t){return arguments.length?(i\u003dt,o):i},o.padAngle\u003dfunction(t){return arguments.length?(a\u003dt,o):a},o};var Na\u003d{};function ja(t){return t.x}function Ua(t){return t.y}function Va(t,e,r){t.y0\u003de,t.y\u003dr}t.layout.stack\u003dfunction(){var e\u003dC,r\u003dGa,n\u003dYa,i\u003dVa,a\u003dja,o\u003dUa;function s(l,c){if(!(p\u003dl.length))return l;var u\u003dl.map((function(t,r){return e.call(s,t,r)})),f\u003du.map((function(t){return t.map((function(t,e){return[a.call(s,t,e),o.call(s,t,e)]}))})),h\u003dr.call(s,f,c);u\u003dt.permute(u,h),f\u003dt.permute(f,h);var p,d,m,g,v\u003dn.call(s,f,c),y\u003du[0].length;for(m\u003d0;m\u003cy;++m)for(i.call(s,u[0][m],g\u003dv[m],f[0][m][1]),d\u003d1;d\u003cp;++d)i.call(s,u[d][m],g+\u003df[d-1][m][1],f[d][m][1]);return l}return s.values\u003dfunction(t){return arguments.length?(e\u003dt,s):e},s.order\u003dfunction(t){return arguments.length?(r\u003d\"function\"\u003d\u003dtypeof t?t:qa.get(t)||Ga,s):r},s.offset\u003dfunction(t){return arguments.length?(n\u003d\"function\"\u003d\u003dtypeof t?t:Ha.get(t)||Ya,s):n},s.x\u003dfunction(t){return arguments.length?(a\u003dt,s):a},s.y\u003dfunction(t){return arguments.length?(o\u003dt,s):o},s.out\u003dfunction(t){return arguments.length?(i\u003dt,s):i},s};var qa\u003dt.map({\"inside-out\":function(e){var r,n,i\u003de.length,a\u003de.map(Wa),o\u003de.map(Xa),s\u003dt.range(i).sort((function(t,e){return a[t]-a[e]})),l\u003d0,c\u003d0,u\u003d[],f\u003d[];for(r\u003d0;r\u003ci;++r)n\u003ds[r],l\u003cc?(l+\u003do[n],u.push(n)):(c+\u003do[n],f.push(n));return f.reverse().concat(u)},reverse:function(e){return t.range(e.length).reverse()},default:Ga}),Ha\u003dt.map({silhouette:function(t){var e,r,n,i\u003dt.length,a\u003dt[0].length,o\u003d[],s\u003d0,l\u003d[];for(r\u003d0;r\u003ca;++r){for(e\u003d0,n\u003d0;e\u003ci;e++)n+\u003dt[e][r][1];n\u003es\u0026\u0026(s\u003dn),o.push(n)}for(r\u003d0;r\u003ca;++r)l[r]\u003d(s-o[r])/2;return l},wiggle:function(t){var e,r,n,i,a,o,s,l,c,u\u003dt.length,f\u003dt[0],h\u003df.length,p\u003d[];for(p[0]\u003dl\u003dc\u003d0,r\u003d1;r\u003ch;++r){for(e\u003d0,i\u003d0;e\u003cu;++e)i+\u003dt[e][r][1];for(e\u003d0,a\u003d0,s\u003df[r][0]-f[r-1][0];e\u003cu;++e){for(n\u003d0,o\u003d(t[e][r][1]-t[e][r-1][1])/(2*s);n\u003ce;++n)o+\u003d(t[n][r][1]-t[n][r-1][1])/s;a+\u003do*t[e][r][1]}p[r]\u003dl-\u003di?a/i*s:0,l\u003cc\u0026\u0026(c\u003dl)}for(r\u003d0;r\u003ch;++r)p[r]-\u003dc;return p},expand:function(t){var e,r,n,i\u003dt.length,a\u003dt[0].length,o\u003d1/i,s\u003d[];for(r\u003d0;r\u003ca;++r){for(e\u003d0,n\u003d0;e\u003ci;e++)n+\u003dt[e][r][1];if(n)for(e\u003d0;e\u003ci;e++)t[e][r][1]/\u003dn;else for(e\u003d0;e\u003ci;e++)t[e][r][1]\u003do}for(r\u003d0;r\u003ca;++r)s[r]\u003d0;return s},zero:Ya});function Ga(e){return t.range(e.length)}function Ya(t){for(var e\u003d-1,r\u003dt[0].length,n\u003d[];++e\u003cr;)n[e]\u003d0;return n}function Wa(t){for(var e,r\u003d1,n\u003d0,i\u003dt[0][1],a\u003dt.length;r\u003ca;++r)(e\u003dt[r][1])\u003ei\u0026\u0026(n\u003dr,i\u003de);return n}function Xa(t){return t.reduce(Za,0)}function Za(t,e){return t+e[1]}function Ja(t,e){return Ka(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function Ka(t,e){for(var r\u003d-1,n\u003d+t[0],i\u003d(t[1]-n)/e,a\u003d[];++r\u003c\u003de;)a[r]\u003di*r+n;return a}function Qa(e){return[t.min(e),t.max(e)]}function $a(t,e){return t.value-e.value}function to(t,e){var r\u003dt._pack_next;t._pack_next\u003de,e._pack_prev\u003dt,e._pack_next\u003dr,r._pack_prev\u003de}function eo(t,e){t._pack_next\u003de,e._pack_prev\u003dt}function ro(t,e){var r\u003de.x-t.x,n\u003de.y-t.y,i\u003dt.r+e.r;return.999*i*i\u003er*r+n*n}function no(t){if((e\u003dt.children)\u0026\u0026(l\u003de.length)){var e,r,n,i,a,o,s,l,c\u003d1/0,u\u003d-1/0,f\u003d1/0,h\u003d-1/0;if(e.forEach(io),(r\u003de[0]).x\u003d-r.r,r.y\u003d0,x(r),l\u003e1\u0026\u0026((n\u003de[1]).x\u003dn.r,n.y\u003d0,x(n),l\u003e2))for(oo(r,n,i\u003de[2]),x(i),to(r,i),r._pack_prev\u003di,to(i,n),n\u003dr._pack_next,a\u003d3;a\u003cl;a++){oo(r,n,i\u003de[a]);var p\u003d0,d\u003d1,m\u003d1;for(o\u003dn._pack_next;o!\u003d\u003dn;o\u003do._pack_next,d++)if(ro(o,i)){p\u003d1;break}if(1\u003d\u003dp)for(s\u003dr._pack_prev;s!\u003d\u003do._pack_prev\u0026\u0026!ro(s,i);s\u003ds._pack_prev,m++);p?(d\u003cm||d\u003d\u003dm\u0026\u0026n.r\u003cr.r?eo(r,n\u003do):eo(r\u003ds,n),a--):(to(r,i),n\u003di,x(i))}var g\u003d(c+u)/2,v\u003d(f+h)/2,y\u003d0;for(a\u003d0;a\u003cl;a++)(i\u003de[a]).x-\u003dg,i.y-\u003dv,y\u003dMath.max(y,i.r+Math.sqrt(i.x*i.x+i.y*i.y));t.r\u003dy,e.forEach(ao)}function x(t){c\u003dMath.min(t.x-t.r,c),u\u003dMath.max(t.x+t.r,u),f\u003dMath.min(t.y-t.r,f),h\u003dMath.max(t.y+t.r,h)}}function io(t){t._pack_next\u003dt._pack_prev\u003dt}function ao(t){delete t._pack_next,delete t._pack_prev}function oo(t,e,r){var n\u003dt.r+r.r,i\u003de.x-t.x,a\u003de.y-t.y;if(n\u0026\u0026(i||a)){var o\u003de.r+r.r,s\u003di*i+a*a,l\u003d.5+((n*\u003dn)-(o*\u003do))/(2*s),c\u003dMath.sqrt(Math.max(0,2*o*(n+s)-(n-\u003ds)*n-o*o))/(2*s);r.x\u003dt.x+l*i+c*a,r.y\u003dt.y+l*a-c*i}else r.x\u003dt.x+n,r.y\u003dt.y}function so(t,e){return t.parent\u003d\u003de.parent?1:2}function lo(t){var e\u003dt.children;return e.length?e[0]:t.t}function co(t){var e,r\u003dt.children;return(e\u003dr.length)?r[e-1]:t.t}function uo(t,e,r){var n\u003dr/(e.i-t.i);e.c-\u003dn,e.s+\u003dr,t.c+\u003dn,e.z+\u003dr,e.m+\u003dr}function fo(t,e,r){return t.a.parent\u003d\u003d\u003de.parent?t.a:r}function ho(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function po(t,e){var r\u003dt.x+e[3],n\u003dt.y+e[0],i\u003dt.dx-e[1]-e[3],a\u003dt.dy-e[0]-e[2];return i\u003c0\u0026\u0026(r+\u003di/2,i\u003d0),a\u003c0\u0026\u0026(n+\u003da/2,a\u003d0),{x:r,y:n,dx:i,dy:a}}function mo(t){var e\u003dt[0],r\u003dt[t.length-1];return e\u003cr?[e,r]:[r,e]}function go(t){return t.rangeExtent?t.rangeExtent():mo(t.range())}function vo(t,e,r,n){var i\u003dr(t[0],t[1]),a\u003dn(e[0],e[1]);return function(t){return a(i(t))}}function yo(t,e){var r,n\u003d0,i\u003dt.length-1,a\u003dt[n],o\u003dt[i];return o\u003ca\u0026\u0026(r\u003dn,n\u003di,i\u003dr,r\u003da,a\u003do,o\u003dr),t[n]\u003de.floor(a),t[i]\u003de.ceil(o),t}function xo(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:bo}t.layout.histogram\u003dfunction(){var e\u003d!0,r\u003dNumber,n\u003dQa,i\u003dJa;function a(a,o){for(var s,l,c\u003d[],u\u003da.map(r,this),f\u003dn.call(this,u,o),h\u003di.call(this,f,u,o),p\u003d(o\u003d-1,u.length),d\u003dh.length-1,m\u003de?1:1/p;++o\u003cd;)(s\u003dc[o]\u003d[]).dx\u003dh[o+1]-(s.x\u003dh[o]),s.y\u003d0;if(d\u003e0)for(o\u003d-1;++o\u003cp;)(l\u003du[o])\u003e\u003df[0]\u0026\u0026l\u003c\u003df[1]\u0026\u0026((s\u003dc[t.bisect(h,l,1,d)-1]).y+\u003dm,s.push(a[o]));return c}return a.value\u003dfunction(t){return arguments.length?(r\u003dt,a):r},a.range\u003dfunction(t){return arguments.length?(n\u003dde(t),a):n},a.bins\u003dfunction(t){return arguments.length?(i\u003d\"number\"\u003d\u003dtypeof t?function(e){return Ka(e,t)}:de(t),a):i},a.frequency\u003dfunction(t){return arguments.length?(e\u003d!!t,a):e},a},t.layout.pack\u003dfunction(){var e,r\u003dt.layout.hierarchy().sort($a),n\u003d0,i\u003d[1,1];function a(t,a){var o\u003dr.call(this,t,a),s\u003do[0],l\u003di[0],c\u003di[1],u\u003dnull\u003d\u003de?Math.sqrt:\"function\"\u003d\u003dtypeof e?e:function(){return e};if(s.x\u003ds.y\u003d0,za(s,(function(t){t.r\u003d+u(t.value)})),za(s,no),n){var f\u003dn*(e?1:Math.max(2*s.r/l,2*s.r/c))/2;za(s,(function(t){t.r+\u003df})),za(s,no),za(s,(function(t){t.r-\u003df}))}return function t(e,r,n,i){var a\u003de.children;if(e.x\u003dr+\u003di*e.x,e.y\u003dn+\u003di*e.y,e.r*\u003di,a)for(var o\u003d-1,s\u003da.length;++o\u003cs;)t(a[o],r,n,i)}(s,l/2,c/2,e?1:1/Math.max(2*s.r/l,2*s.r/c)),o}return a.size\u003dfunction(t){return arguments.length?(i\u003dt,a):i},a.radius\u003dfunction(t){return arguments.length?(e\u003dnull\u003d\u003dt||\"function\"\u003d\u003dtypeof t?t:+t,a):e},a.padding\u003dfunction(t){return arguments.length?(n\u003d+t,a):n},Ia(a,r)},t.layout.tree\u003dfunction(){var e\u003dt.layout.hierarchy().sort(null).value(null),r\u003dso,n\u003d[1,1],i\u003dnull;function a(t,a){var c\u003de.call(this,t,a),u\u003dc[0],f\u003dfunction(t){var e,r\u003d{A:null,children:[t]},n\u003d[r];for(;null!\u003d(e\u003dn.pop());)for(var i,a\u003de.children,o\u003d0,s\u003da.length;o\u003cs;++o)n.push((a[o]\u003di\u003d{_:a[o],parent:e,children:(i\u003da[o].children)\u0026\u0026i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a\u003di);return r.children[0]}(u);if(za(f,o),f.parent.m\u003d-f.z,Oa(f,s),i)Oa(u,l);else{var h\u003du,p\u003du,d\u003du;Oa(u,(function(t){t.x\u003ch.x\u0026\u0026(h\u003dt),t.x\u003ep.x\u0026\u0026(p\u003dt),t.depth\u003ed.depth\u0026\u0026(d\u003dt)}));var m\u003dr(h,p)/2-h.x,g\u003dn[0]/(p.x+r(p,h)/2+m),v\u003dn[1]/(d.depth||1);Oa(u,(function(t){t.x\u003d(t.x+m)*g,t.y\u003dt.depth*v}))}return c}function o(t){var e\u003dt.children,n\u003dt.parent.children,i\u003dt.i?n[t.i-1]:null;if(e.length){!function(t){var e,r\u003d0,n\u003d0,i\u003dt.children,a\u003di.length;for(;--a\u003e\u003d0;)(e\u003di[a]).z+\u003dr,e.m+\u003dr,r+\u003de.s+(n+\u003de.c)}(t);var a\u003d(e[0].z+e[e.length-1].z)/2;i?(t.z\u003di.z+r(t._,i._),t.m\u003dt.z-a):t.z\u003da}else i\u0026\u0026(t.z\u003di.z+r(t._,i._));t.parent.A\u003dfunction(t,e,n){if(e){for(var i,a\u003dt,o\u003dt,s\u003de,l\u003da.parent.children[0],c\u003da.m,u\u003do.m,f\u003ds.m,h\u003dl.m;s\u003dco(s),a\u003dlo(a),s\u0026\u0026a;)l\u003dlo(l),(o\u003dco(o)).a\u003dt,(i\u003ds.z+f-a.z-c+r(s._,a._))\u003e0\u0026\u0026(uo(fo(s,t,n),t,i),c+\u003di,u+\u003di),f+\u003ds.m,c+\u003da.m,h+\u003dl.m,u+\u003do.m;s\u0026\u0026!co(o)\u0026\u0026(o.t\u003ds,o.m+\u003df-u),a\u0026\u0026!lo(l)\u0026\u0026(l.t\u003da,l.m+\u003dc-h,n\u003dt)}return n}(t,i,t.parent.A||n[0])}function s(t){t._.x\u003dt.z+t.parent.m,t.m+\u003dt.parent.m}function l(t){t.x*\u003dn[0],t.y\u003dt.depth*n[1]}return a.separation\u003dfunction(t){return arguments.length?(r\u003dt,a):r},a.size\u003dfunction(t){return arguments.length?(i\u003dnull\u003d\u003d(n\u003dt)?l:null,a):i?null:n},a.nodeSize\u003dfunction(t){return arguments.length?(i\u003dnull\u003d\u003d(n\u003dt)?null:l,a):i?n:null},Ia(a,e)},t.layout.cluster\u003dfunction(){var e\u003dt.layout.hierarchy().sort(null).value(null),r\u003dso,n\u003d[1,1],i\u003d!1;function a(a,o){var s,l\u003de.call(this,a,o),c\u003dl[0],u\u003d0;za(c,(function(e){var n\u003de.children;n\u0026\u0026n.length?(e.x\u003dfunction(t){return t.reduce((function(t,e){return t+e.x}),0)/t.length}(n),e.y\u003dfunction(e){return 1+t.max(e,(function(t){return t.y}))}(n)):(e.x\u003ds?u+\u003dr(e,s):0,e.y\u003d0,s\u003de)}));var f\u003dfunction t(e){var r\u003de.children;return r\u0026\u0026r.length?t(r[0]):e}(c),h\u003dfunction t(e){var r,n\u003de.children;return n\u0026\u0026(r\u003dn.length)?t(n[r-1]):e}(c),p\u003df.x-r(f,h)/2,d\u003dh.x+r(h,f)/2;return za(c,i?function(t){t.x\u003d(t.x-c.x)*n[0],t.y\u003d(c.y-t.y)*n[1]}:function(t){t.x\u003d(t.x-p)/(d-p)*n[0],t.y\u003d(1-(c.y?t.y/c.y:1))*n[1]}),l}return a.separation\u003dfunction(t){return arguments.length?(r\u003dt,a):r},a.size\u003dfunction(t){return arguments.length?(i\u003dnull\u003d\u003d(n\u003dt),a):i?null:n},a.nodeSize\u003dfunction(t){return arguments.length?(i\u003dnull!\u003d(n\u003dt),a):i?n:null},Ia(a,e)},t.layout.treemap\u003dfunction(){var e,r\u003dt.layout.hierarchy(),n\u003dMath.round,i\u003d[1,1],a\u003dnull,o\u003dho,s\u003d!1,l\u003d\"squarify\",c\u003d.5*(1+Math.sqrt(5));function u(t,e){for(var r,n,i\u003d-1,a\u003dt.length;++i\u003ca;)n\u003d(r\u003dt[i]).value*(e\u003c0?0:e),r.area\u003disNaN(n)||n\u003c\u003d0?0:n}function f(t){var e\u003dt.children;if(e\u0026\u0026e.length){var r,n,i,a\u003do(t),s\u003d[],c\u003de.slice(),h\u003d1/0,m\u003d\"slice\"\u003d\u003d\u003dl?a.dx:\"dice\"\u003d\u003d\u003dl?a.dy:\"slice-dice\"\u003d\u003d\u003dl?1\u0026t.depth?a.dy:a.dx:Math.min(a.dx,a.dy);for(u(c,a.dx*a.dy/t.value),s.area\u003d0;(i\u003dc.length)\u003e0;)s.push(r\u003dc[i-1]),s.area+\u003dr.area,\"squarify\"!\u003d\u003dl||(n\u003dp(s,m))\u003c\u003dh?(c.pop(),h\u003dn):(s.area-\u003ds.pop().area,d(s,m,a,!1),m\u003dMath.min(a.dx,a.dy),s.length\u003ds.area\u003d0,h\u003d1/0);s.length\u0026\u0026(d(s,m,a,!0),s.length\u003ds.area\u003d0),e.forEach(f)}}function h(t){var e\u003dt.children;if(e\u0026\u0026e.length){var r,n\u003do(t),i\u003de.slice(),a\u003d[];for(u(i,n.dx*n.dy/t.value),a.area\u003d0;r\u003di.pop();)a.push(r),a.area+\u003dr.area,null!\u003dr.z\u0026\u0026(d(a,r.z?n.dx:n.dy,n,!i.length),a.length\u003da.area\u003d0);e.forEach(h)}}function p(t,e){for(var r,n\u003dt.area,i\u003d0,a\u003d1/0,o\u003d-1,s\u003dt.length;++o\u003cs;)(r\u003dt[o].area)\u0026\u0026(r\u003ca\u0026\u0026(a\u003dr),r\u003ei\u0026\u0026(i\u003dr));return e*\u003de,(n*\u003dn)?Math.max(e*i*c/n,n/(e*a*c)):1/0}function d(t,e,r,i){var a,o\u003d-1,s\u003dt.length,l\u003dr.x,c\u003dr.y,u\u003de?n(t.area/e):0;if(e\u003d\u003dr.dx){for((i||u\u003er.dy)\u0026\u0026(u\u003dr.dy);++o\u003cs;)(a\u003dt[o]).x\u003dl,a.y\u003dc,a.dy\u003du,l+\u003da.dx\u003dMath.min(r.x+r.dx-l,u?n(a.area/u):0);a.z\u003d!0,a.dx+\u003dr.x+r.dx-l,r.y+\u003du,r.dy-\u003du}else{for((i||u\u003er.dx)\u0026\u0026(u\u003dr.dx);++o\u003cs;)(a\u003dt[o]).x\u003dl,a.y\u003dc,a.dx\u003du,c+\u003da.dy\u003dMath.min(r.y+r.dy-c,u?n(a.area/u):0);a.z\u003d!1,a.dy+\u003dr.y+r.dy-c,r.x+\u003du,r.dx-\u003du}}function m(t){var n\u003de||r(t),a\u003dn[0];return a.x\u003da.y\u003d0,a.value?(a.dx\u003di[0],a.dy\u003di[1]):a.dx\u003da.dy\u003d0,e\u0026\u0026r.revalue(a),u([a],a.dx*a.dy/a.value),(e?h:f)(a),s\u0026\u0026(e\u003dn),n}return m.size\u003dfunction(t){return arguments.length?(i\u003dt,m):i},m.padding\u003dfunction(t){if(!arguments.length)return a;function e(e){var r\u003dt.call(m,e,e.depth);return null\u003d\u003dr?ho(e):po(e,\"number\"\u003d\u003dtypeof r?[r,r,r,r]:r)}function r(e){return po(e,t)}var n;return o\u003dnull\u003d\u003d(a\u003dt)?ho:\"function\"\u003d\u003d(n\u003dtypeof t)?e:\"number\"\u003d\u003d\u003dn?(t\u003d[t,t,t,t],r):r,m},m.round\u003dfunction(t){return arguments.length?(n\u003dt?Math.round:Number,m):n!\u003dNumber},m.sticky\u003dfunction(t){return arguments.length?(s\u003dt,e\u003dnull,m):s},m.ratio\u003dfunction(t){return arguments.length?(c\u003dt,m):c},m.mode\u003dfunction(t){return arguments.length?(l\u003dt+\"\",m):l},Ia(m,r)},t.random\u003d{normal:function(t,e){var r\u003darguments.length;return r\u003c2\u0026\u0026(e\u003d1),r\u003c1\u0026\u0026(t\u003d0),function(){var r,n,i;do{i\u003d(r\u003d2*Math.random()-1)*r+(n\u003d2*Math.random()-1)*n}while(!i||i\u003e1);return t+e*r*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var e\u003dt.random.normal.apply(t,arguments);return function(){return Math.exp(e())}},bates:function(e){var r\u003dt.random.irwinHall(e);return function(){return r()/e}},irwinHall:function(t){return function(){for(var e\u003d0,r\u003d0;r\u003ct;r++)e+\u003dMath.random();return e}}},t.scale\u003d{};var bo\u003d{floor:C,ceil:C};function _o(e,r,n,i){var a\u003d[],o\u003d[],s\u003d0,l\u003dMath.min(e.length,r.length)-1;for(e[l]\u003ce[0]\u0026\u0026(e\u003de.slice().reverse(),r\u003dr.slice().reverse());++s\u003c\u003dl;)a.push(n(e[s-1],e[s])),o.push(i(r[s-1],r[s]));return function(r){var n\u003dt.bisect(e,r,1,l)-1;return o[n](a[n](r))}}function wo(e,r){return t.rebind(e,r,\"range\",\"rangeRound\",\"interpolate\",\"clamp\")}function To(t,e){return yo(t,xo(ko(t,e)[2])),yo(t,xo(ko(t,e)[2])),t}function ko(t,e){null\u003d\u003de\u0026\u0026(e\u003d10);var r\u003dmo(t),n\u003dr[1]-r[0],i\u003dMath.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),a\u003de/n*i;return a\u003c\u003d.15?i*\u003d10:a\u003c\u003d.35?i*\u003d5:a\u003c\u003d.75\u0026\u0026(i*\u003d2),r[0]\u003dMath.ceil(r[0]/i)*i,r[1]\u003dMath.floor(r[1]/i)*i+.5*i,r[2]\u003di,r}function Mo(e,r){return t.range.apply(t,ko(e,r))}function Ao(e,r,n){var i\u003dko(e,r);if(n){var a\u003dLe.exec(n);if(a.shift(),\"s\"\u003d\u003d\u003da[8]){var o\u003dt.formatPrefix(Math.max(y(i[0]),y(i[1])));return a[7]||(a[7]\u003d\".\"+Eo(o.scale(i[2]))),a[8]\u003d\"f\",n\u003dt.format(a.join(\"\")),function(t){return n(o.scale(t))+o.symbol}}a[7]||(a[7]\u003d\".\"+function(t,e){var r\u003dEo(e[2]);return t in So?Math.abs(r-Eo(Math.max(y(e[0]),y(e[1]))))+ +(\"e\"!\u003d\u003dt):r-2*(\"%\"\u003d\u003d\u003dt)}(a[8],i)),n\u003da.join(\"\")}else n\u003d\",.\"+Eo(i[2])+\"f\";return t.format(n)}t.scale.linear\u003dfunction(){return function t(e,r,n,i){var a,o;function s(){var t\u003dMath.min(e.length,r.length)\u003e2?_o:vo,s\u003di?wa:_a;return a\u003dt(e,r,s,n),o\u003dt(r,e,s,$i),l}function l(t){return a(t)}return l.invert\u003dfunction(t){return o(t)},l.domain\u003dfunction(t){return arguments.length?(e\u003dt.map(Number),s()):e},l.range\u003dfunction(t){return arguments.length?(r\u003dt,s()):r},l.rangeRound\u003dfunction(t){return l.range(t).interpolate(da)},l.clamp\u003dfunction(t){return arguments.length?(i\u003dt,s()):i},l.interpolate\u003dfunction(t){return arguments.length?(n\u003dt,s()):n},l.ticks\u003dfunction(t){return Mo(e,t)},l.tickFormat\u003dfunction(t,r){return Ao(e,t,r)},l.nice\u003dfunction(t){return To(e,t),s()},l.copy\u003dfunction(){return t(e,r,n,i)},s()}([0,1],[0,1],$i,!1)};var So\u003d{s:1,g:1,p:1,r:1,e:1};function Eo(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}t.scale.log\u003dfunction(){return function e(r,n,i,a){function o(t){return(i?Math.log(t\u003c0?0:t):-Math.log(t\u003e0?0:-t))/Math.log(n)}function s(t){return i?Math.pow(n,t):-Math.pow(n,-t)}function l(t){return r(o(t))}return l.invert\u003dfunction(t){return s(r.invert(t))},l.domain\u003dfunction(t){return arguments.length?(i\u003dt[0]\u003e\u003d0,r.domain((a\u003dt.map(Number)).map(o)),l):a},l.base\u003dfunction(t){return arguments.length?(n\u003d+t,r.domain(a.map(o)),l):n},l.nice\u003dfunction(){var t\u003dyo(a.map(o),i?Math:Co);return r.domain(t),a\u003dt.map(s),l},l.ticks\u003dfunction(){var t\u003dmo(a),e\u003d[],r\u003dt[0],l\u003dt[1],c\u003dMath.floor(o(r)),u\u003dMath.ceil(o(l)),f\u003dn%1?2:n;if(isFinite(u-c)){if(i){for(;c\u003cu;c++)for(var h\u003d1;h\u003cf;h++)e.push(s(c)*h);e.push(s(c))}else for(e.push(s(c));c++\u003cu;)for(h\u003df-1;h\u003e0;h--)e.push(s(c)*h);for(c\u003d0;e[c]\u003cr;c++);for(u\u003de.length;e[u-1]\u003el;u--);e\u003de.slice(c,u)}return e},l.tickFormat\u003dfunction(e,r){if(!arguments.length)return Lo;arguments.length\u003c2?r\u003dLo:\"function\"!\u003dtypeof r\u0026\u0026(r\u003dt.format(r));var i\u003dMath.max(1,n*e/l.ticks().length);return function(t){var e\u003dt/s(Math.round(o(t)));return e*n\u003cn-.5\u0026\u0026(e*\u003dn),e\u003c\u003di?r(t):\"\"}},l.copy\u003dfunction(){return e(r.copy(),n,i,a)},wo(l,r)}(t.scale.linear().domain([0,1]),10,!0,[1,10])};var Lo\u003dt.format(\".0e\"),Co\u003d{floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};function Po(t){return function(e){return e\u003c0?-Math.pow(-e,t):Math.pow(e,t)}}t.scale.pow\u003dfunction(){return function t(e,r,n){var i\u003dPo(r),a\u003dPo(1/r);function o(t){return e(i(t))}return o.invert\u003dfunction(t){return a(e.invert(t))},o.domain\u003dfunction(t){return arguments.length?(e.domain((n\u003dt.map(Number)).map(i)),o):n},o.ticks\u003dfunction(t){return Mo(n,t)},o.tickFormat\u003dfunction(t,e){return Ao(n,t,e)},o.nice\u003dfunction(t){return o.domain(To(n,t))},o.exponent\u003dfunction(t){return arguments.length?(i\u003dPo(r\u003dt),a\u003dPo(1/r),e.domain(n.map(i)),o):r},o.copy\u003dfunction(){return t(e.copy(),r,n)},wo(o,e)}(t.scale.linear(),1,[0,1])},t.scale.sqrt\u003dfunction(){return t.scale.pow().exponent(.5)},t.scale.ordinal\u003dfunction(){return function e(r,n){var i,a,o;function s(t){return a[((i.get(t)||(\"range\"\u003d\u003d\u003dn.t?i.set(t,r.push(t)):NaN))-1)%a.length]}function l(e,n){return t.range(r.length).map((function(t){return e+n*t}))}return s.domain\u003dfunction(t){if(!arguments.length)return r;r\u003d[],i\u003dnew _;for(var e,a\u003d-1,o\u003dt.length;++a\u003co;)i.has(e\u003dt[a])||i.set(e,r.push(e));return s[n.t].apply(s,n.a)},s.range\u003dfunction(t){return arguments.length?(a\u003dt,o\u003d0,n\u003d{t:\"range\",a:arguments},s):a},s.rangePoints\u003dfunction(t,e){arguments.length\u003c2\u0026\u0026(e\u003d0);var i\u003dt[0],c\u003dt[1],u\u003dr.length\u003c2?(i\u003d(i+c)/2,0):(c-i)/(r.length-1+e);return a\u003dl(i+u*e/2,u),o\u003d0,n\u003d{t:\"rangePoints\",a:arguments},s},s.rangeRoundPoints\u003dfunction(t,e){arguments.length\u003c2\u0026\u0026(e\u003d0);var i\u003dt[0],c\u003dt[1],u\u003dr.length\u003c2?(i\u003dc\u003dMath.round((i+c)/2),0):(c-i)/(r.length-1+e)|0;return a\u003dl(i+Math.round(u*e/2+(c-i-(r.length-1+e)*u)/2),u),o\u003d0,n\u003d{t:\"rangeRoundPoints\",a:arguments},s},s.rangeBands\u003dfunction(t,e,i){arguments.length\u003c2\u0026\u0026(e\u003d0),arguments.length\u003c3\u0026\u0026(i\u003de);var c\u003dt[1]\u003ct[0],u\u003dt[c-0],f\u003dt[1-c],h\u003d(f-u)/(r.length-e+2*i);return a\u003dl(u+h*i,h),c\u0026\u0026a.reverse(),o\u003dh*(1-e),n\u003d{t:\"rangeBands\",a:arguments},s},s.rangeRoundBands\u003dfunction(t,e,i){arguments.length\u003c2\u0026\u0026(e\u003d0),arguments.length\u003c3\u0026\u0026(i\u003de);var c\u003dt[1]\u003ct[0],u\u003dt[c-0],f\u003dt[1-c],h\u003dMath.floor((f-u)/(r.length-e+2*i));return a\u003dl(u+Math.round((f-u-(r.length-e)*h)/2),h),c\u0026\u0026a.reverse(),o\u003dMath.round(h*(1-e)),n\u003d{t:\"rangeRoundBands\",a:arguments},s},s.rangeBand\u003dfunction(){return o},s.rangeExtent\u003dfunction(){return mo(n.a[0])},s.copy\u003dfunction(){return e(r,n)},s.domain(r)}([],{t:\"range\",a:[[]]})},t.scale.category10\u003dfunction(){return t.scale.ordinal().range(Io)},t.scale.category20\u003dfunction(){return t.scale.ordinal().range(Oo)},t.scale.category20b\u003dfunction(){return t.scale.ordinal().range(zo)},t.scale.category20c\u003dfunction(){return t.scale.ordinal().range(Do)};var Io\u003d[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(ae),Oo\u003d[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(ae),zo\u003d[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(ae),Do\u003d[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(ae);function Ro(){return 0}t.scale.quantile\u003dfunction(){return function e(r,n){var i;function a(){var e\u003d0,a\u003dn.length;for(i\u003d[];++e\u003ca;)i[e-1]\u003dt.quantile(r,e/a);return o}function o(e){if(!isNaN(e\u003d+e))return n[t.bisect(i,e)]}return o.domain\u003dfunction(t){return arguments.length?(r\u003dt.map(p).filter(d).sort(h),a()):r},o.range\u003dfunction(t){return arguments.length?(n\u003dt,a()):n},o.quantiles\u003dfunction(){return i},o.invertExtent\u003dfunction(t){return(t\u003dn.indexOf(t))\u003c0?[NaN,NaN]:[t\u003e0?i[t-1]:r[0],t\u003ci.length?i[t]:r[r.length-1]]},o.copy\u003dfunction(){return e(r,n)},a()}([],[])},t.scale.quantize\u003dfunction(){return function t(e,r,n){var i,a;function o(t){return n[Math.max(0,Math.min(a,Math.floor(i*(t-e))))]}function s(){return i\u003dn.length/(r-e),a\u003dn.length-1,o}return o.domain\u003dfunction(t){return arguments.length?(e\u003d+t[0],r\u003d+t[t.length-1],s()):[e,r]},o.range\u003dfunction(t){return arguments.length?(n\u003dt,s()):n},o.invertExtent\u003dfunction(t){return[t\u003d(t\u003dn.indexOf(t))\u003c0?NaN:t/i+e,t+1/i]},o.copy\u003dfunction(){return t(e,r,n)},s()}(0,1,[0,1])},t.scale.threshold\u003dfunction(){return function e(r,n){function i(e){if(e\u003c\u003de)return n[t.bisect(r,e)]}return i.domain\u003dfunction(t){return arguments.length?(r\u003dt,i):r},i.range\u003dfunction(t){return arguments.length?(n\u003dt,i):n},i.invertExtent\u003dfunction(t){return t\u003dn.indexOf(t),[r[t-1],r[t]]},i.copy\u003dfunction(){return e(r,n)},i}([.5],[0,1])},t.scale.identity\u003dfunction(){return function t(e){function r(t){return+t}return r.invert\u003dr,r.domain\u003dr.range\u003dfunction(t){return arguments.length?(e\u003dt.map(r),r):e},r.ticks\u003dfunction(t){return Mo(e,t)},r.tickFormat\u003dfunction(t,r){return Ao(e,t,r)},r.copy\u003dfunction(){return t(e)},r}([0,1])},t.svg\u003d{},t.svg.arc\u003dfunction(){var t\u003dBo,e\u003dNo,r\u003dRo,n\u003dFo,i\u003djo,a\u003dUo,o\u003dVo;function s(){var s\u003dMath.max(0,+t.apply(this,arguments)),c\u003dMath.max(0,+e.apply(this,arguments)),u\u003di.apply(this,arguments)-Lt,f\u003da.apply(this,arguments)-Lt,h\u003dMath.abs(f-u),p\u003du\u003ef?0:1;if(c\u003cs\u0026\u0026(d\u003dc,c\u003ds,s\u003dd),h\u003e\u003dEt)return l(c,p)+(s?l(s,1-p):\"\")+\"Z\";var d,m,g,v,y,x,b,_,w,T,k,M,A\u003d0,S\u003d0,E\u003d[];if((v\u003d(+o.apply(this,arguments)||0)/2)\u0026\u0026(g\u003dn\u003d\u003d\u003dFo?Math.sqrt(s*s+c*c):+n.apply(this,arguments),p||(S*\u003d-1),c\u0026\u0026(S\u003dDt(g/c*Math.sin(v))),s\u0026\u0026(A\u003dDt(g/s*Math.sin(v)))),c){y\u003dc*Math.cos(u+S),x\u003dc*Math.sin(u+S),b\u003dc*Math.cos(f-S),_\u003dc*Math.sin(f-S);var L\u003dMath.abs(f-u-2*S)\u003c\u003dAt?0:1;if(S\u0026\u0026qo(y,x,b,_)\u003d\u003d\u003dp^L){var C\u003d(u+f)/2;y\u003dc*Math.cos(C),x\u003dc*Math.sin(C),b\u003d_\u003dnull}}else y\u003dx\u003d0;if(s){w\u003ds*Math.cos(f-A),T\u003ds*Math.sin(f-A),k\u003ds*Math.cos(u+A),M\u003ds*Math.sin(u+A);var P\u003dMath.abs(u-f+2*A)\u003c\u003dAt?0:1;if(A\u0026\u0026qo(w,T,k,M)\u003d\u003d\u003d1-p^P){var I\u003d(u+f)/2;w\u003ds*Math.cos(I),T\u003ds*Math.sin(I),k\u003dM\u003dnull}}else w\u003dT\u003d0;if(h\u003ekt\u0026\u0026(d\u003dMath.min(Math.abs(c-s)/2,+r.apply(this,arguments)))\u003e.001){m\u003ds\u003cc^p?0:1;var O\u003dd,z\u003dd;if(h\u003cAt){var D\u003dnull\u003d\u003dk?[w,T]:null\u003d\u003db?[y,x]:li([y,x],[k,M],[b,_],[w,T]),R\u003dy-D[0],F\u003dx-D[1],B\u003db-D[0],N\u003d_-D[1],j\u003d1/Math.sin(Math.acos((R*B+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(B*B+N*N)))/2),U\u003dMath.sqrt(D[0]*D[0]+D[1]*D[1]);z\u003dMath.min(d,(s-U)/(j-1)),O\u003dMath.min(d,(c-U)/(j+1))}if(null!\u003db){var V\u003dHo(null\u003d\u003dk?[w,T]:[k,M],[y,x],c,O,p),q\u003dHo([b,_],[w,T],c,O,p);d\u003d\u003d\u003dO?E.push(\"M\",V[0],\"A\",O,\",\",O,\" 0 0,\",m,\" \",V[1],\"A\",c,\",\",c,\" 0 \",1-p^qo(V[1][0],V[1][1],q[1][0],q[1][1]),\",\",p,\" \",q[1],\"A\",O,\",\",O,\" 0 0,\",m,\" \",q[0]):E.push(\"M\",V[0],\"A\",O,\",\",O,\" 0 1,\",m,\" \",q[0])}else E.push(\"M\",y,\",\",x);if(null!\u003dk){var H\u003dHo([y,x],[k,M],s,-z,p),G\u003dHo([w,T],null\u003d\u003db?[y,x]:[b,_],s,-z,p);d\u003d\u003d\u003dz?E.push(\"L\",G[0],\"A\",z,\",\",z,\" 0 0,\",m,\" \",G[1],\"A\",s,\",\",s,\" 0 \",p^qo(G[1][0],G[1][1],H[1][0],H[1][1]),\",\",1-p,\" \",H[1],\"A\",z,\",\",z,\" 0 0,\",m,\" \",H[0]):E.push(\"L\",G[0],\"A\",z,\",\",z,\" 0 0,\",m,\" \",H[0])}else E.push(\"L\",w,\",\",T)}else E.push(\"M\",y,\",\",x),null!\u003db\u0026\u0026E.push(\"A\",c,\",\",c,\" 0 \",L,\",\",p,\" \",b,\",\",_),E.push(\"L\",w,\",\",T),null!\u003dk\u0026\u0026E.push(\"A\",s,\",\",s,\" 0 \",P,\",\",1-p,\" \",k,\",\",M);return E.push(\"Z\"),E.join(\"\")}function l(t,e){return\"M0,\"+t+\"A\"+t+\",\"+t+\" 0 1,\"+e+\" 0,\"+-t+\"A\"+t+\",\"+t+\" 0 1,\"+e+\" 0,\"+t}return s.innerRadius\u003dfunction(e){return arguments.length?(t\u003dde(e),s):t},s.outerRadius\u003dfunction(t){return arguments.length?(e\u003dde(t),s):e},s.cornerRadius\u003dfunction(t){return arguments.length?(r\u003dde(t),s):r},s.padRadius\u003dfunction(t){return arguments.length?(n\u003dt\u003d\u003dFo?Fo:de(t),s):n},s.startAngle\u003dfunction(t){return arguments.length?(i\u003dde(t),s):i},s.endAngle\u003dfunction(t){return arguments.length?(a\u003dde(t),s):a},s.padAngle\u003dfunction(t){return arguments.length?(o\u003dde(t),s):o},s.centroid\u003dfunction(){var r\u003d(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,n\u003d(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Lt;return[Math.cos(n)*r,Math.sin(n)*r]},s};var Fo\u003d\"auto\";function Bo(t){return t.innerRadius}function No(t){return t.outerRadius}function jo(t){return t.startAngle}function Uo(t){return t.endAngle}function Vo(t){return t\u0026\u0026t.padAngle}function qo(t,e,r,n){return(t-r)*e-(e-n)*t\u003e0?0:1}function Ho(t,e,r,n,i){var a\u003dt[0]-e[0],o\u003dt[1]-e[1],s\u003d(i?n:-n)/Math.sqrt(a*a+o*o),l\u003ds*o,c\u003d-s*a,u\u003dt[0]+l,f\u003dt[1]+c,h\u003de[0]+l,p\u003de[1]+c,d\u003d(u+h)/2,m\u003d(f+p)/2,g\u003dh-u,v\u003dp-f,y\u003dg*g+v*v,x\u003dr-n,b\u003du*p-h*f,_\u003d(v\u003c0?-1:1)*Math.sqrt(Math.max(0,x*x*y-b*b)),w\u003d(b*v-g*_)/y,T\u003d(-b*g-v*_)/y,k\u003d(b*v+g*_)/y,M\u003d(-b*g+v*_)/y,A\u003dw-d,S\u003dT-m,E\u003dk-d,L\u003dM-m;return A*A+S*S\u003eE*E+L*L\u0026\u0026(w\u003dk,T\u003dM),[[w-l,T-c],[w*r/x,T*r/x]]}function Go(t){var e\u003dri,r\u003dni,n\u003dYr,i\u003dWo,a\u003di.key,o\u003d.7;function s(a){var s,l\u003d[],c\u003d[],u\u003d-1,f\u003da.length,h\u003dde(e),p\u003dde(r);function d(){l.push(\"M\",i(t(c),o))}for(;++u\u003cf;)n.call(this,s\u003da[u],u)?c.push([+h.call(this,s,u),+p.call(this,s,u)]):c.length\u0026\u0026(d(),c\u003d[]);return c.length\u0026\u0026d(),l.length?l.join(\"\"):null}return s.x\u003dfunction(t){return arguments.length?(e\u003dt,s):e},s.y\u003dfunction(t){return arguments.length?(r\u003dt,s):r},s.defined\u003dfunction(t){return arguments.length?(n\u003dt,s):n},s.interpolate\u003dfunction(t){return arguments.length?(a\u003d\"function\"\u003d\u003dtypeof t?i\u003dt:(i\u003dYo.get(t)||Wo).key,s):a},s.tension\u003dfunction(t){return arguments.length?(o\u003dt,s):o},s}t.svg.line\u003dfunction(){return Go(C)};var Yo\u003dt.map({linear:Wo,\"linear-closed\":Xo,step:function(t){var e\u003d0,r\u003dt.length,n\u003dt[0],i\u003d[n[0],\",\",n[1]];for(;++e\u003cr;)i.push(\"H\",(n[0]+(n\u003dt[e])[0])/2,\"V\",n[1]);r\u003e1\u0026\u0026i.push(\"H\",n[0]);return i.join(\"\")},\"step-before\":Zo,\"step-after\":Jo,basis:$o,\"basis-open\":function(t){if(t.length\u003c4)return Wo(t);var e,r\u003d[],n\u003d-1,i\u003dt.length,a\u003d[0],o\u003d[0];for(;++n\u003c3;)e\u003dt[n],a.push(e[0]),o.push(e[1]);r.push(ts(ns,a)+\",\"+ts(ns,o)),--n;for(;++n\u003ci;)e\u003dt[n],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),is(r,a,o);return r.join(\"\")},\"basis-closed\":function(t){var e,r,n\u003d-1,i\u003dt.length,a\u003di+4,o\u003d[],s\u003d[];for(;++n\u003c4;)r\u003dt[n%i],o.push(r[0]),s.push(r[1]);e\u003d[ts(ns,o),\",\",ts(ns,s)],--n;for(;++n\u003ca;)r\u003dt[n%i],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),is(e,o,s);return e.join(\"\")},bundle:function(t,e){var r\u003dt.length-1;if(r)for(var n,i,a\u003dt[0][0],o\u003dt[0][1],s\u003dt[r][0]-a,l\u003dt[r][1]-o,c\u003d-1;++c\u003c\u003dr;)n\u003dt[c],i\u003dc/r,n[0]\u003de*n[0]+(1-e)*(a+i*s),n[1]\u003de*n[1]+(1-e)*(o+i*l);return $o(t)},cardinal:function(t,e){return t.length\u003c3?Wo(t):t[0]+Ko(t,Qo(t,e))},\"cardinal-open\":function(t,e){return t.length\u003c4?Wo(t):t[1]+Ko(t.slice(1,-1),Qo(t,e))},\"cardinal-closed\":function(t,e){return t.length\u003c3?Xo(t):t[0]+Ko((t.push(t[0]),t),Qo([t[t.length-2]].concat(t,[t[1]]),e))},monotone:function(t){return t.length\u003c3?Wo(t):t[0]+Ko(t,function(t){var e,r,n,i,a\u003d[],o\u003dfunction(t){var e\u003d0,r\u003dt.length-1,n\u003d[],i\u003dt[0],a\u003dt[1],o\u003dn[0]\u003das(i,a);for(;++e\u003cr;)n[e]\u003d(o+(o\u003das(i\u003da,a\u003dt[e+1])))/2;return n[e]\u003do,n}(t),s\u003d-1,l\u003dt.length-1;for(;++s\u003cl;)e\u003das(t[s],t[s+1]),y(e)\u003ckt?o[s]\u003do[s+1]\u003d0:(r\u003do[s]/e,n\u003do[s+1]/e,(i\u003dr*r+n*n)\u003e9\u0026\u0026(i\u003d3*e/Math.sqrt(i),o[s]\u003di*r,o[s+1]\u003di*n));s\u003d-1;for(;++s\u003c\u003dl;)i\u003d(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}(t))}});function Wo(t){return t.length\u003e1?t.join(\"L\"):t+\"Z\"}function Xo(t){return t.join(\"L\")+\"Z\"}function Zo(t){for(var e\u003d0,r\u003dt.length,n\u003dt[0],i\u003d[n[0],\",\",n[1]];++e\u003cr;)i.push(\"V\",(n\u003dt[e])[1],\"H\",n[0]);return i.join(\"\")}function Jo(t){for(var e\u003d0,r\u003dt.length,n\u003dt[0],i\u003d[n[0],\",\",n[1]];++e\u003cr;)i.push(\"H\",(n\u003dt[e])[0],\"V\",n[1]);return i.join(\"\")}function Ko(t,e){if(e.length\u003c1||t.length!\u003de.length\u0026\u0026t.length!\u003de.length+2)return Wo(t);var r\u003dt.length!\u003de.length,n\u003d\"\",i\u003dt[0],a\u003dt[1],o\u003de[0],s\u003do,l\u003d1;if(r\u0026\u0026(n+\u003d\"Q\"+(a[0]-2*o[0]/3)+\",\"+(a[1]-2*o[1]/3)+\",\"+a[0]+\",\"+a[1],i\u003dt[1],l\u003d2),e.length\u003e1){s\u003de[1],a\u003dt[l],l++,n+\u003d\"C\"+(i[0]+o[0])+\",\"+(i[1]+o[1])+\",\"+(a[0]-s[0])+\",\"+(a[1]-s[1])+\",\"+a[0]+\",\"+a[1];for(var c\u003d2;c\u003ce.length;c++,l++)a\u003dt[l],s\u003de[c],n+\u003d\"S\"+(a[0]-s[0])+\",\"+(a[1]-s[1])+\",\"+a[0]+\",\"+a[1]}if(r){var u\u003dt[l];n+\u003d\"Q\"+(a[0]+2*s[0]/3)+\",\"+(a[1]+2*s[1]/3)+\",\"+u[0]+\",\"+u[1]}return n}function Qo(t,e){for(var r,n\u003d[],i\u003d(1-e)/2,a\u003dt[0],o\u003dt[1],s\u003d1,l\u003dt.length;++s\u003cl;)r\u003da,a\u003do,o\u003dt[s],n.push([i*(o[0]-r[0]),i*(o[1]-r[1])]);return n}function $o(t){if(t.length\u003c3)return Wo(t);var e\u003d1,r\u003dt.length,n\u003dt[0],i\u003dn[0],a\u003dn[1],o\u003d[i,i,i,(n\u003dt[1])[0]],s\u003d[a,a,a,n[1]],l\u003d[i,\",\",a,\"L\",ts(ns,o),\",\",ts(ns,s)];for(t.push(t[r-1]);++e\u003c\u003dr;)n\u003dt[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),is(l,o,s);return t.pop(),l.push(\"L\",n),l.join(\"\")}function ts(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}Yo.forEach((function(t,e){e.key\u003dt,e.closed\u003d/-closed$/.test(t)}));var es\u003d[0,2/3,1/3,0],rs\u003d[0,1/3,2/3,0],ns\u003d[0,1/6,2/3,1/6];function is(t,e,r){t.push(\"C\",ts(es,e),\",\",ts(es,r),\",\",ts(rs,e),\",\",ts(rs,r),\",\",ts(ns,e),\",\",ts(ns,r))}function as(t,e){return(e[1]-t[1])/(e[0]-t[0])}function os(t){for(var e,r,n,i\u003d-1,a\u003dt.length;++i\u003ca;)r\u003d(e\u003dt[i])[0],n\u003de[1]-Lt,e[0]\u003dr*Math.cos(n),e[1]\u003dr*Math.sin(n);return t}function ss(t){var e\u003dri,r\u003dri,n\u003d0,i\u003dni,a\u003dYr,o\u003dWo,s\u003do.key,l\u003do,c\u003d\"L\",u\u003d.7;function f(s){var f,h,p,d\u003d[],m\u003d[],g\u003d[],v\u003d-1,y\u003ds.length,x\u003dde(e),b\u003dde(n),_\u003de\u003d\u003d\u003dr?function(){return h}:de(r),w\u003dn\u003d\u003d\u003di?function(){return p}:de(i);function T(){d.push(\"M\",o(t(g),u),c,l(t(m.reverse()),u),\"Z\")}for(;++v\u003cy;)a.call(this,f\u003ds[v],v)?(m.push([h\u003d+x.call(this,f,v),p\u003d+b.call(this,f,v)]),g.push([+_.call(this,f,v),+w.call(this,f,v)])):m.length\u0026\u0026(T(),m\u003d[],g\u003d[]);return m.length\u0026\u0026T(),d.length?d.join(\"\"):null}return f.x\u003dfunction(t){return arguments.length?(e\u003dr\u003dt,f):r},f.x0\u003dfunction(t){return arguments.length?(e\u003dt,f):e},f.x1\u003dfunction(t){return arguments.length?(r\u003dt,f):r},f.y\u003dfunction(t){return arguments.length?(n\u003di\u003dt,f):i},f.y0\u003dfunction(t){return arguments.length?(n\u003dt,f):n},f.y1\u003dfunction(t){return arguments.length?(i\u003dt,f):i},f.defined\u003dfunction(t){return arguments.length?(a\u003dt,f):a},f.interpolate\u003dfunction(t){return arguments.length?(s\u003d\"function\"\u003d\u003dtypeof t?o\u003dt:(o\u003dYo.get(t)||Wo).key,l\u003do.reverse||o,c\u003do.closed?\"M\":\"L\",f):s},f.tension\u003dfunction(t){return arguments.length?(u\u003dt,f):u},f}function ls(t){return t.radius}function cs(t){return[t.x,t.y]}function us(t){return function(){var e\u003dt.apply(this,arguments),r\u003de[0],n\u003de[1]-Lt;return[r*Math.cos(n),r*Math.sin(n)]}}function fs(){return 64}function hs(){return\"circle\"}function ps(t){var e\u003dMath.sqrt(t/At);return\"M0,\"+e+\"A\"+e+\",\"+e+\" 0 1,1 0,\"+-e+\"A\"+e+\",\"+e+\" 0 1,1 0,\"+e+\"Z\"}t.svg.line.radial\u003dfunction(){var t\u003dGo(os);return t.radius\u003dt.x,delete t.x,t.angle\u003dt.y,delete t.y,t},Zo.reverse\u003dJo,Jo.reverse\u003dZo,t.svg.area\u003dfunction(){return ss(C)},t.svg.area.radial\u003dfunction(){var t\u003dss(os);return t.radius\u003dt.x,delete t.x,t.innerRadius\u003dt.x0,delete t.x0,t.outerRadius\u003dt.x1,delete t.x1,t.angle\u003dt.y,delete t.y,t.startAngle\u003dt.y0,delete t.y0,t.endAngle\u003dt.y1,delete t.y1,t},t.svg.chord\u003dfunction(){var t\u003dVn,e\u003dqn,r\u003dls,n\u003djo,i\u003dUo;function a(r,n){var i,a,c\u003do(this,t,r,n),u\u003do(this,e,r,n);return\"M\"+c.p0+s(c.r,c.p1,c.a1-c.a0)+(a\u003du,((i\u003dc).a0\u003d\u003da.a0\u0026\u0026i.a1\u003d\u003da.a1?l(c.r,c.p1,c.r,c.p0):l(c.r,c.p1,u.r,u.p0)+s(u.r,u.p1,u.a1-u.a0)+l(u.r,u.p1,c.r,c.p0))+\"Z\")}function o(t,e,a,o){var s\u003de.call(t,a,o),l\u003dr.call(t,s,o),c\u003dn.call(t,s,o)-Lt,u\u003di.call(t,s,o)-Lt;return{r:l,a0:c,a1:u,p0:[l*Math.cos(c),l*Math.sin(c)],p1:[l*Math.cos(u),l*Math.sin(u)]}}function s(t,e,r){return\"A\"+t+\",\"+t+\" 0 \"+ +(r\u003eAt)+\",1 \"+e}function l(t,e,r,n){return\"Q 0,0 \"+n}return a.radius\u003dfunction(t){return arguments.length?(r\u003dde(t),a):r},a.source\u003dfunction(e){return arguments.length?(t\u003dde(e),a):t},a.target\u003dfunction(t){return arguments.length?(e\u003dde(t),a):e},a.startAngle\u003dfunction(t){return arguments.length?(n\u003dde(t),a):n},a.endAngle\u003dfunction(t){return arguments.length?(i\u003dde(t),a):i},a},t.svg.diagonal\u003dfunction(){var t\u003dVn,e\u003dqn,r\u003dcs;function n(n,i){var a\u003dt.call(this,n,i),o\u003de.call(this,n,i),s\u003d(a.y+o.y)/2,l\u003d[a,{x:a.x,y:s},{x:o.x,y:s},o];return\"M\"+(l\u003dl.map(r))[0]+\"C\"+l[1]+\" \"+l[2]+\" \"+l[3]}return n.source\u003dfunction(e){return arguments.length?(t\u003dde(e),n):t},n.target\u003dfunction(t){return arguments.length?(e\u003dde(t),n):e},n.projection\u003dfunction(t){return arguments.length?(r\u003dt,n):r},n},t.svg.diagonal.radial\u003dfunction(){var e\u003dt.svg.diagonal(),r\u003dcs,n\u003de.projection;return e.projection\u003dfunction(t){return arguments.length?n(us(r\u003dt)):r},e},t.svg.symbol\u003dfunction(){var t\u003dhs,e\u003dfs;function r(r,n){return(ds.get(t.call(this,r,n))||ps)(e.call(this,r,n))}return r.type\u003dfunction(e){return arguments.length?(t\u003dde(e),r):t},r.size\u003dfunction(t){return arguments.length?(e\u003dde(t),r):e},r};var ds\u003dt.map({circle:ps,cross:function(t){var e\u003dMath.sqrt(t/5)/2;return\"M\"+-3*e+\",\"+-e+\"H\"+-e+\"V\"+-3*e+\"H\"+e+\"V\"+-e+\"H\"+3*e+\"V\"+e+\"H\"+e+\"V\"+3*e+\"H\"+-e+\"V\"+e+\"H\"+-3*e+\"Z\"},diamond:function(t){var e\u003dMath.sqrt(t/(2*gs)),r\u003de*gs;return\"M0,\"+-e+\"L\"+r+\",0 0,\"+e+\" \"+-r+\",0Z\"},square:function(t){var e\u003dMath.sqrt(t)/2;return\"M\"+-e+\",\"+-e+\"L\"+e+\",\"+-e+\" \"+e+\",\"+e+\" \"+-e+\",\"+e+\"Z\"},\"triangle-down\":function(t){var e\u003dMath.sqrt(t/ms),r\u003de*ms/2;return\"M0,\"+r+\"L\"+e+\",\"+-r+\" \"+-e+\",\"+-r+\"Z\"},\"triangle-up\":function(t){var e\u003dMath.sqrt(t/ms),r\u003de*ms/2;return\"M0,\"+-r+\"L\"+e+\",\"+r+\" \"+-e+\",\"+r+\"Z\"}});t.svg.symbolTypes\u003dds.keys();var ms\u003dMath.sqrt(3),gs\u003dMath.tan(30*Ct);Y.transition\u003dfunction(t){for(var e,r,n\u003dbs||++Ts,i\u003dAs(t),a\u003d[],o\u003d_s||{time:Date.now(),ease:ca,delay:0,duration:250},s\u003d-1,l\u003dthis.length;++s\u003cl;){a.push(e\u003d[]);for(var c\u003dthis[s],u\u003d-1,f\u003dc.length;++u\u003cf;)(r\u003dc[u])\u0026\u0026Ss(r,u,i,n,o),e.push(r)}return xs(a,i,n)},Y.interrupt\u003dfunction(t){return this.each(null\u003d\u003dt?vs:ys(As(t)))};var vs\u003dys(As());function ys(t){return function(){var e,r,n;(e\u003dthis[t])\u0026\u0026(n\u003de[r\u003de.active])\u0026\u0026(n.timer.c\u003dnull,n.timer.t\u003dNaN,--e.count?delete e[r]:delete this[t],e.active+\u003d.5,n.event\u0026\u0026n.event.interrupt.call(this,this.__data__,n.index))}}function xs(t,e,r){return U(t,ws),t.namespace\u003de,t.id\u003dr,t}var bs,_s,ws\u003d[],Ts\u003d0;function ks(t,e,r,n){var i\u003dt.id,a\u003dt.namespace;return ut(t,\"function\"\u003d\u003dtypeof r?function(t,o,s){t[a][i].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r\u003dn(r),function(t){t[a][i].tween.set(e,r)}))}function Ms(t){return null\u003d\u003dt\u0026\u0026(t\u003d\"\"),function(){this.textContent\u003dt}}function As(t){return null\u003d\u003dt?\"__transition__\":\"__transition_\"+t+\"__\"}function Ss(t,e,r,n,i){var a,o,s,l,c,u\u003dt[r]||(t[r]\u003d{active:0,count:0}),f\u003du[n];function h(r){var i\u003du.active,h\u003du[i];for(var d in h\u0026\u0026(h.timer.c\u003dnull,h.timer.t\u003dNaN,--u.count,delete u[i],h.event\u0026\u0026h.event.interrupt.call(t,t.__data__,h.index)),u)if(+d\u003cn){var m\u003du[d];m.timer.c\u003dnull,m.timer.t\u003dNaN,--u.count,delete u[d]}o.c\u003dp,we((function(){return o.c\u0026\u0026p(r||1)\u0026\u0026(o.c\u003dnull,o.t\u003dNaN),1}),0,a),u.active\u003dn,f.event\u0026\u0026f.event.start.call(t,t.__data__,e),c\u003d[],f.tween.forEach((function(r,n){(n\u003dn.call(t,t.__data__,e))\u0026\u0026c.push(n)})),l\u003df.ease,s\u003df.duration}function p(i){for(var a\u003di/s,o\u003dl(a),h\u003dc.length;h\u003e0;)c[--h].call(t,o);if(a\u003e\u003d1)return f.event\u0026\u0026f.event.end.call(t,t.__data__,e),--u.count?delete u[n]:delete t[r],1}f||(a\u003di.time,o\u003dwe((function(t){var e\u003df.delay;if(o.t\u003de+a,e\u003c\u003dt)return h(t-e);o.c\u003dh}),0,a),f\u003du[n]\u003d{tween:new _,time:a,timer:o,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i\u003dnull,++u.count)}ws.call\u003dY.call,ws.empty\u003dY.empty,ws.node\u003dY.node,ws.size\u003dY.size,t.transition\u003dfunction(e,r){return e\u0026\u0026e.transition?bs?e.transition(r):e:t.selection().transition(e)},t.transition.prototype\u003dws,ws.select\u003dfunction(t){var e,r,n,i\u003dthis.id,a\u003dthis.namespace,o\u003d[];t\u003dW(t);for(var s\u003d-1,l\u003dthis.length;++s\u003cl;){o.push(e\u003d[]);for(var c\u003dthis[s],u\u003d-1,f\u003dc.length;++u\u003cf;)(n\u003dc[u])\u0026\u0026(r\u003dt.call(n,n.__data__,u,s))?(\"__data__\"in n\u0026\u0026(r.__data__\u003dn.__data__),Ss(r,u,a,i,n[a][i]),e.push(r)):e.push(null)}return xs(o,a,i)},ws.selectAll\u003dfunction(t){var e,r,n,i,a,o\u003dthis.id,s\u003dthis.namespace,l\u003d[];t\u003dX(t);for(var c\u003d-1,u\u003dthis.length;++c\u003cu;)for(var f\u003dthis[c],h\u003d-1,p\u003df.length;++h\u003cp;)if(n\u003df[h]){a\u003dn[s][o],r\u003dt.call(n,n.__data__,h,c),l.push(e\u003d[]);for(var d\u003d-1,m\u003dr.length;++d\u003cm;)(i\u003dr[d])\u0026\u0026Ss(i,d,s,o,a),e.push(i)}return xs(l,s,o)},ws.filter\u003dfunction(t){var e,r,n\u003d[];\"function\"!\u003dtypeof t\u0026\u0026(t\u003dlt(t));for(var i\u003d0,a\u003dthis.length;i\u003ca;i++){n.push(e\u003d[]);for(var o,s\u003d0,l\u003d(o\u003dthis[i]).length;s\u003cl;s++)(r\u003do[s])\u0026\u0026t.call(r,r.__data__,s,i)\u0026\u0026e.push(r)}return xs(n,this.namespace,this.id)},ws.tween\u003dfunction(t,e){var r\u003dthis.id,n\u003dthis.namespace;return arguments.length\u003c2?this.node()[n][r].tween.get(t):ut(this,null\u003d\u003de?function(e){e[n][r].tween.remove(t)}:function(i){i[n][r].tween.set(t,e)})},ws.attr\u003dfunction(e,r){if(arguments.length\u003c2){for(r in e)this.attr(r,e[r]);return this}var n\u003d\"transform\"\u003d\u003de?ba:$i,i\u003dt.ns.qualify(e);function a(){this.removeAttribute(i)}function o(){this.removeAttributeNS(i.space,i.local)}function s(t){return null\u003d\u003dt?a:(t+\u003d\"\",function(){var e,r\u003dthis.getAttribute(i);return r!\u003d\u003dt\u0026\u0026(e\u003dn(r,t),function(t){this.setAttribute(i,e(t))})})}function l(t){return null\u003d\u003dt?o:(t+\u003d\"\",function(){var e,r\u003dthis.getAttributeNS(i.space,i.local);return r!\u003d\u003dt\u0026\u0026(e\u003dn(r,t),function(t){this.setAttributeNS(i.space,i.local,e(t))})})}return ks(this,\"attr.\"+e,r,i.local?l:s)},ws.attrTween\u003dfunction(e,r){var n\u003dt.ns.qualify(e);return this.tween(\"attr.\"+e,n.local?function(t,e){var i\u003dr.call(this,t,e,this.getAttributeNS(n.space,n.local));return i\u0026\u0026function(t){this.setAttributeNS(n.space,n.local,i(t))}}:function(t,e){var i\u003dr.call(this,t,e,this.getAttribute(n));return i\u0026\u0026function(t){this.setAttribute(n,i(t))}})},ws.style\u003dfunction(t,e,r){var n\u003darguments.length;if(n\u003c3){if(\"string\"!\u003dtypeof t){for(r in n\u003c2\u0026\u0026(e\u003d\"\"),t)this.style(r,t[r],e);return this}r\u003d\"\"}function i(){this.style.removeProperty(t)}function a(e){return null\u003d\u003de?i:(e+\u003d\"\",function(){var n,i\u003do(this).getComputedStyle(this,null).getPropertyValue(t);return i!\u003d\u003de\u0026\u0026(n\u003d$i(i,e),function(e){this.style.setProperty(t,n(e),r)})})}return ks(this,\"style.\"+t,e,a)},ws.styleTween\u003dfunction(t,e,r){function n(n,i){var a\u003de.call(this,n,i,o(this).getComputedStyle(this,null).getPropertyValue(t));return a\u0026\u0026function(e){this.style.setProperty(t,a(e),r)}}return arguments.length\u003c3\u0026\u0026(r\u003d\"\"),this.tween(\"style.\"+t,n)},ws.text\u003dfunction(t){return ks(this,\"text\",t,Ms)},ws.remove\u003dfunction(){var t\u003dthis.namespace;return this.each(\"end.transition\",(function(){var e;this[t].count\u003c2\u0026\u0026(e\u003dthis.parentNode)\u0026\u0026e.removeChild(this)}))},ws.ease\u003dfunction(e){var r\u003dthis.id,n\u003dthis.namespace;return arguments.length\u003c1?this.node()[n][r].ease:(\"function\"!\u003dtypeof e\u0026\u0026(e\u003dt.ease.apply(t,arguments)),ut(this,(function(t){t[n][r].ease\u003de})))},ws.delay\u003dfunction(t){var e\u003dthis.id,r\u003dthis.namespace;return arguments.length\u003c1?this.node()[r][e].delay:ut(this,\"function\"\u003d\u003dtypeof t?function(n,i,a){n[r][e].delay\u003d+t.call(n,n.__data__,i,a)}:(t\u003d+t,function(n){n[r][e].delay\u003dt}))},ws.duration\u003dfunction(t){var e\u003dthis.id,r\u003dthis.namespace;return arguments.length\u003c1?this.node()[r][e].duration:ut(this,\"function\"\u003d\u003dtypeof t?function(n,i,a){n[r][e].duration\u003dMath.max(1,t.call(n,n.__data__,i,a))}:(t\u003dMath.max(1,t),function(n){n[r][e].duration\u003dt}))},ws.each\u003dfunction(e,r){var n\u003dthis.id,i\u003dthis.namespace;if(arguments.length\u003c2){var a\u003d_s,o\u003dbs;try{bs\u003dn,ut(this,(function(t,r,a){_s\u003dt[i][n],e.call(t,t.__data__,r,a)}))}finally{_s\u003da,bs\u003do}}else ut(this,(function(a){var o\u003da[i][n];(o.event||(o.event\u003dt.dispatch(\"start\",\"end\",\"interrupt\"))).on(e,r)}));return this},ws.transition\u003dfunction(){for(var t,e,r,n\u003dthis.id,i\u003d++Ts,a\u003dthis.namespace,o\u003d[],s\u003d0,l\u003dthis.length;s\u003cl;s++){o.push(t\u003d[]);for(var c,u\u003d0,f\u003d(c\u003dthis[s]).length;u\u003cf;u++)(e\u003dc[u])\u0026\u0026Ss(e,u,a,i,{time:(r\u003de[a][n]).time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration}),t.push(e)}return xs(o,a,i)},t.svg.axis\u003dfunction(){var e,r\u003dt.scale.linear(),i\u003dEs,a\u003d6,o\u003d6,s\u003d3,l\u003d[10],c\u003dnull;function u(n){n.each((function(){var n,u\u003dt.select(this),f\u003dthis.__chart__||r,h\u003dthis.__chart__\u003dr.copy(),p\u003dnull\u003d\u003dc?h.ticks?h.ticks.apply(h,l):h.domain():c,d\u003dnull\u003d\u003de?h.tickFormat?h.tickFormat.apply(h,l):C:e,m\u003du.selectAll(\".tick\").data(p,h),g\u003dm.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",kt),v\u003dt.transition(m.exit()).style(\"opacity\",kt).remove(),y\u003dt.transition(m.order()).style(\"opacity\",1),x\u003dMath.max(a,0)+s,b\u003dgo(h),_\u003du.selectAll(\".domain\").data([0]),w\u003d(_.enter().append(\"path\").attr(\"class\",\"domain\"),t.transition(_));g.append(\"line\"),g.append(\"text\");var T,k,M,A,S\u003dg.select(\"line\"),E\u003dy.select(\"line\"),L\u003dm.select(\"text\").text(d),P\u003dg.select(\"text\"),I\u003dy.select(\"text\"),O\u003d\"top\"\u003d\u003d\u003di||\"left\"\u003d\u003d\u003di?-1:1;if(\"bottom\"\u003d\u003d\u003di||\"top\"\u003d\u003d\u003di?(n\u003dCs,T\u003d\"x\",M\u003d\"y\",k\u003d\"x2\",A\u003d\"y2\",L.attr(\"dy\",O\u003c0?\"0em\":\".71em\").style(\"text-anchor\",\"middle\"),w.attr(\"d\",\"M\"+b[0]+\",\"+O*o+\"V0H\"+b[1]+\"V\"+O*o)):(n\u003dPs,T\u003d\"y\",M\u003d\"x\",k\u003d\"y2\",A\u003d\"x2\",L.attr(\"dy\",\".32em\").style(\"text-anchor\",O\u003c0?\"end\":\"start\"),w.attr(\"d\",\"M\"+O*o+\",\"+b[0]+\"H0V\"+b[1]+\"H\"+O*o)),S.attr(A,O*a),P.attr(M,O*x),E.attr(k,0).attr(A,O*a),I.attr(T,0).attr(M,O*x),h.rangeBand){var z\u003dh,D\u003dz.rangeBand()/2;f\u003dh\u003dfunction(t){return z(t)+D}}else f.rangeBand?f\u003dh:v.call(n,h,f);g.call(n,f,h),y.call(n,h,h)}))}return u.scale\u003dfunction(t){return arguments.length?(r\u003dt,u):r},u.orient\u003dfunction(t){return arguments.length?(i\u003dt in Ls?t+\"\":Es,u):i},u.ticks\u003dfunction(){return arguments.length?(l\u003dn(arguments),u):l},u.tickValues\u003dfunction(t){return arguments.length?(c\u003dt,u):c},u.tickFormat\u003dfunction(t){return arguments.length?(e\u003dt,u):e},u.tickSize\u003dfunction(t){var e\u003darguments.length;return e?(a\u003d+t,o\u003d+arguments[e-1],u):a},u.innerTickSize\u003dfunction(t){return arguments.length?(a\u003d+t,u):a},u.outerTickSize\u003dfunction(t){return arguments.length?(o\u003d+t,u):o},u.tickPadding\u003dfunction(t){return arguments.length?(s\u003d+t,u):s},u.tickSubdivide\u003dfunction(){return arguments.length\u0026\u0026u},u};var Es\u003d\"bottom\",Ls\u003d{top:1,right:1,bottom:1,left:1};function Cs(t,e,r){t.attr(\"transform\",(function(t){var n\u003de(t);return\"translate(\"+(isFinite(n)?n:r(t))+\",0)\"}))}function Ps(t,e,r){t.attr(\"transform\",(function(t){var n\u003de(t);return\"translate(0,\"+(isFinite(n)?n:r(t))+\")\"}))}t.svg.brush\u003dfunction(){var e,r,n\u003dN(h,\"brushstart\",\"brush\",\"brushend\"),i\u003dnull,a\u003dnull,s\u003d[0,0],l\u003d[0,0],c\u003d!0,u\u003d!0,f\u003dOs[0];function h(e){e.each((function(){var e\u003dt.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",g).on(\"touchstart.brush\",g),r\u003de.selectAll(\".background\").data([0]);r.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\"),e.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var n\u003de.selectAll(\".resize\").data(f,C);n.exit().remove(),n.enter().append(\"g\").attr(\"class\",(function(t){return\"resize \"+t})).style(\"cursor\",(function(t){return Is[t]})).append(\"rect\").attr(\"x\",(function(t){return/[ew]$/.test(t)?-3:null})).attr(\"y\",(function(t){return/^[ns]/.test(t)?-3:null})).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\"),n.style(\"display\",h.empty()?\"none\":null);var o,s\u003dt.transition(e),l\u003dt.transition(r);i\u0026\u0026(o\u003dgo(i),l.attr(\"x\",o[0]).attr(\"width\",o[1]-o[0]),d(s)),a\u0026\u0026(o\u003dgo(a),l.attr(\"y\",o[0]).attr(\"height\",o[1]-o[0]),m(s)),p(s)}))}function p(t){t.selectAll(\".resize\").attr(\"transform\",(function(t){return\"translate(\"+s[+/e$/.test(t)]+\",\"+l[+/^s/.test(t)]+\")\"}))}function d(t){t.select(\".extent\").attr(\"x\",s[0]),t.selectAll(\".extent,.n\u003erect,.s\u003erect\").attr(\"width\",s[1]-s[0])}function m(t){t.select(\".extent\").attr(\"y\",l[0]),t.selectAll(\".extent,.e\u003erect,.w\u003erect\").attr(\"height\",l[1]-l[0])}function g(){var f,g,v\u003dthis,y\u003dt.select(t.event.target),x\u003dn.of(v,arguments),b\u003dt.select(v),_\u003dy.datum(),w\u003d!/^(n|s)$/.test(_)\u0026\u0026i,T\u003d!/^(e|w)$/.test(_)\u0026\u0026a,k\u003dy.classed(\"extent\"),M\u003dbt(v),A\u003dt.mouse(v),S\u003dt.select(o(v)).on(\"keydown.brush\",C).on(\"keyup.brush\",P);if(t.event.changedTouches?S.on(\"touchmove.brush\",I).on(\"touchend.brush\",z):S.on(\"mousemove.brush\",I).on(\"mouseup.brush\",z),b.interrupt().selectAll(\"*\").interrupt(),k)A[0]\u003ds[0]-A[0],A[1]\u003dl[0]-A[1];else if(_){var E\u003d+/w$/.test(_),L\u003d+/^n/.test(_);g\u003d[s[1-E]-A[0],l[1-L]-A[1]],A[0]\u003ds[E],A[1]\u003dl[L]}else t.event.altKey\u0026\u0026(f\u003dA.slice());function C(){32\u003d\u003dt.event.keyCode\u0026\u0026(k||(f\u003dnull,A[0]-\u003ds[1],A[1]-\u003dl[1],k\u003d2),F())}function P(){32\u003d\u003dt.event.keyCode\u0026\u00262\u003d\u003dk\u0026\u0026(A[0]+\u003ds[1],A[1]+\u003dl[1],k\u003d0,F())}function I(){var e\u003dt.mouse(v),r\u003d!1;g\u0026\u0026(e[0]+\u003dg[0],e[1]+\u003dg[1]),k||(t.event.altKey?(f||(f\u003d[(s[0]+s[1])/2,(l[0]+l[1])/2]),A[0]\u003ds[+(e[0]\u003cf[0])],A[1]\u003dl[+(e[1]\u003cf[1])]):f\u003dnull),w\u0026\u0026O(e,i,0)\u0026\u0026(d(b),r\u003d!0),T\u0026\u0026O(e,a,1)\u0026\u0026(m(b),r\u003d!0),r\u0026\u0026(p(b),x({type:\"brush\",mode:k?\"move\":\"resize\"}))}function O(t,n,i){var a,o,h\u003dgo(n),p\u003dh[0],d\u003dh[1],m\u003dA[i],g\u003di?l:s,v\u003dg[1]-g[0];if(k\u0026\u0026(p-\u003dm,d-\u003dv+m),a\u003d(i?u:c)?Math.max(p,Math.min(d,t[i])):t[i],k?o\u003d(a+\u003dm)+v:(f\u0026\u0026(m\u003dMath.max(p,Math.min(d,2*f[i]-a))),m\u003ca?(o\u003da,a\u003dm):o\u003dm),g[0]!\u003da||g[1]!\u003do)return i?r\u003dnull:e\u003dnull,g[0]\u003da,g[1]\u003do,!0}function z(){I(),b.style(\"pointer-events\",\"all\").selectAll(\".resize\").style(\"display\",h.empty()?\"none\":null),t.select(\"body\").style(\"cursor\",null),S.on(\"mousemove.brush\",null).on(\"mouseup.brush\",null).on(\"touchmove.brush\",null).on(\"touchend.brush\",null).on(\"keydown.brush\",null).on(\"keyup.brush\",null),M(),x({type:\"brushend\"})}b.style(\"pointer-events\",\"none\").selectAll(\".resize\").style(\"display\",null),t.select(\"body\").style(\"cursor\",y.style(\"cursor\")),x({type:\"brushstart\"}),I()}return h.event\u003dfunction(i){i.each((function(){var i\u003dn.of(this,arguments),a\u003d{x:s,y:l,i:e,j:r},o\u003dthis.__chart__||a;this.__chart__\u003da,bs?t.select(this).transition().each(\"start.brush\",(function(){e\u003do.i,r\u003do.j,s\u003do.x,l\u003do.y,i({type:\"brushstart\"})})).tween(\"brush:brush\",(function(){var t\u003dta(s,a.x),n\u003dta(l,a.y);return e\u003dr\u003dnull,function(e){s\u003da.x\u003dt(e),l\u003da.y\u003dn(e),i({type:\"brush\",mode:\"resize\"})}})).each(\"end.brush\",(function(){e\u003da.i,r\u003da.j,i({type:\"brush\",mode:\"resize\"}),i({type:\"brushend\"})})):(i({type:\"brushstart\"}),i({type:\"brush\",mode:\"resize\"}),i({type:\"brushend\"}))}))},h.x\u003dfunction(t){return arguments.length?(f\u003dOs[!(i\u003dt)\u003c\u003c1|!a],h):i},h.y\u003dfunction(t){return arguments.length?(f\u003dOs[!i\u003c\u003c1|!(a\u003dt)],h):a},h.clamp\u003dfunction(t){return arguments.length?(i\u0026\u0026a?(c\u003d!!t[0],u\u003d!!t[1]):i?c\u003d!!t:a\u0026\u0026(u\u003d!!t),h):i\u0026\u0026a?[c,u]:i?c:a?u:null},h.extent\u003dfunction(t){var n,o,c,u,f;return arguments.length?(i\u0026\u0026(n\u003dt[0],o\u003dt[1],a\u0026\u0026(n\u003dn[0],o\u003do[0]),e\u003d[n,o],i.invert\u0026\u0026(n\u003di(n),o\u003di(o)),o\u003cn\u0026\u0026(f\u003dn,n\u003do,o\u003df),n\u003d\u003ds[0]\u0026\u0026o\u003d\u003ds[1]||(s\u003d[n,o])),a\u0026\u0026(c\u003dt[0],u\u003dt[1],i\u0026\u0026(c\u003dc[1],u\u003du[1]),r\u003d[c,u],a.invert\u0026\u0026(c\u003da(c),u\u003da(u)),u\u003cc\u0026\u0026(f\u003dc,c\u003du,u\u003df),c\u003d\u003dl[0]\u0026\u0026u\u003d\u003dl[1]||(l\u003d[c,u])),h):(i\u0026\u0026(e?(n\u003de[0],o\u003de[1]):(n\u003ds[0],o\u003ds[1],i.invert\u0026\u0026(n\u003di.invert(n),o\u003di.invert(o)),o\u003cn\u0026\u0026(f\u003dn,n\u003do,o\u003df))),a\u0026\u0026(r?(c\u003dr[0],u\u003dr[1]):(c\u003dl[0],u\u003dl[1],a.invert\u0026\u0026(c\u003da.invert(c),u\u003da.invert(u)),u\u003cc\u0026\u0026(f\u003dc,c\u003du,u\u003df))),i\u0026\u0026a?[[n,c],[o,u]]:i?[n,o]:a\u0026\u0026[c,u])},h.clear\u003dfunction(){return h.empty()||(s\u003d[0,0],l\u003d[0,0],e\u003dr\u003dnull),h},h.empty\u003dfunction(){return!!i\u0026\u0026s[0]\u003d\u003ds[1]||!!a\u0026\u0026l[0]\u003d\u003dl[1]},t.rebind(h,n,\"on\")};var Is\u003d{n:\"ns-resize\",e:\"ew-resize\",s:\"ns-resize\",w:\"ew-resize\",nw:\"nwse-resize\",ne:\"nesw-resize\",se:\"nwse-resize\",sw:\"nesw-resize\"},Os\u003d[[\"n\",\"e\",\"s\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],[\"e\",\"w\"],[\"n\",\"s\"],[]],zs\u003dIe.format\u003dsr.timeFormat,Ds\u003dzs.utc,Rs\u003dDs(\"%Y-%m-%dT%H:%M:%S.%LZ\");function Fs(t){return t.toISOString()}function Bs(e,r,n){function i(t){return e(t)}function a(e,n){var i\u003d(e[1]-e[0])/n,a\u003dt.bisect(js,i);return a\u003d\u003djs.length?[r.year,ko(e.map((function(t){return t/31536e6})),n)[2]]:a?r[i/js[a-1]\u003cjs[a]/i?a-1:a]:[qs,ko(e,n)[2]]}return i.invert\u003dfunction(t){return Ns(e.invert(t))},i.domain\u003dfunction(t){return arguments.length?(e.domain(t),i):e.domain().map(Ns)},i.nice\u003dfunction(t,e){var r\u003di.domain(),n\u003dmo(r),o\u003dnull\u003d\u003dt?a(n,10):\"number\"\u003d\u003dtypeof t\u0026\u0026a(n,t);function s(r){return!isNaN(r)\u0026\u0026!t.range(r,Ns(+r+1),e).length}return o\u0026\u0026(t\u003do[0],e\u003do[1]),i.domain(yo(r,e\u003e1?{floor:function(e){for(;s(e\u003dt.floor(e));)e\u003dNs(e-1);return e},ceil:function(e){for(;s(e\u003dt.ceil(e));)e\u003dNs(+e+1);return e}}:t))},i.ticks\u003dfunction(t,e){var r\u003dmo(i.domain()),n\u003dnull\u003d\u003dt?a(r,10):\"number\"\u003d\u003dtypeof t?a(r,t):!t.range\u0026\u0026[{range:t},e];return n\u0026\u0026(t\u003dn[0],e\u003dn[1]),t.range(r[0],Ns(+r[1]+1),e\u003c1?1:e)},i.tickFormat\u003dfunction(){return n},i.copy\u003dfunction(){return Bs(e.copy(),r,n)},wo(i,e)}function Ns(t){return new Date(t)}zs.iso\u003dDate.prototype.toISOString\u0026\u0026+new Date(\"2000-01-01T00:00:00.000Z\")?Fs:Rs,Fs.parse\u003dfunction(t){var e\u003dnew Date(t);return isNaN(e)?null:e},Fs.toString\u003dRs.toString,Ie.second\u003dRe((function(t){return new Oe(1e3*Math.floor(t/1e3))}),(function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))}),(function(t){return t.getSeconds()})),Ie.seconds\u003dIe.second.range,Ie.seconds.utc\u003dIe.second.utc.range,Ie.minute\u003dRe((function(t){return new Oe(6e4*Math.floor(t/6e4))}),(function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))}),(function(t){return t.getMinutes()})),Ie.minutes\u003dIe.minute.range,Ie.minutes.utc\u003dIe.minute.utc.range,Ie.hour\u003dRe((function(t){var e\u003dt.getTimezoneOffset()/60;return new Oe(36e5*(Math.floor(t/36e5-e)+e))}),(function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))}),(function(t){return t.getHours()})),Ie.hours\u003dIe.hour.range,Ie.hours.utc\u003dIe.hour.utc.range,Ie.month\u003dRe((function(t){return(t\u003dIe.day(t)).setDate(1),t}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t){return t.getMonth()})),Ie.months\u003dIe.month.range,Ie.months.utc\u003dIe.month.utc.range;var js\u003d[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Us\u003d[[Ie.second,1],[Ie.second,5],[Ie.second,15],[Ie.second,30],[Ie.minute,1],[Ie.minute,5],[Ie.minute,15],[Ie.minute,30],[Ie.hour,1],[Ie.hour,3],[Ie.hour,6],[Ie.hour,12],[Ie.day,1],[Ie.day,2],[Ie.week,1],[Ie.month,1],[Ie.month,3],[Ie.year,1]],Vs\u003dzs.multi([[\".%L\",function(t){return t.getMilliseconds()}],[\":%S\",function(t){return t.getSeconds()}],[\"%I:%M\",function(t){return t.getMinutes()}],[\"%I %p\",function(t){return t.getHours()}],[\"%a %d\",function(t){return t.getDay()\u0026\u00261!\u003dt.getDate()}],[\"%b %d\",function(t){return 1!\u003dt.getDate()}],[\"%B\",function(t){return t.getMonth()}],[\"%Y\",Yr]]),qs\u003d{range:function(e,r,n){return t.range(Math.ceil(e/n)*n,+r,n).map(Ns)},floor:C,ceil:C};Us.year\u003dIe.year,Ie.scale\u003dfunction(){return Bs(t.scale.linear(),Us,Vs)};var Hs\u003dUs.map((function(t){return[t[0].utc,t[1]]})),Gs\u003dDs.multi([[\".%L\",function(t){return t.getUTCMilliseconds()}],[\":%S\",function(t){return t.getUTCSeconds()}],[\"%I:%M\",function(t){return t.getUTCMinutes()}],[\"%I %p\",function(t){return t.getUTCHours()}],[\"%a %d\",function(t){return t.getUTCDay()\u0026\u00261!\u003dt.getUTCDate()}],[\"%b %d\",function(t){return 1!\u003dt.getUTCDate()}],[\"%B\",function(t){return t.getUTCMonth()}],[\"%Y\",Yr]]);function Ys(t){return JSON.parse(t.responseText)}function Ws(t){var e\u003di.createRange();return e.selectNode(i.body),e.createContextualFragment(t.responseText)}Hs.year\u003dIe.year.utc,Ie.scale.utc\u003dfunction(){return Bs(t.scale.linear(),Hs,Gs)},t.text\u003dme((function(t){return t.responseText})),t.json\u003dfunction(t,e){return ge(t,\"application/json\",Ys,e)},t.html\u003dfunction(t,e){return ge(t,\"text/html\",Ws,e)},t.xml\u003dme((function(t){return t.responseXML})),\"object\"\u003d\u003dtypeof e\u0026\u0026e.exports?e.exports\u003dt:this.d3\u003dt}).apply(self)},{}],59:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./quad\")},{\"./quad\":60}],60:[function(t,e,r){\"use strict\";var n\u003dt(\"binary-search-bounds\"),i\u003dt(\"clamp\"),a\u003dt(\"parse-rect\"),o\u003dt(\"array-bounds\"),s\u003dt(\"pick-by-alias\"),l\u003dt(\"defined\"),c\u003dt(\"flatten-vertex-data\"),u\u003dt(\"is-obj\"),f\u003dt(\"dtype\"),h\u003dt(\"math-log2\");function p(t,e){for(var r\u003de[0],n\u003de[1],a\u003d1/(e[2]-r),o\u003d1/(e[3]-n),s\u003dnew Array(t.length),l\u003d0,c\u003dt.length/2;l\u003cc;l++)s[2*l]\u003di((t[2*l]-r)*a,0,1),s[2*l+1]\u003di((t[2*l+1]-n)*o,0,1);return s}e.exports\u003dfunction(t,e){e||(e\u003d{}),t\u003dc(t,\"float64\"),e\u003ds(e,{bounds:\"range bounds dataBox databox\",maxDepth:\"depth maxDepth maxdepth level maxLevel maxlevel levels\",dtype:\"type dtype format out dst output destination\"});var r\u003dl(e.maxDepth,255),i\u003dl(e.bounds,o(t,2));i[0]\u003d\u003d\u003di[2]\u0026\u0026i[2]++,i[1]\u003d\u003d\u003di[3]\u0026\u0026i[3]++;var d,m\u003dp(t,i),g\u003dt.length\u003e\u003e\u003e1;e.dtype||(e.dtype\u003d\"array\"),\"string\"\u003d\u003dtypeof e.dtype?d\u003dnew(f(e.dtype))(g):e.dtype\u0026\u0026(d\u003de.dtype,Array.isArray(d)\u0026\u0026(d.length\u003dg));for(var v\u003d0;v\u003cg;++v)d[v]\u003dv;var y\u003d[],x\u003d[],b\u003d[],_\u003d[];!function t(e,n,i,a,o,s){if(!a.length)return null;var l\u003dy[o]||(y[o]\u003d[]),c\u003db[o]||(b[o]\u003d[]),u\u003dx[o]||(x[o]\u003d[]),f\u003dl.length;if(++o\u003er||s\u003e1073741824){for(var h\u003d0;h\u003ca.length;h++)l.push(a[h]),c.push(s),u.push(null,null,null,null);return f}if(l.push(a[0]),c.push(s),a.length\u003c\u003d1)return u.push(null,null,null,null),f;for(var p\u003d.5*i,d\u003de+p,g\u003dn+p,v\u003d[],_\u003d[],w\u003d[],T\u003d[],k\u003d1,M\u003da.length;k\u003cM;k++){var A\u003da[k],S\u003dm[2*A],E\u003dm[2*A+1];S\u003cd?E\u003cg?v.push(A):_.push(A):E\u003cg?w.push(A):T.push(A)}return s\u003c\u003c\u003d2,u.push(t(e,n,p,v,o,s),t(e,g,p,_,o,s+1),t(d,n,p,w,o,s+2),t(d,g,p,T,o,s+3)),f}(0,0,1,d,0,1);for(var w\u003d0,T\u003d0;T\u003cy.length;T++){var k\u003dy[T];if(d.set)d.set(k,w);else for(var M\u003d0,A\u003dk.length;M\u003cA;M++)d[M+w]\u003dk[M];var S\u003dw+y[T].length;_[T]\u003d[w,S],w\u003dS}return d.range\u003dfunction(){var e,r\u003d[],n\u003darguments.length;for(;n--;)r[n]\u003darguments[n];if(u(r[r.length-1])){var o\u003dr.pop();r.length||null\u003d\u003do.x\u0026\u0026null\u003d\u003do.l\u0026\u0026null\u003d\u003do.left||(r\u003d[o],e\u003d{}),e\u003ds(o,{level:\"level maxLevel\",d:\"d diam diameter r radius px pxSize pixel pixelSize maxD size minSize\",lod:\"lod details ranges offsets\"})}else e\u003d{};r.length||(r\u003di);var c\u003da.apply(void 0,r),f\u003d[Math.min(c.x,c.x+c.width),Math.min(c.y,c.y+c.height),Math.max(c.x,c.x+c.width),Math.max(c.y,c.y+c.height)],d\u003df[0],m\u003df[1],g\u003df[2],v\u003df[3],b\u003dp([d,m,g,v],i),_\u003db[0],w\u003db[1],T\u003db[2],k\u003db[3],M\u003dl(e.level,y.length);if(null!\u003de.d){var A;\"number\"\u003d\u003dtypeof e.d?A\u003d[e.d,e.d]:e.d.length\u0026\u0026(A\u003de.d),M\u003dMath.min(Math.max(Math.ceil(-h(Math.abs(A[0])/(i[2]-i[0]))),Math.ceil(-h(Math.abs(A[1])/(i[3]-i[1])))),M)}if(M\u003dMath.min(M,y.length),e.lod)return E(_,w,T,k,M);var S\u003d[];function L(e,r,n,i,a,o){if(null!\u003d\u003da\u0026\u0026null!\u003d\u003do\u0026\u0026!(_\u003ee+n||w\u003er+n||T\u003ce||k\u003cr||i\u003e\u003dM||a\u003d\u003d\u003do)){var s\u003dy[i];void 0\u003d\u003d\u003do\u0026\u0026(o\u003ds.length);for(var l\u003da;l\u003co;l++){var c\u003ds[l],u\u003dt[2*c],f\u003dt[2*c+1];u\u003e\u003dd\u0026\u0026u\u003c\u003dg\u0026\u0026f\u003e\u003dm\u0026\u0026f\u003c\u003dv\u0026\u0026S.push(c)}var h\u003dx[i],p\u003dh[4*a+0],b\u003dh[4*a+1],A\u003dh[4*a+2],E\u003dh[4*a+3],P\u003dC(h,a+1),I\u003d.5*n,O\u003di+1;L(e,r,I,O,p,b||A||E||P),L(e,r+I,I,O,b,A||E||P),L(e+I,r,I,O,A,E||P),L(e+I,r+I,I,O,E,P)}}function C(t,e){for(var r\u003dnull,n\u003d0;null\u003d\u003d\u003dr;)if(r\u003dt[4*e+n],++n\u003et.length)return null;return r}return L(0,0,1,0,0,1),S},d;function E(t,e,r,i,a){for(var o\u003d[],s\u003d0;s\u003ca;s++){var l\u003db[s],c\u003d_[s][0],u\u003dL(t,e,s),f\u003dL(r,i,s),h\u003dn.ge(l,u),p\u003dn.gt(l,f,h,l.length-1);o[s]\u003d[h+c,p+c]}return o}function L(t,e,r){for(var n\u003d1,i\u003d.5,a\u003d.5,o\u003d.5,s\u003d0;s\u003cr;s++)n\u003c\u003c\u003d2,n+\u003dt\u003ci?e\u003ca?0:1:e\u003ca?2:3,o*\u003d.5,i+\u003dt\u003ci?-o:o,a+\u003de\u003ca?-o:o;return n}}},{\"array-bounds\":76,\"binary-search-bounds\":103,clamp:126,defined:175,dtype:180,\"flatten-vertex-data\":248,\"is-obj\":452,\"math-log2\":463,\"parse-rect\":488,\"pick-by-alias\":494}],61:[function(t,e,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});var n\u003dt(\"@turf/meta\");function i(t){var e\u003d0;if(t\u0026\u0026t.length\u003e0){e+\u003dMath.abs(a(t[0]));for(var r\u003d1;r\u003ct.length;r++)e-\u003dMath.abs(a(t[r]))}return e}function a(t){var e,r,n,i,a,s,l\u003d0,c\u003dt.length;if(c\u003e2){for(s\u003d0;s\u003cc;s++)s\u003d\u003d\u003dc-2?(n\u003dc-2,i\u003dc-1,a\u003d0):s\u003d\u003d\u003dc-1?(n\u003dc-1,i\u003d0,a\u003d1):(n\u003ds,i\u003ds+1,a\u003ds+2),e\u003dt[n],r\u003dt[i],l+\u003d(o(t[a][0])-o(e[0]))*Math.sin(o(r[1]));l\u003d6378137*l*6378137/2}return l}function o(t){return t*Math.PI/180}r.default\u003dfunction(t){return n.geomReduce(t,(function(t,e){return t+function(t){var e,r\u003d0;switch(t.type){case\"Polygon\":return i(t.coordinates);case\"MultiPolygon\":for(e\u003d0;e\u003ct.coordinates.length;e++)r+\u003di(t.coordinates[e]);return r;case\"Point\":case\"MultiPoint\":case\"LineString\":case\"MultiLineString\":return 0}return 0}(e)}),0)}},{\"@turf/meta\":63}],62:[function(t,e,r){\"use strict\";function n(t,e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{});var n\u003d{type:\"Feature\"};return(0\u003d\u003d\u003dr.id||r.id)\u0026\u0026(n.id\u003dr.id),r.bbox\u0026\u0026(n.bbox\u003dr.bbox),n.properties\u003de||{},n.geometry\u003dt,n}function i(t,e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),!t)throw new Error(\"coordinates is required\");if(!Array.isArray(t))throw new Error(\"coordinates must be an Array\");if(t.length\u003c2)throw new Error(\"coordinates must be at least 2 numbers long\");if(!d(t[0])||!d(t[1]))throw new Error(\"coordinates must contain numbers\");return n({type:\"Point\",coordinates:t},e,r)}function a(t,e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{});for(var i\u003d0,a\u003dt;i\u003ca.length;i++){var o\u003da[i];if(o.length\u003c4)throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");for(var s\u003d0;s\u003co[o.length-1].length;s++)if(o[o.length-1][s]!\u003d\u003do[0][s])throw new Error(\"First and last Position are not equivalent.\")}return n({type:\"Polygon\",coordinates:t},e,r)}function o(t,e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),t.length\u003c2)throw new Error(\"coordinates must be an array of two or more positions\");return n({type:\"LineString\",coordinates:t},e,r)}function s(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var r\u003d{type:\"FeatureCollection\"};return e.id\u0026\u0026(r.id\u003de.id),e.bbox\u0026\u0026(r.bbox\u003de.bbox),r.features\u003dt,r}function l(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"MultiLineString\",coordinates:t},e,r)}function c(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"MultiPoint\",coordinates:t},e,r)}function u(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"MultiPolygon\",coordinates:t},e,r)}function f(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"kilometers\");var n\u003dr.factors[e];if(!n)throw new Error(e+\" units is invalid\");return t*n}function h(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"kilometers\");var n\u003dr.factors[e];if(!n)throw new Error(e+\" units is invalid\");return t/n}function p(t){return 180*(t%(2*Math.PI))/Math.PI}function d(t){return!isNaN(t)\u0026\u0026null!\u003d\u003dt\u0026\u0026!Array.isArray(t)}Object.defineProperty(r,\"__esModule\",{value:!0}),r.earthRadius\u003d6371008.8,r.factors\u003d{centimeters:100*r.earthRadius,centimetres:100*r.earthRadius,degrees:r.earthRadius/111325,feet:3.28084*r.earthRadius,inches:39.37*r.earthRadius,kilometers:r.earthRadius/1e3,kilometres:r.earthRadius/1e3,meters:r.earthRadius,metres:r.earthRadius,miles:r.earthRadius/1609.344,millimeters:1e3*r.earthRadius,millimetres:1e3*r.earthRadius,nauticalmiles:r.earthRadius/1852,radians:1,yards:1.0936*r.earthRadius},r.unitsFactors\u003d{centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/r.earthRadius,yards:1.0936133},r.areaFactors\u003d{acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,hectares:1e-4,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},r.feature\u003dn,r.geometry\u003dfunction(t,e,r){switch(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),t){case\"Point\":return i(e).geometry;case\"LineString\":return o(e).geometry;case\"Polygon\":return a(e).geometry;case\"MultiPoint\":return c(e).geometry;case\"MultiLineString\":return l(e).geometry;case\"MultiPolygon\":return u(e).geometry;default:throw new Error(t+\" is invalid\")}},r.point\u003di,r.points\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),s(t.map((function(t){return i(t,e)})),r)},r.polygon\u003da,r.polygons\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),s(t.map((function(t){return a(t,e)})),r)},r.lineString\u003do,r.lineStrings\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),s(t.map((function(t){return o(t,e)})),r)},r.featureCollection\u003ds,r.multiLineString\u003dl,r.multiPoint\u003dc,r.multiPolygon\u003du,r.geometryCollection\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"GeometryCollection\",geometries:t},e,r)},r.round\u003dfunction(t,e){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d0),e\u0026\u0026!(e\u003e\u003d0))throw new Error(\"precision must be a positive number\");var r\u003dMath.pow(10,e||0);return Math.round(t*r)/r},r.radiansToLength\u003df,r.lengthToRadians\u003dh,r.lengthToDegrees\u003dfunction(t,e){return p(h(t,e))},r.bearingToAzimuth\u003dfunction(t){var e\u003dt%360;return e\u003c0\u0026\u0026(e+\u003d360),e},r.radiansToDegrees\u003dp,r.degreesToRadians\u003dfunction(t){return t%360*Math.PI/180},r.convertLength\u003dfunction(t,e,r){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"kilometers\"),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d\"kilometers\"),!(t\u003e\u003d0))throw new Error(\"length must be a positive number\");return f(h(t,e),r)},r.convertArea\u003dfunction(t,e,n){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"meters\"),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d\"kilometers\"),!(t\u003e\u003d0))throw new Error(\"area must be a positive number\");var i\u003dr.areaFactors[e];if(!i)throw new Error(\"invalid original units\");var a\u003dr.areaFactors[n];if(!a)throw new Error(\"invalid final units\");return t/i*a},r.isNumber\u003dd,r.isObject\u003dfunction(t){return!!t\u0026\u0026t.constructor\u003d\u003d\u003dObject},r.validateBBox\u003dfunction(t){if(!t)throw new Error(\"bbox is required\");if(!Array.isArray(t))throw new Error(\"bbox must be an Array\");if(4!\u003d\u003dt.length\u0026\u00266!\u003d\u003dt.length)throw new Error(\"bbox must be an Array of 4 or 6 numbers\");t.forEach((function(t){if(!d(t))throw new Error(\"bbox must only contain numbers\")}))},r.validateId\u003dfunction(t){if(!t)throw new Error(\"id is required\");if(-1\u003d\u003d\u003d[\"string\",\"number\"].indexOf(typeof t))throw new Error(\"id must be a number or a string\")}},{}],63:[function(t,e,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});var n\u003dt(\"@turf/helpers\");function i(t,e,r){if(null!\u003d\u003dt)for(var n,a,o,s,l,c,u,f,h\u003d0,p\u003d0,d\u003dt.type,m\u003d\"FeatureCollection\"\u003d\u003d\u003dd,g\u003d\"Feature\"\u003d\u003d\u003dd,v\u003dm?t.features.length:1,y\u003d0;y\u003cv;y++){l\u003d(f\u003d!!(u\u003dm?t.features[y].geometry:g?t.geometry:t)\u0026\u0026\"GeometryCollection\"\u003d\u003d\u003du.type)?u.geometries.length:1;for(var x\u003d0;x\u003cl;x++){var b\u003d0,_\u003d0;if(null!\u003d\u003d(s\u003df?u.geometries[x]:u)){c\u003ds.coordinates;var w\u003ds.type;switch(h\u003d!r||\"Polygon\"!\u003d\u003dw\u0026\u0026\"MultiPolygon\"!\u003d\u003dw?0:1,w){case null:break;case\"Point\":if(!1\u003d\u003d\u003de(c,p,y,b,_))return!1;p++,b++;break;case\"LineString\":case\"MultiPoint\":for(n\u003d0;n\u003cc.length;n++){if(!1\u003d\u003d\u003de(c[n],p,y,b,_))return!1;p++,\"MultiPoint\"\u003d\u003d\u003dw\u0026\u0026b++}\"LineString\"\u003d\u003d\u003dw\u0026\u0026b++;break;case\"Polygon\":case\"MultiLineString\":for(n\u003d0;n\u003cc.length;n++){for(a\u003d0;a\u003cc[n].length-h;a++){if(!1\u003d\u003d\u003de(c[n][a],p,y,b,_))return!1;p++}\"MultiLineString\"\u003d\u003d\u003dw\u0026\u0026b++,\"Polygon\"\u003d\u003d\u003dw\u0026\u0026_++}\"Polygon\"\u003d\u003d\u003dw\u0026\u0026b++;break;case\"MultiPolygon\":for(n\u003d0;n\u003cc.length;n++){for(_\u003d0,a\u003d0;a\u003cc[n].length;a++){for(o\u003d0;o\u003cc[n][a].length-h;o++){if(!1\u003d\u003d\u003de(c[n][a][o],p,y,b,_))return!1;p++}_++}b++}break;case\"GeometryCollection\":for(n\u003d0;n\u003cs.geometries.length;n++)if(!1\u003d\u003d\u003di(s.geometries[n],e,r))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}}}}}function a(t,e){var r;switch(t.type){case\"FeatureCollection\":for(r\u003d0;r\u003ct.features.length\u0026\u0026!1!\u003d\u003de(t.features[r].properties,r);r++);break;case\"Feature\":e(t.properties,0)}}function o(t,e){if(\"Feature\"\u003d\u003d\u003dt.type)e(t,0);else if(\"FeatureCollection\"\u003d\u003d\u003dt.type)for(var r\u003d0;r\u003ct.features.length\u0026\u0026!1!\u003d\u003de(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,c,u,f,h\u003d0,p\u003d\"FeatureCollection\"\u003d\u003d\u003dt.type,d\u003d\"Feature\"\u003d\u003d\u003dt.type,m\u003dp?t.features.length:1;for(r\u003d0;r\u003cm;r++){for(s\u003dp?t.features[r].geometry:d?t.geometry:t,c\u003dp?t.features[r].properties:d?t.properties:{},u\u003dp?t.features[r].bbox:d?t.bbox:void 0,f\u003dp?t.features[r].id:d?t.id:void 0,o\u003d(l\u003d!!s\u0026\u0026\"GeometryCollection\"\u003d\u003d\u003ds.type)?s.geometries.length:1,i\u003d0;i\u003co;i++)if(null!\u003d\u003d(a\u003dl?s.geometries[i]:s))switch(a.type){case\"Point\":case\"LineString\":case\"MultiPoint\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":if(!1\u003d\u003d\u003de(a,h,c,u,f))return!1;break;case\"GeometryCollection\":for(n\u003d0;n\u003ca.geometries.length;n++)if(!1\u003d\u003d\u003de(a.geometries[n],h,c,u,f))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}else if(!1\u003d\u003d\u003de(null,h,c,u,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l\u003dnull\u003d\u003d\u003dt?null:t.type;switch(l){case null:case\"Point\":case\"LineString\":case\"Polygon\":return!1!\u003d\u003de(n.feature(t,i,{bbox:a,id:o}),r,0)\u0026\u0026void 0}switch(l){case\"MultiPoint\":s\u003d\"Point\";break;case\"MultiLineString\":s\u003d\"LineString\";break;case\"MultiPolygon\":s\u003d\"Polygon\"}for(var c\u003d0;c\u003ct.coordinates.length;c++){var u\u003d{type:s,coordinates:t.coordinates[c]};if(!1\u003d\u003d\u003de(n.feature(u,i),r,c))return!1}}))}function c(t,e){l(t,(function(t,r,a){var o\u003d0;if(t.geometry){var s\u003dt.geometry.type;if(\"Point\"!\u003d\u003ds\u0026\u0026\"MultiPoint\"!\u003d\u003ds){var l,c\u003d0,u\u003d0,f\u003d0;return!1!\u003d\u003di(t,(function(i,s,h,p,d){if(void 0\u003d\u003d\u003dl||r\u003ec||p\u003eu||d\u003ef)return l\u003di,c\u003dr,u\u003dp,f\u003dd,void(o\u003d0);var m\u003dn.lineString([l,i],t.properties);if(!1\u003d\u003d\u003de(m,r,a,d,o))return!1;o++,l\u003di}))\u0026\u0026void 0}}}))}function u(t,e){if(!t)throw new Error(\"geojson is required\");l(t,(function(t,r,i){if(null!\u003d\u003dt.geometry){var a\u003dt.geometry.type,o\u003dt.geometry.coordinates;switch(a){case\"LineString\":if(!1\u003d\u003d\u003de(t,r,i,0,0))return!1;break;case\"Polygon\":for(var s\u003d0;s\u003co.length;s++)if(!1\u003d\u003d\u003de(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}r.coordEach\u003di,r.coordReduce\u003dfunction(t,e,r,n){var a\u003dr;return i(t,(function(t,n,i,o,s){a\u003d0\u003d\u003d\u003dn\u0026\u0026void 0\u003d\u003d\u003dr?t:e(a,t,n,i,o,s)}),n),a},r.propEach\u003da,r.propReduce\u003dfunction(t,e,r){var n\u003dr;return a(t,(function(t,i){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i)})),n},r.featureEach\u003do,r.featureReduce\u003dfunction(t,e,r){var n\u003dr;return o(t,(function(t,i){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i)})),n},r.coordAll\u003dfunction(t){var e\u003d[];return i(t,(function(t){e.push(t)})),e},r.geomEach\u003ds,r.geomReduce\u003dfunction(t,e,r){var n\u003dr;return s(t,(function(t,i,a,o,s){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i,a,o,s)})),n},r.flattenEach\u003dl,r.flattenReduce\u003dfunction(t,e,r){var n\u003dr;return l(t,(function(t,i,a){n\u003d0\u003d\u003d\u003di\u0026\u00260\u003d\u003d\u003da\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i,a)})),n},r.segmentEach\u003dc,r.segmentReduce\u003dfunction(t,e,r){var n\u003dr,i\u003d!1;return c(t,(function(t,a,o,s,l){n\u003d!1\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,a,o,s,l),i\u003d!0})),n},r.lineEach\u003du,r.lineReduce\u003dfunction(t,e,r){var n\u003dr;return u(t,(function(t,i,a,o){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i,a,o)})),n},r.findSegment\u003dfunction(t,e){if(e\u003de||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i\u003de.featureIndex||0,a\u003de.multiFeatureIndex||0,o\u003de.geometryIndex||0,s\u003de.segmentIndex||0,l\u003de.properties;switch(t.type){case\"FeatureCollection\":i\u003c0\u0026\u0026(i\u003dt.features.length+i),l\u003dl||t.features[i].properties,r\u003dt.features[i].geometry;break;case\"Feature\":l\u003dl||t.properties,r\u003dt.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r\u003dt;break;default:throw new Error(\"geojson is invalid\")}if(null\u003d\u003d\u003dr)return null;var c\u003dr.coordinates;switch(r.type){case\"Point\":case\"MultiPoint\":return null;case\"LineString\":return s\u003c0\u0026\u0026(s\u003dc.length+s-1),n.lineString([c[s],c[s+1]],l,e);case\"Polygon\":return o\u003c0\u0026\u0026(o\u003dc.length+o),s\u003c0\u0026\u0026(s\u003dc[o].length+s-1),n.lineString([c[o][s],c[o][s+1]],l,e);case\"MultiLineString\":return a\u003c0\u0026\u0026(a\u003dc.length+a),s\u003c0\u0026\u0026(s\u003dc[a].length+s-1),n.lineString([c[a][s],c[a][s+1]],l,e);case\"MultiPolygon\":return a\u003c0\u0026\u0026(a\u003dc.length+a),o\u003c0\u0026\u0026(o\u003dc[a].length+o),s\u003c0\u0026\u0026(s\u003dc[a][o].length-s-1),n.lineString([c[a][o][s],c[a][o][s+1]],l,e)}throw new Error(\"geojson is invalid\")},r.findPoint\u003dfunction(t,e){if(e\u003de||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i\u003de.featureIndex||0,a\u003de.multiFeatureIndex||0,o\u003de.geometryIndex||0,s\u003de.coordIndex||0,l\u003de.properties;switch(t.type){case\"FeatureCollection\":i\u003c0\u0026\u0026(i\u003dt.features.length+i),l\u003dl||t.features[i].properties,r\u003dt.features[i].geometry;break;case\"Feature\":l\u003dl||t.properties,r\u003dt.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r\u003dt;break;default:throw new Error(\"geojson is invalid\")}if(null\u003d\u003d\u003dr)return null;var c\u003dr.coordinates;switch(r.type){case\"Point\":return n.point(c,l,e);case\"MultiPoint\":return a\u003c0\u0026\u0026(a\u003dc.length+a),n.point(c[a],l,e);case\"LineString\":return s\u003c0\u0026\u0026(s\u003dc.length+s),n.point(c[s],l,e);case\"Polygon\":return o\u003c0\u0026\u0026(o\u003dc.length+o),s\u003c0\u0026\u0026(s\u003dc[o].length+s),n.point(c[o][s],l,e);case\"MultiLineString\":return a\u003c0\u0026\u0026(a\u003dc.length+a),s\u003c0\u0026\u0026(s\u003dc[a].length+s),n.point(c[a][s],l,e);case\"MultiPolygon\":return a\u003c0\u0026\u0026(a\u003dc.length+a),o\u003c0\u0026\u0026(o\u003dc[a].length+o),s\u003c0\u0026\u0026(s\u003dc[a][o].length-s),n.point(c[a][o][s],l,e)}throw new Error(\"geojson is invalid\")}},{\"@turf/helpers\":62}],64:[function(t,e,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});var n\u003dt(\"@turf/meta\");function i(t){var e\u003d[1/0,1/0,-1/0,-1/0];return n.coordEach(t,(function(t){e[0]\u003et[0]\u0026\u0026(e[0]\u003dt[0]),e[1]\u003et[1]\u0026\u0026(e[1]\u003dt[1]),e[2]\u003ct[0]\u0026\u0026(e[2]\u003dt[0]),e[3]\u003ct[1]\u0026\u0026(e[3]\u003dt[1])})),e}i.default\u003di,r.default\u003di},{\"@turf/meta\":66}],65:[function(t,e,r){arguments[4][62][0].apply(r,arguments)},{dup:62}],66:[function(t,e,r){arguments[4][63][0].apply(r,arguments)},{\"@turf/helpers\":65,dup:63}],67:[function(t,e,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});var n\u003dt(\"@turf/meta\"),i\u003dt(\"@turf/helpers\");r.default\u003dfunction(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var r\u003d0,a\u003d0,o\u003d0;return n.coordEach(t,(function(t){r+\u003dt[0],a+\u003dt[1],o++})),i.point([r/o,a/o],e.properties)}},{\"@turf/helpers\":68,\"@turf/meta\":69}],68:[function(t,e,r){\"use strict\";function n(t,e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{});var n\u003d{type:\"Feature\"};return(0\u003d\u003d\u003dr.id||r.id)\u0026\u0026(n.id\u003dr.id),r.bbox\u0026\u0026(n.bbox\u003dr.bbox),n.properties\u003de||{},n.geometry\u003dt,n}function i(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"Point\",coordinates:t},e,r)}function a(t,e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{});for(var i\u003d0,a\u003dt;i\u003ca.length;i++){var o\u003da[i];if(o.length\u003c4)throw new Error(\"Each LinearRing of a Polygon must have 4 or more Positions.\");for(var s\u003d0;s\u003co[o.length-1].length;s++)if(o[o.length-1][s]!\u003d\u003do[0][s])throw new Error(\"First and last Position are not equivalent.\")}return n({type:\"Polygon\",coordinates:t},e,r)}function o(t,e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),t.length\u003c2)throw new Error(\"coordinates must be an array of two or more positions\");return n({type:\"LineString\",coordinates:t},e,r)}function s(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var r\u003d{type:\"FeatureCollection\"};return e.id\u0026\u0026(r.id\u003de.id),e.bbox\u0026\u0026(r.bbox\u003de.bbox),r.features\u003dt,r}function l(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"MultiLineString\",coordinates:t},e,r)}function c(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"MultiPoint\",coordinates:t},e,r)}function u(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"MultiPolygon\",coordinates:t},e,r)}function f(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"kilometers\");var n\u003dr.factors[e];if(!n)throw new Error(e+\" units is invalid\");return t*n}function h(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"kilometers\");var n\u003dr.factors[e];if(!n)throw new Error(e+\" units is invalid\");return t/n}function p(t){return 180*(t%(2*Math.PI))/Math.PI}function d(t){return!isNaN(t)\u0026\u0026null!\u003d\u003dt\u0026\u0026!Array.isArray(t)\u0026\u0026!/^\\s*$/.test(t)}Object.defineProperty(r,\"__esModule\",{value:!0}),r.earthRadius\u003d6371008.8,r.factors\u003d{centimeters:100*r.earthRadius,centimetres:100*r.earthRadius,degrees:r.earthRadius/111325,feet:3.28084*r.earthRadius,inches:39.37*r.earthRadius,kilometers:r.earthRadius/1e3,kilometres:r.earthRadius/1e3,meters:r.earthRadius,metres:r.earthRadius,miles:r.earthRadius/1609.344,millimeters:1e3*r.earthRadius,millimetres:1e3*r.earthRadius,nauticalmiles:r.earthRadius/1852,radians:1,yards:r.earthRadius/1.0936},r.unitsFactors\u003d{centimeters:100,centimetres:100,degrees:1/111325,feet:3.28084,inches:39.37,kilometers:.001,kilometres:.001,meters:1,metres:1,miles:1/1609.344,millimeters:1e3,millimetres:1e3,nauticalmiles:1/1852,radians:1/r.earthRadius,yards:1/1.0936},r.areaFactors\u003d{acres:247105e-9,centimeters:1e4,centimetres:1e4,feet:10.763910417,inches:1550.003100006,kilometers:1e-6,kilometres:1e-6,meters:1,metres:1,miles:386e-9,millimeters:1e6,millimetres:1e6,yards:1.195990046},r.feature\u003dn,r.geometry\u003dfunction(t,e,r){switch(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),t){case\"Point\":return i(e).geometry;case\"LineString\":return o(e).geometry;case\"Polygon\":return a(e).geometry;case\"MultiPoint\":return c(e).geometry;case\"MultiLineString\":return l(e).geometry;case\"MultiPolygon\":return u(e).geometry;default:throw new Error(t+\" is invalid\")}},r.point\u003di,r.points\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),s(t.map((function(t){return i(t,e)})),r)},r.polygon\u003da,r.polygons\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),s(t.map((function(t){return a(t,e)})),r)},r.lineString\u003do,r.lineStrings\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),s(t.map((function(t){return o(t,e)})),r)},r.featureCollection\u003ds,r.multiLineString\u003dl,r.multiPoint\u003dc,r.multiPolygon\u003du,r.geometryCollection\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),n({type:\"GeometryCollection\",geometries:t},e,r)},r.round\u003dfunction(t,e){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d0),e\u0026\u0026!(e\u003e\u003d0))throw new Error(\"precision must be a positive number\");var r\u003dMath.pow(10,e||0);return Math.round(t*r)/r},r.radiansToLength\u003df,r.lengthToRadians\u003dh,r.lengthToDegrees\u003dfunction(t,e){return p(h(t,e))},r.bearingToAzimuth\u003dfunction(t){var e\u003dt%360;return e\u003c0\u0026\u0026(e+\u003d360),e},r.radiansToDegrees\u003dp,r.degreesToRadians\u003dfunction(t){return t%360*Math.PI/180},r.convertLength\u003dfunction(t,e,r){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"kilometers\"),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d\"kilometers\"),!(t\u003e\u003d0))throw new Error(\"length must be a positive number\");return f(h(t,e),r)},r.convertArea\u003dfunction(t,e,n){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d\"meters\"),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d\"kilometers\"),!(t\u003e\u003d0))throw new Error(\"area must be a positive number\");var i\u003dr.areaFactors[e];if(!i)throw new Error(\"invalid original units\");var a\u003dr.areaFactors[n];if(!a)throw new Error(\"invalid final units\");return t/i*a},r.isNumber\u003dd,r.isObject\u003dfunction(t){return!!t\u0026\u0026t.constructor\u003d\u003d\u003dObject},r.validateBBox\u003dfunction(t){if(!t)throw new Error(\"bbox is required\");if(!Array.isArray(t))throw new Error(\"bbox must be an Array\");if(4!\u003d\u003dt.length\u0026\u00266!\u003d\u003dt.length)throw new Error(\"bbox must be an Array of 4 or 6 numbers\");t.forEach((function(t){if(!d(t))throw new Error(\"bbox must only contain numbers\")}))},r.validateId\u003dfunction(t){if(!t)throw new Error(\"id is required\");if(-1\u003d\u003d\u003d[\"string\",\"number\"].indexOf(typeof t))throw new Error(\"id must be a number or a string\")},r.radians2degrees\u003dfunction(){throw new Error(\"method has been renamed to `radiansToDegrees`\")},r.degrees2radians\u003dfunction(){throw new Error(\"method has been renamed to `degreesToRadians`\")},r.distanceToDegrees\u003dfunction(){throw new Error(\"method has been renamed to `lengthToDegrees`\")},r.distanceToRadians\u003dfunction(){throw new Error(\"method has been renamed to `lengthToRadians`\")},r.radiansToDistance\u003dfunction(){throw new Error(\"method has been renamed to `radiansToLength`\")},r.bearingToAngle\u003dfunction(){throw new Error(\"method has been renamed to `bearingToAzimuth`\")},r.convertDistance\u003dfunction(){throw new Error(\"method has been renamed to `convertLength`\")}},{}],69:[function(t,e,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});var n\u003dt(\"@turf/helpers\");function i(t,e,r){if(null!\u003d\u003dt)for(var n,a,o,s,l,c,u,f,h\u003d0,p\u003d0,d\u003dt.type,m\u003d\"FeatureCollection\"\u003d\u003d\u003dd,g\u003d\"Feature\"\u003d\u003d\u003dd,v\u003dm?t.features.length:1,y\u003d0;y\u003cv;y++){l\u003d(f\u003d!!(u\u003dm?t.features[y].geometry:g?t.geometry:t)\u0026\u0026\"GeometryCollection\"\u003d\u003d\u003du.type)?u.geometries.length:1;for(var x\u003d0;x\u003cl;x++){var b\u003d0,_\u003d0;if(null!\u003d\u003d(s\u003df?u.geometries[x]:u)){c\u003ds.coordinates;var w\u003ds.type;switch(h\u003d!r||\"Polygon\"!\u003d\u003dw\u0026\u0026\"MultiPolygon\"!\u003d\u003dw?0:1,w){case null:break;case\"Point\":if(!1\u003d\u003d\u003de(c,p,y,b,_))return!1;p++,b++;break;case\"LineString\":case\"MultiPoint\":for(n\u003d0;n\u003cc.length;n++){if(!1\u003d\u003d\u003de(c[n],p,y,b,_))return!1;p++,\"MultiPoint\"\u003d\u003d\u003dw\u0026\u0026b++}\"LineString\"\u003d\u003d\u003dw\u0026\u0026b++;break;case\"Polygon\":case\"MultiLineString\":for(n\u003d0;n\u003cc.length;n++){for(a\u003d0;a\u003cc[n].length-h;a++){if(!1\u003d\u003d\u003de(c[n][a],p,y,b,_))return!1;p++}\"MultiLineString\"\u003d\u003d\u003dw\u0026\u0026b++,\"Polygon\"\u003d\u003d\u003dw\u0026\u0026_++}\"Polygon\"\u003d\u003d\u003dw\u0026\u0026b++;break;case\"MultiPolygon\":for(n\u003d0;n\u003cc.length;n++){for(_\u003d0,a\u003d0;a\u003cc[n].length;a++){for(o\u003d0;o\u003cc[n][a].length-h;o++){if(!1\u003d\u003d\u003de(c[n][a][o],p,y,b,_))return!1;p++}_++}b++}break;case\"GeometryCollection\":for(n\u003d0;n\u003cs.geometries.length;n++)if(!1\u003d\u003d\u003di(s.geometries[n],e,r))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}}}}}function a(t,e){var r;switch(t.type){case\"FeatureCollection\":for(r\u003d0;r\u003ct.features.length\u0026\u0026!1!\u003d\u003de(t.features[r].properties,r);r++);break;case\"Feature\":e(t.properties,0)}}function o(t,e){if(\"Feature\"\u003d\u003d\u003dt.type)e(t,0);else if(\"FeatureCollection\"\u003d\u003d\u003dt.type)for(var r\u003d0;r\u003ct.features.length\u0026\u0026!1!\u003d\u003de(t.features[r],r);r++);}function s(t,e){var r,n,i,a,o,s,l,c,u,f,h\u003d0,p\u003d\"FeatureCollection\"\u003d\u003d\u003dt.type,d\u003d\"Feature\"\u003d\u003d\u003dt.type,m\u003dp?t.features.length:1;for(r\u003d0;r\u003cm;r++){for(s\u003dp?t.features[r].geometry:d?t.geometry:t,c\u003dp?t.features[r].properties:d?t.properties:{},u\u003dp?t.features[r].bbox:d?t.bbox:void 0,f\u003dp?t.features[r].id:d?t.id:void 0,o\u003d(l\u003d!!s\u0026\u0026\"GeometryCollection\"\u003d\u003d\u003ds.type)?s.geometries.length:1,i\u003d0;i\u003co;i++)if(null!\u003d\u003d(a\u003dl?s.geometries[i]:s))switch(a.type){case\"Point\":case\"LineString\":case\"MultiPoint\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":if(!1\u003d\u003d\u003de(a,h,c,u,f))return!1;break;case\"GeometryCollection\":for(n\u003d0;n\u003ca.geometries.length;n++)if(!1\u003d\u003d\u003de(a.geometries[n],h,c,u,f))return!1;break;default:throw new Error(\"Unknown Geometry Type\")}else if(!1\u003d\u003d\u003de(null,h,c,u,f))return!1;h++}}function l(t,e){s(t,(function(t,r,i,a,o){var s,l\u003dnull\u003d\u003d\u003dt?null:t.type;switch(l){case null:case\"Point\":case\"LineString\":case\"Polygon\":return!1!\u003d\u003de(n.feature(t,i,{bbox:a,id:o}),r,0)\u0026\u0026void 0}switch(l){case\"MultiPoint\":s\u003d\"Point\";break;case\"MultiLineString\":s\u003d\"LineString\";break;case\"MultiPolygon\":s\u003d\"Polygon\"}for(var c\u003d0;c\u003ct.coordinates.length;c++){var u\u003d{type:s,coordinates:t.coordinates[c]};if(!1\u003d\u003d\u003de(n.feature(u,i),r,c))return!1}}))}function c(t,e){l(t,(function(t,r,a){var o\u003d0;if(t.geometry){var s\u003dt.geometry.type;if(\"Point\"!\u003d\u003ds\u0026\u0026\"MultiPoint\"!\u003d\u003ds){var l,c\u003d0,u\u003d0,f\u003d0;return!1!\u003d\u003di(t,(function(i,s,h,p,d){if(void 0\u003d\u003d\u003dl||r\u003ec||p\u003eu||d\u003ef)return l\u003di,c\u003dr,u\u003dp,f\u003dd,void(o\u003d0);var m\u003dn.lineString([l,i],t.properties);if(!1\u003d\u003d\u003de(m,r,a,d,o))return!1;o++,l\u003di}))\u0026\u0026void 0}}}))}function u(t,e){if(!t)throw new Error(\"geojson is required\");l(t,(function(t,r,i){if(null!\u003d\u003dt.geometry){var a\u003dt.geometry.type,o\u003dt.geometry.coordinates;switch(a){case\"LineString\":if(!1\u003d\u003d\u003de(t,r,i,0,0))return!1;break;case\"Polygon\":for(var s\u003d0;s\u003co.length;s++)if(!1\u003d\u003d\u003de(n.lineString(o[s],t.properties),r,i,s))return!1}}}))}r.coordEach\u003di,r.coordReduce\u003dfunction(t,e,r,n){var a\u003dr;return i(t,(function(t,n,i,o,s){a\u003d0\u003d\u003d\u003dn\u0026\u0026void 0\u003d\u003d\u003dr?t:e(a,t,n,i,o,s)}),n),a},r.propEach\u003da,r.propReduce\u003dfunction(t,e,r){var n\u003dr;return a(t,(function(t,i){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i)})),n},r.featureEach\u003do,r.featureReduce\u003dfunction(t,e,r){var n\u003dr;return o(t,(function(t,i){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i)})),n},r.coordAll\u003dfunction(t){var e\u003d[];return i(t,(function(t){e.push(t)})),e},r.geomEach\u003ds,r.geomReduce\u003dfunction(t,e,r){var n\u003dr;return s(t,(function(t,i,a,o,s){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i,a,o,s)})),n},r.flattenEach\u003dl,r.flattenReduce\u003dfunction(t,e,r){var n\u003dr;return l(t,(function(t,i,a){n\u003d0\u003d\u003d\u003di\u0026\u00260\u003d\u003d\u003da\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i,a)})),n},r.segmentEach\u003dc,r.segmentReduce\u003dfunction(t,e,r){var n\u003dr,i\u003d!1;return c(t,(function(t,a,o,s,l){n\u003d!1\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,a,o,s,l),i\u003d!0})),n},r.lineEach\u003du,r.lineReduce\u003dfunction(t,e,r){var n\u003dr;return u(t,(function(t,i,a,o){n\u003d0\u003d\u003d\u003di\u0026\u0026void 0\u003d\u003d\u003dr?t:e(n,t,i,a,o)})),n},r.findSegment\u003dfunction(t,e){if(e\u003de||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i\u003de.featureIndex||0,a\u003de.multiFeatureIndex||0,o\u003de.geometryIndex||0,s\u003de.segmentIndex||0,l\u003de.properties;switch(t.type){case\"FeatureCollection\":i\u003c0\u0026\u0026(i\u003dt.features.length+i),l\u003dl||t.features[i].properties,r\u003dt.features[i].geometry;break;case\"Feature\":l\u003dl||t.properties,r\u003dt.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r\u003dt;break;default:throw new Error(\"geojson is invalid\")}if(null\u003d\u003d\u003dr)return null;var c\u003dr.coordinates;switch(r.type){case\"Point\":case\"MultiPoint\":return null;case\"LineString\":return s\u003c0\u0026\u0026(s\u003dc.length+s-1),n.lineString([c[s],c[s+1]],l,e);case\"Polygon\":return o\u003c0\u0026\u0026(o\u003dc.length+o),s\u003c0\u0026\u0026(s\u003dc[o].length+s-1),n.lineString([c[o][s],c[o][s+1]],l,e);case\"MultiLineString\":return a\u003c0\u0026\u0026(a\u003dc.length+a),s\u003c0\u0026\u0026(s\u003dc[a].length+s-1),n.lineString([c[a][s],c[a][s+1]],l,e);case\"MultiPolygon\":return a\u003c0\u0026\u0026(a\u003dc.length+a),o\u003c0\u0026\u0026(o\u003dc[a].length+o),s\u003c0\u0026\u0026(s\u003dc[a][o].length-s-1),n.lineString([c[a][o][s],c[a][o][s+1]],l,e)}throw new Error(\"geojson is invalid\")},r.findPoint\u003dfunction(t,e){if(e\u003de||{},!n.isObject(e))throw new Error(\"options is invalid\");var r,i\u003de.featureIndex||0,a\u003de.multiFeatureIndex||0,o\u003de.geometryIndex||0,s\u003de.coordIndex||0,l\u003de.properties;switch(t.type){case\"FeatureCollection\":i\u003c0\u0026\u0026(i\u003dt.features.length+i),l\u003dl||t.features[i].properties,r\u003dt.features[i].geometry;break;case\"Feature\":l\u003dl||t.properties,r\u003dt.geometry;break;case\"Point\":case\"MultiPoint\":return null;case\"LineString\":case\"Polygon\":case\"MultiLineString\":case\"MultiPolygon\":r\u003dt;break;default:throw new Error(\"geojson is invalid\")}if(null\u003d\u003d\u003dr)return null;var c\u003dr.coordinates;switch(r.type){case\"Point\":return n.point(c,l,e);case\"MultiPoint\":return a\u003c0\u0026\u0026(a\u003dc.length+a),n.point(c[a],l,e);case\"LineString\":return s\u003c0\u0026\u0026(s\u003dc.length+s),n.point(c[s],l,e);case\"Polygon\":return o\u003c0\u0026\u0026(o\u003dc.length+o),s\u003c0\u0026\u0026(s\u003dc[o].length+s),n.point(c[o][s],l,e);case\"MultiLineString\":return a\u003c0\u0026\u0026(a\u003dc.length+a),s\u003c0\u0026\u0026(s\u003dc[a].length+s),n.point(c[a][s],l,e);case\"MultiPolygon\":return a\u003c0\u0026\u0026(a\u003dc.length+a),o\u003c0\u0026\u0026(o\u003dc[a].length+o),s\u003c0\u0026\u0026(s\u003dc[a][o].length-s),n.point(c[a][o][s],l,e)}throw new Error(\"geojson is invalid\")}},{\"@turf/helpers\":68}],70:[function(t,e,r){\"use strict\";var n\u003d\"undefined\"\u003d\u003dtypeof WeakMap?t(\"weak-map\"):WeakMap,i\u003dt(\"gl-buffer\"),a\u003dt(\"gl-vao\"),o\u003dnew n;e.exports\u003dfunction(t){var e\u003do.get(t),r\u003de\u0026\u0026(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n\u003di(t,new Float32Array([-1,-1,-1,4,4,-1]));(e\u003da(t,[{buffer:n,type:t.FLOAT,size:2}]))._triangleBuffer\u003dn,o.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}},{\"gl-buffer\":263,\"gl-vao\":357,\"weak-map\":621}],71:[function(t,e,r){e.exports\u003dfunction(t){var e\u003d0,r\u003d0,n\u003d0,i\u003d0;return t.map((function(t){var a\u003d(t\u003dt.slice())[0],o\u003da.toUpperCase();if(a!\u003do)switch(t[0]\u003do,a){case\"a\":t[6]+\u003dn,t[7]+\u003di;break;case\"v\":t[1]+\u003di;break;case\"h\":t[1]+\u003dn;break;default:for(var s\u003d1;s\u003ct.length;)t[s++]+\u003dn,t[s++]+\u003di}switch(o){case\"Z\":n\u003de,i\u003dr;break;case\"H\":n\u003dt[1];break;case\"V\":i\u003dt[1];break;case\"M\":n\u003de\u003dt[1],i\u003dr\u003dt[2];break;default:n\u003dt[t.length-2],i\u003dt[t.length-1]}return t}))}},{}],72:[function(t,e,r){var n\u003dt(\"pad-left\");e.exports\u003dfunction(t,e,r){e\u003d\"number\"\u003d\u003dtypeof e?e:1,r\u003dr||\": \";var i\u003dt.split(/\\r?\\n/),a\u003dString(i.length+e-1).length;return i.map((function(t,i){var o\u003di+e,s\u003dString(o).length;return n(o,a-s)+r+t})).join(\"\\n\")}},{\"pad-left\":486}],73:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.length;if(0\u003d\u003d\u003de)return[];if(1\u003d\u003d\u003de)return[0];for(var r\u003dt[0].length,n\u003d[t[0]],a\u003d[0],o\u003d1;o\u003ce;++o)if(n.push(t[o]),i(n,r)){if(a.push(o),a.length\u003d\u003d\u003dr+1)return a}else n.pop();return a};var n\u003dt(\"robust-orientation\");function i(t,e){for(var r\u003dnew Array(e+1),i\u003d0;i\u003ct.length;++i)r[i]\u003dt[i];for(i\u003d0;i\u003c\u003dt.length;++i){for(var a\u003dt.length;a\u003c\u003de;++a){for(var o\u003dnew Array(e),s\u003d0;s\u003ce;++s)o[s]\u003dMath.pow(a+1-i,s);r[a]\u003do}if(n.apply(void 0,r))return!0}return!1}},{\"robust-orientation\":544}],74:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return n(e).filter((function(r){for(var n\u003dnew Array(r.length),a\u003d0;a\u003cr.length;++a)n[a]\u003de[r[a]];return i(n)*t\u003c1}))};var n\u003dt(\"delaunay-triangulate\"),i\u003dt(\"circumradius\")},{circumradius:125,\"delaunay-triangulate\":176}],75:[function(t,e,r){e.exports\u003dfunction(t,e){return i(n(t,e))};var n\u003dt(\"alpha-complex\"),i\u003dt(\"simplicial-complex-boundary\")},{\"alpha-complex\":74,\"simplicial-complex-boundary\":552}],76:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){if(!t||null\u003d\u003dt.length)throw Error(\"Argument should be an array\");e\u003dnull\u003d\u003de?1:Math.floor(e);for(var r\u003dArray(2*e),n\u003d0;n\u003ce;n++){for(var i\u003d-1/0,a\u003d1/0,o\u003dn,s\u003dt.length;o\u003cs;o+\u003de)t[o]\u003ei\u0026\u0026(i\u003dt[o]),t[o]\u003ca\u0026\u0026(a\u003dt[o]);r[n]\u003da,r[e+n]\u003di}return r}},{}],77:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){if(\"function\"\u003d\u003dtypeof Array.prototype.findIndex)return t.findIndex(e,r);if(\"function\"!\u003dtypeof e)throw new TypeError(\"predicate must be a function\");var n\u003dObject(t),i\u003dn.length;if(0\u003d\u003d\u003di)return-1;for(var a\u003d0;a\u003ci;a++)if(e.call(r,n[a],a,n))return a;return-1}},{}],78:[function(t,e,r){\"use strict\";var n\u003dt(\"array-bounds\");e.exports\u003dfunction(t,e,r){if(!t||null\u003d\u003dt.length)throw Error(\"Argument should be an array\");null\u003d\u003de\u0026\u0026(e\u003d1);null\u003d\u003dr\u0026\u0026(r\u003dn(t,e));for(var i\u003d0;i\u003ce;i++){var a\u003dr[e+i],o\u003dr[i],s\u003di,l\u003dt.length;if(a\u003d\u003d\u003d1/0\u0026\u0026o\u003d\u003d\u003d-1/0)for(s\u003di;s\u003cl;s+\u003de)t[s]\u003dt[s]\u003d\u003d\u003da?1:t[s]\u003d\u003d\u003do?0:.5;else if(a\u003d\u003d\u003d1/0)for(s\u003di;s\u003cl;s+\u003de)t[s]\u003dt[s]\u003d\u003d\u003da?1:0;else if(o\u003d\u003d\u003d-1/0)for(s\u003di;s\u003cl;s+\u003de)t[s]\u003dt[s]\u003d\u003d\u003do?0:1;else{var c\u003da-o;for(s\u003di;s\u003cl;s+\u003de)isNaN(t[s])||(t[s]\u003d0\u003d\u003d\u003dc?.5:(t[s]-o)/c)}}return t}},{\"array-bounds\":76}],79:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003d\"number\"\u003d\u003dtypeof t,n\u003d\"number\"\u003d\u003dtypeof e;r\u0026\u0026!n?(e\u003dt,t\u003d0):r||n||(t\u003d0,e\u003d0);var i\u003d(e|\u003d0)-(t|\u003d0);if(i\u003c0)throw new Error(\"array length must be positive\");for(var a\u003dnew Array(i),o\u003d0,s\u003dt;o\u003ci;o++,s++)a[o]\u003ds;return a}},{}],80:[function(t,e,r){(function(r){(function(){\"use strict\";var n\u003dt(\"object-assign\");\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh \u003cfeross@feross.org\u003e \u003chttp://feross.org\u003e\n * @license  MIT\n */function i(t,e){if(t\u003d\u003d\u003de)return 0;for(var r\u003dt.length,n\u003de.length,i\u003d0,a\u003dMath.min(r,n);i\u003ca;++i)if(t[i]!\u003d\u003de[i]){r\u003dt[i],n\u003de[i];break}return r\u003cn?-1:n\u003cr?1:0}function a(t){return r.Buffer\u0026\u0026\"function\"\u003d\u003dtypeof r.Buffer.isBuffer?r.Buffer.isBuffer(t):!(null\u003d\u003dt||!t._isBuffer)}var o\u003dt(\"util/\"),s\u003dObject.prototype.hasOwnProperty,l\u003dArray.prototype.slice,c\u003d\"foo\"\u003d\u003d\u003dfunction(){}.name;function u(t){return Object.prototype.toString.call(t)}function f(t){return!a(t)\u0026\u0026(\"function\"\u003d\u003dtypeof r.ArrayBuffer\u0026\u0026(\"function\"\u003d\u003dtypeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t\u0026\u0026(t instanceof DataView||!!(t.buffer\u0026\u0026t.buffer instanceof ArrayBuffer))))}var h\u003de.exports\u003dy,p\u003d/\\s*function\\s+([^\\(\\s]*)\\s*/;function d(t){if(o.isFunction(t)){if(c)return t.name;var e\u003dt.toString().match(p);return e\u0026\u0026e[1]}}function m(t,e){return\"string\"\u003d\u003dtypeof t?t.length\u003ce?t:t.slice(0,e):t}function g(t){if(c||!o.isFunction(t))return o.inspect(t);var e\u003dd(t);return\"[Function\"+(e?\": \"+e:\"\")+\"]\"}function v(t,e,r,n,i){throw new h.AssertionError({message:r,actual:t,expected:e,operator:n,stackStartFunction:i})}function y(t,e){t||v(t,!0,e,\"\u003d\u003d\",h.ok)}function x(t,e,r,n){if(t\u003d\u003d\u003de)return!0;if(a(t)\u0026\u0026a(e))return 0\u003d\u003d\u003di(t,e);if(o.isDate(t)\u0026\u0026o.isDate(e))return t.getTime()\u003d\u003d\u003de.getTime();if(o.isRegExp(t)\u0026\u0026o.isRegExp(e))return t.source\u003d\u003d\u003de.source\u0026\u0026t.global\u003d\u003d\u003de.global\u0026\u0026t.multiline\u003d\u003d\u003de.multiline\u0026\u0026t.lastIndex\u003d\u003d\u003de.lastIndex\u0026\u0026t.ignoreCase\u003d\u003d\u003de.ignoreCase;if(null!\u003d\u003dt\u0026\u0026\"object\"\u003d\u003dtypeof t||null!\u003d\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e){if(f(t)\u0026\u0026f(e)\u0026\u0026u(t)\u003d\u003d\u003du(e)\u0026\u0026!(t instanceof Float32Array||t instanceof Float64Array))return 0\u003d\u003d\u003di(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(a(t)!\u003d\u003da(e))return!1;var s\u003d(n\u003dn||{actual:[],expected:[]}).actual.indexOf(t);return-1!\u003d\u003ds\u0026\u0026s\u003d\u003d\u003dn.expected.indexOf(e)||(n.actual.push(t),n.expected.push(e),function(t,e,r,n){if(null\u003d\u003dt||null\u003d\u003de)return!1;if(o.isPrimitive(t)||o.isPrimitive(e))return t\u003d\u003d\u003de;if(r\u0026\u0026Object.getPrototypeOf(t)!\u003d\u003dObject.getPrototypeOf(e))return!1;var i\u003db(t),a\u003db(e);if(i\u0026\u0026!a||!i\u0026\u0026a)return!1;if(i)return t\u003dl.call(t),e\u003dl.call(e),x(t,e,r);var s,c,u\u003dT(t),f\u003dT(e);if(u.length!\u003d\u003df.length)return!1;for(u.sort(),f.sort(),c\u003du.length-1;c\u003e\u003d0;c--)if(u[c]!\u003d\u003df[c])return!1;for(c\u003du.length-1;c\u003e\u003d0;c--)if(s\u003du[c],!x(t[s],e[s],r,n))return!1;return!0}(t,e,r,n))}return r?t\u003d\u003d\u003de:t\u003d\u003de}function b(t){return\"[object Arguments]\"\u003d\u003dObject.prototype.toString.call(t)}function _(t,e){if(!t||!e)return!1;if(\"[object RegExp]\"\u003d\u003dObject.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)\u0026\u0026!0\u003d\u003d\u003de.call({},t)}function w(t,e,r,n){var i;if(\"function\"!\u003dtypeof e)throw new TypeError(\u0027\"block\" argument must be a function\u0027);\"string\"\u003d\u003dtypeof r\u0026\u0026(n\u003dr,r\u003dnull),i\u003dfunction(t){var e;try{t()}catch(t){e\u003dt}return e}(e),n\u003d(r\u0026\u0026r.name?\" (\"+r.name+\").\":\".\")+(n?\" \"+n:\".\"),t\u0026\u0026!i\u0026\u0026v(i,r,\"Missing expected exception\"+n);var a\u003d\"string\"\u003d\u003dtypeof n,s\u003d!t\u0026\u0026i\u0026\u0026!r;if((!t\u0026\u0026o.isError(i)\u0026\u0026a\u0026\u0026_(i,r)||s)\u0026\u0026v(i,r,\"Got unwanted exception\"+n),t\u0026\u0026i\u0026\u0026r\u0026\u0026!_(i,r)||!t\u0026\u0026i)throw i}h.AssertionError\u003dfunction(t){this.name\u003d\"AssertionError\",this.actual\u003dt.actual,this.expected\u003dt.expected,this.operator\u003dt.operator,t.message?(this.message\u003dt.message,this.generatedMessage\u003d!1):(this.message\u003dfunction(t){return m(g(t.actual),128)+\" \"+t.operator+\" \"+m(g(t.expected),128)}(this),this.generatedMessage\u003d!0);var e\u003dt.stackStartFunction||v;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r\u003dnew Error;if(r.stack){var n\u003dr.stack,i\u003dd(e),a\u003dn.indexOf(\"\\n\"+i);if(a\u003e\u003d0){var o\u003dn.indexOf(\"\\n\",a+1);n\u003dn.substring(o+1)}this.stack\u003dn}}},o.inherits(h.AssertionError,Error),h.fail\u003dv,h.ok\u003dy,h.equal\u003dfunction(t,e,r){t!\u003de\u0026\u0026v(t,e,r,\"\u003d\u003d\",h.equal)},h.notEqual\u003dfunction(t,e,r){t\u003d\u003de\u0026\u0026v(t,e,r,\"!\u003d\",h.notEqual)},h.deepEqual\u003dfunction(t,e,r){x(t,e,!1)||v(t,e,r,\"deepEqual\",h.deepEqual)},h.deepStrictEqual\u003dfunction(t,e,r){x(t,e,!0)||v(t,e,r,\"deepStrictEqual\",h.deepStrictEqual)},h.notDeepEqual\u003dfunction(t,e,r){x(t,e,!1)\u0026\u0026v(t,e,r,\"notDeepEqual\",h.notDeepEqual)},h.notDeepStrictEqual\u003dfunction t(e,r,n){x(e,r,!0)\u0026\u0026v(e,r,n,\"notDeepStrictEqual\",t)},h.strictEqual\u003dfunction(t,e,r){t!\u003d\u003de\u0026\u0026v(t,e,r,\"\u003d\u003d\u003d\",h.strictEqual)},h.notStrictEqual\u003dfunction(t,e,r){t\u003d\u003d\u003de\u0026\u0026v(t,e,r,\"!\u003d\u003d\",h.notStrictEqual)},h.throws\u003dfunction(t,e,r){w(!0,t,e,r)},h.doesNotThrow\u003dfunction(t,e,r){w(!1,t,e,r)},h.ifError\u003dfunction(t){if(t)throw t},h.strict\u003dn((function t(e,r){e||v(e,!0,r,\"\u003d\u003d\",t)}),h,{equal:h.strictEqual,deepEqual:h.deepStrictEqual,notEqual:h.notStrictEqual,notDeepEqual:h.notDeepStrictEqual}),h.strict.strict\u003dh.strict;var T\u003dObject.keys||function(t){var e\u003d[];for(var r in t)s.call(t,r)\u0026\u0026e.push(r);return e}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"object-assign\":483,\"util/\":83}],81:[function(t,e,r){\"function\"\u003d\u003dtypeof Object.create?e.exports\u003dfunction(t,e){t.super_\u003de,t.prototype\u003dObject.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:e.exports\u003dfunction(t,e){t.super_\u003de;var r\u003dfunction(){};r.prototype\u003de.prototype,t.prototype\u003dnew r,t.prototype.constructor\u003dt}},{}],82:[function(t,e,r){e.exports\u003dfunction(t){return t\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026\"function\"\u003d\u003dtypeof t.copy\u0026\u0026\"function\"\u003d\u003dtypeof t.fill\u0026\u0026\"function\"\u003d\u003dtypeof t.readUInt8}},{}],83:[function(t,e,r){(function(e,n){(function(){var i\u003d/%[sdj%]/g;r.format\u003dfunction(t){if(!v(t)){for(var e\u003d[],r\u003d0;r\u003carguments.length;r++)e.push(s(arguments[r]));return e.join(\" \")}r\u003d1;for(var n\u003darguments,a\u003dn.length,o\u003dString(t).replace(i,(function(t){if(\"%%\"\u003d\u003d\u003dt)return\"%\";if(r\u003e\u003da)return t;switch(t){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(t){return\"[Circular]\"}default:return t}})),l\u003dn[r];r\u003ca;l\u003dn[++r])m(l)||!b(l)?o+\u003d\" \"+l:o+\u003d\" \"+s(l);return o},r.deprecate\u003dfunction(t,i){if(y(n.process))return function(){return r.deprecate(t,i).apply(this,arguments)};if(!0\u003d\u003d\u003de.noDeprecation)return t;var a\u003d!1;return function(){if(!a){if(e.throwDeprecation)throw new Error(i);e.traceDeprecation?console.trace(i):console.error(i),a\u003d!0}return t.apply(this,arguments)}};var a,o\u003d{};function s(t,e){var n\u003d{seen:[],stylize:c};return arguments.length\u003e\u003d3\u0026\u0026(n.depth\u003darguments[2]),arguments.length\u003e\u003d4\u0026\u0026(n.colors\u003darguments[3]),d(e)?n.showHidden\u003de:e\u0026\u0026r._extend(n,e),y(n.showHidden)\u0026\u0026(n.showHidden\u003d!1),y(n.depth)\u0026\u0026(n.depth\u003d2),y(n.colors)\u0026\u0026(n.colors\u003d!1),y(n.customInspect)\u0026\u0026(n.customInspect\u003d!0),n.colors\u0026\u0026(n.stylize\u003dl),u(n,t,n.depth)}function l(t,e){var r\u003ds.styles[e];return r?\"\\x1b[\"+s.colors[r][0]+\"m\"+t+\"\\x1b[\"+s.colors[r][1]+\"m\":t}function c(t,e){return t}function u(t,e,n){if(t.customInspect\u0026\u0026e\u0026\u0026T(e.inspect)\u0026\u0026e.inspect!\u003d\u003dr.inspect\u0026\u0026(!e.constructor||e.constructor.prototype!\u003d\u003de)){var i\u003de.inspect(n,t);return v(i)||(i\u003du(t,i,n)),i}var a\u003dfunction(t,e){if(y(e))return t.stylize(\"undefined\",\"undefined\");if(v(e)){var r\u003d\"\u0027\"+JSON.stringify(e).replace(/^\"|\"$/g,\"\").replace(/\u0027/g,\"\\\\\u0027\").replace(/\\\\\"/g,\u0027\"\u0027)+\"\u0027\";return t.stylize(r,\"string\")}if(g(e))return t.stylize(\"\"+e,\"number\");if(d(e))return t.stylize(\"\"+e,\"boolean\");if(m(e))return t.stylize(\"null\",\"null\")}(t,e);if(a)return a;var o\u003dObject.keys(e),s\u003dfunction(t){var e\u003d{};return t.forEach((function(t,r){e[t]\u003d!0})),e}(o);if(t.showHidden\u0026\u0026(o\u003dObject.getOwnPropertyNames(e)),w(e)\u0026\u0026(o.indexOf(\"message\")\u003e\u003d0||o.indexOf(\"description\")\u003e\u003d0))return f(e);if(0\u003d\u003d\u003do.length){if(T(e)){var l\u003de.name?\": \"+e.name:\"\";return t.stylize(\"[Function\"+l+\"]\",\"special\")}if(x(e))return t.stylize(RegExp.prototype.toString.call(e),\"regexp\");if(_(e))return t.stylize(Date.prototype.toString.call(e),\"date\");if(w(e))return f(e)}var c,b\u003d\"\",k\u003d!1,M\u003d[\"{\",\"}\"];(p(e)\u0026\u0026(k\u003d!0,M\u003d[\"[\",\"]\"]),T(e))\u0026\u0026(b\u003d\" [Function\"+(e.name?\": \"+e.name:\"\")+\"]\");return x(e)\u0026\u0026(b\u003d\" \"+RegExp.prototype.toString.call(e)),_(e)\u0026\u0026(b\u003d\" \"+Date.prototype.toUTCString.call(e)),w(e)\u0026\u0026(b\u003d\" \"+f(e)),0!\u003d\u003do.length||k\u0026\u00260!\u003de.length?n\u003c0?x(e)?t.stylize(RegExp.prototype.toString.call(e),\"regexp\"):t.stylize(\"[Object]\",\"special\"):(t.seen.push(e),c\u003dk?function(t,e,r,n,i){for(var a\u003d[],o\u003d0,s\u003de.length;o\u003cs;++o)E(e,String(o))?a.push(h(t,e,r,n,String(o),!0)):a.push(\"\");return i.forEach((function(i){i.match(/^\\d+$/)||a.push(h(t,e,r,n,i,!0))})),a}(t,e,n,s,o):o.map((function(r){return h(t,e,n,s,r,k)})),t.seen.pop(),function(t,e,r){if(t.reduce((function(t,e){return e.indexOf(\"\\n\")\u003e\u003d0\u0026\u00260,t+e.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1}),0)\u003e60)return r[0]+(\"\"\u003d\u003d\u003de?\"\":e+\"\\n \")+\" \"+t.join(\",\\n  \")+\" \"+r[1];return r[0]+e+\" \"+t.join(\", \")+\" \"+r[1]}(c,b,M)):M[0]+b+M[1]}function f(t){return\"[\"+Error.prototype.toString.call(t)+\"]\"}function h(t,e,r,n,i,a){var o,s,l;if((l\u003dObject.getOwnPropertyDescriptor(e,i)||{value:e[i]}).get?s\u003dl.set?t.stylize(\"[Getter/Setter]\",\"special\"):t.stylize(\"[Getter]\",\"special\"):l.set\u0026\u0026(s\u003dt.stylize(\"[Setter]\",\"special\")),E(n,i)||(o\u003d\"[\"+i+\"]\"),s||(t.seen.indexOf(l.value)\u003c0?(s\u003dm(r)?u(t,l.value,null):u(t,l.value,r-1)).indexOf(\"\\n\")\u003e-1\u0026\u0026(s\u003da?s.split(\"\\n\").map((function(t){return\"  \"+t})).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map((function(t){return\"   \"+t})).join(\"\\n\")):s\u003dt.stylize(\"[Circular]\",\"special\")),y(o)){if(a\u0026\u0026i.match(/^\\d+$/))return s;(o\u003dJSON.stringify(\"\"+i)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(o\u003do.substr(1,o.length-2),o\u003dt.stylize(o,\"name\")):(o\u003do.replace(/\u0027/g,\"\\\\\u0027\").replace(/\\\\\"/g,\u0027\"\u0027).replace(/(^\"|\"$)/g,\"\u0027\"),o\u003dt.stylize(o,\"string\"))}return o+\": \"+s}function p(t){return Array.isArray(t)}function d(t){return\"boolean\"\u003d\u003dtypeof t}function m(t){return null\u003d\u003d\u003dt}function g(t){return\"number\"\u003d\u003dtypeof t}function v(t){return\"string\"\u003d\u003dtypeof t}function y(t){return void 0\u003d\u003d\u003dt}function x(t){return b(t)\u0026\u0026\"[object RegExp]\"\u003d\u003d\u003dk(t)}function b(t){return\"object\"\u003d\u003dtypeof t\u0026\u0026null!\u003d\u003dt}function _(t){return b(t)\u0026\u0026\"[object Date]\"\u003d\u003d\u003dk(t)}function w(t){return b(t)\u0026\u0026(\"[object Error]\"\u003d\u003d\u003dk(t)||t instanceof Error)}function T(t){return\"function\"\u003d\u003dtypeof t}function k(t){return Object.prototype.toString.call(t)}function M(t){return t\u003c10?\"0\"+t.toString(10):t.toString(10)}r.debuglog\u003dfunction(t){if(y(a)\u0026\u0026(a\u003de.env.NODE_DEBUG||\"\"),t\u003dt.toUpperCase(),!o[t])if(new RegExp(\"\\\\b\"+t+\"\\\\b\",\"i\").test(a)){var n\u003de.pid;o[t]\u003dfunction(){var e\u003dr.format.apply(r,arguments);console.error(\"%s %d: %s\",t,n,e)}}else o[t]\u003dfunction(){};return o[t]},r.inspect\u003ds,s.colors\u003d{bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles\u003d{special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},r.isArray\u003dp,r.isBoolean\u003dd,r.isNull\u003dm,r.isNullOrUndefined\u003dfunction(t){return null\u003d\u003dt},r.isNumber\u003dg,r.isString\u003dv,r.isSymbol\u003dfunction(t){return\"symbol\"\u003d\u003dtypeof t},r.isUndefined\u003dy,r.isRegExp\u003dx,r.isObject\u003db,r.isDate\u003d_,r.isError\u003dw,r.isFunction\u003dT,r.isPrimitive\u003dfunction(t){return null\u003d\u003d\u003dt||\"boolean\"\u003d\u003dtypeof t||\"number\"\u003d\u003dtypeof t||\"string\"\u003d\u003dtypeof t||\"symbol\"\u003d\u003dtypeof t||void 0\u003d\u003d\u003dt},r.isBuffer\u003dt(\"./support/isBuffer\");var A\u003d[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function S(){var t\u003dnew Date,e\u003d[M(t.getHours()),M(t.getMinutes()),M(t.getSeconds())].join(\":\");return[t.getDate(),A[t.getMonth()],e].join(\" \")}function E(t,e){return Object.prototype.hasOwnProperty.call(t,e)}r.log\u003dfunction(){console.log(\"%s - %s\",S(),r.format.apply(r,arguments))},r.inherits\u003dt(\"inherits\"),r._extend\u003dfunction(t,e){if(!e||!b(e))return t;for(var r\u003dObject.keys(e),n\u003dr.length;n--;)t[r[n]]\u003de[r[n]];return t}}).call(this)}).call(this,t(\"_process\"),\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"./support/isBuffer\":82,_process:524,inherits:81}],84:[function(t,e,r){e.exports\u003dfunction(t){return atob(t)}},{}],85:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){for(var r\u003de.length,a\u003dnew Array(r+1),o\u003d0;o\u003cr;++o){for(var s\u003dnew Array(r+1),l\u003d0;l\u003c\u003dr;++l)s[l]\u003dt[l][o];a[o]\u003ds}a[r]\u003dnew Array(r+1);for(o\u003d0;o\u003c\u003dr;++o)a[r][o]\u003d1;var c\u003dnew Array(r+1);for(o\u003d0;o\u003cr;++o)c[o]\u003de[o];c[r]\u003d1;var u\u003dn(a,c),f\u003di(u[r+1]);0\u003d\u003d\u003df\u0026\u0026(f\u003d1);var h\u003dnew Array(r+1);for(o\u003d0;o\u003c\u003dr;++o)h[o]\u003di(u[o])/f;return h};var n\u003dt(\"robust-linear-solve\");function i(t){for(var e\u003d0,r\u003d0;r\u003ct.length;++r)e+\u003dt[r];return e}},{\"robust-linear-solve\":543}],86:[function(t,e,r){\"use strict\";r.byteLength\u003dfunction(t){var e\u003dc(t),r\u003de[0],n\u003de[1];return 3*(r+n)/4-n},r.toByteArray\u003dfunction(t){var e,r,n\u003dc(t),o\u003dn[0],s\u003dn[1],l\u003dnew a(function(t,e,r){return 3*(e+r)/4-r}(0,o,s)),u\u003d0,f\u003ds\u003e0?o-4:o;for(r\u003d0;r\u003cf;r+\u003d4)e\u003di[t.charCodeAt(r)]\u003c\u003c18|i[t.charCodeAt(r+1)]\u003c\u003c12|i[t.charCodeAt(r+2)]\u003c\u003c6|i[t.charCodeAt(r+3)],l[u++]\u003de\u003e\u003e16\u0026255,l[u++]\u003de\u003e\u003e8\u0026255,l[u++]\u003d255\u0026e;2\u003d\u003d\u003ds\u0026\u0026(e\u003di[t.charCodeAt(r)]\u003c\u003c2|i[t.charCodeAt(r+1)]\u003e\u003e4,l[u++]\u003d255\u0026e);1\u003d\u003d\u003ds\u0026\u0026(e\u003di[t.charCodeAt(r)]\u003c\u003c10|i[t.charCodeAt(r+1)]\u003c\u003c4|i[t.charCodeAt(r+2)]\u003e\u003e2,l[u++]\u003de\u003e\u003e8\u0026255,l[u++]\u003d255\u0026e);return l},r.fromByteArray\u003dfunction(t){for(var e,r\u003dt.length,i\u003dr%3,a\u003d[],o\u003d0,s\u003dr-i;o\u003cs;o+\u003d16383)a.push(u(t,o,o+16383\u003es?s:o+16383));1\u003d\u003d\u003di?(e\u003dt[r-1],a.push(n[e\u003e\u003e2]+n[e\u003c\u003c4\u002663]+\"\u003d\u003d\")):2\u003d\u003d\u003di\u0026\u0026(e\u003d(t[r-2]\u003c\u003c8)+t[r-1],a.push(n[e\u003e\u003e10]+n[e\u003e\u003e4\u002663]+n[e\u003c\u003c2\u002663]+\"\u003d\"));return a.join(\"\")};for(var n\u003d[],i\u003d[],a\u003d\"undefined\"!\u003dtypeof Uint8Array?Uint8Array:Array,o\u003d\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s\u003d0,l\u003do.length;s\u003cl;++s)n[s]\u003do[s],i[o.charCodeAt(s)]\u003ds;function c(t){var e\u003dt.length;if(e%4\u003e0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r\u003dt.indexOf(\"\u003d\");return-1\u003d\u003d\u003dr\u0026\u0026(r\u003de),[r,r\u003d\u003d\u003de?0:4-r%4]}function u(t,e,r){for(var i,a,o\u003d[],s\u003de;s\u003cr;s+\u003d3)i\u003d(t[s]\u003c\u003c16\u002616711680)+(t[s+1]\u003c\u003c8\u002665280)+(255\u0026t[s+2]),o.push(n[(a\u003di)\u003e\u003e18\u002663]+n[a\u003e\u003e12\u002663]+n[a\u003e\u003e6\u002663]+n[63\u0026a]);return o.join(\"\")}i[\"-\".charCodeAt(0)]\u003d62,i[\"_\".charCodeAt(0)]\u003d63},{}],87:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/rationalize\");e.exports\u003dfunction(t,e){return n(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}},{\"./lib/rationalize\":97}],88:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}},{}],89:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/rationalize\");e.exports\u003dfunction(t,e){return n(t[0].mul(e[1]),t[1].mul(e[0]))}},{\"./lib/rationalize\":97}],90:[function(t,e,r){\"use strict\";var n\u003dt(\"./is-rat\"),i\u003dt(\"./lib/is-bn\"),a\u003dt(\"./lib/num-to-bn\"),o\u003dt(\"./lib/str-to-bn\"),s\u003dt(\"./lib/rationalize\"),l\u003dt(\"./div\");e.exports\u003dfunction t(e,r){if(n(e))return r?l(e,t(r)):[e[0].clone(),e[1].clone()];var c,u,f\u003d0;if(i(e))c\u003de.clone();else if(\"string\"\u003d\u003dtypeof e)c\u003do(e);else{if(0\u003d\u003d\u003de)return[a(0),a(1)];if(e\u003d\u003d\u003dMath.floor(e))c\u003da(e);else{for(;e!\u003d\u003dMath.floor(e);)e*\u003dMath.pow(2,256),f-\u003d256;c\u003da(e)}}if(n(r))c.mul(r[1]),u\u003dr[0].clone();else if(i(r))u\u003dr.clone();else if(\"string\"\u003d\u003dtypeof r)u\u003do(r);else if(r)if(r\u003d\u003d\u003dMath.floor(r))u\u003da(r);else{for(;r!\u003d\u003dMath.floor(r);)r*\u003dMath.pow(2,256),f+\u003d256;u\u003da(r)}else u\u003da(1);f\u003e0?c\u003dc.ushln(f):f\u003c0\u0026\u0026(u\u003du.ushln(-f));return s(c,u)}},{\"./div\":89,\"./is-rat\":91,\"./lib/is-bn\":95,\"./lib/num-to-bn\":96,\"./lib/rationalize\":97,\"./lib/str-to-bn\":98}],91:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/is-bn\");e.exports\u003dfunction(t){return Array.isArray(t)\u0026\u00262\u003d\u003d\u003dt.length\u0026\u0026n(t[0])\u0026\u0026n(t[1])}},{\"./lib/is-bn\":95}],92:[function(t,e,r){\"use strict\";var n\u003dt(\"bn.js\");e.exports\u003dfunction(t){return t.cmp(new n(0))}},{\"bn.js\":106}],93:[function(t,e,r){\"use strict\";var n\u003dt(\"./bn-sign\");e.exports\u003dfunction(t){var e\u003dt.length,r\u003dt.words,i\u003d0;if(1\u003d\u003d\u003de)i\u003dr[0];else if(2\u003d\u003d\u003de)i\u003dr[0]+67108864*r[1];else for(var a\u003d0;a\u003ce;a++){var o\u003dr[a];i+\u003do*Math.pow(67108864,a)}return n(t)*i}},{\"./bn-sign\":92}],94:[function(t,e,r){\"use strict\";var n\u003dt(\"double-bits\"),i\u003dt(\"bit-twiddle\").countTrailingZeros;e.exports\u003dfunction(t){var e\u003di(n.lo(t));if(e\u003c32)return e;var r\u003di(n.hi(t));if(r\u003e20)return 52;return r+32}},{\"bit-twiddle\":104,\"double-bits\":178}],95:[function(t,e,r){\"use strict\";t(\"bn.js\");e.exports\u003dfunction(t){return t\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026Boolean(t.words)}},{\"bn.js\":106}],96:[function(t,e,r){\"use strict\";var n\u003dt(\"bn.js\"),i\u003dt(\"double-bits\");e.exports\u003dfunction(t){var e\u003di.exponent(t);return e\u003c52?new n(t):new n(t*Math.pow(2,52-e)).ushln(e-52)}},{\"bn.js\":106,\"double-bits\":178}],97:[function(t,e,r){\"use strict\";var n\u003dt(\"./num-to-bn\"),i\u003dt(\"./bn-sign\");e.exports\u003dfunction(t,e){var r\u003di(t),a\u003di(e);if(0\u003d\u003d\u003dr)return[n(0),n(1)];if(0\u003d\u003d\u003da)return[n(0),n(0)];a\u003c0\u0026\u0026(t\u003dt.neg(),e\u003de.neg());var o\u003dt.gcd(e);if(o.cmpn(1))return[t.div(o),e.div(o)];return[t,e]}},{\"./bn-sign\":92,\"./num-to-bn\":96}],98:[function(t,e,r){\"use strict\";var n\u003dt(\"bn.js\");e.exports\u003dfunction(t){return new n(t)}},{\"bn.js\":106}],99:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/rationalize\");e.exports\u003dfunction(t,e){return n(t[0].mul(e[0]),t[1].mul(e[1]))}},{\"./lib/rationalize\":97}],100:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/bn-sign\");e.exports\u003dfunction(t){return n(t[0])*n(t[1])}},{\"./lib/bn-sign\":92}],101:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/rationalize\");e.exports\u003dfunction(t,e){return n(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}},{\"./lib/rationalize\":97}],102:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/bn-to-num\"),i\u003dt(\"./lib/ctz\");e.exports\u003dfunction(t){var e\u003dt[0],r\u003dt[1];if(0\u003d\u003d\u003de.cmpn(0))return 0;var a\u003de.abs().divmod(r.abs()),o\u003da.div,s\u003dn(o),l\u003da.mod,c\u003de.negative!\u003d\u003dr.negative?-1:1;if(0\u003d\u003d\u003dl.cmpn(0))return c*s;if(s){var u\u003di(s)+4,f\u003dn(l.ushln(u).divRound(r));return c*(s+f*Math.pow(2,-u))}var h\u003dr.bitLength()-l.bitLength()+53;f\u003dn(l.ushln(h).divRound(r));return h\u003c1023?c*f*Math.pow(2,-h):(f*\u003dMath.pow(2,-1023),c*f*Math.pow(2,1023-h))}},{\"./lib/bn-to-num\":93,\"./lib/ctz\":94}],103:[function(t,e,r){\"use strict\";function n(t,e,r,n,i){for(var a\u003di+1;n\u003c\u003di;){var o\u003dn+i\u003e\u003e\u003e1,s\u003dt[o];(void 0!\u003d\u003dr?r(s,e):s-e)\u003e\u003d0?(a\u003do,i\u003do-1):n\u003do+1}return a}function i(t,e,r,n,i){for(var a\u003di+1;n\u003c\u003di;){var o\u003dn+i\u003e\u003e\u003e1,s\u003dt[o];(void 0!\u003d\u003dr?r(s,e):s-e)\u003e0?(a\u003do,i\u003do-1):n\u003do+1}return a}function a(t,e,r,n,i){for(var a\u003dn-1;n\u003c\u003di;){var o\u003dn+i\u003e\u003e\u003e1,s\u003dt[o];(void 0!\u003d\u003dr?r(s,e):s-e)\u003c0?(a\u003do,n\u003do+1):i\u003do-1}return a}function o(t,e,r,n,i){for(var a\u003dn-1;n\u003c\u003di;){var o\u003dn+i\u003e\u003e\u003e1,s\u003dt[o];(void 0!\u003d\u003dr?r(s,e):s-e)\u003c\u003d0?(a\u003do,n\u003do+1):i\u003do-1}return a}function s(t,e,r,n,i){for(;n\u003c\u003di;){var a\u003dn+i\u003e\u003e\u003e1,o\u003dt[a],s\u003dvoid 0!\u003d\u003dr?r(o,e):o-e;if(0\u003d\u003d\u003ds)return a;s\u003c\u003d0?n\u003da+1:i\u003da-1}return-1}function l(t,e,r,n,i,a){return\"function\"\u003d\u003dtypeof r?a(t,e,r,void 0\u003d\u003d\u003dn?0:0|n,void 0\u003d\u003d\u003di?t.length-1:0|i):a(t,e,void 0,void 0\u003d\u003d\u003dr?0:0|r,void 0\u003d\u003d\u003dn?t.length-1:0|n)}e.exports\u003d{ge:function(t,e,r,i,a){return l(t,e,r,i,a,n)},gt:function(t,e,r,n,a){return l(t,e,r,n,a,i)},lt:function(t,e,r,n,i){return l(t,e,r,n,i,a)},le:function(t,e,r,n,i){return l(t,e,r,n,i,o)},eq:function(t,e,r,n,i){return l(t,e,r,n,i,s)}}},{}],104:[function(t,e,r){\"use strict\";function n(t){var e\u003d32;return(t\u0026\u003d-t)\u0026\u0026e--,65535\u0026t\u0026\u0026(e-\u003d16),16711935\u0026t\u0026\u0026(e-\u003d8),252645135\u0026t\u0026\u0026(e-\u003d4),858993459\u0026t\u0026\u0026(e-\u003d2),1431655765\u0026t\u0026\u0026(e-\u003d1),e}r.INT_BITS\u003d32,r.INT_MAX\u003d2147483647,r.INT_MIN\u003d-1\u003c\u003c31,r.sign\u003dfunction(t){return(t\u003e0)-(t\u003c0)},r.abs\u003dfunction(t){var e\u003dt\u003e\u003e31;return(t^e)-e},r.min\u003dfunction(t,e){return e^(t^e)\u0026-(t\u003ce)},r.max\u003dfunction(t,e){return t^(t^e)\u0026-(t\u003ce)},r.isPow2\u003dfunction(t){return!(t\u0026t-1||!t)},r.log2\u003dfunction(t){var e,r;return e\u003d(t\u003e65535)\u003c\u003c4,e|\u003dr\u003d((t\u003e\u003e\u003e\u003de)\u003e255)\u003c\u003c3,e|\u003dr\u003d((t\u003e\u003e\u003e\u003dr)\u003e15)\u003c\u003c2,(e|\u003dr\u003d((t\u003e\u003e\u003e\u003dr)\u003e3)\u003c\u003c1)|(t\u003e\u003e\u003e\u003dr)\u003e\u003e1},r.log10\u003dfunction(t){return t\u003e\u003d1e9?9:t\u003e\u003d1e8?8:t\u003e\u003d1e7?7:t\u003e\u003d1e6?6:t\u003e\u003d1e5?5:t\u003e\u003d1e4?4:t\u003e\u003d1e3?3:t\u003e\u003d100?2:t\u003e\u003d10?1:0},r.popCount\u003dfunction(t){return 16843009*((t\u003d(858993459\u0026(t-\u003dt\u003e\u003e\u003e1\u00261431655765))+(t\u003e\u003e\u003e2\u0026858993459))+(t\u003e\u003e\u003e4)\u0026252645135)\u003e\u003e\u003e24},r.countTrailingZeros\u003dn,r.nextPow2\u003dfunction(t){return t+\u003d0\u003d\u003d\u003dt,--t,t|\u003dt\u003e\u003e\u003e1,t|\u003dt\u003e\u003e\u003e2,t|\u003dt\u003e\u003e\u003e4,t|\u003dt\u003e\u003e\u003e8,(t|\u003dt\u003e\u003e\u003e16)+1},r.prevPow2\u003dfunction(t){return t|\u003dt\u003e\u003e\u003e1,t|\u003dt\u003e\u003e\u003e2,t|\u003dt\u003e\u003e\u003e4,t|\u003dt\u003e\u003e\u003e8,(t|\u003dt\u003e\u003e\u003e16)-(t\u003e\u003e\u003e1)},r.parity\u003dfunction(t){return t^\u003dt\u003e\u003e\u003e16,t^\u003dt\u003e\u003e\u003e8,t^\u003dt\u003e\u003e\u003e4,27030\u003e\u003e\u003e(t\u0026\u003d15)\u00261};var i\u003dnew Array(256);!function(t){for(var e\u003d0;e\u003c256;++e){var r\u003de,n\u003de,i\u003d7;for(r\u003e\u003e\u003e\u003d1;r;r\u003e\u003e\u003e\u003d1)n\u003c\u003c\u003d1,n|\u003d1\u0026r,--i;t[e]\u003dn\u003c\u003ci\u0026255}}(i),r.reverse\u003dfunction(t){return i[255\u0026t]\u003c\u003c24|i[t\u003e\u003e\u003e8\u0026255]\u003c\u003c16|i[t\u003e\u003e\u003e16\u0026255]\u003c\u003c8|i[t\u003e\u003e\u003e24\u0026255]},r.interleave2\u003dfunction(t,e){return(t\u003d1431655765\u0026((t\u003d858993459\u0026((t\u003d252645135\u0026((t\u003d16711935\u0026((t\u0026\u003d65535)|t\u003c\u003c8))|t\u003c\u003c4))|t\u003c\u003c2))|t\u003c\u003c1))|(e\u003d1431655765\u0026((e\u003d858993459\u0026((e\u003d252645135\u0026((e\u003d16711935\u0026((e\u0026\u003d65535)|e\u003c\u003c8))|e\u003c\u003c4))|e\u003c\u003c2))|e\u003c\u003c1))\u003c\u003c1},r.deinterleave2\u003dfunction(t,e){return(t\u003d65535\u0026((t\u003d16711935\u0026((t\u003d252645135\u0026((t\u003d858993459\u0026((t\u003dt\u003e\u003e\u003ee\u00261431655765)|t\u003e\u003e\u003e1))|t\u003e\u003e\u003e2))|t\u003e\u003e\u003e4))|t\u003e\u003e\u003e16))\u003c\u003c16\u003e\u003e16},r.interleave3\u003dfunction(t,e,r){return t\u003d1227133513\u0026((t\u003d3272356035\u0026((t\u003d251719695\u0026((t\u003d4278190335\u0026((t\u0026\u003d1023)|t\u003c\u003c16))|t\u003c\u003c8))|t\u003c\u003c4))|t\u003c\u003c2),(t|\u003d(e\u003d1227133513\u0026((e\u003d3272356035\u0026((e\u003d251719695\u0026((e\u003d4278190335\u0026((e\u0026\u003d1023)|e\u003c\u003c16))|e\u003c\u003c8))|e\u003c\u003c4))|e\u003c\u003c2))\u003c\u003c1)|(r\u003d1227133513\u0026((r\u003d3272356035\u0026((r\u003d251719695\u0026((r\u003d4278190335\u0026((r\u0026\u003d1023)|r\u003c\u003c16))|r\u003c\u003c8))|r\u003c\u003c4))|r\u003c\u003c2))\u003c\u003c2},r.deinterleave3\u003dfunction(t,e){return(t\u003d1023\u0026((t\u003d4278190335\u0026((t\u003d251719695\u0026((t\u003d3272356035\u0026((t\u003dt\u003e\u003e\u003ee\u00261227133513)|t\u003e\u003e\u003e2))|t\u003e\u003e\u003e4))|t\u003e\u003e\u003e8))|t\u003e\u003e\u003e16))\u003c\u003c22\u003e\u003e22},r.nextCombination\u003dfunction(t){var e\u003dt|t-1;return e+1|(~e\u0026-~e)-1\u003e\u003e\u003en(t)+1}},{}],105:[function(t,e,r){\"use strict\";var n\u003dt(\"clamp\");e.exports\u003dfunction(t,e){e||(e\u003d{});var r,o,s,l,c,u,f,h,p,d,m,g\u003dnull\u003d\u003de.cutoff?.25:e.cutoff,v\u003dnull\u003d\u003de.radius?8:e.radius,y\u003de.channel||0;if(ArrayBuffer.isView(t)||Array.isArray(t)){if(!e.width||!e.height)throw Error(\"For raw data width and height should be provided by options\");r\u003de.width,o\u003de.height,l\u003dt,u\u003de.stride?e.stride:Math.floor(t.length/r/o)}else window.HTMLCanvasElement\u0026\u0026t instanceof window.HTMLCanvasElement?(f\u003d(h\u003dt).getContext(\"2d\"),r\u003dh.width,o\u003dh.height,p\u003df.getImageData(0,0,r,o),l\u003dp.data,u\u003d4):window.CanvasRenderingContext2D\u0026\u0026t instanceof window.CanvasRenderingContext2D?(h\u003dt.canvas,f\u003dt,r\u003dh.width,o\u003dh.height,p\u003df.getImageData(0,0,r,o),l\u003dp.data,u\u003d4):window.ImageData\u0026\u0026t instanceof window.ImageData\u0026\u0026(p\u003dt,r\u003dt.width,o\u003dt.height,l\u003dp.data,u\u003d4);if(s\u003dMath.max(r,o),window.Uint8ClampedArray\u0026\u0026l instanceof window.Uint8ClampedArray||window.Uint8Array\u0026\u0026l instanceof window.Uint8Array)for(c\u003dl,l\u003dArray(r*o),d\u003d0,m\u003dc.length;d\u003cm;d++)l[d]\u003dc[d*u+y]/255;else if(1!\u003d\u003du)throw Error(\"Raw data can have only 1 value per pixel\");var x\u003dArray(r*o),b\u003dArray(r*o),_\u003dArray(s),w\u003dArray(s),T\u003dArray(s+1),k\u003dArray(s);for(d\u003d0,m\u003dr*o;d\u003cm;d++){var M\u003dl[d];x[d]\u003d1\u003d\u003d\u003dM?0:0\u003d\u003d\u003dM?i:Math.pow(Math.max(0,.5-M),2),b[d]\u003d1\u003d\u003d\u003dM?i:0\u003d\u003d\u003dM?0:Math.pow(Math.max(0,M-.5),2)}a(x,r,o,_,w,k,T),a(b,r,o,_,w,k,T);var A\u003dwindow.Float32Array?new Float32Array(r*o):new Array(r*o);for(d\u003d0,m\u003dr*o;d\u003cm;d++)A[d]\u003dn(1-((x[d]-b[d])/v+g),0,1);return A};var i\u003d1e20;function a(t,e,r,n,i,a,s){for(var l\u003d0;l\u003ce;l++){for(var c\u003d0;c\u003cr;c++)n[c]\u003dt[c*e+l];for(o(n,i,a,s,r),c\u003d0;c\u003cr;c++)t[c*e+l]\u003di[c]}for(c\u003d0;c\u003cr;c++){for(l\u003d0;l\u003ce;l++)n[l]\u003dt[c*e+l];for(o(n,i,a,s,e),l\u003d0;l\u003ce;l++)t[c*e+l]\u003dMath.sqrt(i[l])}}function o(t,e,r,n,a){r[0]\u003d0,n[0]\u003d-i,n[1]\u003d+i;for(var o\u003d1,s\u003d0;o\u003ca;o++){for(var l\u003d(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);l\u003c\u003dn[s];)s--,l\u003d(t[o]+o*o-(t[r[s]]+r[s]*r[s]))/(2*o-2*r[s]);r[++s]\u003do,n[s]\u003dl,n[s+1]\u003d+i}for(o\u003d0,s\u003d0;o\u003ca;o++){for(;n[s+1]\u003co;)s++;e[o]\u003d(o-r[s])*(o-r[s])+t[r[s]]}}},{clamp:126}],106:[function(t,e,r){!function(e,r){\"use strict\";function n(t,e){if(!t)throw new Error(e||\"Assertion failed\")}function i(t,e){t.super_\u003de;var r\u003dfunction(){};r.prototype\u003de.prototype,t.prototype\u003dnew r,t.prototype.constructor\u003dt}function a(t,e,r){if(a.isBN(t))return t;this.negative\u003d0,this.words\u003dnull,this.length\u003d0,this.red\u003dnull,null!\u003d\u003dt\u0026\u0026(\"le\"!\u003d\u003de\u0026\u0026\"be\"!\u003d\u003de||(r\u003de,e\u003d10),this._init(t||0,e||10,r||\"be\"))}var o;\"object\"\u003d\u003dtypeof e?e.exports\u003da:r.BN\u003da,a.BN\u003da,a.wordSize\u003d26;try{o\u003dt(\"buffer\").Buffer}catch(t){}function s(t,e,r){for(var n\u003d0,i\u003dMath.min(t.length,r),a\u003de;a\u003ci;a++){var o\u003dt.charCodeAt(a)-48;n\u003c\u003c\u003d4,n|\u003do\u003e\u003d49\u0026\u0026o\u003c\u003d54?o-49+10:o\u003e\u003d17\u0026\u0026o\u003c\u003d22?o-17+10:15\u0026o}return n}function l(t,e,r,n){for(var i\u003d0,a\u003dMath.min(t.length,r),o\u003de;o\u003ca;o++){var s\u003dt.charCodeAt(o)-48;i*\u003dn,i+\u003ds\u003e\u003d49?s-49+10:s\u003e\u003d17?s-17+10:s}return i}a.isBN\u003dfunction(t){return t instanceof a||null!\u003d\u003dt\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026t.constructor.wordSize\u003d\u003d\u003da.wordSize\u0026\u0026Array.isArray(t.words)},a.max\u003dfunction(t,e){return t.cmp(e)\u003e0?t:e},a.min\u003dfunction(t,e){return t.cmp(e)\u003c0?t:e},a.prototype._init\u003dfunction(t,e,r){if(\"number\"\u003d\u003dtypeof t)return this._initNumber(t,e,r);if(\"object\"\u003d\u003dtypeof t)return this._initArray(t,e,r);\"hex\"\u003d\u003d\u003de\u0026\u0026(e\u003d16),n(e\u003d\u003d\u003d(0|e)\u0026\u0026e\u003e\u003d2\u0026\u0026e\u003c\u003d36);var i\u003d0;\"-\"\u003d\u003d\u003d(t\u003dt.toString().replace(/\\s+/g,\"\"))[0]\u0026\u0026i++,16\u003d\u003d\u003de?this._parseHex(t,i):this._parseBase(t,e,i),\"-\"\u003d\u003d\u003dt[0]\u0026\u0026(this.negative\u003d1),this.strip(),\"le\"\u003d\u003d\u003dr\u0026\u0026this._initArray(this.toArray(),e,r)},a.prototype._initNumber\u003dfunction(t,e,r){t\u003c0\u0026\u0026(this.negative\u003d1,t\u003d-t),t\u003c67108864?(this.words\u003d[67108863\u0026t],this.length\u003d1):t\u003c4503599627370496?(this.words\u003d[67108863\u0026t,t/67108864\u002667108863],this.length\u003d2):(n(t\u003c9007199254740992),this.words\u003d[67108863\u0026t,t/67108864\u002667108863,1],this.length\u003d3),\"le\"\u003d\u003d\u003dr\u0026\u0026this._initArray(this.toArray(),e,r)},a.prototype._initArray\u003dfunction(t,e,r){if(n(\"number\"\u003d\u003dtypeof t.length),t.length\u003c\u003d0)return this.words\u003d[0],this.length\u003d1,this;this.length\u003dMath.ceil(t.length/3),this.words\u003dnew Array(this.length);for(var i\u003d0;i\u003cthis.length;i++)this.words[i]\u003d0;var a,o,s\u003d0;if(\"be\"\u003d\u003d\u003dr)for(i\u003dt.length-1,a\u003d0;i\u003e\u003d0;i-\u003d3)o\u003dt[i]|t[i-1]\u003c\u003c8|t[i-2]\u003c\u003c16,this.words[a]|\u003do\u003c\u003cs\u002667108863,this.words[a+1]\u003do\u003e\u003e\u003e26-s\u002667108863,(s+\u003d24)\u003e\u003d26\u0026\u0026(s-\u003d26,a++);else if(\"le\"\u003d\u003d\u003dr)for(i\u003d0,a\u003d0;i\u003ct.length;i+\u003d3)o\u003dt[i]|t[i+1]\u003c\u003c8|t[i+2]\u003c\u003c16,this.words[a]|\u003do\u003c\u003cs\u002667108863,this.words[a+1]\u003do\u003e\u003e\u003e26-s\u002667108863,(s+\u003d24)\u003e\u003d26\u0026\u0026(s-\u003d26,a++);return this.strip()},a.prototype._parseHex\u003dfunction(t,e){this.length\u003dMath.ceil((t.length-e)/6),this.words\u003dnew Array(this.length);for(var r\u003d0;r\u003cthis.length;r++)this.words[r]\u003d0;var n,i,a\u003d0;for(r\u003dt.length-6,n\u003d0;r\u003e\u003de;r-\u003d6)i\u003ds(t,r,r+6),this.words[n]|\u003di\u003c\u003ca\u002667108863,this.words[n+1]|\u003di\u003e\u003e\u003e26-a\u00264194303,(a+\u003d24)\u003e\u003d26\u0026\u0026(a-\u003d26,n++);r+6!\u003d\u003de\u0026\u0026(i\u003ds(t,e,r+6),this.words[n]|\u003di\u003c\u003ca\u002667108863,this.words[n+1]|\u003di\u003e\u003e\u003e26-a\u00264194303),this.strip()},a.prototype._parseBase\u003dfunction(t,e,r){this.words\u003d[0],this.length\u003d1;for(var n\u003d0,i\u003d1;i\u003c\u003d67108863;i*\u003de)n++;n--,i\u003di/e|0;for(var a\u003dt.length-r,o\u003da%n,s\u003dMath.min(a,a-o)+r,c\u003d0,u\u003dr;u\u003cs;u+\u003dn)c\u003dl(t,u,u+n,e),this.imuln(i),this.words[0]+c\u003c67108864?this.words[0]+\u003dc:this._iaddn(c);if(0!\u003d\u003do){var f\u003d1;for(c\u003dl(t,u,t.length,e),u\u003d0;u\u003co;u++)f*\u003de;this.imuln(f),this.words[0]+c\u003c67108864?this.words[0]+\u003dc:this._iaddn(c)}},a.prototype.copy\u003dfunction(t){t.words\u003dnew Array(this.length);for(var e\u003d0;e\u003cthis.length;e++)t.words[e]\u003dthis.words[e];t.length\u003dthis.length,t.negative\u003dthis.negative,t.red\u003dthis.red},a.prototype.clone\u003dfunction(){var t\u003dnew a(null);return this.copy(t),t},a.prototype._expand\u003dfunction(t){for(;this.length\u003ct;)this.words[this.length++]\u003d0;return this},a.prototype.strip\u003dfunction(){for(;this.length\u003e1\u0026\u00260\u003d\u003d\u003dthis.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign\u003dfunction(){return 1\u003d\u003d\u003dthis.length\u0026\u00260\u003d\u003d\u003dthis.words[0]\u0026\u0026(this.negative\u003d0),this},a.prototype.inspect\u003dfunction(){return(this.red?\"\u003cBN-R: \":\"\u003cBN: \")+this.toString(16)+\"\u003e\"};var c\u003d[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],u\u003d[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],f\u003d[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function h(t,e,r){r.negative\u003de.negative^t.negative;var n\u003dt.length+e.length|0;r.length\u003dn,n\u003dn-1|0;var i\u003d0|t.words[0],a\u003d0|e.words[0],o\u003di*a,s\u003d67108863\u0026o,l\u003do/67108864|0;r.words[0]\u003ds;for(var c\u003d1;c\u003cn;c++){for(var u\u003dl\u003e\u003e\u003e26,f\u003d67108863\u0026l,h\u003dMath.min(c,e.length-1),p\u003dMath.max(0,c-t.length+1);p\u003c\u003dh;p++){var d\u003dc-p|0;u+\u003d(o\u003d(i\u003d0|t.words[d])*(a\u003d0|e.words[p])+f)/67108864|0,f\u003d67108863\u0026o}r.words[c]\u003d0|f,l\u003d0|u}return 0!\u003d\u003dl?r.words[c]\u003d0|l:r.length--,r.strip()}a.prototype.toString\u003dfunction(t,e){var r;if(e\u003d0|e||1,16\u003d\u003d\u003d(t\u003dt||10)||\"hex\"\u003d\u003d\u003dt){r\u003d\"\";for(var i\u003d0,a\u003d0,o\u003d0;o\u003cthis.length;o++){var s\u003dthis.words[o],l\u003d(16777215\u0026(s\u003c\u003ci|a)).toString(16);r\u003d0!\u003d\u003d(a\u003ds\u003e\u003e\u003e24-i\u002616777215)||o!\u003d\u003dthis.length-1?c[6-l.length]+l+r:l+r,(i+\u003d2)\u003e\u003d26\u0026\u0026(i-\u003d26,o--)}for(0!\u003d\u003da\u0026\u0026(r\u003da.toString(16)+r);r.length%e!\u003d0;)r\u003d\"0\"+r;return 0!\u003d\u003dthis.negative\u0026\u0026(r\u003d\"-\"+r),r}if(t\u003d\u003d\u003d(0|t)\u0026\u0026t\u003e\u003d2\u0026\u0026t\u003c\u003d36){var h\u003du[t],p\u003df[t];r\u003d\"\";var d\u003dthis.clone();for(d.negative\u003d0;!d.isZero();){var m\u003dd.modn(p).toString(t);r\u003d(d\u003dd.idivn(p)).isZero()?m+r:c[h-m.length]+m+r}for(this.isZero()\u0026\u0026(r\u003d\"0\"+r);r.length%e!\u003d0;)r\u003d\"0\"+r;return 0!\u003d\u003dthis.negative\u0026\u0026(r\u003d\"-\"+r),r}n(!1,\"Base should be between 2 and 36\")},a.prototype.toNumber\u003dfunction(){var t\u003dthis.words[0];return 2\u003d\u003d\u003dthis.length?t+\u003d67108864*this.words[1]:3\u003d\u003d\u003dthis.length\u0026\u00261\u003d\u003d\u003dthis.words[2]?t+\u003d4503599627370496+67108864*this.words[1]:this.length\u003e2\u0026\u0026n(!1,\"Number can only safely store up to 53 bits\"),0!\u003d\u003dthis.negative?-t:t},a.prototype.toJSON\u003dfunction(){return this.toString(16)},a.prototype.toBuffer\u003dfunction(t,e){return n(void 0!\u003d\u003do),this.toArrayLike(o,t,e)},a.prototype.toArray\u003dfunction(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike\u003dfunction(t,e,r){var i\u003dthis.byteLength(),a\u003dr||Math.max(1,i);n(i\u003c\u003da,\"byte array longer than desired length\"),n(a\u003e0,\"Requested array length \u003c\u003d 0\"),this.strip();var o,s,l\u003d\"le\"\u003d\u003d\u003de,c\u003dnew t(a),u\u003dthis.clone();if(l){for(s\u003d0;!u.isZero();s++)o\u003du.andln(255),u.iushrn(8),c[s]\u003do;for(;s\u003ca;s++)c[s]\u003d0}else{for(s\u003d0;s\u003ca-i;s++)c[s]\u003d0;for(s\u003d0;!u.isZero();s++)o\u003du.andln(255),u.iushrn(8),c[a-s-1]\u003do}return c},Math.clz32?a.prototype._countBits\u003dfunction(t){return 32-Math.clz32(t)}:a.prototype._countBits\u003dfunction(t){var e\u003dt,r\u003d0;return e\u003e\u003d4096\u0026\u0026(r+\u003d13,e\u003e\u003e\u003e\u003d13),e\u003e\u003d64\u0026\u0026(r+\u003d7,e\u003e\u003e\u003e\u003d7),e\u003e\u003d8\u0026\u0026(r+\u003d4,e\u003e\u003e\u003e\u003d4),e\u003e\u003d2\u0026\u0026(r+\u003d2,e\u003e\u003e\u003e\u003d2),r+e},a.prototype._zeroBits\u003dfunction(t){if(0\u003d\u003d\u003dt)return 26;var e\u003dt,r\u003d0;return 0\u003d\u003d(8191\u0026e)\u0026\u0026(r+\u003d13,e\u003e\u003e\u003e\u003d13),0\u003d\u003d(127\u0026e)\u0026\u0026(r+\u003d7,e\u003e\u003e\u003e\u003d7),0\u003d\u003d(15\u0026e)\u0026\u0026(r+\u003d4,e\u003e\u003e\u003e\u003d4),0\u003d\u003d(3\u0026e)\u0026\u0026(r+\u003d2,e\u003e\u003e\u003e\u003d2),0\u003d\u003d(1\u0026e)\u0026\u0026r++,r},a.prototype.bitLength\u003dfunction(){var t\u003dthis.words[this.length-1],e\u003dthis._countBits(t);return 26*(this.length-1)+e},a.prototype.zeroBits\u003dfunction(){if(this.isZero())return 0;for(var t\u003d0,e\u003d0;e\u003cthis.length;e++){var r\u003dthis._zeroBits(this.words[e]);if(t+\u003dr,26!\u003d\u003dr)break}return t},a.prototype.byteLength\u003dfunction(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos\u003dfunction(t){return 0!\u003d\u003dthis.negative?this.abs().inotn(t).iaddn(1):this.clone()},a.prototype.fromTwos\u003dfunction(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},a.prototype.isNeg\u003dfunction(){return 0!\u003d\u003dthis.negative},a.prototype.neg\u003dfunction(){return this.clone().ineg()},a.prototype.ineg\u003dfunction(){return this.isZero()||(this.negative^\u003d1),this},a.prototype.iuor\u003dfunction(t){for(;this.length\u003ct.length;)this.words[this.length++]\u003d0;for(var e\u003d0;e\u003ct.length;e++)this.words[e]\u003dthis.words[e]|t.words[e];return this.strip()},a.prototype.ior\u003dfunction(t){return n(0\u003d\u003d(this.negative|t.negative)),this.iuor(t)},a.prototype.or\u003dfunction(t){return this.length\u003et.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor\u003dfunction(t){return this.length\u003et.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand\u003dfunction(t){var e;e\u003dthis.length\u003et.length?t:this;for(var r\u003d0;r\u003ce.length;r++)this.words[r]\u003dthis.words[r]\u0026t.words[r];return this.length\u003de.length,this.strip()},a.prototype.iand\u003dfunction(t){return n(0\u003d\u003d(this.negative|t.negative)),this.iuand(t)},a.prototype.and\u003dfunction(t){return this.length\u003et.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand\u003dfunction(t){return this.length\u003et.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor\u003dfunction(t){var e,r;this.length\u003et.length?(e\u003dthis,r\u003dt):(e\u003dt,r\u003dthis);for(var n\u003d0;n\u003cr.length;n++)this.words[n]\u003de.words[n]^r.words[n];if(this!\u003d\u003de)for(;n\u003ce.length;n++)this.words[n]\u003de.words[n];return this.length\u003de.length,this.strip()},a.prototype.ixor\u003dfunction(t){return n(0\u003d\u003d(this.negative|t.negative)),this.iuxor(t)},a.prototype.xor\u003dfunction(t){return this.length\u003et.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor\u003dfunction(t){return this.length\u003et.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn\u003dfunction(t){n(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d0);var e\u003d0|Math.ceil(t/26),r\u003dt%26;this._expand(e),r\u003e0\u0026\u0026e--;for(var i\u003d0;i\u003ce;i++)this.words[i]\u003d67108863\u0026~this.words[i];return r\u003e0\u0026\u0026(this.words[i]\u003d~this.words[i]\u002667108863\u003e\u003e26-r),this.strip()},a.prototype.notn\u003dfunction(t){return this.clone().inotn(t)},a.prototype.setn\u003dfunction(t,e){n(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d0);var r\u003dt/26|0,i\u003dt%26;return this._expand(r+1),this.words[r]\u003de?this.words[r]|1\u003c\u003ci:this.words[r]\u0026~(1\u003c\u003ci),this.strip()},a.prototype.iadd\u003dfunction(t){var e,r,n;if(0!\u003d\u003dthis.negative\u0026\u00260\u003d\u003d\u003dt.negative)return this.negative\u003d0,e\u003dthis.isub(t),this.negative^\u003d1,this._normSign();if(0\u003d\u003d\u003dthis.negative\u0026\u00260!\u003d\u003dt.negative)return t.negative\u003d0,e\u003dthis.isub(t),t.negative\u003d1,e._normSign();this.length\u003et.length?(r\u003dthis,n\u003dt):(r\u003dt,n\u003dthis);for(var i\u003d0,a\u003d0;a\u003cn.length;a++)e\u003d(0|r.words[a])+(0|n.words[a])+i,this.words[a]\u003d67108863\u0026e,i\u003de\u003e\u003e\u003e26;for(;0!\u003d\u003di\u0026\u0026a\u003cr.length;a++)e\u003d(0|r.words[a])+i,this.words[a]\u003d67108863\u0026e,i\u003de\u003e\u003e\u003e26;if(this.length\u003dr.length,0!\u003d\u003di)this.words[this.length]\u003di,this.length++;else if(r!\u003d\u003dthis)for(;a\u003cr.length;a++)this.words[a]\u003dr.words[a];return this},a.prototype.add\u003dfunction(t){var e;return 0!\u003d\u003dt.negative\u0026\u00260\u003d\u003d\u003dthis.negative?(t.negative\u003d0,e\u003dthis.sub(t),t.negative^\u003d1,e):0\u003d\u003d\u003dt.negative\u0026\u00260!\u003d\u003dthis.negative?(this.negative\u003d0,e\u003dt.sub(this),this.negative\u003d1,e):this.length\u003et.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub\u003dfunction(t){if(0!\u003d\u003dt.negative){t.negative\u003d0;var e\u003dthis.iadd(t);return t.negative\u003d1,e._normSign()}if(0!\u003d\u003dthis.negative)return this.negative\u003d0,this.iadd(t),this.negative\u003d1,this._normSign();var r,n,i\u003dthis.cmp(t);if(0\u003d\u003d\u003di)return this.negative\u003d0,this.length\u003d1,this.words[0]\u003d0,this;i\u003e0?(r\u003dthis,n\u003dt):(r\u003dt,n\u003dthis);for(var a\u003d0,o\u003d0;o\u003cn.length;o++)a\u003d(e\u003d(0|r.words[o])-(0|n.words[o])+a)\u003e\u003e26,this.words[o]\u003d67108863\u0026e;for(;0!\u003d\u003da\u0026\u0026o\u003cr.length;o++)a\u003d(e\u003d(0|r.words[o])+a)\u003e\u003e26,this.words[o]\u003d67108863\u0026e;if(0\u003d\u003d\u003da\u0026\u0026o\u003cr.length\u0026\u0026r!\u003d\u003dthis)for(;o\u003cr.length;o++)this.words[o]\u003dr.words[o];return this.length\u003dMath.max(this.length,o),r!\u003d\u003dthis\u0026\u0026(this.negative\u003d1),this.strip()},a.prototype.sub\u003dfunction(t){return this.clone().isub(t)};var p\u003dfunction(t,e,r){var n,i,a,o\u003dt.words,s\u003de.words,l\u003dr.words,c\u003d0,u\u003d0|o[0],f\u003d8191\u0026u,h\u003du\u003e\u003e\u003e13,p\u003d0|o[1],d\u003d8191\u0026p,m\u003dp\u003e\u003e\u003e13,g\u003d0|o[2],v\u003d8191\u0026g,y\u003dg\u003e\u003e\u003e13,x\u003d0|o[3],b\u003d8191\u0026x,_\u003dx\u003e\u003e\u003e13,w\u003d0|o[4],T\u003d8191\u0026w,k\u003dw\u003e\u003e\u003e13,M\u003d0|o[5],A\u003d8191\u0026M,S\u003dM\u003e\u003e\u003e13,E\u003d0|o[6],L\u003d8191\u0026E,C\u003dE\u003e\u003e\u003e13,P\u003d0|o[7],I\u003d8191\u0026P,O\u003dP\u003e\u003e\u003e13,z\u003d0|o[8],D\u003d8191\u0026z,R\u003dz\u003e\u003e\u003e13,F\u003d0|o[9],B\u003d8191\u0026F,N\u003dF\u003e\u003e\u003e13,j\u003d0|s[0],U\u003d8191\u0026j,V\u003dj\u003e\u003e\u003e13,q\u003d0|s[1],H\u003d8191\u0026q,G\u003dq\u003e\u003e\u003e13,Y\u003d0|s[2],W\u003d8191\u0026Y,X\u003dY\u003e\u003e\u003e13,Z\u003d0|s[3],J\u003d8191\u0026Z,K\u003dZ\u003e\u003e\u003e13,Q\u003d0|s[4],$\u003d8191\u0026Q,tt\u003dQ\u003e\u003e\u003e13,et\u003d0|s[5],rt\u003d8191\u0026et,nt\u003det\u003e\u003e\u003e13,it\u003d0|s[6],at\u003d8191\u0026it,ot\u003dit\u003e\u003e\u003e13,st\u003d0|s[7],lt\u003d8191\u0026st,ct\u003dst\u003e\u003e\u003e13,ut\u003d0|s[8],ft\u003d8191\u0026ut,ht\u003dut\u003e\u003e\u003e13,pt\u003d0|s[9],dt\u003d8191\u0026pt,mt\u003dpt\u003e\u003e\u003e13;r.negative\u003dt.negative^e.negative,r.length\u003d19;var gt\u003d(c+(n\u003dMath.imul(f,U))|0)+((8191\u0026(i\u003d(i\u003dMath.imul(f,V))+Math.imul(h,U)|0))\u003c\u003c13)|0;c\u003d((a\u003dMath.imul(h,V))+(i\u003e\u003e\u003e13)|0)+(gt\u003e\u003e\u003e26)|0,gt\u0026\u003d67108863,n\u003dMath.imul(d,U),i\u003d(i\u003dMath.imul(d,V))+Math.imul(m,U)|0,a\u003dMath.imul(m,V);var vt\u003d(c+(n\u003dn+Math.imul(f,H)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,G)|0)+Math.imul(h,H)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,G)|0)+(i\u003e\u003e\u003e13)|0)+(vt\u003e\u003e\u003e26)|0,vt\u0026\u003d67108863,n\u003dMath.imul(v,U),i\u003d(i\u003dMath.imul(v,V))+Math.imul(y,U)|0,a\u003dMath.imul(y,V),n\u003dn+Math.imul(d,H)|0,i\u003d(i\u003di+Math.imul(d,G)|0)+Math.imul(m,H)|0,a\u003da+Math.imul(m,G)|0;var yt\u003d(c+(n\u003dn+Math.imul(f,W)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,X)|0)+Math.imul(h,W)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,X)|0)+(i\u003e\u003e\u003e13)|0)+(yt\u003e\u003e\u003e26)|0,yt\u0026\u003d67108863,n\u003dMath.imul(b,U),i\u003d(i\u003dMath.imul(b,V))+Math.imul(_,U)|0,a\u003dMath.imul(_,V),n\u003dn+Math.imul(v,H)|0,i\u003d(i\u003di+Math.imul(v,G)|0)+Math.imul(y,H)|0,a\u003da+Math.imul(y,G)|0,n\u003dn+Math.imul(d,W)|0,i\u003d(i\u003di+Math.imul(d,X)|0)+Math.imul(m,W)|0,a\u003da+Math.imul(m,X)|0;var xt\u003d(c+(n\u003dn+Math.imul(f,J)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,K)|0)+Math.imul(h,J)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,K)|0)+(i\u003e\u003e\u003e13)|0)+(xt\u003e\u003e\u003e26)|0,xt\u0026\u003d67108863,n\u003dMath.imul(T,U),i\u003d(i\u003dMath.imul(T,V))+Math.imul(k,U)|0,a\u003dMath.imul(k,V),n\u003dn+Math.imul(b,H)|0,i\u003d(i\u003di+Math.imul(b,G)|0)+Math.imul(_,H)|0,a\u003da+Math.imul(_,G)|0,n\u003dn+Math.imul(v,W)|0,i\u003d(i\u003di+Math.imul(v,X)|0)+Math.imul(y,W)|0,a\u003da+Math.imul(y,X)|0,n\u003dn+Math.imul(d,J)|0,i\u003d(i\u003di+Math.imul(d,K)|0)+Math.imul(m,J)|0,a\u003da+Math.imul(m,K)|0;var bt\u003d(c+(n\u003dn+Math.imul(f,$)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,tt)|0)+Math.imul(h,$)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,tt)|0)+(i\u003e\u003e\u003e13)|0)+(bt\u003e\u003e\u003e26)|0,bt\u0026\u003d67108863,n\u003dMath.imul(A,U),i\u003d(i\u003dMath.imul(A,V))+Math.imul(S,U)|0,a\u003dMath.imul(S,V),n\u003dn+Math.imul(T,H)|0,i\u003d(i\u003di+Math.imul(T,G)|0)+Math.imul(k,H)|0,a\u003da+Math.imul(k,G)|0,n\u003dn+Math.imul(b,W)|0,i\u003d(i\u003di+Math.imul(b,X)|0)+Math.imul(_,W)|0,a\u003da+Math.imul(_,X)|0,n\u003dn+Math.imul(v,J)|0,i\u003d(i\u003di+Math.imul(v,K)|0)+Math.imul(y,J)|0,a\u003da+Math.imul(y,K)|0,n\u003dn+Math.imul(d,$)|0,i\u003d(i\u003di+Math.imul(d,tt)|0)+Math.imul(m,$)|0,a\u003da+Math.imul(m,tt)|0;var _t\u003d(c+(n\u003dn+Math.imul(f,rt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,nt)|0)+Math.imul(h,rt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,nt)|0)+(i\u003e\u003e\u003e13)|0)+(_t\u003e\u003e\u003e26)|0,_t\u0026\u003d67108863,n\u003dMath.imul(L,U),i\u003d(i\u003dMath.imul(L,V))+Math.imul(C,U)|0,a\u003dMath.imul(C,V),n\u003dn+Math.imul(A,H)|0,i\u003d(i\u003di+Math.imul(A,G)|0)+Math.imul(S,H)|0,a\u003da+Math.imul(S,G)|0,n\u003dn+Math.imul(T,W)|0,i\u003d(i\u003di+Math.imul(T,X)|0)+Math.imul(k,W)|0,a\u003da+Math.imul(k,X)|0,n\u003dn+Math.imul(b,J)|0,i\u003d(i\u003di+Math.imul(b,K)|0)+Math.imul(_,J)|0,a\u003da+Math.imul(_,K)|0,n\u003dn+Math.imul(v,$)|0,i\u003d(i\u003di+Math.imul(v,tt)|0)+Math.imul(y,$)|0,a\u003da+Math.imul(y,tt)|0,n\u003dn+Math.imul(d,rt)|0,i\u003d(i\u003di+Math.imul(d,nt)|0)+Math.imul(m,rt)|0,a\u003da+Math.imul(m,nt)|0;var wt\u003d(c+(n\u003dn+Math.imul(f,at)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,ot)|0)+Math.imul(h,at)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,ot)|0)+(i\u003e\u003e\u003e13)|0)+(wt\u003e\u003e\u003e26)|0,wt\u0026\u003d67108863,n\u003dMath.imul(I,U),i\u003d(i\u003dMath.imul(I,V))+Math.imul(O,U)|0,a\u003dMath.imul(O,V),n\u003dn+Math.imul(L,H)|0,i\u003d(i\u003di+Math.imul(L,G)|0)+Math.imul(C,H)|0,a\u003da+Math.imul(C,G)|0,n\u003dn+Math.imul(A,W)|0,i\u003d(i\u003di+Math.imul(A,X)|0)+Math.imul(S,W)|0,a\u003da+Math.imul(S,X)|0,n\u003dn+Math.imul(T,J)|0,i\u003d(i\u003di+Math.imul(T,K)|0)+Math.imul(k,J)|0,a\u003da+Math.imul(k,K)|0,n\u003dn+Math.imul(b,$)|0,i\u003d(i\u003di+Math.imul(b,tt)|0)+Math.imul(_,$)|0,a\u003da+Math.imul(_,tt)|0,n\u003dn+Math.imul(v,rt)|0,i\u003d(i\u003di+Math.imul(v,nt)|0)+Math.imul(y,rt)|0,a\u003da+Math.imul(y,nt)|0,n\u003dn+Math.imul(d,at)|0,i\u003d(i\u003di+Math.imul(d,ot)|0)+Math.imul(m,at)|0,a\u003da+Math.imul(m,ot)|0;var Tt\u003d(c+(n\u003dn+Math.imul(f,lt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,ct)|0)+Math.imul(h,lt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,ct)|0)+(i\u003e\u003e\u003e13)|0)+(Tt\u003e\u003e\u003e26)|0,Tt\u0026\u003d67108863,n\u003dMath.imul(D,U),i\u003d(i\u003dMath.imul(D,V))+Math.imul(R,U)|0,a\u003dMath.imul(R,V),n\u003dn+Math.imul(I,H)|0,i\u003d(i\u003di+Math.imul(I,G)|0)+Math.imul(O,H)|0,a\u003da+Math.imul(O,G)|0,n\u003dn+Math.imul(L,W)|0,i\u003d(i\u003di+Math.imul(L,X)|0)+Math.imul(C,W)|0,a\u003da+Math.imul(C,X)|0,n\u003dn+Math.imul(A,J)|0,i\u003d(i\u003di+Math.imul(A,K)|0)+Math.imul(S,J)|0,a\u003da+Math.imul(S,K)|0,n\u003dn+Math.imul(T,$)|0,i\u003d(i\u003di+Math.imul(T,tt)|0)+Math.imul(k,$)|0,a\u003da+Math.imul(k,tt)|0,n\u003dn+Math.imul(b,rt)|0,i\u003d(i\u003di+Math.imul(b,nt)|0)+Math.imul(_,rt)|0,a\u003da+Math.imul(_,nt)|0,n\u003dn+Math.imul(v,at)|0,i\u003d(i\u003di+Math.imul(v,ot)|0)+Math.imul(y,at)|0,a\u003da+Math.imul(y,ot)|0,n\u003dn+Math.imul(d,lt)|0,i\u003d(i\u003di+Math.imul(d,ct)|0)+Math.imul(m,lt)|0,a\u003da+Math.imul(m,ct)|0;var kt\u003d(c+(n\u003dn+Math.imul(f,ft)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,ht)|0)+Math.imul(h,ft)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,ht)|0)+(i\u003e\u003e\u003e13)|0)+(kt\u003e\u003e\u003e26)|0,kt\u0026\u003d67108863,n\u003dMath.imul(B,U),i\u003d(i\u003dMath.imul(B,V))+Math.imul(N,U)|0,a\u003dMath.imul(N,V),n\u003dn+Math.imul(D,H)|0,i\u003d(i\u003di+Math.imul(D,G)|0)+Math.imul(R,H)|0,a\u003da+Math.imul(R,G)|0,n\u003dn+Math.imul(I,W)|0,i\u003d(i\u003di+Math.imul(I,X)|0)+Math.imul(O,W)|0,a\u003da+Math.imul(O,X)|0,n\u003dn+Math.imul(L,J)|0,i\u003d(i\u003di+Math.imul(L,K)|0)+Math.imul(C,J)|0,a\u003da+Math.imul(C,K)|0,n\u003dn+Math.imul(A,$)|0,i\u003d(i\u003di+Math.imul(A,tt)|0)+Math.imul(S,$)|0,a\u003da+Math.imul(S,tt)|0,n\u003dn+Math.imul(T,rt)|0,i\u003d(i\u003di+Math.imul(T,nt)|0)+Math.imul(k,rt)|0,a\u003da+Math.imul(k,nt)|0,n\u003dn+Math.imul(b,at)|0,i\u003d(i\u003di+Math.imul(b,ot)|0)+Math.imul(_,at)|0,a\u003da+Math.imul(_,ot)|0,n\u003dn+Math.imul(v,lt)|0,i\u003d(i\u003di+Math.imul(v,ct)|0)+Math.imul(y,lt)|0,a\u003da+Math.imul(y,ct)|0,n\u003dn+Math.imul(d,ft)|0,i\u003d(i\u003di+Math.imul(d,ht)|0)+Math.imul(m,ft)|0,a\u003da+Math.imul(m,ht)|0;var Mt\u003d(c+(n\u003dn+Math.imul(f,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(f,mt)|0)+Math.imul(h,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(h,mt)|0)+(i\u003e\u003e\u003e13)|0)+(Mt\u003e\u003e\u003e26)|0,Mt\u0026\u003d67108863,n\u003dMath.imul(B,H),i\u003d(i\u003dMath.imul(B,G))+Math.imul(N,H)|0,a\u003dMath.imul(N,G),n\u003dn+Math.imul(D,W)|0,i\u003d(i\u003di+Math.imul(D,X)|0)+Math.imul(R,W)|0,a\u003da+Math.imul(R,X)|0,n\u003dn+Math.imul(I,J)|0,i\u003d(i\u003di+Math.imul(I,K)|0)+Math.imul(O,J)|0,a\u003da+Math.imul(O,K)|0,n\u003dn+Math.imul(L,$)|0,i\u003d(i\u003di+Math.imul(L,tt)|0)+Math.imul(C,$)|0,a\u003da+Math.imul(C,tt)|0,n\u003dn+Math.imul(A,rt)|0,i\u003d(i\u003di+Math.imul(A,nt)|0)+Math.imul(S,rt)|0,a\u003da+Math.imul(S,nt)|0,n\u003dn+Math.imul(T,at)|0,i\u003d(i\u003di+Math.imul(T,ot)|0)+Math.imul(k,at)|0,a\u003da+Math.imul(k,ot)|0,n\u003dn+Math.imul(b,lt)|0,i\u003d(i\u003di+Math.imul(b,ct)|0)+Math.imul(_,lt)|0,a\u003da+Math.imul(_,ct)|0,n\u003dn+Math.imul(v,ft)|0,i\u003d(i\u003di+Math.imul(v,ht)|0)+Math.imul(y,ft)|0,a\u003da+Math.imul(y,ht)|0;var At\u003d(c+(n\u003dn+Math.imul(d,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(d,mt)|0)+Math.imul(m,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(m,mt)|0)+(i\u003e\u003e\u003e13)|0)+(At\u003e\u003e\u003e26)|0,At\u0026\u003d67108863,n\u003dMath.imul(B,W),i\u003d(i\u003dMath.imul(B,X))+Math.imul(N,W)|0,a\u003dMath.imul(N,X),n\u003dn+Math.imul(D,J)|0,i\u003d(i\u003di+Math.imul(D,K)|0)+Math.imul(R,J)|0,a\u003da+Math.imul(R,K)|0,n\u003dn+Math.imul(I,$)|0,i\u003d(i\u003di+Math.imul(I,tt)|0)+Math.imul(O,$)|0,a\u003da+Math.imul(O,tt)|0,n\u003dn+Math.imul(L,rt)|0,i\u003d(i\u003di+Math.imul(L,nt)|0)+Math.imul(C,rt)|0,a\u003da+Math.imul(C,nt)|0,n\u003dn+Math.imul(A,at)|0,i\u003d(i\u003di+Math.imul(A,ot)|0)+Math.imul(S,at)|0,a\u003da+Math.imul(S,ot)|0,n\u003dn+Math.imul(T,lt)|0,i\u003d(i\u003di+Math.imul(T,ct)|0)+Math.imul(k,lt)|0,a\u003da+Math.imul(k,ct)|0,n\u003dn+Math.imul(b,ft)|0,i\u003d(i\u003di+Math.imul(b,ht)|0)+Math.imul(_,ft)|0,a\u003da+Math.imul(_,ht)|0;var St\u003d(c+(n\u003dn+Math.imul(v,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(v,mt)|0)+Math.imul(y,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(y,mt)|0)+(i\u003e\u003e\u003e13)|0)+(St\u003e\u003e\u003e26)|0,St\u0026\u003d67108863,n\u003dMath.imul(B,J),i\u003d(i\u003dMath.imul(B,K))+Math.imul(N,J)|0,a\u003dMath.imul(N,K),n\u003dn+Math.imul(D,$)|0,i\u003d(i\u003di+Math.imul(D,tt)|0)+Math.imul(R,$)|0,a\u003da+Math.imul(R,tt)|0,n\u003dn+Math.imul(I,rt)|0,i\u003d(i\u003di+Math.imul(I,nt)|0)+Math.imul(O,rt)|0,a\u003da+Math.imul(O,nt)|0,n\u003dn+Math.imul(L,at)|0,i\u003d(i\u003di+Math.imul(L,ot)|0)+Math.imul(C,at)|0,a\u003da+Math.imul(C,ot)|0,n\u003dn+Math.imul(A,lt)|0,i\u003d(i\u003di+Math.imul(A,ct)|0)+Math.imul(S,lt)|0,a\u003da+Math.imul(S,ct)|0,n\u003dn+Math.imul(T,ft)|0,i\u003d(i\u003di+Math.imul(T,ht)|0)+Math.imul(k,ft)|0,a\u003da+Math.imul(k,ht)|0;var Et\u003d(c+(n\u003dn+Math.imul(b,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(b,mt)|0)+Math.imul(_,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(_,mt)|0)+(i\u003e\u003e\u003e13)|0)+(Et\u003e\u003e\u003e26)|0,Et\u0026\u003d67108863,n\u003dMath.imul(B,$),i\u003d(i\u003dMath.imul(B,tt))+Math.imul(N,$)|0,a\u003dMath.imul(N,tt),n\u003dn+Math.imul(D,rt)|0,i\u003d(i\u003di+Math.imul(D,nt)|0)+Math.imul(R,rt)|0,a\u003da+Math.imul(R,nt)|0,n\u003dn+Math.imul(I,at)|0,i\u003d(i\u003di+Math.imul(I,ot)|0)+Math.imul(O,at)|0,a\u003da+Math.imul(O,ot)|0,n\u003dn+Math.imul(L,lt)|0,i\u003d(i\u003di+Math.imul(L,ct)|0)+Math.imul(C,lt)|0,a\u003da+Math.imul(C,ct)|0,n\u003dn+Math.imul(A,ft)|0,i\u003d(i\u003di+Math.imul(A,ht)|0)+Math.imul(S,ft)|0,a\u003da+Math.imul(S,ht)|0;var Lt\u003d(c+(n\u003dn+Math.imul(T,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(T,mt)|0)+Math.imul(k,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(k,mt)|0)+(i\u003e\u003e\u003e13)|0)+(Lt\u003e\u003e\u003e26)|0,Lt\u0026\u003d67108863,n\u003dMath.imul(B,rt),i\u003d(i\u003dMath.imul(B,nt))+Math.imul(N,rt)|0,a\u003dMath.imul(N,nt),n\u003dn+Math.imul(D,at)|0,i\u003d(i\u003di+Math.imul(D,ot)|0)+Math.imul(R,at)|0,a\u003da+Math.imul(R,ot)|0,n\u003dn+Math.imul(I,lt)|0,i\u003d(i\u003di+Math.imul(I,ct)|0)+Math.imul(O,lt)|0,a\u003da+Math.imul(O,ct)|0,n\u003dn+Math.imul(L,ft)|0,i\u003d(i\u003di+Math.imul(L,ht)|0)+Math.imul(C,ft)|0,a\u003da+Math.imul(C,ht)|0;var Ct\u003d(c+(n\u003dn+Math.imul(A,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(A,mt)|0)+Math.imul(S,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(S,mt)|0)+(i\u003e\u003e\u003e13)|0)+(Ct\u003e\u003e\u003e26)|0,Ct\u0026\u003d67108863,n\u003dMath.imul(B,at),i\u003d(i\u003dMath.imul(B,ot))+Math.imul(N,at)|0,a\u003dMath.imul(N,ot),n\u003dn+Math.imul(D,lt)|0,i\u003d(i\u003di+Math.imul(D,ct)|0)+Math.imul(R,lt)|0,a\u003da+Math.imul(R,ct)|0,n\u003dn+Math.imul(I,ft)|0,i\u003d(i\u003di+Math.imul(I,ht)|0)+Math.imul(O,ft)|0,a\u003da+Math.imul(O,ht)|0;var Pt\u003d(c+(n\u003dn+Math.imul(L,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(L,mt)|0)+Math.imul(C,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(C,mt)|0)+(i\u003e\u003e\u003e13)|0)+(Pt\u003e\u003e\u003e26)|0,Pt\u0026\u003d67108863,n\u003dMath.imul(B,lt),i\u003d(i\u003dMath.imul(B,ct))+Math.imul(N,lt)|0,a\u003dMath.imul(N,ct),n\u003dn+Math.imul(D,ft)|0,i\u003d(i\u003di+Math.imul(D,ht)|0)+Math.imul(R,ft)|0,a\u003da+Math.imul(R,ht)|0;var It\u003d(c+(n\u003dn+Math.imul(I,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(I,mt)|0)+Math.imul(O,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(O,mt)|0)+(i\u003e\u003e\u003e13)|0)+(It\u003e\u003e\u003e26)|0,It\u0026\u003d67108863,n\u003dMath.imul(B,ft),i\u003d(i\u003dMath.imul(B,ht))+Math.imul(N,ft)|0,a\u003dMath.imul(N,ht);var Ot\u003d(c+(n\u003dn+Math.imul(D,dt)|0)|0)+((8191\u0026(i\u003d(i\u003di+Math.imul(D,mt)|0)+Math.imul(R,dt)|0))\u003c\u003c13)|0;c\u003d((a\u003da+Math.imul(R,mt)|0)+(i\u003e\u003e\u003e13)|0)+(Ot\u003e\u003e\u003e26)|0,Ot\u0026\u003d67108863;var zt\u003d(c+(n\u003dMath.imul(B,dt))|0)+((8191\u0026(i\u003d(i\u003dMath.imul(B,mt))+Math.imul(N,dt)|0))\u003c\u003c13)|0;return c\u003d((a\u003dMath.imul(N,mt))+(i\u003e\u003e\u003e13)|0)+(zt\u003e\u003e\u003e26)|0,zt\u0026\u003d67108863,l[0]\u003dgt,l[1]\u003dvt,l[2]\u003dyt,l[3]\u003dxt,l[4]\u003dbt,l[5]\u003d_t,l[6]\u003dwt,l[7]\u003dTt,l[8]\u003dkt,l[9]\u003dMt,l[10]\u003dAt,l[11]\u003dSt,l[12]\u003dEt,l[13]\u003dLt,l[14]\u003dCt,l[15]\u003dPt,l[16]\u003dIt,l[17]\u003dOt,l[18]\u003dzt,0!\u003d\u003dc\u0026\u0026(l[19]\u003dc,r.length++),r};function d(t,e,r){return(new m).mulp(t,e,r)}function m(t,e){this.x\u003dt,this.y\u003de}Math.imul||(p\u003dh),a.prototype.mulTo\u003dfunction(t,e){var r\u003dthis.length+t.length;return 10\u003d\u003d\u003dthis.length\u0026\u002610\u003d\u003d\u003dt.length?p(this,t,e):r\u003c63?h(this,t,e):r\u003c1024?function(t,e,r){r.negative\u003de.negative^t.negative,r.length\u003dt.length+e.length;for(var n\u003d0,i\u003d0,a\u003d0;a\u003cr.length-1;a++){var o\u003di;i\u003d0;for(var s\u003d67108863\u0026n,l\u003dMath.min(a,e.length-1),c\u003dMath.max(0,a-t.length+1);c\u003c\u003dl;c++){var u\u003da-c,f\u003d(0|t.words[u])*(0|e.words[c]),h\u003d67108863\u0026f;s\u003d67108863\u0026(h\u003dh+s|0),i+\u003d(o\u003d(o\u003do+(f/67108864|0)|0)+(h\u003e\u003e\u003e26)|0)\u003e\u003e\u003e26,o\u0026\u003d67108863}r.words[a]\u003ds,n\u003do,o\u003di}return 0!\u003d\u003dn?r.words[a]\u003dn:r.length--,r.strip()}(this,t,e):d(this,t,e)},m.prototype.makeRBT\u003dfunction(t){for(var e\u003dnew Array(t),r\u003da.prototype._countBits(t)-1,n\u003d0;n\u003ct;n++)e[n]\u003dthis.revBin(n,r,t);return e},m.prototype.revBin\u003dfunction(t,e,r){if(0\u003d\u003d\u003dt||t\u003d\u003d\u003dr-1)return t;for(var n\u003d0,i\u003d0;i\u003ce;i++)n|\u003d(1\u0026t)\u003c\u003ce-i-1,t\u003e\u003e\u003d1;return n},m.prototype.permute\u003dfunction(t,e,r,n,i,a){for(var o\u003d0;o\u003ca;o++)n[o]\u003de[t[o]],i[o]\u003dr[t[o]]},m.prototype.transform\u003dfunction(t,e,r,n,i,a){this.permute(a,t,e,r,n,i);for(var o\u003d1;o\u003ci;o\u003c\u003c\u003d1)for(var s\u003do\u003c\u003c1,l\u003dMath.cos(2*Math.PI/s),c\u003dMath.sin(2*Math.PI/s),u\u003d0;u\u003ci;u+\u003ds)for(var f\u003dl,h\u003dc,p\u003d0;p\u003co;p++){var d\u003dr[u+p],m\u003dn[u+p],g\u003dr[u+p+o],v\u003dn[u+p+o],y\u003df*g-h*v;v\u003df*v+h*g,g\u003dy,r[u+p]\u003dd+g,n[u+p]\u003dm+v,r[u+p+o]\u003dd-g,n[u+p+o]\u003dm-v,p!\u003d\u003ds\u0026\u0026(y\u003dl*f-c*h,h\u003dl*h+c*f,f\u003dy)}},m.prototype.guessLen13b\u003dfunction(t,e){var r\u003d1|Math.max(e,t),n\u003d1\u0026r,i\u003d0;for(r\u003dr/2|0;r;r\u003e\u003e\u003e\u003d1)i++;return 1\u003c\u003ci+1+n},m.prototype.conjugate\u003dfunction(t,e,r){if(!(r\u003c\u003d1))for(var n\u003d0;n\u003cr/2;n++){var i\u003dt[n];t[n]\u003dt[r-n-1],t[r-n-1]\u003di,i\u003de[n],e[n]\u003d-e[r-n-1],e[r-n-1]\u003d-i}},m.prototype.normalize13b\u003dfunction(t,e){for(var r\u003d0,n\u003d0;n\u003ce/2;n++){var i\u003d8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]\u003d67108863\u0026i,r\u003di\u003c67108864?0:i/67108864|0}return t},m.prototype.convert13b\u003dfunction(t,e,r,i){for(var a\u003d0,o\u003d0;o\u003ce;o++)a+\u003d0|t[o],r[2*o]\u003d8191\u0026a,a\u003e\u003e\u003e\u003d13,r[2*o+1]\u003d8191\u0026a,a\u003e\u003e\u003e\u003d13;for(o\u003d2*e;o\u003ci;++o)r[o]\u003d0;n(0\u003d\u003d\u003da),n(0\u003d\u003d(-8192\u0026a))},m.prototype.stub\u003dfunction(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;r++)e[r]\u003d0;return e},m.prototype.mulp\u003dfunction(t,e,r){var n\u003d2*this.guessLen13b(t.length,e.length),i\u003dthis.makeRBT(n),a\u003dthis.stub(n),o\u003dnew Array(n),s\u003dnew Array(n),l\u003dnew Array(n),c\u003dnew Array(n),u\u003dnew Array(n),f\u003dnew Array(n),h\u003dr.words;h.length\u003dn,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,c,n),this.transform(o,a,s,l,n,i),this.transform(c,a,u,f,n,i);for(var p\u003d0;p\u003cn;p++){var d\u003ds[p]*u[p]-l[p]*f[p];l[p]\u003ds[p]*f[p]+l[p]*u[p],s[p]\u003dd}return this.conjugate(s,l,n),this.transform(s,l,h,a,n,i),this.conjugate(h,a,n),this.normalize13b(h,n),r.negative\u003dt.negative^e.negative,r.length\u003dt.length+e.length,r.strip()},a.prototype.mul\u003dfunction(t){var e\u003dnew a(null);return e.words\u003dnew Array(this.length+t.length),this.mulTo(t,e)},a.prototype.mulf\u003dfunction(t){var e\u003dnew a(null);return e.words\u003dnew Array(this.length+t.length),d(this,t,e)},a.prototype.imul\u003dfunction(t){return this.clone().mulTo(t,this)},a.prototype.imuln\u003dfunction(t){n(\"number\"\u003d\u003dtypeof t),n(t\u003c67108864);for(var e\u003d0,r\u003d0;r\u003cthis.length;r++){var i\u003d(0|this.words[r])*t,a\u003d(67108863\u0026i)+(67108863\u0026e);e\u003e\u003e\u003d26,e+\u003di/67108864|0,e+\u003da\u003e\u003e\u003e26,this.words[r]\u003d67108863\u0026a}return 0!\u003d\u003de\u0026\u0026(this.words[r]\u003de,this.length++),this},a.prototype.muln\u003dfunction(t){return this.clone().imuln(t)},a.prototype.sqr\u003dfunction(){return this.mul(this)},a.prototype.isqr\u003dfunction(){return this.imul(this.clone())},a.prototype.pow\u003dfunction(t){var e\u003dfunction(t){for(var e\u003dnew Array(t.bitLength()),r\u003d0;r\u003ce.length;r++){var n\u003dr/26|0,i\u003dr%26;e[r]\u003d(t.words[n]\u00261\u003c\u003ci)\u003e\u003e\u003ei}return e}(t);if(0\u003d\u003d\u003de.length)return new a(1);for(var r\u003dthis,n\u003d0;n\u003ce.length\u0026\u00260\u003d\u003d\u003de[n];n++,r\u003dr.sqr());if(++n\u003ce.length)for(var i\u003dr.sqr();n\u003ce.length;n++,i\u003di.sqr())0!\u003d\u003de[n]\u0026\u0026(r\u003dr.mul(i));return r},a.prototype.iushln\u003dfunction(t){n(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d0);var e,r\u003dt%26,i\u003d(t-r)/26,a\u003d67108863\u003e\u003e\u003e26-r\u003c\u003c26-r;if(0!\u003d\u003dr){var o\u003d0;for(e\u003d0;e\u003cthis.length;e++){var s\u003dthis.words[e]\u0026a,l\u003d(0|this.words[e])-s\u003c\u003cr;this.words[e]\u003dl|o,o\u003ds\u003e\u003e\u003e26-r}o\u0026\u0026(this.words[e]\u003do,this.length++)}if(0!\u003d\u003di){for(e\u003dthis.length-1;e\u003e\u003d0;e--)this.words[e+i]\u003dthis.words[e];for(e\u003d0;e\u003ci;e++)this.words[e]\u003d0;this.length+\u003di}return this.strip()},a.prototype.ishln\u003dfunction(t){return n(0\u003d\u003d\u003dthis.negative),this.iushln(t)},a.prototype.iushrn\u003dfunction(t,e,r){var i;n(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d0),i\u003de?(e-e%26)/26:0;var a\u003dt%26,o\u003dMath.min((t-a)/26,this.length),s\u003d67108863^67108863\u003e\u003e\u003ea\u003c\u003ca,l\u003dr;if(i-\u003do,i\u003dMath.max(0,i),l){for(var c\u003d0;c\u003co;c++)l.words[c]\u003dthis.words[c];l.length\u003do}if(0\u003d\u003d\u003do);else if(this.length\u003eo)for(this.length-\u003do,c\u003d0;c\u003cthis.length;c++)this.words[c]\u003dthis.words[c+o];else this.words[0]\u003d0,this.length\u003d1;var u\u003d0;for(c\u003dthis.length-1;c\u003e\u003d0\u0026\u0026(0!\u003d\u003du||c\u003e\u003di);c--){var f\u003d0|this.words[c];this.words[c]\u003du\u003c\u003c26-a|f\u003e\u003e\u003ea,u\u003df\u0026s}return l\u0026\u00260!\u003d\u003du\u0026\u0026(l.words[l.length++]\u003du),0\u003d\u003d\u003dthis.length\u0026\u0026(this.words[0]\u003d0,this.length\u003d1),this.strip()},a.prototype.ishrn\u003dfunction(t,e,r){return n(0\u003d\u003d\u003dthis.negative),this.iushrn(t,e,r)},a.prototype.shln\u003dfunction(t){return this.clone().ishln(t)},a.prototype.ushln\u003dfunction(t){return this.clone().iushln(t)},a.prototype.shrn\u003dfunction(t){return this.clone().ishrn(t)},a.prototype.ushrn\u003dfunction(t){return this.clone().iushrn(t)},a.prototype.testn\u003dfunction(t){n(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d0);var e\u003dt%26,r\u003d(t-e)/26,i\u003d1\u003c\u003ce;return!(this.length\u003c\u003dr)\u0026\u0026!!(this.words[r]\u0026i)},a.prototype.imaskn\u003dfunction(t){n(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d0);var e\u003dt%26,r\u003d(t-e)/26;if(n(0\u003d\u003d\u003dthis.negative,\"imaskn works only with positive numbers\"),this.length\u003c\u003dr)return this;if(0!\u003d\u003de\u0026\u0026r++,this.length\u003dMath.min(r,this.length),0!\u003d\u003de){var i\u003d67108863^67108863\u003e\u003e\u003ee\u003c\u003ce;this.words[this.length-1]\u0026\u003di}return this.strip()},a.prototype.maskn\u003dfunction(t){return this.clone().imaskn(t)},a.prototype.iaddn\u003dfunction(t){return n(\"number\"\u003d\u003dtypeof t),n(t\u003c67108864),t\u003c0?this.isubn(-t):0!\u003d\u003dthis.negative?1\u003d\u003d\u003dthis.length\u0026\u0026(0|this.words[0])\u003ct?(this.words[0]\u003dt-(0|this.words[0]),this.negative\u003d0,this):(this.negative\u003d0,this.isubn(t),this.negative\u003d1,this):this._iaddn(t)},a.prototype._iaddn\u003dfunction(t){this.words[0]+\u003dt;for(var e\u003d0;e\u003cthis.length\u0026\u0026this.words[e]\u003e\u003d67108864;e++)this.words[e]-\u003d67108864,e\u003d\u003d\u003dthis.length-1?this.words[e+1]\u003d1:this.words[e+1]++;return this.length\u003dMath.max(this.length,e+1),this},a.prototype.isubn\u003dfunction(t){if(n(\"number\"\u003d\u003dtypeof t),n(t\u003c67108864),t\u003c0)return this.iaddn(-t);if(0!\u003d\u003dthis.negative)return this.negative\u003d0,this.iaddn(t),this.negative\u003d1,this;if(this.words[0]-\u003dt,1\u003d\u003d\u003dthis.length\u0026\u0026this.words[0]\u003c0)this.words[0]\u003d-this.words[0],this.negative\u003d1;else for(var e\u003d0;e\u003cthis.length\u0026\u0026this.words[e]\u003c0;e++)this.words[e]+\u003d67108864,this.words[e+1]-\u003d1;return this.strip()},a.prototype.addn\u003dfunction(t){return this.clone().iaddn(t)},a.prototype.subn\u003dfunction(t){return this.clone().isubn(t)},a.prototype.iabs\u003dfunction(){return this.negative\u003d0,this},a.prototype.abs\u003dfunction(){return this.clone().iabs()},a.prototype._ishlnsubmul\u003dfunction(t,e,r){var i,a,o\u003dt.length+r;this._expand(o);var s\u003d0;for(i\u003d0;i\u003ct.length;i++){a\u003d(0|this.words[i+r])+s;var l\u003d(0|t.words[i])*e;s\u003d((a-\u003d67108863\u0026l)\u003e\u003e26)-(l/67108864|0),this.words[i+r]\u003d67108863\u0026a}for(;i\u003cthis.length-r;i++)s\u003d(a\u003d(0|this.words[i+r])+s)\u003e\u003e26,this.words[i+r]\u003d67108863\u0026a;if(0\u003d\u003d\u003ds)return this.strip();for(n(-1\u003d\u003d\u003ds),s\u003d0,i\u003d0;i\u003cthis.length;i++)s\u003d(a\u003d-(0|this.words[i])+s)\u003e\u003e26,this.words[i]\u003d67108863\u0026a;return this.negative\u003d1,this.strip()},a.prototype._wordDiv\u003dfunction(t,e){var r\u003d(this.length,t.length),n\u003dthis.clone(),i\u003dt,o\u003d0|i.words[i.length-1];0!\u003d\u003d(r\u003d26-this._countBits(o))\u0026\u0026(i\u003di.ushln(r),n.iushln(r),o\u003d0|i.words[i.length-1]);var s,l\u003dn.length-i.length;if(\"mod\"!\u003d\u003de){(s\u003dnew a(null)).length\u003dl+1,s.words\u003dnew Array(s.length);for(var c\u003d0;c\u003cs.length;c++)s.words[c]\u003d0}var u\u003dn.clone()._ishlnsubmul(i,1,l);0\u003d\u003d\u003du.negative\u0026\u0026(n\u003du,s\u0026\u0026(s.words[l]\u003d1));for(var f\u003dl-1;f\u003e\u003d0;f--){var h\u003d67108864*(0|n.words[i.length+f])+(0|n.words[i.length+f-1]);for(h\u003dMath.min(h/o|0,67108863),n._ishlnsubmul(i,h,f);0!\u003d\u003dn.negative;)h--,n.negative\u003d0,n._ishlnsubmul(i,1,f),n.isZero()||(n.negative^\u003d1);s\u0026\u0026(s.words[f]\u003dh)}return s\u0026\u0026s.strip(),n.strip(),\"div\"!\u003d\u003de\u0026\u00260!\u003d\u003dr\u0026\u0026n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod\u003dfunction(t,e,r){return n(!t.isZero()),this.isZero()?{div:new a(0),mod:new a(0)}:0!\u003d\u003dthis.negative\u0026\u00260\u003d\u003d\u003dt.negative?(s\u003dthis.neg().divmod(t,e),\"mod\"!\u003d\u003de\u0026\u0026(i\u003ds.div.neg()),\"div\"!\u003d\u003de\u0026\u0026(o\u003ds.mod.neg(),r\u0026\u00260!\u003d\u003do.negative\u0026\u0026o.iadd(t)),{div:i,mod:o}):0\u003d\u003d\u003dthis.negative\u0026\u00260!\u003d\u003dt.negative?(s\u003dthis.divmod(t.neg(),e),\"mod\"!\u003d\u003de\u0026\u0026(i\u003ds.div.neg()),{div:i,mod:s.mod}):0!\u003d(this.negative\u0026t.negative)?(s\u003dthis.neg().divmod(t.neg(),e),\"div\"!\u003d\u003de\u0026\u0026(o\u003ds.mod.neg(),r\u0026\u00260!\u003d\u003do.negative\u0026\u0026o.isub(t)),{div:s.div,mod:o}):t.length\u003ethis.length||this.cmp(t)\u003c0?{div:new a(0),mod:this}:1\u003d\u003d\u003dt.length?\"div\"\u003d\u003d\u003de?{div:this.divn(t.words[0]),mod:null}:\"mod\"\u003d\u003d\u003de?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e);var i,o,s},a.prototype.div\u003dfunction(t){return this.divmod(t,\"div\",!1).div},a.prototype.mod\u003dfunction(t){return this.divmod(t,\"mod\",!1).mod},a.prototype.umod\u003dfunction(t){return this.divmod(t,\"mod\",!0).mod},a.prototype.divRound\u003dfunction(t){var e\u003dthis.divmod(t);if(e.mod.isZero())return e.div;var r\u003d0!\u003d\u003de.div.negative?e.mod.isub(t):e.mod,n\u003dt.ushrn(1),i\u003dt.andln(1),a\u003dr.cmp(n);return a\u003c0||1\u003d\u003d\u003di\u0026\u00260\u003d\u003d\u003da?e.div:0!\u003d\u003de.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn\u003dfunction(t){n(t\u003c\u003d67108863);for(var e\u003d(1\u003c\u003c26)%t,r\u003d0,i\u003dthis.length-1;i\u003e\u003d0;i--)r\u003d(e*r+(0|this.words[i]))%t;return r},a.prototype.idivn\u003dfunction(t){n(t\u003c\u003d67108863);for(var e\u003d0,r\u003dthis.length-1;r\u003e\u003d0;r--){var i\u003d(0|this.words[r])+67108864*e;this.words[r]\u003di/t|0,e\u003di%t}return this.strip()},a.prototype.divn\u003dfunction(t){return this.clone().idivn(t)},a.prototype.egcd\u003dfunction(t){n(0\u003d\u003d\u003dt.negative),n(!t.isZero());var e\u003dthis,r\u003dt.clone();e\u003d0!\u003d\u003de.negative?e.umod(t):e.clone();for(var i\u003dnew a(1),o\u003dnew a(0),s\u003dnew a(0),l\u003dnew a(1),c\u003d0;e.isEven()\u0026\u0026r.isEven();)e.iushrn(1),r.iushrn(1),++c;for(var u\u003dr.clone(),f\u003de.clone();!e.isZero();){for(var h\u003d0,p\u003d1;0\u003d\u003d(e.words[0]\u0026p)\u0026\u0026h\u003c26;++h,p\u003c\u003c\u003d1);if(h\u003e0)for(e.iushrn(h);h-- \u003e0;)(i.isOdd()||o.isOdd())\u0026\u0026(i.iadd(u),o.isub(f)),i.iushrn(1),o.iushrn(1);for(var d\u003d0,m\u003d1;0\u003d\u003d(r.words[0]\u0026m)\u0026\u0026d\u003c26;++d,m\u003c\u003c\u003d1);if(d\u003e0)for(r.iushrn(d);d-- \u003e0;)(s.isOdd()||l.isOdd())\u0026\u0026(s.iadd(u),l.isub(f)),s.iushrn(1),l.iushrn(1);e.cmp(r)\u003e\u003d0?(e.isub(r),i.isub(s),o.isub(l)):(r.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:r.iushln(c)}},a.prototype._invmp\u003dfunction(t){n(0\u003d\u003d\u003dt.negative),n(!t.isZero());var e\u003dthis,r\u003dt.clone();e\u003d0!\u003d\u003de.negative?e.umod(t):e.clone();for(var i,o\u003dnew a(1),s\u003dnew a(0),l\u003dr.clone();e.cmpn(1)\u003e0\u0026\u0026r.cmpn(1)\u003e0;){for(var c\u003d0,u\u003d1;0\u003d\u003d(e.words[0]\u0026u)\u0026\u0026c\u003c26;++c,u\u003c\u003c\u003d1);if(c\u003e0)for(e.iushrn(c);c-- \u003e0;)o.isOdd()\u0026\u0026o.iadd(l),o.iushrn(1);for(var f\u003d0,h\u003d1;0\u003d\u003d(r.words[0]\u0026h)\u0026\u0026f\u003c26;++f,h\u003c\u003c\u003d1);if(f\u003e0)for(r.iushrn(f);f-- \u003e0;)s.isOdd()\u0026\u0026s.iadd(l),s.iushrn(1);e.cmp(r)\u003e\u003d0?(e.isub(r),o.isub(s)):(r.isub(e),s.isub(o))}return(i\u003d0\u003d\u003d\u003de.cmpn(1)?o:s).cmpn(0)\u003c0\u0026\u0026i.iadd(t),i},a.prototype.gcd\u003dfunction(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e\u003dthis.clone(),r\u003dt.clone();e.negative\u003d0,r.negative\u003d0;for(var n\u003d0;e.isEven()\u0026\u0026r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i\u003de.cmp(r);if(i\u003c0){var a\u003de;e\u003dr,r\u003da}else if(0\u003d\u003d\u003di||0\u003d\u003d\u003dr.cmpn(1))break;e.isub(r)}return r.iushln(n)},a.prototype.invm\u003dfunction(t){return this.egcd(t).a.umod(t)},a.prototype.isEven\u003dfunction(){return 0\u003d\u003d(1\u0026this.words[0])},a.prototype.isOdd\u003dfunction(){return 1\u003d\u003d(1\u0026this.words[0])},a.prototype.andln\u003dfunction(t){return this.words[0]\u0026t},a.prototype.bincn\u003dfunction(t){n(\"number\"\u003d\u003dtypeof t);var e\u003dt%26,r\u003d(t-e)/26,i\u003d1\u003c\u003ce;if(this.length\u003c\u003dr)return this._expand(r+1),this.words[r]|\u003di,this;for(var a\u003di,o\u003dr;0!\u003d\u003da\u0026\u0026o\u003cthis.length;o++){var s\u003d0|this.words[o];a\u003d(s+\u003da)\u003e\u003e\u003e26,s\u0026\u003d67108863,this.words[o]\u003ds}return 0!\u003d\u003da\u0026\u0026(this.words[o]\u003da,this.length++),this},a.prototype.isZero\u003dfunction(){return 1\u003d\u003d\u003dthis.length\u0026\u00260\u003d\u003d\u003dthis.words[0]},a.prototype.cmpn\u003dfunction(t){var e,r\u003dt\u003c0;if(0!\u003d\u003dthis.negative\u0026\u0026!r)return-1;if(0\u003d\u003d\u003dthis.negative\u0026\u0026r)return 1;if(this.strip(),this.length\u003e1)e\u003d1;else{r\u0026\u0026(t\u003d-t),n(t\u003c\u003d67108863,\"Number is too big\");var i\u003d0|this.words[0];e\u003di\u003d\u003d\u003dt?0:i\u003ct?-1:1}return 0!\u003d\u003dthis.negative?0|-e:e},a.prototype.cmp\u003dfunction(t){if(0!\u003d\u003dthis.negative\u0026\u00260\u003d\u003d\u003dt.negative)return-1;if(0\u003d\u003d\u003dthis.negative\u0026\u00260!\u003d\u003dt.negative)return 1;var e\u003dthis.ucmp(t);return 0!\u003d\u003dthis.negative?0|-e:e},a.prototype.ucmp\u003dfunction(t){if(this.length\u003et.length)return 1;if(this.length\u003ct.length)return-1;for(var e\u003d0,r\u003dthis.length-1;r\u003e\u003d0;r--){var n\u003d0|this.words[r],i\u003d0|t.words[r];if(n!\u003d\u003di){n\u003ci?e\u003d-1:n\u003ei\u0026\u0026(e\u003d1);break}}return e},a.prototype.gtn\u003dfunction(t){return 1\u003d\u003d\u003dthis.cmpn(t)},a.prototype.gt\u003dfunction(t){return 1\u003d\u003d\u003dthis.cmp(t)},a.prototype.gten\u003dfunction(t){return this.cmpn(t)\u003e\u003d0},a.prototype.gte\u003dfunction(t){return this.cmp(t)\u003e\u003d0},a.prototype.ltn\u003dfunction(t){return-1\u003d\u003d\u003dthis.cmpn(t)},a.prototype.lt\u003dfunction(t){return-1\u003d\u003d\u003dthis.cmp(t)},a.prototype.lten\u003dfunction(t){return this.cmpn(t)\u003c\u003d0},a.prototype.lte\u003dfunction(t){return this.cmp(t)\u003c\u003d0},a.prototype.eqn\u003dfunction(t){return 0\u003d\u003d\u003dthis.cmpn(t)},a.prototype.eq\u003dfunction(t){return 0\u003d\u003d\u003dthis.cmp(t)},a.red\u003dfunction(t){return new w(t)},a.prototype.toRed\u003dfunction(t){return n(!this.red,\"Already a number in reduction context\"),n(0\u003d\u003d\u003dthis.negative,\"red works only with positives\"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed\u003dfunction(){return n(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},a.prototype._forceRed\u003dfunction(t){return this.red\u003dt,this},a.prototype.forceRed\u003dfunction(t){return n(!this.red,\"Already a number in reduction context\"),this._forceRed(t)},a.prototype.redAdd\u003dfunction(t){return n(this.red,\"redAdd works only with red numbers\"),this.red.add(this,t)},a.prototype.redIAdd\u003dfunction(t){return n(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,t)},a.prototype.redSub\u003dfunction(t){return n(this.red,\"redSub works only with red numbers\"),this.red.sub(this,t)},a.prototype.redISub\u003dfunction(t){return n(this.red,\"redISub works only with red numbers\"),this.red.isub(this,t)},a.prototype.redShl\u003dfunction(t){return n(this.red,\"redShl works only with red numbers\"),this.red.shl(this,t)},a.prototype.redMul\u003dfunction(t){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul\u003dfunction(t){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr\u003dfunction(){return n(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr\u003dfunction(){return n(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt\u003dfunction(){return n(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm\u003dfunction(){return n(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg\u003dfunction(){return n(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow\u003dfunction(t){return n(this.red\u0026\u0026!t.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,t)};var g\u003d{k256:null,p224:null,p192:null,p25519:null};function v(t,e){this.name\u003dt,this.p\u003dnew a(e,16),this.n\u003dthis.p.bitLength(),this.k\u003dnew a(1).iushln(this.n).isub(this.p),this.tmp\u003dthis._tmp()}function y(){v.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function x(){v.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function b(){v.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function _(){v.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function w(t){if(\"string\"\u003d\u003dtypeof t){var e\u003da._prime(t);this.m\u003de.p,this.prime\u003de}else n(t.gtn(1),\"modulus must be greater than 1\"),this.m\u003dt,this.prime\u003dnull}function T(t){w.call(this,t),this.shift\u003dthis.m.bitLength(),this.shift%26!\u003d0\u0026\u0026(this.shift+\u003d26-this.shift%26),this.r\u003dnew a(1).iushln(this.shift),this.r2\u003dthis.imod(this.r.sqr()),this.rinv\u003dthis.r._invmp(this.m),this.minv\u003dthis.rinv.mul(this.r).isubn(1).div(this.m),this.minv\u003dthis.minv.umod(this.r),this.minv\u003dthis.r.sub(this.minv)}v.prototype._tmp\u003dfunction(){var t\u003dnew a(null);return t.words\u003dnew Array(Math.ceil(this.n/13)),t},v.prototype.ireduce\u003dfunction(t){var e,r\u003dt;do{this.split(r,this.tmp),e\u003d(r\u003d(r\u003dthis.imulK(r)).iadd(this.tmp)).bitLength()}while(e\u003ethis.n);var n\u003de\u003cthis.n?-1:r.ucmp(this.p);return 0\u003d\u003d\u003dn?(r.words[0]\u003d0,r.length\u003d1):n\u003e0?r.isub(this.p):r.strip(),r},v.prototype.split\u003dfunction(t,e){t.iushrn(this.n,0,e)},v.prototype.imulK\u003dfunction(t){return t.imul(this.k)},i(y,v),y.prototype.split\u003dfunction(t,e){for(var r\u003dMath.min(t.length,9),n\u003d0;n\u003cr;n++)e.words[n]\u003dt.words[n];if(e.length\u003dr,t.length\u003c\u003d9)return t.words[0]\u003d0,void(t.length\u003d1);var i\u003dt.words[9];for(e.words[e.length++]\u003d4194303\u0026i,n\u003d10;n\u003ct.length;n++){var a\u003d0|t.words[n];t.words[n-10]\u003d(4194303\u0026a)\u003c\u003c4|i\u003e\u003e\u003e22,i\u003da}i\u003e\u003e\u003e\u003d22,t.words[n-10]\u003di,0\u003d\u003d\u003di\u0026\u0026t.length\u003e10?t.length-\u003d10:t.length-\u003d9},y.prototype.imulK\u003dfunction(t){t.words[t.length]\u003d0,t.words[t.length+1]\u003d0,t.length+\u003d2;for(var e\u003d0,r\u003d0;r\u003ct.length;r++){var n\u003d0|t.words[r];e+\u003d977*n,t.words[r]\u003d67108863\u0026e,e\u003d64*n+(e/67108864|0)}return 0\u003d\u003d\u003dt.words[t.length-1]\u0026\u0026(t.length--,0\u003d\u003d\u003dt.words[t.length-1]\u0026\u0026t.length--),t},i(x,v),i(b,v),i(_,v),_.prototype.imulK\u003dfunction(t){for(var e\u003d0,r\u003d0;r\u003ct.length;r++){var n\u003d19*(0|t.words[r])+e,i\u003d67108863\u0026n;n\u003e\u003e\u003e\u003d26,t.words[r]\u003di,e\u003dn}return 0!\u003d\u003de\u0026\u0026(t.words[t.length++]\u003de),t},a._prime\u003dfunction(t){if(g[t])return g[t];var e;if(\"k256\"\u003d\u003d\u003dt)e\u003dnew y;else if(\"p224\"\u003d\u003d\u003dt)e\u003dnew x;else if(\"p192\"\u003d\u003d\u003dt)e\u003dnew b;else{if(\"p25519\"!\u003d\u003dt)throw new Error(\"Unknown prime \"+t);e\u003dnew _}return g[t]\u003de,e},w.prototype._verify1\u003dfunction(t){n(0\u003d\u003d\u003dt.negative,\"red works only with positives\"),n(t.red,\"red works only with red numbers\")},w.prototype._verify2\u003dfunction(t,e){n(0\u003d\u003d(t.negative|e.negative),\"red works only with positives\"),n(t.red\u0026\u0026t.red\u003d\u003d\u003de.red,\"red works only with red numbers\")},w.prototype.imod\u003dfunction(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},w.prototype.neg\u003dfunction(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},w.prototype.add\u003dfunction(t,e){this._verify2(t,e);var r\u003dt.add(e);return r.cmp(this.m)\u003e\u003d0\u0026\u0026r.isub(this.m),r._forceRed(this)},w.prototype.iadd\u003dfunction(t,e){this._verify2(t,e);var r\u003dt.iadd(e);return r.cmp(this.m)\u003e\u003d0\u0026\u0026r.isub(this.m),r},w.prototype.sub\u003dfunction(t,e){this._verify2(t,e);var r\u003dt.sub(e);return r.cmpn(0)\u003c0\u0026\u0026r.iadd(this.m),r._forceRed(this)},w.prototype.isub\u003dfunction(t,e){this._verify2(t,e);var r\u003dt.isub(e);return r.cmpn(0)\u003c0\u0026\u0026r.iadd(this.m),r},w.prototype.shl\u003dfunction(t,e){return this._verify1(t),this.imod(t.ushln(e))},w.prototype.imul\u003dfunction(t,e){return this._verify2(t,e),this.imod(t.imul(e))},w.prototype.mul\u003dfunction(t,e){return this._verify2(t,e),this.imod(t.mul(e))},w.prototype.isqr\u003dfunction(t){return this.imul(t,t.clone())},w.prototype.sqr\u003dfunction(t){return this.mul(t,t)},w.prototype.sqrt\u003dfunction(t){if(t.isZero())return t.clone();var e\u003dthis.m.andln(3);if(n(e%2\u003d\u003d1),3\u003d\u003d\u003de){var r\u003dthis.m.add(new a(1)).iushrn(2);return this.pow(t,r)}for(var i\u003dthis.m.subn(1),o\u003d0;!i.isZero()\u0026\u00260\u003d\u003d\u003di.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s\u003dnew a(1).toRed(this),l\u003ds.redNeg(),c\u003dthis.m.subn(1).iushrn(1),u\u003dthis.m.bitLength();for(u\u003dnew a(2*u*u).toRed(this);0!\u003d\u003dthis.pow(u,c).cmp(l);)u.redIAdd(l);for(var f\u003dthis.pow(u,i),h\u003dthis.pow(t,i.addn(1).iushrn(1)),p\u003dthis.pow(t,i),d\u003do;0!\u003d\u003dp.cmp(s);){for(var m\u003dp,g\u003d0;0!\u003d\u003dm.cmp(s);g++)m\u003dm.redSqr();n(g\u003cd);var v\u003dthis.pow(f,new a(1).iushln(d-g-1));h\u003dh.redMul(v),f\u003dv.redSqr(),p\u003dp.redMul(f),d\u003dg}return h},w.prototype.invm\u003dfunction(t){var e\u003dt._invmp(this.m);return 0!\u003d\u003de.negative?(e.negative\u003d0,this.imod(e).redNeg()):this.imod(e)},w.prototype.pow\u003dfunction(t,e){if(e.isZero())return new a(1).toRed(this);if(0\u003d\u003d\u003de.cmpn(1))return t.clone();var r\u003dnew Array(16);r[0]\u003dnew a(1).toRed(this),r[1]\u003dt;for(var n\u003d2;n\u003cr.length;n++)r[n]\u003dthis.mul(r[n-1],t);var i\u003dr[0],o\u003d0,s\u003d0,l\u003de.bitLength()%26;for(0\u003d\u003d\u003dl\u0026\u0026(l\u003d26),n\u003de.length-1;n\u003e\u003d0;n--){for(var c\u003de.words[n],u\u003dl-1;u\u003e\u003d0;u--){var f\u003dc\u003e\u003eu\u00261;i!\u003d\u003dr[0]\u0026\u0026(i\u003dthis.sqr(i)),0!\u003d\u003df||0!\u003d\u003do?(o\u003c\u003c\u003d1,o|\u003df,(4\u003d\u003d\u003d++s||0\u003d\u003d\u003dn\u0026\u00260\u003d\u003d\u003du)\u0026\u0026(i\u003dthis.mul(i,r[o]),s\u003d0,o\u003d0)):s\u003d0}l\u003d26}return i},w.prototype.convertTo\u003dfunction(t){var e\u003dt.umod(this.m);return e\u003d\u003d\u003dt?e.clone():e},w.prototype.convertFrom\u003dfunction(t){var e\u003dt.clone();return e.red\u003dnull,e},a.mont\u003dfunction(t){return new T(t)},i(T,w),T.prototype.convertTo\u003dfunction(t){return this.imod(t.ushln(this.shift))},T.prototype.convertFrom\u003dfunction(t){var e\u003dthis.imod(t.mul(this.rinv));return e.red\u003dnull,e},T.prototype.imul\u003dfunction(t,e){if(t.isZero()||e.isZero())return t.words[0]\u003d0,t.length\u003d1,t;var r\u003dt.imul(e),n\u003dr.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i\u003dr.isub(n).iushrn(this.shift),a\u003di;return i.cmp(this.m)\u003e\u003d0?a\u003di.isub(this.m):i.cmpn(0)\u003c0\u0026\u0026(a\u003di.iadd(this.m)),a._forceRed(this)},T.prototype.mul\u003dfunction(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var r\u003dt.mul(e),n\u003dr.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i\u003dr.isub(n).iushrn(this.shift),o\u003di;return i.cmp(this.m)\u003e\u003d0?o\u003di.isub(this.m):i.cmpn(0)\u003c0\u0026\u0026(o\u003di.iadd(this.m)),o._forceRed(this)},T.prototype.invm\u003dfunction(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0\u003d\u003d\u003de||e,this)},{buffer:115}],107:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e,r,n,i\u003dt.length,a\u003d0;for(e\u003d0;e\u003ci;++e)a+\u003dt[e].length;var o\u003dnew Array(a),s\u003d0;for(e\u003d0;e\u003ci;++e){var l\u003dt[e],c\u003dl.length;for(r\u003d0;r\u003cc;++r){var u\u003do[s++]\u003dnew Array(c-1),f\u003d0;for(n\u003d0;n\u003cc;++n)n!\u003d\u003dr\u0026\u0026(u[f++]\u003dl[n]);if(1\u0026r){var h\u003du[1];u[1]\u003du[0],u[0]\u003dh}}}return o}},{}],108:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){switch(arguments.length){case 1:return f(t);case 2:return\"function\"\u003d\u003dtypeof e?c(t,t,e,!0):h(t,e);case 3:return c(t,e,r,!1);default:throw new Error(\"box-intersect: Invalid arguments\")}};var n,i\u003dt(\"typedarray-pool\"),a\u003dt(\"./lib/sweep\"),o\u003dt(\"./lib/intersect\");function s(t,e){for(var r\u003d0;r\u003ct;++r)if(!(e[r]\u003c\u003de[r+t]))return!0;return!1}function l(t,e,r,n){for(var i\u003d0,a\u003d0,o\u003d0,l\u003dt.length;o\u003cl;++o){var c\u003dt[o];if(!s(e,c)){for(var u\u003d0;u\u003c2*e;++u)r[i++]\u003dc[u];n[a++]\u003do}}return a}function c(t,e,r,n){var s\u003dt.length,c\u003de.length;if(!(s\u003c\u003d0||c\u003c\u003d0)){var u\u003dt[0].length\u003e\u003e\u003e1;if(!(u\u003c\u003d0)){var f,h\u003di.mallocDouble(2*u*s),p\u003di.mallocInt32(s);if((s\u003dl(t,u,h,p))\u003e0){if(1\u003d\u003d\u003du\u0026\u0026n)a.init(s),f\u003da.sweepComplete(u,r,0,s,h,p,0,s,h,p);else{var d\u003di.mallocDouble(2*u*c),m\u003di.mallocInt32(c);(c\u003dl(e,u,d,m))\u003e0\u0026\u0026(a.init(s+c),f\u003d1\u003d\u003d\u003du?a.sweepBipartite(u,r,0,s,h,p,0,c,d,m):o(u,r,n,s,h,p,c,d,m),i.free(d),i.free(m))}i.free(h),i.free(p)}return f}}}function u(t,e){n.push([t,e])}function f(t){return n\u003d[],c(t,t,u,!0),n}function h(t,e){return n\u003d[],c(t,e,u,!1),n}},{\"./lib/intersect\":110,\"./lib/sweep\":114,\"typedarray-pool\":613}],109:[function(t,e,r){\"use strict\";var n\u003d[\"d\",\"ax\",\"vv\",\"rs\",\"re\",\"rb\",\"ri\",\"bs\",\"be\",\"bb\",\"bi\"];function i(t){var e\u003d\"bruteForce\"+(t?\"Full\":\"Partial\"),r\u003d[],i\u003dn.slice();t||i.splice(3,0,\"fp\");var a\u003d[\"function \"+e+\"(\"+i.join()+\"){\"];function o(e,i){var o\u003dfunction(t,e,r){var i\u003d\"bruteForce\"+(t?\"Red\":\"Blue\")+(e?\"Flip\":\"\")+(r?\"Full\":\"\"),a\u003d[\"function \",i,\"(\",n.join(),\"){\",\"var \",\"es\",\"\u003d2*\",\"d\",\";\"],o\u003d\"for(var i\u003drs,rp\u003des*rs;i\u003cre;++i,rp+\u003des){var x0\u003drb[ax+rp],x1\u003drb[ax+rp+d],xi\u003dri[i];\",s\u003d\"for(var j\u003dbs,bp\u003des*bs;j\u003cbe;++j,bp+\u003des){var y0\u003dbb[ax+bp],\"+(r?\"y1\u003dbb[ax+bp+d],\":\"\")+\"yi\u003dbi[j];\";return t?a.push(o,\"Q\",\":\",s):a.push(s,\"Q\",\":\",o),r?a.push(\"if(y1\u003cx0||x1\u003cy0)continue;\"):e?a.push(\"if(y0\u003c\u003dx0||x1\u003cy0)continue;\"):a.push(\"if(y0\u003cx0||x1\u003cy0)continue;\"),a.push(\"for(var k\u003dax+1;k\u003cd;++k){var r0\u003drb[k+rp],r1\u003drb[k+d+rp],b0\u003dbb[k+bp],b1\u003dbb[k+d+bp];if(r1\u003cb0||b1\u003cr0)continue Q;}var rv\u003dvv(\"),e?a.push(\"yi,xi\"):a.push(\"xi,yi\"),a.push(\");if(rv!\u003d\u003dvoid 0)return rv;}}}\"),{name:i,code:a.join(\"\")}}(e,i,t);r.push(o.code),a.push(\"return \"+o.name+\"(\"+n.join()+\");\")}a.push(\"if(re-rs\u003ebe-bs){\"),t?(o(!0,!1),a.push(\"}else{\"),o(!1,!1)):(a.push(\"if(fp){\"),o(!0,!0),a.push(\"}else{\"),o(!0,!1),a.push(\"}}else{if(fp){\"),o(!1,!0),a.push(\"}else{\"),o(!1,!1),a.push(\"}\")),a.push(\"}}return \"+e);var s\u003dr.join(\"\")+a.join(\"\");return new Function(s)()}r.partial\u003di(!1),r.full\u003di(!0)},{}],110:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,a,u,w,T,k,M){!function(t,e){var r\u003d8*i.log2(e+1)*(t+1)|0,a\u003di.nextPow2(6*r);v.length\u003ca\u0026\u0026(n.free(v),v\u003dn.mallocInt32(a));var o\u003di.nextPow2(2*r);y.length\u003co\u0026\u0026(n.free(y),y\u003dn.mallocDouble(o))}(t,a+T);var A,S\u003d0,E\u003d2*t;x(S++,0,0,a,0,T,r?16:0,-1/0,1/0),r||x(S++,0,0,T,0,a,1,-1/0,1/0);for(;S\u003e0;){var L\u003d6*(S-\u003d1),C\u003dv[L],P\u003dv[L+1],I\u003dv[L+2],O\u003dv[L+3],z\u003dv[L+4],D\u003dv[L+5],R\u003d2*S,F\u003dy[R],B\u003dy[R+1],N\u003d1\u0026D,j\u003d!!(16\u0026D),U\u003du,V\u003dw,q\u003dk,H\u003dM;if(N\u0026\u0026(U\u003dk,V\u003dM,q\u003du,H\u003dw),!(2\u0026D\u0026\u0026(I\u003dp(t,C,P,I,U,V,B),P\u003e\u003dI)||4\u0026D\u0026\u0026(P\u003dd(t,C,P,I,U,V,F))\u003e\u003dI)){var G\u003dI-P,Y\u003dz-O;if(j){if(t*G*(G+Y)\u003c1\u003c\u003c22){if(void 0!\u003d\u003d(A\u003dl.scanComplete(t,C,e,P,I,U,V,O,z,q,H)))return A;continue}}else{if(t*Math.min(G,Y)\u003c128){if(void 0!\u003d\u003d(A\u003do(t,C,e,N,P,I,U,V,O,z,q,H)))return A;continue}if(t*G*Y\u003c1\u003c\u003c22){if(void 0!\u003d\u003d(A\u003dl.scanBipartite(t,C,e,N,P,I,U,V,O,z,q,H)))return A;continue}}var W\u003df(t,C,P,I,U,V,F,B);if(P\u003cW)if(t*(W-P)\u003c128){if(void 0!\u003d\u003d(A\u003ds(t,C+1,e,P,W,U,V,O,z,q,H)))return A}else if(C\u003d\u003d\u003dt-2){if(void 0!\u003d\u003d(A\u003dN?l.sweepBipartite(t,e,O,z,q,H,P,W,U,V):l.sweepBipartite(t,e,P,W,U,V,O,z,q,H)))return A}else x(S++,C+1,P,W,O,z,N,-1/0,1/0),x(S++,C+1,O,z,P,W,1^N,-1/0,1/0);if(W\u003cI){var X\u003dc(t,C,O,z,q,H),Z\u003dq[E*X+C],J\u003dh(t,C,X,z,q,H,Z);if(J\u003cz\u0026\u0026x(S++,C,W,I,J,z,(4|N)+(j?16:0),Z,B),O\u003cX\u0026\u0026x(S++,C,W,I,O,X,(2|N)+(j?16:0),F,Z),X+1\u003d\u003d\u003dJ){if(void 0!\u003d\u003d(A\u003dj?_(t,C,e,W,I,U,V,X,q,H[X]):b(t,C,e,N,W,I,U,V,X,q,H[X])))return A}else if(X\u003cJ){var K;if(j){if(K\u003dm(t,C,W,I,U,V,Z),W\u003cK){var Q\u003dh(t,C,W,K,U,V,Z);if(C\u003d\u003d\u003dt-2){if(W\u003cQ\u0026\u0026void 0!\u003d\u003d(A\u003dl.sweepComplete(t,e,W,Q,U,V,X,J,q,H)))return A;if(Q\u003cK\u0026\u0026void 0!\u003d\u003d(A\u003dl.sweepBipartite(t,e,Q,K,U,V,X,J,q,H)))return A}else W\u003cQ\u0026\u0026x(S++,C+1,W,Q,X,J,16,-1/0,1/0),Q\u003cK\u0026\u0026(x(S++,C+1,Q,K,X,J,0,-1/0,1/0),x(S++,C+1,X,J,Q,K,1,-1/0,1/0))}}else K\u003dN?g(t,C,W,I,U,V,Z):m(t,C,W,I,U,V,Z),W\u003cK\u0026\u0026(C\u003d\u003d\u003dt-2?A\u003dN?l.sweepBipartite(t,e,X,J,q,H,W,K,U,V):l.sweepBipartite(t,e,W,K,U,V,X,J,q,H):(x(S++,C+1,W,K,X,J,N,-1/0,1/0),x(S++,C+1,X,J,W,K,1^N,-1/0,1/0)))}}}}};var n\u003dt(\"typedarray-pool\"),i\u003dt(\"bit-twiddle\"),a\u003dt(\"./brute\"),o\u003da.partial,s\u003da.full,l\u003dt(\"./sweep\"),c\u003dt(\"./median\"),u\u003dt(\"./partition\"),f\u003du(\"!(lo\u003e\u003dp0)\u0026\u0026!(p1\u003e\u003dhi)\",[\"p0\",\"p1\"]),h\u003du(\"lo\u003d\u003d\u003dp0\",[\"p0\"]),p\u003du(\"lo\u003cp0\",[\"p0\"]),d\u003du(\"hi\u003c\u003dp0\",[\"p0\"]),m\u003du(\"lo\u003c\u003dp0\u0026\u0026p0\u003c\u003dhi\",[\"p0\"]),g\u003du(\"lo\u003cp0\u0026\u0026p0\u003c\u003dhi\",[\"p0\"]),v\u003dn.mallocInt32(1024),y\u003dn.mallocDouble(1024);function x(t,e,r,n,i,a,o,s,l){var c\u003d6*t;v[c]\u003de,v[c+1]\u003dr,v[c+2]\u003dn,v[c+3]\u003di,v[c+4]\u003da,v[c+5]\u003do;var u\u003d2*t;y[u]\u003ds,y[u+1]\u003dl}function b(t,e,r,n,i,a,o,s,l,c,u){var f\u003d2*t,h\u003dl*f,p\u003dc[h+e];t:for(var d\u003di,m\u003di*f;d\u003ca;++d,m+\u003df){var g\u003do[m+e],v\u003do[m+e+t];if(!(p\u003cg||v\u003cp)\u0026\u0026(!n||p!\u003d\u003dg)){for(var y,x\u003ds[d],b\u003de+1;b\u003ct;++b){g\u003do[m+b],v\u003do[m+b+t];var _\u003dc[h+b],w\u003dc[h+b+t];if(v\u003c_||w\u003cg)continue t}if(void 0!\u003d\u003d(y\u003dn?r(u,x):r(x,u)))return y}}}function _(t,e,r,n,i,a,o,s,l,c){var u\u003d2*t,f\u003ds*u,h\u003dl[f+e];t:for(var p\u003dn,d\u003dn*u;p\u003ci;++p,d+\u003du){var m\u003do[p];if(m!\u003d\u003dc){var g\u003da[d+e],v\u003da[d+e+t];if(!(h\u003cg||v\u003ch)){for(var y\u003de+1;y\u003ct;++y){g\u003da[d+y],v\u003da[d+y+t];var x\u003dl[f+y],b\u003dl[f+y+t];if(v\u003cx||b\u003cg)continue t}var _\u003dr(m,c);if(void 0!\u003d\u003d_)return _}}}}},{\"./brute\":109,\"./median\":111,\"./partition\":112,\"./sweep\":114,\"bit-twiddle\":104,\"typedarray-pool\":613}],111:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,a,o,s){if(a\u003c\u003dr+1)return r;var l\u003dr,c\u003da,u\u003da+r\u003e\u003e\u003e1,f\u003d2*t,h\u003du,p\u003do[f*u+e];for(;l\u003cc;){if(c-l\u003c8){i(t,e,l,c,o,s),p\u003do[f*u+e];break}var d\u003dc-l,m\u003dMath.random()*d+l|0,g\u003do[f*m+e],v\u003dMath.random()*d+l|0,y\u003do[f*v+e],x\u003dMath.random()*d+l|0,b\u003do[f*x+e];g\u003c\u003dy?b\u003e\u003dy?(h\u003dv,p\u003dy):g\u003e\u003db?(h\u003dm,p\u003dg):(h\u003dx,p\u003db):y\u003e\u003db?(h\u003dv,p\u003dy):b\u003e\u003dg?(h\u003dm,p\u003dg):(h\u003dx,p\u003db);for(var _\u003df*(c-1),w\u003df*h,T\u003d0;T\u003cf;++T,++_,++w){var k\u003do[_];o[_]\u003do[w],o[w]\u003dk}var M\u003ds[c-1];s[c-1]\u003ds[h],s[h]\u003dM,h\u003dn(t,e,l,c-1,o,s,p);for(_\u003df*(c-1),w\u003df*h,T\u003d0;T\u003cf;++T,++_,++w){k\u003do[_];o[_]\u003do[w],o[w]\u003dk}M\u003ds[c-1];if(s[c-1]\u003ds[h],s[h]\u003dM,u\u003ch){for(c\u003dh-1;l\u003cc\u0026\u0026o[f*(c-1)+e]\u003d\u003d\u003dp;)c-\u003d1;c+\u003d1}else{if(!(h\u003cu))break;for(l\u003dh+1;l\u003cc\u0026\u0026o[f*l+e]\u003d\u003d\u003dp;)l+\u003d1}}return n(t,e,r,u,o,s,o[f*u+e])};var n\u003dt(\"./partition\")(\"lo\u003cp0\",[\"p0\"]);function i(t,e,r,n,i,a){for(var o\u003d2*t,s\u003do*(r+1)+e,l\u003dr+1;l\u003cn;++l,s+\u003do)for(var c\u003di[s],u\u003dl,f\u003do*(l-1);u\u003er\u0026\u0026i[f+e]\u003ec;--u,f-\u003do){for(var h\u003df,p\u003df+o,d\u003d0;d\u003co;++d,++h,++p){var m\u003di[h];i[h]\u003di[p],i[p]\u003dm}var g\u003da[u];a[u]\u003da[u-1],a[u-1]\u003dg}}},{\"./partition\":112}],112:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003d\"abcdef\".split(\"\").concat(e),n\u003d[];t.indexOf(\"lo\")\u003e\u003d0\u0026\u0026n.push(\"lo\u003de[k+n]\");t.indexOf(\"hi\")\u003e\u003d0\u0026\u0026n.push(\"hi\u003de[k+o]\");return r.push(\"for(var j\u003d2*a,k\u003dj*c,l\u003dk,m\u003dc,n\u003db,o\u003da+b,p\u003dc;d\u003ep;++p,k+\u003dj){var _;if($)if(m\u003d\u003d\u003dp)m+\u003d1,l+\u003dj;else{for(var s\u003d0;j\u003es;++s){var t\u003de[k+s];e[k+s]\u003de[l],e[l++]\u003dt}var u\u003df[p];f[p]\u003df[m],f[m++]\u003du}}return m\".replace(\"_\",n.join()).replace(\"$\",t)),Function.apply(void 0,r)}},{}],113:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){e\u003c\u003d128?n(0,e-1,t):function t(e,r,u){var f\u003d(r-e+1)/6|0,h\u003de+f,p\u003dr-f,d\u003de+r\u003e\u003e1,m\u003dd-f,g\u003dd+f,v\u003dh,y\u003dm,x\u003dd,b\u003dg,_\u003dp,w\u003de+1,T\u003dr-1,k\u003d0;l(v,y,u)\u0026\u0026(k\u003dv,v\u003dy,y\u003dk);l(b,_,u)\u0026\u0026(k\u003db,b\u003d_,_\u003dk);l(v,x,u)\u0026\u0026(k\u003dv,v\u003dx,x\u003dk);l(y,x,u)\u0026\u0026(k\u003dy,y\u003dx,x\u003dk);l(v,b,u)\u0026\u0026(k\u003dv,v\u003db,b\u003dk);l(x,b,u)\u0026\u0026(k\u003dx,x\u003db,b\u003dk);l(y,_,u)\u0026\u0026(k\u003dy,y\u003d_,_\u003dk);l(y,x,u)\u0026\u0026(k\u003dy,y\u003dx,x\u003dk);l(b,_,u)\u0026\u0026(k\u003db,b\u003d_,_\u003dk);for(var M\u003du[2*y],A\u003du[2*y+1],S\u003du[2*b],E\u003du[2*b+1],L\u003d2*v,C\u003d2*x,P\u003d2*_,I\u003d2*h,O\u003d2*d,z\u003d2*p,D\u003d0;D\u003c2;++D){var R\u003du[L+D],F\u003du[C+D],B\u003du[P+D];u[I+D]\u003dR,u[O+D]\u003dF,u[z+D]\u003dB}a(m,e,u),a(g,r,u);for(var N\u003dw;N\u003c\u003dT;++N)if(c(N,M,A,u))N!\u003d\u003dw\u0026\u0026i(N,w,u),++w;else if(!c(N,S,E,u))for(;;){if(c(T,S,E,u)){c(T,M,A,u)?(o(N,w,T,u),++w,--T):(i(N,T,u),--T);break}if(--T\u003cN)break}s(e,w-1,M,A,u),s(r,T+1,S,E,u),w-2-e\u003c\u003d32?n(e,w-2,u):t(e,w-2,u);r-(T+2)\u003c\u003d32?n(T+2,r,u):t(T+2,r,u);T-w\u003c\u003d32?n(w,T,u):t(w,T,u)}(0,e-1,t)};function n(t,e,r){for(var n\u003d2*(t+1),i\u003dt+1;i\u003c\u003de;++i){for(var a\u003dr[n++],o\u003dr[n++],s\u003di,l\u003dn-2;s-- \u003et;){var c\u003dr[l-2],u\u003dr[l-1];if(c\u003ca)break;if(c\u003d\u003d\u003da\u0026\u0026u\u003co)break;r[l]\u003dc,r[l+1]\u003du,l-\u003d2}r[l]\u003da,r[l+1]\u003do}}function i(t,e,r){e*\u003d2;var n\u003dr[t*\u003d2],i\u003dr[t+1];r[t]\u003dr[e],r[t+1]\u003dr[e+1],r[e]\u003dn,r[e+1]\u003di}function a(t,e,r){e*\u003d2,r[t*\u003d2]\u003dr[e],r[t+1]\u003dr[e+1]}function o(t,e,r,n){e*\u003d2,r*\u003d2;var i\u003dn[t*\u003d2],a\u003dn[t+1];n[t]\u003dn[e],n[t+1]\u003dn[e+1],n[e]\u003dn[r],n[e+1]\u003dn[r+1],n[r]\u003di,n[r+1]\u003da}function s(t,e,r,n,i){e*\u003d2,i[t*\u003d2]\u003di[e],i[e]\u003dr,i[t+1]\u003di[e+1],i[e+1]\u003dn}function l(t,e,r){e*\u003d2;var n\u003dr[t*\u003d2],i\u003dr[e];return!(n\u003ci)\u0026\u0026(n!\u003d\u003di||r[t+1]\u003er[e+1])}function c(t,e,r,n){var i\u003dn[t*\u003d2];return i\u003ce||i\u003d\u003d\u003de\u0026\u0026n[t+1]\u003cr}},{}],114:[function(t,e,r){\"use strict\";e.exports\u003d{init:function(t){var e\u003di.nextPow2(t);o.length\u003ce\u0026\u0026(n.free(o),o\u003dn.mallocInt32(e));s.length\u003ce\u0026\u0026(n.free(s),s\u003dn.mallocInt32(e));l.length\u003ce\u0026\u0026(n.free(l),l\u003dn.mallocInt32(e));c.length\u003ce\u0026\u0026(n.free(c),c\u003dn.mallocInt32(e));u.length\u003ce\u0026\u0026(n.free(u),u\u003dn.mallocInt32(e));f.length\u003ce\u0026\u0026(n.free(f),f\u003dn.mallocInt32(e));var r\u003d8*e;h.length\u003cr\u0026\u0026(n.free(h),h\u003dn.mallocDouble(r))},sweepBipartite:function(t,e,r,n,i,u,f,m,g,v){for(var y\u003d0,x\u003d2*t,b\u003dt-1,_\u003dx-1,w\u003dr;w\u003cn;++w){var T\u003du[w],k\u003dx*w;h[y++]\u003di[k+b],h[y++]\u003d-(T+1),h[y++]\u003di[k+_],h[y++]\u003dT}for(w\u003df;w\u003cm;++w){T\u003dv[w]+(1\u003c\u003c28);var M\u003dx*w;h[y++]\u003dg[M+b],h[y++]\u003d-T,h[y++]\u003dg[M+_],h[y++]\u003dT}var A\u003dy\u003e\u003e\u003e1;a(h,A);var S\u003d0,E\u003d0;for(w\u003d0;w\u003cA;++w){var L\u003d0|h[2*w+1];if(L\u003e\u003d1\u003c\u003c28)p(l,c,E--,L\u003dL-(1\u003c\u003c28)|0);else if(L\u003e\u003d0)p(o,s,S--,L);else if(L\u003c\u003d-(1\u003c\u003c28)){L\u003d-L-(1\u003c\u003c28)|0;for(var C\u003d0;C\u003cS;++C){if(void 0!\u003d\u003d(P\u003de(o[C],L)))return P}d(l,c,E++,L)}else{L\u003d-L-1|0;for(C\u003d0;C\u003cE;++C){var P;if(void 0!\u003d\u003d(P\u003de(L,l[C])))return P}d(o,s,S++,L)}}},sweepComplete:function(t,e,r,n,i,m,g,v,y,x){for(var b\u003d0,_\u003d2*t,w\u003dt-1,T\u003d_-1,k\u003dr;k\u003cn;++k){var M\u003dm[k]+1\u003c\u003c1,A\u003d_*k;h[b++]\u003di[A+w],h[b++]\u003d-M,h[b++]\u003di[A+T],h[b++]\u003dM}for(k\u003dg;k\u003cv;++k){M\u003dx[k]+1\u003c\u003c1;var S\u003d_*k;h[b++]\u003dy[S+w],h[b++]\u003d1|-M,h[b++]\u003dy[S+T],h[b++]\u003d1|M}var E\u003db\u003e\u003e\u003e1;a(h,E);var L\u003d0,C\u003d0,P\u003d0;for(k\u003d0;k\u003cE;++k){var I\u003d0|h[2*k+1],O\u003d1\u0026I;if(k\u003cE-1\u0026\u0026I\u003e\u003e1\u003d\u003dh[2*k+3]\u003e\u003e1\u0026\u0026(O\u003d2,k+\u003d1),I\u003c0){for(var z\u003d-(I\u003e\u003e1)-1,D\u003d0;D\u003cP;++D){if(void 0!\u003d\u003d(R\u003de(u[D],z)))return R}if(0!\u003d\u003dO)for(D\u003d0;D\u003cL;++D){if(void 0!\u003d\u003d(R\u003de(o[D],z)))return R}if(1!\u003d\u003dO)for(D\u003d0;D\u003cC;++D){var R;if(void 0!\u003d\u003d(R\u003de(l[D],z)))return R}0\u003d\u003d\u003dO?d(o,s,L++,z):1\u003d\u003d\u003dO?d(l,c,C++,z):2\u003d\u003d\u003dO\u0026\u0026d(u,f,P++,z)}else{z\u003d(I\u003e\u003e1)-1;0\u003d\u003d\u003dO?p(o,s,L--,z):1\u003d\u003d\u003dO?p(l,c,C--,z):2\u003d\u003d\u003dO\u0026\u0026p(u,f,P--,z)}}},scanBipartite:function(t,e,r,n,i,l,c,u,f,m,g,v){var y\u003d0,x\u003d2*t,b\u003de,_\u003de+t,w\u003d1,T\u003d1;n?T\u003d1\u003c\u003c28:w\u003d1\u003c\u003c28;for(var k\u003di;k\u003cl;++k){var M\u003dk+w,A\u003dx*k;h[y++]\u003dc[A+b],h[y++]\u003d-M,h[y++]\u003dc[A+_],h[y++]\u003dM}for(k\u003df;k\u003cm;++k){M\u003dk+T;var S\u003dx*k;h[y++]\u003dg[S+b],h[y++]\u003d-M}var E\u003dy\u003e\u003e\u003e1;a(h,E);var L\u003d0;for(k\u003d0;k\u003cE;++k){var C\u003d0|h[2*k+1];if(C\u003c0){var P\u003d!1;if((M\u003d-C)\u003e\u003d1\u003c\u003c28?(P\u003d!n,M-\u003d1\u003c\u003c28):(P\u003d!!n,M-\u003d1),P)d(o,s,L++,M);else{var I\u003dv[M],O\u003dx*M,z\u003dg[O+e+1],D\u003dg[O+e+1+t];t:for(var R\u003d0;R\u003cL;++R){var F\u003do[R],B\u003dx*F;if(!(D\u003cc[B+e+1]||c[B+e+1+t]\u003cz)){for(var N\u003de+2;N\u003ct;++N)if(g[O+N+t]\u003cc[B+N]||c[B+N+t]\u003cg[O+N])continue t;var j,U\u003du[F];if(void 0!\u003d\u003d(j\u003dn?r(I,U):r(U,I)))return j}}}}else p(o,s,L--,C-w)}},scanComplete:function(t,e,r,n,i,s,l,c,u,f,p){for(var d\u003d0,m\u003d2*t,g\u003de,v\u003de+t,y\u003dn;y\u003ci;++y){var x\u003dy+(1\u003c\u003c28),b\u003dm*y;h[d++]\u003ds[b+g],h[d++]\u003d-x,h[d++]\u003ds[b+v],h[d++]\u003dx}for(y\u003dc;y\u003cu;++y){x\u003dy+1;var _\u003dm*y;h[d++]\u003df[_+g],h[d++]\u003d-x}var w\u003dd\u003e\u003e\u003e1;a(h,w);var T\u003d0;for(y\u003d0;y\u003cw;++y){var k\u003d0|h[2*y+1];if(k\u003c0){if((x\u003d-k)\u003e\u003d1\u003c\u003c28)o[T++]\u003dx-(1\u003c\u003c28);else{var M\u003dp[x-\u003d1],A\u003dm*x,S\u003df[A+e+1],E\u003df[A+e+1+t];t:for(var L\u003d0;L\u003cT;++L){var C\u003do[L],P\u003dl[C];if(P\u003d\u003d\u003dM)break;var I\u003dm*C;if(!(E\u003cs[I+e+1]||s[I+e+1+t]\u003cS)){for(var O\u003de+2;O\u003ct;++O)if(f[A+O+t]\u003cs[I+O]||s[I+O+t]\u003cf[A+O])continue t;var z\u003dr(P,M);if(void 0!\u003d\u003dz)return z}}}}else{for(x\u003dk-(1\u003c\u003c28),L\u003dT-1;L\u003e\u003d0;--L)if(o[L]\u003d\u003d\u003dx){for(O\u003dL+1;O\u003cT;++O)o[O-1]\u003do[O];break}--T}}}};var n\u003dt(\"typedarray-pool\"),i\u003dt(\"bit-twiddle\"),a\u003dt(\"./sort\"),o\u003dn.mallocInt32(1024),s\u003dn.mallocInt32(1024),l\u003dn.mallocInt32(1024),c\u003dn.mallocInt32(1024),u\u003dn.mallocInt32(1024),f\u003dn.mallocInt32(1024),h\u003dn.mallocDouble(8192);function p(t,e,r,n){var i\u003de[n],a\u003dt[r-1];t[i]\u003da,e[a]\u003di}function d(t,e,r,n){t[r]\u003dn,e[n]\u003dr}},{\"./sort\":113,\"bit-twiddle\":104,\"typedarray-pool\":613}],115:[function(t,e,r){},{}],116:[function(t,e,r){\"use strict\";var n,i\u003d\"object\"\u003d\u003dtypeof Reflect?Reflect:null,a\u003di\u0026\u0026\"function\"\u003d\u003dtypeof i.apply?i.apply:function(t,e,r){return Function.prototype.apply.call(t,e,r)};n\u003di\u0026\u0026\"function\"\u003d\u003dtypeof i.ownKeys?i.ownKeys:Object.getOwnPropertySymbols?function(t){return Object.getOwnPropertyNames(t).concat(Object.getOwnPropertySymbols(t))}:function(t){return Object.getOwnPropertyNames(t)};var o\u003dNumber.isNaN||function(t){return t!\u003dt};function s(){s.init.call(this)}e.exports\u003ds,e.exports.once\u003dfunction(t,e){return new Promise((function(r,n){function i(){void 0!\u003d\u003da\u0026\u0026t.removeListener(\"error\",a),r([].slice.call(arguments))}var a;\"error\"!\u003d\u003de\u0026\u0026(a\u003dfunction(r){t.removeListener(e,i),n(r)},t.once(\"error\",a)),t.once(e,i)}))},s.EventEmitter\u003ds,s.prototype._events\u003dvoid 0,s.prototype._eventsCount\u003d0,s.prototype._maxListeners\u003dvoid 0;var l\u003d10;function c(t){if(\"function\"!\u003dtypeof t)throw new TypeError(\u0027The \"listener\" argument must be of type Function. Received type \u0027+typeof t)}function u(t){return void 0\u003d\u003d\u003dt._maxListeners?s.defaultMaxListeners:t._maxListeners}function f(t,e,r,n){var i,a,o,s;if(c(r),void 0\u003d\u003d\u003d(a\u003dt._events)?(a\u003dt._events\u003dObject.create(null),t._eventsCount\u003d0):(void 0!\u003d\u003da.newListener\u0026\u0026(t.emit(\"newListener\",e,r.listener?r.listener:r),a\u003dt._events),o\u003da[e]),void 0\u003d\u003d\u003do)o\u003da[e]\u003dr,++t._eventsCount;else if(\"function\"\u003d\u003dtypeof o?o\u003da[e]\u003dn?[r,o]:[o,r]:n?o.unshift(r):o.push(r),(i\u003du(t))\u003e0\u0026\u0026o.length\u003ei\u0026\u0026!o.warned){o.warned\u003d!0;var l\u003dnew Error(\"Possible EventEmitter memory leak detected. \"+o.length+\" \"+String(e)+\" listeners added. Use emitter.setMaxListeners() to increase limit\");l.name\u003d\"MaxListenersExceededWarning\",l.emitter\u003dt,l.type\u003de,l.count\u003do.length,s\u003dl,console\u0026\u0026console.warn\u0026\u0026console.warn(s)}return t}function h(){if(!this.fired)return this.target.removeListener(this.type,this.wrapFn),this.fired\u003d!0,0\u003d\u003d\u003darguments.length?this.listener.call(this.target):this.listener.apply(this.target,arguments)}function p(t,e,r){var n\u003d{fired:!1,wrapFn:void 0,target:t,type:e,listener:r},i\u003dh.bind(n);return i.listener\u003dr,n.wrapFn\u003di,i}function d(t,e,r){var n\u003dt._events;if(void 0\u003d\u003d\u003dn)return[];var i\u003dn[e];return void 0\u003d\u003d\u003di?[]:\"function\"\u003d\u003dtypeof i?r?[i.listener||i]:[i]:r?function(t){for(var e\u003dnew Array(t.length),r\u003d0;r\u003ce.length;++r)e[r]\u003dt[r].listener||t[r];return e}(i):g(i,i.length)}function m(t){var e\u003dthis._events;if(void 0!\u003d\u003de){var r\u003de[t];if(\"function\"\u003d\u003dtypeof r)return 1;if(void 0!\u003d\u003dr)return r.length}return 0}function g(t,e){for(var r\u003dnew Array(e),n\u003d0;n\u003ce;++n)r[n]\u003dt[n];return r}Object.defineProperty(s,\"defaultMaxListeners\",{enumerable:!0,get:function(){return l},set:function(t){if(\"number\"!\u003dtypeof t||t\u003c0||o(t))throw new RangeError(\u0027The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received \u0027+t+\".\");l\u003dt}}),s.init\u003dfunction(){void 0!\u003d\u003dthis._events\u0026\u0026this._events!\u003d\u003dObject.getPrototypeOf(this)._events||(this._events\u003dObject.create(null),this._eventsCount\u003d0),this._maxListeners\u003dthis._maxListeners||void 0},s.prototype.setMaxListeners\u003dfunction(t){if(\"number\"!\u003dtypeof t||t\u003c0||o(t))throw new RangeError(\u0027The value of \"n\" is out of range. It must be a non-negative number. Received \u0027+t+\".\");return this._maxListeners\u003dt,this},s.prototype.getMaxListeners\u003dfunction(){return u(this)},s.prototype.emit\u003dfunction(t){for(var e\u003d[],r\u003d1;r\u003carguments.length;r++)e.push(arguments[r]);var n\u003d\"error\"\u003d\u003d\u003dt,i\u003dthis._events;if(void 0!\u003d\u003di)n\u003dn\u0026\u0026void 0\u003d\u003d\u003di.error;else if(!n)return!1;if(n){var o;if(e.length\u003e0\u0026\u0026(o\u003de[0]),o instanceof Error)throw o;var s\u003dnew Error(\"Unhandled error.\"+(o?\" (\"+o.message+\")\":\"\"));throw s.context\u003do,s}var l\u003di[t];if(void 0\u003d\u003d\u003dl)return!1;if(\"function\"\u003d\u003dtypeof l)a(l,this,e);else{var c\u003dl.length,u\u003dg(l,c);for(r\u003d0;r\u003cc;++r)a(u[r],this,e)}return!0},s.prototype.addListener\u003dfunction(t,e){return f(this,t,e,!1)},s.prototype.on\u003ds.prototype.addListener,s.prototype.prependListener\u003dfunction(t,e){return f(this,t,e,!0)},s.prototype.once\u003dfunction(t,e){return c(e),this.on(t,p(this,t,e)),this},s.prototype.prependOnceListener\u003dfunction(t,e){return c(e),this.prependListener(t,p(this,t,e)),this},s.prototype.removeListener\u003dfunction(t,e){var r,n,i,a,o;if(c(e),void 0\u003d\u003d\u003d(n\u003dthis._events))return this;if(void 0\u003d\u003d\u003d(r\u003dn[t]))return this;if(r\u003d\u003d\u003de||r.listener\u003d\u003d\u003de)0\u003d\u003d--this._eventsCount?this._events\u003dObject.create(null):(delete n[t],n.removeListener\u0026\u0026this.emit(\"removeListener\",t,r.listener||e));else if(\"function\"!\u003dtypeof r){for(i\u003d-1,a\u003dr.length-1;a\u003e\u003d0;a--)if(r[a]\u003d\u003d\u003de||r[a].listener\u003d\u003d\u003de){o\u003dr[a].listener,i\u003da;break}if(i\u003c0)return this;0\u003d\u003d\u003di?r.shift():function(t,e){for(;e+1\u003ct.length;e++)t[e]\u003dt[e+1];t.pop()}(r,i),1\u003d\u003d\u003dr.length\u0026\u0026(n[t]\u003dr[0]),void 0!\u003d\u003dn.removeListener\u0026\u0026this.emit(\"removeListener\",t,o||e)}return this},s.prototype.off\u003ds.prototype.removeListener,s.prototype.removeAllListeners\u003dfunction(t){var e,r,n;if(void 0\u003d\u003d\u003d(r\u003dthis._events))return this;if(void 0\u003d\u003d\u003dr.removeListener)return 0\u003d\u003d\u003darguments.length?(this._events\u003dObject.create(null),this._eventsCount\u003d0):void 0!\u003d\u003dr[t]\u0026\u0026(0\u003d\u003d--this._eventsCount?this._events\u003dObject.create(null):delete r[t]),this;if(0\u003d\u003d\u003darguments.length){var i,a\u003dObject.keys(r);for(n\u003d0;n\u003ca.length;++n)\"removeListener\"!\u003d\u003d(i\u003da[n])\u0026\u0026this.removeAllListeners(i);return this.removeAllListeners(\"removeListener\"),this._events\u003dObject.create(null),this._eventsCount\u003d0,this}if(\"function\"\u003d\u003dtypeof(e\u003dr[t]))this.removeListener(t,e);else if(void 0!\u003d\u003de)for(n\u003de.length-1;n\u003e\u003d0;n--)this.removeListener(t,e[n]);return this},s.prototype.listeners\u003dfunction(t){return d(this,t,!0)},s.prototype.rawListeners\u003dfunction(t){return d(this,t,!1)},s.listenerCount\u003dfunction(t,e){return\"function\"\u003d\u003dtypeof t.listenerCount?t.listenerCount(e):m.call(t,e)},s.prototype.listenerCount\u003dm,s.prototype.eventNames\u003dfunction(){return this._eventsCount\u003e0?n(this._events):[]}},{}],117:[function(t,e,r){(function(e){(function(){\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh \u003chttps://feross.org\u003e\n * @license  MIT\n */\n\"use strict\";var e\u003dt(\"base64-js\"),n\u003dt(\"ieee754\");r.Buffer\u003da,r.SlowBuffer\u003dfunction(t){+t!\u003dt\u0026\u0026(t\u003d0);return a.alloc(+t)},r.INSPECT_MAX_BYTES\u003d50;function i(t){if(t\u003e2147483647)throw new RangeError(\u0027The value \"\u0027+t+\u0027\" is invalid for option \"size\"\u0027);var e\u003dnew Uint8Array(t);return e.__proto__\u003da.prototype,e}function a(t,e,r){if(\"number\"\u003d\u003dtypeof t){if(\"string\"\u003d\u003dtypeof e)throw new TypeError(\u0027The \"string\" argument must be of type string. Received type number\u0027);return l(t)}return o(t,e,r)}function o(t,e,r){if(\"string\"\u003d\u003dtypeof t)return function(t,e){\"string\"\u003d\u003dtypeof e\u0026\u0026\"\"!\u003d\u003de||(e\u003d\"utf8\");if(!a.isEncoding(e))throw new TypeError(\"Unknown encoding: \"+e);var r\u003d0|f(t,e),n\u003di(r),o\u003dn.write(t,e);o!\u003d\u003dr\u0026\u0026(n\u003dn.slice(0,o));return n}(t,e);if(ArrayBuffer.isView(t))return c(t);if(null\u003d\u003dt)throw TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t);if(B(t,ArrayBuffer)||t\u0026\u0026B(t.buffer,ArrayBuffer))return function(t,e,r){if(e\u003c0||t.byteLength\u003ce)throw new RangeError(\u0027\"offset\" is outside of buffer bounds\u0027);if(t.byteLength\u003ce+(r||0))throw new RangeError(\u0027\"length\" is outside of buffer bounds\u0027);var n;n\u003dvoid 0\u003d\u003d\u003de\u0026\u0026void 0\u003d\u003d\u003dr?new Uint8Array(t):void 0\u003d\u003d\u003dr?new Uint8Array(t,e):new Uint8Array(t,e,r);return n.__proto__\u003da.prototype,n}(t,e,r);if(\"number\"\u003d\u003dtypeof t)throw new TypeError(\u0027The \"value\" argument must not be of type number. Received type number\u0027);var n\u003dt.valueOf\u0026\u0026t.valueOf();if(null!\u003dn\u0026\u0026n!\u003d\u003dt)return a.from(n,e,r);var o\u003dfunction(t){if(a.isBuffer(t)){var e\u003d0|u(t.length),r\u003di(e);return 0\u003d\u003d\u003dr.length||t.copy(r,0,0,e),r}if(void 0!\u003d\u003dt.length)return\"number\"!\u003dtypeof t.length||N(t.length)?i(0):c(t);if(\"Buffer\"\u003d\u003d\u003dt.type\u0026\u0026Array.isArray(t.data))return c(t.data)}(t);if(o)return o;if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026null!\u003dSymbol.toPrimitive\u0026\u0026\"function\"\u003d\u003dtypeof t[Symbol.toPrimitive])return a.from(t[Symbol.toPrimitive](\"string\"),e,r);throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+typeof t)}function s(t){if(\"number\"!\u003dtypeof t)throw new TypeError(\u0027\"size\" argument must be of type number\u0027);if(t\u003c0)throw new RangeError(\u0027The value \"\u0027+t+\u0027\" is invalid for option \"size\"\u0027)}function l(t){return s(t),i(t\u003c0?0:0|u(t))}function c(t){for(var e\u003dt.length\u003c0?0:0|u(t.length),r\u003di(e),n\u003d0;n\u003ce;n+\u003d1)r[n]\u003d255\u0026t[n];return r}function u(t){if(t\u003e\u003d2147483647)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+2147483647..toString(16)+\" bytes\");return 0|t}function f(t,e){if(a.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||B(t,ArrayBuffer))return t.byteLength;if(\"string\"!\u003dtypeof t)throw new TypeError(\u0027The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type \u0027+typeof t);var r\u003dt.length,n\u003darguments.length\u003e2\u0026\u0026!0\u003d\u003d\u003darguments[2];if(!n\u0026\u00260\u003d\u003d\u003dr)return 0;for(var i\u003d!1;;)switch(e){case\"ascii\":case\"latin1\":case\"binary\":return r;case\"utf8\":case\"utf-8\":return D(t).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*r;case\"hex\":return r\u003e\u003e\u003e1;case\"base64\":return R(t).length;default:if(i)return n?-1:D(t).length;e\u003d(\"\"+e).toLowerCase(),i\u003d!0}}function h(t,e,r){var n\u003d!1;if((void 0\u003d\u003d\u003de||e\u003c0)\u0026\u0026(e\u003d0),e\u003ethis.length)return\"\";if((void 0\u003d\u003d\u003dr||r\u003ethis.length)\u0026\u0026(r\u003dthis.length),r\u003c\u003d0)return\"\";if((r\u003e\u003e\u003e\u003d0)\u003c\u003d(e\u003e\u003e\u003e\u003d0))return\"\";for(t||(t\u003d\"utf8\");;)switch(t){case\"hex\":return A(this,e,r);case\"utf8\":case\"utf-8\":return T(this,e,r);case\"ascii\":return k(this,e,r);case\"latin1\":case\"binary\":return M(this,e,r);case\"base64\":return w(this,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return S(this,e,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+t);t\u003d(t+\"\").toLowerCase(),n\u003d!0}}function p(t,e,r){var n\u003dt[e];t[e]\u003dt[r],t[r]\u003dn}function d(t,e,r,n,i){if(0\u003d\u003d\u003dt.length)return-1;if(\"string\"\u003d\u003dtypeof r?(n\u003dr,r\u003d0):r\u003e2147483647?r\u003d2147483647:r\u003c-2147483648\u0026\u0026(r\u003d-2147483648),N(r\u003d+r)\u0026\u0026(r\u003di?0:t.length-1),r\u003c0\u0026\u0026(r\u003dt.length+r),r\u003e\u003dt.length){if(i)return-1;r\u003dt.length-1}else if(r\u003c0){if(!i)return-1;r\u003d0}if(\"string\"\u003d\u003dtypeof e\u0026\u0026(e\u003da.from(e,n)),a.isBuffer(e))return 0\u003d\u003d\u003de.length?-1:m(t,e,r,n,i);if(\"number\"\u003d\u003dtypeof e)return e\u0026\u003d255,\"function\"\u003d\u003dtypeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):m(t,[e],r,n,i);throw new TypeError(\"val must be string, number or Buffer\")}function m(t,e,r,n,i){var a,o\u003d1,s\u003dt.length,l\u003de.length;if(void 0!\u003d\u003dn\u0026\u0026(\"ucs2\"\u003d\u003d\u003d(n\u003dString(n).toLowerCase())||\"ucs-2\"\u003d\u003d\u003dn||\"utf16le\"\u003d\u003d\u003dn||\"utf-16le\"\u003d\u003d\u003dn)){if(t.length\u003c2||e.length\u003c2)return-1;o\u003d2,s/\u003d2,l/\u003d2,r/\u003d2}function c(t,e){return 1\u003d\u003d\u003do?t[e]:t.readUInt16BE(e*o)}if(i){var u\u003d-1;for(a\u003dr;a\u003cs;a++)if(c(t,a)\u003d\u003d\u003dc(e,-1\u003d\u003d\u003du?0:a-u)){if(-1\u003d\u003d\u003du\u0026\u0026(u\u003da),a-u+1\u003d\u003d\u003dl)return u*o}else-1!\u003d\u003du\u0026\u0026(a-\u003da-u),u\u003d-1}else for(r+l\u003es\u0026\u0026(r\u003ds-l),a\u003dr;a\u003e\u003d0;a--){for(var f\u003d!0,h\u003d0;h\u003cl;h++)if(c(t,a+h)!\u003d\u003dc(e,h)){f\u003d!1;break}if(f)return a}return-1}function g(t,e,r,n){r\u003dNumber(r)||0;var i\u003dt.length-r;n?(n\u003dNumber(n))\u003ei\u0026\u0026(n\u003di):n\u003di;var a\u003de.length;n\u003ea/2\u0026\u0026(n\u003da/2);for(var o\u003d0;o\u003cn;++o){var s\u003dparseInt(e.substr(2*o,2),16);if(N(s))return o;t[r+o]\u003ds}return o}function v(t,e,r,n){return F(D(e,t.length-r),t,r,n)}function y(t,e,r,n){return F(function(t){for(var e\u003d[],r\u003d0;r\u003ct.length;++r)e.push(255\u0026t.charCodeAt(r));return e}(e),t,r,n)}function x(t,e,r,n){return y(t,e,r,n)}function b(t,e,r,n){return F(R(e),t,r,n)}function _(t,e,r,n){return F(function(t,e){for(var r,n,i,a\u003d[],o\u003d0;o\u003ct.length\u0026\u0026!((e-\u003d2)\u003c0);++o)r\u003dt.charCodeAt(o),n\u003dr\u003e\u003e8,i\u003dr%256,a.push(i),a.push(n);return a}(e,t.length-r),t,r,n)}function w(t,r,n){return 0\u003d\u003d\u003dr\u0026\u0026n\u003d\u003d\u003dt.length?e.fromByteArray(t):e.fromByteArray(t.slice(r,n))}function T(t,e,r){r\u003dMath.min(t.length,r);for(var n\u003d[],i\u003de;i\u003cr;){var a,o,s,l,c\u003dt[i],u\u003dnull,f\u003dc\u003e239?4:c\u003e223?3:c\u003e191?2:1;if(i+f\u003c\u003dr)switch(f){case 1:c\u003c128\u0026\u0026(u\u003dc);break;case 2:128\u003d\u003d(192\u0026(a\u003dt[i+1]))\u0026\u0026(l\u003d(31\u0026c)\u003c\u003c6|63\u0026a)\u003e127\u0026\u0026(u\u003dl);break;case 3:a\u003dt[i+1],o\u003dt[i+2],128\u003d\u003d(192\u0026a)\u0026\u0026128\u003d\u003d(192\u0026o)\u0026\u0026(l\u003d(15\u0026c)\u003c\u003c12|(63\u0026a)\u003c\u003c6|63\u0026o)\u003e2047\u0026\u0026(l\u003c55296||l\u003e57343)\u0026\u0026(u\u003dl);break;case 4:a\u003dt[i+1],o\u003dt[i+2],s\u003dt[i+3],128\u003d\u003d(192\u0026a)\u0026\u0026128\u003d\u003d(192\u0026o)\u0026\u0026128\u003d\u003d(192\u0026s)\u0026\u0026(l\u003d(15\u0026c)\u003c\u003c18|(63\u0026a)\u003c\u003c12|(63\u0026o)\u003c\u003c6|63\u0026s)\u003e65535\u0026\u0026l\u003c1114112\u0026\u0026(u\u003dl)}null\u003d\u003d\u003du?(u\u003d65533,f\u003d1):u\u003e65535\u0026\u0026(u-\u003d65536,n.push(u\u003e\u003e\u003e10\u00261023|55296),u\u003d56320|1023\u0026u),n.push(u),i+\u003df}return function(t){var e\u003dt.length;if(e\u003c\u003d4096)return String.fromCharCode.apply(String,t);var r\u003d\"\",n\u003d0;for(;n\u003ce;)r+\u003dString.fromCharCode.apply(String,t.slice(n,n+\u003d4096));return r}(n)}r.kMaxLength\u003d2147483647,a.TYPED_ARRAY_SUPPORT\u003dfunction(){try{var t\u003dnew Uint8Array(1);return t.__proto__\u003d{__proto__:Uint8Array.prototype,foo:function(){return 42}},42\u003d\u003d\u003dt.foo()}catch(t){return!1}}(),a.TYPED_ARRAY_SUPPORT||\"undefined\"\u003d\u003dtypeof console||\"function\"!\u003dtypeof console.error||console.error(\"This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support.\"),Object.defineProperty(a.prototype,\"parent\",{enumerable:!0,get:function(){if(a.isBuffer(this))return this.buffer}}),Object.defineProperty(a.prototype,\"offset\",{enumerable:!0,get:function(){if(a.isBuffer(this))return this.byteOffset}}),\"undefined\"!\u003dtypeof Symbol\u0026\u0026null!\u003dSymbol.species\u0026\u0026a[Symbol.species]\u003d\u003d\u003da\u0026\u0026Object.defineProperty(a,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),a.poolSize\u003d8192,a.from\u003dfunction(t,e,r){return o(t,e,r)},a.prototype.__proto__\u003dUint8Array.prototype,a.__proto__\u003dUint8Array,a.alloc\u003dfunction(t,e,r){return function(t,e,r){return s(t),t\u003c\u003d0?i(t):void 0!\u003d\u003de?\"string\"\u003d\u003dtypeof r?i(t).fill(e,r):i(t).fill(e):i(t)}(t,e,r)},a.allocUnsafe\u003dfunction(t){return l(t)},a.allocUnsafeSlow\u003dfunction(t){return l(t)},a.isBuffer\u003dfunction(t){return null!\u003dt\u0026\u0026!0\u003d\u003d\u003dt._isBuffer\u0026\u0026t!\u003d\u003da.prototype},a.compare\u003dfunction(t,e){if(B(t,Uint8Array)\u0026\u0026(t\u003da.from(t,t.offset,t.byteLength)),B(e,Uint8Array)\u0026\u0026(e\u003da.from(e,e.offset,e.byteLength)),!a.isBuffer(t)||!a.isBuffer(e))throw new TypeError(\u0027The \"buf1\", \"buf2\" arguments must be one of type Buffer or Uint8Array\u0027);if(t\u003d\u003d\u003de)return 0;for(var r\u003dt.length,n\u003de.length,i\u003d0,o\u003dMath.min(r,n);i\u003co;++i)if(t[i]!\u003d\u003de[i]){r\u003dt[i],n\u003de[i];break}return r\u003cn?-1:n\u003cr?1:0},a.isEncoding\u003dfunction(t){switch(String(t).toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"latin1\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return!0;default:return!1}},a.concat\u003dfunction(t,e){if(!Array.isArray(t))throw new TypeError(\u0027\"list\" argument must be an Array of Buffers\u0027);if(0\u003d\u003d\u003dt.length)return a.alloc(0);var r;if(void 0\u003d\u003d\u003de)for(e\u003d0,r\u003d0;r\u003ct.length;++r)e+\u003dt[r].length;var n\u003da.allocUnsafe(e),i\u003d0;for(r\u003d0;r\u003ct.length;++r){var o\u003dt[r];if(B(o,Uint8Array)\u0026\u0026(o\u003da.from(o)),!a.isBuffer(o))throw new TypeError(\u0027\"list\" argument must be an Array of Buffers\u0027);o.copy(n,i),i+\u003do.length}return n},a.byteLength\u003df,a.prototype._isBuffer\u003d!0,a.prototype.swap16\u003dfunction(){var t\u003dthis.length;if(t%2!\u003d0)throw new RangeError(\"Buffer size must be a multiple of 16-bits\");for(var e\u003d0;e\u003ct;e+\u003d2)p(this,e,e+1);return this},a.prototype.swap32\u003dfunction(){var t\u003dthis.length;if(t%4!\u003d0)throw new RangeError(\"Buffer size must be a multiple of 32-bits\");for(var e\u003d0;e\u003ct;e+\u003d4)p(this,e,e+3),p(this,e+1,e+2);return this},a.prototype.swap64\u003dfunction(){var t\u003dthis.length;if(t%8!\u003d0)throw new RangeError(\"Buffer size must be a multiple of 64-bits\");for(var e\u003d0;e\u003ct;e+\u003d8)p(this,e,e+7),p(this,e+1,e+6),p(this,e+2,e+5),p(this,e+3,e+4);return this},a.prototype.toString\u003dfunction(){var t\u003dthis.length;return 0\u003d\u003d\u003dt?\"\":0\u003d\u003d\u003darguments.length?T(this,0,t):h.apply(this,arguments)},a.prototype.toLocaleString\u003da.prototype.toString,a.prototype.equals\u003dfunction(t){if(!a.isBuffer(t))throw new TypeError(\"Argument must be a Buffer\");return this\u003d\u003d\u003dt||0\u003d\u003d\u003da.compare(this,t)},a.prototype.inspect\u003dfunction(){var t\u003d\"\",e\u003dr.INSPECT_MAX_BYTES;return t\u003dthis.toString(\"hex\",0,e).replace(/(.{2})/g,\"$1 \").trim(),this.length\u003ee\u0026\u0026(t+\u003d\" ... \"),\"\u003cBuffer \"+t+\"\u003e\"},a.prototype.compare\u003dfunction(t,e,r,n,i){if(B(t,Uint8Array)\u0026\u0026(t\u003da.from(t,t.offset,t.byteLength)),!a.isBuffer(t))throw new TypeError(\u0027The \"target\" argument must be one of type Buffer or Uint8Array. Received type \u0027+typeof t);if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d0),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003dt?t.length:0),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d0),void 0\u003d\u003d\u003di\u0026\u0026(i\u003dthis.length),e\u003c0||r\u003et.length||n\u003c0||i\u003ethis.length)throw new RangeError(\"out of range index\");if(n\u003e\u003di\u0026\u0026e\u003e\u003dr)return 0;if(n\u003e\u003di)return-1;if(e\u003e\u003dr)return 1;if(this\u003d\u003d\u003dt)return 0;for(var o\u003d(i\u003e\u003e\u003e\u003d0)-(n\u003e\u003e\u003e\u003d0),s\u003d(r\u003e\u003e\u003e\u003d0)-(e\u003e\u003e\u003e\u003d0),l\u003dMath.min(o,s),c\u003dthis.slice(n,i),u\u003dt.slice(e,r),f\u003d0;f\u003cl;++f)if(c[f]!\u003d\u003du[f]){o\u003dc[f],s\u003du[f];break}return o\u003cs?-1:s\u003co?1:0},a.prototype.includes\u003dfunction(t,e,r){return-1!\u003d\u003dthis.indexOf(t,e,r)},a.prototype.indexOf\u003dfunction(t,e,r){return d(this,t,e,r,!0)},a.prototype.lastIndexOf\u003dfunction(t,e,r){return d(this,t,e,r,!1)},a.prototype.write\u003dfunction(t,e,r,n){if(void 0\u003d\u003d\u003de)n\u003d\"utf8\",r\u003dthis.length,e\u003d0;else if(void 0\u003d\u003d\u003dr\u0026\u0026\"string\"\u003d\u003dtypeof e)n\u003de,r\u003dthis.length,e\u003d0;else{if(!isFinite(e))throw new Error(\"Buffer.write(string, encoding, offset[, length]) is no longer supported\");e\u003e\u003e\u003e\u003d0,isFinite(r)?(r\u003e\u003e\u003e\u003d0,void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d\"utf8\")):(n\u003dr,r\u003dvoid 0)}var i\u003dthis.length-e;if((void 0\u003d\u003d\u003dr||r\u003ei)\u0026\u0026(r\u003di),t.length\u003e0\u0026\u0026(r\u003c0||e\u003c0)||e\u003ethis.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n\u003d\"utf8\");for(var a\u003d!1;;)switch(n){case\"hex\":return g(this,t,e,r);case\"utf8\":case\"utf-8\":return v(this,t,e,r);case\"ascii\":return y(this,t,e,r);case\"latin1\":case\"binary\":return x(this,t,e,r);case\"base64\":return b(this,t,e,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return _(this,t,e,r);default:if(a)throw new TypeError(\"Unknown encoding: \"+n);n\u003d(\"\"+n).toLowerCase(),a\u003d!0}},a.prototype.toJSON\u003dfunction(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function k(t,e,r){var n\u003d\"\";r\u003dMath.min(t.length,r);for(var i\u003de;i\u003cr;++i)n+\u003dString.fromCharCode(127\u0026t[i]);return n}function M(t,e,r){var n\u003d\"\";r\u003dMath.min(t.length,r);for(var i\u003de;i\u003cr;++i)n+\u003dString.fromCharCode(t[i]);return n}function A(t,e,r){var n\u003dt.length;(!e||e\u003c0)\u0026\u0026(e\u003d0),(!r||r\u003c0||r\u003en)\u0026\u0026(r\u003dn);for(var i\u003d\"\",a\u003de;a\u003cr;++a)i+\u003dz(t[a]);return i}function S(t,e,r){for(var n\u003dt.slice(e,r),i\u003d\"\",a\u003d0;a\u003cn.length;a+\u003d2)i+\u003dString.fromCharCode(n[a]+256*n[a+1]);return i}function E(t,e,r){if(t%1!\u003d0||t\u003c0)throw new RangeError(\"offset is not uint\");if(t+e\u003er)throw new RangeError(\"Trying to access beyond buffer length\")}function L(t,e,r,n,i,o){if(!a.isBuffer(t))throw new TypeError(\u0027\"buffer\" argument must be a Buffer instance\u0027);if(e\u003ei||e\u003co)throw new RangeError(\u0027\"value\" argument is out of bounds\u0027);if(r+n\u003et.length)throw new RangeError(\"Index out of range\")}function C(t,e,r,n,i,a){if(r+n\u003et.length)throw new RangeError(\"Index out of range\");if(r\u003c0)throw new RangeError(\"Index out of range\")}function P(t,e,r,i,a){return e\u003d+e,r\u003e\u003e\u003e\u003d0,a||C(t,0,r,4),n.write(t,e,r,i,23,4),r+4}function I(t,e,r,i,a){return e\u003d+e,r\u003e\u003e\u003e\u003d0,a||C(t,0,r,8),n.write(t,e,r,i,52,8),r+8}a.prototype.slice\u003dfunction(t,e){var r\u003dthis.length;(t\u003d~~t)\u003c0?(t+\u003dr)\u003c0\u0026\u0026(t\u003d0):t\u003er\u0026\u0026(t\u003dr),(e\u003dvoid 0\u003d\u003d\u003de?r:~~e)\u003c0?(e+\u003dr)\u003c0\u0026\u0026(e\u003d0):e\u003er\u0026\u0026(e\u003dr),e\u003ct\u0026\u0026(e\u003dt);var n\u003dthis.subarray(t,e);return n.__proto__\u003da.prototype,n},a.prototype.readUIntLE\u003dfunction(t,e,r){t\u003e\u003e\u003e\u003d0,e\u003e\u003e\u003e\u003d0,r||E(t,e,this.length);for(var n\u003dthis[t],i\u003d1,a\u003d0;++a\u003ce\u0026\u0026(i*\u003d256);)n+\u003dthis[t+a]*i;return n},a.prototype.readUIntBE\u003dfunction(t,e,r){t\u003e\u003e\u003e\u003d0,e\u003e\u003e\u003e\u003d0,r||E(t,e,this.length);for(var n\u003dthis[t+--e],i\u003d1;e\u003e0\u0026\u0026(i*\u003d256);)n+\u003dthis[t+--e]*i;return n},a.prototype.readUInt8\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,1,this.length),this[t]},a.prototype.readUInt16LE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,2,this.length),this[t]|this[t+1]\u003c\u003c8},a.prototype.readUInt16BE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,2,this.length),this[t]\u003c\u003c8|this[t+1]},a.prototype.readUInt32LE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,4,this.length),(this[t]|this[t+1]\u003c\u003c8|this[t+2]\u003c\u003c16)+16777216*this[t+3]},a.prototype.readUInt32BE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,4,this.length),16777216*this[t]+(this[t+1]\u003c\u003c16|this[t+2]\u003c\u003c8|this[t+3])},a.prototype.readIntLE\u003dfunction(t,e,r){t\u003e\u003e\u003e\u003d0,e\u003e\u003e\u003e\u003d0,r||E(t,e,this.length);for(var n\u003dthis[t],i\u003d1,a\u003d0;++a\u003ce\u0026\u0026(i*\u003d256);)n+\u003dthis[t+a]*i;return n\u003e\u003d(i*\u003d128)\u0026\u0026(n-\u003dMath.pow(2,8*e)),n},a.prototype.readIntBE\u003dfunction(t,e,r){t\u003e\u003e\u003e\u003d0,e\u003e\u003e\u003e\u003d0,r||E(t,e,this.length);for(var n\u003de,i\u003d1,a\u003dthis[t+--n];n\u003e0\u0026\u0026(i*\u003d256);)a+\u003dthis[t+--n]*i;return a\u003e\u003d(i*\u003d128)\u0026\u0026(a-\u003dMath.pow(2,8*e)),a},a.prototype.readInt8\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,1,this.length),128\u0026this[t]?-1*(255-this[t]+1):this[t]},a.prototype.readInt16LE\u003dfunction(t,e){t\u003e\u003e\u003e\u003d0,e||E(t,2,this.length);var r\u003dthis[t]|this[t+1]\u003c\u003c8;return 32768\u0026r?4294901760|r:r},a.prototype.readInt16BE\u003dfunction(t,e){t\u003e\u003e\u003e\u003d0,e||E(t,2,this.length);var r\u003dthis[t+1]|this[t]\u003c\u003c8;return 32768\u0026r?4294901760|r:r},a.prototype.readInt32LE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,4,this.length),this[t]|this[t+1]\u003c\u003c8|this[t+2]\u003c\u003c16|this[t+3]\u003c\u003c24},a.prototype.readInt32BE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,4,this.length),this[t]\u003c\u003c24|this[t+1]\u003c\u003c16|this[t+2]\u003c\u003c8|this[t+3]},a.prototype.readFloatLE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,4,this.length),n.read(this,t,!0,23,4)},a.prototype.readFloatBE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,4,this.length),n.read(this,t,!1,23,4)},a.prototype.readDoubleLE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,8,this.length),n.read(this,t,!0,52,8)},a.prototype.readDoubleBE\u003dfunction(t,e){return t\u003e\u003e\u003e\u003d0,e||E(t,8,this.length),n.read(this,t,!1,52,8)},a.prototype.writeUIntLE\u003dfunction(t,e,r,n){(t\u003d+t,e\u003e\u003e\u003e\u003d0,r\u003e\u003e\u003e\u003d0,n)||L(this,t,e,r,Math.pow(2,8*r)-1,0);var i\u003d1,a\u003d0;for(this[e]\u003d255\u0026t;++a\u003cr\u0026\u0026(i*\u003d256);)this[e+a]\u003dt/i\u0026255;return e+r},a.prototype.writeUIntBE\u003dfunction(t,e,r,n){(t\u003d+t,e\u003e\u003e\u003e\u003d0,r\u003e\u003e\u003e\u003d0,n)||L(this,t,e,r,Math.pow(2,8*r)-1,0);var i\u003dr-1,a\u003d1;for(this[e+i]\u003d255\u0026t;--i\u003e\u003d0\u0026\u0026(a*\u003d256);)this[e+i]\u003dt/a\u0026255;return e+r},a.prototype.writeUInt8\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,1,255,0),this[e]\u003d255\u0026t,e+1},a.prototype.writeUInt16LE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,2,65535,0),this[e]\u003d255\u0026t,this[e+1]\u003dt\u003e\u003e\u003e8,e+2},a.prototype.writeUInt16BE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,2,65535,0),this[e]\u003dt\u003e\u003e\u003e8,this[e+1]\u003d255\u0026t,e+2},a.prototype.writeUInt32LE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,4,4294967295,0),this[e+3]\u003dt\u003e\u003e\u003e24,this[e+2]\u003dt\u003e\u003e\u003e16,this[e+1]\u003dt\u003e\u003e\u003e8,this[e]\u003d255\u0026t,e+4},a.prototype.writeUInt32BE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,4,4294967295,0),this[e]\u003dt\u003e\u003e\u003e24,this[e+1]\u003dt\u003e\u003e\u003e16,this[e+2]\u003dt\u003e\u003e\u003e8,this[e+3]\u003d255\u0026t,e+4},a.prototype.writeIntLE\u003dfunction(t,e,r,n){if(t\u003d+t,e\u003e\u003e\u003e\u003d0,!n){var i\u003dMath.pow(2,8*r-1);L(this,t,e,r,i-1,-i)}var a\u003d0,o\u003d1,s\u003d0;for(this[e]\u003d255\u0026t;++a\u003cr\u0026\u0026(o*\u003d256);)t\u003c0\u0026\u00260\u003d\u003d\u003ds\u0026\u00260!\u003d\u003dthis[e+a-1]\u0026\u0026(s\u003d1),this[e+a]\u003d(t/o\u003e\u003e0)-s\u0026255;return e+r},a.prototype.writeIntBE\u003dfunction(t,e,r,n){if(t\u003d+t,e\u003e\u003e\u003e\u003d0,!n){var i\u003dMath.pow(2,8*r-1);L(this,t,e,r,i-1,-i)}var a\u003dr-1,o\u003d1,s\u003d0;for(this[e+a]\u003d255\u0026t;--a\u003e\u003d0\u0026\u0026(o*\u003d256);)t\u003c0\u0026\u00260\u003d\u003d\u003ds\u0026\u00260!\u003d\u003dthis[e+a+1]\u0026\u0026(s\u003d1),this[e+a]\u003d(t/o\u003e\u003e0)-s\u0026255;return e+r},a.prototype.writeInt8\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,1,127,-128),t\u003c0\u0026\u0026(t\u003d255+t+1),this[e]\u003d255\u0026t,e+1},a.prototype.writeInt16LE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,2,32767,-32768),this[e]\u003d255\u0026t,this[e+1]\u003dt\u003e\u003e\u003e8,e+2},a.prototype.writeInt16BE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,2,32767,-32768),this[e]\u003dt\u003e\u003e\u003e8,this[e+1]\u003d255\u0026t,e+2},a.prototype.writeInt32LE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,4,2147483647,-2147483648),this[e]\u003d255\u0026t,this[e+1]\u003dt\u003e\u003e\u003e8,this[e+2]\u003dt\u003e\u003e\u003e16,this[e+3]\u003dt\u003e\u003e\u003e24,e+4},a.prototype.writeInt32BE\u003dfunction(t,e,r){return t\u003d+t,e\u003e\u003e\u003e\u003d0,r||L(this,t,e,4,2147483647,-2147483648),t\u003c0\u0026\u0026(t\u003d4294967295+t+1),this[e]\u003dt\u003e\u003e\u003e24,this[e+1]\u003dt\u003e\u003e\u003e16,this[e+2]\u003dt\u003e\u003e\u003e8,this[e+3]\u003d255\u0026t,e+4},a.prototype.writeFloatLE\u003dfunction(t,e,r){return P(this,t,e,!0,r)},a.prototype.writeFloatBE\u003dfunction(t,e,r){return P(this,t,e,!1,r)},a.prototype.writeDoubleLE\u003dfunction(t,e,r){return I(this,t,e,!0,r)},a.prototype.writeDoubleBE\u003dfunction(t,e,r){return I(this,t,e,!1,r)},a.prototype.copy\u003dfunction(t,e,r,n){if(!a.isBuffer(t))throw new TypeError(\"argument should be a Buffer\");if(r||(r\u003d0),n||0\u003d\u003d\u003dn||(n\u003dthis.length),e\u003e\u003dt.length\u0026\u0026(e\u003dt.length),e||(e\u003d0),n\u003e0\u0026\u0026n\u003cr\u0026\u0026(n\u003dr),n\u003d\u003d\u003dr)return 0;if(0\u003d\u003d\u003dt.length||0\u003d\u003d\u003dthis.length)return 0;if(e\u003c0)throw new RangeError(\"targetStart out of bounds\");if(r\u003c0||r\u003e\u003dthis.length)throw new RangeError(\"Index out of range\");if(n\u003c0)throw new RangeError(\"sourceEnd out of bounds\");n\u003ethis.length\u0026\u0026(n\u003dthis.length),t.length-e\u003cn-r\u0026\u0026(n\u003dt.length-e+r);var i\u003dn-r;if(this\u003d\u003d\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof Uint8Array.prototype.copyWithin)this.copyWithin(e,r,n);else if(this\u003d\u003d\u003dt\u0026\u0026r\u003ce\u0026\u0026e\u003cn)for(var o\u003di-1;o\u003e\u003d0;--o)t[o+e]\u003dthis[o+r];else Uint8Array.prototype.set.call(t,this.subarray(r,n),e);return i},a.prototype.fill\u003dfunction(t,e,r,n){if(\"string\"\u003d\u003dtypeof t){if(\"string\"\u003d\u003dtypeof e?(n\u003de,e\u003d0,r\u003dthis.length):\"string\"\u003d\u003dtypeof r\u0026\u0026(n\u003dr,r\u003dthis.length),void 0!\u003d\u003dn\u0026\u0026\"string\"!\u003dtypeof n)throw new TypeError(\"encoding must be a string\");if(\"string\"\u003d\u003dtypeof n\u0026\u0026!a.isEncoding(n))throw new TypeError(\"Unknown encoding: \"+n);if(1\u003d\u003d\u003dt.length){var i\u003dt.charCodeAt(0);(\"utf8\"\u003d\u003d\u003dn\u0026\u0026i\u003c128||\"latin1\"\u003d\u003d\u003dn)\u0026\u0026(t\u003di)}}else\"number\"\u003d\u003dtypeof t\u0026\u0026(t\u0026\u003d255);if(e\u003c0||this.length\u003ce||this.length\u003cr)throw new RangeError(\"Out of range index\");if(r\u003c\u003de)return this;var o;if(e\u003e\u003e\u003e\u003d0,r\u003dvoid 0\u003d\u003d\u003dr?this.length:r\u003e\u003e\u003e0,t||(t\u003d0),\"number\"\u003d\u003dtypeof t)for(o\u003de;o\u003cr;++o)this[o]\u003dt;else{var s\u003da.isBuffer(t)?t:a.from(t,n),l\u003ds.length;if(0\u003d\u003d\u003dl)throw new TypeError(\u0027The value \"\u0027+t+\u0027\" is invalid for argument \"value\"\u0027);for(o\u003d0;o\u003cr-e;++o)this[o+e]\u003ds[o%l]}return this};var O\u003d/[^+/0-9A-Za-z-_]/g;function z(t){return t\u003c16?\"0\"+t.toString(16):t.toString(16)}function D(t,e){var r;e\u003de||1/0;for(var n\u003dt.length,i\u003dnull,a\u003d[],o\u003d0;o\u003cn;++o){if((r\u003dt.charCodeAt(o))\u003e55295\u0026\u0026r\u003c57344){if(!i){if(r\u003e56319){(e-\u003d3)\u003e-1\u0026\u0026a.push(239,191,189);continue}if(o+1\u003d\u003d\u003dn){(e-\u003d3)\u003e-1\u0026\u0026a.push(239,191,189);continue}i\u003dr;continue}if(r\u003c56320){(e-\u003d3)\u003e-1\u0026\u0026a.push(239,191,189),i\u003dr;continue}r\u003d65536+(i-55296\u003c\u003c10|r-56320)}else i\u0026\u0026(e-\u003d3)\u003e-1\u0026\u0026a.push(239,191,189);if(i\u003dnull,r\u003c128){if((e-\u003d1)\u003c0)break;a.push(r)}else if(r\u003c2048){if((e-\u003d2)\u003c0)break;a.push(r\u003e\u003e6|192,63\u0026r|128)}else if(r\u003c65536){if((e-\u003d3)\u003c0)break;a.push(r\u003e\u003e12|224,r\u003e\u003e6\u002663|128,63\u0026r|128)}else{if(!(r\u003c1114112))throw new Error(\"Invalid code point\");if((e-\u003d4)\u003c0)break;a.push(r\u003e\u003e18|240,r\u003e\u003e12\u002663|128,r\u003e\u003e6\u002663|128,63\u0026r|128)}}return a}function R(t){return e.toByteArray(function(t){if((t\u003d(t\u003dt.split(\"\u003d\")[0]).trim().replace(O,\"\")).length\u003c2)return\"\";for(;t.length%4!\u003d0;)t+\u003d\"\u003d\";return t}(t))}function F(t,e,r,n){for(var i\u003d0;i\u003cn\u0026\u0026!(i+r\u003e\u003de.length||i\u003e\u003dt.length);++i)e[i+r]\u003dt[i];return i}function B(t,e){return t instanceof e||null!\u003dt\u0026\u0026null!\u003dt.constructor\u0026\u0026null!\u003dt.constructor.name\u0026\u0026t.constructor.name\u003d\u003d\u003de.name}function N(t){return t!\u003dt}}).call(this)}).call(this,t(\"buffer\").Buffer)},{\"base64-js\":86,buffer:117,ieee754:441}],118:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/monotone\"),i\u003dt(\"./lib/triangulation\"),a\u003dt(\"./lib/delaunay\"),o\u003dt(\"./lib/filter\");function s(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function l(t,e){return t[0]-e[0]||t[1]-e[1]}function c(t,e,r){return e in t?t[e]:r}e.exports\u003dfunction(t,e,r){Array.isArray(e)?(r\u003dr||{},e\u003de||[]):(r\u003de||{},e\u003d[]);var u\u003d!!c(r,\"delaunay\",!0),f\u003d!!c(r,\"interior\",!0),h\u003d!!c(r,\"exterior\",!0),p\u003d!!c(r,\"infinity\",!1);if(!f\u0026\u0026!h||0\u003d\u003d\u003dt.length)return[];var d\u003dn(t,e);if(u||f!\u003d\u003dh||p){for(var m\u003di(t.length,function(t){return t.map(s).sort(l)}(e)),g\u003d0;g\u003cd.length;++g){var v\u003dd[g];m.addTriangle(v[0],v[1],v[2])}return u\u0026\u0026a(t,m),h?f?p?o(m,0,p):m.cells():o(m,1,p):o(m,-1)}return d}},{\"./lib/delaunay\":119,\"./lib/filter\":120,\"./lib/monotone\":121,\"./lib/triangulation\":122}],119:[function(t,e,r){\"use strict\";var n\u003dt(\"robust-in-sphere\")[4];t(\"binary-search-bounds\");function i(t,e,r,i,a,o){var s\u003de.opposite(i,a);if(!(s\u003c0)){if(a\u003ci){var l\u003di;i\u003da,a\u003dl,l\u003do,o\u003ds,s\u003dl}e.isConstraint(i,a)||n(t[i],t[a],t[o],t[s])\u003c0\u0026\u0026r.push(i,a)}}e.exports\u003dfunction(t,e){for(var r\u003d[],a\u003dt.length,o\u003de.stars,s\u003d0;s\u003ca;++s)for(var l\u003do[s],c\u003d1;c\u003cl.length;c+\u003d2){if(!((p\u003dl[c])\u003cs)\u0026\u0026!e.isConstraint(s,p)){for(var u\u003dl[c-1],f\u003d-1,h\u003d1;h\u003cl.length;h+\u003d2)if(l[h-1]\u003d\u003d\u003dp){f\u003dl[h];break}f\u003c0||n(t[s],t[p],t[u],t[f])\u003c0\u0026\u0026r.push(s,p)}}for(;r.length\u003e0;){for(var p\u003dr.pop(),d\u003d(s\u003dr.pop(),u\u003d-1,f\u003d-1,l\u003do[s],1);d\u003cl.length;d+\u003d2){var m\u003dl[d-1],g\u003dl[d];m\u003d\u003d\u003dp?f\u003dg:g\u003d\u003d\u003dp\u0026\u0026(u\u003dm)}u\u003c0||f\u003c0||(n(t[s],t[p],t[u],t[f])\u003e\u003d0||(e.flip(s,p),i(t,e,r,u,s,f),i(t,e,r,s,f,u),i(t,e,r,f,p,u),i(t,e,r,p,u,f)))}}},{\"binary-search-bounds\":103,\"robust-in-sphere\":542}],120:[function(t,e,r){\"use strict\";var n,i\u003dt(\"binary-search-bounds\");function a(t,e,r,n,i,a,o){this.cells\u003dt,this.neighbor\u003de,this.flags\u003dn,this.constraint\u003dr,this.active\u003di,this.next\u003da,this.boundary\u003do}function o(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}e.exports\u003dfunction(t,e,r){var n\u003dfunction(t,e){for(var r\u003dt.cells(),n\u003dr.length,i\u003d0;i\u003cn;++i){var s\u003d(v\u003dr[i])[0],l\u003dv[1],c\u003dv[2];l\u003cc?l\u003cs\u0026\u0026(v[0]\u003dl,v[1]\u003dc,v[2]\u003ds):c\u003cs\u0026\u0026(v[0]\u003dc,v[1]\u003ds,v[2]\u003dl)}r.sort(o);var u\u003dnew Array(n);for(i\u003d0;i\u003cu.length;++i)u[i]\u003d0;var f\u003d[],h\u003d[],p\u003dnew Array(3*n),d\u003dnew Array(3*n),m\u003dnull;e\u0026\u0026(m\u003d[]);var g\u003dnew a(r,p,d,u,f,h,m);for(i\u003d0;i\u003cn;++i)for(var v\u003dr[i],y\u003d0;y\u003c3;++y){s\u003dv[y],l\u003dv[(y+1)%3];var x\u003dp[3*i+y]\u003dg.locate(l,s,t.opposite(l,s)),b\u003dd[3*i+y]\u003dt.isConstraint(s,l);x\u003c0\u0026\u0026(b?h.push(i):(f.push(i),u[i]\u003d1),e\u0026\u0026m.push([l,s,-1]))}return g}(t,r);if(0\u003d\u003d\u003de)return r?n.cells.concat(n.boundary):n.cells;var i\u003d1,s\u003dn.active,l\u003dn.next,c\u003dn.flags,u\u003dn.cells,f\u003dn.constraint,h\u003dn.neighbor;for(;s.length\u003e0||l.length\u003e0;){for(;s.length\u003e0;){var p\u003ds.pop();if(c[p]!\u003d\u003d-i){c[p]\u003di;u[p];for(var d\u003d0;d\u003c3;++d){var m\u003dh[3*p+d];m\u003e\u003d0\u0026\u00260\u003d\u003d\u003dc[m]\u0026\u0026(f[3*p+d]?l.push(m):(s.push(m),c[m]\u003di))}}}var g\u003dl;l\u003ds,s\u003dg,l.length\u003d0,i\u003d-i}var v\u003dfunction(t,e,r){for(var n\u003d0,i\u003d0;i\u003ct.length;++i)e[i]\u003d\u003d\u003dr\u0026\u0026(t[n++]\u003dt[i]);return t.length\u003dn,t}(u,c,e);if(r)return v.concat(n.boundary);return v},a.prototype.locate\u003d(n\u003d[0,0,0],function(t,e,r){var a\u003dt,s\u003de,l\u003dr;return e\u003cr?e\u003ct\u0026\u0026(a\u003de,s\u003dr,l\u003dt):r\u003ct\u0026\u0026(a\u003dr,s\u003dt,l\u003de),a\u003c0?-1:(n[0]\u003da,n[1]\u003ds,n[2]\u003dl,i.eq(this.cells,n,o))})},{\"binary-search-bounds\":103}],121:[function(t,e,r){\"use strict\";var n\u003dt(\"binary-search-bounds\"),i\u003dt(\"robust-orientation\")[3];function a(t,e,r,n,i){this.a\u003dt,this.b\u003de,this.idx\u003dr,this.lowerIds\u003dn,this.upperIds\u003di}function o(t,e,r,n){this.a\u003dt,this.b\u003de,this.type\u003dr,this.idx\u003dn}function s(t,e){var r\u003dt.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(0!\u003d\u003dt.type\u0026\u0026(r\u003di(t.a,t.b,e.b))?r:t.idx-e.idx)}function l(t,e){return i(t.a,t.b,e)}function c(t,e,r,a,o){for(var s\u003dn.lt(e,a,l),c\u003dn.gt(e,a,l),u\u003ds;u\u003cc;++u){for(var f\u003de[u],h\u003df.lowerIds,p\u003dh.length;p\u003e1\u0026\u0026i(r[h[p-2]],r[h[p-1]],a)\u003e0;)t.push([h[p-1],h[p-2],o]),p-\u003d1;h.length\u003dp,h.push(o);var d\u003df.upperIds;for(p\u003dd.length;p\u003e1\u0026\u0026i(r[d[p-2]],r[d[p-1]],a)\u003c0;)t.push([d[p-2],d[p-1],o]),p-\u003d1;d.length\u003dp,d.push(o)}}function u(t,e){var r;return(r\u003dt.a[0]\u003ce.a[0]?i(t.a,t.b,e.a):i(e.b,e.a,t.a))?r:(r\u003de.b[0]\u003ct.b[0]?i(t.a,t.b,e.b):i(e.b,e.a,t.b))||t.idx-e.idx}function f(t,e,r){var i\u003dn.le(t,r,u),o\u003dt[i],s\u003do.upperIds,l\u003ds[s.length-1];o.upperIds\u003d[l],t.splice(i+1,0,new a(r.a,r.b,r.idx,[l],s))}function h(t,e,r){var i\u003dr.a;r.a\u003dr.b,r.b\u003di;var a\u003dn.eq(t,r,u),o\u003dt[a];t[a-1].upperIds\u003do.upperIds,t.splice(a,1)}e.exports\u003dfunction(t,e){for(var r\u003dt.length,n\u003de.length,i\u003d[],l\u003d0;l\u003cr;++l)i.push(new o(t[l],null,0,l));for(l\u003d0;l\u003cn;++l){var u\u003de[l],p\u003dt[u[0]],d\u003dt[u[1]];p[0]\u003cd[0]?i.push(new o(p,d,2,l),new o(d,p,1,l)):p[0]\u003ed[0]\u0026\u0026i.push(new o(d,p,2,l),new o(p,d,1,l))}i.sort(s);for(var m\u003di[0].a[0]-(1+Math.abs(i[0].a[0]))*Math.pow(2,-52),g\u003d[new a([m,1],[m,0],-1,[],[],[],[])],v\u003d[],y\u003d(l\u003d0,i.length);l\u003cy;++l){var x\u003di[l],b\u003dx.type;0\u003d\u003d\u003db?c(v,g,t,x.a,x.idx):2\u003d\u003d\u003db?f(g,t,x):h(g,t,x)}return v}},{\"binary-search-bounds\":103,\"robust-orientation\":544}],122:[function(t,e,r){\"use strict\";var n\u003dt(\"binary-search-bounds\");function i(t,e){this.stars\u003dt,this.edges\u003de}e.exports\u003dfunction(t,e){for(var r\u003dnew Array(t),n\u003d0;n\u003ct;++n)r[n]\u003d[];return new i(r,e)};var a\u003di.prototype;function o(t,e,r){for(var n\u003d1,i\u003dt.length;n\u003ci;n+\u003d2)if(t[n-1]\u003d\u003d\u003de\u0026\u0026t[n]\u003d\u003d\u003dr)return t[n-1]\u003dt[i-2],t[n]\u003dt[i-1],void(t.length\u003di-2)}a.isConstraint\u003dfunction(){var t\u003d[0,0];function e(t,e){return t[0]-e[0]||t[1]-e[1]}return function(r,i){return t[0]\u003dMath.min(r,i),t[1]\u003dMath.max(r,i),n.eq(this.edges,t,e)\u003e\u003d0}}(),a.removeTriangle\u003dfunction(t,e,r){var n\u003dthis.stars;o(n[t],e,r),o(n[e],r,t),o(n[r],t,e)},a.addTriangle\u003dfunction(t,e,r){var n\u003dthis.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},a.opposite\u003dfunction(t,e){for(var r\u003dthis.stars[e],n\u003d1,i\u003dr.length;n\u003ci;n+\u003d2)if(r[n]\u003d\u003d\u003dt)return r[n-1];return-1},a.flip\u003dfunction(t,e){var r\u003dthis.opposite(t,e),n\u003dthis.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},a.edges\u003dfunction(){for(var t\u003dthis.stars,e\u003d[],r\u003d0,n\u003dt.length;r\u003cn;++r)for(var i\u003dt[r],a\u003d0,o\u003di.length;a\u003co;a+\u003d2)e.push([i[a],i[a+1]]);return e},a.cells\u003dfunction(){for(var t\u003dthis.stars,e\u003d[],r\u003d0,n\u003dt.length;r\u003cn;++r)for(var i\u003dt[r],a\u003d0,o\u003di.length;a\u003co;a+\u003d2){var s\u003di[a],l\u003di[a+1];r\u003cMath.min(s,l)\u0026\u0026e.push([r,s,l])}return e}},{\"binary-search-bounds\":103}],123:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003d1,r\u003d1;r\u003ct.length;++r)for(var n\u003d0;n\u003cr;++n)if(t[r]\u003ct[n])e\u003d-e;else if(t[n]\u003d\u003d\u003dt[r])return 0;return e}},{}],124:[function(t,e,r){\"use strict\";var n\u003dt(\"dup\"),i\u003dt(\"robust-linear-solve\");function a(t,e){for(var r\u003d0,n\u003dt.length,i\u003d0;i\u003cn;++i)r+\u003dt[i]*e[i];return r}function o(t){var e\u003dt.length;if(0\u003d\u003d\u003de)return[];t[0].length;var r\u003dn([t.length+1,t.length+1],1),o\u003dn([t.length+1],1);r[e][e]\u003d0;for(var s\u003d0;s\u003ce;++s){for(var l\u003d0;l\u003c\u003ds;++l)r[l][s]\u003dr[s][l]\u003d2*a(t[s],t[l]);o[s]\u003da(t[s],t[s])}var c\u003di(r,o),u\u003d0,f\u003dc[e+1];for(s\u003d0;s\u003cf.length;++s)u+\u003df[s];var h\u003dnew Array(e);for(s\u003d0;s\u003ce;++s){f\u003dc[s];var p\u003d0;for(l\u003d0;l\u003cf.length;++l)p+\u003df[l];h[s]\u003dp/u}return h}function s(t){if(0\u003d\u003d\u003dt.length)return[];for(var e\u003dt[0].length,r\u003dn([e]),i\u003do(t),a\u003d0;a\u003ct.length;++a)for(var s\u003d0;s\u003ce;++s)r[s]+\u003dt[a][s]*i[a];return r}s.barycenetric\u003do,e.exports\u003ds},{dup:181,\"robust-linear-solve\":543}],125:[function(t,e,r){e.exports\u003dfunction(t){for(var e\u003dn(t),r\u003d0,i\u003d0;i\u003ct.length;++i)for(var a\u003dt[i],o\u003d0;o\u003ce.length;++o)r+\u003dMath.pow(a[o]-e[o],2);return Math.sqrt(r/t.length)};var n\u003dt(\"circumcenter\")},{circumcenter:124}],126:[function(t,e,r){e.exports\u003dfunction(t,e,r){return e\u003cr?t\u003ce?e:t\u003er?r:t:t\u003cr?r:t\u003ee?e:t}},{}],127:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){var n;if(r){n\u003de;for(var i\u003dnew Array(e.length),a\u003d0;a\u003ce.length;++a){var o\u003de[a];i[a]\u003d[o[0],o[1],r[a]]}e\u003di}var s\u003dfunction(t,e,r){var n\u003dd(t,[],p(t));return v(e,n,r),!!n}(t,e,!!r);for(;y(t,e,!!r);)s\u003d!0;if(r\u0026\u0026s){n.length\u003d0,r.length\u003d0;for(a\u003d0;a\u003ce.length;++a){o\u003de[a];n.push([o[0],o[1]]),r.push(o[2])}}return s};var n\u003dt(\"union-find\"),i\u003dt(\"box-intersect\"),a\u003dt(\"robust-segment-intersect\"),o\u003dt(\"big-rat\"),s\u003dt(\"big-rat/cmp\"),l\u003dt(\"big-rat/to-float\"),c\u003dt(\"rat-vec\"),u\u003dt(\"nextafter\"),f\u003dt(\"./lib/rat-seg-intersect\");function h(t){var e\u003dl(t);return[u(e,-1/0),u(e,1/0)]}function p(t){for(var e\u003dnew Array(t.length),r\u003d0;r\u003ct.length;++r){var n\u003dt[r];e[r]\u003d[u(n[0],-1/0),u(n[1],-1/0),u(n[0],1/0),u(n[1],1/0)]}return e}function d(t,e,r){for(var a\u003de.length,o\u003dnew n(a),s\u003d[],l\u003d0;l\u003ce.length;++l){var c\u003de[l],f\u003dh(c[0]),p\u003dh(c[1]);s.push([u(f[0],-1/0),u(p[0],-1/0),u(f[1],1/0),u(p[1],1/0)])}i(s,(function(t,e){o.link(t,e)}));var d\u003d!0,m\u003dnew Array(a);for(l\u003d0;l\u003ca;++l){(v\u003do.find(l))!\u003d\u003dl\u0026\u0026(d\u003d!1,t[v]\u003d[Math.min(t[l][0],t[v][0]),Math.min(t[l][1],t[v][1])])}if(d)return null;var g\u003d0;for(l\u003d0;l\u003ca;++l){var v;(v\u003do.find(l))\u003d\u003d\u003dl?(m[l]\u003dg,t[g++]\u003dt[l]):m[l]\u003d-1}t.length\u003dg;for(l\u003d0;l\u003ca;++l)m[l]\u003c0\u0026\u0026(m[l]\u003dm[o.find(l)]);return m}function m(t,e){return t[0]-e[0]||t[1]-e[1]}function g(t,e){var r\u003dt[0]-e[0]||t[1]-e[1];return r||(t[2]\u003ce[2]?-1:t[2]\u003ee[2]?1:0)}function v(t,e,r){if(0!\u003d\u003dt.length){if(e)for(var n\u003d0;n\u003ct.length;++n){var i\u003de[(o\u003dt[n])[0]],a\u003de[o[1]];o[0]\u003dMath.min(i,a),o[1]\u003dMath.max(i,a)}else for(n\u003d0;n\u003ct.length;++n){var o;i\u003d(o\u003dt[n])[0],a\u003do[1];o[0]\u003dMath.min(i,a),o[1]\u003dMath.max(i,a)}r?t.sort(g):t.sort(m);var s\u003d1;for(n\u003d1;n\u003ct.length;++n){var l\u003dt[n-1],c\u003dt[n];(c[0]!\u003d\u003dl[0]||c[1]!\u003d\u003dl[1]||r\u0026\u0026c[2]!\u003d\u003dl[2])\u0026\u0026(t[s++]\u003dc)}t.length\u003ds}}function y(t,e,r){var n\u003dfunction(t,e){for(var r\u003dnew Array(e.length),n\u003d0;n\u003ce.length;++n){var i\u003de[n],a\u003dt[i[0]],o\u003dt[i[1]];r[n]\u003d[u(Math.min(a[0],o[0]),-1/0),u(Math.min(a[1],o[1]),-1/0),u(Math.max(a[0],o[0]),1/0),u(Math.max(a[1],o[1]),1/0)]}return r}(t,e),h\u003dfunction(t,e,r){var n\u003d[];return i(r,(function(r,i){var o\u003de[r],s\u003de[i];if(o[0]!\u003d\u003ds[0]\u0026\u0026o[0]!\u003d\u003ds[1]\u0026\u0026o[1]!\u003d\u003ds[0]\u0026\u0026o[1]!\u003d\u003ds[1]){var l\u003dt[o[0]],c\u003dt[o[1]],u\u003dt[s[0]],f\u003dt[s[1]];a(l,c,u,f)\u0026\u0026n.push([r,i])}})),n}(t,e,n),m\u003dp(t),g\u003dfunction(t,e,r,n){var o\u003d[];return i(r,n,(function(r,n){var i\u003de[r];if(i[0]!\u003d\u003dn\u0026\u0026i[1]!\u003d\u003dn){var s\u003dt[n],l\u003dt[i[0]],c\u003dt[i[1]];a(l,c,s,s)\u0026\u0026o.push([r,n])}})),o}(t,e,n,m),y\u003dd(t,function(t,e,r,n,i){var a,u,h\u003dt.map((function(t){return[o(t[0]),o(t[1])]}));for(a\u003d0;a\u003cr.length;++a){var p\u003dr[a];u\u003dp[0];var d\u003dp[1],m\u003de[u],g\u003de[d],v\u003df(c(t[m[0]]),c(t[m[1]]),c(t[g[0]]),c(t[g[1]]));if(v){var y\u003dt.length;t.push([l(v[0]),l(v[1])]),h.push(v),n.push([u,y],[d,y])}}for(n.sort((function(t,e){if(t[0]!\u003d\u003de[0])return t[0]-e[0];var r\u003dh[t[1]],n\u003dh[e[1]];return s(r[0],n[0])||s(r[1],n[1])})),a\u003dn.length-1;a\u003e\u003d0;--a){var x\u003de[u\u003d(S\u003dn[a])[0]],b\u003dx[0],_\u003dx[1],w\u003dt[b],T\u003dt[_];if((w[0]-T[0]||w[1]-T[1])\u003c0){var k\u003db;b\u003d_,_\u003dk}x[0]\u003db;var M,A\u003dx[1]\u003dS[1];for(i\u0026\u0026(M\u003dx[2]);a\u003e0\u0026\u0026n[a-1][0]\u003d\u003d\u003du;){var S,E\u003d(S\u003dn[--a])[1];i?e.push([A,E,M]):e.push([A,E]),A\u003dE}i?e.push([A,_,M]):e.push([A,_])}return h}(t,e,h,g,r));return v(e,y,r),!!y||(h.length\u003e0||g.length\u003e0)}},{\"./lib/rat-seg-intersect\":128,\"big-rat\":90,\"big-rat/cmp\":88,\"big-rat/to-float\":102,\"box-intersect\":108,nextafter:480,\"rat-vec\":528,\"robust-segment-intersect\":547,\"union-find\":614}],128:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n){var a\u003ds(e,t),f\u003ds(n,r),h\u003du(a,f);if(0\u003d\u003d\u003do(h))return null;var p\u003ds(t,r),d\u003du(f,p),m\u003di(d,h),g\u003dc(a,m);return l(t,g)};var n\u003dt(\"big-rat/mul\"),i\u003dt(\"big-rat/div\"),a\u003dt(\"big-rat/sub\"),o\u003dt(\"big-rat/sign\"),s\u003dt(\"rat-vec/sub\"),l\u003dt(\"rat-vec/add\"),c\u003dt(\"rat-vec/muls\");function u(t,e){return a(n(t[0],e[1]),n(t[1],e[0]))}},{\"big-rat/div\":89,\"big-rat/mul\":99,\"big-rat/sign\":100,\"big-rat/sub\":101,\"rat-vec/add\":527,\"rat-vec/muls\":529,\"rat-vec/sub\":530}],129:[function(t,e,r){\"use strict\";var n\u003dt(\"clamp\");function i(t,e){null\u003d\u003de\u0026\u0026(e\u003d!0);var r\u003dt[0],i\u003dt[1],a\u003dt[2],o\u003dt[3];return null\u003d\u003do\u0026\u0026(o\u003de?1:255),e\u0026\u0026(r*\u003d255,i*\u003d255,a*\u003d255,o*\u003d255),16777216*(r\u003d255\u0026n(r,0,255))+((i\u003d255\u0026n(i,0,255))\u003c\u003c16)+((a\u003d255\u0026n(a,0,255))\u003c\u003c8)+(o\u003d255\u0026n(o,0,255))}e.exports\u003di,e.exports.to\u003di,e.exports.from\u003dfunction(t,e){var r\u003d(t\u003d+t)\u003e\u003e\u003e24,n\u003d(16711680\u0026t)\u003e\u003e\u003e16,i\u003d(65280\u0026t)\u003e\u003e\u003e8,a\u003d255\u0026t;return!1\u003d\u003d\u003de?[r,n,i,a]:[r/255,n/255,i/255,a/255]}},{clamp:126}],130:[function(t,e,r){\"use strict\";e.exports\u003d{aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],131:[function(t,e,r){\"use strict\";var n\u003dt(\"color-rgba\"),i\u003dt(\"clamp\"),a\u003dt(\"dtype\");e.exports\u003dfunction(t,e){\"float\"!\u003d\u003de\u0026\u0026e||(e\u003d\"array\"),\"uint\"\u003d\u003d\u003de\u0026\u0026(e\u003d\"uint8\"),\"uint_clamped\"\u003d\u003d\u003de\u0026\u0026(e\u003d\"uint8_clamped\");var r\u003dnew(a(e))(4),o\u003d\"uint8\"!\u003d\u003de\u0026\u0026\"uint8_clamped\"!\u003d\u003de;return t.length\u0026\u0026\"string\"!\u003dtypeof t||((t\u003dn(t))[0]/\u003d255,t[1]/\u003d255,t[2]/\u003d255),function(t){return t instanceof Uint8Array||t instanceof Uint8ClampedArray||!!(Array.isArray(t)\u0026\u0026(t[0]\u003e1||0\u003d\u003d\u003dt[0])\u0026\u0026(t[1]\u003e1||0\u003d\u003d\u003dt[1])\u0026\u0026(t[2]\u003e1||0\u003d\u003d\u003dt[2])\u0026\u0026(!t[3]||t[3]\u003e1))}(t)?(r[0]\u003dt[0],r[1]\u003dt[1],r[2]\u003dt[2],r[3]\u003dnull!\u003dt[3]?t[3]:255,o\u0026\u0026(r[0]/\u003d255,r[1]/\u003d255,r[2]/\u003d255,r[3]/\u003d255),r):(o?(r[0]\u003dt[0],r[1]\u003dt[1],r[2]\u003dt[2],r[3]\u003dnull!\u003dt[3]?t[3]:1):(r[0]\u003di(Math.floor(255*t[0]),0,255),r[1]\u003di(Math.floor(255*t[1]),0,255),r[2]\u003di(Math.floor(255*t[2]),0,255),r[3]\u003dnull\u003d\u003dt[3]?255:i(Math.floor(255*t[3]),0,255)),r)}},{clamp:126,\"color-rgba\":133,dtype:180}],132:[function(t,e,r){(function(r){(function(){\"use strict\";var n\u003dt(\"color-name\"),i\u003dt(\"is-plain-obj\"),a\u003dt(\"defined\");e.exports\u003dfunction(t){var e,s,l\u003d[],c\u003d1;if(\"string\"\u003d\u003dtypeof t)if(n[t])l\u003dn[t].slice(),s\u003d\"rgb\";else if(\"transparent\"\u003d\u003d\u003dt)c\u003d0,s\u003d\"rgb\",l\u003d[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var u\u003d(p\u003dt.slice(1)).length;c\u003d1,u\u003c\u003d4?(l\u003d[parseInt(p[0]+p[0],16),parseInt(p[1]+p[1],16),parseInt(p[2]+p[2],16)],4\u003d\u003d\u003du\u0026\u0026(c\u003dparseInt(p[3]+p[3],16)/255)):(l\u003d[parseInt(p[0]+p[1],16),parseInt(p[2]+p[3],16),parseInt(p[4]+p[5],16)],8\u003d\u003d\u003du\u0026\u0026(c\u003dparseInt(p[6]+p[7],16)/255)),l[0]||(l[0]\u003d0),l[1]||(l[1]\u003d0),l[2]||(l[2]\u003d0),s\u003d\"rgb\"}else if(e\u003d/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\\s*\\(([^\\)]*)\\)/.exec(t)){var f\u003de[1],h\u003d\"rgb\"\u003d\u003d\u003df,p\u003df.replace(/a$/,\"\");s\u003dp;u\u003d\"cmyk\"\u003d\u003d\u003dp?4:\"gray\"\u003d\u003d\u003dp?1:3;l\u003de[2].trim().split(/\\s*,\\s*/).map((function(t,e){if(/%$/.test(t))return e\u003d\u003d\u003du?parseFloat(t)/100:\"rgb\"\u003d\u003d\u003dp?255*parseFloat(t)/100:parseFloat(t);if(\"h\"\u003d\u003d\u003dp[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!\u003d\u003do[t])return o[t]}return parseFloat(t)})),f\u003d\u003d\u003dp\u0026\u0026l.push(1),c\u003dh||void 0\u003d\u003d\u003dl[u]?1:l[u],l\u003dl.slice(0,u)}else t.length\u003e10\u0026\u0026/[0-9](?:\\s|\\/)/.test(t)\u0026\u0026(l\u003dt.match(/([0-9]+)/g).map((function(t){return parseFloat(t)})),s\u003dt.match(/([a-z])/gi).join(\"\").toLowerCase());else if(isNaN(t))if(i(t)){var d\u003da(t.r,t.red,t.R,null);null!\u003d\u003dd?(s\u003d\"rgb\",l\u003d[d,a(t.g,t.green,t.G),a(t.b,t.blue,t.B)]):(s\u003d\"hsl\",l\u003d[a(t.h,t.hue,t.H),a(t.s,t.saturation,t.S),a(t.l,t.lightness,t.L,t.b,t.brightness)]),c\u003da(t.a,t.alpha,t.opacity,1),null!\u003dt.opacity\u0026\u0026(c/\u003d100)}else(Array.isArray(t)||r.ArrayBuffer\u0026\u0026ArrayBuffer.isView\u0026\u0026ArrayBuffer.isView(t))\u0026\u0026(l\u003d[t[0],t[1],t[2]],s\u003d\"rgb\",c\u003d4\u003d\u003d\u003dt.length?t[3]:1);else s\u003d\"rgb\",l\u003d[t\u003e\u003e\u003e16,(65280\u0026t)\u003e\u003e\u003e8,255\u0026t];return{space:s,values:l,alpha:c}};var o\u003d{red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"color-name\":130,defined:175,\"is-plain-obj\":453}],133:[function(t,e,r){\"use strict\";var n\u003dt(\"color-parse\"),i\u003dt(\"color-space/hsl\"),a\u003dt(\"clamp\");e.exports\u003dfunction(t){var e,r\u003dn(t);return r.space?((e\u003dArray(3))[0]\u003da(r.values[0],0,255),e[1]\u003da(r.values[1],0,255),e[2]\u003da(r.values[2],0,255),\"h\"\u003d\u003d\u003dr.space[0]\u0026\u0026(e\u003di.rgb(e)),e.push(a(r.alpha,0,1)),e):[]}},{clamp:126,\"color-parse\":132,\"color-space/hsl\":134}],134:[function(t,e,r){\"use strict\";var n\u003dt(\"./rgb\");e.exports\u003d{name:\"hsl\",min:[0,0,0],max:[360,100,100],channel:[\"hue\",\"saturation\",\"lightness\"],alias:[\"HSL\"],rgb:function(t){var e,r,n,i,a,o\u003dt[0]/360,s\u003dt[1]/100,l\u003dt[2]/100;if(0\u003d\u003d\u003ds)return[a\u003d255*l,a,a];e\u003d2*l-(r\u003dl\u003c.5?l*(1+s):l+s-l*s),i\u003d[0,0,0];for(var c\u003d0;c\u003c3;c++)(n\u003do+1/3*-(c-1))\u003c0?n++:n\u003e1\u0026\u0026n--,a\u003d6*n\u003c1?e+6*(r-e)*n:2*n\u003c1?r:3*n\u003c2?e+(r-e)*(2/3-n)*6:e,i[c]\u003d255*a;return i}},n.hsl\u003dfunction(t){var e,r,n\u003dt[0]/255,i\u003dt[1]/255,a\u003dt[2]/255,o\u003dMath.min(n,i,a),s\u003dMath.max(n,i,a),l\u003ds-o;return s\u003d\u003d\u003do?e\u003d0:n\u003d\u003d\u003ds?e\u003d(i-a)/l:i\u003d\u003d\u003ds?e\u003d2+(a-n)/l:a\u003d\u003d\u003ds\u0026\u0026(e\u003d4+(n-i)/l),(e\u003dMath.min(60*e,360))\u003c0\u0026\u0026(e+\u003d360),r\u003d(o+s)/2,[e,100*(s\u003d\u003d\u003do?0:r\u003c\u003d.5?l/(s+o):l/(2-s-o)),100*r]}},{\"./rgb\":135}],135:[function(t,e,r){\"use strict\";e.exports\u003d{name:\"rgb\",min:[0,0,0],max:[255,255,255],channel:[\"red\",\"green\",\"blue\"],alias:[\"RGB\"]}},{}],136:[function(t,e,r){e.exports\u003d{jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:1,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],\"rainbow-soft\":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],\"freesurface-blue\":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],\"freesurface-red\":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],\"velocity-blue\":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],\"velocity-green\":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},{}],137:[function(t,e,r){\"use strict\";var n\u003dt(\"./colorScale\"),i\u003dt(\"lerp\");function a(t){return[t[0]/255,t[1]/255,t[2]/255,t[3]]}function o(t){for(var e,r\u003d\"#\",n\u003d0;n\u003c3;++n)r+\u003d(\"00\"+(e\u003d(e\u003dt[n]).toString(16))).substr(e.length);return r}function s(t){return\"rgba(\"+t.join(\",\")+\")\"}e.exports\u003dfunction(t){var e,r,l,c,u,f,h,p,d,m;t||(t\u003d{});p\u003d(t.nshades||72)-1,h\u003dt.format||\"hex\",(f\u003dt.colormap)||(f\u003d\"jet\");if(\"string\"\u003d\u003dtypeof f){if(f\u003df.toLowerCase(),!n[f])throw Error(f+\" not a supported colorscale\");u\u003dn[f]}else{if(!Array.isArray(f))throw Error(\"unsupported colormap option\",f);u\u003df.slice()}if(u.length\u003ep+1)throw new Error(f+\" map requires nshades to be at least size \"+u.length);d\u003dArray.isArray(t.alpha)?2!\u003d\u003dt.alpha.length?[1,1]:t.alpha.slice():\"number\"\u003d\u003dtypeof t.alpha?[t.alpha,t.alpha]:[1,1];e\u003du.map((function(t){return Math.round(t.index*p)})),d[0]\u003dMath.min(Math.max(d[0],0),1),d[1]\u003dMath.min(Math.max(d[1],0),1);var g\u003du.map((function(t,e){var r\u003du[e].index,n\u003du[e].rgb.slice();return 4\u003d\u003d\u003dn.length\u0026\u0026n[3]\u003e\u003d0\u0026\u0026n[3]\u003c\u003d1||(n[3]\u003dd[0]+(d[1]-d[0])*r),n})),v\u003d[];for(m\u003d0;m\u003ce.length-1;++m){c\u003de[m+1]-e[m],r\u003dg[m],l\u003dg[m+1];for(var y\u003d0;y\u003cc;y++){var x\u003dy/c;v.push([Math.round(i(r[0],l[0],x)),Math.round(i(r[1],l[1],x)),Math.round(i(r[2],l[2],x)),i(r[3],l[3],x)])}}v.push(u[u.length-1].rgb.concat(d[1])),\"hex\"\u003d\u003d\u003dh?v\u003dv.map(o):\"rgbaString\"\u003d\u003d\u003dh?v\u003dv.map(s):\"float\"\u003d\u003d\u003dh\u0026\u0026(v\u003dv.map(a));return v}},{\"./colorScale\":136,lerp:456}],138:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,a){var o\u003dn(e,r,a);if(0\u003d\u003d\u003do){var s\u003di(n(t,e,r)),c\u003di(n(t,e,a));if(s\u003d\u003d\u003dc){if(0\u003d\u003d\u003ds){var u\u003dl(t,e,r),f\u003dl(t,e,a);return u\u003d\u003d\u003df?0:u?1:-1}return 0}return 0\u003d\u003d\u003dc?s\u003e0||l(t,e,a)?-1:1:0\u003d\u003d\u003ds?c\u003e0||l(t,e,r)?1:-1:i(c-s)}var h\u003dn(t,e,r);return h\u003e0?o\u003e0\u0026\u0026n(t,e,a)\u003e0?1:-1:h\u003c0?o\u003e0||n(t,e,a)\u003e0?1:-1:n(t,e,a)\u003e0||l(t,e,r)?1:-1};var n\u003dt(\"robust-orientation\"),i\u003dt(\"signum\"),a\u003dt(\"two-sum\"),o\u003dt(\"robust-product\"),s\u003dt(\"robust-sum\");function l(t,e,r){var n\u003da(t[0],-e[0]),i\u003da(t[1],-e[1]),l\u003da(r[0],-e[0]),c\u003da(r[1],-e[1]),u\u003ds(o(n,l),o(i,c));return u[u.length-1]\u003e\u003d0}},{\"robust-orientation\":544,\"robust-product\":545,\"robust-sum\":549,signum:551,\"two-sum\":601}],139:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003dt.length,a\u003dt.length-e.length;if(a)return a;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return t[0]+t[1]-e[0]-e[1]||n(t[0],t[1])-n(e[0],e[1]);case 3:var o\u003dt[0]+t[1],s\u003de[0]+e[1];if(a\u003do+t[2]-(s+e[2]))return a;var l\u003dn(t[0],t[1]),c\u003dn(e[0],e[1]);return n(l,t[2])-n(c,e[2])||n(l+t[2],o)-n(c+e[2],s);case 4:var u\u003dt[0],f\u003dt[1],h\u003dt[2],p\u003dt[3],d\u003de[0],m\u003de[1],g\u003de[2],v\u003de[3];return u+f+h+p-(d+m+g+v)||n(u,f,h,p)-n(d,m,g,v,d)||n(u+f,u+h,u+p,f+h,f+p,h+p)-n(d+m,d+g,d+v,m+g,m+v,g+v)||n(u+f+h,u+f+p,u+h+p,f+h+p)-n(d+m+g,d+m+v,d+g+v,m+g+v);default:for(var y\u003dt.slice().sort(i),x\u003de.slice().sort(i),b\u003d0;b\u003cr;++b)if(a\u003dy[b]-x[b])return a;return 0}};var n\u003dMath.min;function i(t,e){return t-e}},{}],140:[function(t,e,r){\"use strict\";var n\u003dt(\"compare-cell\"),i\u003dt(\"cell-orientation\");e.exports\u003dfunction(t,e){return n(t,e)||i(t)-i(e)}},{\"cell-orientation\":123,\"compare-cell\":139}],141:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/ch1d\"),i\u003dt(\"./lib/ch2d\"),a\u003dt(\"./lib/chnd\");e.exports\u003dfunction(t){var e\u003dt.length;if(0\u003d\u003d\u003de)return[];if(1\u003d\u003d\u003de)return[[0]];var r\u003dt[0].length;if(0\u003d\u003d\u003dr)return[];if(1\u003d\u003d\u003dr)return n(t);if(2\u003d\u003d\u003dr)return i(t);return a(t,r)}},{\"./lib/ch1d\":142,\"./lib/ch2d\":143,\"./lib/chnd\":144}],142:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003d0,r\u003d0,n\u003d1;n\u003ct.length;++n)t[n][0]\u003ct[e][0]\u0026\u0026(e\u003dn),t[n][0]\u003et[r][0]\u0026\u0026(r\u003dn);return e\u003cr?[[e],[r]]:e\u003er?[[r],[e]]:[[e]]}},{}],143:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dn(t),r\u003de.length;if(r\u003c\u003d2)return[];for(var i\u003dnew Array(r),a\u003de[r-1],o\u003d0;o\u003cr;++o){var s\u003de[o];i[o]\u003d[a,s],a\u003ds}return i};var n\u003dt(\"monotone-convex-hull-2d\")},{\"monotone-convex-hull-2d\":465}],144:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){try{return n(t,!0)}catch(o){var r\u003di(t);if(r.length\u003c\u003de)return[];var a\u003dfunction(t,e){for(var r\u003dt.length,n\u003dnew Array(r),i\u003d0;i\u003ce.length;++i)n[i]\u003dt[e[i]];var a\u003de.length;for(i\u003d0;i\u003cr;++i)e.indexOf(i)\u003c0\u0026\u0026(n[a++]\u003dt[i]);return n}(t,r);return function(t,e){for(var r\u003dt.length,n\u003de.length,i\u003d0;i\u003cr;++i)for(var a\u003dt[i],o\u003d0;o\u003ca.length;++o){var s\u003da[o];if(s\u003cn)a[o]\u003de[s];else{s-\u003dn;for(var l\u003d0;l\u003cn;++l)s\u003e\u003de[l]\u0026\u0026(s+\u003d1);a[o]\u003ds}}return t}(n(a,!0),r)}};var n\u003dt(\"incremental-convex-hull\"),i\u003dt(\"affine-hull\")},{\"affine-hull\":73,\"incremental-convex-hull\":442}],145:[function(t,e,r){e.exports\u003d{AFG:\"afghan\",ALA:\"\\\\b\\\\wland\",ALB:\"albania\",DZA:\"algeria\",ASM:\"^(?\u003d.*americ).*samoa\",AND:\"andorra\",AGO:\"angola\",AIA:\"anguill?a\",ATA:\"antarctica\",ATG:\"antigua\",ARG:\"argentin\",ARM:\"armenia\",ABW:\"^(?!.*bonaire).*\\\\baruba\",AUS:\"australia\",AUT:\"^(?!.*hungary).*austria|\\\\baustri.*\\\\bemp\",AZE:\"azerbaijan\",BHS:\"bahamas\",BHR:\"bahrain\",BGD:\"bangladesh|^(?\u003d.*east).*paki?stan\",BRB:\"barbados\",BLR:\"belarus|byelo\",BEL:\"^(?!.*luxem).*belgium\",BLZ:\"belize|^(?\u003d.*british).*honduras\",BEN:\"benin|dahome\",BMU:\"bermuda\",BTN:\"bhutan\",BOL:\"bolivia\",BES:\"^(?\u003d.*bonaire).*eustatius|^(?\u003d.*carib).*netherlands|\\\\bbes.?islands\",BIH:\"herzegovina|bosnia\",BWA:\"botswana|bechuana\",BVT:\"bouvet\",BRA:\"brazil\",IOT:\"british.?indian.?ocean\",BRN:\"brunei\",BGR:\"bulgaria\",BFA:\"burkina|\\\\bfaso|upper.?volta\",BDI:\"burundi\",CPV:\"verde\",KHM:\"cambodia|kampuchea|khmer\",CMR:\"cameroon\",CAN:\"canada\",CYM:\"cayman\",CAF:\"\\\\bcentral.african.republic\",TCD:\"\\\\bchad\",CHL:\"\\\\bchile\",CHN:\"^(?!.*\\\\bmac)(?!.*\\\\bhong)(?!.*\\\\btai)(?!.*\\\\brep).*china|^(?\u003d.*peo)(?\u003d.*rep).*china\",CXR:\"christmas\",CCK:\"\\\\bcocos|keeling\",COL:\"colombia\",COM:\"comoro\",COG:\"^(?!.*\\\\bdem)(?!.*\\\\bd[\\\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\\\bcongo\",COK:\"\\\\bcook\",CRI:\"costa.?rica\",CIV:\"ivoire|ivory\",HRV:\"croatia\",CUB:\"\\\\bcuba\",CUW:\"^(?!.*bonaire).*\\\\bcura(c|\\xe7)ao\",CYP:\"cyprus\",CSK:\"czechoslovakia\",CZE:\"^(?\u003d.*rep).*czech|czechia|bohemia\",COD:\"\\\\bdem.*congo|congo.*\\\\bdem|congo.*\\\\bd[\\\\.]?r|\\\\bd[\\\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc\",DNK:\"denmark\",DJI:\"djibouti\",DMA:\"dominica(?!n)\",DOM:\"dominican.rep\",ECU:\"ecuador\",EGY:\"egypt\",SLV:\"el.?salvador\",GNQ:\"guine.*eq|eq.*guine|^(?\u003d.*span).*guinea\",ERI:\"eritrea\",EST:\"estonia\",ETH:\"ethiopia|abyssinia\",FLK:\"falkland|malvinas\",FRO:\"faroe|faeroe\",FJI:\"fiji\",FIN:\"finland\",FRA:\"^(?!.*\\\\bdep)(?!.*martinique).*france|french.?republic|\\\\bgaul\",GUF:\"^(?\u003d.*french).*guiana\",PYF:\"french.?polynesia|tahiti\",ATF:\"french.?southern\",GAB:\"gabon\",GMB:\"gambia\",GEO:\"^(?!.*south).*georgia\",DDR:\"german.?democratic.?republic|democratic.?republic.*germany|east.germany\",DEU:\"^(?!.*east).*germany|^(?\u003d.*\\\\bfed.*\\\\brep).*german\",GHA:\"ghana|gold.?coast\",GIB:\"gibraltar\",GRC:\"greece|hellenic|hellas\",GRL:\"greenland\",GRD:\"grenada\",GLP:\"guadeloupe\",GUM:\"\\\\bguam\",GTM:\"guatemala\",GGY:\"guernsey\",GIN:\"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea\",GNB:\"bissau|^(?\u003d.*portu).*guinea\",GUY:\"guyana|british.?guiana\",HTI:\"haiti\",HMD:\"heard.*mcdonald\",VAT:\"holy.?see|vatican|papal.?st\",HND:\"^(?!.*brit).*honduras\",HKG:\"hong.?kong\",HUN:\"^(?!.*austr).*hungary\",ISL:\"iceland\",IND:\"india(?!.*ocea)\",IDN:\"indonesia\",IRN:\"\\\\biran|persia\",IRQ:\"\\\\biraq|mesopotamia\",IRL:\"(^ireland)|(^republic.*ireland)\",IMN:\"^(?\u003d.*isle).*\\\\bman\",ISR:\"israel\",ITA:\"italy\",JAM:\"jamaica\",JPN:\"japan\",JEY:\"jersey\",JOR:\"jordan\",KAZ:\"kazak\",KEN:\"kenya|british.?east.?africa|east.?africa.?prot\",KIR:\"kiribati\",PRK:\"^(?\u003d.*democrat|people|north|d.*p.*.r).*\\\\bkorea|dprk|korea.*(d.*p.*r)\",KWT:\"kuwait\",KGZ:\"kyrgyz|kirghiz\",LAO:\"\\\\blaos?\\\\b\",LVA:\"latvia\",LBN:\"lebanon\",LSO:\"lesotho|basuto\",LBR:\"liberia\",LBY:\"libya\",LIE:\"liechtenstein\",LTU:\"lithuania\",LUX:\"^(?!.*belg).*luxem\",MAC:\"maca(o|u)\",MDG:\"madagascar|malagasy\",MWI:\"malawi|nyasa\",MYS:\"malaysia\",MDV:\"maldive\",MLI:\"\\\\bmali\\\\b\",MLT:\"\\\\bmalta\",MHL:\"marshall\",MTQ:\"martinique\",MRT:\"mauritania\",MUS:\"mauritius\",MYT:\"\\\\bmayotte\",MEX:\"\\\\bmexic\",FSM:\"fed.*micronesia|micronesia.*fed\",MCO:\"monaco\",MNG:\"mongolia\",MNE:\"^(?!.*serbia).*montenegro\",MSR:\"montserrat\",MAR:\"morocco|\\\\bmaroc\",MOZ:\"mozambique\",MMR:\"myanmar|burma\",NAM:\"namibia\",NRU:\"nauru\",NPL:\"nepal\",NLD:\"^(?!.*\\\\bant)(?!.*\\\\bcarib).*netherlands\",ANT:\"^(?\u003d.*\\\\bant).*(nether|dutch)\",NCL:\"new.?caledonia\",NZL:\"new.?zealand\",NIC:\"nicaragua\",NER:\"\\\\bniger(?!ia)\",NGA:\"nigeria\",NIU:\"niue\",NFK:\"norfolk\",MNP:\"mariana\",NOR:\"norway\",OMN:\"\\\\boman|trucial\",PAK:\"^(?!.*east).*paki?stan\",PLW:\"palau\",PSE:\"palestin|\\\\bgaza|west.?bank\",PAN:\"panama\",PNG:\"papua|new.?guinea\",PRY:\"paraguay\",PER:\"peru\",PHL:\"philippines\",PCN:\"pitcairn\",POL:\"poland\",PRT:\"portugal\",PRI:\"puerto.?rico\",QAT:\"qatar\",KOR:\"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\\\bkorea(?!.*d.*p.*r)\",MDA:\"moldov|b(a|e)ssarabia\",REU:\"r(e|\\xe9)union\",ROU:\"r(o|u|ou)mania\",RUS:\"\\\\brussia|soviet.?union|u\\\\.?s\\\\.?s\\\\.?r|socialist.?republics\",RWA:\"rwanda\",BLM:\"barth(e|\\xe9)lemy\",SHN:\"helena\",KNA:\"kitts|\\\\bnevis\",LCA:\"\\\\blucia\",MAF:\"^(?\u003d.*collectivity).*martin|^(?\u003d.*france).*martin(?!ique)|^(?\u003d.*french).*martin(?!ique)\",SPM:\"miquelon\",VCT:\"vincent\",WSM:\"^(?!.*amer).*samoa\",SMR:\"san.?marino\",STP:\"\\\\bs(a|\\xe3)o.?tom(e|\\xe9)\",SAU:\"\\\\bsa\\\\w*.?arabia\",SEN:\"senegal\",SRB:\"^(?!.*monte).*serbia\",SYC:\"seychell\",SLE:\"sierra\",SGP:\"singapore\",SXM:\"^(?!.*martin)(?!.*saba).*maarten\",SVK:\"^(?!.*cze).*slovak\",SVN:\"slovenia\",SLB:\"solomon\",SOM:\"somali\",ZAF:\"south.africa|s\\\\\\\\..?africa\",SGS:\"south.?georgia|sandwich\",SSD:\"\\\\bs\\\\w*.?sudan\",ESP:\"spain\",LKA:\"sri.?lanka|ceylon\",SDN:\"^(?!.*\\\\bs(?!u)).*sudan\",SUR:\"surinam|dutch.?guiana\",SJM:\"svalbard\",SWZ:\"swaziland\",SWE:\"sweden\",CHE:\"switz|swiss\",SYR:\"syria\",TWN:\"taiwan|taipei|formosa|^(?!.*peo)(?\u003d.*rep).*china\",TJK:\"tajik\",THA:\"thailand|\\\\bsiam\",MKD:\"macedonia|fyrom\",TLS:\"^(?\u003d.*leste).*timor|^(?\u003d.*east).*timor\",TGO:\"togo\",TKL:\"tokelau\",TON:\"tonga\",TTO:\"trinidad|tobago\",TUN:\"tunisia\",TUR:\"turkey\",TKM:\"turkmen\",TCA:\"turks\",TUV:\"tuvalu\",UGA:\"uganda\",UKR:\"ukrain\",ARE:\"emirates|^u\\\\.?a\\\\.?e\\\\.?$|united.?arab.?em\",GBR:\"united.?kingdom|britain|^u\\\\.?k\\\\.?$\",TZA:\"tanzania\",USA:\"united.?states\\\\b(?!.*islands)|\\\\bu\\\\.?s\\\\.?a\\\\.?\\\\b|^\\\\s*u\\\\.?s\\\\.?\\\\b(?!.*islands)\",UMI:\"minor.?outlying.?is\",URY:\"uruguay\",UZB:\"uzbek\",VUT:\"vanuatu|new.?hebrides\",VEN:\"venezuela\",VNM:\"^(?!.*republic).*viet.?nam|^(?\u003d.*socialist).*viet.?nam\",VGB:\"^(?\u003d.*\\\\bu\\\\.?\\\\s?k).*virgin|^(?\u003d.*brit).*virgin|^(?\u003d.*kingdom).*virgin\",VIR:\"^(?\u003d.*\\\\bu\\\\.?\\\\s?s).*virgin|^(?\u003d.*states).*virgin\",WLF:\"futuna|wallis\",ESH:\"western.sahara\",YEM:\"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\\\bp\\\\.?d\\\\.?r).*yemen\",YMD:\"^(?\u003d.*peo).*yemen|^(?!.*rep)(?\u003d.*dem).*yemen|^(?\u003d.*south).*yemen|^(?\u003d.*aden).*yemen|^(?\u003d.*\\\\bp\\\\.?d\\\\.?r).*yemen\",YUG:\"yugoslavia\",ZMB:\"zambia|northern.?rhodesia\",EAZ:\"zanzibar\",ZWE:\"zimbabwe|^(?!.*northern).*rhodesia\"}},{}],146:[function(t,e,r){e.exports\u003d[\"xx-small\",\"x-small\",\"small\",\"medium\",\"large\",\"x-large\",\"xx-large\",\"larger\",\"smaller\"]},{}],147:[function(t,e,r){e.exports\u003d[\"normal\",\"condensed\",\"semi-condensed\",\"extra-condensed\",\"ultra-condensed\",\"expanded\",\"semi-expanded\",\"extra-expanded\",\"ultra-expanded\"]},{}],148:[function(t,e,r){e.exports\u003d[\"normal\",\"italic\",\"oblique\"]},{}],149:[function(t,e,r){e.exports\u003d[\"normal\",\"bold\",\"bolder\",\"lighter\",\"100\",\"200\",\"300\",\"400\",\"500\",\"600\",\"700\",\"800\",\"900\"]},{}],150:[function(t,e,r){\"use strict\";e.exports\u003d{parse:t(\"./parse\"),stringify:t(\"./stringify\")}},{\"./parse\":152,\"./stringify\":153}],151:[function(t,e,r){\"use strict\";var n\u003dt(\"css-font-size-keywords\");e.exports\u003d{isSize:function(t){return/^[\\d\\.]/.test(t)||-1!\u003d\u003dt.indexOf(\"/\")||-1!\u003d\u003dn.indexOf(t)}}},{\"css-font-size-keywords\":146}],152:[function(t,e,r){\"use strict\";var n\u003dt(\"unquote\"),i\u003dt(\"css-global-keywords\"),a\u003dt(\"css-system-font-keywords\"),o\u003dt(\"css-font-weight-keywords\"),s\u003dt(\"css-font-style-keywords\"),l\u003dt(\"css-font-stretch-keywords\"),c\u003dt(\"string-split-by\"),u\u003dt(\"./lib/util\").isSize;e.exports\u003dh;var f\u003dh.cache\u003d{};function h(t){if(\"string\"!\u003dtypeof t)throw new Error(\"Font argument must be a string.\");if(f[t])return f[t];if(\"\"\u003d\u003d\u003dt)throw new Error(\"Cannot parse an empty string.\");if(-1!\u003d\u003da.indexOf(t))return f[t]\u003d{system:t};for(var e,r\u003d{style:\"normal\",variant:\"normal\",weight:\"normal\",stretch:\"normal\",lineHeight:\"normal\",size:\"1rem\",family:[\"serif\"]},h\u003dc(t,/\\s+/);e\u003dh.shift();){if(-1!\u003d\u003di.indexOf(e))return[\"style\",\"variant\",\"weight\",\"stretch\"].forEach((function(t){r[t]\u003de})),f[t]\u003dr;if(-1\u003d\u003d\u003ds.indexOf(e))if(\"normal\"!\u003d\u003de\u0026\u0026\"small-caps\"!\u003d\u003de)if(-1\u003d\u003d\u003dl.indexOf(e)){if(-1\u003d\u003d\u003do.indexOf(e)){if(u(e)){var d\u003dc(e,\"/\");if(r.size\u003dd[0],null!\u003dd[1]?r.lineHeight\u003dp(d[1]):\"/\"\u003d\u003d\u003dh[0]\u0026\u0026(h.shift(),r.lineHeight\u003dp(h.shift())),!h.length)throw new Error(\"Missing required font-family.\");return r.family\u003dc(h.join(\" \"),/\\s*,\\s*/).map(n),f[t]\u003dr}throw new Error(\"Unknown or unsupported font token: \"+e)}r.weight\u003de}else r.stretch\u003de;else r.variant\u003de;else r.style\u003de}throw new Error(\"Missing required font-size.\")}function p(t){var e\u003dparseFloat(t);return e.toString()\u003d\u003d\u003dt?e:t}},{\"./lib/util\":151,\"css-font-stretch-keywords\":147,\"css-font-style-keywords\":148,\"css-font-weight-keywords\":149,\"css-global-keywords\":154,\"css-system-font-keywords\":155,\"string-split-by\":585,unquote:616}],153:[function(t,e,r){\"use strict\";var n\u003dt(\"pick-by-alias\"),i\u003dt(\"./lib/util\").isSize,a\u003dm(t(\"css-global-keywords\")),o\u003dm(t(\"css-system-font-keywords\")),s\u003dm(t(\"css-font-weight-keywords\")),l\u003dm(t(\"css-font-style-keywords\")),c\u003dm(t(\"css-font-stretch-keywords\")),u\u003d{normal:1,\"small-caps\":1},f\u003d{serif:1,\"sans-serif\":1,monospace:1,cursive:1,fantasy:1,\"system-ui\":1},h\u003d\"1rem\",p\u003d\"serif\";function d(t,e){if(t\u0026\u0026!e[t]\u0026\u0026!a[t])throw Error(\"Unknown keyword `\"+t+\"`\");return t}function m(t){for(var e\u003d{},r\u003d0;r\u003ct.length;r++)e[t[r]]\u003d1;return e}e.exports\u003dfunction(t){if((t\u003dn(t,{style:\"style fontstyle fontStyle font-style slope distinction\",variant:\"variant font-variant fontVariant fontvariant var capitalization\",weight:\"weight w font-weight fontWeight fontweight\",stretch:\"stretch font-stretch fontStretch fontstretch width\",size:\"size s font-size fontSize fontsize height em emSize\",lineHeight:\"lh line-height lineHeight lineheight leading\",family:\"font family fontFamily font-family fontfamily type typeface face\",system:\"system reserved default global\"})).system)return t.system\u0026\u0026d(t.system,o),t.system;if(d(t.style,l),d(t.variant,u),d(t.weight,s),d(t.stretch,c),null\u003d\u003dt.size\u0026\u0026(t.size\u003dh),\"number\"\u003d\u003dtypeof t.size\u0026\u0026(t.size+\u003d\"px\"),!i)throw Error(\"Bad size value `\"+t.size+\"`\");t.family||(t.family\u003dp),Array.isArray(t.family)\u0026\u0026(t.family.length||(t.family\u003d[p]),t.family\u003dt.family.map((function(t){return f[t]?t:\u0027\"\u0027+t+\u0027\"\u0027})).join(\", \"));var e\u003d[];return e.push(t.style),t.variant!\u003d\u003dt.style\u0026\u0026e.push(t.variant),t.weight!\u003d\u003dt.variant\u0026\u0026t.weight!\u003d\u003dt.style\u0026\u0026e.push(t.weight),t.stretch!\u003d\u003dt.weight\u0026\u0026t.stretch!\u003d\u003dt.variant\u0026\u0026t.stretch!\u003d\u003dt.style\u0026\u0026e.push(t.stretch),e.push(t.size+(null\u003d\u003dt.lineHeight||\"normal\"\u003d\u003d\u003dt.lineHeight||t.lineHeight+\"\"\u003d\u003d\"1\"?\"\":\"/\"+t.lineHeight)),e.push(t.family),e.filter(Boolean).join(\" \")}},{\"./lib/util\":151,\"css-font-stretch-keywords\":147,\"css-font-style-keywords\":148,\"css-font-weight-keywords\":149,\"css-global-keywords\":154,\"css-system-font-keywords\":155,\"pick-by-alias\":494}],154:[function(t,e,r){e.exports\u003d[\"inherit\",\"initial\",\"unset\"]},{}],155:[function(t,e,r){e.exports\u003d[\"caption\",\"icon\",\"menu\",\"message-box\",\"small-caption\",\"status-bar\"]},{}],156:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i,a){var o\u003di-1,s\u003di*i,l\u003do*o,c\u003d(1+2*i)*l,u\u003di*l,f\u003ds*(3-2*i),h\u003ds*o;if(t.length){a||(a\u003dnew Array(t.length));for(var p\u003dt.length-1;p\u003e\u003d0;--p)a[p]\u003dc*t[p]+u*e[p]+f*r[p]+h*n[p];return a}return c*t+u*e+f*r+h*n},e.exports.derivative\u003dfunction(t,e,r,n,i,a){var o\u003d6*i*i-6*i,s\u003d3*i*i-4*i+1,l\u003d-6*i*i+6*i,c\u003d3*i*i-2*i;if(t.length){a||(a\u003dnew Array(t.length));for(var u\u003dt.length-1;u\u003e\u003d0;--u)a[u]\u003do*t[u]+s*e[u]+l*r[u]+c*n[u];return a}return o*t+s*e+l*r[u]+c*n}},{}],157:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/thunk.js\");function i(){this.argTypes\u003d[],this.shimArgs\u003d[],this.arrayArgs\u003d[],this.arrayBlockIndices\u003d[],this.scalarArgs\u003d[],this.offsetArgs\u003d[],this.offsetArgIndex\u003d[],this.indexArgs\u003d[],this.shapeArgs\u003d[],this.funcName\u003d\"\",this.pre\u003dnull,this.body\u003dnull,this.post\u003dnull,this.debug\u003d!1}e.exports\u003dfunction(t){var e\u003dnew i;e.pre\u003dt.pre,e.body\u003dt.body,e.post\u003dt.post;var r\u003dt.args.slice(0);e.argTypes\u003dr;for(var a\u003d0;a\u003cr.length;++a){var o\u003dr[a];if(\"array\"\u003d\u003d\u003do||\"object\"\u003d\u003dtypeof o\u0026\u0026o.blockIndices){if(e.argTypes[a]\u003d\"array\",e.arrayArgs.push(a),e.arrayBlockIndices.push(o.blockIndices?o.blockIndices:0),e.shimArgs.push(\"array\"+a),a\u003ce.pre.args.length\u0026\u0026e.pre.args[a].count\u003e0)throw new Error(\"cwise: pre() block may not reference array args\");if(a\u003ce.post.args.length\u0026\u0026e.post.args[a].count\u003e0)throw new Error(\"cwise: post() block may not reference array args\")}else if(\"scalar\"\u003d\u003d\u003do)e.scalarArgs.push(a),e.shimArgs.push(\"scalar\"+a);else if(\"index\"\u003d\u003d\u003do){if(e.indexArgs.push(a),a\u003ce.pre.args.length\u0026\u0026e.pre.args[a].count\u003e0)throw new Error(\"cwise: pre() block may not reference array index\");if(a\u003ce.body.args.length\u0026\u0026e.body.args[a].lvalue)throw new Error(\"cwise: body() block may not write to array index\");if(a\u003ce.post.args.length\u0026\u0026e.post.args[a].count\u003e0)throw new Error(\"cwise: post() block may not reference array index\")}else if(\"shape\"\u003d\u003d\u003do){if(e.shapeArgs.push(a),a\u003ce.pre.args.length\u0026\u0026e.pre.args[a].lvalue)throw new Error(\"cwise: pre() block may not write to array shape\");if(a\u003ce.body.args.length\u0026\u0026e.body.args[a].lvalue)throw new Error(\"cwise: body() block may not write to array shape\");if(a\u003ce.post.args.length\u0026\u0026e.post.args[a].lvalue)throw new Error(\"cwise: post() block may not write to array shape\")}else{if(\"object\"!\u003dtypeof o||!o.offset)throw new Error(\"cwise: Unknown argument type \"+r[a]);e.argTypes[a]\u003d\"offset\",e.offsetArgs.push({array:o.array,offset:o.offset}),e.offsetArgIndex.push(a)}}if(e.arrayArgs.length\u003c\u003d0)throw new Error(\"cwise: No array arguments specified\");if(e.pre.args.length\u003er.length)throw new Error(\"cwise: Too many arguments in pre() block\");if(e.body.args.length\u003er.length)throw new Error(\"cwise: Too many arguments in body() block\");if(e.post.args.length\u003er.length)throw new Error(\"cwise: Too many arguments in post() block\");return e.debug\u003d!!t.printCode||!!t.debug,e.funcName\u003dt.funcName||\"cwise\",e.blockSize\u003dt.blockSize||64,n(e)}},{\"./lib/thunk.js\":159}],158:[function(t,e,r){\"use strict\";var n\u003dt(\"uniq\");function i(t,e,r){var n,i,a\u003dt.length,o\u003de.arrayArgs.length,s\u003de.indexArgs.length\u003e0,l\u003d[],c\u003d[],u\u003d0,f\u003d0;for(n\u003d0;n\u003ca;++n)c.push([\"i\",n,\"\u003d0\"].join(\"\"));for(i\u003d0;i\u003co;++i)for(n\u003d0;n\u003ca;++n)f\u003du,u\u003dt[n],0\u003d\u003d\u003dn?c.push([\"d\",i,\"s\",n,\"\u003dt\",i,\"p\",u].join(\"\")):c.push([\"d\",i,\"s\",n,\"\u003d(t\",i,\"p\",u,\"-s\",f,\"*t\",i,\"p\",f,\")\"].join(\"\"));for(c.length\u003e0\u0026\u0026l.push(\"var \"+c.join(\",\")),n\u003da-1;n\u003e\u003d0;--n)u\u003dt[n],l.push([\"for(i\",n,\"\u003d0;i\",n,\"\u003cs\",u,\";++i\",n,\"){\"].join(\"\"));for(l.push(r),n\u003d0;n\u003ca;++n){for(f\u003du,u\u003dt[n],i\u003d0;i\u003co;++i)l.push([\"p\",i,\"+\u003dd\",i,\"s\",n].join(\"\"));s\u0026\u0026(n\u003e0\u0026\u0026l.push([\"index[\",f,\"]-\u003ds\",f].join(\"\")),l.push([\"++index[\",u,\"]\"].join(\"\"))),l.push(\"}\")}return l.join(\"\\n\")}function a(t,e,r){for(var n\u003dt.body,i\u003d[],a\u003d[],o\u003d0;o\u003ct.args.length;++o){var s\u003dt.args[o];if(!(s.count\u003c\u003d0)){var l\u003dnew RegExp(s.name,\"g\"),c\u003d\"\",u\u003de.arrayArgs.indexOf(o);switch(e.argTypes[o]){case\"offset\":var f\u003de.offsetArgIndex.indexOf(o);u\u003de.offsetArgs[f].array,c\u003d\"+q\"+f;case\"array\":c\u003d\"p\"+u+c;var h\u003d\"l\"+o,p\u003d\"a\"+u;if(0\u003d\u003d\u003de.arrayBlockIndices[u])1\u003d\u003d\u003ds.count?\"generic\"\u003d\u003d\u003dr[u]?s.lvalue?(i.push([\"var \",h,\"\u003d\",p,\".get(\",c,\")\"].join(\"\")),n\u003dn.replace(l,h),a.push([p,\".set(\",c,\",\",h,\")\"].join(\"\"))):n\u003dn.replace(l,[p,\".get(\",c,\")\"].join(\"\")):n\u003dn.replace(l,[p,\"[\",c,\"]\"].join(\"\")):\"generic\"\u003d\u003d\u003dr[u]?(i.push([\"var \",h,\"\u003d\",p,\".get(\",c,\")\"].join(\"\")),n\u003dn.replace(l,h),s.lvalue\u0026\u0026a.push([p,\".set(\",c,\",\",h,\")\"].join(\"\"))):(i.push([\"var \",h,\"\u003d\",p,\"[\",c,\"]\"].join(\"\")),n\u003dn.replace(l,h),s.lvalue\u0026\u0026a.push([p,\"[\",c,\"]\u003d\",h].join(\"\")));else{for(var d\u003d[s.name],m\u003d[c],g\u003d0;g\u003cMath.abs(e.arrayBlockIndices[u]);g++)d.push(\"\\\\s*\\\\[([^\\\\]]+)\\\\]\"),m.push(\"$\"+(g+1)+\"*t\"+u+\"b\"+g);if(l\u003dnew RegExp(d.join(\"\"),\"g\"),c\u003dm.join(\"+\"),\"generic\"\u003d\u003d\u003dr[u])throw new Error(\"cwise: Generic arrays not supported in combination with blocks!\");n\u003dn.replace(l,[p,\"[\",c,\"]\"].join(\"\"))}break;case\"scalar\":n\u003dn.replace(l,\"Y\"+e.scalarArgs.indexOf(o));break;case\"index\":n\u003dn.replace(l,\"index\");break;case\"shape\":n\u003dn.replace(l,\"shape\")}}}return[i.join(\"\\n\"),n,a.join(\"\\n\")].join(\"\\n\").trim()}function o(t){for(var e\u003dnew Array(t.length),r\u003d!0,n\u003d0;n\u003ct.length;++n){var i\u003dt[n],a\u003di.match(/\\d+/);a\u003da?a[0]:\"\",0\u003d\u003d\u003di.charAt(0)?e[n]\u003d\"u\"+i.charAt(1)+a:e[n]\u003di.charAt(0)+a,n\u003e0\u0026\u0026(r\u003dr\u0026\u0026e[n]\u003d\u003d\u003de[n-1])}return r?e[0]:e.join(\"\")}e.exports\u003dfunction(t,e){for(var r\u003de[1].length-Math.abs(t.arrayBlockIndices[0])|0,s\u003dnew Array(t.arrayArgs.length),l\u003dnew Array(t.arrayArgs.length),c\u003d0;c\u003ct.arrayArgs.length;++c)l[c]\u003de[2*c],s[c]\u003de[2*c+1];var u\u003d[],f\u003d[],h\u003d[],p\u003d[],d\u003d[];for(c\u003d0;c\u003ct.arrayArgs.length;++c){t.arrayBlockIndices[c]\u003c0?(h.push(0),p.push(r),u.push(r),f.push(r+t.arrayBlockIndices[c])):(h.push(t.arrayBlockIndices[c]),p.push(t.arrayBlockIndices[c]+r),u.push(0),f.push(t.arrayBlockIndices[c]));for(var m\u003d[],g\u003d0;g\u003cs[c].length;g++)h[c]\u003c\u003ds[c][g]\u0026\u0026s[c][g]\u003cp[c]\u0026\u0026m.push(s[c][g]-h[c]);d.push(m)}var v\u003d[\"SS\"],y\u003d[\"\u0027use strict\u0027\"],x\u003d[];for(g\u003d0;g\u003cr;++g)x.push([\"s\",g,\"\u003dSS[\",g,\"]\"].join(\"\"));for(c\u003d0;c\u003ct.arrayArgs.length;++c){v.push(\"a\"+c),v.push(\"t\"+c),v.push(\"p\"+c);for(g\u003d0;g\u003cr;++g)x.push([\"t\",c,\"p\",g,\"\u003dt\",c,\"[\",h[c]+g,\"]\"].join(\"\"));for(g\u003d0;g\u003cMath.abs(t.arrayBlockIndices[c]);++g)x.push([\"t\",c,\"b\",g,\"\u003dt\",c,\"[\",u[c]+g,\"]\"].join(\"\"))}for(c\u003d0;c\u003ct.scalarArgs.length;++c)v.push(\"Y\"+c);if(t.shapeArgs.length\u003e0\u0026\u0026x.push(\"shape\u003dSS.slice(0)\"),t.indexArgs.length\u003e0){var b\u003dnew Array(r);for(c\u003d0;c\u003cr;++c)b[c]\u003d\"0\";x.push([\"index\u003d[\",b.join(\",\"),\"]\"].join(\"\"))}for(c\u003d0;c\u003ct.offsetArgs.length;++c){var _\u003dt.offsetArgs[c],w\u003d[];for(g\u003d0;g\u003c_.offset.length;++g)0!\u003d\u003d_.offset[g]\u0026\u0026(1\u003d\u003d\u003d_.offset[g]?w.push([\"t\",_.array,\"p\",g].join(\"\")):w.push([_.offset[g],\"*t\",_.array,\"p\",g].join(\"\")));0\u003d\u003d\u003dw.length?x.push(\"q\"+c+\"\u003d0\"):x.push([\"q\",c,\"\u003d\",w.join(\"+\")].join(\"\"))}var T\u003dn([].concat(t.pre.thisVars).concat(t.body.thisVars).concat(t.post.thisVars));for((x\u003dx.concat(T)).length\u003e0\u0026\u0026y.push(\"var \"+x.join(\",\")),c\u003d0;c\u003ct.arrayArgs.length;++c)y.push(\"p\"+c+\"|\u003d0\");t.pre.body.length\u003e3\u0026\u0026y.push(a(t.pre,t,l));var k\u003da(t.body,t,l),M\u003dfunction(t){for(var e\u003d0,r\u003dt[0].length;e\u003cr;){for(var n\u003d1;n\u003ct.length;++n)if(t[n][e]!\u003d\u003dt[0][e])return e;++e}return e}(d);M\u003cr?y.push(function(t,e,r,n){for(var a\u003de.length,o\u003dr.arrayArgs.length,s\u003dr.blockSize,l\u003dr.indexArgs.length\u003e0,c\u003d[],u\u003d0;u\u003co;++u)c.push([\"var offset\",u,\"\u003dp\",u].join(\"\"));for(u\u003dt;u\u003ca;++u)c.push([\"for(var j\"+u+\"\u003dSS[\",e[u],\"]|0;j\",u,\"\u003e0;){\"].join(\"\")),c.push([\"if(j\",u,\"\u003c\",s,\"){\"].join(\"\")),c.push([\"s\",e[u],\"\u003dj\",u].join(\"\")),c.push([\"j\",u,\"\u003d0\"].join(\"\")),c.push([\"}else{s\",e[u],\"\u003d\",s].join(\"\")),c.push([\"j\",u,\"-\u003d\",s,\"}\"].join(\"\")),l\u0026\u0026c.push([\"index[\",e[u],\"]\u003dj\",u].join(\"\"));for(u\u003d0;u\u003co;++u){for(var f\u003d[\"offset\"+u],h\u003dt;h\u003ca;++h)f.push([\"j\",h,\"*t\",u,\"p\",e[h]].join(\"\"));c.push([\"p\",u,\"\u003d(\",f.join(\"+\"),\")\"].join(\"\"))}for(c.push(i(e,r,n)),u\u003dt;u\u003ca;++u)c.push(\"}\");return c.join(\"\\n\")}(M,d[0],t,k)):y.push(i(d[0],t,k)),t.post.body.length\u003e3\u0026\u0026y.push(a(t.post,t,l)),t.debug\u0026\u0026console.log(\"-----Generated cwise routine for \",e,\":\\n\"+y.join(\"\\n\")+\"\\n----------\");var A\u003d[t.funcName||\"unnamed\",\"_cwise_loop_\",s[0].join(\"s\"),\"m\",M,o(l)].join(\"\");return new Function([\"function \",A,\"(\",v.join(\",\"),\"){\",y.join(\"\\n\"),\"} return \",A].join(\"\"))()}},{uniq:615}],159:[function(t,e,r){\"use strict\";var n\u003dt(\"./compile.js\");e.exports\u003dfunction(t){var e\u003d[\"\u0027use strict\u0027\",\"var CACHED\u003d{}\"],r\u003d[],i\u003dt.funcName+\"_cwise_thunk\";e.push([\"return function \",i,\"(\",t.shimArgs.join(\",\"),\"){\"].join(\"\"));for(var a\u003d[],o\u003d[],s\u003d[[\"array\",t.arrayArgs[0],\".shape.slice(\",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]\u003c0?\",\"+t.arrayBlockIndices[0]+\")\":\")\"].join(\"\")],l\u003d[],c\u003d[],u\u003d0;u\u003ct.arrayArgs.length;++u){var f\u003dt.arrayArgs[u];r.push([\"t\",f,\"\u003darray\",f,\".dtype,\",\"r\",f,\"\u003darray\",f,\".order\"].join(\"\")),a.push(\"t\"+f),a.push(\"r\"+f),o.push(\"t\"+f),o.push(\"r\"+f+\".join()\"),s.push(\"array\"+f+\".data\"),s.push(\"array\"+f+\".stride\"),s.push(\"array\"+f+\".offset|0\"),u\u003e0\u0026\u0026(l.push(\"array\"+t.arrayArgs[0]+\".shape.length\u003d\u003d\u003darray\"+f+\".shape.length+\"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[u]))),c.push(\"array\"+t.arrayArgs[0]+\".shape[shapeIndex+\"+Math.max(0,t.arrayBlockIndices[0])+\"]\u003d\u003d\u003darray\"+f+\".shape[shapeIndex+\"+Math.max(0,t.arrayBlockIndices[u])+\"]\"))}for(t.arrayArgs.length\u003e1\u0026\u0026(e.push(\"if (!(\"+l.join(\" \u0026\u0026 \")+\")) throw new Error(\u0027cwise: Arrays do not all have the same dimensionality!\u0027)\"),e.push(\"for(var shapeIndex\u003darray\"+t.arrayArgs[0]+\".shape.length-\"+Math.abs(t.arrayBlockIndices[0])+\"; shapeIndex--\\x3e0;) {\"),e.push(\"if (!(\"+c.join(\" \u0026\u0026 \")+\")) throw new Error(\u0027cwise: Arrays do not all have the same shape!\u0027)\"),e.push(\"}\")),u\u003d0;u\u003ct.scalarArgs.length;++u)s.push(\"scalar\"+t.scalarArgs[u]);return r.push([\"type\u003d[\",o.join(\",\"),\"].join()\"].join(\"\")),r.push(\"proc\u003dCACHED[type]\"),e.push(\"var \"+r.join(\",\")),e.push([\"if(!proc){\",\"CACHED[type]\u003dproc\u003dcompile([\",a.join(\",\"),\"])}\",\"return proc(\",s.join(\",\"),\")}\"].join(\"\")),t.debug\u0026\u0026console.log(\"-----Generated thunk:\\n\"+e.join(\"\\n\")+\"\\n----------\"),new Function(\"compile\",e.join(\"\\n\"))(n.bind(void 0,t))}},{\"./compile.js\":158}],160:[function(t,e,r){\"use strict\";var n,i\u003dt(\"type/value/is\"),a\u003dt(\"type/value/ensure\"),o\u003dt(\"type/plain-function/ensure\"),s\u003dt(\"es5-ext/object/copy\"),l\u003dt(\"es5-ext/object/normalize-options\"),c\u003dt(\"es5-ext/object/map\"),u\u003dFunction.prototype.bind,f\u003dObject.defineProperty,h\u003dObject.prototype.hasOwnProperty;n\u003dfunction(t,e,r){var n,i\u003da(e)\u0026\u0026o(e.value);return delete(n\u003ds(e)).writable,delete n.value,n.get\u003dfunction(){return!r.overwriteDefinition\u0026\u0026h.call(this,t)?i:(e.value\u003du.call(i,r.resolveContext?r.resolveContext(this):this),f(this,t,e),this[t])},n},e.exports\u003dfunction(t){var e\u003dl(arguments[1]);return i(e.resolveContext)\u0026\u0026o(e.resolveContext),c(t,(function(t,r){return n(r,t,e)}))}},{\"es5-ext/object/copy\":201,\"es5-ext/object/map\":209,\"es5-ext/object/normalize-options\":210,\"type/plain-function/ensure\":607,\"type/value/ensure\":611,\"type/value/is\":612}],161:[function(t,e,r){\"use strict\";var n\u003dt(\"type/value/is\"),i\u003dt(\"type/plain-function/is\"),a\u003dt(\"es5-ext/object/assign\"),o\u003dt(\"es5-ext/object/normalize-options\"),s\u003dt(\"es5-ext/string/#/contains\");(e.exports\u003dfunction(t,e){var r,i,l,c,u;return arguments.length\u003c2||\"string\"!\u003dtypeof t?(c\u003de,e\u003dt,t\u003dnull):c\u003darguments[2],n(t)?(r\u003ds.call(t,\"c\"),i\u003ds.call(t,\"e\"),l\u003ds.call(t,\"w\")):(r\u003dl\u003d!0,i\u003d!1),u\u003d{value:e,configurable:r,enumerable:i,writable:l},c?a(o(c),u):u}).gs\u003dfunction(t,e,r){var l,c,u,f;return\"string\"!\u003dtypeof t?(u\u003dr,r\u003de,e\u003dt,t\u003dnull):u\u003darguments[3],n(e)?i(e)?n(r)?i(r)||(u\u003dr,r\u003dvoid 0):r\u003dvoid 0:(u\u003de,e\u003dr\u003dvoid 0):e\u003dvoid 0,n(t)?(l\u003ds.call(t,\"c\"),c\u003ds.call(t,\"e\")):(l\u003d!0,c\u003d!1),f\u003d{get:e,set:r,configurable:l,enumerable:c},u?a(o(u),f):f}},{\"es5-ext/object/assign\":198,\"es5-ext/object/normalize-options\":210,\"es5-ext/string/#/contains\":217,\"type/plain-function/is\":608,\"type/value/is\":612}],162:[function(t,e,r){!function(t,n){n(\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?r:t.d3\u003dt.d3||{})}(this,(function(t){\"use strict\";function e(t,e){return t\u003ce?-1:t\u003ee?1:t\u003e\u003de?0:NaN}function r(t){var r;return 1\u003d\u003d\u003dt.length\u0026\u0026(r\u003dt,t\u003dfunction(t,n){return e(r(t),n)}),{left:function(e,r,n,i){for(null\u003d\u003dn\u0026\u0026(n\u003d0),null\u003d\u003di\u0026\u0026(i\u003de.length);n\u003ci;){var a\u003dn+i\u003e\u003e\u003e1;t(e[a],r)\u003c0?n\u003da+1:i\u003da}return n},right:function(e,r,n,i){for(null\u003d\u003dn\u0026\u0026(n\u003d0),null\u003d\u003di\u0026\u0026(i\u003de.length);n\u003ci;){var a\u003dn+i\u003e\u003e\u003e1;t(e[a],r)\u003e0?i\u003da:n\u003da+1}return n}}}var n\u003dr(e),i\u003dn.right,a\u003dn.left;function o(t,e){return[t,e]}function s(t){return null\u003d\u003d\u003dt?NaN:+t}function l(t,e){var r,n,i\u003dt.length,a\u003d0,o\u003d-1,l\u003d0,c\u003d0;if(null\u003d\u003de)for(;++o\u003ci;)isNaN(r\u003ds(t[o]))||(c+\u003d(n\u003dr-l)*(r-(l+\u003dn/++a)));else for(;++o\u003ci;)isNaN(r\u003ds(e(t[o],o,t)))||(c+\u003d(n\u003dr-l)*(r-(l+\u003dn/++a)));if(a\u003e1)return c/(a-1)}function c(t,e){var r\u003dl(t,e);return r?Math.sqrt(r):r}function u(t,e){var r,n,i,a\u003dt.length,o\u003d-1;if(null\u003d\u003de){for(;++o\u003ca;)if(null!\u003d(r\u003dt[o])\u0026\u0026r\u003e\u003dr)for(n\u003di\u003dr;++o\u003ca;)null!\u003d(r\u003dt[o])\u0026\u0026(n\u003er\u0026\u0026(n\u003dr),i\u003cr\u0026\u0026(i\u003dr))}else for(;++o\u003ca;)if(null!\u003d(r\u003de(t[o],o,t))\u0026\u0026r\u003e\u003dr)for(n\u003di\u003dr;++o\u003ca;)null!\u003d(r\u003de(t[o],o,t))\u0026\u0026(n\u003er\u0026\u0026(n\u003dr),i\u003cr\u0026\u0026(i\u003dr));return[n,i]}var f\u003dArray.prototype,h\u003df.slice,p\u003df.map;function d(t){return function(){return t}}function m(t){return t}function g(t,e,r){t\u003d+t,e\u003d+e,r\u003d(i\u003darguments.length)\u003c2?(e\u003dt,t\u003d0,1):i\u003c3?1:+r;for(var n\u003d-1,i\u003d0|Math.max(0,Math.ceil((e-t)/r)),a\u003dnew Array(i);++n\u003ci;)a[n]\u003dt+n*r;return a}var v\u003dMath.sqrt(50),y\u003dMath.sqrt(10),x\u003dMath.sqrt(2);function b(t,e,r){var n\u003d(e-t)/Math.max(0,r),i\u003dMath.floor(Math.log(n)/Math.LN10),a\u003dn/Math.pow(10,i);return i\u003e\u003d0?(a\u003e\u003dv?10:a\u003e\u003dy?5:a\u003e\u003dx?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a\u003e\u003dv?10:a\u003e\u003dy?5:a\u003e\u003dx?2:1)}function _(t,e,r){var n\u003dMath.abs(e-t)/Math.max(0,r),i\u003dMath.pow(10,Math.floor(Math.log(n)/Math.LN10)),a\u003dn/i;return a\u003e\u003dv?i*\u003d10:a\u003e\u003dy?i*\u003d5:a\u003e\u003dx\u0026\u0026(i*\u003d2),e\u003ct?-i:i}function w(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1}function T(t,e,r){if(null\u003d\u003dr\u0026\u0026(r\u003ds),n\u003dt.length){if((e\u003d+e)\u003c\u003d0||n\u003c2)return+r(t[0],0,t);if(e\u003e\u003d1)return+r(t[n-1],n-1,t);var n,i\u003d(n-1)*e,a\u003dMath.floor(i),o\u003d+r(t[a],a,t);return o+(+r(t[a+1],a+1,t)-o)*(i-a)}}function k(t,e){var r,n,i\u003dt.length,a\u003d-1;if(null\u003d\u003de){for(;++a\u003ci;)if(null!\u003d(r\u003dt[a])\u0026\u0026r\u003e\u003dr)for(n\u003dr;++a\u003ci;)null!\u003d(r\u003dt[a])\u0026\u0026n\u003er\u0026\u0026(n\u003dr)}else for(;++a\u003ci;)if(null!\u003d(r\u003de(t[a],a,t))\u0026\u0026r\u003e\u003dr)for(n\u003dr;++a\u003ci;)null!\u003d(r\u003de(t[a],a,t))\u0026\u0026n\u003er\u0026\u0026(n\u003dr);return n}function M(t){if(!(i\u003dt.length))return[];for(var e\u003d-1,r\u003dk(t,A),n\u003dnew Array(r);++e\u003cr;)for(var i,a\u003d-1,o\u003dn[e]\u003dnew Array(i);++a\u003ci;)o[a]\u003dt[a][e];return n}function A(t){return t.length}t.bisect\u003di,t.bisectRight\u003di,t.bisectLeft\u003da,t.ascending\u003de,t.bisector\u003dr,t.cross\u003dfunction(t,e,r){var n,i,a,s,l\u003dt.length,c\u003de.length,u\u003dnew Array(l*c);for(null\u003d\u003dr\u0026\u0026(r\u003do),n\u003da\u003d0;n\u003cl;++n)for(s\u003dt[n],i\u003d0;i\u003cc;++i,++a)u[a]\u003dr(s,e[i]);return u},t.descending\u003dfunction(t,e){return e\u003ct?-1:e\u003et?1:e\u003e\u003dt?0:NaN},t.deviation\u003dc,t.extent\u003du,t.histogram\u003dfunction(){var t\u003dm,e\u003du,r\u003dw;function n(n){var a,o,s\u003dn.length,l\u003dnew Array(s);for(a\u003d0;a\u003cs;++a)l[a]\u003dt(n[a],a,n);var c\u003de(l),u\u003dc[0],f\u003dc[1],h\u003dr(l,u,f);Array.isArray(h)||(h\u003d_(u,f,h),h\u003dg(Math.ceil(u/h)*h,f,h));for(var p\u003dh.length;h[0]\u003c\u003du;)h.shift(),--p;for(;h[p-1]\u003ef;)h.pop(),--p;var d,m\u003dnew Array(p+1);for(a\u003d0;a\u003c\u003dp;++a)(d\u003dm[a]\u003d[]).x0\u003da\u003e0?h[a-1]:u,d.x1\u003da\u003cp?h[a]:f;for(a\u003d0;a\u003cs;++a)u\u003c\u003d(o\u003dl[a])\u0026\u0026o\u003c\u003df\u0026\u0026m[i(h,o,0,p)].push(n[a]);return m}return n.value\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:d(e),n):t},n.domain\u003dfunction(t){return arguments.length?(e\u003d\"function\"\u003d\u003dtypeof t?t:d([t[0],t[1]]),n):e},n.thresholds\u003dfunction(t){return arguments.length?(r\u003d\"function\"\u003d\u003dtypeof t?t:Array.isArray(t)?d(h.call(t)):d(t),n):r},n},t.thresholdFreedmanDiaconis\u003dfunction(t,r,n){return t\u003dp.call(t,s).sort(e),Math.ceil((n-r)/(2*(T(t,.75)-T(t,.25))*Math.pow(t.length,-1/3)))},t.thresholdScott\u003dfunction(t,e,r){return Math.ceil((r-e)/(3.5*c(t)*Math.pow(t.length,-1/3)))},t.thresholdSturges\u003dw,t.max\u003dfunction(t,e){var r,n,i\u003dt.length,a\u003d-1;if(null\u003d\u003de){for(;++a\u003ci;)if(null!\u003d(r\u003dt[a])\u0026\u0026r\u003e\u003dr)for(n\u003dr;++a\u003ci;)null!\u003d(r\u003dt[a])\u0026\u0026r\u003en\u0026\u0026(n\u003dr)}else for(;++a\u003ci;)if(null!\u003d(r\u003de(t[a],a,t))\u0026\u0026r\u003e\u003dr)for(n\u003dr;++a\u003ci;)null!\u003d(r\u003de(t[a],a,t))\u0026\u0026r\u003en\u0026\u0026(n\u003dr);return n},t.mean\u003dfunction(t,e){var r,n\u003dt.length,i\u003dn,a\u003d-1,o\u003d0;if(null\u003d\u003de)for(;++a\u003cn;)isNaN(r\u003ds(t[a]))?--i:o+\u003dr;else for(;++a\u003cn;)isNaN(r\u003ds(e(t[a],a,t)))?--i:o+\u003dr;if(i)return o/i},t.median\u003dfunction(t,r){var n,i\u003dt.length,a\u003d-1,o\u003d[];if(null\u003d\u003dr)for(;++a\u003ci;)isNaN(n\u003ds(t[a]))||o.push(n);else for(;++a\u003ci;)isNaN(n\u003ds(r(t[a],a,t)))||o.push(n);return T(o.sort(e),.5)},t.merge\u003dfunction(t){for(var e,r,n,i\u003dt.length,a\u003d-1,o\u003d0;++a\u003ci;)o+\u003dt[a].length;for(r\u003dnew Array(o);--i\u003e\u003d0;)for(e\u003d(n\u003dt[i]).length;--e\u003e\u003d0;)r[--o]\u003dn[e];return r},t.min\u003dk,t.pairs\u003dfunction(t,e){null\u003d\u003de\u0026\u0026(e\u003do);for(var r\u003d0,n\u003dt.length-1,i\u003dt[0],a\u003dnew Array(n\u003c0?0:n);r\u003cn;)a[r]\u003de(i,i\u003dt[++r]);return a},t.permute\u003dfunction(t,e){for(var r\u003de.length,n\u003dnew Array(r);r--;)n[r]\u003dt[e[r]];return n},t.quantile\u003dT,t.range\u003dg,t.scan\u003dfunction(t,r){if(n\u003dt.length){var n,i,a\u003d0,o\u003d0,s\u003dt[o];for(null\u003d\u003dr\u0026\u0026(r\u003de);++a\u003cn;)(r(i\u003dt[a],s)\u003c0||0!\u003d\u003dr(s,s))\u0026\u0026(s\u003di,o\u003da);return 0\u003d\u003d\u003dr(s,s)?o:void 0}},t.shuffle\u003dfunction(t,e,r){for(var n,i,a\u003d(null\u003d\u003dr?t.length:r)-(e\u003dnull\u003d\u003de?0:+e);a;)i\u003dMath.random()*a--|0,n\u003dt[a+e],t[a+e]\u003dt[i+e],t[i+e]\u003dn;return t},t.sum\u003dfunction(t,e){var r,n\u003dt.length,i\u003d-1,a\u003d0;if(null\u003d\u003de)for(;++i\u003cn;)(r\u003d+t[i])\u0026\u0026(a+\u003dr);else for(;++i\u003cn;)(r\u003d+e(t[i],i,t))\u0026\u0026(a+\u003dr);return a},t.ticks\u003dfunction(t,e,r){var n,i,a,o,s\u003d-1;if(r\u003d+r,(t\u003d+t)\u003d\u003d\u003d(e\u003d+e)\u0026\u0026r\u003e0)return[t];if((n\u003de\u003ct)\u0026\u0026(i\u003dt,t\u003de,e\u003di),0\u003d\u003d\u003d(o\u003db(t,e,r))||!isFinite(o))return[];if(o\u003e0)for(t\u003dMath.ceil(t/o),e\u003dMath.floor(e/o),a\u003dnew Array(i\u003dMath.ceil(e-t+1));++s\u003ci;)a[s]\u003d(t+s)*o;else for(t\u003dMath.floor(t*o),e\u003dMath.ceil(e*o),a\u003dnew Array(i\u003dMath.ceil(t-e+1));++s\u003ci;)a[s]\u003d(t-s)/o;return n\u0026\u0026a.reverse(),a},t.tickIncrement\u003db,t.tickStep\u003d_,t.transpose\u003dM,t.variance\u003dl,t.zip\u003dfunction(){return M(arguments)},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],163:[function(t,e,r){!function(t,n){n(\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?r:t.d3\u003dt.d3||{})}(this,(function(t){\"use strict\";function e(){}function r(t,r){var n\u003dnew e;if(t instanceof e)t.each((function(t,e){n.set(e,t)}));else if(Array.isArray(t)){var i,a\u003d-1,o\u003dt.length;if(null\u003d\u003dr)for(;++a\u003co;)n.set(a,t[a]);else for(;++a\u003co;)n.set(r(i\u003dt[a],a,t),i)}else if(t)for(var s in t)n.set(s,t[s]);return n}function n(){return{}}function i(t,e,r){t[e]\u003dr}function a(){return r()}function o(t,e,r){t.set(e,r)}function s(){}e.prototype\u003dr.prototype\u003d{constructor:e,has:function(t){return\"$\"+t in this},get:function(t){return this[\"$\"+t]},set:function(t,e){return this[\"$\"+t]\u003de,this},remove:function(t){var e\u003d\"$\"+t;return e in this\u0026\u0026delete this[e]},clear:function(){for(var t in this)\"$\"\u003d\u003d\u003dt[0]\u0026\u0026delete this[t]},keys:function(){var t\u003d[];for(var e in this)\"$\"\u003d\u003d\u003de[0]\u0026\u0026t.push(e.slice(1));return t},values:function(){var t\u003d[];for(var e in this)\"$\"\u003d\u003d\u003de[0]\u0026\u0026t.push(this[e]);return t},entries:function(){var t\u003d[];for(var e in this)\"$\"\u003d\u003d\u003de[0]\u0026\u0026t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t\u003d0;for(var e in this)\"$\"\u003d\u003d\u003de[0]\u0026\u0026++t;return t},empty:function(){for(var t in this)if(\"$\"\u003d\u003d\u003dt[0])return!1;return!0},each:function(t){for(var e in this)\"$\"\u003d\u003d\u003de[0]\u0026\u0026t(this[e],e.slice(1),this)}};var l\u003dr.prototype;function c(t,e){var r\u003dnew s;if(t instanceof s)t.each((function(t){r.add(t)}));else if(t){var n\u003d-1,i\u003dt.length;if(null\u003d\u003de)for(;++n\u003ci;)r.add(t[n]);else for(;++n\u003ci;)r.add(e(t[n],n,t))}return r}s.prototype\u003dc.prototype\u003d{constructor:s,has:l.has,add:function(t){return this[\"$\"+(t+\u003d\"\")]\u003dt,this},remove:l.remove,clear:l.clear,values:l.keys,size:l.size,empty:l.empty,each:l.each},t.nest\u003dfunction(){var t,e,s,l\u003d[],c\u003d[];function u(n,i,a,o){if(i\u003e\u003dl.length)return null!\u003dt\u0026\u0026n.sort(t),null!\u003de?e(n):n;for(var s,c,f,h\u003d-1,p\u003dn.length,d\u003dl[i++],m\u003dr(),g\u003da();++h\u003cp;)(f\u003dm.get(s\u003dd(c\u003dn[h])+\"\"))?f.push(c):m.set(s,[c]);return m.each((function(t,e){o(g,e,u(t,i,a,o))})),g}return s\u003d{object:function(t){return u(t,0,n,i)},map:function(t){return u(t,0,a,o)},entries:function(t){return function t(r,n){if(++n\u003el.length)return r;var i,a\u003dc[n-1];return null!\u003de\u0026\u0026n\u003e\u003dl.length?i\u003dr.entries():(i\u003d[],r.each((function(e,r){i.push({key:r,values:t(e,n)})}))),null!\u003da?i.sort((function(t,e){return a(t.key,e.key)})):i}(u(t,0,a,o),0)},key:function(t){return l.push(t),s},sortKeys:function(t){return c[l.length-1]\u003dt,s},sortValues:function(e){return t\u003de,s},rollup:function(t){return e\u003dt,s}}},t.set\u003dc,t.map\u003dr,t.keys\u003dfunction(t){var e\u003d[];for(var r in t)e.push(r);return e},t.values\u003dfunction(t){var e\u003d[];for(var r in t)e.push(t[r]);return e},t.entries\u003dfunction(t){var e\u003d[];for(var r in t)e.push({key:r,value:t[r]});return e},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],164:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).d3\u003dt.d3||{})}(this,(function(t){\"use strict\";function e(t,e,r){t.prototype\u003de.prototype\u003dr,r.constructor\u003dt}function r(t,e){var r\u003dObject.create(t.prototype);for(var n in e)r[n]\u003de[n];return r}function n(){}var i\u003d\"\\\\s*([+-]?\\\\d+)\\\\s*\",a\u003d\"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",o\u003d\"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",s\u003d/^#([0-9a-f]{3,8})$/,l\u003dnew RegExp(\"^rgb\\\\(\"+[i,i,i]+\"\\\\)$\"),c\u003dnew RegExp(\"^rgb\\\\(\"+[o,o,o]+\"\\\\)$\"),u\u003dnew RegExp(\"^rgba\\\\(\"+[i,i,i,a]+\"\\\\)$\"),f\u003dnew RegExp(\"^rgba\\\\(\"+[o,o,o,a]+\"\\\\)$\"),h\u003dnew RegExp(\"^hsl\\\\(\"+[a,o,o]+\"\\\\)$\"),p\u003dnew RegExp(\"^hsla\\\\(\"+[a,o,o,a]+\"\\\\)$\"),d\u003d{aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function m(){return this.rgb().formatHex()}function g(){return this.rgb().formatRgb()}function v(t){var e,r;return t\u003d(t+\"\").trim().toLowerCase(),(e\u003ds.exec(t))?(r\u003de[1].length,e\u003dparseInt(e[1],16),6\u003d\u003d\u003dr?y(e):3\u003d\u003d\u003dr?new w(e\u003e\u003e8\u002615|e\u003e\u003e4\u0026240,e\u003e\u003e4\u002615|240\u0026e,(15\u0026e)\u003c\u003c4|15\u0026e,1):8\u003d\u003d\u003dr?x(e\u003e\u003e24\u0026255,e\u003e\u003e16\u0026255,e\u003e\u003e8\u0026255,(255\u0026e)/255):4\u003d\u003d\u003dr?x(e\u003e\u003e12\u002615|e\u003e\u003e8\u0026240,e\u003e\u003e8\u002615|e\u003e\u003e4\u0026240,e\u003e\u003e4\u002615|240\u0026e,((15\u0026e)\u003c\u003c4|15\u0026e)/255):null):(e\u003dl.exec(t))?new w(e[1],e[2],e[3],1):(e\u003dc.exec(t))?new w(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e\u003du.exec(t))?x(e[1],e[2],e[3],e[4]):(e\u003df.exec(t))?x(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e\u003dh.exec(t))?A(e[1],e[2]/100,e[3]/100,1):(e\u003dp.exec(t))?A(e[1],e[2]/100,e[3]/100,e[4]):d.hasOwnProperty(t)?y(d[t]):\"transparent\"\u003d\u003d\u003dt?new w(NaN,NaN,NaN,0):null}function y(t){return new w(t\u003e\u003e16\u0026255,t\u003e\u003e8\u0026255,255\u0026t,1)}function x(t,e,r,n){return n\u003c\u003d0\u0026\u0026(t\u003de\u003dr\u003dNaN),new w(t,e,r,n)}function b(t){return t instanceof n||(t\u003dv(t)),t?new w((t\u003dt.rgb()).r,t.g,t.b,t.opacity):new w}function _(t,e,r,n){return 1\u003d\u003d\u003darguments.length?b(t):new w(t,e,r,null\u003d\u003dn?1:n)}function w(t,e,r,n){this.r\u003d+t,this.g\u003d+e,this.b\u003d+r,this.opacity\u003d+n}function T(){return\"#\"+M(this.r)+M(this.g)+M(this.b)}function k(){var t\u003dthis.opacity;return(1\u003d\u003d\u003d(t\u003disNaN(t)?1:Math.max(0,Math.min(1,t)))?\"rgb(\":\"rgba(\")+Math.max(0,Math.min(255,Math.round(this.r)||0))+\", \"+Math.max(0,Math.min(255,Math.round(this.g)||0))+\", \"+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1\u003d\u003d\u003dt?\")\":\", \"+t+\")\")}function M(t){return((t\u003dMath.max(0,Math.min(255,Math.round(t)||0)))\u003c16?\"0\":\"\")+t.toString(16)}function A(t,e,r,n){return n\u003c\u003d0?t\u003de\u003dr\u003dNaN:r\u003c\u003d0||r\u003e\u003d1?t\u003de\u003dNaN:e\u003c\u003d0\u0026\u0026(t\u003dNaN),new L(t,e,r,n)}function S(t){if(t instanceof L)return new L(t.h,t.s,t.l,t.opacity);if(t instanceof n||(t\u003dv(t)),!t)return new L;if(t instanceof L)return t;var e\u003d(t\u003dt.rgb()).r/255,r\u003dt.g/255,i\u003dt.b/255,a\u003dMath.min(e,r,i),o\u003dMath.max(e,r,i),s\u003dNaN,l\u003do-a,c\u003d(o+a)/2;return l?(s\u003de\u003d\u003d\u003do?(r-i)/l+6*(r\u003ci):r\u003d\u003d\u003do?(i-e)/l+2:(e-r)/l+4,l/\u003dc\u003c.5?o+a:2-o-a,s*\u003d60):l\u003dc\u003e0\u0026\u0026c\u003c1?0:s,new L(s,l,c,t.opacity)}function E(t,e,r,n){return 1\u003d\u003d\u003darguments.length?S(t):new L(t,e,r,null\u003d\u003dn?1:n)}function L(t,e,r,n){this.h\u003d+t,this.s\u003d+e,this.l\u003d+r,this.opacity\u003d+n}function C(t,e,r){return 255*(t\u003c60?e+(r-e)*t/60:t\u003c180?r:t\u003c240?e+(r-e)*(240-t)/60:e)}e(n,v,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:m,formatHex:m,formatHsl:function(){return S(this).formatHsl()},formatRgb:g,toString:g}),e(w,_,r(n,{brighter:function(t){return t\u003dnull\u003d\u003dt?1/.7:Math.pow(1/.7,t),new w(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t\u003dnull\u003d\u003dt?.7:Math.pow(.7,t),new w(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return-.5\u003c\u003dthis.r\u0026\u0026this.r\u003c255.5\u0026\u0026-.5\u003c\u003dthis.g\u0026\u0026this.g\u003c255.5\u0026\u0026-.5\u003c\u003dthis.b\u0026\u0026this.b\u003c255.5\u0026\u00260\u003c\u003dthis.opacity\u0026\u0026this.opacity\u003c\u003d1},hex:T,formatHex:T,formatRgb:k,toString:k})),e(L,E,r(n,{brighter:function(t){return t\u003dnull\u003d\u003dt?1/.7:Math.pow(1/.7,t),new L(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t\u003dnull\u003d\u003dt?.7:Math.pow(.7,t),new L(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t\u003dthis.h%360+360*(this.h\u003c0),e\u003disNaN(t)||isNaN(this.s)?0:this.s,r\u003dthis.l,n\u003dr+(r\u003c.5?r:1-r)*e,i\u003d2*r-n;return new w(C(t\u003e\u003d240?t-240:t+120,i,n),C(t,i,n),C(t\u003c120?t+240:t-120,i,n),this.opacity)},displayable:function(){return(0\u003c\u003dthis.s\u0026\u0026this.s\u003c\u003d1||isNaN(this.s))\u0026\u00260\u003c\u003dthis.l\u0026\u0026this.l\u003c\u003d1\u0026\u00260\u003c\u003dthis.opacity\u0026\u0026this.opacity\u003c\u003d1},formatHsl:function(){var t\u003dthis.opacity;return(1\u003d\u003d\u003d(t\u003disNaN(t)?1:Math.max(0,Math.min(1,t)))?\"hsl(\":\"hsla(\")+(this.h||0)+\", \"+100*(this.s||0)+\"%, \"+100*(this.l||0)+\"%\"+(1\u003d\u003d\u003dt?\")\":\", \"+t+\")\")}}));var P\u003dMath.PI/180,I\u003d180/Math.PI,O\u003d6/29,z\u003d3*O*O;function D(t){if(t instanceof F)return new F(t.l,t.a,t.b,t.opacity);if(t instanceof H)return G(t);t instanceof w||(t\u003db(t));var e,r,n\u003dU(t.r),i\u003dU(t.g),a\u003dU(t.b),o\u003dB((.2225045*n+.7168786*i+.0606169*a)/1);return n\u003d\u003d\u003di\u0026\u0026i\u003d\u003d\u003da?e\u003dr\u003do:(e\u003dB((.4360747*n+.3850649*i+.1430804*a)/.96422),r\u003dB((.0139322*n+.0971045*i+.7141733*a)/.82521)),new F(116*o-16,500*(e-o),200*(o-r),t.opacity)}function R(t,e,r,n){return 1\u003d\u003d\u003darguments.length?D(t):new F(t,e,r,null\u003d\u003dn?1:n)}function F(t,e,r,n){this.l\u003d+t,this.a\u003d+e,this.b\u003d+r,this.opacity\u003d+n}function B(t){return t\u003e.008856451679035631?Math.pow(t,1/3):t/z+4/29}function N(t){return t\u003eO?t*t*t:z*(t-4/29)}function j(t){return 255*(t\u003c\u003d.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function U(t){return(t/\u003d255)\u003c\u003d.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function V(t){if(t instanceof H)return new H(t.h,t.c,t.l,t.opacity);if(t instanceof F||(t\u003dD(t)),0\u003d\u003d\u003dt.a\u0026\u00260\u003d\u003d\u003dt.b)return new H(NaN,0\u003ct.l\u0026\u0026t.l\u003c100?0:NaN,t.l,t.opacity);var e\u003dMath.atan2(t.b,t.a)*I;return new H(e\u003c0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function q(t,e,r,n){return 1\u003d\u003d\u003darguments.length?V(t):new H(t,e,r,null\u003d\u003dn?1:n)}function H(t,e,r,n){this.h\u003d+t,this.c\u003d+e,this.l\u003d+r,this.opacity\u003d+n}function G(t){if(isNaN(t.h))return new F(t.l,0,0,t.opacity);var e\u003dt.h*P;return new F(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}e(F,R,r(n,{brighter:function(t){return new F(this.l+18*(null\u003d\u003dt?1:t),this.a,this.b,this.opacity)},darker:function(t){return new F(this.l-18*(null\u003d\u003dt?1:t),this.a,this.b,this.opacity)},rgb:function(){var t\u003d(this.l+16)/116,e\u003disNaN(this.a)?t:t+this.a/500,r\u003disNaN(this.b)?t:t-this.b/200;return new w(j(3.1338561*(e\u003d.96422*N(e))-1.6168667*(t\u003d1*N(t))-.4906146*(r\u003d.82521*N(r))),j(-.9787684*e+1.9161415*t+.033454*r),j(.0719453*e-.2289914*t+1.4052427*r),this.opacity)}})),e(H,q,r(n,{brighter:function(t){return new H(this.h,this.c,this.l+18*(null\u003d\u003dt?1:t),this.opacity)},darker:function(t){return new H(this.h,this.c,this.l-18*(null\u003d\u003dt?1:t),this.opacity)},rgb:function(){return G(this).rgb()}}));var Y\u003d-.14861,W\u003d1.78277,X\u003d-.29227,Z\u003d-.90649,J\u003d1.97294,K\u003dJ*Z,Q\u003dJ*W,$\u003dW*X-Z*Y;function tt(t){if(t instanceof rt)return new rt(t.h,t.s,t.l,t.opacity);t instanceof w||(t\u003db(t));var e\u003dt.r/255,r\u003dt.g/255,n\u003dt.b/255,i\u003d($*n+K*e-Q*r)/($+K-Q),a\u003dn-i,o\u003d(J*(r-i)-X*a)/Z,s\u003dMath.sqrt(o*o+a*a)/(J*i*(1-i)),l\u003ds?Math.atan2(o,a)*I-120:NaN;return new rt(l\u003c0?l+360:l,s,i,t.opacity)}function et(t,e,r,n){return 1\u003d\u003d\u003darguments.length?tt(t):new rt(t,e,r,null\u003d\u003dn?1:n)}function rt(t,e,r,n){this.h\u003d+t,this.s\u003d+e,this.l\u003d+r,this.opacity\u003d+n}e(rt,et,r(n,{brighter:function(t){return t\u003dnull\u003d\u003dt?1/.7:Math.pow(1/.7,t),new rt(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t\u003dnull\u003d\u003dt?.7:Math.pow(.7,t),new rt(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t\u003disNaN(this.h)?0:(this.h+120)*P,e\u003d+this.l,r\u003disNaN(this.s)?0:this.s*e*(1-e),n\u003dMath.cos(t),i\u003dMath.sin(t);return new w(255*(e+r*(Y*n+W*i)),255*(e+r*(X*n+Z*i)),255*(e+r*(J*n)),this.opacity)}})),t.color\u003dv,t.cubehelix\u003det,t.gray\u003dfunction(t,e){return new F(t,0,0,null\u003d\u003de?1:e)},t.hcl\u003dq,t.hsl\u003dE,t.lab\u003dR,t.lch\u003dfunction(t,e,r,n){return 1\u003d\u003d\u003darguments.length?V(t):new H(r,e,t,null\u003d\u003dn?1:n)},t.rgb\u003d_,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],165:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).d3\u003dt.d3||{})}(this,(function(t){\"use strict\";var e\u003d{value:function(){}};function r(){for(var t,e\u003d0,r\u003darguments.length,i\u003d{};e\u003cr;++e){if(!(t\u003darguments[e]+\"\")||t in i||/[\\s.]/.test(t))throw new Error(\"illegal type: \"+t);i[t]\u003d[]}return new n(i)}function n(t){this._\u003dt}function i(t,e){return t.trim().split(/^|\\s+/).map((function(t){var r\u003d\"\",n\u003dt.indexOf(\".\");if(n\u003e\u003d0\u0026\u0026(r\u003dt.slice(n+1),t\u003dt.slice(0,n)),t\u0026\u0026!e.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);return{type:t,name:r}}))}function a(t,e){for(var r,n\u003d0,i\u003dt.length;n\u003ci;++n)if((r\u003dt[n]).name\u003d\u003d\u003de)return r.value}function o(t,r,n){for(var i\u003d0,a\u003dt.length;i\u003ca;++i)if(t[i].name\u003d\u003d\u003dr){t[i]\u003de,t\u003dt.slice(0,i).concat(t.slice(i+1));break}return null!\u003dn\u0026\u0026t.push({name:r,value:n}),t}n.prototype\u003dr.prototype\u003d{constructor:n,on:function(t,e){var r,n\u003dthis._,s\u003di(t+\"\",n),l\u003d-1,c\u003ds.length;if(!(arguments.length\u003c2)){if(null!\u003de\u0026\u0026\"function\"!\u003dtypeof e)throw new Error(\"invalid callback: \"+e);for(;++l\u003cc;)if(r\u003d(t\u003ds[l]).type)n[r]\u003do(n[r],t.name,e);else if(null\u003d\u003de)for(r in n)n[r]\u003do(n[r],t.name,null);return this}for(;++l\u003cc;)if((r\u003d(t\u003ds[l]).type)\u0026\u0026(r\u003da(n[r],t.name)))return r},copy:function(){var t\u003d{},e\u003dthis._;for(var r in e)t[r]\u003de[r].slice();return new n(t)},call:function(t,e){if((r\u003darguments.length-2)\u003e0)for(var r,n,i\u003dnew Array(r),a\u003d0;a\u003cr;++a)i[a]\u003darguments[a+2];if(!this._.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);for(a\u003d0,r\u003d(n\u003dthis._[t]).length;a\u003cr;++a)n[a].value.apply(e,i)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error(\"unknown type: \"+t);for(var n\u003dthis._[t],i\u003d0,a\u003dn.length;i\u003ca;++i)n[i].value.apply(e,r)}},t.dispatch\u003dr,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],166:[function(t,e,r){!function(n,i){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?i(r,t(\"d3-quadtree\"),t(\"d3-collection\"),t(\"d3-dispatch\"),t(\"d3-timer\")):i(n.d3\u003dn.d3||{},n.d3,n.d3,n.d3,n.d3)}(this,(function(t,e,r,n,i){\"use strict\";function a(t){return function(){return t}}function o(){return 1e-6*(Math.random()-.5)}function s(t){return t.x+t.vx}function l(t){return t.y+t.vy}function c(t){return t.index}function u(t,e){var r\u003dt.get(e);if(!r)throw new Error(\"missing: \"+e);return r}function f(t){return t.x}function h(t){return t.y}var p\u003dMath.PI*(3-Math.sqrt(5));t.forceCenter\u003dfunction(t,e){var r;function n(){var n,i,a\u003dr.length,o\u003d0,s\u003d0;for(n\u003d0;n\u003ca;++n)o+\u003d(i\u003dr[n]).x,s+\u003di.y;for(o\u003do/a-t,s\u003ds/a-e,n\u003d0;n\u003ca;++n)(i\u003dr[n]).x-\u003do,i.y-\u003ds}return null\u003d\u003dt\u0026\u0026(t\u003d0),null\u003d\u003de\u0026\u0026(e\u003d0),n.initialize\u003dfunction(t){r\u003dt},n.x\u003dfunction(e){return arguments.length?(t\u003d+e,n):t},n.y\u003dfunction(t){return arguments.length?(e\u003d+t,n):e},n},t.forceCollide\u003dfunction(t){var r,n,i\u003d1,c\u003d1;function u(){for(var t,a,u,h,p,d,m,g\u003dr.length,v\u003d0;v\u003cc;++v)for(a\u003de.quadtree(r,s,l).visitAfter(f),t\u003d0;t\u003cg;++t)u\u003dr[t],d\u003dn[u.index],m\u003dd*d,h\u003du.x+u.vx,p\u003du.y+u.vy,a.visit(y);function y(t,e,r,n,a){var s\u003dt.data,l\u003dt.r,c\u003dd+l;if(!s)return e\u003eh+c||n\u003ch-c||r\u003ep+c||a\u003cp-c;if(s.index\u003eu.index){var f\u003dh-s.x-s.vx,g\u003dp-s.y-s.vy,v\u003df*f+g*g;v\u003cc*c\u0026\u0026(0\u003d\u003d\u003df\u0026\u0026(v+\u003d(f\u003do())*f),0\u003d\u003d\u003dg\u0026\u0026(v+\u003d(g\u003do())*g),v\u003d(c-(v\u003dMath.sqrt(v)))/v*i,u.vx+\u003d(f*\u003dv)*(c\u003d(l*\u003dl)/(m+l)),u.vy+\u003d(g*\u003dv)*c,s.vx-\u003df*(c\u003d1-c),s.vy-\u003dg*c)}}}function f(t){if(t.data)return t.r\u003dn[t.data.index];for(var e\u003dt.r\u003d0;e\u003c4;++e)t[e]\u0026\u0026t[e].r\u003et.r\u0026\u0026(t.r\u003dt[e].r)}function h(){if(r){var e,i,a\u003dr.length;for(n\u003dnew Array(a),e\u003d0;e\u003ca;++e)i\u003dr[e],n[i.index]\u003d+t(i,e,r)}}return\"function\"!\u003dtypeof t\u0026\u0026(t\u003da(null\u003d\u003dt?1:+t)),u.initialize\u003dfunction(t){r\u003dt,h()},u.iterations\u003dfunction(t){return arguments.length?(c\u003d+t,u):c},u.strength\u003dfunction(t){return arguments.length?(i\u003d+t,u):i},u.radius\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:a(+e),h(),u):t},u},t.forceLink\u003dfunction(t){var e,n,i,s,l,f\u003dc,h\u003dfunction(t){return 1/Math.min(s[t.source.index],s[t.target.index])},p\u003da(30),d\u003d1;function m(r){for(var i\u003d0,a\u003dt.length;i\u003cd;++i)for(var s,c,u,f,h,p,m,g\u003d0;g\u003ca;++g)c\u003d(s\u003dt[g]).source,f\u003d(u\u003ds.target).x+u.vx-c.x-c.vx||o(),h\u003du.y+u.vy-c.y-c.vy||o(),f*\u003dp\u003d((p\u003dMath.sqrt(f*f+h*h))-n[g])/p*r*e[g],h*\u003dp,u.vx-\u003df*(m\u003dl[g]),u.vy-\u003dh*m,c.vx+\u003df*(m\u003d1-m),c.vy+\u003dh*m}function g(){if(i){var a,o,c\u003di.length,h\u003dt.length,p\u003dr.map(i,f);for(a\u003d0,s\u003dnew Array(c);a\u003ch;++a)(o\u003dt[a]).index\u003da,\"object\"!\u003dtypeof o.source\u0026\u0026(o.source\u003du(p,o.source)),\"object\"!\u003dtypeof o.target\u0026\u0026(o.target\u003du(p,o.target)),s[o.source.index]\u003d(s[o.source.index]||0)+1,s[o.target.index]\u003d(s[o.target.index]||0)+1;for(a\u003d0,l\u003dnew Array(h);a\u003ch;++a)o\u003dt[a],l[a]\u003ds[o.source.index]/(s[o.source.index]+s[o.target.index]);e\u003dnew Array(h),v(),n\u003dnew Array(h),y()}}function v(){if(i)for(var r\u003d0,n\u003dt.length;r\u003cn;++r)e[r]\u003d+h(t[r],r,t)}function y(){if(i)for(var e\u003d0,r\u003dt.length;e\u003cr;++e)n[e]\u003d+p(t[e],e,t)}return null\u003d\u003dt\u0026\u0026(t\u003d[]),m.initialize\u003dfunction(t){i\u003dt,g()},m.links\u003dfunction(e){return arguments.length?(t\u003de,g(),m):t},m.id\u003dfunction(t){return arguments.length?(f\u003dt,m):f},m.iterations\u003dfunction(t){return arguments.length?(d\u003d+t,m):d},m.strength\u003dfunction(t){return arguments.length?(h\u003d\"function\"\u003d\u003dtypeof t?t:a(+t),v(),m):h},m.distance\u003dfunction(t){return arguments.length?(p\u003d\"function\"\u003d\u003dtypeof t?t:a(+t),y(),m):p},m},t.forceManyBody\u003dfunction(){var t,r,n,i,s\u003da(-30),l\u003d1,c\u003d1/0,u\u003d.81;function p(i){var a,o\u003dt.length,s\u003de.quadtree(t,f,h).visitAfter(m);for(n\u003di,a\u003d0;a\u003co;++a)r\u003dt[a],s.visit(g)}function d(){if(t){var e,r,n\u003dt.length;for(i\u003dnew Array(n),e\u003d0;e\u003cn;++e)r\u003dt[e],i[r.index]\u003d+s(r,e,t)}}function m(t){var e,r,n,a,o,s\u003d0,l\u003d0;if(t.length){for(n\u003da\u003do\u003d0;o\u003c4;++o)(e\u003dt[o])\u0026\u0026(r\u003dMath.abs(e.value))\u0026\u0026(s+\u003de.value,l+\u003dr,n+\u003dr*e.x,a+\u003dr*e.y);t.x\u003dn/l,t.y\u003da/l}else{(e\u003dt).x\u003de.data.x,e.y\u003de.data.y;do{s+\u003di[e.data.index]}while(e\u003de.next)}t.value\u003ds}function g(t,e,a,s){if(!t.value)return!0;var f\u003dt.x-r.x,h\u003dt.y-r.y,p\u003ds-e,d\u003df*f+h*h;if(p*p/u\u003cd)return d\u003cc\u0026\u0026(0\u003d\u003d\u003df\u0026\u0026(d+\u003d(f\u003do())*f),0\u003d\u003d\u003dh\u0026\u0026(d+\u003d(h\u003do())*h),d\u003cl\u0026\u0026(d\u003dMath.sqrt(l*d)),r.vx+\u003df*t.value*n/d,r.vy+\u003dh*t.value*n/d),!0;if(!(t.length||d\u003e\u003dc)){(t.data!\u003d\u003dr||t.next)\u0026\u0026(0\u003d\u003d\u003df\u0026\u0026(d+\u003d(f\u003do())*f),0\u003d\u003d\u003dh\u0026\u0026(d+\u003d(h\u003do())*h),d\u003cl\u0026\u0026(d\u003dMath.sqrt(l*d)));do{t.data!\u003d\u003dr\u0026\u0026(p\u003di[t.data.index]*n/d,r.vx+\u003df*p,r.vy+\u003dh*p)}while(t\u003dt.next)}}return p.initialize\u003dfunction(e){t\u003de,d()},p.strength\u003dfunction(t){return arguments.length?(s\u003d\"function\"\u003d\u003dtypeof t?t:a(+t),d(),p):s},p.distanceMin\u003dfunction(t){return arguments.length?(l\u003dt*t,p):Math.sqrt(l)},p.distanceMax\u003dfunction(t){return arguments.length?(c\u003dt*t,p):Math.sqrt(c)},p.theta\u003dfunction(t){return arguments.length?(u\u003dt*t,p):Math.sqrt(u)},p},t.forceRadial\u003dfunction(t,e,r){var n,i,o,s\u003da(.1);function l(t){for(var a\u003d0,s\u003dn.length;a\u003cs;++a){var l\u003dn[a],c\u003dl.x-e||1e-6,u\u003dl.y-r||1e-6,f\u003dMath.sqrt(c*c+u*u),h\u003d(o[a]-f)*i[a]*t/f;l.vx+\u003dc*h,l.vy+\u003du*h}}function c(){if(n){var e,r\u003dn.length;for(i\u003dnew Array(r),o\u003dnew Array(r),e\u003d0;e\u003cr;++e)o[e]\u003d+t(n[e],e,n),i[e]\u003disNaN(o[e])?0:+s(n[e],e,n)}}return\"function\"!\u003dtypeof t\u0026\u0026(t\u003da(+t)),null\u003d\u003de\u0026\u0026(e\u003d0),null\u003d\u003dr\u0026\u0026(r\u003d0),l.initialize\u003dfunction(t){n\u003dt,c()},l.strength\u003dfunction(t){return arguments.length?(s\u003d\"function\"\u003d\u003dtypeof t?t:a(+t),c(),l):s},l.radius\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:a(+e),c(),l):t},l.x\u003dfunction(t){return arguments.length?(e\u003d+t,l):e},l.y\u003dfunction(t){return arguments.length?(r\u003d+t,l):r},l},t.forceSimulation\u003dfunction(t){var e,a\u003d1,o\u003d.001,s\u003d1-Math.pow(o,1/300),l\u003d0,c\u003d.6,u\u003dr.map(),f\u003di.timer(d),h\u003dn.dispatch(\"tick\",\"end\");function d(){m(),h.call(\"tick\",e),a\u003co\u0026\u0026(f.stop(),h.call(\"end\",e))}function m(r){var n,i,o\u003dt.length;void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d1);for(var f\u003d0;f\u003cr;++f)for(a+\u003d(l-a)*s,u.each((function(t){t(a)})),n\u003d0;n\u003co;++n)null\u003d\u003d(i\u003dt[n]).fx?i.x+\u003di.vx*\u003dc:(i.x\u003di.fx,i.vx\u003d0),null\u003d\u003di.fy?i.y+\u003di.vy*\u003dc:(i.y\u003di.fy,i.vy\u003d0);return e}function g(){for(var e,r\u003d0,n\u003dt.length;r\u003cn;++r){if((e\u003dt[r]).index\u003dr,null!\u003de.fx\u0026\u0026(e.x\u003de.fx),null!\u003de.fy\u0026\u0026(e.y\u003de.fy),isNaN(e.x)||isNaN(e.y)){var i\u003d10*Math.sqrt(r),a\u003dr*p;e.x\u003di*Math.cos(a),e.y\u003di*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))\u0026\u0026(e.vx\u003de.vy\u003d0)}}function v(e){return e.initialize\u0026\u0026e.initialize(t),e}return null\u003d\u003dt\u0026\u0026(t\u003d[]),g(),e\u003d{tick:m,restart:function(){return f.restart(d),e},stop:function(){return f.stop(),e},nodes:function(r){return arguments.length?(t\u003dr,g(),u.each(v),e):t},alpha:function(t){return arguments.length?(a\u003d+t,e):a},alphaMin:function(t){return arguments.length?(o\u003d+t,e):o},alphaDecay:function(t){return arguments.length?(s\u003d+t,e):+s},alphaTarget:function(t){return arguments.length?(l\u003d+t,e):l},velocityDecay:function(t){return arguments.length?(c\u003d1-t,e):1-c},force:function(t,r){return arguments.length\u003e1?(null\u003d\u003dr?u.remove(t):u.set(t,v(r)),e):u.get(t)},find:function(e,r,n){var i,a,o,s,l,c\u003d0,u\u003dt.length;for(null\u003d\u003dn?n\u003d1/0:n*\u003dn,c\u003d0;c\u003cu;++c)(o\u003d(i\u003de-(s\u003dt[c]).x)*i+(a\u003dr-s.y)*a)\u003cn\u0026\u0026(l\u003ds,n\u003do);return l},on:function(t,r){return arguments.length\u003e1?(h.on(t,r),e):h.on(t)}}},t.forceX\u003dfunction(t){var e,r,n,i\u003da(.1);function o(t){for(var i,a\u003d0,o\u003de.length;a\u003co;++a)(i\u003de[a]).vx+\u003d(n[a]-i.x)*r[a]*t}function s(){if(e){var a,o\u003de.length;for(r\u003dnew Array(o),n\u003dnew Array(o),a\u003d0;a\u003co;++a)r[a]\u003disNaN(n[a]\u003d+t(e[a],a,e))?0:+i(e[a],a,e)}}return\"function\"!\u003dtypeof t\u0026\u0026(t\u003da(null\u003d\u003dt?0:+t)),o.initialize\u003dfunction(t){e\u003dt,s()},o.strength\u003dfunction(t){return arguments.length?(i\u003d\"function\"\u003d\u003dtypeof t?t:a(+t),s(),o):i},o.x\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:a(+e),s(),o):t},o},t.forceY\u003dfunction(t){var e,r,n,i\u003da(.1);function o(t){for(var i,a\u003d0,o\u003de.length;a\u003co;++a)(i\u003de[a]).vy+\u003d(n[a]-i.y)*r[a]*t}function s(){if(e){var a,o\u003de.length;for(r\u003dnew Array(o),n\u003dnew Array(o),a\u003d0;a\u003co;++a)r[a]\u003disNaN(n[a]\u003d+t(e[a],a,e))?0:+i(e[a],a,e)}}return\"function\"!\u003dtypeof t\u0026\u0026(t\u003da(null\u003d\u003dt?0:+t)),o.initialize\u003dfunction(t){e\u003dt,s()},o.strength\u003dfunction(t){return arguments.length?(i\u003d\"function\"\u003d\u003dtypeof t?t:a(+t),s(),o):i},o.y\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:a(+e),s(),o):t},o},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-collection\":163,\"d3-dispatch\":165,\"d3-quadtree\":170,\"d3-timer\":174}],167:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).d3\u003dt.d3||{})}(this,(function(t){\"use strict\";function e(t,e){return t.parent\u003d\u003d\u003de.parent?1:2}function r(t,e){return t+e.x}function n(t,e){return Math.max(t,e.y)}function i(t){var e\u003d0,r\u003dt.children,n\u003dr\u0026\u0026r.length;if(n)for(;--n\u003e\u003d0;)e+\u003dr[n].value;else e\u003d1;t.value\u003de}function a(t,e){var r,n,i,a,s,u\u003dnew c(t),f\u003d+t.value\u0026\u0026(u.value\u003dt.value),h\u003d[u];for(null\u003d\u003de\u0026\u0026(e\u003do);r\u003dh.pop();)if(f\u0026\u0026(r.value\u003d+r.data.value),(i\u003de(r.data))\u0026\u0026(s\u003di.length))for(r.children\u003dnew Array(s),a\u003ds-1;a\u003e\u003d0;--a)h.push(n\u003dr.children[a]\u003dnew c(i[a])),n.parent\u003dr,n.depth\u003dr.depth+1;return u.eachBefore(l)}function o(t){return t.children}function s(t){t.data\u003dt.data.data}function l(t){var e\u003d0;do{t.height\u003de}while((t\u003dt.parent)\u0026\u0026t.height\u003c++e)}function c(t){this.data\u003dt,this.depth\u003dthis.height\u003d0,this.parent\u003dnull}c.prototype\u003da.prototype\u003d{constructor:c,count:function(){return this.eachAfter(i)},each:function(t){var e,r,n,i,a\u003dthis,o\u003d[a];do{for(e\u003do.reverse(),o\u003d[];a\u003de.pop();)if(t(a),r\u003da.children)for(n\u003d0,i\u003dr.length;n\u003ci;++n)o.push(r[n])}while(o.length);return this},eachAfter:function(t){for(var e,r,n,i\u003dthis,a\u003d[i],o\u003d[];i\u003da.pop();)if(o.push(i),e\u003di.children)for(r\u003d0,n\u003de.length;r\u003cn;++r)a.push(e[r]);for(;i\u003do.pop();)t(i);return this},eachBefore:function(t){for(var e,r,n\u003dthis,i\u003d[n];n\u003di.pop();)if(t(n),e\u003dn.children)for(r\u003de.length-1;r\u003e\u003d0;--r)i.push(e[r]);return this},sum:function(t){return this.eachAfter((function(e){for(var r\u003d+t(e.data)||0,n\u003de.children,i\u003dn\u0026\u0026n.length;--i\u003e\u003d0;)r+\u003dn[i].value;e.value\u003dr}))},sort:function(t){return this.eachBefore((function(e){e.children\u0026\u0026e.children.sort(t)}))},path:function(t){for(var e\u003dthis,r\u003dfunction(t,e){if(t\u003d\u003d\u003de)return t;var r\u003dt.ancestors(),n\u003de.ancestors(),i\u003dnull;t\u003dr.pop(),e\u003dn.pop();for(;t\u003d\u003d\u003de;)i\u003dt,t\u003dr.pop(),e\u003dn.pop();return i}(e,t),n\u003d[e];e!\u003d\u003dr;)e\u003de.parent,n.push(e);for(var i\u003dn.length;t!\u003d\u003dr;)n.splice(i,0,t),t\u003dt.parent;return n},ancestors:function(){for(var t\u003dthis,e\u003d[t];t\u003dt.parent;)e.push(t);return e},descendants:function(){var t\u003d[];return this.each((function(e){t.push(e)})),t},leaves:function(){var t\u003d[];return this.eachBefore((function(e){e.children||t.push(e)})),t},links:function(){var t\u003dthis,e\u003d[];return t.each((function(r){r!\u003d\u003dt\u0026\u0026e.push({source:r.parent,target:r})})),e},copy:function(){return a(this).eachBefore(s)}};var u\u003dArray.prototype.slice;function f(t){for(var e,r,n\u003d0,i\u003d(t\u003dfunction(t){for(var e,r,n\u003dt.length;n;)r\u003dMath.random()*n--|0,e\u003dt[n],t[n]\u003dt[r],t[r]\u003de;return t}(u.call(t))).length,a\u003d[];n\u003ci;)e\u003dt[n],r\u0026\u0026d(r,e)?++n:(r\u003dg(a\u003dh(a,e)),n\u003d0);return r}function h(t,e){var r,n;if(m(e,t))return[e];for(r\u003d0;r\u003ct.length;++r)if(p(e,t[r])\u0026\u0026m(v(t[r],e),t))return[t[r],e];for(r\u003d0;r\u003ct.length-1;++r)for(n\u003dr+1;n\u003ct.length;++n)if(p(v(t[r],t[n]),e)\u0026\u0026p(v(t[r],e),t[n])\u0026\u0026p(v(t[n],e),t[r])\u0026\u0026m(y(t[r],t[n],e),t))return[t[r],t[n],e];throw new Error}function p(t,e){var r\u003dt.r-e.r,n\u003de.x-t.x,i\u003de.y-t.y;return r\u003c0||r*r\u003cn*n+i*i}function d(t,e){var r\u003dt.r-e.r+1e-6,n\u003de.x-t.x,i\u003de.y-t.y;return r\u003e0\u0026\u0026r*r\u003en*n+i*i}function m(t,e){for(var r\u003d0;r\u003ce.length;++r)if(!d(t,e[r]))return!1;return!0}function g(t){switch(t.length){case 1:return{x:(e\u003dt[0]).x,y:e.y,r:e.r};case 2:return v(t[0],t[1]);case 3:return y(t[0],t[1],t[2])}var e}function v(t,e){var r\u003dt.x,n\u003dt.y,i\u003dt.r,a\u003de.x,o\u003de.y,s\u003de.r,l\u003da-r,c\u003do-n,u\u003ds-i,f\u003dMath.sqrt(l*l+c*c);return{x:(r+a+l/f*u)/2,y:(n+o+c/f*u)/2,r:(f+i+s)/2}}function y(t,e,r){var n\u003dt.x,i\u003dt.y,a\u003dt.r,o\u003de.x,s\u003de.y,l\u003de.r,c\u003dr.x,u\u003dr.y,f\u003dr.r,h\u003dn-o,p\u003dn-c,d\u003di-s,m\u003di-u,g\u003dl-a,v\u003df-a,y\u003dn*n+i*i-a*a,x\u003dy-o*o-s*s+l*l,b\u003dy-c*c-u*u+f*f,_\u003dp*d-h*m,w\u003d(d*b-m*x)/(2*_)-n,T\u003d(m*g-d*v)/_,k\u003d(p*x-h*b)/(2*_)-i,M\u003d(h*v-p*g)/_,A\u003dT*T+M*M-1,S\u003d2*(a+w*T+k*M),E\u003dw*w+k*k-a*a,L\u003d-(A?(S+Math.sqrt(S*S-4*A*E))/(2*A):E/S);return{x:n+w+T*L,y:i+k+M*L,r:L}}function x(t,e,r){var n,i,a,o,s\u003dt.x-e.x,l\u003dt.y-e.y,c\u003ds*s+l*l;c?(i\u003de.r+r.r,i*\u003di,o\u003dt.r+r.r,i\u003e(o*\u003do)?(n\u003d(c+o-i)/(2*c),a\u003dMath.sqrt(Math.max(0,o/c-n*n)),r.x\u003dt.x-n*s-a*l,r.y\u003dt.y-n*l+a*s):(n\u003d(c+i-o)/(2*c),a\u003dMath.sqrt(Math.max(0,i/c-n*n)),r.x\u003de.x+n*s-a*l,r.y\u003de.y+n*l+a*s)):(r.x\u003de.x+r.r,r.y\u003de.y)}function b(t,e){var r\u003dt.r+e.r-1e-6,n\u003de.x-t.x,i\u003de.y-t.y;return r\u003e0\u0026\u0026r*r\u003en*n+i*i}function _(t){var e\u003dt._,r\u003dt.next._,n\u003de.r+r.r,i\u003d(e.x*r.r+r.x*e.r)/n,a\u003d(e.y*r.r+r.y*e.r)/n;return i*i+a*a}function w(t){this._\u003dt,this.next\u003dnull,this.previous\u003dnull}function T(t){if(!(i\u003dt.length))return 0;var e,r,n,i,a,o,s,l,c,u,h;if((e\u003dt[0]).x\u003d0,e.y\u003d0,!(i\u003e1))return e.r;if(r\u003dt[1],e.x\u003d-r.r,r.x\u003de.r,r.y\u003d0,!(i\u003e2))return e.r+r.r;x(r,e,n\u003dt[2]),e\u003dnew w(e),r\u003dnew w(r),n\u003dnew w(n),e.next\u003dn.previous\u003dr,r.next\u003de.previous\u003dn,n.next\u003dr.previous\u003de;t:for(s\u003d3;s\u003ci;++s){x(e._,r._,n\u003dt[s]),n\u003dnew w(n),l\u003dr.next,c\u003de.previous,u\u003dr._.r,h\u003de._.r;do{if(u\u003c\u003dh){if(b(l._,n._)){r\u003dl,e.next\u003dr,r.previous\u003de,--s;continue t}u+\u003dl._.r,l\u003dl.next}else{if(b(c._,n._)){(e\u003dc).next\u003dr,r.previous\u003de,--s;continue t}h+\u003dc._.r,c\u003dc.previous}}while(l!\u003d\u003dc.next);for(n.previous\u003de,n.next\u003dr,e.next\u003dr.previous\u003dr\u003dn,a\u003d_(e);(n\u003dn.next)!\u003d\u003dr;)(o\u003d_(n))\u003ca\u0026\u0026(e\u003dn,a\u003do);r\u003de.next}for(e\u003d[r._],n\u003dr;(n\u003dn.next)!\u003d\u003dr;)e.push(n._);for(n\u003df(e),s\u003d0;s\u003ci;++s)(e\u003dt[s]).x-\u003dn.x,e.y-\u003dn.y;return n.r}function k(t){return null\u003d\u003dt?null:M(t)}function M(t){if(\"function\"!\u003dtypeof t)throw new Error;return t}function A(){return 0}function S(t){return function(){return t}}function E(t){return Math.sqrt(t.value)}function L(t){return function(e){e.children||(e.r\u003dMath.max(0,+t(e)||0))}}function C(t,e){return function(r){if(n\u003dr.children){var n,i,a,o\u003dn.length,s\u003dt(r)*e||0;if(s)for(i\u003d0;i\u003co;++i)n[i].r+\u003ds;if(a\u003dT(n),s)for(i\u003d0;i\u003co;++i)n[i].r-\u003ds;r.r\u003da+s}}}function P(t){return function(e){var r\u003de.parent;e.r*\u003dt,r\u0026\u0026(e.x\u003dr.x+t*e.x,e.y\u003dr.y+t*e.y)}}function I(t){t.x0\u003dMath.round(t.x0),t.y0\u003dMath.round(t.y0),t.x1\u003dMath.round(t.x1),t.y1\u003dMath.round(t.y1)}function O(t,e,r,n,i){for(var a,o\u003dt.children,s\u003d-1,l\u003do.length,c\u003dt.value\u0026\u0026(n-e)/t.value;++s\u003cl;)(a\u003do[s]).y0\u003dr,a.y1\u003di,a.x0\u003de,a.x1\u003de+\u003da.value*c}var z\u003d{depth:-1},D\u003d{};function R(t){return t.id}function F(t){return t.parentId}function B(t,e){return t.parent\u003d\u003d\u003de.parent?1:2}function N(t){var e\u003dt.children;return e?e[0]:t.t}function j(t){var e\u003dt.children;return e?e[e.length-1]:t.t}function U(t,e,r){var n\u003dr/(e.i-t.i);e.c-\u003dn,e.s+\u003dr,t.c+\u003dn,e.z+\u003dr,e.m+\u003dr}function V(t,e,r){return t.a.parent\u003d\u003d\u003de.parent?t.a:r}function q(t,e){this._\u003dt,this.parent\u003dnull,this.children\u003dnull,this.A\u003dnull,this.a\u003dthis,this.z\u003d0,this.m\u003d0,this.c\u003d0,this.s\u003d0,this.t\u003dnull,this.i\u003de}function H(t,e,r,n,i){for(var a,o\u003dt.children,s\u003d-1,l\u003do.length,c\u003dt.value\u0026\u0026(i-r)/t.value;++s\u003cl;)(a\u003do[s]).x0\u003de,a.x1\u003dn,a.y0\u003dr,a.y1\u003dr+\u003da.value*c}q.prototype\u003dObject.create(c.prototype);var G\u003d(1+Math.sqrt(5))/2;function Y(t,e,r,n,i,a){for(var o,s,l,c,u,f,h,p,d,m,g,v\u003d[],y\u003de.children,x\u003d0,b\u003d0,_\u003dy.length,w\u003de.value;x\u003c_;){l\u003di-r,c\u003da-n;do{u\u003dy[b++].value}while(!u\u0026\u0026b\u003c_);for(f\u003dh\u003du,g\u003du*u*(m\u003dMath.max(c/l,l/c)/(w*t)),d\u003dMath.max(h/g,g/f);b\u003c_;++b){if(u+\u003ds\u003dy[b].value,s\u003cf\u0026\u0026(f\u003ds),s\u003eh\u0026\u0026(h\u003ds),g\u003du*u*m,(p\u003dMath.max(h/g,g/f))\u003ed){u-\u003ds;break}d\u003dp}v.push(o\u003d{value:u,dice:l\u003cc,children:y.slice(x,b)}),o.dice?O(o,r,n,i,w?n+\u003dc*u/w:a):H(o,r,n,w?r+\u003dl*u/w:i,a),w-\u003du,x\u003db}return v}var W\u003dfunction t(e){function r(t,r,n,i,a){Y(e,t,r,n,i,a)}return r.ratio\u003dfunction(e){return t((e\u003d+e)\u003e1?e:1)},r}(G);var X\u003dfunction t(e){function r(t,r,n,i,a){if((o\u003dt._squarify)\u0026\u0026o.ratio\u003d\u003d\u003de)for(var o,s,l,c,u,f\u003d-1,h\u003do.length,p\u003dt.value;++f\u003ch;){for(l\u003d(s\u003do[f]).children,c\u003ds.value\u003d0,u\u003dl.length;c\u003cu;++c)s.value+\u003dl[c].value;s.dice?O(s,r,n,i,n+\u003d(a-n)*s.value/p):H(s,r,n,r+\u003d(i-r)*s.value/p,a),p-\u003ds.value}else t._squarify\u003do\u003dY(e,t,r,n,i,a),o.ratio\u003de}return r.ratio\u003dfunction(e){return t((e\u003d+e)\u003e1?e:1)},r}(G);t.cluster\u003dfunction(){var t\u003de,i\u003d1,a\u003d1,o\u003d!1;function s(e){var s,l\u003d0;e.eachAfter((function(e){var i\u003de.children;i?(e.x\u003dfunction(t){return t.reduce(r,0)/t.length}(i),e.y\u003dfunction(t){return 1+t.reduce(n,0)}(i)):(e.x\u003ds?l+\u003dt(e,s):0,e.y\u003d0,s\u003de)}));var c\u003dfunction(t){for(var e;e\u003dt.children;)t\u003de[0];return t}(e),u\u003dfunction(t){for(var e;e\u003dt.children;)t\u003de[e.length-1];return t}(e),f\u003dc.x-t(c,u)/2,h\u003du.x+t(u,c)/2;return e.eachAfter(o?function(t){t.x\u003d(t.x-e.x)*i,t.y\u003d(e.y-t.y)*a}:function(t){t.x\u003d(t.x-f)/(h-f)*i,t.y\u003d(1-(e.y?t.y/e.y:1))*a})}return s.separation\u003dfunction(e){return arguments.length?(t\u003de,s):t},s.size\u003dfunction(t){return arguments.length?(o\u003d!1,i\u003d+t[0],a\u003d+t[1],s):o?null:[i,a]},s.nodeSize\u003dfunction(t){return arguments.length?(o\u003d!0,i\u003d+t[0],a\u003d+t[1],s):o?[i,a]:null},s},t.hierarchy\u003da,t.pack\u003dfunction(){var t\u003dnull,e\u003d1,r\u003d1,n\u003dA;function i(i){return i.x\u003de/2,i.y\u003dr/2,t?i.eachBefore(L(t)).eachAfter(C(n,.5)).eachBefore(P(1)):i.eachBefore(L(E)).eachAfter(C(A,1)).eachAfter(C(n,i.r/Math.min(e,r))).eachBefore(P(Math.min(e,r)/(2*i.r))),i}return i.radius\u003dfunction(e){return arguments.length?(t\u003dk(e),i):t},i.size\u003dfunction(t){return arguments.length?(e\u003d+t[0],r\u003d+t[1],i):[e,r]},i.padding\u003dfunction(t){return arguments.length?(n\u003d\"function\"\u003d\u003dtypeof t?t:S(+t),i):n},i},t.packEnclose\u003df,t.packSiblings\u003dfunction(t){return T(t),t},t.partition\u003dfunction(){var t\u003d1,e\u003d1,r\u003d0,n\u003d!1;function i(i){var a\u003di.height+1;return i.x0\u003di.y0\u003dr,i.x1\u003dt,i.y1\u003de/a,i.eachBefore(function(t,e){return function(n){n.children\u0026\u0026O(n,n.x0,t*(n.depth+1)/e,n.x1,t*(n.depth+2)/e);var i\u003dn.x0,a\u003dn.y0,o\u003dn.x1-r,s\u003dn.y1-r;o\u003ci\u0026\u0026(i\u003do\u003d(i+o)/2),s\u003ca\u0026\u0026(a\u003ds\u003d(a+s)/2),n.x0\u003di,n.y0\u003da,n.x1\u003do,n.y1\u003ds}}(e,a)),n\u0026\u0026i.eachBefore(I),i}return i.round\u003dfunction(t){return arguments.length?(n\u003d!!t,i):n},i.size\u003dfunction(r){return arguments.length?(t\u003d+r[0],e\u003d+r[1],i):[t,e]},i.padding\u003dfunction(t){return arguments.length?(r\u003d+t,i):r},i},t.stratify\u003dfunction(){var t\u003dR,e\u003dF;function r(r){var n,i,a,o,s,u,f,h\u003dr.length,p\u003dnew Array(h),d\u003d{};for(i\u003d0;i\u003ch;++i)n\u003dr[i],s\u003dp[i]\u003dnew c(n),null!\u003d(u\u003dt(n,i,r))\u0026\u0026(u+\u003d\"\")\u0026\u0026(d[f\u003d\"$\"+(s.id\u003du)]\u003df in d?D:s);for(i\u003d0;i\u003ch;++i)if(s\u003dp[i],null!\u003d(u\u003de(r[i],i,r))\u0026\u0026(u+\u003d\"\")){if(!(o\u003dd[\"$\"+u]))throw new Error(\"missing: \"+u);if(o\u003d\u003d\u003dD)throw new Error(\"ambiguous: \"+u);o.children?o.children.push(s):o.children\u003d[s],s.parent\u003do}else{if(a)throw new Error(\"multiple roots\");a\u003ds}if(!a)throw new Error(\"no root\");if(a.parent\u003dz,a.eachBefore((function(t){t.depth\u003dt.parent.depth+1,--h})).eachBefore(l),a.parent\u003dnull,h\u003e0)throw new Error(\"cycle\");return a}return r.id\u003dfunction(e){return arguments.length?(t\u003dM(e),r):t},r.parentId\u003dfunction(t){return arguments.length?(e\u003dM(t),r):e},r},t.tree\u003dfunction(){var t\u003dB,e\u003d1,r\u003d1,n\u003dnull;function i(i){var l\u003dfunction(t){for(var e,r,n,i,a,o\u003dnew q(t,0),s\u003d[o];e\u003ds.pop();)if(n\u003de._.children)for(e.children\u003dnew Array(a\u003dn.length),i\u003da-1;i\u003e\u003d0;--i)s.push(r\u003de.children[i]\u003dnew q(n[i],i)),r.parent\u003de;return(o.parent\u003dnew q(null,0)).children\u003d[o],o}(i);if(l.eachAfter(a),l.parent.m\u003d-l.z,l.eachBefore(o),n)i.eachBefore(s);else{var c\u003di,u\u003di,f\u003di;i.eachBefore((function(t){t.x\u003cc.x\u0026\u0026(c\u003dt),t.x\u003eu.x\u0026\u0026(u\u003dt),t.depth\u003ef.depth\u0026\u0026(f\u003dt)}));var h\u003dc\u003d\u003d\u003du?1:t(c,u)/2,p\u003dh-c.x,d\u003de/(u.x+h+p),m\u003dr/(f.depth||1);i.eachBefore((function(t){t.x\u003d(t.x+p)*d,t.y\u003dt.depth*m}))}return i}function a(e){var r\u003de.children,n\u003de.parent.children,i\u003de.i?n[e.i-1]:null;if(r){!function(t){for(var e,r\u003d0,n\u003d0,i\u003dt.children,a\u003di.length;--a\u003e\u003d0;)(e\u003di[a]).z+\u003dr,e.m+\u003dr,r+\u003de.s+(n+\u003de.c)}(e);var a\u003d(r[0].z+r[r.length-1].z)/2;i?(e.z\u003di.z+t(e._,i._),e.m\u003de.z-a):e.z\u003da}else i\u0026\u0026(e.z\u003di.z+t(e._,i._));e.parent.A\u003dfunction(e,r,n){if(r){for(var i,a\u003de,o\u003de,s\u003dr,l\u003da.parent.children[0],c\u003da.m,u\u003do.m,f\u003ds.m,h\u003dl.m;s\u003dj(s),a\u003dN(a),s\u0026\u0026a;)l\u003dN(l),(o\u003dj(o)).a\u003de,(i\u003ds.z+f-a.z-c+t(s._,a._))\u003e0\u0026\u0026(U(V(s,e,n),e,i),c+\u003di,u+\u003di),f+\u003ds.m,c+\u003da.m,h+\u003dl.m,u+\u003do.m;s\u0026\u0026!j(o)\u0026\u0026(o.t\u003ds,o.m+\u003df-u),a\u0026\u0026!N(l)\u0026\u0026(l.t\u003da,l.m+\u003dc-h,n\u003de)}return n}(e,i,e.parent.A||n[0])}function o(t){t._.x\u003dt.z+t.parent.m,t.m+\u003dt.parent.m}function s(t){t.x*\u003de,t.y\u003dt.depth*r}return i.separation\u003dfunction(e){return arguments.length?(t\u003de,i):t},i.size\u003dfunction(t){return arguments.length?(n\u003d!1,e\u003d+t[0],r\u003d+t[1],i):n?null:[e,r]},i.nodeSize\u003dfunction(t){return arguments.length?(n\u003d!0,e\u003d+t[0],r\u003d+t[1],i):n?[e,r]:null},i},t.treemap\u003dfunction(){var t\u003dW,e\u003d!1,r\u003d1,n\u003d1,i\u003d[0],a\u003dA,o\u003dA,s\u003dA,l\u003dA,c\u003dA;function u(t){return t.x0\u003dt.y0\u003d0,t.x1\u003dr,t.y1\u003dn,t.eachBefore(f),i\u003d[0],e\u0026\u0026t.eachBefore(I),t}function f(e){var r\u003di[e.depth],n\u003de.x0+r,u\u003de.y0+r,f\u003de.x1-r,h\u003de.y1-r;f\u003cn\u0026\u0026(n\u003df\u003d(n+f)/2),h\u003cu\u0026\u0026(u\u003dh\u003d(u+h)/2),e.x0\u003dn,e.y0\u003du,e.x1\u003df,e.y1\u003dh,e.children\u0026\u0026(r\u003di[e.depth+1]\u003da(e)/2,n+\u003dc(e)-r,u+\u003do(e)-r,(f-\u003ds(e)-r)\u003cn\u0026\u0026(n\u003df\u003d(n+f)/2),(h-\u003dl(e)-r)\u003cu\u0026\u0026(u\u003dh\u003d(u+h)/2),t(e,n,u,f,h))}return u.round\u003dfunction(t){return arguments.length?(e\u003d!!t,u):e},u.size\u003dfunction(t){return arguments.length?(r\u003d+t[0],n\u003d+t[1],u):[r,n]},u.tile\u003dfunction(e){return arguments.length?(t\u003dM(e),u):t},u.padding\u003dfunction(t){return arguments.length?u.paddingInner(t).paddingOuter(t):u.paddingInner()},u.paddingInner\u003dfunction(t){return arguments.length?(a\u003d\"function\"\u003d\u003dtypeof t?t:S(+t),u):a},u.paddingOuter\u003dfunction(t){return arguments.length?u.paddingTop(t).paddingRight(t).paddingBottom(t).paddingLeft(t):u.paddingTop()},u.paddingTop\u003dfunction(t){return arguments.length?(o\u003d\"function\"\u003d\u003dtypeof t?t:S(+t),u):o},u.paddingRight\u003dfunction(t){return arguments.length?(s\u003d\"function\"\u003d\u003dtypeof t?t:S(+t),u):s},u.paddingBottom\u003dfunction(t){return arguments.length?(l\u003d\"function\"\u003d\u003dtypeof t?t:S(+t),u):l},u.paddingLeft\u003dfunction(t){return arguments.length?(c\u003d\"function\"\u003d\u003dtypeof t?t:S(+t),u):c},u},t.treemapBinary\u003dfunction(t,e,r,n,i){var a,o,s\u003dt.children,l\u003ds.length,c\u003dnew Array(l+1);for(c[0]\u003do\u003da\u003d0;a\u003cl;++a)c[a+1]\u003do+\u003ds[a].value;!function t(e,r,n,i,a,o,l){if(e\u003e\u003dr-1){var u\u003ds[e];return u.x0\u003di,u.y0\u003da,u.x1\u003do,void(u.y1\u003dl)}var f\u003dc[e],h\u003dn/2+f,p\u003de+1,d\u003dr-1;for(;p\u003cd;){var m\u003dp+d\u003e\u003e\u003e1;c[m]\u003ch?p\u003dm+1:d\u003dm}h-c[p-1]\u003cc[p]-h\u0026\u0026e+1\u003cp\u0026\u0026--p;var g\u003dc[p]-f,v\u003dn-g;if(o-i\u003el-a){var y\u003d(i*v+o*g)/n;t(e,p,g,i,a,y,l),t(p,r,v,y,a,o,l)}else{var x\u003d(a*v+l*g)/n;t(e,p,g,i,a,o,x),t(p,r,v,i,x,o,l)}}(0,l,t.value,e,r,n,i)},t.treemapDice\u003dO,t.treemapResquarify\u003dX,t.treemapSlice\u003dH,t.treemapSliceDice\u003dfunction(t,e,r,n,i){(1\u0026t.depth?H:O)(t,e,r,n,i)},t.treemapSquarify\u003dW,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],168:[function(t,e,r){!function(n,i){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?i(r,t(\"d3-color\")):i((n\u003dn||self).d3\u003dn.d3||{},n.d3)}(this,(function(t,e){\"use strict\";function r(t,e,r,n,i){var a\u003dt*t,o\u003da*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}function n(t){var e\u003dt.length-1;return function(n){var i\u003dn\u003c\u003d0?n\u003d0:n\u003e\u003d1?(n\u003d1,e-1):Math.floor(n*e),a\u003dt[i],o\u003dt[i+1],s\u003di\u003e0?t[i-1]:2*a-o,l\u003di\u003ce-1?t[i+2]:2*o-a;return r((n-i/e)*e,s,a,o,l)}}function i(t){var e\u003dt.length;return function(n){var i\u003dMath.floor(((n%\u003d1)\u003c0?++n:n)*e),a\u003dt[(i+e-1)%e],o\u003dt[i%e],s\u003dt[(i+1)%e],l\u003dt[(i+2)%e];return r((n-i/e)*e,a,o,s,l)}}function a(t){return function(){return t}}function o(t,e){return function(r){return t+r*e}}function s(t,e){var r\u003de-t;return r?o(t,r\u003e180||r\u003c-180?r-360*Math.round(r/360):r):a(isNaN(t)?e:t)}function l(t){return 1\u003d\u003d(t\u003d+t)?c:function(e,r){return r-e?function(t,e,r){return t\u003dMath.pow(t,r),e\u003dMath.pow(e,r)-t,r\u003d1/r,function(n){return Math.pow(t+n*e,r)}}(e,r,t):a(isNaN(e)?r:e)}}function c(t,e){var r\u003de-t;return r?o(t,r):a(isNaN(t)?e:t)}var u\u003dfunction t(r){var n\u003dl(r);function i(t,r){var i\u003dn((t\u003de.rgb(t)).r,(r\u003de.rgb(r)).r),a\u003dn(t.g,r.g),o\u003dn(t.b,r.b),s\u003dc(t.opacity,r.opacity);return function(e){return t.r\u003di(e),t.g\u003da(e),t.b\u003do(e),t.opacity\u003ds(e),t+\"\"}}return i.gamma\u003dt,i}(1);function f(t){return function(r){var n,i,a\u003dr.length,o\u003dnew Array(a),s\u003dnew Array(a),l\u003dnew Array(a);for(n\u003d0;n\u003ca;++n)i\u003de.rgb(r[n]),o[n]\u003di.r||0,s[n]\u003di.g||0,l[n]\u003di.b||0;return o\u003dt(o),s\u003dt(s),l\u003dt(l),i.opacity\u003d1,function(t){return i.r\u003do(t),i.g\u003ds(t),i.b\u003dl(t),i+\"\"}}}var h\u003df(n),p\u003df(i);function d(t,e){e||(e\u003d[]);var r,n\u003dt?Math.min(e.length,t.length):0,i\u003de.slice();return function(a){for(r\u003d0;r\u003cn;++r)i[r]\u003dt[r]*(1-a)+e[r]*a;return i}}function m(t){return ArrayBuffer.isView(t)\u0026\u0026!(t instanceof DataView)}function g(t,e){var r,n\u003de?e.length:0,i\u003dt?Math.min(n,t.length):0,a\u003dnew Array(i),o\u003dnew Array(n);for(r\u003d0;r\u003ci;++r)a[r]\u003dT(t[r],e[r]);for(;r\u003cn;++r)o[r]\u003de[r];return function(t){for(r\u003d0;r\u003ci;++r)o[r]\u003da[r](t);return o}}function v(t,e){var r\u003dnew Date;return t\u003d+t,e\u003d+e,function(n){return r.setTime(t*(1-n)+e*n),r}}function y(t,e){return t\u003d+t,e\u003d+e,function(r){return t*(1-r)+e*r}}function x(t,e){var r,n\u003d{},i\u003d{};for(r in null!\u003d\u003dt\u0026\u0026\"object\"\u003d\u003dtypeof t||(t\u003d{}),null!\u003d\u003de\u0026\u0026\"object\"\u003d\u003dtypeof e||(e\u003d{}),e)r in t?n[r]\u003dT(t[r],e[r]):i[r]\u003de[r];return function(t){for(r in n)i[r]\u003dn[r](t);return i}}var b\u003d/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,_\u003dnew RegExp(b.source,\"g\");function w(t,e){var r,n,i,a\u003db.lastIndex\u003d_.lastIndex\u003d0,o\u003d-1,s\u003d[],l\u003d[];for(t+\u003d\"\",e+\u003d\"\";(r\u003db.exec(t))\u0026\u0026(n\u003d_.exec(e));)(i\u003dn.index)\u003ea\u0026\u0026(i\u003de.slice(a,i),s[o]?s[o]+\u003di:s[++o]\u003di),(r\u003dr[0])\u003d\u003d\u003d(n\u003dn[0])?s[o]?s[o]+\u003dn:s[++o]\u003dn:(s[++o]\u003dnull,l.push({i:o,x:y(r,n)})),a\u003d_.lastIndex;return a\u003ce.length\u0026\u0026(i\u003de.slice(a),s[o]?s[o]+\u003di:s[++o]\u003di),s.length\u003c2?l[0]?function(t){return function(e){return t(e)+\"\"}}(l[0].x):function(t){return function(){return t}}(e):(e\u003dl.length,function(t){for(var r,n\u003d0;n\u003ce;++n)s[(r\u003dl[n]).i]\u003dr.x(t);return s.join(\"\")})}function T(t,r){var n,i\u003dtypeof r;return null\u003d\u003dr||\"boolean\"\u003d\u003d\u003di?a(r):(\"number\"\u003d\u003d\u003di?y:\"string\"\u003d\u003d\u003di?(n\u003de.color(r))?(r\u003dn,u):w:r instanceof e.color?u:r instanceof Date?v:m(r)?d:Array.isArray(r)?g:\"function\"!\u003dtypeof r.valueOf\u0026\u0026\"function\"!\u003dtypeof r.toString||isNaN(r)?x:y)(t,r)}var k,M,A,S,E\u003d180/Math.PI,L\u003d{translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function C(t,e,r,n,i,a){var o,s,l;return(o\u003dMath.sqrt(t*t+e*e))\u0026\u0026(t/\u003do,e/\u003do),(l\u003dt*r+e*n)\u0026\u0026(r-\u003dt*l,n-\u003de*l),(s\u003dMath.sqrt(r*r+n*n))\u0026\u0026(r/\u003ds,n/\u003ds,l/\u003ds),t*n\u003ce*r\u0026\u0026(t\u003d-t,e\u003d-e,l\u003d-l,o\u003d-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*E,skewX:Math.atan(l)*E,scaleX:o,scaleY:s}}function P(t,e,r,n){function i(t){return t.length?t.pop()+\" \":\"\"}return function(a,o){var s\u003d[],l\u003d[];return a\u003dt(a),o\u003dt(o),function(t,n,i,a,o,s){if(t!\u003d\u003di||n!\u003d\u003da){var l\u003do.push(\"translate(\",null,e,null,r);s.push({i:l-4,x:y(t,i)},{i:l-2,x:y(n,a)})}else(i||a)\u0026\u0026o.push(\"translate(\"+i+e+a+r)}(a.translateX,a.translateY,o.translateX,o.translateY,s,l),function(t,e,r,a){t!\u003d\u003de?(t-e\u003e180?e+\u003d360:e-t\u003e180\u0026\u0026(t+\u003d360),a.push({i:r.push(i(r)+\"rotate(\",null,n)-2,x:y(t,e)})):e\u0026\u0026r.push(i(r)+\"rotate(\"+e+n)}(a.rotate,o.rotate,s,l),function(t,e,r,a){t!\u003d\u003de?a.push({i:r.push(i(r)+\"skewX(\",null,n)-2,x:y(t,e)}):e\u0026\u0026r.push(i(r)+\"skewX(\"+e+n)}(a.skewX,o.skewX,s,l),function(t,e,r,n,a,o){if(t!\u003d\u003dr||e!\u003d\u003dn){var s\u003da.push(i(a)+\"scale(\",null,\",\",null,\")\");o.push({i:s-4,x:y(t,r)},{i:s-2,x:y(e,n)})}else 1\u003d\u003d\u003dr\u0026\u00261\u003d\u003d\u003dn||a.push(i(a)+\"scale(\"+r+\",\"+n+\")\")}(a.scaleX,a.scaleY,o.scaleX,o.scaleY,s,l),a\u003do\u003dnull,function(t){for(var e,r\u003d-1,n\u003dl.length;++r\u003cn;)s[(e\u003dl[r]).i]\u003de.x(t);return s.join(\"\")}}}var I\u003dP((function(t){return\"none\"\u003d\u003d\u003dt?L:(k||(k\u003ddocument.createElement(\"DIV\"),M\u003ddocument.documentElement,A\u003ddocument.defaultView),k.style.transform\u003dt,t\u003dA.getComputedStyle(M.appendChild(k),null).getPropertyValue(\"transform\"),M.removeChild(k),C(+(t\u003dt.slice(7,-1).split(\",\"))[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}),\"px, \",\"px)\",\"deg)\"),O\u003dP((function(t){return null\u003d\u003dt?L:(S||(S\u003ddocument.createElementNS(\"http://www.w3.org/2000/svg\",\"g\")),S.setAttribute(\"transform\",t),(t\u003dS.transform.baseVal.consolidate())?C((t\u003dt.matrix).a,t.b,t.c,t.d,t.e,t.f):L)}),\", \",\")\",\")\"),z\u003dMath.SQRT2;function D(t){return((t\u003dMath.exp(t))+1/t)/2}function R(t){return function(r,n){var i\u003dt((r\u003de.hsl(r)).h,(n\u003de.hsl(n)).h),a\u003dc(r.s,n.s),o\u003dc(r.l,n.l),s\u003dc(r.opacity,n.opacity);return function(t){return r.h\u003di(t),r.s\u003da(t),r.l\u003do(t),r.opacity\u003ds(t),r+\"\"}}}var F\u003dR(s),B\u003dR(c);function N(t){return function(r,n){var i\u003dt((r\u003de.hcl(r)).h,(n\u003de.hcl(n)).h),a\u003dc(r.c,n.c),o\u003dc(r.l,n.l),s\u003dc(r.opacity,n.opacity);return function(t){return r.h\u003di(t),r.c\u003da(t),r.l\u003do(t),r.opacity\u003ds(t),r+\"\"}}}var j\u003dN(s),U\u003dN(c);function V(t){return function r(n){function i(r,i){var a\u003dt((r\u003de.cubehelix(r)).h,(i\u003de.cubehelix(i)).h),o\u003dc(r.s,i.s),s\u003dc(r.l,i.l),l\u003dc(r.opacity,i.opacity);return function(t){return r.h\u003da(t),r.s\u003do(t),r.l\u003ds(Math.pow(t,n)),r.opacity\u003dl(t),r+\"\"}}return n\u003d+n,i.gamma\u003dr,i}(1)}var q\u003dV(s),H\u003dV(c);t.interpolate\u003dT,t.interpolateArray\u003dfunction(t,e){return(m(e)?d:g)(t,e)},t.interpolateBasis\u003dn,t.interpolateBasisClosed\u003di,t.interpolateCubehelix\u003dq,t.interpolateCubehelixLong\u003dH,t.interpolateDate\u003dv,t.interpolateDiscrete\u003dfunction(t){var e\u003dt.length;return function(r){return t[Math.max(0,Math.min(e-1,Math.floor(r*e)))]}},t.interpolateHcl\u003dj,t.interpolateHclLong\u003dU,t.interpolateHsl\u003dF,t.interpolateHslLong\u003dB,t.interpolateHue\u003dfunction(t,e){var r\u003ds(+t,+e);return function(t){var e\u003dr(t);return e-360*Math.floor(e/360)}},t.interpolateLab\u003dfunction(t,r){var n\u003dc((t\u003de.lab(t)).l,(r\u003de.lab(r)).l),i\u003dc(t.a,r.a),a\u003dc(t.b,r.b),o\u003dc(t.opacity,r.opacity);return function(e){return t.l\u003dn(e),t.a\u003di(e),t.b\u003da(e),t.opacity\u003do(e),t+\"\"}},t.interpolateNumber\u003dy,t.interpolateNumberArray\u003dd,t.interpolateObject\u003dx,t.interpolateRgb\u003du,t.interpolateRgbBasis\u003dh,t.interpolateRgbBasisClosed\u003dp,t.interpolateRound\u003dfunction(t,e){return t\u003d+t,e\u003d+e,function(r){return Math.round(t*(1-r)+e*r)}},t.interpolateString\u003dw,t.interpolateTransformCss\u003dI,t.interpolateTransformSvg\u003dO,t.interpolateZoom\u003dfunction(t,e){var r,n,i\u003dt[0],a\u003dt[1],o\u003dt[2],s\u003de[0],l\u003de[1],c\u003de[2],u\u003ds-i,f\u003dl-a,h\u003du*u+f*f;if(h\u003c1e-12)n\u003dMath.log(c/o)/z,r\u003dfunction(t){return[i+t*u,a+t*f,o*Math.exp(z*t*n)]};else{var p\u003dMath.sqrt(h),d\u003d(c*c-o*o+4*h)/(2*o*2*p),m\u003d(c*c-o*o-4*h)/(2*c*2*p),g\u003dMath.log(Math.sqrt(d*d+1)-d),v\u003dMath.log(Math.sqrt(m*m+1)-m);n\u003d(v-g)/z,r\u003dfunction(t){var e,r\u003dt*n,s\u003dD(g),l\u003do/(2*p)*(s*(e\u003dz*r+g,((e\u003dMath.exp(2*e))-1)/(e+1))-function(t){return((t\u003dMath.exp(t))-1/t)/2}(g));return[i+l*u,a+l*f,o*s/D(z*r+g)]}}return r.duration\u003d1e3*n,r},t.piecewise\u003dfunction(t,e){for(var r\u003d0,n\u003de.length-1,i\u003de[0],a\u003dnew Array(n\u003c0?0:n);r\u003cn;)a[r]\u003dt(i,i\u003de[++r]);return function(t){var e\u003dMath.max(0,Math.min(n-1,Math.floor(t*\u003dn)));return a[e](t-e)}},t.quantize\u003dfunction(t,e){for(var r\u003dnew Array(e),n\u003d0;n\u003ce;++n)r[n]\u003dt(n/(e-1));return r},Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-color\":164}],169:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).d3\u003dt.d3||{})}(this,(function(t){\"use strict\";var e\u003dMath.PI,r\u003d2*e,n\u003dr-1e-6;function i(){this._x0\u003dthis._y0\u003dthis._x1\u003dthis._y1\u003dnull,this._\u003d\"\"}function a(){return new i}i.prototype\u003da.prototype\u003d{constructor:i,moveTo:function(t,e){this._+\u003d\"M\"+(this._x0\u003dthis._x1\u003d+t)+\",\"+(this._y0\u003dthis._y1\u003d+e)},closePath:function(){null!\u003d\u003dthis._x1\u0026\u0026(this._x1\u003dthis._x0,this._y1\u003dthis._y0,this._+\u003d\"Z\")},lineTo:function(t,e){this._+\u003d\"L\"+(this._x1\u003d+t)+\",\"+(this._y1\u003d+e)},quadraticCurveTo:function(t,e,r,n){this._+\u003d\"Q\"+ +t+\",\"+ +e+\",\"+(this._x1\u003d+r)+\",\"+(this._y1\u003d+n)},bezierCurveTo:function(t,e,r,n,i,a){this._+\u003d\"C\"+ +t+\",\"+ +e+\",\"+ +r+\",\"+ +n+\",\"+(this._x1\u003d+i)+\",\"+(this._y1\u003d+a)},arcTo:function(t,r,n,i,a){t\u003d+t,r\u003d+r,n\u003d+n,i\u003d+i,a\u003d+a;var o\u003dthis._x1,s\u003dthis._y1,l\u003dn-t,c\u003di-r,u\u003do-t,f\u003ds-r,h\u003du*u+f*f;if(a\u003c0)throw new Error(\"negative radius: \"+a);if(null\u003d\u003d\u003dthis._x1)this._+\u003d\"M\"+(this._x1\u003dt)+\",\"+(this._y1\u003dr);else if(h\u003e1e-6)if(Math.abs(f*l-c*u)\u003e1e-6\u0026\u0026a){var p\u003dn-o,d\u003di-s,m\u003dl*l+c*c,g\u003dp*p+d*d,v\u003dMath.sqrt(m),y\u003dMath.sqrt(h),x\u003da*Math.tan((e-Math.acos((m+h-g)/(2*v*y)))/2),b\u003dx/y,_\u003dx/v;Math.abs(b-1)\u003e1e-6\u0026\u0026(this._+\u003d\"L\"+(t+b*u)+\",\"+(r+b*f)),this._+\u003d\"A\"+a+\",\"+a+\",0,0,\"+ +(f*p\u003eu*d)+\",\"+(this._x1\u003dt+_*l)+\",\"+(this._y1\u003dr+_*c)}else this._+\u003d\"L\"+(this._x1\u003dt)+\",\"+(this._y1\u003dr);else;},arc:function(t,i,a,o,s,l){t\u003d+t,i\u003d+i,l\u003d!!l;var c\u003d(a\u003d+a)*Math.cos(o),u\u003da*Math.sin(o),f\u003dt+c,h\u003di+u,p\u003d1^l,d\u003dl?o-s:s-o;if(a\u003c0)throw new Error(\"negative radius: \"+a);null\u003d\u003d\u003dthis._x1?this._+\u003d\"M\"+f+\",\"+h:(Math.abs(this._x1-f)\u003e1e-6||Math.abs(this._y1-h)\u003e1e-6)\u0026\u0026(this._+\u003d\"L\"+f+\",\"+h),a\u0026\u0026(d\u003c0\u0026\u0026(d\u003dd%r+r),d\u003en?this._+\u003d\"A\"+a+\",\"+a+\",0,1,\"+p+\",\"+(t-c)+\",\"+(i-u)+\"A\"+a+\",\"+a+\",0,1,\"+p+\",\"+(this._x1\u003df)+\",\"+(this._y1\u003dh):d\u003e1e-6\u0026\u0026(this._+\u003d\"A\"+a+\",\"+a+\",0,\"+ +(d\u003e\u003de)+\",\"+p+\",\"+(this._x1\u003dt+a*Math.cos(s))+\",\"+(this._y1\u003di+a*Math.sin(s))))},rect:function(t,e,r,n){this._+\u003d\"M\"+(this._x0\u003dthis._x1\u003d+t)+\",\"+(this._y0\u003dthis._y1\u003d+e)+\"h\"+ +r+\"v\"+ +n+\"h\"+-r+\"Z\"},toString:function(){return this._}},t.path\u003da,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],170:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).d3\u003dt.d3||{})}(this,(function(t){\"use strict\";function e(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a,o,s,l,c,u,f,h,p\u003dt._root,d\u003d{data:n},m\u003dt._x0,g\u003dt._y0,v\u003dt._x1,y\u003dt._y1;if(!p)return t._root\u003dd,t;for(;p.length;)if((c\u003de\u003e\u003d(a\u003d(m+v)/2))?m\u003da:v\u003da,(u\u003dr\u003e\u003d(o\u003d(g+y)/2))?g\u003do:y\u003do,i\u003dp,!(p\u003dp[f\u003du\u003c\u003c1|c]))return i[f]\u003dd,t;if(s\u003d+t._x.call(null,p.data),l\u003d+t._y.call(null,p.data),e\u003d\u003d\u003ds\u0026\u0026r\u003d\u003d\u003dl)return d.next\u003dp,i?i[f]\u003dd:t._root\u003dd,t;do{i\u003di?i[f]\u003dnew Array(4):t._root\u003dnew Array(4),(c\u003de\u003e\u003d(a\u003d(m+v)/2))?m\u003da:v\u003da,(u\u003dr\u003e\u003d(o\u003d(g+y)/2))?g\u003do:y\u003do}while((f\u003du\u003c\u003c1|c)\u003d\u003d(h\u003d(l\u003e\u003do)\u003c\u003c1|s\u003e\u003da));return i[h]\u003dp,i[f]\u003dd,t}function r(t,e,r,n,i){this.node\u003dt,this.x0\u003de,this.y0\u003dr,this.x1\u003dn,this.y1\u003di}function n(t){return t[0]}function i(t){return t[1]}function a(t,e,r){var a\u003dnew o(null\u003d\u003de?n:e,null\u003d\u003dr?i:r,NaN,NaN,NaN,NaN);return null\u003d\u003dt?a:a.addAll(t)}function o(t,e,r,n,i,a){this._x\u003dt,this._y\u003de,this._x0\u003dr,this._y0\u003dn,this._x1\u003di,this._y1\u003da,this._root\u003dvoid 0}function s(t){for(var e\u003d{data:t.data},r\u003de;t\u003dt.next;)r\u003dr.next\u003d{data:t.data};return e}var l\u003da.prototype\u003do.prototype;l.copy\u003dfunction(){var t,e,r\u003dnew o(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n\u003dthis._root;if(!n)return r;if(!n.length)return r._root\u003ds(n),r;for(t\u003d[{source:n,target:r._root\u003dnew Array(4)}];n\u003dt.pop();)for(var i\u003d0;i\u003c4;++i)(e\u003dn.source[i])\u0026\u0026(e.length?t.push({source:e,target:n.target[i]\u003dnew Array(4)}):n.target[i]\u003ds(e));return r},l.add\u003dfunction(t){var r\u003d+this._x.call(null,t),n\u003d+this._y.call(null,t);return e(this.cover(r,n),r,n,t)},l.addAll\u003dfunction(t){var r,n,i,a,o\u003dt.length,s\u003dnew Array(o),l\u003dnew Array(o),c\u003d1/0,u\u003d1/0,f\u003d-1/0,h\u003d-1/0;for(n\u003d0;n\u003co;++n)isNaN(i\u003d+this._x.call(null,r\u003dt[n]))||isNaN(a\u003d+this._y.call(null,r))||(s[n]\u003di,l[n]\u003da,i\u003cc\u0026\u0026(c\u003di),i\u003ef\u0026\u0026(f\u003di),a\u003cu\u0026\u0026(u\u003da),a\u003eh\u0026\u0026(h\u003da));if(c\u003ef||u\u003eh)return this;for(this.cover(c,u).cover(f,h),n\u003d0;n\u003co;++n)e(this,s[n],l[n],t[n]);return this},l.cover\u003dfunction(t,e){if(isNaN(t\u003d+t)||isNaN(e\u003d+e))return this;var r\u003dthis._x0,n\u003dthis._y0,i\u003dthis._x1,a\u003dthis._y1;if(isNaN(r))i\u003d(r\u003dMath.floor(t))+1,a\u003d(n\u003dMath.floor(e))+1;else{for(var o,s,l\u003di-r,c\u003dthis._root;r\u003et||t\u003e\u003di||n\u003ee||e\u003e\u003da;)switch(s\u003d(e\u003cn)\u003c\u003c1|t\u003cr,(o\u003dnew Array(4))[s]\u003dc,c\u003do,l*\u003d2,s){case 0:i\u003dr+l,a\u003dn+l;break;case 1:r\u003di-l,a\u003dn+l;break;case 2:i\u003dr+l,n\u003da-l;break;case 3:r\u003di-l,n\u003da-l}this._root\u0026\u0026this._root.length\u0026\u0026(this._root\u003dc)}return this._x0\u003dr,this._y0\u003dn,this._x1\u003di,this._y1\u003da,this},l.data\u003dfunction(){var t\u003d[];return this.visit((function(e){if(!e.length)do{t.push(e.data)}while(e\u003de.next)})),t},l.extent\u003dfunction(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},l.find\u003dfunction(t,e,n){var i,a,o,s,l,c,u,f\u003dthis._x0,h\u003dthis._y0,p\u003dthis._x1,d\u003dthis._y1,m\u003d[],g\u003dthis._root;for(g\u0026\u0026m.push(new r(g,f,h,p,d)),null\u003d\u003dn?n\u003d1/0:(f\u003dt-n,h\u003de-n,p\u003dt+n,d\u003de+n,n*\u003dn);c\u003dm.pop();)if(!(!(g\u003dc.node)||(a\u003dc.x0)\u003ep||(o\u003dc.y0)\u003ed||(s\u003dc.x1)\u003cf||(l\u003dc.y1)\u003ch))if(g.length){var v\u003d(a+s)/2,y\u003d(o+l)/2;m.push(new r(g[3],v,y,s,l),new r(g[2],a,y,v,l),new r(g[1],v,o,s,y),new r(g[0],a,o,v,y)),(u\u003d(e\u003e\u003dy)\u003c\u003c1|t\u003e\u003dv)\u0026\u0026(c\u003dm[m.length-1],m[m.length-1]\u003dm[m.length-1-u],m[m.length-1-u]\u003dc)}else{var x\u003dt-+this._x.call(null,g.data),b\u003de-+this._y.call(null,g.data),_\u003dx*x+b*b;if(_\u003cn){var w\u003dMath.sqrt(n\u003d_);f\u003dt-w,h\u003de-w,p\u003dt+w,d\u003de+w,i\u003dg.data}}return i},l.remove\u003dfunction(t){if(isNaN(a\u003d+this._x.call(null,t))||isNaN(o\u003d+this._y.call(null,t)))return this;var e,r,n,i,a,o,s,l,c,u,f,h,p\u003dthis._root,d\u003dthis._x0,m\u003dthis._y0,g\u003dthis._x1,v\u003dthis._y1;if(!p)return this;if(p.length)for(;;){if((c\u003da\u003e\u003d(s\u003d(d+g)/2))?d\u003ds:g\u003ds,(u\u003do\u003e\u003d(l\u003d(m+v)/2))?m\u003dl:v\u003dl,e\u003dp,!(p\u003dp[f\u003du\u003c\u003c1|c]))return this;if(!p.length)break;(e[f+1\u00263]||e[f+2\u00263]||e[f+3\u00263])\u0026\u0026(r\u003de,h\u003df)}for(;p.data!\u003d\u003dt;)if(n\u003dp,!(p\u003dp.next))return this;return(i\u003dp.next)\u0026\u0026delete p.next,n?(i?n.next\u003di:delete n.next,this):e?(i?e[f]\u003di:delete e[f],(p\u003de[0]||e[1]||e[2]||e[3])\u0026\u0026p\u003d\u003d\u003d(e[3]||e[2]||e[1]||e[0])\u0026\u0026!p.length\u0026\u0026(r?r[h]\u003dp:this._root\u003dp),this):(this._root\u003di,this)},l.removeAll\u003dfunction(t){for(var e\u003d0,r\u003dt.length;e\u003cr;++e)this.remove(t[e]);return this},l.root\u003dfunction(){return this._root},l.size\u003dfunction(){var t\u003d0;return this.visit((function(e){if(!e.length)do{++t}while(e\u003de.next)})),t},l.visit\u003dfunction(t){var e,n,i,a,o,s,l\u003d[],c\u003dthis._root;for(c\u0026\u0026l.push(new r(c,this._x0,this._y0,this._x1,this._y1));e\u003dl.pop();)if(!t(c\u003de.node,i\u003de.x0,a\u003de.y0,o\u003de.x1,s\u003de.y1)\u0026\u0026c.length){var u\u003d(i+o)/2,f\u003d(a+s)/2;(n\u003dc[3])\u0026\u0026l.push(new r(n,u,f,o,s)),(n\u003dc[2])\u0026\u0026l.push(new r(n,i,f,u,s)),(n\u003dc[1])\u0026\u0026l.push(new r(n,u,a,o,f)),(n\u003dc[0])\u0026\u0026l.push(new r(n,i,a,u,f))}return this},l.visitAfter\u003dfunction(t){var e,n\u003d[],i\u003d[];for(this._root\u0026\u0026n.push(new r(this._root,this._x0,this._y0,this._x1,this._y1));e\u003dn.pop();){var a\u003de.node;if(a.length){var o,s\u003de.x0,l\u003de.y0,c\u003de.x1,u\u003de.y1,f\u003d(s+c)/2,h\u003d(l+u)/2;(o\u003da[0])\u0026\u0026n.push(new r(o,s,l,f,h)),(o\u003da[1])\u0026\u0026n.push(new r(o,f,l,c,h)),(o\u003da[2])\u0026\u0026n.push(new r(o,s,h,f,u)),(o\u003da[3])\u0026\u0026n.push(new r(o,f,h,c,u))}i.push(e)}for(;e\u003di.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},l.x\u003dfunction(t){return arguments.length?(this._x\u003dt,this):this._x},l.y\u003dfunction(t){return arguments.length?(this._y\u003dt,this):this._y},t.quadtree\u003da,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],171:[function(t,e,r){!function(n,i){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?i(r,t(\"d3-path\")):i((n\u003dn||self).d3\u003dn.d3||{},n.d3)}(this,(function(t,e){\"use strict\";function r(t){return function(){return t}}var n\u003dMath.abs,i\u003dMath.atan2,a\u003dMath.cos,o\u003dMath.max,s\u003dMath.min,l\u003dMath.sin,c\u003dMath.sqrt,u\u003dMath.PI,f\u003du/2,h\u003d2*u;function p(t){return t\u003e1?0:t\u003c-1?u:Math.acos(t)}function d(t){return t\u003e\u003d1?f:t\u003c\u003d-1?-f:Math.asin(t)}function m(t){return t.innerRadius}function g(t){return t.outerRadius}function v(t){return t.startAngle}function y(t){return t.endAngle}function x(t){return t\u0026\u0026t.padAngle}function b(t,e,r,n,i,a,o,s){var l\u003dr-t,c\u003dn-e,u\u003do-i,f\u003ds-a,h\u003df*l-u*c;if(!(h*h\u003c1e-12))return[t+(h\u003d(u*(e-a)-f*(t-i))/h)*l,e+h*c]}function _(t,e,r,n,i,a,s){var l\u003dt-r,u\u003de-n,f\u003d(s?a:-a)/c(l*l+u*u),h\u003df*u,p\u003d-f*l,d\u003dt+h,m\u003de+p,g\u003dr+h,v\u003dn+p,y\u003d(d+g)/2,x\u003d(m+v)/2,b\u003dg-d,_\u003dv-m,w\u003db*b+_*_,T\u003di-a,k\u003dd*v-g*m,M\u003d(_\u003c0?-1:1)*c(o(0,T*T*w-k*k)),A\u003d(k*_-b*M)/w,S\u003d(-k*b-_*M)/w,E\u003d(k*_+b*M)/w,L\u003d(-k*b+_*M)/w,C\u003dA-y,P\u003dS-x,I\u003dE-y,O\u003dL-x;return C*C+P*P\u003eI*I+O*O\u0026\u0026(A\u003dE,S\u003dL),{cx:A,cy:S,x01:-h,y01:-p,x11:A*(i/T-1),y11:S*(i/T-1)}}function w(t){this._context\u003dt}function T(t){return new w(t)}function k(t){return t[0]}function M(t){return t[1]}function A(){var t\u003dk,n\u003dM,i\u003dr(!0),a\u003dnull,o\u003dT,s\u003dnull;function l(r){var l,c,u,f\u003dr.length,h\u003d!1;for(null\u003d\u003da\u0026\u0026(s\u003do(u\u003de.path())),l\u003d0;l\u003c\u003df;++l)!(l\u003cf\u0026\u0026i(c\u003dr[l],l,r))\u003d\u003d\u003dh\u0026\u0026((h\u003d!h)?s.lineStart():s.lineEnd()),h\u0026\u0026s.point(+t(c,l,r),+n(c,l,r));if(u)return s\u003dnull,u+\"\"||null}return l.x\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:r(+e),l):t},l.y\u003dfunction(t){return arguments.length?(n\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),l):n},l.defined\u003dfunction(t){return arguments.length?(i\u003d\"function\"\u003d\u003dtypeof t?t:r(!!t),l):i},l.curve\u003dfunction(t){return arguments.length?(o\u003dt,null!\u003da\u0026\u0026(s\u003do(a)),l):o},l.context\u003dfunction(t){return arguments.length?(null\u003d\u003dt?a\u003ds\u003dnull:s\u003do(a\u003dt),l):a},l}function S(){var t\u003dk,n\u003dnull,i\u003dr(0),a\u003dM,o\u003dr(!0),s\u003dnull,l\u003dT,c\u003dnull;function u(r){var u,f,h,p,d,m\u003dr.length,g\u003d!1,v\u003dnew Array(m),y\u003dnew Array(m);for(null\u003d\u003ds\u0026\u0026(c\u003dl(d\u003de.path())),u\u003d0;u\u003c\u003dm;++u){if(!(u\u003cm\u0026\u0026o(p\u003dr[u],u,r))\u003d\u003d\u003dg)if(g\u003d!g)f\u003du,c.areaStart(),c.lineStart();else{for(c.lineEnd(),c.lineStart(),h\u003du-1;h\u003e\u003df;--h)c.point(v[h],y[h]);c.lineEnd(),c.areaEnd()}g\u0026\u0026(v[u]\u003d+t(p,u,r),y[u]\u003d+i(p,u,r),c.point(n?+n(p,u,r):v[u],a?+a(p,u,r):y[u]))}if(d)return c\u003dnull,d+\"\"||null}function f(){return A().defined(o).curve(l).context(s)}return u.x\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:r(+e),n\u003dnull,u):t},u.x0\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:r(+e),u):t},u.x1\u003dfunction(t){return arguments.length?(n\u003dnull\u003d\u003dt?null:\"function\"\u003d\u003dtypeof t?t:r(+t),u):n},u.y\u003dfunction(t){return arguments.length?(i\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),a\u003dnull,u):i},u.y0\u003dfunction(t){return arguments.length?(i\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),u):i},u.y1\u003dfunction(t){return arguments.length?(a\u003dnull\u003d\u003dt?null:\"function\"\u003d\u003dtypeof t?t:r(+t),u):a},u.lineX0\u003du.lineY0\u003dfunction(){return f().x(t).y(i)},u.lineY1\u003dfunction(){return f().x(t).y(a)},u.lineX1\u003dfunction(){return f().x(n).y(i)},u.defined\u003dfunction(t){return arguments.length?(o\u003d\"function\"\u003d\u003dtypeof t?t:r(!!t),u):o},u.curve\u003dfunction(t){return arguments.length?(l\u003dt,null!\u003ds\u0026\u0026(c\u003dl(s)),u):l},u.context\u003dfunction(t){return arguments.length?(null\u003d\u003dt?s\u003dc\u003dnull:c\u003dl(s\u003dt),u):s},u}function E(t,e){return e\u003ct?-1:e\u003et?1:e\u003e\u003dt?0:NaN}function L(t){return t}w.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._point\u003d0},lineEnd:function(){(this._line||0!\u003d\u003dthis._line\u0026\u00261\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point\u003d2;default:this._context.lineTo(t,e)}}};var C\u003dI(T);function P(t){this._curve\u003dt}function I(t){function e(e){return new P(t(e))}return e._curve\u003dt,e}function O(t){var e\u003dt.curve;return t.angle\u003dt.x,delete t.x,t.radius\u003dt.y,delete t.y,t.curve\u003dfunction(t){return arguments.length?e(I(t)):e()._curve},t}function z(){return O(A().curve(C))}function D(){var t\u003dS().curve(C),e\u003dt.curve,r\u003dt.lineX0,n\u003dt.lineX1,i\u003dt.lineY0,a\u003dt.lineY1;return t.angle\u003dt.x,delete t.x,t.startAngle\u003dt.x0,delete t.x0,t.endAngle\u003dt.x1,delete t.x1,t.radius\u003dt.y,delete t.y,t.innerRadius\u003dt.y0,delete t.y0,t.outerRadius\u003dt.y1,delete t.y1,t.lineStartAngle\u003dfunction(){return O(r())},delete t.lineX0,t.lineEndAngle\u003dfunction(){return O(n())},delete t.lineX1,t.lineInnerRadius\u003dfunction(){return O(i())},delete t.lineY0,t.lineOuterRadius\u003dfunction(){return O(a())},delete t.lineY1,t.curve\u003dfunction(t){return arguments.length?e(I(t)):e()._curve},t}function R(t,e){return[(e\u003d+e)*Math.cos(t-\u003dMath.PI/2),e*Math.sin(t)]}P.prototype\u003d{areaStart:function(){this._curve.areaStart()},areaEnd:function(){this._curve.areaEnd()},lineStart:function(){this._curve.lineStart()},lineEnd:function(){this._curve.lineEnd()},point:function(t,e){this._curve.point(e*Math.sin(t),e*-Math.cos(t))}};var F\u003dArray.prototype.slice;function B(t){return t.source}function N(t){return t.target}function j(t){var n\u003dB,i\u003dN,a\u003dk,o\u003dM,s\u003dnull;function l(){var r,l\u003dF.call(arguments),c\u003dn.apply(this,l),u\u003di.apply(this,l);if(s||(s\u003dr\u003de.path()),t(s,+a.apply(this,(l[0]\u003dc,l)),+o.apply(this,l),+a.apply(this,(l[0]\u003du,l)),+o.apply(this,l)),r)return s\u003dnull,r+\"\"||null}return l.source\u003dfunction(t){return arguments.length?(n\u003dt,l):n},l.target\u003dfunction(t){return arguments.length?(i\u003dt,l):i},l.x\u003dfunction(t){return arguments.length?(a\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),l):a},l.y\u003dfunction(t){return arguments.length?(o\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),l):o},l.context\u003dfunction(t){return arguments.length?(s\u003dnull\u003d\u003dt?null:t,l):s},l}function U(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e\u003d(e+n)/2,r,e,i,n,i)}function V(t,e,r,n,i){t.moveTo(e,r),t.bezierCurveTo(e,r\u003d(r+i)/2,n,r,n,i)}function q(t,e,r,n,i){var a\u003dR(e,r),o\u003dR(e,r\u003d(r+i)/2),s\u003dR(n,r),l\u003dR(n,i);t.moveTo(a[0],a[1]),t.bezierCurveTo(o[0],o[1],s[0],s[1],l[0],l[1])}var H\u003d{draw:function(t,e){var r\u003dMath.sqrt(e/u);t.moveTo(r,0),t.arc(0,0,r,0,h)}},G\u003d{draw:function(t,e){var r\u003dMath.sqrt(e/5)/2;t.moveTo(-3*r,-r),t.lineTo(-r,-r),t.lineTo(-r,-3*r),t.lineTo(r,-3*r),t.lineTo(r,-r),t.lineTo(3*r,-r),t.lineTo(3*r,r),t.lineTo(r,r),t.lineTo(r,3*r),t.lineTo(-r,3*r),t.lineTo(-r,r),t.lineTo(-3*r,r),t.closePath()}},Y\u003dMath.sqrt(1/3),W\u003d2*Y,X\u003d{draw:function(t,e){var r\u003dMath.sqrt(e/W),n\u003dr*Y;t.moveTo(0,-r),t.lineTo(n,0),t.lineTo(0,r),t.lineTo(-n,0),t.closePath()}},Z\u003dMath.sin(u/10)/Math.sin(7*u/10),J\u003dMath.sin(h/10)*Z,K\u003d-Math.cos(h/10)*Z,Q\u003d{draw:function(t,e){var r\u003dMath.sqrt(.8908130915292852*e),n\u003dJ*r,i\u003dK*r;t.moveTo(0,-r),t.lineTo(n,i);for(var a\u003d1;a\u003c5;++a){var o\u003dh*a/5,s\u003dMath.cos(o),l\u003dMath.sin(o);t.lineTo(l*r,-s*r),t.lineTo(s*n-l*i,l*n+s*i)}t.closePath()}},$\u003d{draw:function(t,e){var r\u003dMath.sqrt(e),n\u003d-r/2;t.rect(n,n,r,r)}},tt\u003dMath.sqrt(3),et\u003d{draw:function(t,e){var r\u003d-Math.sqrt(e/(3*tt));t.moveTo(0,2*r),t.lineTo(-tt*r,-r),t.lineTo(tt*r,-r),t.closePath()}},rt\u003d-.5,nt\u003dMath.sqrt(3)/2,it\u003d1/Math.sqrt(12),at\u003d3*(it/2+1),ot\u003d{draw:function(t,e){var r\u003dMath.sqrt(e/at),n\u003dr/2,i\u003dr*it,a\u003dn,o\u003dr*it+r,s\u003d-a,l\u003do;t.moveTo(n,i),t.lineTo(a,o),t.lineTo(s,l),t.lineTo(rt*n-nt*i,nt*n+rt*i),t.lineTo(rt*a-nt*o,nt*a+rt*o),t.lineTo(rt*s-nt*l,nt*s+rt*l),t.lineTo(rt*n+nt*i,rt*i-nt*n),t.lineTo(rt*a+nt*o,rt*o-nt*a),t.lineTo(rt*s+nt*l,rt*l-nt*s),t.closePath()}},st\u003d[H,G,X,$,Q,et,ot];function lt(){}function ct(t,e,r){t._context.bezierCurveTo((2*t._x0+t._x1)/3,(2*t._y0+t._y1)/3,(t._x0+2*t._x1)/3,(t._y0+2*t._y1)/3,(t._x0+4*t._x1+e)/6,(t._y0+4*t._y1+r)/6)}function ut(t){this._context\u003dt}function ft(t){this._context\u003dt}function ht(t){this._context\u003dt}function pt(t,e){this._basis\u003dnew ut(t),this._beta\u003de}ut.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x0\u003dthis._x1\u003dthis._y0\u003dthis._y1\u003dNaN,this._point\u003d0},lineEnd:function(){switch(this._point){case 3:ct(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1)}(this._line||0!\u003d\u003dthis._line\u0026\u00261\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point\u003d2;break;case 2:this._point\u003d3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:ct(this,t,e)}this._x0\u003dthis._x1,this._x1\u003dt,this._y0\u003dthis._y1,this._y1\u003de}},ft.prototype\u003d{areaStart:lt,areaEnd:lt,lineStart:function(){this._x0\u003dthis._x1\u003dthis._x2\u003dthis._x3\u003dthis._x4\u003dthis._y0\u003dthis._y1\u003dthis._y2\u003dthis._y3\u003dthis._y4\u003dNaN,this._point\u003d0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x2,this._y2),this._context.closePath();break;case 2:this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break;case 3:this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4)}},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1,this._x2\u003dt,this._y2\u003de;break;case 1:this._point\u003d2,this._x3\u003dt,this._y3\u003de;break;case 2:this._point\u003d3,this._x4\u003dt,this._y4\u003de,this._context.moveTo((this._x0+4*this._x1+t)/6,(this._y0+4*this._y1+e)/6);break;default:ct(this,t,e)}this._x0\u003dthis._x1,this._x1\u003dt,this._y0\u003dthis._y1,this._y1\u003de}},ht.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x0\u003dthis._x1\u003dthis._y0\u003dthis._y1\u003dNaN,this._point\u003d0},lineEnd:function(){(this._line||0!\u003d\u003dthis._line\u0026\u00263\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1;break;case 1:this._point\u003d2;break;case 2:this._point\u003d3;var r\u003d(this._x0+4*this._x1+t)/6,n\u003d(this._y0+4*this._y1+e)/6;this._line?this._context.lineTo(r,n):this._context.moveTo(r,n);break;case 3:this._point\u003d4;default:ct(this,t,e)}this._x0\u003dthis._x1,this._x1\u003dt,this._y0\u003dthis._y1,this._y1\u003de}},pt.prototype\u003d{lineStart:function(){this._x\u003d[],this._y\u003d[],this._basis.lineStart()},lineEnd:function(){var t\u003dthis._x,e\u003dthis._y,r\u003dt.length-1;if(r\u003e0)for(var n,i\u003dt[0],a\u003de[0],o\u003dt[r]-i,s\u003de[r]-a,l\u003d-1;++l\u003c\u003dr;)n\u003dl/r,this._basis.point(this._beta*t[l]+(1-this._beta)*(i+n*o),this._beta*e[l]+(1-this._beta)*(a+n*s));this._x\u003dthis._y\u003dnull,this._basis.lineEnd()},point:function(t,e){this._x.push(+t),this._y.push(+e)}};var dt\u003dfunction t(e){function r(t){return 1\u003d\u003d\u003de?new ut(t):new pt(t,e)}return r.beta\u003dfunction(e){return t(+e)},r}(.85);function mt(t,e,r){t._context.bezierCurveTo(t._x1+t._k*(t._x2-t._x0),t._y1+t._k*(t._y2-t._y0),t._x2+t._k*(t._x1-e),t._y2+t._k*(t._y1-r),t._x2,t._y2)}function gt(t,e){this._context\u003dt,this._k\u003d(1-e)/6}gt.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x0\u003dthis._x1\u003dthis._x2\u003dthis._y0\u003dthis._y1\u003dthis._y2\u003dNaN,this._point\u003d0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:mt(this,this._x1,this._y1)}(this._line||0!\u003d\u003dthis._line\u0026\u00261\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point\u003d2,this._x1\u003dt,this._y1\u003de;break;case 2:this._point\u003d3;default:mt(this,t,e)}this._x0\u003dthis._x1,this._x1\u003dthis._x2,this._x2\u003dt,this._y0\u003dthis._y1,this._y1\u003dthis._y2,this._y2\u003de}};var vt\u003dfunction t(e){function r(t){return new gt(t,e)}return r.tension\u003dfunction(e){return t(+e)},r}(0);function yt(t,e){this._context\u003dt,this._k\u003d(1-e)/6}yt.prototype\u003d{areaStart:lt,areaEnd:lt,lineStart:function(){this._x0\u003dthis._x1\u003dthis._x2\u003dthis._x3\u003dthis._x4\u003dthis._x5\u003dthis._y0\u003dthis._y1\u003dthis._y2\u003dthis._y3\u003dthis._y4\u003dthis._y5\u003dNaN,this._point\u003d0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1,this._x3\u003dt,this._y3\u003de;break;case 1:this._point\u003d2,this._context.moveTo(this._x4\u003dt,this._y4\u003de);break;case 2:this._point\u003d3,this._x5\u003dt,this._y5\u003de;break;default:mt(this,t,e)}this._x0\u003dthis._x1,this._x1\u003dthis._x2,this._x2\u003dt,this._y0\u003dthis._y1,this._y1\u003dthis._y2,this._y2\u003de}};var xt\u003dfunction t(e){function r(t){return new yt(t,e)}return r.tension\u003dfunction(e){return t(+e)},r}(0);function bt(t,e){this._context\u003dt,this._k\u003d(1-e)/6}bt.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x0\u003dthis._x1\u003dthis._x2\u003dthis._y0\u003dthis._y1\u003dthis._y2\u003dNaN,this._point\u003d0},lineEnd:function(){(this._line||0!\u003d\u003dthis._line\u0026\u00263\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1;break;case 1:this._point\u003d2;break;case 2:this._point\u003d3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point\u003d4;default:mt(this,t,e)}this._x0\u003dthis._x1,this._x1\u003dthis._x2,this._x2\u003dt,this._y0\u003dthis._y1,this._y1\u003dthis._y2,this._y2\u003de}};var _t\u003dfunction t(e){function r(t){return new bt(t,e)}return r.tension\u003dfunction(e){return t(+e)},r}(0);function wt(t,e,r){var n\u003dt._x1,i\u003dt._y1,a\u003dt._x2,o\u003dt._y2;if(t._l01_a\u003e1e-12){var s\u003d2*t._l01_2a+3*t._l01_a*t._l12_a+t._l12_2a,l\u003d3*t._l01_a*(t._l01_a+t._l12_a);n\u003d(n*s-t._x0*t._l12_2a+t._x2*t._l01_2a)/l,i\u003d(i*s-t._y0*t._l12_2a+t._y2*t._l01_2a)/l}if(t._l23_a\u003e1e-12){var c\u003d2*t._l23_2a+3*t._l23_a*t._l12_a+t._l12_2a,u\u003d3*t._l23_a*(t._l23_a+t._l12_a);a\u003d(a*c+t._x1*t._l23_2a-e*t._l12_2a)/u,o\u003d(o*c+t._y1*t._l23_2a-r*t._l12_2a)/u}t._context.bezierCurveTo(n,i,a,o,t._x2,t._y2)}function Tt(t,e){this._context\u003dt,this._alpha\u003de}Tt.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x0\u003dthis._x1\u003dthis._x2\u003dthis._y0\u003dthis._y1\u003dthis._y2\u003dNaN,this._l01_a\u003dthis._l12_a\u003dthis._l23_a\u003dthis._l01_2a\u003dthis._l12_2a\u003dthis._l23_2a\u003dthis._point\u003d0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x2,this._y2);break;case 3:this.point(this._x2,this._y2)}(this._line||0!\u003d\u003dthis._line\u0026\u00261\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){if(t\u003d+t,e\u003d+e,this._point){var r\u003dthis._x2-t,n\u003dthis._y2-e;this._l23_a\u003dMath.sqrt(this._l23_2a\u003dMath.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point\u003d1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point\u003d2;break;case 2:this._point\u003d3;default:wt(this,t,e)}this._l01_a\u003dthis._l12_a,this._l12_a\u003dthis._l23_a,this._l01_2a\u003dthis._l12_2a,this._l12_2a\u003dthis._l23_2a,this._x0\u003dthis._x1,this._x1\u003dthis._x2,this._x2\u003dt,this._y0\u003dthis._y1,this._y1\u003dthis._y2,this._y2\u003de}};var kt\u003dfunction t(e){function r(t){return e?new Tt(t,e):new gt(t,0)}return r.alpha\u003dfunction(e){return t(+e)},r}(.5);function Mt(t,e){this._context\u003dt,this._alpha\u003de}Mt.prototype\u003d{areaStart:lt,areaEnd:lt,lineStart:function(){this._x0\u003dthis._x1\u003dthis._x2\u003dthis._x3\u003dthis._x4\u003dthis._x5\u003dthis._y0\u003dthis._y1\u003dthis._y2\u003dthis._y3\u003dthis._y4\u003dthis._y5\u003dNaN,this._l01_a\u003dthis._l12_a\u003dthis._l23_a\u003dthis._l01_2a\u003dthis._l12_2a\u003dthis._l23_2a\u003dthis._point\u003d0},lineEnd:function(){switch(this._point){case 1:this._context.moveTo(this._x3,this._y3),this._context.closePath();break;case 2:this._context.lineTo(this._x3,this._y3),this._context.closePath();break;case 3:this.point(this._x3,this._y3),this.point(this._x4,this._y4),this.point(this._x5,this._y5)}},point:function(t,e){if(t\u003d+t,e\u003d+e,this._point){var r\u003dthis._x2-t,n\u003dthis._y2-e;this._l23_a\u003dMath.sqrt(this._l23_2a\u003dMath.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point\u003d1,this._x3\u003dt,this._y3\u003de;break;case 1:this._point\u003d2,this._context.moveTo(this._x4\u003dt,this._y4\u003de);break;case 2:this._point\u003d3,this._x5\u003dt,this._y5\u003de;break;default:wt(this,t,e)}this._l01_a\u003dthis._l12_a,this._l12_a\u003dthis._l23_a,this._l01_2a\u003dthis._l12_2a,this._l12_2a\u003dthis._l23_2a,this._x0\u003dthis._x1,this._x1\u003dthis._x2,this._x2\u003dt,this._y0\u003dthis._y1,this._y1\u003dthis._y2,this._y2\u003de}};var At\u003dfunction t(e){function r(t){return e?new Mt(t,e):new yt(t,0)}return r.alpha\u003dfunction(e){return t(+e)},r}(.5);function St(t,e){this._context\u003dt,this._alpha\u003de}St.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x0\u003dthis._x1\u003dthis._x2\u003dthis._y0\u003dthis._y1\u003dthis._y2\u003dNaN,this._l01_a\u003dthis._l12_a\u003dthis._l23_a\u003dthis._l01_2a\u003dthis._l12_2a\u003dthis._l23_2a\u003dthis._point\u003d0},lineEnd:function(){(this._line||0!\u003d\u003dthis._line\u0026\u00263\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){if(t\u003d+t,e\u003d+e,this._point){var r\u003dthis._x2-t,n\u003dthis._y2-e;this._l23_a\u003dMath.sqrt(this._l23_2a\u003dMath.pow(r*r+n*n,this._alpha))}switch(this._point){case 0:this._point\u003d1;break;case 1:this._point\u003d2;break;case 2:this._point\u003d3,this._line?this._context.lineTo(this._x2,this._y2):this._context.moveTo(this._x2,this._y2);break;case 3:this._point\u003d4;default:wt(this,t,e)}this._l01_a\u003dthis._l12_a,this._l12_a\u003dthis._l23_a,this._l01_2a\u003dthis._l12_2a,this._l12_2a\u003dthis._l23_2a,this._x0\u003dthis._x1,this._x1\u003dthis._x2,this._x2\u003dt,this._y0\u003dthis._y1,this._y1\u003dthis._y2,this._y2\u003de}};var Et\u003dfunction t(e){function r(t){return e?new St(t,e):new bt(t,0)}return r.alpha\u003dfunction(e){return t(+e)},r}(.5);function Lt(t){this._context\u003dt}function Ct(t){return t\u003c0?-1:1}function Pt(t,e,r){var n\u003dt._x1-t._x0,i\u003de-t._x1,a\u003d(t._y1-t._y0)/(n||i\u003c0\u0026\u0026-0),o\u003d(r-t._y1)/(i||n\u003c0\u0026\u0026-0),s\u003d(a*i+o*n)/(n+i);return(Ct(a)+Ct(o))*Math.min(Math.abs(a),Math.abs(o),.5*Math.abs(s))||0}function It(t,e){var r\u003dt._x1-t._x0;return r?(3*(t._y1-t._y0)/r-e)/2:e}function Ot(t,e,r){var n\u003dt._x0,i\u003dt._y0,a\u003dt._x1,o\u003dt._y1,s\u003d(a-n)/3;t._context.bezierCurveTo(n+s,i+s*e,a-s,o-s*r,a,o)}function zt(t){this._context\u003dt}function Dt(t){this._context\u003dnew Rt(t)}function Rt(t){this._context\u003dt}function Ft(t){this._context\u003dt}function Bt(t){var e,r,n\u003dt.length-1,i\u003dnew Array(n),a\u003dnew Array(n),o\u003dnew Array(n);for(i[0]\u003d0,a[0]\u003d2,o[0]\u003dt[0]+2*t[1],e\u003d1;e\u003cn-1;++e)i[e]\u003d1,a[e]\u003d4,o[e]\u003d4*t[e]+2*t[e+1];for(i[n-1]\u003d2,a[n-1]\u003d7,o[n-1]\u003d8*t[n-1]+t[n],e\u003d1;e\u003cn;++e)r\u003di[e]/a[e-1],a[e]-\u003dr,o[e]-\u003dr*o[e-1];for(i[n-1]\u003do[n-1]/a[n-1],e\u003dn-2;e\u003e\u003d0;--e)i[e]\u003d(o[e]-i[e+1])/a[e];for(a[n-1]\u003d(t[n]+i[n-1])/2,e\u003d0;e\u003cn-1;++e)a[e]\u003d2*t[e+1]-i[e+1];return[i,a]}function Nt(t,e){this._context\u003dt,this._t\u003de}function jt(t,e){if((i\u003dt.length)\u003e1)for(var r,n,i,a\u003d1,o\u003dt[e[0]],s\u003do.length;a\u003ci;++a)for(n\u003do,o\u003dt[e[a]],r\u003d0;r\u003cs;++r)o[r][1]+\u003do[r][0]\u003disNaN(n[r][1])?n[r][0]:n[r][1]}function Ut(t){for(var e\u003dt.length,r\u003dnew Array(e);--e\u003e\u003d0;)r[e]\u003de;return r}function Vt(t,e){return t[e]}function qt(t){var e\u003dt.map(Ht);return Ut(t).sort((function(t,r){return e[t]-e[r]}))}function Ht(t){for(var e,r\u003d-1,n\u003d0,i\u003dt.length,a\u003d-1/0;++r\u003ci;)(e\u003d+t[r][1])\u003ea\u0026\u0026(a\u003de,n\u003dr);return n}function Gt(t){var e\u003dt.map(Yt);return Ut(t).sort((function(t,r){return e[t]-e[r]}))}function Yt(t){for(var e,r\u003d0,n\u003d-1,i\u003dt.length;++n\u003ci;)(e\u003d+t[n][1])\u0026\u0026(r+\u003de);return r}Lt.prototype\u003d{areaStart:lt,areaEnd:lt,lineStart:function(){this._point\u003d0},lineEnd:function(){this._point\u0026\u0026this._context.closePath()},point:function(t,e){t\u003d+t,e\u003d+e,this._point?this._context.lineTo(t,e):(this._point\u003d1,this._context.moveTo(t,e))}},zt.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x0\u003dthis._x1\u003dthis._y0\u003dthis._y1\u003dthis._t0\u003dNaN,this._point\u003d0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Ot(this,this._t0,It(this,this._t0))}(this._line||0!\u003d\u003dthis._line\u0026\u00261\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line},point:function(t,e){var r\u003dNaN;if(e\u003d+e,(t\u003d+t)!\u003d\u003dthis._x1||e!\u003d\u003dthis._y1){switch(this._point){case 0:this._point\u003d1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point\u003d2;break;case 2:this._point\u003d3,Ot(this,It(this,r\u003dPt(this,t,e)),r);break;default:Ot(this,this._t0,r\u003dPt(this,t,e))}this._x0\u003dthis._x1,this._x1\u003dt,this._y0\u003dthis._y1,this._y1\u003de,this._t0\u003dr}}},(Dt.prototype\u003dObject.create(zt.prototype)).point\u003dfunction(t,e){zt.prototype.point.call(this,e,t)},Rt.prototype\u003d{moveTo:function(t,e){this._context.moveTo(e,t)},closePath:function(){this._context.closePath()},lineTo:function(t,e){this._context.lineTo(e,t)},bezierCurveTo:function(t,e,r,n,i,a){this._context.bezierCurveTo(e,t,n,r,a,i)}},Ft.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x\u003d[],this._y\u003d[]},lineEnd:function(){var t\u003dthis._x,e\u003dthis._y,r\u003dt.length;if(r)if(this._line?this._context.lineTo(t[0],e[0]):this._context.moveTo(t[0],e[0]),2\u003d\u003d\u003dr)this._context.lineTo(t[1],e[1]);else for(var n\u003dBt(t),i\u003dBt(e),a\u003d0,o\u003d1;o\u003cr;++a,++o)this._context.bezierCurveTo(n[0][a],i[0][a],n[1][a],i[1][a],t[o],e[o]);(this._line||0!\u003d\u003dthis._line\u0026\u00261\u003d\u003d\u003dr)\u0026\u0026this._context.closePath(),this._line\u003d1-this._line,this._x\u003dthis._y\u003dnull},point:function(t,e){this._x.push(+t),this._y.push(+e)}},Nt.prototype\u003d{areaStart:function(){this._line\u003d0},areaEnd:function(){this._line\u003dNaN},lineStart:function(){this._x\u003dthis._y\u003dNaN,this._point\u003d0},lineEnd:function(){0\u003cthis._t\u0026\u0026this._t\u003c1\u0026\u00262\u003d\u003d\u003dthis._point\u0026\u0026this._context.lineTo(this._x,this._y),(this._line||0!\u003d\u003dthis._line\u0026\u00261\u003d\u003d\u003dthis._point)\u0026\u0026this._context.closePath(),this._line\u003e\u003d0\u0026\u0026(this._t\u003d1-this._t,this._line\u003d1-this._line)},point:function(t,e){switch(t\u003d+t,e\u003d+e,this._point){case 0:this._point\u003d1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point\u003d2;default:if(this._t\u003c\u003d0)this._context.lineTo(this._x,e),this._context.lineTo(t,e);else{var r\u003dthis._x*(1-this._t)+t*this._t;this._context.lineTo(r,this._y),this._context.lineTo(r,e)}}this._x\u003dt,this._y\u003de}},t.arc\u003dfunction(){var t\u003dm,o\u003dg,w\u003dr(0),T\u003dnull,k\u003dv,M\u003dy,A\u003dx,S\u003dnull;function E(){var r,m,g\u003d+t.apply(this,arguments),v\u003d+o.apply(this,arguments),y\u003dk.apply(this,arguments)-f,x\u003dM.apply(this,arguments)-f,E\u003dn(x-y),L\u003dx\u003ey;if(S||(S\u003dr\u003de.path()),v\u003cg\u0026\u0026(m\u003dv,v\u003dg,g\u003dm),v\u003e1e-12)if(E\u003eh-1e-12)S.moveTo(v*a(y),v*l(y)),S.arc(0,0,v,y,x,!L),g\u003e1e-12\u0026\u0026(S.moveTo(g*a(x),g*l(x)),S.arc(0,0,g,x,y,L));else{var C,P,I\u003dy,O\u003dx,z\u003dy,D\u003dx,R\u003dE,F\u003dE,B\u003dA.apply(this,arguments)/2,N\u003dB\u003e1e-12\u0026\u0026(T?+T.apply(this,arguments):c(g*g+v*v)),j\u003ds(n(v-g)/2,+w.apply(this,arguments)),U\u003dj,V\u003dj;if(N\u003e1e-12){var q\u003dd(N/g*l(B)),H\u003dd(N/v*l(B));(R-\u003d2*q)\u003e1e-12?(z+\u003dq*\u003dL?1:-1,D-\u003dq):(R\u003d0,z\u003dD\u003d(y+x)/2),(F-\u003d2*H)\u003e1e-12?(I+\u003dH*\u003dL?1:-1,O-\u003dH):(F\u003d0,I\u003dO\u003d(y+x)/2)}var G\u003dv*a(I),Y\u003dv*l(I),W\u003dg*a(D),X\u003dg*l(D);if(j\u003e1e-12){var Z,J\u003dv*a(O),K\u003dv*l(O),Q\u003dg*a(z),$\u003dg*l(z);if(E\u003cu\u0026\u0026(Z\u003db(G,Y,Q,$,J,K,W,X))){var tt\u003dG-Z[0],et\u003dY-Z[1],rt\u003dJ-Z[0],nt\u003dK-Z[1],it\u003d1/l(p((tt*rt+et*nt)/(c(tt*tt+et*et)*c(rt*rt+nt*nt)))/2),at\u003dc(Z[0]*Z[0]+Z[1]*Z[1]);U\u003ds(j,(g-at)/(it-1)),V\u003ds(j,(v-at)/(it+1))}}F\u003e1e-12?V\u003e1e-12?(C\u003d_(Q,$,G,Y,v,V,L),P\u003d_(J,K,W,X,v,V,L),S.moveTo(C.cx+C.x01,C.cy+C.y01),V\u003cj?S.arc(C.cx,C.cy,V,i(C.y01,C.x01),i(P.y01,P.x01),!L):(S.arc(C.cx,C.cy,V,i(C.y01,C.x01),i(C.y11,C.x11),!L),S.arc(0,0,v,i(C.cy+C.y11,C.cx+C.x11),i(P.cy+P.y11,P.cx+P.x11),!L),S.arc(P.cx,P.cy,V,i(P.y11,P.x11),i(P.y01,P.x01),!L))):(S.moveTo(G,Y),S.arc(0,0,v,I,O,!L)):S.moveTo(G,Y),g\u003e1e-12\u0026\u0026R\u003e1e-12?U\u003e1e-12?(C\u003d_(W,X,J,K,g,-U,L),P\u003d_(G,Y,Q,$,g,-U,L),S.lineTo(C.cx+C.x01,C.cy+C.y01),U\u003cj?S.arc(C.cx,C.cy,U,i(C.y01,C.x01),i(P.y01,P.x01),!L):(S.arc(C.cx,C.cy,U,i(C.y01,C.x01),i(C.y11,C.x11),!L),S.arc(0,0,g,i(C.cy+C.y11,C.cx+C.x11),i(P.cy+P.y11,P.cx+P.x11),L),S.arc(P.cx,P.cy,U,i(P.y11,P.x11),i(P.y01,P.x01),!L))):S.arc(0,0,g,D,z,L):S.lineTo(W,X)}else S.moveTo(0,0);if(S.closePath(),r)return S\u003dnull,r+\"\"||null}return E.centroid\u003dfunction(){var e\u003d(+t.apply(this,arguments)+ +o.apply(this,arguments))/2,r\u003d(+k.apply(this,arguments)+ +M.apply(this,arguments))/2-u/2;return[a(r)*e,l(r)*e]},E.innerRadius\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:r(+e),E):t},E.outerRadius\u003dfunction(t){return arguments.length?(o\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),E):o},E.cornerRadius\u003dfunction(t){return arguments.length?(w\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),E):w},E.padRadius\u003dfunction(t){return arguments.length?(T\u003dnull\u003d\u003dt?null:\"function\"\u003d\u003dtypeof t?t:r(+t),E):T},E.startAngle\u003dfunction(t){return arguments.length?(k\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),E):k},E.endAngle\u003dfunction(t){return arguments.length?(M\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),E):M},E.padAngle\u003dfunction(t){return arguments.length?(A\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),E):A},E.context\u003dfunction(t){return arguments.length?(S\u003dnull\u003d\u003dt?null:t,E):S},E},t.area\u003dS,t.areaRadial\u003dD,t.curveBasis\u003dfunction(t){return new ut(t)},t.curveBasisClosed\u003dfunction(t){return new ft(t)},t.curveBasisOpen\u003dfunction(t){return new ht(t)},t.curveBundle\u003ddt,t.curveCardinal\u003dvt,t.curveCardinalClosed\u003dxt,t.curveCardinalOpen\u003d_t,t.curveCatmullRom\u003dkt,t.curveCatmullRomClosed\u003dAt,t.curveCatmullRomOpen\u003dEt,t.curveLinear\u003dT,t.curveLinearClosed\u003dfunction(t){return new Lt(t)},t.curveMonotoneX\u003dfunction(t){return new zt(t)},t.curveMonotoneY\u003dfunction(t){return new Dt(t)},t.curveNatural\u003dfunction(t){return new Ft(t)},t.curveStep\u003dfunction(t){return new Nt(t,.5)},t.curveStepAfter\u003dfunction(t){return new Nt(t,1)},t.curveStepBefore\u003dfunction(t){return new Nt(t,0)},t.line\u003dA,t.lineRadial\u003dz,t.linkHorizontal\u003dfunction(){return j(U)},t.linkRadial\u003dfunction(){var t\u003dj(q);return t.angle\u003dt.x,delete t.x,t.radius\u003dt.y,delete t.y,t},t.linkVertical\u003dfunction(){return j(V)},t.pie\u003dfunction(){var t\u003dL,e\u003dE,n\u003dnull,i\u003dr(0),a\u003dr(h),o\u003dr(0);function s(r){var s,l,c,u,f,p\u003dr.length,d\u003d0,m\u003dnew Array(p),g\u003dnew Array(p),v\u003d+i.apply(this,arguments),y\u003dMath.min(h,Math.max(-h,a.apply(this,arguments)-v)),x\u003dMath.min(Math.abs(y)/p,o.apply(this,arguments)),b\u003dx*(y\u003c0?-1:1);for(s\u003d0;s\u003cp;++s)(f\u003dg[m[s]\u003ds]\u003d+t(r[s],s,r))\u003e0\u0026\u0026(d+\u003df);for(null!\u003de?m.sort((function(t,r){return e(g[t],g[r])})):null!\u003dn\u0026\u0026m.sort((function(t,e){return n(r[t],r[e])})),s\u003d0,c\u003dd?(y-p*b)/d:0;s\u003cp;++s,v\u003du)l\u003dm[s],u\u003dv+((f\u003dg[l])\u003e0?f*c:0)+b,g[l]\u003d{data:r[l],index:s,value:f,startAngle:v,endAngle:u,padAngle:x};return g}return s.value\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:r(+e),s):t},s.sortValues\u003dfunction(t){return arguments.length?(e\u003dt,n\u003dnull,s):e},s.sort\u003dfunction(t){return arguments.length?(n\u003dt,e\u003dnull,s):n},s.startAngle\u003dfunction(t){return arguments.length?(i\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),s):i},s.endAngle\u003dfunction(t){return arguments.length?(a\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),s):a},s.padAngle\u003dfunction(t){return arguments.length?(o\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),s):o},s},t.pointRadial\u003dR,t.radialArea\u003dD,t.radialLine\u003dz,t.stack\u003dfunction(){var t\u003dr([]),e\u003dUt,n\u003djt,i\u003dVt;function a(r){var a,o,s\u003dt.apply(this,arguments),l\u003dr.length,c\u003ds.length,u\u003dnew Array(c);for(a\u003d0;a\u003cc;++a){for(var f,h\u003ds[a],p\u003du[a]\u003dnew Array(l),d\u003d0;d\u003cl;++d)p[d]\u003df\u003d[0,+i(r[d],h,d,r)],f.data\u003dr[d];p.key\u003dh}for(a\u003d0,o\u003de(u);a\u003cc;++a)u[o[a]].index\u003da;return n(u,o),u}return a.keys\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:r(F.call(e)),a):t},a.value\u003dfunction(t){return arguments.length?(i\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),a):i},a.order\u003dfunction(t){return arguments.length?(e\u003dnull\u003d\u003dt?Ut:\"function\"\u003d\u003dtypeof t?t:r(F.call(t)),a):e},a.offset\u003dfunction(t){return arguments.length?(n\u003dnull\u003d\u003dt?jt:t,a):n},a},t.stackOffsetDiverging\u003dfunction(t,e){if((s\u003dt.length)\u003e0)for(var r,n,i,a,o,s,l\u003d0,c\u003dt[e[0]].length;l\u003cc;++l)for(a\u003do\u003d0,r\u003d0;r\u003cs;++r)(i\u003d(n\u003dt[e[r]][l])[1]-n[0])\u003e0?(n[0]\u003da,n[1]\u003da+\u003di):i\u003c0?(n[1]\u003do,n[0]\u003do+\u003di):(n[0]\u003d0,n[1]\u003di)},t.stackOffsetExpand\u003dfunction(t,e){if((n\u003dt.length)\u003e0){for(var r,n,i,a\u003d0,o\u003dt[0].length;a\u003co;++a){for(i\u003dr\u003d0;r\u003cn;++r)i+\u003dt[r][a][1]||0;if(i)for(r\u003d0;r\u003cn;++r)t[r][a][1]/\u003di}jt(t,e)}},t.stackOffsetNone\u003djt,t.stackOffsetSilhouette\u003dfunction(t,e){if((r\u003dt.length)\u003e0){for(var r,n\u003d0,i\u003dt[e[0]],a\u003di.length;n\u003ca;++n){for(var o\u003d0,s\u003d0;o\u003cr;++o)s+\u003dt[o][n][1]||0;i[n][1]+\u003di[n][0]\u003d-s/2}jt(t,e)}},t.stackOffsetWiggle\u003dfunction(t,e){if((i\u003dt.length)\u003e0\u0026\u0026(n\u003d(r\u003dt[e[0]]).length)\u003e0){for(var r,n,i,a\u003d0,o\u003d1;o\u003cn;++o){for(var s\u003d0,l\u003d0,c\u003d0;s\u003ci;++s){for(var u\u003dt[e[s]],f\u003du[o][1]||0,h\u003d(f-(u[o-1][1]||0))/2,p\u003d0;p\u003cs;++p){var d\u003dt[e[p]];h+\u003d(d[o][1]||0)-(d[o-1][1]||0)}l+\u003df,c+\u003dh*f}r[o-1][1]+\u003dr[o-1][0]\u003da,l\u0026\u0026(a-\u003dc/l)}r[o-1][1]+\u003dr[o-1][0]\u003da,jt(t,e)}},t.stackOrderAppearance\u003dqt,t.stackOrderAscending\u003dGt,t.stackOrderDescending\u003dfunction(t){return Gt(t).reverse()},t.stackOrderInsideOut\u003dfunction(t){var e,r,n\u003dt.length,i\u003dt.map(Yt),a\u003dqt(t),o\u003d0,s\u003d0,l\u003d[],c\u003d[];for(e\u003d0;e\u003cn;++e)r\u003da[e],o\u003cs?(o+\u003di[r],l.push(r)):(s+\u003di[r],c.push(r));return c.reverse().concat(l)},t.stackOrderNone\u003dUt,t.stackOrderReverse\u003dfunction(t){return Ut(t).reverse()},t.symbol\u003dfunction(){var t\u003dr(H),n\u003dr(64),i\u003dnull;function a(){var r;if(i||(i\u003dr\u003de.path()),t.apply(this,arguments).draw(i,+n.apply(this,arguments)),r)return i\u003dnull,r+\"\"||null}return a.type\u003dfunction(e){return arguments.length?(t\u003d\"function\"\u003d\u003dtypeof e?e:r(e),a):t},a.size\u003dfunction(t){return arguments.length?(n\u003d\"function\"\u003d\u003dtypeof t?t:r(+t),a):n},a.context\u003dfunction(t){return arguments.length?(i\u003dnull\u003d\u003dt?null:t,a):i},a},t.symbolCircle\u003dH,t.symbolCross\u003dG,t.symbolDiamond\u003dX,t.symbolSquare\u003d$,t.symbolStar\u003dQ,t.symbolTriangle\u003det,t.symbolWye\u003dot,t.symbols\u003dst,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-path\":169}],172:[function(t,e,r){!function(n,i){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?i(r,t(\"d3-time\")):i((n\u003dn||self).d3\u003dn.d3||{},n.d3)}(this,(function(t,e){\"use strict\";function r(t){if(0\u003c\u003dt.y\u0026\u0026t.y\u003c100){var e\u003dnew Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function n(t){if(0\u003c\u003dt.y\u0026\u0026t.y\u003c100){var e\u003dnew Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function i(t,e,r){return{y:t,m:e,d:r,H:0,M:0,S:0,L:0}}function a(t){var a\u003dt.dateTime,o\u003dt.date,l\u003dt.time,c\u003dt.periods,u\u003dt.days,f\u003dt.shortDays,h\u003dt.months,yt\u003dt.shortMonths,xt\u003dp(c),bt\u003dd(c),_t\u003dp(u),wt\u003dd(u),Tt\u003dp(f),kt\u003dd(f),Mt\u003dp(h),At\u003dd(h),St\u003dp(yt),Et\u003dd(yt),Lt\u003d{a:function(t){return f[t.getDay()]},A:function(t){return u[t.getDay()]},b:function(t){return yt[t.getMonth()]},B:function(t){return h[t.getMonth()]},c:null,d:D,e:D,f:j,H:R,I:F,j:B,L:N,m:U,M:V,p:function(t){return c[+(t.getHours()\u003e\u003d12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:gt,s:vt,S:q,u:H,U:G,V:Y,w:W,W:X,x:null,X:null,y:Z,Y:J,Z:K,\"%\":mt},Ct\u003d{a:function(t){return f[t.getUTCDay()]},A:function(t){return u[t.getUTCDay()]},b:function(t){return yt[t.getUTCMonth()]},B:function(t){return h[t.getUTCMonth()]},c:null,d:Q,e:Q,f:nt,H:$,I:tt,j:et,L:rt,m:it,M:at,p:function(t){return c[+(t.getUTCHours()\u003e\u003d12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:gt,s:vt,S:ot,u:st,U:lt,V:ct,w:ut,W:ft,x:null,X:null,y:ht,Y:pt,Z:dt,\"%\":mt},Pt\u003d{a:function(t,e,r){var n\u003dTt.exec(e.slice(r));return n?(t.w\u003dkt[n[0].toLowerCase()],r+n[0].length):-1},A:function(t,e,r){var n\u003d_t.exec(e.slice(r));return n?(t.w\u003dwt[n[0].toLowerCase()],r+n[0].length):-1},b:function(t,e,r){var n\u003dSt.exec(e.slice(r));return n?(t.m\u003dEt[n[0].toLowerCase()],r+n[0].length):-1},B:function(t,e,r){var n\u003dMt.exec(e.slice(r));return n?(t.m\u003dAt[n[0].toLowerCase()],r+n[0].length):-1},c:function(t,e,r){return zt(t,a,e,r)},d:M,e:M,f:P,H:S,I:S,j:A,L:C,m:k,M:E,p:function(t,e,r){var n\u003dxt.exec(e.slice(r));return n?(t.p\u003dbt[n[0].toLowerCase()],r+n[0].length):-1},q:T,Q:O,s:z,S:L,u:g,U:v,V:y,w:m,W:x,x:function(t,e,r){return zt(t,o,e,r)},X:function(t,e,r){return zt(t,l,e,r)},y:_,Y:b,Z:w,\"%\":I};function It(t,e){return function(r){var n,i,a,o\u003d[],l\u003d-1,c\u003d0,u\u003dt.length;for(r instanceof Date||(r\u003dnew Date(+r));++l\u003cu;)37\u003d\u003d\u003dt.charCodeAt(l)\u0026\u0026(o.push(t.slice(c,l)),null!\u003d(i\u003ds[n\u003dt.charAt(++l)])?n\u003dt.charAt(++l):i\u003d\"e\"\u003d\u003d\u003dn?\" \":\"0\",(a\u003de[n])\u0026\u0026(n\u003da(r,i)),o.push(n),c\u003dl+1);return o.push(t.slice(c,l)),o.join(\"\")}}function Ot(t,a){return function(o){var s,l,c\u003di(1900,void 0,1);if(zt(c,t,o+\u003d\"\",0)!\u003do.length)return null;if(\"Q\"in c)return new Date(c.Q);if(\"s\"in c)return new Date(1e3*c.s+(\"L\"in c?c.L:0));if(a\u0026\u0026!(\"Z\"in c)\u0026\u0026(c.Z\u003d0),\"p\"in c\u0026\u0026(c.H\u003dc.H%12+12*c.p),void 0\u003d\u003d\u003dc.m\u0026\u0026(c.m\u003d\"q\"in c?c.q:0),\"V\"in c){if(c.V\u003c1||c.V\u003e53)return null;\"w\"in c||(c.w\u003d1),\"Z\"in c?(l\u003d(s\u003dn(i(c.y,0,1))).getUTCDay(),s\u003dl\u003e4||0\u003d\u003d\u003dl?e.utcMonday.ceil(s):e.utcMonday(s),s\u003de.utcDay.offset(s,7*(c.V-1)),c.y\u003ds.getUTCFullYear(),c.m\u003ds.getUTCMonth(),c.d\u003ds.getUTCDate()+(c.w+6)%7):(l\u003d(s\u003dr(i(c.y,0,1))).getDay(),s\u003dl\u003e4||0\u003d\u003d\u003dl?e.timeMonday.ceil(s):e.timeMonday(s),s\u003de.timeDay.offset(s,7*(c.V-1)),c.y\u003ds.getFullYear(),c.m\u003ds.getMonth(),c.d\u003ds.getDate()+(c.w+6)%7)}else(\"W\"in c||\"U\"in c)\u0026\u0026(\"w\"in c||(c.w\u003d\"u\"in c?c.u%7:\"W\"in c?1:0),l\u003d\"Z\"in c?n(i(c.y,0,1)).getUTCDay():r(i(c.y,0,1)).getDay(),c.m\u003d0,c.d\u003d\"W\"in c?(c.w+6)%7+7*c.W-(l+5)%7:c.w+7*c.U-(l+6)%7);return\"Z\"in c?(c.H+\u003dc.Z/100|0,c.M+\u003dc.Z%100,n(c)):r(c)}}function zt(t,e,r,n){for(var i,a,o\u003d0,l\u003de.length,c\u003dr.length;o\u003cl;){if(n\u003e\u003dc)return-1;if(37\u003d\u003d\u003d(i\u003de.charCodeAt(o++))){if(i\u003de.charAt(o++),!(a\u003dPt[i in s?e.charAt(o++):i])||(n\u003da(t,r,n))\u003c0)return-1}else if(i!\u003dr.charCodeAt(n++))return-1}return n}return Lt.x\u003dIt(o,Lt),Lt.X\u003dIt(l,Lt),Lt.c\u003dIt(a,Lt),Ct.x\u003dIt(o,Ct),Ct.X\u003dIt(l,Ct),Ct.c\u003dIt(a,Ct),{format:function(t){var e\u003dIt(t+\u003d\"\",Lt);return e.toString\u003dfunction(){return t},e},parse:function(t){var e\u003dOt(t+\u003d\"\",!1);return e.toString\u003dfunction(){return t},e},utcFormat:function(t){var e\u003dIt(t+\u003d\"\",Ct);return e.toString\u003dfunction(){return t},e},utcParse:function(t){var e\u003dOt(t+\u003d\"\",!0);return e.toString\u003dfunction(){return t},e}}}var o,s\u003d{\"-\":\"\",_:\" \",0:\"0\"},l\u003d/^\\s*\\d+/,c\u003d/^%/,u\u003d/[\\\\^$*+?|[\\]().{}]/g;function f(t,e,r){var n\u003dt\u003c0?\"-\":\"\",i\u003d(n?-t:t)+\"\",a\u003di.length;return n+(a\u003cr?new Array(r-a+1).join(e)+i:i)}function h(t){return t.replace(u,\"\\\\$\u0026\")}function p(t){return new RegExp(\"^(?:\"+t.map(h).join(\"|\")+\")\",\"i\")}function d(t){for(var e\u003d{},r\u003d-1,n\u003dt.length;++r\u003cn;)e[t[r].toLowerCase()]\u003dr;return e}function m(t,e,r){var n\u003dl.exec(e.slice(r,r+1));return n?(t.w\u003d+n[0],r+n[0].length):-1}function g(t,e,r){var n\u003dl.exec(e.slice(r,r+1));return n?(t.u\u003d+n[0],r+n[0].length):-1}function v(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.U\u003d+n[0],r+n[0].length):-1}function y(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.V\u003d+n[0],r+n[0].length):-1}function x(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.W\u003d+n[0],r+n[0].length):-1}function b(t,e,r){var n\u003dl.exec(e.slice(r,r+4));return n?(t.y\u003d+n[0],r+n[0].length):-1}function _(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.y\u003d+n[0]+(+n[0]\u003e68?1900:2e3),r+n[0].length):-1}function w(t,e,r){var n\u003d/^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(e.slice(r,r+6));return n?(t.Z\u003dn[1]?0:-(n[2]+(n[3]||\"00\")),r+n[0].length):-1}function T(t,e,r){var n\u003dl.exec(e.slice(r,r+1));return n?(t.q\u003d3*n[0]-3,r+n[0].length):-1}function k(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.m\u003dn[0]-1,r+n[0].length):-1}function M(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.d\u003d+n[0],r+n[0].length):-1}function A(t,e,r){var n\u003dl.exec(e.slice(r,r+3));return n?(t.m\u003d0,t.d\u003d+n[0],r+n[0].length):-1}function S(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.H\u003d+n[0],r+n[0].length):-1}function E(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.M\u003d+n[0],r+n[0].length):-1}function L(t,e,r){var n\u003dl.exec(e.slice(r,r+2));return n?(t.S\u003d+n[0],r+n[0].length):-1}function C(t,e,r){var n\u003dl.exec(e.slice(r,r+3));return n?(t.L\u003d+n[0],r+n[0].length):-1}function P(t,e,r){var n\u003dl.exec(e.slice(r,r+6));return n?(t.L\u003dMath.floor(n[0]/1e3),r+n[0].length):-1}function I(t,e,r){var n\u003dc.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function O(t,e,r){var n\u003dl.exec(e.slice(r));return n?(t.Q\u003d+n[0],r+n[0].length):-1}function z(t,e,r){var n\u003dl.exec(e.slice(r));return n?(t.s\u003d+n[0],r+n[0].length):-1}function D(t,e){return f(t.getDate(),e,2)}function R(t,e){return f(t.getHours(),e,2)}function F(t,e){return f(t.getHours()%12||12,e,2)}function B(t,r){return f(1+e.timeDay.count(e.timeYear(t),t),r,3)}function N(t,e){return f(t.getMilliseconds(),e,3)}function j(t,e){return N(t,e)+\"000\"}function U(t,e){return f(t.getMonth()+1,e,2)}function V(t,e){return f(t.getMinutes(),e,2)}function q(t,e){return f(t.getSeconds(),e,2)}function H(t){var e\u003dt.getDay();return 0\u003d\u003d\u003de?7:e}function G(t,r){return f(e.timeSunday.count(e.timeYear(t)-1,t),r,2)}function Y(t,r){var n\u003dt.getDay();return t\u003dn\u003e\u003d4||0\u003d\u003d\u003dn?e.timeThursday(t):e.timeThursday.ceil(t),f(e.timeThursday.count(e.timeYear(t),t)+(4\u003d\u003d\u003de.timeYear(t).getDay()),r,2)}function W(t){return t.getDay()}function X(t,r){return f(e.timeMonday.count(e.timeYear(t)-1,t),r,2)}function Z(t,e){return f(t.getFullYear()%100,e,2)}function J(t,e){return f(t.getFullYear()%1e4,e,4)}function K(t){var e\u003dt.getTimezoneOffset();return(e\u003e0?\"-\":(e*\u003d-1,\"+\"))+f(e/60|0,\"0\",2)+f(e%60,\"0\",2)}function Q(t,e){return f(t.getUTCDate(),e,2)}function $(t,e){return f(t.getUTCHours(),e,2)}function tt(t,e){return f(t.getUTCHours()%12||12,e,2)}function et(t,r){return f(1+e.utcDay.count(e.utcYear(t),t),r,3)}function rt(t,e){return f(t.getUTCMilliseconds(),e,3)}function nt(t,e){return rt(t,e)+\"000\"}function it(t,e){return f(t.getUTCMonth()+1,e,2)}function at(t,e){return f(t.getUTCMinutes(),e,2)}function ot(t,e){return f(t.getUTCSeconds(),e,2)}function st(t){var e\u003dt.getUTCDay();return 0\u003d\u003d\u003de?7:e}function lt(t,r){return f(e.utcSunday.count(e.utcYear(t)-1,t),r,2)}function ct(t,r){var n\u003dt.getUTCDay();return t\u003dn\u003e\u003d4||0\u003d\u003d\u003dn?e.utcThursday(t):e.utcThursday.ceil(t),f(e.utcThursday.count(e.utcYear(t),t)+(4\u003d\u003d\u003de.utcYear(t).getUTCDay()),r,2)}function ut(t){return t.getUTCDay()}function ft(t,r){return f(e.utcMonday.count(e.utcYear(t)-1,t),r,2)}function ht(t,e){return f(t.getUTCFullYear()%100,e,2)}function pt(t,e){return f(t.getUTCFullYear()%1e4,e,4)}function dt(){return\"+0000\"}function mt(){return\"%\"}function gt(t){return+t}function vt(t){return Math.floor(+t/1e3)}function yt(e){return o\u003da(e),t.timeFormat\u003do.format,t.timeParse\u003do.parse,t.utcFormat\u003do.utcFormat,t.utcParse\u003do.utcParse,o}yt({dateTime:\"%x, %X\",date:\"%-m/%-d/%Y\",time:\"%-I:%M:%S %p\",periods:[\"AM\",\"PM\"],days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"]});var xt\u003dDate.prototype.toISOString?function(t){return t.toISOString()}:t.utcFormat(\"%Y-%m-%dT%H:%M:%S.%LZ\");var bt\u003d+new Date(\"2000-01-01T00:00:00.000Z\")?function(t){var e\u003dnew Date(t);return isNaN(e)?null:e}:t.utcParse(\"%Y-%m-%dT%H:%M:%S.%LZ\");t.isoFormat\u003dxt,t.isoParse\u003dbt,t.timeFormatDefaultLocale\u003dyt,t.timeFormatLocale\u003da,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{\"d3-time\":173}],173:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).d3\u003dt.d3||{})}(this,(function(t){\"use strict\";var e\u003dnew Date,r\u003dnew Date;function n(t,i,a,o){function s(e){return t(e\u003d0\u003d\u003d\u003darguments.length?new Date:new Date(+e)),e}return s.floor\u003dfunction(e){return t(e\u003dnew Date(+e)),e},s.ceil\u003dfunction(e){return t(e\u003dnew Date(e-1)),i(e,1),t(e),e},s.round\u003dfunction(t){var e\u003ds(t),r\u003ds.ceil(t);return t-e\u003cr-t?e:r},s.offset\u003dfunction(t,e){return i(t\u003dnew Date(+t),null\u003d\u003de?1:Math.floor(e)),t},s.range\u003dfunction(e,r,n){var a,o\u003d[];if(e\u003ds.ceil(e),n\u003dnull\u003d\u003dn?1:Math.floor(n),!(e\u003cr\u0026\u0026n\u003e0))return o;do{o.push(a\u003dnew Date(+e)),i(e,n),t(e)}while(a\u003ce\u0026\u0026e\u003cr);return o},s.filter\u003dfunction(e){return n((function(r){if(r\u003e\u003dr)for(;t(r),!e(r);)r.setTime(r-1)}),(function(t,r){if(t\u003e\u003dt)if(r\u003c0)for(;++r\u003c\u003d0;)for(;i(t,-1),!e(t););else for(;--r\u003e\u003d0;)for(;i(t,1),!e(t););}))},a\u0026\u0026(s.count\u003dfunction(n,i){return e.setTime(+n),r.setTime(+i),t(e),t(r),Math.floor(a(e,r))},s.every\u003dfunction(t){return t\u003dMath.floor(t),isFinite(t)\u0026\u0026t\u003e0?t\u003e1?s.filter(o?function(e){return o(e)%t\u003d\u003d0}:function(e){return s.count(0,e)%t\u003d\u003d0}):s:null}),s}var i\u003dn((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));i.every\u003dfunction(t){return t\u003dMath.floor(t),isFinite(t)\u0026\u0026t\u003e0?t\u003e1?n((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,r){e.setTime(+e+r*t)}),(function(e,r){return(r-e)/t})):i:null};var a\u003di.range,o\u003dn((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),s\u003do.range,l\u003dn((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),c\u003dl.range,u\u003dn((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),f\u003du.range,h\u003dn((function(t){t.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5}),(function(t){return t.getDate()-1})),p\u003dh.range;function d(t){return n((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var m\u003dd(0),g\u003dd(1),v\u003dd(2),y\u003dd(3),x\u003dd(4),b\u003dd(5),_\u003dd(6),w\u003dm.range,T\u003dg.range,k\u003dv.range,M\u003dy.range,A\u003dx.range,S\u003db.range,E\u003d_.range,L\u003dn((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),C\u003dL.range,P\u003dn((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));P.every\u003dfunction(t){return isFinite(t\u003dMath.floor(t))\u0026\u0026t\u003e0?n((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,r){e.setFullYear(e.getFullYear()+r*t)})):null};var I\u003dP.range,O\u003dn((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getUTCMinutes()})),z\u003dO.range,D\u003dn((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getUTCHours()})),R\u003dD.range,F\u003dn((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1})),B\u003dF.range;function N(t){return n((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var j\u003dN(0),U\u003dN(1),V\u003dN(2),q\u003dN(3),H\u003dN(4),G\u003dN(5),Y\u003dN(6),W\u003dj.range,X\u003dU.range,Z\u003dV.range,J\u003dq.range,K\u003dH.range,Q\u003dG.range,$\u003dY.range,tt\u003dn((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()})),et\u003dtt.range,rt\u003dn((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));rt.every\u003dfunction(t){return isFinite(t\u003dMath.floor(t))\u0026\u0026t\u003e0?n((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,r){e.setUTCFullYear(e.getUTCFullYear()+r*t)})):null};var nt\u003drt.range;t.timeDay\u003dh,t.timeDays\u003dp,t.timeFriday\u003db,t.timeFridays\u003dS,t.timeHour\u003du,t.timeHours\u003df,t.timeInterval\u003dn,t.timeMillisecond\u003di,t.timeMilliseconds\u003da,t.timeMinute\u003dl,t.timeMinutes\u003dc,t.timeMonday\u003dg,t.timeMondays\u003dT,t.timeMonth\u003dL,t.timeMonths\u003dC,t.timeSaturday\u003d_,t.timeSaturdays\u003dE,t.timeSecond\u003do,t.timeSeconds\u003ds,t.timeSunday\u003dm,t.timeSundays\u003dw,t.timeThursday\u003dx,t.timeThursdays\u003dA,t.timeTuesday\u003dv,t.timeTuesdays\u003dk,t.timeWednesday\u003dy,t.timeWednesdays\u003dM,t.timeWeek\u003dm,t.timeWeeks\u003dw,t.timeYear\u003dP,t.timeYears\u003dI,t.utcDay\u003dF,t.utcDays\u003dB,t.utcFriday\u003dG,t.utcFridays\u003dQ,t.utcHour\u003dD,t.utcHours\u003dR,t.utcMillisecond\u003di,t.utcMilliseconds\u003da,t.utcMinute\u003dO,t.utcMinutes\u003dz,t.utcMonday\u003dU,t.utcMondays\u003dX,t.utcMonth\u003dtt,t.utcMonths\u003det,t.utcSaturday\u003dY,t.utcSaturdays\u003d$,t.utcSecond\u003do,t.utcSeconds\u003ds,t.utcSunday\u003dj,t.utcSundays\u003dW,t.utcThursday\u003dH,t.utcThursdays\u003dK,t.utcTuesday\u003dV,t.utcTuesdays\u003dZ,t.utcWednesday\u003dq,t.utcWednesdays\u003dJ,t.utcWeek\u003dj,t.utcWeeks\u003dW,t.utcYear\u003drt,t.utcYears\u003dnt,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],174:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).d3\u003dt.d3||{})}(this,(function(t){\"use strict\";var e,r,n\u003d0,i\u003d0,a\u003d0,o\u003d0,s\u003d0,l\u003d0,c\u003d\"object\"\u003d\u003dtypeof performance\u0026\u0026performance.now?performance:Date,u\u003d\"object\"\u003d\u003dtypeof window\u0026\u0026window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function f(){return s||(u(h),s\u003dc.now()+l)}function h(){s\u003d0}function p(){this._call\u003dthis._time\u003dthis._next\u003dnull}function d(t,e,r){var n\u003dnew p;return n.restart(t,e,r),n}function m(){f(),++n;for(var t,r\u003de;r;)(t\u003ds-r._time)\u003e\u003d0\u0026\u0026r._call.call(null,t),r\u003dr._next;--n}function g(){s\u003d(o\u003dc.now())+l,n\u003di\u003d0;try{m()}finally{n\u003d0,function(){var t,n,i\u003de,a\u003d1/0;for(;i;)i._call?(a\u003ei._time\u0026\u0026(a\u003di._time),t\u003di,i\u003di._next):(n\u003di._next,i._next\u003dnull,i\u003dt?t._next\u003dn:e\u003dn);r\u003dt,y(a)}(),s\u003d0}}function v(){var t\u003dc.now(),e\u003dt-o;e\u003e1e3\u0026\u0026(l-\u003de,o\u003dt)}function y(t){n||(i\u0026\u0026(i\u003dclearTimeout(i)),t-s\u003e24?(t\u003c1/0\u0026\u0026(i\u003dsetTimeout(g,t-c.now()-l)),a\u0026\u0026(a\u003dclearInterval(a))):(a||(o\u003dc.now(),a\u003dsetInterval(v,1e3)),n\u003d1,u(g)))}p.prototype\u003dd.prototype\u003d{constructor:p,restart:function(t,n,i){if(\"function\"!\u003dtypeof t)throw new TypeError(\"callback is not a function\");i\u003d(null\u003d\u003di?f():+i)+(null\u003d\u003dn?0:+n),this._next||r\u003d\u003d\u003dthis||(r?r._next\u003dthis:e\u003dthis,r\u003dthis),this._call\u003dt,this._time\u003di,y()},stop:function(){this._call\u0026\u0026(this._call\u003dnull,this._time\u003d1/0,y())}},t.interval\u003dfunction(t,e,r){var n\u003dnew p,i\u003de;return null\u003d\u003de?(n.restart(t,e,r),n):(e\u003d+e,r\u003dnull\u003d\u003dr?f():+r,n.restart((function a(o){o+\u003di,n.restart(a,i+\u003de,r),t(o)}),e,r),n)},t.now\u003df,t.timeout\u003dfunction(t,e,r){var n\u003dnew p;return e\u003dnull\u003d\u003de?0:+e,n.restart((function(r){n.stop(),t(r+e)}),e,r),n},t.timer\u003dd,t.timerFlush\u003dm,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],175:[function(t,e,r){e.exports\u003dfunction(){for(var t\u003d0;t\u003carguments.length;t++)if(void 0!\u003d\u003darguments[t])return arguments[t]}},{}],176:[function(t,e,r){\"use strict\";var n\u003dt(\"incremental-convex-hull\"),i\u003dt(\"uniq\");function a(t,e){this.point\u003dt,this.index\u003de}function o(t,e){for(var r\u003dt.point,n\u003de.point,i\u003dr.length,a\u003d0;a\u003ci;++a){var o\u003dn[a]-r[a];if(o)return o}return 0}e.exports\u003dfunction(t,e){var r\u003dt.length;if(0\u003d\u003d\u003dr)return[];var s\u003dt[0].length;if(s\u003c1)return[];if(1\u003d\u003d\u003ds)return function(t,e,r){if(1\u003d\u003d\u003dt)return r?[[-1,0]]:[];var n\u003de.map((function(t,e){return[t[0],e]}));n.sort((function(t,e){return t[0]-e[0]}));for(var i\u003dnew Array(t-1),a\u003d1;a\u003ct;++a){var o\u003dn[a-1],s\u003dn[a];i[a-1]\u003d[o[1],s[1]]}r\u0026\u0026i.push([-1,i[0][1]],[i[t-1][1],-1]);return i}(r,t,e);for(var l\u003dnew Array(r),c\u003d1,u\u003d0;u\u003cr;++u){for(var f\u003dt[u],h\u003dnew Array(s+1),p\u003d0,d\u003d0;d\u003cs;++d){var m\u003df[d];h[d]\u003dm,p+\u003dm*m}h[s]\u003dp,l[u]\u003dnew a(h,u),c\u003dMath.max(p,c)}i(l,o),r\u003dl.length;var g\u003dnew Array(r+s+1),v\u003dnew Array(r+s+1),y\u003d(s+1)*(s+1)*c,x\u003dnew Array(s+1);for(u\u003d0;u\u003c\u003ds;++u)x[u]\u003d0;x[s]\u003dy,g[0]\u003dx.slice(),v[0]\u003d-1;for(u\u003d0;u\u003c\u003ds;++u){(h\u003dx.slice())[u]\u003d1,g[u+1]\u003dh,v[u+1]\u003d-1}for(u\u003d0;u\u003cr;++u){var b\u003dl[u];g[u+s+1]\u003db.point,v[u+s+1]\u003db.index}var _\u003dn(g,!1);_\u003de?_.filter((function(t){for(var e\u003d0,r\u003d0;r\u003c\u003ds;++r){var n\u003dv[t[r]];if(n\u003c0\u0026\u0026++e\u003e\u003d2)return!1;t[r]\u003dn}return!0})):_.filter((function(t){for(var e\u003d0;e\u003c\u003ds;++e){var r\u003dv[t[e]];if(r\u003c0)return!1;t[e]\u003dr}return!0}));if(1\u0026s)for(u\u003d0;u\u003c_.length;++u){h\u003d(b\u003d_[u])[0];b[0]\u003db[1],b[1]\u003dh}return _}},{\"incremental-convex-hull\":442,uniq:615}],177:[function(t,e,r){\"use strict\";e.exports\u003da;var n\u003d(a.canvas\u003ddocument.createElement(\"canvas\")).getContext(\"2d\"),i\u003do([32,126]);function a(t,e){Array.isArray(t)\u0026\u0026(t\u003dt.join(\", \"));var r,a\u003d{},s\u003d16,l\u003d.05;e\u0026\u0026(2\u003d\u003d\u003de.length\u0026\u0026\"number\"\u003d\u003dtypeof e[0]?r\u003do(e):Array.isArray(e)?r\u003de:(e.o?r\u003do(e.o):e.pairs\u0026\u0026(r\u003de.pairs),e.fontSize\u0026\u0026(s\u003de.fontSize),null!\u003de.threshold\u0026\u0026(l\u003de.threshold))),r||(r\u003di),n.font\u003ds+\"px \"+t;for(var c\u003d0;c\u003cr.length;c++){var u\u003dr[c],f\u003dn.measureText(u[0]).width+n.measureText(u[1]).width,h\u003dn.measureText(u).width;if(Math.abs(f-h)\u003es*l){var p\u003d(h-f)/s;a[u]\u003d1e3*p}}return a}function o(t){for(var e\u003d[],r\u003dt[0];r\u003c\u003dt[1];r++)for(var n\u003dString.fromCharCode(r),i\u003dt[0];i\u003ct[1];i++){var a\u003dn+String.fromCharCode(i);e.push(a)}return e}a.createPairs\u003do,a.ascii\u003di},{}],178:[function(t,e,r){(function(t){(function(){var r\u003d!1;if(\"undefined\"!\u003dtypeof Float64Array){var n\u003dnew Float64Array(1),i\u003dnew Uint32Array(n.buffer);if(n[0]\u003d1,r\u003d!0,1072693248\u003d\u003d\u003di[1]){e.exports\u003dfunction(t){return n[0]\u003dt,[i[0],i[1]]},e.exports.pack\u003dfunction(t,e){return i[0]\u003dt,i[1]\u003de,n[0]},e.exports.lo\u003dfunction(t){return n[0]\u003dt,i[0]},e.exports.hi\u003dfunction(t){return n[0]\u003dt,i[1]}}else if(1072693248\u003d\u003d\u003di[0]){e.exports\u003dfunction(t){return n[0]\u003dt,[i[1],i[0]]},e.exports.pack\u003dfunction(t,e){return i[1]\u003dt,i[0]\u003de,n[0]},e.exports.lo\u003dfunction(t){return n[0]\u003dt,i[1]},e.exports.hi\u003dfunction(t){return n[0]\u003dt,i[0]}}else r\u003d!1}if(!r){var a\u003dnew t(8);e.exports\u003dfunction(t){return a.writeDoubleLE(t,0,!0),[a.readUInt32LE(0,!0),a.readUInt32LE(4,!0)]},e.exports.pack\u003dfunction(t,e){return a.writeUInt32LE(t,0,!0),a.writeUInt32LE(e,4,!0),a.readDoubleLE(0,!0)},e.exports.lo\u003dfunction(t){return a.writeDoubleLE(t,0,!0),a.readUInt32LE(0,!0)},e.exports.hi\u003dfunction(t){return a.writeDoubleLE(t,0,!0),a.readUInt32LE(4,!0)}}e.exports.sign\u003dfunction(t){return e.exports.hi(t)\u003e\u003e\u003e31},e.exports.exponent\u003dfunction(t){return(e.exports.hi(t)\u003c\u003c1\u003e\u003e\u003e21)-1023},e.exports.fraction\u003dfunction(t){var r\u003de.exports.lo(t),n\u003de.exports.hi(t),i\u003d1048575\u0026n;return 2146435072\u0026n\u0026\u0026(i+\u003d1\u003c\u003c20),[r,i]},e.exports.denormalized\u003dfunction(t){return!(2146435072\u0026e.exports.hi(t))}}).call(this)}).call(this,t(\"buffer\").Buffer)},{buffer:117}],179:[function(t,e,r){var n\u003dt(\"abs-svg-path\"),i\u003dt(\"normalize-svg-path\"),a\u003d{M:\"moveTo\",C:\"bezierCurveTo\"};e.exports\u003dfunction(t,e){t.beginPath(),i(n(e)).forEach((function(e){var r\u003de[0],n\u003de.slice(1);t[a[r]].apply(t,n)})),t.closePath()}},{\"abs-svg-path\":71,\"normalize-svg-path\":481}],180:[function(t,e,r){e.exports\u003dfunction(t){switch(t){case\"int8\":return Int8Array;case\"int16\":return Int16Array;case\"int32\":return Int32Array;case\"uint8\":return Uint8Array;case\"uint16\":return Uint16Array;case\"uint32\":return Uint32Array;case\"float32\":return Float32Array;case\"float64\":return Float64Array;case\"array\":return Array;case\"uint8_clamped\":return Uint8ClampedArray}}},{}],181:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){switch(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d0),typeof t){case\"number\":if(t\u003e0)return function(t,e){var r,n;for(r\u003dnew Array(t),n\u003d0;n\u003ct;++n)r[n]\u003de;return r}(0|t,e);break;case\"object\":if(\"number\"\u003d\u003dtypeof t.length)return function t(e,r,n){var i\u003d0|e[n];if(i\u003c\u003d0)return[];var a,o\u003dnew Array(i);if(n\u003d\u003d\u003de.length-1)for(a\u003d0;a\u003ci;++a)o[a]\u003dr;else for(a\u003d0;a\u003ci;++a)o[a]\u003dt(e,r,n+1);return o}(t,e,0)}return[]}},{}],182:[function(t,e,r){\"use strict\";function n(t,e,r){r\u003dr||2;var n,s,l,c,u,p,d,g\u003de\u0026\u0026e.length,v\u003dg?e[0]*r:t.length,y\u003di(t,0,v,r,!0),x\u003d[];if(!y||y.next\u003d\u003d\u003dy.prev)return x;if(g\u0026\u0026(y\u003dfunction(t,e,r,n){var o,s,l,c,u,p\u003d[];for(o\u003d0,s\u003de.length;o\u003cs;o++)l\u003de[o]*n,c\u003do\u003cs-1?e[o+1]*n:t.length,(u\u003di(t,l,c,n,!1))\u003d\u003d\u003du.next\u0026\u0026(u.steiner\u003d!0),p.push(m(u));for(p.sort(f),o\u003d0;o\u003cp.length;o++)h(p[o],r),r\u003da(r,r.next);return r}(t,e,y,r)),t.length\u003e80*r){n\u003dl\u003dt[0],s\u003dc\u003dt[1];for(var b\u003dr;b\u003cv;b+\u003dr)(u\u003dt[b])\u003cn\u0026\u0026(n\u003du),(p\u003dt[b+1])\u003cs\u0026\u0026(s\u003dp),u\u003el\u0026\u0026(l\u003du),p\u003ec\u0026\u0026(c\u003dp);d\u003d0!\u003d\u003d(d\u003dMath.max(l-n,c-s))?1/d:0}return o(y,x,r,n,s,d),x}function i(t,e,r,n,i){var a,o;if(i\u003d\u003d\u003dE(t,e,r,n)\u003e0)for(a\u003de;a\u003cr;a+\u003dn)o\u003dM(a,t[a],t[a+1],o);else for(a\u003dr-n;a\u003e\u003de;a-\u003dn)o\u003dM(a,t[a],t[a+1],o);return o\u0026\u0026x(o,o.next)\u0026\u0026(A(o),o\u003do.next),o}function a(t,e){if(!t)return t;e||(e\u003dt);var r,n\u003dt;do{if(r\u003d!1,n.steiner||!x(n,n.next)\u0026\u00260!\u003d\u003dy(n.prev,n,n.next))n\u003dn.next;else{if(A(n),(n\u003de\u003dn.prev)\u003d\u003d\u003dn.next)break;r\u003d!0}}while(r||n!\u003d\u003de);return e}function o(t,e,r,n,i,f,h){if(t){!h\u0026\u0026f\u0026\u0026function(t,e,r,n){var i\u003dt;do{null\u003d\u003d\u003di.z\u0026\u0026(i.z\u003dd(i.x,i.y,e,r,n)),i.prevZ\u003di.prev,i.nextZ\u003di.next,i\u003di.next}while(i!\u003d\u003dt);i.prevZ.nextZ\u003dnull,i.prevZ\u003dnull,function(t){var e,r,n,i,a,o,s,l,c\u003d1;do{for(r\u003dt,t\u003dnull,a\u003dnull,o\u003d0;r;){for(o++,n\u003dr,s\u003d0,e\u003d0;e\u003cc\u0026\u0026(s++,n\u003dn.nextZ);e++);for(l\u003dc;s\u003e0||l\u003e0\u0026\u0026n;)0!\u003d\u003ds\u0026\u0026(0\u003d\u003d\u003dl||!n||r.z\u003c\u003dn.z)?(i\u003dr,r\u003dr.nextZ,s--):(i\u003dn,n\u003dn.nextZ,l--),a?a.nextZ\u003di:t\u003di,i.prevZ\u003da,a\u003di;r\u003dn}a.nextZ\u003dnull,c*\u003d2}while(o\u003e1)}(i)}(t,n,i,f);for(var p,m,g\u003dt;t.prev!\u003d\u003dt.next;)if(p\u003dt.prev,m\u003dt.next,f?l(t,n,i,f):s(t))e.push(p.i/r),e.push(t.i/r),e.push(m.i/r),A(t),t\u003dm.next,g\u003dm.next;else if((t\u003dm)\u003d\u003d\u003dg){h?1\u003d\u003d\u003dh?o(t\u003dc(a(t),e,r),e,r,n,i,f,2):2\u003d\u003d\u003dh\u0026\u0026u(t,e,r,n,i,f):o(a(t),e,r,n,i,f,1);break}}}function s(t){var e\u003dt.prev,r\u003dt,n\u003dt.next;if(y(e,r,n)\u003e\u003d0)return!1;for(var i\u003dt.next.next;i!\u003d\u003dt.prev;){if(g(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)\u0026\u0026y(i.prev,i,i.next)\u003e\u003d0)return!1;i\u003di.next}return!0}function l(t,e,r,n){var i\u003dt.prev,a\u003dt,o\u003dt.next;if(y(i,a,o)\u003e\u003d0)return!1;for(var s\u003di.x\u003ca.x?i.x\u003co.x?i.x:o.x:a.x\u003co.x?a.x:o.x,l\u003di.y\u003ca.y?i.y\u003co.y?i.y:o.y:a.y\u003co.y?a.y:o.y,c\u003di.x\u003ea.x?i.x\u003eo.x?i.x:o.x:a.x\u003eo.x?a.x:o.x,u\u003di.y\u003ea.y?i.y\u003eo.y?i.y:o.y:a.y\u003eo.y?a.y:o.y,f\u003dd(s,l,e,r,n),h\u003dd(c,u,e,r,n),p\u003dt.prevZ,m\u003dt.nextZ;p\u0026\u0026p.z\u003e\u003df\u0026\u0026m\u0026\u0026m.z\u003c\u003dh;){if(p!\u003d\u003dt.prev\u0026\u0026p!\u003d\u003dt.next\u0026\u0026g(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)\u0026\u0026y(p.prev,p,p.next)\u003e\u003d0)return!1;if(p\u003dp.prevZ,m!\u003d\u003dt.prev\u0026\u0026m!\u003d\u003dt.next\u0026\u0026g(i.x,i.y,a.x,a.y,o.x,o.y,m.x,m.y)\u0026\u0026y(m.prev,m,m.next)\u003e\u003d0)return!1;m\u003dm.nextZ}for(;p\u0026\u0026p.z\u003e\u003df;){if(p!\u003d\u003dt.prev\u0026\u0026p!\u003d\u003dt.next\u0026\u0026g(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)\u0026\u0026y(p.prev,p,p.next)\u003e\u003d0)return!1;p\u003dp.prevZ}for(;m\u0026\u0026m.z\u003c\u003dh;){if(m!\u003d\u003dt.prev\u0026\u0026m!\u003d\u003dt.next\u0026\u0026g(i.x,i.y,a.x,a.y,o.x,o.y,m.x,m.y)\u0026\u0026y(m.prev,m,m.next)\u003e\u003d0)return!1;m\u003dm.nextZ}return!0}function c(t,e,r){var n\u003dt;do{var i\u003dn.prev,o\u003dn.next.next;!x(i,o)\u0026\u0026b(i,n,n.next,o)\u0026\u0026T(i,o)\u0026\u0026T(o,i)\u0026\u0026(e.push(i.i/r),e.push(n.i/r),e.push(o.i/r),A(n),A(n.next),n\u003dt\u003do),n\u003dn.next}while(n!\u003d\u003dt);return a(n)}function u(t,e,r,n,i,s){var l\u003dt;do{for(var c\u003dl.next.next;c!\u003d\u003dl.prev;){if(l.i!\u003d\u003dc.i\u0026\u0026v(l,c)){var u\u003dk(l,c);return l\u003da(l,l.next),u\u003da(u,u.next),o(l,e,r,n,i,s),void o(u,e,r,n,i,s)}c\u003dc.next}l\u003dl.next}while(l!\u003d\u003dt)}function f(t,e){return t.x-e.x}function h(t,e){if(e\u003dfunction(t,e){var r,n\u003de,i\u003dt.x,a\u003dt.y,o\u003d-1/0;do{if(a\u003c\u003dn.y\u0026\u0026a\u003e\u003dn.next.y\u0026\u0026n.next.y!\u003d\u003dn.y){var s\u003dn.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s\u003c\u003di\u0026\u0026s\u003eo){if(o\u003ds,s\u003d\u003d\u003di){if(a\u003d\u003d\u003dn.y)return n;if(a\u003d\u003d\u003dn.next.y)return n.next}r\u003dn.x\u003cn.next.x?n:n.next}}n\u003dn.next}while(n!\u003d\u003de);if(!r)return null;if(i\u003d\u003d\u003do)return r;var l,c\u003dr,u\u003dr.x,f\u003dr.y,h\u003d1/0;n\u003dr;do{i\u003e\u003dn.x\u0026\u0026n.x\u003e\u003du\u0026\u0026i!\u003d\u003dn.x\u0026\u0026g(a\u003cf?i:o,a,u,f,a\u003cf?o:i,a,n.x,n.y)\u0026\u0026(l\u003dMath.abs(a-n.y)/(i-n.x),T(n,t)\u0026\u0026(l\u003ch||l\u003d\u003d\u003dh\u0026\u0026(n.x\u003er.x||n.x\u003d\u003d\u003dr.x\u0026\u0026p(r,n)))\u0026\u0026(r\u003dn,h\u003dl)),n\u003dn.next}while(n!\u003d\u003dc);return r}(t,e)){var r\u003dk(e,t);a(e,e.next),a(r,r.next)}}function p(t,e){return y(t.prev,t,e.prev)\u003c0\u0026\u0026y(e.next,t,t.next)\u003c0}function d(t,e,r,n,i){return(t\u003d1431655765\u0026((t\u003d858993459\u0026((t\u003d252645135\u0026((t\u003d16711935\u0026((t\u003d32767*(t-r)*i)|t\u003c\u003c8))|t\u003c\u003c4))|t\u003c\u003c2))|t\u003c\u003c1))|(e\u003d1431655765\u0026((e\u003d858993459\u0026((e\u003d252645135\u0026((e\u003d16711935\u0026((e\u003d32767*(e-n)*i)|e\u003c\u003c8))|e\u003c\u003c4))|e\u003c\u003c2))|e\u003c\u003c1))\u003c\u003c1}function m(t){var e\u003dt,r\u003dt;do{(e.x\u003cr.x||e.x\u003d\u003d\u003dr.x\u0026\u0026e.y\u003cr.y)\u0026\u0026(r\u003de),e\u003de.next}while(e!\u003d\u003dt);return r}function g(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)\u003e\u003d0\u0026\u0026(t-o)*(n-s)-(r-o)*(e-s)\u003e\u003d0\u0026\u0026(r-o)*(a-s)-(i-o)*(n-s)\u003e\u003d0}function v(t,e){return t.next.i!\u003d\u003de.i\u0026\u0026t.prev.i!\u003d\u003de.i\u0026\u0026!function(t,e){var r\u003dt;do{if(r.i!\u003d\u003dt.i\u0026\u0026r.next.i!\u003d\u003dt.i\u0026\u0026r.i!\u003d\u003de.i\u0026\u0026r.next.i!\u003d\u003de.i\u0026\u0026b(r,r.next,t,e))return!0;r\u003dr.next}while(r!\u003d\u003dt);return!1}(t,e)\u0026\u0026(T(t,e)\u0026\u0026T(e,t)\u0026\u0026function(t,e){var r\u003dt,n\u003d!1,i\u003d(t.x+e.x)/2,a\u003d(t.y+e.y)/2;do{r.y\u003ea!\u003dr.next.y\u003ea\u0026\u0026r.next.y!\u003d\u003dr.y\u0026\u0026i\u003c(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x\u0026\u0026(n\u003d!n),r\u003dr.next}while(r!\u003d\u003dt);return n}(t,e)\u0026\u0026(y(t.prev,t,e.prev)||y(t,e.prev,e))||x(t,e)\u0026\u0026y(t.prev,t,t.next)\u003e0\u0026\u0026y(e.prev,e,e.next)\u003e0)}function y(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function x(t,e){return t.x\u003d\u003d\u003de.x\u0026\u0026t.y\u003d\u003d\u003de.y}function b(t,e,r,n){var i\u003dw(y(t,e,r)),a\u003dw(y(t,e,n)),o\u003dw(y(r,n,t)),s\u003dw(y(r,n,e));return i!\u003d\u003da\u0026\u0026o!\u003d\u003ds||(!(0!\u003d\u003di||!_(t,r,e))||(!(0!\u003d\u003da||!_(t,n,e))||(!(0!\u003d\u003do||!_(r,t,n))||!(0!\u003d\u003ds||!_(r,e,n)))))}function _(t,e,r){return e.x\u003c\u003dMath.max(t.x,r.x)\u0026\u0026e.x\u003e\u003dMath.min(t.x,r.x)\u0026\u0026e.y\u003c\u003dMath.max(t.y,r.y)\u0026\u0026e.y\u003e\u003dMath.min(t.y,r.y)}function w(t){return t\u003e0?1:t\u003c0?-1:0}function T(t,e){return y(t.prev,t,t.next)\u003c0?y(t,e,t.next)\u003e\u003d0\u0026\u0026y(t,t.prev,e)\u003e\u003d0:y(t,e,t.prev)\u003c0||y(t,t.next,e)\u003c0}function k(t,e){var r\u003dnew S(t.i,t.x,t.y),n\u003dnew S(e.i,e.x,e.y),i\u003dt.next,a\u003de.prev;return t.next\u003de,e.prev\u003dt,r.next\u003di,i.prev\u003dr,n.next\u003dr,r.prev\u003dn,a.next\u003dn,n.prev\u003da,n}function M(t,e,r,n){var i\u003dnew S(t,e,r);return n?(i.next\u003dn.next,i.prev\u003dn,n.next.prev\u003di,n.next\u003di):(i.prev\u003di,i.next\u003di),i}function A(t){t.next.prev\u003dt.prev,t.prev.next\u003dt.next,t.prevZ\u0026\u0026(t.prevZ.nextZ\u003dt.nextZ),t.nextZ\u0026\u0026(t.nextZ.prevZ\u003dt.prevZ)}function S(t,e,r){this.i\u003dt,this.x\u003de,this.y\u003dr,this.prev\u003dnull,this.next\u003dnull,this.z\u003dnull,this.prevZ\u003dnull,this.nextZ\u003dnull,this.steiner\u003d!1}function E(t,e,r,n){for(var i\u003d0,a\u003de,o\u003dr-n;a\u003cr;a+\u003dn)i+\u003d(t[o]-t[a])*(t[a+1]+t[o+1]),o\u003da;return i}e.exports\u003dn,e.exports.default\u003dn,n.deviation\u003dfunction(t,e,r,n){var i\u003de\u0026\u0026e.length,a\u003di?e[0]*r:t.length,o\u003dMath.abs(E(t,0,a,r));if(i)for(var s\u003d0,l\u003de.length;s\u003cl;s++){var c\u003de[s]*r,u\u003ds\u003cl-1?e[s+1]*r:t.length;o-\u003dMath.abs(E(t,c,u,r))}var f\u003d0;for(s\u003d0;s\u003cn.length;s+\u003d3){var h\u003dn[s]*r,p\u003dn[s+1]*r,d\u003dn[s+2]*r;f+\u003dMath.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0\u003d\u003d\u003do\u0026\u00260\u003d\u003d\u003df?0:Math.abs((f-o)/o)},n.flatten\u003dfunction(t){for(var e\u003dt[0][0].length,r\u003d{vertices:[],holes:[],dimensions:e},n\u003d0,i\u003d0;i\u003ct.length;i++){for(var a\u003d0;a\u003ct[i].length;a++)for(var o\u003d0;o\u003ce;o++)r.vertices.push(t[i][a][o]);i\u003e0\u0026\u0026(n+\u003dt[i-1].length,r.holes.push(n))}return r}},{}],183:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003dt.length;if(\"number\"!\u003dtypeof e){e\u003d0;for(var i\u003d0;i\u003cr;++i){var a\u003dt[i];e\u003dMath.max(e,a[0],a[1])}e\u003d1+(0|e)}e|\u003d0;var o\u003dnew Array(e);for(i\u003d0;i\u003ce;++i)o[i]\u003d[];for(i\u003d0;i\u003cr;++i){a\u003dt[i];o[a[0]].push(a[1]),o[a[1]].push(a[0])}for(var s\u003d0;s\u003ce;++s)n(o[s],(function(t,e){return t-e}));return o};var n\u003dt(\"uniq\")},{uniq:615}],184:[function(t,e,r){var n\u003dt(\"strongly-connected-components\");e.exports\u003dfunction(t,e){var r,i\u003d[],a\u003d[],o\u003d[],s\u003d{},l\u003d[];function c(t){var e,n,i\u003d!1;for(a.push(t),o[t]\u003d!0,e\u003d0;e\u003cl[t].length;e++)(n\u003dl[t][e])\u003d\u003d\u003dr?(u(r,a),i\u003d!0):o[n]||(i\u003dc(n));if(i)!function t(e){o[e]\u003d!1,s.hasOwnProperty(e)\u0026\u0026Object.keys(s[e]).forEach((function(r){delete s[e][r],o[r]\u0026\u0026t(r)}))}(t);else for(e\u003d0;e\u003cl[t].length;e++){n\u003dl[t][e];var f\u003ds[n];f||(f\u003d{},s[n]\u003df),f[n]\u003d!0}return a.pop(),i}function u(t,r){var n\u003d[].concat(r).concat(t);e?e(c):i.push(n)}function f(e){!function(e){for(var r\u003d0;r\u003ct.length;r++)r\u003ce\u0026\u0026(t[r]\u003d[]),t[r]\u003dt[r].filter((function(t){return t\u003e\u003de}))}(e);for(var r,i\u003dn(t).components.filter((function(t){return t.length\u003e1})),a\u003d1/0,o\u003d0;o\u003ci.length;o++)for(var s\u003d0;s\u003ci[o].length;s++)i[o][s]\u003ca\u0026\u0026(a\u003di[o][s],r\u003do);var l\u003di[r];return!!l\u0026\u0026{leastVertex:a,adjList:t.map((function(t,e){return-1\u003d\u003d\u003dl.indexOf(e)?[]:t.filter((function(t){return-1!\u003d\u003dl.indexOf(t)}))}))}}r\u003d0;for(var h\u003dt.length;r\u003ch;){var p\u003df(r);if(r\u003dp.leastVertex,l\u003dp.adjList){for(var d\u003d0;d\u003cl.length;d++)for(var m\u003d0;m\u003cl[d].length;m++){var g\u003dl[d][m];o[+g]\u003d!1,s[g]\u003d{}}c(r),r+\u003d1}else r\u003dh}return e?void 0:i}},{\"strongly-connected-components\":586}],185:[function(t,e,r){\"use strict\";var n\u003dt(\"../../object/valid-value\");e.exports\u003dfunction(){return n(this).length\u003d0,this}},{\"../../object/valid-value\":216}],186:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?Array.from:t(\"./shim\")},{\"./is-implemented\":187,\"./shim\":188}],187:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){var t,e,r\u003dArray.from;return\"function\"\u003d\u003dtypeof r\u0026\u0026(e\u003dr(t\u003d[\"raz\",\"dwa\"]),Boolean(e\u0026\u0026e!\u003d\u003dt\u0026\u0026\"dwa\"\u003d\u003d\u003de[1]))}},{}],188:[function(t,e,r){\"use strict\";var n\u003dt(\"es6-symbol\").iterator,i\u003dt(\"../../function/is-arguments\"),a\u003dt(\"../../function/is-function\"),o\u003dt(\"../../number/to-pos-integer\"),s\u003dt(\"../../object/valid-callable\"),l\u003dt(\"../../object/valid-value\"),c\u003dt(\"../../object/is-value\"),u\u003dt(\"../../string/is-string\"),f\u003dArray.isArray,h\u003dFunction.prototype.call,p\u003d{configurable:!0,enumerable:!0,writable:!0,value:null},d\u003dObject.defineProperty;e.exports\u003dfunction(t){var e,r,m,g,v,y,x,b,_,w,T\u003darguments[1],k\u003darguments[2];if(t\u003dObject(l(t)),c(T)\u0026\u0026s(T),this\u0026\u0026this!\u003d\u003dArray\u0026\u0026a(this))e\u003dthis;else{if(!T){if(i(t))return 1!\u003d\u003d(v\u003dt.length)?Array.apply(null,t):((g\u003dnew Array(1))[0]\u003dt[0],g);if(f(t)){for(g\u003dnew Array(v\u003dt.length),r\u003d0;r\u003cv;++r)g[r]\u003dt[r];return g}}g\u003d[]}if(!f(t))if(void 0!\u003d\u003d(_\u003dt[n])){for(x\u003ds(_).call(t),e\u0026\u0026(g\u003dnew e),b\u003dx.next(),r\u003d0;!b.done;)w\u003dT?h.call(T,k,b.value,r):b.value,e?(p.value\u003dw,d(g,r,p)):g[r]\u003dw,b\u003dx.next(),++r;v\u003dr}else if(u(t)){for(v\u003dt.length,e\u0026\u0026(g\u003dnew e),r\u003d0,m\u003d0;r\u003cv;++r)w\u003dt[r],r+1\u003cv\u0026\u0026(y\u003dw.charCodeAt(0))\u003e\u003d55296\u0026\u0026y\u003c\u003d56319\u0026\u0026(w+\u003dt[++r]),w\u003dT?h.call(T,k,w,m):w,e?(p.value\u003dw,d(g,m,p)):g[m]\u003dw,++m;v\u003dm}if(void 0\u003d\u003d\u003dv)for(v\u003do(t.length),e\u0026\u0026(g\u003dnew e(v)),r\u003d0;r\u003cv;++r)w\u003dT?h.call(T,k,t[r],r):t[r],e?(p.value\u003dw,d(g,r,p)):g[r]\u003dw;return e\u0026\u0026(p.value\u003dnull,g.length\u003dv),g}},{\"../../function/is-arguments\":189,\"../../function/is-function\":190,\"../../number/to-pos-integer\":196,\"../../object/is-value\":205,\"../../object/valid-callable\":214,\"../../object/valid-value\":216,\"../../string/is-string\":220,\"es6-symbol\":229}],189:[function(t,e,r){\"use strict\";var n\u003dObject.prototype.toString,i\u003dn.call(function(){return arguments}());e.exports\u003dfunction(t){return n.call(t)\u003d\u003d\u003di}},{}],190:[function(t,e,r){\"use strict\";var n\u003dObject.prototype.toString,i\u003dRegExp.prototype.test.bind(/^[object [A-Za-z0-9]*Function]$/);e.exports\u003dfunction(t){return\"function\"\u003d\u003dtypeof t\u0026\u0026i(n.call(t))}},{}],191:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){}},{}],192:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?Math.sign:t(\"./shim\")},{\"./is-implemented\":193,\"./shim\":194}],193:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){var t\u003dMath.sign;return\"function\"\u003d\u003dtypeof t\u0026\u0026(1\u003d\u003d\u003dt(10)\u0026\u0026-1\u003d\u003d\u003dt(-20))}},{}],194:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return t\u003dNumber(t),isNaN(t)||0\u003d\u003d\u003dt?t:t\u003e0?1:-1}},{}],195:[function(t,e,r){\"use strict\";var n\u003dt(\"../math/sign\"),i\u003dMath.abs,a\u003dMath.floor;e.exports\u003dfunction(t){return isNaN(t)?0:0!\u003d\u003d(t\u003dNumber(t))\u0026\u0026isFinite(t)?n(t)*a(i(t)):t}},{\"../math/sign\":192}],196:[function(t,e,r){\"use strict\";var n\u003dt(\"./to-integer\"),i\u003dMath.max;e.exports\u003dfunction(t){return i(0,n(t))}},{\"./to-integer\":195}],197:[function(t,e,r){\"use strict\";var n\u003dt(\"./valid-callable\"),i\u003dt(\"./valid-value\"),a\u003dFunction.prototype.bind,o\u003dFunction.prototype.call,s\u003dObject.keys,l\u003dObject.prototype.propertyIsEnumerable;e.exports\u003dfunction(t,e){return function(r,c){var u,f\u003darguments[2],h\u003darguments[3];return r\u003dObject(i(r)),n(c),u\u003ds(r),h\u0026\u0026u.sort(\"function\"\u003d\u003dtypeof h?a.call(h,r):void 0),\"function\"!\u003dtypeof t\u0026\u0026(t\u003du[t]),o.call(t,u,(function(t,n){return l.call(r,t)?o.call(c,f,r[t],t,r,n):e}))}}},{\"./valid-callable\":214,\"./valid-value\":216}],198:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?Object.assign:t(\"./shim\")},{\"./is-implemented\":199,\"./shim\":200}],199:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){var t,e\u003dObject.assign;return\"function\"\u003d\u003dtypeof e\u0026\u0026(e(t\u003d{foo:\"raz\"},{bar:\"dwa\"},{trzy:\"trzy\"}),t.foo+t.bar+t.trzy\u003d\u003d\u003d\"razdwatrzy\")}},{}],200:[function(t,e,r){\"use strict\";var n\u003dt(\"../keys\"),i\u003dt(\"../valid-value\"),a\u003dMath.max;e.exports\u003dfunction(t,e){var r,o,s,l\u003da(arguments.length,2);for(t\u003dObject(i(t)),s\u003dfunction(n){try{t[n]\u003de[n]}catch(t){r||(r\u003dt)}},o\u003d1;o\u003cl;++o)n(e\u003darguments[o]).forEach(s);if(void 0!\u003d\u003dr)throw r;return t}},{\"../keys\":206,\"../valid-value\":216}],201:[function(t,e,r){\"use strict\";var n\u003dt(\"../array/from\"),i\u003dt(\"./assign\"),a\u003dt(\"./valid-value\");e.exports\u003dfunction(t){var e\u003dObject(a(t)),r\u003darguments[1],o\u003dObject(arguments[2]);if(e!\u003d\u003dt\u0026\u0026!r)return e;var s\u003d{};return r?n(r,(function(e){(o.ensure||e in t)\u0026\u0026(s[e]\u003dt[e])})):i(s,t),s}},{\"../array/from\":186,\"./assign\":198,\"./valid-value\":216}],202:[function(t,e,r){\"use strict\";var n,i,a,o,s\u003dObject.create;t(\"./set-prototype-of/is-implemented\")()||(n\u003dt(\"./set-prototype-of/shim\")),e.exports\u003dn?1!\u003d\u003dn.level?s:(i\u003d{},a\u003d{},o\u003d{configurable:!1,enumerable:!1,writable:!0,value:void 0},Object.getOwnPropertyNames(Object.prototype).forEach((function(t){a[t]\u003d\"__proto__\"!\u003d\u003dt?o:{configurable:!0,enumerable:!1,writable:!0,value:void 0}})),Object.defineProperties(i,a),Object.defineProperty(n,\"nullPolyfill\",{configurable:!1,enumerable:!1,writable:!1,value:i}),function(t,e){return s(null\u003d\u003d\u003dt?i:t,e)}):s},{\"./set-prototype-of/is-implemented\":212,\"./set-prototype-of/shim\":213}],203:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./_iterate\")(\"forEach\")},{\"./_iterate\":197}],204:[function(t,e,r){\"use strict\";var n\u003dt(\"./is-value\"),i\u003d{function:!0,object:!0};e.exports\u003dfunction(t){return n(t)\u0026\u0026i[typeof t]||!1}},{\"./is-value\":205}],205:[function(t,e,r){\"use strict\";var n\u003dt(\"../function/noop\")();e.exports\u003dfunction(t){return t!\u003d\u003dn\u0026\u0026null!\u003d\u003dt}},{\"../function/noop\":191}],206:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?Object.keys:t(\"./shim\")},{\"./is-implemented\":207,\"./shim\":208}],207:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){try{return Object.keys(\"primitive\"),!0}catch(t){return!1}}},{}],208:[function(t,e,r){\"use strict\";var n\u003dt(\"../is-value\"),i\u003dObject.keys;e.exports\u003dfunction(t){return i(n(t)?Object(t):t)}},{\"../is-value\":205}],209:[function(t,e,r){\"use strict\";var n\u003dt(\"./valid-callable\"),i\u003dt(\"./for-each\"),a\u003dFunction.prototype.call;e.exports\u003dfunction(t,e){var r\u003d{},o\u003darguments[2];return n(e),i(t,(function(t,n,i,s){r[n]\u003da.call(e,o,t,n,i,s)})),r}},{\"./for-each\":203,\"./valid-callable\":214}],210:[function(t,e,r){\"use strict\";var n\u003dt(\"./is-value\"),i\u003dArray.prototype.forEach,a\u003dObject.create,o\u003dfunction(t,e){var r;for(r in t)e[r]\u003dt[r]};e.exports\u003dfunction(t){var e\u003da(null);return i.call(arguments,(function(t){n(t)\u0026\u0026o(Object(t),e)})),e}},{\"./is-value\":205}],211:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?Object.setPrototypeOf:t(\"./shim\")},{\"./is-implemented\":212,\"./shim\":213}],212:[function(t,e,r){\"use strict\";var n\u003dObject.create,i\u003dObject.getPrototypeOf,a\u003d{};e.exports\u003dfunction(){var t\u003dObject.setPrototypeOf,e\u003darguments[0]||n;return\"function\"\u003d\u003dtypeof t\u0026\u0026i(t(e(null),a))\u003d\u003d\u003da}},{}],213:[function(t,e,r){\"use strict\";var n,i\u003dt(\"../is-object\"),a\u003dt(\"../valid-value\"),o\u003dObject.prototype.isPrototypeOf,s\u003dObject.defineProperty,l\u003d{configurable:!0,enumerable:!1,writable:!0,value:void 0};n\u003dfunction(t,e){if(a(t),null\u003d\u003d\u003de||i(e))return t;throw new TypeError(\"Prototype must be null or an object\")},e.exports\u003dfunction(t){var e,r;return t?(2\u003d\u003d\u003dt.level?t.set?(r\u003dt.set,e\u003dfunction(t,e){return r.call(n(t,e),e),t}):e\u003dfunction(t,e){return n(t,e).__proto__\u003de,t}:e\u003dfunction t(e,r){var i;return n(e,r),(i\u003do.call(t.nullPolyfill,e))\u0026\u0026delete t.nullPolyfill.__proto__,null\u003d\u003d\u003dr\u0026\u0026(r\u003dt.nullPolyfill),e.__proto__\u003dr,i\u0026\u0026s(t.nullPolyfill,\"__proto__\",l),e},Object.defineProperty(e,\"level\",{configurable:!1,enumerable:!1,writable:!1,value:t.level})):null}(function(){var t,e\u003dObject.create(null),r\u003d{},n\u003dObject.getOwnPropertyDescriptor(Object.prototype,\"__proto__\");if(n){try{(t\u003dn.set).call(e,r)}catch(t){}if(Object.getPrototypeOf(e)\u003d\u003d\u003dr)return{set:t,level:2}}return e.__proto__\u003dr,Object.getPrototypeOf(e)\u003d\u003d\u003dr?{level:2}:((e\u003d{}).__proto__\u003dr,Object.getPrototypeOf(e)\u003d\u003d\u003dr\u0026\u0026{level:1})}()),t(\"../create\")},{\"../create\":202,\"../is-object\":204,\"../valid-value\":216}],214:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){if(\"function\"!\u003dtypeof t)throw new TypeError(t+\" is not a function\");return t}},{}],215:[function(t,e,r){\"use strict\";var n\u003dt(\"./is-object\");e.exports\u003dfunction(t){if(!n(t))throw new TypeError(t+\" is not an Object\");return t}},{\"./is-object\":204}],216:[function(t,e,r){\"use strict\";var n\u003dt(\"./is-value\");e.exports\u003dfunction(t){if(!n(t))throw new TypeError(\"Cannot use null or undefined\");return t}},{\"./is-value\":205}],217:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?String.prototype.contains:t(\"./shim\")},{\"./is-implemented\":218,\"./shim\":219}],218:[function(t,e,r){\"use strict\";var n\u003d\"razdwatrzy\";e.exports\u003dfunction(){return\"function\"\u003d\u003dtypeof n.contains\u0026\u0026(!0\u003d\u003d\u003dn.contains(\"dwa\")\u0026\u0026!1\u003d\u003d\u003dn.contains(\"foo\"))}},{}],219:[function(t,e,r){\"use strict\";var n\u003dString.prototype.indexOf;e.exports\u003dfunction(t){return n.call(this,t,arguments[1])\u003e-1}},{}],220:[function(t,e,r){\"use strict\";var n\u003dObject.prototype.toString,i\u003dn.call(\"\");e.exports\u003dfunction(t){return\"string\"\u003d\u003dtypeof t||t\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026(t instanceof String||n.call(t)\u003d\u003d\u003di)||!1}},{}],221:[function(t,e,r){\"use strict\";var n\u003dObject.create(null),i\u003dMath.random;e.exports\u003dfunction(){var t;do{t\u003di().toString(36).slice(2)}while(n[t]);return t}},{}],222:[function(t,e,r){\"use strict\";var n,i\u003dt(\"es5-ext/object/set-prototype-of\"),a\u003dt(\"es5-ext/string/#/contains\"),o\u003dt(\"d\"),s\u003dt(\"es6-symbol\"),l\u003dt(\"./\"),c\u003dObject.defineProperty;n\u003de.exports\u003dfunction(t,e){if(!(this instanceof n))throw new TypeError(\"Constructor requires \u0027new\u0027\");l.call(this,t),e\u003de?a.call(e,\"key+value\")?\"key+value\":a.call(e,\"key\")?\"key\":\"value\":\"value\",c(this,\"__kind__\",o(\"\",e))},i\u0026\u0026i(n,l),delete n.prototype.constructor,n.prototype\u003dObject.create(l.prototype,{_resolve:o((function(t){return\"value\"\u003d\u003d\u003dthis.__kind__?this.__list__[t]:\"key+value\"\u003d\u003d\u003dthis.__kind__?[t,this.__list__[t]]:t}))}),c(n.prototype,s.toStringTag,o(\"c\",\"Array Iterator\"))},{\"./\":225,d:161,\"es5-ext/object/set-prototype-of\":211,\"es5-ext/string/#/contains\":217,\"es6-symbol\":229}],223:[function(t,e,r){\"use strict\";var n\u003dt(\"es5-ext/function/is-arguments\"),i\u003dt(\"es5-ext/object/valid-callable\"),a\u003dt(\"es5-ext/string/is-string\"),o\u003dt(\"./get\"),s\u003dArray.isArray,l\u003dFunction.prototype.call,c\u003dArray.prototype.some;e.exports\u003dfunction(t,e){var r,u,f,h,p,d,m,g,v\u003darguments[2];if(s(t)||n(t)?r\u003d\"array\":a(t)?r\u003d\"string\":t\u003do(t),i(e),f\u003dfunction(){h\u003d!0},\"array\"!\u003d\u003dr)if(\"string\"!\u003d\u003dr)for(u\u003dt.next();!u.done;){if(l.call(e,v,u.value,f),h)return;u\u003dt.next()}else for(d\u003dt.length,p\u003d0;p\u003cd\u0026\u0026(m\u003dt[p],p+1\u003cd\u0026\u0026(g\u003dm.charCodeAt(0))\u003e\u003d55296\u0026\u0026g\u003c\u003d56319\u0026\u0026(m+\u003dt[++p]),l.call(e,v,m,f),!h);++p);else c.call(t,(function(t){return l.call(e,v,t,f),h}))}},{\"./get\":224,\"es5-ext/function/is-arguments\":189,\"es5-ext/object/valid-callable\":214,\"es5-ext/string/is-string\":220}],224:[function(t,e,r){\"use strict\";var n\u003dt(\"es5-ext/function/is-arguments\"),i\u003dt(\"es5-ext/string/is-string\"),a\u003dt(\"./array\"),o\u003dt(\"./string\"),s\u003dt(\"./valid-iterable\"),l\u003dt(\"es6-symbol\").iterator;e.exports\u003dfunction(t){return\"function\"\u003d\u003dtypeof s(t)[l]?t[l]():n(t)?new a(t):i(t)?new o(t):new a(t)}},{\"./array\":222,\"./string\":227,\"./valid-iterable\":228,\"es5-ext/function/is-arguments\":189,\"es5-ext/string/is-string\":220,\"es6-symbol\":229}],225:[function(t,e,r){\"use strict\";var n,i\u003dt(\"es5-ext/array/#/clear\"),a\u003dt(\"es5-ext/object/assign\"),o\u003dt(\"es5-ext/object/valid-callable\"),s\u003dt(\"es5-ext/object/valid-value\"),l\u003dt(\"d\"),c\u003dt(\"d/auto-bind\"),u\u003dt(\"es6-symbol\"),f\u003dObject.defineProperty,h\u003dObject.defineProperties;e.exports\u003dn\u003dfunction(t,e){if(!(this instanceof n))throw new TypeError(\"Constructor requires \u0027new\u0027\");h(this,{__list__:l(\"w\",s(t)),__context__:l(\"w\",e),__nextIndex__:l(\"w\",0)}),e\u0026\u0026(o(e.on),e.on(\"_add\",this._onAdd),e.on(\"_delete\",this._onDelete),e.on(\"_clear\",this._onClear))},delete n.prototype.constructor,h(n.prototype,a({_next:l((function(){var t;if(this.__list__)return this.__redo__\u0026\u0026void 0!\u003d\u003d(t\u003dthis.__redo__.shift())?t:this.__nextIndex__\u003cthis.__list__.length?this.__nextIndex__++:void this._unBind()})),next:l((function(){return this._createResult(this._next())})),_createResult:l((function(t){return void 0\u003d\u003d\u003dt?{done:!0,value:void 0}:{done:!1,value:this._resolve(t)}})),_resolve:l((function(t){return this.__list__[t]})),_unBind:l((function(){this.__list__\u003dnull,delete this.__redo__,this.__context__\u0026\u0026(this.__context__.off(\"_add\",this._onAdd),this.__context__.off(\"_delete\",this._onDelete),this.__context__.off(\"_clear\",this._onClear),this.__context__\u003dnull)})),toString:l((function(){return\"[object \"+(this[u.toStringTag]||\"Object\")+\"]\"}))},c({_onAdd:l((function(t){t\u003e\u003dthis.__nextIndex__||(++this.__nextIndex__,this.__redo__?(this.__redo__.forEach((function(e,r){e\u003e\u003dt\u0026\u0026(this.__redo__[r]\u003d++e)}),this),this.__redo__.push(t)):f(this,\"__redo__\",l(\"c\",[t])))})),_onDelete:l((function(t){var e;t\u003e\u003dthis.__nextIndex__||(--this.__nextIndex__,this.__redo__\u0026\u0026(-1!\u003d\u003d(e\u003dthis.__redo__.indexOf(t))\u0026\u0026this.__redo__.splice(e,1),this.__redo__.forEach((function(e,r){e\u003et\u0026\u0026(this.__redo__[r]\u003d--e)}),this)))})),_onClear:l((function(){this.__redo__\u0026\u0026i.call(this.__redo__),this.__nextIndex__\u003d0}))}))),f(n.prototype,u.iterator,l((function(){return this})))},{d:161,\"d/auto-bind\":160,\"es5-ext/array/#/clear\":185,\"es5-ext/object/assign\":198,\"es5-ext/object/valid-callable\":214,\"es5-ext/object/valid-value\":216,\"es6-symbol\":229}],226:[function(t,e,r){\"use strict\";var n\u003dt(\"es5-ext/function/is-arguments\"),i\u003dt(\"es5-ext/object/is-value\"),a\u003dt(\"es5-ext/string/is-string\"),o\u003dt(\"es6-symbol\").iterator,s\u003dArray.isArray;e.exports\u003dfunction(t){return!!i(t)\u0026\u0026(!!s(t)||(!!a(t)||(!!n(t)||\"function\"\u003d\u003dtypeof t[o])))}},{\"es5-ext/function/is-arguments\":189,\"es5-ext/object/is-value\":205,\"es5-ext/string/is-string\":220,\"es6-symbol\":229}],227:[function(t,e,r){\"use strict\";var n,i\u003dt(\"es5-ext/object/set-prototype-of\"),a\u003dt(\"d\"),o\u003dt(\"es6-symbol\"),s\u003dt(\"./\"),l\u003dObject.defineProperty;n\u003de.exports\u003dfunction(t){if(!(this instanceof n))throw new TypeError(\"Constructor requires \u0027new\u0027\");t\u003dString(t),s.call(this,t),l(this,\"__length__\",a(\"\",t.length))},i\u0026\u0026i(n,s),delete n.prototype.constructor,n.prototype\u003dObject.create(s.prototype,{_next:a((function(){if(this.__list__)return this.__nextIndex__\u003cthis.__length__?this.__nextIndex__++:void this._unBind()})),_resolve:a((function(t){var e,r\u003dthis.__list__[t];return this.__nextIndex__\u003d\u003d\u003dthis.__length__?r:(e\u003dr.charCodeAt(0))\u003e\u003d55296\u0026\u0026e\u003c\u003d56319?r+this.__list__[this.__nextIndex__++]:r}))}),l(n.prototype,o.toStringTag,a(\"c\",\"String Iterator\"))},{\"./\":225,d:161,\"es5-ext/object/set-prototype-of\":211,\"es6-symbol\":229}],228:[function(t,e,r){\"use strict\";var n\u003dt(\"./is-iterable\");e.exports\u003dfunction(t){if(!n(t))throw new TypeError(t+\" is not iterable\");return t}},{\"./is-iterable\":226}],229:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?t(\"ext/global-this\").Symbol:t(\"./polyfill\")},{\"./is-implemented\":230,\"./polyfill\":235,\"ext/global-this\":242}],230:[function(t,e,r){\"use strict\";var n\u003dt(\"ext/global-this\"),i\u003d{object:!0,symbol:!0};e.exports\u003dfunction(){var t,e\u003dn.Symbol;if(\"function\"!\u003dtypeof e)return!1;t\u003de(\"test symbol\");try{String(t)}catch(t){return!1}return!!i[typeof e.iterator]\u0026\u0026(!!i[typeof e.toPrimitive]\u0026\u0026!!i[typeof e.toStringTag])}},{\"ext/global-this\":242}],231:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return!!t\u0026\u0026(\"symbol\"\u003d\u003dtypeof t||!!t.constructor\u0026\u0026(\"Symbol\"\u003d\u003d\u003dt.constructor.name\u0026\u0026\"Symbol\"\u003d\u003d\u003dt[t.constructor.toStringTag]))}},{}],232:[function(t,e,r){\"use strict\";var n\u003dt(\"d\"),i\u003dObject.create,a\u003dObject.defineProperty,o\u003dObject.prototype,s\u003di(null);e.exports\u003dfunction(t){for(var e,r,i\u003d0;s[t+(i||\"\")];)++i;return s[t+\u003di||\"\"]\u003d!0,a(o,e\u003d\"@@\"+t,n.gs(null,(function(t){r||(r\u003d!0,a(this,e,n(t)),r\u003d!1)}))),e}},{d:161}],233:[function(t,e,r){\"use strict\";var n\u003dt(\"d\"),i\u003dt(\"ext/global-this\").Symbol;e.exports\u003dfunction(t){return Object.defineProperties(t,{hasInstance:n(\"\",i\u0026\u0026i.hasInstance||t(\"hasInstance\")),isConcatSpreadable:n(\"\",i\u0026\u0026i.isConcatSpreadable||t(\"isConcatSpreadable\")),iterator:n(\"\",i\u0026\u0026i.iterator||t(\"iterator\")),match:n(\"\",i\u0026\u0026i.match||t(\"match\")),replace:n(\"\",i\u0026\u0026i.replace||t(\"replace\")),search:n(\"\",i\u0026\u0026i.search||t(\"search\")),species:n(\"\",i\u0026\u0026i.species||t(\"species\")),split:n(\"\",i\u0026\u0026i.split||t(\"split\")),toPrimitive:n(\"\",i\u0026\u0026i.toPrimitive||t(\"toPrimitive\")),toStringTag:n(\"\",i\u0026\u0026i.toStringTag||t(\"toStringTag\")),unscopables:n(\"\",i\u0026\u0026i.unscopables||t(\"unscopables\"))})}},{d:161,\"ext/global-this\":242}],234:[function(t,e,r){\"use strict\";var n\u003dt(\"d\"),i\u003dt(\"../../../validate-symbol\"),a\u003dObject.create(null);e.exports\u003dfunction(t){return Object.defineProperties(t,{for:n((function(e){return a[e]?a[e]:a[e]\u003dt(String(e))})),keyFor:n((function(t){var e;for(e in i(t),a)if(a[e]\u003d\u003d\u003dt)return e}))})}},{\"../../../validate-symbol\":236,d:161}],235:[function(t,e,r){\"use strict\";var n,i,a,o\u003dt(\"d\"),s\u003dt(\"./validate-symbol\"),l\u003dt(\"ext/global-this\").Symbol,c\u003dt(\"./lib/private/generate-name\"),u\u003dt(\"./lib/private/setup/standard-symbols\"),f\u003dt(\"./lib/private/setup/symbol-registry\"),h\u003dObject.create,p\u003dObject.defineProperties,d\u003dObject.defineProperty;if(\"function\"\u003d\u003dtypeof l)try{String(l()),a\u003d!0}catch(t){}else l\u003dnull;i\u003dfunction(t){if(this instanceof i)throw new TypeError(\"Symbol is not a constructor\");return n(t)},e.exports\u003dn\u003dfunction t(e){var r;if(this instanceof t)throw new TypeError(\"Symbol is not a constructor\");return a?l(e):(r\u003dh(i.prototype),e\u003dvoid 0\u003d\u003d\u003de?\"\":String(e),p(r,{__description__:o(\"\",e),__name__:o(\"\",c(e))}))},u(n),f(n),p(i.prototype,{constructor:o(n),toString:o(\"\",(function(){return this.__name__}))}),p(n.prototype,{toString:o((function(){return\"Symbol (\"+s(this).__description__+\")\"})),valueOf:o((function(){return s(this)}))}),d(n.prototype,n.toPrimitive,o(\"\",(function(){var t\u003ds(this);return\"symbol\"\u003d\u003dtypeof t?t:t.toString()}))),d(n.prototype,n.toStringTag,o(\"c\",\"Symbol\")),d(i.prototype,n.toStringTag,o(\"c\",n.prototype[n.toStringTag])),d(i.prototype,n.toPrimitive,o(\"c\",n.prototype[n.toPrimitive]))},{\"./lib/private/generate-name\":232,\"./lib/private/setup/standard-symbols\":233,\"./lib/private/setup/symbol-registry\":234,\"./validate-symbol\":236,d:161,\"ext/global-this\":242}],236:[function(t,e,r){\"use strict\";var n\u003dt(\"./is-symbol\");e.exports\u003dfunction(t){if(!n(t))throw new TypeError(t+\" is not a symbol\");return t}},{\"./is-symbol\":231}],237:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?WeakMap:t(\"./polyfill\")},{\"./is-implemented\":238,\"./polyfill\":240}],238:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){var t,e;if(\"function\"!\u003dtypeof WeakMap)return!1;try{t\u003dnew WeakMap([[e\u003d{},\"one\"],[{},\"two\"],[{},\"three\"]])}catch(t){return!1}return\"[object WeakMap]\"\u003d\u003d\u003dString(t)\u0026\u0026(\"function\"\u003d\u003dtypeof t.set\u0026\u0026(t.set({},1)\u003d\u003d\u003dt\u0026\u0026(\"function\"\u003d\u003dtypeof t.delete\u0026\u0026(\"function\"\u003d\u003dtypeof t.has\u0026\u0026\"one\"\u003d\u003d\u003dt.get(e)))))}},{}],239:[function(t,e,r){\"use strict\";e.exports\u003d\"function\"\u003d\u003dtypeof WeakMap\u0026\u0026\"[object WeakMap]\"\u003d\u003d\u003dObject.prototype.toString.call(new WeakMap)},{}],240:[function(t,e,r){\"use strict\";var n,i\u003dt(\"es5-ext/object/is-value\"),a\u003dt(\"es5-ext/object/set-prototype-of\"),o\u003dt(\"es5-ext/object/valid-object\"),s\u003dt(\"es5-ext/object/valid-value\"),l\u003dt(\"es5-ext/string/random-uniq\"),c\u003dt(\"d\"),u\u003dt(\"es6-iterator/get\"),f\u003dt(\"es6-iterator/for-of\"),h\u003dt(\"es6-symbol\").toStringTag,p\u003dt(\"./is-native-implemented\"),d\u003dArray.isArray,m\u003dObject.defineProperty,g\u003dObject.prototype.hasOwnProperty,v\u003dObject.getPrototypeOf;e.exports\u003dn\u003dfunction(){var t,e\u003darguments[0];if(!(this instanceof n))throw new TypeError(\"Constructor requires \u0027new\u0027\");return t\u003dp\u0026\u0026a\u0026\u0026WeakMap!\u003d\u003dn?a(new WeakMap,v(this)):this,i(e)\u0026\u0026(d(e)||(e\u003du(e))),m(t,\"__weakMapData__\",c(\"c\",\"$weakMap$\"+l())),e?(f(e,(function(e){s(e),t.set(e[0],e[1])})),t):t},p\u0026\u0026(a\u0026\u0026a(n,WeakMap),n.prototype\u003dObject.create(WeakMap.prototype,{constructor:c(n)})),Object.defineProperties(n.prototype,{delete:c((function(t){return!!g.call(o(t),this.__weakMapData__)\u0026\u0026(delete t[this.__weakMapData__],!0)})),get:c((function(t){if(g.call(o(t),this.__weakMapData__))return t[this.__weakMapData__]})),has:c((function(t){return g.call(o(t),this.__weakMapData__)})),set:c((function(t,e){return m(o(t),this.__weakMapData__,c(\"c\",e)),this})),toString:c((function(){return\"[object WeakMap]\"}))}),m(n.prototype,h,c(\"c\",\"WeakMap\"))},{\"./is-native-implemented\":239,d:161,\"es5-ext/object/is-value\":205,\"es5-ext/object/set-prototype-of\":211,\"es5-ext/object/valid-object\":215,\"es5-ext/object/valid-value\":216,\"es5-ext/string/random-uniq\":221,\"es6-iterator/for-of\":223,\"es6-iterator/get\":224,\"es6-symbol\":229}],241:[function(t,e,r){var n\u003dfunction(){if(\"object\"\u003d\u003dtypeof self\u0026\u0026self)return self;if(\"object\"\u003d\u003dtypeof window\u0026\u0026window)return window;throw new Error(\"Unable to resolve global `this`\")};e.exports\u003dfunction(){if(this)return this;try{Object.defineProperty(Object.prototype,\"__global__\",{get:function(){return this},configurable:!0})}catch(t){return n()}try{return __global__||n()}finally{delete Object.prototype.__global__}}()},{}],242:[function(t,e,r){\"use strict\";e.exports\u003dt(\"./is-implemented\")()?globalThis:t(\"./implementation\")},{\"./implementation\":241,\"./is-implemented\":243}],243:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){return\"object\"\u003d\u003dtypeof globalThis\u0026\u0026(!!globalThis\u0026\u0026globalThis.Array\u003d\u003d\u003dArray)}},{}],244:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){var n\u003de||0,i\u003dr||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}},{}],245:[function(t,e,r){\"use strict\";var n\u003dt(\"is-string-blank\");e.exports\u003dfunction(t){var e\u003dtypeof t;if(\"string\"\u003d\u003d\u003de){var r\u003dt;if(0\u003d\u003d\u003d(t\u003d+t)\u0026\u0026n(r))return!1}else if(\"number\"!\u003d\u003de)return!1;return t-t\u003c1}},{\"is-string-blank\":454}],246:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){switch(arguments.length){case 0:return new o([0],[0],0);case 1:return\"number\"\u003d\u003dtypeof t?new o(n\u003dl(t),n,0):new o(t,l(t.length),0);case 2:if(\"number\"\u003d\u003dtypeof e){var n\u003dl(t.length);return new o(t,n,+e)}r\u003d0;case 3:if(t.length!\u003d\u003de.length)throw new Error(\"state and velocity lengths must match\");return new o(t,e,r)}};var n\u003dt(\"cubic-hermite\"),i\u003dt(\"binary-search-bounds\");function a(t,e,r){return Math.min(e,Math.max(t,r))}function o(t,e,r){this.dimension\u003dt.length,this.bounds\u003d[new Array(this.dimension),new Array(this.dimension)];for(var n\u003d0;n\u003cthis.dimension;++n)this.bounds[0][n]\u003d-1/0,this.bounds[1][n]\u003d1/0;this._state\u003dt.slice().reverse(),this._velocity\u003de.slice().reverse(),this._time\u003d[r],this._scratch\u003d[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}var s\u003do.prototype;function l(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;++r)e[r]\u003d0;return e}s.flush\u003dfunction(t){var e\u003di.gt(this._time,t)-1;e\u003c\u003d0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},s.curve\u003dfunction(t){var e\u003dthis._time,r\u003de.length,o\u003di.le(e,t),s\u003dthis._scratch[0],l\u003dthis._state,c\u003dthis._velocity,u\u003dthis.dimension,f\u003dthis.bounds;if(o\u003c0)for(var h\u003du-1,p\u003d0;p\u003cu;++p,--h)s[p]\u003dl[h];else if(o\u003e\u003dr-1){h\u003dl.length-1;var d\u003dt-e[r-1];for(p\u003d0;p\u003cu;++p,--h)s[p]\u003dl[h]+d*c[h]}else{h\u003du*(o+1)-1;var m\u003de[o],g\u003de[o+1]-m||1,v\u003dthis._scratch[1],y\u003dthis._scratch[2],x\u003dthis._scratch[3],b\u003dthis._scratch[4],_\u003d!0;for(p\u003d0;p\u003cu;++p,--h)v[p]\u003dl[h],x[p]\u003dc[h]*g,y[p]\u003dl[h+u],b[p]\u003dc[h+u]*g,_\u003d_\u0026\u0026v[p]\u003d\u003d\u003dy[p]\u0026\u0026x[p]\u003d\u003d\u003db[p]\u0026\u00260\u003d\u003d\u003dx[p];if(_)for(p\u003d0;p\u003cu;++p)s[p]\u003dv[p];else n(v,x,y,b,(t-m)/g,s)}var w\u003df[0],T\u003df[1];for(p\u003d0;p\u003cu;++p)s[p]\u003da(w[p],T[p],s[p]);return s},s.dcurve\u003dfunction(t){var e\u003dthis._time,r\u003de.length,a\u003di.le(e,t),o\u003dthis._scratch[0],s\u003dthis._state,l\u003dthis._velocity,c\u003dthis.dimension;if(a\u003e\u003dr-1)for(var u\u003ds.length-1,f\u003d(e[r-1],0);f\u003cc;++f,--u)o[f]\u003dl[u];else{u\u003dc*(a+1)-1;var h\u003de[a],p\u003de[a+1]-h||1,d\u003dthis._scratch[1],m\u003dthis._scratch[2],g\u003dthis._scratch[3],v\u003dthis._scratch[4],y\u003d!0;for(f\u003d0;f\u003cc;++f,--u)d[f]\u003ds[u],g[f]\u003dl[u]*p,m[f]\u003ds[u+c],v[f]\u003dl[u+c]*p,y\u003dy\u0026\u0026d[f]\u003d\u003d\u003dm[f]\u0026\u0026g[f]\u003d\u003d\u003dv[f]\u0026\u00260\u003d\u003d\u003dg[f];if(y)for(f\u003d0;f\u003cc;++f)o[f]\u003d0;else{n.derivative(d,g,m,v,(t-h)/p,o);for(f\u003d0;f\u003cc;++f)o[f]/\u003dp}}return o},s.lastT\u003dfunction(){var t\u003dthis._time;return t[t.length-1]},s.stable\u003dfunction(){for(var t\u003dthis._velocity,e\u003dt.length,r\u003dthis.dimension-1;r\u003e\u003d0;--r)if(t[--e])return!1;return!0},s.jump\u003dfunction(t){var e\u003dthis.lastT(),r\u003dthis.dimension;if(!(t\u003ce||arguments.length!\u003d\u003dr+1)){var n\u003dthis._state,i\u003dthis._velocity,o\u003dn.length-this.dimension,s\u003dthis.bounds,l\u003ds[0],c\u003ds[1];this._time.push(e,t);for(var u\u003d0;u\u003c2;++u)for(var f\u003d0;f\u003cr;++f)n.push(n[o++]),i.push(0);this._time.push(t);for(f\u003dr;f\u003e0;--f)n.push(a(l[f-1],c[f-1],arguments[f])),i.push(0)}},s.push\u003dfunction(t){var e\u003dthis.lastT(),r\u003dthis.dimension;if(!(t\u003ce||arguments.length!\u003d\u003dr+1)){var n\u003dthis._state,i\u003dthis._velocity,o\u003dn.length-this.dimension,s\u003dt-e,l\u003dthis.bounds,c\u003dl[0],u\u003dl[1],f\u003ds\u003e1e-6?1/s:0;this._time.push(t);for(var h\u003dr;h\u003e0;--h){var p\u003da(c[h-1],u[h-1],arguments[h]);n.push(p),i.push((p-n[o++])*f)}}},s.set\u003dfunction(t){var e\u003dthis.dimension;if(!(t\u003cthis.lastT()||arguments.length!\u003d\u003de+1)){var r\u003dthis._state,n\u003dthis._velocity,i\u003dthis.bounds,o\u003di[0],s\u003di[1];this._time.push(t);for(var l\u003de;l\u003e0;--l)r.push(a(o[l-1],s[l-1],arguments[l])),n.push(0)}},s.move\u003dfunction(t){var e\u003dthis.lastT(),r\u003dthis.dimension;if(!(t\u003c\u003de||arguments.length!\u003d\u003dr+1)){var n\u003dthis._state,i\u003dthis._velocity,o\u003dn.length-this.dimension,s\u003dthis.bounds,l\u003ds[0],c\u003ds[1],u\u003dt-e,f\u003du\u003e1e-6?1/u:0;this._time.push(t);for(var h\u003dr;h\u003e0;--h){var p\u003darguments[h];n.push(a(l[h-1],c[h-1],n[o++]+p)),i.push(p*f)}}},s.idle\u003dfunction(t){var e\u003dthis.lastT();if(!(t\u003ce)){var r\u003dthis.dimension,n\u003dthis._state,i\u003dthis._velocity,o\u003dn.length-r,s\u003dthis.bounds,l\u003ds[0],c\u003ds[1],u\u003dt-e;this._time.push(t);for(var f\u003dr-1;f\u003e\u003d0;--f)n.push(a(l[f],c[f],n[o]+u*i[o])),i.push(0),o+\u003d1}}},{\"binary-search-bounds\":247,\"cubic-hermite\":156}],247:[function(t,e,r){\"use strict\";function n(t,e,r,n,i,a){var o\u003d[\"function \",t,\"(a,l,h,\",n.join(\",\"),\"){\",a?\"\":\"var i\u003d\",r?\"l-1\":\"h+1\",\";while(l\u003c\u003dh){var m\u003d(l+h)\u003e\u003e\u003e1,x\u003da\",i?\".get(m)\":\"[m]\"];return a?e.indexOf(\"c\")\u003c0?o.push(\";if(x\u003d\u003d\u003dy){return m}else if(x\u003c\u003dy){\"):o.push(\";var p\u003dc(x,y);if(p\u003d\u003d\u003d0){return m}else if(p\u003c\u003d0){\"):o.push(\";if(\",e,\"){i\u003dm;\"),r?o.push(\"l\u003dm+1}else{h\u003dm-1}\"):o.push(\"h\u003dm-1}else{l\u003dm+1}\"),o.push(\"}\"),a?o.push(\"return -1};\"):o.push(\"return i};\"),o.join(\"\")}function i(t,e,r,i){return new Function([n(\"A\",\"x\"+t+\"y\",e,[\"y\"],!1,i),n(\"B\",\"x\"+t+\"y\",e,[\"y\"],!0,i),n(\"P\",\"c(x,y)\"+t+\"0\",e,[\"y\",\"c\"],!1,i),n(\"Q\",\"c(x,y)\"+t+\"0\",e,[\"y\",\"c\"],!0,i),\"function dispatchBsearch\",r,\"(a,y,c,l,h){if(a.shape){if(typeof(c)\u003d\u003d\u003d\u0027function\u0027){return Q(a,(l\u003d\u003d\u003dundefined)?0:l|0,(h\u003d\u003d\u003dundefined)?a.shape[0]-1:h|0,y,c)}else{return B(a,(c\u003d\u003d\u003dundefined)?0:c|0,(l\u003d\u003d\u003dundefined)?a.shape[0]-1:l|0,y)}}else{if(typeof(c)\u003d\u003d\u003d\u0027function\u0027){return P(a,(l\u003d\u003d\u003dundefined)?0:l|0,(h\u003d\u003d\u003dundefined)?a.length-1:h|0,y,c)}else{return A(a,(c\u003d\u003d\u003dundefined)?0:c|0,(l\u003d\u003d\u003dundefined)?a.length-1:l|0,y)}}}return dispatchBsearch\",r].join(\"\"))()}e.exports\u003d{ge:i(\"\u003e\u003d\",!1,\"GE\"),gt:i(\"\u003e\",!1,\"GT\"),lt:i(\"\u003c\",!0,\"LT\"),le:i(\"\u003c\u003d\",!0,\"LE\"),eq:i(\"-\",!0,\"EQ\",!0)}},{}],248:[function(t,e,r){var n\u003dt(\"dtype\");e.exports\u003dfunction(t,e,r){if(!t)throw new TypeError(\"must specify data as first parameter\");if(r\u003d0|+(r||0),Array.isArray(t)\u0026\u0026t[0]\u0026\u0026\"number\"\u003d\u003dtypeof t[0][0]){var i,a,o,s,l\u003dt[0].length,c\u003dt.length*l;e\u0026\u0026\"string\"!\u003dtypeof e||(e\u003dnew(n(e||\"float32\"))(c+r));var u\u003de.length-r;if(c!\u003d\u003du)throw new Error(\"source length \"+c+\" (\"+l+\"x\"+t.length+\") does not match destination length \"+u);for(i\u003d0,o\u003dr;i\u003ct.length;i++)for(a\u003d0;a\u003cl;a++)e[o++]\u003dnull\u003d\u003d\u003dt[i][a]?NaN:t[i][a]}else if(e\u0026\u0026\"string\"!\u003dtypeof e)e.set(t,r);else{var f\u003dn(e||\"float32\");if(Array.isArray(t)||\"array\"\u003d\u003d\u003de)for(e\u003dnew f(t.length+r),i\u003d0,o\u003dr,s\u003de.length;o\u003cs;o++,i++)e[o]\u003dnull\u003d\u003d\u003dt[i]?NaN:t[i];else 0\u003d\u003d\u003dr?e\u003dnew f(t):(e\u003dnew f(t.length+r)).set(t,r)}return e}},{dtype:180}],249:[function(t,e,r){\"use strict\";var n\u003dt(\"css-font/stringify\"),i\u003d[32,126];e.exports\u003dfunction(t){var e\u003d(t\u003dt||{}).shape?t.shape:t.canvas?[t.canvas.width,t.canvas.height]:[512,512],r\u003dt.canvas||document.createElement(\"canvas\"),a\u003dt.font,o\u003d\"number\"\u003d\u003dtypeof t.step?[t.step,t.step]:t.step||[32,32],s\u003dt.chars||i;a\u0026\u0026\"string\"!\u003dtypeof a\u0026\u0026(a\u003dn(a));if(Array.isArray(s)){if(2\u003d\u003d\u003ds.length\u0026\u0026\"number\"\u003d\u003dtypeof s[0]\u0026\u0026\"number\"\u003d\u003dtypeof s[1]){for(var l\u003d[],c\u003ds[0],u\u003d0;c\u003c\u003ds[1];c++)l[u++]\u003dString.fromCharCode(c);s\u003dl}}else s\u003dString(s).split(\"\");e\u003de.slice(),r.width\u003de[0],r.height\u003de[1];var f\u003dr.getContext(\"2d\");f.fillStyle\u003d\"#000\",f.fillRect(0,0,r.width,r.height),f.font\u003da,f.textAlign\u003d\"center\",f.textBaseline\u003d\"middle\",f.fillStyle\u003d\"#fff\";var h\u003do[0]/2,p\u003do[1]/2;for(c\u003d0;c\u003cs.length;c++)f.fillText(s[c],h,p),(h+\u003do[0])\u003ee[0]-o[0]/2\u0026\u0026(h\u003do[0]/2,p+\u003do[1]);return r}},{\"css-font/stringify\":153}],250:[function(t,e,r){\"use strict\";function n(t,e){e||(e\u003d{}),(\"string\"\u003d\u003dtypeof t||Array.isArray(t))\u0026\u0026(e.family\u003dt);var r\u003dArray.isArray(e.family)?e.family.join(\", \"):e.family;if(!r)throw Error(\"`family` must be defined\");var s\u003de.size||e.fontSize||e.em||48,l\u003de.weight||e.fontWeight||\"\",c\u003d(t\u003d[e.style||e.fontStyle||\"\",l,s].join(\" \")+\"px \"+r,e.origin||\"top\");if(n.cache[r]\u0026\u0026s\u003c\u003dn.cache[r].em)return i(n.cache[r],c);var u\u003de.canvas||n.canvas,f\u003du.getContext(\"2d\"),h\u003d{upper:void 0!\u003d\u003de.upper?e.upper:\"H\",lower:void 0!\u003d\u003de.lower?e.lower:\"x\",descent:void 0!\u003d\u003de.descent?e.descent:\"p\",ascent:void 0!\u003d\u003de.ascent?e.ascent:\"h\",tittle:void 0!\u003d\u003de.tittle?e.tittle:\"i\",overshoot:void 0!\u003d\u003de.overshoot?e.overshoot:\"O\"},p\u003dMath.ceil(1.5*s);u.height\u003dp,u.width\u003d.5*p,f.font\u003dt;var d\u003d{top:0};f.clearRect(0,0,p,p),f.textBaseline\u003d\"top\",f.fillStyle\u003d\"black\",f.fillText(\"H\",0,0);var m\u003da(f.getImageData(0,0,p,p));f.clearRect(0,0,p,p),f.textBaseline\u003d\"bottom\",f.fillText(\"H\",0,p);var g\u003da(f.getImageData(0,0,p,p));d.lineHeight\u003dd.bottom\u003dp-g+m,f.clearRect(0,0,p,p),f.textBaseline\u003d\"alphabetic\",f.fillText(\"H\",0,p);var v\u003dp-a(f.getImageData(0,0,p,p))-1+m;d.baseline\u003dd.alphabetic\u003dv,f.clearRect(0,0,p,p),f.textBaseline\u003d\"middle\",f.fillText(\"H\",0,.5*p);var y\u003da(f.getImageData(0,0,p,p));d.median\u003dd.middle\u003dp-y-1+m-.5*p,f.clearRect(0,0,p,p),f.textBaseline\u003d\"hanging\",f.fillText(\"H\",0,.5*p);var x\u003da(f.getImageData(0,0,p,p));d.hanging\u003dp-x-1+m-.5*p,f.clearRect(0,0,p,p),f.textBaseline\u003d\"ideographic\",f.fillText(\"H\",0,p);var b\u003da(f.getImageData(0,0,p,p));if(d.ideographic\u003dp-b-1+m,h.upper\u0026\u0026(f.clearRect(0,0,p,p),f.textBaseline\u003d\"top\",f.fillText(h.upper,0,0),d.upper\u003da(f.getImageData(0,0,p,p)),d.capHeight\u003dd.baseline-d.upper),h.lower\u0026\u0026(f.clearRect(0,0,p,p),f.textBaseline\u003d\"top\",f.fillText(h.lower,0,0),d.lower\u003da(f.getImageData(0,0,p,p)),d.xHeight\u003dd.baseline-d.lower),h.tittle\u0026\u0026(f.clearRect(0,0,p,p),f.textBaseline\u003d\"top\",f.fillText(h.tittle,0,0),d.tittle\u003da(f.getImageData(0,0,p,p))),h.ascent\u0026\u0026(f.clearRect(0,0,p,p),f.textBaseline\u003d\"top\",f.fillText(h.ascent,0,0),d.ascent\u003da(f.getImageData(0,0,p,p))),h.descent\u0026\u0026(f.clearRect(0,0,p,p),f.textBaseline\u003d\"top\",f.fillText(h.descent,0,0),d.descent\u003do(f.getImageData(0,0,p,p))),h.overshoot){f.clearRect(0,0,p,p),f.textBaseline\u003d\"top\",f.fillText(h.overshoot,0,0);var _\u003do(f.getImageData(0,0,p,p));d.overshoot\u003d_-v}for(var w in d)d[w]/\u003ds;return d.em\u003ds,n.cache[r]\u003dd,i(d,c)}function i(t,e){var r\u003d{};for(var n in\"string\"\u003d\u003dtypeof e\u0026\u0026(e\u003dt[e]),t)\"em\"!\u003d\u003dn\u0026\u0026(r[n]\u003dt[n]-e);return r}function a(t){for(var e\u003dt.height,r\u003dt.data,n\u003d3;n\u003cr.length;n+\u003d4)if(0!\u003d\u003dr[n])return Math.floor(.25*(n-3)/e)}function o(t){for(var e\u003dt.height,r\u003dt.data,n\u003dr.length-1;n\u003e0;n-\u003d4)if(0!\u003d\u003dr[n])return Math.floor(.25*(n-3)/e)}e.exports\u003dn,n.canvas\u003ddocument.createElement(\"canvas\"),n.cache\u003d{}},{}],251:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return new s(t||m,null)};function n(t,e,r,n,i,a){this._color\u003dt,this.key\u003de,this.value\u003dr,this.left\u003dn,this.right\u003di,this._count\u003da}function i(t){return new n(t._color,t.key,t.value,t.left,t.right,t._count)}function a(t,e){return new n(t,e.key,e.value,e.left,e.right,e._count)}function o(t){t._count\u003d1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function s(t,e){this._compare\u003dt,this.root\u003de}var l\u003ds.prototype;function c(t,e){var r;if(e.left\u0026\u0026(r\u003dc(t,e.left)))return r;return(r\u003dt(e.key,e.value))||(e.right?c(t,e.right):void 0)}function u(t,e,r,n){if(e(t,n.key)\u003c\u003d0){var i;if(n.left)if(i\u003du(t,e,r,n.left))return i;if(i\u003dr(n.key,n.value))return i}if(n.right)return u(t,e,r,n.right)}function f(t,e,r,n,i){var a,o\u003dr(t,i.key),s\u003dr(e,i.key);if(o\u003c\u003d0){if(i.left\u0026\u0026(a\u003df(t,e,r,n,i.left)))return a;if(s\u003e0\u0026\u0026(a\u003dn(i.key,i.value)))return a}if(s\u003e0\u0026\u0026i.right)return f(t,e,r,n,i.right)}function h(t,e){this.tree\u003dt,this._stack\u003de}Object.defineProperty(l,\"keys\",{get:function(){var t\u003d[];return this.forEach((function(e,r){t.push(e)})),t}}),Object.defineProperty(l,\"values\",{get:function(){var t\u003d[];return this.forEach((function(e,r){t.push(r)})),t}}),Object.defineProperty(l,\"length\",{get:function(){return this.root?this.root._count:0}}),l.insert\u003dfunction(t,e){for(var r\u003dthis._compare,i\u003dthis.root,l\u003d[],c\u003d[];i;){var u\u003dr(t,i.key);l.push(i),c.push(u),i\u003du\u003c\u003d0?i.left:i.right}l.push(new n(0,t,e,null,null,1));for(var f\u003dl.length-2;f\u003e\u003d0;--f){i\u003dl[f];c[f]\u003c\u003d0?l[f]\u003dnew n(i._color,i.key,i.value,l[f+1],i.right,i._count+1):l[f]\u003dnew n(i._color,i.key,i.value,i.left,l[f+1],i._count+1)}for(f\u003dl.length-1;f\u003e1;--f){var h\u003dl[f-1];i\u003dl[f];if(1\u003d\u003d\u003dh._color||1\u003d\u003d\u003di._color)break;var p\u003dl[f-2];if(p.left\u003d\u003d\u003dh)if(h.left\u003d\u003d\u003di){if(!(d\u003dp.right)||0!\u003d\u003dd._color){if(p._color\u003d0,p.left\u003dh.right,h._color\u003d1,h.right\u003dp,l[f-2]\u003dh,l[f-1]\u003di,o(p),o(h),f\u003e\u003d3)(m\u003dl[f-3]).left\u003d\u003d\u003dp?m.left\u003dh:m.right\u003dh;break}h._color\u003d1,p.right\u003da(1,d),p._color\u003d0,f-\u003d1}else{if(!(d\u003dp.right)||0!\u003d\u003dd._color){if(h.right\u003di.left,p._color\u003d0,p.left\u003di.right,i._color\u003d1,i.left\u003dh,i.right\u003dp,l[f-2]\u003di,l[f-1]\u003dh,o(p),o(h),o(i),f\u003e\u003d3)(m\u003dl[f-3]).left\u003d\u003d\u003dp?m.left\u003di:m.right\u003di;break}h._color\u003d1,p.right\u003da(1,d),p._color\u003d0,f-\u003d1}else if(h.right\u003d\u003d\u003di){if(!(d\u003dp.left)||0!\u003d\u003dd._color){if(p._color\u003d0,p.right\u003dh.left,h._color\u003d1,h.left\u003dp,l[f-2]\u003dh,l[f-1]\u003di,o(p),o(h),f\u003e\u003d3)(m\u003dl[f-3]).right\u003d\u003d\u003dp?m.right\u003dh:m.left\u003dh;break}h._color\u003d1,p.left\u003da(1,d),p._color\u003d0,f-\u003d1}else{var d;if(!(d\u003dp.left)||0!\u003d\u003dd._color){var m;if(h.left\u003di.right,p._color\u003d0,p.right\u003di.left,i._color\u003d1,i.right\u003dh,i.left\u003dp,l[f-2]\u003di,l[f-1]\u003dh,o(p),o(h),o(i),f\u003e\u003d3)(m\u003dl[f-3]).right\u003d\u003d\u003dp?m.right\u003di:m.left\u003di;break}h._color\u003d1,p.left\u003da(1,d),p._color\u003d0,f-\u003d1}}return l[0]._color\u003d1,new s(r,l[0])},l.forEach\u003dfunction(t,e,r){if(this.root)switch(arguments.length){case 1:return c(t,this.root);case 2:return u(e,this._compare,t,this.root);case 3:if(this._compare(e,r)\u003e\u003d0)return;return f(e,r,this._compare,t,this.root)}},Object.defineProperty(l,\"begin\",{get:function(){for(var t\u003d[],e\u003dthis.root;e;)t.push(e),e\u003de.left;return new h(this,t)}}),Object.defineProperty(l,\"end\",{get:function(){for(var t\u003d[],e\u003dthis.root;e;)t.push(e),e\u003de.right;return new h(this,t)}}),l.at\u003dfunction(t){if(t\u003c0)return new h(this,[]);for(var e\u003dthis.root,r\u003d[];;){if(r.push(e),e.left){if(t\u003ce.left._count){e\u003de.left;continue}t-\u003de.left._count}if(!t)return new h(this,r);if(t-\u003d1,!e.right)break;if(t\u003e\u003de.right._count)break;e\u003de.right}return new h(this,[])},l.ge\u003dfunction(t){for(var e\u003dthis._compare,r\u003dthis.root,n\u003d[],i\u003d0;r;){var a\u003de(t,r.key);n.push(r),a\u003c\u003d0\u0026\u0026(i\u003dn.length),r\u003da\u003c\u003d0?r.left:r.right}return n.length\u003di,new h(this,n)},l.gt\u003dfunction(t){for(var e\u003dthis._compare,r\u003dthis.root,n\u003d[],i\u003d0;r;){var a\u003de(t,r.key);n.push(r),a\u003c0\u0026\u0026(i\u003dn.length),r\u003da\u003c0?r.left:r.right}return n.length\u003di,new h(this,n)},l.lt\u003dfunction(t){for(var e\u003dthis._compare,r\u003dthis.root,n\u003d[],i\u003d0;r;){var a\u003de(t,r.key);n.push(r),a\u003e0\u0026\u0026(i\u003dn.length),r\u003da\u003c\u003d0?r.left:r.right}return n.length\u003di,new h(this,n)},l.le\u003dfunction(t){for(var e\u003dthis._compare,r\u003dthis.root,n\u003d[],i\u003d0;r;){var a\u003de(t,r.key);n.push(r),a\u003e\u003d0\u0026\u0026(i\u003dn.length),r\u003da\u003c0?r.left:r.right}return n.length\u003di,new h(this,n)},l.find\u003dfunction(t){for(var e\u003dthis._compare,r\u003dthis.root,n\u003d[];r;){var i\u003de(t,r.key);if(n.push(r),0\u003d\u003d\u003di)return new h(this,n);r\u003di\u003c\u003d0?r.left:r.right}return new h(this,[])},l.remove\u003dfunction(t){var e\u003dthis.find(t);return e?e.remove():this},l.get\u003dfunction(t){for(var e\u003dthis._compare,r\u003dthis.root;r;){var n\u003de(t,r.key);if(0\u003d\u003d\u003dn)return r.value;r\u003dn\u003c\u003d0?r.left:r.right}};var p\u003dh.prototype;function d(t,e){t.key\u003de.key,t.value\u003de.value,t.left\u003de.left,t.right\u003de.right,t._color\u003de._color,t._count\u003de._count}function m(t,e){return t\u003ce?-1:t\u003ee?1:0}Object.defineProperty(p,\"valid\",{get:function(){return this._stack.length\u003e0}}),Object.defineProperty(p,\"node\",{get:function(){return this._stack.length\u003e0?this._stack[this._stack.length-1]:null},enumerable:!0}),p.clone\u003dfunction(){return new h(this.tree,this._stack.slice())},p.remove\u003dfunction(){var t\u003dthis._stack;if(0\u003d\u003d\u003dt.length)return this.tree;var e\u003dnew Array(t.length),r\u003dt[t.length-1];e[e.length-1]\u003dnew n(r._color,r.key,r.value,r.left,r.right,r._count);for(var l\u003dt.length-2;l\u003e\u003d0;--l){(r\u003dt[l]).left\u003d\u003d\u003dt[l+1]?e[l]\u003dnew n(r._color,r.key,r.value,e[l+1],r.right,r._count):e[l]\u003dnew n(r._color,r.key,r.value,r.left,e[l+1],r._count)}if((r\u003de[e.length-1]).left\u0026\u0026r.right){var c\u003de.length;for(r\u003dr.left;r.right;)e.push(r),r\u003dr.right;var u\u003de[c-1];e.push(new n(r._color,u.key,u.value,r.left,r.right,r._count)),e[c-1].key\u003dr.key,e[c-1].value\u003dr.value;for(l\u003de.length-2;l\u003e\u003dc;--l)r\u003de[l],e[l]\u003dnew n(r._color,r.key,r.value,r.left,e[l+1],r._count);e[c-1].left\u003de[c]}if(0\u003d\u003d\u003d(r\u003de[e.length-1])._color){var f\u003de[e.length-2];f.left\u003d\u003d\u003dr?f.left\u003dnull:f.right\u003d\u003d\u003dr\u0026\u0026(f.right\u003dnull),e.pop();for(l\u003d0;l\u003ce.length;++l)e[l]._count--;return new s(this.tree._compare,e[0])}if(r.left||r.right){r.left?d(r,r.left):r.right\u0026\u0026d(r,r.right),r._color\u003d1;for(l\u003d0;l\u003ce.length-1;++l)e[l]._count--;return new s(this.tree._compare,e[0])}if(1\u003d\u003d\u003de.length)return new s(this.tree._compare,null);for(l\u003d0;l\u003ce.length;++l)e[l]._count--;var h\u003de[e.length-2];return function(t){for(var e,r,n,s,l\u003dt.length-1;l\u003e\u003d0;--l){if(e\u003dt[l],0\u003d\u003d\u003dl)return void(e._color\u003d1);if((r\u003dt[l-1]).left\u003d\u003d\u003de){if((n\u003dr.right).right\u0026\u00260\u003d\u003d\u003dn.right._color){if(s\u003d(n\u003dr.right\u003di(n)).right\u003di(n.right),r.right\u003dn.left,n.left\u003dr,n.right\u003ds,n._color\u003dr._color,e._color\u003d1,r._color\u003d1,s._color\u003d1,o(r),o(n),l\u003e1)(c\u003dt[l-2]).left\u003d\u003d\u003dr?c.left\u003dn:c.right\u003dn;return void(t[l-1]\u003dn)}if(n.left\u0026\u00260\u003d\u003d\u003dn.left._color){if(s\u003d(n\u003dr.right\u003di(n)).left\u003di(n.left),r.right\u003ds.left,n.left\u003ds.right,s.left\u003dr,s.right\u003dn,s._color\u003dr._color,r._color\u003d1,n._color\u003d1,e._color\u003d1,o(r),o(n),o(s),l\u003e1)(c\u003dt[l-2]).left\u003d\u003d\u003dr?c.left\u003ds:c.right\u003ds;return void(t[l-1]\u003ds)}if(1\u003d\u003d\u003dn._color){if(0\u003d\u003d\u003dr._color)return r._color\u003d1,void(r.right\u003da(0,n));r.right\u003da(0,n);continue}n\u003di(n),r.right\u003dn.left,n.left\u003dr,n._color\u003dr._color,r._color\u003d0,o(r),o(n),l\u003e1\u0026\u0026((c\u003dt[l-2]).left\u003d\u003d\u003dr?c.left\u003dn:c.right\u003dn),t[l-1]\u003dn,t[l]\u003dr,l+1\u003ct.length?t[l+1]\u003de:t.push(e),l+\u003d2}else{if((n\u003dr.left).left\u0026\u00260\u003d\u003d\u003dn.left._color){if(s\u003d(n\u003dr.left\u003di(n)).left\u003di(n.left),r.left\u003dn.right,n.right\u003dr,n.left\u003ds,n._color\u003dr._color,e._color\u003d1,r._color\u003d1,s._color\u003d1,o(r),o(n),l\u003e1)(c\u003dt[l-2]).right\u003d\u003d\u003dr?c.right\u003dn:c.left\u003dn;return void(t[l-1]\u003dn)}if(n.right\u0026\u00260\u003d\u003d\u003dn.right._color){if(s\u003d(n\u003dr.left\u003di(n)).right\u003di(n.right),r.left\u003ds.right,n.right\u003ds.left,s.right\u003dr,s.left\u003dn,s._color\u003dr._color,r._color\u003d1,n._color\u003d1,e._color\u003d1,o(r),o(n),o(s),l\u003e1)(c\u003dt[l-2]).right\u003d\u003d\u003dr?c.right\u003ds:c.left\u003ds;return void(t[l-1]\u003ds)}if(1\u003d\u003d\u003dn._color){if(0\u003d\u003d\u003dr._color)return r._color\u003d1,void(r.left\u003da(0,n));r.left\u003da(0,n);continue}var c;n\u003di(n),r.left\u003dn.right,n.right\u003dr,n._color\u003dr._color,r._color\u003d0,o(r),o(n),l\u003e1\u0026\u0026((c\u003dt[l-2]).right\u003d\u003d\u003dr?c.right\u003dn:c.left\u003dn),t[l-1]\u003dn,t[l]\u003dr,l+1\u003ct.length?t[l+1]\u003de:t.push(e),l+\u003d2}}}(e),h.left\u003d\u003d\u003dr?h.left\u003dnull:h.right\u003dnull,new s(this.tree._compare,e[0])},Object.defineProperty(p,\"key\",{get:function(){if(this._stack.length\u003e0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(p,\"value\",{get:function(){if(this._stack.length\u003e0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(p,\"index\",{get:function(){var t\u003d0,e\u003dthis._stack;if(0\u003d\u003d\u003de.length){var r\u003dthis.tree.root;return r?r._count:0}e[e.length-1].left\u0026\u0026(t\u003de[e.length-1].left._count);for(var n\u003de.length-2;n\u003e\u003d0;--n)e[n+1]\u003d\u003d\u003de[n].right\u0026\u0026(++t,e[n].left\u0026\u0026(t+\u003de[n].left._count));return t},enumerable:!0}),p.next\u003dfunction(){var t\u003dthis._stack;if(0!\u003d\u003dt.length){var e\u003dt[t.length-1];if(e.right)for(e\u003de.right;e;)t.push(e),e\u003de.left;else for(t.pop();t.length\u003e0\u0026\u0026t[t.length-1].right\u003d\u003d\u003de;)e\u003dt[t.length-1],t.pop()}},Object.defineProperty(p,\"hasNext\",{get:function(){var t\u003dthis._stack;if(0\u003d\u003d\u003dt.length)return!1;if(t[t.length-1].right)return!0;for(var e\u003dt.length-1;e\u003e0;--e)if(t[e-1].left\u003d\u003d\u003dt[e])return!0;return!1}}),p.update\u003dfunction(t){var e\u003dthis._stack;if(0\u003d\u003d\u003de.length)throw new Error(\"Can\u0027t update empty node!\");var r\u003dnew Array(e.length),i\u003de[e.length-1];r[r.length-1]\u003dnew n(i._color,i.key,t,i.left,i.right,i._count);for(var a\u003de.length-2;a\u003e\u003d0;--a)(i\u003de[a]).left\u003d\u003d\u003de[a+1]?r[a]\u003dnew n(i._color,i.key,i.value,r[a+1],i.right,i._count):r[a]\u003dnew n(i._color,i.key,i.value,i.left,r[a+1],i._count);return new s(this.tree._compare,r[0])},p.prev\u003dfunction(){var t\u003dthis._stack;if(0!\u003d\u003dt.length){var e\u003dt[t.length-1];if(e.left)for(e\u003de.left;e;)t.push(e),e\u003de.right;else for(t.pop();t.length\u003e0\u0026\u0026t[t.length-1].left\u003d\u003d\u003de;)e\u003dt[t.length-1],t.pop()}},Object.defineProperty(p,\"hasPrev\",{get:function(){var t\u003dthis._stack;if(0\u003d\u003d\u003dt.length)return!1;if(t[t.length-1].left)return!0;for(var e\u003dt.length-1;e\u003e0;--e)if(t[e-1].right\u003d\u003d\u003dt[e])return!0;return!1}})},{}],252:[function(t,e,r){var n\u003d[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],i\u003d[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];function a(t){if(t\u003c0)return Number(\"0/0\");for(var e\u003di[0],r\u003di.length-1;r\u003e0;--r)e+\u003di[r]/(t+r);var n\u003dt+607/128+.5;return.5*Math.log(2*Math.PI)+(t+.5)*Math.log(n)-n+Math.log(e)-Math.log(t)}e.exports\u003dfunction t(e){if(e\u003c.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));if(e\u003e100)return Math.exp(a(e));e-\u003d1;for(var r\u003dn[0],i\u003d1;i\u003c9;i++)r+\u003dn[i]/(e+i);var o\u003de+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(o,e+.5)*Math.exp(-o)*r},e.exports.log\u003da},{}],253:[function(t,e,r){e.exports\u003dfunction(t,e){if(\"string\"!\u003dtypeof t)throw new TypeError(\"must specify type string\");if(e\u003de||{},\"undefined\"\u003d\u003dtypeof document\u0026\u0026!e.canvas)return null;var r\u003de.canvas||document.createElement(\"canvas\");\"number\"\u003d\u003dtypeof e.width\u0026\u0026(r.width\u003de.width);\"number\"\u003d\u003dtypeof e.height\u0026\u0026(r.height\u003de.height);var n,i\u003de;try{var a\u003d[t];0\u003d\u003d\u003dt.indexOf(\"webgl\")\u0026\u0026a.push(\"experimental-\"+t);for(var o\u003d0;o\u003ca.length;o++)if(n\u003dr.getContext(a[o],i))return n}catch(t){n\u003dnull}return n||null}},{}],254:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003dnew u(t);return r.update(e),r};var n\u003dt(\"./lib/text.js\"),i\u003dt(\"./lib/lines.js\"),a\u003dt(\"./lib/background.js\"),o\u003dt(\"./lib/cube.js\"),s\u003dt(\"./lib/ticks.js\"),l\u003dnew Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]);function c(t,e){return t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t}function u(t){this.gl\u003dt,this.pixelRatio\u003d1,this.bounds\u003d[[-10,-10,-10],[10,10,10]],this.ticks\u003d[[],[],[]],this.autoTicks\u003d!0,this.tickSpacing\u003d[1,1,1],this.tickEnable\u003d[!0,!0,!0],this.tickFont\u003d[\"sans-serif\",\"sans-serif\",\"sans-serif\"],this.tickSize\u003d[12,12,12],this.tickAngle\u003d[0,0,0],this.tickAlign\u003d[\"auto\",\"auto\",\"auto\"],this.tickColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad\u003d[10,10,10],this.lastCubeProps\u003d{cubeEdges:[0,0,0],axis:[0,0,0]},this.labels\u003d[\"x\",\"y\",\"z\"],this.labelEnable\u003d[!0,!0,!0],this.labelFont\u003d\"sans-serif\",this.labelSize\u003d[20,20,20],this.labelAngle\u003d[0,0,0],this.labelAlign\u003d[\"auto\",\"auto\",\"auto\"],this.labelColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad\u003d[10,10,10],this.lineEnable\u003d[!0,!0,!0],this.lineMirror\u003d[!1,!1,!1],this.lineWidth\u003d[1,1,1],this.lineColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable\u003d[!0,!0,!0],this.lineTickMirror\u003d[!1,!1,!1],this.lineTickLength\u003d[0,0,0],this.lineTickWidth\u003d[1,1,1],this.lineTickColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable\u003d[!0,!0,!0],this.gridWidth\u003d[1,1,1],this.gridColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable\u003d[!0,!0,!0],this.zeroLineColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth\u003d[2,2,2],this.backgroundEnable\u003d[!1,!1,!1],this.backgroundColor\u003d[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit\u003d!0,this._text\u003dnull,this._lines\u003dnull,this._background\u003da(t)}var f\u003du.prototype;function h(){this.primalOffset\u003d[0,0,0],this.primalMinor\u003d[0,0,0],this.mirrorOffset\u003d[0,0,0],this.mirrorMinor\u003d[0,0,0]}f.update\u003dfunction(t){function e(e,r,n){if(n in t){var i,a\u003dt[n],o\u003dthis[n];(e?Array.isArray(a)\u0026\u0026Array.isArray(a[0]):Array.isArray(a))?this[n]\u003di\u003d[r(a[0]),r(a[1]),r(a[2])]:this[n]\u003di\u003d[r(a),r(a),r(a)];for(var s\u003d0;s\u003c3;++s)if(i[s]!\u003d\u003do[s])return!0}return!1}t\u003dt||{};var r,a\u003de.bind(this,!1,Number),o\u003de.bind(this,!1,Boolean),l\u003de.bind(this,!1,String),c\u003de.bind(this,!0,(function(t){if(Array.isArray(t)){if(3\u003d\u003d\u003dt.length)return[+t[0],+t[1],+t[2],1];if(4\u003d\u003d\u003dt.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]})),u\u003d!1,f\u003d!1;if(\"bounds\"in t)for(var h\u003dt.bounds,p\u003d0;p\u003c2;++p)for(var d\u003d0;d\u003c3;++d)h[p][d]!\u003d\u003dthis.bounds[p][d]\u0026\u0026(f\u003d!0),this.bounds[p][d]\u003dh[p][d];if(\"ticks\"in t){r\u003dt.ticks,u\u003d!0,this.autoTicks\u003d!1;for(p\u003d0;p\u003c3;++p)this.tickSpacing[p]\u003d0}else a(\"tickSpacing\")\u0026\u0026(this.autoTicks\u003d!0,f\u003d!0);if(this._firstInit\u0026\u0026(\"ticks\"in t||\"tickSpacing\"in t||(this.autoTicks\u003d!0),f\u003d!0,u\u003d!0,this._firstInit\u003d!1),f\u0026\u0026this.autoTicks\u0026\u0026(r\u003ds.create(this.bounds,this.tickSpacing),u\u003d!0),u){for(p\u003d0;p\u003c3;++p)r[p].sort((function(t,e){return t.x-e.x}));s.equal(r,this.ticks)?u\u003d!1:this.ticks\u003dr}o(\"tickEnable\"),l(\"tickFont\")\u0026\u0026(u\u003d!0),a(\"tickSize\"),a(\"tickAngle\"),a(\"tickPad\"),c(\"tickColor\");var m\u003dl(\"labels\");l(\"labelFont\")\u0026\u0026(m\u003d!0),o(\"labelEnable\"),a(\"labelSize\"),a(\"labelPad\"),c(\"labelColor\"),o(\"lineEnable\"),o(\"lineMirror\"),a(\"lineWidth\"),c(\"lineColor\"),o(\"lineTickEnable\"),o(\"lineTickMirror\"),a(\"lineTickLength\"),a(\"lineTickWidth\"),c(\"lineTickColor\"),o(\"gridEnable\"),a(\"gridWidth\"),c(\"gridColor\"),o(\"zeroEnable\"),c(\"zeroLineColor\"),a(\"zeroLineWidth\"),o(\"backgroundEnable\"),c(\"backgroundColor\"),this._text?this._text\u0026\u0026(m||u)\u0026\u0026this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text\u003dn(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines\u0026\u0026u\u0026\u0026(this._lines.dispose(),this._lines\u003dnull),this._lines||(this._lines\u003di(this.gl,this.bounds,this.ticks))};var p\u003d[new h,new h,new h];function d(t,e,r,n,i){for(var a\u003dt.primalOffset,o\u003dt.primalMinor,s\u003dt.mirrorOffset,l\u003dt.mirrorMinor,c\u003dn[e],u\u003d0;u\u003c3;++u)if(e!\u003d\u003du){var f\u003da,h\u003ds,p\u003do,d\u003dl;c\u00261\u003c\u003cu\u0026\u0026(f\u003ds,h\u003da,p\u003dl,d\u003do),f[u]\u003dr[0][u],h[u]\u003dr[1][u],i[u]\u003e0?(p[u]\u003d-1,d[u]\u003d0):(p[u]\u003d0,d[u]\u003d1)}}var m\u003d[0,0,0],g\u003d{model:l,view:l,projection:l,_ortho:!1};f.isOpaque\u003dfunction(){return!0},f.isTransparent\u003dfunction(){return!1},f.drawTransparent\u003dfunction(t){};var v\u003d[0,0,0],y\u003d[0,0,0],x\u003d[0,0,0];f.draw\u003dfunction(t){t\u003dt||g;for(var e\u003dthis.gl,r\u003dt.model||l,n\u003dt.view||l,i\u003dt.projection||l,a\u003dthis.bounds,s\u003dt._ortho||!1,u\u003do(r,n,i,a,s),f\u003du.cubeEdges,h\u003du.axis,b\u003dn[12],_\u003dn[13],w\u003dn[14],T\u003dn[15],k\u003d(s?2:1)*this.pixelRatio*(i[3]*b+i[7]*_+i[11]*w+i[15]*T)/e.drawingBufferHeight,M\u003d0;M\u003c3;++M)this.lastCubeProps.cubeEdges[M]\u003df[M],this.lastCubeProps.axis[M]\u003dh[M];var A\u003dp;for(M\u003d0;M\u003c3;++M)d(p[M],M,this.bounds,f,h);e\u003dthis.gl;var S,E\u003dm;for(M\u003d0;M\u003c3;++M)this.backgroundEnable[M]?E[M]\u003dh[M]:E[M]\u003d0;this._background.draw(r,n,i,a,E,this.backgroundColor),this._lines.bind(r,n,i,this);for(M\u003d0;M\u003c3;++M){var L\u003d[0,0,0];h[M]\u003e0?L[M]\u003da[1][M]:L[M]\u003da[0][M];for(var C\u003d0;C\u003c2;++C){var P\u003d(M+1+C)%3,I\u003d(M+1+(1^C))%3;this.gridEnable[P]\u0026\u0026this._lines.drawGrid(P,I,this.bounds,L,this.gridColor[P],this.gridWidth[P]*this.pixelRatio)}for(C\u003d0;C\u003c2;++C){P\u003d(M+1+C)%3,I\u003d(M+1+(1^C))%3;this.zeroEnable[I]\u0026\u0026Math.min(a[0][I],a[1][I])\u003c\u003d0\u0026\u0026Math.max(a[0][I],a[1][I])\u003e\u003d0\u0026\u0026this._lines.drawZero(P,I,this.bounds,L,this.zeroLineColor[I],this.zeroLineWidth[I]*this.pixelRatio)}}for(M\u003d0;M\u003c3;++M){this.lineEnable[M]\u0026\u0026this._lines.drawAxisLine(M,this.bounds,A[M].primalOffset,this.lineColor[M],this.lineWidth[M]*this.pixelRatio),this.lineMirror[M]\u0026\u0026this._lines.drawAxisLine(M,this.bounds,A[M].mirrorOffset,this.lineColor[M],this.lineWidth[M]*this.pixelRatio);var O\u003dc(v,A[M].primalMinor),z\u003dc(y,A[M].mirrorMinor),D\u003dthis.lineTickLength;for(C\u003d0;C\u003c3;++C){var R\u003dk/r[5*C];O[C]*\u003dD[C]*R,z[C]*\u003dD[C]*R}this.lineTickEnable[M]\u0026\u0026this._lines.drawAxisTicks(M,A[M].primalOffset,O,this.lineTickColor[M],this.lineTickWidth[M]*this.pixelRatio),this.lineTickMirror[M]\u0026\u0026this._lines.drawAxisTicks(M,A[M].mirrorOffset,z,this.lineTickColor[M],this.lineTickWidth[M]*this.pixelRatio)}this._lines.unbind(),this._text.bind(r,n,i,this.pixelRatio);var F,B;function N(t){(B\u003d[0,0,0])[t]\u003d1}function j(t,e,r){var n\u003d(t+1)%3,i\u003d(t+2)%3,a\u003de[n],o\u003de[i],s\u003dr[n],l\u003dr[i];a\u003e0\u0026\u0026l\u003e0||a\u003e0\u0026\u0026l\u003c0||a\u003c0\u0026\u0026l\u003e0||a\u003c0\u0026\u0026l\u003c0?N(n):(o\u003e0\u0026\u0026s\u003e0||o\u003e0\u0026\u0026s\u003c0||o\u003c0\u0026\u0026s\u003e0||o\u003c0\u0026\u0026s\u003c0)\u0026\u0026N(i)}for(M\u003d0;M\u003c3;++M){var U\u003dA[M].primalMinor,V\u003dA[M].mirrorMinor,q\u003dc(x,A[M].primalOffset);for(C\u003d0;C\u003c3;++C)this.lineTickEnable[M]\u0026\u0026(q[C]+\u003dk*U[C]*Math.max(this.lineTickLength[C],0)/r[5*C]);var H\u003d[0,0,0];if(H[M]\u003d1,this.tickEnable[M]){-3600\u003d\u003d\u003dthis.tickAngle[M]?(this.tickAngle[M]\u003d0,this.tickAlign[M]\u003d\"auto\"):this.tickAlign[M]\u003d-1,F\u003d1,\"auto\"\u003d\u003d\u003d(S\u003d[this.tickAlign[M],.5,F])[0]?S[0]\u003d0:S[0]\u003dparseInt(\"\"+S[0]),B\u003d[0,0,0],j(M,U,V);for(C\u003d0;C\u003c3;++C)q[C]+\u003dk*U[C]*this.tickPad[C]/r[5*C];this._text.drawTicks(M,this.tickSize[M],this.tickAngle[M],q,this.tickColor[M],H,B,S)}if(this.labelEnable[M]){F\u003d0,B\u003d[0,0,0],this.labels[M].length\u003e4\u0026\u0026(N(M),F\u003d1),\"auto\"\u003d\u003d\u003d(S\u003d[this.labelAlign[M],.5,F])[0]?S[0]\u003d0:S[0]\u003dparseInt(\"\"+S[0]);for(C\u003d0;C\u003c3;++C)q[C]+\u003dk*U[C]*this.labelPad[C]/r[5*C];q[M]+\u003d.5*(a[0][M]+a[1][M]),this._text.drawLabel(M,this.labelSize[M],this.labelAngle[M],q,this.labelColor[M],[0,0,0],B,S)}}this._text.unbind()},f.dispose\u003dfunction(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines\u003dnull,this._text\u003dnull,this._background\u003dnull,this.gl\u003dnull}},{\"./lib/background.js\":255,\"./lib/cube.js\":256,\"./lib/lines.js\":257,\"./lib/text.js\":259,\"./lib/ticks.js\":260}],255:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003d[],r\u003d[],s\u003d0,l\u003d0;l\u003c3;++l)for(var c\u003d(l+1)%3,u\u003d(l+2)%3,f\u003d[0,0,0],h\u003d[0,0,0],p\u003d-1;p\u003c\u003d1;p+\u003d2){r.push(s,s+2,s+1,s+1,s+2,s+3),f[l]\u003dp,h[l]\u003dp;for(var d\u003d-1;d\u003c\u003d1;d+\u003d2){f[c]\u003dd;for(var m\u003d-1;m\u003c\u003d1;m+\u003d2)f[u]\u003dm,e.push(f[0],f[1],f[2],h[0],h[1],h[2]),s+\u003d1}var g\u003dc;c\u003du,u\u003dg}var v\u003dn(t,new Float32Array(e)),y\u003dn(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),x\u003di(t,[{buffer:v,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:v,type:t.FLOAT,size:3,offset:12,stride:24}],y),b\u003da(t);return b.attributes.position.location\u003d0,b.attributes.normal.location\u003d1,new o(t,v,x,b)};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-vao\"),a\u003dt(\"./shaders\").bg;function o(t,e,r,n){this.gl\u003dt,this.buffer\u003de,this.vao\u003dr,this.shader\u003dn}var s\u003do.prototype;s.draw\u003dfunction(t,e,r,n,i,a){for(var o\u003d!1,s\u003d0;s\u003c3;++s)o\u003do||i[s];if(o){var l\u003dthis.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms\u003d{model:t,view:e,projection:r,bounds:n,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),this.vao.unbind(),l.disable(l.POLYGON_OFFSET_FILL)}},s.dispose\u003dfunction(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{\"./shaders\":258,\"gl-buffer\":263,\"gl-vao\":357}],256:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,a,p){i(s,e,t),i(s,r,s);for(var y\u003d0,x\u003d0;x\u003c2;++x){u[2]\u003da[x][2];for(var b\u003d0;b\u003c2;++b){u[1]\u003da[b][1];for(var _\u003d0;_\u003c2;++_)u[0]\u003da[_][0],h(l[y],u,s),y+\u003d1}}var w\u003d-1;for(x\u003d0;x\u003c8;++x){for(var T\u003dl[x][3],k\u003d0;k\u003c3;++k)c[x][k]\u003dl[x][k]/T;p\u0026\u0026(c[x][2]*\u003d-1),T\u003c0\u0026\u0026(w\u003c0||c[x][2]\u003cc[w][2])\u0026\u0026(w\u003dx)}if(w\u003c0){w\u003d0;for(var M\u003d0;M\u003c3;++M){for(var A\u003d(M+2)%3,S\u003d(M+1)%3,E\u003d-1,L\u003d-1,C\u003d0;C\u003c2;++C){var P\u003d(O\u003dC\u003c\u003cM)+(C\u003c\u003cA)+(1-C\u003c\u003cS),I\u003dO+(1-C\u003c\u003cA)+(C\u003c\u003cS);o(c[O],c[P],c[I],f)\u003c0||(C?E\u003d1:L\u003d1)}if(E\u003c0||L\u003c0)L\u003eE\u0026\u0026(w|\u003d1\u003c\u003cM);else{for(C\u003d0;C\u003c2;++C){P\u003d(O\u003dC\u003c\u003cM)+(C\u003c\u003cA)+(1-C\u003c\u003cS),I\u003dO+(1-C\u003c\u003cA)+(C\u003c\u003cS);var O,z\u003dd([l[O],l[P],l[I],l[O+(1\u003c\u003cA)+(1\u003c\u003cS)]]);C?E\u003dz:L\u003dz}L\u003eE\u0026\u0026(w|\u003d1\u003c\u003cM)}}}var D\u003d7^w,R\u003d-1;for(x\u003d0;x\u003c8;++x)x!\u003d\u003dw\u0026\u0026x!\u003d\u003dD\u0026\u0026(R\u003c0||c[R][1]\u003ec[x][1])\u0026\u0026(R\u003dx);var F\u003d-1;for(x\u003d0;x\u003c3;++x){if((N\u003dR^1\u003c\u003cx)!\u003d\u003dw\u0026\u0026N!\u003d\u003dD)F\u003c0\u0026\u0026(F\u003dN),(S\u003dc[N])[0]\u003cc[F][0]\u0026\u0026(F\u003dN)}var B\u003d-1;for(x\u003d0;x\u003c3;++x){var N;if((N\u003dR^1\u003c\u003cx)!\u003d\u003dw\u0026\u0026N!\u003d\u003dD\u0026\u0026N!\u003d\u003dF)B\u003c0\u0026\u0026(B\u003dN),(S\u003dc[N])[0]\u003ec[B][0]\u0026\u0026(B\u003dN)}var j\u003dm;j[0]\u003dj[1]\u003dj[2]\u003d0,j[n.log2(F^R)]\u003dR\u0026F,j[n.log2(R^B)]\u003dR\u0026B;var U\u003d7^B;U\u003d\u003d\u003dw||U\u003d\u003d\u003dD?(U\u003d7^F,j[n.log2(B^U)]\u003dU\u0026B):j[n.log2(F^U)]\u003dU\u0026F;var V\u003dg,q\u003dw;for(M\u003d0;M\u003c3;++M)V[M]\u003dq\u00261\u003c\u003cM?-1:1;return v};var n\u003dt(\"bit-twiddle\"),i\u003dt(\"gl-mat4/multiply\"),a\u003dt(\"split-polygon\"),o\u003dt(\"robust-orientation\"),s\u003dnew Array(16),l\u003dnew Array(8),c\u003dnew Array(8),u\u003dnew Array(3),f\u003d[0,0,0];function h(t,e,r){for(var n\u003d0;n\u003c4;++n){t[n]\u003dr[12+n];for(var i\u003d0;i\u003c3;++i)t[n]+\u003de[i]*r[4*i+n]}}!function(){for(var t\u003d0;t\u003c8;++t)l[t]\u003d[1,1,1,1],c[t]\u003d[1,1,1]}();var p\u003d[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]];function d(t){for(var e\u003d0;e\u003cp.length;++e)if((t\u003da.positive(t,p[e])).length\u003c3)return 0;var r\u003dt[0],n\u003dr[0]/r[3],i\u003dr[1]/r[3],o\u003d0;for(e\u003d1;e+1\u003ct.length;++e){var s\u003dt[e],l\u003dt[e+1],c\u003ds[0]/s[3]-n,u\u003ds[1]/s[3]-i,f\u003dl[0]/l[3]-n,h\u003dl[1]/l[3]-i;o+\u003dMath.abs(c*h-u*f)}return o}var m\u003d[1,1,1],g\u003d[0,0,0],v\u003d{cubeEdges:m,axis:g}},{\"bit-twiddle\":104,\"gl-mat4/multiply\":297,\"robust-orientation\":544,\"split-polygon\":563}],257:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){var o\u003d[],s\u003d[0,0,0],l\u003d[0,0,0],c\u003d[0,0,0],u\u003d[0,0,0];o.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var f\u003d0;f\u003c3;++f){for(var h\u003do.length/3|0,d\u003d0;d\u003cr[f].length;++d){var m\u003d+r[f][d].x;o.push(m,0,1,m,1,1,m,0,-1,m,0,-1,m,1,1,m,1,-1)}var g\u003do.length/3|0;s[f]\u003dh,l[f]\u003dg-h;h\u003do.length/3|0;for(var v\u003d0;v\u003cr[f].length;++v){m\u003d+r[f][v].x;o.push(m,0,1,m,1,1,m,0,-1,m,0,-1,m,1,1,m,1,-1)}g\u003do.length/3|0;c[f]\u003dh,u[f]\u003dg-h}var y\u003dn(t,new Float32Array(o)),x\u003di(t,[{buffer:y,type:t.FLOAT,size:3,stride:0,offset:0}]),b\u003da(t);return b.attributes.position.location\u003d0,new p(t,y,x,b,l,s,u,c)};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-vao\"),a\u003dt(\"./shaders\").line,o\u003d[0,0,0],s\u003d[0,0,0],l\u003d[0,0,0],c\u003d[0,0,0],u\u003d[1,1];function f(t){return t[0]\u003dt[1]\u003dt[2]\u003d0,t}function h(t,e){return t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t}function p(t,e,r,n,i,a,o,s){this.gl\u003dt,this.vertBuffer\u003de,this.vao\u003dr,this.shader\u003dn,this.tickCount\u003di,this.tickOffset\u003da,this.gridCount\u003do,this.gridOffset\u003ds}var d\u003dp.prototype;d.bind\u003dfunction(t,e,r){this.shader.bind(),this.shader.uniforms.model\u003dt,this.shader.uniforms.view\u003de,this.shader.uniforms.projection\u003dr,u[0]\u003dthis.gl.drawingBufferWidth,u[1]\u003dthis.gl.drawingBufferHeight,this.shader.uniforms.screenShape\u003du,this.vao.bind()},d.unbind\u003dfunction(){this.vao.unbind()},d.drawAxisLine\u003dfunction(t,e,r,n,i){var a\u003df(s);this.shader.uniforms.majorAxis\u003ds,a[t]\u003de[1][t]-e[0][t],this.shader.uniforms.minorAxis\u003da;var o,u\u003dh(c,r);u[t]+\u003de[0][t],this.shader.uniforms.offset\u003du,this.shader.uniforms.lineWidth\u003di,this.shader.uniforms.color\u003dn,(o\u003df(l))[(t+2)%3]\u003d1,this.shader.uniforms.screenAxis\u003do,this.vao.draw(this.gl.TRIANGLES,6),(o\u003df(l))[(t+1)%3]\u003d1,this.shader.uniforms.screenAxis\u003do,this.vao.draw(this.gl.TRIANGLES,6)},d.drawAxisTicks\u003dfunction(t,e,r,n,i){if(this.tickCount[t]){var a\u003df(o);a[t]\u003d1,this.shader.uniforms.majorAxis\u003da,this.shader.uniforms.offset\u003de,this.shader.uniforms.minorAxis\u003dr,this.shader.uniforms.color\u003dn,this.shader.uniforms.lineWidth\u003di;var s\u003df(l);s[t]\u003d1,this.shader.uniforms.screenAxis\u003ds,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},d.drawGrid\u003dfunction(t,e,r,n,i,a){if(this.gridCount[t]){var u\u003df(s);u[e]\u003dr[1][e]-r[0][e],this.shader.uniforms.minorAxis\u003du;var p\u003dh(c,n);p[e]+\u003dr[0][e],this.shader.uniforms.offset\u003dp;var d\u003df(o);d[t]\u003d1,this.shader.uniforms.majorAxis\u003dd;var m\u003df(l);m[t]\u003d1,this.shader.uniforms.screenAxis\u003dm,this.shader.uniforms.lineWidth\u003da,this.shader.uniforms.color\u003di,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},d.drawZero\u003dfunction(t,e,r,n,i,a){var o\u003df(s);this.shader.uniforms.majorAxis\u003do,o[t]\u003dr[1][t]-r[0][t],this.shader.uniforms.minorAxis\u003do;var u\u003dh(c,n);u[t]+\u003dr[0][t],this.shader.uniforms.offset\u003du;var p\u003df(l);p[e]\u003d1,this.shader.uniforms.screenAxis\u003dp,this.shader.uniforms.lineWidth\u003da,this.shader.uniforms.color\u003di,this.vao.draw(this.gl.TRIANGLES,6)},d.dispose\u003dfunction(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},{\"./shaders\":258,\"gl-buffer\":263,\"gl-vao\":357}],258:[function(t,e,r){\"use strict\";var n\u003dt(\"glslify\"),i\u003dt(\"gl-shader\"),a\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\\nuniform float lineWidth;\\nuniform vec2 screenShape;\\n\\nvec3 project(vec3 p) {\\n  vec4 pp \u003d projection * view * model * vec4(p, 1.0);\\n  return pp.xyz / max(pp.w, 0.0001);\\n}\\n\\nvoid main() {\\n  vec3 major \u003d position.x * majorAxis;\\n  vec3 minor \u003d position.y * minorAxis;\\n\\n  vec3 vPosition \u003d major + minor + offset;\\n  vec3 pPosition \u003d project(vPosition);\\n  vec3 offset \u003d project(vPosition + screenAxis * position.z);\\n\\n  vec2 screen \u003d normalize((offset - pPosition).xy * screenShape) / screenShape;\\n\\n  gl_Position \u003d vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\\n}\\n\"]),o\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor \u003d color;\\n}\"]);r.line\u003dfunction(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"}])};var s\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 offset, axis, alignDir, alignOpt;\\nuniform float scale, angle, pixelScale;\\nuniform vec2 resolution;\\n\\nvec3 project(vec3 p) {\\n  vec4 pp \u003d projection * view * model * vec4(p, 1.0);\\n  return pp.xyz / max(pp.w, 0.0001);\\n}\\n\\nfloat computeViewAngle(vec3 a, vec3 b) {\\n  vec3 A \u003d project(a);\\n  vec3 B \u003d project(b);\\n\\n  return atan(\\n    (B.y - A.y) * resolution.y,\\n    (B.x - A.x) * resolution.x\\n  );\\n}\\n\\nconst float PI \u003d 3.141592;\\nconst float TWO_PI \u003d 2.0 * PI;\\nconst float HALF_PI \u003d 0.5 * PI;\\nconst float ONE_AND_HALF_PI \u003d 1.5 * PI;\\n\\nint option \u003d int(floor(alignOpt.x + 0.001));\\nfloat hv_ratio \u003d       alignOpt.y;\\nbool enableAlign \u003d    (alignOpt.z !\u003d 0.0);\\n\\nfloat mod_angle(float a) {\\n  return mod(a, PI);\\n}\\n\\nfloat positive_angle(float a) {\\n  return mod_angle((a \u003c 0.0) ?\\n    a + TWO_PI :\\n    a\\n  );\\n}\\n\\nfloat look_upwards(float a) {\\n  float b \u003d positive_angle(a);\\n  return ((b \u003e HALF_PI) \u0026\u0026 (b \u003c\u003d ONE_AND_HALF_PI)) ?\\n    b - PI :\\n    b;\\n}\\n\\nfloat look_horizontal_or_vertical(float a, float ratio) {\\n  // ratio controls the ratio between being horizontal to (vertical + horizontal)\\n  // if ratio is set to 0.5 then it is 50%, 50%.\\n  // when using a higher ratio e.g. 0.75 the result would\\n  // likely be more horizontal than vertical.\\n\\n  float b \u003d positive_angle(a);\\n\\n  return\\n    (b \u003c (      ratio) * HALF_PI) ? 0.0 :\\n    (b \u003c (2.0 - ratio) * HALF_PI) ? -HALF_PI :\\n    (b \u003c (2.0 + ratio) * HALF_PI) ? 0.0 :\\n    (b \u003c (4.0 - ratio) * HALF_PI) ? HALF_PI :\\n                                    0.0;\\n}\\n\\nfloat roundTo(float a, float b) {\\n  return float(b * floor((a + 0.5 * b) / b));\\n}\\n\\nfloat look_round_n_directions(float a, int n) {\\n  float b \u003d positive_angle(a);\\n  float div \u003d TWO_PI / float(n);\\n  float c \u003d roundTo(b, div);\\n  return look_upwards(c);\\n}\\n\\nfloat applyAlignOption(float rawAngle, float delta) {\\n  return\\n    (option \u003e  2) ? look_round_n_directions(rawAngle + delta, option) :       // option 3-n: round to n directions\\n    (option \u003d\u003d 2) ? look_horizontal_or_vertical(rawAngle + delta, hv_ratio) : // horizontal or vertical\\n    (option \u003d\u003d 1) ? rawAngle + delta :       // use free angle, and flip to align with one direction of the axis\\n    (option \u003d\u003d 0) ? look_upwards(rawAngle) : // use free angle, and stay upwards\\n    (option \u003d\u003d-1) ? 0.0 :                    // useful for backward compatibility, all texts remains horizontal\\n                    rawAngle;                // otherwise return back raw input angle\\n}\\n\\nbool isAxisTitle \u003d (axis.x \u003d\u003d 0.0) \u0026\u0026\\n                   (axis.y \u003d\u003d 0.0) \u0026\u0026\\n                   (axis.z \u003d\u003d 0.0);\\n\\nvoid main() {\\n  //Compute world offset\\n  float axisDistance \u003d position.z;\\n  vec3 dataPosition \u003d axisDistance * axis + offset;\\n\\n  float beta \u003d angle; // i.e. user defined attributes for each tick\\n\\n  float axisAngle;\\n  float clipAngle;\\n  float flip;\\n\\n  if (enableAlign) {\\n    axisAngle \u003d (isAxisTitle) ? HALF_PI :\\n                      computeViewAngle(dataPosition, dataPosition + axis);\\n    clipAngle \u003d computeViewAngle(dataPosition, dataPosition + alignDir);\\n\\n    axisAngle +\u003d (sin(axisAngle) \u003c 0.0) ? PI : 0.0;\\n    clipAngle +\u003d (sin(clipAngle) \u003c 0.0) ? PI : 0.0;\\n\\n    flip \u003d (dot(vec2(cos(axisAngle), sin(axisAngle)),\\n                vec2(sin(clipAngle),-cos(clipAngle))) \u003e 0.0) ? 1.0 : 0.0;\\n\\n    beta +\u003d applyAlignOption(clipAngle, flip * PI);\\n  }\\n\\n  //Compute plane offset\\n  vec2 planeCoord \u003d position.xy * pixelScale;\\n\\n  mat2 planeXform \u003d scale * mat2(\\n     cos(beta), sin(beta),\\n    -sin(beta), cos(beta)\\n  );\\n\\n  vec2 viewOffset \u003d 2.0 * planeXform * planeCoord / resolution;\\n\\n  //Compute clip position\\n  vec3 clipPosition \u003d project(dataPosition);\\n\\n  //Apply text offset in clip coordinates\\n  clipPosition +\u003d vec3(viewOffset, 0.0);\\n\\n  //Done\\n  gl_Position \u003d vec4(clipPosition, 1.0);\\n}\"]),l\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor \u003d color;\\n}\"]);r.text\u003dfunction(t){return i(t,s,l,null,[{name:\"position\",type:\"vec3\"}])};var c\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec3 normal;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 enable;\\nuniform vec3 bounds[2];\\n\\nvarying vec3 colorChannel;\\n\\nvoid main() {\\n\\n  vec3 signAxis \u003d sign(bounds[1] - bounds[0]);\\n\\n  vec3 realNormal \u003d signAxis * normal;\\n\\n  if(dot(realNormal, enable) \u003e 0.0) {\\n    vec3 minRange \u003d min(bounds[0], bounds[1]);\\n    vec3 maxRange \u003d max(bounds[0], bounds[1]);\\n    vec3 nPosition \u003d mix(minRange, maxRange, 0.5 * (position + 1.0));\\n    gl_Position \u003d projection * view * model * vec4(nPosition, 1.0);\\n  } else {\\n    gl_Position \u003d vec4(0,0,0,0);\\n  }\\n\\n  colorChannel \u003d abs(realNormal);\\n}\"]),u\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec4 colors[3];\\n\\nvarying vec3 colorChannel;\\n\\nvoid main() {\\n  gl_FragColor \u003d colorChannel.x * colors[0] +\\n                 colorChannel.y * colors[1] +\\n                 colorChannel.z * colors[2];\\n}\"]);r.bg\u003dfunction(t){return i(t,c,u,null,[{name:\"position\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}])}},{\"gl-shader\":335,glslify:261}],259:[function(t,e,r){(function(r){(function(){\"use strict\";e.exports\u003dfunction(t,e,r,a,s,l){var u\u003dn(t),f\u003di(t,[{buffer:u,size:3}]),h\u003do(t);h.attributes.position.location\u003d0;var p\u003dnew c(t,h,u,f);return p.update(e,r,a,s,l),p};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-vao\"),a\u003dt(\"vectorize-text\"),o\u003dt(\"./shaders\").text,s\u003dwindow||r.global||{},l\u003ds.__TEXT_CACHE||{};s.__TEXT_CACHE\u003d{};function c(t,e,r,n){this.gl\u003dt,this.shader\u003de,this.buffer\u003dr,this.vao\u003dn,this.tickOffset\u003dthis.tickCount\u003dthis.labelOffset\u003dthis.labelCount\u003dnull}var u\u003dc.prototype,f\u003d[0,0];u.bind\u003dfunction(t,e,r,n){this.vao.bind(),this.shader.bind();var i\u003dthis.shader.uniforms;i.model\u003dt,i.view\u003de,i.projection\u003dr,i.pixelScale\u003dn,f[0]\u003dthis.gl.drawingBufferWidth,f[1]\u003dthis.gl.drawingBufferHeight,this.shader.uniforms.resolution\u003df},u.unbind\u003dfunction(){this.vao.unbind()},u.update\u003dfunction(t,e,r,n,i){var o\u003d[];function s(t,e,r,n,i,s){var c\u003dl[r];c||(c\u003dl[r]\u003d{});var u\u003dc[e];u||(u\u003dc[e]\u003dfunction(t,e){try{return a(t,e)}catch(e){return console.warn(\u0027error vectorizing text:\"\u0027+t+\u0027\" error:\u0027,e),{cells:[],positions:[]}}}(e,{triangles:!0,font:r,textAlign:\"center\",textBaseline:\"middle\",lineSpacing:i,styletags:s}));for(var f\u003d(n||12)/12,h\u003du.positions,p\u003du.cells,d\u003d0,m\u003dp.length;d\u003cm;++d)for(var g\u003dp[d],v\u003d2;v\u003e\u003d0;--v){var y\u003dh[g[v]];o.push(f*y[0],-f*y[1],t)}}for(var c\u003d[0,0,0],u\u003d[0,0,0],f\u003d[0,0,0],h\u003d[0,0,0],p\u003d{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},d\u003d0;d\u003c3;++d){f[d]\u003do.length/3|0,s(.5*(t[0][d]+t[1][d]),e[d],r[d],12,1.25,p),h[d]\u003d(o.length/3|0)-f[d],c[d]\u003do.length/3|0;for(var m\u003d0;m\u003cn[d].length;++m)n[d][m].text\u0026\u0026s(n[d][m].x,n[d][m].text,n[d][m].font||i,n[d][m].fontSize||12,1.25,p);u[d]\u003d(o.length/3|0)-c[d]}this.buffer.update(o),this.tickOffset\u003dc,this.tickCount\u003du,this.labelOffset\u003df,this.labelCount\u003dh},u.drawTicks\u003dfunction(t,e,r,n,i,a,o,s){this.tickCount[t]\u0026\u0026(this.shader.uniforms.axis\u003da,this.shader.uniforms.color\u003di,this.shader.uniforms.angle\u003dr,this.shader.uniforms.scale\u003de,this.shader.uniforms.offset\u003dn,this.shader.uniforms.alignDir\u003do,this.shader.uniforms.alignOpt\u003ds,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t]))},u.drawLabel\u003dfunction(t,e,r,n,i,a,o,s){this.labelCount[t]\u0026\u0026(this.shader.uniforms.axis\u003da,this.shader.uniforms.color\u003di,this.shader.uniforms.angle\u003dr,this.shader.uniforms.scale\u003de,this.shader.uniforms.offset\u003dn,this.shader.uniforms.alignDir\u003do,this.shader.uniforms.alignOpt\u003ds,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},u.dispose\u003dfunction(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}}).call(this)}).call(this,t(\"_process\"))},{\"./shaders\":258,_process:524,\"gl-buffer\":263,\"gl-vao\":357,\"vectorize-text\":619}],260:[function(t,e,r){\"use strict\";function n(t,e){var r\u003dt+\"\",n\u003dr.indexOf(\".\"),i\u003d0;n\u003e\u003d0\u0026\u0026(i\u003dr.length-n-1);var a\u003dMath.pow(10,i),o\u003dMath.round(t*e*a),s\u003do+\"\";if(s.indexOf(\"e\")\u003e\u003d0)return s;var l\u003do/a,c\u003do%a;o\u003c0?(l\u003d0|-Math.ceil(l),c\u003d0|-c):(l\u003d0|Math.floor(l),c|\u003d0);var u\u003d\"\"+l;if(o\u003c0\u0026\u0026(u\u003d\"-\"+u),i){for(var f\u003d\"\"+c;f.length\u003ci;)f\u003d\"0\"+f;return u+\".\"+f}return u}r.create\u003dfunction(t,e){for(var r\u003d[],i\u003d0;i\u003c3;++i){for(var a\u003d[],o\u003d(t[0][i],t[1][i],0);o*e[i]\u003c\u003dt[1][i];++o)a.push({x:o*e[i],text:n(e[i],o)});for(o\u003d-1;o*e[i]\u003e\u003dt[0][i];--o)a.push({x:o*e[i],text:n(e[i],o)});r.push(a)}return r},r.equal\u003dfunction(t,e){for(var r\u003d0;r\u003c3;++r){if(t[r].length!\u003d\u003de[r].length)return!1;for(var n\u003d0;n\u003ct[r].length;++n){var i\u003dt[r][n],a\u003de[r][n];if(i.x!\u003d\u003da.x||i.text!\u003d\u003da.text||i.font!\u003d\u003da.font||i.fontColor!\u003d\u003da.fontColor||i.fontSize!\u003d\u003da.fontSize||i.dx!\u003d\u003da.dx||i.dy!\u003d\u003da.dy)return!1}}return!0}},{}],261:[function(t,e,r){e.exports\u003dfunction(t){\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003d[t]);for(var e\u003d[].slice.call(arguments,1),r\u003d[],n\u003d0;n\u003ct.length-1;n++)r.push(t[n],e[n]||\"\");return r.push(t[n]),r.join(\"\")}},{}],262:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,l,f){var h\u003de.model||c,p\u003de.view||c,v\u003de.projection||c,y\u003de._ortho||!1,x\u003dt.bounds,b\u003d(f\u003df||a(h,p,v,x,y)).axis;o(u,p,h),o(u,v,u);for(var _\u003dm,w\u003d0;w\u003c3;++w)_[w].lo\u003d1/0,_[w].hi\u003d-1/0,_[w].pixelsPerDataUnit\u003d1/0;var T\u003dn(s(u,u));s(u,u);for(var k\u003d0;k\u003c3;++k){var M\u003d(k+1)%3,A\u003d(k+2)%3,S\u003dg;t:for(w\u003d0;w\u003c2;++w){var E\u003d[];if(b[k]\u003c0!\u003d!!w){S[k]\u003dx[w][k];for(var L\u003d0;L\u003c2;++L){S[M]\u003dx[L^w][M];for(var C\u003d0;C\u003c2;++C)S[A]\u003dx[C^L^w][A],E.push(S.slice())}var P\u003dy?5:4;for(L\u003dP;L\u003d\u003d\u003dP;++L){if(0\u003d\u003d\u003dE.length)continue t;E\u003di.positive(E,T[L])}for(L\u003d0;L\u003cE.length;++L){A\u003dE[L];var I\u003dd(g,u,A,r,l);for(C\u003d0;C\u003c3;++C)_[C].lo\u003dMath.min(_[C].lo,A[C]),_[C].hi\u003dMath.max(_[C].hi,A[C]),C!\u003d\u003dk\u0026\u0026(_[C].pixelsPerDataUnit\u003dMath.min(_[C].pixelsPerDataUnit,Math.abs(I[C])))}}}}return _};var n\u003dt(\"extract-frustum-planes\"),i\u003dt(\"split-polygon\"),a\u003dt(\"./lib/cube.js\"),o\u003dt(\"gl-mat4/multiply\"),s\u003dt(\"gl-mat4/transpose\"),l\u003dt(\"gl-vec4/transformMat4\"),c\u003dnew Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),u\u003dnew Float32Array(16);function f(t,e,r){this.lo\u003dt,this.hi\u003de,this.pixelsPerDataUnit\u003dr}var h\u003d[0,0,0,1],p\u003d[0,0,0,1];function d(t,e,r,n,i){for(var a\u003d0;a\u003c3;++a){for(var o\u003dh,s\u003dp,c\u003d0;c\u003c3;++c)s[c]\u003do[c]\u003dr[c];s[3]\u003do[3]\u003d1,s[a]+\u003d1,l(s,s,e),s[3]\u003c0\u0026\u0026(t[a]\u003d1/0),o[a]-\u003d1,l(o,o,e),o[3]\u003c0\u0026\u0026(t[a]\u003d1/0);var u\u003d(o[0]/o[3]-s[0]/s[3])*n,f\u003d(o[1]/o[3]-s[1]/s[3])*i;t[a]\u003d.25*Math.sqrt(u*u+f*f)}return t}var m\u003d[new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0),new f(1/0,-1/0,1/0)],g\u003d[0,0,0]},{\"./lib/cube.js\":256,\"extract-frustum-planes\":244,\"gl-mat4/multiply\":297,\"gl-mat4/transpose\":308,\"gl-vec4/transformMat4\":428,\"split-polygon\":563}],263:[function(t,e,r){\"use strict\";var n\u003dt(\"typedarray-pool\"),i\u003dt(\"ndarray-ops\"),a\u003dt(\"ndarray\"),o\u003d[\"uint8\",\"uint8_clamped\",\"uint16\",\"uint32\",\"int8\",\"int16\",\"int32\",\"float32\"];function s(t,e,r,n,i){this.gl\u003dt,this.type\u003de,this.handle\u003dr,this.length\u003dn,this.usage\u003di}var l\u003ds.prototype;function c(t,e,r,n,i,a){var o\u003di.length*i.BYTES_PER_ELEMENT;if(a\u003c0)return t.bufferData(e,i,n),o;if(o+a\u003er)throw new Error(\"gl-buffer: If resizing buffer, must not specify offset\");return t.bufferSubData(e,a,i),r}function u(t,e){for(var r\u003dn.malloc(t.length,e),i\u003dt.length,a\u003d0;a\u003ci;++a)r[a]\u003dt[a];return r}l.bind\u003dfunction(){this.gl.bindBuffer(this.type,this.handle)},l.unbind\u003dfunction(){this.gl.bindBuffer(this.type,null)},l.dispose\u003dfunction(){this.gl.deleteBuffer(this.handle)},l.update\u003dfunction(t,e){if(\"number\"!\u003dtypeof e\u0026\u0026(e\u003d-1),this.bind(),\"object\"\u003d\u003dtypeof t\u0026\u0026void 0!\u003d\u003dt.shape){var r\u003dt.dtype;if(o.indexOf(r)\u003c0\u0026\u0026(r\u003d\"float32\"),this.type\u003d\u003d\u003dthis.gl.ELEMENT_ARRAY_BUFFER)r\u003dgl.getExtension(\"OES_element_index_uint\")\u0026\u0026\"uint16\"!\u003d\u003dr?\"uint32\":\"uint16\";if(r\u003d\u003d\u003dt.dtype\u0026\u0026function(t,e){for(var r\u003d1,n\u003de.length-1;n\u003e\u003d0;--n){if(e[n]!\u003d\u003dr)return!1;r*\u003dt[n]}return!0}(t.shape,t.stride))0\u003d\u003d\u003dt.offset\u0026\u0026t.data.length\u003d\u003d\u003dt.shape[0]?this.length\u003dc(this.gl,this.type,this.length,this.usage,t.data,e):this.length\u003dc(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var s\u003dn.malloc(t.size,r),l\u003da(s,t.shape);i.assign(l,t),this.length\u003dc(this.gl,this.type,this.length,this.usage,e\u003c0?s:s.subarray(0,t.size),e),n.free(s)}}else if(Array.isArray(t)){var f;f\u003dthis.type\u003d\u003d\u003dthis.gl.ELEMENT_ARRAY_BUFFER?u(t,\"uint16\"):u(t,\"float32\"),this.length\u003dc(this.gl,this.type,this.length,this.usage,e\u003c0?f:f.subarray(0,t.length),e),n.free(f)}else if(\"object\"\u003d\u003dtypeof t\u0026\u0026\"number\"\u003d\u003dtypeof t.length)this.length\u003dc(this.gl,this.type,this.length,this.usage,t,e);else{if(\"number\"!\u003dtypeof t\u0026\u0026void 0!\u003d\u003dt)throw new Error(\"gl-buffer: Invalid data type\");if(e\u003e\u003d0)throw new Error(\"gl-buffer: Cannot specify offset when resizing buffer\");(t|\u003d0)\u003c\u003d0\u0026\u0026(t\u003d1),this.gl.bufferData(this.type,0|t,this.usage),this.length\u003dt}},e.exports\u003dfunction(t,e,r,n){if(r\u003dr||t.ARRAY_BUFFER,n\u003dn||t.DYNAMIC_DRAW,r!\u003d\u003dt.ARRAY_BUFFER\u0026\u0026r!\u003d\u003dt.ELEMENT_ARRAY_BUFFER)throw new Error(\"gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER\");if(n!\u003d\u003dt.DYNAMIC_DRAW\u0026\u0026n!\u003d\u003dt.STATIC_DRAW\u0026\u0026n!\u003d\u003dt.STREAM_DRAW)throw new Error(\"gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW\");var i\u003dt.createBuffer(),a\u003dnew s(t,r,i,0,n);return a.update(e),a}},{ndarray:479,\"ndarray-ops\":474,\"typedarray-pool\":613}],264:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-vec3\");e.exports\u003dfunction(t,e){var r\u003dt.positions,i\u003dt.vectors,a\u003d{positions:[],vertexIntensity:[],vertexIntensityBounds:t.vertexIntensityBounds,vectors:[],cells:[],coneOffset:t.coneOffset,colormap:t.colormap};if(0\u003d\u003d\u003dt.positions.length)return e\u0026\u0026(e[0]\u003d[0,0,0],e[1]\u003d[0,0,0]),a;for(var o\u003d0,s\u003d1/0,l\u003d-1/0,c\u003d1/0,u\u003d-1/0,f\u003d1/0,h\u003d-1/0,p\u003dnull,d\u003dnull,m\u003d[],g\u003d1/0,v\u003d!1,y\u003d0;y\u003cr.length;y++){var x\u003dr[y];s\u003dMath.min(x[0],s),l\u003dMath.max(x[0],l),c\u003dMath.min(x[1],c),u\u003dMath.max(x[1],u),f\u003dMath.min(x[2],f),h\u003dMath.max(x[2],h);var b\u003di[y];if(n.length(b)\u003eo\u0026\u0026(o\u003dn.length(b)),y){var _\u003d2*n.distance(p,x)/(n.length(d)+n.length(b));_?(g\u003dMath.min(g,_),v\u003d!1):v\u003d!0}v||(p\u003dx,d\u003db),m.push(b)}var w\u003d[s,c,f],T\u003d[l,u,h];e\u0026\u0026(e[0]\u003dw,e[1]\u003dT),0\u003d\u003d\u003do\u0026\u0026(o\u003d1);var k\u003d1/o;isFinite(g)||(g\u003d1),a.vectorScale\u003dg;var M\u003dt.coneSize||.5;t.absoluteConeSize\u0026\u0026(M\u003dt.absoluteConeSize*k),a.coneScale\u003dM;y\u003d0;for(var A\u003d0;y\u003cr.length;y++)for(var S\u003d(x\u003dr[y])[0],E\u003dx[1],L\u003dx[2],C\u003dm[y],P\u003dn.length(C)*k,I\u003d0;I\u003c8;I++){a.positions.push([S,E,L,A++]),a.positions.push([S,E,L,A++]),a.positions.push([S,E,L,A++]),a.positions.push([S,E,L,A++]),a.positions.push([S,E,L,A++]),a.positions.push([S,E,L,A++]),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vectors.push(C),a.vertexIntensity.push(P,P,P),a.vertexIntensity.push(P,P,P);var O\u003da.positions.length;a.cells.push([O-6,O-5,O-4],[O-3,O-2,O-1])}return a};var i\u003dt(\"./lib/shaders\");e.exports.createMesh\u003dt(\"./create_mesh\"),e.exports.createConeMesh\u003dfunction(t,r){return e.exports.createMesh(t,r,{shaders:i,traceType:\"cone\"})}},{\"./create_mesh\":265,\"./lib/shaders\":266,\"gl-vec3\":376}],265:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-shader\"),i\u003dt(\"gl-buffer\"),a\u003dt(\"gl-vao\"),o\u003dt(\"gl-texture2d\"),s\u003dt(\"gl-mat4/multiply\"),l\u003dt(\"gl-mat4/invert\"),c\u003dt(\"ndarray\"),u\u003dt(\"colormap\"),f\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e,r,n,i,a,o,s,l,c,u){this.gl\u003dt,this.pixelRatio\u003d1,this.cells\u003d[],this.positions\u003d[],this.intensity\u003d[],this.texture\u003de,this.dirty\u003d!0,this.triShader\u003dr,this.pickShader\u003dn,this.trianglePositions\u003di,this.triangleVectors\u003da,this.triangleColors\u003ds,this.triangleUVs\u003dl,this.triangleIds\u003do,this.triangleVAO\u003dc,this.triangleCount\u003d0,this.pickId\u003d1,this.bounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition\u003d[1e5,1e5,0],this.ambientLight\u003d.8,this.diffuseLight\u003d.8,this.specularLight\u003d2,this.roughness\u003d.5,this.fresnel\u003d1.5,this.opacity\u003d1,this.traceType\u003du,this.tubeScale\u003d1,this.coneScale\u003d2,this.vectorScale\u003d1,this.coneOffset\u003d.25,this._model\u003df,this._view\u003df,this._projection\u003df,this._resolution\u003d[1,1]}var p\u003dh.prototype;function d(t,e){var r\u003dn(t,e.meshShader.vertex,e.meshShader.fragment,null,e.meshShader.attributes);return r.attributes.position.location\u003d0,r.attributes.color.location\u003d2,r.attributes.uv.location\u003d3,r.attributes.vector.location\u003d4,r}function m(t,e){var r\u003dn(t,e.pickShader.vertex,e.pickShader.fragment,null,e.pickShader.attributes);return r.attributes.position.location\u003d0,r.attributes.id.location\u003d1,r.attributes.vector.location\u003d4,r}p.isOpaque\u003dfunction(){return this.opacity\u003e\u003d1},p.isTransparent\u003dfunction(){return this.opacity\u003c1},p.pickSlots\u003d1,p.setPickBase\u003dfunction(t){this.pickId\u003dt},p.update\u003dfunction(t){t\u003dt||{};var e\u003dthis.gl;this.dirty\u003d!0,\"lightPosition\"in t\u0026\u0026(this.lightPosition\u003dt.lightPosition),\"opacity\"in t\u0026\u0026(this.opacity\u003dt.opacity),\"ambient\"in t\u0026\u0026(this.ambientLight\u003dt.ambient),\"diffuse\"in t\u0026\u0026(this.diffuseLight\u003dt.diffuse),\"specular\"in t\u0026\u0026(this.specularLight\u003dt.specular),\"roughness\"in t\u0026\u0026(this.roughness\u003dt.roughness),\"fresnel\"in t\u0026\u0026(this.fresnel\u003dt.fresnel),void 0!\u003d\u003dt.tubeScale\u0026\u0026(this.tubeScale\u003dt.tubeScale),void 0!\u003d\u003dt.vectorScale\u0026\u0026(this.vectorScale\u003dt.vectorScale),void 0!\u003d\u003dt.coneScale\u0026\u0026(this.coneScale\u003dt.coneScale),void 0!\u003d\u003dt.coneOffset\u0026\u0026(this.coneOffset\u003dt.coneOffset),t.colormap\u0026\u0026(this.texture.shape\u003d[256,256],this.texture.minFilter\u003de.LINEAR_MIPMAP_LINEAR,this.texture.magFilter\u003de.LINEAR,this.texture.setPixels(function(t){for(var e\u003du({colormap:t,nshades:256,format:\"rgba\"}),r\u003dnew Uint8Array(1024),n\u003d0;n\u003c256;++n){for(var i\u003de[n],a\u003d0;a\u003c3;++a)r[4*n+a]\u003di[a];r[4*n+3]\u003d255*i[3]}return c(r,[256,256,4],[4,0,1])}(t.colormap)),this.texture.generateMipmap());var r\u003dt.cells,n\u003dt.positions,i\u003dt.vectors;if(n\u0026\u0026r\u0026\u0026i){var a\u003d[],o\u003d[],s\u003d[],l\u003d[],f\u003d[];this.cells\u003dr,this.positions\u003dn,this.vectors\u003di;var h\u003dt.meshColor||[1,1,1,1],p\u003dt.vertexIntensity,d\u003d1/0,m\u003d-1/0;if(p)if(t.vertexIntensityBounds)d\u003d+t.vertexIntensityBounds[0],m\u003d+t.vertexIntensityBounds[1];else for(var g\u003d0;g\u003cp.length;++g){var v\u003dp[g];d\u003dMath.min(d,v),m\u003dMath.max(m,v)}else for(g\u003d0;g\u003cn.length;++g){v\u003dn[g][2];d\u003dMath.min(d,v),m\u003dMath.max(m,v)}this.intensity\u003dp||function(t){for(var e\u003dt.length,r\u003dnew Array(e),n\u003d0;n\u003ce;++n)r[n]\u003dt[n][2];return r}(n),this.bounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(g\u003d0;g\u003cn.length;++g)for(var y\u003dn[g],x\u003d0;x\u003c3;++x)!isNaN(y[x])\u0026\u0026isFinite(y[x])\u0026\u0026(this.bounds[0][x]\u003dMath.min(this.bounds[0][x],y[x]),this.bounds[1][x]\u003dMath.max(this.bounds[1][x],y[x]));var b\u003d0;t:for(g\u003d0;g\u003cr.length;++g){var _\u003dr[g];switch(_.length){case 3:for(x\u003d0;x\u003c3;++x){y\u003dn[T\u003d_[x]];for(var w\u003d0;w\u003c3;++w)if(isNaN(y[w])||!isFinite(y[w]))continue t}for(x\u003d0;x\u003c3;++x){var T;y\u003dn[T\u003d_[2-x]];a.push(y[0],y[1],y[2],y[3]);var k\u003di[T];o.push(k[0],k[1],k[2],k[3]||0);var M,A\u003dh;3\u003d\u003d\u003dA.length?s.push(A[0],A[1],A[2],1):s.push(A[0],A[1],A[2],A[3]),M\u003dp?[(p[T]-d)/(m-d),0]:[(y[2]-d)/(m-d),0],l.push(M[0],M[1]),f.push(g)}b+\u003d1}}this.triangleCount\u003db,this.trianglePositions.update(a),this.triangleVectors.update(o),this.triangleColors.update(s),this.triangleUVs.update(l),this.triangleIds.update(new Uint32Array(f))}},p.drawTransparent\u003dp.draw\u003dfunction(t){t\u003dt||{};for(var e\u003dthis.gl,r\u003dt.model||f,n\u003dt.view||f,i\u003dt.projection||f,a\u003d[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o\u003d0;o\u003c3;++o)a[0][o]\u003dMath.max(a[0][o],this.clipBounds[0][o]),a[1][o]\u003dMath.min(a[1][o],this.clipBounds[1][o]);var c\u003d{model:r,view:n,projection:i,inverseModel:f.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,texture:0};c.inverseModel\u003dl(c.inverseModel,c.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u\u003dnew Array(16);s(u,c.view,c.model),s(u,c.projection,u),l(u,u);for(o\u003d0;o\u003c3;++o)c.eyePosition[o]\u003du[12+o]/u[15];var h\u003du[15];for(o\u003d0;o\u003c3;++o)h+\u003dthis.lightPosition[o]*u[4*o+3];for(o\u003d0;o\u003c3;++o){for(var p\u003du[12+o],d\u003d0;d\u003c3;++d)p+\u003du[4*d+o]*this.lightPosition[d];c.lightPosition[o]\u003dp/h}if(this.triangleCount\u003e0){var m\u003dthis.triShader;m.bind(),m.uniforms\u003dc,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}},p.drawPick\u003dfunction(t){t\u003dt||{};for(var e\u003dthis.gl,r\u003dt.model||f,n\u003dt.view||f,i\u003dt.projection||f,a\u003d[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o\u003d0;o\u003c3;++o)a[0][o]\u003dMath.max(a[0][o],this.clipBounds[0][o]),a[1][o]\u003dMath.min(a[1][o],this.clipBounds[1][o]);this._model\u003d[].slice.call(r),this._view\u003d[].slice.call(n),this._projection\u003d[].slice.call(i),this._resolution\u003d[e.drawingBufferWidth,e.drawingBufferHeight];var s\u003d{model:r,view:n,projection:i,clipBounds:a,tubeScale:this.tubeScale,vectorScale:this.vectorScale,coneScale:this.coneScale,coneOffset:this.coneOffset,pickId:this.pickId/255},l\u003dthis.pickShader;l.bind(),l.uniforms\u003ds,this.triangleCount\u003e0\u0026\u0026(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind())},p.pick\u003dfunction(t){if(!t)return null;if(t.id!\u003d\u003dthis.pickId)return null;var e\u003dt.value[0]+256*t.value[1]+65536*t.value[2],r\u003dthis.cells[e],n\u003dthis.positions[r[1]].slice(0,3),i\u003d{position:n,dataCoordinate:n,index:Math.floor(r[1]/48)};return\"cone\"\u003d\u003d\u003dthis.traceType?i.index\u003dMath.floor(r[1]/48):\"streamtube\"\u003d\u003d\u003dthis.traceType\u0026\u0026(i.intensity\u003dthis.intensity[r[1]],i.velocity\u003dthis.vectors[r[1]].slice(0,3),i.divergence\u003dthis.vectors[r[1]][3],i.index\u003de),i},p.dispose\u003dfunction(){this.texture.dispose(),this.triShader.dispose(),this.pickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleVectors.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleIds.dispose()},e.exports\u003dfunction(t,e,r){var n\u003dr.shaders;1\u003d\u003d\u003darguments.length\u0026\u0026(t\u003d(e\u003dt).gl);var s\u003dd(t,n),l\u003dm(t,n),u\u003do(t,c(new Uint8Array([255,255,255,255]),[1,1,4]));u.generateMipmap(),u.minFilter\u003dt.LINEAR_MIPMAP_LINEAR,u.magFilter\u003dt.LINEAR;var f\u003di(t),p\u003di(t),g\u003di(t),v\u003di(t),y\u003di(t),x\u003da(t,[{buffer:f,type:t.FLOAT,size:4},{buffer:y,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:g,type:t.FLOAT,size:4},{buffer:v,type:t.FLOAT,size:2},{buffer:p,type:t.FLOAT,size:4}]),b\u003dnew h(t,u,s,l,f,p,y,g,v,x,r.traceType||\"cone\");return b.update(e),b}},{colormap:137,\"gl-buffer\":263,\"gl-mat4/invert\":295,\"gl-mat4/multiply\":297,\"gl-shader\":335,\"gl-texture2d\":352,\"gl-vao\":357,ndarray:479}],266:[function(t,e,r){var n\u003dt(\"glslify\"),i\u003dn([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz \u003d 0, a point that lies on the plane that has v as a normal and that isn\u0027t (0,0,0).\\n  // From the above if-statement we have ||a|| \u003e 0  U  ||b|| \u003e 0.\\n  // Assign z \u003d 0, x \u003d -b, y \u003d a:\\n  // a*-b + b*a + c*0 \u003d -ba + ba + 0 \u003d 0\\n  if (v.x*v.x \u003e v.z*v.z || v.y*v.y \u003e v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the cone vertex and normal at the given index.\\n//\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\n// pointing in the direction of the vector attribute.\\n//\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\n// These vertices are used to make up the triangles of the cone by the following:\\n//   segment + 0 top vertex\\n//   segment + 1 perimeter vertex a+1\\n//   segment + 2 perimeter vertex a\\n//   segment + 3 center base vertex\\n//   segment + 4 perimeter vertex a\\n//   segment + 5 perimeter vertex a+1\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\n// To go from index to segment, floor(index / 6)\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\n// To go from index to segment index, index - (segment*6)\\n//\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\n\\n  const float segmentCount \u003d 8.0;\\n\\n  float index \u003d rawIndex - floor(rawIndex /\\n    (segmentCount * 6.0)) *\\n    (segmentCount * 6.0);\\n\\n  float segment \u003d floor(0.001 + index/6.0);\\n  float segmentIndex \u003d index - (segment*6.0);\\n\\n  normal \u003d -normalize(d);\\n\\n  if (segmentIndex \u003e 2.99 \u0026\u0026 segmentIndex \u003c 3.01) {\\n    return mix(vec3(0.0), -d, coneOffset);\\n  }\\n\\n  float nextAngle \u003d (\\n    (segmentIndex \u003e 0.99 \u0026\u0026  segmentIndex \u003c 1.01) ||\\n    (segmentIndex \u003e 4.99 \u0026\u0026  segmentIndex \u003c 5.01)\\n  ) ? 1.0 : 0.0;\\n  float angle \u003d 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\n\\n  vec3 v1 \u003d mix(d, vec3(0.0), coneOffset);\\n  vec3 v2 \u003d v1 - d;\\n\\n  vec3 u \u003d getOrthogonalVector(d);\\n  vec3 v \u003d normalize(cross(u, d));\\n\\n  vec3 x \u003d u * cos(angle) * length(d)*0.25;\\n  vec3 y \u003d v * sin(angle) * length(d)*0.25;\\n  vec3 v3 \u003d v2 + x + y;\\n  if (segmentIndex \u003c 3.0) {\\n    vec3 tx \u003d u * sin(angle);\\n    vec3 ty \u003d v * -cos(angle);\\n    vec3 tangent \u003d tx + ty;\\n    normal \u003d normalize(cross(v3 - v1, tangent));\\n  }\\n\\n  if (segmentIndex \u003d\u003d 0.0) {\\n    return mix(d, vec3(0.0), coneOffset);\\n  }\\n  return v3;\\n}\\n\\nattribute vec3 vector;\\nattribute vec4 color, position;\\nattribute vec2 uv;\\n\\nuniform float vectorScale, coneScale, coneOffset;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 eyePosition, lightPosition;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  // Scale the vector magnitude to stay constant with\\n  // model \u0026 view changes.\\n  vec3 normal;\\n  vec3 XYZ \u003d getConePosition(mat3(model) * ((vectorScale * coneScale) * vector), position.w, coneOffset, normal);\\n  vec4 conePosition \u003d model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate \u003d view * conePosition;\\n  cameraCoordinate.xyz /\u003d cameraCoordinate.w;\\n  f_lightDirection \u003d lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   \u003d eyePosition - cameraCoordinate.xyz;\\n  f_normal \u003d normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  // vec4 m_position  \u003d model * vec4(conePosition, 1.0);\\n  vec4 t_position  \u003d view * conePosition;\\n  gl_Position      \u003d projection * t_position;\\n\\n  f_color          \u003d color;\\n  f_data           \u003d conePosition.xyz;\\n  f_position       \u003d position.xyz;\\n  f_uv             \u003d uv;\\n}\\n\"]),a\u003dn([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH \u003d max(x, 0.0001);\\n  float cos2Alpha \u003d NdotH * NdotH;\\n  float tan2Alpha \u003d (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 \u003d roughness * roughness;\\n  float denom \u003d 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN \u003d max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN \u003d max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H \u003d normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH \u003d max(dot(surfaceNormal, H), 0.0);\\n  float VdotH \u003d max(dot(viewDirection, H), 0.000001);\\n  float LdotH \u003d max(dot(lightDirection, H), 0.000001);\\n  float G1 \u003d (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 \u003d (2.0 * NdotH * LdotN) / LdotH;\\n  float G \u003d min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D \u003d beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F \u003d pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n  vec3 N \u003d normalize(f_normal);\\n  vec3 L \u003d normalize(f_lightDirection);\\n  vec3 V \u003d normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N \u003d -N;\\n  }\\n\\n  float specular \u003d min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  float diffuse  \u003d min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor \u003d f_color * texture2D(texture, f_uv);\\n  vec4 litColor \u003d surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor \u003d litColor * opacity;\\n}\\n\"]),o\u003dn([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz \u003d 0, a point that lies on the plane that has v as a normal and that isn\u0027t (0,0,0).\\n  // From the above if-statement we have ||a|| \u003e 0  U  ||b|| \u003e 0.\\n  // Assign z \u003d 0, x \u003d -b, y \u003d a:\\n  // a*-b + b*a + c*0 \u003d -ba + ba + 0 \u003d 0\\n  if (v.x*v.x \u003e v.z*v.z || v.y*v.y \u003e v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the cone vertex and normal at the given index.\\n//\\n// The returned vertex is for a cone with its top at origin and height of 1.0,\\n// pointing in the direction of the vector attribute.\\n//\\n// Each cone is made up of a top vertex, a center base vertex and base perimeter vertices.\\n// These vertices are used to make up the triangles of the cone by the following:\\n//   segment + 0 top vertex\\n//   segment + 1 perimeter vertex a+1\\n//   segment + 2 perimeter vertex a\\n//   segment + 3 center base vertex\\n//   segment + 4 perimeter vertex a\\n//   segment + 5 perimeter vertex a+1\\n// Where segment is the number of the radial segment * 6 and a is the angle at that radial segment.\\n// To go from index to segment, floor(index / 6)\\n// To go from segment to angle, 2*pi * (segment/segmentCount)\\n// To go from index to segment index, index - (segment*6)\\n//\\nvec3 getConePosition(vec3 d, float rawIndex, float coneOffset, out vec3 normal) {\\n\\n  const float segmentCount \u003d 8.0;\\n\\n  float index \u003d rawIndex - floor(rawIndex /\\n    (segmentCount * 6.0)) *\\n    (segmentCount * 6.0);\\n\\n  float segment \u003d floor(0.001 + index/6.0);\\n  float segmentIndex \u003d index - (segment*6.0);\\n\\n  normal \u003d -normalize(d);\\n\\n  if (segmentIndex \u003e 2.99 \u0026\u0026 segmentIndex \u003c 3.01) {\\n    return mix(vec3(0.0), -d, coneOffset);\\n  }\\n\\n  float nextAngle \u003d (\\n    (segmentIndex \u003e 0.99 \u0026\u0026  segmentIndex \u003c 1.01) ||\\n    (segmentIndex \u003e 4.99 \u0026\u0026  segmentIndex \u003c 5.01)\\n  ) ? 1.0 : 0.0;\\n  float angle \u003d 2.0 * 3.14159 * ((segment + nextAngle) / segmentCount);\\n\\n  vec3 v1 \u003d mix(d, vec3(0.0), coneOffset);\\n  vec3 v2 \u003d v1 - d;\\n\\n  vec3 u \u003d getOrthogonalVector(d);\\n  vec3 v \u003d normalize(cross(u, d));\\n\\n  vec3 x \u003d u * cos(angle) * length(d)*0.25;\\n  vec3 y \u003d v * sin(angle) * length(d)*0.25;\\n  vec3 v3 \u003d v2 + x + y;\\n  if (segmentIndex \u003c 3.0) {\\n    vec3 tx \u003d u * sin(angle);\\n    vec3 ty \u003d v * -cos(angle);\\n    vec3 tangent \u003d tx + ty;\\n    normal \u003d normalize(cross(v3 - v1, tangent));\\n  }\\n\\n  if (segmentIndex \u003d\u003d 0.0) {\\n    return mix(d, vec3(0.0), coneOffset);\\n  }\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform float vectorScale, coneScale, coneOffset;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  vec3 normal;\\n  vec3 XYZ \u003d getConePosition(mat3(model) * ((vectorScale * coneScale) * vector.xyz), position.w, coneOffset, normal);\\n  vec4 conePosition \u003d model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n  gl_Position \u003d projection * view * conePosition;\\n  f_id        \u003d id;\\n  f_position  \u003d position.xyz;\\n}\\n\"]),s\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor \u003d vec4(pickId, f_id.xyz);\\n}\"]);r.meshShader\u003d{vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec4\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"vector\",type:\"vec3\"}]},r.pickShader\u003d{vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec4\"},{name:\"id\",type:\"vec4\"},{name:\"vector\",type:\"vec3\"}]}},{glslify:438}],267:[function(t,e,r){e.exports\u003d{0:\"NONE\",1:\"ONE\",2:\"LINE_LOOP\",3:\"LINE_STRIP\",4:\"TRIANGLES\",5:\"TRIANGLE_STRIP\",6:\"TRIANGLE_FAN\",256:\"DEPTH_BUFFER_BIT\",512:\"NEVER\",513:\"LESS\",514:\"EQUAL\",515:\"LEQUAL\",516:\"GREATER\",517:\"NOTEQUAL\",518:\"GEQUAL\",519:\"ALWAYS\",768:\"SRC_COLOR\",769:\"ONE_MINUS_SRC_COLOR\",770:\"SRC_ALPHA\",771:\"ONE_MINUS_SRC_ALPHA\",772:\"DST_ALPHA\",773:\"ONE_MINUS_DST_ALPHA\",774:\"DST_COLOR\",775:\"ONE_MINUS_DST_COLOR\",776:\"SRC_ALPHA_SATURATE\",1024:\"STENCIL_BUFFER_BIT\",1028:\"FRONT\",1029:\"BACK\",1032:\"FRONT_AND_BACK\",1280:\"INVALID_ENUM\",1281:\"INVALID_VALUE\",1282:\"INVALID_OPERATION\",1285:\"OUT_OF_MEMORY\",1286:\"INVALID_FRAMEBUFFER_OPERATION\",2304:\"CW\",2305:\"CCW\",2849:\"LINE_WIDTH\",2884:\"CULL_FACE\",2885:\"CULL_FACE_MODE\",2886:\"FRONT_FACE\",2928:\"DEPTH_RANGE\",2929:\"DEPTH_TEST\",2930:\"DEPTH_WRITEMASK\",2931:\"DEPTH_CLEAR_VALUE\",2932:\"DEPTH_FUNC\",2960:\"STENCIL_TEST\",2961:\"STENCIL_CLEAR_VALUE\",2962:\"STENCIL_FUNC\",2963:\"STENCIL_VALUE_MASK\",2964:\"STENCIL_FAIL\",2965:\"STENCIL_PASS_DEPTH_FAIL\",2966:\"STENCIL_PASS_DEPTH_PASS\",2967:\"STENCIL_REF\",2968:\"STENCIL_WRITEMASK\",2978:\"VIEWPORT\",3024:\"DITHER\",3042:\"BLEND\",3088:\"SCISSOR_BOX\",3089:\"SCISSOR_TEST\",3106:\"COLOR_CLEAR_VALUE\",3107:\"COLOR_WRITEMASK\",3317:\"UNPACK_ALIGNMENT\",3333:\"PACK_ALIGNMENT\",3379:\"MAX_TEXTURE_SIZE\",3386:\"MAX_VIEWPORT_DIMS\",3408:\"SUBPIXEL_BITS\",3410:\"RED_BITS\",3411:\"GREEN_BITS\",3412:\"BLUE_BITS\",3413:\"ALPHA_BITS\",3414:\"DEPTH_BITS\",3415:\"STENCIL_BITS\",3553:\"TEXTURE_2D\",4352:\"DONT_CARE\",4353:\"FASTEST\",4354:\"NICEST\",5120:\"BYTE\",5121:\"UNSIGNED_BYTE\",5122:\"SHORT\",5123:\"UNSIGNED_SHORT\",5124:\"INT\",5125:\"UNSIGNED_INT\",5126:\"FLOAT\",5386:\"INVERT\",5890:\"TEXTURE\",6401:\"STENCIL_INDEX\",6402:\"DEPTH_COMPONENT\",6406:\"ALPHA\",6407:\"RGB\",6408:\"RGBA\",6409:\"LUMINANCE\",6410:\"LUMINANCE_ALPHA\",7680:\"KEEP\",7681:\"REPLACE\",7682:\"INCR\",7683:\"DECR\",7936:\"VENDOR\",7937:\"RENDERER\",7938:\"VERSION\",9728:\"NEAREST\",9729:\"LINEAR\",9984:\"NEAREST_MIPMAP_NEAREST\",9985:\"LINEAR_MIPMAP_NEAREST\",9986:\"NEAREST_MIPMAP_LINEAR\",9987:\"LINEAR_MIPMAP_LINEAR\",10240:\"TEXTURE_MAG_FILTER\",10241:\"TEXTURE_MIN_FILTER\",10242:\"TEXTURE_WRAP_S\",10243:\"TEXTURE_WRAP_T\",10497:\"REPEAT\",10752:\"POLYGON_OFFSET_UNITS\",16384:\"COLOR_BUFFER_BIT\",32769:\"CONSTANT_COLOR\",32770:\"ONE_MINUS_CONSTANT_COLOR\",32771:\"CONSTANT_ALPHA\",32772:\"ONE_MINUS_CONSTANT_ALPHA\",32773:\"BLEND_COLOR\",32774:\"FUNC_ADD\",32777:\"BLEND_EQUATION_RGB\",32778:\"FUNC_SUBTRACT\",32779:\"FUNC_REVERSE_SUBTRACT\",32819:\"UNSIGNED_SHORT_4_4_4_4\",32820:\"UNSIGNED_SHORT_5_5_5_1\",32823:\"POLYGON_OFFSET_FILL\",32824:\"POLYGON_OFFSET_FACTOR\",32854:\"RGBA4\",32855:\"RGB5_A1\",32873:\"TEXTURE_BINDING_2D\",32926:\"SAMPLE_ALPHA_TO_COVERAGE\",32928:\"SAMPLE_COVERAGE\",32936:\"SAMPLE_BUFFERS\",32937:\"SAMPLES\",32938:\"SAMPLE_COVERAGE_VALUE\",32939:\"SAMPLE_COVERAGE_INVERT\",32968:\"BLEND_DST_RGB\",32969:\"BLEND_SRC_RGB\",32970:\"BLEND_DST_ALPHA\",32971:\"BLEND_SRC_ALPHA\",33071:\"CLAMP_TO_EDGE\",33170:\"GENERATE_MIPMAP_HINT\",33189:\"DEPTH_COMPONENT16\",33306:\"DEPTH_STENCIL_ATTACHMENT\",33635:\"UNSIGNED_SHORT_5_6_5\",33648:\"MIRRORED_REPEAT\",33901:\"ALIASED_POINT_SIZE_RANGE\",33902:\"ALIASED_LINE_WIDTH_RANGE\",33984:\"TEXTURE0\",33985:\"TEXTURE1\",33986:\"TEXTURE2\",33987:\"TEXTURE3\",33988:\"TEXTURE4\",33989:\"TEXTURE5\",33990:\"TEXTURE6\",33991:\"TEXTURE7\",33992:\"TEXTURE8\",33993:\"TEXTURE9\",33994:\"TEXTURE10\",33995:\"TEXTURE11\",33996:\"TEXTURE12\",33997:\"TEXTURE13\",33998:\"TEXTURE14\",33999:\"TEXTURE15\",34e3:\"TEXTURE16\",34001:\"TEXTURE17\",34002:\"TEXTURE18\",34003:\"TEXTURE19\",34004:\"TEXTURE20\",34005:\"TEXTURE21\",34006:\"TEXTURE22\",34007:\"TEXTURE23\",34008:\"TEXTURE24\",34009:\"TEXTURE25\",34010:\"TEXTURE26\",34011:\"TEXTURE27\",34012:\"TEXTURE28\",34013:\"TEXTURE29\",34014:\"TEXTURE30\",34015:\"TEXTURE31\",34016:\"ACTIVE_TEXTURE\",34024:\"MAX_RENDERBUFFER_SIZE\",34041:\"DEPTH_STENCIL\",34055:\"INCR_WRAP\",34056:\"DECR_WRAP\",34067:\"TEXTURE_CUBE_MAP\",34068:\"TEXTURE_BINDING_CUBE_MAP\",34069:\"TEXTURE_CUBE_MAP_POSITIVE_X\",34070:\"TEXTURE_CUBE_MAP_NEGATIVE_X\",34071:\"TEXTURE_CUBE_MAP_POSITIVE_Y\",34072:\"TEXTURE_CUBE_MAP_NEGATIVE_Y\",34073:\"TEXTURE_CUBE_MAP_POSITIVE_Z\",34074:\"TEXTURE_CUBE_MAP_NEGATIVE_Z\",34076:\"MAX_CUBE_MAP_TEXTURE_SIZE\",34338:\"VERTEX_ATTRIB_ARRAY_ENABLED\",34339:\"VERTEX_ATTRIB_ARRAY_SIZE\",34340:\"VERTEX_ATTRIB_ARRAY_STRIDE\",34341:\"VERTEX_ATTRIB_ARRAY_TYPE\",34342:\"CURRENT_VERTEX_ATTRIB\",34373:\"VERTEX_ATTRIB_ARRAY_POINTER\",34466:\"NUM_COMPRESSED_TEXTURE_FORMATS\",34467:\"COMPRESSED_TEXTURE_FORMATS\",34660:\"BUFFER_SIZE\",34661:\"BUFFER_USAGE\",34816:\"STENCIL_BACK_FUNC\",34817:\"STENCIL_BACK_FAIL\",34818:\"STENCIL_BACK_PASS_DEPTH_FAIL\",34819:\"STENCIL_BACK_PASS_DEPTH_PASS\",34877:\"BLEND_EQUATION_ALPHA\",34921:\"MAX_VERTEX_ATTRIBS\",34922:\"VERTEX_ATTRIB_ARRAY_NORMALIZED\",34930:\"MAX_TEXTURE_IMAGE_UNITS\",34962:\"ARRAY_BUFFER\",34963:\"ELEMENT_ARRAY_BUFFER\",34964:\"ARRAY_BUFFER_BINDING\",34965:\"ELEMENT_ARRAY_BUFFER_BINDING\",34975:\"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING\",35040:\"STREAM_DRAW\",35044:\"STATIC_DRAW\",35048:\"DYNAMIC_DRAW\",35632:\"FRAGMENT_SHADER\",35633:\"VERTEX_SHADER\",35660:\"MAX_VERTEX_TEXTURE_IMAGE_UNITS\",35661:\"MAX_COMBINED_TEXTURE_IMAGE_UNITS\",35663:\"SHADER_TYPE\",35664:\"FLOAT_VEC2\",35665:\"FLOAT_VEC3\",35666:\"FLOAT_VEC4\",35667:\"INT_VEC2\",35668:\"INT_VEC3\",35669:\"INT_VEC4\",35670:\"BOOL\",35671:\"BOOL_VEC2\",35672:\"BOOL_VEC3\",35673:\"BOOL_VEC4\",35674:\"FLOAT_MAT2\",35675:\"FLOAT_MAT3\",35676:\"FLOAT_MAT4\",35678:\"SAMPLER_2D\",35680:\"SAMPLER_CUBE\",35712:\"DELETE_STATUS\",35713:\"COMPILE_STATUS\",35714:\"LINK_STATUS\",35715:\"VALIDATE_STATUS\",35716:\"INFO_LOG_LENGTH\",35717:\"ATTACHED_SHADERS\",35718:\"ACTIVE_UNIFORMS\",35719:\"ACTIVE_UNIFORM_MAX_LENGTH\",35720:\"SHADER_SOURCE_LENGTH\",35721:\"ACTIVE_ATTRIBUTES\",35722:\"ACTIVE_ATTRIBUTE_MAX_LENGTH\",35724:\"SHADING_LANGUAGE_VERSION\",35725:\"CURRENT_PROGRAM\",36003:\"STENCIL_BACK_REF\",36004:\"STENCIL_BACK_VALUE_MASK\",36005:\"STENCIL_BACK_WRITEMASK\",36006:\"FRAMEBUFFER_BINDING\",36007:\"RENDERBUFFER_BINDING\",36048:\"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE\",36049:\"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME\",36050:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL\",36051:\"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE\",36053:\"FRAMEBUFFER_COMPLETE\",36054:\"FRAMEBUFFER_INCOMPLETE_ATTACHMENT\",36055:\"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT\",36057:\"FRAMEBUFFER_INCOMPLETE_DIMENSIONS\",36061:\"FRAMEBUFFER_UNSUPPORTED\",36064:\"COLOR_ATTACHMENT0\",36096:\"DEPTH_ATTACHMENT\",36128:\"STENCIL_ATTACHMENT\",36160:\"FRAMEBUFFER\",36161:\"RENDERBUFFER\",36162:\"RENDERBUFFER_WIDTH\",36163:\"RENDERBUFFER_HEIGHT\",36164:\"RENDERBUFFER_INTERNAL_FORMAT\",36168:\"STENCIL_INDEX8\",36176:\"RENDERBUFFER_RED_SIZE\",36177:\"RENDERBUFFER_GREEN_SIZE\",36178:\"RENDERBUFFER_BLUE_SIZE\",36179:\"RENDERBUFFER_ALPHA_SIZE\",36180:\"RENDERBUFFER_DEPTH_SIZE\",36181:\"RENDERBUFFER_STENCIL_SIZE\",36194:\"RGB565\",36336:\"LOW_FLOAT\",36337:\"MEDIUM_FLOAT\",36338:\"HIGH_FLOAT\",36339:\"LOW_INT\",36340:\"MEDIUM_INT\",36341:\"HIGH_INT\",36346:\"SHADER_COMPILER\",36347:\"MAX_VERTEX_UNIFORM_VECTORS\",36348:\"MAX_VARYING_VECTORS\",36349:\"MAX_FRAGMENT_UNIFORM_VECTORS\",37440:\"UNPACK_FLIP_Y_WEBGL\",37441:\"UNPACK_PREMULTIPLY_ALPHA_WEBGL\",37442:\"CONTEXT_LOST_WEBGL\",37443:\"UNPACK_COLORSPACE_CONVERSION_WEBGL\",37444:\"BROWSER_DEFAULT_WEBGL\"}},{}],268:[function(t,e,r){var n\u003dt(\"./1.0/numbers\");e.exports\u003dfunction(t){return n[t]}},{\"./1.0/numbers\":267}],269:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dn(e),o\u003di(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),l\u003da(e);l.attributes.position.location\u003d0,l.attributes.color.location\u003d1,l.attributes.offset.location\u003d2;var c\u003dnew s(e,r,o,l);return c.update(t),c};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-vao\"),a\u003dt(\"./shaders/index\"),o\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl\u003dt,this.shader\u003dn,this.buffer\u003de,this.vao\u003dr,this.pixelRatio\u003d1,this.bounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth\u003d[1,1,1],this.capSize\u003d[10,10,10],this.lineCount\u003d[0,0,0],this.lineOffset\u003d[0,0,0],this.opacity\u003d1,this.hasAlpha\u003d!1}var l\u003ds.prototype;function c(t,e){for(var r\u003d0;r\u003c3;++r)t[0][r]\u003dMath.min(t[0][r],e[r]),t[1][r]\u003dMath.max(t[1][r],e[r])}l.isOpaque\u003dfunction(){return!this.hasAlpha},l.isTransparent\u003dfunction(){return this.hasAlpha},l.drawTransparent\u003dl.draw\u003dfunction(t){var e\u003dthis.gl,r\u003dthis.shader.uniforms;this.shader.bind();var n\u003dr.view\u003dt.view||o,i\u003dr.projection\u003dt.projection||o;r.model\u003dt.model||o,r.clipBounds\u003dthis.clipBounds,r.opacity\u003dthis.opacity;var a\u003dn[12],s\u003dn[13],l\u003dn[14],c\u003dn[15],u\u003d(t._ortho||!1?2:1)*this.pixelRatio*(i[3]*a+i[7]*s+i[11]*l+i[15]*c)/e.drawingBufferHeight;this.vao.bind();for(var f\u003d0;f\u003c3;++f)e.lineWidth(this.lineWidth[f]*this.pixelRatio),r.capSize\u003dthis.capSize[f]*u,this.lineCount[f]\u0026\u0026e.drawArrays(e.LINES,this.lineOffset[f],this.lineCount[f]);this.vao.unbind()};var u\u003dfunction(){for(var t\u003dnew Array(3),e\u003d0;e\u003c3;++e){for(var r\u003d[],n\u003d1;n\u003c\u003d2;++n)for(var i\u003d-1;i\u003c\u003d1;i+\u003d2){var a\u003d[0,0,0];a[(n+e)%3]\u003di,r.push(a)}t[e]\u003dr}return t}();function f(t,e,r,n){for(var i\u003du[n],a\u003d0;a\u003ci.length;++a){var o\u003di[a];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return i.length}l.update\u003dfunction(t){\"lineWidth\"in(t\u003dt||{})\u0026\u0026(this.lineWidth\u003dt.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth\u003d[this.lineWidth,this.lineWidth,this.lineWidth])),\"capSize\"in t\u0026\u0026(this.capSize\u003dt.capSize,Array.isArray(this.capSize)||(this.capSize\u003d[this.capSize,this.capSize,this.capSize])),this.hasAlpha\u003d!1,\"opacity\"in t\u0026\u0026(this.opacity\u003d+t.opacity,this.opacity\u003c1\u0026\u0026(this.hasAlpha\u003d!0));var e\u003dt.color||[[0,0,0],[0,0,0],[0,0,0]],r\u003dt.position,n\u003dt.error;if(Array.isArray(e[0])||(e\u003d[e,e,e]),r\u0026\u0026n){var i\u003d[],a\u003dr.length,o\u003d0;this.bounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount\u003d[0,0,0];for(var s\u003d0;s\u003c3;++s){this.lineOffset[s]\u003do;t:for(var l\u003d0;l\u003ca;++l){for(var u\u003dr[l],h\u003d0;h\u003c3;++h)if(isNaN(u[h])||!isFinite(u[h]))continue t;var p\u003dn[l],d\u003de[s];if(Array.isArray(d[0])\u0026\u0026(d\u003de[l]),3\u003d\u003d\u003dd.length?d\u003d[d[0],d[1],d[2],1]:4\u003d\u003d\u003dd.length\u0026\u0026(d\u003d[d[0],d[1],d[2],d[3]],!this.hasAlpha\u0026\u0026d[3]\u003c1\u0026\u0026(this.hasAlpha\u003d!0)),!isNaN(p[0][s])\u0026\u0026!isNaN(p[1][s])){var m;if(p[0][s]\u003c0)(m\u003du.slice())[s]+\u003dp[0][s],i.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,m[0],m[1],m[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,m),o+\u003d2+f(i,m,d,s);if(p[1][s]\u003e0)(m\u003du.slice())[s]+\u003dp[1][s],i.push(u[0],u[1],u[2],d[0],d[1],d[2],d[3],0,0,0,m[0],m[1],m[2],d[0],d[1],d[2],d[3],0,0,0),c(this.bounds,m),o+\u003d2+f(i,m,d,s)}}this.lineCount[s]\u003do-this.lineOffset[s]}this.buffer.update(i)}},l.dispose\u003dfunction(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},{\"./shaders/index\":271,\"gl-buffer\":263,\"gl-vao\":357}],270:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],271:[function(t,e,r){\"use strict\";var n\u003dt(\"glslify\"),i\u003dt(\"gl-shader\"),a\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, offset;\\nattribute vec4 color;\\nuniform mat4 model, view, projection;\\nuniform float capSize;\\nvarying vec4 fragColor;\\nvarying vec3 fragPosition;\\n\\nvoid main() {\\n  vec4 worldPosition  \u003d model * vec4(position, 1.0);\\n  worldPosition       \u003d (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\\n  gl_Position         \u003d projection * view * worldPosition;\\n  fragColor           \u003d color;\\n  fragPosition        \u003d position;\\n}\"]),o\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float opacity;\\nvarying vec3 fragPosition;\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  if (\\n    outOfRange(clipBounds[0], clipBounds[1], fragPosition) ||\\n    fragColor.a * opacity \u003d\u003d 0.\\n  ) discard;\\n\\n  gl_FragColor \u003d opacity * fragColor;\\n}\"]);e.exports\u003dfunction(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"offset\",type:\"vec3\"}])}},{\"gl-shader\":335,glslify:270}],272:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-texture2d\");e.exports\u003dfunction(t,e,r,n){i||(i\u003dt.FRAMEBUFFER_UNSUPPORTED,a\u003dt.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,o\u003dt.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,s\u003dt.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var c\u003dt.getExtension(\"WEBGL_draw_buffers\");!l\u0026\u0026c\u0026\u0026function(t,e){var r\u003dt.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);l\u003dnew Array(r+1);for(var n\u003d0;n\u003c\u003dr;++n){for(var i\u003dnew Array(r),a\u003d0;a\u003cn;++a)i[a]\u003dt.COLOR_ATTACHMENT0+a;for(a\u003dn;a\u003cr;++a)i[a]\u003dt.NONE;l[n]\u003di}}(t,c);Array.isArray(e)\u0026\u0026(n\u003dr,r\u003d0|e[1],e\u003d0|e[0]);if(\"number\"!\u003dtypeof e)throw new Error(\"gl-fbo: Missing shape parameter\");var u\u003dt.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e\u003c0||e\u003eu||r\u003c0||r\u003eu)throw new Error(\"gl-fbo: Parameters are too large for FBO\");var f\u003d1;if(\"color\"in(n\u003dn||{})){if((f\u003dMath.max(0|n.color,0))\u003c0)throw new Error(\"gl-fbo: Must specify a nonnegative number of colors\");if(f\u003e1){if(!c)throw new Error(\"gl-fbo: Multiple draw buffer extension not supported\");if(f\u003et.getParameter(c.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error(\"gl-fbo: Context does not support \"+f+\" draw buffers\")}}var h\u003dt.UNSIGNED_BYTE,p\u003dt.getExtension(\"OES_texture_float\");if(n.float\u0026\u0026f\u003e0){if(!p)throw new Error(\"gl-fbo: Context does not support floating point textures\");h\u003dt.FLOAT}else n.preferFloat\u0026\u0026f\u003e0\u0026\u0026p\u0026\u0026(h\u003dt.FLOAT);var m\u003d!0;\"depth\"in n\u0026\u0026(m\u003d!!n.depth);var g\u003d!1;\"stencil\"in n\u0026\u0026(g\u003d!!n.stencil);return new d(t,e,r,h,f,m,g,c)};var i,a,o,s,l\u003dnull;function c(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function u(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function f(t){switch(t){case i:throw new Error(\"gl-fbo: Framebuffer unsupported\");case a:throw new Error(\"gl-fbo: Framebuffer incomplete attachment\");case o:throw new Error(\"gl-fbo: Framebuffer incomplete dimensions\");case s:throw new Error(\"gl-fbo: Framebuffer incomplete missing attachment\");default:throw new Error(\"gl-fbo: Framebuffer failed for unspecified reason\")}}function h(t,e,r,i,a,o){if(!i)return null;var s\u003dn(t,e,r,a,i);return s.magFilter\u003dt.NEAREST,s.minFilter\u003dt.NEAREST,s.mipSamples\u003d1,s.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,o,t.TEXTURE_2D,s.handle,0),s}function p(t,e,r,n,i){var a\u003dt.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function d(t,e,r,n,i,a,o,s){this.gl\u003dt,this._shape\u003d[0|e,0|r],this._destroyed\u003d!1,this._ext\u003ds,this.color\u003dnew Array(i);for(var d\u003d0;d\u003ci;++d)this.color[d]\u003dnull;this._color_rb\u003dnull,this.depth\u003dnull,this._depth_rb\u003dnull,this._colorType\u003dn,this._useDepth\u003da,this._useStencil\u003do;var m\u003dthis,g\u003d[0|e,0|r];Object.defineProperties(g,{0:{get:function(){return m._shape[0]},set:function(t){return m.width\u003dt}},1:{get:function(){return m._shape[1]},set:function(t){return m.height\u003dt}}}),this._shapeVector\u003dg,function(t){var e\u003dc(t.gl),r\u003dt.gl,n\u003dt.handle\u003dr.createFramebuffer(),i\u003dt._shape[0],a\u003dt._shape[1],o\u003dt.color.length,s\u003dt._ext,d\u003dt._useStencil,m\u003dt._useDepth,g\u003dt._colorType;r.bindFramebuffer(r.FRAMEBUFFER,n);for(var v\u003d0;v\u003co;++v)t.color[v]\u003dh(r,i,a,g,r.RGBA,r.COLOR_ATTACHMENT0+v);0\u003d\u003d\u003do?(t._color_rb\u003dp(r,i,a,r.RGBA4,r.COLOR_ATTACHMENT0),s\u0026\u0026s.drawBuffersWEBGL(l[0])):o\u003e1\u0026\u0026s.drawBuffersWEBGL(l[o]);var y\u003dr.getExtension(\"WEBGL_depth_texture\");y?d?t.depth\u003dh(r,i,a,y.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):m\u0026\u0026(t.depth\u003dh(r,i,a,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):m\u0026\u0026d?t._depth_rb\u003dp(r,i,a,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):m?t._depth_rb\u003dp(r,i,a,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d\u0026\u0026(t._depth_rb\u003dp(r,i,a,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var x\u003dr.checkFramebufferStatus(r.FRAMEBUFFER);if(x!\u003d\u003dr.FRAMEBUFFER_COMPLETE){t._destroyed\u003d!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle\u003dnull,t.depth\u0026\u0026(t.depth.dispose(),t.depth\u003dnull),t._depth_rb\u0026\u0026(r.deleteRenderbuffer(t._depth_rb),t._depth_rb\u003dnull);for(v\u003d0;v\u003ct.color.length;++v)t.color[v].dispose(),t.color[v]\u003dnull;t._color_rb\u0026\u0026(r.deleteRenderbuffer(t._color_rb),t._color_rb\u003dnull),u(r,e),f(x)}u(r,e)}(this)}var m\u003dd.prototype;function g(t,e,r){if(t._destroyed)throw new Error(\"gl-fbo: Can\u0027t resize destroyed FBO\");if(t._shape[0]!\u003d\u003de||t._shape[1]!\u003d\u003dr){var n\u003dt.gl,i\u003dn.getParameter(n.MAX_RENDERBUFFER_SIZE);if(e\u003c0||e\u003ei||r\u003c0||r\u003ei)throw new Error(\"gl-fbo: Can\u0027t resize FBO, invalid dimensions\");t._shape[0]\u003de,t._shape[1]\u003dr;for(var a\u003dc(n),o\u003d0;o\u003ct.color.length;++o)t.color[o].shape\u003dt._shape;t._color_rb\u0026\u0026(n.bindRenderbuffer(n.RENDERBUFFER,t._color_rb),n.renderbufferStorage(n.RENDERBUFFER,n.RGBA4,t._shape[0],t._shape[1])),t.depth\u0026\u0026(t.depth.shape\u003dt._shape),t._depth_rb\u0026\u0026(n.bindRenderbuffer(n.RENDERBUFFER,t._depth_rb),t._useDepth\u0026\u0026t._useStencil?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?n.renderbufferStorage(n.RENDERBUFFER,n.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil\u0026\u0026n.renderbufferStorage(n.RENDERBUFFER,n.STENCIL_INDEX,t._shape[0],t._shape[1])),n.bindFramebuffer(n.FRAMEBUFFER,t.handle);var s\u003dn.checkFramebufferStatus(n.FRAMEBUFFER);s!\u003d\u003dn.FRAMEBUFFER_COMPLETE\u0026\u0026(t.dispose(),u(n,a),f(s)),u(n,a)}}Object.defineProperties(m,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t\u003d[0|t,0|t]),2!\u003d\u003dt.length)throw new Error(\"gl-fbo: Shape vector must be length 2\");var e\u003d0|t[0],r\u003d0|t[1];return g(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return g(this,t|\u003d0,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|\u003d0,g(this,this._shape[0],t),t},enumerable:!1}}),m.bind\u003dfunction(){if(!this._destroyed){var t\u003dthis.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},m.dispose\u003dfunction(){if(!this._destroyed){this._destroyed\u003d!0;var t\u003dthis.gl;t.deleteFramebuffer(this.handle),this.handle\u003dnull,this.depth\u0026\u0026(this.depth.dispose(),this.depth\u003dnull),this._depth_rb\u0026\u0026(t.deleteRenderbuffer(this._depth_rb),this._depth_rb\u003dnull);for(var e\u003d0;e\u003cthis.color.length;++e)this.color[e].dispose(),this.color[e]\u003dnull;this._color_rb\u0026\u0026(t.deleteRenderbuffer(this._color_rb),this._color_rb\u003dnull)}}},{\"gl-texture2d\":352}],273:[function(t,e,r){var n\u003dt(\"sprintf-js\").sprintf,i\u003dt(\"gl-constants/lookup\"),a\u003dt(\"glsl-shader-name\"),o\u003dt(\"add-line-numbers\");e.exports\u003dfunction(t,e,r){\"use strict\";var s\u003da(e)||\"of unknown name (see npm glsl-shader-name)\",l\u003d\"unknown type\";void 0!\u003d\u003dr\u0026\u0026(l\u003dr\u003d\u003d\u003di.FRAGMENT_SHADER?\"fragment\":\"vertex\");for(var c\u003dn(\"Error compiling %s shader %s:\\n\",l,s),u\u003dn(\"%s%s\",c,t),f\u003dt.split(\"\\n\"),h\u003d{},p\u003d0;p\u003cf.length;p++){var d\u003df[p];if(\"\"!\u003d\u003dd\u0026\u0026\"\\0\"!\u003d\u003dd){var m\u003dparseInt(d.split(\":\")[2]);if(isNaN(m))throw new Error(n(\"Could not parse error: %s\",d));h[m]\u003dd}}var g\u003do(e).split(\"\\n\");for(p\u003d0;p\u003cg.length;p++)if(h[p+3]||h[p+2]||h[p+1]){var v\u003dg[p];if(c+\u003dv+\"\\n\",h[p+1]){var y\u003dh[p+1];y\u003dy.substr(y.split(\":\",3).join(\":\").length+1).trim(),c+\u003dn(\"^^^ %s\\n\\n\",y)}}return{long:c.trim(),short:u.trim()}}},{\"add-line-numbers\":72,\"gl-constants/lookup\":268,\"glsl-shader-name\":430,\"sprintf-js\":564}],274:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003dt.gl,n\u003do(r,l.vertex,l.fragment),i\u003do(r,l.pickVertex,l.pickFragment),a\u003ds(r),u\u003ds(r),f\u003ds(r),h\u003ds(r),p\u003dnew c(t,n,i,a,u,f,h);return p.update(e),t.addObject(p),p};var n\u003dt(\"binary-search-bounds\"),i\u003dt(\"iota-array\"),a\u003dt(\"typedarray-pool\"),o\u003dt(\"gl-shader\"),s\u003dt(\"gl-buffer\"),l\u003dt(\"./lib/shaders\");function c(t,e,r,n,i,a,o){this.plot\u003dt,this.shader\u003de,this.pickShader\u003dr,this.positionBuffer\u003dn,this.weightBuffer\u003di,this.colorBuffer\u003da,this.idBuffer\u003do,this.xData\u003d[],this.yData\u003d[],this.shape\u003d[0,0],this.bounds\u003d[1/0,1/0,-1/0,-1/0],this.pickOffset\u003d0}var u,f\u003dc.prototype,h\u003d[0,0,1,0,0,1,1,0,1,1,0,1];f.draw\u003d(u\u003d[1,0,0,0,1,0,0,0,1],function(){var t\u003dthis.plot,e\u003dthis.shader,r\u003dthis.bounds,n\u003dthis.numVertices;if(!(n\u003c\u003d0)){var i\u003dt.gl,a\u003dt.dataBox,o\u003dr[2]-r[0],s\u003dr[3]-r[1],l\u003da[2]-a[0],c\u003da[3]-a[1];u[0]\u003d2*o/l,u[4]\u003d2*s/c,u[6]\u003d2*(r[0]-a[0])/l-1,u[7]\u003d2*(r[1]-a[1])/c-1,e.bind();var f\u003de.uniforms;f.viewTransform\u003du,f.shape\u003dthis.shape;var h\u003de.attributes;this.positionBuffer.bind(),h.position.pointer(),this.weightBuffer.bind(),h.weight.pointer(i.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),h.color.pointer(i.UNSIGNED_BYTE,!0),i.drawArrays(i.TRIANGLES,0,n)}}),f.drawPick\u003dfunction(){var t\u003d[1,0,0,0,1,0,0,0,1],e\u003d[0,0,0,0];return function(r){var n\u003dthis.plot,i\u003dthis.pickShader,a\u003dthis.bounds,o\u003dthis.numVertices;if(!(o\u003c\u003d0)){var s\u003dn.gl,l\u003dn.dataBox,c\u003da[2]-a[0],u\u003da[3]-a[1],f\u003dl[2]-l[0],h\u003dl[3]-l[1];t[0]\u003d2*c/f,t[4]\u003d2*u/h,t[6]\u003d2*(a[0]-l[0])/f-1,t[7]\u003d2*(a[1]-l[1])/h-1;for(var p\u003d0;p\u003c4;++p)e[p]\u003dr\u003e\u003e8*p\u0026255;this.pickOffset\u003dr,i.bind();var d\u003di.uniforms;d.viewTransform\u003dt,d.pickOffset\u003de,d.shape\u003dthis.shape;var m\u003di.attributes;return this.positionBuffer.bind(),m.position.pointer(),this.weightBuffer.bind(),m.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),m.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),f.pick\u003dfunction(t,e,r){var n\u003dthis.pickOffset,i\u003dthis.shape[0]*this.shape[1];if(r\u003cn||r\u003e\u003dn+i)return null;var a\u003dr-n,o\u003dthis.xData,s\u003dthis.yData;return{object:this,pointId:a,dataCoord:[o[a%this.shape[0]],s[a/this.shape[0]|0]]}},f.update\u003dfunction(t){var e\u003d(t\u003dt||{}).shape||[0,0],r\u003dt.x||i(e[0]),o\u003dt.y||i(e[1]),s\u003dt.z||new Float32Array(e[0]*e[1]),l\u003d!1!\u003d\u003dt.zsmooth;this.xData\u003dr,this.yData\u003do;var c,u,f,p,d\u003dt.colorLevels||[0],m\u003dt.colorValues||[0,0,0,1],g\u003dd.length,v\u003dthis.bounds;l?(c\u003dv[0]\u003dr[0],u\u003dv[1]\u003do[0],f\u003dv[2]\u003dr[r.length-1],p\u003dv[3]\u003do[o.length-1]):(c\u003dv[0]\u003dr[0]+(r[1]-r[0])/2,u\u003dv[1]\u003do[0]+(o[1]-o[0])/2,f\u003dv[2]\u003dr[r.length-1]+(r[r.length-1]-r[r.length-2])/2,p\u003dv[3]\u003do[o.length-1]+(o[o.length-1]-o[o.length-2])/2);var y\u003d1/(f-c),x\u003d1/(p-u),b\u003de[0],_\u003de[1];this.shape\u003d[b,_];var w\u003d(l?(b-1)*(_-1):b*_)*(h.length\u003e\u003e\u003e1);this.numVertices\u003dw;for(var T\u003da.mallocUint8(4*w),k\u003da.mallocFloat32(2*w),M\u003da.mallocUint8(2*w),A\u003da.mallocUint32(w),S\u003d0,E\u003dl?b-1:b,L\u003dl?_-1:_,C\u003d0;C\u003cL;++C){var P,I;l?(P\u003dx*(o[C]-u),I\u003dx*(o[C+1]-u)):(P\u003dC\u003c_-1?x*(o[C]-(o[C+1]-o[C])/2-u):x*(o[C]-(o[C]-o[C-1])/2-u),I\u003dC\u003c_-1?x*(o[C]+(o[C+1]-o[C])/2-u):x*(o[C]+(o[C]-o[C-1])/2-u));for(var O\u003d0;O\u003cE;++O){var z,D;l?(z\u003dy*(r[O]-c),D\u003dy*(r[O+1]-c)):(z\u003dO\u003cb-1?y*(r[O]-(r[O+1]-r[O])/2-c):y*(r[O]-(r[O]-r[O-1])/2-c),D\u003dO\u003cb-1?y*(r[O]+(r[O+1]-r[O])/2-c):y*(r[O]+(r[O]-r[O-1])/2-c));for(var R\u003d0;R\u003ch.length;R+\u003d2){var F,B,N,j,U\u003dh[R],V\u003dh[R+1],q\u003ds[l?(C+V)*b+(O+U):C*b+O],H\u003dn.le(d,q);if(H\u003c0)F\u003dm[0],B\u003dm[1],N\u003dm[2],j\u003dm[3];else if(H\u003d\u003d\u003dg-1)F\u003dm[4*g-4],B\u003dm[4*g-3],N\u003dm[4*g-2],j\u003dm[4*g-1];else{var G\u003d(q-d[H])/(d[H+1]-d[H]),Y\u003d1-G,W\u003d4*H,X\u003d4*(H+1);F\u003dY*m[W]+G*m[X],B\u003dY*m[W+1]+G*m[X+1],N\u003dY*m[W+2]+G*m[X+2],j\u003dY*m[W+3]+G*m[X+3]}T[4*S]\u003d255*F,T[4*S+1]\u003d255*B,T[4*S+2]\u003d255*N,T[4*S+3]\u003d255*j,k[2*S]\u003d.5*z+.5*D,k[2*S+1]\u003d.5*P+.5*I,M[2*S]\u003dU,M[2*S+1]\u003dV,A[S]\u003dC*b+O,S+\u003d1}}}this.positionBuffer.update(k),this.weightBuffer.update(M),this.colorBuffer.update(T),this.idBuffer.update(A),a.free(k),a.free(T),a.free(M),a.free(A)},f.dispose\u003dfunction(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},{\"./lib/shaders\":275,\"binary-search-bounds\":103,\"gl-buffer\":263,\"gl-shader\":335,\"iota-array\":447,\"typedarray-pool\":613}],275:[function(t,e,r){\"use strict\";var n\u003dt(\"glslify\");e.exports\u003d{fragment:n([\"precision lowp float;\\n#define GLSLIFY 1\\nvarying vec4 fragColor;\\nvoid main() {\\n  gl_FragColor \u003d vec4(fragColor.rgb * fragColor.a, fragColor.a);\\n}\\n\"]),vertex:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 color;\\nattribute vec2 weight;\\n\\nuniform vec2 shape;\\nuniform mat3 viewTransform;\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  vec3 vPosition \u003d viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\n  fragColor \u003d color;\\n  gl_Position \u003d vec4(vPosition.xy, 0, vPosition.z);\\n}\\n\"]),pickFragment:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragId;\\nvarying vec2 vWeight;\\n\\nuniform vec2 shape;\\nuniform vec4 pickOffset;\\n\\nvoid main() {\\n  vec2 d \u003d step(.5, vWeight);\\n  vec4 id \u003d fragId + pickOffset;\\n  id.x +\u003d d.x + d.y*shape.x;\\n\\n  id.y +\u003d floor(id.x / 256.0);\\n  id.x -\u003d floor(id.x / 256.0) * 256.0;\\n\\n  id.z +\u003d floor(id.y / 256.0);\\n  id.y -\u003d floor(id.y / 256.0) * 256.0;\\n\\n  id.w +\u003d floor(id.z / 256.0);\\n  id.z -\u003d floor(id.z / 256.0) * 256.0;\\n\\n  gl_FragColor \u003d id/255.;\\n}\\n\"]),pickVertex:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 pickId;\\nattribute vec2 weight;\\n\\nuniform vec2 shape;\\nuniform mat3 viewTransform;\\n\\nvarying vec4 fragId;\\nvarying vec2 vWeight;\\n\\nvoid main() {\\n  vWeight \u003d weight;\\n\\n  fragId \u003d pickId;\\n\\n  vec3 vPosition \u003d viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\\n  gl_Position \u003d vec4(vPosition.xy, 0, vPosition.z);\\n}\\n\"])}},{glslify:438}],276:[function(t,e,r){var n\u003dt(\"glslify\"),i\u003dt(\"gl-shader\"),a\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, nextPosition;\\nattribute float arcLength, lineWidth;\\nattribute vec4 color;\\n\\nuniform vec2 screenShape;\\nuniform float pixelRatio;\\nuniform mat4 model, view, projection;\\n\\nvarying vec4 fragColor;\\nvarying vec3 worldPosition;\\nvarying float pixelArcLength;\\n\\nvec4 project(vec3 p) {\\n  return projection * view * model * vec4(p, 1.0);\\n}\\n\\nvoid main() {\\n  vec4 startPoint \u003d project(position);\\n  vec4 endPoint   \u003d project(nextPosition);\\n\\n  vec2 A \u003d startPoint.xy / startPoint.w;\\n  vec2 B \u003d   endPoint.xy /   endPoint.w;\\n\\n  float clipAngle \u003d atan(\\n    (B.y - A.y) * screenShape.y,\\n    (B.x - A.x) * screenShape.x\\n  );\\n\\n  vec2 offset \u003d 0.5 * pixelRatio * lineWidth * vec2(\\n    sin(clipAngle),\\n    -cos(clipAngle)\\n  ) / screenShape;\\n\\n  gl_Position \u003d vec4(startPoint.xy + startPoint.w * offset, startPoint.zw);\\n\\n  worldPosition \u003d position;\\n  pixelArcLength \u003d arcLength;\\n  fragColor \u003d color;\\n}\\n\"]),o\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3      clipBounds[2];\\nuniform sampler2D dashTexture;\\nuniform float     dashScale;\\nuniform float     opacity;\\n\\nvarying vec3    worldPosition;\\nvarying float   pixelArcLength;\\nvarying vec4    fragColor;\\n\\nvoid main() {\\n  if (\\n    outOfRange(clipBounds[0], clipBounds[1], worldPosition) ||\\n    fragColor.a * opacity \u003d\u003d 0.\\n  ) discard;\\n\\n  float dashWeight \u003d texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\\n  if(dashWeight \u003c 0.5) {\\n    discard;\\n  }\\n  gl_FragColor \u003d fragColor * opacity;\\n}\\n\"]),s\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\n#define FLOAT_MAX  1.70141184e38\\n#define FLOAT_MIN  1.17549435e-38\\n\\n// https://github.com/mikolalysenko/glsl-read-float/blob/master/index.glsl\\nvec4 packFloat(float v) {\\n  float av \u003d abs(v);\\n\\n  //Handle special cases\\n  if(av \u003c FLOAT_MIN) {\\n    return vec4(0.0, 0.0, 0.0, 0.0);\\n  } else if(v \u003e FLOAT_MAX) {\\n    return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\\n  } else if(v \u003c -FLOAT_MAX) {\\n    return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\\n  }\\n\\n  vec4 c \u003d vec4(0,0,0,0);\\n\\n  //Compute exponent and mantissa\\n  float e \u003d floor(log2(av));\\n  float m \u003d av * pow(2.0, -e) - 1.0;\\n\\n  //Unpack mantissa\\n  c[1] \u003d floor(128.0 * m);\\n  m -\u003d c[1] / 128.0;\\n  c[2] \u003d floor(32768.0 * m);\\n  m -\u003d c[2] / 32768.0;\\n  c[3] \u003d floor(8388608.0 * m);\\n\\n  //Unpack exponent\\n  float ebias \u003d e + 127.0;\\n  c[0] \u003d floor(ebias / 2.0);\\n  ebias -\u003d c[0] * 2.0;\\n  c[1] +\u003d floor(ebias) * 128.0;\\n\\n  //Unpack sign bit\\n  c[0] +\u003d 128.0 * step(0.0, -v);\\n\\n  //Scale back to range\\n  return c / 255.0;\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform float pickId;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec3 worldPosition;\\nvarying float pixelArcLength;\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], worldPosition)) discard;\\n\\n  gl_FragColor \u003d vec4(pickId/255.0, packFloat(pixelArcLength).xyz);\\n}\"]),l\u003d[{name:\"position\",type:\"vec3\"},{name:\"nextPosition\",type:\"vec3\"},{name:\"arcLength\",type:\"float\"},{name:\"lineWidth\",type:\"float\"},{name:\"color\",type:\"vec4\"}];r.createShader\u003dfunction(t){return i(t,a,o,null,l)},r.createPickShader\u003dfunction(t){return i(t,a,s,null,l)}},{\"gl-shader\":335,glslify:278}],277:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl||t.scene\u0026\u0026t.scene.gl,r\u003df(e);r.attributes.position.location\u003d0,r.attributes.nextPosition.location\u003d1,r.attributes.arcLength.location\u003d2,r.attributes.lineWidth.location\u003d3,r.attributes.color.location\u003d4;var o\u003dh(e);o.attributes.position.location\u003d0,o.attributes.nextPosition.location\u003d1,o.attributes.arcLength.location\u003d2,o.attributes.lineWidth.location\u003d3,o.attributes.color.location\u003d4;for(var s\u003dn(e),l\u003di(e,[{buffer:s,size:3,offset:0,stride:48},{buffer:s,size:3,offset:12,stride:48},{buffer:s,size:1,offset:24,stride:48},{buffer:s,size:1,offset:28,stride:48},{buffer:s,size:4,offset:32,stride:48}]),u\u003dc(new Array(1024),[256,1,4]),p\u003d0;p\u003c1024;++p)u.data[p]\u003d255;var d\u003da(e,u);d.wrap\u003de.REPEAT;var m\u003dnew v(e,r,o,s,l,d);return m.update(t),m};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-vao\"),a\u003dt(\"gl-texture2d\"),o\u003dnew Uint8Array(4),s\u003dnew Float32Array(o.buffer);var l\u003dt(\"binary-search-bounds\"),c\u003dt(\"ndarray\"),u\u003dt(\"./lib/shaders\"),f\u003du.createShader,h\u003du.createPickShader,p\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function d(t,e){for(var r\u003d0,n\u003d0;n\u003c3;++n){var i\u003dt[n]-e[n];r+\u003di*i}return Math.sqrt(r)}function m(t){for(var e\u003d[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r\u003d0;r\u003c3;++r)e[0][r]\u003dMath.max(t[0][r],e[0][r]),e[1][r]\u003dMath.min(t[1][r],e[1][r]);return e}function g(t,e,r,n){this.arcLength\u003dt,this.position\u003de,this.index\u003dr,this.dataCoordinate\u003dn}function v(t,e,r,n,i,a){this.gl\u003dt,this.shader\u003de,this.pickShader\u003dr,this.buffer\u003dn,this.vao\u003di,this.clipBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points\u003d[],this.arcLength\u003d[],this.vertexCount\u003d0,this.bounds\u003d[[0,0,0],[0,0,0]],this.pickId\u003d0,this.lineWidth\u003d1,this.texture\u003da,this.dashScale\u003d1,this.opacity\u003d1,this.hasAlpha\u003d!1,this.dirty\u003d!0,this.pixelRatio\u003d1}var y\u003dv.prototype;y.isTransparent\u003dfunction(){return this.hasAlpha},y.isOpaque\u003dfunction(){return!this.hasAlpha},y.pickSlots\u003d1,y.setPickBase\u003dfunction(t){this.pickId\u003dt},y.drawTransparent\u003dy.draw\u003dfunction(t){if(this.vertexCount){var e\u003dthis.gl,r\u003dthis.shader,n\u003dthis.vao;r.bind(),r.uniforms\u003d{model:t.model||p,view:t.view||p,projection:t.projection||p,clipBounds:m(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},y.drawPick\u003dfunction(t){if(this.vertexCount){var e\u003dthis.gl,r\u003dthis.pickShader,n\u003dthis.vao;r.bind(),r.uniforms\u003d{model:t.model||p,view:t.view||p,projection:t.projection||p,pickId:this.pickId,clipBounds:m(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount),n.unbind()}},y.update\u003dfunction(t){var e,r;this.dirty\u003d!0;var n\u003d!!t.connectGaps;\"dashScale\"in t\u0026\u0026(this.dashScale\u003dt.dashScale),this.hasAlpha\u003d!1,\"opacity\"in t\u0026\u0026(this.opacity\u003d+t.opacity,this.opacity\u003c1\u0026\u0026(this.hasAlpha\u003d!0));var i\u003d[],a\u003d[],o\u003d[],s\u003d0,u\u003d0,f\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],h\u003dt.position||t.positions;if(h){var p\u003dt.color||t.colors||[0,0,0,1],m\u003dt.lineWidth||1,g\u003d!1;t:for(e\u003d1;e\u003ch.length;++e){var v,y,x,b\u003dh[e-1],_\u003dh[e];for(a.push(s),o.push(b.slice()),r\u003d0;r\u003c3;++r){if(isNaN(b[r])||isNaN(_[r])||!isFinite(b[r])||!isFinite(_[r])){if(!n\u0026\u0026i.length\u003e0){for(var w\u003d0;w\u003c24;++w)i.push(i[i.length-12]);u+\u003d2,g\u003d!0}continue t}f[0][r]\u003dMath.min(f[0][r],b[r],_[r]),f[1][r]\u003dMath.max(f[1][r],b[r],_[r])}Array.isArray(p[0])?(v\u003dp.length\u003ee-1?p[e-1]:p.length\u003e0?p[p.length-1]:[0,0,0,1],y\u003dp.length\u003ee?p[e]:p.length\u003e0?p[p.length-1]:[0,0,0,1]):v\u003dy\u003dp,3\u003d\u003d\u003dv.length\u0026\u0026(v\u003d[v[0],v[1],v[2],1]),3\u003d\u003d\u003dy.length\u0026\u0026(y\u003d[y[0],y[1],y[2],1]),!this.hasAlpha\u0026\u0026v[3]\u003c1\u0026\u0026(this.hasAlpha\u003d!0),x\u003dArray.isArray(m)?m.length\u003ee-1?m[e-1]:m.length\u003e0?m[m.length-1]:[0,0,0,1]:m;var T\u003ds;if(s+\u003dd(b,_),g){for(r\u003d0;r\u003c2;++r)i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,v[0],v[1],v[2],v[3]);u+\u003d2,g\u003d!1}i.push(b[0],b[1],b[2],_[0],_[1],_[2],T,x,v[0],v[1],v[2],v[3],b[0],b[1],b[2],_[0],_[1],_[2],T,-x,v[0],v[1],v[2],v[3],_[0],_[1],_[2],b[0],b[1],b[2],s,-x,y[0],y[1],y[2],y[3],_[0],_[1],_[2],b[0],b[1],b[2],s,x,y[0],y[1],y[2],y[3]),u+\u003d4}}if(this.buffer.update(i),a.push(s),o.push(h[h.length-1].slice()),this.bounds\u003df,this.vertexCount\u003du,this.points\u003do,this.arcLength\u003da,\"dashes\"in t){var k\u003dt.dashes.slice();for(k.unshift(0),e\u003d1;e\u003ck.length;++e)k[e]\u003dk[e-1]+k[e];var M\u003dc(new Array(1024),[256,1,4]);for(e\u003d0;e\u003c256;++e){for(r\u003d0;r\u003c4;++r)M.set(e,0,r,0);1\u0026l.le(k,k[k.length-1]*e/255)?M.set(e,0,0,0):M.set(e,0,0,255)}this.texture.setPixels(M)}},y.dispose\u003dfunction(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},y.pick\u003dfunction(t){if(!t)return null;if(t.id!\u003d\u003dthis.pickId)return null;var e\u003dfunction(t,e,r,n){return o[0]\u003dn,o[1]\u003dr,o[2]\u003de,o[3]\u003dt,s[0]}(t.value[0],t.value[1],t.value[2],0),r\u003dl.le(this.arcLength,e);if(r\u003c0)return null;if(r\u003d\u003d\u003dthis.arcLength.length-1)return new g(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n\u003dthis.points[r],i\u003dthis.points[Math.min(r+1,this.points.length-1)],a\u003d(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),c\u003d1-a,u\u003d[0,0,0],f\u003d0;f\u003c3;++f)u[f]\u003dc*n[f]+a*i[f];var h\u003dMath.min(a\u003c.5?r:r+1,this.points.length-1);return new g(e,u,h,this.points[h])}},{\"./lib/shaders\":276,\"binary-search-bounds\":103,\"gl-buffer\":263,\"gl-texture2d\":352,\"gl-vao\":357,ndarray:479}],278:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],279:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003de[3],o\u003de[4],s\u003de[5],l\u003de[6],c\u003de[7],u\u003de[8],f\u003de[9],h\u003de[10],p\u003de[11],d\u003de[12],m\u003de[13],g\u003de[14],v\u003de[15];return t[0]\u003ds*(h*v-p*g)-f*(l*v-c*g)+m*(l*p-c*h),t[1]\u003d-(n*(h*v-p*g)-f*(i*v-a*g)+m*(i*p-a*h)),t[2]\u003dn*(l*v-c*g)-s*(i*v-a*g)+m*(i*c-a*l),t[3]\u003d-(n*(l*p-c*h)-s*(i*p-a*h)+f*(i*c-a*l)),t[4]\u003d-(o*(h*v-p*g)-u*(l*v-c*g)+d*(l*p-c*h)),t[5]\u003dr*(h*v-p*g)-u*(i*v-a*g)+d*(i*p-a*h),t[6]\u003d-(r*(l*v-c*g)-o*(i*v-a*g)+d*(i*c-a*l)),t[7]\u003dr*(l*p-c*h)-o*(i*p-a*h)+u*(i*c-a*l),t[8]\u003do*(f*v-p*m)-u*(s*v-c*m)+d*(s*p-c*f),t[9]\u003d-(r*(f*v-p*m)-u*(n*v-a*m)+d*(n*p-a*f)),t[10]\u003dr*(s*v-c*m)-o*(n*v-a*m)+d*(n*c-a*s),t[11]\u003d-(r*(s*p-c*f)-o*(n*p-a*f)+u*(n*c-a*s)),t[12]\u003d-(o*(f*g-h*m)-u*(s*g-l*m)+d*(s*h-l*f)),t[13]\u003dr*(f*g-h*m)-u*(n*g-i*m)+d*(n*h-i*f),t[14]\u003d-(r*(s*g-l*m)-o*(n*g-i*m)+d*(n*l-i*s)),t[15]\u003dr*(s*h-l*f)-o*(n*h-i*f)+u*(n*l-i*s),t}},{}],280:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dnew Float32Array(16);return e[0]\u003dt[0],e[1]\u003dt[1],e[2]\u003dt[2],e[3]\u003dt[3],e[4]\u003dt[4],e[5]\u003dt[5],e[6]\u003dt[6],e[7]\u003dt[7],e[8]\u003dt[8],e[9]\u003dt[9],e[10]\u003dt[10],e[11]\u003dt[11],e[12]\u003dt[12],e[13]\u003dt[13],e[14]\u003dt[14],e[15]\u003dt[15],e}},{}],281:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t[3]\u003de[3],t[4]\u003de[4],t[5]\u003de[5],t[6]\u003de[6],t[7]\u003de[7],t[8]\u003de[8],t[9]\u003de[9],t[10]\u003de[10],t[11]\u003de[11],t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15],t}},{}],282:[function(t,e,r){e.exports\u003dfunction(){var t\u003dnew Float32Array(16);return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],283:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dt[0],r\u003dt[1],n\u003dt[2],i\u003dt[3],a\u003dt[4],o\u003dt[5],s\u003dt[6],l\u003dt[7],c\u003dt[8],u\u003dt[9],f\u003dt[10],h\u003dt[11],p\u003dt[12],d\u003dt[13],m\u003dt[14],g\u003dt[15];return(e*o-r*a)*(f*g-h*m)-(e*s-n*a)*(u*g-h*d)+(e*l-i*a)*(u*m-f*d)+(r*s-n*o)*(c*g-h*p)-(r*l-i*o)*(c*m-f*p)+(n*l-i*s)*(c*d-u*p)}},{}],284:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003de[3],o\u003dr+r,s\u003dn+n,l\u003di+i,c\u003dr*o,u\u003dn*o,f\u003dn*s,h\u003di*o,p\u003di*s,d\u003di*l,m\u003da*o,g\u003da*s,v\u003da*l;return t[0]\u003d1-f-d,t[1]\u003du+v,t[2]\u003dh-g,t[3]\u003d0,t[4]\u003du-v,t[5]\u003d1-c-d,t[6]\u003dp+m,t[7]\u003d0,t[8]\u003dh+g,t[9]\u003dp-m,t[10]\u003d1-c-f,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],285:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n,i,a,o\u003dr[0],s\u003dr[1],l\u003dr[2],c\u003dMath.sqrt(o*o+s*s+l*l);if(Math.abs(c)\u003c1e-6)return null;return o*\u003dc\u003d1/c,s*\u003dc,l*\u003dc,n\u003dMath.sin(e),i\u003dMath.cos(e),a\u003d1-i,t[0]\u003do*o*a+i,t[1]\u003ds*o*a+l*n,t[2]\u003dl*o*a-s*n,t[3]\u003d0,t[4]\u003do*s*a-l*n,t[5]\u003ds*s*a+i,t[6]\u003dl*s*a+o*n,t[7]\u003d0,t[8]\u003do*l*a+s*n,t[9]\u003ds*l*a-o*n,t[10]\u003dl*l*a+i,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],286:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3],s\u003dn+n,l\u003di+i,c\u003da+a,u\u003dn*s,f\u003dn*l,h\u003dn*c,p\u003di*l,d\u003di*c,m\u003da*c,g\u003do*s,v\u003do*l,y\u003do*c;return t[0]\u003d1-(p+m),t[1]\u003df+y,t[2]\u003dh-v,t[3]\u003d0,t[4]\u003df-y,t[5]\u003d1-(u+m),t[6]\u003dd+g,t[7]\u003d0,t[8]\u003dh+v,t[9]\u003dd-g,t[10]\u003d1-(u+p),t[11]\u003d0,t[12]\u003dr[0],t[13]\u003dr[1],t[14]\u003dr[2],t[15]\u003d1,t}},{}],287:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003de[0],t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003de[1],t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003de[2],t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],288:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003de[0],t[13]\u003de[1],t[14]\u003de[2],t[15]\u003d1,t}},{}],289:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003dMath.sin(e),n\u003dMath.cos(e);return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003dn,t[6]\u003dr,t[7]\u003d0,t[8]\u003d0,t[9]\u003d-r,t[10]\u003dn,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],290:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003dMath.sin(e),n\u003dMath.cos(e);return t[0]\u003dn,t[1]\u003d0,t[2]\u003d-r,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003dr,t[9]\u003d0,t[10]\u003dn,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],291:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003dMath.sin(e),n\u003dMath.cos(e);return t[0]\u003dn,t[1]\u003dr,t[2]\u003d0,t[3]\u003d0,t[4]\u003d-r,t[5]\u003dn,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],292:[function(t,e,r){e.exports\u003dfunction(t,e,r,n,i,a,o){var s\u003d1/(r-e),l\u003d1/(i-n),c\u003d1/(a-o);return t[0]\u003d2*a*s,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d2*a*l,t[6]\u003d0,t[7]\u003d0,t[8]\u003d(r+e)*s,t[9]\u003d(i+n)*l,t[10]\u003d(o+a)*c,t[11]\u003d-1,t[12]\u003d0,t[13]\u003d0,t[14]\u003do*a*2*c,t[15]\u003d0,t}},{}],293:[function(t,e,r){e.exports\u003dfunction(t){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}},{}],294:[function(t,e,r){e.exports\u003d{create:t(\"./create\"),clone:t(\"./clone\"),copy:t(\"./copy\"),identity:t(\"./identity\"),transpose:t(\"./transpose\"),invert:t(\"./invert\"),adjoint:t(\"./adjoint\"),determinant:t(\"./determinant\"),multiply:t(\"./multiply\"),translate:t(\"./translate\"),scale:t(\"./scale\"),rotate:t(\"./rotate\"),rotateX:t(\"./rotateX\"),rotateY:t(\"./rotateY\"),rotateZ:t(\"./rotateZ\"),fromRotation:t(\"./fromRotation\"),fromRotationTranslation:t(\"./fromRotationTranslation\"),fromScaling:t(\"./fromScaling\"),fromTranslation:t(\"./fromTranslation\"),fromXRotation:t(\"./fromXRotation\"),fromYRotation:t(\"./fromYRotation\"),fromZRotation:t(\"./fromZRotation\"),fromQuat:t(\"./fromQuat\"),frustum:t(\"./frustum\"),perspective:t(\"./perspective\"),perspectiveFromFieldOfView:t(\"./perspectiveFromFieldOfView\"),ortho:t(\"./ortho\"),lookAt:t(\"./lookAt\"),str:t(\"./str\")}},{\"./adjoint\":279,\"./clone\":280,\"./copy\":281,\"./create\":282,\"./determinant\":283,\"./fromQuat\":284,\"./fromRotation\":285,\"./fromRotationTranslation\":286,\"./fromScaling\":287,\"./fromTranslation\":288,\"./fromXRotation\":289,\"./fromYRotation\":290,\"./fromZRotation\":291,\"./frustum\":292,\"./identity\":293,\"./invert\":295,\"./lookAt\":296,\"./multiply\":297,\"./ortho\":298,\"./perspective\":299,\"./perspectiveFromFieldOfView\":300,\"./rotate\":301,\"./rotateX\":302,\"./rotateY\":303,\"./rotateZ\":304,\"./scale\":305,\"./str\":306,\"./translate\":307,\"./transpose\":308}],295:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003de[3],o\u003de[4],s\u003de[5],l\u003de[6],c\u003de[7],u\u003de[8],f\u003de[9],h\u003de[10],p\u003de[11],d\u003de[12],m\u003de[13],g\u003de[14],v\u003de[15],y\u003dr*s-n*o,x\u003dr*l-i*o,b\u003dr*c-a*o,_\u003dn*l-i*s,w\u003dn*c-a*s,T\u003di*c-a*l,k\u003du*m-f*d,M\u003du*g-h*d,A\u003du*v-p*d,S\u003df*g-h*m,E\u003df*v-p*m,L\u003dh*v-p*g,C\u003dy*L-x*E+b*S+_*A-w*M+T*k;if(!C)return null;return C\u003d1/C,t[0]\u003d(s*L-l*E+c*S)*C,t[1]\u003d(i*E-n*L-a*S)*C,t[2]\u003d(m*T-g*w+v*_)*C,t[3]\u003d(h*w-f*T-p*_)*C,t[4]\u003d(l*A-o*L-c*M)*C,t[5]\u003d(r*L-i*A+a*M)*C,t[6]\u003d(g*b-d*T-v*x)*C,t[7]\u003d(u*T-h*b+p*x)*C,t[8]\u003d(o*E-s*A+c*k)*C,t[9]\u003d(n*A-r*E-a*k)*C,t[10]\u003d(d*w-m*b+v*y)*C,t[11]\u003d(f*b-u*w-p*y)*C,t[12]\u003d(s*M-o*S-l*k)*C,t[13]\u003d(r*S-n*M+i*k)*C,t[14]\u003d(m*x-d*_-g*y)*C,t[15]\u003d(u*_-f*x+h*y)*C,t}},{}],296:[function(t,e,r){var n\u003dt(\"./identity\");e.exports\u003dfunction(t,e,r,i){var a,o,s,l,c,u,f,h,p,d,m\u003de[0],g\u003de[1],v\u003de[2],y\u003di[0],x\u003di[1],b\u003di[2],_\u003dr[0],w\u003dr[1],T\u003dr[2];if(Math.abs(m-_)\u003c1e-6\u0026\u0026Math.abs(g-w)\u003c1e-6\u0026\u0026Math.abs(v-T)\u003c1e-6)return n(t);f\u003dm-_,h\u003dg-w,p\u003dv-T,d\u003d1/Math.sqrt(f*f+h*h+p*p),a\u003dx*(p*\u003dd)-b*(h*\u003dd),o\u003db*(f*\u003dd)-y*p,s\u003dy*h-x*f,(d\u003dMath.sqrt(a*a+o*o+s*s))?(a*\u003dd\u003d1/d,o*\u003dd,s*\u003dd):(a\u003d0,o\u003d0,s\u003d0);l\u003dh*s-p*o,c\u003dp*a-f*s,u\u003df*o-h*a,(d\u003dMath.sqrt(l*l+c*c+u*u))?(l*\u003dd\u003d1/d,c*\u003dd,u*\u003dd):(l\u003d0,c\u003d0,u\u003d0);return t[0]\u003da,t[1]\u003dl,t[2]\u003df,t[3]\u003d0,t[4]\u003do,t[5]\u003dc,t[6]\u003dh,t[7]\u003d0,t[8]\u003ds,t[9]\u003du,t[10]\u003dp,t[11]\u003d0,t[12]\u003d-(a*m+o*g+s*v),t[13]\u003d-(l*m+c*g+u*v),t[14]\u003d-(f*m+h*g+p*v),t[15]\u003d1,t}},{\"./identity\":293}],297:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3],s\u003de[4],l\u003de[5],c\u003de[6],u\u003de[7],f\u003de[8],h\u003de[9],p\u003de[10],d\u003de[11],m\u003de[12],g\u003de[13],v\u003de[14],y\u003de[15],x\u003dr[0],b\u003dr[1],_\u003dr[2],w\u003dr[3];return t[0]\u003dx*n+b*s+_*f+w*m,t[1]\u003dx*i+b*l+_*h+w*g,t[2]\u003dx*a+b*c+_*p+w*v,t[3]\u003dx*o+b*u+_*d+w*y,x\u003dr[4],b\u003dr[5],_\u003dr[6],w\u003dr[7],t[4]\u003dx*n+b*s+_*f+w*m,t[5]\u003dx*i+b*l+_*h+w*g,t[6]\u003dx*a+b*c+_*p+w*v,t[7]\u003dx*o+b*u+_*d+w*y,x\u003dr[8],b\u003dr[9],_\u003dr[10],w\u003dr[11],t[8]\u003dx*n+b*s+_*f+w*m,t[9]\u003dx*i+b*l+_*h+w*g,t[10]\u003dx*a+b*c+_*p+w*v,t[11]\u003dx*o+b*u+_*d+w*y,x\u003dr[12],b\u003dr[13],_\u003dr[14],w\u003dr[15],t[12]\u003dx*n+b*s+_*f+w*m,t[13]\u003dx*i+b*l+_*h+w*g,t[14]\u003dx*a+b*c+_*p+w*v,t[15]\u003dx*o+b*u+_*d+w*y,t}},{}],298:[function(t,e,r){e.exports\u003dfunction(t,e,r,n,i,a,o){var s\u003d1/(e-r),l\u003d1/(n-i),c\u003d1/(a-o);return t[0]\u003d-2*s,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d-2*l,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d2*c,t[11]\u003d0,t[12]\u003d(e+r)*s,t[13]\u003d(i+n)*l,t[14]\u003d(o+a)*c,t[15]\u003d1,t}},{}],299:[function(t,e,r){e.exports\u003dfunction(t,e,r,n,i){var a\u003d1/Math.tan(e/2),o\u003d1/(n-i);return t[0]\u003da/r,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003da,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d(i+n)*o,t[11]\u003d-1,t[12]\u003d0,t[13]\u003d0,t[14]\u003d2*i*n*o,t[15]\u003d0,t}},{}],300:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i\u003dMath.tan(e.upDegrees*Math.PI/180),a\u003dMath.tan(e.downDegrees*Math.PI/180),o\u003dMath.tan(e.leftDegrees*Math.PI/180),s\u003dMath.tan(e.rightDegrees*Math.PI/180),l\u003d2/(o+s),c\u003d2/(i+a);return t[0]\u003dl,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003dc,t[6]\u003d0,t[7]\u003d0,t[8]\u003d-(o-s)*l*.5,t[9]\u003d(i-a)*c*.5,t[10]\u003dn/(r-n),t[11]\u003d-1,t[12]\u003d0,t[13]\u003d0,t[14]\u003dn*r/(r-n),t[15]\u003d0,t}},{}],301:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i,a,o,s,l,c,u,f,h,p,d,m,g,v,y,x,b,_,w,T,k,M,A,S,E\u003dn[0],L\u003dn[1],C\u003dn[2],P\u003dMath.sqrt(E*E+L*L+C*C);if(Math.abs(P)\u003c1e-6)return null;E*\u003dP\u003d1/P,L*\u003dP,C*\u003dP,i\u003dMath.sin(r),a\u003dMath.cos(r),o\u003d1-a,s\u003de[0],l\u003de[1],c\u003de[2],u\u003de[3],f\u003de[4],h\u003de[5],p\u003de[6],d\u003de[7],m\u003de[8],g\u003de[9],v\u003de[10],y\u003de[11],x\u003dE*E*o+a,b\u003dL*E*o+C*i,_\u003dC*E*o-L*i,w\u003dE*L*o-C*i,T\u003dL*L*o+a,k\u003dC*L*o+E*i,M\u003dE*C*o+L*i,A\u003dL*C*o-E*i,S\u003dC*C*o+a,t[0]\u003ds*x+f*b+m*_,t[1]\u003dl*x+h*b+g*_,t[2]\u003dc*x+p*b+v*_,t[3]\u003du*x+d*b+y*_,t[4]\u003ds*w+f*T+m*k,t[5]\u003dl*w+h*T+g*k,t[6]\u003dc*w+p*T+v*k,t[7]\u003du*w+d*T+y*k,t[8]\u003ds*M+f*A+m*S,t[9]\u003dl*M+h*A+g*S,t[10]\u003dc*M+p*A+v*S,t[11]\u003du*M+d*A+y*S,e!\u003d\u003dt\u0026\u0026(t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15]);return t}},{}],302:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003dMath.sin(r),i\u003dMath.cos(r),a\u003de[4],o\u003de[5],s\u003de[6],l\u003de[7],c\u003de[8],u\u003de[9],f\u003de[10],h\u003de[11];e!\u003d\u003dt\u0026\u0026(t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t[3]\u003de[3],t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15]);return t[4]\u003da*i+c*n,t[5]\u003do*i+u*n,t[6]\u003ds*i+f*n,t[7]\u003dl*i+h*n,t[8]\u003dc*i-a*n,t[9]\u003du*i-o*n,t[10]\u003df*i-s*n,t[11]\u003dh*i-l*n,t}},{}],303:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003dMath.sin(r),i\u003dMath.cos(r),a\u003de[0],o\u003de[1],s\u003de[2],l\u003de[3],c\u003de[8],u\u003de[9],f\u003de[10],h\u003de[11];e!\u003d\u003dt\u0026\u0026(t[4]\u003de[4],t[5]\u003de[5],t[6]\u003de[6],t[7]\u003de[7],t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15]);return t[0]\u003da*i-c*n,t[1]\u003do*i-u*n,t[2]\u003ds*i-f*n,t[3]\u003dl*i-h*n,t[8]\u003da*n+c*i,t[9]\u003do*n+u*i,t[10]\u003ds*n+f*i,t[11]\u003dl*n+h*i,t}},{}],304:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003dMath.sin(r),i\u003dMath.cos(r),a\u003de[0],o\u003de[1],s\u003de[2],l\u003de[3],c\u003de[4],u\u003de[5],f\u003de[6],h\u003de[7];e!\u003d\u003dt\u0026\u0026(t[8]\u003de[8],t[9]\u003de[9],t[10]\u003de[10],t[11]\u003de[11],t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15]);return t[0]\u003da*i+c*n,t[1]\u003do*i+u*n,t[2]\u003ds*i+f*n,t[3]\u003dl*i+h*n,t[4]\u003dc*i-a*n,t[5]\u003du*i-o*n,t[6]\u003df*i-s*n,t[7]\u003dh*i-l*n,t}},{}],305:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003dr[0],i\u003dr[1],a\u003dr[2];return t[0]\u003de[0]*n,t[1]\u003de[1]*n,t[2]\u003de[2]*n,t[3]\u003de[3]*n,t[4]\u003de[4]*i,t[5]\u003de[5]*i,t[6]\u003de[6]*i,t[7]\u003de[7]*i,t[8]\u003de[8]*a,t[9]\u003de[9]*a,t[10]\u003de[10]*a,t[11]\u003de[11]*a,t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15],t}},{}],306:[function(t,e,r){e.exports\u003dfunction(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"}},{}],307:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n,i,a,o,s,l,c,u,f,h,p,d,m\u003dr[0],g\u003dr[1],v\u003dr[2];e\u003d\u003d\u003dt?(t[12]\u003de[0]*m+e[4]*g+e[8]*v+e[12],t[13]\u003de[1]*m+e[5]*g+e[9]*v+e[13],t[14]\u003de[2]*m+e[6]*g+e[10]*v+e[14],t[15]\u003de[3]*m+e[7]*g+e[11]*v+e[15]):(n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3],s\u003de[4],l\u003de[5],c\u003de[6],u\u003de[7],f\u003de[8],h\u003de[9],p\u003de[10],d\u003de[11],t[0]\u003dn,t[1]\u003di,t[2]\u003da,t[3]\u003do,t[4]\u003ds,t[5]\u003dl,t[6]\u003dc,t[7]\u003du,t[8]\u003df,t[9]\u003dh,t[10]\u003dp,t[11]\u003dd,t[12]\u003dn*m+s*g+f*v+e[12],t[13]\u003di*m+l*g+h*v+e[13],t[14]\u003da*m+c*g+p*v+e[14],t[15]\u003do*m+u*g+d*v+e[15]);return t}},{}],308:[function(t,e,r){e.exports\u003dfunction(t,e){if(t\u003d\u003d\u003de){var r\u003de[1],n\u003de[2],i\u003de[3],a\u003de[6],o\u003de[7],s\u003de[11];t[1]\u003de[4],t[2]\u003de[8],t[3]\u003de[12],t[4]\u003dr,t[6]\u003de[9],t[7]\u003de[13],t[8]\u003dn,t[9]\u003da,t[11]\u003de[14],t[12]\u003di,t[13]\u003do,t[14]\u003ds}else t[0]\u003de[0],t[1]\u003de[4],t[2]\u003de[8],t[3]\u003de[12],t[4]\u003de[1],t[5]\u003de[5],t[6]\u003de[9],t[7]\u003de[13],t[8]\u003de[2],t[9]\u003de[6],t[10]\u003de[10],t[11]\u003de[14],t[12]\u003de[3],t[13]\u003de[7],t[14]\u003de[11],t[15]\u003de[15];return t}},{}],309:[function(t,e,r){\"use strict\";var n\u003dt(\"barycentric\"),i\u003dt(\"polytope-closest-point/lib/closest_point_2d.js\");function a(t,e){for(var r\u003d[0,0,0,0],n\u003d0;n\u003c4;++n)for(var i\u003d0;i\u003c4;++i)r[i]+\u003dt[4*n+i]*e[n];return r}function o(t,e,r,n,i){for(var o\u003da(n,a(r,a(e,[t[0],t[1],t[2],1]))),s\u003d0;s\u003c3;++s)o[s]/\u003do[3];return[.5*i[0]*(1+o[0]),.5*i[1]*(1-o[1])]}function s(t,e){for(var r\u003d[0,0,0],n\u003d0;n\u003ct.length;++n)for(var i\u003dt[n],a\u003de[n],o\u003d0;o\u003c3;++o)r[o]+\u003da*i[o];return r}e.exports\u003dfunction(t,e,r,a,l,c){if(1\u003d\u003d\u003dt.length)return[0,t[0].slice()];for(var u\u003dnew Array(t.length),f\u003d0;f\u003ct.length;++f)u[f]\u003do(t[f],r,a,l,c);var h\u003d0,p\u003d1/0;for(f\u003d0;f\u003cu.length;++f){for(var d\u003d0,m\u003d0;m\u003c2;++m)d+\u003dMath.pow(u[f][m]-e[m],2);d\u003cp\u0026\u0026(p\u003dd,h\u003df)}var g\u003dfunction(t,e){if(2\u003d\u003d\u003dt.length){for(var r\u003d0,a\u003d0,o\u003d0;o\u003c2;++o)r+\u003dMath.pow(e[o]-t[0][o],2),a+\u003dMath.pow(e[o]-t[1][o],2);return r\u003dMath.sqrt(r),a\u003dMath.sqrt(a),r+a\u003c1e-6?[1,0]:[a/(r+a),r/(a+r)]}if(3\u003d\u003d\u003dt.length){var s\u003d[0,0];return i(t[0],t[1],t[2],e,s),n(t,s)}return[]}(u,e),v\u003d0;for(f\u003d0;f\u003c3;++f){if(g[f]\u003c-.001||g[f]\u003e1.0001)return null;v+\u003dg[f]}if(Math.abs(v-1)\u003e.001)return null;return[h,s(t,g),g]}},{barycentric:85,\"polytope-closest-point/lib/closest_point_2d.js\":508}],310:[function(t,e,r){var n\u003dt(\"glslify\"),i\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, normal;\\nattribute vec4 color;\\nattribute vec2 uv;\\n\\nuniform mat4 model\\n           , view\\n           , projection\\n           , inverseModel;\\nuniform vec3 eyePosition\\n           , lightPosition;\\n\\nvarying vec3 f_normal\\n           , f_lightDirection\\n           , f_eyeDirection\\n           , f_data;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvec4 project(vec3 p) {\\n  return projection * view * model * vec4(p, 1.0);\\n}\\n\\nvoid main() {\\n  gl_Position      \u003d project(position);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate \u003d view * vec4(position , 1.0);\\n  cameraCoordinate.xyz /\u003d cameraCoordinate.w;\\n  f_lightDirection \u003d lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   \u003d eyePosition - cameraCoordinate.xyz;\\n  f_normal  \u003d normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  f_color          \u003d color;\\n  f_data           \u003d position;\\n  f_uv             \u003d uv;\\n}\\n\"]),a\u003dn([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH \u003d max(x, 0.0001);\\n  float cos2Alpha \u003d NdotH * NdotH;\\n  float tan2Alpha \u003d (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 \u003d roughness * roughness;\\n  float denom \u003d 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN \u003d max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN \u003d max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H \u003d normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH \u003d max(dot(surfaceNormal, H), 0.0);\\n  float VdotH \u003d max(dot(viewDirection, H), 0.000001);\\n  float LdotH \u003d max(dot(lightDirection, H), 0.000001);\\n  float G1 \u003d (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 \u003d (2.0 * NdotH * LdotN) / LdotH;\\n  float G \u003d min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D \u003d beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F \u003d pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\n//#pragma glslify: beckmann \u003d require(glsl-specular-beckmann) // used in gl-surface3d\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness\\n            , fresnel\\n            , kambient\\n            , kdiffuse\\n            , kspecular;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal\\n           , f_lightDirection\\n           , f_eyeDirection\\n           , f_data;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (f_color.a \u003d\u003d 0.0 ||\\n    outOfRange(clipBounds[0], clipBounds[1], f_data)\\n  ) discard;\\n\\n  vec3 N \u003d normalize(f_normal);\\n  vec3 L \u003d normalize(f_lightDirection);\\n  vec3 V \u003d normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N \u003d -N;\\n  }\\n\\n  float specular \u003d min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  //float specular \u003d max(0.0, beckmann(L, V, N, roughness)); // used in gl-surface3d\\n\\n  float diffuse  \u003d min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor \u003d vec4(f_color.rgb, 1.0) * texture2D(texture, f_uv);\\n  vec4 litColor \u003d surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor \u003d litColor * f_color.a;\\n}\\n\"]),o\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 uv;\\n\\nuniform mat4 model, view, projection;\\n\\nvarying vec4 f_color;\\nvarying vec3 f_data;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  gl_Position \u003d projection * view * model * vec4(position, 1.0);\\n  f_color \u003d color;\\n  f_data  \u003d position;\\n  f_uv    \u003d uv;\\n}\"]),s\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform sampler2D texture;\\nuniform float opacity;\\n\\nvarying vec4 f_color;\\nvarying vec3 f_data;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_data)) discard;\\n\\n  gl_FragColor \u003d f_color * texture2D(texture, f_uv) * opacity;\\n}\"]),l\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 uv;\\nattribute float pointSize;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position \u003d vec4(0.0, 0.0 ,0.0 ,0.0);\\n  } else {\\n    gl_Position \u003d projection * view * model * vec4(position, 1.0);\\n  }\\n  gl_PointSize \u003d pointSize;\\n  f_color \u003d color;\\n  f_uv \u003d uv;\\n}\"]),c\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D texture;\\nuniform float opacity;\\n\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  vec2 pointR \u003d gl_PointCoord.xy - vec2(0.5, 0.5);\\n  if(dot(pointR, pointR) \u003e 0.25) {\\n    discard;\\n  }\\n  gl_FragColor \u003d f_color * texture2D(texture, f_uv) * opacity;\\n}\"]),u\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  gl_Position \u003d projection * view * model * vec4(position, 1.0);\\n  f_id        \u003d id;\\n  f_position  \u003d position;\\n}\"]),f\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor \u003d vec4(pickId, f_id.xyz);\\n}\"]),h\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3  position;\\nattribute float pointSize;\\nattribute vec4  id;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position \u003d vec4(0.0, 0.0, 0.0, 0.0);\\n  } else {\\n    gl_Position  \u003d projection * view * model * vec4(position, 1.0);\\n    gl_PointSize \u003d pointSize;\\n  }\\n  f_id         \u003d id;\\n  f_position   \u003d position;\\n}\"]),p\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position;\\n\\nuniform mat4 model, view, projection;\\n\\nvoid main() {\\n  gl_Position \u003d projection * view * model * vec4(position, 1.0);\\n}\"]),d\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform vec3 contourColor;\\n\\nvoid main() {\\n  gl_FragColor \u003d vec4(contourColor, 1.0);\\n}\\n\"]);r.meshShader\u003d{vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"}]},r.wireShader\u003d{vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"}]},r.pointShader\u003d{vertex:l,fragment:c,attributes:[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"pointSize\",type:\"float\"}]},r.pickShader\u003d{vertex:u,fragment:f,attributes:[{name:\"position\",type:\"vec3\"},{name:\"id\",type:\"vec4\"}]},r.pointPickShader\u003d{vertex:h,fragment:f,attributes:[{name:\"position\",type:\"vec3\"},{name:\"pointSize\",type:\"float\"},{name:\"id\",type:\"vec4\"}]},r.contourShader\u003d{vertex:p,fragment:d,attributes:[{name:\"position\",type:\"vec3\"}]}},{glslify:438}],311:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-shader\"),i\u003dt(\"gl-buffer\"),a\u003dt(\"gl-vao\"),o\u003dt(\"gl-texture2d\"),s\u003dt(\"normals\"),l\u003dt(\"gl-mat4/multiply\"),c\u003dt(\"gl-mat4/invert\"),u\u003dt(\"ndarray\"),f\u003dt(\"colormap\"),h\u003dt(\"simplicial-complex-contour\"),p\u003dt(\"typedarray-pool\"),d\u003dt(\"./lib/shaders\"),m\u003dt(\"./lib/closest-point\"),g\u003dd.meshShader,v\u003dd.wireShader,y\u003dd.pointShader,x\u003dd.pickShader,b\u003dd.pointPickShader,_\u003dd.contourShader,w\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function T(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g,v,y,x,b,_,T,k,M,A,S){this.gl\u003dt,this.pixelRatio\u003d1,this.cells\u003d[],this.positions\u003d[],this.intensity\u003d[],this.texture\u003de,this.dirty\u003d!0,this.triShader\u003dr,this.lineShader\u003dn,this.pointShader\u003di,this.pickShader\u003da,this.pointPickShader\u003do,this.contourShader\u003ds,this.trianglePositions\u003dl,this.triangleColors\u003du,this.triangleNormals\u003dh,this.triangleUVs\u003df,this.triangleIds\u003dc,this.triangleVAO\u003dp,this.triangleCount\u003d0,this.lineWidth\u003d1,this.edgePositions\u003dd,this.edgeColors\u003dg,this.edgeUVs\u003dv,this.edgeIds\u003dm,this.edgeVAO\u003dy,this.edgeCount\u003d0,this.pointPositions\u003dx,this.pointColors\u003d_,this.pointUVs\u003dT,this.pointSizes\u003dk,this.pointIds\u003db,this.pointVAO\u003dM,this.pointCount\u003d0,this.contourLineWidth\u003d1,this.contourPositions\u003dA,this.contourVAO\u003dS,this.contourCount\u003d0,this.contourColor\u003d[0,0,0],this.contourEnable\u003d!0,this.pickVertex\u003d!0,this.pickId\u003d1,this.bounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition\u003d[1e5,1e5,0],this.ambientLight\u003d.8,this.diffuseLight\u003d.8,this.specularLight\u003d2,this.roughness\u003d.5,this.fresnel\u003d1.5,this.opacity\u003d1,this.hasAlpha\u003d!1,this.opacityscale\u003d!1,this._model\u003dw,this._view\u003dw,this._projection\u003dw,this._resolution\u003d[1,1]}var k\u003dT.prototype;function M(t,e){if(!e)return 1;if(!e.length)return 1;for(var r\u003d0;r\u003ce.length;++r){if(e.length\u003c2)return 1;if(e[r][0]\u003d\u003d\u003dt)return e[r][1];if(e[r][0]\u003et\u0026\u0026r\u003e0){var n\u003d(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}function A(t){var e\u003dn(t,g.vertex,g.fragment);return e.attributes.position.location\u003d0,e.attributes.color.location\u003d2,e.attributes.uv.location\u003d3,e.attributes.normal.location\u003d4,e}function S(t){var e\u003dn(t,v.vertex,v.fragment);return e.attributes.position.location\u003d0,e.attributes.color.location\u003d2,e.attributes.uv.location\u003d3,e}function E(t){var e\u003dn(t,y.vertex,y.fragment);return e.attributes.position.location\u003d0,e.attributes.color.location\u003d2,e.attributes.uv.location\u003d3,e.attributes.pointSize.location\u003d4,e}function L(t){var e\u003dn(t,x.vertex,x.fragment);return e.attributes.position.location\u003d0,e.attributes.id.location\u003d1,e}function C(t){var e\u003dn(t,b.vertex,b.fragment);return e.attributes.position.location\u003d0,e.attributes.id.location\u003d1,e.attributes.pointSize.location\u003d4,e}function P(t){var e\u003dn(t,_.vertex,_.fragment);return e.attributes.position.location\u003d0,e}k.isOpaque\u003dfunction(){return!this.hasAlpha},k.isTransparent\u003dfunction(){return this.hasAlpha},k.pickSlots\u003d1,k.setPickBase\u003dfunction(t){this.pickId\u003dt},k.highlight\u003dfunction(t){if(t\u0026\u0026this.contourEnable){for(var e\u003dh(this.cells,this.intensity,t.intensity),r\u003de.cells,n\u003de.vertexIds,i\u003de.vertexWeights,a\u003dr.length,o\u003dp.mallocFloat32(6*a),s\u003d0,l\u003d0;l\u003ca;++l)for(var c\u003dr[l],u\u003d0;u\u003c2;++u){var f\u003dc[0];2\u003d\u003d\u003dc.length\u0026\u0026(f\u003dc[u]);for(var d\u003dn[f][0],m\u003dn[f][1],g\u003di[f],v\u003d1-g,y\u003dthis.positions[d],x\u003dthis.positions[m],b\u003d0;b\u003c3;++b)o[s++]\u003dg*y[b]+v*x[b]}this.contourCount\u003ds/3|0,this.contourPositions.update(o.subarray(0,s)),p.free(o)}else this.contourCount\u003d0},k.update\u003dfunction(t){t\u003dt||{};var e\u003dthis.gl;this.dirty\u003d!0,\"contourEnable\"in t\u0026\u0026(this.contourEnable\u003dt.contourEnable),\"contourColor\"in t\u0026\u0026(this.contourColor\u003dt.contourColor),\"lineWidth\"in t\u0026\u0026(this.lineWidth\u003dt.lineWidth),\"lightPosition\"in t\u0026\u0026(this.lightPosition\u003dt.lightPosition),this.hasAlpha\u003d!1,\"opacity\"in t\u0026\u0026(this.opacity\u003dt.opacity,this.opacity\u003c1\u0026\u0026(this.hasAlpha\u003d!0)),\"opacityscale\"in t\u0026\u0026(this.opacityscale\u003dt.opacityscale,this.hasAlpha\u003d!0),\"ambient\"in t\u0026\u0026(this.ambientLight\u003dt.ambient),\"diffuse\"in t\u0026\u0026(this.diffuseLight\u003dt.diffuse),\"specular\"in t\u0026\u0026(this.specularLight\u003dt.specular),\"roughness\"in t\u0026\u0026(this.roughness\u003dt.roughness),\"fresnel\"in t\u0026\u0026(this.fresnel\u003dt.fresnel),t.texture?(this.texture.dispose(),this.texture\u003do(e,t.texture)):t.colormap\u0026\u0026(this.texture.shape\u003d[256,256],this.texture.minFilter\u003de.LINEAR_MIPMAP_LINEAR,this.texture.magFilter\u003de.LINEAR,this.texture.setPixels(function(t,e){for(var r\u003df({colormap:t,nshades:256,format:\"rgba\"}),n\u003dnew Uint8Array(1024),i\u003d0;i\u003c256;++i){for(var a\u003dr[i],o\u003d0;o\u003c3;++o)n[4*i+o]\u003da[o];n[4*i+3]\u003de?255*M(i/255,e):255*a[3]}return u(n,[256,256,4],[4,0,1])}(t.colormap,this.opacityscale)),this.texture.generateMipmap());var r\u003dt.cells,n\u003dt.positions;if(n\u0026\u0026r){var i\u003d[],a\u003d[],l\u003d[],c\u003d[],h\u003d[],p\u003d[],d\u003d[],m\u003d[],g\u003d[],v\u003d[],y\u003d[],x\u003d[],b\u003d[],_\u003d[];this.cells\u003dr,this.positions\u003dn;var w\u003dt.vertexNormals,T\u003dt.cellNormals,k\u003dvoid 0\u003d\u003d\u003dt.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,A\u003dvoid 0\u003d\u003d\u003dt.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals\u0026\u0026!T\u0026\u0026(T\u003ds.faceNormals(r,n,A)),T||w||(w\u003ds.vertexNormals(r,n,k));var S\u003dt.vertexColors,E\u003dt.cellColors,L\u003dt.meshColor||[1,1,1,1],C\u003dt.vertexUVs,P\u003dt.vertexIntensity,I\u003dt.cellUVs,O\u003dt.cellIntensity,z\u003d1/0,D\u003d-1/0;if(!C\u0026\u0026!I)if(P)if(t.vertexIntensityBounds)z\u003d+t.vertexIntensityBounds[0],D\u003d+t.vertexIntensityBounds[1];else for(var R\u003d0;R\u003cP.length;++R){var F\u003dP[R];z\u003dMath.min(z,F),D\u003dMath.max(D,F)}else if(O)if(t.cellIntensityBounds)z\u003d+t.cellIntensityBounds[0],D\u003d+t.cellIntensityBounds[1];else for(R\u003d0;R\u003cO.length;++R){F\u003dO[R];z\u003dMath.min(z,F),D\u003dMath.max(D,F)}else for(R\u003d0;R\u003cn.length;++R){F\u003dn[R][2];z\u003dMath.min(z,F),D\u003dMath.max(D,F)}this.intensity\u003dP||(O||function(t){for(var e\u003dt.length,r\u003dnew Array(e),n\u003d0;n\u003ce;++n)r[n]\u003dt[n][2];return r}(n)),this.pickVertex\u003d!(O||E);var B\u003dt.pointSizes,N\u003dt.pointSize||1;this.bounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(R\u003d0;R\u003cn.length;++R)for(var j\u003dn[R],U\u003d0;U\u003c3;++U)!isNaN(j[U])\u0026\u0026isFinite(j[U])\u0026\u0026(this.bounds[0][U]\u003dMath.min(this.bounds[0][U],j[U]),this.bounds[1][U]\u003dMath.max(this.bounds[1][U],j[U]));var V\u003d0,q\u003d0,H\u003d0;t:for(R\u003d0;R\u003cr.length;++R){var G\u003dr[R];switch(G.length){case 1:for(j\u003dn[W\u003dG[0]],U\u003d0;U\u003c3;++U)if(isNaN(j[U])||!isFinite(j[U]))continue t;v.push(j[0],j[1],j[2]),X\u003dS?S[W]:E?E[R]:L,this.opacityscale\u0026\u0026P?a.push(X[0],X[1],X[2],this.opacity*M((P[W]-z)/(D-z),this.opacityscale)):3\u003d\u003d\u003dX.length?y.push(X[0],X[1],X[2],this.opacity):(y.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]\u003c1\u0026\u0026(this.hasAlpha\u003d!0)),Z\u003dC?C[W]:P?[(P[W]-z)/(D-z),0]:I?I[R]:O?[(O[R]-z)/(D-z),0]:[(j[2]-z)/(D-z),0],x.push(Z[0],Z[1]),B?b.push(B[W]):b.push(N),_.push(R),H+\u003d1;break;case 2:for(U\u003d0;U\u003c2;++U){j\u003dn[W\u003dG[U]];for(var Y\u003d0;Y\u003c3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t}for(U\u003d0;U\u003c2;++U){j\u003dn[W\u003dG[U]];p.push(j[0],j[1],j[2]),X\u003dS?S[W]:E?E[R]:L,this.opacityscale\u0026\u0026P?a.push(X[0],X[1],X[2],this.opacity*M((P[W]-z)/(D-z),this.opacityscale)):3\u003d\u003d\u003dX.length?d.push(X[0],X[1],X[2],this.opacity):(d.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]\u003c1\u0026\u0026(this.hasAlpha\u003d!0)),Z\u003dC?C[W]:P?[(P[W]-z)/(D-z),0]:I?I[R]:O?[(O[R]-z)/(D-z),0]:[(j[2]-z)/(D-z),0],m.push(Z[0],Z[1]),g.push(R)}q+\u003d1;break;case 3:for(U\u003d0;U\u003c3;++U)for(j\u003dn[W\u003dG[U]],Y\u003d0;Y\u003c3;++Y)if(isNaN(j[Y])||!isFinite(j[Y]))continue t;for(U\u003d0;U\u003c3;++U){var W,X,Z,J;j\u003dn[W\u003dG[2-U]];i.push(j[0],j[1],j[2]),(X\u003dS?S[W]:E?E[R]:L)?this.opacityscale\u0026\u0026P?a.push(X[0],X[1],X[2],this.opacity*M((P[W]-z)/(D-z),this.opacityscale)):3\u003d\u003d\u003dX.length?a.push(X[0],X[1],X[2],this.opacity):(a.push(X[0],X[1],X[2],X[3]*this.opacity),X[3]\u003c1\u0026\u0026(this.hasAlpha\u003d!0)):a.push(.5,.5,.5,1),Z\u003dC?C[W]:P?[(P[W]-z)/(D-z),0]:I?I[R]:O?[(O[R]-z)/(D-z),0]:[(j[2]-z)/(D-z),0],c.push(Z[0],Z[1]),J\u003dw?w[W]:T[R],l.push(J[0],J[1],J[2]),h.push(R)}V+\u003d1}}this.pointCount\u003dH,this.edgeCount\u003dq,this.triangleCount\u003dV,this.pointPositions.update(v),this.pointColors.update(y),this.pointUVs.update(x),this.pointSizes.update(b),this.pointIds.update(new Uint32Array(_)),this.edgePositions.update(p),this.edgeColors.update(d),this.edgeUVs.update(m),this.edgeIds.update(new Uint32Array(g)),this.trianglePositions.update(i),this.triangleColors.update(a),this.triangleUVs.update(c),this.triangleNormals.update(l),this.triangleIds.update(new Uint32Array(h))}},k.drawTransparent\u003dk.draw\u003dfunction(t){t\u003dt||{};for(var e\u003dthis.gl,r\u003dt.model||w,n\u003dt.view||w,i\u003dt.projection||w,a\u003d[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o\u003d0;o\u003c3;++o)a[0][o]\u003dMath.max(a[0][o],this.clipBounds[0][o]),a[1][o]\u003dMath.min(a[1][o],this.clipBounds[1][o]);var s\u003d{model:r,view:n,projection:i,inverseModel:w.slice(),clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],contourColor:this.contourColor,texture:0};s.inverseModel\u003dc(s.inverseModel,s.model),e.disable(e.CULL_FACE),this.texture.bind(0);var u\u003dnew Array(16);l(u,s.view,s.model),l(u,s.projection,u),c(u,u);for(o\u003d0;o\u003c3;++o)s.eyePosition[o]\u003du[12+o]/u[15];var f,h\u003du[15];for(o\u003d0;o\u003c3;++o)h+\u003dthis.lightPosition[o]*u[4*o+3];for(o\u003d0;o\u003c3;++o){for(var p\u003du[12+o],d\u003d0;d\u003c3;++d)p+\u003du[4*d+o]*this.lightPosition[d];s.lightPosition[o]\u003dp/h}this.triangleCount\u003e0\u0026\u0026((f\u003dthis.triShader).bind(),f.uniforms\u003ds,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind());this.edgeCount\u003e0\u0026\u0026this.lineWidth\u003e0\u0026\u0026((f\u003dthis.lineShader).bind(),f.uniforms\u003ds,this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind());this.pointCount\u003e0\u0026\u0026((f\u003dthis.pointShader).bind(),f.uniforms\u003ds,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind());this.contourEnable\u0026\u0026this.contourCount\u003e0\u0026\u0026this.contourLineWidth\u003e0\u0026\u0026((f\u003dthis.contourShader).bind(),f.uniforms\u003ds,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind())},k.drawPick\u003dfunction(t){t\u003dt||{};for(var e\u003dthis.gl,r\u003dt.model||w,n\u003dt.view||w,i\u003dt.projection||w,a\u003d[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o\u003d0;o\u003c3;++o)a[0][o]\u003dMath.max(a[0][o],this.clipBounds[0][o]),a[1][o]\u003dMath.min(a[1][o],this.clipBounds[1][o]);this._model\u003d[].slice.call(r),this._view\u003d[].slice.call(n),this._projection\u003d[].slice.call(i),this._resolution\u003d[e.drawingBufferWidth,e.drawingBufferHeight];var s,l\u003d{model:r,view:n,projection:i,clipBounds:a,pickId:this.pickId/255};((s\u003dthis.pickShader).bind(),s.uniforms\u003dl,this.triangleCount\u003e0\u0026\u0026(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount\u003e0\u0026\u0026(this.edgeVAO.bind(),e.lineWidth(this.lineWidth*this.pixelRatio),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount\u003e0)\u0026\u0026((s\u003dthis.pointPickShader).bind(),s.uniforms\u003dl,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind())},k.pick\u003dfunction(t){if(!t)return null;if(t.id!\u003d\u003dthis.pickId)return null;for(var e\u003dt.value[0]+256*t.value[1]+65536*t.value[2],r\u003dthis.cells[e],n\u003dthis.positions,i\u003dnew Array(r.length),a\u003d0;a\u003cr.length;++a)i[a]\u003dn[r[a]];var o\u003dt.coord[0],s\u003dt.coord[1];if(!this.pickVertex){var l\u003dthis.positions[r[0]],c\u003dthis.positions[r[1]],u\u003dthis.positions[r[2]],f\u003d[(l[0]+c[0]+u[0])/3,(l[1]+c[1]+u[1])/3,(l[2]+c[2]+u[2])/3];return{_cellCenter:!0,position:[o,s],index:e,cell:r,cellId:e,intensity:this.intensity[e],dataCoordinate:f}}var h\u003dm(i,[o*this.pixelRatio,this._resolution[1]-s*this.pixelRatio],this._model,this._view,this._projection,this._resolution);if(!h)return null;var p\u003dh[2],d\u003d0;for(a\u003d0;a\u003cr.length;++a)d+\u003dp[a]*this.intensity[r[a]];return{position:h[1],index:r[h[0]],cell:r,cellId:e,intensity:d,dataCoordinate:this.positions[r[h[0]]]}},k.dispose\u003dfunction(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},e.exports\u003dfunction(t,e){1\u003d\u003d\u003darguments.length\u0026\u0026(t\u003d(e\u003dt).gl);var r\u003dt.getExtension(\"OES_standard_derivatives\")||t.getExtension(\"MOZ_OES_standard_derivatives\")||t.getExtension(\"WEBKIT_OES_standard_derivatives\");if(!r)throw new Error(\"derivatives not supported\");var n\u003dA(t),s\u003dS(t),l\u003dE(t),c\u003dL(t),f\u003dC(t),h\u003dP(t),p\u003do(t,u(new Uint8Array([255,255,255,255]),[1,1,4]));p.generateMipmap(),p.minFilter\u003dt.LINEAR_MIPMAP_LINEAR,p.magFilter\u003dt.LINEAR;var d\u003di(t),m\u003di(t),g\u003di(t),v\u003di(t),y\u003di(t),x\u003da(t,[{buffer:d,type:t.FLOAT,size:3},{buffer:y,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:m,type:t.FLOAT,size:4},{buffer:g,type:t.FLOAT,size:2},{buffer:v,type:t.FLOAT,size:3}]),b\u003di(t),_\u003di(t),w\u003di(t),k\u003di(t),M\u003da(t,[{buffer:b,type:t.FLOAT,size:3},{buffer:k,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:_,type:t.FLOAT,size:4},{buffer:w,type:t.FLOAT,size:2}]),I\u003di(t),O\u003di(t),z\u003di(t),D\u003di(t),R\u003di(t),F\u003da(t,[{buffer:I,type:t.FLOAT,size:3},{buffer:R,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:O,type:t.FLOAT,size:4},{buffer:z,type:t.FLOAT,size:2},{buffer:D,type:t.FLOAT,size:1}]),B\u003di(t),N\u003da(t,[{buffer:B,type:t.FLOAT,size:3}]),j\u003dnew T(t,p,n,s,l,c,f,h,d,y,m,g,v,x,b,k,_,w,M,I,R,O,z,D,F,B,N);return j.update(e),j}},{\"./lib/closest-point\":309,\"./lib/shaders\":310,colormap:137,\"gl-buffer\":263,\"gl-mat4/invert\":295,\"gl-mat4/multiply\":297,\"gl-shader\":335,\"gl-texture2d\":352,\"gl-vao\":357,ndarray:479,normals:482,\"simplicial-complex-contour\":553,\"typedarray-pool\":613}],312:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dn(e,[0,0,0,1,1,0,1,1]),s\u003di(e,a.boxVert,a.lineFrag);return new o(t,r,s)};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-shader\"),a\u003dt(\"./shaders\");function o(t,e,r){this.plot\u003dt,this.vbo\u003de,this.shader\u003dr}var s,l,c\u003do.prototype;c.bind\u003dfunction(){var t\u003dthis.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox\u003dthis.plot.screenBox},c.drawBox\u003d(s\u003d[0,0],l\u003d[0,0],function(t,e,r,n,i){var a\u003dthis.plot,o\u003dthis.shader,c\u003da.gl;s[0]\u003dt,s[1]\u003de,l[0]\u003dr,l[1]\u003dn,o.uniforms.lo\u003ds,o.uniforms.hi\u003dl,o.uniforms.color\u003di,c.drawArrays(c.TRIANGLE_STRIP,0,4)}),c.dispose\u003dfunction(){this.vbo.dispose(),this.shader.dispose()}},{\"./shaders\":315,\"gl-buffer\":263,\"gl-shader\":335}],313:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dn(e),a\u003di(e,o.gridVert,o.gridFrag),l\u003di(e,o.tickVert,o.gridFrag);return new s(t,r,a,l)};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-shader\"),a\u003dt(\"binary-search-bounds\"),o\u003dt(\"./shaders\");function s(t,e,r,n){this.plot\u003dt,this.vbo\u003de,this.shader\u003dr,this.tickShader\u003dn,this.ticks\u003d[[],[]]}function l(t,e){return t-e}var c,u,f,h,p,d\u003ds.prototype;d.draw\u003d(c\u003d[0,0],u\u003d[0,0],f\u003d[0,0],function(){for(var t\u003dthis.plot,e\u003dthis.vbo,r\u003dthis.shader,n\u003dthis.ticks,i\u003dt.gl,a\u003dt._tickBounds,o\u003dt.dataBox,s\u003dt.viewBox,l\u003dt.gridLineWidth,h\u003dt.gridLineColor,p\u003dt.gridLineEnable,d\u003dt.pixelRatio,m\u003d0;m\u003c2;++m){var g\u003da[m],v\u003da[m+2]-g,y\u003d.5*(o[m+2]+o[m]),x\u003do[m+2]-o[m];u[m]\u003d2*v/x,c[m]\u003d2*(g-y)/x}r.bind(),e.bind(),r.attributes.dataCoord.pointer(),r.uniforms.dataShift\u003dc,r.uniforms.dataScale\u003du;var b\u003d0;for(m\u003d0;m\u003c2;++m){f[0]\u003df[1]\u003d0,f[m]\u003d1,r.uniforms.dataAxis\u003df,r.uniforms.lineWidth\u003dl[m]/(s[m+2]-s[m])*d,r.uniforms.color\u003dh[m];var _\u003d6*n[m].length;p[m]\u0026\u0026_\u0026\u0026i.drawArrays(i.TRIANGLES,b,_),b+\u003d_}}),d.drawTickMarks\u003dfunction(){var t\u003d[0,0],e\u003d[0,0],r\u003d[1,0],n\u003d[0,1],i\u003d[0,0],o\u003d[0,0];return function(){for(var s\u003dthis.plot,c\u003dthis.vbo,u\u003dthis.tickShader,f\u003dthis.ticks,h\u003ds.gl,p\u003ds._tickBounds,d\u003ds.dataBox,m\u003ds.viewBox,g\u003ds.pixelRatio,v\u003ds.screenBox,y\u003dv[2]-v[0],x\u003dv[3]-v[1],b\u003dm[2]-m[0],_\u003dm[3]-m[1],w\u003d0;w\u003c2;++w){var T\u003dp[w],k\u003dp[w+2]-T,M\u003d.5*(d[w+2]+d[w]),A\u003dd[w+2]-d[w];e[w]\u003d2*k/A,t[w]\u003d2*(T-M)/A}e[0]*\u003db/y,t[0]*\u003db/y,e[1]*\u003d_/x,t[1]*\u003d_/x,u.bind(),c.bind(),u.attributes.dataCoord.pointer();var S\u003du.uniforms;S.dataShift\u003dt,S.dataScale\u003de;var E\u003ds.tickMarkLength,L\u003ds.tickMarkWidth,C\u003ds.tickMarkColor,P\u003d6*f[0].length,I\u003dMath.min(a.ge(f[0],(d[0]-p[0])/(p[2]-p[0]),l),f[0].length),O\u003dMath.min(a.gt(f[0],(d[2]-p[0])/(p[2]-p[0]),l),f[0].length),z\u003d0+6*I,D\u003d6*Math.max(0,O-I),R\u003dMath.min(a.ge(f[1],(d[1]-p[1])/(p[3]-p[1]),l),f[1].length),F\u003dMath.min(a.gt(f[1],(d[3]-p[1])/(p[3]-p[1]),l),f[1].length),B\u003dP+6*R,N\u003d6*Math.max(0,F-R);i[0]\u003d2*(m[0]-E[1])/y-1,i[1]\u003d(m[3]+m[1])/x-1,o[0]\u003dE[1]*g/y,o[1]\u003dL[1]*g/x,N\u0026\u0026(S.color\u003dC[1],S.tickScale\u003do,S.dataAxis\u003dn,S.screenOffset\u003di,h.drawArrays(h.TRIANGLES,B,N)),i[0]\u003d(m[2]+m[0])/y-1,i[1]\u003d2*(m[1]-E[0])/x-1,o[0]\u003dL[0]*g/y,o[1]\u003dE[0]*g/x,D\u0026\u0026(S.color\u003dC[0],S.tickScale\u003do,S.dataAxis\u003dr,S.screenOffset\u003di,h.drawArrays(h.TRIANGLES,z,D)),i[0]\u003d2*(m[2]+E[3])/y-1,i[1]\u003d(m[3]+m[1])/x-1,o[0]\u003dE[3]*g/y,o[1]\u003dL[3]*g/x,N\u0026\u0026(S.color\u003dC[3],S.tickScale\u003do,S.dataAxis\u003dn,S.screenOffset\u003di,h.drawArrays(h.TRIANGLES,B,N)),i[0]\u003d(m[2]+m[0])/y-1,i[1]\u003d2*(m[3]+E[2])/x-1,o[0]\u003dL[2]*g/y,o[1]\u003dE[2]*g/x,D\u0026\u0026(S.color\u003dC[2],S.tickScale\u003do,S.dataAxis\u003dr,S.screenOffset\u003di,h.drawArrays(h.TRIANGLES,z,D))}}(),d.update\u003d(h\u003d[1,1,-1,-1,1,-1],p\u003d[1,-1,1,1,-1,-1],function(t){for(var e\u003dt.ticks,r\u003dt.bounds,n\u003dnew Float32Array(18*(e[0].length+e[1].length)),i\u003d(this.plot.zeroLineEnable,0),a\u003d[[],[]],o\u003d0;o\u003c2;++o)for(var s\u003da[o],l\u003de[o],c\u003dr[o],u\u003dr[o+2],f\u003d0;f\u003cl.length;++f){var d\u003d(l[f].x-c)/(u-c);s.push(d);for(var m\u003d0;m\u003c6;++m)n[i++]\u003dd,n[i++]\u003dh[m],n[i++]\u003dp[m]}this.ticks\u003da,this.vbo.update(n)}),d.dispose\u003dfunction(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},{\"./shaders\":315,\"binary-search-bounds\":103,\"gl-buffer\":263,\"gl-shader\":335}],314:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dn(e,[-1,-1,-1,1,1,-1,1,1]),s\u003di(e,a.lineVert,a.lineFrag);return new o(t,r,s)};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-shader\"),a\u003dt(\"./shaders\");function o(t,e,r){this.plot\u003dt,this.vbo\u003de,this.shader\u003dr}var s,l,c\u003do.prototype;c.bind\u003dfunction(){var t\u003dthis.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox\u003dthis.plot.screenBox},c.drawLine\u003d(s\u003d[0,0],l\u003d[0,0],function(t,e,r,n,i,a){var o\u003dthis.plot,c\u003dthis.shader,u\u003do.gl;s[0]\u003dt,s[1]\u003de,l[0]\u003dr,l[1]\u003dn,c.uniforms.start\u003ds,c.uniforms.end\u003dl,c.uniforms.width\u003di*o.pixelRatio,c.uniforms.color\u003da,u.drawArrays(u.TRIANGLE_STRIP,0,4)}),c.dispose\u003dfunction(){this.vbo.dispose(),this.shader.dispose()}},{\"./shaders\":315,\"gl-buffer\":263,\"gl-shader\":335}],315:[function(t,e,r){\"use strict\";var n\u003dt(\"glslify\"),i\u003dn([\"precision lowp float;\\n#define GLSLIFY 1\\nuniform vec4 color;\\nvoid main() {\\n  gl_FragColor \u003d vec4(color.xyz * color.w, color.w);\\n}\\n\"]);e.exports\u003d{lineVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 coord;\\n\\nuniform vec4 screenBox;\\nuniform vec2 start, end;\\nuniform float width;\\n\\nvec2 perp(vec2 v) {\\n  return vec2(v.y, -v.x);\\n}\\n\\nvec2 screen(vec2 v) {\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\n}\\n\\nvoid main() {\\n  vec2 delta \u003d normalize(perp(start - end));\\n  vec2 offset \u003d mix(start, end, 0.5 * (coord.y+1.0));\\n  gl_Position \u003d vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\\n}\\n\"]),lineFrag:i,textVert:n([\"#define GLSLIFY 1\\nattribute vec3 textCoordinate;\\n\\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\\nuniform float angle;\\n\\nvoid main() {\\n  float dataOffset  \u003d textCoordinate.z;\\n  vec2 glyphOffset  \u003d textCoordinate.xy;\\n  mat2 glyphMatrix \u003d mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\\n  vec2 screenCoordinate \u003d dataAxis * (dataScale * dataOffset + dataShift) +\\n    glyphMatrix * glyphOffset * textScale + screenOffset;\\n  gl_Position \u003d vec4(screenCoordinate, 0, 1);\\n}\\n\"]),textFrag:i,gridVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 dataCoord;\\n\\nuniform vec2 dataAxis, dataShift, dataScale;\\nuniform float lineWidth;\\n\\nvoid main() {\\n  vec2 pos \u003d dataAxis * (dataScale * dataCoord.x + dataShift);\\n  pos +\u003d 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\\n  gl_Position \u003d vec4(pos, 0, 1);\\n}\\n\"]),gridFrag:i,boxVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 coord;\\n\\nuniform vec4 screenBox;\\nuniform vec2 lo, hi;\\n\\nvec2 screen(vec2 v) {\\n  return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\\n}\\n\\nvoid main() {\\n  gl_Position \u003d vec4(screen(mix(lo, hi, coord)), 0, 1);\\n}\\n\"]),tickVert:n([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 dataCoord;\\n\\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\\n\\nvoid main() {\\n  vec2 pos \u003d dataAxis * (dataScale * dataCoord.x + dataShift);\\n  gl_Position \u003d vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\\n}\\n\"])}},{glslify:317}],316:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dn(e),a\u003di(e,s.textVert,s.textFrag);return new l(t,r,a)};var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-shader\"),a\u003dt(\"text-cache\"),o\u003dt(\"binary-search-bounds\"),s\u003dt(\"./shaders\");function l(t,e,r){this.plot\u003dt,this.vbo\u003de,this.shader\u003dr,this.tickOffset\u003d[[],[]],this.tickX\u003d[[],[]],this.labelOffset\u003d[0,0],this.labelCount\u003d[0,0]}var c,u,f,h,p,d,m\u003dl.prototype;m.drawTicks\u003d(c\u003d[0,0],u\u003d[0,0],f\u003d[0,0],function(t){var e\u003dthis.plot,r\u003dthis.shader,n\u003dthis.tickX[t],i\u003dthis.tickOffset[t],a\u003de.gl,s\u003de.viewBox,l\u003de.dataBox,h\u003de.screenBox,p\u003de.pixelRatio,d\u003de.tickEnable,m\u003de.tickPad,g\u003de.tickColor,v\u003de.tickAngle,y\u003de.labelEnable,x\u003de.labelPad,b\u003de.labelColor,_\u003de.labelAngle,w\u003dthis.labelOffset[t],T\u003dthis.labelCount[t],k\u003do.lt(n,l[t]),M\u003do.le(n,l[t+2]);c[0]\u003dc[1]\u003d0,c[t]\u003d1,u[t]\u003d(s[2+t]+s[t])/(h[2+t]-h[t])-1;var A\u003d2/h[2+(1^t)]-h[1^t];u[1^t]\u003dA*s[1^t]-1,d[t]\u0026\u0026(u[1^t]-\u003dA*p*m[t],k\u003cM\u0026\u0026i[M]\u003ei[k]\u0026\u0026(r.uniforms.dataAxis\u003dc,r.uniforms.screenOffset\u003du,r.uniforms.color\u003dg[t],r.uniforms.angle\u003dv[t],a.drawArrays(a.TRIANGLES,i[k],i[M]-i[k]))),y[t]\u0026\u0026T\u0026\u0026(u[1^t]-\u003dA*p*x[t],r.uniforms.dataAxis\u003df,r.uniforms.screenOffset\u003du,r.uniforms.color\u003db[t],r.uniforms.angle\u003d_[t],a.drawArrays(a.TRIANGLES,w,T)),u[1^t]\u003dA*s[2+(1^t)]-1,d[t+2]\u0026\u0026(u[1^t]+\u003dA*p*m[t+2],k\u003cM\u0026\u0026i[M]\u003ei[k]\u0026\u0026(r.uniforms.dataAxis\u003dc,r.uniforms.screenOffset\u003du,r.uniforms.color\u003dg[t+2],r.uniforms.angle\u003dv[t+2],a.drawArrays(a.TRIANGLES,i[k],i[M]-i[k]))),y[t+2]\u0026\u0026T\u0026\u0026(u[1^t]+\u003dA*p*x[t+2],r.uniforms.dataAxis\u003df,r.uniforms.screenOffset\u003du,r.uniforms.color\u003db[t+2],r.uniforms.angle\u003d_[t+2],a.drawArrays(a.TRIANGLES,w,T))}),m.drawTitle\u003dfunction(){var t\u003d[0,0],e\u003d[0,0];return function(){var r\u003dthis.plot,n\u003dthis.shader,i\u003dr.gl,a\u003dr.screenBox,o\u003dr.titleCenter,s\u003dr.titleAngle,l\u003dr.titleColor,c\u003dr.pixelRatio;if(this.titleCount){for(var u\u003d0;u\u003c2;++u)e[u]\u003d2*(o[u]*c-a[u])/(a[2+u]-a[u])-1;n.bind(),n.uniforms.dataAxis\u003dt,n.uniforms.screenOffset\u003de,n.uniforms.angle\u003ds,n.uniforms.color\u003dl,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),m.bind\u003d(h\u003d[0,0],p\u003d[0,0],d\u003d[0,0],function(){var t\u003dthis.plot,e\u003dthis.shader,r\u003dt._tickBounds,n\u003dt.dataBox,i\u003dt.screenBox,a\u003dt.viewBox;e.bind();for(var o\u003d0;o\u003c2;++o){var s\u003dr[o],l\u003dr[o+2]-s,c\u003d.5*(n[o+2]+n[o]),u\u003dn[o+2]-n[o],f\u003da[o],m\u003da[o+2]-f,g\u003di[o],v\u003di[o+2]-g;p[o]\u003d2*l/u*m/v,h[o]\u003d2*(s-c)/u*m/v}d[1]\u003d2*t.pixelRatio/(i[3]-i[1]),d[0]\u003dd[1]*(i[3]-i[1])/(i[2]-i[0]),e.uniforms.dataScale\u003dp,e.uniforms.dataShift\u003dh,e.uniforms.textScale\u003dd,this.vbo.bind(),e.attributes.textCoordinate.pointer()}),m.update\u003dfunction(t){var e,r,n,i,o,s\u003d[],l\u003dt.ticks,c\u003dt.bounds;for(o\u003d0;o\u003c2;++o){var u\u003d[Math.floor(s.length/3)],f\u003d[-1/0],h\u003dl[o];for(e\u003d0;e\u003ch.length;++e){var p\u003dh[e],d\u003dp.x,m\u003dp.text,g\u003dp.font||\"sans-serif\";i\u003dp.fontSize||12;for(var v\u003d1/(c[o+2]-c[o]),y\u003dc[o],x\u003dm.split(\"\\n\"),b\u003d0;b\u003cx.length;b++)for(n\u003da(g,x[b]).data,r\u003d0;r\u003cn.length;r+\u003d2)s.push(n[r]*i,-n[r+1]*i-b*i*1.2,(d-y)*v);u.push(Math.floor(s.length/3)),f.push(d)}this.tickOffset[o]\u003du,this.tickX[o]\u003df}for(o\u003d0;o\u003c2;++o){for(this.labelOffset[o]\u003dMath.floor(s.length/3),n\u003da(t.labelFont[o],t.labels[o],{textAlign:\"center\"}).data,i\u003dt.labelSize[o],e\u003d0;e\u003cn.length;e+\u003d2)s.push(n[e]*i,-n[e+1]*i,0);this.labelCount[o]\u003dMath.floor(s.length/3)-this.labelOffset[o]}for(this.titleOffset\u003dMath.floor(s.length/3),n\u003da(t.titleFont,t.title).data,i\u003dt.titleSize,e\u003d0;e\u003cn.length;e+\u003d2)s.push(n[e]*i,-n[e+1]*i,0);this.titleCount\u003dMath.floor(s.length/3)-this.titleOffset,this.vbo.update(s)},m.dispose\u003dfunction(){this.vbo.dispose(),this.shader.dispose()}},{\"./shaders\":315,\"binary-search-bounds\":103,\"gl-buffer\":263,\"gl-shader\":335,\"text-cache\":592}],317:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],318:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dn(e,[e.drawingBufferWidth,e.drawingBufferHeight]),c\u003dnew l(e,r);return c.grid\u003di(c),c.text\u003da(c),c.line\u003do(c),c.box\u003ds(c),c.update(t),c};var n\u003dt(\"gl-select-static\"),i\u003dt(\"./lib/grid\"),a\u003dt(\"./lib/text\"),o\u003dt(\"./lib/line\"),s\u003dt(\"./lib/box\");function l(t,e){this.gl\u003dt,this.pickBuffer\u003de,this.screenBox\u003d[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox\u003d[0,0,0,0],this.dataBox\u003d[-10,-10,10,10],this.gridLineEnable\u003d[!0,!0],this.gridLineWidth\u003d[1,1],this.gridLineColor\u003d[[0,0,0,1],[0,0,0,1]],this.pixelRatio\u003d1,this.tickMarkLength\u003d[0,0,0,0],this.tickMarkWidth\u003d[0,0,0,0],this.tickMarkColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad\u003d[15,15,15,15],this.tickAngle\u003d[0,0,0,0],this.tickEnable\u003d[!0,!0,!0,!0],this.tickColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad\u003d[15,15,15,15],this.labelAngle\u003d[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable\u003d[!0,!0,!0,!0],this.labelColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter\u003d[0,0],this.titleEnable\u003d!0,this.titleAngle\u003d0,this.titleColor\u003d[0,0,0,1],this.borderColor\u003d[0,0,0,0],this.backgroundColor\u003d[0,0,0,0],this.zeroLineEnable\u003d[!0,!0],this.zeroLineWidth\u003d[4,4],this.zeroLineColor\u003d[[0,0,0,1],[0,0,0,1]],this.borderLineEnable\u003d[!0,!0,!0,!0],this.borderLineWidth\u003d[2,2,2,2],this.borderLineColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid\u003dnull,this.text\u003dnull,this.line\u003dnull,this.box\u003dnull,this.objects\u003d[],this.overlays\u003d[],this._tickBounds\u003d[1/0,1/0,-1/0,-1/0],this.static\u003d!1,this.dirty\u003d!1,this.pickDirty\u003d!1,this.pickDelay\u003d120,this.pickRadius\u003d10,this._pickTimeout\u003dnull,this._drawPick\u003dthis.drawPick.bind(this),this._depthCounter\u003d0}var c\u003dl.prototype;function u(t){for(var e\u003dt.slice(),r\u003d0;r\u003ce.length;++r)e[r]\u003de[r].slice();return e}function f(t,e){return t.x-e.x}c.setDirty\u003dfunction(){this.dirty\u003dthis.pickDirty\u003d!0},c.setOverlayDirty\u003dfunction(){this.dirty\u003d!0},c.nextDepthValue\u003dfunction(){return this._depthCounter++/65536},c.draw\u003dfunction(){var t\u003dthis.gl,e\u003dthis.screenBox,r\u003dthis.viewBox,n\u003dthis.dataBox,i\u003dthis.pixelRatio,a\u003dthis.grid,o\u003dthis.line,s\u003dthis.text,l\u003dthis.objects;if(this._depthCounter\u003d0,this.pickDirty\u0026\u0026(this._pickTimeout\u0026\u0026clearTimeout(this._pickTimeout),this.pickDirty\u003d!1,this._pickTimeout\u003dsetTimeout(this._drawPick,this.pickDelay)),this.dirty){if(this.dirty\u003d!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),this.borderColor){t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var c\u003dthis.borderColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT)}t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var u\u003dthis.backgroundColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT),a.draw();var f\u003dthis.zeroLineEnable,h\u003dthis.zeroLineColor,p\u003dthis.zeroLineWidth;if(f[0]||f[1]){o.bind();for(var d\u003d0;d\u003c2;++d)if(f[d]\u0026\u0026n[d]\u003c\u003d0\u0026\u0026n[d+2]\u003e\u003d0){var m\u003de[d]-n[d]*(e[d+2]-e[d])/(n[d+2]-n[d]);0\u003d\u003d\u003dd?o.drawLine(m,e[1],m,e[3],p[d],h[d]):o.drawLine(e[0],m,e[2],m,p[d],h[d])}}for(d\u003d0;d\u003cl.length;++d)l[d].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var g\u003dthis.borderLineEnable,v\u003dthis.borderLineWidth,y\u003dthis.borderLineColor;for(g[1]\u0026\u0026o.drawLine(r[0],r[1]-.5*v[1]*i,r[0],r[3]+.5*v[3]*i,v[1],y[1]),g[0]\u0026\u0026o.drawLine(r[0]-.5*v[0]*i,r[1],r[2]+.5*v[2]*i,r[1],v[0],y[0]),g[3]\u0026\u0026o.drawLine(r[2],r[1]-.5*v[1]*i,r[2],r[3]+.5*v[3]*i,v[3],y[3]),g[2]\u0026\u0026o.drawLine(r[0]-.5*v[0]*i,r[3],r[2]+.5*v[2]*i,r[3],v[2],y[2]),s.bind(),d\u003d0;d\u003c2;++d)s.drawTicks(d);this.titleEnable\u0026\u0026s.drawTitle();var x\u003dthis.overlays;for(d\u003d0;d\u003cx.length;++d)x[d].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}},c.drawPick\u003dfunction(){if(!this.static){var t\u003dthis.pickBuffer;this.gl,this._pickTimeout\u003dnull,t.begin();for(var e\u003d1,r\u003dthis.objects,n\u003d0;n\u003cr.length;++n)e\u003dr[n].drawPick(e);t.end()}},c.pick\u003dfunction(t,e){if(!this.static){var r\u003dthis.pixelRatio,n\u003dthis.pickPixelRatio,i\u003dthis.viewBox,a\u003d0|Math.round((t-i[0]/r)*n),o\u003d0|Math.round((e-i[1]/r)*n),s\u003dthis.pickBuffer.query(a,o,this.pickRadius);if(!s)return null;for(var l\u003ds.id+(s.value[0]\u003c\u003c8)+(s.value[1]\u003c\u003c16)+(s.value[2]\u003c\u003c24),c\u003dthis.objects,u\u003d0;u\u003cc.length;++u){var f\u003dc[u].pick(a,o,l);if(f)return f}return null}},c.setScreenBox\u003dfunction(t){var e\u003dthis.screenBox,r\u003dthis.pixelRatio;e[0]\u003d0|Math.round(t[0]*r),e[1]\u003d0|Math.round(t[1]*r),e[2]\u003d0|Math.round(t[2]*r),e[3]\u003d0|Math.round(t[3]*r),this.setDirty()},c.setDataBox\u003dfunction(t){var e\u003dthis.dataBox;(e[0]!\u003d\u003dt[0]||e[1]!\u003d\u003dt[1]||e[2]!\u003d\u003dt[2]||e[3]!\u003d\u003dt[3])\u0026\u0026(e[0]\u003dt[0],e[1]\u003dt[1],e[2]\u003dt[2],e[3]\u003dt[3],this.setDirty())},c.setViewBox\u003dfunction(t){var e\u003dthis.pixelRatio,r\u003dthis.viewBox;r[0]\u003d0|Math.round(t[0]*e),r[1]\u003d0|Math.round(t[1]*e),r[2]\u003d0|Math.round(t[2]*e),r[3]\u003d0|Math.round(t[3]*e);var n\u003dthis.pickPixelRatio;this.pickBuffer.shape\u003d[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},c.update\u003dfunction(t){t\u003dt||{};var e\u003dthis.gl;this.pixelRatio\u003dt.pixelRatio||1;var r\u003dthis.pixelRatio;this.pickPixelRatio\u003dMath.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]);this.screenBox;this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n\u003dthis.viewBox,i\u003d(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/i,10,10/i]),this.borderColor\u003d!1!\u003d\u003dt.borderColor\u0026\u0026(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor\u003d(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable\u003d(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth\u003d(t.gridLineWidth||[1,1]).slice(),this.gridLineColor\u003du(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable\u003d(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth\u003d(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor\u003du(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength\u003d(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth\u003d(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor\u003du(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter\u003d(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable\u003d!(\"titleEnable\"in t)||!!t.titleEnable,this.titleAngle\u003dt.titleAngle||0,this.titleColor\u003d(t.titleColor||[0,0,0,1]).slice(),this.labelPad\u003d(t.labelPad||[15,15,15,15]).slice(),this.labelAngle\u003d(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable\u003d(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor\u003du(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad\u003d(t.tickPad||[15,15,15,15]).slice(),this.tickAngle\u003d(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable\u003d(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor\u003du(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable\u003d(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth\u003d(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor\u003du(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var a\u003dt.ticks||[[],[]],o\u003dthis._tickBounds;o[0]\u003do[1]\u003d1/0,o[2]\u003do[3]\u003d-1/0;for(var s\u003d0;s\u003c2;++s){var l\u003da[s].slice(0);0!\u003d\u003dl.length\u0026\u0026(l.sort(f),o[s]\u003dMath.min(o[s],l[0].x),o[s+2]\u003dMath.max(o[s+2],l[l.length-1].x))}this.grid.update({bounds:o,ticks:a}),this.text.update({bounds:o,ticks:a,labels:t.labels||[\"x\",\"y\"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||[\"sans-serif\",\"sans-serif\"],title:t.title||\"\",titleSize:t.titleSize||18,titleFont:t.titleFont||\"sans-serif\"}),this.static\u003d!!t.static,this.setDirty()},c.dispose\u003dfunction(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t\u003dthis.objects.length-1;t\u003e\u003d0;--t)this.objects[t].dispose();this.objects.length\u003d0;for(t\u003dthis.overlays.length-1;t\u003e\u003d0;--t)this.overlays[t].dispose();this.overlays.length\u003d0,this.gl\u003dnull},c.addObject\u003dfunction(t){this.objects.indexOf(t)\u003c0\u0026\u0026(this.objects.push(t),this.setDirty())},c.removeObject\u003dfunction(t){for(var e\u003dthis.objects,r\u003d0;r\u003ce.length;++r)if(e[r]\u003d\u003d\u003dt){e.splice(r,1),this.setDirty();break}},c.addOverlay\u003dfunction(t){this.overlays.indexOf(t)\u003c0\u0026\u0026(this.overlays.push(t),this.setOverlayDirty())},c.removeOverlay\u003dfunction(t){for(var e\u003dthis.overlays,r\u003d0;r\u003ce.length;++r)if(e[r]\u003d\u003d\u003dt){e.splice(r,1),this.setOverlayDirty();break}}},{\"./lib/box\":312,\"./lib/grid\":313,\"./lib/line\":314,\"./lib/text\":316,\"gl-select-static\":334}],319:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){t\u003dt||document.body,e\u003de||{};var r\u003d[.01,1/0];\"distanceLimits\"in e\u0026\u0026(r[0]\u003de.distanceLimits[0],r[1]\u003de.distanceLimits[1]);\"zoomMin\"in e\u0026\u0026(r[0]\u003de.zoomMin);\"zoomMax\"in e\u0026\u0026(r[1]\u003de.zoomMax);var c\u003di({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||\"orbit\",distanceLimits:r}),u\u003d[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],f\u003d0,h\u003dt.clientWidth,p\u003dt.clientHeight,d\u003d{keyBindingMode:\"rotate\",enableWheel:!0,view:c,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:c.modes,_ortho:e._ortho||e.projection\u0026\u0026\"orthographic\"\u003d\u003d\u003de.projection.type||!1,tick:function(){var e\u003dn(),r\u003dthis.delay,i\u003de-2*r;c.idle(e-r),c.recalcMatrix(i),c.flush(e-(100+2*r));for(var a\u003d!0,o\u003dc.computedMatrix,s\u003d0;s\u003c16;++s)a\u003da\u0026\u0026u[s]\u003d\u003d\u003do[s],u[s]\u003do[s];var l\u003dt.clientWidth\u003d\u003d\u003dh\u0026\u0026t.clientHeight\u003d\u003d\u003dp;return h\u003dt.clientWidth,p\u003dt.clientHeight,a?!l:(f\u003dMath.exp(c.computedRadius[0]),!0)},lookAt:function(t,e,r){c.lookAt(c.lastT(),t,e,r)},rotate:function(t,e,r){c.rotate(c.lastT(),t,e,r)},pan:function(t,e,r){c.pan(c.lastT(),t,e,r)},translate:function(t,e,r){c.translate(c.lastT(),t,e,r)}};return Object.defineProperties(d,{matrix:{get:function(){return c.computedMatrix},set:function(t){return c.setMatrix(c.lastT(),t),c.computedMatrix},enumerable:!0},mode:{get:function(){return c.getMode()},set:function(t){var e\u003dc.computedUp.slice(),r\u003dc.computedEye.slice(),i\u003dc.computedCenter.slice();if(c.setMode(t),\"turntable\"\u003d\u003d\u003dt){var a\u003dn();c._active.lookAt(a,r,i,e),c._active.lookAt(a+500,r,i,[0,0,1]),c._active.flush(a)}return c.getMode()},enumerable:!0},center:{get:function(){return c.computedCenter},set:function(t){return c.lookAt(c.lastT(),null,t),c.computedCenter},enumerable:!0},eye:{get:function(){return c.computedEye},set:function(t){return c.lookAt(c.lastT(),t),c.computedEye},enumerable:!0},up:{get:function(){return c.computedUp},set:function(t){return c.lookAt(c.lastT(),null,null,t),c.computedUp},enumerable:!0},distance:{get:function(){return f},set:function(t){return c.setDistance(c.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return c.getDistanceLimits(r)},set:function(t){return c.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener(\"contextmenu\",(function(t){return t.preventDefault(),!1})),d._lastX\u003d-1,d._lastY\u003d-1,d._lastMods\u003d{shift:!1,control:!1,alt:!1,meta:!1},d.enableMouseListeners\u003dfunction(){function e(e,r,i,a){var o\u003dd.keyBindingMode;if(!1!\u003d\u003do){var s\u003d\"rotate\"\u003d\u003d\u003do,l\u003d\"pan\"\u003d\u003d\u003do,u\u003d\"zoom\"\u003d\u003d\u003do,h\u003d!!a.control,p\u003d!!a.alt,m\u003d!!a.shift,g\u003d!!(1\u0026e),v\u003d!!(2\u0026e),y\u003d!!(4\u0026e),x\u003d1/t.clientHeight,b\u003dx*(r-d._lastX),_\u003dx*(i-d._lastY),w\u003dd.flipX?1:-1,T\u003dd.flipY?1:-1,k\u003dMath.PI*d.rotateSpeed,M\u003dn();if(-1!\u003d\u003dd._lastX\u0026\u0026-1!\u003d\u003dd._lastY\u0026\u0026((s\u0026\u0026g\u0026\u0026!h\u0026\u0026!p\u0026\u0026!m||g\u0026\u0026!h\u0026\u0026!p\u0026\u0026m)\u0026\u0026c.rotate(M,w*k*b,-T*k*_,0),(l\u0026\u0026g\u0026\u0026!h\u0026\u0026!p\u0026\u0026!m||v||g\u0026\u0026h\u0026\u0026!p\u0026\u0026!m)\u0026\u0026c.pan(M,-d.translateSpeed*b*f,d.translateSpeed*_*f,0),u\u0026\u0026g\u0026\u0026!h\u0026\u0026!p\u0026\u0026!m||y||g\u0026\u0026!h\u0026\u0026p\u0026\u0026!m)){var A\u003d-d.zoomSpeed*_/window.innerHeight*(M-c.lastT())*100;c.pan(M,0,0,f*(Math.exp(A)-1))}return d._lastX\u003dr,d._lastY\u003di,d._lastMods\u003da,!0}}d.mouseListener\u003da(t,e),t.addEventListener(\"touchstart\",(function(r){var n\u003ds(r.changedTouches[0],t);e(0,n[0],n[1],d._lastMods),e(1,n[0],n[1],d._lastMods)}),!!l\u0026\u0026{passive:!0}),t.addEventListener(\"touchmove\",(function(r){var n\u003ds(r.changedTouches[0],t);e(1,n[0],n[1],d._lastMods),r.preventDefault()}),!!l\u0026\u0026{passive:!1}),t.addEventListener(\"touchend\",(function(t){e(0,d._lastX,d._lastY,d._lastMods)}),!!l\u0026\u0026{passive:!0}),d.wheelListener\u003do(t,(function(t,e){if(!1!\u003d\u003dd.keyBindingMode\u0026\u0026d.enableWheel){var r\u003dd.flipX?1:-1,i\u003dd.flipY?1:-1,a\u003dn();if(Math.abs(t)\u003eMath.abs(e))c.rotate(a,0,0,-t*r*Math.PI*d.rotateSpeed/window.innerWidth);else if(!d._ortho){var o\u003d-d.zoomSpeed*i*e/window.innerHeight*(a-c.lastT())/20;c.pan(a,0,0,f*(Math.exp(o)-1))}}}),!0)},d.enableMouseListeners(),d};var n\u003dt(\"right-now\"),i\u003dt(\"3d-view\"),a\u003dt(\"mouse-change\"),o\u003dt(\"mouse-wheel\"),s\u003dt(\"mouse-event-offset\"),l\u003dt(\"has-passive-events\")},{\"3d-view\":55,\"has-passive-events\":440,\"mouse-change\":466,\"mouse-event-offset\":467,\"mouse-wheel\":469,\"right-now\":538}],320:[function(t,e,r){var n\u003dt(\"glslify\"),i\u003dt(\"gl-shader\"),a\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\nattribute vec2 position;\\nvarying vec2 uv;\\nvoid main() {\\n  uv \u003d position;\\n  gl_Position \u003d vec4(position, 0, 1);\\n}\"]),o\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D accumBuffer;\\nvarying vec2 uv;\\n\\nvoid main() {\\n  vec4 accum \u003d texture2D(accumBuffer, 0.5 * (uv + 1.0));\\n  gl_FragColor \u003d min(vec4(1,1,1,1), accum);\\n}\"]);e.exports\u003dfunction(t){return i(t,a,o,null,[{name:\"position\",type:\"vec2\"}])}},{\"gl-shader\":335,glslify:321}],321:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],322:[function(t,e,r){\"use strict\";var n\u003dt(\"./camera.js\"),i\u003dt(\"gl-axes3d\"),a\u003dt(\"gl-axes3d/properties\"),o\u003dt(\"gl-spikes3d\"),s\u003dt(\"gl-select-static\"),l\u003dt(\"gl-fbo\"),c\u003dt(\"a-big-triangle\"),u\u003dt(\"mouse-change\"),f\u003dt(\"gl-mat4/perspective\"),h\u003dt(\"gl-mat4/ortho\"),p\u003dt(\"./lib/shader\"),d\u003dt(\"is-mobile\")({tablet:!0,featureDetect:!0});function m(){this.mouse\u003d[-1,-1],this.screen\u003dnull,this.distance\u003d1/0,this.index\u003dnull,this.dataCoordinate\u003dnull,this.dataPosition\u003dnull,this.object\u003dnull,this.data\u003dnull}function g(t){var e\u003dMath.round(Math.log(Math.abs(t))/Math.log(10));if(e\u003c0){var r\u003dMath.round(Math.pow(10,-e));return Math.ceil(t*r)/r}if(e\u003e0){r\u003dMath.round(Math.pow(10,e));return Math.ceil(t/r)*r}return Math.ceil(t)}function v(t){return\"boolean\"!\u003dtypeof t||t}e.exports\u003d{createScene:function(t){(t\u003dt||{}).camera\u003dt.camera||{};var e\u003dt.canvas;if(!e){if(e\u003ddocument.createElement(\"canvas\"),t.container)t.container.appendChild(e);else document.body.appendChild(e)}var r\u003dt.gl;r||(t.glOptions\u0026\u0026(d\u003d!!t.glOptions.preserveDrawingBuffer),r\u003dfunction(t,e){var r\u003dnull;try{(r\u003dt.getContext(\"webgl\",e))||(r\u003dt.getContext(\"experimental-webgl\",e))}catch(t){return null}return r}(e,t.glOptions||{premultipliedAlpha:!0,antialias:!0,preserveDrawingBuffer:d}));if(!r)throw new Error(\"webgl not supported\");var y\u003dt.bounds||[[-10,-10,-10],[10,10,10]],x\u003dnew m,b\u003dl(r,r.drawingBufferWidth,r.drawingBufferHeight,{preferFloat:!d}),_\u003dp(r),w\u003dt.cameraObject\u0026\u0026!0\u003d\u003d\u003dt.cameraObject._ortho||t.camera.projection\u0026\u0026\"orthographic\"\u003d\u003d\u003dt.camera.projection.type||!1,T\u003d{eye:t.camera.eye||[2,0,0],center:t.camera.center||[0,0,0],up:t.camera.up||[0,1,0],zoomMin:t.camera.zoomMax||.1,zoomMax:t.camera.zoomMin||100,mode:t.camera.mode||\"turntable\",_ortho:w},k\u003dt.axes||{},M\u003di(r,k);M.enable\u003d!k.disable;var A\u003dt.spikes||{},S\u003do(r,A),E\u003d[],L\u003d[],C\u003d[],P\u003d[],I\u003d!0,O\u003d!0,z\u003dnew Array(16),D\u003dnew Array(16),R\u003d{view:null,projection:z,model:D,_ortho:!1},F\u003d(O\u003d!0,[r.drawingBufferWidth,r.drawingBufferHeight]),B\u003dt.cameraObject||n(e,T),N\u003d{gl:r,contextLost:!1,pixelRatio:t.pixelRatio||1,canvas:e,selection:x,camera:B,axes:M,axesPixels:null,spikes:S,bounds:y,objects:E,shape:F,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:v(t.autoResize),autoBounds:v(t.autoBounds),autoScale:!!t.autoScale,autoCenter:v(t.autoCenter),clipToBounds:v(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:R,oncontextloss:null,mouseListener:null,_stopped:!1,getAspectratio:function(){return{x:this.aspect[0],y:this.aspect[1],z:this.aspect[2]}},setAspectratio:function(t){this.aspect[0]\u003dt.x,this.aspect[1]\u003dt.y,this.aspect[2]\u003dt.z,O\u003d!0},setBounds:function(t,e){this.bounds[0][t]\u003de.min,this.bounds[1][t]\u003de.max},setClearColor:function(t){this.clearColor\u003dt},clearRGBA:function(){this.gl.clearColor(this.clearColor[0],this.clearColor[1],this.clearColor[2],this.clearColor[3]),this.gl.clear(this.gl.COLOR_BUFFER_BIT|this.gl.DEPTH_BUFFER_BIT)}},j\u003d[r.drawingBufferWidth/N.pixelRatio|0,r.drawingBufferHeight/N.pixelRatio|0];function U(){if(!N._stopped\u0026\u0026N.autoResize){var t\u003de.parentNode,r\u003d1,n\u003d1;t\u0026\u0026t!\u003d\u003ddocument.body?(r\u003dt.clientWidth,n\u003dt.clientHeight):(r\u003dwindow.innerWidth,n\u003dwindow.innerHeight);var i\u003d0|Math.ceil(r*N.pixelRatio),a\u003d0|Math.ceil(n*N.pixelRatio);if(i!\u003d\u003de.width||a!\u003d\u003de.height){e.width\u003di,e.height\u003da;var o\u003de.style;o.position\u003do.position||\"absolute\",o.left\u003d\"0px\",o.top\u003d\"0px\",o.width\u003dr+\"px\",o.height\u003dn+\"px\",I\u003d!0}}}N.autoResize\u0026\u0026U();function V(){for(var t\u003dE.length,e\u003dP.length,n\u003d0;n\u003ce;++n)C[n]\u003d0;t:for(n\u003d0;n\u003ct;++n){var i\u003dE[n],a\u003di.pickSlots;if(a){for(var o\u003d0;o\u003ce;++o)if(C[o]+a\u003c255){L[n]\u003do,i.setPickBase(C[o]+1),C[o]+\u003da;continue t}var l\u003ds(r,F);L[n]\u003de,P.push(l),C.push(a),i.setPickBase(1),e+\u003d1}else L[n]\u003d-1}for(;e\u003e0\u0026\u00260\u003d\u003d\u003dC[e-1];)C.pop(),P.pop().dispose()}function q(){if(N.contextLost)return!0;r.isContextLost()\u0026\u0026(N.contextLost\u003d!0,N.mouseListener.enabled\u003d!1,N.selection.object\u003dnull,N.oncontextloss\u0026\u0026N.oncontextloss())}window.addEventListener(\"resize\",U),N.update\u003dfunction(t){N._stopped||(t\u003dt||{},I\u003d!0,O\u003d!0)},N.add\u003dfunction(t){N._stopped||(t.axes\u003dM,E.push(t),L.push(-1),I\u003d!0,O\u003d!0,V())},N.remove\u003dfunction(t){if(!N._stopped){var e\u003dE.indexOf(t);e\u003c0||(E.splice(e,1),L.pop(),I\u003d!0,O\u003d!0,V())}},N.dispose\u003dfunction(){if(!N._stopped\u0026\u0026(N._stopped\u003d!0,window.removeEventListener(\"resize\",U),e.removeEventListener(\"webglcontextlost\",q),N.mouseListener.enabled\u003d!1,!N.contextLost)){M.dispose(),S.dispose();for(var t\u003d0;t\u003cE.length;++t)E[t].dispose();b.dispose();for(t\u003d0;t\u003cP.length;++t)P[t].dispose();_.dispose(),r\u003dnull,M\u003dnull,S\u003dnull,E\u003d[]}},N._mouseRotating\u003d!1,N._prevButtons\u003d0,N.enableMouseListeners\u003dfunction(){N.mouseListener\u003du(e,(function(t,e,r){if(!N._stopped){var n\u003dP.length,i\u003dE.length,a\u003dx.object;x.distance\u003d1/0,x.mouse[0]\u003de,x.mouse[1]\u003dr,x.object\u003dnull,x.screen\u003dnull,x.dataCoordinate\u003dx.dataPosition\u003dnull;var o\u003d!1;if(t\u0026\u0026N._prevButtons)N._mouseRotating\u003d!0;else{N._mouseRotating\u0026\u0026(O\u003d!0),N._mouseRotating\u003d!1;for(var s\u003d0;s\u003cn;++s){var l\u003dP[s].query(e,j[1]-r-1,N.pickRadius);if(l){if(l.distance\u003ex.distance)continue;for(var c\u003d0;c\u003ci;++c){var u\u003dE[c];if(L[c]\u003d\u003d\u003ds){var f\u003du.pick(l);f\u0026\u0026(x.buttons\u003dt,x.screen\u003dl.coord,x.distance\u003dl.distance,x.object\u003du,x.index\u003df.distance,x.dataPosition\u003df.position,x.dataCoordinate\u003df.dataCoordinate,x.data\u003df,o\u003d!0)}}}}}a\u0026\u0026a!\u003d\u003dx.object\u0026\u0026(a.highlight\u0026\u0026a.highlight(null),I\u003d!0),x.object\u0026\u0026(x.object.highlight\u0026\u0026x.object.highlight(x.data),I\u003d!0),(o\u003do||x.object!\u003d\u003da)\u0026\u0026N.onselect\u0026\u0026N.onselect(x),1\u0026t\u0026\u0026!(1\u0026N._prevButtons)\u0026\u0026N.onclick\u0026\u0026N.onclick(x),N._prevButtons\u003dt}}))},e.addEventListener(\"webglcontextlost\",q);var H\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],G\u003d[H[0].slice(),H[1].slice()];function Y(){if(!q()){U();var t\u003dN.camera.tick();R.view\u003dN.camera.matrix,I\u003dI||t,O\u003dO||t,M.pixelRatio\u003dN.pixelRatio,S.pixelRatio\u003dN.pixelRatio;var e\u003dE.length,n\u003dH[0],i\u003dH[1];n[0]\u003dn[1]\u003dn[2]\u003d1/0,i[0]\u003di[1]\u003di[2]\u003d-1/0;for(var o\u003d0;o\u003ce;++o){(C\u003dE[o]).pixelRatio\u003dN.pixelRatio,C.axes\u003dN.axes,I\u003dI||!!C.dirty,O\u003dO||!!C.dirty;var s\u003dC.bounds;if(s)for(var l\u003ds[0],u\u003ds[1],p\u003d0;p\u003c3;++p)n[p]\u003dMath.min(n[p],l[p]),i[p]\u003dMath.max(i[p],u[p])}var d\u003dN.bounds;if(N.autoBounds)for(p\u003d0;p\u003c3;++p){if(i[p]\u003cn[p])n[p]\u003d-1,i[p]\u003d1;else{n[p]\u003d\u003d\u003di[p]\u0026\u0026(n[p]-\u003d1,i[p]+\u003d1);var m\u003d.05*(i[p]-n[p]);n[p]\u003dn[p]-m,i[p]\u003di[p]+m}d[0][p]\u003dn[p],d[1][p]\u003di[p]}var v\u003d!1;for(p\u003d0;p\u003c3;++p)v\u003dv||G[0][p]!\u003d\u003dd[0][p]||G[1][p]!\u003d\u003dd[1][p],G[0][p]\u003dd[0][p],G[1][p]\u003dd[1][p];if(O\u003dO||v,I\u003dI||v){if(v){var y\u003d[0,0,0];for(o\u003d0;o\u003c3;++o)y[o]\u003dg((d[1][o]-d[0][o])/10);M.autoTicks?M.update({bounds:d,tickSpacing:y}):M.update({bounds:d})}var T\u003dr.drawingBufferWidth,k\u003dr.drawingBufferHeight;F[0]\u003dT,F[1]\u003dk,j[0]\u003d0|Math.max(T/N.pixelRatio,1),j[1]\u003d0|Math.max(k/N.pixelRatio,1),function(t,e){var r\u003dt.bounds,n\u003dt.cameraParams,i\u003dn.projection,a\u003dn.model,o\u003dt.gl.drawingBufferWidth,s\u003dt.gl.drawingBufferHeight,l\u003dt.zNear,c\u003dt.zFar,u\u003dt.fovy,p\u003do/s;e?(h(i,-p,p,-1,1,l,c),n._ortho\u003d!0):(f(i,u,p,l,c),n._ortho\u003d!1);for(var d\u003d0;d\u003c16;++d)a[d]\u003d0;a[15]\u003d1;var m\u003d0;for(d\u003d0;d\u003c3;++d)m\u003dMath.max(m,r[1][d]-r[0][d]);for(d\u003d0;d\u003c3;++d)t.autoScale?a[5*d]\u003dt.aspect[d]/(r[1][d]-r[0][d]):a[5*d]\u003d1/m,t.autoCenter\u0026\u0026(a[12+d]\u003d.5*-a[5*d]*(r[0][d]+r[1][d]))}(N,w);for(o\u003d0;o\u003ce;++o){(C\u003dE[o]).axesBounds\u003dd,N.clipToBounds\u0026\u0026(C.clipBounds\u003dd)}x.object\u0026\u0026(N.snapToData?S.position\u003dx.dataCoordinate:S.position\u003dx.dataPosition,S.bounds\u003dd),O\u0026\u0026(O\u003d!1,function(){if(!q()){r.colorMask(!0,!0,!0,!0),r.depthMask(!0),r.disable(r.BLEND),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL);for(var t\u003dE.length,e\u003dP.length,n\u003d0;n\u003ce;++n){var i\u003dP[n];i.shape\u003dj,i.begin();for(var a\u003d0;a\u003ct;++a)if(L[a]\u003d\u003d\u003dn){var o\u003dE[a];o.drawPick\u0026\u0026(o.pixelRatio\u003d1,o.drawPick(R))}i.end()}}}()),N.axesPixels\u003da(N.axes,R,T,k),N.onrender\u0026\u0026N.onrender(),r.bindFramebuffer(r.FRAMEBUFFER,null),r.viewport(0,0,T,k),N.clearRGBA(),r.depthMask(!0),r.colorMask(!0,!0,!0,!0),r.enable(r.DEPTH_TEST),r.depthFunc(r.LEQUAL),r.disable(r.BLEND),r.disable(r.CULL_FACE);var A\u003d!1;M.enable\u0026\u0026(A\u003dA||M.isTransparent(),M.draw(R)),S.axes\u003dM,x.object\u0026\u0026S.draw(R),r.disable(r.CULL_FACE);for(o\u003d0;o\u003ce;++o){(C\u003dE[o]).axes\u003dM,C.pixelRatio\u003dN.pixelRatio,C.isOpaque\u0026\u0026C.isOpaque()\u0026\u0026C.draw(R),C.isTransparent\u0026\u0026C.isTransparent()\u0026\u0026(A\u003d!0)}if(A){b.shape\u003dF,b.bind(),r.clear(r.DEPTH_BUFFER_BIT),r.colorMask(!1,!1,!1,!1),r.depthMask(!0),r.depthFunc(r.LESS),M.enable\u0026\u0026M.isTransparent()\u0026\u0026M.drawTransparent(R);for(o\u003d0;o\u003ce;++o){(C\u003dE[o]).isOpaque\u0026\u0026C.isOpaque()\u0026\u0026C.draw(R)}r.enable(r.BLEND),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.colorMask(!0,!0,!0,!0),r.depthMask(!1),r.clearColor(0,0,0,0),r.clear(r.COLOR_BUFFER_BIT),M.isTransparent()\u0026\u0026M.drawTransparent(R);for(o\u003d0;o\u003ce;++o){var C;(C\u003dE[o]).isTransparent\u0026\u0026C.isTransparent()\u0026\u0026C.drawTransparent(R)}r.bindFramebuffer(r.FRAMEBUFFER,null),r.blendFunc(r.ONE,r.ONE_MINUS_SRC_ALPHA),r.disable(r.DEPTH_TEST),_.bind(),b.color[0].bind(0),_.uniforms.accumBuffer\u003d0,c(r),r.disable(r.BLEND)}I\u003d!1;for(o\u003d0;o\u003ce;++o)E[o].dirty\u003d!1}}}return N.enableMouseListeners(),function t(){if(N._stopped||N.contextLost)return;Y(),requestAnimationFrame(t)}(),N.redraw\u003dfunction(){N._stopped||(I\u003d!0,Y())},N},createCamera:n}},{\"./camera.js\":319,\"./lib/shader\":320,\"a-big-triangle\":70,\"gl-axes3d\":254,\"gl-axes3d/properties\":262,\"gl-fbo\":272,\"gl-mat4/ortho\":298,\"gl-mat4/perspective\":299,\"gl-select-static\":334,\"gl-spikes3d\":345,\"is-mobile\":451,\"mouse-change\":466}],323:[function(t,e,r){var n\u003dt(\"glslify\");r.pointVertex\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\n\\nuniform mat3 matrix;\\nuniform float pointSize;\\nuniform float pointCloud;\\n\\nhighp float rand(vec2 co) {\\n  highp float a \u003d 12.9898;\\n  highp float b \u003d 78.233;\\n  highp float c \u003d 43758.5453;\\n  highp float d \u003d dot(co.xy, vec2(a, b));\\n  highp float e \u003d mod(d, 3.14);\\n  return fract(sin(e) * c);\\n}\\n\\nvoid main() {\\n  vec3 hgPosition \u003d matrix * vec3(position, 1);\\n  gl_Position  \u003d vec4(hgPosition.xy, 0, hgPosition.z);\\n    // if we don\u0027t jitter the point size a bit, overall point cloud\\n    // saturation \u0027jumps\u0027 on zooming, which is disturbing and confusing\\n  gl_PointSize \u003d pointSize * ((19.5 + rand(position)) / 20.0);\\n  if(pointCloud !\u003d 0.0) { // pointCloud is truthy\\n    // get the same square surface as circle would be\\n    gl_PointSize *\u003d 0.886;\\n  }\\n}\"]),r.pointFragment\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color, borderColor;\\nuniform float centerFraction;\\nuniform float pointCloud;\\n\\nvoid main() {\\n  float radius;\\n  vec4 baseColor;\\n  if(pointCloud !\u003d 0.0) { // pointCloud is truthy\\n    if(centerFraction \u003d\u003d 1.0) {\\n      gl_FragColor \u003d color;\\n    } else {\\n      gl_FragColor \u003d mix(borderColor, color, centerFraction);\\n    }\\n  } else {\\n    radius \u003d length(2.0 * gl_PointCoord.xy - 1.0);\\n    if(radius \u003e 1.0) {\\n      discard;\\n    }\\n    baseColor \u003d mix(borderColor, color, step(radius, centerFraction));\\n    gl_FragColor \u003d vec4(baseColor.rgb * baseColor.a, baseColor.a);\\n  }\\n}\\n\"]),r.pickVertex\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position;\\nattribute vec4 pickId;\\n\\nuniform mat3 matrix;\\nuniform float pointSize;\\nuniform vec4 pickOffset;\\n\\nvarying vec4 fragId;\\n\\nvoid main() {\\n  vec3 hgPosition \u003d matrix * vec3(position, 1);\\n  gl_Position  \u003d vec4(hgPosition.xy, 0, hgPosition.z);\\n  gl_PointSize \u003d pointSize;\\n\\n  vec4 id \u003d pickId + pickOffset;\\n  id.y +\u003d floor(id.x / 256.0);\\n  id.x -\u003d floor(id.x / 256.0) * 256.0;\\n\\n  id.z +\u003d floor(id.y / 256.0);\\n  id.y -\u003d floor(id.y / 256.0) * 256.0;\\n\\n  id.w +\u003d floor(id.z / 256.0);\\n  id.z -\u003d floor(id.z / 256.0) * 256.0;\\n\\n  fragId \u003d id;\\n}\\n\"]),r.pickFragment\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragId;\\n\\nvoid main() {\\n  float radius \u003d length(2.0 * gl_PointCoord.xy - 1.0);\\n  if(radius \u003e 1.0) {\\n    discard;\\n  }\\n  gl_FragColor \u003d fragId / 255.0;\\n}\\n\"])},{glslify:438}],324:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-shader\"),i\u003dt(\"gl-buffer\"),a\u003dt(\"typedarray-pool\"),o\u003dt(\"./lib/shader\");function s(t,e,r,n,i){this.plot\u003dt,this.offsetBuffer\u003de,this.pickBuffer\u003dr,this.shader\u003dn,this.pickShader\u003di,this.sizeMin\u003d.5,this.sizeMinCap\u003d2,this.sizeMax\u003d20,this.areaRatio\u003d1,this.pointCount\u003d0,this.color\u003d[1,0,0,1],this.borderColor\u003d[0,0,0,1],this.blend\u003d!1,this.pickOffset\u003d0,this.points\u003dnull}e.exports\u003dfunction(t,e){var r\u003dt.gl,a\u003di(r),l\u003di(r),c\u003dn(r,o.pointVertex,o.pointFragment),u\u003dn(r,o.pickVertex,o.pickFragment),f\u003dnew s(t,a,l,c,u);return f.update(e),t.addObject(f),f};var l,c,u\u003ds.prototype;u.dispose\u003dfunction(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},u.update\u003dfunction(t){var e;function r(e,r){return e in t?t[e]:r}t\u003dt||{},this.sizeMin\u003dr(\"sizeMin\",.5),this.sizeMax\u003dr(\"sizeMax\",20),this.color\u003dr(\"color\",[1,0,0,1]).slice(),this.areaRatio\u003dr(\"areaRatio\",1),this.borderColor\u003dr(\"borderColor\",[0,0,0,1]).slice(),this.blend\u003dr(\"blend\",!1);var n\u003dt.positions.length\u003e\u003e\u003e1,i\u003dt.positions instanceof Float32Array,o\u003dt.idToIndex instanceof Int32Array\u0026\u0026t.idToIndex.length\u003e\u003dn,s\u003dt.positions,l\u003di?s:a.mallocFloat32(s.length),c\u003do?t.idToIndex:a.mallocInt32(n);if(i||l.set(s),!o)for(l.set(s),e\u003d0;e\u003cn;e++)c[e]\u003de;this.points\u003ds,this.offsetBuffer.update(l),this.pickBuffer.update(c),i||a.free(l),o||a.free(c),this.pointCount\u003dn,this.pickOffset\u003d0},u.unifiedDraw\u003d(l\u003d[1,0,0,0,1,0,0,0,1],c\u003d[0,0,0,0],function(t){var e\u003dvoid 0!\u003d\u003dt,r\u003de?this.pickShader:this.shader,n\u003dthis.plot.gl,i\u003dthis.plot.dataBox;if(0\u003d\u003d\u003dthis.pointCount)return t;var a\u003di[2]-i[0],o\u003di[3]-i[1],s\u003dfunction(t,e){var r,n\u003d0,i\u003dt.length\u003e\u003e\u003e1;for(r\u003d0;r\u003ci;r++){var a\u003dt[2*r],o\u003dt[2*r+1];a\u003e\u003de[0]\u0026\u0026a\u003c\u003de[2]\u0026\u0026o\u003e\u003de[1]\u0026\u0026o\u003c\u003de[3]\u0026\u0026n++}return n}(this.points,i),u\u003dthis.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(s,.33333)));l[0]\u003d2/a,l[4]\u003d2/o,l[6]\u003d-2*i[0]/a-1,l[7]\u003d-2*i[1]/o-1,this.offsetBuffer.bind(),r.bind(),r.attributes.position.pointer(),r.uniforms.matrix\u003dl,r.uniforms.color\u003dthis.color,r.uniforms.borderColor\u003dthis.borderColor,r.uniforms.pointCloud\u003du\u003c5,r.uniforms.pointSize\u003du,r.uniforms.centerFraction\u003dMath.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),e\u0026\u0026(c[0]\u003d255\u0026t,c[1]\u003dt\u003e\u003e8\u0026255,c[2]\u003dt\u003e\u003e16\u0026255,c[3]\u003dt\u003e\u003e24\u0026255,this.pickBuffer.bind(),r.attributes.pickId.pointer(n.UNSIGNED_BYTE),r.uniforms.pickOffset\u003dc,this.pickOffset\u003dt);var f\u003dn.getParameter(n.BLEND),h\u003dn.getParameter(n.DITHER);return f\u0026\u0026!this.blend\u0026\u0026n.disable(n.BLEND),h\u0026\u0026n.disable(n.DITHER),n.drawArrays(n.POINTS,0,this.pointCount),f\u0026\u0026!this.blend\u0026\u0026n.enable(n.BLEND),h\u0026\u0026n.enable(n.DITHER),t+this.pointCount}),u.draw\u003du.unifiedDraw,u.drawPick\u003du.unifiedDraw,u.pick\u003dfunction(t,e,r){var n\u003dthis.pickOffset,i\u003dthis.pointCount;if(r\u003cn||r\u003e\u003dn+i)return null;var a\u003dr-n,o\u003dthis.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}}},{\"./lib/shader\":323,\"gl-buffer\":263,\"gl-shader\":335,\"typedarray-pool\":613}],325:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i,a,o,s,l,c\u003de[0],u\u003de[1],f\u003de[2],h\u003de[3],p\u003dr[0],d\u003dr[1],m\u003dr[2],g\u003dr[3];(a\u003dc*p+u*d+f*m+h*g)\u003c0\u0026\u0026(a\u003d-a,p\u003d-p,d\u003d-d,m\u003d-m,g\u003d-g);1-a\u003e1e-6?(i\u003dMath.acos(a),o\u003dMath.sin(i),s\u003dMath.sin((1-n)*i)/o,l\u003dMath.sin(n*i)/o):(s\u003d1-n,l\u003dn);return t[0]\u003ds*c+l*p,t[1]\u003ds*u+l*d,t[2]\u003ds*f+l*m,t[3]\u003ds*h+l*g,t}},{}],326:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return t||0\u003d\u003d\u003dt?t.toString():\"\"}},{}],327:[function(t,e,r){\"use strict\";var n\u003dt(\"vectorize-text\");e.exports\u003dfunction(t,e,r){var a\u003di[e];a||(a\u003di[e]\u003d{});if(t in a)return a[t];var o\u003d{textAlign:\"center\",textBaseline:\"middle\",lineHeight:1,font:e,lineSpacing:1.25,styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0},triangles:!0},s\u003dn(t,o);o.triangles\u003d!1;var l,c,u\u003dn(t,o);if(r\u0026\u00261!\u003d\u003dr){for(l\u003d0;l\u003cs.positions.length;++l)for(c\u003d0;c\u003cs.positions[l].length;++c)s.positions[l][c]/\u003dr;for(l\u003d0;l\u003cu.positions.length;++l)for(c\u003d0;c\u003cu.positions[l].length;++c)u.positions[l][c]/\u003dr}var f\u003d[[1/0,1/0],[-1/0,-1/0]],h\u003du.positions.length;for(l\u003d0;l\u003ch;++l){var p\u003du.positions[l];for(c\u003d0;c\u003c2;++c)f[0][c]\u003dMath.min(f[0][c],p[c]),f[1][c]\u003dMath.max(f[1][c],p[c])}return a[t]\u003d[s,u,f]};var i\u003d{}},{\"vectorize-text\":619}],328:[function(t,e,r){var n\u003dt(\"gl-shader\"),i\u003dt(\"glslify\"),a\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform vec4 highlightId;\\nuniform float highlightScale;\\nuniform mat4 model, view, projection;\\nuniform vec3 clipBounds[2];\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position \u003d vec4(0,0,0,0);\\n  } else {\\n    float scale \u003d 1.0;\\n    if(distance(highlightId, id) \u003c 0.0001) {\\n      scale \u003d highlightScale;\\n    }\\n\\n    vec4 worldPosition \u003d model * vec4(position, 1);\\n    vec4 viewPosition \u003d view * worldPosition;\\n    viewPosition \u003d viewPosition / viewPosition.w;\\n    vec4 clipPosition \u003d projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\\n\\n    gl_Position \u003d clipPosition;\\n    interpColor \u003d color;\\n    pickId \u003d id;\\n    dataCoordinate \u003d position;\\n  }\\n}\"]),o\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform vec2 screenSize;\\nuniform vec3 clipBounds[2];\\nuniform float highlightScale, pixelRatio;\\nuniform vec4 highlightId;\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position \u003d vec4(0,0,0,0);\\n  } else {\\n    float scale \u003d pixelRatio;\\n    if(distance(highlightId.bgr, id.bgr) \u003c 0.001) {\\n      scale *\u003d highlightScale;\\n    }\\n\\n    vec4 worldPosition \u003d model * vec4(position, 1.0);\\n    vec4 viewPosition \u003d view * worldPosition;\\n    vec4 clipPosition \u003d projection * viewPosition;\\n    clipPosition /\u003d clipPosition.w;\\n\\n    gl_Position \u003d clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\\n    interpColor \u003d color;\\n    pickId \u003d id;\\n    dataCoordinate \u003d position;\\n  }\\n}\"]),s\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nattribute vec3 position;\\nattribute vec4 color;\\nattribute vec2 glyph;\\nattribute vec4 id;\\n\\nuniform float highlightScale;\\nuniform vec4 highlightId;\\nuniform vec3 axes[2];\\nuniform mat4 model, view, projection;\\nuniform vec2 screenSize;\\nuniform vec3 clipBounds[2];\\nuniform float scale, pixelRatio;\\n\\nvarying vec4 interpColor;\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], position)) {\\n\\n    gl_Position \u003d vec4(0,0,0,0);\\n  } else {\\n    float lscale \u003d pixelRatio * scale;\\n    if(distance(highlightId, id) \u003c 0.0001) {\\n      lscale *\u003d highlightScale;\\n    }\\n\\n    vec4 clipCenter   \u003d projection * view * model * vec4(position, 1);\\n    vec3 dataPosition \u003d position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\\n    vec4 clipPosition \u003d projection * view * model * vec4(dataPosition, 1);\\n\\n    gl_Position \u003d clipPosition;\\n    interpColor \u003d color;\\n    pickId \u003d id;\\n    dataCoordinate \u003d dataPosition;\\n  }\\n}\\n\"]),l\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 fragClipBounds[2];\\nuniform float opacity;\\n\\nvarying vec4 interpColor;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (\\n    outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate) ||\\n    interpColor.a * opacity \u003d\u003d 0.\\n  ) discard;\\n  gl_FragColor \u003d interpColor * opacity;\\n}\\n\"]),c\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 fragClipBounds[2];\\nuniform float pickGroup;\\n\\nvarying vec4 pickId;\\nvarying vec3 dataCoordinate;\\n\\nvoid main() {\\n  if (outOfRange(fragClipBounds[0], fragClipBounds[1], dataCoordinate)) discard;\\n\\n  gl_FragColor \u003d vec4(pickGroup, pickId.bgr);\\n}\"]),u\u003d[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec4\"},{name:\"glyph\",type:\"vec2\"},{name:\"id\",type:\"vec4\"}],f\u003d{vertex:a,fragment:l,attributes:u},h\u003d{vertex:o,fragment:l,attributes:u},p\u003d{vertex:s,fragment:l,attributes:u},d\u003d{vertex:a,fragment:c,attributes:u},m\u003d{vertex:o,fragment:c,attributes:u},g\u003d{vertex:s,fragment:c,attributes:u};function v(t,e){var r\u003dn(t,e),i\u003dr.attributes;return i.position.location\u003d0,i.color.location\u003d1,i.glyph.location\u003d2,i.id.location\u003d3,r}r.createPerspective\u003dfunction(t){return v(t,f)},r.createOrtho\u003dfunction(t){return v(t,h)},r.createProject\u003dfunction(t){return v(t,p)},r.createPickPerspective\u003dfunction(t){return v(t,d)},r.createPickOrtho\u003dfunction(t){return v(t,m)},r.createPickProject\u003dfunction(t){return v(t,g)}},{\"gl-shader\":335,glslify:329}],329:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],330:[function(t,e,r){\"use strict\";var n\u003dt(\"is-string-blank\"),i\u003dt(\"gl-buffer\"),a\u003dt(\"gl-vao\"),o\u003dt(\"typedarray-pool\"),s\u003dt(\"gl-mat4/multiply\"),l\u003dt(\"./lib/shaders\"),c\u003dt(\"./lib/glyphs\"),u\u003dt(\"./lib/get-simple-string\"),f\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function h(t,e){var r\u003dt[0],n\u003dt[1],i\u003dt[2],a\u003dt[3];return t[0]\u003de[0]*r+e[4]*n+e[8]*i+e[12]*a,t[1]\u003de[1]*r+e[5]*n+e[9]*i+e[13]*a,t[2]\u003de[2]*r+e[6]*n+e[10]*i+e[14]*a,t[3]\u003de[3]*r+e[7]*n+e[11]*i+e[15]*a,t}function p(t,e,r,n){return h(n,n),h(n,n),h(n,n)}function d(t,e){this.index\u003dt,this.dataCoordinate\u003dthis.position\u003de}function m(t){return!0\u003d\u003d\u003dt||t\u003e1?1:t}function g(t,e,r,n,i,a,o,s,l,c,u,f){this.gl\u003dt,this.pixelRatio\u003d1,this.shader\u003de,this.orthoShader\u003dr,this.projectShader\u003dn,this.pointBuffer\u003di,this.colorBuffer\u003da,this.glyphBuffer\u003do,this.idBuffer\u003ds,this.vao\u003dl,this.vertexCount\u003d0,this.lineVertexCount\u003d0,this.opacity\u003d1,this.hasAlpha\u003d!1,this.lineWidth\u003d0,this.projectScale\u003d[2/3,2/3,2/3],this.projectOpacity\u003d[1,1,1],this.projectHasAlpha\u003d!1,this.pickId\u003d0,this.pickPerspectiveShader\u003dc,this.pickOrthoShader\u003du,this.pickProjectShader\u003df,this.points\u003d[],this._selectResult\u003dnew d(0,[0,0,0]),this.useOrtho\u003d!0,this.bounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject\u003d[!0,!0,!0],this.axesBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId\u003d[1,1,1,1],this.highlightScale\u003d2,this.clipBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty\u003d!0}e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dl.createPerspective(e),n\u003dl.createOrtho(e),o\u003dl.createProject(e),s\u003dl.createPickPerspective(e),c\u003dl.createPickOrtho(e),u\u003dl.createPickProject(e),f\u003di(e),h\u003di(e),p\u003di(e),d\u003di(e),m\u003da(e,[{buffer:f,size:3,type:e.FLOAT},{buffer:h,size:4,type:e.FLOAT},{buffer:p,size:2,type:e.FLOAT},{buffer:d,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),v\u003dnew g(e,r,n,o,f,h,p,d,m,s,c,u);return v.update(t),v};var v\u003dg.prototype;v.pickSlots\u003d1,v.setPickBase\u003dfunction(t){this.pickId\u003dt},v.isTransparent\u003dfunction(){if(this.hasAlpha)return!0;for(var t\u003d0;t\u003c3;++t)if(this.axesProject[t]\u0026\u0026this.projectHasAlpha)return!0;return!1},v.isOpaque\u003dfunction(){if(!this.hasAlpha)return!0;for(var t\u003d0;t\u003c3;++t)if(this.axesProject[t]\u0026\u0026!this.projectHasAlpha)return!0;return!1};var y\u003d[0,0],x\u003d[0,0,0],b\u003d[0,0,0],_\u003d[0,0,0,1],w\u003d[0,0,0,1],T\u003df.slice(),k\u003d[0,0,0],M\u003d[[0,0,0],[0,0,0]];function A(t){return t[0]\u003dt[1]\u003dt[2]\u003d0,t}function S(t,e){return t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t[3]\u003d1,t}function E(t,e,r,n){return t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t[r]\u003dn,t}function L(t,e,r,n){var i,a\u003de.axesProject,o\u003de.gl,l\u003dt.uniforms,c\u003dr.model||f,u\u003dr.view||f,h\u003dr.projection||f,d\u003de.axesBounds,m\u003dfunction(t){for(var e\u003dM,r\u003d0;r\u003c2;++r)for(var n\u003d0;n\u003c3;++n)e[r][n]\u003dMath.max(Math.min(t[r][n],1e8),-1e8);return e}(e.clipBounds);i\u003de.axes\u0026\u0026e.axes.lastCubeProps?e.axes.lastCubeProps.axis:[1,1,1],y[0]\u003d2/o.drawingBufferWidth,y[1]\u003d2/o.drawingBufferHeight,t.bind(),l.view\u003du,l.projection\u003dh,l.screenSize\u003dy,l.highlightId\u003de.highlightId,l.highlightScale\u003de.highlightScale,l.clipBounds\u003dm,l.pickGroup\u003de.pickId/255,l.pixelRatio\u003dn;for(var g\u003d0;g\u003c3;++g)if(a[g]){l.scale\u003de.projectScale[g],l.opacity\u003de.projectOpacity[g];for(var v\u003dT,L\u003d0;L\u003c16;++L)v[L]\u003d0;for(L\u003d0;L\u003c4;++L)v[5*L]\u003d1;v[5*g]\u003d0,i[g]\u003c0?v[12+g]\u003dd[0][g]:v[12+g]\u003dd[1][g],s(v,c,v),l.model\u003dv;var C\u003d(g+1)%3,P\u003d(g+2)%3,I\u003dA(x),O\u003dA(b);I[C]\u003d1,O[P]\u003d1;var z\u003dp(0,0,0,S(_,I)),D\u003dp(0,0,0,S(w,O));if(Math.abs(z[1])\u003eMath.abs(D[1])){var R\u003dz;z\u003dD,D\u003dR,R\u003dI,I\u003dO,O\u003dR;var F\u003dC;C\u003dP,P\u003dF}z[0]\u003c0\u0026\u0026(I[C]\u003d-1),D[1]\u003e0\u0026\u0026(O[P]\u003d-1);var B\u003d0,N\u003d0;for(L\u003d0;L\u003c4;++L)B+\u003dMath.pow(c[4*C+L],2),N+\u003dMath.pow(c[4*P+L],2);I[C]/\u003dMath.sqrt(B),O[P]/\u003dMath.sqrt(N),l.axes[0]\u003dI,l.axes[1]\u003dO,l.fragClipBounds[0]\u003dE(k,m[0],g,-1e8),l.fragClipBounds[1]\u003dE(k,m[1],g,1e8),e.vao.bind(),e.vao.draw(o.TRIANGLES,e.vertexCount),e.lineWidth\u003e0\u0026\u0026(o.lineWidth(e.lineWidth*n),e.vao.draw(o.LINES,e.lineVertexCount,e.vertexCount)),e.vao.unbind()}}var C\u003d[[-1e8,-1e8,-1e8],[1e8,1e8,1e8]];function P(t,e,r,n,i,a,o){var s\u003dr.gl;if((a\u003d\u003d\u003dr.projectHasAlpha||o)\u0026\u0026L(e,r,n,i),a\u003d\u003d\u003dr.hasAlpha||o){t.bind();var l\u003dt.uniforms;l.model\u003dn.model||f,l.view\u003dn.view||f,l.projection\u003dn.projection||f,y[0]\u003d2/s.drawingBufferWidth,y[1]\u003d2/s.drawingBufferHeight,l.screenSize\u003dy,l.highlightId\u003dr.highlightId,l.highlightScale\u003dr.highlightScale,l.fragClipBounds\u003dC,l.clipBounds\u003dr.axes.bounds,l.opacity\u003dr.opacity,l.pickGroup\u003dr.pickId/255,l.pixelRatio\u003di,r.vao.bind(),r.vao.draw(s.TRIANGLES,r.vertexCount),r.lineWidth\u003e0\u0026\u0026(s.lineWidth(r.lineWidth*i),r.vao.draw(s.LINES,r.lineVertexCount,r.vertexCount)),r.vao.unbind()}}function I(t,e,r,i){var a;a\u003dArray.isArray(t)?e\u003ct.length?t[e]:void 0:t,a\u003du(a);var o\u003d!0;n(a)\u0026\u0026(a\u003d\"\\u25bc\",o\u003d!1);var s\u003dc(a,r,i);return{mesh:s[0],lines:s[1],bounds:s[2],visible:o}}v.draw\u003dfunction(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!1,!1)},v.drawTransparent\u003dfunction(t){P(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,this.pixelRatio,!0,!1)},v.drawPick\u003dfunction(t){P(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,1,!0,!0)},v.pick\u003dfunction(t){if(!t)return null;if(t.id!\u003d\u003dthis.pickId)return null;var e\u003dt.value[2]+(t.value[1]\u003c\u003c8)+(t.value[0]\u003c\u003c16);if(e\u003e\u003dthis.pointCount||e\u003c0)return null;var r\u003dthis.points[e],n\u003dthis._selectResult;n.index\u003de;for(var i\u003d0;i\u003c3;++i)n.position[i]\u003dn.dataCoordinate[i]\u003dr[i];return n},v.highlight\u003dfunction(t){if(t){var e\u003dt.index,r\u003d255\u0026e,n\u003de\u003e\u003e8\u0026255,i\u003de\u003e\u003e16\u0026255;this.highlightId\u003d[r/255,n/255,i/255,0]}else this.highlightId\u003d[1,1,1,1]},v.update\u003dfunction(t){if(\"perspective\"in(t\u003dt||{})\u0026\u0026(this.useOrtho\u003d!t.perspective),\"orthographic\"in t\u0026\u0026(this.useOrtho\u003d!!t.orthographic),\"lineWidth\"in t\u0026\u0026(this.lineWidth\u003dt.lineWidth),\"project\"in t)if(Array.isArray(t.project))this.axesProject\u003dt.project;else{var e\u003d!!t.project;this.axesProject\u003d[e,e,e]}if(\"projectScale\"in t)if(Array.isArray(t.projectScale))this.projectScale\u003dt.projectScale.slice();else{var r\u003d+t.projectScale;this.projectScale\u003d[r,r,r]}if(this.projectHasAlpha\u003d!1,\"projectOpacity\"in t){if(Array.isArray(t.projectOpacity))this.projectOpacity\u003dt.projectOpacity.slice();else{r\u003d+t.projectOpacity;this.projectOpacity\u003d[r,r,r]}for(var n\u003d0;n\u003c3;++n)this.projectOpacity[n]\u003dm(this.projectOpacity[n]),this.projectOpacity[n]\u003c1\u0026\u0026(this.projectHasAlpha\u003d!0)}this.hasAlpha\u003d!1,\"opacity\"in t\u0026\u0026(this.opacity\u003dm(t.opacity),this.opacity\u003c1\u0026\u0026(this.hasAlpha\u003d!0)),this.dirty\u003d!0;var i,a,s\u003dt.position,l\u003dt.font||\"normal\",c\u003dt.alignment||[0,0];if(2\u003d\u003d\u003dc.length)i\u003dc[0],a\u003dc[1];else{i\u003d[],a\u003d[];for(n\u003d0;n\u003cc.length;++n)i[n]\u003dc[n][0],a[n]\u003dc[n][1]}var u\u003d[1/0,1/0,1/0],f\u003d[-1/0,-1/0,-1/0],h\u003dt.glyph,p\u003dt.color,d\u003dt.size,g\u003dt.angle,v\u003dt.lineColor,y\u003d-1,x\u003d0,b\u003d0,_\u003d0;if(s.length){_\u003ds.length;t:for(n\u003d0;n\u003c_;++n){for(var w\u003ds[n],T\u003d0;T\u003c3;++T)if(isNaN(w[T])||!isFinite(w[T]))continue t;var k\u003d(N\u003dI(h,n,l,this.pixelRatio)).mesh,M\u003dN.lines,A\u003dN.bounds;x+\u003d3*k.cells.length,b+\u003d2*M.edges.length}}var S\u003dx+b,E\u003do.mallocFloat(3*S),L\u003do.mallocFloat(4*S),C\u003do.mallocFloat(2*S),P\u003do.mallocUint32(S);if(S\u003e0){var O\u003d0,z\u003dx,D\u003d[0,0,0,1],R\u003d[0,0,0,1],F\u003dArray.isArray(p)\u0026\u0026Array.isArray(p[0]),B\u003dArray.isArray(v)\u0026\u0026Array.isArray(v[0]);t:for(n\u003d0;n\u003c_;++n){y+\u003d1;for(w\u003ds[n],T\u003d0;T\u003c3;++T){if(isNaN(w[T])||!isFinite(w[T]))continue t;f[T]\u003dMath.max(f[T],w[T]),u[T]\u003dMath.min(u[T],w[T])}k\u003d(N\u003dI(h,n,l,this.pixelRatio)).mesh,M\u003dN.lines,A\u003dN.bounds;var N,j\u003dN.visible;if(j)if(Array.isArray(p)){if(3\u003d\u003d\u003d(U\u003dF?n\u003cp.length?p[n]:[0,0,0,0]:p).length){for(T\u003d0;T\u003c3;++T)D[T]\u003dU[T];D[3]\u003d1}else if(4\u003d\u003d\u003dU.length){for(T\u003d0;T\u003c4;++T)D[T]\u003dU[T];!this.hasAlpha\u0026\u0026U[3]\u003c1\u0026\u0026(this.hasAlpha\u003d!0)}}else D[0]\u003dD[1]\u003dD[2]\u003d0,D[3]\u003d1;else D\u003d[1,1,1,0];if(j)if(Array.isArray(v)){var U;if(3\u003d\u003d\u003d(U\u003dB?n\u003cv.length?v[n]:[0,0,0,0]:v).length){for(T\u003d0;T\u003c3;++T)R[T]\u003dU[T];R[T]\u003d1}else if(4\u003d\u003d\u003dU.length){for(T\u003d0;T\u003c4;++T)R[T]\u003dU[T];!this.hasAlpha\u0026\u0026U[3]\u003c1\u0026\u0026(this.hasAlpha\u003d!0)}}else R[0]\u003dR[1]\u003dR[2]\u003d0,R[3]\u003d1;else R\u003d[1,1,1,0];var V\u003d.5;j?Array.isArray(d)?V\u003dn\u003cd.length?+d[n]:12:d?V\u003d+d:this.useOrtho\u0026\u0026(V\u003d12):V\u003d0;var q\u003d0;Array.isArray(g)?q\u003dn\u003cg.length?+g[n]:0:g\u0026\u0026(q\u003d+g);var H\u003dMath.cos(q),G\u003dMath.sin(q);for(w\u003ds[n],T\u003d0;T\u003c3;++T)f[T]\u003dMath.max(f[T],w[T]),u[T]\u003dMath.min(u[T],w[T]);var Y\u003di,W\u003da;Y\u003d0;Array.isArray(i)?Y\u003dn\u003ci.length?i[n]:0:i\u0026\u0026(Y\u003di);W\u003d0;Array.isArray(a)?W\u003dn\u003ca.length?a[n]:0:a\u0026\u0026(W\u003da);var X\u003d[Y*\u003dY\u003e0?1-A[0][0]:Y\u003c0?1+A[1][0]:1,W*\u003dW\u003e0?1-A[0][1]:W\u003c0?1+A[1][1]:1],Z\u003dk.cells||[],J\u003dk.positions||[];for(T\u003d0;T\u003cZ.length;++T)for(var K\u003dZ[T],Q\u003d0;Q\u003c3;++Q){for(var $\u003d0;$\u003c3;++$)E[3*O+$]\u003dw[$];for($\u003d0;$\u003c4;++$)L[4*O+$]\u003dD[$];P[O]\u003dy;var tt\u003dJ[K[Q]];C[2*O]\u003dV*(H*tt[0]-G*tt[1]+X[0]),C[2*O+1]\u003dV*(G*tt[0]+H*tt[1]+X[1]),O+\u003d1}for(Z\u003dM.edges,J\u003dM.positions,T\u003d0;T\u003cZ.length;++T)for(K\u003dZ[T],Q\u003d0;Q\u003c2;++Q){for($\u003d0;$\u003c3;++$)E[3*z+$]\u003dw[$];for($\u003d0;$\u003c4;++$)L[4*z+$]\u003dR[$];P[z]\u003dy;tt\u003dJ[K[Q]];C[2*z]\u003dV*(H*tt[0]-G*tt[1]+X[0]),C[2*z+1]\u003dV*(G*tt[0]+H*tt[1]+X[1]),z+\u003d1}}}this.bounds\u003d[u,f],this.points\u003ds,this.pointCount\u003ds.length,this.vertexCount\u003dx,this.lineVertexCount\u003db,this.pointBuffer.update(E),this.colorBuffer.update(L),this.glyphBuffer.update(C),this.idBuffer.update(P),o.free(E),o.free(L),o.free(C),o.free(P)},v.dispose\u003dfunction(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},{\"./lib/get-simple-string\":326,\"./lib/glyphs\":327,\"./lib/shaders\":328,\"gl-buffer\":263,\"gl-mat4/multiply\":297,\"gl-vao\":357,\"is-string-blank\":454,\"typedarray-pool\":613}],331:[function(t,e,r){\"use strict\";var n\u003dt(\"glslify\");r.boxVertex\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec2 vertex;\\n\\nuniform vec2 cornerA, cornerB;\\n\\nvoid main() {\\n  gl_Position \u003d vec4(mix(cornerA, cornerB, vertex), 0, 1);\\n}\\n\"]),r.boxFragment\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nuniform vec4 color;\\n\\nvoid main() {\\n  gl_FragColor \u003d color;\\n}\\n\"])},{glslify:332}],332:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],333:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-shader\"),i\u003dt(\"gl-buffer\"),a\u003dt(\"./lib/shaders\");function o(t,e,r){this.plot\u003dt,this.boxBuffer\u003de,this.boxShader\u003dr,this.enabled\u003d!0,this.selectBox\u003d[1/0,1/0,-1/0,-1/0],this.borderColor\u003d[0,0,0,1],this.innerFill\u003d!1,this.innerColor\u003d[0,0,0,.25],this.outerFill\u003d!0,this.outerColor\u003d[0,0,0,.5],this.borderWidth\u003d10}e.exports\u003dfunction(t,e){var r\u003dt.gl,s\u003di(r,[0,0,0,1,1,0,1,1]),l\u003dn(r,a.boxVertex,a.boxFragment),c\u003dnew o(t,s,l);return c.update(e),t.addOverlay(c),c};var s\u003do.prototype;s.draw\u003dfunction(){if(this.enabled){var t\u003dthis.plot,e\u003dthis.selectBox,r\u003dthis.borderWidth,n\u003d(this.innerFill,this.innerColor),i\u003d(this.outerFill,this.outerColor),a\u003dthis.borderColor,o\u003dt.box,s\u003dt.screenBox,l\u003dt.dataBox,c\u003dt.viewBox,u\u003dt.pixelRatio,f\u003d(e[0]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],h\u003d(e[1]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1],p\u003d(e[2]-l[0])*(c[2]-c[0])/(l[2]-l[0])+c[0],d\u003d(e[3]-l[1])*(c[3]-c[1])/(l[3]-l[1])+c[1];if(f\u003dMath.max(f,c[0]),h\u003dMath.max(h,c[1]),p\u003dMath.min(p,c[2]),d\u003dMath.min(d,c[3]),!(p\u003cf||d\u003ch)){o.bind();var m\u003ds[2]-s[0],g\u003ds[3]-s[1];if(this.outerFill\u0026\u0026(o.drawBox(0,0,m,h,i),o.drawBox(0,h,f,d,i),o.drawBox(0,d,m,g,i),o.drawBox(p,h,m,d,i)),this.innerFill\u0026\u0026o.drawBox(f,h,p,d,n),r\u003e0){var v\u003dr*u;o.drawBox(f-v,h-v,p+v,h+v,a),o.drawBox(f-v,d-v,p+v,d+v,a),o.drawBox(f-v,h-v,f+v,d+v,a),o.drawBox(p-v,h-v,p+v,d+v,a)}}}},s.update\u003dfunction(t){t\u003dt||{},this.innerFill\u003d!!t.innerFill,this.outerFill\u003d!!t.outerFill,this.innerColor\u003d(t.innerColor||[0,0,0,.5]).slice(),this.outerColor\u003d(t.outerColor||[0,0,0,.5]).slice(),this.borderColor\u003d(t.borderColor||[0,0,0,1]).slice(),this.borderWidth\u003dt.borderWidth||0,this.selectBox\u003d(t.selectBox||this.selectBox).slice()},s.dispose\u003dfunction(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},{\"./lib/shaders\":331,\"gl-buffer\":263,\"gl-shader\":335}],334:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003de[0],a\u003de[1],o\u003dn(t,r,a,{}),s\u003di.mallocUint8(r*a*4);return new l(t,o,s)};var n\u003dt(\"gl-fbo\"),i\u003dt(\"typedarray-pool\"),a\u003dt(\"ndarray\"),o\u003dt(\"bit-twiddle\").nextPow2;function s(t,e,r,n,i){this.coord\u003d[t,e],this.id\u003dr,this.value\u003dn,this.distance\u003di}function l(t,e,r){this.gl\u003dt,this.fbo\u003de,this.buffer\u003dr,this._readTimeout\u003dnull;var n\u003dthis;this._readCallback\u003dfunction(){n.gl\u0026\u0026(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout\u003dnull)}}var c\u003dl.prototype;Object.defineProperty(c,\"shape\",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape\u003dt;var e\u003dthis.fbo.shape[0],r\u003dthis.fbo.shape[1];if(r*e*4\u003ethis.buffer.length){i.free(this.buffer);for(var n\u003dthis.buffer\u003di.mallocUint8(o(r*e*4)),a\u003d0;a\u003cr*e*4;++a)n[a]\u003d255}return t}}}),c.begin\u003dfunction(){var t\u003dthis.gl;this.shape;t\u0026\u0026(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},c.end\u003dfunction(){var t\u003dthis.gl;t\u0026\u0026(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout\u003dsetTimeout(this._readCallback,1))},c.query\u003dfunction(t,e,r){if(!this.gl)return null;var n\u003dthis.fbo.shape.slice();t|\u003d0,e|\u003d0,\"number\"!\u003dtypeof r\u0026\u0026(r\u003d1);var i\u003d0|Math.min(Math.max(t-r,0),n[0]),o\u003d0|Math.min(Math.max(t+r,0),n[0]),l\u003d0|Math.min(Math.max(e-r,0),n[1]),c\u003d0|Math.min(Math.max(e+r,0),n[1]);if(o\u003c\u003di||c\u003c\u003dl)return null;var u\u003d[o-i,c-l],f\u003da(this.buffer,[u[0],u[1],4],[4,4*n[0],1],4*(i+n[0]*l)),h\u003dfunction(t,e,r){for(var n\u003d1e8,i\u003d-1,a\u003d-1,o\u003dt.shape[0],s\u003dt.shape[1],l\u003d0;l\u003co;l++)for(var c\u003d0;c\u003cs;c++){var u\u003dt.get(l,c,0),f\u003dt.get(l,c,1),h\u003dt.get(l,c,2),p\u003dt.get(l,c,3);if(u\u003c255||f\u003c255||h\u003c255||p\u003c255){var d\u003de-l,m\u003dr-c,g\u003dd*d+m*m;g\u003cn\u0026\u0026(n\u003dg,i\u003dl,a\u003dc)}}return[i,a,n]}(f.hi(u[0],u[1],1),r,r),p\u003dh[0],d\u003dh[1];return p\u003c0||Math.pow(this.radius,2)\u003ch[2]?null:new s(p+i|0,d+l|0,f.get(p,d,0),[f.get(p,d,1),f.get(p,d,2),f.get(p,d,3)],Math.sqrt(h[2]))},c.dispose\u003dfunction(){this.gl\u0026\u0026(this.fbo.dispose(),i.free(this.buffer),this.gl\u003dnull,this._readTimeout\u0026\u0026clearTimeout(this._readTimeout))}},{\"bit-twiddle\":104,\"gl-fbo\":272,ndarray:479,\"typedarray-pool\":613}],335:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/create-uniforms\"),i\u003dt(\"./lib/create-attributes\"),a\u003dt(\"./lib/reflect\"),o\u003dt(\"./lib/shader-cache\"),s\u003dt(\"./lib/runtime-reflect\"),l\u003dt(\"./lib/GLError\");function c(t){this.gl\u003dt,this.gl.lastAttribCount\u003d0,this._vref\u003dthis._fref\u003dthis._relink\u003dthis.vertShader\u003dthis.fragShader\u003dthis.program\u003dthis.attributes\u003dthis.uniforms\u003dthis.types\u003dnull}var u\u003dc.prototype;function f(t,e){return t.name\u003ce.name?-1:1}u.bind\u003dfunction(){var t;this.program||this._relink();var e\u003dthis.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r\u003dthis.gl.lastAttribCount;if(e\u003er)for(t\u003dr;t\u003ce;t++)this.gl.enableVertexAttribArray(t);else if(r\u003ee)for(t\u003de;t\u003cr;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount\u003de,this.gl.useProgram(this.program)},u.dispose\u003dfunction(){for(var t\u003dthis.gl.lastAttribCount,e\u003d0;e\u003ct;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount\u003d0,this._fref\u0026\u0026this._fref.dispose(),this._vref\u0026\u0026this._vref.dispose(),this.attributes\u003dthis.types\u003dthis.vertShader\u003dthis.fragShader\u003dthis.program\u003dthis._relink\u003dthis._fref\u003dthis._vref\u003dnull},u.update\u003dfunction(t,e,r,c){if(!e||1\u003d\u003d\u003darguments.length){var u\u003dt;t\u003du.vertex,e\u003du.fragment,r\u003du.uniforms,c\u003du.attributes}var h\u003dthis,p\u003dh.gl,d\u003dh._vref;h._vref\u003do.shader(p,p.VERTEX_SHADER,t),d\u0026\u0026d.dispose(),h.vertShader\u003dh._vref.shader;var m\u003dthis._fref;if(h._fref\u003do.shader(p,p.FRAGMENT_SHADER,e),m\u0026\u0026m.dispose(),h.fragShader\u003dh._fref.shader,!r||!c){var g\u003dp.createProgram();if(p.attachShader(g,h.fragShader),p.attachShader(g,h.vertShader),p.linkProgram(g),!p.getProgramParameter(g,p.LINK_STATUS)){var v\u003dp.getProgramInfoLog(g);throw new l(v,\"Error linking program:\"+v)}r\u003dr||s.uniforms(p,g),c\u003dc||s.attributes(p,g),p.deleteProgram(g)}(c\u003dc.slice()).sort(f);var y,x\u003d[],b\u003d[],_\u003d[];for(y\u003d0;y\u003cc.length;++y){var w\u003dc[y];if(w.type.indexOf(\"mat\")\u003e\u003d0){for(var T\u003d0|w.type.charAt(w.type.length-1),k\u003dnew Array(T),M\u003d0;M\u003cT;++M)k[M]\u003d_.length,b.push(w.name+\"[\"+M+\"]\"),\"number\"\u003d\u003dtypeof w.location?_.push(w.location+M):Array.isArray(w.location)\u0026\u0026w.location.length\u003d\u003d\u003dT\u0026\u0026\"number\"\u003d\u003dtypeof w.location[M]?_.push(0|w.location[M]):_.push(-1);x.push({name:w.name,type:w.type,locations:k})}else x.push({name:w.name,type:w.type,locations:[_.length]}),b.push(w.name),\"number\"\u003d\u003dtypeof w.location?_.push(0|w.location):_.push(-1)}var A\u003d0;for(y\u003d0;y\u003c_.length;++y)if(_[y]\u003c0){for(;_.indexOf(A)\u003e\u003d0;)A+\u003d1;_[y]\u003dA}var S\u003dnew Array(r.length);function E(){h.program\u003do.program(p,h._vref,h._fref,b,_);for(var t\u003d0;t\u003cr.length;++t)S[t]\u003dp.getUniformLocation(h.program,r[t].name)}E(),h._relink\u003dE,h.types\u003d{uniforms:a(r),attributes:a(c)},h.attributes\u003di(p,h,x,_),Object.defineProperty(h,\"uniforms\",n(p,h,r,S))},e.exports\u003dfunction(t,e,r,n,i){var a\u003dnew c(t);return a.update(e,r,n,i),a}},{\"./lib/GLError\":336,\"./lib/create-attributes\":337,\"./lib/create-uniforms\":338,\"./lib/reflect\":339,\"./lib/runtime-reflect\":340,\"./lib/shader-cache\":341}],336:[function(t,e,r){function n(t,e,r){this.shortMessage\u003de||\"\",this.longMessage\u003dr||\"\",this.rawError\u003dt||\"\",this.message\u003d\"gl-shader: \"+(e||t||\"\")+(r?\"\\n\"+r:\"\"),this.stack\u003d(new Error).stack}n.prototype\u003dnew Error,n.prototype.name\u003d\"GLError\",n.prototype.constructor\u003dn,e.exports\u003dn},{}],337:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,i){for(var a\u003d{},l\u003d0,c\u003dr.length;l\u003cc;++l){var u\u003dr[l],f\u003du.name,h\u003du.type,p\u003du.locations;switch(h){case\"bool\":case\"int\":case\"float\":o(t,e,p[0],i,1,a,f);break;default:if(h.indexOf(\"vec\")\u003e\u003d0){if((d\u003dh.charCodeAt(h.length-1)-48)\u003c2||d\u003e4)throw new n(\"\",\"Invalid data type for attribute \"+f+\": \"+h);o(t,e,p[0],i,d,a,f)}else{if(!(h.indexOf(\"mat\")\u003e\u003d0))throw new n(\"\",\"Unknown data type for attribute \"+f+\": \"+h);var d;if((d\u003dh.charCodeAt(h.length-1)-48)\u003c2||d\u003e4)throw new n(\"\",\"Invalid data type for attribute \"+f+\": \"+h);s(t,e,p,i,d,a,f)}}}return a};var n\u003dt(\"./GLError\");function i(t,e,r,n,i,a){this._gl\u003dt,this._wrapper\u003de,this._index\u003dr,this._locations\u003dn,this._dimension\u003di,this._constFunc\u003da}var a\u003di.prototype;function o(t,e,r,n,a,o,s){for(var l\u003d[\"gl\",\"v\"],c\u003d[],u\u003d0;u\u003ca;++u)l.push(\"x\"+u),c.push(\"x\"+u);l.push(\"if(x0.length\u003d\u003d\u003dvoid 0){return gl.vertexAttrib\"+a+\"f(v,\"+c.join()+\")}else{return gl.vertexAttrib\"+a+\"fv(v,x0)}\");var f\u003dFunction.apply(null,l),h\u003dnew i(t,e,r,n,a,f);Object.defineProperty(o,s,{set:function(e){return t.disableVertexAttribArray(n[r]),f(t,n[r],e),e},get:function(){return h},enumerable:!0})}function s(t,e,r,n,i,a,s){for(var l\u003dnew Array(i),c\u003dnew Array(i),u\u003d0;u\u003ci;++u)o(t,e,r[u],n,i,l,u),c[u]\u003dl[u];Object.defineProperty(l,\"location\",{set:function(t){if(Array.isArray(t))for(var e\u003d0;e\u003ci;++e)c[e].location\u003dt[e];else for(e\u003d0;e\u003ci;++e)c[e].location\u003dt+e;return t},get:function(){for(var t\u003dnew Array(i),e\u003d0;e\u003ci;++e)t[e]\u003dn[r[e]];return t},enumerable:!0}),l.pointer\u003dfunction(e,a,o,s){e\u003de||t.FLOAT,a\u003d!!a,o\u003do||i*i,s\u003ds||0;for(var l\u003d0;l\u003ci;++l){var c\u003dn[r[l]];t.vertexAttribPointer(c,i,e,a,o,s+l*i),t.enableVertexAttribArray(c)}};var f\u003dnew Array(i),h\u003dt[\"vertexAttrib\"+i+\"fv\"];Object.defineProperty(a,s,{set:function(e){for(var a\u003d0;a\u003ci;++a){var o\u003dn[r[a]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))h.call(t,o,e[a]);else{for(var s\u003d0;s\u003ci;++s)f[s]\u003de[i*a+s];h.call(t,o,f)}}return e},get:function(){return l},enumerable:!0})}a.pointer\u003dfunction(t,e,r,n){var i\u003dthis._gl,a\u003dthis._locations[this._index];i.vertexAttribPointer(a,this._dimension,t||i.FLOAT,!!e,r||0,n||0),i.enableVertexAttribArray(a)},a.set\u003dfunction(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(a,\"location\",{get:function(){return this._locations[this._index]},set:function(t){return t!\u003d\u003dthis._locations[this._index]\u0026\u0026(this._locations[this._index]\u003d0|t,this._wrapper.program\u003dnull),0|t}})},{\"./GLError\":336}],338:[function(t,e,r){\"use strict\";var n\u003dt(\"./reflect\"),i\u003dt(\"./GLError\");function a(t){return new Function(\"y\",\"return function(){return y}\")(t)}function o(t,e){for(var r\u003dnew Array(t),n\u003d0;n\u003ct;++n)r[n]\u003de;return r}e.exports\u003dfunction(t,e,r,s){function l(t,e,r){switch(r){case\"bool\":case\"int\":case\"sampler2D\":case\"samplerCube\":return\"gl.uniform1i(locations[\"+e+\"],obj\"+t+\")\";case\"float\":return\"gl.uniform1f(locations[\"+e+\"],obj\"+t+\")\";default:var n\u003dr.indexOf(\"vec\");if(!(0\u003c\u003dn\u0026\u0026n\u003c\u003d1\u0026\u0026r.length\u003d\u003d\u003d4+n)){if(0\u003d\u003d\u003dr.indexOf(\"mat\")\u0026\u00264\u003d\u003d\u003dr.length){var a;if((a\u003dr.charCodeAt(r.length-1)-48)\u003c2||a\u003e4)throw new i(\"\",\"Invalid uniform dimension type for matrix \"+name+\": \"+r);return\"gl.uniformMatrix\"+a+\"fv(locations[\"+e+\"],false,obj\"+t+\")\"}throw new i(\"\",\"Unknown uniform data type for \"+name+\": \"+r)}if((a\u003dr.charCodeAt(r.length-1)-48)\u003c2||a\u003e4)throw new i(\"\",\"Invalid data type\");switch(r.charAt(0)){case\"b\":case\"i\":return\"gl.uniform\"+a+\"iv(locations[\"+e+\"],obj\"+t+\")\";case\"v\":return\"gl.uniform\"+a+\"fv(locations[\"+e+\"],obj\"+t+\")\";default:throw new i(\"\",\"Unrecognized data type for vector \"+name+\": \"+r)}}}function c(e){for(var n\u003d[\"return function updateProperty(obj){\"],i\u003dfunction t(e,r){if(\"object\"!\u003dtypeof r)return[[e,r]];var n\u003d[];for(var i in r){var a\u003dr[i],o\u003de;parseInt(i)+\"\"\u003d\u003d\u003di?o+\u003d\"[\"+i+\"]\":o+\u003d\".\"+i,\"object\"\u003d\u003dtypeof a?n.push.apply(n,t(o,a)):n.push([o,a])}return n}(\"\",e),a\u003d0;a\u003ci.length;++a){var o\u003di[a],c\u003do[0],u\u003do[1];s[u]\u0026\u0026n.push(l(c,u,r[u].type))}return n.push(\"return obj}\"),new Function(\"gl\",\"locations\",n.join(\"\\n\"))(t,s)}function u(n,l,u){if(\"object\"\u003d\u003dtypeof u){var h\u003df(u);Object.defineProperty(n,l,{get:a(h),set:c(u),enumerable:!0,configurable:!1})}else s[u]?Object.defineProperty(n,l,{get:(p\u003du,new Function(\"gl\",\"wrapper\",\"locations\",\"return function(){return gl.getUniform(wrapper.program,locations[\"+p+\"])}\")(t,e,s)),set:c(u),enumerable:!0,configurable:!1}):n[l]\u003dfunction(t){switch(t){case\"bool\":return!1;case\"int\":case\"sampler2D\":case\"samplerCube\":case\"float\":return 0;default:var e\u003dt.indexOf(\"vec\");if(0\u003c\u003de\u0026\u0026e\u003c\u003d1\u0026\u0026t.length\u003d\u003d\u003d4+e){if((r\u003dt.charCodeAt(t.length-1)-48)\u003c2||r\u003e4)throw new i(\"\",\"Invalid data type\");return\"b\"\u003d\u003d\u003dt.charAt(0)?o(r,!1):o(r,0)}if(0\u003d\u003d\u003dt.indexOf(\"mat\")\u0026\u00264\u003d\u003d\u003dt.length){var r;if((r\u003dt.charCodeAt(t.length-1)-48)\u003c2||r\u003e4)throw new i(\"\",\"Invalid uniform dimension type for matrix \"+name+\": \"+t);return o(r*r,0)}throw new i(\"\",\"Unknown uniform data type for \"+name+\": \"+t)}}(r[u].type);var p}function f(t){var e;if(Array.isArray(t)){e\u003dnew Array(t.length);for(var r\u003d0;r\u003ct.length;++r)u(e,r,t[r])}else for(var n in e\u003d{},t)u(e,n,t[n]);return e}var h\u003dn(r,!0);return{get:a(f(h)),set:c(h),enumerable:!0,configurable:!0}}},{\"./GLError\":336,\"./reflect\":339}],339:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){for(var r\u003d{},n\u003d0;n\u003ct.length;++n)for(var i\u003dt[n].name.split(\".\"),a\u003dr,o\u003d0;o\u003ci.length;++o){var s\u003di[o].split(\"[\");if(s.length\u003e1){s[0]in a||(a[s[0]]\u003d[]),a\u003da[s[0]];for(var l\u003d1;l\u003cs.length;++l){var c\u003dparseInt(s[l]);l\u003cs.length-1||o\u003ci.length-1?(c in a||(l\u003cs.length-1?a[c]\u003d[]:a[c]\u003d{}),a\u003da[c]):a[c]\u003de?n:t[n].type}}else o\u003ci.length-1?(s[0]in a||(a[s[0]]\u003d{}),a\u003da[s[0]]):a[s[0]]\u003de?n:t[n].type}return r}},{}],340:[function(t,e,r){\"use strict\";r.uniforms\u003dfunction(t,e){for(var r\u003dt.getProgramParameter(e,t.ACTIVE_UNIFORMS),n\u003d[],i\u003d0;i\u003cr;++i){var o\u003dt.getActiveUniform(e,i);if(o){var s\u003da(t,o.type);if(o.size\u003e1)for(var l\u003d0;l\u003co.size;++l)n.push({name:o.name.replace(\"[0]\",\"[\"+l+\"]\"),type:s});else n.push({name:o.name,type:s})}}return n},r.attributes\u003dfunction(t,e){for(var r\u003dt.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),n\u003d[],i\u003d0;i\u003cr;++i){var o\u003dt.getActiveAttrib(e,i);o\u0026\u0026n.push({name:o.name,type:a(t,o.type)})}return n};var n\u003d{FLOAT:\"float\",FLOAT_VEC2:\"vec2\",FLOAT_VEC3:\"vec3\",FLOAT_VEC4:\"vec4\",INT:\"int\",INT_VEC2:\"ivec2\",INT_VEC3:\"ivec3\",INT_VEC4:\"ivec4\",BOOL:\"bool\",BOOL_VEC2:\"bvec2\",BOOL_VEC3:\"bvec3\",BOOL_VEC4:\"bvec4\",FLOAT_MAT2:\"mat2\",FLOAT_MAT3:\"mat3\",FLOAT_MAT4:\"mat4\",SAMPLER_2D:\"sampler2D\",SAMPLER_CUBE:\"samplerCube\"},i\u003dnull;function a(t,e){if(!i){var r\u003dObject.keys(n);i\u003d{};for(var a\u003d0;a\u003cr.length;++a){var o\u003dr[a];i[t[o]]\u003dn[o]}}return i[e]}},{}],341:[function(t,e,r){\"use strict\";r.shader\u003dfunction(t,e,r){return u(t).getShaderReference(e,r)},r.program\u003dfunction(t,e,r,n,i){return u(t).getProgram(e,r,n,i)};var n\u003dt(\"./GLError\"),i\u003dt(\"gl-format-compiler-error\"),a\u003dnew(\"undefined\"\u003d\u003dtypeof WeakMap?t(\"weakmap-shim\"):WeakMap),o\u003d0;function s(t,e,r,n,i,a,o){this.id\u003dt,this.src\u003de,this.type\u003dr,this.shader\u003dn,this.count\u003da,this.programs\u003d[],this.cache\u003do}function l(t){this.gl\u003dt,this.shaders\u003d[{},{}],this.programs\u003d{}}s.prototype.dispose\u003dfunction(){if(0\u003d\u003d--this.count){for(var t\u003dthis.cache,e\u003dt.gl,r\u003dthis.programs,n\u003d0,i\u003dr.length;n\u003ci;++n){var a\u003dt.programs[r[n]];a\u0026\u0026(delete t.programs[n],e.deleteProgram(a))}e.deleteShader(this.shader),delete t.shaders[this.type\u003d\u003d\u003de.FRAGMENT_SHADER|0][this.src]}};var c\u003dl.prototype;function u(t){var e\u003da.get(t);return e||(e\u003dnew l(t),a.set(t,e)),e}c.getShaderReference\u003dfunction(t,e){var r\u003dthis.gl,a\u003dthis.shaders[t\u003d\u003d\u003dr.FRAGMENT_SHADER|0],l\u003da[e];if(l\u0026\u0026r.isShader(l.shader))l.count+\u003d1;else{var c\u003dfunction(t,e,r){var a\u003dt.createShader(e);if(t.shaderSource(a,r),t.compileShader(a),!t.getShaderParameter(a,t.COMPILE_STATUS)){var o\u003dt.getShaderInfoLog(a);try{var s\u003di(o,r,e)}catch(t){throw console.warn(\"Failed to format compiler error: \"+t),new n(o,\"Error compiling shader:\\n\"+o)}throw new n(o,s.short,s.long)}return a}(r,t,e);l\u003da[e]\u003dnew s(o++,e,t,c,[],1,this)}return l},c.getProgram\u003dfunction(t,e,r,i){var a\u003d[t.id,e.id,r.join(\":\"),i.join(\":\")].join(\"@\"),o\u003dthis.programs[a];return o\u0026\u0026this.gl.isProgram(o)||(this.programs[a]\u003do\u003dfunction(t,e,r,i,a){var o\u003dt.createProgram();t.attachShader(o,e),t.attachShader(o,r);for(var s\u003d0;s\u003ci.length;++s)t.bindAttribLocation(o,a[s],i[s]);if(t.linkProgram(o),!t.getProgramParameter(o,t.LINK_STATUS)){var l\u003dt.getProgramInfoLog(o);throw new n(l,\"Error linking program: \"+l)}return o}(this.gl,t.shader,e.shader,r,i),t.programs.push(a),e.programs.push(a)),o}},{\"./GLError\":336,\"gl-format-compiler-error\":273,\"weakmap-shim\":624}],342:[function(t,e,r){\"use strict\";function n(t){this.plot\u003dt,this.enable\u003d[!0,!0,!1,!1],this.width\u003d[1,1,1,1],this.color\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center\u003d[1/0,1/0]}e.exports\u003dfunction(t,e){var r\u003dnew n(t);return r.update(e),t.addOverlay(r),r};var i\u003dn.prototype;i.update\u003dfunction(t){t\u003dt||{},this.enable\u003d(t.enable||[!0,!0,!1,!1]).slice(),this.width\u003d(t.width||[1,1,1,1]).slice(),this.color\u003d(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map((function(t){return t.slice()})),this.center\u003d(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},i.draw\u003dfunction(){var t\u003dthis.enable,e\u003dthis.width,r\u003dthis.color,n\u003dthis.center,i\u003dthis.plot,a\u003di.line,o\u003di.dataBox,s\u003di.viewBox;if(a.bind(),o[0]\u003c\u003dn[0]\u0026\u0026n[0]\u003c\u003do[2]\u0026\u0026o[1]\u003c\u003dn[1]\u0026\u0026n[1]\u003c\u003do[3]){var l\u003ds[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),c\u003ds[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]\u0026\u0026a.drawLine(l,c,s[0],c,e[0],r[0]),t[1]\u0026\u0026a.drawLine(l,c,l,s[1],e[1],r[1]),t[2]\u0026\u0026a.drawLine(l,c,s[2],c,e[2],r[2]),t[3]\u0026\u0026a.drawLine(l,c,l,s[3],e[3],r[3])}},i.dispose\u003dfunction(){this.plot.removeOverlay(this)}},{}],343:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],344:[function(t,e,r){\"use strict\";var n\u003dt(\"glslify\"),i\u003dt(\"gl-shader\"),a\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nattribute vec3 position, color;\\nattribute float weight;\\n\\nuniform mat4 model, view, projection;\\nuniform vec3 coordinates[3];\\nuniform vec4 colors[3];\\nuniform vec2 screenShape;\\nuniform float lineWidth;\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  vec3 vertexPosition \u003d mix(coordinates[0],\\n    mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\\n\\n  vec4 clipPos \u003d projection * view * model * vec4(vertexPosition, 1.0);\\n  vec2 clipOffset \u003d (projection * view * model * vec4(color, 0.0)).xy;\\n  vec2 delta \u003d weight * clipOffset * screenShape;\\n  vec2 lineOffset \u003d normalize(vec2(delta.y, -delta.x)) / screenShape;\\n\\n  gl_Position   \u003d vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\\n  fragColor     \u003d color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\\n}\\n\"]),o\u003dn([\"precision mediump float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n  gl_FragColor \u003d fragColor;\\n}\"]);e.exports\u003dfunction(t){return i(t,a,o,null,[{name:\"position\",type:\"vec3\"},{name:\"color\",type:\"vec3\"},{name:\"weight\",type:\"float\"}])}},{\"gl-shader\":335,glslify:343}],345:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-buffer\"),i\u003dt(\"gl-vao\"),a\u003dt(\"./shaders/index\");e.exports\u003dfunction(t,e){var r\u003d[];function o(t,e,n,i,a,o){var s\u003d[t,e,n,0,0,0,1];s[i+3]\u003d1,s[i]\u003da,r.push.apply(r,s),s[6]\u003d-1,r.push.apply(r,s),s[i]\u003do,r.push.apply(r,s),r.push.apply(r,s),s[6]\u003d1,r.push.apply(r,s),s[i]\u003da,r.push.apply(r,s)}o(0,0,0,0,0,1),o(0,0,0,1,0,1),o(0,0,0,2,0,1),o(1,0,0,1,-1,1),o(1,0,0,2,-1,1),o(0,1,0,0,-1,1),o(0,1,0,2,-1,1),o(0,0,1,0,-1,1),o(0,0,1,1,-1,1);var l\u003dn(t,r),c\u003di(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),u\u003da(t);u.attributes.position.location\u003d0,u.attributes.color.location\u003d1,u.attributes.weight.location\u003d2;var f\u003dnew s(t,l,c,u);return f.update(e),f};var o\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];function s(t,e,r,n){this.gl\u003dt,this.buffer\u003de,this.vao\u003dr,this.shader\u003dn,this.pixelRatio\u003d1,this.bounds\u003d[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position\u003d[0,0,0],this.lineWidth\u003d[2,2,2],this.colors\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled\u003d[!0,!0,!0],this.drawSides\u003d[!0,!0,!0],this.axes\u003dnull}var l\u003ds.prototype,c\u003d[0,0,0],u\u003d[0,0,0],f\u003d[0,0];l.isTransparent\u003dfunction(){return!1},l.drawTransparent\u003dfunction(t){},l.draw\u003dfunction(t){var e\u003dthis.gl,r\u003dthis.vao,n\u003dthis.shader;r.bind(),n.bind();var i,a\u003dt.model||o,s\u003dt.view||o,l\u003dt.projection||o;this.axes\u0026\u0026(i\u003dthis.axes.lastCubeProps.axis);for(var h\u003dc,p\u003du,d\u003d0;d\u003c3;++d)i\u0026\u0026i[d]\u003c0?(h[d]\u003dthis.bounds[0][d],p[d]\u003dthis.bounds[1][d]):(h[d]\u003dthis.bounds[1][d],p[d]\u003dthis.bounds[0][d]);f[0]\u003de.drawingBufferWidth,f[1]\u003de.drawingBufferHeight,n.uniforms.model\u003da,n.uniforms.view\u003ds,n.uniforms.projection\u003dl,n.uniforms.coordinates\u003d[this.position,h,p],n.uniforms.colors\u003dthis.colors,n.uniforms.screenShape\u003df;for(d\u003d0;d\u003c3;++d)n.uniforms.lineWidth\u003dthis.lineWidth[d]*this.pixelRatio,this.enabled[d]\u0026\u0026(r.draw(e.TRIANGLES,6,6*d),this.drawSides[d]\u0026\u0026r.draw(e.TRIANGLES,12,18+12*d));r.unbind()},l.update\u003dfunction(t){t\u0026\u0026(\"bounds\"in t\u0026\u0026(this.bounds\u003dt.bounds),\"position\"in t\u0026\u0026(this.position\u003dt.position),\"lineWidth\"in t\u0026\u0026(this.lineWidth\u003dt.lineWidth),\"colors\"in t\u0026\u0026(this.colors\u003dt.colors),\"enabled\"in t\u0026\u0026(this.enabled\u003dt.enabled),\"drawSides\"in t\u0026\u0026(this.drawSides\u003dt.drawSides))},l.dispose\u003dfunction(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{\"./shaders/index\":344,\"gl-buffer\":263,\"gl-vao\":357}],346:[function(t,e,r){var n\u003dt(\"glslify\"),i\u003dn([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz \u003d 0, a point that lies on the plane that has v as a normal and that isn\u0027t (0,0,0).\\n  // From the above if-statement we have ||a|| \u003e 0  U  ||b|| \u003e 0.\\n  // Assign z \u003d 0, x \u003d -b, y \u003d a:\\n  // a*-b + b*a + c*0 \u003d -ba + ba + 0 \u003d 0\\n  if (v.x*v.x \u003e v.z*v.z || v.y*v.y \u003e v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the tube vertex and normal at the given index.\\n//\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\n//\\n// Each tube segment is made up of a ring of vertices.\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\n// The indexes of tube segments run from 0 to 8.\\n//\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\n  float segmentCount \u003d 8.0;\\n\\n  float angle \u003d 2.0 * 3.14159 * (index / segmentCount);\\n\\n  vec3 u \u003d getOrthogonalVector(d);\\n  vec3 v \u003d normalize(cross(u, d));\\n\\n  vec3 x \u003d u * cos(angle) * length(d);\\n  vec3 y \u003d v * sin(angle) * length(d);\\n  vec3 v3 \u003d x + y;\\n\\n  normal \u003d normalize(v3);\\n\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 color, position;\\nattribute vec2 uv;\\n\\nuniform float vectorScale, tubeScale;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 eyePosition, lightPosition;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  // Scale the vector magnitude to stay constant with\\n  // model \u0026 view changes.\\n  vec3 normal;\\n  vec3 XYZ \u003d getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\n  vec4 tubePosition \u003d model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate \u003d view * tubePosition;\\n  cameraCoordinate.xyz /\u003d cameraCoordinate.w;\\n  f_lightDirection \u003d lightPosition - cameraCoordinate.xyz;\\n  f_eyeDirection   \u003d eyePosition - cameraCoordinate.xyz;\\n  f_normal \u003d normalize((vec4(normal, 0.0) * inverseModel).xyz);\\n\\n  // vec4 m_position  \u003d model * vec4(tubePosition, 1.0);\\n  vec4 t_position  \u003d view * tubePosition;\\n  gl_Position      \u003d projection * t_position;\\n\\n  f_color          \u003d color;\\n  f_data           \u003d tubePosition.xyz;\\n  f_position       \u003d position.xyz;\\n  f_uv             \u003d uv;\\n}\\n\"]),a\u003dn([\"#extension GL_OES_standard_derivatives : enable\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH \u003d max(x, 0.0001);\\n  float cos2Alpha \u003d NdotH * NdotH;\\n  float tan2Alpha \u003d (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 \u003d roughness * roughness;\\n  float denom \u003d 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat cookTorranceSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness,\\n  float fresnel) {\\n\\n  float VdotN \u003d max(dot(viewDirection, surfaceNormal), 0.0);\\n  float LdotN \u003d max(dot(lightDirection, surfaceNormal), 0.0);\\n\\n  //Half angle vector\\n  vec3 H \u003d normalize(lightDirection + viewDirection);\\n\\n  //Geometric term\\n  float NdotH \u003d max(dot(surfaceNormal, H), 0.0);\\n  float VdotH \u003d max(dot(viewDirection, H), 0.000001);\\n  float LdotH \u003d max(dot(lightDirection, H), 0.000001);\\n  float G1 \u003d (2.0 * NdotH * VdotN) / VdotH;\\n  float G2 \u003d (2.0 * NdotH * LdotN) / LdotH;\\n  float G \u003d min(1.0, min(G1, G2));\\n  \\n  //Distribution term\\n  float D \u003d beckmannDistribution(NdotH, roughness);\\n\\n  //Fresnel term\\n  float F \u003d pow(1.0 - VdotN, fresnel);\\n\\n  //Multiply terms and done\\n  return  G * F * D / max(3.14159265 * VdotN, 0.000001);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform sampler2D texture;\\n\\nvarying vec3 f_normal, f_lightDirection, f_eyeDirection, f_data, f_position;\\nvarying vec4 f_color;\\nvarying vec2 f_uv;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n  vec3 N \u003d normalize(f_normal);\\n  vec3 L \u003d normalize(f_lightDirection);\\n  vec3 V \u003d normalize(f_eyeDirection);\\n\\n  if(gl_FrontFacing) {\\n    N \u003d -N;\\n  }\\n\\n  float specular \u003d min(1.0, max(0.0, cookTorranceSpecular(L, V, N, roughness, fresnel)));\\n  float diffuse  \u003d min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  vec4 surfaceColor \u003d f_color * texture2D(texture, f_uv);\\n  vec4 litColor \u003d surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor \u003d litColor * opacity;\\n}\\n\"]),o\u003dn([\"precision highp float;\\n\\nprecision highp float;\\n#define GLSLIFY 1\\n\\nvec3 getOrthogonalVector(vec3 v) {\\n  // Return up-vector for only-z vector.\\n  // Return ax + by + cz \u003d 0, a point that lies on the plane that has v as a normal and that isn\u0027t (0,0,0).\\n  // From the above if-statement we have ||a|| \u003e 0  U  ||b|| \u003e 0.\\n  // Assign z \u003d 0, x \u003d -b, y \u003d a:\\n  // a*-b + b*a + c*0 \u003d -ba + ba + 0 \u003d 0\\n  if (v.x*v.x \u003e v.z*v.z || v.y*v.y \u003e v.z*v.z) {\\n    return normalize(vec3(-v.y, v.x, 0.0));\\n  } else {\\n    return normalize(vec3(0.0, v.z, -v.y));\\n  }\\n}\\n\\n// Calculate the tube vertex and normal at the given index.\\n//\\n// The returned vertex is for a tube ring with its center at origin, radius of length(d), pointing in the direction of d.\\n//\\n// Each tube segment is made up of a ring of vertices.\\n// These vertices are used to make up the triangles of the tube by connecting them together in the vertex array.\\n// The indexes of tube segments run from 0 to 8.\\n//\\nvec3 getTubePosition(vec3 d, float index, out vec3 normal) {\\n  float segmentCount \u003d 8.0;\\n\\n  float angle \u003d 2.0 * 3.14159 * (index / segmentCount);\\n\\n  vec3 u \u003d getOrthogonalVector(d);\\n  vec3 v \u003d normalize(cross(u, d));\\n\\n  vec3 x \u003d u * cos(angle) * length(d);\\n  vec3 y \u003d v * sin(angle) * length(d);\\n  vec3 v3 \u003d x + y;\\n\\n  normal \u003d normalize(v3);\\n\\n  return v3;\\n}\\n\\nattribute vec4 vector;\\nattribute vec4 position;\\nattribute vec4 id;\\n\\nuniform mat4 model, view, projection;\\nuniform float tubeScale;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  vec3 normal;\\n  vec3 XYZ \u003d getTubePosition(mat3(model) * (tubeScale * vector.w * normalize(vector.xyz)), position.w, normal);\\n  vec4 tubePosition \u003d model * vec4(position.xyz, 1.0) + vec4(XYZ, 0.0);\\n\\n  gl_Position \u003d projection * view * tubePosition;\\n  f_id        \u003d id;\\n  f_position  \u003d position.xyz;\\n}\\n\"]),s\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3  clipBounds[2];\\nuniform float pickId;\\n\\nvarying vec3 f_position;\\nvarying vec4 f_id;\\n\\nvoid main() {\\n  if (outOfRange(clipBounds[0], clipBounds[1], f_position)) discard;\\n\\n  gl_FragColor \u003d vec4(pickId, f_id.xyz);\\n}\"]);r.meshShader\u003d{vertex:i,fragment:a,attributes:[{name:\"position\",type:\"vec4\"},{name:\"color\",type:\"vec4\"},{name:\"uv\",type:\"vec2\"},{name:\"vector\",type:\"vec4\"}]},r.pickShader\u003d{vertex:o,fragment:s,attributes:[{name:\"position\",type:\"vec4\"},{name:\"id\",type:\"vec4\"},{name:\"vector\",type:\"vec4\"}]}},{glslify:347}],347:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],348:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-vec3\"),i\u003dt(\"gl-vec4\"),a\u003d[\"xyz\",\"xzy\",\"yxz\",\"yzx\",\"zxy\",\"zyx\"],o\u003dfunction(t,e,r,a){for(var o\u003d0,s\u003d0;s\u003ct.length;s++)for(var l\u003dt[s].velocities,c\u003d0;c\u003cl.length;c++)o\u003dMath.max(o,n.length(l[c]));var u\u003dt.map((function(t){return function(t,e,r,a){for(var o\u003dt.points,s\u003dt.velocities,l\u003dt.divergences,c\u003d[],u\u003d[],f\u003d[],h\u003d[],p\u003d[],d\u003d[],m\u003d0,g\u003d0,v\u003di.create(),y\u003di.create(),x\u003d0;x\u003co.length;x++){var b\u003do[x],_\u003ds[x],w\u003dl[x];0\u003d\u003d\u003de\u0026\u0026(w\u003d.05*r),g\u003dn.length(_)/a,v\u003di.create(),n.copy(v,_),v[3]\u003dw;for(var T\u003d0;T\u003c8;T++)p[T]\u003d[b[0],b[1],b[2],T];if(h.length\u003e0)for(T\u003d0;T\u003c8;T++){var k\u003d(T+1)%8;c.push(h[T],p[T],p[k],p[k],h[k],h[T]),f.push(y,v,v,v,y,y),d.push(m,g,g,g,m,m);var M\u003dc.length;u.push([M-6,M-5,M-4],[M-3,M-2,M-1])}var A\u003dh;h\u003dp,p\u003dA;var S\u003dy;y\u003dv,v\u003dS;var E\u003dm;m\u003dg,g\u003dE}return{positions:c,cells:u,vectors:f,vertexIntensity:d}}(t,r,a,o)})),f\u003d[],h\u003d[],p\u003d[],d\u003d[];for(s\u003d0;s\u003cu.length;s++){var m\u003du[s],g\u003df.length;f\u003df.concat(m.positions),p\u003dp.concat(m.vectors),d\u003dd.concat(m.vertexIntensity);for(c\u003d0;c\u003cm.cells.length;c++){var v\u003dm.cells[c],y\u003d[];h.push(y);for(var x\u003d0;x\u003cv.length;x++)y.push(v[x]+g)}}return{positions:f,cells:h,vectors:p,vertexIntensity:d,colormap:e}},s\u003dfunction(t,e){var r,n\u003dt.length;for(r\u003d0;r\u003cn;r++){var i\u003dt[r];if(i\u003d\u003d\u003de)return r;if(i\u003ee)return r-1}return r},l\u003dfunction(t,e,r){return t\u003ce?e:t\u003er?r:t},c\u003dfunction(t){var e\u003d1/0;t.sort((function(t,e){return t-e}));for(var r\u003dt.length,n\u003d1;n\u003cr;n++){var i\u003dMath.abs(t[n]-t[n-1]);i\u003ce\u0026\u0026(e\u003di)}return e};e.exports\u003dfunction(t,e){var r\u003dt.startingPositions,i\u003dt.maxLength||1e3,u\u003dt.tubeSize||1,f\u003dt.absoluteTubeSize,h\u003dt.gridFill||\"+x+y+z\",p\u003d{};-1!\u003d\u003dh.indexOf(\"-x\")\u0026\u0026(p.reversedX\u003d!0),-1!\u003d\u003dh.indexOf(\"-y\")\u0026\u0026(p.reversedY\u003d!0),-1!\u003d\u003dh.indexOf(\"-z\")\u0026\u0026(p.reversedZ\u003d!0),p.filled\u003da.indexOf(h.replace(/-/g,\"\").replace(/\\+/g,\"\"));var d\u003dt.getVelocity||function(e){return function(t,e,r){var i\u003de.vectors,a\u003de.meshgrid,o\u003dt[0],c\u003dt[1],u\u003dt[2],f\u003da[0].length,h\u003da[1].length,p\u003da[2].length,d\u003ds(a[0],o),m\u003ds(a[1],c),g\u003ds(a[2],u),v\u003dd+1,y\u003dm+1,x\u003dg+1;if(d\u003dl(d,0,f-1),v\u003dl(v,0,f-1),m\u003dl(m,0,h-1),y\u003dl(y,0,h-1),g\u003dl(g,0,p-1),x\u003dl(x,0,p-1),d\u003c0||m\u003c0||g\u003c0||v\u003ef-1||y\u003eh-1||x\u003ep-1)return n.create();var b,_,w,T,k,M,A\u003da[0][d],S\u003da[0][v],E\u003da[1][m],L\u003da[1][y],C\u003da[2][g],P\u003d(o-A)/(S-A),I\u003d(c-E)/(L-E),O\u003d(u-C)/(a[2][x]-C);switch(isFinite(P)||(P\u003d.5),isFinite(I)||(I\u003d.5),isFinite(O)||(O\u003d.5),r.reversedX\u0026\u0026(d\u003df-1-d,v\u003df-1-v),r.reversedY\u0026\u0026(m\u003dh-1-m,y\u003dh-1-y),r.reversedZ\u0026\u0026(g\u003dp-1-g,x\u003dp-1-x),r.filled){case 5:k\u003dg,M\u003dx,w\u003dm*p,T\u003dy*p,b\u003dd*p*h,_\u003dv*p*h;break;case 4:k\u003dg,M\u003dx,b\u003dd*p,_\u003dv*p,w\u003dm*p*f,T\u003dy*p*f;break;case 3:w\u003dm,T\u003dy,k\u003dg*h,M\u003dx*h,b\u003dd*h*p,_\u003dv*h*p;break;case 2:w\u003dm,T\u003dy,b\u003dd*h,_\u003dv*h,k\u003dg*h*f,M\u003dx*h*f;break;case 1:b\u003dd,_\u003dv,k\u003dg*f,M\u003dx*f,w\u003dm*f*p,T\u003dy*f*p;break;default:b\u003dd,_\u003dv,w\u003dm*f,T\u003dy*f,k\u003dg*f*h,M\u003dx*f*h}var z\u003di[b+w+k],D\u003di[b+w+M],R\u003di[b+T+k],F\u003di[b+T+M],B\u003di[_+w+k],N\u003di[_+w+M],j\u003di[_+T+k],U\u003di[_+T+M],V\u003dn.create(),q\u003dn.create(),H\u003dn.create(),G\u003dn.create();n.lerp(V,z,B,P),n.lerp(q,D,N,P),n.lerp(H,R,j,P),n.lerp(G,F,U,P);var Y\u003dn.create(),W\u003dn.create();n.lerp(Y,V,H,I),n.lerp(W,q,G,I);var X\u003dn.create();return n.lerp(X,Y,W,O),X}(e,t,p)},m\u003dt.getDivergence||function(t,e){var r\u003dn.create(),i\u003d1e-4;n.add(r,t,[i,0,0]);var a\u003dd(r);n.subtract(a,a,e),n.scale(a,a,1/i),n.add(r,t,[0,i,0]);var o\u003dd(r);n.subtract(o,o,e),n.scale(o,o,1/i),n.add(r,t,[0,0,i]);var s\u003dd(r);return n.subtract(s,s,e),n.scale(s,s,1/i),n.add(r,a,o),n.add(r,r,s),r},g\u003d[],v\u003de[0][0],y\u003de[0][1],x\u003de[0][2],b\u003de[1][0],_\u003de[1][1],w\u003de[1][2],T\u003dfunction(t){var e\u003dt[0],r\u003dt[1],n\u003dt[2];return!(e\u003cv||e\u003eb||r\u003cy||r\u003e_||n\u003cx||n\u003ew)},k\u003d10*n.distance(e[0],e[1])/i,M\u003dk*k,A\u003d1,S\u003d0,E\u003dr.length;E\u003e1\u0026\u0026(A\u003dfunction(t){for(var e\u003d[],r\u003d[],n\u003d[],i\u003d{},a\u003d{},o\u003d{},s\u003dt.length,l\u003d0;l\u003cs;l++){var u\u003dt[l],f\u003du[0],h\u003du[1],p\u003du[2];i[f]||(e.push(f),i[f]\u003d!0),a[h]||(r.push(h),a[h]\u003d!0),o[p]||(n.push(p),o[p]\u003d!0)}var d\u003dc(e),m\u003dc(r),g\u003dc(n),v\u003dMath.min(d,m,g);return isFinite(v)?v:1}(r));for(var L\u003d0;L\u003cE;L++){var C\u003dn.create();n.copy(C,r[L]);var P\u003d[C],I\u003d[],O\u003dd(C),z\u003dC;I.push(O);var D\u003d[],R\u003dm(C,O),F\u003dn.length(R);isFinite(F)\u0026\u0026F\u003eS\u0026\u0026(S\u003dF),D.push(F),g.push({points:P,velocities:I,divergences:D});for(var B\u003d0;B\u003c100*i\u0026\u0026P.length\u003ci\u0026\u0026T(C);){B++;var N\u003dn.clone(O),j\u003dn.squaredLength(N);if(0\u003d\u003d\u003dj)break;if(j\u003eM\u0026\u0026n.scale(N,N,k/Math.sqrt(j)),n.add(N,N,C),O\u003dd(N),n.squaredDistance(z,N)-M\u003e-1e-4*M){P.push(N),z\u003dN,I.push(O);R\u003dm(N,O),F\u003dn.length(R);isFinite(F)\u0026\u0026F\u003eS\u0026\u0026(S\u003dF),D.push(F)}C\u003dN}}var U\u003do(g,t.colormap,S,A);return f?U.tubeScale\u003df:(0\u003d\u003d\u003dS\u0026\u0026(S\u003d1),U.tubeScale\u003d.5*u*A/S),U};var u\u003dt(\"./lib/shaders\"),f\u003dt(\"gl-cone3d\").createMesh;e.exports.createTubeMesh\u003dfunction(t,e){return f(t,e,{shaders:u,traceType:\"streamtube\"})}},{\"./lib/shaders\":346,\"gl-cone3d\":264,\"gl-vec3\":376,\"gl-vec4\":412}],349:[function(t,e,r){var n\u003dt(\"gl-shader\"),i\u003dt(\"glslify\"),a\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec4 uv;\\nattribute vec3 f;\\nattribute vec3 normal;\\n\\nuniform vec3 objectOffset;\\nuniform mat4 model, view, projection, inverseModel;\\nuniform vec3 lightPosition, eyePosition;\\nuniform sampler2D colormap;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  vec3 localCoordinate \u003d vec3(uv.zw, f.x);\\n  worldCoordinate \u003d objectOffset + localCoordinate;\\n  vec4 worldPosition \u003d model * vec4(worldCoordinate, 1.0);\\n  vec4 clipPosition \u003d projection * view * worldPosition;\\n  gl_Position \u003d clipPosition;\\n  kill \u003d f.y;\\n  value \u003d f.z;\\n  planeCoordinate \u003d uv.xy;\\n\\n  vColor \u003d texture2D(colormap, vec2(value, value));\\n\\n  //Lighting geometry parameters\\n  vec4 cameraCoordinate \u003d view * worldPosition;\\n  cameraCoordinate.xyz /\u003d cameraCoordinate.w;\\n  lightDirection \u003d lightPosition - cameraCoordinate.xyz;\\n  eyeDirection   \u003d eyePosition - cameraCoordinate.xyz;\\n  surfaceNormal  \u003d normalize((vec4(normal,0) * inverseModel).xyz);\\n}\\n\"]),o\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nfloat beckmannDistribution(float x, float roughness) {\\n  float NdotH \u003d max(x, 0.0001);\\n  float cos2Alpha \u003d NdotH * NdotH;\\n  float tan2Alpha \u003d (cos2Alpha - 1.0) / cos2Alpha;\\n  float roughness2 \u003d roughness * roughness;\\n  float denom \u003d 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\\n  return exp(tan2Alpha / roughness2) / denom;\\n}\\n\\nfloat beckmannSpecular(\\n  vec3 lightDirection,\\n  vec3 viewDirection,\\n  vec3 surfaceNormal,\\n  float roughness) {\\n  return beckmannDistribution(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\\n}\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec3 lowerBound, upperBound;\\nuniform float contourTint;\\nuniform vec4 contourColor;\\nuniform sampler2D colormap;\\nuniform vec3 clipBounds[2];\\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\\nuniform float vertexColor;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  if (\\n    kill \u003e 0.0 ||\\n    vColor.a \u003d\u003d 0.0 ||\\n    outOfRange(clipBounds[0], clipBounds[1], worldCoordinate)\\n  ) discard;\\n\\n  vec3 N \u003d normalize(surfaceNormal);\\n  vec3 V \u003d normalize(eyeDirection);\\n  vec3 L \u003d normalize(lightDirection);\\n\\n  if(gl_FrontFacing) {\\n    N \u003d -N;\\n  }\\n\\n  float specular \u003d max(beckmannSpecular(L, V, N, roughness), 0.);\\n  float diffuse  \u003d min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\\n\\n  //decide how to interpolate color \\u2014 in vertex or in fragment\\n  vec4 surfaceColor \u003d\\n    step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) +\\n    step(.5, vertexColor) * vColor;\\n\\n  vec4 litColor \u003d surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular,  1.0);\\n\\n  gl_FragColor \u003d mix(litColor, contourColor, contourTint) * opacity;\\n}\\n\"]),s\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec4 uv;\\nattribute float f;\\n\\nuniform vec3 objectOffset;\\nuniform mat3 permutation;\\nuniform mat4 model, view, projection;\\nuniform float height, zOffset;\\nuniform sampler2D colormap;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\\nvarying vec4 vColor;\\n\\nvoid main() {\\n  vec3 dataCoordinate \u003d permutation * vec3(uv.xy, height);\\n  worldCoordinate \u003d objectOffset + dataCoordinate;\\n  vec4 worldPosition \u003d model * vec4(worldCoordinate, 1.0);\\n\\n  vec4 clipPosition \u003d projection * view * worldPosition;\\n  clipPosition.z +\u003d zOffset;\\n\\n  gl_Position \u003d clipPosition;\\n  value \u003d f + objectOffset.z;\\n  kill \u003d -1.0;\\n  planeCoordinate \u003d uv.zw;\\n\\n  vColor \u003d texture2D(colormap, vec2(value, value));\\n\\n  //Don\u0027t do lighting for contours\\n  surfaceNormal   \u003d vec3(1,0,0);\\n  eyeDirection    \u003d vec3(0,1,0);\\n  lightDirection  \u003d vec3(0,0,1);\\n}\\n\"]),l\u003di([\"precision highp float;\\n#define GLSLIFY 1\\n\\nbool outOfRange(float a, float b, float p) {\\n  return ((p \u003e max(a, b)) || \\n          (p \u003c min(a, b)));\\n}\\n\\nbool outOfRange(vec2 a, vec2 b, vec2 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y));\\n}\\n\\nbool outOfRange(vec3 a, vec3 b, vec3 p) {\\n  return (outOfRange(a.x, b.x, p.x) ||\\n          outOfRange(a.y, b.y, p.y) ||\\n          outOfRange(a.z, b.z, p.z));\\n}\\n\\nbool outOfRange(vec4 a, vec4 b, vec4 p) {\\n  return outOfRange(a.xyz, b.xyz, p.xyz);\\n}\\n\\nuniform vec2 shape;\\nuniform vec3 clipBounds[2];\\nuniform float pickId;\\n\\nvarying float value, kill;\\nvarying vec3 worldCoordinate;\\nvarying vec2 planeCoordinate;\\nvarying vec3 surfaceNormal;\\n\\nvec2 splitFloat(float v) {\\n  float vh \u003d 255.0 * v;\\n  float upper \u003d floor(vh);\\n  float lower \u003d fract(vh);\\n  return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\\n}\\n\\nvoid main() {\\n  if ((kill \u003e 0.0) ||\\n      (outOfRange(clipBounds[0], clipBounds[1], worldCoordinate))) discard;\\n\\n  vec2 ux \u003d splitFloat(planeCoordinate.x / shape.x);\\n  vec2 uy \u003d splitFloat(planeCoordinate.y / shape.y);\\n  gl_FragColor \u003d vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\\n}\\n\"]);r.createShader\u003dfunction(t){var e\u003dn(t,a,o,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}]);return e.attributes.uv.location\u003d0,e.attributes.f.location\u003d1,e.attributes.normal.location\u003d2,e},r.createPickShader\u003dfunction(t){var e\u003dn(t,a,l,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"vec3\"},{name:\"normal\",type:\"vec3\"}]);return e.attributes.uv.location\u003d0,e.attributes.f.location\u003d1,e.attributes.normal.location\u003d2,e},r.createContourShader\u003dfunction(t){var e\u003dn(t,s,o,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"float\"}]);return e.attributes.uv.location\u003d0,e.attributes.f.location\u003d1,e},r.createPickContourShader\u003dfunction(t){var e\u003dn(t,s,l,null,[{name:\"uv\",type:\"vec4\"},{name:\"f\",type:\"float\"}]);return e.attributes.uv.location\u003d0,e.attributes.f.location\u003d1,e}},{\"gl-shader\":335,glslify:438}],350:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.gl,r\u003dy(e),n\u003db(e),s\u003dx(e),l\u003d_(e),c\u003di(e),u\u003da(e,[{buffer:c,size:4,stride:40,offset:0},{buffer:c,size:3,stride:40,offset:16},{buffer:c,size:3,stride:40,offset:28}]),f\u003di(e),h\u003da(e,[{buffer:f,size:4,stride:20,offset:0},{buffer:f,size:1,stride:20,offset:16}]),p\u003di(e),d\u003da(e,[{buffer:p,size:2,type:e.FLOAT}]),m\u003do(e,1,256,e.RGBA,e.UNSIGNED_BYTE);m.minFilter\u003de.LINEAR,m.magFilter\u003de.LINEAR;var g\u003dnew A(e,[0,0],[[0,0,0],[0,0,0]],r,n,c,u,m,s,l,f,h,p,d,[0,0,0]),v\u003d{levels:[[],[],[]]};for(var w in t)v[w]\u003dt[w];return v.colormap\u003dv.colormap||\"jet\",g.update(v),g};var n\u003dt(\"bit-twiddle\"),i\u003dt(\"gl-buffer\"),a\u003dt(\"gl-vao\"),o\u003dt(\"gl-texture2d\"),s\u003dt(\"typedarray-pool\"),l\u003dt(\"colormap\"),c\u003dt(\"ndarray-ops\"),u\u003dt(\"ndarray-pack\"),f\u003dt(\"ndarray\"),h\u003dt(\"surface-nets\"),p\u003dt(\"gl-mat4/multiply\"),d\u003dt(\"gl-mat4/invert\"),m\u003dt(\"binary-search-bounds\"),g\u003dt(\"ndarray-gradient\"),v\u003dt(\"./lib/shaders\"),y\u003dv.createShader,x\u003dv.createContourShader,b\u003dv.createPickShader,_\u003dv.createPickContourShader,w\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],T\u003d[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],k\u003d[[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0]];function M(t,e,r,n,i){this.position\u003dt,this.index\u003de,this.uv\u003dr,this.level\u003dn,this.dataCoordinate\u003di}!function(){for(var t\u003d0;t\u003c3;++t){var e\u003dk[t],r\u003d(t+2)%3;e[(t+1)%3+0]\u003d1,e[r+3]\u003d1,e[t+6]\u003d1}}();function A(t,e,r,n,i,a,o,l,c,u,h,p,d,m,g){this.gl\u003dt,this.shape\u003de,this.bounds\u003dr,this.objectOffset\u003dg,this.intensityBounds\u003d[],this._shader\u003dn,this._pickShader\u003di,this._coordinateBuffer\u003da,this._vao\u003do,this._colorMap\u003dl,this._contourShader\u003dc,this._contourPickShader\u003du,this._contourBuffer\u003dh,this._contourVAO\u003dp,this._contourOffsets\u003d[[],[],[]],this._contourCounts\u003d[[],[],[]],this._vertexCount\u003d0,this._pickResult\u003dnew M([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer\u003dd,this._dynamicVAO\u003dm,this._dynamicOffsets\u003d[0,0,0],this._dynamicCounts\u003d[0,0,0],this.contourWidth\u003d[1,1,1],this.contourLevels\u003d[[1],[1],[1]],this.contourTint\u003d[0,0,0],this.contourColor\u003d[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour\u003d!0,this.showSurface\u003d!0,this.enableHighlight\u003d[!0,!0,!0],this.highlightColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint\u003d[1,1,1],this.highlightLevel\u003d[-1,-1,-1],this.enableDynamic\u003d[!0,!0,!0],this.dynamicLevel\u003d[NaN,NaN,NaN],this.dynamicColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint\u003d[1,1,1],this.dynamicWidth\u003d[1,1,1],this.axesBounds\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject\u003d[!1,!1,!1],this.contourProject\u003d[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds\u003d[!1,!1],this._field\u003d[f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0]),f(s.mallocFloat(1024),[0,0])],this.pickId\u003d1,this.clipBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData\u003d!1,this.pixelRatio\u003d1,this.opacity\u003d1,this.lightPosition\u003d[10,1e4,0],this.ambientLight\u003d.8,this.diffuseLight\u003d.8,this.specularLight\u003d2,this.roughness\u003d.5,this.fresnel\u003d1.5,this.vertexColor\u003d0,this.dirty\u003d!0}var S\u003dA.prototype;S.genColormap\u003dfunction(t,e){var r\u003d!1,n\u003du([l({colormap:t,nshades:256,format:\"rgba\"}).map((function(t,n){var i\u003de?function(t,e){if(!e)return 1;if(!e.length)return 1;for(var r\u003d0;r\u003ce.length;++r){if(e.length\u003c2)return 1;if(e[r][0]\u003d\u003d\u003dt)return e[r][1];if(e[r][0]\u003et\u0026\u0026r\u003e0){var n\u003d(e[r][0]-t)/(e[r][0]-e[r-1][0]);return e[r][1]*(1-n)+n*e[r-1][1]}}return 1}(n/255,e):t[3];return i\u003c1\u0026\u0026(r\u003d!0),[t[0],t[1],t[2],255*i]}))]);return c.divseq(n,255),this.hasAlphaScale\u003dr,n},S.isTransparent\u003dfunction(){return this.opacity\u003c1||this.hasAlphaScale},S.isOpaque\u003dfunction(){return!this.isTransparent()},S.pickSlots\u003d1,S.setPickBase\u003dfunction(t){this.pickId\u003dt};var E\u003d[0,0,0],L\u003d{showSurface:!1,showContour:!1,projections:[w.slice(),w.slice(),w.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]};function C(t,e){var r,n,i,a\u003de.axes\u0026\u0026e.axes.lastCubeProps.axis||E,o\u003de.showSurface,s\u003de.showContour;for(r\u003d0;r\u003c3;++r)for(o\u003do||e.surfaceProject[r],n\u003d0;n\u003c3;++n)s\u003ds||e.contourProject[r][n];for(r\u003d0;r\u003c3;++r){var l\u003dL.projections[r];for(n\u003d0;n\u003c16;++n)l[n]\u003d0;for(n\u003d0;n\u003c4;++n)l[5*n]\u003d1;l[5*r]\u003d0,l[12+r]\u003de.axesBounds[+(a[r]\u003e0)][r],p(l,t.model,l);var c\u003dL.clipBounds[r];for(i\u003d0;i\u003c2;++i)for(n\u003d0;n\u003c3;++n)c[i][n]\u003dt.clipBounds[i][n];c[0][r]\u003d-1e8,c[1][r]\u003d1e8}return L.showSurface\u003do,L.showContour\u003ds,L}var P\u003d{model:w,view:w,projection:w,inverseModel:w.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,objectOffset:[0,0,0],kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},I\u003dw.slice(),O\u003d[1,0,0,0,1,0,0,0,1];function z(t,e){t\u003dt||{};var r\u003dthis.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n\u003dP;n.model\u003dt.model||w,n.view\u003dt.view||w,n.projection\u003dt.projection||w,n.lowerBound\u003d[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound\u003d[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.objectOffset\u003dthis.objectOffset,n.contourColor\u003dthis.contourColor[0],n.inverseModel\u003dd(n.inverseModel,n.model);for(var i\u003d0;i\u003c2;++i)for(var a\u003dn.clipBounds[i],o\u003d0;o\u003c3;++o)a[o]\u003dMath.min(Math.max(this.clipBounds[i][o],-1e8),1e8);n.kambient\u003dthis.ambientLight,n.kdiffuse\u003dthis.diffuseLight,n.kspecular\u003dthis.specularLight,n.roughness\u003dthis.roughness,n.fresnel\u003dthis.fresnel,n.opacity\u003dthis.opacity,n.height\u003d0,n.permutation\u003dO,n.vertexColor\u003dthis.vertexColor;var s\u003dI;for(p(s,n.view,n.model),p(s,n.projection,s),d(s,s),i\u003d0;i\u003c3;++i)n.eyePosition[i]\u003ds[12+i]/s[15];var l\u003ds[15];for(i\u003d0;i\u003c3;++i)l+\u003dthis.lightPosition[i]*s[4*i+3];for(i\u003d0;i\u003c3;++i){var c\u003ds[12+i];for(o\u003d0;o\u003c3;++o)c+\u003ds[4*o+i]*this.lightPosition[o];n.lightPosition[i]\u003dc/l}var u\u003dC(n,this);if(u.showSurface){for(this._shader.bind(),this._shader.uniforms\u003dn,this._vao.bind(),this.showSurface\u0026\u0026this._vertexCount\u0026\u0026this._vao.draw(r.TRIANGLES,this._vertexCount),i\u003d0;i\u003c3;++i)this.surfaceProject[i]\u0026\u0026this.vertexCount\u0026\u0026(this._shader.uniforms.model\u003du.projections[i],this._shader.uniforms.clipBounds\u003du.clipBounds[i],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(u.showContour){var f\u003dthis._contourShader;n.kambient\u003d1,n.kdiffuse\u003d0,n.kspecular\u003d0,n.opacity\u003d1,f.bind(),f.uniforms\u003dn;var h\u003dthis._contourVAO;for(h.bind(),i\u003d0;i\u003c3;++i)for(f.uniforms.permutation\u003dk[i],r.lineWidth(this.contourWidth[i]*this.pixelRatio),o\u003d0;o\u003cthis.contourLevels[i].length;++o)o\u003d\u003d\u003dthis.highlightLevel[i]?(f.uniforms.contourColor\u003dthis.highlightColor[i],f.uniforms.contourTint\u003dthis.highlightTint[i]):0!\u003d\u003do\u0026\u0026o-1!\u003d\u003dthis.highlightLevel[i]||(f.uniforms.contourColor\u003dthis.contourColor[i],f.uniforms.contourTint\u003dthis.contourTint[i]),this._contourCounts[i][o]\u0026\u0026(f.uniforms.height\u003dthis.contourLevels[i][o],h.draw(r.LINES,this._contourCounts[i][o],this._contourOffsets[i][o]));for(i\u003d0;i\u003c3;++i)for(f.uniforms.model\u003du.projections[i],f.uniforms.clipBounds\u003du.clipBounds[i],o\u003d0;o\u003c3;++o)if(this.contourProject[i][o]){f.uniforms.permutation\u003dk[o],r.lineWidth(this.contourWidth[o]*this.pixelRatio);for(var m\u003d0;m\u003cthis.contourLevels[o].length;++m)m\u003d\u003d\u003dthis.highlightLevel[o]?(f.uniforms.contourColor\u003dthis.highlightColor[o],f.uniforms.contourTint\u003dthis.highlightTint[o]):0!\u003d\u003dm\u0026\u0026m-1!\u003d\u003dthis.highlightLevel[o]||(f.uniforms.contourColor\u003dthis.contourColor[o],f.uniforms.contourTint\u003dthis.contourTint[o]),this._contourCounts[o][m]\u0026\u0026(f.uniforms.height\u003dthis.contourLevels[o][m],h.draw(r.LINES,this._contourCounts[o][m],this._contourOffsets[o][m]))}for(h.unbind(),(h\u003dthis._dynamicVAO).bind(),i\u003d0;i\u003c3;++i)if(0!\u003d\u003dthis._dynamicCounts[i])for(f.uniforms.model\u003dn.model,f.uniforms.clipBounds\u003dn.clipBounds,f.uniforms.permutation\u003dk[i],r.lineWidth(this.dynamicWidth[i]*this.pixelRatio),f.uniforms.contourColor\u003dthis.dynamicColor[i],f.uniforms.contourTint\u003dthis.dynamicTint[i],f.uniforms.height\u003dthis.dynamicLevel[i],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]),o\u003d0;o\u003c3;++o)this.contourProject[o][i]\u0026\u0026(f.uniforms.model\u003du.projections[o],f.uniforms.clipBounds\u003du.clipBounds[o],h.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]));h.unbind()}}S.draw\u003dfunction(t){return z.call(this,t,!1)},S.drawTransparent\u003dfunction(t){return z.call(this,t,!0)};var D\u003d{model:w,view:w,projection:w,inverseModel:w,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,objectOffset:[0,0,0],permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};function R(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function F(t){return Array.isArray(t)?3\u003d\u003d\u003dt.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function B(t){if(Array.isArray(t)){if(Array.isArray(t))return[F(t[0]),F(t[1]),F(t[2])];var e\u003dF(t);return[e.slice(),e.slice(),e.slice()]}}S.drawPick\u003dfunction(t){t\u003dt||{};var e\u003dthis.gl;e.disable(e.CULL_FACE);var r\u003dD;r.model\u003dt.model||w,r.view\u003dt.view||w,r.projection\u003dt.projection||w,r.shape\u003dthis._field[2].shape,r.pickId\u003dthis.pickId/255,r.lowerBound\u003dthis.bounds[0],r.upperBound\u003dthis.bounds[1],r.objectOffset\u003dthis.objectOffset,r.permutation\u003dO;for(var n\u003d0;n\u003c2;++n)for(var i\u003dr.clipBounds[n],a\u003d0;a\u003c3;++a)i[a]\u003dMath.min(Math.max(this.clipBounds[n][a],-1e8),1e8);var o\u003dC(r,this);if(o.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms\u003dr,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n\u003d0;n\u003c3;++n)this.surfaceProject[n]\u0026\u0026(this._pickShader.uniforms.model\u003do.projections[n],this._pickShader.uniforms.clipBounds\u003do.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(o.showContour){var s\u003dthis._contourPickShader;s.bind(),s.uniforms\u003dr;var l\u003dthis._contourVAO;for(l.bind(),a\u003d0;a\u003c3;++a)for(e.lineWidth(this.contourWidth[a]*this.pixelRatio),s.uniforms.permutation\u003dk[a],n\u003d0;n\u003cthis.contourLevels[a].length;++n)this._contourCounts[a][n]\u0026\u0026(s.uniforms.height\u003dthis.contourLevels[a][n],l.draw(e.LINES,this._contourCounts[a][n],this._contourOffsets[a][n]));for(n\u003d0;n\u003c3;++n)for(s.uniforms.model\u003do.projections[n],s.uniforms.clipBounds\u003do.clipBounds[n],a\u003d0;a\u003c3;++a)if(this.contourProject[n][a]){s.uniforms.permutation\u003dk[a],e.lineWidth(this.contourWidth[a]*this.pixelRatio);for(var c\u003d0;c\u003cthis.contourLevels[a].length;++c)this._contourCounts[a][c]\u0026\u0026(s.uniforms.height\u003dthis.contourLevels[a][c],l.draw(e.LINES,this._contourCounts[a][c],this._contourOffsets[a][c]))}l.unbind()}},S.pick\u003dfunction(t){if(!t)return null;if(t.id!\u003d\u003dthis.pickId)return null;var e\u003dthis._field[2].shape,r\u003dthis._pickResult,n\u003de[0]*(t.value[0]+(t.value[2]\u003e\u003e4)/16)/255,i\u003dMath.floor(n),a\u003dn-i,o\u003de[1]*(t.value[1]+(15\u0026t.value[2])/16)/255,s\u003dMath.floor(o),l\u003do-s;i+\u003d1,s+\u003d1;var c\u003dr.position;c[0]\u003dc[1]\u003dc[2]\u003d0;for(var u\u003d0;u\u003c2;++u)for(var f\u003du?a:1-a,h\u003d0;h\u003c2;++h)for(var p\u003di+u,d\u003ds+h,g\u003df*(h?l:1-l),v\u003d0;v\u003c3;++v)c[v]+\u003dthis._field[v].get(p,d)*g;for(var y\u003dthis._pickResult.level,x\u003d0;x\u003c3;++x)if(y[x]\u003dm.le(this.contourLevels[x],c[x]),y[x]\u003c0)this.contourLevels[x].length\u003e0\u0026\u0026(y[x]\u003d0);else if(y[x]\u003cthis.contourLevels[x].length-1){var b\u003dthis.contourLevels[x][y[x]],_\u003dthis.contourLevels[x][y[x]+1];Math.abs(b-c[x])\u003eMath.abs(_-c[x])\u0026\u0026(y[x]+\u003d1)}for(r.index[0]\u003da\u003c.5?i:i+1,r.index[1]\u003dl\u003c.5?s:s+1,r.uv[0]\u003dn/e[0],r.uv[1]\u003do/e[1],v\u003d0;v\u003c3;++v)r.dataCoordinate[v]\u003dthis._field[v].get(r.index[0],r.index[1]);return r},S.padField\u003dfunction(t,e){var r\u003de.shape.slice(),n\u003dt.shape.slice();c.assign(t.lo(1,1).hi(r[0],r[1]),e),c.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),c.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),c.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),c.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))},S.update\u003dfunction(t){t\u003dt||{},this.objectOffset\u003dt.objectOffset||this.objectOffset,this.dirty\u003d!0,\"contourWidth\"in t\u0026\u0026(this.contourWidth\u003dR(t.contourWidth,Number)),\"showContour\"in t\u0026\u0026(this.showContour\u003dR(t.showContour,Boolean)),\"showSurface\"in t\u0026\u0026(this.showSurface\u003d!!t.showSurface),\"contourTint\"in t\u0026\u0026(this.contourTint\u003dR(t.contourTint,Boolean)),\"contourColor\"in t\u0026\u0026(this.contourColor\u003dB(t.contourColor)),\"contourProject\"in t\u0026\u0026(this.contourProject\u003dR(t.contourProject,(function(t){return R(t,Boolean)}))),\"surfaceProject\"in t\u0026\u0026(this.surfaceProject\u003dt.surfaceProject),\"dynamicColor\"in t\u0026\u0026(this.dynamicColor\u003dB(t.dynamicColor)),\"dynamicTint\"in t\u0026\u0026(this.dynamicTint\u003dR(t.dynamicTint,Number)),\"dynamicWidth\"in t\u0026\u0026(this.dynamicWidth\u003dR(t.dynamicWidth,Number)),\"opacity\"in t\u0026\u0026(this.opacity\u003dt.opacity),\"opacityscale\"in t\u0026\u0026(this.opacityscale\u003dt.opacityscale),\"colorBounds\"in t\u0026\u0026(this.colorBounds\u003dt.colorBounds),\"vertexColor\"in t\u0026\u0026(this.vertexColor\u003dt.vertexColor?1:0),\"colormap\"in t\u0026\u0026this._colorMap.setPixels(this.genColormap(t.colormap,this.opacityscale));var e\u003dt.field||t.coords\u0026\u0026t.coords[2]||null,r\u003d!1;if(e||(e\u003dthis._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),\"field\"in t||\"coords\"in t){var i\u003d(e.shape[0]+2)*(e.shape[1]+2);i\u003ethis._field[2].data.length\u0026\u0026(s.freeFloat(this._field[2].data),this._field[2].data\u003ds.mallocFloat(n.nextPow2(i))),this._field[2]\u003df(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),this.padField(this._field[2],e),this.shape\u003de.shape.slice();for(var a\u003dthis.shape,o\u003d0;o\u003c2;++o)this._field[2].size\u003ethis._field[o].data.length\u0026\u0026(s.freeFloat(this._field[o].data),this._field[o].data\u003ds.mallocFloat(this._field[2].size)),this._field[o]\u003df(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var l\u003dt.coords;if(!Array.isArray(l)||3!\u003d\u003dl.length)throw new Error(\"gl-surface: invalid coordinates for x/y\");for(o\u003d0;o\u003c2;++o){var c\u003dl[o];for(v\u003d0;v\u003c2;++v)if(c.shape[v]!\u003d\u003da[v])throw new Error(\"gl-surface: coords have incorrect shape\");this.padField(this._field[o],c)}}else if(t.ticks){var u\u003dt.ticks;if(!Array.isArray(u)||2!\u003d\u003du.length)throw new Error(\"gl-surface: invalid ticks\");for(o\u003d0;o\u003c2;++o){var p\u003du[o];if((Array.isArray(p)||p.length)\u0026\u0026(p\u003df(p)),p.shape[0]!\u003d\u003da[o])throw new Error(\"gl-surface: invalid tick length\");var d\u003df(p.data,a);d.stride[o]\u003dp.stride[0],d.stride[1^o]\u003d0,this.padField(this._field[o],d)}}else{for(o\u003d0;o\u003c2;++o){var m\u003d[0,0];m[o]\u003d1,this._field[o]\u003df(this._field[o].data,[a[0]+2,a[1]+2],m,0)}this._field[0].set(0,0,0);for(var v\u003d0;v\u003ca[0];++v)this._field[0].set(v+1,0,v);for(this._field[0].set(a[0]+1,0,a[0]-1),this._field[1].set(0,0,0),v\u003d0;v\u003ca[1];++v)this._field[1].set(0,v+1,v);this._field[1].set(0,a[1]+1,a[1]-1)}var y\u003dthis._field,x\u003df(s.mallocFloat(3*y[2].size*2),[3,a[0]+2,a[1]+2,2]);for(o\u003d0;o\u003c3;++o)g(x.pick(o),y[o],\"mirror\");var b\u003df(s.mallocFloat(3*y[2].size),[a[0]+2,a[1]+2,3]);for(o\u003d0;o\u003ca[0]+2;++o)for(v\u003d0;v\u003ca[1]+2;++v){var _\u003dx.get(0,o,v,0),w\u003dx.get(0,o,v,1),k\u003dx.get(1,o,v,0),M\u003dx.get(1,o,v,1),A\u003dx.get(2,o,v,0),S\u003dx.get(2,o,v,1),E\u003dk*S-M*A,L\u003dA*w-S*_,C\u003d_*M-w*k,P\u003dMath.sqrt(E*E+L*L+C*C);P\u003c1e-8?(P\u003dMath.max(Math.abs(E),Math.abs(L),Math.abs(C)))\u003c1e-8?(C\u003d1,L\u003dE\u003d0,P\u003d1):P\u003d1/P:P\u003d1/Math.sqrt(P),b.set(o,v,0,E*P),b.set(o,v,1,L*P),b.set(o,v,2,C*P)}s.free(x.data);var I\u003d[1/0,1/0,1/0],O\u003d[-1/0,-1/0,-1/0],z\u003d1/0,D\u003d-1/0,F\u003d(a[0]-1)*(a[1]-1)*6,N\u003ds.mallocFloat(n.nextPow2(10*F)),j\u003d0,U\u003d0;for(o\u003d0;o\u003ca[0]-1;++o)t:for(v\u003d0;v\u003ca[1]-1;++v){for(var V\u003d0;V\u003c2;++V)for(var q\u003d0;q\u003c2;++q)for(var H\u003d0;H\u003c3;++H){var G\u003dthis._field[H].get(1+o+V,1+v+q);if(isNaN(G)||!isFinite(G))continue t}for(H\u003d0;H\u003c6;++H){var Y\u003do+T[H][0],W\u003dv+T[H][1],X\u003dthis._field[0].get(Y+1,W+1),Z\u003dthis._field[1].get(Y+1,W+1);G\u003dthis._field[2].get(Y+1,W+1),E\u003db.get(Y+1,W+1,0),L\u003db.get(Y+1,W+1,1),C\u003db.get(Y+1,W+1,2),t.intensity\u0026\u0026(J\u003dt.intensity.get(Y,W));var J\u003dt.intensity?t.intensity.get(Y,W):G+this.objectOffset[2];N[j++]\u003dY,N[j++]\u003dW,N[j++]\u003dX,N[j++]\u003dZ,N[j++]\u003dG,N[j++]\u003d0,N[j++]\u003dJ,N[j++]\u003dE,N[j++]\u003dL,N[j++]\u003dC,I[0]\u003dMath.min(I[0],X+this.objectOffset[0]),I[1]\u003dMath.min(I[1],Z+this.objectOffset[1]),I[2]\u003dMath.min(I[2],G+this.objectOffset[2]),z\u003dMath.min(z,J),O[0]\u003dMath.max(O[0],X+this.objectOffset[0]),O[1]\u003dMath.max(O[1],Z+this.objectOffset[1]),O[2]\u003dMath.max(O[2],G+this.objectOffset[2]),D\u003dMath.max(D,J),U+\u003d1}}for(t.intensityBounds\u0026\u0026(z\u003d+t.intensityBounds[0],D\u003d+t.intensityBounds[1]),o\u003d6;o\u003cj;o+\u003d10)N[o]\u003d(N[o]-z)/(D-z);this._vertexCount\u003dU,this._coordinateBuffer.update(N.subarray(0,j)),s.freeFloat(N),s.free(b.data),this.bounds\u003d[I,O],this.intensity\u003dt.intensity||this._field[2],this.intensityBounds[0]\u003d\u003d\u003dz\u0026\u0026this.intensityBounds[1]\u003d\u003d\u003dD||(r\u003d!0),this.intensityBounds\u003d[z,D]}if(\"levels\"in t){var K\u003dt.levels;for(K\u003dArray.isArray(K[0])?K.slice():[[],[],K],o\u003d0;o\u003c3;++o)K[o]\u003dK[o].slice(),K[o].sort((function(t,e){return t-e}));for(o\u003d0;o\u003c3;++o)for(v\u003d0;v\u003cK[o].length;++v)K[o][v]-\u003dthis.objectOffset[o];t:for(o\u003d0;o\u003c3;++o){if(K[o].length!\u003d\u003dthis.contourLevels[o].length){r\u003d!0;break}for(v\u003d0;v\u003cK[o].length;++v)if(K[o][v]!\u003d\u003dthis.contourLevels[o][v]){r\u003d!0;break t}}this.contourLevels\u003dK}if(r){y\u003dthis._field,a\u003dthis.shape;for(var Q\u003d[],$\u003d0;$\u003c3;++$){var tt\u003dthis.contourLevels[$],et\u003d[],rt\u003d[],nt\u003d[0,0,0];for(o\u003d0;o\u003ctt.length;++o){var it\u003dh(this._field[$],tt[o]);et.push(Q.length/5|0),U\u003d0;t:for(v\u003d0;v\u003cit.cells.length;++v){var at\u003dit.cells[v];for(H\u003d0;H\u003c2;++H){var ot\u003dit.positions[at[H]],st\u003dot[0],lt\u003d0|Math.floor(st),ct\u003dst-lt,ut\u003dot[1],ft\u003d0|Math.floor(ut),ht\u003dut-ft,pt\u003d!1;e:for(var dt\u003d0;dt\u003c3;++dt){nt[dt]\u003d0;var mt\u003d($+dt+1)%3;for(V\u003d0;V\u003c2;++V){var gt\u003dV?ct:1-ct;for(Y\u003d0|Math.min(Math.max(lt+V,0),a[0]),q\u003d0;q\u003c2;++q){var vt\u003dq?ht:1-ht;if(W\u003d0|Math.min(Math.max(ft+q,0),a[1]),G\u003ddt\u003c2?this._field[mt].get(Y,W):(this.intensity.get(Y,W)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(G)||isNaN(G)){pt\u003d!0;break e}var yt\u003dgt*vt;nt[dt]+\u003dyt*G}}}if(pt){if(H\u003e0){for(var xt\u003d0;xt\u003c5;++xt)Q.pop();U-\u003d1}continue t}Q.push(nt[0],nt[1],ot[0],ot[1],nt[2]),U+\u003d1}}rt.push(U)}this._contourOffsets[$]\u003det,this._contourCounts[$]\u003drt}var bt\u003ds.mallocFloat(Q.length);for(o\u003d0;o\u003cQ.length;++o)bt[o]\u003dQ[o];this._contourBuffer.update(bt),s.freeFloat(bt)}},S.dispose\u003dfunction(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t\u003d0;t\u003c3;++t)s.freeFloat(this._field[t].data)},S.highlight\u003dfunction(t){var e,r;if(!t)return this._dynamicCounts\u003d[0,0,0],this.dyanamicLevel\u003d[NaN,NaN,NaN],void(this.highlightLevel\u003d[-1,-1,-1]);for(e\u003d0;e\u003c3;++e)this.enableHighlight[e]?this.highlightLevel[e]\u003dt.level[e]:this.highlightLevel[e]\u003d-1;for(r\u003dthis.snapToData?t.dataCoordinate:t.position,e\u003d0;e\u003c3;++e)r[e]-\u003dthis.objectOffset[e];if(this.enableDynamic[0]\u0026\u0026r[0]!\u003d\u003dthis.dynamicLevel[0]||this.enableDynamic[1]\u0026\u0026r[1]!\u003d\u003dthis.dynamicLevel[1]||this.enableDynamic[2]\u0026\u0026r[2]!\u003d\u003dthis.dynamicLevel[2]){for(var n\u003d0,i\u003dthis.shape,a\u003ds.mallocFloat(12*i[0]*i[1]),o\u003d0;o\u003c3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]\u003dr[o];var l\u003d(o+1)%3,c\u003d(o+2)%3,u\u003dthis._field[o],f\u003dthis._field[l],p\u003dthis._field[c],d\u003dh(u,r[o]),m\u003dd.cells,g\u003dd.positions;for(this._dynamicOffsets[o]\u003dn,e\u003d0;e\u003cm.length;++e)for(var v\u003dm[e],y\u003d0;y\u003c2;++y){var x\u003dg[v[y]],b\u003d+x[0],_\u003d0|b,w\u003d0|Math.min(_+1,i[0]),T\u003db-_,k\u003d1-T,M\u003d+x[1],A\u003d0|M,S\u003d0|Math.min(A+1,i[1]),E\u003dM-A,L\u003d1-E,C\u003dk*L,P\u003dk*E,I\u003dT*L,O\u003dT*E,z\u003dC*f.get(_,A)+P*f.get(_,S)+I*f.get(w,A)+O*f.get(w,S),D\u003dC*p.get(_,A)+P*p.get(_,S)+I*p.get(w,A)+O*p.get(w,S);if(isNaN(z)||isNaN(D)){y\u0026\u0026(n-\u003d1);break}a[2*n+0]\u003dz,a[2*n+1]\u003dD,n+\u003d1}this._dynamicCounts[o]\u003dn-this._dynamicOffsets[o]}else this.dynamicLevel[o]\u003dNaN,this._dynamicCounts[o]\u003d0;this._dynamicBuffer.update(a.subarray(0,2*n)),s.freeFloat(a)}}},{\"./lib/shaders\":349,\"binary-search-bounds\":103,\"bit-twiddle\":104,colormap:137,\"gl-buffer\":263,\"gl-mat4/invert\":295,\"gl-mat4/multiply\":297,\"gl-texture2d\":352,\"gl-vao\":357,ndarray:479,\"ndarray-gradient\":472,\"ndarray-ops\":474,\"ndarray-pack\":475,\"surface-nets\":587,\"typedarray-pool\":613}],351:[function(t,e,r){\"use strict\";var n\u003dt(\"css-font\"),i\u003dt(\"pick-by-alias\"),a\u003dt(\"regl\"),o\u003dt(\"gl-util/context\"),s\u003dt(\"es6-weak-map\"),l\u003dt(\"color-normalize\"),c\u003dt(\"font-atlas\"),u\u003dt(\"typedarray-pool\"),f\u003dt(\"parse-rect\"),h\u003dt(\"is-plain-obj\"),p\u003dt(\"parse-unit\"),d\u003dt(\"to-px\"),m\u003dt(\"detect-kerning\"),g\u003dt(\"object-assign\"),v\u003dt(\"font-measure\"),y\u003dt(\"flatten-vertex-data\"),x\u003dt(\"bit-twiddle\").nextPow2,b\u003dnew s,_\u003d!1;if(document.body){var w\u003ddocument.body.appendChild(document.createElement(\"div\"));w.style.font\u003d\"italic small-caps bold condensed 16px/2 cursive\",getComputedStyle(w).fontStretch\u0026\u0026(_\u003d!0),document.body.removeChild(w)}var T\u003dfunction(t){!function(t){return\"function\"\u003d\u003dtypeof t\u0026\u0026t._gl\u0026\u0026t.prop\u0026\u0026t.texture\u0026\u0026t.buffer}(t)?this.gl\u003do(t):(t\u003d{regl:t},this.gl\u003dt.regl._gl),this.shader\u003db.get(this.gl),this.shader?this.regl\u003dthis.shader.regl:this.regl\u003dt.regl||a({gl:this.gl}),this.charBuffer\u003dthis.regl.buffer({type:\"uint8\",usage:\"stream\"}),this.sizeBuffer\u003dthis.regl.buffer({type:\"float\",usage:\"stream\"}),this.shader||(this.shader\u003dthis.createShader(),b.set(this.gl,this.shader)),this.batch\u003d[],this.fontSize\u003d[],this.font\u003d[],this.fontAtlas\u003d[],this.draw\u003dthis.shader.draw.bind(this),this.render\u003dfunction(){this.regl._refresh(),this.draw(this.batch)},this.canvas\u003dthis.gl.canvas,this.update(h(t)?t:{})};T.prototype.createShader\u003dfunction(){var t\u003dthis.regl,e\u003dt({blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},stencil:{enable:!1},depth:{enable:!1},count:t.prop(\"count\"),offset:t.prop(\"offset\"),attributes:{charOffset:{offset:4,stride:8,buffer:t.this(\"sizeBuffer\")},width:{offset:0,stride:8,buffer:t.this(\"sizeBuffer\")},char:t.this(\"charBuffer\"),position:t.this(\"position\")},uniforms:{atlasSize:function(t,e){return[e.atlas.width,e.atlas.height]},atlasDim:function(t,e){return[e.atlas.cols,e.atlas.rows]},atlas:function(t,e){return e.atlas.texture},charStep:function(t,e){return e.atlas.step},em:function(t,e){return e.atlas.em},color:t.prop(\"color\"),opacity:t.prop(\"opacity\"),viewport:t.this(\"viewportArray\"),scale:t.this(\"scale\"),align:t.prop(\"align\"),baseline:t.prop(\"baseline\"),translate:t.this(\"translate\"),positionOffset:t.prop(\"positionOffset\")},primitive:\"points\",viewport:t.this(\"viewport\"),vert:\"\\n\\t\\t\\tprecision highp float;\\n\\t\\t\\tattribute float width, charOffset, char;\\n\\t\\t\\tattribute vec2 position;\\n\\t\\t\\tuniform float fontSize, charStep, em, align, baseline;\\n\\t\\t\\tuniform vec4 viewport;\\n\\t\\t\\tuniform vec4 color;\\n\\t\\t\\tuniform vec2 atlasSize, atlasDim, scale, translate, positionOffset;\\n\\t\\t\\tvarying vec2 charCoord, charId;\\n\\t\\t\\tvarying float charWidth;\\n\\t\\t\\tvarying vec4 fontColor;\\n\\t\\t\\tvoid main () {\\n\\t\\t\\t\\t\"+(T.normalViewport?\"\":\"vec2 positionOffset \u003d vec2(positionOffset.x,- positionOffset.y);\")+\"\\n\\n\\t\\t\\t\\tvec2 offset \u003d floor(em * (vec2(align + charOffset, baseline)\\n\\t\\t\\t\\t\\t+ positionOffset))\\n\\t\\t\\t\\t\\t/ (viewport.zw * scale.xy);\\n\\n\\t\\t\\t\\tvec2 position \u003d (position + translate) * scale;\\n\\t\\t\\t\\tposition +\u003d offset * scale;\\n\\n\\t\\t\\t\\t\"+(T.normalViewport?\"position.y \u003d 1. - position.y;\":\"\")+\"\\n\\n\\t\\t\\t\\tcharCoord \u003d position * viewport.zw + viewport.xy;\\n\\n\\t\\t\\t\\tgl_Position \u003d vec4(position * 2. - 1., 0, 1);\\n\\n\\t\\t\\t\\tgl_PointSize \u003d charStep;\\n\\n\\t\\t\\t\\tcharId.x \u003d mod(char, atlasDim.x);\\n\\t\\t\\t\\tcharId.y \u003d floor(char / atlasDim.x);\\n\\n\\t\\t\\t\\tcharWidth \u003d width * em;\\n\\n\\t\\t\\t\\tfontColor \u003d color / 255.;\\n\\t\\t\\t}\",frag:\"\\n\\t\\t\\tprecision highp float;\\n\\t\\t\\tuniform sampler2D atlas;\\n\\t\\t\\tuniform float fontSize, charStep, opacity;\\n\\t\\t\\tuniform vec2 atlasSize;\\n\\t\\t\\tuniform vec4 viewport;\\n\\t\\t\\tvarying vec4 fontColor;\\n\\t\\t\\tvarying vec2 charCoord, charId;\\n\\t\\t\\tvarying float charWidth;\\n\\n\\t\\t\\tfloat lightness(vec4 color) {\\n\\t\\t\\t\\treturn color.r * 0.299 + color.g * 0.587 + color.b * 0.114;\\n\\t\\t\\t}\\n\\n\\t\\t\\tvoid main () {\\n\\t\\t\\t\\tvec2 uv \u003d gl_FragCoord.xy - charCoord + charStep * .5;\\n\\t\\t\\t\\tfloat halfCharStep \u003d floor(charStep * .5 + .5);\\n\\n\\t\\t\\t\\t// invert y and shift by 1px (FF expecially needs that)\\n\\t\\t\\t\\tuv.y \u003d charStep - uv.y;\\n\\n\\t\\t\\t\\t// ignore points outside of character bounding box\\n\\t\\t\\t\\tfloat halfCharWidth \u003d ceil(charWidth * .5);\\n\\t\\t\\t\\tif (floor(uv.x) \u003e halfCharStep + halfCharWidth ||\\n\\t\\t\\t\\t\\tfloor(uv.x) \u003c halfCharStep - halfCharWidth) return;\\n\\n\\t\\t\\t\\tuv +\u003d charId * charStep;\\n\\t\\t\\t\\tuv \u003d uv / atlasSize;\\n\\n\\t\\t\\t\\tvec4 color \u003d fontColor;\\n\\t\\t\\t\\tvec4 mask \u003d texture2D(atlas, uv);\\n\\n\\t\\t\\t\\tfloat maskY \u003d lightness(mask);\\n\\t\\t\\t\\t// float colorY \u003d lightness(color);\\n\\t\\t\\t\\tcolor.a *\u003d maskY;\\n\\t\\t\\t\\tcolor.a *\u003d opacity;\\n\\n\\t\\t\\t\\t// color.a +\u003d .1;\\n\\n\\t\\t\\t\\t// antialiasing, see yiq color space y-channel formula\\n\\t\\t\\t\\t// color.rgb +\u003d (1. - color.rgb) * (1. - mask.rgb);\\n\\n\\t\\t\\t\\tgl_FragColor \u003d color;\\n\\t\\t\\t}\"});return{regl:t,draw:e,atlas:{}}},T.prototype.update\u003dfunction(t){var e\u003dthis;if(\"string\"\u003d\u003dtypeof t)t\u003d{text:t};else if(!t)return;null!\u003d(t\u003di(t,{position:\"position positions coord coords coordinates\",font:\"font fontFace fontface typeface cssFont css-font family fontFamily\",fontSize:\"fontSize fontsize size font-size\",text:\"text texts chars characters value values symbols\",align:\"align alignment textAlign textbaseline\",baseline:\"baseline textBaseline textbaseline\",direction:\"dir direction textDirection\",color:\"color colour fill fill-color fillColor textColor textcolor\",kerning:\"kerning kern\",range:\"range dataBox\",viewport:\"vp viewport viewBox viewbox viewPort\",opacity:\"opacity alpha transparency visible visibility opaque\",offset:\"offset positionOffset padding shift indent indentation\"},!0)).opacity\u0026\u0026(Array.isArray(t.opacity)?this.opacity\u003dt.opacity.map((function(t){return parseFloat(t)})):this.opacity\u003dparseFloat(t.opacity)),null!\u003dt.viewport\u0026\u0026(this.viewport\u003df(t.viewport),T.normalViewport\u0026\u0026(this.viewport.y\u003dthis.canvas.height-this.viewport.y-this.viewport.height),this.viewportArray\u003d[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null\u003d\u003dthis.viewport\u0026\u0026(this.viewport\u003d{x:0,y:0,width:this.gl.drawingBufferWidth,height:this.gl.drawingBufferHeight},this.viewportArray\u003d[this.viewport.x,this.viewport.y,this.viewport.width,this.viewport.height]),null!\u003dt.kerning\u0026\u0026(this.kerning\u003dt.kerning),null!\u003dt.offset\u0026\u0026(\"number\"\u003d\u003dtypeof t.offset\u0026\u0026(t.offset\u003d[t.offset,0]),this.positionOffset\u003dy(t.offset)),t.direction\u0026\u0026(this.direction\u003dt.direction),t.range\u0026\u0026(this.range\u003dt.range,this.scale\u003d[1/(t.range[2]-t.range[0]),1/(t.range[3]-t.range[1])],this.translate\u003d[-t.range[0],-t.range[1]]),t.scale\u0026\u0026(this.scale\u003dt.scale),t.translate\u0026\u0026(this.translate\u003dt.translate),this.scale||(this.scale\u003d[1/this.viewport.width,1/this.viewport.height]),this.translate||(this.translate\u003d[0,0]),this.font.length||t.font||(t.font\u003dT.baseFontSize+\"px sans-serif\");var r,a\u003d!1,o\u003d!1;if(t.font\u0026\u0026(Array.isArray(t.font)?t.font:[t.font]).forEach((function(t,r){if(\"string\"\u003d\u003dtypeof t)try{t\u003dn.parse(t)}catch(e){t\u003dn.parse(T.baseFontSize+\"px \"+t)}else t\u003dn.parse(n.stringify(t));var i\u003dn.stringify({size:T.baseFontSize,family:t.family,stretch:_?t.stretch:void 0,variant:t.variant,weight:t.weight,style:t.style}),s\u003dp(t.size),l\u003dMath.round(s[0]*d(s[1]));if(l!\u003d\u003de.fontSize[r]\u0026\u0026(o\u003d!0,e.fontSize[r]\u003dl),!(e.font[r]\u0026\u0026i\u003d\u003de.font[r].baseString||(a\u003d!0,e.font[r]\u003dT.fonts[i],e.font[r]))){var c\u003dt.family.join(\", \"),u\u003d[t.style];t.style!\u003dt.variant\u0026\u0026u.push(t.variant),t.variant!\u003dt.weight\u0026\u0026u.push(t.weight),_\u0026\u0026t.weight!\u003dt.stretch\u0026\u0026u.push(t.stretch),e.font[r]\u003d{baseString:i,family:c,weight:t.weight,stretch:t.stretch,style:t.style,variant:t.variant,width:{},kerning:{},metrics:v(c,{origin:\"top\",fontSize:T.baseFontSize,fontStyle:u.join(\" \")})},T.fonts[i]\u003de.font[r]}})),(a||o)\u0026\u0026this.font.forEach((function(r,i){var a\u003dn.stringify({size:e.fontSize[i],family:r.family,stretch:_?r.stretch:void 0,variant:r.variant,weight:r.weight,style:r.style});if(e.fontAtlas[i]\u003de.shader.atlas[a],!e.fontAtlas[i]){var o\u003dr.metrics;e.shader.atlas[a]\u003de.fontAtlas[i]\u003d{fontString:a,step:2*Math.ceil(e.fontSize[i]*o.bottom*.5),em:e.fontSize[i],cols:0,rows:0,height:0,width:0,chars:[],ids:{},texture:e.regl.texture()}}null\u003d\u003dt.text\u0026\u0026(t.text\u003de.text)})),\"string\"\u003d\u003dtypeof t.text\u0026\u0026t.position\u0026\u0026t.position.length\u003e2){for(var s\u003dArray(.5*t.position.length),h\u003d0;h\u003cs.length;h++)s[h]\u003dt.text;t.text\u003ds}if(null!\u003dt.text||a){if(this.textOffsets\u003d[0],Array.isArray(t.text)){this.count\u003dt.text[0].length,this.counts\u003d[this.count];for(var b\u003d1;b\u003ct.text.length;b++)this.textOffsets[b]\u003dthis.textOffsets[b-1]+t.text[b-1].length,this.count+\u003dt.text[b].length,this.counts.push(t.text[b].length);this.text\u003dt.text.join(\"\")}else this.text\u003dt.text,this.count\u003dthis.text.length,this.counts\u003d[this.count];r\u003d[],this.font.forEach((function(t,n){T.atlasContext.font\u003dt.baseString;for(var i\u003de.fontAtlas[n],a\u003d0;a\u003ce.text.length;a++){var o\u003de.text.charAt(a);if(null\u003d\u003di.ids[o]\u0026\u0026(i.ids[o]\u003di.chars.length,i.chars.push(o),r.push(o)),null\u003d\u003dt.width[o]\u0026\u0026(t.width[o]\u003dT.atlasContext.measureText(o).width/T.baseFontSize,e.kerning)){var s\u003d[];for(var l in t.width)s.push(l+o,o+l);g(t.kerning,m(t.family,{pairs:s}))}}}))}if(t.position)if(t.position.length\u003e2){for(var w\u003d!t.position[0].length,k\u003du.mallocFloat(2*this.count),M\u003d0,A\u003d0;M\u003cthis.counts.length;M++){var S\u003dthis.counts[M];if(w)for(var E\u003d0;E\u003cS;E++)k[A++]\u003dt.position[2*M],k[A++]\u003dt.position[2*M+1];else for(var L\u003d0;L\u003cS;L++)k[A++]\u003dt.position[M][0],k[A++]\u003dt.position[M][1]}this.position.call?this.position({type:\"float\",data:k}):this.position\u003dthis.regl.buffer({type:\"float\",data:k}),u.freeFloat(k)}else this.position.destroy\u0026\u0026this.position.destroy(),this.position\u003d{constant:t.position};if(t.text||a){var C\u003du.mallocUint8(this.count),P\u003du.mallocFloat(2*this.count);this.textWidth\u003d[];for(var I\u003d0,O\u003d0;I\u003cthis.counts.length;I++){for(var z\u003dthis.counts[I],D\u003dthis.font[I]||this.font[0],R\u003dthis.fontAtlas[I]||this.fontAtlas[0],F\u003d0;F\u003cz;F++){var B\u003dthis.text.charAt(O),N\u003dthis.text.charAt(O-1);if(C[O]\u003dR.ids[B],P[2*O]\u003dD.width[B],F){var j\u003dP[2*O-2],U\u003dP[2*O],V\u003dP[2*O-1]+.5*j+.5*U;if(this.kerning){var q\u003dD.kerning[N+B];q\u0026\u0026(V+\u003d.001*q)}P[2*O+1]\u003dV}else P[2*O+1]\u003d.5*P[2*O];O++}this.textWidth.push(P.length?.5*P[2*O-2]+P[2*O-1]:0)}t.align||(t.align\u003dthis.align),this.charBuffer({data:C,type:\"uint8\",usage:\"stream\"}),this.sizeBuffer({data:P,type:\"float\",usage:\"stream\"}),u.freeUint8(C),u.freeFloat(P),r.length\u0026\u0026this.font.forEach((function(t,r){var n\u003de.fontAtlas[r],i\u003dn.step,a\u003dMath.floor(T.maxAtlasSize/i),o\u003dMath.min(a,n.chars.length),s\u003dMath.ceil(n.chars.length/o),l\u003dx(o*i),u\u003dx(s*i);n.width\u003dl,n.height\u003du,n.rows\u003ds,n.cols\u003do,n.em\u0026\u0026n.texture({data:c({canvas:T.atlasCanvas,font:n.fontString,chars:n.chars,shape:[l,u],step:[i,i]})})}))}if(t.align\u0026\u0026(this.align\u003dt.align,this.alignOffset\u003dthis.textWidth.map((function(t,r){var n\u003dArray.isArray(e.align)?e.align.length\u003e1?e.align[r]:e.align[0]:e.align;if(\"number\"\u003d\u003dtypeof n)return n;switch(n){case\"right\":case\"end\":return-t;case\"center\":case\"centre\":case\"middle\":return.5*-t}return 0}))),null\u003d\u003dthis.baseline\u0026\u0026null\u003d\u003dt.baseline\u0026\u0026(t.baseline\u003d0),null!\u003dt.baseline\u0026\u0026(this.baseline\u003dt.baseline,Array.isArray(this.baseline)||(this.baseline\u003d[this.baseline]),this.baselineOffset\u003dthis.baseline.map((function(t,r){var n\u003d(e.font[r]||e.font[0]).metrics,i\u003d0;return i+\u003d.5*n.bottom,i+\u003d\"number\"\u003d\u003dtypeof t?t-n.baseline:-n[t],T.normalViewport||(i*\u003d-1),i}))),null!\u003dt.color)if(t.color||(t.color\u003d\"transparent\"),\"string\"!\u003dtypeof t.color\u0026\u0026isNaN(t.color)){var H;if(\"number\"\u003d\u003dtypeof t.color[0]\u0026\u0026t.color.length\u003ethis.counts.length){var G\u003dt.color.length;H\u003du.mallocUint8(G);for(var Y\u003d(t.color.subarray||t.color.slice).bind(t.color),W\u003d0;W\u003cG;W+\u003d4)H.set(l(Y(W,W+4),\"uint8\"),W)}else{var X\u003dt.color.length;H\u003du.mallocUint8(4*X);for(var Z\u003d0;Z\u003cX;Z++)H.set(l(t.color[Z]||0,\"uint8\"),4*Z)}this.color\u003dH}else this.color\u003dl(t.color,\"uint8\");if(t.position||t.text||t.color||t.baseline||t.align||t.font||t.offset||t.opacity)if(this.color.length\u003e4||this.baselineOffset.length\u003e1||this.align\u0026\u0026this.align.length\u003e1||this.fontAtlas.length\u003e1||this.positionOffset.length\u003e2){var J\u003dMath.max(.5*this.position.length||0,.25*this.color.length||0,this.baselineOffset.length||0,this.alignOffset.length||0,this.font.length||0,this.opacity.length||0,.5*this.positionOffset.length||0);this.batch\u003dArray(J);for(var K\u003d0;K\u003cthis.batch.length;K++)this.batch[K]\u003d{count:this.counts.length\u003e1?this.counts[K]:this.counts[0],offset:this.textOffsets.length\u003e1?this.textOffsets[K]:this.textOffsets[0],color:this.color?this.color.length\u003c\u003d4?this.color:this.color.subarray(4*K,4*K+4):[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[K]:this.opacity,baseline:null!\u003dthis.baselineOffset[K]?this.baselineOffset[K]:this.baselineOffset[0],align:this.align?null!\u003dthis.alignOffset[K]?this.alignOffset[K]:this.alignOffset[0]:0,atlas:this.fontAtlas[K]||this.fontAtlas[0],positionOffset:this.positionOffset.length\u003e2?this.positionOffset.subarray(2*K,2*K+2):this.positionOffset}}else this.count?this.batch\u003d[{count:this.count,offset:0,color:this.color||[0,0,0,255],opacity:Array.isArray(this.opacity)?this.opacity[0]:this.opacity,baseline:this.baselineOffset[0],align:this.alignOffset?this.alignOffset[0]:0,atlas:this.fontAtlas[0],positionOffset:this.positionOffset}]:this.batch\u003d[]},T.prototype.destroy\u003dfunction(){},T.prototype.kerning\u003d!0,T.prototype.position\u003d{constant:new Float32Array(2)},T.prototype.translate\u003dnull,T.prototype.scale\u003dnull,T.prototype.font\u003dnull,T.prototype.text\u003d\"\",T.prototype.positionOffset\u003d[0,0],T.prototype.opacity\u003d1,T.prototype.color\u003dnew Uint8Array([0,0,0,255]),T.prototype.alignOffset\u003d[0,0],T.normalViewport\u003d!1,T.maxAtlasSize\u003d1024,T.atlasCanvas\u003ddocument.createElement(\"canvas\"),T.atlasContext\u003dT.atlasCanvas.getContext(\"2d\",{alpha:!1}),T.baseFontSize\u003d64,T.fonts\u003d{},e.exports\u003dT},{\"bit-twiddle\":104,\"color-normalize\":131,\"css-font\":150,\"detect-kerning\":177,\"es6-weak-map\":237,\"flatten-vertex-data\":248,\"font-atlas\":249,\"font-measure\":250,\"gl-util/context\":353,\"is-plain-obj\":453,\"object-assign\":483,\"parse-rect\":488,\"parse-unit\":490,\"pick-by-alias\":494,regl:536,\"to-px\":596,\"typedarray-pool\":613}],352:[function(t,e,r){\"use strict\";var n\u003dt(\"ndarray\"),i\u003dt(\"ndarray-ops\"),a\u003dt(\"typedarray-pool\");e.exports\u003dfunction(t){if(arguments.length\u003c\u003d1)throw new Error(\"gl-texture2d: Missing arguments for texture2d constructor\");o||c(t);if(\"number\"\u003d\u003dtypeof arguments[1])return v(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return v(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(\"object\"\u003d\u003dtypeof arguments[1]){var e\u003darguments[1],r\u003du(e)?e:e.raw;if(r)return y(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape\u0026\u0026e.data\u0026\u0026e.stride)return x(t,e)}throw new Error(\"gl-texture2d: Invalid arguments for texture2d constructor\")};var o\u003dnull,s\u003dnull,l\u003dnull;function c(t){o\u003d[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],s\u003d[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],l\u003d[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}function u(t){return\"undefined\"!\u003dtypeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!\u003dtypeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!\u003dtypeof HTMLVideoElement\u0026\u0026t instanceof HTMLVideoElement||\"undefined\"!\u003dtypeof ImageData\u0026\u0026t instanceof ImageData}var f\u003dfunction(t,e){i.muls(t,e,255)};function h(t,e,r){var n\u003dt.gl,i\u003dn.getParameter(n.MAX_TEXTURE_SIZE);if(e\u003c0||e\u003ei||r\u003c0||r\u003ei)throw new Error(\"gl-texture2d: Invalid texture size\");return t._shape\u003d[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels\u003d[0],t}function p(t,e,r,n,i,a){this.gl\u003dt,this.handle\u003de,this.format\u003di,this.type\u003da,this._shape\u003d[r,n],this._mipLevels\u003d[0],this._magFilter\u003dt.NEAREST,this._minFilter\u003dt.NEAREST,this._wrapS\u003dt.CLAMP_TO_EDGE,this._wrapT\u003dt.CLAMP_TO_EDGE,this._anisoSamples\u003d1;var o\u003dthis,s\u003d[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS\u003dt}},{get:function(){return o._wrapT},set:function(t){return o.wrapT\u003dt}}]),this._wrapVector\u003ds;var l\u003d[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width\u003dt}},{get:function(){return o._shape[1]},set:function(t){return o.height\u003dt}}]),this._shapeVector\u003dl}var d\u003dp.prototype;function m(t,e){return 3\u003d\u003d\u003dt.length?1\u003d\u003d\u003de[2]\u0026\u0026e[1]\u003d\u003d\u003dt[0]*t[2]\u0026\u0026e[0]\u003d\u003d\u003dt[2]:1\u003d\u003d\u003de[0]\u0026\u0026e[1]\u003d\u003d\u003dt[0]}function g(t){var e\u003dt.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function v(t,e,r,n,i){var a\u003dt.getParameter(t.MAX_TEXTURE_SIZE);if(e\u003c0||e\u003ea||r\u003c0||r\u003ea)throw new Error(\"gl-texture2d: Invalid texture shape\");if(i\u003d\u003d\u003dt.FLOAT\u0026\u0026!t.getExtension(\"OES_texture_float\"))throw new Error(\"gl-texture2d: Floating point textures not supported on this platform\");var o\u003dg(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,i,null),new p(t,o,e,r,n,i)}function y(t,e,r,n,i,a){var o\u003dg(t);return t.texImage2D(t.TEXTURE_2D,0,i,i,a,e),new p(t,o,r,n,i,a)}function x(t,e){var r\u003de.dtype,o\u003de.shape.slice(),s\u003dt.getParameter(t.MAX_TEXTURE_SIZE);if(o[0]\u003c0||o[0]\u003es||o[1]\u003c0||o[1]\u003es)throw new Error(\"gl-texture2d: Invalid texture size\");var l\u003dm(o,e.stride.slice()),c\u003d0;\"float32\"\u003d\u003d\u003dr?c\u003dt.FLOAT:\"float64\"\u003d\u003d\u003dr?(c\u003dt.FLOAT,l\u003d!1,r\u003d\"float32\"):\"uint8\"\u003d\u003d\u003dr?c\u003dt.UNSIGNED_BYTE:(c\u003dt.UNSIGNED_BYTE,l\u003d!1,r\u003d\"uint8\");var u,h,d\u003d0;if(2\u003d\u003d\u003do.length)d\u003dt.LUMINANCE,o\u003d[o[0],o[1],1],e\u003dn(e.data,o,[e.stride[0],e.stride[1],1],e.offset);else{if(3!\u003d\u003do.length)throw new Error(\"gl-texture2d: Invalid shape for texture\");if(1\u003d\u003d\u003do[2])d\u003dt.ALPHA;else if(2\u003d\u003d\u003do[2])d\u003dt.LUMINANCE_ALPHA;else if(3\u003d\u003d\u003do[2])d\u003dt.RGB;else{if(4!\u003d\u003do[2])throw new Error(\"gl-texture2d: Invalid shape for pixel coords\");d\u003dt.RGBA}}c!\u003d\u003dt.FLOAT||t.getExtension(\"OES_texture_float\")||(c\u003dt.UNSIGNED_BYTE,l\u003d!1);var v\u003de.size;if(l)u\u003d0\u003d\u003d\u003de.offset\u0026\u0026e.data.length\u003d\u003d\u003dv?e.data:e.data.subarray(e.offset,e.offset+v);else{var y\u003d[o[2],o[2]*o[0],1];h\u003da.malloc(v,r);var x\u003dn(h,o,y,0);\"float32\"!\u003d\u003dr\u0026\u0026\"float64\"!\u003d\u003dr||c!\u003d\u003dt.UNSIGNED_BYTE?i.assign(x,e):f(x,e),u\u003dh.subarray(0,v)}var b\u003dg(t);return t.texImage2D(t.TEXTURE_2D,0,d,o[0],o[1],0,d,c,u),l||a.free(h),new p(t,b,o[0],o[1],d,c)}Object.defineProperties(d,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e\u003dthis.gl;if(this.type\u003d\u003d\u003de.FLOAT\u0026\u0026o.indexOf(t)\u003e\u003d0\u0026\u0026(e.getExtension(\"OES_texture_float_linear\")||(t\u003de.NEAREST)),s.indexOf(t)\u003c0)throw new Error(\"gl-texture2d: Unknown filter mode \"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter\u003dt}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e\u003dthis.gl;if(this.type\u003d\u003d\u003de.FLOAT\u0026\u0026o.indexOf(t)\u003e\u003d0\u0026\u0026(e.getExtension(\"OES_texture_float_linear\")||(t\u003de.NEAREST)),s.indexOf(t)\u003c0)throw new Error(\"gl-texture2d: Unknown filter mode \"+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter\u003dt}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e\u003dthis._anisoSamples;if(this._anisoSamples\u003d0|Math.max(t,1),e!\u003d\u003dthis._anisoSamples){var r\u003dthis.gl.getExtension(\"EXT_texture_filter_anisotropic\");r\u0026\u0026this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),l.indexOf(t)\u003c0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS\u003dt}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),l.indexOf(t)\u003c0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT\u003dt}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t\u003d[t,t]),2!\u003d\u003dt.length)throw new Error(\"gl-texture2d: Must specify wrap mode for rows and columns\");for(var e\u003d0;e\u003c2;++e)if(l.indexOf(t[e])\u003c0)throw new Error(\"gl-texture2d: Unknown wrap mode \"+t);this._wrapS\u003dt[0],this._wrapT\u003dt[1];var r\u003dthis.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!\u003d\u003dt.length)throw new Error(\"gl-texture2d: Invalid texture shape\")}else t\u003d[0|t,0|t];return h(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return h(this,t|\u003d0,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|\u003d0,h(this,this._shape[0],t),t}}}),d.bind\u003dfunction(t){var e\u003dthis.gl;return void 0!\u003d\u003dt\u0026\u0026e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!\u003d\u003dt?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},d.dispose\u003dfunction(){this.gl.deleteTexture(this.handle)},d.generateMipmap\u003dfunction(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t\u003dMath.min(this._shape[0],this._shape[1]),e\u003d0;t\u003e0;++e,t\u003e\u003e\u003e\u003d1)this._mipLevels.indexOf(e)\u003c0\u0026\u0026this._mipLevels.push(e)},d.setPixels\u003dfunction(t,e,r,o){var s\u003dthis.gl;this.bind(),Array.isArray(e)?(o\u003dr,r\u003d0|e[1],e\u003d0|e[0]):(e\u003de||0,r\u003dr||0),o\u003do||0;var l\u003du(t)?t:t.raw;if(l){this._mipLevels.indexOf(o)\u003c0?(s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,this.type,l),this._mipLevels.push(o)):s.texSubImage2D(s.TEXTURE_2D,o,e,r,this.format,this.type,l)}else{if(!(t.shape\u0026\u0026t.stride\u0026\u0026t.data))throw new Error(\"gl-texture2d: Unsupported data type\");if(t.shape.length\u003c2||e+t.shape[1]\u003ethis._shape[1]\u003e\u003e\u003eo||r+t.shape[0]\u003ethis._shape[0]\u003e\u003e\u003eo||e\u003c0||r\u003c0)throw new Error(\"gl-texture2d: Texture dimensions are out of bounds\");!function(t,e,r,o,s,l,c,u){var h\u003du.dtype,p\u003du.shape.slice();if(p.length\u003c2||p.length\u003e3)throw new Error(\"gl-texture2d: Invalid ndarray, must be 2d or 3d\");var d\u003d0,g\u003d0,v\u003dm(p,u.stride.slice());\"float32\"\u003d\u003d\u003dh?d\u003dt.FLOAT:\"float64\"\u003d\u003d\u003dh?(d\u003dt.FLOAT,v\u003d!1,h\u003d\"float32\"):\"uint8\"\u003d\u003d\u003dh?d\u003dt.UNSIGNED_BYTE:(d\u003dt.UNSIGNED_BYTE,v\u003d!1,h\u003d\"uint8\");if(2\u003d\u003d\u003dp.length)g\u003dt.LUMINANCE,p\u003d[p[0],p[1],1],u\u003dn(u.data,p,[u.stride[0],u.stride[1],1],u.offset);else{if(3!\u003d\u003dp.length)throw new Error(\"gl-texture2d: Invalid shape for texture\");if(1\u003d\u003d\u003dp[2])g\u003dt.ALPHA;else if(2\u003d\u003d\u003dp[2])g\u003dt.LUMINANCE_ALPHA;else if(3\u003d\u003d\u003dp[2])g\u003dt.RGB;else{if(4!\u003d\u003dp[2])throw new Error(\"gl-texture2d: Invalid shape for pixel coords\");g\u003dt.RGBA}p[2]}g!\u003d\u003dt.LUMINANCE\u0026\u0026g!\u003d\u003dt.ALPHA||s!\u003d\u003dt.LUMINANCE\u0026\u0026s!\u003d\u003dt.ALPHA||(g\u003ds);if(g!\u003d\u003ds)throw new Error(\"gl-texture2d: Incompatible texture format for setPixels\");var y\u003du.size,x\u003dc.indexOf(o)\u003c0;x\u0026\u0026c.push(o);if(d\u003d\u003d\u003dl\u0026\u0026v)0\u003d\u003d\u003du.offset\u0026\u0026u.data.length\u003d\u003d\u003dy?x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,u.data):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,u.data):x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,u.data.subarray(u.offset,u.offset+y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,u.data.subarray(u.offset,u.offset+y));else{var b;b\u003dl\u003d\u003d\u003dt.FLOAT?a.mallocFloat32(y):a.mallocUint8(y);var _\u003dn(b,p,[p[2],p[2]*p[0],1]);d\u003d\u003d\u003dt.FLOAT\u0026\u0026l\u003d\u003d\u003dt.UNSIGNED_BYTE?f(_,u):i.assign(_,u),x?t.texImage2D(t.TEXTURE_2D,o,s,p[0],p[1],0,s,l,b.subarray(0,y)):t.texSubImage2D(t.TEXTURE_2D,o,e,r,p[0],p[1],s,l,b.subarray(0,y)),l\u003d\u003d\u003dt.FLOAT?a.freeFloat32(b):a.freeUint8(b)}}(s,e,r,o,this.format,this.type,this._mipLevels,t)}}},{ndarray:479,\"ndarray-ops\":474,\"typedarray-pool\":613}],353:[function(t,e,r){(function(r){(function(){\"use strict\";var n\u003dt(\"pick-by-alias\");function i(t){if(t.container)if(t.container\u003d\u003ddocument.body)document.body.style.width||(t.canvas.width\u003dt.width||t.pixelRatio*r.innerWidth),document.body.style.height||(t.canvas.height\u003dt.height||t.pixelRatio*r.innerHeight);else{var e\u003dt.container.getBoundingClientRect();t.canvas.width\u003dt.width||e.right-e.left,t.canvas.height\u003dt.height||e.bottom-e.top}}function a(t){return\"function\"\u003d\u003dtypeof t.getContext\u0026\u0026\"width\"in t\u0026\u0026\"height\"in t}function o(){var t\u003ddocument.createElement(\"canvas\");return t.style.position\u003d\"absolute\",t.style.top\u003d0,t.style.left\u003d0,t}e.exports\u003dfunction(t){var e;if(t?\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003d{container:t}):t\u003d{},a(t)?t\u003d{container:t}:t\u003d\"string\"\u003d\u003dtypeof(e\u003dt).nodeName\u0026\u0026\"function\"\u003d\u003dtypeof e.appendChild\u0026\u0026\"function\"\u003d\u003dtypeof e.getBoundingClientRect?{container:t}:function(t){return\"function\"\u003d\u003dtypeof t.drawArrays||\"function\"\u003d\u003dtypeof t.drawElements}(t)?{gl:t}:n(t,{container:\"container target element el canvas holder parent parentNode wrapper use ref root node\",gl:\"gl context webgl glContext\",attrs:\"attributes attrs contextAttributes\",pixelRatio:\"pixelRatio pxRatio px ratio pxratio pixelratio\",width:\"w width\",height:\"h height\"},!0),t.pixelRatio||(t.pixelRatio\u003dr.pixelRatio||1),t.gl)return t.gl;if(t.canvas\u0026\u0026(t.container\u003dt.canvas.parentNode),t.container){if(\"string\"\u003d\u003dtypeof t.container){var s\u003ddocument.querySelector(t.container);if(!s)throw Error(\"Element \"+t.container+\" is not found\");t.container\u003ds}a(t.container)?(t.canvas\u003dt.container,t.container\u003dt.canvas.parentNode):t.canvas||(t.canvas\u003do(),t.container.appendChild(t.canvas),i(t))}else if(!t.canvas){if(\"undefined\"\u003d\u003dtypeof document)throw Error(\"Not DOM environment. Use headless-gl.\");t.container\u003ddocument.body||document.documentElement,t.canvas\u003do(),t.container.appendChild(t.canvas),i(t)}if(!t.gl)try{t.gl\u003dt.canvas.getContext(\"webgl\",t.attrs)}catch(e){try{t.gl\u003dt.canvas.getContext(\"experimental-webgl\",t.attrs)}catch(e){t.gl\u003dt.canvas.getContext(\"webgl-experimental\",t.attrs)}}return t.gl}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"pick-by-alias\":494}],354:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n\u003d0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length\u003en)throw new Error(\"gl-vao: Too many vertex attributes\");for(var i\u003d0;i\u003cr.length;++i){var a\u003dr[i];if(a.buffer){var o\u003da.buffer,s\u003da.size||4,l\u003da.type||t.FLOAT,c\u003d!!a.normalized,u\u003da.stride||0,f\u003da.offset||0;o.bind(),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,s,l,c,u,f)}else{if(\"number\"\u003d\u003dtypeof a)t.vertexAttrib1f(i,a);else if(1\u003d\u003d\u003da.length)t.vertexAttrib1f(i,a[0]);else if(2\u003d\u003d\u003da.length)t.vertexAttrib2f(i,a[0],a[1]);else if(3\u003d\u003d\u003da.length)t.vertexAttrib3f(i,a[0],a[1],a[2]);else{if(4!\u003d\u003da.length)throw new Error(\"gl-vao: Invalid vertex attribute\");t.vertexAttrib4f(i,a[0],a[1],a[2],a[3])}t.disableVertexAttribArray(i)}}for(;i\u003cn;++i)t.disableVertexAttribArray(i)}else{t.bindBuffer(t.ARRAY_BUFFER,null);for(i\u003d0;i\u003cn;++i)t.disableVertexAttribArray(i)}}},{}],355:[function(t,e,r){\"use strict\";var n\u003dt(\"./do-bind.js\");function i(t){this.gl\u003dt,this._elements\u003dnull,this._attributes\u003dnull,this._elementsType\u003dt.UNSIGNED_SHORT}i.prototype.bind\u003dfunction(){n(this.gl,this._elements,this._attributes)},i.prototype.update\u003dfunction(t,e,r){this._elements\u003de,this._attributes\u003dt,this._elementsType\u003dr||this.gl.UNSIGNED_SHORT},i.prototype.dispose\u003dfunction(){},i.prototype.unbind\u003dfunction(){},i.prototype.draw\u003dfunction(t,e,r){r\u003dr||0;var n\u003dthis.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports\u003dfunction(t){return new i(t)}},{\"./do-bind.js\":354}],356:[function(t,e,r){\"use strict\";var n\u003dt(\"./do-bind.js\");function i(t,e,r,n,i,a){this.location\u003dt,this.dimension\u003de,this.a\u003dr,this.b\u003dn,this.c\u003di,this.d\u003da}function a(t,e,r){this.gl\u003dt,this._ext\u003de,this.handle\u003dr,this._attribs\u003d[],this._useElements\u003d!1,this._elementsType\u003dt.UNSIGNED_SHORT}i.prototype.bind\u003dfunction(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},a.prototype.bind\u003dfunction(){this._ext.bindVertexArrayOES(this.handle);for(var t\u003d0;t\u003cthis._attribs.length;++t)this._attribs[t].bind(this.gl)},a.prototype.unbind\u003dfunction(){this._ext.bindVertexArrayOES(null)},a.prototype.dispose\u003dfunction(){this._ext.deleteVertexArrayOES(this.handle)},a.prototype.update\u003dfunction(t,e,r){if(this.bind(),n(this.gl,e,t),this.unbind(),this._attribs.length\u003d0,t)for(var a\u003d0;a\u003ct.length;++a){var o\u003dt[a];\"number\"\u003d\u003dtypeof o?this._attribs.push(new i(a,1,o)):Array.isArray(o)\u0026\u0026this._attribs.push(new i(a,o.length,o[0],o[1],o[2],o[3]))}this._useElements\u003d!!e,this._elementsType\u003dr||this.gl.UNSIGNED_SHORT},a.prototype.draw\u003dfunction(t,e,r){r\u003dr||0;var n\u003dthis.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports\u003dfunction(t,e){return new a(t,e,e.createVertexArrayOES())}},{\"./do-bind.js\":354}],357:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/vao-native.js\"),i\u003dt(\"./lib/vao-emulated.js\");function a(t){this.bindVertexArrayOES\u003dt.bindVertexArray.bind(t),this.createVertexArrayOES\u003dt.createVertexArray.bind(t),this.deleteVertexArrayOES\u003dt.deleteVertexArray.bind(t)}e.exports\u003dfunction(t,e,r,o){var s,l\u003dt.createVertexArray?new a(t):t.getExtension(\"OES_vertex_array_object\");return(s\u003dl?n(t,l):i(t)).update(e,r,o),s}},{\"./lib/vao-emulated.js\":355,\"./lib/vao-native.js\":356}],358:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]+r[0],t[1]\u003de[1]+r[1],t[2]\u003de[2]+r[2],t}},{}],359:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003dn(t[0],t[1],t[2]),o\u003dn(e[0],e[1],e[2]);i(r,r),i(o,o);var s\u003da(r,o);return s\u003e1?0:Math.acos(s)};var n\u003dt(\"./fromValues\"),i\u003dt(\"./normalize\"),a\u003dt(\"./dot\")},{\"./dot\":369,\"./fromValues\":375,\"./normalize\":386}],360:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003dMath.ceil(e[0]),t[1]\u003dMath.ceil(e[1]),t[2]\u003dMath.ceil(e[2]),t}},{}],361:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dnew Float32Array(3);return e[0]\u003dt[0],e[1]\u003dt[1],e[2]\u003dt[2],e}},{}],362:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t}},{}],363:[function(t,e,r){e.exports\u003dfunction(){var t\u003dnew Float32Array(3);return t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t}},{}],364:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003dr[0],s\u003dr[1],l\u003dr[2];return t[0]\u003di*l-a*s,t[1]\u003da*o-n*l,t[2]\u003dn*s-i*o,t}},{}],365:[function(t,e,r){e.exports\u003dt(\"./distance\")},{\"./distance\":366}],366:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0]-t[0],n\u003de[1]-t[1],i\u003de[2]-t[2];return Math.sqrt(r*r+n*n+i*i)}},{}],367:[function(t,e,r){e.exports\u003dt(\"./divide\")},{\"./divide\":368}],368:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]/r[0],t[1]\u003de[1]/r[1],t[2]\u003de[2]/r[2],t}},{}],369:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}},{}],370:[function(t,e,r){e.exports\u003d1e-6},{}],371:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003dt[0],i\u003dt[1],a\u003dt[2],o\u003de[0],s\u003de[1],l\u003de[2];return Math.abs(r-o)\u003c\u003dn*Math.max(1,Math.abs(r),Math.abs(o))\u0026\u0026Math.abs(i-s)\u003c\u003dn*Math.max(1,Math.abs(i),Math.abs(s))\u0026\u0026Math.abs(a-l)\u003c\u003dn*Math.max(1,Math.abs(a),Math.abs(l))};var n\u003dt(\"./epsilon\")},{\"./epsilon\":370}],372:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003d\u003d\u003de[0]\u0026\u0026t[1]\u003d\u003d\u003de[1]\u0026\u0026t[2]\u003d\u003d\u003de[2]}},{}],373:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003dMath.floor(e[0]),t[1]\u003dMath.floor(e[1]),t[2]\u003dMath.floor(e[2]),t}},{}],374:[function(t,e,r){e.exports\u003dfunction(t,e,r,i,a,o){var s,l;e||(e\u003d3);r||(r\u003d0);l\u003di?Math.min(i*e+r,t.length):t.length;for(s\u003dr;s\u003cl;s+\u003de)n[0]\u003dt[s],n[1]\u003dt[s+1],n[2]\u003dt[s+2],a(n,n,o),t[s]\u003dn[0],t[s+1]\u003dn[1],t[s+2]\u003dn[2];return t};var n\u003dt(\"./create\")()},{\"./create\":363}],375:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003dnew Float32Array(3);return n[0]\u003dt,n[1]\u003de,n[2]\u003dr,n}},{}],376:[function(t,e,r){e.exports\u003d{EPSILON:t(\"./epsilon\"),create:t(\"./create\"),clone:t(\"./clone\"),angle:t(\"./angle\"),fromValues:t(\"./fromValues\"),copy:t(\"./copy\"),set:t(\"./set\"),equals:t(\"./equals\"),exactEquals:t(\"./exactEquals\"),add:t(\"./add\"),subtract:t(\"./subtract\"),sub:t(\"./sub\"),multiply:t(\"./multiply\"),mul:t(\"./mul\"),divide:t(\"./divide\"),div:t(\"./div\"),min:t(\"./min\"),max:t(\"./max\"),floor:t(\"./floor\"),ceil:t(\"./ceil\"),round:t(\"./round\"),scale:t(\"./scale\"),scaleAndAdd:t(\"./scaleAndAdd\"),distance:t(\"./distance\"),dist:t(\"./dist\"),squaredDistance:t(\"./squaredDistance\"),sqrDist:t(\"./sqrDist\"),length:t(\"./length\"),len:t(\"./len\"),squaredLength:t(\"./squaredLength\"),sqrLen:t(\"./sqrLen\"),negate:t(\"./negate\"),inverse:t(\"./inverse\"),normalize:t(\"./normalize\"),dot:t(\"./dot\"),cross:t(\"./cross\"),lerp:t(\"./lerp\"),random:t(\"./random\"),transformMat4:t(\"./transformMat4\"),transformMat3:t(\"./transformMat3\"),transformQuat:t(\"./transformQuat\"),rotateX:t(\"./rotateX\"),rotateY:t(\"./rotateY\"),rotateZ:t(\"./rotateZ\"),forEach:t(\"./forEach\")}},{\"./add\":358,\"./angle\":359,\"./ceil\":360,\"./clone\":361,\"./copy\":362,\"./create\":363,\"./cross\":364,\"./dist\":365,\"./distance\":366,\"./div\":367,\"./divide\":368,\"./dot\":369,\"./epsilon\":370,\"./equals\":371,\"./exactEquals\":372,\"./floor\":373,\"./forEach\":374,\"./fromValues\":375,\"./inverse\":377,\"./len\":378,\"./length\":379,\"./lerp\":380,\"./max\":381,\"./min\":382,\"./mul\":383,\"./multiply\":384,\"./negate\":385,\"./normalize\":386,\"./random\":387,\"./rotateX\":388,\"./rotateY\":389,\"./rotateZ\":390,\"./round\":391,\"./scale\":392,\"./scaleAndAdd\":393,\"./set\":394,\"./sqrDist\":395,\"./sqrLen\":396,\"./squaredDistance\":397,\"./squaredLength\":398,\"./sub\":399,\"./subtract\":400,\"./transformMat3\":401,\"./transformMat4\":402,\"./transformQuat\":403}],377:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003d1/e[0],t[1]\u003d1/e[1],t[2]\u003d1/e[2],t}},{}],378:[function(t,e,r){e.exports\u003dt(\"./length\")},{\"./length\":379}],379:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dt[0],r\u003dt[1],n\u003dt[2];return Math.sqrt(e*e+r*r+n*n)}},{}],380:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i\u003de[0],a\u003de[1],o\u003de[2];return t[0]\u003di+n*(r[0]-i),t[1]\u003da+n*(r[1]-a),t[2]\u003do+n*(r[2]-o),t}},{}],381:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003dMath.max(e[0],r[0]),t[1]\u003dMath.max(e[1],r[1]),t[2]\u003dMath.max(e[2],r[2]),t}},{}],382:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003dMath.min(e[0],r[0]),t[1]\u003dMath.min(e[1],r[1]),t[2]\u003dMath.min(e[2],r[2]),t}},{}],383:[function(t,e,r){e.exports\u003dt(\"./multiply\")},{\"./multiply\":384}],384:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]*r[0],t[1]\u003de[1]*r[1],t[2]\u003de[2]*r[2],t}},{}],385:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003d-e[0],t[1]\u003d-e[1],t[2]\u003d-e[2],t}},{}],386:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003dr*r+n*n+i*i;a\u003e0\u0026\u0026(a\u003d1/Math.sqrt(a),t[0]\u003de[0]*a,t[1]\u003de[1]*a,t[2]\u003de[2]*a);return t}},{}],387:[function(t,e,r){e.exports\u003dfunction(t,e){e\u003de||1;var r\u003d2*Math.random()*Math.PI,n\u003d2*Math.random()-1,i\u003dMath.sqrt(1-n*n)*e;return t[0]\u003dMath.cos(r)*i,t[1]\u003dMath.sin(r)*i,t[2]\u003dn*e,t}},{}],388:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i\u003dr[1],a\u003dr[2],o\u003de[1]-i,s\u003de[2]-a,l\u003dMath.sin(n),c\u003dMath.cos(n);return t[0]\u003de[0],t[1]\u003di+o*c-s*l,t[2]\u003da+o*l+s*c,t}},{}],389:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i\u003dr[0],a\u003dr[2],o\u003de[0]-i,s\u003de[2]-a,l\u003dMath.sin(n),c\u003dMath.cos(n);return t[0]\u003di+s*l+o*c,t[1]\u003de[1],t[2]\u003da+s*c-o*l,t}},{}],390:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i\u003dr[0],a\u003dr[1],o\u003de[0]-i,s\u003de[1]-a,l\u003dMath.sin(n),c\u003dMath.cos(n);return t[0]\u003di+o*c-s*l,t[1]\u003da+o*l+s*c,t[2]\u003de[2],t}},{}],391:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003dMath.round(e[0]),t[1]\u003dMath.round(e[1]),t[2]\u003dMath.round(e[2]),t}},{}],392:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]*r,t[1]\u003de[1]*r,t[2]\u003de[2]*r,t}},{}],393:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){return t[0]\u003de[0]+r[0]*n,t[1]\u003de[1]+r[1]*n,t[2]\u003de[2]+r[2]*n,t}},{}],394:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){return t[0]\u003de,t[1]\u003dr,t[2]\u003dn,t}},{}],395:[function(t,e,r){e.exports\u003dt(\"./squaredDistance\")},{\"./squaredDistance\":397}],396:[function(t,e,r){e.exports\u003dt(\"./squaredLength\")},{\"./squaredLength\":398}],397:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0]-t[0],n\u003de[1]-t[1],i\u003de[2]-t[2];return r*r+n*n+i*i}},{}],398:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dt[0],r\u003dt[1],n\u003dt[2];return e*e+r*r+n*n}},{}],399:[function(t,e,r){e.exports\u003dt(\"./subtract\")},{\"./subtract\":400}],400:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]-r[0],t[1]\u003de[1]-r[1],t[2]\u003de[2]-r[2],t}},{}],401:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2];return t[0]\u003dn*r[0]+i*r[3]+a*r[6],t[1]\u003dn*r[1]+i*r[4]+a*r[7],t[2]\u003dn*r[2]+i*r[5]+a*r[8],t}},{}],402:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003dr[3]*n+r[7]*i+r[11]*a+r[15];return o\u003do||1,t[0]\u003d(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]\u003d(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]\u003d(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t}},{}],403:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003dr[0],s\u003dr[1],l\u003dr[2],c\u003dr[3],u\u003dc*n+s*a-l*i,f\u003dc*i+l*n-o*a,h\u003dc*a+o*i-s*n,p\u003d-o*n-s*i-l*a;return t[0]\u003du*c+p*-o+f*-l-h*-s,t[1]\u003df*c+p*-s+h*-o-u*-l,t[2]\u003dh*c+p*-l+u*-s-f*-o,t}},{}],404:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]+r[0],t[1]\u003de[1]+r[1],t[2]\u003de[2]+r[2],t[3]\u003de[3]+r[3],t}},{}],405:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dnew Float32Array(4);return e[0]\u003dt[0],e[1]\u003dt[1],e[2]\u003dt[2],e[3]\u003dt[3],e}},{}],406:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t[3]\u003de[3],t}},{}],407:[function(t,e,r){e.exports\u003dfunction(){var t\u003dnew Float32Array(4);return t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t}},{}],408:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0]-t[0],n\u003de[1]-t[1],i\u003de[2]-t[2],a\u003de[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)}},{}],409:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]/r[0],t[1]\u003de[1]/r[1],t[2]\u003de[2]/r[2],t[3]\u003de[3]/r[3],t}},{}],410:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}},{}],411:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i\u003dnew Float32Array(4);return i[0]\u003dt,i[1]\u003de,i[2]\u003dr,i[3]\u003dn,i}},{}],412:[function(t,e,r){e.exports\u003d{create:t(\"./create\"),clone:t(\"./clone\"),fromValues:t(\"./fromValues\"),copy:t(\"./copy\"),set:t(\"./set\"),add:t(\"./add\"),subtract:t(\"./subtract\"),multiply:t(\"./multiply\"),divide:t(\"./divide\"),min:t(\"./min\"),max:t(\"./max\"),scale:t(\"./scale\"),scaleAndAdd:t(\"./scaleAndAdd\"),distance:t(\"./distance\"),squaredDistance:t(\"./squaredDistance\"),length:t(\"./length\"),squaredLength:t(\"./squaredLength\"),negate:t(\"./negate\"),inverse:t(\"./inverse\"),normalize:t(\"./normalize\"),dot:t(\"./dot\"),lerp:t(\"./lerp\"),random:t(\"./random\"),transformMat4:t(\"./transformMat4\"),transformQuat:t(\"./transformQuat\")}},{\"./add\":404,\"./clone\":405,\"./copy\":406,\"./create\":407,\"./distance\":408,\"./divide\":409,\"./dot\":410,\"./fromValues\":411,\"./inverse\":413,\"./length\":414,\"./lerp\":415,\"./max\":416,\"./min\":417,\"./multiply\":418,\"./negate\":419,\"./normalize\":420,\"./random\":421,\"./scale\":422,\"./scaleAndAdd\":423,\"./set\":424,\"./squaredDistance\":425,\"./squaredLength\":426,\"./subtract\":427,\"./transformMat4\":428,\"./transformQuat\":429}],413:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003d1/e[0],t[1]\u003d1/e[1],t[2]\u003d1/e[2],t[3]\u003d1/e[3],t}},{}],414:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dt[0],r\u003dt[1],n\u003dt[2],i\u003dt[3];return Math.sqrt(e*e+r*r+n*n+i*i)}},{}],415:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var i\u003de[0],a\u003de[1],o\u003de[2],s\u003de[3];return t[0]\u003di+n*(r[0]-i),t[1]\u003da+n*(r[1]-a),t[2]\u003do+n*(r[2]-o),t[3]\u003ds+n*(r[3]-s),t}},{}],416:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003dMath.max(e[0],r[0]),t[1]\u003dMath.max(e[1],r[1]),t[2]\u003dMath.max(e[2],r[2]),t[3]\u003dMath.max(e[3],r[3]),t}},{}],417:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003dMath.min(e[0],r[0]),t[1]\u003dMath.min(e[1],r[1]),t[2]\u003dMath.min(e[2],r[2]),t[3]\u003dMath.min(e[3],r[3]),t}},{}],418:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]*r[0],t[1]\u003de[1]*r[1],t[2]\u003de[2]*r[2],t[3]\u003de[3]*r[3],t}},{}],419:[function(t,e,r){e.exports\u003dfunction(t,e){return t[0]\u003d-e[0],t[1]\u003d-e[1],t[2]\u003d-e[2],t[3]\u003d-e[3],t}},{}],420:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003de[3],o\u003dr*r+n*n+i*i+a*a;o\u003e0\u0026\u0026(o\u003d1/Math.sqrt(o),t[0]\u003dr*o,t[1]\u003dn*o,t[2]\u003di*o,t[3]\u003da*o);return t}},{}],421:[function(t,e,r){var n\u003dt(\"./normalize\"),i\u003dt(\"./scale\");e.exports\u003dfunction(t,e){return e\u003de||1,t[0]\u003dMath.random(),t[1]\u003dMath.random(),t[2]\u003dMath.random(),t[3]\u003dMath.random(),n(t,t),i(t,t,e),t}},{\"./normalize\":420,\"./scale\":422}],422:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]*r,t[1]\u003de[1]*r,t[2]\u003de[2]*r,t[3]\u003de[3]*r,t}},{}],423:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){return t[0]\u003de[0]+r[0]*n,t[1]\u003de[1]+r[1]*n,t[2]\u003de[2]+r[2]*n,t[3]\u003de[3]+r[3]*n,t}},{}],424:[function(t,e,r){e.exports\u003dfunction(t,e,r,n,i){return t[0]\u003de,t[1]\u003dr,t[2]\u003dn,t[3]\u003di,t}},{}],425:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[0]-t[0],n\u003de[1]-t[1],i\u003de[2]-t[2],a\u003de[3]-t[3];return r*r+n*n+i*i+a*a}},{}],426:[function(t,e,r){e.exports\u003dfunction(t){var e\u003dt[0],r\u003dt[1],n\u003dt[2],i\u003dt[3];return e*e+r*r+n*n+i*i}},{}],427:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t[0]\u003de[0]-r[0],t[1]\u003de[1]-r[1],t[2]\u003de[2]-r[2],t[3]\u003de[3]-r[3],t}},{}],428:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3];return t[0]\u003dr[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]\u003dr[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]\u003dr[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]\u003dr[3]*n+r[7]*i+r[11]*a+r[15]*o,t}},{}],429:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003dr[0],s\u003dr[1],l\u003dr[2],c\u003dr[3],u\u003dc*n+s*a-l*i,f\u003dc*i+l*n-o*a,h\u003dc*a+o*i-s*n,p\u003d-o*n-s*i-l*a;return t[0]\u003du*c+p*-o+f*-l-h*-s,t[1]\u003df*c+p*-s+h*-o-u*-l,t[2]\u003dh*c+p*-l+u*-s-f*-o,t[3]\u003de[3],t}},{}],430:[function(t,e,r){var n\u003dt(\"glsl-tokenizer\"),i\u003dt(\"atob-lite\");e.exports\u003dfunction(t){for(var e\u003dArray.isArray(t)?t:n(t),r\u003d0;r\u003ce.length;r++){var a\u003de[r];if(\"preprocessor\"\u003d\u003d\u003da.type){var o\u003da.data.match(/\\#define\\s+SHADER_NAME(_B64)?\\s+(.+)$/);if(o\u0026\u0026o[2]){var s\u003do[1],l\u003do[2];return(s?i(l):l).trim()}}}}},{\"atob-lite\":84,\"glsl-tokenizer\":437}],431:[function(t,e,r){e.exports\u003dfunction(t){var e,r,c,u\u003d0,f\u003d0,h\u003d999,p\u003d[],d\u003d[],m\u003d1,g\u003d0,v\u003d0,y\u003d!1,x\u003d!1,b\u003d\"\",_\u003da,w\u003dn;\"300 es\"\u003d\u003d\u003d(t\u003dt||{}).version\u0026\u0026(_\u003ds,w\u003do);var T\u003d{},k\u003d{};for(u\u003d0;u\u003c_.length;u++)T[_[u]]\u003d!0;for(u\u003d0;u\u003cw.length;u++)k[w[u]]\u003d!0;return function(t){return d\u003d[],null!\u003d\u003dt?function(t){u\u003d0,t.toString\u0026\u0026(t\u003dt.toString());var r;b+\u003dt.replace(/\\r\\n/g,\"\\n\"),c\u003db.length;for(;e\u003db[u],u\u003cc;){switch(r\u003du,h){case 0:u\u003dL();break;case 1:case 2:u\u003dE();break;case 3:u\u003dC();break;case 4:u\u003dO();break;case 11:u\u003dI();break;case 5:u\u003dz();break;case 9999:u\u003dD();break;case 9:u\u003dS();break;case 999:u\u003dA()}if(r!\u003d\u003du)switch(b[r]){case\"\\n\":g\u003d0,++m;break;default:++g}}return f+\u003du,b\u003db.slice(u),d}(t):function(t){p.length\u0026\u0026M(p.join(\"\"));return h\u003d10,M(\"(eof)\"),d}()};function M(t){t.length\u0026\u0026d.push({type:l[h],data:t,position:v,line:m,column:g})}function A(){return p\u003dp.length?[]:p,\"/\"\u003d\u003d\u003dr\u0026\u0026\"*\"\u003d\u003d\u003de?(v\u003df+u-1,h\u003d0,r\u003de,u+1):\"/\"\u003d\u003d\u003dr\u0026\u0026\"/\"\u003d\u003d\u003de?(v\u003df+u-1,h\u003d1,r\u003de,u+1):\"#\"\u003d\u003d\u003de?(h\u003d2,v\u003df+u,u):/\\s/.test(e)?(h\u003d9,v\u003df+u,u):(y\u003d/\\d/.test(e),x\u003d/[^\\w_]/.test(e),v\u003df+u,h\u003dy?4:x?3:9999,u)}function S(){return/[^\\s]/g.test(e)?(M(p.join(\"\")),h\u003d999,u):(p.push(e),r\u003de,u+1)}function E(){return\"\\r\"!\u003d\u003de\u0026\u0026\"\\n\"!\u003d\u003de||\"\\\\\"\u003d\u003d\u003dr?(p.push(e),r\u003de,u+1):(M(p.join(\"\")),h\u003d999,u)}function L(){return\"/\"\u003d\u003d\u003de\u0026\u0026\"*\"\u003d\u003d\u003dr?(p.push(e),M(p.join(\"\")),h\u003d999,u+1):(p.push(e),r\u003de,u+1)}function C(){if(\".\"\u003d\u003d\u003dr\u0026\u0026/\\d/.test(e))return h\u003d5,u;if(\"/\"\u003d\u003d\u003dr\u0026\u0026\"*\"\u003d\u003d\u003de)return h\u003d0,u;if(\"/\"\u003d\u003d\u003dr\u0026\u0026\"/\"\u003d\u003d\u003de)return h\u003d1,u;if(\".\"\u003d\u003d\u003de\u0026\u0026p.length){for(;P(p););return h\u003d5,u}if(\";\"\u003d\u003d\u003de||\")\"\u003d\u003d\u003de||\"(\"\u003d\u003d\u003de){if(p.length)for(;P(p););return M(e),h\u003d999,u+1}var t\u003d2\u003d\u003d\u003dp.length\u0026\u0026\"\u003d\"!\u003d\u003de;if(/[\\w_\\d\\s]/.test(e)||t){for(;P(p););return h\u003d999,u}return p.push(e),r\u003de,u+1}function P(t){for(var e,r,n\u003d0;;){if(e\u003di.indexOf(t.slice(0,t.length+n).join(\"\")),r\u003di[e],-1\u003d\u003d\u003de){if(n--+t.length\u003e0)continue;r\u003dt.slice(0,1).join(\"\")}return M(r),v+\u003dr.length,(p\u003dp.slice(r.length)).length}}function I(){return/[^a-fA-F0-9]/.test(e)?(M(p.join(\"\")),h\u003d999,u):(p.push(e),r\u003de,u+1)}function O(){return\".\"\u003d\u003d\u003de||/[eE]/.test(e)?(p.push(e),h\u003d5,r\u003de,u+1):\"x\"\u003d\u003d\u003de\u0026\u00261\u003d\u003d\u003dp.length\u0026\u0026\"0\"\u003d\u003d\u003dp[0]?(h\u003d11,p.push(e),r\u003de,u+1):/[^\\d]/.test(e)?(M(p.join(\"\")),h\u003d999,u):(p.push(e),r\u003de,u+1)}function z(){return\"f\"\u003d\u003d\u003de\u0026\u0026(p.push(e),r\u003de,u+\u003d1),/[eE]/.test(e)?(p.push(e),r\u003de,u+1):(\"-\"!\u003d\u003de\u0026\u0026\"+\"!\u003d\u003de||!/[eE]/.test(r))\u0026\u0026/[^\\d]/.test(e)?(M(p.join(\"\")),h\u003d999,u):(p.push(e),r\u003de,u+1)}function D(){if(/[^\\d\\w_]/.test(e)){var t\u003dp.join(\"\");return h\u003dk[t]?8:T[t]?7:6,M(p.join(\"\")),h\u003d999,u}return p.push(e),r\u003de,u+1}};var n\u003dt(\"./lib/literals\"),i\u003dt(\"./lib/operators\"),a\u003dt(\"./lib/builtins\"),o\u003dt(\"./lib/literals-300es\"),s\u003dt(\"./lib/builtins-300es\"),l\u003d[\"block-comment\",\"line-comment\",\"preprocessor\",\"operator\",\"integer\",\"float\",\"ident\",\"builtin\",\"keyword\",\"whitespace\",\"eof\",\"integer\"]},{\"./lib/builtins\":433,\"./lib/builtins-300es\":432,\"./lib/literals\":435,\"./lib/literals-300es\":434,\"./lib/operators\":436}],432:[function(t,e,r){var n\u003dt(\"./builtins\");n\u003dn.slice().filter((function(t){return!/^(gl\\_|texture)/.test(t)})),e.exports\u003dn.concat([\"gl_VertexID\",\"gl_InstanceID\",\"gl_Position\",\"gl_PointSize\",\"gl_FragCoord\",\"gl_FrontFacing\",\"gl_FragDepth\",\"gl_PointCoord\",\"gl_MaxVertexAttribs\",\"gl_MaxVertexUniformVectors\",\"gl_MaxVertexOutputVectors\",\"gl_MaxFragmentInputVectors\",\"gl_MaxVertexTextureImageUnits\",\"gl_MaxCombinedTextureImageUnits\",\"gl_MaxTextureImageUnits\",\"gl_MaxFragmentUniformVectors\",\"gl_MaxDrawBuffers\",\"gl_MinProgramTexelOffset\",\"gl_MaxProgramTexelOffset\",\"gl_DepthRangeParameters\",\"gl_DepthRange\",\"trunc\",\"round\",\"roundEven\",\"isnan\",\"isinf\",\"floatBitsToInt\",\"floatBitsToUint\",\"intBitsToFloat\",\"uintBitsToFloat\",\"packSnorm2x16\",\"unpackSnorm2x16\",\"packUnorm2x16\",\"unpackUnorm2x16\",\"packHalf2x16\",\"unpackHalf2x16\",\"outerProduct\",\"transpose\",\"determinant\",\"inverse\",\"texture\",\"textureSize\",\"textureProj\",\"textureLod\",\"textureOffset\",\"texelFetch\",\"texelFetchOffset\",\"textureProjOffset\",\"textureLodOffset\",\"textureProjLod\",\"textureProjLodOffset\",\"textureGrad\",\"textureGradOffset\",\"textureProjGrad\",\"textureProjGradOffset\"])},{\"./builtins\":433}],433:[function(t,e,r){e.exports\u003d[\"abs\",\"acos\",\"all\",\"any\",\"asin\",\"atan\",\"ceil\",\"clamp\",\"cos\",\"cross\",\"dFdx\",\"dFdy\",\"degrees\",\"distance\",\"dot\",\"equal\",\"exp\",\"exp2\",\"faceforward\",\"floor\",\"fract\",\"gl_BackColor\",\"gl_BackLightModelProduct\",\"gl_BackLightProduct\",\"gl_BackMaterial\",\"gl_BackSecondaryColor\",\"gl_ClipPlane\",\"gl_ClipVertex\",\"gl_Color\",\"gl_DepthRange\",\"gl_DepthRangeParameters\",\"gl_EyePlaneQ\",\"gl_EyePlaneR\",\"gl_EyePlaneS\",\"gl_EyePlaneT\",\"gl_Fog\",\"gl_FogCoord\",\"gl_FogFragCoord\",\"gl_FogParameters\",\"gl_FragColor\",\"gl_FragCoord\",\"gl_FragData\",\"gl_FragDepth\",\"gl_FragDepthEXT\",\"gl_FrontColor\",\"gl_FrontFacing\",\"gl_FrontLightModelProduct\",\"gl_FrontLightProduct\",\"gl_FrontMaterial\",\"gl_FrontSecondaryColor\",\"gl_LightModel\",\"gl_LightModelParameters\",\"gl_LightModelProducts\",\"gl_LightProducts\",\"gl_LightSource\",\"gl_LightSourceParameters\",\"gl_MaterialParameters\",\"gl_MaxClipPlanes\",\"gl_MaxCombinedTextureImageUnits\",\"gl_MaxDrawBuffers\",\"gl_MaxFragmentUniformComponents\",\"gl_MaxLights\",\"gl_MaxTextureCoords\",\"gl_MaxTextureImageUnits\",\"gl_MaxTextureUnits\",\"gl_MaxVaryingFloats\",\"gl_MaxVertexAttribs\",\"gl_MaxVertexTextureImageUnits\",\"gl_MaxVertexUniformComponents\",\"gl_ModelViewMatrix\",\"gl_ModelViewMatrixInverse\",\"gl_ModelViewMatrixInverseTranspose\",\"gl_ModelViewMatrixTranspose\",\"gl_ModelViewProjectionMatrix\",\"gl_ModelViewProjectionMatrixInverse\",\"gl_ModelViewProjectionMatrixInverseTranspose\",\"gl_ModelViewProjectionMatrixTranspose\",\"gl_MultiTexCoord0\",\"gl_MultiTexCoord1\",\"gl_MultiTexCoord2\",\"gl_MultiTexCoord3\",\"gl_MultiTexCoord4\",\"gl_MultiTexCoord5\",\"gl_MultiTexCoord6\",\"gl_MultiTexCoord7\",\"gl_Normal\",\"gl_NormalMatrix\",\"gl_NormalScale\",\"gl_ObjectPlaneQ\",\"gl_ObjectPlaneR\",\"gl_ObjectPlaneS\",\"gl_ObjectPlaneT\",\"gl_Point\",\"gl_PointCoord\",\"gl_PointParameters\",\"gl_PointSize\",\"gl_Position\",\"gl_ProjectionMatrix\",\"gl_ProjectionMatrixInverse\",\"gl_ProjectionMatrixInverseTranspose\",\"gl_ProjectionMatrixTranspose\",\"gl_SecondaryColor\",\"gl_TexCoord\",\"gl_TextureEnvColor\",\"gl_TextureMatrix\",\"gl_TextureMatrixInverse\",\"gl_TextureMatrixInverseTranspose\",\"gl_TextureMatrixTranspose\",\"gl_Vertex\",\"greaterThan\",\"greaterThanEqual\",\"inversesqrt\",\"length\",\"lessThan\",\"lessThanEqual\",\"log\",\"log2\",\"matrixCompMult\",\"max\",\"min\",\"mix\",\"mod\",\"normalize\",\"not\",\"notEqual\",\"pow\",\"radians\",\"reflect\",\"refract\",\"sign\",\"sin\",\"smoothstep\",\"sqrt\",\"step\",\"tan\",\"texture2D\",\"texture2DLod\",\"texture2DProj\",\"texture2DProjLod\",\"textureCube\",\"textureCubeLod\",\"texture2DLodEXT\",\"texture2DProjLodEXT\",\"textureCubeLodEXT\",\"texture2DGradEXT\",\"texture2DProjGradEXT\",\"textureCubeGradEXT\"]},{}],434:[function(t,e,r){var n\u003dt(\"./literals\");e.exports\u003dn.slice().concat([\"layout\",\"centroid\",\"smooth\",\"case\",\"mat2x2\",\"mat2x3\",\"mat2x4\",\"mat3x2\",\"mat3x3\",\"mat3x4\",\"mat4x2\",\"mat4x3\",\"mat4x4\",\"uvec2\",\"uvec3\",\"uvec4\",\"samplerCubeShadow\",\"sampler2DArray\",\"sampler2DArrayShadow\",\"isampler2D\",\"isampler3D\",\"isamplerCube\",\"isampler2DArray\",\"usampler2D\",\"usampler3D\",\"usamplerCube\",\"usampler2DArray\",\"coherent\",\"restrict\",\"readonly\",\"writeonly\",\"resource\",\"atomic_uint\",\"noperspective\",\"patch\",\"sample\",\"subroutine\",\"common\",\"partition\",\"active\",\"filter\",\"image1D\",\"image2D\",\"image3D\",\"imageCube\",\"iimage1D\",\"iimage2D\",\"iimage3D\",\"iimageCube\",\"uimage1D\",\"uimage2D\",\"uimage3D\",\"uimageCube\",\"image1DArray\",\"image2DArray\",\"iimage1DArray\",\"iimage2DArray\",\"uimage1DArray\",\"uimage2DArray\",\"image1DShadow\",\"image2DShadow\",\"image1DArrayShadow\",\"image2DArrayShadow\",\"imageBuffer\",\"iimageBuffer\",\"uimageBuffer\",\"sampler1DArray\",\"sampler1DArrayShadow\",\"isampler1D\",\"isampler1DArray\",\"usampler1D\",\"usampler1DArray\",\"isampler2DRect\",\"usampler2DRect\",\"samplerBuffer\",\"isamplerBuffer\",\"usamplerBuffer\",\"sampler2DMS\",\"isampler2DMS\",\"usampler2DMS\",\"sampler2DMSArray\",\"isampler2DMSArray\",\"usampler2DMSArray\"])},{\"./literals\":435}],435:[function(t,e,r){e.exports\u003d[\"precision\",\"highp\",\"mediump\",\"lowp\",\"attribute\",\"const\",\"uniform\",\"varying\",\"break\",\"continue\",\"do\",\"for\",\"while\",\"if\",\"else\",\"in\",\"out\",\"inout\",\"float\",\"int\",\"uint\",\"void\",\"bool\",\"true\",\"false\",\"discard\",\"return\",\"mat2\",\"mat3\",\"mat4\",\"vec2\",\"vec3\",\"vec4\",\"ivec2\",\"ivec3\",\"ivec4\",\"bvec2\",\"bvec3\",\"bvec4\",\"sampler1D\",\"sampler2D\",\"sampler3D\",\"samplerCube\",\"sampler1DShadow\",\"sampler2DShadow\",\"struct\",\"asm\",\"class\",\"union\",\"enum\",\"typedef\",\"template\",\"this\",\"packed\",\"goto\",\"switch\",\"default\",\"inline\",\"noinline\",\"volatile\",\"public\",\"static\",\"extern\",\"external\",\"interface\",\"long\",\"short\",\"double\",\"half\",\"fixed\",\"unsigned\",\"input\",\"output\",\"hvec2\",\"hvec3\",\"hvec4\",\"dvec2\",\"dvec3\",\"dvec4\",\"fvec2\",\"fvec3\",\"fvec4\",\"sampler2DRect\",\"sampler3DRect\",\"sampler2DRectShadow\",\"sizeof\",\"cast\",\"namespace\",\"using\"]},{}],436:[function(t,e,r){e.exports\u003d[\"\u003c\u003c\u003d\",\"\u003e\u003e\u003d\",\"++\",\"--\",\"\u003c\u003c\",\"\u003e\u003e\",\"\u003c\u003d\",\"\u003e\u003d\",\"\u003d\u003d\",\"!\u003d\",\"\u0026\u0026\",\"||\",\"+\u003d\",\"-\u003d\",\"*\u003d\",\"/\u003d\",\"%\u003d\",\"\u0026\u003d\",\"^^\",\"^\u003d\",\"|\u003d\",\"(\",\")\",\"[\",\"]\",\".\",\"!\",\"~\",\"*\",\"/\",\"%\",\"+\",\"-\",\"\u003c\",\"\u003e\",\"\u0026\",\"^\",\"|\",\"?\",\":\",\"\u003d\",\",\",\";\",\"{\",\"}\"]},{}],437:[function(t,e,r){var n\u003dt(\"./index\");e.exports\u003dfunction(t,e){var r\u003dn(e),i\u003d[];return i\u003d(i\u003di.concat(r(t))).concat(r(null))}},{\"./index\":431}],438:[function(t,e,r){arguments[4][261][0].apply(r,arguments)},{dup:261}],439:[function(t,e,r){(function(r){(function(){\"use strict\";var n,i\u003dt(\"is-browser\");n\u003d\"function\"\u003d\u003dtypeof r.matchMedia?!r.matchMedia(\"(hover: none)\").matches:i,e.exports\u003dn}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"is-browser\":448}],440:[function(t,e,r){\"use strict\";var n\u003dt(\"is-browser\");e.exports\u003dn\u0026\u0026function(){var t\u003d!1;try{var e\u003dObject.defineProperty({},\"passive\",{get:function(){t\u003d!0}});window.addEventListener(\"test\",null,e),window.removeEventListener(\"test\",null,e)}catch(e){t\u003d!1}return t}()},{\"is-browser\":448}],441:[function(t,e,r){r.read\u003dfunction(t,e,r,n,i){var a,o,s\u003d8*i-n-1,l\u003d(1\u003c\u003cs)-1,c\u003dl\u003e\u003e1,u\u003d-7,f\u003dr?i-1:0,h\u003dr?-1:1,p\u003dt[e+f];for(f+\u003dh,a\u003dp\u0026(1\u003c\u003c-u)-1,p\u003e\u003e\u003d-u,u+\u003ds;u\u003e0;a\u003d256*a+t[e+f],f+\u003dh,u-\u003d8);for(o\u003da\u0026(1\u003c\u003c-u)-1,a\u003e\u003e\u003d-u,u+\u003dn;u\u003e0;o\u003d256*o+t[e+f],f+\u003dh,u-\u003d8);if(0\u003d\u003d\u003da)a\u003d1-c;else{if(a\u003d\u003d\u003dl)return o?NaN:1/0*(p?-1:1);o+\u003dMath.pow(2,n),a-\u003dc}return(p?-1:1)*o*Math.pow(2,a-n)},r.write\u003dfunction(t,e,r,n,i,a){var o,s,l,c\u003d8*a-i-1,u\u003d(1\u003c\u003cc)-1,f\u003du\u003e\u003e1,h\u003d23\u003d\u003d\u003di?Math.pow(2,-24)-Math.pow(2,-77):0,p\u003dn?0:a-1,d\u003dn?1:-1,m\u003de\u003c0||0\u003d\u003d\u003de\u0026\u00261/e\u003c0?1:0;for(e\u003dMath.abs(e),isNaN(e)||e\u003d\u003d\u003d1/0?(s\u003disNaN(e)?1:0,o\u003du):(o\u003dMath.floor(Math.log(e)/Math.LN2),e*(l\u003dMath.pow(2,-o))\u003c1\u0026\u0026(o--,l*\u003d2),(e+\u003do+f\u003e\u003d1?h/l:h*Math.pow(2,1-f))*l\u003e\u003d2\u0026\u0026(o++,l/\u003d2),o+f\u003e\u003du?(s\u003d0,o\u003du):o+f\u003e\u003d1?(s\u003d(e*l-1)*Math.pow(2,i),o+\u003df):(s\u003de*Math.pow(2,f-1)*Math.pow(2,i),o\u003d0));i\u003e\u003d8;t[r+p]\u003d255\u0026s,p+\u003dd,s/\u003d256,i-\u003d8);for(o\u003do\u003c\u003ci|s,c+\u003di;c\u003e0;t[r+p]\u003d255\u0026o,p+\u003dd,o/\u003d256,c-\u003d8);t[r+p-d]|\u003d128*m}},{}],442:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003dt.length;if(0\u003d\u003d\u003dr)throw new Error(\"Must have at least d+1 points\");var i\u003dt[0].length;if(r\u003c\u003di)throw new Error(\"Must input at least d+1 points\");var o\u003dt.slice(0,i+1),s\u003dn.apply(void 0,o);if(0\u003d\u003d\u003ds)throw new Error(\"Input not in general position\");for(var l\u003dnew Array(i+1),u\u003d0;u\u003c\u003di;++u)l[u]\u003du;s\u003c0\u0026\u0026(l[0]\u003d1,l[1]\u003d0);var f\u003dnew a(l,new Array(i+1),!1),h\u003df.adjacent,p\u003dnew Array(i+2);for(u\u003d0;u\u003c\u003di;++u){for(var d\u003dl.slice(),m\u003d0;m\u003c\u003di;++m)m\u003d\u003d\u003du\u0026\u0026(d[m]\u003d-1);var g\u003dd[0];d[0]\u003dd[1],d[1]\u003dg;var v\u003dnew a(d,new Array(i+1),!0);h[u]\u003dv,p[u]\u003dv}p[i+1]\u003df;for(u\u003d0;u\u003c\u003di;++u){d\u003dh[u].vertices;var y\u003dh[u].adjacent;for(m\u003d0;m\u003c\u003di;++m){var x\u003dd[m];if(x\u003c0)y[m]\u003df;else for(var b\u003d0;b\u003c\u003di;++b)h[b].vertices.indexOf(x)\u003c0\u0026\u0026(y[m]\u003dh[b])}}var _\u003dnew c(i,o,p),w\u003d!!e;for(u\u003di+1;u\u003cr;++u)_.insert(t[u],w);return _.boundary()};var n\u003dt(\"robust-orientation\"),i\u003dt(\"simplicial-complex\").compareCells;function a(t,e,r){this.vertices\u003dt,this.adjacent\u003de,this.boundary\u003dr,this.lastVisited\u003d-1}function o(t,e,r){this.vertices\u003dt,this.cell\u003de,this.index\u003dr}function s(t,e){return i(t.vertices,e.vertices)}a.prototype.flip\u003dfunction(){var t\u003dthis.vertices[0];this.vertices[0]\u003dthis.vertices[1],this.vertices[1]\u003dt;var e\u003dthis.adjacent[0];this.adjacent[0]\u003dthis.adjacent[1],this.adjacent[1]\u003de};var l\u003d[];function c(t,e,r){this.dimension\u003dt,this.vertices\u003de,this.simplices\u003dr,this.interior\u003dr.filter((function(t){return!t.boundary})),this.tuple\u003dnew Array(t+1);for(var i\u003d0;i\u003c\u003dt;++i)this.tuple[i]\u003dthis.vertices[i];var a\u003dl[t];a||(a\u003dl[t]\u003dfunction(t){for(var e\u003d[\"function orient(){var tuple\u003dthis.tuple;return test(\"],r\u003d0;r\u003c\u003dt;++r)r\u003e0\u0026\u0026e.push(\",\"),e.push(\"tuple[\",r,\"]\");e.push(\")}return orient\");var i\u003dnew Function(\"test\",e.join(\"\")),a\u003dn[t+1];return a||(a\u003dn),i(a)}(t)),this.orient\u003da}var u\u003dc.prototype;u.handleBoundaryDegeneracy\u003dfunction(t,e){var r\u003dthis.dimension,n\u003dthis.vertices.length-1,i\u003dthis.tuple,a\u003dthis.vertices,o\u003d[t];for(t.lastVisited\u003d-n;o.length\u003e0;){(t\u003do.pop()).vertices;for(var s\u003dt.adjacent,l\u003d0;l\u003c\u003dr;++l){var c\u003ds[l];if(c.boundary\u0026\u0026!(c.lastVisited\u003c\u003d-n)){for(var u\u003dc.vertices,f\u003d0;f\u003c\u003dr;++f){var h\u003du[f];i[f]\u003dh\u003c0?e:a[h]}var p\u003dthis.orient();if(p\u003e0)return c;c.lastVisited\u003d-n,0\u003d\u003d\u003dp\u0026\u0026o.push(c)}}}return null},u.walk\u003dfunction(t,e){var r\u003dthis.vertices.length-1,n\u003dthis.dimension,i\u003dthis.vertices,a\u003dthis.tuple,o\u003de?this.interior.length*Math.random()|0:this.interior.length-1,s\u003dthis.interior[o];t:for(;!s.boundary;){for(var l\u003ds.vertices,c\u003ds.adjacent,u\u003d0;u\u003c\u003dn;++u)a[u]\u003di[l[u]];s.lastVisited\u003dr;for(u\u003d0;u\u003c\u003dn;++u){var f\u003dc[u];if(!(f.lastVisited\u003e\u003dr)){var h\u003da[u];a[u]\u003dt;var p\u003dthis.orient();if(a[u]\u003dh,p\u003c0){s\u003df;continue t}f.boundary?f.lastVisited\u003d-r:f.lastVisited\u003dr}}return}return s},u.addPeaks\u003dfunction(t,e){var r\u003dthis.vertices.length-1,n\u003dthis.dimension,i\u003dthis.vertices,l\u003dthis.tuple,c\u003dthis.interior,u\u003dthis.simplices,f\u003d[e];e.lastVisited\u003dr,e.vertices[e.vertices.indexOf(-1)]\u003dr,e.boundary\u003d!1,c.push(e);for(var h\u003d[];f.length\u003e0;){var p\u003d(e\u003df.pop()).vertices,d\u003de.adjacent,m\u003dp.indexOf(r);if(!(m\u003c0))for(var g\u003d0;g\u003c\u003dn;++g)if(g!\u003d\u003dm){var v\u003dd[g];if(v.boundary\u0026\u0026!(v.lastVisited\u003e\u003dr)){var y\u003dv.vertices;if(v.lastVisited!\u003d\u003d-r){for(var x\u003d0,b\u003d0;b\u003c\u003dn;++b)y[b]\u003c0?(x\u003db,l[b]\u003dt):l[b]\u003di[y[b]];if(this.orient()\u003e0){y[x]\u003dr,v.boundary\u003d!1,c.push(v),f.push(v),v.lastVisited\u003dr;continue}v.lastVisited\u003d-r}var _\u003dv.adjacent,w\u003dp.slice(),T\u003dd.slice(),k\u003dnew a(w,T,!0);u.push(k);var M\u003d_.indexOf(e);if(!(M\u003c0)){_[M]\u003dk,T[m]\u003dv,w[g]\u003d-1,T[g]\u003de,d[g]\u003dk,k.flip();for(b\u003d0;b\u003c\u003dn;++b){var A\u003dw[b];if(!(A\u003c0||A\u003d\u003d\u003dr)){for(var S\u003dnew Array(n-1),E\u003d0,L\u003d0;L\u003c\u003dn;++L){var C\u003dw[L];C\u003c0||L\u003d\u003d\u003db||(S[E++]\u003dC)}h.push(new o(S,k,b))}}}}}}h.sort(s);for(g\u003d0;g+1\u003ch.length;g+\u003d2){var P\u003dh[g],I\u003dh[g+1],O\u003dP.index,z\u003dI.index;O\u003c0||z\u003c0||(P.cell.adjacent[P.index]\u003dI.cell,I.cell.adjacent[I.index]\u003dP.cell)}},u.insert\u003dfunction(t,e){var r\u003dthis.vertices;r.push(t);var n\u003dthis.walk(t,e);if(n){for(var i\u003dthis.dimension,a\u003dthis.tuple,o\u003d0;o\u003c\u003di;++o){var s\u003dn.vertices[o];a[o]\u003ds\u003c0?t:r[s]}var l\u003dthis.orient(a);l\u003c0||(0!\u003d\u003dl||(n\u003dthis.handleBoundaryDegeneracy(n,t)))\u0026\u0026this.addPeaks(t,n)}},u.boundary\u003dfunction(){for(var t\u003dthis.dimension,e\u003d[],r\u003dthis.simplices,n\u003dr.length,i\u003d0;i\u003cn;++i){var a\u003dr[i];if(a.boundary){for(var o\u003dnew Array(t),s\u003da.vertices,l\u003d0,c\u003d0,u\u003d0;u\u003c\u003dt;++u)s[u]\u003e\u003d0?o[l++]\u003ds[u]:c\u003d1\u0026u;if(c\u003d\u003d\u003d(1\u0026t)){var f\u003do[0];o[0]\u003do[1],o[1]\u003df}e.push(o)}}return e}},{\"robust-orientation\":544,\"simplicial-complex\":555}],443:[function(t,e,r){\"function\"\u003d\u003dtypeof Object.create?e.exports\u003dfunction(t,e){e\u0026\u0026(t.super_\u003de,t.prototype\u003dObject.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:e.exports\u003dfunction(t,e){if(e){t.super_\u003de;var r\u003dfunction(){};r.prototype\u003de.prototype,t.prototype\u003dnew r,t.prototype.constructor\u003dt}}},{}],444:[function(t,e,r){\"use strict\";var n\u003dt(\"binary-search-bounds\");function i(t,e,r,n,i){this.mid\u003dt,this.left\u003de,this.right\u003dr,this.leftPoints\u003dn,this.rightPoints\u003di,this.count\u003d(e?e.count:0)+(r?r.count:0)+n.length}e.exports\u003dfunction(t){if(!t||0\u003d\u003d\u003dt.length)return new v(null);return new v(g(t))};var a\u003di.prototype;function o(t,e){t.mid\u003de.mid,t.left\u003de.left,t.right\u003de.right,t.leftPoints\u003de.leftPoints,t.rightPoints\u003de.rightPoints,t.count\u003de.count}function s(t,e){var r\u003dg(e);t.mid\u003dr.mid,t.left\u003dr.left,t.right\u003dr.right,t.leftPoints\u003dr.leftPoints,t.rightPoints\u003dr.rightPoints,t.count\u003dr.count}function l(t,e){var r\u003dt.intervals([]);r.push(e),s(t,r)}function c(t,e){var r\u003dt.intervals([]),n\u003dr.indexOf(e);return n\u003c0?0:(r.splice(n,1),s(t,r),1)}function u(t,e,r){for(var n\u003d0;n\u003ct.length\u0026\u0026t[n][0]\u003c\u003de;++n){var i\u003dr(t[n]);if(i)return i}}function f(t,e,r){for(var n\u003dt.length-1;n\u003e\u003d0\u0026\u0026t[n][1]\u003e\u003de;--n){var i\u003dr(t[n]);if(i)return i}}function h(t,e){for(var r\u003d0;r\u003ct.length;++r){var n\u003de(t[r]);if(n)return n}}function p(t,e){return t-e}function d(t,e){var r\u003dt[0]-e[0];return r||t[1]-e[1]}function m(t,e){var r\u003dt[1]-e[1];return r||t[0]-e[0]}function g(t){if(0\u003d\u003d\u003dt.length)return null;for(var e\u003d[],r\u003d0;r\u003ct.length;++r)e.push(t[r][0],t[r][1]);e.sort(p);var n\u003de[e.length\u003e\u003e1],a\u003d[],o\u003d[],s\u003d[];for(r\u003d0;r\u003ct.length;++r){var l\u003dt[r];l[1]\u003cn?a.push(l):n\u003cl[0]?o.push(l):s.push(l)}var c\u003ds,u\u003ds.slice();return c.sort(d),u.sort(m),new i(n,g(a),g(o),c,u)}function v(t){this.root\u003dt}a.intervals\u003dfunction(t){return t.push.apply(t,this.leftPoints),this.left\u0026\u0026this.left.intervals(t),this.right\u0026\u0026this.right.intervals(t),t},a.insert\u003dfunction(t){var e\u003dthis.count-this.leftPoints.length;if(this.count+\u003d1,t[1]\u003cthis.mid)this.left?4*(this.left.count+1)\u003e3*(e+1)?l(this,t):this.left.insert(t):this.left\u003dg([t]);else if(t[0]\u003ethis.mid)this.right?4*(this.right.count+1)\u003e3*(e+1)?l(this,t):this.right.insert(t):this.right\u003dg([t]);else{var r\u003dn.ge(this.leftPoints,t,d),i\u003dn.ge(this.rightPoints,t,m);this.leftPoints.splice(r,0,t),this.rightPoints.splice(i,0,t)}},a.remove\u003dfunction(t){var e\u003dthis.count-this.leftPoints;if(t[1]\u003cthis.mid)return this.left?4*(this.right?this.right.count:0)\u003e3*(e-1)?c(this,t):2\u003d\u003d\u003d(s\u003dthis.left.remove(t))?(this.left\u003dnull,this.count-\u003d1,1):(1\u003d\u003d\u003ds\u0026\u0026(this.count-\u003d1),s):0;if(t[0]\u003ethis.mid)return this.right?4*(this.left?this.left.count:0)\u003e3*(e-1)?c(this,t):2\u003d\u003d\u003d(s\u003dthis.right.remove(t))?(this.right\u003dnull,this.count-\u003d1,1):(1\u003d\u003d\u003ds\u0026\u0026(this.count-\u003d1),s):0;if(1\u003d\u003d\u003dthis.count)return this.leftPoints[0]\u003d\u003d\u003dt?2:0;if(1\u003d\u003d\u003dthis.leftPoints.length\u0026\u0026this.leftPoints[0]\u003d\u003d\u003dt){if(this.left\u0026\u0026this.right){for(var r\u003dthis,i\u003dthis.left;i.right;)r\u003di,i\u003di.right;if(r\u003d\u003d\u003dthis)i.right\u003dthis.right;else{var a\u003dthis.left,s\u003dthis.right;r.count-\u003di.count,r.right\u003di.left,i.left\u003da,i.right\u003ds}o(this,i),this.count\u003d(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?o(this,this.left):o(this,this.right);return 1}for(a\u003dn.ge(this.leftPoints,t,d);a\u003cthis.leftPoints.length\u0026\u0026this.leftPoints[a][0]\u003d\u003d\u003dt[0];++a)if(this.leftPoints[a]\u003d\u003d\u003dt){this.count-\u003d1,this.leftPoints.splice(a,1);for(s\u003dn.ge(this.rightPoints,t,m);s\u003cthis.rightPoints.length\u0026\u0026this.rightPoints[s][1]\u003d\u003d\u003dt[1];++s)if(this.rightPoints[s]\u003d\u003d\u003dt)return this.rightPoints.splice(s,1),1}return 0},a.queryPoint\u003dfunction(t,e){if(t\u003cthis.mid){if(this.left)if(r\u003dthis.left.queryPoint(t,e))return r;return u(this.leftPoints,t,e)}if(t\u003ethis.mid){var r;if(this.right)if(r\u003dthis.right.queryPoint(t,e))return r;return f(this.rightPoints,t,e)}return h(this.leftPoints,e)},a.queryInterval\u003dfunction(t,e,r){var n;if(t\u003cthis.mid\u0026\u0026this.left\u0026\u0026(n\u003dthis.left.queryInterval(t,e,r)))return n;if(e\u003ethis.mid\u0026\u0026this.right\u0026\u0026(n\u003dthis.right.queryInterval(t,e,r)))return n;return e\u003cthis.mid?u(this.leftPoints,e,r):t\u003ethis.mid?f(this.rightPoints,t,r):h(this.leftPoints,r)};var y\u003dv.prototype;y.insert\u003dfunction(t){this.root?this.root.insert(t):this.root\u003dnew i(t[0],null,null,[t],[t])},y.remove\u003dfunction(t){if(this.root){var e\u003dthis.root.remove(t);return 2\u003d\u003d\u003de\u0026\u0026(this.root\u003dnull),0!\u003d\u003de}return!1},y.queryPoint\u003dfunction(t,e){if(this.root)return this.root.queryPoint(t,e)},y.queryInterval\u003dfunction(t,e,r){if(t\u003c\u003de\u0026\u0026this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(y,\"count\",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(y,\"intervals\",{get:function(){return this.root?this.root.intervals([]):[]}})},{\"binary-search-bounds\":445}],445:[function(t,e,r){arguments[4][247][0].apply(r,arguments)},{dup:247}],446:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){e\u003de||new Array(t.length);for(var r\u003d0;r\u003ct.length;++r)e[t[r]]\u003dr;return e}},{}],447:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;++r)e[r]\u003dr;return e}},{}],448:[function(t,e,r){e.exports\u003d!0},{}],449:[function(t,e,r){function n(t){return!!t.constructor\u0026\u0026\"function\"\u003d\u003dtypeof t.constructor.isBuffer\u0026\u0026t.constructor.isBuffer(t)}\n/*!\n * Determine if an object is a Buffer\n *\n * @author   Feross Aboukhadijeh \u003chttps://feross.org\u003e\n * @license  MIT\n */\ne.exports\u003dfunction(t){return null!\u003dt\u0026\u0026(n(t)||function(t){return\"function\"\u003d\u003dtypeof t.readFloatLE\u0026\u0026\"function\"\u003d\u003dtypeof t.slice\u0026\u0026n(t.slice(0,0))}(t)||!!t._isBuffer)}},{}],450:[function(t,e,r){\"use strict\";e.exports\u003d\"undefined\"!\u003dtypeof navigator\u0026\u0026(/MSIE/.test(navigator.userAgent)||/Trident\\//.test(navigator.appVersion))},{}],451:[function(t,e,r){\"use strict\";e.exports\u003da,e.exports.isMobile\u003da,e.exports.default\u003da;var n\u003d/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i,i\u003d/(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i;function a(t){t||(t\u003d{});var e\u003dt.ua;if(e||\"undefined\"\u003d\u003dtypeof navigator||(e\u003dnavigator.userAgent),e\u0026\u0026e.headers\u0026\u0026\"string\"\u003d\u003dtypeof e.headers[\"user-agent\"]\u0026\u0026(e\u003de.headers[\"user-agent\"]),\"string\"!\u003dtypeof e)return!1;var r\u003dt.tablet?i.test(e):n.test(e);return!r\u0026\u0026t.tablet\u0026\u0026t.featureDetect\u0026\u0026navigator\u0026\u0026navigator.maxTouchPoints\u003e1\u0026\u0026-1!\u003d\u003de.indexOf(\"Macintosh\")\u0026\u0026-1!\u003d\u003de.indexOf(\"Safari\")\u0026\u0026(r\u003d!0),r}},{}],452:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dtypeof t;return null!\u003d\u003dt\u0026\u0026(\"object\"\u003d\u003d\u003de||\"function\"\u003d\u003d\u003de)}},{}],453:[function(t,e,r){\"use strict\";var n\u003dObject.prototype.toString;e.exports\u003dfunction(t){var e;return\"[object Object]\"\u003d\u003d\u003dn.call(t)\u0026\u0026(null\u003d\u003d\u003d(e\u003dObject.getPrototypeOf(t))||e\u003d\u003d\u003dObject.getPrototypeOf({}))}},{}],454:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e,r\u003dt.length,n\u003d0;n\u003cr;n++)if(((e\u003dt.charCodeAt(n))\u003c9||e\u003e13)\u0026\u002632!\u003d\u003de\u0026\u0026133!\u003d\u003de\u0026\u0026160!\u003d\u003de\u0026\u00265760!\u003d\u003de\u0026\u00266158!\u003d\u003de\u0026\u0026(e\u003c8192||e\u003e8205)\u0026\u00268232!\u003d\u003de\u0026\u00268233!\u003d\u003de\u0026\u00268239!\u003d\u003de\u0026\u00268287!\u003d\u003de\u0026\u00268288!\u003d\u003de\u0026\u002612288!\u003d\u003de\u0026\u002665279!\u003d\u003de)return!1;return!0}},{}],455:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003dt.trim(),!!(/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(t)\u0026\u0026/[\\dz]$/i.test(t)\u0026\u0026t.length\u003e4))}},{}],456:[function(t,e,r){e.exports\u003dfunction(t,e,r){return t*(1-r)+e*r}},{}],457:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?e.exports\u003dn():(t\u003dt||self).mapboxgl\u003dn()}(this,(function(){\"use strict\";var t,e,r;function n(n,i){if(t)if(e){var a\u003d\"var sharedChunk \u003d {}; (\"+t+\")(sharedChunk); (\"+e+\")(sharedChunk);\",o\u003d{};t(o),(r\u003di(o)).workerUrl\u003dwindow.URL.createObjectURL(new Blob([a],{type:\"text/javascript\"}))}else e\u003di;else t\u003di}return n(0,(function(t){function e(t,e){return t(e\u003d{exports:{}},e.exports),e.exports}var r\u003dn;function n(t,e,r,n){this.cx\u003d3*t,this.bx\u003d3*(r-t)-this.cx,this.ax\u003d1-this.cx-this.bx,this.cy\u003d3*e,this.by\u003d3*(n-e)-this.cy,this.ay\u003d1-this.cy-this.by,this.p1x\u003dt,this.p1y\u003dn,this.p2x\u003dr,this.p2y\u003dn}n.prototype.sampleCurveX\u003dfunction(t){return((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY\u003dfunction(t){return((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX\u003dfunction(t){return(3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX\u003dfunction(t,e){var r,n,i,a,o;for(void 0\u003d\u003d\u003de\u0026\u0026(e\u003d1e-6),i\u003dt,o\u003d0;o\u003c8;o++){if(a\u003dthis.sampleCurveX(i)-t,Math.abs(a)\u003ce)return i;var s\u003dthis.sampleCurveDerivativeX(i);if(Math.abs(s)\u003c1e-6)break;i-\u003da/s}if((i\u003dt)\u003c(r\u003d0))return r;if(i\u003e(n\u003d1))return n;for(;r\u003cn;){if(a\u003dthis.sampleCurveX(i),Math.abs(a-t)\u003ce)return i;t\u003ea?r\u003di:n\u003di,i\u003d.5*(n-r)+r}return i},n.prototype.solve\u003dfunction(t,e){return this.sampleCurveY(this.solveCurveX(t,e))};var i\u003da;function a(t,e){this.x\u003dt,this.y\u003de}function o(t,e,n,i){var a\u003dnew r(t,e,n,i);return function(t){return a.solve(t)}}a.prototype\u003d{clone:function(){return new a(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},multByPoint:function(t){return this.clone()._multByPoint(t)},divByPoint:function(t){return this.clone()._divByPoint(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},rotateAround:function(t,e){return this.clone()._rotateAround(t,e)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x\u003d\u003d\u003dt.x\u0026\u0026this.y\u003d\u003d\u003dt.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e\u003dt.x-this.x,r\u003dt.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e\u003dt[0]*this.x+t[1]*this.y,r\u003dt[2]*this.x+t[3]*this.y;return this.x\u003de,this.y\u003dr,this},_add:function(t){return this.x+\u003dt.x,this.y+\u003dt.y,this},_sub:function(t){return this.x-\u003dt.x,this.y-\u003dt.y,this},_mult:function(t){return this.x*\u003dt,this.y*\u003dt,this},_div:function(t){return this.x/\u003dt,this.y/\u003dt,this},_multByPoint:function(t){return this.x*\u003dt.x,this.y*\u003dt.y,this},_divByPoint:function(t){return this.x/\u003dt.x,this.y/\u003dt.y,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t\u003dthis.y;return this.y\u003dthis.x,this.x\u003d-t,this},_rotate:function(t){var e\u003dMath.cos(t),r\u003dMath.sin(t),n\u003de*this.x-r*this.y,i\u003dr*this.x+e*this.y;return this.x\u003dn,this.y\u003di,this},_rotateAround:function(t,e){var r\u003dMath.cos(t),n\u003dMath.sin(t),i\u003de.x+r*(this.x-e.x)-n*(this.y-e.y),a\u003de.y+n*(this.x-e.x)+r*(this.y-e.y);return this.x\u003di,this.y\u003da,this},_round:function(){return this.x\u003dMath.round(this.x),this.y\u003dMath.round(this.y),this}},a.convert\u003dfunction(t){return t instanceof a?t:Array.isArray(t)?new a(t[0],t[1]):t};var s\u003do(.25,.1,.25,1);function l(t,e,r){return Math.min(r,Math.max(e,t))}function c(t,e,r){var n\u003dr-e,i\u003d((t-e)%n+n)%n+e;return i\u003d\u003d\u003de?r:i}function u(t){for(var e\u003d[],r\u003darguments.length-1;r-- \u003e0;)e[r]\u003darguments[r+1];for(var n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){var a\u003di[n];for(var o in a)t[o]\u003da[o]}return t}var f\u003d1;function h(){return f++}function p(){return function t(e){return e?(e^16*Math.random()\u003e\u003ee/4).toString(16):([1e7]+-[1e3]+-4e3+-8e3+-1e11).replace(/[018]/g,t)}()}function d(t){return!!t\u0026\u0026/^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(t)}function m(t,e){t.forEach((function(t){e[t]\u0026\u0026(e[t]\u003de[t].bind(e))}))}function g(t,e){return-1!\u003d\u003dt.indexOf(e,t.length-e.length)}function v(t,e,r){var n\u003d{};for(var i in t)n[i]\u003de.call(r||this,t[i],i,t);return n}function y(t,e,r){var n\u003d{};for(var i in t)e.call(r||this,t[i],i,t)\u0026\u0026(n[i]\u003dt[i]);return n}function x(t){return Array.isArray(t)?t.map(x):\"object\"\u003d\u003dtypeof t\u0026\u0026t?v(t,x):t}var b\u003d{};function _(t){b[t]||(\"undefined\"!\u003dtypeof console\u0026\u0026console.warn(t),b[t]\u003d!0)}function w(t,e,r){return(r.y-t.y)*(e.x-t.x)\u003e(e.y-t.y)*(r.x-t.x)}function T(t){for(var e\u003d0,r\u003d0,n\u003dt.length,i\u003dn-1,a\u003dvoid 0,o\u003dvoid 0;r\u003cn;i\u003dr++)a\u003dt[r],e+\u003d((o\u003dt[i]).x-a.x)*(a.y+o.y);return e}function k(){return\"undefined\"!\u003dtypeof WorkerGlobalScope\u0026\u0026\"undefined\"!\u003dtypeof self\u0026\u0026self instanceof WorkerGlobalScope}function M(t){var e\u003d{};if(t.replace(/(?:^|(?:\\s*\\,\\s*))([^\\x00-\\x20\\(\\)\u003c\u003e@\\,;\\:\\\\\"\\/\\[\\]\\?\\\u003d\\{\\}\\x7F]+)(?:\\\u003d(?:([^\\x00-\\x20\\(\\)\u003c\u003e@\\,;\\:\\\\\"\\/\\[\\]\\?\\\u003d\\{\\}\\x7F]+)|(?:\\\"((?:[^\"\\\\]|\\\\.)*)\\\")))?/g,(function(t,r,n,i){var a\u003dn||i;return e[r]\u003d!a||a.toLowerCase(),\"\"})),e[\"max-age\"]){var r\u003dparseInt(e[\"max-age\"],10);isNaN(r)?delete e[\"max-age\"]:e[\"max-age\"]\u003dr}return e}var A\u003dnull;function S(t){if(null\u003d\u003dA){var e\u003dt.navigator?t.navigator.userAgent:null;A\u003d!!t.safari||!(!e||!(/\\b(iPad|iPhone|iPod)\\b/.test(e)||e.match(\"Safari\")\u0026\u0026!e.match(\"Chrome\")))}return A}function E(t){try{var e\u003dself[t];return e.setItem(\"_mapbox_test_\",1),e.removeItem(\"_mapbox_test_\"),!0}catch(t){return!1}}var L,C,P,I,O\u003dself.performance\u0026\u0026self.performance.now?self.performance.now.bind(self.performance):Date.now.bind(Date),z\u003dself.requestAnimationFrame||self.mozRequestAnimationFrame||self.webkitRequestAnimationFrame||self.msRequestAnimationFrame,D\u003dself.cancelAnimationFrame||self.mozCancelAnimationFrame||self.webkitCancelAnimationFrame||self.msCancelAnimationFrame,R\u003d{now:O,frame:function(t){var e\u003dz(t);return{cancel:function(){return D(e)}}},getImageData:function(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d0);var r\u003dself.document.createElement(\"canvas\"),n\u003dr.getContext(\"2d\");if(!n)throw new Error(\"failed to create canvas 2d context\");return r.width\u003dt.width,r.height\u003dt.height,n.drawImage(t,0,0,t.width,t.height),n.getImageData(-e,-e,t.width+2*e,t.height+2*e)},resolveURL:function(t){return L||(L\u003dself.document.createElement(\"a\")),L.href\u003dt,L.href},hardwareConcurrency:self.navigator.hardwareConcurrency||4,get devicePixelRatio(){return self.devicePixelRatio},get prefersReducedMotion(){return!!self.matchMedia\u0026\u0026(null\u003d\u003dC\u0026\u0026(C\u003dself.matchMedia(\"(prefers-reduced-motion: reduce)\")),C.matches)}},F\u003d{API_URL:\"https://api.mapbox.com\",get EVENTS_URL(){return this.API_URL?0\u003d\u003d\u003dthis.API_URL.indexOf(\"https://api.mapbox.cn\")?\"https://events.mapbox.cn/events/v2\":0\u003d\u003d\u003dthis.API_URL.indexOf(\"https://api.mapbox.com\")?\"https://events.mapbox.com/events/v2\":null:null},FEEDBACK_URL:\"https://apps.mapbox.com/feedback\",REQUIRE_ACCESS_TOKEN:!0,ACCESS_TOKEN:null,MAX_PARALLEL_IMAGE_REQUESTS:16},B\u003d{supported:!1,testSupport:function(t){if(N||!I)return;j?U(t):P\u003dt}},N\u003d!1,j\u003d!1;function U(t){var e\u003dt.createTexture();t.bindTexture(t.TEXTURE_2D,e);try{if(t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,I),t.isContextLost())return;B.supported\u003d!0}catch(t){}t.deleteTexture(e),N\u003d!0}self.document\u0026\u0026((I\u003dself.document.createElement(\"img\")).onload\u003dfunction(){P\u0026\u0026U(P),P\u003dnull,j\u003d!0},I.onerror\u003dfunction(){N\u003d!0,P\u003dnull},I.src\u003d\"data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA\u003d\");var V\u003d\"01\";var q\u003dfunction(t,e){this._transformRequestFn\u003dt,this._customAccessToken\u003de,this._createSkuToken()};function H(t){return 0\u003d\u003d\u003dt.indexOf(\"mapbox:\")}q.prototype._createSkuToken\u003dfunction(){var t\u003dfunction(){for(var t\u003d\"\",e\u003d0;e\u003c10;e++)t+\u003d\"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\"[Math.floor(62*Math.random())];return{token:[\"1\",V,t].join(\"\"),tokenExpiresAt:Date.now()+432e5}}();this._skuToken\u003dt.token,this._skuTokenExpiresAt\u003dt.tokenExpiresAt},q.prototype._isSkuTokenExpired\u003dfunction(){return Date.now()\u003ethis._skuTokenExpiresAt},q.prototype.transformRequest\u003dfunction(t,e){return this._transformRequestFn\u0026\u0026this._transformRequestFn(t,e)||{url:t}},q.prototype.normalizeStyleURL\u003dfunction(t,e){if(!H(t))return t;var r\u003dX(t);return r.path\u003d\"/styles/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeGlyphsURL\u003dfunction(t,e){if(!H(t))return t;var r\u003dX(t);return r.path\u003d\"/fonts/v1\"+r.path,this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSourceURL\u003dfunction(t,e){if(!H(t))return t;var r\u003dX(t);return r.path\u003d\"/v4/\"+r.authority+\".json\",r.params.push(\"secure\"),this._makeAPIURL(r,this._customAccessToken||e)},q.prototype.normalizeSpriteURL\u003dfunction(t,e,r,n){var i\u003dX(t);return H(t)?(i.path\u003d\"/styles/v1\"+i.path+\"/sprite\"+e+r,this._makeAPIURL(i,this._customAccessToken||n)):(i.path+\u003d\"\"+e+r,Z(i))},q.prototype.normalizeTileURL\u003dfunction(t,e){if(this._isSkuTokenExpired()\u0026\u0026this._createSkuToken(),t\u0026\u0026!H(t))return t;var r\u003dX(t),n\u003dR.devicePixelRatio\u003e\u003d2||512\u003d\u003d\u003de?\"@2x\":\"\",i\u003dB.supported?\".webp\":\"$1\";r.path\u003dr.path.replace(/(\\.(png|jpg)\\d*)(?\u003d$)/,\"\"+n+i),r.path\u003dr.path.replace(/^.+\\/v4\\//,\"/\"),r.path\u003d\"/v4\"+r.path;var a\u003dthis._customAccessToken||function(t){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){var n\u003dr[e].match(/^access_token\u003d(.*)$/);if(n)return n[1]}return null}(r.params)||F.ACCESS_TOKEN;return F.REQUIRE_ACCESS_TOKEN\u0026\u0026a\u0026\u0026this._skuToken\u0026\u0026r.params.push(\"sku\u003d\"+this._skuToken),this._makeAPIURL(r,a)},q.prototype.canonicalizeTileURL\u003dfunction(t,e){var r\u003dX(t);if(!r.path.match(/(^\\/v4\\/)/)||!r.path.match(/\\.[\\w]+$/))return t;var n\u003d\"mapbox://tiles/\";n+\u003dr.path.replace(\"/v4/\",\"\");var i\u003dr.params;return e\u0026\u0026(i\u003di.filter((function(t){return!t.match(/^access_token\u003d/)}))),i.length\u0026\u0026(n+\u003d\"?\"+i.join(\"\u0026\")),n},q.prototype.canonicalizeTileset\u003dfunction(t,e){for(var r\u003d!!e\u0026\u0026H(e),n\u003d[],i\u003d0,a\u003dt.tiles||[];i\u003ca.length;i+\u003d1){var o\u003da[i];Y(o)?n.push(this.canonicalizeTileURL(o,r)):n.push(o)}return n},q.prototype._makeAPIURL\u003dfunction(t,e){var r\u003d\"See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\",n\u003dX(F.API_URL);if(t.protocol\u003dn.protocol,t.authority\u003dn.authority,\"/\"!\u003d\u003dn.path\u0026\u0026(t.path\u003d\"\"+n.path+t.path),!F.REQUIRE_ACCESS_TOKEN)return Z(t);if(!(e\u003de||F.ACCESS_TOKEN))throw new Error(\"An API access token is required to use Mapbox GL. \"+r);if(\"s\"\u003d\u003d\u003de[0])throw new Error(\"Use a public access token (pk.*) with Mapbox GL, not a secret access token (sk.*). \"+r);return t.params\u003dt.params.filter((function(t){return-1\u003d\u003d\u003dt.indexOf(\"access_token\")})),t.params.push(\"access_token\u003d\"+e),Z(t)};var G\u003d/^((https?:)?\\/\\/)?([^\\/]+\\.)?mapbox\\.c(n|om)(\\/|\\?|$)/i;function Y(t){return G.test(t)}var W\u003d/^(\\w+):\\/\\/([^/?]*)(\\/[^?]+)?\\??(.+)?/;function X(t){var e\u003dt.match(W);if(!e)throw new Error(\"Unable to parse URL object\");return{protocol:e[1],authority:e[2],path:e[3]||\"/\",params:e[4]?e[4].split(\"\u0026\"):[]}}function Z(t){var e\u003dt.params.length?\"?\"+t.params.join(\"\u0026\"):\"\";return t.protocol+\"://\"+t.authority+t.path+e}function J(t){if(!t)return null;var e,r\u003dt.split(\".\");if(!r||3!\u003d\u003dr.length)return null;try{return JSON.parse((e\u003dr[1],decodeURIComponent(self.atob(e).split(\"\").map((function(t){return\"%\"+(\"00\"+t.charCodeAt(0).toString(16)).slice(-2)})).join(\"\"))))}catch(t){return null}}var K\u003dfunction(t){this.type\u003dt,this.anonId\u003dnull,this.eventData\u003d{},this.queue\u003d[],this.pendingRequest\u003dnull};K.prototype.getStorageKey\u003dfunction(t){var e,r\u003dJ(F.ACCESS_TOKEN),n\u003d\"\";return r\u0026\u0026r.u?(e\u003dr.u,n\u003dself.btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,(function(t,e){return String.fromCharCode(Number(\"0x\"+e))})))):n\u003dF.ACCESS_TOKEN||\"\",t?\"mapbox.eventData.\"+t+\":\"+n:\"mapbox.eventData:\"+n},K.prototype.fetchEventData\u003dfunction(){var t\u003dE(\"localStorage\"),e\u003dthis.getStorageKey(),r\u003dthis.getStorageKey(\"uuid\");if(t)try{var n\u003dself.localStorage.getItem(e);n\u0026\u0026(this.eventData\u003dJSON.parse(n));var i\u003dself.localStorage.getItem(r);i\u0026\u0026(this.anonId\u003di)}catch(t){_(\"Unable to read from LocalStorage\")}},K.prototype.saveEventData\u003dfunction(){var t\u003dE(\"localStorage\"),e\u003dthis.getStorageKey(),r\u003dthis.getStorageKey(\"uuid\");if(t)try{self.localStorage.setItem(r,this.anonId),Object.keys(this.eventData).length\u003e\u003d1\u0026\u0026self.localStorage.setItem(e,JSON.stringify(this.eventData))}catch(t){_(\"Unable to write to LocalStorage\")}},K.prototype.processRequests\u003dfunction(t){},K.prototype.postEvent\u003dfunction(t,e,r,n){var i\u003dthis;if(F.EVENTS_URL){var a\u003dX(F.EVENTS_URL);a.params.push(\"access_token\u003d\"+(n||F.ACCESS_TOKEN||\"\"));var o\u003d{event:this.type,created:new Date(t).toISOString(),sdkIdentifier:\"mapbox-gl-js\",sdkVersion:\"1.10.1\",skuId:V,userId:this.anonId},s\u003de?u(o,e):o,l\u003d{url:Z(a),headers:{\"Content-Type\":\"text/plain\"},body:JSON.stringify([s])};this.pendingRequest\u003dbt(l,(function(t){i.pendingRequest\u003dnull,r(t),i.saveEventData(),i.processRequests(n)}))}},K.prototype.queueRequest\u003dfunction(t,e){this.queue.push(t),this.processRequests(e)};var Q,$,tt\u003dfunction(t){function e(){t.call(this,\"map.load\"),this.success\u003d{},this.skuToken\u003d\"\"}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.postMapLoadEvent\u003dfunction(t,e,r,n){this.skuToken\u003dr,(F.EVENTS_URL\u0026\u0026n||F.ACCESS_TOKEN\u0026\u0026Array.isArray(t)\u0026\u0026t.some((function(t){return H(t)||Y(t)})))\u0026\u0026this.queueRequest({id:e,timestamp:Date.now()},n)},e.prototype.processRequests\u003dfunction(t){var e\u003dthis;if(!this.pendingRequest\u0026\u00260!\u003d\u003dthis.queue.length){var r\u003dthis.queue.shift(),n\u003dr.id,i\u003dr.timestamp;n\u0026\u0026this.success[n]||(this.anonId||this.fetchEventData(),d(this.anonId)||(this.anonId\u003dp()),this.postEvent(i,{skuToken:this.skuToken},(function(t){t||n\u0026\u0026(e.success[n]\u003d!0)}),t))}},e}(K),et\u003dnew(function(t){function e(e){t.call(this,\"appUserTurnstile\"),this._customAccessToken\u003de}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.postTurnstileEvent\u003dfunction(t,e){F.EVENTS_URL\u0026\u0026F.ACCESS_TOKEN\u0026\u0026Array.isArray(t)\u0026\u0026t.some((function(t){return H(t)||Y(t)}))\u0026\u0026this.queueRequest(Date.now(),e)},e.prototype.processRequests\u003dfunction(t){var e\u003dthis;if(!this.pendingRequest\u0026\u00260!\u003d\u003dthis.queue.length){this.anonId\u0026\u0026this.eventData.lastSuccess\u0026\u0026this.eventData.tokenU||this.fetchEventData();var r\u003dJ(F.ACCESS_TOKEN),n\u003dr?r.u:F.ACCESS_TOKEN,i\u003dn!\u003d\u003dthis.eventData.tokenU;d(this.anonId)||(this.anonId\u003dp(),i\u003d!0);var a\u003dthis.queue.shift();if(this.eventData.lastSuccess){var o\u003dnew Date(this.eventData.lastSuccess),s\u003dnew Date(a),l\u003d(a-this.eventData.lastSuccess)/864e5;i\u003di||l\u003e\u003d1||l\u003c-1||o.getDate()!\u003d\u003ds.getDate()}else i\u003d!0;if(!i)return this.processRequests();this.postEvent(a,{\"enabled.telemetry\":!1},(function(t){t||(e.eventData.lastSuccess\u003da,e.eventData.tokenU\u003dn)}),t)}},e}(K)),rt\u003det.postTurnstileEvent.bind(et),nt\u003dnew tt,it\u003dnt.postMapLoadEvent.bind(nt),at\u003d500,ot\u003d50;function st(){self.caches\u0026\u0026!Q\u0026\u0026(Q\u003dself.caches.open(\"mapbox-tiles\"))}function lt(t,e,r){if(st(),Q){var n\u003d{status:e.status,statusText:e.statusText,headers:new self.Headers};e.headers.forEach((function(t,e){return n.headers.set(e,t)}));var i\u003dM(e.headers.get(\"Cache-Control\")||\"\");if(!i[\"no-store\"])i[\"max-age\"]\u0026\u0026n.headers.set(\"Expires\",new Date(r+1e3*i[\"max-age\"]).toUTCString()),new Date(n.headers.get(\"Expires\")).getTime()-r\u003c42e4||function(t,e){if(void 0\u003d\u003d\u003d$)try{new Response(new ReadableStream),$\u003d!0}catch(t){$\u003d!1}$?e(t.body):t.blob().then(e)}(e,(function(e){var r\u003dnew self.Response(e,n);st(),Q\u0026\u0026Q.then((function(e){return e.put(ct(t.url),r)})).catch((function(t){return _(t.message)}))}))}}function ct(t){var e\u003dt.indexOf(\"?\");return e\u003c0?t:t.slice(0,e)}function ut(t,e){if(st(),!Q)return e(null);var r\u003dct(t.url);Q.then((function(t){t.match(r).then((function(n){var i\u003dfunction(t){if(!t)return!1;var e\u003dnew Date(t.headers.get(\"Expires\")||0),r\u003dM(t.headers.get(\"Cache-Control\")||\"\");return e\u003eDate.now()\u0026\u0026!r[\"no-cache\"]}(n);t.delete(r),i\u0026\u0026t.put(r,n.clone()),e(null,n,i)})).catch(e)})).catch(e)}var ft,ht\u003d1/0;function pt(){return null\u003d\u003dft\u0026\u0026(ft\u003dself.OffscreenCanvas\u0026\u0026new self.OffscreenCanvas(1,1).getContext(\"2d\")\u0026\u0026\"function\"\u003d\u003dtypeof self.createImageBitmap),ft}var dt\u003d{Unknown:\"Unknown\",Style:\"Style\",Source:\"Source\",Tile:\"Tile\",Glyphs:\"Glyphs\",SpriteImage:\"SpriteImage\",SpriteJSON:\"SpriteJSON\",Image:\"Image\"};\"function\"\u003d\u003dtypeof Object.freeze\u0026\u0026Object.freeze(dt);var mt\u003dfunction(t){function e(e,r,n){401\u003d\u003d\u003dr\u0026\u0026Y(n)\u0026\u0026(e+\u003d\": you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes\"),t.call(this,e),this.status\u003dr,this.url\u003dn,this.name\u003dthis.constructor.name,this.message\u003de}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.toString\u003dfunction(){return this.name+\": \"+this.message+\" (\"+this.status+\"): \"+this.url},e}(Error),gt\u003dk()?function(){return self.worker\u0026\u0026self.worker.referrer}:function(){return(\"blob:\"\u003d\u003d\u003dself.location.protocol?self.parent:self).location.href};function vt(t,e){var r,n\u003dnew self.AbortController,i\u003dnew self.Request(t.url,{method:t.method||\"GET\",body:t.body,credentials:t.credentials,headers:t.headers,referrer:gt(),signal:n.signal}),a\u003d!1,o\u003d!1,s\u003d(r\u003di.url).indexOf(\"sku\u003d\")\u003e0\u0026\u0026Y(r);\"json\"\u003d\u003d\u003dt.type\u0026\u0026i.headers.set(\"Accept\",\"application/json\");var l\u003dfunction(r,n,a){if(!o){if(r\u0026\u0026\"SecurityError\"!\u003d\u003dr.message\u0026\u0026_(r),n\u0026\u0026a)return c(n);var l\u003dDate.now();self.fetch(i).then((function(r){if(r.ok){var n\u003ds?r.clone():null;return c(r,n,l)}return e(new mt(r.statusText,r.status,t.url))})).catch((function(t){20!\u003d\u003dt.code\u0026\u0026e(new Error(t.message))}))}},c\u003dfunction(r,n,s){(\"arrayBuffer\"\u003d\u003d\u003dt.type?r.arrayBuffer():\"json\"\u003d\u003d\u003dt.type?r.json():r.text()).then((function(t){o||(n\u0026\u0026s\u0026\u0026lt(i,n,s),a\u003d!0,e(null,t,r.headers.get(\"Cache-Control\"),r.headers.get(\"Expires\")))})).catch((function(t){o||e(new Error(t.message))}))};return s?ut(i,l):l(null,null),{cancel:function(){o\u003d!0,a||n.abort()}}}var yt\u003dfunction(t,e){if(r\u003dt.url,!(/^file:/.test(r)||/^file:/.test(gt())\u0026\u0026!/^\\w+:/.test(r))){if(self.fetch\u0026\u0026self.Request\u0026\u0026self.AbortController\u0026\u0026self.Request.prototype.hasOwnProperty(\"signal\"))return vt(t,e);if(k()\u0026\u0026self.worker\u0026\u0026self.worker.actor){return self.worker.actor.send(\"getResource\",t,e,void 0,!0)}}var r;return function(t,e){var r\u003dnew self.XMLHttpRequest;for(var n in r.open(t.method||\"GET\",t.url,!0),\"arrayBuffer\"\u003d\u003d\u003dt.type\u0026\u0026(r.responseType\u003d\"arraybuffer\"),t.headers)r.setRequestHeader(n,t.headers[n]);return\"json\"\u003d\u003d\u003dt.type\u0026\u0026(r.responseType\u003d\"text\",r.setRequestHeader(\"Accept\",\"application/json\")),r.withCredentials\u003d\"include\"\u003d\u003d\u003dt.credentials,r.onerror\u003dfunction(){e(new Error(r.statusText))},r.onload\u003dfunction(){if((r.status\u003e\u003d200\u0026\u0026r.status\u003c300||0\u003d\u003d\u003dr.status)\u0026\u0026null!\u003d\u003dr.response){var n\u003dr.response;if(\"json\"\u003d\u003d\u003dt.type)try{n\u003dJSON.parse(r.response)}catch(t){return e(t)}e(null,n,r.getResponseHeader(\"Cache-Control\"),r.getResponseHeader(\"Expires\"))}else e(new mt(r.statusText,r.status,t.url))},r.send(t.body),{cancel:function(){return r.abort()}}}(t,e)},xt\u003dfunction(t,e){return yt(u(t,{type:\"arrayBuffer\"}),e)},bt\u003dfunction(t,e){return yt(u(t,{method:\"POST\"}),e)};var _t,wt;_t\u003d[],wt\u003d0;var Tt\u003dfunction(t,e){if(B.supported\u0026\u0026(t.headers||(t.headers\u003d{}),t.headers.accept\u003d\"image/webp,*/*\"),wt\u003e\u003dF.MAX_PARALLEL_IMAGE_REQUESTS){var r\u003d{requestParameters:t,callback:e,cancelled:!1,cancel:function(){this.cancelled\u003d!0}};return _t.push(r),r}wt++;var n\u003d!1,i\u003dfunction(){if(!n)for(n\u003d!0,wt--;_t.length\u0026\u0026wt\u003cF.MAX_PARALLEL_IMAGE_REQUESTS;){var t\u003d_t.shift(),e\u003dt.requestParameters,r\u003dt.callback;t.cancelled||(t.cancel\u003dTt(e,r).cancel)}},a\u003dxt(t,(function(t,r,n,a){i(),t?e(t):r\u0026\u0026(pt()?function(t,e){var r\u003dnew self.Blob([new Uint8Array(t)],{type:\"image/png\"});self.createImageBitmap(r).then((function(t){e(null,t)})).catch((function(t){e(new Error(\"Could not load image because of \"+t.message+\". Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"))}))}(r,e):function(t,e,r,n){var i\u003dnew self.Image,a\u003dself.URL;i.onload\u003dfunction(){e(null,i),a.revokeObjectURL(i.src)},i.onerror\u003dfunction(){return e(new Error(\"Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.\"))};var o\u003dnew self.Blob([new Uint8Array(t)],{type:\"image/png\"});i.cacheControl\u003dr,i.expires\u003dn,i.src\u003dt.byteLength?a.createObjectURL(o):\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII\u003d\"}(r,e,n,a))}));return{cancel:function(){a.cancel(),i()}}};function kt(t,e,r){r[t]\u0026\u0026-1!\u003d\u003dr[t].indexOf(e)||(r[t]\u003dr[t]||[],r[t].push(e))}function Mt(t,e,r){if(r\u0026\u0026r[t]){var n\u003dr[t].indexOf(e);-1!\u003d\u003dn\u0026\u0026r[t].splice(n,1)}}var At\u003dfunction(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{}),u(this,e),this.type\u003dt},St\u003dfunction(t){function e(e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),t.call(this,\"error\",u({error:e},r))}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e}(At),Et\u003dfunction(){};Et.prototype.on\u003dfunction(t,e){return this._listeners\u003dthis._listeners||{},kt(t,e,this._listeners),this},Et.prototype.off\u003dfunction(t,e){return Mt(t,e,this._listeners),Mt(t,e,this._oneTimeListeners),this},Et.prototype.once\u003dfunction(t,e){return this._oneTimeListeners\u003dthis._oneTimeListeners||{},kt(t,e,this._oneTimeListeners),this},Et.prototype.fire\u003dfunction(t,e){\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003dnew At(t,e||{}));var r\u003dt.type;if(this.listens(r)){t.target\u003dthis;for(var n\u003d0,i\u003dthis._listeners\u0026\u0026this._listeners[r]?this._listeners[r].slice():[];n\u003ci.length;n+\u003d1){i[n].call(this,t)}for(var a\u003d0,o\u003dthis._oneTimeListeners\u0026\u0026this._oneTimeListeners[r]?this._oneTimeListeners[r].slice():[];a\u003co.length;a+\u003d1){var s\u003do[a];Mt(r,s,this._oneTimeListeners),s.call(this,t)}var l\u003dthis._eventedParent;l\u0026\u0026(u(t,\"function\"\u003d\u003dtypeof this._eventedParentData?this._eventedParentData():this._eventedParentData),l.fire(t))}else t instanceof St\u0026\u0026console.error(t.error);return this},Et.prototype.listens\u003dfunction(t){return this._listeners\u0026\u0026this._listeners[t]\u0026\u0026this._listeners[t].length\u003e0||this._oneTimeListeners\u0026\u0026this._oneTimeListeners[t]\u0026\u0026this._oneTimeListeners[t].length\u003e0||this._eventedParent\u0026\u0026this._eventedParent.listens(t)},Et.prototype.setEventedParent\u003dfunction(t,e){return this._eventedParent\u003dt,this._eventedParentData\u003de,this};var Lt\u003d{$version:8,$root:{version:{required:!0,type:\"enum\",values:[8]},name:{type:\"string\"},metadata:{type:\"*\"},center:{type:\"array\",value:\"number\"},zoom:{type:\"number\"},bearing:{type:\"number\",default:0,period:360,units:\"degrees\"},pitch:{type:\"number\",default:0,units:\"degrees\"},light:{type:\"light\"},sources:{required:!0,type:\"sources\"},sprite:{type:\"string\"},glyphs:{type:\"string\"},transition:{type:\"transition\"},layers:{required:!0,type:\"array\",value:\"layer\"}},sources:{\"*\":{type:\"source\"}},source:[\"source_vector\",\"source_raster\",\"source_raster_dem\",\"source_geojson\",\"source_video\",\"source_image\"],source_vector:{type:{required:!0,type:\"enum\",values:{vector:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},attribution:{type:\"string\"},promoteId:{type:\"promoteId\"},\"*\":{type:\"*\"}},source_raster:{type:{required:!0,type:\"enum\",values:{raster:{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},scheme:{type:\"enum\",values:{xyz:{},tms:{}},default:\"xyz\"},attribution:{type:\"string\"},\"*\":{type:\"*\"}},source_raster_dem:{type:{required:!0,type:\"enum\",values:{\"raster-dem\":{}}},url:{type:\"string\"},tiles:{type:\"array\",value:\"string\"},bounds:{type:\"array\",value:\"number\",length:4,default:[-180,-85.051129,180,85.051129]},minzoom:{type:\"number\",default:0},maxzoom:{type:\"number\",default:22},tileSize:{type:\"number\",default:512,units:\"pixels\"},attribution:{type:\"string\"},encoding:{type:\"enum\",values:{terrarium:{},mapbox:{}},default:\"mapbox\"},\"*\":{type:\"*\"}},source_geojson:{type:{required:!0,type:\"enum\",values:{geojson:{}}},data:{type:\"*\"},maxzoom:{type:\"number\",default:18},attribution:{type:\"string\"},buffer:{type:\"number\",default:128,maximum:512,minimum:0},tolerance:{type:\"number\",default:.375},cluster:{type:\"boolean\",default:!1},clusterRadius:{type:\"number\",default:50,minimum:0},clusterMaxZoom:{type:\"number\"},clusterProperties:{type:\"*\"},lineMetrics:{type:\"boolean\",default:!1},generateId:{type:\"boolean\",default:!1},promoteId:{type:\"promoteId\"}},source_video:{type:{required:!0,type:\"enum\",values:{video:{}}},urls:{required:!0,type:\"array\",value:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},source_image:{type:{required:!0,type:\"enum\",values:{image:{}}},url:{required:!0,type:\"string\"},coordinates:{required:!0,type:\"array\",length:4,value:{type:\"array\",length:2,value:\"number\"}}},layer:{id:{type:\"string\",required:!0},type:{type:\"enum\",values:{fill:{},line:{},symbol:{},circle:{},heatmap:{},\"fill-extrusion\":{},raster:{},hillshade:{},background:{}},required:!0},metadata:{type:\"*\"},source:{type:\"string\"},\"source-layer\":{type:\"string\"},minzoom:{type:\"number\",minimum:0,maximum:24},maxzoom:{type:\"number\",minimum:0,maximum:24},filter:{type:\"filter\"},layout:{type:\"layout\"},paint:{type:\"paint\"}},layout:[\"layout_fill\",\"layout_line\",\"layout_circle\",\"layout_heatmap\",\"layout_fill-extrusion\",\"layout_symbol\",\"layout_raster\",\"layout_hillshade\",\"layout_background\"],layout_background:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_fill:{\"fill-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_circle:{\"circle-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_heatmap:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},\"layout_fill-extrusion\":{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_line:{\"line-cap\":{type:\"enum\",values:{butt:{},round:{},square:{}},default:\"butt\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-join\":{type:\"enum\",values:{bevel:{},round:{},miter:{}},default:\"miter\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"line-miter-limit\":{type:\"number\",default:2,requires:[{\"line-join\":\"miter\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-round-limit\":{type:\"number\",default:1.05,requires:[{\"line-join\":\"round\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_symbol:{\"symbol-placement\":{type:\"enum\",values:{point:{},line:{},\"line-center\":{}},default:\"point\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-spacing\":{type:\"number\",default:250,minimum:1,units:\"pixels\",requires:[{\"symbol-placement\":\"line\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-avoid-edges\":{type:\"boolean\",default:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"symbol-sort-key\":{type:\"number\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"symbol-z-order\":{type:\"enum\",values:{auto:{},\"viewport-y\":{},source:{}},default:\"auto\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-optional\":{type:\"boolean\",default:!1,requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-size\":{type:\"number\",default:1,minimum:0,units:\"factor of the original icon size\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-text-fit\":{type:\"enum\",values:{none:{},width:{},height:{},both:{}},default:\"none\",requires:[\"icon-image\",\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-text-fit-padding\":{type:\"array\",value:\"number\",length:4,default:[0,0,0,0],units:\"pixels\",requires:[\"icon-image\",\"text-field\",{\"icon-text-fit\":[\"both\",\"width\",\"height\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-image\":{type:\"resolvedImage\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-keep-upright\":{type:\"boolean\",default:!1,requires:[\"icon-image\",{\"icon-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-offset\":{type:\"array\",value:\"number\",length:2,default:[0,0],requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"icon-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotation-alignment\":{type:\"enum\",values:{map:{},viewport:{},auto:{}},default:\"auto\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-field\":{type:\"formatted\",default:\"\",tokens:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-font\":{type:\"array\",value:\"string\",default:[\"Open Sans Regular\",\"Arial Unicode MS Regular\"],requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-size\":{type:\"number\",default:16,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-width\":{type:\"number\",default:10,minimum:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-line-height\":{type:\"number\",default:1.2,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-letter-spacing\":{type:\"number\",default:0,units:\"ems\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-justify\":{type:\"enum\",values:{auto:{},left:{},center:{},right:{}},default:\"center\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-radial-offset\":{type:\"number\",units:\"ems\",default:0,requires:[\"text-field\"],\"property-type\":\"data-driven\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]}},\"text-variable-anchor\":{type:\"array\",value:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-anchor\":{type:\"enum\",values:{center:{},left:{},right:{},top:{},bottom:{},\"top-left\":{},\"top-right\":{},\"bottom-left\":{},\"bottom-right\":{}},default:\"center\",requires:[\"text-field\",{\"!\":\"text-variable-anchor\"}],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-max-angle\":{type:\"number\",default:45,units:\"degrees\",requires:[\"text-field\",{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-writing-mode\":{type:\"array\",value:\"enum\",values:{horizontal:{},vertical:{}},requires:[\"text-field\",{\"symbol-placement\":[\"point\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-rotate\":{type:\"number\",default:0,period:360,units:\"degrees\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-padding\":{type:\"number\",default:2,minimum:0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-keep-upright\":{type:\"boolean\",default:!0,requires:[\"text-field\",{\"text-rotation-alignment\":\"map\"},{\"symbol-placement\":[\"line\",\"line-center\"]}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-transform\":{type:\"enum\",values:{none:{},uppercase:{},lowercase:{}},default:\"none\",requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-offset\":{type:\"array\",value:\"number\",units:\"ems\",length:2,default:[0,0],requires:[\"text-field\",{\"!\":\"text-radial-offset\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"data-driven\"},\"text-allow-overlap\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-ignore-placement\":{type:\"boolean\",default:!1,requires:[\"text-field\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-optional\":{type:\"boolean\",default:!1,requires:[\"text-field\",\"icon-image\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_raster:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},layout_hillshade:{visibility:{type:\"enum\",values:{visible:{},none:{}},default:\"visible\",\"property-type\":\"constant\"}},filter:{type:\"array\",value:\"*\"},filter_operator:{type:\"enum\",values:{\"\u003d\u003d\":{},\"!\u003d\":{},\"\u003e\":{},\"\u003e\u003d\":{},\"\u003c\":{},\"\u003c\u003d\":{},in:{},\"!in\":{},all:{},any:{},none:{},has:{},\"!has\":{},within:{}}},geometry_type:{type:\"enum\",values:{Point:{},LineString:{},Polygon:{}}},function:{expression:{type:\"expression\"},stops:{type:\"array\",value:\"function_stop\"},base:{type:\"number\",default:1,minimum:0},property:{type:\"string\",default:\"$zoom\"},type:{type:\"enum\",values:{identity:{},exponential:{},interval:{},categorical:{}},default:\"exponential\"},colorSpace:{type:\"enum\",values:{rgb:{},lab:{},hcl:{}},default:\"rgb\"},default:{type:\"*\",required:!1}},function_stop:{type:\"array\",minimum:0,maximum:24,value:[\"number\",\"color\"],length:2},expression:{type:\"array\",value:\"*\",minimum:1},expression_name:{type:\"enum\",values:{let:{group:\"Variable binding\"},var:{group:\"Variable binding\"},literal:{group:\"Types\"},array:{group:\"Types\"},at:{group:\"Lookup\"},in:{group:\"Lookup\"},\"index-of\":{group:\"Lookup\"},slice:{group:\"Lookup\"},case:{group:\"Decision\"},match:{group:\"Decision\"},coalesce:{group:\"Decision\"},step:{group:\"Ramps, scales, curves\"},interpolate:{group:\"Ramps, scales, curves\"},\"interpolate-hcl\":{group:\"Ramps, scales, curves\"},\"interpolate-lab\":{group:\"Ramps, scales, curves\"},ln2:{group:\"Math\"},pi:{group:\"Math\"},e:{group:\"Math\"},typeof:{group:\"Types\"},string:{group:\"Types\"},number:{group:\"Types\"},boolean:{group:\"Types\"},object:{group:\"Types\"},collator:{group:\"Types\"},format:{group:\"Types\"},image:{group:\"Types\"},\"number-format\":{group:\"Types\"},\"to-string\":{group:\"Types\"},\"to-number\":{group:\"Types\"},\"to-boolean\":{group:\"Types\"},\"to-rgba\":{group:\"Color\"},\"to-color\":{group:\"Types\"},rgb:{group:\"Color\"},rgba:{group:\"Color\"},get:{group:\"Lookup\"},has:{group:\"Lookup\"},length:{group:\"Lookup\"},properties:{group:\"Feature data\"},\"feature-state\":{group:\"Feature data\"},\"geometry-type\":{group:\"Feature data\"},id:{group:\"Feature data\"},zoom:{group:\"Zoom\"},\"heatmap-density\":{group:\"Heatmap\"},\"line-progress\":{group:\"Feature data\"},accumulated:{group:\"Feature data\"},\"+\":{group:\"Math\"},\"*\":{group:\"Math\"},\"-\":{group:\"Math\"},\"/\":{group:\"Math\"},\"%\":{group:\"Math\"},\"^\":{group:\"Math\"},sqrt:{group:\"Math\"},log10:{group:\"Math\"},ln:{group:\"Math\"},log2:{group:\"Math\"},sin:{group:\"Math\"},cos:{group:\"Math\"},tan:{group:\"Math\"},asin:{group:\"Math\"},acos:{group:\"Math\"},atan:{group:\"Math\"},min:{group:\"Math\"},max:{group:\"Math\"},round:{group:\"Math\"},abs:{group:\"Math\"},ceil:{group:\"Math\"},floor:{group:\"Math\"},distance:{group:\"Math\"},\"\u003d\u003d\":{group:\"Decision\"},\"!\u003d\":{group:\"Decision\"},\"\u003e\":{group:\"Decision\"},\"\u003c\":{group:\"Decision\"},\"\u003e\u003d\":{group:\"Decision\"},\"\u003c\u003d\":{group:\"Decision\"},all:{group:\"Decision\"},any:{group:\"Decision\"},\"!\":{group:\"Decision\"},within:{group:\"Decision\"},\"is-supported-script\":{group:\"String\"},upcase:{group:\"String\"},downcase:{group:\"String\"},concat:{group:\"String\"},\"resolved-locale\":{group:\"String\"}}},light:{anchor:{type:\"enum\",default:\"viewport\",values:{map:{},viewport:{}},\"property-type\":\"data-constant\",transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]}},position:{type:\"array\",default:[1.15,210,30],length:3,value:\"number\",\"property-type\":\"data-constant\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]}},color:{type:\"color\",\"property-type\":\"data-constant\",default:\"#ffffff\",expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0},intensity:{type:\"number\",\"property-type\":\"data-constant\",default:.5,minimum:0,maximum:1,expression:{interpolated:!0,parameters:[\"zoom\"]},transition:!0}},paint:[\"paint_fill\",\"paint_line\",\"paint_circle\",\"paint_heatmap\",\"paint_fill-extrusion\",\"paint_symbol\",\"paint_raster\",\"paint_hillshade\",\"paint_background\"],paint_fill:{\"fill-antialias\":{type:\"boolean\",default:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-outline-color\":{type:\"color\",transition:!0,requires:[{\"!\":\"fill-pattern\"},{\"fill-antialias\":!0}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"}},\"paint_fill-extrusion\":{\"fill-extrusion-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"fill-extrusion-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"fill-extrusion-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"fill-extrusion-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"fill-extrusion-height\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-base\":{type:\"number\",default:0,minimum:0,units:\"meters\",transition:!0,requires:[\"fill-extrusion-height\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"fill-extrusion-vertical-gradient\":{type:\"boolean\",default:!0,transition:!1,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_line:{\"line-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"line-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"line-width\":{type:\"number\",default:1,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-gap-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-offset\":{type:\"number\",default:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"line-dasharray\":{type:\"array\",value:\"number\",minimum:0,transition:!0,units:\"line widths\",requires:[{\"!\":\"line-pattern\"}],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"line-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]},\"property-type\":\"cross-faded-data-driven\"},\"line-gradient\":{type:\"color\",transition:!1,requires:[{\"!\":\"line-dasharray\"},{\"!\":\"line-pattern\"},{source:\"geojson\",has:{lineMetrics:!0}}],expression:{interpolated:!0,parameters:[\"line-progress\"]},\"property-type\":\"color-ramp\"}},paint_circle:{\"circle-radius\":{type:\"number\",default:5,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-blur\":{type:\"number\",default:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"circle-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-scale\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-pitch-alignment\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"circle-stroke-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"circle-stroke-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"}},paint_heatmap:{\"heatmap-radius\":{type:\"number\",default:30,minimum:1,transition:!0,units:\"pixels\",expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-weight\":{type:\"number\",default:1,minimum:0,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"heatmap-intensity\":{type:\"number\",default:1,minimum:0,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"heatmap-color\":{type:\"color\",default:[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,\"rgba(0, 0, 255, 0)\",.1,\"royalblue\",.3,\"cyan\",.5,\"lime\",.7,\"yellow\",1,\"red\"],transition:!1,expression:{interpolated:!0,parameters:[\"heatmap-density\"]},\"property-type\":\"color-ramp\"},\"heatmap-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_symbol:{\"icon-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"icon-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"icon-image\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"icon-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"icon-image\",\"icon-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-color\":{type:\"color\",default:\"#000000\",transition:!0,overridable:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-color\":{type:\"color\",default:\"rgba(0, 0, 0, 0)\",transition:!0,requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-width\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-halo-blur\":{type:\"number\",default:0,minimum:0,transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\",\"feature\",\"feature-state\"]},\"property-type\":\"data-driven\"},\"text-translate\":{type:\"array\",value:\"number\",length:2,default:[0,0],transition:!0,units:\"pixels\",requires:[\"text-field\"],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"text-translate-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"map\",requires:[\"text-field\",\"text-translate\"],expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_raster:{\"raster-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-hue-rotate\":{type:\"number\",default:0,period:360,transition:!0,units:\"degrees\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-min\":{type:\"number\",default:0,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-brightness-max\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-saturation\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-contrast\":{type:\"number\",default:0,minimum:-1,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-resampling\":{type:\"enum\",values:{linear:{},nearest:{}},default:\"linear\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"raster-fade-duration\":{type:\"number\",default:300,minimum:0,transition:!1,units:\"milliseconds\",expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_hillshade:{\"hillshade-illumination-direction\":{type:\"number\",default:335,minimum:0,maximum:359,transition:!1,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-illumination-anchor\":{type:\"enum\",values:{map:{},viewport:{}},default:\"viewport\",expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-exaggeration\":{type:\"number\",default:.5,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-shadow-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-highlight-color\":{type:\"color\",default:\"#FFFFFF\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"hillshade-accent-color\":{type:\"color\",default:\"#000000\",transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},paint_background:{\"background-color\":{type:\"color\",default:\"#000000\",transition:!0,requires:[{\"!\":\"background-pattern\"}],expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"},\"background-pattern\":{type:\"resolvedImage\",transition:!0,expression:{interpolated:!1,parameters:[\"zoom\"]},\"property-type\":\"cross-faded\"},\"background-opacity\":{type:\"number\",default:1,minimum:0,maximum:1,transition:!0,expression:{interpolated:!0,parameters:[\"zoom\"]},\"property-type\":\"data-constant\"}},transition:{duration:{type:\"number\",default:300,minimum:0,units:\"milliseconds\"},delay:{type:\"number\",default:0,minimum:0,units:\"milliseconds\"}},\"property-type\":{\"data-driven\":{type:\"property-type\"},\"cross-faded\":{type:\"property-type\"},\"cross-faded-data-driven\":{type:\"property-type\"},\"color-ramp\":{type:\"property-type\"},\"data-constant\":{type:\"property-type\"},constant:{type:\"property-type\"}},promoteId:{\"*\":{type:\"string\"}}},Ct\u003dfunction(t,e,r,n){this.message\u003d(t?t+\": \":\"\")+r,n\u0026\u0026(this.identifier\u003dn),null!\u003de\u0026\u0026e.__line__\u0026\u0026(this.line\u003de.__line__)};function Pt(t){var e\u003dt.key,r\u003dt.value;return r?[new Ct(e,r,\"constants have been deprecated as of v8\")]:[]}function It(t){for(var e\u003d[],r\u003darguments.length-1;r-- \u003e0;)e[r]\u003darguments[r+1];for(var n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){var a\u003di[n];for(var o in a)t[o]\u003da[o]}return t}function Ot(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}function zt(t){if(Array.isArray(t))return t.map(zt);if(t instanceof Object\u0026\u0026!(t instanceof Number||t instanceof String||t instanceof Boolean)){var e\u003d{};for(var r in t)e[r]\u003dzt(t[r]);return e}return Ot(t)}var Dt\u003dfunction(t){function e(e,r){t.call(this,r),this.message\u003dr,this.key\u003de}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e}(Error),Rt\u003dfunction(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]),this.parent\u003dt,this.bindings\u003d{};for(var r\u003d0,n\u003de;r\u003cn.length;r+\u003d1){var i\u003dn[r],a\u003di[0],o\u003di[1];this.bindings[a]\u003do}};Rt.prototype.concat\u003dfunction(t){return new Rt(this,t)},Rt.prototype.get\u003dfunction(t){if(this.bindings[t])return this.bindings[t];if(this.parent)return this.parent.get(t);throw new Error(t+\" not found in scope.\")},Rt.prototype.has\u003dfunction(t){return!!this.bindings[t]||!!this.parent\u0026\u0026this.parent.has(t)};var Ft\u003d{kind:\"null\"},Bt\u003d{kind:\"number\"},Nt\u003d{kind:\"string\"},jt\u003d{kind:\"boolean\"},Ut\u003d{kind:\"color\"},Vt\u003d{kind:\"object\"},qt\u003d{kind:\"value\"},Ht\u003d{kind:\"collator\"},Gt\u003d{kind:\"formatted\"},Yt\u003d{kind:\"resolvedImage\"};function Wt(t,e){return{kind:\"array\",itemType:t,N:e}}function Xt(t){if(\"array\"\u003d\u003d\u003dt.kind){var e\u003dXt(t.itemType);return\"number\"\u003d\u003dtypeof t.N?\"array\u003c\"+e+\", \"+t.N+\"\u003e\":\"value\"\u003d\u003d\u003dt.itemType.kind?\"array\":\"array\u003c\"+e+\"\u003e\"}return t.kind}var Zt\u003d[Ft,Bt,Nt,jt,Ut,Gt,Vt,Wt(qt),Yt];function Jt(t,e){if(\"error\"\u003d\u003d\u003de.kind)return null;if(\"array\"\u003d\u003d\u003dt.kind){if(\"array\"\u003d\u003d\u003de.kind\u0026\u0026(0\u003d\u003d\u003de.N\u0026\u0026\"value\"\u003d\u003d\u003de.itemType.kind||!Jt(t.itemType,e.itemType))\u0026\u0026(\"number\"!\u003dtypeof t.N||t.N\u003d\u003d\u003de.N))return null}else{if(t.kind\u003d\u003d\u003de.kind)return null;if(\"value\"\u003d\u003d\u003dt.kind)for(var r\u003d0,n\u003dZt;r\u003cn.length;r+\u003d1){if(!Jt(n[r],e))return null}}return\"Expected \"+Xt(t)+\" but found \"+Xt(e)+\" instead.\"}function Kt(t,e){return e.some((function(e){return e.kind\u003d\u003d\u003dt.kind}))}function Qt(t,e){return e.some((function(e){return\"null\"\u003d\u003d\u003de?null\u003d\u003d\u003dt:\"array\"\u003d\u003d\u003de?Array.isArray(t):\"object\"\u003d\u003d\u003de?t\u0026\u0026!Array.isArray(t)\u0026\u0026\"object\"\u003d\u003dtypeof t:e\u003d\u003d\u003dtypeof t}))}var $t\u003de((function(t,e){var r\u003d{transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};function n(t){return(t\u003dMath.round(t))\u003c0?0:t\u003e255?255:t}function i(t){return t\u003c0?0:t\u003e1?1:t}function a(t){return\"%\"\u003d\u003d\u003dt[t.length-1]?n(parseFloat(t)/100*255):n(parseInt(t))}function o(t){return\"%\"\u003d\u003d\u003dt[t.length-1]?i(parseFloat(t)/100):i(parseFloat(t))}function s(t,e,r){return r\u003c0?r+\u003d1:r\u003e1\u0026\u0026(r-\u003d1),6*r\u003c1?t+(e-t)*r*6:2*r\u003c1?e:3*r\u003c2?t+(e-t)*(2/3-r)*6:t}try{e.parseCSSColor\u003dfunction(t){var e,i\u003dt.replace(/ /g,\"\").toLowerCase();if(i in r)return r[i].slice();if(\"#\"\u003d\u003d\u003di[0])return 4\u003d\u003d\u003di.length?(e\u003dparseInt(i.substr(1),16))\u003e\u003d0\u0026\u0026e\u003c\u003d4095?[(3840\u0026e)\u003e\u003e4|(3840\u0026e)\u003e\u003e8,240\u0026e|(240\u0026e)\u003e\u003e4,15\u0026e|(15\u0026e)\u003c\u003c4,1]:null:7\u003d\u003d\u003di.length\u0026\u0026(e\u003dparseInt(i.substr(1),16))\u003e\u003d0\u0026\u0026e\u003c\u003d16777215?[(16711680\u0026e)\u003e\u003e16,(65280\u0026e)\u003e\u003e8,255\u0026e,1]:null;var l\u003di.indexOf(\"(\"),c\u003di.indexOf(\")\");if(-1!\u003d\u003dl\u0026\u0026c+1\u003d\u003d\u003di.length){var u\u003di.substr(0,l),f\u003di.substr(l+1,c-(l+1)).split(\",\"),h\u003d1;switch(u){case\"rgba\":if(4!\u003d\u003df.length)return null;h\u003do(f.pop());case\"rgb\":return 3!\u003d\u003df.length?null:[a(f[0]),a(f[1]),a(f[2]),h];case\"hsla\":if(4!\u003d\u003df.length)return null;h\u003do(f.pop());case\"hsl\":if(3!\u003d\u003df.length)return null;var p\u003d(parseFloat(f[0])%360+360)%360/360,d\u003do(f[1]),m\u003do(f[2]),g\u003dm\u003c\u003d.5?m*(d+1):m+d-m*d,v\u003d2*m-g;return[n(255*s(v,g,p+1/3)),n(255*s(v,g,p)),n(255*s(v,g,p-1/3)),h];default:return null}}return null}}catch(t){}})).parseCSSColor,te\u003dfunction(t,e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d1),this.r\u003dt,this.g\u003de,this.b\u003dr,this.a\u003dn};te.parse\u003dfunction(t){if(t){if(t instanceof te)return t;if(\"string\"\u003d\u003dtypeof t){var e\u003d$t(t);if(e)return new te(e[0]/255*e[3],e[1]/255*e[3],e[2]/255*e[3],e[3])}}},te.prototype.toString\u003dfunction(){var t\u003dthis.toArray(),e\u003dt[0],r\u003dt[1],n\u003dt[2],i\u003dt[3];return\"rgba(\"+Math.round(e)+\",\"+Math.round(r)+\",\"+Math.round(n)+\",\"+i+\")\"},te.prototype.toArray\u003dfunction(){var t\u003dthis.r,e\u003dthis.g,r\u003dthis.b,n\u003dthis.a;return 0\u003d\u003d\u003dn?[0,0,0,0]:[255*t/n,255*e/n,255*r/n,n]},te.black\u003dnew te(0,0,0,1),te.white\u003dnew te(1,1,1,1),te.transparent\u003dnew te(0,0,0,0),te.red\u003dnew te(1,0,0,1);var ee\u003dfunction(t,e,r){this.sensitivity\u003dt?e?\"variant\":\"case\":e?\"accent\":\"base\",this.locale\u003dr,this.collator\u003dnew Intl.Collator(this.locale?this.locale:[],{sensitivity:this.sensitivity,usage:\"search\"})};ee.prototype.compare\u003dfunction(t,e){return this.collator.compare(t,e)},ee.prototype.resolvedLocale\u003dfunction(){return new Intl.Collator(this.locale?this.locale:[]).resolvedOptions().locale};var re\u003dfunction(t,e,r,n,i){this.text\u003dt,this.image\u003de,this.scale\u003dr,this.fontStack\u003dn,this.textColor\u003di},ne\u003dfunction(t){this.sections\u003dt};ne.fromString\u003dfunction(t){return new ne([new re(t,null,null,null,null)])},ne.prototype.isEmpty\u003dfunction(){return 0\u003d\u003d\u003dthis.sections.length||!this.sections.some((function(t){return 0!\u003d\u003dt.text.length||t.image\u0026\u00260!\u003d\u003dt.image.name.length}))},ne.factory\u003dfunction(t){return t instanceof ne?t:ne.fromString(t)},ne.prototype.toString\u003dfunction(){return 0\u003d\u003d\u003dthis.sections.length?\"\":this.sections.map((function(t){return t.text})).join(\"\")},ne.prototype.serialize\u003dfunction(){for(var t\u003d[\"format\"],e\u003d0,r\u003dthis.sections;e\u003cr.length;e+\u003d1){var n\u003dr[e];if(n.image)t.push([\"image\",n.image.name]);else{t.push(n.text);var i\u003d{};n.fontStack\u0026\u0026(i[\"text-font\"]\u003d[\"literal\",n.fontStack.split(\",\")]),n.scale\u0026\u0026(i[\"font-scale\"]\u003dn.scale),n.textColor\u0026\u0026(i[\"text-color\"]\u003d[\"rgba\"].concat(n.textColor.toArray())),t.push(i)}}return t};var ie\u003dfunction(t){this.name\u003dt.name,this.available\u003dt.available};function ae(t,e,r,n){return\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d0\u0026\u0026t\u003c\u003d255\u0026\u0026\"number\"\u003d\u003dtypeof e\u0026\u0026e\u003e\u003d0\u0026\u0026e\u003c\u003d255\u0026\u0026\"number\"\u003d\u003dtypeof r\u0026\u0026r\u003e\u003d0\u0026\u0026r\u003c\u003d255?void 0\u003d\u003d\u003dn||\"number\"\u003d\u003dtypeof n\u0026\u0026n\u003e\u003d0\u0026\u0026n\u003c\u003d1?null:\"Invalid rgba value [\"+[t,e,r,n].join(\", \")+\"]: \u0027a\u0027 must be between 0 and 1.\":\"Invalid rgba value [\"+(\"number\"\u003d\u003dtypeof n?[t,e,r,n]:[t,e,r]).join(\", \")+\"]: \u0027r\u0027, \u0027g\u0027, and \u0027b\u0027 must be between 0 and 255.\"}function oe(t){if(null\u003d\u003d\u003dt)return!0;if(\"string\"\u003d\u003dtypeof t)return!0;if(\"boolean\"\u003d\u003dtypeof t)return!0;if(\"number\"\u003d\u003dtypeof t)return!0;if(t instanceof te)return!0;if(t instanceof ee)return!0;if(t instanceof ne)return!0;if(t instanceof ie)return!0;if(Array.isArray(t)){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){if(!oe(r[e]))return!1}return!0}if(\"object\"\u003d\u003dtypeof t){for(var n in t)if(!oe(t[n]))return!1;return!0}return!1}function se(t){if(null\u003d\u003d\u003dt)return Ft;if(\"string\"\u003d\u003dtypeof t)return Nt;if(\"boolean\"\u003d\u003dtypeof t)return jt;if(\"number\"\u003d\u003dtypeof t)return Bt;if(t instanceof te)return Ut;if(t instanceof ee)return Ht;if(t instanceof ne)return Gt;if(t instanceof ie)return Yt;if(Array.isArray(t)){for(var e,r\u003dt.length,n\u003d0,i\u003dt;n\u003ci.length;n+\u003d1){var a\u003dse(i[n]);if(e){if(e\u003d\u003d\u003da)continue;e\u003dqt;break}e\u003da}return Wt(e||qt,r)}return Vt}function le(t){var e\u003dtypeof t;return null\u003d\u003d\u003dt?\"\":\"string\"\u003d\u003d\u003de||\"number\"\u003d\u003d\u003de||\"boolean\"\u003d\u003d\u003de?String(t):t instanceof te||t instanceof ne||t instanceof ie?t.toString():JSON.stringify(t)}ie.prototype.toString\u003dfunction(){return this.name},ie.fromString\u003dfunction(t){return t?new ie({name:t,available:!1}):null},ie.prototype.serialize\u003dfunction(){return[\"image\",this.name]};var ce\u003dfunction(t,e){this.type\u003dt,this.value\u003de};ce.parse\u003dfunction(t,e){if(2!\u003d\u003dt.length)return e.error(\"\u0027literal\u0027 expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(!oe(t[1]))return e.error(\"invalid value\");var r\u003dt[1],n\u003dse(r),i\u003de.expectedType;return\"array\"!\u003d\u003dn.kind||0!\u003d\u003dn.N||!i||\"array\"!\u003d\u003di.kind||\"number\"\u003d\u003dtypeof i.N\u0026\u00260!\u003d\u003di.N||(n\u003di),new ce(n,r)},ce.prototype.evaluate\u003dfunction(){return this.value},ce.prototype.eachChild\u003dfunction(){},ce.prototype.outputDefined\u003dfunction(){return!0},ce.prototype.serialize\u003dfunction(){return\"array\"\u003d\u003d\u003dthis.type.kind||\"object\"\u003d\u003d\u003dthis.type.kind?[\"literal\",this.value]:this.value instanceof te?[\"rgba\"].concat(this.value.toArray()):this.value instanceof ne?this.value.serialize():this.value};var ue\u003dfunction(t){this.name\u003d\"ExpressionEvaluationError\",this.message\u003dt};ue.prototype.toJSON\u003dfunction(){return this.message};var fe\u003d{string:Nt,number:Bt,boolean:jt,object:Vt},he\u003dfunction(t,e){this.type\u003dt,this.args\u003de};he.parse\u003dfunction(t,e){if(t.length\u003c2)return e.error(\"Expected at least one argument.\");var r,n\u003d1,i\u003dt[0];if(\"array\"\u003d\u003d\u003di){var a,o;if(t.length\u003e2){var s\u003dt[1];if(\"string\"!\u003dtypeof s||!(s in fe)||\"object\"\u003d\u003d\u003ds)return e.error(\u0027The item type argument of \"array\" must be one of string, number, boolean\u0027,1);a\u003dfe[s],n++}else a\u003dqt;if(t.length\u003e3){if(null!\u003d\u003dt[2]\u0026\u0026(\"number\"!\u003dtypeof t[2]||t[2]\u003c0||t[2]!\u003d\u003dMath.floor(t[2])))return e.error(\u0027The length argument to \"array\" must be a positive integer literal\u0027,2);o\u003dt[2],n++}r\u003dWt(a,o)}else r\u003dfe[i];for(var l\u003d[];n\u003ct.length;n++){var c\u003de.parse(t[n],n,qt);if(!c)return null;l.push(c)}return new he(r,l)},he.prototype.evaluate\u003dfunction(t){for(var e\u003d0;e\u003cthis.args.length;e++){var r\u003dthis.args[e].evaluate(t);if(!Jt(this.type,se(r)))return r;if(e\u003d\u003d\u003dthis.args.length-1)throw new ue(\"Expected value to be of type \"+Xt(this.type)+\", but found \"+Xt(se(r))+\" instead.\")}return null},he.prototype.eachChild\u003dfunction(t){this.args.forEach(t)},he.prototype.outputDefined\u003dfunction(){return this.args.every((function(t){return t.outputDefined()}))},he.prototype.serialize\u003dfunction(){var t\u003dthis.type,e\u003d[t.kind];if(\"array\"\u003d\u003d\u003dt.kind){var r\u003dt.itemType;if(\"string\"\u003d\u003d\u003dr.kind||\"number\"\u003d\u003d\u003dr.kind||\"boolean\"\u003d\u003d\u003dr.kind){e.push(r.kind);var n\u003dt.N;(\"number\"\u003d\u003dtypeof n||this.args.length\u003e1)\u0026\u0026e.push(n)}}return e.concat(this.args.map((function(t){return t.serialize()})))};var pe\u003dfunction(t){this.type\u003dGt,this.sections\u003dt};pe.parse\u003dfunction(t,e){if(t.length\u003c2)return e.error(\"Expected at least one argument.\");var r\u003dt[1];if(!Array.isArray(r)\u0026\u0026\"object\"\u003d\u003dtypeof r)return e.error(\"First argument must be an image or text section.\");for(var n\u003d[],i\u003d!1,a\u003d1;a\u003c\u003dt.length-1;++a){var o\u003dt[a];if(i\u0026\u0026\"object\"\u003d\u003dtypeof o\u0026\u0026!Array.isArray(o)){i\u003d!1;var s\u003dnull;if(o[\"font-scale\"]\u0026\u0026!(s\u003de.parse(o[\"font-scale\"],1,Bt)))return null;var l\u003dnull;if(o[\"text-font\"]\u0026\u0026!(l\u003de.parse(o[\"text-font\"],1,Wt(Nt))))return null;var c\u003dnull;if(o[\"text-color\"]\u0026\u0026!(c\u003de.parse(o[\"text-color\"],1,Ut)))return null;var u\u003dn[n.length-1];u.scale\u003ds,u.font\u003dl,u.textColor\u003dc}else{var f\u003de.parse(t[a],1,qt);if(!f)return null;var h\u003df.type.kind;if(\"string\"!\u003d\u003dh\u0026\u0026\"value\"!\u003d\u003dh\u0026\u0026\"null\"!\u003d\u003dh\u0026\u0026\"resolvedImage\"!\u003d\u003dh)return e.error(\"Formatted text type must be \u0027string\u0027, \u0027value\u0027, \u0027image\u0027 or \u0027null\u0027.\");i\u003d!0,n.push({content:f,scale:null,font:null,textColor:null})}}return new pe(n)},pe.prototype.evaluate\u003dfunction(t){return new ne(this.sections.map((function(e){var r\u003de.content.evaluate(t);return se(r)\u003d\u003d\u003dYt?new re(\"\",r,null,null,null):new re(le(r),null,e.scale?e.scale.evaluate(t):null,e.font?e.font.evaluate(t).join(\",\"):null,e.textColor?e.textColor.evaluate(t):null)})))},pe.prototype.eachChild\u003dfunction(t){for(var e\u003d0,r\u003dthis.sections;e\u003cr.length;e+\u003d1){var n\u003dr[e];t(n.content),n.scale\u0026\u0026t(n.scale),n.font\u0026\u0026t(n.font),n.textColor\u0026\u0026t(n.textColor)}},pe.prototype.outputDefined\u003dfunction(){return!1},pe.prototype.serialize\u003dfunction(){for(var t\u003d[\"format\"],e\u003d0,r\u003dthis.sections;e\u003cr.length;e+\u003d1){var n\u003dr[e];t.push(n.content.serialize());var i\u003d{};n.scale\u0026\u0026(i[\"font-scale\"]\u003dn.scale.serialize()),n.font\u0026\u0026(i[\"text-font\"]\u003dn.font.serialize()),n.textColor\u0026\u0026(i[\"text-color\"]\u003dn.textColor.serialize()),t.push(i)}return t};var de\u003dfunction(t){this.type\u003dYt,this.input\u003dt};de.parse\u003dfunction(t,e){if(2!\u003d\u003dt.length)return e.error(\"Expected two arguments.\");var r\u003de.parse(t[1],1,Nt);return r?new de(r):e.error(\"No image name provided.\")},de.prototype.evaluate\u003dfunction(t){var e\u003dthis.input.evaluate(t),r\u003die.fromString(e);return r\u0026\u0026t.availableImages\u0026\u0026(r.available\u003dt.availableImages.indexOf(e)\u003e-1),r},de.prototype.eachChild\u003dfunction(t){t(this.input)},de.prototype.outputDefined\u003dfunction(){return!1},de.prototype.serialize\u003dfunction(){return[\"image\",this.input.serialize()]};var me\u003d{\"to-boolean\":jt,\"to-color\":Ut,\"to-number\":Bt,\"to-string\":Nt},ge\u003dfunction(t,e){this.type\u003dt,this.args\u003de};ge.parse\u003dfunction(t,e){if(t.length\u003c2)return e.error(\"Expected at least one argument.\");var r\u003dt[0];if((\"to-boolean\"\u003d\u003d\u003dr||\"to-string\"\u003d\u003d\u003dr)\u0026\u00262!\u003d\u003dt.length)return e.error(\"Expected one argument.\");for(var n\u003dme[r],i\u003d[],a\u003d1;a\u003ct.length;a++){var o\u003de.parse(t[a],a,qt);if(!o)return null;i.push(o)}return new ge(n,i)},ge.prototype.evaluate\u003dfunction(t){if(\"boolean\"\u003d\u003d\u003dthis.type.kind)return Boolean(this.args[0].evaluate(t));if(\"color\"\u003d\u003d\u003dthis.type.kind){for(var e,r,n\u003d0,i\u003dthis.args;n\u003ci.length;n+\u003d1){if(r\u003dnull,(e\u003di[n].evaluate(t))instanceof te)return e;if(\"string\"\u003d\u003dtypeof e){var a\u003dt.parseColor(e);if(a)return a}else if(Array.isArray(e)\u0026\u0026!(r\u003de.length\u003c3||e.length\u003e4?\"Invalid rbga value \"+JSON.stringify(e)+\": expected an array containing either three or four numeric values.\":ae(e[0],e[1],e[2],e[3])))return new te(e[0]/255,e[1]/255,e[2]/255,e[3])}throw new ue(r||\"Could not parse color from value \u0027\"+(\"string\"\u003d\u003dtypeof e?e:String(JSON.stringify(e)))+\"\u0027\")}if(\"number\"\u003d\u003d\u003dthis.type.kind){for(var o\u003dnull,s\u003d0,l\u003dthis.args;s\u003cl.length;s+\u003d1){if(null\u003d\u003d\u003d(o\u003dl[s].evaluate(t)))return 0;var c\u003dNumber(o);if(!isNaN(c))return c}throw new ue(\"Could not convert \"+JSON.stringify(o)+\" to number.\")}return\"formatted\"\u003d\u003d\u003dthis.type.kind?ne.fromString(le(this.args[0].evaluate(t))):\"resolvedImage\"\u003d\u003d\u003dthis.type.kind?ie.fromString(le(this.args[0].evaluate(t))):le(this.args[0].evaluate(t))},ge.prototype.eachChild\u003dfunction(t){this.args.forEach(t)},ge.prototype.outputDefined\u003dfunction(){return this.args.every((function(t){return t.outputDefined()}))},ge.prototype.serialize\u003dfunction(){if(\"formatted\"\u003d\u003d\u003dthis.type.kind)return new pe([{content:this.args[0],scale:null,font:null,textColor:null}]).serialize();if(\"resolvedImage\"\u003d\u003d\u003dthis.type.kind)return new de(this.args[0]).serialize();var t\u003d[\"to-\"+this.type.kind];return this.eachChild((function(e){t.push(e.serialize())})),t};var ve\u003d[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],ye\u003dfunction(){this.globals\u003dnull,this.feature\u003dnull,this.featureState\u003dnull,this.formattedSection\u003dnull,this._parseColorCache\u003d{},this.availableImages\u003dnull,this.canonical\u003dnull};ye.prototype.id\u003dfunction(){return this.feature\u0026\u0026\"id\"in this.feature?this.feature.id:null},ye.prototype.geometryType\u003dfunction(){return this.feature?\"number\"\u003d\u003dtypeof this.feature.type?ve[this.feature.type]:this.feature.type:null},ye.prototype.geometry\u003dfunction(){return this.feature\u0026\u0026\"geometry\"in this.feature?this.feature.geometry:null},ye.prototype.canonicalID\u003dfunction(){return this.canonical},ye.prototype.properties\u003dfunction(){return this.feature\u0026\u0026this.feature.properties||{}},ye.prototype.parseColor\u003dfunction(t){var e\u003dthis._parseColorCache[t];return e||(e\u003dthis._parseColorCache[t]\u003dte.parse(t)),e};var xe\u003dfunction(t,e,r,n){this.name\u003dt,this.type\u003de,this._evaluate\u003dr,this.args\u003dn};xe.prototype.evaluate\u003dfunction(t){return this._evaluate(t,this.args)},xe.prototype.eachChild\u003dfunction(t){this.args.forEach(t)},xe.prototype.outputDefined\u003dfunction(){return!1},xe.prototype.serialize\u003dfunction(){return[this.name].concat(this.args.map((function(t){return t.serialize()})))},xe.parse\u003dfunction(t,e){var r,n\u003dt[0],i\u003dxe.definitions[n];if(!i)return e.error(\u0027Unknown expression \"\u0027+n+\u0027\". If you wanted a literal array, use [\"literal\", [...]].\u0027,0);for(var a\u003dArray.isArray(i)?i[0]:i.type,o\u003dArray.isArray(i)?[[i[1],i[2]]]:i.overloads,s\u003do.filter((function(e){var r\u003de[0];return!Array.isArray(r)||r.length\u003d\u003d\u003dt.length-1})),l\u003dnull,c\u003d0,u\u003ds;c\u003cu.length;c+\u003d1){var f\u003du[c],h\u003df[0],p\u003df[1];l\u003dnew Ue(e.registry,e.path,null,e.scope);for(var d\u003d[],m\u003d!1,g\u003d1;g\u003ct.length;g++){var v\u003dt[g],y\u003dArray.isArray(h)?h[g-1]:h.type,x\u003dl.parse(v,1+d.length,y);if(!x){m\u003d!0;break}d.push(x)}if(!m)if(Array.isArray(h)\u0026\u0026h.length!\u003d\u003dd.length)l.error(\"Expected \"+h.length+\" arguments, but found \"+d.length+\" instead.\");else{for(var b\u003d0;b\u003cd.length;b++){var _\u003dArray.isArray(h)?h[b]:h.type,w\u003dd[b];l.concat(b+1).checkSubtype(_,w.type)}if(0\u003d\u003d\u003dl.errors.length)return new xe(n,a,p,d)}}if(1\u003d\u003d\u003ds.length)(r\u003de.errors).push.apply(r,l.errors);else{for(var T\u003d(s.length?s:o).map((function(t){var e,r\u003dt[0];return e\u003dr,Array.isArray(e)?\"(\"+e.map(Xt).join(\", \")+\")\":\"(\"+Xt(e.type)+\"...)\"})).join(\" | \"),k\u003d[],M\u003d1;M\u003ct.length;M++){var A\u003de.parse(t[M],1+k.length);if(!A)return null;k.push(Xt(A.type))}e.error(\"Expected arguments of type \"+T+\", but found (\"+k.join(\", \")+\") instead.\")}return null},xe.register\u003dfunction(t,e){for(var r in xe.definitions\u003de,e)t[r]\u003dxe};var be\u003dfunction(t,e,r){this.type\u003dHt,this.locale\u003dr,this.caseSensitive\u003dt,this.diacriticSensitive\u003de};be.parse\u003dfunction(t,e){if(2!\u003d\u003dt.length)return e.error(\"Expected one argument.\");var r\u003dt[1];if(\"object\"!\u003dtypeof r||Array.isArray(r))return e.error(\"Collator options argument must be an object.\");var n\u003de.parse(void 0!\u003d\u003dr[\"case-sensitive\"]\u0026\u0026r[\"case-sensitive\"],1,jt);if(!n)return null;var i\u003de.parse(void 0!\u003d\u003dr[\"diacritic-sensitive\"]\u0026\u0026r[\"diacritic-sensitive\"],1,jt);if(!i)return null;var a\u003dnull;return r.locale\u0026\u0026!(a\u003de.parse(r.locale,1,Nt))?null:new be(n,i,a)},be.prototype.evaluate\u003dfunction(t){return new ee(this.caseSensitive.evaluate(t),this.diacriticSensitive.evaluate(t),this.locale?this.locale.evaluate(t):null)},be.prototype.eachChild\u003dfunction(t){t(this.caseSensitive),t(this.diacriticSensitive),this.locale\u0026\u0026t(this.locale)},be.prototype.outputDefined\u003dfunction(){return!1},be.prototype.serialize\u003dfunction(){var t\u003d{};return t[\"case-sensitive\"]\u003dthis.caseSensitive.serialize(),t[\"diacritic-sensitive\"]\u003dthis.diacriticSensitive.serialize(),this.locale\u0026\u0026(t.locale\u003dthis.locale.serialize()),[\"collator\",t]};function _e(t,e){t[0]\u003dMath.min(t[0],e[0]),t[1]\u003dMath.min(t[1],e[1]),t[2]\u003dMath.max(t[2],e[0]),t[3]\u003dMath.max(t[3],e[1])}function we(t,e){return!(t[0]\u003c\u003de[0])\u0026\u0026(!(t[2]\u003e\u003de[2])\u0026\u0026(!(t[1]\u003c\u003de[1])\u0026\u0026!(t[3]\u003e\u003de[3])))}function Te(t,e){var r,n\u003d(180+t[0])/360,i\u003d(r\u003dt[1],(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+r*Math.PI/360)))/360),a\u003dMath.pow(2,e.z);return[Math.round(n*a*8192),Math.round(i*a*8192)]}function ke(t,e,r){return e[1]\u003et[1]!\u003dr[1]\u003et[1]\u0026\u0026t[0]\u003c(r[0]-e[0])*(t[1]-e[1])/(r[1]-e[1])+e[0]}function Me(t,e){for(var r,n,i,a,o,s,l,c\u003d!1,u\u003d0,f\u003de.length;u\u003cf;u++)for(var h\u003de[u],p\u003d0,d\u003dh.length;p\u003cd-1;p++){if(r\u003dt,n\u003dh[p],i\u003dh[p+1],a\u003dvoid 0,o\u003dvoid 0,s\u003dvoid 0,l\u003dvoid 0,a\u003dr[0]-n[0],o\u003dr[1]-n[1],s\u003dr[0]-i[0],l\u003dr[1]-i[1],a*l-s*o\u003d\u003d0\u0026\u0026a*s\u003c\u003d0\u0026\u0026o*l\u003c\u003d0)return!1;ke(t,h[p],h[p+1])\u0026\u0026(c\u003d!c)}return c}function Ae(t,e){for(var r\u003d0;r\u003ce.length;r++)if(Me(t,e[r]))return!0;return!1}function Se(t,e,r,n){var i\u003dt[0]-r[0],a\u003dt[1]-r[1],o\u003de[0]-r[0],s\u003de[1]-r[1],l\u003dn[0]-r[0],c\u003dn[1]-r[1],u\u003di*c-l*a,f\u003do*c-l*s;return u\u003e0\u0026\u0026f\u003c0||u\u003c0\u0026\u0026f\u003e0}function Ee(t,e,r){for(var n\u003d0,i\u003dr;n\u003ci.length;n+\u003d1)for(var a\u003di[n],o\u003d0;o\u003ca.length-1;++o)if(s\u003dt,l\u003de,c\u003da[o],u\u003da[o+1],f\u003dvoid 0,h\u003dvoid 0,p\u003dvoid 0,d\u003dvoid 0,p\u003d[l[0]-s[0],l[1]-s[1]],d\u003d[u[0]-c[0],u[1]-c[1]],0!\u003d(f\u003dd)[0]*(h\u003dp)[1]-f[1]*h[0]\u0026\u0026Se(s,l,c,u)\u0026\u0026Se(c,u,s,l))return!0;var s,l,c,u,f,h,p,d;return!1}function Le(t,e){for(var r\u003d0;r\u003ct.length;++r)if(!Me(t[r],e))return!1;for(var n\u003d0;n\u003ct.length-1;++n)if(Ee(t[n],t[n+1],e))return!1;return!0}function Ce(t,e){for(var r\u003d0;r\u003ce.length;r++)if(Le(t,e[r]))return!0;return!1}function Pe(t,e,r){for(var n\u003d[],i\u003d0;i\u003ct.length;i++){for(var a\u003d[],o\u003d0;o\u003ct[i].length;o++){var s\u003dTe(t[i][o],r);_e(e,s),a.push(s)}n.push(a)}return n}function Ie(t,e,r){for(var n\u003d[],i\u003d0;i\u003ct.length;i++){var a\u003dPe(t[i],e,r);n.push(a)}return n}function Oe(t,e,r,n){if(t[0]\u003cr[0]||t[0]\u003er[2]){var i\u003d.5*n,a\u003dt[0]-r[0]\u003ei?-n:r[0]-t[0]\u003ei?n:0;0\u003d\u003d\u003da\u0026\u0026(a\u003dt[0]-r[2]\u003ei?-n:r[2]-t[0]\u003ei?n:0),t[0]+\u003da}_e(e,t)}function ze(t,e,r,n){for(var i\u003d8192*Math.pow(2,n.z),a\u003d[8192*n.x,8192*n.y],o\u003d[],s\u003d0,l\u003dt;s\u003cl.length;s+\u003d1)for(var c\u003d0,u\u003dl[s];c\u003cu.length;c+\u003d1){var f\u003du[c],h\u003d[f.x+a[0],f.y+a[1]];Oe(h,e,r,i),o.push(h)}return o}function De(t,e,r,n){for(var i,a\u003d8192*Math.pow(2,n.z),o\u003d[8192*n.x,8192*n.y],s\u003d[],l\u003d0,c\u003dt;l\u003cc.length;l+\u003d1){for(var u\u003d[],f\u003d0,h\u003dc[l];f\u003ch.length;f+\u003d1){var p\u003dh[f],d\u003d[p.x+o[0],p.y+o[1]];_e(e,d),u.push(d)}s.push(u)}if(e[2]-e[0]\u003c\u003da/2){(i\u003de)[0]\u003di[1]\u003d1/0,i[2]\u003di[3]\u003d-1/0;for(var m\u003d0,g\u003ds;m\u003cg.length;m+\u003d1)for(var v\u003d0,y\u003dg[m];v\u003cy.length;v+\u003d1){Oe(y[v],e,r,a)}}return s}var Re\u003dfunction(t,e){this.type\u003djt,this.geojson\u003dt,this.geometries\u003de};function Fe(t){if(t instanceof xe){if(\"get\"\u003d\u003d\u003dt.name\u0026\u00261\u003d\u003d\u003dt.args.length)return!1;if(\"feature-state\"\u003d\u003d\u003dt.name)return!1;if(\"has\"\u003d\u003d\u003dt.name\u0026\u00261\u003d\u003d\u003dt.args.length)return!1;if(\"properties\"\u003d\u003d\u003dt.name||\"geometry-type\"\u003d\u003d\u003dt.name||\"id\"\u003d\u003d\u003dt.name)return!1;if(/^filter-/.test(t.name))return!1}if(t instanceof Re)return!1;var e\u003d!0;return t.eachChild((function(t){e\u0026\u0026!Fe(t)\u0026\u0026(e\u003d!1)})),e}function Be(t){if(t instanceof xe\u0026\u0026\"feature-state\"\u003d\u003d\u003dt.name)return!1;var e\u003d!0;return t.eachChild((function(t){e\u0026\u0026!Be(t)\u0026\u0026(e\u003d!1)})),e}function Ne(t,e){if(t instanceof xe\u0026\u0026e.indexOf(t.name)\u003e\u003d0)return!1;var r\u003d!0;return t.eachChild((function(t){r\u0026\u0026!Ne(t,e)\u0026\u0026(r\u003d!1)})),r}Re.parse\u003dfunction(t,e){if(2!\u003d\u003dt.length)return e.error(\"\u0027within\u0027 expression requires exactly one argument, but found \"+(t.length-1)+\" instead.\");if(oe(t[1])){var r\u003dt[1];if(\"FeatureCollection\"\u003d\u003d\u003dr.type)for(var n\u003d0;n\u003cr.features.length;++n){var i\u003dr.features[n].geometry.type;if(\"Polygon\"\u003d\u003d\u003di||\"MultiPolygon\"\u003d\u003d\u003di)return new Re(r,r.features[n].geometry)}else if(\"Feature\"\u003d\u003d\u003dr.type){var a\u003dr.geometry.type;if(\"Polygon\"\u003d\u003d\u003da||\"MultiPolygon\"\u003d\u003d\u003da)return new Re(r,r.geometry)}else if(\"Polygon\"\u003d\u003d\u003dr.type||\"MultiPolygon\"\u003d\u003d\u003dr.type)return new Re(r,r)}return e.error(\"\u0027within\u0027 expression requires valid geojson object that contains polygon geometry type.\")},Re.prototype.evaluate\u003dfunction(t){if(null!\u003dt.geometry()\u0026\u0026null!\u003dt.canonicalID()){if(\"Point\"\u003d\u003d\u003dt.geometryType())return function(t,e){var r\u003d[1/0,1/0,-1/0,-1/0],n\u003d[1/0,1/0,-1/0,-1/0],i\u003dt.canonicalID();if(\"Polygon\"\u003d\u003d\u003de.type){var a\u003dPe(e.coordinates,n,i),o\u003dze(t.geometry(),r,n,i);if(!we(r,n))return!1;for(var s\u003d0,l\u003do;s\u003cl.length;s+\u003d1){if(!Me(l[s],a))return!1}}if(\"MultiPolygon\"\u003d\u003d\u003de.type){var c\u003dIe(e.coordinates,n,i),u\u003dze(t.geometry(),r,n,i);if(!we(r,n))return!1;for(var f\u003d0,h\u003du;f\u003ch.length;f+\u003d1){if(!Ae(h[f],c))return!1}}return!0}(t,this.geometries);if(\"LineString\"\u003d\u003d\u003dt.geometryType())return function(t,e){var r\u003d[1/0,1/0,-1/0,-1/0],n\u003d[1/0,1/0,-1/0,-1/0],i\u003dt.canonicalID();if(\"Polygon\"\u003d\u003d\u003de.type){var a\u003dPe(e.coordinates,n,i),o\u003dDe(t.geometry(),r,n,i);if(!we(r,n))return!1;for(var s\u003d0,l\u003do;s\u003cl.length;s+\u003d1){if(!Le(l[s],a))return!1}}if(\"MultiPolygon\"\u003d\u003d\u003de.type){var c\u003dIe(e.coordinates,n,i),u\u003dDe(t.geometry(),r,n,i);if(!we(r,n))return!1;for(var f\u003d0,h\u003du;f\u003ch.length;f+\u003d1){if(!Ce(h[f],c))return!1}}return!0}(t,this.geometries)}return!1},Re.prototype.eachChild\u003dfunction(){},Re.prototype.outputDefined\u003dfunction(){return!0},Re.prototype.serialize\u003dfunction(){return[\"within\",this.geojson]};var je\u003dfunction(t,e){this.type\u003de.type,this.name\u003dt,this.boundExpression\u003de};je.parse\u003dfunction(t,e){if(2!\u003d\u003dt.length||\"string\"!\u003dtypeof t[1])return e.error(\"\u0027var\u0027 expression requires exactly one string literal argument.\");var r\u003dt[1];return e.scope.has(r)?new je(r,e.scope.get(r)):e.error(\u0027Unknown variable \"\u0027+r+\u0027\". Make sure \"\u0027+r+\u0027\" has been bound in an enclosing \"let\" expression before using it.\u0027,1)},je.prototype.evaluate\u003dfunction(t){return this.boundExpression.evaluate(t)},je.prototype.eachChild\u003dfunction(){},je.prototype.outputDefined\u003dfunction(){return!1},je.prototype.serialize\u003dfunction(){return[\"var\",this.name]};var Ue\u003dfunction(t,e,r,n,i){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[]),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dnew Rt),void 0\u003d\u003d\u003di\u0026\u0026(i\u003d[]),this.registry\u003dt,this.path\u003de,this.key\u003de.map((function(t){return\"[\"+t+\"]\"})).join(\"\"),this.scope\u003dn,this.errors\u003di,this.expectedType\u003dr};function Ve(t,e){for(var r,n,i\u003dt.length-1,a\u003d0,o\u003di,s\u003d0;a\u003c\u003do;)if(r\u003dt[s\u003dMath.floor((a+o)/2)],n\u003dt[s+1],r\u003c\u003de){if(s\u003d\u003d\u003di||e\u003cn)return s;a\u003ds+1}else{if(!(r\u003ee))throw new ue(\"Input is not a number.\");o\u003ds-1}return 0}Ue.prototype.parse\u003dfunction(t,e,r,n,i){return void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{}),e?this.concat(e,r,n)._parse(t,i):this._parse(t,i)},Ue.prototype._parse\u003dfunction(t,e){function r(t,e,r){return\"assert\"\u003d\u003d\u003dr?new he(e,[t]):\"coerce\"\u003d\u003d\u003dr?new ge(e,[t]):t}if(null!\u003d\u003dt\u0026\u0026\"string\"!\u003dtypeof t\u0026\u0026\"boolean\"!\u003dtypeof t\u0026\u0026\"number\"!\u003dtypeof t||(t\u003d[\"literal\",t]),Array.isArray(t)){if(0\u003d\u003d\u003dt.length)return this.error(\u0027Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].\u0027);var n\u003dt[0];if(\"string\"!\u003dtypeof n)return this.error(\"Expression name must be a string, but found \"+typeof n+\u0027 instead. If you wanted a literal array, use [\"literal\", [...]].\u0027,0),null;var i\u003dthis.registry[n];if(i){var a\u003di.parse(t,this);if(!a)return null;if(this.expectedType){var o\u003dthis.expectedType,s\u003da.type;if(\"string\"!\u003d\u003do.kind\u0026\u0026\"number\"!\u003d\u003do.kind\u0026\u0026\"boolean\"!\u003d\u003do.kind\u0026\u0026\"object\"!\u003d\u003do.kind\u0026\u0026\"array\"!\u003d\u003do.kind||\"value\"!\u003d\u003ds.kind)if(\"color\"!\u003d\u003do.kind\u0026\u0026\"formatted\"!\u003d\u003do.kind\u0026\u0026\"resolvedImage\"!\u003d\u003do.kind||\"value\"!\u003d\u003ds.kind\u0026\u0026\"string\"!\u003d\u003ds.kind){if(this.checkSubtype(o,s))return null}else a\u003dr(a,o,e.typeAnnotation||\"coerce\");else a\u003dr(a,o,e.typeAnnotation||\"assert\")}if(!(a instanceof ce)\u0026\u0026\"resolvedImage\"!\u003d\u003da.type.kind\u0026\u0026function t(e){if(e instanceof je)return t(e.boundExpression);if(e instanceof xe\u0026\u0026\"error\"\u003d\u003d\u003de.name)return!1;if(e instanceof be)return!1;if(e instanceof Re)return!1;var r\u003de instanceof ge||e instanceof he,n\u003d!0;if(e.eachChild((function(e){n\u003dr?n\u0026\u0026t(e):n\u0026\u0026e instanceof ce})),!n)return!1;return Fe(e)\u0026\u0026Ne(e,[\"zoom\",\"heatmap-density\",\"line-progress\",\"accumulated\",\"is-supported-script\"])}(a)){var l\u003dnew ye;try{a\u003dnew ce(a.type,a.evaluate(l))}catch(t){return this.error(t.message),null}}return a}return this.error(\u0027Unknown expression \"\u0027+n+\u0027\". If you wanted a literal array, use [\"literal\", [...]].\u0027,0)}return void 0\u003d\u003d\u003dt?this.error(\"\u0027undefined\u0027 value invalid. Use null instead.\"):\"object\"\u003d\u003dtypeof t?this.error(\u0027Bare objects invalid. Use [\"literal\", {...}] instead.\u0027):this.error(\"Expected an array, but found \"+typeof t+\" instead.\")},Ue.prototype.concat\u003dfunction(t,e,r){var n\u003d\"number\"\u003d\u003dtypeof t?this.path.concat(t):this.path,i\u003dr?this.scope.concat(r):this.scope;return new Ue(this.registry,n,e||null,i,this.errors)},Ue.prototype.error\u003dfunction(t){for(var e\u003d[],r\u003darguments.length-1;r-- \u003e0;)e[r]\u003darguments[r+1];var n\u003d\"\"+this.key+e.map((function(t){return\"[\"+t+\"]\"})).join(\"\");this.errors.push(new Dt(n,t))},Ue.prototype.checkSubtype\u003dfunction(t,e){var r\u003dJt(t,e);return r\u0026\u0026this.error(r),r};var qe\u003dfunction(t,e,r){this.type\u003dt,this.input\u003de,this.labels\u003d[],this.outputs\u003d[];for(var n\u003d0,i\u003dr;n\u003ci.length;n+\u003d1){var a\u003di[n],o\u003da[0],s\u003da[1];this.labels.push(o),this.outputs.push(s)}};function He(t,e,r){return t*(1-r)+e*r}qe.parse\u003dfunction(t,e){if(t.length-1\u003c4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!\u003d0)return e.error(\"Expected an even number of arguments.\");var r\u003de.parse(t[1],1,Bt);if(!r)return null;var n\u003d[],i\u003dnull;e.expectedType\u0026\u0026\"value\"!\u003d\u003de.expectedType.kind\u0026\u0026(i\u003de.expectedType);for(var a\u003d1;a\u003ct.length;a+\u003d2){var o\u003d1\u003d\u003d\u003da?-1/0:t[a],s\u003dt[a+1],l\u003da,c\u003da+1;if(\"number\"!\u003dtypeof o)return e.error(\u0027Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.\u0027,l);if(n.length\u0026\u0026n[n.length-1][0]\u003e\u003do)return e.error(\u0027Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.\u0027,l);var u\u003de.parse(s,c,i);if(!u)return null;i\u003di||u.type,n.push([o,u])}return new qe(i,r,n)},qe.prototype.evaluate\u003dfunction(t){var e\u003dthis.labels,r\u003dthis.outputs;if(1\u003d\u003d\u003de.length)return r[0].evaluate(t);var n\u003dthis.input.evaluate(t);if(n\u003c\u003de[0])return r[0].evaluate(t);var i\u003de.length;return n\u003e\u003de[i-1]?r[i-1].evaluate(t):r[Ve(e,n)].evaluate(t)},qe.prototype.eachChild\u003dfunction(t){t(this.input);for(var e\u003d0,r\u003dthis.outputs;e\u003cr.length;e+\u003d1){t(r[e])}},qe.prototype.outputDefined\u003dfunction(){return this.outputs.every((function(t){return t.outputDefined()}))},qe.prototype.serialize\u003dfunction(){for(var t\u003d[\"step\",this.input.serialize()],e\u003d0;e\u003cthis.labels.length;e++)e\u003e0\u0026\u0026t.push(this.labels[e]),t.push(this.outputs[e].serialize());return t};var Ge\u003dObject.freeze({__proto__:null,number:He,color:function(t,e,r){return new te(He(t.r,e.r,r),He(t.g,e.g,r),He(t.b,e.b,r),He(t.a,e.a,r))},array:function(t,e,r){return t.map((function(t,n){return He(t,e[n],r)}))}}),Ye\u003d6/29,We\u003d3*Ye*Ye,Xe\u003dMath.PI/180,Ze\u003d180/Math.PI;function Je(t){return t\u003e.008856451679035631?Math.pow(t,1/3):t/We+4/29}function Ke(t){return t\u003eYe?t*t*t:We*(t-4/29)}function Qe(t){return 255*(t\u003c\u003d.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function $e(t){return(t/\u003d255)\u003c\u003d.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function tr(t){var e\u003d$e(t.r),r\u003d$e(t.g),n\u003d$e(t.b),i\u003dJe((.4124564*e+.3575761*r+.1804375*n)/.95047),a\u003dJe((.2126729*e+.7151522*r+.072175*n)/1);return{l:116*a-16,a:500*(i-a),b:200*(a-Je((.0193339*e+.119192*r+.9503041*n)/1.08883)),alpha:t.a}}function er(t){var e\u003d(t.l+16)/116,r\u003disNaN(t.a)?e:e+t.a/500,n\u003disNaN(t.b)?e:e-t.b/200;return e\u003d1*Ke(e),r\u003d.95047*Ke(r),n\u003d1.08883*Ke(n),new te(Qe(3.2404542*r-1.5371385*e-.4985314*n),Qe(-.969266*r+1.8760108*e+.041556*n),Qe(.0556434*r-.2040259*e+1.0572252*n),t.alpha)}function rr(t,e,r){var n\u003de-t;return t+r*(n\u003e180||n\u003c-180?n-360*Math.round(n/360):n)}var nr\u003d{forward:tr,reverse:er,interpolate:function(t,e,r){return{l:He(t.l,e.l,r),a:He(t.a,e.a,r),b:He(t.b,e.b,r),alpha:He(t.alpha,e.alpha,r)}}},ir\u003d{forward:function(t){var e\u003dtr(t),r\u003de.l,n\u003de.a,i\u003de.b,a\u003dMath.atan2(i,n)*Ze;return{h:a\u003c0?a+360:a,c:Math.sqrt(n*n+i*i),l:r,alpha:t.a}},reverse:function(t){var e\u003dt.h*Xe,r\u003dt.c;return er({l:t.l,a:Math.cos(e)*r,b:Math.sin(e)*r,alpha:t.alpha})},interpolate:function(t,e,r){return{h:rr(t.h,e.h,r),c:He(t.c,e.c,r),l:He(t.l,e.l,r),alpha:He(t.alpha,e.alpha,r)}}},ar\u003dObject.freeze({__proto__:null,lab:nr,hcl:ir}),or\u003dfunction(t,e,r,n,i){this.type\u003dt,this.operator\u003de,this.interpolation\u003dr,this.input\u003dn,this.labels\u003d[],this.outputs\u003d[];for(var a\u003d0,o\u003di;a\u003co.length;a+\u003d1){var s\u003do[a],l\u003ds[0],c\u003ds[1];this.labels.push(l),this.outputs.push(c)}};function sr(t,e,r,n){var i\u003dn-r,a\u003dt-r;return 0\u003d\u003d\u003di?0:1\u003d\u003d\u003de?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}or.interpolationFactor\u003dfunction(t,e,n,i){var a\u003d0;if(\"exponential\"\u003d\u003d\u003dt.name)a\u003dsr(e,t.base,n,i);else if(\"linear\"\u003d\u003d\u003dt.name)a\u003dsr(e,1,n,i);else if(\"cubic-bezier\"\u003d\u003d\u003dt.name){var o\u003dt.controlPoints;a\u003dnew r(o[0],o[1],o[2],o[3]).solve(sr(e,1,n,i))}return a},or.parse\u003dfunction(t,e){var r\u003dt[0],n\u003dt[1],i\u003dt[2],a\u003dt.slice(3);if(!Array.isArray(n)||0\u003d\u003d\u003dn.length)return e.error(\"Expected an interpolation type expression.\",1);if(\"linear\"\u003d\u003d\u003dn[0])n\u003d{name:\"linear\"};else if(\"exponential\"\u003d\u003d\u003dn[0]){var o\u003dn[1];if(\"number\"!\u003dtypeof o)return e.error(\"Exponential interpolation requires a numeric base.\",1,1);n\u003d{name:\"exponential\",base:o}}else{if(\"cubic-bezier\"!\u003d\u003dn[0])return e.error(\"Unknown interpolation type \"+String(n[0]),1,0);var s\u003dn.slice(1);if(4!\u003d\u003ds.length||s.some((function(t){return\"number\"!\u003dtypeof t||t\u003c0||t\u003e1})))return e.error(\"Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.\",1);n\u003d{name:\"cubic-bezier\",controlPoints:s}}if(t.length-1\u003c4)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if((t.length-1)%2!\u003d0)return e.error(\"Expected an even number of arguments.\");if(!(i\u003de.parse(i,2,Bt)))return null;var l\u003d[],c\u003dnull;\"interpolate-hcl\"\u003d\u003d\u003dr||\"interpolate-lab\"\u003d\u003d\u003dr?c\u003dUt:e.expectedType\u0026\u0026\"value\"!\u003d\u003de.expectedType.kind\u0026\u0026(c\u003de.expectedType);for(var u\u003d0;u\u003ca.length;u+\u003d2){var f\u003da[u],h\u003da[u+1],p\u003du+3,d\u003du+4;if(\"number\"!\u003dtypeof f)return e.error(\u0027Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.\u0027,p);if(l.length\u0026\u0026l[l.length-1][0]\u003e\u003df)return e.error(\u0027Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.\u0027,p);var m\u003de.parse(h,d,c);if(!m)return null;c\u003dc||m.type,l.push([f,m])}return\"number\"\u003d\u003d\u003dc.kind||\"color\"\u003d\u003d\u003dc.kind||\"array\"\u003d\u003d\u003dc.kind\u0026\u0026\"number\"\u003d\u003d\u003dc.itemType.kind\u0026\u0026\"number\"\u003d\u003dtypeof c.N?new or(c,r,n,i,l):e.error(\"Type \"+Xt(c)+\" is not interpolatable.\")},or.prototype.evaluate\u003dfunction(t){var e\u003dthis.labels,r\u003dthis.outputs;if(1\u003d\u003d\u003de.length)return r[0].evaluate(t);var n\u003dthis.input.evaluate(t);if(n\u003c\u003de[0])return r[0].evaluate(t);var i\u003de.length;if(n\u003e\u003de[i-1])return r[i-1].evaluate(t);var a\u003dVe(e,n),o\u003de[a],s\u003de[a+1],l\u003dor.interpolationFactor(this.interpolation,n,o,s),c\u003dr[a].evaluate(t),u\u003dr[a+1].evaluate(t);return\"interpolate\"\u003d\u003d\u003dthis.operator?Ge[this.type.kind.toLowerCase()](c,u,l):\"interpolate-hcl\"\u003d\u003d\u003dthis.operator?ir.reverse(ir.interpolate(ir.forward(c),ir.forward(u),l)):nr.reverse(nr.interpolate(nr.forward(c),nr.forward(u),l))},or.prototype.eachChild\u003dfunction(t){t(this.input);for(var e\u003d0,r\u003dthis.outputs;e\u003cr.length;e+\u003d1){t(r[e])}},or.prototype.outputDefined\u003dfunction(){return this.outputs.every((function(t){return t.outputDefined()}))},or.prototype.serialize\u003dfunction(){var t;t\u003d\"linear\"\u003d\u003d\u003dthis.interpolation.name?[\"linear\"]:\"exponential\"\u003d\u003d\u003dthis.interpolation.name?1\u003d\u003d\u003dthis.interpolation.base?[\"linear\"]:[\"exponential\",this.interpolation.base]:[\"cubic-bezier\"].concat(this.interpolation.controlPoints);for(var e\u003d[this.operator,t,this.input.serialize()],r\u003d0;r\u003cthis.labels.length;r++)e.push(this.labels[r],this.outputs[r].serialize());return e};var lr\u003dfunction(t,e){this.type\u003dt,this.args\u003de};lr.parse\u003dfunction(t,e){if(t.length\u003c2)return e.error(\"Expectected at least one argument.\");var r\u003dnull,n\u003de.expectedType;n\u0026\u0026\"value\"!\u003d\u003dn.kind\u0026\u0026(r\u003dn);for(var i\u003d[],a\u003d0,o\u003dt.slice(1);a\u003co.length;a+\u003d1){var s\u003do[a],l\u003de.parse(s,1+i.length,r,void 0,{typeAnnotation:\"omit\"});if(!l)return null;r\u003dr||l.type,i.push(l)}var c\u003dn\u0026\u0026i.some((function(t){return Jt(n,t.type)}));return new lr(c?qt:r,i)},lr.prototype.evaluate\u003dfunction(t){for(var e,r\u003dnull,n\u003d0,i\u003d0,a\u003dthis.args;i\u003ca.length;i+\u003d1){if(n++,(r\u003da[i].evaluate(t))\u0026\u0026r instanceof ie\u0026\u0026!r.available\u0026\u0026(e||(e\u003dr.name),r\u003dnull,n\u003d\u003d\u003dthis.args.length\u0026\u0026(r\u003de)),null!\u003d\u003dr)break}return r},lr.prototype.eachChild\u003dfunction(t){this.args.forEach(t)},lr.prototype.outputDefined\u003dfunction(){return this.args.every((function(t){return t.outputDefined()}))},lr.prototype.serialize\u003dfunction(){var t\u003d[\"coalesce\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var cr\u003dfunction(t,e){this.type\u003de.type,this.bindings\u003d[].concat(t),this.result\u003de};cr.prototype.evaluate\u003dfunction(t){return this.result.evaluate(t)},cr.prototype.eachChild\u003dfunction(t){for(var e\u003d0,r\u003dthis.bindings;e\u003cr.length;e+\u003d1){t(r[e][1])}t(this.result)},cr.parse\u003dfunction(t,e){if(t.length\u003c4)return e.error(\"Expected at least 3 arguments, but found \"+(t.length-1)+\" instead.\");for(var r\u003d[],n\u003d1;n\u003ct.length-1;n+\u003d2){var i\u003dt[n];if(\"string\"!\u003dtypeof i)return e.error(\"Expected string, but found \"+typeof i+\" instead.\",n);if(/[^a-zA-Z0-9_]/.test(i))return e.error(\"Variable names must contain only alphanumeric characters or \u0027_\u0027.\",n);var a\u003de.parse(t[n+1],n+1);if(!a)return null;r.push([i,a])}var o\u003de.parse(t[t.length-1],t.length-1,e.expectedType,r);return o?new cr(r,o):null},cr.prototype.outputDefined\u003dfunction(){return this.result.outputDefined()},cr.prototype.serialize\u003dfunction(){for(var t\u003d[\"let\"],e\u003d0,r\u003dthis.bindings;e\u003cr.length;e+\u003d1){var n\u003dr[e],i\u003dn[0],a\u003dn[1];t.push(i,a.serialize())}return t.push(this.result.serialize()),t};var ur\u003dfunction(t,e,r){this.type\u003dt,this.index\u003de,this.input\u003dr};ur.parse\u003dfunction(t,e){if(3!\u003d\u003dt.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r\u003de.parse(t[1],1,Bt),n\u003de.parse(t[2],2,Wt(e.expectedType||qt));if(!r||!n)return null;var i\u003dn.type;return new ur(i.itemType,r,n)},ur.prototype.evaluate\u003dfunction(t){var e\u003dthis.index.evaluate(t),r\u003dthis.input.evaluate(t);if(e\u003c0)throw new ue(\"Array index out of bounds: \"+e+\" \u003c 0.\");if(e\u003e\u003dr.length)throw new ue(\"Array index out of bounds: \"+e+\" \u003e \"+(r.length-1)+\".\");if(e!\u003d\u003dMath.floor(e))throw new ue(\"Array index must be an integer, but found \"+e+\" instead.\");return r[e]},ur.prototype.eachChild\u003dfunction(t){t(this.index),t(this.input)},ur.prototype.outputDefined\u003dfunction(){return!1},ur.prototype.serialize\u003dfunction(){return[\"at\",this.index.serialize(),this.input.serialize()]};var fr\u003dfunction(t,e){this.type\u003djt,this.needle\u003dt,this.haystack\u003de};fr.parse\u003dfunction(t,e){if(3!\u003d\u003dt.length)return e.error(\"Expected 2 arguments, but found \"+(t.length-1)+\" instead.\");var r\u003de.parse(t[1],1,qt),n\u003de.parse(t[2],2,qt);return r\u0026\u0026n?Kt(r.type,[jt,Nt,Bt,Ft,qt])?new fr(r,n):e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Xt(r.type)+\" instead\"):null},fr.prototype.evaluate\u003dfunction(t){var e\u003dthis.needle.evaluate(t),r\u003dthis.haystack.evaluate(t);if(!r)return!1;if(!Qt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new ue(\"Expected first argument to be of type boolean, string, number or null, but found \"+Xt(se(e))+\" instead.\");if(!Qt(r,[\"string\",\"array\"]))throw new ue(\"Expected second argument to be of type array or string, but found \"+Xt(se(r))+\" instead.\");return r.indexOf(e)\u003e\u003d0},fr.prototype.eachChild\u003dfunction(t){t(this.needle),t(this.haystack)},fr.prototype.outputDefined\u003dfunction(){return!0},fr.prototype.serialize\u003dfunction(){return[\"in\",this.needle.serialize(),this.haystack.serialize()]};var hr\u003dfunction(t,e,r){this.type\u003dBt,this.needle\u003dt,this.haystack\u003de,this.fromIndex\u003dr};hr.parse\u003dfunction(t,e){if(t.length\u003c\u003d2||t.length\u003e\u003d5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r\u003de.parse(t[1],1,qt),n\u003de.parse(t[2],2,qt);if(!r||!n)return null;if(!Kt(r.type,[jt,Nt,Bt,Ft,qt]))return e.error(\"Expected first argument to be of type boolean, string, number or null, but found \"+Xt(r.type)+\" instead\");if(4\u003d\u003d\u003dt.length){var i\u003de.parse(t[3],3,Bt);return i?new hr(r,n,i):null}return new hr(r,n)},hr.prototype.evaluate\u003dfunction(t){var e\u003dthis.needle.evaluate(t),r\u003dthis.haystack.evaluate(t);if(!Qt(e,[\"boolean\",\"string\",\"number\",\"null\"]))throw new ue(\"Expected first argument to be of type boolean, string, number or null, but found \"+Xt(se(e))+\" instead.\");if(!Qt(r,[\"string\",\"array\"]))throw new ue(\"Expected second argument to be of type array or string, but found \"+Xt(se(r))+\" instead.\");if(this.fromIndex){var n\u003dthis.fromIndex.evaluate(t);return r.indexOf(e,n)}return r.indexOf(e)},hr.prototype.eachChild\u003dfunction(t){t(this.needle),t(this.haystack),this.fromIndex\u0026\u0026t(this.fromIndex)},hr.prototype.outputDefined\u003dfunction(){return!1},hr.prototype.serialize\u003dfunction(){if(null!\u003dthis.fromIndex\u0026\u0026void 0!\u003d\u003dthis.fromIndex){var t\u003dthis.fromIndex.serialize();return[\"index-of\",this.needle.serialize(),this.haystack.serialize(),t]}return[\"index-of\",this.needle.serialize(),this.haystack.serialize()]};var pr\u003dfunction(t,e,r,n,i,a){this.inputType\u003dt,this.type\u003de,this.input\u003dr,this.cases\u003dn,this.outputs\u003di,this.otherwise\u003da};pr.parse\u003dfunction(t,e){if(t.length\u003c5)return e.error(\"Expected at least 4 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!\u003d1)return e.error(\"Expected an even number of arguments.\");var r,n;e.expectedType\u0026\u0026\"value\"!\u003d\u003de.expectedType.kind\u0026\u0026(n\u003de.expectedType);for(var i\u003d{},a\u003d[],o\u003d2;o\u003ct.length-1;o+\u003d2){var s\u003dt[o],l\u003dt[o+1];Array.isArray(s)||(s\u003d[s]);var c\u003de.concat(o);if(0\u003d\u003d\u003ds.length)return c.error(\"Expected at least one branch label.\");for(var u\u003d0,f\u003ds;u\u003cf.length;u+\u003d1){var h\u003df[u];if(\"number\"!\u003dtypeof h\u0026\u0026\"string\"!\u003dtypeof h)return c.error(\"Branch labels must be numbers or strings.\");if(\"number\"\u003d\u003dtypeof h\u0026\u0026Math.abs(h)\u003eNumber.MAX_SAFE_INTEGER)return c.error(\"Branch labels must be integers no larger than \"+Number.MAX_SAFE_INTEGER+\".\");if(\"number\"\u003d\u003dtypeof h\u0026\u0026Math.floor(h)!\u003d\u003dh)return c.error(\"Numeric branch labels must be integer values.\");if(r){if(c.checkSubtype(r,se(h)))return null}else r\u003dse(h);if(void 0!\u003d\u003di[String(h)])return c.error(\"Branch labels must be unique.\");i[String(h)]\u003da.length}var p\u003de.parse(l,o,n);if(!p)return null;n\u003dn||p.type,a.push(p)}var d\u003de.parse(t[1],1,qt);if(!d)return null;var m\u003de.parse(t[t.length-1],t.length-1,n);return m?\"value\"!\u003d\u003dd.type.kind\u0026\u0026e.concat(1).checkSubtype(r,d.type)?null:new pr(r,n,d,i,a,m):null},pr.prototype.evaluate\u003dfunction(t){var e\u003dthis.input.evaluate(t);return(se(e)\u003d\u003d\u003dthis.inputType\u0026\u0026this.outputs[this.cases[e]]||this.otherwise).evaluate(t)},pr.prototype.eachChild\u003dfunction(t){t(this.input),this.outputs.forEach(t),t(this.otherwise)},pr.prototype.outputDefined\u003dfunction(){return this.outputs.every((function(t){return t.outputDefined()}))\u0026\u0026this.otherwise.outputDefined()},pr.prototype.serialize\u003dfunction(){for(var t\u003dthis,e\u003d[\"match\",this.input.serialize()],r\u003d[],n\u003d{},i\u003d0,a\u003dObject.keys(this.cases).sort();i\u003ca.length;i+\u003d1){var o\u003da[i];void 0\u003d\u003d\u003d(f\u003dn[this.cases[o]])?(n[this.cases[o]]\u003dr.length,r.push([this.cases[o],[o]])):r[f][1].push(o)}for(var s\u003dfunction(e){return\"number\"\u003d\u003d\u003dt.inputType.kind?Number(e):e},l\u003d0,c\u003dr;l\u003cc.length;l+\u003d1){var u\u003dc[l],f\u003du[0],h\u003du[1];1\u003d\u003d\u003dh.length?e.push(s(h[0])):e.push(h.map(s)),e.push(this.outputs[outputIndex$1].serialize())}return e.push(this.otherwise.serialize()),e};var dr\u003dfunction(t,e,r){this.type\u003dt,this.branches\u003de,this.otherwise\u003dr};dr.parse\u003dfunction(t,e){if(t.length\u003c4)return e.error(\"Expected at least 3 arguments, but found only \"+(t.length-1)+\".\");if(t.length%2!\u003d0)return e.error(\"Expected an odd number of arguments.\");var r;e.expectedType\u0026\u0026\"value\"!\u003d\u003de.expectedType.kind\u0026\u0026(r\u003de.expectedType);for(var n\u003d[],i\u003d1;i\u003ct.length-1;i+\u003d2){var a\u003de.parse(t[i],i,jt);if(!a)return null;var o\u003de.parse(t[i+1],i+1,r);if(!o)return null;n.push([a,o]),r\u003dr||o.type}var s\u003de.parse(t[t.length-1],t.length-1,r);return s?new dr(r,n,s):null},dr.prototype.evaluate\u003dfunction(t){for(var e\u003d0,r\u003dthis.branches;e\u003cr.length;e+\u003d1){var n\u003dr[e],i\u003dn[0],a\u003dn[1];if(i.evaluate(t))return a.evaluate(t)}return this.otherwise.evaluate(t)},dr.prototype.eachChild\u003dfunction(t){for(var e\u003d0,r\u003dthis.branches;e\u003cr.length;e+\u003d1){var n\u003dr[e],i\u003dn[0],a\u003dn[1];t(i),t(a)}t(this.otherwise)},dr.prototype.outputDefined\u003dfunction(){return this.branches.every((function(t){t[0];return t[1].outputDefined()}))\u0026\u0026this.otherwise.outputDefined()},dr.prototype.serialize\u003dfunction(){var t\u003d[\"case\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var mr\u003dfunction(t,e,r,n){this.type\u003dt,this.input\u003de,this.beginIndex\u003dr,this.endIndex\u003dn};function gr(t,e){return\"\u003d\u003d\"\u003d\u003d\u003dt||\"!\u003d\"\u003d\u003d\u003dt?\"boolean\"\u003d\u003d\u003de.kind||\"string\"\u003d\u003d\u003de.kind||\"number\"\u003d\u003d\u003de.kind||\"null\"\u003d\u003d\u003de.kind||\"value\"\u003d\u003d\u003de.kind:\"string\"\u003d\u003d\u003de.kind||\"number\"\u003d\u003d\u003de.kind||\"value\"\u003d\u003d\u003de.kind}function vr(t,e,r,n){return 0\u003d\u003d\u003dn.compare(e,r)}function yr(t,e,r){var n\u003d\"\u003d\u003d\"!\u003d\u003dt\u0026\u0026\"!\u003d\"!\u003d\u003dt;return function(){function i(t,e,r){this.type\u003djt,this.lhs\u003dt,this.rhs\u003de,this.collator\u003dr,this.hasUntypedArgument\u003d\"value\"\u003d\u003d\u003dt.type.kind||\"value\"\u003d\u003d\u003de.type.kind}return i.parse\u003dfunction(t,e){if(3!\u003d\u003dt.length\u0026\u00264!\u003d\u003dt.length)return e.error(\"Expected two or three arguments.\");var r\u003dt[0],a\u003de.parse(t[1],1,qt);if(!a)return null;if(!gr(r,a.type))return e.concat(1).error(\u0027\"\u0027+r+\"\\\" comparisons are not supported for type \u0027\"+Xt(a.type)+\"\u0027.\");var o\u003de.parse(t[2],2,qt);if(!o)return null;if(!gr(r,o.type))return e.concat(2).error(\u0027\"\u0027+r+\"\\\" comparisons are not supported for type \u0027\"+Xt(o.type)+\"\u0027.\");if(a.type.kind!\u003d\u003do.type.kind\u0026\u0026\"value\"!\u003d\u003da.type.kind\u0026\u0026\"value\"!\u003d\u003do.type.kind)return e.error(\"Cannot compare types \u0027\"+Xt(a.type)+\"\u0027 and \u0027\"+Xt(o.type)+\"\u0027.\");n\u0026\u0026(\"value\"\u003d\u003d\u003da.type.kind\u0026\u0026\"value\"!\u003d\u003do.type.kind?a\u003dnew he(o.type,[a]):\"value\"!\u003d\u003da.type.kind\u0026\u0026\"value\"\u003d\u003d\u003do.type.kind\u0026\u0026(o\u003dnew he(a.type,[o])));var s\u003dnull;if(4\u003d\u003d\u003dt.length){if(\"string\"!\u003d\u003da.type.kind\u0026\u0026\"string\"!\u003d\u003do.type.kind\u0026\u0026\"value\"!\u003d\u003da.type.kind\u0026\u0026\"value\"!\u003d\u003do.type.kind)return e.error(\"Cannot use collator to compare non-string types.\");if(!(s\u003de.parse(t[3],3,Ht)))return null}return new i(a,o,s)},i.prototype.evaluate\u003dfunction(i){var a\u003dthis.lhs.evaluate(i),o\u003dthis.rhs.evaluate(i);if(n\u0026\u0026this.hasUntypedArgument){var s\u003dse(a),l\u003dse(o);if(s.kind!\u003d\u003dl.kind||\"string\"!\u003d\u003ds.kind\u0026\u0026\"number\"!\u003d\u003ds.kind)throw new ue(\u0027Expected arguments for \"\u0027+t+\u0027\" to be (string, string) or (number, number), but found (\u0027+s.kind+\", \"+l.kind+\") instead.\")}if(this.collator\u0026\u0026!n\u0026\u0026this.hasUntypedArgument){var c\u003dse(a),u\u003dse(o);if(\"string\"!\u003d\u003dc.kind||\"string\"!\u003d\u003du.kind)return e(i,a,o)}return this.collator?r(i,a,o,this.collator.evaluate(i)):e(i,a,o)},i.prototype.eachChild\u003dfunction(t){t(this.lhs),t(this.rhs),this.collator\u0026\u0026t(this.collator)},i.prototype.outputDefined\u003dfunction(){return!0},i.prototype.serialize\u003dfunction(){var e\u003d[t];return this.eachChild((function(t){e.push(t.serialize())})),e},i}()}mr.parse\u003dfunction(t,e){if(t.length\u003c\u003d2||t.length\u003e\u003d5)return e.error(\"Expected 3 or 4 arguments, but found \"+(t.length-1)+\" instead.\");var r\u003de.parse(t[1],1,qt),n\u003de.parse(t[2],2,Bt);if(!r||!n)return null;if(!Kt(r.type,[Wt(qt),Nt,qt]))return e.error(\"Expected first argument to be of type array or string, but found \"+Xt(r.type)+\" instead\");if(4\u003d\u003d\u003dt.length){var i\u003de.parse(t[3],3,Bt);return i?new mr(r.type,r,n,i):null}return new mr(r.type,r,n)},mr.prototype.evaluate\u003dfunction(t){var e\u003dthis.input.evaluate(t),r\u003dthis.beginIndex.evaluate(t);if(!Qt(e,[\"string\",\"array\"]))throw new ue(\"Expected first argument to be of type array or string, but found \"+Xt(se(e))+\" instead.\");if(this.endIndex){var n\u003dthis.endIndex.evaluate(t);return e.slice(r,n)}return e.slice(r)},mr.prototype.eachChild\u003dfunction(t){t(this.input),t(this.beginIndex),this.endIndex\u0026\u0026t(this.endIndex)},mr.prototype.outputDefined\u003dfunction(){return!1},mr.prototype.serialize\u003dfunction(){if(null!\u003dthis.endIndex\u0026\u0026void 0!\u003d\u003dthis.endIndex){var t\u003dthis.endIndex.serialize();return[\"slice\",this.input.serialize(),this.beginIndex.serialize(),t]}return[\"slice\",this.input.serialize(),this.beginIndex.serialize()]};var xr\u003dyr(\"\u003d\u003d\",(function(t,e,r){return e\u003d\u003d\u003dr}),vr),br\u003dyr(\"!\u003d\",(function(t,e,r){return e!\u003d\u003dr}),(function(t,e,r,n){return!vr(0,e,r,n)})),_r\u003dyr(\"\u003c\",(function(t,e,r){return e\u003cr}),(function(t,e,r,n){return n.compare(e,r)\u003c0})),wr\u003dyr(\"\u003e\",(function(t,e,r){return e\u003er}),(function(t,e,r,n){return n.compare(e,r)\u003e0})),Tr\u003dyr(\"\u003c\u003d\",(function(t,e,r){return e\u003c\u003dr}),(function(t,e,r,n){return n.compare(e,r)\u003c\u003d0})),kr\u003dyr(\"\u003e\u003d\",(function(t,e,r){return e\u003e\u003dr}),(function(t,e,r,n){return n.compare(e,r)\u003e\u003d0})),Mr\u003dfunction(t,e,r,n,i){this.type\u003dNt,this.number\u003dt,this.locale\u003de,this.currency\u003dr,this.minFractionDigits\u003dn,this.maxFractionDigits\u003di};Mr.parse\u003dfunction(t,e){if(3!\u003d\u003dt.length)return e.error(\"Expected two arguments.\");var r\u003de.parse(t[1],1,Bt);if(!r)return null;var n\u003dt[2];if(\"object\"!\u003dtypeof n||Array.isArray(n))return e.error(\"NumberFormat options argument must be an object.\");var i\u003dnull;if(n.locale\u0026\u0026!(i\u003de.parse(n.locale,1,Nt)))return null;var a\u003dnull;if(n.currency\u0026\u0026!(a\u003de.parse(n.currency,1,Nt)))return null;var o\u003dnull;if(n[\"min-fraction-digits\"]\u0026\u0026!(o\u003de.parse(n[\"min-fraction-digits\"],1,Bt)))return null;var s\u003dnull;return n[\"max-fraction-digits\"]\u0026\u0026!(s\u003de.parse(n[\"max-fraction-digits\"],1,Bt))?null:new Mr(r,i,a,o,s)},Mr.prototype.evaluate\u003dfunction(t){return new Intl.NumberFormat(this.locale?this.locale.evaluate(t):[],{style:this.currency?\"currency\":\"decimal\",currency:this.currency?this.currency.evaluate(t):void 0,minimumFractionDigits:this.minFractionDigits?this.minFractionDigits.evaluate(t):void 0,maximumFractionDigits:this.maxFractionDigits?this.maxFractionDigits.evaluate(t):void 0}).format(this.number.evaluate(t))},Mr.prototype.eachChild\u003dfunction(t){t(this.number),this.locale\u0026\u0026t(this.locale),this.currency\u0026\u0026t(this.currency),this.minFractionDigits\u0026\u0026t(this.minFractionDigits),this.maxFractionDigits\u0026\u0026t(this.maxFractionDigits)},Mr.prototype.outputDefined\u003dfunction(){return!1},Mr.prototype.serialize\u003dfunction(){var t\u003d{};return this.locale\u0026\u0026(t.locale\u003dthis.locale.serialize()),this.currency\u0026\u0026(t.currency\u003dthis.currency.serialize()),this.minFractionDigits\u0026\u0026(t[\"min-fraction-digits\"]\u003dthis.minFractionDigits.serialize()),this.maxFractionDigits\u0026\u0026(t[\"max-fraction-digits\"]\u003dthis.maxFractionDigits.serialize()),[\"number-format\",this.number.serialize(),t]};var Ar\u003dfunction(t){this.type\u003dBt,this.input\u003dt};Ar.parse\u003dfunction(t,e){if(2!\u003d\u003dt.length)return e.error(\"Expected 1 argument, but found \"+(t.length-1)+\" instead.\");var r\u003de.parse(t[1],1);return r?\"array\"!\u003d\u003dr.type.kind\u0026\u0026\"string\"!\u003d\u003dr.type.kind\u0026\u0026\"value\"!\u003d\u003dr.type.kind?e.error(\"Expected argument of type string or array, but found \"+Xt(r.type)+\" instead.\"):new Ar(r):null},Ar.prototype.evaluate\u003dfunction(t){var e\u003dthis.input.evaluate(t);if(\"string\"\u003d\u003dtypeof e)return e.length;if(Array.isArray(e))return e.length;throw new ue(\"Expected value to be of type string or array, but found \"+Xt(se(e))+\" instead.\")},Ar.prototype.eachChild\u003dfunction(t){t(this.input)},Ar.prototype.outputDefined\u003dfunction(){return!1},Ar.prototype.serialize\u003dfunction(){var t\u003d[\"length\"];return this.eachChild((function(e){t.push(e.serialize())})),t};var Sr\u003d{\"\u003d\u003d\":xr,\"!\u003d\":br,\"\u003e\":wr,\"\u003c\":_r,\"\u003e\u003d\":kr,\"\u003c\u003d\":Tr,array:he,at:ur,boolean:he,case:dr,coalesce:lr,collator:be,format:pe,image:de,in:fr,\"index-of\":hr,interpolate:or,\"interpolate-hcl\":or,\"interpolate-lab\":or,length:Ar,let:cr,literal:ce,match:pr,number:he,\"number-format\":Mr,object:he,slice:mr,step:qe,string:he,\"to-boolean\":ge,\"to-color\":ge,\"to-number\":ge,\"to-string\":ge,var:je,within:Re};function Er(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003de[3];r\u003dr.evaluate(t),n\u003dn.evaluate(t),i\u003di.evaluate(t);var o\u003da?a.evaluate(t):1,s\u003dae(r,n,i,o);if(s)throw new ue(s);return new te(r/255*o,n/255*o,i/255*o,o)}function Lr(t,e){return t in e}function Cr(t,e){var r\u003de[t];return void 0\u003d\u003d\u003dr?null:r}function Pr(t){return{type:t}}function Ir(t){return{result:\"success\",value:t}}function Or(t){return{result:\"error\",value:t}}function zr(t){return\"data-driven\"\u003d\u003d\u003dt[\"property-type\"]||\"cross-faded-data-driven\"\u003d\u003d\u003dt[\"property-type\"]}function Dr(t){return!!t.expression\u0026\u0026t.expression.parameters.indexOf(\"zoom\")\u003e-1}function Rr(t){return!!t.expression\u0026\u0026t.expression.interpolated}function Fr(t){return t instanceof Number?\"number\":t instanceof String?\"string\":t instanceof Boolean?\"boolean\":Array.isArray(t)?\"array\":null\u003d\u003d\u003dt?\"null\":typeof t}function Br(t){return\"object\"\u003d\u003dtypeof t\u0026\u0026null!\u003d\u003dt\u0026\u0026!Array.isArray(t)}function Nr(t){return t}function jr(t,e,r){return void 0!\u003d\u003dt?t:void 0!\u003d\u003de?e:void 0!\u003d\u003dr?r:void 0}function Ur(t,e,r,n,i){return jr(typeof r\u003d\u003d\u003di?n[r]:void 0,t.default,e.default)}function Vr(t,e,r){if(\"number\"!\u003d\u003dFr(r))return jr(t.default,e.default);var n\u003dt.stops.length;if(1\u003d\u003d\u003dn)return t.stops[0][1];if(r\u003c\u003dt.stops[0][0])return t.stops[0][1];if(r\u003e\u003dt.stops[n-1][0])return t.stops[n-1][1];var i\u003dVe(t.stops.map((function(t){return t[0]})),r);return t.stops[i][1]}function qr(t,e,r){var n\u003dvoid 0!\u003d\u003dt.base?t.base:1;if(\"number\"!\u003d\u003dFr(r))return jr(t.default,e.default);var i\u003dt.stops.length;if(1\u003d\u003d\u003di)return t.stops[0][1];if(r\u003c\u003dt.stops[0][0])return t.stops[0][1];if(r\u003e\u003dt.stops[i-1][0])return t.stops[i-1][1];var a\u003dVe(t.stops.map((function(t){return t[0]})),r),o\u003dfunction(t,e,r,n){var i\u003dn-r,a\u003dt-r;return 0\u003d\u003d\u003di?0:1\u003d\u003d\u003de?a/i:(Math.pow(e,a)-1)/(Math.pow(e,i)-1)}(r,n,t.stops[a][0],t.stops[a+1][0]),s\u003dt.stops[a][1],l\u003dt.stops[a+1][1],c\u003dGe[e.type]||Nr;if(t.colorSpace\u0026\u0026\"rgb\"!\u003d\u003dt.colorSpace){var u\u003dar[t.colorSpace];c\u003dfunction(t,e){return u.reverse(u.interpolate(u.forward(t),u.forward(e),o))}}return\"function\"\u003d\u003dtypeof s.evaluate?{evaluate:function(){for(var t\u003d[],e\u003darguments.length;e--;)t[e]\u003darguments[e];var r\u003ds.evaluate.apply(void 0,t),n\u003dl.evaluate.apply(void 0,t);if(void 0!\u003d\u003dr\u0026\u0026void 0!\u003d\u003dn)return c(r,n,o)}}:c(s,l,o)}function Hr(t,e,r){return\"color\"\u003d\u003d\u003de.type?r\u003dte.parse(r):\"formatted\"\u003d\u003d\u003de.type?r\u003dne.fromString(r.toString()):\"resolvedImage\"\u003d\u003d\u003de.type?r\u003die.fromString(r.toString()):Fr(r)\u003d\u003d\u003de.type||\"enum\"\u003d\u003d\u003de.type\u0026\u0026e.values[r]||(r\u003dvoid 0),jr(r,t.default,e.default)}xe.register(Sr,{error:[{kind:\"error\"},[Nt],function(t,e){var r\u003de[0];throw new ue(r.evaluate(t))}],typeof:[Nt,[qt],function(t,e){return Xt(se(e[0].evaluate(t)))}],\"to-rgba\":[Wt(Bt,4),[Ut],function(t,e){return e[0].evaluate(t).toArray()}],rgb:[Ut,[Bt,Bt,Bt],Er],rgba:[Ut,[Bt,Bt,Bt,Bt],Er],has:{type:jt,overloads:[[[Nt],function(t,e){return Lr(e[0].evaluate(t),t.properties())}],[[Nt,Vt],function(t,e){var r\u003de[0],n\u003de[1];return Lr(r.evaluate(t),n.evaluate(t))}]]},get:{type:qt,overloads:[[[Nt],function(t,e){return Cr(e[0].evaluate(t),t.properties())}],[[Nt,Vt],function(t,e){var r\u003de[0],n\u003de[1];return Cr(r.evaluate(t),n.evaluate(t))}]]},\"feature-state\":[qt,[Nt],function(t,e){return Cr(e[0].evaluate(t),t.featureState||{})}],properties:[Vt,[],function(t){return t.properties()}],\"geometry-type\":[Nt,[],function(t){return t.geometryType()}],id:[qt,[],function(t){return t.id()}],zoom:[Bt,[],function(t){return t.globals.zoom}],\"heatmap-density\":[Bt,[],function(t){return t.globals.heatmapDensity||0}],\"line-progress\":[Bt,[],function(t){return t.globals.lineProgress||0}],accumulated:[qt,[],function(t){return void 0\u003d\u003d\u003dt.globals.accumulated?null:t.globals.accumulated}],\"+\":[Bt,Pr(Bt),function(t,e){for(var r\u003d0,n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){r+\u003di[n].evaluate(t)}return r}],\"*\":[Bt,Pr(Bt),function(t,e){for(var r\u003d1,n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){r*\u003di[n].evaluate(t)}return r}],\"-\":{type:Bt,overloads:[[[Bt,Bt],function(t,e){var r\u003de[0],n\u003de[1];return r.evaluate(t)-n.evaluate(t)}],[[Bt],function(t,e){return-e[0].evaluate(t)}]]},\"/\":[Bt,[Bt,Bt],function(t,e){var r\u003de[0],n\u003de[1];return r.evaluate(t)/n.evaluate(t)}],\"%\":[Bt,[Bt,Bt],function(t,e){var r\u003de[0],n\u003de[1];return r.evaluate(t)%n.evaluate(t)}],ln2:[Bt,[],function(){return Math.LN2}],pi:[Bt,[],function(){return Math.PI}],e:[Bt,[],function(){return Math.E}],\"^\":[Bt,[Bt,Bt],function(t,e){var r\u003de[0],n\u003de[1];return Math.pow(r.evaluate(t),n.evaluate(t))}],sqrt:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.sqrt(r.evaluate(t))}],log10:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.log(r.evaluate(t))/Math.LN10}],ln:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.log(r.evaluate(t))}],log2:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.log(r.evaluate(t))/Math.LN2}],sin:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.sin(r.evaluate(t))}],cos:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.cos(r.evaluate(t))}],tan:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.tan(r.evaluate(t))}],asin:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.asin(r.evaluate(t))}],acos:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.acos(r.evaluate(t))}],atan:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.atan(r.evaluate(t))}],min:[Bt,Pr(Bt),function(t,e){return Math.min.apply(Math,e.map((function(e){return e.evaluate(t)})))}],max:[Bt,Pr(Bt),function(t,e){return Math.max.apply(Math,e.map((function(e){return e.evaluate(t)})))}],abs:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.abs(r.evaluate(t))}],round:[Bt,[Bt],function(t,e){var r\u003de[0].evaluate(t);return r\u003c0?-Math.round(-r):Math.round(r)}],floor:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.floor(r.evaluate(t))}],ceil:[Bt,[Bt],function(t,e){var r\u003de[0];return Math.ceil(r.evaluate(t))}],\"filter-\u003d\u003d\":[jt,[Nt,qt],function(t,e){var r\u003de[0],n\u003de[1];return t.properties()[r.value]\u003d\u003d\u003dn.value}],\"filter-id-\u003d\u003d\":[jt,[qt],function(t,e){var r\u003de[0];return t.id()\u003d\u003d\u003dr.value}],\"filter-type-\u003d\u003d\":[jt,[Nt],function(t,e){var r\u003de[0];return t.geometryType()\u003d\u003d\u003dr.value}],\"filter-\u003c\":[jt,[Nt,qt],function(t,e){var r\u003de[0],n\u003de[1],i\u003dt.properties()[r.value],a\u003dn.value;return typeof i\u003d\u003dtypeof a\u0026\u0026i\u003ca}],\"filter-id-\u003c\":[jt,[qt],function(t,e){var r\u003de[0],n\u003dt.id(),i\u003dr.value;return typeof n\u003d\u003dtypeof i\u0026\u0026n\u003ci}],\"filter-\u003e\":[jt,[Nt,qt],function(t,e){var r\u003de[0],n\u003de[1],i\u003dt.properties()[r.value],a\u003dn.value;return typeof i\u003d\u003dtypeof a\u0026\u0026i\u003ea}],\"filter-id-\u003e\":[jt,[qt],function(t,e){var r\u003de[0],n\u003dt.id(),i\u003dr.value;return typeof n\u003d\u003dtypeof i\u0026\u0026n\u003ei}],\"filter-\u003c\u003d\":[jt,[Nt,qt],function(t,e){var r\u003de[0],n\u003de[1],i\u003dt.properties()[r.value],a\u003dn.value;return typeof i\u003d\u003dtypeof a\u0026\u0026i\u003c\u003da}],\"filter-id-\u003c\u003d\":[jt,[qt],function(t,e){var r\u003de[0],n\u003dt.id(),i\u003dr.value;return typeof n\u003d\u003dtypeof i\u0026\u0026n\u003c\u003di}],\"filter-\u003e\u003d\":[jt,[Nt,qt],function(t,e){var r\u003de[0],n\u003de[1],i\u003dt.properties()[r.value],a\u003dn.value;return typeof i\u003d\u003dtypeof a\u0026\u0026i\u003e\u003da}],\"filter-id-\u003e\u003d\":[jt,[qt],function(t,e){var r\u003de[0],n\u003dt.id(),i\u003dr.value;return typeof n\u003d\u003dtypeof i\u0026\u0026n\u003e\u003di}],\"filter-has\":[jt,[qt],function(t,e){return e[0].value in t.properties()}],\"filter-has-id\":[jt,[],function(t){return null!\u003d\u003dt.id()\u0026\u0026void 0!\u003d\u003dt.id()}],\"filter-type-in\":[jt,[Wt(Nt)],function(t,e){return e[0].value.indexOf(t.geometryType())\u003e\u003d0}],\"filter-id-in\":[jt,[Wt(qt)],function(t,e){return e[0].value.indexOf(t.id())\u003e\u003d0}],\"filter-in-small\":[jt,[Nt,Wt(qt)],function(t,e){var r\u003de[0];return e[1].value.indexOf(t.properties()[r.value])\u003e\u003d0}],\"filter-in-large\":[jt,[Nt,Wt(qt)],function(t,e){var r\u003de[0],n\u003de[1];return function(t,e,r,n){for(;r\u003c\u003dn;){var i\u003dr+n\u003e\u003e1;if(e[i]\u003d\u003d\u003dt)return!0;e[i]\u003et?n\u003di-1:r\u003di+1}return!1}(t.properties()[r.value],n.value,0,n.value.length-1)}],all:{type:jt,overloads:[[[jt,jt],function(t,e){var r\u003de[0],n\u003de[1];return r.evaluate(t)\u0026\u0026n.evaluate(t)}],[Pr(jt),function(t,e){for(var r\u003d0,n\u003de;r\u003cn.length;r+\u003d1){if(!n[r].evaluate(t))return!1}return!0}]]},any:{type:jt,overloads:[[[jt,jt],function(t,e){var r\u003de[0],n\u003de[1];return r.evaluate(t)||n.evaluate(t)}],[Pr(jt),function(t,e){for(var r\u003d0,n\u003de;r\u003cn.length;r+\u003d1){if(n[r].evaluate(t))return!0}return!1}]]},\"!\":[jt,[jt],function(t,e){return!e[0].evaluate(t)}],\"is-supported-script\":[jt,[Nt],function(t,e){var r\u003de[0],n\u003dt.globals\u0026\u0026t.globals.isSupportedScript;return!n||n(r.evaluate(t))}],upcase:[Nt,[Nt],function(t,e){return e[0].evaluate(t).toUpperCase()}],downcase:[Nt,[Nt],function(t,e){return e[0].evaluate(t).toLowerCase()}],concat:[Nt,Pr(qt),function(t,e){return e.map((function(e){return le(e.evaluate(t))})).join(\"\")}],\"resolved-locale\":[Nt,[Ht],function(t,e){return e[0].evaluate(t).resolvedLocale()}]});var Gr\u003dfunction(t,e){this.expression\u003dt,this._warningHistory\u003d{},this._evaluator\u003dnew ye,this._defaultValue\u003de?function(t){return\"color\"\u003d\u003d\u003dt.type\u0026\u0026Br(t.default)?new te(0,0,0,0):\"color\"\u003d\u003d\u003dt.type?te.parse(t.default)||null:void 0\u003d\u003d\u003dt.default?null:t.default}(e):null,this._enumValues\u003de\u0026\u0026\"enum\"\u003d\u003d\u003de.type?e.values:null};function Yr(t){return Array.isArray(t)\u0026\u0026t.length\u003e0\u0026\u0026\"string\"\u003d\u003dtypeof t[0]\u0026\u0026t[0]in Sr}function Wr(t,e){var r\u003dnew Ue(Sr,[],e?function(t){var e\u003d{color:Ut,string:Nt,number:Bt,enum:Nt,boolean:jt,formatted:Gt,resolvedImage:Yt};if(\"array\"\u003d\u003d\u003dt.type)return Wt(e[t.value]||qt,t.length);return e[t.type]}(e):void 0),n\u003dr.parse(t,void 0,void 0,void 0,e\u0026\u0026\"string\"\u003d\u003d\u003de.type?{typeAnnotation:\"coerce\"}:void 0);return n?Ir(new Gr(n,e)):Or(r.errors)}Gr.prototype.evaluateWithoutErrorHandling\u003dfunction(t,e,r,n,i,a){return this._evaluator.globals\u003dt,this._evaluator.feature\u003de,this._evaluator.featureState\u003dr,this._evaluator.canonical\u003dn,this._evaluator.availableImages\u003di||null,this._evaluator.formattedSection\u003da,this.expression.evaluate(this._evaluator)},Gr.prototype.evaluate\u003dfunction(t,e,r,n,i,a){this._evaluator.globals\u003dt,this._evaluator.feature\u003de||null,this._evaluator.featureState\u003dr||null,this._evaluator.canonical\u003dn,this._evaluator.availableImages\u003di||null,this._evaluator.formattedSection\u003da||null;try{var o\u003dthis.expression.evaluate(this._evaluator);if(null\u003d\u003do||\"number\"\u003d\u003dtypeof o\u0026\u0026o!\u003do)return this._defaultValue;if(this._enumValues\u0026\u0026!(o in this._enumValues))throw new ue(\"Expected value to be one of \"+Object.keys(this._enumValues).map((function(t){return JSON.stringify(t)})).join(\", \")+\", but found \"+JSON.stringify(o)+\" instead.\");return o}catch(t){return this._warningHistory[t.message]||(this._warningHistory[t.message]\u003d!0,\"undefined\"!\u003dtypeof console\u0026\u0026console.warn(t.message)),this._defaultValue}};var Xr\u003dfunction(t,e){this.kind\u003dt,this._styleExpression\u003de,this.isStateDependent\u003d\"constant\"!\u003d\u003dt\u0026\u0026!Be(e.expression)};Xr.prototype.evaluateWithoutErrorHandling\u003dfunction(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},Xr.prototype.evaluate\u003dfunction(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)};var Zr\u003dfunction(t,e,r,n){this.kind\u003dt,this.zoomStops\u003dr,this._styleExpression\u003de,this.isStateDependent\u003d\"camera\"!\u003d\u003dt\u0026\u0026!Be(e.expression),this.interpolationType\u003dn};function Jr(t,e){if(\"error\"\u003d\u003d\u003d(t\u003dWr(t,e)).result)return t;var r\u003dt.value.expression,n\u003dFe(r);if(!n\u0026\u0026!zr(e))return Or([new Dt(\"\",\"data expressions not supported\")]);var i\u003dNe(r,[\"zoom\"]);if(!i\u0026\u0026!Dr(e))return Or([new Dt(\"\",\"zoom expressions not supported\")]);var a\u003dfunction t(e){var r\u003dnull;if(e instanceof cr)r\u003dt(e.result);else if(e instanceof lr)for(var n\u003d0,i\u003de.args;n\u003ci.length;n+\u003d1){var a\u003di[n];if(r\u003dt(a))break}else(e instanceof qe||e instanceof or)\u0026\u0026e.input instanceof xe\u0026\u0026\"zoom\"\u003d\u003d\u003de.input.name\u0026\u0026(r\u003de);if(r instanceof Dt)return r;return e.eachChild((function(e){var n\u003dt(e);n instanceof Dt?r\u003dn:!r\u0026\u0026n?r\u003dnew Dt(\"\",\u0027\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.\u0027):r\u0026\u0026n\u0026\u0026r!\u003d\u003dn\u0026\u0026(r\u003dnew Dt(\"\",\u0027Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.\u0027))})),r}(r);if(!a\u0026\u0026!i)return Or([new Dt(\"\",\u0027\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.\u0027)]);if(a instanceof Dt)return Or([a]);if(a instanceof or\u0026\u0026!Rr(e))return Or([new Dt(\"\",\u0027\"interpolate\" expressions cannot be used with this property\u0027)]);if(!a)return Ir(new Xr(n?\"constant\":\"source\",t.value));var o\u003da instanceof or?a.interpolation:void 0;return Ir(new Zr(n?\"camera\":\"composite\",t.value,a.labels,o))}Zr.prototype.evaluateWithoutErrorHandling\u003dfunction(t,e,r,n,i,a){return this._styleExpression.evaluateWithoutErrorHandling(t,e,r,n,i,a)},Zr.prototype.evaluate\u003dfunction(t,e,r,n,i,a){return this._styleExpression.evaluate(t,e,r,n,i,a)},Zr.prototype.interpolationFactor\u003dfunction(t,e,r){return this.interpolationType?or.interpolationFactor(this.interpolationType,t,e,r):0};var Kr\u003dfunction(t,e){this._parameters\u003dt,this._specification\u003de,It(this,function t(e,r){var n,i,a,o\u003d\"color\"\u003d\u003d\u003dr.type,s\u003de.stops\u0026\u0026\"object\"\u003d\u003dtypeof e.stops[0][0],l\u003ds||void 0!\u003d\u003de.property,c\u003ds||!l,u\u003de.type||(Rr(r)?\"exponential\":\"interval\");if(o\u0026\u0026((e\u003dIt({},e)).stops\u0026\u0026(e.stops\u003de.stops.map((function(t){return[t[0],te.parse(t[1])]}))),e.default?e.default\u003dte.parse(e.default):e.default\u003dte.parse(r.default)),e.colorSpace\u0026\u0026\"rgb\"!\u003d\u003de.colorSpace\u0026\u0026!ar[e.colorSpace])throw new Error(\"Unknown color space: \"+e.colorSpace);if(\"exponential\"\u003d\u003d\u003du)n\u003dqr;else if(\"interval\"\u003d\u003d\u003du)n\u003dVr;else if(\"categorical\"\u003d\u003d\u003du){n\u003dUr,i\u003dObject.create(null);for(var f\u003d0,h\u003de.stops;f\u003ch.length;f+\u003d1){var p\u003dh[f];i[p[0]]\u003dp[1]}a\u003dtypeof e.stops[0][0]}else{if(\"identity\"!\u003d\u003du)throw new Error(\u0027Unknown function type \"\u0027+u+\u0027\"\u0027);n\u003dHr}if(s){for(var d\u003d{},m\u003d[],g\u003d0;g\u003ce.stops.length;g++){var v\u003de.stops[g],y\u003dv[0].zoom;void 0\u003d\u003d\u003dd[y]\u0026\u0026(d[y]\u003d{zoom:y,type:e.type,property:e.property,default:e.default,stops:[]},m.push(y)),d[y].stops.push([v[0].value,v[1]])}for(var x\u003d[],b\u003d0,_\u003dm;b\u003c_.length;b+\u003d1){var w\u003d_[b];x.push([d[w].zoom,t(d[w],r)])}var T\u003d{name:\"linear\"};return{kind:\"composite\",interpolationType:T,interpolationFactor:or.interpolationFactor.bind(void 0,T),zoomStops:x.map((function(t){return t[0]})),evaluate:function(t,n){var i\u003dt.zoom;return qr({stops:x,base:e.base},r,i).evaluate(i,n)}}}if(c){var k\u003d\"exponential\"\u003d\u003d\u003du?{name:\"exponential\",base:void 0!\u003d\u003de.base?e.base:1}:null;return{kind:\"camera\",interpolationType:k,interpolationFactor:or.interpolationFactor.bind(void 0,k),zoomStops:e.stops.map((function(t){return t[0]})),evaluate:function(t){var o\u003dt.zoom;return n(e,r,o,i,a)}}}return{kind:\"source\",evaluate:function(t,o){var s\u003do\u0026\u0026o.properties?o.properties[e.property]:void 0;return void 0\u003d\u003d\u003ds?jr(e.default,r.default):n(e,r,s,i,a)}}}(this._parameters,this._specification))};function Qr(t){var e\u003dt.key,r\u003dt.value,n\u003dt.valueSpec||{},i\u003dt.objectElementValidators||{},a\u003dt.style,o\u003dt.styleSpec,s\u003d[],l\u003dFr(r);if(\"object\"!\u003d\u003dl)return[new Ct(e,r,\"object expected, \"+l+\" found\")];for(var c in r){var u\u003dc.split(\".\")[0],f\u003dn[u]||n[\"*\"],h\u003dvoid 0;if(i[u])h\u003di[u];else if(n[u])h\u003dkn;else if(i[\"*\"])h\u003di[\"*\"];else{if(!n[\"*\"]){s.push(new Ct(e,r[c],\u0027unknown property \"\u0027+c+\u0027\"\u0027));continue}h\u003dkn}s\u003ds.concat(h({key:(e?e+\".\":e)+c,value:r[c],valueSpec:f,style:a,styleSpec:o,object:r,objectKey:c},r))}for(var p in n)i[p]||n[p].required\u0026\u0026void 0\u003d\u003d\u003dn[p].default\u0026\u0026void 0\u003d\u003d\u003dr[p]\u0026\u0026s.push(new Ct(e,r,\u0027missing required property \"\u0027+p+\u0027\"\u0027));return s}function $r(t){var e\u003dt.value,r\u003dt.valueSpec,n\u003dt.style,i\u003dt.styleSpec,a\u003dt.key,o\u003dt.arrayElementValidator||kn;if(\"array\"!\u003d\u003dFr(e))return[new Ct(a,e,\"array expected, \"+Fr(e)+\" found\")];if(r.length\u0026\u0026e.length!\u003d\u003dr.length)return[new Ct(a,e,\"array length \"+r.length+\" expected, length \"+e.length+\" found\")];if(r[\"min-length\"]\u0026\u0026e.length\u003cr[\"min-length\"])return[new Ct(a,e,\"array length at least \"+r[\"min-length\"]+\" expected, length \"+e.length+\" found\")];var s\u003d{type:r.value,values:r.values};i.$version\u003c7\u0026\u0026(s.function\u003dr.function),\"object\"\u003d\u003d\u003dFr(r.value)\u0026\u0026(s\u003dr.value);for(var l\u003d[],c\u003d0;c\u003ce.length;c++)l\u003dl.concat(o({array:e,arrayIndex:c,value:e[c],valueSpec:s,style:n,styleSpec:i,key:a+\"[\"+c+\"]\"}));return l}function tn(t){var e\u003dt.key,r\u003dt.value,n\u003dt.valueSpec,i\u003dFr(r);return\"number\"\u003d\u003d\u003di\u0026\u0026r!\u003dr\u0026\u0026(i\u003d\"NaN\"),\"number\"!\u003d\u003di?[new Ct(e,r,\"number expected, \"+i+\" found\")]:\"minimum\"in n\u0026\u0026r\u003cn.minimum?[new Ct(e,r,r+\" is less than the minimum value \"+n.minimum)]:\"maximum\"in n\u0026\u0026r\u003en.maximum?[new Ct(e,r,r+\" is greater than the maximum value \"+n.maximum)]:[]}function en(t){var e,r,n,i\u003dt.valueSpec,a\u003dOt(t.value.type),o\u003d{},s\u003d\"categorical\"!\u003d\u003da\u0026\u0026void 0\u003d\u003d\u003dt.value.property,l\u003d!s,c\u003d\"array\"\u003d\u003d\u003dFr(t.value.stops)\u0026\u0026\"array\"\u003d\u003d\u003dFr(t.value.stops[0])\u0026\u0026\"object\"\u003d\u003d\u003dFr(t.value.stops[0][0]),u\u003dQr({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:function(t){if(\"identity\"\u003d\u003d\u003da)return[new Ct(t.key,t.value,\u0027identity function may not have a \"stops\" property\u0027)];var e\u003d[],r\u003dt.value;e\u003de.concat($r({key:t.key,value:r,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:f})),\"array\"\u003d\u003d\u003dFr(r)\u0026\u00260\u003d\u003d\u003dr.length\u0026\u0026e.push(new Ct(t.key,r,\"array must have at least one stop\"));return e},default:function(t){return kn({key:t.key,value:t.value,valueSpec:i,style:t.style,styleSpec:t.styleSpec})}}});return\"identity\"\u003d\u003d\u003da\u0026\u0026s\u0026\u0026u.push(new Ct(t.key,t.value,\u0027missing required property \"property\"\u0027)),\"identity\"\u003d\u003d\u003da||t.value.stops||u.push(new Ct(t.key,t.value,\u0027missing required property \"stops\"\u0027)),\"exponential\"\u003d\u003d\u003da\u0026\u0026t.valueSpec.expression\u0026\u0026!Rr(t.valueSpec)\u0026\u0026u.push(new Ct(t.key,t.value,\"exponential functions not supported\")),t.styleSpec.$version\u003e\u003d8\u0026\u0026(l\u0026\u0026!zr(t.valueSpec)?u.push(new Ct(t.key,t.value,\"property functions not supported\")):s\u0026\u0026!Dr(t.valueSpec)\u0026\u0026u.push(new Ct(t.key,t.value,\"zoom functions not supported\"))),\"categorical\"!\u003d\u003da\u0026\u0026!c||void 0!\u003d\u003dt.value.property||u.push(new Ct(t.key,t.value,\u0027\"property\" property is required\u0027)),u;function f(t){var e\u003d[],a\u003dt.value,s\u003dt.key;if(\"array\"!\u003d\u003dFr(a))return[new Ct(s,a,\"array expected, \"+Fr(a)+\" found\")];if(2!\u003d\u003da.length)return[new Ct(s,a,\"array length 2 expected, length \"+a.length+\" found\")];if(c){if(\"object\"!\u003d\u003dFr(a[0]))return[new Ct(s,a,\"object expected, \"+Fr(a[0])+\" found\")];if(void 0\u003d\u003d\u003da[0].zoom)return[new Ct(s,a,\"object stop key must have zoom\")];if(void 0\u003d\u003d\u003da[0].value)return[new Ct(s,a,\"object stop key must have value\")];if(n\u0026\u0026n\u003eOt(a[0].zoom))return[new Ct(s,a[0].zoom,\"stop zoom values must appear in ascending order\")];Ot(a[0].zoom)!\u003d\u003dn\u0026\u0026(n\u003dOt(a[0].zoom),r\u003dvoid 0,o\u003d{}),e\u003de.concat(Qr({key:s+\"[0]\",value:a[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:tn,value:h}}))}else e\u003de.concat(h({key:s+\"[0]\",value:a[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec},a));return Yr(zt(a[1]))?e.concat([new Ct(s+\"[1]\",a[1],\"expressions are not allowed in function stops.\")]):e.concat(kn({key:s+\"[1]\",value:a[1],valueSpec:i,style:t.style,styleSpec:t.styleSpec}))}function h(t,n){var s\u003dFr(t.value),l\u003dOt(t.value),c\u003dnull!\u003d\u003dt.value?t.value:n;if(e){if(s!\u003d\u003de)return[new Ct(t.key,c,s+\" stop domain type must match previous stop domain type \"+e)]}else e\u003ds;if(\"number\"!\u003d\u003ds\u0026\u0026\"string\"!\u003d\u003ds\u0026\u0026\"boolean\"!\u003d\u003ds)return[new Ct(t.key,c,\"stop domain value must be a number, string, or boolean\")];if(\"number\"!\u003d\u003ds\u0026\u0026\"categorical\"!\u003d\u003da){var u\u003d\"number expected, \"+s+\" found\";return zr(i)\u0026\u0026void 0\u003d\u003d\u003da\u0026\u0026(u+\u003d\u0027\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.\u0027),[new Ct(t.key,c,u)]}return\"categorical\"!\u003d\u003da||\"number\"!\u003d\u003ds||isFinite(l)\u0026\u0026Math.floor(l)\u003d\u003d\u003dl?\"categorical\"!\u003d\u003da\u0026\u0026\"number\"\u003d\u003d\u003ds\u0026\u0026void 0!\u003d\u003dr\u0026\u0026l\u003cr?[new Ct(t.key,c,\"stop domain values must appear in ascending order\")]:(r\u003dl,\"categorical\"\u003d\u003d\u003da\u0026\u0026l in o?[new Ct(t.key,c,\"stop domain values must be unique\")]:(o[l]\u003d!0,[])):[new Ct(t.key,c,\"integer expected, found \"+l)]}}function rn(t){var e\u003d(\"property\"\u003d\u003d\u003dt.expressionContext?Jr:Wr)(zt(t.value),t.valueSpec);if(\"error\"\u003d\u003d\u003de.result)return e.value.map((function(e){return new Ct(\"\"+t.key+e.key,t.value,e.message)}));var r\u003de.value.expression||e.value._styleExpression.expression;if(\"property\"\u003d\u003d\u003dt.expressionContext\u0026\u0026\"text-font\"\u003d\u003d\u003dt.propertyKey\u0026\u0026!r.outputDefined())return[new Ct(t.key,t.value,\u0027Invalid data expression for \"\u0027+t.propertyKey+\u0027\". Output values must be contained as literals within the expression.\u0027)];if(\"property\"\u003d\u003d\u003dt.expressionContext\u0026\u0026\"layout\"\u003d\u003d\u003dt.propertyType\u0026\u0026!Be(r))return[new Ct(t.key,t.value,\u0027\"feature-state\" data expressions are not supported with layout properties.\u0027)];if(\"filter\"\u003d\u003d\u003dt.expressionContext\u0026\u0026!Be(r))return[new Ct(t.key,t.value,\u0027\"feature-state\" data expressions are not supported with filters.\u0027)];if(t.expressionContext\u0026\u00260\u003d\u003d\u003dt.expressionContext.indexOf(\"cluster\")){if(!Ne(r,[\"zoom\",\"feature-state\"]))return[new Ct(t.key,t.value,\u0027\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.\u0027)];if(\"cluster-initial\"\u003d\u003d\u003dt.expressionContext\u0026\u0026!Fe(r))return[new Ct(t.key,t.value,\"Feature data expressions are not supported with initial expression part of cluster properties.\")]}return[]}function nn(t){var e\u003dt.key,r\u003dt.value,n\u003dt.valueSpec,i\u003d[];return Array.isArray(n.values)?-1\u003d\u003d\u003dn.values.indexOf(Ot(r))\u0026\u0026i.push(new Ct(e,r,\"expected one of [\"+n.values.join(\", \")+\"], \"+JSON.stringify(r)+\" found\")):-1\u003d\u003d\u003dObject.keys(n.values).indexOf(Ot(r))\u0026\u0026i.push(new Ct(e,r,\"expected one of [\"+Object.keys(n.values).join(\", \")+\"], \"+JSON.stringify(r)+\" found\")),i}function an(t){if(!0\u003d\u003d\u003dt||!1\u003d\u003d\u003dt)return!0;if(!Array.isArray(t)||0\u003d\u003d\u003dt.length)return!1;switch(t[0]){case\"has\":return t.length\u003e\u003d2\u0026\u0026\"$id\"!\u003d\u003dt[1]\u0026\u0026\"$type\"!\u003d\u003dt[1];case\"in\":return t.length\u003e\u003d3\u0026\u0026(\"string\"!\u003dtypeof t[1]||Array.isArray(t[2]));case\"!in\":case\"!has\":case\"none\":return!1;case\"\u003d\u003d\":case\"!\u003d\":case\"\u003e\":case\"\u003e\u003d\":case\"\u003c\":case\"\u003c\u003d\":return 3!\u003d\u003dt.length||Array.isArray(t[1])||Array.isArray(t[2]);case\"any\":case\"all\":for(var e\u003d0,r\u003dt.slice(1);e\u003cr.length;e+\u003d1){var n\u003dr[e];if(!an(n)\u0026\u0026\"boolean\"!\u003dtypeof n)return!1}return!0;default:return!0}}Kr.deserialize\u003dfunction(t){return new Kr(t._parameters,t._specification)},Kr.serialize\u003dfunction(t){return{_parameters:t._parameters,_specification:t._specification}};var on\u003d{type:\"boolean\",default:!1,transition:!1,\"property-type\":\"data-driven\",expression:{interpolated:!1,parameters:[\"zoom\",\"feature\"]}};function sn(t){if(null\u003d\u003dt)return{filter:function(){return!0},needGeometry:!1};an(t)||(t\u003dcn(t));var e\u003dWr(t,on);if(\"error\"\u003d\u003d\u003de.result)throw new Error(e.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return{filter:function(t,r,n){return e.value.evaluate(t,r,{},n)},needGeometry:function t(e){if(!Array.isArray(e))return!1;if(\"within\"\u003d\u003d\u003de[0])return!0;for(var r\u003d1;r\u003ce.length;r++)if(t(e[r]))return!0;return!1}(t)}}function ln(t,e){return t\u003ce?-1:t\u003ee?1:0}function cn(t){if(!t)return!0;var e,r\u003dt[0];return t.length\u003c\u003d1?\"any\"!\u003d\u003dr:\"\u003d\u003d\"\u003d\u003d\u003dr?un(t[1],t[2],\"\u003d\u003d\"):\"!\u003d\"\u003d\u003d\u003dr?pn(un(t[1],t[2],\"\u003d\u003d\")):\"\u003c\"\u003d\u003d\u003dr||\"\u003e\"\u003d\u003d\u003dr||\"\u003c\u003d\"\u003d\u003d\u003dr||\"\u003e\u003d\"\u003d\u003d\u003dr?un(t[1],t[2],r):\"any\"\u003d\u003d\u003dr?(e\u003dt.slice(1),[\"any\"].concat(e.map(cn))):\"all\"\u003d\u003d\u003dr?[\"all\"].concat(t.slice(1).map(cn)):\"none\"\u003d\u003d\u003dr?[\"all\"].concat(t.slice(1).map(cn).map(pn)):\"in\"\u003d\u003d\u003dr?fn(t[1],t.slice(2)):\"!in\"\u003d\u003d\u003dr?pn(fn(t[1],t.slice(2))):\"has\"\u003d\u003d\u003dr?hn(t[1]):\"!has\"\u003d\u003d\u003dr?pn(hn(t[1])):\"within\"!\u003d\u003dr||t}function un(t,e,r){switch(t){case\"$type\":return[\"filter-type-\"+r,e];case\"$id\":return[\"filter-id-\"+r,e];default:return[\"filter-\"+r,t,e]}}function fn(t,e){if(0\u003d\u003d\u003de.length)return!1;switch(t){case\"$type\":return[\"filter-type-in\",[\"literal\",e]];case\"$id\":return[\"filter-id-in\",[\"literal\",e]];default:return e.length\u003e200\u0026\u0026!e.some((function(t){return typeof t!\u003dtypeof e[0]}))?[\"filter-in-large\",t,[\"literal\",e.sort(ln)]]:[\"filter-in-small\",t,[\"literal\",e]]}}function hn(t){switch(t){case\"$type\":return!0;case\"$id\":return[\"filter-has-id\"];default:return[\"filter-has\",t]}}function pn(t){return[\"!\",t]}function dn(t){return an(zt(t.value))?rn(It({},t,{expressionContext:\"filter\",valueSpec:{value:\"boolean\"}})):function t(e){var r\u003de.value,n\u003de.key;if(\"array\"!\u003d\u003dFr(r))return[new Ct(n,r,\"array expected, \"+Fr(r)+\" found\")];var i,a\u003de.styleSpec,o\u003d[];if(r.length\u003c1)return[new Ct(n,r,\"filter array must have at least 1 element\")];switch(o\u003do.concat(nn({key:n+\"[0]\",value:r[0],valueSpec:a.filter_operator,style:e.style,styleSpec:e.styleSpec})),Ot(r[0])){case\"\u003c\":case\"\u003c\u003d\":case\"\u003e\":case\"\u003e\u003d\":r.length\u003e\u003d2\u0026\u0026\"$type\"\u003d\u003d\u003dOt(r[1])\u0026\u0026o.push(new Ct(n,r,\u0027\"$type\" cannot be use with operator \"\u0027+r[0]+\u0027\"\u0027));case\"\u003d\u003d\":case\"!\u003d\":3!\u003d\u003dr.length\u0026\u0026o.push(new Ct(n,r,\u0027filter array for operator \"\u0027+r[0]+\u0027\" must have 3 elements\u0027));case\"in\":case\"!in\":r.length\u003e\u003d2\u0026\u0026\"string\"!\u003d\u003d(i\u003dFr(r[1]))\u0026\u0026o.push(new Ct(n+\"[1]\",r[1],\"string expected, \"+i+\" found\"));for(var s\u003d2;s\u003cr.length;s++)i\u003dFr(r[s]),\"$type\"\u003d\u003d\u003dOt(r[1])?o\u003do.concat(nn({key:n+\"[\"+s+\"]\",value:r[s],valueSpec:a.geometry_type,style:e.style,styleSpec:e.styleSpec})):\"string\"!\u003d\u003di\u0026\u0026\"number\"!\u003d\u003di\u0026\u0026\"boolean\"!\u003d\u003di\u0026\u0026o.push(new Ct(n+\"[\"+s+\"]\",r[s],\"string, number, or boolean expected, \"+i+\" found\"));break;case\"any\":case\"all\":case\"none\":for(var l\u003d1;l\u003cr.length;l++)o\u003do.concat(t({key:n+\"[\"+l+\"]\",value:r[l],style:e.style,styleSpec:e.styleSpec}));break;case\"has\":case\"!has\":i\u003dFr(r[1]),2!\u003d\u003dr.length?o.push(new Ct(n,r,\u0027filter array for \"\u0027+r[0]+\u0027\" operator must have 2 elements\u0027)):\"string\"!\u003d\u003di\u0026\u0026o.push(new Ct(n+\"[1]\",r[1],\"string expected, \"+i+\" found\"));break;case\"within\":i\u003dFr(r[1]),2!\u003d\u003dr.length?o.push(new Ct(n,r,\u0027filter array for \"\u0027+r[0]+\u0027\" operator must have 2 elements\u0027)):\"object\"!\u003d\u003di\u0026\u0026o.push(new Ct(n+\"[1]\",r[1],\"object expected, \"+i+\" found\"))}return o}(t)}function mn(t,e){var r\u003dt.key,n\u003dt.style,i\u003dt.styleSpec,a\u003dt.value,o\u003dt.objectKey,s\u003di[e+\"_\"+t.layerType];if(!s)return[];var l\u003do.match(/^(.*)-transition$/);if(\"paint\"\u003d\u003d\u003de\u0026\u0026l\u0026\u0026s[l[1]]\u0026\u0026s[l[1]].transition)return kn({key:r,value:a,valueSpec:i.transition,style:n,styleSpec:i});var c,u\u003dt.valueSpec||s[o];if(!u)return[new Ct(r,a,\u0027unknown property \"\u0027+o+\u0027\"\u0027)];if(\"string\"\u003d\u003d\u003dFr(a)\u0026\u0026zr(u)\u0026\u0026!u.tokens\u0026\u0026(c\u003d/^{([^}]+)}$/.exec(a)))return[new Ct(r,a,\u0027\"\u0027+o+\u0027\" does not support interpolation syntax\\nUse an identity property function instead: `{ \"type\": \"identity\", \"property\": \u0027+JSON.stringify(c[1])+\" }`.\")];var f\u003d[];return\"symbol\"\u003d\u003d\u003dt.layerType\u0026\u0026(\"text-field\"\u003d\u003d\u003do\u0026\u0026n\u0026\u0026!n.glyphs\u0026\u0026f.push(new Ct(r,a,\u0027use of \"text-field\" requires a style \"glyphs\" property\u0027)),\"text-font\"\u003d\u003d\u003do\u0026\u0026Br(zt(a))\u0026\u0026\"identity\"\u003d\u003d\u003dOt(a.type)\u0026\u0026f.push(new Ct(r,a,\u0027\"text-font\" does not support identity functions\u0027))),f.concat(kn({key:t.key,value:a,valueSpec:u,style:n,styleSpec:i,expressionContext:\"property\",propertyType:e,propertyKey:o}))}function gn(t){return mn(t,\"paint\")}function vn(t){return mn(t,\"layout\")}function yn(t){var e\u003d[],r\u003dt.value,n\u003dt.key,i\u003dt.style,a\u003dt.styleSpec;r.type||r.ref||e.push(new Ct(n,r,\u0027either \"type\" or \"ref\" is required\u0027));var o,s\u003dOt(r.type),l\u003dOt(r.ref);if(r.id)for(var c\u003dOt(r.id),u\u003d0;u\u003ct.arrayIndex;u++){var f\u003di.layers[u];Ot(f.id)\u003d\u003d\u003dc\u0026\u0026e.push(new Ct(n,r.id,\u0027duplicate layer id \"\u0027+r.id+\u0027\", previously used at line \u0027+f.id.__line__))}if(\"ref\"in r)[\"type\",\"source\",\"source-layer\",\"filter\",\"layout\"].forEach((function(t){t in r\u0026\u0026e.push(new Ct(n,r[t],\u0027\"\u0027+t+\u0027\" is prohibited for ref layers\u0027))})),i.layers.forEach((function(t){Ot(t.id)\u003d\u003d\u003dl\u0026\u0026(o\u003dt)})),o?o.ref?e.push(new Ct(n,r.ref,\"ref cannot reference another ref layer\")):s\u003dOt(o.type):e.push(new Ct(n,r.ref,\u0027ref layer \"\u0027+l+\u0027\" not found\u0027));else if(\"background\"!\u003d\u003ds)if(r.source){var h\u003di.sources\u0026\u0026i.sources[r.source],p\u003dh\u0026\u0026Ot(h.type);h?\"vector\"\u003d\u003d\u003dp\u0026\u0026\"raster\"\u003d\u003d\u003ds?e.push(new Ct(n,r.source,\u0027layer \"\u0027+r.id+\u0027\" requires a raster source\u0027)):\"raster\"\u003d\u003d\u003dp\u0026\u0026\"raster\"!\u003d\u003ds?e.push(new Ct(n,r.source,\u0027layer \"\u0027+r.id+\u0027\" requires a vector source\u0027)):\"vector\"!\u003d\u003dp||r[\"source-layer\"]?\"raster-dem\"\u003d\u003d\u003dp\u0026\u0026\"hillshade\"!\u003d\u003ds?e.push(new Ct(n,r.source,\"raster-dem source can only be used with layer type \u0027hillshade\u0027.\")):\"line\"!\u003d\u003ds||!r.paint||!r.paint[\"line-gradient\"]||\"geojson\"\u003d\u003d\u003dp\u0026\u0026h.lineMetrics||e.push(new Ct(n,r,\u0027layer \"\u0027+r.id+\u0027\" specifies a line-gradient, which requires a GeoJSON source with `lineMetrics` enabled.\u0027)):e.push(new Ct(n,r,\u0027layer \"\u0027+r.id+\u0027\" must specify a \"source-layer\"\u0027)):e.push(new Ct(n,r.source,\u0027source \"\u0027+r.source+\u0027\" not found\u0027))}else e.push(new Ct(n,r,\u0027missing required property \"source\"\u0027));return e\u003de.concat(Qr({key:n,value:r,valueSpec:a.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(){return[]},type:function(){return kn({key:n+\".type\",value:r.type,valueSpec:a.layer.type,style:t.style,styleSpec:t.styleSpec,object:r,objectKey:\"type\"})},filter:dn,layout:function(t){return Qr({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return vn(It({layerType:s},t))}}})},paint:function(t){return Qr({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{\"*\":function(t){return gn(It({layerType:s},t))}}})}}}))}function xn(t){var e\u003dt.value,r\u003dt.key,n\u003dFr(e);return\"string\"!\u003d\u003dn?[new Ct(r,e,\"string expected, \"+n+\" found\")]:[]}var bn\u003d{promoteId:function(t){var e\u003dt.key,r\u003dt.value;if(\"string\"\u003d\u003d\u003dFr(r))return xn({key:e,value:r});var n\u003d[];for(var i in r)n.push.apply(n,xn({key:e+\".\"+i,value:r[i]}));return n}};function _n(t){var e\u003dt.value,r\u003dt.key,n\u003dt.styleSpec,i\u003dt.style;if(!e.type)return[new Ct(r,e,\u0027\"type\" is required\u0027)];var a,o\u003dOt(e.type);switch(o){case\"vector\":case\"raster\":case\"raster-dem\":return a\u003dQr({key:r,value:e,valueSpec:n[\"source_\"+o.replace(\"-\",\"_\")],style:t.style,styleSpec:n,objectElementValidators:bn});case\"geojson\":if(a\u003dQr({key:r,value:e,valueSpec:n.source_geojson,style:i,styleSpec:n,objectElementValidators:bn}),e.cluster)for(var s in e.clusterProperties){var l\u003de.clusterProperties[s],c\u003dl[0],u\u003dl[1],f\u003d\"string\"\u003d\u003dtypeof c?[c,[\"accumulated\"],[\"get\",s]]:c;a.push.apply(a,rn({key:r+\".\"+s+\".map\",value:u,expressionContext:\"cluster-map\"})),a.push.apply(a,rn({key:r+\".\"+s+\".reduce\",value:f,expressionContext:\"cluster-reduce\"}))}return a;case\"video\":return Qr({key:r,value:e,valueSpec:n.source_video,style:i,styleSpec:n});case\"image\":return Qr({key:r,value:e,valueSpec:n.source_image,style:i,styleSpec:n});case\"canvas\":return[new Ct(r,null,\"Please use runtime APIs to add canvas sources, rather than including them in stylesheets.\",\"source.canvas\")];default:return nn({key:r+\".type\",value:e.type,valueSpec:{values:[\"vector\",\"raster\",\"raster-dem\",\"geojson\",\"video\",\"image\"]},style:i,styleSpec:n})}}function wn(t){var e\u003dt.value,r\u003dt.styleSpec,n\u003dr.light,i\u003dt.style,a\u003d[],o\u003dFr(e);if(void 0\u003d\u003d\u003de)return a;if(\"object\"!\u003d\u003do)return a\u003da.concat([new Ct(\"light\",e,\"object expected, \"+o+\" found\")]);for(var s in e){var l\u003ds.match(/^(.*)-transition$/);a\u003dl\u0026\u0026n[l[1]]\u0026\u0026n[l[1]].transition?a.concat(kn({key:s,value:e[s],valueSpec:r.transition,style:i,styleSpec:r})):n[s]?a.concat(kn({key:s,value:e[s],valueSpec:n[s],style:i,styleSpec:r})):a.concat([new Ct(s,e[s],\u0027unknown property \"\u0027+s+\u0027\"\u0027)])}return a}var Tn\u003d{\"*\":function(){return[]},array:$r,boolean:function(t){var e\u003dt.value,r\u003dt.key,n\u003dFr(e);return\"boolean\"!\u003d\u003dn?[new Ct(r,e,\"boolean expected, \"+n+\" found\")]:[]},number:tn,color:function(t){var e\u003dt.key,r\u003dt.value,n\u003dFr(r);return\"string\"!\u003d\u003dn?[new Ct(e,r,\"color expected, \"+n+\" found\")]:null\u003d\u003d\u003d$t(r)?[new Ct(e,r,\u0027color expected, \"\u0027+r+\u0027\" found\u0027)]:[]},constants:Pt,enum:nn,filter:dn,function:en,layer:yn,object:Qr,source:_n,light:wn,string:xn,formatted:function(t){return 0\u003d\u003d\u003dxn(t).length?[]:rn(t)},resolvedImage:function(t){return 0\u003d\u003d\u003dxn(t).length?[]:rn(t)}};function kn(t){var e\u003dt.value,r\u003dt.valueSpec,n\u003dt.styleSpec;return r.expression\u0026\u0026Br(Ot(e))?en(t):r.expression\u0026\u0026Yr(zt(e))?rn(t):r.type\u0026\u0026Tn[r.type]?Tn[r.type](t):Qr(It({},t,{valueSpec:r.type?n[r.type]:r}))}function Mn(t){var e\u003dt.value,r\u003dt.key,n\u003dxn(t);return n.length||(-1\u003d\u003d\u003de.indexOf(\"{fontstack}\")\u0026\u0026n.push(new Ct(r,e,\u0027\"glyphs\" url must include a \"{fontstack}\" token\u0027)),-1\u003d\u003d\u003de.indexOf(\"{range}\")\u0026\u0026n.push(new Ct(r,e,\u0027\"glyphs\" url must include a \"{range}\" token\u0027))),n}function An(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003dLt);var r\u003d[];return r\u003dr.concat(kn({key:\"\",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:Mn,\"*\":function(){return[]}}})),t.constants\u0026\u0026(r\u003dr.concat(Pt({key:\"constants\",value:t.constants,style:t,styleSpec:e}))),Sn(r)}function Sn(t){return[].concat(t).sort((function(t,e){return t.line-e.line}))}function En(t){return function(){for(var e\u003d[],r\u003darguments.length;r--;)e[r]\u003darguments[r];return Sn(t.apply(this,e))}}An.source\u003dEn(_n),An.light\u003dEn(wn),An.layer\u003dEn(yn),An.filter\u003dEn(dn),An.paintProperty\u003dEn(gn),An.layoutProperty\u003dEn(vn);var Ln\u003dAn,Cn\u003dLn.light,Pn\u003dLn.paintProperty,In\u003dLn.layoutProperty;function On(t,e){var r\u003d!1;if(e\u0026\u0026e.length)for(var n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){var a\u003di[n];t.fire(new St(new Error(a.message))),r\u003d!0}return r}var zn\u003dDn;function Dn(t,e,r){var n\u003dthis.cells\u003d[];if(t instanceof ArrayBuffer){this.arrayBuffer\u003dt;var i\u003dnew Int32Array(this.arrayBuffer);t\u003di[0],e\u003di[1],r\u003di[2],this.d\u003de+2*r;for(var a\u003d0;a\u003cthis.d*this.d;a++){var o\u003di[3+a],s\u003di[3+a+1];n.push(o\u003d\u003d\u003ds?null:i.subarray(o,s))}var l\u003di[3+n.length],c\u003di[3+n.length+1];this.keys\u003di.subarray(l,c),this.bboxes\u003di.subarray(c),this.insert\u003dthis._insertReadonly}else{this.d\u003de+2*r;for(var u\u003d0;u\u003cthis.d*this.d;u++)n.push([]);this.keys\u003d[],this.bboxes\u003d[]}this.n\u003de,this.extent\u003dt,this.padding\u003dr,this.scale\u003de/t,this.uid\u003d0;var f\u003dr/e*t;this.min\u003d-f,this.max\u003dt+f}Dn.prototype.insert\u003dfunction(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Dn.prototype._insertReadonly\u003dfunction(){throw\"Cannot insert into a GridIndex created from an ArrayBuffer.\"},Dn.prototype._insertCell\u003dfunction(t,e,r,n,i,a){this.cells[i].push(a)},Dn.prototype.query\u003dfunction(t,e,r,n,i){var a\u003dthis.min,o\u003dthis.max;if(t\u003c\u003da\u0026\u0026e\u003c\u003da\u0026\u0026o\u003c\u003dr\u0026\u0026o\u003c\u003dn\u0026\u0026!i)return Array.prototype.slice.call(this.keys);var s\u003d[];return this._forEachCell(t,e,r,n,this._queryCell,s,{},i),s},Dn.prototype._queryCell\u003dfunction(t,e,r,n,i,a,o,s){var l\u003dthis.cells[i];if(null!\u003d\u003dl)for(var c\u003dthis.keys,u\u003dthis.bboxes,f\u003d0;f\u003cl.length;f++){var h\u003dl[f];if(void 0\u003d\u003d\u003do[h]){var p\u003d4*h;(s?s(u[p+0],u[p+1],u[p+2],u[p+3]):t\u003c\u003du[p+2]\u0026\u0026e\u003c\u003du[p+3]\u0026\u0026r\u003e\u003du[p+0]\u0026\u0026n\u003e\u003du[p+1])?(o[h]\u003d!0,a.push(c[h])):o[h]\u003d!1}}},Dn.prototype._forEachCell\u003dfunction(t,e,r,n,i,a,o,s){for(var l\u003dthis._convertToCellCoord(t),c\u003dthis._convertToCellCoord(e),u\u003dthis._convertToCellCoord(r),f\u003dthis._convertToCellCoord(n),h\u003dl;h\u003c\u003du;h++)for(var p\u003dc;p\u003c\u003df;p++){var d\u003dthis.d*p+h;if((!s||s(this._convertFromCellCoord(h),this._convertFromCellCoord(p),this._convertFromCellCoord(h+1),this._convertFromCellCoord(p+1)))\u0026\u0026i.call(this,t,e,r,n,d,a,o,s))return}},Dn.prototype._convertFromCellCoord\u003dfunction(t){return(t-this.padding)/this.scale},Dn.prototype._convertToCellCoord\u003dfunction(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},Dn.prototype.toArrayBuffer\u003dfunction(){if(this.arrayBuffer)return this.arrayBuffer;for(var t\u003dthis.cells,e\u003d3+this.cells.length+1+1,r\u003d0,n\u003d0;n\u003cthis.cells.length;n++)r+\u003dthis.cells[n].length;var i\u003dnew Int32Array(e+r+this.keys.length+this.bboxes.length);i[0]\u003dthis.extent,i[1]\u003dthis.n,i[2]\u003dthis.padding;for(var a\u003de,o\u003d0;o\u003ct.length;o++){var s\u003dt[o];i[3+o]\u003da,i.set(s,a),a+\u003ds.length}return i[3+t.length]\u003da,i.set(this.keys,a),a+\u003dthis.keys.length,i[3+t.length+1]\u003da,i.set(this.bboxes,a),a+\u003dthis.bboxes.length,i.buffer};var Rn\u003dself.ImageData,Fn\u003dself.ImageBitmap,Bn\u003d{};function Nn(t,e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),Object.defineProperty(e,\"_classRegistryKey\",{value:t,writeable:!1}),Bn[t]\u003d{klass:e,omit:r.omit||[],shallow:r.shallow||[]}}for(var jn in Nn(\"Object\",Object),zn.serialize\u003dfunction(t,e){var r\u003dt.toArrayBuffer();return e\u0026\u0026e.push(r),{buffer:r}},zn.deserialize\u003dfunction(t){return new zn(t.buffer)},Nn(\"Grid\",zn),Nn(\"Color\",te),Nn(\"Error\",Error),Nn(\"ResolvedImage\",ie),Nn(\"StylePropertyFunction\",Kr),Nn(\"StyleExpression\",Gr,{omit:[\"_evaluator\"]}),Nn(\"ZoomDependentExpression\",Zr),Nn(\"ZoomConstantExpression\",Xr),Nn(\"CompoundExpression\",xe,{omit:[\"_evaluate\"]}),Sr)Sr[jn]._classRegistryKey||Nn(\"Expression_\"+jn,Sr[jn]);function Un(t){return t\u0026\u0026\"undefined\"!\u003dtypeof ArrayBuffer\u0026\u0026(t instanceof ArrayBuffer||t.constructor\u0026\u0026\"ArrayBuffer\"\u003d\u003d\u003dt.constructor.name)}function Vn(t){return Fn\u0026\u0026t instanceof Fn}function qn(t,e){if(null\u003d\u003dt||\"boolean\"\u003d\u003dtypeof t||\"number\"\u003d\u003dtypeof t||\"string\"\u003d\u003dtypeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp)return t;if(Un(t)||Vn(t))return e\u0026\u0026e.push(t),t;if(ArrayBuffer.isView(t)){var r\u003dt;return e\u0026\u0026e.push(r.buffer),r}if(t instanceof Rn)return e\u0026\u0026e.push(t.data.buffer),t;if(Array.isArray(t)){for(var n\u003d[],i\u003d0,a\u003dt;i\u003ca.length;i+\u003d1){var o\u003da[i];n.push(qn(o,e))}return n}if(\"object\"\u003d\u003dtypeof t){var s\u003dt.constructor,l\u003ds._classRegistryKey;if(!l)throw new Error(\"can\u0027t serialize object of unregistered class\");var c\u003ds.serialize?s.serialize(t,e):{};if(!s.serialize){for(var u in t)if(t.hasOwnProperty(u)\u0026\u0026!(Bn[l].omit.indexOf(u)\u003e\u003d0)){var f\u003dt[u];c[u]\u003dBn[l].shallow.indexOf(u)\u003e\u003d0?f:qn(f,e)}t instanceof Error\u0026\u0026(c.message\u003dt.message)}if(c.$name)throw new Error(\"$name property is reserved for worker serialization logic.\");return\"Object\"!\u003d\u003dl\u0026\u0026(c.$name\u003dl),c}throw new Error(\"can\u0027t serialize object of type \"+typeof t)}function Hn(t){if(null\u003d\u003dt||\"boolean\"\u003d\u003dtypeof t||\"number\"\u003d\u003dtypeof t||\"string\"\u003d\u003dtypeof t||t instanceof Boolean||t instanceof Number||t instanceof String||t instanceof Date||t instanceof RegExp||Un(t)||Vn(t)||ArrayBuffer.isView(t)||t instanceof Rn)return t;if(Array.isArray(t))return t.map(Hn);if(\"object\"\u003d\u003dtypeof t){var e\u003dt.$name||\"Object\",r\u003dBn[e].klass;if(!r)throw new Error(\"can\u0027t deserialize unregistered class \"+e);if(r.deserialize)return r.deserialize(t);for(var n\u003dObject.create(r.prototype),i\u003d0,a\u003dObject.keys(t);i\u003ca.length;i+\u003d1){var o\u003da[i];if(\"$name\"!\u003d\u003do){var s\u003dt[o];n[o]\u003dBn[e].shallow.indexOf(o)\u003e\u003d0?s:Hn(s)}}return n}throw new Error(\"can\u0027t deserialize object of type \"+typeof t)}var Gn\u003dfunction(){this.first\u003d!0};Gn.prototype.update\u003dfunction(t,e){var r\u003dMath.floor(t);return this.first?(this.first\u003d!1,this.lastIntegerZoom\u003dr,this.lastIntegerZoomTime\u003d0,this.lastZoom\u003dt,this.lastFloorZoom\u003dr,!0):(this.lastFloorZoom\u003er?(this.lastIntegerZoom\u003dr+1,this.lastIntegerZoomTime\u003de):this.lastFloorZoom\u003cr\u0026\u0026(this.lastIntegerZoom\u003dr,this.lastIntegerZoomTime\u003de),t!\u003d\u003dthis.lastZoom\u0026\u0026(this.lastZoom\u003dt,this.lastFloorZoom\u003dr,!0))};var Yn\u003d{\"Latin-1 Supplement\":function(t){return t\u003e\u003d128\u0026\u0026t\u003c\u003d255},Arabic:function(t){return t\u003e\u003d1536\u0026\u0026t\u003c\u003d1791},\"Arabic Supplement\":function(t){return t\u003e\u003d1872\u0026\u0026t\u003c\u003d1919},\"Arabic Extended-A\":function(t){return t\u003e\u003d2208\u0026\u0026t\u003c\u003d2303},\"Hangul Jamo\":function(t){return t\u003e\u003d4352\u0026\u0026t\u003c\u003d4607},\"Unified Canadian Aboriginal Syllabics\":function(t){return t\u003e\u003d5120\u0026\u0026t\u003c\u003d5759},Khmer:function(t){return t\u003e\u003d6016\u0026\u0026t\u003c\u003d6143},\"Unified Canadian Aboriginal Syllabics Extended\":function(t){return t\u003e\u003d6320\u0026\u0026t\u003c\u003d6399},\"General Punctuation\":function(t){return t\u003e\u003d8192\u0026\u0026t\u003c\u003d8303},\"Letterlike Symbols\":function(t){return t\u003e\u003d8448\u0026\u0026t\u003c\u003d8527},\"Number Forms\":function(t){return t\u003e\u003d8528\u0026\u0026t\u003c\u003d8591},\"Miscellaneous Technical\":function(t){return t\u003e\u003d8960\u0026\u0026t\u003c\u003d9215},\"Control Pictures\":function(t){return t\u003e\u003d9216\u0026\u0026t\u003c\u003d9279},\"Optical Character Recognition\":function(t){return t\u003e\u003d9280\u0026\u0026t\u003c\u003d9311},\"Enclosed Alphanumerics\":function(t){return t\u003e\u003d9312\u0026\u0026t\u003c\u003d9471},\"Geometric Shapes\":function(t){return t\u003e\u003d9632\u0026\u0026t\u003c\u003d9727},\"Miscellaneous Symbols\":function(t){return t\u003e\u003d9728\u0026\u0026t\u003c\u003d9983},\"Miscellaneous Symbols and Arrows\":function(t){return t\u003e\u003d11008\u0026\u0026t\u003c\u003d11263},\"CJK Radicals Supplement\":function(t){return t\u003e\u003d11904\u0026\u0026t\u003c\u003d12031},\"Kangxi Radicals\":function(t){return t\u003e\u003d12032\u0026\u0026t\u003c\u003d12255},\"Ideographic Description Characters\":function(t){return t\u003e\u003d12272\u0026\u0026t\u003c\u003d12287},\"CJK Symbols and Punctuation\":function(t){return t\u003e\u003d12288\u0026\u0026t\u003c\u003d12351},Hiragana:function(t){return t\u003e\u003d12352\u0026\u0026t\u003c\u003d12447},Katakana:function(t){return t\u003e\u003d12448\u0026\u0026t\u003c\u003d12543},Bopomofo:function(t){return t\u003e\u003d12544\u0026\u0026t\u003c\u003d12591},\"Hangul Compatibility Jamo\":function(t){return t\u003e\u003d12592\u0026\u0026t\u003c\u003d12687},Kanbun:function(t){return t\u003e\u003d12688\u0026\u0026t\u003c\u003d12703},\"Bopomofo Extended\":function(t){return t\u003e\u003d12704\u0026\u0026t\u003c\u003d12735},\"CJK Strokes\":function(t){return t\u003e\u003d12736\u0026\u0026t\u003c\u003d12783},\"Katakana Phonetic Extensions\":function(t){return t\u003e\u003d12784\u0026\u0026t\u003c\u003d12799},\"Enclosed CJK Letters and Months\":function(t){return t\u003e\u003d12800\u0026\u0026t\u003c\u003d13055},\"CJK Compatibility\":function(t){return t\u003e\u003d13056\u0026\u0026t\u003c\u003d13311},\"CJK Unified Ideographs Extension A\":function(t){return t\u003e\u003d13312\u0026\u0026t\u003c\u003d19903},\"Yijing Hexagram Symbols\":function(t){return t\u003e\u003d19904\u0026\u0026t\u003c\u003d19967},\"CJK Unified Ideographs\":function(t){return t\u003e\u003d19968\u0026\u0026t\u003c\u003d40959},\"Yi Syllables\":function(t){return t\u003e\u003d40960\u0026\u0026t\u003c\u003d42127},\"Yi Radicals\":function(t){return t\u003e\u003d42128\u0026\u0026t\u003c\u003d42191},\"Hangul Jamo Extended-A\":function(t){return t\u003e\u003d43360\u0026\u0026t\u003c\u003d43391},\"Hangul Syllables\":function(t){return t\u003e\u003d44032\u0026\u0026t\u003c\u003d55215},\"Hangul Jamo Extended-B\":function(t){return t\u003e\u003d55216\u0026\u0026t\u003c\u003d55295},\"Private Use Area\":function(t){return t\u003e\u003d57344\u0026\u0026t\u003c\u003d63743},\"CJK Compatibility Ideographs\":function(t){return t\u003e\u003d63744\u0026\u0026t\u003c\u003d64255},\"Arabic Presentation Forms-A\":function(t){return t\u003e\u003d64336\u0026\u0026t\u003c\u003d65023},\"Vertical Forms\":function(t){return t\u003e\u003d65040\u0026\u0026t\u003c\u003d65055},\"CJK Compatibility Forms\":function(t){return t\u003e\u003d65072\u0026\u0026t\u003c\u003d65103},\"Small Form Variants\":function(t){return t\u003e\u003d65104\u0026\u0026t\u003c\u003d65135},\"Arabic Presentation Forms-B\":function(t){return t\u003e\u003d65136\u0026\u0026t\u003c\u003d65279},\"Halfwidth and Fullwidth Forms\":function(t){return t\u003e\u003d65280\u0026\u0026t\u003c\u003d65519}};function Wn(t){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){if(Zn(r[e].charCodeAt(0)))return!0}return!1}function Xn(t){return!Yn.Arabic(t)\u0026\u0026(!Yn[\"Arabic Supplement\"](t)\u0026\u0026(!Yn[\"Arabic Extended-A\"](t)\u0026\u0026(!Yn[\"Arabic Presentation Forms-A\"](t)\u0026\u0026!Yn[\"Arabic Presentation Forms-B\"](t))))}function Zn(t){return 746\u003d\u003d\u003dt||747\u003d\u003d\u003dt||!(t\u003c4352)\u0026\u0026(!!Yn[\"Bopomofo Extended\"](t)||(!!Yn.Bopomofo(t)||(!(!Yn[\"CJK Compatibility Forms\"](t)||t\u003e\u003d65097\u0026\u0026t\u003c\u003d65103)||(!!Yn[\"CJK Compatibility Ideographs\"](t)||(!!Yn[\"CJK Compatibility\"](t)||(!!Yn[\"CJK Radicals Supplement\"](t)||(!!Yn[\"CJK Strokes\"](t)||(!(!Yn[\"CJK Symbols and Punctuation\"](t)||t\u003e\u003d12296\u0026\u0026t\u003c\u003d12305||t\u003e\u003d12308\u0026\u0026t\u003c\u003d12319||12336\u003d\u003d\u003dt)||(!!Yn[\"CJK Unified Ideographs Extension A\"](t)||(!!Yn[\"CJK Unified Ideographs\"](t)||(!!Yn[\"Enclosed CJK Letters and Months\"](t)||(!!Yn[\"Hangul Compatibility Jamo\"](t)||(!!Yn[\"Hangul Jamo Extended-A\"](t)||(!!Yn[\"Hangul Jamo Extended-B\"](t)||(!!Yn[\"Hangul Jamo\"](t)||(!!Yn[\"Hangul Syllables\"](t)||(!!Yn.Hiragana(t)||(!!Yn[\"Ideographic Description Characters\"](t)||(!!Yn.Kanbun(t)||(!!Yn[\"Kangxi Radicals\"](t)||(!!Yn[\"Katakana Phonetic Extensions\"](t)||(!(!Yn.Katakana(t)||12540\u003d\u003d\u003dt)||(!(!Yn[\"Halfwidth and Fullwidth Forms\"](t)||65288\u003d\u003d\u003dt||65289\u003d\u003d\u003dt||65293\u003d\u003d\u003dt||t\u003e\u003d65306\u0026\u0026t\u003c\u003d65310||65339\u003d\u003d\u003dt||65341\u003d\u003d\u003dt||65343\u003d\u003d\u003dt||t\u003e\u003d65371\u0026\u0026t\u003c\u003d65503||65507\u003d\u003d\u003dt||t\u003e\u003d65512\u0026\u0026t\u003c\u003d65519)||(!(!Yn[\"Small Form Variants\"](t)||t\u003e\u003d65112\u0026\u0026t\u003c\u003d65118||t\u003e\u003d65123\u0026\u0026t\u003c\u003d65126)||(!!Yn[\"Unified Canadian Aboriginal Syllabics\"](t)||(!!Yn[\"Unified Canadian Aboriginal Syllabics Extended\"](t)||(!!Yn[\"Vertical Forms\"](t)||(!!Yn[\"Yijing Hexagram Symbols\"](t)||(!!Yn[\"Yi Syllables\"](t)||!!Yn[\"Yi Radicals\"](t))))))))))))))))))))))))))))))}function Jn(t){return!(Zn(t)||function(t){return!(!Yn[\"Latin-1 Supplement\"](t)||167!\u003d\u003dt\u0026\u0026169!\u003d\u003dt\u0026\u0026174!\u003d\u003dt\u0026\u0026177!\u003d\u003dt\u0026\u0026188!\u003d\u003dt\u0026\u0026189!\u003d\u003dt\u0026\u0026190!\u003d\u003dt\u0026\u0026215!\u003d\u003dt\u0026\u0026247!\u003d\u003dt)||(!(!Yn[\"General Punctuation\"](t)||8214!\u003d\u003dt\u0026\u00268224!\u003d\u003dt\u0026\u00268225!\u003d\u003dt\u0026\u00268240!\u003d\u003dt\u0026\u00268241!\u003d\u003dt\u0026\u00268251!\u003d\u003dt\u0026\u00268252!\u003d\u003dt\u0026\u00268258!\u003d\u003dt\u0026\u00268263!\u003d\u003dt\u0026\u00268264!\u003d\u003dt\u0026\u00268265!\u003d\u003dt\u0026\u00268273!\u003d\u003dt)||(!!Yn[\"Letterlike Symbols\"](t)||(!!Yn[\"Number Forms\"](t)||(!(!Yn[\"Miscellaneous Technical\"](t)||!(t\u003e\u003d8960\u0026\u0026t\u003c\u003d8967||t\u003e\u003d8972\u0026\u0026t\u003c\u003d8991||t\u003e\u003d8996\u0026\u0026t\u003c\u003d9e3||9003\u003d\u003d\u003dt||t\u003e\u003d9085\u0026\u0026t\u003c\u003d9114||t\u003e\u003d9150\u0026\u0026t\u003c\u003d9165||9167\u003d\u003d\u003dt||t\u003e\u003d9169\u0026\u0026t\u003c\u003d9179||t\u003e\u003d9186\u0026\u0026t\u003c\u003d9215))||(!(!Yn[\"Control Pictures\"](t)||9251\u003d\u003d\u003dt)||(!!Yn[\"Optical Character Recognition\"](t)||(!!Yn[\"Enclosed Alphanumerics\"](t)||(!!Yn[\"Geometric Shapes\"](t)||(!(!Yn[\"Miscellaneous Symbols\"](t)||t\u003e\u003d9754\u0026\u0026t\u003c\u003d9759)||(!(!Yn[\"Miscellaneous Symbols and Arrows\"](t)||!(t\u003e\u003d11026\u0026\u0026t\u003c\u003d11055||t\u003e\u003d11088\u0026\u0026t\u003c\u003d11097||t\u003e\u003d11192\u0026\u0026t\u003c\u003d11243))||(!!Yn[\"CJK Symbols and Punctuation\"](t)||(!!Yn.Katakana(t)||(!!Yn[\"Private Use Area\"](t)||(!!Yn[\"CJK Compatibility Forms\"](t)||(!!Yn[\"Small Form Variants\"](t)||(!!Yn[\"Halfwidth and Fullwidth Forms\"](t)||(8734\u003d\u003d\u003dt||8756\u003d\u003d\u003dt||8757\u003d\u003d\u003dt||t\u003e\u003d9984\u0026\u0026t\u003c\u003d10087||t\u003e\u003d10102\u0026\u0026t\u003c\u003d10131||65532\u003d\u003d\u003dt||65533\u003d\u003d\u003dt)))))))))))))))))}(t))}function Kn(t){return t\u003e\u003d1424\u0026\u0026t\u003c\u003d2303||Yn[\"Arabic Presentation Forms-A\"](t)||Yn[\"Arabic Presentation Forms-B\"](t)}function Qn(t,e){return!(!e\u0026\u0026Kn(t))\u0026\u0026!(t\u003e\u003d2304\u0026\u0026t\u003c\u003d3583||t\u003e\u003d3840\u0026\u0026t\u003c\u003d4255||Yn.Khmer(t))}function $n(t){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){if(Kn(r[e].charCodeAt(0)))return!0}return!1}var ti\u003d\"deferred\",ei\u003d\"loading\",ri\u003d\"loaded\",ni\u003d\"error\",ii\u003dnull,ai\u003d\"unavailable\",oi\u003dnull,si\u003dfunction(t){t\u0026\u0026\"string\"\u003d\u003dtypeof t\u0026\u0026t.indexOf(\"NetworkError\")\u003e-1\u0026\u0026(ai\u003dni),ii\u0026\u0026ii(t)};function li(){ci.fire(new At(\"pluginStateChange\",{pluginStatus:ai,pluginURL:oi}))}var ci\u003dnew Et,ui\u003dfunction(){return ai},fi\u003dfunction(){if(ai!\u003d\u003dti||!oi)throw new Error(\"rtl-text-plugin cannot be downloaded unless a pluginURL is specified\");ai\u003dei,li(),oi\u0026\u0026xt({url:oi},(function(t){t?si(t):(ai\u003dri,li())}))},hi\u003d{applyArabicShaping:null,processBidirectionalText:null,processStyledBidirectionalText:null,isLoaded:function(){return ai\u003d\u003d\u003dri||null!\u003dhi.applyArabicShaping},isLoading:function(){return ai\u003d\u003d\u003dei},setState:function(t){ai\u003dt.pluginStatus,oi\u003dt.pluginURL},isParsed:function(){return null!\u003dhi.applyArabicShaping\u0026\u0026null!\u003dhi.processBidirectionalText\u0026\u0026null!\u003dhi.processStyledBidirectionalText},getPluginURL:function(){return oi}},pi\u003dfunction(t,e){this.zoom\u003dt,e?(this.now\u003de.now,this.fadeDuration\u003de.fadeDuration,this.zoomHistory\u003de.zoomHistory,this.transition\u003de.transition):(this.now\u003d0,this.fadeDuration\u003d0,this.zoomHistory\u003dnew Gn,this.transition\u003d{})};pi.prototype.isSupportedScript\u003dfunction(t){return function(t,e){for(var r\u003d0,n\u003dt;r\u003cn.length;r+\u003d1){if(!Qn(n[r].charCodeAt(0),e))return!1}return!0}(t,hi.isLoaded())},pi.prototype.crossFadingFactor\u003dfunction(){return 0\u003d\u003d\u003dthis.fadeDuration?1:Math.min((this.now-this.zoomHistory.lastIntegerZoomTime)/this.fadeDuration,1)},pi.prototype.getCrossfadeParameters\u003dfunction(){var t\u003dthis.zoom,e\u003dt-Math.floor(t),r\u003dthis.crossFadingFactor();return t\u003ethis.zoomHistory.lastIntegerZoom?{fromScale:2,toScale:1,t:e+(1-e)*r}:{fromScale:.5,toScale:1,t:1-(1-r)*e}};var di\u003dfunction(t,e){this.property\u003dt,this.value\u003de,this.expression\u003dfunction(t,e){if(Br(t))return new Kr(t,e);if(Yr(t)){var r\u003dJr(t,e);if(\"error\"\u003d\u003d\u003dr.result)throw new Error(r.value.map((function(t){return t.key+\": \"+t.message})).join(\", \"));return r.value}var n\u003dt;return\"string\"\u003d\u003dtypeof t\u0026\u0026\"color\"\u003d\u003d\u003de.type\u0026\u0026(n\u003dte.parse(t)),{kind:\"constant\",evaluate:function(){return n}}}(void 0\u003d\u003d\u003de?t.specification.default:e,t.specification)};di.prototype.isDataDriven\u003dfunction(){return\"source\"\u003d\u003d\u003dthis.expression.kind||\"composite\"\u003d\u003d\u003dthis.expression.kind},di.prototype.possiblyEvaluate\u003dfunction(t,e,r){return this.property.possiblyEvaluate(this,t,e,r)};var mi\u003dfunction(t){this.property\u003dt,this.value\u003dnew di(t,void 0)};mi.prototype.transitioned\u003dfunction(t,e){return new vi(this.property,this.value,e,u({},t.transition,this.transition),t.now)},mi.prototype.untransitioned\u003dfunction(){return new vi(this.property,this.value,null,{},0)};var gi\u003dfunction(t){this._properties\u003dt,this._values\u003dObject.create(t.defaultTransitionablePropertyValues)};gi.prototype.getValue\u003dfunction(t){return x(this._values[t].value.value)},gi.prototype.setValue\u003dfunction(t,e){this._values.hasOwnProperty(t)||(this._values[t]\u003dnew mi(this._values[t].property)),this._values[t].value\u003dnew di(this._values[t].property,null\u003d\u003d\u003de?void 0:x(e))},gi.prototype.getTransition\u003dfunction(t){return x(this._values[t].transition)},gi.prototype.setTransition\u003dfunction(t,e){this._values.hasOwnProperty(t)||(this._values[t]\u003dnew mi(this._values[t].property)),this._values[t].transition\u003dx(e)||void 0},gi.prototype.serialize\u003dfunction(){for(var t\u003d{},e\u003d0,r\u003dObject.keys(this._values);e\u003cr.length;e+\u003d1){var n\u003dr[e],i\u003dthis.getValue(n);void 0!\u003d\u003di\u0026\u0026(t[n]\u003di);var a\u003dthis.getTransition(n);void 0!\u003d\u003da\u0026\u0026(t[n+\"-transition\"]\u003da)}return t},gi.prototype.transitioned\u003dfunction(t,e){for(var r\u003dnew yi(this._properties),n\u003d0,i\u003dObject.keys(this._values);n\u003ci.length;n+\u003d1){var a\u003di[n];r._values[a]\u003dthis._values[a].transitioned(t,e._values[a])}return r},gi.prototype.untransitioned\u003dfunction(){for(var t\u003dnew yi(this._properties),e\u003d0,r\u003dObject.keys(this._values);e\u003cr.length;e+\u003d1){var n\u003dr[e];t._values[n]\u003dthis._values[n].untransitioned()}return t};var vi\u003dfunction(t,e,r,n,i){this.property\u003dt,this.value\u003de,this.begin\u003di+n.delay||0,this.end\u003dthis.begin+n.duration||0,t.specification.transition\u0026\u0026(n.delay||n.duration)\u0026\u0026(this.prior\u003dr)};vi.prototype.possiblyEvaluate\u003dfunction(t,e,r){var n\u003dt.now||0,i\u003dthis.value.possiblyEvaluate(t,e,r),a\u003dthis.prior;if(a){if(n\u003ethis.end)return this.prior\u003dnull,i;if(this.value.isDataDriven())return this.prior\u003dnull,i;if(n\u003cthis.begin)return a.possiblyEvaluate(t,e,r);var o\u003d(n-this.begin)/(this.end-this.begin);return this.property.interpolate(a.possiblyEvaluate(t,e,r),i,function(t){if(t\u003c\u003d0)return 0;if(t\u003e\u003d1)return 1;var e\u003dt*t,r\u003de*t;return 4*(t\u003c.5?r:3*(t-e)+r-.75)}(o))}return i};var yi\u003dfunction(t){this._properties\u003dt,this._values\u003dObject.create(t.defaultTransitioningPropertyValues)};yi.prototype.possiblyEvaluate\u003dfunction(t,e,r){for(var n\u003dnew _i(this._properties),i\u003d0,a\u003dObject.keys(this._values);i\u003ca.length;i+\u003d1){var o\u003da[i];n._values[o]\u003dthis._values[o].possiblyEvaluate(t,e,r)}return n},yi.prototype.hasTransition\u003dfunction(){for(var t\u003d0,e\u003dObject.keys(this._values);t\u003ce.length;t+\u003d1){var r\u003de[t];if(this._values[r].prior)return!0}return!1};var xi\u003dfunction(t){this._properties\u003dt,this._values\u003dObject.create(t.defaultPropertyValues)};xi.prototype.getValue\u003dfunction(t){return x(this._values[t].value)},xi.prototype.setValue\u003dfunction(t,e){this._values[t]\u003dnew di(this._values[t].property,null\u003d\u003d\u003de?void 0:x(e))},xi.prototype.serialize\u003dfunction(){for(var t\u003d{},e\u003d0,r\u003dObject.keys(this._values);e\u003cr.length;e+\u003d1){var n\u003dr[e],i\u003dthis.getValue(n);void 0!\u003d\u003di\u0026\u0026(t[n]\u003di)}return t},xi.prototype.possiblyEvaluate\u003dfunction(t,e,r){for(var n\u003dnew _i(this._properties),i\u003d0,a\u003dObject.keys(this._values);i\u003ca.length;i+\u003d1){var o\u003da[i];n._values[o]\u003dthis._values[o].possiblyEvaluate(t,e,r)}return n};var bi\u003dfunction(t,e,r){this.property\u003dt,this.value\u003de,this.parameters\u003dr};bi.prototype.isConstant\u003dfunction(){return\"constant\"\u003d\u003d\u003dthis.value.kind},bi.prototype.constantOr\u003dfunction(t){return\"constant\"\u003d\u003d\u003dthis.value.kind?this.value.value:t},bi.prototype.evaluate\u003dfunction(t,e,r,n){return this.property.evaluate(this.value,this.parameters,t,e,r,n)};var _i\u003dfunction(t){this._properties\u003dt,this._values\u003dObject.create(t.defaultPossiblyEvaluatedValues)};_i.prototype.get\u003dfunction(t){return this._values[t]};var wi\u003dfunction(t){this.specification\u003dt};wi.prototype.possiblyEvaluate\u003dfunction(t,e){return t.expression.evaluate(e)},wi.prototype.interpolate\u003dfunction(t,e,r){var n\u003dGe[this.specification.type];return n?n(t,e,r):t};var Ti\u003dfunction(t,e){this.specification\u003dt,this.overrides\u003de};Ti.prototype.possiblyEvaluate\u003dfunction(t,e,r,n){return\"constant\"\u003d\u003d\u003dt.expression.kind||\"camera\"\u003d\u003d\u003dt.expression.kind?new bi(this,{kind:\"constant\",value:t.expression.evaluate(e,null,{},r,n)},e):new bi(this,t.expression,e)},Ti.prototype.interpolate\u003dfunction(t,e,r){if(\"constant\"!\u003d\u003dt.value.kind||\"constant\"!\u003d\u003de.value.kind)return t;if(void 0\u003d\u003d\u003dt.value.value||void 0\u003d\u003d\u003de.value.value)return new bi(this,{kind:\"constant\",value:void 0},t.parameters);var n\u003dGe[this.specification.type];return n?new bi(this,{kind:\"constant\",value:n(t.value.value,e.value.value,r)},t.parameters):t},Ti.prototype.evaluate\u003dfunction(t,e,r,n,i,a){return\"constant\"\u003d\u003d\u003dt.kind?t.value:t.evaluate(e,r,n,i,a)};var ki\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.possiblyEvaluate\u003dfunction(t,e,r,n){if(void 0\u003d\u003d\u003dt.value)return new bi(this,{kind:\"constant\",value:void 0},e);if(\"constant\"\u003d\u003d\u003dt.expression.kind){var i\u003dt.expression.evaluate(e,null,{},r,n),a\u003d\"resolvedImage\"\u003d\u003d\u003dt.property.specification.type\u0026\u0026\"string\"!\u003dtypeof i?i.name:i,o\u003dthis._calculate(a,a,a,e);return new bi(this,{kind:\"constant\",value:o},e)}if(\"camera\"\u003d\u003d\u003dt.expression.kind){var s\u003dthis._calculate(t.expression.evaluate({zoom:e.zoom-1}),t.expression.evaluate({zoom:e.zoom}),t.expression.evaluate({zoom:e.zoom+1}),e);return new bi(this,{kind:\"constant\",value:s},e)}return new bi(this,t.expression,e)},e.prototype.evaluate\u003dfunction(t,e,r,n,i,a){if(\"source\"\u003d\u003d\u003dt.kind){var o\u003dt.evaluate(e,r,n,i,a);return this._calculate(o,o,o,e)}return\"composite\"\u003d\u003d\u003dt.kind?this._calculate(t.evaluate({zoom:Math.floor(e.zoom)-1},r,n),t.evaluate({zoom:Math.floor(e.zoom)},r,n),t.evaluate({zoom:Math.floor(e.zoom)+1},r,n),e):t.value},e.prototype._calculate\u003dfunction(t,e,r,n){return n.zoom\u003en.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},e.prototype.interpolate\u003dfunction(t){return t},e}(Ti),Mi\u003dfunction(t){this.specification\u003dt};Mi.prototype.possiblyEvaluate\u003dfunction(t,e,r,n){if(void 0!\u003d\u003dt.value){if(\"constant\"\u003d\u003d\u003dt.expression.kind){var i\u003dt.expression.evaluate(e,null,{},r,n);return this._calculate(i,i,i,e)}return this._calculate(t.expression.evaluate(new pi(Math.floor(e.zoom-1),e)),t.expression.evaluate(new pi(Math.floor(e.zoom),e)),t.expression.evaluate(new pi(Math.floor(e.zoom+1),e)),e)}},Mi.prototype._calculate\u003dfunction(t,e,r,n){return n.zoom\u003en.zoomHistory.lastIntegerZoom?{from:t,to:e}:{from:r,to:e}},Mi.prototype.interpolate\u003dfunction(t){return t};var Ai\u003dfunction(t){this.specification\u003dt};Ai.prototype.possiblyEvaluate\u003dfunction(t,e,r,n){return!!t.expression.evaluate(e,null,{},r,n)},Ai.prototype.interpolate\u003dfunction(){return!1};var Si\u003dfunction(t){for(var e in this.properties\u003dt,this.defaultPropertyValues\u003d{},this.defaultTransitionablePropertyValues\u003d{},this.defaultTransitioningPropertyValues\u003d{},this.defaultPossiblyEvaluatedValues\u003d{},this.overridableProperties\u003d[],t){var r\u003dt[e];r.specification.overridable\u0026\u0026this.overridableProperties.push(e);var n\u003dthis.defaultPropertyValues[e]\u003dnew di(r,void 0),i\u003dthis.defaultTransitionablePropertyValues[e]\u003dnew mi(r);this.defaultTransitioningPropertyValues[e]\u003di.untransitioned(),this.defaultPossiblyEvaluatedValues[e]\u003dn.possiblyEvaluate({})}};Nn(\"DataDrivenProperty\",Ti),Nn(\"DataConstantProperty\",wi),Nn(\"CrossFadedDataDrivenProperty\",ki),Nn(\"CrossFadedProperty\",Mi),Nn(\"ColorRampProperty\",Ai);var Ei\u003dfunction(t){function e(e,r){if(t.call(this),this.id\u003de.id,this.type\u003de.type,this._featureFilter\u003d{filter:function(){return!0},needGeometry:!1},\"custom\"!\u003d\u003de.type\u0026\u0026(e\u003de,this.metadata\u003de.metadata,this.minzoom\u003de.minzoom,this.maxzoom\u003de.maxzoom,\"background\"!\u003d\u003de.type\u0026\u0026(this.source\u003de.source,this.sourceLayer\u003de[\"source-layer\"],this.filter\u003de.filter),r.layout\u0026\u0026(this._unevaluatedLayout\u003dnew xi(r.layout)),r.paint)){for(var n in this._transitionablePaint\u003dnew gi(r.paint),e.paint)this.setPaintProperty(n,e.paint[n],{validate:!1});for(var i in e.layout)this.setLayoutProperty(i,e.layout[i],{validate:!1});this._transitioningPaint\u003dthis._transitionablePaint.untransitioned(),this.paint\u003dnew _i(r.paint)}}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getCrossfadeParameters\u003dfunction(){return this._crossfadeParameters},e.prototype.getLayoutProperty\u003dfunction(t){return\"visibility\"\u003d\u003d\u003dt?this.visibility:this._unevaluatedLayout.getValue(t)},e.prototype.setLayoutProperty\u003dfunction(t,e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),null!\u003de){var n\u003d\"layers.\"+this.id+\".layout.\"+t;if(this._validate(In,n,t,e,r))return}\"visibility\"!\u003d\u003dt?this._unevaluatedLayout.setValue(t,e):this.visibility\u003de},e.prototype.getPaintProperty\u003dfunction(t){return g(t,\"-transition\")?this._transitionablePaint.getTransition(t.slice(0,-\"-transition\".length)):this._transitionablePaint.getValue(t)},e.prototype.setPaintProperty\u003dfunction(t,e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),null!\u003de){var n\u003d\"layers.\"+this.id+\".paint.\"+t;if(this._validate(Pn,n,t,e,r))return!1}if(g(t,\"-transition\"))return this._transitionablePaint.setTransition(t.slice(0,-\"-transition\".length),e||void 0),!1;var i\u003dthis._transitionablePaint._values[t],a\u003d\"cross-faded-data-driven\"\u003d\u003d\u003di.property.specification[\"property-type\"],o\u003di.value.isDataDriven(),s\u003di.value;this._transitionablePaint.setValue(t,e),this._handleSpecialPaintPropertyUpdate(t);var l\u003dthis._transitionablePaint._values[t].value;return l.isDataDriven()||o||a||this._handleOverridablePaintPropertyUpdate(t,s,l)},e.prototype._handleSpecialPaintPropertyUpdate\u003dfunction(t){},e.prototype._handleOverridablePaintPropertyUpdate\u003dfunction(t,e,r){return!1},e.prototype.isHidden\u003dfunction(t){return!!(this.minzoom\u0026\u0026t\u003cthis.minzoom)||(!!(this.maxzoom\u0026\u0026t\u003e\u003dthis.maxzoom)||\"none\"\u003d\u003d\u003dthis.visibility)},e.prototype.updateTransitions\u003dfunction(t){this._transitioningPaint\u003dthis._transitionablePaint.transitioned(t,this._transitioningPaint)},e.prototype.hasTransition\u003dfunction(){return this._transitioningPaint.hasTransition()},e.prototype.recalculate\u003dfunction(t,e){t.getCrossfadeParameters\u0026\u0026(this._crossfadeParameters\u003dt.getCrossfadeParameters()),this._unevaluatedLayout\u0026\u0026(this.layout\u003dthis._unevaluatedLayout.possiblyEvaluate(t,void 0,e)),this.paint\u003dthis._transitioningPaint.possiblyEvaluate(t,void 0,e)},e.prototype.serialize\u003dfunction(){var t\u003d{id:this.id,type:this.type,source:this.source,\"source-layer\":this.sourceLayer,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom,filter:this.filter,layout:this._unevaluatedLayout\u0026\u0026this._unevaluatedLayout.serialize(),paint:this._transitionablePaint\u0026\u0026this._transitionablePaint.serialize()};return this.visibility\u0026\u0026(t.layout\u003dt.layout||{},t.layout.visibility\u003dthis.visibility),y(t,(function(t,e){return!(void 0\u003d\u003d\u003dt||\"layout\"\u003d\u003d\u003de\u0026\u0026!Object.keys(t).length||\"paint\"\u003d\u003d\u003de\u0026\u0026!Object.keys(t).length)}))},e.prototype._validate\u003dfunction(t,e,r,n,i){return void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{}),(!i||!1!\u003d\u003di.validate)\u0026\u0026On(this,t.call(Ln,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:Lt,style:{glyphs:!0,sprite:!0}}))},e.prototype.is3D\u003dfunction(){return!1},e.prototype.isTileClipped\u003dfunction(){return!1},e.prototype.hasOffscreenPass\u003dfunction(){return!1},e.prototype.resize\u003dfunction(){},e.prototype.isStateDependent\u003dfunction(){for(var t in this.paint._values){var e\u003dthis.paint.get(t);if(e instanceof bi\u0026\u0026zr(e.property.specification)\u0026\u0026((\"source\"\u003d\u003d\u003de.value.kind||\"composite\"\u003d\u003d\u003de.value.kind)\u0026\u0026e.value.isStateDependent))return!0}return!1},e}(Et),Li\u003d{Int8:Int8Array,Uint8:Uint8Array,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array},Ci\u003dfunction(t,e){this._structArray\u003dt,this._pos1\u003de*this.size,this._pos2\u003dthis._pos1/2,this._pos4\u003dthis._pos1/4,this._pos8\u003dthis._pos1/8},Pi\u003dfunction(){this.isTransferred\u003d!1,this.capacity\u003d-1,this.resize(0)};function Ii(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d1);var r\u003d0,n\u003d0;return{members:t.map((function(t){var i,a\u003d(i\u003dt.type,Li[i].BYTES_PER_ELEMENT),o\u003dr\u003dOi(r,Math.max(e,a)),s\u003dt.components||1;return n\u003dMath.max(n,a),r+\u003da*s,{name:t.name,type:t.type,components:s,offset:o}})),size:Oi(r,Math.max(n,e)),alignment:e}}function Oi(t,e){return Math.ceil(t/e)*e}Pi.serialize\u003dfunction(t,e){return t._trim(),e\u0026\u0026(t.isTransferred\u003d!0,e.push(t.arrayBuffer)),{length:t.length,arrayBuffer:t.arrayBuffer}},Pi.deserialize\u003dfunction(t){var e\u003dObject.create(this.prototype);return e.arrayBuffer\u003dt.arrayBuffer,e.length\u003dt.length,e.capacity\u003dt.arrayBuffer.byteLength/e.bytesPerElement,e._refreshViews(),e},Pi.prototype._trim\u003dfunction(){this.length!\u003d\u003dthis.capacity\u0026\u0026(this.capacity\u003dthis.length,this.arrayBuffer\u003dthis.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},Pi.prototype.clear\u003dfunction(){this.length\u003d0},Pi.prototype.resize\u003dfunction(t){this.reserve(t),this.length\u003dt},Pi.prototype.reserve\u003dfunction(t){if(t\u003ethis.capacity){this.capacity\u003dMath.max(t,Math.floor(5*this.capacity),128),this.arrayBuffer\u003dnew ArrayBuffer(this.capacity*this.bytesPerElement);var e\u003dthis.uint8;this._refreshViews(),e\u0026\u0026this.uint8.set(e)}},Pi.prototype._refreshViews\u003dfunction(){throw new Error(\"_refreshViews() must be implemented by each concrete StructArray layout\")};var zi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e){var r\u003dthis.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace\u003dfunction(t,e,r){var n\u003d2*t;return this.int16[n+0]\u003de,this.int16[n+1]\u003dr,t},e}(Pi);zi.prototype.bytesPerElement\u003d4,Nn(\"StructArrayLayout2i4\",zi);var Di\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n){var i\u003dthis.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace\u003dfunction(t,e,r,n,i){var a\u003d4*t;return this.int16[a+0]\u003de,this.int16[a+1]\u003dr,this.int16[a+2]\u003dn,this.int16[a+3]\u003di,t},e}(Pi);Di.prototype.bytesPerElement\u003d8,Nn(\"StructArrayLayout4i8\",Di);var Ri\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a){var o\u003dthis.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o){var s\u003d6*t;return this.int16[s+0]\u003de,this.int16[s+1]\u003dr,this.int16[s+2]\u003dn,this.int16[s+3]\u003di,this.int16[s+4]\u003da,this.int16[s+5]\u003do,t},e}(Pi);Ri.prototype.bytesPerElement\u003d12,Nn(\"StructArrayLayout2i4i12\",Ri);var Fi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a){var o\u003dthis.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o){var s\u003d4*t,l\u003d8*t;return this.int16[s+0]\u003de,this.int16[s+1]\u003dr,this.uint8[l+4]\u003dn,this.uint8[l+5]\u003di,this.uint8[l+6]\u003da,this.uint8[l+7]\u003do,t},e}(Pi);Fi.prototype.bytesPerElement\u003d8,Nn(\"StructArrayLayout2i4ub8\",Fi);var Bi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a,o,s,l,c){var u\u003dthis.length;return this.resize(u+1),this.emplace(u,t,e,r,n,i,a,o,s,l,c)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o,s,l,c,u){var f\u003d9*t,h\u003d18*t;return this.uint16[f+0]\u003de,this.uint16[f+1]\u003dr,this.uint16[f+2]\u003dn,this.uint16[f+3]\u003di,this.uint16[f+4]\u003da,this.uint16[f+5]\u003do,this.uint16[f+6]\u003ds,this.uint16[f+7]\u003dl,this.uint8[h+16]\u003dc,this.uint8[h+17]\u003du,t},e}(Pi);Bi.prototype.bytesPerElement\u003d18,Nn(\"StructArrayLayout8ui2ub18\",Bi);var Ni\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f){var h\u003dthis.length;return this.resize(h+1),this.emplace(h,t,e,r,n,i,a,o,s,l,c,u,f)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f,h){var p\u003d12*t;return this.int16[p+0]\u003de,this.int16[p+1]\u003dr,this.int16[p+2]\u003dn,this.int16[p+3]\u003di,this.uint16[p+4]\u003da,this.uint16[p+5]\u003do,this.uint16[p+6]\u003ds,this.uint16[p+7]\u003dl,this.int16[p+8]\u003dc,this.int16[p+9]\u003du,this.int16[p+10]\u003df,this.int16[p+11]\u003dh,t},e}(Pi);Ni.prototype.bytesPerElement\u003d24,Nn(\"StructArrayLayout4i4ui4i24\",Ni);var ji\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r){var n\u003dthis.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace\u003dfunction(t,e,r,n){var i\u003d3*t;return this.float32[i+0]\u003de,this.float32[i+1]\u003dr,this.float32[i+2]\u003dn,t},e}(Pi);ji.prototype.bytesPerElement\u003d12,Nn(\"StructArrayLayout3f12\",ji);var Ui\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.uint32\u003dnew Uint32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t){var e\u003dthis.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace\u003dfunction(t,e){var r\u003d1*t;return this.uint32[r+0]\u003de,t},e}(Pi);Ui.prototype.bytesPerElement\u003d4,Nn(\"StructArrayLayout1ul4\",Ui);var Vi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer),this.uint32\u003dnew Uint32Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a,o,s,l){var c\u003dthis.length;return this.resize(c+1),this.emplace(c,t,e,r,n,i,a,o,s,l)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o,s,l,c){var u\u003d10*t,f\u003d5*t;return this.int16[u+0]\u003de,this.int16[u+1]\u003dr,this.int16[u+2]\u003dn,this.int16[u+3]\u003di,this.int16[u+4]\u003da,this.int16[u+5]\u003do,this.uint32[f+3]\u003ds,this.uint16[u+8]\u003dl,this.uint16[u+9]\u003dc,t},e}(Pi);Vi.prototype.bytesPerElement\u003d20,Nn(\"StructArrayLayout6i1ul2ui20\",Vi);var qi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a){var o\u003dthis.length;return this.resize(o+1),this.emplace(o,t,e,r,n,i,a)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o){var s\u003d6*t;return this.int16[s+0]\u003de,this.int16[s+1]\u003dr,this.int16[s+2]\u003dn,this.int16[s+3]\u003di,this.int16[s+4]\u003da,this.int16[s+5]\u003do,t},e}(Pi);qi.prototype.bytesPerElement\u003d12,Nn(\"StructArrayLayout2i2i2i12\",qi);var Hi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i){var a\u003dthis.length;return this.resize(a+1),this.emplace(a,t,e,r,n,i)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a){var o\u003d4*t,s\u003d8*t;return this.float32[o+0]\u003de,this.float32[o+1]\u003dr,this.float32[o+2]\u003dn,this.int16[s+6]\u003di,this.int16[s+7]\u003da,t},e}(Pi);Hi.prototype.bytesPerElement\u003d16,Nn(\"StructArrayLayout2f1f2i16\",Hi);var Gi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n){var i\u003dthis.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace\u003dfunction(t,e,r,n,i){var a\u003d12*t,o\u003d3*t;return this.uint8[a+0]\u003de,this.uint8[a+1]\u003dr,this.float32[o+1]\u003dn,this.float32[o+2]\u003di,t},e}(Pi);Gi.prototype.bytesPerElement\u003d12,Nn(\"StructArrayLayout2ub2f12\",Gi);var Yi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r){var n\u003dthis.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace\u003dfunction(t,e,r,n){var i\u003d3*t;return this.uint16[i+0]\u003de,this.uint16[i+1]\u003dr,this.uint16[i+2]\u003dn,t},e}(Pi);Yi.prototype.bytesPerElement\u003d6,Nn(\"StructArrayLayout3ui6\",Yi);var Wi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer),this.uint32\u003dnew Uint32Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g){var v\u003dthis.length;return this.resize(v+1),this.emplace(v,t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g,v){var y\u003d24*t,x\u003d12*t,b\u003d48*t;return this.int16[y+0]\u003de,this.int16[y+1]\u003dr,this.uint16[y+2]\u003dn,this.uint16[y+3]\u003di,this.uint32[x+2]\u003da,this.uint32[x+3]\u003do,this.uint32[x+4]\u003ds,this.uint16[y+10]\u003dl,this.uint16[y+11]\u003dc,this.uint16[y+12]\u003du,this.float32[x+7]\u003df,this.float32[x+8]\u003dh,this.uint8[b+36]\u003dp,this.uint8[b+37]\u003dd,this.uint8[b+38]\u003dm,this.uint32[x+10]\u003dg,this.int16[y+22]\u003dv,t},e}(Pi);Wi.prototype.bytesPerElement\u003d48,Nn(\"StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48\",Wi);var Xi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer),this.uint32\u003dnew Uint32Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g,v,y,x,b,_,w,T,k,M,A,S){var E\u003dthis.length;return this.resize(E+1),this.emplace(E,t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g,v,y,x,b,_,w,T,k,M,A,S)},e.prototype.emplace\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g,v,y,x,b,_,w,T,k,M,A,S,E){var L\u003d34*t,C\u003d17*t;return this.int16[L+0]\u003de,this.int16[L+1]\u003dr,this.int16[L+2]\u003dn,this.int16[L+3]\u003di,this.int16[L+4]\u003da,this.int16[L+5]\u003do,this.int16[L+6]\u003ds,this.int16[L+7]\u003dl,this.uint16[L+8]\u003dc,this.uint16[L+9]\u003du,this.uint16[L+10]\u003df,this.uint16[L+11]\u003dh,this.uint16[L+12]\u003dp,this.uint16[L+13]\u003dd,this.uint16[L+14]\u003dm,this.uint16[L+15]\u003dg,this.uint16[L+16]\u003dv,this.uint16[L+17]\u003dy,this.uint16[L+18]\u003dx,this.uint16[L+19]\u003db,this.uint16[L+20]\u003d_,this.uint16[L+21]\u003dw,this.uint16[L+22]\u003dT,this.uint32[C+12]\u003dk,this.float32[C+13]\u003dM,this.float32[C+14]\u003dA,this.float32[C+15]\u003dS,this.float32[C+16]\u003dE,t},e}(Pi);Xi.prototype.bytesPerElement\u003d68,Nn(\"StructArrayLayout8i15ui1ul4f68\",Xi);var Zi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t){var e\u003dthis.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace\u003dfunction(t,e){var r\u003d1*t;return this.float32[r+0]\u003de,t},e}(Pi);Zi.prototype.bytesPerElement\u003d4,Nn(\"StructArrayLayout1f4\",Zi);var Ji\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.int16\u003dnew Int16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r){var n\u003dthis.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace\u003dfunction(t,e,r,n){var i\u003d3*t;return this.int16[i+0]\u003de,this.int16[i+1]\u003dr,this.int16[i+2]\u003dn,t},e}(Pi);Ji.prototype.bytesPerElement\u003d6,Nn(\"StructArrayLayout3i6\",Ji);var Ki\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.uint32\u003dnew Uint32Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r){var n\u003dthis.length;return this.resize(n+1),this.emplace(n,t,e,r)},e.prototype.emplace\u003dfunction(t,e,r,n){var i\u003d2*t,a\u003d4*t;return this.uint32[i+0]\u003de,this.uint16[a+2]\u003dr,this.uint16[a+3]\u003dn,t},e}(Pi);Ki.prototype.bytesPerElement\u003d8,Nn(\"StructArrayLayout1ul2ui8\",Ki);var Qi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e){var r\u003dthis.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace\u003dfunction(t,e,r){var n\u003d2*t;return this.uint16[n+0]\u003de,this.uint16[n+1]\u003dr,t},e}(Pi);Qi.prototype.bytesPerElement\u003d4,Nn(\"StructArrayLayout2ui4\",Qi);var $i\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.uint16\u003dnew Uint16Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t){var e\u003dthis.length;return this.resize(e+1),this.emplace(e,t)},e.prototype.emplace\u003dfunction(t,e){var r\u003d1*t;return this.uint16[r+0]\u003de,t},e}(Pi);$i.prototype.bytesPerElement\u003d2,Nn(\"StructArrayLayout1ui2\",$i);var ta\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e){var r\u003dthis.length;return this.resize(r+1),this.emplace(r,t,e)},e.prototype.emplace\u003dfunction(t,e,r){var n\u003d2*t;return this.float32[n+0]\u003de,this.float32[n+1]\u003dr,t},e}(Pi);ta.prototype.bytesPerElement\u003d8,Nn(\"StructArrayLayout2f8\",ta);var ea\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._refreshViews\u003dfunction(){this.uint8\u003dnew Uint8Array(this.arrayBuffer),this.float32\u003dnew Float32Array(this.arrayBuffer)},e.prototype.emplaceBack\u003dfunction(t,e,r,n){var i\u003dthis.length;return this.resize(i+1),this.emplace(i,t,e,r,n)},e.prototype.emplace\u003dfunction(t,e,r,n,i){var a\u003d4*t;return this.float32[a+0]\u003de,this.float32[a+1]\u003dr,this.float32[a+2]\u003dn,this.float32[a+3]\u003di,t},e}(Pi);ea.prototype.bytesPerElement\u003d16,Nn(\"StructArrayLayout4f16\",ea);var ra\u003dfunction(t){function e(){t.apply(this,arguments)}t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de;var r\u003d{anchorPointX:{configurable:!0},anchorPointY:{configurable:!0},x1:{configurable:!0},y1:{configurable:!0},x2:{configurable:!0},y2:{configurable:!0},featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0},anchorPoint:{configurable:!0}};return r.anchorPointX.get\u003dfunction(){return this._structArray.int16[this._pos2+0]},r.anchorPointY.get\u003dfunction(){return this._structArray.int16[this._pos2+1]},r.x1.get\u003dfunction(){return this._structArray.int16[this._pos2+2]},r.y1.get\u003dfunction(){return this._structArray.int16[this._pos2+3]},r.x2.get\u003dfunction(){return this._structArray.int16[this._pos2+4]},r.y2.get\u003dfunction(){return this._structArray.int16[this._pos2+5]},r.featureIndex.get\u003dfunction(){return this._structArray.uint32[this._pos4+3]},r.sourceLayerIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+8]},r.bucketIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+9]},r.anchorPoint.get\u003dfunction(){return new i(this.anchorPointX,this.anchorPointY)},Object.defineProperties(e.prototype,r),e}(Ci);ra.prototype.size\u003d20;var na\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.get\u003dfunction(t){return new ra(this,t)},e}(Vi);Nn(\"CollisionBoxArray\",na);var ia\u003dfunction(t){function e(){t.apply(this,arguments)}t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de;var r\u003d{anchorX:{configurable:!0},anchorY:{configurable:!0},glyphStartIndex:{configurable:!0},numGlyphs:{configurable:!0},vertexStartIndex:{configurable:!0},lineStartIndex:{configurable:!0},lineLength:{configurable:!0},segment:{configurable:!0},lowerSize:{configurable:!0},upperSize:{configurable:!0},lineOffsetX:{configurable:!0},lineOffsetY:{configurable:!0},writingMode:{configurable:!0},placedOrientation:{configurable:!0},hidden:{configurable:!0},crossTileID:{configurable:!0},associatedIconIndex:{configurable:!0}};return r.anchorX.get\u003dfunction(){return this._structArray.int16[this._pos2+0]},r.anchorY.get\u003dfunction(){return this._structArray.int16[this._pos2+1]},r.glyphStartIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+2]},r.numGlyphs.get\u003dfunction(){return this._structArray.uint16[this._pos2+3]},r.vertexStartIndex.get\u003dfunction(){return this._structArray.uint32[this._pos4+2]},r.lineStartIndex.get\u003dfunction(){return this._structArray.uint32[this._pos4+3]},r.lineLength.get\u003dfunction(){return this._structArray.uint32[this._pos4+4]},r.segment.get\u003dfunction(){return this._structArray.uint16[this._pos2+10]},r.lowerSize.get\u003dfunction(){return this._structArray.uint16[this._pos2+11]},r.upperSize.get\u003dfunction(){return this._structArray.uint16[this._pos2+12]},r.lineOffsetX.get\u003dfunction(){return this._structArray.float32[this._pos4+7]},r.lineOffsetY.get\u003dfunction(){return this._structArray.float32[this._pos4+8]},r.writingMode.get\u003dfunction(){return this._structArray.uint8[this._pos1+36]},r.placedOrientation.get\u003dfunction(){return this._structArray.uint8[this._pos1+37]},r.placedOrientation.set\u003dfunction(t){this._structArray.uint8[this._pos1+37]\u003dt},r.hidden.get\u003dfunction(){return this._structArray.uint8[this._pos1+38]},r.hidden.set\u003dfunction(t){this._structArray.uint8[this._pos1+38]\u003dt},r.crossTileID.get\u003dfunction(){return this._structArray.uint32[this._pos4+10]},r.crossTileID.set\u003dfunction(t){this._structArray.uint32[this._pos4+10]\u003dt},r.associatedIconIndex.get\u003dfunction(){return this._structArray.int16[this._pos2+22]},Object.defineProperties(e.prototype,r),e}(Ci);ia.prototype.size\u003d48;var aa\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.get\u003dfunction(t){return new ia(this,t)},e}(Wi);Nn(\"PlacedSymbolArray\",aa);var oa\u003dfunction(t){function e(){t.apply(this,arguments)}t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de;var r\u003d{anchorX:{configurable:!0},anchorY:{configurable:!0},rightJustifiedTextSymbolIndex:{configurable:!0},centerJustifiedTextSymbolIndex:{configurable:!0},leftJustifiedTextSymbolIndex:{configurable:!0},verticalPlacedTextSymbolIndex:{configurable:!0},placedIconSymbolIndex:{configurable:!0},verticalPlacedIconSymbolIndex:{configurable:!0},key:{configurable:!0},textBoxStartIndex:{configurable:!0},textBoxEndIndex:{configurable:!0},verticalTextBoxStartIndex:{configurable:!0},verticalTextBoxEndIndex:{configurable:!0},iconBoxStartIndex:{configurable:!0},iconBoxEndIndex:{configurable:!0},verticalIconBoxStartIndex:{configurable:!0},verticalIconBoxEndIndex:{configurable:!0},featureIndex:{configurable:!0},numHorizontalGlyphVertices:{configurable:!0},numVerticalGlyphVertices:{configurable:!0},numIconVertices:{configurable:!0},numVerticalIconVertices:{configurable:!0},useRuntimeCollisionCircles:{configurable:!0},crossTileID:{configurable:!0},textBoxScale:{configurable:!0},textOffset0:{configurable:!0},textOffset1:{configurable:!0},collisionCircleDiameter:{configurable:!0}};return r.anchorX.get\u003dfunction(){return this._structArray.int16[this._pos2+0]},r.anchorY.get\u003dfunction(){return this._structArray.int16[this._pos2+1]},r.rightJustifiedTextSymbolIndex.get\u003dfunction(){return this._structArray.int16[this._pos2+2]},r.centerJustifiedTextSymbolIndex.get\u003dfunction(){return this._structArray.int16[this._pos2+3]},r.leftJustifiedTextSymbolIndex.get\u003dfunction(){return this._structArray.int16[this._pos2+4]},r.verticalPlacedTextSymbolIndex.get\u003dfunction(){return this._structArray.int16[this._pos2+5]},r.placedIconSymbolIndex.get\u003dfunction(){return this._structArray.int16[this._pos2+6]},r.verticalPlacedIconSymbolIndex.get\u003dfunction(){return this._structArray.int16[this._pos2+7]},r.key.get\u003dfunction(){return this._structArray.uint16[this._pos2+8]},r.textBoxStartIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+9]},r.textBoxEndIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+10]},r.verticalTextBoxStartIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+11]},r.verticalTextBoxEndIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+12]},r.iconBoxStartIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+13]},r.iconBoxEndIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+14]},r.verticalIconBoxStartIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+15]},r.verticalIconBoxEndIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+16]},r.featureIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+17]},r.numHorizontalGlyphVertices.get\u003dfunction(){return this._structArray.uint16[this._pos2+18]},r.numVerticalGlyphVertices.get\u003dfunction(){return this._structArray.uint16[this._pos2+19]},r.numIconVertices.get\u003dfunction(){return this._structArray.uint16[this._pos2+20]},r.numVerticalIconVertices.get\u003dfunction(){return this._structArray.uint16[this._pos2+21]},r.useRuntimeCollisionCircles.get\u003dfunction(){return this._structArray.uint16[this._pos2+22]},r.crossTileID.get\u003dfunction(){return this._structArray.uint32[this._pos4+12]},r.crossTileID.set\u003dfunction(t){this._structArray.uint32[this._pos4+12]\u003dt},r.textBoxScale.get\u003dfunction(){return this._structArray.float32[this._pos4+13]},r.textOffset0.get\u003dfunction(){return this._structArray.float32[this._pos4+14]},r.textOffset1.get\u003dfunction(){return this._structArray.float32[this._pos4+15]},r.collisionCircleDiameter.get\u003dfunction(){return this._structArray.float32[this._pos4+16]},Object.defineProperties(e.prototype,r),e}(Ci);oa.prototype.size\u003d68;var sa\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.get\u003dfunction(t){return new oa(this,t)},e}(Xi);Nn(\"SymbolInstanceArray\",sa);var la\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getoffsetX\u003dfunction(t){return this.float32[1*t+0]},e}(Zi);Nn(\"GlyphOffsetArray\",la);var ca\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getx\u003dfunction(t){return this.int16[3*t+0]},e.prototype.gety\u003dfunction(t){return this.int16[3*t+1]},e.prototype.gettileUnitDistanceFromAnchor\u003dfunction(t){return this.int16[3*t+2]},e}(Ji);Nn(\"SymbolLineVertexArray\",ca);var ua\u003dfunction(t){function e(){t.apply(this,arguments)}t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de;var r\u003d{featureIndex:{configurable:!0},sourceLayerIndex:{configurable:!0},bucketIndex:{configurable:!0}};return r.featureIndex.get\u003dfunction(){return this._structArray.uint32[this._pos4+0]},r.sourceLayerIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+2]},r.bucketIndex.get\u003dfunction(){return this._structArray.uint16[this._pos2+3]},Object.defineProperties(e.prototype,r),e}(Ci);ua.prototype.size\u003d8;var fa\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.get\u003dfunction(t){return new ua(this,t)},e}(Ki);Nn(\"FeatureIndexArray\",fa);var ha\u003dIi([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,pa\u003dfunction(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d[]),this.segments\u003dt};function da(t,e){return 256*(t\u003dl(Math.floor(t),0,255))+(e\u003dl(Math.floor(e),0,255))}pa.prototype.prepareSegment\u003dfunction(t,e,r,n){var i\u003dthis.segments[this.segments.length-1];return t\u003epa.MAX_VERTEX_ARRAY_LENGTH\u0026\u0026_(\"Max vertices per segment is \"+pa.MAX_VERTEX_ARRAY_LENGTH+\": bucket requested \"+t),(!i||i.vertexLength+t\u003epa.MAX_VERTEX_ARRAY_LENGTH||i.sortKey!\u003d\u003dn)\u0026\u0026(i\u003d{vertexOffset:e.length,primitiveOffset:r.length,vertexLength:0,primitiveLength:0},void 0!\u003d\u003dn\u0026\u0026(i.sortKey\u003dn),this.segments.push(i)),i},pa.prototype.get\u003dfunction(){return this.segments},pa.prototype.destroy\u003dfunction(){for(var t\u003d0,e\u003dthis.segments;t\u003ce.length;t+\u003d1){var r\u003de[t];for(var n in r.vaos)r.vaos[n].destroy()}},pa.simpleSegment\u003dfunction(t,e,r,n){return new pa([{vertexOffset:t,primitiveOffset:e,vertexLength:r,primitiveLength:n,vaos:{},sortKey:0}])},pa.MAX_VERTEX_ARRAY_LENGTH\u003dMath.pow(2,16)-1,Nn(\"SegmentVector\",pa);var ma\u003dIi([{name:\"a_pattern_from\",components:4,type:\"Uint16\"},{name:\"a_pattern_to\",components:4,type:\"Uint16\"},{name:\"a_pixel_ratio_from\",components:1,type:\"Uint8\"},{name:\"a_pixel_ratio_to\",components:1,type:\"Uint8\"}]),ga\u003de((function(t){t.exports\u003dfunction(t,e){var r,n,i,a,o,s,l,c;for(r\u003d3\u0026t.length,n\u003dt.length-r,i\u003de,o\u003d3432918353,s\u003d461845907,c\u003d0;c\u003cn;)l\u003d255\u0026t.charCodeAt(c)|(255\u0026t.charCodeAt(++c))\u003c\u003c8|(255\u0026t.charCodeAt(++c))\u003c\u003c16|(255\u0026t.charCodeAt(++c))\u003c\u003c24,++c,i\u003d27492+(65535\u0026(a\u003d5*(65535\u0026(i\u003d(i^\u003dl\u003d(65535\u0026(l\u003d(l\u003d(65535\u0026l)*o+(((l\u003e\u003e\u003e16)*o\u002665535)\u003c\u003c16)\u00264294967295)\u003c\u003c15|l\u003e\u003e\u003e17))*s+(((l\u003e\u003e\u003e16)*s\u002665535)\u003c\u003c16)\u00264294967295)\u003c\u003c13|i\u003e\u003e\u003e19))+((5*(i\u003e\u003e\u003e16)\u002665535)\u003c\u003c16)\u00264294967295))+((58964+(a\u003e\u003e\u003e16)\u002665535)\u003c\u003c16);switch(l\u003d0,r){case 3:l^\u003d(255\u0026t.charCodeAt(c+2))\u003c\u003c16;case 2:l^\u003d(255\u0026t.charCodeAt(c+1))\u003c\u003c8;case 1:i^\u003dl\u003d(65535\u0026(l\u003d(l\u003d(65535\u0026(l^\u003d255\u0026t.charCodeAt(c)))*o+(((l\u003e\u003e\u003e16)*o\u002665535)\u003c\u003c16)\u00264294967295)\u003c\u003c15|l\u003e\u003e\u003e17))*s+(((l\u003e\u003e\u003e16)*s\u002665535)\u003c\u003c16)\u00264294967295}return i^\u003dt.length,i\u003d2246822507*(65535\u0026(i^\u003di\u003e\u003e\u003e16))+((2246822507*(i\u003e\u003e\u003e16)\u002665535)\u003c\u003c16)\u00264294967295,i\u003d3266489909*(65535\u0026(i^\u003di\u003e\u003e\u003e13))+((3266489909*(i\u003e\u003e\u003e16)\u002665535)\u003c\u003c16)\u00264294967295,(i^\u003di\u003e\u003e\u003e16)\u003e\u003e\u003e0}})),va\u003de((function(t){t.exports\u003dfunction(t,e){for(var r,n\u003dt.length,i\u003de^n,a\u003d0;n\u003e\u003d4;)r\u003d1540483477*(65535\u0026(r\u003d255\u0026t.charCodeAt(a)|(255\u0026t.charCodeAt(++a))\u003c\u003c8|(255\u0026t.charCodeAt(++a))\u003c\u003c16|(255\u0026t.charCodeAt(++a))\u003c\u003c24))+((1540483477*(r\u003e\u003e\u003e16)\u002665535)\u003c\u003c16),i\u003d1540483477*(65535\u0026i)+((1540483477*(i\u003e\u003e\u003e16)\u002665535)\u003c\u003c16)^(r\u003d1540483477*(65535\u0026(r^\u003dr\u003e\u003e\u003e24))+((1540483477*(r\u003e\u003e\u003e16)\u002665535)\u003c\u003c16)),n-\u003d4,++a;switch(n){case 3:i^\u003d(255\u0026t.charCodeAt(a+2))\u003c\u003c16;case 2:i^\u003d(255\u0026t.charCodeAt(a+1))\u003c\u003c8;case 1:i\u003d1540483477*(65535\u0026(i^\u003d255\u0026t.charCodeAt(a)))+((1540483477*(i\u003e\u003e\u003e16)\u002665535)\u003c\u003c16)}return i\u003d1540483477*(65535\u0026(i^\u003di\u003e\u003e\u003e13))+((1540483477*(i\u003e\u003e\u003e16)\u002665535)\u003c\u003c16),(i^\u003di\u003e\u003e\u003e15)\u003e\u003e\u003e0}})),ya\u003dga,xa\u003dga,ba\u003dva;ya.murmur3\u003dxa,ya.murmur2\u003dba;var _a\u003dfunction(){this.ids\u003d[],this.positions\u003d[],this.indexed\u003d!1};_a.prototype.add\u003dfunction(t,e,r,n){this.ids.push(Ta(t)),this.positions.push(e,r,n)},_a.prototype.getPositions\u003dfunction(t){for(var e\u003dTa(t),r\u003d0,n\u003dthis.ids.length-1;r\u003cn;){var i\u003dr+n\u003e\u003e1;this.ids[i]\u003e\u003de?n\u003di:r\u003di+1}for(var a\u003d[];this.ids[r]\u003d\u003d\u003de;){var o\u003dthis.positions[3*r],s\u003dthis.positions[3*r+1],l\u003dthis.positions[3*r+2];a.push({index:o,start:s,end:l}),r++}return a},_a.serialize\u003dfunction(t,e){var r\u003dnew Float64Array(t.ids),n\u003dnew Uint32Array(t.positions);return function t(e,r,n,i){for(;n\u003ci;){for(var a\u003de[n+i\u003e\u003e1],o\u003dn-1,s\u003di+1;;){do{o++}while(e[o]\u003ca);do{s--}while(e[s]\u003ea);if(o\u003e\u003ds)break;ka(e,o,s),ka(r,3*o,3*s),ka(r,3*o+1,3*s+1),ka(r,3*o+2,3*s+2)}s-n\u003ci-s?(t(e,r,n,s),n\u003ds+1):(t(e,r,s+1,i),i\u003ds)}}(r,n,0,r.length-1),e\u0026\u0026e.push(r.buffer,n.buffer),{ids:r,positions:n}},_a.deserialize\u003dfunction(t){var e\u003dnew _a;return e.ids\u003dt.ids,e.positions\u003dt.positions,e.indexed\u003d!0,e};var wa\u003dMath.pow(2,53)-1;function Ta(t){var e\u003d+t;return!isNaN(e)\u0026\u0026e\u003c\u003dwa?e:ya(String(t))}function ka(t,e,r){var n\u003dt[e];t[e]\u003dt[r],t[r]\u003dn}Nn(\"FeaturePositionMap\",_a);var Ma\u003dfunction(t,e){this.gl\u003dt.gl,this.location\u003de},Aa\u003dfunction(t){function e(e,r){t.call(this,e,r),this.current\u003d0}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){this.current!\u003d\u003dt\u0026\u0026(this.current\u003dt,this.gl.uniform1i(this.location,t))},e}(Ma),Sa\u003dfunction(t){function e(e,r){t.call(this,e,r),this.current\u003d0}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){this.current!\u003d\u003dt\u0026\u0026(this.current\u003dt,this.gl.uniform1f(this.location,t))},e}(Ma),Ea\u003dfunction(t){function e(e,r){t.call(this,e,r),this.current\u003d[0,0]}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){t[0]\u003d\u003d\u003dthis.current[0]\u0026\u0026t[1]\u003d\u003d\u003dthis.current[1]||(this.current\u003dt,this.gl.uniform2f(this.location,t[0],t[1]))},e}(Ma),La\u003dfunction(t){function e(e,r){t.call(this,e,r),this.current\u003d[0,0,0]}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){t[0]\u003d\u003d\u003dthis.current[0]\u0026\u0026t[1]\u003d\u003d\u003dthis.current[1]\u0026\u0026t[2]\u003d\u003d\u003dthis.current[2]||(this.current\u003dt,this.gl.uniform3f(this.location,t[0],t[1],t[2]))},e}(Ma),Ca\u003dfunction(t){function e(e,r){t.call(this,e,r),this.current\u003d[0,0,0,0]}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){t[0]\u003d\u003d\u003dthis.current[0]\u0026\u0026t[1]\u003d\u003d\u003dthis.current[1]\u0026\u0026t[2]\u003d\u003d\u003dthis.current[2]\u0026\u0026t[3]\u003d\u003d\u003dthis.current[3]||(this.current\u003dt,this.gl.uniform4f(this.location,t[0],t[1],t[2],t[3]))},e}(Ma),Pa\u003dfunction(t){function e(e,r){t.call(this,e,r),this.current\u003dte.transparent}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){t.r\u003d\u003d\u003dthis.current.r\u0026\u0026t.g\u003d\u003d\u003dthis.current.g\u0026\u0026t.b\u003d\u003d\u003dthis.current.b\u0026\u0026t.a\u003d\u003d\u003dthis.current.a||(this.current\u003dt,this.gl.uniform4f(this.location,t.r,t.g,t.b,t.a))},e}(Ma),Ia\u003dnew Float32Array(16),Oa\u003dfunction(t){function e(e,r){t.call(this,e,r),this.current\u003dIa}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){if(t[12]!\u003d\u003dthis.current[12]||t[0]!\u003d\u003dthis.current[0])return this.current\u003dt,void this.gl.uniformMatrix4fv(this.location,!1,t);for(var e\u003d1;e\u003c16;e++)if(t[e]!\u003d\u003dthis.current[e]){this.current\u003dt,this.gl.uniformMatrix4fv(this.location,!1,t);break}},e}(Ma);function za(t){return[da(255*t.r,255*t.g),da(255*t.b,255*t.a)]}var Da\u003dfunction(t,e,r){this.value\u003dt,this.uniformNames\u003de.map((function(t){return\"u_\"+t})),this.type\u003dr};Da.prototype.setUniform\u003dfunction(t,e,r){t.set(r.constantOr(this.value))},Da.prototype.getBinding\u003dfunction(t,e,r){return\"color\"\u003d\u003d\u003dthis.type?new Pa(t,e):new Sa(t,e)};var Ra\u003dfunction(t,e){this.uniformNames\u003de.map((function(t){return\"u_\"+t})),this.patternFrom\u003dnull,this.patternTo\u003dnull,this.pixelRatioFrom\u003d1,this.pixelRatioTo\u003d1};Ra.prototype.setConstantPatternPositions\u003dfunction(t,e){this.pixelRatioFrom\u003de.pixelRatio,this.pixelRatioTo\u003dt.pixelRatio,this.patternFrom\u003de.tlbr,this.patternTo\u003dt.tlbr},Ra.prototype.setUniform\u003dfunction(t,e,r,n){var i\u003d\"u_pattern_to\"\u003d\u003d\u003dn?this.patternTo:\"u_pattern_from\"\u003d\u003d\u003dn?this.patternFrom:\"u_pixel_ratio_to\"\u003d\u003d\u003dn?this.pixelRatioTo:\"u_pixel_ratio_from\"\u003d\u003d\u003dn?this.pixelRatioFrom:null;i\u0026\u0026t.set(i)},Ra.prototype.getBinding\u003dfunction(t,e,r){return\"u_pattern\"\u003d\u003d\u003dr.substr(0,9)?new Ca(t,e):new Sa(t,e)};var Fa\u003dfunction(t,e,r,n){this.expression\u003dt,this.type\u003dr,this.maxValue\u003d0,this.paintVertexAttributes\u003de.map((function(t){return{name:\"a_\"+t,type:\"Float32\",components:\"color\"\u003d\u003d\u003dr?2:1,offset:0}})),this.paintVertexArray\u003dnew n};Fa.prototype.populatePaintArray\u003dfunction(t,e,r,n,i){var a\u003dthis.paintVertexArray.length,o\u003dthis.expression.evaluate(new pi(0),e,{},n,[],i);this.paintVertexArray.resize(t),this._setPaintValue(a,t,o)},Fa.prototype.updatePaintArray\u003dfunction(t,e,r,n){var i\u003dthis.expression.evaluate({zoom:0},r,n);this._setPaintValue(t,e,i)},Fa.prototype._setPaintValue\u003dfunction(t,e,r){if(\"color\"\u003d\u003d\u003dthis.type)for(var n\u003dza(r),i\u003dt;i\u003ce;i++)this.paintVertexArray.emplace(i,n[0],n[1]);else{for(var a\u003dt;a\u003ce;a++)this.paintVertexArray.emplace(a,r);this.maxValue\u003dMath.max(this.maxValue,Math.abs(r))}},Fa.prototype.upload\u003dfunction(t){this.paintVertexArray\u0026\u0026this.paintVertexArray.arrayBuffer\u0026\u0026(this.paintVertexBuffer\u0026\u0026this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer\u003dt.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Fa.prototype.destroy\u003dfunction(){this.paintVertexBuffer\u0026\u0026this.paintVertexBuffer.destroy()};var Ba\u003dfunction(t,e,r,n,i,a){this.expression\u003dt,this.uniformNames\u003de.map((function(t){return\"u_\"+t+\"_t\"})),this.type\u003dr,this.useIntegerZoom\u003dn,this.zoom\u003di,this.maxValue\u003d0,this.paintVertexAttributes\u003de.map((function(t){return{name:\"a_\"+t,type:\"Float32\",components:\"color\"\u003d\u003d\u003dr?4:2,offset:0}})),this.paintVertexArray\u003dnew a};Ba.prototype.populatePaintArray\u003dfunction(t,e,r,n,i){var a\u003dthis.expression.evaluate(new pi(this.zoom),e,{},n,[],i),o\u003dthis.expression.evaluate(new pi(this.zoom+1),e,{},n,[],i),s\u003dthis.paintVertexArray.length;this.paintVertexArray.resize(t),this._setPaintValue(s,t,a,o)},Ba.prototype.updatePaintArray\u003dfunction(t,e,r,n){var i\u003dthis.expression.evaluate({zoom:this.zoom},r,n),a\u003dthis.expression.evaluate({zoom:this.zoom+1},r,n);this._setPaintValue(t,e,i,a)},Ba.prototype._setPaintValue\u003dfunction(t,e,r,n){if(\"color\"\u003d\u003d\u003dthis.type)for(var i\u003dza(r),a\u003dza(n),o\u003dt;o\u003ce;o++)this.paintVertexArray.emplace(o,i[0],i[1],a[0],a[1]);else{for(var s\u003dt;s\u003ce;s++)this.paintVertexArray.emplace(s,r,n);this.maxValue\u003dMath.max(this.maxValue,Math.abs(r),Math.abs(n))}},Ba.prototype.upload\u003dfunction(t){this.paintVertexArray\u0026\u0026this.paintVertexArray.arrayBuffer\u0026\u0026(this.paintVertexBuffer\u0026\u0026this.paintVertexBuffer.buffer?this.paintVertexBuffer.updateData(this.paintVertexArray):this.paintVertexBuffer\u003dt.createVertexBuffer(this.paintVertexArray,this.paintVertexAttributes,this.expression.isStateDependent))},Ba.prototype.destroy\u003dfunction(){this.paintVertexBuffer\u0026\u0026this.paintVertexBuffer.destroy()},Ba.prototype.setUniform\u003dfunction(t,e){var r\u003dthis.useIntegerZoom?Math.floor(e.zoom):e.zoom,n\u003dl(this.expression.interpolationFactor(r,this.zoom,this.zoom+1),0,1);t.set(n)},Ba.prototype.getBinding\u003dfunction(t,e,r){return new Sa(t,e)};var Na\u003dfunction(t,e,r,n,i,a){this.expression\u003dt,this.type\u003de,this.useIntegerZoom\u003dr,this.zoom\u003dn,this.layerId\u003da,this.zoomInPaintVertexArray\u003dnew i,this.zoomOutPaintVertexArray\u003dnew i};Na.prototype.populatePaintArray\u003dfunction(t,e,r){var n\u003dthis.zoomInPaintVertexArray.length;this.zoomInPaintVertexArray.resize(t),this.zoomOutPaintVertexArray.resize(t),this._setPaintValues(n,t,e.patterns\u0026\u0026e.patterns[this.layerId],r)},Na.prototype.updatePaintArray\u003dfunction(t,e,r,n,i){this._setPaintValues(t,e,r.patterns\u0026\u0026r.patterns[this.layerId],i)},Na.prototype._setPaintValues\u003dfunction(t,e,r,n){if(n\u0026\u0026r){var i\u003dr.min,a\u003dr.mid,o\u003dr.max,s\u003dn[i],l\u003dn[a],c\u003dn[o];if(s\u0026\u0026l\u0026\u0026c)for(var u\u003dt;u\u003ce;u++)this.zoomInPaintVertexArray.emplace(u,l.tl[0],l.tl[1],l.br[0],l.br[1],s.tl[0],s.tl[1],s.br[0],s.br[1],l.pixelRatio,s.pixelRatio),this.zoomOutPaintVertexArray.emplace(u,l.tl[0],l.tl[1],l.br[0],l.br[1],c.tl[0],c.tl[1],c.br[0],c.br[1],l.pixelRatio,c.pixelRatio)}},Na.prototype.upload\u003dfunction(t){this.zoomInPaintVertexArray\u0026\u0026this.zoomInPaintVertexArray.arrayBuffer\u0026\u0026this.zoomOutPaintVertexArray\u0026\u0026this.zoomOutPaintVertexArray.arrayBuffer\u0026\u0026(this.zoomInPaintVertexBuffer\u003dt.createVertexBuffer(this.zoomInPaintVertexArray,ma.members,this.expression.isStateDependent),this.zoomOutPaintVertexBuffer\u003dt.createVertexBuffer(this.zoomOutPaintVertexArray,ma.members,this.expression.isStateDependent))},Na.prototype.destroy\u003dfunction(){this.zoomOutPaintVertexBuffer\u0026\u0026this.zoomOutPaintVertexBuffer.destroy(),this.zoomInPaintVertexBuffer\u0026\u0026this.zoomInPaintVertexBuffer.destroy()};var ja\u003dfunction(t,e,r,n){this.binders\u003d{},this.layoutAttributes\u003dn,this._buffers\u003d[];var i\u003d[];for(var a in t.paint._values)if(r(a)){var o\u003dt.paint.get(a);if(o instanceof bi\u0026\u0026zr(o.property.specification)){var s\u003dVa(a,t.type),l\u003do.value,c\u003do.property.specification.type,u\u003do.property.useIntegerZoom,f\u003do.property.specification[\"property-type\"],h\u003d\"cross-faded\"\u003d\u003d\u003df||\"cross-faded-data-driven\"\u003d\u003d\u003df;if(\"constant\"\u003d\u003d\u003dl.kind)this.binders[a]\u003dh?new Ra(l.value,s):new Da(l.value,s,c),i.push(\"/u_\"+a);else if(\"source\"\u003d\u003d\u003dl.kind||h){var p\u003dqa(a,c,\"source\");this.binders[a]\u003dh?new Na(l,c,u,e,p,t.id):new Fa(l,s,c,p),i.push(\"/a_\"+a)}else{var d\u003dqa(a,c,\"composite\");this.binders[a]\u003dnew Ba(l,s,c,u,e,d),i.push(\"/z_\"+a)}}}this.cacheKey\u003di.sort().join(\"\")};ja.prototype.getMaxValue\u003dfunction(t){var e\u003dthis.binders[t];return e instanceof Fa||e instanceof Ba?e.maxValue:0},ja.prototype.populatePaintArrays\u003dfunction(t,e,r,n,i){for(var a in this.binders){var o\u003dthis.binders[a];(o instanceof Fa||o instanceof Ba||o instanceof Na)\u0026\u0026o.populatePaintArray(t,e,r,n,i)}},ja.prototype.setConstantPatternPositions\u003dfunction(t,e){for(var r in this.binders){var n\u003dthis.binders[r];n instanceof Ra\u0026\u0026n.setConstantPatternPositions(t,e)}},ja.prototype.updatePaintArrays\u003dfunction(t,e,r,n,i){var a\u003d!1;for(var o in t)for(var s\u003d0,l\u003de.getPositions(o);s\u003cl.length;s+\u003d1){var c\u003dl[s],u\u003dr.feature(c.index);for(var f in this.binders){var h\u003dthis.binders[f];if((h instanceof Fa||h instanceof Ba||h instanceof Na)\u0026\u0026!0\u003d\u003d\u003dh.expression.isStateDependent){var p\u003dn.paint.get(f);h.expression\u003dp.value,h.updatePaintArray(c.start,c.end,u,t[o],i),a\u003d!0}}}return a},ja.prototype.defines\u003dfunction(){var t\u003d[];for(var e in this.binders){var r\u003dthis.binders[e];(r instanceof Da||r instanceof Ra)\u0026\u0026t.push.apply(t,r.uniformNames.map((function(t){return\"#define HAS_UNIFORM_\"+t})))}return t},ja.prototype.getPaintVertexBuffers\u003dfunction(){return this._buffers},ja.prototype.getUniforms\u003dfunction(t,e){var r\u003d[];for(var n in this.binders){var i\u003dthis.binders[n];if(i instanceof Da||i instanceof Ra||i instanceof Ba)for(var a\u003d0,o\u003di.uniformNames;a\u003co.length;a+\u003d1){var s\u003do[a];if(e[s]){var l\u003di.getBinding(t,e[s],s);r.push({name:s,property:n,binding:l})}}}return r},ja.prototype.setUniforms\u003dfunction(t,e,r,n){for(var i\u003d0,a\u003de;i\u003ca.length;i+\u003d1){var o\u003da[i],s\u003do.name,l\u003do.property,c\u003do.binding;this.binders[l].setUniform(c,n,r.get(l),s)}},ja.prototype.updatePaintBuffers\u003dfunction(t){for(var e in this._buffers\u003d[],this.binders){var r\u003dthis.binders[e];if(t\u0026\u0026r instanceof Na){var n\u003d2\u003d\u003d\u003dt.fromScale?r.zoomInPaintVertexBuffer:r.zoomOutPaintVertexBuffer;n\u0026\u0026this._buffers.push(n)}else(r instanceof Fa||r instanceof Ba)\u0026\u0026r.paintVertexBuffer\u0026\u0026this._buffers.push(r.paintVertexBuffer)}},ja.prototype.upload\u003dfunction(t){for(var e in this.binders){var r\u003dthis.binders[e];(r instanceof Fa||r instanceof Ba||r instanceof Na)\u0026\u0026r.upload(t)}this.updatePaintBuffers()},ja.prototype.destroy\u003dfunction(){for(var t in this.binders){var e\u003dthis.binders[t];(e instanceof Fa||e instanceof Ba||e instanceof Na)\u0026\u0026e.destroy()}};var Ua\u003dfunction(t,e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dfunction(){return!0}),this.programConfigurations\u003d{};for(var i\u003d0,a\u003de;i\u003ca.length;i+\u003d1){var o\u003da[i];this.programConfigurations[o.id]\u003dnew ja(o,r,n,t)}this.needsUpload\u003d!1,this._featureMap\u003dnew _a,this._bufferOffset\u003d0};function Va(t,e){return{\"text-opacity\":[\"opacity\"],\"icon-opacity\":[\"opacity\"],\"text-color\":[\"fill_color\"],\"icon-color\":[\"fill_color\"],\"text-halo-color\":[\"halo_color\"],\"icon-halo-color\":[\"halo_color\"],\"text-halo-blur\":[\"halo_blur\"],\"icon-halo-blur\":[\"halo_blur\"],\"text-halo-width\":[\"halo_width\"],\"icon-halo-width\":[\"halo_width\"],\"line-gap-width\":[\"gapwidth\"],\"line-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"],\"fill-extrusion-pattern\":[\"pattern_to\",\"pattern_from\",\"pixel_ratio_to\",\"pixel_ratio_from\"]}[t]||[t.replace(e+\"-\",\"\").replace(/-/g,\"_\")]}function qa(t,e,r){var n\u003d{color:{source:ta,composite:ea},number:{source:Zi,composite:ta}},i\u003dfunction(t){return{\"line-pattern\":{source:Bi,composite:Bi},\"fill-pattern\":{source:Bi,composite:Bi},\"fill-extrusion-pattern\":{source:Bi,composite:Bi}}[t]}(t);return i\u0026\u0026i[r]||n[e][r]}Ua.prototype.populatePaintArrays\u003dfunction(t,e,r,n,i,a){for(var o in this.programConfigurations)this.programConfigurations[o].populatePaintArrays(t,e,n,i,a);void 0!\u003d\u003de.id\u0026\u0026this._featureMap.add(e.id,r,this._bufferOffset,t),this._bufferOffset\u003dt,this.needsUpload\u003d!0},Ua.prototype.updatePaintArrays\u003dfunction(t,e,r,n){for(var i\u003d0,a\u003dr;i\u003ca.length;i+\u003d1){var o\u003da[i];this.needsUpload\u003dthis.programConfigurations[o.id].updatePaintArrays(t,this._featureMap,e,o,n)||this.needsUpload}},Ua.prototype.get\u003dfunction(t){return this.programConfigurations[t]},Ua.prototype.upload\u003dfunction(t){if(this.needsUpload){for(var e in this.programConfigurations)this.programConfigurations[e].upload(t);this.needsUpload\u003d!1}},Ua.prototype.destroy\u003dfunction(){for(var t in this.programConfigurations)this.programConfigurations[t].destroy()},Nn(\"ConstantBinder\",Da),Nn(\"CrossFadedConstantBinder\",Ra),Nn(\"SourceExpressionBinder\",Fa),Nn(\"CrossFadedCompositeBinder\",Na),Nn(\"CompositeExpressionBinder\",Ba),Nn(\"ProgramConfiguration\",ja,{omit:[\"_buffers\"]}),Nn(\"ProgramConfigurationSet\",Ua);var Ha,Ga\u003d(Ha\u003d15,{min:-1*Math.pow(2,Ha-1),max:Math.pow(2,Ha-1)-1});function Ya(t){for(var e\u003d8192/t.extent,r\u003dt.loadGeometry(),n\u003d0;n\u003cr.length;n++)for(var i\u003dr[n],a\u003d0;a\u003ci.length;a++){var o\u003di[a];o.x\u003dMath.round(o.x*e),o.y\u003dMath.round(o.y*e),(o.x\u003cGa.min||o.x\u003eGa.max||o.y\u003cGa.min||o.y\u003eGa.max)\u0026\u0026(_(\"Geometry exceeds allowed extent, reduce your vector tile buffer size\"),o.x\u003dl(o.x,Ga.min,Ga.max),o.y\u003dl(o.y,Ga.min,Ga.max))}return r}function Wa(t,e,r,n,i){t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2)}var Xa\u003dfunction(t){this.zoom\u003dt.zoom,this.overscaling\u003dt.overscaling,this.layers\u003dt.layers,this.layerIds\u003dthis.layers.map((function(t){return t.id})),this.index\u003dt.index,this.hasPattern\u003d!1,this.layoutVertexArray\u003dnew zi,this.indexArray\u003dnew Yi,this.segments\u003dnew pa,this.programConfigurations\u003dnew Ua(ha,t.layers,t.zoom),this.stateDependentLayerIds\u003dthis.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function Za(t,e){for(var r\u003d0;r\u003ct.length;r++)if(io(e,t[r]))return!0;for(var n\u003d0;n\u003ce.length;n++)if(io(t,e[n]))return!0;return!!$a(t,e)}function Ja(t,e,r){return!!io(t,e)||!!eo(e,t,r)}function Ka(t,e){if(1\u003d\u003d\u003dt.length)return no(e,t[0]);for(var r\u003d0;r\u003ce.length;r++)for(var n\u003de[r],i\u003d0;i\u003cn.length;i++)if(io(t,n[i]))return!0;for(var a\u003d0;a\u003ct.length;a++)if(no(e,t[a]))return!0;for(var o\u003d0;o\u003ce.length;o++)if($a(t,e[o]))return!0;return!1}function Qa(t,e,r){if(t.length\u003e1){if($a(t,e))return!0;for(var n\u003d0;n\u003ce.length;n++)if(eo(e[n],t,r))return!0}for(var i\u003d0;i\u003ct.length;i++)if(eo(t[i],e,r))return!0;return!1}function $a(t,e){if(0\u003d\u003d\u003dt.length||0\u003d\u003d\u003de.length)return!1;for(var r\u003d0;r\u003ct.length-1;r++)for(var n\u003dt[r],i\u003dt[r+1],a\u003d0;a\u003ce.length-1;a++){if(to(n,i,e[a],e[a+1]))return!0}return!1}function to(t,e,r,n){return w(t,r,n)!\u003d\u003dw(e,r,n)\u0026\u0026w(t,e,r)!\u003d\u003dw(t,e,n)}function eo(t,e,r){var n\u003dr*r;if(1\u003d\u003d\u003de.length)return t.distSqr(e[0])\u003cn;for(var i\u003d1;i\u003ce.length;i++){if(ro(t,e[i-1],e[i])\u003cn)return!0}return!1}function ro(t,e,r){var n\u003de.distSqr(r);if(0\u003d\u003d\u003dn)return t.distSqr(e);var i\u003d((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return i\u003c0?t.distSqr(e):i\u003e1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function no(t,e){for(var r,n,i,a\u003d!1,o\u003d0;o\u003ct.length;o++)for(var s\u003d0,l\u003d(r\u003dt[o]).length-1;s\u003cr.length;l\u003ds++)n\u003dr[s],i\u003dr[l],n.y\u003ee.y!\u003di.y\u003ee.y\u0026\u0026e.x\u003c(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x\u0026\u0026(a\u003d!a);return a}function io(t,e){for(var r\u003d!1,n\u003d0,i\u003dt.length-1;n\u003ct.length;i\u003dn++){var a\u003dt[n],o\u003dt[i];a.y\u003ee.y!\u003do.y\u003ee.y\u0026\u0026e.x\u003c(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x\u0026\u0026(r\u003d!r)}return r}function ao(t,e,r){var n\u003dr[0],i\u003dr[2];if(t.x\u003cn.x\u0026\u0026e.x\u003cn.x||t.x\u003ei.x\u0026\u0026e.x\u003ei.x||t.y\u003cn.y\u0026\u0026e.y\u003cn.y||t.y\u003ei.y\u0026\u0026e.y\u003ei.y)return!1;var a\u003dw(t,e,r[0]);return a!\u003d\u003dw(t,e,r[1])||a!\u003d\u003dw(t,e,r[2])||a!\u003d\u003dw(t,e,r[3])}function oo(t,e,r){var n\u003de.paint.get(t).value;return\"constant\"\u003d\u003d\u003dn.kind?n.value:r.programConfigurations.get(e.id).getMaxValue(t)}function so(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function lo(t,e,r,n,a){if(!e[0]\u0026\u0026!e[1])return t;var o\u003di.convert(e)._mult(a);\"viewport\"\u003d\u003d\u003dr\u0026\u0026o._rotate(-n);for(var s\u003d[],l\u003d0;l\u003ct.length;l++){var c\u003dt[l];s.push(c.sub(o))}return s}Xa.prototype.populate\u003dfunction(t,e,r){var n\u003dthis.layers[0],i\u003d[],a\u003dnull;\"circle\"\u003d\u003d\u003dn.type\u0026\u0026(a\u003dn.layout.get(\"circle-sort-key\"));for(var o\u003d0,s\u003dt;o\u003cs.length;o+\u003d1){var l\u003ds[o],c\u003dl.feature,u\u003dl.id,f\u003dl.index,h\u003dl.sourceLayerIndex,p\u003dthis.layers[0]._featureFilter.needGeometry,d\u003d{type:c.type,id:u,properties:c.properties,geometry:p?Ya(c):[]};if(this.layers[0]._featureFilter.filter(new pi(this.zoom),d,r)){p||(d.geometry\u003dYa(c));var m\u003da?a.evaluate(d,{},r):void 0,g\u003d{id:u,properties:c.properties,type:c.type,sourceLayerIndex:h,index:f,geometry:d.geometry,patterns:{},sortKey:m};i.push(g)}}a\u0026\u0026i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var v\u003d0,y\u003di;v\u003cy.length;v+\u003d1){var x\u003dy[v],b\u003dx,_\u003db.geometry,w\u003db.index,T\u003db.sourceLayerIndex,k\u003dt[w].feature;this.addFeature(x,_,w,r),e.featureIndex.insert(k,_,w,T,this.index)}},Xa.prototype.update\u003dfunction(t,e,r){this.stateDependentLayers.length\u0026\u0026this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Xa.prototype.isEmpty\u003dfunction(){return 0\u003d\u003d\u003dthis.layoutVertexArray.length},Xa.prototype.uploadPending\u003dfunction(){return!this.uploaded||this.programConfigurations.needsUpload},Xa.prototype.upload\u003dfunction(t){this.uploaded||(this.layoutVertexBuffer\u003dt.createVertexBuffer(this.layoutVertexArray,ha),this.indexBuffer\u003dt.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded\u003d!0},Xa.prototype.destroy\u003dfunction(){this.layoutVertexBuffer\u0026\u0026(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Xa.prototype.addFeature\u003dfunction(t,e,r,n){for(var i\u003d0,a\u003de;i\u003ca.length;i+\u003d1)for(var o\u003d0,s\u003da[i];o\u003cs.length;o+\u003d1){var l\u003ds[o],c\u003dl.x,u\u003dl.y;if(!(c\u003c0||c\u003e\u003d8192||u\u003c0||u\u003e\u003d8192)){var f\u003dthis.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray,t.sortKey),h\u003df.vertexLength;Wa(this.layoutVertexArray,c,u,-1,-1),Wa(this.layoutVertexArray,c,u,1,-1),Wa(this.layoutVertexArray,c,u,1,1),Wa(this.layoutVertexArray,c,u,-1,1),this.indexArray.emplaceBack(h,h+1,h+2),this.indexArray.emplaceBack(h,h+3,h+2),f.vertexLength+\u003d4,f.primitiveLength+\u003d2}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,{},n)},Nn(\"CircleBucket\",Xa,{omit:[\"layers\"]});var co\u003dnew Si({\"circle-sort-key\":new Ti(Lt.layout_circle[\"circle-sort-key\"])}),uo\u003d{paint:new Si({\"circle-radius\":new Ti(Lt.paint_circle[\"circle-radius\"]),\"circle-color\":new Ti(Lt.paint_circle[\"circle-color\"]),\"circle-blur\":new Ti(Lt.paint_circle[\"circle-blur\"]),\"circle-opacity\":new Ti(Lt.paint_circle[\"circle-opacity\"]),\"circle-translate\":new wi(Lt.paint_circle[\"circle-translate\"]),\"circle-translate-anchor\":new wi(Lt.paint_circle[\"circle-translate-anchor\"]),\"circle-pitch-scale\":new wi(Lt.paint_circle[\"circle-pitch-scale\"]),\"circle-pitch-alignment\":new wi(Lt.paint_circle[\"circle-pitch-alignment\"]),\"circle-stroke-width\":new Ti(Lt.paint_circle[\"circle-stroke-width\"]),\"circle-stroke-color\":new Ti(Lt.paint_circle[\"circle-stroke-color\"]),\"circle-stroke-opacity\":new Ti(Lt.paint_circle[\"circle-stroke-opacity\"])}),layout:co},fo\u003d\"undefined\"!\u003dtypeof Float32Array?Float32Array:Array;function ho(t){return t[0]\u003d1,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d1,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d1,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0,t[15]\u003d1,t}function po(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3],s\u003de[4],l\u003de[5],c\u003de[6],u\u003de[7],f\u003de[8],h\u003de[9],p\u003de[10],d\u003de[11],m\u003de[12],g\u003de[13],v\u003de[14],y\u003de[15],x\u003dr[0],b\u003dr[1],_\u003dr[2],w\u003dr[3];return t[0]\u003dx*n+b*s+_*f+w*m,t[1]\u003dx*i+b*l+_*h+w*g,t[2]\u003dx*a+b*c+_*p+w*v,t[3]\u003dx*o+b*u+_*d+w*y,x\u003dr[4],b\u003dr[5],_\u003dr[6],w\u003dr[7],t[4]\u003dx*n+b*s+_*f+w*m,t[5]\u003dx*i+b*l+_*h+w*g,t[6]\u003dx*a+b*c+_*p+w*v,t[7]\u003dx*o+b*u+_*d+w*y,x\u003dr[8],b\u003dr[9],_\u003dr[10],w\u003dr[11],t[8]\u003dx*n+b*s+_*f+w*m,t[9]\u003dx*i+b*l+_*h+w*g,t[10]\u003dx*a+b*c+_*p+w*v,t[11]\u003dx*o+b*u+_*d+w*y,x\u003dr[12],b\u003dr[13],_\u003dr[14],w\u003dr[15],t[12]\u003dx*n+b*s+_*f+w*m,t[13]\u003dx*i+b*l+_*h+w*g,t[14]\u003dx*a+b*c+_*p+w*v,t[15]\u003dx*o+b*u+_*d+w*y,t}Math.hypot||(Math.hypot\u003dfunction(){for(var t\u003darguments,e\u003d0,r\u003darguments.length;r--;)e+\u003dt[r]*t[r];return Math.sqrt(e)});var mo\u003dpo;var go,vo,yo\u003dfunction(t,e,r){return t[0]\u003de[0]-r[0],t[1]\u003de[1]-r[1],t[2]\u003de[2]-r[2],t};go\u003dnew fo(3),fo!\u003dFloat32Array\u0026\u0026(go[0]\u003d0,go[1]\u003d0,go[2]\u003d0),vo\u003dgo;function xo(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3];return t[0]\u003dr[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]\u003dr[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]\u003dr[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]\u003dr[3]*n+r[7]*i+r[11]*a+r[15]*o,t}!function(){var t\u003dfunction(){var t\u003dnew fo(4);return fo!\u003dFloat32Array\u0026\u0026(t[0]\u003d0,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0),t}()}();var bo\u003dfunction(t){var e\u003dt[0],r\u003dt[1];return e*e+r*r},_o\u003d(function(){var t\u003dfunction(){var t\u003dnew fo(2);return fo!\u003dFloat32Array\u0026\u0026(t[0]\u003d0,t[1]\u003d0),t}()}(),function(t){function e(e){t.call(this,e,uo)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.createBucket\u003dfunction(t){return new Xa(t)},e.prototype.queryRadius\u003dfunction(t){var e\u003dt;return oo(\"circle-radius\",this,e)+oo(\"circle-stroke-width\",this,e)+so(this.paint.get(\"circle-translate\"))},e.prototype.queryIntersectsFeature\u003dfunction(t,e,r,n,i,a,o,s){for(var l\u003dlo(t,this.paint.get(\"circle-translate\"),this.paint.get(\"circle-translate-anchor\"),a.angle,o),c\u003dthis.paint.get(\"circle-radius\").evaluate(e,r)+this.paint.get(\"circle-stroke-width\").evaluate(e,r),u\u003d\"map\"\u003d\u003d\u003dthis.paint.get(\"circle-pitch-alignment\"),f\u003du?l:function(t,e){return t.map((function(t){return wo(t,e)}))}(l,s),h\u003du?c*o:c,p\u003d0,d\u003dn;p\u003cd.length;p+\u003d1)for(var m\u003d0,g\u003dd[p];m\u003cg.length;m+\u003d1){var v\u003dg[m],y\u003du?v:wo(v,s),x\u003dh,b\u003dxo([],[v.x,v.y,0,1],s);if(\"viewport\"\u003d\u003d\u003dthis.paint.get(\"circle-pitch-scale\")\u0026\u0026\"map\"\u003d\u003d\u003dthis.paint.get(\"circle-pitch-alignment\")?x*\u003db[3]/a.cameraToCenterDistance:\"map\"\u003d\u003d\u003dthis.paint.get(\"circle-pitch-scale\")\u0026\u0026\"viewport\"\u003d\u003d\u003dthis.paint.get(\"circle-pitch-alignment\")\u0026\u0026(x*\u003da.cameraToCenterDistance/b[3]),Ja(f,y,x))return!0}return!1},e}(Ei));function wo(t,e){var r\u003dxo([],[t.x,t.y,0,1],e);return new i(r[0]/r[3],r[1]/r[3])}var To\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e}(Xa);function ko(t,e,r,n){var i\u003de.width,a\u003de.height;if(n){if(n instanceof Uint8ClampedArray)n\u003dnew Uint8Array(n.buffer);else if(n.length!\u003d\u003di*a*r)throw new RangeError(\"mismatched image size\")}else n\u003dnew Uint8Array(i*a*r);return t.width\u003di,t.height\u003da,t.data\u003dn,t}function Mo(t,e,r){var n\u003de.width,i\u003de.height;if(n!\u003d\u003dt.width||i!\u003d\u003dt.height){var a\u003dko({},{width:n,height:i},r);Ao(t,a,{x:0,y:0},{x:0,y:0},{width:Math.min(t.width,n),height:Math.min(t.height,i)},r),t.width\u003dn,t.height\u003di,t.data\u003da.data}}function Ao(t,e,r,n,i,a){if(0\u003d\u003d\u003di.width||0\u003d\u003d\u003di.height)return e;if(i.width\u003et.width||i.height\u003et.height||r.x\u003et.width-i.width||r.y\u003et.height-i.height)throw new RangeError(\"out of range source coordinates for image copy\");if(i.width\u003ee.width||i.height\u003ee.height||n.x\u003ee.width-i.width||n.y\u003ee.height-i.height)throw new RangeError(\"out of range destination coordinates for image copy\");for(var o\u003dt.data,s\u003de.data,l\u003d0;l\u003ci.height;l++)for(var c\u003d((r.y+l)*t.width+r.x)*a,u\u003d((n.y+l)*e.width+n.x)*a,f\u003d0;f\u003ci.width*a;f++)s[u+f]\u003do[c+f];return e}Nn(\"HeatmapBucket\",To,{omit:[\"layers\"]});var So\u003dfunction(t,e){ko(this,t,1,e)};So.prototype.resize\u003dfunction(t){Mo(this,t,1)},So.prototype.clone\u003dfunction(){return new So({width:this.width,height:this.height},new Uint8Array(this.data))},So.copy\u003dfunction(t,e,r,n,i){Ao(t,e,r,n,i,1)};var Eo\u003dfunction(t,e){ko(this,t,4,e)};Eo.prototype.resize\u003dfunction(t){Mo(this,t,4)},Eo.prototype.replace\u003dfunction(t,e){e?this.data.set(t):t instanceof Uint8ClampedArray?this.data\u003dnew Uint8Array(t.buffer):this.data\u003dt},Eo.prototype.clone\u003dfunction(){return new Eo({width:this.width,height:this.height},new Uint8Array(this.data))},Eo.copy\u003dfunction(t,e,r,n,i){Ao(t,e,r,n,i,4)},Nn(\"AlphaImage\",So),Nn(\"RGBAImage\",Eo);var Lo\u003d{paint:new Si({\"heatmap-radius\":new Ti(Lt.paint_heatmap[\"heatmap-radius\"]),\"heatmap-weight\":new Ti(Lt.paint_heatmap[\"heatmap-weight\"]),\"heatmap-intensity\":new wi(Lt.paint_heatmap[\"heatmap-intensity\"]),\"heatmap-color\":new Ai(Lt.paint_heatmap[\"heatmap-color\"]),\"heatmap-opacity\":new wi(Lt.paint_heatmap[\"heatmap-opacity\"])})};function Co(t,e){for(var r\u003dnew Uint8Array(1024),n\u003d{},i\u003d0,a\u003d0;i\u003c256;i++,a+\u003d4){n[e]\u003di/255;var o\u003dt.evaluate(n);r[a+0]\u003dMath.floor(255*o.r/o.a),r[a+1]\u003dMath.floor(255*o.g/o.a),r[a+2]\u003dMath.floor(255*o.b/o.a),r[a+3]\u003dMath.floor(255*o.a)}return new Eo({width:256,height:1},r)}var Po\u003dfunction(t){function e(e){t.call(this,e,Lo),this._updateColorRamp()}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.createBucket\u003dfunction(t){return new To(t)},e.prototype._handleSpecialPaintPropertyUpdate\u003dfunction(t){\"heatmap-color\"\u003d\u003d\u003dt\u0026\u0026this._updateColorRamp()},e.prototype._updateColorRamp\u003dfunction(){var t\u003dthis._transitionablePaint._values[\"heatmap-color\"].value.expression;this.colorRamp\u003dCo(t,\"heatmapDensity\"),this.colorRampTexture\u003dnull},e.prototype.resize\u003dfunction(){this.heatmapFbo\u0026\u0026(this.heatmapFbo.destroy(),this.heatmapFbo\u003dnull)},e.prototype.queryRadius\u003dfunction(){return 0},e.prototype.queryIntersectsFeature\u003dfunction(){return!1},e.prototype.hasOffscreenPass\u003dfunction(){return 0!\u003d\u003dthis.paint.get(\"heatmap-opacity\")\u0026\u0026\"none\"!\u003d\u003dthis.visibility},e}(Ei),Io\u003d{paint:new Si({\"hillshade-illumination-direction\":new wi(Lt.paint_hillshade[\"hillshade-illumination-direction\"]),\"hillshade-illumination-anchor\":new wi(Lt.paint_hillshade[\"hillshade-illumination-anchor\"]),\"hillshade-exaggeration\":new wi(Lt.paint_hillshade[\"hillshade-exaggeration\"]),\"hillshade-shadow-color\":new wi(Lt.paint_hillshade[\"hillshade-shadow-color\"]),\"hillshade-highlight-color\":new wi(Lt.paint_hillshade[\"hillshade-highlight-color\"]),\"hillshade-accent-color\":new wi(Lt.paint_hillshade[\"hillshade-accent-color\"])})},Oo\u003dfunction(t){function e(e){t.call(this,e,Io)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.hasOffscreenPass\u003dfunction(){return 0!\u003d\u003dthis.paint.get(\"hillshade-exaggeration\")\u0026\u0026\"none\"!\u003d\u003dthis.visibility},e}(Ei),zo\u003dIi([{name:\"a_pos\",components:2,type:\"Int16\"}],4).members,Do\u003dFo,Ro\u003dFo;function Fo(t,e,r){r\u003dr||2;var n,i,a,o,s,l,c,u\u003de\u0026\u0026e.length,f\u003du?e[0]*r:t.length,h\u003dBo(t,0,f,r,!0),p\u003d[];if(!h||h.next\u003d\u003d\u003dh.prev)return p;if(u\u0026\u0026(h\u003dfunction(t,e,r,n){var i,a,o,s,l,c\u003d[];for(i\u003d0,a\u003de.length;i\u003ca;i++)o\u003de[i]*n,s\u003di\u003ca-1?e[i+1]*n:t.length,(l\u003dBo(t,o,s,n,!1))\u003d\u003d\u003dl.next\u0026\u0026(l.steiner\u003d!0),c.push(Zo(l));for(c.sort(Go),i\u003d0;i\u003cc.length;i++)Yo(c[i],r),r\u003dNo(r,r.next);return r}(t,e,h,r)),t.length\u003e80*r){n\u003da\u003dt[0],i\u003do\u003dt[1];for(var d\u003dr;d\u003cf;d+\u003dr)(s\u003dt[d])\u003cn\u0026\u0026(n\u003ds),(l\u003dt[d+1])\u003ci\u0026\u0026(i\u003dl),s\u003ea\u0026\u0026(a\u003ds),l\u003eo\u0026\u0026(o\u003dl);c\u003d0!\u003d\u003d(c\u003dMath.max(a-n,o-i))?1/c:0}return jo(h,p,r,n,i,c),p}function Bo(t,e,r,n,i){var a,o;if(i\u003d\u003d\u003dls(t,e,r,n)\u003e0)for(a\u003de;a\u003cr;a+\u003dn)o\u003das(a,t[a],t[a+1],o);else for(a\u003dr-n;a\u003e\u003de;a-\u003dn)o\u003das(a,t[a],t[a+1],o);return o\u0026\u0026$o(o,o.next)\u0026\u0026(os(o),o\u003do.next),o}function No(t,e){if(!t)return t;e||(e\u003dt);var r,n\u003dt;do{if(r\u003d!1,n.steiner||!$o(n,n.next)\u0026\u00260!\u003d\u003dQo(n.prev,n,n.next))n\u003dn.next;else{if(os(n),(n\u003de\u003dn.prev)\u003d\u003d\u003dn.next)break;r\u003d!0}}while(r||n!\u003d\u003de);return e}function jo(t,e,r,n,i,a,o){if(t){!o\u0026\u0026a\u0026\u0026function(t,e,r,n){var i\u003dt;do{null\u003d\u003d\u003di.z\u0026\u0026(i.z\u003dXo(i.x,i.y,e,r,n)),i.prevZ\u003di.prev,i.nextZ\u003di.next,i\u003di.next}while(i!\u003d\u003dt);i.prevZ.nextZ\u003dnull,i.prevZ\u003dnull,function(t){var e,r,n,i,a,o,s,l,c\u003d1;do{for(r\u003dt,t\u003dnull,a\u003dnull,o\u003d0;r;){for(o++,n\u003dr,s\u003d0,e\u003d0;e\u003cc\u0026\u0026(s++,n\u003dn.nextZ);e++);for(l\u003dc;s\u003e0||l\u003e0\u0026\u0026n;)0!\u003d\u003ds\u0026\u0026(0\u003d\u003d\u003dl||!n||r.z\u003c\u003dn.z)?(i\u003dr,r\u003dr.nextZ,s--):(i\u003dn,n\u003dn.nextZ,l--),a?a.nextZ\u003di:t\u003di,i.prevZ\u003da,a\u003di;r\u003dn}a.nextZ\u003dnull,c*\u003d2}while(o\u003e1)}(i)}(t,n,i,a);for(var s,l,c\u003dt;t.prev!\u003d\u003dt.next;)if(s\u003dt.prev,l\u003dt.next,a?Vo(t,n,i,a):Uo(t))e.push(s.i/r),e.push(t.i/r),e.push(l.i/r),os(t),t\u003dl.next,c\u003dl.next;else if((t\u003dl)\u003d\u003d\u003dc){o?1\u003d\u003d\u003do?jo(t\u003dqo(No(t),e,r),e,r,n,i,a,2):2\u003d\u003d\u003do\u0026\u0026Ho(t,e,r,n,i,a):jo(No(t),e,r,n,i,a,1);break}}}function Uo(t){var e\u003dt.prev,r\u003dt,n\u003dt.next;if(Qo(e,r,n)\u003e\u003d0)return!1;for(var i\u003dt.next.next;i!\u003d\u003dt.prev;){if(Jo(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)\u0026\u0026Qo(i.prev,i,i.next)\u003e\u003d0)return!1;i\u003di.next}return!0}function Vo(t,e,r,n){var i\u003dt.prev,a\u003dt,o\u003dt.next;if(Qo(i,a,o)\u003e\u003d0)return!1;for(var s\u003di.x\u003ca.x?i.x\u003co.x?i.x:o.x:a.x\u003co.x?a.x:o.x,l\u003di.y\u003ca.y?i.y\u003co.y?i.y:o.y:a.y\u003co.y?a.y:o.y,c\u003di.x\u003ea.x?i.x\u003eo.x?i.x:o.x:a.x\u003eo.x?a.x:o.x,u\u003di.y\u003ea.y?i.y\u003eo.y?i.y:o.y:a.y\u003eo.y?a.y:o.y,f\u003dXo(s,l,e,r,n),h\u003dXo(c,u,e,r,n),p\u003dt.prevZ,d\u003dt.nextZ;p\u0026\u0026p.z\u003e\u003df\u0026\u0026d\u0026\u0026d.z\u003c\u003dh;){if(p!\u003d\u003dt.prev\u0026\u0026p!\u003d\u003dt.next\u0026\u0026Jo(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)\u0026\u0026Qo(p.prev,p,p.next)\u003e\u003d0)return!1;if(p\u003dp.prevZ,d!\u003d\u003dt.prev\u0026\u0026d!\u003d\u003dt.next\u0026\u0026Jo(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)\u0026\u0026Qo(d.prev,d,d.next)\u003e\u003d0)return!1;d\u003dd.nextZ}for(;p\u0026\u0026p.z\u003e\u003df;){if(p!\u003d\u003dt.prev\u0026\u0026p!\u003d\u003dt.next\u0026\u0026Jo(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)\u0026\u0026Qo(p.prev,p,p.next)\u003e\u003d0)return!1;p\u003dp.prevZ}for(;d\u0026\u0026d.z\u003c\u003dh;){if(d!\u003d\u003dt.prev\u0026\u0026d!\u003d\u003dt.next\u0026\u0026Jo(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)\u0026\u0026Qo(d.prev,d,d.next)\u003e\u003d0)return!1;d\u003dd.nextZ}return!0}function qo(t,e,r){var n\u003dt;do{var i\u003dn.prev,a\u003dn.next.next;!$o(i,a)\u0026\u0026ts(i,n,n.next,a)\u0026\u0026ns(i,a)\u0026\u0026ns(a,i)\u0026\u0026(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),os(n),os(n.next),n\u003dt\u003da),n\u003dn.next}while(n!\u003d\u003dt);return No(n)}function Ho(t,e,r,n,i,a){var o\u003dt;do{for(var s\u003do.next.next;s!\u003d\u003do.prev;){if(o.i!\u003d\u003ds.i\u0026\u0026Ko(o,s)){var l\u003dis(o,s);return o\u003dNo(o,o.next),l\u003dNo(l,l.next),jo(o,e,r,n,i,a),void jo(l,e,r,n,i,a)}s\u003ds.next}o\u003do.next}while(o!\u003d\u003dt)}function Go(t,e){return t.x-e.x}function Yo(t,e){if(e\u003dfunction(t,e){var r,n\u003de,i\u003dt.x,a\u003dt.y,o\u003d-1/0;do{if(a\u003c\u003dn.y\u0026\u0026a\u003e\u003dn.next.y\u0026\u0026n.next.y!\u003d\u003dn.y){var s\u003dn.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s\u003c\u003di\u0026\u0026s\u003eo){if(o\u003ds,s\u003d\u003d\u003di){if(a\u003d\u003d\u003dn.y)return n;if(a\u003d\u003d\u003dn.next.y)return n.next}r\u003dn.x\u003cn.next.x?n:n.next}}n\u003dn.next}while(n!\u003d\u003de);if(!r)return null;if(i\u003d\u003d\u003do)return r;var l,c\u003dr,u\u003dr.x,f\u003dr.y,h\u003d1/0;n\u003dr;do{i\u003e\u003dn.x\u0026\u0026n.x\u003e\u003du\u0026\u0026i!\u003d\u003dn.x\u0026\u0026Jo(a\u003cf?i:o,a,u,f,a\u003cf?o:i,a,n.x,n.y)\u0026\u0026(l\u003dMath.abs(a-n.y)/(i-n.x),ns(n,t)\u0026\u0026(l\u003ch||l\u003d\u003d\u003dh\u0026\u0026(n.x\u003er.x||n.x\u003d\u003d\u003dr.x\u0026\u0026Wo(r,n)))\u0026\u0026(r\u003dn,h\u003dl)),n\u003dn.next}while(n!\u003d\u003dc);return r}(t,e)){var r\u003dis(e,t);No(e,e.next),No(r,r.next)}}function Wo(t,e){return Qo(t.prev,t,e.prev)\u003c0\u0026\u0026Qo(e.next,t,t.next)\u003c0}function Xo(t,e,r,n,i){return(t\u003d1431655765\u0026((t\u003d858993459\u0026((t\u003d252645135\u0026((t\u003d16711935\u0026((t\u003d32767*(t-r)*i)|t\u003c\u003c8))|t\u003c\u003c4))|t\u003c\u003c2))|t\u003c\u003c1))|(e\u003d1431655765\u0026((e\u003d858993459\u0026((e\u003d252645135\u0026((e\u003d16711935\u0026((e\u003d32767*(e-n)*i)|e\u003c\u003c8))|e\u003c\u003c4))|e\u003c\u003c2))|e\u003c\u003c1))\u003c\u003c1}function Zo(t){var e\u003dt,r\u003dt;do{(e.x\u003cr.x||e.x\u003d\u003d\u003dr.x\u0026\u0026e.y\u003cr.y)\u0026\u0026(r\u003de),e\u003de.next}while(e!\u003d\u003dt);return r}function Jo(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)\u003e\u003d0\u0026\u0026(t-o)*(n-s)-(r-o)*(e-s)\u003e\u003d0\u0026\u0026(r-o)*(a-s)-(i-o)*(n-s)\u003e\u003d0}function Ko(t,e){return t.next.i!\u003d\u003de.i\u0026\u0026t.prev.i!\u003d\u003de.i\u0026\u0026!function(t,e){var r\u003dt;do{if(r.i!\u003d\u003dt.i\u0026\u0026r.next.i!\u003d\u003dt.i\u0026\u0026r.i!\u003d\u003de.i\u0026\u0026r.next.i!\u003d\u003de.i\u0026\u0026ts(r,r.next,t,e))return!0;r\u003dr.next}while(r!\u003d\u003dt);return!1}(t,e)\u0026\u0026(ns(t,e)\u0026\u0026ns(e,t)\u0026\u0026function(t,e){var r\u003dt,n\u003d!1,i\u003d(t.x+e.x)/2,a\u003d(t.y+e.y)/2;do{r.y\u003ea!\u003dr.next.y\u003ea\u0026\u0026r.next.y!\u003d\u003dr.y\u0026\u0026i\u003c(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x\u0026\u0026(n\u003d!n),r\u003dr.next}while(r!\u003d\u003dt);return n}(t,e)\u0026\u0026(Qo(t.prev,t,e.prev)||Qo(t,e.prev,e))||$o(t,e)\u0026\u0026Qo(t.prev,t,t.next)\u003e0\u0026\u0026Qo(e.prev,e,e.next)\u003e0)}function Qo(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function $o(t,e){return t.x\u003d\u003d\u003de.x\u0026\u0026t.y\u003d\u003d\u003de.y}function ts(t,e,r,n){var i\u003drs(Qo(t,e,r)),a\u003drs(Qo(t,e,n)),o\u003drs(Qo(r,n,t)),s\u003drs(Qo(r,n,e));return i!\u003d\u003da\u0026\u0026o!\u003d\u003ds||(!(0!\u003d\u003di||!es(t,r,e))||(!(0!\u003d\u003da||!es(t,n,e))||(!(0!\u003d\u003do||!es(r,t,n))||!(0!\u003d\u003ds||!es(r,e,n)))))}function es(t,e,r){return e.x\u003c\u003dMath.max(t.x,r.x)\u0026\u0026e.x\u003e\u003dMath.min(t.x,r.x)\u0026\u0026e.y\u003c\u003dMath.max(t.y,r.y)\u0026\u0026e.y\u003e\u003dMath.min(t.y,r.y)}function rs(t){return t\u003e0?1:t\u003c0?-1:0}function ns(t,e){return Qo(t.prev,t,t.next)\u003c0?Qo(t,e,t.next)\u003e\u003d0\u0026\u0026Qo(t,t.prev,e)\u003e\u003d0:Qo(t,e,t.prev)\u003c0||Qo(t,t.next,e)\u003c0}function is(t,e){var r\u003dnew ss(t.i,t.x,t.y),n\u003dnew ss(e.i,e.x,e.y),i\u003dt.next,a\u003de.prev;return t.next\u003de,e.prev\u003dt,r.next\u003di,i.prev\u003dr,n.next\u003dr,r.prev\u003dn,a.next\u003dn,n.prev\u003da,n}function as(t,e,r,n){var i\u003dnew ss(t,e,r);return n?(i.next\u003dn.next,i.prev\u003dn,n.next.prev\u003di,n.next\u003di):(i.prev\u003di,i.next\u003di),i}function os(t){t.next.prev\u003dt.prev,t.prev.next\u003dt.next,t.prevZ\u0026\u0026(t.prevZ.nextZ\u003dt.nextZ),t.nextZ\u0026\u0026(t.nextZ.prevZ\u003dt.prevZ)}function ss(t,e,r){this.i\u003dt,this.x\u003de,this.y\u003dr,this.prev\u003dnull,this.next\u003dnull,this.z\u003dnull,this.prevZ\u003dnull,this.nextZ\u003dnull,this.steiner\u003d!1}function ls(t,e,r,n){for(var i\u003d0,a\u003de,o\u003dr-n;a\u003cr;a+\u003dn)i+\u003d(t[o]-t[a])*(t[a+1]+t[o+1]),o\u003da;return i}function cs(t,e,r,n,i){!function t(e,r,n,i,a){for(;i\u003en;){if(i-n\u003e600){var o\u003di-n+1,s\u003dr-n+1,l\u003dMath.log(o),c\u003d.5*Math.exp(2*l/3),u\u003d.5*Math.sqrt(l*c*(o-c)/o)*(s-o/2\u003c0?-1:1),f\u003dMath.max(n,Math.floor(r-s*c/o+u)),h\u003dMath.min(i,Math.floor(r+(o-s)*c/o+u));t(e,r,f,h,a)}var p\u003de[r],d\u003dn,m\u003di;for(us(e,n,r),a(e[i],p)\u003e0\u0026\u0026us(e,n,i);d\u003cm;){for(us(e,d,m),d++,m--;a(e[d],p)\u003c0;)d++;for(;a(e[m],p)\u003e0;)m--}0\u003d\u003d\u003da(e[n],p)?us(e,n,m):(m++,us(e,m,i)),m\u003c\u003dr\u0026\u0026(n\u003dm+1),r\u003c\u003dm\u0026\u0026(i\u003dm-1)}}(t,e,r||0,n||t.length-1,i||fs)}function us(t,e,r){var n\u003dt[e];t[e]\u003dt[r],t[r]\u003dn}function fs(t,e){return t\u003ce?-1:t\u003ee?1:0}function hs(t,e){var r\u003dt.length;if(r\u003c\u003d1)return[t];for(var n,i,a\u003d[],o\u003d0;o\u003cr;o++){var s\u003dT(t[o]);0!\u003d\u003ds\u0026\u0026(t[o].area\u003dMath.abs(s),void 0\u003d\u003d\u003di\u0026\u0026(i\u003ds\u003c0),i\u003d\u003d\u003ds\u003c0?(n\u0026\u0026a.push(n),n\u003d[t[o]]):n.push(t[o]))}if(n\u0026\u0026a.push(n),e\u003e1)for(var l\u003d0;l\u003ca.length;l++)a[l].length\u003c\u003de||(cs(a[l],e,1,a[l].length-1,ps),a[l]\u003da[l].slice(0,e));return a}function ps(t,e){return e.area-t.area}function ds(t,e,r){for(var n\u003dr.patternDependencies,i\u003d!1,a\u003d0,o\u003de;a\u003co.length;a+\u003d1){var s\u003do[a].paint.get(t+\"-pattern\");s.isConstant()||(i\u003d!0);var l\u003ds.constantOr(null);l\u0026\u0026(i\u003d!0,n[l.to]\u003d!0,n[l.from]\u003d!0)}return i}function ms(t,e,r,n,i){for(var a\u003di.patternDependencies,o\u003d0,s\u003de;o\u003cs.length;o+\u003d1){var l\u003ds[o],c\u003dl.paint.get(t+\"-pattern\").value;if(\"constant\"!\u003d\u003dc.kind){var u\u003dc.evaluate({zoom:n-1},r,{},i.availableImages),f\u003dc.evaluate({zoom:n},r,{},i.availableImages),h\u003dc.evaluate({zoom:n+1},r,{},i.availableImages);u\u003du\u0026\u0026u.name?u.name:u,f\u003df\u0026\u0026f.name?f.name:f,h\u003dh\u0026\u0026h.name?h.name:h,a[u]\u003d!0,a[f]\u003d!0,a[h]\u003d!0,r.patterns[l.id]\u003d{min:u,mid:f,max:h}}}return r}Fo.deviation\u003dfunction(t,e,r,n){var i\u003de\u0026\u0026e.length,a\u003di?e[0]*r:t.length,o\u003dMath.abs(ls(t,0,a,r));if(i)for(var s\u003d0,l\u003de.length;s\u003cl;s++){var c\u003de[s]*r,u\u003ds\u003cl-1?e[s+1]*r:t.length;o-\u003dMath.abs(ls(t,c,u,r))}var f\u003d0;for(s\u003d0;s\u003cn.length;s+\u003d3){var h\u003dn[s]*r,p\u003dn[s+1]*r,d\u003dn[s+2]*r;f+\u003dMath.abs((t[h]-t[d])*(t[p+1]-t[h+1])-(t[h]-t[p])*(t[d+1]-t[h+1]))}return 0\u003d\u003d\u003do\u0026\u00260\u003d\u003d\u003df?0:Math.abs((f-o)/o)},Fo.flatten\u003dfunction(t){for(var e\u003dt[0][0].length,r\u003d{vertices:[],holes:[],dimensions:e},n\u003d0,i\u003d0;i\u003ct.length;i++){for(var a\u003d0;a\u003ct[i].length;a++)for(var o\u003d0;o\u003ce;o++)r.vertices.push(t[i][a][o]);i\u003e0\u0026\u0026(n+\u003dt[i-1].length,r.holes.push(n))}return r},Do.default\u003dRo;var gs\u003dfunction(t){this.zoom\u003dt.zoom,this.overscaling\u003dt.overscaling,this.layers\u003dt.layers,this.layerIds\u003dthis.layers.map((function(t){return t.id})),this.index\u003dt.index,this.hasPattern\u003d!1,this.patternFeatures\u003d[],this.layoutVertexArray\u003dnew zi,this.indexArray\u003dnew Yi,this.indexArray2\u003dnew Qi,this.programConfigurations\u003dnew Ua(zo,t.layers,t.zoom),this.segments\u003dnew pa,this.segments2\u003dnew pa,this.stateDependentLayerIds\u003dthis.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};gs.prototype.populate\u003dfunction(t,e,r){this.hasPattern\u003dds(\"fill\",this.layers,e);for(var n\u003dthis.layers[0].layout.get(\"fill-sort-key\"),i\u003d[],a\u003d0,o\u003dt;a\u003co.length;a+\u003d1){var s\u003do[a],l\u003ds.feature,c\u003ds.id,u\u003ds.index,f\u003ds.sourceLayerIndex,h\u003dthis.layers[0]._featureFilter.needGeometry,p\u003d{type:l.type,id:c,properties:l.properties,geometry:h?Ya(l):[]};if(this.layers[0]._featureFilter.filter(new pi(this.zoom),p,r)){h||(p.geometry\u003dYa(l));var d\u003dn?n.evaluate(p,{},r,e.availableImages):void 0,m\u003d{id:c,properties:l.properties,type:l.type,sourceLayerIndex:f,index:u,geometry:p.geometry,patterns:{},sortKey:d};i.push(m)}}n\u0026\u0026i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g\u003d0,v\u003di;g\u003cv.length;g+\u003d1){var y\u003dv[g],x\u003dy,b\u003dx.geometry,_\u003dx.index,w\u003dx.sourceLayerIndex;if(this.hasPattern){var T\u003dms(\"fill\",this.layers,y,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(y,b,_,r,{});var k\u003dt[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},gs.prototype.update\u003dfunction(t,e,r){this.stateDependentLayers.length\u0026\u0026this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},gs.prototype.addFeatures\u003dfunction(t,e,r){for(var n\u003d0,i\u003dthis.patternFeatures;n\u003ci.length;n+\u003d1){var a\u003di[n];this.addFeature(a,a.geometry,a.index,e,r)}},gs.prototype.isEmpty\u003dfunction(){return 0\u003d\u003d\u003dthis.layoutVertexArray.length},gs.prototype.uploadPending\u003dfunction(){return!this.uploaded||this.programConfigurations.needsUpload},gs.prototype.upload\u003dfunction(t){this.uploaded||(this.layoutVertexBuffer\u003dt.createVertexBuffer(this.layoutVertexArray,zo),this.indexBuffer\u003dt.createIndexBuffer(this.indexArray),this.indexBuffer2\u003dt.createIndexBuffer(this.indexArray2)),this.programConfigurations.upload(t),this.uploaded\u003d!0},gs.prototype.destroy\u003dfunction(){this.layoutVertexBuffer\u0026\u0026(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.indexBuffer2.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.segments2.destroy())},gs.prototype.addFeature\u003dfunction(t,e,r,n,i){for(var a\u003d0,o\u003dhs(e,500);a\u003co.length;a+\u003d1){for(var s\u003do[a],l\u003d0,c\u003d0,u\u003ds;c\u003cu.length;c+\u003d1){l+\u003du[c].length}for(var f\u003dthis.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray),h\u003df.vertexLength,p\u003d[],d\u003d[],m\u003d0,g\u003ds;m\u003cg.length;m+\u003d1){var v\u003dg[m];if(0!\u003d\u003dv.length){v!\u003d\u003ds[0]\u0026\u0026d.push(p.length/2);var y\u003dthis.segments2.prepareSegment(v.length,this.layoutVertexArray,this.indexArray2),x\u003dy.vertexLength;this.layoutVertexArray.emplaceBack(v[0].x,v[0].y),this.indexArray2.emplaceBack(x+v.length-1,x),p.push(v[0].x),p.push(v[0].y);for(var b\u003d1;b\u003cv.length;b++)this.layoutVertexArray.emplaceBack(v[b].x,v[b].y),this.indexArray2.emplaceBack(x+b-1,x+b),p.push(v[b].x),p.push(v[b].y);y.vertexLength+\u003dv.length,y.primitiveLength+\u003dv.length}}for(var _\u003dDo(p,d),w\u003d0;w\u003c_.length;w+\u003d3)this.indexArray.emplaceBack(h+_[w],h+_[w+1],h+_[w+2]);f.vertexLength+\u003dl,f.primitiveLength+\u003d_.length/3}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},Nn(\"FillBucket\",gs,{omit:[\"layers\",\"patternFeatures\"]});var vs\u003dnew Si({\"fill-sort-key\":new Ti(Lt.layout_fill[\"fill-sort-key\"])}),ys\u003d{paint:new Si({\"fill-antialias\":new wi(Lt.paint_fill[\"fill-antialias\"]),\"fill-opacity\":new Ti(Lt.paint_fill[\"fill-opacity\"]),\"fill-color\":new Ti(Lt.paint_fill[\"fill-color\"]),\"fill-outline-color\":new Ti(Lt.paint_fill[\"fill-outline-color\"]),\"fill-translate\":new wi(Lt.paint_fill[\"fill-translate\"]),\"fill-translate-anchor\":new wi(Lt.paint_fill[\"fill-translate-anchor\"]),\"fill-pattern\":new ki(Lt.paint_fill[\"fill-pattern\"])}),layout:vs},xs\u003dfunction(t){function e(e){t.call(this,e,ys)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.recalculate\u003dfunction(e,r){t.prototype.recalculate.call(this,e,r);var n\u003dthis.paint._values[\"fill-outline-color\"];\"constant\"\u003d\u003d\u003dn.value.kind\u0026\u0026void 0\u003d\u003d\u003dn.value.value\u0026\u0026(this.paint._values[\"fill-outline-color\"]\u003dthis.paint._values[\"fill-color\"])},e.prototype.createBucket\u003dfunction(t){return new gs(t)},e.prototype.queryRadius\u003dfunction(){return so(this.paint.get(\"fill-translate\"))},e.prototype.queryIntersectsFeature\u003dfunction(t,e,r,n,i,a,o){return Ka(lo(t,this.paint.get(\"fill-translate\"),this.paint.get(\"fill-translate-anchor\"),a.angle,o),n)},e.prototype.isTileClipped\u003dfunction(){return!0},e}(Ei),bs\u003dIi([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_normal_ed\",components:4,type:\"Int16\"}],4).members,_s\u003dws;function ws(t,e,r,n,i){this.properties\u003d{},this.extent\u003dr,this.type\u003d0,this._pbf\u003dt,this._geometry\u003d-1,this._keys\u003dn,this._values\u003di,t.readFields(Ts,this,e)}function Ts(t,e,r){1\u003d\u003dt?e.id\u003dr.readVarint():2\u003d\u003dt?function(t,e){var r\u003dt.readVarint()+t.pos;for(;t.pos\u003cr;){var n\u003de._keys[t.readVarint()],i\u003de._values[t.readVarint()];e.properties[n]\u003di}}(r,e):3\u003d\u003dt?e.type\u003dr.readVarint():4\u003d\u003dt\u0026\u0026(e._geometry\u003dr.pos)}function ks(t){for(var e,r,n\u003d0,i\u003d0,a\u003dt.length,o\u003da-1;i\u003ca;o\u003di++)e\u003dt[i],n+\u003d((r\u003dt[o]).x-e.x)*(e.y+r.y);return n}ws.types\u003d[\"Unknown\",\"Point\",\"LineString\",\"Polygon\"],ws.prototype.loadGeometry\u003dfunction(){var t\u003dthis._pbf;t.pos\u003dthis._geometry;for(var e,r\u003dt.readVarint()+t.pos,n\u003d1,a\u003d0,o\u003d0,s\u003d0,l\u003d[];t.pos\u003cr;){if(a\u003c\u003d0){var c\u003dt.readVarint();n\u003d7\u0026c,a\u003dc\u003e\u003e3}if(a--,1\u003d\u003d\u003dn||2\u003d\u003d\u003dn)o+\u003dt.readSVarint(),s+\u003dt.readSVarint(),1\u003d\u003d\u003dn\u0026\u0026(e\u0026\u0026l.push(e),e\u003d[]),e.push(new i(o,s));else{if(7!\u003d\u003dn)throw new Error(\"unknown command \"+n);e\u0026\u0026e.push(e[0].clone())}}return e\u0026\u0026l.push(e),l},ws.prototype.bbox\u003dfunction(){var t\u003dthis._pbf;t.pos\u003dthis._geometry;for(var e\u003dt.readVarint()+t.pos,r\u003d1,n\u003d0,i\u003d0,a\u003d0,o\u003d1/0,s\u003d-1/0,l\u003d1/0,c\u003d-1/0;t.pos\u003ce;){if(n\u003c\u003d0){var u\u003dt.readVarint();r\u003d7\u0026u,n\u003du\u003e\u003e3}if(n--,1\u003d\u003d\u003dr||2\u003d\u003d\u003dr)(i+\u003dt.readSVarint())\u003co\u0026\u0026(o\u003di),i\u003es\u0026\u0026(s\u003di),(a+\u003dt.readSVarint())\u003cl\u0026\u0026(l\u003da),a\u003ec\u0026\u0026(c\u003da);else if(7!\u003d\u003dr)throw new Error(\"unknown command \"+r)}return[o,l,s,c]},ws.prototype.toGeoJSON\u003dfunction(t,e,r){var n,i,a\u003dthis.extent*Math.pow(2,r),o\u003dthis.extent*t,s\u003dthis.extent*e,l\u003dthis.loadGeometry(),c\u003dws.types[this.type];function u(t){for(var e\u003d0;e\u003ct.length;e++){var r\u003dt[e],n\u003d180-360*(r.y+s)/a;t[e]\u003d[360*(r.x+o)/a-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}switch(this.type){case 1:var f\u003d[];for(n\u003d0;n\u003cl.length;n++)f[n]\u003dl[n][0];u(l\u003df);break;case 2:for(n\u003d0;n\u003cl.length;n++)u(l[n]);break;case 3:for(l\u003dfunction(t){var e\u003dt.length;if(e\u003c\u003d1)return[t];for(var r,n,i\u003d[],a\u003d0;a\u003ce;a++){var o\u003dks(t[a]);0!\u003d\u003do\u0026\u0026(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003do\u003c0),n\u003d\u003d\u003do\u003c0?(r\u0026\u0026i.push(r),r\u003d[t[a]]):r.push(t[a]))}r\u0026\u0026i.push(r);return i}(l),n\u003d0;n\u003cl.length;n++)for(i\u003d0;i\u003cl[n].length;i++)u(l[n][i])}1\u003d\u003d\u003dl.length?l\u003dl[0]:c\u003d\"Multi\"+c;var h\u003d{type:\"Feature\",geometry:{type:c,coordinates:l},properties:this.properties};return\"id\"in this\u0026\u0026(h.id\u003dthis.id),h};var Ms\u003dAs;function As(t,e){this.version\u003d1,this.name\u003dnull,this.extent\u003d4096,this.length\u003d0,this._pbf\u003dt,this._keys\u003d[],this._values\u003d[],this._features\u003d[],t.readFields(Ss,this,e),this.length\u003dthis._features.length}function Ss(t,e,r){15\u003d\u003d\u003dt?e.version\u003dr.readVarint():1\u003d\u003d\u003dt?e.name\u003dr.readString():5\u003d\u003d\u003dt?e.extent\u003dr.readVarint():2\u003d\u003d\u003dt?e._features.push(r.pos):3\u003d\u003d\u003dt?e._keys.push(r.readString()):4\u003d\u003d\u003dt\u0026\u0026e._values.push(function(t){var e\u003dnull,r\u003dt.readVarint()+t.pos;for(;t.pos\u003cr;){var n\u003dt.readVarint()\u003e\u003e3;e\u003d1\u003d\u003d\u003dn?t.readString():2\u003d\u003d\u003dn?t.readFloat():3\u003d\u003d\u003dn?t.readDouble():4\u003d\u003d\u003dn?t.readVarint64():5\u003d\u003d\u003dn?t.readVarint():6\u003d\u003d\u003dn?t.readSVarint():7\u003d\u003d\u003dn?t.readBoolean():null}return e}(r))}function Es(t,e,r){if(3\u003d\u003d\u003dt){var n\u003dnew Ms(r,r.readVarint()+r.pos);n.length\u0026\u0026(e[n.name]\u003dn)}}As.prototype.feature\u003dfunction(t){if(t\u003c0||t\u003e\u003dthis._features.length)throw new Error(\"feature index out of bounds\");this._pbf.pos\u003dthis._features[t];var e\u003dthis._pbf.readVarint()+this._pbf.pos;return new _s(this._pbf,e,this.extent,this._keys,this._values)};var Ls\u003d{VectorTile:function(t,e){this.layers\u003dt.readFields(Es,{},e)},VectorTileFeature:_s,VectorTileLayer:Ms},Cs\u003dLs.VectorTileFeature.types,Ps\u003dMath.pow(2,13);function Is(t,e,r,n,i,a,o,s){t.emplaceBack(e,r,2*Math.floor(n*Ps)+o,i*Ps*2,a*Ps*2,Math.round(s))}var Os\u003dfunction(t){this.zoom\u003dt.zoom,this.overscaling\u003dt.overscaling,this.layers\u003dt.layers,this.layerIds\u003dthis.layers.map((function(t){return t.id})),this.index\u003dt.index,this.hasPattern\u003d!1,this.layoutVertexArray\u003dnew Ri,this.indexArray\u003dnew Yi,this.programConfigurations\u003dnew Ua(bs,t.layers,t.zoom),this.segments\u003dnew pa,this.stateDependentLayerIds\u003dthis.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};function zs(t,e){return t.x\u003d\u003d\u003de.x\u0026\u0026(t.x\u003c0||t.x\u003e8192)||t.y\u003d\u003d\u003de.y\u0026\u0026(t.y\u003c0||t.y\u003e8192)}function Ds(t){return t.every((function(t){return t.x\u003c0}))||t.every((function(t){return t.x\u003e8192}))||t.every((function(t){return t.y\u003c0}))||t.every((function(t){return t.y\u003e8192}))}Os.prototype.populate\u003dfunction(t,e,r){this.features\u003d[],this.hasPattern\u003dds(\"fill-extrusion\",this.layers,e);for(var n\u003d0,i\u003dt;n\u003ci.length;n+\u003d1){var a\u003di[n],o\u003da.feature,s\u003da.id,l\u003da.index,c\u003da.sourceLayerIndex,u\u003dthis.layers[0]._featureFilter.needGeometry,f\u003d{type:o.type,id:s,properties:o.properties,geometry:u?Ya(o):[]};if(this.layers[0]._featureFilter.filter(new pi(this.zoom),f,r)){var h\u003d{id:s,sourceLayerIndex:c,index:l,geometry:u?f.geometry:Ya(o),properties:o.properties,type:o.type,patterns:{}};void 0!\u003d\u003do.id\u0026\u0026(h.id\u003do.id),this.hasPattern?this.features.push(ms(\"fill-extrusion\",this.layers,h,this.zoom,e)):this.addFeature(h,h.geometry,l,r,{}),e.featureIndex.insert(o,h.geometry,l,c,this.index,!0)}}},Os.prototype.addFeatures\u003dfunction(t,e,r){for(var n\u003d0,i\u003dthis.features;n\u003ci.length;n+\u003d1){var a\u003di[n],o\u003da.geometry;this.addFeature(a,o,a.index,e,r)}},Os.prototype.update\u003dfunction(t,e,r){this.stateDependentLayers.length\u0026\u0026this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Os.prototype.isEmpty\u003dfunction(){return 0\u003d\u003d\u003dthis.layoutVertexArray.length},Os.prototype.uploadPending\u003dfunction(){return!this.uploaded||this.programConfigurations.needsUpload},Os.prototype.upload\u003dfunction(t){this.uploaded||(this.layoutVertexBuffer\u003dt.createVertexBuffer(this.layoutVertexArray,bs),this.indexBuffer\u003dt.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded\u003d!0},Os.prototype.destroy\u003dfunction(){this.layoutVertexBuffer\u0026\u0026(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Os.prototype.addFeature\u003dfunction(t,e,r,n,i){for(var a\u003d0,o\u003dhs(e,500);a\u003co.length;a+\u003d1){for(var s\u003do[a],l\u003d0,c\u003d0,u\u003ds;c\u003cu.length;c+\u003d1){l+\u003du[c].length}for(var f\u003dthis.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray),h\u003d0,p\u003ds;h\u003cp.length;h+\u003d1){var d\u003dp[h];if(0!\u003d\u003dd.length\u0026\u0026!Ds(d))for(var m\u003d0,g\u003d0;g\u003cd.length;g++){var v\u003dd[g];if(g\u003e\u003d1){var y\u003dd[g-1];if(!zs(v,y)){f.vertexLength+4\u003epa.MAX_VERTEX_ARRAY_LENGTH\u0026\u0026(f\u003dthis.segments.prepareSegment(4,this.layoutVertexArray,this.indexArray));var x\u003dv.sub(y)._perp()._unit(),b\u003dy.dist(v);m+b\u003e32768\u0026\u0026(m\u003d0),Is(this.layoutVertexArray,v.x,v.y,x.x,x.y,0,0,m),Is(this.layoutVertexArray,v.x,v.y,x.x,x.y,0,1,m),m+\u003db,Is(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,0,m),Is(this.layoutVertexArray,y.x,y.y,x.x,x.y,0,1,m);var _\u003df.vertexLength;this.indexArray.emplaceBack(_,_+2,_+1),this.indexArray.emplaceBack(_+1,_+2,_+3),f.vertexLength+\u003d4,f.primitiveLength+\u003d2}}}}if(f.vertexLength+l\u003epa.MAX_VERTEX_ARRAY_LENGTH\u0026\u0026(f\u003dthis.segments.prepareSegment(l,this.layoutVertexArray,this.indexArray)),\"Polygon\"\u003d\u003d\u003dCs[t.type]){for(var w\u003d[],T\u003d[],k\u003df.vertexLength,M\u003d0,A\u003ds;M\u003cA.length;M+\u003d1){var S\u003dA[M];if(0!\u003d\u003dS.length){S!\u003d\u003ds[0]\u0026\u0026T.push(w.length/2);for(var E\u003d0;E\u003cS.length;E++){var L\u003dS[E];Is(this.layoutVertexArray,L.x,L.y,0,0,1,1,0),w.push(L.x),w.push(L.y)}}}for(var C\u003dDo(w,T),P\u003d0;P\u003cC.length;P+\u003d3)this.indexArray.emplaceBack(k+C[P],k+C[P+2],k+C[P+1]);f.primitiveLength+\u003dC.length/3,f.vertexLength+\u003dl}}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},Nn(\"FillExtrusionBucket\",Os,{omit:[\"layers\",\"features\"]});var Rs\u003d{paint:new Si({\"fill-extrusion-opacity\":new wi(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-opacity\"]),\"fill-extrusion-color\":new Ti(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-color\"]),\"fill-extrusion-translate\":new wi(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-translate\"]),\"fill-extrusion-translate-anchor\":new wi(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-translate-anchor\"]),\"fill-extrusion-pattern\":new ki(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-pattern\"]),\"fill-extrusion-height\":new Ti(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-height\"]),\"fill-extrusion-base\":new Ti(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-base\"]),\"fill-extrusion-vertical-gradient\":new wi(Lt[\"paint_fill-extrusion\"][\"fill-extrusion-vertical-gradient\"])})},Fs\u003dfunction(t){function e(e){t.call(this,e,Rs)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.createBucket\u003dfunction(t){return new Os(t)},e.prototype.queryRadius\u003dfunction(){return so(this.paint.get(\"fill-extrusion-translate\"))},e.prototype.is3D\u003dfunction(){return!0},e.prototype.queryIntersectsFeature\u003dfunction(t,e,r,n,a,o,s,l){var c\u003dlo(t,this.paint.get(\"fill-extrusion-translate\"),this.paint.get(\"fill-extrusion-translate-anchor\"),o.angle,s),u\u003dthis.paint.get(\"fill-extrusion-height\").evaluate(e,r),f\u003dthis.paint.get(\"fill-extrusion-base\").evaluate(e,r),h\u003dfunction(t,e,r,n){for(var a\u003d[],o\u003d0,s\u003dt;o\u003cs.length;o+\u003d1){var l\u003ds[o],c\u003d[l.x,l.y,n,1];xo(c,c,e),a.push(new i(c[0]/c[3],c[1]/c[3]))}return a}(c,l,0,0),p\u003dfunction(t,e,r,n){for(var a\u003d[],o\u003d[],s\u003dn[8]*e,l\u003dn[9]*e,c\u003dn[10]*e,u\u003dn[11]*e,f\u003dn[8]*r,h\u003dn[9]*r,p\u003dn[10]*r,d\u003dn[11]*r,m\u003d0,g\u003dt;m\u003cg.length;m+\u003d1){for(var v\u003dg[m],y\u003d[],x\u003d[],b\u003d0,_\u003dv;b\u003c_.length;b+\u003d1){var w\u003d_[b],T\u003dw.x,k\u003dw.y,M\u003dn[0]*T+n[4]*k+n[12],A\u003dn[1]*T+n[5]*k+n[13],S\u003dn[2]*T+n[6]*k+n[14],E\u003dn[3]*T+n[7]*k+n[15],L\u003dS+c,C\u003dE+u,P\u003dM+f,I\u003dA+h,O\u003dS+p,z\u003dE+d,D\u003dnew i((M+s)/C,(A+l)/C);D.z\u003dL/C,y.push(D);var R\u003dnew i(P/z,I/z);R.z\u003dO/z,x.push(R)}a.push(y),o.push(x)}return[a,o]}(n,f,u,l);return function(t,e,r){var n\u003d1/0;Ka(r,e)\u0026\u0026(n\u003dNs(r,e[0]));for(var i\u003d0;i\u003ce.length;i++)for(var a\u003de[i],o\u003dt[i],s\u003d0;s\u003ca.length-1;s++){var l\u003da[s],c\u003da[s+1],u\u003do[s],f\u003do[s+1],h\u003d[l,c,f,u,l];Za(r,h)\u0026\u0026(n\u003dMath.min(n,Ns(r,h)))}return n!\u003d\u003d1/0\u0026\u0026n}(p[0],p[1],h)},e}(Ei);function Bs(t,e){return t.x*e.x+t.y*e.y}function Ns(t,e){if(1\u003d\u003d\u003dt.length){for(var r,n\u003d0,i\u003de[n++];!r||i.equals(r);)if(!(r\u003de[n++]))return 1/0;for(;n\u003ce.length;n++){var a\u003de[n],o\u003dt[0],s\u003dr.sub(i),l\u003da.sub(i),c\u003do.sub(i),u\u003dBs(s,s),f\u003dBs(s,l),h\u003dBs(l,l),p\u003dBs(c,s),d\u003dBs(c,l),m\u003du*h-f*f,g\u003d(h*p-f*d)/m,v\u003d(u*d-f*p)/m,y\u003d1-g-v,x\u003di.z*y+r.z*g+a.z*v;if(isFinite(x))return x}return 1/0}for(var b\u003d1/0,_\u003d0,w\u003de;_\u003cw.length;_+\u003d1){var T\u003dw[_];b\u003dMath.min(b,T.z)}return b}var js\u003dIi([{name:\"a_pos_normal\",components:2,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint8\"}],4).members,Us\u003dLs.VectorTileFeature.types,Vs\u003dMath.cos(Math.PI/180*37.5),qs\u003dMath.pow(2,14)/.5,Hs\u003dfunction(t){this.zoom\u003dt.zoom,this.overscaling\u003dt.overscaling,this.layers\u003dt.layers,this.layerIds\u003dthis.layers.map((function(t){return t.id})),this.index\u003dt.index,this.hasPattern\u003d!1,this.patternFeatures\u003d[],this.layoutVertexArray\u003dnew Fi,this.indexArray\u003dnew Yi,this.programConfigurations\u003dnew Ua(js,t.layers,t.zoom),this.segments\u003dnew pa,this.stateDependentLayerIds\u003dthis.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id}))};Hs.prototype.populate\u003dfunction(t,e,r){this.hasPattern\u003dds(\"line\",this.layers,e);for(var n\u003dthis.layers[0].layout.get(\"line-sort-key\"),i\u003d[],a\u003d0,o\u003dt;a\u003co.length;a+\u003d1){var s\u003do[a],l\u003ds.feature,c\u003ds.id,u\u003ds.index,f\u003ds.sourceLayerIndex,h\u003dthis.layers[0]._featureFilter.needGeometry,p\u003d{type:l.type,id:c,properties:l.properties,geometry:h?Ya(l):[]};if(this.layers[0]._featureFilter.filter(new pi(this.zoom),p,r)){h||(p.geometry\u003dYa(l));var d\u003dn?n.evaluate(p,{},r):void 0,m\u003d{id:c,properties:l.properties,type:l.type,sourceLayerIndex:f,index:u,geometry:p.geometry,patterns:{},sortKey:d};i.push(m)}}n\u0026\u0026i.sort((function(t,e){return t.sortKey-e.sortKey}));for(var g\u003d0,v\u003di;g\u003cv.length;g+\u003d1){var y\u003dv[g],x\u003dy,b\u003dx.geometry,_\u003dx.index,w\u003dx.sourceLayerIndex;if(this.hasPattern){var T\u003dms(\"line\",this.layers,y,this.zoom,e);this.patternFeatures.push(T)}else this.addFeature(y,b,_,r,{});var k\u003dt[_].feature;e.featureIndex.insert(k,b,_,w,this.index)}},Hs.prototype.update\u003dfunction(t,e,r){this.stateDependentLayers.length\u0026\u0026this.programConfigurations.updatePaintArrays(t,e,this.stateDependentLayers,r)},Hs.prototype.addFeatures\u003dfunction(t,e,r){for(var n\u003d0,i\u003dthis.patternFeatures;n\u003ci.length;n+\u003d1){var a\u003di[n];this.addFeature(a,a.geometry,a.index,e,r)}},Hs.prototype.isEmpty\u003dfunction(){return 0\u003d\u003d\u003dthis.layoutVertexArray.length},Hs.prototype.uploadPending\u003dfunction(){return!this.uploaded||this.programConfigurations.needsUpload},Hs.prototype.upload\u003dfunction(t){this.uploaded||(this.layoutVertexBuffer\u003dt.createVertexBuffer(this.layoutVertexArray,js),this.indexBuffer\u003dt.createIndexBuffer(this.indexArray)),this.programConfigurations.upload(t),this.uploaded\u003d!0},Hs.prototype.destroy\u003dfunction(){this.layoutVertexBuffer\u0026\u0026(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy())},Hs.prototype.addFeature\u003dfunction(t,e,r,n,i){for(var a\u003dthis.layers[0].layout,o\u003da.get(\"line-join\").evaluate(t,{}),s\u003da.get(\"line-cap\"),l\u003da.get(\"line-miter-limit\"),c\u003da.get(\"line-round-limit\"),u\u003d0,f\u003de;u\u003cf.length;u+\u003d1){var h\u003df[u];this.addLine(h,t,o,s,l,c)}this.programConfigurations.populatePaintArrays(this.layoutVertexArray.length,t,r,i,n)},Hs.prototype.addLine\u003dfunction(t,e,r,n,i,a){if(this.distance\u003d0,this.scaledDistance\u003d0,this.totalDistance\u003d0,e.properties\u0026\u0026e.properties.hasOwnProperty(\"mapbox_clip_start\")\u0026\u0026e.properties.hasOwnProperty(\"mapbox_clip_end\")){this.clipStart\u003d+e.properties.mapbox_clip_start,this.clipEnd\u003d+e.properties.mapbox_clip_end;for(var o\u003d0;o\u003ct.length-1;o++)this.totalDistance+\u003dt[o].dist(t[o+1]);this.updateScaledDistance()}for(var s\u003d\"Polygon\"\u003d\u003d\u003dUs[e.type],l\u003dt.length;l\u003e\u003d2\u0026\u0026t[l-1].equals(t[l-2]);)l--;for(var c\u003d0;c\u003cl-1\u0026\u0026t[c].equals(t[c+1]);)c++;if(!(l\u003c(s?3:2))){\"bevel\"\u003d\u003d\u003dr\u0026\u0026(i\u003d1.05);var u,f\u003dthis.overscaling\u003c\u003d16?122880/(512*this.overscaling):0,h\u003dthis.segments.prepareSegment(10*l,this.layoutVertexArray,this.indexArray),p\u003dvoid 0,d\u003dvoid 0,m\u003dvoid 0,g\u003dvoid 0;this.e1\u003dthis.e2\u003d-1,s\u0026\u0026(u\u003dt[l-2],g\u003dt[c].sub(u)._unit()._perp());for(var v\u003dc;v\u003cl;v++)if(!(d\u003dv\u003d\u003d\u003dl-1?s?t[c+1]:void 0:t[v+1])||!t[v].equals(d)){g\u0026\u0026(m\u003dg),u\u0026\u0026(p\u003du),u\u003dt[v],g\u003dd?d.sub(u)._unit()._perp():m;var y\u003d(m\u003dm||g).add(g);0\u003d\u003d\u003dy.x\u0026\u00260\u003d\u003d\u003dy.y||y._unit();var x\u003dm.x*g.x+m.y*g.y,b\u003dy.x*g.x+y.y*g.y,_\u003d0!\u003d\u003db?1/b:1/0,w\u003d2*Math.sqrt(2-2*b),T\u003db\u003cVs\u0026\u0026p\u0026\u0026d,k\u003dm.x*g.y-m.y*g.x\u003e0;if(T\u0026\u0026v\u003ec){var M\u003du.dist(p);if(M\u003e2*f){var A\u003du.sub(u.sub(p)._mult(f/M)._round());this.updateDistance(p,A),this.addCurrentVertex(A,m,0,0,h),p\u003dA}}var S\u003dp\u0026\u0026d,E\u003dS?r:s?\"butt\":n;if(S\u0026\u0026\"round\"\u003d\u003d\u003dE\u0026\u0026(_\u003ca?E\u003d\"miter\":_\u003c\u003d2\u0026\u0026(E\u003d\"fakeround\")),\"miter\"\u003d\u003d\u003dE\u0026\u0026_\u003ei\u0026\u0026(E\u003d\"bevel\"),\"bevel\"\u003d\u003d\u003dE\u0026\u0026(_\u003e2\u0026\u0026(E\u003d\"flipbevel\"),_\u003ci\u0026\u0026(E\u003d\"miter\")),p\u0026\u0026this.updateDistance(p,u),\"miter\"\u003d\u003d\u003dE)y._mult(_),this.addCurrentVertex(u,y,0,0,h);else if(\"flipbevel\"\u003d\u003d\u003dE){if(_\u003e100)y\u003dg.mult(-1);else{var L\u003d_*m.add(g).mag()/m.sub(g).mag();y._perp()._mult(L*(k?-1:1))}this.addCurrentVertex(u,y,0,0,h),this.addCurrentVertex(u,y.mult(-1),0,0,h)}else if(\"bevel\"\u003d\u003d\u003dE||\"fakeround\"\u003d\u003d\u003dE){var C\u003d-Math.sqrt(_*_-1),P\u003dk?C:0,I\u003dk?0:C;if(p\u0026\u0026this.addCurrentVertex(u,m,P,I,h),\"fakeround\"\u003d\u003d\u003dE)for(var O\u003dMath.round(180*w/Math.PI/20),z\u003d1;z\u003cO;z++){var D\u003dz/O;if(.5!\u003d\u003dD){var R\u003dD-.5;D+\u003dD*R*(D-1)*((1.0904+x*(x*(3.55645-1.43519*x)-3.2452))*R*R+(.848013+x*(.215638*x-1.06021)))}var F\u003dg.sub(m)._mult(D)._add(m)._unit()._mult(k?-1:1);this.addHalfVertex(u,F.x,F.y,!1,k,0,h)}d\u0026\u0026this.addCurrentVertex(u,g,-P,-I,h)}else if(\"butt\"\u003d\u003d\u003dE)this.addCurrentVertex(u,y,0,0,h);else if(\"square\"\u003d\u003d\u003dE){var B\u003dp?1:-1;this.addCurrentVertex(u,y,B,B,h)}else\"round\"\u003d\u003d\u003dE\u0026\u0026(p\u0026\u0026(this.addCurrentVertex(u,m,0,0,h),this.addCurrentVertex(u,m,1,1,h,!0)),d\u0026\u0026(this.addCurrentVertex(u,g,-1,-1,h,!0),this.addCurrentVertex(u,g,0,0,h)));if(T\u0026\u0026v\u003cl-1){var N\u003du.dist(d);if(N\u003e2*f){var j\u003du.add(d.sub(u)._mult(f/N)._round());this.updateDistance(u,j),this.addCurrentVertex(j,g,0,0,h),u\u003dj}}}}},Hs.prototype.addCurrentVertex\u003dfunction(t,e,r,n,i,a){void 0\u003d\u003d\u003da\u0026\u0026(a\u003d!1);var o\u003de.x+e.y*r,s\u003de.y-e.x*r,l\u003d-e.x+e.y*n,c\u003d-e.y-e.x*n;this.addHalfVertex(t,o,s,a,!1,r,i),this.addHalfVertex(t,l,c,a,!0,-n,i),this.distance\u003eqs/2\u0026\u00260\u003d\u003d\u003dthis.totalDistance\u0026\u0026(this.distance\u003d0,this.addCurrentVertex(t,e,r,n,i,a))},Hs.prototype.addHalfVertex\u003dfunction(t,e,r,n,i,a,o){var s\u003dt.x,l\u003dt.y,c\u003d.5*this.scaledDistance;this.layoutVertexArray.emplaceBack((s\u003c\u003c1)+(n?1:0),(l\u003c\u003c1)+(i?1:0),Math.round(63*e)+128,Math.round(63*r)+128,1+(0\u003d\u003d\u003da?0:a\u003c0?-1:1)|(63\u0026c)\u003c\u003c2,c\u003e\u003e6);var u\u003do.vertexLength++;this.e1\u003e\u003d0\u0026\u0026this.e2\u003e\u003d0\u0026\u0026(this.indexArray.emplaceBack(this.e1,this.e2,u),o.primitiveLength++),i?this.e2\u003du:this.e1\u003du},Hs.prototype.updateScaledDistance\u003dfunction(){this.scaledDistance\u003dthis.totalDistance\u003e0?(this.clipStart+(this.clipEnd-this.clipStart)*this.distance/this.totalDistance)*(qs-1):this.distance},Hs.prototype.updateDistance\u003dfunction(t,e){this.distance+\u003dt.dist(e),this.updateScaledDistance()},Nn(\"LineBucket\",Hs,{omit:[\"layers\",\"patternFeatures\"]});var Gs\u003dnew Si({\"line-cap\":new wi(Lt.layout_line[\"line-cap\"]),\"line-join\":new Ti(Lt.layout_line[\"line-join\"]),\"line-miter-limit\":new wi(Lt.layout_line[\"line-miter-limit\"]),\"line-round-limit\":new wi(Lt.layout_line[\"line-round-limit\"]),\"line-sort-key\":new Ti(Lt.layout_line[\"line-sort-key\"])}),Ys\u003d{paint:new Si({\"line-opacity\":new Ti(Lt.paint_line[\"line-opacity\"]),\"line-color\":new Ti(Lt.paint_line[\"line-color\"]),\"line-translate\":new wi(Lt.paint_line[\"line-translate\"]),\"line-translate-anchor\":new wi(Lt.paint_line[\"line-translate-anchor\"]),\"line-width\":new Ti(Lt.paint_line[\"line-width\"]),\"line-gap-width\":new Ti(Lt.paint_line[\"line-gap-width\"]),\"line-offset\":new Ti(Lt.paint_line[\"line-offset\"]),\"line-blur\":new Ti(Lt.paint_line[\"line-blur\"]),\"line-dasharray\":new Mi(Lt.paint_line[\"line-dasharray\"]),\"line-pattern\":new ki(Lt.paint_line[\"line-pattern\"]),\"line-gradient\":new Ai(Lt.paint_line[\"line-gradient\"])}),layout:Gs},Ws\u003dnew(function(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.possiblyEvaluate\u003dfunction(e,r){return r\u003dnew pi(Math.floor(r.zoom),{now:r.now,fadeDuration:r.fadeDuration,zoomHistory:r.zoomHistory,transition:r.transition}),t.prototype.possiblyEvaluate.call(this,e,r)},e.prototype.evaluate\u003dfunction(e,r,n,i){return r\u003du({},r,{zoom:Math.floor(r.zoom)}),t.prototype.evaluate.call(this,e,r,n,i)},e}(Ti))(Ys.paint.properties[\"line-width\"].specification);Ws.useIntegerZoom\u003d!0;var Xs\u003dfunction(t){function e(e){t.call(this,e,Ys)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._handleSpecialPaintPropertyUpdate\u003dfunction(t){\"line-gradient\"\u003d\u003d\u003dt\u0026\u0026this._updateGradient()},e.prototype._updateGradient\u003dfunction(){var t\u003dthis._transitionablePaint._values[\"line-gradient\"].value.expression;this.gradient\u003dCo(t,\"lineProgress\"),this.gradientTexture\u003dnull},e.prototype.recalculate\u003dfunction(e,r){t.prototype.recalculate.call(this,e,r),this.paint._values[\"line-floorwidth\"]\u003dWs.possiblyEvaluate(this._transitioningPaint._values[\"line-width\"].value,e)},e.prototype.createBucket\u003dfunction(t){return new Hs(t)},e.prototype.queryRadius\u003dfunction(t){var e\u003dt,r\u003dZs(oo(\"line-width\",this,e),oo(\"line-gap-width\",this,e)),n\u003doo(\"line-offset\",this,e);return r/2+Math.abs(n)+so(this.paint.get(\"line-translate\"))},e.prototype.queryIntersectsFeature\u003dfunction(t,e,r,n,a,o,s){var l\u003dlo(t,this.paint.get(\"line-translate\"),this.paint.get(\"line-translate-anchor\"),o.angle,s),c\u003ds/2*Zs(this.paint.get(\"line-width\").evaluate(e,r),this.paint.get(\"line-gap-width\").evaluate(e,r)),u\u003dthis.paint.get(\"line-offset\").evaluate(e,r);return u\u0026\u0026(n\u003dfunction(t,e){for(var r\u003d[],n\u003dnew i(0,0),a\u003d0;a\u003ct.length;a++){for(var o\u003dt[a],s\u003d[],l\u003d0;l\u003co.length;l++){var c\u003do[l-1],u\u003do[l],f\u003do[l+1],h\u003d0\u003d\u003d\u003dl?n:u.sub(c)._unit()._perp(),p\u003dl\u003d\u003d\u003do.length-1?n:f.sub(u)._unit()._perp(),d\u003dh._add(p)._unit(),m\u003dd.x*p.x+d.y*p.y;d._mult(1/m),s.push(d._mult(e)._add(u))}r.push(s)}return r}(n,u*s)),function(t,e,r){for(var n\u003d0;n\u003ce.length;n++){var i\u003de[n];if(t.length\u003e\u003d3)for(var a\u003d0;a\u003ci.length;a++)if(io(t,i[a]))return!0;if(Qa(t,i,r))return!0}return!1}(l,n,c)},e.prototype.isTileClipped\u003dfunction(){return!0},e}(Ei);function Zs(t,e){return e\u003e0?e+2*t:t}var Js\u003dIi([{name:\"a_pos_offset\",components:4,type:\"Int16\"},{name:\"a_data\",components:4,type:\"Uint16\"},{name:\"a_pixeloffset\",components:4,type:\"Int16\"}],4),Ks\u003dIi([{name:\"a_projected_pos\",components:3,type:\"Float32\"}],4),Qs\u003d(Ii([{name:\"a_fade_opacity\",components:1,type:\"Uint32\"}],4),Ii([{name:\"a_placed\",components:2,type:\"Uint8\"},{name:\"a_shift\",components:2,type:\"Float32\"}])),$s\u003d(Ii([{type:\"Int16\",name:\"anchorPointX\"},{type:\"Int16\",name:\"anchorPointY\"},{type:\"Int16\",name:\"x1\"},{type:\"Int16\",name:\"y1\"},{type:\"Int16\",name:\"x2\"},{type:\"Int16\",name:\"y2\"},{type:\"Uint32\",name:\"featureIndex\"},{type:\"Uint16\",name:\"sourceLayerIndex\"},{type:\"Uint16\",name:\"bucketIndex\"}]),Ii([{name:\"a_pos\",components:2,type:\"Int16\"},{name:\"a_anchor_pos\",components:2,type:\"Int16\"},{name:\"a_extrude\",components:2,type:\"Int16\"}],4)),tl\u003dIi([{name:\"a_pos\",components:2,type:\"Float32\"},{name:\"a_radius\",components:1,type:\"Float32\"},{name:\"a_flags\",components:2,type:\"Int16\"}],4);Ii([{name:\"triangle\",components:3,type:\"Uint16\"}]),Ii([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Uint16\",name:\"glyphStartIndex\"},{type:\"Uint16\",name:\"numGlyphs\"},{type:\"Uint32\",name:\"vertexStartIndex\"},{type:\"Uint32\",name:\"lineStartIndex\"},{type:\"Uint32\",name:\"lineLength\"},{type:\"Uint16\",name:\"segment\"},{type:\"Uint16\",name:\"lowerSize\"},{type:\"Uint16\",name:\"upperSize\"},{type:\"Float32\",name:\"lineOffsetX\"},{type:\"Float32\",name:\"lineOffsetY\"},{type:\"Uint8\",name:\"writingMode\"},{type:\"Uint8\",name:\"placedOrientation\"},{type:\"Uint8\",name:\"hidden\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Int16\",name:\"associatedIconIndex\"}]),Ii([{type:\"Int16\",name:\"anchorX\"},{type:\"Int16\",name:\"anchorY\"},{type:\"Int16\",name:\"rightJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"centerJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"leftJustifiedTextSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedTextSymbolIndex\"},{type:\"Int16\",name:\"placedIconSymbolIndex\"},{type:\"Int16\",name:\"verticalPlacedIconSymbolIndex\"},{type:\"Uint16\",name:\"key\"},{type:\"Uint16\",name:\"textBoxStartIndex\"},{type:\"Uint16\",name:\"textBoxEndIndex\"},{type:\"Uint16\",name:\"verticalTextBoxStartIndex\"},{type:\"Uint16\",name:\"verticalTextBoxEndIndex\"},{type:\"Uint16\",name:\"iconBoxStartIndex\"},{type:\"Uint16\",name:\"iconBoxEndIndex\"},{type:\"Uint16\",name:\"verticalIconBoxStartIndex\"},{type:\"Uint16\",name:\"verticalIconBoxEndIndex\"},{type:\"Uint16\",name:\"featureIndex\"},{type:\"Uint16\",name:\"numHorizontalGlyphVertices\"},{type:\"Uint16\",name:\"numVerticalGlyphVertices\"},{type:\"Uint16\",name:\"numIconVertices\"},{type:\"Uint16\",name:\"numVerticalIconVertices\"},{type:\"Uint16\",name:\"useRuntimeCollisionCircles\"},{type:\"Uint32\",name:\"crossTileID\"},{type:\"Float32\",name:\"textBoxScale\"},{type:\"Float32\",components:2,name:\"textOffset\"},{type:\"Float32\",name:\"collisionCircleDiameter\"}]),Ii([{type:\"Float32\",name:\"offsetX\"}]),Ii([{type:\"Int16\",name:\"x\"},{type:\"Int16\",name:\"y\"},{type:\"Int16\",name:\"tileUnitDistanceFromAnchor\"}]);function el(t,e,r){return t.sections.forEach((function(t){t.text\u003dfunction(t,e,r){var n\u003de.layout.get(\"text-transform\").evaluate(r,{});return\"uppercase\"\u003d\u003d\u003dn?t\u003dt.toLocaleUpperCase():\"lowercase\"\u003d\u003d\u003dn\u0026\u0026(t\u003dt.toLocaleLowerCase()),hi.applyArabicShaping\u0026\u0026(t\u003dhi.applyArabicShaping(t)),t}(t.text,e,r)})),t}var rl\u003d{\"!\":\"\\ufe15\",\"#\":\"\\uff03\",$:\"\\uff04\",\"%\":\"\\uff05\",\"\u0026\":\"\\uff06\",\"(\":\"\\ufe35\",\")\":\"\\ufe36\",\"*\":\"\\uff0a\",\"+\":\"\\uff0b\",\",\":\"\\ufe10\",\"-\":\"\\ufe32\",\".\":\"\\u30fb\",\"/\":\"\\uff0f\",\":\":\"\\ufe13\",\";\":\"\\ufe14\",\"\u003c\":\"\\ufe3f\",\"\u003d\":\"\\uff1d\",\"\u003e\":\"\\ufe40\",\"?\":\"\\ufe16\",\"@\":\"\\uff20\",\"[\":\"\\ufe47\",\"\\\\\":\"\\uff3c\",\"]\":\"\\ufe48\",\"^\":\"\\uff3e\",_:\"\\ufe33\",\"`\":\"\\uff40\",\"{\":\"\\ufe37\",\"|\":\"\\u2015\",\"}\":\"\\ufe38\",\"~\":\"\\uff5e\",\"\\xa2\":\"\\uffe0\",\"\\xa3\":\"\\uffe1\",\"\\xa5\":\"\\uffe5\",\"\\xa6\":\"\\uffe4\",\"\\xac\":\"\\uffe2\",\"\\xaf\":\"\\uffe3\",\"\\u2013\":\"\\ufe32\",\"\\u2014\":\"\\ufe31\",\"\\u2018\":\"\\ufe43\",\"\\u2019\":\"\\ufe44\",\"\\u201c\":\"\\ufe41\",\"\\u201d\":\"\\ufe42\",\"\\u2026\":\"\\ufe19\",\"\\u2027\":\"\\u30fb\",\"\\u20a9\":\"\\uffe6\",\"\\u3001\":\"\\ufe11\",\"\\u3002\":\"\\ufe12\",\"\\u3008\":\"\\ufe3f\",\"\\u3009\":\"\\ufe40\",\"\\u300a\":\"\\ufe3d\",\"\\u300b\":\"\\ufe3e\",\"\\u300c\":\"\\ufe41\",\"\\u300d\":\"\\ufe42\",\"\\u300e\":\"\\ufe43\",\"\\u300f\":\"\\ufe44\",\"\\u3010\":\"\\ufe3b\",\"\\u3011\":\"\\ufe3c\",\"\\u3014\":\"\\ufe39\",\"\\u3015\":\"\\ufe3a\",\"\\u3016\":\"\\ufe17\",\"\\u3017\":\"\\ufe18\",\"\\uff01\":\"\\ufe15\",\"\\uff08\":\"\\ufe35\",\"\\uff09\":\"\\ufe36\",\"\\uff0c\":\"\\ufe10\",\"\\uff0d\":\"\\ufe32\",\"\\uff0e\":\"\\u30fb\",\"\\uff1a\":\"\\ufe13\",\"\\uff1b\":\"\\ufe14\",\"\\uff1c\":\"\\ufe3f\",\"\\uff1e\":\"\\ufe40\",\"\\uff1f\":\"\\ufe16\",\"\\uff3b\":\"\\ufe47\",\"\\uff3d\":\"\\ufe48\",\"\\uff3f\":\"\\ufe33\",\"\\uff5b\":\"\\ufe37\",\"\\uff5c\":\"\\u2015\",\"\\uff5d\":\"\\ufe38\",\"\\uff5f\":\"\\ufe35\",\"\\uff60\":\"\\ufe36\",\"\\uff61\":\"\\ufe12\",\"\\uff62\":\"\\ufe41\",\"\\uff63\":\"\\ufe42\"};var nl\u003dfunction(t,e,r,n,i){var a,o,s\u003d8*i-n-1,l\u003d(1\u003c\u003cs)-1,c\u003dl\u003e\u003e1,u\u003d-7,f\u003dr?i-1:0,h\u003dr?-1:1,p\u003dt[e+f];for(f+\u003dh,a\u003dp\u0026(1\u003c\u003c-u)-1,p\u003e\u003e\u003d-u,u+\u003ds;u\u003e0;a\u003d256*a+t[e+f],f+\u003dh,u-\u003d8);for(o\u003da\u0026(1\u003c\u003c-u)-1,a\u003e\u003e\u003d-u,u+\u003dn;u\u003e0;o\u003d256*o+t[e+f],f+\u003dh,u-\u003d8);if(0\u003d\u003d\u003da)a\u003d1-c;else{if(a\u003d\u003d\u003dl)return o?NaN:1/0*(p?-1:1);o+\u003dMath.pow(2,n),a-\u003dc}return(p?-1:1)*o*Math.pow(2,a-n)},il\u003dfunction(t,e,r,n,i,a){var o,s,l,c\u003d8*a-i-1,u\u003d(1\u003c\u003cc)-1,f\u003du\u003e\u003e1,h\u003d23\u003d\u003d\u003di?Math.pow(2,-24)-Math.pow(2,-77):0,p\u003dn?0:a-1,d\u003dn?1:-1,m\u003de\u003c0||0\u003d\u003d\u003de\u0026\u00261/e\u003c0?1:0;for(e\u003dMath.abs(e),isNaN(e)||e\u003d\u003d\u003d1/0?(s\u003disNaN(e)?1:0,o\u003du):(o\u003dMath.floor(Math.log(e)/Math.LN2),e*(l\u003dMath.pow(2,-o))\u003c1\u0026\u0026(o--,l*\u003d2),(e+\u003do+f\u003e\u003d1?h/l:h*Math.pow(2,1-f))*l\u003e\u003d2\u0026\u0026(o++,l/\u003d2),o+f\u003e\u003du?(s\u003d0,o\u003du):o+f\u003e\u003d1?(s\u003d(e*l-1)*Math.pow(2,i),o+\u003df):(s\u003de*Math.pow(2,f-1)*Math.pow(2,i),o\u003d0));i\u003e\u003d8;t[r+p]\u003d255\u0026s,p+\u003dd,s/\u003d256,i-\u003d8);for(o\u003do\u003c\u003ci|s,c+\u003di;c\u003e0;t[r+p]\u003d255\u0026o,p+\u003dd,o/\u003d256,c-\u003d8);t[r+p-d]|\u003d128*m},al\u003dol;function ol(t){this.buf\u003dArrayBuffer.isView\u0026\u0026ArrayBuffer.isView(t)?t:new Uint8Array(t||0),this.pos\u003d0,this.type\u003d0,this.length\u003dthis.buf.length}ol.Varint\u003d0,ol.Fixed64\u003d1,ol.Bytes\u003d2,ol.Fixed32\u003d5;var sl\u003d\"undefined\"\u003d\u003dtypeof TextDecoder?null:new TextDecoder(\"utf8\");function ll(t){return t.type\u003d\u003d\u003dol.Bytes?t.readVarint()+t.pos:t.pos+1}function cl(t,e,r){return r?4294967296*e+(t\u003e\u003e\u003e0):4294967296*(e\u003e\u003e\u003e0)+(t\u003e\u003e\u003e0)}function ul(t,e,r){var n\u003de\u003c\u003d16383?1:e\u003c\u003d2097151?2:e\u003c\u003d268435455?3:Math.floor(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i\u003dr.pos-1;i\u003e\u003dt;i--)r.buf[i+n]\u003dr.buf[i]}function fl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeVarint(t[r])}function hl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeSVarint(t[r])}function pl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeFloat(t[r])}function dl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeDouble(t[r])}function ml(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeBoolean(t[r])}function gl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeFixed32(t[r])}function vl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeSFixed32(t[r])}function yl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeFixed64(t[r])}function xl(t,e){for(var r\u003d0;r\u003ct.length;r++)e.writeSFixed64(t[r])}function bl(t,e){return(t[e]|t[e+1]\u003c\u003c8|t[e+2]\u003c\u003c16)+16777216*t[e+3]}function _l(t,e,r){t[r]\u003de,t[r+1]\u003de\u003e\u003e\u003e8,t[r+2]\u003de\u003e\u003e\u003e16,t[r+3]\u003de\u003e\u003e\u003e24}function wl(t,e){return(t[e]|t[e+1]\u003c\u003c8|t[e+2]\u003c\u003c16)+(t[e+3]\u003c\u003c24)}ol.prototype\u003d{destroy:function(){this.buf\u003dnull},readFields:function(t,e,r){for(r\u003dr||this.length;this.pos\u003cr;){var n\u003dthis.readVarint(),i\u003dn\u003e\u003e3,a\u003dthis.pos;this.type\u003d7\u0026n,t(i,e,this),this.pos\u003d\u003d\u003da\u0026\u0026this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t\u003dbl(this.buf,this.pos);return this.pos+\u003d4,t},readSFixed32:function(){var t\u003dwl(this.buf,this.pos);return this.pos+\u003d4,t},readFixed64:function(){var t\u003dbl(this.buf,this.pos)+4294967296*bl(this.buf,this.pos+4);return this.pos+\u003d8,t},readSFixed64:function(){var t\u003dbl(this.buf,this.pos)+4294967296*wl(this.buf,this.pos+4);return this.pos+\u003d8,t},readFloat:function(){var t\u003dnl(this.buf,this.pos,!0,23,4);return this.pos+\u003d4,t},readDouble:function(){var t\u003dnl(this.buf,this.pos,!0,52,8);return this.pos+\u003d8,t},readVarint:function(t){var e,r,n\u003dthis.buf;return e\u003d127\u0026(r\u003dn[this.pos++]),r\u003c128?e:(e|\u003d(127\u0026(r\u003dn[this.pos++]))\u003c\u003c7,r\u003c128?e:(e|\u003d(127\u0026(r\u003dn[this.pos++]))\u003c\u003c14,r\u003c128?e:(e|\u003d(127\u0026(r\u003dn[this.pos++]))\u003c\u003c21,r\u003c128?e:function(t,e,r){var n,i,a\u003dr.buf;if(i\u003da[r.pos++],n\u003d(112\u0026i)\u003e\u003e4,i\u003c128)return cl(t,n,e);if(i\u003da[r.pos++],n|\u003d(127\u0026i)\u003c\u003c3,i\u003c128)return cl(t,n,e);if(i\u003da[r.pos++],n|\u003d(127\u0026i)\u003c\u003c10,i\u003c128)return cl(t,n,e);if(i\u003da[r.pos++],n|\u003d(127\u0026i)\u003c\u003c17,i\u003c128)return cl(t,n,e);if(i\u003da[r.pos++],n|\u003d(127\u0026i)\u003c\u003c24,i\u003c128)return cl(t,n,e);if(i\u003da[r.pos++],n|\u003d(1\u0026i)\u003c\u003c31,i\u003c128)return cl(t,n,e);throw new Error(\"Expected varint not more than 10 bytes\")}(e|\u003d(15\u0026(r\u003dn[this.pos]))\u003c\u003c28,t,this))))},readVarint64:function(){return this.readVarint(!0)},readSVarint:function(){var t\u003dthis.readVarint();return t%2\u003d\u003d1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t\u003dthis.readVarint()+this.pos,e\u003dthis.pos;return this.pos\u003dt,t-e\u003e\u003d12\u0026\u0026sl?function(t,e,r){return sl.decode(t.subarray(e,r))}(this.buf,e,t):function(t,e,r){var n\u003d\"\",i\u003de;for(;i\u003cr;){var a,o,s,l\u003dt[i],c\u003dnull,u\u003dl\u003e239?4:l\u003e223?3:l\u003e191?2:1;if(i+u\u003er)break;1\u003d\u003d\u003du?l\u003c128\u0026\u0026(c\u003dl):2\u003d\u003d\u003du?128\u003d\u003d(192\u0026(a\u003dt[i+1]))\u0026\u0026(c\u003d(31\u0026l)\u003c\u003c6|63\u0026a)\u003c\u003d127\u0026\u0026(c\u003dnull):3\u003d\u003d\u003du?(a\u003dt[i+1],o\u003dt[i+2],128\u003d\u003d(192\u0026a)\u0026\u0026128\u003d\u003d(192\u0026o)\u0026\u0026((c\u003d(15\u0026l)\u003c\u003c12|(63\u0026a)\u003c\u003c6|63\u0026o)\u003c\u003d2047||c\u003e\u003d55296\u0026\u0026c\u003c\u003d57343)\u0026\u0026(c\u003dnull)):4\u003d\u003d\u003du\u0026\u0026(a\u003dt[i+1],o\u003dt[i+2],s\u003dt[i+3],128\u003d\u003d(192\u0026a)\u0026\u0026128\u003d\u003d(192\u0026o)\u0026\u0026128\u003d\u003d(192\u0026s)\u0026\u0026((c\u003d(15\u0026l)\u003c\u003c18|(63\u0026a)\u003c\u003c12|(63\u0026o)\u003c\u003c6|63\u0026s)\u003c\u003d65535||c\u003e\u003d1114112)\u0026\u0026(c\u003dnull)),null\u003d\u003d\u003dc?(c\u003d65533,u\u003d1):c\u003e65535\u0026\u0026(c-\u003d65536,n+\u003dString.fromCharCode(c\u003e\u003e\u003e10\u00261023|55296),c\u003d56320|1023\u0026c),n+\u003dString.fromCharCode(c),i+\u003du}return n}(this.buf,e,t)},readBytes:function(){var t\u003dthis.readVarint()+this.pos,e\u003dthis.buf.subarray(this.pos,t);return this.pos\u003dt,e},readPackedVarint:function(t,e){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readVarint(e));var r\u003dll(this);for(t\u003dt||[];this.pos\u003cr;)t.push(this.readVarint(e));return t},readPackedSVarint:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readSVarint());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readSVarint());return t},readPackedBoolean:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readBoolean());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readBoolean());return t},readPackedFloat:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readFloat());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readFloat());return t},readPackedDouble:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readDouble());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readDouble());return t},readPackedFixed32:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readFixed32());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readFixed32());return t},readPackedSFixed32:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readSFixed32());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readSFixed32());return t},readPackedFixed64:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readFixed64());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readFixed64());return t},readPackedSFixed64:function(t){if(this.type!\u003d\u003dol.Bytes)return t.push(this.readSFixed64());var e\u003dll(this);for(t\u003dt||[];this.pos\u003ce;)t.push(this.readSFixed64());return t},skip:function(t){var e\u003d7\u0026t;if(e\u003d\u003d\u003dol.Varint)for(;this.buf[this.pos++]\u003e127;);else if(e\u003d\u003d\u003dol.Bytes)this.pos\u003dthis.readVarint()+this.pos;else if(e\u003d\u003d\u003dol.Fixed32)this.pos+\u003d4;else{if(e!\u003d\u003dol.Fixed64)throw new Error(\"Unimplemented type: \"+e);this.pos+\u003d8}},writeTag:function(t,e){this.writeVarint(t\u003c\u003c3|e)},realloc:function(t){for(var e\u003dthis.length||16;e\u003cthis.pos+t;)e*\u003d2;if(e!\u003d\u003dthis.length){var r\u003dnew Uint8Array(e);r.set(this.buf),this.buf\u003dr,this.length\u003de}},finish:function(){return this.length\u003dthis.pos,this.pos\u003d0,this.buf.subarray(0,this.length)},writeFixed32:function(t){this.realloc(4),_l(this.buf,t,this.pos),this.pos+\u003d4},writeSFixed32:function(t){this.realloc(4),_l(this.buf,t,this.pos),this.pos+\u003d4},writeFixed64:function(t){this.realloc(8),_l(this.buf,-1\u0026t,this.pos),_l(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+\u003d8},writeSFixed64:function(t){this.realloc(8),_l(this.buf,-1\u0026t,this.pos),_l(this.buf,Math.floor(t*(1/4294967296)),this.pos+4),this.pos+\u003d8},writeVarint:function(t){(t\u003d+t||0)\u003e268435455||t\u003c0?function(t,e){var r,n;t\u003e\u003d0?(r\u003dt%4294967296|0,n\u003dt/4294967296|0):(n\u003d~(-t/4294967296),4294967295^(r\u003d~(-t%4294967296))?r\u003dr+1|0:(r\u003d0,n\u003dn+1|0));if(t\u003e\u003d0x10000000000000000||t\u003c-0x10000000000000000)throw new Error(\"Given varint doesn\u0027t fit into 10 bytes\");e.realloc(10),function(t,e,r){r.buf[r.pos++]\u003d127\u0026t|128,t\u003e\u003e\u003e\u003d7,r.buf[r.pos++]\u003d127\u0026t|128,t\u003e\u003e\u003e\u003d7,r.buf[r.pos++]\u003d127\u0026t|128,t\u003e\u003e\u003e\u003d7,r.buf[r.pos++]\u003d127\u0026t|128,t\u003e\u003e\u003e\u003d7,r.buf[r.pos]\u003d127\u0026t}(r,0,e),function(t,e){var r\u003d(7\u0026t)\u003c\u003c4;if(e.buf[e.pos++]|\u003dr|((t\u003e\u003e\u003e\u003d3)?128:0),!t)return;if(e.buf[e.pos++]\u003d127\u0026t|((t\u003e\u003e\u003e\u003d7)?128:0),!t)return;if(e.buf[e.pos++]\u003d127\u0026t|((t\u003e\u003e\u003e\u003d7)?128:0),!t)return;if(e.buf[e.pos++]\u003d127\u0026t|((t\u003e\u003e\u003e\u003d7)?128:0),!t)return;if(e.buf[e.pos++]\u003d127\u0026t|((t\u003e\u003e\u003e\u003d7)?128:0),!t)return;e.buf[e.pos++]\u003d127\u0026t}(n,e)}(t,this):(this.realloc(4),this.buf[this.pos++]\u003d127\u0026t|(t\u003e127?128:0),t\u003c\u003d127||(this.buf[this.pos++]\u003d127\u0026(t\u003e\u003e\u003e\u003d7)|(t\u003e127?128:0),t\u003c\u003d127||(this.buf[this.pos++]\u003d127\u0026(t\u003e\u003e\u003e\u003d7)|(t\u003e127?128:0),t\u003c\u003d127||(this.buf[this.pos++]\u003dt\u003e\u003e\u003e7\u0026127))))},writeSVarint:function(t){this.writeVarint(t\u003c0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t\u003dString(t),this.realloc(4*t.length),this.pos++;var e\u003dthis.pos;this.pos\u003dfunction(t,e,r){for(var n,i,a\u003d0;a\u003ce.length;a++){if((n\u003de.charCodeAt(a))\u003e55295\u0026\u0026n\u003c57344){if(!i){n\u003e56319||a+1\u003d\u003d\u003de.length?(t[r++]\u003d239,t[r++]\u003d191,t[r++]\u003d189):i\u003dn;continue}if(n\u003c56320){t[r++]\u003d239,t[r++]\u003d191,t[r++]\u003d189,i\u003dn;continue}n\u003di-55296\u003c\u003c10|n-56320|65536,i\u003dnull}else i\u0026\u0026(t[r++]\u003d239,t[r++]\u003d191,t[r++]\u003d189,i\u003dnull);n\u003c128?t[r++]\u003dn:(n\u003c2048?t[r++]\u003dn\u003e\u003e6|192:(n\u003c65536?t[r++]\u003dn\u003e\u003e12|224:(t[r++]\u003dn\u003e\u003e18|240,t[r++]\u003dn\u003e\u003e12\u002663|128),t[r++]\u003dn\u003e\u003e6\u002663|128),t[r++]\u003d63\u0026n|128)}return r}(this.buf,t,this.pos);var r\u003dthis.pos-e;r\u003e\u003d128\u0026\u0026ul(e,r,this),this.pos\u003de-1,this.writeVarint(r),this.pos+\u003dr},writeFloat:function(t){this.realloc(4),il(this.buf,t,this.pos,!0,23,4),this.pos+\u003d4},writeDouble:function(t){this.realloc(8),il(this.buf,t,this.pos,!0,52,8),this.pos+\u003d8},writeBytes:function(t){var e\u003dt.length;this.writeVarint(e),this.realloc(e);for(var r\u003d0;r\u003ce;r++)this.buf[this.pos++]\u003dt[r]},writeRawMessage:function(t,e){this.pos++;var r\u003dthis.pos;t(e,this);var n\u003dthis.pos-r;n\u003e\u003d128\u0026\u0026ul(r,n,this),this.pos\u003dr-1,this.writeVarint(n),this.pos+\u003dn},writeMessage:function(t,e,r){this.writeTag(t,ol.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){e.length\u0026\u0026this.writeMessage(t,fl,e)},writePackedSVarint:function(t,e){e.length\u0026\u0026this.writeMessage(t,hl,e)},writePackedBoolean:function(t,e){e.length\u0026\u0026this.writeMessage(t,ml,e)},writePackedFloat:function(t,e){e.length\u0026\u0026this.writeMessage(t,pl,e)},writePackedDouble:function(t,e){e.length\u0026\u0026this.writeMessage(t,dl,e)},writePackedFixed32:function(t,e){e.length\u0026\u0026this.writeMessage(t,gl,e)},writePackedSFixed32:function(t,e){e.length\u0026\u0026this.writeMessage(t,vl,e)},writePackedFixed64:function(t,e){e.length\u0026\u0026this.writeMessage(t,yl,e)},writePackedSFixed64:function(t,e){e.length\u0026\u0026this.writeMessage(t,xl,e)},writeBytesField:function(t,e){this.writeTag(t,ol.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,ol.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,ol.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,ol.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,ol.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,ol.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,ol.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,ol.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,ol.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,ol.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}};function Tl(t,e,r){1\u003d\u003d\u003dt\u0026\u0026r.readMessage(kl,e)}function kl(t,e,r){if(3\u003d\u003d\u003dt){var n\u003dr.readMessage(Ml,{}),i\u003dn.id,a\u003dn.bitmap,o\u003dn.width,s\u003dn.height,l\u003dn.left,c\u003dn.top,u\u003dn.advance;e.push({id:i,bitmap:new So({width:o+6,height:s+6},a),metrics:{width:o,height:s,left:l,top:c,advance:u}})}}function Ml(t,e,r){1\u003d\u003d\u003dt?e.id\u003dr.readVarint():2\u003d\u003d\u003dt?e.bitmap\u003dr.readBytes():3\u003d\u003d\u003dt?e.width\u003dr.readVarint():4\u003d\u003d\u003dt?e.height\u003dr.readVarint():5\u003d\u003d\u003dt?e.left\u003dr.readSVarint():6\u003d\u003d\u003dt?e.top\u003dr.readSVarint():7\u003d\u003d\u003dt\u0026\u0026(e.advance\u003dr.readVarint())}function Al(t){for(var e\u003d0,r\u003d0,n\u003d0,i\u003dt;n\u003ci.length;n+\u003d1){var a\u003di[n];e+\u003da.w*a.h,r\u003dMath.max(r,a.w)}t.sort((function(t,e){return e.h-t.h}));for(var o\u003d[{x:0,y:0,w:Math.max(Math.ceil(Math.sqrt(e/.95)),r),h:1/0}],s\u003d0,l\u003d0,c\u003d0,u\u003dt;c\u003cu.length;c+\u003d1)for(var f\u003du[c],h\u003do.length-1;h\u003e\u003d0;h--){var p\u003do[h];if(!(f.w\u003ep.w||f.h\u003ep.h)){if(f.x\u003dp.x,f.y\u003dp.y,l\u003dMath.max(l,f.y+f.h),s\u003dMath.max(s,f.x+f.w),f.w\u003d\u003d\u003dp.w\u0026\u0026f.h\u003d\u003d\u003dp.h){var d\u003do.pop();h\u003co.length\u0026\u0026(o[h]\u003dd)}else f.h\u003d\u003d\u003dp.h?(p.x+\u003df.w,p.w-\u003df.w):f.w\u003d\u003d\u003dp.w?(p.y+\u003df.h,p.h-\u003df.h):(o.push({x:p.x+f.w,y:p.y,w:p.w-f.w,h:f.h}),p.y+\u003df.h,p.h-\u003df.h);break}}return{w:s,h:l,fill:e/(s*l)||0}}var Sl\u003dfunction(t,e){var r\u003de.pixelRatio,n\u003de.version,i\u003de.stretchX,a\u003de.stretchY,o\u003de.content;this.paddedRect\u003dt,this.pixelRatio\u003dr,this.stretchX\u003di,this.stretchY\u003da,this.content\u003do,this.version\u003dn},El\u003d{tl:{configurable:!0},br:{configurable:!0},tlbr:{configurable:!0},displaySize:{configurable:!0}};El.tl.get\u003dfunction(){return[this.paddedRect.x+1,this.paddedRect.y+1]},El.br.get\u003dfunction(){return[this.paddedRect.x+this.paddedRect.w-1,this.paddedRect.y+this.paddedRect.h-1]},El.tlbr.get\u003dfunction(){return this.tl.concat(this.br)},El.displaySize.get\u003dfunction(){return[(this.paddedRect.w-2)/this.pixelRatio,(this.paddedRect.h-2)/this.pixelRatio]},Object.defineProperties(Sl.prototype,El);var Ll\u003dfunction(t,e){var r\u003d{},n\u003d{};this.haveRenderCallbacks\u003d[];var i\u003d[];this.addImages(t,r,i),this.addImages(e,n,i);var a\u003dAl(i),o\u003da.w,s\u003da.h,l\u003dnew Eo({width:o||1,height:s||1});for(var c in t){var u\u003dt[c],f\u003dr[c].paddedRect;Eo.copy(u.data,l,{x:0,y:0},{x:f.x+1,y:f.y+1},u.data)}for(var h in e){var p\u003de[h],d\u003dn[h].paddedRect,m\u003dd.x+1,g\u003dd.y+1,v\u003dp.data.width,y\u003dp.data.height;Eo.copy(p.data,l,{x:0,y:0},{x:m,y:g},p.data),Eo.copy(p.data,l,{x:0,y:y-1},{x:m,y:g-1},{width:v,height:1}),Eo.copy(p.data,l,{x:0,y:0},{x:m,y:g+y},{width:v,height:1}),Eo.copy(p.data,l,{x:v-1,y:0},{x:m-1,y:g},{width:1,height:y}),Eo.copy(p.data,l,{x:0,y:0},{x:m+v,y:g},{width:1,height:y})}this.image\u003dl,this.iconPositions\u003dr,this.patternPositions\u003dn};Ll.prototype.addImages\u003dfunction(t,e,r){for(var n in t){var i\u003dt[n],a\u003d{x:0,y:0,w:i.data.width+2,h:i.data.height+2};r.push(a),e[n]\u003dnew Sl(a,i),i.hasRenderCallback\u0026\u0026this.haveRenderCallbacks.push(n)}},Ll.prototype.patchUpdatedImages\u003dfunction(t,e){for(var r in t.dispatchRenderCallbacks(this.haveRenderCallbacks),t.updatedImages)this.patchUpdatedImage(this.iconPositions[r],t.getImage(r),e),this.patchUpdatedImage(this.patternPositions[r],t.getImage(r),e)},Ll.prototype.patchUpdatedImage\u003dfunction(t,e,r){if(t\u0026\u0026e\u0026\u0026t.version!\u003d\u003de.version){t.version\u003de.version;var n\u003dt.tl,i\u003dn[0],a\u003dn[1];r.update(e.data,void 0,{x:i,y:a})}},Nn(\"ImagePosition\",Sl),Nn(\"ImageAtlas\",Ll);var Cl\u003d{horizontal:1,vertical:2,horizontalOnly:3};var Pl\u003dfunction(){this.scale\u003d1,this.fontStack\u003d\"\",this.imageName\u003dnull};Pl.forText\u003dfunction(t,e){var r\u003dnew Pl;return r.scale\u003dt||1,r.fontStack\u003de,r},Pl.forImage\u003dfunction(t){var e\u003dnew Pl;return e.imageName\u003dt,e};var Il\u003dfunction(){this.text\u003d\"\",this.sectionIndex\u003d[],this.sections\u003d[],this.imageSectionID\u003dnull};function Ol(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m){var g,v\u003dIl.fromFeature(t,i);f\u003d\u003d\u003dCl.vertical\u0026\u0026v.verticalizePunctuation();var y\u003dhi.processBidirectionalText,x\u003dhi.processStyledBidirectionalText;if(y\u0026\u00261\u003d\u003d\u003dv.sections.length){g\u003d[];for(var b\u003d0,_\u003dy(v.toString(),jl(v,c,a,e,n,p,d));b\u003c_.length;b+\u003d1){var w\u003d_[b],T\u003dnew Il;T.text\u003dw,T.sections\u003dv.sections;for(var k\u003d0;k\u003cw.length;k++)T.sectionIndex.push(0);g.push(T)}}else if(x){g\u003d[];for(var M\u003d0,A\u003dx(v.text,v.sectionIndex,jl(v,c,a,e,n,p,d));M\u003cA.length;M+\u003d1){var S\u003dA[M],E\u003dnew Il;E.text\u003dS[0],E.sectionIndex\u003dS[1],E.sections\u003dv.sections,g.push(E)}}else g\u003dfunction(t,e){for(var r\u003d[],n\u003dt.text,i\u003d0,a\u003d0,o\u003de;a\u003co.length;a+\u003d1){var s\u003do[a];r.push(t.substring(i,s)),i\u003ds}return i\u003cn.length\u0026\u0026r.push(t.substring(i,n.length)),r}(v,jl(v,c,a,e,n,p,d));var L\u003d[],C\u003d{positionedLines:L,text:v.toString(),top:u[1],bottom:u[1],left:u[0],right:u[0],writingMode:f,iconsInText:!1,verticalizable:!1};return function(t,e,r,n,i,a,o,s,l,c,u,f){for(var h\u003d0,p\u003d-17,d\u003d0,m\u003d0,g\u003d\"right\"\u003d\u003d\u003ds?1:\"left\"\u003d\u003d\u003ds?0:.5,v\u003d0,y\u003d0,x\u003di;y\u003cx.length;y+\u003d1){var b\u003dx[y];b.trim();var _\u003db.getMaxScale(),w\u003d24*(_-1),T\u003d{positionedGlyphs:[],lineOffset:0};t.positionedLines[v]\u003dT;var k\u003dT.positionedGlyphs,M\u003d0;if(b.length()){for(var A\u003d0;A\u003cb.length();A++){var S\u003db.getSection(A),E\u003db.getSectionIndex(A),L\u003db.getCharCode(A),C\u003d0,P\u003dnull,I\u003dnull,O\u003dnull,z\u003d24,D\u003d!(l\u003d\u003d\u003dCl.horizontal||!u\u0026\u0026!Zn(L)||u\u0026\u0026(zl[L]||(Y\u003dL,Yn.Arabic(Y)||Yn[\"Arabic Supplement\"](Y)||Yn[\"Arabic Extended-A\"](Y)||Yn[\"Arabic Presentation Forms-A\"](Y)||Yn[\"Arabic Presentation Forms-B\"](Y))));if(S.imageName){var R\u003dn[S.imageName];if(!R)continue;O\u003dS.imageName,t.iconsInText\u003dt.iconsInText||!0,I\u003dR.paddedRect;var F\u003dR.displaySize;S.scale\u003d24*S.scale/f,P\u003d{width:F[0],height:F[1],left:1,top:-3,advance:D?F[1]:F[0]};var B\u003d24-F[1]*S.scale;C\u003dw+B,z\u003dP.advance;var N\u003dD?F[0]*S.scale-24*_:F[1]*S.scale-24*_;N\u003e0\u0026\u0026N\u003eM\u0026\u0026(M\u003dN)}else{var j\u003dr[S.fontStack],U\u003dj\u0026\u0026j[L];if(U\u0026\u0026U.rect)I\u003dU.rect,P\u003dU.metrics;else{var V\u003de[S.fontStack],q\u003dV\u0026\u0026V[L];if(!q)continue;P\u003dq.metrics}C\u003d24*(_-S.scale)}D?(t.verticalizable\u003d!0,k.push({glyph:L,imageName:O,x:h,y:p+C,vertical:D,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:I}),h+\u003dz*S.scale+c):(k.push({glyph:L,imageName:O,x:h,y:p+C,vertical:D,scale:S.scale,fontStack:S.fontStack,sectionIndex:E,metrics:P,rect:I}),h+\u003dP.advance*S.scale+c)}if(0!\u003d\u003dk.length){var H\u003dh-c;d\u003dMath.max(H,d),Vl(k,0,k.length-1,g,M)}h\u003d0;var G\u003da*_+M;T.lineOffset\u003dMath.max(M,w),p+\u003dG,m\u003dMath.max(G,m),++v}else p+\u003da,++v}var Y;var W\u003dp- -17,X\u003dUl(o),Z\u003dX.horizontalAlign,J\u003dX.verticalAlign;(function(t,e,r,n,i,a,o,s,l){var c\u003d(e-r)*i,u\u003d0;u\u003da!\u003d\u003do?-s*n- -17:(-n*l+.5)*o;for(var f\u003d0,h\u003dt;f\u003ch.length;f+\u003d1)for(var p\u003dh[f],d\u003d0,m\u003dp.positionedGlyphs;d\u003cm.length;d+\u003d1){var g\u003dm[d];g.x+\u003dc,g.y+\u003du}})(t.positionedLines,g,Z,J,d,m,a,W,i.length),t.top+\u003d-J*W,t.bottom\u003dt.top+W,t.left+\u003d-Z*d,t.right\u003dt.left+d}(C,e,r,n,g,o,s,l,f,c,h,m),!function(t){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){if(0!\u003d\u003dr[e].positionedGlyphs.length)return!1}return!0}(L)\u0026\u0026C}Il.fromFeature\u003dfunction(t,e){for(var r\u003dnew Il,n\u003d0;n\u003ct.sections.length;n++){var i\u003dt.sections[n];i.image?r.addImageSection(i):r.addTextSection(i,e)}return r},Il.prototype.length\u003dfunction(){return this.text.length},Il.prototype.getSection\u003dfunction(t){return this.sections[this.sectionIndex[t]]},Il.prototype.getSectionIndex\u003dfunction(t){return this.sectionIndex[t]},Il.prototype.getCharCode\u003dfunction(t){return this.text.charCodeAt(t)},Il.prototype.verticalizePunctuation\u003dfunction(){this.text\u003dfunction(t){for(var e\u003d\"\",r\u003d0;r\u003ct.length;r++){var n\u003dt.charCodeAt(r+1)||null,i\u003dt.charCodeAt(r-1)||null;(!n||!Jn(n)||rl[t[r+1]])\u0026\u0026(!i||!Jn(i)||rl[t[r-1]])\u0026\u0026rl[t[r]]?e+\u003drl[t[r]]:e+\u003dt[r]}return e}(this.text)},Il.prototype.trim\u003dfunction(){for(var t\u003d0,e\u003d0;e\u003cthis.text.length\u0026\u0026zl[this.text.charCodeAt(e)];e++)t++;for(var r\u003dthis.text.length,n\u003dthis.text.length-1;n\u003e\u003d0\u0026\u0026n\u003e\u003dt\u0026\u0026zl[this.text.charCodeAt(n)];n--)r--;this.text\u003dthis.text.substring(t,r),this.sectionIndex\u003dthis.sectionIndex.slice(t,r)},Il.prototype.substring\u003dfunction(t,e){var r\u003dnew Il;return r.text\u003dthis.text.substring(t,e),r.sectionIndex\u003dthis.sectionIndex.slice(t,e),r.sections\u003dthis.sections,r},Il.prototype.toString\u003dfunction(){return this.text},Il.prototype.getMaxScale\u003dfunction(){var t\u003dthis;return this.sectionIndex.reduce((function(e,r){return Math.max(e,t.sections[r].scale)}),0)},Il.prototype.addTextSection\u003dfunction(t,e){this.text+\u003dt.text,this.sections.push(Pl.forText(t.scale,t.fontStack||e));for(var r\u003dthis.sections.length-1,n\u003d0;n\u003ct.text.length;++n)this.sectionIndex.push(r)},Il.prototype.addImageSection\u003dfunction(t){var e\u003dt.image?t.image.name:\"\";if(0!\u003d\u003de.length){var r\u003dthis.getNextImageSectionCharCode();r?(this.text+\u003dString.fromCharCode(r),this.sections.push(Pl.forImage(e)),this.sectionIndex.push(this.sections.length-1)):_(\"Reached maximum number of images 6401\")}else _(\"Can\u0027t add FormattedSection with an empty image.\")},Il.prototype.getNextImageSectionCharCode\u003dfunction(){return this.imageSectionID?this.imageSectionID\u003e\u003d63743?null:++this.imageSectionID:(this.imageSectionID\u003d57344,this.imageSectionID)};var zl\u003d{9:!0,10:!0,11:!0,12:!0,13:!0,32:!0},Dl\u003d{};function Rl(t,e,r,n,i,a){if(e.imageName){var o\u003dn[e.imageName];return o?o.displaySize[0]*e.scale*24/a+i:0}var s\u003dr[e.fontStack],l\u003ds\u0026\u0026s[t];return l?l.metrics.advance*e.scale+i:0}function Fl(t,e,r,n){var i\u003dMath.pow(t-e,2);return n?t\u003ce?i/2:2*i:i+Math.abs(r)*r}function Bl(t,e,r){var n\u003d0;return 10\u003d\u003d\u003dt\u0026\u0026(n-\u003d1e4),r\u0026\u0026(n+\u003d150),40!\u003d\u003dt\u0026\u002665288!\u003d\u003dt||(n+\u003d50),41!\u003d\u003de\u0026\u002665289!\u003d\u003de||(n+\u003d50),n}function Nl(t,e,r,n,i,a){for(var o\u003dnull,s\u003dFl(e,r,i,a),l\u003d0,c\u003dn;l\u003cc.length;l+\u003d1){var u\u003dc[l],f\u003dFl(e-u.x,r,i,a)+u.badness;f\u003c\u003ds\u0026\u0026(o\u003du,s\u003df)}return{index:t,x:e,priorBreak:o,badness:s}}function jl(t,e,r,n,i,a,o){if(\"point\"!\u003d\u003da)return[];if(!t)return[];for(var s,l\u003d[],c\u003dfunction(t,e,r,n,i,a){for(var o\u003d0,s\u003d0;s\u003ct.length();s++){var l\u003dt.getSection(s);o+\u003dRl(t.getCharCode(s),l,n,i,e,a)}return o/Math.max(1,Math.ceil(o/r))}(t,e,r,n,i,o),u\u003dt.text.indexOf(\"\\u200b\")\u003e\u003d0,f\u003d0,h\u003d0;h\u003ct.length();h++){var p\u003dt.getSection(h),d\u003dt.getCharCode(h);if(zl[d]||(f+\u003dRl(d,p,n,i,e,o)),h\u003ct.length()-1){var m\u003d!!(!((s\u003dd)\u003c11904)\u0026\u0026(Yn[\"Bopomofo Extended\"](s)||Yn.Bopomofo(s)||Yn[\"CJK Compatibility Forms\"](s)||Yn[\"CJK Compatibility Ideographs\"](s)||Yn[\"CJK Compatibility\"](s)||Yn[\"CJK Radicals Supplement\"](s)||Yn[\"CJK Strokes\"](s)||Yn[\"CJK Symbols and Punctuation\"](s)||Yn[\"CJK Unified Ideographs Extension A\"](s)||Yn[\"CJK Unified Ideographs\"](s)||Yn[\"Enclosed CJK Letters and Months\"](s)||Yn[\"Halfwidth and Fullwidth Forms\"](s)||Yn.Hiragana(s)||Yn[\"Ideographic Description Characters\"](s)||Yn[\"Kangxi Radicals\"](s)||Yn[\"Katakana Phonetic Extensions\"](s)||Yn.Katakana(s)||Yn[\"Vertical Forms\"](s)||Yn[\"Yi Radicals\"](s)||Yn[\"Yi Syllables\"](s)));(Dl[d]||m||p.imageName)\u0026\u0026l.push(Nl(h+1,f,c,l,Bl(d,t.getCharCode(h+1),m\u0026\u0026u),!1))}}return function t(e){return e?t(e.priorBreak).concat(e.index):[]}(Nl(t.length(),f,c,l,0,!0))}function Ul(t){var e\u003d.5,r\u003d.5;switch(t){case\"right\":case\"top-right\":case\"bottom-right\":e\u003d1;break;case\"left\":case\"top-left\":case\"bottom-left\":e\u003d0}switch(t){case\"bottom\":case\"bottom-right\":case\"bottom-left\":r\u003d1;break;case\"top\":case\"top-right\":case\"top-left\":r\u003d0}return{horizontalAlign:e,verticalAlign:r}}function Vl(t,e,r,n,i){if(n||i)for(var a\u003dt[r],o\u003da.metrics.advance*a.scale,s\u003d(t[r].x+o)*n,l\u003de;l\u003c\u003dr;l++)t[l].x-\u003ds,t[l].y+\u003di}function ql(t,e,r,n,i,a){var o,s\u003dt.image;if(s.content){var l\u003ds.content,c\u003ds.pixelRatio||1;o\u003d[l[0]/c,l[1]/c,s.displaySize[0]-l[2]/c,s.displaySize[1]-l[3]/c]}var u,f,h,p,d\u003de.left*a,m\u003de.right*a;\"width\"\u003d\u003d\u003dr||\"both\"\u003d\u003d\u003dr?(p\u003di[0]+d-n[3],f\u003di[0]+m+n[1]):f\u003d(p\u003di[0]+(d+m-s.displaySize[0])/2)+s.displaySize[0];var g\u003de.top*a,v\u003de.bottom*a;return\"height\"\u003d\u003d\u003dr||\"both\"\u003d\u003d\u003dr?(u\u003di[1]+g-n[0],h\u003di[1]+v+n[2]):h\u003d(u\u003di[1]+(g+v-s.displaySize[1])/2)+s.displaySize[1],{image:s,top:u,right:f,bottom:h,left:p,collisionPadding:o}}Dl[10]\u003d!0,Dl[32]\u003d!0,Dl[38]\u003d!0,Dl[40]\u003d!0,Dl[41]\u003d!0,Dl[43]\u003d!0,Dl[45]\u003d!0,Dl[47]\u003d!0,Dl[173]\u003d!0,Dl[183]\u003d!0,Dl[8203]\u003d!0,Dl[8208]\u003d!0,Dl[8211]\u003d!0,Dl[8231]\u003d!0;var Hl\u003dfunction(t){function e(e,r,n,i){t.call(this,e,r),this.angle\u003dn,void 0!\u003d\u003di\u0026\u0026(this.segment\u003di)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.clone\u003dfunction(){return new e(this.x,this.y,this.angle,this.segment)},e}(i);Nn(\"Anchor\",Hl);function Gl(t,e){var r\u003de.expression;if(\"constant\"\u003d\u003d\u003dr.kind)return{kind:\"constant\",layoutSize:r.evaluate(new pi(t+1))};if(\"source\"\u003d\u003d\u003dr.kind)return{kind:\"source\"};for(var n\u003dr.zoomStops,i\u003dr.interpolationType,a\u003d0;a\u003cn.length\u0026\u0026n[a]\u003c\u003dt;)a++;for(var o\u003da\u003dMath.max(0,a-1);o\u003cn.length\u0026\u0026n[o]\u003ct+1;)o++;o\u003dMath.min(n.length-1,o);var s\u003dn[a],l\u003dn[o];return\"composite\"\u003d\u003d\u003dr.kind?{kind:\"composite\",minZoom:s,maxZoom:l,interpolationType:i}:{kind:\"camera\",minZoom:s,maxZoom:l,minSize:r.evaluate(new pi(s)),maxSize:r.evaluate(new pi(l)),interpolationType:i}}function Yl(t,e,r){var n\u003de.uSize,i\u003de.uSizeT,a\u003dr.lowerSize,o\u003dr.upperSize;return\"source\"\u003d\u003d\u003dt.kind?a/128:\"composite\"\u003d\u003d\u003dt.kind?He(a/128,o/128,i):n}function Wl(t,e){var r\u003d0,n\u003d0;if(\"constant\"\u003d\u003d\u003dt.kind)n\u003dt.layoutSize;else if(\"source\"!\u003d\u003dt.kind){var i\u003dt.interpolationType,a\u003dt.minZoom,o\u003dt.maxZoom,s\u003di?l(or.interpolationFactor(i,e,a,o),0,1):0;\"camera\"\u003d\u003d\u003dt.kind?n\u003dHe(t.minSize,t.maxSize,s):r\u003ds}return{uSizeT:r,uSize:n}}var Xl\u003dObject.freeze({__proto__:null,getSizeData:Gl,evaluateSizeForFeature:Yl,evaluateSizeForZoom:Wl,SIZE_PACK_FACTOR:128});function Zl(t,e,r,n,i){if(void 0\u003d\u003d\u003de.segment)return!0;for(var a\u003de,o\u003de.segment+1,s\u003d0;s\u003e-r/2;){if(--o\u003c0)return!1;s-\u003dt[o].dist(a),a\u003dt[o]}s+\u003dt[o].dist(t[o+1]),o++;for(var l\u003d[],c\u003d0;s\u003cr/2;){var u\u003dt[o-1],f\u003dt[o],h\u003dt[o+1];if(!h)return!1;var p\u003du.angleTo(f)-f.angleTo(h);for(p\u003dMath.abs((p+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:p}),c+\u003dp;s-l[0].distance\u003en;)c-\u003dl.shift().angleDelta;if(c\u003ei)return!1;o++,s+\u003df.dist(h)}return!0}function Jl(t){for(var e\u003d0,r\u003d0;r\u003ct.length-1;r++)e+\u003dt[r].dist(t[r+1]);return e}function Kl(t,e,r){return t?.6*e*r:0}function Ql(t,e){return Math.max(t?t.right-t.left:0,e?e.right-e.left:0)}function $l(t,e,r,n,i,a){for(var o\u003dKl(r,i,a),s\u003dQl(r,n)*a,l\u003d0,c\u003dJl(t)/2,u\u003d0;u\u003ct.length-1;u++){var f\u003dt[u],h\u003dt[u+1],p\u003df.dist(h);if(l+p\u003ec){var d\u003d(c-l)/p,m\u003dHe(f.x,h.x,d),g\u003dHe(f.y,h.y,d),v\u003dnew Hl(m,g,h.angleTo(f),u);return v._round(),!o||Zl(t,v,s,o,e)?v:void 0}l+\u003dp}}function tc(t,e,r,n,i,a,o,s,l){var c\u003dKl(n,a,o),u\u003dQl(n,i),f\u003du*o,h\u003d0\u003d\u003d\u003dt[0].x||t[0].x\u003d\u003d\u003dl||0\u003d\u003d\u003dt[0].y||t[0].y\u003d\u003d\u003dl;return e-f\u003ce/4\u0026\u0026(e\u003df+e/4),function t(e,r,n,i,a,o,s,l,c){for(var u\u003do/2,f\u003dJl(e),h\u003d0,p\u003dr-n,d\u003d[],m\u003d0;m\u003ce.length-1;m++){for(var g\u003de[m],v\u003de[m+1],y\u003dg.dist(v),x\u003dv.angleTo(g);p+n\u003ch+y;){var b\u003d((p+\u003dn)-h)/y,_\u003dHe(g.x,v.x,b),w\u003dHe(g.y,v.y,b);if(_\u003e\u003d0\u0026\u0026_\u003cc\u0026\u0026w\u003e\u003d0\u0026\u0026w\u003cc\u0026\u0026p-u\u003e\u003d0\u0026\u0026p+u\u003c\u003df){var T\u003dnew Hl(_,w,x,m);T._round(),i\u0026\u0026!Zl(e,T,o,i,a)||d.push(T)}}h+\u003dy}l||d.length||s||(d\u003dt(e,h/2,n,i,a,o,s,!0,c));return d}(t,h?e/2*s%e:(u/2+2*a)*o*s%e,e,c,r,f,h,!1,l)}function ec(t,e,r,n,a){for(var o\u003d[],s\u003d0;s\u003ct.length;s++)for(var l\u003dt[s],c\u003dvoid 0,u\u003d0;u\u003cl.length-1;u++){var f\u003dl[u],h\u003dl[u+1];f.x\u003ce\u0026\u0026h.x\u003ce||(f.x\u003ce?f\u003dnew i(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round():h.x\u003ce\u0026\u0026(h\u003dnew i(e,f.y+(h.y-f.y)*((e-f.x)/(h.x-f.x)))._round()),f.y\u003cr\u0026\u0026h.y\u003cr||(f.y\u003cr?f\u003dnew i(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round():h.y\u003cr\u0026\u0026(h\u003dnew i(f.x+(h.x-f.x)*((r-f.y)/(h.y-f.y)),r)._round()),f.x\u003e\u003dn\u0026\u0026h.x\u003e\u003dn||(f.x\u003e\u003dn?f\u003dnew i(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round():h.x\u003e\u003dn\u0026\u0026(h\u003dnew i(n,f.y+(h.y-f.y)*((n-f.x)/(h.x-f.x)))._round()),f.y\u003e\u003da\u0026\u0026h.y\u003e\u003da||(f.y\u003e\u003da?f\u003dnew i(f.x+(h.x-f.x)*((a-f.y)/(h.y-f.y)),a)._round():h.y\u003e\u003da\u0026\u0026(h\u003dnew i(f.x+(h.x-f.x)*((a-f.y)/(h.y-f.y)),a)._round()),c\u0026\u0026f.equals(c[c.length-1])||(c\u003d[f],o.push(c)),c.push(h)))))}return o}function rc(t,e,r,n){var a\u003d[],o\u003dt.image,s\u003do.pixelRatio,l\u003do.paddedRect.w-2,c\u003do.paddedRect.h-2,u\u003dt.right-t.left,f\u003dt.bottom-t.top,h\u003do.stretchX||[[0,l]],p\u003do.stretchY||[[0,c]],d\u003dfunction(t,e){return t+e[1]-e[0]},m\u003dh.reduce(d,0),g\u003dp.reduce(d,0),v\u003dl-m,y\u003dc-g,x\u003d0,b\u003dm,_\u003d0,w\u003dg,T\u003d0,k\u003dv,M\u003d0,A\u003dy;if(o.content\u0026\u0026n){var S\u003do.content;x\u003dnc(h,0,S[0]),_\u003dnc(p,0,S[1]),b\u003dnc(h,S[0],S[2]),w\u003dnc(p,S[1],S[3]),T\u003dS[0]-x,M\u003dS[1]-_,k\u003dS[2]-S[0]-b,A\u003dS[3]-S[1]-w}var E\u003dfunction(n,a,l,c){var h\u003dac(n.stretch-x,b,u,t.left),p\u003doc(n.fixed-T,k,n.stretch,m),d\u003dac(a.stretch-_,w,f,t.top),v\u003doc(a.fixed-M,A,a.stretch,g),y\u003dac(l.stretch-x,b,u,t.left),S\u003doc(l.fixed-T,k,l.stretch,m),E\u003dac(c.stretch-_,w,f,t.top),L\u003doc(c.fixed-M,A,c.stretch,g),C\u003dnew i(h,d),P\u003dnew i(y,d),I\u003dnew i(y,E),O\u003dnew i(h,E),z\u003dnew i(p/s,v/s),D\u003dnew i(S/s,L/s),R\u003de*Math.PI/180;if(R){var F\u003dMath.sin(R),B\u003dMath.cos(R),N\u003d[B,-F,F,B];C._matMult(N),P._matMult(N),O._matMult(N),I._matMult(N)}var j\u003dn.stretch+n.fixed,U\u003dl.stretch+l.fixed,V\u003da.stretch+a.fixed,q\u003dc.stretch+c.fixed;return{tl:C,tr:P,bl:O,br:I,tex:{x:o.paddedRect.x+1+j,y:o.paddedRect.y+1+V,w:U-j,h:q-V},writingMode:void 0,glyphOffset:[0,0],sectionIndex:0,pixelOffsetTL:z,pixelOffsetBR:D,minFontScaleX:k/s/u,minFontScaleY:A/s/f,isSDF:r}};if(n\u0026\u0026(o.stretchX||o.stretchY))for(var L\u003dic(h,v,m),C\u003dic(p,y,g),P\u003d0;P\u003cL.length-1;P++)for(var I\u003dL[P],O\u003dL[P+1],z\u003d0;z\u003cC.length-1;z++){var D\u003dC[z],R\u003dC[z+1];a.push(E(I,D,O,R))}else a.push(E({fixed:0,stretch:-1},{fixed:0,stretch:-1},{fixed:0,stretch:l+1},{fixed:0,stretch:c+1}));return a}function nc(t,e,r){for(var n\u003d0,i\u003d0,a\u003dt;i\u003ca.length;i+\u003d1){var o\u003da[i];n+\u003dMath.max(e,Math.min(r,o[1]))-Math.max(e,Math.min(r,o[0]))}return n}function ic(t,e,r){for(var n\u003d[{fixed:-1,stretch:0}],i\u003d0,a\u003dt;i\u003ca.length;i+\u003d1){var o\u003da[i],s\u003do[0],l\u003do[1],c\u003dn[n.length-1];n.push({fixed:s-c.stretch,stretch:c.stretch}),n.push({fixed:s-c.stretch,stretch:c.stretch+(l-s)})}return n.push({fixed:e+1,stretch:r}),n}function ac(t,e,r,n){return t/e*r+n}function oc(t,e,r,n){return t-e*r/n}var sc\u003dfunction(t,e,r,n,a,o,s,l,c,u){if(this.boxStartIndex\u003dt.length,c){var f\u003do.top,h\u003do.bottom,p\u003do.collisionPadding;p\u0026\u0026(f-\u003dp[1],h+\u003dp[3]);var d\u003dh-f;d\u003e0\u0026\u0026(d\u003dMath.max(10,d),this.circleDiameter\u003dd)}else{var m\u003do.top*s-l,g\u003do.bottom*s+l,v\u003do.left*s-l,y\u003do.right*s+l,x\u003do.collisionPadding;if(x\u0026\u0026(v-\u003dx[0]*s,m-\u003dx[1]*s,y+\u003dx[2]*s,g+\u003dx[3]*s),u){var b\u003dnew i(v,m),_\u003dnew i(y,m),w\u003dnew i(v,g),T\u003dnew i(y,g),k\u003du*Math.PI/180;b._rotate(k),_._rotate(k),w._rotate(k),T._rotate(k),v\u003dMath.min(b.x,_.x,w.x,T.x),y\u003dMath.max(b.x,_.x,w.x,T.x),m\u003dMath.min(b.y,_.y,w.y,T.y),g\u003dMath.max(b.y,_.y,w.y,T.y)}t.emplaceBack(e.x,e.y,v,m,y,g,r,n,a)}this.boxEndIndex\u003dt.length},lc\u003dfunction(t,e){if(void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d[]),void 0\u003d\u003d\u003de\u0026\u0026(e\u003dcc),this.data\u003dt,this.length\u003dthis.data.length,this.compare\u003de,this.length\u003e0)for(var r\u003d(this.length\u003e\u003e1)-1;r\u003e\u003d0;r--)this._down(r)};function cc(t,e){return t\u003ce?-1:t\u003ee?1:0}function uc(t,e,r){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d1),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d!1);for(var n\u003d1/0,a\u003d1/0,o\u003d-1/0,s\u003d-1/0,l\u003dt[0],c\u003d0;c\u003cl.length;c++){var u\u003dl[c];(!c||u.x\u003cn)\u0026\u0026(n\u003du.x),(!c||u.y\u003ca)\u0026\u0026(a\u003du.y),(!c||u.x\u003eo)\u0026\u0026(o\u003du.x),(!c||u.y\u003es)\u0026\u0026(s\u003du.y)}var f\u003do-n,h\u003ds-a,p\u003dMath.min(f,h),d\u003dp/2,m\u003dnew lc([],fc);if(0\u003d\u003d\u003dp)return new i(n,a);for(var g\u003dn;g\u003co;g+\u003dp)for(var v\u003da;v\u003cs;v+\u003dp)m.push(new hc(g+d,v+d,d,t));for(var y\u003dfunction(t){for(var e\u003d0,r\u003d0,n\u003d0,i\u003dt[0],a\u003d0,o\u003di.length,s\u003do-1;a\u003co;s\u003da++){var l\u003di[a],c\u003di[s],u\u003dl.x*c.y-c.x*l.y;r+\u003d(l.x+c.x)*u,n+\u003d(l.y+c.y)*u,e+\u003d3*u}return new hc(r/e,n/e,0,t)}(t),x\u003dm.length;m.length;){var b\u003dm.pop();(b.d\u003ey.d||!y.d)\u0026\u0026(y\u003db,r\u0026\u0026console.log(\"found best %d after %d probes\",Math.round(1e4*b.d)/1e4,x)),b.max-y.d\u003c\u003de||(d\u003db.h/2,m.push(new hc(b.p.x-d,b.p.y-d,d,t)),m.push(new hc(b.p.x+d,b.p.y-d,d,t)),m.push(new hc(b.p.x-d,b.p.y+d,d,t)),m.push(new hc(b.p.x+d,b.p.y+d,d,t)),x+\u003d4)}return r\u0026\u0026(console.log(\"num probes: \"+x),console.log(\"best distance: \"+y.d)),y.p}function fc(t,e){return e.max-t.max}function hc(t,e,r,n){this.p\u003dnew i(t,e),this.h\u003dr,this.d\u003dfunction(t,e){for(var r\u003d!1,n\u003d1/0,i\u003d0;i\u003ce.length;i++)for(var a\u003de[i],o\u003d0,s\u003da.length,l\u003ds-1;o\u003cs;l\u003do++){var c\u003da[o],u\u003da[l];c.y\u003et.y!\u003du.y\u003et.y\u0026\u0026t.x\u003c(u.x-c.x)*(t.y-c.y)/(u.y-c.y)+c.x\u0026\u0026(r\u003d!r),n\u003dMath.min(n,ro(t,c,u))}return(r?1:-1)*Math.sqrt(n)}(this.p,n),this.max\u003dthis.d+this.h*Math.SQRT2}lc.prototype.push\u003dfunction(t){this.data.push(t),this.length++,this._up(this.length-1)},lc.prototype.pop\u003dfunction(){if(0!\u003d\u003dthis.length){var t\u003dthis.data[0],e\u003dthis.data.pop();return this.length--,this.length\u003e0\u0026\u0026(this.data[0]\u003de,this._down(0)),t}},lc.prototype.peek\u003dfunction(){return this.data[0]},lc.prototype._up\u003dfunction(t){for(var e\u003dthis.data,r\u003dthis.compare,n\u003de[t];t\u003e0;){var i\u003dt-1\u003e\u003e1,a\u003de[i];if(r(n,a)\u003e\u003d0)break;e[t]\u003da,t\u003di}e[t]\u003dn},lc.prototype._down\u003dfunction(t){for(var e\u003dthis.data,r\u003dthis.compare,n\u003dthis.length\u003e\u003e1,i\u003de[t];t\u003cn;){var a\u003d1+(t\u003c\u003c1),o\u003de[a],s\u003da+1;if(s\u003cthis.length\u0026\u0026r(e[s],o)\u003c0\u0026\u0026(a\u003ds,o\u003de[s]),r(o,i)\u003e\u003d0)break;e[t]\u003do,t\u003da}e[t]\u003di};var pc\u003dNumber.POSITIVE_INFINITY;function dc(t,e){return e[1]!\u003d\u003dpc?function(t,e,r){var n\u003d0,i\u003d0;switch(e\u003dMath.abs(e),r\u003dMath.abs(r),t){case\"top-right\":case\"top-left\":case\"top\":i\u003dr-7;break;case\"bottom-right\":case\"bottom-left\":case\"bottom\":i\u003d7-r}switch(t){case\"top-right\":case\"bottom-right\":case\"right\":n\u003d-e;break;case\"top-left\":case\"bottom-left\":case\"left\":n\u003de}return[n,i]}(t,e[0],e[1]):function(t,e){var r\u003d0,n\u003d0;e\u003c0\u0026\u0026(e\u003d0);var i\u003de/Math.sqrt(2);switch(t){case\"top-right\":case\"top-left\":n\u003di-7;break;case\"bottom-right\":case\"bottom-left\":n\u003d7-i;break;case\"bottom\":n\u003d7-e;break;case\"top\":n\u003de-7}switch(t){case\"top-right\":case\"bottom-right\":r\u003d-i;break;case\"top-left\":case\"bottom-left\":r\u003di;break;case\"left\":r\u003de;break;case\"right\":r\u003d-e}return[r,n]}(t,e[0])}function mc(t){switch(t){case\"right\":case\"top-right\":case\"bottom-right\":return\"right\";case\"left\":case\"top-left\":case\"bottom-left\":return\"left\"}return\"center\"}function gc(t,e,r,n,a,o,s,l,c,u,f,h,p,d,m){var g\u003dfunction(t,e,r,n,a,o,s,l){for(var c\u003dn.layout.get(\"text-rotate\").evaluate(o,{})*Math.PI/180,u\u003d[],f\u003d0,h\u003de.positionedLines;f\u003ch.length;f+\u003d1)for(var p\u003dh[f],d\u003d0,m\u003dp.positionedGlyphs;d\u003cm.length;d+\u003d1){var g\u003dm[d];if(g.rect){var v\u003dg.rect||{},y\u003d4,x\u003d!0,b\u003d1,_\u003d0,w\u003d(a||l)\u0026\u0026g.vertical,T\u003dg.metrics.advance*g.scale/2;if(l\u0026\u0026e.verticalizable){var k\u003d24*(g.scale-1),M\u003d(24-g.metrics.width*g.scale)/2;_\u003dp.lineOffset/2-(g.imageName?-M:k)}if(g.imageName){var A\u003ds[g.imageName];x\u003dA.sdf,y\u003d1/(b\u003dA.pixelRatio)}var S\u003da?[g.x+T,g.y]:[0,0],E\u003da?[0,0]:[g.x+T+r[0],g.y+r[1]-_],L\u003d[0,0];w\u0026\u0026(L\u003dE,E\u003d[0,0]);var C\u003d(g.metrics.left-y)*g.scale-T+E[0],P\u003d(-g.metrics.top-y)*g.scale+E[1],I\u003dC+v.w*g.scale/b,O\u003dP+v.h*g.scale/b,z\u003dnew i(C,P),D\u003dnew i(I,P),R\u003dnew i(C,O),F\u003dnew i(I,O);if(w){var B\u003dnew i(-T,T- -17),N\u003d-Math.PI/2,j\u003d12-T,U\u003dg.imageName?j:0,V\u003dnew i(22-j,-U),q\u003dnew(Function.prototype.bind.apply(i,[null].concat(L)));z._rotateAround(N,B)._add(V)._add(q),D._rotateAround(N,B)._add(V)._add(q),R._rotateAround(N,B)._add(V)._add(q),F._rotateAround(N,B)._add(V)._add(q)}if(c){var H\u003dMath.sin(c),G\u003dMath.cos(c),Y\u003d[G,-H,H,G];z._matMult(Y),D._matMult(Y),R._matMult(Y),F._matMult(Y)}var W\u003dnew i(0,0),X\u003dnew i(0,0);u.push({tl:z,tr:D,bl:R,br:F,tex:v,writingMode:e.writingMode,glyphOffset:S,sectionIndex:g.sectionIndex,isSDF:x,pixelOffsetTL:W,pixelOffsetBR:X,minFontScaleX:0,minFontScaleY:0})}}return u}(0,r,l,a,o,s,n,t.allowVerticalPlacement),v\u003dt.textSizeData,y\u003dnull;\"source\"\u003d\u003d\u003dv.kind?(y\u003d[128*a.layout.get(\"text-size\").evaluate(s,{})])[0]\u003e32640\u0026\u0026_(t.layerIds[0]+\u0027: Value for \"text-size\" is \u003e\u003d 255. Reduce your \"text-size\".\u0027):\"composite\"\u003d\u003d\u003dv.kind\u0026\u0026((y\u003d[128*d.compositeTextSizes[0].evaluate(s,{},m),128*d.compositeTextSizes[1].evaluate(s,{},m)])[0]\u003e32640||y[1]\u003e32640)\u0026\u0026_(t.layerIds[0]+\u0027: Value for \"text-size\" is \u003e\u003d 255. Reduce your \"text-size\".\u0027),t.addSymbols(t.text,g,y,l,o,s,u,e,c.lineStartIndex,c.lineLength,p,m);for(var x\u003d0,b\u003df;x\u003cb.length;x+\u003d1){h[b[x]]\u003dt.text.placedSymbolArray.length-1}return 4*g.length}function vc(t){for(var e in t)return t[e];return null}function yc(t,e,r,n){var i\u003dt.compareText;if(e in i){for(var a\u003di[e],o\u003da.length-1;o\u003e\u003d0;o--)if(n.dist(a[o])\u003cr)return!0}else i[e]\u003d[];return i[e].push(n),!1}var xc\u003dLs.VectorTileFeature.types,bc\u003d[{name:\"a_fade_opacity\",components:1,type:\"Uint8\",offset:0}];function _c(t,e,r,n,i,a,o,s,l,c,u,f,h){var p\u003ds?Math.min(32640,Math.round(s[0])):0,d\u003ds?Math.min(32640,Math.round(s[1])):0;t.emplaceBack(e,r,Math.round(32*n),Math.round(32*i),a,o,(p\u003c\u003c1)+(l?1:0),d,16*c,16*u,256*f,256*h)}function wc(t,e,r){t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r),t.emplaceBack(e.x,e.y,r)}function Tc(t){for(var e\u003d0,r\u003dt.sections;e\u003cr.length;e+\u003d1){if($n(r[e].text))return!0}return!1}var kc\u003dfunction(t){this.layoutVertexArray\u003dnew Ni,this.indexArray\u003dnew Yi,this.programConfigurations\u003dt,this.segments\u003dnew pa,this.dynamicLayoutVertexArray\u003dnew ji,this.opacityVertexArray\u003dnew Ui,this.placedSymbolArray\u003dnew aa};kc.prototype.isEmpty\u003dfunction(){return 0\u003d\u003d\u003dthis.layoutVertexArray.length\u0026\u00260\u003d\u003d\u003dthis.indexArray.length\u0026\u00260\u003d\u003d\u003dthis.dynamicLayoutVertexArray.length\u0026\u00260\u003d\u003d\u003dthis.opacityVertexArray.length},kc.prototype.upload\u003dfunction(t,e,r,n){this.isEmpty()||(r\u0026\u0026(this.layoutVertexBuffer\u003dt.createVertexBuffer(this.layoutVertexArray,Js.members),this.indexBuffer\u003dt.createIndexBuffer(this.indexArray,e),this.dynamicLayoutVertexBuffer\u003dt.createVertexBuffer(this.dynamicLayoutVertexArray,Ks.members,!0),this.opacityVertexBuffer\u003dt.createVertexBuffer(this.opacityVertexArray,bc,!0),this.opacityVertexBuffer.itemSize\u003d1),(r||n)\u0026\u0026this.programConfigurations.upload(t))},kc.prototype.destroy\u003dfunction(){this.layoutVertexBuffer\u0026\u0026(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.programConfigurations.destroy(),this.segments.destroy(),this.dynamicLayoutVertexBuffer.destroy(),this.opacityVertexBuffer.destroy())},Nn(\"SymbolBuffers\",kc);var Mc\u003dfunction(t,e,r){this.layoutVertexArray\u003dnew t,this.layoutAttributes\u003de,this.indexArray\u003dnew r,this.segments\u003dnew pa,this.collisionVertexArray\u003dnew Gi};Mc.prototype.upload\u003dfunction(t){this.layoutVertexBuffer\u003dt.createVertexBuffer(this.layoutVertexArray,this.layoutAttributes),this.indexBuffer\u003dt.createIndexBuffer(this.indexArray),this.collisionVertexBuffer\u003dt.createVertexBuffer(this.collisionVertexArray,Qs.members,!0)},Mc.prototype.destroy\u003dfunction(){this.layoutVertexBuffer\u0026\u0026(this.layoutVertexBuffer.destroy(),this.indexBuffer.destroy(),this.segments.destroy(),this.collisionVertexBuffer.destroy())},Nn(\"CollisionBuffers\",Mc);var Ac\u003dfunction(t){this.collisionBoxArray\u003dt.collisionBoxArray,this.zoom\u003dt.zoom,this.overscaling\u003dt.overscaling,this.layers\u003dt.layers,this.layerIds\u003dthis.layers.map((function(t){return t.id})),this.index\u003dt.index,this.pixelRatio\u003dt.pixelRatio,this.sourceLayerIndex\u003dt.sourceLayerIndex,this.hasPattern\u003d!1,this.hasRTLText\u003d!1,this.sortKeyRanges\u003d[],this.collisionCircleArray\u003d[],this.placementInvProjMatrix\u003dho([]),this.placementViewportMatrix\u003dho([]);var e\u003dthis.layers[0]._unevaluatedLayout._values;this.textSizeData\u003dGl(this.zoom,e[\"text-size\"]),this.iconSizeData\u003dGl(this.zoom,e[\"icon-size\"]);var r\u003dthis.layers[0].layout,n\u003dr.get(\"symbol-sort-key\"),i\u003dr.get(\"symbol-z-order\");this.sortFeaturesByKey\u003d\"viewport-y\"!\u003d\u003di\u0026\u0026void 0!\u003d\u003dn.constantOr(1);var a\u003d\"viewport-y\"\u003d\u003d\u003di||\"auto\"\u003d\u003d\u003di\u0026\u0026!this.sortFeaturesByKey;this.sortFeaturesByY\u003da\u0026\u0026(r.get(\"text-allow-overlap\")||r.get(\"icon-allow-overlap\")||r.get(\"text-ignore-placement\")||r.get(\"icon-ignore-placement\")),\"point\"\u003d\u003d\u003dr.get(\"symbol-placement\")\u0026\u0026(this.writingModes\u003dr.get(\"text-writing-mode\").map((function(t){return Cl[t]}))),this.stateDependentLayerIds\u003dthis.layers.filter((function(t){return t.isStateDependent()})).map((function(t){return t.id})),this.sourceID\u003dt.sourceID};Ac.prototype.createArrays\u003dfunction(){this.text\u003dnew kc(new Ua(Js.members,this.layers,this.zoom,(function(t){return/^text/.test(t)}))),this.icon\u003dnew kc(new Ua(Js.members,this.layers,this.zoom,(function(t){return/^icon/.test(t)}))),this.glyphOffsetArray\u003dnew la,this.lineVertexArray\u003dnew ca,this.symbolInstances\u003dnew sa},Ac.prototype.calculateGlyphDependencies\u003dfunction(t,e,r,n,i){for(var a\u003d0;a\u003ct.length;a++)if(e[t.charCodeAt(a)]\u003d!0,(r||n)\u0026\u0026i){var o\u003drl[t.charAt(a)];o\u0026\u0026(e[o.charCodeAt(0)]\u003d!0)}},Ac.prototype.populate\u003dfunction(t,e,r){var n\u003dthis.layers[0],i\u003dn.layout,a\u003di.get(\"text-font\"),o\u003di.get(\"text-field\"),s\u003di.get(\"icon-image\"),l\u003d(\"constant\"!\u003d\u003do.value.kind||o.value.value instanceof ne\u0026\u0026!o.value.value.isEmpty()||o.value.value.toString().length\u003e0)\u0026\u0026(\"constant\"!\u003d\u003da.value.kind||a.value.value.length\u003e0),c\u003d\"constant\"!\u003d\u003ds.value.kind||!!s.value.value||Object.keys(s.parameters).length\u003e0,u\u003di.get(\"symbol-sort-key\");if(this.features\u003d[],l||c){for(var f\u003de.iconDependencies,h\u003de.glyphDependencies,p\u003de.availableImages,d\u003dnew pi(this.zoom),m\u003d0,g\u003dt;m\u003cg.length;m+\u003d1){var v\u003dg[m],y\u003dv.feature,x\u003dv.id,b\u003dv.index,_\u003dv.sourceLayerIndex,w\u003dn._featureFilter.needGeometry,T\u003d{type:y.type,id:x,properties:y.properties,geometry:w?Ya(y):[]};if(n._featureFilter.filter(d,T,r)){w||(T.geometry\u003dYa(y));var k\u003dvoid 0;if(l){var M\u003dn.getValueAndResolveTokens(\"text-field\",T,r,p),A\u003dne.factory(M);Tc(A)\u0026\u0026(this.hasRTLText\u003d!0),(!this.hasRTLText||\"unavailable\"\u003d\u003d\u003dui()||this.hasRTLText\u0026\u0026hi.isParsed())\u0026\u0026(k\u003del(A,n,T))}var S\u003dvoid 0;if(c){var E\u003dn.getValueAndResolveTokens(\"icon-image\",T,r,p);S\u003dE instanceof ie?E:ie.fromString(E)}if(k||S){var L\u003dthis.sortFeaturesByKey?u.evaluate(T,{},r):void 0,C\u003d{id:x,text:k,icon:S,index:b,sourceLayerIndex:_,geometry:Ya(y),properties:y.properties,type:xc[y.type],sortKey:L};if(this.features.push(C),S\u0026\u0026(f[S.name]\u003d!0),k){var P\u003da.evaluate(T,{},r).join(\",\"),I\u003d\"map\"\u003d\u003d\u003di.get(\"text-rotation-alignment\")\u0026\u0026\"point\"!\u003d\u003di.get(\"symbol-placement\");this.allowVerticalPlacement\u003dthis.writingModes\u0026\u0026this.writingModes.indexOf(Cl.vertical)\u003e\u003d0;for(var O\u003d0,z\u003dk.sections;O\u003cz.length;O+\u003d1){var D\u003dz[O];if(D.image)f[D.image.name]\u003d!0;else{var R\u003dWn(k.toString()),F\u003dD.fontStack||P,B\u003dh[F]\u003dh[F]||{};this.calculateGlyphDependencies(D.text,B,I,this.allowVerticalPlacement,R)}}}}}}\"line\"\u003d\u003d\u003di.get(\"symbol-placement\")\u0026\u0026(this.features\u003dfunction(t){var e\u003d{},r\u003d{},n\u003d[],i\u003d0;function a(e){n.push(t[e]),i++}function o(t,e,i){var a\u003dr[t];return delete r[t],r[e]\u003da,n[a].geometry[0].pop(),n[a].geometry[0]\u003dn[a].geometry[0].concat(i[0]),a}function s(t,r,i){var a\u003de[r];return delete e[r],e[t]\u003da,n[a].geometry[0].shift(),n[a].geometry[0]\u003di[0].concat(n[a].geometry[0]),a}function l(t,e,r){var n\u003dr?e[0][e[0].length-1]:e[0][0];return t+\":\"+n.x+\":\"+n.y}for(var c\u003d0;c\u003ct.length;c++){var u\u003dt[c],f\u003du.geometry,h\u003du.text?u.text.toString():null;if(h){var p\u003dl(h,f),d\u003dl(h,f,!0);if(p in r\u0026\u0026d in e\u0026\u0026r[p]!\u003d\u003de[d]){var m\u003ds(p,d,f),g\u003do(p,d,n[m].geometry);delete e[p],delete r[d],r[l(h,n[g].geometry,!0)]\u003dg,n[m].geometry\u003dnull}else p in r?o(p,d,f):d in e?s(p,d,f):(a(c),e[p]\u003di-1,r[d]\u003di-1)}else a(c)}return n.filter((function(t){return t.geometry}))}(this.features)),this.sortFeaturesByKey\u0026\u0026this.features.sort((function(t,e){return t.sortKey-e.sortKey}))}},Ac.prototype.update\u003dfunction(t,e,r){this.stateDependentLayers.length\u0026\u0026(this.text.programConfigurations.updatePaintArrays(t,e,this.layers,r),this.icon.programConfigurations.updatePaintArrays(t,e,this.layers,r))},Ac.prototype.isEmpty\u003dfunction(){return 0\u003d\u003d\u003dthis.symbolInstances.length\u0026\u0026!this.hasRTLText},Ac.prototype.uploadPending\u003dfunction(){return!this.uploaded||this.text.programConfigurations.needsUpload||this.icon.programConfigurations.needsUpload},Ac.prototype.upload\u003dfunction(t){!this.uploaded\u0026\u0026this.hasDebugData()\u0026\u0026(this.textCollisionBox.upload(t),this.iconCollisionBox.upload(t)),this.text.upload(t,this.sortFeaturesByY,!this.uploaded,this.text.programConfigurations.needsUpload),this.icon.upload(t,this.sortFeaturesByY,!this.uploaded,this.icon.programConfigurations.needsUpload),this.uploaded\u003d!0},Ac.prototype.destroyDebugData\u003dfunction(){this.textCollisionBox.destroy(),this.iconCollisionBox.destroy()},Ac.prototype.destroy\u003dfunction(){this.text.destroy(),this.icon.destroy(),this.hasDebugData()\u0026\u0026this.destroyDebugData()},Ac.prototype.addToLineVertexArray\u003dfunction(t,e){var r\u003dthis.lineVertexArray.length;if(void 0!\u003d\u003dt.segment){for(var n\u003dt.dist(e[t.segment+1]),i\u003dt.dist(e[t.segment]),a\u003d{},o\u003dt.segment+1;o\u003ce.length;o++)a[o]\u003d{x:e[o].x,y:e[o].y,tileUnitDistanceFromAnchor:n},o\u003ce.length-1\u0026\u0026(n+\u003de[o+1].dist(e[o]));for(var s\u003dt.segment||0;s\u003e\u003d0;s--)a[s]\u003d{x:e[s].x,y:e[s].y,tileUnitDistanceFromAnchor:i},s\u003e0\u0026\u0026(i+\u003de[s-1].dist(e[s]));for(var l\u003d0;l\u003ce.length;l++){var c\u003da[l];this.lineVertexArray.emplaceBack(c.x,c.y,c.tileUnitDistanceFromAnchor)}}return{lineStartIndex:r,lineLength:this.lineVertexArray.length-r}},Ac.prototype.addSymbols\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f){for(var h\u003dt.indexArray,p\u003dt.layoutVertexArray,d\u003dt.segments.prepareSegment(4*e.length,p,h,a.sortKey),m\u003dthis.glyphOffsetArray.length,g\u003dd.vertexLength,v\u003dthis.allowVerticalPlacement\u0026\u0026o\u003d\u003d\u003dCl.vertical?Math.PI/2:0,y\u003da.text\u0026\u0026a.text.sections,x\u003d0;x\u003ce.length;x++){var b\u003de[x],_\u003db.tl,w\u003db.tr,T\u003db.bl,k\u003db.br,M\u003db.tex,A\u003db.pixelOffsetTL,S\u003db.pixelOffsetBR,E\u003db.minFontScaleX,L\u003db.minFontScaleY,C\u003db.glyphOffset,P\u003db.isSDF,I\u003db.sectionIndex,O\u003dd.vertexLength,z\u003dC[1];_c(p,s.x,s.y,_.x,z+_.y,M.x,M.y,r,P,A.x,A.y,E,L),_c(p,s.x,s.y,w.x,z+w.y,M.x+M.w,M.y,r,P,S.x,A.y,E,L),_c(p,s.x,s.y,T.x,z+T.y,M.x,M.y+M.h,r,P,A.x,S.y,E,L),_c(p,s.x,s.y,k.x,z+k.y,M.x+M.w,M.y+M.h,r,P,S.x,S.y,E,L),wc(t.dynamicLayoutVertexArray,s,v),h.emplaceBack(O,O+1,O+2),h.emplaceBack(O+1,O+2,O+3),d.vertexLength+\u003d4,d.primitiveLength+\u003d2,this.glyphOffsetArray.emplaceBack(C[0]),x!\u003d\u003de.length-1\u0026\u0026I\u003d\u003d\u003de[x+1].sectionIndex||t.programConfigurations.populatePaintArrays(p.length,a,a.index,{},f,y\u0026\u0026y[I])}t.placedSymbolArray.emplaceBack(s.x,s.y,m,this.glyphOffsetArray.length-m,g,l,c,s.segment,r?r[0]:0,r?r[1]:0,n[0],n[1],o,0,!1,0,u)},Ac.prototype._addCollisionDebugVertex\u003dfunction(t,e,r,n,i,a){return e.emplaceBack(0,0),t.emplaceBack(r.x,r.y,n,i,Math.round(a.x),Math.round(a.y))},Ac.prototype.addCollisionDebugVertices\u003dfunction(t,e,r,n,a,o,s){var l\u003da.segments.prepareSegment(4,a.layoutVertexArray,a.indexArray),c\u003dl.vertexLength,u\u003da.layoutVertexArray,f\u003da.collisionVertexArray,h\u003ds.anchorX,p\u003ds.anchorY;this._addCollisionDebugVertex(u,f,o,h,p,new i(t,e)),this._addCollisionDebugVertex(u,f,o,h,p,new i(r,e)),this._addCollisionDebugVertex(u,f,o,h,p,new i(r,n)),this._addCollisionDebugVertex(u,f,o,h,p,new i(t,n)),l.vertexLength+\u003d4;var d\u003da.indexArray;d.emplaceBack(c,c+1),d.emplaceBack(c+1,c+2),d.emplaceBack(c+2,c+3),d.emplaceBack(c+3,c),l.primitiveLength+\u003d4},Ac.prototype.addDebugCollisionBoxes\u003dfunction(t,e,r,n){for(var i\u003dt;i\u003ce;i++){var a\u003dthis.collisionBoxArray.get(i),o\u003da.x1,s\u003da.y1,l\u003da.x2,c\u003da.y2;this.addCollisionDebugVertices(o,s,l,c,n?this.textCollisionBox:this.iconCollisionBox,a.anchorPoint,r)}},Ac.prototype.generateCollisionDebugBuffers\u003dfunction(){this.hasDebugData()\u0026\u0026this.destroyDebugData(),this.textCollisionBox\u003dnew Mc(qi,$s.members,Qi),this.iconCollisionBox\u003dnew Mc(qi,$s.members,Qi);for(var t\u003d0;t\u003cthis.symbolInstances.length;t++){var e\u003dthis.symbolInstances.get(t);this.addDebugCollisionBoxes(e.textBoxStartIndex,e.textBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.verticalTextBoxStartIndex,e.verticalTextBoxEndIndex,e,!0),this.addDebugCollisionBoxes(e.iconBoxStartIndex,e.iconBoxEndIndex,e,!1),this.addDebugCollisionBoxes(e.verticalIconBoxStartIndex,e.verticalIconBoxEndIndex,e,!1)}},Ac.prototype._deserializeCollisionBoxesForSymbol\u003dfunction(t,e,r,n,i,a,o,s,l){for(var c\u003d{},u\u003de;u\u003cr;u++){var f\u003dt.get(u);c.textBox\u003d{x1:f.x1,y1:f.y1,x2:f.x2,y2:f.y2,anchorPointX:f.anchorPointX,anchorPointY:f.anchorPointY},c.textFeatureIndex\u003df.featureIndex;break}for(var h\u003dn;h\u003ci;h++){var p\u003dt.get(h);c.verticalTextBox\u003d{x1:p.x1,y1:p.y1,x2:p.x2,y2:p.y2,anchorPointX:p.anchorPointX,anchorPointY:p.anchorPointY},c.verticalTextFeatureIndex\u003dp.featureIndex;break}for(var d\u003da;d\u003co;d++){var m\u003dt.get(d);c.iconBox\u003d{x1:m.x1,y1:m.y1,x2:m.x2,y2:m.y2,anchorPointX:m.anchorPointX,anchorPointY:m.anchorPointY},c.iconFeatureIndex\u003dm.featureIndex;break}for(var g\u003ds;g\u003cl;g++){var v\u003dt.get(g);c.verticalIconBox\u003d{x1:v.x1,y1:v.y1,x2:v.x2,y2:v.y2,anchorPointX:v.anchorPointX,anchorPointY:v.anchorPointY},c.verticalIconFeatureIndex\u003dv.featureIndex;break}return c},Ac.prototype.deserializeCollisionBoxes\u003dfunction(t){this.collisionArrays\u003d[];for(var e\u003d0;e\u003cthis.symbolInstances.length;e++){var r\u003dthis.symbolInstances.get(e);this.collisionArrays.push(this._deserializeCollisionBoxesForSymbol(t,r.textBoxStartIndex,r.textBoxEndIndex,r.verticalTextBoxStartIndex,r.verticalTextBoxEndIndex,r.iconBoxStartIndex,r.iconBoxEndIndex,r.verticalIconBoxStartIndex,r.verticalIconBoxEndIndex))}},Ac.prototype.hasTextData\u003dfunction(){return this.text.segments.get().length\u003e0},Ac.prototype.hasIconData\u003dfunction(){return this.icon.segments.get().length\u003e0},Ac.prototype.hasDebugData\u003dfunction(){return this.textCollisionBox\u0026\u0026this.iconCollisionBox},Ac.prototype.hasTextCollisionBoxData\u003dfunction(){return this.hasDebugData()\u0026\u0026this.textCollisionBox.segments.get().length\u003e0},Ac.prototype.hasIconCollisionBoxData\u003dfunction(){return this.hasDebugData()\u0026\u0026this.iconCollisionBox.segments.get().length\u003e0},Ac.prototype.addIndicesForPlacedSymbol\u003dfunction(t,e){for(var r\u003dt.placedSymbolArray.get(e),n\u003dr.vertexStartIndex+4*r.numGlyphs,i\u003dr.vertexStartIndex;i\u003cn;i+\u003d4)t.indexArray.emplaceBack(i,i+1,i+2),t.indexArray.emplaceBack(i+1,i+2,i+3)},Ac.prototype.getSortedSymbolIndexes\u003dfunction(t){if(this.sortedAngle\u003d\u003d\u003dt\u0026\u0026void 0!\u003d\u003dthis.symbolInstanceIndexes)return this.symbolInstanceIndexes;for(var e\u003dMath.sin(t),r\u003dMath.cos(t),n\u003d[],i\u003d[],a\u003d[],o\u003d0;o\u003cthis.symbolInstances.length;++o){a.push(o);var s\u003dthis.symbolInstances.get(o);n.push(0|Math.round(e*s.anchorX+r*s.anchorY)),i.push(s.featureIndex)}return a.sort((function(t,e){return n[t]-n[e]||i[e]-i[t]})),a},Ac.prototype.addToSortKeyRanges\u003dfunction(t,e){var r\u003dthis.sortKeyRanges[this.sortKeyRanges.length-1];r\u0026\u0026r.sortKey\u003d\u003d\u003de?r.symbolInstanceEnd\u003dt+1:this.sortKeyRanges.push({sortKey:e,symbolInstanceStart:t,symbolInstanceEnd:t+1})},Ac.prototype.sortFeatures\u003dfunction(t){var e\u003dthis;if(this.sortFeaturesByY\u0026\u0026this.sortedAngle!\u003d\u003dt\u0026\u0026!(this.text.segments.get().length\u003e1||this.icon.segments.get().length\u003e1)){this.symbolInstanceIndexes\u003dthis.getSortedSymbolIndexes(t),this.sortedAngle\u003dt,this.text.indexArray.clear(),this.icon.indexArray.clear(),this.featureSortOrder\u003d[];for(var r\u003d0,n\u003dthis.symbolInstanceIndexes;r\u003cn.length;r+\u003d1){var i\u003dn[r],a\u003dthis.symbolInstances.get(i);this.featureSortOrder.push(a.featureIndex),[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t,r,n){t\u003e\u003d0\u0026\u0026n.indexOf(t)\u003d\u003d\u003dr\u0026\u0026e.addIndicesForPlacedSymbol(e.text,t)})),a.verticalPlacedTextSymbolIndex\u003e\u003d0\u0026\u0026this.addIndicesForPlacedSymbol(this.text,a.verticalPlacedTextSymbolIndex),a.placedIconSymbolIndex\u003e\u003d0\u0026\u0026this.addIndicesForPlacedSymbol(this.icon,a.placedIconSymbolIndex),a.verticalPlacedIconSymbolIndex\u003e\u003d0\u0026\u0026this.addIndicesForPlacedSymbol(this.icon,a.verticalPlacedIconSymbolIndex)}this.text.indexBuffer\u0026\u0026this.text.indexBuffer.updateData(this.text.indexArray),this.icon.indexBuffer\u0026\u0026this.icon.indexBuffer.updateData(this.icon.indexArray)}},Nn(\"SymbolBucket\",Ac,{omit:[\"layers\",\"collisionBoxArray\",\"features\",\"compareText\"]}),Ac.MAX_GLYPHS\u003d65535,Ac.addDynamicAttributes\u003dwc;var Sc\u003dnew Si({\"symbol-placement\":new wi(Lt.layout_symbol[\"symbol-placement\"]),\"symbol-spacing\":new wi(Lt.layout_symbol[\"symbol-spacing\"]),\"symbol-avoid-edges\":new wi(Lt.layout_symbol[\"symbol-avoid-edges\"]),\"symbol-sort-key\":new Ti(Lt.layout_symbol[\"symbol-sort-key\"]),\"symbol-z-order\":new wi(Lt.layout_symbol[\"symbol-z-order\"]),\"icon-allow-overlap\":new wi(Lt.layout_symbol[\"icon-allow-overlap\"]),\"icon-ignore-placement\":new wi(Lt.layout_symbol[\"icon-ignore-placement\"]),\"icon-optional\":new wi(Lt.layout_symbol[\"icon-optional\"]),\"icon-rotation-alignment\":new wi(Lt.layout_symbol[\"icon-rotation-alignment\"]),\"icon-size\":new Ti(Lt.layout_symbol[\"icon-size\"]),\"icon-text-fit\":new wi(Lt.layout_symbol[\"icon-text-fit\"]),\"icon-text-fit-padding\":new wi(Lt.layout_symbol[\"icon-text-fit-padding\"]),\"icon-image\":new Ti(Lt.layout_symbol[\"icon-image\"]),\"icon-rotate\":new Ti(Lt.layout_symbol[\"icon-rotate\"]),\"icon-padding\":new wi(Lt.layout_symbol[\"icon-padding\"]),\"icon-keep-upright\":new wi(Lt.layout_symbol[\"icon-keep-upright\"]),\"icon-offset\":new Ti(Lt.layout_symbol[\"icon-offset\"]),\"icon-anchor\":new Ti(Lt.layout_symbol[\"icon-anchor\"]),\"icon-pitch-alignment\":new wi(Lt.layout_symbol[\"icon-pitch-alignment\"]),\"text-pitch-alignment\":new wi(Lt.layout_symbol[\"text-pitch-alignment\"]),\"text-rotation-alignment\":new wi(Lt.layout_symbol[\"text-rotation-alignment\"]),\"text-field\":new Ti(Lt.layout_symbol[\"text-field\"]),\"text-font\":new Ti(Lt.layout_symbol[\"text-font\"]),\"text-size\":new Ti(Lt.layout_symbol[\"text-size\"]),\"text-max-width\":new Ti(Lt.layout_symbol[\"text-max-width\"]),\"text-line-height\":new wi(Lt.layout_symbol[\"text-line-height\"]),\"text-letter-spacing\":new Ti(Lt.layout_symbol[\"text-letter-spacing\"]),\"text-justify\":new Ti(Lt.layout_symbol[\"text-justify\"]),\"text-radial-offset\":new Ti(Lt.layout_symbol[\"text-radial-offset\"]),\"text-variable-anchor\":new wi(Lt.layout_symbol[\"text-variable-anchor\"]),\"text-anchor\":new Ti(Lt.layout_symbol[\"text-anchor\"]),\"text-max-angle\":new wi(Lt.layout_symbol[\"text-max-angle\"]),\"text-writing-mode\":new wi(Lt.layout_symbol[\"text-writing-mode\"]),\"text-rotate\":new Ti(Lt.layout_symbol[\"text-rotate\"]),\"text-padding\":new wi(Lt.layout_symbol[\"text-padding\"]),\"text-keep-upright\":new wi(Lt.layout_symbol[\"text-keep-upright\"]),\"text-transform\":new Ti(Lt.layout_symbol[\"text-transform\"]),\"text-offset\":new Ti(Lt.layout_symbol[\"text-offset\"]),\"text-allow-overlap\":new wi(Lt.layout_symbol[\"text-allow-overlap\"]),\"text-ignore-placement\":new wi(Lt.layout_symbol[\"text-ignore-placement\"]),\"text-optional\":new wi(Lt.layout_symbol[\"text-optional\"])}),Ec\u003d{paint:new Si({\"icon-opacity\":new Ti(Lt.paint_symbol[\"icon-opacity\"]),\"icon-color\":new Ti(Lt.paint_symbol[\"icon-color\"]),\"icon-halo-color\":new Ti(Lt.paint_symbol[\"icon-halo-color\"]),\"icon-halo-width\":new Ti(Lt.paint_symbol[\"icon-halo-width\"]),\"icon-halo-blur\":new Ti(Lt.paint_symbol[\"icon-halo-blur\"]),\"icon-translate\":new wi(Lt.paint_symbol[\"icon-translate\"]),\"icon-translate-anchor\":new wi(Lt.paint_symbol[\"icon-translate-anchor\"]),\"text-opacity\":new Ti(Lt.paint_symbol[\"text-opacity\"]),\"text-color\":new Ti(Lt.paint_symbol[\"text-color\"],{runtimeType:Ut,getOverride:function(t){return t.textColor},hasOverride:function(t){return!!t.textColor}}),\"text-halo-color\":new Ti(Lt.paint_symbol[\"text-halo-color\"]),\"text-halo-width\":new Ti(Lt.paint_symbol[\"text-halo-width\"]),\"text-halo-blur\":new Ti(Lt.paint_symbol[\"text-halo-blur\"]),\"text-translate\":new wi(Lt.paint_symbol[\"text-translate\"]),\"text-translate-anchor\":new wi(Lt.paint_symbol[\"text-translate-anchor\"])}),layout:Sc},Lc\u003dfunction(t){this.type\u003dt.property.overrides?t.property.overrides.runtimeType:Ft,this.defaultValue\u003dt};Lc.prototype.evaluate\u003dfunction(t){if(t.formattedSection){var e\u003dthis.defaultValue.property.overrides;if(e\u0026\u0026e.hasOverride(t.formattedSection))return e.getOverride(t.formattedSection)}return t.feature\u0026\u0026t.featureState?this.defaultValue.evaluate(t.feature,t.featureState):this.defaultValue.property.specification.default},Lc.prototype.eachChild\u003dfunction(t){this.defaultValue.isConstant()||t(this.defaultValue.value._styleExpression.expression)},Lc.prototype.outputDefined\u003dfunction(){return!1},Lc.prototype.serialize\u003dfunction(){return null},Nn(\"FormatSectionOverride\",Lc,{omit:[\"defaultValue\"]});var Cc\u003dfunction(t){function e(e){t.call(this,e,Ec)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.recalculate\u003dfunction(e,r){if(t.prototype.recalculate.call(this,e,r),\"auto\"\u003d\u003d\u003dthis.layout.get(\"icon-rotation-alignment\")\u0026\u0026(\"point\"!\u003d\u003dthis.layout.get(\"symbol-placement\")?this.layout._values[\"icon-rotation-alignment\"]\u003d\"map\":this.layout._values[\"icon-rotation-alignment\"]\u003d\"viewport\"),\"auto\"\u003d\u003d\u003dthis.layout.get(\"text-rotation-alignment\")\u0026\u0026(\"point\"!\u003d\u003dthis.layout.get(\"symbol-placement\")?this.layout._values[\"text-rotation-alignment\"]\u003d\"map\":this.layout._values[\"text-rotation-alignment\"]\u003d\"viewport\"),\"auto\"\u003d\u003d\u003dthis.layout.get(\"text-pitch-alignment\")\u0026\u0026(this.layout._values[\"text-pitch-alignment\"]\u003dthis.layout.get(\"text-rotation-alignment\")),\"auto\"\u003d\u003d\u003dthis.layout.get(\"icon-pitch-alignment\")\u0026\u0026(this.layout._values[\"icon-pitch-alignment\"]\u003dthis.layout.get(\"icon-rotation-alignment\")),\"point\"\u003d\u003d\u003dthis.layout.get(\"symbol-placement\")){var n\u003dthis.layout.get(\"text-writing-mode\");if(n){for(var i\u003d[],a\u003d0,o\u003dn;a\u003co.length;a+\u003d1){var s\u003do[a];i.indexOf(s)\u003c0\u0026\u0026i.push(s)}this.layout._values[\"text-writing-mode\"]\u003di}else this.layout._values[\"text-writing-mode\"]\u003d[\"horizontal\"]}this._setPaintOverrides()},e.prototype.getValueAndResolveTokens\u003dfunction(t,e,r,n){var i\u003dthis.layout.get(t).evaluate(e,{},r,n),a\u003dthis._unevaluatedLayout._values[t];return a.isDataDriven()||Yr(a.value)||!i?i:function(t,e){return e.replace(/{([^{}]+)}/g,(function(e,r){return r in t?String(t[r]):\"\"}))}(e.properties,i)},e.prototype.createBucket\u003dfunction(t){return new Ac(t)},e.prototype.queryRadius\u003dfunction(){return 0},e.prototype.queryIntersectsFeature\u003dfunction(){return!1},e.prototype._setPaintOverrides\u003dfunction(){for(var t\u003d0,r\u003dEc.paint.overridableProperties;t\u003cr.length;t+\u003d1){var n\u003dr[t];if(e.hasPaintOverride(this.layout,n)){var i\u003dthis.paint.get(n),a\u003dnew Lc(i),o\u003dnew Gr(a,i.property.specification),s\u003dnull;s\u003d\"constant\"\u003d\u003d\u003di.value.kind||\"source\"\u003d\u003d\u003di.value.kind?new Xr(\"source\",o):new Zr(\"composite\",o,i.value.zoomStops,i.value._interpolationType),this.paint._values[n]\u003dnew bi(i.property,s,i.parameters)}}},e.prototype._handleOverridablePaintPropertyUpdate\u003dfunction(t,r,n){return!(!this.layout||r.isDataDriven()||n.isDataDriven())\u0026\u0026e.hasPaintOverride(this.layout,t)},e.hasPaintOverride\u003dfunction(t,e){var r\u003dt.get(\"text-field\"),n\u003dEc.paint.properties[e],i\u003d!1,a\u003dfunction(t){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){var a\u003dr[e];if(n.overrides\u0026\u0026n.overrides.hasOverride(a))return void(i\u003d!0)}};if(\"constant\"\u003d\u003d\u003dr.value.kind\u0026\u0026r.value.value instanceof ne)a(r.value.value.sections);else if(\"source\"\u003d\u003d\u003dr.value.kind){var o\u003dfunction(t){if(!i)if(t instanceof ce\u0026\u0026se(t.value)\u003d\u003d\u003dGt){var e\u003dt.value;a(e.sections)}else t instanceof pe?a(t.sections):t.eachChild(o)},s\u003dr.value;s._styleExpression\u0026\u0026o(s._styleExpression.expression)}return i},e}(Ei),Pc\u003d{paint:new Si({\"background-color\":new wi(Lt.paint_background[\"background-color\"]),\"background-pattern\":new Mi(Lt.paint_background[\"background-pattern\"]),\"background-opacity\":new wi(Lt.paint_background[\"background-opacity\"])})},Ic\u003dfunction(t){function e(e){t.call(this,e,Pc)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e}(Ei),Oc\u003d{paint:new Si({\"raster-opacity\":new wi(Lt.paint_raster[\"raster-opacity\"]),\"raster-hue-rotate\":new wi(Lt.paint_raster[\"raster-hue-rotate\"]),\"raster-brightness-min\":new wi(Lt.paint_raster[\"raster-brightness-min\"]),\"raster-brightness-max\":new wi(Lt.paint_raster[\"raster-brightness-max\"]),\"raster-saturation\":new wi(Lt.paint_raster[\"raster-saturation\"]),\"raster-contrast\":new wi(Lt.paint_raster[\"raster-contrast\"]),\"raster-resampling\":new wi(Lt.paint_raster[\"raster-resampling\"]),\"raster-fade-duration\":new wi(Lt.paint_raster[\"raster-fade-duration\"])})},zc\u003dfunction(t){function e(e){t.call(this,e,Oc)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e}(Ei);var Dc\u003dfunction(t){function e(e){t.call(this,e,{}),this.implementation\u003de}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.is3D\u003dfunction(){return\"3d\"\u003d\u003d\u003dthis.implementation.renderingMode},e.prototype.hasOffscreenPass\u003dfunction(){return void 0!\u003d\u003dthis.implementation.prerender},e.prototype.recalculate\u003dfunction(){},e.prototype.updateTransitions\u003dfunction(){},e.prototype.hasTransition\u003dfunction(){},e.prototype.serialize\u003dfunction(){},e.prototype.onAdd\u003dfunction(t){this.implementation.onAdd\u0026\u0026this.implementation.onAdd(t,t.painter.context.gl)},e.prototype.onRemove\u003dfunction(t){this.implementation.onRemove\u0026\u0026this.implementation.onRemove(t,t.painter.context.gl)},e}(Ei),Rc\u003d{circle:_o,heatmap:Po,hillshade:Oo,fill:xs,\"fill-extrusion\":Fs,line:Xs,symbol:Cc,background:Ic,raster:zc};var Fc\u003dself.HTMLImageElement,Bc\u003dself.HTMLCanvasElement,Nc\u003dself.HTMLVideoElement,jc\u003dself.ImageData,Uc\u003dself.ImageBitmap,Vc\u003dfunction(t,e,r,n){this.context\u003dt,this.format\u003dr,this.texture\u003dt.gl.createTexture(),this.update(e,n)};Vc.prototype.update\u003dfunction(t,e,r){var n\u003dt.width,i\u003dt.height,a\u003d!(this.size\u0026\u0026this.size[0]\u003d\u003d\u003dn\u0026\u0026this.size[1]\u003d\u003d\u003di||r),o\u003dthis.context,s\u003do.gl;if(this.useMipmap\u003dBoolean(e\u0026\u0026e.useMipmap),s.bindTexture(s.TEXTURE_2D,this.texture),o.pixelStoreUnpackFlipY.set(!1),o.pixelStoreUnpack.set(1),o.pixelStoreUnpackPremultiplyAlpha.set(this.format\u003d\u003d\u003ds.RGBA\u0026\u0026(!e||!1!\u003d\u003de.premultiply)),a)this.size\u003d[n,i],t instanceof Fc||t instanceof Bc||t instanceof Nc||t instanceof jc||Uc\u0026\u0026t instanceof Uc?s.texImage2D(s.TEXTURE_2D,0,this.format,this.format,s.UNSIGNED_BYTE,t):s.texImage2D(s.TEXTURE_2D,0,this.format,n,i,0,this.format,s.UNSIGNED_BYTE,t.data);else{var l\u003dr||{x:0,y:0},c\u003dl.x,u\u003dl.y;t instanceof Fc||t instanceof Bc||t instanceof Nc||t instanceof jc||Uc\u0026\u0026t instanceof Uc?s.texSubImage2D(s.TEXTURE_2D,0,c,u,s.RGBA,s.UNSIGNED_BYTE,t):s.texSubImage2D(s.TEXTURE_2D,0,c,u,n,i,s.RGBA,s.UNSIGNED_BYTE,t.data)}this.useMipmap\u0026\u0026this.isSizePowerOfTwo()\u0026\u0026s.generateMipmap(s.TEXTURE_2D)},Vc.prototype.bind\u003dfunction(t,e,r){var n\u003dthis.context.gl;n.bindTexture(n.TEXTURE_2D,this.texture),r!\u003d\u003dn.LINEAR_MIPMAP_NEAREST||this.isSizePowerOfTwo()||(r\u003dn.LINEAR),t!\u003d\u003dthis.filter\u0026\u0026(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,t),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,r||t),this.filter\u003dt),e!\u003d\u003dthis.wrap\u0026\u0026(n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,e),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,e),this.wrap\u003de)},Vc.prototype.isSizePowerOfTwo\u003dfunction(){return this.size[0]\u003d\u003d\u003dthis.size[1]\u0026\u0026Math.log(this.size[0])/Math.LN2%1\u003d\u003d0},Vc.prototype.destroy\u003dfunction(){this.context.gl.deleteTexture(this.texture),this.texture\u003dnull};var qc\u003dfunction(t){var e\u003dthis;this._callback\u003dt,this._triggered\u003d!1,\"undefined\"!\u003dtypeof MessageChannel\u0026\u0026(this._channel\u003dnew MessageChannel,this._channel.port2.onmessage\u003dfunction(){e._triggered\u003d!1,e._callback()})};qc.prototype.trigger\u003dfunction(){var t\u003dthis;this._triggered||(this._triggered\u003d!0,this._channel?this._channel.port1.postMessage(!0):setTimeout((function(){t._triggered\u003d!1,t._callback()}),0))},qc.prototype.remove\u003dfunction(){delete this._channel,this._callback\u003dfunction(){}};var Hc\u003dfunction(t,e,r){this.target\u003dt,this.parent\u003de,this.mapId\u003dr,this.callbacks\u003d{},this.tasks\u003d{},this.taskQueue\u003d[],this.cancelCallbacks\u003d{},m([\"receive\",\"process\"],this),this.invoker\u003dnew qc(this.process),this.target.addEventListener(\"message\",this.receive,!1),this.globalScope\u003dk()?t:self};function Gc(t,e,r){var n\u003d2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}Hc.prototype.send\u003dfunction(t,e,r,n,i){var a\u003dthis;void 0\u003d\u003d\u003di\u0026\u0026(i\u003d!1);var o\u003dMath.round(1e18*Math.random()).toString(36).substring(0,10);r\u0026\u0026(this.callbacks[o]\u003dr);var s\u003dS(this.globalScope)?void 0:[];return this.target.postMessage({id:o,type:t,hasCallback:!!r,targetMapId:n,mustQueue:i,sourceMapId:this.mapId,data:qn(e,s)},s),{cancel:function(){r\u0026\u0026delete a.callbacks[o],a.target.postMessage({id:o,type:\"\u003ccancel\u003e\",targetMapId:n,sourceMapId:a.mapId})}}},Hc.prototype.receive\u003dfunction(t){var e\u003dt.data,r\u003de.id;if(r\u0026\u0026(!e.targetMapId||this.mapId\u003d\u003d\u003de.targetMapId))if(\"\u003ccancel\u003e\"\u003d\u003d\u003de.type){delete this.tasks[r];var n\u003dthis.cancelCallbacks[r];delete this.cancelCallbacks[r],n\u0026\u0026n()}else k()||e.mustQueue?(this.tasks[r]\u003de,this.taskQueue.push(r),this.invoker.trigger()):this.processTask(r,e)},Hc.prototype.process\u003dfunction(){if(this.taskQueue.length){var t\u003dthis.taskQueue.shift(),e\u003dthis.tasks[t];delete this.tasks[t],this.taskQueue.length\u0026\u0026this.invoker.trigger(),e\u0026\u0026this.processTask(t,e)}},Hc.prototype.processTask\u003dfunction(t,e){var r\u003dthis;if(\"\u003cresponse\u003e\"\u003d\u003d\u003de.type){var n\u003dthis.callbacks[t];delete this.callbacks[t],n\u0026\u0026(e.error?n(Hn(e.error)):n(null,Hn(e.data)))}else{var i\u003d!1,a\u003dS(this.globalScope)?void 0:[],o\u003de.hasCallback?function(e,n){i\u003d!0,delete r.cancelCallbacks[t],r.target.postMessage({id:t,type:\"\u003cresponse\u003e\",sourceMapId:r.mapId,error:e?qn(e):null,data:qn(n,a)},a)}:function(t){i\u003d!0},s\u003dnull,l\u003dHn(e.data);if(this.parent[e.type])s\u003dthis.parent[e.type](e.sourceMapId,l,o);else if(this.parent.getWorkerSource){var c\u003de.type.split(\".\");s\u003dthis.parent.getWorkerSource(e.sourceMapId,c[0],l.source)[c[1]](l,o)}else o(new Error(\"Could not find function \"+e.type));!i\u0026\u0026s\u0026\u0026s.cancel\u0026\u0026(this.cancelCallbacks[t]\u003ds.cancel)}},Hc.prototype.remove\u003dfunction(){this.invoker.remove(),this.target.removeEventListener(\"message\",this.receive,!1)};var Yc\u003dfunction(t,e){t\u0026\u0026(e?this.setSouthWest(t).setNorthEast(e):4\u003d\u003d\u003dt.length?this.setSouthWest([t[0],t[1]]).setNorthEast([t[2],t[3]]):this.setSouthWest(t[0]).setNorthEast(t[1]))};Yc.prototype.setNorthEast\u003dfunction(t){return this._ne\u003dt instanceof Wc?new Wc(t.lng,t.lat):Wc.convert(t),this},Yc.prototype.setSouthWest\u003dfunction(t){return this._sw\u003dt instanceof Wc?new Wc(t.lng,t.lat):Wc.convert(t),this},Yc.prototype.extend\u003dfunction(t){var e,r,n\u003dthis._sw,i\u003dthis._ne;if(t instanceof Wc)e\u003dt,r\u003dt;else{if(!(t instanceof Yc)){if(Array.isArray(t)){if(4\u003d\u003d\u003dt.length||t.every(Array.isArray)){var a\u003dt;return this.extend(Yc.convert(a))}var o\u003dt;return this.extend(Wc.convert(o))}return this}if(e\u003dt._sw,r\u003dt._ne,!e||!r)return this}return n||i?(n.lng\u003dMath.min(e.lng,n.lng),n.lat\u003dMath.min(e.lat,n.lat),i.lng\u003dMath.max(r.lng,i.lng),i.lat\u003dMath.max(r.lat,i.lat)):(this._sw\u003dnew Wc(e.lng,e.lat),this._ne\u003dnew Wc(r.lng,r.lat)),this},Yc.prototype.getCenter\u003dfunction(){return new Wc((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},Yc.prototype.getSouthWest\u003dfunction(){return this._sw},Yc.prototype.getNorthEast\u003dfunction(){return this._ne},Yc.prototype.getNorthWest\u003dfunction(){return new Wc(this.getWest(),this.getNorth())},Yc.prototype.getSouthEast\u003dfunction(){return new Wc(this.getEast(),this.getSouth())},Yc.prototype.getWest\u003dfunction(){return this._sw.lng},Yc.prototype.getSouth\u003dfunction(){return this._sw.lat},Yc.prototype.getEast\u003dfunction(){return this._ne.lng},Yc.prototype.getNorth\u003dfunction(){return this._ne.lat},Yc.prototype.toArray\u003dfunction(){return[this._sw.toArray(),this._ne.toArray()]},Yc.prototype.toString\u003dfunction(){return\"LngLatBounds(\"+this._sw.toString()+\", \"+this._ne.toString()+\")\"},Yc.prototype.isEmpty\u003dfunction(){return!(this._sw\u0026\u0026this._ne)},Yc.prototype.contains\u003dfunction(t){var e\u003dWc.convert(t),r\u003de.lng,n\u003de.lat,i\u003dthis._sw.lat\u003c\u003dn\u0026\u0026n\u003c\u003dthis._ne.lat,a\u003dthis._sw.lng\u003c\u003dr\u0026\u0026r\u003c\u003dthis._ne.lng;return this._sw.lng\u003ethis._ne.lng\u0026\u0026(a\u003dthis._sw.lng\u003e\u003dr\u0026\u0026r\u003e\u003dthis._ne.lng),i\u0026\u0026a},Yc.convert\u003dfunction(t){return!t||t instanceof Yc?t:new Yc(t)};var Wc\u003dfunction(t,e){if(isNaN(t)||isNaN(e))throw new Error(\"Invalid LngLat object: (\"+t+\", \"+e+\")\");if(this.lng\u003d+t,this.lat\u003d+e,this.lat\u003e90||this.lat\u003c-90)throw new Error(\"Invalid LngLat latitude value: must be between -90 and 90\")};Wc.prototype.wrap\u003dfunction(){return new Wc(c(this.lng,-180,180),this.lat)},Wc.prototype.toArray\u003dfunction(){return[this.lng,this.lat]},Wc.prototype.toString\u003dfunction(){return\"LngLat(\"+this.lng+\", \"+this.lat+\")\"},Wc.prototype.distanceTo\u003dfunction(t){var e\u003dMath.PI/180,r\u003dthis.lat*e,n\u003dt.lat*e,i\u003dMath.sin(r)*Math.sin(n)+Math.cos(r)*Math.cos(n)*Math.cos((t.lng-this.lng)*e);return 6371008.8*Math.acos(Math.min(i,1))},Wc.prototype.toBounds\u003dfunction(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d0);var e\u003d360*t/40075017,r\u003de/Math.cos(Math.PI/180*this.lat);return new Yc(new Wc(this.lng-r,this.lat-e),new Wc(this.lng+r,this.lat+e))},Wc.convert\u003dfunction(t){if(t instanceof Wc)return t;if(Array.isArray(t)\u0026\u0026(2\u003d\u003d\u003dt.length||3\u003d\u003d\u003dt.length))return new Wc(Number(t[0]),Number(t[1]));if(!Array.isArray(t)\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026null!\u003d\u003dt)return new Wc(Number(\"lng\"in t?t.lng:t.lon),Number(t.lat));throw new Error(\"`LngLatLike` argument must be specified as a LngLat instance, an object {lng: \u003clng\u003e, lat: \u003clat\u003e}, an object {lon: \u003clng\u003e, lat: \u003clat\u003e}, or an array of [\u003clng\u003e, \u003clat\u003e]\")};var Xc\u003d2*Math.PI*6371008.8;function Zc(t){return Xc*Math.cos(t*Math.PI/180)}function Jc(t){return(180+t)/360}function Kc(t){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))/360}function Qc(t,e){return t/Zc(e)}function $c(t){var e\u003d180-360*t;return 360/Math.PI*Math.atan(Math.exp(e*Math.PI/180))-90}var tu\u003dfunction(t,e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d0),this.x\u003d+t,this.y\u003d+e,this.z\u003d+r};tu.fromLngLat\u003dfunction(t,e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d0);var r\u003dWc.convert(t);return new tu(Jc(r.lng),Kc(r.lat),Qc(e,r.lat))},tu.prototype.toLngLat\u003dfunction(){return new Wc(360*this.x-180,$c(this.y))},tu.prototype.toAltitude\u003dfunction(){return t\u003dthis.z,e\u003dthis.y,t*Zc($c(e));var t,e},tu.prototype.meterInMercatorCoordinateUnits\u003dfunction(){return 1/Xc*(t\u003d$c(this.y),1/Math.cos(t*Math.PI/180));var t};var eu\u003dfunction(t,e,r){this.z\u003dt,this.x\u003de,this.y\u003dr,this.key\u003diu(0,t,t,e,r)};eu.prototype.equals\u003dfunction(t){return this.z\u003d\u003d\u003dt.z\u0026\u0026this.x\u003d\u003d\u003dt.x\u0026\u0026this.y\u003d\u003d\u003dt.y},eu.prototype.url\u003dfunction(t,e){var r,n,i,a,o,s\u003d(r\u003dthis.x,n\u003dthis.y,i\u003dthis.z,a\u003dGc(256*r,256*(n\u003dMath.pow(2,i)-n-1),i),o\u003dGc(256*(r+1),256*(n+1),i),a[0]+\",\"+a[1]+\",\"+o[0]+\",\"+o[1]),l\u003dfunction(t,e,r){for(var n,i\u003d\"\",a\u003dt;a\u003e0;a--)i+\u003d(e\u0026(n\u003d1\u003c\u003ca-1)?1:0)+(r\u0026n?2:0);return i}(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace(\"{prefix}\",(this.x%16).toString(16)+(this.y%16).toString(16)).replace(\"{z}\",String(this.z)).replace(\"{x}\",String(this.x)).replace(\"{y}\",String(\"tms\"\u003d\u003d\u003de?Math.pow(2,this.z)-this.y-1:this.y)).replace(\"{quadkey}\",l).replace(\"{bbox-epsg-3857}\",s)},eu.prototype.getTilePoint\u003dfunction(t){var e\u003dMath.pow(2,this.z);return new i(8192*(t.x*e-this.x),8192*(t.y*e-this.y))},eu.prototype.toString\u003dfunction(){return this.z+\"/\"+this.x+\"/\"+this.y};var ru\u003dfunction(t,e){this.wrap\u003dt,this.canonical\u003de,this.key\u003diu(t,e.z,e.z,e.x,e.y)},nu\u003dfunction(t,e,r,n,i){this.overscaledZ\u003dt,this.wrap\u003de,this.canonical\u003dnew eu(r,+n,+i),this.key\u003diu(e,t,r,n,i)};function iu(t,e,r,n,i){(t*\u003d2)\u003c0\u0026\u0026(t\u003d-1*t-1);var a\u003d1\u003c\u003cr;return(a*a*t+a*i+n).toString(36)+r.toString(36)+e.toString(36)}nu.prototype.equals\u003dfunction(t){return this.overscaledZ\u003d\u003d\u003dt.overscaledZ\u0026\u0026this.wrap\u003d\u003d\u003dt.wrap\u0026\u0026this.canonical.equals(t.canonical)},nu.prototype.scaledTo\u003dfunction(t){var e\u003dthis.canonical.z-t;return t\u003ethis.canonical.z?new nu(t,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y):new nu(t,this.wrap,t,this.canonical.x\u003e\u003ee,this.canonical.y\u003e\u003ee)},nu.prototype.calculateScaledKey\u003dfunction(t,e){var r\u003dthis.canonical.z-t;return t\u003ethis.canonical.z?iu(this.wrap*+e,t,this.canonical.z,this.canonical.x,this.canonical.y):iu(this.wrap*+e,t,t,this.canonical.x\u003e\u003er,this.canonical.y\u003e\u003er)},nu.prototype.isChildOf\u003dfunction(t){if(t.wrap!\u003d\u003dthis.wrap)return!1;var e\u003dthis.canonical.z-t.canonical.z;return 0\u003d\u003d\u003dt.overscaledZ||t.overscaledZ\u003cthis.overscaledZ\u0026\u0026t.canonical.x\u003d\u003d\u003dthis.canonical.x\u003e\u003ee\u0026\u0026t.canonical.y\u003d\u003d\u003dthis.canonical.y\u003e\u003ee},nu.prototype.children\u003dfunction(t){if(this.overscaledZ\u003e\u003dt)return[new nu(this.overscaledZ+1,this.wrap,this.canonical.z,this.canonical.x,this.canonical.y)];var e\u003dthis.canonical.z+1,r\u003d2*this.canonical.x,n\u003d2*this.canonical.y;return[new nu(e,this.wrap,e,r,n),new nu(e,this.wrap,e,r+1,n),new nu(e,this.wrap,e,r,n+1),new nu(e,this.wrap,e,r+1,n+1)]},nu.prototype.isLessThan\u003dfunction(t){return this.wrap\u003ct.wrap||!(this.wrap\u003et.wrap)\u0026\u0026(this.overscaledZ\u003ct.overscaledZ||!(this.overscaledZ\u003et.overscaledZ)\u0026\u0026(this.canonical.x\u003ct.canonical.x||!(this.canonical.x\u003et.canonical.x)\u0026\u0026this.canonical.y\u003ct.canonical.y))},nu.prototype.wrapped\u003dfunction(){return new nu(this.overscaledZ,0,this.canonical.z,this.canonical.x,this.canonical.y)},nu.prototype.unwrapTo\u003dfunction(t){return new nu(this.overscaledZ,t,this.canonical.z,this.canonical.x,this.canonical.y)},nu.prototype.overscaleFactor\u003dfunction(){return Math.pow(2,this.overscaledZ-this.canonical.z)},nu.prototype.toUnwrapped\u003dfunction(){return new ru(this.wrap,this.canonical)},nu.prototype.toString\u003dfunction(){return this.overscaledZ+\"/\"+this.canonical.x+\"/\"+this.canonical.y},nu.prototype.getTilePoint\u003dfunction(t){return this.canonical.getTilePoint(new tu(t.x-this.wrap,t.y))},Nn(\"CanonicalTileID\",eu),Nn(\"OverscaledTileID\",nu,{omit:[\"posMatrix\"]});var au\u003dfunction(t,e,r){if(this.uid\u003dt,e.height!\u003d\u003de.width)throw new RangeError(\"DEM tiles must be square\");if(r\u0026\u0026\"mapbox\"!\u003d\u003dr\u0026\u0026\"terrarium\"!\u003d\u003dr)return _(\u0027\"\u0027+r+\u0027\" is not a valid encoding type. Valid types include \"mapbox\" and \"terrarium\".\u0027);this.stride\u003de.height;var n\u003dthis.dim\u003de.height-2;this.data\u003dnew Uint32Array(e.data.buffer),this.encoding\u003dr||\"mapbox\";for(var i\u003d0;i\u003cn;i++)this.data[this._idx(-1,i)]\u003dthis.data[this._idx(0,i)],this.data[this._idx(n,i)]\u003dthis.data[this._idx(n-1,i)],this.data[this._idx(i,-1)]\u003dthis.data[this._idx(i,0)],this.data[this._idx(i,n)]\u003dthis.data[this._idx(i,n-1)];this.data[this._idx(-1,-1)]\u003dthis.data[this._idx(0,0)],this.data[this._idx(n,-1)]\u003dthis.data[this._idx(n-1,0)],this.data[this._idx(-1,n)]\u003dthis.data[this._idx(0,n-1)],this.data[this._idx(n,n)]\u003dthis.data[this._idx(n-1,n-1)]};au.prototype.get\u003dfunction(t,e){var r\u003dnew Uint8Array(this.data.buffer),n\u003d4*this._idx(t,e);return(\"terrarium\"\u003d\u003d\u003dthis.encoding?this._unpackTerrarium:this._unpackMapbox)(r[n],r[n+1],r[n+2])},au.prototype.getUnpackVector\u003dfunction(){return\"terrarium\"\u003d\u003d\u003dthis.encoding?[256,1,1/256,32768]:[6553.6,25.6,.1,1e4]},au.prototype._idx\u003dfunction(t,e){if(t\u003c-1||t\u003e\u003dthis.dim+1||e\u003c-1||e\u003e\u003dthis.dim+1)throw new RangeError(\"out of range source coordinates for DEM data\");return(e+1)*this.stride+(t+1)},au.prototype._unpackMapbox\u003dfunction(t,e,r){return(256*t*256+256*e+r)/10-1e4},au.prototype._unpackTerrarium\u003dfunction(t,e,r){return 256*t+e+r/256-32768},au.prototype.getPixels\u003dfunction(){return new Eo({width:this.stride,height:this.stride},new Uint8Array(this.data.buffer))},au.prototype.backfillBorder\u003dfunction(t,e,r){if(this.dim!\u003d\u003dt.dim)throw new Error(\"dem dimension mismatch\");var n\u003de*this.dim,i\u003de*this.dim+this.dim,a\u003dr*this.dim,o\u003dr*this.dim+this.dim;switch(e){case-1:n\u003di-1;break;case 1:i\u003dn+1}switch(r){case-1:a\u003do-1;break;case 1:o\u003da+1}for(var s\u003d-e*this.dim,l\u003d-r*this.dim,c\u003da;c\u003co;c++)for(var u\u003dn;u\u003ci;u++)this.data[this._idx(u,c)]\u003dt.data[this._idx(u+s,c+l)]},Nn(\"DEMData\",au);var ou\u003dfunction(t){this._stringToNumber\u003d{},this._numberToString\u003d[];for(var e\u003d0;e\u003ct.length;e++){var r\u003dt[e];this._stringToNumber[r]\u003de,this._numberToString[e]\u003dr}};ou.prototype.encode\u003dfunction(t){return this._stringToNumber[t]},ou.prototype.decode\u003dfunction(t){return this._numberToString[t]};var su\u003dfunction(t,e,r,n,i){this.type\u003d\"Feature\",this._vectorTileFeature\u003dt,t._z\u003de,t._x\u003dr,t._y\u003dn,this.properties\u003dt.properties,this.id\u003di},lu\u003d{geometry:{configurable:!0}};lu.geometry.get\u003dfunction(){return void 0\u003d\u003d\u003dthis._geometry\u0026\u0026(this._geometry\u003dthis._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},lu.geometry.set\u003dfunction(t){this._geometry\u003dt},su.prototype.toJSON\u003dfunction(){var t\u003d{geometry:this.geometry};for(var e in this)\"_geometry\"!\u003d\u003de\u0026\u0026\"_vectorTileFeature\"!\u003d\u003de\u0026\u0026(t[e]\u003dthis[e]);return t},Object.defineProperties(su.prototype,lu);var cu\u003dfunction(){this.state\u003d{},this.stateChanges\u003d{},this.deletedStates\u003d{}};cu.prototype.updateState\u003dfunction(t,e,r){var n\u003dString(e);if(this.stateChanges[t]\u003dthis.stateChanges[t]||{},this.stateChanges[t][n]\u003dthis.stateChanges[t][n]||{},u(this.stateChanges[t][n],r),null\u003d\u003d\u003dthis.deletedStates[t])for(var i in this.deletedStates[t]\u003d{},this.state[t])i!\u003d\u003dn\u0026\u0026(this.deletedStates[t][i]\u003dnull);else if(this.deletedStates[t]\u0026\u0026null\u003d\u003d\u003dthis.deletedStates[t][n])for(var a in this.deletedStates[t][n]\u003d{},this.state[t][n])r[a]||(this.deletedStates[t][n][a]\u003dnull);else for(var o in r){this.deletedStates[t]\u0026\u0026this.deletedStates[t][n]\u0026\u0026null\u003d\u003d\u003dthis.deletedStates[t][n][o]\u0026\u0026delete this.deletedStates[t][n][o]}},cu.prototype.removeFeatureState\u003dfunction(t,e,r){if(!(null\u003d\u003d\u003dthis.deletedStates[t])){var n\u003dString(e);if(this.deletedStates[t]\u003dthis.deletedStates[t]||{},r\u0026\u0026void 0!\u003d\u003de)null!\u003d\u003dthis.deletedStates[t][n]\u0026\u0026(this.deletedStates[t][n]\u003dthis.deletedStates[t][n]||{},this.deletedStates[t][n][r]\u003dnull);else if(void 0!\u003d\u003de){if(this.stateChanges[t]\u0026\u0026this.stateChanges[t][n])for(r in this.deletedStates[t][n]\u003d{},this.stateChanges[t][n])this.deletedStates[t][n][r]\u003dnull;else this.deletedStates[t][n]\u003dnull}else this.deletedStates[t]\u003dnull}},cu.prototype.getState\u003dfunction(t,e){var r\u003dString(e),n\u003dthis.state[t]||{},i\u003dthis.stateChanges[t]||{},a\u003du({},n[r],i[r]);if(null\u003d\u003d\u003dthis.deletedStates[t])return{};if(this.deletedStates[t]){var o\u003dthis.deletedStates[t][e];if(null\u003d\u003d\u003do)return{};for(var s in o)delete a[s]}return a},cu.prototype.initializeTileState\u003dfunction(t,e){t.setFeatureState(this.state,e)},cu.prototype.coalesceChanges\u003dfunction(t,e){var r\u003d{};for(var n in this.stateChanges){this.state[n]\u003dthis.state[n]||{};var i\u003d{};for(var a in this.stateChanges[n])this.state[n][a]||(this.state[n][a]\u003d{}),u(this.state[n][a],this.stateChanges[n][a]),i[a]\u003dthis.state[n][a];r[n]\u003di}for(var o in this.deletedStates){this.state[o]\u003dthis.state[o]||{};var s\u003d{};if(null\u003d\u003d\u003dthis.deletedStates[o])for(var l in this.state[o])s[l]\u003d{},this.state[o][l]\u003d{};else for(var c in this.deletedStates[o]){if(null\u003d\u003d\u003dthis.deletedStates[o][c])this.state[o][c]\u003d{};else for(var f\u003d0,h\u003dObject.keys(this.deletedStates[o][c]);f\u003ch.length;f+\u003d1){var p\u003dh[f];delete this.state[o][c][p]}s[c]\u003dthis.state[o][c]}r[o]\u003dr[o]||{},u(r[o],s)}if(this.stateChanges\u003d{},this.deletedStates\u003d{},0!\u003d\u003dObject.keys(r).length)for(var d in t){t[d].setFeatureState(r,e)}};var uu\u003dfunction(t,e){this.tileID\u003dt,this.x\u003dt.canonical.x,this.y\u003dt.canonical.y,this.z\u003dt.canonical.z,this.grid\u003dnew zn(8192,16,0),this.grid3D\u003dnew zn(8192,16,0),this.featureIndexArray\u003dnew fa,this.promoteId\u003de};function fu(t,e,r,n,i){return v(t,(function(t,a){var o\u003de instanceof _i?e.get(a):null;return o\u0026\u0026o.evaluate?o.evaluate(r,n,i):o}))}function hu(t){for(var e\u003d1/0,r\u003d1/0,n\u003d-1/0,i\u003d-1/0,a\u003d0,o\u003dt;a\u003co.length;a+\u003d1){var s\u003do[a];e\u003dMath.min(e,s.x),r\u003dMath.min(r,s.y),n\u003dMath.max(n,s.x),i\u003dMath.max(i,s.y)}return{minX:e,minY:r,maxX:n,maxY:i}}function pu(t,e){return e-t}uu.prototype.insert\u003dfunction(t,e,r,n,i,a){var o\u003dthis.featureIndexArray.length;this.featureIndexArray.emplaceBack(r,n,i);for(var s\u003da?this.grid3D:this.grid,l\u003d0;l\u003ce.length;l++){for(var c\u003de[l],u\u003d[1/0,1/0,-1/0,-1/0],f\u003d0;f\u003cc.length;f++){var h\u003dc[f];u[0]\u003dMath.min(u[0],h.x),u[1]\u003dMath.min(u[1],h.y),u[2]\u003dMath.max(u[2],h.x),u[3]\u003dMath.max(u[3],h.y)}u[0]\u003c8192\u0026\u0026u[1]\u003c8192\u0026\u0026u[2]\u003e\u003d0\u0026\u0026u[3]\u003e\u003d0\u0026\u0026s.insert(o,u[0],u[1],u[2],u[3])}},uu.prototype.loadVTLayers\u003dfunction(){return this.vtLayers||(this.vtLayers\u003dnew Ls.VectorTile(new al(this.rawTileData)).layers,this.sourceLayerCoder\u003dnew ou(this.vtLayers?Object.keys(this.vtLayers).sort():[\"_geojsonTileLayer\"])),this.vtLayers},uu.prototype.query\u003dfunction(t,e,r,n){var a\u003dthis;this.loadVTLayers();for(var o\u003dt.params||{},s\u003d8192/t.tileSize/t.scale,l\u003dsn(o.filter),c\u003dt.queryGeometry,u\u003dt.queryPadding*s,f\u003dhu(c),h\u003dthis.grid.query(f.minX-u,f.minY-u,f.maxX+u,f.maxY+u),p\u003dhu(t.cameraQueryGeometry),d\u003dthis.grid3D.query(p.minX-u,p.minY-u,p.maxX+u,p.maxY+u,(function(e,r,n,a){return function(t,e,r,n,a){for(var o\u003d0,s\u003dt;o\u003cs.length;o+\u003d1){var l\u003ds[o];if(e\u003c\u003dl.x\u0026\u0026r\u003c\u003dl.y\u0026\u0026n\u003e\u003dl.x\u0026\u0026a\u003e\u003dl.y)return!0}var c\u003d[new i(e,r),new i(e,a),new i(n,a),new i(n,r)];if(t.length\u003e2)for(var u\u003d0,f\u003dc;u\u003cf.length;u+\u003d1){if(io(t,f[u]))return!0}for(var h\u003d0;h\u003ct.length-1;h++){if(ao(t[h],t[h+1],c))return!0}return!1}(t.cameraQueryGeometry,e-u,r-u,n+u,a+u)})),m\u003d0,g\u003dd;m\u003cg.length;m+\u003d1){var v\u003dg[m];h.push(v)}h.sort(pu);for(var y,x\u003d{},b\u003dfunction(i){var u\u003dh[i];if(u!\u003d\u003dy){y\u003du;var f\u003da.featureIndexArray.get(u),p\u003dnull;a.loadMatchingFeature(x,f.bucketIndex,f.sourceLayerIndex,f.featureIndex,l,o.layers,o.availableImages,e,r,n,(function(e,r,n){return p||(p\u003dYa(e)),r.queryIntersectsFeature(c,e,n,p,a.z,t.transform,s,t.pixelPosMatrix)}))}},_\u003d0;_\u003ch.length;_++)b(_);return x},uu.prototype.loadMatchingFeature\u003dfunction(t,e,r,n,i,a,o,s,l,c,u){var f\u003dthis.bucketLayerIDs[e];if(!a||function(t,e){for(var r\u003d0;r\u003ct.length;r++)if(e.indexOf(t[r])\u003e\u003d0)return!0;return!1}(a,f)){var h\u003dthis.sourceLayerCoder.decode(r),p\u003dthis.vtLayers[h].feature(n);if(i.filter(new pi(this.tileID.overscaledZ),p))for(var d\u003dthis.getId(p,h),m\u003d0;m\u003cf.length;m++){var g\u003df[m];if(!(a\u0026\u0026a.indexOf(g)\u003c0)){var v\u003ds[g];if(v){var y\u003d{};void 0!\u003d\u003dd\u0026\u0026c\u0026\u0026(y\u003dc.getState(v.sourceLayer||\"_geojsonTileLayer\",d));var x\u003dl[g];x.paint\u003dfu(x.paint,v.paint,p,y,o),x.layout\u003dfu(x.layout,v.layout,p,y,o);var b\u003d!u||u(p,v,y);if(b){var _\u003dnew su(p,this.z,this.x,this.y,d);_.layer\u003dx;var w\u003dt[g];void 0\u003d\u003d\u003dw\u0026\u0026(w\u003dt[g]\u003d[]),w.push({featureIndex:n,feature:_,intersectionZ:b})}}}}}},uu.prototype.lookupSymbolFeatures\u003dfunction(t,e,r,n,i,a,o,s){var l\u003d{};this.loadVTLayers();for(var c\u003dsn(i),u\u003d0,f\u003dt;u\u003cf.length;u+\u003d1){var h\u003df[u];this.loadMatchingFeature(l,r,n,h,c,a,o,s,e)}return l},uu.prototype.hasLayer\u003dfunction(t){for(var e\u003d0,r\u003dthis.bucketLayerIDs;e\u003cr.length;e+\u003d1)for(var n\u003d0,i\u003dr[e];n\u003ci.length;n+\u003d1){if(t\u003d\u003d\u003di[n])return!0}return!1},uu.prototype.getId\u003dfunction(t,e){var r\u003dt.id;if(this.promoteId){var n\u003d\"string\"\u003d\u003dtypeof this.promoteId?this.promoteId:this.promoteId[e];\"boolean\"\u003d\u003dtypeof(r\u003dt.properties[n])\u0026\u0026(r\u003dNumber(r))}return r},Nn(\"FeatureIndex\",uu,{omit:[\"rawTileData\",\"sourceLayerCoder\"]});var du\u003dfunction(t,e){this.tileID\u003dt,this.uid\u003dh(),this.uses\u003d0,this.tileSize\u003de,this.buckets\u003d{},this.expirationTime\u003dnull,this.queryPadding\u003d0,this.hasSymbolBuckets\u003d!1,this.hasRTLText\u003d!1,this.dependencies\u003d{},this.expiredRequestCount\u003d0,this.state\u003d\"loading\"};du.prototype.registerFadeDuration\u003dfunction(t){var e\u003dt+this.timeAdded;e\u003cR.now()||this.fadeEndTime\u0026\u0026e\u003cthis.fadeEndTime||(this.fadeEndTime\u003de)},du.prototype.wasRequested\u003dfunction(){return\"errored\"\u003d\u003d\u003dthis.state||\"loaded\"\u003d\u003d\u003dthis.state||\"reloading\"\u003d\u003d\u003dthis.state},du.prototype.loadVectorData\u003dfunction(t,e,r){if(this.hasData()\u0026\u0026this.unloadVectorData(),this.state\u003d\"loaded\",t){for(var n in t.featureIndex\u0026\u0026(this.latestFeatureIndex\u003dt.featureIndex,t.rawTileData?(this.latestRawTileData\u003dt.rawTileData,this.latestFeatureIndex.rawTileData\u003dt.rawTileData):this.latestRawTileData\u0026\u0026(this.latestFeatureIndex.rawTileData\u003dthis.latestRawTileData)),this.collisionBoxArray\u003dt.collisionBoxArray,this.buckets\u003dfunction(t,e){var r\u003d{};if(!e)return r;for(var n\u003dfunction(){var t\u003da[i],n\u003dt.layerIds.map((function(t){return e.getLayer(t)})).filter(Boolean);if(0!\u003d\u003dn.length){t.layers\u003dn,t.stateDependentLayerIds\u0026\u0026(t.stateDependentLayers\u003dt.stateDependentLayerIds.map((function(t){return n.filter((function(e){return e.id\u003d\u003d\u003dt}))[0]})));for(var o\u003d0,s\u003dn;o\u003cs.length;o+\u003d1){var l\u003ds[o];r[l.id]\u003dt}}},i\u003d0,a\u003dt;i\u003ca.length;i+\u003d1)n();return r}(t.buckets,e.style),this.hasSymbolBuckets\u003d!1,this.buckets){var i\u003dthis.buckets[n];if(i instanceof Ac){if(this.hasSymbolBuckets\u003d!0,!r)break;i.justReloaded\u003d!0}}if(this.hasRTLText\u003d!1,this.hasSymbolBuckets)for(var a in this.buckets){var o\u003dthis.buckets[a];if(o instanceof Ac\u0026\u0026o.hasRTLText){this.hasRTLText\u003d!0,hi.isLoading()||hi.isLoaded()||\"deferred\"!\u003d\u003dui()||fi();break}}for(var s in this.queryPadding\u003d0,this.buckets){var l\u003dthis.buckets[s];this.queryPadding\u003dMath.max(this.queryPadding,e.style.getLayer(s).queryRadius(l))}t.imageAtlas\u0026\u0026(this.imageAtlas\u003dt.imageAtlas),t.glyphAtlasImage\u0026\u0026(this.glyphAtlasImage\u003dt.glyphAtlasImage)}else this.collisionBoxArray\u003dnew na},du.prototype.unloadVectorData\u003dfunction(){for(var t in this.buckets)this.buckets[t].destroy();this.buckets\u003d{},this.imageAtlasTexture\u0026\u0026this.imageAtlasTexture.destroy(),this.imageAtlas\u0026\u0026(this.imageAtlas\u003dnull),this.glyphAtlasTexture\u0026\u0026this.glyphAtlasTexture.destroy(),this.latestFeatureIndex\u003dnull,this.state\u003d\"unloaded\"},du.prototype.getBucket\u003dfunction(t){return this.buckets[t.id]},du.prototype.upload\u003dfunction(t){for(var e in this.buckets){var r\u003dthis.buckets[e];r.uploadPending()\u0026\u0026r.upload(t)}var n\u003dt.gl;this.imageAtlas\u0026\u0026!this.imageAtlas.uploaded\u0026\u0026(this.imageAtlasTexture\u003dnew Vc(t,this.imageAtlas.image,n.RGBA),this.imageAtlas.uploaded\u003d!0),this.glyphAtlasImage\u0026\u0026(this.glyphAtlasTexture\u003dnew Vc(t,this.glyphAtlasImage,n.ALPHA),this.glyphAtlasImage\u003dnull)},du.prototype.prepare\u003dfunction(t){this.imageAtlas\u0026\u0026this.imageAtlas.patchUpdatedImages(t,this.imageAtlasTexture)},du.prototype.queryRenderedFeatures\u003dfunction(t,e,r,n,i,a,o,s,l,c){return this.latestFeatureIndex\u0026\u0026this.latestFeatureIndex.rawTileData?this.latestFeatureIndex.query({queryGeometry:n,cameraQueryGeometry:i,scale:a,tileSize:this.tileSize,pixelPosMatrix:c,transform:s,params:o,queryPadding:this.queryPadding*l},t,e,r):{}},du.prototype.querySourceFeatures\u003dfunction(t,e){var r\u003dthis.latestFeatureIndex;if(r\u0026\u0026r.rawTileData){var n\u003dr.loadVTLayers(),i\u003de?e.sourceLayer:\"\",a\u003dn._geojsonTileLayer||n[i];if(a)for(var o\u003dsn(e\u0026\u0026e.filter),s\u003dthis.tileID.canonical,l\u003ds.z,c\u003ds.x,u\u003ds.y,f\u003d{z:l,x:c,y:u},h\u003d0;h\u003ca.length;h++){var p\u003da.feature(h);if(o.filter(new pi(this.tileID.overscaledZ),p)){var d\u003dr.getId(p,i),m\u003dnew su(p,l,c,u,d);m.tile\u003df,t.push(m)}}}},du.prototype.hasData\u003dfunction(){return\"loaded\"\u003d\u003d\u003dthis.state||\"reloading\"\u003d\u003d\u003dthis.state||\"expired\"\u003d\u003d\u003dthis.state},du.prototype.patternsLoaded\u003dfunction(){return this.imageAtlas\u0026\u0026!!Object.keys(this.imageAtlas.patternPositions).length},du.prototype.setExpiryData\u003dfunction(t){var e\u003dthis.expirationTime;if(t.cacheControl){var r\u003dM(t.cacheControl);r[\"max-age\"]\u0026\u0026(this.expirationTime\u003dDate.now()+1e3*r[\"max-age\"])}else t.expires\u0026\u0026(this.expirationTime\u003dnew Date(t.expires).getTime());if(this.expirationTime){var n\u003dDate.now(),i\u003d!1;if(this.expirationTime\u003en)i\u003d!1;else if(e)if(this.expirationTime\u003ce)i\u003d!0;else{var a\u003dthis.expirationTime-e;a?this.expirationTime\u003dn+Math.max(a,3e4):i\u003d!0}else i\u003d!0;i?(this.expiredRequestCount++,this.state\u003d\"expired\"):this.expiredRequestCount\u003d0}},du.prototype.getExpiryTimeout\u003dfunction(){if(this.expirationTime)return this.expiredRequestCount?1e3*(1\u003c\u003cMath.min(this.expiredRequestCount-1,31)):Math.min(this.expirationTime-(new Date).getTime(),Math.pow(2,31)-1)},du.prototype.setFeatureState\u003dfunction(t,e){if(this.latestFeatureIndex\u0026\u0026this.latestFeatureIndex.rawTileData\u0026\u00260!\u003d\u003dObject.keys(t).length){var r\u003dthis.latestFeatureIndex.loadVTLayers();for(var n in this.buckets)if(e.style.hasLayer(n)){var i\u003dthis.buckets[n],a\u003di.layers[0].sourceLayer||\"_geojsonTileLayer\",o\u003dr[a],s\u003dt[a];if(o\u0026\u0026s\u0026\u00260!\u003d\u003dObject.keys(s).length){i.update(s,o,this.imageAtlas\u0026\u0026this.imageAtlas.patternPositions||{});var l\u003de\u0026\u0026e.style\u0026\u0026e.style.getLayer(n);l\u0026\u0026(this.queryPadding\u003dMath.max(this.queryPadding,l.queryRadius(i)))}}}},du.prototype.holdingForFade\u003dfunction(){return void 0!\u003d\u003dthis.symbolFadeHoldUntil},du.prototype.symbolFadeFinished\u003dfunction(){return!this.symbolFadeHoldUntil||this.symbolFadeHoldUntil\u003cR.now()},du.prototype.clearFadeHold\u003dfunction(){this.symbolFadeHoldUntil\u003dvoid 0},du.prototype.setHoldDuration\u003dfunction(t){this.symbolFadeHoldUntil\u003dR.now()+t},du.prototype.setDependencies\u003dfunction(t,e){for(var r\u003d{},n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){r[i[n]]\u003d!0}this.dependencies[t]\u003dr},du.prototype.hasDependency\u003dfunction(t,e){for(var r\u003d0,n\u003dt;r\u003cn.length;r+\u003d1){var i\u003dn[r],a\u003dthis.dependencies[i];if(a)for(var o\u003d0,s\u003de;o\u003cs.length;o+\u003d1){if(a[s[o]])return!0}}return!1};var mu\u003dself.performance,gu\u003dfunction(t){this._marks\u003d{start:[t.url,\"start\"].join(\"#\"),end:[t.url,\"end\"].join(\"#\"),measure:t.url.toString()},mu.mark(this._marks.start)};gu.prototype.finish\u003dfunction(){mu.mark(this._marks.end);var t\u003dmu.getEntriesByName(this._marks.measure);return 0\u003d\u003d\u003dt.length\u0026\u0026(mu.measure(this._marks.measure,this._marks.start,this._marks.end),t\u003dmu.getEntriesByName(this._marks.measure),mu.clearMarks(this._marks.start),mu.clearMarks(this._marks.end),mu.clearMeasures(this._marks.measure)),t},t.Actor\u003dHc,t.AlphaImage\u003dSo,t.CanonicalTileID\u003deu,t.CollisionBoxArray\u003dna,t.Color\u003dte,t.DEMData\u003dau,t.DataConstantProperty\u003dwi,t.DictionaryCoder\u003dou,t.EXTENT\u003d8192,t.ErrorEvent\u003dSt,t.EvaluationParameters\u003dpi,t.Event\u003dAt,t.Evented\u003dEt,t.FeatureIndex\u003duu,t.FillBucket\u003dgs,t.FillExtrusionBucket\u003dOs,t.ImageAtlas\u003dLl,t.ImagePosition\u003dSl,t.LineBucket\u003dHs,t.LngLat\u003dWc,t.LngLatBounds\u003dYc,t.MercatorCoordinate\u003dtu,t.ONE_EM\u003d24,t.OverscaledTileID\u003dnu,t.Point\u003di,t.Point$1\u003di,t.Properties\u003dSi,t.Protobuf\u003dal,t.RGBAImage\u003dEo,t.RequestManager\u003dq,t.RequestPerformance\u003dgu,t.ResourceType\u003ddt,t.SegmentVector\u003dpa,t.SourceFeatureState\u003dcu,t.StructArrayLayout1ui2\u003d$i,t.StructArrayLayout2f1f2i16\u003dHi,t.StructArrayLayout2i4\u003dzi,t.StructArrayLayout3ui6\u003dYi,t.StructArrayLayout4i8\u003dDi,t.SymbolBucket\u003dAc,t.Texture\u003dVc,t.Tile\u003ddu,t.Transitionable\u003dgi,t.Uniform1f\u003dSa,t.Uniform1i\u003dAa,t.Uniform2f\u003dEa,t.Uniform3f\u003dLa,t.Uniform4f\u003dCa,t.UniformColor\u003dPa,t.UniformMatrix4f\u003dOa,t.UnwrappedTileID\u003dru,t.ValidationError\u003dCt,t.WritingMode\u003dCl,t.ZoomHistory\u003dGn,t.add\u003dfunction(t,e,r){return t[0]\u003de[0]+r[0],t[1]\u003de[1]+r[1],t[2]\u003de[2]+r[2],t},t.addDynamicAttributes\u003dwc,t.asyncAll\u003dfunction(t,e,r){if(!t.length)return r(null,[]);var n\u003dt.length,i\u003dnew Array(t.length),a\u003dnull;t.forEach((function(t,o){e(t,(function(t,e){t\u0026\u0026(a\u003dt),i[o]\u003de,0\u003d\u003d--n\u0026\u0026r(a,i)}))}))},t.bezier\u003do,t.bindAll\u003dm,t.browser\u003dR,t.cacheEntryPossiblyAdded\u003dfunction(t){++ht\u003eot\u0026\u0026(t.getActor().send(\"enforceCacheSizeLimit\",at),ht\u003d0)},t.clamp\u003dl,t.clearTileCache\u003dfunction(t){var e\u003dself.caches.delete(\"mapbox-tiles\");t\u0026\u0026e.catch(t).then((function(){return t()}))},t.clipLine\u003dec,t.clone\u003dfunction(t){var e\u003dnew fo(16);return e[0]\u003dt[0],e[1]\u003dt[1],e[2]\u003dt[2],e[3]\u003dt[3],e[4]\u003dt[4],e[5]\u003dt[5],e[6]\u003dt[6],e[7]\u003dt[7],e[8]\u003dt[8],e[9]\u003dt[9],e[10]\u003dt[10],e[11]\u003dt[11],e[12]\u003dt[12],e[13]\u003dt[13],e[14]\u003dt[14],e[15]\u003dt[15],e},t.clone$1\u003dx,t.clone$2\u003dfunction(t){var e\u003dnew fo(3);return e[0]\u003dt[0],e[1]\u003dt[1],e[2]\u003dt[2],e},t.collisionCircleLayout\u003dtl,t.config\u003dF,t.create\u003dfunction(){var t\u003dnew fo(16);return fo!\u003dFloat32Array\u0026\u0026(t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[11]\u003d0,t[12]\u003d0,t[13]\u003d0,t[14]\u003d0),t[0]\u003d1,t[5]\u003d1,t[10]\u003d1,t[15]\u003d1,t},t.create$1\u003dfunction(){var t\u003dnew fo(9);return fo!\u003dFloat32Array\u0026\u0026(t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0),t[0]\u003d1,t[4]\u003d1,t[8]\u003d1,t},t.create$2\u003dfunction(){var t\u003dnew fo(4);return fo!\u003dFloat32Array\u0026\u0026(t[1]\u003d0,t[2]\u003d0),t[0]\u003d1,t[3]\u003d1,t},t.createCommonjsModule\u003de,t.createExpression\u003dWr,t.createLayout\u003dIi,t.createStyleLayer\u003dfunction(t){return\"custom\"\u003d\u003d\u003dt.type?new Dc(t):new Rc[t.type](t)},t.cross\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003dr[0],s\u003dr[1],l\u003dr[2];return t[0]\u003di*l-a*s,t[1]\u003da*o-n*l,t[2]\u003dn*s-i*o,t},t.deepEqual\u003dfunction t(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!\u003d\u003dr.length)return!1;for(var n\u003d0;n\u003ce.length;n++)if(!t(e[n],r[n]))return!1;return!0}if(\"object\"\u003d\u003dtypeof e\u0026\u0026null!\u003d\u003de\u0026\u0026null!\u003d\u003dr){if(\"object\"!\u003dtypeof r)return!1;if(Object.keys(e).length!\u003d\u003dObject.keys(r).length)return!1;for(var i in e)if(!t(e[i],r[i]))return!1;return!0}return e\u003d\u003d\u003dr},t.dot\u003dfunction(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},t.dot$1\u003dfunction(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},t.ease\u003ds,t.emitValidationErrors\u003dOn,t.endsWith\u003dg,t.enforceCacheSizeLimit\u003dfunction(t){st(),Q\u0026\u0026Q.then((function(e){e.keys().then((function(r){for(var n\u003d0;n\u003cr.length-t;n++)e.delete(r[n])}))}))},t.evaluateSizeForFeature\u003dYl,t.evaluateSizeForZoom\u003dWl,t.evaluateVariableOffset\u003ddc,t.evented\u003dci,t.extend\u003du,t.featureFilter\u003dsn,t.filterObject\u003dy,t.fromRotation\u003dfunction(t,e){var r\u003dMath.sin(e),n\u003dMath.cos(e);return t[0]\u003dn,t[1]\u003dr,t[2]\u003d0,t[3]\u003d-r,t[4]\u003dn,t[5]\u003d0,t[6]\u003d0,t[7]\u003d0,t[8]\u003d1,t},t.getAnchorAlignment\u003dUl,t.getAnchorJustification\u003dmc,t.getArrayBuffer\u003dxt,t.getImage\u003dTt,t.getJSON\u003dfunction(t,e){return yt(u(t,{type:\"json\"}),e)},t.getRTLTextPluginStatus\u003dui,t.getReferrer\u003dgt,t.getVideo\u003dfunction(t,e){var r,n,i\u003dself.document.createElement(\"video\");i.muted\u003d!0,i.onloadstart\u003dfunction(){e(null,i)};for(var a\u003d0;a\u003ct.length;a++){var o\u003dself.document.createElement(\"source\");r\u003dt[a],n\u003dvoid 0,(n\u003dself.document.createElement(\"a\")).href\u003dr,(n.protocol!\u003d\u003dself.document.location.protocol||n.host!\u003d\u003dself.document.location.host)\u0026\u0026(i.crossOrigin\u003d\"Anonymous\"),o.src\u003dt[a],i.appendChild(o)}return{cancel:function(){}}},t.identity\u003dho,t.invert\u003dfunction(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003de[3],o\u003de[4],s\u003de[5],l\u003de[6],c\u003de[7],u\u003de[8],f\u003de[9],h\u003de[10],p\u003de[11],d\u003de[12],m\u003de[13],g\u003de[14],v\u003de[15],y\u003dr*s-n*o,x\u003dr*l-i*o,b\u003dr*c-a*o,_\u003dn*l-i*s,w\u003dn*c-a*s,T\u003di*c-a*l,k\u003du*m-f*d,M\u003du*g-h*d,A\u003du*v-p*d,S\u003df*g-h*m,E\u003df*v-p*m,L\u003dh*v-p*g,C\u003dy*L-x*E+b*S+_*A-w*M+T*k;return C?(C\u003d1/C,t[0]\u003d(s*L-l*E+c*S)*C,t[1]\u003d(i*E-n*L-a*S)*C,t[2]\u003d(m*T-g*w+v*_)*C,t[3]\u003d(h*w-f*T-p*_)*C,t[4]\u003d(l*A-o*L-c*M)*C,t[5]\u003d(r*L-i*A+a*M)*C,t[6]\u003d(g*b-d*T-v*x)*C,t[7]\u003d(u*T-h*b+p*x)*C,t[8]\u003d(o*E-s*A+c*k)*C,t[9]\u003d(n*A-r*E-a*k)*C,t[10]\u003d(d*w-m*b+v*y)*C,t[11]\u003d(f*b-u*w-p*y)*C,t[12]\u003d(s*M-o*S-l*k)*C,t[13]\u003d(r*S-n*M+i*k)*C,t[14]\u003d(m*x-d*_-g*y)*C,t[15]\u003d(u*_-f*x+h*y)*C,t):null},t.isChar\u003dYn,t.isMapboxURL\u003dH,t.keysDifference\u003dfunction(t,e){var r\u003d[];for(var n in t)n in e||r.push(n);return r},t.makeRequest\u003dyt,t.mapObject\u003dv,t.mercatorXfromLng\u003dJc,t.mercatorYfromLat\u003dKc,t.mercatorZfromAltitude\u003dQc,t.mul\u003dmo,t.multiply\u003dpo,t.mvt\u003dLs,t.normalize\u003dfunction(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003dr*r+n*n+i*i;return a\u003e0\u0026\u0026(a\u003d1/Math.sqrt(a)),t[0]\u003de[0]*a,t[1]\u003de[1]*a,t[2]\u003de[2]*a,t},t.number\u003dHe,t.offscreenCanvasSupported\u003dpt,t.ortho\u003dfunction(t,e,r,n,i,a,o){var s\u003d1/(e-r),l\u003d1/(n-i),c\u003d1/(a-o);return t[0]\u003d-2*s,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003d-2*l,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[10]\u003d2*c,t[11]\u003d0,t[12]\u003d(e+r)*s,t[13]\u003d(i+n)*l,t[14]\u003d(o+a)*c,t[15]\u003d1,t},t.parseGlyphPBF\u003dfunction(t){return new al(t).readFields(Tl,[])},t.pbf\u003dal,t.performSymbolLayout\u003dfunction(t,e,r,n,i,a,o){t.createArrays();var s\u003d512*t.overscaling;t.tilePixelRatio\u003d8192/s,t.compareText\u003d{},t.iconsNeedLinear\u003d!1;var l\u003dt.layers[0].layout,c\u003dt.layers[0]._unevaluatedLayout._values,u\u003d{};if(\"composite\"\u003d\u003d\u003dt.textSizeData.kind){var f\u003dt.textSizeData,h\u003df.minZoom,p\u003df.maxZoom;u.compositeTextSizes\u003d[c[\"text-size\"].possiblyEvaluate(new pi(h),o),c[\"text-size\"].possiblyEvaluate(new pi(p),o)]}if(\"composite\"\u003d\u003d\u003dt.iconSizeData.kind){var d\u003dt.iconSizeData,m\u003dd.minZoom,g\u003dd.maxZoom;u.compositeIconSizes\u003d[c[\"icon-size\"].possiblyEvaluate(new pi(m),o),c[\"icon-size\"].possiblyEvaluate(new pi(g),o)]}u.layoutTextSize\u003dc[\"text-size\"].possiblyEvaluate(new pi(t.zoom+1),o),u.layoutIconSize\u003dc[\"icon-size\"].possiblyEvaluate(new pi(t.zoom+1),o),u.textMaxSize\u003dc[\"text-size\"].possiblyEvaluate(new pi(18));for(var v\u003d24*l.get(\"text-line-height\"),y\u003d\"map\"\u003d\u003d\u003dl.get(\"text-rotation-alignment\")\u0026\u0026\"point\"!\u003d\u003dl.get(\"symbol-placement\"),x\u003dl.get(\"text-keep-upright\"),b\u003dl.get(\"text-size\"),w\u003dfunction(){var a\u003dk[T],s\u003dl.get(\"text-font\").evaluate(a,{},o).join(\",\"),c\u003db.evaluate(a,{},o),f\u003du.layoutTextSize.evaluate(a,{},o),h\u003du.layoutIconSize.evaluate(a,{},o),p\u003d{horizontal:{},vertical:void 0},d\u003da.text,m\u003d[0,0];if(d){var g\u003dd.toString(),w\u003d24*l.get(\"text-letter-spacing\").evaluate(a,{},o),M\u003dfunction(t){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){if(!Xn(r[e].charCodeAt(0)))return!1}return!0}(g)?w:0,A\u003dl.get(\"text-anchor\").evaluate(a,{},o),S\u003dl.get(\"text-variable-anchor\");if(!S){var E\u003dl.get(\"text-radial-offset\").evaluate(a,{},o);m\u003dE?dc(A,[24*E,pc]):l.get(\"text-offset\").evaluate(a,{},o).map((function(t){return 24*t}))}var L\u003dy?\"center\":l.get(\"text-justify\").evaluate(a,{},o),C\u003dl.get(\"symbol-placement\"),P\u003d\"point\"\u003d\u003d\u003dC?24*l.get(\"text-max-width\").evaluate(a,{},o):0,I\u003dfunction(){t.allowVerticalPlacement\u0026\u0026Wn(g)\u0026\u0026(p.vertical\u003dOl(d,e,r,i,s,P,v,A,\"left\",M,m,Cl.vertical,!0,C,f,c))};if(!y\u0026\u0026S){for(var O\u003d\"auto\"\u003d\u003d\u003dL?S.map((function(t){return mc(t)})):[L],z\u003d!1,D\u003d0;D\u003cO.length;D++){var R\u003dO[D];if(!p.horizontal[R])if(z)p.horizontal[R]\u003dp.horizontal[0];else{var F\u003dOl(d,e,r,i,s,P,v,\"center\",R,M,m,Cl.horizontal,!1,C,f,c);F\u0026\u0026(p.horizontal[R]\u003dF,z\u003d1\u003d\u003d\u003dF.positionedLines.length)}}I()}else{\"auto\"\u003d\u003d\u003dL\u0026\u0026(L\u003dmc(A));var B\u003dOl(d,e,r,i,s,P,v,A,L,M,m,Cl.horizontal,!1,C,f,c);B\u0026\u0026(p.horizontal[L]\u003dB),I(),Wn(g)\u0026\u0026y\u0026\u0026x\u0026\u0026(p.vertical\u003dOl(d,e,r,i,s,P,v,A,L,M,m,Cl.vertical,!1,C,f,c))}}var N\u003dvoid 0,j\u003d!1;if(a.icon\u0026\u0026a.icon.name){var U\u003dn[a.icon.name];U\u0026\u0026(N\u003dfunction(t,e,r){var n\u003dUl(r),i\u003dn.horizontalAlign,a\u003dn.verticalAlign,o\u003de[0],s\u003de[1],l\u003do-t.displaySize[0]*i,c\u003dl+t.displaySize[0],u\u003ds-t.displaySize[1]*a;return{image:t,top:u,bottom:u+t.displaySize[1],left:l,right:c}}(i[a.icon.name],l.get(\"icon-offset\").evaluate(a,{},o),l.get(\"icon-anchor\").evaluate(a,{},o)),j\u003dU.sdf,void 0\u003d\u003d\u003dt.sdfIcons?t.sdfIcons\u003dU.sdf:t.sdfIcons!\u003d\u003dU.sdf\u0026\u0026_(\"Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer\"),(U.pixelRatio!\u003d\u003dt.pixelRatio||0!\u003d\u003dl.get(\"icon-rotate\").constantOr(1))\u0026\u0026(t.iconsNeedLinear\u003d!0))}var V\u003dvc(p.horizontal)||p.vertical;t.iconsInText\u003d!!V\u0026\u0026V.iconsInText,(V||N)\u0026\u0026function(t,e,r,n,i,a,o,s,l,c,u){var f\u003da.textMaxSize.evaluate(e,{});void 0\u003d\u003d\u003df\u0026\u0026(f\u003do);var h,p\u003dt.layers[0].layout,d\u003dp.get(\"icon-offset\").evaluate(e,{},u),m\u003dvc(r.horizontal),g\u003do/24,v\u003dt.tilePixelRatio*g,y\u003dt.tilePixelRatio*f/24,x\u003dt.tilePixelRatio*s,b\u003dt.tilePixelRatio*p.get(\"symbol-spacing\"),w\u003dp.get(\"text-padding\")*t.tilePixelRatio,T\u003dp.get(\"icon-padding\")*t.tilePixelRatio,k\u003dp.get(\"text-max-angle\")/180*Math.PI,M\u003d\"map\"\u003d\u003d\u003dp.get(\"text-rotation-alignment\")\u0026\u0026\"point\"!\u003d\u003dp.get(\"symbol-placement\"),A\u003d\"map\"\u003d\u003d\u003dp.get(\"icon-rotation-alignment\")\u0026\u0026\"point\"!\u003d\u003dp.get(\"symbol-placement\"),S\u003dp.get(\"symbol-placement\"),E\u003db/2,L\u003dp.get(\"icon-text-fit\");n\u0026\u0026\"none\"!\u003d\u003dL\u0026\u0026(t.allowVerticalPlacement\u0026\u0026r.vertical\u0026\u0026(h\u003dql(n,r.vertical,L,p.get(\"icon-text-fit-padding\"),d,g)),m\u0026\u0026(n\u003dql(n,m,L,p.get(\"icon-text-fit-padding\"),d,g)));var C\u003dfunction(s,f){f.x\u003c0||f.x\u003e\u003d8192||f.y\u003c0||f.y\u003e\u003d8192||function(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m,g,v,y,x,b,w,T,k,M){var A,S,E,L,C,P\u003dt.addToLineVertexArray(e,r),I\u003d0,O\u003d0,z\u003d0,D\u003d0,R\u003d-1,F\u003d-1,B\u003d{},N\u003dya(\"\"),j\u003d0,U\u003d0;void 0\u003d\u003d\u003ds._unevaluatedLayout.getValue(\"text-radial-offset\")?(A\u003ds.layout.get(\"text-offset\").evaluate(b,{},k).map((function(t){return 24*t})),j\u003dA[0],U\u003dA[1]):(j\u003d24*s.layout.get(\"text-radial-offset\").evaluate(b,{},k),U\u003dpc);if(t.allowVerticalPlacement\u0026\u0026n.vertical){var V\u003ds.layout.get(\"text-rotate\").evaluate(b,{},k)+90,q\u003dn.vertical;L\u003dnew sc(l,e,c,u,f,q,h,p,d,V),o\u0026\u0026(C\u003dnew sc(l,e,c,u,f,o,g,v,d,V))}if(i){var H\u003ds.layout.get(\"icon-rotate\").evaluate(b,{}),G\u003d\"none\"!\u003d\u003ds.layout.get(\"icon-text-fit\"),Y\u003drc(i,H,T,G),W\u003do?rc(o,H,T,G):void 0;E\u003dnew sc(l,e,c,u,f,i,g,v,!1,H),I\u003d4*Y.length;var X\u003dt.iconSizeData,Z\u003dnull;\"source\"\u003d\u003d\u003dX.kind?(Z\u003d[128*s.layout.get(\"icon-size\").evaluate(b,{})])[0]\u003e32640\u0026\u0026_(t.layerIds[0]+\u0027: Value for \"icon-size\" is \u003e\u003d 255. Reduce your \"icon-size\".\u0027):\"composite\"\u003d\u003d\u003dX.kind\u0026\u0026((Z\u003d[128*w.compositeIconSizes[0].evaluate(b,{},k),128*w.compositeIconSizes[1].evaluate(b,{},k)])[0]\u003e32640||Z[1]\u003e32640)\u0026\u0026_(t.layerIds[0]+\u0027: Value for \"icon-size\" is \u003e\u003d 255. Reduce your \"icon-size\".\u0027),t.addSymbols(t.icon,Y,Z,x,y,b,!1,e,P.lineStartIndex,P.lineLength,-1,k),R\u003dt.icon.placedSymbolArray.length-1,W\u0026\u0026(O\u003d4*W.length,t.addSymbols(t.icon,W,Z,x,y,b,Cl.vertical,e,P.lineStartIndex,P.lineLength,-1,k),F\u003dt.icon.placedSymbolArray.length-1)}for(var J in n.horizontal){var K\u003dn.horizontal[J];if(!S){N\u003dya(K.text);var Q\u003ds.layout.get(\"text-rotate\").evaluate(b,{},k);S\u003dnew sc(l,e,c,u,f,K,h,p,d,Q)}var $\u003d1\u003d\u003d\u003dK.positionedLines.length;if(z+\u003dgc(t,e,K,a,s,d,b,m,P,n.vertical?Cl.horizontal:Cl.horizontalOnly,$?Object.keys(n.horizontal):[J],B,R,w,k),$)break}n.vertical\u0026\u0026(D+\u003dgc(t,e,n.vertical,a,s,d,b,m,P,Cl.vertical,[\"vertical\"],B,F,w,k));var tt\u003dS?S.boxStartIndex:t.collisionBoxArray.length,et\u003dS?S.boxEndIndex:t.collisionBoxArray.length,rt\u003dL?L.boxStartIndex:t.collisionBoxArray.length,nt\u003dL?L.boxEndIndex:t.collisionBoxArray.length,it\u003dE?E.boxStartIndex:t.collisionBoxArray.length,at\u003dE?E.boxEndIndex:t.collisionBoxArray.length,ot\u003dC?C.boxStartIndex:t.collisionBoxArray.length,st\u003dC?C.boxEndIndex:t.collisionBoxArray.length,lt\u003d-1,ct\u003dfunction(t,e){return t\u0026\u0026t.circleDiameter?Math.max(t.circleDiameter,e):e};lt\u003dct(S,lt),lt\u003dct(L,lt),lt\u003dct(E,lt);var ut\u003d(lt\u003dct(C,lt))\u003e-1?1:0;ut\u0026\u0026(lt*\u003dM/24);t.glyphOffsetArray.length\u003e\u003dAc.MAX_GLYPHS\u0026\u0026_(\"Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907\");void 0!\u003d\u003db.sortKey\u0026\u0026t.addToSortKeyRanges(t.symbolInstances.length,b.sortKey);t.symbolInstances.emplaceBack(e.x,e.y,B.right\u003e\u003d0?B.right:-1,B.center\u003e\u003d0?B.center:-1,B.left\u003e\u003d0?B.left:-1,B.vertical||-1,R,F,N,tt,et,rt,nt,it,at,ot,st,c,z,D,I,O,ut,0,h,j,U,lt)}(t,f,s,r,n,i,h,t.layers[0],t.collisionBoxArray,e.index,e.sourceLayerIndex,t.index,v,w,M,l,x,T,A,d,e,a,c,u,o)};if(\"line\"\u003d\u003d\u003dS)for(var P\u003d0,I\u003dec(e.geometry,0,0,8192,8192);P\u003cI.length;P+\u003d1)for(var O\u003dI[P],z\u003dtc(O,b,k,r.vertical||m,n,24,y,t.overscaling,8192),D\u003d0,R\u003dz;D\u003cR.length;D+\u003d1){var F\u003dR[D],B\u003dm;B\u0026\u0026yc(t,B.text,E,F)||C(O,F)}else if(\"line-center\"\u003d\u003d\u003dS)for(var N\u003d0,j\u003de.geometry;N\u003cj.length;N+\u003d1){var U\u003dj[N];if(U.length\u003e1){var V\u003d$l(U,k,r.vertical||m,n,24,y);V\u0026\u0026C(U,V)}}else if(\"Polygon\"\u003d\u003d\u003de.type)for(var q\u003d0,H\u003dhs(e.geometry,0);q\u003cH.length;q+\u003d1){var G\u003dH[q],Y\u003duc(G,16);C(G[0],new Hl(Y.x,Y.y,0))}else if(\"LineString\"\u003d\u003d\u003de.type)for(var W\u003d0,X\u003de.geometry;W\u003cX.length;W+\u003d1){var Z\u003dX[W];C(Z,new Hl(Z[0].x,Z[0].y,0))}else if(\"Point\"\u003d\u003d\u003de.type)for(var J\u003d0,K\u003de.geometry;J\u003cK.length;J+\u003d1)for(var Q\u003dK[J],$\u003d0,tt\u003dQ;$\u003ctt.length;$+\u003d1){var et\u003dtt[$];C([et],new Hl(et.x,et.y,0))}}(t,a,p,N,n,u,f,h,m,j,o)},T\u003d0,k\u003dt.features;T\u003ck.length;T+\u003d1)w();a\u0026\u0026t.generateCollisionDebugBuffers()},t.perspective\u003dfunction(t,e,r,n,i){var a,o\u003d1/Math.tan(e/2);return t[0]\u003do/r,t[1]\u003d0,t[2]\u003d0,t[3]\u003d0,t[4]\u003d0,t[5]\u003do,t[6]\u003d0,t[7]\u003d0,t[8]\u003d0,t[9]\u003d0,t[11]\u003d-1,t[12]\u003d0,t[13]\u003d0,t[15]\u003d0,null!\u003di\u0026\u0026i!\u003d\u003d1/0?(a\u003d1/(n-i),t[10]\u003d(i+n)*a,t[14]\u003d2*i*n*a):(t[10]\u003d-1,t[14]\u003d-2*n),t},t.pick\u003dfunction(t,e){for(var r\u003d{},n\u003d0;n\u003ce.length;n++){var i\u003de[n];i in t\u0026\u0026(r[i]\u003dt[i])}return r},t.plugin\u003dhi,t.polygonIntersectsPolygon\u003dZa,t.postMapLoadEvent\u003dit,t.postTurnstileEvent\u003drt,t.potpack\u003dAl,t.refProperties\u003d[\"type\",\"source\",\"source-layer\",\"minzoom\",\"maxzoom\",\"filter\",\"layout\"],t.register\u003dNn,t.registerForPluginStateChange\u003dfunction(t){return t({pluginStatus:ai,pluginURL:oi}),ci.on(\"pluginStateChange\",t),t},t.rotate\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3],s\u003dMath.sin(r),l\u003dMath.cos(r);return t[0]\u003dn*l+a*s,t[1]\u003di*l+o*s,t[2]\u003dn*-s+a*l,t[3]\u003di*-s+o*l,t},t.rotateX\u003dfunction(t,e,r){var n\u003dMath.sin(r),i\u003dMath.cos(r),a\u003de[4],o\u003de[5],s\u003de[6],l\u003de[7],c\u003de[8],u\u003de[9],f\u003de[10],h\u003de[11];return e!\u003d\u003dt\u0026\u0026(t[0]\u003de[0],t[1]\u003de[1],t[2]\u003de[2],t[3]\u003de[3],t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15]),t[4]\u003da*i+c*n,t[5]\u003do*i+u*n,t[6]\u003ds*i+f*n,t[7]\u003dl*i+h*n,t[8]\u003dc*i-a*n,t[9]\u003du*i-o*n,t[10]\u003df*i-s*n,t[11]\u003dh*i-l*n,t},t.rotateZ\u003dfunction(t,e,r){var n\u003dMath.sin(r),i\u003dMath.cos(r),a\u003de[0],o\u003de[1],s\u003de[2],l\u003de[3],c\u003de[4],u\u003de[5],f\u003de[6],h\u003de[7];return e!\u003d\u003dt\u0026\u0026(t[8]\u003de[8],t[9]\u003de[9],t[10]\u003de[10],t[11]\u003de[11],t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15]),t[0]\u003da*i+c*n,t[1]\u003do*i+u*n,t[2]\u003ds*i+f*n,t[3]\u003dl*i+h*n,t[4]\u003dc*i-a*n,t[5]\u003du*i-o*n,t[6]\u003df*i-s*n,t[7]\u003dh*i-l*n,t},t.scale\u003dfunction(t,e,r){var n\u003dr[0],i\u003dr[1],a\u003dr[2];return t[0]\u003de[0]*n,t[1]\u003de[1]*n,t[2]\u003de[2]*n,t[3]\u003de[3]*n,t[4]\u003de[4]*i,t[5]\u003de[5]*i,t[6]\u003de[6]*i,t[7]\u003de[7]*i,t[8]\u003de[8]*a,t[9]\u003de[9]*a,t[10]\u003de[10]*a,t[11]\u003de[11]*a,t[12]\u003de[12],t[13]\u003de[13],t[14]\u003de[14],t[15]\u003de[15],t},t.scale$1\u003dfunction(t,e,r){return t[0]\u003de[0]*r,t[1]\u003de[1]*r,t[2]\u003de[2]*r,t[3]\u003de[3]*r,t},t.scale$2\u003dfunction(t,e,r){return t[0]\u003de[0]*r,t[1]\u003de[1]*r,t[2]\u003de[2]*r,t},t.setCacheLimits\u003dfunction(t,e){at\u003dt,ot\u003de},t.setRTLTextPlugin\u003dfunction(t,e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d!1),ai\u003d\u003d\u003dti||ai\u003d\u003d\u003dei||ai\u003d\u003d\u003dri)throw new Error(\"setRTLTextPlugin cannot be called multiple times.\");oi\u003dR.resolveURL(t),ai\u003dti,ii\u003de,li(),r||fi()},t.sphericalToCartesian\u003dfunction(t){var e\u003dt[0],r\u003dt[1],n\u003dt[2];return r+\u003d90,r*\u003dMath.PI/180,n*\u003dMath.PI/180,{x:e*Math.cos(r)*Math.sin(n),y:e*Math.sin(r)*Math.sin(n),z:e*Math.cos(n)}},t.sqrLen\u003dbo,t.styleSpec\u003dLt,t.sub\u003dyo,t.symbolSize\u003dXl,t.transformMat3\u003dfunction(t,e,r){var n\u003de[0],i\u003de[1],a\u003de[2];return t[0]\u003dn*r[0]+i*r[3]+a*r[6],t[1]\u003dn*r[1]+i*r[4]+a*r[7],t[2]\u003dn*r[2]+i*r[5]+a*r[8],t},t.transformMat4\u003dxo,t.translate\u003dfunction(t,e,r){var n,i,a,o,s,l,c,u,f,h,p,d,m\u003dr[0],g\u003dr[1],v\u003dr[2];return e\u003d\u003d\u003dt?(t[12]\u003de[0]*m+e[4]*g+e[8]*v+e[12],t[13]\u003de[1]*m+e[5]*g+e[9]*v+e[13],t[14]\u003de[2]*m+e[6]*g+e[10]*v+e[14],t[15]\u003de[3]*m+e[7]*g+e[11]*v+e[15]):(n\u003de[0],i\u003de[1],a\u003de[2],o\u003de[3],s\u003de[4],l\u003de[5],c\u003de[6],u\u003de[7],f\u003de[8],h\u003de[9],p\u003de[10],d\u003de[11],t[0]\u003dn,t[1]\u003di,t[2]\u003da,t[3]\u003do,t[4]\u003ds,t[5]\u003dl,t[6]\u003dc,t[7]\u003du,t[8]\u003df,t[9]\u003dh,t[10]\u003dp,t[11]\u003dd,t[12]\u003dn*m+s*g+f*v+e[12],t[13]\u003di*m+l*g+h*v+e[13],t[14]\u003da*m+c*g+p*v+e[14],t[15]\u003do*m+u*g+d*v+e[15]),t},t.triggerPluginCompletionEvent\u003dsi,t.uniqueId\u003dh,t.validateCustomStyleLayer\u003dfunction(t){var e\u003d[],r\u003dt.id;return void 0\u003d\u003d\u003dr\u0026\u0026e.push({message:\"layers.\"+r+\u0027: missing required property \"id\"\u0027}),void 0\u003d\u003d\u003dt.render\u0026\u0026e.push({message:\"layers.\"+r+\u0027: missing required method \"render\"\u0027}),t.renderingMode\u0026\u0026\"2d\"!\u003d\u003dt.renderingMode\u0026\u0026\"3d\"!\u003d\u003dt.renderingMode\u0026\u0026e.push({message:\"layers.\"+r+\u0027: property \"renderingMode\" must be either \"2d\" or \"3d\"\u0027}),e},t.validateLight\u003dCn,t.validateStyle\u003dLn,t.values\u003dfunction(t){var e\u003d[];for(var r in t)e.push(t[r]);return e},t.vectorTile\u003dLs,t.version\u003d\"1.10.1\",t.warnOnce\u003d_,t.webpSupported\u003dB,t.window\u003dself,t.wrap\u003dc})),n(0,(function(t){function e(t){var r\u003dtypeof t;if(\"number\"\u003d\u003d\u003dr||\"boolean\"\u003d\u003d\u003dr||\"string\"\u003d\u003d\u003dr||null\u003d\u003dt)return JSON.stringify(t);if(Array.isArray(t)){for(var n\u003d\"[\",i\u003d0,a\u003dt;i\u003ca.length;i+\u003d1){n+\u003de(a[i])+\",\"}return n+\"]\"}for(var o\u003dObject.keys(t).sort(),s\u003d\"{\",l\u003d0;l\u003co.length;l++)s+\u003dJSON.stringify(o[l])+\":\"+e(t[o[l]])+\",\";return s+\"}\"}function r(r){for(var n\u003d\"\",i\u003d0,a\u003dt.refProperties;i\u003ca.length;i+\u003d1){n+\u003d\"/\"+e(r[a[i]])}return n}var n\u003dfunction(t){this.keyCache\u003d{},t\u0026\u0026this.replace(t)};n.prototype.replace\u003dfunction(t){this._layerConfigs\u003d{},this._layers\u003d{},this.update(t,[])},n.prototype.update\u003dfunction(e,n){for(var i\u003dthis,a\u003d0,o\u003de;a\u003co.length;a+\u003d1){var s\u003do[a];this._layerConfigs[s.id]\u003ds;var l\u003dthis._layers[s.id]\u003dt.createStyleLayer(s);l._featureFilter\u003dt.featureFilter(l.filter),this.keyCache[s.id]\u0026\u0026delete this.keyCache[s.id]}for(var c\u003d0,u\u003dn;c\u003cu.length;c+\u003d1){var f\u003du[c];delete this.keyCache[f],delete this._layerConfigs[f],delete this._layers[f]}this.familiesBySource\u003d{};for(var h\u003d0,p\u003dfunction(t,e){for(var n\u003d{},i\u003d0;i\u003ct.length;i++){var a\u003de\u0026\u0026e[t[i].id]||r(t[i]);e\u0026\u0026(e[t[i].id]\u003da);var o\u003dn[a];o||(o\u003dn[a]\u003d[]),o.push(t[i])}var s\u003d[];for(var l in n)s.push(n[l]);return s}(t.values(this._layerConfigs),this.keyCache);h\u003cp.length;h+\u003d1){var d\u003dp[h].map((function(t){return i._layers[t.id]})),m\u003dd[0];if(\"none\"!\u003d\u003dm.visibility){var g\u003dm.source||\"\",v\u003dthis.familiesBySource[g];v||(v\u003dthis.familiesBySource[g]\u003d{});var y\u003dm.sourceLayer||\"_geojsonTileLayer\",x\u003dv[y];x||(x\u003dv[y]\u003d[]),x.push(d)}}};var i\u003dfunction(e){var r\u003d{},n\u003d[];for(var i in e){var a\u003de[i],o\u003dr[i]\u003d{};for(var s in a){var l\u003da[+s];if(l\u0026\u00260!\u003d\u003dl.bitmap.width\u0026\u00260!\u003d\u003dl.bitmap.height){var c\u003d{x:0,y:0,w:l.bitmap.width+2,h:l.bitmap.height+2};n.push(c),o[s]\u003d{rect:c,metrics:l.metrics}}}}var u\u003dt.potpack(n),f\u003du.w,h\u003du.h,p\u003dnew t.AlphaImage({width:f||1,height:h||1});for(var d in e){var m\u003de[d];for(var g in m){var v\u003dm[+g];if(v\u0026\u00260!\u003d\u003dv.bitmap.width\u0026\u00260!\u003d\u003dv.bitmap.height){var y\u003dr[d][g].rect;t.AlphaImage.copy(v.bitmap,p,{x:0,y:0},{x:y.x+1,y:y.y+1},v.bitmap)}}}this.image\u003dp,this.positions\u003dr};t.register(\"GlyphAtlas\",i);var a\u003dfunction(e){this.tileID\u003dnew t.OverscaledTileID(e.tileID.overscaledZ,e.tileID.wrap,e.tileID.canonical.z,e.tileID.canonical.x,e.tileID.canonical.y),this.uid\u003de.uid,this.zoom\u003de.zoom,this.pixelRatio\u003de.pixelRatio,this.tileSize\u003de.tileSize,this.source\u003de.source,this.overscaling\u003dthis.tileID.overscaleFactor(),this.showCollisionBoxes\u003de.showCollisionBoxes,this.collectResourceTiming\u003d!!e.collectResourceTiming,this.returnDependencies\u003d!!e.returnDependencies,this.promoteId\u003de.promoteId};function o(e,r,n){for(var i\u003dnew t.EvaluationParameters(r),a\u003d0,o\u003de;a\u003co.length;a+\u003d1){o[a].recalculate(i,n)}}function s(e,r){var n\u003dt.getArrayBuffer(e.request,(function(e,n,i,a){e?r(e):n\u0026\u0026r(null,{vectorTile:new t.vectorTile.VectorTile(new t.pbf(n)),rawData:n,cacheControl:i,expires:a})}));return function(){n.cancel(),r()}}a.prototype.parse\u003dfunction(e,r,n,a,s){var l\u003dthis;this.status\u003d\"parsing\",this.data\u003de,this.collisionBoxArray\u003dnew t.CollisionBoxArray;var c\u003dnew t.DictionaryCoder(Object.keys(e.layers).sort()),u\u003dnew t.FeatureIndex(this.tileID,this.promoteId);u.bucketLayerIDs\u003d[];var f,h,p,d,m\u003d{},g\u003d{featureIndex:u,iconDependencies:{},patternDependencies:{},glyphDependencies:{},availableImages:n},v\u003dr.familiesBySource[this.source];for(var y in v){var x\u003de.layers[y];if(x){1\u003d\u003d\u003dx.version\u0026\u0026t.warnOnce(\u0027Vector tile source \"\u0027+this.source+\u0027\" layer \"\u0027+y+\u0027\" does not use vector tile spec v2 and therefore may have some rendering errors.\u0027);for(var b\u003dc.encode(y),_\u003d[],w\u003d0;w\u003cx.length;w++){var T\u003dx.feature(w),k\u003du.getId(T,y);_.push({feature:T,id:k,index:w,sourceLayerIndex:b})}for(var M\u003d0,A\u003dv[y];M\u003cA.length;M+\u003d1){var S\u003dA[M],E\u003dS[0];if(!(E.minzoom\u0026\u0026this.zoom\u003cMath.floor(E.minzoom)))if(!(E.maxzoom\u0026\u0026this.zoom\u003e\u003dE.maxzoom))if(\"none\"!\u003d\u003dE.visibility)o(S,this.zoom,n),(m[E.id]\u003dE.createBucket({index:u.bucketLayerIDs.length,layers:S,zoom:this.zoom,pixelRatio:this.pixelRatio,overscaling:this.overscaling,collisionBoxArray:this.collisionBoxArray,sourceLayerIndex:b,sourceID:this.source})).populate(_,g,this.tileID.canonical),u.bucketLayerIDs.push(S.map((function(t){return t.id})))}}}var L\u003dt.mapObject(g.glyphDependencies,(function(t){return Object.keys(t).map(Number)}));Object.keys(L).length?a.send(\"getGlyphs\",{uid:this.uid,stacks:L},(function(t,e){f||(f\u003dt,h\u003de,I.call(l))})):h\u003d{};var C\u003dObject.keys(g.iconDependencies);C.length?a.send(\"getImages\",{icons:C,source:this.source,tileID:this.tileID,type:\"icons\"},(function(t,e){f||(f\u003dt,p\u003de,I.call(l))})):p\u003d{};var P\u003dObject.keys(g.patternDependencies);function I(){if(f)return s(f);if(h\u0026\u0026p\u0026\u0026d){var e\u003dnew i(h),r\u003dnew t.ImageAtlas(p,d);for(var a in m){var l\u003dm[a];l instanceof t.SymbolBucket?(o(l.layers,this.zoom,n),t.performSymbolLayout(l,h,e.positions,p,r.iconPositions,this.showCollisionBoxes,this.tileID.canonical)):l.hasPattern\u0026\u0026(l instanceof t.LineBucket||l instanceof t.FillBucket||l instanceof t.FillExtrusionBucket)\u0026\u0026(o(l.layers,this.zoom,n),l.addFeatures(g,this.tileID.canonical,r.patternPositions))}this.status\u003d\"done\",s(null,{buckets:t.values(m).filter((function(t){return!t.isEmpty()})),featureIndex:u,collisionBoxArray:this.collisionBoxArray,glyphAtlasImage:e.image,imageAtlas:r,glyphMap:this.returnDependencies?h:null,iconMap:this.returnDependencies?p:null,glyphPositions:this.returnDependencies?e.positions:null})}}P.length?a.send(\"getImages\",{icons:P,source:this.source,tileID:this.tileID,type:\"patterns\"},(function(t,e){f||(f\u003dt,d\u003de,I.call(l))})):d\u003d{},I.call(this)};var l\u003dfunction(t,e,r,n){this.actor\u003dt,this.layerIndex\u003de,this.availableImages\u003dr,this.loadVectorData\u003dn||s,this.loading\u003d{},this.loaded\u003d{}};l.prototype.loadTile\u003dfunction(e,r){var n\u003dthis,i\u003de.uid;this.loading||(this.loading\u003d{});var o\u003d!!(e\u0026\u0026e.request\u0026\u0026e.request.collectResourceTiming)\u0026\u0026new t.RequestPerformance(e.request),s\u003dthis.loading[i]\u003dnew a(e);s.abort\u003dthis.loadVectorData(e,(function(e,a){if(delete n.loading[i],e||!a)return s.status\u003d\"done\",n.loaded[i]\u003ds,r(e);var l\u003da.rawData,c\u003d{};a.expires\u0026\u0026(c.expires\u003da.expires),a.cacheControl\u0026\u0026(c.cacheControl\u003da.cacheControl);var u\u003d{};if(o){var f\u003do.finish();f\u0026\u0026(u.resourceTiming\u003dJSON.parse(JSON.stringify(f)))}s.vectorTile\u003da.vectorTile,s.parse(a.vectorTile,n.layerIndex,n.availableImages,n.actor,(function(e,n){if(e||!n)return r(e);r(null,t.extend({rawTileData:l.slice(0)},n,c,u))})),n.loaded\u003dn.loaded||{},n.loaded[i]\u003ds}))},l.prototype.reloadTile\u003dfunction(t,e){var r\u003dthis,n\u003dthis.loaded,i\u003dt.uid,a\u003dthis;if(n\u0026\u0026n[i]){var o\u003dn[i];o.showCollisionBoxes\u003dt.showCollisionBoxes;var s\u003dfunction(t,n){var i\u003do.reloadCallback;i\u0026\u0026(delete o.reloadCallback,o.parse(o.vectorTile,a.layerIndex,r.availableImages,a.actor,i)),e(t,n)};\"parsing\"\u003d\u003d\u003do.status?o.reloadCallback\u003ds:\"done\"\u003d\u003d\u003do.status\u0026\u0026(o.vectorTile?o.parse(o.vectorTile,this.layerIndex,this.availableImages,this.actor,s):s())}},l.prototype.abortTile\u003dfunction(t,e){var r\u003dthis.loading,n\u003dt.uid;r\u0026\u0026r[n]\u0026\u0026r[n].abort\u0026\u0026(r[n].abort(),delete r[n]),e()},l.prototype.removeTile\u003dfunction(t,e){var r\u003dthis.loaded,n\u003dt.uid;r\u0026\u0026r[n]\u0026\u0026delete r[n],e()};var c\u003dt.window.ImageBitmap,u\u003dfunction(){this.loaded\u003d{}};u.prototype.loadTile\u003dfunction(e,r){var n\u003de.uid,i\u003de.encoding,a\u003de.rawImageData,o\u003dc\u0026\u0026a instanceof c?this.getImageData(a):a,s\u003dnew t.DEMData(n,o,i);this.loaded\u003dthis.loaded||{},this.loaded[n]\u003ds,r(null,s)},u.prototype.getImageData\u003dfunction(e){this.offscreenCanvas\u0026\u0026this.offscreenCanvasContext||(this.offscreenCanvas\u003dnew OffscreenCanvas(e.width,e.height),this.offscreenCanvasContext\u003dthis.offscreenCanvas.getContext(\"2d\")),this.offscreenCanvas.width\u003de.width,this.offscreenCanvas.height\u003de.height,this.offscreenCanvasContext.drawImage(e,0,0,e.width,e.height);var r\u003dthis.offscreenCanvasContext.getImageData(-1,-1,e.width+2,e.height+2);return this.offscreenCanvasContext.clearRect(0,0,this.offscreenCanvas.width,this.offscreenCanvas.height),new t.RGBAImage({width:r.width,height:r.height},r.data)},u.prototype.removeTile\u003dfunction(t){var e\u003dthis.loaded,r\u003dt.uid;e\u0026\u0026e[r]\u0026\u0026delete e[r]};var f\u003dfunction t(e,r){var n,i\u003de\u0026\u0026e.type;if(\"FeatureCollection\"\u003d\u003d\u003di)for(n\u003d0;n\u003ce.features.length;n++)t(e.features[n],r);else if(\"GeometryCollection\"\u003d\u003d\u003di)for(n\u003d0;n\u003ce.geometries.length;n++)t(e.geometries[n],r);else if(\"Feature\"\u003d\u003d\u003di)t(e.geometry,r);else if(\"Polygon\"\u003d\u003d\u003di)h(e.coordinates,r);else if(\"MultiPolygon\"\u003d\u003d\u003di)for(n\u003d0;n\u003ce.coordinates.length;n++)h(e.coordinates[n],r);return e};function h(t,e){if(0!\u003d\u003dt.length){p(t[0],e);for(var r\u003d1;r\u003ct.length;r++)p(t[r],!e)}}function p(t,e){for(var r\u003d0,n\u003d0,i\u003dt.length,a\u003di-1;n\u003ci;a\u003dn++)r+\u003d(t[n][0]-t[a][0])*(t[a][1]+t[n][1]);r\u003e\u003d0!\u003d!!e\u0026\u0026t.reverse()}var d\u003dt.vectorTile.VectorTileFeature.prototype.toGeoJSON,m\u003dfunction(e){this._feature\u003de,this.extent\u003dt.EXTENT,this.type\u003de.type,this.properties\u003de.tags,\"id\"in e\u0026\u0026!isNaN(e.id)\u0026\u0026(this.id\u003dparseInt(e.id,10))};m.prototype.loadGeometry\u003dfunction(){if(1\u003d\u003d\u003dthis._feature.type){for(var e\u003d[],r\u003d0,n\u003dthis._feature.geometry;r\u003cn.length;r+\u003d1){var i\u003dn[r];e.push([new t.Point$1(i[0],i[1])])}return e}for(var a\u003d[],o\u003d0,s\u003dthis._feature.geometry;o\u003cs.length;o+\u003d1){for(var l\u003d[],c\u003d0,u\u003ds[o];c\u003cu.length;c+\u003d1){var f\u003du[c];l.push(new t.Point$1(f[0],f[1]))}a.push(l)}return a},m.prototype.toGeoJSON\u003dfunction(t,e,r){return d.call(this,t,e,r)};var g\u003dfunction(e){this.layers\u003d{_geojsonTileLayer:this},this.name\u003d\"_geojsonTileLayer\",this.extent\u003dt.EXTENT,this.length\u003de.length,this._features\u003de};g.prototype.feature\u003dfunction(t){return new m(this._features[t])};var v\u003dt.vectorTile.VectorTileFeature,y\u003dx;function x(t,e){this.options\u003de||{},this.features\u003dt,this.length\u003dt.length}function b(t,e){this.id\u003d\"number\"\u003d\u003dtypeof t.id?t.id:void 0,this.type\u003dt.type,this.rawGeometry\u003d1\u003d\u003d\u003dt.type?[t.geometry]:t.geometry,this.properties\u003dt.tags,this.extent\u003de||4096}x.prototype.feature\u003dfunction(t){return new b(this.features[t],this.options.extent)},b.prototype.loadGeometry\u003dfunction(){var e\u003dthis.rawGeometry;this.geometry\u003d[];for(var r\u003d0;r\u003ce.length;r++){for(var n\u003de[r],i\u003d[],a\u003d0;a\u003cn.length;a++)i.push(new t.Point$1(n[a][0],n[a][1]));this.geometry.push(i)}return this.geometry},b.prototype.bbox\u003dfunction(){this.geometry||this.loadGeometry();for(var t\u003dthis.geometry,e\u003d1/0,r\u003d-1/0,n\u003d1/0,i\u003d-1/0,a\u003d0;a\u003ct.length;a++)for(var o\u003dt[a],s\u003d0;s\u003co.length;s++){var l\u003do[s];e\u003dMath.min(e,l.x),r\u003dMath.max(r,l.x),n\u003dMath.min(n,l.y),i\u003dMath.max(i,l.y)}return[e,n,r,i]},b.prototype.toGeoJSON\u003dv.prototype.toGeoJSON;var _\u003dM,w\u003dM,T\u003dfunction(t,e){e\u003de||{};var r\u003d{};for(var n in t)r[n]\u003dnew y(t[n].features,e),r[n].name\u003dn,r[n].version\u003de.version,r[n].extent\u003de.extent;return M({layers:r})},k\u003dy;function M(e){var r\u003dnew t.pbf;return function(t,e){for(var r in t.layers)e.writeMessage(3,A,t.layers[r])}(e,r),r.finish()}function A(t,e){var r;e.writeVarintField(15,t.version||1),e.writeStringField(1,t.name||\"\"),e.writeVarintField(5,t.extent||4096);var n\u003d{keys:[],values:[],keycache:{},valuecache:{}};for(r\u003d0;r\u003ct.length;r++)n.feature\u003dt.feature(r),e.writeMessage(2,S,n);var i\u003dn.keys;for(r\u003d0;r\u003ci.length;r++)e.writeStringField(3,i[r]);var a\u003dn.values;for(r\u003d0;r\u003ca.length;r++)e.writeMessage(4,I,a[r])}function S(t,e){var r\u003dt.feature;void 0!\u003d\u003dr.id\u0026\u0026e.writeVarintField(1,r.id),e.writeMessage(2,E,t),e.writeVarintField(3,r.type),e.writeMessage(4,P,r)}function E(t,e){var r\u003dt.feature,n\u003dt.keys,i\u003dt.values,a\u003dt.keycache,o\u003dt.valuecache;for(var s in r.properties){var l\u003da[s];void 0\u003d\u003d\u003dl\u0026\u0026(n.push(s),l\u003dn.length-1,a[s]\u003dl),e.writeVarint(l);var c\u003dr.properties[s],u\u003dtypeof c;\"string\"!\u003d\u003du\u0026\u0026\"boolean\"!\u003d\u003du\u0026\u0026\"number\"!\u003d\u003du\u0026\u0026(c\u003dJSON.stringify(c));var f\u003du+\":\"+c,h\u003do[f];void 0\u003d\u003d\u003dh\u0026\u0026(i.push(c),h\u003di.length-1,o[f]\u003dh),e.writeVarint(h)}}function L(t,e){return(e\u003c\u003c3)+(7\u0026t)}function C(t){return t\u003c\u003c1^t\u003e\u003e31}function P(t,e){for(var r\u003dt.loadGeometry(),n\u003dt.type,i\u003d0,a\u003d0,o\u003dr.length,s\u003d0;s\u003co;s++){var l\u003dr[s],c\u003d1;1\u003d\u003d\u003dn\u0026\u0026(c\u003dl.length),e.writeVarint(L(1,c));for(var u\u003d3\u003d\u003d\u003dn?l.length-1:l.length,f\u003d0;f\u003cu;f++){1\u003d\u003d\u003df\u0026\u00261!\u003d\u003dn\u0026\u0026e.writeVarint(L(2,u-1));var h\u003dl[f].x-i,p\u003dl[f].y-a;e.writeVarint(C(h)),e.writeVarint(C(p)),i+\u003dh,a+\u003dp}3\u003d\u003d\u003dn\u0026\u0026e.writeVarint(L(7,1))}}function I(t,e){var r\u003dtypeof t;\"string\"\u003d\u003d\u003dr?e.writeStringField(1,t):\"boolean\"\u003d\u003d\u003dr?e.writeBooleanField(7,t):\"number\"\u003d\u003d\u003dr\u0026\u0026(t%1!\u003d0?e.writeDoubleField(3,t):t\u003c0?e.writeSVarintField(6,t):e.writeVarintField(5,t))}function O(t,e,r,n,i,a){if(!(i-n\u003c\u003dr)){var o\u003dn+i\u003e\u003e1;!function t(e,r,n,i,a,o){for(;a\u003ei;){if(a-i\u003e600){var s\u003da-i+1,l\u003dn-i+1,c\u003dMath.log(s),u\u003d.5*Math.exp(2*c/3),f\u003d.5*Math.sqrt(c*u*(s-u)/s)*(l-s/2\u003c0?-1:1),h\u003dMath.max(i,Math.floor(n-l*u/s+f)),p\u003dMath.min(a,Math.floor(n+(s-l)*u/s+f));t(e,r,n,h,p,o)}var d\u003dr[2*n+o],m\u003di,g\u003da;for(z(e,r,i,n),r[2*a+o]\u003ed\u0026\u0026z(e,r,i,a);m\u003cg;){for(z(e,r,m,g),m++,g--;r[2*m+o]\u003cd;)m++;for(;r[2*g+o]\u003ed;)g--}r[2*i+o]\u003d\u003d\u003dd?z(e,r,i,g):(g++,z(e,r,g,a)),g\u003c\u003dn\u0026\u0026(i\u003dg+1),n\u003c\u003dg\u0026\u0026(a\u003dg-1)}}(t,e,o,n,i,a%2),O(t,e,r,n,o-1,a+1),O(t,e,r,o+1,i,a+1)}}function z(t,e,r,n){D(t,r,n),D(e,2*r,2*n),D(e,2*r+1,2*n+1)}function D(t,e,r){var n\u003dt[e];t[e]\u003dt[r],t[r]\u003dn}function R(t,e,r,n){var i\u003dt-r,a\u003de-n;return i*i+a*a}_.fromVectorTileJs\u003dw,_.fromGeojsonVt\u003dT,_.GeoJSONWrapper\u003dk;var F\u003dfunction(t){return t[0]},B\u003dfunction(t){return t[1]},N\u003dfunction(t,e,r,n,i){void 0\u003d\u003d\u003de\u0026\u0026(e\u003dF),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003dB),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d64),void 0\u003d\u003d\u003di\u0026\u0026(i\u003dFloat64Array),this.nodeSize\u003dn,this.points\u003dt;for(var a\u003dt.length\u003c65536?Uint16Array:Uint32Array,o\u003dthis.ids\u003dnew a(t.length),s\u003dthis.coords\u003dnew i(2*t.length),l\u003d0;l\u003ct.length;l++)o[l]\u003dl,s[2*l]\u003de(t[l]),s[2*l+1]\u003dr(t[l]);O(o,s,n,0,o.length-1,0)};N.prototype.range\u003dfunction(t,e,r,n){return function(t,e,r,n,i,a,o){for(var s,l,c\u003d[0,t.length-1,0],u\u003d[];c.length;){var f\u003dc.pop(),h\u003dc.pop(),p\u003dc.pop();if(h-p\u003c\u003do)for(var d\u003dp;d\u003c\u003dh;d++)s\u003de[2*d],l\u003de[2*d+1],s\u003e\u003dr\u0026\u0026s\u003c\u003di\u0026\u0026l\u003e\u003dn\u0026\u0026l\u003c\u003da\u0026\u0026u.push(t[d]);else{var m\u003dMath.floor((p+h)/2);s\u003de[2*m],l\u003de[2*m+1],s\u003e\u003dr\u0026\u0026s\u003c\u003di\u0026\u0026l\u003e\u003dn\u0026\u0026l\u003c\u003da\u0026\u0026u.push(t[m]);var g\u003d(f+1)%2;(0\u003d\u003d\u003df?r\u003c\u003ds:n\u003c\u003dl)\u0026\u0026(c.push(p),c.push(m-1),c.push(g)),(0\u003d\u003d\u003df?i\u003e\u003ds:a\u003e\u003dl)\u0026\u0026(c.push(m+1),c.push(h),c.push(g))}}return u}(this.ids,this.coords,t,e,r,n,this.nodeSize)},N.prototype.within\u003dfunction(t,e,r){return function(t,e,r,n,i,a){for(var o\u003d[0,t.length-1,0],s\u003d[],l\u003di*i;o.length;){var c\u003do.pop(),u\u003do.pop(),f\u003do.pop();if(u-f\u003c\u003da)for(var h\u003df;h\u003c\u003du;h++)R(e[2*h],e[2*h+1],r,n)\u003c\u003dl\u0026\u0026s.push(t[h]);else{var p\u003dMath.floor((f+u)/2),d\u003de[2*p],m\u003de[2*p+1];R(d,m,r,n)\u003c\u003dl\u0026\u0026s.push(t[p]);var g\u003d(c+1)%2;(0\u003d\u003d\u003dc?r-i\u003c\u003dd:n-i\u003c\u003dm)\u0026\u0026(o.push(f),o.push(p-1),o.push(g)),(0\u003d\u003d\u003dc?r+i\u003e\u003dd:n+i\u003e\u003dm)\u0026\u0026(o.push(p+1),o.push(u),o.push(g))}}return s}(this.ids,this.coords,t,e,r,this.nodeSize)};var j\u003d{minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,generateId:!1,reduce:null,map:function(t){return t}},U\u003dfunction(t){this.options\u003dX(Object.create(j),t),this.trees\u003dnew Array(this.options.maxZoom+1)};function V(t,e,r,n,i){return{x:t,y:e,zoom:1/0,id:r,parentId:-1,numPoints:n,properties:i}}function q(t,e){var r\u003dt.geometry.coordinates,n\u003dr[0],i\u003dr[1];return{x:Y(n),y:W(i),zoom:1/0,index:e,parentId:-1}}function H(t){return{type:\"Feature\",id:t.id,properties:G(t),geometry:{type:\"Point\",coordinates:[(n\u003dt.x,360*(n-.5)),(e\u003dt.y,r\u003d(180-360*e)*Math.PI/180,360*Math.atan(Math.exp(r))/Math.PI-90)]}};var e,r,n}function G(t){var e\u003dt.numPoints,r\u003de\u003e\u003d1e4?Math.round(e/1e3)+\"k\":e\u003e\u003d1e3?Math.round(e/100)/10+\"k\":e;return X(X({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function Y(t){return t/360+.5}function W(t){var e\u003dMath.sin(t*Math.PI/180),r\u003d.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r\u003c0?0:r\u003e1?1:r}function X(t,e){for(var r in e)t[r]\u003de[r];return t}function Z(t){return t.x}function J(t){return t.y}function K(t,e,r,n,i,a){var o\u003di-r,s\u003da-n;if(0!\u003d\u003do||0!\u003d\u003ds){var l\u003d((t-r)*o+(e-n)*s)/(o*o+s*s);l\u003e1?(r\u003di,n\u003da):l\u003e0\u0026\u0026(r+\u003do*l,n+\u003ds*l)}return(o\u003dt-r)*o+(s\u003de-n)*s}function Q(t,e,r,n){var i\u003d{id:void 0\u003d\u003d\u003dt?null:t,type:e,geometry:r,tags:n,minX:1/0,minY:1/0,maxX:-1/0,maxY:-1/0};return function(t){var e\u003dt.geometry,r\u003dt.type;if(\"Point\"\u003d\u003d\u003dr||\"MultiPoint\"\u003d\u003d\u003dr||\"LineString\"\u003d\u003d\u003dr)$(t,e);else if(\"Polygon\"\u003d\u003d\u003dr||\"MultiLineString\"\u003d\u003d\u003dr)for(var n\u003d0;n\u003ce.length;n++)$(t,e[n]);else if(\"MultiPolygon\"\u003d\u003d\u003dr)for(n\u003d0;n\u003ce.length;n++)for(var i\u003d0;i\u003ce[n].length;i++)$(t,e[n][i])}(i),i}function $(t,e){for(var r\u003d0;r\u003ce.length;r+\u003d3)t.minX\u003dMath.min(t.minX,e[r]),t.minY\u003dMath.min(t.minY,e[r+1]),t.maxX\u003dMath.max(t.maxX,e[r]),t.maxY\u003dMath.max(t.maxY,e[r+1])}function tt(t,e,r,n){if(e.geometry){var i\u003de.geometry.coordinates,a\u003de.geometry.type,o\u003dMath.pow(r.tolerance/((1\u003c\u003cr.maxZoom)*r.extent),2),s\u003d[],l\u003de.id;if(r.promoteId?l\u003de.properties[r.promoteId]:r.generateId\u0026\u0026(l\u003dn||0),\"Point\"\u003d\u003d\u003da)et(i,s);else if(\"MultiPoint\"\u003d\u003d\u003da)for(var c\u003d0;c\u003ci.length;c++)et(i[c],s);else if(\"LineString\"\u003d\u003d\u003da)rt(i,s,o,!1);else if(\"MultiLineString\"\u003d\u003d\u003da){if(r.lineMetrics){for(c\u003d0;c\u003ci.length;c++)s\u003d[],rt(i[c],s,o,!1),t.push(Q(l,\"LineString\",s,e.properties));return}nt(i,s,o,!1)}else if(\"Polygon\"\u003d\u003d\u003da)nt(i,s,o,!0);else{if(\"MultiPolygon\"!\u003d\u003da){if(\"GeometryCollection\"\u003d\u003d\u003da){for(c\u003d0;c\u003ce.geometry.geometries.length;c++)tt(t,{id:l,geometry:e.geometry.geometries[c],properties:e.properties},r,n);return}throw new Error(\"Input data is not a valid GeoJSON object.\")}for(c\u003d0;c\u003ci.length;c++){var u\u003d[];nt(i[c],u,o,!0),s.push(u)}}t.push(Q(l,a,s,e.properties))}}function et(t,e){e.push(it(t[0])),e.push(at(t[1])),e.push(0)}function rt(t,e,r,n){for(var i,a,o\u003d0,s\u003d0;s\u003ct.length;s++){var l\u003dit(t[s][0]),c\u003dat(t[s][1]);e.push(l),e.push(c),e.push(0),s\u003e0\u0026\u0026(o+\u003dn?(i*c-l*a)/2:Math.sqrt(Math.pow(l-i,2)+Math.pow(c-a,2))),i\u003dl,a\u003dc}var u\u003de.length-3;e[2]\u003d1,function t(e,r,n,i){for(var a,o\u003di,s\u003dn-r\u003e\u003e1,l\u003dn-r,c\u003de[r],u\u003de[r+1],f\u003de[n],h\u003de[n+1],p\u003dr+3;p\u003cn;p+\u003d3){var d\u003dK(e[p],e[p+1],c,u,f,h);if(d\u003eo)a\u003dp,o\u003dd;else if(d\u003d\u003d\u003do){var m\u003dMath.abs(p-s);m\u003cl\u0026\u0026(a\u003dp,l\u003dm)}}o\u003ei\u0026\u0026(a-r\u003e3\u0026\u0026t(e,r,a,i),e[a+2]\u003do,n-a\u003e3\u0026\u0026t(e,a,n,i))}(e,0,u,r),e[u+2]\u003d1,e.size\u003dMath.abs(o),e.start\u003d0,e.end\u003de.size}function nt(t,e,r,n){for(var i\u003d0;i\u003ct.length;i++){var a\u003d[];rt(t[i],a,r,n),e.push(a)}}function it(t){return t/360+.5}function at(t){var e\u003dMath.sin(t*Math.PI/180),r\u003d.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r\u003c0?0:r\u003e1?1:r}function ot(t,e,r,n,i,a,o,s){if(n/\u003de,a\u003e\u003d(r/\u003de)\u0026\u0026o\u003cn)return t;if(o\u003cr||a\u003e\u003dn)return null;for(var l\u003d[],c\u003d0;c\u003ct.length;c++){var u\u003dt[c],f\u003du.geometry,h\u003du.type,p\u003d0\u003d\u003d\u003di?u.minX:u.minY,d\u003d0\u003d\u003d\u003di?u.maxX:u.maxY;if(p\u003e\u003dr\u0026\u0026d\u003cn)l.push(u);else if(!(d\u003cr||p\u003e\u003dn)){var m\u003d[];if(\"Point\"\u003d\u003d\u003dh||\"MultiPoint\"\u003d\u003d\u003dh)st(f,m,r,n,i);else if(\"LineString\"\u003d\u003d\u003dh)lt(f,m,r,n,i,!1,s.lineMetrics);else if(\"MultiLineString\"\u003d\u003d\u003dh)ut(f,m,r,n,i,!1);else if(\"Polygon\"\u003d\u003d\u003dh)ut(f,m,r,n,i,!0);else if(\"MultiPolygon\"\u003d\u003d\u003dh)for(var g\u003d0;g\u003cf.length;g++){var v\u003d[];ut(f[g],v,r,n,i,!0),v.length\u0026\u0026m.push(v)}if(m.length){if(s.lineMetrics\u0026\u0026\"LineString\"\u003d\u003d\u003dh){for(g\u003d0;g\u003cm.length;g++)l.push(Q(u.id,h,m[g],u.tags));continue}\"LineString\"!\u003d\u003dh\u0026\u0026\"MultiLineString\"!\u003d\u003dh||(1\u003d\u003d\u003dm.length?(h\u003d\"LineString\",m\u003dm[0]):h\u003d\"MultiLineString\"),\"Point\"!\u003d\u003dh\u0026\u0026\"MultiPoint\"!\u003d\u003dh||(h\u003d3\u003d\u003d\u003dm.length?\"Point\":\"MultiPoint\"),l.push(Q(u.id,h,m,u.tags))}}}return l.length?l:null}function st(t,e,r,n,i){for(var a\u003d0;a\u003ct.length;a+\u003d3){var o\u003dt[a+i];o\u003e\u003dr\u0026\u0026o\u003c\u003dn\u0026\u0026(e.push(t[a]),e.push(t[a+1]),e.push(t[a+2]))}}function lt(t,e,r,n,i,a,o){for(var s,l,c\u003dct(t),u\u003d0\u003d\u003d\u003di?ht:pt,f\u003dt.start,h\u003d0;h\u003ct.length-3;h+\u003d3){var p\u003dt[h],d\u003dt[h+1],m\u003dt[h+2],g\u003dt[h+3],v\u003dt[h+4],y\u003d0\u003d\u003d\u003di?p:d,x\u003d0\u003d\u003d\u003di?g:v,b\u003d!1;o\u0026\u0026(s\u003dMath.sqrt(Math.pow(p-g,2)+Math.pow(d-v,2))),y\u003cr?x\u003er\u0026\u0026(l\u003du(c,p,d,g,v,r),o\u0026\u0026(c.start\u003df+s*l)):y\u003en?x\u003cn\u0026\u0026(l\u003du(c,p,d,g,v,n),o\u0026\u0026(c.start\u003df+s*l)):ft(c,p,d,m),x\u003cr\u0026\u0026y\u003e\u003dr\u0026\u0026(l\u003du(c,p,d,g,v,r),b\u003d!0),x\u003en\u0026\u0026y\u003c\u003dn\u0026\u0026(l\u003du(c,p,d,g,v,n),b\u003d!0),!a\u0026\u0026b\u0026\u0026(o\u0026\u0026(c.end\u003df+s*l),e.push(c),c\u003dct(t)),o\u0026\u0026(f+\u003ds)}var _\u003dt.length-3;p\u003dt[_],d\u003dt[_+1],m\u003dt[_+2],(y\u003d0\u003d\u003d\u003di?p:d)\u003e\u003dr\u0026\u0026y\u003c\u003dn\u0026\u0026ft(c,p,d,m),_\u003dc.length-3,a\u0026\u0026_\u003e\u003d3\u0026\u0026(c[_]!\u003d\u003dc[0]||c[_+1]!\u003d\u003dc[1])\u0026\u0026ft(c,c[0],c[1],c[2]),c.length\u0026\u0026e.push(c)}function ct(t){var e\u003d[];return e.size\u003dt.size,e.start\u003dt.start,e.end\u003dt.end,e}function ut(t,e,r,n,i,a){for(var o\u003d0;o\u003ct.length;o++)lt(t[o],e,r,n,i,a,!1)}function ft(t,e,r,n){t.push(e),t.push(r),t.push(n)}function ht(t,e,r,n,i,a){var o\u003d(a-e)/(n-e);return t.push(a),t.push(r+(i-r)*o),t.push(1),o}function pt(t,e,r,n,i,a){var o\u003d(a-r)/(i-r);return t.push(e+(n-e)*o),t.push(a),t.push(1),o}function dt(t,e){for(var r\u003d[],n\u003d0;n\u003ct.length;n++){var i,a\u003dt[n],o\u003da.type;if(\"Point\"\u003d\u003d\u003do||\"MultiPoint\"\u003d\u003d\u003do||\"LineString\"\u003d\u003d\u003do)i\u003dmt(a.geometry,e);else if(\"MultiLineString\"\u003d\u003d\u003do||\"Polygon\"\u003d\u003d\u003do){i\u003d[];for(var s\u003d0;s\u003ca.geometry.length;s++)i.push(mt(a.geometry[s],e))}else if(\"MultiPolygon\"\u003d\u003d\u003do)for(i\u003d[],s\u003d0;s\u003ca.geometry.length;s++){for(var l\u003d[],c\u003d0;c\u003ca.geometry[s].length;c++)l.push(mt(a.geometry[s][c],e));i.push(l)}r.push(Q(a.id,o,i,a.tags))}return r}function mt(t,e){var r\u003d[];r.size\u003dt.size,void 0!\u003d\u003dt.start\u0026\u0026(r.start\u003dt.start,r.end\u003dt.end);for(var n\u003d0;n\u003ct.length;n+\u003d3)r.push(t[n]+e,t[n+1],t[n+2]);return r}function gt(t,e){if(t.transformed)return t;var r,n,i,a\u003d1\u003c\u003ct.z,o\u003dt.x,s\u003dt.y;for(r\u003d0;r\u003ct.features.length;r++){var l\u003dt.features[r],c\u003dl.geometry,u\u003dl.type;if(l.geometry\u003d[],1\u003d\u003d\u003du)for(n\u003d0;n\u003cc.length;n+\u003d2)l.geometry.push(vt(c[n],c[n+1],e,a,o,s));else for(n\u003d0;n\u003cc.length;n++){var f\u003d[];for(i\u003d0;i\u003cc[n].length;i+\u003d2)f.push(vt(c[n][i],c[n][i+1],e,a,o,s));l.geometry.push(f)}}return t.transformed\u003d!0,t}function vt(t,e,r,n,i,a){return[Math.round(r*(t*n-i)),Math.round(r*(e*n-a))]}function yt(t,e,r,n,i){for(var a\u003de\u003d\u003d\u003di.maxZoom?0:i.tolerance/((1\u003c\u003ce)*i.extent),o\u003d{features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z:e,transformed:!1,minX:2,minY:1,maxX:-1,maxY:0},s\u003d0;s\u003ct.length;s++){o.numFeatures++,xt(o,t[s],a,i);var l\u003dt[s].minX,c\u003dt[s].minY,u\u003dt[s].maxX,f\u003dt[s].maxY;l\u003co.minX\u0026\u0026(o.minX\u003dl),c\u003co.minY\u0026\u0026(o.minY\u003dc),u\u003eo.maxX\u0026\u0026(o.maxX\u003du),f\u003eo.maxY\u0026\u0026(o.maxY\u003df)}return o}function xt(t,e,r,n){var i\u003de.geometry,a\u003de.type,o\u003d[];if(\"Point\"\u003d\u003d\u003da||\"MultiPoint\"\u003d\u003d\u003da)for(var s\u003d0;s\u003ci.length;s+\u003d3)o.push(i[s]),o.push(i[s+1]),t.numPoints++,t.numSimplified++;else if(\"LineString\"\u003d\u003d\u003da)bt(o,i,t,r,!1,!1);else if(\"MultiLineString\"\u003d\u003d\u003da||\"Polygon\"\u003d\u003d\u003da)for(s\u003d0;s\u003ci.length;s++)bt(o,i[s],t,r,\"Polygon\"\u003d\u003d\u003da,0\u003d\u003d\u003ds);else if(\"MultiPolygon\"\u003d\u003d\u003da)for(var l\u003d0;l\u003ci.length;l++){var c\u003di[l];for(s\u003d0;s\u003cc.length;s++)bt(o,c[s],t,r,!0,0\u003d\u003d\u003ds)}if(o.length){var u\u003de.tags||null;if(\"LineString\"\u003d\u003d\u003da\u0026\u0026n.lineMetrics){for(var f in u\u003d{},e.tags)u[f]\u003de.tags[f];u.mapbox_clip_start\u003di.start/i.size,u.mapbox_clip_end\u003di.end/i.size}var h\u003d{geometry:o,type:\"Polygon\"\u003d\u003d\u003da||\"MultiPolygon\"\u003d\u003d\u003da?3:\"LineString\"\u003d\u003d\u003da||\"MultiLineString\"\u003d\u003d\u003da?2:1,tags:u};null!\u003d\u003de.id\u0026\u0026(h.id\u003de.id),t.features.push(h)}}function bt(t,e,r,n,i,a){var o\u003dn*n;if(n\u003e0\u0026\u0026e.size\u003c(i?o:n))r.numPoints+\u003de.length/3;else{for(var s\u003d[],l\u003d0;l\u003ce.length;l+\u003d3)(0\u003d\u003d\u003dn||e[l+2]\u003eo)\u0026\u0026(r.numSimplified++,s.push(e[l]),s.push(e[l+1])),r.numPoints++;i\u0026\u0026function(t,e){for(var r\u003d0,n\u003d0,i\u003dt.length,a\u003di-2;n\u003ci;a\u003dn,n+\u003d2)r+\u003d(t[n]-t[a])*(t[n+1]+t[a+1]);if(r\u003e0\u003d\u003d\u003de)for(n\u003d0,i\u003dt.length;n\u003ci/2;n+\u003d2){var o\u003dt[n],s\u003dt[n+1];t[n]\u003dt[i-2-n],t[n+1]\u003dt[i-1-n],t[i-2-n]\u003do,t[i-1-n]\u003ds}}(s,a),t.push(s)}}function _t(t,e){var r\u003d(e\u003dthis.options\u003dfunction(t,e){for(var r in e)t[r]\u003de[r];return t}(Object.create(this.options),e)).debug;if(r\u0026\u0026console.time(\"preprocess data\"),e.maxZoom\u003c0||e.maxZoom\u003e24)throw new Error(\"maxZoom should be in the 0-24 range\");if(e.promoteId\u0026\u0026e.generateId)throw new Error(\"promoteId and generateId cannot be used together.\");var n\u003dfunction(t,e){var r\u003d[];if(\"FeatureCollection\"\u003d\u003d\u003dt.type)for(var n\u003d0;n\u003ct.features.length;n++)tt(r,t.features[n],e,n);else\"Feature\"\u003d\u003d\u003dt.type?tt(r,t,e):tt(r,{geometry:t},e);return r}(t,e);this.tiles\u003d{},this.tileCoords\u003d[],r\u0026\u0026(console.timeEnd(\"preprocess data\"),console.log(\"index: maxZoom: %d, maxPoints: %d\",e.indexMaxZoom,e.indexMaxPoints),console.time(\"generate tiles\"),this.stats\u003d{},this.total\u003d0),(n\u003dfunction(t,e){var r\u003de.buffer/e.extent,n\u003dt,i\u003dot(t,1,-1-r,r,0,-1,2,e),a\u003dot(t,1,1-r,2+r,0,-1,2,e);return(i||a)\u0026\u0026(n\u003dot(t,1,-r,1+r,0,-1,2,e)||[],i\u0026\u0026(n\u003ddt(i,1).concat(n)),a\u0026\u0026(n\u003dn.concat(dt(a,-1)))),n}(n,e)).length\u0026\u0026this.splitTile(n,0,0,0),r\u0026\u0026(n.length\u0026\u0026console.log(\"features: %d, points: %d\",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd(\"generate tiles\"),console.log(\"tiles generated:\",this.total,JSON.stringify(this.stats)))}function wt(t,e,r){return 32*((1\u003c\u003ct)*r+e)+t}function Tt(t,e){var r\u003dt.tileID.canonical;if(!this._geoJSONIndex)return e(null,null);var n\u003dthis._geoJSONIndex.getTile(r.z,r.x,r.y);if(!n)return e(null,null);var i\u003dnew g(n.features),a\u003d_(i);0\u003d\u003d\u003da.byteOffset\u0026\u0026a.byteLength\u003d\u003d\u003da.buffer.byteLength||(a\u003dnew Uint8Array(a)),e(null,{vectorTile:i,rawData:a.buffer})}U.prototype.load\u003dfunction(t){var e\u003dthis.options,r\u003de.log,n\u003de.minZoom,i\u003de.maxZoom,a\u003de.nodeSize;r\u0026\u0026console.time(\"total time\");var o\u003d\"prepare \"+t.length+\" points\";r\u0026\u0026console.time(o),this.points\u003dt;for(var s\u003d[],l\u003d0;l\u003ct.length;l++)t[l].geometry\u0026\u0026s.push(q(t[l],l));this.trees[i+1]\u003dnew N(s,Z,J,a,Float32Array),r\u0026\u0026console.timeEnd(o);for(var c\u003di;c\u003e\u003dn;c--){var u\u003d+Date.now();s\u003dthis._cluster(s,c),this.trees[c]\u003dnew N(s,Z,J,a,Float32Array),r\u0026\u0026console.log(\"z%d: %d clusters in %dms\",c,s.length,+Date.now()-u)}return r\u0026\u0026console.timeEnd(\"total time\"),this},U.prototype.getClusters\u003dfunction(t,e){var r\u003d((t[0]+180)%360+360)%360-180,n\u003dMath.max(-90,Math.min(90,t[1])),i\u003d180\u003d\u003d\u003dt[2]?180:((t[2]+180)%360+360)%360-180,a\u003dMath.max(-90,Math.min(90,t[3]));if(t[2]-t[0]\u003e\u003d360)r\u003d-180,i\u003d180;else if(r\u003ei){var o\u003dthis.getClusters([r,n,180,a],e),s\u003dthis.getClusters([-180,n,i,a],e);return o.concat(s)}for(var l\u003dthis.trees[this._limitZoom(e)],c\u003d[],u\u003d0,f\u003dl.range(Y(r),W(a),Y(i),W(n));u\u003cf.length;u+\u003d1){var h\u003df[u],p\u003dl.points[h];c.push(p.numPoints?H(p):this.points[p.index])}return c},U.prototype.getChildren\u003dfunction(t){var e\u003dthis._getOriginId(t),r\u003dthis._getOriginZoom(t),n\u003d\"No cluster with the specified id.\",i\u003dthis.trees[r];if(!i)throw new Error(n);var a\u003di.points[e];if(!a)throw new Error(n);for(var o\u003dthis.options.radius/(this.options.extent*Math.pow(2,r-1)),s\u003d[],l\u003d0,c\u003di.within(a.x,a.y,o);l\u003cc.length;l+\u003d1){var u\u003dc[l],f\u003di.points[u];f.parentId\u003d\u003d\u003dt\u0026\u0026s.push(f.numPoints?H(f):this.points[f.index])}if(0\u003d\u003d\u003ds.length)throw new Error(n);return s},U.prototype.getLeaves\u003dfunction(t,e,r){e\u003de||10,r\u003dr||0;var n\u003d[];return this._appendLeaves(n,t,e,r,0),n},U.prototype.getTile\u003dfunction(t,e,r){var n\u003dthis.trees[this._limitZoom(t)],i\u003dMath.pow(2,t),a\u003dthis.options,o\u003da.extent,s\u003da.radius/o,l\u003d(r-s)/i,c\u003d(r+1+s)/i,u\u003d{features:[]};return this._addTileFeatures(n.range((e-s)/i,l,(e+1+s)/i,c),n.points,e,r,i,u),0\u003d\u003d\u003de\u0026\u0026this._addTileFeatures(n.range(1-s/i,l,1,c),n.points,i,r,i,u),e\u003d\u003d\u003di-1\u0026\u0026this._addTileFeatures(n.range(0,l,s/i,c),n.points,-1,r,i,u),u.features.length?u:null},U.prototype.getClusterExpansionZoom\u003dfunction(t){for(var e\u003dthis._getOriginZoom(t)-1;e\u003c\u003dthis.options.maxZoom;){var r\u003dthis.getChildren(t);if(e++,1!\u003d\u003dr.length)break;t\u003dr[0].properties.cluster_id}return e},U.prototype._appendLeaves\u003dfunction(t,e,r,n,i){for(var a\u003d0,o\u003dthis.getChildren(e);a\u003co.length;a+\u003d1){var s\u003do[a],l\u003ds.properties;if(l\u0026\u0026l.cluster?i+l.point_count\u003c\u003dn?i+\u003dl.point_count:i\u003dthis._appendLeaves(t,l.cluster_id,r,n,i):i\u003cn?i++:t.push(s),t.length\u003d\u003d\u003dr)break}return i},U.prototype._addTileFeatures\u003dfunction(t,e,r,n,i,a){for(var o\u003d0,s\u003dt;o\u003cs.length;o+\u003d1){var l\u003de[s[o]],c\u003dl.numPoints,u\u003d{type:1,geometry:[[Math.round(this.options.extent*(l.x*i-r)),Math.round(this.options.extent*(l.y*i-n))]],tags:c?G(l):this.points[l.index].properties},f\u003dvoid 0;c?f\u003dl.id:this.options.generateId?f\u003dl.index:this.points[l.index].id\u0026\u0026(f\u003dthis.points[l.index].id),void 0!\u003d\u003df\u0026\u0026(u.id\u003df),a.features.push(u)}},U.prototype._limitZoom\u003dfunction(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},U.prototype._cluster\u003dfunction(t,e){for(var r\u003d[],n\u003dthis.options,i\u003dn.radius,a\u003dn.extent,o\u003dn.reduce,s\u003di/(a*Math.pow(2,e)),l\u003d0;l\u003ct.length;l++){var c\u003dt[l];if(!(c.zoom\u003c\u003de)){c.zoom\u003de;for(var u\u003dthis.trees[e+1],f\u003du.within(c.x,c.y,s),h\u003dc.numPoints||1,p\u003dc.x*h,d\u003dc.y*h,m\u003do\u0026\u0026h\u003e1?this._map(c,!0):null,g\u003d(l\u003c\u003c5)+(e+1)+this.points.length,v\u003d0,y\u003df;v\u003cy.length;v+\u003d1){var x\u003dy[v],b\u003du.points[x];if(!(b.zoom\u003c\u003de)){b.zoom\u003de;var _\u003db.numPoints||1;p+\u003db.x*_,d+\u003db.y*_,h+\u003d_,b.parentId\u003dg,o\u0026\u0026(m||(m\u003dthis._map(c,!0)),o(m,this._map(b)))}}1\u003d\u003d\u003dh?r.push(c):(c.parentId\u003dg,r.push(V(p/h,d/h,g,h,m)))}}return r},U.prototype._getOriginId\u003dfunction(t){return t-this.points.length\u003e\u003e5},U.prototype._getOriginZoom\u003dfunction(t){return(t-this.points.length)%32},U.prototype._map\u003dfunction(t,e){if(t.numPoints)return e?X({},t.properties):t.properties;var r\u003dthis.points[t.index].properties,n\u003dthis.options.map(r);return e\u0026\u0026n\u003d\u003d\u003dr?X({},n):n},_t.prototype.options\u003d{maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,tolerance:3,extent:4096,buffer:64,lineMetrics:!1,promoteId:null,generateId:!1,debug:0},_t.prototype.splitTile\u003dfunction(t,e,r,n,i,a,o){for(var s\u003d[t,e,r,n],l\u003dthis.options,c\u003dl.debug;s.length;){n\u003ds.pop(),r\u003ds.pop(),e\u003ds.pop(),t\u003ds.pop();var u\u003d1\u003c\u003ce,f\u003dwt(e,r,n),h\u003dthis.tiles[f];if(!h\u0026\u0026(c\u003e1\u0026\u0026console.time(\"creation\"),h\u003dthis.tiles[f]\u003dyt(t,e,r,n,l),this.tileCoords.push({z:e,x:r,y:n}),c)){c\u003e1\u0026\u0026(console.log(\"tile z%d-%d-%d (features: %d, points: %d, simplified: %d)\",e,r,n,h.numFeatures,h.numPoints,h.numSimplified),console.timeEnd(\"creation\"));var p\u003d\"z\"+e;this.stats[p]\u003d(this.stats[p]||0)+1,this.total++}if(h.source\u003dt,i){if(e\u003d\u003d\u003dl.maxZoom||e\u003d\u003d\u003di)continue;var d\u003d1\u003c\u003ci-e;if(r!\u003d\u003dMath.floor(a/d)||n!\u003d\u003dMath.floor(o/d))continue}else if(e\u003d\u003d\u003dl.indexMaxZoom||h.numPoints\u003c\u003dl.indexMaxPoints)continue;if(h.source\u003dnull,0!\u003d\u003dt.length){c\u003e1\u0026\u0026console.time(\"clipping\");var m,g,v,y,x,b,_\u003d.5*l.buffer/l.extent,w\u003d.5-_,T\u003d.5+_,k\u003d1+_;m\u003dg\u003dv\u003dy\u003dnull,x\u003dot(t,u,r-_,r+T,0,h.minX,h.maxX,l),b\u003dot(t,u,r+w,r+k,0,h.minX,h.maxX,l),t\u003dnull,x\u0026\u0026(m\u003dot(x,u,n-_,n+T,1,h.minY,h.maxY,l),g\u003dot(x,u,n+w,n+k,1,h.minY,h.maxY,l),x\u003dnull),b\u0026\u0026(v\u003dot(b,u,n-_,n+T,1,h.minY,h.maxY,l),y\u003dot(b,u,n+w,n+k,1,h.minY,h.maxY,l),b\u003dnull),c\u003e1\u0026\u0026console.timeEnd(\"clipping\"),s.push(m||[],e+1,2*r,2*n),s.push(g||[],e+1,2*r,2*n+1),s.push(v||[],e+1,2*r+1,2*n),s.push(y||[],e+1,2*r+1,2*n+1)}}},_t.prototype.getTile\u003dfunction(t,e,r){var n\u003dthis.options,i\u003dn.extent,a\u003dn.debug;if(t\u003c0||t\u003e24)return null;var o\u003d1\u003c\u003ct,s\u003dwt(t,e\u003d(e%o+o)%o,r);if(this.tiles[s])return gt(this.tiles[s],i);a\u003e1\u0026\u0026console.log(\"drilling down to z%d-%d-%d\",t,e,r);for(var l,c\u003dt,u\u003de,f\u003dr;!l\u0026\u0026c\u003e0;)c--,u\u003dMath.floor(u/2),f\u003dMath.floor(f/2),l\u003dthis.tiles[wt(c,u,f)];return l\u0026\u0026l.source?(a\u003e1\u0026\u0026console.log(\"found parent tile z%d-%d-%d\",c,u,f),a\u003e1\u0026\u0026console.time(\"drilling down\"),this.splitTile(l.source,c,u,f,t,e,r),a\u003e1\u0026\u0026console.timeEnd(\"drilling down\"),this.tiles[s]?gt(this.tiles[s],i):null):null};var kt\u003dfunction(e){function r(t,r,n,i){e.call(this,t,r,n,Tt),i\u0026\u0026(this.loadGeoJSON\u003di)}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.loadData\u003dfunction(t,e){this._pendingCallback\u0026\u0026this._pendingCallback(null,{abandoned:!0}),this._pendingCallback\u003de,this._pendingLoadDataParams\u003dt,this._state\u0026\u0026\"Idle\"!\u003d\u003dthis._state?this._state\u003d\"NeedsLoadData\":(this._state\u003d\"Coalescing\",this._loadData())},r.prototype._loadData\u003dfunction(){var e\u003dthis;if(this._pendingCallback\u0026\u0026this._pendingLoadDataParams){var r\u003dthis._pendingCallback,n\u003dthis._pendingLoadDataParams;delete this._pendingCallback,delete this._pendingLoadDataParams;var i\u003d!!(n\u0026\u0026n.request\u0026\u0026n.request.collectResourceTiming)\u0026\u0026new t.RequestPerformance(n.request);this.loadGeoJSON(n,(function(a,o){if(a||!o)return r(a);if(\"object\"!\u003dtypeof o)return r(new Error(\"Input data given to \u0027\"+n.source+\"\u0027 is not a valid GeoJSON object.\"));f(o,!0);try{e._geoJSONIndex\u003dn.cluster?new U(function(e){var r\u003de.superclusterOptions,n\u003de.clusterProperties;if(!n||!r)return r;for(var i\u003d{},a\u003d{},o\u003d{accumulated:null,zoom:0},s\u003d{properties:null},l\u003dObject.keys(n),c\u003d0,u\u003dl;c\u003cu.length;c+\u003d1){var f\u003du[c],h\u003dn[f],p\u003dh[0],d\u003dh[1],m\u003dt.createExpression(d),g\u003dt.createExpression(\"string\"\u003d\u003dtypeof p?[p,[\"accumulated\"],[\"get\",f]]:p);i[f]\u003dm.value,a[f]\u003dg.value}return r.map\u003dfunction(t){s.properties\u003dt;for(var e\u003d{},r\u003d0,n\u003dl;r\u003cn.length;r+\u003d1){var a\u003dn[r];e[a]\u003di[a].evaluate(o,s)}return e},r.reduce\u003dfunction(t,e){s.properties\u003de;for(var r\u003d0,n\u003dl;r\u003cn.length;r+\u003d1){var i\u003dn[r];o.accumulated\u003dt[i],t[i]\u003da[i].evaluate(o,s)}},r}(n)).load(o.features):function(t,e){return new _t(t,e)}(o,n.geojsonVtOptions)}catch(a){return r(a)}e.loaded\u003d{};var s\u003d{};if(i){var l\u003di.finish();l\u0026\u0026(s.resourceTiming\u003d{},s.resourceTiming[n.source]\u003dJSON.parse(JSON.stringify(l)))}r(null,s)}))}},r.prototype.coalesce\u003dfunction(){\"Coalescing\"\u003d\u003d\u003dthis._state?this._state\u003d\"Idle\":\"NeedsLoadData\"\u003d\u003d\u003dthis._state\u0026\u0026(this._state\u003d\"Coalescing\",this._loadData())},r.prototype.reloadTile\u003dfunction(t,r){var n\u003dthis.loaded,i\u003dt.uid;return n\u0026\u0026n[i]?e.prototype.reloadTile.call(this,t,r):this.loadTile(t,r)},r.prototype.loadGeoJSON\u003dfunction(e,r){if(e.request)t.getJSON(e.request,r);else{if(\"string\"!\u003dtypeof e.data)return r(new Error(\"Input data given to \u0027\"+e.source+\"\u0027 is not a valid GeoJSON object.\"));try{return r(null,JSON.parse(e.data))}catch(t){return r(new Error(\"Input data given to \u0027\"+e.source+\"\u0027 is not a valid GeoJSON object.\"))}}},r.prototype.removeSource\u003dfunction(t,e){this._pendingCallback\u0026\u0026this._pendingCallback(null,{abandoned:!0}),e()},r.prototype.getClusterExpansionZoom\u003dfunction(t,e){try{e(null,this._geoJSONIndex.getClusterExpansionZoom(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterChildren\u003dfunction(t,e){try{e(null,this._geoJSONIndex.getChildren(t.clusterId))}catch(t){e(t)}},r.prototype.getClusterLeaves\u003dfunction(t,e){try{e(null,this._geoJSONIndex.getLeaves(t.clusterId,t.limit,t.offset))}catch(t){e(t)}},r}(l);var Mt\u003dfunction(e){var r\u003dthis;this.self\u003de,this.actor\u003dnew t.Actor(e,this),this.layerIndexes\u003d{},this.availableImages\u003d{},this.workerSourceTypes\u003d{vector:l,geojson:kt},this.workerSources\u003d{},this.demWorkerSources\u003d{},this.self.registerWorkerSource\u003dfunction(t,e){if(r.workerSourceTypes[t])throw new Error(\u0027Worker source with name \"\u0027+t+\u0027\" already registered.\u0027);r.workerSourceTypes[t]\u003de},this.self.registerRTLTextPlugin\u003dfunction(e){if(t.plugin.isParsed())throw new Error(\"RTL text plugin already registered.\");t.plugin.applyArabicShaping\u003de.applyArabicShaping,t.plugin.processBidirectionalText\u003de.processBidirectionalText,t.plugin.processStyledBidirectionalText\u003de.processStyledBidirectionalText}};return Mt.prototype.setReferrer\u003dfunction(t,e){this.referrer\u003de},Mt.prototype.setImages\u003dfunction(t,e,r){for(var n in this.availableImages[t]\u003de,this.workerSources[t]){var i\u003dthis.workerSources[t][n];for(var a in i)i[a].availableImages\u003de}r()},Mt.prototype.setLayers\u003dfunction(t,e,r){this.getLayerIndex(t).replace(e),r()},Mt.prototype.updateLayers\u003dfunction(t,e,r){this.getLayerIndex(t).update(e.layers,e.removedIds),r()},Mt.prototype.loadTile\u003dfunction(t,e,r){this.getWorkerSource(t,e.type,e.source).loadTile(e,r)},Mt.prototype.loadDEMTile\u003dfunction(t,e,r){this.getDEMWorkerSource(t,e.source).loadTile(e,r)},Mt.prototype.reloadTile\u003dfunction(t,e,r){this.getWorkerSource(t,e.type,e.source).reloadTile(e,r)},Mt.prototype.abortTile\u003dfunction(t,e,r){this.getWorkerSource(t,e.type,e.source).abortTile(e,r)},Mt.prototype.removeTile\u003dfunction(t,e,r){this.getWorkerSource(t,e.type,e.source).removeTile(e,r)},Mt.prototype.removeDEMTile\u003dfunction(t,e){this.getDEMWorkerSource(t,e.source).removeTile(e)},Mt.prototype.removeSource\u003dfunction(t,e,r){if(this.workerSources[t]\u0026\u0026this.workerSources[t][e.type]\u0026\u0026this.workerSources[t][e.type][e.source]){var n\u003dthis.workerSources[t][e.type][e.source];delete this.workerSources[t][e.type][e.source],void 0!\u003d\u003dn.removeSource?n.removeSource(e,r):r()}},Mt.prototype.loadWorkerSource\u003dfunction(t,e,r){try{this.self.importScripts(e.url),r()}catch(t){r(t.toString())}},Mt.prototype.syncRTLPluginState\u003dfunction(e,r,n){try{t.plugin.setState(r);var i\u003dt.plugin.getPluginURL();if(t.plugin.isLoaded()\u0026\u0026!t.plugin.isParsed()\u0026\u0026null!\u003di){this.self.importScripts(i);var a\u003dt.plugin.isParsed();n(a?void 0:new Error(\"RTL Text Plugin failed to import scripts from \"+i),a)}}catch(t){n(t.toString())}},Mt.prototype.getAvailableImages\u003dfunction(t){var e\u003dthis.availableImages[t];return e||(e\u003d[]),e},Mt.prototype.getLayerIndex\u003dfunction(t){var e\u003dthis.layerIndexes[t];return e||(e\u003dthis.layerIndexes[t]\u003dnew n),e},Mt.prototype.getWorkerSource\u003dfunction(t,e,r){var n\u003dthis;if(this.workerSources[t]||(this.workerSources[t]\u003d{}),this.workerSources[t][e]||(this.workerSources[t][e]\u003d{}),!this.workerSources[t][e][r]){var i\u003d{send:function(e,r,i){n.actor.send(e,r,i,t)}};this.workerSources[t][e][r]\u003dnew this.workerSourceTypes[e](i,this.getLayerIndex(t),this.getAvailableImages(t))}return this.workerSources[t][e][r]},Mt.prototype.getDEMWorkerSource\u003dfunction(t,e){return this.demWorkerSources[t]||(this.demWorkerSources[t]\u003d{}),this.demWorkerSources[t][e]||(this.demWorkerSources[t][e]\u003dnew u),this.demWorkerSources[t][e]},Mt.prototype.enforceCacheSizeLimit\u003dfunction(e,r){t.enforceCacheSizeLimit(r)},\"undefined\"!\u003dtypeof WorkerGlobalScope\u0026\u0026void 0!\u003d\u003dt.window\u0026\u0026t.window instanceof WorkerGlobalScope\u0026\u0026(t.window.worker\u003dnew Mt(t.window)),Mt})),n(0,(function(t){var e\u003dt.createCommonjsModule((function(t){function e(t){return!r(t)}function r(t){return\"undefined\"\u003d\u003dtypeof window||\"undefined\"\u003d\u003dtypeof document?\"not a browser\":Array.prototype\u0026\u0026Array.prototype.every\u0026\u0026Array.prototype.filter\u0026\u0026Array.prototype.forEach\u0026\u0026Array.prototype.indexOf\u0026\u0026Array.prototype.lastIndexOf\u0026\u0026Array.prototype.map\u0026\u0026Array.prototype.some\u0026\u0026Array.prototype.reduce\u0026\u0026Array.prototype.reduceRight\u0026\u0026Array.isArray?Function.prototype\u0026\u0026Function.prototype.bind?Object.keys\u0026\u0026Object.create\u0026\u0026Object.getPrototypeOf\u0026\u0026Object.getOwnPropertyNames\u0026\u0026Object.isSealed\u0026\u0026Object.isFrozen\u0026\u0026Object.isExtensible\u0026\u0026Object.getOwnPropertyDescriptor\u0026\u0026Object.defineProperty\u0026\u0026Object.defineProperties\u0026\u0026Object.seal\u0026\u0026Object.freeze\u0026\u0026Object.preventExtensions?\"JSON\"in window\u0026\u0026\"parse\"in JSON\u0026\u0026\"stringify\"in JSON?function(){if(!(\"Worker\"in window\u0026\u0026\"Blob\"in window\u0026\u0026\"URL\"in window))return!1;var t,e,r\u003dnew Blob([\"\"],{type:\"text/javascript\"}),n\u003dURL.createObjectURL(r);try{e\u003dnew Worker(n),t\u003d!0}catch(e){t\u003d!1}e\u0026\u0026e.terminate();return URL.revokeObjectURL(n),t}()?\"Uint8ClampedArray\"in window?ArrayBuffer.isView?function(){var t\u003ddocument.createElement(\"canvas\");t.width\u003dt.height\u003d1;var e\u003dt.getContext(\"2d\");if(!e)return!1;var r\u003de.getImageData(0,0,1,1);return r\u0026\u0026r.width\u003d\u003d\u003dt.width}()?function(t){void 0\u003d\u003d\u003dn[t]\u0026\u0026(n[t]\u003dfunction(t){var r\u003dfunction(t){var r\u003ddocument.createElement(\"canvas\"),n\u003dObject.create(e.webGLContextAttributes);return n.failIfMajorPerformanceCaveat\u003dt,r.probablySupportsContext?r.probablySupportsContext(\"webgl\",n)||r.probablySupportsContext(\"experimental-webgl\",n):r.supportsContext?r.supportsContext(\"webgl\",n)||r.supportsContext(\"experimental-webgl\",n):r.getContext(\"webgl\",n)||r.getContext(\"experimental-webgl\",n)}(t);if(!r)return!1;var n\u003dr.createShader(r.VERTEX_SHADER);if(!n||r.isContextLost())return!1;return r.shaderSource(n,\"void main() {}\"),r.compileShader(n),!0\u003d\u003d\u003dr.getShaderParameter(n,r.COMPILE_STATUS)}(t));return n[t]}(t\u0026\u0026t.failIfMajorPerformanceCaveat)?void 0:\"insufficient WebGL support\":\"insufficient Canvas/getImageData support\":\"insufficient ArrayBuffer support\":\"insufficient Uint8ClampedArray support\":\"insufficient worker support\":\"insufficient JSON support\":\"insufficient Object support\":\"insufficient Function support\":\"insufficent Array support\"}t.exports?t.exports\u003de:window\u0026\u0026(window.mapboxgl\u003dwindow.mapboxgl||{},window.mapboxgl.supported\u003de,window.mapboxgl.notSupportedReason\u003dr);var n\u003d{};e.webGLContextAttributes\u003d{antialias:!1,alpha:!0,stencil:!0,depth:!0}})),r\u003d{create:function(e,r,n){var i\u003dt.window.document.createElement(e);return void 0!\u003d\u003dr\u0026\u0026(i.className\u003dr),n\u0026\u0026n.appendChild(i),i},createNS:function(e,r){return t.window.document.createElementNS(e,r)}},n\u003dt.window.document.documentElement.style;function i(t){if(!n)return t[0];for(var e\u003d0;e\u003ct.length;e++)if(t[e]in n)return t[e];return t[0]}var a,o\u003di([\"userSelect\",\"MozUserSelect\",\"WebkitUserSelect\",\"msUserSelect\"]);r.disableDrag\u003dfunction(){n\u0026\u0026o\u0026\u0026(a\u003dn[o],n[o]\u003d\"none\")},r.enableDrag\u003dfunction(){n\u0026\u0026o\u0026\u0026(n[o]\u003da)};var s\u003di([\"transform\",\"WebkitTransform\"]);r.setTransform\u003dfunction(t,e){t.style[s]\u003de};var l\u003d!1;try{var c\u003dObject.defineProperty({},\"passive\",{get:function(){l\u003d!0}});t.window.addEventListener(\"test\",c,c),t.window.removeEventListener(\"test\",c,c)}catch(t){l\u003d!1}r.addEventListener\u003dfunction(t,e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),\"passive\"in n\u0026\u0026l?t.addEventListener(e,r,n):t.addEventListener(e,r,n.capture)},r.removeEventListener\u003dfunction(t,e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),\"passive\"in n\u0026\u0026l?t.removeEventListener(e,r,n):t.removeEventListener(e,r,n.capture)};var u\u003dfunction(e){e.preventDefault(),e.stopPropagation(),t.window.removeEventListener(\"click\",u,!0)};function f(t){var e\u003dt.userImage;if(e\u0026\u0026e.render\u0026\u0026e.render())return t.data.replace(new Uint8Array(e.data.buffer)),!0;return!1}r.suppressClick\u003dfunction(){t.window.addEventListener(\"click\",u,!0),t.window.setTimeout((function(){t.window.removeEventListener(\"click\",u,!0)}),0)},r.mousePos\u003dfunction(e,r){var n\u003de.getBoundingClientRect();return new t.Point(r.clientX-n.left-e.clientLeft,r.clientY-n.top-e.clientTop)},r.touchPos\u003dfunction(e,r){for(var n\u003de.getBoundingClientRect(),i\u003d[],a\u003d0;a\u003cr.length;a++)i.push(new t.Point(r[a].clientX-n.left-e.clientLeft,r[a].clientY-n.top-e.clientTop));return i},r.mouseButton\u003dfunction(e){return void 0!\u003d\u003dt.window.InstallTrigger\u0026\u00262\u003d\u003d\u003de.button\u0026\u0026e.ctrlKey\u0026\u0026t.window.navigator.platform.toUpperCase().indexOf(\"MAC\")\u003e\u003d0?0:e.button},r.remove\u003dfunction(t){t.parentNode\u0026\u0026t.parentNode.removeChild(t)};var h\u003dfunction(e){function r(){e.call(this),this.images\u003d{},this.updatedImages\u003d{},this.callbackDispatchedThisFrame\u003d{},this.loaded\u003d!1,this.requestors\u003d[],this.patterns\u003d{},this.atlasImage\u003dnew t.RGBAImage({width:1,height:1}),this.dirty\u003d!0}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.isLoaded\u003dfunction(){return this.loaded},r.prototype.setLoaded\u003dfunction(t){if(this.loaded!\u003d\u003dt\u0026\u0026(this.loaded\u003dt,t)){for(var e\u003d0,r\u003dthis.requestors;e\u003cr.length;e+\u003d1){var n\u003dr[e],i\u003dn.ids,a\u003dn.callback;this._notify(i,a)}this.requestors\u003d[]}},r.prototype.getImage\u003dfunction(t){return this.images[t]},r.prototype.addImage\u003dfunction(t,e){this._validate(t,e)\u0026\u0026(this.images[t]\u003de)},r.prototype._validate\u003dfunction(e,r){var n\u003d!0;return this._validateStretch(r.stretchX,r.data\u0026\u0026r.data.width)||(this.fire(new t.ErrorEvent(new Error(\u0027Image \"\u0027+e+\u0027\" has invalid \"stretchX\" value\u0027))),n\u003d!1),this._validateStretch(r.stretchY,r.data\u0026\u0026r.data.height)||(this.fire(new t.ErrorEvent(new Error(\u0027Image \"\u0027+e+\u0027\" has invalid \"stretchY\" value\u0027))),n\u003d!1),this._validateContent(r.content,r)||(this.fire(new t.ErrorEvent(new Error(\u0027Image \"\u0027+e+\u0027\" has invalid \"content\" value\u0027))),n\u003d!1),n},r.prototype._validateStretch\u003dfunction(t,e){if(!t)return!0;for(var r\u003d0,n\u003d0,i\u003dt;n\u003ci.length;n+\u003d1){var a\u003di[n];if(a[0]\u003cr||a[1]\u003ca[0]||e\u003ca[1])return!1;r\u003da[1]}return!0},r.prototype._validateContent\u003dfunction(t,e){return!t||4\u003d\u003d\u003dt.length\u0026\u0026(!(t[0]\u003c0||e.data.width\u003ct[0])\u0026\u0026(!(t[1]\u003c0||e.data.height\u003ct[1])\u0026\u0026(!(t[2]\u003c0||e.data.width\u003ct[2])\u0026\u0026(!(t[3]\u003c0||e.data.height\u003ct[3])\u0026\u0026(!(t[2]\u003ct[0])\u0026\u0026!(t[3]\u003ct[1]))))))},r.prototype.updateImage\u003dfunction(t,e){var r\u003dthis.images[t];e.version\u003dr.version+1,this.images[t]\u003de,this.updatedImages[t]\u003d!0},r.prototype.removeImage\u003dfunction(t){var e\u003dthis.images[t];delete this.images[t],delete this.patterns[t],e.userImage\u0026\u0026e.userImage.onRemove\u0026\u0026e.userImage.onRemove()},r.prototype.listImages\u003dfunction(){return Object.keys(this.images)},r.prototype.getImages\u003dfunction(t,e){var r\u003d!0;if(!this.isLoaded())for(var n\u003d0,i\u003dt;n\u003ci.length;n+\u003d1){var a\u003di[n];this.images[a]||(r\u003d!1)}this.isLoaded()||r?this._notify(t,e):this.requestors.push({ids:t,callback:e})},r.prototype._notify\u003dfunction(e,r){for(var n\u003d{},i\u003d0,a\u003de;i\u003ca.length;i+\u003d1){var o\u003da[i];this.images[o]||this.fire(new t.Event(\"styleimagemissing\",{id:o}));var s\u003dthis.images[o];s?n[o]\u003d{data:s.data.clone(),pixelRatio:s.pixelRatio,sdf:s.sdf,version:s.version,stretchX:s.stretchX,stretchY:s.stretchY,content:s.content,hasRenderCallback:Boolean(s.userImage\u0026\u0026s.userImage.render)}:t.warnOnce(\u0027Image \"\u0027+o+\u0027\" could not be loaded. Please make sure you have added the image with map.addImage() or a \"sprite\" property in your style. You can provide missing images by listening for the \"styleimagemissing\" map event.\u0027)}r(null,n)},r.prototype.getPixelSize\u003dfunction(){var t\u003dthis.atlasImage;return{width:t.width,height:t.height}},r.prototype.getPattern\u003dfunction(e){var r\u003dthis.patterns[e],n\u003dthis.getImage(e);if(!n)return null;if(r\u0026\u0026r.position.version\u003d\u003d\u003dn.version)return r.position;if(r)r.position.version\u003dn.version;else{var i\u003d{w:n.data.width+2,h:n.data.height+2,x:0,y:0},a\u003dnew t.ImagePosition(i,n);this.patterns[e]\u003d{bin:i,position:a}}return this._updatePatternAtlas(),this.patterns[e].position},r.prototype.bind\u003dfunction(e){var r\u003de.gl;this.atlasTexture?this.dirty\u0026\u0026(this.atlasTexture.update(this.atlasImage),this.dirty\u003d!1):this.atlasTexture\u003dnew t.Texture(e,this.atlasImage,r.RGBA),this.atlasTexture.bind(r.LINEAR,r.CLAMP_TO_EDGE)},r.prototype._updatePatternAtlas\u003dfunction(){var e\u003d[];for(var r in this.patterns)e.push(this.patterns[r].bin);var n\u003dt.potpack(e),i\u003dn.w,a\u003dn.h,o\u003dthis.atlasImage;for(var s in o.resize({width:i||1,height:a||1}),this.patterns){var l\u003dthis.patterns[s].bin,c\u003dl.x+1,u\u003dl.y+1,f\u003dthis.images[s].data,h\u003df.width,p\u003df.height;t.RGBAImage.copy(f,o,{x:0,y:0},{x:c,y:u},{width:h,height:p}),t.RGBAImage.copy(f,o,{x:0,y:p-1},{x:c,y:u-1},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:c,y:u+p},{width:h,height:1}),t.RGBAImage.copy(f,o,{x:h-1,y:0},{x:c-1,y:u},{width:1,height:p}),t.RGBAImage.copy(f,o,{x:0,y:0},{x:c+h,y:u},{width:1,height:p})}this.dirty\u003d!0},r.prototype.beginFrame\u003dfunction(){this.callbackDispatchedThisFrame\u003d{}},r.prototype.dispatchRenderCallbacks\u003dfunction(t){for(var e\u003d0,r\u003dt;e\u003cr.length;e+\u003d1){var n\u003dr[e];if(!this.callbackDispatchedThisFrame[n]){this.callbackDispatchedThisFrame[n]\u003d!0;var i\u003dthis.images[n];f(i)\u0026\u0026this.updateImage(n,i)}}},r}(t.Evented);var p\u003dg,d\u003dg,m\u003d1e20;function g(t,e,r,n,i,a){this.fontSize\u003dt||24,this.buffer\u003dvoid 0\u003d\u003d\u003de?3:e,this.cutoff\u003dn||.25,this.fontFamily\u003di||\"sans-serif\",this.fontWeight\u003da||\"normal\",this.radius\u003dr||8;var o\u003dthis.size\u003dthis.fontSize+2*this.buffer;this.canvas\u003ddocument.createElement(\"canvas\"),this.canvas.width\u003dthis.canvas.height\u003do,this.ctx\u003dthis.canvas.getContext(\"2d\"),this.ctx.font\u003dthis.fontWeight+\" \"+this.fontSize+\"px \"+this.fontFamily,this.ctx.textBaseline\u003d\"middle\",this.ctx.fillStyle\u003d\"black\",this.gridOuter\u003dnew Float64Array(o*o),this.gridInner\u003dnew Float64Array(o*o),this.f\u003dnew Float64Array(o),this.d\u003dnew Float64Array(o),this.z\u003dnew Float64Array(o+1),this.v\u003dnew Int16Array(o),this.middle\u003dMath.round(o/2*(navigator.userAgent.indexOf(\"Gecko/\")\u003e\u003d0?1.2:1))}function v(t,e,r,n,i,a,o){for(var s\u003d0;s\u003ce;s++){for(var l\u003d0;l\u003cr;l++)n[l]\u003dt[l*e+s];for(y(n,i,a,o,r),l\u003d0;l\u003cr;l++)t[l*e+s]\u003di[l]}for(l\u003d0;l\u003cr;l++){for(s\u003d0;s\u003ce;s++)n[s]\u003dt[l*e+s];for(y(n,i,a,o,e),s\u003d0;s\u003ce;s++)t[l*e+s]\u003dMath.sqrt(i[s])}}function y(t,e,r,n,i){r[0]\u003d0,n[0]\u003d-m,n[1]\u003d+m;for(var a\u003d1,o\u003d0;a\u003ci;a++){for(var s\u003d(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);s\u003c\u003dn[o];)o--,s\u003d(t[a]+a*a-(t[r[o]]+r[o]*r[o]))/(2*a-2*r[o]);r[++o]\u003da,n[o]\u003ds,n[o+1]\u003d+m}for(a\u003d0,o\u003d0;a\u003ci;a++){for(;n[o+1]\u003ca;)o++;e[a]\u003d(a-r[o])*(a-r[o])+t[r[o]]}}g.prototype.draw\u003dfunction(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e\u003dthis.ctx.getImageData(0,0,this.size,this.size),r\u003dnew Uint8ClampedArray(this.size*this.size),n\u003d0;n\u003cthis.size*this.size;n++){var i\u003de.data[4*n+3]/255;this.gridOuter[n]\u003d1\u003d\u003d\u003di?0:0\u003d\u003d\u003di?m:Math.pow(Math.max(0,.5-i),2),this.gridInner[n]\u003d1\u003d\u003d\u003di?m:0\u003d\u003d\u003di?0:Math.pow(Math.max(0,i-.5),2)}for(v(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),v(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n\u003d0;n\u003cthis.size*this.size;n++){var a\u003dthis.gridOuter[n]-this.gridInner[n];r[n]\u003dMath.max(0,Math.min(255,Math.round(255-255*(a/this.radius+this.cutoff))))}return r},p.default\u003dd;var x\u003dfunction(t,e){this.requestManager\u003dt,this.localIdeographFontFamily\u003de,this.entries\u003d{}};x.prototype.setURL\u003dfunction(t){this.url\u003dt},x.prototype.getGlyphs\u003dfunction(e,r){var n\u003dthis,i\u003d[];for(var a in e)for(var o\u003d0,s\u003de[a];o\u003cs.length;o+\u003d1){var l\u003ds[o];i.push({stack:a,id:l})}t.asyncAll(i,(function(t,e){var r\u003dt.stack,i\u003dt.id,a\u003dn.entries[r];a||(a\u003dn.entries[r]\u003d{glyphs:{},requests:{},ranges:{}});var o\u003da.glyphs[i];if(void 0\u003d\u003d\u003do){if(o\u003dn._tinySDF(a,r,i))return a.glyphs[i]\u003do,void e(null,{stack:r,id:i,glyph:o});var s\u003dMath.floor(i/256);if(256*s\u003e65535)e(new Error(\"glyphs \u003e 65535 not supported\"));else if(a.ranges[s])e(null,{stack:r,id:i,glyph:o});else{var l\u003da.requests[s];l||(l\u003da.requests[s]\u003d[],x.loadGlyphRange(r,s,n.url,n.requestManager,(function(t,e){if(e){for(var r in e)n._doesCharSupportLocalGlyph(+r)||(a.glyphs[+r]\u003de[+r]);a.ranges[s]\u003d!0}for(var i\u003d0,o\u003dl;i\u003co.length;i+\u003d1){(0,o[i])(t,e)}delete a.requests[s]}))),l.push((function(t,n){t?e(t):n\u0026\u0026e(null,{stack:r,id:i,glyph:n[i]||null})}))}}else e(null,{stack:r,id:i,glyph:o})}),(function(t,e){if(t)r(t);else if(e){for(var n\u003d{},i\u003d0,a\u003de;i\u003ca.length;i+\u003d1){var o\u003da[i],s\u003do.stack,l\u003do.id,c\u003do.glyph;(n[s]||(n[s]\u003d{}))[l]\u003dc\u0026\u0026{id:c.id,bitmap:c.bitmap.clone(),metrics:c.metrics}}r(null,n)}}))},x.prototype._doesCharSupportLocalGlyph\u003dfunction(e){return!!this.localIdeographFontFamily\u0026\u0026(t.isChar[\"CJK Unified Ideographs\"](e)||t.isChar[\"Hangul Syllables\"](e)||t.isChar.Hiragana(e)||t.isChar.Katakana(e))},x.prototype._tinySDF\u003dfunction(e,r,n){var i\u003dthis.localIdeographFontFamily;if(i\u0026\u0026this._doesCharSupportLocalGlyph(n)){var a\u003de.tinySDF;if(!a){var o\u003d\"400\";/bold/i.test(r)?o\u003d\"900\":/medium/i.test(r)?o\u003d\"500\":/light/i.test(r)\u0026\u0026(o\u003d\"200\"),a\u003de.tinySDF\u003dnew x.TinySDF(24,3,8,.25,i,o)}return{id:n,bitmap:new t.AlphaImage({width:30,height:30},a.draw(String.fromCharCode(n))),metrics:{width:24,height:24,left:0,top:-8,advance:24}}}},x.loadGlyphRange\u003dfunction(e,r,n,i,a){var o\u003d256*r,s\u003do+255,l\u003di.transformRequest(i.normalizeGlyphsURL(n).replace(\"{fontstack}\",e).replace(\"{range}\",o+\"-\"+s),t.ResourceType.Glyphs);t.getArrayBuffer(l,(function(e,r){if(e)a(e);else if(r){for(var n\u003d{},i\u003d0,o\u003dt.parseGlyphPBF(r);i\u003co.length;i+\u003d1){var s\u003do[i];n[s.id]\u003ds}a(null,n)}}))},x.TinySDF\u003dp;var b\u003dfunction(){this.specification\u003dt.styleSpec.light.position};b.prototype.possiblyEvaluate\u003dfunction(e,r){return t.sphericalToCartesian(e.expression.evaluate(r))},b.prototype.interpolate\u003dfunction(e,r,n){return{x:t.number(e.x,r.x,n),y:t.number(e.y,r.y,n),z:t.number(e.z,r.z,n)}};var _\u003dnew t.Properties({anchor:new t.DataConstantProperty(t.styleSpec.light.anchor),position:new b,color:new t.DataConstantProperty(t.styleSpec.light.color),intensity:new t.DataConstantProperty(t.styleSpec.light.intensity)}),w\u003dfunction(e){function r(r){e.call(this),this._transitionable\u003dnew t.Transitionable(_),this.setLight(r),this._transitioning\u003dthis._transitionable.untransitioned()}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.getLight\u003dfunction(){return this._transitionable.serialize()},r.prototype.setLight\u003dfunction(e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),!this._validate(t.validateLight,e,r))for(var n in e){var i\u003de[n];t.endsWith(n,\"-transition\")?this._transitionable.setTransition(n.slice(0,-\"-transition\".length),i):this._transitionable.setValue(n,i)}},r.prototype.updateTransitions\u003dfunction(t){this._transitioning\u003dthis._transitionable.transitioned(t,this._transitioning)},r.prototype.hasTransition\u003dfunction(){return this._transitioning.hasTransition()},r.prototype.recalculate\u003dfunction(t){this.properties\u003dthis._transitioning.possiblyEvaluate(t)},r.prototype._validate\u003dfunction(e,r,n){return(!n||!1!\u003d\u003dn.validate)\u0026\u0026t.emitValidationErrors(this,e.call(t.validateStyle,t.extend({value:r,style:{glyphs:!0,sprite:!0},styleSpec:t.styleSpec})))},r}(t.Evented),T\u003dfunction(t,e){this.width\u003dt,this.height\u003de,this.nextRow\u003d0,this.data\u003dnew Uint8Array(this.width*this.height),this.dashEntry\u003d{}};T.prototype.getDash\u003dfunction(t,e){var r\u003dt.join(\",\")+String(e);return this.dashEntry[r]||(this.dashEntry[r]\u003dthis.addDash(t,e)),this.dashEntry[r]},T.prototype.getDashRanges\u003dfunction(t,e,r){var n\u003d[],i\u003dt.length%2\u003d\u003d1?-t[t.length-1]*r:0,a\u003dt[0]*r,o\u003d!0;n.push({left:i,right:a,isDash:o,zeroLength:0\u003d\u003d\u003dt[0]});for(var s\u003dt[0],l\u003d1;l\u003ct.length;l++){o\u003d!o;var c\u003dt[l];i\u003ds*r,a\u003d(s+\u003dc)*r,n.push({left:i,right:a,isDash:o,zeroLength:0\u003d\u003d\u003dc})}return n},T.prototype.addRoundDash\u003dfunction(t,e,r){for(var n\u003de/2,i\u003d-r;i\u003c\u003dr;i++)for(var a\u003dthis.nextRow+r+i,o\u003dthis.width*a,s\u003d0,l\u003dt[s],c\u003d0;c\u003cthis.width;c++){c/l.right\u003e1\u0026\u0026(l\u003dt[++s]);var u\u003dMath.abs(c-l.left),f\u003dMath.abs(c-l.right),h\u003dMath.min(u,f),p\u003dvoid 0,d\u003di/r*(n+1);if(l.isDash){var m\u003dn-Math.abs(d);p\u003dMath.sqrt(h*h+m*m)}else p\u003dn-Math.sqrt(h*h+d*d);this.data[o+c]\u003dMath.max(0,Math.min(255,p+128))}},T.prototype.addRegularDash\u003dfunction(t){for(var e\u003dt.length-1;e\u003e\u003d0;--e){var r\u003dt[e],n\u003dt[e+1];r.zeroLength?t.splice(e,1):n\u0026\u0026n.isDash\u003d\u003d\u003dr.isDash\u0026\u0026(n.left\u003dr.left,t.splice(e,1))}var i\u003dt[0],a\u003dt[t.length-1];i.isDash\u003d\u003d\u003da.isDash\u0026\u0026(i.left\u003da.left-this.width,a.right\u003di.right+this.width);for(var o\u003dthis.width*this.nextRow,s\u003d0,l\u003dt[s],c\u003d0;c\u003cthis.width;c++){c/l.right\u003e1\u0026\u0026(l\u003dt[++s]);var u\u003dMath.abs(c-l.left),f\u003dMath.abs(c-l.right),h\u003dMath.min(u,f),p\u003dl.isDash?h:-h;this.data[o+c]\u003dMath.max(0,Math.min(255,p+128))}},T.prototype.addDash\u003dfunction(e,r){var n\u003dr?7:0,i\u003d2*n+1;if(this.nextRow+i\u003ethis.height)return t.warnOnce(\"LineAtlas out of space\"),null;for(var a\u003d0,o\u003d0;o\u003ce.length;o++)a+\u003de[o];if(0!\u003d\u003da){var s\u003dthis.width/a,l\u003dthis.getDashRanges(e,this.width,s);r?this.addRoundDash(l,s,n):this.addRegularDash(l)}var c\u003d{y:(this.nextRow+n+.5)/this.height,height:2*n/this.height,width:a};return this.nextRow+\u003di,this.dirty\u003d!0,c},T.prototype.bind\u003dfunction(t){var e\u003dt.gl;this.texture?(e.bindTexture(e.TEXTURE_2D,this.texture),this.dirty\u0026\u0026(this.dirty\u003d!1,e.texSubImage2D(e.TEXTURE_2D,0,0,0,this.width,this.height,e.ALPHA,e.UNSIGNED_BYTE,this.data))):(this.texture\u003de.createTexture(),e.bindTexture(e.TEXTURE_2D,this.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.REPEAT),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.ALPHA,this.width,this.height,0,e.ALPHA,e.UNSIGNED_BYTE,this.data))};var k\u003dfunction e(r,n){this.workerPool\u003dr,this.actors\u003d[],this.currentActor\u003d0,this.id\u003dt.uniqueId();for(var i\u003dthis.workerPool.acquire(this.id),a\u003d0;a\u003ci.length;a++){var o\u003di[a],s\u003dnew e.Actor(o,n,this.id);s.name\u003d\"Worker \"+a,this.actors.push(s)}};function M(e,r,n){var i\u003dfunction(i,a){if(i)return n(i);if(a){var o\u003dt.pick(t.extend(a,e),[\"tiles\",\"minzoom\",\"maxzoom\",\"attribution\",\"mapbox_logo\",\"bounds\",\"scheme\",\"tileSize\",\"encoding\"]);a.vector_layers\u0026\u0026(o.vectorLayers\u003da.vector_layers,o.vectorLayerIds\u003do.vectorLayers.map((function(t){return t.id}))),o.tiles\u003dr.canonicalizeTileset(o,e.url),n(null,o)}};return e.url?t.getJSON(r.transformRequest(r.normalizeSourceURL(e.url),t.ResourceType.Source),i):t.browser.frame((function(){return i(null,e)}))}k.prototype.broadcast\u003dfunction(e,r,n){n\u003dn||function(){},t.asyncAll(this.actors,(function(t,n){t.send(e,r,n)}),n)},k.prototype.getActor\u003dfunction(){return this.currentActor\u003d(this.currentActor+1)%this.actors.length,this.actors[this.currentActor]},k.prototype.remove\u003dfunction(){this.actors.forEach((function(t){t.remove()})),this.actors\u003d[],this.workerPool.release(this.id)},k.Actor\u003dt.Actor;var A\u003dfunction(e,r,n){this.bounds\u003dt.LngLatBounds.convert(this.validateBounds(e)),this.minzoom\u003dr||0,this.maxzoom\u003dn||24};A.prototype.validateBounds\u003dfunction(t){return Array.isArray(t)\u0026\u00264\u003d\u003d\u003dt.length?[Math.max(-180,t[0]),Math.max(-90,t[1]),Math.min(180,t[2]),Math.min(90,t[3])]:[-180,-90,180,90]},A.prototype.contains\u003dfunction(e){var r\u003dMath.pow(2,e.z),n\u003dMath.floor(t.mercatorXfromLng(this.bounds.getWest())*r),i\u003dMath.floor(t.mercatorYfromLat(this.bounds.getNorth())*r),a\u003dMath.ceil(t.mercatorXfromLng(this.bounds.getEast())*r),o\u003dMath.ceil(t.mercatorYfromLat(this.bounds.getSouth())*r);return e.x\u003e\u003dn\u0026\u0026e.x\u003ca\u0026\u0026e.y\u003e\u003di\u0026\u0026e.y\u003co};var S\u003dfunction(e){function r(r,n,i,a){if(e.call(this),this.id\u003dr,this.dispatcher\u003di,this.type\u003d\"vector\",this.minzoom\u003d0,this.maxzoom\u003d22,this.scheme\u003d\"xyz\",this.tileSize\u003d512,this.reparseOverscaled\u003d!0,this.isTileClipped\u003d!0,this._loaded\u003d!1,t.extend(this,t.pick(n,[\"url\",\"scheme\",\"tileSize\",\"promoteId\"])),this._options\u003dt.extend({type:\"vector\"},n),this._collectResourceTiming\u003dn.collectResourceTiming,512!\u003d\u003dthis.tileSize)throw new Error(\"vector tile sources must have a tileSize of 512\");this.setEventedParent(a)}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.load\u003dfunction(){var e\u003dthis;this._loaded\u003d!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest\u003dM(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest\u003dnull,e._loaded\u003d!0,r?e.fire(new t.ErrorEvent(r)):n\u0026\u0026(t.extend(e,n),n.bounds\u0026\u0026(e.tileBounds\u003dnew A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles,e.map._requestManager._customAccessToken),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken,e.map._requestManager._customAccessToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})))}))},r.prototype.loaded\u003dfunction(){return this._loaded},r.prototype.hasTile\u003dfunction(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.onAdd\u003dfunction(t){this.map\u003dt,this.load()},r.prototype.onRemove\u003dfunction(){this._tileJSONRequest\u0026\u0026(this._tileJSONRequest.cancel(),this._tileJSONRequest\u003dnull)},r.prototype.serialize\u003dfunction(){return t.extend({},this._options)},r.prototype.loadTile\u003dfunction(e,r){var n\u003dthis.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme)),i\u003d{request:this.map._requestManager.transformRequest(n,t.ResourceType.Tile),uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,tileSize:this.tileSize*e.tileID.overscaleFactor(),type:this.type,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};function a(n,i){return delete e.request,e.aborted?r(null):n\u0026\u0026404!\u003d\u003dn.status?r(n):(i\u0026\u0026i.resourceTiming\u0026\u0026(e.resourceTiming\u003di.resourceTiming),this.map._refreshExpiredTiles\u0026\u0026i\u0026\u0026e.setExpiryData(i),e.loadVectorData(i,this.map.painter),t.cacheEntryPossiblyAdded(this.dispatcher),r(null),void(e.reloadCallback\u0026\u0026(this.loadTile(e,e.reloadCallback),e.reloadCallback\u003dnull)))}i.request.collectResourceTiming\u003dthis._collectResourceTiming,e.actor\u0026\u0026\"expired\"!\u003d\u003de.state?\"loading\"\u003d\u003d\u003de.state?e.reloadCallback\u003dr:e.request\u003de.actor.send(\"reloadTile\",i,a.bind(this)):(e.actor\u003dthis.dispatcher.getActor(),e.request\u003de.actor.send(\"loadTile\",i,a.bind(this)))},r.prototype.abortTile\u003dfunction(t){t.request\u0026\u0026(t.request.cancel(),delete t.request),t.actor\u0026\u0026t.actor.send(\"abortTile\",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.unloadTile\u003dfunction(t){t.unloadVectorData(),t.actor\u0026\u0026t.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id},void 0)},r.prototype.hasTransition\u003dfunction(){return!1},r}(t.Evented),E\u003dfunction(e){function r(r,n,i,a){e.call(this),this.id\u003dr,this.dispatcher\u003di,this.setEventedParent(a),this.type\u003d\"raster\",this.minzoom\u003d0,this.maxzoom\u003d22,this.roundZoom\u003d!0,this.scheme\u003d\"xyz\",this.tileSize\u003d512,this._loaded\u003d!1,this._options\u003dt.extend({type:\"raster\"},n),t.extend(this,t.pick(n,[\"url\",\"scheme\",\"tileSize\"]))}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.load\u003dfunction(){var e\u003dthis;this._loaded\u003d!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._tileJSONRequest\u003dM(this._options,this.map._requestManager,(function(r,n){e._tileJSONRequest\u003dnull,e._loaded\u003d!0,r?e.fire(new t.ErrorEvent(r)):n\u0026\u0026(t.extend(e,n),n.bounds\u0026\u0026(e.tileBounds\u003dnew A(n.bounds,e.minzoom,e.maxzoom)),t.postTurnstileEvent(n.tiles),t.postMapLoadEvent(n.tiles,e.map._getMapId(),e.map._requestManager._skuToken),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})),e.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})))}))},r.prototype.loaded\u003dfunction(){return this._loaded},r.prototype.onAdd\u003dfunction(t){this.map\u003dt,this.load()},r.prototype.onRemove\u003dfunction(){this._tileJSONRequest\u0026\u0026(this._tileJSONRequest.cancel(),this._tileJSONRequest\u003dnull)},r.prototype.serialize\u003dfunction(){return t.extend({},this._options)},r.prototype.hasTile\u003dfunction(t){return!this.tileBounds||this.tileBounds.contains(t.canonical)},r.prototype.loadTile\u003dfunction(e,r){var n\u003dthis,i\u003dthis.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);e.request\u003dt.getImage(this.map._requestManager.transformRequest(i,t.ResourceType.Tile),(function(i,a){if(delete e.request,e.aborted)e.state\u003d\"unloaded\",r(null);else if(i)e.state\u003d\"errored\",r(i);else if(a){n.map._refreshExpiredTiles\u0026\u0026e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o\u003dn.map.painter.context,s\u003do.gl;e.texture\u003dn.map.painter.getTileTexture(a.width),e.texture?e.texture.update(a,{useMipmap:!0}):(e.texture\u003dnew t.Texture(o,a,s.RGBA,{useMipmap:!0}),e.texture.bind(s.LINEAR,s.CLAMP_TO_EDGE,s.LINEAR_MIPMAP_NEAREST),o.extTextureFilterAnisotropic\u0026\u0026s.texParameterf(s.TEXTURE_2D,o.extTextureFilterAnisotropic.TEXTURE_MAX_ANISOTROPY_EXT,o.extTextureFilterAnisotropicMax)),e.state\u003d\"loaded\",t.cacheEntryPossiblyAdded(n.dispatcher),r(null)}}))},r.prototype.abortTile\u003dfunction(t,e){t.request\u0026\u0026(t.request.cancel(),delete t.request),e()},r.prototype.unloadTile\u003dfunction(t,e){t.texture\u0026\u0026this.map.painter.saveTileTexture(t.texture),e()},r.prototype.hasTransition\u003dfunction(){return!1},r}(t.Evented),L\u003dfunction(e){function r(r,n,i,a){e.call(this,r,n,i,a),this.type\u003d\"raster-dem\",this.maxzoom\u003d22,this._options\u003dt.extend({type:\"raster-dem\"},n),this.encoding\u003dn.encoding||\"mapbox\"}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.serialize\u003dfunction(){return{type:\"raster-dem\",url:this.url,tileSize:this.tileSize,tiles:this.tiles,bounds:this.bounds,encoding:this.encoding}},r.prototype.loadTile\u003dfunction(e,r){var n\u003dthis.map._requestManager.normalizeTileURL(e.tileID.canonical.url(this.tiles,this.scheme),this.tileSize);function i(t,n){t\u0026\u0026(e.state\u003d\"errored\",r(t)),n\u0026\u0026(e.dem\u003dn,e.needsHillshadePrepare\u003d!0,e.state\u003d\"loaded\",r(null))}e.request\u003dt.getImage(this.map._requestManager.transformRequest(n,t.ResourceType.Tile),function(n,a){if(delete e.request,e.aborted)e.state\u003d\"unloaded\",r(null);else if(n)e.state\u003d\"errored\",r(n);else if(a){this.map._refreshExpiredTiles\u0026\u0026e.setExpiryData(a),delete a.cacheControl,delete a.expires;var o\u003dt.window.ImageBitmap\u0026\u0026a instanceof t.window.ImageBitmap\u0026\u0026t.offscreenCanvasSupported()?a:t.browser.getImageData(a,1),s\u003d{uid:e.uid,coord:e.tileID,source:this.id,rawImageData:o,encoding:this.encoding};e.actor\u0026\u0026\"expired\"!\u003d\u003de.state||(e.actor\u003dthis.dispatcher.getActor(),e.actor.send(\"loadDEMTile\",s,i.bind(this)))}}.bind(this)),e.neighboringTiles\u003dthis._getNeighboringTiles(e.tileID)},r.prototype._getNeighboringTiles\u003dfunction(e){var r\u003de.canonical,n\u003dMath.pow(2,r.z),i\u003d(r.x-1+n)%n,a\u003d0\u003d\u003d\u003dr.x?e.wrap-1:e.wrap,o\u003d(r.x+1+n)%n,s\u003dr.x+1\u003d\u003d\u003dn?e.wrap+1:e.wrap,l\u003d{};return l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y).key]\u003d{backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y).key]\u003d{backfilled:!1},r.y\u003e0\u0026\u0026(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y-1).key]\u003d{backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y-1).key]\u003d{backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y-1).key]\u003d{backfilled:!1}),r.y+1\u003cn\u0026\u0026(l[new t.OverscaledTileID(e.overscaledZ,a,r.z,i,r.y+1).key]\u003d{backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,e.wrap,r.z,r.x,r.y+1).key]\u003d{backfilled:!1},l[new t.OverscaledTileID(e.overscaledZ,s,r.z,o,r.y+1).key]\u003d{backfilled:!1}),l},r.prototype.unloadTile\u003dfunction(t){t.demTexture\u0026\u0026this.map.painter.saveTileTexture(t.demTexture),t.fbo\u0026\u0026(t.fbo.destroy(),delete t.fbo),t.dem\u0026\u0026delete t.dem,delete t.neighboringTiles,t.state\u003d\"unloaded\",t.actor\u0026\u0026t.actor.send(\"removeDEMTile\",{uid:t.uid,source:this.id})},r}(E),C\u003dfunction(e){function r(r,n,i,a){e.call(this),this.id\u003dr,this.type\u003d\"geojson\",this.minzoom\u003d0,this.maxzoom\u003d18,this.tileSize\u003d512,this.isTileClipped\u003d!0,this.reparseOverscaled\u003d!0,this._removed\u003d!1,this._loaded\u003d!1,this.actor\u003di.getActor(),this.setEventedParent(a),this._data\u003dn.data,this._options\u003dt.extend({},n),this._collectResourceTiming\u003dn.collectResourceTiming,this._resourceTiming\u003d[],void 0!\u003d\u003dn.maxzoom\u0026\u0026(this.maxzoom\u003dn.maxzoom),n.type\u0026\u0026(this.type\u003dn.type),n.attribution\u0026\u0026(this.attribution\u003dn.attribution),this.promoteId\u003dn.promoteId;var o\u003dt.EXTENT/this.tileSize;this.workerOptions\u003dt.extend({source:this.id,cluster:n.cluster||!1,geojsonVtOptions:{buffer:(void 0!\u003d\u003dn.buffer?n.buffer:128)*o,tolerance:(void 0!\u003d\u003dn.tolerance?n.tolerance:.375)*o,extent:t.EXTENT,maxZoom:this.maxzoom,lineMetrics:n.lineMetrics||!1,generateId:n.generateId||!1},superclusterOptions:{maxZoom:void 0!\u003d\u003dn.clusterMaxZoom?Math.min(n.clusterMaxZoom,this.maxzoom-1):this.maxzoom-1,extent:t.EXTENT,radius:(n.clusterRadius||50)*o,log:!1,generateId:n.generateId||!1},clusterProperties:n.clusterProperties},n.workerOptions)}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.load\u003dfunction(){var e\u003dthis;this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(r){if(r)e.fire(new t.ErrorEvent(r));else{var n\u003d{dataType:\"source\",sourceDataType:\"metadata\"};e._collectResourceTiming\u0026\u0026e._resourceTiming\u0026\u0026e._resourceTiming.length\u003e0\u0026\u0026(n.resourceTiming\u003de._resourceTiming,e._resourceTiming\u003d[]),e.fire(new t.Event(\"data\",n))}}))},r.prototype.onAdd\u003dfunction(t){this.map\u003dt,this.load()},r.prototype.setData\u003dfunction(e){var r\u003dthis;return this._data\u003de,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this._updateWorkerData((function(e){if(e)r.fire(new t.ErrorEvent(e));else{var n\u003d{dataType:\"source\",sourceDataType:\"content\"};r._collectResourceTiming\u0026\u0026r._resourceTiming\u0026\u0026r._resourceTiming.length\u003e0\u0026\u0026(n.resourceTiming\u003dr._resourceTiming,r._resourceTiming\u003d[]),r.fire(new t.Event(\"data\",n))}})),this},r.prototype.getClusterExpansionZoom\u003dfunction(t,e){return this.actor.send(\"geojson.getClusterExpansionZoom\",{clusterId:t,source:this.id},e),this},r.prototype.getClusterChildren\u003dfunction(t,e){return this.actor.send(\"geojson.getClusterChildren\",{clusterId:t,source:this.id},e),this},r.prototype.getClusterLeaves\u003dfunction(t,e,r,n){return this.actor.send(\"geojson.getClusterLeaves\",{source:this.id,clusterId:t,limit:e,offset:r},n),this},r.prototype._updateWorkerData\u003dfunction(e){var r\u003dthis;this._loaded\u003d!1;var n\u003dt.extend({},this.workerOptions),i\u003dthis._data;\"string\"\u003d\u003dtypeof i?(n.request\u003dthis.map._requestManager.transformRequest(t.browser.resolveURL(i),t.ResourceType.Source),n.request.collectResourceTiming\u003dthis._collectResourceTiming):n.data\u003dJSON.stringify(i),this.actor.send(this.type+\".loadData\",n,(function(t,i){r._removed||i\u0026\u0026i.abandoned||(r._loaded\u003d!0,i\u0026\u0026i.resourceTiming\u0026\u0026i.resourceTiming[r.id]\u0026\u0026(r._resourceTiming\u003di.resourceTiming[r.id].slice(0)),r.actor.send(r.type+\".coalesce\",{source:n.source},null),e(t))}))},r.prototype.loaded\u003dfunction(){return this._loaded},r.prototype.loadTile\u003dfunction(e,r){var n\u003dthis,i\u003de.actor?\"reloadTile\":\"loadTile\";e.actor\u003dthis.actor;var a\u003d{type:this.type,uid:e.uid,tileID:e.tileID,zoom:e.tileID.overscaledZ,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,pixelRatio:t.browser.devicePixelRatio,showCollisionBoxes:this.map.showCollisionBoxes,promoteId:this.promoteId};e.request\u003dthis.actor.send(i,a,(function(t,a){return delete e.request,e.unloadVectorData(),e.aborted?r(null):t?r(t):(e.loadVectorData(a,n.map.painter,\"reloadTile\"\u003d\u003d\u003di),r(null))}))},r.prototype.abortTile\u003dfunction(t){t.request\u0026\u0026(t.request.cancel(),delete t.request),t.aborted\u003d!0},r.prototype.unloadTile\u003dfunction(t){t.unloadVectorData(),this.actor.send(\"removeTile\",{uid:t.uid,type:this.type,source:this.id})},r.prototype.onRemove\u003dfunction(){this._removed\u003d!0,this.actor.send(\"removeSource\",{type:this.type,source:this.id})},r.prototype.serialize\u003dfunction(){return t.extend({},this._options,{type:this.type,data:this._data})},r.prototype.hasTransition\u003dfunction(){return!1},r}(t.Evented),P\u003dt.createLayout([{name:\"a_pos\",type:\"Int16\",components:2},{name:\"a_texture_pos\",type:\"Int16\",components:2}]),I\u003dfunction(e){function r(t,r,n,i){e.call(this),this.id\u003dt,this.dispatcher\u003dn,this.coordinates\u003dr.coordinates,this.type\u003d\"image\",this.minzoom\u003d0,this.maxzoom\u003d22,this.tileSize\u003d512,this.tiles\u003d{},this._loaded\u003d!1,this.setEventedParent(i),this.options\u003dr}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.load\u003dfunction(e,r){var n\u003dthis;this._loaded\u003d!1,this.fire(new t.Event(\"dataloading\",{dataType:\"source\"})),this.url\u003dthis.options.url,t.getImage(this.map._requestManager.transformRequest(this.url,t.ResourceType.Image),(function(i,a){n._loaded\u003d!0,i?n.fire(new t.ErrorEvent(i)):a\u0026\u0026(n.image\u003da,e\u0026\u0026(n.coordinates\u003de),r\u0026\u0026r(),n._finishLoading())}))},r.prototype.loaded\u003dfunction(){return this._loaded},r.prototype.updateImage\u003dfunction(t){var e\u003dthis;return this.image\u0026\u0026t.url?(this.options.url\u003dt.url,this.load(t.coordinates,(function(){e.texture\u003dnull})),this):this},r.prototype._finishLoading\u003dfunction(){this.map\u0026\u0026(this.setCoordinates(this.coordinates),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"metadata\"})))},r.prototype.onAdd\u003dfunction(t){this.map\u003dt,this.load()},r.prototype.setCoordinates\u003dfunction(e){var r\u003dthis;this.coordinates\u003de;var n\u003de.map(t.MercatorCoordinate.fromLngLat);this.tileID\u003dfunction(e){for(var r\u003d1/0,n\u003d1/0,i\u003d-1/0,a\u003d-1/0,o\u003d0,s\u003de;o\u003cs.length;o+\u003d1){var l\u003ds[o];r\u003dMath.min(r,l.x),n\u003dMath.min(n,l.y),i\u003dMath.max(i,l.x),a\u003dMath.max(a,l.y)}var c\u003di-r,u\u003da-n,f\u003dMath.max(c,u),h\u003dMath.max(0,Math.floor(-Math.log(f)/Math.LN2)),p\u003dMath.pow(2,h);return new t.CanonicalTileID(h,Math.floor((r+i)/2*p),Math.floor((n+a)/2*p))}(n),this.minzoom\u003dthis.maxzoom\u003dthis.tileID.z;var i\u003dn.map((function(t){return r.tileID.getTilePoint(t)._round()}));return this._boundsArray\u003dnew t.StructArrayLayout4i8,this._boundsArray.emplaceBack(i[0].x,i[0].y,0,0),this._boundsArray.emplaceBack(i[1].x,i[1].y,t.EXTENT,0),this._boundsArray.emplaceBack(i[3].x,i[3].y,0,t.EXTENT),this._boundsArray.emplaceBack(i[2].x,i[2].y,t.EXTENT,t.EXTENT),this.boundsBuffer\u0026\u0026(this.boundsBuffer.destroy(),delete this.boundsBuffer),this.fire(new t.Event(\"data\",{dataType:\"source\",sourceDataType:\"content\"})),this},r.prototype.prepare\u003dfunction(){if(0!\u003d\u003dObject.keys(this.tiles).length\u0026\u0026this.image){var e\u003dthis.map.painter.context,r\u003de.gl;for(var n in this.boundsBuffer||(this.boundsBuffer\u003de.createVertexBuffer(this._boundsArray,P.members)),this.boundsSegments||(this.boundsSegments\u003dt.SegmentVector.simpleSegment(0,0,4,2)),this.texture||(this.texture\u003dnew t.Texture(e,this.image,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i\u003dthis.tiles[n];\"loaded\"!\u003d\u003di.state\u0026\u0026(i.state\u003d\"loaded\",i.texture\u003dthis.texture)}}},r.prototype.loadTile\u003dfunction(t,e){this.tileID\u0026\u0026this.tileID.equals(t.tileID.canonical)?(this.tiles[String(t.tileID.wrap)]\u003dt,t.buckets\u003d{},e(null)):(t.state\u003d\"errored\",e(null))},r.prototype.serialize\u003dfunction(){return{type:\"image\",url:this.options.url,coordinates:this.coordinates}},r.prototype.hasTransition\u003dfunction(){return!1},r}(t.Evented);var O\u003dfunction(e){function r(t,r,n,i){e.call(this,t,r,n,i),this.roundZoom\u003d!0,this.type\u003d\"video\",this.options\u003dr}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.load\u003dfunction(){var e\u003dthis;this._loaded\u003d!1;var r\u003dthis.options;this.urls\u003d[];for(var n\u003d0,i\u003dr.urls;n\u003ci.length;n+\u003d1){var a\u003di[n];this.urls.push(this.map._requestManager.transformRequest(a,t.ResourceType.Source).url)}t.getVideo(this.urls,(function(r,n){e._loaded\u003d!0,r?e.fire(new t.ErrorEvent(r)):n\u0026\u0026(e.video\u003dn,e.video.loop\u003d!0,e.video.addEventListener(\"playing\",(function(){e.map.triggerRepaint()})),e.map\u0026\u0026e.video.play(),e._finishLoading())}))},r.prototype.pause\u003dfunction(){this.video\u0026\u0026this.video.pause()},r.prototype.play\u003dfunction(){this.video\u0026\u0026this.video.play()},r.prototype.seek\u003dfunction(e){if(this.video){var r\u003dthis.video.seekable;e\u003cr.start(0)||e\u003er.end(0)?this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+this.id,null,\"Playback for this video can be set only between the \"+r.start(0)+\" and \"+r.end(0)+\"-second mark.\"))):this.video.currentTime\u003de}},r.prototype.getVideo\u003dfunction(){return this.video},r.prototype.onAdd\u003dfunction(t){this.map||(this.map\u003dt,this.load(),this.video\u0026\u0026(this.video.play(),this.setCoordinates(this.coordinates)))},r.prototype.prepare\u003dfunction(){if(!(0\u003d\u003d\u003dObject.keys(this.tiles).length||this.video.readyState\u003c2)){var e\u003dthis.map.painter.context,r\u003de.gl;for(var n in this.boundsBuffer||(this.boundsBuffer\u003de.createVertexBuffer(this._boundsArray,P.members)),this.boundsSegments||(this.boundsSegments\u003dt.SegmentVector.simpleSegment(0,0,4,2)),this.texture?this.video.paused||(this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE),r.texSubImage2D(r.TEXTURE_2D,0,0,0,r.RGBA,r.UNSIGNED_BYTE,this.video)):(this.texture\u003dnew t.Texture(e,this.video,r.RGBA),this.texture.bind(r.LINEAR,r.CLAMP_TO_EDGE)),this.tiles){var i\u003dthis.tiles[n];\"loaded\"!\u003d\u003di.state\u0026\u0026(i.state\u003d\"loaded\",i.texture\u003dthis.texture)}}},r.prototype.serialize\u003dfunction(){return{type:\"video\",urls:this.urls,coordinates:this.coordinates}},r.prototype.hasTransition\u003dfunction(){return this.video\u0026\u0026!this.video.paused},r}(I),z\u003dfunction(e){function r(r,n,i,a){e.call(this,r,n,i,a),n.coordinates?Array.isArray(n.coordinates)\u0026\u00264\u003d\u003d\u003dn.coordinates.length\u0026\u0026!n.coordinates.some((function(t){return!Array.isArray(t)||2!\u003d\u003dt.length||t.some((function(t){return\"number\"!\u003dtypeof t}))}))||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,\u0027\"coordinates\" property must be an array of 4 longitude/latitude array pairs\u0027))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,\u0027missing required property \"coordinates\"\u0027))),n.animate\u0026\u0026\"boolean\"!\u003dtypeof n.animate\u0026\u0026this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,\u0027optional \"animate\" property must be a boolean value\u0027))),n.canvas?\"string\"\u003d\u003dtypeof n.canvas||n.canvas instanceof t.window.HTMLCanvasElement||this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,\u0027\"canvas\" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance\u0027))):this.fire(new t.ErrorEvent(new t.ValidationError(\"sources.\"+r,null,\u0027missing required property \"canvas\"\u0027))),this.options\u003dn,this.animate\u003dvoid 0\u003d\u003d\u003dn.animate||n.animate}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.load\u003dfunction(){this._loaded\u003d!0,this.canvas||(this.canvas\u003dthis.options.canvas instanceof t.window.HTMLCanvasElement?this.options.canvas:t.window.document.getElementById(this.options.canvas)),this.width\u003dthis.canvas.width,this.height\u003dthis.canvas.height,this._hasInvalidDimensions()?this.fire(new t.ErrorEvent(new Error(\"Canvas dimensions cannot be less than or equal to zero.\"))):(this.play\u003dfunction(){this._playing\u003d!0,this.map.triggerRepaint()},this.pause\u003dfunction(){this._playing\u0026\u0026(this.prepare(),this._playing\u003d!1)},this._finishLoading())},r.prototype.getCanvas\u003dfunction(){return this.canvas},r.prototype.onAdd\u003dfunction(t){this.map\u003dt,this.load(),this.canvas\u0026\u0026this.animate\u0026\u0026this.play()},r.prototype.onRemove\u003dfunction(){this.pause()},r.prototype.prepare\u003dfunction(){var e\u003d!1;if(this.canvas.width!\u003d\u003dthis.width\u0026\u0026(this.width\u003dthis.canvas.width,e\u003d!0),this.canvas.height!\u003d\u003dthis.height\u0026\u0026(this.height\u003dthis.canvas.height,e\u003d!0),!this._hasInvalidDimensions()\u0026\u00260!\u003d\u003dObject.keys(this.tiles).length){var r\u003dthis.map.painter.context,n\u003dr.gl;for(var i in this.boundsBuffer||(this.boundsBuffer\u003dr.createVertexBuffer(this._boundsArray,P.members)),this.boundsSegments||(this.boundsSegments\u003dt.SegmentVector.simpleSegment(0,0,4,2)),this.texture?(e||this._playing)\u0026\u0026this.texture.update(this.canvas,{premultiply:!0}):this.texture\u003dnew t.Texture(r,this.canvas,n.RGBA,{premultiply:!0}),this.tiles){var a\u003dthis.tiles[i];\"loaded\"!\u003d\u003da.state\u0026\u0026(a.state\u003d\"loaded\",a.texture\u003dthis.texture)}}},r.prototype.serialize\u003dfunction(){return{type:\"canvas\",coordinates:this.coordinates}},r.prototype.hasTransition\u003dfunction(){return this._playing},r.prototype._hasInvalidDimensions\u003dfunction(){for(var t\u003d0,e\u003d[this.canvas.width,this.canvas.height];t\u003ce.length;t+\u003d1){var r\u003de[t];if(isNaN(r)||r\u003c\u003d0)return!0}return!1},r}(I),D\u003d{vector:S,raster:E,\"raster-dem\":L,geojson:C,video:O,image:I,canvas:z};function R(e,r){var n\u003dt.identity([]);return t.translate(n,n,[1,1,0]),t.scale(n,n,[.5*e.width,.5*e.height,1]),t.multiply(n,n,e.calculatePosMatrix(r.toUnwrapped()))}function F(t,e,r,n,i,a){var o\u003dfunction(t,e,r){if(t)for(var n\u003d0,i\u003dt;n\u003ci.length;n+\u003d1){var a\u003de[i[n]];if(a\u0026\u0026a.source\u003d\u003d\u003dr\u0026\u0026\"fill-extrusion\"\u003d\u003d\u003da.type)return!0}else for(var o in e){var s\u003de[o];if(s.source\u003d\u003d\u003dr\u0026\u0026\"fill-extrusion\"\u003d\u003d\u003ds.type)return!0}return!1}(i\u0026\u0026i.layers,e,t.id),s\u003da.maxPitchScaleFactor(),l\u003dt.tilesIn(n,s,o);l.sort(B);for(var c\u003d[],u\u003d0,f\u003dl;u\u003cf.length;u+\u003d1){var h\u003df[u];c.push({wrappedTileID:h.tileID.wrapped().key,queryResults:h.tile.queryRenderedFeatures(e,r,t._state,h.queryGeometry,h.cameraQueryGeometry,h.scale,i,a,s,R(t.transform,h.tileID))})}var p\u003dfunction(t){for(var e\u003d{},r\u003d{},n\u003d0,i\u003dt;n\u003ci.length;n+\u003d1){var a\u003di[n],o\u003da.queryResults,s\u003da.wrappedTileID,l\u003dr[s]\u003dr[s]||{};for(var c in o)for(var u\u003do[c],f\u003dl[c]\u003dl[c]||{},h\u003de[c]\u003de[c]||[],p\u003d0,d\u003du;p\u003cd.length;p+\u003d1){var m\u003dd[p];f[m.featureIndex]||(f[m.featureIndex]\u003d!0,h.push(m))}}return e}(c);for(var d in p)p[d].forEach((function(e){var r\u003de.feature,n\u003dt.getFeatureState(r.layer[\"source-layer\"],r.id);r.source\u003dr.layer.source,r.layer[\"source-layer\"]\u0026\u0026(r.sourceLayer\u003dr.layer[\"source-layer\"]),r.state\u003dn}));return p}function B(t,e){var r\u003dt.tileID,n\u003de.tileID;return r.overscaledZ-n.overscaledZ||r.canonical.y-n.canonical.y||r.wrap-n.wrap||r.canonical.x-n.canonical.x}var N\u003dfunction(t,e){this.max\u003dt,this.onRemove\u003de,this.reset()};N.prototype.reset\u003dfunction(){for(var t in this.data)for(var e\u003d0,r\u003dthis.data[t];e\u003cr.length;e+\u003d1){var n\u003dr[e];n.timeout\u0026\u0026clearTimeout(n.timeout),this.onRemove(n.value)}return this.data\u003d{},this.order\u003d[],this},N.prototype.add\u003dfunction(t,e,r){var n\u003dthis,i\u003dt.wrapped().key;void 0\u003d\u003d\u003dthis.data[i]\u0026\u0026(this.data[i]\u003d[]);var a\u003d{value:e,timeout:void 0};if(void 0!\u003d\u003dr\u0026\u0026(a.timeout\u003dsetTimeout((function(){n.remove(t,a)}),r)),this.data[i].push(a),this.order.push(i),this.order.length\u003ethis.max){var o\u003dthis._getAndRemoveByKey(this.order[0]);o\u0026\u0026this.onRemove(o)}return this},N.prototype.has\u003dfunction(t){return t.wrapped().key in this.data},N.prototype.getAndRemove\u003dfunction(t){return this.has(t)?this._getAndRemoveByKey(t.wrapped().key):null},N.prototype._getAndRemoveByKey\u003dfunction(t){var e\u003dthis.data[t].shift();return e.timeout\u0026\u0026clearTimeout(e.timeout),0\u003d\u003d\u003dthis.data[t].length\u0026\u0026delete this.data[t],this.order.splice(this.order.indexOf(t),1),e.value},N.prototype.getByKey\u003dfunction(t){var e\u003dthis.data[t];return e?e[0].value:null},N.prototype.get\u003dfunction(t){return this.has(t)?this.data[t.wrapped().key][0].value:null},N.prototype.remove\u003dfunction(t,e){if(!this.has(t))return this;var r\u003dt.wrapped().key,n\u003dvoid 0\u003d\u003d\u003de?0:this.data[r].indexOf(e),i\u003dthis.data[r][n];return this.data[r].splice(n,1),i.timeout\u0026\u0026clearTimeout(i.timeout),0\u003d\u003d\u003dthis.data[r].length\u0026\u0026delete this.data[r],this.onRemove(i.value),this.order.splice(this.order.indexOf(r),1),this},N.prototype.setMaxSize\u003dfunction(t){for(this.max\u003dt;this.order.length\u003ethis.max;){var e\u003dthis._getAndRemoveByKey(this.order[0]);e\u0026\u0026this.onRemove(e)}return this},N.prototype.filter\u003dfunction(t){var e\u003d[];for(var r in this.data)for(var n\u003d0,i\u003dthis.data[r];n\u003ci.length;n+\u003d1){var a\u003di[n];t(a.value)||e.push(a)}for(var o\u003d0,s\u003de;o\u003cs.length;o+\u003d1){var l\u003ds[o];this.remove(l.value.tileID,l)}};var j\u003dfunction(t,e,r){this.context\u003dt;var n\u003dt.gl;this.buffer\u003dn.createBuffer(),this.dynamicDraw\u003dBoolean(r),this.context.unbindVAO(),t.bindElementBuffer.set(this.buffer),n.bufferData(n.ELEMENT_ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?n.DYNAMIC_DRAW:n.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};j.prototype.bind\u003dfunction(){this.context.bindElementBuffer.set(this.buffer)},j.prototype.updateData\u003dfunction(t){var e\u003dthis.context.gl;this.context.unbindVAO(),this.bind(),e.bufferSubData(e.ELEMENT_ARRAY_BUFFER,0,t.arrayBuffer)},j.prototype.destroy\u003dfunction(){var t\u003dthis.context.gl;this.buffer\u0026\u0026(t.deleteBuffer(this.buffer),delete this.buffer)};var U\u003d{Int8:\"BYTE\",Uint8:\"UNSIGNED_BYTE\",Int16:\"SHORT\",Uint16:\"UNSIGNED_SHORT\",Int32:\"INT\",Uint32:\"UNSIGNED_INT\",Float32:\"FLOAT\"},V\u003dfunction(t,e,r,n){this.length\u003de.length,this.attributes\u003dr,this.itemSize\u003de.bytesPerElement,this.dynamicDraw\u003dn,this.context\u003dt;var i\u003dt.gl;this.buffer\u003di.createBuffer(),t.bindVertexBuffer.set(this.buffer),i.bufferData(i.ARRAY_BUFFER,e.arrayBuffer,this.dynamicDraw?i.DYNAMIC_DRAW:i.STATIC_DRAW),this.dynamicDraw||delete e.arrayBuffer};V.prototype.bind\u003dfunction(){this.context.bindVertexBuffer.set(this.buffer)},V.prototype.updateData\u003dfunction(t){var e\u003dthis.context.gl;this.bind(),e.bufferSubData(e.ARRAY_BUFFER,0,t.arrayBuffer)},V.prototype.enableAttributes\u003dfunction(t,e){for(var r\u003d0;r\u003cthis.attributes.length;r++){var n\u003dthis.attributes[r],i\u003de.attributes[n.name];void 0!\u003d\u003di\u0026\u0026t.enableVertexAttribArray(i)}},V.prototype.setVertexAttribPointers\u003dfunction(t,e,r){for(var n\u003d0;n\u003cthis.attributes.length;n++){var i\u003dthis.attributes[n],a\u003de.attributes[i.name];void 0!\u003d\u003da\u0026\u0026t.vertexAttribPointer(a,i.components,t[U[i.type]],!1,this.itemSize,i.offset+this.itemSize*(r||0))}},V.prototype.destroy\u003dfunction(){var t\u003dthis.context.gl;this.buffer\u0026\u0026(t.deleteBuffer(this.buffer),delete this.buffer)};var q\u003dfunction(t){this.gl\u003dt.gl,this.default\u003dthis.getDefault(),this.current\u003dthis.default,this.dirty\u003d!1};q.prototype.get\u003dfunction(){return this.current},q.prototype.set\u003dfunction(t){},q.prototype.getDefault\u003dfunction(){return this.default},q.prototype.setDefault\u003dfunction(){this.set(this.default)};var H\u003dfunction(e){function r(){e.apply(this,arguments)}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.getDefault\u003dfunction(){return t.Color.transparent},r.prototype.set\u003dfunction(t){var e\u003dthis.current;(t.r!\u003d\u003de.r||t.g!\u003d\u003de.g||t.b!\u003d\u003de.b||t.a!\u003d\u003de.a||this.dirty)\u0026\u0026(this.gl.clearColor(t.r,t.g,t.b,t.a),this.current\u003dt,this.dirty\u003d!1)},r}(q),G\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return 1},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.clearDepth(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),Y\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return 0},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.clearStencil(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),W\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return[!0,!0,!0,!0]},e.prototype.set\u003dfunction(t){var e\u003dthis.current;(t[0]!\u003d\u003de[0]||t[1]!\u003d\u003de[1]||t[2]!\u003d\u003de[2]||t[3]!\u003d\u003de[3]||this.dirty)\u0026\u0026(this.gl.colorMask(t[0],t[1],t[2],t[3]),this.current\u003dt,this.dirty\u003d!1)},e}(q),X\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return!0},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.depthMask(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),Z\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return 255},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.stencilMask(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),J\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return{func:this.gl.ALWAYS,ref:0,mask:255}},e.prototype.set\u003dfunction(t){var e\u003dthis.current;(t.func!\u003d\u003de.func||t.ref!\u003d\u003de.ref||t.mask!\u003d\u003de.mask||this.dirty)\u0026\u0026(this.gl.stencilFunc(t.func,t.ref,t.mask),this.current\u003dt,this.dirty\u003d!1)},e}(q),K\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){var t\u003dthis.gl;return[t.KEEP,t.KEEP,t.KEEP]},e.prototype.set\u003dfunction(t){var e\u003dthis.current;(t[0]!\u003d\u003de[0]||t[1]!\u003d\u003de[1]||t[2]!\u003d\u003de[2]||this.dirty)\u0026\u0026(this.gl.stencilOp(t[0],t[1],t[2]),this.current\u003dt,this.dirty\u003d!1)},e}(q),Q\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return!1},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;t?e.enable(e.STENCIL_TEST):e.disable(e.STENCIL_TEST),this.current\u003dt,this.dirty\u003d!1}},e}(q),$\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return[0,1]},e.prototype.set\u003dfunction(t){var e\u003dthis.current;(t[0]!\u003d\u003de[0]||t[1]!\u003d\u003de[1]||this.dirty)\u0026\u0026(this.gl.depthRange(t[0],t[1]),this.current\u003dt,this.dirty\u003d!1)},e}(q),tt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return!1},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;t?e.enable(e.DEPTH_TEST):e.disable(e.DEPTH_TEST),this.current\u003dt,this.dirty\u003d!1}},e}(q),et\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return this.gl.LESS},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.depthFunc(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),rt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return!1},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;t?e.enable(e.BLEND):e.disable(e.BLEND),this.current\u003dt,this.dirty\u003d!1}},e}(q),nt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){var t\u003dthis.gl;return[t.ONE,t.ZERO]},e.prototype.set\u003dfunction(t){var e\u003dthis.current;(t[0]!\u003d\u003de[0]||t[1]!\u003d\u003de[1]||this.dirty)\u0026\u0026(this.gl.blendFunc(t[0],t[1]),this.current\u003dt,this.dirty\u003d!1)},e}(q),it\u003dfunction(e){function r(){e.apply(this,arguments)}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.getDefault\u003dfunction(){return t.Color.transparent},r.prototype.set\u003dfunction(t){var e\u003dthis.current;(t.r!\u003d\u003de.r||t.g!\u003d\u003de.g||t.b!\u003d\u003de.b||t.a!\u003d\u003de.a||this.dirty)\u0026\u0026(this.gl.blendColor(t.r,t.g,t.b,t.a),this.current\u003dt,this.dirty\u003d!1)},r}(q),at\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return this.gl.FUNC_ADD},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.blendEquation(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),ot\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return!1},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;t?e.enable(e.CULL_FACE):e.disable(e.CULL_FACE),this.current\u003dt,this.dirty\u003d!1}},e}(q),st\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return this.gl.BACK},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.cullFace(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),lt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return this.gl.CCW},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.frontFace(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),ct\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.useProgram(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),ut\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return this.gl.TEXTURE0},e.prototype.set\u003dfunction(t){(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.gl.activeTexture(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),ft\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){var t\u003dthis.gl;return[0,0,t.drawingBufferWidth,t.drawingBufferHeight]},e.prototype.set\u003dfunction(t){var e\u003dthis.current;(t[0]!\u003d\u003de[0]||t[1]!\u003d\u003de[1]||t[2]!\u003d\u003de[2]||t[3]!\u003d\u003de[3]||this.dirty)\u0026\u0026(this.gl.viewport(t[0],t[1],t[2],t[3]),this.current\u003dt,this.dirty\u003d!1)},e}(q),ht\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;e.bindFramebuffer(e.FRAMEBUFFER,t),this.current\u003dt,this.dirty\u003d!1}},e}(q),pt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;e.bindRenderbuffer(e.RENDERBUFFER,t),this.current\u003dt,this.dirty\u003d!1}},e}(q),dt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;e.bindTexture(e.TEXTURE_2D,t),this.current\u003dt,this.dirty\u003d!1}},e}(q),mt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;e.bindBuffer(e.ARRAY_BUFFER,t),this.current\u003dt,this.dirty\u003d!1}},e}(q),gt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e.prototype.set\u003dfunction(t){var e\u003dthis.gl;e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t),this.current\u003dt,this.dirty\u003d!1},e}(q),vt\u003dfunction(t){function e(e){t.call(this,e),this.vao\u003de.extVertexArrayObject}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e.prototype.set\u003dfunction(t){this.vao\u0026\u0026(t!\u003d\u003dthis.current||this.dirty)\u0026\u0026(this.vao.bindVertexArrayOES(t),this.current\u003dt,this.dirty\u003d!1)},e}(q),yt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return 4},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;e.pixelStorei(e.UNPACK_ALIGNMENT,t),this.current\u003dt,this.dirty\u003d!1}},e}(q),xt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return!1},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;e.pixelStorei(e.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t),this.current\u003dt,this.dirty\u003d!1}},e}(q),bt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return!1},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){var e\u003dthis.gl;e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,t),this.current\u003dt,this.dirty\u003d!1}},e}(q),_t\u003dfunction(t){function e(e,r){t.call(this,e),this.context\u003de,this.parent\u003dr}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.getDefault\u003dfunction(){return null},e}(q),wt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.setDirty\u003dfunction(){this.dirty\u003d!0},e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e\u003dthis.gl;e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0),this.current\u003dt,this.dirty\u003d!1}},e}(_t),Tt\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.set\u003dfunction(t){if(t!\u003d\u003dthis.current||this.dirty){this.context.bindFramebuffer.set(this.parent);var e\u003dthis.gl;e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t),this.current\u003dt,this.dirty\u003d!1}},e}(_t),kt\u003dfunction(t,e,r,n){this.context\u003dt,this.width\u003de,this.height\u003dr;var i\u003dt.gl,a\u003dthis.framebuffer\u003di.createFramebuffer();this.colorAttachment\u003dnew wt(t,a),n\u0026\u0026(this.depthAttachment\u003dnew Tt(t,a))};kt.prototype.destroy\u003dfunction(){var t\u003dthis.context.gl,e\u003dthis.colorAttachment.get();if(e\u0026\u0026t.deleteTexture(e),this.depthAttachment){var r\u003dthis.depthAttachment.get();r\u0026\u0026t.deleteRenderbuffer(r)}t.deleteFramebuffer(this.framebuffer)};var Mt\u003dfunction(t,e,r){this.func\u003dt,this.mask\u003de,this.range\u003dr};Mt.ReadOnly\u003d!1,Mt.ReadWrite\u003d!0,Mt.disabled\u003dnew Mt(519,Mt.ReadOnly,[0,1]);var At\u003dfunction(t,e,r,n,i,a){this.test\u003dt,this.ref\u003de,this.mask\u003dr,this.fail\u003dn,this.depthFail\u003di,this.pass\u003da};At.disabled\u003dnew At({func:519,mask:0},0,0,7680,7680,7680);var St\u003dfunction(t,e,r){this.blendFunction\u003dt,this.blendColor\u003de,this.mask\u003dr};St.disabled\u003dnew St(St.Replace\u003d[1,0],t.Color.transparent,[!1,!1,!1,!1]),St.unblended\u003dnew St(St.Replace,t.Color.transparent,[!0,!0,!0,!0]),St.alphaBlended\u003dnew St([1,771],t.Color.transparent,[!0,!0,!0,!0]);var Et\u003dfunction(t,e,r){this.enable\u003dt,this.mode\u003de,this.frontFace\u003dr};Et.disabled\u003dnew Et(!1,1029,2305),Et.backCCW\u003dnew Et(!0,1029,2305);var Lt\u003dfunction(t){this.gl\u003dt,this.extVertexArrayObject\u003dthis.gl.getExtension(\"OES_vertex_array_object\"),this.clearColor\u003dnew H(this),this.clearDepth\u003dnew G(this),this.clearStencil\u003dnew Y(this),this.colorMask\u003dnew W(this),this.depthMask\u003dnew X(this),this.stencilMask\u003dnew Z(this),this.stencilFunc\u003dnew J(this),this.stencilOp\u003dnew K(this),this.stencilTest\u003dnew Q(this),this.depthRange\u003dnew $(this),this.depthTest\u003dnew tt(this),this.depthFunc\u003dnew et(this),this.blend\u003dnew rt(this),this.blendFunc\u003dnew nt(this),this.blendColor\u003dnew it(this),this.blendEquation\u003dnew at(this),this.cullFace\u003dnew ot(this),this.cullFaceSide\u003dnew st(this),this.frontFace\u003dnew lt(this),this.program\u003dnew ct(this),this.activeTexture\u003dnew ut(this),this.viewport\u003dnew ft(this),this.bindFramebuffer\u003dnew ht(this),this.bindRenderbuffer\u003dnew pt(this),this.bindTexture\u003dnew dt(this),this.bindVertexBuffer\u003dnew mt(this),this.bindElementBuffer\u003dnew gt(this),this.bindVertexArrayOES\u003dthis.extVertexArrayObject\u0026\u0026new vt(this),this.pixelStoreUnpack\u003dnew yt(this),this.pixelStoreUnpackPremultiplyAlpha\u003dnew xt(this),this.pixelStoreUnpackFlipY\u003dnew bt(this),this.extTextureFilterAnisotropic\u003dt.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\"),this.extTextureFilterAnisotropic\u0026\u0026(this.extTextureFilterAnisotropicMax\u003dt.getParameter(this.extTextureFilterAnisotropic.MAX_TEXTURE_MAX_ANISOTROPY_EXT)),this.extTextureHalfFloat\u003dt.getExtension(\"OES_texture_half_float\"),this.extTextureHalfFloat\u0026\u0026(t.getExtension(\"OES_texture_half_float_linear\"),this.extRenderToTextureHalfFloat\u003dt.getExtension(\"EXT_color_buffer_half_float\")),this.extTimerQuery\u003dt.getExtension(\"EXT_disjoint_timer_query\")};Lt.prototype.setDefault\u003dfunction(){this.unbindVAO(),this.clearColor.setDefault(),this.clearDepth.setDefault(),this.clearStencil.setDefault(),this.colorMask.setDefault(),this.depthMask.setDefault(),this.stencilMask.setDefault(),this.stencilFunc.setDefault(),this.stencilOp.setDefault(),this.stencilTest.setDefault(),this.depthRange.setDefault(),this.depthTest.setDefault(),this.depthFunc.setDefault(),this.blend.setDefault(),this.blendFunc.setDefault(),this.blendColor.setDefault(),this.blendEquation.setDefault(),this.cullFace.setDefault(),this.cullFaceSide.setDefault(),this.frontFace.setDefault(),this.program.setDefault(),this.activeTexture.setDefault(),this.bindFramebuffer.setDefault(),this.pixelStoreUnpack.setDefault(),this.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.pixelStoreUnpackFlipY.setDefault()},Lt.prototype.setDirty\u003dfunction(){this.clearColor.dirty\u003d!0,this.clearDepth.dirty\u003d!0,this.clearStencil.dirty\u003d!0,this.colorMask.dirty\u003d!0,this.depthMask.dirty\u003d!0,this.stencilMask.dirty\u003d!0,this.stencilFunc.dirty\u003d!0,this.stencilOp.dirty\u003d!0,this.stencilTest.dirty\u003d!0,this.depthRange.dirty\u003d!0,this.depthTest.dirty\u003d!0,this.depthFunc.dirty\u003d!0,this.blend.dirty\u003d!0,this.blendFunc.dirty\u003d!0,this.blendColor.dirty\u003d!0,this.blendEquation.dirty\u003d!0,this.cullFace.dirty\u003d!0,this.cullFaceSide.dirty\u003d!0,this.frontFace.dirty\u003d!0,this.program.dirty\u003d!0,this.activeTexture.dirty\u003d!0,this.viewport.dirty\u003d!0,this.bindFramebuffer.dirty\u003d!0,this.bindRenderbuffer.dirty\u003d!0,this.bindTexture.dirty\u003d!0,this.bindVertexBuffer.dirty\u003d!0,this.bindElementBuffer.dirty\u003d!0,this.extVertexArrayObject\u0026\u0026(this.bindVertexArrayOES.dirty\u003d!0),this.pixelStoreUnpack.dirty\u003d!0,this.pixelStoreUnpackPremultiplyAlpha.dirty\u003d!0,this.pixelStoreUnpackFlipY.dirty\u003d!0},Lt.prototype.createIndexBuffer\u003dfunction(t,e){return new j(this,t,e)},Lt.prototype.createVertexBuffer\u003dfunction(t,e,r){return new V(this,t,e,r)},Lt.prototype.createRenderbuffer\u003dfunction(t,e,r){var n\u003dthis.gl,i\u003dn.createRenderbuffer();return this.bindRenderbuffer.set(i),n.renderbufferStorage(n.RENDERBUFFER,t,e,r),this.bindRenderbuffer.set(null),i},Lt.prototype.createFramebuffer\u003dfunction(t,e,r){return new kt(this,t,e,r)},Lt.prototype.clear\u003dfunction(t){var e\u003dt.color,r\u003dt.depth,n\u003dthis.gl,i\u003d0;e\u0026\u0026(i|\u003dn.COLOR_BUFFER_BIT,this.clearColor.set(e),this.colorMask.set([!0,!0,!0,!0])),void 0!\u003d\u003dr\u0026\u0026(i|\u003dn.DEPTH_BUFFER_BIT,this.depthRange.set([0,1]),this.clearDepth.set(r),this.depthMask.set(!0)),n.clear(i)},Lt.prototype.setCullFace\u003dfunction(t){!1\u003d\u003d\u003dt.enable?this.cullFace.set(!1):(this.cullFace.set(!0),this.cullFaceSide.set(t.mode),this.frontFace.set(t.frontFace))},Lt.prototype.setDepthMode\u003dfunction(t){t.func!\u003d\u003dthis.gl.ALWAYS||t.mask?(this.depthTest.set(!0),this.depthFunc.set(t.func),this.depthMask.set(t.mask),this.depthRange.set(t.range)):this.depthTest.set(!1)},Lt.prototype.setStencilMode\u003dfunction(t){t.test.func!\u003d\u003dthis.gl.ALWAYS||t.mask?(this.stencilTest.set(!0),this.stencilMask.set(t.mask),this.stencilOp.set([t.fail,t.depthFail,t.pass]),this.stencilFunc.set({func:t.test.func,ref:t.ref,mask:t.test.mask})):this.stencilTest.set(!1)},Lt.prototype.setColorMode\u003dfunction(e){t.deepEqual(e.blendFunction,St.Replace)?this.blend.set(!1):(this.blend.set(!0),this.blendFunc.set(e.blendFunction),this.blendColor.set(e.blendColor)),this.colorMask.set(e.mask)},Lt.prototype.unbindVAO\u003dfunction(){this.extVertexArrayObject\u0026\u0026this.bindVertexArrayOES.set(null)};var Ct\u003dfunction(e){function r(r,n,i){var a\u003dthis;e.call(this),this.id\u003dr,this.dispatcher\u003di,this.on(\"data\",(function(t){\"source\"\u003d\u003d\u003dt.dataType\u0026\u0026\"metadata\"\u003d\u003d\u003dt.sourceDataType\u0026\u0026(a._sourceLoaded\u003d!0),a._sourceLoaded\u0026\u0026!a._paused\u0026\u0026\"source\"\u003d\u003d\u003dt.dataType\u0026\u0026\"content\"\u003d\u003d\u003dt.sourceDataType\u0026\u0026(a.reload(),a.transform\u0026\u0026a.update(a.transform))})),this.on(\"error\",(function(){a._sourceErrored\u003d!0})),this._source\u003dfunction(e,r,n,i){var a\u003dnew D[r.type](e,r,n,i);if(a.id!\u003d\u003de)throw new Error(\"Expected Source id to be \"+e+\" instead of \"+a.id);return t.bindAll([\"load\",\"abort\",\"unload\",\"serialize\",\"prepare\"],a),a}(r,n,i,this),this._tiles\u003d{},this._cache\u003dnew N(0,this._unloadTile.bind(this)),this._timers\u003d{},this._cacheTimers\u003d{},this._maxTileCacheSize\u003dnull,this._loadedParentTiles\u003d{},this._coveredTiles\u003d{},this._state\u003dnew t.SourceFeatureState}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.onAdd\u003dfunction(t){this.map\u003dt,this._maxTileCacheSize\u003dt?t._maxTileCacheSize:null,this._source\u0026\u0026this._source.onAdd\u0026\u0026this._source.onAdd(t)},r.prototype.onRemove\u003dfunction(t){this._source\u0026\u0026this._source.onRemove\u0026\u0026this._source.onRemove(t)},r.prototype.loaded\u003dfunction(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;if(!this._source.loaded())return!1;for(var t in this._tiles){var e\u003dthis._tiles[t];if(\"loaded\"!\u003d\u003de.state\u0026\u0026\"errored\"!\u003d\u003de.state)return!1}return!0},r.prototype.getSource\u003dfunction(){return this._source},r.prototype.pause\u003dfunction(){this._paused\u003d!0},r.prototype.resume\u003dfunction(){if(this._paused){var t\u003dthis._shouldReloadOnResume;this._paused\u003d!1,this._shouldReloadOnResume\u003d!1,t\u0026\u0026this.reload(),this.transform\u0026\u0026this.update(this.transform)}},r.prototype._loadTile\u003dfunction(t,e){return this._source.loadTile(t,e)},r.prototype._unloadTile\u003dfunction(t){if(this._source.unloadTile)return this._source.unloadTile(t,(function(){}))},r.prototype._abortTile\u003dfunction(t){if(this._source.abortTile)return this._source.abortTile(t,(function(){}))},r.prototype.serialize\u003dfunction(){return this._source.serialize()},r.prototype.prepare\u003dfunction(t){for(var e in this._source.prepare\u0026\u0026this._source.prepare(),this._state.coalesceChanges(this._tiles,this.map?this.map.painter:null),this._tiles){var r\u003dthis._tiles[e];r.upload(t),r.prepare(this.map.style.imageManager)}},r.prototype.getIds\u003dfunction(){return t.values(this._tiles).map((function(t){return t.tileID})).sort(Pt).map((function(t){return t.key}))},r.prototype.getRenderableIds\u003dfunction(e){var r\u003dthis,n\u003d[];for(var i in this._tiles)this._isIdRenderable(i,e)\u0026\u0026n.push(this._tiles[i]);return e?n.sort((function(e,n){var i\u003de.tileID,a\u003dn.tileID,o\u003dnew t.Point(i.canonical.x,i.canonical.y)._rotate(r.transform.angle),s\u003dnew t.Point(a.canonical.x,a.canonical.y)._rotate(r.transform.angle);return i.overscaledZ-a.overscaledZ||s.y-o.y||s.x-o.x})).map((function(t){return t.tileID.key})):n.map((function(t){return t.tileID})).sort(Pt).map((function(t){return t.key}))},r.prototype.hasRenderableParent\u003dfunction(t){var e\u003dthis.findLoadedParent(t,0);return!!e\u0026\u0026this._isIdRenderable(e.tileID.key)},r.prototype._isIdRenderable\u003dfunction(t,e){return this._tiles[t]\u0026\u0026this._tiles[t].hasData()\u0026\u0026!this._coveredTiles[t]\u0026\u0026(e||!this._tiles[t].holdingForFade())},r.prototype.reload\u003dfunction(){if(this._paused)this._shouldReloadOnResume\u003d!0;else for(var t in this._cache.reset(),this._tiles)\"errored\"!\u003d\u003dthis._tiles[t].state\u0026\u0026this._reloadTile(t,\"reloading\")},r.prototype._reloadTile\u003dfunction(t,e){var r\u003dthis._tiles[t];r\u0026\u0026(\"loading\"!\u003d\u003dr.state\u0026\u0026(r.state\u003de),this._loadTile(r,this._tileLoaded.bind(this,r,t,e)))},r.prototype._tileLoaded\u003dfunction(e,r,n,i){if(i)return e.state\u003d\"errored\",void(404!\u003d\u003di.status?this._source.fire(new t.ErrorEvent(i,{tile:e})):this.update(this.transform));e.timeAdded\u003dt.browser.now(),\"expired\"\u003d\u003d\u003dn\u0026\u0026(e.refreshedUponExpiration\u003d!0),this._setTileReloadTimer(r,e),\"raster-dem\"\u003d\u003d\u003dthis.getSource().type\u0026\u0026e.dem\u0026\u0026this._backfillDEM(e),this._state.initializeTileState(e,this.map?this.map.painter:null),this._source.fire(new t.Event(\"data\",{dataType:\"source\",tile:e,coord:e.tileID}))},r.prototype._backfillDEM\u003dfunction(t){for(var e\u003dthis.getRenderableIds(),r\u003d0;r\u003ce.length;r++){var n\u003de[r];if(t.neighboringTiles\u0026\u0026t.neighboringTiles[n]){var i\u003dthis.getTileByID(n);a(t,i),a(i,t)}}function a(t,e){t.needsHillshadePrepare\u003d!0;var r\u003de.tileID.canonical.x-t.tileID.canonical.x,n\u003de.tileID.canonical.y-t.tileID.canonical.y,i\u003dMath.pow(2,t.tileID.canonical.z),a\u003de.tileID.key;0\u003d\u003d\u003dr\u0026\u00260\u003d\u003d\u003dn||Math.abs(n)\u003e1||(Math.abs(r)\u003e1\u0026\u0026(1\u003d\u003d\u003dMath.abs(r+i)?r+\u003di:1\u003d\u003d\u003dMath.abs(r-i)\u0026\u0026(r-\u003di)),e.dem\u0026\u0026t.dem\u0026\u0026(t.dem.backfillBorder(e.dem,r,n),t.neighboringTiles\u0026\u0026t.neighboringTiles[a]\u0026\u0026(t.neighboringTiles[a].backfilled\u003d!0)))}},r.prototype.getTile\u003dfunction(t){return this.getTileByID(t.key)},r.prototype.getTileByID\u003dfunction(t){return this._tiles[t]},r.prototype._retainLoadedChildren\u003dfunction(t,e,r,n){for(var i in this._tiles){var a\u003dthis._tiles[i];if(!(n[i]||!a.hasData()||a.tileID.overscaledZ\u003c\u003de||a.tileID.overscaledZ\u003er)){for(var o\u003da.tileID;a\u0026\u0026a.tileID.overscaledZ\u003ee+1;){var s\u003da.tileID.scaledTo(a.tileID.overscaledZ-1);(a\u003dthis._tiles[s.key])\u0026\u0026a.hasData()\u0026\u0026(o\u003ds)}for(var l\u003do;l.overscaledZ\u003ee;)if(t[(l\u003dl.scaledTo(l.overscaledZ-1)).key]){n[o.key]\u003do;break}}}},r.prototype.findLoadedParent\u003dfunction(t,e){if(t.key in this._loadedParentTiles){var r\u003dthis._loadedParentTiles[t.key];return r\u0026\u0026r.tileID.overscaledZ\u003e\u003de?r:null}for(var n\u003dt.overscaledZ-1;n\u003e\u003de;n--){var i\u003dt.scaledTo(n),a\u003dthis._getLoadedTile(i);if(a)return a}},r.prototype._getLoadedTile\u003dfunction(t){var e\u003dthis._tiles[t.key];return e\u0026\u0026e.hasData()?e:this._cache.getByKey(t.wrapped().key)},r.prototype.updateCacheSize\u003dfunction(t){var e\u003d(Math.ceil(t.width/this._source.tileSize)+1)*(Math.ceil(t.height/this._source.tileSize)+1),r\u003dMath.floor(5*e),n\u003d\"number\"\u003d\u003dtypeof this._maxTileCacheSize?Math.min(this._maxTileCacheSize,r):r;this._cache.setMaxSize(n)},r.prototype.handleWrapJump\u003dfunction(t){var e\u003d(t-(void 0\u003d\u003d\u003dthis._prevLng?t:this._prevLng))/360,r\u003dMath.round(e);if(this._prevLng\u003dt,r){var n\u003d{};for(var i in this._tiles){var a\u003dthis._tiles[i];a.tileID\u003da.tileID.unwrapTo(a.tileID.wrap+r),n[a.tileID.key]\u003da}for(var o in this._tiles\u003dn,this._timers)clearTimeout(this._timers[o]),delete this._timers[o];for(var s in this._tiles){var l\u003dthis._tiles[s];this._setTileReloadTimer(s,l)}}},r.prototype.update\u003dfunction(e){var n\u003dthis;if(this.transform\u003de,this._sourceLoaded\u0026\u0026!this._paused){var i;this.updateCacheSize(e),this.handleWrapJump(this.transform.center.lng),this._coveredTiles\u003d{},this.used?this._source.tileID?i\u003de.getVisibleUnwrappedCoordinates(this._source.tileID).map((function(e){return new t.OverscaledTileID(e.canonical.z,e.wrap,e.canonical.z,e.canonical.x,e.canonical.y)})):(i\u003de.coveringTiles({tileSize:this._source.tileSize,minzoom:this._source.minzoom,maxzoom:this._source.maxzoom,roundZoom:this._source.roundZoom,reparseOverscaled:this._source.reparseOverscaled}),this._source.hasTile\u0026\u0026(i\u003di.filter((function(t){return n._source.hasTile(t)})))):i\u003d[];var a\u003de.coveringZoomLevel(this._source),o\u003dMath.max(a-r.maxOverzooming,this._source.minzoom),s\u003dMath.max(a+r.maxUnderzooming,this._source.minzoom),l\u003dthis._updateRetainedTiles(i,a);if(It(this._source.type)){for(var c\u003d{},u\u003d{},f\u003d0,h\u003dObject.keys(l);f\u003ch.length;f+\u003d1){var p\u003dh[f],d\u003dl[p],m\u003dthis._tiles[p];if(m\u0026\u0026!(m.fadeEndTime\u0026\u0026m.fadeEndTime\u003c\u003dt.browser.now())){var g\u003dthis.findLoadedParent(d,o);g\u0026\u0026(this._addTile(g.tileID),c[g.tileID.key]\u003dg.tileID),u[p]\u003dd}}for(var v in this._retainLoadedChildren(u,a,s,l),c)l[v]||(this._coveredTiles[v]\u003d!0,l[v]\u003dc[v])}for(var y in l)this._tiles[y].clearFadeHold();for(var x\u003d0,b\u003dt.keysDifference(this._tiles,l);x\u003cb.length;x+\u003d1){var _\u003db[x],w\u003dthis._tiles[_];w.hasSymbolBuckets\u0026\u0026!w.holdingForFade()?w.setHoldDuration(this.map._fadeDuration):w.hasSymbolBuckets\u0026\u0026!w.symbolFadeFinished()||this._removeTile(_)}this._updateLoadedParentTileCache()}},r.prototype.releaseSymbolFadeTiles\u003dfunction(){for(var t in this._tiles)this._tiles[t].holdingForFade()\u0026\u0026this._removeTile(t)},r.prototype._updateRetainedTiles\u003dfunction(t,e){for(var n\u003d{},i\u003d{},a\u003dMath.max(e-r.maxOverzooming,this._source.minzoom),o\u003dMath.max(e+r.maxUnderzooming,this._source.minzoom),s\u003d{},l\u003d0,c\u003dt;l\u003cc.length;l+\u003d1){var u\u003dc[l],f\u003dthis._addTile(u);n[u.key]\u003du,f.hasData()||e\u003cthis._source.maxzoom\u0026\u0026(s[u.key]\u003du)}this._retainLoadedChildren(s,e,o,n);for(var h\u003d0,p\u003dt;h\u003cp.length;h+\u003d1){var d\u003dp[h],m\u003dthis._tiles[d.key];if(!m.hasData()){if(e+1\u003ethis._source.maxzoom){var g\u003dd.children(this._source.maxzoom)[0],v\u003dthis.getTile(g);if(v\u0026\u0026v.hasData()){n[g.key]\u003dg;continue}}else{var y\u003dd.children(this._source.maxzoom);if(n[y[0].key]\u0026\u0026n[y[1].key]\u0026\u0026n[y[2].key]\u0026\u0026n[y[3].key])continue}for(var x\u003dm.wasRequested(),b\u003dd.overscaledZ-1;b\u003e\u003da;--b){var _\u003dd.scaledTo(b);if(i[_.key])break;if(i[_.key]\u003d!0,!(m\u003dthis.getTile(_))\u0026\u0026x\u0026\u0026(m\u003dthis._addTile(_)),m\u0026\u0026(n[_.key]\u003d_,x\u003dm.wasRequested(),m.hasData()))break}}}return n},r.prototype._updateLoadedParentTileCache\u003dfunction(){for(var t in this._loadedParentTiles\u003d{},this._tiles){for(var e\u003d[],r\u003dvoid 0,n\u003dthis._tiles[t].tileID;n.overscaledZ\u003e0;){if(n.key in this._loadedParentTiles){r\u003dthis._loadedParentTiles[n.key];break}e.push(n.key);var i\u003dn.scaledTo(n.overscaledZ-1);if(r\u003dthis._getLoadedTile(i))break;n\u003di}for(var a\u003d0,o\u003de;a\u003co.length;a+\u003d1){var s\u003do[a];this._loadedParentTiles[s]\u003dr}}},r.prototype._addTile\u003dfunction(e){var r\u003dthis._tiles[e.key];if(r)return r;(r\u003dthis._cache.getAndRemove(e))\u0026\u0026(this._setTileReloadTimer(e.key,r),r.tileID\u003de,this._state.initializeTileState(r,this.map?this.map.painter:null),this._cacheTimers[e.key]\u0026\u0026(clearTimeout(this._cacheTimers[e.key]),delete this._cacheTimers[e.key],this._setTileReloadTimer(e.key,r)));var n\u003dBoolean(r);return n||(r\u003dnew t.Tile(e,this._source.tileSize*e.overscaleFactor()),this._loadTile(r,this._tileLoaded.bind(this,r,e.key,r.state))),r?(r.uses++,this._tiles[e.key]\u003dr,n||this._source.fire(new t.Event(\"dataloading\",{tile:r,coord:r.tileID,dataType:\"source\"})),r):null},r.prototype._setTileReloadTimer\u003dfunction(t,e){var r\u003dthis;t in this._timers\u0026\u0026(clearTimeout(this._timers[t]),delete this._timers[t]);var n\u003de.getExpiryTimeout();n\u0026\u0026(this._timers[t]\u003dsetTimeout((function(){r._reloadTile(t,\"expired\"),delete r._timers[t]}),n))},r.prototype._removeTile\u003dfunction(t){var e\u003dthis._tiles[t];e\u0026\u0026(e.uses--,delete this._tiles[t],this._timers[t]\u0026\u0026(clearTimeout(this._timers[t]),delete this._timers[t]),e.uses\u003e0||(e.hasData()\u0026\u0026\"reloading\"!\u003d\u003de.state?this._cache.add(e.tileID,e,e.getExpiryTimeout()):(e.aborted\u003d!0,this._abortTile(e),this._unloadTile(e))))},r.prototype.clearTiles\u003dfunction(){for(var t in this._shouldReloadOnResume\u003d!1,this._paused\u003d!1,this._tiles)this._removeTile(t);this._cache.reset()},r.prototype.tilesIn\u003dfunction(e,r,n){var i\u003dthis,a\u003d[],o\u003dthis.transform;if(!o)return a;for(var s\u003dn?o.getCameraQueryGeometry(e):e,l\u003de.map((function(t){return o.pointCoordinate(t)})),c\u003ds.map((function(t){return o.pointCoordinate(t)})),u\u003dthis.getIds(),f\u003d1/0,h\u003d1/0,p\u003d-1/0,d\u003d-1/0,m\u003d0,g\u003dc;m\u003cg.length;m+\u003d1){var v\u003dg[m];f\u003dMath.min(f,v.x),h\u003dMath.min(h,v.y),p\u003dMath.max(p,v.x),d\u003dMath.max(d,v.y)}for(var y\u003dfunction(e){var n\u003di._tiles[u[e]];if(!n.holdingForFade()){var s\u003dn.tileID,m\u003dMath.pow(2,o.zoom-n.tileID.overscaledZ),g\u003dr*n.queryPadding*t.EXTENT/n.tileSize/m,v\u003d[s.getTilePoint(new t.MercatorCoordinate(f,h)),s.getTilePoint(new t.MercatorCoordinate(p,d))];if(v[0].x-g\u003ct.EXTENT\u0026\u0026v[0].y-g\u003ct.EXTENT\u0026\u0026v[1].x+g\u003e\u003d0\u0026\u0026v[1].y+g\u003e\u003d0){var y\u003dl.map((function(t){return s.getTilePoint(t)})),x\u003dc.map((function(t){return s.getTilePoint(t)}));a.push({tile:n,tileID:s,queryGeometry:y,cameraQueryGeometry:x,scale:m})}}},x\u003d0;x\u003cu.length;x++)y(x);return a},r.prototype.getVisibleCoordinates\u003dfunction(t){for(var e\u003dthis,r\u003dthis.getRenderableIds(t).map((function(t){return e._tiles[t].tileID})),n\u003d0,i\u003dr;n\u003ci.length;n+\u003d1){var a\u003di[n];a.posMatrix\u003dthis.transform.calculatePosMatrix(a.toUnwrapped())}return r},r.prototype.hasTransition\u003dfunction(){if(this._source.hasTransition())return!0;if(It(this._source.type))for(var e in this._tiles){var r\u003dthis._tiles[e];if(void 0!\u003d\u003dr.fadeEndTime\u0026\u0026r.fadeEndTime\u003e\u003dt.browser.now())return!0}return!1},r.prototype.setFeatureState\u003dfunction(t,e,r){t\u003dt||\"_geojsonTileLayer\",this._state.updateState(t,e,r)},r.prototype.removeFeatureState\u003dfunction(t,e,r){t\u003dt||\"_geojsonTileLayer\",this._state.removeFeatureState(t,e,r)},r.prototype.getFeatureState\u003dfunction(t,e){return t\u003dt||\"_geojsonTileLayer\",this._state.getState(t,e)},r.prototype.setDependencies\u003dfunction(t,e,r){var n\u003dthis._tiles[t];n\u0026\u0026n.setDependencies(e,r)},r.prototype.reloadTilesForDependencies\u003dfunction(t,e){for(var r in this._tiles){this._tiles[r].hasDependency(t,e)\u0026\u0026this._reloadTile(r,\"reloading\")}this._cache.filter((function(r){return!r.hasDependency(t,e)}))},r}(t.Evented);function Pt(t,e){var r\u003dMath.abs(2*t.wrap)-+(t.wrap\u003c0),n\u003dMath.abs(2*e.wrap)-+(e.wrap\u003c0);return t.overscaledZ-e.overscaledZ||n-r||e.canonical.y-t.canonical.y||e.canonical.x-t.canonical.x}function It(t){return\"raster\"\u003d\u003d\u003dt||\"image\"\u003d\u003d\u003dt||\"video\"\u003d\u003d\u003dt}function Ot(){return new t.window.Worker(Zi.workerUrl)}Ct.maxOverzooming\u003d10,Ct.maxUnderzooming\u003d3;var zt\u003d\"mapboxgl_preloaded_worker_pool\",Dt\u003dfunction(){this.active\u003d{}};Dt.prototype.acquire\u003dfunction(t){if(!this.workers)for(this.workers\u003d[];this.workers.length\u003cDt.workerCount;)this.workers.push(new Ot);return this.active[t]\u003d!0,this.workers.slice()},Dt.prototype.release\u003dfunction(t){delete this.active[t],0\u003d\u003d\u003dthis.numActive()\u0026\u0026(this.workers.forEach((function(t){t.terminate()})),this.workers\u003dnull)},Dt.prototype.isPreloaded\u003dfunction(){return!!this.active[zt]},Dt.prototype.numActive\u003dfunction(){return Object.keys(this.active).length};var Rt,Ft\u003dMath.floor(t.browser.hardwareConcurrency/2);function Bt(){return Rt||(Rt\u003dnew Dt),Rt}function Nt(e,r){var n\u003d{};for(var i in e)\"ref\"!\u003d\u003di\u0026\u0026(n[i]\u003de[i]);return t.refProperties.forEach((function(t){t in r\u0026\u0026(n[t]\u003dr[t])})),n}function jt(t){t\u003dt.slice();for(var e\u003dObject.create(null),r\u003d0;r\u003ct.length;r++)e[t[r].id]\u003dt[r];for(var n\u003d0;n\u003ct.length;n++)\"ref\"in t[n]\u0026\u0026(t[n]\u003dNt(t[n],e[t[n].ref]));return t}Dt.workerCount\u003dMath.max(Math.min(Ft,6),1);var Ut\u003d{setStyle:\"setStyle\",addLayer:\"addLayer\",removeLayer:\"removeLayer\",setPaintProperty:\"setPaintProperty\",setLayoutProperty:\"setLayoutProperty\",setFilter:\"setFilter\",addSource:\"addSource\",removeSource:\"removeSource\",setGeoJSONSourceData:\"setGeoJSONSourceData\",setLayerZoomRange:\"setLayerZoomRange\",setLayerProperty:\"setLayerProperty\",setCenter:\"setCenter\",setZoom:\"setZoom\",setBearing:\"setBearing\",setPitch:\"setPitch\",setSprite:\"setSprite\",setGlyphs:\"setGlyphs\",setTransition:\"setTransition\",setLight:\"setLight\"};function Vt(t,e,r){r.push({command:Ut.addSource,args:[t,e[t]]})}function qt(t,e,r){e.push({command:Ut.removeSource,args:[t]}),r[t]\u003d!0}function Ht(t,e,r,n){qt(t,r,n),Vt(t,e,r)}function Gt(e,r,n){var i;for(i in e[n])if(e[n].hasOwnProperty(i)\u0026\u0026\"data\"!\u003d\u003di\u0026\u0026!t.deepEqual(e[n][i],r[n][i]))return!1;for(i in r[n])if(r[n].hasOwnProperty(i)\u0026\u0026\"data\"!\u003d\u003di\u0026\u0026!t.deepEqual(e[n][i],r[n][i]))return!1;return!0}function Yt(e,r,n,i,a,o){var s;for(s in r\u003dr||{},e\u003de||{})e.hasOwnProperty(s)\u0026\u0026(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}));for(s in r)r.hasOwnProperty(s)\u0026\u0026!e.hasOwnProperty(s)\u0026\u0026(t.deepEqual(e[s],r[s])||n.push({command:o,args:[i,s,r[s],a]}))}function Wt(t){return t.id}function Xt(t,e){return t[e.id]\u003de,t}function Zt(e,r){if(!e)return[{command:Ut.setStyle,args:[r]}];var n\u003d[];try{if(!t.deepEqual(e.version,r.version))return[{command:Ut.setStyle,args:[r]}];t.deepEqual(e.center,r.center)||n.push({command:Ut.setCenter,args:[r.center]}),t.deepEqual(e.zoom,r.zoom)||n.push({command:Ut.setZoom,args:[r.zoom]}),t.deepEqual(e.bearing,r.bearing)||n.push({command:Ut.setBearing,args:[r.bearing]}),t.deepEqual(e.pitch,r.pitch)||n.push({command:Ut.setPitch,args:[r.pitch]}),t.deepEqual(e.sprite,r.sprite)||n.push({command:Ut.setSprite,args:[r.sprite]}),t.deepEqual(e.glyphs,r.glyphs)||n.push({command:Ut.setGlyphs,args:[r.glyphs]}),t.deepEqual(e.transition,r.transition)||n.push({command:Ut.setTransition,args:[r.transition]}),t.deepEqual(e.light,r.light)||n.push({command:Ut.setLight,args:[r.light]});var i\u003d{},a\u003d[];!function(e,r,n,i){var a;for(a in r\u003dr||{},e\u003de||{})e.hasOwnProperty(a)\u0026\u0026(r.hasOwnProperty(a)||qt(a,n,i));for(a in r)r.hasOwnProperty(a)\u0026\u0026(e.hasOwnProperty(a)?t.deepEqual(e[a],r[a])||(\"geojson\"\u003d\u003d\u003de[a].type\u0026\u0026\"geojson\"\u003d\u003d\u003dr[a].type\u0026\u0026Gt(e,r,a)?n.push({command:Ut.setGeoJSONSourceData,args:[a,r[a].data]}):Ht(a,r,n,i)):Vt(a,r,n))}(e.sources,r.sources,a,i);var o\u003d[];e.layers\u0026\u0026e.layers.forEach((function(t){i[t.source]?n.push({command:Ut.removeLayer,args:[t.id]}):o.push(t)})),n\u003dn.concat(a),function(e,r,n){r\u003dr||[];var i,a,o,s,l,c,u,f\u003d(e\u003de||[]).map(Wt),h\u003dr.map(Wt),p\u003de.reduce(Xt,{}),d\u003dr.reduce(Xt,{}),m\u003df.slice(),g\u003dObject.create(null);for(i\u003d0,a\u003d0;i\u003cf.length;i++)o\u003df[i],d.hasOwnProperty(o)?a++:(n.push({command:Ut.removeLayer,args:[o]}),m.splice(m.indexOf(o,a),1));for(i\u003d0,a\u003d0;i\u003ch.length;i++)o\u003dh[h.length-1-i],m[m.length-1-i]!\u003d\u003do\u0026\u0026(p.hasOwnProperty(o)?(n.push({command:Ut.removeLayer,args:[o]}),m.splice(m.lastIndexOf(o,m.length-a),1)):a++,c\u003dm[m.length-i],n.push({command:Ut.addLayer,args:[d[o],c]}),m.splice(m.length-i,0,o),g[o]\u003d!0);for(i\u003d0;i\u003ch.length;i++)if(s\u003dp[o\u003dh[i]],l\u003dd[o],!g[o]\u0026\u0026!t.deepEqual(s,l))if(t.deepEqual(s.source,l.source)\u0026\u0026t.deepEqual(s[\"source-layer\"],l[\"source-layer\"])\u0026\u0026t.deepEqual(s.type,l.type)){for(u in Yt(s.layout,l.layout,n,o,null,Ut.setLayoutProperty),Yt(s.paint,l.paint,n,o,null,Ut.setPaintProperty),t.deepEqual(s.filter,l.filter)||n.push({command:Ut.setFilter,args:[o,l.filter]}),t.deepEqual(s.minzoom,l.minzoom)\u0026\u0026t.deepEqual(s.maxzoom,l.maxzoom)||n.push({command:Ut.setLayerZoomRange,args:[o,l.minzoom,l.maxzoom]}),s)s.hasOwnProperty(u)\u0026\u0026\"layout\"!\u003d\u003du\u0026\u0026\"paint\"!\u003d\u003du\u0026\u0026\"filter\"!\u003d\u003du\u0026\u0026\"metadata\"!\u003d\u003du\u0026\u0026\"minzoom\"!\u003d\u003du\u0026\u0026\"maxzoom\"!\u003d\u003du\u0026\u0026(0\u003d\u003d\u003du.indexOf(\"paint.\")?Yt(s[u],l[u],n,o,u.slice(6),Ut.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Ut.setLayerProperty,args:[o,u,l[u]]}));for(u in l)l.hasOwnProperty(u)\u0026\u0026!s.hasOwnProperty(u)\u0026\u0026\"layout\"!\u003d\u003du\u0026\u0026\"paint\"!\u003d\u003du\u0026\u0026\"filter\"!\u003d\u003du\u0026\u0026\"metadata\"!\u003d\u003du\u0026\u0026\"minzoom\"!\u003d\u003du\u0026\u0026\"maxzoom\"!\u003d\u003du\u0026\u0026(0\u003d\u003d\u003du.indexOf(\"paint.\")?Yt(s[u],l[u],n,o,u.slice(6),Ut.setPaintProperty):t.deepEqual(s[u],l[u])||n.push({command:Ut.setLayerProperty,args:[o,u,l[u]]}))}else n.push({command:Ut.removeLayer,args:[o]}),c\u003dm[m.lastIndexOf(o)+1],n.push({command:Ut.addLayer,args:[l,c]})}(o,r.layers,n)}catch(t){console.warn(\"Unable to compute style diff:\",t),n\u003d[{command:Ut.setStyle,args:[r]}]}return n}var Jt\u003dfunction(t,e){this.reset(t,e)};Jt.prototype.reset\u003dfunction(t,e){this.points\u003dt||[],this._distances\u003d[0];for(var r\u003d1;r\u003cthis.points.length;r++)this._distances[r]\u003dthis._distances[r-1]+this.points[r].dist(this.points[r-1]);this.length\u003dthis._distances[this._distances.length-1],this.padding\u003dMath.min(e||0,.5*this.length),this.paddedLength\u003dthis.length-2*this.padding},Jt.prototype.lerp\u003dfunction(e){if(1\u003d\u003d\u003dthis.points.length)return this.points[0];e\u003dt.clamp(e,0,1);for(var r\u003d1,n\u003dthis._distances[r],i\u003de*this.paddedLength+this.padding;n\u003ci\u0026\u0026r\u003cthis._distances.length;)n\u003dthis._distances[++r];var a\u003dr-1,o\u003dthis._distances[a],s\u003dn-o,l\u003ds\u003e0?(i-o)/s:0;return this.points[a].mult(1-l).add(this.points[r].mult(l))};var Kt\u003dfunction(t,e,r){var n\u003dthis.boxCells\u003d[],i\u003dthis.circleCells\u003d[];this.xCellCount\u003dMath.ceil(t/r),this.yCellCount\u003dMath.ceil(e/r);for(var a\u003d0;a\u003cthis.xCellCount*this.yCellCount;a++)n.push([]),i.push([]);this.circleKeys\u003d[],this.boxKeys\u003d[],this.bboxes\u003d[],this.circles\u003d[],this.width\u003dt,this.height\u003de,this.xScale\u003dthis.xCellCount/t,this.yScale\u003dthis.yCellCount/e,this.boxUid\u003d0,this.circleUid\u003d0};function Qt(e,r,n,i,a){var o\u003dt.create();return r?(t.scale(o,o,[1/a,1/a,1]),n||t.rotateZ(o,o,i.angle)):t.multiply(o,i.labelPlaneMatrix,e),o}function $t(e,r,n,i,a){if(r){var o\u003dt.clone(e);return t.scale(o,o,[a,a,1]),n||t.rotateZ(o,o,-i.angle),o}return i.glCoordMatrix}function te(e,r){var n\u003d[e.x,e.y,0,1];fe(n,n,r);var i\u003dn[3];return{point:new t.Point(n[0]/i,n[1]/i),signedDistanceFromCamera:i}}function ee(t,e){return.5+t/e*.5}function re(t,e){var r\u003dt[0]/t[3],n\u003dt[1]/t[3];return r\u003e\u003d-e[0]\u0026\u0026r\u003c\u003de[0]\u0026\u0026n\u003e\u003d-e[1]\u0026\u0026n\u003c\u003de[1]}function ne(e,r,n,i,a,o,s,l){var c\u003di?e.textSizeData:e.iconSizeData,u\u003dt.evaluateSizeForZoom(c,n.transform.zoom),f\u003d[256/n.width*2+1,256/n.height*2+1],h\u003di?e.text.dynamicLayoutVertexArray:e.icon.dynamicLayoutVertexArray;h.clear();for(var p\u003de.lineVertexArray,d\u003di?e.text.placedSymbolArray:e.icon.placedSymbolArray,m\u003dn.transform.width/n.transform.height,g\u003d!1,v\u003d0;v\u003cd.length;v++){var y\u003dd.get(v);if(y.hidden||y.writingMode\u003d\u003d\u003dt.WritingMode.vertical\u0026\u0026!g)ue(y.numGlyphs,h);else{g\u003d!1;var x\u003d[y.anchorX,y.anchorY,0,1];if(t.transformMat4(x,x,r),re(x,f)){var b\u003dx[3],_\u003dee(n.transform.cameraToCenterDistance,b),w\u003dt.evaluateSizeForFeature(c,u,y),T\u003ds?w/_:w*_,k\u003dnew t.Point(y.anchorX,y.anchorY),M\u003dte(k,a).point,A\u003d{},S\u003doe(y,T,!1,l,r,a,o,e.glyphOffsetArray,p,h,M,k,A,m);g\u003dS.useVertical,(S.notEnoughRoom||g||S.needsFlipping\u0026\u0026oe(y,T,!0,l,r,a,o,e.glyphOffsetArray,p,h,M,k,A,m).notEnoughRoom)\u0026\u0026ue(y.numGlyphs,h)}else ue(y.numGlyphs,h)}}i?e.text.dynamicLayoutVertexBuffer.updateData(h):e.icon.dynamicLayoutVertexBuffer.updateData(h)}function ie(t,e,r,n,i,a,o,s,l,c,u){var f\u003ds.glyphStartIndex+s.numGlyphs,h\u003ds.lineStartIndex,p\u003ds.lineStartIndex+s.lineLength,d\u003de.getoffsetX(s.glyphStartIndex),m\u003de.getoffsetX(f-1),g\u003dle(t*d,r,n,i,a,o,s.segment,h,p,l,c,u);if(!g)return null;var v\u003dle(t*m,r,n,i,a,o,s.segment,h,p,l,c,u);return v?{first:g,last:v}:null}function ae(e,r,n,i){if(e\u003d\u003d\u003dt.WritingMode.horizontal\u0026\u0026Math.abs(n.y-r.y)\u003eMath.abs(n.x-r.x)*i)return{useVertical:!0};return(e\u003d\u003d\u003dt.WritingMode.vertical?r.y\u003cn.y:r.x\u003en.x)?{needsFlipping:!0}:null}function oe(e,r,n,i,a,o,s,l,c,u,f,h,p,d){var m,g\u003dr/24,v\u003de.lineOffsetX*g,y\u003de.lineOffsetY*g;if(e.numGlyphs\u003e1){var x\u003de.glyphStartIndex+e.numGlyphs,b\u003de.lineStartIndex,_\u003de.lineStartIndex+e.lineLength,w\u003die(g,l,v,y,n,f,h,e,c,o,p);if(!w)return{notEnoughRoom:!0};var T\u003dte(w.first.point,s).point,k\u003dte(w.last.point,s).point;if(i\u0026\u0026!n){var M\u003dae(e.writingMode,T,k,d);if(M)return M}m\u003d[w.first];for(var A\u003de.glyphStartIndex+1;A\u003cx-1;A++)m.push(le(g*l.getoffsetX(A),v,y,n,f,h,e.segment,b,_,c,o,p));m.push(w.last)}else{if(i\u0026\u0026!n){var S\u003dte(h,a).point,E\u003de.lineStartIndex+e.segment+1,L\u003dnew t.Point(c.getx(E),c.gety(E)),C\u003dte(L,a),P\u003dC.signedDistanceFromCamera\u003e0?C.point:se(h,L,S,1,a),I\u003dae(e.writingMode,S,P,d);if(I)return I}var O\u003dle(g*l.getoffsetX(e.glyphStartIndex),v,y,n,f,h,e.segment,e.lineStartIndex,e.lineStartIndex+e.lineLength,c,o,p);if(!O)return{notEnoughRoom:!0};m\u003d[O]}for(var z\u003d0,D\u003dm;z\u003cD.length;z+\u003d1){var R\u003dD[z];t.addDynamicAttributes(u,R.point,R.angle)}return{}}function se(t,e,r,n,i){var a\u003dte(t.add(t.sub(e)._unit()),i).point,o\u003dr.sub(a);return r.add(o._mult(n/o.mag()))}function le(e,r,n,i,a,o,s,l,c,u,f,h){var p\u003di?e-r:e+r,d\u003dp\u003e0?1:-1,m\u003d0;i\u0026\u0026(d*\u003d-1,m\u003dMath.PI),d\u003c0\u0026\u0026(m+\u003dMath.PI);for(var g\u003dd\u003e0?l+s:l+s+1,v\u003da,y\u003da,x\u003d0,b\u003d0,_\u003dMath.abs(p),w\u003d[];x+b\u003c\u003d_;){if((g+\u003dd)\u003cl||g\u003e\u003dc)return null;if(y\u003dv,w.push(v),void 0\u003d\u003d\u003d(v\u003dh[g])){var T\u003dnew t.Point(u.getx(g),u.gety(g)),k\u003dte(T,f);if(k.signedDistanceFromCamera\u003e0)v\u003dh[g]\u003dk.point;else{var M\u003dg-d;v\u003dse(0\u003d\u003d\u003dx?o:new t.Point(u.getx(M),u.gety(M)),T,y,_-x+1,f)}}x+\u003db,b\u003dy.dist(v)}var A\u003d(_-x)/b,S\u003dv.sub(y),E\u003dS.mult(A)._add(y);E._add(S._unit()._perp()._mult(n*d));var L\u003dm+Math.atan2(v.y-y.y,v.x-y.x);return w.push(E),{point:E,angle:L,path:w}}Kt.prototype.keysLength\u003dfunction(){return this.boxKeys.length+this.circleKeys.length},Kt.prototype.insert\u003dfunction(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertBoxCell,this.boxUid++),this.boxKeys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},Kt.prototype.insertCircle\u003dfunction(t,e,r,n){this._forEachCell(e-n,r-n,e+n,r+n,this._insertCircleCell,this.circleUid++),this.circleKeys.push(t),this.circles.push(e),this.circles.push(r),this.circles.push(n)},Kt.prototype._insertBoxCell\u003dfunction(t,e,r,n,i,a){this.boxCells[i].push(a)},Kt.prototype._insertCircleCell\u003dfunction(t,e,r,n,i,a){this.circleCells[i].push(a)},Kt.prototype._query\u003dfunction(t,e,r,n,i,a){if(r\u003c0||t\u003ethis.width||n\u003c0||e\u003ethis.height)return!i\u0026\u0026[];var o\u003d[];if(t\u003c\u003d0\u0026\u0026e\u003c\u003d0\u0026\u0026this.width\u003c\u003dr\u0026\u0026this.height\u003c\u003dn){if(i)return!0;for(var s\u003d0;s\u003cthis.boxKeys.length;s++)o.push({key:this.boxKeys[s],x1:this.bboxes[4*s],y1:this.bboxes[4*s+1],x2:this.bboxes[4*s+2],y2:this.bboxes[4*s+3]});for(var l\u003d0;l\u003cthis.circleKeys.length;l++){var c\u003dthis.circles[3*l],u\u003dthis.circles[3*l+1],f\u003dthis.circles[3*l+2];o.push({key:this.circleKeys[l],x1:c-f,y1:u-f,x2:c+f,y2:u+f})}return a?o.filter(a):o}var h\u003d{hitTest:i,seenUids:{box:{},circle:{}}};return this._forEachCell(t,e,r,n,this._queryCell,o,h,a),i?o.length\u003e0:o},Kt.prototype._queryCircle\u003dfunction(t,e,r,n,i){var a\u003dt-r,o\u003dt+r,s\u003de-r,l\u003de+r;if(o\u003c0||a\u003ethis.width||l\u003c0||s\u003ethis.height)return!n\u0026\u0026[];var c\u003d[],u\u003d{hitTest:n,circle:{x:t,y:e,radius:r},seenUids:{box:{},circle:{}}};return this._forEachCell(a,s,o,l,this._queryCellCircle,c,u,i),n?c.length\u003e0:c},Kt.prototype.query\u003dfunction(t,e,r,n,i){return this._query(t,e,r,n,!1,i)},Kt.prototype.hitTest\u003dfunction(t,e,r,n,i){return this._query(t,e,r,n,!0,i)},Kt.prototype.hitTestCircle\u003dfunction(t,e,r,n){return this._queryCircle(t,e,r,!0,n)},Kt.prototype._queryCell\u003dfunction(t,e,r,n,i,a,o,s){var l\u003do.seenUids,c\u003dthis.boxCells[i];if(null!\u003d\u003dc)for(var u\u003dthis.bboxes,f\u003d0,h\u003dc;f\u003ch.length;f+\u003d1){var p\u003dh[f];if(!l.box[p]){l.box[p]\u003d!0;var d\u003d4*p;if(t\u003c\u003du[d+2]\u0026\u0026e\u003c\u003du[d+3]\u0026\u0026r\u003e\u003du[d+0]\u0026\u0026n\u003e\u003du[d+1]\u0026\u0026(!s||s(this.boxKeys[p]))){if(o.hitTest)return a.push(!0),!0;a.push({key:this.boxKeys[p],x1:u[d],y1:u[d+1],x2:u[d+2],y2:u[d+3]})}}}var m\u003dthis.circleCells[i];if(null!\u003d\u003dm)for(var g\u003dthis.circles,v\u003d0,y\u003dm;v\u003cy.length;v+\u003d1){var x\u003dy[v];if(!l.circle[x]){l.circle[x]\u003d!0;var b\u003d3*x;if(this._circleAndRectCollide(g[b],g[b+1],g[b+2],t,e,r,n)\u0026\u0026(!s||s(this.circleKeys[x]))){if(o.hitTest)return a.push(!0),!0;var _\u003dg[b],w\u003dg[b+1],T\u003dg[b+2];a.push({key:this.circleKeys[x],x1:_-T,y1:w-T,x2:_+T,y2:w+T})}}}},Kt.prototype._queryCellCircle\u003dfunction(t,e,r,n,i,a,o,s){var l\u003do.circle,c\u003do.seenUids,u\u003dthis.boxCells[i];if(null!\u003d\u003du)for(var f\u003dthis.bboxes,h\u003d0,p\u003du;h\u003cp.length;h+\u003d1){var d\u003dp[h];if(!c.box[d]){c.box[d]\u003d!0;var m\u003d4*d;if(this._circleAndRectCollide(l.x,l.y,l.radius,f[m+0],f[m+1],f[m+2],f[m+3])\u0026\u0026(!s||s(this.boxKeys[d])))return a.push(!0),!0}}var g\u003dthis.circleCells[i];if(null!\u003d\u003dg)for(var v\u003dthis.circles,y\u003d0,x\u003dg;y\u003cx.length;y+\u003d1){var b\u003dx[y];if(!c.circle[b]){c.circle[b]\u003d!0;var _\u003d3*b;if(this._circlesCollide(v[_],v[_+1],v[_+2],l.x,l.y,l.radius)\u0026\u0026(!s||s(this.circleKeys[b])))return a.push(!0),!0}}},Kt.prototype._forEachCell\u003dfunction(t,e,r,n,i,a,o,s){for(var l\u003dthis._convertToXCellCoord(t),c\u003dthis._convertToYCellCoord(e),u\u003dthis._convertToXCellCoord(r),f\u003dthis._convertToYCellCoord(n),h\u003dl;h\u003c\u003du;h++)for(var p\u003dc;p\u003c\u003df;p++){var d\u003dthis.xCellCount*p+h;if(i.call(this,t,e,r,n,d,a,o,s))return}},Kt.prototype._convertToXCellCoord\u003dfunction(t){return Math.max(0,Math.min(this.xCellCount-1,Math.floor(t*this.xScale)))},Kt.prototype._convertToYCellCoord\u003dfunction(t){return Math.max(0,Math.min(this.yCellCount-1,Math.floor(t*this.yScale)))},Kt.prototype._circlesCollide\u003dfunction(t,e,r,n,i,a){var o\u003dn-t,s\u003di-e,l\u003dr+a;return l*l\u003eo*o+s*s},Kt.prototype._circleAndRectCollide\u003dfunction(t,e,r,n,i,a,o){var s\u003d(a-n)/2,l\u003dMath.abs(t-(n+s));if(l\u003es+r)return!1;var c\u003d(o-i)/2,u\u003dMath.abs(e-(i+c));if(u\u003ec+r)return!1;if(l\u003c\u003ds||u\u003c\u003dc)return!0;var f\u003dl-s,h\u003du-c;return f*f+h*h\u003c\u003dr*r};var ce\u003dnew Float32Array([-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0,-1/0,-1/0,0]);function ue(t,e){for(var r\u003d0;r\u003ct;r++){var n\u003de.length;e.resize(n+4),e.float32.set(ce,3*n)}}function fe(t,e,r){var n\u003de[0],i\u003de[1];return t[0]\u003dr[0]*n+r[4]*i+r[12],t[1]\u003dr[1]*n+r[5]*i+r[13],t[3]\u003dr[3]*n+r[7]*i+r[15],t}var he\u003dfunction(t,e,r){void 0\u003d\u003d\u003de\u0026\u0026(e\u003dnew Kt(t.width+200,t.height+200,25)),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003dnew Kt(t.width+200,t.height+200,25)),this.transform\u003dt,this.grid\u003de,this.ignoredGrid\u003dr,this.pitchfactor\u003dMath.cos(t._pitch)*t.cameraToCenterDistance,this.screenRightBoundary\u003dt.width+100,this.screenBottomBoundary\u003dt.height+100,this.gridRightBoundary\u003dt.width+200,this.gridBottomBoundary\u003dt.height+200};function pe(e,r,n){return r*(t.EXTENT/(e.tileSize*Math.pow(2,n-e.tileID.overscaledZ)))}he.prototype.placeCollisionBox\u003dfunction(t,e,r,n,i){var a\u003dthis.projectAndGetPerspectiveRatio(n,t.anchorPointX,t.anchorPointY),o\u003dr*a.perspectiveRatio,s\u003dt.x1*o+a.point.x,l\u003dt.y1*o+a.point.y,c\u003dt.x2*o+a.point.x,u\u003dt.y2*o+a.point.y;return!this.isInsideGrid(s,l,c,u)||!e\u0026\u0026this.grid.hitTest(s,l,c,u,i)?{box:[],offscreen:!1}:{box:[s,l,c,u],offscreen:this.isOffscreen(s,l,c,u)}},he.prototype.placeCollisionCircles\u003dfunction(e,r,n,i,a,o,s,l,c,u,f,h,p){var d\u003d[],m\u003dnew t.Point(r.anchorX,r.anchorY),g\u003dte(m,o),v\u003dee(this.transform.cameraToCenterDistance,g.signedDistanceFromCamera),y\u003d(u?a/v:a*v)/t.ONE_EM,x\u003dte(m,s).point,b\u003die(y,i,r.lineOffsetX*y,r.lineOffsetY*y,!1,x,m,r,n,s,{}),_\u003d!1,w\u003d!1,T\u003d!0;if(b){for(var k\u003d.5*h*v+p,M\u003dnew t.Point(-100,-100),A\u003dnew t.Point(this.screenRightBoundary,this.screenBottomBoundary),S\u003dnew Jt,E\u003db.first,L\u003db.last,C\u003d[],P\u003dE.path.length-1;P\u003e\u003d1;P--)C.push(E.path[P]);for(var I\u003d1;I\u003cL.path.length;I++)C.push(L.path[I]);var O\u003d2.5*k;if(l){var z\u003dC.map((function(t){return te(t,l)}));C\u003dz.some((function(t){return t.signedDistanceFromCamera\u003c\u003d0}))?[]:z.map((function(t){return t.point}))}var D\u003d[];if(C.length\u003e0){for(var R\u003dC[0].clone(),F\u003dC[0].clone(),B\u003d1;B\u003cC.length;B++)R.x\u003dMath.min(R.x,C[B].x),R.y\u003dMath.min(R.y,C[B].y),F.x\u003dMath.max(F.x,C[B].x),F.y\u003dMath.max(F.y,C[B].y);D\u003dR.x\u003e\u003dM.x\u0026\u0026F.x\u003c\u003dA.x\u0026\u0026R.y\u003e\u003dM.y\u0026\u0026F.y\u003c\u003dA.y?[C]:F.x\u003cM.x||R.x\u003eA.x||F.y\u003cM.y||R.y\u003eA.y?[]:t.clipLine([C],M.x,M.y,A.x,A.y)}for(var N\u003d0,j\u003dD;N\u003cj.length;N+\u003d1){var U\u003dj[N];S.reset(U,.25*k);var V\u003d0;V\u003dS.length\u003c\u003d.5*k?1:Math.ceil(S.paddedLength/O)+1;for(var q\u003d0;q\u003cV;q++){var H\u003dq/Math.max(V-1,1),G\u003dS.lerp(H),Y\u003dG.x+100,W\u003dG.y+100;d.push(Y,W,k,0);var X\u003dY-k,Z\u003dW-k,J\u003dY+k,K\u003dW+k;if(T\u003dT\u0026\u0026this.isOffscreen(X,Z,J,K),w\u003dw||this.isInsideGrid(X,Z,J,K),!e\u0026\u0026this.grid.hitTestCircle(Y,W,k,f)\u0026\u0026(_\u003d!0,!c))return{circles:[],offscreen:!1,collisionDetected:_}}}}return{circles:!c\u0026\u0026_||!w?[]:d,offscreen:T,collisionDetected:_}},he.prototype.queryRenderedSymbols\u003dfunction(e){if(0\u003d\u003d\u003de.length||0\u003d\u003d\u003dthis.grid.keysLength()\u0026\u00260\u003d\u003d\u003dthis.ignoredGrid.keysLength())return{};for(var r\u003d[],n\u003d1/0,i\u003d1/0,a\u003d-1/0,o\u003d-1/0,s\u003d0,l\u003de;s\u003cl.length;s+\u003d1){var c\u003dl[s],u\u003dnew t.Point(c.x+100,c.y+100);n\u003dMath.min(n,u.x),i\u003dMath.min(i,u.y),a\u003dMath.max(a,u.x),o\u003dMath.max(o,u.y),r.push(u)}for(var f\u003d{},h\u003d{},p\u003d0,d\u003dthis.grid.query(n,i,a,o).concat(this.ignoredGrid.query(n,i,a,o));p\u003cd.length;p+\u003d1){var m\u003dd[p],g\u003dm.key;if(void 0\u003d\u003d\u003df[g.bucketInstanceId]\u0026\u0026(f[g.bucketInstanceId]\u003d{}),!f[g.bucketInstanceId][g.featureIndex]){var v\u003d[new t.Point(m.x1,m.y1),new t.Point(m.x2,m.y1),new t.Point(m.x2,m.y2),new t.Point(m.x1,m.y2)];t.polygonIntersectsPolygon(r,v)\u0026\u0026(f[g.bucketInstanceId][g.featureIndex]\u003d!0,void 0\u003d\u003d\u003dh[g.bucketInstanceId]\u0026\u0026(h[g.bucketInstanceId]\u003d[]),h[g.bucketInstanceId].push(g.featureIndex))}}return h},he.prototype.insertCollisionBox\u003dfunction(t,e,r,n,i){var a\u003d{bucketInstanceId:r,featureIndex:n,collisionGroupID:i};(e?this.ignoredGrid:this.grid).insert(a,t[0],t[1],t[2],t[3])},he.prototype.insertCollisionCircles\u003dfunction(t,e,r,n,i){for(var a\u003de?this.ignoredGrid:this.grid,o\u003d{bucketInstanceId:r,featureIndex:n,collisionGroupID:i},s\u003d0;s\u003ct.length;s+\u003d4)a.insertCircle(o,t[s],t[s+1],t[s+2])},he.prototype.projectAndGetPerspectiveRatio\u003dfunction(e,r,n){var i\u003d[r,n,0,1];return fe(i,i,e),{point:new t.Point((i[0]/i[3]+1)/2*this.transform.width+100,(-i[1]/i[3]+1)/2*this.transform.height+100),perspectiveRatio:.5+this.transform.cameraToCenterDistance/i[3]*.5}},he.prototype.isOffscreen\u003dfunction(t,e,r,n){return r\u003c100||t\u003e\u003dthis.screenRightBoundary||n\u003c100||e\u003ethis.screenBottomBoundary},he.prototype.isInsideGrid\u003dfunction(t,e,r,n){return r\u003e\u003d0\u0026\u0026t\u003cthis.gridRightBoundary\u0026\u0026n\u003e\u003d0\u0026\u0026e\u003cthis.gridBottomBoundary},he.prototype.getViewportMatrix\u003dfunction(){var e\u003dt.identity([]);return t.translate(e,e,[-100,-100,0]),e};var de\u003dfunction(t,e,r,n){this.opacity\u003dt?Math.max(0,Math.min(1,t.opacity+(t.placed?e:-e))):n\u0026\u0026r?1:0,this.placed\u003dr};de.prototype.isHidden\u003dfunction(){return 0\u003d\u003d\u003dthis.opacity\u0026\u0026!this.placed};var me\u003dfunction(t,e,r,n,i){this.text\u003dnew de(t?t.text:null,e,r,i),this.icon\u003dnew de(t?t.icon:null,e,n,i)};me.prototype.isHidden\u003dfunction(){return this.text.isHidden()\u0026\u0026this.icon.isHidden()};var ge\u003dfunction(t,e,r){this.text\u003dt,this.icon\u003de,this.skipFade\u003dr},ve\u003dfunction(){this.invProjMatrix\u003dt.create(),this.viewportMatrix\u003dt.create(),this.circles\u003d[]},ye\u003dfunction(t,e,r,n,i){this.bucketInstanceId\u003dt,this.featureIndex\u003de,this.sourceLayerIndex\u003dr,this.bucketIndex\u003dn,this.tileID\u003di},xe\u003dfunction(t){this.crossSourceCollisions\u003dt,this.maxGroupID\u003d0,this.collisionGroups\u003d{}};function be(e,r,n,i,a){var o\u003dt.getAnchorAlignment(e),s\u003d-(o.horizontalAlign-.5)*r,l\u003d-(o.verticalAlign-.5)*n,c\u003dt.evaluateVariableOffset(e,i);return new t.Point(s+c[0]*a,l+c[1]*a)}function _e(e,r,n,i,a,o){var s\u003de.x1,l\u003de.x2,c\u003de.y1,u\u003de.y2,f\u003de.anchorPointX,h\u003de.anchorPointY,p\u003dnew t.Point(r,n);return i\u0026\u0026p._rotate(a?o:-o),{x1:s+p.x,y1:c+p.y,x2:l+p.x,y2:u+p.y,anchorPointX:f,anchorPointY:h}}xe.prototype.get\u003dfunction(t){if(this.crossSourceCollisions)return{ID:0,predicate:null};if(!this.collisionGroups[t]){var e\u003d++this.maxGroupID;this.collisionGroups[t]\u003d{ID:e,predicate:function(t){return t.collisionGroupID\u003d\u003d\u003de}}}return this.collisionGroups[t]};var we\u003dfunction(t,e,r,n){this.transform\u003dt.clone(),this.collisionIndex\u003dnew he(this.transform),this.placements\u003d{},this.opacities\u003d{},this.variableOffsets\u003d{},this.stale\u003d!1,this.commitTime\u003d0,this.fadeDuration\u003de,this.retainedQueryData\u003d{},this.collisionGroups\u003dnew xe(r),this.collisionCircleArrays\u003d{},this.prevPlacement\u003dn,n\u0026\u0026(n.prevPlacement\u003dvoid 0),this.placedOrientations\u003d{}};function Te(t,e,r,n,i){t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0),t.emplaceBack(e?1:0,r?1:0,n||0,i||0)}we.prototype.getBucketParts\u003dfunction(e,r,n,i){var a\u003dn.getBucket(r),o\u003dn.latestFeatureIndex;if(a\u0026\u0026o\u0026\u0026r.id\u003d\u003d\u003da.layerIds[0]){var s\u003dn.collisionBoxArray,l\u003da.layers[0].layout,c\u003dMath.pow(2,this.transform.zoom-n.tileID.overscaledZ),u\u003dn.tileSize/t.EXTENT,f\u003dthis.transform.calculatePosMatrix(n.tileID.toUnwrapped()),h\u003d\"map\"\u003d\u003d\u003dl.get(\"text-pitch-alignment\"),p\u003d\"map\"\u003d\u003d\u003dl.get(\"text-rotation-alignment\"),d\u003dpe(n,1,this.transform.zoom),m\u003dQt(f,h,p,this.transform,d),g\u003dnull;if(h){var v\u003d$t(f,h,p,this.transform,d);g\u003dt.multiply([],this.transform.labelPlaneMatrix,v)}this.retainedQueryData[a.bucketInstanceId]\u003dnew ye(a.bucketInstanceId,o,a.sourceLayerIndex,a.index,n.tileID);var y\u003d{bucket:a,layout:l,posMatrix:f,textLabelPlaneMatrix:m,labelToScreenMatrix:g,scale:c,textPixelRatio:u,holdingForFade:n.holdingForFade(),collisionBoxArray:s,partiallyEvaluatedTextSize:t.evaluateSizeForZoom(a.textSizeData,this.transform.zoom),collisionGroup:this.collisionGroups.get(a.sourceID)};if(i)for(var x\u003d0,b\u003da.sortKeyRanges;x\u003cb.length;x+\u003d1){var _\u003db[x],w\u003d_.sortKey,T\u003d_.symbolInstanceStart,k\u003d_.symbolInstanceEnd;e.push({sortKey:w,symbolInstanceStart:T,symbolInstanceEnd:k,parameters:y})}else e.push({symbolInstanceStart:0,symbolInstanceEnd:a.symbolInstances.length,parameters:y})}},we.prototype.attemptAnchorPlacement\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d){var m,g\u003d[f.textOffset0,f.textOffset1],v\u003dbe(t,r,n,g,i),y\u003dthis.collisionIndex.placeCollisionBox(_e(e,v.x,v.y,a,o,this.transform.angle),u,s,l,c.predicate);if(d\u0026\u00260\u003d\u003d\u003dthis.collisionIndex.placeCollisionBox(_e(d,v.x,v.y,a,o,this.transform.angle),u,s,l,c.predicate).box.length)return;if(y.box.length\u003e0)return this.prevPlacement\u0026\u0026this.prevPlacement.variableOffsets[f.crossTileID]\u0026\u0026this.prevPlacement.placements[f.crossTileID]\u0026\u0026this.prevPlacement.placements[f.crossTileID].text\u0026\u0026(m\u003dthis.prevPlacement.variableOffsets[f.crossTileID].anchor),this.variableOffsets[f.crossTileID]\u003d{textOffset:g,width:r,height:n,anchor:t,textBoxScale:i,prevAnchor:m},this.markUsedJustification(h,t,f,p),h.allowVerticalPlacement\u0026\u0026(this.markUsedOrientation(h,p,f),this.placedOrientations[f.crossTileID]\u003dp),{shift:v,placedGlyphBoxes:y}},we.prototype.placeLayerBucketPart\u003dfunction(e,r,n){var i\u003dthis,a\u003de.parameters,o\u003da.bucket,s\u003da.layout,l\u003da.posMatrix,c\u003da.textLabelPlaneMatrix,u\u003da.labelToScreenMatrix,f\u003da.textPixelRatio,h\u003da.holdingForFade,p\u003da.collisionBoxArray,d\u003da.partiallyEvaluatedTextSize,m\u003da.collisionGroup,g\u003ds.get(\"text-optional\"),v\u003ds.get(\"icon-optional\"),y\u003ds.get(\"text-allow-overlap\"),x\u003ds.get(\"icon-allow-overlap\"),b\u003d\"map\"\u003d\u003d\u003ds.get(\"text-rotation-alignment\"),_\u003d\"map\"\u003d\u003d\u003ds.get(\"text-pitch-alignment\"),w\u003d\"none\"!\u003d\u003ds.get(\"icon-text-fit\"),T\u003d\"viewport-y\"\u003d\u003d\u003ds.get(\"symbol-z-order\"),k\u003dy\u0026\u0026(x||!o.hasIconData()||v),M\u003dx\u0026\u0026(y||!o.hasTextData()||g);!o.collisionArrays\u0026\u0026p\u0026\u0026o.deserializeCollisionBoxes(p);var A\u003dfunction(e,a){if(!r[e.crossTileID])if(h)i.placements[e.crossTileID]\u003dnew ge(!1,!1,!1);else{var p,T\u003d!1,A\u003d!1,S\u003d!0,E\u003dnull,L\u003d{box:null,offscreen:null},C\u003d{box:null,offscreen:null},P\u003dnull,I\u003dnull,O\u003d0,z\u003d0,D\u003d0;a.textFeatureIndex?O\u003da.textFeatureIndex:e.useRuntimeCollisionCircles\u0026\u0026(O\u003de.featureIndex),a.verticalTextFeatureIndex\u0026\u0026(z\u003da.verticalTextFeatureIndex);var R\u003da.textBox;if(R){var F\u003dfunction(r){var n\u003dt.WritingMode.horizontal;if(o.allowVerticalPlacement\u0026\u0026!r\u0026\u0026i.prevPlacement){var a\u003di.prevPlacement.placedOrientations[e.crossTileID];a\u0026\u0026(i.placedOrientations[e.crossTileID]\u003da,n\u003da,i.markUsedOrientation(o,n,e))}return n},B\u003dfunction(r,n){if(o.allowVerticalPlacement\u0026\u0026e.numVerticalGlyphVertices\u003e0\u0026\u0026a.verticalTextBox)for(var i\u003d0,s\u003do.writingModes;i\u003cs.length;i+\u003d1){if(s[i]\u003d\u003d\u003dt.WritingMode.vertical?(L\u003dn(),C\u003dL):L\u003dr(),L\u0026\u0026L.box\u0026\u0026L.box.length)break}else L\u003dr()};if(s.get(\"text-variable-anchor\")){var N\u003ds.get(\"text-variable-anchor\");if(i.prevPlacement\u0026\u0026i.prevPlacement.variableOffsets[e.crossTileID]){var j\u003di.prevPlacement.variableOffsets[e.crossTileID];N.indexOf(j.anchor)\u003e0\u0026\u0026(N\u003dN.filter((function(t){return t!\u003d\u003dj.anchor}))).unshift(j.anchor)}var U\u003dfunction(t,r,n){for(var a\u003dt.x2-t.x1,s\u003dt.y2-t.y1,c\u003de.textBoxScale,u\u003dw\u0026\u0026!x?r:null,h\u003d{box:[],offscreen:!1},p\u003dy?2*N.length:N.length,d\u003d0;d\u003cp;++d){var g\u003dN[d%N.length],v\u003dd\u003e\u003dN.length,k\u003di.attemptAnchorPlacement(g,t,a,s,c,b,_,f,l,m,v,e,o,n,u);if(k\u0026\u0026(h\u003dk.placedGlyphBoxes)\u0026\u0026h.box\u0026\u0026h.box.length){T\u003d!0,E\u003dk.shift;break}}return h};B((function(){return U(R,a.iconBox,t.WritingMode.horizontal)}),(function(){var r\u003da.verticalTextBox,n\u003dL\u0026\u0026L.box\u0026\u0026L.box.length;return o.allowVerticalPlacement\u0026\u0026!n\u0026\u0026e.numVerticalGlyphVertices\u003e0\u0026\u0026r?U(r,a.verticalIconBox,t.WritingMode.vertical):{box:null,offscreen:null}})),L\u0026\u0026(T\u003dL.box,S\u003dL.offscreen);var V\u003dF(L\u0026\u0026L.box);if(!T\u0026\u0026i.prevPlacement){var q\u003di.prevPlacement.variableOffsets[e.crossTileID];q\u0026\u0026(i.variableOffsets[e.crossTileID]\u003dq,i.markUsedJustification(o,q.anchor,e,V))}}else{var H\u003dfunction(t,r){var n\u003di.collisionIndex.placeCollisionBox(t,y,f,l,m.predicate);return n\u0026\u0026n.box\u0026\u0026n.box.length\u0026\u0026(i.markUsedOrientation(o,r,e),i.placedOrientations[e.crossTileID]\u003dr),n};B((function(){return H(R,t.WritingMode.horizontal)}),(function(){var r\u003da.verticalTextBox;return o.allowVerticalPlacement\u0026\u0026e.numVerticalGlyphVertices\u003e0\u0026\u0026r?H(r,t.WritingMode.vertical):{box:null,offscreen:null}})),F(L\u0026\u0026L.box\u0026\u0026L.box.length)}}if(T\u003d(p\u003dL)\u0026\u0026p.box\u0026\u0026p.box.length\u003e0,S\u003dp\u0026\u0026p.offscreen,e.useRuntimeCollisionCircles){var G\u003do.text.placedSymbolArray.get(e.centerJustifiedTextSymbolIndex),Y\u003dt.evaluateSizeForFeature(o.textSizeData,d,G),W\u003ds.get(\"text-padding\"),X\u003de.collisionCircleDiameter;P\u003di.collisionIndex.placeCollisionCircles(y,G,o.lineVertexArray,o.glyphOffsetArray,Y,l,c,u,n,_,m.predicate,X,W),T\u003dy||P.circles.length\u003e0\u0026\u0026!P.collisionDetected,S\u003dS\u0026\u0026P.offscreen}if(a.iconFeatureIndex\u0026\u0026(D\u003da.iconFeatureIndex),a.iconBox){var Z\u003dfunction(t){var e\u003dw\u0026\u0026E?_e(t,E.x,E.y,b,_,i.transform.angle):t;return i.collisionIndex.placeCollisionBox(e,x,f,l,m.predicate)};A\u003dC\u0026\u0026C.box\u0026\u0026C.box.length\u0026\u0026a.verticalIconBox?(I\u003dZ(a.verticalIconBox)).box.length\u003e0:(I\u003dZ(a.iconBox)).box.length\u003e0,S\u003dS\u0026\u0026I.offscreen}var J\u003dg||0\u003d\u003d\u003de.numHorizontalGlyphVertices\u0026\u00260\u003d\u003d\u003de.numVerticalGlyphVertices,K\u003dv||0\u003d\u003d\u003de.numIconVertices;if(J||K?K?J||(A\u003dA\u0026\u0026T):T\u003dA\u0026\u0026T:A\u003dT\u003dA\u0026\u0026T,T\u0026\u0026p\u0026\u0026p.box\u0026\u0026(C\u0026\u0026C.box\u0026\u0026z?i.collisionIndex.insertCollisionBox(p.box,s.get(\"text-ignore-placement\"),o.bucketInstanceId,z,m.ID):i.collisionIndex.insertCollisionBox(p.box,s.get(\"text-ignore-placement\"),o.bucketInstanceId,O,m.ID)),A\u0026\u0026I\u0026\u0026i.collisionIndex.insertCollisionBox(I.box,s.get(\"icon-ignore-placement\"),o.bucketInstanceId,D,m.ID),P\u0026\u0026(T\u0026\u0026i.collisionIndex.insertCollisionCircles(P.circles,s.get(\"text-ignore-placement\"),o.bucketInstanceId,O,m.ID),n)){var Q\u003do.bucketInstanceId,$\u003di.collisionCircleArrays[Q];void 0\u003d\u003d\u003d$\u0026\u0026($\u003di.collisionCircleArrays[Q]\u003dnew ve);for(var tt\u003d0;tt\u003cP.circles.length;tt+\u003d4)$.circles.push(P.circles[tt+0]),$.circles.push(P.circles[tt+1]),$.circles.push(P.circles[tt+2]),$.circles.push(P.collisionDetected?1:0)}i.placements[e.crossTileID]\u003dnew ge(T||k,A||M,S||o.justReloaded),r[e.crossTileID]\u003d!0}};if(T)for(var S\u003do.getSortedSymbolIndexes(this.transform.angle),E\u003dS.length-1;E\u003e\u003d0;--E){var L\u003dS[E];A(o.symbolInstances.get(L),o.collisionArrays[L])}else for(var C\u003de.symbolInstanceStart;C\u003ce.symbolInstanceEnd;C++)A(o.symbolInstances.get(C),o.collisionArrays[C]);if(n\u0026\u0026o.bucketInstanceId in this.collisionCircleArrays){var P\u003dthis.collisionCircleArrays[o.bucketInstanceId];t.invert(P.invProjMatrix,l),P.viewportMatrix\u003dthis.collisionIndex.getViewportMatrix()}o.justReloaded\u003d!1},we.prototype.markUsedJustification\u003dfunction(e,r,n,i){var a,o\u003d{left:n.leftJustifiedTextSymbolIndex,center:n.centerJustifiedTextSymbolIndex,right:n.rightJustifiedTextSymbolIndex};a\u003di\u003d\u003d\u003dt.WritingMode.vertical?n.verticalPlacedTextSymbolIndex:o[t.getAnchorJustification(r)];for(var s\u003d0,l\u003d[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex,n.verticalPlacedTextSymbolIndex];s\u003cl.length;s+\u003d1){var c\u003dl[s];c\u003e\u003d0\u0026\u0026(e.text.placedSymbolArray.get(c).crossTileID\u003da\u003e\u003d0\u0026\u0026c!\u003d\u003da?0:n.crossTileID)}},we.prototype.markUsedOrientation\u003dfunction(e,r,n){for(var i\u003dr\u003d\u003d\u003dt.WritingMode.horizontal||r\u003d\u003d\u003dt.WritingMode.horizontalOnly?r:0,a\u003dr\u003d\u003d\u003dt.WritingMode.vertical?r:0,o\u003d0,s\u003d[n.leftJustifiedTextSymbolIndex,n.centerJustifiedTextSymbolIndex,n.rightJustifiedTextSymbolIndex];o\u003cs.length;o+\u003d1){var l\u003ds[o];e.text.placedSymbolArray.get(l).placedOrientation\u003di}n.verticalPlacedTextSymbolIndex\u0026\u0026(e.text.placedSymbolArray.get(n.verticalPlacedTextSymbolIndex).placedOrientation\u003da)},we.prototype.commit\u003dfunction(t){this.commitTime\u003dt,this.zoomAtLastRecencyCheck\u003dthis.transform.zoom;var e\u003dthis.prevPlacement,r\u003d!1;this.prevZoomAdjustment\u003de?e.zoomAdjustment(this.transform.zoom):0;var n\u003de?e.symbolFadeChange(t):1,i\u003de?e.opacities:{},a\u003de?e.variableOffsets:{},o\u003de?e.placedOrientations:{};for(var s in this.placements){var l\u003dthis.placements[s],c\u003di[s];c?(this.opacities[s]\u003dnew me(c,n,l.text,l.icon),r\u003dr||l.text!\u003d\u003dc.text.placed||l.icon!\u003d\u003dc.icon.placed):(this.opacities[s]\u003dnew me(null,n,l.text,l.icon,l.skipFade),r\u003dr||l.text||l.icon)}for(var u in i){var f\u003di[u];if(!this.opacities[u]){var h\u003dnew me(f,n,!1,!1);h.isHidden()||(this.opacities[u]\u003dh,r\u003dr||f.text.placed||f.icon.placed)}}for(var p in a)this.variableOffsets[p]||!this.opacities[p]||this.opacities[p].isHidden()||(this.variableOffsets[p]\u003da[p]);for(var d in o)this.placedOrientations[d]||!this.opacities[d]||this.opacities[d].isHidden()||(this.placedOrientations[d]\u003do[d]);r?this.lastPlacementChangeTime\u003dt:\"number\"!\u003dtypeof this.lastPlacementChangeTime\u0026\u0026(this.lastPlacementChangeTime\u003de?e.lastPlacementChangeTime:t)},we.prototype.updateLayerOpacities\u003dfunction(t,e){for(var r\u003d{},n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){var a\u003di[n],o\u003da.getBucket(t);o\u0026\u0026a.latestFeatureIndex\u0026\u0026t.id\u003d\u003d\u003do.layerIds[0]\u0026\u0026this.updateBucketOpacities(o,r,a.collisionBoxArray)}},we.prototype.updateBucketOpacities\u003dfunction(e,r,n){var i\u003dthis;e.hasTextData()\u0026\u0026e.text.opacityVertexArray.clear(),e.hasIconData()\u0026\u0026e.icon.opacityVertexArray.clear(),e.hasIconCollisionBoxData()\u0026\u0026e.iconCollisionBox.collisionVertexArray.clear(),e.hasTextCollisionBoxData()\u0026\u0026e.textCollisionBox.collisionVertexArray.clear();var a\u003de.layers[0].layout,o\u003dnew me(null,0,!1,!1,!0),s\u003da.get(\"text-allow-overlap\"),l\u003da.get(\"icon-allow-overlap\"),c\u003da.get(\"text-variable-anchor\"),u\u003d\"map\"\u003d\u003d\u003da.get(\"text-rotation-alignment\"),f\u003d\"map\"\u003d\u003d\u003da.get(\"text-pitch-alignment\"),h\u003d\"none\"!\u003d\u003da.get(\"icon-text-fit\"),p\u003dnew me(null,0,s\u0026\u0026(l||!e.hasIconData()||a.get(\"icon-optional\")),l\u0026\u0026(s||!e.hasTextData()||a.get(\"text-optional\")),!0);!e.collisionArrays\u0026\u0026n\u0026\u0026(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData())\u0026\u0026e.deserializeCollisionBoxes(n);for(var d\u003dfunction(t,e,r){for(var n\u003d0;n\u003ce/4;n++)t.opacityVertexArray.emplaceBack(r)},m\u003dfunction(n){var a\u003de.symbolInstances.get(n),s\u003da.numHorizontalGlyphVertices,l\u003da.numVerticalGlyphVertices,m\u003da.crossTileID,g\u003dr[m],v\u003di.opacities[m];g?v\u003do:v||(v\u003dp,i.opacities[m]\u003dv),r[m]\u003d!0;var y\u003ds\u003e0||l\u003e0,x\u003da.numIconVertices\u003e0,b\u003di.placedOrientations[a.crossTileID],_\u003db\u003d\u003d\u003dt.WritingMode.vertical,w\u003db\u003d\u003d\u003dt.WritingMode.horizontal||b\u003d\u003d\u003dt.WritingMode.horizontalOnly;if(y){var T\u003dPe(v.text),k\u003d_?Ie:T;d(e.text,s,k);var M\u003dw?Ie:T;d(e.text,l,M);var A\u003dv.text.isHidden();[a.rightJustifiedTextSymbolIndex,a.centerJustifiedTextSymbolIndex,a.leftJustifiedTextSymbolIndex].forEach((function(t){t\u003e\u003d0\u0026\u0026(e.text.placedSymbolArray.get(t).hidden\u003dA||_?1:0)})),a.verticalPlacedTextSymbolIndex\u003e\u003d0\u0026\u0026(e.text.placedSymbolArray.get(a.verticalPlacedTextSymbolIndex).hidden\u003dA||w?1:0);var S\u003di.variableOffsets[a.crossTileID];S\u0026\u0026i.markUsedJustification(e,S.anchor,a,b);var E\u003di.placedOrientations[a.crossTileID];E\u0026\u0026(i.markUsedJustification(e,\"left\",a,E),i.markUsedOrientation(e,E,a))}if(x){var L\u003dPe(v.icon),C\u003d!(h\u0026\u0026a.verticalPlacedIconSymbolIndex\u0026\u0026_);if(a.placedIconSymbolIndex\u003e\u003d0){var P\u003dC?L:Ie;d(e.icon,a.numIconVertices,P),e.icon.placedSymbolArray.get(a.placedIconSymbolIndex).hidden\u003dv.icon.isHidden()}if(a.verticalPlacedIconSymbolIndex\u003e\u003d0){var I\u003dC?Ie:L;d(e.icon,a.numVerticalIconVertices,I),e.icon.placedSymbolArray.get(a.verticalPlacedIconSymbolIndex).hidden\u003dv.icon.isHidden()}}if(e.hasIconCollisionBoxData()||e.hasTextCollisionBoxData()){var O\u003de.collisionArrays[n];if(O){var z\u003dnew t.Point(0,0);if(O.textBox||O.verticalTextBox){var D\u003d!0;if(c){var R\u003di.variableOffsets[m];R?(z\u003dbe(R.anchor,R.width,R.height,R.textOffset,R.textBoxScale),u\u0026\u0026z._rotate(f?i.transform.angle:-i.transform.angle)):D\u003d!1}O.textBox\u0026\u0026Te(e.textCollisionBox.collisionVertexArray,v.text.placed,!D||_,z.x,z.y),O.verticalTextBox\u0026\u0026Te(e.textCollisionBox.collisionVertexArray,v.text.placed,!D||w,z.x,z.y)}var F\u003dBoolean(!w\u0026\u0026O.verticalIconBox);O.iconBox\u0026\u0026Te(e.iconCollisionBox.collisionVertexArray,v.icon.placed,F,h?z.x:0,h?z.y:0),O.verticalIconBox\u0026\u0026Te(e.iconCollisionBox.collisionVertexArray,v.icon.placed,!F,h?z.x:0,h?z.y:0)}}},g\u003d0;g\u003ce.symbolInstances.length;g++)m(g);if(e.sortFeatures(this.transform.angle),this.retainedQueryData[e.bucketInstanceId]\u0026\u0026(this.retainedQueryData[e.bucketInstanceId].featureSortOrder\u003de.featureSortOrder),e.hasTextData()\u0026\u0026e.text.opacityVertexBuffer\u0026\u0026e.text.opacityVertexBuffer.updateData(e.text.opacityVertexArray),e.hasIconData()\u0026\u0026e.icon.opacityVertexBuffer\u0026\u0026e.icon.opacityVertexBuffer.updateData(e.icon.opacityVertexArray),e.hasIconCollisionBoxData()\u0026\u0026e.iconCollisionBox.collisionVertexBuffer\u0026\u0026e.iconCollisionBox.collisionVertexBuffer.updateData(e.iconCollisionBox.collisionVertexArray),e.hasTextCollisionBoxData()\u0026\u0026e.textCollisionBox.collisionVertexBuffer\u0026\u0026e.textCollisionBox.collisionVertexBuffer.updateData(e.textCollisionBox.collisionVertexArray),e.bucketInstanceId in this.collisionCircleArrays){var v\u003dthis.collisionCircleArrays[e.bucketInstanceId];e.placementInvProjMatrix\u003dv.invProjMatrix,e.placementViewportMatrix\u003dv.viewportMatrix,e.collisionCircleArray\u003dv.circles,delete this.collisionCircleArrays[e.bucketInstanceId]}},we.prototype.symbolFadeChange\u003dfunction(t){return 0\u003d\u003d\u003dthis.fadeDuration?1:(t-this.commitTime)/this.fadeDuration+this.prevZoomAdjustment},we.prototype.zoomAdjustment\u003dfunction(t){return Math.max(0,(this.transform.zoom-t)/1.5)},we.prototype.hasTransitions\u003dfunction(t){return this.stale||t-this.lastPlacementChangeTime\u003cthis.fadeDuration},we.prototype.stillRecent\u003dfunction(t,e){var r\u003dthis.zoomAtLastRecencyCheck\u003d\u003d\u003de?1-this.zoomAdjustment(e):1;return this.zoomAtLastRecencyCheck\u003de,this.commitTime+this.fadeDuration*r\u003et},we.prototype.setStale\u003dfunction(){this.stale\u003d!0};var ke\u003dMath.pow(2,25),Me\u003dMath.pow(2,24),Ae\u003dMath.pow(2,17),Se\u003dMath.pow(2,16),Ee\u003dMath.pow(2,9),Le\u003dMath.pow(2,8),Ce\u003dMath.pow(2,1);function Pe(t){if(0\u003d\u003d\u003dt.opacity\u0026\u0026!t.placed)return 0;if(1\u003d\u003d\u003dt.opacity\u0026\u0026t.placed)return 4294967295;var e\u003dt.placed?1:0,r\u003dMath.floor(127*t.opacity);return r*ke+e*Me+r*Ae+e*Se+r*Ee+e*Le+r*Ce+e}var Ie\u003d0,Oe\u003dfunction(t){this._sortAcrossTiles\u003d\"viewport-y\"!\u003d\u003dt.layout.get(\"symbol-z-order\")\u0026\u0026void 0!\u003d\u003dt.layout.get(\"symbol-sort-key\").constantOr(1),this._currentTileIndex\u003d0,this._currentPartIndex\u003d0,this._seenCrossTileIDs\u003d{},this._bucketParts\u003d[]};Oe.prototype.continuePlacement\u003dfunction(t,e,r,n,i){for(var a\u003dthis._bucketParts;this._currentTileIndex\u003ct.length;){var o\u003dt[this._currentTileIndex];if(e.getBucketParts(a,n,o,this._sortAcrossTiles),this._currentTileIndex++,i())return!0}for(this._sortAcrossTiles\u0026\u0026(this._sortAcrossTiles\u003d!1,a.sort((function(t,e){return t.sortKey-e.sortKey})));this._currentPartIndex\u003ca.length;){var s\u003da[this._currentPartIndex];if(e.placeLayerBucketPart(s,this._seenCrossTileIDs,r),this._currentPartIndex++,i())return!0}return!1};var ze\u003dfunction(t,e,r,n,i,a,o){this.placement\u003dnew we(t,i,a,o),this._currentPlacementIndex\u003de.length-1,this._forceFullPlacement\u003dr,this._showCollisionBoxes\u003dn,this._done\u003d!1};ze.prototype.isDone\u003dfunction(){return this._done},ze.prototype.continuePlacement\u003dfunction(e,r,n){for(var i\u003dthis,a\u003dt.browser.now(),o\u003dfunction(){var e\u003dt.browser.now()-a;return!i._forceFullPlacement\u0026\u0026e\u003e2};this._currentPlacementIndex\u003e\u003d0;){var s\u003dr[e[this._currentPlacementIndex]],l\u003dthis.placement.collisionIndex.transform.zoom;if(\"symbol\"\u003d\u003d\u003ds.type\u0026\u0026(!s.minzoom||s.minzoom\u003c\u003dl)\u0026\u0026(!s.maxzoom||s.maxzoom\u003el)){if(this._inProgressLayer||(this._inProgressLayer\u003dnew Oe(s)),this._inProgressLayer.continuePlacement(n[s.source],this.placement,this._showCollisionBoxes,s,o))return;delete this._inProgressLayer}this._currentPlacementIndex--}this._done\u003d!0},ze.prototype.commit\u003dfunction(t){return this.placement.commit(t),this.placement};var De\u003d512/t.EXTENT/2,Re\u003dfunction(t,e,r){this.tileID\u003dt,this.indexedSymbolInstances\u003d{},this.bucketInstanceId\u003dr;for(var n\u003d0;n\u003ce.length;n++){var i\u003de.get(n),a\u003di.key;this.indexedSymbolInstances[a]||(this.indexedSymbolInstances[a]\u003d[]),this.indexedSymbolInstances[a].push({crossTileID:i.crossTileID,coord:this.getScaledCoordinates(i,t)})}};Re.prototype.getScaledCoordinates\u003dfunction(e,r){var n\u003dr.canonical.z-this.tileID.canonical.z,i\u003dDe/Math.pow(2,n);return{x:Math.floor((r.canonical.x*t.EXTENT+e.anchorX)*i),y:Math.floor((r.canonical.y*t.EXTENT+e.anchorY)*i)}},Re.prototype.findMatches\u003dfunction(t,e,r){for(var n\u003dthis.tileID.canonical.z\u003ce.canonical.z?1:Math.pow(2,this.tileID.canonical.z-e.canonical.z),i\u003d0;i\u003ct.length;i++){var a\u003dt.get(i);if(!a.crossTileID){var o\u003dthis.indexedSymbolInstances[a.key];if(o)for(var s\u003dthis.getScaledCoordinates(a,e),l\u003d0,c\u003do;l\u003cc.length;l+\u003d1){var u\u003dc[l];if(Math.abs(u.coord.x-s.x)\u003c\u003dn\u0026\u0026Math.abs(u.coord.y-s.y)\u003c\u003dn\u0026\u0026!r[u.crossTileID]){r[u.crossTileID]\u003d!0,a.crossTileID\u003du.crossTileID;break}}}}};var Fe\u003dfunction(){this.maxCrossTileID\u003d0};Fe.prototype.generate\u003dfunction(){return++this.maxCrossTileID};var Be\u003dfunction(){this.indexes\u003d{},this.usedCrossTileIDs\u003d{},this.lng\u003d0};Be.prototype.handleWrapJump\u003dfunction(t){var e\u003dMath.round((t-this.lng)/360);if(0!\u003d\u003de)for(var r in this.indexes){var n\u003dthis.indexes[r],i\u003d{};for(var a in n){var o\u003dn[a];o.tileID\u003do.tileID.unwrapTo(o.tileID.wrap+e),i[o.tileID.key]\u003do}this.indexes[r]\u003di}this.lng\u003dt},Be.prototype.addBucket\u003dfunction(t,e,r){if(this.indexes[t.overscaledZ]\u0026\u0026this.indexes[t.overscaledZ][t.key]){if(this.indexes[t.overscaledZ][t.key].bucketInstanceId\u003d\u003d\u003de.bucketInstanceId)return!1;this.removeBucketCrossTileIDs(t.overscaledZ,this.indexes[t.overscaledZ][t.key])}for(var n\u003d0;n\u003ce.symbolInstances.length;n++){e.symbolInstances.get(n).crossTileID\u003d0}this.usedCrossTileIDs[t.overscaledZ]||(this.usedCrossTileIDs[t.overscaledZ]\u003d{});var i\u003dthis.usedCrossTileIDs[t.overscaledZ];for(var a in this.indexes){var o\u003dthis.indexes[a];if(Number(a)\u003et.overscaledZ)for(var s in o){var l\u003do[s];l.tileID.isChildOf(t)\u0026\u0026l.findMatches(e.symbolInstances,t,i)}else{var c\u003do[t.scaledTo(Number(a)).key];c\u0026\u0026c.findMatches(e.symbolInstances,t,i)}}for(var u\u003d0;u\u003ce.symbolInstances.length;u++){var f\u003de.symbolInstances.get(u);f.crossTileID||(f.crossTileID\u003dr.generate(),i[f.crossTileID]\u003d!0)}return void 0\u003d\u003d\u003dthis.indexes[t.overscaledZ]\u0026\u0026(this.indexes[t.overscaledZ]\u003d{}),this.indexes[t.overscaledZ][t.key]\u003dnew Re(t,e.symbolInstances,e.bucketInstanceId),!0},Be.prototype.removeBucketCrossTileIDs\u003dfunction(t,e){for(var r in e.indexedSymbolInstances)for(var n\u003d0,i\u003de.indexedSymbolInstances[r];n\u003ci.length;n+\u003d1){var a\u003di[n];delete this.usedCrossTileIDs[t][a.crossTileID]}},Be.prototype.removeStaleBuckets\u003dfunction(t){var e\u003d!1;for(var r in this.indexes){var n\u003dthis.indexes[r];for(var i in n)t[n[i].bucketInstanceId]||(this.removeBucketCrossTileIDs(r,n[i]),delete n[i],e\u003d!0)}return e};var Ne\u003dfunction(){this.layerIndexes\u003d{},this.crossTileIDs\u003dnew Fe,this.maxBucketInstanceId\u003d0,this.bucketsInCurrentPlacement\u003d{}};Ne.prototype.addLayer\u003dfunction(t,e,r){var n\u003dthis.layerIndexes[t.id];void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dthis.layerIndexes[t.id]\u003dnew Be);var i\u003d!1,a\u003d{};n.handleWrapJump(r);for(var o\u003d0,s\u003de;o\u003cs.length;o+\u003d1){var l\u003ds[o],c\u003dl.getBucket(t);c\u0026\u0026t.id\u003d\u003d\u003dc.layerIds[0]\u0026\u0026(c.bucketInstanceId||(c.bucketInstanceId\u003d++this.maxBucketInstanceId),n.addBucket(l.tileID,c,this.crossTileIDs)\u0026\u0026(i\u003d!0),a[c.bucketInstanceId]\u003d!0)}return n.removeStaleBuckets(a)\u0026\u0026(i\u003d!0),i},Ne.prototype.pruneUnusedLayers\u003dfunction(t){var e\u003d{};for(var r in t.forEach((function(t){e[t]\u003d!0})),this.layerIndexes)e[r]||delete this.layerIndexes[r]};var je\u003dfunction(e,r){return t.emitValidationErrors(e,r\u0026\u0026r.filter((function(t){return\"source.canvas\"!\u003d\u003dt.identifier})))},Ue\u003dt.pick(Ut,[\"addLayer\",\"removeLayer\",\"setPaintProperty\",\"setLayoutProperty\",\"setFilter\",\"addSource\",\"removeSource\",\"setLayerZoomRange\",\"setLight\",\"setTransition\",\"setGeoJSONSourceData\"]),Ve\u003dt.pick(Ut,[\"setCenter\",\"setZoom\",\"setBearing\",\"setPitch\"]),qe\u003dfunction(){var e\u003d{},r\u003dt.styleSpec.$version;for(var n in t.styleSpec.$root){var i\u003dt.styleSpec.$root[n];if(i.required){var a\u003dnull;null!\u003d(a\u003d\"version\"\u003d\u003d\u003dn?r:\"array\"\u003d\u003d\u003di.type?[]:{})\u0026\u0026(e[n]\u003da)}}return e}(),He\u003dfunction(e){function r(n,i){var a\u003dthis;void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{}),e.call(this),this.map\u003dn,this.dispatcher\u003dnew k(Bt(),this),this.imageManager\u003dnew h,this.imageManager.setEventedParent(this),this.glyphManager\u003dnew x(n._requestManager,i.localIdeographFontFamily),this.lineAtlas\u003dnew T(256,512),this.crossTileSymbolIndex\u003dnew Ne,this._layers\u003d{},this._serializedLayers\u003d{},this._order\u003d[],this.sourceCaches\u003d{},this.zoomHistory\u003dnew t.ZoomHistory,this._loaded\u003d!1,this._availableImages\u003d[],this._resetUpdates(),this.dispatcher.broadcast(\"setReferrer\",t.getReferrer());var o\u003dthis;this._rtlTextPluginCallback\u003dr.registerForPluginStateChange((function(e){var r\u003d{pluginStatus:e.pluginStatus,pluginURL:e.pluginURL};o.dispatcher.broadcast(\"syncRTLPluginState\",r,(function(e,r){if((t.triggerPluginCompletionEvent(e),r)\u0026\u0026r.every((function(t){return t})))for(var n in o.sourceCaches)o.sourceCaches[n].reload()}))})),this.on(\"data\",(function(t){if(\"source\"\u003d\u003d\u003dt.dataType\u0026\u0026\"metadata\"\u003d\u003d\u003dt.sourceDataType){var e\u003da.sourceCaches[t.sourceId];if(e){var r\u003de.getSource();if(r\u0026\u0026r.vectorLayerIds)for(var n in a._layers){var i\u003da._layers[n];i.source\u003d\u003d\u003dr.id\u0026\u0026a._validateLayer(i)}}}}))}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.loadURL\u003dfunction(e,r){var n\u003dthis;void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"}));var i\u003d\"boolean\"\u003d\u003dtypeof r.validate?r.validate:!t.isMapboxURL(e);e\u003dthis.map._requestManager.normalizeStyleURL(e,r.accessToken);var a\u003dthis.map._requestManager.transformRequest(e,t.ResourceType.Style);this._request\u003dt.getJSON(a,(function(e,r){n._request\u003dnull,e?n.fire(new t.ErrorEvent(e)):r\u0026\u0026n._load(r,i)}))},r.prototype.loadJSON\u003dfunction(e,r){var n\u003dthis;void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._request\u003dt.browser.frame((function(){n._request\u003dnull,n._load(e,!1!\u003d\u003dr.validate)}))},r.prototype.loadEmpty\u003dfunction(){this.fire(new t.Event(\"dataloading\",{dataType:\"style\"})),this._load(qe,!1)},r.prototype._load\u003dfunction(e,r){if(!r||!je(this,t.validateStyle(e))){for(var n in this._loaded\u003d!0,this.stylesheet\u003de,e.sources)this.addSource(n,e.sources[n],{validate:!1});e.sprite?this._loadSprite(e.sprite):this.imageManager.setLoaded(!0),this.glyphManager.setURL(e.glyphs);var i\u003djt(this.stylesheet.layers);this._order\u003di.map((function(t){return t.id})),this._layers\u003d{},this._serializedLayers\u003d{};for(var a\u003d0,o\u003di;a\u003co.length;a+\u003d1){var s\u003do[a];(s\u003dt.createStyleLayer(s)).setEventedParent(this,{layer:{id:s.id}}),this._layers[s.id]\u003ds,this._serializedLayers[s.id]\u003ds.serialize()}this.dispatcher.broadcast(\"setLayers\",this._serializeLayers(this._order)),this.light\u003dnew w(this.stylesheet.light),this.fire(new t.Event(\"data\",{dataType:\"style\"})),this.fire(new t.Event(\"style.load\"))}},r.prototype._loadSprite\u003dfunction(e){var r\u003dthis;this._spriteRequest\u003dfunction(e,r,n){var i,a,o,s\u003dt.browser.devicePixelRatio\u003e1?\"@2x\":\"\",l\u003dt.getJSON(r.transformRequest(r.normalizeSpriteURL(e,s,\".json\"),t.ResourceType.SpriteJSON),(function(t,e){l\u003dnull,o||(o\u003dt,i\u003de,u())})),c\u003dt.getImage(r.transformRequest(r.normalizeSpriteURL(e,s,\".png\"),t.ResourceType.SpriteImage),(function(t,e){c\u003dnull,o||(o\u003dt,a\u003de,u())}));function u(){if(o)n(o);else if(i\u0026\u0026a){var e\u003dt.browser.getImageData(a),r\u003d{};for(var s in i){var l\u003di[s],c\u003dl.width,u\u003dl.height,f\u003dl.x,h\u003dl.y,p\u003dl.sdf,d\u003dl.pixelRatio,m\u003dl.stretchX,g\u003dl.stretchY,v\u003dl.content,y\u003dnew t.RGBAImage({width:c,height:u});t.RGBAImage.copy(e,y,{x:f,y:h},{x:0,y:0},{width:c,height:u}),r[s]\u003d{data:y,pixelRatio:d,sdf:p,stretchX:m,stretchY:g,content:v}}n(null,r)}}return{cancel:function(){l\u0026\u0026(l.cancel(),l\u003dnull),c\u0026\u0026(c.cancel(),c\u003dnull)}}}(e,this.map._requestManager,(function(e,n){if(r._spriteRequest\u003dnull,e)r.fire(new t.ErrorEvent(e));else if(n)for(var i in n)r.imageManager.addImage(i,n[i]);r.imageManager.setLoaded(!0),r._availableImages\u003dr.imageManager.listImages(),r.dispatcher.broadcast(\"setImages\",r._availableImages),r.fire(new t.Event(\"data\",{dataType:\"style\"}))}))},r.prototype._validateLayer\u003dfunction(e){var r\u003dthis.sourceCaches[e.source];if(r){var n\u003de.sourceLayer;if(n){var i\u003dr.getSource();(\"geojson\"\u003d\u003d\u003di.type||i.vectorLayerIds\u0026\u0026-1\u003d\u003d\u003di.vectorLayerIds.indexOf(n))\u0026\u0026this.fire(new t.ErrorEvent(new Error(\u0027Source layer \"\u0027+n+\u0027\" does not exist on source \"\u0027+i.id+\u0027\" as specified by style layer \"\u0027+e.id+\u0027\"\u0027)))}}},r.prototype.loaded\u003dfunction(){if(!this._loaded)return!1;if(Object.keys(this._updatedSources).length)return!1;for(var t in this.sourceCaches)if(!this.sourceCaches[t].loaded())return!1;return!!this.imageManager.isLoaded()},r.prototype._serializeLayers\u003dfunction(t){for(var e\u003d[],r\u003d0,n\u003dt;r\u003cn.length;r+\u003d1){var i\u003dn[r],a\u003dthis._layers[i];\"custom\"!\u003d\u003da.type\u0026\u0026e.push(a.serialize())}return e},r.prototype.hasTransitions\u003dfunction(){if(this.light\u0026\u0026this.light.hasTransition())return!0;for(var t in this.sourceCaches)if(this.sourceCaches[t].hasTransition())return!0;for(var e in this._layers)if(this._layers[e].hasTransition())return!0;return!1},r.prototype._checkLoaded\u003dfunction(){if(!this._loaded)throw new Error(\"Style is not done loading\")},r.prototype.update\u003dfunction(e){if(this._loaded){var r\u003dthis._changed;if(this._changed){var n\u003dObject.keys(this._updatedLayers),i\u003dObject.keys(this._removedLayers);for(var a in(n.length||i.length)\u0026\u0026this._updateWorkerLayers(n,i),this._updatedSources){var o\u003dthis._updatedSources[a];\"reload\"\u003d\u003d\u003do?this._reloadSource(a):\"clear\"\u003d\u003d\u003do\u0026\u0026this._clearSource(a)}for(var s in this._updateTilesForChangedImages(),this._updatedPaintProps)this._layers[s].updateTransitions(e);this.light.updateTransitions(e),this._resetUpdates()}for(var l in this.sourceCaches)this.sourceCaches[l].used\u003d!1;for(var c\u003d0,u\u003dthis._order;c\u003cu.length;c+\u003d1){var f\u003du[c],h\u003dthis._layers[f];h.recalculate(e,this._availableImages),!h.isHidden(e.zoom)\u0026\u0026h.source\u0026\u0026(this.sourceCaches[h.source].used\u003d!0)}this.light.recalculate(e),this.z\u003de.zoom,r\u0026\u0026this.fire(new t.Event(\"data\",{dataType:\"style\"}))}},r.prototype._updateTilesForChangedImages\u003dfunction(){var t\u003dObject.keys(this._changedImages);if(t.length){for(var e in this.sourceCaches)this.sourceCaches[e].reloadTilesForDependencies([\"icons\",\"patterns\"],t);this._changedImages\u003d{}}},r.prototype._updateWorkerLayers\u003dfunction(t,e){this.dispatcher.broadcast(\"updateLayers\",{layers:this._serializeLayers(t),removedIds:e})},r.prototype._resetUpdates\u003dfunction(){this._changed\u003d!1,this._updatedLayers\u003d{},this._removedLayers\u003d{},this._updatedSources\u003d{},this._updatedPaintProps\u003d{},this._changedImages\u003d{}},r.prototype.setState\u003dfunction(e){var r\u003dthis;if(this._checkLoaded(),je(this,t.validateStyle(e)))return!1;(e\u003dt.clone$1(e)).layers\u003djt(e.layers);var n\u003dZt(this.serialize(),e).filter((function(t){return!(t.command in Ve)}));if(0\u003d\u003d\u003dn.length)return!1;var i\u003dn.filter((function(t){return!(t.command in Ue)}));if(i.length\u003e0)throw new Error(\"Unimplemented: \"+i.map((function(t){return t.command})).join(\", \")+\".\");return n.forEach((function(t){\"setTransition\"!\u003d\u003dt.command\u0026\u0026r[t.command].apply(r,t.args)})),this.stylesheet\u003de,!0},r.prototype.addImage\u003dfunction(e,r){if(this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"An image with this name already exists.\")));this.imageManager.addImage(e,r),this._availableImages\u003dthis.imageManager.listImages(),this._changedImages[e]\u003d!0,this._changed\u003d!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}))},r.prototype.updateImage\u003dfunction(t,e){this.imageManager.updateImage(t,e)},r.prototype.getImage\u003dfunction(t){return this.imageManager.getImage(t)},r.prototype.removeImage\u003dfunction(e){if(!this.getImage(e))return this.fire(new t.ErrorEvent(new Error(\"No image with this name exists.\")));this.imageManager.removeImage(e),this._availableImages\u003dthis.imageManager.listImages(),this._changedImages[e]\u003d!0,this._changed\u003d!0,this.fire(new t.Event(\"data\",{dataType:\"style\"}))},r.prototype.listImages\u003dfunction(){return this._checkLoaded(),this.imageManager.listImages()},r.prototype.addSource\u003dfunction(e,r,n){var i\u003dthis;if(void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),this._checkLoaded(),void 0!\u003d\u003dthis.sourceCaches[e])throw new Error(\"There is already a source with this ID\");if(!r.type)throw new Error(\"The type property must be defined, but the only the following properties were given: \"+Object.keys(r).join(\", \")+\".\");if(!([\"vector\",\"raster\",\"geojson\",\"video\",\"image\"].indexOf(r.type)\u003e\u003d0)||!this._validate(t.validateStyle.source,\"sources.\"+e,r,null,n)){this.map\u0026\u0026this.map._collectResourceTiming\u0026\u0026(r.collectResourceTiming\u003d!0);var a\u003dthis.sourceCaches[e]\u003dnew Ct(e,r,this.dispatcher);a.style\u003dthis,a.setEventedParent(this,(function(){return{isSourceLoaded:i.loaded(),source:a.serialize(),sourceId:e}})),a.onAdd(this.map),this._changed\u003d!0}},r.prototype.removeSource\u003dfunction(e){if(this._checkLoaded(),void 0\u003d\u003d\u003dthis.sourceCaches[e])throw new Error(\"There is no source with this ID\");for(var r in this._layers)if(this._layers[r].source\u003d\u003d\u003de)return this.fire(new t.ErrorEvent(new Error(\u0027Source \"\u0027+e+\u0027\" cannot be removed while layer \"\u0027+r+\u0027\" is using it.\u0027)));var n\u003dthis.sourceCaches[e];delete this.sourceCaches[e],delete this._updatedSources[e],n.fire(new t.Event(\"data\",{sourceDataType:\"metadata\",dataType:\"source\",sourceId:e})),n.setEventedParent(null),n.clearTiles(),n.onRemove\u0026\u0026n.onRemove(this.map),this._changed\u003d!0},r.prototype.setGeoJSONSourceData\u003dfunction(t,e){this._checkLoaded(),this.sourceCaches[t].getSource().setData(e),this._changed\u003d!0},r.prototype.getSource\u003dfunction(t){return this.sourceCaches[t]\u0026\u0026this.sourceCaches[t].getSource()},r.prototype.addLayer\u003dfunction(e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),this._checkLoaded();var i\u003de.id;if(this.getLayer(i))this.fire(new t.ErrorEvent(new Error(\u0027Layer with id \"\u0027+i+\u0027\" already exists on this map\u0027)));else{var a;if(\"custom\"\u003d\u003d\u003de.type){if(je(this,t.validateCustomStyleLayer(e)))return;a\u003dt.createStyleLayer(e)}else{if(\"object\"\u003d\u003dtypeof e.source\u0026\u0026(this.addSource(i,e.source),e\u003dt.clone$1(e),e\u003dt.extend(e,{source:i})),this._validate(t.validateStyle.layer,\"layers.\"+i,e,{arrayIndex:-1},n))return;a\u003dt.createStyleLayer(e),this._validateLayer(a),a.setEventedParent(this,{layer:{id:i}}),this._serializedLayers[a.id]\u003da.serialize()}var o\u003dr?this._order.indexOf(r):this._order.length;if(r\u0026\u0026-1\u003d\u003d\u003do)this.fire(new t.ErrorEvent(new Error(\u0027Layer with id \"\u0027+r+\u0027\" does not exist on this map.\u0027)));else{if(this._order.splice(o,0,i),this._layerOrderChanged\u003d!0,this._layers[i]\u003da,this._removedLayers[i]\u0026\u0026a.source\u0026\u0026\"custom\"!\u003d\u003da.type){var s\u003dthis._removedLayers[i];delete this._removedLayers[i],s.type!\u003d\u003da.type?this._updatedSources[a.source]\u003d\"clear\":(this._updatedSources[a.source]\u003d\"reload\",this.sourceCaches[a.source].pause())}this._updateLayer(a),a.onAdd\u0026\u0026a.onAdd(this.map)}}},r.prototype.moveLayer\u003dfunction(e,r){if(this._checkLoaded(),this._changed\u003d!0,this._layers[e]){if(e!\u003d\u003dr){var n\u003dthis._order.indexOf(e);this._order.splice(n,1);var i\u003dr?this._order.indexOf(r):this._order.length;r\u0026\u0026-1\u003d\u003d\u003di?this.fire(new t.ErrorEvent(new Error(\u0027Layer with id \"\u0027+r+\u0027\" does not exist on this map.\u0027))):(this._order.splice(i,0,e),this._layerOrderChanged\u003d!0)}}else this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+e+\"\u0027 does not exist in the map\u0027s style and cannot be moved.\")))},r.prototype.removeLayer\u003dfunction(e){this._checkLoaded();var r\u003dthis._layers[e];if(r){r.setEventedParent(null);var n\u003dthis._order.indexOf(e);this._order.splice(n,1),this._layerOrderChanged\u003d!0,this._changed\u003d!0,this._removedLayers[e]\u003dr,delete this._layers[e],delete this._serializedLayers[e],delete this._updatedLayers[e],delete this._updatedPaintProps[e],r.onRemove\u0026\u0026r.onRemove(this.map)}else this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+e+\"\u0027 does not exist in the map\u0027s style and cannot be removed.\")))},r.prototype.getLayer\u003dfunction(t){return this._layers[t]},r.prototype.hasLayer\u003dfunction(t){return t in this._layers},r.prototype.setLayerZoomRange\u003dfunction(e,r,n){this._checkLoaded();var i\u003dthis.getLayer(e);i?i.minzoom\u003d\u003d\u003dr\u0026\u0026i.maxzoom\u003d\u003d\u003dn||(null!\u003dr\u0026\u0026(i.minzoom\u003dr),null!\u003dn\u0026\u0026(i.maxzoom\u003dn),this._updateLayer(i)):this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+e+\"\u0027 does not exist in the map\u0027s style and cannot have zoom extent.\")))},r.prototype.setFilter\u003dfunction(e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),this._checkLoaded();var i\u003dthis.getLayer(e);if(i){if(!t.deepEqual(i.filter,r))return null\u003d\u003dr?(i.filter\u003dvoid 0,void this._updateLayer(i)):void(this._validate(t.validateStyle.filter,\"layers.\"+i.id+\".filter\",r,null,n)||(i.filter\u003dt.clone$1(r),this._updateLayer(i)))}else this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+e+\"\u0027 does not exist in the map\u0027s style and cannot be filtered.\")))},r.prototype.getFilter\u003dfunction(e){return t.clone$1(this.getLayer(e).filter)},r.prototype.setLayoutProperty\u003dfunction(e,r,n,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{}),this._checkLoaded();var a\u003dthis.getLayer(e);a?t.deepEqual(a.getLayoutProperty(r),n)||(a.setLayoutProperty(r,n,i),this._updateLayer(a)):this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+e+\"\u0027 does not exist in the map\u0027s style and cannot be styled.\")))},r.prototype.getLayoutProperty\u003dfunction(e,r){var n\u003dthis.getLayer(e);if(n)return n.getLayoutProperty(r);this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+e+\"\u0027 does not exist in the map\u0027s style.\")))},r.prototype.setPaintProperty\u003dfunction(e,r,n,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003d{}),this._checkLoaded();var a\u003dthis.getLayer(e);a?t.deepEqual(a.getPaintProperty(r),n)||(a.setPaintProperty(r,n,i)\u0026\u0026this._updateLayer(a),this._changed\u003d!0,this._updatedPaintProps[e]\u003d!0):this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+e+\"\u0027 does not exist in the map\u0027s style and cannot be styled.\")))},r.prototype.getPaintProperty\u003dfunction(t,e){return this.getLayer(t).getPaintProperty(e)},r.prototype.setFeatureState\u003dfunction(e,r){this._checkLoaded();var n\u003de.source,i\u003de.sourceLayer,a\u003dthis.sourceCaches[n];if(void 0!\u003d\u003da){var o\u003da.getSource().type;\"geojson\"\u003d\u003d\u003do\u0026\u0026i?this.fire(new t.ErrorEvent(new Error(\"GeoJSON sources cannot have a sourceLayer parameter.\"))):\"vector\"!\u003d\u003do||i?(void 0\u003d\u003d\u003de.id\u0026\u0026this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),a.setFeatureState(i,e.id,r)):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source \u0027\"+n+\"\u0027 does not exist in the map\u0027s style.\")))},r.prototype.removeFeatureState\u003dfunction(e,r){this._checkLoaded();var n\u003de.source,i\u003dthis.sourceCaches[n];if(void 0!\u003d\u003di){var a\u003di.getSource().type,o\u003d\"vector\"\u003d\u003d\u003da?e.sourceLayer:void 0;\"vector\"!\u003d\u003da||o?r\u0026\u0026\"string\"!\u003dtypeof e.id\u0026\u0026\"number\"!\u003dtypeof e.id?this.fire(new t.ErrorEvent(new Error(\"A feature id is requred to remove its specific state property.\"))):i.removeFeatureState(o,e.id,r):this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source \u0027\"+n+\"\u0027 does not exist in the map\u0027s style.\")))},r.prototype.getFeatureState\u003dfunction(e){this._checkLoaded();var r\u003de.source,n\u003de.sourceLayer,i\u003dthis.sourceCaches[r];if(void 0!\u003d\u003di){if(\"vector\"!\u003d\u003di.getSource().type||n)return void 0\u003d\u003d\u003de.id\u0026\u0026this.fire(new t.ErrorEvent(new Error(\"The feature id parameter must be provided.\"))),i.getFeatureState(n,e.id);this.fire(new t.ErrorEvent(new Error(\"The sourceLayer parameter must be provided for vector source types.\")))}else this.fire(new t.ErrorEvent(new Error(\"The source \u0027\"+r+\"\u0027 does not exist in the map\u0027s style.\")))},r.prototype.getTransition\u003dfunction(){return t.extend({duration:300,delay:0},this.stylesheet\u0026\u0026this.stylesheet.transition)},r.prototype.serialize\u003dfunction(){return t.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,light:this.stylesheet.light,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:t.mapObject(this.sourceCaches,(function(t){return t.serialize()})),layers:this._serializeLayers(this._order)},(function(t){return void 0!\u003d\u003dt}))},r.prototype._updateLayer\u003dfunction(t){this._updatedLayers[t.id]\u003d!0,t.source\u0026\u0026!this._updatedSources[t.source]\u0026\u0026\"raster\"!\u003d\u003dthis.sourceCaches[t.source].getSource().type\u0026\u0026(this._updatedSources[t.source]\u003d\"reload\",this.sourceCaches[t.source].pause()),this._changed\u003d!0},r.prototype._flattenAndSortRenderedFeatures\u003dfunction(t){for(var e\u003dthis,r\u003dfunction(t){return\"fill-extrusion\"\u003d\u003d\u003de._layers[t].type},n\u003d{},i\u003d[],a\u003dthis._order.length-1;a\u003e\u003d0;a--){var o\u003dthis._order[a];if(r(o)){n[o]\u003da;for(var s\u003d0,l\u003dt;s\u003cl.length;s+\u003d1){var c\u003dl[s][o];if(c)for(var u\u003d0,f\u003dc;u\u003cf.length;u+\u003d1){var h\u003df[u];i.push(h)}}}}i.sort((function(t,e){return e.intersectionZ-t.intersectionZ}));for(var p\u003d[],d\u003dthis._order.length-1;d\u003e\u003d0;d--){var m\u003dthis._order[d];if(r(m))for(var g\u003di.length-1;g\u003e\u003d0;g--){var v\u003di[g].feature;if(n[v.layer.id]\u003cd)break;p.push(v),i.pop()}else for(var y\u003d0,x\u003dt;y\u003cx.length;y+\u003d1){var b\u003dx[y][m];if(b)for(var _\u003d0,w\u003db;_\u003cw.length;_+\u003d1){var T\u003dw[_];p.push(T.feature)}}}return p},r.prototype.queryRenderedFeatures\u003dfunction(e,r,n){r\u0026\u0026r.filter\u0026\u0026this._validate(t.validateStyle.filter,\"queryRenderedFeatures.filter\",r.filter,null,r);var i\u003d{};if(r\u0026\u0026r.layers){if(!Array.isArray(r.layers))return this.fire(new t.ErrorEvent(new Error(\"parameters.layers must be an Array.\"))),[];for(var a\u003d0,o\u003dr.layers;a\u003co.length;a+\u003d1){var s\u003do[a],l\u003dthis._layers[s];if(!l)return this.fire(new t.ErrorEvent(new Error(\"The layer \u0027\"+s+\"\u0027 does not exist in the map\u0027s style and cannot be queried for features.\"))),[];i[l.source]\u003d!0}}var c\u003d[];for(var u in r.availableImages\u003dthis._availableImages,this.sourceCaches)r.layers\u0026\u0026!i[u]||c.push(F(this.sourceCaches[u],this._layers,this._serializedLayers,e,r,n));return this.placement\u0026\u0026c.push(function(t,e,r,n,i,a,o){for(var s\u003d{},l\u003da.queryRenderedSymbols(n),c\u003d[],u\u003d0,f\u003dObject.keys(l).map(Number);u\u003cf.length;u+\u003d1){var h\u003df[u];c.push(o[h])}c.sort(B);for(var p\u003dfunction(){var r\u003dm[d],n\u003dr.featureIndex.lookupSymbolFeatures(l[r.bucketInstanceId],e,r.bucketIndex,r.sourceLayerIndex,i.filter,i.layers,i.availableImages,t);for(var a in n){var o\u003ds[a]\u003ds[a]||[],c\u003dn[a];c.sort((function(t,e){var n\u003dr.featureSortOrder;if(n){var i\u003dn.indexOf(t.featureIndex);return n.indexOf(e.featureIndex)-i}return e.featureIndex-t.featureIndex}));for(var u\u003d0,f\u003dc;u\u003cf.length;u+\u003d1){var h\u003df[u];o.push(h)}}},d\u003d0,m\u003dc;d\u003cm.length;d+\u003d1)p();var g\u003dfunction(e){s[e].forEach((function(n){var i\u003dn.feature,a\u003dt[e],o\u003dr[a.source].getFeatureState(i.layer[\"source-layer\"],i.id);i.source\u003di.layer.source,i.layer[\"source-layer\"]\u0026\u0026(i.sourceLayer\u003di.layer[\"source-layer\"]),i.state\u003do}))};for(var v in s)g(v);return s}(this._layers,this._serializedLayers,this.sourceCaches,e,r,this.placement.collisionIndex,this.placement.retainedQueryData)),this._flattenAndSortRenderedFeatures(c)},r.prototype.querySourceFeatures\u003dfunction(e,r){r\u0026\u0026r.filter\u0026\u0026this._validate(t.validateStyle.filter,\"querySourceFeatures.filter\",r.filter,null,r);var n\u003dthis.sourceCaches[e];return n?function(t,e){for(var r\u003dt.getRenderableIds().map((function(e){return t.getTileByID(e)})),n\u003d[],i\u003d{},a\u003d0;a\u003cr.length;a++){var o\u003dr[a],s\u003do.tileID.canonical.key;i[s]||(i[s]\u003d!0,o.querySourceFeatures(n,e))}return n}(n,r):[]},r.prototype.addSourceType\u003dfunction(t,e,n){return r.getSourceType(t)?n(new Error(\u0027A source type called \"\u0027+t+\u0027\" already exists.\u0027)):(r.setSourceType(t,e),e.workerSourceURL?void this.dispatcher.broadcast(\"loadWorkerSource\",{name:t,url:e.workerSourceURL},n):n(null,null))},r.prototype.getLight\u003dfunction(){return this.light.getLight()},r.prototype.setLight\u003dfunction(e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),this._checkLoaded();var n\u003dthis.light.getLight(),i\u003d!1;for(var a in e)if(!t.deepEqual(e[a],n[a])){i\u003d!0;break}if(i){var o\u003d{now:t.browser.now(),transition:t.extend({duration:300,delay:0},this.stylesheet.transition)};this.light.setLight(e,r),this.light.updateTransitions(o)}},r.prototype._validate\u003dfunction(e,r,n,i,a){return void 0\u003d\u003d\u003da\u0026\u0026(a\u003d{}),(!a||!1!\u003d\u003da.validate)\u0026\u0026je(this,e.call(t.validateStyle,t.extend({key:r,style:this.serialize(),value:n,styleSpec:t.styleSpec},i)))},r.prototype._remove\u003dfunction(){for(var e in this._request\u0026\u0026(this._request.cancel(),this._request\u003dnull),this._spriteRequest\u0026\u0026(this._spriteRequest.cancel(),this._spriteRequest\u003dnull),t.evented.off(\"pluginStateChange\",this._rtlTextPluginCallback),this._layers){this._layers[e].setEventedParent(null)}for(var r in this.sourceCaches)this.sourceCaches[r].clearTiles(),this.sourceCaches[r].setEventedParent(null);this.imageManager.setEventedParent(null),this.setEventedParent(null),this.dispatcher.remove()},r.prototype._clearSource\u003dfunction(t){this.sourceCaches[t].clearTiles()},r.prototype._reloadSource\u003dfunction(t){this.sourceCaches[t].resume(),this.sourceCaches[t].reload()},r.prototype._updateSources\u003dfunction(t){for(var e in this.sourceCaches)this.sourceCaches[e].update(t)},r.prototype._generateCollisionBoxes\u003dfunction(){for(var t in this.sourceCaches)this._reloadSource(t)},r.prototype._updatePlacement\u003dfunction(e,r,n,i,a){void 0\u003d\u003d\u003da\u0026\u0026(a\u003d!1);for(var o\u003d!1,s\u003d!1,l\u003d{},c\u003d0,u\u003dthis._order;c\u003cu.length;c+\u003d1){var f\u003du[c],h\u003dthis._layers[f];if(\"symbol\"\u003d\u003d\u003dh.type){if(!l[h.source]){var p\u003dthis.sourceCaches[h.source];l[h.source]\u003dp.getRenderableIds(!0).map((function(t){return p.getTileByID(t)})).sort((function(t,e){return e.tileID.overscaledZ-t.tileID.overscaledZ||(t.tileID.isLessThan(e.tileID)?-1:1)}))}var d\u003dthis.crossTileSymbolIndex.addLayer(h,l[h.source],e.center.lng);o\u003do||d}}if(this.crossTileSymbolIndex.pruneUnusedLayers(this._order),((a\u003da||this._layerOrderChanged||0\u003d\u003d\u003dn)||!this.pauseablePlacement||this.pauseablePlacement.isDone()\u0026\u0026!this.placement.stillRecent(t.browser.now(),e.zoom))\u0026\u0026(this.pauseablePlacement\u003dnew ze(e,this._order,a,r,n,i,this.placement),this._layerOrderChanged\u003d!1),this.pauseablePlacement.isDone()?this.placement.setStale():(this.pauseablePlacement.continuePlacement(this._order,this._layers,l),this.pauseablePlacement.isDone()\u0026\u0026(this.placement\u003dthis.pauseablePlacement.commit(t.browser.now()),s\u003d!0),o\u0026\u0026this.pauseablePlacement.placement.setStale()),s||o)for(var m\u003d0,g\u003dthis._order;m\u003cg.length;m+\u003d1){var v\u003dg[m],y\u003dthis._layers[v];\"symbol\"\u003d\u003d\u003dy.type\u0026\u0026this.placement.updateLayerOpacities(y,l[y.source])}return!this.pauseablePlacement.isDone()||this.placement.hasTransitions(t.browser.now())},r.prototype._releaseSymbolFadeTiles\u003dfunction(){for(var t in this.sourceCaches)this.sourceCaches[t].releaseSymbolFadeTiles()},r.prototype.getImages\u003dfunction(t,e,r){this.imageManager.getImages(e.icons,r),this._updateTilesForChangedImages();var n\u003dthis.sourceCaches[e.source];n\u0026\u0026n.setDependencies(e.tileID.key,e.type,e.icons)},r.prototype.getGlyphs\u003dfunction(t,e,r){this.glyphManager.getGlyphs(e.stacks,r)},r.prototype.getResource\u003dfunction(e,r,n){return t.makeRequest(r,n)},r}(t.Evented);He.getSourceType\u003dfunction(t){return D[t]},He.setSourceType\u003dfunction(t,e){D[t]\u003de},He.registerForPluginStateChange\u003dt.registerForPluginStateChange;var Ge\u003dt.createLayout([{name:\"a_pos\",type:\"Int16\",components:2}]),Ye\u003dyr(\"#ifdef GL_ES\\nprecision mediump float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\",\"#ifdef GL_ES\\nprecision highp float;\\n#else\\n#if !defined(lowp)\\n#define lowp\\n#endif\\n#if !defined(mediump)\\n#define mediump\\n#endif\\n#if !defined(highp)\\n#define highp\\n#endif\\n#endif\\nvec2 unpack_float(const float packedValue) {int packedIntValue\u003dint(packedValue);int v0\u003dpackedIntValue/256;return vec2(v0,packedIntValue-v0*256);}vec2 unpack_opacity(const float packedOpacity) {int intOpacity\u003dint(packedOpacity)/2;return vec2(float(intOpacity)/127.0,mod(packedOpacity,2.0));}vec4 decode_color(const vec2 encodedColor) {return vec4(unpack_float(encodedColor[0])/255.0,unpack_float(encodedColor[1])/255.0\\n);}float unpack_mix_vec2(const vec2 packedValue,const float t) {return mix(packedValue[0],packedValue[1],t);}vec4 unpack_mix_color(const vec4 packedColors,const float t) {vec4 minColor\u003ddecode_color(vec2(packedColors[0],packedColors[1]));vec4 maxColor\u003ddecode_color(vec2(packedColors[2],packedColors[3]));return mix(minColor,maxColor,t);}vec2 get_pattern_pos(const vec2 pixel_coord_upper,const vec2 pixel_coord_lower,const vec2 pattern_size,const float tile_units_to_pixels,const vec2 pos) {vec2 offset\u003dmod(mod(mod(pixel_coord_upper,pattern_size)*256.0,pattern_size)*256.0+pixel_coord_lower,pattern_size);return (tile_units_to_pixels*pos+offset)/pattern_size;}\"),We\u003dyr(\"uniform vec4 u_color;uniform float u_opacity;void main() {gl_FragColor\u003du_color*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position\u003du_matrix*vec4(a_pos,0,1);}\"),Xe\u003dyr(\"uniform vec2 u_pattern_tl_a;uniform vec2 u_pattern_br_a;uniform vec2 u_pattern_tl_b;uniform vec2 u_pattern_br_b;uniform vec2 u_texsize;uniform float u_mix;uniform float u_opacity;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {vec2 imagecoord\u003dmod(v_pos_a,1.0);vec2 pos\u003dmix(u_pattern_tl_a/u_texsize,u_pattern_br_a/u_texsize,imagecoord);vec4 color1\u003dtexture2D(u_image,pos);vec2 imagecoord_b\u003dmod(v_pos_b,1.0);vec2 pos2\u003dmix(u_pattern_tl_b/u_texsize,u_pattern_br_b/u_texsize,imagecoord_b);vec4 color2\u003dtexture2D(u_image,pos2);gl_FragColor\u003dmix(color1,color2,u_mix)*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pattern_size_a;uniform vec2 u_pattern_size_b;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_scale_a;uniform float u_scale_b;uniform float u_tile_units_to_pixels;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;void main() {gl_Position\u003du_matrix*vec4(a_pos,0,1);v_pos_a\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_a*u_pattern_size_a,u_tile_units_to_pixels,a_pos);v_pos_b\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,u_scale_b*u_pattern_size_b,u_tile_units_to_pixels,a_pos);}\"),Ze\u003dyr(\"varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude\u003dv_data.xy;float extrude_length\u003dlength(extrude);lowp float antialiasblur\u003dv_data.z;float antialiased_blur\u003d-max(blur,antialiasblur);float opacity_t\u003dsmoothstep(0.0,antialiased_blur,extrude_length-1.0);float color_t\u003dstroke_width \u003c 0.01 ? 0.0 : smoothstep(antialiased_blur,0.0,extrude_length-radius/(radius+stroke_width));gl_FragColor\u003dopacity_t*mix(color*opacity,stroke_color*stroke_opacity,color_t);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform bool u_scale_with_map;uniform bool u_pitch_with_map;uniform vec2 u_extrude_scale;uniform lowp float u_device_pixel_ratio;uniform highp float u_camera_to_center_distance;attribute vec2 a_pos;varying vec3 v_data;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define mediump float radius\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define highp vec4 stroke_color\\n#pragma mapbox: define mediump float stroke_width\\n#pragma mapbox: define lowp float stroke_opacity\\nvoid main(void) {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize mediump float radius\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize highp vec4 stroke_color\\n#pragma mapbox: initialize mediump float stroke_width\\n#pragma mapbox: initialize lowp float stroke_opacity\\nvec2 extrude\u003dvec2(mod(a_pos,2.0)*2.0-1.0);vec2 circle_center\u003dfloor(a_pos*0.5);if (u_pitch_with_map) {vec2 corner_position\u003dcircle_center;if (u_scale_with_map) {corner_position+\u003dextrude*(radius+stroke_width)*u_extrude_scale;} else {vec4 projected_center\u003du_matrix*vec4(circle_center,0,1);corner_position+\u003dextrude*(radius+stroke_width)*u_extrude_scale*(projected_center.w/u_camera_to_center_distance);}gl_Position\u003du_matrix*vec4(corner_position,0,1);} else {gl_Position\u003du_matrix*vec4(circle_center,0,1);if (u_scale_with_map) {gl_Position.xy+\u003dextrude*(radius+stroke_width)*u_extrude_scale*u_camera_to_center_distance;} else {gl_Position.xy+\u003dextrude*(radius+stroke_width)*u_extrude_scale*gl_Position.w;}}lowp float antialiasblur\u003d1.0/u_device_pixel_ratio/(radius+stroke_width);v_data\u003dvec3(extrude.x,extrude.y,antialiasblur);}\"),Je\u003dyr(\"void main() {gl_FragColor\u003dvec4(1.0);}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;void main() {gl_Position\u003du_matrix*vec4(a_pos,0,1);}\"),Ke\u003dyr(\"uniform highp float u_intensity;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main() {\\n#pragma mapbox: initialize highp float weight\\nfloat d\u003d-0.5*3.0*3.0*dot(v_extrude,v_extrude);float val\u003dweight*u_intensity*GAUSS_COEF*exp(d);gl_FragColor\u003dvec4(val,1.0,1.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform float u_extrude_scale;uniform float u_opacity;uniform float u_intensity;attribute vec2 a_pos;varying vec2 v_extrude;\\n#pragma mapbox: define highp float weight\\n#pragma mapbox: define mediump float radius\\nconst highp float ZERO\u003d1.0/255.0/16.0;\\n#define GAUSS_COEF 0.3989422804014327\\nvoid main(void) {\\n#pragma mapbox: initialize highp float weight\\n#pragma mapbox: initialize mediump float radius\\nvec2 unscaled_extrude\u003dvec2(mod(a_pos,2.0)*2.0-1.0);float S\u003dsqrt(-2.0*log(ZERO/weight/u_intensity/GAUSS_COEF))/3.0;v_extrude\u003dS*unscaled_extrude;vec2 extrude\u003dv_extrude*radius*u_extrude_scale;vec4 pos\u003dvec4(floor(a_pos*0.5)+extrude,0,1);gl_Position\u003du_matrix*pos;}\"),Qe\u003dyr(\"uniform sampler2D u_image;uniform sampler2D u_color_ramp;uniform float u_opacity;varying vec2 v_pos;void main() {float t\u003dtexture2D(u_image,v_pos).r;vec4 color\u003dtexture2D(u_color_ramp,vec2(t,0.5));gl_FragColor\u003dcolor*u_opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(0.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;attribute vec2 a_pos;varying vec2 v_pos;void main() {gl_Position\u003du_matrix*vec4(a_pos*u_world,0,1);v_pos.x\u003da_pos.x;v_pos.y\u003d1.0-a_pos.y;}\"),$e\u003dyr(\"varying float v_placed;varying float v_notUsed;void main() {float alpha\u003d0.5;gl_FragColor\u003dvec4(1.0,0.0,0.0,1.0)*alpha;if (v_placed \u003e 0.5) {gl_FragColor\u003dvec4(0.0,0.0,1.0,0.5)*alpha;}if (v_notUsed \u003e 0.5) {gl_FragColor*\u003d.1;}}\",\"attribute vec2 a_pos;attribute vec2 a_anchor_pos;attribute vec2 a_extrude;attribute vec2 a_placed;attribute vec2 a_shift;uniform mat4 u_matrix;uniform vec2 u_extrude_scale;uniform float u_camera_to_center_distance;varying float v_placed;varying float v_notUsed;void main() {vec4 projectedPoint\u003du_matrix*vec4(a_anchor_pos,0,1);highp float camera_to_anchor_distance\u003dprojectedPoint.w;highp float collision_perspective_ratio\u003dclamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);gl_Position\u003du_matrix*vec4(a_pos,0.0,1.0);gl_Position.xy+\u003d(a_extrude+a_shift)*u_extrude_scale*gl_Position.w*collision_perspective_ratio;v_placed\u003da_placed.x;v_notUsed\u003da_placed.y;}\"),tr\u003dyr(\"varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;void main() {float alpha\u003d0.5*min(v_perspective_ratio,1.0);float stroke_radius\u003d0.9*max(v_perspective_ratio,1.0);float distance_to_center\u003dlength(v_extrude);float distance_to_edge\u003dabs(distance_to_center-v_radius);float opacity_t\u003dsmoothstep(-stroke_radius,0.0,-distance_to_edge);vec4 color\u003dmix(vec4(0.0,0.0,1.0,0.5),vec4(1.0,0.0,0.0,1.0),v_collision);gl_FragColor\u003dcolor*alpha*opacity_t;}\",\"attribute vec2 a_pos;attribute float a_radius;attribute vec2 a_flags;uniform mat4 u_matrix;uniform mat4 u_inv_matrix;uniform vec2 u_viewport_size;uniform float u_camera_to_center_distance;varying float v_radius;varying vec2 v_extrude;varying float v_perspective_ratio;varying float v_collision;vec3 toTilePosition(vec2 screenPos) {vec4 rayStart\u003du_inv_matrix*vec4(screenPos,-1.0,1.0);vec4 rayEnd  \u003du_inv_matrix*vec4(screenPos, 1.0,1.0);rayStart.xyz/\u003drayStart.w;rayEnd.xyz  /\u003drayEnd.w;highp float t\u003d(0.0-rayStart.z)/(rayEnd.z-rayStart.z);return mix(rayStart.xyz,rayEnd.xyz,t);}void main() {vec2 quadCenterPos\u003da_pos;float radius\u003da_radius;float collision\u003da_flags.x;float vertexIdx\u003da_flags.y;vec2 quadVertexOffset\u003dvec2(mix(-1.0,1.0,float(vertexIdx \u003e\u003d2.0)),mix(-1.0,1.0,float(vertexIdx \u003e\u003d1.0 \u0026\u0026 vertexIdx \u003c\u003d2.0)));vec2 quadVertexExtent\u003dquadVertexOffset*radius;vec3 tilePos\u003dtoTilePosition(quadCenterPos);vec4 clipPos\u003du_matrix*vec4(tilePos,1.0);highp float camera_to_anchor_distance\u003dclipPos.w;highp float collision_perspective_ratio\u003dclamp(0.5+0.5*(u_camera_to_center_distance/camera_to_anchor_distance),0.0,4.0);float padding_factor\u003d1.2;v_radius\u003dradius;v_extrude\u003dquadVertexExtent*padding_factor;v_perspective_ratio\u003dcollision_perspective_ratio;v_collision\u003dcollision;gl_Position\u003dvec4(clipPos.xyz/clipPos.w,1.0)+vec4(quadVertexExtent*padding_factor/u_viewport_size*2.0,0.0,0.0);}\"),er\u003dyr(\"uniform highp vec4 u_color;uniform sampler2D u_overlay;varying vec2 v_uv;void main() {vec4 overlay_color\u003dtexture2D(u_overlay,v_uv);gl_FragColor\u003dmix(u_color,overlay_color,overlay_color.a);}\",\"attribute vec2 a_pos;varying vec2 v_uv;uniform mat4 u_matrix;uniform float u_overlay_scale;void main() {v_uv\u003da_pos/8192.0;gl_Position\u003du_matrix*vec4(a_pos*u_overlay_scale,0,1);}\"),rr\u003dyr(\"#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_FragColor\u003dcolor*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position\u003du_matrix*vec4(a_pos,0,1);}\"),nr\u003dyr(\"varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist\u003dlength(v_pos-gl_FragCoord.xy);float alpha\u003d1.0-smoothstep(0.0,1.0,dist);gl_FragColor\u003doutline_color*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"attribute vec2 a_pos;uniform mat4 u_matrix;uniform vec2 u_world;varying vec2 v_pos;\\n#pragma mapbox: define highp vec4 outline_color\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 outline_color\\n#pragma mapbox: initialize lowp float opacity\\ngl_Position\u003du_matrix*vec4(a_pos,0,1);v_pos\u003d(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),ir\u003dyr(\"uniform vec2 u_texsize;uniform sampler2D u_image;uniform float u_fade;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a\u003dpattern_from.xy;vec2 pattern_br_a\u003dpattern_from.zw;vec2 pattern_tl_b\u003dpattern_to.xy;vec2 pattern_br_b\u003dpattern_to.zw;vec2 imagecoord\u003dmod(v_pos_a,1.0);vec2 pos\u003dmix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1\u003dtexture2D(u_image,pos);vec2 imagecoord_b\u003dmod(v_pos_b,1.0);vec2 pos2\u003dmix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2\u003dtexture2D(u_image,pos2);float dist\u003dlength(v_pos-gl_FragCoord.xy);float alpha\u003d1.0-smoothstep(0.0,1.0,dist);gl_FragColor\u003dmix(color1,color2,u_fade)*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_world;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec2 v_pos;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a\u003dpattern_from.xy;vec2 pattern_br_a\u003dpattern_from.zw;vec2 pattern_tl_b\u003dpattern_to.xy;vec2 pattern_br_b\u003dpattern_to.zw;float tileRatio\u003du_scale.x;float fromScale\u003du_scale.y;float toScale\u003du_scale.z;gl_Position\u003du_matrix*vec4(a_pos,0,1);vec2 display_size_a\u003d(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b\u003d(pattern_br_b-pattern_tl_b)/pixel_ratio_to;v_pos_a\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,a_pos);v_pos_b\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,a_pos);v_pos\u003d(gl_Position.xy/gl_Position.w+1.0)/2.0*u_world;}\"),ar\u003dyr(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\nvec2 pattern_tl_a\u003dpattern_from.xy;vec2 pattern_br_a\u003dpattern_from.zw;vec2 pattern_tl_b\u003dpattern_to.xy;vec2 pattern_br_b\u003dpattern_to.zw;vec2 imagecoord\u003dmod(v_pos_a,1.0);vec2 pos\u003dmix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1\u003dtexture2D(u_image,pos);vec2 imagecoord_b\u003dmod(v_pos_b,1.0);vec2 pos2\u003dmix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2\u003dtexture2D(u_image,pos2);gl_FragColor\u003dmix(color1,color2,u_fade)*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform vec3 u_scale;attribute vec2 a_pos;varying vec2 v_pos_a;varying vec2 v_pos_b;\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a\u003dpattern_from.xy;vec2 pattern_br_a\u003dpattern_from.zw;vec2 pattern_tl_b\u003dpattern_to.xy;vec2 pattern_br_b\u003dpattern_to.zw;float tileZoomRatio\u003du_scale.x;float fromScale\u003du_scale.y;float toScale\u003du_scale.z;vec2 display_size_a\u003d(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b\u003d(pattern_br_b-pattern_tl_b)/pixel_ratio_to;gl_Position\u003du_matrix*vec4(a_pos,0,1);v_pos_a\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileZoomRatio,a_pos);v_pos_b\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileZoomRatio,a_pos);}\"),or\u003dyr(\"varying vec4 v_color;void main() {gl_FragColor\u003dv_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;uniform float u_vertical_gradient;uniform lowp float u_opacity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec4 v_color;\\n#pragma mapbox: define highp float base\\n#pragma mapbox: define highp float height\\n#pragma mapbox: define highp vec4 color\\nvoid main() {\\n#pragma mapbox: initialize highp float base\\n#pragma mapbox: initialize highp float height\\n#pragma mapbox: initialize highp vec4 color\\nvec3 normal\u003da_normal_ed.xyz;base\u003dmax(0.0,base);height\u003dmax(0.0,height);float t\u003dmod(normal.x,2.0);gl_Position\u003du_matrix*vec4(a_pos,t \u003e 0.0 ? height : base,1);float colorvalue\u003dcolor.r*0.2126+color.g*0.7152+color.b*0.0722;v_color\u003dvec4(0.0,0.0,0.0,1.0);vec4 ambientlight\u003dvec4(0.03,0.03,0.03,1.0);color+\u003dambientlight;float directional\u003dclamp(dot(normal/16384.0,u_lightpos),0.0,1.0);directional\u003dmix((1.0-u_lightintensity),max((1.0-colorvalue+u_lightintensity),1.0),directional);if (normal.y !\u003d0.0) {directional*\u003d((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_color.r+\u003dclamp(color.r*directional*u_lightcolor.r,mix(0.0,0.3,1.0-u_lightcolor.r),1.0);v_color.g+\u003dclamp(color.g*directional*u_lightcolor.g,mix(0.0,0.3,1.0-u_lightcolor.g),1.0);v_color.b+\u003dclamp(color.b*directional*u_lightcolor.b,mix(0.0,0.3,1.0-u_lightcolor.b),1.0);v_color*\u003du_opacity;}\"),sr\u003dyr(\"uniform vec2 u_texsize;uniform float u_fade;uniform sampler2D u_image;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a\u003dpattern_from.xy;vec2 pattern_br_a\u003dpattern_from.zw;vec2 pattern_tl_b\u003dpattern_to.xy;vec2 pattern_br_b\u003dpattern_to.zw;vec2 imagecoord\u003dmod(v_pos_a,1.0);vec2 pos\u003dmix(pattern_tl_a/u_texsize,pattern_br_a/u_texsize,imagecoord);vec4 color1\u003dtexture2D(u_image,pos);vec2 imagecoord_b\u003dmod(v_pos_b,1.0);vec2 pos2\u003dmix(pattern_tl_b/u_texsize,pattern_br_b/u_texsize,imagecoord_b);vec4 color2\u003dtexture2D(u_image,pos2);vec4 mixedColor\u003dmix(color1,color2,u_fade);gl_FragColor\u003dmixedColor*v_lighting;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_pixel_coord_upper;uniform vec2 u_pixel_coord_lower;uniform float u_height_factor;uniform vec3 u_scale;uniform float u_vertical_gradient;uniform lowp float u_opacity;uniform vec3 u_lightcolor;uniform lowp vec3 u_lightpos;uniform lowp float u_lightintensity;attribute vec2 a_pos;attribute vec4 a_normal_ed;varying vec2 v_pos_a;varying vec2 v_pos_b;varying vec4 v_lighting;\\n#pragma mapbox: define lowp float base\\n#pragma mapbox: define lowp float height\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float base\\n#pragma mapbox: initialize lowp float height\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nvec2 pattern_tl_a\u003dpattern_from.xy;vec2 pattern_br_a\u003dpattern_from.zw;vec2 pattern_tl_b\u003dpattern_to.xy;vec2 pattern_br_b\u003dpattern_to.zw;float tileRatio\u003du_scale.x;float fromScale\u003du_scale.y;float toScale\u003du_scale.z;vec3 normal\u003da_normal_ed.xyz;float edgedistance\u003da_normal_ed.w;vec2 display_size_a\u003d(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b\u003d(pattern_br_b-pattern_tl_b)/pixel_ratio_to;base\u003dmax(0.0,base);height\u003dmax(0.0,height);float t\u003dmod(normal.x,2.0);float z\u003dt \u003e 0.0 ? height : base;gl_Position\u003du_matrix*vec4(a_pos,z,1);vec2 pos\u003dnormal.x\u003d\u003d1.0 \u0026\u0026 normal.y\u003d\u003d0.0 \u0026\u0026 normal.z\u003d\u003d16384.0\\n? a_pos\\n: vec2(edgedistance,z*u_height_factor);v_pos_a\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,fromScale*display_size_a,tileRatio,pos);v_pos_b\u003dget_pattern_pos(u_pixel_coord_upper,u_pixel_coord_lower,toScale*display_size_b,tileRatio,pos);v_lighting\u003dvec4(0.0,0.0,0.0,1.0);float directional\u003dclamp(dot(normal/16383.0,u_lightpos),0.0,1.0);directional\u003dmix((1.0-u_lightintensity),max((0.5+u_lightintensity),1.0),directional);if (normal.y !\u003d0.0) {directional*\u003d((1.0-u_vertical_gradient)+(u_vertical_gradient*clamp((t+base)*pow(height/150.0,0.5),mix(0.7,0.98,1.0-u_lightintensity),1.0)));}v_lighting.rgb+\u003dclamp(directional*u_lightcolor,mix(vec3(0.0),vec3(0.3),1.0-u_lightcolor),vec3(1.0));v_lighting*\u003du_opacity;}\"),lr\u003dyr(\"#ifdef GL_ES\\nprecision highp float;\\n#endif\\nuniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_dimension;uniform float u_zoom;uniform float u_maxzoom;uniform vec4 u_unpack;float getElevation(vec2 coord,float bias) {vec4 data\u003dtexture2D(u_image,coord)*255.0;data.a\u003d-1.0;return dot(data,u_unpack)/4.0;}void main() {vec2 epsilon\u003d1.0/u_dimension;float a\u003dgetElevation(v_pos+vec2(-epsilon.x,-epsilon.y),0.0);float b\u003dgetElevation(v_pos+vec2(0,-epsilon.y),0.0);float c\u003dgetElevation(v_pos+vec2(epsilon.x,-epsilon.y),0.0);float d\u003dgetElevation(v_pos+vec2(-epsilon.x,0),0.0);float e\u003dgetElevation(v_pos,0.0);float f\u003dgetElevation(v_pos+vec2(epsilon.x,0),0.0);float g\u003dgetElevation(v_pos+vec2(-epsilon.x,epsilon.y),0.0);float h\u003dgetElevation(v_pos+vec2(0,epsilon.y),0.0);float i\u003dgetElevation(v_pos+vec2(epsilon.x,epsilon.y),0.0);float exaggeration\u003du_zoom \u003c 2.0 ? 0.4 : u_zoom \u003c 4.5 ? 0.35 : 0.3;vec2 deriv\u003dvec2((c+f+f+i)-(a+d+d+g),(g+h+h+i)-(a+b+b+c))/ pow(2.0,(u_zoom-u_maxzoom)*exaggeration+19.2562-u_zoom);gl_FragColor\u003dclamp(vec4(deriv.x/2.0+0.5,deriv.y/2.0+0.5,1.0,1.0),0.0,1.0);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_dimension;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position\u003du_matrix*vec4(a_pos,0,1);highp vec2 epsilon\u003d1.0/u_dimension;float scale\u003d(u_dimension.x-2.0)/u_dimension.x;v_pos\u003d(a_texture_pos/8192.0)*scale+epsilon;}\"),cr\u003dyr(\"uniform sampler2D u_image;varying vec2 v_pos;uniform vec2 u_latrange;uniform vec2 u_light;uniform vec4 u_shadow;uniform vec4 u_highlight;uniform vec4 u_accent;\\n#define PI 3.141592653589793\\nvoid main() {vec4 pixel\u003dtexture2D(u_image,v_pos);vec2 deriv\u003d((pixel.rg*2.0)-1.0);float scaleFactor\u003dcos(radians((u_latrange[0]-u_latrange[1])*(1.0-v_pos.y)+u_latrange[1]));float slope\u003datan(1.25*length(deriv)/scaleFactor);float aspect\u003dderiv.x !\u003d0.0 ? atan(deriv.y,-deriv.x) : PI/2.0*(deriv.y \u003e 0.0 ? 1.0 :-1.0);float intensity\u003du_light.x;float azimuth\u003du_light.y+PI;float base\u003d1.875-intensity*1.75;float maxValue\u003d0.5*PI;float scaledSlope\u003dintensity !\u003d0.5 ? ((pow(base,slope)-1.0)/(pow(base,maxValue)-1.0))*maxValue : slope;float accent\u003dcos(scaledSlope);vec4 accent_color\u003d(1.0-accent)*u_accent*clamp(intensity*2.0,0.0,1.0);float shade\u003dabs(mod((aspect+azimuth)/PI+0.5,2.0)-1.0);vec4 shade_color\u003dmix(u_shadow,u_highlight,shade)*sin(scaledSlope)*clamp(intensity*2.0,0.0,1.0);gl_FragColor\u003daccent_color*(1.0-shade_color.a)+shade_color;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos;void main() {gl_Position\u003du_matrix*vec4(a_pos,0,1);v_pos\u003da_texture_pos/8192.0;}\"),ur\u003dyr(\"uniform lowp float u_device_pixel_ratio;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist\u003dlength(v_normal)*v_width2.s;float blur2\u003d(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha\u003dclamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);gl_FragColor\u003dcolor*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform vec2 u_units_to_pixels;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_linesofar;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING\u003d1.0/u_device_pixel_ratio/2.0;vec2 a_extrude\u003da_data.xy-128.0;float a_direction\u003dmod(a_data.z,4.0)-1.0;v_linesofar\u003d(floor(a_data.z/4.0)+a_data.w*64.0)*2.0;vec2 pos\u003dfloor(a_pos_normal*0.5);mediump vec2 normal\u003da_pos_normal-2.0*pos;normal.y\u003dnormal.y*2.0-1.0;v_normal\u003dnormal;gapwidth\u003dgapwidth/2.0;float halfwidth\u003dwidth/2.0;offset\u003d-1.0*offset;float inset\u003dgapwidth+(gapwidth \u003e 0.0 ? ANTIALIASING : 0.0);float outset\u003dgapwidth+halfwidth*(gapwidth \u003e 0.0 ? 2.0 : 1.0)+(halfwidth\u003d\u003d0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist\u003doutset*a_extrude*scale;mediump float u\u003d0.5*a_direction;mediump float t\u003d1.0-abs(u);mediump vec2 offset2\u003doffset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude\u003du_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position\u003du_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective\u003dlength(dist);float extrude_length_with_perspective\u003dlength(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale\u003dextrude_length_without_perspective/extrude_length_with_perspective;v_width2\u003dvec2(outset,inset);}\"),fr\u003dyr(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;varying vec2 v_width2;varying vec2 v_normal;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nfloat dist\u003dlength(v_normal)*v_width2.s;float blur2\u003d(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha\u003dclamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);vec4 color\u003dtexture2D(u_image,vec2(v_lineprogress,0.5));gl_FragColor\u003dcolor*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"\\n#define MAX_LINE_DISTANCE 32767.0\\n#define scale 0.015873016\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying float v_gamma_scale;varying highp float v_lineprogress;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\nfloat ANTIALIASING\u003d1.0/u_device_pixel_ratio/2.0;vec2 a_extrude\u003da_data.xy-128.0;float a_direction\u003dmod(a_data.z,4.0)-1.0;v_lineprogress\u003d(floor(a_data.z/4.0)+a_data.w*64.0)*2.0/MAX_LINE_DISTANCE;vec2 pos\u003dfloor(a_pos_normal*0.5);mediump vec2 normal\u003da_pos_normal-2.0*pos;normal.y\u003dnormal.y*2.0-1.0;v_normal\u003dnormal;gapwidth\u003dgapwidth/2.0;float halfwidth\u003dwidth/2.0;offset\u003d-1.0*offset;float inset\u003dgapwidth+(gapwidth \u003e 0.0 ? ANTIALIASING : 0.0);float outset\u003dgapwidth+halfwidth*(gapwidth \u003e 0.0 ? 2.0 : 1.0)+(halfwidth\u003d\u003d0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist\u003doutset*a_extrude*scale;mediump float u\u003d0.5*a_direction;mediump float t\u003d1.0-abs(u);mediump vec2 offset2\u003doffset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude\u003du_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position\u003du_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective\u003dlength(dist);float extrude_length_with_perspective\u003dlength(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale\u003dextrude_length_without_perspective/extrude_length_with_perspective;v_width2\u003dvec2(outset,inset);}\"),hr\u003dyr(\"uniform lowp float u_device_pixel_ratio;uniform vec2 u_texsize;uniform float u_fade;uniform mediump vec3 u_scale;uniform sampler2D u_image;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\nvec2 pattern_tl_a\u003dpattern_from.xy;vec2 pattern_br_a\u003dpattern_from.zw;vec2 pattern_tl_b\u003dpattern_to.xy;vec2 pattern_br_b\u003dpattern_to.zw;float tileZoomRatio\u003du_scale.x;float fromScale\u003du_scale.y;float toScale\u003du_scale.z;vec2 display_size_a\u003d(pattern_br_a-pattern_tl_a)/pixel_ratio_from;vec2 display_size_b\u003d(pattern_br_b-pattern_tl_b)/pixel_ratio_to;vec2 pattern_size_a\u003dvec2(display_size_a.x*fromScale/tileZoomRatio,display_size_a.y);vec2 pattern_size_b\u003dvec2(display_size_b.x*toScale/tileZoomRatio,display_size_b.y);float aspect_a\u003ddisplay_size_a.y/v_width;float aspect_b\u003ddisplay_size_b.y/v_width;float dist\u003dlength(v_normal)*v_width2.s;float blur2\u003d(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha\u003dclamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float x_a\u003dmod(v_linesofar/pattern_size_a.x*aspect_a,1.0);float x_b\u003dmod(v_linesofar/pattern_size_b.x*aspect_b,1.0);float y\u003d0.5*v_normal.y+0.5;vec2 texel_size\u003d1.0/u_texsize;vec2 pos_a\u003dmix(pattern_tl_a*texel_size-texel_size,pattern_br_a*texel_size+texel_size,vec2(x_a,y));vec2 pos_b\u003dmix(pattern_tl_b*texel_size-texel_size,pattern_br_b*texel_size+texel_size,vec2(x_b,y));vec4 color\u003dmix(texture2D(u_image,pos_a),texture2D(u_image,pos_b),u_fade);gl_FragColor\u003dcolor*alpha*opacity;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform vec2 u_units_to_pixels;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;varying vec2 v_normal;varying vec2 v_width2;varying float v_linesofar;varying float v_gamma_scale;varying float v_width;\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\n#pragma mapbox: define lowp vec4 pattern_from\\n#pragma mapbox: define lowp vec4 pattern_to\\n#pragma mapbox: define lowp float pixel_ratio_from\\n#pragma mapbox: define lowp float pixel_ratio_to\\nvoid main() {\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\n#pragma mapbox: initialize mediump vec4 pattern_from\\n#pragma mapbox: initialize mediump vec4 pattern_to\\n#pragma mapbox: initialize lowp float pixel_ratio_from\\n#pragma mapbox: initialize lowp float pixel_ratio_to\\nfloat ANTIALIASING\u003d1.0/u_device_pixel_ratio/2.0;vec2 a_extrude\u003da_data.xy-128.0;float a_direction\u003dmod(a_data.z,4.0)-1.0;float a_linesofar\u003d(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos\u003dfloor(a_pos_normal*0.5);mediump vec2 normal\u003da_pos_normal-2.0*pos;normal.y\u003dnormal.y*2.0-1.0;v_normal\u003dnormal;gapwidth\u003dgapwidth/2.0;float halfwidth\u003dwidth/2.0;offset\u003d-1.0*offset;float inset\u003dgapwidth+(gapwidth \u003e 0.0 ? ANTIALIASING : 0.0);float outset\u003dgapwidth+halfwidth*(gapwidth \u003e 0.0 ? 2.0 : 1.0)+(halfwidth\u003d\u003d0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist\u003doutset*a_extrude*scale;mediump float u\u003d0.5*a_direction;mediump float t\u003d1.0-abs(u);mediump vec2 offset2\u003doffset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude\u003du_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position\u003du_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective\u003dlength(dist);float extrude_length_with_perspective\u003dlength(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale\u003dextrude_length_without_perspective/extrude_length_with_perspective;v_linesofar\u003da_linesofar;v_width2\u003dvec2(outset,inset);v_width\u003dfloorwidth;}\"),pr\u003dyr(\"uniform lowp float u_device_pixel_ratio;uniform sampler2D u_image;uniform float u_sdfgamma;uniform float u_mix;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat dist\u003dlength(v_normal)*v_width2.s;float blur2\u003d(blur+1.0/u_device_pixel_ratio)*v_gamma_scale;float alpha\u003dclamp(min(dist-(v_width2.t-blur2),v_width2.s-dist)/blur2,0.0,1.0);float sdfdist_a\u003dtexture2D(u_image,v_tex_a).a;float sdfdist_b\u003dtexture2D(u_image,v_tex_b).a;float sdfdist\u003dmix(sdfdist_a,sdfdist_b,u_mix);alpha*\u003dsmoothstep(0.5-u_sdfgamma/floorwidth,0.5+u_sdfgamma/floorwidth,sdfdist);gl_FragColor\u003dcolor*(alpha*opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"\\n#define scale 0.015873016\\n#define LINE_DISTANCE_SCALE 2.0\\nattribute vec2 a_pos_normal;attribute vec4 a_data;uniform mat4 u_matrix;uniform mediump float u_ratio;uniform lowp float u_device_pixel_ratio;uniform vec2 u_patternscale_a;uniform float u_tex_y_a;uniform vec2 u_patternscale_b;uniform float u_tex_y_b;uniform vec2 u_units_to_pixels;varying vec2 v_normal;varying vec2 v_width2;varying vec2 v_tex_a;varying vec2 v_tex_b;varying float v_gamma_scale;\\n#pragma mapbox: define highp vec4 color\\n#pragma mapbox: define lowp float blur\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define mediump float gapwidth\\n#pragma mapbox: define lowp float offset\\n#pragma mapbox: define mediump float width\\n#pragma mapbox: define lowp float floorwidth\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 color\\n#pragma mapbox: initialize lowp float blur\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize mediump float gapwidth\\n#pragma mapbox: initialize lowp float offset\\n#pragma mapbox: initialize mediump float width\\n#pragma mapbox: initialize lowp float floorwidth\\nfloat ANTIALIASING\u003d1.0/u_device_pixel_ratio/2.0;vec2 a_extrude\u003da_data.xy-128.0;float a_direction\u003dmod(a_data.z,4.0)-1.0;float a_linesofar\u003d(floor(a_data.z/4.0)+a_data.w*64.0)*LINE_DISTANCE_SCALE;vec2 pos\u003dfloor(a_pos_normal*0.5);mediump vec2 normal\u003da_pos_normal-2.0*pos;normal.y\u003dnormal.y*2.0-1.0;v_normal\u003dnormal;gapwidth\u003dgapwidth/2.0;float halfwidth\u003dwidth/2.0;offset\u003d-1.0*offset;float inset\u003dgapwidth+(gapwidth \u003e 0.0 ? ANTIALIASING : 0.0);float outset\u003dgapwidth+halfwidth*(gapwidth \u003e 0.0 ? 2.0 : 1.0)+(halfwidth\u003d\u003d0.0 ? 0.0 : ANTIALIASING);mediump vec2 dist\u003doutset*a_extrude*scale;mediump float u\u003d0.5*a_direction;mediump float t\u003d1.0-abs(u);mediump vec2 offset2\u003doffset*a_extrude*scale*normal.y*mat2(t,-u,u,t);vec4 projected_extrude\u003du_matrix*vec4(dist/u_ratio,0.0,0.0);gl_Position\u003du_matrix*vec4(pos+offset2/u_ratio,0.0,1.0)+projected_extrude;float extrude_length_without_perspective\u003dlength(dist);float extrude_length_with_perspective\u003dlength(projected_extrude.xy/gl_Position.w*u_units_to_pixels);v_gamma_scale\u003dextrude_length_without_perspective/extrude_length_with_perspective;v_tex_a\u003dvec2(a_linesofar*u_patternscale_a.x/floorwidth,normal.y*u_patternscale_a.y+u_tex_y_a);v_tex_b\u003dvec2(a_linesofar*u_patternscale_b.x/floorwidth,normal.y*u_patternscale_b.y+u_tex_y_b);v_width2\u003dvec2(outset,inset);}\"),dr\u003dyr(\"uniform float u_fade_t;uniform float u_opacity;uniform sampler2D u_image0;uniform sampler2D u_image1;varying vec2 v_pos0;varying vec2 v_pos1;uniform float u_brightness_low;uniform float u_brightness_high;uniform float u_saturation_factor;uniform float u_contrast_factor;uniform vec3 u_spin_weights;void main() {vec4 color0\u003dtexture2D(u_image0,v_pos0);vec4 color1\u003dtexture2D(u_image1,v_pos1);if (color0.a \u003e 0.0) {color0.rgb\u003dcolor0.rgb/color0.a;}if (color1.a \u003e 0.0) {color1.rgb\u003dcolor1.rgb/color1.a;}vec4 color\u003dmix(color0,color1,u_fade_t);color.a*\u003du_opacity;vec3 rgb\u003dcolor.rgb;rgb\u003dvec3(dot(rgb,u_spin_weights.xyz),dot(rgb,u_spin_weights.zxy),dot(rgb,u_spin_weights.yzx));float average\u003d(color.r+color.g+color.b)/3.0;rgb+\u003d(average-rgb)*u_saturation_factor;rgb\u003d(rgb-0.5)*u_contrast_factor+0.5;vec3 u_high_vec\u003dvec3(u_brightness_low,u_brightness_low,u_brightness_low);vec3 u_low_vec\u003dvec3(u_brightness_high,u_brightness_high,u_brightness_high);gl_FragColor\u003dvec4(mix(u_high_vec,u_low_vec,rgb)*color.a,color.a);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"uniform mat4 u_matrix;uniform vec2 u_tl_parent;uniform float u_scale_parent;uniform float u_buffer_scale;attribute vec2 a_pos;attribute vec2 a_texture_pos;varying vec2 v_pos0;varying vec2 v_pos1;void main() {gl_Position\u003du_matrix*vec4(a_pos,0,1);v_pos0\u003d(((a_texture_pos/8192.0)-0.5)/u_buffer_scale )+0.5;v_pos1\u003d(v_pos0*u_scale_parent)+u_tl_parent;}\"),mr\u003dyr(\"uniform sampler2D u_texture;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nlowp float alpha\u003dopacity*v_fade_opacity;gl_FragColor\u003dtexture2D(u_texture,v_tex)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"const float PI\u003d3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform highp float u_camera_to_center_distance;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform float u_fade_change;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform vec2 u_texsize;varying vec2 v_tex;varying float v_fade_opacity;\\n#pragma mapbox: define lowp float opacity\\nvoid main() {\\n#pragma mapbox: initialize lowp float opacity\\nvec2 a_pos\u003da_pos_offset.xy;vec2 a_offset\u003da_pos_offset.zw;vec2 a_tex\u003da_data.xy;vec2 a_size\u003da_data.zw;float a_size_min\u003dfloor(a_size[0]*0.5);vec2 a_pxoffset\u003da_pixeloffset.xy;vec2 a_minFontScale\u003da_pixeloffset.zw/256.0;highp float segment_angle\u003d-a_projected_pos[2];float size;if (!u_is_size_zoom_constant \u0026\u0026 !u_is_size_feature_constant) {size\u003dmix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant \u0026\u0026 !u_is_size_feature_constant) {size\u003da_size_min/128.0;} else {size\u003du_size;}vec4 projectedPoint\u003du_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance\u003dprojectedPoint.w;highp float distance_ratio\u003du_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio\u003dclamp(0.5+0.5*distance_ratio,0.0,4.0);size*\u003dperspective_ratio;float fontScale\u003du_is_text ? size/24.0 : size;highp float symbol_rotation\u003d0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint\u003du_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a\u003dprojectedPoint.xy/projectedPoint.w;vec2 b\u003doffsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation\u003datan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin\u003dsin(segment_angle+symbol_rotation);highp float angle_cos\u003dcos(segment_angle+symbol_rotation);mat2 rotation_matrix\u003dmat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos\u003du_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position\u003du_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*max(a_minFontScale,fontScale)+a_pxoffset/16.0),0.0,1.0);v_tex\u003da_tex/u_texsize;vec2 fade_opacity\u003dunpack_opacity(a_fade_opacity);float fade_change\u003dfade_opacity[1] \u003e 0.5 ? u_fade_change :-u_fade_change;v_fade_opacity\u003dmax(0.0,min(1.0,fade_opacity[0]+fade_change));}\"),gr\u003dyr(\"#define SDF_PX 8.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;uniform bool u_is_text;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat EDGE_GAMMA\u003d0.105/u_device_pixel_ratio;vec2 tex\u003dv_data0.xy;float gamma_scale\u003dv_data1.x;float size\u003dv_data1.y;float fade_opacity\u003dv_data1[2];float fontScale\u003du_is_text ? size/24.0 : size;lowp vec4 color\u003dfill_color;highp float gamma\u003dEDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff\u003d(256.0-64.0)/256.0;if (u_is_halo) {color\u003dhalo_color;gamma\u003d(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff\u003d(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist\u003dtexture2D(u_texture,tex).a;highp float gamma_scaled\u003dgamma*gamma_scale;highp float alpha\u003dsmoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor\u003dcolor*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"const float PI\u003d3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec4 a_pixeloffset;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;varying vec2 v_data0;varying vec3 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos\u003da_pos_offset.xy;vec2 a_offset\u003da_pos_offset.zw;vec2 a_tex\u003da_data.xy;vec2 a_size\u003da_data.zw;float a_size_min\u003dfloor(a_size[0]*0.5);vec2 a_pxoffset\u003da_pixeloffset.xy;highp float segment_angle\u003d-a_projected_pos[2];float size;if (!u_is_size_zoom_constant \u0026\u0026 !u_is_size_feature_constant) {size\u003dmix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant \u0026\u0026 !u_is_size_feature_constant) {size\u003da_size_min/128.0;} else {size\u003du_size;}vec4 projectedPoint\u003du_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance\u003dprojectedPoint.w;highp float distance_ratio\u003du_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio\u003dclamp(0.5+0.5*distance_ratio,0.0,4.0);size*\u003dperspective_ratio;float fontScale\u003du_is_text ? size/24.0 : size;highp float symbol_rotation\u003d0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint\u003du_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a\u003dprojectedPoint.xy/projectedPoint.w;vec2 b\u003doffsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation\u003datan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin\u003dsin(segment_angle+symbol_rotation);highp float angle_cos\u003dcos(segment_angle+symbol_rotation);mat2 rotation_matrix\u003dmat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos\u003du_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position\u003du_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale+a_pxoffset),0.0,1.0);float gamma_scale\u003dgl_Position.w;vec2 fade_opacity\u003dunpack_opacity(a_fade_opacity);float fade_change\u003dfade_opacity[1] \u003e 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity\u003dmax(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0\u003da_tex/u_texsize;v_data1\u003dvec3(gamma_scale,size,interpolated_fade_opacity);}\"),vr\u003dyr(\"#define SDF_PX 8.0\\n#define SDF 1.0\\n#define ICON 0.0\\nuniform bool u_is_halo;uniform sampler2D u_texture;uniform sampler2D u_texture_icon;uniform highp float u_gamma_scale;uniform lowp float u_device_pixel_ratio;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nfloat fade_opacity\u003dv_data1[2];if (v_data1.w\u003d\u003dICON) {vec2 tex_icon\u003dv_data0.zw;lowp float alpha\u003dopacity*fade_opacity;gl_FragColor\u003dtexture2D(u_texture_icon,tex_icon)*alpha;\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\nreturn;}vec2 tex\u003dv_data0.xy;float EDGE_GAMMA\u003d0.105/u_device_pixel_ratio;float gamma_scale\u003dv_data1.x;float size\u003dv_data1.y;float fontScale\u003dsize/24.0;lowp vec4 color\u003dfill_color;highp float gamma\u003dEDGE_GAMMA/(fontScale*u_gamma_scale);lowp float buff\u003d(256.0-64.0)/256.0;if (u_is_halo) {color\u003dhalo_color;gamma\u003d(halo_blur*1.19/SDF_PX+EDGE_GAMMA)/(fontScale*u_gamma_scale);buff\u003d(6.0-halo_width/fontScale)/SDF_PX;}lowp float dist\u003dtexture2D(u_texture,tex).a;highp float gamma_scaled\u003dgamma*gamma_scale;highp float alpha\u003dsmoothstep(buff-gamma_scaled,buff+gamma_scaled,dist);gl_FragColor\u003dcolor*(alpha*opacity*fade_opacity);\\n#ifdef OVERDRAW_INSPECTOR\\ngl_FragColor\u003dvec4(1.0);\\n#endif\\n}\",\"const float PI\u003d3.141592653589793;attribute vec4 a_pos_offset;attribute vec4 a_data;attribute vec3 a_projected_pos;attribute float a_fade_opacity;uniform bool u_is_size_zoom_constant;uniform bool u_is_size_feature_constant;uniform highp float u_size_t;uniform highp float u_size;uniform mat4 u_matrix;uniform mat4 u_label_plane_matrix;uniform mat4 u_coord_matrix;uniform bool u_is_text;uniform bool u_pitch_with_map;uniform highp float u_pitch;uniform bool u_rotate_symbol;uniform highp float u_aspect_ratio;uniform highp float u_camera_to_center_distance;uniform float u_fade_change;uniform vec2 u_texsize;uniform vec2 u_texsize_icon;varying vec4 v_data0;varying vec4 v_data1;\\n#pragma mapbox: define highp vec4 fill_color\\n#pragma mapbox: define highp vec4 halo_color\\n#pragma mapbox: define lowp float opacity\\n#pragma mapbox: define lowp float halo_width\\n#pragma mapbox: define lowp float halo_blur\\nvoid main() {\\n#pragma mapbox: initialize highp vec4 fill_color\\n#pragma mapbox: initialize highp vec4 halo_color\\n#pragma mapbox: initialize lowp float opacity\\n#pragma mapbox: initialize lowp float halo_width\\n#pragma mapbox: initialize lowp float halo_blur\\nvec2 a_pos\u003da_pos_offset.xy;vec2 a_offset\u003da_pos_offset.zw;vec2 a_tex\u003da_data.xy;vec2 a_size\u003da_data.zw;float a_size_min\u003dfloor(a_size[0]*0.5);float is_sdf\u003da_size[0]-2.0*a_size_min;highp float segment_angle\u003d-a_projected_pos[2];float size;if (!u_is_size_zoom_constant \u0026\u0026 !u_is_size_feature_constant) {size\u003dmix(a_size_min,a_size[1],u_size_t)/128.0;} else if (u_is_size_zoom_constant \u0026\u0026 !u_is_size_feature_constant) {size\u003da_size_min/128.0;} else {size\u003du_size;}vec4 projectedPoint\u003du_matrix*vec4(a_pos,0,1);highp float camera_to_anchor_distance\u003dprojectedPoint.w;highp float distance_ratio\u003du_pitch_with_map ?\\ncamera_to_anchor_distance/u_camera_to_center_distance :\\nu_camera_to_center_distance/camera_to_anchor_distance;highp float perspective_ratio\u003dclamp(0.5+0.5*distance_ratio,0.0,4.0);size*\u003dperspective_ratio;float fontScale\u003dsize/24.0;highp float symbol_rotation\u003d0.0;if (u_rotate_symbol) {vec4 offsetProjectedPoint\u003du_matrix*vec4(a_pos+vec2(1,0),0,1);vec2 a\u003dprojectedPoint.xy/projectedPoint.w;vec2 b\u003doffsetProjectedPoint.xy/offsetProjectedPoint.w;symbol_rotation\u003datan((b.y-a.y)/u_aspect_ratio,b.x-a.x);}highp float angle_sin\u003dsin(segment_angle+symbol_rotation);highp float angle_cos\u003dcos(segment_angle+symbol_rotation);mat2 rotation_matrix\u003dmat2(angle_cos,-1.0*angle_sin,angle_sin,angle_cos);vec4 projected_pos\u003du_label_plane_matrix*vec4(a_projected_pos.xy,0.0,1.0);gl_Position\u003du_coord_matrix*vec4(projected_pos.xy/projected_pos.w+rotation_matrix*(a_offset/32.0*fontScale),0.0,1.0);float gamma_scale\u003dgl_Position.w;vec2 fade_opacity\u003dunpack_opacity(a_fade_opacity);float fade_change\u003dfade_opacity[1] \u003e 0.5 ? u_fade_change :-u_fade_change;float interpolated_fade_opacity\u003dmax(0.0,min(1.0,fade_opacity[0]+fade_change));v_data0.xy\u003da_tex/u_texsize;v_data0.zw\u003da_tex/u_texsize_icon;v_data1\u003dvec4(gamma_scale,size,interpolated_fade_opacity,is_sdf);}\");function yr(t,e){var r\u003d/#pragma mapbox: ([\\w]+) ([\\w]+) ([\\w]+) ([\\w]+)/g,n\u003d{};return{fragmentSource:t\u003dt.replace(r,(function(t,e,r,i,a){return n[a]\u003d!0,\"define\"\u003d\u003d\u003de?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nvarying \"+r+\" \"+i+\" \"+a+\";\\n#else\\nuniform \"+r+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"\\n#ifdef HAS_UNIFORM_u_\"+a+\"\\n    \"+r+\" \"+i+\" \"+a+\" \u003d u_\"+a+\";\\n#endif\\n\"})),vertexSource:e\u003de.replace(r,(function(t,e,r,i,a){var o\u003d\"float\"\u003d\u003d\u003di?\"vec2\":\"vec4\",s\u003da.match(/color/)?\"color\":o;return n[a]?\"define\"\u003d\u003d\u003de?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+r+\" \"+o+\" a_\"+a+\";\\nvarying \"+r+\" \"+i+\" \"+a+\";\\n#else\\nuniform \"+r+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"\u003d\u003d\u003ds?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+a+\" \u003d a_\"+a+\";\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" \u003d u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+a+\" \u003d unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" \u003d u_\"+a+\";\\n#endif\\n\":\"define\"\u003d\u003d\u003de?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\nuniform lowp float u_\"+a+\"_t;\\nattribute \"+r+\" \"+o+\" a_\"+a+\";\\n#else\\nuniform \"+r+\" \"+i+\" u_\"+a+\";\\n#endif\\n\":\"vec4\"\u003d\u003d\u003ds?\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+r+\" \"+i+\" \"+a+\" \u003d a_\"+a+\";\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" \u003d u_\"+a+\";\\n#endif\\n\":\"\\n#ifndef HAS_UNIFORM_u_\"+a+\"\\n    \"+r+\" \"+i+\" \"+a+\" \u003d unpack_mix_\"+s+\"(a_\"+a+\", u_\"+a+\"_t);\\n#else\\n    \"+r+\" \"+i+\" \"+a+\" \u003d u_\"+a+\";\\n#endif\\n\"}))}}var xr\u003dObject.freeze({__proto__:null,prelude:Ye,background:We,backgroundPattern:Xe,circle:Ze,clippingMask:Je,heatmap:Ke,heatmapTexture:Qe,collisionBox:$e,collisionCircle:tr,debug:er,fill:rr,fillOutline:nr,fillOutlinePattern:ir,fillPattern:ar,fillExtrusion:or,fillExtrusionPattern:sr,hillshadePrepare:lr,hillshade:cr,line:ur,lineGradient:fr,linePattern:hr,lineSDF:pr,raster:dr,symbolIcon:mr,symbolSDF:gr,symbolTextAndIcon:vr}),br\u003dfunction(){this.boundProgram\u003dnull,this.boundLayoutVertexBuffer\u003dnull,this.boundPaintVertexBuffers\u003d[],this.boundIndexBuffer\u003dnull,this.boundVertexOffset\u003dnull,this.boundDynamicVertexBuffer\u003dnull,this.vao\u003dnull};br.prototype.bind\u003dfunction(t,e,r,n,i,a,o,s){this.context\u003dt;for(var l\u003dthis.boundPaintVertexBuffers.length!\u003d\u003dn.length,c\u003d0;!l\u0026\u0026c\u003cn.length;c++)this.boundPaintVertexBuffers[c]!\u003d\u003dn[c]\u0026\u0026(l\u003d!0);var u\u003d!this.vao||this.boundProgram!\u003d\u003de||this.boundLayoutVertexBuffer!\u003d\u003dr||l||this.boundIndexBuffer!\u003d\u003di||this.boundVertexOffset!\u003d\u003da||this.boundDynamicVertexBuffer!\u003d\u003do||this.boundDynamicVertexBuffer2!\u003d\u003ds;!t.extVertexArrayObject||u?this.freshBind(e,r,n,i,a,o,s):(t.bindVertexArrayOES.set(this.vao),o\u0026\u0026o.bind(),i\u0026\u0026i.dynamicDraw\u0026\u0026i.bind(),s\u0026\u0026s.bind())},br.prototype.freshBind\u003dfunction(t,e,r,n,i,a,o){var s,l\u003dt.numAttributes,c\u003dthis.context,u\u003dc.gl;if(c.extVertexArrayObject)this.vao\u0026\u0026this.destroy(),this.vao\u003dc.extVertexArrayObject.createVertexArrayOES(),c.bindVertexArrayOES.set(this.vao),s\u003d0,this.boundProgram\u003dt,this.boundLayoutVertexBuffer\u003de,this.boundPaintVertexBuffers\u003dr,this.boundIndexBuffer\u003dn,this.boundVertexOffset\u003di,this.boundDynamicVertexBuffer\u003da,this.boundDynamicVertexBuffer2\u003do;else{s\u003dc.currentNumAttributes||0;for(var f\u003dl;f\u003cs;f++)u.disableVertexAttribArray(f)}e.enableAttributes(u,t);for(var h\u003d0,p\u003dr;h\u003cp.length;h+\u003d1){p[h].enableAttributes(u,t)}a\u0026\u0026a.enableAttributes(u,t),o\u0026\u0026o.enableAttributes(u,t),e.bind(),e.setVertexAttribPointers(u,t,i);for(var d\u003d0,m\u003dr;d\u003cm.length;d+\u003d1){var g\u003dm[d];g.bind(),g.setVertexAttribPointers(u,t,i)}a\u0026\u0026(a.bind(),a.setVertexAttribPointers(u,t,i)),n\u0026\u0026n.bind(),o\u0026\u0026(o.bind(),o.setVertexAttribPointers(u,t,i)),c.currentNumAttributes\u003dl},br.prototype.destroy\u003dfunction(){this.vao\u0026\u0026(this.context.extVertexArrayObject.deleteVertexArrayOES(this.vao),this.vao\u003dnull)};var _r\u003dfunction(t,e,r,n,i){var a\u003dt.gl;this.program\u003da.createProgram();var o\u003dr?r.defines():[];i\u0026\u0026o.push(\"#define OVERDRAW_INSPECTOR;\");var s\u003do.concat(Ye.fragmentSource,e.fragmentSource).join(\"\\n\"),l\u003do.concat(Ye.vertexSource,e.vertexSource).join(\"\\n\"),c\u003da.createShader(a.FRAGMENT_SHADER);if(a.isContextLost())this.failedToCreate\u003d!0;else{a.shaderSource(c,s),a.compileShader(c),a.attachShader(this.program,c);var u\u003da.createShader(a.VERTEX_SHADER);if(a.isContextLost())this.failedToCreate\u003d!0;else{a.shaderSource(u,l),a.compileShader(u),a.attachShader(this.program,u);for(var f\u003dr?r.layoutAttributes:[],h\u003d0;h\u003cf.length;h++)a.bindAttribLocation(this.program,h,f[h].name);a.linkProgram(this.program),a.deleteShader(u),a.deleteShader(c),this.numAttributes\u003da.getProgramParameter(this.program,a.ACTIVE_ATTRIBUTES),this.attributes\u003d{};for(var p\u003d{},d\u003d0;d\u003cthis.numAttributes;d++){var m\u003da.getActiveAttrib(this.program,d);m\u0026\u0026(this.attributes[m.name]\u003da.getAttribLocation(this.program,m.name))}for(var g\u003da.getProgramParameter(this.program,a.ACTIVE_UNIFORMS),v\u003d0;v\u003cg;v++){var y\u003da.getActiveUniform(this.program,v);y\u0026\u0026(p[y.name]\u003da.getUniformLocation(this.program,y.name))}this.fixedUniforms\u003dn(t,p),this.binderUniforms\u003dr?r.getUniforms(t,p):[]}}};function wr(t,e,r){var n\u003d1/pe(r,1,e.transform.tileZoom),i\u003dMath.pow(2,r.tileID.overscaledZ),a\u003dr.tileSize*Math.pow(2,e.transform.tileZoom)/i,o\u003da*(r.tileID.canonical.x+r.tileID.wrap*i),s\u003da*r.tileID.canonical.y;return{u_image:0,u_texsize:r.imageAtlasTexture.size,u_scale:[n,t.fromScale,t.toScale],u_fade:t.t,u_pixel_coord_upper:[o\u003e\u003e16,s\u003e\u003e16],u_pixel_coord_lower:[65535\u0026o,65535\u0026s]}}_r.prototype.draw\u003dfunction(t,e,r,n,i,a,o,s,l,c,u,f,h,p,d,m){var g,v\u003dt.gl;if(!this.failedToCreate){for(var y in t.program.set(this.program),t.setDepthMode(r),t.setStencilMode(n),t.setColorMode(i),t.setCullFace(a),this.fixedUniforms)this.fixedUniforms[y].set(o[y]);p\u0026\u0026p.setUniforms(t,this.binderUniforms,f,{zoom:h});for(var x\u003d(g\u003d{},g[v.LINES]\u003d2,g[v.TRIANGLES]\u003d3,g[v.LINE_STRIP]\u003d1,g)[e],b\u003d0,_\u003du.get();b\u003c_.length;b+\u003d1){var w\u003d_[b],T\u003dw.vaos||(w.vaos\u003d{});(T[s]||(T[s]\u003dnew br)).bind(t,this,l,p?p.getPaintVertexBuffers():[],c,w.vertexOffset,d,m),v.drawElements(e,w.primitiveLength*x,v.UNSIGNED_SHORT,w.primitiveOffset*x*2)}}};var Tr\u003dfunction(e,r,n,i){var a\u003dr.style.light,o\u003da.properties.get(\"position\"),s\u003d[o.x,o.y,o.z],l\u003dt.create$1();\"viewport\"\u003d\u003d\u003da.properties.get(\"anchor\")\u0026\u0026t.fromRotation(l,-r.transform.angle),t.transformMat3(s,s,l);var c\u003da.properties.get(\"color\");return{u_matrix:e,u_lightpos:s,u_lightintensity:a.properties.get(\"intensity\"),u_lightcolor:[c.r,c.g,c.b],u_vertical_gradient:+n,u_opacity:i}},kr\u003dfunction(e,r,n,i,a,o,s){return t.extend(Tr(e,r,n,i),wr(o,r,s),{u_height_factor:-Math.pow(2,a.overscaledZ)/s.tileSize/8})},Mr\u003dfunction(t){return{u_matrix:t}},Ar\u003dfunction(e,r,n,i){return t.extend(Mr(e),wr(n,r,i))},Sr\u003dfunction(t,e){return{u_matrix:t,u_world:e}},Er\u003dfunction(e,r,n,i,a){return t.extend(Ar(e,r,n,i),{u_world:a})},Lr\u003dfunction(e,r,n,i){var a,o,s\u003de.transform;if(\"map\"\u003d\u003d\u003di.paint.get(\"circle-pitch-alignment\")){var l\u003dpe(n,1,s.zoom);a\u003d!0,o\u003d[l,l]}else a\u003d!1,o\u003ds.pixelsToGLUnits;return{u_camera_to_center_distance:s.cameraToCenterDistance,u_scale_with_map:+(\"map\"\u003d\u003d\u003di.paint.get(\"circle-pitch-scale\")),u_matrix:e.translatePosMatrix(r.posMatrix,n,i.paint.get(\"circle-translate\"),i.paint.get(\"circle-translate-anchor\")),u_pitch_with_map:+a,u_device_pixel_ratio:t.browser.devicePixelRatio,u_extrude_scale:o}},Cr\u003dfunction(t,e,r){var n\u003dpe(r,1,e.zoom),i\u003dMath.pow(2,e.zoom-r.tileID.overscaledZ),a\u003dr.tileID.overscaleFactor();return{u_matrix:t,u_camera_to_center_distance:e.cameraToCenterDistance,u_pixels_to_tile_units:n,u_extrude_scale:[e.pixelsToGLUnits[0]/(n*i),e.pixelsToGLUnits[1]/(n*i)],u_overscale_factor:a}},Pr\u003dfunction(t,e,r){return{u_matrix:t,u_inv_matrix:e,u_camera_to_center_distance:r.cameraToCenterDistance,u_viewport_size:[r.width,r.height]}},Ir\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d1),{u_matrix:t,u_color:e,u_overlay:0,u_overlay_scale:r}},Or\u003dfunction(t){return{u_matrix:t}},zr\u003dfunction(t,e,r,n){return{u_matrix:t,u_extrude_scale:pe(e,1,r),u_intensity:n}};function Dr(e,r){var n\u003dMath.pow(2,r.canonical.z),i\u003dr.canonical.y;return[new t.MercatorCoordinate(0,i/n).toLngLat().lat,new t.MercatorCoordinate(0,(i+1)/n).toLngLat().lat]}var Rr\u003dfunction(e,r,n){var i\u003de.transform;return{u_matrix:Ur(e,r,n),u_ratio:1/pe(r,1,i.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_units_to_pixels:[1/i.pixelsToGLUnits[0],1/i.pixelsToGLUnits[1]]}},Fr\u003dfunction(e,r,n){return t.extend(Rr(e,r,n),{u_image:0})},Br\u003dfunction(e,r,n,i){var a\u003de.transform,o\u003djr(r,a);return{u_matrix:Ur(e,r,n),u_texsize:r.imageAtlasTexture.size,u_ratio:1/pe(r,1,a.zoom),u_device_pixel_ratio:t.browser.devicePixelRatio,u_image:0,u_scale:[o,i.fromScale,i.toScale],u_fade:i.t,u_units_to_pixels:[1/a.pixelsToGLUnits[0],1/a.pixelsToGLUnits[1]]}},Nr\u003dfunction(e,r,n,i,a){var o\u003de.transform,s\u003de.lineAtlas,l\u003djr(r,o),c\u003d\"round\"\u003d\u003d\u003dn.layout.get(\"line-cap\"),u\u003ds.getDash(i.from,c),f\u003ds.getDash(i.to,c),h\u003du.width*a.fromScale,p\u003df.width*a.toScale;return t.extend(Rr(e,r,n),{u_patternscale_a:[l/h,-u.height/2],u_patternscale_b:[l/p,-f.height/2],u_sdfgamma:s.width/(256*Math.min(h,p)*t.browser.devicePixelRatio)/2,u_image:0,u_tex_y_a:u.y,u_tex_y_b:f.y,u_mix:a.t})};function jr(t,e){return 1/pe(t,1,e.tileZoom)}function Ur(t,e,r){return t.translatePosMatrix(e.tileID.posMatrix,e,r.paint.get(\"line-translate\"),r.paint.get(\"line-translate-anchor\"))}var Vr\u003dfunction(t,e,r,n,i){return{u_matrix:t,u_tl_parent:e,u_scale_parent:r,u_buffer_scale:1,u_fade_t:n.mix,u_opacity:n.opacity*i.paint.get(\"raster-opacity\"),u_image0:0,u_image1:1,u_brightness_low:i.paint.get(\"raster-brightness-min\"),u_brightness_high:i.paint.get(\"raster-brightness-max\"),u_saturation_factor:(o\u003di.paint.get(\"raster-saturation\"),o\u003e0?1-1/(1.001-o):-o),u_contrast_factor:(a\u003di.paint.get(\"raster-contrast\"),a\u003e0?1/(1-a):1+a),u_spin_weights:qr(i.paint.get(\"raster-hue-rotate\"))};var a,o};function qr(t){t*\u003dMath.PI/180;var e\u003dMath.sin(t),r\u003dMath.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}var Hr,Gr\u003dfunction(t,e,r,n,i,a,o,s,l,c){var u\u003di.transform;return{u_is_size_zoom_constant:+(\"constant\"\u003d\u003d\u003dt||\"source\"\u003d\u003d\u003dt),u_is_size_feature_constant:+(\"constant\"\u003d\u003d\u003dt||\"camera\"\u003d\u003d\u003dt),u_size_t:e?e.uSizeT:0,u_size:e?e.uSize:0,u_camera_to_center_distance:u.cameraToCenterDistance,u_pitch:u.pitch/360*2*Math.PI,u_rotate_symbol:+r,u_aspect_ratio:u.width/u.height,u_fade_change:i.options.fadeDuration?i.symbolFadeChange:1,u_matrix:a,u_label_plane_matrix:o,u_coord_matrix:s,u_is_text:+l,u_pitch_with_map:+n,u_texsize:c,u_texture:0}},Yr\u003dfunction(e,r,n,i,a,o,s,l,c,u,f){var h\u003da.transform;return t.extend(Gr(e,r,n,i,a,o,s,l,c,u),{u_gamma_scale:i?Math.cos(h._pitch)*h.cameraToCenterDistance:1,u_device_pixel_ratio:t.browser.devicePixelRatio,u_is_halo:+f})},Wr\u003dfunction(e,r,n,i,a,o,s,l,c,u){return t.extend(Yr(e,r,n,i,a,o,s,l,!0,c,!0),{u_texsize_icon:u,u_texture_icon:1})},Xr\u003dfunction(t,e,r){return{u_matrix:t,u_opacity:e,u_color:r}},Zr\u003dfunction(e,r,n,i,a,o){return t.extend(function(t,e,r,n){var i\u003dr.imageManager.getPattern(t.from.toString()),a\u003dr.imageManager.getPattern(t.to.toString()),o\u003dr.imageManager.getPixelSize(),s\u003do.width,l\u003do.height,c\u003dMath.pow(2,n.tileID.overscaledZ),u\u003dn.tileSize*Math.pow(2,r.transform.tileZoom)/c,f\u003du*(n.tileID.canonical.x+n.tileID.wrap*c),h\u003du*n.tileID.canonical.y;return{u_image:0,u_pattern_tl_a:i.tl,u_pattern_br_a:i.br,u_pattern_tl_b:a.tl,u_pattern_br_b:a.br,u_texsize:[s,l],u_mix:e.t,u_pattern_size_a:i.displaySize,u_pattern_size_b:a.displaySize,u_scale_a:e.fromScale,u_scale_b:e.toScale,u_tile_units_to_pixels:1/pe(n,1,r.transform.tileZoom),u_pixel_coord_upper:[f\u003e\u003e16,h\u003e\u003e16],u_pixel_coord_lower:[65535\u0026f,65535\u0026h]}}(i,o,n,a),{u_matrix:e,u_opacity:r})},Jr\u003d{fillExtrusion:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fillExtrusionPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_lightpos:new t.Uniform3f(e,r.u_lightpos),u_lightintensity:new t.Uniform1f(e,r.u_lightintensity),u_lightcolor:new t.Uniform3f(e,r.u_lightcolor),u_vertical_gradient:new t.Uniform1f(e,r.u_vertical_gradient),u_height_factor:new t.Uniform1f(e,r.u_height_factor),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade),u_opacity:new t.Uniform1f(e,r.u_opacity)}},fill:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},fillPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},fillOutline:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world)}},fillOutlinePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_texsize:new t.Uniform2f(e,r.u_texsize),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},circle:function(e,r){return{u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_scale_with_map:new t.Uniform1i(e,r.u_scale_with_map),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},collisionBox:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pixels_to_tile_units:new t.Uniform1f(e,r.u_pixels_to_tile_units),u_extrude_scale:new t.Uniform2f(e,r.u_extrude_scale),u_overscale_factor:new t.Uniform1f(e,r.u_overscale_factor)}},collisionCircle:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_inv_matrix:new t.UniformMatrix4f(e,r.u_inv_matrix),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_viewport_size:new t.Uniform2f(e,r.u_viewport_size)}},debug:function(e,r){return{u_color:new t.UniformColor(e,r.u_color),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_overlay:new t.Uniform1i(e,r.u_overlay),u_overlay_scale:new t.Uniform1f(e,r.u_overlay_scale)}},clippingMask:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmap:function(e,r){return{u_extrude_scale:new t.Uniform1f(e,r.u_extrude_scale),u_intensity:new t.Uniform1f(e,r.u_intensity),u_matrix:new t.UniformMatrix4f(e,r.u_matrix)}},heatmapTexture:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_world:new t.Uniform2f(e,r.u_world),u_image:new t.Uniform1i(e,r.u_image),u_color_ramp:new t.Uniform1i(e,r.u_color_ramp),u_opacity:new t.Uniform1f(e,r.u_opacity)}},hillshade:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_latrange:new t.Uniform2f(e,r.u_latrange),u_light:new t.Uniform2f(e,r.u_light),u_shadow:new t.UniformColor(e,r.u_shadow),u_highlight:new t.UniformColor(e,r.u_highlight),u_accent:new t.UniformColor(e,r.u_accent)}},hillshadePrepare:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_image:new t.Uniform1i(e,r.u_image),u_dimension:new t.Uniform2f(e,r.u_dimension),u_zoom:new t.Uniform1f(e,r.u_zoom),u_maxzoom:new t.Uniform1f(e,r.u_maxzoom),u_unpack:new t.Uniform4f(e,r.u_unpack)}},line:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels)}},lineGradient:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_image:new t.Uniform1i(e,r.u_image)}},linePattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_texsize:new t.Uniform2f(e,r.u_texsize),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_image:new t.Uniform1i(e,r.u_image),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_scale:new t.Uniform3f(e,r.u_scale),u_fade:new t.Uniform1f(e,r.u_fade)}},lineSDF:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_ratio:new t.Uniform1f(e,r.u_ratio),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_units_to_pixels:new t.Uniform2f(e,r.u_units_to_pixels),u_patternscale_a:new t.Uniform2f(e,r.u_patternscale_a),u_patternscale_b:new t.Uniform2f(e,r.u_patternscale_b),u_sdfgamma:new t.Uniform1f(e,r.u_sdfgamma),u_image:new t.Uniform1i(e,r.u_image),u_tex_y_a:new t.Uniform1f(e,r.u_tex_y_a),u_tex_y_b:new t.Uniform1f(e,r.u_tex_y_b),u_mix:new t.Uniform1f(e,r.u_mix)}},raster:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_tl_parent:new t.Uniform2f(e,r.u_tl_parent),u_scale_parent:new t.Uniform1f(e,r.u_scale_parent),u_buffer_scale:new t.Uniform1f(e,r.u_buffer_scale),u_fade_t:new t.Uniform1f(e,r.u_fade_t),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image0:new t.Uniform1i(e,r.u_image0),u_image1:new t.Uniform1i(e,r.u_image1),u_brightness_low:new t.Uniform1f(e,r.u_brightness_low),u_brightness_high:new t.Uniform1f(e,r.u_brightness_high),u_saturation_factor:new t.Uniform1f(e,r.u_saturation_factor),u_contrast_factor:new t.Uniform1f(e,r.u_contrast_factor),u_spin_weights:new t.Uniform3f(e,r.u_spin_weights)}},symbolIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture)}},symbolSDF:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texture:new t.Uniform1i(e,r.u_texture),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},symbolTextAndIcon:function(e,r){return{u_is_size_zoom_constant:new t.Uniform1i(e,r.u_is_size_zoom_constant),u_is_size_feature_constant:new t.Uniform1i(e,r.u_is_size_feature_constant),u_size_t:new t.Uniform1f(e,r.u_size_t),u_size:new t.Uniform1f(e,r.u_size),u_camera_to_center_distance:new t.Uniform1f(e,r.u_camera_to_center_distance),u_pitch:new t.Uniform1f(e,r.u_pitch),u_rotate_symbol:new t.Uniform1i(e,r.u_rotate_symbol),u_aspect_ratio:new t.Uniform1f(e,r.u_aspect_ratio),u_fade_change:new t.Uniform1f(e,r.u_fade_change),u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_label_plane_matrix:new t.UniformMatrix4f(e,r.u_label_plane_matrix),u_coord_matrix:new t.UniformMatrix4f(e,r.u_coord_matrix),u_is_text:new t.Uniform1i(e,r.u_is_text),u_pitch_with_map:new t.Uniform1i(e,r.u_pitch_with_map),u_texsize:new t.Uniform2f(e,r.u_texsize),u_texsize_icon:new t.Uniform2f(e,r.u_texsize_icon),u_texture:new t.Uniform1i(e,r.u_texture),u_texture_icon:new t.Uniform1i(e,r.u_texture_icon),u_gamma_scale:new t.Uniform1f(e,r.u_gamma_scale),u_device_pixel_ratio:new t.Uniform1f(e,r.u_device_pixel_ratio),u_is_halo:new t.Uniform1i(e,r.u_is_halo)}},background:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_color:new t.UniformColor(e,r.u_color)}},backgroundPattern:function(e,r){return{u_matrix:new t.UniformMatrix4f(e,r.u_matrix),u_opacity:new t.Uniform1f(e,r.u_opacity),u_image:new t.Uniform1i(e,r.u_image),u_pattern_tl_a:new t.Uniform2f(e,r.u_pattern_tl_a),u_pattern_br_a:new t.Uniform2f(e,r.u_pattern_br_a),u_pattern_tl_b:new t.Uniform2f(e,r.u_pattern_tl_b),u_pattern_br_b:new t.Uniform2f(e,r.u_pattern_br_b),u_texsize:new t.Uniform2f(e,r.u_texsize),u_mix:new t.Uniform1f(e,r.u_mix),u_pattern_size_a:new t.Uniform2f(e,r.u_pattern_size_a),u_pattern_size_b:new t.Uniform2f(e,r.u_pattern_size_b),u_scale_a:new t.Uniform1f(e,r.u_scale_a),u_scale_b:new t.Uniform1f(e,r.u_scale_b),u_pixel_coord_upper:new t.Uniform2f(e,r.u_pixel_coord_upper),u_pixel_coord_lower:new t.Uniform2f(e,r.u_pixel_coord_lower),u_tile_units_to_pixels:new t.Uniform1f(e,r.u_tile_units_to_pixels)}}};function Kr(e,r,n,i,a,o,s){for(var l\u003de.context,c\u003dl.gl,u\u003de.useProgram(\"collisionBox\"),f\u003d[],h\u003d0,p\u003d0,d\u003d0;d\u003ci.length;d++){var m\u003di[d],g\u003dr.getTile(m),v\u003dg.getBucket(n);if(v){var y\u003dm.posMatrix;0\u003d\u003d\u003da[0]\u0026\u00260\u003d\u003d\u003da[1]||(y\u003de.translatePosMatrix(m.posMatrix,g,a,o));var x\u003ds?v.textCollisionBox:v.iconCollisionBox,b\u003dv.collisionCircleArray;if(b.length\u003e0){var _\u003dt.create(),w\u003dy;t.mul(_,v.placementInvProjMatrix,e.transform.glCoordMatrix),t.mul(_,_,v.placementViewportMatrix),f.push({circleArray:b,circleOffset:p,transform:w,invTransform:_}),p\u003dh+\u003db.length/4}x\u0026\u0026u.draw(l,c.LINES,Mt.disabled,At.disabled,e.colorModeForRenderPass(),Et.disabled,Cr(y,e.transform,g),n.id,x.layoutVertexBuffer,x.indexBuffer,x.segments,null,e.transform.zoom,null,null,x.collisionVertexBuffer)}}if(s\u0026\u0026f.length){var T\u003de.useProgram(\"collisionCircle\"),k\u003dnew t.StructArrayLayout2f1f2i16;k.resize(4*h),k._trim();for(var M\u003d0,A\u003d0,S\u003df;A\u003cS.length;A+\u003d1)for(var E\u003dS[A],L\u003d0;L\u003cE.circleArray.length/4;L++){var C\u003d4*L,P\u003dE.circleArray[C+0],I\u003dE.circleArray[C+1],O\u003dE.circleArray[C+2],z\u003dE.circleArray[C+3];k.emplace(M++,P,I,O,z,0),k.emplace(M++,P,I,O,z,1),k.emplace(M++,P,I,O,z,2),k.emplace(M++,P,I,O,z,3)}(!Hr||Hr.length\u003c2*h)\u0026\u0026(Hr\u003dfunction(e){var r\u003d2*e,n\u003dnew t.StructArrayLayout3ui6;n.resize(r),n._trim();for(var i\u003d0;i\u003cr;i++){var a\u003d6*i;n.uint16[a+0]\u003d4*i+0,n.uint16[a+1]\u003d4*i+1,n.uint16[a+2]\u003d4*i+2,n.uint16[a+3]\u003d4*i+2,n.uint16[a+4]\u003d4*i+3,n.uint16[a+5]\u003d4*i+0}return n}(h));for(var D\u003dl.createIndexBuffer(Hr,!0),R\u003dl.createVertexBuffer(k,t.collisionCircleLayout.members,!0),F\u003d0,B\u003df;F\u003cB.length;F+\u003d1){var N\u003dB[F],j\u003dPr(N.transform,N.invTransform,e.transform);T.draw(l,c.TRIANGLES,Mt.disabled,At.disabled,e.colorModeForRenderPass(),Et.disabled,j,n.id,R,D,t.SegmentVector.simpleSegment(0,2*N.circleOffset,N.circleArray.length,N.circleArray.length/2),null,e.transform.zoom,null,null,null)}R.destroy(),D.destroy()}}var Qr\u003dt.identity(new Float32Array(16));function $r(e,r,n,i,a,o){var s\u003dt.getAnchorAlignment(e),l\u003d-(s.horizontalAlign-.5)*r,c\u003d-(s.verticalAlign-.5)*n,u\u003dt.evaluateVariableOffset(e,i);return new t.Point((l/a+u[0])*o,(c/a+u[1])*o)}function tn(e,r,n,i,a,o,s,l,c,u,f){var h\u003de.text.placedSymbolArray,p\u003de.text.dynamicLayoutVertexArray,d\u003de.icon.dynamicLayoutVertexArray,m\u003d{};p.clear();for(var g\u003d0;g\u003ch.length;g++){var v\u003dh.get(g),y\u003de.allowVerticalPlacement\u0026\u0026!v.placedOrientation,x\u003dv.hidden||!v.crossTileID||y?null:i[v.crossTileID];if(x){var b\u003dnew t.Point(v.anchorX,v.anchorY),_\u003dte(b,n?l:s),w\u003dee(o.cameraToCenterDistance,_.signedDistanceFromCamera),T\u003da.evaluateSizeForFeature(e.textSizeData,u,v)*w/t.ONE_EM;n\u0026\u0026(T*\u003de.tilePixelRatio/c);for(var k\u003dx.width,M\u003dx.height,A\u003d$r(x.anchor,k,M,x.textOffset,x.textBoxScale,T),S\u003dn?te(b.add(A),s).point:_.point.add(r?A.rotate(-o.angle):A),E\u003de.allowVerticalPlacement\u0026\u0026v.placedOrientation\u003d\u003d\u003dt.WritingMode.vertical?Math.PI/2:0,L\u003d0;L\u003cv.numGlyphs;L++)t.addDynamicAttributes(p,S,E);f\u0026\u0026v.associatedIconIndex\u003e\u003d0\u0026\u0026(m[v.associatedIconIndex]\u003d{shiftedAnchor:S,angle:E})}else ue(v.numGlyphs,p)}if(f){d.clear();for(var C\u003de.icon.placedSymbolArray,P\u003d0;P\u003cC.length;P++){var I\u003dC.get(P);if(I.hidden)ue(I.numGlyphs,d);else{var O\u003dm[P];if(O)for(var z\u003d0;z\u003cI.numGlyphs;z++)t.addDynamicAttributes(d,O.shiftedAnchor,O.angle);else ue(I.numGlyphs,d)}}e.icon.dynamicLayoutVertexBuffer.updateData(d)}e.text.dynamicLayoutVertexBuffer.updateData(p)}function en(t,e,r){return r.iconsInText\u0026\u0026e?\"symbolTextAndIcon\":t?\"symbolSDF\":\"symbolIcon\"}function rn(e,r,n,i,a,o,s,l,c,u,f,h){for(var p\u003de.context,d\u003dp.gl,m\u003de.transform,g\u003d\"map\"\u003d\u003d\u003dl,v\u003d\"map\"\u003d\u003d\u003dc,y\u003dg\u0026\u0026\"point\"!\u003d\u003dn.layout.get(\"symbol-placement\"),x\u003dg\u0026\u0026!v\u0026\u0026!y,b\u003dvoid 0!\u003d\u003dn.layout.get(\"symbol-sort-key\").constantOr(1),_\u003de.depthModeForSublayer(0,Mt.ReadOnly),w\u003dn.layout.get(\"text-variable-anchor\"),T\u003d[],k\u003d0,M\u003di;k\u003cM.length;k+\u003d1){var A\u003dM[k],S\u003dr.getTile(A),E\u003dS.getBucket(n);if(E){var L\u003da?E.text:E.icon;if(L\u0026\u0026L.segments.get().length){var C\u003dL.programConfigurations.get(n.id),P\u003da||E.sdfIcons,I\u003da?E.textSizeData:E.iconSizeData,O\u003dv||0!\u003d\u003dm.pitch,z\u003de.useProgram(en(P,a,E),C),D\u003dt.evaluateSizeForZoom(I,m.zoom),R\u003dvoid 0,F\u003d[0,0],B\u003dvoid 0,N\u003dvoid 0,j\u003dnull,U\u003dvoid 0;if(a){if(B\u003dS.glyphAtlasTexture,N\u003dd.LINEAR,R\u003dS.glyphAtlasTexture.size,E.iconsInText){F\u003dS.imageAtlasTexture.size,j\u003dS.imageAtlasTexture;var V\u003d\"composite\"\u003d\u003d\u003dI.kind||\"camera\"\u003d\u003d\u003dI.kind;U\u003dO||e.options.rotating||e.options.zooming||V?d.LINEAR:d.NEAREST}}else{var q\u003d1!\u003d\u003dn.layout.get(\"icon-size\").constantOr(0)||E.iconsNeedLinear;B\u003dS.imageAtlasTexture,N\u003dP||e.options.rotating||e.options.zooming||q||O?d.LINEAR:d.NEAREST,R\u003dS.imageAtlasTexture.size}var H\u003dpe(S,1,e.transform.zoom),G\u003dQt(A.posMatrix,v,g,e.transform,H),Y\u003d$t(A.posMatrix,v,g,e.transform,H),W\u003dw\u0026\u0026E.hasTextData(),X\u003d\"none\"!\u003d\u003dn.layout.get(\"icon-text-fit\")\u0026\u0026W\u0026\u0026E.hasIconData();y\u0026\u0026ne(E,A.posMatrix,e,a,G,Y,v,u);var Z\u003de.translatePosMatrix(A.posMatrix,S,o,s),J\u003dy||a\u0026\u0026w||X?Qr:G,K\u003de.translatePosMatrix(Y,S,o,s,!0),Q\u003dP\u0026\u00260!\u003d\u003dn.paint.get(a?\"text-halo-width\":\"icon-halo-width\").constantOr(1),$\u003d{program:z,buffers:L,uniformValues:P?E.iconsInText?Wr(I.kind,D,x,v,e,Z,J,K,R,F):Yr(I.kind,D,x,v,e,Z,J,K,a,R,!0):Gr(I.kind,D,x,v,e,Z,J,K,a,R),atlasTexture:B,atlasTextureIcon:j,atlasInterpolation:N,atlasInterpolationIcon:U,isSDF:P,hasHalo:Q};if(b)for(var tt\u003d0,et\u003dL.segments.get();tt\u003cet.length;tt+\u003d1){var rt\u003det[tt];T.push({segments:new t.SegmentVector([rt]),sortKey:rt.sortKey,state:$})}else T.push({segments:L.segments,sortKey:0,state:$})}}}b\u0026\u0026T.sort((function(t,e){return t.sortKey-e.sortKey}));for(var nt\u003d0,it\u003dT;nt\u003cit.length;nt+\u003d1){var at\u003dit[nt],ot\u003dat.state;if(p.activeTexture.set(d.TEXTURE0),ot.atlasTexture.bind(ot.atlasInterpolation,d.CLAMP_TO_EDGE),ot.atlasTextureIcon\u0026\u0026(p.activeTexture.set(d.TEXTURE1),ot.atlasTextureIcon\u0026\u0026ot.atlasTextureIcon.bind(ot.atlasInterpolationIcon,d.CLAMP_TO_EDGE)),ot.isSDF){var st\u003dot.uniformValues;ot.hasHalo\u0026\u0026(st.u_is_halo\u003d1,nn(ot.buffers,at.segments,n,e,ot.program,_,f,h,st)),st.u_is_halo\u003d0}nn(ot.buffers,at.segments,n,e,ot.program,_,f,h,ot.uniformValues)}}function nn(t,e,r,n,i,a,o,s,l){var c\u003dn.context,u\u003dc.gl;i.draw(c,u.TRIANGLES,a,o,s,Et.disabled,l,r.id,t.layoutVertexBuffer,t.indexBuffer,e,r.paint,n.transform.zoom,t.programConfigurations.get(r.id),t.dynamicLayoutVertexBuffer,t.opacityVertexBuffer)}function an(t,e,r,n,i,a,o){var s,l,c,u,f,h\u003dt.context.gl,p\u003dr.paint.get(\"fill-pattern\"),d\u003dp\u0026\u0026p.constantOr(1),m\u003dr.getCrossfadeParameters();o?(l\u003dd\u0026\u0026!r.getPaintProperty(\"fill-outline-color\")?\"fillOutlinePattern\":\"fillOutline\",s\u003dh.LINES):(l\u003dd?\"fillPattern\":\"fill\",s\u003dh.TRIANGLES);for(var g\u003d0,v\u003dn;g\u003cv.length;g+\u003d1){var y\u003dv[g],x\u003de.getTile(y);if(!d||x.patternsLoaded()){var b\u003dx.getBucket(r);if(b){var _\u003db.programConfigurations.get(r.id),w\u003dt.useProgram(l,_);d\u0026\u0026(t.context.activeTexture.set(h.TEXTURE0),x.imageAtlasTexture.bind(h.LINEAR,h.CLAMP_TO_EDGE),_.updatePaintBuffers(m));var T\u003dp.constantOr(null);if(T\u0026\u0026x.imageAtlas){var k\u003dx.imageAtlas,M\u003dk.patternPositions[T.to.toString()],A\u003dk.patternPositions[T.from.toString()];M\u0026\u0026A\u0026\u0026_.setConstantPatternPositions(M,A)}var S\u003dt.translatePosMatrix(y.posMatrix,x,r.paint.get(\"fill-translate\"),r.paint.get(\"fill-translate-anchor\"));if(o){u\u003db.indexBuffer2,f\u003db.segments2;var E\u003d[h.drawingBufferWidth,h.drawingBufferHeight];c\u003d\"fillOutlinePattern\"\u003d\u003d\u003dl\u0026\u0026d?Er(S,t,m,x,E):Sr(S,E)}else u\u003db.indexBuffer,f\u003db.segments,c\u003dd?Ar(S,t,m,x):Mr(S);w.draw(t.context,s,i,t.stencilModeForClipping(y),a,Et.disabled,c,r.id,b.layoutVertexBuffer,u,f,r.paint,t.transform.zoom,_)}}}}function on(t,e,r,n,i,a,o){for(var s\u003dt.context,l\u003ds.gl,c\u003dr.paint.get(\"fill-extrusion-pattern\"),u\u003dc.constantOr(1),f\u003dr.getCrossfadeParameters(),h\u003dr.paint.get(\"fill-extrusion-opacity\"),p\u003d0,d\u003dn;p\u003cd.length;p+\u003d1){var m\u003dd[p],g\u003de.getTile(m),v\u003dg.getBucket(r);if(v){var y\u003dv.programConfigurations.get(r.id),x\u003dt.useProgram(u?\"fillExtrusionPattern\":\"fillExtrusion\",y);u\u0026\u0026(t.context.activeTexture.set(l.TEXTURE0),g.imageAtlasTexture.bind(l.LINEAR,l.CLAMP_TO_EDGE),y.updatePaintBuffers(f));var b\u003dc.constantOr(null);if(b\u0026\u0026g.imageAtlas){var _\u003dg.imageAtlas,w\u003d_.patternPositions[b.to.toString()],T\u003d_.patternPositions[b.from.toString()];w\u0026\u0026T\u0026\u0026y.setConstantPatternPositions(w,T)}var k\u003dt.translatePosMatrix(m.posMatrix,g,r.paint.get(\"fill-extrusion-translate\"),r.paint.get(\"fill-extrusion-translate-anchor\")),M\u003dr.paint.get(\"fill-extrusion-vertical-gradient\"),A\u003du?kr(k,t,M,h,m,f,g):Tr(k,t,M,h);x.draw(s,s.gl.TRIANGLES,i,a,o,Et.backCCW,A,r.id,v.layoutVertexBuffer,v.indexBuffer,v.segments,r.paint,t.transform.zoom,y)}}}function sn(t,e,r,n,i,a){var o\u003dt.context,s\u003do.gl,l\u003de.fbo;if(l){var c\u003dt.useProgram(\"hillshade\");o.activeTexture.set(s.TEXTURE0),s.bindTexture(s.TEXTURE_2D,l.colorAttachment.get());var u\u003dfunction(t,e,r){var n\u003dr.paint.get(\"hillshade-shadow-color\"),i\u003dr.paint.get(\"hillshade-highlight-color\"),a\u003dr.paint.get(\"hillshade-accent-color\"),o\u003dr.paint.get(\"hillshade-illumination-direction\")*(Math.PI/180);\"viewport\"\u003d\u003d\u003dr.paint.get(\"hillshade-illumination-anchor\")\u0026\u0026(o-\u003dt.transform.angle);var s\u003d!t.options.moving;return{u_matrix:t.transform.calculatePosMatrix(e.tileID.toUnwrapped(),s),u_image:0,u_latrange:Dr(t,e.tileID),u_light:[r.paint.get(\"hillshade-exaggeration\"),o],u_shadow:n,u_highlight:i,u_accent:a}}(t,e,r);c.draw(o,s.TRIANGLES,n,i,a,Et.disabled,u,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}}function ln(e,r,n,i,a,o,s){var l\u003de.context,c\u003dl.gl,u\u003dr.dem;if(u\u0026\u0026u.data){var f\u003du.dim,h\u003du.stride,p\u003du.getPixels();if(l.activeTexture.set(c.TEXTURE1),l.pixelStoreUnpackPremultiplyAlpha.set(!1),r.demTexture\u003dr.demTexture||e.getTileTexture(h),r.demTexture){var d\u003dr.demTexture;d.update(p,{premultiply:!1}),d.bind(c.NEAREST,c.CLAMP_TO_EDGE)}else r.demTexture\u003dnew t.Texture(l,p,c.RGBA,{premultiply:!1}),r.demTexture.bind(c.NEAREST,c.CLAMP_TO_EDGE);l.activeTexture.set(c.TEXTURE0);var m\u003dr.fbo;if(!m){var g\u003dnew t.Texture(l,{width:f,height:f,data:null},c.RGBA);g.bind(c.LINEAR,c.CLAMP_TO_EDGE),(m\u003dr.fbo\u003dl.createFramebuffer(f,f,!0)).colorAttachment.set(g.texture)}l.bindFramebuffer.set(m.framebuffer),l.viewport.set([0,0,f,f]),e.useProgram(\"hillshadePrepare\").draw(l,c.TRIANGLES,a,o,s,Et.disabled,function(e,r,n){var i\u003dr.stride,a\u003dt.create();return t.ortho(a,0,t.EXTENT,-t.EXTENT,0,0,1),t.translate(a,a,[0,-t.EXTENT,0]),{u_matrix:a,u_image:1,u_dimension:[i,i],u_zoom:e.overscaledZ,u_maxzoom:n,u_unpack:r.getUnpackVector()}}(r.tileID,u,i),n.id,e.rasterBoundsBuffer,e.quadTriangleIndexBuffer,e.rasterBoundsSegments),r.needsHillshadePrepare\u003d!1}}function cn(e,r,n,i,a){var o\u003di.paint.get(\"raster-fade-duration\");if(o\u003e0){var s\u003dt.browser.now(),l\u003d(s-e.timeAdded)/o,c\u003dr?(s-r.timeAdded)/o:-1,u\u003dn.getSource(),f\u003da.coveringZoomLevel({tileSize:u.tileSize,roundZoom:u.roundZoom}),h\u003d!r||Math.abs(r.tileID.overscaledZ-f)\u003eMath.abs(e.tileID.overscaledZ-f),p\u003dh\u0026\u0026e.refreshedUponExpiration?1:t.clamp(h?l:1-c,0,1);return e.refreshedUponExpiration\u0026\u0026l\u003e\u003d1\u0026\u0026(e.refreshedUponExpiration\u003d!1),r?{opacity:1,mix:1-p}:{opacity:p,mix:0}}return{opacity:1,mix:0}}var un\u003dnew t.Color(1,0,0,1),fn\u003dnew t.Color(0,1,0,1),hn\u003dnew t.Color(0,0,1,1),pn\u003dnew t.Color(1,0,1,1),dn\u003dnew t.Color(0,1,1,1);function mn(t){var e\u003dt.transform.padding;gn(t,t.transform.height-(e.top||0),3,un),gn(t,e.bottom||0,3,fn),vn(t,e.left||0,3,hn),vn(t,t.transform.width-(e.right||0),3,pn);var r\u003dt.transform.centerPoint;!function(t,e,r,n){yn(t,e-1,r-10,2,20,n),yn(t,e-10,r-1,20,2,n)}(t,r.x,t.transform.height-r.y,dn)}function gn(t,e,r,n){yn(t,0,e+r/2,t.transform.width,r,n)}function vn(t,e,r,n){yn(t,e-r/2,0,r,t.transform.height,n)}function yn(e,r,n,i,a,o){var s\u003de.context,l\u003ds.gl;l.enable(l.SCISSOR_TEST),l.scissor(r*t.browser.devicePixelRatio,n*t.browser.devicePixelRatio,i*t.browser.devicePixelRatio,a*t.browser.devicePixelRatio),s.clear({color:o}),l.disable(l.SCISSOR_TEST)}function xn(e,r,n){var i\u003de.context,a\u003di.gl,o\u003dn.posMatrix,s\u003de.useProgram(\"debug\"),l\u003dMt.disabled,c\u003dAt.disabled,u\u003de.colorModeForRenderPass();i.activeTexture.set(a.TEXTURE0),e.emptyTexture.bind(a.LINEAR,a.CLAMP_TO_EDGE),s.draw(i,a.LINE_STRIP,l,c,u,Et.disabled,Ir(o,t.Color.red),\"$debug\",e.debugBuffer,e.tileBorderIndexBuffer,e.debugSegments);var f\u003dr.getTileByID(n.key).latestRawTileData,h\u003df\u0026\u0026f.byteLength||0,p\u003dMath.floor(h/1024),d\u003dr.getTile(n).tileSize,m\u003d512/Math.min(d,512)*(n.overscaledZ/e.transform.zoom)*.5,g\u003dn.canonical.toString();n.overscaledZ!\u003d\u003dn.canonical.z\u0026\u0026(g+\u003d\" \u003d\u003e \"+n.overscaledZ),function(t,e){t.initDebugOverlayCanvas();var r\u003dt.debugOverlayCanvas,n\u003dt.context.gl,i\u003dt.debugOverlayCanvas.getContext(\"2d\");i.clearRect(0,0,r.width,r.height),i.shadowColor\u003d\"white\",i.shadowBlur\u003d2,i.lineWidth\u003d1.5,i.strokeStyle\u003d\"white\",i.textBaseline\u003d\"top\",i.font\u003d\"bold 36px Open Sans, sans-serif\",i.fillText(e,5,5),i.strokeText(e,5,5),t.debugOverlayTexture.update(r),t.debugOverlayTexture.bind(n.LINEAR,n.CLAMP_TO_EDGE)}(e,g+\" \"+p+\"kb\"),s.draw(i,a.TRIANGLES,l,c,St.alphaBlended,Et.disabled,Ir(o,t.Color.transparent,m),\"$debug\",e.debugBuffer,e.quadTriangleIndexBuffer,e.debugSegments)}var bn\u003d{symbol:function(e,r,n,i,a){if(\"translucent\"\u003d\u003d\u003de.renderPass){var o\u003dAt.disabled,s\u003de.colorModeForRenderPass();n.layout.get(\"text-variable-anchor\")\u0026\u0026function(e,r,n,i,a,o,s){for(var l\u003dr.transform,c\u003d\"map\"\u003d\u003d\u003da,u\u003d\"map\"\u003d\u003d\u003do,f\u003d0,h\u003de;f\u003ch.length;f+\u003d1){var p\u003dh[f],d\u003di.getTile(p),m\u003dd.getBucket(n);if(m\u0026\u0026m.text\u0026\u0026m.text.segments.get().length){var g\u003dm.textSizeData,v\u003dt.evaluateSizeForZoom(g,l.zoom),y\u003dpe(d,1,r.transform.zoom),x\u003dQt(p.posMatrix,u,c,r.transform,y),b\u003d\"none\"!\u003d\u003dn.layout.get(\"icon-text-fit\")\u0026\u0026m.hasIconData();if(v){var _\u003dMath.pow(2,l.zoom-d.tileID.overscaledZ);tn(m,c,u,s,t.symbolSize,l,x,p.posMatrix,_,v,b)}}}}(i,e,n,r,n.layout.get(\"text-rotation-alignment\"),n.layout.get(\"text-pitch-alignment\"),a),0!\u003d\u003dn.paint.get(\"icon-opacity\").constantOr(1)\u0026\u0026rn(e,r,n,i,!1,n.paint.get(\"icon-translate\"),n.paint.get(\"icon-translate-anchor\"),n.layout.get(\"icon-rotation-alignment\"),n.layout.get(\"icon-pitch-alignment\"),n.layout.get(\"icon-keep-upright\"),o,s),0!\u003d\u003dn.paint.get(\"text-opacity\").constantOr(1)\u0026\u0026rn(e,r,n,i,!0,n.paint.get(\"text-translate\"),n.paint.get(\"text-translate-anchor\"),n.layout.get(\"text-rotation-alignment\"),n.layout.get(\"text-pitch-alignment\"),n.layout.get(\"text-keep-upright\"),o,s),r.map.showCollisionBoxes\u0026\u0026(Kr(e,r,n,i,n.paint.get(\"text-translate\"),n.paint.get(\"text-translate-anchor\"),!0),Kr(e,r,n,i,n.paint.get(\"icon-translate\"),n.paint.get(\"icon-translate-anchor\"),!1))}},circle:function(e,r,n,i){if(\"translucent\"\u003d\u003d\u003de.renderPass){var a\u003dn.paint.get(\"circle-opacity\"),o\u003dn.paint.get(\"circle-stroke-width\"),s\u003dn.paint.get(\"circle-stroke-opacity\"),l\u003dvoid 0!\u003d\u003dn.layout.get(\"circle-sort-key\").constantOr(1);if(0!\u003d\u003da.constantOr(1)||0!\u003d\u003do.constantOr(1)\u0026\u00260!\u003d\u003ds.constantOr(1)){for(var c\u003de.context,u\u003dc.gl,f\u003de.depthModeForSublayer(0,Mt.ReadOnly),h\u003dAt.disabled,p\u003de.colorModeForRenderPass(),d\u003d[],m\u003d0;m\u003ci.length;m++){var g\u003di[m],v\u003dr.getTile(g),y\u003dv.getBucket(n);if(y){var x\u003dy.programConfigurations.get(n.id),b\u003d{programConfiguration:x,program:e.useProgram(\"circle\",x),layoutVertexBuffer:y.layoutVertexBuffer,indexBuffer:y.indexBuffer,uniformValues:Lr(e,g,v,n)};if(l)for(var _\u003d0,w\u003dy.segments.get();_\u003cw.length;_+\u003d1){var T\u003dw[_];d.push({segments:new t.SegmentVector([T]),sortKey:T.sortKey,state:b})}else d.push({segments:y.segments,sortKey:0,state:b})}}l\u0026\u0026d.sort((function(t,e){return t.sortKey-e.sortKey}));for(var k\u003d0,M\u003dd;k\u003cM.length;k+\u003d1){var A\u003dM[k],S\u003dA.state,E\u003dS.programConfiguration,L\u003dS.program,C\u003dS.layoutVertexBuffer,P\u003dS.indexBuffer,I\u003dS.uniformValues,O\u003dA.segments;L.draw(c,u.TRIANGLES,f,h,p,Et.disabled,I,n.id,C,P,O,n.paint,e.transform.zoom,E)}}}},heatmap:function(e,r,n,i){if(0!\u003d\u003dn.paint.get(\"heatmap-opacity\"))if(\"offscreen\"\u003d\u003d\u003de.renderPass){var a\u003de.context,o\u003da.gl,s\u003dAt.disabled,l\u003dnew St([o.ONE,o.ONE],t.Color.transparent,[!0,!0,!0,!0]);!function(t,e,r){var n\u003dt.gl;t.activeTexture.set(n.TEXTURE1),t.viewport.set([0,0,e.width/4,e.height/4]);var i\u003dr.heatmapFbo;if(i)n.bindTexture(n.TEXTURE_2D,i.colorAttachment.get()),t.bindFramebuffer.set(i.framebuffer);else{var a\u003dn.createTexture();n.bindTexture(n.TEXTURE_2D,a),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),i\u003dr.heatmapFbo\u003dt.createFramebuffer(e.width/4,e.height/4,!1),function(t,e,r,n){var i\u003dt.gl,a\u003dt.extRenderToTextureHalfFloat?t.extTextureHalfFloat.HALF_FLOAT_OES:i.UNSIGNED_BYTE;i.texImage2D(i.TEXTURE_2D,0,i.RGBA,e.width/4,e.height/4,0,i.RGBA,a,null),n.colorAttachment.set(r)}(t,e,a,i)}}(a,e,n),a.clear({color:t.Color.transparent});for(var c\u003d0;c\u003ci.length;c++){var u\u003di[c];if(!r.hasRenderableParent(u)){var f\u003dr.getTile(u),h\u003df.getBucket(n);if(h){var p\u003dh.programConfigurations.get(n.id),d\u003de.useProgram(\"heatmap\",p),m\u003de.transform.zoom;d.draw(a,o.TRIANGLES,Mt.disabled,s,l,Et.disabled,zr(u.posMatrix,f,m,n.paint.get(\"heatmap-intensity\")),n.id,h.layoutVertexBuffer,h.indexBuffer,h.segments,n.paint,e.transform.zoom,p)}}}a.viewport.set([0,0,e.width,e.height])}else\"translucent\"\u003d\u003d\u003de.renderPass\u0026\u0026(e.context.setColorMode(e.colorModeForRenderPass()),function(e,r){var n\u003de.context,i\u003dn.gl,a\u003dr.heatmapFbo;if(!a)return;n.activeTexture.set(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,a.colorAttachment.get()),n.activeTexture.set(i.TEXTURE1);var o\u003dr.colorRampTexture;o||(o\u003dr.colorRampTexture\u003dnew t.Texture(n,r.colorRamp,i.RGBA));o.bind(i.LINEAR,i.CLAMP_TO_EDGE),e.useProgram(\"heatmapTexture\").draw(n,i.TRIANGLES,Mt.disabled,At.disabled,e.colorModeForRenderPass(),Et.disabled,function(e,r,n,i){var a\u003dt.create();t.ortho(a,0,e.width,e.height,0,0,1);var o\u003de.context.gl;return{u_matrix:a,u_world:[o.drawingBufferWidth,o.drawingBufferHeight],u_image:n,u_color_ramp:i,u_opacity:r.paint.get(\"heatmap-opacity\")}}(e,r,0,1),r.id,e.viewportBuffer,e.quadTriangleIndexBuffer,e.viewportSegments,r.paint,e.transform.zoom)}(e,n))},line:function(e,r,n,i){if(\"translucent\"\u003d\u003d\u003de.renderPass){var a\u003dn.paint.get(\"line-opacity\"),o\u003dn.paint.get(\"line-width\");if(0!\u003d\u003da.constantOr(1)\u0026\u00260!\u003d\u003do.constantOr(1)){var s\u003de.depthModeForSublayer(0,Mt.ReadOnly),l\u003de.colorModeForRenderPass(),c\u003dn.paint.get(\"line-dasharray\"),u\u003dn.paint.get(\"line-pattern\"),f\u003du.constantOr(1),h\u003dn.paint.get(\"line-gradient\"),p\u003dn.getCrossfadeParameters(),d\u003df?\"linePattern\":c?\"lineSDF\":h?\"lineGradient\":\"line\",m\u003de.context,g\u003dm.gl,v\u003d!0;if(h){m.activeTexture.set(g.TEXTURE0);var y\u003dn.gradientTexture;if(!n.gradient)return;y||(y\u003dn.gradientTexture\u003dnew t.Texture(m,n.gradient,g.RGBA)),y.bind(g.LINEAR,g.CLAMP_TO_EDGE)}for(var x\u003d0,b\u003di;x\u003cb.length;x+\u003d1){var _\u003db[x],w\u003dr.getTile(_);if(!f||w.patternsLoaded()){var T\u003dw.getBucket(n);if(T){var k\u003dT.programConfigurations.get(n.id),M\u003de.context.program.get(),A\u003de.useProgram(d,k),S\u003dv||A.program!\u003d\u003dM,E\u003du.constantOr(null);if(E\u0026\u0026w.imageAtlas){var L\u003dw.imageAtlas,C\u003dL.patternPositions[E.to.toString()],P\u003dL.patternPositions[E.from.toString()];C\u0026\u0026P\u0026\u0026k.setConstantPatternPositions(C,P)}var I\u003df?Br(e,w,n,p):c?Nr(e,w,n,c,p):h?Fr(e,w,n):Rr(e,w,n);f?(m.activeTexture.set(g.TEXTURE0),w.imageAtlasTexture.bind(g.LINEAR,g.CLAMP_TO_EDGE),k.updatePaintBuffers(p)):c\u0026\u0026(S||e.lineAtlas.dirty)\u0026\u0026(m.activeTexture.set(g.TEXTURE0),e.lineAtlas.bind(m)),A.draw(m,g.TRIANGLES,s,e.stencilModeForClipping(_),l,Et.disabled,I,n.id,T.layoutVertexBuffer,T.indexBuffer,T.segments,n.paint,e.transform.zoom,k),v\u003d!1}}}}}},fill:function(e,r,n,i){var a\u003dn.paint.get(\"fill-color\"),o\u003dn.paint.get(\"fill-opacity\");if(0!\u003d\u003do.constantOr(1)){var s\u003de.colorModeForRenderPass(),l\u003dn.paint.get(\"fill-pattern\"),c\u003de.opaquePassEnabledForLayer()\u0026\u0026!l.constantOr(1)\u0026\u00261\u003d\u003d\u003da.constantOr(t.Color.transparent).a\u0026\u00261\u003d\u003d\u003do.constantOr(0)?\"opaque\":\"translucent\";if(e.renderPass\u003d\u003d\u003dc){var u\u003de.depthModeForSublayer(1,\"opaque\"\u003d\u003d\u003de.renderPass?Mt.ReadWrite:Mt.ReadOnly);an(e,r,n,i,u,s,!1)}if(\"translucent\"\u003d\u003d\u003de.renderPass\u0026\u0026n.paint.get(\"fill-antialias\")){var f\u003de.depthModeForSublayer(n.getPaintProperty(\"fill-outline-color\")?2:0,Mt.ReadOnly);an(e,r,n,i,f,s,!0)}}},\"fill-extrusion\":function(t,e,r,n){var i\u003dr.paint.get(\"fill-extrusion-opacity\");if(0!\u003d\u003di\u0026\u0026\"translucent\"\u003d\u003d\u003dt.renderPass){var a\u003dnew Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D);if(1!\u003d\u003di||r.paint.get(\"fill-extrusion-pattern\").constantOr(1))on(t,e,r,n,a,At.disabled,St.disabled),on(t,e,r,n,a,t.stencilModeFor3D(),t.colorModeForRenderPass());else{var o\u003dt.colorModeForRenderPass();on(t,e,r,n,a,At.disabled,o)}}},hillshade:function(t,e,r,n){if(\"offscreen\"\u003d\u003d\u003dt.renderPass||\"translucent\"\u003d\u003d\u003dt.renderPass){for(var i\u003dt.context,a\u003de.getSource().maxzoom,o\u003dt.depthModeForSublayer(0,Mt.ReadOnly),s\u003dt.colorModeForRenderPass(),l\u003d\"translucent\"\u003d\u003d\u003dt.renderPass?t.stencilConfigForOverlap(n):[{},n],c\u003dl[0],u\u003d0,f\u003dl[1];u\u003cf.length;u+\u003d1){var h\u003df[u],p\u003de.getTile(h);p.needsHillshadePrepare\u0026\u0026\"offscreen\"\u003d\u003d\u003dt.renderPass?ln(t,p,r,a,o,At.disabled,s):\"translucent\"\u003d\u003d\u003dt.renderPass\u0026\u0026sn(t,p,r,o,c[h.overscaledZ],s)}i.viewport.set([0,0,t.width,t.height])}},raster:function(t,e,r,n){if(\"translucent\"\u003d\u003d\u003dt.renderPass\u0026\u00260!\u003d\u003dr.paint.get(\"raster-opacity\")\u0026\u0026n.length)for(var i\u003dt.context,a\u003di.gl,o\u003de.getSource(),s\u003dt.useProgram(\"raster\"),l\u003dt.colorModeForRenderPass(),c\u003do instanceof I?[{},n]:t.stencilConfigForOverlap(n),u\u003dc[0],f\u003dc[1],h\u003df[f.length-1].overscaledZ,p\u003d!t.options.moving,d\u003d0,m\u003df;d\u003cm.length;d+\u003d1){var g\u003dm[d],v\u003dt.depthModeForSublayer(g.overscaledZ-h,1\u003d\u003d\u003dr.paint.get(\"raster-opacity\")?Mt.ReadWrite:Mt.ReadOnly,a.LESS),y\u003de.getTile(g),x\u003dt.transform.calculatePosMatrix(g.toUnwrapped(),p);y.registerFadeDuration(r.paint.get(\"raster-fade-duration\"));var b\u003de.findLoadedParent(g,0),_\u003dcn(y,b,e,r,t.transform),w\u003dvoid 0,T\u003dvoid 0,k\u003d\"nearest\"\u003d\u003d\u003dr.paint.get(\"raster-resampling\")?a.NEAREST:a.LINEAR;i.activeTexture.set(a.TEXTURE0),y.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),i.activeTexture.set(a.TEXTURE1),b?(b.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST),w\u003dMath.pow(2,b.tileID.overscaledZ-y.tileID.overscaledZ),T\u003d[y.tileID.canonical.x*w%1,y.tileID.canonical.y*w%1]):y.texture.bind(k,a.CLAMP_TO_EDGE,a.LINEAR_MIPMAP_NEAREST);var M\u003dVr(x,T||[0,0],w||1,_,r);o instanceof I?s.draw(i,a.TRIANGLES,v,At.disabled,l,Et.disabled,M,r.id,o.boundsBuffer,t.quadTriangleIndexBuffer,o.boundsSegments):s.draw(i,a.TRIANGLES,v,u[g.overscaledZ],l,Et.disabled,M,r.id,t.rasterBoundsBuffer,t.quadTriangleIndexBuffer,t.rasterBoundsSegments)}},background:function(t,e,r){var n\u003dr.paint.get(\"background-color\"),i\u003dr.paint.get(\"background-opacity\");if(0!\u003d\u003di){var a\u003dt.context,o\u003da.gl,s\u003dt.transform,l\u003ds.tileSize,c\u003dr.paint.get(\"background-pattern\");if(!t.isPatternMissing(c)){var u\u003d!c\u0026\u00261\u003d\u003d\u003dn.a\u0026\u00261\u003d\u003d\u003di\u0026\u0026t.opaquePassEnabledForLayer()?\"opaque\":\"translucent\";if(t.renderPass\u003d\u003d\u003du){var f\u003dAt.disabled,h\u003dt.depthModeForSublayer(0,\"opaque\"\u003d\u003d\u003du?Mt.ReadWrite:Mt.ReadOnly),p\u003dt.colorModeForRenderPass(),d\u003dt.useProgram(c?\"backgroundPattern\":\"background\"),m\u003ds.coveringTiles({tileSize:l});c\u0026\u0026(a.activeTexture.set(o.TEXTURE0),t.imageManager.bind(t.context));for(var g\u003dr.getCrossfadeParameters(),v\u003d0,y\u003dm;v\u003cy.length;v+\u003d1){var x\u003dy[v],b\u003dt.transform.calculatePosMatrix(x.toUnwrapped()),_\u003dc?Zr(b,i,t,c,{tileID:x,tileSize:l},g):Xr(b,i,n);d.draw(a,o.TRIANGLES,h,f,p,Et.disabled,_,r.id,t.tileExtentBuffer,t.quadTriangleIndexBuffer,t.tileExtentSegments)}}}}},debug:function(t,e,r){for(var n\u003d0;n\u003cr.length;n++)xn(t,e,r[n])},custom:function(t,e,r){var n\u003dt.context,i\u003dr.implementation;if(\"offscreen\"\u003d\u003d\u003dt.renderPass){var a\u003di.prerender;a\u0026\u0026(t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),a.call(i,n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState())}else if(\"translucent\"\u003d\u003d\u003dt.renderPass){t.setCustomLayerDefaults(),n.setColorMode(t.colorModeForRenderPass()),n.setStencilMode(At.disabled);var o\u003d\"3d\"\u003d\u003d\u003di.renderingMode?new Mt(t.context.gl.LEQUAL,Mt.ReadWrite,t.depthRangeFor3D):t.depthModeForSublayer(0,Mt.ReadOnly);n.setDepthMode(o),i.render(n.gl,t.transform.customLayerMatrix()),n.setDirty(),t.setBaseState(),n.bindFramebuffer.set(null)}}},_n\u003dfunction(t,e){this.context\u003dnew Lt(t),this.transform\u003de,this._tileTextures\u003d{},this.setup(),this.numSublayers\u003dCt.maxUnderzooming+Ct.maxOverzooming+1,this.depthEpsilon\u003d1/Math.pow(2,16),this.crossTileSymbolIndex\u003dnew Ne,this.gpuTimers\u003d{}};_n.prototype.resize\u003dfunction(e,r){if(this.width\u003de*t.browser.devicePixelRatio,this.height\u003dr*t.browser.devicePixelRatio,this.context.viewport.set([0,0,this.width,this.height]),this.style)for(var n\u003d0,i\u003dthis.style._order;n\u003ci.length;n+\u003d1){var a\u003di[n];this.style._layers[a].resize()}},_n.prototype.setup\u003dfunction(){var e\u003dthis.context,r\u003dnew t.StructArrayLayout2i4;r.emplaceBack(0,0),r.emplaceBack(t.EXTENT,0),r.emplaceBack(0,t.EXTENT),r.emplaceBack(t.EXTENT,t.EXTENT),this.tileExtentBuffer\u003de.createVertexBuffer(r,Ge.members),this.tileExtentSegments\u003dt.SegmentVector.simpleSegment(0,0,4,2);var n\u003dnew t.StructArrayLayout2i4;n.emplaceBack(0,0),n.emplaceBack(t.EXTENT,0),n.emplaceBack(0,t.EXTENT),n.emplaceBack(t.EXTENT,t.EXTENT),this.debugBuffer\u003de.createVertexBuffer(n,Ge.members),this.debugSegments\u003dt.SegmentVector.simpleSegment(0,0,4,5);var i\u003dnew t.StructArrayLayout4i8;i.emplaceBack(0,0,0,0),i.emplaceBack(t.EXTENT,0,t.EXTENT,0),i.emplaceBack(0,t.EXTENT,0,t.EXTENT),i.emplaceBack(t.EXTENT,t.EXTENT,t.EXTENT,t.EXTENT),this.rasterBoundsBuffer\u003de.createVertexBuffer(i,P.members),this.rasterBoundsSegments\u003dt.SegmentVector.simpleSegment(0,0,4,2);var a\u003dnew t.StructArrayLayout2i4;a.emplaceBack(0,0),a.emplaceBack(1,0),a.emplaceBack(0,1),a.emplaceBack(1,1),this.viewportBuffer\u003de.createVertexBuffer(a,Ge.members),this.viewportSegments\u003dt.SegmentVector.simpleSegment(0,0,4,2);var o\u003dnew t.StructArrayLayout1ui2;o.emplaceBack(0),o.emplaceBack(1),o.emplaceBack(3),o.emplaceBack(2),o.emplaceBack(0),this.tileBorderIndexBuffer\u003de.createIndexBuffer(o);var s\u003dnew t.StructArrayLayout3ui6;s.emplaceBack(0,1,2),s.emplaceBack(2,1,3),this.quadTriangleIndexBuffer\u003de.createIndexBuffer(s),this.emptyTexture\u003dnew t.Texture(e,{width:1,height:1,data:new Uint8Array([0,0,0,0])},e.gl.RGBA);var l\u003dthis.context.gl;this.stencilClearMode\u003dnew At({func:l.ALWAYS,mask:0},0,255,l.ZERO,l.ZERO,l.ZERO)},_n.prototype.clearStencil\u003dfunction(){var e\u003dthis.context,r\u003de.gl;this.nextStencilID\u003d1,this.currentStencilSource\u003dvoid 0;var n\u003dt.create();t.ortho(n,0,this.width,this.height,0,0,1),t.scale(n,n,[r.drawingBufferWidth,r.drawingBufferHeight,0]),this.useProgram(\"clippingMask\").draw(e,r.TRIANGLES,Mt.disabled,this.stencilClearMode,St.disabled,Et.disabled,Or(n),\"$clipping\",this.viewportBuffer,this.quadTriangleIndexBuffer,this.viewportSegments)},_n.prototype._renderTileClippingMasks\u003dfunction(t,e){if(this.currentStencilSource!\u003d\u003dt.source\u0026\u0026t.isTileClipped()\u0026\u0026e\u0026\u0026e.length){this.currentStencilSource\u003dt.source;var r\u003dthis.context,n\u003dr.gl;this.nextStencilID+e.length\u003e256\u0026\u0026this.clearStencil(),r.setColorMode(St.disabled),r.setDepthMode(Mt.disabled);var i\u003dthis.useProgram(\"clippingMask\");this._tileClippingMaskIDs\u003d{};for(var a\u003d0,o\u003de;a\u003co.length;a+\u003d1){var s\u003do[a],l\u003dthis._tileClippingMaskIDs[s.key]\u003dthis.nextStencilID++;i.draw(r,n.TRIANGLES,Mt.disabled,new At({func:n.ALWAYS,mask:0},l,255,n.KEEP,n.KEEP,n.REPLACE),St.disabled,Et.disabled,Or(s.posMatrix),\"$clipping\",this.tileExtentBuffer,this.quadTriangleIndexBuffer,this.tileExtentSegments)}}},_n.prototype.stencilModeFor3D\u003dfunction(){this.currentStencilSource\u003dvoid 0,this.nextStencilID+1\u003e256\u0026\u0026this.clearStencil();var t\u003dthis.nextStencilID++,e\u003dthis.context.gl;return new At({func:e.NOTEQUAL,mask:255},t,255,e.KEEP,e.KEEP,e.REPLACE)},_n.prototype.stencilModeForClipping\u003dfunction(t){var e\u003dthis.context.gl;return new At({func:e.EQUAL,mask:255},this._tileClippingMaskIDs[t.key],0,e.KEEP,e.KEEP,e.REPLACE)},_n.prototype.stencilConfigForOverlap\u003dfunction(t){var e,r\u003dthis.context.gl,n\u003dt.sort((function(t,e){return e.overscaledZ-t.overscaledZ})),i\u003dn[n.length-1].overscaledZ,a\u003dn[0].overscaledZ-i+1;if(a\u003e1){this.currentStencilSource\u003dvoid 0,this.nextStencilID+a\u003e256\u0026\u0026this.clearStencil();for(var o\u003d{},s\u003d0;s\u003ca;s++)o[s+i]\u003dnew At({func:r.GEQUAL,mask:255},s+this.nextStencilID,255,r.KEEP,r.KEEP,r.REPLACE);return this.nextStencilID+\u003da,[o,n]}return[(e\u003d{},e[i]\u003dAt.disabled,e),n]},_n.prototype.colorModeForRenderPass\u003dfunction(){var e\u003dthis.context.gl;if(this._showOverdrawInspector){return new St([e.CONSTANT_COLOR,e.ONE],new t.Color(1/8,1/8,1/8,0),[!0,!0,!0,!0])}return\"opaque\"\u003d\u003d\u003dthis.renderPass?St.unblended:St.alphaBlended},_n.prototype.depthModeForSublayer\u003dfunction(t,e,r){if(!this.opaquePassEnabledForLayer())return Mt.disabled;var n\u003d1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon;return new Mt(r||this.context.gl.LEQUAL,e,[n,n])},_n.prototype.opaquePassEnabledForLayer\u003dfunction(){return this.currentLayer\u003cthis.opaquePassCutoff},_n.prototype.render\u003dfunction(e,r){var n\u003dthis;this.style\u003de,this.options\u003dr,this.lineAtlas\u003de.lineAtlas,this.imageManager\u003de.imageManager,this.glyphManager\u003de.glyphManager,this.symbolFadeChange\u003de.placement.symbolFadeChange(t.browser.now()),this.imageManager.beginFrame();var i\u003dthis.style._order,a\u003dthis.style.sourceCaches;for(var o in a){var s\u003da[o];s.used\u0026\u0026s.prepare(this.context)}var l,c,u\u003d{},f\u003d{},h\u003d{};for(var p in a){var d\u003da[p];u[p]\u003dd.getVisibleCoordinates(),f[p]\u003du[p].slice().reverse(),h[p]\u003dd.getVisibleCoordinates(!0).reverse()}this.opaquePassCutoff\u003d1/0;for(var m\u003d0;m\u003ci.length;m++){var g\u003di[m];if(this.style._layers[g].is3D()){this.opaquePassCutoff\u003dm;break}}this.renderPass\u003d\"offscreen\";for(var v\u003d0,y\u003di;v\u003cy.length;v+\u003d1){var x\u003dy[v],b\u003dthis.style._layers[x];if(b.hasOffscreenPass()\u0026\u0026!b.isHidden(this.transform.zoom)){var _\u003df[b.source];(\"custom\"\u003d\u003d\u003db.type||_.length)\u0026\u0026this.renderLayer(this,a[b.source],b,_)}}for(this.context.bindFramebuffer.set(null),this.context.clear({color:r.showOverdrawInspector?t.Color.black:t.Color.transparent,depth:1}),this.clearStencil(),this._showOverdrawInspector\u003dr.showOverdrawInspector,this.depthRangeFor3D\u003d[0,1-(e._order.length+2)*this.numSublayers*this.depthEpsilon],this.renderPass\u003d\"opaque\",this.currentLayer\u003di.length-1;this.currentLayer\u003e\u003d0;this.currentLayer--){var w\u003dthis.style._layers[i[this.currentLayer]],T\u003da[w.source],k\u003du[w.source];this._renderTileClippingMasks(w,k),this.renderLayer(this,T,w,k)}for(this.renderPass\u003d\"translucent\",this.currentLayer\u003d0;this.currentLayer\u003ci.length;this.currentLayer++){var M\u003dthis.style._layers[i[this.currentLayer]],A\u003da[M.source],S\u003d(\"symbol\"\u003d\u003d\u003dM.type?h:f)[M.source];this._renderTileClippingMasks(M,u[M.source]),this.renderLayer(this,A,M,S)}this.options.showTileBoundaries\u0026\u0026(t.values(this.style._layers).forEach((function(t){t.source\u0026\u0026!t.isHidden(n.transform.zoom)\u0026\u0026(t.source!\u003d\u003d(c\u0026\u0026c.id)\u0026\u0026(c\u003dn.style.sourceCaches[t.source]),(!l||l.getSource().maxzoom\u003cc.getSource().maxzoom)\u0026\u0026(l\u003dc))})),l\u0026\u0026bn.debug(this,l,l.getVisibleCoordinates()));this.options.showPadding\u0026\u0026mn(this),this.context.setDefault()},_n.prototype.renderLayer\u003dfunction(t,e,r,n){r.isHidden(this.transform.zoom)||(\"background\"\u003d\u003d\u003dr.type||\"custom\"\u003d\u003d\u003dr.type||n.length)\u0026\u0026(this.id\u003dr.id,this.gpuTimingStart(r),bn[r.type](t,e,r,n,this.style.placement.variableOffsets),this.gpuTimingEnd())},_n.prototype.gpuTimingStart\u003dfunction(t){if(this.options.gpuTiming){var e\u003dthis.context.extTimerQuery,r\u003dthis.gpuTimers[t.id];r||(r\u003dthis.gpuTimers[t.id]\u003d{calls:0,cpuTime:0,query:e.createQueryEXT()}),r.calls++,e.beginQueryEXT(e.TIME_ELAPSED_EXT,r.query)}},_n.prototype.gpuTimingEnd\u003dfunction(){if(this.options.gpuTiming){var t\u003dthis.context.extTimerQuery;t.endQueryEXT(t.TIME_ELAPSED_EXT)}},_n.prototype.collectGpuTimers\u003dfunction(){var t\u003dthis.gpuTimers;return this.gpuTimers\u003d{},t},_n.prototype.queryGpuTimers\u003dfunction(t){var e\u003d{};for(var r in t){var n\u003dt[r],i\u003dthis.context.extTimerQuery,a\u003di.getQueryObjectEXT(n.query,i.QUERY_RESULT_EXT)/1e6;i.deleteQueryEXT(n.query),e[r]\u003da}return e},_n.prototype.translatePosMatrix\u003dfunction(e,r,n,i,a){if(!n[0]\u0026\u0026!n[1])return e;var o\u003da?\"map\"\u003d\u003d\u003di?this.transform.angle:0:\"viewport\"\u003d\u003d\u003di?-this.transform.angle:0;if(o){var s\u003dMath.sin(o),l\u003dMath.cos(o);n\u003d[n[0]*l-n[1]*s,n[0]*s+n[1]*l]}var c\u003d[a?n[0]:pe(r,n[0],this.transform.zoom),a?n[1]:pe(r,n[1],this.transform.zoom),0],u\u003dnew Float32Array(16);return t.translate(u,e,c),u},_n.prototype.saveTileTexture\u003dfunction(t){var e\u003dthis._tileTextures[t.size[0]];e?e.push(t):this._tileTextures[t.size[0]]\u003d[t]},_n.prototype.getTileTexture\u003dfunction(t){var e\u003dthis._tileTextures[t];return e\u0026\u0026e.length\u003e0?e.pop():null},_n.prototype.isPatternMissing\u003dfunction(t){if(!t)return!1;if(!t.from||!t.to)return!0;var e\u003dthis.imageManager.getPattern(t.from.toString()),r\u003dthis.imageManager.getPattern(t.to.toString());return!e||!r},_n.prototype.useProgram\u003dfunction(t,e){this.cache\u003dthis.cache||{};var r\u003d\"\"+t+(e?e.cacheKey:\"\")+(this._showOverdrawInspector?\"/overdraw\":\"\");return this.cache[r]||(this.cache[r]\u003dnew _r(this.context,xr[t],e,Jr[t],this._showOverdrawInspector)),this.cache[r]},_n.prototype.setCustomLayerDefaults\u003dfunction(){this.context.unbindVAO(),this.context.cullFace.setDefault(),this.context.activeTexture.setDefault(),this.context.pixelStoreUnpack.setDefault(),this.context.pixelStoreUnpackPremultiplyAlpha.setDefault(),this.context.pixelStoreUnpackFlipY.setDefault()},_n.prototype.setBaseState\u003dfunction(){var t\u003dthis.context.gl;this.context.cullFace.set(!1),this.context.viewport.set([0,0,this.width,this.height]),this.context.blendEquation.set(t.FUNC_ADD)},_n.prototype.initDebugOverlayCanvas\u003dfunction(){if(null\u003d\u003dthis.debugOverlayCanvas){this.debugOverlayCanvas\u003dt.window.document.createElement(\"canvas\"),this.debugOverlayCanvas.width\u003d512,this.debugOverlayCanvas.height\u003d512;var e\u003dthis.context.gl;this.debugOverlayTexture\u003dnew t.Texture(this.context,this.debugOverlayCanvas,e.RGBA)}},_n.prototype.destroy\u003dfunction(){this.emptyTexture.destroy(),this.debugOverlayTexture\u0026\u0026this.debugOverlayTexture.destroy()};var wn\u003dfunction(t,e){this.points\u003dt,this.planes\u003de};wn.fromInvProjectionMatrix\u003dfunction(e,r,n){var i\u003dMath.pow(2,n),a\u003d[[-1,1,-1,1],[1,1,-1,1],[1,-1,-1,1],[-1,-1,-1,1],[-1,1,1,1],[1,1,1,1],[1,-1,1,1],[-1,-1,1,1]].map((function(r){return t.transformMat4([],r,e)})).map((function(e){return t.scale$1([],e,1/e[3]/r*i)})),o\u003d[[0,1,2],[6,5,4],[0,3,7],[2,1,5],[3,2,6],[0,4,5]].map((function(e){var r\u003dt.sub([],a[e[0]],a[e[1]]),n\u003dt.sub([],a[e[2]],a[e[1]]),i\u003dt.normalize([],t.cross([],r,n)),o\u003d-t.dot(i,a[e[1]]);return i.concat(o)}));return new wn(a,o)};var Tn\u003dfunction(e,r){this.min\u003de,this.max\u003dr,this.center\u003dt.scale$2([],t.add([],this.min,this.max),.5)};Tn.prototype.quadrant\u003dfunction(e){for(var r\u003d[e%2\u003d\u003d0,e\u003c2],n\u003dt.clone$2(this.min),i\u003dt.clone$2(this.max),a\u003d0;a\u003cr.length;a++)n[a]\u003dr[a]?this.min[a]:this.center[a],i[a]\u003dr[a]?this.center[a]:this.max[a];return i[2]\u003dthis.max[2],new Tn(n,i)},Tn.prototype.distanceX\u003dfunction(t){return Math.max(Math.min(this.max[0],t[0]),this.min[0])-t[0]},Tn.prototype.distanceY\u003dfunction(t){return Math.max(Math.min(this.max[1],t[1]),this.min[1])-t[1]},Tn.prototype.intersects\u003dfunction(e){for(var r\u003d[[this.min[0],this.min[1],0,1],[this.max[0],this.min[1],0,1],[this.max[0],this.max[1],0,1],[this.min[0],this.max[1],0,1]],n\u003d!0,i\u003d0;i\u003ce.planes.length;i++){for(var a\u003de.planes[i],o\u003d0,s\u003d0;s\u003cr.length;s++)o+\u003dt.dot$1(a,r[s])\u003e\u003d0;if(0\u003d\u003d\u003do)return 0;o!\u003d\u003dr.length\u0026\u0026(n\u003d!1)}if(n)return 2;for(var l\u003d0;l\u003c3;l++){for(var c\u003dNumber.MAX_VALUE,u\u003d-Number.MAX_VALUE,f\u003d0;f\u003ce.points.length;f++){var h\u003de.points[f][l]-this.min[l];c\u003dMath.min(c,h),u\u003dMath.max(u,h)}if(u\u003c0||c\u003ethis.max[l]-this.min[l])return 0}return 1};var kn\u003dfunction(t,e,r,n){if(void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d0),void 0\u003d\u003d\u003de\u0026\u0026(e\u003d0),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d0),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d0),isNaN(t)||t\u003c0||isNaN(e)||e\u003c0||isNaN(r)||r\u003c0||isNaN(n)||n\u003c0)throw new Error(\"Invalid value for edge-insets, top, bottom, left and right must all be numbers\");this.top\u003dt,this.bottom\u003de,this.left\u003dr,this.right\u003dn};kn.prototype.interpolate\u003dfunction(e,r,n){return null!\u003dr.top\u0026\u0026null!\u003de.top\u0026\u0026(this.top\u003dt.number(e.top,r.top,n)),null!\u003dr.bottom\u0026\u0026null!\u003de.bottom\u0026\u0026(this.bottom\u003dt.number(e.bottom,r.bottom,n)),null!\u003dr.left\u0026\u0026null!\u003de.left\u0026\u0026(this.left\u003dt.number(e.left,r.left,n)),null!\u003dr.right\u0026\u0026null!\u003de.right\u0026\u0026(this.right\u003dt.number(e.right,r.right,n)),this},kn.prototype.getCenter\u003dfunction(e,r){var n\u003dt.clamp((this.left+e-this.right)/2,0,e),i\u003dt.clamp((this.top+r-this.bottom)/2,0,r);return new t.Point(n,i)},kn.prototype.equals\u003dfunction(t){return this.top\u003d\u003d\u003dt.top\u0026\u0026this.bottom\u003d\u003d\u003dt.bottom\u0026\u0026this.left\u003d\u003d\u003dt.left\u0026\u0026this.right\u003d\u003d\u003dt.right},kn.prototype.clone\u003dfunction(){return new kn(this.top,this.bottom,this.left,this.right)},kn.prototype.toJSON\u003dfunction(){return{top:this.top,bottom:this.bottom,left:this.left,right:this.right}};var Mn\u003dfunction(e,r,n,i,a){this.tileSize\u003d512,this.maxValidLatitude\u003d85.051129,this._renderWorldCopies\u003dvoid 0\u003d\u003d\u003da||a,this._minZoom\u003de||0,this._maxZoom\u003dr||22,this._minPitch\u003dnull\u003d\u003dn?0:n,this._maxPitch\u003dnull\u003d\u003di?60:i,this.setMaxBounds(),this.width\u003d0,this.height\u003d0,this._center\u003dnew t.LngLat(0,0),this.zoom\u003d0,this.angle\u003d0,this._fov\u003d.6435011087932844,this._pitch\u003d0,this._unmodified\u003d!0,this._edgeInsets\u003dnew kn,this._posMatrixCache\u003d{},this._alignedPosMatrixCache\u003d{}},An\u003d{minZoom:{configurable:!0},maxZoom:{configurable:!0},minPitch:{configurable:!0},maxPitch:{configurable:!0},renderWorldCopies:{configurable:!0},worldSize:{configurable:!0},centerOffset:{configurable:!0},size:{configurable:!0},bearing:{configurable:!0},pitch:{configurable:!0},fov:{configurable:!0},zoom:{configurable:!0},center:{configurable:!0},padding:{configurable:!0},centerPoint:{configurable:!0},unmodified:{configurable:!0},point:{configurable:!0}};Mn.prototype.clone\u003dfunction(){var t\u003dnew Mn(this._minZoom,this._maxZoom,this._minPitch,this.maxPitch,this._renderWorldCopies);return t.tileSize\u003dthis.tileSize,t.latRange\u003dthis.latRange,t.width\u003dthis.width,t.height\u003dthis.height,t._center\u003dthis._center,t.zoom\u003dthis.zoom,t.angle\u003dthis.angle,t._fov\u003dthis._fov,t._pitch\u003dthis._pitch,t._unmodified\u003dthis._unmodified,t._edgeInsets\u003dthis._edgeInsets.clone(),t._calcMatrices(),t},An.minZoom.get\u003dfunction(){return this._minZoom},An.minZoom.set\u003dfunction(t){this._minZoom!\u003d\u003dt\u0026\u0026(this._minZoom\u003dt,this.zoom\u003dMath.max(this.zoom,t))},An.maxZoom.get\u003dfunction(){return this._maxZoom},An.maxZoom.set\u003dfunction(t){this._maxZoom!\u003d\u003dt\u0026\u0026(this._maxZoom\u003dt,this.zoom\u003dMath.min(this.zoom,t))},An.minPitch.get\u003dfunction(){return this._minPitch},An.minPitch.set\u003dfunction(t){this._minPitch!\u003d\u003dt\u0026\u0026(this._minPitch\u003dt,this.pitch\u003dMath.max(this.pitch,t))},An.maxPitch.get\u003dfunction(){return this._maxPitch},An.maxPitch.set\u003dfunction(t){this._maxPitch!\u003d\u003dt\u0026\u0026(this._maxPitch\u003dt,this.pitch\u003dMath.min(this.pitch,t))},An.renderWorldCopies.get\u003dfunction(){return this._renderWorldCopies},An.renderWorldCopies.set\u003dfunction(t){void 0\u003d\u003d\u003dt?t\u003d!0:null\u003d\u003d\u003dt\u0026\u0026(t\u003d!1),this._renderWorldCopies\u003dt},An.worldSize.get\u003dfunction(){return this.tileSize*this.scale},An.centerOffset.get\u003dfunction(){return this.centerPoint._sub(this.size._div(2))},An.size.get\u003dfunction(){return new t.Point(this.width,this.height)},An.bearing.get\u003dfunction(){return-this.angle/Math.PI*180},An.bearing.set\u003dfunction(e){var r\u003d-t.wrap(e,-180,180)*Math.PI/180;this.angle!\u003d\u003dr\u0026\u0026(this._unmodified\u003d!1,this.angle\u003dr,this._calcMatrices(),this.rotationMatrix\u003dt.create$2(),t.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},An.pitch.get\u003dfunction(){return this._pitch/Math.PI*180},An.pitch.set\u003dfunction(e){var r\u003dt.clamp(e,this.minPitch,this.maxPitch)/180*Math.PI;this._pitch!\u003d\u003dr\u0026\u0026(this._unmodified\u003d!1,this._pitch\u003dr,this._calcMatrices())},An.fov.get\u003dfunction(){return this._fov/Math.PI*180},An.fov.set\u003dfunction(t){t\u003dMath.max(.01,Math.min(60,t)),this._fov!\u003d\u003dt\u0026\u0026(this._unmodified\u003d!1,this._fov\u003dt/180*Math.PI,this._calcMatrices())},An.zoom.get\u003dfunction(){return this._zoom},An.zoom.set\u003dfunction(t){var e\u003dMath.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!\u003d\u003de\u0026\u0026(this._unmodified\u003d!1,this._zoom\u003de,this.scale\u003dthis.zoomScale(e),this.tileZoom\u003dMath.floor(e),this.zoomFraction\u003de-this.tileZoom,this._constrain(),this._calcMatrices())},An.center.get\u003dfunction(){return this._center},An.center.set\u003dfunction(t){t.lat\u003d\u003d\u003dthis._center.lat\u0026\u0026t.lng\u003d\u003d\u003dthis._center.lng||(this._unmodified\u003d!1,this._center\u003dt,this._constrain(),this._calcMatrices())},An.padding.get\u003dfunction(){return this._edgeInsets.toJSON()},An.padding.set\u003dfunction(t){this._edgeInsets.equals(t)||(this._unmodified\u003d!1,this._edgeInsets.interpolate(this._edgeInsets,t,1),this._calcMatrices())},An.centerPoint.get\u003dfunction(){return this._edgeInsets.getCenter(this.width,this.height)},Mn.prototype.isPaddingEqual\u003dfunction(t){return this._edgeInsets.equals(t)},Mn.prototype.interpolatePadding\u003dfunction(t,e,r){this._unmodified\u003d!1,this._edgeInsets.interpolate(t,e,r),this._constrain(),this._calcMatrices()},Mn.prototype.coveringZoomLevel\u003dfunction(t){var e\u003d(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize));return Math.max(0,e)},Mn.prototype.getVisibleUnwrappedCoordinates\u003dfunction(e){var r\u003d[new t.UnwrappedTileID(0,e)];if(this._renderWorldCopies)for(var n\u003dthis.pointCoordinate(new t.Point(0,0)),i\u003dthis.pointCoordinate(new t.Point(this.width,0)),a\u003dthis.pointCoordinate(new t.Point(this.width,this.height)),o\u003dthis.pointCoordinate(new t.Point(0,this.height)),s\u003dMath.floor(Math.min(n.x,i.x,a.x,o.x)),l\u003dMath.floor(Math.max(n.x,i.x,a.x,o.x)),c\u003ds-1;c\u003c\u003dl+1;c++)0!\u003d\u003dc\u0026\u0026r.push(new t.UnwrappedTileID(c,e));return r},Mn.prototype.coveringTiles\u003dfunction(e){var r\u003dthis.coveringZoomLevel(e),n\u003dr;if(void 0!\u003d\u003de.minzoom\u0026\u0026r\u003ce.minzoom)return[];void 0!\u003d\u003de.maxzoom\u0026\u0026r\u003ee.maxzoom\u0026\u0026(r\u003de.maxzoom);var i\u003dt.MercatorCoordinate.fromLngLat(this.center),a\u003dMath.pow(2,r),o\u003d[a*i.x,a*i.y,0],s\u003dwn.fromInvProjectionMatrix(this.invProjMatrix,this.worldSize,r),l\u003de.minzoom||0;this.pitch\u003c\u003d60\u0026\u0026this._edgeInsets.top\u003c.1\u0026\u0026(l\u003dr);var c\u003dfunction(t){return{aabb:new Tn([t*a,0,0],[(t+1)*a,a,0]),zoom:0,x:0,y:0,wrap:t,fullyVisible:!1}},u\u003d[],f\u003d[],h\u003dr,p\u003de.reparseOverscaled?n:r;if(this._renderWorldCopies)for(var d\u003d1;d\u003c\u003d3;d++)u.push(c(-d)),u.push(c(d));for(u.push(c(0));u.length\u003e0;){var m\u003du.pop(),g\u003dm.x,v\u003dm.y,y\u003dm.fullyVisible;if(!y){var x\u003dm.aabb.intersects(s);if(0\u003d\u003d\u003dx)continue;y\u003d2\u003d\u003d\u003dx}var b\u003dm.aabb.distanceX(o),_\u003dm.aabb.distanceY(o),w\u003dMath.max(Math.abs(b),Math.abs(_)),T\u003d3+(1\u003c\u003ch-m.zoom)-2;if(m.zoom\u003d\u003d\u003dh||w\u003eT\u0026\u0026m.zoom\u003e\u003dl)f.push({tileID:new t.OverscaledTileID(m.zoom\u003d\u003d\u003dh?p:m.zoom,m.wrap,m.zoom,g,v),distanceSq:t.sqrLen([o[0]-.5-g,o[1]-.5-v])});else for(var k\u003d0;k\u003c4;k++){var M\u003d(g\u003c\u003c1)+k%2,A\u003d(v\u003c\u003c1)+(k\u003e\u003e1);u.push({aabb:m.aabb.quadrant(k),zoom:m.zoom+1,x:M,y:A,wrap:m.wrap,fullyVisible:y})}}return f.sort((function(t,e){return t.distanceSq-e.distanceSq})).map((function(t){return t.tileID}))},Mn.prototype.resize\u003dfunction(t,e){this.width\u003dt,this.height\u003de,this.pixelsToGLUnits\u003d[2/t,-2/e],this._constrain(),this._calcMatrices()},An.unmodified.get\u003dfunction(){return this._unmodified},Mn.prototype.zoomScale\u003dfunction(t){return Math.pow(2,t)},Mn.prototype.scaleZoom\u003dfunction(t){return Math.log(t)/Math.LN2},Mn.prototype.project\u003dfunction(e){var r\u003dt.clamp(e.lat,-this.maxValidLatitude,this.maxValidLatitude);return new t.Point(t.mercatorXfromLng(e.lng)*this.worldSize,t.mercatorYfromLat(r)*this.worldSize)},Mn.prototype.unproject\u003dfunction(e){return new t.MercatorCoordinate(e.x/this.worldSize,e.y/this.worldSize).toLngLat()},An.point.get\u003dfunction(){return this.project(this.center)},Mn.prototype.setLocationAtPoint\u003dfunction(e,r){var n\u003dthis.pointCoordinate(r),i\u003dthis.pointCoordinate(this.centerPoint),a\u003dthis.locationCoordinate(e),o\u003dnew t.MercatorCoordinate(a.x-(n.x-i.x),a.y-(n.y-i.y));this.center\u003dthis.coordinateLocation(o),this._renderWorldCopies\u0026\u0026(this.center\u003dthis.center.wrap())},Mn.prototype.locationPoint\u003dfunction(t){return this.coordinatePoint(this.locationCoordinate(t))},Mn.prototype.pointLocation\u003dfunction(t){return this.coordinateLocation(this.pointCoordinate(t))},Mn.prototype.locationCoordinate\u003dfunction(e){return t.MercatorCoordinate.fromLngLat(e)},Mn.prototype.coordinateLocation\u003dfunction(t){return t.toLngLat()},Mn.prototype.pointCoordinate\u003dfunction(e){var r\u003d[e.x,e.y,0,1],n\u003d[e.x,e.y,1,1];t.transformMat4(r,r,this.pixelMatrixInverse),t.transformMat4(n,n,this.pixelMatrixInverse);var i\u003dr[3],a\u003dn[3],o\u003dr[0]/i,s\u003dn[0]/a,l\u003dr[1]/i,c\u003dn[1]/a,u\u003dr[2]/i,f\u003dn[2]/a,h\u003du\u003d\u003d\u003df?0:(0-u)/(f-u);return new t.MercatorCoordinate(t.number(o,s,h)/this.worldSize,t.number(l,c,h)/this.worldSize)},Mn.prototype.coordinatePoint\u003dfunction(e){var r\u003d[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix),new t.Point(r[0]/r[3],r[1]/r[3])},Mn.prototype.getBounds\u003dfunction(){return(new t.LngLatBounds).extend(this.pointLocation(new t.Point(0,0))).extend(this.pointLocation(new t.Point(this.width,0))).extend(this.pointLocation(new t.Point(this.width,this.height))).extend(this.pointLocation(new t.Point(0,this.height)))},Mn.prototype.getMaxBounds\u003dfunction(){return this.latRange\u0026\u00262\u003d\u003d\u003dthis.latRange.length\u0026\u0026this.lngRange\u0026\u00262\u003d\u003d\u003dthis.lngRange.length?new t.LngLatBounds([this.lngRange[0],this.latRange[0]],[this.lngRange[1],this.latRange[1]]):null},Mn.prototype.setMaxBounds\u003dfunction(t){t?(this.lngRange\u003d[t.getWest(),t.getEast()],this.latRange\u003d[t.getSouth(),t.getNorth()],this._constrain()):(this.lngRange\u003dnull,this.latRange\u003d[-this.maxValidLatitude,this.maxValidLatitude])},Mn.prototype.calculatePosMatrix\u003dfunction(e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d!1);var n\u003de.key,i\u003dr?this._alignedPosMatrixCache:this._posMatrixCache;if(i[n])return i[n];var a\u003de.canonical,o\u003dthis.worldSize/this.zoomScale(a.z),s\u003da.x+Math.pow(2,a.z)*e.wrap,l\u003dt.identity(new Float64Array(16));return t.translate(l,l,[s*o,a.y*o,0]),t.scale(l,l,[o/t.EXTENT,o/t.EXTENT,1]),t.multiply(l,r?this.alignedProjMatrix:this.projMatrix,l),i[n]\u003dnew Float32Array(l),i[n]},Mn.prototype.customLayerMatrix\u003dfunction(){return this.mercatorMatrix.slice()},Mn.prototype._constrain\u003dfunction(){if(this.center\u0026\u0026this.width\u0026\u0026this.height\u0026\u0026!this._constraining){this._constraining\u003d!0;var e,r,n,i,a\u003d-90,o\u003d90,s\u003d-180,l\u003d180,c\u003dthis.size,u\u003dthis._unmodified;if(this.latRange){var f\u003dthis.latRange;a\u003dt.mercatorYfromLat(f[1])*this.worldSize,e\u003d(o\u003dt.mercatorYfromLat(f[0])*this.worldSize)-a\u003cc.y?c.y/(o-a):0}if(this.lngRange){var h\u003dthis.lngRange;s\u003dt.mercatorXfromLng(h[0])*this.worldSize,r\u003d(l\u003dt.mercatorXfromLng(h[1])*this.worldSize)-s\u003cc.x?c.x/(l-s):0}var p\u003dthis.point,d\u003dMath.max(r||0,e||0);if(d)return this.center\u003dthis.unproject(new t.Point(r?(l+s)/2:p.x,e?(o+a)/2:p.y)),this.zoom+\u003dthis.scaleZoom(d),this._unmodified\u003du,void(this._constraining\u003d!1);if(this.latRange){var m\u003dp.y,g\u003dc.y/2;m-g\u003ca\u0026\u0026(i\u003da+g),m+g\u003eo\u0026\u0026(i\u003do-g)}if(this.lngRange){var v\u003dp.x,y\u003dc.x/2;v-y\u003cs\u0026\u0026(n\u003ds+y),v+y\u003el\u0026\u0026(n\u003dl-y)}void 0\u003d\u003d\u003dn\u0026\u0026void 0\u003d\u003d\u003di||(this.center\u003dthis.unproject(new t.Point(void 0!\u003d\u003dn?n:p.x,void 0!\u003d\u003di?i:p.y))),this._unmodified\u003du,this._constraining\u003d!1}},Mn.prototype._calcMatrices\u003dfunction(){if(this.height){var e\u003dthis._fov/2,r\u003dthis.centerOffset;this.cameraToCenterDistance\u003d.5/Math.tan(e)*this.height;var n\u003dMath.PI/2+this._pitch,i\u003dthis._fov*(.5+r.y/this.height),a\u003dMath.sin(i)*this.cameraToCenterDistance/Math.sin(t.clamp(Math.PI-n-i,.01,Math.PI-.01)),o\u003dthis.point,s\u003do.x,l\u003do.y,c\u003d1.01*(Math.cos(Math.PI/2-this._pitch)*a+this.cameraToCenterDistance),u\u003dthis.height/50,f\u003dnew Float64Array(16);t.perspective(f,this._fov,this.width/this.height,u,c),f[8]\u003d2*-r.x/this.width,f[9]\u003d2*r.y/this.height,t.scale(f,f,[1,-1,1]),t.translate(f,f,[0,0,-this.cameraToCenterDistance]),t.rotateX(f,f,this._pitch),t.rotateZ(f,f,this.angle),t.translate(f,f,[-s,-l,0]),this.mercatorMatrix\u003dt.scale([],f,[this.worldSize,this.worldSize,this.worldSize]),t.scale(f,f,[1,1,t.mercatorZfromAltitude(1,this.center.lat)*this.worldSize,1]),this.projMatrix\u003df,this.invProjMatrix\u003dt.invert([],this.projMatrix);var h\u003dthis.width%2/2,p\u003dthis.height%2/2,d\u003dMath.cos(this.angle),m\u003dMath.sin(this.angle),g\u003ds-Math.round(s)+d*h+m*p,v\u003dl-Math.round(l)+d*p+m*h,y\u003dnew Float64Array(f);if(t.translate(y,y,[g\u003e.5?g-1:g,v\u003e.5?v-1:v,0]),this.alignedProjMatrix\u003dy,f\u003dt.create(),t.scale(f,f,[this.width/2,-this.height/2,1]),t.translate(f,f,[1,-1,0]),this.labelPlaneMatrix\u003df,f\u003dt.create(),t.scale(f,f,[1,-1,1]),t.translate(f,f,[-1,-1,0]),t.scale(f,f,[2/this.width,2/this.height,1]),this.glCoordMatrix\u003df,this.pixelMatrix\u003dt.multiply(new Float64Array(16),this.labelPlaneMatrix,this.projMatrix),!(f\u003dt.invert(new Float64Array(16),this.pixelMatrix)))throw new Error(\"failed to invert matrix\");this.pixelMatrixInverse\u003df,this._posMatrixCache\u003d{},this._alignedPosMatrixCache\u003d{}}},Mn.prototype.maxPitchScaleFactor\u003dfunction(){if(!this.pixelMatrixInverse)return 1;var e\u003dthis.pointCoordinate(new t.Point(0,0)),r\u003d[e.x*this.worldSize,e.y*this.worldSize,0,1];return t.transformMat4(r,r,this.pixelMatrix)[3]/this.cameraToCenterDistance},Mn.prototype.getCameraPoint\u003dfunction(){var e\u003dthis._pitch,r\u003dMath.tan(e)*(this.cameraToCenterDistance||1);return this.centerPoint.add(new t.Point(0,r))},Mn.prototype.getCameraQueryGeometry\u003dfunction(e){var r\u003dthis.getCameraPoint();if(1\u003d\u003d\u003de.length)return[e[0],r];for(var n\u003dr.x,i\u003dr.y,a\u003dr.x,o\u003dr.y,s\u003d0,l\u003de;s\u003cl.length;s+\u003d1){var c\u003dl[s];n\u003dMath.min(n,c.x),i\u003dMath.min(i,c.y),a\u003dMath.max(a,c.x),o\u003dMath.max(o,c.y)}return[new t.Point(n,i),new t.Point(a,i),new t.Point(a,o),new t.Point(n,o),new t.Point(n,i)]},Object.defineProperties(Mn.prototype,An);var Sn\u003dfunction(e){var r,n,i,a,o;this._hashName\u003de\u0026\u0026encodeURIComponent(e),t.bindAll([\"_getCurrentHash\",\"_onHashChange\",\"_updateHash\"],this),this._updateHash\u003d(r\u003dthis._updateHashUnthrottled.bind(this),n\u003d300,i\u003d!1,a\u003dnull,o\u003dfunction(){a\u003dnull,i\u0026\u0026(r(),a\u003dsetTimeout(o,n),i\u003d!1)},function(){return i\u003d!0,a||o(),a})};Sn.prototype.addTo\u003dfunction(e){return this._map\u003de,t.window.addEventListener(\"hashchange\",this._onHashChange,!1),this._map.on(\"moveend\",this._updateHash),this},Sn.prototype.remove\u003dfunction(){return t.window.removeEventListener(\"hashchange\",this._onHashChange,!1),this._map.off(\"moveend\",this._updateHash),clearTimeout(this._updateHash()),delete this._map,this},Sn.prototype.getHashString\u003dfunction(e){var r\u003dthis._map.getCenter(),n\u003dMath.round(100*this._map.getZoom())/100,i\u003dMath.ceil((n*Math.LN2+Math.log(512/360/.5))/Math.LN10),a\u003dMath.pow(10,i),o\u003dMath.round(r.lng*a)/a,s\u003dMath.round(r.lat*a)/a,l\u003dthis._map.getBearing(),c\u003dthis._map.getPitch(),u\u003d\"\";if(u+\u003de?\"/\"+o+\"/\"+s+\"/\"+n:n+\"/\"+s+\"/\"+o,(l||c)\u0026\u0026(u+\u003d\"/\"+Math.round(10*l)/10),c\u0026\u0026(u+\u003d\"/\"+Math.round(c)),this._hashName){var f\u003dthis._hashName,h\u003d!1,p\u003dt.window.location.hash.slice(1).split(\"\u0026\").map((function(t){var e\u003dt.split(\"\u003d\")[0];return e\u003d\u003d\u003df?(h\u003d!0,e+\"\u003d\"+u):t})).filter((function(t){return t}));return h||p.push(f+\"\u003d\"+u),\"#\"+p.join(\"\u0026\")}return\"#\"+u},Sn.prototype._getCurrentHash\u003dfunction(){var e,r\u003dthis,n\u003dt.window.location.hash.replace(\"#\",\"\");return this._hashName?(n.split(\"\u0026\").map((function(t){return t.split(\"\u003d\")})).forEach((function(t){t[0]\u003d\u003d\u003dr._hashName\u0026\u0026(e\u003dt)})),(e\u0026\u0026e[1]||\"\").split(\"/\")):n.split(\"/\")},Sn.prototype._onHashChange\u003dfunction(){var t\u003dthis._getCurrentHash();if(t.length\u003e\u003d3\u0026\u0026!t.some((function(t){return isNaN(t)}))){var e\u003dthis._map.dragRotate.isEnabled()\u0026\u0026this._map.touchZoomRotate.isEnabled()?+(t[3]||0):this._map.getBearing();return this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:e,pitch:+(t[4]||0)}),!0}return!1},Sn.prototype._updateHashUnthrottled\u003dfunction(){var e\u003dthis.getHashString();try{t.window.history.replaceState(t.window.history.state,\"\",e)}catch(t){}};var En\u003d{linearity:.3,easing:t.bezier(0,0,.3,1)},Ln\u003dt.extend({deceleration:2500,maxSpeed:1400},En),Cn\u003dt.extend({deceleration:20,maxSpeed:1400},En),Pn\u003dt.extend({deceleration:1e3,maxSpeed:360},En),In\u003dt.extend({deceleration:1e3,maxSpeed:90},En),On\u003dfunction(t){this._map\u003dt,this.clear()};function zn(t,e){(!t.duration||t.duration\u003ce.duration)\u0026\u0026(t.duration\u003de.duration,t.easing\u003de.easing)}function Dn(e,r,n){var i\u003dn.maxSpeed,a\u003dn.linearity,o\u003dn.deceleration,s\u003dt.clamp(e*a/(r/1e3),-i,i),l\u003dMath.abs(s)/(o*a);return{easing:n.easing,duration:1e3*l,amount:s*(l/2)}}On.prototype.clear\u003dfunction(){this._inertiaBuffer\u003d[]},On.prototype.record\u003dfunction(e){this._drainInertiaBuffer(),this._inertiaBuffer.push({time:t.browser.now(),settings:e})},On.prototype._drainInertiaBuffer\u003dfunction(){for(var e\u003dthis._inertiaBuffer,r\u003dt.browser.now();e.length\u003e0\u0026\u0026r-e[0].time\u003e160;)e.shift()},On.prototype._onMoveEnd\u003dfunction(e){if(this._drainInertiaBuffer(),!(this._inertiaBuffer.length\u003c2)){for(var r\u003d{zoom:0,bearing:0,pitch:0,pan:new t.Point(0,0),pinchAround:void 0,around:void 0},n\u003d0,i\u003dthis._inertiaBuffer;n\u003ci.length;n+\u003d1){var a\u003di[n].settings;r.zoom+\u003da.zoomDelta||0,r.bearing+\u003da.bearingDelta||0,r.pitch+\u003da.pitchDelta||0,a.panDelta\u0026\u0026r.pan._add(a.panDelta),a.around\u0026\u0026(r.around\u003da.around),a.pinchAround\u0026\u0026(r.pinchAround\u003da.pinchAround)}var o\u003dthis._inertiaBuffer[this._inertiaBuffer.length-1].time-this._inertiaBuffer[0].time,s\u003d{};if(r.pan.mag()){var l\u003dDn(r.pan.mag(),o,t.extend({},Ln,e||{}));s.offset\u003dr.pan.mult(l.amount/r.pan.mag()),s.center\u003dthis._map.transform.center,zn(s,l)}if(r.zoom){var c\u003dDn(r.zoom,o,Cn);s.zoom\u003dthis._map.transform.zoom+c.amount,zn(s,c)}if(r.bearing){var u\u003dDn(r.bearing,o,Pn);s.bearing\u003dthis._map.transform.bearing+t.clamp(u.amount,-179,179),zn(s,u)}if(r.pitch){var f\u003dDn(r.pitch,o,In);s.pitch\u003dthis._map.transform.pitch+f.amount,zn(s,f)}if(s.zoom||s.bearing){var h\u003dvoid 0\u003d\u003d\u003dr.pinchAround?r.around:r.pinchAround;s.around\u003dh?this._map.unproject(h):this._map.getCenter()}return this.clear(),t.extend(s,{noMoveStart:!0})}};var Rn\u003dfunction(e){function n(n,i,a,o){void 0\u003d\u003d\u003do\u0026\u0026(o\u003d{});var s\u003dr.mousePos(i.getCanvasContainer(),a),l\u003di.unproject(s);e.call(this,n,t.extend({point:s,lngLat:l,originalEvent:a},o)),this._defaultPrevented\u003d!1,this.target\u003di}e\u0026\u0026(n.__proto__\u003de),n.prototype\u003dObject.create(e\u0026\u0026e.prototype),n.prototype.constructor\u003dn;var i\u003d{defaultPrevented:{configurable:!0}};return n.prototype.preventDefault\u003dfunction(){this._defaultPrevented\u003d!0},i.defaultPrevented.get\u003dfunction(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Fn\u003dfunction(e){function n(n,i,a){var o\u003d\"touchend\"\u003d\u003d\u003dn?a.changedTouches:a.touches,s\u003dr.touchPos(i.getCanvasContainer(),o),l\u003ds.map((function(t){return i.unproject(t)})),c\u003ds.reduce((function(t,e,r,n){return t.add(e.div(n.length))}),new t.Point(0,0)),u\u003di.unproject(c);e.call(this,n,{points:s,point:c,lngLats:l,lngLat:u,originalEvent:a}),this._defaultPrevented\u003d!1}e\u0026\u0026(n.__proto__\u003de),n.prototype\u003dObject.create(e\u0026\u0026e.prototype),n.prototype.constructor\u003dn;var i\u003d{defaultPrevented:{configurable:!0}};return n.prototype.preventDefault\u003dfunction(){this._defaultPrevented\u003d!0},i.defaultPrevented.get\u003dfunction(){return this._defaultPrevented},Object.defineProperties(n.prototype,i),n}(t.Event),Bn\u003dfunction(t){function e(e,r,n){t.call(this,e,{originalEvent:n}),this._defaultPrevented\u003d!1}t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de;var r\u003d{defaultPrevented:{configurable:!0}};return e.prototype.preventDefault\u003dfunction(){this._defaultPrevented\u003d!0},r.defaultPrevented.get\u003dfunction(){return this._defaultPrevented},Object.defineProperties(e.prototype,r),e}(t.Event),Nn\u003dfunction(t,e){this._map\u003dt,this._clickTolerance\u003de.clickTolerance};Nn.prototype.reset\u003dfunction(){delete this._mousedownPos},Nn.prototype.wheel\u003dfunction(t){return this._firePreventable(new Bn(t.type,this._map,t))},Nn.prototype.mousedown\u003dfunction(t,e){return this._mousedownPos\u003de,this._firePreventable(new Rn(t.type,this._map,t))},Nn.prototype.mouseup\u003dfunction(t){this._map.fire(new Rn(t.type,this._map,t))},Nn.prototype.click\u003dfunction(t,e){this._mousedownPos\u0026\u0026this._mousedownPos.dist(e)\u003e\u003dthis._clickTolerance||this._map.fire(new Rn(t.type,this._map,t))},Nn.prototype.dblclick\u003dfunction(t){return this._firePreventable(new Rn(t.type,this._map,t))},Nn.prototype.mouseover\u003dfunction(t){this._map.fire(new Rn(t.type,this._map,t))},Nn.prototype.mouseout\u003dfunction(t){this._map.fire(new Rn(t.type,this._map,t))},Nn.prototype.touchstart\u003dfunction(t){return this._firePreventable(new Fn(t.type,this._map,t))},Nn.prototype.touchmove\u003dfunction(t){this._map.fire(new Fn(t.type,this._map,t))},Nn.prototype.touchend\u003dfunction(t){this._map.fire(new Fn(t.type,this._map,t))},Nn.prototype.touchcancel\u003dfunction(t){this._map.fire(new Fn(t.type,this._map,t))},Nn.prototype._firePreventable\u003dfunction(t){if(this._map.fire(t),t.defaultPrevented)return{}},Nn.prototype.isEnabled\u003dfunction(){return!0},Nn.prototype.isActive\u003dfunction(){return!1},Nn.prototype.enable\u003dfunction(){},Nn.prototype.disable\u003dfunction(){};var jn\u003dfunction(t){this._map\u003dt};jn.prototype.reset\u003dfunction(){this._delayContextMenu\u003d!1,delete this._contextMenuEvent},jn.prototype.mousemove\u003dfunction(t){this._map.fire(new Rn(t.type,this._map,t))},jn.prototype.mousedown\u003dfunction(){this._delayContextMenu\u003d!0},jn.prototype.mouseup\u003dfunction(){this._delayContextMenu\u003d!1,this._contextMenuEvent\u0026\u0026(this._map.fire(new Rn(\"contextmenu\",this._map,this._contextMenuEvent)),delete this._contextMenuEvent)},jn.prototype.contextmenu\u003dfunction(t){this._delayContextMenu?this._contextMenuEvent\u003dt:this._map.fire(new Rn(t.type,this._map,t)),this._map.listens(\"contextmenu\")\u0026\u0026t.preventDefault()},jn.prototype.isEnabled\u003dfunction(){return!0},jn.prototype.isActive\u003dfunction(){return!1},jn.prototype.enable\u003dfunction(){},jn.prototype.disable\u003dfunction(){};var Un\u003dfunction(t,e){this._map\u003dt,this._el\u003dt.getCanvasContainer(),this._container\u003dt.getContainer(),this._clickTolerance\u003de.clickTolerance||1};function Vn(t,e){for(var r\u003d{},n\u003d0;n\u003ct.length;n++)r[t[n].identifier]\u003de[n];return r}Un.prototype.isEnabled\u003dfunction(){return!!this._enabled},Un.prototype.isActive\u003dfunction(){return!!this._active},Un.prototype.enable\u003dfunction(){this.isEnabled()||(this._enabled\u003d!0)},Un.prototype.disable\u003dfunction(){this.isEnabled()\u0026\u0026(this._enabled\u003d!1)},Un.prototype.mousedown\u003dfunction(t,e){this.isEnabled()\u0026\u0026t.shiftKey\u0026\u00260\u003d\u003d\u003dt.button\u0026\u0026(r.disableDrag(),this._startPos\u003dthis._lastPos\u003de,this._active\u003d!0)},Un.prototype.mousemoveWindow\u003dfunction(t,e){if(this._active){var n\u003de;if(!(this._lastPos.equals(n)||!this._box\u0026\u0026n.dist(this._startPos)\u003cthis._clickTolerance)){var i\u003dthis._startPos;this._lastPos\u003dn,this._box||(this._box\u003dr.create(\"div\",\"mapboxgl-boxzoom\",this._container),this._container.classList.add(\"mapboxgl-crosshair\"),this._fireEvent(\"boxzoomstart\",t));var a\u003dMath.min(i.x,n.x),o\u003dMath.max(i.x,n.x),s\u003dMath.min(i.y,n.y),l\u003dMath.max(i.y,n.y);r.setTransform(this._box,\"translate(\"+a+\"px,\"+s+\"px)\"),this._box.style.width\u003do-a+\"px\",this._box.style.height\u003dl-s+\"px\"}}},Un.prototype.mouseupWindow\u003dfunction(e,n){var i\u003dthis;if(this._active\u0026\u00260\u003d\u003d\u003de.button){var a\u003dthis._startPos,o\u003dn;if(this.reset(),r.suppressClick(),a.x!\u003d\u003do.x||a.y!\u003d\u003do.y)return this._map.fire(new t.Event(\"boxzoomend\",{originalEvent:e})),{cameraAnimation:function(t){return t.fitScreenCoordinates(a,o,i._map.getBearing(),{linear:!0})}};this._fireEvent(\"boxzoomcancel\",e)}},Un.prototype.keydown\u003dfunction(t){this._active\u0026\u002627\u003d\u003d\u003dt.keyCode\u0026\u0026(this.reset(),this._fireEvent(\"boxzoomcancel\",t))},Un.prototype.reset\u003dfunction(){this._active\u003d!1,this._container.classList.remove(\"mapboxgl-crosshair\"),this._box\u0026\u0026(r.remove(this._box),this._box\u003dnull),r.enableDrag(),delete this._startPos,delete this._lastPos},Un.prototype._fireEvent\u003dfunction(e,r){return this._map.fire(new t.Event(e,{originalEvent:r}))};var qn\u003dfunction(t){this.reset(),this.numTouches\u003dt.numTouches};qn.prototype.reset\u003dfunction(){delete this.centroid,delete this.startTime,delete this.touches,this.aborted\u003d!1},qn.prototype.touchstart\u003dfunction(e,r,n){(this.centroid||n.length\u003ethis.numTouches)\u0026\u0026(this.aborted\u003d!0),this.aborted||(void 0\u003d\u003d\u003dthis.startTime\u0026\u0026(this.startTime\u003de.timeStamp),n.length\u003d\u003d\u003dthis.numTouches\u0026\u0026(this.centroid\u003dfunction(e){for(var r\u003dnew t.Point(0,0),n\u003d0,i\u003de;n\u003ci.length;n+\u003d1){var a\u003di[n];r._add(a)}return r.div(e.length)}(r),this.touches\u003dVn(n,r)))},qn.prototype.touchmove\u003dfunction(t,e,r){if(!this.aborted\u0026\u0026this.centroid){var n\u003dVn(r,e);for(var i in this.touches){var a\u003dthis.touches[i],o\u003dn[i];(!o||o.dist(a)\u003e30)\u0026\u0026(this.aborted\u003d!0)}}},qn.prototype.touchend\u003dfunction(t,e,r){if((!this.centroid||t.timeStamp-this.startTime\u003e500)\u0026\u0026(this.aborted\u003d!0),0\u003d\u003d\u003dr.length){var n\u003d!this.aborted\u0026\u0026this.centroid;if(this.reset(),n)return n}};var Hn\u003dfunction(t){this.singleTap\u003dnew qn(t),this.numTaps\u003dt.numTaps,this.reset()};Hn.prototype.reset\u003dfunction(){this.lastTime\u003d1/0,delete this.lastTap,this.count\u003d0,this.singleTap.reset()},Hn.prototype.touchstart\u003dfunction(t,e,r){this.singleTap.touchstart(t,e,r)},Hn.prototype.touchmove\u003dfunction(t,e,r){this.singleTap.touchmove(t,e,r)},Hn.prototype.touchend\u003dfunction(t,e,r){var n\u003dthis.singleTap.touchend(t,e,r);if(n){var i\u003dt.timeStamp-this.lastTime\u003c500,a\u003d!this.lastTap||this.lastTap.dist(n)\u003c30;if(i\u0026\u0026a||this.reset(),this.count++,this.lastTime\u003dt.timeStamp,this.lastTap\u003dn,this.count\u003d\u003d\u003dthis.numTaps)return this.reset(),n}};var Gn\u003dfunction(){this._zoomIn\u003dnew Hn({numTouches:1,numTaps:2}),this._zoomOut\u003dnew Hn({numTouches:2,numTaps:1}),this.reset()};Gn.prototype.reset\u003dfunction(){this._active\u003d!1,this._zoomIn.reset(),this._zoomOut.reset()},Gn.prototype.touchstart\u003dfunction(t,e,r){this._zoomIn.touchstart(t,e,r),this._zoomOut.touchstart(t,e,r)},Gn.prototype.touchmove\u003dfunction(t,e,r){this._zoomIn.touchmove(t,e,r),this._zoomOut.touchmove(t,e,r)},Gn.prototype.touchend\u003dfunction(t,e,r){var n\u003dthis,i\u003dthis._zoomIn.touchend(t,e,r),a\u003dthis._zoomOut.touchend(t,e,r);return i?(this._active\u003d!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()+1,around:e.unproject(i)},{originalEvent:t})}}):a?(this._active\u003d!0,t.preventDefault(),setTimeout((function(){return n.reset()}),0),{cameraAnimation:function(e){return e.easeTo({duration:300,zoom:e.getZoom()-1,around:e.unproject(a)},{originalEvent:t})}}):void 0},Gn.prototype.touchcancel\u003dfunction(){this.reset()},Gn.prototype.enable\u003dfunction(){this._enabled\u003d!0},Gn.prototype.disable\u003dfunction(){this._enabled\u003d!1,this.reset()},Gn.prototype.isEnabled\u003dfunction(){return this._enabled},Gn.prototype.isActive\u003dfunction(){return this._active};var Yn\u003dfunction(t){this.reset(),this._clickTolerance\u003dt.clickTolerance||1};Yn.prototype.reset\u003dfunction(){this._active\u003d!1,this._moved\u003d!1,delete this._lastPoint,delete this._eventButton},Yn.prototype._correctButton\u003dfunction(t,e){return!1},Yn.prototype._move\u003dfunction(t,e){return{}},Yn.prototype.mousedown\u003dfunction(t,e){if(!this._lastPoint){var n\u003dr.mouseButton(t);this._correctButton(t,n)\u0026\u0026(this._lastPoint\u003de,this._eventButton\u003dn)}},Yn.prototype.mousemoveWindow\u003dfunction(t,e){var r\u003dthis._lastPoint;if(r\u0026\u0026(t.preventDefault(),this._moved||!(e.dist(r)\u003cthis._clickTolerance)))return this._moved\u003d!0,this._lastPoint\u003de,this._move(r,e)},Yn.prototype.mouseupWindow\u003dfunction(t){r.mouseButton(t)\u003d\u003d\u003dthis._eventButton\u0026\u0026(this._moved\u0026\u0026r.suppressClick(),this.reset())},Yn.prototype.enable\u003dfunction(){this._enabled\u003d!0},Yn.prototype.disable\u003dfunction(){this._enabled\u003d!1,this.reset()},Yn.prototype.isEnabled\u003dfunction(){return this._enabled},Yn.prototype.isActive\u003dfunction(){return this._active};var Wn\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.mousedown\u003dfunction(e,r){t.prototype.mousedown.call(this,e,r),this._lastPoint\u0026\u0026(this._active\u003d!0)},e.prototype._correctButton\u003dfunction(t,e){return 0\u003d\u003d\u003de\u0026\u0026!t.ctrlKey},e.prototype._move\u003dfunction(t,e){return{around:e,panDelta:e.sub(t)}},e}(Yn),Xn\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._correctButton\u003dfunction(t,e){return 0\u003d\u003d\u003de\u0026\u0026t.ctrlKey||2\u003d\u003d\u003de},e.prototype._move\u003dfunction(t,e){var r\u003d.8*(e.x-t.x);if(r)return this._active\u003d!0,{bearingDelta:r}},e.prototype.contextmenu\u003dfunction(t){t.preventDefault()},e}(Yn),Zn\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype._correctButton\u003dfunction(t,e){return 0\u003d\u003d\u003de\u0026\u0026t.ctrlKey||2\u003d\u003d\u003de},e.prototype._move\u003dfunction(t,e){var r\u003d-.5*(e.y-t.y);if(r)return this._active\u003d!0,{pitchDelta:r}},e.prototype.contextmenu\u003dfunction(t){t.preventDefault()},e}(Yn),Jn\u003dfunction(t){this._minTouches\u003d1,this._clickTolerance\u003dt.clickTolerance||1,this.reset()};Jn.prototype.reset\u003dfunction(){this._active\u003d!1,this._touches\u003d{},this._sum\u003dnew t.Point(0,0)},Jn.prototype.touchstart\u003dfunction(t,e,r){return this._calculateTransform(t,e,r)},Jn.prototype.touchmove\u003dfunction(t,e,r){if(this._active)return t.preventDefault(),this._calculateTransform(t,e,r)},Jn.prototype.touchend\u003dfunction(t,e,r){this._calculateTransform(t,e,r),this._active\u0026\u0026r.length\u003cthis._minTouches\u0026\u0026this.reset()},Jn.prototype.touchcancel\u003dfunction(){this.reset()},Jn.prototype._calculateTransform\u003dfunction(e,r,n){n.length\u003e0\u0026\u0026(this._active\u003d!0);var i\u003dVn(n,r),a\u003dnew t.Point(0,0),o\u003dnew t.Point(0,0),s\u003d0;for(var l in i){var c\u003di[l],u\u003dthis._touches[l];u\u0026\u0026(a._add(c),o._add(c.sub(u)),s++,i[l]\u003dc)}if(this._touches\u003di,!(s\u003cthis._minTouches)\u0026\u0026o.mag()){var f\u003do.div(s);if(this._sum._add(f),!(this._sum.mag()\u003cthis._clickTolerance))return{around:a.div(s),panDelta:f}}},Jn.prototype.enable\u003dfunction(){this._enabled\u003d!0},Jn.prototype.disable\u003dfunction(){this._enabled\u003d!1,this.reset()},Jn.prototype.isEnabled\u003dfunction(){return this._enabled},Jn.prototype.isActive\u003dfunction(){return this._active};var Kn\u003dfunction(){this.reset()};function Qn(t,e,r){for(var n\u003d0;n\u003ct.length;n++)if(t[n].identifier\u003d\u003d\u003dr)return e[n]}Kn.prototype.reset\u003dfunction(){this._active\u003d!1,delete this._firstTwoTouches},Kn.prototype._start\u003dfunction(t){},Kn.prototype._move\u003dfunction(t,e,r){return{}},Kn.prototype.touchstart\u003dfunction(t,e,r){this._firstTwoTouches||r.length\u003c2||(this._firstTwoTouches\u003d[r[0].identifier,r[1].identifier],this._start([e[0],e[1]]))},Kn.prototype.touchmove\u003dfunction(t,e,r){if(this._firstTwoTouches){t.preventDefault();var n\u003dthis._firstTwoTouches,i\u003dn[0],a\u003dn[1],o\u003dQn(r,e,i),s\u003dQn(r,e,a);if(o\u0026\u0026s){var l\u003dthis._aroundCenter?null:o.add(s).div(2);return this._move([o,s],l,t)}}},Kn.prototype.touchend\u003dfunction(t,e,n){if(this._firstTwoTouches){var i\u003dthis._firstTwoTouches,a\u003di[0],o\u003di[1],s\u003dQn(n,e,a),l\u003dQn(n,e,o);s\u0026\u0026l||(this._active\u0026\u0026r.suppressClick(),this.reset())}},Kn.prototype.touchcancel\u003dfunction(){this.reset()},Kn.prototype.enable\u003dfunction(t){this._enabled\u003d!0,this._aroundCenter\u003d!!t\u0026\u0026\"center\"\u003d\u003d\u003dt.around},Kn.prototype.disable\u003dfunction(){this._enabled\u003d!1,this.reset()},Kn.prototype.isEnabled\u003dfunction(){return this._enabled},Kn.prototype.isActive\u003dfunction(){return this._active};function $n(t,e){return Math.log(t/e)/Math.LN2}var ti\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.reset\u003dfunction(){t.prototype.reset.call(this),delete this._distance,delete this._startDistance},e.prototype._start\u003dfunction(t){this._startDistance\u003dthis._distance\u003dt[0].dist(t[1])},e.prototype._move\u003dfunction(t,e){var r\u003dthis._distance;if(this._distance\u003dt[0].dist(t[1]),this._active||!(Math.abs($n(this._distance,this._startDistance))\u003c.1))return this._active\u003d!0,{zoomDelta:$n(this._distance,r),pinchAround:e}},e}(Kn);function ei(t,e){return 180*t.angleWith(e)/Math.PI}var ri\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.reset\u003dfunction(){t.prototype.reset.call(this),delete this._minDiameter,delete this._startVector,delete this._vector},e.prototype._start\u003dfunction(t){this._startVector\u003dthis._vector\u003dt[0].sub(t[1]),this._minDiameter\u003dt[0].dist(t[1])},e.prototype._move\u003dfunction(t,e){var r\u003dthis._vector;if(this._vector\u003dt[0].sub(t[1]),this._active||!this._isBelowThreshold(this._vector))return this._active\u003d!0,{bearingDelta:ei(this._vector,r),pinchAround:e}},e.prototype._isBelowThreshold\u003dfunction(t){this._minDiameter\u003dMath.min(this._minDiameter,t.mag());var e\u003d25/(Math.PI*this._minDiameter)*360,r\u003dei(t,this._startVector);return Math.abs(r)\u003ce},e}(Kn);function ni(t){return Math.abs(t.y)\u003eMath.abs(t.x)}var ii\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e.prototype.reset\u003dfunction(){t.prototype.reset.call(this),this._valid\u003dvoid 0,delete this._firstMove,delete this._lastPoints},e.prototype._start\u003dfunction(t){this._lastPoints\u003dt,ni(t[0].sub(t[1]))\u0026\u0026(this._valid\u003d!1)},e.prototype._move\u003dfunction(t,e,r){var n\u003dt[0].sub(this._lastPoints[0]),i\u003dt[1].sub(this._lastPoints[1]);if(this._valid\u003dthis.gestureBeginsVertically(n,i,r.timeStamp),this._valid){this._lastPoints\u003dt,this._active\u003d!0;return{pitchDelta:-.5*((n.y+i.y)/2)}}},e.prototype.gestureBeginsVertically\u003dfunction(t,e,r){if(void 0!\u003d\u003dthis._valid)return this._valid;var n\u003dt.mag()\u003e\u003d2,i\u003de.mag()\u003e\u003d2;if(n||i){if(!n||!i)return void 0\u003d\u003d\u003dthis._firstMove\u0026\u0026(this._firstMove\u003dr),r-this._firstMove\u003c100\u0026\u0026void 0;var a\u003dt.y\u003e0\u003d\u003de.y\u003e0;return ni(t)\u0026\u0026ni(e)\u0026\u0026a}},e}(Kn),ai\u003d{panStep:100,bearingStep:15,pitchStep:10},oi\u003dfunction(){var t\u003dai;this._panStep\u003dt.panStep,this._bearingStep\u003dt.bearingStep,this._pitchStep\u003dt.pitchStep};function si(t){return t*(2-t)}oi.prototype.reset\u003dfunction(){this._active\u003d!1},oi.prototype.keydown\u003dfunction(t){var e\u003dthis;if(!(t.altKey||t.ctrlKey||t.metaKey)){var r\u003d0,n\u003d0,i\u003d0,a\u003d0,o\u003d0;switch(t.keyCode){case 61:case 107:case 171:case 187:r\u003d1;break;case 189:case 109:case 173:r\u003d-1;break;case 37:t.shiftKey?n\u003d-1:(t.preventDefault(),a\u003d-1);break;case 39:t.shiftKey?n\u003d1:(t.preventDefault(),a\u003d1);break;case 38:t.shiftKey?i\u003d1:(t.preventDefault(),o\u003d-1);break;case 40:t.shiftKey?i\u003d-1:(t.preventDefault(),o\u003d1);break;default:return}return{cameraAnimation:function(s){var l\u003ds.getZoom();s.easeTo({duration:300,easeId:\"keyboardHandler\",easing:si,zoom:r?Math.round(l)+r*(t.shiftKey?2:1):l,bearing:s.getBearing()+n*e._bearingStep,pitch:s.getPitch()+i*e._pitchStep,offset:[-a*e._panStep,-o*e._panStep],center:s.getCenter()},{originalEvent:t})}}}},oi.prototype.enable\u003dfunction(){this._enabled\u003d!0},oi.prototype.disable\u003dfunction(){this._enabled\u003d!1,this.reset()},oi.prototype.isEnabled\u003dfunction(){return this._enabled},oi.prototype.isActive\u003dfunction(){return this._active};var li\u003dfunction(e,r){this._map\u003de,this._el\u003de.getCanvasContainer(),this._handler\u003dr,this._delta\u003d0,this._defaultZoomRate\u003d.01,this._wheelZoomRate\u003d1/450,t.bindAll([\"_onWheel\",\"_onTimeout\",\"_onScrollFrame\",\"_onScrollFinished\"],this)};li.prototype.setZoomRate\u003dfunction(t){this._defaultZoomRate\u003dt},li.prototype.setWheelZoomRate\u003dfunction(t){this._wheelZoomRate\u003dt},li.prototype.isEnabled\u003dfunction(){return!!this._enabled},li.prototype.isActive\u003dfunction(){return!!this._active||void 0!\u003d\u003dthis._finishTimeout},li.prototype.isZooming\u003dfunction(){return!!this._zooming},li.prototype.enable\u003dfunction(t){this.isEnabled()||(this._enabled\u003d!0,this._aroundCenter\u003dt\u0026\u0026\"center\"\u003d\u003d\u003dt.around)},li.prototype.disable\u003dfunction(){this.isEnabled()\u0026\u0026(this._enabled\u003d!1)},li.prototype.wheel\u003dfunction(e){if(this.isEnabled()){var r\u003de.deltaMode\u003d\u003d\u003dt.window.WheelEvent.DOM_DELTA_LINE?40*e.deltaY:e.deltaY,n\u003dt.browser.now(),i\u003dn-(this._lastWheelEventTime||0);this._lastWheelEventTime\u003dn,0!\u003d\u003dr\u0026\u0026r%4.000244140625\u003d\u003d0?this._type\u003d\"wheel\":0!\u003d\u003dr\u0026\u0026Math.abs(r)\u003c4?this._type\u003d\"trackpad\":i\u003e400?(this._type\u003dnull,this._lastValue\u003dr,this._timeout\u003dsetTimeout(this._onTimeout,40,e)):this._type||(this._type\u003dMath.abs(i*r)\u003c200?\"trackpad\":\"wheel\",this._timeout\u0026\u0026(clearTimeout(this._timeout),this._timeout\u003dnull,r+\u003dthis._lastValue)),e.shiftKey\u0026\u0026r\u0026\u0026(r/\u003d4),this._type\u0026\u0026(this._lastWheelEvent\u003de,this._delta-\u003dr,this._active||this._start(e)),e.preventDefault()}},li.prototype._onTimeout\u003dfunction(t){this._type\u003d\"wheel\",this._delta-\u003dthis._lastValue,this._active||this._start(t)},li.prototype._start\u003dfunction(e){if(this._delta){this._frameId\u0026\u0026(this._frameId\u003dnull),this._active\u003d!0,this.isZooming()||(this._zooming\u003d!0),this._finishTimeout\u0026\u0026(clearTimeout(this._finishTimeout),delete this._finishTimeout);var n\u003dr.mousePos(this._el,e);this._around\u003dt.LngLat.convert(this._aroundCenter?this._map.getCenter():this._map.unproject(n)),this._aroundPoint\u003dthis._map.transform.locationPoint(this._around),this._frameId||(this._frameId\u003d!0,this._handler._triggerRenderFrame())}},li.prototype.renderFrame\u003dfunction(){return this._onScrollFrame()},li.prototype._onScrollFrame\u003dfunction(){var e\u003dthis;if(this._frameId\u0026\u0026(this._frameId\u003dnull,this.isActive())){var r\u003dthis._map.transform;if(0!\u003d\u003dthis._delta){var n\u003d\"wheel\"\u003d\u003d\u003dthis._type\u0026\u0026Math.abs(this._delta)\u003e4.000244140625?this._wheelZoomRate:this._defaultZoomRate,i\u003d2/(1+Math.exp(-Math.abs(this._delta*n)));this._delta\u003c0\u0026\u00260!\u003d\u003di\u0026\u0026(i\u003d1/i);var a\u003d\"number\"\u003d\u003dtypeof this._targetZoom?r.zoomScale(this._targetZoom):r.scale;this._targetZoom\u003dMath.min(r.maxZoom,Math.max(r.minZoom,r.scaleZoom(a*i))),\"wheel\"\u003d\u003d\u003dthis._type\u0026\u0026(this._startZoom\u003dr.zoom,this._easing\u003dthis._smoothOutEasing(200)),this._delta\u003d0}var o,s\u003d\"number\"\u003d\u003dtypeof this._targetZoom?this._targetZoom:r.zoom,l\u003dthis._startZoom,c\u003dthis._easing,u\u003d!1;if(\"wheel\"\u003d\u003d\u003dthis._type\u0026\u0026l\u0026\u0026c){var f\u003dMath.min((t.browser.now()-this._lastWheelEventTime)/200,1),h\u003dc(f);o\u003dt.number(l,s,h),f\u003c1?this._frameId||(this._frameId\u003d!0):u\u003d!0}else o\u003ds,u\u003d!0;return this._active\u003d!0,u\u0026\u0026(this._active\u003d!1,this._finishTimeout\u003dsetTimeout((function(){e._zooming\u003d!1,e._handler._triggerRenderFrame(),delete e._targetZoom,delete e._finishTimeout}),200)),{noInertia:!0,needsRenderFrame:!u,zoomDelta:o-r.zoom,around:this._aroundPoint,originalEvent:this._lastWheelEvent}}},li.prototype._smoothOutEasing\u003dfunction(e){var r\u003dt.ease;if(this._prevEase){var n\u003dthis._prevEase,i\u003d(t.browser.now()-n.start)/n.duration,a\u003dn.easing(i+.01)-n.easing(i),o\u003d.27/Math.sqrt(a*a+1e-4)*.01,s\u003dMath.sqrt(.0729-o*o);r\u003dt.bezier(o,s,.25,1)}return this._prevEase\u003d{start:t.browser.now(),duration:e,easing:r},r},li.prototype.reset\u003dfunction(){this._active\u003d!1};var ci\u003dfunction(t,e){this._clickZoom\u003dt,this._tapZoom\u003de};ci.prototype.enable\u003dfunction(){this._clickZoom.enable(),this._tapZoom.enable()},ci.prototype.disable\u003dfunction(){this._clickZoom.disable(),this._tapZoom.disable()},ci.prototype.isEnabled\u003dfunction(){return this._clickZoom.isEnabled()\u0026\u0026this._tapZoom.isEnabled()},ci.prototype.isActive\u003dfunction(){return this._clickZoom.isActive()||this._tapZoom.isActive()};var ui\u003dfunction(){this.reset()};ui.prototype.reset\u003dfunction(){this._active\u003d!1},ui.prototype.dblclick\u003dfunction(t,e){return t.preventDefault(),{cameraAnimation:function(r){r.easeTo({duration:300,zoom:r.getZoom()+(t.shiftKey?-1:1),around:r.unproject(e)},{originalEvent:t})}}},ui.prototype.enable\u003dfunction(){this._enabled\u003d!0},ui.prototype.disable\u003dfunction(){this._enabled\u003d!1,this.reset()},ui.prototype.isEnabled\u003dfunction(){return this._enabled},ui.prototype.isActive\u003dfunction(){return this._active};var fi\u003dfunction(){this._tap\u003dnew Hn({numTouches:1,numTaps:1}),this.reset()};fi.prototype.reset\u003dfunction(){this._active\u003d!1,delete this._swipePoint,delete this._swipeTouch,delete this._tapTime,this._tap.reset()},fi.prototype.touchstart\u003dfunction(t,e,r){this._swipePoint||(this._tapTime\u0026\u0026t.timeStamp-this._tapTime\u003e500\u0026\u0026this.reset(),this._tapTime?r.length\u003e0\u0026\u0026(this._swipePoint\u003de[0],this._swipeTouch\u003dr[0].identifier):this._tap.touchstart(t,e,r))},fi.prototype.touchmove\u003dfunction(t,e,r){if(this._tapTime){if(this._swipePoint){if(r[0].identifier!\u003d\u003dthis._swipeTouch)return;var n\u003de[0],i\u003dn.y-this._swipePoint.y;return this._swipePoint\u003dn,t.preventDefault(),this._active\u003d!0,{zoomDelta:i/128}}}else this._tap.touchmove(t,e,r)},fi.prototype.touchend\u003dfunction(t,e,r){this._tapTime?this._swipePoint\u0026\u00260\u003d\u003d\u003dr.length\u0026\u0026this.reset():this._tap.touchend(t,e,r)\u0026\u0026(this._tapTime\u003dt.timeStamp)},fi.prototype.touchcancel\u003dfunction(){this.reset()},fi.prototype.enable\u003dfunction(){this._enabled\u003d!0},fi.prototype.disable\u003dfunction(){this._enabled\u003d!1,this.reset()},fi.prototype.isEnabled\u003dfunction(){return this._enabled},fi.prototype.isActive\u003dfunction(){return this._active};var hi\u003dfunction(t,e,r){this._el\u003dt,this._mousePan\u003de,this._touchPan\u003dr};hi.prototype.enable\u003dfunction(t){this._inertiaOptions\u003dt||{},this._mousePan.enable(),this._touchPan.enable(),this._el.classList.add(\"mapboxgl-touch-drag-pan\")},hi.prototype.disable\u003dfunction(){this._mousePan.disable(),this._touchPan.disable(),this._el.classList.remove(\"mapboxgl-touch-drag-pan\")},hi.prototype.isEnabled\u003dfunction(){return this._mousePan.isEnabled()\u0026\u0026this._touchPan.isEnabled()},hi.prototype.isActive\u003dfunction(){return this._mousePan.isActive()||this._touchPan.isActive()};var pi\u003dfunction(t,e,r){this._pitchWithRotate\u003dt.pitchWithRotate,this._mouseRotate\u003de,this._mousePitch\u003dr};pi.prototype.enable\u003dfunction(){this._mouseRotate.enable(),this._pitchWithRotate\u0026\u0026this._mousePitch.enable()},pi.prototype.disable\u003dfunction(){this._mouseRotate.disable(),this._mousePitch.disable()},pi.prototype.isEnabled\u003dfunction(){return this._mouseRotate.isEnabled()\u0026\u0026(!this._pitchWithRotate||this._mousePitch.isEnabled())},pi.prototype.isActive\u003dfunction(){return this._mouseRotate.isActive()||this._mousePitch.isActive()};var di\u003dfunction(t,e,r,n){this._el\u003dt,this._touchZoom\u003de,this._touchRotate\u003dr,this._tapDragZoom\u003dn,this._rotationDisabled\u003d!1,this._enabled\u003d!0};di.prototype.enable\u003dfunction(t){this._touchZoom.enable(t),this._rotationDisabled||this._touchRotate.enable(t),this._tapDragZoom.enable(),this._el.classList.add(\"mapboxgl-touch-zoom-rotate\")},di.prototype.disable\u003dfunction(){this._touchZoom.disable(),this._touchRotate.disable(),this._tapDragZoom.disable(),this._el.classList.remove(\"mapboxgl-touch-zoom-rotate\")},di.prototype.isEnabled\u003dfunction(){return this._touchZoom.isEnabled()\u0026\u0026(this._rotationDisabled||this._touchRotate.isEnabled())\u0026\u0026this._tapDragZoom.isEnabled()},di.prototype.isActive\u003dfunction(){return this._touchZoom.isActive()||this._touchRotate.isActive()||this._tapDragZoom.isActive()},di.prototype.disableRotation\u003dfunction(){this._rotationDisabled\u003d!0,this._touchRotate.disable()},di.prototype.enableRotation\u003dfunction(){this._rotationDisabled\u003d!1,this._touchZoom.isEnabled()\u0026\u0026this._touchRotate.enable()};var mi\u003dfunction(t){return t.zoom||t.drag||t.pitch||t.rotate},gi\u003dfunction(t){function e(){t.apply(this,arguments)}return t\u0026\u0026(e.__proto__\u003dt),e.prototype\u003dObject.create(t\u0026\u0026t.prototype),e.prototype.constructor\u003de,e}(t.Event);function vi(t){return t.panDelta\u0026\u0026t.panDelta.mag()||t.zoomDelta||t.bearingDelta||t.pitchDelta}var yi\u003dfunction(e,n){this._map\u003de,this._el\u003dthis._map.getCanvasContainer(),this._handlers\u003d[],this._handlersById\u003d{},this._changes\u003d[],this._inertia\u003dnew On(e),this._bearingSnap\u003dn.bearingSnap,this._previousActiveHandlers\u003d{},this._eventsInProgress\u003d{},this._addDefaultHandlers(n),t.bindAll([\"handleEvent\",\"handleWindowEvent\"],this);var i\u003dthis._el;this._listeners\u003d[[i,\"touchstart\",{passive:!1}],[i,\"touchmove\",{passive:!1}],[i,\"touchend\",void 0],[i,\"touchcancel\",void 0],[i,\"mousedown\",void 0],[i,\"mousemove\",void 0],[i,\"mouseup\",void 0],[t.window.document,\"mousemove\",{capture:!0}],[t.window.document,\"mouseup\",void 0],[i,\"mouseover\",void 0],[i,\"mouseout\",void 0],[i,\"dblclick\",void 0],[i,\"click\",void 0],[i,\"keydown\",{capture:!1}],[i,\"keyup\",void 0],[i,\"wheel\",{passive:!1}],[i,\"contextmenu\",void 0],[t.window,\"blur\",void 0]];for(var a\u003d0,o\u003dthis._listeners;a\u003co.length;a+\u003d1){var s\u003do[a],l\u003ds[0],c\u003ds[1],u\u003ds[2];r.addEventListener(l,c,l\u003d\u003d\u003dt.window.document?this.handleWindowEvent:this.handleEvent,u)}};yi.prototype.destroy\u003dfunction(){for(var e\u003d0,n\u003dthis._listeners;e\u003cn.length;e+\u003d1){var i\u003dn[e],a\u003di[0],o\u003di[1],s\u003di[2];r.removeEventListener(a,o,a\u003d\u003d\u003dt.window.document?this.handleWindowEvent:this.handleEvent,s)}},yi.prototype._addDefaultHandlers\u003dfunction(t){var e\u003dthis._map,r\u003de.getCanvasContainer();this._add(\"mapEvent\",new Nn(e,t));var n\u003de.boxZoom\u003dnew Un(e,t);this._add(\"boxZoom\",n);var i\u003dnew Gn,a\u003dnew ui;e.doubleClickZoom\u003dnew ci(a,i),this._add(\"tapZoom\",i),this._add(\"clickZoom\",a);var o\u003dnew fi;this._add(\"tapDragZoom\",o);var s\u003de.touchPitch\u003dnew ii;this._add(\"touchPitch\",s);var l\u003dnew Xn(t),c\u003dnew Zn(t);e.dragRotate\u003dnew pi(t,l,c),this._add(\"mouseRotate\",l,[\"mousePitch\"]),this._add(\"mousePitch\",c,[\"mouseRotate\"]);var u\u003dnew Wn(t),f\u003dnew Jn(t);e.dragPan\u003dnew hi(r,u,f),this._add(\"mousePan\",u),this._add(\"touchPan\",f,[\"touchZoom\",\"touchRotate\"]);var h\u003dnew ri,p\u003dnew ti;e.touchZoomRotate\u003dnew di(r,p,h,o),this._add(\"touchRotate\",h,[\"touchPan\",\"touchZoom\"]),this._add(\"touchZoom\",p,[\"touchPan\",\"touchRotate\"]);var d\u003de.scrollZoom\u003dnew li(e,this);this._add(\"scrollZoom\",d,[\"mousePan\"]);var m\u003de.keyboard\u003dnew oi;this._add(\"keyboard\",m),this._add(\"blockableMapEvent\",new jn(e));for(var g\u003d0,v\u003d[\"boxZoom\",\"doubleClickZoom\",\"tapDragZoom\",\"touchPitch\",\"dragRotate\",\"dragPan\",\"touchZoomRotate\",\"scrollZoom\",\"keyboard\"];g\u003cv.length;g+\u003d1){var y\u003dv[g];t.interactive\u0026\u0026t[y]\u0026\u0026e[y].enable(t[y])}},yi.prototype._add\u003dfunction(t,e,r){this._handlers.push({handlerName:t,handler:e,allowed:r}),this._handlersById[t]\u003de},yi.prototype.stop\u003dfunction(){if(!this._updatingCamera){for(var t\u003d0,e\u003dthis._handlers;t\u003ce.length;t+\u003d1){e[t].handler.reset()}this._inertia.clear(),this._fireEvents({},{}),this._changes\u003d[]}},yi.prototype.isActive\u003dfunction(){for(var t\u003d0,e\u003dthis._handlers;t\u003ce.length;t+\u003d1){if(e[t].handler.isActive())return!0}return!1},yi.prototype.isZooming\u003dfunction(){return!!this._eventsInProgress.zoom||this._map.scrollZoom.isZooming()},yi.prototype.isRotating\u003dfunction(){return!!this._eventsInProgress.rotate},yi.prototype.isMoving\u003dfunction(){return Boolean(mi(this._eventsInProgress))||this.isZooming()},yi.prototype._blockedByActive\u003dfunction(t,e,r){for(var n in t)if(n!\u003d\u003dr\u0026\u0026(!e||e.indexOf(n)\u003c0))return!0;return!1},yi.prototype.handleWindowEvent\u003dfunction(t){this.handleEvent(t,t.type+\"Window\")},yi.prototype._getMapTouches\u003dfunction(t){for(var e\u003d[],r\u003d0,n\u003dt;r\u003cn.length;r+\u003d1){var i\u003dn[r],a\u003di.target;this._el.contains(a)\u0026\u0026e.push(i)}return e},yi.prototype.handleEvent\u003dfunction(t,e){if(\"blur\"!\u003d\u003dt.type){this._updatingCamera\u003d!0;for(var n\u003d\"renderFrame\"\u003d\u003d\u003dt.type?void 0:t,i\u003d{needsRenderFrame:!1},a\u003d{},o\u003d{},s\u003dt.touches?this._getMapTouches(t.touches):void 0,l\u003ds?r.touchPos(this._el,s):r.mousePos(this._el,t),c\u003d0,u\u003dthis._handlers;c\u003cu.length;c+\u003d1){var f\u003du[c],h\u003df.handlerName,p\u003df.handler,d\u003df.allowed;if(p.isEnabled()){var m\u003dvoid 0;this._blockedByActive(o,d,h)?p.reset():p[e||t.type]\u0026\u0026(m\u003dp[e||t.type](t,l,s),this.mergeHandlerResult(i,a,m,h,n),m\u0026\u0026m.needsRenderFrame\u0026\u0026this._triggerRenderFrame()),(m||p.isActive())\u0026\u0026(o[h]\u003dp)}}var g\u003d{};for(var v in this._previousActiveHandlers)o[v]||(g[v]\u003dn);this._previousActiveHandlers\u003do,(Object.keys(g).length||vi(i))\u0026\u0026(this._changes.push([i,a,g]),this._triggerRenderFrame()),(Object.keys(o).length||vi(i))\u0026\u0026this._map._stop(!0),this._updatingCamera\u003d!1;var y\u003di.cameraAnimation;y\u0026\u0026(this._inertia.clear(),this._fireEvents({},{}),this._changes\u003d[],y(this._map))}else this.stop()},yi.prototype.mergeHandlerResult\u003dfunction(e,r,n,i,a){if(n){t.extend(e,n);var o\u003d{handlerName:i,originalEvent:n.originalEvent||a};void 0!\u003d\u003dn.zoomDelta\u0026\u0026(r.zoom\u003do),void 0!\u003d\u003dn.panDelta\u0026\u0026(r.drag\u003do),void 0!\u003d\u003dn.pitchDelta\u0026\u0026(r.pitch\u003do),void 0!\u003d\u003dn.bearingDelta\u0026\u0026(r.rotate\u003do)}},yi.prototype._applyChanges\u003dfunction(){for(var e\u003d{},r\u003d{},n\u003d{},i\u003d0,a\u003dthis._changes;i\u003ca.length;i+\u003d1){var o\u003da[i],s\u003do[0],l\u003do[1],c\u003do[2];s.panDelta\u0026\u0026(e.panDelta\u003d(e.panDelta||new t.Point(0,0))._add(s.panDelta)),s.zoomDelta\u0026\u0026(e.zoomDelta\u003d(e.zoomDelta||0)+s.zoomDelta),s.bearingDelta\u0026\u0026(e.bearingDelta\u003d(e.bearingDelta||0)+s.bearingDelta),s.pitchDelta\u0026\u0026(e.pitchDelta\u003d(e.pitchDelta||0)+s.pitchDelta),void 0!\u003d\u003ds.around\u0026\u0026(e.around\u003ds.around),void 0!\u003d\u003ds.pinchAround\u0026\u0026(e.pinchAround\u003ds.pinchAround),s.noInertia\u0026\u0026(e.noInertia\u003ds.noInertia),t.extend(r,l),t.extend(n,c)}this._updateMapTransform(e,r,n),this._changes\u003d[]},yi.prototype._updateMapTransform\u003dfunction(t,e,r){var n\u003dthis._map,i\u003dn.transform;if(!vi(t))return this._fireEvents(e,r);var a\u003dt.panDelta,o\u003dt.zoomDelta,s\u003dt.bearingDelta,l\u003dt.pitchDelta,c\u003dt.around,u\u003dt.pinchAround;void 0!\u003d\u003du\u0026\u0026(c\u003du),n._stop(!0),c\u003dc||n.transform.centerPoint;var f\u003di.pointLocation(a?c.sub(a):c);s\u0026\u0026(i.bearing+\u003ds),l\u0026\u0026(i.pitch+\u003dl),o\u0026\u0026(i.zoom+\u003do),i.setLocationAtPoint(f,c),this._map._update(),t.noInertia||this._inertia.record(t),this._fireEvents(e,r)},yi.prototype._fireEvents\u003dfunction(e,r){var n\u003dthis,i\u003dmi(this._eventsInProgress),a\u003dmi(e),o\u003d{};for(var s in e){var l\u003de[s].originalEvent;this._eventsInProgress[s]||(o[s+\"start\"]\u003dl),this._eventsInProgress[s]\u003de[s]}for(var c in!i\u0026\u0026a\u0026\u0026this._fireEvent(\"movestart\",a.originalEvent),o)this._fireEvent(c,o[c]);for(var u in e.rotate\u0026\u0026(this._bearingChanged\u003d!0),a\u0026\u0026this._fireEvent(\"move\",a.originalEvent),e){var f\u003de[u].originalEvent;this._fireEvent(u,f)}var h,p\u003d{};for(var d in this._eventsInProgress){var m\u003dthis._eventsInProgress[d],g\u003dm.handlerName,v\u003dm.originalEvent;this._handlersById[g].isActive()||(delete this._eventsInProgress[d],h\u003dr[g]||v,p[d+\"end\"]\u003dh)}for(var y in p)this._fireEvent(y,p[y]);var x\u003dmi(this._eventsInProgress);if((i||a)\u0026\u0026!x){this._updatingCamera\u003d!0;var b\u003dthis._inertia._onMoveEnd(this._map.dragPan._inertiaOptions),_\u003dfunction(t){return 0!\u003d\u003dt\u0026\u0026-n._bearingSnap\u003ct\u0026\u0026t\u003cn._bearingSnap};b?(_(b.bearing||this._map.getBearing())\u0026\u0026(b.bearing\u003d0),this._map.easeTo(b,{originalEvent:h})):(this._map.fire(new t.Event(\"moveend\",{originalEvent:h})),_(this._map.getBearing())\u0026\u0026this._map.resetNorth()),this._bearingChanged\u003d!1,this._updatingCamera\u003d!1}},yi.prototype._fireEvent\u003dfunction(e,r){this._map.fire(new t.Event(e,r?{originalEvent:r}:{}))},yi.prototype._triggerRenderFrame\u003dfunction(){var t\u003dthis;void 0\u003d\u003d\u003dthis._frameId\u0026\u0026(this._frameId\u003dthis._map._requestRenderFrame((function(e){delete t._frameId,t.handleEvent(new gi(\"renderFrame\",{timeStamp:e})),t._applyChanges()})))};var xi\u003dfunction(e){function r(r,n){e.call(this),this._moving\u003d!1,this._zooming\u003d!1,this.transform\u003dr,this._bearingSnap\u003dn.bearingSnap,t.bindAll([\"_renderFrameCallback\"],this)}return e\u0026\u0026(r.__proto__\u003de),r.prototype\u003dObject.create(e\u0026\u0026e.prototype),r.prototype.constructor\u003dr,r.prototype.getCenter\u003dfunction(){return new t.LngLat(this.transform.center.lng,this.transform.center.lat)},r.prototype.setCenter\u003dfunction(t,e){return this.jumpTo({center:t},e)},r.prototype.panBy\u003dfunction(e,r,n){return e\u003dt.Point.convert(e).mult(-1),this.panTo(this.transform.center,t.extend({offset:e},r),n)},r.prototype.panTo\u003dfunction(e,r,n){return this.easeTo(t.extend({center:e},r),n)},r.prototype.getZoom\u003dfunction(){return this.transform.zoom},r.prototype.setZoom\u003dfunction(t,e){return this.jumpTo({zoom:t},e),this},r.prototype.zoomTo\u003dfunction(e,r,n){return this.easeTo(t.extend({zoom:e},r),n)},r.prototype.zoomIn\u003dfunction(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},r.prototype.zoomOut\u003dfunction(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},r.prototype.getBearing\u003dfunction(){return this.transform.bearing},r.prototype.setBearing\u003dfunction(t,e){return this.jumpTo({bearing:t},e),this},r.prototype.getPadding\u003dfunction(){return this.transform.padding},r.prototype.setPadding\u003dfunction(t,e){return this.jumpTo({padding:t},e),this},r.prototype.rotateTo\u003dfunction(e,r,n){return this.easeTo(t.extend({bearing:e},r),n)},r.prototype.resetNorth\u003dfunction(e,r){return this.rotateTo(0,t.extend({duration:1e3},e),r),this},r.prototype.resetNorthPitch\u003dfunction(e,r){return this.easeTo(t.extend({bearing:0,pitch:0,duration:1e3},e),r),this},r.prototype.snapToNorth\u003dfunction(t,e){return Math.abs(this.getBearing())\u003cthis._bearingSnap?this.resetNorth(t,e):this},r.prototype.getPitch\u003dfunction(){return this.transform.pitch},r.prototype.setPitch\u003dfunction(t,e){return this.jumpTo({pitch:t},e),this},r.prototype.cameraForBounds\u003dfunction(e,r){return e\u003dt.LngLatBounds.convert(e),this._cameraForBoxAndBearing(e.getNorthWest(),e.getSouthEast(),0,r)},r.prototype._cameraForBoxAndBearing\u003dfunction(e,r,n,i){var a\u003d{top:0,bottom:0,right:0,left:0};if(\"number\"\u003d\u003dtypeof(i\u003dt.extend({padding:a,offset:[0,0],maxZoom:this.transform.maxZoom},i)).padding){var o\u003di.padding;i.padding\u003d{top:o,bottom:o,right:o,left:o}}i.padding\u003dt.extend(a,i.padding);var s\u003dthis.transform,l\u003ds.padding,c\u003ds.project(t.LngLat.convert(e)),u\u003ds.project(t.LngLat.convert(r)),f\u003dc.rotate(-n*Math.PI/180),h\u003du.rotate(-n*Math.PI/180),p\u003dnew t.Point(Math.max(f.x,h.x),Math.max(f.y,h.y)),d\u003dnew t.Point(Math.min(f.x,h.x),Math.min(f.y,h.y)),m\u003dp.sub(d),g\u003d(s.width-(l.left+l.right+i.padding.left+i.padding.right))/m.x,v\u003d(s.height-(l.top+l.bottom+i.padding.top+i.padding.bottom))/m.y;if(!(v\u003c0||g\u003c0)){var y\u003dMath.min(s.scaleZoom(s.scale*Math.min(g,v)),i.maxZoom),x\u003dt.Point.convert(i.offset),b\u003d(i.padding.left-i.padding.right)/2,_\u003d(i.padding.top-i.padding.bottom)/2,w\u003dnew t.Point(x.x+b,x.y+_).mult(s.scale/s.zoomScale(y));return{center:s.unproject(c.add(u).div(2).sub(w)),zoom:y,bearing:n}}t.warnOnce(\"Map cannot fit within canvas with the given bounds, padding, and/or offset.\")},r.prototype.fitBounds\u003dfunction(t,e,r){return this._fitInternal(this.cameraForBounds(t,e),e,r)},r.prototype.fitScreenCoordinates\u003dfunction(e,r,n,i,a){return this._fitInternal(this._cameraForBoxAndBearing(this.transform.pointLocation(t.Point.convert(e)),this.transform.pointLocation(t.Point.convert(r)),n,i),i,a)},r.prototype._fitInternal\u003dfunction(e,r,n){return e?(delete(r\u003dt.extend(e,r)).padding,r.linear?this.easeTo(r,n):this.flyTo(r,n)):this},r.prototype.jumpTo\u003dfunction(e,r){this.stop();var n\u003dthis.transform,i\u003d!1,a\u003d!1,o\u003d!1;return\"zoom\"in e\u0026\u0026n.zoom!\u003d\u003d+e.zoom\u0026\u0026(i\u003d!0,n.zoom\u003d+e.zoom),void 0!\u003d\u003de.center\u0026\u0026(n.center\u003dt.LngLat.convert(e.center)),\"bearing\"in e\u0026\u0026n.bearing!\u003d\u003d+e.bearing\u0026\u0026(a\u003d!0,n.bearing\u003d+e.bearing),\"pitch\"in e\u0026\u0026n.pitch!\u003d\u003d+e.pitch\u0026\u0026(o\u003d!0,n.pitch\u003d+e.pitch),null\u003d\u003de.padding||n.isPaddingEqual(e.padding)||(n.padding\u003de.padding),this.fire(new t.Event(\"movestart\",r)).fire(new t.Event(\"move\",r)),i\u0026\u0026this.fire(new t.Event(\"zoomstart\",r)).fire(new t.Event(\"zoom\",r)).fire(new t.Event(\"zoomend\",r)),a\u0026\u0026this.fire(new t.Event(\"rotatestart\",r)).fire(new t.Event(\"rotate\",r)).fire(new t.Event(\"rotateend\",r)),o\u0026\u0026this.fire(new t.Event(\"pitchstart\",r)).fire(new t.Event(\"pitch\",r)).fire(new t.Event(\"pitchend\",r)),this.fire(new t.Event(\"moveend\",r))},r.prototype.easeTo\u003dfunction(e,r){var n\u003dthis;this._stop(!1,e.easeId),(!1\u003d\u003d\u003d(e\u003dt.extend({offset:[0,0],duration:500,easing:t.ease},e)).animate||!e.essential\u0026\u0026t.browser.prefersReducedMotion)\u0026\u0026(e.duration\u003d0);var i\u003dthis.transform,a\u003dthis.getZoom(),o\u003dthis.getBearing(),s\u003dthis.getPitch(),l\u003dthis.getPadding(),c\u003d\"zoom\"in e?+e.zoom:a,u\u003d\"bearing\"in e?this._normalizeBearing(e.bearing,o):o,f\u003d\"pitch\"in e?+e.pitch:s,h\u003d\"padding\"in e?e.padding:i.padding,p\u003dt.Point.convert(e.offset),d\u003di.centerPoint.add(p),m\u003di.pointLocation(d),g\u003dt.LngLat.convert(e.center||m);this._normalizeCenter(g);var v,y,x\u003di.project(m),b\u003di.project(g).sub(x),_\u003di.zoomScale(c-a);e.around\u0026\u0026(v\u003dt.LngLat.convert(e.around),y\u003di.locationPoint(v));var w\u003d{moving:this._moving,zooming:this._zooming,rotating:this._rotating,pitching:this._pitching};return this._zooming\u003dthis._zooming||c!\u003d\u003da,this._rotating\u003dthis._rotating||o!\u003d\u003du,this._pitching\u003dthis._pitching||f!\u003d\u003ds,this._padding\u003d!i.isPaddingEqual(h),this._easeId\u003de.easeId,this._prepareEase(r,e.noMoveStart,w),clearTimeout(this._easeEndTimeoutID),this._ease((function(e){if(n._zooming\u0026\u0026(i.zoom\u003dt.number(a,c,e)),n._rotating\u0026\u0026(i.bearing\u003dt.number(o,u,e)),n._pitching\u0026\u0026(i.pitch\u003dt.number(s,f,e)),n._padding\u0026\u0026(i.interpolatePadding(l,h,e),d\u003di.centerPoint.add(p)),v)i.setLocationAtPoint(v,y);else{var m\u003di.zoomScale(i.zoom-a),g\u003dc\u003ea?Math.min(2,_):Math.max(.5,_),w\u003dMath.pow(g,1-e),T\u003di.unproject(x.add(b.mult(e*w)).mult(m));i.setLocationAtPoint(i.renderWorldCopies?T.wrap():T,d)}n._fireMoveEvents(r)}),(function(t){n._afterEase(r,t)}),e),this},r.prototype._prepareEase\u003dfunction(e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),this._moving\u003d!0,r||n.moving||this.fire(new t.Event(\"movestart\",e)),this._zooming\u0026\u0026!n.zooming\u0026\u0026this.fire(new t.Event(\"zoomstart\",e)),this._rotating\u0026\u0026!n.rotating\u0026\u0026this.fire(new t.Event(\"rotatestart\",e)),this._pitching\u0026\u0026!n.pitching\u0026\u0026this.fire(new t.Event(\"pitchstart\",e))},r.prototype._fireMoveEvents\u003dfunction(e){this.fire(new t.Event(\"move\",e)),this._zooming\u0026\u0026this.fire(new t.Event(\"zoom\",e)),this._rotating\u0026\u0026this.fire(new t.Event(\"rotate\",e)),this._pitching\u0026\u0026this.fire(new t.Event(\"pitch\",e))},r.prototype._afterEase\u003dfunction(e,r){if(!this._easeId||!r||this._easeId!\u003d\u003dr){delete this._easeId;var n\u003dthis._zooming,i\u003dthis._rotating,a\u003dthis._pitching;this._moving\u003d!1,this._zooming\u003d!1,this._rotating\u003d!1,this._pitching\u003d!1,this._padding\u003d!1,n\u0026\u0026this.fire(new t.Event(\"zoomend\",e)),i\u0026\u0026this.fire(new t.Event(\"rotateend\",e)),a\u0026\u0026this.fire(new t.Event(\"pitchend\",e)),this.fire(new t.Event(\"moveend\",e))}},r.prototype.flyTo\u003dfunction(e,r){var n\u003dthis;if(!e.essential\u0026\u0026t.browser.prefersReducedMotion){var i\u003dt.pick(e,[\"center\",\"zoom\",\"bearing\",\"pitch\",\"around\"]);return this.jumpTo(i,r)}this.stop(),e\u003dt.extend({offset:[0,0],speed:1.2,curve:1.42,easing:t.ease},e);var a\u003dthis.transform,o\u003dthis.getZoom(),s\u003dthis.getBearing(),l\u003dthis.getPitch(),c\u003dthis.getPadding(),u\u003d\"zoom\"in e?t.clamp(+e.zoom,a.minZoom,a.maxZoom):o,f\u003d\"bearing\"in e?this._normalizeBearing(e.bearing,s):s,h\u003d\"pitch\"in e?+e.pitch:l,p\u003d\"padding\"in e?e.padding:a.padding,d\u003da.zoomScale(u-o),m\u003dt.Point.convert(e.offset),g\u003da.centerPoint.add(m),v\u003da.pointLocation(g),y\u003dt.LngLat.convert(e.center||v);this._normalizeCenter(y);var x\u003da.project(v),b\u003da.project(y).sub(x),_\u003de.curve,w\u003dMath.max(a.width,a.height),T\u003dw/d,k\u003db.mag();if(\"minZoom\"in e){var M\u003dt.clamp(Math.min(e.minZoom,o,u),a.minZoom,a.maxZoom),A\u003dw/a.zoomScale(M-o);_\u003dMath.sqrt(A/k*2)}var S\u003d_*_;function E(t){var e\u003d(T*T-w*w+(t?-1:1)*S*S*k*k)/(2*(t?T:w)*S*k);return Math.log(Math.sqrt(e*e+1)-e)}function L(t){return(Math.exp(t)-Math.exp(-t))/2}function C(t){return(Math.exp(t)+Math.exp(-t))/2}var P\u003dE(0),I\u003dfunction(t){return C(P)/C(P+_*t)},O\u003dfunction(t){return w*((C(P)*(L(e\u003dP+_*t)/C(e))-L(P))/S)/k;var e},z\u003d(E(1)-P)/_;if(Math.abs(k)\u003c1e-6||!isFinite(z)){if(Math.abs(w-T)\u003c1e-6)return this.easeTo(e,r);var D\u003dT\u003cw?-1:1;z\u003dMath.abs(Math.log(T/w))/_,O\u003dfunction(){return 0},I\u003dfunction(t){return Math.exp(D*_*t)}}if(\"duration\"in e)e.duration\u003d+e.duration;else{var R\u003d\"screenSpeed\"in e?+e.screenSpeed/_:+e.speed;e.duration\u003d1e3*z/R}return e.maxDuration\u0026\u0026e.duration\u003ee.maxDuration\u0026\u0026(e.duration\u003d0),this._zooming\u003d!0,this._rotating\u003ds!\u003d\u003df,this._pitching\u003dh!\u003d\u003dl,this._padding\u003d!a.isPaddingEqual(p),this._prepareEase(r,!1),this._ease((function(e){var i\u003de*z,d\u003d1/I(i);a.zoom\u003d1\u003d\u003d\u003de?u:o+a.scaleZoom(d),n._rotating\u0026\u0026(a.bearing\u003dt.number(s,f,e)),n._pitching\u0026\u0026(a.pitch\u003dt.number(l,h,e)),n._padding\u0026\u0026(a.interpolatePadding(c,p,e),g\u003da.centerPoint.add(m));var v\u003d1\u003d\u003d\u003de?y:a.unproject(x.add(b.mult(O(i))).mult(d));a.setLocationAtPoint(a.renderWorldCopies?v.wrap():v,g),n._fireMoveEvents(r)}),(function(){return n._afterEase(r)}),e),this},r.prototype.isEasing\u003dfunction(){return!!this._easeFrameId},r.prototype.stop\u003dfunction(){return this._stop()},r.prototype._stop\u003dfunction(t,e){if(this._easeFrameId\u0026\u0026(this._cancelRenderFrame(this._easeFrameId),delete this._easeFrameId,delete this._onEaseFrame),this._onEaseEnd){var r\u003dthis._onEaseEnd;delete this._onEaseEnd,r.call(this,e)}if(!t){var n\u003dthis.handlers;n\u0026\u0026n.stop()}return this},r.prototype._ease\u003dfunction(e,r,n){!1\u003d\u003d\u003dn.animate||0\u003d\u003d\u003dn.duration?(e(1),r()):(this._easeStart\u003dt.browser.now(),this._easeOptions\u003dn,this._onEaseFrame\u003de,this._onEaseEnd\u003dr,this._easeFrameId\u003dthis._requestRenderFrame(this._renderFrameCallback))},r.prototype._renderFrameCallback\u003dfunction(){var e\u003dMath.min((t.browser.now()-this._easeStart)/this._easeOptions.duration,1);this._onEaseFrame(this._easeOptions.easing(e)),e\u003c1?this._easeFrameId\u003dthis._requestRenderFrame(this._renderFrameCallback):this.stop()},r.prototype._normalizeBearing\u003dfunction(e,r){e\u003dt.wrap(e,-180,180);var n\u003dMath.abs(e-r);return Math.abs(e-360-r)\u003cn\u0026\u0026(e-\u003d360),Math.abs(e+360-r)\u003cn\u0026\u0026(e+\u003d360),e},r.prototype._normalizeCenter\u003dfunction(t){var e\u003dthis.transform;if(e.renderWorldCopies\u0026\u0026!e.lngRange){var r\u003dt.lng-e.center.lng;t.lng+\u003dr\u003e180?-360:r\u003c-180?360:0}},r}(t.Evented),bi\u003dfunction(e){void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{}),this.options\u003de,t.bindAll([\"_updateEditLink\",\"_updateData\",\"_updateCompact\"],this)};bi.prototype.getDefaultPosition\u003dfunction(){return\"bottom-right\"},bi.prototype.onAdd\u003dfunction(t){var e\u003dthis.options\u0026\u0026this.options.compact;return this._map\u003dt,this._container\u003dr.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-attrib\"),this._innerContainer\u003dr.create(\"div\",\"mapboxgl-ctrl-attrib-inner\",this._container),e\u0026\u0026this._container.classList.add(\"mapboxgl-compact\"),this._updateAttributions(),this._updateEditLink(),this._map.on(\"styledata\",this._updateData),this._map.on(\"sourcedata\",this._updateData),this._map.on(\"moveend\",this._updateEditLink),void 0\u003d\u003d\u003de\u0026\u0026(this._map.on(\"resize\",this._updateCompact),this._updateCompact()),this._container},bi.prototype.onRemove\u003dfunction(){r.remove(this._container),this._map.off(\"styledata\",this._updateData),this._map.off(\"sourcedata\",this._updateData),this._map.off(\"moveend\",this._updateEditLink),this._map.off(\"resize\",this._updateCompact),this._map\u003dvoid 0,this._attribHTML\u003dvoid 0},bi.prototype._updateEditLink\u003dfunction(){var e\u003dthis._editLink;e||(e\u003dthis._editLink\u003dthis._container.querySelector(\".mapbox-improve-map\"));var r\u003d[{key:\"owner\",value:this.styleOwner},{key:\"id\",value:this.styleId},{key:\"access_token\",value:this._map._requestManager._customAccessToken||t.config.ACCESS_TOKEN}];if(e){var n\u003dr.reduce((function(t,e,n){return e.value\u0026\u0026(t+\u003de.key+\"\u003d\"+e.value+(n\u003cr.length-1?\"\u0026\":\"\")),t}),\"?\");e.href\u003dt.config.FEEDBACK_URL+\"/\"+n+(this._map._hash?this._map._hash.getHashString(!0):\"\"),e.rel\u003d\"noopener nofollow\"}},bi.prototype._updateData\u003dfunction(t){!t||\"metadata\"!\u003d\u003dt.sourceDataType\u0026\u0026\"style\"!\u003d\u003dt.dataType||(this._updateAttributions(),this._updateEditLink())},bi.prototype._updateAttributions\u003dfunction(){if(this._map.style){var t\u003d[];if(this.options.customAttribution\u0026\u0026(Array.isArray(this.options.customAttribution)?t\u003dt.concat(this.options.customAttribution.map((function(t){return\"string\"!\u003dtypeof t?\"\":t}))):\"string\"\u003d\u003dtypeof this.options.customAttribution\u0026\u0026t.push(this.options.customAttribution)),this._map.style.stylesheet){var e\u003dthis._map.style.stylesheet;this.styleOwner\u003de.owner,this.styleId\u003de.id}var r\u003dthis._map.style.sourceCaches;for(var n in r){var i\u003dr[n];if(i.used){var a\u003di.getSource();a.attribution\u0026\u0026t.indexOf(a.attribution)\u003c0\u0026\u0026t.push(a.attribution)}}t.sort((function(t,e){return t.length-e.length}));var o\u003d(t\u003dt.filter((function(e,r){for(var n\u003dr+1;n\u003ct.length;n++)if(t[n].indexOf(e)\u003e\u003d0)return!1;return!0}))).join(\" | \");o!\u003d\u003dthis._attribHTML\u0026\u0026(this._attribHTML\u003do,t.length?(this._innerContainer.innerHTML\u003do,this._container.classList.remove(\"mapboxgl-attrib-empty\")):this._container.classList.add(\"mapboxgl-attrib-empty\"),this._editLink\u003dnull)}},bi.prototype._updateCompact\u003dfunction(){this._map.getCanvasContainer().offsetWidth\u003c\u003d640?this._container.classList.add(\"mapboxgl-compact\"):this._container.classList.remove(\"mapboxgl-compact\")};var _i\u003dfunction(){t.bindAll([\"_updateLogo\"],this),t.bindAll([\"_updateCompact\"],this)};_i.prototype.onAdd\u003dfunction(t){this._map\u003dt,this._container\u003dr.create(\"div\",\"mapboxgl-ctrl\");var e\u003dr.create(\"a\",\"mapboxgl-ctrl-logo\");return e.target\u003d\"_blank\",e.rel\u003d\"noopener nofollow\",e.href\u003d\"https://www.mapbox.com/\",e.setAttribute(\"aria-label\",this._map._getUIString(\"LogoControl.Title\")),e.setAttribute(\"rel\",\"noopener nofollow\"),this._container.appendChild(e),this._container.style.display\u003d\"none\",this._map.on(\"sourcedata\",this._updateLogo),this._updateLogo(),this._map.on(\"resize\",this._updateCompact),this._updateCompact(),this._container},_i.prototype.onRemove\u003dfunction(){r.remove(this._container),this._map.off(\"sourcedata\",this._updateLogo),this._map.off(\"resize\",this._updateCompact)},_i.prototype.getDefaultPosition\u003dfunction(){return\"bottom-left\"},_i.prototype._updateLogo\u003dfunction(t){t\u0026\u0026\"metadata\"!\u003d\u003dt.sourceDataType||(this._container.style.display\u003dthis._logoRequired()?\"block\":\"none\")},_i.prototype._logoRequired\u003dfunction(){if(this._map.style){var t\u003dthis._map.style.sourceCaches;for(var e in t){if(t[e].getSource().mapbox_logo)return!0}return!1}},_i.prototype._updateCompact\u003dfunction(){var t\u003dthis._container.children;if(t.length){var e\u003dt[0];this._map.getCanvasContainer().offsetWidth\u003c250?e.classList.add(\"mapboxgl-compact\"):e.classList.remove(\"mapboxgl-compact\")}};var wi\u003dfunction(){this._queue\u003d[],this._id\u003d0,this._cleared\u003d!1,this._currentlyRunning\u003d!1};wi.prototype.add\u003dfunction(t){var e\u003d++this._id;return this._queue.push({callback:t,id:e,cancelled:!1}),e},wi.prototype.remove\u003dfunction(t){for(var e\u003dthis._currentlyRunning,r\u003d0,n\u003de?this._queue.concat(e):this._queue;r\u003cn.length;r+\u003d1){var i\u003dn[r];if(i.id\u003d\u003d\u003dt)return void(i.cancelled\u003d!0)}},wi.prototype.run\u003dfunction(t){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d0);var e\u003dthis._currentlyRunning\u003dthis._queue;this._queue\u003d[];for(var r\u003d0,n\u003de;r\u003cn.length;r+\u003d1){var i\u003dn[r];if(!i.cancelled\u0026\u0026(i.callback(t),this._cleared))break}this._cleared\u003d!1,this._currentlyRunning\u003d!1},wi.prototype.clear\u003dfunction(){this._currentlyRunning\u0026\u0026(this._cleared\u003d!0),this._queue\u003d[]};var Ti\u003d{\"FullscreenControl.Enter\":\"Enter fullscreen\",\"FullscreenControl.Exit\":\"Exit fullscreen\",\"GeolocateControl.FindMyLocation\":\"Find my location\",\"GeolocateControl.LocationNotAvailable\":\"Location not available\",\"LogoControl.Title\":\"Mapbox logo\",\"NavigationControl.ResetBearing\":\"Reset bearing to north\",\"NavigationControl.ZoomIn\":\"Zoom in\",\"NavigationControl.ZoomOut\":\"Zoom out\",\"ScaleControl.Feet\":\"ft\",\"ScaleControl.Meters\":\"m\",\"ScaleControl.Kilometers\":\"km\",\"ScaleControl.Miles\":\"mi\",\"ScaleControl.NauticalMiles\":\"nm\"},ki\u003dt.window.HTMLImageElement,Mi\u003dt.window.HTMLElement,Ai\u003dt.window.ImageBitmap,Si\u003d{center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:-2,maxZoom:22,minPitch:0,maxPitch:60,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,touchPitch:!0,bearingSnap:7,clickTolerance:3,pitchWithRotate:!0,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,renderWorldCopies:!0,refreshExpiredTiles:!0,maxTileCacheSize:null,localIdeographFontFamily:\"sans-serif\",transformRequest:null,accessToken:null,fadeDuration:300,crossSourceCollisions:!0},Ei\u003dfunction(n){function i(e){var r\u003dthis;if(null!\u003d(e\u003dt.extend({},Si,e)).minZoom\u0026\u0026null!\u003de.maxZoom\u0026\u0026e.minZoom\u003ee.maxZoom)throw new Error(\"maxZoom must be greater than or equal to minZoom\");if(null!\u003de.minPitch\u0026\u0026null!\u003de.maxPitch\u0026\u0026e.minPitch\u003ee.maxPitch)throw new Error(\"maxPitch must be greater than or equal to minPitch\");if(null!\u003de.minPitch\u0026\u0026e.minPitch\u003c0)throw new Error(\"minPitch must be greater than or equal to 0\");if(null!\u003de.maxPitch\u0026\u0026e.maxPitch\u003e60)throw new Error(\"maxPitch must be less than or equal to 60\");var i\u003dnew Mn(e.minZoom,e.maxZoom,e.minPitch,e.maxPitch,e.renderWorldCopies);if(n.call(this,i,e),this._interactive\u003de.interactive,this._maxTileCacheSize\u003de.maxTileCacheSize,this._failIfMajorPerformanceCaveat\u003de.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer\u003de.preserveDrawingBuffer,this._antialias\u003de.antialias,this._trackResize\u003de.trackResize,this._bearingSnap\u003de.bearingSnap,this._refreshExpiredTiles\u003de.refreshExpiredTiles,this._fadeDuration\u003de.fadeDuration,this._crossSourceCollisions\u003de.crossSourceCollisions,this._crossFadingFactor\u003d1,this._collectResourceTiming\u003de.collectResourceTiming,this._renderTaskQueue\u003dnew wi,this._controls\u003d[],this._mapId\u003dt.uniqueId(),this._locale\u003dt.extend({},Ti,e.locale),this._requestManager\u003dnew t.RequestManager(e.transformRequest,e.accessToken),\"string\"\u003d\u003dtypeof e.container){if(this._container\u003dt.window.document.getElementById(e.container),!this._container)throw new Error(\"Container \u0027\"+e.container+\"\u0027 not found.\")}else{if(!(e.container instanceof Mi))throw new Error(\"Invalid type: \u0027container\u0027 must be a String or HTMLElement.\");this._container\u003de.container}if(e.maxBounds\u0026\u0026this.setMaxBounds(e.maxBounds),t.bindAll([\"_onWindowOnline\",\"_onWindowResize\",\"_contextLost\",\"_contextRestored\"],this),this._setupContainer(),this._setupPainter(),void 0\u003d\u003d\u003dthis.painter)throw new Error(\"Failed to initialize WebGL.\");this.on(\"move\",(function(){return r._update(!1)})),this.on(\"moveend\",(function(){return r._update(!1)})),this.on(\"zoom\",(function(){return r._update(!0)})),void 0!\u003d\u003dt.window\u0026\u0026(t.window.addEventListener(\"online\",this._onWindowOnline,!1),t.window.addEventListener(\"resize\",this._onWindowResize,!1)),this.handlers\u003dnew yi(this,e);var a\u003d\"string\"\u003d\u003dtypeof e.hash\u0026\u0026e.hash||void 0;this._hash\u003de.hash\u0026\u0026new Sn(a).addTo(this),this._hash\u0026\u0026this._hash._onHashChange()||(this.jumpTo({center:e.center,zoom:e.zoom,bearing:e.bearing,pitch:e.pitch}),e.bounds\u0026\u0026(this.resize(),this.fitBounds(e.bounds,t.extend({},e.fitBoundsOptions,{duration:0})))),this.resize(),this._localIdeographFontFamily\u003de.localIdeographFontFamily,e.style\u0026\u0026this.setStyle(e.style,{localIdeographFontFamily:e.localIdeographFontFamily}),e.attributionControl\u0026\u0026this.addControl(new bi({customAttribution:e.customAttribution})),this.addControl(new _i,e.logoPosition),this.on(\"style.load\",(function(){r.transform.unmodified\u0026\u0026r.jumpTo(r.style.stylesheet)})),this.on(\"data\",(function(e){r._update(\"style\"\u003d\u003d\u003de.dataType),r.fire(new t.Event(e.dataType+\"data\",e))})),this.on(\"dataloading\",(function(e){r.fire(new t.Event(e.dataType+\"dataloading\",e))}))}n\u0026\u0026(i.__proto__\u003dn),i.prototype\u003dObject.create(n\u0026\u0026n.prototype),i.prototype.constructor\u003di;var a\u003d{showTileBoundaries:{configurable:!0},showPadding:{configurable:!0},showCollisionBoxes:{configurable:!0},showOverdrawInspector:{configurable:!0},repaint:{configurable:!0},vertices:{configurable:!0},version:{configurable:!0}};return i.prototype._getMapId\u003dfunction(){return this._mapId},i.prototype.addControl\u003dfunction(e,r){if(void 0\u003d\u003d\u003dr\u0026\u0026e.getDefaultPosition\u0026\u0026(r\u003de.getDefaultPosition()),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d\"top-right\"),!e||!e.onAdd)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.addControl(). Argument must be a control with onAdd and onRemove methods.\")));var n\u003de.onAdd(this);this._controls.push(e);var i\u003dthis._controlPositions[r];return-1!\u003d\u003dr.indexOf(\"bottom\")?i.insertBefore(n,i.firstChild):i.appendChild(n),this},i.prototype.removeControl\u003dfunction(e){if(!e||!e.onRemove)return this.fire(new t.ErrorEvent(new Error(\"Invalid argument to map.removeControl(). Argument must be a control with onAdd and onRemove methods.\")));var r\u003dthis._controls.indexOf(e);return r\u003e-1\u0026\u0026this._controls.splice(r,1),e.onRemove(this),this},i.prototype.resize\u003dfunction(e){var r\u003dthis._containerDimensions(),n\u003dr[0],i\u003dr[1];this._resizeCanvas(n,i),this.transform.resize(n,i),this.painter.resize(n,i);var a\u003d!this._moving;return a\u0026\u0026(this.stop(),this.fire(new t.Event(\"movestart\",e)).fire(new t.Event(\"move\",e))),this.fire(new t.Event(\"resize\",e)),a\u0026\u0026this.fire(new t.Event(\"moveend\",e)),this},i.prototype.getBounds\u003dfunction(){return this.transform.getBounds()},i.prototype.getMaxBounds\u003dfunction(){return this.transform.getMaxBounds()},i.prototype.setMaxBounds\u003dfunction(e){return this.transform.setMaxBounds(t.LngLatBounds.convert(e)),this._update()},i.prototype.setMinZoom\u003dfunction(t){if((t\u003dnull\u003d\u003dt?-2:t)\u003e\u003d-2\u0026\u0026t\u003c\u003dthis.transform.maxZoom)return this.transform.minZoom\u003dt,this._update(),this.getZoom()\u003ct\u0026\u0026this.setZoom(t),this;throw new Error(\"minZoom must be between -2 and the current maxZoom, inclusive\")},i.prototype.getMinZoom\u003dfunction(){return this.transform.minZoom},i.prototype.setMaxZoom\u003dfunction(t){if((t\u003dnull\u003d\u003dt?22:t)\u003e\u003dthis.transform.minZoom)return this.transform.maxZoom\u003dt,this._update(),this.getZoom()\u003et\u0026\u0026this.setZoom(t),this;throw new Error(\"maxZoom must be greater than the current minZoom\")},i.prototype.getMaxZoom\u003dfunction(){return this.transform.maxZoom},i.prototype.setMinPitch\u003dfunction(t){if((t\u003dnull\u003d\u003dt?0:t)\u003c0)throw new Error(\"minPitch must be greater than or equal to 0\");if(t\u003e\u003d0\u0026\u0026t\u003c\u003dthis.transform.maxPitch)return this.transform.minPitch\u003dt,this._update(),this.getPitch()\u003ct\u0026\u0026this.setPitch(t),this;throw new Error(\"minPitch must be between 0 and the current maxPitch, inclusive\")},i.prototype.getMinPitch\u003dfunction(){return this.transform.minPitch},i.prototype.setMaxPitch\u003dfunction(t){if((t\u003dnull\u003d\u003dt?60:t)\u003e60)throw new Error(\"maxPitch must be less than or equal to 60\");if(t\u003e\u003dthis.transform.minPitch)return this.transform.maxPitch\u003dt,this._update(),this.getPitch()\u003et\u0026\u0026this.setPitch(t),this;throw new Error(\"maxPitch must be greater than the current minPitch\")},i.prototype.getMaxPitch\u003dfunction(){return this.transform.maxPitch},i.prototype.getRenderWorldCopies\u003dfunction(){return this.transform.renderWorldCopies},i.prototype.setRenderWorldCopies\u003dfunction(t){return this.transform.renderWorldCopies\u003dt,this._update()},i.prototype.project\u003dfunction(e){return this.transform.locationPoint(t.LngLat.convert(e))},i.prototype.unproject\u003dfunction(e){return this.transform.pointLocation(t.Point.convert(e))},i.prototype.isMoving\u003dfunction(){return this._moving||this.handlers.isMoving()},i.prototype.isZooming\u003dfunction(){return this._zooming||this.handlers.isZooming()},i.prototype.isRotating\u003dfunction(){return this._rotating||this.handlers.isRotating()},i.prototype._createDelegatedListener\u003dfunction(t,e,r){var n,i\u003dthis;if(\"mouseenter\"\u003d\u003d\u003dt||\"mouseover\"\u003d\u003d\u003dt){var a\u003d!1;return{layer:e,listener:r,delegates:{mousemove:function(n){var o\u003di.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[];o.length?a||(a\u003d!0,r.call(i,new Rn(t,i,n.originalEvent,{features:o}))):a\u003d!1},mouseout:function(){a\u003d!1}}}}if(\"mouseleave\"\u003d\u003d\u003dt||\"mouseout\"\u003d\u003d\u003dt){var o\u003d!1;return{layer:e,listener:r,delegates:{mousemove:function(n){(i.getLayer(e)?i.queryRenderedFeatures(n.point,{layers:[e]}):[]).length?o\u003d!0:o\u0026\u0026(o\u003d!1,r.call(i,new Rn(t,i,n.originalEvent)))},mouseout:function(e){o\u0026\u0026(o\u003d!1,r.call(i,new Rn(t,i,e.originalEvent)))}}}}return{layer:e,listener:r,delegates:(n\u003d{},n[t]\u003dfunction(t){var n\u003di.getLayer(e)?i.queryRenderedFeatures(t.point,{layers:[e]}):[];n.length\u0026\u0026(t.features\u003dn,r.call(i,t),delete t.features)},n)}},i.prototype.on\u003dfunction(t,e,r){if(void 0\u003d\u003d\u003dr)return n.prototype.on.call(this,t,e);var i\u003dthis._createDelegatedListener(t,e,r);for(var a in this._delegatedListeners\u003dthis._delegatedListeners||{},this._delegatedListeners[t]\u003dthis._delegatedListeners[t]||[],this._delegatedListeners[t].push(i),i.delegates)this.on(a,i.delegates[a]);return this},i.prototype.once\u003dfunction(t,e,r){if(void 0\u003d\u003d\u003dr)return n.prototype.once.call(this,t,e);var i\u003dthis._createDelegatedListener(t,e,r);for(var a in i.delegates)this.once(a,i.delegates[a]);return this},i.prototype.off\u003dfunction(t,e,r){var i\u003dthis;if(void 0\u003d\u003d\u003dr)return n.prototype.off.call(this,t,e);return this._delegatedListeners\u0026\u0026this._delegatedListeners[t]\u0026\u0026function(n){for(var a\u003dn[t],o\u003d0;o\u003ca.length;o++){var s\u003da[o];if(s.layer\u003d\u003d\u003de\u0026\u0026s.listener\u003d\u003d\u003dr){for(var l in s.delegates)i.off(l,s.delegates[l]);return a.splice(o,1),i}}}(this._delegatedListeners),this},i.prototype.queryRenderedFeatures\u003dfunction(e,r){if(!this.style)return[];var n;if(void 0!\u003d\u003dr||void 0\u003d\u003d\u003de||e instanceof t.Point||Array.isArray(e)||(r\u003de,e\u003dvoid 0),r\u003dr||{},(e\u003de||[[0,0],[this.transform.width,this.transform.height]])instanceof t.Point||\"number\"\u003d\u003dtypeof e[0])n\u003d[t.Point.convert(e)];else{var i\u003dt.Point.convert(e[0]),a\u003dt.Point.convert(e[1]);n\u003d[i,new t.Point(a.x,i.y),a,new t.Point(i.x,a.y),i]}return this.style.queryRenderedFeatures(n,r,this.transform)},i.prototype.querySourceFeatures\u003dfunction(t,e){return this.style.querySourceFeatures(t,e)},i.prototype.setStyle\u003dfunction(e,r){return!1!\u003d\u003d(r\u003dt.extend({},{localIdeographFontFamily:this._localIdeographFontFamily},r)).diff\u0026\u0026r.localIdeographFontFamily\u003d\u003d\u003dthis._localIdeographFontFamily\u0026\u0026this.style\u0026\u0026e?(this._diffStyle(e,r),this):(this._localIdeographFontFamily\u003dr.localIdeographFontFamily,this._updateStyle(e,r))},i.prototype._getUIString\u003dfunction(t){var e\u003dthis._locale[t];if(null\u003d\u003de)throw new Error(\"Missing UI string \u0027\"+t+\"\u0027\");return e},i.prototype._updateStyle\u003dfunction(t,e){return this.style\u0026\u0026(this.style.setEventedParent(null),this.style._remove()),t?(this.style\u003dnew He(this,e||{}),this.style.setEventedParent(this,{style:this.style}),\"string\"\u003d\u003dtypeof t?this.style.loadURL(t):this.style.loadJSON(t),this):(delete this.style,this)},i.prototype._lazyInitEmptyStyle\u003dfunction(){this.style||(this.style\u003dnew He(this,{}),this.style.setEventedParent(this,{style:this.style}),this.style.loadEmpty())},i.prototype._diffStyle\u003dfunction(e,r){var n\u003dthis;if(\"string\"\u003d\u003dtypeof e){var i\u003dthis._requestManager.normalizeStyleURL(e),a\u003dthis._requestManager.transformRequest(i,t.ResourceType.Style);t.getJSON(a,(function(e,i){e?n.fire(new t.ErrorEvent(e)):i\u0026\u0026n._updateDiff(i,r)}))}else\"object\"\u003d\u003dtypeof e\u0026\u0026this._updateDiff(e,r)},i.prototype._updateDiff\u003dfunction(e,r){try{this.style.setState(e)\u0026\u0026this._update(!0)}catch(n){t.warnOnce(\"Unable to perform style diff: \"+(n.message||n.error||n)+\".  Rebuilding the style from scratch.\"),this._updateStyle(e,r)}},i.prototype.getStyle\u003dfunction(){if(this.style)return this.style.serialize()},i.prototype.isStyleLoaded\u003dfunction(){return this.style?this.style.loaded():t.warnOnce(\"There is no style added to the map.\")},i.prototype.addSource\u003dfunction(t,e){return this._lazyInitEmptyStyle(),this.style.addSource(t,e),this._update(!0)},i.prototype.isSourceLoaded\u003dfunction(e){var r\u003dthis.style\u0026\u0026this.style.sourceCaches[e];if(void 0!\u003d\u003dr)return r.loaded();this.fire(new t.ErrorEvent(new Error(\"There is no source with ID \u0027\"+e+\"\u0027\")))},i.prototype.areTilesLoaded\u003dfunction(){var t\u003dthis.style\u0026\u0026this.style.sourceCaches;for(var e in t){var r\u003dt[e]._tiles;for(var n in r){var i\u003dr[n];if(\"loaded\"!\u003d\u003di.state\u0026\u0026\"errored\"!\u003d\u003di.state)return!1}}return!0},i.prototype.addSourceType\u003dfunction(t,e,r){return this._lazyInitEmptyStyle(),this.style.addSourceType(t,e,r)},i.prototype.removeSource\u003dfunction(t){return this.style.removeSource(t),this._update(!0)},i.prototype.getSource\u003dfunction(t){return this.style.getSource(t)},i.prototype.addImage\u003dfunction(e,r,n){void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{});var i\u003dn.pixelRatio;void 0\u003d\u003d\u003di\u0026\u0026(i\u003d1);var a\u003dn.sdf;void 0\u003d\u003d\u003da\u0026\u0026(a\u003d!1);var o\u003dn.stretchX,s\u003dn.stretchY,l\u003dn.content;this._lazyInitEmptyStyle();if(r instanceof ki||Ai\u0026\u0026r instanceof Ai){var c\u003dt.browser.getImageData(r),u\u003dc.width,f\u003dc.height,h\u003dc.data;this.style.addImage(e,{data:new t.RGBAImage({width:u,height:f},h),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0})}else{if(void 0\u003d\u003d\u003dr.width||void 0\u003d\u003d\u003dr.height)return this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\")));var p\u003dr.width,d\u003dr.height,m\u003dr.data,g\u003dr;this.style.addImage(e,{data:new t.RGBAImage({width:p,height:d},new Uint8Array(m)),pixelRatio:i,stretchX:o,stretchY:s,content:l,sdf:a,version:0,userImage:g}),g.onAdd\u0026\u0026g.onAdd(this,e)}},i.prototype.updateImage\u003dfunction(e,r){var n\u003dthis.style.getImage(e);if(!n)return this.fire(new t.ErrorEvent(new Error(\"The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.\")));var i\u003dr instanceof ki||Ai\u0026\u0026r instanceof Ai?t.browser.getImageData(r):r,a\u003di.width,o\u003di.height,s\u003di.data;if(void 0\u003d\u003d\u003da||void 0\u003d\u003d\u003do)return this.fire(new t.ErrorEvent(new Error(\"Invalid arguments to map.updateImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, or object with `width`, `height`, and `data` properties with the same format as `ImageData`\")));if(a!\u003d\u003dn.data.width||o!\u003d\u003dn.data.height)return this.fire(new t.ErrorEvent(new Error(\"The width and height of the updated image must be that same as the previous version of the image\")));var l\u003d!(r instanceof ki||Ai\u0026\u0026r instanceof Ai);n.data.replace(s,l),this.style.updateImage(e,n)},i.prototype.hasImage\u003dfunction(e){return e?!!this.style.getImage(e):(this.fire(new t.ErrorEvent(new Error(\"Missing required image id\"))),!1)},i.prototype.removeImage\u003dfunction(t){this.style.removeImage(t)},i.prototype.loadImage\u003dfunction(e,r){t.getImage(this._requestManager.transformRequest(e,t.ResourceType.Image),r)},i.prototype.listImages\u003dfunction(){return this.style.listImages()},i.prototype.addLayer\u003dfunction(t,e){return this._lazyInitEmptyStyle(),this.style.addLayer(t,e),this._update(!0)},i.prototype.moveLayer\u003dfunction(t,e){return this.style.moveLayer(t,e),this._update(!0)},i.prototype.removeLayer\u003dfunction(t){return this.style.removeLayer(t),this._update(!0)},i.prototype.getLayer\u003dfunction(t){return this.style.getLayer(t)},i.prototype.setLayerZoomRange\u003dfunction(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0)},i.prototype.setFilter\u003dfunction(t,e,r){return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d{}),this.style.setFilter(t,e,r),this._update(!0)},i.prototype.getFilter\u003dfunction(t){return this.style.getFilter(t)},i.prototype.setPaintProperty\u003dfunction(t,e,r,n){return void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),this.style.setPaintProperty(t,e,r,n),this._update(!0)},i.prototype.getPaintProperty\u003dfunction(t,e){return this.style.getPaintProperty(t,e)},i.prototype.setLayoutProperty\u003dfunction(t,e,r,n){return void 0\u003d\u003d\u003dn\u0026\u0026(n\u003d{}),this.style.setLayoutProperty(t,e,r,n),this._update(!0)},i.prototype.getLayoutProperty\u003dfunction(t,e){return this.style.getLayoutProperty(t,e)},i.prototype.setLight\u003dfunction(t,e){return void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{}),this._lazyInitEmptyStyle(),this.style.setLight(t,e),this._update(!0)},i.prototype.getLight\u003dfunction(){return this.style.getLight()},i.prototype.setFeatureState\u003dfunction(t,e){return this.style.setFeatureState(t,e),this._update()},i.prototype.removeFeatureState\u003dfunction(t,e){return this.style.removeFeatureState(t,e),this._update()},i.prototype.getFeatureState\u003dfunction(t){return this.style.getFeatureState(t)},i.prototype.getContainer\u003dfunction(){return this._container},i.prototype.getCanvasContainer\u003dfunction(){return this._canvasContainer},i.prototype.getCanvas\u003dfunction(){return this._canvas},i.prototype._containerDimensions\u003dfunction(){var t\u003d0,e\u003d0;return this._container\u0026\u0026(t\u003dthis._container.clientWidth||400,e\u003dthis._container.clientHeight||300),[t,e]},i.prototype._detectMissingCSS\u003dfunction(){\"rgb(250, 128, 114)\"!\u003d\u003dt.window.getComputedStyle(this._missingCSSCanary).getPropertyValue(\"background-color\")\u0026\u0026t.warnOnce(\"This page appears to be missing CSS declarations for Mapbox GL JS, which may cause the map to display incorrectly. Please ensure your page includes mapbox-gl.css, as described in https://www.mapbox.com/mapbox-gl-js/api/.\")},i.prototype._setupContainer\u003dfunction(){var t\u003dthis._container;t.classList.add(\"mapboxgl-map\"),(this._missingCSSCanary\u003dr.create(\"div\",\"mapboxgl-canary\",t)).style.visibility\u003d\"hidden\",this._detectMissingCSS();var e\u003dthis._canvasContainer\u003dr.create(\"div\",\"mapboxgl-canvas-container\",t);this._interactive\u0026\u0026e.classList.add(\"mapboxgl-interactive\"),this._canvas\u003dr.create(\"canvas\",\"mapboxgl-canvas\",e),this._canvas.addEventListener(\"webglcontextlost\",this._contextLost,!1),this._canvas.addEventListener(\"webglcontextrestored\",this._contextRestored,!1),this._canvas.setAttribute(\"tabindex\",\"0\"),this._canvas.setAttribute(\"aria-label\",\"Map\");var n\u003dthis._containerDimensions();this._resizeCanvas(n[0],n[1]);var i\u003dthis._controlContainer\u003dr.create(\"div\",\"mapboxgl-control-container\",t),a\u003dthis._controlPositions\u003d{};[\"top-left\",\"top-right\",\"bottom-left\",\"bottom-right\"].forEach((function(t){a[t]\u003dr.create(\"div\",\"mapboxgl-ctrl-\"+t,i)}))},i.prototype._resizeCanvas\u003dfunction(e,r){var n\u003dt.browser.devicePixelRatio||1;this._canvas.width\u003dn*e,this._canvas.height\u003dn*r,this._canvas.style.width\u003de+\"px\",this._canvas.style.height\u003dr+\"px\"},i.prototype._setupPainter\u003dfunction(){var r\u003dt.extend({},e.webGLContextAttributes,{failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer,antialias:this._antialias||!1}),n\u003dthis._canvas.getContext(\"webgl\",r)||this._canvas.getContext(\"experimental-webgl\",r);n?(this.painter\u003dnew _n(n,this.transform),t.webpSupported.testSupport(n)):this.fire(new t.ErrorEvent(new Error(\"Failed to initialize WebGL\")))},i.prototype._contextLost\u003dfunction(e){e.preventDefault(),this._frame\u0026\u0026(this._frame.cancel(),this._frame\u003dnull),this.fire(new t.Event(\"webglcontextlost\",{originalEvent:e}))},i.prototype._contextRestored\u003dfunction(e){this._setupPainter(),this.resize(),this._update(),this.fire(new t.Event(\"webglcontextrestored\",{originalEvent:e}))},i.prototype.loaded\u003dfunction(){return!this._styleDirty\u0026\u0026!this._sourcesDirty\u0026\u0026!!this.style\u0026\u0026this.style.loaded()},i.prototype._update\u003dfunction(t){return this.style?(this._styleDirty\u003dthis._styleDirty||t,this._sourcesDirty\u003d!0,this.triggerRepaint(),this):this},i.prototype._requestRenderFrame\u003dfunction(t){return this._update(),this._renderTaskQueue.add(t)},i.prototype._cancelRenderFrame\u003dfunction(t){this._renderTaskQueue.remove(t)},i.prototype._render\u003dfunction(e){var r,n\u003dthis,i\u003d0,a\u003dthis.painter.context.extTimerQuery;if(this.listens(\"gpu-timing-frame\")\u0026\u0026(r\u003da.createQueryEXT(),a.beginQueryEXT(a.TIME_ELAPSED_EXT,r),i\u003dt.browser.now()),this.painter.context.setDirty(),this.painter.setBaseState(),this._renderTaskQueue.run(e),!this._removed){var o\u003d!1;if(this.style\u0026\u0026this._styleDirty){this._styleDirty\u003d!1;var s\u003dthis.transform.zoom,l\u003dt.browser.now();this.style.zoomHistory.update(s,l);var c\u003dnew t.EvaluationParameters(s,{now:l,fadeDuration:this._fadeDuration,zoomHistory:this.style.zoomHistory,transition:this.style.getTransition()}),u\u003dc.crossFadingFactor();1\u003d\u003d\u003du\u0026\u0026u\u003d\u003d\u003dthis._crossFadingFactor||(o\u003d!0,this._crossFadingFactor\u003du),this.style.update(c)}if(this.style\u0026\u0026this._sourcesDirty\u0026\u0026(this._sourcesDirty\u003d!1,this.style._updateSources(this.transform)),this._placementDirty\u003dthis.style\u0026\u0026this.style._updatePlacement(this.painter.transform,this.showCollisionBoxes,this._fadeDuration,this._crossSourceCollisions),this.painter.render(this.style,{showTileBoundaries:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,rotating:this.isRotating(),zooming:this.isZooming(),moving:this.isMoving(),fadeDuration:this._fadeDuration,showPadding:this.showPadding,gpuTiming:!!this.listens(\"gpu-timing-layer\")}),this.fire(new t.Event(\"render\")),this.loaded()\u0026\u0026!this._loaded\u0026\u0026(this._loaded\u003d!0,this.fire(new t.Event(\"load\"))),this.style\u0026\u0026(this.style.hasTransitions()||o)\u0026\u0026(this._styleDirty\u003d!0),this.style\u0026\u0026!this._placementDirty\u0026\u0026this.style._releaseSymbolFadeTiles(),this.listens(\"gpu-timing-frame\")){var f\u003dt.browser.now()-i;a.endQueryEXT(a.TIME_ELAPSED_EXT,r),setTimeout((function(){var e\u003da.getQueryObjectEXT(r,a.QUERY_RESULT_EXT)/1e6;a.deleteQueryEXT(r),n.fire(new t.Event(\"gpu-timing-frame\",{cpuTime:f,gpuTime:e}))}),50)}if(this.listens(\"gpu-timing-layer\")){var h\u003dthis.painter.collectGpuTimers();setTimeout((function(){var e\u003dn.painter.queryGpuTimers(h);n.fire(new t.Event(\"gpu-timing-layer\",{layerTimes:e}))}),50)}return this._sourcesDirty||this._styleDirty||this._placementDirty||this._repaint?this.triggerRepaint():!this.isMoving()\u0026\u0026this.loaded()\u0026\u0026(this._fullyLoaded||(this._fullyLoaded\u003d!0),this.fire(new t.Event(\"idle\"))),this}},i.prototype.remove\u003dfunction(){this._hash\u0026\u0026this._hash.remove();for(var e\u003d0,r\u003dthis._controls;e\u003cr.length;e+\u003d1){r[e].onRemove(this)}this._controls\u003d[],this._frame\u0026\u0026(this._frame.cancel(),this._frame\u003dnull),this._renderTaskQueue.clear(),this.painter.destroy(),this.handlers.destroy(),delete this.handlers,this.setStyle(null),void 0!\u003d\u003dt.window\u0026\u0026(t.window.removeEventListener(\"resize\",this._onWindowResize,!1),t.window.removeEventListener(\"online\",this._onWindowOnline,!1));var n\u003dthis.painter.context.gl.getExtension(\"WEBGL_lose_context\");n\u0026\u0026n.loseContext(),Li(this._canvasContainer),Li(this._controlContainer),Li(this._missingCSSCanary),this._container.classList.remove(\"mapboxgl-map\"),this._removed\u003d!0,this.fire(new t.Event(\"remove\"))},i.prototype.triggerRepaint\u003dfunction(){var e\u003dthis;this.style\u0026\u0026!this._frame\u0026\u0026(this._frame\u003dt.browser.frame((function(t){e._frame\u003dnull,e._render(t)})))},i.prototype._onWindowOnline\u003dfunction(){this._update()},i.prototype._onWindowResize\u003dfunction(t){this._trackResize\u0026\u0026this.resize({originalEvent:t})._update()},a.showTileBoundaries.get\u003dfunction(){return!!this._showTileBoundaries},a.showTileBoundaries.set\u003dfunction(t){this._showTileBoundaries!\u003d\u003dt\u0026\u0026(this._showTileBoundaries\u003dt,this._update())},a.showPadding.get\u003dfunction(){return!!this._showPadding},a.showPadding.set\u003dfunction(t){this._showPadding!\u003d\u003dt\u0026\u0026(this._showPadding\u003dt,this._update())},a.showCollisionBoxes.get\u003dfunction(){return!!this._showCollisionBoxes},a.showCollisionBoxes.set\u003dfunction(t){this._showCollisionBoxes!\u003d\u003dt\u0026\u0026(this._showCollisionBoxes\u003dt,t?this.style._generateCollisionBoxes():this._update())},a.showOverdrawInspector.get\u003dfunction(){return!!this._showOverdrawInspector},a.showOverdrawInspector.set\u003dfunction(t){this._showOverdrawInspector!\u003d\u003dt\u0026\u0026(this._showOverdrawInspector\u003dt,this._update())},a.repaint.get\u003dfunction(){return!!this._repaint},a.repaint.set\u003dfunction(t){this._repaint!\u003d\u003dt\u0026\u0026(this._repaint\u003dt,this.triggerRepaint())},a.vertices.get\u003dfunction(){return!!this._vertices},a.vertices.set\u003dfunction(t){this._vertices\u003dt,this._update()},i.prototype._setCacheLimits\u003dfunction(e,r){t.setCacheLimits(e,r)},a.version.get\u003dfunction(){return t.version},Object.defineProperties(i.prototype,a),i}(xi);function Li(t){t.parentNode\u0026\u0026t.parentNode.removeChild(t)}var Ci\u003d{showCompass:!0,showZoom:!0,visualizePitch:!1},Pi\u003dfunction(e){var n\u003dthis;this.options\u003dt.extend({},Ci,e),this._container\u003dr.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this.options.showZoom\u0026\u0026(t.bindAll([\"_setButtonTitle\",\"_updateZoomButtons\"],this),this._zoomInButton\u003dthis._createButton(\"mapboxgl-ctrl-zoom-in\",(function(t){return n._map.zoomIn({},{originalEvent:t})})),r.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomInButton).setAttribute(\"aria-hidden\",!0),this._zoomOutButton\u003dthis._createButton(\"mapboxgl-ctrl-zoom-out\",(function(t){return n._map.zoomOut({},{originalEvent:t})})),r.create(\"span\",\"mapboxgl-ctrl-icon\",this._zoomOutButton).setAttribute(\"aria-hidden\",!0)),this.options.showCompass\u0026\u0026(t.bindAll([\"_rotateCompassArrow\"],this),this._compass\u003dthis._createButton(\"mapboxgl-ctrl-compass\",(function(t){n.options.visualizePitch?n._map.resetNorthPitch({},{originalEvent:t}):n._map.resetNorth({},{originalEvent:t})})),this._compassIcon\u003dr.create(\"span\",\"mapboxgl-ctrl-icon\",this._compass),this._compassIcon.setAttribute(\"aria-hidden\",!0))};Pi.prototype._updateZoomButtons\u003dfunction(){var t\u003dthis._map.getZoom();this._zoomInButton.disabled\u003dt\u003d\u003d\u003dthis._map.getMaxZoom(),this._zoomOutButton.disabled\u003dt\u003d\u003d\u003dthis._map.getMinZoom()},Pi.prototype._rotateCompassArrow\u003dfunction(){var t\u003dthis.options.visualizePitch?\"scale(\"+1/Math.pow(Math.cos(this._map.transform.pitch*(Math.PI/180)),.5)+\") rotateX(\"+this._map.transform.pitch+\"deg) rotateZ(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\":\"rotate(\"+this._map.transform.angle*(180/Math.PI)+\"deg)\";this._compassIcon.style.transform\u003dt},Pi.prototype.onAdd\u003dfunction(t){return this._map\u003dt,this.options.showZoom\u0026\u0026(this._setButtonTitle(this._zoomInButton,\"ZoomIn\"),this._setButtonTitle(this._zoomOutButton,\"ZoomOut\"),this._map.on(\"zoom\",this._updateZoomButtons),this._updateZoomButtons()),this.options.showCompass\u0026\u0026(this._setButtonTitle(this._compass,\"ResetBearing\"),this.options.visualizePitch\u0026\u0026this._map.on(\"pitch\",this._rotateCompassArrow),this._map.on(\"rotate\",this._rotateCompassArrow),this._rotateCompassArrow(),this._handler\u003dnew Ii(this._map,this._compass,this.options.visualizePitch)),this._container},Pi.prototype.onRemove\u003dfunction(){r.remove(this._container),this.options.showZoom\u0026\u0026this._map.off(\"zoom\",this._updateZoomButtons),this.options.showCompass\u0026\u0026(this.options.visualizePitch\u0026\u0026this._map.off(\"pitch\",this._rotateCompassArrow),this._map.off(\"rotate\",this._rotateCompassArrow),this._handler.off(),delete this._handler),delete this._map},Pi.prototype._createButton\u003dfunction(t,e){var n\u003dr.create(\"button\",t,this._container);return n.type\u003d\"button\",n.addEventListener(\"click\",e),n},Pi.prototype._setButtonTitle\u003dfunction(t,e){var r\u003dthis._map._getUIString(\"NavigationControl.\"+e);t.title\u003dr,t.setAttribute(\"aria-label\",r)};var Ii\u003dfunction(e,n,i){void 0\u003d\u003d\u003di\u0026\u0026(i\u003d!1),this._clickTolerance\u003d10,this.element\u003dn,this.mouseRotate\u003dnew Xn({clickTolerance:e.dragRotate._mouseRotate._clickTolerance}),this.map\u003de,i\u0026\u0026(this.mousePitch\u003dnew Zn({clickTolerance:e.dragRotate._mousePitch._clickTolerance})),t.bindAll([\"mousedown\",\"mousemove\",\"mouseup\",\"touchstart\",\"touchmove\",\"touchend\",\"reset\"],this),r.addEventListener(n,\"mousedown\",this.mousedown),r.addEventListener(n,\"touchstart\",this.touchstart,{passive:!1}),r.addEventListener(n,\"touchmove\",this.touchmove),r.addEventListener(n,\"touchend\",this.touchend),r.addEventListener(n,\"touchcancel\",this.reset)};function Oi(e,r,n){if(e\u003dnew t.LngLat(e.lng,e.lat),r){var i\u003dnew t.LngLat(e.lng-360,e.lat),a\u003dnew t.LngLat(e.lng+360,e.lat),o\u003dn.locationPoint(e).distSqr(r);n.locationPoint(i).distSqr(r)\u003co?e\u003di:n.locationPoint(a).distSqr(r)\u003co\u0026\u0026(e\u003da)}for(;Math.abs(e.lng-n.center.lng)\u003e180;){var s\u003dn.locationPoint(e);if(s.x\u003e\u003d0\u0026\u0026s.y\u003e\u003d0\u0026\u0026s.x\u003c\u003dn.width\u0026\u0026s.y\u003c\u003dn.height)break;e.lng\u003en.center.lng?e.lng-\u003d360:e.lng+\u003d360}return e}Ii.prototype.down\u003dfunction(t,e){this.mouseRotate.mousedown(t,e),this.mousePitch\u0026\u0026this.mousePitch.mousedown(t,e),r.disableDrag()},Ii.prototype.move\u003dfunction(t,e){var r\u003dthis.map,n\u003dthis.mouseRotate.mousemoveWindow(t,e);if(n\u0026\u0026n.bearingDelta\u0026\u0026r.setBearing(r.getBearing()+n.bearingDelta),this.mousePitch){var i\u003dthis.mousePitch.mousemoveWindow(t,e);i\u0026\u0026i.pitchDelta\u0026\u0026r.setPitch(r.getPitch()+i.pitchDelta)}},Ii.prototype.off\u003dfunction(){var t\u003dthis.element;r.removeEventListener(t,\"mousedown\",this.mousedown),r.removeEventListener(t,\"touchstart\",this.touchstart,{passive:!1}),r.removeEventListener(t,\"touchmove\",this.touchmove),r.removeEventListener(t,\"touchend\",this.touchend),r.removeEventListener(t,\"touchcancel\",this.reset),this.offTemp()},Ii.prototype.offTemp\u003dfunction(){r.enableDrag(),r.removeEventListener(t.window,\"mousemove\",this.mousemove),r.removeEventListener(t.window,\"mouseup\",this.mouseup)},Ii.prototype.mousedown\u003dfunction(e){this.down(t.extend({},e,{ctrlKey:!0,preventDefault:function(){return e.preventDefault()}}),r.mousePos(this.element,e)),r.addEventListener(t.window,\"mousemove\",this.mousemove),r.addEventListener(t.window,\"mouseup\",this.mouseup)},Ii.prototype.mousemove\u003dfunction(t){this.move(t,r.mousePos(this.element,t))},Ii.prototype.mouseup\u003dfunction(t){this.mouseRotate.mouseupWindow(t),this.mousePitch\u0026\u0026this.mousePitch.mouseupWindow(t),this.offTemp()},Ii.prototype.touchstart\u003dfunction(t){1!\u003d\u003dt.targetTouches.length?this.reset():(this._startPos\u003dthis._lastPos\u003dr.touchPos(this.element,t.targetTouches)[0],this.down({type:\"mousedown\",button:0,ctrlKey:!0,preventDefault:function(){return t.preventDefault()}},this._startPos))},Ii.prototype.touchmove\u003dfunction(t){1!\u003d\u003dt.targetTouches.length?this.reset():(this._lastPos\u003dr.touchPos(this.element,t.targetTouches)[0],this.move({preventDefault:function(){return t.preventDefault()}},this._lastPos))},Ii.prototype.touchend\u003dfunction(t){0\u003d\u003d\u003dt.targetTouches.length\u0026\u0026this._startPos\u0026\u0026this._lastPos\u0026\u0026this._startPos.dist(this._lastPos)\u003cthis._clickTolerance\u0026\u0026this.element.click(),this.reset()},Ii.prototype.reset\u003dfunction(){this.mouseRotate.reset(),this.mousePitch\u0026\u0026this.mousePitch.reset(),delete this._startPos,delete this._lastPos,this.offTemp()};var zi\u003d{center:\"translate(-50%,-50%)\",top:\"translate(-50%,0)\",\"top-left\":\"translate(0,0)\",\"top-right\":\"translate(-100%,0)\",bottom:\"translate(-50%,-100%)\",\"bottom-left\":\"translate(0,-100%)\",\"bottom-right\":\"translate(-100%,-100%)\",left:\"translate(0,-50%)\",right:\"translate(-100%,-50%)\"};function Di(t,e,r){var n\u003dt.classList;for(var i in zi)n.remove(\"mapboxgl-\"+r+\"-anchor-\"+i);n.add(\"mapboxgl-\"+r+\"-anchor-\"+e)}var Ri,Fi\u003dfunction(e){function n(n,i){var a\u003dthis;if(e.call(this),(n instanceof t.window.HTMLElement||i)\u0026\u0026(n\u003dt.extend({element:n},i)),t.bindAll([\"_update\",\"_onMove\",\"_onUp\",\"_addDragHandler\",\"_onMapClick\",\"_onKeyPress\"],this),this._anchor\u003dn\u0026\u0026n.anchor||\"center\",this._color\u003dn\u0026\u0026n.color||\"#3FB1CE\",this._draggable\u003dn\u0026\u0026n.draggable||!1,this._state\u003d\"inactive\",this._rotation\u003dn\u0026\u0026n.rotation||0,this._rotationAlignment\u003dn\u0026\u0026n.rotationAlignment||\"auto\",this._pitchAlignment\u003dn\u0026\u0026n.pitchAlignment\u0026\u0026\"auto\"!\u003d\u003dn.pitchAlignment?n.pitchAlignment:this._rotationAlignment,n\u0026\u0026n.element)this._element\u003dn.element,this._offset\u003dt.Point.convert(n\u0026\u0026n.offset||[0,0]);else{this._defaultMarker\u003d!0,this._element\u003dr.create(\"div\"),this._element.setAttribute(\"aria-label\",\"Map marker\");var o\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"svg\");o.setAttributeNS(null,\"display\",\"block\"),o.setAttributeNS(null,\"height\",\"41px\"),o.setAttributeNS(null,\"width\",\"27px\"),o.setAttributeNS(null,\"viewBox\",\"0 0 27 41\");var s\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"g\");s.setAttributeNS(null,\"stroke\",\"none\"),s.setAttributeNS(null,\"stroke-width\",\"1\"),s.setAttributeNS(null,\"fill\",\"none\"),s.setAttributeNS(null,\"fill-rule\",\"evenodd\");var l\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"g\");l.setAttributeNS(null,\"fill-rule\",\"nonzero\");var c\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"g\");c.setAttributeNS(null,\"transform\",\"translate(3.0, 29.0)\"),c.setAttributeNS(null,\"fill\",\"#000000\");for(var u\u003d0,f\u003d[{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"10.5\",ry:\"5.25002273\"},{rx:\"9.5\",ry:\"4.77275007\"},{rx:\"8.5\",ry:\"4.29549936\"},{rx:\"7.5\",ry:\"3.81822308\"},{rx:\"6.5\",ry:\"3.34094679\"},{rx:\"5.5\",ry:\"2.86367051\"},{rx:\"4.5\",ry:\"2.38636864\"}];u\u003cf.length;u+\u003d1){var h\u003df[u],p\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"ellipse\");p.setAttributeNS(null,\"opacity\",\"0.04\"),p.setAttributeNS(null,\"cx\",\"10.5\"),p.setAttributeNS(null,\"cy\",\"5.80029008\"),p.setAttributeNS(null,\"rx\",h.rx),p.setAttributeNS(null,\"ry\",h.ry),c.appendChild(p)}var d\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"g\");d.setAttributeNS(null,\"fill\",this._color);var m\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"path\");m.setAttributeNS(null,\"d\",\"M27,13.5 C27,19.074644 20.250001,27.000002 14.75,34.500002 C14.016665,35.500004 12.983335,35.500004 12.25,34.500002 C6.7499993,27.000002 0,19.222562 0,13.5 C0,6.0441559 6.0441559,0 13.5,0 C20.955844,0 27,6.0441559 27,13.5 Z\"),d.appendChild(m);var g\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"g\");g.setAttributeNS(null,\"opacity\",\"0.25\"),g.setAttributeNS(null,\"fill\",\"#000000\");var v\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"path\");v.setAttributeNS(null,\"d\",\"M13.5,0 C6.0441559,0 0,6.0441559 0,13.5 C0,19.222562 6.7499993,27 12.25,34.5 C13,35.522727 14.016664,35.500004 14.75,34.5 C20.250001,27 27,19.074644 27,13.5 C27,6.0441559 20.955844,0 13.5,0 Z M13.5,1 C20.415404,1 26,6.584596 26,13.5 C26,15.898657 24.495584,19.181431 22.220703,22.738281 C19.945823,26.295132 16.705119,30.142167 13.943359,33.908203 C13.743445,34.180814 13.612715,34.322738 13.5,34.441406 C13.387285,34.322738 13.256555,34.180814 13.056641,33.908203 C10.284481,30.127985 7.4148684,26.314159 5.015625,22.773438 C2.6163816,19.232715 1,15.953538 1,13.5 C1,6.584596 6.584596,1 13.5,1 Z\"),g.appendChild(v);var y\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"g\");y.setAttributeNS(null,\"transform\",\"translate(6.0, 7.0)\"),y.setAttributeNS(null,\"fill\",\"#FFFFFF\");var x\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"g\");x.setAttributeNS(null,\"transform\",\"translate(8.0, 8.0)\");var b\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"circle\");b.setAttributeNS(null,\"fill\",\"#000000\"),b.setAttributeNS(null,\"opacity\",\"0.25\"),b.setAttributeNS(null,\"cx\",\"5.5\"),b.setAttributeNS(null,\"cy\",\"5.5\"),b.setAttributeNS(null,\"r\",\"5.4999962\");var _\u003dr.createNS(\"http://www.w3.org/2000/svg\",\"circle\");_.setAttributeNS(null,\"fill\",\"#FFFFFF\"),_.setAttributeNS(null,\"cx\",\"5.5\"),_.setAttributeNS(null,\"cy\",\"5.5\"),_.setAttributeNS(null,\"r\",\"5.4999962\"),x.appendChild(b),x.appendChild(_),l.appendChild(c),l.appendChild(d),l.appendChild(g),l.appendChild(y),l.appendChild(x),o.appendChild(l),this._element.appendChild(o),this._offset\u003dt.Point.convert(n\u0026\u0026n.offset||[0,-14])}this._element.classList.add(\"mapboxgl-marker\"),this._element.addEventListener(\"dragstart\",(function(t){t.preventDefault()})),this._element.addEventListener(\"mousedown\",(function(t){t.preventDefault()})),this._element.addEventListener(\"focus\",(function(){var t\u003da._map.getContainer();t.scrollTop\u003d0,t.scrollLeft\u003d0})),Di(this._element,this._anchor,\"marker\"),this._popup\u003dnull}return e\u0026\u0026(n.__proto__\u003de),n.prototype\u003dObject.create(e\u0026\u0026e.prototype),n.prototype.constructor\u003dn,n.prototype.addTo\u003dfunction(t){return this.remove(),this._map\u003dt,t.getCanvasContainer().appendChild(this._element),t.on(\"move\",this._update),t.on(\"moveend\",this._update),this.setDraggable(this._draggable),this._update(),this._map.on(\"click\",this._onMapClick),this},n.prototype.remove\u003dfunction(){return this._map\u0026\u0026(this._map.off(\"click\",this._onMapClick),this._map.off(\"move\",this._update),this._map.off(\"moveend\",this._update),this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler),this._map.off(\"mouseup\",this._onUp),this._map.off(\"touchend\",this._onUp),this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),delete this._map),r.remove(this._element),this._popup\u0026\u0026this._popup.remove(),this},n.prototype.getLngLat\u003dfunction(){return this._lngLat},n.prototype.setLngLat\u003dfunction(e){return this._lngLat\u003dt.LngLat.convert(e),this._pos\u003dnull,this._popup\u0026\u0026this._popup.setLngLat(this._lngLat),this._update(),this},n.prototype.getElement\u003dfunction(){return this._element},n.prototype.setPopup\u003dfunction(t){if(this._popup\u0026\u0026(this._popup.remove(),this._popup\u003dnull,this._element.removeEventListener(\"keypress\",this._onKeyPress),this._originalTabIndex||this._element.removeAttribute(\"tabindex\")),t){if(!(\"offset\"in t.options)){var e\u003dMath.sqrt(Math.pow(13.5,2)/2);t.options.offset\u003dthis._defaultMarker?{top:[0,0],\"top-left\":[0,0],\"top-right\":[0,0],bottom:[0,-38.1],\"bottom-left\":[e,-1*(24.6+e)],\"bottom-right\":[-e,-1*(24.6+e)],left:[13.5,-24.6],right:[-13.5,-24.6]}:this._offset}this._popup\u003dt,this._lngLat\u0026\u0026this._popup.setLngLat(this._lngLat),this._originalTabIndex\u003dthis._element.getAttribute(\"tabindex\"),this._originalTabIndex||this._element.setAttribute(\"tabindex\",\"0\"),this._element.addEventListener(\"keypress\",this._onKeyPress)}return this},n.prototype._onKeyPress\u003dfunction(t){var e\u003dt.code,r\u003dt.charCode||t.keyCode;\"Space\"!\u003d\u003de\u0026\u0026\"Enter\"!\u003d\u003de\u0026\u002632!\u003d\u003dr\u0026\u002613!\u003d\u003dr||this.togglePopup()},n.prototype._onMapClick\u003dfunction(t){var e\u003dt.originalEvent.target,r\u003dthis._element;this._popup\u0026\u0026(e\u003d\u003d\u003dr||r.contains(e))\u0026\u0026this.togglePopup()},n.prototype.getPopup\u003dfunction(){return this._popup},n.prototype.togglePopup\u003dfunction(){var t\u003dthis._popup;return t?(t.isOpen()?t.remove():t.addTo(this._map),this):this},n.prototype._update\u003dfunction(t){if(this._map){this._map.transform.renderWorldCopies\u0026\u0026(this._lngLat\u003dOi(this._lngLat,this._pos,this._map.transform)),this._pos\u003dthis._map.project(this._lngLat)._add(this._offset);var e\u003d\"\";\"viewport\"\u003d\u003d\u003dthis._rotationAlignment||\"auto\"\u003d\u003d\u003dthis._rotationAlignment?e\u003d\"rotateZ(\"+this._rotation+\"deg)\":\"map\"\u003d\u003d\u003dthis._rotationAlignment\u0026\u0026(e\u003d\"rotateZ(\"+(this._rotation-this._map.getBearing())+\"deg)\");var n\u003d\"\";\"viewport\"\u003d\u003d\u003dthis._pitchAlignment||\"auto\"\u003d\u003d\u003dthis._pitchAlignment?n\u003d\"rotateX(0deg)\":\"map\"\u003d\u003d\u003dthis._pitchAlignment\u0026\u0026(n\u003d\"rotateX(\"+this._map.getPitch()+\"deg)\"),t\u0026\u0026\"moveend\"!\u003d\u003dt.type||(this._pos\u003dthis._pos.round()),r.setTransform(this._element,zi[this._anchor]+\" translate(\"+this._pos.x+\"px, \"+this._pos.y+\"px) \"+n+\" \"+e)}},n.prototype.getOffset\u003dfunction(){return this._offset},n.prototype.setOffset\u003dfunction(e){return this._offset\u003dt.Point.convert(e),this._update(),this},n.prototype._onMove\u003dfunction(e){this._pos\u003de.point.sub(this._positionDelta),this._lngLat\u003dthis._map.unproject(this._pos),this.setLngLat(this._lngLat),this._element.style.pointerEvents\u003d\"none\",\"pending\"\u003d\u003d\u003dthis._state\u0026\u0026(this._state\u003d\"active\",this.fire(new t.Event(\"dragstart\"))),this.fire(new t.Event(\"drag\"))},n.prototype._onUp\u003dfunction(){this._element.style.pointerEvents\u003d\"auto\",this._positionDelta\u003dnull,this._map.off(\"mousemove\",this._onMove),this._map.off(\"touchmove\",this._onMove),\"active\"\u003d\u003d\u003dthis._state\u0026\u0026this.fire(new t.Event(\"dragend\")),this._state\u003d\"inactive\"},n.prototype._addDragHandler\u003dfunction(t){this._element.contains(t.originalEvent.target)\u0026\u0026(t.preventDefault(),this._positionDelta\u003dt.point.sub(this._pos).add(this._offset),this._state\u003d\"pending\",this._map.on(\"mousemove\",this._onMove),this._map.on(\"touchmove\",this._onMove),this._map.once(\"mouseup\",this._onUp),this._map.once(\"touchend\",this._onUp))},n.prototype.setDraggable\u003dfunction(t){return this._draggable\u003d!!t,this._map\u0026\u0026(t?(this._map.on(\"mousedown\",this._addDragHandler),this._map.on(\"touchstart\",this._addDragHandler)):(this._map.off(\"mousedown\",this._addDragHandler),this._map.off(\"touchstart\",this._addDragHandler))),this},n.prototype.isDraggable\u003dfunction(){return this._draggable},n.prototype.setRotation\u003dfunction(t){return this._rotation\u003dt||0,this._update(),this},n.prototype.getRotation\u003dfunction(){return this._rotation},n.prototype.setRotationAlignment\u003dfunction(t){return this._rotationAlignment\u003dt||\"auto\",this._update(),this},n.prototype.getRotationAlignment\u003dfunction(){return this._rotationAlignment},n.prototype.setPitchAlignment\u003dfunction(t){return this._pitchAlignment\u003dt\u0026\u0026\"auto\"!\u003d\u003dt?t:this._rotationAlignment,this._update(),this},n.prototype.getPitchAlignment\u003dfunction(){return this._pitchAlignment},n}(t.Evented),Bi\u003d{positionOptions:{enableHighAccuracy:!1,maximumAge:0,timeout:6e3},fitBoundsOptions:{maxZoom:15},trackUserLocation:!1,showAccuracyCircle:!0,showUserLocation:!0};var Ni\u003d0,ji\u003d!1,Ui\u003dfunction(e){function n(r){e.call(this),this.options\u003dt.extend({},Bi,r),t.bindAll([\"_onSuccess\",\"_onError\",\"_onZoom\",\"_finish\",\"_setupUI\",\"_updateCamera\",\"_updateMarker\"],this)}return e\u0026\u0026(n.__proto__\u003de),n.prototype\u003dObject.create(e\u0026\u0026e.prototype),n.prototype.constructor\u003dn,n.prototype.onAdd\u003dfunction(e){var n;return this._map\u003de,this._container\u003dr.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),n\u003dthis._setupUI,void 0!\u003d\u003dRi?n(Ri):void 0!\u003d\u003dt.window.navigator.permissions?t.window.navigator.permissions.query({name:\"geolocation\"}).then((function(t){Ri\u003d\"denied\"!\u003d\u003dt.state,n(Ri)})):(Ri\u003d!!t.window.navigator.geolocation,n(Ri)),this._container},n.prototype.onRemove\u003dfunction(){void 0!\u003d\u003dthis._geolocationWatchID\u0026\u0026(t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID\u003dvoid 0),this.options.showUserLocation\u0026\u0026this._userLocationDotMarker\u0026\u0026this._userLocationDotMarker.remove(),this.options.showAccuracyCircle\u0026\u0026this._accuracyCircleMarker\u0026\u0026this._accuracyCircleMarker.remove(),r.remove(this._container),this._map.off(\"zoom\",this._onZoom),this._map\u003dvoid 0,Ni\u003d0,ji\u003d!1},n.prototype._isOutOfMapMaxBounds\u003dfunction(t){var e\u003dthis._map.getMaxBounds(),r\u003dt.coords;return e\u0026\u0026(r.longitude\u003ce.getWest()||r.longitude\u003ee.getEast()||r.latitude\u003ce.getSouth()||r.latitude\u003ee.getNorth())},n.prototype._setErrorState\u003dfunction(){switch(this._watchState){case\"WAITING_ACTIVE\":this._watchState\u003d\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"ACTIVE_LOCK\":this._watchState\u003d\"ACTIVE_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\");break;case\"BACKGROUND\":this._watchState\u003d\"BACKGROUND_ERROR\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\")}},n.prototype._onSuccess\u003dfunction(e){if(this._map){if(this._isOutOfMapMaxBounds(e))return this._setErrorState(),this.fire(new t.Event(\"outofmaxbounds\",e)),this._updateMarker(),void this._finish();if(this.options.trackUserLocation)switch(this._lastKnownPosition\u003de,this._watchState){case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":this._watchState\u003d\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"BACKGROUND\":case\"BACKGROUND_ERROR\":this._watchState\u003d\"BACKGROUND\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\")}this.options.showUserLocation\u0026\u0026\"OFF\"!\u003d\u003dthis._watchState\u0026\u0026this._updateMarker(e),this.options.trackUserLocation\u0026\u0026\"ACTIVE_LOCK\"!\u003d\u003dthis._watchState||this._updateCamera(e),this.options.showUserLocation\u0026\u0026this._dotElement.classList.remove(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"geolocate\",e)),this._finish()}},n.prototype._updateCamera\u003dfunction(e){var r\u003dnew t.LngLat(e.coords.longitude,e.coords.latitude),n\u003de.coords.accuracy,i\u003dthis._map.getBearing(),a\u003dt.extend({bearing:i},this.options.fitBoundsOptions);this._map.fitBounds(r.toBounds(n),a,{geolocateSource:!0})},n.prototype._updateMarker\u003dfunction(e){if(e){var r\u003dnew t.LngLat(e.coords.longitude,e.coords.latitude);this._accuracyCircleMarker.setLngLat(r).addTo(this._map),this._userLocationDotMarker.setLngLat(r).addTo(this._map),this._accuracy\u003de.coords.accuracy,this.options.showUserLocation\u0026\u0026this.options.showAccuracyCircle\u0026\u0026this._updateCircleRadius()}else this._userLocationDotMarker.remove(),this._accuracyCircleMarker.remove()},n.prototype._updateCircleRadius\u003dfunction(){var t\u003dthis._map._container.clientHeight/2,e\u003dthis._map.unproject([0,t]),r\u003dthis._map.unproject([1,t]),n\u003de.distanceTo(r),i\u003dMath.ceil(2*this._accuracy/n);this._circleElement.style.width\u003di+\"px\",this._circleElement.style.height\u003di+\"px\"},n.prototype._onZoom\u003dfunction(){this.options.showUserLocation\u0026\u0026this.options.showAccuracyCircle\u0026\u0026this._updateCircleRadius()},n.prototype._onError\u003dfunction(e){if(this._map){if(this.options.trackUserLocation)if(1\u003d\u003d\u003de.code){this._watchState\u003d\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this._geolocateButton.disabled\u003d!0;var r\u003dthis._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.title\u003dr,this._geolocateButton.setAttribute(\"aria-label\",r),void 0!\u003d\u003dthis._geolocationWatchID\u0026\u0026this._clearWatch()}else{if(3\u003d\u003d\u003de.code\u0026\u0026ji)return;this._setErrorState()}\"OFF\"!\u003d\u003dthis._watchState\u0026\u0026this.options.showUserLocation\u0026\u0026this._dotElement.classList.add(\"mapboxgl-user-location-dot-stale\"),this.fire(new t.Event(\"error\",e)),this._finish()}},n.prototype._finish\u003dfunction(){this._timeoutId\u0026\u0026clearTimeout(this._timeoutId),this._timeoutId\u003dvoid 0},n.prototype._setupUI\u003dfunction(e){var n\u003dthis;if(this._container.addEventListener(\"contextmenu\",(function(t){return t.preventDefault()})),this._geolocateButton\u003dr.create(\"button\",\"mapboxgl-ctrl-geolocate\",this._container),r.create(\"span\",\"mapboxgl-ctrl-icon\",this._geolocateButton).setAttribute(\"aria-hidden\",!0),this._geolocateButton.type\u003d\"button\",!1\u003d\u003d\u003de){t.warnOnce(\"Geolocation support is not available so the GeolocateControl will be disabled.\");var i\u003dthis._map._getUIString(\"GeolocateControl.LocationNotAvailable\");this._geolocateButton.disabled\u003d!0,this._geolocateButton.title\u003di,this._geolocateButton.setAttribute(\"aria-label\",i)}else{var a\u003dthis._map._getUIString(\"GeolocateControl.FindMyLocation\");this._geolocateButton.title\u003da,this._geolocateButton.setAttribute(\"aria-label\",a)}this.options.trackUserLocation\u0026\u0026(this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this._watchState\u003d\"OFF\"),this.options.showUserLocation\u0026\u0026(this._dotElement\u003dr.create(\"div\",\"mapboxgl-user-location-dot\"),this._userLocationDotMarker\u003dnew Fi(this._dotElement),this._circleElement\u003dr.create(\"div\",\"mapboxgl-user-location-accuracy-circle\"),this._accuracyCircleMarker\u003dnew Fi({element:this._circleElement,pitchAlignment:\"map\"}),this.options.trackUserLocation\u0026\u0026(this._watchState\u003d\"OFF\"),this._map.on(\"zoom\",this._onZoom)),this._geolocateButton.addEventListener(\"click\",this.trigger.bind(this)),this._setup\u003d!0,this.options.trackUserLocation\u0026\u0026this._map.on(\"movestart\",(function(e){var r\u003de.originalEvent\u0026\u0026\"resize\"\u003d\u003d\u003de.originalEvent.type;e.geolocateSource||\"ACTIVE_LOCK\"!\u003d\u003dn._watchState||r||(n._watchState\u003d\"BACKGROUND\",n._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\"),n._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),n.fire(new t.Event(\"trackuserlocationend\")))}))},n.prototype.trigger\u003dfunction(){if(!this._setup)return t.warnOnce(\"Geolocate control triggered before added to a map\"),!1;if(this.options.trackUserLocation){switch(this._watchState){case\"OFF\":this._watchState\u003d\"WAITING_ACTIVE\",this.fire(new t.Event(\"trackuserlocationstart\"));break;case\"WAITING_ACTIVE\":case\"ACTIVE_LOCK\":case\"ACTIVE_ERROR\":case\"BACKGROUND_ERROR\":Ni--,ji\u003d!1,this._watchState\u003d\"OFF\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-active-error\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background-error\"),this.fire(new t.Event(\"trackuserlocationend\"));break;case\"BACKGROUND\":this._watchState\u003d\"ACTIVE_LOCK\",this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-background\"),this._lastKnownPosition\u0026\u0026this._updateCamera(this._lastKnownPosition),this.fire(new t.Event(\"trackuserlocationstart\"))}switch(this._watchState){case\"WAITING_ACTIVE\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_LOCK\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active\");break;case\"ACTIVE_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-active-error\");break;case\"BACKGROUND\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background\");break;case\"BACKGROUND_ERROR\":this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-background-error\")}if(\"OFF\"\u003d\u003d\u003dthis._watchState\u0026\u0026void 0!\u003d\u003dthis._geolocationWatchID)this._clearWatch();else if(void 0\u003d\u003d\u003dthis._geolocationWatchID){var e;this._geolocateButton.classList.add(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"true\"),++Ni\u003e1?(e\u003d{maximumAge:6e5,timeout:0},ji\u003d!0):(e\u003dthis.options.positionOptions,ji\u003d!1),this._geolocationWatchID\u003dt.window.navigator.geolocation.watchPosition(this._onSuccess,this._onError,e)}}else t.window.navigator.geolocation.getCurrentPosition(this._onSuccess,this._onError,this.options.positionOptions),this._timeoutId\u003dsetTimeout(this._finish,1e4);return!0},n.prototype._clearWatch\u003dfunction(){t.window.navigator.geolocation.clearWatch(this._geolocationWatchID),this._geolocationWatchID\u003dvoid 0,this._geolocateButton.classList.remove(\"mapboxgl-ctrl-geolocate-waiting\"),this._geolocateButton.setAttribute(\"aria-pressed\",\"false\"),this.options.showUserLocation\u0026\u0026this._updateMarker(null)},n}(t.Evented),Vi\u003d{maxWidth:100,unit:\"metric\"},qi\u003dfunction(e){this.options\u003dt.extend({},Vi,e),t.bindAll([\"_onMove\",\"setUnit\"],this)};function Hi(t,e,r){var n\u003dr\u0026\u0026r.maxWidth||100,i\u003dt._container.clientHeight/2,a\u003dt.unproject([0,i]),o\u003dt.unproject([n,i]),s\u003da.distanceTo(o);if(r\u0026\u0026\"imperial\"\u003d\u003d\u003dr.unit){var l\u003d3.2808*s;if(l\u003e5280)Gi(e,n,l/5280,t._getUIString(\"ScaleControl.Miles\"));else Gi(e,n,l,t._getUIString(\"ScaleControl.Feet\"))}else if(r\u0026\u0026\"nautical\"\u003d\u003d\u003dr.unit){Gi(e,n,s/1852,t._getUIString(\"ScaleControl.NauticalMiles\"))}else s\u003e\u003d1e3?Gi(e,n,s/1e3,t._getUIString(\"ScaleControl.Kilometers\")):Gi(e,n,s,t._getUIString(\"ScaleControl.Meters\"))}function Gi(t,e,r,n){var i,a,o,s\u003d(i\u003dr,a\u003dMath.pow(10,(\"\"+Math.floor(i)).length-1),o\u003d(o\u003di/a)\u003e\u003d10?10:o\u003e\u003d5?5:o\u003e\u003d3?3:o\u003e\u003d2?2:o\u003e\u003d1?1:function(t){var e\u003dMath.pow(10,Math.ceil(-Math.log(t)/Math.LN10));return Math.round(t*e)/e}(o),a*o),l\u003ds/r;t.style.width\u003de*l+\"px\",t.innerHTML\u003ds+\"\u0026nbsp;\"+n}qi.prototype.getDefaultPosition\u003dfunction(){return\"bottom-left\"},qi.prototype._onMove\u003dfunction(){Hi(this._map,this._container,this.options)},qi.prototype.onAdd\u003dfunction(t){return this._map\u003dt,this._container\u003dr.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-scale\",t.getContainer()),this._map.on(\"move\",this._onMove),this._onMove(),this._container},qi.prototype.onRemove\u003dfunction(){r.remove(this._container),this._map.off(\"move\",this._onMove),this._map\u003dvoid 0},qi.prototype.setUnit\u003dfunction(t){this.options.unit\u003dt,Hi(this._map,this._container,this.options)};var Yi\u003dfunction(e){this._fullscreen\u003d!1,e\u0026\u0026e.container\u0026\u0026(e.container instanceof t.window.HTMLElement?this._container\u003de.container:t.warnOnce(\"Full screen control \u0027container\u0027 must be a DOM element.\")),t.bindAll([\"_onClickFullscreen\",\"_changeIcon\"],this),\"onfullscreenchange\"in t.window.document?this._fullscreenchange\u003d\"fullscreenchange\":\"onmozfullscreenchange\"in t.window.document?this._fullscreenchange\u003d\"mozfullscreenchange\":\"onwebkitfullscreenchange\"in t.window.document?this._fullscreenchange\u003d\"webkitfullscreenchange\":\"onmsfullscreenchange\"in t.window.document\u0026\u0026(this._fullscreenchange\u003d\"MSFullscreenChange\")};Yi.prototype.onAdd\u003dfunction(e){return this._map\u003de,this._container||(this._container\u003dthis._map.getContainer()),this._controlContainer\u003dr.create(\"div\",\"mapboxgl-ctrl mapboxgl-ctrl-group\"),this._checkFullscreenSupport()?this._setupUI():(this._controlContainer.style.display\u003d\"none\",t.warnOnce(\"This device does not support fullscreen mode.\")),this._controlContainer},Yi.prototype.onRemove\u003dfunction(){r.remove(this._controlContainer),this._map\u003dnull,t.window.document.removeEventListener(this._fullscreenchange,this._changeIcon)},Yi.prototype._checkFullscreenSupport\u003dfunction(){return!!(t.window.document.fullscreenEnabled||t.window.document.mozFullScreenEnabled||t.window.document.msFullscreenEnabled||t.window.document.webkitFullscreenEnabled)},Yi.prototype._setupUI\u003dfunction(){var e\u003dthis._fullscreenButton\u003dr.create(\"button\",\"mapboxgl-ctrl-fullscreen\",this._controlContainer);r.create(\"span\",\"mapboxgl-ctrl-icon\",e).setAttribute(\"aria-hidden\",!0),e.type\u003d\"button\",this._updateTitle(),this._fullscreenButton.addEventListener(\"click\",this._onClickFullscreen),t.window.document.addEventListener(this._fullscreenchange,this._changeIcon)},Yi.prototype._updateTitle\u003dfunction(){var t\u003dthis._getTitle();this._fullscreenButton.setAttribute(\"aria-label\",t),this._fullscreenButton.title\u003dt},Yi.prototype._getTitle\u003dfunction(){return this._map._getUIString(this._isFullscreen()?\"FullscreenControl.Exit\":\"FullscreenControl.Enter\")},Yi.prototype._isFullscreen\u003dfunction(){return this._fullscreen},Yi.prototype._changeIcon\u003dfunction(){(t.window.document.fullscreenElement||t.window.document.mozFullScreenElement||t.window.document.webkitFullscreenElement||t.window.document.msFullscreenElement)\u003d\u003d\u003dthis._container!\u003d\u003dthis._fullscreen\u0026\u0026(this._fullscreen\u003d!this._fullscreen,this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-shrink\"),this._fullscreenButton.classList.toggle(\"mapboxgl-ctrl-fullscreen\"),this._updateTitle())},Yi.prototype._onClickFullscreen\u003dfunction(){this._isFullscreen()?t.window.document.exitFullscreen?t.window.document.exitFullscreen():t.window.document.mozCancelFullScreen?t.window.document.mozCancelFullScreen():t.window.document.msExitFullscreen?t.window.document.msExitFullscreen():t.window.document.webkitCancelFullScreen\u0026\u0026t.window.document.webkitCancelFullScreen():this._container.requestFullscreen?this._container.requestFullscreen():this._container.mozRequestFullScreen?this._container.mozRequestFullScreen():this._container.msRequestFullscreen?this._container.msRequestFullscreen():this._container.webkitRequestFullscreen\u0026\u0026this._container.webkitRequestFullscreen()};var Wi\u003d{closeButton:!0,closeOnClick:!0,className:\"\",maxWidth:\"240px\"},Xi\u003dfunction(e){function n(r){e.call(this),this.options\u003dt.extend(Object.create(Wi),r),t.bindAll([\"_update\",\"_onClose\",\"remove\",\"_onMouseMove\",\"_onMouseUp\",\"_onDrag\"],this)}return e\u0026\u0026(n.__proto__\u003de),n.prototype\u003dObject.create(e\u0026\u0026e.prototype),n.prototype.constructor\u003dn,n.prototype.addTo\u003dfunction(e){return this._map\u0026\u0026this.remove(),this._map\u003de,this.options.closeOnClick\u0026\u0026this._map.on(\"click\",this._onClose),this.options.closeOnMove\u0026\u0026this._map.on(\"move\",this._onClose),this._map.on(\"remove\",this.remove),this._update(),this._trackPointer?(this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"mouseup\",this._onMouseUp),this._container\u0026\u0026this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")):this._map.on(\"move\",this._update),this.fire(new t.Event(\"open\")),this},n.prototype.isOpen\u003dfunction(){return!!this._map},n.prototype.remove\u003dfunction(){return this._content\u0026\u0026r.remove(this._content),this._container\u0026\u0026(r.remove(this._container),delete this._container),this._map\u0026\u0026(this._map.off(\"move\",this._update),this._map.off(\"move\",this._onClose),this._map.off(\"click\",this._onClose),this._map.off(\"remove\",this.remove),this._map.off(\"mousemove\",this._onMouseMove),this._map.off(\"mouseup\",this._onMouseUp),this._map.off(\"drag\",this._onDrag),delete this._map),this.fire(new t.Event(\"close\")),this},n.prototype.getLngLat\u003dfunction(){return this._lngLat},n.prototype.setLngLat\u003dfunction(e){return this._lngLat\u003dt.LngLat.convert(e),this._pos\u003dnull,this._trackPointer\u003d!1,this._update(),this._map\u0026\u0026(this._map.on(\"move\",this._update),this._map.off(\"mousemove\",this._onMouseMove),this._container\u0026\u0026this._container.classList.remove(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.remove(\"mapboxgl-track-pointer\")),this},n.prototype.trackPointer\u003dfunction(){return this._trackPointer\u003d!0,this._pos\u003dnull,this._update(),this._map\u0026\u0026(this._map.off(\"move\",this._update),this._map.on(\"mousemove\",this._onMouseMove),this._map.on(\"drag\",this._onDrag),this._container\u0026\u0026this._container.classList.add(\"mapboxgl-popup-track-pointer\"),this._map._canvasContainer.classList.add(\"mapboxgl-track-pointer\")),this},n.prototype.getElement\u003dfunction(){return this._container},n.prototype.setText\u003dfunction(e){return this.setDOMContent(t.window.document.createTextNode(e))},n.prototype.setHTML\u003dfunction(e){var r,n\u003dt.window.document.createDocumentFragment(),i\u003dt.window.document.createElement(\"body\");for(i.innerHTML\u003de;r\u003di.firstChild;)n.appendChild(r);return this.setDOMContent(n)},n.prototype.getMaxWidth\u003dfunction(){return this._container\u0026\u0026this._container.style.maxWidth},n.prototype.setMaxWidth\u003dfunction(t){return this.options.maxWidth\u003dt,this._update(),this},n.prototype.setDOMContent\u003dfunction(t){return this._createContent(),this._content.appendChild(t),this._update(),this},n.prototype.addClassName\u003dfunction(t){this._container\u0026\u0026this._container.classList.add(t)},n.prototype.removeClassName\u003dfunction(t){this._container\u0026\u0026this._container.classList.remove(t)},n.prototype.toggleClassName\u003dfunction(t){if(this._container)return this._container.classList.toggle(t)},n.prototype._createContent\u003dfunction(){this._content\u0026\u0026r.remove(this._content),this._content\u003dr.create(\"div\",\"mapboxgl-popup-content\",this._container),this.options.closeButton\u0026\u0026(this._closeButton\u003dr.create(\"button\",\"mapboxgl-popup-close-button\",this._content),this._closeButton.type\u003d\"button\",this._closeButton.setAttribute(\"aria-label\",\"Close popup\"),this._closeButton.innerHTML\u003d\"\u0026#215;\",this._closeButton.addEventListener(\"click\",this._onClose))},n.prototype._onMouseUp\u003dfunction(t){this._update(t.point)},n.prototype._onMouseMove\u003dfunction(t){this._update(t.point)},n.prototype._onDrag\u003dfunction(t){this._update(t.point)},n.prototype._update\u003dfunction(e){var n\u003dthis,i\u003dthis._lngLat||this._trackPointer;if(this._map\u0026\u0026i\u0026\u0026this._content\u0026\u0026(this._container||(this._container\u003dr.create(\"div\",\"mapboxgl-popup\",this._map.getContainer()),this._tip\u003dr.create(\"div\",\"mapboxgl-popup-tip\",this._container),this._container.appendChild(this._content),this.options.className\u0026\u0026this.options.className.split(\" \").forEach((function(t){return n._container.classList.add(t)})),this._trackPointer\u0026\u0026this._container.classList.add(\"mapboxgl-popup-track-pointer\")),this.options.maxWidth\u0026\u0026this._container.style.maxWidth!\u003d\u003dthis.options.maxWidth\u0026\u0026(this._container.style.maxWidth\u003dthis.options.maxWidth),this._map.transform.renderWorldCopies\u0026\u0026!this._trackPointer\u0026\u0026(this._lngLat\u003dOi(this._lngLat,this._pos,this._map.transform)),!this._trackPointer||e)){var a\u003dthis._pos\u003dthis._trackPointer\u0026\u0026e?e:this._map.project(this._lngLat),o\u003dthis.options.anchor,s\u003dfunction e(r){if(r){if(\"number\"\u003d\u003dtypeof r){var n\u003dMath.round(Math.sqrt(.5*Math.pow(r,2)));return{center:new t.Point(0,0),top:new t.Point(0,r),\"top-left\":new t.Point(n,n),\"top-right\":new t.Point(-n,n),bottom:new t.Point(0,-r),\"bottom-left\":new t.Point(n,-n),\"bottom-right\":new t.Point(-n,-n),left:new t.Point(r,0),right:new t.Point(-r,0)}}if(r instanceof t.Point||Array.isArray(r)){var i\u003dt.Point.convert(r);return{center:i,top:i,\"top-left\":i,\"top-right\":i,bottom:i,\"bottom-left\":i,\"bottom-right\":i,left:i,right:i}}return{center:t.Point.convert(r.center||[0,0]),top:t.Point.convert(r.top||[0,0]),\"top-left\":t.Point.convert(r[\"top-left\"]||[0,0]),\"top-right\":t.Point.convert(r[\"top-right\"]||[0,0]),bottom:t.Point.convert(r.bottom||[0,0]),\"bottom-left\":t.Point.convert(r[\"bottom-left\"]||[0,0]),\"bottom-right\":t.Point.convert(r[\"bottom-right\"]||[0,0]),left:t.Point.convert(r.left||[0,0]),right:t.Point.convert(r.right||[0,0])}}return e(new t.Point(0,0))}(this.options.offset);if(!o){var l,c\u003dthis._container.offsetWidth,u\u003dthis._container.offsetHeight;l\u003da.y+s.bottom.y\u003cu?[\"top\"]:a.y\u003ethis._map.transform.height-u?[\"bottom\"]:[],a.x\u003cc/2?l.push(\"left\"):a.x\u003ethis._map.transform.width-c/2\u0026\u0026l.push(\"right\"),o\u003d0\u003d\u003d\u003dl.length?\"bottom\":l.join(\"-\")}var f\u003da.add(s[o]).round();r.setTransform(this._container,zi[o]+\" translate(\"+f.x+\"px,\"+f.y+\"px)\"),Di(this._container,o,\"popup\")}},n.prototype._onClose\u003dfunction(){this.remove()},n}(t.Evented);var Zi\u003d{version:t.version,supported:e,setRTLTextPlugin:t.setRTLTextPlugin,getRTLTextPluginStatus:t.getRTLTextPluginStatus,Map:Ei,NavigationControl:Pi,GeolocateControl:Ui,AttributionControl:bi,ScaleControl:qi,FullscreenControl:Yi,Popup:Xi,Marker:Fi,Style:He,LngLat:t.LngLat,LngLatBounds:t.LngLatBounds,Point:t.Point,MercatorCoordinate:t.MercatorCoordinate,Evented:t.Evented,config:t.config,prewarm:function(){Bt().acquire(zt)},clearPrewarmedResources:function(){var t\u003dRt;t\u0026\u0026(t.isPreloaded()\u0026\u00261\u003d\u003d\u003dt.numActive()?(t.release(zt),Rt\u003dnull):console.warn(\"Could not clear WebWorkers since there are active Map instances that still reference it. The pre-warmed WebWorker pool can only be cleared when all map instances have been removed with map.remove()\"))},get accessToken(){return t.config.ACCESS_TOKEN},set accessToken(e){t.config.ACCESS_TOKEN\u003de},get baseApiUrl(){return t.config.API_URL},set baseApiUrl(e){t.config.API_URL\u003de},get workerCount(){return Dt.workerCount},set workerCount(t){Dt.workerCount\u003dt},get maxParallelImageRequests(){return t.config.MAX_PARALLEL_IMAGE_REQUESTS},set maxParallelImageRequests(e){t.config.MAX_PARALLEL_IMAGE_REQUESTS\u003de},clearStorage:function(e){t.clearTileCache(e)},workerUrl:\"\"};return Zi})),r}))},{}],458:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003d1\u003c\u003ct+1,r\u003dnew Array(e),n\u003d0;n\u003ce;++n)r[n]\u003da(t,n);return r};var n\u003dt(\"convex-hull\");function i(t,e,r){for(var n\u003dnew Array(t),i\u003d0;i\u003ct;++i)n[i]\u003d0,i\u003d\u003d\u003de\u0026\u0026(n[i]+\u003d.5),i\u003d\u003d\u003dr\u0026\u0026(n[i]+\u003d.5);return n}function a(t,e){if(0\u003d\u003d\u003de||e\u003d\u003d\u003d(1\u003c\u003ct+1)-1)return[];for(var r\u003d[],a\u003d[],o\u003d0;o\u003c\u003dt;++o)if(e\u00261\u003c\u003co){r.push(i(t,o-1,o-1)),a.push(null);for(var s\u003d0;s\u003c\u003dt;++s)~e\u00261\u003c\u003cs\u0026\u0026(r.push(i(t,o-1,s-1)),a.push([o,s]))}var l\u003dn(r),c\u003d[];t:for(o\u003d0;o\u003cl.length;++o){var u\u003dl[o],f\u003d[];for(s\u003d0;s\u003cu.length;++s){if(!a[u[s]])continue t;f.push(a[u[s]].slice())}c.push(f)}return c}},{\"convex-hull\":141}],459:[function(t,e,r){var n\u003dt(\"./normalize\"),i\u003dt(\"gl-mat4/create\"),a\u003dt(\"gl-mat4/clone\"),o\u003dt(\"gl-mat4/determinant\"),s\u003dt(\"gl-mat4/invert\"),l\u003dt(\"gl-mat4/transpose\"),c\u003d{length:t(\"gl-vec3/length\"),normalize:t(\"gl-vec3/normalize\"),dot:t(\"gl-vec3/dot\"),cross:t(\"gl-vec3/cross\")},u\u003di(),f\u003di(),h\u003d[0,0,0,0],p\u003d[[0,0,0],[0,0,0],[0,0,0]],d\u003d[0,0,0];function m(t,e,r,n,i){t[0]\u003de[0]*n+r[0]*i,t[1]\u003de[1]*n+r[1]*i,t[2]\u003de[2]*n+r[2]*i}e.exports\u003dfunction(t,e,r,i,g,v){if(e||(e\u003d[0,0,0]),r||(r\u003d[0,0,0]),i||(i\u003d[0,0,0]),g||(g\u003d[0,0,0,1]),v||(v\u003d[0,0,0,1]),!n(u,t))return!1;if(a(f,u),f[3]\u003d0,f[7]\u003d0,f[11]\u003d0,f[15]\u003d1,Math.abs(o(f)\u003c1e-8))return!1;var y,x,b,_,w,T,k,M\u003du[3],A\u003du[7],S\u003du[11],E\u003du[12],L\u003du[13],C\u003du[14],P\u003du[15];if(0!\u003d\u003dM||0!\u003d\u003dA||0!\u003d\u003dS){if(h[0]\u003dM,h[1]\u003dA,h[2]\u003dS,h[3]\u003dP,!s(f,f))return!1;l(f,f),y\u003dg,b\u003df,_\u003d(x\u003dh)[0],w\u003dx[1],T\u003dx[2],k\u003dx[3],y[0]\u003db[0]*_+b[4]*w+b[8]*T+b[12]*k,y[1]\u003db[1]*_+b[5]*w+b[9]*T+b[13]*k,y[2]\u003db[2]*_+b[6]*w+b[10]*T+b[14]*k,y[3]\u003db[3]*_+b[7]*w+b[11]*T+b[15]*k}else g[0]\u003dg[1]\u003dg[2]\u003d0,g[3]\u003d1;if(e[0]\u003dE,e[1]\u003dL,e[2]\u003dC,function(t,e){t[0][0]\u003de[0],t[0][1]\u003de[1],t[0][2]\u003de[2],t[1][0]\u003de[4],t[1][1]\u003de[5],t[1][2]\u003de[6],t[2][0]\u003de[8],t[2][1]\u003de[9],t[2][2]\u003de[10]}(p,u),r[0]\u003dc.length(p[0]),c.normalize(p[0],p[0]),i[0]\u003dc.dot(p[0],p[1]),m(p[1],p[1],p[0],1,-i[0]),r[1]\u003dc.length(p[1]),c.normalize(p[1],p[1]),i[0]/\u003dr[1],i[1]\u003dc.dot(p[0],p[2]),m(p[2],p[2],p[0],1,-i[1]),i[2]\u003dc.dot(p[1],p[2]),m(p[2],p[2],p[1],1,-i[2]),r[2]\u003dc.length(p[2]),c.normalize(p[2],p[2]),i[1]/\u003dr[2],i[2]/\u003dr[2],c.cross(d,p[1],p[2]),c.dot(p[0],d)\u003c0)for(var I\u003d0;I\u003c3;I++)r[I]*\u003d-1,p[I][0]*\u003d-1,p[I][1]*\u003d-1,p[I][2]*\u003d-1;return v[0]\u003d.5*Math.sqrt(Math.max(1+p[0][0]-p[1][1]-p[2][2],0)),v[1]\u003d.5*Math.sqrt(Math.max(1-p[0][0]+p[1][1]-p[2][2],0)),v[2]\u003d.5*Math.sqrt(Math.max(1-p[0][0]-p[1][1]+p[2][2],0)),v[3]\u003d.5*Math.sqrt(Math.max(1+p[0][0]+p[1][1]+p[2][2],0)),p[2][1]\u003ep[1][2]\u0026\u0026(v[0]\u003d-v[0]),p[0][2]\u003ep[2][0]\u0026\u0026(v[1]\u003d-v[1]),p[1][0]\u003ep[0][1]\u0026\u0026(v[2]\u003d-v[2]),!0}},{\"./normalize\":460,\"gl-mat4/clone\":280,\"gl-mat4/create\":282,\"gl-mat4/determinant\":283,\"gl-mat4/invert\":295,\"gl-mat4/transpose\":308,\"gl-vec3/cross\":364,\"gl-vec3/dot\":369,\"gl-vec3/length\":379,\"gl-vec3/normalize\":386}],460:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003de[15];if(0\u003d\u003d\u003dr)return!1;for(var n\u003d1/r,i\u003d0;i\u003c16;i++)t[i]\u003de[i]*n;return!0}},{}],461:[function(t,e,r){var n\u003dt(\"gl-vec3/lerp\"),i\u003dt(\"mat4-recompose\"),a\u003dt(\"mat4-decompose\"),o\u003dt(\"gl-mat4/determinant\"),s\u003dt(\"quat-slerp\"),l\u003df(),c\u003df(),u\u003df();function f(){return{translate:h(),scale:h(1),skew:h(),perspective:[0,0,0,1],quaternion:[0,0,0,1]}}function h(t){return[t||0,t||0,t||0]}e.exports\u003dfunction(t,e,r,f){if(0\u003d\u003d\u003do(e)||0\u003d\u003d\u003do(r))return!1;var h\u003da(e,l.translate,l.scale,l.skew,l.perspective,l.quaternion),p\u003da(r,c.translate,c.scale,c.skew,c.perspective,c.quaternion);return!(!h||!p)\u0026\u0026(n(u.translate,l.translate,c.translate,f),n(u.skew,l.skew,c.skew,f),n(u.scale,l.scale,c.scale,f),n(u.perspective,l.perspective,c.perspective,f),s(u.quaternion,l.quaternion,c.quaternion,f),i(t,u.translate,u.scale,u.skew,u.perspective,u.quaternion),!0)}},{\"gl-mat4/determinant\":283,\"gl-vec3/lerp\":380,\"mat4-decompose\":459,\"mat4-recompose\":462,\"quat-slerp\":525}],462:[function(t,e,r){var n\u003d{identity:t(\"gl-mat4/identity\"),translate:t(\"gl-mat4/translate\"),multiply:t(\"gl-mat4/multiply\"),create:t(\"gl-mat4/create\"),scale:t(\"gl-mat4/scale\"),fromRotationTranslation:t(\"gl-mat4/fromRotationTranslation\")},i\u003d(n.create(),n.create());e.exports\u003dfunction(t,e,r,a,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]\u003do[0],t[7]\u003do[1],t[11]\u003do[2],t[15]\u003do[3],n.identity(i),0!\u003d\u003da[2]\u0026\u0026(i[9]\u003da[2],n.multiply(t,t,i)),0!\u003d\u003da[1]\u0026\u0026(i[9]\u003d0,i[8]\u003da[1],n.multiply(t,t,i)),0!\u003d\u003da[0]\u0026\u0026(i[8]\u003d0,i[4]\u003da[0],n.multiply(t,t,i)),n.scale(t,t,r),t}},{\"gl-mat4/create\":282,\"gl-mat4/fromRotationTranslation\":286,\"gl-mat4/identity\":293,\"gl-mat4/multiply\":297,\"gl-mat4/scale\":305,\"gl-mat4/translate\":307}],463:[function(t,e,r){\"use strict\";e.exports\u003dMath.log2||function(t){return Math.log(t)*Math.LOG2E}},{}],464:[function(t,e,r){\"use strict\";var n\u003dt(\"binary-search-bounds\"),i\u003dt(\"mat4-interpolate\"),a\u003dt(\"gl-mat4/invert\"),o\u003dt(\"gl-mat4/rotateX\"),s\u003dt(\"gl-mat4/rotateY\"),l\u003dt(\"gl-mat4/rotateZ\"),c\u003dt(\"gl-mat4/lookAt\"),u\u003dt(\"gl-mat4/translate\"),f\u003d(t(\"gl-mat4/scale\"),t(\"gl-vec3/normalize\")),h\u003d[0,0,0];function p(t){this._components\u003dt.slice(),this._time\u003d[0],this.prevMatrix\u003dt.slice(),this.nextMatrix\u003dt.slice(),this.computedMatrix\u003dt.slice(),this.computedInverse\u003dt.slice(),this.computedEye\u003d[0,0,0],this.computedUp\u003d[0,0,0],this.computedCenter\u003d[0,0,0],this.computedRadius\u003d[0],this._limits\u003d[-1/0,1/0]}e.exports\u003dfunction(t){return new p((t\u003dt||{}).matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])};var d\u003dp.prototype;d.recalcMatrix\u003dfunction(t){var e\u003dthis._time,r\u003dn.le(e,t),o\u003dthis.computedMatrix;if(!(r\u003c0)){var s\u003dthis._components;if(r\u003d\u003d\u003de.length-1)for(var l\u003d16*r,c\u003d0;c\u003c16;++c)o[c]\u003ds[l++];else{var u\u003de[r+1]-e[r],h\u003d(l\u003d16*r,this.prevMatrix),p\u003d!0;for(c\u003d0;c\u003c16;++c)h[c]\u003ds[l++];var d\u003dthis.nextMatrix;for(c\u003d0;c\u003c16;++c)d[c]\u003ds[l++],p\u003dp\u0026\u0026h[c]\u003d\u003d\u003dd[c];if(u\u003c1e-6||p)for(c\u003d0;c\u003c16;++c)o[c]\u003dh[c];else i(o,h,d,(t-e[r])/u)}var m\u003dthis.computedUp;m[0]\u003do[1],m[1]\u003do[5],m[2]\u003do[9],f(m,m);var g\u003dthis.computedInverse;a(g,o);var v\u003dthis.computedEye,y\u003dg[15];v[0]\u003dg[12]/y,v[1]\u003dg[13]/y,v[2]\u003dg[14]/y;var x\u003dthis.computedCenter,b\u003dMath.exp(this.computedRadius[0]);for(c\u003d0;c\u003c3;++c)x[c]\u003dv[c]-o[2+4*c]*b}},d.idle\u003dfunction(t){if(!(t\u003cthis.lastT())){for(var e\u003dthis._components,r\u003de.length-16,n\u003d0;n\u003c16;++n)e.push(e[r++]);this._time.push(t)}},d.flush\u003dfunction(t){var e\u003dn.gt(this._time,t)-2;e\u003c0||(this._time.splice(0,e),this._components.splice(0,16*e))},d.lastT\u003dfunction(){return this._time[this._time.length-1]},d.lookAt\u003dfunction(t,e,r,n){this.recalcMatrix(t),e\u003de||this.computedEye,r\u003dr||h,n\u003dn||this.computedUp,this.setMatrix(t,c(this.computedMatrix,e,r,n));for(var i\u003d0,a\u003d0;a\u003c3;++a)i+\u003dMath.pow(r[a]-e[a],2);i\u003dMath.log(Math.sqrt(i)),this.computedRadius[0]\u003di},d.rotate\u003dfunction(t,e,r,n){this.recalcMatrix(t);var i\u003dthis.computedInverse;e\u0026\u0026s(i,i,e),r\u0026\u0026o(i,i,r),n\u0026\u0026l(i,i,n),this.setMatrix(t,a(this.computedMatrix,i))};var m\u003d[0,0,0];d.pan\u003dfunction(t,e,r,n){m[0]\u003d-(e||0),m[1]\u003d-(r||0),m[2]\u003d-(n||0),this.recalcMatrix(t);var i\u003dthis.computedInverse;u(i,i,m),this.setMatrix(t,a(i,i))},d.translate\u003dfunction(t,e,r,n){m[0]\u003de||0,m[1]\u003dr||0,m[2]\u003dn||0,this.recalcMatrix(t);var i\u003dthis.computedMatrix;u(i,i,m),this.setMatrix(t,i)},d.setMatrix\u003dfunction(t,e){if(!(t\u003cthis.lastT())){this._time.push(t);for(var r\u003d0;r\u003c16;++r)this._components.push(e[r])}},d.setDistance\u003dfunction(t,e){this.computedRadius[0]\u003de},d.setDistanceLimits\u003dfunction(t,e){var r\u003dthis._limits;r[0]\u003dt,r[1]\u003de},d.getDistanceLimits\u003dfunction(t){var e\u003dthis._limits;return t?(t[0]\u003de[0],t[1]\u003de[1],t):e}},{\"binary-search-bounds\":103,\"gl-mat4/invert\":295,\"gl-mat4/lookAt\":296,\"gl-mat4/rotateX\":302,\"gl-mat4/rotateY\":303,\"gl-mat4/rotateZ\":304,\"gl-mat4/scale\":305,\"gl-mat4/translate\":307,\"gl-vec3/normalize\":386,\"mat4-interpolate\":461}],465:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.length;if(e\u003c3){for(var r\u003dnew Array(e),i\u003d0;i\u003ce;++i)r[i]\u003di;return 2\u003d\u003d\u003de\u0026\u0026t[0][0]\u003d\u003d\u003dt[1][0]\u0026\u0026t[0][1]\u003d\u003d\u003dt[1][1]?[0]:r}var a\u003dnew Array(e);for(i\u003d0;i\u003ce;++i)a[i]\u003di;a.sort((function(e,r){var n\u003dt[e][0]-t[r][0];return n||t[e][1]-t[r][1]}));var o\u003d[a[0],a[1]],s\u003d[a[0],a[1]];for(i\u003d2;i\u003ce;++i){for(var l\u003da[i],c\u003dt[l],u\u003do.length;u\u003e1\u0026\u0026n(t[o[u-2]],t[o[u-1]],c)\u003c\u003d0;)u-\u003d1,o.pop();for(o.push(l),u\u003ds.length;u\u003e1\u0026\u0026n(t[s[u-2]],t[s[u-1]],c)\u003e\u003d0;)u-\u003d1,s.pop();s.push(l)}r\u003dnew Array(s.length+o.length-2);for(var f\u003d0,h\u003d(i\u003d0,o.length);i\u003ch;++i)r[f++]\u003do[i];for(var p\u003ds.length-2;p\u003e0;--p)r[f++]\u003ds[p];return r};var n\u003dt(\"robust-orientation\")[3]},{\"robust-orientation\":544}],466:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){e||(e\u003dt,t\u003dwindow);var r\u003d0,i\u003d0,a\u003d0,o\u003d{shift:!1,alt:!1,control:!1,meta:!1},s\u003d!1;function l(t){var e\u003d!1;return\"altKey\"in t\u0026\u0026(e\u003de||t.altKey!\u003d\u003do.alt,o.alt\u003d!!t.altKey),\"shiftKey\"in t\u0026\u0026(e\u003de||t.shiftKey!\u003d\u003do.shift,o.shift\u003d!!t.shiftKey),\"ctrlKey\"in t\u0026\u0026(e\u003de||t.ctrlKey!\u003d\u003do.control,o.control\u003d!!t.ctrlKey),\"metaKey\"in t\u0026\u0026(e\u003de||t.metaKey!\u003d\u003do.meta,o.meta\u003d!!t.metaKey),e}function c(t,s){var c\u003dn.x(s),u\u003dn.y(s);\"buttons\"in s\u0026\u0026(t\u003d0|s.buttons),(t!\u003d\u003dr||c!\u003d\u003di||u!\u003d\u003da||l(s))\u0026\u0026(r\u003d0|t,i\u003dc||0,a\u003du||0,e\u0026\u0026e(r,i,a,o))}function u(t){c(0,t)}function f(){(r||i||a||o.shift||o.alt||o.meta||o.control)\u0026\u0026(i\u003da\u003d0,r\u003d0,o.shift\u003do.alt\u003do.control\u003do.meta\u003d!1,e\u0026\u0026e(0,0,0,o))}function h(t){l(t)\u0026\u0026e\u0026\u0026e(r,i,a,o)}function p(t){0\u003d\u003d\u003dn.buttons(t)?c(0,t):c(r,t)}function d(t){c(r|n.buttons(t),t)}function m(t){c(r\u0026~n.buttons(t),t)}function g(){s||(s\u003d!0,t.addEventListener(\"mousemove\",p),t.addEventListener(\"mousedown\",d),t.addEventListener(\"mouseup\",m),t.addEventListener(\"mouseleave\",u),t.addEventListener(\"mouseenter\",u),t.addEventListener(\"mouseout\",u),t.addEventListener(\"mouseover\",u),t.addEventListener(\"blur\",f),t.addEventListener(\"keyup\",h),t.addEventListener(\"keydown\",h),t.addEventListener(\"keypress\",h),t!\u003d\u003dwindow\u0026\u0026(window.addEventListener(\"blur\",f),window.addEventListener(\"keyup\",h),window.addEventListener(\"keydown\",h),window.addEventListener(\"keypress\",h)))}g();var v\u003d{element:t};return Object.defineProperties(v,{enabled:{get:function(){return s},set:function(e){e?g():function(){if(!s)return;s\u003d!1,t.removeEventListener(\"mousemove\",p),t.removeEventListener(\"mousedown\",d),t.removeEventListener(\"mouseup\",m),t.removeEventListener(\"mouseleave\",u),t.removeEventListener(\"mouseenter\",u),t.removeEventListener(\"mouseout\",u),t.removeEventListener(\"mouseover\",u),t.removeEventListener(\"blur\",f),t.removeEventListener(\"keyup\",h),t.removeEventListener(\"keydown\",h),t.removeEventListener(\"keypress\",h),t!\u003d\u003dwindow\u0026\u0026(window.removeEventListener(\"blur\",f),window.removeEventListener(\"keyup\",h),window.removeEventListener(\"keydown\",h),window.removeEventListener(\"keypress\",h))}()},enumerable:!0},buttons:{get:function(){return r},enumerable:!0},x:{get:function(){return i},enumerable:!0},y:{get:function(){return a},enumerable:!0},mods:{get:function(){return o},enumerable:!0}}),v};var n\u003dt(\"mouse-event\")},{\"mouse-event\":468}],467:[function(t,e,r){var n\u003d{left:0,top:0};e.exports\u003dfunction(t,e,r){e\u003de||t.currentTarget||t.srcElement,Array.isArray(r)||(r\u003d[0,0]);var i\u003dt.clientX||0,a\u003dt.clientY||0,o\u003d(s\u003de,s\u003d\u003d\u003dwindow||s\u003d\u003d\u003ddocument||s\u003d\u003d\u003ddocument.body?n:s.getBoundingClientRect());var s;return r[0]\u003di-o.left,r[1]\u003da-o.top,r}},{}],468:[function(t,e,r){\"use strict\";function n(t){return t.target||t.srcElement||window}r.buttons\u003dfunction(t){if(\"object\"\u003d\u003dtypeof t){if(\"buttons\"in t)return t.buttons;if(\"which\"in t){if(2\u003d\u003d\u003d(e\u003dt.which))return 4;if(3\u003d\u003d\u003de)return 2;if(e\u003e0)return 1\u003c\u003ce-1}else if(\"button\"in t){var e;if(1\u003d\u003d\u003d(e\u003dt.button))return 4;if(2\u003d\u003d\u003de)return 2;if(e\u003e\u003d0)return 1\u003c\u003ce}}return 0},r.element\u003dn,r.x\u003dfunction(t){if(\"object\"\u003d\u003dtypeof t){if(\"offsetX\"in t)return t.offsetX;var e\u003dn(t).getBoundingClientRect();return t.clientX-e.left}return 0},r.y\u003dfunction(t){if(\"object\"\u003d\u003dtypeof t){if(\"offsetY\"in t)return t.offsetY;var e\u003dn(t).getBoundingClientRect();return t.clientY-e.top}return 0}},{}],469:[function(t,e,r){\"use strict\";var n\u003dt(\"to-px\");e.exports\u003dfunction(t,e,r){\"function\"\u003d\u003dtypeof t\u0026\u0026(r\u003d!!e,e\u003dt,t\u003dwindow);var i\u003dn(\"ex\",t),a\u003dfunction(t){r\u0026\u0026t.preventDefault();var n\u003dt.deltaX||0,a\u003dt.deltaY||0,o\u003dt.deltaZ||0,s\u003d1;switch(t.deltaMode){case 1:s\u003di;break;case 2:s\u003dwindow.innerHeight}if(a*\u003ds,o*\u003ds,(n*\u003ds)||a||o)return e(n,a,o,t)};return t.addEventListener(\"wheel\",a),a}},{\"to-px\":596}],470:[function(t,e,r){(function(t,r){(function(){\n/*! Native Promise Only\n    v0.8.1 (c) Kyle Simpson\n    MIT License: http://getify.mit-license.org\n*/\n!function(t,r,n){r[t]\u003dr[t]||n(),void 0!\u003d\u003de\u0026\u0026e.exports\u0026\u0026(e.exports\u003dr[t])}(\"Promise\",void 0!\u003d\u003dt?t:this,(function(){\"use strict\";var t,e,n,i\u003dObject.prototype.toString,a\u003dvoid 0!\u003d\u003dr?function(t){return r(t)}:setTimeout;try{Object.defineProperty({},\"x\",{}),t\u003dfunction(t,e,r,n){return Object.defineProperty(t,e,{value:r,writable:!0,configurable:!1!\u003d\u003dn})}}catch(e){t\u003dfunction(t,e,r){return t[e]\u003dr,t}}function o(t,r){n.add(t,r),e||(e\u003da(n.drain))}function s(t){var e,r\u003dtypeof t;return null\u003d\u003dt||\"object\"!\u003dr\u0026\u0026\"function\"!\u003dr||(e\u003dt.then),\"function\"\u003d\u003dtypeof e\u0026\u0026e}function l(){for(var t\u003d0;t\u003cthis.chain.length;t++)c(this,1\u003d\u003d\u003dthis.state?this.chain[t].success:this.chain[t].failure,this.chain[t]);this.chain.length\u003d0}function c(t,e,r){var n,i;try{!1\u003d\u003d\u003de?r.reject(t.msg):(n\u003d!0\u003d\u003d\u003de?t.msg:e.call(void 0,t.msg))\u003d\u003d\u003dr.promise?r.reject(TypeError(\"Promise-chain cycle\")):(i\u003ds(n))?i.call(n,r.resolve,r.reject):r.resolve(n)}catch(t){r.reject(t)}}function u(t){var e,r\u003dthis;if(!r.triggered){r.triggered\u003d!0,r.def\u0026\u0026(r\u003dr.def);try{(e\u003ds(t))?o((function(){var n\u003dnew p(r);try{e.call(t,(function(){u.apply(n,arguments)}),(function(){f.apply(n,arguments)}))}catch(t){f.call(n,t)}})):(r.msg\u003dt,r.state\u003d1,r.chain.length\u003e0\u0026\u0026o(l,r))}catch(t){f.call(new p(r),t)}}}function f(t){var e\u003dthis;e.triggered||(e.triggered\u003d!0,e.def\u0026\u0026(e\u003de.def),e.msg\u003dt,e.state\u003d2,e.chain.length\u003e0\u0026\u0026o(l,e))}function h(t,e,r,n){for(var i\u003d0;i\u003ce.length;i++)!function(i){t.resolve(e[i]).then((function(t){r(i,t)}),n)}(i)}function p(t){this.def\u003dt,this.triggered\u003d!1}function d(t){this.promise\u003dt,this.state\u003d0,this.triggered\u003d!1,this.chain\u003d[],this.msg\u003dvoid 0}function m(t){if(\"function\"!\u003dtypeof t)throw TypeError(\"Not a function\");if(0!\u003d\u003dthis.__NPO__)throw TypeError(\"Not a promise\");this.__NPO__\u003d1;var e\u003dnew d(this);this.then\u003dfunction(t,r){var n\u003d{success:\"function\"!\u003dtypeof t||t,failure:\"function\"\u003d\u003dtypeof r\u0026\u0026r};return n.promise\u003dnew this.constructor((function(t,e){if(\"function\"!\u003dtypeof t||\"function\"!\u003dtypeof e)throw TypeError(\"Not a function\");n.resolve\u003dt,n.reject\u003de})),e.chain.push(n),0!\u003d\u003de.state\u0026\u0026o(l,e),n.promise},this.catch\u003dfunction(t){return this.then(void 0,t)};try{t.call(void 0,(function(t){u.call(e,t)}),(function(t){f.call(e,t)}))}catch(t){f.call(e,t)}}n\u003dfunction(){var t,r,n;function i(t,e){this.fn\u003dt,this.self\u003de,this.next\u003dvoid 0}return{add:function(e,a){n\u003dnew i(e,a),r?r.next\u003dn:t\u003dn,r\u003dn,n\u003dvoid 0},drain:function(){var n\u003dt;for(t\u003dr\u003de\u003dvoid 0;n;)n.fn.call(n.self),n\u003dn.next}}}();var g\u003dt({},\"constructor\",m,!1);return m.prototype\u003dg,t(g,\"__NPO__\",0,!1),t(m,\"resolve\",(function(t){return t\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u00261\u003d\u003d\u003dt.__NPO__?t:new this((function(e,r){if(\"function\"!\u003dtypeof e||\"function\"!\u003dtypeof r)throw TypeError(\"Not a function\");e(t)}))})),t(m,\"reject\",(function(t){return new this((function(e,r){if(\"function\"!\u003dtypeof e||\"function\"!\u003dtypeof r)throw TypeError(\"Not a function\");r(t)}))})),t(m,\"all\",(function(t){var e\u003dthis;return\"[object Array]\"!\u003di.call(t)?e.reject(TypeError(\"Not an array\")):0\u003d\u003d\u003dt.length?e.resolve([]):new e((function(r,n){if(\"function\"!\u003dtypeof r||\"function\"!\u003dtypeof n)throw TypeError(\"Not a function\");var i\u003dt.length,a\u003dArray(i),o\u003d0;h(e,t,(function(t,e){a[t]\u003de,++o\u003d\u003d\u003di\u0026\u0026r(a)}),n)}))})),t(m,\"race\",(function(t){var e\u003dthis;return\"[object Array]\"!\u003di.call(t)?e.reject(TypeError(\"Not an array\")):new e((function(r,n){if(\"function\"!\u003dtypeof r||\"function\"!\u003dtypeof n)throw TypeError(\"Not a function\");h(e,t,(function(t,e){r(e)}),n)}))})),m}))}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{},t(\"timers\").setImmediate)},{timers:593}],471:[function(t,e,r){\"use strict\";var n\u003dt(\"typedarray-pool\");function i(t){return\"a\"+t}function a(t){return\"d\"+t}function o(t,e){return\"c\"+t+\"_\"+e}function s(t){return\"s\"+t}function l(t,e){return\"t\"+t+\"_\"+e}function c(t){return\"o\"+t}function u(t){return\"x\"+t}function f(t){return\"p\"+t}function h(t,e){return\"d\"+t+\"_\"+e}function p(t){return\"i\"+t}function d(t,e){return\"u\"+t+\"_\"+e}function m(t){return\"b\"+t}function g(t){return\"y\"+t}function v(t){return\"e\"+t}function y(t){return\"v\"+t}e.exports\u003dfunction(t){function e(t){throw new Error(\"ndarray-extract-contour: \"+t)}\"object\"!\u003dtypeof t\u0026\u0026e(\"Must specify arguments\");var r\u003dt.order;Array.isArray(r)||e(\"Must specify order\");var b\u003dt.arrayArguments||1;b\u003c1\u0026\u0026e(\"Must have at least one array argument\");var _\u003dt.scalarArguments||0;_\u003c0\u0026\u0026e(\"Scalar arg count must be \u003e 0\");\"function\"!\u003dtypeof t.vertex\u0026\u0026e(\"Must specify vertex creation function\");\"function\"!\u003dtypeof t.cell\u0026\u0026e(\"Must specify cell creation function\");\"function\"!\u003dtypeof t.phase\u0026\u0026e(\"Must specify phase function\");for(var w\u003dt.getters||[],T\u003dnew Array(b),k\u003d0;k\u003cb;++k)w.indexOf(k)\u003e\u003d0?T[k]\u003d!0:T[k]\u003d!1;return function(t,e,r,b,_,w){var T\u003dw.length,k\u003d_.length;if(k\u003c2)throw new Error(\"ndarray-extract-contour: Dimension must be at least 2\");for(var M\u003d\"extractContour\"+_.join(\"_\"),A\u003d[],S\u003d[],E\u003d[],L\u003d0;L\u003cT;++L)E.push(i(L));for(L\u003d0;L\u003cb;++L)E.push(u(L));for(L\u003d0;L\u003ck;++L)S.push(s(L)+\"\u003d\"+i(0)+\".shape[\"+L+\"]|0\");for(L\u003d0;L\u003cT;++L){S.push(a(L)+\"\u003d\"+i(L)+\".data\",c(L)+\"\u003d\"+i(L)+\".offset|0\");for(var C\u003d0;C\u003ck;++C)S.push(l(L,C)+\"\u003d\"+i(L)+\".stride[\"+C+\"]|0\")}for(L\u003d0;L\u003cT;++L){S.push(f(L)+\"\u003d\"+c(L)),S.push(o(L,0));for(C\u003d1;C\u003c1\u003c\u003ck;++C){for(var P\u003d[],I\u003d0;I\u003ck;++I)C\u00261\u003c\u003cI\u0026\u0026P.push(\"-\"+l(L,I));S.push(h(L,C)+\"\u003d(\"+P.join(\"\")+\")|0\"),S.push(o(L,C)+\"\u003d0\")}}for(L\u003d0;L\u003cT;++L)for(C\u003d0;C\u003ck;++C){var O\u003d[l(L,_[C])];C\u003e0\u0026\u0026O.push(l(L,_[C-1])+\"*\"+s(_[C-1])),S.push(d(L,_[C])+\"\u003d(\"+O.join(\"-\")+\")|0\")}for(L\u003d0;L\u003ck;++L)S.push(p(L)+\"\u003d0\");S.push(\"N\u003d0\");var z\u003d[\"2\"];for(L\u003dk-2;L\u003e\u003d0;--L)z.push(s(_[L]));S.push(\"Q\u003d(\"+z.join(\"*\")+\")|0\",\"P\u003dmallocUint32(Q)\",\"V\u003dmallocUint32(Q)\",\"X\u003d0\"),S.push(m(0)+\"\u003d0\");for(C\u003d1;C\u003c1\u003c\u003ck;++C){var D\u003d[],R\u003d[];for(I\u003d0;I\u003ck;++I)C\u00261\u003c\u003cI\u0026\u0026(0\u003d\u003d\u003dR.length?D.push(\"1\"):D.unshift(R.join(\"*\"))),R.push(s(_[I]));var F\u003d\"\";D[0].indexOf(s(_[k-2]))\u003c0\u0026\u0026(F\u003d\"-\");var B\u003dx(k,C,_);S.push(v(B)+\"\u003d(-\"+D.join(\"-\")+\")|0\",g(B)+\"\u003d(\"+F+D.join(\"-\")+\")|0\",m(B)+\"\u003d0\")}function N(t,e){A.push(\"for(\",p(_[t]),\"\u003d\",e,\";\",p(_[t]),\"\u003c\",s(_[t]),\";\",\"++\",p(_[t]),\"){\")}function j(t){for(var e\u003d0;e\u003cT;++e)A.push(f(e),\"+\u003d\",d(e,_[t]),\";\");A.push(\"}\")}function U(){for(var t\u003d1;t\u003c1\u003c\u003ck;++t)A.push(\"T\",\"\u003d\",v(t),\";\",v(t),\"\u003d\",g(t),\";\",g(t),\"\u003d\",\"T\",\";\")}S.push(y(0)+\"\u003d0\",\"T\u003d0\"),function t(e,r){if(e\u003c0)!function(t){for(var e\u003d0;e\u003cT;++e)w[e]?A.push(o(e,0),\"\u003d\",a(e),\".get(\",f(e),\");\"):A.push(o(e,0),\"\u003d\",a(e),\"[\",f(e),\"];\");var r\u003d[];for(e\u003d0;e\u003cT;++e)r.push(o(e,0));for(e\u003d0;e\u003cb;++e)r.push(u(e));A.push(m(0),\"\u003d\",\"P\",\"[\",\"X\",\"]\u003dphase(\",r.join(),\");\");for(var n\u003d1;n\u003c1\u003c\u003ck;++n)A.push(m(n),\"\u003d\",\"P\",\"[\",\"X\",\"+\",v(n),\"];\");var i\u003d[];for(n\u003d1;n\u003c1\u003c\u003ck;++n)i.push(\"(\"+m(0)+\"!\u003d\u003d\"+m(n)+\")\");A.push(\"if(\",i.join(\"||\"),\"){\");var s\u003d[];for(e\u003d0;e\u003ck;++e)s.push(p(e));for(e\u003d0;e\u003cT;++e){s.push(o(e,0));for(n\u003d1;n\u003c1\u003c\u003ck;++n)w[e]?A.push(o(e,n),\"\u003d\",a(e),\".get(\",f(e),\"+\",h(e,n),\");\"):A.push(o(e,n),\"\u003d\",a(e),\"[\",f(e),\"+\",h(e,n),\"];\"),s.push(o(e,n))}for(e\u003d0;e\u003c1\u003c\u003ck;++e)s.push(m(e));for(e\u003d0;e\u003cb;++e)s.push(u(e));A.push(\"vertex(\",s.join(),\");\",y(0),\"\u003d\",\"V\",\"[\",\"X\",\"]\u003d\",\"N\",\"++;\");var l\u003d(1\u003c\u003ck)-1,c\u003dm(l);for(n\u003d0;n\u003ck;++n)if(0\u003d\u003d(t\u0026~(1\u003c\u003cn))){for(var d\u003dl^1\u003c\u003cn,g\u003dm(d),x\u003d[],_\u003dd;_\u003e0;_\u003d_-1\u0026d)x.push(\"V[X+\"+v(_)+\"]\");x.push(y(0));for(_\u003d0;_\u003cT;++_)1\u0026n?x.push(o(_,l),o(_,d)):x.push(o(_,d),o(_,l));1\u0026n?x.push(c,g):x.push(g,c);for(_\u003d0;_\u003cb;++_)x.push(u(_));A.push(\"if(\",c,\"!\u003d\u003d\",g,\"){\",\"face(\",x.join(),\")}\")}A.push(\"}\",\"X\",\"+\u003d1;\")}(r);else{!function(t){for(var e\u003dt-1;e\u003e\u003d0;--e)N(e,0);var r\u003d[];for(e\u003d0;e\u003cT;++e)w[e]?r.push(a(e)+\".get(\"+f(e)+\")\"):r.push(a(e)+\"[\"+f(e)+\"]\");for(e\u003d0;e\u003cb;++e)r.push(u(e));for(A.push(\"P\",\"[\",\"X\",\"++]\u003dphase(\",r.join(),\");\"),e\u003d0;e\u003ct;++e)j(e);for(var n\u003d0;n\u003cT;++n)A.push(f(n),\"+\u003d\",d(n,_[t]),\";\")}(e),A.push(\"if(\",s(_[e]),\"\u003e0){\",p(_[e]),\"\u003d1;\"),t(e-1,r|1\u003c\u003c_[e]);for(var n\u003d0;n\u003cT;++n)A.push(f(n),\"+\u003d\",d(n,_[e]),\";\");e\u003d\u003d\u003dk-1\u0026\u0026(A.push(\"X\",\"\u003d0;\"),U()),N(e,2),t(e-1,r),e\u003d\u003d\u003dk-1\u0026\u0026(A.push(\"if(\",p(_[k-1]),\"\u00261){\",\"X\",\"\u003d0;}\"),U()),j(e),A.push(\"}\")}}(k-1,0),A.push(\"freeUint32(\",\"V\",\");freeUint32(\",\"P\",\");\");var V\u003d[\"\u0027use strict\u0027;\",\"function \",M,\"(\",E.join(),\"){\",\"var \",S.join(),\";\",A.join(\"\"),\"}\",\"return \",M].join(\"\");return new Function(\"vertex\",\"face\",\"phase\",\"mallocUint32\",\"freeUint32\",V)(t,e,r,n.mallocUint32,n.freeUint32)}(t.vertex,t.cell,t.phase,_,r,T)};function x(t,e,r){for(var n\u003d0,i\u003d0;i\u003ct;++i)e\u00261\u003c\u003ci\u0026\u0026(n|\u003d1\u003c\u003cr[i]);return n}},{\"typedarray-pool\":613}],472:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){if(Array.isArray(r)){if(r.length!\u003d\u003de.dimension)throw new Error(\"ndarray-gradient: invalid boundary conditions\")}else r\u003dn(e.dimension,\"string\"\u003d\u003dtypeof r?r:\"clamp\");if(t.dimension!\u003d\u003de.dimension+1)throw new Error(\"ndarray-gradient: output dimension must be +1 input dimension\");if(t.shape[e.dimension]!\u003d\u003de.dimension)throw new Error(\"ndarray-gradient: output shape must match input shape\");for(var i\u003d0;i\u003ce.dimension;++i)if(t.shape[i]!\u003d\u003de.shape[i])throw new Error(\"ndarray-gradient: shape mismatch\");if(0\u003d\u003d\u003de.size)return t;if(e.dimension\u003c\u003d0)return t.set(0),t;return function(t){var e\u003dt.join();if(v\u003do[e])return v;var r\u003dt.length,n\u003d[\"function gradient(dst,src){var s\u003dsrc.shape.slice();\"];function i(e){for(var i\u003dr-e.length,a\u003d[],o\u003d[],s\u003d[],l\u003d0;l\u003cr;++l)e.indexOf(l+1)\u003e\u003d0?s.push(\"0\"):e.indexOf(-(l+1))\u003e\u003d0?s.push(\"s[\"+l+\"]-1\"):(s.push(\"-1\"),a.push(\"1\"),o.push(\"s[\"+l+\"]-2\"));var c\u003d\".lo(\"+a.join()+\").hi(\"+o.join()+\")\";if(0\u003d\u003d\u003da.length\u0026\u0026(c\u003d\"\"),i\u003e0){n.push(\"if(1\");for(l\u003d0;l\u003cr;++l)e.indexOf(l+1)\u003e\u003d0||e.indexOf(-(l+1))\u003e\u003d0||n.push(\"\u0026\u0026s[\",l,\"]\u003e2\");n.push(\"){grad\",i,\"(src.pick(\",s.join(),\")\",c);for(l\u003d0;l\u003cr;++l)e.indexOf(l+1)\u003e\u003d0||e.indexOf(-(l+1))\u003e\u003d0||n.push(\",dst.pick(\",s.join(),\",\",l,\")\",c);n.push(\");\")}for(l\u003d0;l\u003ce.length;++l){var u\u003dMath.abs(e[l])-1,f\u003d\"dst.pick(\"+s.join()+\",\"+u+\")\"+c;switch(t[u]){case\"clamp\":var h\u003ds.slice(),p\u003ds.slice();e[l]\u003c0?h[u]\u003d\"s[\"+u+\"]-2\":p[u]\u003d\"1\",0\u003d\u003d\u003di?n.push(\"if(s[\",u,\"]\u003e1){dst.set(\",s.join(),\",\",u,\",0.5*(src.get(\",h.join(),\")-src.get(\",p.join(),\")))}else{dst.set(\",s.join(),\",\",u,\",0)};\"):n.push(\"if(s[\",u,\"]\u003e1){diff(\",f,\",src.pick(\",h.join(),\")\",c,\",src.pick(\",p.join(),\")\",c,\");}else{zero(\",f,\");};\");break;case\"mirror\":0\u003d\u003d\u003di?n.push(\"dst.set(\",s.join(),\",\",u,\",0);\"):n.push(\"zero(\",f,\");\");break;case\"wrap\":var d\u003ds.slice(),m\u003ds.slice();e[l]\u003c0?(d[u]\u003d\"s[\"+u+\"]-2\",m[u]\u003d\"0\"):(d[u]\u003d\"s[\"+u+\"]-1\",m[u]\u003d\"1\"),0\u003d\u003d\u003di?n.push(\"if(s[\",u,\"]\u003e2){dst.set(\",s.join(),\",\",u,\",0.5*(src.get(\",d.join(),\")-src.get(\",m.join(),\")))}else{dst.set(\",s.join(),\",\",u,\",0)};\"):n.push(\"if(s[\",u,\"]\u003e2){diff(\",f,\",src.pick(\",d.join(),\")\",c,\",src.pick(\",m.join(),\")\",c,\");}else{zero(\",f,\");};\");break;default:throw new Error(\"ndarray-gradient: Invalid boundary condition\")}}i\u003e0\u0026\u0026n.push(\"};\")}for(var s\u003d0;s\u003c1\u003c\u003cr;++s){for(var f\u003d[],h\u003d0;h\u003cr;++h)s\u00261\u003c\u003ch\u0026\u0026f.push(h+1);for(var p\u003d0;p\u003c1\u003c\u003cf.length;++p){var d\u003df.slice();for(h\u003d0;h\u003cf.length;++h)p\u00261\u003c\u003ch\u0026\u0026(d[h]\u003d-d[h]);i(d)}}n.push(\"return dst;};return gradient\");var m\u003d[\"diff\",\"zero\"],g\u003d[l,c];for(s\u003d1;s\u003c\u003dr;++s)m.push(\"grad\"+s),g.push(u(s));m.push(n.join(\"\"));var v\u003dFunction.apply(void 0,m).apply(void 0,g);return a[e]\u003dv,v}(r)(t,e)};var n\u003dt(\"dup\"),i\u003dt(\"cwise-compiler\"),a\u003d{},o\u003d{},s\u003d{body:\"\",args:[],thisVars:[],localVars:[]},l\u003di({args:[\"array\",\"array\",\"array\"],pre:s,post:s,body:{args:[{name:\"out\",lvalue:!0,rvalue:!1,count:1},{name:\"left\",lvalue:!1,rvalue:!0,count:1},{name:\"right\",lvalue:!1,rvalue:!0,count:1}],body:\"out\u003d0.5*(left-right)\",thisVars:[],localVars:[]},funcName:\"cdiff\"}),c\u003di({args:[\"array\"],pre:s,post:s,body:{args:[{name:\"out\",lvalue:!0,rvalue:!1,count:1}],body:\"out\u003d0\",thisVars:[],localVars:[]},funcName:\"zero\"});function u(t){if(t in a)return a[t];for(var e\u003d[],r\u003d0;r\u003ct;++r)e.push(\"out\",r,\"s\u003d0.5*(inp\",r,\"l-inp\",r,\"r);\");var o\u003d[\"array\"],l\u003d[\"junk\"];for(r\u003d0;r\u003ct;++r){o.push(\"array\"),l.push(\"out\"+r+\"s\");var c\u003dn(t);c[r]\u003d-1,o.push({array:0,offset:c.slice()}),c[r]\u003d1,o.push({array:0,offset:c.slice()}),l.push(\"inp\"+r+\"l\",\"inp\"+r+\"r\")}return a[t]\u003di({args:o,pre:s,post:s,body:{body:e.join(\"\"),args:l.map((function(t){return{name:t,lvalue:0\u003d\u003d\u003dt.indexOf(\"out\"),rvalue:0\u003d\u003d\u003dt.indexOf(\"inp\"),count:\"junk\"!\u003d\u003dt|0}})),thisVars:[],localVars:[]},funcName:\"fdTemplate\"+t})}},{\"cwise-compiler\":157,dup:181}],473:[function(t,e,r){\"use strict\";function n(t,e){var r\u003dMath.floor(e),n\u003de-r,i\u003d0\u003c\u003dr\u0026\u0026r\u003ct.shape[0],a\u003d0\u003c\u003dr+1\u0026\u0026r+1\u003ct.shape[0];return(1-n)*(i?+t.get(r):0)+n*(a?+t.get(r+1):0)}function i(t,e,r){var n\u003dMath.floor(e),i\u003de-n,a\u003d0\u003c\u003dn\u0026\u0026n\u003ct.shape[0],o\u003d0\u003c\u003dn+1\u0026\u0026n+1\u003ct.shape[0],s\u003dMath.floor(r),l\u003dr-s,c\u003d0\u003c\u003ds\u0026\u0026s\u003ct.shape[1],u\u003d0\u003c\u003ds+1\u0026\u0026s+1\u003ct.shape[1],f\u003da\u0026\u0026c?t.get(n,s):0,h\u003da\u0026\u0026u?t.get(n,s+1):0;return(1-l)*((1-i)*f+i*(o\u0026\u0026c?t.get(n+1,s):0))+l*((1-i)*h+i*(o\u0026\u0026u?t.get(n+1,s+1):0))}function a(t,e,r,n){var i\u003dMath.floor(e),a\u003de-i,o\u003d0\u003c\u003di\u0026\u0026i\u003ct.shape[0],s\u003d0\u003c\u003di+1\u0026\u0026i+1\u003ct.shape[0],l\u003dMath.floor(r),c\u003dr-l,u\u003d0\u003c\u003dl\u0026\u0026l\u003ct.shape[1],f\u003d0\u003c\u003dl+1\u0026\u0026l+1\u003ct.shape[1],h\u003dMath.floor(n),p\u003dn-h,d\u003d0\u003c\u003dh\u0026\u0026h\u003ct.shape[2],m\u003d0\u003c\u003dh+1\u0026\u0026h+1\u003ct.shape[2],g\u003do\u0026\u0026u\u0026\u0026d?t.get(i,l,h):0,v\u003do\u0026\u0026f\u0026\u0026d?t.get(i,l+1,h):0,y\u003ds\u0026\u0026u\u0026\u0026d?t.get(i+1,l,h):0,x\u003ds\u0026\u0026f\u0026\u0026d?t.get(i+1,l+1,h):0,b\u003do\u0026\u0026u\u0026\u0026m?t.get(i,l,h+1):0,_\u003do\u0026\u0026f\u0026\u0026m?t.get(i,l+1,h+1):0;return(1-p)*((1-c)*((1-a)*g+a*y)+c*((1-a)*v+a*x))+p*((1-c)*((1-a)*b+a*(s\u0026\u0026u\u0026\u0026m?t.get(i+1,l,h+1):0))+c*((1-a)*_+a*(s\u0026\u0026f\u0026\u0026m?t.get(i+1,l+1,h+1):0)))}function o(t){var e,r,n\u003d0|t.shape.length,i\u003dnew Array(n),a\u003dnew Array(n),o\u003dnew Array(n),s\u003dnew Array(n);for(e\u003d0;e\u003cn;++e)r\u003d+arguments[e+1],i[e]\u003dMath.floor(r),a[e]\u003dr-i[e],o[e]\u003d0\u003c\u003di[e]\u0026\u0026i[e]\u003ct.shape[e],s[e]\u003d0\u003c\u003di[e]+1\u0026\u0026i[e]+1\u003ct.shape[e];var l,c,u,f\u003d0;t:for(e\u003d0;e\u003c1\u003c\u003cn;++e){for(c\u003d1,u\u003dt.offset,l\u003d0;l\u003cn;++l)if(e\u00261\u003c\u003cl){if(!s[l])continue t;c*\u003da[l],u+\u003dt.stride[l]*(i[l]+1)}else{if(!o[l])continue t;c*\u003d1-a[l],u+\u003dt.stride[l]*i[l]}f+\u003dc*t.data[u]}return f}e.exports\u003dfunction(t,e,r,s){switch(t.shape.length){case 0:return 0;case 1:return n(t,e);case 2:return i(t,e,r);case 3:return a(t,e,r,s);default:return o.apply(void 0,arguments)}},e.exports.d1\u003dn,e.exports.d2\u003di,e.exports.d3\u003da},{}],474:[function(t,e,r){\"use strict\";var n\u003dt(\"cwise-compiler\"),i\u003d{body:\"\",args:[],thisVars:[],localVars:[]};function a(t){if(!t)return i;for(var e\u003d0;e\u003ct.args.length;++e){var r\u003dt.args[e];t.args[e]\u003d0\u003d\u003d\u003de?{name:r,lvalue:!0,rvalue:!!t.rvalue,count:t.count||1}:{name:r,lvalue:!1,rvalue:!0,count:1}}return t.thisVars||(t.thisVars\u003d[]),t.localVars||(t.localVars\u003d[]),t}function o(t){for(var e\u003d[],r\u003d0;r\u003ct.args.length;++r)e.push(\"a\"+r);return new Function(\"P\",[\"return function \",t.funcName,\"_ndarrayops(\",e.join(\",\"),\") {P(\",e.join(\",\"),\");return a0}\"].join(\"\"))(function(t){return n({args:t.args,pre:a(t.pre),body:a(t.body),post:a(t.proc),funcName:t.funcName})}(t))}var s\u003d{add:\"+\",sub:\"-\",mul:\"*\",div:\"/\",mod:\"%\",band:\"\u0026\",bor:\"|\",bxor:\"^\",lshift:\"\u003c\u003c\",rshift:\"\u003e\u003e\",rrshift:\"\u003e\u003e\u003e\"};!function(){for(var t in s){var e\u003ds[t];r[t]\u003do({args:[\"array\",\"array\",\"array\"],body:{args:[\"a\",\"b\",\"c\"],body:\"a\u003db\"+e+\"c\"},funcName:t}),r[t+\"eq\"]\u003do({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a\"+e+\"\u003db\"},rvalue:!0,funcName:t+\"eq\"}),r[t+\"s\"]\u003do({args:[\"array\",\"array\",\"scalar\"],body:{args:[\"a\",\"b\",\"s\"],body:\"a\u003db\"+e+\"s\"},funcName:t+\"s\"}),r[t+\"seq\"]\u003do({args:[\"array\",\"scalar\"],body:{args:[\"a\",\"s\"],body:\"a\"+e+\"\u003ds\"},rvalue:!0,funcName:t+\"seq\"})}}();var l\u003d{not:\"!\",bnot:\"~\",neg:\"-\",recip:\"1.0/\"};!function(){for(var t in l){var e\u003dl[t];r[t]\u003do({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a\u003d\"+e+\"b\"},funcName:t}),r[t+\"eq\"]\u003do({args:[\"array\"],body:{args:[\"a\"],body:\"a\u003d\"+e+\"a\"},rvalue:!0,count:2,funcName:t+\"eq\"})}}();var c\u003d{and:\"\u0026\u0026\",or:\"||\",eq:\"\u003d\u003d\u003d\",neq:\"!\u003d\u003d\",lt:\"\u003c\",gt:\"\u003e\",leq:\"\u003c\u003d\",geq:\"\u003e\u003d\"};!function(){for(var t in c){var e\u003dc[t];r[t]\u003do({args:[\"array\",\"array\",\"array\"],body:{args:[\"a\",\"b\",\"c\"],body:\"a\u003db\"+e+\"c\"},funcName:t}),r[t+\"s\"]\u003do({args:[\"array\",\"array\",\"scalar\"],body:{args:[\"a\",\"b\",\"s\"],body:\"a\u003db\"+e+\"s\"},funcName:t+\"s\"}),r[t+\"eq\"]\u003do({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a\u003da\"+e+\"b\"},rvalue:!0,count:2,funcName:t+\"eq\"}),r[t+\"seq\"]\u003do({args:[\"array\",\"scalar\"],body:{args:[\"a\",\"s\"],body:\"a\u003da\"+e+\"s\"},rvalue:!0,count:2,funcName:t+\"seq\"})}}();var u\u003d[\"abs\",\"acos\",\"asin\",\"atan\",\"ceil\",\"cos\",\"exp\",\"floor\",\"log\",\"round\",\"sin\",\"sqrt\",\"tan\"];!function(){for(var t\u003d0;t\u003cu.length;++t){var e\u003du[t];r[e]\u003do({args:[\"array\",\"array\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a\u003dthis_f(b)\",thisVars:[\"this_f\"]},funcName:e}),r[e+\"eq\"]\u003do({args:[\"array\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\"],body:\"a\u003dthis_f(a)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"eq\"})}}();var f\u003d[\"max\",\"min\",\"atan2\",\"pow\"];!function(){for(var t\u003d0;t\u003cf.length;++t){var e\u003df[t];r[e]\u003do({args:[\"array\",\"array\",\"array\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a\u003dthis_f(b,c)\",thisVars:[\"this_f\"]},funcName:e}),r[e+\"s\"]\u003do({args:[\"array\",\"array\",\"scalar\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a\u003dthis_f(b,c)\",thisVars:[\"this_f\"]},funcName:e+\"s\"}),r[e+\"eq\"]\u003do({args:[\"array\",\"array\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a\u003dthis_f(a,b)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"eq\"}),r[e+\"seq\"]\u003do({args:[\"array\",\"scalar\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a\u003dthis_f(a,b)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"seq\"})}}();var h\u003d[\"atan2\",\"pow\"];!function(){for(var t\u003d0;t\u003ch.length;++t){var e\u003dh[t];r[e+\"op\"]\u003do({args:[\"array\",\"array\",\"array\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a\u003dthis_f(c,b)\",thisVars:[\"this_f\"]},funcName:e+\"op\"}),r[e+\"ops\"]\u003do({args:[\"array\",\"array\",\"scalar\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\",\"c\"],body:\"a\u003dthis_f(c,b)\",thisVars:[\"this_f\"]},funcName:e+\"ops\"}),r[e+\"opeq\"]\u003do({args:[\"array\",\"array\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a\u003dthis_f(b,a)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"opeq\"}),r[e+\"opseq\"]\u003do({args:[\"array\",\"scalar\"],pre:{args:[],body:\"this_f\u003dMath.\"+e,thisVars:[\"this_f\"]},body:{args:[\"a\",\"b\"],body:\"a\u003dthis_f(b,a)\",thisVars:[\"this_f\"]},rvalue:!0,count:2,funcName:e+\"opseq\"})}}(),r.any\u003dn({args:[\"array\"],pre:i,body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:1}],body:\"if(a){return true}\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\"return false\"},funcName:\"any\"}),r.all\u003dn({args:[\"array\"],pre:i,body:{args:[{name:\"x\",lvalue:!1,rvalue:!0,count:1}],body:\"if(!x){return false}\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\"return true\"},funcName:\"all\"}),r.sum\u003dn({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s\u003d0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:1}],body:\"this_s+\u003da\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"sum\"}),r.prod\u003dn({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s\u003d1\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:1}],body:\"this_s*\u003da\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"prod\"}),r.norm2squared\u003dn({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s\u003d0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:2}],body:\"this_s+\u003da*a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"norm2squared\"}),r.norm2\u003dn({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s\u003d0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:2}],body:\"this_s+\u003da*a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return Math.sqrt(this_s)\"},funcName:\"norm2\"}),r.norminf\u003dn({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s\u003d0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:4}],body:\"if(-a\u003ethis_s){this_s\u003d-a}else if(a\u003ethis_s){this_s\u003da}\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"norminf\"}),r.norm1\u003dn({args:[\"array\"],pre:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"this_s\u003d0\"},body:{args:[{name:\"a\",lvalue:!1,rvalue:!0,count:3}],body:\"this_s+\u003da\u003c0?-a:a\",localVars:[],thisVars:[\"this_s\"]},post:{args:[],localVars:[],thisVars:[\"this_s\"],body:\"return this_s\"},funcName:\"norm1\"}),r.sup\u003dn({args:[\"array\"],pre:{body:\"this_h\u003d-Infinity\",args:[],thisVars:[\"this_h\"],localVars:[]},body:{body:\"if(_inline_1_arg0_\u003ethis_h)this_h\u003d_inline_1_arg0_\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_h\"],localVars:[]},post:{body:\"return this_h\",args:[],thisVars:[\"this_h\"],localVars:[]}}),r.inf\u003dn({args:[\"array\"],pre:{body:\"this_h\u003dInfinity\",args:[],thisVars:[\"this_h\"],localVars:[]},body:{body:\"if(_inline_1_arg0_\u003cthis_h)this_h\u003d_inline_1_arg0_\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_h\"],localVars:[]},post:{body:\"return this_h\",args:[],thisVars:[\"this_h\"],localVars:[]}}),r.argmin\u003dn({args:[\"index\",\"array\",\"shape\"],pre:{body:\"{this_v\u003dInfinity;this_i\u003d_inline_0_arg2_.slice(0)}\",args:[{name:\"_inline_0_arg0_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg1_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg2_\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\"this_i\",\"this_v\"],localVars:[]},body:{body:\"{if(_inline_1_arg1_\u003cthis_v){this_v\u003d_inline_1_arg1_;for(var _inline_1_k\u003d0;_inline_1_k\u003c_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]\u003d_inline_1_arg0_[_inline_1_k]}}}\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_i\",\"this_v\"],localVars:[\"_inline_1_k\"]},post:{body:\"{return this_i}\",args:[],thisVars:[\"this_i\"],localVars:[]}}),r.argmax\u003dn({args:[\"index\",\"array\",\"shape\"],pre:{body:\"{this_v\u003d-Infinity;this_i\u003d_inline_0_arg2_.slice(0)}\",args:[{name:\"_inline_0_arg0_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg1_\",lvalue:!1,rvalue:!1,count:0},{name:\"_inline_0_arg2_\",lvalue:!1,rvalue:!0,count:1}],thisVars:[\"this_i\",\"this_v\"],localVars:[]},body:{body:\"{if(_inline_1_arg1_\u003ethis_v){this_v\u003d_inline_1_arg1_;for(var _inline_1_k\u003d0;_inline_1_k\u003c_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]\u003d_inline_1_arg0_[_inline_1_k]}}}\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:2},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:2}],thisVars:[\"this_i\",\"this_v\"],localVars:[\"_inline_1_k\"]},post:{body:\"{return this_i}\",args:[],thisVars:[\"this_i\"],localVars:[]}}),r.random\u003do({args:[\"array\"],pre:{args:[],body:\"this_f\u003dMath.random\",thisVars:[\"this_f\"]},body:{args:[\"a\"],body:\"a\u003dthis_f()\",thisVars:[\"this_f\"]},funcName:\"random\"}),r.assign\u003do({args:[\"array\",\"array\"],body:{args:[\"a\",\"b\"],body:\"a\u003db\"},funcName:\"assign\"}),r.assigns\u003do({args:[\"array\",\"scalar\"],body:{args:[\"a\",\"b\"],body:\"a\u003db\"},funcName:\"assigns\"}),r.equals\u003dn({args:[\"array\",\"array\"],pre:i,body:{args:[{name:\"x\",lvalue:!1,rvalue:!0,count:1},{name:\"y\",lvalue:!1,rvalue:!0,count:1}],body:\"if(x!\u003d\u003dy){return false}\",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:\"return true\"},funcName:\"equals\"})},{\"cwise-compiler\":157}],475:[function(t,e,r){\"use strict\";var n\u003dt(\"ndarray\"),i\u003dt(\"./doConvert.js\");e.exports\u003dfunction(t,e){for(var r\u003d[],a\u003dt,o\u003d1;Array.isArray(a);)r.push(a.length),o*\u003da.length,a\u003da[0];return 0\u003d\u003d\u003dr.length?n():(e||(e\u003dn(new Float64Array(o),r)),i(e,t),e)}},{\"./doConvert.js\":476,ndarray:479}],476:[function(t,e,r){e.exports\u003dt(\"cwise-compiler\")({args:[\"array\",\"scalar\",\"index\"],pre:{body:\"{}\",args:[],thisVars:[],localVars:[]},body:{body:\"{\\nvar _inline_1_v\u003d_inline_1_arg1_,_inline_1_i\\nfor(_inline_1_i\u003d0;_inline_1_i\u003c_inline_1_arg2_.length-1;++_inline_1_i) {\\n_inline_1_v\u003d_inline_1_v[_inline_1_arg2_[_inline_1_i]]\\n}\\n_inline_1_arg0_\u003d_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\\n}\",args:[{name:\"_inline_1_arg0_\",lvalue:!0,rvalue:!1,count:1},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg2_\",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:[\"_inline_1_i\",\"_inline_1_v\"]},post:{body:\"{}\",args:[],thisVars:[],localVars:[]},funcName:\"convert\",blockSize:64})},{\"cwise-compiler\":157}],477:[function(t,e,r){\"use strict\";var n\u003dt(\"typedarray-pool\"),i\u003d32;function a(t){switch(t){case\"uint8\":return[n.mallocUint8,n.freeUint8];case\"uint16\":return[n.mallocUint16,n.freeUint16];case\"uint32\":return[n.mallocUint32,n.freeUint32];case\"int8\":return[n.mallocInt8,n.freeInt8];case\"int16\":return[n.mallocInt16,n.freeInt16];case\"int32\":return[n.mallocInt32,n.freeInt32];case\"float32\":return[n.mallocFloat,n.freeFloat];case\"float64\":return[n.mallocDouble,n.freeDouble];default:return null}}function o(t){for(var e\u003d[],r\u003d0;r\u003ct;++r)e.push(\"s\"+r);for(r\u003d0;r\u003ct;++r)e.push(\"n\"+r);for(r\u003d1;r\u003ct;++r)e.push(\"d\"+r);for(r\u003d1;r\u003ct;++r)e.push(\"e\"+r);for(r\u003d1;r\u003ct;++r)e.push(\"f\"+r);return e}e.exports\u003dfunction(t,e){var r\u003d[\"\u0027use strict\u0027\"],n\u003d[\"ndarraySortWrapper\",t.join(\"d\"),e].join(\"\");r.push([\"function \",n,\"(\",[\"array\"].join(\",\"),\"){\"].join(\"\"));for(var s\u003d[\"data\u003darray.data,offset\u003darray.offset|0,shape\u003darray.shape,stride\u003darray.stride\"],l\u003d0;l\u003ct.length;++l)s.push([\"s\",l,\"\u003dstride[\",l,\"]|0,n\",l,\"\u003dshape[\",l,\"]|0\"].join(\"\"));var c\u003dnew Array(t.length),u\u003d[];for(l\u003d0;l\u003ct.length;++l){0!\u003d\u003d(p\u003dt[l])\u0026\u0026(0\u003d\u003d\u003du.length?c[p]\u003d\"1\":c[p]\u003du.join(\"*\"),u.push(\"n\"+p))}var f\u003d-1,h\u003d-1;for(l\u003d0;l\u003ct.length;++l){var p,d\u003dt[l];0!\u003d\u003dd\u0026\u0026(f\u003e0?s.push([\"d\",d,\"\u003ds\",d,\"-d\",f,\"*n\",f].join(\"\")):s.push([\"d\",d,\"\u003ds\",d].join(\"\")),f\u003dd),0!\u003d\u003d(p\u003dt.length-1-l)\u0026\u0026(h\u003e0?s.push([\"e\",p,\"\u003ds\",p,\"-e\",h,\"*n\",h,\",f\",p,\"\u003d\",c[p],\"-f\",h,\"*n\",h].join(\"\")):s.push([\"e\",p,\"\u003ds\",p,\",f\",p,\"\u003d\",c[p]].join(\"\")),h\u003dp)}r.push(\"var \"+s.join(\",\"));var m\u003d[\"0\",\"n0-1\",\"data\",\"offset\"].concat(o(t.length));r.push([\"if(n0\u003c\u003d\",i,\"){\",\"insertionSort(\",m.join(\",\"),\")}else{\",\"quickSort(\",m.join(\",\"),\")}\"].join(\"\")),r.push(\"}return \"+n);var g\u003dnew Function(\"insertionSort\",\"quickSort\",r.join(\"\\n\")),v\u003dfunction(t,e){var r\u003d[\"\u0027use strict\u0027\"],n\u003d[\"ndarrayInsertionSort\",t.join(\"d\"),e].join(\"\"),i\u003d[\"left\",\"right\",\"data\",\"offset\"].concat(o(t.length)),s\u003da(e),l\u003d[\"i,j,cptr,ptr\u003dleft*s0+offset\"];if(t.length\u003e1){for(var c\u003d[],u\u003d1;u\u003ct.length;++u)l.push(\"i\"+u),c.push(\"n\"+u);s?l.push(\"scratch\u003dmalloc(\"+c.join(\"*\")+\")\"):l.push(\"scratch\u003dnew Array(\"+c.join(\"*\")+\")\"),l.push(\"dptr\",\"sptr\",\"a\",\"b\")}else l.push(\"scratch\");function f(t){return\"generic\"\u003d\u003d\u003de?[\"data.get(\",t,\")\"].join(\"\"):[\"data[\",t,\"]\"].join(\"\")}function h(t,r){return\"generic\"\u003d\u003d\u003de?[\"data.set(\",t,\",\",r,\")\"].join(\"\"):[\"data[\",t,\"]\u003d\",r].join(\"\")}if(r.push([\"function \",n,\"(\",i.join(\",\"),\"){var \",l.join(\",\")].join(\"\"),\"for(i\u003dleft+1;i\u003c\u003dright;++i){\",\"j\u003di;ptr+\u003ds0\",\"cptr\u003dptr\"),t.length\u003e1){r.push(\"dptr\u003d0;sptr\u003dptr\");for(u\u003dt.length-1;u\u003e\u003d0;--u){0!\u003d\u003d(p\u003dt[u])\u0026\u0026r.push([\"for(i\",p,\"\u003d0;i\",p,\"\u003cn\",p,\";++i\",p,\"){\"].join(\"\"))}r.push(\"scratch[dptr++]\u003d\",f(\"sptr\"));for(u\u003d0;u\u003ct.length;++u){0!\u003d\u003d(p\u003dt[u])\u0026\u0026r.push(\"sptr+\u003dd\"+p,\"}\")}r.push(\"__g:while(j--\\x3eleft){\",\"dptr\u003d0\",\"sptr\u003dcptr-s0\");for(u\u003d1;u\u003ct.length;++u)1\u003d\u003d\u003du\u0026\u0026r.push(\"__l:\"),r.push([\"for(i\",u,\"\u003d0;i\",u,\"\u003cn\",u,\";++i\",u,\"){\"].join(\"\"));r.push([\"a\u003d\",f(\"sptr\"),\"\\nb\u003dscratch[dptr]\\nif(a\u003cb){break __g}\\nif(a\u003eb){break __l}\"].join(\"\"));for(u\u003dt.length-1;u\u003e\u003d1;--u)r.push(\"sptr+\u003de\"+u,\"dptr+\u003df\"+u,\"}\");r.push(\"dptr\u003dcptr;sptr\u003dcptr-s0\");for(u\u003dt.length-1;u\u003e\u003d0;--u){0!\u003d\u003d(p\u003dt[u])\u0026\u0026r.push([\"for(i\",p,\"\u003d0;i\",p,\"\u003cn\",p,\";++i\",p,\"){\"].join(\"\"))}r.push(h(\"dptr\",f(\"sptr\")));for(u\u003d0;u\u003ct.length;++u){0!\u003d\u003d(p\u003dt[u])\u0026\u0026r.push([\"dptr+\u003dd\",p,\";sptr+\u003dd\",p].join(\"\"),\"}\")}r.push(\"cptr-\u003ds0\\n}\"),r.push(\"dptr\u003dcptr;sptr\u003d0\");for(u\u003dt.length-1;u\u003e\u003d0;--u){0!\u003d\u003d(p\u003dt[u])\u0026\u0026r.push([\"for(i\",p,\"\u003d0;i\",p,\"\u003cn\",p,\";++i\",p,\"){\"].join(\"\"))}r.push(h(\"dptr\",\"scratch[sptr++]\"));for(u\u003d0;u\u003ct.length;++u){var p;0!\u003d\u003d(p\u003dt[u])\u0026\u0026r.push(\"dptr+\u003dd\"+p,\"}\")}}else r.push(\"scratch\u003d\"+f(\"ptr\"),\"while((j--\\x3eleft)\u0026\u0026(\"+f(\"cptr-s0\")+\"\u003escratch)){\",h(\"cptr\",f(\"cptr-s0\")),\"cptr-\u003ds0\",\"}\",h(\"cptr\",\"scratch\"));return r.push(\"}\"),t.length\u003e1\u0026\u0026s\u0026\u0026r.push(\"free(scratch)\"),r.push(\"} return \"+n),s?new Function(\"malloc\",\"free\",r.join(\"\\n\"))(s[0],s[1]):new Function(r.join(\"\\n\"))()}(t,e),y\u003dfunction(t,e,r){var n\u003d[\"\u0027use strict\u0027\"],s\u003d[\"ndarrayQuickSort\",t.join(\"d\"),e].join(\"\"),l\u003d[\"left\",\"right\",\"data\",\"offset\"].concat(o(t.length)),c\u003da(e),u\u003d0;n.push([\"function \",s,\"(\",l.join(\",\"),\"){\"].join(\"\"));var f\u003d[\"sixth\u003d((right-left+1)/6)|0\",\"index1\u003dleft+sixth\",\"index5\u003dright-sixth\",\"index3\u003d(left+right)\u003e\u003e1\",\"index2\u003dindex3-sixth\",\"index4\u003dindex3+sixth\",\"el1\u003dindex1\",\"el2\u003dindex2\",\"el3\u003dindex3\",\"el4\u003dindex4\",\"el5\u003dindex5\",\"less\u003dleft+1\",\"great\u003dright-1\",\"pivots_are_equal\u003dtrue\",\"tmp\",\"tmp0\",\"x\",\"y\",\"z\",\"k\",\"ptr0\",\"ptr1\",\"ptr2\",\"comp_pivot1\u003d0\",\"comp_pivot2\u003d0\",\"comp\u003d0\"];if(t.length\u003e1){for(var h\u003d[],p\u003d1;p\u003ct.length;++p)h.push(\"n\"+p),f.push(\"i\"+p);for(p\u003d0;p\u003c8;++p)f.push(\"b_ptr\"+p);f.push(\"ptr3\",\"ptr4\",\"ptr5\",\"ptr6\",\"ptr7\",\"pivot_ptr\",\"ptr_shift\",\"elementSize\u003d\"+h.join(\"*\")),c?f.push(\"pivot1\u003dmalloc(elementSize)\",\"pivot2\u003dmalloc(elementSize)\"):f.push(\"pivot1\u003dnew Array(elementSize),pivot2\u003dnew Array(elementSize)\")}else f.push(\"pivot1\",\"pivot2\");function d(t){return[\"(offset+\",t,\"*s0)\"].join(\"\")}function m(t){return\"generic\"\u003d\u003d\u003de?[\"data.get(\",t,\")\"].join(\"\"):[\"data[\",t,\"]\"].join(\"\")}function g(t,r){return\"generic\"\u003d\u003d\u003de?[\"data.set(\",t,\",\",r,\")\"].join(\"\"):[\"data[\",t,\"]\u003d\",r].join(\"\")}function v(e,r,i){if(1\u003d\u003d\u003de.length)n.push(\"ptr0\u003d\"+d(e[0]));else for(var a\u003d0;a\u003ce.length;++a)n.push([\"b_ptr\",a,\"\u003ds0*\",e[a]].join(\"\"));r\u0026\u0026n.push(\"pivot_ptr\u003d0\"),n.push(\"ptr_shift\u003doffset\");for(a\u003dt.length-1;a\u003e\u003d0;--a){0!\u003d\u003d(o\u003dt[a])\u0026\u0026n.push([\"for(i\",o,\"\u003d0;i\",o,\"\u003cn\",o,\";++i\",o,\"){\"].join(\"\"))}if(e.length\u003e1)for(a\u003d0;a\u003ce.length;++a)n.push([\"ptr\",a,\"\u003db_ptr\",a,\"+ptr_shift\"].join(\"\"));n.push(i),r\u0026\u0026n.push(\"++pivot_ptr\");for(a\u003d0;a\u003ct.length;++a){var o;0!\u003d\u003d(o\u003dt[a])\u0026\u0026(e.length\u003e1?n.push(\"ptr_shift+\u003dd\"+o):n.push(\"ptr0+\u003dd\"+o),n.push(\"}\"))}}function y(e,r,i,a){if(1\u003d\u003d\u003dr.length)n.push(\"ptr0\u003d\"+d(r[0]));else{for(var o\u003d0;o\u003cr.length;++o)n.push([\"b_ptr\",o,\"\u003ds0*\",r[o]].join(\"\"));n.push(\"ptr_shift\u003doffset\")}i\u0026\u0026n.push(\"pivot_ptr\u003d0\"),e\u0026\u0026n.push(e+\":\");for(o\u003d1;o\u003ct.length;++o)n.push([\"for(i\",o,\"\u003d0;i\",o,\"\u003cn\",o,\";++i\",o,\"){\"].join(\"\"));if(r.length\u003e1)for(o\u003d0;o\u003cr.length;++o)n.push([\"ptr\",o,\"\u003db_ptr\",o,\"+ptr_shift\"].join(\"\"));n.push(a);for(o\u003dt.length-1;o\u003e\u003d1;--o)i\u0026\u0026n.push(\"pivot_ptr+\u003df\"+o),r.length\u003e1?n.push(\"ptr_shift+\u003de\"+o):n.push(\"ptr0+\u003de\"+o),n.push(\"}\")}function x(){t.length\u003e1\u0026\u0026c\u0026\u0026n.push(\"free(pivot1)\",\"free(pivot2)\")}function b(e,r){var i\u003d\"el\"+e,a\u003d\"el\"+r;if(t.length\u003e1){var o\u003d\"__l\"+ ++u;y(o,[i,a],!1,[\"comp\u003d\",m(\"ptr0\"),\"-\",m(\"ptr1\"),\"\\n\",\"if(comp\u003e0){tmp0\u003d\",i,\";\",i,\"\u003d\",a,\";\",a,\"\u003dtmp0;break \",o,\"}\\n\",\"if(comp\u003c0){break \",o,\"}\"].join(\"\"))}else n.push([\"if(\",m(d(i)),\"\u003e\",m(d(a)),\"){tmp0\u003d\",i,\";\",i,\"\u003d\",a,\";\",a,\"\u003dtmp0}\"].join(\"\"))}function _(e,r){t.length\u003e1?v([e,r],!1,g(\"ptr0\",m(\"ptr1\"))):n.push(g(d(e),m(d(r))))}function w(e,r,i){if(t.length\u003e1){var a\u003d\"__l\"+ ++u;y(a,[r],!0,[e,\"\u003d\",m(\"ptr0\"),\"-pivot\",i,\"[pivot_ptr]\\n\",\"if(\",e,\"!\u003d\u003d0){break \",a,\"}\"].join(\"\"))}else n.push([e,\"\u003d\",m(d(r)),\"-pivot\",i].join(\"\"))}function T(e,r){t.length\u003e1?v([e,r],!1,[\"tmp\u003d\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",\"tmp\")].join(\"\")):n.push([\"ptr0\u003d\",d(e),\"\\n\",\"ptr1\u003d\",d(r),\"\\n\",\"tmp\u003d\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",\"tmp\")].join(\"\"))}function k(e,r,i){t.length\u003e1?(v([e,r,i],!1,[\"tmp\u003d\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",m(\"ptr2\")),\"\\n\",g(\"ptr2\",\"tmp\")].join(\"\")),n.push(\"++\"+r,\"--\"+i)):n.push([\"ptr0\u003d\",d(e),\"\\n\",\"ptr1\u003d\",d(r),\"\\n\",\"ptr2\u003d\",d(i),\"\\n\",\"++\",r,\"\\n\",\"--\",i,\"\\n\",\"tmp\u003d\",m(\"ptr0\"),\"\\n\",g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",m(\"ptr2\")),\"\\n\",g(\"ptr2\",\"tmp\")].join(\"\"))}function M(t,e){T(t,e),n.push(\"--\"+e)}function A(e,r,i){t.length\u003e1?v([e,r],!0,[g(\"ptr0\",m(\"ptr1\")),\"\\n\",g(\"ptr1\",[\"pivot\",i,\"[pivot_ptr]\"].join(\"\"))].join(\"\")):n.push(g(d(e),m(d(r))),g(d(r),\"pivot\"+i))}function S(e,r){n.push([\"if((\",r,\"-\",e,\")\u003c\u003d\",i,\"){\\n\",\"insertionSort(\",e,\",\",r,\",data,offset,\",o(t.length).join(\",\"),\")\\n\",\"}else{\\n\",s,\"(\",e,\",\",r,\",data,offset,\",o(t.length).join(\",\"),\")\\n\",\"}\"].join(\"\"))}function E(e,r,i){t.length\u003e1?(n.push([\"__l\",++u,\":while(true){\"].join(\"\")),v([e],!0,[\"if(\",m(\"ptr0\"),\"!\u003d\u003dpivot\",r,\"[pivot_ptr]){break __l\",u,\"}\"].join(\"\")),n.push(i,\"}\")):n.push([\"while(\",m(d(e)),\"\u003d\u003d\u003dpivot\",r,\"){\",i,\"}\"].join(\"\"))}return n.push(\"var \"+f.join(\",\")),b(1,2),b(4,5),b(1,3),b(2,3),b(1,4),b(3,4),b(2,5),b(2,3),b(4,5),t.length\u003e1?v([\"el1\",\"el2\",\"el3\",\"el4\",\"el5\",\"index1\",\"index3\",\"index5\"],!0,[\"pivot1[pivot_ptr]\u003d\",m(\"ptr1\"),\"\\n\",\"pivot2[pivot_ptr]\u003d\",m(\"ptr3\"),\"\\n\",\"pivots_are_equal\u003dpivots_are_equal\u0026\u0026(pivot1[pivot_ptr]\u003d\u003d\u003dpivot2[pivot_ptr])\\n\",\"x\u003d\",m(\"ptr0\"),\"\\n\",\"y\u003d\",m(\"ptr2\"),\"\\n\",\"z\u003d\",m(\"ptr4\"),\"\\n\",g(\"ptr5\",\"x\"),\"\\n\",g(\"ptr6\",\"y\"),\"\\n\",g(\"ptr7\",\"z\")].join(\"\")):n.push([\"pivot1\u003d\",m(d(\"el2\")),\"\\n\",\"pivot2\u003d\",m(d(\"el4\")),\"\\n\",\"pivots_are_equal\u003dpivot1\u003d\u003d\u003dpivot2\\n\",\"x\u003d\",m(d(\"el1\")),\"\\n\",\"y\u003d\",m(d(\"el3\")),\"\\n\",\"z\u003d\",m(d(\"el5\")),\"\\n\",g(d(\"index1\"),\"x\"),\"\\n\",g(d(\"index3\"),\"y\"),\"\\n\",g(d(\"index5\"),\"z\")].join(\"\")),_(\"index2\",\"left\"),_(\"index4\",\"right\"),n.push(\"if(pivots_are_equal){\"),n.push(\"for(k\u003dless;k\u003c\u003dgreat;++k){\"),w(\"comp\",\"k\",1),n.push(\"if(comp\u003d\u003d\u003d0){continue}\"),n.push(\"if(comp\u003c0){\"),n.push(\"if(k!\u003d\u003dless){\"),T(\"k\",\"less\"),n.push(\"}\"),n.push(\"++less\"),n.push(\"}else{\"),n.push(\"while(true){\"),w(\"comp\",\"great\",1),n.push(\"if(comp\u003e0){\"),n.push(\"great--\"),n.push(\"}else if(comp\u003c0){\"),k(\"k\",\"less\",\"great\"),n.push(\"break\"),n.push(\"}else{\"),M(\"k\",\"great\"),n.push(\"break\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}else{\"),n.push(\"for(k\u003dless;k\u003c\u003dgreat;++k){\"),w(\"comp_pivot1\",\"k\",1),n.push(\"if(comp_pivot1\u003c0){\"),n.push(\"if(k!\u003d\u003dless){\"),T(\"k\",\"less\"),n.push(\"}\"),n.push(\"++less\"),n.push(\"}else{\"),w(\"comp_pivot2\",\"k\",2),n.push(\"if(comp_pivot2\u003e0){\"),n.push(\"while(true){\"),w(\"comp\",\"great\",2),n.push(\"if(comp\u003e0){\"),n.push(\"if(--great\u003ck){break}\"),n.push(\"continue\"),n.push(\"}else{\"),w(\"comp\",\"great\",1),n.push(\"if(comp\u003c0){\"),k(\"k\",\"less\",\"great\"),n.push(\"}else{\"),M(\"k\",\"great\"),n.push(\"}\"),n.push(\"break\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),A(\"left\",\"(less-1)\",1),A(\"right\",\"(great+1)\",2),S(\"left\",\"(less-2)\"),S(\"(great+2)\",\"right\"),n.push(\"if(pivots_are_equal){\"),x(),n.push(\"return\"),n.push(\"}\"),n.push(\"if(less\u003cindex1\u0026\u0026great\u003eindex5){\"),E(\"less\",1,\"++less\"),E(\"great\",2,\"--great\"),n.push(\"for(k\u003dless;k\u003c\u003dgreat;++k){\"),w(\"comp_pivot1\",\"k\",1),n.push(\"if(comp_pivot1\u003d\u003d\u003d0){\"),n.push(\"if(k!\u003d\u003dless){\"),T(\"k\",\"less\"),n.push(\"}\"),n.push(\"++less\"),n.push(\"}else{\"),w(\"comp_pivot2\",\"k\",2),n.push(\"if(comp_pivot2\u003d\u003d\u003d0){\"),n.push(\"while(true){\"),w(\"comp\",\"great\",2),n.push(\"if(comp\u003d\u003d\u003d0){\"),n.push(\"if(--great\u003ck){break}\"),n.push(\"continue\"),n.push(\"}else{\"),w(\"comp\",\"great\",1),n.push(\"if(comp\u003c0){\"),k(\"k\",\"less\",\"great\"),n.push(\"}else{\"),M(\"k\",\"great\"),n.push(\"}\"),n.push(\"break\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),n.push(\"}\"),x(),S(\"less\",\"great\"),n.push(\"}return \"+s),t.length\u003e1\u0026\u0026c?new Function(\"insertionSort\",\"malloc\",\"free\",n.join(\"\\n\"))(r,c[0],c[1]):new Function(\"insertionSort\",n.join(\"\\n\"))(r)}(t,e,v);return g(v,y)}},{\"typedarray-pool\":613}],478:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/compile_sort.js\"),i\u003d{};e.exports\u003dfunction(t){var e\u003dt.order,r\u003dt.dtype,a\u003d[e,r].join(\":\"),o\u003di[a];return o||(i[a]\u003do\u003dn(e,r)),o(t),t}},{\"./lib/compile_sort.js\":477}],479:[function(t,e,r){var n\u003dt(\"iota-array\"),i\u003dt(\"is-buffer\"),a\u003d\"undefined\"!\u003dtypeof Float64Array;function o(t,e){return t[0]-e[0]}function s(){var t,e\u003dthis.stride,r\u003dnew Array(e.length);for(t\u003d0;t\u003cr.length;++t)r[t]\u003d[Math.abs(e[t]),t];r.sort(o);var n\u003dnew Array(r.length);for(t\u003d0;t\u003cn.length;++t)n[t]\u003dr[t][1];return n}function l(t,e){var r\u003d[\"View\",e,\"d\",t].join(\"\");e\u003c0\u0026\u0026(r\u003d\"View_Nil\"+t);var i\u003d\"generic\"\u003d\u003d\u003dt;if(-1\u003d\u003d\u003de){var a\u003d\"function \"+r+\"(a){this.data\u003da;};var proto\u003d\"+r+\".prototype;proto.dtype\u003d\u0027\"+t+\"\u0027;proto.index\u003dfunction(){return -1};proto.size\u003d0;proto.dimension\u003d-1;proto.shape\u003dproto.stride\u003dproto.order\u003d[];proto.lo\u003dproto.hi\u003dproto.transpose\u003dproto.step\u003dfunction(){return new \"+r+\"(this.data);};proto.get\u003dproto.set\u003dfunction(){};proto.pick\u003dfunction(){return null};return function construct_\"+r+\"(a){return new \"+r+\"(a);}\";return new Function(a)()}if(0\u003d\u003d\u003de){a\u003d\"function \"+r+\"(a,d) {this.data \u003d a;this.offset \u003d d};var proto\u003d\"+r+\".prototype;proto.dtype\u003d\u0027\"+t+\"\u0027;proto.index\u003dfunction(){return this.offset};proto.dimension\u003d0;proto.size\u003d1;proto.shape\u003dproto.stride\u003dproto.order\u003d[];proto.lo\u003dproto.hi\u003dproto.transpose\u003dproto.step\u003dfunction \"+r+\"_copy() {return new \"+r+\"(this.data,this.offset)};proto.pick\u003dfunction \"+r+\"_pick(){return TrivialArray(this.data);};proto.valueOf\u003dproto.get\u003dfunction \"+r+\"_get(){return \"+(i?\"this.data.get(this.offset)\":\"this.data[this.offset]\")+\"};proto.set\u003dfunction \"+r+\"_set(v){return \"+(i?\"this.data.set(this.offset,v)\":\"this.data[this.offset]\u003dv\")+\"};return function construct_\"+r+\"(a,b,c,d){return new \"+r+\"(a,d)}\";return new Function(\"TrivialArray\",a)(c[t][0])}a\u003d[\"\u0027use strict\u0027\"];var o\u003dn(e),l\u003do.map((function(t){return\"i\"+t})),u\u003d\"this.offset+\"+o.map((function(t){return\"this.stride[\"+t+\"]*i\"+t})).join(\"+\"),f\u003do.map((function(t){return\"b\"+t})).join(\",\"),h\u003do.map((function(t){return\"c\"+t})).join(\",\");a.push(\"function \"+r+\"(a,\"+f+\",\"+h+\",d){this.data\u003da\",\"this.shape\u003d[\"+f+\"]\",\"this.stride\u003d[\"+h+\"]\",\"this.offset\u003dd|0}\",\"var proto\u003d\"+r+\".prototype\",\"proto.dtype\u003d\u0027\"+t+\"\u0027\",\"proto.dimension\u003d\"+e),a.push(\"Object.defineProperty(proto,\u0027size\u0027,{get:function \"+r+\"_size(){return \"+o.map((function(t){return\"this.shape[\"+t+\"]\"})).join(\"*\"),\"}})\"),1\u003d\u003d\u003de?a.push(\"proto.order\u003d[0]\"):(a.push(\"Object.defineProperty(proto,\u0027order\u0027,{get:\"),e\u003c4?(a.push(\"function \"+r+\"_order(){\"),2\u003d\u003d\u003de?a.push(\"return (Math.abs(this.stride[0])\u003eMath.abs(this.stride[1]))?[1,0]:[0,1]}})\"):3\u003d\u003d\u003de\u0026\u0026a.push(\"var s0\u003dMath.abs(this.stride[0]),s1\u003dMath.abs(this.stride[1]),s2\u003dMath.abs(this.stride[2]);if(s0\u003es1){if(s1\u003es2){return [2,1,0];}else if(s0\u003es2){return [1,2,0];}else{return [1,0,2];}}else if(s0\u003es2){return [2,0,1];}else if(s2\u003es1){return [0,1,2];}else{return [0,2,1];}}})\")):a.push(\"ORDER})\")),a.push(\"proto.set\u003dfunction \"+r+\"_set(\"+l.join(\",\")+\",v){\"),i?a.push(\"return this.data.set(\"+u+\",v)}\"):a.push(\"return this.data[\"+u+\"]\u003dv}\"),a.push(\"proto.get\u003dfunction \"+r+\"_get(\"+l.join(\",\")+\"){\"),i?a.push(\"return this.data.get(\"+u+\")}\"):a.push(\"return this.data[\"+u+\"]}\"),a.push(\"proto.index\u003dfunction \"+r+\"_index(\",l.join(),\"){return \"+u+\"}\"),a.push(\"proto.hi\u003dfunction \"+r+\"_hi(\"+l.join(\",\")+\"){return new \"+r+\"(this.data,\"+o.map((function(t){return[\"(typeof i\",t,\"!\u003d\u003d\u0027number\u0027||i\",t,\"\u003c0)?this.shape[\",t,\"]:i\",t,\"|0\"].join(\"\")})).join(\",\")+\",\"+o.map((function(t){return\"this.stride[\"+t+\"]\"})).join(\",\")+\",this.offset)}\");var p\u003do.map((function(t){return\"a\"+t+\"\u003dthis.shape[\"+t+\"]\"})),d\u003do.map((function(t){return\"c\"+t+\"\u003dthis.stride[\"+t+\"]\"}));a.push(\"proto.lo\u003dfunction \"+r+\"_lo(\"+l.join(\",\")+\"){var b\u003dthis.offset,d\u003d0,\"+p.join(\",\")+\",\"+d.join(\",\"));for(var m\u003d0;m\u003ce;++m)a.push(\"if(typeof i\"+m+\"\u003d\u003d\u003d\u0027number\u0027\u0026\u0026i\"+m+\"\u003e\u003d0){d\u003di\"+m+\"|0;b+\u003dc\"+m+\"*d;a\"+m+\"-\u003dd}\");a.push(\"return new \"+r+\"(this.data,\"+o.map((function(t){return\"a\"+t})).join(\",\")+\",\"+o.map((function(t){return\"c\"+t})).join(\",\")+\",b)}\"),a.push(\"proto.step\u003dfunction \"+r+\"_step(\"+l.join(\",\")+\"){var \"+o.map((function(t){return\"a\"+t+\"\u003dthis.shape[\"+t+\"]\"})).join(\",\")+\",\"+o.map((function(t){return\"b\"+t+\"\u003dthis.stride[\"+t+\"]\"})).join(\",\")+\",c\u003dthis.offset,d\u003d0,ceil\u003dMath.ceil\");for(m\u003d0;m\u003ce;++m)a.push(\"if(typeof i\"+m+\"\u003d\u003d\u003d\u0027number\u0027){d\u003di\"+m+\"|0;if(d\u003c0){c+\u003db\"+m+\"*(a\"+m+\"-1);a\"+m+\"\u003dceil(-a\"+m+\"/d)}else{a\"+m+\"\u003dceil(a\"+m+\"/d)}b\"+m+\"*\u003dd}\");a.push(\"return new \"+r+\"(this.data,\"+o.map((function(t){return\"a\"+t})).join(\",\")+\",\"+o.map((function(t){return\"b\"+t})).join(\",\")+\",c)}\");var g\u003dnew Array(e),v\u003dnew Array(e);for(m\u003d0;m\u003ce;++m)g[m]\u003d\"a[i\"+m+\"]\",v[m]\u003d\"b[i\"+m+\"]\";a.push(\"proto.transpose\u003dfunction \"+r+\"_transpose(\"+l+\"){\"+l.map((function(t,e){return t+\"\u003d(\"+t+\"\u003d\u003d\u003dundefined?\"+e+\":\"+t+\"|0)\"})).join(\";\"),\"var a\u003dthis.shape,b\u003dthis.stride;return new \"+r+\"(this.data,\"+g.join(\",\")+\",\"+v.join(\",\")+\",this.offset)}\"),a.push(\"proto.pick\u003dfunction \"+r+\"_pick(\"+l+\"){var a\u003d[],b\u003d[],c\u003dthis.offset\");for(m\u003d0;m\u003ce;++m)a.push(\"if(typeof i\"+m+\"\u003d\u003d\u003d\u0027number\u0027\u0026\u0026i\"+m+\"\u003e\u003d0){c\u003d(c+this.stride[\"+m+\"]*i\"+m+\")|0}else{a.push(this.shape[\"+m+\"]);b.push(this.stride[\"+m+\"])}\");return a.push(\"var ctor\u003dCTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}\"),a.push(\"return function construct_\"+r+\"(data,shape,stride,offset){return new \"+r+\"(data,\"+o.map((function(t){return\"shape[\"+t+\"]\"})).join(\",\")+\",\"+o.map((function(t){return\"stride[\"+t+\"]\"})).join(\",\")+\",offset)}\"),new Function(\"CTOR_LIST\",\"ORDER\",a.join(\"\\n\"))(c[t],s)}var c\u003d{float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],bigint64:[],biguint64:[],buffer:[],generic:[]};e.exports\u003dfunction(t,e,r,n){if(void 0\u003d\u003d\u003dt)return(0,c.array[0])([]);\"number\"\u003d\u003dtypeof t\u0026\u0026(t\u003d[t]),void 0\u003d\u003d\u003de\u0026\u0026(e\u003d[t.length]);var o\u003de.length;if(void 0\u003d\u003d\u003dr){r\u003dnew Array(o);for(var s\u003do-1,u\u003d1;s\u003e\u003d0;--s)r[s]\u003du,u*\u003de[s]}if(void 0\u003d\u003d\u003dn){n\u003d0;for(s\u003d0;s\u003co;++s)r[s]\u003c0\u0026\u0026(n-\u003d(e[s]-1)*r[s])}for(var f\u003dfunction(t){if(i(t))return\"buffer\";if(a)switch(Object.prototype.toString.call(t)){case\"[object Float64Array]\":return\"float64\";case\"[object Float32Array]\":return\"float32\";case\"[object Int8Array]\":return\"int8\";case\"[object Int16Array]\":return\"int16\";case\"[object Int32Array]\":return\"int32\";case\"[object Uint8Array]\":return\"uint8\";case\"[object Uint16Array]\":return\"uint16\";case\"[object Uint32Array]\":return\"uint32\";case\"[object Uint8ClampedArray]\":return\"uint8_clamped\";case\"[object BigInt64Array]\":return\"bigint64\";case\"[object BigUint64Array]\":return\"biguint64\"}return Array.isArray(t)?\"array\":\"generic\"}(t),h\u003dc[f];h.length\u003c\u003do+1;)h.push(l(f,h.length-1));return(0,h[o+1])(t,e,r,n)}},{\"iota-array\":447,\"is-buffer\":449}],480:[function(t,e,r){\"use strict\";var n\u003dt(\"double-bits\"),i\u003dMath.pow(2,-1074);e.exports\u003dfunction(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t\u003d\u003d\u003de)return t;if(0\u003d\u003d\u003dt)return e\u003c0?-i:i;var r\u003dn.hi(t),a\u003dn.lo(t);e\u003et\u003d\u003dt\u003e0?a\u003d\u003d\u003d-1\u003e\u003e\u003e0?(r+\u003d1,a\u003d0):a+\u003d1:0\u003d\u003d\u003da?(a\u003d-1\u003e\u003e\u003e0,r-\u003d1):a-\u003d1;return n.pack(a,r)}},{\"double-bits\":178}],481:[function(t,e,r){var n\u003dMath.PI,i\u003dc(120);function a(t,e,r,n){return[\"C\",t,e,r,n,r,n]}function o(t,e,r,n,i,a){return[\"C\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}function s(t,e,r,a,o,c,u,f,h,p){if(p)T\u003dp[0],k\u003dp[1],_\u003dp[2],w\u003dp[3];else{var d\u003dl(t,e,-o);t\u003dd.x,e\u003dd.y;var m\u003d(t-(f\u003d(d\u003dl(f,h,-o)).x))/2,g\u003d(e-(h\u003dd.y))/2,v\u003dm*m/(r*r)+g*g/(a*a);v\u003e1\u0026\u0026(r*\u003dv\u003dMath.sqrt(v),a*\u003dv);var y\u003dr*r,x\u003da*a,b\u003d(c\u003d\u003du?-1:1)*Math.sqrt(Math.abs((y*x-y*g*g-x*m*m)/(y*g*g+x*m*m)));b\u003d\u003d1/0\u0026\u0026(b\u003d1);var _\u003db*r*g/a+(t+f)/2,w\u003db*-a*m/r+(e+h)/2,T\u003dMath.asin(((e-w)/a).toFixed(9)),k\u003dMath.asin(((h-w)/a).toFixed(9));(T\u003dt\u003c_?n-T:T)\u003c0\u0026\u0026(T\u003d2*n+T),(k\u003df\u003c_?n-k:k)\u003c0\u0026\u0026(k\u003d2*n+k),u\u0026\u0026T\u003ek\u0026\u0026(T-\u003d2*n),!u\u0026\u0026k\u003eT\u0026\u0026(k-\u003d2*n)}if(Math.abs(k-T)\u003ei){var M\u003dk,A\u003df,S\u003dh;k\u003dT+i*(u\u0026\u0026k\u003eT?1:-1);var E\u003ds(f\u003d_+r*Math.cos(k),h\u003dw+a*Math.sin(k),r,a,o,0,u,A,S,[k,M,_,w])}var L\u003dMath.tan((k-T)/4),C\u003d4/3*r*L,P\u003d4/3*a*L,I\u003d[2*t-(t+C*Math.sin(T)),2*e-(e-P*Math.cos(T)),f+C*Math.sin(k),h-P*Math.cos(k),f,h];if(p)return I;E\u0026\u0026(I\u003dI.concat(E));for(var O\u003d0;O\u003cI.length;){var z\u003dl(I[O],I[O+1],o);I[O++]\u003dz.x,I[O++]\u003dz.y}return I}function l(t,e,r){return{x:t*Math.cos(r)-e*Math.sin(r),y:t*Math.sin(r)+e*Math.cos(r)}}function c(t){return t*(n/180)}e.exports\u003dfunction(t){for(var e,r\u003d[],n\u003d0,i\u003d0,l\u003d0,u\u003d0,f\u003dnull,h\u003dnull,p\u003d0,d\u003d0,m\u003d0,g\u003dt.length;m\u003cg;m++){var v\u003dt[m],y\u003dv[0];switch(y){case\"M\":l\u003dv[1],u\u003dv[2];break;case\"A\":(v\u003ds(p,d,v[1],v[2],c(v[3]),v[4],v[5],v[6],v[7])).unshift(\"C\"),v.length\u003e7\u0026\u0026(r.push(v.splice(0,7)),v.unshift(\"C\"));break;case\"S\":var x\u003dp,b\u003dd;\"C\"!\u003de\u0026\u0026\"S\"!\u003de||(x+\u003dx-n,b+\u003db-i),v\u003d[\"C\",x,b,v[1],v[2],v[3],v[4]];break;case\"T\":\"Q\"\u003d\u003de||\"T\"\u003d\u003de?(f\u003d2*p-f,h\u003d2*d-h):(f\u003dp,h\u003dd),v\u003do(p,d,f,h,v[1],v[2]);break;case\"Q\":f\u003dv[1],h\u003dv[2],v\u003do(p,d,v[1],v[2],v[3],v[4]);break;case\"L\":v\u003da(p,d,v[1],v[2]);break;case\"H\":v\u003da(p,d,v[1],d);break;case\"V\":v\u003da(p,d,p,v[1]);break;case\"Z\":v\u003da(p,d,l,u)}e\u003dy,p\u003dv[v.length-2],d\u003dv[v.length-1],v.length\u003e4?(n\u003dv[v.length-4],i\u003dv[v.length-3]):(n\u003dp,i\u003dd),r.push(v)}return r}},{}],482:[function(t,e,r){r.vertexNormals\u003dfunction(t,e,r){for(var n\u003de.length,i\u003dnew Array(n),a\u003dvoid 0\u003d\u003d\u003dr?1e-6:r,o\u003d0;o\u003cn;++o)i[o]\u003d[0,0,0];for(o\u003d0;o\u003ct.length;++o)for(var s\u003dt[o],l\u003d0,c\u003ds[s.length-1],u\u003ds[0],f\u003d0;f\u003cs.length;++f){l\u003dc,c\u003du,u\u003ds[(f+1)%s.length];for(var h\u003de[l],p\u003de[c],d\u003de[u],m\u003dnew Array(3),g\u003d0,v\u003dnew Array(3),y\u003d0,x\u003d0;x\u003c3;++x)m[x]\u003dh[x]-p[x],g+\u003dm[x]*m[x],v[x]\u003dd[x]-p[x],y+\u003dv[x]*v[x];if(g*y\u003ea){var b\u003di[c],_\u003d1/Math.sqrt(g*y);for(x\u003d0;x\u003c3;++x){var w\u003d(x+1)%3,T\u003d(x+2)%3;b[x]+\u003d_*(v[w]*m[T]-v[T]*m[w])}}}for(o\u003d0;o\u003cn;++o){b\u003di[o];var k\u003d0;for(x\u003d0;x\u003c3;++x)k+\u003db[x]*b[x];if(k\u003ea)for(_\u003d1/Math.sqrt(k),x\u003d0;x\u003c3;++x)b[x]*\u003d_;else for(x\u003d0;x\u003c3;++x)b[x]\u003d0}return i},r.faceNormals\u003dfunction(t,e,r){for(var n\u003dt.length,i\u003dnew Array(n),a\u003dvoid 0\u003d\u003d\u003dr?1e-6:r,o\u003d0;o\u003cn;++o){for(var s\u003dt[o],l\u003dnew Array(3),c\u003d0;c\u003c3;++c)l[c]\u003de[s[c]];var u\u003dnew Array(3),f\u003dnew Array(3);for(c\u003d0;c\u003c3;++c)u[c]\u003dl[1][c]-l[0][c],f[c]\u003dl[2][c]-l[0][c];var h\u003dnew Array(3),p\u003d0;for(c\u003d0;c\u003c3;++c){var d\u003d(c+1)%3,m\u003d(c+2)%3;h[c]\u003du[d]*f[m]-u[m]*f[d],p+\u003dh[c]*h[c]}p\u003dp\u003ea?1/Math.sqrt(p):0;for(c\u003d0;c\u003c3;++c)h[c]*\u003dp;i[o]\u003dh}return i}},{}],483:[function(t,e,r){\n/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\"use strict\";var n\u003dObject.getOwnPropertySymbols,i\u003dObject.prototype.hasOwnProperty,a\u003dObject.prototype.propertyIsEnumerable;function o(t){if(null\u003d\u003dt)throw new TypeError(\"Object.assign cannot be called with null or undefined\");return Object(t)}e.exports\u003dfunction(){try{if(!Object.assign)return!1;var t\u003dnew String(\"abc\");if(t[5]\u003d\"de\",\"5\"\u003d\u003d\u003dObject.getOwnPropertyNames(t)[0])return!1;for(var e\u003d{},r\u003d0;r\u003c10;r++)e[\"_\"+String.fromCharCode(r)]\u003dr;if(\"0123456789\"!\u003d\u003dObject.getOwnPropertyNames(e).map((function(t){return e[t]})).join(\"\"))return!1;var n\u003d{};return\"abcdefghijklmnopqrst\".split(\"\").forEach((function(t){n[t]\u003dt})),\"abcdefghijklmnopqrst\"\u003d\u003d\u003dObject.keys(Object.assign({},n)).join(\"\")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,s,l\u003do(t),c\u003d1;c\u003carguments.length;c++){for(var u in r\u003dObject(arguments[c]))i.call(r,u)\u0026\u0026(l[u]\u003dr[u]);if(n){s\u003dn(r);for(var f\u003d0;f\u003cs.length;f++)a.call(r,s[f])\u0026\u0026(l[s[f]]\u003dr[s[f]])}}return l}},{}],484:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i,a,o,s,l,c){var u\u003de+a+c;if(f\u003e0){var f\u003dMath.sqrt(u+1);t[0]\u003d.5*(o-l)/f,t[1]\u003d.5*(s-n)/f,t[2]\u003d.5*(r-a)/f,t[3]\u003d.5*f}else{var h\u003dMath.max(e,a,c);f\u003dMath.sqrt(2*h-u+1);e\u003e\u003dh?(t[0]\u003d.5*f,t[1]\u003d.5*(i+r)/f,t[2]\u003d.5*(s+n)/f,t[3]\u003d.5*(o-l)/f):a\u003e\u003dh?(t[0]\u003d.5*(r+i)/f,t[1]\u003d.5*f,t[2]\u003d.5*(l+o)/f,t[3]\u003d.5*(s-n)/f):(t[0]\u003d.5*(n+s)/f,t[1]\u003d.5*(o+l)/f,t[2]\u003d.5*f,t[3]\u003d.5*(r-i)/f)}return t}},{}],485:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003d(t\u003dt||{}).center||[0,0,0],r\u003dt.rotation||[0,0,0,1],n\u003dt.radius||1;e\u003d[].slice.call(e,0,3),u(r\u003d[].slice.call(r,0,4),r);var i\u003dnew f(r,e,Math.log(n));i.setDistanceLimits(t.zoomMin,t.zoomMax),(\"eye\"in t||\"up\"in t)\u0026\u0026i.lookAt(0,t.eye,t.center,t.up);return i};var n\u003dt(\"filtered-vector\"),i\u003dt(\"gl-mat4/lookAt\"),a\u003dt(\"gl-mat4/fromQuat\"),o\u003dt(\"gl-mat4/invert\"),s\u003dt(\"./lib/quatFromFrame\");function l(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function c(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function u(t,e){var r\u003de[0],n\u003de[1],i\u003de[2],a\u003de[3],o\u003dc(r,n,i,a);o\u003e1e-6?(t[0]\u003dr/o,t[1]\u003dn/o,t[2]\u003di/o,t[3]\u003da/o):(t[0]\u003dt[1]\u003dt[2]\u003d0,t[3]\u003d1)}function f(t,e,r){this.radius\u003dn([r]),this.center\u003dn(e),this.rotation\u003dn(t),this.computedRadius\u003dthis.radius.curve(0),this.computedCenter\u003dthis.center.curve(0),this.computedRotation\u003dthis.rotation.curve(0),this.computedUp\u003d[.1,0,0],this.computedEye\u003d[.1,0,0],this.computedMatrix\u003d[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}var h\u003df.prototype;h.lastT\u003dfunction(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},h.recalcMatrix\u003dfunction(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e\u003dthis.computedRotation;u(e,e);var r\u003dthis.computedMatrix;a(r,e);var n\u003dthis.computedCenter,i\u003dthis.computedEye,o\u003dthis.computedUp,s\u003dMath.exp(this.computedRadius[0]);i[0]\u003dn[0]+s*r[2],i[1]\u003dn[1]+s*r[6],i[2]\u003dn[2]+s*r[10],o[0]\u003dr[1],o[1]\u003dr[5],o[2]\u003dr[9];for(var l\u003d0;l\u003c3;++l){for(var c\u003d0,f\u003d0;f\u003c3;++f)c+\u003dr[l+4*f]*i[f];r[12+l]\u003d-c}},h.getMatrix\u003dfunction(t,e){this.recalcMatrix(t);var r\u003dthis.computedMatrix;if(e){for(var n\u003d0;n\u003c16;++n)e[n]\u003dr[n];return e}return r},h.idle\u003dfunction(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},h.flush\u003dfunction(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},h.pan\u003dfunction(t,e,r,n){e\u003de||0,r\u003dr||0,n\u003dn||0,this.recalcMatrix(t);var i\u003dthis.computedMatrix,a\u003di[1],o\u003di[5],s\u003di[9],c\u003dl(a,o,s);a/\u003dc,o/\u003dc,s/\u003dc;var u\u003di[0],f\u003di[4],h\u003di[8],p\u003du*a+f*o+h*s,d\u003dl(u-\u003da*p,f-\u003do*p,h-\u003ds*p);u/\u003dd,f/\u003dd,h/\u003dd;var m\u003di[2],g\u003di[6],v\u003di[10],y\u003dm*a+g*o+v*s,x\u003dm*u+g*f+v*h,b\u003dl(m-\u003dy*a+x*u,g-\u003dy*o+x*f,v-\u003dy*s+x*h);m/\u003db,g/\u003db,v/\u003db;var _\u003du*e+a*r,w\u003df*e+o*r,T\u003dh*e+s*r;this.center.move(t,_,w,T);var k\u003dMath.exp(this.computedRadius[0]);k\u003dMath.max(1e-4,k+n),this.radius.set(t,Math.log(k))},h.rotate\u003dfunction(t,e,r,n){this.recalcMatrix(t),e\u003de||0,r\u003dr||0;var i\u003dthis.computedMatrix,a\u003di[0],o\u003di[4],s\u003di[8],u\u003di[1],f\u003di[5],h\u003di[9],p\u003di[2],d\u003di[6],m\u003di[10],g\u003de*a+r*u,v\u003de*o+r*f,y\u003de*s+r*h,x\u003d-(d*y-m*v),b\u003d-(m*g-p*y),_\u003d-(p*v-d*g),w\u003dMath.sqrt(Math.max(0,1-Math.pow(x,2)-Math.pow(b,2)-Math.pow(_,2))),T\u003dc(x,b,_,w);T\u003e1e-6?(x/\u003dT,b/\u003dT,_/\u003dT,w/\u003dT):(x\u003db\u003d_\u003d0,w\u003d1);var k\u003dthis.computedRotation,M\u003dk[0],A\u003dk[1],S\u003dk[2],E\u003dk[3],L\u003dM*w+E*x+A*_-S*b,C\u003dA*w+E*b+S*x-M*_,P\u003dS*w+E*_+M*b-A*x,I\u003dE*w-M*x-A*b-S*_;if(n){x\u003dp,b\u003dd,_\u003dm;var O\u003dMath.sin(n)/l(x,b,_);x*\u003dO,b*\u003dO,_*\u003dO,I\u003dI*(w\u003dMath.cos(e))-(L\u003dL*w+I*x+C*_-P*b)*x-(C\u003dC*w+I*b+P*x-L*_)*b-(P\u003dP*w+I*_+L*b-C*x)*_}var z\u003dc(L,C,P,I);z\u003e1e-6?(L/\u003dz,C/\u003dz,P/\u003dz,I/\u003dz):(L\u003dC\u003dP\u003d0,I\u003d1),this.rotation.set(t,L,C,P,I)},h.lookAt\u003dfunction(t,e,r,n){this.recalcMatrix(t),r\u003dr||this.computedCenter,e\u003de||this.computedEye,n\u003dn||this.computedUp;var a\u003dthis.computedMatrix;i(a,e,r,n);var o\u003dthis.computedRotation;s(o,a[0],a[1],a[2],a[4],a[5],a[6],a[8],a[9],a[10]),u(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var l\u003d0,c\u003d0;c\u003c3;++c)l+\u003dMath.pow(r[c]-e[c],2);this.radius.set(t,.5*Math.log(Math.max(l,1e-6))),this.center.set(t,r[0],r[1],r[2])},h.translate\u003dfunction(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},h.setMatrix\u003dfunction(t,e){var r\u003dthis.computedRotation;s(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),u(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n\u003dthis.computedMatrix;o(n,e);var i\u003dn[15];if(Math.abs(i)\u003e1e-6){var a\u003dn[12]/i,l\u003dn[13]/i,c\u003dn[14]/i;this.recalcMatrix(t);var f\u003dMath.exp(this.computedRadius[0]);this.center.set(t,a-n[2]*f,l-n[6]*f,c-n[10]*f),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},h.setDistance\u003dfunction(t,e){e\u003e0\u0026\u0026this.radius.set(t,Math.log(e))},h.setDistanceLimits\u003dfunction(t,e){t\u003dt\u003e0?Math.log(t):-1/0,e\u003de\u003e0?Math.log(e):1/0,e\u003dMath.max(e,t),this.radius.bounds[0][0]\u003dt,this.radius.bounds[1][0]\u003de},h.getDistanceLimits\u003dfunction(t){var e\u003dthis.radius.bounds;return t?(t[0]\u003dMath.exp(e[0][0]),t[1]\u003dMath.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},h.toJSON\u003dfunction(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},h.fromJSON\u003dfunction(t){var e\u003dthis.lastT(),r\u003dt.center;r\u0026\u0026this.center.set(e,r[0],r[1],r[2]);var n\u003dt.rotation;n\u0026\u0026this.rotation.set(e,n[0],n[1],n[2],n[3]);var i\u003dt.distance;i\u0026\u0026i\u003e0\u0026\u0026this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},{\"./lib/quatFromFrame\":484,\"filtered-vector\":246,\"gl-mat4/fromQuat\":284,\"gl-mat4/invert\":295,\"gl-mat4/lookAt\":296}],486:[function(t,e,r){\n/*!\n * pad-left \u003chttps://github.com/jonschlinkert/pad-left\u003e\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT license.\n */\n\"use strict\";var n\u003dt(\"repeat-string\");e.exports\u003dfunction(t,e,r){return n(r\u003dvoid 0!\u003d\u003dr?r+\"\":\" \",e)+t}},{\"repeat-string\":537}],487:[function(t,e,r){\"use strict\";function n(t,e){if(\"string\"!\u003dtypeof t)return[t];var r\u003d[t];\"string\"\u003d\u003dtypeof e||Array.isArray(e)?e\u003d{brackets:e}:e||(e\u003d{});var n\u003de.brackets?Array.isArray(e.brackets)?e.brackets:[e.brackets]:[\"{}\",\"[]\",\"()\"],i\u003de.escape||\"___\",a\u003d!!e.flat;n.forEach((function(t){var e\u003dnew RegExp([\"\\\\\",t[0],\"[^\\\\\",t[0],\"\\\\\",t[1],\"]*\\\\\",t[1]].join(\"\")),n\u003d[];function a(e,a,o){var s\u003dr.push(e.slice(t[0].length,-t[1].length))-1;return n.push(s),i+s+i}r.forEach((function(t,n){for(var i,o\u003d0;t!\u003di;)if(i\u003dt,t\u003dt.replace(e,a),o++\u003e1e4)throw Error(\"References have circular dependency. Please, check them.\");r[n]\u003dt})),n\u003dn.reverse(),r\u003dr.map((function(e){return n.forEach((function(r){e\u003de.replace(new RegExp(\"(\\\\\"+i+r+\"\\\\\"+i+\")\",\"g\"),t[0]+\"$1\"+t[1])})),e}))}));var o\u003dnew RegExp(\"\\\\\"+i+\"([0-9]+)\\\\\"+i);return a?r:function t(e,r,n){for(var i,a\u003d[],s\u003d0;i\u003do.exec(e);){if(s++\u003e1e4)throw Error(\"Circular references in parenthesis\");a.push(e.slice(0,i.index)),a.push(t(r[i[1]],r)),e\u003de.slice(i.index+i[0].length)}return a.push(e),a}(r[0],r)}function i(t,e){if(e\u0026\u0026e.flat){var r,n\u003de\u0026\u0026e.escape||\"___\",i\u003dt[0];if(!i)return\"\";for(var a\u003dnew RegExp(\"\\\\\"+n+\"([0-9]+)\\\\\"+n),o\u003d0;i!\u003dr;){if(o++\u003e1e4)throw Error(\"Circular references in \"+t);r\u003di,i\u003di.replace(a,s)}return i}return t.reduce((function t(e,r){return Array.isArray(r)\u0026\u0026(r\u003dr.reduce(t,\"\")),e+r}),\"\");function s(e,r){if(null\u003d\u003dt[r])throw Error(\"Reference \"+r+\"is undefined\");return t[r]}}function a(t,e){return Array.isArray(t)?i(t,e):n(t,e)}a.parse\u003dn,a.stringify\u003di,e.exports\u003da},{}],488:[function(t,e,r){\"use strict\";var n\u003dt(\"pick-by-alias\");e.exports\u003dfunction(t){var e;arguments.length\u003e1\u0026\u0026(t\u003darguments);\"string\"\u003d\u003dtypeof t?t\u003dt.split(/\\s/).map(parseFloat):\"number\"\u003d\u003dtypeof t\u0026\u0026(t\u003d[t]);t.length\u0026\u0026\"number\"\u003d\u003dtypeof t[0]?e\u003d1\u003d\u003d\u003dt.length?{width:t[0],height:t[0],x:0,y:0}:2\u003d\u003d\u003dt.length?{width:t[0],height:t[1],x:0,y:0}:{x:t[0],y:t[1],width:t[2]-t[0]||0,height:t[3]-t[1]||0}:t\u0026\u0026(t\u003dn(t,{left:\"x l left Left\",top:\"y t top Top\",width:\"w width W Width\",height:\"h height W Width\",bottom:\"b bottom Bottom\",right:\"r right Right\"}),e\u003d{x:t.left||0,y:t.top||0},null\u003d\u003dt.width?t.right?e.width\u003dt.right-e.x:e.width\u003d0:e.width\u003dt.width,null\u003d\u003dt.height?t.bottom?e.height\u003dt.bottom-e.y:e.height\u003d0:e.height\u003dt.height);return e}},{\"pick-by-alias\":494}],489:[function(t,e,r){e.exports\u003dfunction(t){var e\u003d[];return t.replace(i,(function(t,r,i){var o\u003dr.toLowerCase();for(i\u003dfunction(t){var e\u003dt.match(a);return e?e.map(Number):[]}(i),\"m\"\u003d\u003do\u0026\u0026i.length\u003e2\u0026\u0026(e.push([r].concat(i.splice(0,2))),o\u003d\"l\",r\u003d\"m\"\u003d\u003dr?\"l\":\"L\");;){if(i.length\u003d\u003dn[o])return i.unshift(r),e.push(i);if(i.length\u003cn[o])throw new Error(\"malformed path data\");e.push([r].concat(i.splice(0,n[o])))}})),e};var n\u003d{a:7,c:6,h:1,l:2,m:2,q:4,s:4,t:2,v:1,z:0},i\u003d/([astvzqmhlc])([^astvzqmhlc]*)/gi;var a\u003d/-?[0-9]*\\.?[0-9]+(?:e[-+]?\\d+)?/gi},{}],490:[function(t,e,r){e.exports\u003dfunction(t,e){e||(e\u003d[0,\"\"]),t\u003dString(t);var r\u003dparseFloat(t,10);return e[0]\u003dr,e[1]\u003dt.match(/[\\d.\\-\\+]*\\s*(.*)/)[1]||\"\",e}},{}],491:[function(t,e,r){(function(t){(function(){(function(){var r,n,i,a,o,s;\"undefined\"!\u003dtypeof performance\u0026\u0026null!\u003d\u003dperformance\u0026\u0026performance.now?e.exports\u003dfunction(){return performance.now()}:null!\u003dt\u0026\u0026t.hrtime?(e.exports\u003dfunction(){return(r()-o)/1e6},n\u003dt.hrtime,a\u003d(r\u003dfunction(){var t;return 1e9*(t\u003dn())[0]+t[1]})(),s\u003d1e9*t.uptime(),o\u003da-s):Date.now?(e.exports\u003dfunction(){return Date.now()-i},i\u003dDate.now()):(e.exports\u003dfunction(){return(new Date).getTime()-i},i\u003d(new Date).getTime())}).call(this)}).call(this)}).call(this,t(\"_process\"))},{_process:524}],492:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.length;if(e\u003c32){for(var r\u003d1,i\u003d0;i\u003ce;++i)for(var a\u003d0;a\u003ci;++a)if(t[i]\u003ct[a])r\u003d-r;else if(t[i]\u003d\u003d\u003dt[a])return 0;return r}var o\u003dn.mallocUint8(e);for(i\u003d0;i\u003ce;++i)o[i]\u003d0;for(r\u003d1,i\u003d0;i\u003ce;++i)if(!o[i]){var s\u003d1;o[i]\u003d1;for(a\u003dt[i];a!\u003d\u003di;a\u003dt[a]){if(o[a])return n.freeUint8(o),0;s+\u003d1,o[a]\u003d1}1\u0026s||(r\u003d-r)}return n.freeUint8(o),r};var n\u003dt(\"typedarray-pool\")},{\"typedarray-pool\":613}],493:[function(t,e,r){\"use strict\";var n\u003dt(\"typedarray-pool\"),i\u003dt(\"invert-permutation\");r.rank\u003dfunction(t){var e\u003dt.length;switch(e){case 0:case 1:return 0;case 2:return t[1]}var r,a,o,s\u003dn.mallocUint32(e),l\u003dn.mallocUint32(e),c\u003d0;for(i(t,l),o\u003d0;o\u003ce;++o)s[o]\u003dt[o];for(o\u003de-1;o\u003e0;--o)a\u003dl[o],r\u003ds[o],s[o]\u003ds[a],s[a]\u003dr,l[o]\u003dl[r],l[r]\u003da,c\u003d(c+r)*o;return n.freeUint32(l),n.freeUint32(s),c},r.unrank\u003dfunction(t,e,r){switch(t){case 0:return r||[];case 1:return r?(r[0]\u003d0,r):[0];case 2:return r?(e?(r[0]\u003d0,r[1]\u003d1):(r[0]\u003d1,r[1]\u003d0),r):e?[0,1]:[1,0]}var n,i,a,o\u003d1;for((r\u003dr||new Array(t))[0]\u003d0,a\u003d1;a\u003ct;++a)r[a]\u003da,o\u003do*a|0;for(a\u003dt-1;a\u003e0;--a)e\u003de-(n\u003de/o|0)*o|0,o\u003do/a|0,i\u003d0|r[a],r[a]\u003d0|r[n],r[n]\u003d0|i;return r}},{\"invert-permutation\":446,\"typedarray-pool\":613}],494:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){var n,a,o\u003d{};if(\"string\"\u003d\u003dtypeof e\u0026\u0026(e\u003di(e)),Array.isArray(e)){var s\u003d{};for(a\u003d0;a\u003ce.length;a++)s[e[a]]\u003d!0;e\u003ds}for(n in e)e[n]\u003di(e[n]);var l\u003d{};for(n in e){var c\u003de[n];if(Array.isArray(c))for(a\u003d0;a\u003cc.length;a++){var u\u003dc[a];if(r\u0026\u0026(l[u]\u003d!0),u in t){if(o[n]\u003dt[u],r)for(var f\u003da;f\u003cc.length;f++)l[c[f]]\u003d!0;break}}else n in t\u0026\u0026(e[n]\u0026\u0026(o[n]\u003dt[n]),r\u0026\u0026(l[n]\u003d!0))}if(r)for(n in t)l[n]||(o[n]\u003dt[n]);return o};var n\u003d{};function i(t){return n[t]?n[t]:(\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003dn[t]\u003dt.split(/\\s*,\\s*|\\s+/)),t)}},{}],495:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){for(var r\u003d0|e.length,i\u003dt.length,a\u003d[new Array(r),new Array(r)],o\u003d0;o\u003cr;++o)a[0][o]\u003d[],a[1][o]\u003d[];for(o\u003d0;o\u003ci;++o){var s\u003dt[o];a[0][s[0]].push(s),a[1][s[1]].push(s)}var l\u003d[];for(o\u003d0;o\u003cr;++o)a[0][o].length+a[1][o].length\u003d\u003d\u003d0\u0026\u0026l.push([o]);function c(t,e){var r\u003da[e][t[e]];r.splice(r.indexOf(t),1)}function u(t,r,i){for(var o,s,l,u\u003d0;u\u003c2;++u)if(a[u][r].length\u003e0){o\u003da[u][r][0],l\u003du;break}s\u003do[1^l];for(var f\u003d0;f\u003c2;++f)for(var h\u003da[f][r],p\u003d0;p\u003ch.length;++p){var d\u003dh[p],m\u003dd[1^f];n(e[t],e[r],e[s],e[m])\u003e0\u0026\u0026(o\u003dd,s\u003dm,l\u003df)}return i||o\u0026\u0026c(o,l),s}function f(t,r){var i\u003da[r][t][0],o\u003d[t];c(i,r);for(var s\u003di[1^r];;){for(;s!\u003d\u003dt;)o.push(s),s\u003du(o[o.length-2],s,!1);if(a[0][t].length+a[1][t].length\u003d\u003d\u003d0)break;var l\u003do[o.length-1],f\u003dt,h\u003do[1],p\u003du(l,f,!0);if(n(e[l],e[f],e[h],e[p])\u003c0)break;o.push(t),s\u003du(l,f)}return o}function h(t,e){return e[1]\u003d\u003d\u003de[e.length-1]}for(o\u003d0;o\u003cr;++o)for(var p\u003d0;p\u003c2;++p){for(var d\u003d[];a[p][o].length\u003e0;){a[0][o].length;var m\u003df(o,p);h(0,m)?d.push.apply(d,m):(d.length\u003e0\u0026\u0026l.push(d),d\u003dm)}d.length\u003e0\u0026\u0026l.push(d)}return l};var n\u003dt(\"compare-angle\")},{\"compare-angle\":138}],496:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){for(var r\u003dn(t,e.length),i\u003dnew Array(e.length),a\u003dnew Array(e.length),o\u003d[],s\u003d0;s\u003ce.length;++s){var l\u003dr[s].length;a[s]\u003dl,i[s]\u003d!0,l\u003c\u003d1\u0026\u0026o.push(s)}for(;o.length\u003e0;){var c\u003do.pop();i[c]\u003d!1;var u\u003dr[c];for(s\u003d0;s\u003cu.length;++s){var f\u003du[s];0\u003d\u003d--a[f]\u0026\u0026o.push(f)}}var h\u003dnew Array(e.length),p\u003d[];for(s\u003d0;s\u003ce.length;++s)if(i[s]){c\u003dp.length;h[s]\u003dc,p.push(e[s])}else h[s]\u003d-1;var d\u003d[];for(s\u003d0;s\u003ct.length;++s){var m\u003dt[s];i[m[0]]\u0026\u0026i[m[1]]\u0026\u0026d.push([h[m[0]],h[m[1]]])}return[d,p]};var n\u003dt(\"edges-to-adjacency-list\")},{\"edges-to-adjacency-list\":183}],497:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003dc(t,e);t\u003dr[0];for(var f\u003d(e\u003dr[1]).length,h\u003d(t.length,n(t,e.length)),p\u003d0;p\u003cf;++p)if(h[p].length%2\u003d\u003d1)throw new Error(\"planar-graph-to-polyline: graph must be manifold\");var d\u003di(t,e);var m\u003d(d\u003dd.filter((function(t){for(var r\u003dt.length,n\u003d[0],i\u003d0;i\u003cr;++i){var a\u003de[t[i]],l\u003de[t[(i+1)%r]],c\u003do(-a[0],a[1]),u\u003do(-a[0],l[1]),f\u003do(l[0],a[1]),h\u003do(l[0],l[1]);n\u003ds(n,s(s(c,u),s(f,h)))}return n[n.length-1]\u003e0}))).length,g\u003dnew Array(m),v\u003dnew Array(m);for(p\u003d0;p\u003cm;++p){g[p]\u003dp;var y\u003dnew Array(m),x\u003dd[p].map((function(t){return e[t]})),b\u003da([x]),_\u003d0;t:for(var w\u003d0;w\u003cm;++w)if(y[w]\u003d0,p!\u003d\u003dw){for(var T\u003d(q\u003dd[w]).length,k\u003d0;k\u003cT;++k){var M\u003db(e[q[k]]);if(0!\u003d\u003dM){M\u003c0\u0026\u0026(y[w]\u003d1,_+\u003d1);continue t}}y[w]\u003d1,_+\u003d1}v[p]\u003d[_,p,y]}v.sort((function(t,e){return e[0]-t[0]}));for(p\u003d0;p\u003cm;++p){var A\u003d(y\u003dv[p])[1],S\u003dy[2];for(w\u003d0;w\u003cm;++w)S[w]\u0026\u0026(g[w]\u003dA)}var E\u003dfunction(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;++r)e[r]\u003d[];return e}(m);for(p\u003d0;p\u003cm;++p)E[p].push(g[p]),E[g[p]].push(p);var L\u003d{},C\u003du(f,!1);for(p\u003d0;p\u003cm;++p)for(T\u003d(q\u003dd[p]).length,w\u003d0;w\u003cT;++w){var P\u003dq[w],I\u003dq[(w+1)%T],O\u003dMath.min(P,I)+\":\"+Math.max(P,I);if(O in L){var z\u003dL[O];E[z].push(p),E[p].push(z),C[P]\u003dC[I]\u003d!0}else L[O]\u003dp}function D(t){for(var e\u003dt.length,r\u003d0;r\u003ce;++r)if(!C[t[r]])return!1;return!0}var R\u003d[],F\u003du(m,-1);for(p\u003d0;p\u003cm;++p)g[p]!\u003d\u003dp||D(d[p])?F[p]\u003d-1:(R.push(p),F[p]\u003d0);r\u003d[];for(;R.length\u003e0;){var B\u003dR.pop(),N\u003dE[B];l(N,(function(t,e){return t-e}));var j,U\u003dN.length,V\u003dF[B];if(0\u003d\u003d\u003dV){var q\u003dd[B];j\u003d[q]}for(p\u003d0;p\u003cU;++p){var H\u003dN[p];if(!(F[H]\u003e\u003d0))if(F[H]\u003d1^V,R.push(H),0\u003d\u003d\u003dV)D(q\u003dd[H])||(q.reverse(),j.push(q))}0\u003d\u003d\u003dV\u0026\u0026r.push(j)}return r};var n\u003dt(\"edges-to-adjacency-list\"),i\u003dt(\"planar-dual\"),a\u003dt(\"point-in-big-polygon\"),o\u003dt(\"two-product\"),s\u003dt(\"robust-sum\"),l\u003dt(\"uniq\"),c\u003dt(\"./lib/trim-leaves\");function u(t,e){for(var r\u003dnew Array(t),n\u003d0;n\u003ct;++n)r[n]\u003de;return r}},{\"./lib/trim-leaves\":496,\"edges-to-adjacency-list\":183,\"planar-dual\":495,\"point-in-big-polygon\":499,\"robust-sum\":549,\"two-product\":600,uniq:615}],498:[function(t,e,r){arguments[4][247][0].apply(r,arguments)},{dup:247}],499:[function(t,e,r){e.exports\u003dfunction(t){for(var e\u003dt.length,r\u003d[],a\u003d[],s\u003d0;s\u003ce;++s)for(var u\u003dt[s],f\u003du.length,h\u003df-1,p\u003d0;p\u003cf;h\u003dp++){var d\u003du[h],m\u003du[p];d[0]\u003d\u003d\u003dm[0]?a.push([d,m]):r.push([d,m])}if(0\u003d\u003d\u003dr.length)return 0\u003d\u003d\u003da.length?c:(g\u003dl(a),function(t){return g(t[0],t[1])?0:1});var g;var v\u003di(r),y\u003dfunction(t,e){return function(r){var i\u003do.le(e,r[0]);if(i\u003c0)return 1;var a\u003dt[i];if(!a){if(!(i\u003e0\u0026\u0026e[i]\u003d\u003d\u003dr[0]))return 1;a\u003dt[i-1]}for(var s\u003d1;a;){var l\u003da.key,c\u003dn(r,l[0],l[1]);if(l[0][0]\u003cl[1][0])if(c\u003c0)a\u003da.left;else{if(!(c\u003e0))return 0;s\u003d-1,a\u003da.right}else if(c\u003e0)a\u003da.left;else{if(!(c\u003c0))return 0;s\u003d1,a\u003da.right}}return s}}(v.slabs,v.coordinates);return 0\u003d\u003d\u003da.length?y:function(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}(l(a),y)};var n\u003dt(\"robust-orientation\")[3],i\u003dt(\"slab-decomposition\"),a\u003dt(\"interval-tree-1d\"),o\u003dt(\"binary-search-bounds\");function s(){return!0}function l(t){for(var e\u003d{},r\u003d0;r\u003ct.length;++r){var n\u003dt[r],i\u003dn[0][0],o\u003dn[0][1],l\u003dn[1][1],c\u003d[Math.min(o,l),Math.max(o,l)];i in e?e[i].push(c):e[i]\u003d[c]}var u\u003d{},f\u003dObject.keys(e);for(r\u003d0;r\u003cf.length;++r){var h\u003de[f[r]];u[f[r]]\u003da(h)}return function(t){return function(e,r){var n\u003dt[e];return!!n\u0026\u0026!!n.queryPoint(r,s)}}(u)}function c(t){return 1}},{\"binary-search-bounds\":498,\"interval-tree-1d\":444,\"robust-orientation\":544,\"slab-decomposition\":562}],500:[function(t,e,r){\n/*\n * @copyright 2016 Sean Connelly (@voidqk), http://syntheti.cc\n * @license MIT\n * @preserve Project Home: https://github.com/voidqk/polybooljs\n */\nvar n,i\u003dt(\"./lib/build-log\"),a\u003dt(\"./lib/epsilon\"),o\u003dt(\"./lib/intersecter\"),s\u003dt(\"./lib/segment-chainer\"),l\u003dt(\"./lib/segment-selector\"),c\u003dt(\"./lib/geojson\"),u\u003d!1,f\u003da();function h(t,e,r){var i\u003dn.segments(t),a\u003dn.segments(e),o\u003dr(n.combine(i,a));return n.polygon(o)}n\u003d{buildLog:function(t){return!0\u003d\u003d\u003dt?u\u003di():!1\u003d\u003d\u003dt\u0026\u0026(u\u003d!1),!1!\u003d\u003du\u0026\u0026u.list},epsilon:function(t){return f.epsilon(t)},segments:function(t){var e\u003do(!0,f,u);return t.regions.forEach(e.addRegion),{segments:e.calculate(t.inverted),inverted:t.inverted}},combine:function(t,e){return{combined:o(!1,f,u).calculate(t.segments,t.inverted,e.segments,e.inverted),inverted1:t.inverted,inverted2:e.inverted}},selectUnion:function(t){return{segments:l.union(t.combined,u),inverted:t.inverted1||t.inverted2}},selectIntersect:function(t){return{segments:l.intersect(t.combined,u),inverted:t.inverted1\u0026\u0026t.inverted2}},selectDifference:function(t){return{segments:l.difference(t.combined,u),inverted:t.inverted1\u0026\u0026!t.inverted2}},selectDifferenceRev:function(t){return{segments:l.differenceRev(t.combined,u),inverted:!t.inverted1\u0026\u0026t.inverted2}},selectXor:function(t){return{segments:l.xor(t.combined,u),inverted:t.inverted1!\u003d\u003dt.inverted2}},polygon:function(t){return{regions:s(t.segments,f,u),inverted:t.inverted}},polygonFromGeoJSON:function(t){return c.toPolygon(n,t)},polygonToGeoJSON:function(t){return c.fromPolygon(n,f,t)},union:function(t,e){return h(t,e,n.selectUnion)},intersect:function(t,e){return h(t,e,n.selectIntersect)},difference:function(t,e){return h(t,e,n.selectDifference)},differenceRev:function(t,e){return h(t,e,n.selectDifferenceRev)},xor:function(t,e){return h(t,e,n.selectXor)}},\"object\"\u003d\u003dtypeof window\u0026\u0026(window.PolyBool\u003dn),e.exports\u003dn},{\"./lib/build-log\":501,\"./lib/epsilon\":502,\"./lib/geojson\":503,\"./lib/intersecter\":504,\"./lib/segment-chainer\":506,\"./lib/segment-selector\":507}],501:[function(t,e,r){e.exports\u003dfunction(){var t,e\u003d0,r\u003d!1;function n(e,r){return t.list.push({type:e,data:r?JSON.parse(JSON.stringify(r)):void 0}),t}return t\u003d{list:[],segmentId:function(){return e++},checkIntersection:function(t,e){return n(\"check\",{seg1:t,seg2:e})},segmentChop:function(t,e){return n(\"div_seg\",{seg:t,pt:e}),n(\"chop\",{seg:t,pt:e})},statusRemove:function(t){return n(\"pop_seg\",{seg:t})},segmentUpdate:function(t){return n(\"seg_update\",{seg:t})},segmentNew:function(t,e){return n(\"new_seg\",{seg:t,primary:e})},segmentRemove:function(t){return n(\"rem_seg\",{seg:t})},tempStatus:function(t,e,r){return n(\"temp_status\",{seg:t,above:e,below:r})},rewind:function(t){return n(\"rewind\",{seg:t})},status:function(t,e,r){return n(\"status\",{seg:t,above:e,below:r})},vert:function(e){return e\u003d\u003d\u003dr?t:(r\u003de,n(\"vert\",{x:e}))},log:function(t){return\"string\"!\u003dtypeof t\u0026\u0026(t\u003dJSON.stringify(t,!1,\"  \")),n(\"log\",{txt:t})},reset:function(){return n(\"reset\")},selected:function(t){return n(\"selected\",{segs:t})},chainStart:function(t){return n(\"chain_start\",{seg:t})},chainRemoveHead:function(t,e){return n(\"chain_rem_head\",{index:t,pt:e})},chainRemoveTail:function(t,e){return n(\"chain_rem_tail\",{index:t,pt:e})},chainNew:function(t,e){return n(\"chain_new\",{pt1:t,pt2:e})},chainMatch:function(t){return n(\"chain_match\",{index:t})},chainClose:function(t){return n(\"chain_close\",{index:t})},chainAddHead:function(t,e){return n(\"chain_add_head\",{index:t,pt:e})},chainAddTail:function(t,e){return n(\"chain_add_tail\",{index:t,pt:e})},chainConnect:function(t,e){return n(\"chain_con\",{index1:t,index2:e})},chainReverse:function(t){return n(\"chain_rev\",{index:t})},chainJoin:function(t,e){return n(\"chain_join\",{index1:t,index2:e})},done:function(){return n(\"done\")}}}},{}],502:[function(t,e,r){e.exports\u003dfunction(t){\"number\"!\u003dtypeof t\u0026\u0026(t\u003d1e-10);var e\u003d{epsilon:function(e){return\"number\"\u003d\u003dtypeof e\u0026\u0026(t\u003de),t},pointAboveOrOnLine:function(e,r,n){var i\u003dr[0],a\u003dr[1],o\u003dn[0],s\u003dn[1],l\u003de[0];return(o-i)*(e[1]-a)-(s-a)*(l-i)\u003e\u003d-t},pointBetween:function(e,r,n){var i\u003de[1]-r[1],a\u003dn[0]-r[0],o\u003de[0]-r[0],s\u003dn[1]-r[1],l\u003do*a+i*s;return!(l\u003ct)\u0026\u0026!(l-(a*a+s*s)\u003e-t)},pointsSameX:function(e,r){return Math.abs(e[0]-r[0])\u003ct},pointsSameY:function(e,r){return Math.abs(e[1]-r[1])\u003ct},pointsSame:function(t,r){return e.pointsSameX(t,r)\u0026\u0026e.pointsSameY(t,r)},pointsCompare:function(t,r){return e.pointsSameX(t,r)?e.pointsSameY(t,r)?0:t[1]\u003cr[1]?-1:1:t[0]\u003cr[0]?-1:1},pointsCollinear:function(e,r,n){var i\u003de[0]-r[0],a\u003de[1]-r[1],o\u003dr[0]-n[0],s\u003dr[1]-n[1];return Math.abs(i*s-o*a)\u003ct},linesIntersect:function(e,r,n,i){var a\u003dr[0]-e[0],o\u003dr[1]-e[1],s\u003di[0]-n[0],l\u003di[1]-n[1],c\u003da*l-o*s;if(Math.abs(c)\u003ct)return!1;var u\u003de[0]-n[0],f\u003de[1]-n[1],h\u003d(s*f-l*u)/c,p\u003d(a*f-o*u)/c,d\u003d{alongA:0,alongB:0,pt:[e[0]+h*a,e[1]+h*o]};return d.alongA\u003dh\u003c\u003d-t?-2:h\u003ct?-1:h-1\u003c\u003d-t?0:h-1\u003ct?1:2,d.alongB\u003dp\u003c\u003d-t?-2:p\u003ct?-1:p-1\u003c\u003d-t?0:p-1\u003ct?1:2,d},pointInsideRegion:function(e,r){for(var n\u003de[0],i\u003de[1],a\u003dr[r.length-1][0],o\u003dr[r.length-1][1],s\u003d!1,l\u003d0;l\u003cr.length;l++){var c\u003dr[l][0],u\u003dr[l][1];u-i\u003et!\u003do-i\u003et\u0026\u0026(a-c)*(i-u)/(o-u)+c-n\u003et\u0026\u0026(s\u003d!s),a\u003dc,o\u003du}return s}};return e}},{}],503:[function(t,e,r){var n\u003d{toPolygon:function(t,e){function r(e){if(e.length\u003c\u003d0)return t.segments({inverted:!1,regions:[]});function r(e){var r\u003de.slice(0,e.length-1);return t.segments({inverted:!1,regions:[r]})}for(var n\u003dr(e[0]),i\u003d1;i\u003ce.length;i++)n\u003dt.selectDifference(t.combine(n,r(e[i])));return n}if(\"Polygon\"\u003d\u003d\u003de.type)return t.polygon(r(e.coordinates));if(\"MultiPolygon\"\u003d\u003d\u003de.type){for(var n\u003dt.segments({inverted:!1,regions:[]}),i\u003d0;i\u003ce.coordinates.length;i++)n\u003dt.selectUnion(t.combine(n,r(e.coordinates[i])));return t.polygon(n)}throw new Error(\"PolyBool: Cannot convert GeoJSON object to PolyBool polygon\")},fromPolygon:function(t,e,r){function n(t,r){return e.pointInsideRegion([.5*(t[0][0]+t[1][0]),.5*(t[0][1]+t[1][1])],r)}function i(t){return{region:t,children:[]}}r\u003dt.polygon(t.segments(r));var a\u003di(null);function o(t,e){for(var r\u003d0;r\u003ct.children.length;r++){if(n(e,(s\u003dt.children[r]).region))return void o(s,e)}var a\u003di(e);for(r\u003d0;r\u003ct.children.length;r++){var s;n((s\u003dt.children[r]).region,e)\u0026\u0026(a.children.push(s),t.children.splice(r,1),r--)}t.children.push(a)}for(var s\u003d0;s\u003cr.regions.length;s++){var l\u003dr.regions[s];l.length\u003c3||o(a,l)}function c(t,e){for(var r\u003d0,n\u003dt[t.length-1][0],i\u003dt[t.length-1][1],a\u003d[],o\u003d0;o\u003ct.length;o++){var s\u003dt[o][0],l\u003dt[o][1];a.push([s,l]),r+\u003dl*n-s*i,n\u003ds,i\u003dl}return r\u003c0!\u003d\u003de\u0026\u0026a.reverse(),a.push([a[0][0],a[0][1]]),a}var u\u003d[];function f(t){var e\u003d[c(t.region,!1)];u.push(e);for(var r\u003d0;r\u003ct.children.length;r++)e.push(h(t.children[r]))}function h(t){for(var e\u003d0;e\u003ct.children.length;e++)f(t.children[e]);return c(t.region,!0)}for(s\u003d0;s\u003ca.children.length;s++)f(a.children[s]);return u.length\u003c\u003d0?{type:\"Polygon\",coordinates:[]}:1\u003d\u003du.length?{type:\"Polygon\",coordinates:u[0]}:{type:\"MultiPolygon\",coordinates:u}}};e.exports\u003dn},{}],504:[function(t,e,r){var n\u003dt(\"./linked-list\");e.exports\u003dfunction(t,e,r){function i(t,e,n){return{id:r?r.segmentId():-1,start:t,end:e,myFill:{above:n.myFill.above,below:n.myFill.below},otherFill:null}}var a\u003dn.create();function o(t,r){a.insertBefore(t,(function(n){return function(t,r,n,i,a,o){var s\u003de.pointsCompare(r,a);return 0!\u003d\u003ds?s:e.pointsSame(n,o)?0:t!\u003d\u003di?t?1:-1:e.pointAboveOrOnLine(n,i?a:o,i?o:a)?1:-1}(t.isStart,t.pt,r,n.isStart,n.pt,n.other.pt)\u003c0}))}function s(t,e){var r\u003dfunction(t,e){var r\u003dn.node({isStart:!0,pt:t.start,seg:t,primary:e,other:null,status:null});return o(r,t.end),r}(t,e);return function(t,e,r){var i\u003dn.node({isStart:!1,pt:e.end,seg:e,primary:r,other:t,status:null});t.other\u003di,o(i,t.pt)}(r,t,e),r}function l(t,e){var n\u003di(e,t.seg.end,t.seg);return function(t,e){r\u0026\u0026r.segmentChop(t.seg,e),t.other.remove(),t.seg.end\u003de,t.other.pt\u003de,o(t.other,t.pt)}(t,e),s(n,t.primary)}function c(i,o){var s\u003dn.create();function c(t){return s.findTransition((function(r){var n,i,a,o,s,l;return(n\u003dt,i\u003dr.ev,a\u003dn.seg.start,o\u003dn.seg.end,s\u003di.seg.start,l\u003di.seg.end,e.pointsCollinear(a,s,l)?e.pointsCollinear(o,s,l)||e.pointAboveOrOnLine(o,s,l)?1:-1:e.pointAboveOrOnLine(a,s,l)?1:-1)\u003e0}))}function u(t,n){var i\u003dt.seg,a\u003dn.seg,o\u003di.start,s\u003di.end,c\u003da.start,u\u003da.end;r\u0026\u0026r.checkIntersection(i,a);var f\u003de.linesIntersect(o,s,c,u);if(!1\u003d\u003d\u003df){if(!e.pointsCollinear(o,s,c))return!1;if(e.pointsSame(o,u)||e.pointsSame(s,c))return!1;var h\u003de.pointsSame(o,c),p\u003de.pointsSame(s,u);if(h\u0026\u0026p)return n;var d\u003d!h\u0026\u0026e.pointBetween(o,c,u),m\u003d!p\u0026\u0026e.pointBetween(s,c,u);if(h)return m?l(n,s):l(t,u),n;d\u0026\u0026(p||(m?l(n,s):l(t,u)),l(n,o))}else 0\u003d\u003d\u003df.alongA\u0026\u0026(-1\u003d\u003d\u003df.alongB?l(t,c):0\u003d\u003d\u003df.alongB?l(t,f.pt):1\u003d\u003d\u003df.alongB\u0026\u0026l(t,u)),0\u003d\u003d\u003df.alongB\u0026\u0026(-1\u003d\u003d\u003df.alongA?l(n,o):0\u003d\u003d\u003df.alongA?l(n,f.pt):1\u003d\u003d\u003df.alongA\u0026\u0026l(n,s));return!1}for(var f\u003d[];!a.isEmpty();){var h\u003da.getHead();if(r\u0026\u0026r.vert(h.pt[0]),h.isStart){r\u0026\u0026r.segmentNew(h.seg,h.primary);var p\u003dc(h),d\u003dp.before?p.before.ev:null,m\u003dp.after?p.after.ev:null;function g(){if(d){var t\u003du(h,d);if(t)return t}return!!m\u0026\u0026u(h,m)}r\u0026\u0026r.tempStatus(h.seg,!!d\u0026\u0026d.seg,!!m\u0026\u0026m.seg);var v,y\u003dg();if(y){var x;if(t)(x\u003dnull\u003d\u003d\u003dh.seg.myFill.below||h.seg.myFill.above!\u003d\u003dh.seg.myFill.below)\u0026\u0026(y.seg.myFill.above\u003d!y.seg.myFill.above);else y.seg.otherFill\u003dh.seg.myFill;r\u0026\u0026r.segmentUpdate(y.seg),h.other.remove(),h.remove()}if(a.getHead()!\u003d\u003dh){r\u0026\u0026r.rewind(h.seg);continue}if(t)x\u003dnull\u003d\u003d\u003dh.seg.myFill.below||h.seg.myFill.above!\u003d\u003dh.seg.myFill.below,h.seg.myFill.below\u003dm?m.seg.myFill.above:i,h.seg.myFill.above\u003dx?!h.seg.myFill.below:h.seg.myFill.below;else if(null\u003d\u003d\u003dh.seg.otherFill)v\u003dm?h.primary\u003d\u003d\u003dm.primary?m.seg.otherFill.above:m.seg.myFill.above:h.primary?o:i,h.seg.otherFill\u003d{above:v,below:v};r\u0026\u0026r.status(h.seg,!!d\u0026\u0026d.seg,!!m\u0026\u0026m.seg),h.other.status\u003dp.insert(n.node({ev:h}))}else{var b\u003dh.status;if(null\u003d\u003d\u003db)throw new Error(\"PolyBool: Zero-length segment detected; your epsilon is probably too small or too large\");if(s.exists(b.prev)\u0026\u0026s.exists(b.next)\u0026\u0026u(b.prev.ev,b.next.ev),r\u0026\u0026r.statusRemove(b.ev.seg),b.remove(),!h.primary){var _\u003dh.seg.myFill;h.seg.myFill\u003dh.seg.otherFill,h.seg.otherFill\u003d_}f.push(h.seg)}a.getHead().remove()}return r\u0026\u0026r.done(),f}return t?{addRegion:function(t){for(var n,i,a,o\u003dt[t.length-1],l\u003d0;l\u003ct.length;l++){n\u003do,o\u003dt[l];var c\u003de.pointsCompare(n,o);0!\u003d\u003dc\u0026\u0026s((i\u003dc\u003c0?n:o,a\u003dc\u003c0?o:n,{id:r?r.segmentId():-1,start:i,end:a,myFill:{above:null,below:null},otherFill:null}),!0)}},calculate:function(t){return c(t,!1)}}:{calculate:function(t,e,r,n){return t.forEach((function(t){s(i(t.start,t.end,t),!0)})),r.forEach((function(t){s(i(t.start,t.end,t),!1)})),c(e,n)}}}},{\"./linked-list\":505}],505:[function(t,e,r){e.exports\u003d{create:function(){var t\u003d{root:{root:!0,next:null},exists:function(e){return null!\u003d\u003de\u0026\u0026e!\u003d\u003dt.root},isEmpty:function(){return null\u003d\u003d\u003dt.root.next},getHead:function(){return t.root.next},insertBefore:function(e,r){for(var n\u003dt.root,i\u003dt.root.next;null!\u003d\u003di;){if(r(i))return e.prev\u003di.prev,e.next\u003di,i.prev.next\u003de,void(i.prev\u003de);n\u003di,i\u003di.next}n.next\u003de,e.prev\u003dn,e.next\u003dnull},findTransition:function(e){for(var r\u003dt.root,n\u003dt.root.next;null!\u003d\u003dn\u0026\u0026!e(n);)r\u003dn,n\u003dn.next;return{before:r\u003d\u003d\u003dt.root?null:r,after:n,insert:function(t){return t.prev\u003dr,t.next\u003dn,r.next\u003dt,null!\u003d\u003dn\u0026\u0026(n.prev\u003dt),t}}}};return t},node:function(t){return t.prev\u003dnull,t.next\u003dnull,t.remove\u003dfunction(){t.prev.next\u003dt.next,t.next\u0026\u0026(t.next.prev\u003dt.prev),t.prev\u003dnull,t.next\u003dnull},t}}},{}],506:[function(t,e,r){e.exports\u003dfunction(t,e,r){var n\u003d[],i\u003d[];return t.forEach((function(t){var a\u003dt.start,o\u003dt.end;if(e.pointsSame(a,o))console.warn(\"PolyBool: Warning: Zero-length segment detected; your epsilon is probably too small or too large\");else{r\u0026\u0026r.chainStart(t);for(var s\u003d{index:0,matches_head:!1,matches_pt1:!1},l\u003d{index:0,matches_head:!1,matches_pt1:!1},c\u003ds,u\u003d0;u\u003cn.length;u++){var f\u003d(g\u003dn[u])[0],h\u003d(g[1],g[g.length-1]);g[g.length-2];if(e.pointsSame(f,a)){if(k(u,!0,!0))break}else if(e.pointsSame(f,o)){if(k(u,!0,!1))break}else if(e.pointsSame(h,a)){if(k(u,!1,!0))break}else if(e.pointsSame(h,o)\u0026\u0026k(u,!1,!1))break}if(c\u003d\u003d\u003ds)return n.push([a,o]),void(r\u0026\u0026r.chainNew(a,o));if(c\u003d\u003d\u003dl){r\u0026\u0026r.chainMatch(s.index);var p\u003ds.index,d\u003ds.matches_pt1?o:a,m\u003ds.matches_head,g\u003dn[p],v\u003dm?g[0]:g[g.length-1],y\u003dm?g[1]:g[g.length-2],x\u003dm?g[g.length-1]:g[0],b\u003dm?g[g.length-2]:g[1];return e.pointsCollinear(y,v,d)\u0026\u0026(m?(r\u0026\u0026r.chainRemoveHead(s.index,d),g.shift()):(r\u0026\u0026r.chainRemoveTail(s.index,d),g.pop()),v\u003dy),e.pointsSame(x,d)?(n.splice(p,1),e.pointsCollinear(b,x,v)\u0026\u0026(m?(r\u0026\u0026r.chainRemoveTail(s.index,v),g.pop()):(r\u0026\u0026r.chainRemoveHead(s.index,v),g.shift())),r\u0026\u0026r.chainClose(s.index),void i.push(g)):void(m?(r\u0026\u0026r.chainAddHead(s.index,d),g.unshift(d)):(r\u0026\u0026r.chainAddTail(s.index,d),g.push(d)))}var _\u003ds.index,w\u003dl.index;r\u0026\u0026r.chainConnect(_,w);var T\u003dn[_].length\u003cn[w].length;s.matches_head?l.matches_head?T?(M(_),A(_,w)):(M(w),A(w,_)):A(w,_):l.matches_head?A(_,w):T?(M(_),A(w,_)):(M(w),A(_,w))}function k(t,e,r){return c.index\u003dt,c.matches_head\u003de,c.matches_pt1\u003dr,c\u003d\u003d\u003ds?(c\u003dl,!1):(c\u003dnull,!0)}function M(t){r\u0026\u0026r.chainReverse(t),n[t].reverse()}function A(t,i){var a\u003dn[t],o\u003dn[i],s\u003da[a.length-1],l\u003da[a.length-2],c\u003do[0],u\u003do[1];e.pointsCollinear(l,s,c)\u0026\u0026(r\u0026\u0026r.chainRemoveTail(t,s),a.pop(),s\u003dl),e.pointsCollinear(s,c,u)\u0026\u0026(r\u0026\u0026r.chainRemoveHead(i,c),o.shift()),r\u0026\u0026r.chainJoin(t,i),n[t]\u003da.concat(o),n.splice(i,1)}})),i}},{}],507:[function(t,e,r){function n(t,e,r){var n\u003d[];return t.forEach((function(t){var i\u003d(t.myFill.above?8:0)+(t.myFill.below?4:0)+(t.otherFill\u0026\u0026t.otherFill.above?2:0)+(t.otherFill\u0026\u0026t.otherFill.below?1:0);0!\u003d\u003de[i]\u0026\u0026n.push({id:r?r.segmentId():-1,start:t.start,end:t.end,myFill:{above:1\u003d\u003d\u003de[i],below:2\u003d\u003d\u003de[i]},otherFill:null})})),r\u0026\u0026r.selected(n),n}var i\u003d{union:function(t,e){return n(t,[0,2,1,0,2,2,0,0,1,0,1,0,0,0,0,0],e)},intersect:function(t,e){return n(t,[0,0,0,0,0,2,0,2,0,0,1,1,0,2,1,0],e)},difference:function(t,e){return n(t,[0,0,0,0,2,0,2,0,1,1,0,0,0,1,2,0],e)},differenceRev:function(t,e){return n(t,[0,2,1,0,0,0,1,1,0,2,0,2,0,0,0,0],e)},xor:function(t,e){return n(t,[0,2,1,0,2,0,0,1,1,0,0,2,0,1,2,0],e)}};e.exports\u003di},{}],508:[function(t,e,r){\"use strict\";var n\u003dnew Float64Array(4),i\u003dnew Float64Array(4),a\u003dnew Float64Array(4);e.exports\u003dfunction(t,e,r,o,s){n.length\u003co.length\u0026\u0026(n\u003dnew Float64Array(o.length),i\u003dnew Float64Array(o.length),a\u003dnew Float64Array(o.length));for(var l\u003d0;l\u003co.length;++l)n[l]\u003dt[l]-o[l],i[l]\u003de[l]-t[l],a[l]\u003dr[l]-t[l];var c\u003d0,u\u003d0,f\u003d0,h\u003d0,p\u003d0,d\u003d0;for(l\u003d0;l\u003co.length;++l){var m\u003di[l],g\u003da[l],v\u003dn[l];c+\u003dm*m,u+\u003dm*g,f+\u003dg*g,h+\u003dv*m,p+\u003dv*g,d+\u003dv*v}var y,x,b,_,w,T\u003dMath.abs(c*f-u*u),k\u003du*p-f*h,M\u003du*h-c*p;if(k+M\u003c\u003dT)if(k\u003c0)M\u003c0\u0026\u0026h\u003c0?(M\u003d0,-h\u003e\u003dc?(k\u003d1,y\u003dc+2*h+d):y\u003dh*(k\u003d-h/c)+d):(k\u003d0,p\u003e\u003d0?(M\u003d0,y\u003dd):-p\u003e\u003df?(M\u003d1,y\u003df+2*p+d):y\u003dp*(M\u003d-p/f)+d);else if(M\u003c0)M\u003d0,h\u003e\u003d0?(k\u003d0,y\u003dd):-h\u003e\u003dc?(k\u003d1,y\u003dc+2*h+d):y\u003dh*(k\u003d-h/c)+d;else{var A\u003d1/T;y\u003d(k*\u003dA)*(c*k+u*(M*\u003dA)+2*h)+M*(u*k+f*M+2*p)+d}else k\u003c0?(b\u003df+p)\u003e(x\u003du+h)?(_\u003db-x)\u003e\u003d(w\u003dc-2*u+f)?(k\u003d1,M\u003d0,y\u003dc+2*h+d):y\u003d(k\u003d_/w)*(c*k+u*(M\u003d1-k)+2*h)+M*(u*k+f*M+2*p)+d:(k\u003d0,b\u003c\u003d0?(M\u003d1,y\u003df+2*p+d):p\u003e\u003d0?(M\u003d0,y\u003dd):y\u003dp*(M\u003d-p/f)+d):M\u003c0?(b\u003dc+h)\u003e(x\u003du+p)?(_\u003db-x)\u003e\u003d(w\u003dc-2*u+f)?(M\u003d1,k\u003d0,y\u003df+2*p+d):y\u003d(k\u003d1-(M\u003d_/w))*(c*k+u*M+2*h)+M*(u*k+f*M+2*p)+d:(M\u003d0,b\u003c\u003d0?(k\u003d1,y\u003dc+2*h+d):h\u003e\u003d0?(k\u003d0,y\u003dd):y\u003dh*(k\u003d-h/c)+d):(_\u003df+p-u-h)\u003c\u003d0?(k\u003d0,M\u003d1,y\u003df+2*p+d):_\u003e\u003d(w\u003dc-2*u+f)?(k\u003d1,M\u003d0,y\u003dc+2*h+d):y\u003d(k\u003d_/w)*(c*k+u*(M\u003d1-k)+2*h)+M*(u*k+f*M+2*p)+d;var S\u003d1-k-M;for(l\u003d0;l\u003co.length;++l)s[l]\u003dS*t[l]+k*e[l]+M*r[l];return y\u003c0?0:y}},{}],509:[function(t,e,r){\"use strict\";var n\u003dt(\"stream\").Transform,i\u003dt(\"stream-parser\");function a(){n.call(this,{readableObjectMode:!0})}function o(t,e,r){Error.call(this),Error.captureStackTrace(this,this.constructor),this.name\u003dthis.constructor.name,this.message\u003dt,e\u0026\u0026(this.code\u003de),r\u0026\u0026(this.statusCode\u003dr)}a.prototype\u003dObject.create(n.prototype),a.prototype.constructor\u003da,i(a.prototype),r.ParserStream\u003da,r.sliceEq\u003dfunction(t,e,r){for(var n\u003de,i\u003d0;i\u003cr.length;)if(t[n++]!\u003d\u003dr[i++])return!1;return!0},r.str2arr\u003dfunction(t,e){var r\u003d[],n\u003d0;if(e\u0026\u0026\"hex\"\u003d\u003d\u003de)for(;n\u003ct.length;)r.push(parseInt(t.slice(n,n+2),16)),n+\u003d2;else for(;n\u003ct.length;n++)r.push(255\u0026t.charCodeAt(n));return r},r.readUInt16LE\u003dfunction(t,e){return t[e]|t[e+1]\u003c\u003c8},r.readUInt16BE\u003dfunction(t,e){return t[e+1]|t[e]\u003c\u003c8},r.readUInt32LE\u003dfunction(t,e){return t[e]|t[e+1]\u003c\u003c8|t[e+2]\u003c\u003c16|16777216*t[e+3]},r.readUInt32BE\u003dfunction(t,e){return t[e+3]|t[e+2]\u003c\u003c8|t[e+1]\u003c\u003c16|16777216*t[e]},o.prototype\u003dObject.create(Error.prototype),o.prototype.constructor\u003do,r.ProbeError\u003do},{stream:565,\"stream-parser\":581}],510:[function(t,e,r){\"use strict\";function n(t,e){var r\u003dnew Error(t);return r.code\u003de,r}function i(t){try{return decodeURIComponent(escape(t))}catch(e){return t}}function a(t,e,r){this.input\u003dt.subarray(e,r),this.start\u003de;var i\u003dString.fromCharCode.apply(null,this.input.subarray(0,4));if(\"II*\\0\"!\u003d\u003di\u0026\u0026\"MM\\0*\"!\u003d\u003di)throw n(\"invalid TIFF signature\",\"EBADDATA\");this.big_endian\u003d\"M\"\u003d\u003d\u003di[0]}a.prototype.each\u003dfunction(t){this.aborted\u003d!1;var e\u003dthis.read_uint32(4);for(this.ifds_to_read\u003d[{id:0,offset:e}];this.ifds_to_read.length\u003e0\u0026\u0026!this.aborted;){var r\u003dthis.ifds_to_read.shift();r.offset\u0026\u0026this.scan_ifd(r.id,r.offset,t)}},a.prototype.read_uint16\u003dfunction(t){var e\u003dthis.input;if(t+2\u003ee.length)throw n(\"unexpected EOF\",\"EBADDATA\");return this.big_endian?256*e[t]+e[t+1]:e[t]+256*e[t+1]},a.prototype.read_uint32\u003dfunction(t){var e\u003dthis.input;if(t+4\u003ee.length)throw n(\"unexpected EOF\",\"EBADDATA\");return this.big_endian?16777216*e[t]+65536*e[t+1]+256*e[t+2]+e[t+3]:e[t]+256*e[t+1]+65536*e[t+2]+16777216*e[t+3]},a.prototype.is_subifd_link\u003dfunction(t,e){return 0\u003d\u003d\u003dt\u0026\u002634665\u003d\u003d\u003de||0\u003d\u003d\u003dt\u0026\u002634853\u003d\u003d\u003de||34665\u003d\u003d\u003dt\u0026\u002640965\u003d\u003d\u003de},a.prototype.exif_format_length\u003dfunction(t){switch(t){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0}},a.prototype.exif_format_read\u003dfunction(t,e){var r;switch(t){case 1:case 2:return r\u003dthis.input[e];case 6:return(r\u003dthis.input[e])|33554430*(128\u0026r);case 3:return r\u003dthis.read_uint16(e);case 8:return(r\u003dthis.read_uint16(e))|131070*(32768\u0026r);case 4:return r\u003dthis.read_uint32(e);case 9:return 0|(r\u003dthis.read_uint32(e));case 5:case 10:case 11:case 12:case 7:default:return null}},a.prototype.scan_ifd\u003dfunction(t,e,r){var a\u003dthis.read_uint16(e);e+\u003d2;for(var o\u003d0;o\u003ca;o++){var s\u003dthis.read_uint16(e),l\u003dthis.read_uint16(e+2),c\u003dthis.read_uint32(e+4),u\u003dthis.exif_format_length(l),f\u003dc*u,h\u003df\u003c\u003d4?e+8:this.read_uint32(e+8),p\u003d!1;if(h+f\u003ethis.input.length)throw n(\"unexpected EOF\",\"EBADDATA\");for(var d\u003d[],m\u003dh,g\u003d0;g\u003cc;g++,m+\u003du){var v\u003dthis.exif_format_read(l,m);if(null\u003d\u003d\u003dv){d\u003dnull;break}d.push(v)}if(Array.isArray(d)\u0026\u00262\u003d\u003d\u003dl\u0026\u0026(d\u003di(String.fromCharCode.apply(null,d)))\u0026\u0026\"\\0\"\u003d\u003d\u003dd[d.length-1]\u0026\u0026(d\u003dd.slice(0,-1)),this.is_subifd_link(t,s)\u0026\u0026Array.isArray(d)\u0026\u0026Number.isInteger(d[0])\u0026\u0026d[0]\u003e0\u0026\u0026(this.ifds_to_read.push({id:s,offset:d[0]}),p\u003d!0),!1\u003d\u003d\u003dr({is_big_endian:this.big_endian,ifd:t,tag:s,format:l,count:c,entry_offset:e+this.start,data_length:f,data_offset:h+this.start,value:d,is_subifd_link:p}))return void(this.aborted\u003d!0);e+\u003d12}0\u003d\u003d\u003dt\u0026\u0026this.ifds_to_read.push({id:1,offset:this.read_uint32(e)})},e.exports.ExifParser\u003da,e.exports.get_orientation\u003dfunction(t){var e\u003d0;try{return new a(t,0,t.length).each((function(t){if(0\u003d\u003d\u003dt.ifd\u0026\u0026274\u003d\u003d\u003dt.tag\u0026\u0026Array.isArray(t.value))return e\u003dt.value[0],!1})),e}catch(t){return-1}}},{}],511:[function(t,e,r){\"use strict\";var n\u003dt(\"./common\").readUInt16BE,i\u003dt(\"./common\").readUInt32BE;function a(t,e){if(t.length\u003c4+e)return null;var r\u003di(t,e);return t.length\u003cr+e||r\u003c8?null:{boxtype:String.fromCharCode.apply(null,t.slice(e+4,e+8)),data:t.slice(e+8,e+r),end:e+r}}function o(t,e){for(var r\u003d0;;){var n\u003da(t,r);if(!n)break;switch(n.boxtype){case\"ispe\":e.sizes.push({width:i(n.data,4),height:i(n.data,8)});break;case\"irot\":e.transforms.push({type:\"irot\",value:3\u0026n.data[0]});break;case\"imir\":e.transforms.push({type:\"imir\",value:1\u0026n.data[0]})}r\u003dn.end}}function s(t,e,r){for(var n\u003d0,i\u003d0;i\u003cr;i++)n\u003d256*n+(t[e+i]||0);return n}function l(t,e){for(var r\u003dt[4]\u003e\u003e4\u002615,i\u003d15\u0026t[4],a\u003dt[5]\u003e\u003e4\u002615,o\u003dn(t,6),l\u003d8,c\u003d0;c\u003co;c++){var u\u003dn(t,l),f\u003dn(t,l+\u003d2),h\u003ds(t,l+\u003d2,a),p\u003dn(t,l+\u003da);if(l+\u003d2,0\u003d\u003d\u003df\u0026\u00261\u003d\u003d\u003dp){var d\u003ds(t,l,r),m\u003ds(t,l+r,i);e.item_loc[u]\u003d{length:m,offset:d+h}}l+\u003dp*(r+i)}}function c(t,e){for(var r\u003dn(t,4),i\u003d6,o\u003d0;o\u003cr;o++){var s\u003da(t,i);if(!s)break;if(\"infe\"\u003d\u003d\u003ds.boxtype){for(var l\u003dn(s.data,4),c\u003d\"\",u\u003d8;u\u003cs.data.length\u0026\u0026s.data[u];u++)c+\u003dString.fromCharCode(s.data[u]);e.item_inf[c]\u003dl}i\u003ds.end}}function u(t,e){for(var r\u003d0;;){var n\u003da(t,r);if(!n)break;\"ipco\"\u003d\u003d\u003dn.boxtype\u0026\u0026o(n.data,e),r\u003dn.end}}e.exports.unbox\u003da,e.exports.readSizeFromMeta\u003dfunction(t){var e\u003d{sizes:[],transforms:[],item_inf:{},item_loc:{}};if(function(t,e){for(var r\u003d4;;){var n\u003da(t,r);if(!n)break;\"iprp\"\u003d\u003d\u003dn.boxtype\u0026\u0026u(n.data,e),\"iloc\"\u003d\u003d\u003dn.boxtype\u0026\u0026l(n.data,e),\"iinf\"\u003d\u003d\u003dn.boxtype\u0026\u0026c(n.data,e),r\u003dn.end}}(t,e),e.sizes.length){var r,n,i,o\u003d(r\u003de.sizes,n\u003dr.reduce((function(t,e){return t.width\u003ee.width||t.width\u003d\u003d\u003de.width\u0026\u0026t.height\u003ee.height?t:e})),i\u003dr.reduce((function(t,e){return t.height\u003ee.height||t.height\u003d\u003d\u003de.height\u0026\u0026t.width\u003ee.width?t:e})),n.width\u003ei.height||n.width\u003d\u003d\u003di.height\u0026\u0026n.height\u003ei.width?n:i),s\u003d1;e.transforms.forEach((function(t){var e\u003d{1:6,2:5,3:8,4:7,5:4,6:3,7:2,8:1},r\u003d{1:4,2:3,3:2,4:1,5:6,6:5,7:8,8:7};if(\"imir\"\u003d\u003d\u003dt.type\u0026\u0026(s\u003d0\u003d\u003d\u003dt.value?r[s]:e[s\u003de[s\u003dr[s]]]),\"irot\"\u003d\u003d\u003dt.type)for(var n\u003d0;n\u003ct.value;n++)s\u003de[s]}));var f\u003dnull;return e.item_inf.Exif\u0026\u0026(f\u003de.item_loc[e.item_inf.Exif]),{width:o.width,height:o.height,orientation:e.transforms.length?s:null,variants:e.sizes,exif_location:f}}},e.exports.getMimeType\u003dfunction(t){var e\u003dString.fromCharCode.apply(null,t.slice(0,4)),r\u003d{};r[e]\u003d!0;for(var n\u003d8;n\u003ct.length;n+\u003d4)r[String.fromCharCode.apply(null,t.slice(n,n+4))]\u003d!0;if(r.mif1||r.msf1||r.miaf)return\"avif\"\u003d\u003d\u003de||\"avis\"\u003d\u003d\u003de||\"avio\"\u003d\u003d\u003de?{type:\"avif\",mime:\"image/avif\"}:\"heic\"\u003d\u003d\u003de||\"heix\"\u003d\u003d\u003de?{type:\"heic\",mime:\"image/heic\"}:\"hevc\"\u003d\u003d\u003de||\"hevx\"\u003d\u003d\u003de?{type:\"heic\",mime:\"image/heic-sequence\"}:r.avif||r.avis?{type:\"avif\",mime:\"image/avif\"}:r.heic||r.heix||r.hevc||r.hevx||r.heis?r.msf1?{type:\"heif\",mime:\"image/heif-sequence\"}:{type:\"heif\",mime:\"image/heif\"}:{type:\"avif\",mime:\"image/avif\"}}},{\"./common\":509}],512:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").str2arr,i\u003dt(\"../common\").sliceEq,a\u003dt(\"../common\").readUInt32BE,o\u003dt(\"../miaf_utils\"),s\u003dt(\"../exif_utils\"),l\u003dn(\"ftyp\");e.exports\u003dfunction(t){if(i(t,4,l)){var e\u003do.unbox(t,0);if(e){var r\u003do.getMimeType(e.data);if(r){for(var n,c\u003de.end;;){var u\u003do.unbox(t,c);if(!u)break;if(c\u003du.end,\"mdat\"\u003d\u003d\u003du.boxtype)return;if(\"meta\"\u003d\u003d\u003du.boxtype){n\u003du.data;break}}if(n){var f\u003do.readSizeFromMeta(n);if(f){var h\u003d{width:f.width,height:f.height,type:r.type,mime:r.mime,wUnits:\"px\",hUnits:\"px\"};if(f.variants.length\u003e1\u0026\u0026(h.variants\u003df.variants),f.orientation\u0026\u0026(h.orientation\u003df.orientation),f.exif_location\u0026\u0026f.exif_location.offset+f.exif_location.length\u003c\u003dt.length){var p\u003da(t,f.exif_location.offset),d\u003dt.slice(f.exif_location.offset+p+4,f.exif_location.offset+f.exif_location.length),m\u003ds.get_orientation(d);m\u003e0\u0026\u0026(h.orientation\u003dm)}return h}}}}}}},{\"../common\":509,\"../exif_utils\":510,\"../miaf_utils\":511}],513:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").str2arr,i\u003dt(\"../common\").sliceEq,a\u003dt(\"../common\").readUInt16LE,o\u003dn(\"BM\");e.exports\u003dfunction(t){if(!(t.length\u003c26)\u0026\u0026i(t,0,o))return{width:a(t,18),height:a(t,22),type:\"bmp\",mime:\"image/bmp\",wUnits:\"px\",hUnits:\"px\"}}},{\"../common\":509}],514:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").str2arr,i\u003dt(\"../common\").sliceEq,a\u003dt(\"../common\").readUInt16LE,o\u003dn(\"GIF87a\"),s\u003dn(\"GIF89a\");e.exports\u003dfunction(t){if(!(t.length\u003c10)\u0026\u0026(i(t,0,o)||i(t,0,s)))return{width:a(t,6),height:a(t,8),type:\"gif\",mime:\"image/gif\",wUnits:\"px\",hUnits:\"px\"}}},{\"../common\":509}],515:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").readUInt16LE;e.exports\u003dfunction(t){var e\u003dn(t,0),r\u003dn(t,2),i\u003dn(t,4);if(0\u003d\u003d\u003de\u0026\u00261\u003d\u003d\u003dr\u0026\u0026i){for(var a\u003d[],o\u003d{width:0,height:0},s\u003d0;s\u003ci;s++){var l\u003dt[6+16*s]||256,c\u003dt[6+16*s+1]||256,u\u003d{width:l,height:c};a.push(u),(l\u003eo.width||c\u003eo.height)\u0026\u0026(o\u003du)}return{width:o.width,height:o.height,variants:a,type:\"ico\",mime:\"image/x-icon\",wUnits:\"px\",hUnits:\"px\"}}}},{\"../common\":509}],516:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").readUInt16BE,i\u003dt(\"../common\").str2arr,a\u003dt(\"../common\").sliceEq,o\u003dt(\"../exif_utils\"),s\u003di(\"Exif\\0\\0\");e.exports\u003dfunction(t){if(!(t.length\u003c2)\u0026\u0026255\u003d\u003d\u003dt[0]\u0026\u0026216\u003d\u003d\u003dt[1])for(var e\u003d2;;){if(t.length-e\u003c2)return;if(255!\u003d\u003dt[e++])return;for(var r,i,l\u003dt[e++];255\u003d\u003d\u003dl;)l\u003dt[e++];if(208\u003c\u003dl\u0026\u0026l\u003c\u003d217||1\u003d\u003d\u003dl)r\u003d0;else{if(!(192\u003c\u003dl\u0026\u0026l\u003c\u003d254))return;if(t.length-e\u003c2)return;r\u003dn(t,e)-2,e+\u003d2}if(217\u003d\u003d\u003dl||218\u003d\u003d\u003dl)return;if(225\u003d\u003d\u003dl\u0026\u0026r\u003e\u003d10\u0026\u0026a(t,e,s)\u0026\u0026(i\u003do.get_orientation(t.slice(e+6,e+r))),r\u003e\u003d5\u0026\u0026192\u003c\u003dl\u0026\u0026l\u003c\u003d207\u0026\u0026196!\u003d\u003dl\u0026\u0026200!\u003d\u003dl\u0026\u0026204!\u003d\u003dl){if(t.length-e\u003cr)return;var c\u003d{width:n(t,e+3),height:n(t,e+1),type:\"jpg\",mime:\"image/jpeg\",wUnits:\"px\",hUnits:\"px\"};return i\u003e0\u0026\u0026(c.orientation\u003di),c}e+\u003dr}}},{\"../common\":509,\"../exif_utils\":510}],517:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").str2arr,i\u003dt(\"../common\").sliceEq,a\u003dt(\"../common\").readUInt32BE,o\u003dn(\"\\x89PNG\\r\\n\\x1a\\n\"),s\u003dn(\"IHDR\");e.exports\u003dfunction(t){if(!(t.length\u003c24)\u0026\u0026i(t,0,o)\u0026\u0026i(t,12,s))return{width:a(t,16),height:a(t,20),type:\"png\",mime:\"image/png\",wUnits:\"px\",hUnits:\"px\"}}},{\"../common\":509}],518:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").str2arr,i\u003dt(\"../common\").sliceEq,a\u003dt(\"../common\").readUInt32BE,o\u003dn(\"8BPS\\0\\x01\");e.exports\u003dfunction(t){if(!(t.length\u003c22)\u0026\u0026i(t,0,o))return{width:a(t,18),height:a(t,14),type:\"psd\",mime:\"image/vnd.adobe.photoshop\",wUnits:\"px\",hUnits:\"px\"}}},{\"../common\":509}],519:[function(t,e,r){\"use strict\";function n(t){return\"number\"\u003d\u003dtypeof t\u0026\u0026isFinite(t)\u0026\u0026t\u003e0}var i\u003d/\u003c[-_.:a-zA-Z0-9][^\u003e]*\u003e/,a\u003d/^\u003c([-_.:a-zA-Z0-9]+:)?svg\\s/,o\u003d/[^-]\\bwidth\u003d\"([^%]+?)\"|[^-]\\bwidth\u003d\u0027([^%]+?)\u0027/,s\u003d/\\bheight\u003d\"([^%]+?)\"|\\bheight\u003d\u0027([^%]+?)\u0027/,l\u003d/\\bview[bB]ox\u003d\"(.+?)\"|\\bview[bB]ox\u003d\u0027(.+?)\u0027/,c\u003d/in$|mm$|cm$|pt$|pc$|px$|em$|ex$/;function u(t){return c.test(t)?t.match(c)[0]:\"px\"}e.exports\u003dfunction(t){if(function(t){var e,r\u003d0,n\u003dt.length;for(239\u003d\u003d\u003dt[0]\u0026\u0026187\u003d\u003d\u003dt[1]\u0026\u0026191\u003d\u003d\u003dt[2]\u0026\u0026(r\u003d3);r\u003cn\u0026\u0026(32\u003d\u003d\u003d(e\u003dt[r])||9\u003d\u003d\u003de||13\u003d\u003d\u003de||10\u003d\u003d\u003de);)r++;return r!\u003d\u003dn\u0026\u002660\u003d\u003d\u003dt[r]}(t)){for(var e\u003d\"\",r\u003d0;r\u003ct.length;r++)e+\u003dString.fromCharCode(t[r]);var c\u003d(e.match(i)||[\"\"])[0];if(a.test(c)){var f\u003dfunction(t){var e\u003dt.match(o),r\u003dt.match(s),n\u003dt.match(l);return{width:e\u0026\u0026(e[1]||e[2]),height:r\u0026\u0026(r[1]||r[2]),viewbox:n\u0026\u0026(n[1]||n[2])}}(c),h\u003dparseFloat(f.width),p\u003dparseFloat(f.height);if(f.width\u0026\u0026f.height){if(!n(h)||!n(p))return;return{width:h,height:p,type:\"svg\",mime:\"image/svg+xml\",wUnits:u(f.width),hUnits:u(f.height)}}var d\u003d(f.viewbox||\"\").split(\" \"),m\u003d{width:d[2],height:d[3]},g\u003dparseFloat(m.width),v\u003dparseFloat(m.height);if(n(g)\u0026\u0026n(v)\u0026\u0026u(m.width)\u003d\u003d\u003du(m.height)){var y\u003dg/v;if(f.width){if(!n(h))return;return{width:h,height:h/y,type:\"svg\",mime:\"image/svg+xml\",wUnits:u(f.width),hUnits:u(f.width)}}if(f.height){if(!n(p))return;return{width:p*y,height:p,type:\"svg\",mime:\"image/svg+xml\",wUnits:u(f.height),hUnits:u(f.height)}}return{width:g,height:v,type:\"svg\",mime:\"image/svg+xml\",wUnits:u(m.width),hUnits:u(m.height)}}}}}},{}],520:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").str2arr,i\u003dt(\"../common\").sliceEq,a\u003dt(\"../common\").readUInt16LE,o\u003dt(\"../common\").readUInt16BE,s\u003dt(\"../common\").readUInt32LE,l\u003dt(\"../common\").readUInt32BE,c\u003dn(\"II*\\0\"),u\u003dn(\"MM\\0*\");function f(t,e,r){return r?o(t,e):a(t,e)}function h(t,e,r){return r?l(t,e):s(t,e)}function p(t,e,r){var n\u003df(t,e+2,r);return 1!\u003d\u003dh(t,e+4,r)||3!\u003d\u003dn\u0026\u00264!\u003d\u003dn?null:3\u003d\u003d\u003dn?f(t,e+8,r):h(t,e+8,r)}e.exports\u003dfunction(t){if(!(t.length\u003c8)\u0026\u0026(i(t,0,c)||i(t,0,u))){var e\u003d77\u003d\u003d\u003dt[0],r\u003dh(t,4,e)-8;if(!(r\u003c0)){var n\u003dr+8;if(!(t.length-n\u003c2)){var a\u003d12*f(t,n+0,e);if(!(a\u003c\u003d0||(n+\u003d2,t.length-n\u003ca))){var o,s,l,d;for(o\u003d0;o\u003ca;o+\u003d12)256\u003d\u003d\u003d(d\u003df(t,n+o,e))?s\u003dp(t,n+o,e):257\u003d\u003d\u003dd\u0026\u0026(l\u003dp(t,n+o,e));return s\u0026\u0026l?{width:s,height:l,type:\"tiff\",mime:\"image/tiff\",wUnits:\"px\",hUnits:\"px\"}:void 0}}}}}},{\"../common\":509}],521:[function(t,e,r){\"use strict\";var n\u003dt(\"../common\").str2arr,i\u003dt(\"../common\").sliceEq,a\u003dt(\"../common\").readUInt16LE,o\u003dt(\"../common\").readUInt32LE,s\u003dt(\"../exif_utils\"),l\u003dn(\"RIFF\"),c\u003dn(\"WEBP\");function u(t,e){if(157\u003d\u003d\u003dt[e+3]\u0026\u00261\u003d\u003d\u003dt[e+4]\u0026\u002642\u003d\u003d\u003dt[e+5])return{width:16383\u0026a(t,e+6),height:16383\u0026a(t,e+8),type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}function f(t,e){if(47\u003d\u003d\u003dt[e]){var r\u003do(t,e+1);return{width:1+(16383\u0026r),height:1+(r\u003e\u003e14\u002616383),type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}}function h(t,e){return{width:1+(t[e+6]\u003c\u003c16|t[e+5]\u003c\u003c8|t[e+4]),height:1+(t[e+9]\u003c\u003ce|t[e+8]\u003c\u003c8|t[e+7]),type:\"webp\",mime:\"image/webp\",wUnits:\"px\",hUnits:\"px\"}}e.exports\u003dfunction(t){if(!(t.length\u003c16)\u0026\u0026(i(t,0,l)||i(t,8,c))){var e\u003d12,r\u003dnull,n\u003d0,a\u003do(t,4)+8;if(!(a\u003et.length)){for(;e+8\u003ca;)if(0!\u003d\u003dt[e]){var p\u003dString.fromCharCode.apply(null,t.slice(e,e+4)),d\u003do(t,e+4);\"VP8 \"\u003d\u003d\u003dp\u0026\u0026d\u003e\u003d10?r\u003dr||u(t,e+8):\"VP8L\"\u003d\u003d\u003dp\u0026\u0026d\u003e\u003d9?r\u003dr||f(t,e+8):\"VP8X\"\u003d\u003d\u003dp\u0026\u0026d\u003e\u003d10?r\u003dr||h(t,e+8):\"EXIF\"\u003d\u003d\u003dp\u0026\u0026(n\u003ds.get_orientation(t.slice(e+8,e+8+d)),e\u003d1/0),e+\u003d8+d}else e++;if(r)return n\u003e0\u0026\u0026(r.orientation\u003dn),r}}}},{\"../common\":509,\"../exif_utils\":510}],522:[function(t,e,r){\"use strict\";e.exports\u003d{avif:t(\"./parse_sync/avif\"),bmp:t(\"./parse_sync/bmp\"),gif:t(\"./parse_sync/gif\"),ico:t(\"./parse_sync/ico\"),jpeg:t(\"./parse_sync/jpeg\"),png:t(\"./parse_sync/png\"),psd:t(\"./parse_sync/psd\"),svg:t(\"./parse_sync/svg\"),tiff:t(\"./parse_sync/tiff\"),webp:t(\"./parse_sync/webp\")}},{\"./parse_sync/avif\":512,\"./parse_sync/bmp\":513,\"./parse_sync/gif\":514,\"./parse_sync/ico\":515,\"./parse_sync/jpeg\":516,\"./parse_sync/png\":517,\"./parse_sync/psd\":518,\"./parse_sync/svg\":519,\"./parse_sync/tiff\":520,\"./parse_sync/webp\":521}],523:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/parsers_sync\");e.exports\u003dfunction(t){return function(t){for(var e\u003dObject.keys(n),r\u003d0;r\u003ce.length;r++){var i\u003dn[e[r]](t);if(i)return i}return null}(t)},e.exports.parsers\u003dn},{\"./lib/parsers_sync\":522}],524:[function(t,e,r){var n,i,a\u003de.exports\u003d{};function o(){throw new Error(\"setTimeout has not been defined\")}function s(){throw new Error(\"clearTimeout has not been defined\")}function l(t){if(n\u003d\u003d\u003dsetTimeout)return setTimeout(t,0);if((n\u003d\u003d\u003do||!n)\u0026\u0026setTimeout)return n\u003dsetTimeout,setTimeout(t,0);try{return n(t,0)}catch(e){try{return n.call(null,t,0)}catch(e){return n.call(this,t,0)}}}!function(){try{n\u003d\"function\"\u003d\u003dtypeof setTimeout?setTimeout:o}catch(t){n\u003do}try{i\u003d\"function\"\u003d\u003dtypeof clearTimeout?clearTimeout:s}catch(t){i\u003ds}}();var c,u\u003d[],f\u003d!1,h\u003d-1;function p(){f\u0026\u0026c\u0026\u0026(f\u003d!1,c.length?u\u003dc.concat(u):h\u003d-1,u.length\u0026\u0026d())}function d(){if(!f){var t\u003dl(p);f\u003d!0;for(var e\u003du.length;e;){for(c\u003du,u\u003d[];++h\u003ce;)c\u0026\u0026c[h].run();h\u003d-1,e\u003du.length}c\u003dnull,f\u003d!1,function(t){if(i\u003d\u003d\u003dclearTimeout)return clearTimeout(t);if((i\u003d\u003d\u003ds||!i)\u0026\u0026clearTimeout)return i\u003dclearTimeout,clearTimeout(t);try{i(t)}catch(e){try{return i.call(null,t)}catch(e){return i.call(this,t)}}}(t)}}function m(t,e){this.fun\u003dt,this.array\u003de}function g(){}a.nextTick\u003dfunction(t){var e\u003dnew Array(arguments.length-1);if(arguments.length\u003e1)for(var r\u003d1;r\u003carguments.length;r++)e[r-1]\u003darguments[r];u.push(new m(t,e)),1!\u003d\u003du.length||f||l(d)},m.prototype.run\u003dfunction(){this.fun.apply(null,this.array)},a.title\u003d\"browser\",a.browser\u003d!0,a.env\u003d{},a.argv\u003d[],a.version\u003d\"\",a.versions\u003d{},a.on\u003dg,a.addListener\u003dg,a.once\u003dg,a.off\u003dg,a.removeListener\u003dg,a.removeAllListeners\u003dg,a.emit\u003dg,a.prependListener\u003dg,a.prependOnceListener\u003dg,a.listeners\u003dfunction(t){return[]},a.binding\u003dfunction(t){throw new Error(\"process.binding is not supported\")},a.cwd\u003dfunction(){return\"/\"},a.chdir\u003dfunction(t){throw new Error(\"process.chdir is not supported\")},a.umask\u003dfunction(){return 0}},{}],525:[function(t,e,r){e.exports\u003dt(\"gl-quat/slerp\")},{\"gl-quat/slerp\":325}],526:[function(t,e,r){(function(r){(function(){for(var n\u003dt(\"performance-now\"),i\u003d\"undefined\"\u003d\u003dtypeof window?r:window,a\u003d[\"moz\",\"webkit\"],o\u003d\"AnimationFrame\",s\u003di[\"request\"+o],l\u003di[\"cancel\"+o]||i[\"cancelRequest\"+o],c\u003d0;!s\u0026\u0026c\u003ca.length;c++)s\u003di[a[c]+\"Request\"+o],l\u003di[a[c]+\"Cancel\"+o]||i[a[c]+\"CancelRequest\"+o];if(!s||!l){var u\u003d0,f\u003d0,h\u003d[];s\u003dfunction(t){if(0\u003d\u003d\u003dh.length){var e\u003dn(),r\u003dMath.max(0,1e3/60-(e-u));u\u003dr+e,setTimeout((function(){var t\u003dh.slice(0);h.length\u003d0;for(var e\u003d0;e\u003ct.length;e++)if(!t[e].cancelled)try{t[e].callback(u)}catch(t){setTimeout((function(){throw t}),0)}}),Math.round(r))}return h.push({handle:++f,callback:t,cancelled:!1}),f},l\u003dfunction(t){for(var e\u003d0;e\u003ch.length;e++)h[e].handle\u003d\u003d\u003dt\u0026\u0026(h[e].cancelled\u003d!0)}}e.exports\u003dfunction(t){return s.call(i,t)},e.exports.cancel\u003dfunction(){l.apply(i,arguments)},e.exports.polyfill\u003dfunction(t){t||(t\u003di),t.requestAnimationFrame\u003ds,t.cancelAnimationFrame\u003dl}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"performance-now\":491}],527:[function(t,e,r){\"use strict\";var n\u003dt(\"big-rat/add\");e.exports\u003dfunction(t,e){for(var r\u003dt.length,i\u003dnew Array(r),a\u003d0;a\u003cr;++a)i[a]\u003dn(t[a],e[a]);return i}},{\"big-rat/add\":87}],528:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003dnew Array(t.length),r\u003d0;r\u003ct.length;++r)e[r]\u003dn(t[r]);return e};var n\u003dt(\"big-rat\")},{\"big-rat\":90}],529:[function(t,e,r){\"use strict\";var n\u003dt(\"big-rat\"),i\u003dt(\"big-rat/mul\");e.exports\u003dfunction(t,e){for(var r\u003dn(e),a\u003dt.length,o\u003dnew Array(a),s\u003d0;s\u003ca;++s)o[s]\u003di(t[s],r);return o}},{\"big-rat\":90,\"big-rat/mul\":99}],530:[function(t,e,r){\"use strict\";var n\u003dt(\"big-rat/sub\");e.exports\u003dfunction(t,e){for(var r\u003dt.length,i\u003dnew Array(r),a\u003d0;a\u003cr;++a)i[a]\u003dn(t[a],e[a]);return i}},{\"big-rat/sub\":101}],531:[function(t,e,r){\"use strict\";var n\u003dt(\"compare-cell\"),i\u003dt(\"compare-oriented-cell\"),a\u003dt(\"cell-orientation\");e.exports\u003dfunction(t){t.sort(i);for(var e\u003dt.length,r\u003d0,o\u003d0;o\u003ce;++o){var s\u003dt[o],l\u003da(s);if(0!\u003d\u003dl){if(r\u003e0){var c\u003dt[r-1];if(0\u003d\u003d\u003dn(s,c)\u0026\u0026a(c)!\u003d\u003dl){r-\u003d1;continue}}t[r++]\u003ds}}return t.length\u003dr,t}},{\"cell-orientation\":123,\"compare-cell\":139,\"compare-oriented-cell\":140}],532:[function(t,e,r){\"use strict\";var n\u003dt(\"array-bounds\"),i\u003dt(\"color-normalize\"),a\u003dt(\"update-diff\"),o\u003dt(\"pick-by-alias\"),s\u003dt(\"object-assign\"),l\u003dt(\"flatten-vertex-data\"),c\u003dt(\"to-float32\"),u\u003dc.float32,f\u003dc.fract32;e.exports\u003dfunction(t,e){\"function\"\u003d\u003dtypeof t?(e||(e\u003d{}),e.regl\u003dt):e\u003dt;e.length\u0026\u0026(e.positions\u003de);if(!(t\u003de.regl).hasExtension(\"ANGLE_instanced_arrays\"))throw Error(\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\");var r,c,p,d,m,g,v\u003dt._gl,y\u003d{color:\"black\",capSize:5,lineWidth:1,opacity:1,viewport:null,range:null,offset:0,count:0,bounds:null,positions:[],errors:[]},x\u003d[];return d\u003dt.buffer({usage:\"dynamic\",type:\"uint8\",data:new Uint8Array(0)}),c\u003dt.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),p\u003dt.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),m\u003dt.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)}),g\u003dt.buffer({usage:\"static\",type:\"float\",data:h}),T(e),r\u003dt({vert:\"\\n\\t\\tprecision highp float;\\n\\n\\t\\tattribute vec2 position, positionFract;\\n\\t\\tattribute vec4 error;\\n\\t\\tattribute vec4 color;\\n\\n\\t\\tattribute vec2 direction, lineOffset, capOffset;\\n\\n\\t\\tuniform vec4 viewport;\\n\\t\\tuniform float lineWidth, capSize;\\n\\t\\tuniform vec2 scale, scaleFract, translate, translateFract;\\n\\n\\t\\tvarying vec4 fragColor;\\n\\n\\t\\tvoid main() {\\n\\t\\t\\tfragColor \u003d color / 255.;\\n\\n\\t\\t\\tvec2 pixelOffset \u003d lineWidth * lineOffset + (capSize + lineWidth) * capOffset;\\n\\n\\t\\t\\tvec2 dxy \u003d -step(.5, direction.xy) * error.xz + step(direction.xy, vec2(-.5)) * error.yw;\\n\\n\\t\\t\\tvec2 position \u003d position + dxy;\\n\\n\\t\\t\\tvec2 pos \u003d (position + translate) * scale\\n\\t\\t\\t\\t+ (positionFract + translateFract) * scale\\n\\t\\t\\t\\t+ (position + translate) * scaleFract\\n\\t\\t\\t\\t+ (positionFract + translateFract) * scaleFract;\\n\\n\\t\\t\\tpos +\u003d pixelOffset / viewport.zw;\\n\\n\\t\\t\\tgl_Position \u003d vec4(pos * 2. - 1., 0, 1);\\n\\t\\t}\\n\\t\\t\",frag:\"\\n\\t\\tprecision highp float;\\n\\n\\t\\tvarying vec4 fragColor;\\n\\n\\t\\tuniform float opacity;\\n\\n\\t\\tvoid main() {\\n\\t\\t\\tgl_FragColor \u003d fragColor;\\n\\t\\t\\tgl_FragColor.a *\u003d opacity;\\n\\t\\t}\\n\\t\\t\",uniforms:{range:t.prop(\"range\"),lineWidth:t.prop(\"lineWidth\"),capSize:t.prop(\"capSize\"),opacity:t.prop(\"opacity\"),scale:t.prop(\"scale\"),translate:t.prop(\"translate\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{color:{buffer:d,offset:function(t,e){return 4*e.offset},divisor:1},position:{buffer:c,offset:function(t,e){return 8*e.offset},divisor:1},positionFract:{buffer:p,offset:function(t,e){return 8*e.offset},divisor:1},error:{buffer:m,offset:function(t,e){return 16*e.offset},divisor:1},direction:{buffer:g,stride:24,offset:0},lineOffset:{buffer:g,stride:24,offset:8},capOffset:{buffer:g,stride:24,offset:16}},primitive:\"triangles\",blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\"add\",alpha:\"add\"},func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},depth:{enable:!1},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\"),stencil:!1,instances:t.prop(\"count\"),count:h.length}),s(b,{update:T,draw:_,destroy:k,regl:t,gl:v,canvas:v.canvas,groups:x}),b;function b(t){t?T(t):null\u003d\u003d\u003dt\u0026\u0026k(),_()}function _(e){if(\"number\"\u003d\u003dtypeof e)return w(e);e\u0026\u0026!Array.isArray(e)\u0026\u0026(e\u003d[e]),t._refresh(),x.forEach((function(t,r){t\u0026\u0026(e\u0026\u0026(e[r]?t.draw\u003d!0:t.draw\u003d!1),t.draw?w(r):t.draw\u003d!0)}))}function w(t){\"number\"\u003d\u003dtypeof t\u0026\u0026(t\u003dx[t]),null!\u003dt\u0026\u0026t\u0026\u0026t.count\u0026\u0026t.color\u0026\u0026t.opacity\u0026\u0026t.positions\u0026\u0026t.positions.length\u003e1\u0026\u0026(t.scaleRatio\u003d[t.scale[0]*t.viewport.width,t.scale[1]*t.viewport.height],r(t),t.after\u0026\u0026t.after(t))}function T(t){if(t){null!\u003dt.length?\"number\"\u003d\u003dtypeof t[0]\u0026\u0026(t\u003d[{positions:t}]):Array.isArray(t)||(t\u003d[t]);var e\u003d0,r\u003d0;if(b.groups\u003dx\u003dt.map((function(t,c){var u\u003dx[c];return t?(\"function\"\u003d\u003dtypeof t?t\u003d{after:t}:\"number\"\u003d\u003dtypeof t[0]\u0026\u0026(t\u003d{positions:t}),t\u003do(t,{color:\"color colors fill\",capSize:\"capSize cap capsize cap-size\",lineWidth:\"lineWidth line-width width line thickness\",opacity:\"opacity alpha\",range:\"range dataBox\",viewport:\"viewport viewBox\",errors:\"errors error\",positions:\"positions position data points\"}),u||(x[c]\u003du\u003d{id:c,scale:null,translate:null,scaleFract:null,translateFract:null,draw:!0},t\u003ds({},y,t)),a(u,t,[{lineWidth:function(t){return.5*+t},capSize:function(t){return.5*+t},opacity:parseFloat,errors:function(t){return t\u003dl(t),r+\u003dt.length,t},positions:function(t,r){return t\u003dl(t,\"float64\"),r.count\u003dMath.floor(t.length/2),r.bounds\u003dn(t,2),r.offset\u003de,e+\u003dr.count,t}},{color:function(t,e){var r\u003de.count;if(t||(t\u003d\"transparent\"),!Array.isArray(t)||\"number\"\u003d\u003dtypeof t[0]){var n\u003dt;t\u003dArray(r);for(var a\u003d0;a\u003cr;a++)t[a]\u003dn}if(t.length\u003cr)throw Error(\"Not enough colors\");for(var o\u003dnew Uint8Array(4*r),s\u003d0;s\u003cr;s++){var l\u003di(t[s],\"uint8\");o.set(l,4*s)}return o},range:function(t,e,r){var n\u003de.bounds;return t||(t\u003dn),e.scale\u003d[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate\u003d[-t[0],-t[1]],e.scaleFract\u003df(e.scale),e.translateFract\u003df(e.translate),t},viewport:function(t){var e;return Array.isArray(t)?e\u003d{x:t[0],y:t[1],width:t[2]-t[0],height:t[3]-t[1]}:t?(e\u003d{x:t.x||t.left||0,y:t.y||t.top||0},t.right?e.width\u003dt.right-e.x:e.width\u003dt.w||t.width||0,t.bottom?e.height\u003dt.bottom-e.y:e.height\u003dt.h||t.height||0):e\u003d{x:0,y:0,width:v.drawingBufferWidth,height:v.drawingBufferHeight},e}}]),u):u})),e||r){var h\u003dx.reduce((function(t,e,r){return t+(e?e.count:0)}),0),g\u003dnew Float64Array(2*h),_\u003dnew Uint8Array(4*h),w\u003dnew Float32Array(4*h);x.forEach((function(t,e){if(t){var r\u003dt.positions,n\u003dt.count,i\u003dt.offset,a\u003dt.color,o\u003dt.errors;n\u0026\u0026(_.set(a,4*i),w.set(o,4*i),g.set(r,2*i))}})),c(u(g)),p(f(g)),d(_),m(w)}}}function k(){c.destroy(),p.destroy(),d.destroy(),m.destroy(),g.destroy()}};var h\u003d[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]]},{\"array-bounds\":76,\"color-normalize\":131,\"flatten-vertex-data\":248,\"object-assign\":483,\"pick-by-alias\":494,\"to-float32\":595,\"update-diff\":617}],533:[function(t,e,r){\"use strict\";var n\u003dt(\"color-normalize\"),i\u003dt(\"array-bounds\"),a\u003dt(\"object-assign\"),o\u003dt(\"glslify\"),s\u003dt(\"pick-by-alias\"),l\u003dt(\"flatten-vertex-data\"),c\u003dt(\"earcut\"),u\u003dt(\"array-normalize\"),f\u003dt(\"to-float32\"),h\u003df.float32,p\u003df.fract32,d\u003dt(\"es6-weak-map\"),m\u003dt(\"parse-rect\"),g\u003dt(\"array-find-index\");function v(t,e){if(!(this instanceof v))return new v(t,e);if(\"function\"\u003d\u003dtypeof t?(e||(e\u003d{}),e.regl\u003dt):e\u003dt,e.length\u0026\u0026(e.positions\u003de),!(t\u003de.regl).hasExtension(\"ANGLE_instanced_arrays\"))throw Error(\"regl-error2d: `ANGLE_instanced_arrays` extension should be enabled\");this.gl\u003dt._gl,this.regl\u003dt,this.passes\u003d[],this.shaders\u003dv.shaders.has(t)?v.shaders.get(t):v.shaders.set(t,v.createShaders(t)).get(t),this.update(e)}e.exports\u003dv,v.dashMult\u003d2,v.maxPatternLength\u003d256,v.precisionThreshold\u003d3e6,v.maxPoints\u003d1e4,v.maxLines\u003d2048,v.shaders\u003dnew d,v.createShaders\u003dfunction(t){var e,r\u003dt.buffer({usage:\"static\",type:\"float\",data:[0,1,0,0,1,1,1,0]}),n\u003d{primitive:\"triangle strip\",instances:t.prop(\"count\"),count:4,offset:0,uniforms:{miterMode:function(t,e){return\"round\"\u003d\u003d\u003de.join?2:1},miterLimit:t.prop(\"miterLimit\"),scale:t.prop(\"scale\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),translate:t.prop(\"translate\"),thickness:t.prop(\"thickness\"),dashPattern:t.prop(\"dashTexture\"),opacity:t.prop(\"opacity\"),pixelRatio:t.context(\"pixelRatio\"),id:t.prop(\"id\"),dashSize:t.prop(\"dashLength\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]},depth:t.prop(\"depth\")},blend:{enable:!0,color:[0,0,0,0],equation:{rgb:\"add\",alpha:\"add\"},func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},depth:{enable:function(t,e){return!e.overlay}},stencil:{enable:!1},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\")},i\u003dt(a({vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 aCoord, bCoord, aCoordFract, bCoordFract;\\nattribute vec4 color;\\nattribute float lineEnd, lineTop;\\n\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float thickness, pixelRatio, id, depth;\\nuniform vec4 viewport;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\n\\nvec2 project(vec2 position, vec2 positionFract, vec2 scale, vec2 scaleFract, vec2 translate, vec2 translateFract) {\\n\\t// the order is important\\n\\treturn position * scale + translate\\n       + positionFract * scale + translateFract\\n       + position * scaleFract\\n       + positionFract * scaleFract;\\n}\\n\\nvoid main() {\\n\\tfloat lineStart \u003d 1. - lineEnd;\\n\\tfloat lineOffset \u003d lineTop * 2. - 1.;\\n\\n\\tvec2 diff \u003d (bCoord + bCoordFract - aCoord - aCoordFract);\\n\\ttangent \u003d normalize(diff * scale * viewport.zw);\\n\\tvec2 normal \u003d vec2(-tangent.y, tangent.x);\\n\\n\\tvec2 position \u003d project(aCoord, aCoordFract, scale, scaleFract, translate, translateFract) * lineStart\\n\\t\\t+ project(bCoord, bCoordFract, scale, scaleFract, translate, translateFract) * lineEnd\\n\\n\\t\\t+ thickness * normal * .5 * lineOffset / viewport.zw;\\n\\n\\tgl_Position \u003d vec4(position * 2.0 - 1.0, depth, 1);\\n\\n\\tfragColor \u003d color / 255.;\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D dashPattern;\\n\\nuniform float dashSize, pixelRatio, thickness, opacity, id;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\n\\nvoid main() {\\n\\tfloat alpha \u003d 1.;\\n\\n\\tfloat t \u003d fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\\n\\tfloat dash \u003d texture2D(dashPattern, vec2(t, .5)).r;\\n\\n\\tgl_FragColor \u003d fragColor;\\n\\tgl_FragColor.a *\u003d alpha * opacity * dash;\\n}\\n\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:16,divisor:1},aCoordFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:8,divisor:1},bCoordFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:16,divisor:1},color:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:0,divisor:1}}},n));try{e\u003dt(a({cull:{enable:!0,face:\"back\"},vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 aCoord, bCoord, nextCoord, prevCoord;\\nattribute vec4 aColor, bColor;\\nattribute float lineEnd, lineTop;\\n\\nuniform vec2 scale, translate;\\nuniform float thickness, pixelRatio, id, depth;\\nuniform vec4 viewport;\\nuniform float miterLimit, miterMode;\\n\\nvarying vec4 fragColor;\\nvarying vec4 startCutoff, endCutoff;\\nvarying vec2 tangent;\\nvarying vec2 startCoord, endCoord;\\nvarying float enableStartMiter, enableEndMiter;\\n\\nconst float REVERSE_THRESHOLD \u003d -.875;\\nconst float MIN_DIFF \u003d 1e-6;\\n\\n// TODO: possible optimizations: avoid overcalculating all for vertices and calc just one instead\\n// TODO: precalculate dot products, normalize things beforehead etc.\\n// TODO: refactor to rectangular algorithm\\n\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\n\\tvec2 diff \u003d b - a;\\n\\tvec2 perp \u003d normalize(vec2(-diff.y, diff.x));\\n\\treturn dot(p - a, perp);\\n}\\n\\nbool isNaN( float val ){\\n  return ( val \u003c 0.0 || 0.0 \u003c val || val \u003d\u003d 0.0 ) ? false : true;\\n}\\n\\nvoid main() {\\n\\tvec2 aCoord \u003d aCoord, bCoord \u003d bCoord, prevCoord \u003d prevCoord, nextCoord \u003d nextCoord;\\n\\n  vec2 adjustedScale;\\n  adjustedScale.x \u003d (abs(scale.x) \u003c MIN_DIFF) ? MIN_DIFF : scale.x;\\n  adjustedScale.y \u003d (abs(scale.y) \u003c MIN_DIFF) ? MIN_DIFF : scale.y;\\n\\n  vec2 scaleRatio \u003d adjustedScale * viewport.zw;\\n\\tvec2 normalWidth \u003d thickness / scaleRatio;\\n\\n\\tfloat lineStart \u003d 1. - lineEnd;\\n\\tfloat lineBot \u003d 1. - lineTop;\\n\\n\\tfragColor \u003d (lineStart * aColor + lineEnd * bColor) / 255.;\\n\\n\\tif (isNaN(aCoord.x) || isNaN(aCoord.y) || isNaN(bCoord.x) || isNaN(bCoord.y)) return;\\n\\n\\tif (aCoord \u003d\u003d prevCoord) prevCoord \u003d aCoord + normalize(bCoord - aCoord);\\n\\tif (bCoord \u003d\u003d nextCoord) nextCoord \u003d bCoord - normalize(bCoord - aCoord);\\n\\n\\tvec2 prevDiff \u003d aCoord - prevCoord;\\n\\tvec2 currDiff \u003d bCoord - aCoord;\\n\\tvec2 nextDiff \u003d nextCoord - bCoord;\\n\\n\\tvec2 prevTangent \u003d normalize(prevDiff * scaleRatio);\\n\\tvec2 currTangent \u003d normalize(currDiff * scaleRatio);\\n\\tvec2 nextTangent \u003d normalize(nextDiff * scaleRatio);\\n\\n\\tvec2 prevNormal \u003d vec2(-prevTangent.y, prevTangent.x);\\n\\tvec2 currNormal \u003d vec2(-currTangent.y, currTangent.x);\\n\\tvec2 nextNormal \u003d vec2(-nextTangent.y, nextTangent.x);\\n\\n\\tvec2 startJoinDirection \u003d normalize(prevTangent - currTangent);\\n\\tvec2 endJoinDirection \u003d normalize(currTangent - nextTangent);\\n\\n\\t// collapsed/unidirectional segment cases\\n\\t// FIXME: there should be more elegant solution\\n\\tvec2 prevTanDiff \u003d abs(prevTangent - currTangent);\\n\\tvec2 nextTanDiff \u003d abs(nextTangent - currTangent);\\n\\tif (max(prevTanDiff.x, prevTanDiff.y) \u003c MIN_DIFF) {\\n\\t\\tstartJoinDirection \u003d currNormal;\\n\\t}\\n\\tif (max(nextTanDiff.x, nextTanDiff.y) \u003c MIN_DIFF) {\\n\\t\\tendJoinDirection \u003d currNormal;\\n\\t}\\n\\tif (aCoord \u003d\u003d bCoord) {\\n\\t\\tendJoinDirection \u003d startJoinDirection;\\n\\t\\tcurrNormal \u003d prevNormal;\\n\\t\\tcurrTangent \u003d prevTangent;\\n\\t}\\n\\n\\ttangent \u003d currTangent;\\n\\n\\t//calculate join shifts relative to normals\\n\\tfloat startJoinShift \u003d dot(currNormal, startJoinDirection);\\n\\tfloat endJoinShift \u003d dot(currNormal, endJoinDirection);\\n\\n\\tfloat startMiterRatio \u003d abs(1. / startJoinShift);\\n\\tfloat endMiterRatio \u003d abs(1. / endJoinShift);\\n\\n\\tvec2 startJoin \u003d startJoinDirection * startMiterRatio;\\n\\tvec2 endJoin \u003d endJoinDirection * endMiterRatio;\\n\\n\\tvec2 startTopJoin, startBotJoin, endTopJoin, endBotJoin;\\n\\tstartTopJoin \u003d sign(startJoinShift) * startJoin * .5;\\n\\tstartBotJoin \u003d -startTopJoin;\\n\\n\\tendTopJoin \u003d sign(endJoinShift) * endJoin * .5;\\n\\tendBotJoin \u003d -endTopJoin;\\n\\n\\tvec2 aTopCoord \u003d aCoord + normalWidth * startTopJoin;\\n\\tvec2 bTopCoord \u003d bCoord + normalWidth * endTopJoin;\\n\\tvec2 aBotCoord \u003d aCoord + normalWidth * startBotJoin;\\n\\tvec2 bBotCoord \u003d bCoord + normalWidth * endBotJoin;\\n\\n\\t//miter anti-clipping\\n\\tfloat baClipping \u003d distToLine(bCoord, aCoord, aBotCoord) / dot(normalize(normalWidth * endBotJoin), normalize(normalWidth.yx * vec2(-startBotJoin.y, startBotJoin.x)));\\n\\tfloat abClipping \u003d distToLine(aCoord, bCoord, bTopCoord) / dot(normalize(normalWidth * startBotJoin), normalize(normalWidth.yx * vec2(-endBotJoin.y, endBotJoin.x)));\\n\\n\\t//prevent close to reverse direction switch\\n\\tbool prevReverse \u003d dot(currTangent, prevTangent) \u003c\u003d REVERSE_THRESHOLD \u0026\u0026 abs(dot(currTangent, prevNormal)) * min(length(prevDiff), length(currDiff)) \u003c  length(normalWidth * currNormal);\\n\\tbool nextReverse \u003d dot(currTangent, nextTangent) \u003c\u003d REVERSE_THRESHOLD \u0026\u0026 abs(dot(currTangent, nextNormal)) * min(length(nextDiff), length(currDiff)) \u003c  length(normalWidth * currNormal);\\n\\n\\tif (prevReverse) {\\n\\t\\t//make join rectangular\\n\\t\\tvec2 miterShift \u003d normalWidth * startJoinDirection * miterLimit * .5;\\n\\t\\tfloat normalAdjust \u003d 1. - min(miterLimit / startMiterRatio, 1.);\\n\\t\\taBotCoord \u003d aCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\n\\t\\taTopCoord \u003d aCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\n\\t}\\n\\telse if (!nextReverse \u0026\u0026 baClipping \u003e 0. \u0026\u0026 baClipping \u003c length(normalWidth * endBotJoin)) {\\n\\t\\t//handle miter clipping\\n\\t\\tbTopCoord -\u003d normalWidth * endTopJoin;\\n\\t\\tbTopCoord +\u003d normalize(endTopJoin * normalWidth) * baClipping;\\n\\t}\\n\\n\\tif (nextReverse) {\\n\\t\\t//make join rectangular\\n\\t\\tvec2 miterShift \u003d normalWidth * endJoinDirection * miterLimit * .5;\\n\\t\\tfloat normalAdjust \u003d 1. - min(miterLimit / endMiterRatio, 1.);\\n\\t\\tbBotCoord \u003d bCoord + miterShift - normalAdjust * normalWidth * currNormal * .5;\\n\\t\\tbTopCoord \u003d bCoord + miterShift + normalAdjust * normalWidth * currNormal * .5;\\n\\t}\\n\\telse if (!prevReverse \u0026\u0026 abClipping \u003e 0. \u0026\u0026 abClipping \u003c length(normalWidth * startBotJoin)) {\\n\\t\\t//handle miter clipping\\n\\t\\taBotCoord -\u003d normalWidth * startBotJoin;\\n\\t\\taBotCoord +\u003d normalize(startBotJoin * normalWidth) * abClipping;\\n\\t}\\n\\n\\tvec2 aTopPosition \u003d (aTopCoord) * adjustedScale + translate;\\n\\tvec2 aBotPosition \u003d (aBotCoord) * adjustedScale + translate;\\n\\n\\tvec2 bTopPosition \u003d (bTopCoord) * adjustedScale + translate;\\n\\tvec2 bBotPosition \u003d (bBotCoord) * adjustedScale + translate;\\n\\n\\t//position is normalized 0..1 coord on the screen\\n\\tvec2 position \u003d (aTopPosition * lineTop + aBotPosition * lineBot) * lineStart + (bTopPosition * lineTop + bBotPosition * lineBot) * lineEnd;\\n\\n\\tstartCoord \u003d aCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\n\\tendCoord \u003d bCoord * scaleRatio + translate * viewport.zw + viewport.xy;\\n\\n\\tgl_Position \u003d vec4(position  * 2.0 - 1.0, depth, 1);\\n\\n\\tenableStartMiter \u003d step(dot(currTangent, prevTangent), .5);\\n\\tenableEndMiter \u003d step(dot(currTangent, nextTangent), .5);\\n\\n\\t//bevel miter cutoffs\\n\\tif (miterMode \u003d\u003d 1.) {\\n\\t\\tif (enableStartMiter \u003d\u003d 1.) {\\n\\t\\t\\tvec2 startMiterWidth \u003d vec2(startJoinDirection) * thickness * miterLimit * .5;\\n\\t\\t\\tstartCutoff \u003d vec4(aCoord, aCoord);\\n\\t\\t\\tstartCutoff.zw +\u003d vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\n\\t\\t\\tstartCutoff \u003d startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tstartCutoff +\u003d viewport.xyxy;\\n\\t\\t\\tstartCutoff +\u003d startMiterWidth.xyxy;\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter \u003d\u003d 1.) {\\n\\t\\t\\tvec2 endMiterWidth \u003d vec2(endJoinDirection) * thickness * miterLimit * .5;\\n\\t\\t\\tendCutoff \u003d vec4(bCoord, bCoord);\\n\\t\\t\\tendCutoff.zw +\u003d vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\n\\t\\t\\tendCutoff \u003d endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tendCutoff +\u003d viewport.xyxy;\\n\\t\\t\\tendCutoff +\u003d endMiterWidth.xyxy;\\n\\t\\t}\\n\\t}\\n\\n\\t//round miter cutoffs\\n\\telse if (miterMode \u003d\u003d 2.) {\\n\\t\\tif (enableStartMiter \u003d\u003d 1.) {\\n\\t\\t\\tvec2 startMiterWidth \u003d vec2(startJoinDirection) * thickness * abs(dot(startJoinDirection, currNormal)) * .5;\\n\\t\\t\\tstartCutoff \u003d vec4(aCoord, aCoord);\\n\\t\\t\\tstartCutoff.zw +\u003d vec2(-startJoinDirection.y, startJoinDirection.x) / scaleRatio;\\n\\t\\t\\tstartCutoff \u003d startCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tstartCutoff +\u003d viewport.xyxy;\\n\\t\\t\\tstartCutoff +\u003d startMiterWidth.xyxy;\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter \u003d\u003d 1.) {\\n\\t\\t\\tvec2 endMiterWidth \u003d vec2(endJoinDirection) * thickness * abs(dot(endJoinDirection, currNormal)) * .5;\\n\\t\\t\\tendCutoff \u003d vec4(bCoord, bCoord);\\n\\t\\t\\tendCutoff.zw +\u003d vec2(-endJoinDirection.y, endJoinDirection.x)  / scaleRatio;\\n\\t\\t\\tendCutoff \u003d endCutoff * scaleRatio.xyxy + translate.xyxy * viewport.zwzw;\\n\\t\\t\\tendCutoff +\u003d viewport.xyxy;\\n\\t\\t\\tendCutoff +\u003d endMiterWidth.xyxy;\\n\\t\\t}\\n\\t}\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nuniform sampler2D dashPattern;\\nuniform float dashSize, pixelRatio, thickness, opacity, id, miterMode;\\n\\nvarying vec4 fragColor;\\nvarying vec2 tangent;\\nvarying vec4 startCutoff, endCutoff;\\nvarying vec2 startCoord, endCoord;\\nvarying float enableStartMiter, enableEndMiter;\\n\\nfloat distToLine(vec2 p, vec2 a, vec2 b) {\\n\\tvec2 diff \u003d b - a;\\n\\tvec2 perp \u003d normalize(vec2(-diff.y, diff.x));\\n\\treturn dot(p - a, perp);\\n}\\n\\nvoid main() {\\n\\tfloat alpha \u003d 1., distToStart, distToEnd;\\n\\tfloat cutoff \u003d thickness * .5;\\n\\n\\t//bevel miter\\n\\tif (miterMode \u003d\u003d 1.) {\\n\\t\\tif (enableStartMiter \u003d\u003d 1.) {\\n\\t\\t\\tdistToStart \u003d distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\n\\t\\t\\tif (distToStart \u003c -1.) {\\n\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\talpha *\u003d min(max(distToStart + 1., 0.), 1.);\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter \u003d\u003d 1.) {\\n\\t\\t\\tdistToEnd \u003d distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\n\\t\\t\\tif (distToEnd \u003c -1.) {\\n\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\treturn;\\n\\t\\t\\t}\\n\\t\\t\\talpha *\u003d min(max(distToEnd + 1., 0.), 1.);\\n\\t\\t}\\n\\t}\\n\\n\\t// round miter\\n\\telse if (miterMode \u003d\u003d 2.) {\\n\\t\\tif (enableStartMiter \u003d\u003d 1.) {\\n\\t\\t\\tdistToStart \u003d distToLine(gl_FragCoord.xy, startCutoff.xy, startCutoff.zw);\\n\\t\\t\\tif (distToStart \u003c 0.) {\\n\\t\\t\\t\\tfloat radius \u003d length(gl_FragCoord.xy - startCoord);\\n\\n\\t\\t\\t\\tif(radius \u003e cutoff + .5) {\\n\\t\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\talpha -\u003d smoothstep(cutoff - .5, cutoff + .5, radius);\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tif (enableEndMiter \u003d\u003d 1.) {\\n\\t\\t\\tdistToEnd \u003d distToLine(gl_FragCoord.xy, endCutoff.xy, endCutoff.zw);\\n\\t\\t\\tif (distToEnd \u003c 0.) {\\n\\t\\t\\t\\tfloat radius \u003d length(gl_FragCoord.xy - endCoord);\\n\\n\\t\\t\\t\\tif(radius \u003e cutoff + .5) {\\n\\t\\t\\t\\t\\tdiscard;\\n\\t\\t\\t\\t\\treturn;\\n\\t\\t\\t\\t}\\n\\n\\t\\t\\t\\talpha -\u003d smoothstep(cutoff - .5, cutoff + .5, radius);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\tfloat t \u003d fract(dot(tangent, gl_FragCoord.xy) / dashSize) * .5 + .25;\\n\\tfloat dash \u003d texture2D(dashPattern, vec2(t, .5)).r;\\n\\n\\tgl_FragColor \u003d fragColor;\\n\\tgl_FragColor.a *\u003d alpha * opacity * dash;\\n}\\n\"]),attributes:{lineEnd:{buffer:r,divisor:0,stride:8,offset:0},lineTop:{buffer:r,divisor:0,stride:8,offset:4},aColor:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:0,divisor:1},bColor:{buffer:t.prop(\"colorBuffer\"),stride:4,offset:4,divisor:1},prevCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:0,divisor:1},aCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8,divisor:1},bCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:16,divisor:1},nextCoord:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:24,divisor:1}}},n))}catch(t){e\u003di}return{fill:t({primitive:\"triangle\",elements:function(t,e){return e.triangles},offset:0,vert:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute vec2 position, positionFract;\\n\\nuniform vec4 color;\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float pixelRatio, id;\\nuniform vec4 viewport;\\nuniform float opacity;\\n\\nvarying vec4 fragColor;\\n\\nconst float MAX_LINES \u003d 256.;\\n\\nvoid main() {\\n\\tfloat depth \u003d (MAX_LINES - 4. - id) / (MAX_LINES);\\n\\n\\tvec2 position \u003d position * scale + translate\\n       + positionFract * scale + translateFract\\n       + position * scaleFract\\n       + positionFract * scaleFract;\\n\\n\\tgl_Position \u003d vec4(position * 2.0 - 1.0, depth, 1);\\n\\n\\tfragColor \u003d color / 255.;\\n\\tfragColor.a *\u003d opacity;\\n}\\n\"]),frag:o([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n\\tgl_FragColor \u003d fragColor;\\n}\\n\"]),uniforms:{scale:t.prop(\"scale\"),color:t.prop(\"fill\"),scaleFract:t.prop(\"scaleFract\"),translateFract:t.prop(\"translateFract\"),translate:t.prop(\"translate\"),opacity:t.prop(\"opacity\"),pixelRatio:t.context(\"pixelRatio\"),id:t.prop(\"id\"),viewport:function(t,e){return[e.viewport.x,e.viewport.y,t.viewportWidth,t.viewportHeight]}},attributes:{position:{buffer:t.prop(\"positionBuffer\"),stride:8,offset:8},positionFract:{buffer:t.prop(\"positionFractBuffer\"),stride:8,offset:8}},blend:n.blend,depth:{enable:!1},scissor:n.scissor,stencil:n.stencil,viewport:n.viewport}),rect:i,miter:e}},v.defaults\u003d{dashes:null,join:\"miter\",miterLimit:1,thickness:10,cap:\"square\",color:\"black\",opacity:1,overlay:!1,viewport:null,range:null,close:!1,fill:null},v.prototype.render\u003dfunction(){for(var t,e\u003d[],r\u003darguments.length;r--;)e[r]\u003darguments[r];e.length\u0026\u0026(t\u003dthis).update.apply(t,e),this.draw()},v.prototype.draw\u003dfunction(){for(var t\u003dthis,e\u003d[],r\u003darguments.length;r--;)e[r]\u003darguments[r];return(e.length?e:this.passes).forEach((function(e,r){var n;if(e\u0026\u0026Array.isArray(e))return(n\u003dt).draw.apply(n,e);\"number\"\u003d\u003dtypeof e\u0026\u0026(e\u003dt.passes[e]),e\u0026\u0026e.count\u003e1\u0026\u0026e.opacity\u0026\u0026(t.regl._refresh(),e.fill\u0026\u0026e.triangles\u0026\u0026e.triangles.length\u003e2\u0026\u0026t.shaders.fill(e),e.thickness\u0026\u0026(e.scale[0]*e.viewport.width\u003ev.precisionThreshold||e.scale[1]*e.viewport.height\u003ev.precisionThreshold||\"rect\"\u003d\u003d\u003de.join||!e.join\u0026\u0026(e.thickness\u003c\u003d2||e.count\u003e\u003dv.maxPoints)?t.shaders.rect(e):t.shaders.miter(e)))})),this},v.prototype.update\u003dfunction(t){var e\u003dthis;if(t){null!\u003dt.length?\"number\"\u003d\u003dtypeof t[0]\u0026\u0026(t\u003d[{positions:t}]):Array.isArray(t)||(t\u003d[t]);var r\u003dthis.regl,o\u003dthis.gl;if(t.forEach((function(t,f){var d\u003de.passes[f];if(void 0!\u003d\u003dt)if(null!\u003d\u003dt){if(\"number\"\u003d\u003dtypeof t[0]\u0026\u0026(t\u003d{positions:t}),t\u003ds(t,{positions:\"positions points data coords\",thickness:\"thickness lineWidth lineWidths line-width linewidth width stroke-width strokewidth strokeWidth\",join:\"lineJoin linejoin join type mode\",miterLimit:\"miterlimit miterLimit\",dashes:\"dash dashes dasharray dash-array dashArray\",color:\"color colour stroke colors colours stroke-color strokeColor\",fill:\"fill fill-color fillColor\",opacity:\"alpha opacity\",overlay:\"overlay crease overlap intersect\",close:\"closed close closed-path closePath\",range:\"range dataBox\",viewport:\"viewport viewBox\",hole:\"holes hole hollow\",splitNull:\"splitNull\"}),d||(e.passes[f]\u003dd\u003d{id:f,scale:null,scaleFract:null,translate:null,translateFract:null,count:0,hole:[],depth:0,dashLength:1,dashTexture:r.texture({channels:1,data:new Uint8Array([255]),width:1,height:1,mag:\"linear\",min:\"linear\"}),colorBuffer:r.buffer({usage:\"dynamic\",type:\"uint8\",data:new Uint8Array}),positionBuffer:r.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array}),positionFractBuffer:r.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array})},t\u003da({},v.defaults,t)),null!\u003dt.thickness\u0026\u0026(d.thickness\u003dparseFloat(t.thickness)),null!\u003dt.opacity\u0026\u0026(d.opacity\u003dparseFloat(t.opacity)),null!\u003dt.miterLimit\u0026\u0026(d.miterLimit\u003dparseFloat(t.miterLimit)),null!\u003dt.overlay\u0026\u0026(d.overlay\u003d!!t.overlay,f\u003cv.maxLines\u0026\u0026(d.depth\u003d2*(v.maxLines-1-f%v.maxLines)/v.maxLines-1)),null!\u003dt.join\u0026\u0026(d.join\u003dt.join),null!\u003dt.hole\u0026\u0026(d.hole\u003dt.hole),null!\u003dt.fill\u0026\u0026(d.fill\u003dt.fill?n(t.fill,\"uint8\"):null),null!\u003dt.viewport\u0026\u0026(d.viewport\u003dm(t.viewport)),d.viewport||(d.viewport\u003dm([o.drawingBufferWidth,o.drawingBufferHeight])),null!\u003dt.close\u0026\u0026(d.close\u003dt.close),null\u003d\u003d\u003dt.positions\u0026\u0026(t.positions\u003d[]),t.positions){var y,x;if(t.positions.x\u0026\u0026t.positions.y){var b\u003dt.positions.x,_\u003dt.positions.y;x\u003dd.count\u003dMath.max(b.length,_.length),y\u003dnew Float64Array(2*x);for(var w\u003d0;w\u003cx;w++)y[2*w]\u003db[w],y[2*w+1]\u003d_[w]}else y\u003dl(t.positions,\"float64\"),x\u003dd.count\u003dMath.floor(y.length/2);var T\u003dd.bounds\u003di(y,2);if(d.fill){for(var k\u003d[],M\u003d{},A\u003d0,S\u003d0,E\u003d0,L\u003dd.count;S\u003cL;S++){var C\u003dy[2*S],P\u003dy[2*S+1];isNaN(C)||isNaN(P)||null\u003d\u003dC||null\u003d\u003dP?(C\u003dy[2*A],P\u003dy[2*A+1],M[S]\u003dA):A\u003dS,k[E++]\u003dC,k[E++]\u003dP}if(t.splitNull){d.count-1 in M||(M[d.count]\u003dd.count-1);var I\u003dObject.keys(M).map(Number).sort((function(t,e){return t-e})),O\u003d[],z\u003d0,D\u003dnull!\u003dd.hole?d.hole[0]:null;if(null!\u003dD){var R\u003dg(I,(function(t){return t\u003e\u003dD}));(I\u003dI.slice(0,R)).push(D)}for(var F\u003dfunction(t){var e\u003dk.slice(2*z,2*I[t]).concat(D?k.slice(2*D):[]),r\u003d(d.hole||[]).map((function(e){return e-D+(I[t]-z)})),n\u003dc(e,r);n\u003dn.map((function(e){return e+z+(e+z\u003cI[t]?0:D-I[t])})),O.push.apply(O,n),z\u003dI[t]+1},B\u003d0;B\u003cI.length;B++)F(B);for(var N\u003d0,j\u003dO.length;N\u003cj;N++)null!\u003dM[O[N]]\u0026\u0026(O[N]\u003dM[O[N]]);d.triangles\u003dO}else{for(var U\u003dc(k,d.hole||[]),V\u003d0,q\u003dU.length;V\u003cq;V++)null!\u003dM[U[V]]\u0026\u0026(U[V]\u003dM[U[V]]);d.triangles\u003dU}}var H\u003dnew Float64Array(y);u(H,2,T);var G\u003dnew Float64Array(2*x+6);d.close?y[0]\u003d\u003d\u003dy[2*x-2]\u0026\u0026y[1]\u003d\u003d\u003dy[2*x-1]?(G[0]\u003dH[2*x-4],G[1]\u003dH[2*x-3]):(G[0]\u003dH[2*x-2],G[1]\u003dH[2*x-1]):(G[0]\u003dH[0],G[1]\u003dH[1]),G.set(H,2),d.close?y[0]\u003d\u003d\u003dy[2*x-2]\u0026\u0026y[1]\u003d\u003d\u003dy[2*x-1]?(G[2*x+2]\u003dH[2],G[2*x+3]\u003dH[3],d.count-\u003d1):(G[2*x+2]\u003dH[0],G[2*x+3]\u003dH[1],G[2*x+4]\u003dH[2],G[2*x+5]\u003dH[3]):(G[2*x+2]\u003dH[2*x-2],G[2*x+3]\u003dH[2*x-1],G[2*x+4]\u003dH[2*x-2],G[2*x+5]\u003dH[2*x-1]),d.positionBuffer(h(G)),d.positionFractBuffer(p(G))}if(t.range?d.range\u003dt.range:d.range||(d.range\u003dd.bounds),(t.range||t.positions)\u0026\u0026d.count){var Y\u003dd.bounds,W\u003dY[2]-Y[0],X\u003dY[3]-Y[1],Z\u003dd.range[2]-d.range[0],J\u003dd.range[3]-d.range[1];d.scale\u003d[W/Z,X/J],d.translate\u003d[-d.range[0]/Z+Y[0]/Z||0,-d.range[1]/J+Y[1]/J||0],d.scaleFract\u003dp(d.scale),d.translateFract\u003dp(d.translate)}if(t.dashes){var K,Q\u003d0;if(!t.dashes||t.dashes.length\u003c2)Q\u003d1,K\u003dnew Uint8Array([255,255,255,255,255,255,255,255]);else{Q\u003d0;for(var $\u003d0;$\u003ct.dashes.length;++$)Q+\u003dt.dashes[$];K\u003dnew Uint8Array(Q*v.dashMult);for(var tt\u003d0,et\u003d255,rt\u003d0;rt\u003c2;rt++)for(var nt\u003d0;nt\u003ct.dashes.length;++nt){for(var it\u003d0,at\u003dt.dashes[nt]*v.dashMult*.5;it\u003cat;++it)K[tt++]\u003det;et^\u003d255}}d.dashLength\u003dQ,d.dashTexture({channels:1,data:K,width:K.length,height:1,mag:\"linear\",min:\"linear\"},0,0)}if(t.color){var ot\u003dd.count,st\u003dt.color;st||(st\u003d\"transparent\");var lt\u003dnew Uint8Array(4*ot+4);if(Array.isArray(st)\u0026\u0026\"number\"!\u003dtypeof st[0]){for(var ct\u003d0;ct\u003cot;ct++){var ut\u003dn(st[ct],\"uint8\");lt.set(ut,4*ct)}lt.set(n(st[0],\"uint8\"),4*ot)}else for(var ft\u003dn(st,\"uint8\"),ht\u003d0;ht\u003cot+1;ht++)lt.set(ft,4*ht);d.colorBuffer({usage:\"dynamic\",type:\"uint8\",data:lt})}}else e.passes[f]\u003dnull})),t.length\u003cthis.passes.length){for(var f\u003dt.length;f\u003cthis.passes.length;f++){var d\u003dthis.passes[f];d\u0026\u0026(d.colorBuffer.destroy(),d.positionBuffer.destroy(),d.dashTexture.destroy())}this.passes.length\u003dt.length}for(var y\u003d[],x\u003d0;x\u003cthis.passes.length;x++)null!\u003d\u003dthis.passes[x]\u0026\u0026y.push(this.passes[x]);return this.passes\u003dy,this}},v.prototype.destroy\u003dfunction(){return this.passes.forEach((function(t){t.colorBuffer.destroy(),t.positionBuffer.destroy(),t.dashTexture.destroy()})),this.passes.length\u003d0,this}},{\"array-bounds\":76,\"array-find-index\":77,\"array-normalize\":78,\"color-normalize\":131,earcut:182,\"es6-weak-map\":237,\"flatten-vertex-data\":248,glslify:438,\"object-assign\":483,\"parse-rect\":488,\"pick-by-alias\":494,\"to-float32\":595}],534:[function(t,e,r){\"use strict\";function n(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if(\"undefined\"\u003d\u003dtypeof Symbol||!(Symbol.iterator in Object(t)))return;var r\u003d[],n\u003d!0,i\u003d!1,a\u003dvoid 0;try{for(var o,s\u003dt[Symbol.iterator]();!(n\u003d(o\u003ds.next()).done)\u0026\u0026(r.push(o.value),!e||r.length!\u003d\u003de);n\u003d!0);}catch(t){i\u003d!0,a\u003dt}finally{try{n||null\u003d\u003ds.return||s.return()}finally{if(i)throw a}}return r}(t,e)||a(t,e)||function(){throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function i(t){return function(t){if(Array.isArray(t))return o(t)}(t)||function(t){if(\"undefined\"!\u003dtypeof Symbol\u0026\u0026Symbol.iterator in Object(t))return Array.from(t)}(t)||a(t)||function(){throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}()}function a(t,e){if(t){if(\"string\"\u003d\u003dtypeof t)return o(t,e);var r\u003dObject.prototype.toString.call(t).slice(8,-1);return\"Object\"\u003d\u003d\u003dr\u0026\u0026t.constructor\u0026\u0026(r\u003dt.constructor.name),\"Map\"\u003d\u003d\u003dr||\"Set\"\u003d\u003d\u003dr?Array.from(t):\"Arguments\"\u003d\u003d\u003dr||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(t,e):void 0}}function o(t,e){(null\u003d\u003de||e\u003et.length)\u0026\u0026(e\u003dt.length);for(var r\u003d0,n\u003dnew Array(e);r\u003ce;r++)n[r]\u003dt[r];return n}var s\u003dt(\"color-normalize\"),l\u003dt(\"array-bounds\"),c\u003dt(\"color-id\"),u\u003dt(\"@plotly/point-cluster\"),f\u003dt(\"object-assign\"),h\u003dt(\"glslify\"),p\u003dt(\"pick-by-alias\"),d\u003dt(\"update-diff\"),m\u003dt(\"flatten-vertex-data\"),g\u003dt(\"is-iexplorer\"),v\u003dt(\"to-float32\"),y\u003dt(\"parse-rect\"),x\u003db;function b(t,e){var r\u003dthis;if(!(this instanceof b))return new b(t,e);\"function\"\u003d\u003dtypeof t?(e||(e\u003d{}),e.regl\u003dt):(e\u003dt,t\u003dnull),e\u0026\u0026e.length\u0026\u0026(e.positions\u003de);var n,i\u003d(t\u003de.regl)._gl,a\u003d[];this.tooManyColors\u003dg,n\u003dt.texture({data:new Uint8Array(1020),width:255,height:1,type:\"uint8\",format:\"rgba\",wrapS:\"clamp\",wrapT:\"clamp\",mag:\"nearest\",min:\"nearest\"}),f(this,{regl:t,gl:i,groups:[],markerCache:[null],markerTextures:[null],palette:a,paletteIds:{},paletteTexture:n,maxColors:255,maxSize:100,canvas:i.canvas}),this.update(e);var o\u003d{uniforms:{constPointSize:!!e.constPointSize,pixelRatio:t.context(\"pixelRatio\"),palette:n,paletteSize:function(t,e){return[r.tooManyColors?0:255,n.height]},scale:t.prop(\"scale\"),scaleFract:t.prop(\"scaleFract\"),translate:t.prop(\"translate\"),translateFract:t.prop(\"translateFract\"),opacity:t.prop(\"opacity\"),marker:t.prop(\"markerTexture\")},attributes:{x:function(t,e){return e.xAttr||{buffer:e.positionBuffer,stride:8,offset:0}},y:function(t,e){return e.yAttr||{buffer:e.positionBuffer,stride:8,offset:4}},xFract:function(t,e){return e.xAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:0}},yFract:function(t,e){return e.yAttr?{constant:[0,0]}:{buffer:e.positionFractBuffer,stride:8,offset:4}},size:function(t,e){return e.size.length?{buffer:e.sizeBuffer,stride:2,offset:0}:{constant:[Math.round(255*e.size/r.maxSize)]}},borderSize:function(t,e){return e.borderSize.length?{buffer:e.sizeBuffer,stride:2,offset:1}:{constant:[Math.round(255*e.borderSize/r.maxSize)]}},colorId:function(t,e){return e.color.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:0}:{constant:r.tooManyColors?a.slice(4*e.color,4*e.color+4):[e.color]}},borderColorId:function(t,e){return e.borderColor.length?{buffer:e.colorBuffer,stride:r.tooManyColors?8:4,offset:r.tooManyColors?4:2}:{constant:r.tooManyColors?a.slice(4*e.borderColor,4*e.borderColor+4):[e.borderColor]}},isActive:function(t,e){return!0\u003d\u003d\u003de.activation?{constant:[1]}:e.activation?e.activation:{constant:[0]}}},blend:{enable:!0,color:[0,0,0,1],func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:\"one minus dst alpha\",dstAlpha:\"one\"}},scissor:{enable:!0,box:t.prop(\"viewport\")},viewport:t.prop(\"viewport\"),stencil:{enable:!1},depth:{enable:!1},elements:t.prop(\"elements\"),count:t.prop(\"count\"),offset:t.prop(\"offset\"),primitive:\"points\"},s\u003df({},o);s.frag\u003dh([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragWidth, fragBorderColorLevel, fragColorLevel;\\n\\nuniform sampler2D marker;\\nuniform float opacity;\\n\\nfloat smoothStep(float x, float y) {\\n  return 1.0 / (1.0 + exp(50.0*(x - y)));\\n}\\n\\nvoid main() {\\n  float dist \u003d texture2D(marker, gl_PointCoord).r, delta \u003d fragWidth;\\n\\n  // max-distance alpha\\n  if (dist \u003c 0.003) discard;\\n\\n  // null-border case\\n  if (fragBorderColorLevel \u003d\u003d fragColorLevel || fragBorderColor.a \u003d\u003d 0.) {\\n    float colorAmt \u003d smoothstep(.5 - delta, .5 + delta, dist);\\n    gl_FragColor \u003d vec4(fragColor.rgb, colorAmt * fragColor.a * opacity);\\n  }\\n  else {\\n    float borderColorAmt \u003d smoothstep(fragBorderColorLevel - delta, fragBorderColorLevel + delta, dist);\\n    float colorAmt \u003d smoothstep(fragColorLevel - delta, fragColorLevel + delta, dist);\\n\\n    vec4 color \u003d fragBorderColor;\\n    color.a *\u003d borderColorAmt;\\n    color \u003d mix(color, fragColor, colorAmt);\\n    color.a *\u003d opacity;\\n\\n    gl_FragColor \u003d color;\\n  }\\n\\n}\\n\"]),s.vert\u003dh([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute float x, y, xFract, yFract;\\nattribute float size, borderSize;\\nattribute vec4 colorId, borderColorId;\\nattribute float isActive;\\n\\nuniform vec2 scale, scaleFract, translate, translateFract, paletteSize;\\nuniform float pixelRatio;\\nuniform bool constPointSize;\\nuniform sampler2D palette;\\n\\nconst float maxSize \u003d 100.;\\nconst float borderLevel \u003d .5;\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragPointSize, fragBorderRadius, fragWidth, fragBorderColorLevel, fragColorLevel;\\n\\nfloat pointSizeScale \u003d (constPointSize) ? 2. : pixelRatio;\\n\\nbool isDirect \u003d (paletteSize.x \u003c 1.);\\n\\nvec4 getColor(vec4 id) {\\n  return isDirect ? id / 255. : texture2D(palette,\\n    vec2(\\n      (id.x + .5) / paletteSize.x,\\n      (id.y + .5) / paletteSize.y\\n    )\\n  );\\n}\\n\\nvoid main() {\\n  // ignore inactive points\\n  if (isActive \u003d\u003d 0.) return;\\n\\n  vec2 position \u003d vec2(x, y);\\n  vec2 positionFract \u003d vec2(xFract, yFract);\\n\\n  vec4 color \u003d getColor(colorId);\\n  vec4 borderColor \u003d getColor(borderColorId);\\n\\n  float size \u003d size * maxSize / 255.;\\n  float borderSize \u003d borderSize * maxSize / 255.;\\n\\n  gl_PointSize \u003d 2. * size * pointSizeScale;\\n  fragPointSize \u003d size * pixelRatio;\\n\\n  vec2 pos \u003d (position + translate) * scale\\n      + (positionFract + translateFract) * scale\\n      + (position + translate) * scaleFract\\n      + (positionFract + translateFract) * scaleFract;\\n\\n  gl_Position \u003d vec4(pos * 2. - 1., 0., 1.);\\n\\n  fragColor \u003d color;\\n  fragBorderColor \u003d borderColor;\\n  fragWidth \u003d 1. / gl_PointSize;\\n\\n  fragBorderColorLevel \u003d clamp(borderLevel - borderLevel * borderSize / size, 0., 1.);\\n  fragColorLevel \u003d clamp(borderLevel + (1. - borderLevel) * borderSize / size, 0., 1.);\\n}\"]),this.drawMarker\u003dt(s);var l\u003df({},o);l.frag\u003dh([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor, fragBorderColor;\\n\\nuniform float opacity;\\nvarying float fragBorderRadius, fragWidth;\\n\\nfloat smoothStep(float edge0, float edge1, float x) {\\n\\tfloat t;\\n\\tt \u003d clamp((x - edge0) / (edge1 - edge0), 0.0, 1.0);\\n\\treturn t * t * (3.0 - 2.0 * t);\\n}\\n\\nvoid main() {\\n\\tfloat radius, alpha \u003d 1.0, delta \u003d fragWidth;\\n\\n\\tradius \u003d length(2.0 * gl_PointCoord.xy - 1.0);\\n\\n\\tif (radius \u003e 1.0 + delta) {\\n\\t\\tdiscard;\\n\\t}\\n\\n\\talpha -\u003d smoothstep(1.0 - delta, 1.0 + delta, radius);\\n\\n\\tfloat borderRadius \u003d fragBorderRadius;\\n\\tfloat ratio \u003d smoothstep(borderRadius - delta, borderRadius + delta, radius);\\n\\tvec4 color \u003d mix(fragColor, fragBorderColor, ratio);\\n\\tcolor.a *\u003d alpha * opacity;\\n\\tgl_FragColor \u003d color;\\n}\\n\"]),l.vert\u003dh([\"precision highp float;\\n#define GLSLIFY 1\\n\\nattribute float x, y, xFract, yFract;\\nattribute float size, borderSize;\\nattribute vec4 colorId, borderColorId;\\nattribute float isActive;\\n\\nuniform vec2 scale, scaleFract, translate, translateFract;\\nuniform float pixelRatio;\\nuniform bool constPointSize;\\nuniform sampler2D palette;\\nuniform vec2 paletteSize;\\n\\nconst float maxSize \u003d 100.;\\n\\nvarying vec4 fragColor, fragBorderColor;\\nvarying float fragBorderRadius, fragWidth;\\n\\nfloat pointSizeScale \u003d (constPointSize) ? 2. : pixelRatio;\\n\\nbool isDirect \u003d (paletteSize.x \u003c 1.);\\n\\nvec4 getColor(vec4 id) {\\n  return isDirect ? id / 255. : texture2D(palette,\\n    vec2(\\n      (id.x + .5) / paletteSize.x,\\n      (id.y + .5) / paletteSize.y\\n    )\\n  );\\n}\\n\\nvoid main() {\\n  // ignore inactive points\\n  if (isActive \u003d\u003d 0.) return;\\n\\n  vec2 position \u003d vec2(x, y);\\n  vec2 positionFract \u003d vec2(xFract, yFract);\\n\\n  vec4 color \u003d getColor(colorId);\\n  vec4 borderColor \u003d getColor(borderColorId);\\n\\n  float size \u003d size * maxSize / 255.;\\n  float borderSize \u003d borderSize * maxSize / 255.;\\n\\n  gl_PointSize \u003d (size + borderSize) * pointSizeScale;\\n\\n  vec2 pos \u003d (position + translate) * scale\\n      + (positionFract + translateFract) * scale\\n      + (position + translate) * scaleFract\\n      + (positionFract + translateFract) * scaleFract;\\n\\n  gl_Position \u003d vec4(pos * 2. - 1., 0., 1.);\\n\\n  fragBorderRadius \u003d 1. - 2. * borderSize / (size + borderSize);\\n  fragColor \u003d color;\\n  fragBorderColor \u003d borderColor.a \u003d\u003d 0. || borderSize \u003d\u003d 0. ? vec4(color.rgb, 0.) : borderColor;\\n  fragWidth \u003d 1. / gl_PointSize;\\n}\\n\"]),g\u0026\u0026(l.frag\u003dl.frag.replace(\"smoothstep\",\"smoothStep\"),s.frag\u003ds.frag.replace(\"smoothstep\",\"smoothStep\")),this.drawCircle\u003dt(l)}b.defaults\u003d{color:\"black\",borderColor:\"transparent\",borderSize:0,size:12,opacity:1,marker:void 0,viewport:null,range:null,pixelSize:null,count:0,offset:0,bounds:null,positions:[],snap:1e4},b.prototype.render\u003dfunction(){return arguments.length\u0026\u0026this.update.apply(this,arguments),this.draw(),this},b.prototype.draw\u003dfunction(){for(var t\u003dthis,e\u003darguments.length,r\u003dnew Array(e),n\u003d0;n\u003ce;n++)r[n]\u003darguments[n];var i\u003dthis.groups;if(1\u003d\u003d\u003dr.length\u0026\u0026Array.isArray(r[0])\u0026\u0026(null\u003d\u003d\u003dr[0][0]||Array.isArray(r[0][0]))\u0026\u0026(r\u003dr[0]),this.regl._refresh(),r.length)for(var a\u003d0;a\u003cr.length;a++)this.drawItem(a,r[a]);else i.forEach((function(e,r){t.drawItem(r)}));return this},b.prototype.drawItem\u003dfunction(t,e){var r\u003dthis.groups,n\u003dr[t];if(\"number\"\u003d\u003dtypeof e\u0026\u0026(t\u003de,n\u003dr[e],e\u003dnull),n\u0026\u0026n.count\u0026\u0026n.opacity){n.activation[0]\u0026\u0026this.drawCircle(this.getMarkerDrawOptions(0,n,e));for(var a\u003d[],o\u003d1;o\u003cn.activation.length;o++)n.activation[o]\u0026\u0026(!0\u003d\u003d\u003dn.activation[o]||n.activation[o].data.length)\u0026\u0026a.push.apply(a,i(this.getMarkerDrawOptions(o,n,e)));a.length\u0026\u0026this.drawMarker(a)}},b.prototype.getMarkerDrawOptions\u003dfunction(t,e,r){var i\u003de.range,a\u003de.tree,o\u003de.viewport,s\u003de.activation,l\u003de.selectionBuffer,c\u003de.count;this.regl;if(!a)return r?[f({},e,{markerTexture:this.markerTextures[t],activation:s[t],count:r.length,elements:r,offset:0})]:[f({},e,{markerTexture:this.markerTextures[t],activation:s[t],offset:0})];var u\u003d[],h\u003da.range(i,{lod:!0,px:[(i[2]-i[0])/o.width,(i[3]-i[1])/o.height]});if(r){for(var p\u003ds[t].data,d\u003dnew Uint8Array(c),m\u003d0;m\u003cr.length;m++){var g\u003dr[m];d[g]\u003dp?p[g]:1}l.subdata(d)}for(var v\u003dh.length;v--;){var y\u003dn(h[v],2),x\u003dy[0],b\u003dy[1];u.push(f({},e,{markerTexture:this.markerTextures[t],activation:r?l:s[t],offset:x,count:b-x}))}return u},b.prototype.update\u003dfunction(){for(var t\u003dthis,e\u003darguments.length,r\u003dnew Array(e),n\u003d0;n\u003ce;n++)r[n]\u003darguments[n];if(r.length){1\u003d\u003d\u003dr.length\u0026\u0026Array.isArray(r[0])\u0026\u0026(r\u003dr[0]);var i\u003dthis.groups,a\u003dthis.gl,o\u003dthis.regl,s\u003dthis.maxSize,c\u003dthis.maxColors,h\u003dthis.palette;this.groups\u003di\u003dr.map((function(e,r){var n\u003di[r];if(void 0\u003d\u003d\u003de)return n;null\u003d\u003d\u003de?e\u003d{positions:null}:\"function\"\u003d\u003dtypeof e?e\u003d{ondraw:e}:\"number\"\u003d\u003dtypeof e[0]\u0026\u0026(e\u003d{positions:e}),null\u003d\u003d\u003d(e\u003dp(e,{positions:\"positions data points\",snap:\"snap cluster lod tree\",size:\"sizes size radius\",borderSize:\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\",color:\"colors color fill fill-color fillColor\",borderColor:\"borderColors borderColor stroke stroke-color strokeColor\",marker:\"markers marker shape\",range:\"range dataBox databox\",viewport:\"viewport viewPort viewBox viewbox\",opacity:\"opacity alpha transparency\",bounds:\"bound bounds boundaries limits\",tooManyColors:\"tooManyColors palette paletteMode optimizePalette enablePalette\"})).positions\u0026\u0026(e.positions\u003d[]),null!\u003de.tooManyColors\u0026\u0026(t.tooManyColors\u003de.tooManyColors),n||(i[r]\u003dn\u003d{id:r,scale:null,translate:null,scaleFract:null,translateFract:null,activation:[],selectionBuffer:o.buffer({data:new Uint8Array(0),usage:\"stream\",type:\"uint8\"}),sizeBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"uint8\"}),colorBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"uint8\"}),positionBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"float\"}),positionFractBuffer:o.buffer({data:new Uint8Array(0),usage:\"dynamic\",type:\"float\"})},e\u003df({},b.defaults,e)),e.positions\u0026\u0026!(\"marker\"in e)\u0026\u0026(e.marker\u003dn.marker,delete n.marker),e.marker\u0026\u0026!(\"positions\"in e)\u0026\u0026(e.positions\u003dn.positions,delete n.positions);var g\u003d0,x\u003d0;if(d(n,e,[{snap:!0,size:function(t,e){return null\u003d\u003dt\u0026\u0026(t\u003db.defaults.size),g+\u003dt\u0026\u0026t.length?1:0,t},borderSize:function(t,e){return null\u003d\u003dt\u0026\u0026(t\u003db.defaults.borderSize),g+\u003dt\u0026\u0026t.length?1:0,t},opacity:parseFloat,color:function(e,r){return null\u003d\u003de\u0026\u0026(e\u003db.defaults.color),e\u003dt.updateColor(e),x++,e},borderColor:function(e,r){return null\u003d\u003de\u0026\u0026(e\u003db.defaults.borderColor),e\u003dt.updateColor(e),x++,e},bounds:function(t,e,r){return\"range\"in r||(r.range\u003dnull),t},positions:function(t,e,r){var n\u003de.snap,i\u003de.positionBuffer,a\u003de.positionFractBuffer,s\u003de.selectionBuffer;if(t.x||t.y)return t.x.length?e.xAttr\u003d{buffer:o.buffer(t.x),offset:0,stride:4,count:t.x.length}:e.xAttr\u003d{buffer:t.x.buffer,offset:4*t.x.offset||0,stride:4*(t.x.stride||1),count:t.x.count},t.y.length?e.yAttr\u003d{buffer:o.buffer(t.y),offset:0,stride:4,count:t.y.length}:e.yAttr\u003d{buffer:t.y.buffer,offset:4*t.y.offset||0,stride:4*(t.y.stride||1),count:t.y.count},e.count\u003dMath.max(e.xAttr.count,e.yAttr.count),t;t\u003dm(t,\"float64\");var c\u003de.count\u003dMath.floor(t.length/2),f\u003de.bounds\u003dc?l(t,2):null;if(r.range||e.range||(delete e.range,r.range\u003df),r.marker||e.marker||(delete e.marker,r.marker\u003dnull),n\u0026\u0026(!0\u003d\u003d\u003dn||c\u003en)?e.tree\u003du(t,{bounds:f}):n\u0026\u0026n.length\u0026\u0026(e.tree\u003dn),e.tree){var h\u003d{primitive:\"points\",usage:\"static\",data:e.tree,type:\"uint32\"};e.elements?e.elements(h):e.elements\u003do.elements(h)}return i({data:v.float(t),usage:\"dynamic\"}),a({data:v.fract(t),usage:\"dynamic\"}),s({data:new Uint8Array(c),type:\"uint8\",usage:\"stream\"}),t}},{marker:function(e,r,n){var i\u003dr.activation;if(i.forEach((function(t){return t\u0026\u0026t.destroy\u0026\u0026t.destroy()})),i.length\u003d0,e\u0026\u0026\"number\"!\u003dtypeof e[0]){for(var a\u003d[],s\u003d0,l\u003dMath.min(e.length,r.count);s\u003cl;s++){var c\u003dt.addMarker(e[s]);a[c]||(a[c]\u003dnew Uint8Array(r.count)),a[c][s]\u003d1}for(var u\u003d0;u\u003ca.length;u++)if(a[u]){var f\u003d{data:a[u],type:\"uint8\",usage:\"static\"};i[u]?i[u](f):i[u]\u003do.buffer(f),i[u].data\u003da[u]}}else{i[t.addMarker(e)]\u003d!0}return e},range:function(t,e,r){var n\u003de.bounds;if(n)return t||(t\u003dn),e.scale\u003d[1/(t[2]-t[0]),1/(t[3]-t[1])],e.translate\u003d[-t[0],-t[1]],e.scaleFract\u003dv.fract(e.scale),e.translateFract\u003dv.fract(e.translate),t},viewport:function(t){return y(t||[a.drawingBufferWidth,a.drawingBufferHeight])}}]),g){var _\u003dn,w\u003d_.count,T\u003d_.size,k\u003d_.borderSize,M\u003d_.sizeBuffer,A\u003dnew Uint8Array(2*w);if(T.length||k.length)for(var S\u003d0;S\u003cw;S++)A[2*S]\u003dMath.round(255*(null\u003d\u003dT[S]?T:T[S])/s),A[2*S+1]\u003dMath.round(255*(null\u003d\u003dk[S]?k:k[S])/s);M({data:A,usage:\"dynamic\"})}if(x){var E,L\u003dn,C\u003dL.count,P\u003dL.color,I\u003dL.borderColor,O\u003dL.colorBuffer;if(t.tooManyColors){if(P.length||I.length){E\u003dnew Uint8Array(8*C);for(var z\u003d0;z\u003cC;z++){var D\u003dP[z];E[8*z]\u003dh[4*D],E[8*z+1]\u003dh[4*D+1],E[8*z+2]\u003dh[4*D+2],E[8*z+3]\u003dh[4*D+3];var R\u003dI[z];E[8*z+4]\u003dh[4*R],E[8*z+5]\u003dh[4*R+1],E[8*z+6]\u003dh[4*R+2],E[8*z+7]\u003dh[4*R+3]}}}else if(P.length||I.length){E\u003dnew Uint8Array(4*C+2);for(var F\u003d0;F\u003cC;F++)null!\u003dP[F]\u0026\u0026(E[4*F]\u003dP[F]%c,E[4*F+1]\u003dMath.floor(P[F]/c)),null!\u003dI[F]\u0026\u0026(E[4*F+2]\u003dI[F]%c,E[4*F+3]\u003dMath.floor(I[F]/c))}O({data:E||new Uint8Array(0),type:\"uint8\",usage:\"dynamic\"})}return n}))}},b.prototype.addMarker\u003dfunction(t){var e,r\u003dthis.markerTextures,n\u003dthis.regl,i\u003dthis.markerCache,a\u003dnull\u003d\u003dt?0:i.indexOf(t);if(a\u003e\u003d0)return a;if(t instanceof Uint8Array||t instanceof Uint8ClampedArray)e\u003dt;else{e\u003dnew Uint8Array(t.length);for(var o\u003d0,s\u003dt.length;o\u003cs;o++)e[o]\u003d255*t[o]}var l\u003dMath.floor(Math.sqrt(e.length));return a\u003dr.length,i.push(t),r.push(n.texture({channels:1,data:e,radius:l,mag:\"linear\",min:\"linear\"})),a},b.prototype.updateColor\u003dfunction(t){var e\u003dthis.paletteIds,r\u003dthis.palette,n\u003dthis.maxColors;Array.isArray(t)||(t\u003d[t]);var i\u003d[];if(\"number\"\u003d\u003dtypeof t[0]){var a\u003d[];if(Array.isArray(t))for(var o\u003d0;o\u003ct.length;o+\u003d4)a.push(t.slice(o,o+4));else for(var l\u003d0;l\u003ct.length;l+\u003d4)a.push(t.subarray(l,l+4));t\u003da}for(var u\u003d0;u\u003ct.length;u++){var f\u003dt[u];f\u003ds(f,\"uint8\");var h\u003dc(f,!1);if(null\u003d\u003de[h]){var p\u003dr.length;e[h]\u003dMath.floor(p/4),r[p]\u003df[0],r[p+1]\u003df[1],r[p+2]\u003df[2],r[p+3]\u003df[3]}i[u]\u003de[h]}return!this.tooManyColors\u0026\u0026r.length\u003e4*n\u0026\u0026(this.tooManyColors\u003d!0),this.updatePalette(r),1\u003d\u003d\u003di.length?i[0]:i},b.prototype.updatePalette\u003dfunction(t){if(!this.tooManyColors){var e\u003dthis.maxColors,r\u003dthis.paletteTexture,n\u003dMath.ceil(.25*t.length/e);if(n\u003e1)for(var i\u003d.25*(t\u003dt.slice()).length%e;i\u003cn*e;i++)t.push(0,0,0,0);r.height\u003cn\u0026\u0026r.resize(e,n),r.subimage({width:Math.min(.25*t.length,e),height:n,data:t},0,0)}},b.prototype.destroy\u003dfunction(){return this.groups.forEach((function(t){t.sizeBuffer.destroy(),t.positionBuffer.destroy(),t.positionFractBuffer.destroy(),t.colorBuffer.destroy(),t.activation.forEach((function(t){return t\u0026\u0026t.destroy\u0026\u0026t.destroy()})),t.selectionBuffer.destroy(),t.elements\u0026\u0026t.elements.destroy()})),this.groups.length\u003d0,this.paletteTexture.destroy(),this.markerTextures.forEach((function(t){return t\u0026\u0026t.destroy\u0026\u0026t.destroy()})),this};var _\u003dt(\"object-assign\");e.exports\u003dfunction(t,e){var r\u003dnew x(t,e),n\u003dr.render.bind(r);return _(n,{render:n,update:r.update.bind(r),draw:r.draw.bind(r),destroy:r.destroy.bind(r),regl:r.regl,gl:r.gl,canvas:r.gl.canvas,groups:r.groups,markers:r.markerCache,palette:r.palette}),n}},{\"@plotly/point-cluster\":59,\"array-bounds\":76,\"color-id\":129,\"color-normalize\":131,\"flatten-vertex-data\":248,glslify:438,\"is-iexplorer\":450,\"object-assign\":483,\"parse-rect\":488,\"pick-by-alias\":494,\"to-float32\":595,\"update-diff\":617}],535:[function(t,e,r){\"use strict\";var n\u003dt(\"regl-scatter2d\"),i\u003dt(\"pick-by-alias\"),a\u003dt(\"array-bounds\"),o\u003dt(\"raf\"),s\u003dt(\"array-range\"),l\u003dt(\"parse-rect\"),c\u003dt(\"flatten-vertex-data\");function u(t,e){if(!(this instanceof u))return new u(t,e);this.traces\u003d[],this.passes\u003d{},this.regl\u003dt,this.scatter\u003dn(t),this.canvas\u003dthis.scatter.canvas}function f(t,e,r){return(null!\u003dt.id?t.id:t)\u003c\u003c16|(255\u0026e)\u003c\u003c8|255\u0026r}function h(t,e,r){var n,i,a,o,s\u003dt[e],l\u003dt[r];return s.length\u003e2?(s[0],s[2],n\u003ds[1],i\u003ds[3]):s.length?(n\u003ds[0],i\u003ds[1]):(s.x,n\u003ds.y,s.x+s.width,i\u003ds.y+s.height),l.length\u003e2?(a\u003dl[0],o\u003dl[2],l[1],l[3]):l.length?(a\u003dl[0],o\u003dl[1]):(a\u003dl.x,l.y,o\u003dl.x+l.width,l.y+l.height),[a,n,o,i]}function p(t){if(\"number\"\u003d\u003dtypeof t)return[t,t,t,t];if(2\u003d\u003d\u003dt.length)return[t[0],t[1],t[0],t[1]];var e\u003dl(t);return[e.x,e.y,e.x+e.width,e.y+e.height]}e.exports\u003du,u.prototype.render\u003dfunction(){for(var t,e\u003dthis,r\u003d[],n\u003darguments.length;n--;)r[n]\u003darguments[n];return r.length\u0026\u0026(t\u003dthis).update.apply(t,r),this.regl.attributes.preserveDrawingBuffer?this.draw():(this.dirty?null\u003d\u003dthis.planned\u0026\u0026(this.planned\u003do((function(){e.draw(),e.dirty\u003d!0,e.planned\u003dnull}))):(this.draw(),this.dirty\u003d!0,o((function(){e.dirty\u003d!1}))),this)},u.prototype.update\u003dfunction(){for(var t,e\u003d[],r\u003darguments.length;r--;)e[r]\u003darguments[r];if(e.length){for(var n\u003d0;n\u003ce.length;n++)this.updateItem(n,e[n]);this.traces\u003dthis.traces.filter(Boolean);for(var i\u003d[],a\u003d0,o\u003d0;o\u003cthis.traces.length;o++){for(var s\u003dthis.traces[o],l\u003dthis.traces[o].passes,c\u003d0;c\u003cl.length;c++)i.push(this.passes[l[c]]);s.passOffset\u003da,a+\u003ds.passes.length}return(t\u003dthis.scatter).update.apply(t,i),this}},u.prototype.updateItem\u003dfunction(t,e){var r\u003dthis.regl;if(null\u003d\u003d\u003de)return this.traces[t]\u003dnull,this;if(!e)return this;var n,o\u003di(e,{data:\"data items columns rows values dimensions samples x\",snap:\"snap cluster\",size:\"sizes size radius\",color:\"colors color fill fill-color fillColor\",opacity:\"opacity alpha transparency opaque\",borderSize:\"borderSizes borderSize border-size bordersize borderWidth borderWidths border-width borderwidth stroke-width strokeWidth strokewidth outline\",borderColor:\"borderColors borderColor bordercolor stroke stroke-color strokeColor\",marker:\"markers marker shape\",range:\"range ranges databox dataBox\",viewport:\"viewport viewBox viewbox\",domain:\"domain domains area areas\",padding:\"pad padding paddings pads margin margins\",transpose:\"transpose transposed\",diagonal:\"diagonal diag showDiagonal\",upper:\"upper up top upperhalf upperHalf showupperhalf showUpper showUpperHalf\",lower:\"lower low bottom lowerhalf lowerHalf showlowerhalf showLowerHalf showLower\"}),s\u003dthis.traces[t]||(this.traces[t]\u003d{id:t,buffer:r.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array}),color:\"black\",marker:null,size:12,borderColor:\"transparent\",borderSize:1,viewport:l([r._gl.drawingBufferWidth,r._gl.drawingBufferHeight]),padding:[0,0,0,0],opacity:1,diagonal:!0,upper:!0,lower:!0});if(null!\u003do.color\u0026\u0026(s.color\u003do.color),null!\u003do.size\u0026\u0026(s.size\u003do.size),null!\u003do.marker\u0026\u0026(s.marker\u003do.marker),null!\u003do.borderColor\u0026\u0026(s.borderColor\u003do.borderColor),null!\u003do.borderSize\u0026\u0026(s.borderSize\u003do.borderSize),null!\u003do.opacity\u0026\u0026(s.opacity\u003do.opacity),o.viewport\u0026\u0026(s.viewport\u003dl(o.viewport)),null!\u003do.diagonal\u0026\u0026(s.diagonal\u003do.diagonal),null!\u003do.upper\u0026\u0026(s.upper\u003do.upper),null!\u003do.lower\u0026\u0026(s.lower\u003do.lower),o.data){s.buffer(c(o.data)),s.columns\u003do.data.length,s.count\u003do.data[0].length,s.bounds\u003d[];for(var u\u003d0;u\u003cs.columns;u++)s.bounds[u]\u003da(o.data[u],1)}o.range\u0026\u0026(s.range\u003do.range,n\u003ds.range\u0026\u0026\"number\"!\u003dtypeof s.range[0]),o.domain\u0026\u0026(s.domain\u003do.domain);var d\u003d!1;null!\u003do.padding\u0026\u0026(Array.isArray(o.padding)\u0026\u0026o.padding.length\u003d\u003d\u003ds.columns\u0026\u0026\"number\"\u003d\u003dtypeof o.padding[o.padding.length-1]?(s.padding\u003do.padding.map(p),d\u003d!0):s.padding\u003dp(o.padding));var m\u003ds.columns,g\u003ds.count,v\u003ds.viewport.width,y\u003ds.viewport.height,x\u003ds.viewport.x,b\u003ds.viewport.y,_\u003dv/m,w\u003dy/m;s.passes\u003d[];for(var T\u003d0;T\u003cm;T++)for(var k\u003d0;k\u003cm;k++)if((s.diagonal||k!\u003d\u003dT)\u0026\u0026(s.upper||!(T\u003ek))\u0026\u0026(s.lower||!(T\u003ck))){var M\u003df(s.id,T,k),A\u003dthis.passes[M]||(this.passes[M]\u003d{});if(o.data\u0026\u0026(o.transpose?A.positions\u003d{x:{buffer:s.buffer,offset:k,count:g,stride:m},y:{buffer:s.buffer,offset:T,count:g,stride:m}}:A.positions\u003d{x:{buffer:s.buffer,offset:k*g,count:g},y:{buffer:s.buffer,offset:T*g,count:g}},A.bounds\u003dh(s.bounds,T,k)),o.domain||o.viewport||o.data){var S\u003dd?h(s.padding,T,k):s.padding;if(s.domain){var E\u003dh(s.domain,T,k),L\u003dE[0],C\u003dE[1],P\u003dE[2],I\u003dE[3];A.viewport\u003d[x+L*v+S[0],b+C*y+S[1],x+P*v-S[2],b+I*y-S[3]]}else A.viewport\u003d[x+k*_+_*S[0],b+T*w+w*S[1],x+(k+1)*_-_*S[2],b+(T+1)*w-w*S[3]]}o.color\u0026\u0026(A.color\u003ds.color),o.size\u0026\u0026(A.size\u003ds.size),o.marker\u0026\u0026(A.marker\u003ds.marker),o.borderSize\u0026\u0026(A.borderSize\u003ds.borderSize),o.borderColor\u0026\u0026(A.borderColor\u003ds.borderColor),o.opacity\u0026\u0026(A.opacity\u003ds.opacity),o.range\u0026\u0026(A.range\u003dn?h(s.range,T,k):s.range||A.bounds),s.passes.push(M)}return this},u.prototype.draw\u003dfunction(){for(var t,e\u003d[],r\u003darguments.length;r--;)e[r]\u003darguments[r];if(e.length){for(var n\u003d[],i\u003d0;i\u003ce.length;i++)if(\"number\"\u003d\u003dtypeof e[i]){var a\u003dthis.traces[e[i]],o\u003da.passes,l\u003da.passOffset;n.push.apply(n,s(l,l+o.length))}else if(e[i].length){var c\u003de[i],u\u003dthis.traces[i],f\u003du.passes,h\u003du.passOffset;f\u003df.map((function(t,e){n[h+e]\u003dc}))}(t\u003dthis.scatter).draw.apply(t,n)}else this.scatter.draw();return this},u.prototype.destroy\u003dfunction(){return this.traces.forEach((function(t){t.buffer\u0026\u0026t.buffer.destroy\u0026\u0026t.buffer.destroy()})),this.traces\u003dnull,this.passes\u003dnull,this.scatter.destroy(),this}},{\"array-bounds\":76,\"array-range\":79,\"flatten-vertex-data\":248,\"parse-rect\":488,\"pick-by-alias\":494,raf:526,\"regl-scatter2d\":534}],536:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?e.exports\u003dn():t.createREGL\u003dn()}(this,(function(){function t(t,e){this.id\u003dV++,this.type\u003dt,this.data\u003de}function e(t){return\"[\"+function t(e){if(0\u003d\u003d\u003de.length)return[];var r\u003de.charAt(0),n\u003de.charAt(e.length-1);if(1\u003ce.length\u0026\u0026r\u003d\u003d\u003dn\u0026\u0026(\u0027\"\u0027\u003d\u003d\u003dr||\"\u0027\"\u003d\u003d\u003dr))return[\u0027\"\u0027+e.substr(1,e.length-2).replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,\u0027\\\\\"\u0027)+\u0027\"\u0027];if(r\u003d/\\[(false|true|null|\\d+|\u0027[^\u0027]*\u0027|\"[^\"]*\")\\]/.exec(e))return t(e.substr(0,r.index)).concat(t(r[1])).concat(t(e.substr(r.index+r[0].length)));if(1\u003d\u003d\u003d(r\u003de.split(\".\")).length)return[\u0027\"\u0027+e.replace(/\\\\/g,\"\\\\\\\\\").replace(/\"/g,\u0027\\\\\"\u0027)+\u0027\"\u0027];for(e\u003d[],n\u003d0;n\u003cr.length;++n)e\u003de.concat(t(r[n]));return e}(t).join(\"][\")+\"]\"}function r(t){return\"string\"\u003d\u003dtypeof t?t.split():t}function n(t){return\"string\"\u003d\u003dtypeof t?document.querySelector(t):t}function i(t){var e,i,a,o,s\u003dt||{};t\u003d{};var l\u003d[],c\u003d[],u\u003d\"undefined\"\u003d\u003dtypeof window?1:window.devicePixelRatio,f\u003d!1,h\u003dfunction(t){},p\u003dfunction(){};if(\"string\"\u003d\u003dtypeof s?e\u003ddocument.querySelector(s):\"object\"\u003d\u003dtypeof s\u0026\u0026(\"string\"\u003d\u003dtypeof s.nodeName\u0026\u0026\"function\"\u003d\u003dtypeof s.appendChild\u0026\u0026\"function\"\u003d\u003dtypeof s.getBoundingClientRect?e\u003ds:\"function\"\u003d\u003dtypeof s.drawArrays||\"function\"\u003d\u003dtypeof s.drawElements?a\u003d(o\u003ds).canvas:(\"gl\"in s?o\u003ds.gl:\"canvas\"in s?a\u003dn(s.canvas):\"container\"in s\u0026\u0026(i\u003dn(s.container)),\"attributes\"in s\u0026\u0026(t\u003ds.attributes),\"extensions\"in s\u0026\u0026(l\u003dr(s.extensions)),\"optionalExtensions\"in s\u0026\u0026(c\u003dr(s.optionalExtensions)),\"onDone\"in s\u0026\u0026(h\u003ds.onDone),\"profile\"in s\u0026\u0026(f\u003d!!s.profile),\"pixelRatio\"in s\u0026\u0026(u\u003d+s.pixelRatio))),e\u0026\u0026(\"canvas\"\u003d\u003d\u003de.nodeName.toLowerCase()?a\u003de:i\u003de),!o){if(!a){if(!(e\u003dfunction(t,e,r){function n(){var e\u003dwindow.innerWidth,n\u003dwindow.innerHeight;t!\u003d\u003ddocument.body\u0026\u0026(e\u003d(n\u003dt.getBoundingClientRect()).right-n.left,n\u003dn.bottom-n.top),a.width\u003dr*e,a.height\u003dr*n,U(a.style,{width:e+\"px\",height:n+\"px\"})}var i,a\u003ddocument.createElement(\"canvas\");return U(a.style,{border:0,margin:0,padding:0,top:0,left:0}),t.appendChild(a),t\u003d\u003d\u003ddocument.body\u0026\u0026(a.style.position\u003d\"absolute\",U(t.style,{margin:0,padding:0})),t!\u003d\u003ddocument.body\u0026\u0026\"function\"\u003d\u003dtypeof ResizeObserver?(i\u003dnew ResizeObserver((function(){setTimeout(n)}))).observe(t):window.addEventListener(\"resize\",n,!1),n(),{canvas:a,onDestroy:function(){i?i.disconnect():window.removeEventListener(\"resize\",n),t.removeChild(a)}}}(i||document.body,0,u)))return null;a\u003de.canvas,p\u003de.onDestroy}void 0\u003d\u003d\u003dt.premultipliedAlpha\u0026\u0026(t.premultipliedAlpha\u003d!0),o\u003dfunction(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r(\"webgl\")||r(\"experimental-webgl\")||r(\"webgl-experimental\")}(a,t)}return o?{gl:o,canvas:a,container:i,extensions:l,optionalExtensions:c,pixelRatio:u,profile:f,onDone:h,onDestroy:p}:(p(),h(\"webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org\"),null)}function a(t,e){for(var r\u003dArray(t),n\u003d0;n\u003ct;++n)r[n]\u003de(n);return r}function o(t){var e,r;return e\u003d(65535\u003ct)\u003c\u003c4,e|\u003dr\u003d(255\u003c(t\u003e\u003e\u003e\u003de))\u003c\u003c3,(e|\u003dr\u003d(15\u003c(t\u003e\u003e\u003e\u003dr))\u003c\u003c2)|(r\u003d(3\u003c(t\u003e\u003e\u003e\u003dr))\u003c\u003c1)|t\u003e\u003e\u003er\u003e\u003e1}function s(){function t(t){t:{for(var e\u003d16;268435456\u003e\u003de;e*\u003d16)if(t\u003c\u003de){t\u003de;break t}t\u003d0}return 0\u003c(e\u003dr[o(t)\u003e\u003e2]).length?e.pop():new ArrayBuffer(t)}function e(t){r[o(t.byteLength)\u003e\u003e2].push(t)}var r\u003da(8,(function(){return[]}));return{alloc:t,free:e,allocType:function(e,r){var n\u003dnull;switch(e){case 5120:n\u003dnew Int8Array(t(r),0,r);break;case 5121:n\u003dnew Uint8Array(t(r),0,r);break;case 5122:n\u003dnew Int16Array(t(2*r),0,r);break;case 5123:n\u003dnew Uint16Array(t(2*r),0,r);break;case 5124:n\u003dnew Int32Array(t(4*r),0,r);break;case 5125:n\u003dnew Uint32Array(t(4*r),0,r);break;case 5126:n\u003dnew Float32Array(t(4*r),0,r);break;default:return null}return n.length!\u003d\u003dr?n.subarray(0,r):n},freeType:function(t){e(t.buffer)}}}function l(t){return!!t\u0026\u0026\"object\"\u003d\u003dtypeof t\u0026\u0026Array.isArray(t.shape)\u0026\u0026Array.isArray(t.stride)\u0026\u0026\"number\"\u003d\u003dtypeof t.offset\u0026\u0026t.shape.length\u003d\u003d\u003dt.stride.length\u0026\u0026(Array.isArray(t.data)||X(t.data))}function c(t,e,r,n,i,a){for(var o\u003d0;o\u003ce;++o)for(var s\u003dt[o],l\u003d0;l\u003cr;++l)for(var c\u003ds[l],u\u003d0;u\u003cn;++u)i[a++]\u003dc[u]}function u(t){return 0|K[Object.prototype.toString.call(t)]}function f(t,e){for(var r\u003d0;r\u003ce.length;++r)t[r]\u003de[r]}function h(t,e,r,n,i,a,o){for(var s\u003d0,l\u003d0;l\u003cr;++l)for(var c\u003d0;c\u003cn;++c)t[s++]\u003de[i*l+a*c+o]}function p(t,e,r,n){function i(e){this.id\u003dc++,this.buffer\u003dt.createBuffer(),this.type\u003de,this.usage\u003d35044,this.byteLength\u003d0,this.dimension\u003d1,this.dtype\u003d5121,this.persistentData\u003dnull,r.profile\u0026\u0026(this.stats\u003d{size:0})}function a(e,r,n){e.byteLength\u003dr.byteLength,t.bufferData(e.type,r,n)}function o(t,e,r,n,i,o){if(t.usage\u003dr,Array.isArray(e)){if(t.dtype\u003dn||5126,0\u003ce.length)if(Array.isArray(e[0])){i\u003det(e);for(var s\u003dn\u003d1;s\u003ci.length;++s)n*\u003di[s];t.dimension\u003dn,a(t,e\u003dtt(e,i,t.dtype),r),o?t.persistentData\u003de:Y.freeType(e)}else\"number\"\u003d\u003dtypeof e[0]?(t.dimension\u003di,f(i\u003dY.allocType(t.dtype,e.length),e),a(t,i,r),o?t.persistentData\u003di:Y.freeType(i)):X(e[0])\u0026\u0026(t.dimension\u003de[0].length,t.dtype\u003dn||u(e[0])||5126,a(t,e\u003dtt(e,[e.length,e[0].length],t.dtype),r),o?t.persistentData\u003de:Y.freeType(e))}else if(X(e))t.dtype\u003dn||u(e),t.dimension\u003di,a(t,e,r),o\u0026\u0026(t.persistentData\u003dnew Uint8Array(new Uint8Array(e.buffer)));else if(l(e)){i\u003de.shape;var c\u003de.stride,p\u003d(s\u003de.offset,0),d\u003d0,m\u003d0,g\u003d0;1\u003d\u003d\u003di.length?(p\u003di[0],d\u003d1,m\u003dc[0],g\u003d0):2\u003d\u003d\u003di.length\u0026\u0026(p\u003di[0],d\u003di[1],m\u003dc[0],g\u003dc[1]),t.dtype\u003dn||u(e.data)||5126,t.dimension\u003dd,h(i\u003dY.allocType(t.dtype,p*d),e.data,p,d,m,g,s),a(t,i,r),o?t.persistentData\u003di:Y.freeType(i)}else e instanceof ArrayBuffer\u0026\u0026(t.dtype\u003d5121,t.dimension\u003di,a(t,e,r),o\u0026\u0026(t.persistentData\u003dnew Uint8Array(new Uint8Array(e))))}function s(r){e.bufferCount--,n(r),t.deleteBuffer(r.buffer),r.buffer\u003dnull,delete p[r.id]}var c\u003d0,p\u003d{};i.prototype.bind\u003dfunction(){t.bindBuffer(this.type,this.buffer)},i.prototype.destroy\u003dfunction(){s(this)};var d\u003d[];return r.profile\u0026\u0026(e.getTotalBufferSize\u003dfunction(){var t\u003d0;return Object.keys(p).forEach((function(e){t+\u003dp[e].stats.size})),t}),{create:function(n,a,c,d){function m(e){var n\u003d35044,i\u003dnull,a\u003d0,s\u003d0,c\u003d1;return Array.isArray(e)||X(e)||l(e)||e instanceof ArrayBuffer?i\u003de:\"number\"\u003d\u003dtypeof e?a\u003d0|e:e\u0026\u0026(\"data\"in e\u0026\u0026(i\u003de.data),\"usage\"in e\u0026\u0026(n\u003d$[e.usage]),\"type\"in e\u0026\u0026(s\u003dQ[e.type]),\"dimension\"in e\u0026\u0026(c\u003d0|e.dimension),\"length\"in e\u0026\u0026(a\u003d0|e.length)),g.bind(),i?o(g,i,n,s,c,d):(a\u0026\u0026t.bufferData(g.type,a,n),g.dtype\u003ds||5121,g.usage\u003dn,g.dimension\u003dc,g.byteLength\u003da),r.profile\u0026\u0026(g.stats.size\u003dg.byteLength*rt[g.dtype]),m}e.bufferCount++;var g\u003dnew i(a);return p[g.id]\u003dg,c||m(n),m._reglType\u003d\"buffer\",m._buffer\u003dg,m.subdata\u003dfunction(e,r){var n,i\u003d0|(r||0);if(g.bind(),X(e)||e instanceof ArrayBuffer)t.bufferSubData(g.type,i,e);else if(Array.isArray(e)){if(0\u003ce.length)if(\"number\"\u003d\u003dtypeof e[0]){var a\u003dY.allocType(g.dtype,e.length);f(a,e),t.bufferSubData(g.type,i,a),Y.freeType(a)}else(Array.isArray(e[0])||X(e[0]))\u0026\u0026(n\u003det(e),a\u003dtt(e,n,g.dtype),t.bufferSubData(g.type,i,a),Y.freeType(a))}else if(l(e)){n\u003de.shape;var o\u003de.stride,s\u003da\u003d0,c\u003d0,p\u003d0;1\u003d\u003d\u003dn.length?(a\u003dn[0],s\u003d1,c\u003do[0],p\u003d0):2\u003d\u003d\u003dn.length\u0026\u0026(a\u003dn[0],s\u003dn[1],c\u003do[0],p\u003do[1]),n\u003dArray.isArray(e.data)?g.dtype:u(e.data),h(n\u003dY.allocType(n,a*s),e.data,a,s,c,p,e.offset),t.bufferSubData(g.type,i,n),Y.freeType(n)}return m},r.profile\u0026\u0026(m.stats\u003dg.stats),m.destroy\u003dfunction(){s(g)},m},createStream:function(t,e){var r\u003dd.pop();return r||(r\u003dnew i(t)),r.bind(),o(r,e,35040,0,1,!1),r},destroyStream:function(t){d.push(t)},clear:function(){Z(p).forEach(s),d.forEach(s)},getBuffer:function(t){return t\u0026\u0026t._buffer instanceof i?t._buffer:null},restore:function(){Z(p).forEach((function(e){e.buffer\u003dt.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)}))},_initBuffer:o}}function d(t,e,r,n){function i(t){this.id\u003dc++,s[this.id]\u003dthis,this.buffer\u003dt,this.primType\u003d4,this.type\u003dthis.vertCount\u003d0}function a(n,i,a,o,s,c,u){var f;if(n.buffer.bind(),i?((f\u003du)||X(i)\u0026\u0026(!l(i)||X(i.data))||(f\u003de.oes_element_index_uint?5125:5123),r._initBuffer(n.buffer,i,a,f,3)):(t.bufferData(34963,c,a),n.buffer.dtype\u003df||5121,n.buffer.usage\u003da,n.buffer.dimension\u003d3,n.buffer.byteLength\u003dc),f\u003du,!u){switch(n.buffer.dtype){case 5121:case 5120:f\u003d5121;break;case 5123:case 5122:f\u003d5123;break;case 5125:case 5124:f\u003d5125}n.buffer.dtype\u003df}n.type\u003df,0\u003e(i\u003ds)\u0026\u0026(i\u003dn.buffer.byteLength,5123\u003d\u003d\u003df?i\u003e\u003e\u003d1:5125\u003d\u003d\u003df\u0026\u0026(i\u003e\u003e\u003d2)),n.vertCount\u003di,i\u003do,0\u003eo\u0026\u0026(i\u003d4,1\u003d\u003d\u003d(o\u003dn.buffer.dimension)\u0026\u0026(i\u003d0),2\u003d\u003d\u003do\u0026\u0026(i\u003d1),3\u003d\u003d\u003do\u0026\u0026(i\u003d4)),n.primType\u003di}function o(t){n.elementsCount--,delete s[t.id],t.buffer.destroy(),t.buffer\u003dnull}var s\u003d{},c\u003d0,u\u003d{uint8:5121,uint16:5123};e.oes_element_index_uint\u0026\u0026(u.uint32\u003d5125),i.prototype.bind\u003dfunction(){this.buffer.bind()};var f\u003d[];return{create:function(t,e){function s(t){if(t)if(\"number\"\u003d\u003dtypeof t)c(t),f.primType\u003d4,f.vertCount\u003d0|t,f.type\u003d5121;else{var e\u003dnull,r\u003d35044,n\u003d-1,i\u003d-1,o\u003d0,h\u003d0;Array.isArray(t)||X(t)||l(t)?e\u003dt:(\"data\"in t\u0026\u0026(e\u003dt.data),\"usage\"in t\u0026\u0026(r\u003d$[t.usage]),\"primitive\"in t\u0026\u0026(n\u003dnt[t.primitive]),\"count\"in t\u0026\u0026(i\u003d0|t.count),\"type\"in t\u0026\u0026(h\u003du[t.type]),\"length\"in t?o\u003d0|t.length:(o\u003di,5123\u003d\u003d\u003dh||5122\u003d\u003d\u003dh?o*\u003d2:5125!\u003d\u003dh\u0026\u00265124!\u003d\u003dh||(o*\u003d4))),a(f,e,r,n,i,o,h)}else c(),f.primType\u003d4,f.vertCount\u003d0,f.type\u003d5121;return s}var c\u003dr.create(null,34963,!0),f\u003dnew i(c._buffer);return n.elementsCount++,s(t),s._reglType\u003d\"elements\",s._elements\u003df,s.subdata\u003dfunction(t,e){return c.subdata(t,e),s},s.destroy\u003dfunction(){o(f)},s},createStream:function(t){var e\u003df.pop();return e||(e\u003dnew i(r.create(null,34963,!0,!1)._buffer)),a(e,t,35040,-1,-1,0,0),e},destroyStream:function(t){f.push(t)},getElements:function(t){return\"function\"\u003d\u003dtypeof t\u0026\u0026t._elements instanceof i?t._elements:null},clear:function(){Z(s).forEach(o)}}}function m(t){for(var e\u003dY.allocType(5123,t.length),r\u003d0;r\u003ct.length;++r)if(isNaN(t[r]))e[r]\u003d65535;else if(1/0\u003d\u003d\u003dt[r])e[r]\u003d31744;else if(-1/0\u003d\u003d\u003dt[r])e[r]\u003d64512;else{it[0]\u003dt[r];var n\u003d(a\u003dat[0])\u003e\u003e\u003e31\u003c\u003c15,i\u003d(a\u003c\u003c1\u003e\u003e\u003e24)-127,a\u003da\u003e\u003e13\u00261023;e[r]\u003d-24\u003ei?n:-14\u003ei?n+(a+1024\u003e\u003e-14-i):15\u003ci?n+31744:n+(i+15\u003c\u003c10)+a}return e}function g(t){return Array.isArray(t)||X(t)}function v(t){return\"[object \"+t+\"]\"}function y(t){return Array.isArray(t)\u0026\u0026(0\u003d\u003d\u003dt.length||\"number\"\u003d\u003dtypeof t[0])}function x(t){return!(!Array.isArray(t)||0\u003d\u003d\u003dt.length||!g(t[0]))}function b(t){return Object.prototype.toString.call(t)}function _(t){if(!t)return!1;var e\u003db(t);return 0\u003c\u003dmt.indexOf(e)||(y(t)||x(t)||l(t))}function w(t,e){36193\u003d\u003d\u003dt.type?(t.data\u003dm(e),Y.freeType(e)):t.data\u003de}function T(t,e,r,n,i,a){if(t\u003dvoid 0!\u003d\u003dvt[t]?vt[t]:lt[t]*gt[e],a\u0026\u0026(t*\u003d6),i){for(n\u003d0;1\u003c\u003dr;)n+\u003dt*r*r,r/\u003d2;return n}return t*r*n}function k(t,e,r,n,i,a,o){function s(){this.format\u003dthis.internalformat\u003d6408,this.type\u003d5121,this.flipY\u003dthis.premultiplyAlpha\u003dthis.compressed\u003d!1,this.unpackAlignment\u003d1,this.colorSpace\u003d37444,this.channels\u003dthis.height\u003dthis.width\u003d0}function c(t,e){t.internalformat\u003de.internalformat,t.format\u003de.format,t.type\u003de.type,t.compressed\u003de.compressed,t.premultiplyAlpha\u003de.premultiplyAlpha,t.flipY\u003de.flipY,t.unpackAlignment\u003de.unpackAlignment,t.colorSpace\u003de.colorSpace,t.width\u003de.width,t.height\u003de.height,t.channels\u003de.channels}function u(t,e){if(\"object\"\u003d\u003dtypeof e\u0026\u0026e){\"premultiplyAlpha\"in e\u0026\u0026(t.premultiplyAlpha\u003de.premultiplyAlpha),\"flipY\"in e\u0026\u0026(t.flipY\u003de.flipY),\"alignment\"in e\u0026\u0026(t.unpackAlignment\u003de.alignment),\"colorSpace\"in e\u0026\u0026(t.colorSpace\u003dq[e.colorSpace]),\"type\"in e\u0026\u0026(t.type\u003dH[e.type]);var r\u003dt.width,n\u003dt.height,i\u003dt.channels,a\u003d!1;\"shape\"in e?(r\u003de.shape[0],n\u003de.shape[1],3\u003d\u003d\u003de.shape.length\u0026\u0026(i\u003de.shape[2],a\u003d!0)):(\"radius\"in e\u0026\u0026(r\u003dn\u003de.radius),\"width\"in e\u0026\u0026(r\u003de.width),\"height\"in e\u0026\u0026(n\u003de.height),\"channels\"in e\u0026\u0026(i\u003de.channels,a\u003d!0)),t.width\u003d0|r,t.height\u003d0|n,t.channels\u003d0|i,r\u003d!1,\"format\"in e\u0026\u0026(r\u003de.format,n\u003dt.internalformat\u003dG[r],t.format\u003dat[n],r in H\u0026\u0026!(\"type\"in e)\u0026\u0026(t.type\u003dH[r]),r in W\u0026\u0026(t.compressed\u003d!0),r\u003d!0),!a\u0026\u0026r?t.channels\u003dlt[t.format]:a\u0026\u0026!r\u0026\u0026t.channels!\u003d\u003dst[t.format]\u0026\u0026(t.format\u003dt.internalformat\u003dst[t.channels])}}function f(e){t.pixelStorei(37440,e.flipY),t.pixelStorei(37441,e.premultiplyAlpha),t.pixelStorei(37443,e.colorSpace),t.pixelStorei(3317,e.unpackAlignment)}function h(){s.call(this),this.yOffset\u003dthis.xOffset\u003d0,this.data\u003dnull,this.needsFree\u003d!1,this.element\u003dnull,this.needsCopy\u003d!1}function p(t,e){var r\u003dnull;if(_(e)?r\u003de:e\u0026\u0026(u(t,e),\"x\"in e\u0026\u0026(t.xOffset\u003d0|e.x),\"y\"in e\u0026\u0026(t.yOffset\u003d0|e.y),_(e.data)\u0026\u0026(r\u003de.data)),e.copy){var n\u003di.viewportWidth,a\u003di.viewportHeight;t.width\u003dt.width||n-t.xOffset,t.height\u003dt.height||a-t.yOffset,t.needsCopy\u003d!0}else if(r){if(X(r))t.channels\u003dt.channels||4,t.data\u003dr,\"type\"in e||5121!\u003d\u003dt.type||(t.type\u003d0|K[Object.prototype.toString.call(r)]);else if(y(r)){switch(t.channels\u003dt.channels||4,a\u003d(n\u003dr).length,t.type){case 5121:case 5123:case 5125:case 5126:(a\u003dY.allocType(t.type,a)).set(n),t.data\u003da;break;case 36193:t.data\u003dm(n)}t.alignment\u003d1,t.needsFree\u003d!0}else if(l(r)){n\u003dr.data,Array.isArray(n)||5121!\u003d\u003dt.type||(t.type\u003d0|K[Object.prototype.toString.call(n)]);a\u003dr.shape;var o,s,c,f,h\u003dr.stride;3\u003d\u003d\u003da.length?(c\u003da[2],f\u003dh[2]):f\u003dc\u003d1,o\u003da[0],s\u003da[1],a\u003dh[0],h\u003dh[1],t.alignment\u003d1,t.width\u003do,t.height\u003ds,t.channels\u003dc,t.format\u003dt.internalformat\u003dst[c],t.needsFree\u003d!0,o\u003df,r\u003dr.offset,c\u003dt.width,f\u003dt.height,s\u003dt.channels;for(var p\u003dY.allocType(36193\u003d\u003d\u003dt.type?5126:t.type,c*f*s),d\u003d0,v\u003d0;v\u003cf;++v)for(var T\u003d0;T\u003cc;++T)for(var k\u003d0;k\u003cs;++k)p[d++]\u003dn[a*T+h*v+o*k+r];w(t,p)}else if(b(r)\u003d\u003d\u003dct||b(r)\u003d\u003d\u003dut||b(r)\u003d\u003d\u003dft)b(r)\u003d\u003d\u003dct||b(r)\u003d\u003d\u003dut?t.element\u003dr:t.element\u003dr.canvas,t.width\u003dt.element.width,t.height\u003dt.element.height,t.channels\u003d4;else if(b(r)\u003d\u003d\u003dht)t.element\u003dr,t.width\u003dr.width,t.height\u003dr.height,t.channels\u003d4;else if(b(r)\u003d\u003d\u003dpt)t.element\u003dr,t.width\u003dr.naturalWidth,t.height\u003dr.naturalHeight,t.channels\u003d4;else if(b(r)\u003d\u003d\u003ddt)t.element\u003dr,t.width\u003dr.videoWidth,t.height\u003dr.videoHeight,t.channels\u003d4;else if(x(r)){for(n\u003dt.width||r[0].length,a\u003dt.height||r.length,h\u003dt.channels,h\u003dg(r[0][0])?h||r[0][0].length:h||1,o\u003dJ.shape(r),c\u003d1,f\u003d0;f\u003co.length;++f)c*\u003do[f];c\u003dY.allocType(36193\u003d\u003d\u003dt.type?5126:t.type,c),J.flatten(r,o,\"\",c),w(t,c),t.alignment\u003d1,t.width\u003dn,t.height\u003da,t.channels\u003dh,t.format\u003dt.internalformat\u003dst[h],t.needsFree\u003d!0}}else t.width\u003dt.width||1,t.height\u003dt.height||1,t.channels\u003dt.channels||4}function d(e,r,i,a,o){var s\u003de.element,l\u003de.data,c\u003de.internalformat,u\u003de.format,h\u003de.type,p\u003de.width,d\u003de.height;f(e),s?t.texSubImage2D(r,o,i,a,u,h,s):e.compressed?t.compressedTexSubImage2D(r,o,i,a,c,p,d,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,i,a,e.xOffset,e.yOffset,p,d)):t.texSubImage2D(r,o,i,a,p,d,u,h,l)}function v(){return mt.pop()||new h}function k(t){t.needsFree\u0026\u0026Y.freeType(t.data),h.call(t),mt.push(t)}function M(){s.call(this),this.genMipmaps\u003d!1,this.mipmapHint\u003d4352,this.mipmask\u003d0,this.images\u003dArray(16)}function A(t,e,r){var n\u003dt.images[0]\u003dv();t.mipmask\u003d1,n.width\u003dt.width\u003de,n.height\u003dt.height\u003dr,n.channels\u003dt.channels\u003d4}function S(t,e){var r\u003dnull;if(_(e))c(r\u003dt.images[0]\u003dv(),t),p(r,e),t.mipmask\u003d1;else if(u(t,e),Array.isArray(e.mipmap))for(var n\u003de.mipmap,i\u003d0;i\u003cn.length;++i)c(r\u003dt.images[i]\u003dv(),t),r.width\u003e\u003e\u003di,r.height\u003e\u003e\u003di,p(r,n[i]),t.mipmask|\u003d1\u003c\u003ci;else c(r\u003dt.images[0]\u003dv(),t),p(r,e),t.mipmask\u003d1;c(t,t.images[0])}function E(e,r){for(var i\u003de.images,a\u003d0;a\u003ci.length\u0026\u0026i[a];++a){var o\u003di[a],s\u003dr,l\u003da,c\u003do.element,u\u003do.data,h\u003do.internalformat,p\u003do.format,d\u003do.type,m\u003do.width,g\u003do.height;f(o),c?t.texImage2D(s,l,p,p,d,c):o.compressed?t.compressedTexImage2D(s,l,h,m,g,0,u):o.needsCopy?(n(),t.copyTexImage2D(s,l,p,o.xOffset,o.yOffset,m,g,0)):t.texImage2D(s,l,p,m,g,0,p,d,u||null)}}function L(){var t\u003dgt.pop()||new M;s.call(t);for(var e\u003dt.mipmask\u003d0;16\u003ee;++e)t.images[e]\u003dnull;return t}function C(t){for(var e\u003dt.images,r\u003d0;r\u003ce.length;++r)e[r]\u0026\u0026k(e[r]),e[r]\u003dnull;gt.push(t)}function P(){this.magFilter\u003dthis.minFilter\u003d9728,this.wrapT\u003dthis.wrapS\u003d33071,this.anisotropic\u003d1,this.genMipmaps\u003d!1,this.mipmapHint\u003d4352}function I(t,e){\"min\"in e\u0026\u0026(t.minFilter\u003dV[e.min],0\u003c\u003dot.indexOf(t.minFilter)\u0026\u0026!(\"faces\"in e)\u0026\u0026(t.genMipmaps\u003d!0)),\"mag\"in e\u0026\u0026(t.magFilter\u003dj[e.mag]);var r\u003dt.wrapS,n\u003dt.wrapT;if(\"wrap\"in e){var i\u003de.wrap;\"string\"\u003d\u003dtypeof i?r\u003dn\u003dN[i]:Array.isArray(i)\u0026\u0026(r\u003dN[i[0]],n\u003dN[i[1]])}else\"wrapS\"in e\u0026\u0026(r\u003dN[e.wrapS]),\"wrapT\"in e\u0026\u0026(n\u003dN[e.wrapT]);if(t.wrapS\u003dr,t.wrapT\u003dn,\"anisotropic\"in e\u0026\u0026(t.anisotropic\u003de.anisotropic),\"mipmap\"in e){switch(r\u003d!1,typeof e.mipmap){case\"string\":t.mipmapHint\u003dB[e.mipmap],r\u003dt.genMipmaps\u003d!0;break;case\"boolean\":r\u003dt.genMipmaps\u003de.mipmap;break;case\"object\":t.genMipmaps\u003d!1,r\u003d!0}!r||\"min\"in e||(t.minFilter\u003d9984)}}function O(r,n){t.texParameteri(n,10241,r.minFilter),t.texParameteri(n,10240,r.magFilter),t.texParameteri(n,10242,r.wrapS),t.texParameteri(n,10243,r.wrapT),e.ext_texture_filter_anisotropic\u0026\u0026t.texParameteri(n,34046,r.anisotropic),r.genMipmaps\u0026\u0026(t.hint(33170,r.mipmapHint),t.generateMipmap(n))}function z(e){s.call(this),this.mipmask\u003d0,this.internalformat\u003d6408,this.id\u003dvt++,this.refCount\u003d1,this.target\u003de,this.texture\u003dt.createTexture(),this.unit\u003d-1,this.bindCount\u003d0,this.texInfo\u003dnew P,o.profile\u0026\u0026(this.stats\u003d{size:0})}function D(e){t.activeTexture(33984),t.bindTexture(e.target,e.texture)}function R(){var e\u003dbt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(3553,null)}function F(e){var r\u003de.texture,n\u003de.unit,i\u003de.target;0\u003c\u003dn\u0026\u0026(t.activeTexture(33984+n),t.bindTexture(i,null),bt[n]\u003dnull),t.deleteTexture(r),e.texture\u003dnull,e.params\u003dnull,e.pixels\u003dnull,e.refCount\u003d0,delete yt[e.id],a.textureCount--}var B\u003d{\"don\u0027t care\":4352,\"dont care\":4352,nice:4354,fast:4353},N\u003d{repeat:10497,clamp:33071,mirror:33648},j\u003d{nearest:9728,linear:9729},V\u003dU({mipmap:9987,\"nearest mipmap nearest\":9984,\"linear mipmap nearest\":9985,\"nearest mipmap linear\":9986,\"linear mipmap linear\":9987},j),q\u003d{none:0,browser:37444},H\u003d{uint8:5121,rgba4:32819,rgb565:33635,\"rgb5 a1\":32820},G\u003d{alpha:6406,luminance:6409,\"luminance alpha\":6410,rgb:6407,rgba:6408,rgba4:32854,\"rgb5 a1\":32855,rgb565:36194},W\u003d{};e.ext_srgb\u0026\u0026(G.srgb\u003d35904,G.srgba\u003d35906),e.oes_texture_float\u0026\u0026(H.float32\u003dH.float\u003d5126),e.oes_texture_half_float\u0026\u0026(H.float16\u003dH[\"half float\"]\u003d36193),e.webgl_depth_texture\u0026\u0026(U(G,{depth:6402,\"depth stencil\":34041}),U(H,{uint16:5123,uint32:5125,\"depth stencil\":34042})),e.webgl_compressed_texture_s3tc\u0026\u0026U(W,{\"rgb s3tc dxt1\":33776,\"rgba s3tc dxt1\":33777,\"rgba s3tc dxt3\":33778,\"rgba s3tc dxt5\":33779}),e.webgl_compressed_texture_atc\u0026\u0026U(W,{\"rgb atc\":35986,\"rgba atc explicit alpha\":35987,\"rgba atc interpolated alpha\":34798}),e.webgl_compressed_texture_pvrtc\u0026\u0026U(W,{\"rgb pvrtc 4bppv1\":35840,\"rgb pvrtc 2bppv1\":35841,\"rgba pvrtc 4bppv1\":35842,\"rgba pvrtc 2bppv1\":35843}),e.webgl_compressed_texture_etc1\u0026\u0026(W[\"rgb etc1\"]\u003d36196);var Q\u003dArray.prototype.slice.call(t.getParameter(34467));Object.keys(W).forEach((function(t){var e\u003dW[t];0\u003c\u003dQ.indexOf(e)\u0026\u0026(G[t]\u003de)}));var $\u003dObject.keys(G);r.textureFormats\u003d$;var tt\u003d[];Object.keys(G).forEach((function(t){tt[G[t]]\u003dt}));var et\u003d[];Object.keys(H).forEach((function(t){et[H[t]]\u003dt}));var rt\u003d[];Object.keys(j).forEach((function(t){rt[j[t]]\u003dt}));var nt\u003d[];Object.keys(V).forEach((function(t){nt[V[t]]\u003dt}));var it\u003d[];Object.keys(N).forEach((function(t){it[N[t]]\u003dt}));var at\u003d$.reduce((function(t,r){var n\u003dG[r];return 6409\u003d\u003d\u003dn||6406\u003d\u003d\u003dn||6409\u003d\u003d\u003dn||6410\u003d\u003d\u003dn||6402\u003d\u003d\u003dn||34041\u003d\u003d\u003dn||e.ext_srgb\u0026\u0026(35904\u003d\u003d\u003dn||35906\u003d\u003d\u003dn)?t[n]\u003dn:32855\u003d\u003d\u003dn||0\u003c\u003dr.indexOf(\"rgba\")?t[n]\u003d6408:t[n]\u003d6407,t}),{}),mt\u003d[],gt\u003d[],vt\u003d0,yt\u003d{},xt\u003dr.maxTextureUnits,bt\u003dArray(xt).map((function(){return null}));return U(z.prototype,{bind:function(){this.bindCount+\u003d1;var e\u003dthis.unit;if(0\u003ee){for(var r\u003d0;r\u003cxt;++r){var n\u003dbt[r];if(n){if(0\u003cn.bindCount)continue;n.unit\u003d-1}bt[r]\u003dthis,e\u003dr;break}o.profile\u0026\u0026a.maxTextureUnits\u003ce+1\u0026\u0026(a.maxTextureUnits\u003de+1),this.unit\u003de,t.activeTexture(33984+e),t.bindTexture(this.target,this.texture)}return e},unbind:function(){--this.bindCount},decRef:function(){0\u003e\u003d--this.refCount\u0026\u0026F(this)}}),o.profile\u0026\u0026(a.getTotalTextureSize\u003dfunction(){var t\u003d0;return Object.keys(yt).forEach((function(e){t+\u003dyt[e].stats.size})),t}),{create2D:function(e,r){function n(t,e){var r\u003di.texInfo;P.call(r);var a\u003dL();return\"number\"\u003d\u003dtypeof t?A(a,0|t,\"number\"\u003d\u003dtypeof e?0|e:0|t):t?(I(r,t),S(a,t)):A(a,1,1),r.genMipmaps\u0026\u0026(a.mipmask\u003d(a.width\u003c\u003c1)-1),i.mipmask\u003da.mipmask,c(i,a),i.internalformat\u003da.internalformat,n.width\u003da.width,n.height\u003da.height,D(i),E(a,3553),O(r,3553),R(),C(a),o.profile\u0026\u0026(i.stats.size\u003dT(i.internalformat,i.type,a.width,a.height,r.genMipmaps,!1)),n.format\u003dtt[i.internalformat],n.type\u003det[i.type],n.mag\u003drt[r.magFilter],n.min\u003dnt[r.minFilter],n.wrapS\u003dit[r.wrapS],n.wrapT\u003dit[r.wrapT],n}var i\u003dnew z(3553);return yt[i.id]\u003di,a.textureCount++,n(e,r),n.subimage\u003dfunction(t,e,r,a){e|\u003d0,r|\u003d0,a|\u003d0;var o\u003dv();return c(o,i),o.width\u003d0,o.height\u003d0,p(o,t),o.width\u003do.width||(i.width\u003e\u003ea)-e,o.height\u003do.height||(i.height\u003e\u003ea)-r,D(i),d(o,3553,e,r,a),R(),k(o),n},n.resize\u003dfunction(e,r){var a\u003d0|e,s\u003d0|r||a;if(a\u003d\u003d\u003di.width\u0026\u0026s\u003d\u003d\u003di.height)return n;n.width\u003di.width\u003da,n.height\u003di.height\u003ds,D(i);for(var l\u003d0;i.mipmask\u003e\u003el;++l){var c\u003da\u003e\u003el,u\u003ds\u003e\u003el;if(!c||!u)break;t.texImage2D(3553,l,i.format,c,u,0,i.format,i.type,null)}return R(),o.profile\u0026\u0026(i.stats.size\u003dT(i.internalformat,i.type,a,s,!1,!1)),n},n._reglType\u003d\"texture2d\",n._texture\u003di,o.profile\u0026\u0026(n.stats\u003di.stats),n.destroy\u003dfunction(){i.decRef()},n},createCube:function(e,r,n,i,s,l){function f(t,e,r,n,i,a){var s,l\u003dh.texInfo;for(P.call(l),s\u003d0;6\u003es;++s)m[s]\u003dL();if(\"number\"!\u003dtypeof t\u0026\u0026t){if(\"object\"\u003d\u003dtypeof t)if(e)S(m[0],t),S(m[1],e),S(m[2],r),S(m[3],n),S(m[4],i),S(m[5],a);else if(I(l,t),u(h,t),\"faces\"in t)for(t\u003dt.faces,s\u003d0;6\u003es;++s)c(m[s],h),S(m[s],t[s]);else for(s\u003d0;6\u003es;++s)S(m[s],t)}else for(t\u003d0|t||1,s\u003d0;6\u003es;++s)A(m[s],t,t);for(c(h,m[0]),h.mipmask\u003dl.genMipmaps?(m[0].width\u003c\u003c1)-1:m[0].mipmask,h.internalformat\u003dm[0].internalformat,f.width\u003dm[0].width,f.height\u003dm[0].height,D(h),s\u003d0;6\u003es;++s)E(m[s],34069+s);for(O(l,34067),R(),o.profile\u0026\u0026(h.stats.size\u003dT(h.internalformat,h.type,f.width,f.height,l.genMipmaps,!0)),f.format\u003dtt[h.internalformat],f.type\u003det[h.type],f.mag\u003drt[l.magFilter],f.min\u003dnt[l.minFilter],f.wrapS\u003dit[l.wrapS],f.wrapT\u003dit[l.wrapT],s\u003d0;6\u003es;++s)C(m[s]);return f}var h\u003dnew z(34067);yt[h.id]\u003dh,a.cubeCount++;var m\u003dArray(6);return f(e,r,n,i,s,l),f.subimage\u003dfunction(t,e,r,n,i){r|\u003d0,n|\u003d0,i|\u003d0;var a\u003dv();return c(a,h),a.width\u003d0,a.height\u003d0,p(a,e),a.width\u003da.width||(h.width\u003e\u003ei)-r,a.height\u003da.height||(h.height\u003e\u003ei)-n,D(h),d(a,34069+t,r,n,i),R(),k(a),f},f.resize\u003dfunction(e){if((e|\u003d0)!\u003d\u003dh.width){f.width\u003dh.width\u003de,f.height\u003dh.height\u003de,D(h);for(var r\u003d0;6\u003er;++r)for(var n\u003d0;h.mipmask\u003e\u003en;++n)t.texImage2D(34069+r,n,h.format,e\u003e\u003en,e\u003e\u003en,0,h.format,h.type,null);return R(),o.profile\u0026\u0026(h.stats.size\u003dT(h.internalformat,h.type,f.width,f.height,!1,!0)),f}},f._reglType\u003d\"textureCube\",f._texture\u003dh,o.profile\u0026\u0026(f.stats\u003dh.stats),f.destroy\u003dfunction(){h.decRef()},f},clear:function(){for(var e\u003d0;e\u003cxt;++e)t.activeTexture(33984+e),t.bindTexture(3553,null),bt[e]\u003dnull;Z(yt).forEach(F),a.cubeCount\u003d0,a.textureCount\u003d0},getTexture:function(t){return null},restore:function(){for(var e\u003d0;e\u003cxt;++e){var r\u003dbt[e];r\u0026\u0026(r.bindCount\u003d0,r.unit\u003d-1,bt[e]\u003dnull)}Z(yt).forEach((function(e){e.texture\u003dt.createTexture(),t.bindTexture(e.target,e.texture);for(var r\u003d0;32\u003er;++r)if(0!\u003d(e.mipmask\u00261\u003c\u003cr))if(3553\u003d\u003d\u003de.target)t.texImage2D(3553,r,e.internalformat,e.width\u003e\u003er,e.height\u003e\u003er,0,e.internalformat,e.type,null);else for(var n\u003d0;6\u003en;++n)t.texImage2D(34069+n,r,e.internalformat,e.width\u003e\u003er,e.height\u003e\u003er,0,e.internalformat,e.type,null);O(e.texInfo,e.target)}))}}}function M(t,e,r,n,i,a){function o(t,e,r){this.target\u003dt,this.texture\u003de,this.renderbuffer\u003dr;var n\u003dt\u003d0;e?(t\u003de.width,n\u003de.height):r\u0026\u0026(t\u003dr.width,n\u003dr.height),this.width\u003dt,this.height\u003dn}function s(t){t\u0026\u0026(t.texture\u0026\u0026t.texture._texture.decRef(),t.renderbuffer\u0026\u0026t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){t\u0026\u0026(t.texture?t.texture._texture.refCount+\u003d1:t.renderbuffer._renderbuffer.refCount+\u003d1)}function c(e,r){r\u0026\u0026(r.texture?t.framebufferTexture2D(36160,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(36160,e,36161,r.renderbuffer._renderbuffer.renderbuffer))}function u(t){var e\u003d3553,r\u003dnull,n\u003dnull,i\u003dt;return\"object\"\u003d\u003dtypeof t\u0026\u0026(i\u003dt.data,\"target\"in t\u0026\u0026(e\u003d0|t.target)),\"texture2d\"\u003d\u003d\u003d(t\u003di._reglType)||\"textureCube\"\u003d\u003d\u003dt?r\u003di:\"renderbuffer\"\u003d\u003d\u003dt\u0026\u0026(n\u003di,e\u003d36161),new o(e,r,n)}function f(t,e,r,a,s){return r?((t\u003dn.create2D({width:t,height:e,format:a,type:s}))._texture.refCount\u003d0,new o(3553,t,null)):((t\u003di.create({width:t,height:e,format:a}))._renderbuffer.refCount\u003d0,new o(36161,null,t))}function h(t){return t\u0026\u0026(t.texture||t.renderbuffer)}function p(t,e,r){t\u0026\u0026(t.texture?t.texture.resize(e,r):t.renderbuffer\u0026\u0026t.renderbuffer.resize(e,r),t.width\u003de,t.height\u003dr)}function d(){this.id\u003dT++,k[this.id]\u003dthis,this.framebuffer\u003dt.createFramebuffer(),this.height\u003dthis.width\u003d0,this.colorAttachments\u003d[],this.depthStencilAttachment\u003dthis.stencilAttachment\u003dthis.depthAttachment\u003dnull}function m(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){t.deleteFramebuffer(e.framebuffer),e.framebuffer\u003dnull,a.framebufferCount--,delete k[e.id]}function v(e){var n;t.bindFramebuffer(36160,e.framebuffer);var i\u003de.colorAttachments;for(n\u003d0;n\u003ci.length;++n)c(36064+n,i[n]);for(n\u003di.length;n\u003cr.maxColorAttachments;++n)t.framebufferTexture2D(36160,36064+n,3553,null,0);t.framebufferTexture2D(36160,33306,3553,null,0),t.framebufferTexture2D(36160,36096,3553,null,0),t.framebufferTexture2D(36160,36128,3553,null,0),c(36096,e.depthAttachment),c(36128,e.stencilAttachment),c(33306,e.depthStencilAttachment),t.checkFramebufferStatus(36160),t.isContextLost(),t.bindFramebuffer(36160,x.next?x.next.framebuffer:null),x.cur\u003dx.next,t.getError()}function y(t,e){function r(t,e){var i,a\u003d0,o\u003d0,s\u003d!0,c\u003d!0;i\u003dnull;var p\u003d!0,d\u003d\"rgba\",g\u003d\"uint8\",y\u003d1,x\u003dnull,w\u003dnull,T\u003dnull,k\u003d!1;\"number\"\u003d\u003dtypeof t?(a\u003d0|t,o\u003d0|e||a):t?(\"shape\"in t?(a\u003d(o\u003dt.shape)[0],o\u003do[1]):(\"radius\"in t\u0026\u0026(a\u003do\u003dt.radius),\"width\"in t\u0026\u0026(a\u003dt.width),\"height\"in t\u0026\u0026(o\u003dt.height)),(\"color\"in t||\"colors\"in t)\u0026\u0026(i\u003dt.color||t.colors,Array.isArray(i)),i||(\"colorCount\"in t\u0026\u0026(y\u003d0|t.colorCount),\"colorTexture\"in t\u0026\u0026(p\u003d!!t.colorTexture,d\u003d\"rgba4\"),\"colorType\"in t\u0026\u0026(g\u003dt.colorType,!p)\u0026\u0026(\"half float\"\u003d\u003d\u003dg||\"float16\"\u003d\u003d\u003dg?d\u003d\"rgba16f\":\"float\"!\u003d\u003dg\u0026\u0026\"float32\"!\u003d\u003dg||(d\u003d\"rgba32f\")),\"colorFormat\"in t\u0026\u0026(d\u003dt.colorFormat,0\u003c\u003db.indexOf(d)?p\u003d!0:0\u003c\u003d_.indexOf(d)\u0026\u0026(p\u003d!1))),(\"depthTexture\"in t||\"depthStencilTexture\"in t)\u0026\u0026(k\u003d!(!t.depthTexture\u0026\u0026!t.depthStencilTexture)),\"depth\"in t\u0026\u0026(\"boolean\"\u003d\u003dtypeof t.depth?s\u003dt.depth:(x\u003dt.depth,c\u003d!1)),\"stencil\"in t\u0026\u0026(\"boolean\"\u003d\u003dtypeof t.stencil?c\u003dt.stencil:(w\u003dt.stencil,s\u003d!1)),\"depthStencil\"in t\u0026\u0026(\"boolean\"\u003d\u003dtypeof t.depthStencil?s\u003dc\u003dt.depthStencil:(T\u003dt.depthStencil,c\u003ds\u003d!1))):a\u003do\u003d1;var M\u003dnull,A\u003dnull,S\u003dnull,E\u003dnull;if(Array.isArray(i))M\u003di.map(u);else if(i)M\u003d[u(i)];else for(M\u003dArray(y),i\u003d0;i\u003cy;++i)M[i]\u003df(a,o,p,d,g);for(a\u003da||M[0].width,o\u003do||M[0].height,x?A\u003du(x):s\u0026\u0026!c\u0026\u0026(A\u003df(a,o,k,\"depth\",\"uint32\")),w?S\u003du(w):c\u0026\u0026!s\u0026\u0026(S\u003df(a,o,!1,\"stencil\",\"uint8\")),T?E\u003du(T):!x\u0026\u0026!w\u0026\u0026c\u0026\u0026s\u0026\u0026(E\u003df(a,o,k,\"depth stencil\",\"depth stencil\")),s\u003dnull,i\u003d0;i\u003cM.length;++i)l(M[i]),M[i]\u0026\u0026M[i].texture\u0026\u0026(c\u003dbt[M[i].texture._texture.format]*_t[M[i].texture._texture.type],null\u003d\u003d\u003ds\u0026\u0026(s\u003dc));return l(A),l(S),l(E),m(n),n.width\u003da,n.height\u003do,n.colorAttachments\u003dM,n.depthAttachment\u003dA,n.stencilAttachment\u003dS,n.depthStencilAttachment\u003dE,r.color\u003dM.map(h),r.depth\u003dh(A),r.stencil\u003dh(S),r.depthStencil\u003dh(E),r.width\u003dn.width,r.height\u003dn.height,v(n),r}var n\u003dnew d;return a.framebufferCount++,r(t,e),U(r,{resize:function(t,e){var i\u003dMath.max(0|t,1),a\u003dMath.max(0|e||i,1);if(i\u003d\u003d\u003dn.width\u0026\u0026a\u003d\u003d\u003dn.height)return r;for(var o\u003dn.colorAttachments,s\u003d0;s\u003co.length;++s)p(o[s],i,a);return p(n.depthAttachment,i,a),p(n.stencilAttachment,i,a),p(n.depthStencilAttachment,i,a),n.width\u003dr.width\u003di,n.height\u003dr.height\u003da,v(n),r},_reglType:\"framebuffer\",_framebuffer:n,destroy:function(){g(n),m(n)},use:function(t){x.setFBO({framebuffer:r},t)}})}var x\u003d{cur:null,next:null,dirty:!1,setFBO:null},b\u003d[\"rgba\"],_\u003d[\"rgba4\",\"rgb565\",\"rgb5 a1\"];e.ext_srgb\u0026\u0026_.push(\"srgba\"),e.ext_color_buffer_half_float\u0026\u0026_.push(\"rgba16f\",\"rgb16f\"),e.webgl_color_buffer_float\u0026\u0026_.push(\"rgba32f\");var w\u003d[\"uint8\"];e.oes_texture_half_float\u0026\u0026w.push(\"half float\",\"float16\"),e.oes_texture_float\u0026\u0026w.push(\"float\",\"float32\");var T\u003d0,k\u003d{};return U(x,{getFramebuffer:function(t){return\"function\"\u003d\u003dtypeof t\u0026\u0026\"framebuffer\"\u003d\u003d\u003dt._reglType\u0026\u0026(t\u003dt._framebuffer)instanceof d?t:null},create:y,createCube:function(t){function e(t){var i,a\u003d{color:null},o\u003d0,s\u003dnull;i\u003d\"rgba\";var l\u003d\"uint8\",c\u003d1;if(\"number\"\u003d\u003dtypeof t?o\u003d0|t:t?(\"shape\"in t?o\u003dt.shape[0]:(\"radius\"in t\u0026\u0026(o\u003d0|t.radius),\"width\"in t?o\u003d0|t.width:\"height\"in t\u0026\u0026(o\u003d0|t.height)),(\"color\"in t||\"colors\"in t)\u0026\u0026(s\u003dt.color||t.colors,Array.isArray(s)),s||(\"colorCount\"in t\u0026\u0026(c\u003d0|t.colorCount),\"colorType\"in t\u0026\u0026(l\u003dt.colorType),\"colorFormat\"in t\u0026\u0026(i\u003dt.colorFormat)),\"depth\"in t\u0026\u0026(a.depth\u003dt.depth),\"stencil\"in t\u0026\u0026(a.stencil\u003dt.stencil),\"depthStencil\"in t\u0026\u0026(a.depthStencil\u003dt.depthStencil)):o\u003d1,s)if(Array.isArray(s))for(t\u003d[],i\u003d0;i\u003cs.length;++i)t[i]\u003ds[i];else t\u003d[s];else for(t\u003dArray(c),s\u003d{radius:o,format:i,type:l},i\u003d0;i\u003cc;++i)t[i]\u003dn.createCube(s);for(a.color\u003dArray(t.length),i\u003d0;i\u003ct.length;++i)c\u003dt[i],o\u003do||c.width,a.color[i]\u003d{target:34069,data:t[i]};for(i\u003d0;6\u003ei;++i){for(c\u003d0;c\u003ct.length;++c)a.color[c].target\u003d34069+i;0\u003ci\u0026\u0026(a.depth\u003dr[0].depth,a.stencil\u003dr[0].stencil,a.depthStencil\u003dr[0].depthStencil),r[i]?r[i](a):r[i]\u003dy(a)}return U(e,{width:o,height:o,color:t})}var r\u003dArray(6);return e(t),U(e,{faces:r,resize:function(t){var n\u003d0|t;if(n\u003d\u003d\u003de.width)return e;var i\u003de.color;for(t\u003d0;t\u003ci.length;++t)i[t].resize(n);for(t\u003d0;6\u003et;++t)r[t].resize(n);return e.width\u003de.height\u003dn,e},_reglType:\"framebufferCube\",destroy:function(){r.forEach((function(t){t.destroy()}))}})},clear:function(){Z(k).forEach(g)},restore:function(){x.cur\u003dnull,x.next\u003dnull,x.dirty\u003d!0,Z(k).forEach((function(e){e.framebuffer\u003dt.createFramebuffer(),v(e)}))}})}function A(){this.w\u003dthis.z\u003dthis.y\u003dthis.x\u003dthis.state\u003d0,this.buffer\u003dnull,this.size\u003d0,this.normalized\u003d!1,this.type\u003d5126,this.divisor\u003dthis.stride\u003dthis.offset\u003d0}function S(t,e,r,n,i){function a(){this.id\u003d++c,this.attributes\u003d[];var t\u003de.oes_vertex_array_object;this.vao\u003dt?t.createVertexArrayOES():null,u[this.id]\u003dthis,this.buffers\u003d[]}var o\u003dr.maxAttributes,s\u003dArray(o);for(r\u003d0;r\u003co;++r)s[r]\u003dnew A;var c\u003d0,u\u003d{},f\u003d{Record:A,scope:{},state:s,currentVAO:null,targetVAO:null,restore:e.oes_vertex_array_object?function(){e.oes_vertex_array_object\u0026\u0026Z(u).forEach((function(t){t.refresh()}))}:function(){},createVAO:function(t){function e(t){for(var n\u003d0;n\u003cr.buffers.length;++n)r.buffers[n].destroy();r.buffers.length\u003d0,(n\u003dr.attributes).length\u003dt.length;for(var a\u003d0;a\u003ct.length;++a){var o\u003dt[a],s\u003dn[a]\u003dnew A;Array.isArray(o)||X(o)||l(o)?(o\u003di.create(o,34962,!1,!0),s.buffer\u003di.getBuffer(o),s.size\u003d0|s.buffer.dimension,s.normalized\u003d!1,s.type\u003ds.buffer.dtype,s.offset\u003d0,s.stride\u003d0,s.divisor\u003d0,s.state\u003d1,r.buffers.push(o)):i.getBuffer(o)?(s.buffer\u003di.getBuffer(o),s.size\u003d0|s.buffer.dimension,s.normalized\u003d!1,s.type\u003ds.buffer.dtype,s.offset\u003d0,s.stride\u003d0,s.divisor\u003d0,s.state\u003d1):i.getBuffer(o.buffer)?(s.buffer\u003di.getBuffer(o.buffer),s.size\u003d0|(+o.size||s.buffer.dimension),s.normalized\u003d!!o.normalized||!1,s.type\u003d\"type\"in o?Q[o.type]:s.buffer.dtype,s.offset\u003d0|(o.offset||0),s.stride\u003d0|(o.stride||0),s.divisor\u003d0|(o.divisor||0),s.state\u003d1):\"x\"in o\u0026\u0026(s.x\u003d+o.x||0,s.y\u003d+o.y||0,s.z\u003d+o.z||0,s.w\u003d+o.w||0,s.state\u003d2)}return r.refresh(),e}var r\u003dnew a;return n.vaoCount+\u003d1,e.destroy\u003dfunction(){r.destroy()},e._vao\u003dr,e._reglType\u003d\"vao\",e(t)},getVAO:function(t){return\"function\"\u003d\u003dtypeof t\u0026\u0026t._vao?t._vao:null},destroyBuffer:function(e){for(var r\u003d0;r\u003cs.length;++r){var n\u003ds[r];n.buffer\u003d\u003d\u003de\u0026\u0026(t.disableVertexAttribArray(r),n.buffer\u003dnull)}},setVAO:e.oes_vertex_array_object?function(t){if(t!\u003d\u003df.currentVAO){var r\u003de.oes_vertex_array_object;t?r.bindVertexArrayOES(t.vao):r.bindVertexArrayOES(null),f.currentVAO\u003dt}}:function(r){if(r!\u003d\u003df.currentVAO){if(r)r.bindAttrs();else for(var n\u003de.angle_instanced_arrays,i\u003d0;i\u003cs.length;++i){var a\u003ds[i];a.buffer?(t.enableVertexAttribArray(i),t.vertexAttribPointer(i,a.size,a.type,a.normalized,a.stride,a.offfset),n\u0026\u0026n.vertexAttribDivisorANGLE(i,a.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,a.x,a.y,a.z,a.w))}f.currentVAO\u003dr}},clear:e.oes_vertex_array_object?function(){Z(u).forEach((function(t){t.destroy()}))}:function(){}};return a.prototype.bindAttrs\u003dfunction(){for(var r\u003de.angle_instanced_arrays,n\u003dthis.attributes,i\u003d0;i\u003cn.length;++i){var a\u003dn[i];a.buffer?(t.enableVertexAttribArray(i),t.bindBuffer(34962,a.buffer.buffer),t.vertexAttribPointer(i,a.size,a.type,a.normalized,a.stride,a.offset),r\u0026\u0026r.vertexAttribDivisorANGLE(i,a.divisor)):(t.disableVertexAttribArray(i),t.vertexAttrib4f(i,a.x,a.y,a.z,a.w))}for(r\u003dn.length;r\u003co;++r)t.disableVertexAttribArray(r)},a.prototype.refresh\u003dfunction(){var t\u003de.oes_vertex_array_object;t\u0026\u0026(t.bindVertexArrayOES(this.vao),this.bindAttrs(),f.currentVAO\u003dthis)},a.prototype.destroy\u003dfunction(){if(this.vao){var t\u003de.oes_vertex_array_object;this\u003d\u003d\u003df.currentVAO\u0026\u0026(f.currentVAO\u003dnull,t.bindVertexArrayOES(null)),t.deleteVertexArrayOES(this.vao),this.vao\u003dnull}u[this.id]\u0026\u0026(delete u[this.id],--n.vaoCount)},f}function E(t,e,r,n){function i(t,e,r,n){this.name\u003dt,this.id\u003de,this.location\u003dr,this.info\u003dn}function a(t,e){for(var r\u003d0;r\u003ct.length;++r)if(t[r].id\u003d\u003d\u003de.id)return void(t[r].location\u003de.location);t.push(e)}function o(r,n,i){if(!(o\u003d(i\u003d35632\u003d\u003d\u003dr?c:u)[n])){var a\u003de.str(n),o\u003dt.createShader(r);t.shaderSource(o,a),t.compileShader(o),i[n]\u003do}return o}function s(t,e){this.id\u003dp++,this.fragId\u003dt,this.vertId\u003de,this.program\u003dnull,this.uniforms\u003d[],this.attributes\u003d[],n.profile\u0026\u0026(this.stats\u003d{uniformsCount:0,attributesCount:0})}function l(r,s,l){var c;c\u003do(35632,r.fragId);var u\u003do(35633,r.vertId);if(s\u003dr.program\u003dt.createProgram(),t.attachShader(s,c),t.attachShader(s,u),l)for(c\u003d0;c\u003cl.length;++c)u\u003dl[c],t.bindAttribLocation(s,u[0],u[1]);t.linkProgram(s),u\u003dt.getProgramParameter(s,35718),n.profile\u0026\u0026(r.stats.uniformsCount\u003du);var f\u003dr.uniforms;for(c\u003d0;c\u003cu;++c)if(l\u003dt.getActiveUniform(s,c))if(1\u003cl.size)for(var h\u003d0;h\u003cl.size;++h){var p\u003dl.name.replace(\"[0]\",\"[\"+h+\"]\");a(f,new i(p,e.id(p),t.getUniformLocation(s,p),l))}else a(f,new i(l.name,e.id(l.name),t.getUniformLocation(s,l.name),l));for(u\u003dt.getProgramParameter(s,35721),n.profile\u0026\u0026(r.stats.attributesCount\u003du),r\u003dr.attributes,c\u003d0;c\u003cu;++c)(l\u003dt.getActiveAttrib(s,c))\u0026\u0026a(r,new i(l.name,e.id(l.name),t.getAttribLocation(s,l.name),l))}var c\u003d{},u\u003d{},f\u003d{},h\u003d[],p\u003d0;return n.profile\u0026\u0026(r.getMaxUniformsCount\u003dfunction(){var t\u003d0;return h.forEach((function(e){e.stats.uniformsCount\u003et\u0026\u0026(t\u003de.stats.uniformsCount)})),t},r.getMaxAttributesCount\u003dfunction(){var t\u003d0;return h.forEach((function(e){e.stats.attributesCount\u003et\u0026\u0026(t\u003de.stats.attributesCount)})),t}),{clear:function(){var e\u003dt.deleteShader.bind(t);Z(c).forEach(e),c\u003d{},Z(u).forEach(e),u\u003d{},h.forEach((function(e){t.deleteProgram(e.program)})),h.length\u003d0,f\u003d{},r.shaderCount\u003d0},program:function(t,e,n,i){var a\u003df[e];a||(a\u003df[e]\u003d{});var o\u003da[t];return o\u0026\u0026!i?o:(e\u003dnew s(e,t),r.shaderCount++,l(e,n,i),o||(a[t]\u003de),h.push(e),e)},restore:function(){c\u003d{},u\u003d{};for(var t\u003d0;t\u003ch.length;++t)l(h[t],null,h[t].attributes.map((function(t){return[t.location,t.name]})))},shader:o,frag:-1,vert:-1}}function L(t,e,r,n,i,a,o){function s(i){var a;a\u003dnull\u003d\u003d\u003de.next?5121:e.next.colorAttachments[0].texture._texture.type;var o\u003d0,s\u003d0,l\u003dn.framebufferWidth,c\u003dn.framebufferHeight,u\u003dnull;return X(i)?u\u003di:i\u0026\u0026(o\u003d0|i.x,s\u003d0|i.y,l\u003d0|(i.width||n.framebufferWidth-o),c\u003d0|(i.height||n.framebufferHeight-s),u\u003di.data||null),r(),i\u003dl*c*4,u||(5121\u003d\u003d\u003da?u\u003dnew Uint8Array(i):5126\u003d\u003d\u003da\u0026\u0026(u\u003du||new Float32Array(i))),t.pixelStorei(3333,4),t.readPixels(o,s,l,c,6408,a,u),u}return function(t){return t\u0026\u0026\"framebuffer\"in t?function(t){var r;return e.setFBO({framebuffer:t.framebuffer},(function(){r\u003ds(t)})),r}(t):s(t)}}function C(t){return Array.prototype.slice.call(t)}function P(t){return C(t).join(\"\")}function I(){function t(){var t\u003d[],e\u003d[];return U((function(){t.push.apply(t,C(arguments))}),{def:function(){var n\u003d\"v\"+r++;return e.push(n),0\u003carguments.length\u0026\u0026(t.push(n,\"\u003d\"),t.push.apply(t,C(arguments)),t.push(\";\")),n},toString:function(){return P([0\u003ce.length?\"var \"+e.join(\",\")+\";\":\"\",P(t)])}})}function e(){function e(t,e){n(t,e,\"\u003d\",r.def(t,e),\";\")}var r\u003dt(),n\u003dt(),i\u003dr.toString,a\u003dn.toString;return U((function(){r.apply(r,C(arguments))}),{def:r.def,entry:r,exit:n,save:e,set:function(t,n,i){e(t,n),r(t,n,\"\u003d\",i,\";\")},toString:function(){return i()+a()}})}var r\u003d0,n\u003d[],i\u003d[],a\u003dt(),o\u003d{};return{global:a,link:function(t){for(var e\u003d0;e\u003ci.length;++e)if(i[e]\u003d\u003d\u003dt)return n[e];return e\u003d\"g\"+r++,n.push(e),i.push(t),e},block:t,proc:function(t,r){function n(){var t\u003d\"a\"+i.length;return i.push(t),t}var i\u003d[];r\u003dr||0;for(var a\u003d0;a\u003cr;++a)n();var s\u003d(a\u003de()).toString;return o[t]\u003dU(a,{arg:n,toString:function(){return P([\"function(\",i.join(),\"){\",s(),\"}\"])}})},scope:e,cond:function(){var t\u003dP(arguments),r\u003de(),n\u003de(),i\u003dr.toString,a\u003dn.toString;return U(r,{then:function(){return r.apply(r,C(arguments)),this},else:function(){return n.apply(n,C(arguments)),this},toString:function(){var e\u003da();return e\u0026\u0026(e\u003d\"else{\"+e+\"}\"),P([\"if(\",t,\"){\",i(),\"}\",e])}})},compile:function(){var t\u003d[\u0027\"use strict\";\u0027,a,\"return {\"];Object.keys(o).forEach((function(e){t.push(\u0027\"\u0027,e,\u0027\":\u0027,o[e].toString(),\",\")})),t.push(\"}\");var e\u003dP(t).replace(/;/g,\";\\n\").replace(/}/g,\"}\\n\").replace(/{/g,\"{\\n\");return Function.apply(null,n.concat(e)).apply(null,i)}}}function O(t){return Array.isArray(t)||X(t)||l(t)}function z(t){return t.sort((function(t,e){return\"viewport\"\u003d\u003d\u003dt?-1:\"viewport\"\u003d\u003d\u003de?1:t\u003ce?-1:1}))}function D(t,e,r,n){this.thisDep\u003dt,this.contextDep\u003de,this.propDep\u003dr,this.append\u003dn}function R(t){return t\u0026\u0026!(t.thisDep||t.contextDep||t.propDep)}function F(t){return new D(!1,!1,!1,t)}function B(t,e){var r\u003dt.type;return 0\u003d\u003d\u003dr?new D(!0,1\u003c\u003d(r\u003dt.data.length),2\u003c\u003dr,e):4\u003d\u003d\u003dr?new D((r\u003dt.data).thisDep,r.contextDep,r.propDep,e):new D(3\u003d\u003d\u003dr,2\u003d\u003d\u003dr,1\u003d\u003d\u003dr,e)}function N(t,e,r,n,i,o,s,l,c,u,f,h,p,d,m){function v(t){return t.replace(\".\",\"_\")}function y(t,e,r){var n\u003dv(t);rt.push(t),et[n]\u003dtt[n]\u003d!!r,it[n]\u003de}function x(t,e,r){var n\u003dv(t);rt.push(t),Array.isArray(r)?(tt[n]\u003dr.slice(),et[n]\u003dr.slice()):tt[n]\u003det[n]\u003dr,at[n]\u003de}function b(){var t\u003dI(),r\u003dt.link,n\u003dt.global;t.id\u003dlt++,t.batchId\u003d\"0\";var i\u003dr(ot),a\u003dt.shared\u003d{props:\"a0\"};Object.keys(ot).forEach((function(t){a[t]\u003dn.def(i,\".\",t)}));var o\u003dt.next\u003d{},s\u003dt.current\u003d{};Object.keys(at).forEach((function(t){Array.isArray(tt[t])\u0026\u0026(o[t]\u003dn.def(a.next,\".\",t),s[t]\u003dn.def(a.current,\".\",t))}));var l\u003dt.constants\u003d{};Object.keys(st).forEach((function(t){l[t]\u003dn.def(JSON.stringify(st[t]))})),t.invoke\u003dfunction(e,n){switch(n.type){case 0:var i\u003d[\"this\",a.context,a.props,t.batchId];return e.def(r(n.data),\".call(\",i.slice(0,Math.max(n.data.length+1,4)),\")\");case 1:return e.def(a.props,n.data);case 2:return e.def(a.context,n.data);case 3:return e.def(\"this\",n.data);case 4:return n.data.append(t,e),n.data.ref}},t.attribCache\u003d{};var c\u003d{};return t.scopeAttrib\u003dfunction(t){if((t\u003de.id(t))in c)return c[t];var n\u003du.scope[t];return n||(n\u003du.scope[t]\u003dnew Z),c[t]\u003dr(n)},t}function _(t,e){var r\u003dt.static,n\u003dt.dynamic;if(\"framebuffer\"in r){var i\u003dr.framebuffer;return i?(i\u003dl.getFramebuffer(i),F((function(t,e){var r\u003dt.link(i),n\u003dt.shared;return e.set(n.framebuffer,\".next\",r),n\u003dn.context,e.set(n,\".framebufferWidth\",r+\".width\"),e.set(n,\".framebufferHeight\",r+\".height\"),r}))):F((function(t,e){var r\u003dt.shared;return e.set(r.framebuffer,\".next\",\"null\"),r\u003dr.context,e.set(r,\".framebufferWidth\",r+\".drawingBufferWidth\"),e.set(r,\".framebufferHeight\",r+\".drawingBufferHeight\"),\"null\"}))}if(\"framebuffer\"in n){var a\u003dn.framebuffer;return B(a,(function(t,e){var r\u003dt.invoke(e,a),n\u003dt.shared,i\u003dn.framebuffer;r\u003de.def(i,\".getFramebuffer(\",r,\")\");return e.set(i,\".next\",r),n\u003dn.context,e.set(n,\".framebufferWidth\",r+\"?\"+r+\".width:\"+n+\".drawingBufferWidth\"),e.set(n,\".framebufferHeight\",r+\"?\"+r+\".height:\"+n+\".drawingBufferHeight\"),r}))}return null}function w(t,r,n){function i(t){if(t in a){var r\u003de.id(a[t]);return(t\u003dF((function(){return r}))).id\u003dr,t}if(t in o){var n\u003do[t];return B(n,(function(t,e){var r\u003dt.invoke(e,n);return e.def(t.shared.strings,\".id(\",r,\")\")}))}return null}var a\u003dt.static,o\u003dt.dynamic,s\u003di(\"frag\"),l\u003di(\"vert\"),c\u003dnull;return R(s)\u0026\u0026R(l)?(c\u003df.program(l.id,s.id,null,n),t\u003dF((function(t,e){return t.link(c)}))):t\u003dnew D(s\u0026\u0026s.thisDep||l\u0026\u0026l.thisDep,s\u0026\u0026s.contextDep||l\u0026\u0026l.contextDep,s\u0026\u0026s.propDep||l\u0026\u0026l.propDep,(function(t,e){var r,n,i\u003dt.shared.shader;return r\u003ds?s.append(t,e):e.def(i,\".\",\"frag\"),n\u003dl?l.append(t,e):e.def(i,\".\",\"vert\"),e.def(i+\".program(\"+n+\",\"+r+\")\")})),{frag:s,vert:l,progVar:t,program:c}}function T(t,e){function r(t,e){if(t in n){var r\u003d0|n[t];return F((function(t,n){return e\u0026\u0026(t.OFFSET\u003dr),r}))}if(t in i){var o\u003di[t];return B(o,(function(t,r){var n\u003dt.invoke(r,o);return e\u0026\u0026(t.OFFSET\u003dn),n}))}return e\u0026\u0026a?F((function(t,e){return t.OFFSET\u003d\"0\",0})):null}var n\u003dt.static,i\u003dt.dynamic,a\u003dfunction(){if(\"elements\"in n){var t\u003dn.elements;O(t)?t\u003do.getElements(o.create(t,!0)):t\u0026\u0026(t\u003do.getElements(t));var e\u003dF((function(e,r){if(t){var n\u003de.link(t);return e.ELEMENTS\u003dn}return e.ELEMENTS\u003dnull}));return e.value\u003dt,e}if(\"elements\"in i){var r\u003di.elements;return B(r,(function(t,e){var n\u003d(i\u003dt.shared).isBufferArgs,i\u003di.elements,a\u003dt.invoke(e,r),o\u003de.def(\"null\");n\u003de.def(n,\"(\",a,\")\"),a\u003dt.cond(n).then(o,\"\u003d\",i,\".createStream(\",a,\");\").else(o,\"\u003d\",i,\".getElements(\",a,\");\");return e.entry(a),e.exit(t.cond(n).then(i,\".destroyStream(\",o,\");\")),t.ELEMENTS\u003do}))}return null}(),s\u003dr(\"offset\",!0);return{elements:a,primitive:function(){if(\"primitive\"in n){var t\u003dn.primitive;return F((function(e,r){return nt[t]}))}if(\"primitive\"in i){var e\u003di.primitive;return B(e,(function(t,r){var n\u003dt.constants.primTypes,i\u003dt.invoke(r,e);return r.def(n,\"[\",i,\"]\")}))}return a?R(a)?a.value?F((function(t,e){return e.def(t.ELEMENTS,\".primType\")})):F((function(){return 4})):new D(a.thisDep,a.contextDep,a.propDep,(function(t,e){var r\u003dt.ELEMENTS;return e.def(r,\"?\",r,\".primType:\",4)})):null}(),count:function(){if(\"count\"in n){var t\u003d0|n.count;return F((function(){return t}))}if(\"count\"in i){var e\u003di.count;return B(e,(function(t,r){return t.invoke(r,e)}))}return a?R(a)?a?s?new D(s.thisDep,s.contextDep,s.propDep,(function(t,e){return e.def(t.ELEMENTS,\".vertCount-\",t.OFFSET)})):F((function(t,e){return e.def(t.ELEMENTS,\".vertCount\")})):F((function(){return-1})):new D(a.thisDep||s.thisDep,a.contextDep||s.contextDep,a.propDep||s.propDep,(function(t,e){var r\u003dt.ELEMENTS;return t.OFFSET?e.def(r,\"?\",r,\".vertCount-\",t.OFFSET,\":-1\"):e.def(r,\"?\",r,\".vertCount:-1\")})):null}(),instances:r(\"instances\",!1),offset:s}}function k(t,r){var n\u003dt.static,a\u003dt.dynamic,o\u003d{};return Object.keys(n).forEach((function(t){var r\u003dn[t],a\u003de.id(t),s\u003dnew Z;if(O(r))s.state\u003d1,s.buffer\u003di.getBuffer(i.create(r,34962,!1,!0)),s.type\u003d0;else if(c\u003di.getBuffer(r))s.state\u003d1,s.buffer\u003dc,s.type\u003d0;else if(\"constant\"in r){var l\u003dr.constant;s.buffer\u003d\"null\",s.state\u003d2,\"number\"\u003d\u003dtypeof l?s.x\u003dl:wt.forEach((function(t,e){e\u003cl.length\u0026\u0026(s[t]\u003dl[e])}))}else{var c\u003dO(r.buffer)?i.getBuffer(i.create(r.buffer,34962,!1,!0)):i.getBuffer(r.buffer),u\u003d0|r.offset,f\u003d0|r.stride,h\u003d0|r.size,p\u003d!!r.normalized,d\u003d0;\"type\"in r\u0026\u0026(d\u003dQ[r.type]),r\u003d0|r.divisor,s.buffer\u003dc,s.state\u003d1,s.size\u003dh,s.normalized\u003dp,s.type\u003dd||c.dtype,s.offset\u003du,s.stride\u003df,s.divisor\u003dr}o[t]\u003dF((function(t,e){var r\u003dt.attribCache;if(a in r)return r[a];var n\u003d{isStream:!1};return Object.keys(s).forEach((function(t){n[t]\u003ds[t]})),s.buffer\u0026\u0026(n.buffer\u003dt.link(s.buffer),n.type\u003dn.type||n.buffer+\".dtype\"),r[a]\u003dn}))})),Object.keys(a).forEach((function(t){var e\u003da[t];o[t]\u003dB(e,(function(t,r){function n(t){r(l[t],\"\u003d\",i,\".\",t,\"|0;\")}var i\u003dt.invoke(r,e),a\u003dt.shared,o\u003dt.constants,s\u003da.isBufferArgs,l\u003d(a\u003da.buffer,{isStream:r.def(!1)}),c\u003dnew Z;c.state\u003d1,Object.keys(c).forEach((function(t){l[t]\u003dr.def(\"\"+c[t])}));var u\u003dl.buffer,f\u003dl.type;return r(\"if(\",s,\"(\",i,\")){\",l.isStream,\"\u003dtrue;\",u,\"\u003d\",a,\".createStream(\",34962,\",\",i,\");\",f,\"\u003d\",u,\".dtype;\",\"}else{\",u,\"\u003d\",a,\".getBuffer(\",i,\");\",\"if(\",u,\"){\",f,\"\u003d\",u,\".dtype;\",\u0027}else if(\"constant\" in \u0027,i,\"){\",l.state,\"\u003d\",2,\";\",\"if(typeof \"+i+\u0027.constant \u003d\u003d\u003d \"number\"){\u0027,l[wt[0]],\"\u003d\",i,\".constant;\",wt.slice(1).map((function(t){return l[t]})).join(\"\u003d\"),\"\u003d0;\",\"}else{\",wt.map((function(t,e){return l[t]+\"\u003d\"+i+\".constant.length\u003e\"+e+\"?\"+i+\".constant[\"+e+\"]:0;\"})).join(\"\"),\"}}else{\",\"if(\",s,\"(\",i,\".buffer)){\",u,\"\u003d\",a,\".createStream(\",34962,\",\",i,\".buffer);\",\"}else{\",u,\"\u003d\",a,\".getBuffer(\",i,\".buffer);\",\"}\",f,\u0027\u003d\"type\" in \u0027,i,\"?\",o.glTypes,\"[\",i,\".type]:\",u,\".dtype;\",l.normalized,\"\u003d!!\",i,\".normalized;\"),n(\"size\"),n(\"offset\"),n(\"stride\"),n(\"divisor\"),r(\"}}\"),r.exit(\"if(\",l.isStream,\"){\",a,\".destroyStream(\",u,\");\",\"}\"),l}))})),o}function M(t,e,n,i,o){function s(t){var e\u003dc[t];e\u0026\u0026(h[t]\u003de)}var l\u003dfunction(t,e){if(\"string\"\u003d\u003dtypeof(r\u003dt.static).frag\u0026\u0026\"string\"\u003d\u003dtypeof r.vert){if(0\u003cObject.keys(e.dynamic).length)return null;var r\u003de.static,n\u003dObject.keys(r);if(0\u003cn.length\u0026\u0026\"number\"\u003d\u003dtypeof r[n[0]]){for(var i\u003d[],a\u003d0;a\u003cn.length;++a)i.push([0|r[n[a]],n[a]]);return i}}return null}(t,e),c\u003dfunction(t,e,r){function n(t){if(t in i){var r\u003di[t];t\u003d!0;var n,o,s\u003d0|r.x,l\u003d0|r.y;return\"width\"in r?n\u003d0|r.width:t\u003d!1,\"height\"in r?o\u003d0|r.height:t\u003d!1,new D(!t\u0026\u0026e\u0026\u0026e.thisDep,!t\u0026\u0026e\u0026\u0026e.contextDep,!t\u0026\u0026e\u0026\u0026e.propDep,(function(t,e){var i\u003dt.shared.context,a\u003dn;\"width\"in r||(a\u003de.def(i,\".\",\"framebufferWidth\",\"-\",s));var c\u003do;return\"height\"in r||(c\u003de.def(i,\".\",\"framebufferHeight\",\"-\",l)),[s,l,a,c]}))}if(t in a){var c\u003da[t];return t\u003dB(c,(function(t,e){var r\u003dt.invoke(e,c),n\u003dt.shared.context,i\u003de.def(r,\".x|0\"),a\u003de.def(r,\".y|0\");return[i,a,e.def(\u0027\"width\" in \u0027,r,\"?\",r,\".width|0:\",\"(\",n,\".\",\"framebufferWidth\",\"-\",i,\")\"),r\u003de.def(\u0027\"height\" in \u0027,r,\"?\",r,\".height|0:\",\"(\",n,\".\",\"framebufferHeight\",\"-\",a,\")\")]})),e\u0026\u0026(t.thisDep\u003dt.thisDep||e.thisDep,t.contextDep\u003dt.contextDep||e.contextDep,t.propDep\u003dt.propDep||e.propDep),t}return e?new D(e.thisDep,e.contextDep,e.propDep,(function(t,e){var r\u003dt.shared.context;return[0,0,e.def(r,\".\",\"framebufferWidth\"),e.def(r,\".\",\"framebufferHeight\")]})):null}var i\u003dt.static,a\u003dt.dynamic;if(t\u003dn(\"viewport\")){var o\u003dt;t\u003dnew D(t.thisDep,t.contextDep,t.propDep,(function(t,e){var r\u003do.append(t,e),n\u003dt.shared.context;return e.set(n,\".viewportWidth\",r[2]),e.set(n,\".viewportHeight\",r[3]),r}))}return{viewport:t,scissor_box:n(\"scissor.box\")}}(t,d\u003d_(t)),f\u003dT(t),h\u003dfunction(t,e){var r\u003dt.static,n\u003dt.dynamic,i\u003d{};return rt.forEach((function(t){function e(e,a){if(t in r){var s\u003de(r[t]);i[o]\u003dF((function(){return s}))}else if(t in n){var l\u003dn[t];i[o]\u003dB(l,(function(t,e){return a(t,e,t.invoke(e,l))}))}}var o\u003dv(t);switch(t){case\"cull.enable\":case\"blend.enable\":case\"dither\":case\"stencil.enable\":case\"depth.enable\":case\"scissor.enable\":case\"polygonOffset.enable\":case\"sample.alpha\":case\"sample.enable\":case\"depth.mask\":return e((function(t){return t}),(function(t,e,r){return r}));case\"depth.func\":return e((function(t){return Mt[t]}),(function(t,e,r){return e.def(t.constants.compareFuncs,\"[\",r,\"]\")}));case\"depth.range\":return e((function(t){return t}),(function(t,e,r){return[e.def(\"+\",r,\"[0]\"),e\u003de.def(\"+\",r,\"[1]\")]}));case\"blend.func\":return e((function(t){return[kt[\"srcRGB\"in t?t.srcRGB:t.src],kt[\"dstRGB\"in t?t.dstRGB:t.dst],kt[\"srcAlpha\"in t?t.srcAlpha:t.src],kt[\"dstAlpha\"in t?t.dstAlpha:t.dst]]}),(function(t,e,r){function n(t,n){return e.def(\u0027\"\u0027,t,n,\u0027\" in \u0027,r,\"?\",r,\".\",t,n,\":\",r,\".\",t)}t\u003dt.constants.blendFuncs;var i\u003dn(\"src\",\"RGB\"),a\u003dn(\"dst\",\"RGB\"),o\u003d(i\u003de.def(t,\"[\",i,\"]\"),e.def(t,\"[\",n(\"src\",\"Alpha\"),\"]\"));return[i,a\u003de.def(t,\"[\",a,\"]\"),o,t\u003de.def(t,\"[\",n(\"dst\",\"Alpha\"),\"]\")]}));case\"blend.equation\":return e((function(t){return\"string\"\u003d\u003dtypeof t?[J[t],J[t]]:\"object\"\u003d\u003dtypeof t?[J[t.rgb],J[t.alpha]]:void 0}),(function(t,e,r){var n\u003dt.constants.blendEquations,i\u003de.def(),a\u003de.def();return(t\u003dt.cond(\"typeof \",r,\u0027\u003d\u003d\u003d\"string\"\u0027)).then(i,\"\u003d\",a,\"\u003d\",n,\"[\",r,\"];\"),t.else(i,\"\u003d\",n,\"[\",r,\".rgb];\",a,\"\u003d\",n,\"[\",r,\".alpha];\"),e(t),[i,a]}));case\"blend.color\":return e((function(t){return a(4,(function(e){return+t[e]}))}),(function(t,e,r){return a(4,(function(t){return e.def(\"+\",r,\"[\",t,\"]\")}))}));case\"stencil.mask\":return e((function(t){return 0|t}),(function(t,e,r){return e.def(r,\"|0\")}));case\"stencil.func\":return e((function(t){return[Mt[t.cmp||\"keep\"],t.ref||0,\"mask\"in t?t.mask:-1]}),(function(t,e,r){return[t\u003de.def(\u0027\"cmp\" in \u0027,r,\"?\",t.constants.compareFuncs,\"[\",r,\".cmp]\",\":\",7680),e.def(r,\".ref|0\"),e\u003de.def(\u0027\"mask\" in \u0027,r,\"?\",r,\".mask|0:-1\")]}));case\"stencil.opFront\":case\"stencil.opBack\":return e((function(e){return[\"stencil.opBack\"\u003d\u003d\u003dt?1029:1028,At[e.fail||\"keep\"],At[e.zfail||\"keep\"],At[e.zpass||\"keep\"]]}),(function(e,r,n){function i(t){return r.def(\u0027\"\u0027,t,\u0027\" in \u0027,n,\"?\",a,\"[\",n,\".\",t,\"]:\",7680)}var a\u003de.constants.stencilOps;return[\"stencil.opBack\"\u003d\u003d\u003dt?1029:1028,i(\"fail\"),i(\"zfail\"),i(\"zpass\")]}));case\"polygonOffset.offset\":return e((function(t){return[0|t.factor,0|t.units]}),(function(t,e,r){return[e.def(r,\".factor|0\"),e\u003de.def(r,\".units|0\")]}));case\"cull.face\":return e((function(t){var e\u003d0;return\"front\"\u003d\u003d\u003dt?e\u003d1028:\"back\"\u003d\u003d\u003dt\u0026\u0026(e\u003d1029),e}),(function(t,e,r){return e.def(r,\u0027\u003d\u003d\u003d\"front\"?\u0027,1028,\":\",1029)}));case\"lineWidth\":return e((function(t){return t}),(function(t,e,r){return r}));case\"frontFace\":return e((function(t){return St[t]}),(function(t,e,r){return e.def(r+\u0027\u003d\u003d\u003d\"cw\"?2304:2305\u0027)}));case\"colorMask\":return e((function(t){return t.map((function(t){return!!t}))}),(function(t,e,r){return a(4,(function(t){return\"!!\"+r+\"[\"+t+\"]\"}))}));case\"sample.coverage\":return e((function(t){return[\"value\"in t?t.value:1,!!t.invert]}),(function(t,e,r){return[e.def(\u0027\"value\" in \u0027,r,\"?+\",r,\".value:1\"),e\u003de.def(\"!!\",r,\".invert\")]}))}})),i}(t),p\u003dw(t,0,l);s(\"viewport\"),s(v(\"scissor.box\"));var d,m\u003d0\u003cObject.keys(h).length;if((d\u003d{framebuffer:d,draw:f,shader:p,state:h,dirty:m,scopeVAO:null,drawVAO:null,useVAO:!1,attributes:{}}).profile\u003dfunction(t){var e,r\u003dt.static;if(t\u003dt.dynamic,\"profile\"in r){var n\u003d!!r.profile;(e\u003dF((function(t,e){return n}))).enable\u003dn}else if(\"profile\"in t){var i\u003dt.profile;e\u003dB(i,(function(t,e){return t.invoke(e,i)}))}return e}(t),d.uniforms\u003dfunction(t,e){var r\u003dt.static,n\u003dt.dynamic,i\u003d{};return Object.keys(r).forEach((function(t){var e,n\u003dr[t];if(\"number\"\u003d\u003dtypeof n||\"boolean\"\u003d\u003dtypeof n)e\u003dF((function(){return n}));else if(\"function\"\u003d\u003dtypeof n){var o\u003dn._reglType;\"texture2d\"\u003d\u003d\u003do||\"textureCube\"\u003d\u003d\u003do?e\u003dF((function(t){return t.link(n)})):\"framebuffer\"!\u003d\u003do\u0026\u0026\"framebufferCube\"!\u003d\u003do||(e\u003dF((function(t){return t.link(n.color[0])})))}else g(n)\u0026\u0026(e\u003dF((function(t){return t.global.def(\"[\",a(n.length,(function(t){return n[t]})),\"]\")})));e.value\u003dn,i[t]\u003de})),Object.keys(n).forEach((function(t){var e\u003dn[t];i[t]\u003dB(e,(function(t,r){return t.invoke(r,e)}))})),i}(n),d.drawVAO\u003dd.scopeVAO\u003dfunction(t,e){var r\u003dt.static,n\u003dt.dynamic;if(\"vao\"in r){var i\u003dr.vao;return null!\u003d\u003di\u0026\u0026null\u003d\u003d\u003du.getVAO(i)\u0026\u0026(i\u003du.createVAO(i)),F((function(t){return t.link(u.getVAO(i))}))}if(\"vao\"in n){var a\u003dn.vao;return B(a,(function(t,e){var r\u003dt.invoke(e,a);return e.def(t.shared.vao+\".getVAO(\"+r+\")\")}))}return null}(t),!d.drawVAO\u0026\u0026p.program\u0026\u0026!l\u0026\u0026r.angle_instanced_arrays){var y\u003d!0;if(t\u003dp.program.attributes.map((function(t){return t\u003de.static[t],y\u003dy\u0026\u0026!!t,t})),y\u0026\u00260\u003ct.length){var x\u003du.getVAO(u.createVAO(t));d.drawVAO\u003dnew D(null,null,null,(function(t,e){return t.link(x)})),d.useVAO\u003d!0}}return l?d.useVAO\u003d!0:d.attributes\u003dk(e),d.context\u003dfunction(t){var e\u003dt.static,r\u003dt.dynamic,n\u003d{};return Object.keys(e).forEach((function(t){var r\u003de[t];n[t]\u003dF((function(t,e){return\"number\"\u003d\u003dtypeof r||\"boolean\"\u003d\u003dtypeof r?\"\"+r:t.link(r)}))})),Object.keys(r).forEach((function(t){var e\u003dr[t];n[t]\u003dB(e,(function(t,r){return t.invoke(r,e)}))})),n}(i),d}function A(t,e,r){var n\u003dt.shared.context,i\u003dt.scope();Object.keys(r).forEach((function(a){e.save(n,\".\"+a),i(n,\".\",a,\"\u003d\",r[a].append(t,e),\";\")})),e(i)}function S(t,e,r,n){var i,a\u003d(s\u003dt.shared).gl,o\u003ds.framebuffer;$\u0026\u0026(i\u003de.def(s.extensions,\".webgl_draw_buffers\"));var s\u003d(l\u003dt.constants).drawBuffer,l\u003dl.backBuffer;t\u003dr?r.append(t,e):e.def(o,\".next\"),n||e(\"if(\",t,\"!\u003d\u003d\",o,\".cur){\"),e(\"if(\",t,\"){\",a,\".bindFramebuffer(\",36160,\",\",t,\".framebuffer);\"),$\u0026\u0026e(i,\".drawBuffersWEBGL(\",s,\"[\",t,\".colorAttachments.length]);\"),e(\"}else{\",a,\".bindFramebuffer(\",36160,\",null);\"),$\u0026\u0026e(i,\".drawBuffersWEBGL(\",l,\");\"),e(\"}\",o,\".cur\u003d\",t,\";\"),n||e(\"}\")}function E(t,e,r){var n\u003dt.shared,i\u003dn.gl,o\u003dt.current,s\u003dt.next,l\u003dn.current,c\u003dn.next,u\u003dt.cond(l,\".dirty\");rt.forEach((function(e){var n,f;if(!((e\u003dv(e))in r.state))if(e in s){n\u003ds[e],f\u003do[e];var h\u003da(tt[e].length,(function(t){return u.def(n,\"[\",t,\"]\")}));u(t.cond(h.map((function(t,e){return t+\"!\u003d\u003d\"+f+\"[\"+e+\"]\"})).join(\"||\")).then(i,\".\",at[e],\"(\",h,\");\",h.map((function(t,e){return f+\"[\"+e+\"]\u003d\"+t})).join(\";\"),\";\"))}else n\u003du.def(c,\".\",e),h\u003dt.cond(n,\"!\u003d\u003d\",l,\".\",e),u(h),e in it?h(t.cond(n).then(i,\".enable(\",it[e],\");\").else(i,\".disable(\",it[e],\");\"),l,\".\",e,\"\u003d\",n,\";\"):h(i,\".\",at[e],\"(\",n,\");\",l,\".\",e,\"\u003d\",n,\";\")})),0\u003d\u003d\u003dObject.keys(r.state).length\u0026\u0026u(l,\".dirty\u003dfalse;\"),e(u)}function L(t,e,r,n){var i\u003dt.shared,a\u003dt.current,o\u003di.current,s\u003di.gl;z(Object.keys(r)).forEach((function(i){var l\u003dr[i];if(!n||n(l)){var c\u003dl.append(t,e);if(it[i]){var u\u003dit[i];R(l)?e(s,c?\".enable(\":\".disable(\",u,\");\"):e(t.cond(c).then(s,\".enable(\",u,\");\").else(s,\".disable(\",u,\");\")),e(o,\".\",i,\"\u003d\",c,\";\")}else if(g(c)){var f\u003da[i];e(s,\".\",at[i],\"(\",c,\");\",c.map((function(t,e){return f+\"[\"+e+\"]\u003d\"+t})).join(\";\"),\";\")}else e(s,\".\",at[i],\"(\",c,\");\",o,\".\",i,\"\u003d\",c,\";\")}}))}function C(t,e){K\u0026\u0026(t.instancing\u003de.def(t.shared.extensions,\".angle_instanced_arrays\"))}function P(t,e,r,n,i){function a(){return\"undefined\"\u003d\u003dtypeof performance?\"Date.now()\":\"performance.now()\"}function o(t){t(c\u003de.def(),\"\u003d\",a(),\";\"),\"string\"\u003d\u003dtypeof i?t(h,\".count+\u003d\",i,\";\"):t(h,\".count++;\"),d\u0026\u0026(n?t(u\u003de.def(),\"\u003d\",m,\".getNumPendingQueries();\"):t(m,\".beginQuery(\",h,\");\"))}function s(t){t(h,\".cpuTime+\u003d\",a(),\"-\",c,\";\"),d\u0026\u0026(n?t(m,\".pushScopeStats(\",u,\",\",m,\".getNumPendingQueries(),\",h,\");\"):t(m,\".endQuery();\"))}function l(t){var r\u003de.def(p,\".profile\");e(p,\".profile\u003d\",t,\";\"),e.exit(p,\".profile\u003d\",r,\";\")}var c,u,f\u003dt.shared,h\u003dt.stats,p\u003df.current,m\u003df.timer;if(r\u003dr.profile){if(R(r))return void(r.enable?(o(e),s(e.exit),l(\"true\")):l(\"false\"));l(r\u003dr.append(t,e))}else r\u003de.def(p,\".profile\");o(f\u003dt.block()),e(\"if(\",r,\"){\",f,\"}\"),s(t\u003dt.block()),e.exit(\"if(\",r,\"){\",t,\"}\")}function N(t,e,r,n,i){function a(r,n,i){function a(){e(\"if(!\",u,\".buffer){\",l,\".enableVertexAttribArray(\",c,\");}\");var r,a\u003di.type;r\u003di.size?e.def(i.size,\"||\",n):n,e(\"if(\",u,\".type!\u003d\u003d\",a,\"||\",u,\".size!\u003d\u003d\",r,\"||\",p.map((function(t){return u+\".\"+t+\"!\u003d\u003d\"+i[t]})).join(\"||\"),\"){\",l,\".bindBuffer(\",34962,\",\",f,\".buffer);\",l,\".vertexAttribPointer(\",[c,r,a,i.normalized,i.stride,i.offset],\");\",u,\".type\u003d\",a,\";\",u,\".size\u003d\",r,\";\",p.map((function(t){return u+\".\"+t+\"\u003d\"+i[t]+\";\"})).join(\"\"),\"}\"),K\u0026\u0026(a\u003di.divisor,e(\"if(\",u,\".divisor!\u003d\u003d\",a,\"){\",t.instancing,\".vertexAttribDivisorANGLE(\",[c,a],\");\",u,\".divisor\u003d\",a,\";}\"))}function s(){e(\"if(\",u,\".buffer){\",l,\".disableVertexAttribArray(\",c,\");\",u,\".buffer\u003dnull;\",\"}if(\",wt.map((function(t,e){return u+\".\"+t+\"!\u003d\u003d\"+h[e]})).join(\"||\"),\"){\",l,\".vertexAttrib4f(\",c,\",\",h,\");\",wt.map((function(t,e){return u+\".\"+t+\"\u003d\"+h[e]+\";\"})).join(\"\"),\"}\")}var l\u003do.gl,c\u003de.def(r,\".location\"),u\u003de.def(o.attributes,\"[\",c,\"]\");r\u003di.state;var f\u003di.buffer,h\u003d[i.x,i.y,i.z,i.w],p\u003d[\"buffer\",\"normalized\",\"offset\",\"stride\"];1\u003d\u003d\u003dr?a():2\u003d\u003d\u003dr?s():(e(\"if(\",r,\"\u003d\u003d\u003d\",1,\"){\"),a(),e(\"}else{\"),s(),e(\"}\"))}var o\u003dt.shared;n.forEach((function(n){var o,s\u003dn.name,l\u003dr.attributes[s];if(l){if(!i(l))return;o\u003dl.append(t,e)}else{if(!i(Et))return;var c\u003dt.scopeAttrib(s);o\u003d{},Object.keys(new Z).forEach((function(t){o[t]\u003de.def(c,\".\",t)}))}a(t.link(n),function(t){switch(t){case 35664:case 35667:case 35671:return 2;case 35665:case 35668:case 35672:return 3;case 35666:case 35669:case 35673:return 4;default:return 1}}(n.info.type),o)}))}function j(t,r,n,i,o){for(var s,l\u003dt.shared,c\u003dl.gl,u\u003d0;u\u003ci.length;++u){var f,h\u003d(m\u003di[u]).name,p\u003dm.info.type,d\u003dn.uniforms[h],m\u003dt.link(m)+\".location\";if(d){if(!o(d))continue;if(R(d)){if(h\u003dd.value,35678\u003d\u003d\u003dp||35680\u003d\u003d\u003dp)r(c,\".uniform1i(\",m,\",\",(p\u003dt.link(h._texture||h.color[0]._texture))+\".bind());\"),r.exit(p,\".unbind();\");else if(35674\u003d\u003d\u003dp||35675\u003d\u003d\u003dp||35676\u003d\u003d\u003dp)d\u003d2,35675\u003d\u003d\u003dp?d\u003d3:35676\u003d\u003d\u003dp\u0026\u0026(d\u003d4),r(c,\".uniformMatrix\",d,\"fv(\",m,\",false,\",h\u003dt.global.def(\"new Float32Array([\"+Array.prototype.slice.call(h)+\"])\"),\");\");else{switch(p){case 5126:s\u003d\"1f\";break;case 35664:s\u003d\"2f\";break;case 35665:s\u003d\"3f\";break;case 35666:s\u003d\"4f\";break;case 35670:case 5124:s\u003d\"1i\";break;case 35671:case 35667:s\u003d\"2i\";break;case 35672:case 35668:s\u003d\"3i\";break;case 35673:s\u003d\"4i\";break;case 35669:s\u003d\"4i\"}r(c,\".uniform\",s,\"(\",m,\",\",g(h)?Array.prototype.slice.call(h):h,\");\")}continue}f\u003dd.append(t,r)}else{if(!o(Et))continue;f\u003dr.def(l.uniforms,\"[\",e.id(h),\"]\")}switch(35678\u003d\u003d\u003dp?r(\"if(\",f,\"\u0026\u0026\",f,\u0027._reglType\u003d\u003d\u003d\"framebuffer\"){\u0027,f,\"\u003d\",f,\".color[0];\",\"}\"):35680\u003d\u003d\u003dp\u0026\u0026r(\"if(\",f,\"\u0026\u0026\",f,\u0027._reglType\u003d\u003d\u003d\"framebufferCube\"){\u0027,f,\"\u003d\",f,\".color[0];\",\"}\"),h\u003d1,p){case 35678:case 35680:p\u003dr.def(f,\"._texture\"),r(c,\".uniform1i(\",m,\",\",p,\".bind());\"),r.exit(p,\".unbind();\");continue;case 5124:case 35670:s\u003d\"1i\";break;case 35667:case 35671:s\u003d\"2i\",h\u003d2;break;case 35668:case 35672:s\u003d\"3i\",h\u003d3;break;case 35669:case 35673:s\u003d\"4i\",h\u003d4;break;case 5126:s\u003d\"1f\";break;case 35664:s\u003d\"2f\",h\u003d2;break;case 35665:s\u003d\"3f\",h\u003d3;break;case 35666:s\u003d\"4f\",h\u003d4;break;case 35674:s\u003d\"Matrix2fv\";break;case 35675:s\u003d\"Matrix3fv\";break;case 35676:s\u003d\"Matrix4fv\"}if(r(c,\".uniform\",s,\"(\",m,\",\"),\"M\"\u003d\u003d\u003ds.charAt(0)){m\u003dMath.pow(p-35674+2,2);var v\u003dt.global.def(\"new Float32Array(\",m,\")\");r(\"false,(Array.isArray(\",f,\")||\",f,\" instanceof Float32Array)?\",f,\":(\",a(m,(function(t){return v+\"[\"+t+\"]\u003d\"+f+\"[\"+t+\"]\"})),\",\",v,\")\")}else r(1\u003ch?a(h,(function(t){return f+\"[\"+t+\"]\"})):f);r(\");\")}}function U(t,e,r,n){function i(i){var a\u003dh[i];return a?a.contextDep\u0026\u0026n.contextDynamic||a.propDep?a.append(t,r):a.append(t,e):e.def(f,\".\",i)}function a(){function t(){r(l,\".drawElementsInstancedANGLE(\",[d,g,v,m+\"\u003c\u003c((\"+v+\"-5121)\u003e\u003e1)\",s],\");\")}function e(){r(l,\".drawArraysInstancedANGLE(\",[d,m,g,s],\");\")}p?y?t():(r(\"if(\",p,\"){\"),t(),r(\"}else{\"),e(),r(\"}\")):e()}function o(){function t(){r(u+\".drawElements(\"+[d,g,v,m+\"\u003c\u003c((\"+v+\"-5121)\u003e\u003e1)\"]+\");\")}function e(){r(u+\".drawArrays(\"+[d,m,g]+\");\")}p?y?t():(r(\"if(\",p,\"){\"),t(),r(\"}else{\"),e(),r(\"}\")):e()}var s,l,c\u003dt.shared,u\u003dc.gl,f\u003dc.draw,h\u003dn.draw,p\u003dfunction(){var i\u003dh.elements,a\u003de;return i?((i.contextDep\u0026\u0026n.contextDynamic||i.propDep)\u0026\u0026(a\u003dr),i\u003di.append(t,a)):i\u003da.def(f,\".\",\"elements\"),i\u0026\u0026a(\"if(\"+i+\")\"+u+\".bindBuffer(34963,\"+i+\".buffer.buffer);\"),i}(),d\u003di(\"primitive\"),m\u003di(\"offset\"),g\u003dfunction(){var i\u003dh.count,a\u003de;return i?((i.contextDep\u0026\u0026n.contextDynamic||i.propDep)\u0026\u0026(a\u003dr),i\u003di.append(t,a)):i\u003da.def(f,\".\",\"count\"),i}();if(\"number\"\u003d\u003dtypeof g){if(0\u003d\u003d\u003dg)return}else r(\"if(\",g,\"){\"),r.exit(\"}\");K\u0026\u0026(s\u003di(\"instances\"),l\u003dt.instancing);var v\u003dp+\".type\",y\u003dh.elements\u0026\u0026R(h.elements);K\u0026\u0026(\"number\"!\u003dtypeof s||0\u003c\u003ds)?\"string\"\u003d\u003dtypeof s?(r(\"if(\",s,\"\u003e0){\"),a(),r(\"}else if(\",s,\"\u003c0){\"),o(),r(\"}\")):a():o()}function V(t,e,r,n,i){return i\u003d(e\u003db()).proc(\"body\",i),K\u0026\u0026(e.instancing\u003di.def(e.shared.extensions,\".angle_instanced_arrays\")),t(e,i,r,n),e.compile().body}function H(t,e,r,n){C(t,e),r.useVAO?r.drawVAO?e(t.shared.vao,\".setVAO(\",r.drawVAO.append(t,e),\");\"):e(t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"):(e(t.shared.vao,\".setVAO(null);\"),N(t,e,r,n.attributes,(function(){return!0}))),j(t,e,r,n.uniforms,(function(){return!0})),U(t,e,e,r)}function G(t,e,r,n){function i(){return!0}t.batchId\u003d\"a1\",C(t,e),N(t,e,r,n.attributes,i),j(t,e,r,n.uniforms,i),U(t,e,e,r)}function Y(t,e,r,n){function i(t){return t.contextDep\u0026\u0026o||t.propDep}function a(t){return!i(t)}C(t,e);var o\u003dr.contextDep,s\u003de.def(),l\u003de.def();t.shared.props\u003dl,t.batchId\u003ds;var c\u003dt.scope(),u\u003dt.scope();e(c.entry,\"for(\",s,\"\u003d0;\",s,\"\u003c\",\"a1\",\";++\",s,\"){\",l,\"\u003d\",\"a0\",\"[\",s,\"];\",u,\"}\",c.exit),r.needsContext\u0026\u0026A(t,u,r.context),r.needsFramebuffer\u0026\u0026S(t,u,r.framebuffer),L(t,u,r.state,i),r.profile\u0026\u0026i(r.profile)\u0026\u0026P(t,u,r,!1,!0),n?(r.useVAO?r.drawVAO?i(r.drawVAO)?u(t.shared.vao,\".setVAO(\",r.drawVAO.append(t,u),\");\"):c(t.shared.vao,\".setVAO(\",r.drawVAO.append(t,c),\");\"):c(t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"):(c(t.shared.vao,\".setVAO(null);\"),N(t,c,r,n.attributes,a),N(t,u,r,n.attributes,i)),j(t,c,r,n.uniforms,a),j(t,u,r,n.uniforms,i),U(t,c,u,r)):(e\u003dt.global.def(\"{}\"),n\u003dr.shader.progVar.append(t,u),l\u003du.def(n,\".id\"),c\u003du.def(e,\"[\",l,\"]\"),u(t.shared.gl,\".useProgram(\",n,\".program);\",\"if(!\",c,\"){\",c,\"\u003d\",e,\"[\",l,\"]\u003d\",t.link((function(e){return V(G,t,r,e,2)})),\"(\",n,\");}\",c,\".call(this,a0[\",s,\"],\",s,\");\"))}function W(t,r){function n(e){var n\u003dr.shader[e];n\u0026\u0026i.set(a.shader,\".\"+e,n.append(t,i))}var i\u003dt.proc(\"scope\",3);t.batchId\u003d\"a2\";var a\u003dt.shared,o\u003da.current;A(t,i,r.context),r.framebuffer\u0026\u0026r.framebuffer.append(t,i),z(Object.keys(r.state)).forEach((function(e){var n\u003dr.state[e].append(t,i);g(n)?n.forEach((function(r,n){i.set(t.next[e],\"[\"+n+\"]\",r)})):i.set(a.next,\".\"+e,n)})),P(t,i,r,!0,!0),[\"elements\",\"offset\",\"count\",\"instances\",\"primitive\"].forEach((function(e){var n\u003dr.draw[e];n\u0026\u0026i.set(a.draw,\".\"+e,\"\"+n.append(t,i))})),Object.keys(r.uniforms).forEach((function(n){i.set(a.uniforms,\"[\"+e.id(n)+\"]\",r.uniforms[n].append(t,i))})),Object.keys(r.attributes).forEach((function(e){var n\u003dr.attributes[e].append(t,i),a\u003dt.scopeAttrib(e);Object.keys(new Z).forEach((function(t){i.set(a,\".\"+t,n[t])}))})),r.scopeVAO\u0026\u0026i.set(a.vao,\".targetVAO\",r.scopeVAO.append(t,i)),n(\"vert\"),n(\"frag\"),0\u003cObject.keys(r.state).length\u0026\u0026(i(o,\".dirty\u003dtrue;\"),i.exit(o,\".dirty\u003dtrue;\")),i(\"a1(\",t.shared.context,\",a0,\",t.batchId,\");\")}function X(t,e,r){var n\u003de.static[r];if(n\u0026\u0026function(t){if(\"object\"\u003d\u003dtypeof t\u0026\u0026!g(t)){for(var e\u003dObject.keys(t),r\u003d0;r\u003ce.length;++r)if(q.isDynamic(t[e[r]]))return!0;return!1}}(n)){var i\u003dt.global,a\u003dObject.keys(n),o\u003d!1,s\u003d!1,l\u003d!1,c\u003dt.global.def(\"{}\");a.forEach((function(e){var r\u003dn[e];if(q.isDynamic(r))\"function\"\u003d\u003dtypeof r\u0026\u0026(r\u003dn[e]\u003dq.unbox(r)),e\u003dB(r,null),o\u003do||e.thisDep,l\u003dl||e.propDep,s\u003ds||e.contextDep;else{switch(i(c,\".\",e,\"\u003d\"),typeof r){case\"number\":i(r);break;case\"string\":i(\u0027\"\u0027,r,\u0027\"\u0027);break;case\"object\":Array.isArray(r)\u0026\u0026i(\"[\",r.join(),\"]\");break;default:i(t.link(r))}i(\";\")}})),e.dynamic[r]\u003dnew q.DynamicVariable(4,{thisDep:o,contextDep:s,propDep:l,ref:c,append:function(t,e){a.forEach((function(r){var i\u003dn[r];q.isDynamic(i)\u0026\u0026(i\u003dt.invoke(e,i),e(c,\".\",r,\"\u003d\",i,\";\"))}))}}),delete e.static[r]}}var Z\u003du.Record,J\u003d{add:32774,subtract:32778,\"reverse subtract\":32779};r.ext_blend_minmax\u0026\u0026(J.min\u003d32775,J.max\u003d32776);var K\u003dr.angle_instanced_arrays,$\u003dr.webgl_draw_buffers,tt\u003d{dirty:!0,profile:m.profile},et\u003d{},rt\u003d[],it\u003d{},at\u003d{};y(\"dither\",3024),y(\"blend.enable\",3042),x(\"blend.color\",\"blendColor\",[0,0,0,0]),x(\"blend.equation\",\"blendEquationSeparate\",[32774,32774]),x(\"blend.func\",\"blendFuncSeparate\",[1,0,1,0]),y(\"depth.enable\",2929,!0),x(\"depth.func\",\"depthFunc\",513),x(\"depth.range\",\"depthRange\",[0,1]),x(\"depth.mask\",\"depthMask\",!0),x(\"colorMask\",\"colorMask\",[!0,!0,!0,!0]),y(\"cull.enable\",2884),x(\"cull.face\",\"cullFace\",1029),x(\"frontFace\",\"frontFace\",2305),x(\"lineWidth\",\"lineWidth\",1),y(\"polygonOffset.enable\",32823),x(\"polygonOffset.offset\",\"polygonOffset\",[0,0]),y(\"sample.alpha\",32926),y(\"sample.enable\",32928),x(\"sample.coverage\",\"sampleCoverage\",[1,!1]),y(\"stencil.enable\",2960),x(\"stencil.mask\",\"stencilMask\",-1),x(\"stencil.func\",\"stencilFunc\",[519,0,-1]),x(\"stencil.opFront\",\"stencilOpSeparate\",[1028,7680,7680,7680]),x(\"stencil.opBack\",\"stencilOpSeparate\",[1029,7680,7680,7680]),y(\"scissor.enable\",3089),x(\"scissor.box\",\"scissor\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),x(\"viewport\",\"viewport\",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var ot\u003d{gl:t,context:p,strings:e,next:et,current:tt,draw:h,elements:o,buffer:i,shader:f,attributes:u.state,vao:u,uniforms:c,framebuffer:l,extensions:r,timer:d,isBufferArgs:O},st\u003d{primTypes:nt,compareFuncs:Mt,blendFuncs:kt,blendEquations:J,stencilOps:At,glTypes:Q,orientationType:St};$\u0026\u0026(st.backBuffer\u003d[1029],st.drawBuffer\u003da(n.maxDrawbuffers,(function(t){return 0\u003d\u003d\u003dt?[0]:a(t,(function(t){return 36064+t}))})));var lt\u003d0;return{next:et,current:tt,procs:function(){var t\u003db(),e\u003dt.proc(\"poll\"),i\u003dt.proc(\"refresh\"),o\u003dt.block();e(o),i(o);var s,l\u003dt.shared,c\u003dl.gl,u\u003dl.next,f\u003dl.current;o(f,\".dirty\u003dfalse;\"),S(t,e),S(t,i,null,!0),K\u0026\u0026(s\u003dt.link(K)),r.oes_vertex_array_object\u0026\u0026i(t.link(r.oes_vertex_array_object),\".bindVertexArrayOES(null);\");for(var h\u003d0;h\u003cn.maxAttributes;++h){var p\u003di.def(l.attributes,\"[\",h,\"]\"),d\u003dt.cond(p,\".buffer\");d.then(c,\".enableVertexAttribArray(\",h,\");\",c,\".bindBuffer(\",34962,\",\",p,\".buffer.buffer);\",c,\".vertexAttribPointer(\",h,\",\",p,\".size,\",p,\".type,\",p,\".normalized,\",p,\".stride,\",p,\".offset);\").else(c,\".disableVertexAttribArray(\",h,\");\",c,\".vertexAttrib4f(\",h,\",\",p,\".x,\",p,\".y,\",p,\".z,\",p,\".w);\",p,\".buffer\u003dnull;\"),i(d),K\u0026\u0026i(s,\".vertexAttribDivisorANGLE(\",h,\",\",p,\".divisor);\")}return i(t.shared.vao,\".currentVAO\u003dnull;\",t.shared.vao,\".setVAO(\",t.shared.vao,\".targetVAO);\"),Object.keys(it).forEach((function(r){var n\u003dit[r],a\u003do.def(u,\".\",r),s\u003dt.block();s(\"if(\",a,\"){\",c,\".enable(\",n,\")}else{\",c,\".disable(\",n,\")}\",f,\".\",r,\"\u003d\",a,\";\"),i(s),e(\"if(\",a,\"!\u003d\u003d\",f,\".\",r,\"){\",s,\"}\")})),Object.keys(at).forEach((function(r){var n,s,l\u003dat[r],h\u003dtt[r],p\u003dt.block();p(c,\".\",l,\"(\"),g(h)?(l\u003dh.length,n\u003dt.global.def(u,\".\",r),s\u003dt.global.def(f,\".\",r),p(a(l,(function(t){return n+\"[\"+t+\"]\"})),\");\",a(l,(function(t){return s+\"[\"+t+\"]\u003d\"+n+\"[\"+t+\"];\"})).join(\"\")),e(\"if(\",a(l,(function(t){return n+\"[\"+t+\"]!\u003d\u003d\"+s+\"[\"+t+\"]\"})).join(\"||\"),\"){\",p,\"}\")):(n\u003do.def(u,\".\",r),s\u003do.def(f,\".\",r),p(n,\");\",f,\".\",r,\"\u003d\",n,\";\"),e(\"if(\",n,\"!\u003d\u003d\",s,\"){\",p,\"}\")),i(p)})),t.compile()}(),compile:function(t,e,r,n,i){var a\u003db();return a.stats\u003da.link(i),Object.keys(e.static).forEach((function(t){X(a,e,t)})),Tt.forEach((function(e){X(a,t,e)})),r\u003dM(t,e,r,n),function(t,e){var r\u003dt.proc(\"draw\",1);C(t,r),A(t,r,e.context),S(t,r,e.framebuffer),E(t,r,e),L(t,r,e.state),P(t,r,e,!1,!0);var n\u003de.shader.progVar.append(t,r);if(r(t.shared.gl,\".useProgram(\",n,\".program);\"),e.shader.program)H(t,r,e,e.shader.program);else{r(t.shared.vao,\".setVAO(null);\");var i\u003dt.global.def(\"{}\"),a\u003dr.def(n,\".id\"),o\u003dr.def(i,\"[\",a,\"]\");r(t.cond(o).then(o,\".call(this,a0);\").else(o,\"\u003d\",i,\"[\",a,\"]\u003d\",t.link((function(r){return V(H,t,e,r,1)})),\"(\",n,\");\",o,\".call(this,a0);\"))}0\u003cObject.keys(e.state).length\u0026\u0026r(t.shared.current,\".dirty\u003dtrue;\")}(a,r),W(a,r),function(t,e){function r(t){return t.contextDep\u0026\u0026i||t.propDep}var n\u003dt.proc(\"batch\",2);t.batchId\u003d\"0\",C(t,n);var i\u003d!1,a\u003d!0;Object.keys(e.context).forEach((function(t){i\u003di||e.context[t].propDep})),i||(A(t,n,e.context),a\u003d!1);var o\u003d!1;if((s\u003de.framebuffer)?(s.propDep?i\u003do\u003d!0:s.contextDep\u0026\u0026i\u0026\u0026(o\u003d!0),o||S(t,n,s)):S(t,n,null),e.state.viewport\u0026\u0026e.state.viewport.propDep\u0026\u0026(i\u003d!0),E(t,n,e),L(t,n,e.state,(function(t){return!r(t)})),e.profile\u0026\u0026r(e.profile)||P(t,n,e,!1,\"a1\"),e.contextDep\u003di,e.needsContext\u003da,e.needsFramebuffer\u003do,(a\u003de.shader.progVar).contextDep\u0026\u0026i||a.propDep)Y(t,n,e,null);else if(a\u003da.append(t,n),n(t.shared.gl,\".useProgram(\",a,\".program);\"),e.shader.program)Y(t,n,e,e.shader.program);else{n(t.shared.vao,\".setVAO(null);\");var s\u003dt.global.def(\"{}\"),l\u003d(o\u003dn.def(a,\".id\"),n.def(s,\"[\",o,\"]\"));n(t.cond(l).then(l,\".call(this,a0,a1);\").else(l,\"\u003d\",s,\"[\",o,\"]\u003d\",t.link((function(r){return V(Y,t,e,r,2)})),\"(\",a,\");\",l,\".call(this,a0,a1);\"))}0\u003cObject.keys(e.state).length\u0026\u0026n(t.shared.current,\".dirty\u003dtrue;\")}(a,r),a.compile()}}}function j(t,e){for(var r\u003d0;r\u003ct.length;++r)if(t[r]\u003d\u003d\u003de)return r;return-1}var U\u003dfunction(t,e){for(var r\u003dObject.keys(e),n\u003d0;n\u003cr.length;++n)t[r[n]]\u003de[r[n]];return t},V\u003d0,q\u003d{DynamicVariable:t,define:function(r,n){return new t(r,e(n+\"\"))},isDynamic:function(e){return\"function\"\u003d\u003dtypeof e\u0026\u0026!e._reglType||e instanceof t},unbox:function(e,r){return\"function\"\u003d\u003dtypeof e?new t(0,e):e},accessor:e},H\u003d{next:\"function\"\u003d\u003dtypeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:\"function\"\u003d\u003dtypeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},G\u003d\"undefined\"!\u003dtypeof performance\u0026\u0026performance.now?function(){return performance.now()}:function(){return+new Date},Y\u003ds();Y.zero\u003ds();var W\u003dfunction(t,e){var r\u003d1;e.ext_texture_filter_anisotropic\u0026\u0026(r\u003dt.getParameter(34047));var n\u003d1,i\u003d1;e.webgl_draw_buffers\u0026\u0026(n\u003dt.getParameter(34852),i\u003dt.getParameter(36063));var a\u003d!!e.oes_texture_float;if(a){a\u003dt.createTexture(),t.bindTexture(3553,a),t.texImage2D(3553,0,6408,1,1,0,6408,5126,null);var o\u003dt.createFramebuffer();if(t.bindFramebuffer(36160,o),t.framebufferTexture2D(36160,36064,3553,a,0),t.bindTexture(3553,null),36053!\u003d\u003dt.checkFramebufferStatus(36160))a\u003d!1;else{t.viewport(0,0,1,1),t.clearColor(1,0,0,1),t.clear(16384);var s\u003dY.allocType(5126,4);t.readPixels(0,0,1,1,6408,5126,s),t.getError()?a\u003d!1:(t.deleteFramebuffer(o),t.deleteTexture(a),a\u003d1\u003d\u003d\u003ds[0]),Y.freeType(s)}}return s\u003d!0,\"undefined\"!\u003dtypeof navigator\u0026\u0026(/MSIE/.test(navigator.userAgent)||/Trident\\//.test(navigator.appVersion)||/Edge/.test(navigator.userAgent))||(s\u003dt.createTexture(),o\u003dY.allocType(5121,36),t.activeTexture(33984),t.bindTexture(34067,s),t.texImage2D(34069,0,6408,3,3,0,6408,5121,o),Y.freeType(o),t.bindTexture(34067,null),t.deleteTexture(s),s\u003d!t.getError()),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter((function(t){return!!e[t]})),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:i,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938),readFloat:a,npotTextureCube:s}},X\u003dfunction(t){return t instanceof Uint8Array||t instanceof Uint16Array||t instanceof Uint32Array||t instanceof Int8Array||t instanceof Int16Array||t instanceof Int32Array||t instanceof Float32Array||t instanceof Float64Array||t instanceof Uint8ClampedArray},Z\u003dfunction(t){return Object.keys(t).map((function(e){return t[e]}))},J\u003d{shape:function(t){for(var e\u003d[];t.length;t\u003dt[0])e.push(t.length);return e},flatten:function(t,e,r,n){var i\u003d1;if(e.length)for(var a\u003d0;a\u003ce.length;++a)i*\u003de[a];else i\u003d0;switch(r\u003dn||Y.allocType(r,i),e.length){case 0:break;case 1:for(n\u003de[0],e\u003d0;e\u003cn;++e)r[e]\u003dt[e];break;case 2:for(n\u003de[0],e\u003de[1],a\u003di\u003d0;a\u003cn;++a)for(var o\u003dt[a],s\u003d0;s\u003ce;++s)r[i++]\u003do[s];break;case 3:c(t,e[0],e[1],e[2],r,0);break;default:!function t(e,r,n,i,a){for(var o\u003d1,s\u003dn+1;s\u003cr.length;++s)o*\u003dr[s];var l\u003dr[n];if(4\u003d\u003dr.length-n){var u\u003dr[n+1],f\u003dr[n+2];for(r\u003dr[n+3],s\u003d0;s\u003cl;++s)c(e[s],u,f,r,i,a),a+\u003do}else for(s\u003d0;s\u003cl;++s)t(e[s],r,n+1,i,a),a+\u003do}(t,e,0,r,0)}return r}},K\u003d{\"[object Int8Array]\":5120,\"[object Int16Array]\":5122,\"[object Int32Array]\":5124,\"[object Uint8Array]\":5121,\"[object Uint8ClampedArray]\":5121,\"[object Uint16Array]\":5123,\"[object Uint32Array]\":5125,\"[object Float32Array]\":5126,\"[object Float64Array]\":5121,\"[object ArrayBuffer]\":5121},Q\u003d{int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},$\u003d{dynamic:35048,stream:35040,static:35044},tt\u003dJ.flatten,et\u003dJ.shape,rt\u003d[];rt[5120]\u003d1,rt[5122]\u003d2,rt[5124]\u003d4,rt[5121]\u003d1,rt[5123]\u003d2,rt[5125]\u003d4,rt[5126]\u003d4;var nt\u003d{points:0,point:0,lines:1,line:1,triangles:4,triangle:4,\"line loop\":2,\"line strip\":3,\"triangle strip\":5,\"triangle fan\":6},it\u003dnew Float32Array(1),at\u003dnew Uint32Array(it.buffer),ot\u003d[9984,9986,9985,9987],st\u003d[0,6409,6410,6407,6408],lt\u003d{};lt[6409]\u003dlt[6406]\u003dlt[6402]\u003d1,lt[34041]\u003dlt[6410]\u003d2,lt[6407]\u003dlt[35904]\u003d3,lt[6408]\u003dlt[35906]\u003d4;var ct\u003dv(\"HTMLCanvasElement\"),ut\u003dv(\"OffscreenCanvas\"),ft\u003dv(\"CanvasRenderingContext2D\"),ht\u003dv(\"ImageBitmap\"),pt\u003dv(\"HTMLImageElement\"),dt\u003dv(\"HTMLVideoElement\"),mt\u003dObject.keys(K).concat([ct,ut,ft,ht,pt,dt]),gt\u003d[];gt[5121]\u003d1,gt[5126]\u003d4,gt[36193]\u003d2,gt[5123]\u003d2,gt[5125]\u003d4;var vt\u003d[];vt[32854]\u003d2,vt[32855]\u003d2,vt[36194]\u003d2,vt[34041]\u003d4,vt[33776]\u003d.5,vt[33777]\u003d.5,vt[33778]\u003d1,vt[33779]\u003d1,vt[35986]\u003d.5,vt[35987]\u003d1,vt[34798]\u003d1,vt[35840]\u003d.5,vt[35841]\u003d.25,vt[35842]\u003d.5,vt[35843]\u003d.25,vt[36196]\u003d.5;var yt\u003d[];yt[32854]\u003d2,yt[32855]\u003d2,yt[36194]\u003d2,yt[33189]\u003d2,yt[36168]\u003d1,yt[34041]\u003d4,yt[35907]\u003d4,yt[34836]\u003d16,yt[34842]\u003d8,yt[34843]\u003d6;var xt\u003dfunction(t,e,r,n,i){function a(t){this.id\u003dc++,this.refCount\u003d1,this.renderbuffer\u003dt,this.format\u003d32854,this.height\u003dthis.width\u003d0,i.profile\u0026\u0026(this.stats\u003d{size:0})}function o(e){var r\u003de.renderbuffer;t.bindRenderbuffer(36161,null),t.deleteRenderbuffer(r),e.renderbuffer\u003dnull,e.refCount\u003d0,delete u[e.id],n.renderbufferCount--}var s\u003d{rgba4:32854,rgb565:36194,\"rgb5 a1\":32855,depth:33189,stencil:36168,\"depth stencil\":34041};e.ext_srgb\u0026\u0026(s.srgba\u003d35907),e.ext_color_buffer_half_float\u0026\u0026(s.rgba16f\u003d34842,s.rgb16f\u003d34843),e.webgl_color_buffer_float\u0026\u0026(s.rgba32f\u003d34836);var l\u003d[];Object.keys(s).forEach((function(t){l[s[t]]\u003dt}));var c\u003d0,u\u003d{};return a.prototype.decRef\u003dfunction(){0\u003e\u003d--this.refCount\u0026\u0026o(this)},i.profile\u0026\u0026(n.getTotalRenderbufferSize\u003dfunction(){var t\u003d0;return Object.keys(u).forEach((function(e){t+\u003du[e].stats.size})),t}),{create:function(e,r){function o(e,r){var n\u003d0,a\u003d0,u\u003d32854;if(\"object\"\u003d\u003dtypeof e\u0026\u0026e?(\"shape\"in e?(n\u003d0|(a\u003de.shape)[0],a\u003d0|a[1]):(\"radius\"in e\u0026\u0026(n\u003da\u003d0|e.radius),\"width\"in e\u0026\u0026(n\u003d0|e.width),\"height\"in e\u0026\u0026(a\u003d0|e.height)),\"format\"in e\u0026\u0026(u\u003ds[e.format])):\"number\"\u003d\u003dtypeof e?(n\u003d0|e,a\u003d\"number\"\u003d\u003dtypeof r?0|r:n):e||(n\u003da\u003d1),n!\u003d\u003dc.width||a!\u003d\u003dc.height||u!\u003d\u003dc.format)return o.width\u003dc.width\u003dn,o.height\u003dc.height\u003da,c.format\u003du,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,u,n,a),i.profile\u0026\u0026(c.stats.size\u003dyt[c.format]*c.width*c.height),o.format\u003dl[c.format],o}var c\u003dnew a(t.createRenderbuffer());return u[c.id]\u003dc,n.renderbufferCount++,o(e,r),o.resize\u003dfunction(e,r){var n\u003d0|e,a\u003d0|r||n;return n\u003d\u003d\u003dc.width\u0026\u0026a\u003d\u003d\u003dc.height||(o.width\u003dc.width\u003dn,o.height\u003dc.height\u003da,t.bindRenderbuffer(36161,c.renderbuffer),t.renderbufferStorage(36161,c.format,n,a),i.profile\u0026\u0026(c.stats.size\u003dyt[c.format]*c.width*c.height)),o},o._reglType\u003d\"renderbuffer\",o._renderbuffer\u003dc,i.profile\u0026\u0026(o.stats\u003dc.stats),o.destroy\u003dfunction(){c.decRef()},o},clear:function(){Z(u).forEach(o)},restore:function(){Z(u).forEach((function(e){e.renderbuffer\u003dt.createRenderbuffer(),t.bindRenderbuffer(36161,e.renderbuffer),t.renderbufferStorage(36161,e.format,e.width,e.height)})),t.bindRenderbuffer(36161,null)}}},bt\u003d[];bt[6408]\u003d4,bt[6407]\u003d3;var _t\u003d[];_t[5121]\u003d1,_t[5126]\u003d4,_t[36193]\u003d2;var wt\u003d[\"x\",\"y\",\"z\",\"w\"],Tt\u003d\"blend.func blend.equation stencil.func stencil.opFront stencil.opBack sample.coverage viewport scissor.box polygonOffset.offset\".split(\" \"),kt\u003d{0:0,1:1,zero:0,one:1,\"src color\":768,\"one minus src color\":769,\"src alpha\":770,\"one minus src alpha\":771,\"dst color\":774,\"one minus dst color\":775,\"dst alpha\":772,\"one minus dst alpha\":773,\"constant color\":32769,\"one minus constant color\":32770,\"constant alpha\":32771,\"one minus constant alpha\":32772,\"src alpha saturate\":776},Mt\u003d{never:512,less:513,\"\u003c\":513,equal:514,\"\u003d\":514,\"\u003d\u003d\":514,\"\u003d\u003d\u003d\":514,lequal:515,\"\u003c\u003d\":515,greater:516,\"\u003e\":516,notequal:517,\"!\u003d\":517,\"!\u003d\u003d\":517,gequal:518,\"\u003e\u003d\":518,always:519},At\u003d{0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,\"increment wrap\":34055,\"decrement wrap\":34056,invert:5386},St\u003d{cw:2304,ccw:2305},Et\u003dnew D(!1,!1,!1,(function(){}));return function(t){function e(){if(0\u003d\u003d\u003dJ.length)w\u0026\u0026w.update(),tt\u003dnull;else{tt\u003dH.next(e),f();for(var t\u003dJ.length-1;0\u003c\u003dt;--t){var r\u003dJ[t];r\u0026\u0026r(P,null,0)}g.flush(),w\u0026\u0026w.update()}}function r(){!tt\u0026\u00260\u003cJ.length\u0026\u0026(tt\u003dH.next(e))}function n(){tt\u0026\u0026(H.cancel(e),tt\u003dnull)}function a(t){t.preventDefault(),n(),K.forEach((function(t){t()}))}function o(t){g.getError(),y.restore(),R.restore(),O.restore(),F.restore(),B.restore(),V.restore(),z.restore(),w\u0026\u0026w.restore(),Y.procs.refresh(),r(),Q.forEach((function(t){t()}))}function s(t){function e(t){var e\u003d{},r\u003d{};return Object.keys(t).forEach((function(n){var i\u003dt[n];q.isDynamic(i)?r[n]\u003dq.unbox(i,n):e[n]\u003di})),{dynamic:r,static:e}}var r\u003de(t.context||{}),n\u003de(t.uniforms||{}),i\u003de(t.attributes||{}),a\u003de(function(t){function e(t){if(t in r){var e\u003dr[t];delete r[t],Object.keys(e).forEach((function(n){r[t+\".\"+n]\u003de[n]}))}}var r\u003dU({},t);return delete r.uniforms,delete r.attributes,delete r.context,delete r.vao,\"stencil\"in r\u0026\u0026r.stencil.op\u0026\u0026(r.stencil.opBack\u003dr.stencil.opFront\u003dr.stencil.op,delete r.stencil.op),e(\"blend\"),e(\"depth\"),e(\"cull\"),e(\"stencil\"),e(\"polygonOffset\"),e(\"scissor\"),e(\"sample\"),\"vao\"in t\u0026\u0026(r.vao\u003dt.vao),r}(t));t\u003d{gpuTime:0,cpuTime:0,count:0};var o\u003d(r\u003dY.compile(a,i,n,r,t)).draw,s\u003dr.batch,l\u003dr.scope,c\u003d[];return U((function(t,e){var r;if(\"function\"\u003d\u003dtypeof t)return l.call(this,null,t,0);if(\"function\"\u003d\u003dtypeof e)if(\"number\"\u003d\u003dtypeof t)for(r\u003d0;r\u003ct;++r)l.call(this,null,e,r);else{if(!Array.isArray(t))return l.call(this,t,e,0);for(r\u003d0;r\u003ct.length;++r)l.call(this,t[r],e,r)}else if(\"number\"\u003d\u003dtypeof t){if(0\u003ct)return s.call(this,function(t){for(;c.length\u003ct;)c.push(null);return c}(0|t),0|t)}else{if(!Array.isArray(t))return o.call(this,t);if(t.length)return s.call(this,t,t.length)}}),{stats:t})}function l(t,e){var r\u003d0;Y.procs.poll();var n\u003de.color;n\u0026\u0026(g.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|\u003d16384),\"depth\"in e\u0026\u0026(g.clearDepth(+e.depth),r|\u003d256),\"stencil\"in e\u0026\u0026(g.clearStencil(0|e.stencil),r|\u003d1024),g.clear(r)}function c(t){return J.push(t),r(),{cancel:function(){var e\u003dj(J,t);J[e]\u003dfunction t(){var e\u003dj(J,t);J[e]\u003dJ[J.length-1],--J.length,0\u003e\u003dJ.length\u0026\u0026n()}}}}function u(){var t\u003dX.viewport,e\u003dX.scissor_box;t[0]\u003dt[1]\u003de[0]\u003de[1]\u003d0,P.viewportWidth\u003dP.framebufferWidth\u003dP.drawingBufferWidth\u003dt[2]\u003de[2]\u003dg.drawingBufferWidth,P.viewportHeight\u003dP.framebufferHeight\u003dP.drawingBufferHeight\u003dt[3]\u003de[3]\u003dg.drawingBufferHeight}function f(){P.tick+\u003d1,P.time\u003dm(),u(),Y.procs.poll()}function h(){u(),Y.procs.refresh(),w\u0026\u0026w.update()}function m(){return(G()-T)/1e3}if(!(t\u003di(t)))return null;var g\u003dt.gl,v\u003dg.getContextAttributes();g.isContextLost();var y\u003dfunction(t,e){function r(e){var r;e\u003de.toLowerCase();try{r\u003dn[e]\u003dt.getExtension(e)}catch(t){}return!!r}for(var n\u003d{},i\u003d0;i\u003ce.extensions.length;++i){var a\u003de.extensions[i];if(!r(a))return e.onDestroy(),e.onDone(\u0027\"\u0027+a+\u0027\" extension is not supported by the current WebGL context, try upgrading your system or a different browser\u0027),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach((function(t){if(n[t]\u0026\u0026!r(t))throw Error(\"(regl): error restoring extension \"+t)}))}}}(g,t);if(!y)return null;var x\u003dfunction(){var t\u003d{\"\":0},e\u003d[\"\"];return{id:function(r){var n\u003dt[r];return n||(n\u003dt[r]\u003de.length,e.push(r),n)},str:function(t){return e[t]}}}(),b\u003d{vaoCount:0,bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0},_\u003dy.extensions,w\u003dfunction(t,e){function r(){this.endQueryIndex\u003dthis.startQueryIndex\u003d-1,this.sum\u003d0,this.stats\u003dnull}function n(t,e,n){var i\u003do.pop()||new r;i.startQueryIndex\u003dt,i.endQueryIndex\u003de,i.sum\u003d0,i.stats\u003dn,s.push(i)}if(!e.ext_disjoint_timer_query)return null;var i\u003d[],a\u003d[],o\u003d[],s\u003d[],l\u003d[],c\u003d[];return{beginQuery:function(t){var r\u003di.pop()||e.ext_disjoint_timer_query.createQueryEXT();e.ext_disjoint_timer_query.beginQueryEXT(35007,r),a.push(r),n(a.length-1,a.length,t)},endQuery:function(){e.ext_disjoint_timer_query.endQueryEXT(35007)},pushScopeStats:n,update:function(){var t,r;if(0!\u003d\u003d(t\u003da.length)){c.length\u003dMath.max(c.length,t+1),l.length\u003dMath.max(l.length,t+1),l[0]\u003d0;var n\u003dc[0]\u003d0;for(r\u003dt\u003d0;r\u003ca.length;++r){var u\u003da[r];e.ext_disjoint_timer_query.getQueryObjectEXT(u,34919)?(n+\u003de.ext_disjoint_timer_query.getQueryObjectEXT(u,34918),i.push(u)):a[t++]\u003du,l[r+1]\u003dn,c[r+1]\u003dt}for(a.length\u003dt,r\u003dt\u003d0;r\u003cs.length;++r){var f\u003d(n\u003ds[r]).startQueryIndex;u\u003dn.endQueryIndex;n.sum+\u003dl[u]-l[f],f\u003dc[f],(u\u003dc[u])\u003d\u003d\u003df?(n.stats.gpuTime+\u003dn.sum/1e6,o.push(n)):(n.startQueryIndex\u003df,n.endQueryIndex\u003du,s[t++]\u003dn)}s.length\u003dt}},getNumPendingQueries:function(){return a.length},clear:function(){i.push.apply(i,a);for(var t\u003d0;t\u003ci.length;t++)e.ext_disjoint_timer_query.deleteQueryEXT(i[t]);a.length\u003d0,i.length\u003d0},restore:function(){a.length\u003d0,i.length\u003d0}}}(0,_),T\u003dG(),A\u003dg.drawingBufferWidth,C\u003dg.drawingBufferHeight,P\u003d{tick:0,time:0,viewportWidth:A,viewportHeight:C,framebufferWidth:A,framebufferHeight:C,drawingBufferWidth:A,drawingBufferHeight:C,pixelRatio:t.pixelRatio},I\u003dW(g,_),O\u003dp(g,b,t,(function(t){return z.destroyBuffer(t)})),z\u003dS(g,_,I,b,O),D\u003dd(g,_,O,b),R\u003dE(g,x,b,t),F\u003dk(g,_,I,(function(){Y.procs.poll()}),P,b,t),B\u003dxt(g,_,0,b,t),V\u003dM(g,_,I,F,B,b),Y\u003dN(g,x,_,I,O,D,0,V,{},z,R,{elements:null,primitive:4,count:-1,offset:0,instances:-1},P,w,t),X\u003d(x\u003dL(g,V,Y.procs.poll,P),Y.next),Z\u003dg.canvas,J\u003d[],K\u003d[],Q\u003d[],$\u003d[t.onDestroy],tt\u003dnull;Z\u0026\u0026(Z.addEventListener(\"webglcontextlost\",a,!1),Z.addEventListener(\"webglcontextrestored\",o,!1));var et\u003dV.setFBO\u003ds({framebuffer:q.define.call(null,1,\"framebuffer\")});return h(),v\u003dU(s,{clear:function(t){if(\"framebuffer\"in t)if(t.framebuffer\u0026\u0026\"framebufferCube\"\u003d\u003d\u003dt.framebuffer_reglType)for(var e\u003d0;6\u003ee;++e)et(U({framebuffer:t.framebuffer.faces[e]},t),l);else et(t,l);else l(0,t)},prop:q.define.bind(null,1),context:q.define.bind(null,2),this:q.define.bind(null,3),draw:s({}),buffer:function(t){return O.create(t,34962,!1,!1)},elements:function(t){return D.create(t,!1)},texture:F.create2D,cube:F.createCube,renderbuffer:B.create,framebuffer:V.create,framebufferCube:V.createCube,vao:z.createVAO,attributes:v,frame:c,on:function(t,e){var r;switch(t){case\"frame\":return c(e);case\"lost\":r\u003dK;break;case\"restore\":r\u003dQ;break;case\"destroy\":r\u003d$}return r.push(e),{cancel:function(){for(var t\u003d0;t\u003cr.length;++t)if(r[t]\u003d\u003d\u003de){r[t]\u003dr[r.length-1],r.pop();break}}}},limits:I,hasExtension:function(t){return 0\u003c\u003dI.extensions.indexOf(t.toLowerCase())},read:x,destroy:function(){J.length\u003d0,n(),Z\u0026\u0026(Z.removeEventListener(\"webglcontextlost\",a),Z.removeEventListener(\"webglcontextrestored\",o)),R.clear(),V.clear(),B.clear(),F.clear(),D.clear(),O.clear(),z.clear(),w\u0026\u0026w.clear(),$.forEach((function(t){t()}))},_gl:g,_refresh:h,poll:function(){f(),w\u0026\u0026w.update()},now:m,stats:b}),t.onDone(null,v),v}}))},{}],537:[function(t,e,r){\n/*!\n * repeat-string \u003chttps://github.com/jonschlinkert/repeat-string\u003e\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\"use strict\";var n,i\u003d\"\";e.exports\u003dfunction(t,e){if(\"string\"!\u003dtypeof t)throw new TypeError(\"expected a string\");if(1\u003d\u003d\u003de)return t;if(2\u003d\u003d\u003de)return t+t;var r\u003dt.length*e;if(n!\u003d\u003dt||void 0\u003d\u003d\u003dn)n\u003dt,i\u003d\"\";else if(i.length\u003e\u003dr)return i.substr(0,r);for(;r\u003ei.length\u0026\u0026e\u003e1;)1\u0026e\u0026\u0026(i+\u003dt),e\u003e\u003e\u003d1,t+\u003dt;return i\u003d(i+\u003dt).substr(0,r)}},{}],538:[function(t,e,r){(function(t){(function(){e.exports\u003dt.performance\u0026\u0026t.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{}],539:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003dt.length,r\u003dt[t.length-1],n\u003de,i\u003de-2;i\u003e\u003d0;--i){var a\u003dr,o\u003dt[i];(l\u003do-((r\u003da+o)-a))\u0026\u0026(t[--n]\u003dr,r\u003dl)}var s\u003d0;for(i\u003dn;i\u003ce;++i){var l;a\u003dt[i];(l\u003d(o\u003dr)-((r\u003da+o)-a))\u0026\u0026(t[s++]\u003dl)}return t[s++]\u003dr,t.length\u003ds,t}},{}],540:[function(t,e,r){\"use strict\";var n\u003dt(\"two-product\"),i\u003dt(\"robust-sum\"),a\u003dt(\"robust-scale\"),o\u003dt(\"robust-compress\");function s(t,e){for(var r\u003dnew Array(t.length-1),n\u003d1;n\u003ct.length;++n)for(var i\u003dr[n-1]\u003dnew Array(t.length-1),a\u003d0,o\u003d0;a\u003ct.length;++a)a!\u003d\u003de\u0026\u0026(i[o++]\u003dt[n][a]);return r}function l(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;++r){e[r]\u003dnew Array(t);for(var n\u003d0;n\u003ct;++n)e[r][n]\u003d[\"m[\",r,\"][\",n,\"]\"].join(\"\")}return e}function c(t){if(2\u003d\u003d\u003dt.length)return[\"sum(prod(\",t[0][0],\",\",t[1][1],\"),prod(-\",t[0][1],\",\",t[1][0],\"))\"].join(\"\");for(var e\u003d[],r\u003d0;r\u003ct.length;++r)e.push([\"scale(\",c(s(t,r)),\",\",(n\u003dr,1\u0026n?\"-\":\"\"),t[0][r],\")\"].join(\"\"));return function t(e){if(1\u003d\u003d\u003de.length)return e[0];if(2\u003d\u003d\u003de.length)return[\"sum(\",e[0],\",\",e[1],\")\"].join(\"\");var r\u003de.length\u003e\u003e1;return[\"sum(\",t(e.slice(0,r)),\",\",t(e.slice(r)),\")\"].join(\"\")}(e);var n}function u(t){return new Function(\"sum\",\"scale\",\"prod\",\"compress\",[\"function robustDeterminant\",t,\"(m){return compress(\",c(l(t)),\")};return robustDeterminant\",t].join(\"\"))(i,a,n,o)}var f\u003d[function(){return[0]},function(t){return[t[0][0]]}];!function(){for(;f.length\u003c6;)f.push(u(f.length));for(var t\u003d[],r\u003d[\"function robustDeterminant(m){switch(m.length){\"],n\u003d0;n\u003c6;++n)t.push(\"det\"+n),r.push(\"case \",n,\":return det\",n,\"(m);\");r.push(\"}var det\u003dCACHE[m.length];if(!det)det\u003dCACHE[m.length]\u003dgen(m.length);return det(m);}return robustDeterminant\"),t.push(\"CACHE\",\"gen\",r.join(\"\"));var i\u003dFunction.apply(void 0,t);for(e.exports\u003di.apply(void 0,f.concat([f,u])),n\u003d0;n\u003cf.length;++n)e.exports[n]\u003df[n]}()},{\"robust-compress\":539,\"robust-scale\":546,\"robust-sum\":549,\"two-product\":600}],541:[function(t,e,r){\"use strict\";var n\u003dt(\"two-product\"),i\u003dt(\"robust-sum\");e.exports\u003dfunction(t,e){for(var r\u003dn(t[0],e[0]),a\u003d1;a\u003ct.length;++a)r\u003di(r,n(t[a],e[a]));return r}},{\"robust-sum\":549,\"two-product\":600}],542:[function(t,e,r){\"use strict\";var n\u003dt(\"two-product\"),i\u003dt(\"robust-sum\"),a\u003dt(\"robust-subtract\"),o\u003dt(\"robust-scale\");function s(t,e){for(var r\u003dnew Array(t.length-1),n\u003d1;n\u003ct.length;++n)for(var i\u003dr[n-1]\u003dnew Array(t.length-1),a\u003d0,o\u003d0;a\u003ct.length;++a)a!\u003d\u003de\u0026\u0026(i[o++]\u003dt[n][a]);return r}function l(t){if(1\u003d\u003d\u003dt.length)return t[0];if(2\u003d\u003d\u003dt.length)return[\"sum(\",t[0],\",\",t[1],\")\"].join(\"\");var e\u003dt.length\u003e\u003e1;return[\"sum(\",l(t.slice(0,e)),\",\",l(t.slice(e)),\")\"].join(\"\")}function c(t,e){if(\"m\"\u003d\u003d\u003dt.charAt(0)){if(\"w\"\u003d\u003d\u003de.charAt(0)){var r\u003dt.split(\"[\");return[\"w\",e.substr(1),\"m\",r[0].substr(1)].join(\"\")}return[\"prod(\",t,\",\",e,\")\"].join(\"\")}return c(e,t)}function u(t){if(2\u003d\u003d\u003dt.length)return[[\"diff(\",c(t[0][0],t[1][1]),\",\",c(t[1][0],t[0][1]),\")\"].join(\"\")];for(var e\u003d[],r\u003d0;r\u003ct.length;++r)e.push([\"scale(\",l(u(s(t,r))),\",\",(n\u003dr,!0\u0026n?\"-\":\"\"),t[0][r],\")\"].join(\"\"));return e;var n}function f(t,e){for(var r\u003d[],n\u003d0;n\u003ce-2;++n)r.push([\"prod(m\",t,\"[\",n,\"],m\",t,\"[\",n,\"])\"].join(\"\"));return l(r)}function h(t){for(var e\u003d[],r\u003d[],c\u003dfunction(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;++r){e[r]\u003dnew Array(t);for(var n\u003d0;n\u003ct;++n)e[r][n]\u003d[\"m\",n,\"[\",t-r-2,\"]\"].join(\"\")}return e}(t),h\u003d0;h\u003ct;++h)c[0][h]\u003d\"1\",c[t-1][h]\u003d\"w\"+h;for(h\u003d0;h\u003ct;++h)0\u003d\u003d(1\u0026h)?e.push.apply(e,u(s(c,h))):r.push.apply(r,u(s(c,h)));var p\u003dl(e),d\u003dl(r),m\u003d\"exactInSphere\"+t,g\u003d[];for(h\u003d0;h\u003ct;++h)g.push(\"m\"+h);var v\u003d[\"function \",m,\"(\",g.join(),\"){\"];for(h\u003d0;h\u003ct;++h){v.push(\"var w\",h,\"\u003d\",f(h,t),\";\");for(var y\u003d0;y\u003ct;++y)y!\u003d\u003dh\u0026\u0026v.push(\"var w\",h,\"m\",y,\"\u003dscale(w\",h,\",m\",y,\"[0]);\")}return v.push(\"var p\u003d\",p,\",n\u003d\",d,\",d\u003ddiff(p,n);return d[d.length-1];}return \",m),new Function(\"sum\",\"diff\",\"prod\",\"scale\",v.join(\"\"))(i,a,n,o)}var p\u003d[function(){return 0},function(){return 0},function(){return 0}];function d(t){var e\u003dp[t.length];return e||(e\u003dp[t.length]\u003dh(t.length)),e.apply(void 0,t)}!function(){for(;p.length\u003c\u003d6;)p.push(h(p.length));for(var t\u003d[],r\u003d[\"slow\"],n\u003d0;n\u003c\u003d6;++n)t.push(\"a\"+n),r.push(\"o\"+n);var i\u003d[\"function testInSphere(\",t.join(),\"){switch(arguments.length){case 0:case 1:return 0;\"];for(n\u003d2;n\u003c\u003d6;++n)i.push(\"case \",n,\":return o\",n,\"(\",t.slice(0,n).join(),\");\");i.push(\"}var s\u003dnew Array(arguments.length);for(var i\u003d0;i\u003carguments.length;++i){s[i]\u003darguments[i]};return slow(s);}return testInSphere\"),r.push(i.join(\"\"));var a\u003dFunction.apply(void 0,r);for(e.exports\u003da.apply(void 0,[d].concat(p)),n\u003d0;n\u003c\u003d6;++n)e.exports[n]\u003dp[n]}()},{\"robust-scale\":546,\"robust-subtract\":548,\"robust-sum\":549,\"two-product\":600}],543:[function(t,e,r){\"use strict\";var n\u003dt(\"robust-determinant\");function i(t){for(var e\u003d\"robustLinearSolve\"+t+\"d\",r\u003d[\"function \",e,\"(A,b){return [\"],i\u003d0;i\u003ct;++i){r.push(\"det([\");for(var a\u003d0;a\u003ct;++a){a\u003e0\u0026\u0026r.push(\",\"),r.push(\"[\");for(var o\u003d0;o\u003ct;++o)o\u003e0\u0026\u0026r.push(\",\"),o\u003d\u003d\u003di?r.push(\"+b[\",a,\"]\"):r.push(\"+A[\",a,\"][\",o,\"]\");r.push(\"]\")}r.push(\"]),\")}r.push(\"det(A)]}return \",e);var s\u003dnew Function(\"det\",r.join(\"\"));return s(t\u003c6?n[t]:n)}var a\u003d[function(){return[0]},function(t,e){return[[e[0]],[t[0][0]]]}];!function(){for(;a.length\u003c6;)a.push(i(a.length));for(var t\u003d[],r\u003d[\"function dispatchLinearSolve(A,b){switch(A.length){\"],n\u003d0;n\u003c6;++n)t.push(\"s\"+n),r.push(\"case \",n,\":return s\",n,\"(A,b);\");r.push(\"}var s\u003dCACHE[A.length];if(!s)s\u003dCACHE[A.length]\u003dg(A.length);return s(A,b)}return dispatchLinearSolve\"),t.push(\"CACHE\",\"g\",r.join(\"\"));var o\u003dFunction.apply(void 0,t);for(e.exports\u003do.apply(void 0,a.concat([a,i])),n\u003d0;n\u003c6;++n)e.exports[n]\u003da[n]}()},{\"robust-determinant\":540}],544:[function(t,e,r){\"use strict\";var n\u003dt(\"two-product\"),i\u003dt(\"robust-sum\"),a\u003dt(\"robust-scale\"),o\u003dt(\"robust-subtract\");function s(t,e){for(var r\u003dnew Array(t.length-1),n\u003d1;n\u003ct.length;++n)for(var i\u003dr[n-1]\u003dnew Array(t.length-1),a\u003d0,o\u003d0;a\u003ct.length;++a)a!\u003d\u003de\u0026\u0026(i[o++]\u003dt[n][a]);return r}function l(t){if(1\u003d\u003d\u003dt.length)return t[0];if(2\u003d\u003d\u003dt.length)return[\"sum(\",t[0],\",\",t[1],\")\"].join(\"\");var e\u003dt.length\u003e\u003e1;return[\"sum(\",l(t.slice(0,e)),\",\",l(t.slice(e)),\")\"].join(\"\")}function c(t){if(2\u003d\u003d\u003dt.length)return[[\"sum(prod(\",t[0][0],\",\",t[1][1],\"),prod(-\",t[0][1],\",\",t[1][0],\"))\"].join(\"\")];for(var e\u003d[],r\u003d0;r\u003ct.length;++r)e.push([\"scale(\",l(c(s(t,r))),\",\",(n\u003dr,1\u0026n?\"-\":\"\"),t[0][r],\")\"].join(\"\"));return e;var n}function u(t){for(var e\u003d[],r\u003d[],u\u003dfunction(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;++r){e[r]\u003dnew Array(t);for(var n\u003d0;n\u003ct;++n)e[r][n]\u003d[\"m\",n,\"[\",t-r-1,\"]\"].join(\"\")}return e}(t),f\u003d[],h\u003d0;h\u003ct;++h)0\u003d\u003d(1\u0026h)?e.push.apply(e,c(s(u,h))):r.push.apply(r,c(s(u,h))),f.push(\"m\"+h);var p\u003dl(e),d\u003dl(r),m\u003d\"orientation\"+t+\"Exact\",g\u003d[\"function \",m,\"(\",f.join(),\"){var p\u003d\",p,\",n\u003d\",d,\",d\u003dsub(p,n);return d[d.length-1];};return \",m].join(\"\");return new Function(\"sum\",\"prod\",\"scale\",\"sub\",g)(i,n,a,o)}var f\u003du(3),h\u003du(4),p\u003d[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,i\u003d(t[1]-r[1])*(e[0]-r[0]),a\u003d(t[0]-r[0])*(e[1]-r[1]),o\u003di-a;if(i\u003e0){if(a\u003c\u003d0)return o;n\u003di+a}else{if(!(i\u003c0))return o;if(a\u003e\u003d0)return o;n\u003d-(i+a)}var s\u003d33306690738754716e-32*n;return o\u003e\u003ds||o\u003c\u003d-s?o:f(t,e,r)},function(t,e,r,n){var i\u003dt[0]-n[0],a\u003de[0]-n[0],o\u003dr[0]-n[0],s\u003dt[1]-n[1],l\u003de[1]-n[1],c\u003dr[1]-n[1],u\u003dt[2]-n[2],f\u003de[2]-n[2],p\u003dr[2]-n[2],d\u003da*c,m\u003do*l,g\u003do*s,v\u003di*c,y\u003di*l,x\u003da*s,b\u003du*(d-m)+f*(g-v)+p*(y-x),_\u003d7771561172376103e-31*((Math.abs(d)+Math.abs(m))*Math.abs(u)+(Math.abs(g)+Math.abs(v))*Math.abs(f)+(Math.abs(y)+Math.abs(x))*Math.abs(p));return b\u003e_||-b\u003e_?b:h(t,e,r,n)}];function d(t){var e\u003dp[t.length];return e||(e\u003dp[t.length]\u003du(t.length)),e.apply(void 0,t)}!function(){for(;p.length\u003c\u003d5;)p.push(u(p.length));for(var t\u003d[],r\u003d[\"slow\"],n\u003d0;n\u003c\u003d5;++n)t.push(\"a\"+n),r.push(\"o\"+n);var i\u003d[\"function getOrientation(\",t.join(),\"){switch(arguments.length){case 0:case 1:return 0;\"];for(n\u003d2;n\u003c\u003d5;++n)i.push(\"case \",n,\":return o\",n,\"(\",t.slice(0,n).join(),\");\");i.push(\"}var s\u003dnew Array(arguments.length);for(var i\u003d0;i\u003carguments.length;++i){s[i]\u003darguments[i]};return slow(s);}return getOrientation\"),r.push(i.join(\"\"));var a\u003dFunction.apply(void 0,r);for(e.exports\u003da.apply(void 0,[d].concat(p)),n\u003d0;n\u003c\u003d5;++n)e.exports[n]\u003dp[n]}()},{\"robust-scale\":546,\"robust-subtract\":548,\"robust-sum\":549,\"two-product\":600}],545:[function(t,e,r){\"use strict\";var n\u003dt(\"robust-sum\"),i\u003dt(\"robust-scale\");e.exports\u003dfunction(t,e){if(1\u003d\u003d\u003dt.length)return i(e,t[0]);if(1\u003d\u003d\u003de.length)return i(t,e[0]);if(0\u003d\u003d\u003dt.length||0\u003d\u003d\u003de.length)return[0];var r\u003d[0];if(t.length\u003ce.length)for(var a\u003d0;a\u003ct.length;++a)r\u003dn(r,i(e,t[a]));else for(a\u003d0;a\u003ce.length;++a)r\u003dn(r,i(t,e[a]));return r}},{\"robust-scale\":546,\"robust-sum\":549}],546:[function(t,e,r){\"use strict\";var n\u003dt(\"two-product\"),i\u003dt(\"two-sum\");e.exports\u003dfunction(t,e){var r\u003dt.length;if(1\u003d\u003d\u003dr){var a\u003dn(t[0],e);return a[0]?a:[a[1]]}var o\u003dnew Array(2*r),s\u003d[.1,.1],l\u003d[.1,.1],c\u003d0;n(t[0],e,s),s[0]\u0026\u0026(o[c++]\u003ds[0]);for(var u\u003d1;u\u003cr;++u){n(t[u],e,l);var f\u003ds[1];i(f,l[0],s),s[0]\u0026\u0026(o[c++]\u003ds[0]);var h\u003dl[1],p\u003ds[1],d\u003dh+p,m\u003dp-(d-h);s[1]\u003dd,m\u0026\u0026(o[c++]\u003dm)}s[1]\u0026\u0026(o[c++]\u003ds[1]);0\u003d\u003d\u003dc\u0026\u0026(o[c++]\u003d0);return o.length\u003dc,o}},{\"two-product\":600,\"two-sum\":601}],547:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,i){var a\u003dn(t,r,i),o\u003dn(e,r,i);if(a\u003e0\u0026\u0026o\u003e0||a\u003c0\u0026\u0026o\u003c0)return!1;var s\u003dn(r,t,e),l\u003dn(i,t,e);if(s\u003e0\u0026\u0026l\u003e0||s\u003c0\u0026\u0026l\u003c0)return!1;if(0\u003d\u003d\u003da\u0026\u00260\u003d\u003d\u003do\u0026\u00260\u003d\u003d\u003ds\u0026\u00260\u003d\u003d\u003dl)return function(t,e,r,n){for(var i\u003d0;i\u003c2;++i){var a\u003dt[i],o\u003de[i],s\u003dMath.min(a,o),l\u003dMath.max(a,o),c\u003dr[i],u\u003dn[i],f\u003dMath.min(c,u);if(Math.max(c,u)\u003cs||l\u003cf)return!1}return!0}(t,e,r,i);return!0};var n\u003dt(\"robust-orientation\")[3]},{\"robust-orientation\":544}],548:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003d0|t.length,n\u003d0|e.length;if(1\u003d\u003d\u003dr\u0026\u00261\u003d\u003d\u003dn)return function(t,e){var r\u003dt+e,n\u003dr-t,i\u003dt-(r-n)+(e-n);if(i)return[i,r];return[r]}(t[0],-e[0]);var i,a,o\u003dnew Array(r+n),s\u003d0,l\u003d0,c\u003d0,u\u003dMath.abs,f\u003dt[l],h\u003du(f),p\u003d-e[c],d\u003du(p);h\u003cd?(a\u003df,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l],h\u003du(f))):(a\u003dp,(c+\u003d1)\u003cn\u0026\u0026(p\u003d-e[c],d\u003du(p)));l\u003cr\u0026\u0026h\u003cd||c\u003e\u003dn?(i\u003df,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l],h\u003du(f))):(i\u003dp,(c+\u003d1)\u003cn\u0026\u0026(p\u003d-e[c],d\u003du(p)));var m,g,v\u003di+a,y\u003dv-i,x\u003da-y,b\u003dx,_\u003dv;for(;l\u003cr\u0026\u0026c\u003cn;)h\u003cd?(i\u003df,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l],h\u003du(f))):(i\u003dp,(c+\u003d1)\u003cn\u0026\u0026(p\u003d-e[c],d\u003du(p))),(x\u003d(a\u003db)-(y\u003d(v\u003di+a)-i))\u0026\u0026(o[s++]\u003dx),b\u003d_-((m\u003d_+v)-(g\u003dm-_))+(v-g),_\u003dm;for(;l\u003cr;)(x\u003d(a\u003db)-(y\u003d(v\u003d(i\u003df)+a)-i))\u0026\u0026(o[s++]\u003dx),b\u003d_-((m\u003d_+v)-(g\u003dm-_))+(v-g),_\u003dm,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l]);for(;c\u003cn;)(x\u003d(a\u003db)-(y\u003d(v\u003d(i\u003dp)+a)-i))\u0026\u0026(o[s++]\u003dx),b\u003d_-((m\u003d_+v)-(g\u003dm-_))+(v-g),_\u003dm,(c+\u003d1)\u003cn\u0026\u0026(p\u003d-e[c]);b\u0026\u0026(o[s++]\u003db);_\u0026\u0026(o[s++]\u003d_);s||(o[s++]\u003d0);return o.length\u003ds,o}},{}],549:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003d0|t.length,n\u003d0|e.length;if(1\u003d\u003d\u003dr\u0026\u00261\u003d\u003d\u003dn)return function(t,e){var r\u003dt+e,n\u003dr-t,i\u003dt-(r-n)+(e-n);if(i)return[i,r];return[r]}(t[0],e[0]);var i,a,o\u003dnew Array(r+n),s\u003d0,l\u003d0,c\u003d0,u\u003dMath.abs,f\u003dt[l],h\u003du(f),p\u003de[c],d\u003du(p);h\u003cd?(a\u003df,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l],h\u003du(f))):(a\u003dp,(c+\u003d1)\u003cn\u0026\u0026(p\u003de[c],d\u003du(p)));l\u003cr\u0026\u0026h\u003cd||c\u003e\u003dn?(i\u003df,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l],h\u003du(f))):(i\u003dp,(c+\u003d1)\u003cn\u0026\u0026(p\u003de[c],d\u003du(p)));var m,g,v\u003di+a,y\u003dv-i,x\u003da-y,b\u003dx,_\u003dv;for(;l\u003cr\u0026\u0026c\u003cn;)h\u003cd?(i\u003df,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l],h\u003du(f))):(i\u003dp,(c+\u003d1)\u003cn\u0026\u0026(p\u003de[c],d\u003du(p))),(x\u003d(a\u003db)-(y\u003d(v\u003di+a)-i))\u0026\u0026(o[s++]\u003dx),b\u003d_-((m\u003d_+v)-(g\u003dm-_))+(v-g),_\u003dm;for(;l\u003cr;)(x\u003d(a\u003db)-(y\u003d(v\u003d(i\u003df)+a)-i))\u0026\u0026(o[s++]\u003dx),b\u003d_-((m\u003d_+v)-(g\u003dm-_))+(v-g),_\u003dm,(l+\u003d1)\u003cr\u0026\u0026(f\u003dt[l]);for(;c\u003cn;)(x\u003d(a\u003db)-(y\u003d(v\u003d(i\u003dp)+a)-i))\u0026\u0026(o[s++]\u003dx),b\u003d_-((m\u003d_+v)-(g\u003dm-_))+(v-g),_\u003dm,(c+\u003d1)\u003cn\u0026\u0026(p\u003de[c]);b\u0026\u0026(o[s++]\u003db);_\u0026\u0026(o[s++]\u003d_);s||(o[s++]\u003d0);return o.length\u003ds,o}},{}],550:[function(t,e,r){var n\u003dt(\"buffer\"),i\u003dn.Buffer;function a(t,e){for(var r in t)e[r]\u003dt[r]}function o(t,e,r){return i(t,e,r)}i.from\u0026\u0026i.alloc\u0026\u0026i.allocUnsafe\u0026\u0026i.allocUnsafeSlow?e.exports\u003dn:(a(n,r),r.Buffer\u003do),o.prototype\u003dObject.create(i.prototype),a(i,o),o.from\u003dfunction(t,e,r){if(\"number\"\u003d\u003dtypeof t)throw new TypeError(\"Argument must not be a number\");return i(t,e,r)},o.alloc\u003dfunction(t,e,r){if(\"number\"!\u003dtypeof t)throw new TypeError(\"Argument must be a number\");var n\u003di(t);return void 0!\u003d\u003de?\"string\"\u003d\u003dtypeof r?n.fill(e,r):n.fill(e):n.fill(0),n},o.allocUnsafe\u003dfunction(t){if(\"number\"!\u003dtypeof t)throw new TypeError(\"Argument must be a number\");return i(t)},o.allocUnsafeSlow\u003dfunction(t){if(\"number\"!\u003dtypeof t)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(t)}},{buffer:117}],551:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return t\u003c0?-1:t\u003e0?1:0}},{}],552:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return i(n(t))};var n\u003dt(\"boundary-cells\"),i\u003dt(\"reduce-simplicial-complex\")},{\"boundary-cells\":107,\"reduce-simplicial-complex\":531}],553:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,s){r\u003dr||0,void 0\u003d\u003d\u003ds\u0026\u0026(s\u003dfunction(t){for(var e\u003dt.length,r\u003d0,n\u003d0;n\u003ce;++n)r\u003d0|Math.max(r,t[n].length);return r-1}(t));if(0\u003d\u003d\u003dt.length||s\u003c1)return{cells:[],vertexIds:[],vertexWeights:[]};var l\u003dfunction(t,e){for(var r\u003dt.length,n\u003di.mallocUint8(r),a\u003d0;a\u003cr;++a)n[a]\u003dt[a]\u003ce|0;return n}(e,+r),c\u003dfunction(t,e){for(var r\u003dt.length,o\u003de*(e+1)/2*r|0,s\u003di.mallocUint32(2*o),l\u003d0,c\u003d0;c\u003cr;++c)for(var u\u003dt[c],f\u003d(e\u003du.length,0);f\u003ce;++f)for(var h\u003d0;h\u003cf;++h){var p\u003du[h],d\u003du[f];s[l++]\u003d0|Math.min(p,d),s[l++]\u003d0|Math.max(p,d)}a(n(s,[l/2|0,2]));var m\u003d2;for(c\u003d2;c\u003cl;c+\u003d2)s[c-2]\u003d\u003d\u003ds[c]\u0026\u0026s[c-1]\u003d\u003d\u003ds[c+1]||(s[m++]\u003ds[c],s[m++]\u003ds[c+1]);return n(s,[m/2|0,2])}(t,s),u\u003dfunction(t,e,r,a){for(var o\u003dt.data,s\u003dt.shape[0],l\u003di.mallocDouble(s),c\u003d0,u\u003d0;u\u003cs;++u){var f\u003do[2*u],h\u003do[2*u+1];if(r[f]!\u003d\u003dr[h]){var p\u003de[f],d\u003de[h];o[2*c]\u003df,o[2*c+1]\u003dh,l[c++]\u003d(d-a)/(d-p)}}return t.shape[0]\u003dc,n(l,[c])}(c,e,l,+r),f\u003dfunction(t,e){var r\u003di.mallocInt32(2*e),n\u003dt.shape[0],a\u003dt.data;r[0]\u003d0;for(var o\u003d0,s\u003d0;s\u003cn;++s){var l\u003da[2*s];if(l!\u003d\u003do){for(r[2*o+1]\u003ds;++o\u003cl;)r[2*o]\u003ds,r[2*o+1]\u003ds;r[2*o]\u003ds}}r[2*o+1]\u003dn;for(;++o\u003ce;)r[2*o]\u003dr[2*o+1]\u003dn;return r}(c,0|e.length),h\u003do(s)(t,c.data,f,l),p\u003dfunction(t){for(var e\u003d0|t.shape[0],r\u003dt.data,n\u003dnew Array(e),i\u003d0;i\u003ce;++i)n[i]\u003d[r[2*i],r[2*i+1]];return n}(c),d\u003d[].slice.call(u.data,0,u.shape[0]);return i.free(l),i.free(c.data),i.free(u.data),i.free(f),{cells:h,vertexIds:p,vertexWeights:d}};var n\u003dt(\"ndarray\"),i\u003dt(\"typedarray-pool\"),a\u003dt(\"ndarray-sort\"),o\u003dt(\"./lib/codegen\")},{\"./lib/codegen\":554,ndarray:479,\"ndarray-sort\":478,\"typedarray-pool\":613}],554:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003da[t];e||(e\u003da[t]\u003dfunction(t){var e\u003d0,r\u003dnew Array(t+1);r[0]\u003d[[]];for(var a\u003d1;a\u003c\u003dt;++a)for(var o\u003dr[a]\u003di(a),s\u003d0;s\u003co.length;++s)e\u003dMath.max(e,o[a].length);var l\u003d[\"function B(C,E,i,j){\",\"var a\u003dMath.min(i,j)|0,b\u003dMath.max(i,j)|0,l\u003dC[2*a],h\u003dC[2*a+1];\",\"while(l\u003ch){\",\"var m\u003d(l+h)\u003e\u003e1,v\u003dE[2*m+1];\",\"if(v\u003d\u003d\u003db){return m}\",\"if(b\u003cv){h\u003dm}else{l\u003dm+1}\",\"}\",\"return l;\",\"};\",\"function getContour\",t,\"d(F,E,C,S){\",\"var n\u003dF.length,R\u003d[];\",\"for(var i\u003d0;i\u003cn;++i){var c\u003dF[i],l\u003dc.length;\"];function c(t){if(!(t.length\u003c\u003d0)){l.push(\"R.push(\");for(var e\u003d0;e\u003ct.length;++e){var r\u003dt[e];e\u003e0\u0026\u0026l.push(\",\"),l.push(\"[\");for(var n\u003d0;n\u003cr.length;++n){var i\u003dr[n];n\u003e0\u0026\u0026l.push(\",\"),l.push(\"B(C,E,c[\",i[0],\"],c[\",i[1],\"])\")}l.push(\"]\")}l.push(\");\")}}for(a\u003dt+1;a\u003e1;--a){a\u003ct+1\u0026\u0026l.push(\"else \"),l.push(\"if(l\u003d\u003d\u003d\",a,\"){\");var u\u003d[];for(s\u003d0;s\u003ca;++s)u.push(\"(S[c[\"+s+\"]]\u003c\u003c\"+s+\")\");l.push(\"var M\u003d\",u.join(\"+\"),\";if(M\u003d\u003d\u003d0||M\u003d\u003d\u003d\",(1\u003c\u003ca)-1,\"){continue}switch(M){\");for(o\u003dr[a-1],s\u003d0;s\u003co.length;++s)l.push(\"case \",s,\":\"),c(o[s]),l.push(\"break;\");l.push(\"}}\")}return l.push(\"}return R;};return getContour\",t,\"d\"),new Function(\"pool\",l.join(\"\"))(n)}(t));return e};var n\u003dt(\"typedarray-pool\"),i\u003dt(\"marching-simplex-table\"),a\u003d{}},{\"marching-simplex-table\":458,\"typedarray-pool\":613}],555:[function(t,e,r){\"use strict\";var n\u003dt(\"bit-twiddle\"),i\u003dt(\"union-find\");function a(t,e){var r\u003dt.length,n\u003dt.length-e.length,i\u003dMath.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return(s\u003dt[0]+t[1]-e[0]-e[1])||i(t[0],t[1])-i(e[0],e[1]);case 3:var a\u003dt[0]+t[1],o\u003de[0]+e[1];if(s\u003da+t[2]-(o+e[2]))return s;var s,l\u003di(t[0],t[1]),c\u003di(e[0],e[1]);return(s\u003di(l,t[2])-i(c,e[2]))||i(l+t[2],a)-i(c+e[2],o);default:var u\u003dt.slice(0);u.sort();var f\u003de.slice(0);f.sort();for(var h\u003d0;h\u003cr;++h)if(n\u003du[h]-f[h])return n;return 0}}function o(t,e){return a(t[0],e[0])}function s(t,e){if(e){for(var r\u003dt.length,n\u003dnew Array(r),i\u003d0;i\u003cr;++i)n[i]\u003d[t[i],e[i]];n.sort(o);for(i\u003d0;i\u003cr;++i)t[i]\u003dn[i][0],e[i]\u003dn[i][1];return t}return t.sort(a),t}function l(t){if(0\u003d\u003d\u003dt.length)return[];for(var e\u003d1,r\u003dt.length,n\u003d1;n\u003cr;++n){var i\u003dt[n];if(a(i,t[n-1])){if(n\u003d\u003d\u003de){e++;continue}t[e++]\u003di}}return t.length\u003de,t}function c(t,e){for(var r\u003d0,n\u003dt.length-1,i\u003d-1;r\u003c\u003dn;){var o\u003dr+n\u003e\u003e1,s\u003da(t[o],e);s\u003c\u003d0?(0\u003d\u003d\u003ds\u0026\u0026(i\u003do),r\u003do+1):s\u003e0\u0026\u0026(n\u003do-1)}return i}function u(t,e){for(var r\u003dnew Array(t.length),i\u003d0,o\u003dr.length;i\u003co;++i)r[i]\u003d[];for(var s\u003d[],l\u003d(i\u003d0,e.length);i\u003cl;++i)for(var u\u003de[i],f\u003du.length,h\u003d1,p\u003d1\u003c\u003cf;h\u003cp;++h){s.length\u003dn.popCount(h);for(var d\u003d0,m\u003d0;m\u003cf;++m)h\u00261\u003c\u003cm\u0026\u0026(s[d++]\u003du[m]);var g\u003dc(t,s);if(!(g\u003c0))for(;r[g++].push(i),!(g\u003e\u003dt.length||0!\u003d\u003da(t[g],s)););}return r}function f(t,e){if(e\u003c0)return[];for(var r\u003d[],i\u003d(1\u003c\u003ce+1)-1,a\u003d0;a\u003ct.length;++a)for(var o\u003dt[a],l\u003di;l\u003c1\u003c\u003co.length;l\u003dn.nextCombination(l)){for(var c\u003dnew Array(e+1),u\u003d0,f\u003d0;f\u003co.length;++f)l\u00261\u003c\u003cf\u0026\u0026(c[u++]\u003do[f]);r.push(c)}return s(r)}r.dimension\u003dfunction(t){for(var e\u003d0,r\u003dMath.max,n\u003d0,i\u003dt.length;n\u003ci;++n)e\u003dr(e,t[n].length);return e-1},r.countVertices\u003dfunction(t){for(var e\u003d-1,r\u003dMath.max,n\u003d0,i\u003dt.length;n\u003ci;++n)for(var a\u003dt[n],o\u003d0,s\u003da.length;o\u003cs;++o)e\u003dr(e,a[o]);return e+1},r.cloneCells\u003dfunction(t){for(var e\u003dnew Array(t.length),r\u003d0,n\u003dt.length;r\u003cn;++r)e[r]\u003dt[r].slice(0);return e},r.compareCells\u003da,r.normalize\u003ds,r.unique\u003dl,r.findCell\u003dc,r.incidence\u003du,r.dual\u003dfunction(t,e){if(!e)return u(l(f(t,0)),t);for(var r\u003dnew Array(e),n\u003d0;n\u003ce;++n)r[n]\u003d[];n\u003d0;for(var i\u003dt.length;n\u003ci;++n)for(var a\u003dt[n],o\u003d0,s\u003da.length;o\u003cs;++o)r[a[o]].push(n);return r},r.explode\u003dfunction(t){for(var e\u003d[],r\u003d0,n\u003dt.length;r\u003cn;++r)for(var i\u003dt[r],a\u003d0|i.length,o\u003d1,l\u003d1\u003c\u003ca;o\u003cl;++o){for(var c\u003d[],u\u003d0;u\u003ca;++u)o\u003e\u003e\u003eu\u00261\u0026\u0026c.push(i[u]);e.push(c)}return s(e)},r.skeleton\u003df,r.boundary\u003dfunction(t){for(var e\u003d[],r\u003d0,n\u003dt.length;r\u003cn;++r)for(var i\u003dt[r],a\u003d0,o\u003di.length;a\u003co;++a){for(var l\u003dnew Array(i.length-1),c\u003d0,u\u003d0;c\u003co;++c)c!\u003d\u003da\u0026\u0026(l[u++]\u003di[c]);e.push(l)}return s(e)},r.connectedComponents\u003dfunction(t,e){return e?function(t,e){for(var r\u003dnew i(e),n\u003d0;n\u003ct.length;++n)for(var a\u003dt[n],o\u003d0;o\u003ca.length;++o)for(var s\u003do+1;s\u003ca.length;++s)r.link(a[o],a[s]);var l\u003d[],c\u003dr.ranks;for(n\u003d0;n\u003cc.length;++n)c[n]\u003d-1;for(n\u003d0;n\u003ct.length;++n){var u\u003dr.find(t[n][0]);c[u]\u003c0?(c[u]\u003dl.length,l.push([t[n].slice(0)])):l[c[u]].push(t[n].slice(0))}return l}(t,e):function(t){for(var e\u003dl(s(f(t,0))),r\u003dnew i(e.length),n\u003d0;n\u003ct.length;++n)for(var a\u003dt[n],o\u003d0;o\u003ca.length;++o)for(var u\u003dc(e,[a[o]]),h\u003do+1;h\u003ca.length;++h)r.link(u,c(e,[a[h]]));var p\u003d[],d\u003dr.ranks;for(n\u003d0;n\u003cd.length;++n)d[n]\u003d-1;for(n\u003d0;n\u003ct.length;++n){var m\u003dr.find(c(e,[t[n][0]]));d[m]\u003c0?(d[m]\u003dp.length,p.push([t[n].slice(0)])):p[d[m]].push(t[n].slice(0))}return p}(t)}},{\"bit-twiddle\":104,\"union-find\":614}],556:[function(t,e,r){arguments[4][104][0].apply(r,arguments)},{dup:104}],557:[function(t,e,r){arguments[4][555][0].apply(r,arguments)},{\"bit-twiddle\":556,dup:555,\"union-find\":558}],558:[function(t,e,r){\"use strict\";function n(t){this.roots\u003dnew Array(t),this.ranks\u003dnew Array(t);for(var e\u003d0;e\u003ct;++e)this.roots[e]\u003de,this.ranks[e]\u003d0}e.exports\u003dn,n.prototype.length\u003dfunction(){return this.roots.length},n.prototype.makeSet\u003dfunction(){var t\u003dthis.roots.length;return this.roots.push(t),this.ranks.push(0),t},n.prototype.find\u003dfunction(t){for(var e\u003dthis.roots;e[t]!\u003d\u003dt;){var r\u003de[t];e[t]\u003de[r],t\u003dr}return t},n.prototype.link\u003dfunction(t,e){var r\u003dthis.find(t),n\u003dthis.find(e);if(r!\u003d\u003dn){var i\u003dthis.ranks,a\u003dthis.roots,o\u003di[r],s\u003di[n];o\u003cs?a[r]\u003dn:s\u003co?a[n]\u003dr:(a[n]\u003dr,++i[r])}}},{}],559:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){for(var a\u003de.length,o\u003dt.length,s\u003dnew Array(a),l\u003dnew Array(a),c\u003dnew Array(a),u\u003dnew Array(a),f\u003d0;f\u003ca;++f)s[f]\u003dl[f]\u003d-1,c[f]\u003d1/0,u[f]\u003d!1;for(f\u003d0;f\u003co;++f){var h\u003dt[f];if(2!\u003d\u003dh.length)throw new Error(\"Input must be a graph\");var p\u003dh[1],d\u003dh[0];-1!\u003d\u003dl[d]?l[d]\u003d-2:l[d]\u003dp,-1!\u003d\u003ds[p]?s[p]\u003d-2:s[p]\u003dd}function m(t){if(u[t])return 1/0;var r,i,a,o,c,f\u003ds[t],h\u003dl[t];return f\u003c0||h\u003c0?1/0:(r\u003de[t],i\u003de[f],a\u003de[h],o\u003dMath.abs(n(r,i,a)),c\u003dMath.sqrt(Math.pow(i[0]-a[0],2)+Math.pow(i[1]-a[1],2)),o/c)}function g(t,e){var r\u003dk[t],n\u003dk[e];k[t]\u003dn,k[e]\u003dr,M[r]\u003de,M[n]\u003dt}function v(t){return c[k[t]]}function y(t){return 1\u0026t?t-1\u003e\u003e1:(t\u003e\u003e1)-1}function x(t){for(var e\u003dv(t);;){var r\u003de,n\u003d2*t+1,i\u003d2*(t+1),a\u003dt;if(n\u003cA){var o\u003dv(n);o\u003cr\u0026\u0026(a\u003dn,r\u003do)}if(i\u003cA)v(i)\u003cr\u0026\u0026(a\u003di);if(a\u003d\u003d\u003dt)return t;g(t,a),t\u003da}}function b(t){for(var e\u003dv(t);t\u003e0;){var r\u003dy(t);if(r\u003e\u003d0)if(e\u003cv(r)){g(t,r),t\u003dr;continue}return t}}function _(){if(A\u003e0){var t\u003dk[0];return g(0,A-1),A-\u003d1,x(0),t}return-1}function w(t,e){var r\u003dk[t];return c[r]\u003d\u003d\u003de?t:(c[r]\u003d-1/0,b(t),_(),c[r]\u003de,b((A+\u003d1)-1))}function T(t){if(!u[t]){u[t]\u003d!0;var e\u003ds[t],r\u003dl[t];s[r]\u003e\u003d0\u0026\u0026(s[r]\u003de),l[e]\u003e\u003d0\u0026\u0026(l[e]\u003dr),M[e]\u003e\u003d0\u0026\u0026w(M[e],m(e)),M[r]\u003e\u003d0\u0026\u0026w(M[r],m(r))}}var k\u003d[],M\u003dnew Array(a);for(f\u003d0;f\u003ca;++f){(c[f]\u003dm(f))\u003c1/0?(M[f]\u003dk.length,k.push(f)):M[f]\u003d-1}var A\u003dk.length;for(f\u003dA\u003e\u003e1;f\u003e\u003d0;--f)x(f);for(;;){var S\u003d_();if(S\u003c0||c[S]\u003er)break;T(S)}var E\u003d[];for(f\u003d0;f\u003ca;++f)u[f]||(M[f]\u003dE.length,E.push(e[f].slice()));E.length;function L(t,e){if(t[e]\u003c0)return e;var r\u003de,n\u003de;do{var i\u003dt[n];if(!u[n]||i\u003c0||i\u003d\u003d\u003dn)break;if(i\u003dt[n\u003di],!u[n]||i\u003c0||i\u003d\u003d\u003dn)break;n\u003di,r\u003dt[r]}while(r!\u003d\u003dn);for(var a\u003de;a!\u003d\u003dn;a\u003dt[a])t[a]\u003dn;return n}var C\u003d[];return t.forEach((function(t){var e\u003dL(s,t[0]),r\u003dL(l,t[1]);if(e\u003e\u003d0\u0026\u0026r\u003e\u003d0\u0026\u0026e!\u003d\u003dr){var n\u003dM[e],i\u003dM[r];n!\u003d\u003di\u0026\u0026C.push([n,i])}})),i.unique(i.normalize(C)),{positions:E,edges:C}};var n\u003dt(\"robust-orientation\"),i\u003dt(\"simplicial-complex\")},{\"robust-orientation\":544,\"simplicial-complex\":557}],560:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r,a,o,s;if(e[0][0]\u003ce[1][0])r\u003de[0],a\u003de[1];else{if(!(e[0][0]\u003ee[1][0]))return i(e,t);r\u003de[1],a\u003de[0]}if(t[0][0]\u003ct[1][0])o\u003dt[0],s\u003dt[1];else{if(!(t[0][0]\u003et[1][0]))return-i(t,e);o\u003dt[1],s\u003dt[0]}var l\u003dn(r,a,s),c\u003dn(r,a,o);if(l\u003c0){if(c\u003c\u003d0)return l}else if(l\u003e0){if(c\u003e\u003d0)return l}else if(c)return c;if(l\u003dn(s,o,a),c\u003dn(s,o,r),l\u003c0){if(c\u003c\u003d0)return l}else if(l\u003e0){if(c\u003e\u003d0)return l}else if(c)return c;return a[0]-s[0]};var n\u003dt(\"robust-orientation\");function i(t,e){var r,i,a,o;if(e[0][0]\u003ce[1][0])r\u003de[0],i\u003de[1];else{if(!(e[0][0]\u003ee[1][0])){var s\u003dMath.min(t[0][1],t[1][1]),l\u003dMath.max(t[0][1],t[1][1]),c\u003dMath.min(e[0][1],e[1][1]),u\u003dMath.max(e[0][1],e[1][1]);return l\u003cc?l-c:s\u003eu?s-u:l-u}r\u003de[1],i\u003de[0]}t[0][1]\u003ct[1][1]?(a\u003dt[0],o\u003dt[1]):(a\u003dt[1],o\u003dt[0]);var f\u003dn(i,r,a);return f||((f\u003dn(i,r,o))||o-i)}},{\"robust-orientation\":544}],561:[function(t,e,r){arguments[4][247][0].apply(r,arguments)},{dup:247}],562:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003dt.length,r\u003d2*e,n\u003dnew Array(r),a\u003d0;a\u003ce;++a){var l\u003dt[a],c\u003dl[0][0]\u003cl[1][0];n[2*a]\u003dnew f(l[0][0],l,c,a),n[2*a+1]\u003dnew f(l[1][0],l,!c,a)}n.sort((function(t,e){var r\u003dt.x-e.x;return r||((r\u003dt.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1]))}));var h\u003di(o),p\u003d[],d\u003d[],m\u003d[];for(a\u003d0;a\u003cr;){for(var g\u003dn[a].x,v\u003d[];a\u003cr;){var y\u003dn[a];if(y.x!\u003d\u003dg)break;a+\u003d1,y.segment[0][0]\u003d\u003d\u003dy.x\u0026\u0026y.segment[1][0]\u003d\u003d\u003dy.x?y.create\u0026\u0026(y.segment[0][1]\u003cy.segment[1][1]?(v.push(new u(y.segment[0][1],y.index,!0,!0)),v.push(new u(y.segment[1][1],y.index,!1,!1))):(v.push(new u(y.segment[1][1],y.index,!0,!1)),v.push(new u(y.segment[0][1],y.index,!1,!0)))):h\u003dy.create?h.insert(y.segment,y.index):h.remove(y.segment)}p.push(h.root),d.push(g),m.push(v)}return new s(p,d,m)};var n\u003dt(\"binary-search-bounds\"),i\u003dt(\"functional-red-black-tree\"),a\u003dt(\"robust-orientation\"),o\u003dt(\"./lib/order-segments\");function s(t,e,r){this.slabs\u003dt,this.coordinates\u003de,this.horizontal\u003dr}function l(t,e){return t.y-e}function c(t,e){for(var r\u003dnull;t;){var n,i,o\u003dt.key;o[0][0]\u003co[1][0]?(n\u003do[0],i\u003do[1]):(n\u003do[1],i\u003do[0]);var s\u003da(n,i,e);if(s\u003c0)t\u003dt.left;else if(s\u003e0)if(e[0]!\u003d\u003do[1][0])r\u003dt,t\u003dt.right;else{if(l\u003dc(t.right,e))return l;t\u003dt.left}else{if(e[0]!\u003d\u003do[1][0])return t;var l;if(l\u003dc(t.right,e))return l;t\u003dt.left}}return r}function u(t,e,r,n){this.y\u003dt,this.index\u003de,this.start\u003dr,this.closed\u003dn}function f(t,e,r,n){this.x\u003dt,this.segment\u003de,this.create\u003dr,this.index\u003dn}s.prototype.castUp\u003dfunction(t){var e\u003dn.le(this.coordinates,t[0]);if(e\u003c0)return-1;this.slabs[e];var r\u003dc(this.slabs[e],t),i\u003d-1;if(r\u0026\u0026(i\u003dr.value),this.coordinates[e]\u003d\u003d\u003dt[0]){var s\u003dnull;if(r\u0026\u0026(s\u003dr.key),e\u003e0){var u\u003dc(this.slabs[e-1],t);u\u0026\u0026(s?o(u.key,s)\u003e0\u0026\u0026(s\u003du.key,i\u003du.value):(i\u003du.value,s\u003du.key))}var f\u003dthis.horizontal[e];if(f.length\u003e0){var h\u003dn.ge(f,t[1],l);if(h\u003cf.length){var p\u003df[h];if(t[1]\u003d\u003d\u003dp.y){if(p.closed)return p.index;for(;h\u003cf.length-1\u0026\u0026f[h+1].y\u003d\u003d\u003dt[1];)if((p\u003df[h+\u003d1]).closed)return p.index;if(p.y\u003d\u003d\u003dt[1]\u0026\u0026!p.start){if((h+\u003d1)\u003e\u003df.length)return i;p\u003df[h]}}if(p.start)if(s){var d\u003da(s[0],s[1],[t[0],p.y]);s[0][0]\u003es[1][0]\u0026\u0026(d\u003d-d),d\u003e0\u0026\u0026(i\u003dp.index)}else i\u003dp.index;else p.y!\u003d\u003dt[1]\u0026\u0026(i\u003dp.index)}}}return i}},{\"./lib/order-segments\":560,\"binary-search-bounds\":561,\"functional-red-black-tree\":251,\"robust-orientation\":544}],563:[function(t,e,r){\"use strict\";var n\u003dt(\"robust-dot-product\"),i\u003dt(\"robust-sum\");function a(t,e){var r\u003di(n(t,e),[e[e.length-1]]);return r[r.length-1]}function o(t,e,r,n){var i\u003d-e/(n-e);i\u003c0?i\u003d0:i\u003e1\u0026\u0026(i\u003d1);for(var a\u003d1-i,o\u003dt.length,s\u003dnew Array(o),l\u003d0;l\u003co;++l)s[l]\u003di*t[l]+a*r[l];return s}e.exports\u003dfunction(t,e){for(var r\u003d[],n\u003d[],i\u003da(t[t.length-1],e),s\u003dt[t.length-1],l\u003dt[0],c\u003d0;c\u003ct.length;++c,s\u003dl){var u\u003da(l\u003dt[c],e);if(i\u003c0\u0026\u0026u\u003e0||i\u003e0\u0026\u0026u\u003c0){var f\u003do(s,u,l,i);r.push(f),n.push(f.slice())}u\u003c0?n.push(l.slice()):u\u003e0?r.push(l.slice()):(r.push(l.slice()),n.push(l.slice())),i\u003du}return{positive:r,negative:n}},e.exports.positive\u003dfunction(t,e){for(var r\u003d[],n\u003da(t[t.length-1],e),i\u003dt[t.length-1],s\u003dt[0],l\u003d0;l\u003ct.length;++l,i\u003ds){var c\u003da(s\u003dt[l],e);(n\u003c0\u0026\u0026c\u003e0||n\u003e0\u0026\u0026c\u003c0)\u0026\u0026r.push(o(i,c,s,n)),c\u003e\u003d0\u0026\u0026r.push(s.slice()),n\u003dc}return r},e.exports.negative\u003dfunction(t,e){for(var r\u003d[],n\u003da(t[t.length-1],e),i\u003dt[t.length-1],s\u003dt[0],l\u003d0;l\u003ct.length;++l,i\u003ds){var c\u003da(s\u003dt[l],e);(n\u003c0\u0026\u0026c\u003e0||n\u003e0\u0026\u0026c\u003c0)\u0026\u0026r.push(o(i,c,s,n)),c\u003c\u003d0\u0026\u0026r.push(s.slice()),n\u003dc}return r}},{\"robust-dot-product\":541,\"robust-sum\":549}],564:[function(t,e,r){!function(){\"use strict\";var t\u003d{not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\\x25]+/,modulo:/^\\x25{2}/,placeholder:/^\\x25(?:([1-9]\\d*)\\$|\\(([^)]+)\\))?(\\+)?(0|\u0027[^$])?(-)?(\\d+)?(?:\\.(\\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\\d]*)/i,key_access:/^\\.([a-z_][a-z_\\d]*)/i,index_access:/^\\[(\\d+)\\]/,sign:/^[+-]/};function e(t){return i(o(t),arguments)}function n(t,r){return e.apply(null,[t].concat(r||[]))}function i(r,n){var i,a,o,s,l,c,u,f,h,p\u003d1,d\u003dr.length,m\u003d\"\";for(a\u003d0;a\u003cd;a++)if(\"string\"\u003d\u003dtypeof r[a])m+\u003dr[a];else if(\"object\"\u003d\u003dtypeof r[a]){if((s\u003dr[a]).keys)for(i\u003dn[p],o\u003d0;o\u003cs.keys.length;o++){if(null\u003d\u003di)throw new Error(e(\u0027[sprintf] Cannot access property \"%s\" of undefined value \"%s\"\u0027,s.keys[o],s.keys[o-1]));i\u003di[s.keys[o]]}else i\u003ds.param_no?n[s.param_no]:n[p++];if(t.not_type.test(s.type)\u0026\u0026t.not_primitive.test(s.type)\u0026\u0026i instanceof Function\u0026\u0026(i\u003di()),t.numeric_arg.test(s.type)\u0026\u0026\"number\"!\u003dtypeof i\u0026\u0026isNaN(i))throw new TypeError(e(\"[sprintf] expecting number but found %T\",i));switch(t.number.test(s.type)\u0026\u0026(f\u003di\u003e\u003d0),s.type){case\"b\":i\u003dparseInt(i,10).toString(2);break;case\"c\":i\u003dString.fromCharCode(parseInt(i,10));break;case\"d\":case\"i\":i\u003dparseInt(i,10);break;case\"j\":i\u003dJSON.stringify(i,null,s.width?parseInt(s.width):0);break;case\"e\":i\u003ds.precision?parseFloat(i).toExponential(s.precision):parseFloat(i).toExponential();break;case\"f\":i\u003ds.precision?parseFloat(i).toFixed(s.precision):parseFloat(i);break;case\"g\":i\u003ds.precision?String(Number(i.toPrecision(s.precision))):parseFloat(i);break;case\"o\":i\u003d(parseInt(i,10)\u003e\u003e\u003e0).toString(8);break;case\"s\":i\u003dString(i),i\u003ds.precision?i.substring(0,s.precision):i;break;case\"t\":i\u003dString(!!i),i\u003ds.precision?i.substring(0,s.precision):i;break;case\"T\":i\u003dObject.prototype.toString.call(i).slice(8,-1).toLowerCase(),i\u003ds.precision?i.substring(0,s.precision):i;break;case\"u\":i\u003dparseInt(i,10)\u003e\u003e\u003e0;break;case\"v\":i\u003di.valueOf(),i\u003ds.precision?i.substring(0,s.precision):i;break;case\"x\":i\u003d(parseInt(i,10)\u003e\u003e\u003e0).toString(16);break;case\"X\":i\u003d(parseInt(i,10)\u003e\u003e\u003e0).toString(16).toUpperCase()}t.json.test(s.type)?m+\u003di:(!t.number.test(s.type)||f\u0026\u0026!s.sign?h\u003d\"\":(h\u003df?\"+\":\"-\",i\u003di.toString().replace(t.sign,\"\")),c\u003ds.pad_char?\"0\"\u003d\u003d\u003ds.pad_char?\"0\":s.pad_char.charAt(1):\" \",u\u003ds.width-(h+i).length,l\u003ds.width\u0026\u0026u\u003e0?c.repeat(u):\"\",m+\u003ds.align?h+i+l:\"0\"\u003d\u003d\u003dc?h+l+i:l+h+i)}return m}var a\u003dObject.create(null);function o(e){if(a[e])return a[e];for(var r,n\u003de,i\u003d[],o\u003d0;n;){if(null!\u003d\u003d(r\u003dt.text.exec(n)))i.push(r[0]);else if(null!\u003d\u003d(r\u003dt.modulo.exec(n)))i.push(\"%\");else{if(null\u003d\u003d\u003d(r\u003dt.placeholder.exec(n)))throw new SyntaxError(\"[sprintf] unexpected placeholder\");if(r[2]){o|\u003d1;var s\u003d[],l\u003dr[2],c\u003d[];if(null\u003d\u003d\u003d(c\u003dt.key.exec(l)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");for(s.push(c[1]);\"\"!\u003d\u003d(l\u003dl.substring(c[0].length));)if(null!\u003d\u003d(c\u003dt.key_access.exec(l)))s.push(c[1]);else{if(null\u003d\u003d\u003d(c\u003dt.index_access.exec(l)))throw new SyntaxError(\"[sprintf] failed to parse named argument key\");s.push(c[1])}r[2]\u003ds}else o|\u003d2;if(3\u003d\u003d\u003do)throw new Error(\"[sprintf] mixing positional and named placeholders is not (yet) supported\");i.push({placeholder:r[0],param_no:r[1],keys:r[2],sign:r[3],pad_char:r[4],align:r[5],width:r[6],precision:r[7],type:r[8]})}n\u003dn.substring(r[0].length)}return a[e]\u003di}void 0!\u003d\u003dr\u0026\u0026(r.sprintf\u003de,r.vsprintf\u003dn),\"undefined\"!\u003dtypeof window\u0026\u0026(window.sprintf\u003de,window.vsprintf\u003dn)}()},{}],565:[function(t,e,r){e.exports\u003di;var n\u003dt(\"events\").EventEmitter;function i(){n.call(this)}t(\"inherits\")(i,n),i.Readable\u003dt(\"readable-stream/lib/_stream_readable.js\"),i.Writable\u003dt(\"readable-stream/lib/_stream_writable.js\"),i.Duplex\u003dt(\"readable-stream/lib/_stream_duplex.js\"),i.Transform\u003dt(\"readable-stream/lib/_stream_transform.js\"),i.PassThrough\u003dt(\"readable-stream/lib/_stream_passthrough.js\"),i.finished\u003dt(\"readable-stream/lib/internal/streams/end-of-stream.js\"),i.pipeline\u003dt(\"readable-stream/lib/internal/streams/pipeline.js\"),i.Stream\u003di,i.prototype.pipe\u003dfunction(t,e){var r\u003dthis;function i(e){t.writable\u0026\u0026!1\u003d\u003d\u003dt.write(e)\u0026\u0026r.pause\u0026\u0026r.pause()}function a(){r.readable\u0026\u0026r.resume\u0026\u0026r.resume()}r.on(\"data\",i),t.on(\"drain\",a),t._isStdio||e\u0026\u0026!1\u003d\u003d\u003de.end||(r.on(\"end\",s),r.on(\"close\",l));var o\u003d!1;function s(){o||(o\u003d!0,t.end())}function l(){o||(o\u003d!0,\"function\"\u003d\u003dtypeof t.destroy\u0026\u0026t.destroy())}function c(t){if(u(),0\u003d\u003d\u003dn.listenerCount(this,\"error\"))throw t}function u(){r.removeListener(\"data\",i),t.removeListener(\"drain\",a),r.removeListener(\"end\",s),r.removeListener(\"close\",l),r.removeListener(\"error\",c),t.removeListener(\"error\",c),r.removeListener(\"end\",u),r.removeListener(\"close\",u),t.removeListener(\"close\",u)}return r.on(\"error\",c),t.on(\"error\",c),r.on(\"end\",u),r.on(\"close\",u),t.on(\"close\",u),t.emit(\"pipe\",r),t}},{events:116,inherits:443,\"readable-stream/lib/_stream_duplex.js\":567,\"readable-stream/lib/_stream_passthrough.js\":568,\"readable-stream/lib/_stream_readable.js\":569,\"readable-stream/lib/_stream_transform.js\":570,\"readable-stream/lib/_stream_writable.js\":571,\"readable-stream/lib/internal/streams/end-of-stream.js\":575,\"readable-stream/lib/internal/streams/pipeline.js\":577}],566:[function(t,e,r){\"use strict\";var n\u003d{};function i(t,e,r){r||(r\u003dError);var i\u003dfunction(t){var r,n;function i(r,n,i){return t.call(this,function(t,r,n){return\"string\"\u003d\u003dtypeof e?e:e(t,r,n)}(r,n,i))||this}return n\u003dt,(r\u003di).prototype\u003dObject.create(n.prototype),r.prototype.constructor\u003dr,r.__proto__\u003dn,i}(r);i.prototype.name\u003dr.name,i.prototype.code\u003dt,n[t]\u003di}function a(t,e){if(Array.isArray(t)){var r\u003dt.length;return t\u003dt.map((function(t){return String(t)})),r\u003e2?\"one of \".concat(e,\" \").concat(t.slice(0,r-1).join(\", \"),\", or \")+t[r-1]:2\u003d\u003d\u003dr?\"one of \".concat(e,\" \").concat(t[0],\" or \").concat(t[1]):\"of \".concat(e,\" \").concat(t[0])}return\"of \".concat(e,\" \").concat(String(t))}i(\"ERR_INVALID_OPT_VALUE\",(function(t,e){return\u0027The value \"\u0027+e+\u0027\" is invalid for option \"\u0027+t+\u0027\"\u0027}),TypeError),i(\"ERR_INVALID_ARG_TYPE\",(function(t,e,r){var n,i,o,s;if(\"string\"\u003d\u003dtypeof e\u0026\u0026(i\u003d\"not \",e.substr(!o||o\u003c0?0:+o,i.length)\u003d\u003d\u003di)?(n\u003d\"must not be\",e\u003de.replace(/^not /,\"\")):n\u003d\"must be\",function(t,e,r){return(void 0\u003d\u003d\u003dr||r\u003et.length)\u0026\u0026(r\u003dt.length),t.substring(r-e.length,r)\u003d\u003d\u003de}(t,\" argument\"))s\u003d\"The \".concat(t,\" \").concat(n,\" \").concat(a(e,\"type\"));else{var l\u003dfunction(t,e,r){return\"number\"!\u003dtypeof r\u0026\u0026(r\u003d0),!(r+e.length\u003et.length)\u0026\u0026-1!\u003d\u003dt.indexOf(e,r)}(t,\".\")?\"property\":\"argument\";s\u003d\u0027The \"\u0027.concat(t,\u0027\" \u0027).concat(l,\" \").concat(n,\" \").concat(a(e,\"type\"))}return s+\u003d\". Received type \".concat(typeof r)}),TypeError),i(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),i(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(t){return\"The \"+t+\" method is not implemented\"})),i(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),i(\"ERR_STREAM_DESTROYED\",(function(t){return\"Cannot call \"+t+\" after a stream was destroyed\"})),i(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),i(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),i(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),i(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),i(\"ERR_UNKNOWN_ENCODING\",(function(t){return\"Unknown encoding: \"+t}),TypeError),i(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),e.exports.codes\u003dn},{}],567:[function(t,e,r){(function(r){(function(){\"use strict\";var n\u003dObject.keys||function(t){var e\u003d[];for(var r in t)e.push(r);return e};e.exports\u003dc;var i\u003dt(\"./_stream_readable\"),a\u003dt(\"./_stream_writable\");t(\"inherits\")(c,i);for(var o\u003dn(a.prototype),s\u003d0;s\u003co.length;s++){var l\u003do[s];c.prototype[l]||(c.prototype[l]\u003da.prototype[l])}function c(t){if(!(this instanceof c))return new c(t);i.call(this,t),a.call(this,t),this.allowHalfOpen\u003d!0,t\u0026\u0026(!1\u003d\u003d\u003dt.readable\u0026\u0026(this.readable\u003d!1),!1\u003d\u003d\u003dt.writable\u0026\u0026(this.writable\u003d!1),!1\u003d\u003d\u003dt.allowHalfOpen\u0026\u0026(this.allowHalfOpen\u003d!1,this.once(\"end\",u)))}function u(){this._writableState.ended||r.nextTick(f,this)}function f(t){t.end()}Object.defineProperty(c.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),Object.defineProperty(c.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState\u0026\u0026this._writableState.getBuffer()}}),Object.defineProperty(c.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(c.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!\u003d\u003dthis._readableState\u0026\u0026void 0!\u003d\u003dthis._writableState\u0026\u0026(this._readableState.destroyed\u0026\u0026this._writableState.destroyed)},set:function(t){void 0!\u003d\u003dthis._readableState\u0026\u0026void 0!\u003d\u003dthis._writableState\u0026\u0026(this._readableState.destroyed\u003dt,this._writableState.destroyed\u003dt)}})}).call(this)}).call(this,t(\"_process\"))},{\"./_stream_readable\":569,\"./_stream_writable\":571,_process:524,inherits:443}],568:[function(t,e,r){\"use strict\";e.exports\u003di;var n\u003dt(\"./_stream_transform\");function i(t){if(!(this instanceof i))return new i(t);n.call(this,t)}t(\"inherits\")(i,n),i.prototype._transform\u003dfunction(t,e,r){r(null,t)}},{\"./_stream_transform\":570,inherits:443}],569:[function(t,e,r){(function(r,n){(function(){\"use strict\";var i;e.exports\u003dM,M.ReadableState\u003dk;t(\"events\").EventEmitter;var a\u003dfunction(t,e){return t.listeners(e).length},o\u003dt(\"./internal/streams/stream\"),s\u003dt(\"buffer\").Buffer,l\u003dn.Uint8Array||function(){};var c,u\u003dt(\"util\");c\u003du\u0026\u0026u.debuglog?u.debuglog(\"stream\"):function(){};var f,h,p,d\u003dt(\"./internal/streams/buffer_list\"),m\u003dt(\"./internal/streams/destroy\"),g\u003dt(\"./internal/streams/state\").getHighWaterMark,v\u003dt(\"../errors\").codes,y\u003dv.ERR_INVALID_ARG_TYPE,x\u003dv.ERR_STREAM_PUSH_AFTER_EOF,b\u003dv.ERR_METHOD_NOT_IMPLEMENTED,_\u003dv.ERR_STREAM_UNSHIFT_AFTER_END_EVENT;t(\"inherits\")(M,o);var w\u003dm.errorOrDestroy,T\u003d[\"error\",\"close\",\"destroy\",\"pause\",\"resume\"];function k(e,r,n){i\u003di||t(\"./_stream_duplex\"),e\u003de||{},\"boolean\"!\u003dtypeof n\u0026\u0026(n\u003dr instanceof i),this.objectMode\u003d!!e.objectMode,n\u0026\u0026(this.objectMode\u003dthis.objectMode||!!e.readableObjectMode),this.highWaterMark\u003dg(this,e,\"readableHighWaterMark\",n),this.buffer\u003dnew d,this.length\u003d0,this.pipes\u003dnull,this.pipesCount\u003d0,this.flowing\u003dnull,this.ended\u003d!1,this.endEmitted\u003d!1,this.reading\u003d!1,this.sync\u003d!0,this.needReadable\u003d!1,this.emittedReadable\u003d!1,this.readableListening\u003d!1,this.resumeScheduled\u003d!1,this.paused\u003d!0,this.emitClose\u003d!1!\u003d\u003de.emitClose,this.autoDestroy\u003d!!e.autoDestroy,this.destroyed\u003d!1,this.defaultEncoding\u003de.defaultEncoding||\"utf8\",this.awaitDrain\u003d0,this.readingMore\u003d!1,this.decoder\u003dnull,this.encoding\u003dnull,e.encoding\u0026\u0026(f||(f\u003dt(\"string_decoder/\").StringDecoder),this.decoder\u003dnew f(e.encoding),this.encoding\u003de.encoding)}function M(e){if(i\u003di||t(\"./_stream_duplex\"),!(this instanceof M))return new M(e);var r\u003dthis instanceof i;this._readableState\u003dnew k(e,this,r),this.readable\u003d!0,e\u0026\u0026(\"function\"\u003d\u003dtypeof e.read\u0026\u0026(this._read\u003de.read),\"function\"\u003d\u003dtypeof e.destroy\u0026\u0026(this._destroy\u003de.destroy)),o.call(this)}function A(t,e,r,n,i){c(\"readableAddChunk\",e);var a,o\u003dt._readableState;if(null\u003d\u003d\u003de)o.reading\u003d!1,function(t,e){if(c(\"onEofChunk\"),e.ended)return;if(e.decoder){var r\u003de.decoder.end();r\u0026\u0026r.length\u0026\u0026(e.buffer.push(r),e.length+\u003de.objectMode?1:r.length)}e.ended\u003d!0,e.sync?L(t):(e.needReadable\u003d!1,e.emittedReadable||(e.emittedReadable\u003d!0,C(t)))}(t,o);else if(i||(a\u003dfunction(t,e){var r;n\u003de,s.isBuffer(n)||n instanceof l||\"string\"\u003d\u003dtypeof e||void 0\u003d\u003d\u003de||t.objectMode||(r\u003dnew y(\"chunk\",[\"string\",\"Buffer\",\"Uint8Array\"],e));var n;return r}(o,e)),a)w(t,a);else if(o.objectMode||e\u0026\u0026e.length\u003e0)if(\"string\"\u003d\u003dtypeof e||o.objectMode||Object.getPrototypeOf(e)\u003d\u003d\u003ds.prototype||(e\u003dfunction(t){return s.from(t)}(e)),n)o.endEmitted?w(t,new _):S(t,o,e,!0);else if(o.ended)w(t,new x);else{if(o.destroyed)return!1;o.reading\u003d!1,o.decoder\u0026\u0026!r?(e\u003do.decoder.write(e),o.objectMode||0!\u003d\u003de.length?S(t,o,e,!1):P(t,o)):S(t,o,e,!1)}else n||(o.reading\u003d!1,P(t,o));return!o.ended\u0026\u0026(o.length\u003co.highWaterMark||0\u003d\u003d\u003do.length)}function S(t,e,r,n){e.flowing\u0026\u00260\u003d\u003d\u003de.length\u0026\u0026!e.sync?(e.awaitDrain\u003d0,t.emit(\"data\",r)):(e.length+\u003de.objectMode?1:r.length,n?e.buffer.unshift(r):e.buffer.push(r),e.needReadable\u0026\u0026L(t)),P(t,e)}Object.defineProperty(M.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!\u003d\u003dthis._readableState\u0026\u0026this._readableState.destroyed},set:function(t){this._readableState\u0026\u0026(this._readableState.destroyed\u003dt)}}),M.prototype.destroy\u003dm.destroy,M.prototype._undestroy\u003dm.undestroy,M.prototype._destroy\u003dfunction(t,e){e(t)},M.prototype.push\u003dfunction(t,e){var r,n\u003dthis._readableState;return n.objectMode?r\u003d!0:\"string\"\u003d\u003dtypeof t\u0026\u0026((e\u003de||n.defaultEncoding)!\u003d\u003dn.encoding\u0026\u0026(t\u003ds.from(t,e),e\u003d\"\"),r\u003d!0),A(this,t,e,!1,r)},M.prototype.unshift\u003dfunction(t){return A(this,t,null,!0,!1)},M.prototype.isPaused\u003dfunction(){return!1\u003d\u003d\u003dthis._readableState.flowing},M.prototype.setEncoding\u003dfunction(e){f||(f\u003dt(\"string_decoder/\").StringDecoder);var r\u003dnew f(e);this._readableState.decoder\u003dr,this._readableState.encoding\u003dthis._readableState.decoder.encoding;for(var n\u003dthis._readableState.buffer.head,i\u003d\"\";null!\u003d\u003dn;)i+\u003dr.write(n.data),n\u003dn.next;return this._readableState.buffer.clear(),\"\"!\u003d\u003di\u0026\u0026this._readableState.buffer.push(i),this._readableState.length\u003di.length,this};function E(t,e){return t\u003c\u003d0||0\u003d\u003d\u003de.length\u0026\u0026e.ended?0:e.objectMode?1:t!\u003dt?e.flowing\u0026\u0026e.length?e.buffer.head.data.length:e.length:(t\u003ee.highWaterMark\u0026\u0026(e.highWaterMark\u003dfunction(t){return t\u003e\u003d1073741824?t\u003d1073741824:(t--,t|\u003dt\u003e\u003e\u003e1,t|\u003dt\u003e\u003e\u003e2,t|\u003dt\u003e\u003e\u003e4,t|\u003dt\u003e\u003e\u003e8,t|\u003dt\u003e\u003e\u003e16,t++),t}(t)),t\u003c\u003de.length?t:e.ended?e.length:(e.needReadable\u003d!0,0))}function L(t){var e\u003dt._readableState;c(\"emitReadable\",e.needReadable,e.emittedReadable),e.needReadable\u003d!1,e.emittedReadable||(c(\"emitReadable\",e.flowing),e.emittedReadable\u003d!0,r.nextTick(C,t))}function C(t){var e\u003dt._readableState;c(\"emitReadable_\",e.destroyed,e.length,e.ended),e.destroyed||!e.length\u0026\u0026!e.ended||(t.emit(\"readable\"),e.emittedReadable\u003d!1),e.needReadable\u003d!e.flowing\u0026\u0026!e.ended\u0026\u0026e.length\u003c\u003de.highWaterMark,R(t)}function P(t,e){e.readingMore||(e.readingMore\u003d!0,r.nextTick(I,t,e))}function I(t,e){for(;!e.reading\u0026\u0026!e.ended\u0026\u0026(e.length\u003ce.highWaterMark||e.flowing\u0026\u00260\u003d\u003d\u003de.length);){var r\u003de.length;if(c(\"maybeReadMore read 0\"),t.read(0),r\u003d\u003d\u003de.length)break}e.readingMore\u003d!1}function O(t){var e\u003dt._readableState;e.readableListening\u003dt.listenerCount(\"readable\")\u003e0,e.resumeScheduled\u0026\u0026!e.paused?e.flowing\u003d!0:t.listenerCount(\"data\")\u003e0\u0026\u0026t.resume()}function z(t){c(\"readable nexttick read 0\"),t.read(0)}function D(t,e){c(\"resume\",e.reading),e.reading||t.read(0),e.resumeScheduled\u003d!1,t.emit(\"resume\"),R(t),e.flowing\u0026\u0026!e.reading\u0026\u0026t.read(0)}function R(t){var e\u003dt._readableState;for(c(\"flow\",e.flowing);e.flowing\u0026\u0026null!\u003d\u003dt.read(););}function F(t,e){return 0\u003d\u003d\u003de.length?null:(e.objectMode?r\u003de.buffer.shift():!t||t\u003e\u003de.length?(r\u003de.decoder?e.buffer.join(\"\"):1\u003d\u003d\u003de.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r\u003de.buffer.consume(t,e.decoder),r);var r}function B(t){var e\u003dt._readableState;c(\"endReadable\",e.endEmitted),e.endEmitted||(e.ended\u003d!0,r.nextTick(N,e,t))}function N(t,e){if(c(\"endReadableNT\",t.endEmitted,t.length),!t.endEmitted\u0026\u00260\u003d\u003d\u003dt.length\u0026\u0026(t.endEmitted\u003d!0,e.readable\u003d!1,e.emit(\"end\"),t.autoDestroy)){var r\u003de._writableState;(!r||r.autoDestroy\u0026\u0026r.finished)\u0026\u0026e.destroy()}}function j(t,e){for(var r\u003d0,n\u003dt.length;r\u003cn;r++)if(t[r]\u003d\u003d\u003de)return r;return-1}M.prototype.read\u003dfunction(t){c(\"read\",t),t\u003dparseInt(t,10);var e\u003dthis._readableState,r\u003dt;if(0!\u003d\u003dt\u0026\u0026(e.emittedReadable\u003d!1),0\u003d\u003d\u003dt\u0026\u0026e.needReadable\u0026\u0026((0!\u003d\u003de.highWaterMark?e.length\u003e\u003de.highWaterMark:e.length\u003e0)||e.ended))return c(\"read: emitReadable\",e.length,e.ended),0\u003d\u003d\u003de.length\u0026\u0026e.ended?B(this):L(this),null;if(0\u003d\u003d\u003d(t\u003dE(t,e))\u0026\u0026e.ended)return 0\u003d\u003d\u003de.length\u0026\u0026B(this),null;var n,i\u003de.needReadable;return c(\"need readable\",i),(0\u003d\u003d\u003de.length||e.length-t\u003ce.highWaterMark)\u0026\u0026c(\"length less than watermark\",i\u003d!0),e.ended||e.reading?c(\"reading or ended\",i\u003d!1):i\u0026\u0026(c(\"do read\"),e.reading\u003d!0,e.sync\u003d!0,0\u003d\u003d\u003de.length\u0026\u0026(e.needReadable\u003d!0),this._read(e.highWaterMark),e.sync\u003d!1,e.reading||(t\u003dE(r,e))),null\u003d\u003d\u003d(n\u003dt\u003e0?F(t,e):null)?(e.needReadable\u003de.length\u003c\u003de.highWaterMark,t\u003d0):(e.length-\u003dt,e.awaitDrain\u003d0),0\u003d\u003d\u003de.length\u0026\u0026(e.ended||(e.needReadable\u003d!0),r!\u003d\u003dt\u0026\u0026e.ended\u0026\u0026B(this)),null!\u003d\u003dn\u0026\u0026this.emit(\"data\",n),n},M.prototype._read\u003dfunction(t){w(this,new b(\"_read()\"))},M.prototype.pipe\u003dfunction(t,e){var n\u003dthis,i\u003dthis._readableState;switch(i.pipesCount){case 0:i.pipes\u003dt;break;case 1:i.pipes\u003d[i.pipes,t];break;default:i.pipes.push(t)}i.pipesCount+\u003d1,c(\"pipe count\u003d%d opts\u003d%j\",i.pipesCount,e);var o\u003d(!e||!1!\u003d\u003de.end)\u0026\u0026t!\u003d\u003dr.stdout\u0026\u0026t!\u003d\u003dr.stderr?l:g;function s(e,r){c(\"onunpipe\"),e\u003d\u003d\u003dn\u0026\u0026r\u0026\u0026!1\u003d\u003d\u003dr.hasUnpiped\u0026\u0026(r.hasUnpiped\u003d!0,c(\"cleanup\"),t.removeListener(\"close\",d),t.removeListener(\"finish\",m),t.removeListener(\"drain\",u),t.removeListener(\"error\",p),t.removeListener(\"unpipe\",s),n.removeListener(\"end\",l),n.removeListener(\"end\",g),n.removeListener(\"data\",h),f\u003d!0,!i.awaitDrain||t._writableState\u0026\u0026!t._writableState.needDrain||u())}function l(){c(\"onend\"),t.end()}i.endEmitted?r.nextTick(o):n.once(\"end\",o),t.on(\"unpipe\",s);var u\u003dfunction(t){return function(){var e\u003dt._readableState;c(\"pipeOnDrain\",e.awaitDrain),e.awaitDrain\u0026\u0026e.awaitDrain--,0\u003d\u003d\u003de.awaitDrain\u0026\u0026a(t,\"data\")\u0026\u0026(e.flowing\u003d!0,R(t))}}(n);t.on(\"drain\",u);var f\u003d!1;function h(e){c(\"ondata\");var r\u003dt.write(e);c(\"dest.write\",r),!1\u003d\u003d\u003dr\u0026\u0026((1\u003d\u003d\u003di.pipesCount\u0026\u0026i.pipes\u003d\u003d\u003dt||i.pipesCount\u003e1\u0026\u0026-1!\u003d\u003dj(i.pipes,t))\u0026\u0026!f\u0026\u0026(c(\"false write response, pause\",i.awaitDrain),i.awaitDrain++),n.pause())}function p(e){c(\"onerror\",e),g(),t.removeListener(\"error\",p),0\u003d\u003d\u003da(t,\"error\")\u0026\u0026w(t,e)}function d(){t.removeListener(\"finish\",m),g()}function m(){c(\"onfinish\"),t.removeListener(\"close\",d),g()}function g(){c(\"unpipe\"),n.unpipe(t)}return n.on(\"data\",h),function(t,e,r){if(\"function\"\u003d\u003dtypeof t.prependListener)return t.prependListener(e,r);t._events\u0026\u0026t._events[e]?Array.isArray(t._events[e])?t._events[e].unshift(r):t._events[e]\u003d[r,t._events[e]]:t.on(e,r)}(t,\"error\",p),t.once(\"close\",d),t.once(\"finish\",m),t.emit(\"pipe\",n),i.flowing||(c(\"pipe resume\"),n.resume()),t},M.prototype.unpipe\u003dfunction(t){var e\u003dthis._readableState,r\u003d{hasUnpiped:!1};if(0\u003d\u003d\u003de.pipesCount)return this;if(1\u003d\u003d\u003de.pipesCount)return t\u0026\u0026t!\u003d\u003de.pipes||(t||(t\u003de.pipes),e.pipes\u003dnull,e.pipesCount\u003d0,e.flowing\u003d!1,t\u0026\u0026t.emit(\"unpipe\",this,r)),this;if(!t){var n\u003de.pipes,i\u003de.pipesCount;e.pipes\u003dnull,e.pipesCount\u003d0,e.flowing\u003d!1;for(var a\u003d0;a\u003ci;a++)n[a].emit(\"unpipe\",this,{hasUnpiped:!1});return this}var o\u003dj(e.pipes,t);return-1\u003d\u003d\u003do||(e.pipes.splice(o,1),e.pipesCount-\u003d1,1\u003d\u003d\u003de.pipesCount\u0026\u0026(e.pipes\u003de.pipes[0]),t.emit(\"unpipe\",this,r)),this},M.prototype.on\u003dfunction(t,e){var n\u003do.prototype.on.call(this,t,e),i\u003dthis._readableState;return\"data\"\u003d\u003d\u003dt?(i.readableListening\u003dthis.listenerCount(\"readable\")\u003e0,!1!\u003d\u003di.flowing\u0026\u0026this.resume()):\"readable\"\u003d\u003d\u003dt\u0026\u0026(i.endEmitted||i.readableListening||(i.readableListening\u003di.needReadable\u003d!0,i.flowing\u003d!1,i.emittedReadable\u003d!1,c(\"on readable\",i.length,i.reading),i.length?L(this):i.reading||r.nextTick(z,this))),n},M.prototype.addListener\u003dM.prototype.on,M.prototype.removeListener\u003dfunction(t,e){var n\u003do.prototype.removeListener.call(this,t,e);return\"readable\"\u003d\u003d\u003dt\u0026\u0026r.nextTick(O,this),n},M.prototype.removeAllListeners\u003dfunction(t){var e\u003do.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!\u003d\u003dt\u0026\u0026void 0!\u003d\u003dt||r.nextTick(O,this),e},M.prototype.resume\u003dfunction(){var t\u003dthis._readableState;return t.flowing||(c(\"resume\"),t.flowing\u003d!t.readableListening,function(t,e){e.resumeScheduled||(e.resumeScheduled\u003d!0,r.nextTick(D,t,e))}(this,t)),t.paused\u003d!1,this},M.prototype.pause\u003dfunction(){return c(\"call pause flowing\u003d%j\",this._readableState.flowing),!1!\u003d\u003dthis._readableState.flowing\u0026\u0026(c(\"pause\"),this._readableState.flowing\u003d!1,this.emit(\"pause\")),this._readableState.paused\u003d!0,this},M.prototype.wrap\u003dfunction(t){var e\u003dthis,r\u003dthis._readableState,n\u003d!1;for(var i in t.on(\"end\",(function(){if(c(\"wrapped end\"),r.decoder\u0026\u0026!r.ended){var t\u003dr.decoder.end();t\u0026\u0026t.length\u0026\u0026e.push(t)}e.push(null)})),t.on(\"data\",(function(i){(c(\"wrapped data\"),r.decoder\u0026\u0026(i\u003dr.decoder.write(i)),r.objectMode\u0026\u0026null\u003d\u003di)||(r.objectMode||i\u0026\u0026i.length)\u0026\u0026(e.push(i)||(n\u003d!0,t.pause()))})),t)void 0\u003d\u003d\u003dthis[i]\u0026\u0026\"function\"\u003d\u003dtypeof t[i]\u0026\u0026(this[i]\u003dfunction(e){return function(){return t[e].apply(t,arguments)}}(i));for(var a\u003d0;a\u003cT.length;a++)t.on(T[a],this.emit.bind(this,T[a]));return this._read\u003dfunction(e){c(\"wrapped _read\",e),n\u0026\u0026(n\u003d!1,t.resume())},this},\"function\"\u003d\u003dtypeof Symbol\u0026\u0026(M.prototype[Symbol.asyncIterator]\u003dfunction(){return void 0\u003d\u003d\u003dh\u0026\u0026(h\u003dt(\"./internal/streams/async_iterator\")),h(this)}),Object.defineProperty(M.prototype,\"readableHighWaterMark\",{enumerable:!1,get:function(){return this._readableState.highWaterMark}}),Object.defineProperty(M.prototype,\"readableBuffer\",{enumerable:!1,get:function(){return this._readableState\u0026\u0026this._readableState.buffer}}),Object.defineProperty(M.prototype,\"readableFlowing\",{enumerable:!1,get:function(){return this._readableState.flowing},set:function(t){this._readableState\u0026\u0026(this._readableState.flowing\u003dt)}}),M._fromList\u003dF,Object.defineProperty(M.prototype,\"readableLength\",{enumerable:!1,get:function(){return this._readableState.length}}),\"function\"\u003d\u003dtypeof Symbol\u0026\u0026(M.from\u003dfunction(e,r){return void 0\u003d\u003d\u003dp\u0026\u0026(p\u003dt(\"./internal/streams/from\")),p(M,e,r)})}).call(this)}).call(this,t(\"_process\"),\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"../errors\":566,\"./_stream_duplex\":567,\"./internal/streams/async_iterator\":572,\"./internal/streams/buffer_list\":573,\"./internal/streams/destroy\":574,\"./internal/streams/from\":576,\"./internal/streams/state\":578,\"./internal/streams/stream\":579,_process:524,buffer:117,events:116,inherits:443,\"string_decoder/\":580,util:115}],570:[function(t,e,r){\"use strict\";e.exports\u003du;var n\u003dt(\"../errors\").codes,i\u003dn.ERR_METHOD_NOT_IMPLEMENTED,a\u003dn.ERR_MULTIPLE_CALLBACK,o\u003dn.ERR_TRANSFORM_ALREADY_TRANSFORMING,s\u003dn.ERR_TRANSFORM_WITH_LENGTH_0,l\u003dt(\"./_stream_duplex\");function c(t,e){var r\u003dthis._transformState;r.transforming\u003d!1;var n\u003dr.writecb;if(null\u003d\u003d\u003dn)return this.emit(\"error\",new a);r.writechunk\u003dnull,r.writecb\u003dnull,null!\u003de\u0026\u0026this.push(e),n(t);var i\u003dthis._readableState;i.reading\u003d!1,(i.needReadable||i.length\u003ci.highWaterMark)\u0026\u0026this._read(i.highWaterMark)}function u(t){if(!(this instanceof u))return new u(t);l.call(this,t),this._transformState\u003d{afterTransform:c.bind(this),needTransform:!1,transforming:!1,writecb:null,writechunk:null,writeencoding:null},this._readableState.needReadable\u003d!0,this._readableState.sync\u003d!1,t\u0026\u0026(\"function\"\u003d\u003dtypeof t.transform\u0026\u0026(this._transform\u003dt.transform),\"function\"\u003d\u003dtypeof t.flush\u0026\u0026(this._flush\u003dt.flush)),this.on(\"prefinish\",f)}function f(){var t\u003dthis;\"function\"!\u003dtypeof this._flush||this._readableState.destroyed?h(this,null,null):this._flush((function(e,r){h(t,e,r)}))}function h(t,e,r){if(e)return t.emit(\"error\",e);if(null!\u003dr\u0026\u0026t.push(r),t._writableState.length)throw new s;if(t._transformState.transforming)throw new o;return t.push(null)}t(\"inherits\")(u,l),u.prototype.push\u003dfunction(t,e){return this._transformState.needTransform\u003d!1,l.prototype.push.call(this,t,e)},u.prototype._transform\u003dfunction(t,e,r){r(new i(\"_transform()\"))},u.prototype._write\u003dfunction(t,e,r){var n\u003dthis._transformState;if(n.writecb\u003dr,n.writechunk\u003dt,n.writeencoding\u003de,!n.transforming){var i\u003dthis._readableState;(n.needTransform||i.needReadable||i.length\u003ci.highWaterMark)\u0026\u0026this._read(i.highWaterMark)}},u.prototype._read\u003dfunction(t){var e\u003dthis._transformState;null\u003d\u003d\u003de.writechunk||e.transforming?e.needTransform\u003d!0:(e.transforming\u003d!0,this._transform(e.writechunk,e.writeencoding,e.afterTransform))},u.prototype._destroy\u003dfunction(t,e){l.prototype._destroy.call(this,t,(function(t){e(t)}))}},{\"../errors\":566,\"./_stream_duplex\":567,inherits:443}],571:[function(t,e,r){(function(r,n){(function(){\"use strict\";function i(t){var e\u003dthis;this.next\u003dnull,this.entry\u003dnull,this.finish\u003dfunction(){!function(t,e,r){var n\u003dt.entry;t.entry\u003dnull;for(;n;){var i\u003dn.callback;e.pendingcb--,i(r),n\u003dn.next}e.corkedRequestsFree.next\u003dt}(e,t)}}var a;e.exports\u003dM,M.WritableState\u003dk;var o\u003d{deprecate:t(\"util-deprecate\")},s\u003dt(\"./internal/streams/stream\"),l\u003dt(\"buffer\").Buffer,c\u003dn.Uint8Array||function(){};var u,f\u003dt(\"./internal/streams/destroy\"),h\u003dt(\"./internal/streams/state\").getHighWaterMark,p\u003dt(\"../errors\").codes,d\u003dp.ERR_INVALID_ARG_TYPE,m\u003dp.ERR_METHOD_NOT_IMPLEMENTED,g\u003dp.ERR_MULTIPLE_CALLBACK,v\u003dp.ERR_STREAM_CANNOT_PIPE,y\u003dp.ERR_STREAM_DESTROYED,x\u003dp.ERR_STREAM_NULL_VALUES,b\u003dp.ERR_STREAM_WRITE_AFTER_END,_\u003dp.ERR_UNKNOWN_ENCODING,w\u003df.errorOrDestroy;function T(){}function k(e,n,o){a\u003da||t(\"./_stream_duplex\"),e\u003de||{},\"boolean\"!\u003dtypeof o\u0026\u0026(o\u003dn instanceof a),this.objectMode\u003d!!e.objectMode,o\u0026\u0026(this.objectMode\u003dthis.objectMode||!!e.writableObjectMode),this.highWaterMark\u003dh(this,e,\"writableHighWaterMark\",o),this.finalCalled\u003d!1,this.needDrain\u003d!1,this.ending\u003d!1,this.ended\u003d!1,this.finished\u003d!1,this.destroyed\u003d!1;var s\u003d!1\u003d\u003d\u003de.decodeStrings;this.decodeStrings\u003d!s,this.defaultEncoding\u003de.defaultEncoding||\"utf8\",this.length\u003d0,this.writing\u003d!1,this.corked\u003d0,this.sync\u003d!0,this.bufferProcessing\u003d!1,this.onwrite\u003dfunction(t){!function(t,e){var n\u003dt._writableState,i\u003dn.sync,a\u003dn.writecb;if(\"function\"!\u003dtypeof a)throw new g;if(function(t){t.writing\u003d!1,t.writecb\u003dnull,t.length-\u003dt.writelen,t.writelen\u003d0}(n),e)!function(t,e,n,i,a){--e.pendingcb,n?(r.nextTick(a,i),r.nextTick(P,t,e),t._writableState.errorEmitted\u003d!0,w(t,i)):(a(i),t._writableState.errorEmitted\u003d!0,w(t,i),P(t,e))}(t,n,i,e,a);else{var o\u003dL(n)||t.destroyed;o||n.corked||n.bufferProcessing||!n.bufferedRequest||E(t,n),i?r.nextTick(S,t,n,o,a):S(t,n,o,a)}}(n,t)},this.writecb\u003dnull,this.writelen\u003d0,this.bufferedRequest\u003dnull,this.lastBufferedRequest\u003dnull,this.pendingcb\u003d0,this.prefinished\u003d!1,this.errorEmitted\u003d!1,this.emitClose\u003d!1!\u003d\u003de.emitClose,this.autoDestroy\u003d!!e.autoDestroy,this.bufferedRequestCount\u003d0,this.corkedRequestsFree\u003dnew i(this)}function M(e){var r\u003dthis instanceof(a\u003da||t(\"./_stream_duplex\"));if(!r\u0026\u0026!u.call(M,this))return new M(e);this._writableState\u003dnew k(e,this,r),this.writable\u003d!0,e\u0026\u0026(\"function\"\u003d\u003dtypeof e.write\u0026\u0026(this._write\u003de.write),\"function\"\u003d\u003dtypeof e.writev\u0026\u0026(this._writev\u003de.writev),\"function\"\u003d\u003dtypeof e.destroy\u0026\u0026(this._destroy\u003de.destroy),\"function\"\u003d\u003dtypeof e.final\u0026\u0026(this._final\u003de.final)),s.call(this)}function A(t,e,r,n,i,a,o){e.writelen\u003dn,e.writecb\u003do,e.writing\u003d!0,e.sync\u003d!0,e.destroyed?e.onwrite(new y(\"write\")):r?t._writev(i,e.onwrite):t._write(i,a,e.onwrite),e.sync\u003d!1}function S(t,e,r,n){r||function(t,e){0\u003d\u003d\u003de.length\u0026\u0026e.needDrain\u0026\u0026(e.needDrain\u003d!1,t.emit(\"drain\"))}(t,e),e.pendingcb--,n(),P(t,e)}function E(t,e){e.bufferProcessing\u003d!0;var r\u003de.bufferedRequest;if(t._writev\u0026\u0026r\u0026\u0026r.next){var n\u003de.bufferedRequestCount,a\u003dnew Array(n),o\u003de.corkedRequestsFree;o.entry\u003dr;for(var s\u003d0,l\u003d!0;r;)a[s]\u003dr,r.isBuf||(l\u003d!1),r\u003dr.next,s+\u003d1;a.allBuffers\u003dl,A(t,e,!0,e.length,a,\"\",o.finish),e.pendingcb++,e.lastBufferedRequest\u003dnull,o.next?(e.corkedRequestsFree\u003do.next,o.next\u003dnull):e.corkedRequestsFree\u003dnew i(e),e.bufferedRequestCount\u003d0}else{for(;r;){var c\u003dr.chunk,u\u003dr.encoding,f\u003dr.callback;if(A(t,e,!1,e.objectMode?1:c.length,c,u,f),r\u003dr.next,e.bufferedRequestCount--,e.writing)break}null\u003d\u003d\u003dr\u0026\u0026(e.lastBufferedRequest\u003dnull)}e.bufferedRequest\u003dr,e.bufferProcessing\u003d!1}function L(t){return t.ending\u0026\u00260\u003d\u003d\u003dt.length\u0026\u0026null\u003d\u003d\u003dt.bufferedRequest\u0026\u0026!t.finished\u0026\u0026!t.writing}function C(t,e){t._final((function(r){e.pendingcb--,r\u0026\u0026w(t,r),e.prefinished\u003d!0,t.emit(\"prefinish\"),P(t,e)}))}function P(t,e){var n\u003dL(e);if(n\u0026\u0026(function(t,e){e.prefinished||e.finalCalled||(\"function\"!\u003dtypeof t._final||e.destroyed?(e.prefinished\u003d!0,t.emit(\"prefinish\")):(e.pendingcb++,e.finalCalled\u003d!0,r.nextTick(C,t,e)))}(t,e),0\u003d\u003d\u003de.pendingcb\u0026\u0026(e.finished\u003d!0,t.emit(\"finish\"),e.autoDestroy))){var i\u003dt._readableState;(!i||i.autoDestroy\u0026\u0026i.endEmitted)\u0026\u0026t.destroy()}return n}t(\"inherits\")(M,s),k.prototype.getBuffer\u003dfunction(){for(var t\u003dthis.bufferedRequest,e\u003d[];t;)e.push(t),t\u003dt.next;return e},function(){try{Object.defineProperty(k.prototype,\"buffer\",{get:o.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(t){}}(),\"function\"\u003d\u003dtypeof Symbol\u0026\u0026Symbol.hasInstance\u0026\u0026\"function\"\u003d\u003dtypeof Function.prototype[Symbol.hasInstance]?(u\u003dFunction.prototype[Symbol.hasInstance],Object.defineProperty(M,Symbol.hasInstance,{value:function(t){return!!u.call(this,t)||this\u003d\u003d\u003dM\u0026\u0026(t\u0026\u0026t._writableState instanceof k)}})):u\u003dfunction(t){return t instanceof this},M.prototype.pipe\u003dfunction(){w(this,new v)},M.prototype.write\u003dfunction(t,e,n){var i,a\u003dthis._writableState,o\u003d!1,s\u003d!a.objectMode\u0026\u0026(i\u003dt,l.isBuffer(i)||i instanceof c);return s\u0026\u0026!l.isBuffer(t)\u0026\u0026(t\u003dfunction(t){return l.from(t)}(t)),\"function\"\u003d\u003dtypeof e\u0026\u0026(n\u003de,e\u003dnull),s?e\u003d\"buffer\":e||(e\u003da.defaultEncoding),\"function\"!\u003dtypeof n\u0026\u0026(n\u003dT),a.ending?function(t,e){var n\u003dnew b;w(t,n),r.nextTick(e,n)}(this,n):(s||function(t,e,n,i){var a;return null\u003d\u003d\u003dn?a\u003dnew x:\"string\"\u003d\u003dtypeof n||e.objectMode||(a\u003dnew d(\"chunk\",[\"string\",\"Buffer\"],n)),!a||(w(t,a),r.nextTick(i,a),!1)}(this,a,t,n))\u0026\u0026(a.pendingcb++,o\u003dfunction(t,e,r,n,i,a){if(!r){var o\u003dfunction(t,e,r){t.objectMode||!1\u003d\u003d\u003dt.decodeStrings||\"string\"!\u003dtypeof e||(e\u003dl.from(e,r));return e}(e,n,i);n!\u003d\u003do\u0026\u0026(r\u003d!0,i\u003d\"buffer\",n\u003do)}var s\u003de.objectMode?1:n.length;e.length+\u003ds;var c\u003de.length\u003ce.highWaterMark;c||(e.needDrain\u003d!0);if(e.writing||e.corked){var u\u003de.lastBufferedRequest;e.lastBufferedRequest\u003d{chunk:n,encoding:i,isBuf:r,callback:a,next:null},u?u.next\u003de.lastBufferedRequest:e.bufferedRequest\u003de.lastBufferedRequest,e.bufferedRequestCount+\u003d1}else A(t,e,!1,s,n,i,a);return c}(this,a,s,t,e,n)),o},M.prototype.cork\u003dfunction(){this._writableState.corked++},M.prototype.uncork\u003dfunction(){var t\u003dthis._writableState;t.corked\u0026\u0026(t.corked--,t.writing||t.corked||t.bufferProcessing||!t.bufferedRequest||E(this,t))},M.prototype.setDefaultEncoding\u003dfunction(t){if(\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003dt.toLowerCase()),!([\"hex\",\"utf8\",\"utf-8\",\"ascii\",\"binary\",\"base64\",\"ucs2\",\"ucs-2\",\"utf16le\",\"utf-16le\",\"raw\"].indexOf((t+\"\").toLowerCase())\u003e-1))throw new _(t);return this._writableState.defaultEncoding\u003dt,this},Object.defineProperty(M.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState\u0026\u0026this._writableState.getBuffer()}}),Object.defineProperty(M.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),M.prototype._write\u003dfunction(t,e,r){r(new m(\"_write()\"))},M.prototype._writev\u003dnull,M.prototype.end\u003dfunction(t,e,n){var i\u003dthis._writableState;return\"function\"\u003d\u003dtypeof t?(n\u003dt,t\u003dnull,e\u003dnull):\"function\"\u003d\u003dtypeof e\u0026\u0026(n\u003de,e\u003dnull),null!\u003dt\u0026\u0026this.write(t,e),i.corked\u0026\u0026(i.corked\u003d1,this.uncork()),i.ending||function(t,e,n){e.ending\u003d!0,P(t,e),n\u0026\u0026(e.finished?r.nextTick(n):t.once(\"finish\",n));e.ended\u003d!0,t.writable\u003d!1}(this,i,n),this},Object.defineProperty(M.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(M.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!\u003d\u003dthis._writableState\u0026\u0026this._writableState.destroyed},set:function(t){this._writableState\u0026\u0026(this._writableState.destroyed\u003dt)}}),M.prototype.destroy\u003df.destroy,M.prototype._undestroy\u003df.undestroy,M.prototype._destroy\u003dfunction(t,e){e(t)}}).call(this)}).call(this,t(\"_process\"),\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"../errors\":566,\"./_stream_duplex\":567,\"./internal/streams/destroy\":574,\"./internal/streams/state\":578,\"./internal/streams/stream\":579,_process:524,buffer:117,inherits:443,\"util-deprecate\":618}],572:[function(t,e,r){(function(r){(function(){\"use strict\";var n;function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]\u003dr,t}var a\u003dt(\"./end-of-stream\"),o\u003dSymbol(\"lastResolve\"),s\u003dSymbol(\"lastReject\"),l\u003dSymbol(\"error\"),c\u003dSymbol(\"ended\"),u\u003dSymbol(\"lastPromise\"),f\u003dSymbol(\"handlePromise\"),h\u003dSymbol(\"stream\");function p(t,e){return{value:t,done:e}}function d(t){var e\u003dt[o];if(null!\u003d\u003de){var r\u003dt[h].read();null!\u003d\u003dr\u0026\u0026(t[u]\u003dnull,t[o]\u003dnull,t[s]\u003dnull,e(p(r,!1)))}}function m(t){r.nextTick(d,t)}var g\u003dObject.getPrototypeOf((function(){})),v\u003dObject.setPrototypeOf((i(n\u003d{get stream(){return this[h]},next:function(){var t\u003dthis,e\u003dthis[l];if(null!\u003d\u003de)return Promise.reject(e);if(this[c])return Promise.resolve(p(void 0,!0));if(this[h].destroyed)return new Promise((function(e,n){r.nextTick((function(){t[l]?n(t[l]):e(p(void 0,!0))}))}));var n,i\u003dthis[u];if(i)n\u003dnew Promise(function(t,e){return function(r,n){t.then((function(){e[c]?r(p(void 0,!0)):e[f](r,n)}),n)}}(i,this));else{var a\u003dthis[h].read();if(null!\u003d\u003da)return Promise.resolve(p(a,!1));n\u003dnew Promise(this[f])}return this[u]\u003dn,n}},Symbol.asyncIterator,(function(){return this})),i(n,\"return\",(function(){var t\u003dthis;return new Promise((function(e,r){t[h].destroy(null,(function(t){t?r(t):e(p(void 0,!0))}))}))})),n),g);e.exports\u003dfunction(t){var e,r\u003dObject.create(v,(i(e\u003d{},h,{value:t,writable:!0}),i(e,o,{value:null,writable:!0}),i(e,s,{value:null,writable:!0}),i(e,l,{value:null,writable:!0}),i(e,c,{value:t._readableState.endEmitted,writable:!0}),i(e,f,{value:function(t,e){var n\u003dr[h].read();n?(r[u]\u003dnull,r[o]\u003dnull,r[s]\u003dnull,t(p(n,!1))):(r[o]\u003dt,r[s]\u003de)},writable:!0}),e));return r[u]\u003dnull,a(t,(function(t){if(t\u0026\u0026\"ERR_STREAM_PREMATURE_CLOSE\"!\u003d\u003dt.code){var e\u003dr[s];return null!\u003d\u003de\u0026\u0026(r[u]\u003dnull,r[o]\u003dnull,r[s]\u003dnull,e(t)),void(r[l]\u003dt)}var n\u003dr[o];null!\u003d\u003dn\u0026\u0026(r[u]\u003dnull,r[o]\u003dnull,r[s]\u003dnull,n(p(void 0,!0))),r[c]\u003d!0})),t.on(\"readable\",m.bind(null,r)),r}}).call(this)}).call(this,t(\"_process\"))},{\"./end-of-stream\":575,_process:524}],573:[function(t,e,r){\"use strict\";function n(t,e){var r\u003dObject.keys(t);if(Object.getOwnPropertySymbols){var n\u003dObject.getOwnPropertySymbols(t);e\u0026\u0026(n\u003dn.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]\u003dr,t}function a(t,e){for(var r\u003d0;r\u003ce.length;r++){var n\u003de[r];n.enumerable\u003dn.enumerable||!1,n.configurable\u003d!0,\"value\"in n\u0026\u0026(n.writable\u003d!0),Object.defineProperty(t,n.key,n)}}var o\u003dt(\"buffer\").Buffer,s\u003dt(\"util\").inspect,l\u003ds\u0026\u0026s.custom||\"inspect\";e.exports\u003dfunction(){function t(){!function(t,e){if(!(t instanceof e))throw new TypeError(\"Cannot call a class as a function\")}(this,t),this.head\u003dnull,this.tail\u003dnull,this.length\u003d0}var e,r,c;return e\u003dt,(r\u003d[{key:\"push\",value:function(t){var e\u003d{data:t,next:null};this.length\u003e0?this.tail.next\u003de:this.head\u003de,this.tail\u003de,++this.length}},{key:\"unshift\",value:function(t){var e\u003d{data:t,next:this.head};0\u003d\u003d\u003dthis.length\u0026\u0026(this.tail\u003de),this.head\u003de,++this.length}},{key:\"shift\",value:function(){if(0!\u003d\u003dthis.length){var t\u003dthis.head.data;return 1\u003d\u003d\u003dthis.length?this.head\u003dthis.tail\u003dnull:this.head\u003dthis.head.next,--this.length,t}}},{key:\"clear\",value:function(){this.head\u003dthis.tail\u003dnull,this.length\u003d0}},{key:\"join\",value:function(t){if(0\u003d\u003d\u003dthis.length)return\"\";for(var e\u003dthis.head,r\u003d\"\"+e.data;e\u003de.next;)r+\u003dt+e.data;return r}},{key:\"concat\",value:function(t){if(0\u003d\u003d\u003dthis.length)return o.alloc(0);for(var e,r,n,i\u003do.allocUnsafe(t\u003e\u003e\u003e0),a\u003dthis.head,s\u003d0;a;)e\u003da.data,r\u003di,n\u003ds,o.prototype.copy.call(e,r,n),s+\u003da.data.length,a\u003da.next;return i}},{key:\"consume\",value:function(t,e){var r;return t\u003cthis.head.data.length?(r\u003dthis.head.data.slice(0,t),this.head.data\u003dthis.head.data.slice(t)):r\u003dt\u003d\u003d\u003dthis.head.data.length?this.shift():e?this._getString(t):this._getBuffer(t),r}},{key:\"first\",value:function(){return this.head.data}},{key:\"_getString\",value:function(t){var e\u003dthis.head,r\u003d1,n\u003de.data;for(t-\u003dn.length;e\u003de.next;){var i\u003de.data,a\u003dt\u003ei.length?i.length:t;if(a\u003d\u003d\u003di.length?n+\u003di:n+\u003di.slice(0,t),0\u003d\u003d(t-\u003da)){a\u003d\u003d\u003di.length?(++r,e.next?this.head\u003de.next:this.head\u003dthis.tail\u003dnull):(this.head\u003de,e.data\u003di.slice(a));break}++r}return this.length-\u003dr,n}},{key:\"_getBuffer\",value:function(t){var e\u003do.allocUnsafe(t),r\u003dthis.head,n\u003d1;for(r.data.copy(e),t-\u003dr.data.length;r\u003dr.next;){var i\u003dr.data,a\u003dt\u003ei.length?i.length:t;if(i.copy(e,e.length-t,0,a),0\u003d\u003d(t-\u003da)){a\u003d\u003d\u003di.length?(++n,r.next?this.head\u003dr.next:this.head\u003dthis.tail\u003dnull):(this.head\u003dr,r.data\u003di.slice(a));break}++n}return this.length-\u003dn,e}},{key:l,value:function(t,e){return s(this,function(t){for(var e\u003d1;e\u003carguments.length;e++){var r\u003dnull!\u003darguments[e]?arguments[e]:{};e%2?n(Object(r),!0).forEach((function(e){i(t,e,r[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):n(Object(r)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(r,e))}))}return t}({},e,{depth:0,customInspect:!1}))}}])\u0026\u0026a(e.prototype,r),c\u0026\u0026a(e,c),t}()},{buffer:117,util:115}],574:[function(t,e,r){(function(t){(function(){\"use strict\";function r(t,e){i(t,e),n(t)}function n(t){t._writableState\u0026\u0026!t._writableState.emitClose||t._readableState\u0026\u0026!t._readableState.emitClose||t.emit(\"close\")}function i(t,e){t.emit(\"error\",e)}e.exports\u003d{destroy:function(e,a){var o\u003dthis,s\u003dthis._readableState\u0026\u0026this._readableState.destroyed,l\u003dthis._writableState\u0026\u0026this._writableState.destroyed;return s||l?(a?a(e):e\u0026\u0026(this._writableState?this._writableState.errorEmitted||(this._writableState.errorEmitted\u003d!0,t.nextTick(i,this,e)):t.nextTick(i,this,e)),this):(this._readableState\u0026\u0026(this._readableState.destroyed\u003d!0),this._writableState\u0026\u0026(this._writableState.destroyed\u003d!0),this._destroy(e||null,(function(e){!a\u0026\u0026e?o._writableState?o._writableState.errorEmitted?t.nextTick(n,o):(o._writableState.errorEmitted\u003d!0,t.nextTick(r,o,e)):t.nextTick(r,o,e):a?(t.nextTick(n,o),a(e)):t.nextTick(n,o)})),this)},undestroy:function(){this._readableState\u0026\u0026(this._readableState.destroyed\u003d!1,this._readableState.reading\u003d!1,this._readableState.ended\u003d!1,this._readableState.endEmitted\u003d!1),this._writableState\u0026\u0026(this._writableState.destroyed\u003d!1,this._writableState.ended\u003d!1,this._writableState.ending\u003d!1,this._writableState.finalCalled\u003d!1,this._writableState.prefinished\u003d!1,this._writableState.finished\u003d!1,this._writableState.errorEmitted\u003d!1)},errorOrDestroy:function(t,e){var r\u003dt._readableState,n\u003dt._writableState;r\u0026\u0026r.autoDestroy||n\u0026\u0026n.autoDestroy?t.destroy(e):t.emit(\"error\",e)}}}).call(this)}).call(this,t(\"_process\"))},{_process:524}],575:[function(t,e,r){\"use strict\";var n\u003dt(\"../../../errors\").codes.ERR_STREAM_PREMATURE_CLOSE;function i(){}e.exports\u003dfunction t(e,r,a){if(\"function\"\u003d\u003dtypeof r)return t(e,null,r);r||(r\u003d{}),a\u003dfunction(t){var e\u003d!1;return function(){if(!e){e\u003d!0;for(var r\u003darguments.length,n\u003dnew Array(r),i\u003d0;i\u003cr;i++)n[i]\u003darguments[i];t.apply(this,n)}}}(a||i);var o\u003dr.readable||!1!\u003d\u003dr.readable\u0026\u0026e.readable,s\u003dr.writable||!1!\u003d\u003dr.writable\u0026\u0026e.writable,l\u003dfunction(){e.writable||u()},c\u003de._writableState\u0026\u0026e._writableState.finished,u\u003dfunction(){s\u003d!1,c\u003d!0,o||a.call(e)},f\u003de._readableState\u0026\u0026e._readableState.endEmitted,h\u003dfunction(){o\u003d!1,f\u003d!0,s||a.call(e)},p\u003dfunction(t){a.call(e,t)},d\u003dfunction(){var t;return o\u0026\u0026!f?(e._readableState\u0026\u0026e._readableState.ended||(t\u003dnew n),a.call(e,t)):s\u0026\u0026!c?(e._writableState\u0026\u0026e._writableState.ended||(t\u003dnew n),a.call(e,t)):void 0},m\u003dfunction(){e.req.on(\"finish\",u)};return!function(t){return t.setHeader\u0026\u0026\"function\"\u003d\u003dtypeof t.abort}(e)?s\u0026\u0026!e._writableState\u0026\u0026(e.on(\"end\",l),e.on(\"close\",l)):(e.on(\"complete\",u),e.on(\"abort\",d),e.req?m():e.on(\"request\",m)),e.on(\"end\",h),e.on(\"finish\",u),!1!\u003d\u003dr.error\u0026\u0026e.on(\"error\",p),e.on(\"close\",d),function(){e.removeListener(\"complete\",u),e.removeListener(\"abort\",d),e.removeListener(\"request\",m),e.req\u0026\u0026e.req.removeListener(\"finish\",u),e.removeListener(\"end\",l),e.removeListener(\"close\",l),e.removeListener(\"finish\",u),e.removeListener(\"end\",h),e.removeListener(\"error\",p),e.removeListener(\"close\",d)}}},{\"../../../errors\":566}],576:[function(t,e,r){e.exports\u003dfunction(){throw new Error(\"Readable.from is not available in the browser\")}},{}],577:[function(t,e,r){\"use strict\";var n;var i\u003dt(\"../../../errors\").codes,a\u003di.ERR_MISSING_ARGS,o\u003di.ERR_STREAM_DESTROYED;function s(t){if(t)throw t}function l(e,r,i,a){a\u003dfunction(t){var e\u003d!1;return function(){e||(e\u003d!0,t.apply(void 0,arguments))}}(a);var s\u003d!1;e.on(\"close\",(function(){s\u003d!0})),void 0\u003d\u003d\u003dn\u0026\u0026(n\u003dt(\"./end-of-stream\")),n(e,{readable:r,writable:i},(function(t){if(t)return a(t);s\u003d!0,a()}));var l\u003d!1;return function(t){if(!s\u0026\u0026!l)return l\u003d!0,function(t){return t.setHeader\u0026\u0026\"function\"\u003d\u003dtypeof t.abort}(e)?e.abort():\"function\"\u003d\u003dtypeof e.destroy?e.destroy():void a(t||new o(\"pipe\"))}}function c(t){t()}function u(t,e){return t.pipe(e)}function f(t){return t.length?\"function\"!\u003dtypeof t[t.length-1]?s:t.pop():s}e.exports\u003dfunction(){for(var t\u003darguments.length,e\u003dnew Array(t),r\u003d0;r\u003ct;r++)e[r]\u003darguments[r];var n,i\u003df(e);if(Array.isArray(e[0])\u0026\u0026(e\u003de[0]),e.length\u003c2)throw new a(\"streams\");var o\u003de.map((function(t,r){var a\u003dr\u003ce.length-1;return l(t,a,r\u003e0,(function(t){n||(n\u003dt),t\u0026\u0026o.forEach(c),a||(o.forEach(c),i(n))}))}));return e.reduce(u)}},{\"../../../errors\":566,\"./end-of-stream\":575}],578:[function(t,e,r){\"use strict\";var n\u003dt(\"../../../errors\").codes.ERR_INVALID_OPT_VALUE;e.exports\u003d{getHighWaterMark:function(t,e,r,i){var a\u003dfunction(t,e,r){return null!\u003dt.highWaterMark?t.highWaterMark:e?t[r]:null}(e,i,r);if(null!\u003da){if(!isFinite(a)||Math.floor(a)!\u003d\u003da||a\u003c0)throw new n(i?r:\"highWaterMark\",a);return Math.floor(a)}return t.objectMode?16:16384}}},{\"../../../errors\":566}],579:[function(t,e,r){e.exports\u003dt(\"events\").EventEmitter},{events:116}],580:[function(t,e,r){\"use strict\";var n\u003dt(\"safe-buffer\").Buffer,i\u003dn.isEncoding||function(t){switch((t\u003d\"\"+t)\u0026\u0026t.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function a(t){var e;switch(this.encoding\u003dfunction(t){var e\u003dfunction(t){if(!t)return\"utf8\";for(var e;;)switch(t){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return t;default:if(e)return;t\u003d(\"\"+t).toLowerCase(),e\u003d!0}}(t);if(\"string\"!\u003dtypeof e\u0026\u0026(n.isEncoding\u003d\u003d\u003di||!i(t)))throw new Error(\"Unknown encoding: \"+t);return e||t}(t),this.encoding){case\"utf16le\":this.text\u003dl,this.end\u003dc,e\u003d4;break;case\"utf8\":this.fillLast\u003ds,e\u003d4;break;case\"base64\":this.text\u003du,this.end\u003df,e\u003d3;break;default:return this.write\u003dh,void(this.end\u003dp)}this.lastNeed\u003d0,this.lastTotal\u003d0,this.lastChar\u003dn.allocUnsafe(e)}function o(t){return t\u003c\u003d127?0:t\u003e\u003e5\u003d\u003d6?2:t\u003e\u003e4\u003d\u003d14?3:t\u003e\u003e3\u003d\u003d30?4:t\u003e\u003e6\u003d\u003d2?-1:-2}function s(t){var e\u003dthis.lastTotal-this.lastNeed,r\u003dfunction(t,e,r){if(128!\u003d(192\u0026e[0]))return t.lastNeed\u003d0,\"\\ufffd\";if(t.lastNeed\u003e1\u0026\u0026e.length\u003e1){if(128!\u003d(192\u0026e[1]))return t.lastNeed\u003d1,\"\\ufffd\";if(t.lastNeed\u003e2\u0026\u0026e.length\u003e2\u0026\u0026128!\u003d(192\u0026e[2]))return t.lastNeed\u003d2,\"\\ufffd\"}}(this,t);return void 0!\u003d\u003dr?r:this.lastNeed\u003c\u003dt.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-\u003dt.length))}function l(t,e){if((t.length-e)%2\u003d\u003d0){var r\u003dt.toString(\"utf16le\",e);if(r){var n\u003dr.charCodeAt(r.length-1);if(n\u003e\u003d55296\u0026\u0026n\u003c\u003d56319)return this.lastNeed\u003d2,this.lastTotal\u003d4,this.lastChar[0]\u003dt[t.length-2],this.lastChar[1]\u003dt[t.length-1],r.slice(0,-1)}return r}return this.lastNeed\u003d1,this.lastTotal\u003d2,this.lastChar[0]\u003dt[t.length-1],t.toString(\"utf16le\",e,t.length-1)}function c(t){var e\u003dt\u0026\u0026t.length?this.write(t):\"\";if(this.lastNeed){var r\u003dthis.lastTotal-this.lastNeed;return e+this.lastChar.toString(\"utf16le\",0,r)}return e}function u(t,e){var r\u003d(t.length-e)%3;return 0\u003d\u003d\u003dr?t.toString(\"base64\",e):(this.lastNeed\u003d3-r,this.lastTotal\u003d3,1\u003d\u003d\u003dr?this.lastChar[0]\u003dt[t.length-1]:(this.lastChar[0]\u003dt[t.length-2],this.lastChar[1]\u003dt[t.length-1]),t.toString(\"base64\",e,t.length-r))}function f(t){var e\u003dt\u0026\u0026t.length?this.write(t):\"\";return this.lastNeed?e+this.lastChar.toString(\"base64\",0,3-this.lastNeed):e}function h(t){return t.toString(this.encoding)}function p(t){return t\u0026\u0026t.length?this.write(t):\"\"}r.StringDecoder\u003da,a.prototype.write\u003dfunction(t){if(0\u003d\u003d\u003dt.length)return\"\";var e,r;if(this.lastNeed){if(void 0\u003d\u003d\u003d(e\u003dthis.fillLast(t)))return\"\";r\u003dthis.lastNeed,this.lastNeed\u003d0}else r\u003d0;return r\u003ct.length?e?e+this.text(t,r):this.text(t,r):e||\"\"},a.prototype.end\u003dfunction(t){var e\u003dt\u0026\u0026t.length?this.write(t):\"\";return this.lastNeed?e+\"\\ufffd\":e},a.prototype.text\u003dfunction(t,e){var r\u003dfunction(t,e,r){var n\u003de.length-1;if(n\u003cr)return 0;var i\u003do(e[n]);if(i\u003e\u003d0)return i\u003e0\u0026\u0026(t.lastNeed\u003di-1),i;if(--n\u003cr||-2\u003d\u003d\u003di)return 0;if((i\u003do(e[n]))\u003e\u003d0)return i\u003e0\u0026\u0026(t.lastNeed\u003di-2),i;if(--n\u003cr||-2\u003d\u003d\u003di)return 0;if((i\u003do(e[n]))\u003e\u003d0)return i\u003e0\u0026\u0026(2\u003d\u003d\u003di?i\u003d0:t.lastNeed\u003di-3),i;return 0}(this,t,e);if(!this.lastNeed)return t.toString(\"utf8\",e);this.lastTotal\u003dr;var n\u003dt.length-(r-this.lastNeed);return t.copy(this.lastChar,0,n),t.toString(\"utf8\",e,n)},a.prototype.fillLast\u003dfunction(t){if(this.lastNeed\u003c\u003dt.length)return t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);t.copy(this.lastChar,this.lastTotal-this.lastNeed,0,t.length),this.lastNeed-\u003dt.length}},{\"safe-buffer\":550}],581:[function(t,e,r){(function(r,n){(function(){var r\u003dt(\"assert\"),i\u003dt(\"debug\")(\"stream-parser\");e.exports\u003dfunction(t){var e\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof t._transform,r\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof t._write;if(!e\u0026\u0026!r)throw new Error(\"must pass a Writable or Transform stream in\");i(\"extending Parser into stream\"),t._bytes\u003do,t._skipBytes\u003ds,e\u0026\u0026(t._passthrough\u003dl);e?t._transform\u003du:t._write\u003dc};function a(t){i(\"initializing parser stream\"),t._parserBytesLeft\u003d0,t._parserBuffers\u003d[],t._parserBuffered\u003d0,t._parserState\u003d-1,t._parserCallback\u003dnull,\"function\"\u003d\u003dtypeof t.push\u0026\u0026(t._parserOutput\u003dt.push.bind(t)),t._parserInit\u003d!0}function o(t,e){r(!this._parserCallback,\u0027there is already a \"callback\" set!\u0027),r(isFinite(t)\u0026\u0026t\u003e0,\u0027can only buffer a finite number of bytes \u003e 0, got \"\u0027+t+\u0027\"\u0027),this._parserInit||a(this),i(\"buffering %o bytes\",t),this._parserBytesLeft\u003dt,this._parserCallback\u003de,this._parserState\u003d0}function s(t,e){r(!this._parserCallback,\u0027there is already a \"callback\" set!\u0027),r(t\u003e0,\u0027can only skip \u003e 0 bytes, got \"\u0027+t+\u0027\"\u0027),this._parserInit||a(this),i(\"skipping %o bytes\",t),this._parserBytesLeft\u003dt,this._parserCallback\u003de,this._parserState\u003d1}function l(t,e){r(!this._parserCallback,\u0027There is already a \"callback\" set!\u0027),r(t\u003e0,\u0027can only pass through \u003e 0 bytes, got \"\u0027+t+\u0027\"\u0027),this._parserInit||a(this),i(\"passing through %o bytes\",t),this._parserBytesLeft\u003dt,this._parserCallback\u003de,this._parserState\u003d2}function c(t,e,r){this._parserInit||a(this),i(\"write(%o bytes)\",t.length),\"function\"\u003d\u003dtypeof e\u0026\u0026(r\u003de),h(this,t,null,r)}function u(t,e,r){this._parserInit||a(this),i(\"transform(%o bytes)\",t.length),\"function\"!\u003dtypeof e\u0026\u0026(e\u003dthis._parserOutput),h(this,t,e,r)}function f(t,e,r,a){if(t._parserBytesLeft-\u003de.length,i(\"%o bytes left for stream piece\",t._parserBytesLeft),0\u003d\u003d\u003dt._parserState?(t._parserBuffers.push(e),t._parserBuffered+\u003de.length):2\u003d\u003d\u003dt._parserState\u0026\u0026r(e),0!\u003d\u003dt._parserBytesLeft)return a;var o\u003dt._parserCallback;if(o\u0026\u00260\u003d\u003d\u003dt._parserState\u0026\u0026t._parserBuffers.length\u003e1\u0026\u0026(e\u003dn.concat(t._parserBuffers,t._parserBuffered)),0!\u003d\u003dt._parserState\u0026\u0026(e\u003dnull),t._parserCallback\u003dnull,t._parserBuffered\u003d0,t._parserState\u003d-1,t._parserBuffers.splice(0),o){var s\u003d[];e\u0026\u0026s.push(e),r\u0026\u0026s.push(r);var l\u003do.length\u003es.length;l\u0026\u0026s.push(p(a));var c\u003do.apply(t,s);if(!l||a\u003d\u003d\u003dc)return a}}var h\u003dp((function t(e,r,n,i){return e._parserBytesLeft\u003c\u003d0?i(new Error(\"got data but not currently parsing anything\")):r.length\u003c\u003de._parserBytesLeft?function(){return f(e,r,n,i)}:function(){var a\u003dr.slice(0,e._parserBytesLeft);return f(e,a,n,(function(o){return o?i(o):r.length\u003ea.length?function(){return t(e,r.slice(a.length),n,i)}:void 0}))}}));function p(t){return function(){for(var e\u003dt.apply(this,arguments);\"function\"\u003d\u003dtypeof e;)e\u003de();return e}}}).call(this)}).call(this,t(\"_process\"),t(\"buffer\").Buffer)},{_process:524,assert:80,buffer:117,debug:582}],582:[function(t,e,r){(function(n){(function(){function i(){var t;try{t\u003dr.storage.debug}catch(t){}return!t\u0026\u0026void 0!\u003d\u003dn\u0026\u0026\"env\"in n\u0026\u0026(t\u003dn.env.DEBUG),t}(r\u003de.exports\u003dt(\"./debug\")).log\u003dfunction(){return\"object\"\u003d\u003dtypeof console\u0026\u0026console.log\u0026\u0026Function.prototype.apply.call(console.log,console,arguments)},r.formatArgs\u003dfunction(t){var e\u003dthis.useColors;if(t[0]\u003d(e?\"%c\":\"\")+this.namespace+(e?\" %c\":\" \")+t[0]+(e?\"%c \":\" \")+\"+\"+r.humanize(this.diff),!e)return;var n\u003d\"color: \"+this.color;t.splice(1,0,n,\"color: inherit\");var i\u003d0,a\u003d0;t[0].replace(/%[a-zA-Z%]/g,(function(t){\"%%\"!\u003d\u003dt\u0026\u0026(i++,\"%c\"\u003d\u003d\u003dt\u0026\u0026(a\u003di))})),t.splice(a,0,n)},r.save\u003dfunction(t){try{null\u003d\u003dt?r.storage.removeItem(\"debug\"):r.storage.debug\u003dt}catch(t){}},r.load\u003di,r.useColors\u003dfunction(){if(\"undefined\"!\u003dtypeof window\u0026\u0026window.process\u0026\u0026\"renderer\"\u003d\u003d\u003dwindow.process.type)return!0;return\"undefined\"!\u003dtypeof document\u0026\u0026document.documentElement\u0026\u0026document.documentElement.style\u0026\u0026document.documentElement.style.WebkitAppearance||\"undefined\"!\u003dtypeof window\u0026\u0026window.console\u0026\u0026(window.console.firebug||window.console.exception\u0026\u0026window.console.table)||\"undefined\"!\u003dtypeof navigator\u0026\u0026navigator.userAgent\u0026\u0026navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)\u0026\u0026parseInt(RegExp.$1,10)\u003e\u003d31||\"undefined\"!\u003dtypeof navigator\u0026\u0026navigator.userAgent\u0026\u0026navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/)},r.storage\u003d\"undefined\"!\u003dtypeof chrome\u0026\u0026void 0!\u003d\u003dchrome.storage?chrome.storage.local:function(){try{return window.localStorage}catch(t){}}(),r.colors\u003d[\"lightseagreen\",\"forestgreen\",\"goldenrod\",\"dodgerblue\",\"darkorchid\",\"crimson\"],r.formatters.j\u003dfunction(t){try{return JSON.stringify(t)}catch(t){return\"[UnexpectedJSONParseError]: \"+t.message}},r.enable(i())}).call(this)}).call(this,t(\"_process\"))},{\"./debug\":583,_process:524}],583:[function(t,e,r){var n;function i(t){function e(){if(e.enabled){var t\u003de,i\u003d+new Date,a\u003di-(n||i);t.diff\u003da,t.prev\u003dn,t.curr\u003di,n\u003di;for(var o\u003dnew Array(arguments.length),s\u003d0;s\u003co.length;s++)o[s]\u003darguments[s];o[0]\u003dr.coerce(o[0]),\"string\"!\u003dtypeof o[0]\u0026\u0026o.unshift(\"%O\");var l\u003d0;o[0]\u003do[0].replace(/%([a-zA-Z%])/g,(function(e,n){if(\"%%\"\u003d\u003d\u003de)return e;l++;var i\u003dr.formatters[n];if(\"function\"\u003d\u003dtypeof i){var a\u003do[l];e\u003di.call(t,a),o.splice(l,1),l--}return e})),r.formatArgs.call(t,o);var c\u003de.log||r.log||console.log.bind(console);c.apply(t,o)}}return e.namespace\u003dt,e.enabled\u003dr.enabled(t),e.useColors\u003dr.useColors(),e.color\u003dfunction(t){var e,n\u003d0;for(e in t)n\u003d(n\u003c\u003c5)-n+t.charCodeAt(e),n|\u003d0;return r.colors[Math.abs(n)%r.colors.length]}(t),\"function\"\u003d\u003dtypeof r.init\u0026\u0026r.init(e),e}(r\u003de.exports\u003di.debug\u003di.default\u003di).coerce\u003dfunction(t){return t instanceof Error?t.stack||t.message:t},r.disable\u003dfunction(){r.enable(\"\")},r.enable\u003dfunction(t){r.save(t),r.names\u003d[],r.skips\u003d[];for(var e\u003d(\"string\"\u003d\u003dtypeof t?t:\"\").split(/[\\s,]+/),n\u003de.length,i\u003d0;i\u003cn;i++)e[i]\u0026\u0026(\"-\"\u003d\u003d\u003d(t\u003de[i].replace(/\\*/g,\".*?\"))[0]?r.skips.push(new RegExp(\"^\"+t.substr(1)+\"$\")):r.names.push(new RegExp(\"^\"+t+\"$\")))},r.enabled\u003dfunction(t){var e,n;for(e\u003d0,n\u003dr.skips.length;e\u003cn;e++)if(r.skips[e].test(t))return!1;for(e\u003d0,n\u003dr.names.length;e\u003cn;e++)if(r.names[e].test(t))return!0;return!1},r.humanize\u003dt(\"ms\"),r.names\u003d[],r.skips\u003d[],r.formatters\u003d{}},{ms:584}],584:[function(t,e,r){var n\u003d1e3,i\u003d6e4,a\u003d60*i,o\u003d24*a;function s(t,e,r){if(!(t\u003ce))return t\u003c1.5*e?Math.floor(t/e)+\" \"+r:Math.ceil(t/e)+\" \"+r+\"s\"}e.exports\u003dfunction(t,e){e\u003de||{};var r,l\u003dtypeof t;if(\"string\"\u003d\u003d\u003dl\u0026\u0026t.length\u003e0)return function(t){if((t\u003dString(t)).length\u003e100)return;var e\u003d/^((?:\\d+)?\\.?\\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(t);if(!e)return;var r\u003dparseFloat(e[1]);switch((e[2]||\"ms\").toLowerCase()){case\"years\":case\"year\":case\"yrs\":case\"yr\":case\"y\":return 315576e5*r;case\"days\":case\"day\":case\"d\":return r*o;case\"hours\":case\"hour\":case\"hrs\":case\"hr\":case\"h\":return r*a;case\"minutes\":case\"minute\":case\"mins\":case\"min\":case\"m\":return r*i;case\"seconds\":case\"second\":case\"secs\":case\"sec\":case\"s\":return r*n;case\"milliseconds\":case\"millisecond\":case\"msecs\":case\"msec\":case\"ms\":return r;default:return}}(t);if(\"number\"\u003d\u003d\u003dl\u0026\u0026!1\u003d\u003d\u003disNaN(t))return e.long?s(r\u003dt,o,\"day\")||s(r,a,\"hour\")||s(r,i,\"minute\")||s(r,n,\"second\")||r+\" ms\":function(t){if(t\u003e\u003do)return Math.round(t/o)+\"d\";if(t\u003e\u003da)return Math.round(t/a)+\"h\";if(t\u003e\u003di)return Math.round(t/i)+\"m\";if(t\u003e\u003dn)return Math.round(t/n)+\"s\";return t+\"ms\"}(t);throw new Error(\"val is not a non-empty string or a valid number. val\u003d\"+JSON.stringify(t))}},{}],585:[function(t,e,r){\"use strict\";var n\u003dt(\"parenthesis\");e.exports\u003dfunction(t,e,r){if(null\u003d\u003dt)throw Error(\"First argument should be a string\");if(null\u003d\u003de)throw Error(\"Separator should be a string or a RegExp\");r?(\"string\"\u003d\u003dtypeof r||Array.isArray(r))\u0026\u0026(r\u003d{ignore:r}):r\u003d{},null\u003d\u003dr.escape\u0026\u0026(r.escape\u003d!0),null\u003d\u003dr.ignore?r.ignore\u003d[\"[]\",\"()\",\"{}\",\"\u003c\u003e\",\u0027\"\"\u0027,\"\u0027\u0027\",\"``\",\"\\u201c\\u201d\",\"\\xab\\xbb\"]:(\"string\"\u003d\u003dtypeof r.ignore\u0026\u0026(r.ignore\u003d[r.ignore]),r.ignore\u003dr.ignore.map((function(t){return 1\u003d\u003d\u003dt.length\u0026\u0026(t+\u003dt),t})));var i\u003dn.parse(t,{flat:!0,brackets:r.ignore}),a\u003di[0].split(e);if(r.escape){for(var o\u003d[],s\u003d0;s\u003ca.length;s++){var l\u003da[s],c\u003da[s+1];\"\\\\\"\u003d\u003d\u003dl[l.length-1]\u0026\u0026\"\\\\\"!\u003d\u003dl[l.length-2]?(o.push(l+e+c),s++):o.push(l)}a\u003do}for(s\u003d0;s\u003ca.length;s++)i[0]\u003da[s],a[s]\u003dn.stringify(i,{flat:!0});return a}},{parenthesis:487}],586:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003dt.length,r\u003dnew Array(e),n\u003dnew Array(e),i\u003dnew Array(e),a\u003dnew Array(e),o\u003dnew Array(e),s\u003dnew Array(e),l\u003d0;l\u003ce;++l)r[l]\u003d-1,n[l]\u003d0,i[l]\u003d!1,a[l]\u003d0,o[l]\u003d-1,s[l]\u003d[];var c,u\u003d0,f\u003d[],h\u003d[];function p(e){var l\u003d[e],c\u003d[e];for(r[e]\u003dn[e]\u003du,i[e]\u003d!0,u+\u003d1;c.length\u003e0;){e\u003dc[c.length-1];var p\u003dt[e];if(a[e]\u003cp.length){for(var d\u003da[e];d\u003cp.length;++d){var m\u003dp[d];if(r[m]\u003c0){r[m]\u003dn[m]\u003du,i[m]\u003d!0,u+\u003d1,l.push(m),c.push(m);break}i[m]\u0026\u0026(n[e]\u003d0|Math.min(n[e],n[m])),o[m]\u003e\u003d0\u0026\u0026s[e].push(o[m])}a[e]\u003dd}else{if(n[e]\u003d\u003d\u003dr[e]){var g\u003d[],v\u003d[],y\u003d0;for(d\u003dl.length-1;d\u003e\u003d0;--d){var x\u003dl[d];if(i[x]\u003d!1,g.push(x),v.push(s[x]),y+\u003ds[x].length,o[x]\u003df.length,x\u003d\u003d\u003de){l.length\u003dd;break}}f.push(g);var b\u003dnew Array(y);for(d\u003d0;d\u003cv.length;d++)for(var _\u003d0;_\u003cv[d].length;_++)b[--y]\u003dv[d][_];h.push(b)}c.pop()}}}for(l\u003d0;l\u003ce;++l)r[l]\u003c0\u0026\u0026p(l);for(l\u003d0;l\u003ch.length;l++){var d\u003dh[l];if(0!\u003d\u003dd.length){d.sort((function(t,e){return t-e})),c\u003d[d[0]];for(var m\u003d1;m\u003cd.length;m++)d[m]!\u003d\u003dd[m-1]\u0026\u0026c.push(d[m]);h[l]\u003dc}}return{components:f,adjacencyList:h}}},{}],587:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){if(t.dimension\u003c\u003d0)return{positions:[],cells:[]};if(1\u003d\u003d\u003dt.dimension)return function(t,e){for(var r\u003da(t,e),n\u003dr.length,i\u003dnew Array(n),o\u003dnew Array(n),s\u003d0;s\u003cn;++s)i[s]\u003d[r[s]],o[s]\u003d[s];return{positions:i,cells:o}}(t,e);var r\u003dt.order.join()+\"-\"+t.dtype,s\u003do[r];e\u003d+e||0;s||(s\u003do[r]\u003dfunction(t,e){var r\u003dt.length,a\u003d[\"\u0027use strict\u0027;\"],o\u003d\"surfaceNets\"+t.join(\"_\")+\"d\"+e;a.push(\"var contour\u003dgenContour({\",\"order:[\",t.join(),\"],\",\"scalarArguments: 3,\",\"phase:function phaseFunc(p,a,b,c) { return (p \u003e c)|0 },\"),\"generic\"\u003d\u003d\u003de\u0026\u0026a.push(\"getters:[0],\");for(var s\u003d[],l\u003d[],c\u003d0;c\u003cr;++c)s.push(\"d\"+c),l.push(\"d\"+c);for(c\u003d0;c\u003c1\u003c\u003cr;++c)s.push(\"v\"+c),l.push(\"v\"+c);for(c\u003d0;c\u003c1\u003c\u003cr;++c)s.push(\"p\"+c),l.push(\"p\"+c);s.push(\"a\",\"b\",\"c\"),l.push(\"a\",\"c\"),a.push(\"vertex:function vertexFunc(\",s.join(),\"){\");var u\u003d[];for(c\u003d0;c\u003c1\u003c\u003cr;++c)u.push(\"(p\"+c+\"\u003c\u003c\"+c+\")\");a.push(\"var m\u003d(\",u.join(\"+\"),\")|0;if(m\u003d\u003d\u003d0||m\u003d\u003d\u003d\",(1\u003c\u003c(1\u003c\u003cr))-1,\"){return}\");var f\u003d[],h\u003d[];1\u003c\u003c(1\u003c\u003cr)\u003c\u003d128?(a.push(\"switch(m){\"),h\u003da):a.push(\"switch(m\u003e\u003e\u003e7){\");for(c\u003d0;c\u003c1\u003c\u003c(1\u003c\u003cr);++c){if(1\u003c\u003c(1\u003c\u003cr)\u003e128\u0026\u0026c%128\u003d\u003d0){f.length\u003e0\u0026\u0026h.push(\"}}\");var p\u003d\"vExtra\"+f.length;a.push(\"case \",c\u003e\u003e\u003e7,\":\",p,\"(m\u00260x7f,\",l.join(),\");break;\"),h\u003d[\"function \",p,\"(m,\",l.join(),\"){switch(m){\"],f.push(h)}h.push(\"case \",127\u0026c,\":\");for(var d\u003dnew Array(r),m\u003dnew Array(r),g\u003dnew Array(r),v\u003dnew Array(r),y\u003d0,x\u003d0;x\u003cr;++x)d[x]\u003d[],m[x]\u003d[],g[x]\u003d0,v[x]\u003d0;for(x\u003d0;x\u003c1\u003c\u003cr;++x)for(var b\u003d0;b\u003cr;++b){var _\u003dx^1\u003c\u003cb;if(!(_\u003ex)\u0026\u0026!(c\u00261\u003c\u003c_)!\u003d!(c\u00261\u003c\u003cx)){var w\u003d1;c\u00261\u003c\u003c_?m[b].push(\"v\"+_+\"-v\"+x):(m[b].push(\"v\"+x+\"-v\"+_),w\u003d-w),w\u003c0?(d[b].push(\"-v\"+x+\"-v\"+_),g[b]+\u003d2):(d[b].push(\"v\"+x+\"+v\"+_),g[b]-\u003d2),y+\u003d1;for(var T\u003d0;T\u003cr;++T)T!\u003d\u003db\u0026\u0026(_\u00261\u003c\u003cT?v[T]+\u003d1:v[T]-\u003d1)}}var k\u003d[];for(b\u003d0;b\u003cr;++b)if(0\u003d\u003d\u003dd[b].length)k.push(\"d\"+b+\"-0.5\");else{var M\u003d\"\";g[b]\u003c0?M\u003dg[b]+\"*c\":g[b]\u003e0\u0026\u0026(M\u003d\"+\"+g[b]+\"*c\");var A\u003dd[b].length/y*.5,S\u003d.5+v[b]/y*.5;k.push(\"d\"+b+\"-\"+S+\"-\"+A+\"*(\"+d[b].join(\"+\")+M+\")/(\"+m[b].join(\"+\")+\")\")}h.push(\"a.push([\",k.join(),\"]);\",\"break;\")}a.push(\"}},\"),f.length\u003e0\u0026\u0026h.push(\"}}\");var E\u003d[];for(c\u003d0;c\u003c1\u003c\u003cr-1;++c)E.push(\"v\"+c);E.push(\"c0\",\"c1\",\"p0\",\"p1\",\"a\",\"b\",\"c\"),a.push(\"cell:function cellFunc(\",E.join(),\"){\");var L\u003di(r-1);a.push(\"if(p0){b.push(\",L.map((function(t){return\"[\"+t.map((function(t){return\"v\"+t}))+\"]\"})).join(),\")}else{b.push(\",L.map((function(t){var e\u003dt.slice();return e.reverse(),\"[\"+e.map((function(t){return\"v\"+t}))+\"]\"})).join(),\")}}});function \",o,\"(array,level){var verts\u003d[],cells\u003d[];contour(array,verts,cells,level);return {positions:verts,cells:cells};} return \",o,\";\");for(c\u003d0;c\u003cf.length;++c)a.push(f[c].join(\"\"));return new Function(\"genContour\",a.join(\"\"))(n)}(t.order,t.dtype));return s(t,e)};var n\u003dt(\"ndarray-extract-contour\"),i\u003dt(\"triangulate-hypercube\"),a\u003dt(\"zero-crossings\");var o\u003d{}},{\"ndarray-extract-contour\":471,\"triangulate-hypercube\":598,\"zero-crossings\":643}],588:[function(t,e,r){\"use strict\";Object.defineProperty(r,\"__esModule\",{value:!0});var n\u003dfunction(t,e){if(Array.isArray(t))return t;if(Symbol.iterator in Object(t))return function(t,e){var r\u003d[],n\u003d!0,i\u003d!1,a\u003dvoid 0;try{for(var o,s\u003dt[Symbol.iterator]();!(n\u003d(o\u003ds.next()).done)\u0026\u0026(r.push(o.value),!e||r.length!\u003d\u003de);n\u003d!0);}catch(t){i\u003d!0,a\u003dt}finally{try{!n\u0026\u0026s.return\u0026\u0026s.return()}finally{if(i)throw a}}return r}(t,e);throw new TypeError(\"Invalid attempt to destructure non-iterable instance\")},i\u003d2*Math.PI,a\u003dfunction(t,e,r,n,i,a,o){var s\u003dt.x,l\u003dt.y;return{x:n*(s*\u003de)-i*(l*\u003dr)+a,y:i*s+n*l+o}},o\u003dfunction(t,e){var r\u003d1.5707963267948966\u003d\u003d\u003de?.551915024494:-1.5707963267948966\u003d\u003d\u003de?-.551915024494:4/3*Math.tan(e/4),n\u003dMath.cos(t),i\u003dMath.sin(t),a\u003dMath.cos(t+e),o\u003dMath.sin(t+e);return[{x:n-i*r,y:i+n*r},{x:a+o*r,y:o-a*r},{x:a,y:o}]},s\u003dfunction(t,e,r,n){var i\u003dt*r+e*n;return i\u003e1\u0026\u0026(i\u003d1),i\u003c-1\u0026\u0026(i\u003d-1),(t*n-e*r\u003c0?-1:1)*Math.acos(i)};r.default\u003dfunction(t){var e\u003dt.px,r\u003dt.py,l\u003dt.cx,c\u003dt.cy,u\u003dt.rx,f\u003dt.ry,h\u003dt.xAxisRotation,p\u003dvoid 0\u003d\u003d\u003dh?0:h,d\u003dt.largeArcFlag,m\u003dvoid 0\u003d\u003d\u003dd?0:d,g\u003dt.sweepFlag,v\u003dvoid 0\u003d\u003d\u003dg?0:g,y\u003d[];if(0\u003d\u003d\u003du||0\u003d\u003d\u003df)return[];var x\u003dMath.sin(p*i/360),b\u003dMath.cos(p*i/360),_\u003db*(e-l)/2+x*(r-c)/2,w\u003d-x*(e-l)/2+b*(r-c)/2;if(0\u003d\u003d\u003d_\u0026\u00260\u003d\u003d\u003dw)return[];u\u003dMath.abs(u),f\u003dMath.abs(f);var T\u003dMath.pow(_,2)/Math.pow(u,2)+Math.pow(w,2)/Math.pow(f,2);T\u003e1\u0026\u0026(u*\u003dMath.sqrt(T),f*\u003dMath.sqrt(T));var k\u003dfunction(t,e,r,n,a,o,l,c,u,f,h,p){var d\u003dMath.pow(a,2),m\u003dMath.pow(o,2),g\u003dMath.pow(h,2),v\u003dMath.pow(p,2),y\u003dd*m-d*v-m*g;y\u003c0\u0026\u0026(y\u003d0),y/\u003dd*v+m*g;var x\u003d(y\u003dMath.sqrt(y)*(l\u003d\u003d\u003dc?-1:1))*a/o*p,b\u003dy*-o/a*h,_\u003df*x-u*b+(t+r)/2,w\u003du*x+f*b+(e+n)/2,T\u003d(h-x)/a,k\u003d(p-b)/o,M\u003d(-h-x)/a,A\u003d(-p-b)/o,S\u003ds(1,0,T,k),E\u003ds(T,k,M,A);return 0\u003d\u003d\u003dc\u0026\u0026E\u003e0\u0026\u0026(E-\u003di),1\u003d\u003d\u003dc\u0026\u0026E\u003c0\u0026\u0026(E+\u003di),[_,w,S,E]}(e,r,l,c,u,f,m,v,x,b,_,w),M\u003dn(k,4),A\u003dM[0],S\u003dM[1],E\u003dM[2],L\u003dM[3],C\u003dMath.abs(L)/(i/4);Math.abs(1-C)\u003c1e-7\u0026\u0026(C\u003d1);var P\u003dMath.max(Math.ceil(C),1);L/\u003dP;for(var I\u003d0;I\u003cP;I++)y.push(o(E,L)),E+\u003dL;return y.map((function(t){var e\u003da(t[0],u,f,b,x,A,S),r\u003de.x,n\u003de.y,i\u003da(t[1],u,f,b,x,A,S),o\u003di.x,s\u003di.y,l\u003da(t[2],u,f,b,x,A,S);return{x1:r,y1:n,x2:o,y2:s,x:l.x,y:l.y}}))},e.exports\u003dr.default},{}],589:[function(t,e,r){\"use strict\";var n\u003dt(\"parse-svg-path\"),i\u003dt(\"abs-svg-path\"),a\u003dt(\"normalize-svg-path\"),o\u003dt(\"is-svg-path\"),s\u003dt(\"assert\");e.exports\u003dfunction(t){Array.isArray(t)\u0026\u00261\u003d\u003d\u003dt.length\u0026\u0026\"string\"\u003d\u003dtypeof t[0]\u0026\u0026(t\u003dt[0]);\"string\"\u003d\u003dtypeof t\u0026\u0026(s(o(t),\"String is not an SVG path.\"),t\u003dn(t));if(s(Array.isArray(t),\"Argument should be a string or an array of path segments.\"),t\u003di(t),!(t\u003da(t)).length)return[0,0,0,0];for(var e\u003d[1/0,1/0,-1/0,-1/0],r\u003d0,l\u003dt.length;r\u003cl;r++)for(var c\u003dt[r].slice(1),u\u003d0;u\u003cc.length;u+\u003d2)c[u+0]\u003ce[0]\u0026\u0026(e[0]\u003dc[u+0]),c[u+1]\u003ce[1]\u0026\u0026(e[1]\u003dc[u+1]),c[u+0]\u003ee[2]\u0026\u0026(e[2]\u003dc[u+0]),c[u+1]\u003ee[3]\u0026\u0026(e[3]\u003dc[u+1]);return e}},{\"abs-svg-path\":71,assert:80,\"is-svg-path\":455,\"normalize-svg-path\":590,\"parse-svg-path\":489}],590:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e,r\u003d[],o\u003d0,s\u003d0,l\u003d0,c\u003d0,u\u003dnull,f\u003dnull,h\u003d0,p\u003d0,d\u003d0,m\u003dt.length;d\u003cm;d++){var g\u003dt[d],v\u003dg[0];switch(v){case\"M\":l\u003dg[1],c\u003dg[2];break;case\"A\":var y\u003dn({px:h,py:p,cx:g[6],cy:g[7],rx:g[1],ry:g[2],xAxisRotation:g[3],largeArcFlag:g[4],sweepFlag:g[5]});if(!y.length)continue;for(var x,b\u003d0;b\u003cy.length;b++)x\u003dy[b],g\u003d[\"C\",x.x1,x.y1,x.x2,x.y2,x.x,x.y],b\u003cy.length-1\u0026\u0026r.push(g);break;case\"S\":var _\u003dh,w\u003dp;\"C\"!\u003de\u0026\u0026\"S\"!\u003de||(_+\u003d_-o,w+\u003dw-s),g\u003d[\"C\",_,w,g[1],g[2],g[3],g[4]];break;case\"T\":\"Q\"\u003d\u003de||\"T\"\u003d\u003de?(u\u003d2*h-u,f\u003d2*p-f):(u\u003dh,f\u003dp),g\u003da(h,p,u,f,g[1],g[2]);break;case\"Q\":u\u003dg[1],f\u003dg[2],g\u003da(h,p,g[1],g[2],g[3],g[4]);break;case\"L\":g\u003di(h,p,g[1],g[2]);break;case\"H\":g\u003di(h,p,g[1],p);break;case\"V\":g\u003di(h,p,h,g[1]);break;case\"Z\":g\u003di(h,p,l,c)}e\u003dv,h\u003dg[g.length-2],p\u003dg[g.length-1],g.length\u003e4?(o\u003dg[g.length-4],s\u003dg[g.length-3]):(o\u003dh,s\u003dp),r.push(g)}return r};var n\u003dt(\"svg-arc-to-cubic-bezier\");function i(t,e,r,n){return[\"C\",t,e,r,n,r,n]}function a(t,e,r,n,i,a){return[\"C\",t/3+2/3*r,e/3+2/3*n,i/3+2/3*r,a/3+2/3*n,i,a]}},{\"svg-arc-to-cubic-bezier\":588}],591:[function(t,e,r){\"use strict\";var n,i\u003dt(\"svg-path-bounds\"),a\u003dt(\"parse-svg-path\"),o\u003dt(\"draw-svg-path\"),s\u003dt(\"is-svg-path\"),l\u003dt(\"bitmap-sdf\"),c\u003ddocument.createElement(\"canvas\"),u\u003dc.getContext(\"2d\");e.exports\u003dfunction(t,e){if(!s(t))throw Error(\"Argument should be valid svg path string\");e||(e\u003d{});var r,f;e.shape?(r\u003de.shape[0],f\u003de.shape[1]):(r\u003dc.width\u003de.w||e.width||200,f\u003dc.height\u003de.h||e.height||200);var h\u003dMath.min(r,f),p\u003de.stroke||0,d\u003de.viewbox||e.viewBox||i(t),m\u003d[r/(d[2]-d[0]),f/(d[3]-d[1])],g\u003dMath.min(m[0]||0,m[1]||0)/2;u.fillStyle\u003d\"black\",u.fillRect(0,0,r,f),u.fillStyle\u003d\"white\",p\u0026\u0026(\"number\"!\u003dtypeof p\u0026\u0026(p\u003d1),u.strokeStyle\u003dp\u003e0?\"white\":\"black\",u.lineWidth\u003dMath.abs(p));if(u.translate(.5*r,.5*f),u.scale(g,g),function(){if(null!\u003dn)return n;var t\u003ddocument.createElement(\"canvas\").getContext(\"2d\");if(t.canvas.width\u003dt.canvas.height\u003d1,!window.Path2D)return n\u003d!1;var e\u003dnew Path2D(\"M0,0h1v1h-1v-1Z\");t.fillStyle\u003d\"black\",t.fill(e);var r\u003dt.getImageData(0,0,1,1);return n\u003dr\u0026\u0026r.data\u0026\u0026255\u003d\u003d\u003dr.data[3]}()){var v\u003dnew Path2D(t);u.fill(v),p\u0026\u0026u.stroke(v)}else{var y\u003da(t);o(u,y),u.fill(),p\u0026\u0026u.stroke()}return u.setTransform(1,0,0,1,0,0),l(u,{cutoff:null!\u003de.cutoff?e.cutoff:.5,radius:null!\u003de.radius?e.radius:.5*h})}},{\"bitmap-sdf\":105,\"draw-svg-path\":179,\"is-svg-path\":455,\"parse-svg-path\":489,\"svg-path-bounds\":589}],592:[function(t,e,r){(function(r){(function(){\"use strict\";e.exports\u003dfunction t(e,r,i){i\u003di||{};var o\u003da[e];o||(o\u003da[e]\u003d{\" \":{data:new Float32Array(0),shape:.2}});var s\u003do[r];if(!s)if(r.length\u003c\u003d1||!/\\d/.test(r))s\u003do[r]\u003dfunction(t){for(var e\u003dt.cells,r\u003dt.positions,n\u003dnew Float32Array(6*e.length),i\u003d0,a\u003d0,o\u003d0;o\u003ce.length;++o)for(var s\u003de[o],l\u003d0;l\u003c3;++l){var c\u003dr[s[l]];n[i++]\u003dc[0],n[i++]\u003dc[1]+1.4,a\u003dMath.max(c[0],a)}return{data:n,shape:a}}(n(r,{triangles:!0,font:e,textAlign:i.textAlign||\"left\",textBaseline:\"alphabetic\",styletags:{breaklines:!0,bolds:!0,italics:!0,subscripts:!0,superscripts:!0}}));else{for(var l\u003dr.split(/(\\d|\\s)/),c\u003dnew Array(l.length),u\u003d0,f\u003d0,h\u003d0;h\u003cl.length;++h)c[h]\u003dt(e,l[h]),u+\u003dc[h].data.length,f+\u003dc[h].shape,h\u003e0\u0026\u0026(f+\u003d.02);var p\u003dnew Float32Array(u),d\u003d0,m\u003d-.5*f;for(h\u003d0;h\u003cc.length;++h){for(var g\u003dc[h].data,v\u003d0;v\u003cg.length;v+\u003d2)p[d++]\u003dg[v]+m,p[d++]\u003dg[v+1];m+\u003dc[h].shape+.02}s\u003do[r]\u003d{data:p,shape:f}}return s};var n\u003dt(\"vectorize-text\"),i\u003dwindow||r.global||{},a\u003di.__TEXT_CACHE||{};i.__TEXT_CACHE\u003d{}}).call(this)}).call(this,t(\"_process\"))},{_process:524,\"vectorize-text\":619}],593:[function(t,e,r){(function(e,n){(function(){var i\u003dt(\"process/browser.js\").nextTick,a\u003dFunction.prototype.apply,o\u003dArray.prototype.slice,s\u003d{},l\u003d0;function c(t,e){this._id\u003dt,this._clearFn\u003de}r.setTimeout\u003dfunction(){return new c(a.call(setTimeout,window,arguments),clearTimeout)},r.setInterval\u003dfunction(){return new c(a.call(setInterval,window,arguments),clearInterval)},r.clearTimeout\u003dr.clearInterval\u003dfunction(t){t.close()},c.prototype.unref\u003dc.prototype.ref\u003dfunction(){},c.prototype.close\u003dfunction(){this._clearFn.call(window,this._id)},r.enroll\u003dfunction(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout\u003de},r.unenroll\u003dfunction(t){clearTimeout(t._idleTimeoutId),t._idleTimeout\u003d-1},r._unrefActive\u003dr.active\u003dfunction(t){clearTimeout(t._idleTimeoutId);var e\u003dt._idleTimeout;e\u003e\u003d0\u0026\u0026(t._idleTimeoutId\u003dsetTimeout((function(){t._onTimeout\u0026\u0026t._onTimeout()}),e))},r.setImmediate\u003d\"function\"\u003d\u003dtypeof e?e:function(t){var e\u003dl++,n\u003d!(arguments.length\u003c2)\u0026\u0026o.call(arguments,1);return s[e]\u003d!0,i((function(){s[e]\u0026\u0026(n?t.apply(null,n):t.call(null),r.clearImmediate(e))})),e},r.clearImmediate\u003d\"function\"\u003d\u003dtypeof n?n:function(t){delete s[t]}}).call(this)}).call(this,t(\"timers\").setImmediate,t(\"timers\").clearImmediate)},{\"process/browser.js\":524,timers:593}],594:[function(t,e,r){!function(t){var r\u003d/^\\s+/,n\u003d/\\s+$/,i\u003d0,a\u003dt.round,o\u003dt.min,s\u003dt.max,l\u003dt.random;function c(e,l){if(l\u003dl||{},(e\u003de||\"\")instanceof c)return e;if(!(this instanceof c))return new c(e,l);var u\u003dfunction(e){var i\u003d{r:0,g:0,b:0},a\u003d1,l\u003dnull,c\u003dnull,u\u003dnull,f\u003d!1,h\u003d!1;\"string\"\u003d\u003dtypeof e\u0026\u0026(e\u003dfunction(t){t\u003dt.replace(r,\"\").replace(n,\"\").toLowerCase();var e,i\u003d!1;if(S[t])t\u003dS[t],i\u003d!0;else if(\"transparent\"\u003d\u003dt)return{r:0,g:0,b:0,a:0,format:\"name\"};if(e\u003dj.rgb.exec(t))return{r:e[1],g:e[2],b:e[3]};if(e\u003dj.rgba.exec(t))return{r:e[1],g:e[2],b:e[3],a:e[4]};if(e\u003dj.hsl.exec(t))return{h:e[1],s:e[2],l:e[3]};if(e\u003dj.hsla.exec(t))return{h:e[1],s:e[2],l:e[3],a:e[4]};if(e\u003dj.hsv.exec(t))return{h:e[1],s:e[2],v:e[3]};if(e\u003dj.hsva.exec(t))return{h:e[1],s:e[2],v:e[3],a:e[4]};if(e\u003dj.hex8.exec(t))return{r:I(e[1]),g:I(e[2]),b:I(e[3]),a:R(e[4]),format:i?\"name\":\"hex8\"};if(e\u003dj.hex6.exec(t))return{r:I(e[1]),g:I(e[2]),b:I(e[3]),format:i?\"name\":\"hex\"};if(e\u003dj.hex4.exec(t))return{r:I(e[1]+\"\"+e[1]),g:I(e[2]+\"\"+e[2]),b:I(e[3]+\"\"+e[3]),a:R(e[4]+\"\"+e[4]),format:i?\"name\":\"hex8\"};if(e\u003dj.hex3.exec(t))return{r:I(e[1]+\"\"+e[1]),g:I(e[2]+\"\"+e[2]),b:I(e[3]+\"\"+e[3]),format:i?\"name\":\"hex\"};return!1}(e));\"object\"\u003d\u003dtypeof e\u0026\u0026(U(e.r)\u0026\u0026U(e.g)\u0026\u0026U(e.b)?(p\u003de.r,d\u003de.g,m\u003de.b,i\u003d{r:255*C(p,255),g:255*C(d,255),b:255*C(m,255)},f\u003d!0,h\u003d\"%\"\u003d\u003d\u003dString(e.r).substr(-1)?\"prgb\":\"rgb\"):U(e.h)\u0026\u0026U(e.s)\u0026\u0026U(e.v)?(l\u003dz(e.s),c\u003dz(e.v),i\u003dfunction(e,r,n){e\u003d6*C(e,360),r\u003dC(r,100),n\u003dC(n,100);var i\u003dt.floor(e),a\u003de-i,o\u003dn*(1-r),s\u003dn*(1-a*r),l\u003dn*(1-(1-a)*r),c\u003di%6;return{r:255*[n,s,o,o,l,n][c],g:255*[l,n,n,s,o,o][c],b:255*[o,o,l,n,n,s][c]}}(e.h,l,c),f\u003d!0,h\u003d\"hsv\"):U(e.h)\u0026\u0026U(e.s)\u0026\u0026U(e.l)\u0026\u0026(l\u003dz(e.s),u\u003dz(e.l),i\u003dfunction(t,e,r){var n,i,a;function o(t,e,r){return r\u003c0\u0026\u0026(r+\u003d1),r\u003e1\u0026\u0026(r-\u003d1),r\u003c1/6?t+6*(e-t)*r:r\u003c.5?e:r\u003c2/3?t+(e-t)*(2/3-r)*6:t}if(t\u003dC(t,360),e\u003dC(e,100),r\u003dC(r,100),0\u003d\u003d\u003de)n\u003di\u003da\u003dr;else{var s\u003dr\u003c.5?r*(1+e):r+e-r*e,l\u003d2*r-s;n\u003do(l,s,t+1/3),i\u003do(l,s,t),a\u003do(l,s,t-1/3)}return{r:255*n,g:255*i,b:255*a}}(e.h,l,u),f\u003d!0,h\u003d\"hsl\"),e.hasOwnProperty(\"a\")\u0026\u0026(a\u003de.a));var p,d,m;return a\u003dL(a),{ok:f,format:e.format||h,r:o(255,s(i.r,0)),g:o(255,s(i.g,0)),b:o(255,s(i.b,0)),a:a}}(e);this._originalInput\u003de,this._r\u003du.r,this._g\u003du.g,this._b\u003du.b,this._a\u003du.a,this._roundA\u003da(100*this._a)/100,this._format\u003dl.format||u.format,this._gradientType\u003dl.gradientType,this._r\u003c1\u0026\u0026(this._r\u003da(this._r)),this._g\u003c1\u0026\u0026(this._g\u003da(this._g)),this._b\u003c1\u0026\u0026(this._b\u003da(this._b)),this._ok\u003du.ok,this._tc_id\u003di++}function u(t,e,r){t\u003dC(t,255),e\u003dC(e,255),r\u003dC(r,255);var n,i,a\u003ds(t,e,r),l\u003do(t,e,r),c\u003d(a+l)/2;if(a\u003d\u003dl)n\u003di\u003d0;else{var u\u003da-l;switch(i\u003dc\u003e.5?u/(2-a-l):u/(a+l),a){case t:n\u003d(e-r)/u+(e\u003cr?6:0);break;case e:n\u003d(r-t)/u+2;break;case r:n\u003d(t-e)/u+4}n/\u003d6}return{h:n,s:i,l:c}}function f(t,e,r){t\u003dC(t,255),e\u003dC(e,255),r\u003dC(r,255);var n,i,a\u003ds(t,e,r),l\u003do(t,e,r),c\u003da,u\u003da-l;if(i\u003d0\u003d\u003d\u003da?0:u/a,a\u003d\u003dl)n\u003d0;else{switch(a){case t:n\u003d(e-r)/u+(e\u003cr?6:0);break;case e:n\u003d(r-t)/u+2;break;case r:n\u003d(t-e)/u+4}n/\u003d6}return{h:n,s:i,v:c}}function h(t,e,r,n){var i\u003d[O(a(t).toString(16)),O(a(e).toString(16)),O(a(r).toString(16))];return n\u0026\u0026i[0].charAt(0)\u003d\u003di[0].charAt(1)\u0026\u0026i[1].charAt(0)\u003d\u003di[1].charAt(1)\u0026\u0026i[2].charAt(0)\u003d\u003di[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join(\"\")}function p(t,e,r,n){return[O(D(n)),O(a(t).toString(16)),O(a(e).toString(16)),O(a(r).toString(16))].join(\"\")}function d(t,e){e\u003d0\u003d\u003d\u003de?0:e||10;var r\u003dc(t).toHsl();return r.s-\u003de/100,r.s\u003dP(r.s),c(r)}function m(t,e){e\u003d0\u003d\u003d\u003de?0:e||10;var r\u003dc(t).toHsl();return r.s+\u003de/100,r.s\u003dP(r.s),c(r)}function g(t){return c(t).desaturate(100)}function v(t,e){e\u003d0\u003d\u003d\u003de?0:e||10;var r\u003dc(t).toHsl();return r.l+\u003de/100,r.l\u003dP(r.l),c(r)}function y(t,e){e\u003d0\u003d\u003d\u003de?0:e||10;var r\u003dc(t).toRgb();return r.r\u003ds(0,o(255,r.r-a(-e/100*255))),r.g\u003ds(0,o(255,r.g-a(-e/100*255))),r.b\u003ds(0,o(255,r.b-a(-e/100*255))),c(r)}function x(t,e){e\u003d0\u003d\u003d\u003de?0:e||10;var r\u003dc(t).toHsl();return r.l-\u003de/100,r.l\u003dP(r.l),c(r)}function b(t,e){var r\u003dc(t).toHsl(),n\u003d(r.h+e)%360;return r.h\u003dn\u003c0?360+n:n,c(r)}function _(t){var e\u003dc(t).toHsl();return e.h\u003d(e.h+180)%360,c(e)}function w(t){var e\u003dc(t).toHsl(),r\u003de.h;return[c(t),c({h:(r+120)%360,s:e.s,l:e.l}),c({h:(r+240)%360,s:e.s,l:e.l})]}function T(t){var e\u003dc(t).toHsl(),r\u003de.h;return[c(t),c({h:(r+90)%360,s:e.s,l:e.l}),c({h:(r+180)%360,s:e.s,l:e.l}),c({h:(r+270)%360,s:e.s,l:e.l})]}function k(t){var e\u003dc(t).toHsl(),r\u003de.h;return[c(t),c({h:(r+72)%360,s:e.s,l:e.l}),c({h:(r+216)%360,s:e.s,l:e.l})]}function M(t,e,r){e\u003de||6,r\u003dr||30;var n\u003dc(t).toHsl(),i\u003d360/r,a\u003d[c(t)];for(n.h\u003d(n.h-(i*e\u003e\u003e1)+720)%360;--e;)n.h\u003d(n.h+i)%360,a.push(c(n));return a}function A(t,e){e\u003de||6;for(var r\u003dc(t).toHsv(),n\u003dr.h,i\u003dr.s,a\u003dr.v,o\u003d[],s\u003d1/e;e--;)o.push(c({h:n,s:i,v:a})),a\u003d(a+s)%1;return o}c.prototype\u003d{isDark:function(){return this.getBrightness()\u003c128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t\u003dthis.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var e,r,n,i\u003dthis.toRgb();return e\u003di.r/255,r\u003di.g/255,n\u003di.b/255,.2126*(e\u003c\u003d.03928?e/12.92:t.pow((e+.055)/1.055,2.4))+.7152*(r\u003c\u003d.03928?r/12.92:t.pow((r+.055)/1.055,2.4))+.0722*(n\u003c\u003d.03928?n/12.92:t.pow((n+.055)/1.055,2.4))},setAlpha:function(t){return this._a\u003dL(t),this._roundA\u003da(100*this._a)/100,this},toHsv:function(){var t\u003df(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t\u003df(this._r,this._g,this._b),e\u003da(360*t.h),r\u003da(100*t.s),n\u003da(100*t.v);return 1\u003d\u003dthis._a?\"hsv(\"+e+\", \"+r+\"%, \"+n+\"%)\":\"hsva(\"+e+\", \"+r+\"%, \"+n+\"%, \"+this._roundA+\")\"},toHsl:function(){var t\u003du(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t\u003du(this._r,this._g,this._b),e\u003da(360*t.h),r\u003da(100*t.s),n\u003da(100*t.l);return 1\u003d\u003dthis._a?\"hsl(\"+e+\", \"+r+\"%, \"+n+\"%)\":\"hsla(\"+e+\", \"+r+\"%, \"+n+\"%, \"+this._roundA+\")\"},toHex:function(t){return h(this._r,this._g,this._b,t)},toHexString:function(t){return\"#\"+this.toHex(t)},toHex8:function(t){return function(t,e,r,n,i){var o\u003d[O(a(t).toString(16)),O(a(e).toString(16)),O(a(r).toString(16)),O(D(n))];if(i\u0026\u0026o[0].charAt(0)\u003d\u003do[0].charAt(1)\u0026\u0026o[1].charAt(0)\u003d\u003do[1].charAt(1)\u0026\u0026o[2].charAt(0)\u003d\u003do[2].charAt(1)\u0026\u0026o[3].charAt(0)\u003d\u003do[3].charAt(1))return o[0].charAt(0)+o[1].charAt(0)+o[2].charAt(0)+o[3].charAt(0);return o.join(\"\")}(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return\"#\"+this.toHex8(t)},toRgb:function(){return{r:a(this._r),g:a(this._g),b:a(this._b),a:this._a}},toRgbString:function(){return 1\u003d\u003dthis._a?\"rgb(\"+a(this._r)+\", \"+a(this._g)+\", \"+a(this._b)+\")\":\"rgba(\"+a(this._r)+\", \"+a(this._g)+\", \"+a(this._b)+\", \"+this._roundA+\")\"},toPercentageRgb:function(){return{r:a(100*C(this._r,255))+\"%\",g:a(100*C(this._g,255))+\"%\",b:a(100*C(this._b,255))+\"%\",a:this._a}},toPercentageRgbString:function(){return 1\u003d\u003dthis._a?\"rgb(\"+a(100*C(this._r,255))+\"%, \"+a(100*C(this._g,255))+\"%, \"+a(100*C(this._b,255))+\"%)\":\"rgba(\"+a(100*C(this._r,255))+\"%, \"+a(100*C(this._g,255))+\"%, \"+a(100*C(this._b,255))+\"%, \"+this._roundA+\")\"},toName:function(){return 0\u003d\u003d\u003dthis._a?\"transparent\":!(this._a\u003c1)\u0026\u0026(E[h(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e\u003d\"#\"+p(this._r,this._g,this._b,this._a),r\u003de,n\u003dthis._gradientType?\"GradientType \u003d 1, \":\"\";if(t){var i\u003dc(t);r\u003d\"#\"+p(i._r,i._g,i._b,i._a)}return\"progid:DXImageTransform.Microsoft.gradient(\"+n+\"startColorstr\u003d\"+e+\",endColorstr\u003d\"+r+\")\"},toString:function(t){var e\u003d!!t;t\u003dt||this._format;var r\u003d!1,n\u003dthis._a\u003c1\u0026\u0026this._a\u003e\u003d0;return e||!n||\"hex\"!\u003d\u003dt\u0026\u0026\"hex6\"!\u003d\u003dt\u0026\u0026\"hex3\"!\u003d\u003dt\u0026\u0026\"hex4\"!\u003d\u003dt\u0026\u0026\"hex8\"!\u003d\u003dt\u0026\u0026\"name\"!\u003d\u003dt?(\"rgb\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toRgbString()),\"prgb\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toPercentageRgbString()),\"hex\"!\u003d\u003dt\u0026\u0026\"hex6\"!\u003d\u003dt||(r\u003dthis.toHexString()),\"hex3\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toHexString(!0)),\"hex4\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toHex8String(!0)),\"hex8\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toHex8String()),\"name\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toName()),\"hsl\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toHslString()),\"hsv\"\u003d\u003d\u003dt\u0026\u0026(r\u003dthis.toHsvString()),r||this.toHexString()):\"name\"\u003d\u003d\u003dt\u0026\u00260\u003d\u003d\u003dthis._a?this.toName():this.toRgbString()},clone:function(){return c(this.toString())},_applyModification:function(t,e){var r\u003dt.apply(null,[this].concat([].slice.call(e)));return this._r\u003dr._r,this._g\u003dr._g,this._b\u003dr._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(v,arguments)},brighten:function(){return this._applyModification(y,arguments)},darken:function(){return this._applyModification(x,arguments)},desaturate:function(){return this._applyModification(d,arguments)},saturate:function(){return this._applyModification(m,arguments)},greyscale:function(){return this._applyModification(g,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(M,arguments)},complement:function(){return this._applyCombination(_,arguments)},monochromatic:function(){return this._applyCombination(A,arguments)},splitcomplement:function(){return this._applyCombination(k,arguments)},triad:function(){return this._applyCombination(w,arguments)},tetrad:function(){return this._applyCombination(T,arguments)}},c.fromRatio\u003dfunction(t,e){if(\"object\"\u003d\u003dtypeof t){var r\u003d{};for(var n in t)t.hasOwnProperty(n)\u0026\u0026(r[n]\u003d\"a\"\u003d\u003d\u003dn?t[n]:z(t[n]));t\u003dr}return c(t,e)},c.equals\u003dfunction(t,e){return!(!t||!e)\u0026\u0026c(t).toRgbString()\u003d\u003dc(e).toRgbString()},c.random\u003dfunction(){return c.fromRatio({r:l(),g:l(),b:l()})},c.mix\u003dfunction(t,e,r){r\u003d0\u003d\u003d\u003dr?0:r||50;var n\u003dc(t).toRgb(),i\u003dc(e).toRgb(),a\u003dr/100;return c({r:(i.r-n.r)*a+n.r,g:(i.g-n.g)*a+n.g,b:(i.b-n.b)*a+n.b,a:(i.a-n.a)*a+n.a})},c.readability\u003dfunction(e,r){var n\u003dc(e),i\u003dc(r);return(t.max(n.getLuminance(),i.getLuminance())+.05)/(t.min(n.getLuminance(),i.getLuminance())+.05)},c.isReadable\u003dfunction(t,e,r){var n,i,a\u003dc.readability(t,e);switch(i\u003d!1,(n\u003dfunction(t){var e,r;e\u003d((t\u003dt||{level:\"AA\",size:\"small\"}).level||\"AA\").toUpperCase(),r\u003d(t.size||\"small\").toLowerCase(),\"AA\"!\u003d\u003de\u0026\u0026\"AAA\"!\u003d\u003de\u0026\u0026(e\u003d\"AA\");\"small\"!\u003d\u003dr\u0026\u0026\"large\"!\u003d\u003dr\u0026\u0026(r\u003d\"small\");return{level:e,size:r}}(r)).level+n.size){case\"AAsmall\":case\"AAAlarge\":i\u003da\u003e\u003d4.5;break;case\"AAlarge\":i\u003da\u003e\u003d3;break;case\"AAAsmall\":i\u003da\u003e\u003d7}return i},c.mostReadable\u003dfunction(t,e,r){var n,i,a,o,s\u003dnull,l\u003d0;i\u003d(r\u003dr||{}).includeFallbackColors,a\u003dr.level,o\u003dr.size;for(var u\u003d0;u\u003ce.length;u++)(n\u003dc.readability(t,e[u]))\u003el\u0026\u0026(l\u003dn,s\u003dc(e[u]));return c.isReadable(t,s,{level:a,size:o})||!i?s:(r.includeFallbackColors\u003d!1,c.mostReadable(t,[\"#fff\",\"#000\"],r))};var S\u003dc.names\u003d{aliceblue:\"f0f8ff\",antiquewhite:\"faebd7\",aqua:\"0ff\",aquamarine:\"7fffd4\",azure:\"f0ffff\",beige:\"f5f5dc\",bisque:\"ffe4c4\",black:\"000\",blanchedalmond:\"ffebcd\",blue:\"00f\",blueviolet:\"8a2be2\",brown:\"a52a2a\",burlywood:\"deb887\",burntsienna:\"ea7e5d\",cadetblue:\"5f9ea0\",chartreuse:\"7fff00\",chocolate:\"d2691e\",coral:\"ff7f50\",cornflowerblue:\"6495ed\",cornsilk:\"fff8dc\",crimson:\"dc143c\",cyan:\"0ff\",darkblue:\"00008b\",darkcyan:\"008b8b\",darkgoldenrod:\"b8860b\",darkgray:\"a9a9a9\",darkgreen:\"006400\",darkgrey:\"a9a9a9\",darkkhaki:\"bdb76b\",darkmagenta:\"8b008b\",darkolivegreen:\"556b2f\",darkorange:\"ff8c00\",darkorchid:\"9932cc\",darkred:\"8b0000\",darksalmon:\"e9967a\",darkseagreen:\"8fbc8f\",darkslateblue:\"483d8b\",darkslategray:\"2f4f4f\",darkslategrey:\"2f4f4f\",darkturquoise:\"00ced1\",darkviolet:\"9400d3\",deeppink:\"ff1493\",deepskyblue:\"00bfff\",dimgray:\"696969\",dimgrey:\"696969\",dodgerblue:\"1e90ff\",firebrick:\"b22222\",floralwhite:\"fffaf0\",forestgreen:\"228b22\",fuchsia:\"f0f\",gainsboro:\"dcdcdc\",ghostwhite:\"f8f8ff\",gold:\"ffd700\",goldenrod:\"daa520\",gray:\"808080\",green:\"008000\",greenyellow:\"adff2f\",grey:\"808080\",honeydew:\"f0fff0\",hotpink:\"ff69b4\",indianred:\"cd5c5c\",indigo:\"4b0082\",ivory:\"fffff0\",khaki:\"f0e68c\",lavender:\"e6e6fa\",lavenderblush:\"fff0f5\",lawngreen:\"7cfc00\",lemonchiffon:\"fffacd\",lightblue:\"add8e6\",lightcoral:\"f08080\",lightcyan:\"e0ffff\",lightgoldenrodyellow:\"fafad2\",lightgray:\"d3d3d3\",lightgreen:\"90ee90\",lightgrey:\"d3d3d3\",lightpink:\"ffb6c1\",lightsalmon:\"ffa07a\",lightseagreen:\"20b2aa\",lightskyblue:\"87cefa\",lightslategray:\"789\",lightslategrey:\"789\",lightsteelblue:\"b0c4de\",lightyellow:\"ffffe0\",lime:\"0f0\",limegreen:\"32cd32\",linen:\"faf0e6\",magenta:\"f0f\",maroon:\"800000\",mediumaquamarine:\"66cdaa\",mediumblue:\"0000cd\",mediumorchid:\"ba55d3\",mediumpurple:\"9370db\",mediumseagreen:\"3cb371\",mediumslateblue:\"7b68ee\",mediumspringgreen:\"00fa9a\",mediumturquoise:\"48d1cc\",mediumvioletred:\"c71585\",midnightblue:\"191970\",mintcream:\"f5fffa\",mistyrose:\"ffe4e1\",moccasin:\"ffe4b5\",navajowhite:\"ffdead\",navy:\"000080\",oldlace:\"fdf5e6\",olive:\"808000\",olivedrab:\"6b8e23\",orange:\"ffa500\",orangered:\"ff4500\",orchid:\"da70d6\",palegoldenrod:\"eee8aa\",palegreen:\"98fb98\",paleturquoise:\"afeeee\",palevioletred:\"db7093\",papayawhip:\"ffefd5\",peachpuff:\"ffdab9\",peru:\"cd853f\",pink:\"ffc0cb\",plum:\"dda0dd\",powderblue:\"b0e0e6\",purple:\"800080\",rebeccapurple:\"663399\",red:\"f00\",rosybrown:\"bc8f8f\",royalblue:\"4169e1\",saddlebrown:\"8b4513\",salmon:\"fa8072\",sandybrown:\"f4a460\",seagreen:\"2e8b57\",seashell:\"fff5ee\",sienna:\"a0522d\",silver:\"c0c0c0\",skyblue:\"87ceeb\",slateblue:\"6a5acd\",slategray:\"708090\",slategrey:\"708090\",snow:\"fffafa\",springgreen:\"00ff7f\",steelblue:\"4682b4\",tan:\"d2b48c\",teal:\"008080\",thistle:\"d8bfd8\",tomato:\"ff6347\",turquoise:\"40e0d0\",violet:\"ee82ee\",wheat:\"f5deb3\",white:\"fff\",whitesmoke:\"f5f5f5\",yellow:\"ff0\",yellowgreen:\"9acd32\"},E\u003dc.hexNames\u003dfunction(t){var e\u003d{};for(var r in t)t.hasOwnProperty(r)\u0026\u0026(e[t[r]]\u003dr);return e}(S);function L(t){return t\u003dparseFloat(t),(isNaN(t)||t\u003c0||t\u003e1)\u0026\u0026(t\u003d1),t}function C(e,r){(function(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026-1!\u003dt.indexOf(\".\")\u0026\u00261\u003d\u003d\u003dparseFloat(t)})(e)\u0026\u0026(e\u003d\"100%\");var n\u003dfunction(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026-1!\u003dt.indexOf(\"%\")}(e);return e\u003do(r,s(0,parseFloat(e))),n\u0026\u0026(e\u003dparseInt(e*r,10)/100),t.abs(e-r)\u003c1e-6?1:e%r/parseFloat(r)}function P(t){return o(1,s(0,t))}function I(t){return parseInt(t,16)}function O(t){return 1\u003d\u003dt.length?\"0\"+t:\"\"+t}function z(t){return t\u003c\u003d1\u0026\u0026(t\u003d100*t+\"%\"),t}function D(e){return t.round(255*parseFloat(e)).toString(16)}function R(t){return I(t)/255}var F,B,N,j\u003d(B\u003d\"[\\\\s|\\\\(]+(\"+(F\u003d\"(?:[-\\\\+]?\\\\d*\\\\.\\\\d+%?)|(?:[-\\\\+]?\\\\d+%?)\")+\")[,|\\\\s]+(\"+F+\")[,|\\\\s]+(\"+F+\")\\\\s*\\\\)?\",N\u003d\"[\\\\s|\\\\(]+(\"+F+\")[,|\\\\s]+(\"+F+\")[,|\\\\s]+(\"+F+\")[,|\\\\s]+(\"+F+\")\\\\s*\\\\)?\",{CSS_UNIT:new RegExp(F),rgb:new RegExp(\"rgb\"+B),rgba:new RegExp(\"rgba\"+N),hsl:new RegExp(\"hsl\"+B),hsla:new RegExp(\"hsla\"+N),hsv:new RegExp(\"hsv\"+B),hsva:new RegExp(\"hsva\"+N),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});function U(t){return!!j.CSS_UNIT.exec(t)}void 0!\u003d\u003de\u0026\u0026e.exports?e.exports\u003dc:window.tinycolor\u003dc}(Math)},{}],595:[function(t,e,r){\"use strict\";e.exports\u003di,e.exports.float32\u003de.exports.float\u003di,e.exports.fract32\u003de.exports.fract\u003dfunction(t){if(t.length){for(var e\u003di(t),r\u003d0,n\u003de.length;r\u003cn;r++)e[r]\u003dt[r]-e[r];return e}return i(t-i(t))};var n\u003dnew Float32Array(1);function i(t){if(t.length){if(t instanceof Float32Array)return t;var e\u003dnew Float32Array(t);return e.set(t),e}return n[0]\u003dt,n[0]}},{}],596:[function(t,e,r){\"use strict\";var n\u003dt(\"parse-unit\");e.exports\u003da;function i(t,e){var r\u003dn(getComputedStyle(t).getPropertyValue(e));return r[0]*a(r[1],t)}function a(t,e){switch(e\u003de||document.body,t\u003d(t||\"px\").trim().toLowerCase(),e!\u003d\u003dwindow\u0026\u0026e!\u003d\u003ddocument||(e\u003ddocument.body),t){case\"%\":return e.clientHeight/100;case\"ch\":case\"ex\":return function(t,e){var r\u003ddocument.createElement(\"div\");r.style[\"font-size\"]\u003d\"128\"+t,e.appendChild(r);var n\u003di(r,\"font-size\")/128;return e.removeChild(r),n}(t,e);case\"em\":return i(e,\"font-size\");case\"rem\":return i(document.body,\"font-size\");case\"vw\":return window.innerWidth/100;case\"vh\":return window.innerHeight/100;case\"vmin\":return Math.min(window.innerWidth,window.innerHeight)/100;case\"vmax\":return Math.max(window.innerWidth,window.innerHeight)/100;case\"in\":return 96;case\"cm\":return 96/2.54;case\"mm\":return 96/25.4;case\"pt\":return 96/72;case\"pc\":return 16}return 1}},{\"parse-unit\":490}],597:[function(t,e,r){!function(t,n){\"object\"\u003d\u003dtypeof r\u0026\u0026void 0!\u003d\u003de?n(r):n((t\u003dt||self).topojson\u003dt.topojson||{})}(this,(function(t){\"use strict\";function e(t){return t}function r(t){if(null\u003d\u003dt)return e;var r,n,i\u003dt.scale[0],a\u003dt.scale[1],o\u003dt.translate[0],s\u003dt.translate[1];return function(t,e){e||(r\u003dn\u003d0);var l\u003d2,c\u003dt.length,u\u003dnew Array(c);for(u[0]\u003d(r+\u003dt[0])*i+o,u[1]\u003d(n+\u003dt[1])*a+s;l\u003cc;)u[l]\u003dt[l],++l;return u}}function n(t){var e,n\u003dr(t.transform),i\u003d1/0,a\u003di,o\u003d-i,s\u003d-i;function l(t){(t\u003dn(t))[0]\u003ci\u0026\u0026(i\u003dt[0]),t[0]\u003eo\u0026\u0026(o\u003dt[0]),t[1]\u003ca\u0026\u0026(a\u003dt[1]),t[1]\u003es\u0026\u0026(s\u003dt[1])}function c(t){switch(t.type){case\"GeometryCollection\":t.geometries.forEach(c);break;case\"Point\":l(t.coordinates);break;case\"MultiPoint\":t.coordinates.forEach(l)}}for(e in t.arcs.forEach((function(t){for(var e,r\u003d-1,l\u003dt.length;++r\u003cl;)(e\u003dn(t[r],r))[0]\u003ci\u0026\u0026(i\u003de[0]),e[0]\u003eo\u0026\u0026(o\u003de[0]),e[1]\u003ca\u0026\u0026(a\u003de[1]),e[1]\u003es\u0026\u0026(s\u003de[1])})),t.objects)c(t.objects[e]);return[i,a,o,s]}function i(t,e){var r\u003de.id,n\u003de.bbox,i\u003dnull\u003d\u003de.properties?{}:e.properties,o\u003da(t,e);return null\u003d\u003dr\u0026\u0026null\u003d\u003dn?{type:\"Feature\",properties:i,geometry:o}:null\u003d\u003dn?{type:\"Feature\",id:r,properties:i,geometry:o}:{type:\"Feature\",id:r,bbox:n,properties:i,geometry:o}}function a(t,e){var n\u003dr(t.transform),i\u003dt.arcs;function a(t,e){e.length\u0026\u0026e.pop();for(var r\u003di[t\u003c0?~t:t],a\u003d0,o\u003dr.length;a\u003co;++a)e.push(n(r[a],a));t\u003c0\u0026\u0026function(t,e){for(var r,n\u003dt.length,i\u003dn-e;i\u003c--n;)r\u003dt[i],t[i++]\u003dt[n],t[n]\u003dr}(e,o)}function o(t){return n(t)}function s(t){for(var e\u003d[],r\u003d0,n\u003dt.length;r\u003cn;++r)a(t[r],e);return e.length\u003c2\u0026\u0026e.push(e[0]),e}function l(t){for(var e\u003ds(t);e.length\u003c4;)e.push(e[0]);return e}function c(t){return t.map(l)}return function t(e){var r,n\u003de.type;switch(n){case\"GeometryCollection\":return{type:n,geometries:e.geometries.map(t)};case\"Point\":r\u003do(e.coordinates);break;case\"MultiPoint\":r\u003de.coordinates.map(o);break;case\"LineString\":r\u003ds(e.arcs);break;case\"MultiLineString\":r\u003de.arcs.map(s);break;case\"Polygon\":r\u003dc(e.arcs);break;case\"MultiPolygon\":r\u003de.arcs.map(c);break;default:return null}return{type:n,coordinates:r}}(e)}function o(t,e){var r\u003d{},n\u003d{},i\u003d{},a\u003d[],o\u003d-1;function s(t,e){for(var n in t){var i\u003dt[n];delete e[i.start],delete i.start,delete i.end,i.forEach((function(t){r[t\u003c0?~t:t]\u003d1})),a.push(i)}}return e.forEach((function(r,n){var i,a\u003dt.arcs[r\u003c0?~r:r];a.length\u003c3\u0026\u0026!a[1][0]\u0026\u0026!a[1][1]\u0026\u0026(i\u003de[++o],e[o]\u003dr,e[n]\u003di)})),e.forEach((function(e){var r,a,o\u003dfunction(e){var r,n\u003dt.arcs[e\u003c0?~e:e],i\u003dn[0];t.transform?(r\u003d[0,0],n.forEach((function(t){r[0]+\u003dt[0],r[1]+\u003dt[1]}))):r\u003dn[n.length-1];return e\u003c0?[r,i]:[i,r]}(e),s\u003do[0],l\u003do[1];if(r\u003di[s])if(delete i[r.end],r.push(e),r.end\u003dl,a\u003dn[l]){delete n[a.start];var c\u003da\u003d\u003d\u003dr?r:r.concat(a);n[c.start\u003dr.start]\u003di[c.end\u003da.end]\u003dc}else n[r.start]\u003di[r.end]\u003dr;else if(r\u003dn[l])if(delete n[r.start],r.unshift(e),r.start\u003ds,a\u003di[s]){delete i[a.end];var u\u003da\u003d\u003d\u003dr?r:a.concat(r);n[u.start\u003da.start]\u003di[u.end\u003dr.end]\u003du}else n[r.start]\u003di[r.end]\u003dr;else n[(r\u003d[e]).start\u003ds]\u003di[r.end\u003dl]\u003dr})),s(i,n),s(n,i),e.forEach((function(t){r[t\u003c0?~t:t]||a.push([t])})),a}function s(t,e,r){var n,i,a;if(arguments.length\u003e1)n\u003dl(t,e,r);else for(i\u003d0,n\u003dnew Array(a\u003dt.arcs.length);i\u003ca;++i)n[i]\u003di;return{type:\"MultiLineString\",arcs:o(t,n)}}function l(t,e,r){var n,i\u003d[],a\u003d[];function o(t){var e\u003dt\u003c0?~t:t;(a[e]||(a[e]\u003d[])).push({i:t,g:n})}function s(t){t.forEach(o)}function l(t){t.forEach(s)}return function t(e){switch(n\u003de,e.type){case\"GeometryCollection\":e.geometries.forEach(t);break;case\"LineString\":s(e.arcs);break;case\"MultiLineString\":case\"Polygon\":l(e.arcs);break;case\"MultiPolygon\":!function(t){t.forEach(l)}(e.arcs)}}(e),a.forEach(null\u003d\u003dr?function(t){i.push(t[0].i)}:function(t){r(t[0].g,t[t.length-1].g)\u0026\u0026i.push(t[0].i)}),i}function c(t,e){var r\u003d{},n\u003d[],i\u003d[];function s(t){t.forEach((function(e){e.forEach((function(e){(r[e\u003de\u003c0?~e:e]||(r[e]\u003d[])).push(t)}))})),n.push(t)}function l(e){return function(t){for(var e,r\u003d-1,n\u003dt.length,i\u003dt[n-1],a\u003d0;++r\u003cn;)e\u003di,i\u003dt[r],a+\u003de[0]*i[1]-e[1]*i[0];return Math.abs(a)}(a(t,{type:\"Polygon\",arcs:[e]}).coordinates[0])}return e.forEach((function t(e){switch(e.type){case\"GeometryCollection\":e.geometries.forEach(t);break;case\"Polygon\":s(e.arcs);break;case\"MultiPolygon\":e.arcs.forEach(s)}})),n.forEach((function(t){if(!t._){var e\u003d[],n\u003d[t];for(t._\u003d1,i.push(e);t\u003dn.pop();)e.push(t),t.forEach((function(t){t.forEach((function(t){r[t\u003c0?~t:t].forEach((function(t){t._||(t._\u003d1,n.push(t))}))}))}))}})),n.forEach((function(t){delete t._})),{type:\"MultiPolygon\",arcs:i.map((function(e){var n,i\u003d[];if(e.forEach((function(t){t.forEach((function(t){t.forEach((function(t){r[t\u003c0?~t:t].length\u003c2\u0026\u0026i.push(t)}))}))})),(n\u003d(i\u003do(t,i)).length)\u003e1)for(var a,s,c\u003d1,u\u003dl(i[0]);c\u003cn;++c)(a\u003dl(i[c]))\u003eu\u0026\u0026(s\u003di[0],i[0]\u003di[c],i[c]\u003ds,u\u003da);return i})).filter((function(t){return t.length\u003e0}))}}function u(t,e){for(var r\u003d0,n\u003dt.length;r\u003cn;){var i\u003dr+n\u003e\u003e\u003e1;t[i]\u003ce?r\u003di+1:n\u003di}return r}function f(t){if(null\u003d\u003dt)return e;var r,n,i\u003dt.scale[0],a\u003dt.scale[1],o\u003dt.translate[0],s\u003dt.translate[1];return function(t,e){e||(r\u003dn\u003d0);var l\u003d2,c\u003dt.length,u\u003dnew Array(c),f\u003dMath.round((t[0]-o)/i),h\u003dMath.round((t[1]-s)/a);for(u[0]\u003df-r,r\u003df,u[1]\u003dh-n,n\u003dh;l\u003cc;)u[l]\u003dt[l],++l;return u}}t.bbox\u003dn,t.feature\u003dfunction(t,e){return\"string\"\u003d\u003dtypeof e\u0026\u0026(e\u003dt.objects[e]),\"GeometryCollection\"\u003d\u003d\u003de.type?{type:\"FeatureCollection\",features:e.geometries.map((function(e){return i(t,e)}))}:i(t,e)},t.merge\u003dfunction(t){return a(t,c.apply(this,arguments))},t.mergeArcs\u003dc,t.mesh\u003dfunction(t){return a(t,s.apply(this,arguments))},t.meshArcs\u003ds,t.neighbors\u003dfunction(t){var e\u003d{},r\u003dt.map((function(){return[]}));function n(t,r){t.forEach((function(t){t\u003c0\u0026\u0026(t\u003d~t);var n\u003de[t];n?n.push(r):e[t]\u003d[r]}))}function i(t,e){t.forEach((function(t){n(t,e)}))}var a\u003d{LineString:n,MultiLineString:i,Polygon:i,MultiPolygon:function(t,e){t.forEach((function(t){i(t,e)}))}};for(var o in t.forEach((function t(e,r){\"GeometryCollection\"\u003d\u003d\u003de.type?e.geometries.forEach((function(e){t(e,r)})):e.type in a\u0026\u0026a[e.type](e.arcs,r)})),e)for(var s\u003de[o],l\u003ds.length,c\u003d0;c\u003cl;++c)for(var f\u003dc+1;f\u003cl;++f){var h,p\u003ds[c],d\u003ds[f];(h\u003dr[p])[o\u003du(h,d)]!\u003d\u003dd\u0026\u0026h.splice(o,0,d),(h\u003dr[d])[o\u003du(h,p)]!\u003d\u003dp\u0026\u0026h.splice(o,0,p)}return r},t.quantize\u003dfunction(t,e){if(t.transform)throw new Error(\"already quantized\");if(e\u0026\u0026e.scale)l\u003dt.bbox;else{if(!((r\u003dMath.floor(e))\u003e\u003d2))throw new Error(\"n must be \\u22652\");var r,i\u003d(l\u003dt.bbox||n(t))[0],a\u003dl[1],o\u003dl[2],s\u003dl[3];e\u003d{scale:[o-i?(o-i)/(r-1):1,s-a?(s-a)/(r-1):1],translate:[i,a]}}var l,c,u\u003df(e),h\u003dt.objects,p\u003d{};function d(t){return u(t)}function m(t){var e;switch(t.type){case\"GeometryCollection\":e\u003d{type:\"GeometryCollection\",geometries:t.geometries.map(m)};break;case\"Point\":e\u003d{type:\"Point\",coordinates:d(t.coordinates)};break;case\"MultiPoint\":e\u003d{type:\"MultiPoint\",coordinates:t.coordinates.map(d)};break;default:return t}return null!\u003dt.id\u0026\u0026(e.id\u003dt.id),null!\u003dt.bbox\u0026\u0026(e.bbox\u003dt.bbox),null!\u003dt.properties\u0026\u0026(e.properties\u003dt.properties),e}for(c in h)p[c]\u003dm(h[c]);return{type:\"Topology\",bbox:l,transform:e,objects:p,arcs:t.arcs.map((function(t){var e,r\u003d0,n\u003d1,i\u003dt.length,a\u003dnew Array(i);for(a[0]\u003du(t[0],0);++r\u003ci;)((e\u003du(t[r],r))[0]||e[1])\u0026\u0026(a[n++]\u003de);return 1\u003d\u003d\u003dn\u0026\u0026(a[n++]\u003d[0,0]),a.length\u003dn,a}))}},t.transform\u003dr,t.untransform\u003df,Object.defineProperty(t,\"__esModule\",{value:!0})}))},{}],598:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){if(t\u003c0)return[];if(0\u003d\u003d\u003dt)return[[0]];for(var e\u003d0|Math.round(a(t+1)),r\u003d[],o\u003d0;o\u003ce;++o){for(var s\u003dn.unrank(t,o),l\u003d[0],c\u003d0,u\u003d0;u\u003cs.length;++u)c+\u003d1\u003c\u003cs[u],l.push(c);i(s)\u003c1\u0026\u0026(l[0]\u003dc,l[t]\u003d0),r.push(l)}return r};var n\u003dt(\"permutation-rank\"),i\u003dt(\"permutation-parity\"),a\u003dt(\"gamma\")},{gamma:252,\"permutation-parity\":492,\"permutation-rank\":493}],599:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003d(t\u003dt||{}).center||[0,0,0],r\u003dt.up||[0,1,0],n\u003dt.right||f(r),i\u003dt.radius||1,a\u003dt.theta||0,u\u003dt.phi||0;if(e\u003d[].slice.call(e,0,3),r\u003d[].slice.call(r,0,3),s(r,r),n\u003d[].slice.call(n,0,3),s(n,n),\"eye\"in t){var p\u003dt.eye,d\u003d[p[0]-e[0],p[1]-e[1],p[2]-e[2]];o(n,d,r),c(n[0],n[1],n[2])\u003c1e-6?n\u003df(r):s(n,n),i\u003dc(d[0],d[1],d[2]);var m\u003dl(r,d)/i,g\u003dl(n,d)/i;u\u003dMath.acos(m),a\u003dMath.acos(g)}return i\u003dMath.log(i),new h(t.zoomMin,t.zoomMax,e,r,n,i,a,u)};var n\u003dt(\"filtered-vector\"),i\u003dt(\"gl-mat4/invert\"),a\u003dt(\"gl-mat4/rotate\"),o\u003dt(\"gl-vec3/cross\"),s\u003dt(\"gl-vec3/normalize\"),l\u003dt(\"gl-vec3/dot\");function c(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function u(t){return Math.min(1,Math.max(-1,t))}function f(t){var e\u003dMath.abs(t[0]),r\u003dMath.abs(t[1]),n\u003dMath.abs(t[2]),i\u003d[0,0,0];e\u003eMath.max(r,n)?i[2]\u003d1:r\u003eMath.max(e,n)?i[0]\u003d1:i[1]\u003d1;for(var a\u003d0,o\u003d0,l\u003d0;l\u003c3;++l)a+\u003dt[l]*t[l],o+\u003di[l]*t[l];for(l\u003d0;l\u003c3;++l)i[l]-\u003do/a*t[l];return s(i,i),i}function h(t,e,r,i,a,o,s,l){this.center\u003dn(r),this.up\u003dn(i),this.right\u003dn(a),this.radius\u003dn([o]),this.angle\u003dn([s,l]),this.angle.bounds\u003d[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter\u003dthis.center.curve(0),this.computedUp\u003dthis.up.curve(0),this.computedRight\u003dthis.right.curve(0),this.computedRadius\u003dthis.radius.curve(0),this.computedAngle\u003dthis.angle.curve(0),this.computedToward\u003d[0,0,0],this.computedEye\u003d[0,0,0],this.computedMatrix\u003dnew Array(16);for(var c\u003d0;c\u003c16;++c)this.computedMatrix[c]\u003d.5;this.recalcMatrix(0)}var p\u003dh.prototype;p.setDistanceLimits\u003dfunction(t,e){t\u003dt\u003e0?Math.log(t):-1/0,e\u003de\u003e0?Math.log(e):1/0,e\u003dMath.max(e,t),this.radius.bounds[0][0]\u003dt,this.radius.bounds[1][0]\u003de},p.getDistanceLimits\u003dfunction(t){var e\u003dthis.radius.bounds[0];return t?(t[0]\u003dMath.exp(e[0][0]),t[1]\u003dMath.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix\u003dfunction(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e\u003dthis.computedUp,r\u003dthis.computedRight,n\u003d0,i\u003d0,a\u003d0;a\u003c3;++a)i+\u003de[a]*r[a],n+\u003de[a]*e[a];var l\u003dMath.sqrt(n),u\u003d0;for(a\u003d0;a\u003c3;++a)r[a]-\u003de[a]*i/n,u+\u003dr[a]*r[a],e[a]/\u003dl;var f\u003dMath.sqrt(u);for(a\u003d0;a\u003c3;++a)r[a]/\u003df;var h\u003dthis.computedToward;o(h,e,r),s(h,h);var p\u003dMath.exp(this.computedRadius[0]),d\u003dthis.computedAngle[0],m\u003dthis.computedAngle[1],g\u003dMath.cos(d),v\u003dMath.sin(d),y\u003dMath.cos(m),x\u003dMath.sin(m),b\u003dthis.computedCenter,_\u003dg*y,w\u003dv*y,T\u003dx,k\u003d-g*x,M\u003d-v*x,A\u003dy,S\u003dthis.computedEye,E\u003dthis.computedMatrix;for(a\u003d0;a\u003c3;++a){var L\u003d_*r[a]+w*h[a]+T*e[a];E[4*a+1]\u003dk*r[a]+M*h[a]+A*e[a],E[4*a+2]\u003dL,E[4*a+3]\u003d0}var C\u003dE[1],P\u003dE[5],I\u003dE[9],O\u003dE[2],z\u003dE[6],D\u003dE[10],R\u003dP*D-I*z,F\u003dI*O-C*D,B\u003dC*z-P*O,N\u003dc(R,F,B);R/\u003dN,F/\u003dN,B/\u003dN,E[0]\u003dR,E[4]\u003dF,E[8]\u003dB;for(a\u003d0;a\u003c3;++a)S[a]\u003db[a]+E[2+4*a]*p;for(a\u003d0;a\u003c3;++a){u\u003d0;for(var j\u003d0;j\u003c3;++j)u+\u003dE[a+4*j]*S[j];E[12+a]\u003d-u}E[15]\u003d1},p.getMatrix\u003dfunction(t,e){this.recalcMatrix(t);var r\u003dthis.computedMatrix;if(e){for(var n\u003d0;n\u003c16;++n)e[n]\u003dr[n];return e}return r};var d\u003d[0,0,0];p.rotate\u003dfunction(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var i\u003dthis.computedMatrix;d[0]\u003di[2],d[1]\u003di[6],d[2]\u003di[10];for(var o\u003dthis.computedUp,s\u003dthis.computedRight,l\u003dthis.computedToward,c\u003d0;c\u003c3;++c)i[4*c]\u003do[c],i[4*c+1]\u003ds[c],i[4*c+2]\u003dl[c];a(i,i,n,d);for(c\u003d0;c\u003c3;++c)o[c]\u003di[4*c],s[c]\u003di[4*c+1];this.up.set(t,o[0],o[1],o[2]),this.right.set(t,s[0],s[1],s[2])}},p.pan\u003dfunction(t,e,r,n){e\u003de||0,r\u003dr||0,n\u003dn||0,this.recalcMatrix(t);var i\u003dthis.computedMatrix,a\u003d(Math.exp(this.computedRadius[0]),i[1]),o\u003di[5],s\u003di[9],l\u003dc(a,o,s);a/\u003dl,o/\u003dl,s/\u003dl;var u\u003di[0],f\u003di[4],h\u003di[8],p\u003du*a+f*o+h*s,d\u003dc(u-\u003da*p,f-\u003do*p,h-\u003ds*p),m\u003d(u/\u003dd)*e+a*r,g\u003d(f/\u003dd)*e+o*r,v\u003d(h/\u003dd)*e+s*r;this.center.move(t,m,g,v);var y\u003dMath.exp(this.computedRadius[0]);y\u003dMath.max(1e-4,y+n),this.radius.set(t,Math.log(y))},p.translate\u003dfunction(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix\u003dfunction(t,e,r,n){var a\u003d1;\"number\"\u003d\u003dtypeof r\u0026\u0026(a\u003d0|r),(a\u003c0||a\u003e3)\u0026\u0026(a\u003d1);var o\u003d(a+2)%3;e||(this.recalcMatrix(t),e\u003dthis.computedMatrix);var s\u003de[a],l\u003de[a+4],f\u003de[a+8];if(n){var h\u003dMath.abs(s),p\u003dMath.abs(l),d\u003dMath.abs(f),m\u003dMath.max(h,p,d);h\u003d\u003d\u003dm?(s\u003ds\u003c0?-1:1,l\u003df\u003d0):d\u003d\u003d\u003dm?(f\u003df\u003c0?-1:1,s\u003dl\u003d0):(l\u003dl\u003c0?-1:1,s\u003df\u003d0)}else{var g\u003dc(s,l,f);s/\u003dg,l/\u003dg,f/\u003dg}var v,y,x\u003de[o],b\u003de[o+4],_\u003de[o+8],w\u003dx*s+b*l+_*f,T\u003dc(x-\u003ds*w,b-\u003dl*w,_-\u003df*w),k\u003dl*(_/\u003dT)-f*(b/\u003dT),M\u003df*(x/\u003dT)-s*_,A\u003ds*b-l*x,S\u003dc(k,M,A);if(k/\u003dS,M/\u003dS,A/\u003dS,this.center.jump(t,H,G,Y),this.radius.idle(t),this.up.jump(t,s,l,f),this.right.jump(t,x,b,_),2\u003d\u003d\u003da){var E\u003de[1],L\u003de[5],C\u003de[9],P\u003dE*x+L*b+C*_,I\u003dE*k+L*M+C*A;v\u003dR\u003c0?-Math.PI/2:Math.PI/2,y\u003dMath.atan2(I,P)}else{var O\u003de[2],z\u003de[6],D\u003de[10],R\u003dO*s+z*l+D*f,F\u003dO*x+z*b+D*_,B\u003dO*k+z*M+D*A;v\u003dMath.asin(u(R)),y\u003dMath.atan2(B,F)}this.angle.jump(t,y,v),this.recalcMatrix(t);var N\u003de[2],j\u003de[6],U\u003de[10],V\u003dthis.computedMatrix;i(V,e);var q\u003dV[15],H\u003dV[12]/q,G\u003dV[13]/q,Y\u003dV[14]/q,W\u003dMath.exp(this.computedRadius[0]);this.center.jump(t,H-N*W,G-j*W,Y-U*W)},p.lastT\u003dfunction(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle\u003dfunction(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush\u003dfunction(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance\u003dfunction(t,e){e\u003e0\u0026\u0026this.radius.set(t,Math.log(e))},p.lookAt\u003dfunction(t,e,r,n){this.recalcMatrix(t),e\u003de||this.computedEye,r\u003dr||this.computedCenter;var i\u003d(n\u003dn||this.computedUp)[0],a\u003dn[1],o\u003dn[2],s\u003dc(i,a,o);if(!(s\u003c1e-6)){i/\u003ds,a/\u003ds,o/\u003ds;var l\u003de[0]-r[0],f\u003de[1]-r[1],h\u003de[2]-r[2],p\u003dc(l,f,h);if(!(p\u003c1e-6)){l/\u003dp,f/\u003dp,h/\u003dp;var d\u003dthis.computedRight,m\u003dd[0],g\u003dd[1],v\u003dd[2],y\u003di*m+a*g+o*v,x\u003dc(m-\u003dy*i,g-\u003dy*a,v-\u003dy*o);if(!(x\u003c.01\u0026\u0026(x\u003dc(m\u003da*h-o*f,g\u003do*l-i*h,v\u003di*f-a*l))\u003c1e-6)){m/\u003dx,g/\u003dx,v/\u003dx,this.up.set(t,i,a,o),this.right.set(t,m,g,v),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(p));var b\u003da*v-o*g,_\u003do*m-i*v,w\u003di*g-a*m,T\u003dc(b,_,w),k\u003di*l+a*f+o*h,M\u003dm*l+g*f+v*h,A\u003d(b/\u003dT)*l+(_/\u003dT)*f+(w/\u003dT)*h,S\u003dMath.asin(u(k)),E\u003dMath.atan2(A,M),L\u003dthis.angle._state,C\u003dL[L.length-1],P\u003dL[L.length-2];C%\u003d2*Math.PI;var I\u003dMath.abs(C+2*Math.PI-E),O\u003dMath.abs(C-E),z\u003dMath.abs(C-2*Math.PI-E);I\u003cO\u0026\u0026(C+\u003d2*Math.PI),z\u003cO\u0026\u0026(C-\u003d2*Math.PI),this.angle.jump(this.angle.lastT(),C,P),this.angle.set(t,E,S)}}}}},{\"filtered-vector\":246,\"gl-mat4/invert\":295,\"gl-mat4/rotate\":301,\"gl-vec3/cross\":364,\"gl-vec3/dot\":369,\"gl-vec3/normalize\":386}],600:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){var i\u003dt*e,a\u003dn*t,o\u003da-(a-t),s\u003dt-o,l\u003dn*e,c\u003dl-(l-e),u\u003de-c,f\u003ds*u-(i-o*c-s*c-o*u);if(r)return r[0]\u003df,r[1]\u003di,r;return[f,i]};var n\u003d+(Math.pow(2,27)+1)},{}],601:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){var n\u003dt+e,i\u003dn-t,a\u003de-i,o\u003dt-(n-i);if(r)return r[0]\u003do+a,r[1]\u003dn,r;return[o+a,n]}},{}],602:[function(t,e,r){\"use strict\";var n\u003dt(\"../prototype/is\");e.exports\u003dfunction(t){if(\"function\"!\u003dtypeof t)return!1;if(!hasOwnProperty.call(t,\"length\"))return!1;try{if(\"number\"!\u003dtypeof t.length)return!1;if(\"function\"!\u003dtypeof t.call)return!1;if(\"function\"!\u003dtypeof t.apply)return!1}catch(t){return!1}return!n(t)}},{\"../prototype/is\":609}],603:[function(t,e,r){\"use strict\";var n\u003dt(\"../value/is\"),i\u003dt(\"../object/is\"),a\u003dt(\"../string/coerce\"),o\u003dt(\"./to-short-string\"),s\u003dfunction(t,e){return t.replace(\"%v\",o(e))};e.exports\u003dfunction(t,e,r){if(!i(r))throw new TypeError(s(e,t));if(!n(t)){if(\"default\"in r)return r.default;if(r.isOptional)return null}var o\u003da(r.errorMessage);throw n(o)||(o\u003de),new TypeError(s(o,t))}},{\"../object/is\":606,\"../string/coerce\":610,\"../value/is\":612,\"./to-short-string\":605}],604:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){try{return t.toString()}catch(e){try{return String(t)}catch(t){return null}}}},{}],605:[function(t,e,r){\"use strict\";var n\u003dt(\"./safe-to-string\"),i\u003d/[\\n\\r\\u2028\\u2029]/g;e.exports\u003dfunction(t){var e\u003dn(t);return null\u003d\u003d\u003de?\"\u003cNon-coercible to string value\u003e\":(e.length\u003e100\u0026\u0026(e\u003de.slice(0,99)+\"\\u2026\"),e\u003de.replace(i,(function(t){switch(t){case\"\\n\":return\"\\\\n\";case\"\\r\":return\"\\\\r\";case\"\\u2028\":return\"\\\\u2028\";case\"\\u2029\":return\"\\\\u2029\";default:throw new Error(\"Unexpected character\")}})))}},{\"./safe-to-string\":604}],606:[function(t,e,r){\"use strict\";var n\u003dt(\"../value/is\"),i\u003d{object:!0,function:!0,undefined:!0};e.exports\u003dfunction(t){return!!n(t)\u0026\u0026hasOwnProperty.call(i,typeof t)}},{\"../value/is\":612}],607:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib/resolve-exception\"),i\u003dt(\"./is\");e.exports\u003dfunction(t){return i(t)?t:n(t,\"%v is not a plain function\",arguments[1])}},{\"../lib/resolve-exception\":603,\"./is\":608}],608:[function(t,e,r){\"use strict\";var n\u003dt(\"../function/is\"),i\u003d/^\\s*class[\\s{/}]/,a\u003dFunction.prototype.toString;e.exports\u003dfunction(t){return!!n(t)\u0026\u0026!i.test(a.call(t))}},{\"../function/is\":602}],609:[function(t,e,r){\"use strict\";var n\u003dt(\"../object/is\");e.exports\u003dfunction(t){if(!n(t))return!1;try{return!!t.constructor\u0026\u0026t.constructor.prototype\u003d\u003d\u003dt}catch(t){return!1}}},{\"../object/is\":606}],610:[function(t,e,r){\"use strict\";var n\u003dt(\"../value/is\"),i\u003dt(\"../object/is\"),a\u003dObject.prototype.toString;e.exports\u003dfunction(t){if(!n(t))return null;if(i(t)){var e\u003dt.toString;if(\"function\"!\u003dtypeof e)return null;if(e\u003d\u003d\u003da)return null}try{return\"\"+t}catch(t){return null}}},{\"../object/is\":606,\"../value/is\":612}],611:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib/resolve-exception\"),i\u003dt(\"./is\");e.exports\u003dfunction(t){return i(t)?t:n(t,\"Cannot use %v\",arguments[1])}},{\"../lib/resolve-exception\":603,\"./is\":612}],612:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return null!\u003dt}},{}],613:[function(t,e,r){(function(e){(function(){\"use strict\";var n\u003dt(\"bit-twiddle\"),i\u003dt(\"dup\"),a\u003dt(\"buffer\").Buffer;e.__TYPEDARRAY_POOL||(e.__TYPEDARRAY_POOL\u003d{UINT8:i([32,0]),UINT16:i([32,0]),UINT32:i([32,0]),BIGUINT64:i([32,0]),INT8:i([32,0]),INT16:i([32,0]),INT32:i([32,0]),BIGINT64:i([32,0]),FLOAT:i([32,0]),DOUBLE:i([32,0]),DATA:i([32,0]),UINT8C:i([32,0]),BUFFER:i([32,0])});var o\u003d\"undefined\"!\u003dtypeof Uint8ClampedArray,s\u003d\"undefined\"!\u003dtypeof BigUint64Array,l\u003d\"undefined\"!\u003dtypeof BigInt64Array,c\u003de.__TYPEDARRAY_POOL;c.UINT8C||(c.UINT8C\u003di([32,0])),c.BIGUINT64||(c.BIGUINT64\u003di([32,0])),c.BIGINT64||(c.BIGINT64\u003di([32,0])),c.BUFFER||(c.BUFFER\u003di([32,0]));var u\u003dc.DATA,f\u003dc.BUFFER;function h(t){if(t){var e\u003dt.length||t.byteLength,r\u003dn.log2(e);u[r].push(t)}}function p(t){t\u003dn.nextPow2(t);var e\u003dn.log2(t),r\u003du[e];return r.length\u003e0?r.pop():new ArrayBuffer(t)}function d(t){return new Uint8Array(p(t),0,t)}function m(t){return new Uint16Array(p(2*t),0,t)}function g(t){return new Uint32Array(p(4*t),0,t)}function v(t){return new Int8Array(p(t),0,t)}function y(t){return new Int16Array(p(2*t),0,t)}function x(t){return new Int32Array(p(4*t),0,t)}function b(t){return new Float32Array(p(4*t),0,t)}function _(t){return new Float64Array(p(8*t),0,t)}function w(t){return o?new Uint8ClampedArray(p(t),0,t):d(t)}function T(t){return s?new BigUint64Array(p(8*t),0,t):null}function k(t){return l?new BigInt64Array(p(8*t),0,t):null}function M(t){return new DataView(p(t),0,t)}function A(t){t\u003dn.nextPow2(t);var e\u003dn.log2(t),r\u003df[e];return r.length\u003e0?r.pop():new a(t)}r.free\u003dfunction(t){if(a.isBuffer(t))f[n.log2(t.length)].push(t);else{if(\"[object ArrayBuffer]\"!\u003d\u003dObject.prototype.toString.call(t)\u0026\u0026(t\u003dt.buffer),!t)return;var e\u003dt.length||t.byteLength,r\u003d0|n.log2(e);u[r].push(t)}},r.freeUint8\u003dr.freeUint16\u003dr.freeUint32\u003dr.freeBigUint64\u003dr.freeInt8\u003dr.freeInt16\u003dr.freeInt32\u003dr.freeBigInt64\u003dr.freeFloat32\u003dr.freeFloat\u003dr.freeFloat64\u003dr.freeDouble\u003dr.freeUint8Clamped\u003dr.freeDataView\u003dfunction(t){h(t.buffer)},r.freeArrayBuffer\u003dh,r.freeBuffer\u003dfunction(t){f[n.log2(t.length)].push(t)},r.malloc\u003dfunction(t,e){if(void 0\u003d\u003d\u003de||\"arraybuffer\"\u003d\u003d\u003de)return p(t);switch(e){case\"uint8\":return d(t);case\"uint16\":return m(t);case\"uint32\":return g(t);case\"int8\":return v(t);case\"int16\":return y(t);case\"int32\":return x(t);case\"float\":case\"float32\":return b(t);case\"double\":case\"float64\":return _(t);case\"uint8_clamped\":return w(t);case\"bigint64\":return k(t);case\"biguint64\":return T(t);case\"buffer\":return A(t);case\"data\":case\"dataview\":return M(t);default:return null}return null},r.mallocArrayBuffer\u003dp,r.mallocUint8\u003dd,r.mallocUint16\u003dm,r.mallocUint32\u003dg,r.mallocInt8\u003dv,r.mallocInt16\u003dy,r.mallocInt32\u003dx,r.mallocFloat32\u003dr.mallocFloat\u003db,r.mallocFloat64\u003dr.mallocDouble\u003d_,r.mallocUint8Clamped\u003dw,r.mallocBigUint64\u003dT,r.mallocBigInt64\u003dk,r.mallocDataView\u003dM,r.mallocBuffer\u003dA,r.clearCache\u003dfunction(){for(var t\u003d0;t\u003c32;++t)c.UINT8[t].length\u003d0,c.UINT16[t].length\u003d0,c.UINT32[t].length\u003d0,c.INT8[t].length\u003d0,c.INT16[t].length\u003d0,c.INT32[t].length\u003d0,c.FLOAT[t].length\u003d0,c.DOUBLE[t].length\u003d0,c.BIGUINT64[t].length\u003d0,c.BIGINT64[t].length\u003d0,c.UINT8C[t].length\u003d0,u[t].length\u003d0,f[t].length\u003d0}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"bit-twiddle\":104,buffer:117,dup:181}],614:[function(t,e,r){\"use strict\";function n(t){this.roots\u003dnew Array(t),this.ranks\u003dnew Array(t);for(var e\u003d0;e\u003ct;++e)this.roots[e]\u003de,this.ranks[e]\u003d0}e.exports\u003dn;var i\u003dn.prototype;Object.defineProperty(i,\"length\",{get:function(){return this.roots.length}}),i.makeSet\u003dfunction(){var t\u003dthis.roots.length;return this.roots.push(t),this.ranks.push(0),t},i.find\u003dfunction(t){for(var e\u003dt,r\u003dthis.roots;r[t]!\u003d\u003dt;)t\u003dr[t];for(;r[e]!\u003d\u003dt;){var n\u003dr[e];r[e]\u003dt,e\u003dn}return t},i.link\u003dfunction(t,e){var r\u003dthis.find(t),n\u003dthis.find(e);if(r!\u003d\u003dn){var i\u003dthis.ranks,a\u003dthis.roots,o\u003di[r],s\u003di[n];o\u003cs?a[r]\u003dn:s\u003co?a[n]\u003dr:(a[n]\u003dr,++i[r])}}},{}],615:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){return 0\u003d\u003d\u003dt.length?t:e?(r||t.sort(e),function(t,e){for(var r\u003d1,n\u003dt.length,i\u003dt[0],a\u003dt[0],o\u003d1;o\u003cn;++o)if(a\u003di,e(i\u003dt[o],a)){if(o\u003d\u003d\u003dr){r++;continue}t[r++]\u003di}return t.length\u003dr,t}(t,e)):(r||t.sort(),function(t){for(var e\u003d1,r\u003dt.length,n\u003dt[0],i\u003dt[0],a\u003d1;a\u003cr;++a,i\u003dn)if(i\u003dn,(n\u003dt[a])!\u003d\u003di){if(a\u003d\u003d\u003de){e++;continue}t[e++]\u003dn}return t.length\u003de,t}(t))}},{}],616:[function(t,e,r){var n\u003d/[\\\u0027\\\"]/;e.exports\u003dfunction(t){return t?(n.test(t.charAt(0))\u0026\u0026(t\u003dt.substr(1)),n.test(t.charAt(t.length-1))\u0026\u0026(t\u003dt.substr(0,t.length-1)),t):\"\"}},{}],617:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){Array.isArray(r)||(r\u003d[].slice.call(arguments,2));for(var n\u003d0,i\u003dr.length;n\u003ci;n++){var a\u003dr[n];for(var o in a)if((void 0\u003d\u003d\u003de[o]||Array.isArray(e[o])||t[o]!\u003d\u003de[o])\u0026\u0026o in e){var s;if(!0\u003d\u003d\u003da[o])s\u003de[o];else{if(!1\u003d\u003d\u003da[o])continue;if(\"function\"\u003d\u003dtypeof a[o]\u0026\u0026void 0\u003d\u003d\u003d(s\u003da[o](e[o],t,e)))continue}t[o]\u003ds}}return t}},{}],618:[function(t,e,r){(function(t){(function(){function r(e){try{if(!t.localStorage)return!1}catch(t){return!1}var r\u003dt.localStorage[e];return null!\u003dr\u0026\u0026\"true\"\u003d\u003d\u003dString(r).toLowerCase()}e.exports\u003dfunction(t,e){if(r(\"noDeprecation\"))return t;var n\u003d!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(e);r(\"traceDeprecation\")?console.trace(e):console.warn(e),n\u003d!0}return t.apply(this,arguments)}}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{}],619:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){\"object\"\u003d\u003dtypeof e\u0026\u0026null!\u003d\u003de||(e\u003d{});return n(t,e.canvas||i,e.context||a,e)};var n\u003dt(\"./lib/vtext\"),i\u003dnull,a\u003dnull;\"undefined\"!\u003dtypeof document\u0026\u0026((i\u003ddocument.createElement(\"canvas\")).width\u003d8192,i.height\u003d1024,a\u003di.getContext(\"2d\"))},{\"./lib/vtext\":620}],620:[function(t,e,r){e.exports\u003dfunction(t,e,r,n){var a\u003d64,o\u003d1.25,s\u003d{breaklines:!1,bolds:!1,italics:!1,subscripts:!1,superscripts:!1};n\u0026\u0026(n.size\u0026\u0026n.size\u003e0\u0026\u0026(a\u003dn.size),n.lineSpacing\u0026\u0026n.lineSpacing\u003e0\u0026\u0026(o\u003dn.lineSpacing),n.styletags\u0026\u0026n.styletags.breaklines\u0026\u0026(s.breaklines\u003d!!n.styletags.breaklines),n.styletags\u0026\u0026n.styletags.bolds\u0026\u0026(s.bolds\u003d!!n.styletags.bolds),n.styletags\u0026\u0026n.styletags.italics\u0026\u0026(s.italics\u003d!!n.styletags.italics),n.styletags\u0026\u0026n.styletags.subscripts\u0026\u0026(s.subscripts\u003d!!n.styletags.subscripts),n.styletags\u0026\u0026n.styletags.superscripts\u0026\u0026(s.superscripts\u003d!!n.styletags.superscripts));return r.font\u003d[n.fontStyle,n.fontVariant,n.fontWeight,a+\"px\",n.font].filter((function(t){return t})).join(\" \"),r.textAlign\u003d\"start\",r.textBaseline\u003d\"alphabetic\",r.direction\u003d\"ltr\",h(function(t,e,r,n,a,o){r\u003dr.replace(/\\n/g,\"\"),r\u003d!0\u003d\u003d\u003do.breaklines?r.replace(/\\\u003cbr\\\u003e/g,\"\\n\"):r.replace(/\\\u003cbr\\\u003e/g,\" \");var s\u003d\"\",l\u003d[];for(p\u003d0;p\u003cr.length;++p)l[p]\u003ds;!0\u003d\u003d\u003do.bolds\u0026\u0026(l\u003dc(\"b\",\"b|\",r,l));!0\u003d\u003d\u003do.italics\u0026\u0026(l\u003dc(\"i\",\"i|\",r,l));!0\u003d\u003d\u003do.superscripts\u0026\u0026(l\u003dc(\"sup\",\"+1\",r,l));!0\u003d\u003d\u003do.subscripts\u0026\u0026(l\u003dc(\"sub\",\"-1\",r,l));var u\u003d[],f\u003d\"\";for(p\u003d0;p\u003cr.length;++p)null!\u003d\u003dl[p]\u0026\u0026(f+\u003dr[p],u.push(l[p]));var h,p,d,m,g,v\u003df.split(\"\\n\"),y\u003dv.length,x\u003dMath.round(a*n),b\u003dn,_\u003d2*n,w\u003d0,T\u003dy*x+_;t.height\u003cT\u0026\u0026(t.height\u003dT);e.fillStyle\u003d\"#000\",e.fillRect(0,0,t.width,t.height),e.fillStyle\u003d\"#fff\";var k\u003d0,M\u003d\"\";function A(){if(\"\"!\u003d\u003dM){var t\u003de.measureText(M).width;e.fillText(M,b+d,_+m),d+\u003dt}}function S(){return Math.round(g)+\"px \"}function E(t,r){var n\u003d\"\"+e.font;if(!0\u003d\u003d\u003do.subscripts){var i\u003dt.indexOf(\"-\"),a\u003dr.indexOf(\"-\"),s\u003di\u003e-1?parseInt(t[1+i]):0,l\u003da\u003e-1?parseInt(r[1+a]):0;s!\u003d\u003dl\u0026\u0026(n\u003dn.replace(S(),\"?px \"),g*\u003dMath.pow(.75,l-s),n\u003dn.replace(\"?px \",S())),m+\u003d.25*x*(l-s)}if(!0\u003d\u003d\u003do.superscripts){var c\u003dt.indexOf(\"+\"),u\u003dr.indexOf(\"+\"),f\u003dc\u003e-1?parseInt(t[1+c]):0,h\u003du\u003e-1?parseInt(r[1+u]):0;f!\u003d\u003dh\u0026\u0026(n\u003dn.replace(S(),\"?px \"),g*\u003dMath.pow(.75,h-f),n\u003dn.replace(\"?px \",S())),m-\u003d.25*x*(h-f)}if(!0\u003d\u003d\u003do.bolds){var p\u003dt.indexOf(\"b|\")\u003e-1,d\u003dr.indexOf(\"b|\")\u003e-1;!p\u0026\u0026d\u0026\u0026(n\u003dv?n.replace(\"italic \",\"italic bold \"):\"bold \"+n),p\u0026\u0026!d\u0026\u0026(n\u003dn.replace(\"bold \",\"\"))}if(!0\u003d\u003d\u003do.italics){var v\u003dt.indexOf(\"i|\")\u003e-1,y\u003dr.indexOf(\"i|\")\u003e-1;!v\u0026\u0026y\u0026\u0026(n\u003d\"italic \"+n),v\u0026\u0026!y\u0026\u0026(n\u003dn.replace(\"italic \",\"\"))}e.font\u003dn}for(h\u003d0;h\u003cy;++h){var L\u003dv[h]+\"\\n\";for(d\u003d0,m\u003dh*x,g\u003dn,M\u003d\"\",p\u003d0;p\u003cL.length;++p){var C\u003dp+k\u003cu.length?u[p+k]:u[u.length-1];s\u003d\u003d\u003dC?M+\u003dL[p]:(A(),M\u003dL[p],void 0!\u003d\u003dC\u0026\u0026(E(s,C),s\u003dC))}A(),k+\u003dL.length;var P\u003d0|Math.round(d+2*b);w\u003cP\u0026\u0026(w\u003dP)}var I\u003dw,O\u003d_+x*y;return i(e.getImageData(0,0,I,O).data,[O,I,4]).pick(-1,-1,0).transpose(1,0)}(e,r,t,a,o,s),n,a)},e.exports.processPixels\u003dh;var n\u003dt(\"surface-nets\"),i\u003dt(\"ndarray\"),a\u003dt(\"simplify-planar-graph\"),o\u003dt(\"clean-pslg\"),s\u003dt(\"cdt2d\"),l\u003dt(\"planar-graph-to-polyline\");function c(t,e,r,n){for(var i\u003d\"\u003c\"+t+\"\u003e\",a\u003d\"\u003c/\"+t+\"\u003e\",o\u003di.length,s\u003da.length,l\u003d\"+\"\u003d\u003d\u003de[0]||\"-\"\u003d\u003d\u003de[0],c\u003d0,u\u003d-s;c\u003e-1\u0026\u0026-1!\u003d\u003d(c\u003dr.indexOf(i,c))\u0026\u0026-1!\u003d\u003d(u\u003dr.indexOf(a,c+o))\u0026\u0026!(u\u003c\u003dc);){for(var f\u003dc;f\u003cu+s;++f)if(f\u003cc+o||f\u003e\u003du)n[f]\u003dnull,r\u003dr.substr(0,f)+\" \"+r.substr(f+1);else if(null!\u003d\u003dn[f]){var h\u003dn[f].indexOf(e[0]);-1\u003d\u003d\u003dh?n[f]+\u003de:l\u0026\u0026(n[f]\u003dn[f].substr(0,h+1)+(1+parseInt(n[f][h+1]))+n[f].substr(h+2))}var p\u003dc+o,d\u003dr.substr(p,u-p).indexOf(i);c\u003d-1!\u003d\u003dd?d:u+s}return n}function u(t,e){var r\u003dn(t,128);return e?a(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function f(t,e,r,n){var i\u003du(t,n),a\u003dfunction(t,e,r){for(var n\u003de.textAlign||\"start\",i\u003de.textBaseline||\"alphabetic\",a\u003d[1\u003c\u003c30,1\u003c\u003c30],o\u003d[0,0],s\u003dt.length,l\u003d0;l\u003cs;++l)for(var c\u003dt[l],u\u003d0;u\u003c2;++u)a[u]\u003d0|Math.min(a[u],c[u]),o[u]\u003d0|Math.max(o[u],c[u]);var f\u003d0;switch(n){case\"center\":f\u003d-.5*(a[0]+o[0]);break;case\"right\":case\"end\":f\u003d-o[0];break;case\"left\":case\"start\":f\u003d-a[0];break;default:throw new Error(\"vectorize-text: Unrecognized textAlign: \u0027\"+n+\"\u0027\")}var h\u003d0;switch(i){case\"hanging\":case\"top\":h\u003d-a[1];break;case\"middle\":h\u003d-.5*(a[1]+o[1]);break;case\"alphabetic\":case\"ideographic\":h\u003d-3*r;break;case\"bottom\":h\u003d-o[1];break;default:throw new Error(\"vectorize-text: Unrecoginized textBaseline: \u0027\"+i+\"\u0027\")}var p\u003d1/r;return\"lineHeight\"in e?p*\u003d+e.lineHeight:\"width\"in e?p\u003de.width/(o[0]-a[0]):\"height\"in e\u0026\u0026(p\u003de.height/(o[1]-a[1])),t.map((function(t){return[p*(t[0]+f),p*(t[1]+h)]}))}(i.positions,e,r),c\u003di.edges,f\u003d\"ccw\"\u003d\u003d\u003de.orientation;if(o(a,c),e.polygons||e.polygon||e.polyline){for(var h\u003dl(c,a),p\u003dnew Array(h.length),d\u003d0;d\u003ch.length;++d){for(var m\u003dh[d],g\u003dnew Array(m.length),v\u003d0;v\u003cm.length;++v){for(var y\u003dm[v],x\u003dnew Array(y.length),b\u003d0;b\u003cy.length;++b)x[b]\u003da[y[b]].slice();f\u0026\u0026x.reverse(),g[v]\u003dx}p[d]\u003dg}return p}return e.triangles||e.triangulate||e.triangle?{cells:s(a,c,{delaunay:!1,exterior:!1,interior:!0}),positions:a}:{edges:c,positions:a}}function h(t,e,r){try{return f(t,e,r,!0)}catch(t){}try{return f(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}},{cdt2d:118,\"clean-pslg\":127,ndarray:479,\"planar-graph-to-polyline\":497,\"simplify-planar-graph\":559,\"surface-nets\":587}],621:[function(t,e,r){!function(){\"use strict\";if(\"undefined\"\u003d\u003dtypeof ses||!ses.ok||ses.ok()){\"undefined\"!\u003dtypeof ses\u0026\u0026(ses.weakMapPermitHostObjects\u003dm);var t\u003d!1;if(\"function\"\u003d\u003dtypeof WeakMap){var r\u003dWeakMap;if(\"undefined\"!\u003dtypeof navigator\u0026\u0026/Firefox/.test(navigator.userAgent));else{var n\u003dnew r,i\u003dObject.freeze({});if(n.set(i,1),1\u003d\u003d\u003dn.get(i))return void(e.exports\u003dWeakMap);t\u003d!0}}Object.prototype.hasOwnProperty;var a\u003dObject.getOwnPropertyNames,o\u003dObject.defineProperty,s\u003dObject.isExtensible,l\u003d\"weakmap:ident:\"+Math.random()+\"___\";if(\"undefined\"!\u003dtypeof crypto\u0026\u0026\"function\"\u003d\u003dtypeof crypto.getRandomValues\u0026\u0026\"function\"\u003d\u003dtypeof ArrayBuffer\u0026\u0026\"function\"\u003d\u003dtypeof Uint8Array){var c\u003dnew ArrayBuffer(25),u\u003dnew Uint8Array(c);crypto.getRandomValues(u),l\u003d\"weakmap:rand:\"+Array.prototype.map.call(u,(function(t){return(t%36).toString(36)})).join(\"\")+\"___\"}if(o(Object,\"getOwnPropertyNames\",{value:function(t){return a(t).filter(g)}}),\"getPropertyNames\"in Object){var f\u003dObject.getPropertyNames;o(Object,\"getPropertyNames\",{value:function(t){return f(t).filter(g)}})}!function(){var t\u003dObject.freeze;o(Object,\"freeze\",{value:function(e){return v(e),t(e)}});var e\u003dObject.seal;o(Object,\"seal\",{value:function(t){return v(t),e(t)}});var r\u003dObject.preventExtensions;o(Object,\"preventExtensions\",{value:function(t){return v(t),r(t)}})}();var h\u003d!1,p\u003d0,d\u003dfunction(){this instanceof d||x();var t\u003d[],e\u003d[],r\u003dp++;return Object.create(d.prototype,{get___:{value:y((function(n,i){var a,o\u003dv(n);return o?r in o?o[r]:i:(a\u003dt.indexOf(n))\u003e\u003d0?e[a]:i}))},has___:{value:y((function(e){var n\u003dv(e);return n?r in n:t.indexOf(e)\u003e\u003d0}))},set___:{value:y((function(n,i){var a,o\u003dv(n);return o?o[r]\u003di:(a\u003dt.indexOf(n))\u003e\u003d0?e[a]\u003di:(a\u003dt.length,e[a]\u003di,t[a]\u003dn),this}))},delete___:{value:y((function(n){var i,a,o\u003dv(n);return o?r in o\u0026\u0026delete o[r]:!((i\u003dt.indexOf(n))\u003c0)\u0026\u0026(a\u003dt.length-1,t[i]\u003dvoid 0,e[i]\u003de[a],t[i]\u003dt[a],t.length\u003da,e.length\u003da,!0)}))}})};d.prototype\u003dObject.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),\"function\"\u003d\u003dtypeof r?function(){function n(){this instanceof d||x();var e,n\u003dnew r,i\u003dvoid 0,a\u003d!1;return e\u003dt?function(t,e){return n.set(t,e),n.has(t)||(i||(i\u003dnew d),i.set(t,e)),this}:function(t,e){if(a)try{n.set(t,e)}catch(r){i||(i\u003dnew d),i.set___(t,e)}else n.set(t,e);return this},Object.create(d.prototype,{get___:{value:y((function(t,e){return i?n.has(t)?n.get(t):i.get___(t,e):n.get(t,e)}))},has___:{value:y((function(t){return n.has(t)||!!i\u0026\u0026i.has___(t)}))},set___:{value:y(e)},delete___:{value:y((function(t){var e\u003d!!n.delete(t);return i\u0026\u0026i.delete___(t)||e}))},permitHostObjects___:{value:y((function(t){if(t!\u003d\u003dm)throw new Error(\"bogus call to permitHostObjects___\");a\u003d!0}))}})}t\u0026\u0026\"undefined\"!\u003dtypeof Proxy\u0026\u0026(Proxy\u003dvoid 0),n.prototype\u003dd.prototype,e.exports\u003dn,Object.defineProperty(WeakMap.prototype,\"constructor\",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():(\"undefined\"!\u003dtypeof Proxy\u0026\u0026(Proxy\u003dvoid 0),e.exports\u003dd)}function m(t){t.permitHostObjects___\u0026\u0026t.permitHostObjects___(m)}function g(t){return!(\"weakmap:\"\u003d\u003dt.substr(0,\"weakmap:\".length)\u0026\u0026\"___\"\u003d\u003d\u003dt.substr(t.length-3))}function v(t){if(t!\u003d\u003dObject(t))throw new TypeError(\"Not an object: \"+t);var e\u003dt[l];if(e\u0026\u0026e.key\u003d\u003d\u003dt)return e;if(s(t)){e\u003d{key:t};try{return o(t,l,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function y(t){return t.prototype\u003dnull,Object.freeze(t)}function x(){h||\"undefined\"\u003d\u003dtypeof console||(h\u003d!0,console.warn(\"WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future.\"))}}()},{}],622:[function(t,e,r){var n\u003dt(\"./hidden-store.js\");e.exports\u003dfunction(){var t\u003d{};return function(e){if((\"object\"!\u003dtypeof e||null\u003d\u003d\u003de)\u0026\u0026\"function\"!\u003dtypeof e)throw new Error(\"Weakmap-shim: Key must be object\");var r\u003de.valueOf(t);return r\u0026\u0026r.identity\u003d\u003d\u003dt?r:n(e,t)}}},{\"./hidden-store.js\":623}],623:[function(t,e,r){e.exports\u003dfunction(t,e){var r\u003d{identity:e},n\u003dt.valueOf;return Object.defineProperty(t,\"valueOf\",{value:function(t){return t!\u003d\u003de?n.apply(this,arguments):r},writable:!0}),r}},{}],624:[function(t,e,r){var n\u003dt(\"./create-store.js\");e.exports\u003dfunction(){var t\u003dn();return{get:function(e,r){var n\u003dt(e);return n.hasOwnProperty(\"value\")?n.value:r},set:function(e,r){return t(e).value\u003dr,this},has:function(e){return\"value\"in t(e)},delete:function(e){return delete t(e).value}}}},{\"./create-store.js\":622}],625:[function(t,e,r){var n\u003dt(\"get-canvas-context\");e.exports\u003dfunction(t){return n(\"webgl\",t)}},{\"get-canvas-context\":253}],626:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\"),a\u003dn.instance();function o(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}o.prototype\u003dnew n.baseCalendar,i(o.prototype,{name:\"Chinese\",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{\"\":{name:\"Chinese\",epochs:[\"BEC\",\"EC\"],monthNumbers:function(t,e){if(\"string\"\u003d\u003dtypeof t){var r\u003dt.match(l);return r?r[0]:\"\"}var n\u003dthis._validateYear(t),i\u003dt.month(),a\u003d\"\"+this.toChineseMonth(n,i);return e\u0026\u0026a.length\u003c2\u0026\u0026(a\u003d\"0\"+a),this.isIntercalaryMonth(n,i)\u0026\u0026(a+\u003d\"i\"),a},monthNames:function(t){if(\"string\"\u003d\u003dtypeof t){var e\u003dt.match(c);return e?e[0]:\"\"}var r\u003dthis._validateYear(t),n\u003dt.month(),i\u003d[\"\\u4e00\\u6708\",\"\\u4e8c\\u6708\",\"\\u4e09\\u6708\",\"\\u56db\\u6708\",\"\\u4e94\\u6708\",\"\\u516d\\u6708\",\"\\u4e03\\u6708\",\"\\u516b\\u6708\",\"\\u4e5d\\u6708\",\"\\u5341\\u6708\",\"\\u5341\\u4e00\\u6708\",\"\\u5341\\u4e8c\\u6708\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)\u0026\u0026(i\u003d\"\\u95f0\"+i),i},monthNamesShort:function(t){if(\"string\"\u003d\u003dtypeof t){var e\u003dt.match(u);return e?e[0]:\"\"}var r\u003dthis._validateYear(t),n\u003dt.month(),i\u003d[\"\\u4e00\",\"\\u4e8c\",\"\\u4e09\",\"\\u56db\",\"\\u4e94\",\"\\u516d\",\"\\u4e03\",\"\\u516b\",\"\\u4e5d\",\"\\u5341\",\"\\u5341\\u4e00\",\"\\u5341\\u4e8c\"][this.toChineseMonth(r,n)-1];return this.isIntercalaryMonth(r,n)\u0026\u0026(i\u003d\"\\u95f0\"+i),i},parseMonth:function(t,e){t\u003dthis._validateYear(t);var r,n\u003dparseInt(e);if(isNaN(n))\"\\u95f0\"\u003d\u003d\u003de[0]\u0026\u0026(r\u003d!0,e\u003de.substring(1)),\"\\u6708\"\u003d\u003d\u003de[e.length-1]\u0026\u0026(e\u003de.substring(0,e.length-1)),n\u003d1+[\"\\u4e00\",\"\\u4e8c\",\"\\u4e09\",\"\\u56db\",\"\\u4e94\",\"\\u516d\",\"\\u4e03\",\"\\u516b\",\"\\u4e5d\",\"\\u5341\",\"\\u5341\\u4e00\",\"\\u5341\\u4e8c\"].indexOf(e);else{var i\u003de[e.length-1];r\u003d\"i\"\u003d\u003d\u003di||\"I\"\u003d\u003d\u003di}return this.toMonthIndex(t,n,r)},dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year\u0026\u0026(t\u003dt.year()),\"number\"!\u003dtypeof t||t\u003c1888||t\u003e2111)throw e.replace(/\\{0\\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var i\u003dthis.intercalaryMonth(t);if(r\u0026\u0026e!\u003d\u003di||e\u003c1||e\u003e12)throw n.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return i?!r\u0026\u0026e\u003c\u003di?e-1:e:e-1},toChineseMonth:function(t,e){t.year\u0026\u0026(e\u003d(t\u003dt.year()).month());var r\u003dthis.intercalaryMonth(t);if(e\u003c0||e\u003e(r?12:11))throw n.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return r?e\u003cr?e+1:e:e+1},intercalaryMonth:function(t){return t\u003dthis._validateYear(t),f[t-f[0]]\u003e\u003e13},isIntercalaryMonth:function(t,e){t.year\u0026\u0026(e\u003d(t\u003dt.year()).month());var r\u003dthis.intercalaryMonth(t);return!!r\u0026\u0026r\u003d\u003d\u003de},leapYear:function(t){return 0!\u003d\u003dthis.intercalaryMonth(t)},weekOfYear:function(t,e,r){var i,o\u003dthis._validateYear(t,n.local.invalidyear),s\u003dh[o-h[0]],l\u003ds\u003e\u003e9\u00264095,c\u003ds\u003e\u003e5\u002615,u\u003d31\u0026s;(i\u003da.newDate(l,c,u)).add(4-(i.dayOfWeek()||7),\"d\");var f\u003dthis.toJD(t,e,r)-i.toJD();return 1+Math.floor(f/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year\u0026\u0026(e\u003dt.month(),t\u003dt.year()),t\u003dthis._validateYear(t);var r\u003df[t-f[0]];if(e\u003e(r\u003e\u003e13?12:11))throw n.local.invalidMonth.replace(/\\{0\\}/,this.local.name);return r\u00261\u003c\u003c12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var i\u003dthis._validate(t,s,r,n.local.invalidDate);t\u003dthis._validateYear(i.year()),e\u003di.month(),r\u003di.day();var o\u003dthis.isIntercalaryMonth(t,e),s\u003dthis.toChineseMonth(t,e),l\u003dfunction(t,e,r,n,i){var a,o,s;if(\"object\"\u003d\u003dtypeof t)o\u003dt,a\u003de||{};else{var l;if(!(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d1888\u0026\u0026t\u003c\u003d2111))throw new Error(\"Lunar year outside range 1888-2111\");if(!(\"number\"\u003d\u003dtypeof e\u0026\u0026e\u003e\u003d1\u0026\u0026e\u003c\u003d12))throw new Error(\"Lunar month outside range 1 - 12\");if(!(\"number\"\u003d\u003dtypeof r\u0026\u0026r\u003e\u003d1\u0026\u0026r\u003c\u003d30))throw new Error(\"Lunar day outside range 1 - 30\");\"object\"\u003d\u003dtypeof n?(l\u003d!1,a\u003dn):(l\u003d!!n,a\u003di||{}),o\u003d{year:t,month:e,day:r,isIntercalary:l}}s\u003do.day-1;var c,u\u003df[o.year-f[0]],p\u003du\u003e\u003e13;c\u003dp\u0026\u0026(o.month\u003ep||o.isIntercalary)?o.month:o.month-1;for(var d\u003d0;d\u003cc;d++){s+\u003du\u00261\u003c\u003c12-d?30:29}var m\u003dh[o.year-h[0]],g\u003dnew Date(m\u003e\u003e9\u00264095,(m\u003e\u003e5\u002615)-1,(31\u0026m)+s);return a.year\u003dg.getFullYear(),a.month\u003d1+g.getMonth(),a.day\u003dg.getDate(),a}(t,s,r,o);return a.toJD(l.year,l.month,l.day)},fromJD:function(t){var e\u003da.fromJD(t),r\u003dfunction(t,e,r,n){var i,a;if(\"object\"\u003d\u003dtypeof t)i\u003dt,a\u003de||{};else{if(!(\"number\"\u003d\u003dtypeof t\u0026\u0026t\u003e\u003d1888\u0026\u0026t\u003c\u003d2111))throw new Error(\"Solar year outside range 1888-2111\");if(!(\"number\"\u003d\u003dtypeof e\u0026\u0026e\u003e\u003d1\u0026\u0026e\u003c\u003d12))throw new Error(\"Solar month outside range 1 - 12\");if(!(\"number\"\u003d\u003dtypeof r\u0026\u0026r\u003e\u003d1\u0026\u0026r\u003c\u003d31))throw new Error(\"Solar day outside range 1 - 31\");i\u003d{year:t,month:e,day:r},a\u003dn||{}}var o\u003dh[i.year-h[0]],s\u003di.year\u003c\u003c9|i.month\u003c\u003c5|i.day;a.year\u003ds\u003e\u003do?i.year:i.year-1,o\u003dh[a.year-h[0]];var l,c\u003dnew Date(o\u003e\u003e9\u00264095,(o\u003e\u003e5\u002615)-1,31\u0026o),u\u003dnew Date(i.year,i.month-1,i.day);l\u003dMath.round((u-c)/864e5);var p,d\u003df[a.year-f[0]];for(p\u003d0;p\u003c13;p++){var m\u003dd\u00261\u003c\u003c12-p?30:29;if(l\u003cm)break;l-\u003dm}var g\u003dd\u003e\u003e13;!g||p\u003cg?(a.isIntercalary\u003d!1,a.month\u003d1+p):p\u003d\u003d\u003dg?(a.isIntercalary\u003d!0,a.month\u003dp):(a.isIntercalary\u003d!1,a.month\u003dp);return a.day\u003d1+l,a}(e.year(),e.month(),e.day()),n\u003dthis.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e\u003dt.match(s),r\u003dthis._validateYear(+e[1]),n\u003d+e[2],i\u003d!!e[3],a\u003dthis.toMonthIndex(r,n,i),o\u003d+e[4];return this.newDate(r,a,o)},add:function(t,e,r){var n\u003dt.year(),i\u003dt.month(),a\u003dthis.isIntercalaryMonth(n,i),s\u003dthis.toChineseMonth(n,i),l\u003dObject.getPrototypeOf(o.prototype).add.call(this,t,e,r);if(\"y\"\u003d\u003d\u003dr){var c\u003dl.year(),u\u003dl.month(),f\u003dthis.isIntercalaryMonth(c,s),h\u003da\u0026\u0026f?this.toMonthIndex(c,s,!0):this.toMonthIndex(c,s,!1);h!\u003d\u003du\u0026\u0026l.month(h)}return l}});var s\u003d/^\\s*(-?\\d\\d\\d\\d|\\d\\d)[-/](\\d?\\d)([iI]?)[-/](\\d?\\d)/m,l\u003d/^\\d?\\d[iI]?/m,c\u003d/^\\u95f0?\\u5341?[\\u4e00\\u4e8c\\u4e09\\u56db\\u4e94\\u516d\\u4e03\\u516b\\u4e5d]?\\u6708/m,u\u003d/^\\u95f0?\\u5341?[\\u4e00\\u4e8c\\u4e09\\u56db\\u4e94\\u516d\\u4e03\\u516b\\u4e5d]?/m;n.calendars.chinese\u003do;var f\u003d[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],h\u003d[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},{\"../main\":640,\"object-assign\":483}],627:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Coptic\",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Coptic\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Thout\",\"Paopi\",\"Hathor\",\"Koiak\",\"Tobi\",\"Meshir\",\"Paremhat\",\"Paremoude\",\"Pashons\",\"Paoni\",\"Epip\",\"Mesori\",\"Pi Kogi Enavot\"],monthNamesShort:[\"Tho\",\"Pao\",\"Hath\",\"Koi\",\"Tob\",\"Mesh\",\"Pat\",\"Pad\",\"Pash\",\"Pao\",\"Epi\",\"Meso\",\"PiK\"],dayNames:[\"Tkyriaka\",\"Pesnau\",\"Pshoment\",\"Peftoou\",\"Ptiou\",\"Psoou\",\"Psabbaton\"],dayNamesShort:[\"Tky\",\"Pes\",\"Psh\",\"Pef\",\"Pti\",\"Pso\",\"Psa\"],dayNamesMin:[\"Tk\",\"Pes\",\"Psh\",\"Pef\",\"Pt\",\"Pso\",\"Psa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t\u003de.year()+(e.year()\u003c0?1:0))%4\u003d\u003d3||t%4\u003d\u003d-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return(t\u003di.year())\u003c0\u0026\u0026t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e\u003dMath.floor(t)+.5-this.jdEpoch,r\u003dMath.floor((e-Math.floor((e+366)/1461))/365)+1;r\u003c\u003d0\u0026\u0026r--,e\u003dMath.floor(t)+.5-this.newDate(r,1,1).toJD();var n\u003dMath.floor(e/30)+1,i\u003de-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.coptic\u003da},{\"../main\":640,\"object-assign\":483}],628:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Discworld\",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Discworld\",epochs:[\"BUC\",\"UC\"],monthNames:[\"Ick\",\"Offle\",\"February\",\"March\",\"April\",\"May\",\"June\",\"Grune\",\"August\",\"Spune\",\"Sektober\",\"Ember\",\"December\"],monthNamesShort:[\"Ick\",\"Off\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Gru\",\"Aug\",\"Spu\",\"Sek\",\"Emb\",\"Dec\"],dayNames:[\"Sunday\",\"Octeday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Oct\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Oc\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),400},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,n.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n\u003dthis.dayOfWeek(t,e,r);return n\u003e\u003d2\u0026\u0026n\u003c\u003d6},extraInfo:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return{century:o[Math.floor((i.year()-1)/100)+1]||\"\"}},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return t\u003di.year()+(i.year()\u003c0?1:0),e\u003di.month(),(r\u003di.day())+(e\u003e1?16:0)+(e\u003e2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t\u003dMath.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e\u003dMath.floor(t/400)+1;t-\u003d400*(e-1),t+\u003dt\u003e15?16:0;var r\u003dMath.floor(t/32)+1,n\u003dt-32*(r-1)+1;return this.newDate(e\u003c\u003d0?e-1:e,r,n)}});var o\u003d{20:\"Fruitbat\",21:\"Anchovy\"};n.calendars.discworld\u003da},{\"../main\":640,\"object-assign\":483}],629:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Ethiopian\",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Ethiopian\",epochs:[\"BEE\",\"EE\"],monthNames:[\"Meskerem\",\"Tikemet\",\"Hidar\",\"Tahesas\",\"Tir\",\"Yekatit\",\"Megabit\",\"Miazia\",\"Genbot\",\"Sene\",\"Hamle\",\"Nehase\",\"Pagume\"],monthNamesShort:[\"Mes\",\"Tik\",\"Hid\",\"Tah\",\"Tir\",\"Yek\",\"Meg\",\"Mia\",\"Gen\",\"Sen\",\"Ham\",\"Neh\",\"Pag\"],dayNames:[\"Ehud\",\"Segno\",\"Maksegno\",\"Irob\",\"Hamus\",\"Arb\",\"Kidame\"],dayNamesShort:[\"Ehu\",\"Seg\",\"Mak\",\"Iro\",\"Ham\",\"Arb\",\"Kid\"],dayNamesMin:[\"Eh\",\"Se\",\"Ma\",\"Ir\",\"Ha\",\"Ar\",\"Ki\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t\u003de.year()+(e.year()\u003c0?1:0))%4\u003d\u003d3||t%4\u003d\u003d-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\"\"].invalidYear),13},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return(t\u003di.year())\u003c0\u0026\u0026t++,i.day()+30*(i.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e\u003dMath.floor(t)+.5-this.jdEpoch,r\u003dMath.floor((e-Math.floor((e+366)/1461))/365)+1;r\u003c\u003d0\u0026\u0026r--,e\u003dMath.floor(t)+.5-this.newDate(r,1,1).toJD();var n\u003dMath.floor(e/30)+1,i\u003de-30*(n-1)+1;return this.newDate(r,n,i)}}),n.calendars.ethiopian\u003da},{\"../main\":640,\"object-assign\":483}],630:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Hebrew\",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{\"\":{name:\"Hebrew\",epochs:[\"BAM\",\"AM\"],monthNames:[\"Nisan\",\"Iyar\",\"Sivan\",\"Tammuz\",\"Av\",\"Elul\",\"Tishrei\",\"Cheshvan\",\"Kislev\",\"Tevet\",\"Shevat\",\"Adar\",\"Adar II\"],monthNamesShort:[\"Nis\",\"Iya\",\"Siv\",\"Tam\",\"Av\",\"Elu\",\"Tis\",\"Che\",\"Kis\",\"Tev\",\"She\",\"Ada\",\"Ad2\"],dayNames:[\"Yom Rishon\",\"Yom Sheni\",\"Yom Shlishi\",\"Yom Revi\u0027i\",\"Yom Chamishi\",\"Yom Shishi\",\"Yom Shabbat\"],dayNamesShort:[\"Ris\",\"She\",\"Shl\",\"Rev\",\"Cha\",\"Shi\",\"Sha\"],dayNamesMin:[\"Ri\",\"She\",\"Shl\",\"Re\",\"Ch\",\"Shi\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return o(7*(t\u003dt\u003c0?t+1:t)+1,19)\u003c7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),this.toJD(-1\u003d\u003d\u003dt?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year\u0026\u0026(e\u003dt.month(),t\u003dt.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),12\u003d\u003d\u003de\u0026\u0026this.leapYear(t)||8\u003d\u003d\u003de\u0026\u00265\u003d\u003d\u003do(this.daysInYear(t),10)?30:9\u003d\u003d\u003de\u0026\u00263\u003d\u003d\u003do(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!\u003d\u003dthis.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return{yearType:(this.leapYear(i)?\"embolismic\":\"common\")+\" \"+[\"deficient\",\"regular\",\"complete\"][this.daysInYear(i)%10-3]}},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);t\u003di.year(),e\u003di.month(),r\u003di.day();var a\u003dt\u003c\u003d0?t+1:t,o\u003dthis.jdEpoch+this._delay1(a)+this._delay2(a)+r+1;if(e\u003c7){for(var s\u003d7;s\u003c\u003dthis.monthsInYear(t);s++)o+\u003dthis.daysInMonth(t,s);for(s\u003d1;s\u003ce;s++)o+\u003dthis.daysInMonth(t,s)}else for(s\u003d7;s\u003ce;s++)o+\u003dthis.daysInMonth(t,s);return o},_delay1:function(t){var e\u003dMath.floor((235*t-234)/19),r\u003d12084+13753*e,n\u003d29*e+Math.floor(r/25920);return o(3*(n+1),7)\u003c3\u0026\u0026n++,n},_delay2:function(t){var e\u003dthis._delay1(t-1),r\u003dthis._delay1(t);return this._delay1(t+1)-r\u003d\u003d356?2:r-e\u003d\u003d382?1:0},fromJD:function(t){t\u003dMath.floor(t)+.5;for(var e\u003dMath.floor(98496*(t-this.jdEpoch)/35975351)-1;t\u003e\u003dthis.toJD(-1\u003d\u003d\u003de?1:e+1,7,1);)e++;for(var r\u003dt\u003cthis.toJD(e,1,1)?7:1;t\u003ethis.toJD(e,r,this.daysInMonth(e,r));)r++;var n\u003dt-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.hebrew\u003da},{\"../main\":640,\"object-assign\":483}],631:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Islamic\",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Islamic\",epochs:[\"BH\",\"AH\"],monthNames:[\"Muharram\",\"Safar\",\"Rabi\u0027 al-awwal\",\"Rabi\u0027 al-thani\",\"Jumada al-awwal\",\"Jumada al-thani\",\"Rajab\",\"Sha\u0027aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi\u0027dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha\u0027\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-ahad\",\"Yawm al-ithnayn\",\"Yawm ath-thulaathaa\u0027\",\"Yawm al-arbi\u0027aa\u0027\",\"Yawm al-kham\\u012bs\",\"Yawm al-jum\u0027a\",\"Yawm as-sabt\"],dayNamesShort:[\"Aha\",\"Ith\",\"Thu\",\"Arb\",\"Kha\",\"Jum\",\"Sab\"],dayNamesMin:[\"Ah\",\"It\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year()+14)%30\u003c11},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!\u003d\u003dthis.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return t\u003di.year(),e\u003di.month(),t\u003dt\u003c\u003d0?t+1:t,(r\u003di.day())+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t\u003dMath.floor(t)+.5;var e\u003dMath.floor((30*(t-this.jdEpoch)+10646)/10631);e\u003de\u003c\u003d0?e-1:e;var r\u003dMath.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n\u003dt-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),n.calendars.islamic\u003da},{\"../main\":640,\"object-assign\":483}],632:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Julian\",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Julian\",epochs:[\"BC\",\"AD\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return(t\u003de.year()\u003c0?e.year()+1:e.year())%4\u003d\u003d0},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return t\u003di.year(),e\u003di.month(),r\u003di.day(),t\u003c0\u0026\u0026t++,e\u003c\u003d2\u0026\u0026(t--,e+\u003d12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e\u003dMath.floor(t+.5)+1524,r\u003dMath.floor((e-122.1)/365.25),n\u003dMath.floor(365.25*r),i\u003dMath.floor((e-n)/30.6001),a\u003di-Math.floor(i\u003c14?1:13),o\u003dr-Math.floor(a\u003e2?4716:4715),s\u003de-n-Math.floor(30.6001*i);return o\u003c\u003d0\u0026\u0026o--,this.newDate(o,a,s)}}),n.calendars.julian\u003da},{\"../main\":640,\"object-assign\":483}],633:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function o(t,e){return t-e*Math.floor(t/e)}function s(t,e){return o(t-1,e)+1}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Mayan\",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{\"\":{name:\"Mayan\",epochs:[\"\",\"\"],monthNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],monthNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\"],dayNames:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesShort:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],dayNamesMin:[\"0\",\"1\",\"2\",\"3\",\"4\",\"5\",\"6\",\"7\",\"8\",\"9\",\"10\",\"11\",\"12\",\"13\",\"14\",\"15\",\"16\",\"17\",\"18\",\"19\"],digits:null,dateFormat:\"YYYY.m.d\",firstDay:0,isRTL:!1,haabMonths:[\"Pop\",\"Uo\",\"Zip\",\"Zotz\",\"Tzec\",\"Xul\",\"Yaxkin\",\"Mol\",\"Chen\",\"Yax\",\"Zac\",\"Ceh\",\"Mac\",\"Kankin\",\"Muan\",\"Pax\",\"Kayab\",\"Cumku\",\"Uayeb\"],tzolkinMonths:[\"Imix\",\"Ik\",\"Akbal\",\"Kan\",\"Chicchan\",\"Cimi\",\"Manik\",\"Lamat\",\"Muluc\",\"Oc\",\"Chuen\",\"Eb\",\"Ben\",\"Ix\",\"Men\",\"Cib\",\"Caban\",\"Etznab\",\"Cauac\",\"Ahau\"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),!1},formatYear:function(t){t\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year();var e\u003dMath.floor(t/400);return t%\u003d400,t+\u003dt\u003c0?400:0,e+\".\"+Math.floor(t/20)+\".\"+t%20},forYear:function(t){if((t\u003dt.split(\".\")).length\u003c3)throw\"Invalid Mayan year\";for(var e\u003d0,r\u003d0;r\u003ct.length;r++){var n\u003dparseInt(t[r],10);if(Math.abs(n)\u003e19||r\u003e0\u0026\u0026n\u003c0)throw\"Invalid Mayan year\";e\u003d20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,n.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,n.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,n.local.invalidDate),!0},extraInfo:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate).toJD(),a\u003dthis._toHaab(i),o\u003dthis._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[o[0]-1],tzolkinDay:o[0],tzolkinTrecena:o[1]}},_toHaab:function(t){var e\u003do((t-\u003dthis.jdEpoch)+8+340,365);return[Math.floor(e/20)+1,o(e,20)]},_toTzolkin:function(t){return[s((t-\u003dthis.jdEpoch)+20,20),s(t+4,13)]},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);return i.day()+20*i.month()+360*i.year()+this.jdEpoch},fromJD:function(t){t\u003dMath.floor(t)+.5-this.jdEpoch;var e\u003dMath.floor(t/360);t%\u003d360,t+\u003dt\u003c0?360:0;var r\u003dMath.floor(t/20),n\u003dt%20;return this.newDate(e,r,n)}}),n.calendars.mayan\u003da},{\"../main\":640,\"object-assign\":483}],634:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar;var o\u003dn.instance(\"gregorian\");i(a.prototype,{name:\"Nanakshahi\",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Nanakshahi\",epochs:[\"BN\",\"AN\"],monthNames:[\"Chet\",\"Vaisakh\",\"Jeth\",\"Harh\",\"Sawan\",\"Bhadon\",\"Assu\",\"Katak\",\"Maghar\",\"Poh\",\"Magh\",\"Phagun\"],monthNamesShort:[\"Che\",\"Vai\",\"Jet\",\"Har\",\"Saw\",\"Bha\",\"Ass\",\"Kat\",\"Mgr\",\"Poh\",\"Mgh\",\"Pha\"],dayNames:[\"Somvaar\",\"Mangalvar\",\"Budhvaar\",\"Veervaar\",\"Shukarvaar\",\"Sanicharvaar\",\"Etvaar\"],dayNamesShort:[\"Som\",\"Mangal\",\"Budh\",\"Veer\",\"Shukar\",\"Sanichar\",\"Et\"],dayNamesMin:[\"So\",\"Ma\",\"Bu\",\"Ve\",\"Sh\",\"Sa\",\"Et\"],digits:null,dateFormat:\"dd-mm-yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear||n.regionalOptions[\"\"].invalidYear);return o.leapYear(e.year()+(e.year()\u003c1?1:0)+1469)},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidMonth);(t\u003di.year())\u003c0\u0026\u0026t++;for(var a\u003di.day(),s\u003d1;s\u003ci.month();s++)a+\u003dthis.daysPerMonth[s-1];return a+o.toJD(t+1468,3,13)},fromJD:function(t){t\u003dMath.floor(t+.5);for(var e\u003dMath.floor((t-(this.jdEpoch-1))/366);t\u003e\u003dthis.toJD(e+1,1,1);)e++;for(var r\u003dt-Math.floor(this.toJD(e,1,1)+.5)+1,n\u003d1;r\u003ethis.daysInMonth(e,n);)r-\u003dthis.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),n.calendars.nanakshahi\u003da},{\"../main\":640,\"object-assign\":483}],635:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Nepali\",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{\"\":{name:\"Nepali\",epochs:[\"BBS\",\"ABS\"],monthNames:[\"Baisakh\",\"Jestha\",\"Ashadh\",\"Shrawan\",\"Bhadra\",\"Ashwin\",\"Kartik\",\"Mangsir\",\"Paush\",\"Mangh\",\"Falgun\",\"Chaitra\"],monthNamesShort:[\"Bai\",\"Je\",\"As\",\"Shra\",\"Bha\",\"Ash\",\"Kar\",\"Mang\",\"Pau\",\"Ma\",\"Fal\",\"Chai\"],dayNames:[\"Aaitabaar\",\"Sombaar\",\"Manglbaar\",\"Budhabaar\",\"Bihibaar\",\"Shukrabaar\",\"Shanibaar\"],dayNamesShort:[\"Aaita\",\"Som\",\"Mangl\",\"Budha\",\"Bihi\",\"Shukra\",\"Shani\"],dayNamesMin:[\"Aai\",\"So\",\"Man\",\"Bu\",\"Bi\",\"Shu\",\"Sha\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!\u003d\u003dthis.daysPerYear},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear).year(),void 0\u003d\u003d\u003dthis.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e\u003d0,r\u003dthis.minMonth;r\u003c\u003d12;r++)e+\u003dthis.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year\u0026\u0026(e\u003dt.month(),t\u003dt.year()),this._validate(t,e,this.minDay,n.local.invalidMonth),void 0\u003d\u003d\u003dthis.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!\u003d\u003dthis.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);t\u003di.year(),e\u003di.month(),r\u003di.day();var a\u003dn.instance(),o\u003d0,s\u003de,l\u003dt;this._createMissingCalendarData(t);var c\u003dt-(s\u003e9||9\u003d\u003d\u003ds\u0026\u0026r\u003e\u003dthis.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!\u003d\u003de\u0026\u0026(o\u003dr,s--);9!\u003d\u003ds;)s\u003c\u003d0\u0026\u0026(s\u003d12,l--),o+\u003dthis.NEPALI_CALENDAR_DATA[l][s],s--;return 9\u003d\u003d\u003de?(o+\u003dr-this.NEPALI_CALENDAR_DATA[l][0])\u003c0\u0026\u0026(o+\u003da.daysInYear(c)):o+\u003dthis.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(c,1,1).add(o,\"d\").toJD()},fromJD:function(t){var e\u003dn.instance().fromJD(t),r\u003de.year(),i\u003de.dayOfYear(),a\u003dr+56;this._createMissingCalendarData(a);for(var o\u003d9,s\u003dthis.NEPALI_CALENDAR_DATA[a][0],l\u003dthis.NEPALI_CALENDAR_DATA[a][o]-s+1;i\u003el;)++o\u003e12\u0026\u0026(o\u003d1,a++),l+\u003dthis.NEPALI_CALENDAR_DATA[a][o];var c\u003dthis.NEPALI_CALENDAR_DATA[a][o]-(l-i);return this.newDate(a,o,c)},_createMissingCalendarData:function(t){var e\u003dthis.daysPerMonth.slice(0);e.unshift(17);for(var r\u003dt-1;r\u003ct+2;r++)void 0\u003d\u003d\u003dthis.NEPALI_CALENDAR_DATA[r]\u0026\u0026(this.NEPALI_CALENDAR_DATA[r]\u003de)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),n.calendars.nepali\u003da},{\"../main\":640,\"object-assign\":483}],636:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}function o(t,e){return t-e*Math.floor(t/e)}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"Persian\",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Persian\",epochs:[\"BP\",\"AP\"],monthNames:[\"Farvardin\",\"Ordibehesht\",\"Khordad\",\"Tir\",\"Mordad\",\"Shahrivar\",\"Mehr\",\"Aban\",\"Azar\",\"Day\",\"Bahman\",\"Esfand\"],monthNamesShort:[\"Far\",\"Ord\",\"Kho\",\"Tir\",\"Mor\",\"Sha\",\"Meh\",\"Aba\",\"Aza\",\"Day\",\"Bah\",\"Esf\"],dayNames:[\"Yekshambe\",\"Doshambe\",\"Seshambe\",\"Ch\\xe6harshambe\",\"Panjshambe\",\"Jom\u0027e\",\"Shambe\"],dayNamesShort:[\"Yek\",\"Do\",\"Se\",\"Ch\\xe6\",\"Panj\",\"Jom\",\"Sha\"],dayNamesMin:[\"Ye\",\"Do\",\"Se\",\"Ch\",\"Pa\",\"Jo\",\"Sh\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 682*((e.year()-(e.year()\u003e0?474:473))%2820+474+38)%2816\u003c682},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!\u003d\u003dthis.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);t\u003di.year(),e\u003di.month(),r\u003di.day();var a\u003dt-(t\u003e\u003d0?474:473),s\u003d474+o(a,2820);return r+(e\u003c\u003d7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(a/2820)+this.jdEpoch-1},fromJD:function(t){var e\u003d(t\u003dMath.floor(t)+.5)-this.toJD(475,1,1),r\u003dMath.floor(e/1029983),n\u003do(e,1029983),i\u003d2820;if(1029982!\u003d\u003dn){var a\u003dMath.floor(n/366),s\u003do(n,366);i\u003dMath.floor((2134*a+2816*s+2815)/1028522)+a+1}var l\u003di+2820*r+474;l\u003dl\u003c\u003d0?l-1:l;var c\u003dt-this.toJD(l,1,1)+1,u\u003dc\u003c\u003d186?Math.ceil(c/31):Math.ceil((c-6)/30),f\u003dt-this.toJD(l,u,1)+1;return this.newDate(l,u,f)}}),n.calendars.persian\u003da,n.calendars.jalali\u003da},{\"../main\":640,\"object-assign\":483}],637:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\"),a\u003dn.instance();function o(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}o.prototype\u003dnew n.baseCalendar,i(o.prototype,{name:\"Taiwan\",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Taiwan\",epochs:[\"BROC\",\"ROC\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:1,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t\u003dthis._t2gYear(e.year());return a.leapYear(t)},weekOfYear:function(t,e,r){var i\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t\u003dthis._t2gYear(i.year());return a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);t\u003dthis._t2gYear(i.year());return a.toJD(t,i.month(),i.day())},fromJD:function(t){var e\u003da.fromJD(t),r\u003dthis._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t\u003e\u003d-this.yearsOffset\u0026\u0026t\u003c\u003d-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t\u003e\u003d1\u0026\u0026t\u003c\u003dthis.yearsOffset?1:0)}}),n.calendars.taiwan\u003do},{\"../main\":640,\"object-assign\":483}],638:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\"),a\u003dn.instance();function o(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}o.prototype\u003dnew n.baseCalendar,i(o.prototype,{name:\"Thai\",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Thai\",epochs:[\"BBE\",\"BE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"dd/mm/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t\u003dthis._t2gYear(e.year());return a.leapYear(t)},weekOfYear:function(t,e,r){var i\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);t\u003dthis._t2gYear(i.year());return a.weekOfYear(t,i.month(),i.day())},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate);t\u003dthis._t2gYear(i.year());return a.toJD(t,i.month(),i.day())},fromJD:function(t){var e\u003da.fromJD(t),r\u003dthis._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t\u003e\u003d1\u0026\u0026t\u003c\u003dthis.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t\u003e\u003d-this.yearsOffset\u0026\u0026t\u003c\u003d-1?1:0)}}),n.calendars.thai\u003do},{\"../main\":640,\"object-assign\":483}],639:[function(t,e,r){var n\u003dt(\"../main\"),i\u003dt(\"object-assign\");function a(t){this.local\u003dthis.regionalOptions[t||\"\"]||this.regionalOptions[\"\"]}a.prototype\u003dnew n.baseCalendar,i(a.prototype,{name:\"UmmAlQura\",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Umm al-Qura\",epochs:[\"BH\",\"AH\"],monthNames:[\"Al-Muharram\",\"Safar\",\"Rabi\u0027 al-awwal\",\"Rabi\u0027 Al-Thani\",\"Jumada Al-Awwal\",\"Jumada Al-Thani\",\"Rajab\",\"Sha\u0027aban\",\"Ramadan\",\"Shawwal\",\"Dhu al-Qi\u0027dah\",\"Dhu al-Hijjah\"],monthNamesShort:[\"Muh\",\"Saf\",\"Rab1\",\"Rab2\",\"Jum1\",\"Jum2\",\"Raj\",\"Sha\u0027\",\"Ram\",\"Shaw\",\"DhuQ\",\"DhuH\"],dayNames:[\"Yawm al-Ahad\",\"Yawm al-Ithnain\",\"Yawm al-Thal\\u0101th\\u0101\\u2019\",\"Yawm al-Arba\\u2018\\u0101\\u2019\",\"Yawm al-Kham\\u012bs\",\"Yawm al-Jum\\u2018a\",\"Yawm al-Sabt\"],dayNamesMin:[\"Ah\",\"Ith\",\"Th\",\"Ar\",\"Kh\",\"Ju\",\"Sa\"],digits:null,dateFormat:\"yyyy/mm/dd\",firstDay:6,isRTL:!0}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,n.local.invalidYear);return 355\u003d\u003d\u003dthis.daysInYear(e.year())},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(-n.dayOfWeek(),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e\u003d0,r\u003d1;r\u003c\u003d12;r++)e+\u003dthis.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r\u003dthis._validate(t,e,this.minDay,n.local.invalidMonth).toJD()-24e5+.5,i\u003d0,a\u003d0;a\u003co.length;a++){if(o[a]\u003er)return o[i]-o[i-1];i++}return 30},weekDay:function(t,e,r){return 5!\u003d\u003dthis.dayOfWeek(t,e,r)},toJD:function(t,e,r){var i\u003dthis._validate(t,e,r,n.local.invalidDate),a\u003d12*(i.year()-1)+i.month()-15292;return i.day()+o[a-1]-1+24e5-.5},fromJD:function(t){for(var e\u003dt-24e5+.5,r\u003d0,n\u003d0;n\u003co.length\u0026\u0026!(o[n]\u003ee);n++)r++;var i\u003dr+15292,a\u003dMath.floor((i-1)/12),s\u003da+1,l\u003di-12*a,c\u003de-o[r-1]+1;return this.newDate(s,l,c)},isValid:function(t,e,r){var i\u003dn.baseCalendar.prototype.isValid.apply(this,arguments);return i\u0026\u0026(i\u003d(t\u003dnull!\u003dt.year?t.year:t)\u003e\u003d1276\u0026\u0026t\u003c\u003d1500),i},_validate:function(t,e,r,i){var a\u003dn.baseCalendar.prototype._validate.apply(this,arguments);if(a.year\u003c1276||a.year\u003e1500)throw i.replace(/\\{0\\}/,this.local.name);return a}}),n.calendars.ummalqura\u003da;var o\u003d[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},{\"../main\":640,\"object-assign\":483}],640:[function(t,e,r){var n\u003dt(\"object-assign\");function i(){this.regionalOptions\u003d[],this.regionalOptions[\"\"]\u003d{invalidCalendar:\"Calendar {0} not found\",invalidDate:\"Invalid {0} date\",invalidMonth:\"Invalid {0} month\",invalidYear:\"Invalid {0} year\",differentCalendars:\"Cannot mix {0} and {1} dates\"},this.local\u003dthis.regionalOptions[\"\"],this.calendars\u003d{},this._localCals\u003d{}}function a(t,e,r,n){if(this._calendar\u003dt,this._year\u003de,this._month\u003dr,this._day\u003dn,0\u003d\u003d\u003dthis._calendar._validateLevel\u0026\u0026!this._calendar.isValid(this._year,this._month,this._day))throw(c.local.invalidDate||c.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name)}function o(t,e){return\"000000\".substring(0,e-(t\u003d\"\"+t).length)+t}function s(){this.shortYearCutoff\u003d\"+10\"}function l(t){this.local\u003dthis.regionalOptions[t]||this.regionalOptions[\"\"]}n(i.prototype,{instance:function(t,e){t\u003d(t||\"gregorian\").toLowerCase(),e\u003de||\"\";var r\u003dthis._localCals[t+\"-\"+e];if(!r\u0026\u0026this.calendars[t]\u0026\u0026(r\u003dnew this.calendars[t](e),this._localCals[t+\"-\"+e]\u003dr),!r)throw(this.local.invalidCalendar||this.regionalOptions[\"\"].invalidCalendar).replace(/\\{0\\}/,t);return r},newDate:function(t,e,r,n,i){return(n\u003d(null!\u003dt\u0026\u0026t.year?t.calendar():\"string\"\u003d\u003dtypeof n?this.instance(n,i):n)||this.instance()).newDate(t,e,r)},substituteDigits:function(t){return function(e){return(e+\"\").replace(/[0-9]/g,(function(e){return t[e]}))}},substituteChineseDigits:function(t,e){return function(r){for(var n\u003d\"\",i\u003d0;r\u003e0;){var a\u003dr%10;n\u003d(0\u003d\u003d\u003da?\"\":t[a]+e[i])+n,i++,r\u003dMath.floor(r/10)}return 0\u003d\u003d\u003dn.indexOf(t[1]+e[1])\u0026\u0026(n\u003dn.substr(1)),n||t[0]}}}),n(a.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null\u003d\u003dt?this:t,e,r)},year:function(t){return 0\u003d\u003d\u003darguments.length?this._year:this.set(t,\"y\")},month:function(t){return 0\u003d\u003d\u003darguments.length?this._month:this.set(t,\"m\")},day:function(t){return 0\u003d\u003d\u003darguments.length?this._day:this.set(t,\"d\")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(c.local.invalidDate||c.regionalOptions[\"\"].invalidDate).replace(/\\{0\\}/,this._calendar.local.name);return this._year\u003dt,this._month\u003de,this._day\u003dr,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!\u003d\u003dt._calendar.name)throw(c.local.differentCalendars||c.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this._calendar.local.name).replace(/\\{1\\}/,t._calendar.local.name);var e\u003dthis._year!\u003d\u003dt._year?this._year-t._year:this._month!\u003d\u003dt._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0\u003d\u003d\u003de?0:e\u003c0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()\u003c0?\"-\":\"\")+o(Math.abs(this.year()),4)+\"-\"+o(this.month(),2)+\"-\"+o(this.day(),2)}}),n(s.prototype,{_validateLevel:0,newDate:function(t,e,r){return null\u003d\u003dt?this.today():(t.year\u0026\u0026(this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),r\u003dt.day(),e\u003dt.month(),t\u003dt.year()),new a(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear).year()\u003c0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear);return(e.year()\u003c0?\"-\":\"\")+o(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear),12},monthOfYear:function(t,e){var r\u003dthis._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[\"\"].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r\u003d(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,c.local.invalidMonth||c.regionalOptions[\"\"].invalidMonth),r},daysInYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n\u003dthis._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n\u003dthis._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,\"d\"\u003d\u003d\u003dr||\"w\"\u003d\u003d\u003dr){var n\u003dt.toJD()+e*(\"w\"\u003d\u003d\u003dr?this.daysInWeek():1),i\u003dt.calendar().fromJD(n);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a\u003dt.year()+(\"y\"\u003d\u003d\u003dr?e:0),o\u003dt.monthOfYear()+(\"m\"\u003d\u003d\u003dr?e:0);i\u003dt.day();\"y\"\u003d\u003d\u003dr?(t.month()!\u003d\u003dthis.fromMonthOfYear(a,o)\u0026\u0026(o\u003dthis.newDate(a,t.month(),this.minDay).monthOfYear()),o\u003dMath.min(o,this.monthsInYear(a)),i\u003dMath.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):\"m\"\u003d\u003d\u003dr\u0026\u0026(!function(t){for(;o\u003ct.minMonth;)a--,o+\u003dt.monthsInYear(a);for(var e\u003dt.monthsInYear(a);o\u003ee-1+t.minMonth;)a++,o-\u003de,e\u003dt.monthsInYear(a)}(this),i\u003dMath.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var s\u003d[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||\"y\"!\u003d\u003dn\u0026\u0026\"m\"!\u003d\u003dn||0!\u003d\u003de[0]\u0026\u0026t.year()\u003e0\u003d\u003de[0]\u003e0)){var i\u003d{y:[1,1,\"y\"],m:[1,this.monthsInYear(-1),\"m\"],w:[this.daysInWeek(),this.daysInYear(-1),\"d\"],d:[1,this.daysInYear(-1),\"d\"]}[n],a\u003dr\u003c0?-1:1;e\u003dthis._add(t,r*i[0]+a*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);var n\u003d\"y\"\u003d\u003d\u003dr?e:t.year(),i\u003d\"m\"\u003d\u003d\u003dr?e:t.month(),a\u003d\"d\"\u003d\u003d\u003dr?e:t.day();return\"y\"!\u003d\u003dr\u0026\u0026\"m\"!\u003d\u003dr||(a\u003dMath.min(a,this.daysInMonth(n,i))),t.date(n,i,a)},isValid:function(t,e,r){this._validateLevel++;var n\u003dthis.hasYearZero||0!\u003d\u003dt;if(n){var i\u003dthis.newDate(t,e,this.minDay);n\u003de\u003e\u003dthis.minMonth\u0026\u0026e-this.minMonth\u003cthis.monthsInYear(i)\u0026\u0026r\u003e\u003dthis.minDay\u0026\u0026r-this.minDay\u003cthis.daysInMonth(i)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n\u003dthis._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);return c.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(c.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0\u003d\u003d\u003dthis._validateLevel\u0026\u0026this.name!\u003d\u003dt.calendar().name)throw(c.local.differentCalendars||c.regionalOptions[\"\"].differentCalendars).replace(/\\{0\\}/,this.local.name).replace(/\\{1\\}/,t.calendar().local.name);return t}try{if(this._validateLevel++,1\u003d\u003d\u003dthis._validateLevel\u0026\u0026!this.isValid(t,e,r))throw n.replace(/\\{0\\}/,this.local.name);var i\u003dthis.newDate(t,e,r);return this._validateLevel--,i}catch(t){throw this._validateLevel--,t}}}),l.prototype\u003dnew s,n(l.prototype,{name:\"Gregorian\",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{\"\":{name:\"Gregorian\",epochs:[\"BCE\",\"CE\"],monthNames:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],monthNamesShort:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],dayNames:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],dayNamesShort:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],dayNamesMin:[\"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\"],digits:null,dateFormat:\"mm/dd/yyyy\",firstDay:0,isRTL:!1}},leapYear:function(t){var e\u003dthis._validate(t,this.minMonth,this.minDay,c.local.invalidYear||c.regionalOptions[\"\"].invalidYear);return(t\u003de.year()+(e.year()\u003c0?1:0))%4\u003d\u003d0\u0026\u0026(t%100!\u003d0||t%400\u003d\u003d0)},weekOfYear:function(t,e,r){var n\u003dthis.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),\"d\"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r\u003dthis._validate(t,e,this.minDay,c.local.invalidMonth||c.regionalOptions[\"\"].invalidMonth);return this.daysPerMonth[r.month()-1]+(2\u003d\u003d\u003dr.month()\u0026\u0026this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)\u003c6},toJD:function(t,e,r){var n\u003dthis._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate);t\u003dn.year(),e\u003dn.month(),r\u003dn.day(),t\u003c0\u0026\u0026t++,e\u003c3\u0026\u0026(e+\u003d12,t--);var i\u003dMath.floor(t/100),a\u003d2-i+Math.floor(i/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+a-1524.5},fromJD:function(t){var e\u003dMath.floor(t+.5),r\u003dMath.floor((e-1867216.25)/36524.25),n\u003d(r\u003de+1+r-Math.floor(r/4))+1524,i\u003dMath.floor((n-122.1)/365.25),a\u003dMath.floor(365.25*i),o\u003dMath.floor((n-a)/30.6001),s\u003dn-a-Math.floor(30.6001*o),l\u003do-(o\u003e13.5?13:1),c\u003di-(l\u003e2.5?4716:4715);return c\u003c\u003d0\u0026\u0026c--,this.newDate(c,l,s)},toJSDate:function(t,e,r){var n\u003dthis._validate(t,e,r,c.local.invalidDate||c.regionalOptions[\"\"].invalidDate),i\u003dnew Date(n.year(),n.month()-1,n.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()\u003e12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var c\u003de.exports\u003dnew i;c.cdate\u003da,c.baseCalendar\u003ds,c.calendars.gregorian\u003dl},{\"object-assign\":483}],641:[function(t,e,r){var n\u003dt(\"object-assign\"),i\u003dt(\"./main\");n(i.regionalOptions[\"\"],{invalidArguments:\"Invalid arguments\",invalidFormat:\"Cannot format a date from another calendar\",missingNumberAt:\"Missing number at position {0}\",unknownNameAt:\"Unknown name at position {0}\",unexpectedLiteralAt:\"Unexpected literal at position {0}\",unexpectedText:\"Additional text found at end\"}),i.local\u003di.regionalOptions[\"\"],n(i.cdate.prototype,{formatDate:function(t,e){return\"string\"!\u003dtypeof t\u0026\u0026(e\u003dt,t\u003d\"\"),this._calendar.formatDate(t||\"\",this,e)}}),n(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:\"yyyy-mm-dd\",COOKIE:\"D, dd M yyyy\",FULL:\"DD, MM d, yyyy\",ISO_8601:\"yyyy-mm-dd\",JULIAN:\"J\",RFC_822:\"D, d M yy\",RFC_850:\"DD, dd-M-yy\",RFC_1036:\"D, d M yy\",RFC_1123:\"D, d M yyyy\",RFC_2822:\"D, d M yyyy\",RSS:\"D, d M yy\",TICKS:\"!\",TIMESTAMP:\"@\",W3C:\"yyyy-mm-dd\",formatDate:function(t,e,r){if(\"string\"!\u003dtypeof t\u0026\u0026(r\u003de,e\u003dt,t\u003d\"\"),!e)return\"\";if(e.calendar()!\u003d\u003dthis)throw i.local.invalidFormat||i.regionalOptions[\"\"].invalidFormat;t\u003dt||this.local.dateFormat;for(var n,a,o,s,l\u003d(r\u003dr||{}).dayNamesShort||this.local.dayNamesShort,c\u003dr.dayNames||this.local.dayNames,u\u003dr.monthNumbers||this.local.monthNumbers,f\u003dr.monthNamesShort||this.local.monthNamesShort,h\u003dr.monthNames||this.local.monthNames,p\u003d(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n\u003d1;w+n\u003ct.length\u0026\u0026t.charAt(w+n)\u003d\u003d\u003de;)n++;return w+\u003dn-1,Math.floor(n/(r||1))\u003e1}),d\u003dfunction(t,e,r,n){var i\u003d\"\"+e;if(p(t,n))for(;i.length\u003cr;)i\u003d\"0\"+i;return i},m\u003dthis,g\u003dfunction(t){return\"function\"\u003d\u003dtypeof u?u.call(m,t,p(\"m\")):x(d(\"m\",t.month(),2))},v\u003dfunction(t,e){return e?\"function\"\u003d\u003dtypeof h?h.call(m,t):h[t.month()-m.minMonth]:\"function\"\u003d\u003dtypeof f?f.call(m,t):f[t.month()-m.minMonth]},y\u003dthis.local.digits,x\u003dfunction(t){return r.localNumbers\u0026\u0026y?y(t):t},b\u003d\"\",_\u003d!1,w\u003d0;w\u003ct.length;w++)if(_)\"\u0027\"!\u003d\u003dt.charAt(w)||p(\"\u0027\")?b+\u003dt.charAt(w):_\u003d!1;else switch(t.charAt(w)){case\"d\":b+\u003dx(d(\"d\",e.day(),2));break;case\"D\":b+\u003d(n\u003d\"D\",a\u003de.dayOfWeek(),o\u003dl,s\u003dc,p(n)?s[a]:o[a]);break;case\"o\":b+\u003dd(\"o\",e.dayOfYear(),3);break;case\"w\":b+\u003dd(\"w\",e.weekOfYear(),2);break;case\"m\":b+\u003dg(e);break;case\"M\":b+\u003dv(e,p(\"M\"));break;case\"y\":b+\u003dp(\"y\",2)?e.year():(e.year()%100\u003c10?\"0\":\"\")+e.year()%100;break;case\"Y\":p(\"Y\",2),b+\u003de.formatYear();break;case\"J\":b+\u003de.toJD();break;case\"@\":b+\u003d(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case\"!\":b+\u003d(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case\"\u0027\":p(\"\u0027\")?b+\u003d\"\u0027\":_\u003d!0;break;default:b+\u003dt.charAt(w)}return b},parseDate:function(t,e,r){if(null\u003d\u003de)throw i.local.invalidArguments||i.regionalOptions[\"\"].invalidArguments;if(\"\"\u003d\u003d\u003d(e\u003d\"object\"\u003d\u003dtypeof e?e.toString():e+\"\"))return null;t\u003dt||this.local.dateFormat;var n\u003d(r\u003dr||{}).shortYearCutoff||this.shortYearCutoff;n\u003d\"string\"!\u003dtypeof n?n:this.today().year()%100+parseInt(n,10);for(var a\u003dr.dayNamesShort||this.local.dayNamesShort,o\u003dr.dayNames||this.local.dayNames,s\u003dr.parseMonth||this.local.parseMonth,l\u003dr.monthNumbers||this.local.monthNumbers,c\u003dr.monthNamesShort||this.local.monthNamesShort,u\u003dr.monthNames||this.local.monthNames,f\u003d-1,h\u003d-1,p\u003d-1,d\u003d-1,m\u003d-1,g\u003d!1,v\u003d!1,y\u003dfunction(e,r){for(var n\u003d1;A+n\u003ct.length\u0026\u0026t.charAt(A+n)\u003d\u003d\u003de;)n++;return A+\u003dn-1,Math.floor(n/(r||1))\u003e1},x\u003dfunction(t,r){var n\u003dy(t,r),a\u003d[2,3,n?4:2,n?4:2,10,11,20][\"oyYJ@!\".indexOf(t)+1],o\u003dnew RegExp(\"^-?\\\\d{1,\"+a+\"}\"),s\u003de.substring(M).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[\"\"].missingNumberAt).replace(/\\{0\\}/,M);return M+\u003ds[0].length,parseInt(s[0],10)},b\u003dthis,_\u003dfunction(){if(\"function\"\u003d\u003dtypeof l){y(\"m\");var t\u003dl.call(b,e.substring(M));return M+\u003dt.length,t}return x(\"m\")},w\u003dfunction(t,r,n,a){for(var o\u003dy(t,a)?n:r,s\u003d0;s\u003co.length;s++)if(e.substr(M,o[s].length).toLowerCase()\u003d\u003d\u003do[s].toLowerCase())return M+\u003do[s].length,s+b.minMonth;throw(i.local.unknownNameAt||i.regionalOptions[\"\"].unknownNameAt).replace(/\\{0\\}/,M)},T\u003dfunction(){if(\"function\"\u003d\u003dtypeof u){var t\u003dy(\"M\")?u.call(b,e.substring(M)):c.call(b,e.substring(M));return M+\u003dt.length,t}return w(\"M\",c,u)},k\u003dfunction(){if(e.charAt(M)!\u003d\u003dt.charAt(A))throw(i.local.unexpectedLiteralAt||i.regionalOptions[\"\"].unexpectedLiteralAt).replace(/\\{0\\}/,M);M++},M\u003d0,A\u003d0;A\u003ct.length;A++)if(v)\"\u0027\"!\u003d\u003dt.charAt(A)||y(\"\u0027\")?k():v\u003d!1;else switch(t.charAt(A)){case\"d\":d\u003dx(\"d\");break;case\"D\":w(\"D\",a,o);break;case\"o\":m\u003dx(\"o\");break;case\"w\":x(\"w\");break;case\"m\":p\u003d_();break;case\"M\":p\u003dT();break;case\"y\":var S\u003dA;g\u003d!y(\"y\",2),A\u003dS,h\u003dx(\"y\",2);break;case\"Y\":h\u003dx(\"Y\",2);break;case\"J\":f\u003dx(\"J\")+.5,\".\"\u003d\u003d\u003de.charAt(M)\u0026\u0026(M++,x(\"J\"));break;case\"@\":f\u003dx(\"@\")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case\"!\":f\u003dx(\"!\")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case\"*\":M\u003de.length;break;case\"\u0027\":y(\"\u0027\")?k():v\u003d!0;break;default:k()}if(M\u003ce.length)throw i.local.unexpectedText||i.regionalOptions[\"\"].unexpectedText;if(-1\u003d\u003d\u003dh?h\u003dthis.today().year():h\u003c100\u0026\u0026g\u0026\u0026(h+\u003d-1\u003d\u003d\u003dn?1900:this.today().year()-this.today().year()%100-(h\u003c\u003dn?0:100)),\"string\"\u003d\u003dtypeof p\u0026\u0026(p\u003ds.call(this,h,p)),m\u003e-1){p\u003d1,d\u003dm;for(var E\u003dthis.daysInMonth(h,p);d\u003eE;E\u003dthis.daysInMonth(h,p))p++,d-\u003dE}return f\u003e-1?this.fromJD(f):this.newDate(h,p,d)},determineDate:function(t,e,r,n,i){r\u0026\u0026\"object\"!\u003dtypeof r\u0026\u0026(i\u003dn,n\u003dr,r\u003dnull),\"string\"!\u003dtypeof n\u0026\u0026(i\u003dn,n\u003d\"\");var a\u003dthis;return e\u003de?e.newDate():null,t\u003dnull\u003d\u003dt?e:\"string\"\u003d\u003dtypeof t?function(t){try{return a.parseDate(n,t,i)}catch(t){}for(var e\u003d((t\u003dt.toLowerCase()).match(/^c/)\u0026\u0026r?r.newDate():null)||a.today(),o\u003d/([+-]?[0-9]+)\\s*(d|w|m|y)?/g,s\u003do.exec(t);s;)e.add(parseInt(s[1],10),s[2]||\"d\"),s\u003do.exec(t);return e}(t):\"number\"\u003d\u003dtypeof t?isNaN(t)||t\u003d\u003d\u003d1/0||t\u003d\u003d\u003d-1/0?e:a.today().add(t,\"d\"):a.newDate(t)}})},{\"./main\":640,\"object-assign\":483}],642:[function(t,e,r){e.exports\u003dt(\"cwise-compiler\")({args:[\"array\",{offset:[1],array:0},\"scalar\",\"scalar\",\"index\"],pre:{body:\"{}\",args:[],thisVars:[],localVars:[]},post:{body:\"{}\",args:[],thisVars:[],localVars:[]},body:{body:\"{\\n        var _inline_1_da \u003d _inline_1_arg0_ - _inline_1_arg3_\\n        var _inline_1_db \u003d _inline_1_arg1_ - _inline_1_arg3_\\n        if((_inline_1_da \u003e\u003d 0) !\u003d\u003d (_inline_1_db \u003e\u003d 0)) {\\n          _inline_1_arg2_.push(_inline_1_arg4_[0] + 0.5 + 0.5 * (_inline_1_da + _inline_1_db) / (_inline_1_da - _inline_1_db))\\n        }\\n      }\",args:[{name:\"_inline_1_arg0_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg1_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg2_\",lvalue:!1,rvalue:!0,count:1},{name:\"_inline_1_arg3_\",lvalue:!1,rvalue:!0,count:2},{name:\"_inline_1_arg4_\",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:[\"_inline_1_da\",\"_inline_1_db\"]},funcName:\"zeroCrossings\"})},{\"cwise-compiler\":157}],643:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003d[];return e\u003d+e||0,n(t.hi(t.shape[0]-1),r,e),r};var n\u003dt(\"./lib/zc-core\")},{\"./lib/zc-core\":642}],644:[function(t,e,r){\"use strict\";e.exports\u003d[{path:\"\",backoff:0},{path:\"M-2.4,-3V3L0.6,0Z\",backoff:.6},{path:\"M-3.7,-2.5V2.5L1.3,0Z\",backoff:1.3},{path:\"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z\",backoff:1.55},{path:\"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z\",backoff:1.6},{path:\"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z\",backoff:2},{path:\"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z\",backoff:0,noRotate:!0},{path:\"M2,2V-2H-2V2Z\",backoff:0,noRotate:!0}]},{}],645:[function(t,e,r){\"use strict\";var n\u003dt(\"./arrow_paths\"),i\u003dt(\"../../plots/font_attributes\"),a\u003dt(\"../../plots/cartesian/constants\"),o\u003dt(\"../../plot_api/plot_template\").templatedArray;t(\"../../constants/axis_placeable_objects\");e.exports\u003do(\"annotation\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},text:{valType:\"string\",editType:\"calc+arraydraw\"},textangle:{valType:\"angle\",dflt:0,editType:\"calc+arraydraw\"},font:i({editType:\"calc+arraydraw\",colorEditType:\"arraydraw\"}),width:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},height:{valType:\"number\",min:1,dflt:null,editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"center\",editType:\"arraydraw\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"arraydraw\"},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},borderpad:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc+arraydraw\"},showarrow:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},arrowcolor:{valType:\"color\",editType:\"arraydraw\"},arrowhead:{valType:\"integer\",min:0,max:n.length,dflt:1,editType:\"arraydraw\"},startarrowhead:{valType:\"integer\",min:0,max:n.length,dflt:1,editType:\"arraydraw\"},arrowside:{valType:\"flaglist\",flags:[\"end\",\"start\"],extras:[\"none\"],dflt:\"end\",editType:\"arraydraw\"},arrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},startarrowsize:{valType:\"number\",min:.3,dflt:1,editType:\"calc+arraydraw\"},arrowwidth:{valType:\"number\",min:.1,editType:\"calc+arraydraw\"},standoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},startstandoff:{valType:\"number\",min:0,dflt:0,editType:\"calc+arraydraw\"},ax:{valType:\"any\",editType:\"calc+arraydraw\"},ay:{valType:\"any\",editType:\"calc+arraydraw\"},axref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.x.toString()],editType:\"calc\"},ayref:{valType:\"enumerated\",dflt:\"pixel\",values:[\"pixel\",a.idRegex.y.toString()],editType:\"calc\"},xref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.x.toString()],editType:\"calc\"},x:{valType:\"any\",editType:\"calc+arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"auto\",editType:\"calc+arraydraw\"},xshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",a.idRegex.y.toString()],editType:\"calc\"},y:{valType:\"any\",editType:\"calc+arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"auto\",editType:\"calc+arraydraw\"},yshift:{valType:\"number\",dflt:0,editType:\"calc+arraydraw\"},clicktoshow:{valType:\"enumerated\",values:[!1,\"onoff\",\"onout\"],dflt:!1,editType:\"arraydraw\"},xclick:{valType:\"any\",editType:\"arraydraw\"},yclick:{valType:\"any\",editType:\"arraydraw\"},hovertext:{valType:\"string\",editType:\"arraydraw\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"arraydraw\"},bordercolor:{valType:\"color\",editType:\"arraydraw\"},font:i({editType:\"arraydraw\"}),editType:\"arraydraw\"},captureevents:{valType:\"boolean\",editType:\"arraydraw\"},editType:\"calc\",_deprecated:{ref:{valType:\"string\",editType:\"calc\"}}})},{\"../../constants/axis_placeable_objects\":768,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/constants\":856,\"../../plots/font_attributes\":878,\"./arrow_paths\":644}],646:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"./draw\").draw;function o(t){var e\u003dt._fullLayout;n.filterVisible(e.annotations).forEach((function(e){var r\u003di.getFromId(t,e.xref),n\u003di.getFromId(t,e.yref),a\u003di.getRefType(e.xref),o\u003di.getRefType(e.yref);e._extremes\u003d{},\"range\"\u003d\u003d\u003da\u0026\u0026s(e,r),\"range\"\u003d\u003d\u003do\u0026\u0026s(e,n)}))}function s(t,e){var r,n\u003de._id,a\u003dn.charAt(0),o\u003dt[a],s\u003dt[\"a\"+a],l\u003dt[a+\"ref\"],c\u003dt[\"a\"+a+\"ref\"],u\u003dt[\"_\"+a+\"padplus\"],f\u003dt[\"_\"+a+\"padminus\"],h\u003d{x:1,y:-1}[a]*t[a+\"shift\"],p\u003d3*t.arrowsize*t.arrowwidth||0,d\u003dp+h,m\u003dp-h,g\u003d3*t.startarrowsize*t.arrowwidth||0,v\u003dg+h,y\u003dg-h;if(c\u003d\u003d\u003dl){var x\u003di.findExtremes(e,[e.r2c(o)],{ppadplus:d,ppadminus:m}),b\u003di.findExtremes(e,[e.r2c(s)],{ppadplus:Math.max(u,v),ppadminus:Math.max(f,y)});r\u003d{min:[x.min[0],b.min[0]],max:[x.max[0],b.max[0]]}}else v\u003ds?v+s:v,y\u003ds?y-s:y,r\u003di.findExtremes(e,[e.r2c(o)],{ppadplus:Math.max(u,d,v),ppadminus:Math.max(f,m,y)});t._extremes[n]\u003dr}e.exports\u003dfunction(t){var e\u003dt._fullLayout;if(n.filterVisible(e.annotations).length\u0026\u0026t._fullData.length)return n.syncOrAsync([a,o],t)}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"./draw\":651}],647:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../plot_api/plot_template\").arrayEditor;function o(t,e){var r,n,i,a,o,l,c,u\u003dt._fullLayout.annotations,f\u003d[],h\u003d[],p\u003d[],d\u003d(e||[]).length;for(r\u003d0;r\u003cu.length;r++)if(a\u003d(i\u003du[r]).clicktoshow){for(n\u003d0;n\u003cd;n++)if(l\u003d(o\u003de[n]).xaxis,c\u003do.yaxis,l._id\u003d\u003d\u003di.xref\u0026\u0026c._id\u003d\u003d\u003di.yref\u0026\u0026l.d2r(o.x)\u003d\u003d\u003ds(i._xclick,l)\u0026\u0026c.d2r(o.y)\u003d\u003d\u003ds(i._yclick,c)){(i.visible?\"onout\"\u003d\u003d\u003da?h:p:f).push(r);break}n\u003d\u003d\u003dd\u0026\u0026i.visible\u0026\u0026\"onout\"\u003d\u003d\u003da\u0026\u0026h.push(r)}return{on:f,off:h,explicitOff:p}}function s(t,e){return\"log\"\u003d\u003d\u003de.type?e.l2r(t):e.d2r(t)}e.exports\u003d{hasClickToShow:function(t,e){var r\u003do(t,e);return r.on.length\u003e0||r.explicitOff.length\u003e0},onClick:function(t,e){var r,s,l\u003do(t,e),c\u003dl.on,u\u003dl.off.concat(l.explicitOff),f\u003d{},h\u003dt._fullLayout.annotations;if(!c.length\u0026\u0026!u.length)return;for(r\u003d0;r\u003cc.length;r++)(s\u003da(t.layout,\"annotations\",h[c[r]])).modifyItem(\"visible\",!0),n.extendFlat(f,s.getUpdateObj());for(r\u003d0;r\u003cu.length;r++)(s\u003da(t.layout,\"annotations\",h[u[r]])).modifyItem(\"visible\",!1),n.extendFlat(f,s.getUpdateObj());return i.call(\"update\",t,{},f)}}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../registry\":927}],648:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../color\");e.exports\u003dfunction(t,e,r,a){a(\"opacity\");var o\u003da(\"bgcolor\"),s\u003da(\"bordercolor\"),l\u003di.opacity(s);a(\"borderpad\");var c\u003da(\"borderwidth\"),u\u003da(\"showarrow\");if(a(\"text\",u?\" \":r._dfltTitle.annotation),a(\"textangle\"),n.coerceFont(a,\"font\",r.font),a(\"width\"),a(\"align\"),a(\"height\")\u0026\u0026a(\"valign\"),u){var f,h,p\u003da(\"arrowside\");-1!\u003d\u003dp.indexOf(\"end\")\u0026\u0026(f\u003da(\"arrowhead\"),h\u003da(\"arrowsize\")),-1!\u003d\u003dp.indexOf(\"start\")\u0026\u0026(a(\"startarrowhead\",f),a(\"startarrowsize\",h)),a(\"arrowcolor\",l?e.bordercolor:i.defaultLine),a(\"arrowwidth\",2*(l\u0026\u0026c||1)),a(\"standoff\"),a(\"startstandoff\")}var d\u003da(\"hovertext\"),m\u003dr.hoverlabel||{};if(d){var g\u003da(\"hoverlabel.bgcolor\",m.bgcolor||(i.opacity(o)?i.rgb(o):i.defaultLine)),v\u003da(\"hoverlabel.bordercolor\",m.bordercolor||i.contrast(g));n.coerceFont(a,\"hoverlabel.font\",{family:m.font.family,size:m.font.size,color:m.font.color||v})}a(\"captureevents\",!!d)}},{\"../../lib\":799,\"../color\":662}],649:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib/to_log_range\");e.exports\u003dfunction(t,e,r,a){e\u003de||{};var o\u003d\"log\"\u003d\u003d\u003dr\u0026\u0026\"linear\"\u003d\u003d\u003de.type,s\u003d\"linear\"\u003d\u003d\u003dr\u0026\u0026\"log\"\u003d\u003d\u003de.type;if(o||s)for(var l,c,u\u003dt._fullLayout.annotations,f\u003de._id.charAt(0),h\u003d0;h\u003cu.length;h++)l\u003du[h],c\u003d\"annotations[\"+h+\"].\",l[f+\"ref\"]\u003d\u003d\u003de._id\u0026\u0026p(f),l[\"a\"+f+\"ref\"]\u003d\u003d\u003de._id\u0026\u0026p(\"a\"+f);function p(t){var r\u003dl[t],s\u003dnull;s\u003do?i(r,e.range):Math.pow(10,r),n(s)||(s\u003dnull),a(c+t,s)}}},{\"../../lib/to_log_range\":826,\"fast-isnumeric\":245}],650:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../plots/array_container_defaults\"),o\u003dt(\"./common_defaults\"),s\u003dt(\"./attributes\");function l(t,e,r){function a(r,i){return n.coerce(t,e,s,r,i)}var l\u003da(\"visible\"),c\u003da(\"clicktoshow\");if(l||c){o(t,e,r,a);for(var u\u003de.showarrow,f\u003d[\"x\",\"y\"],h\u003d[-10,-30],p\u003d{_fullLayout:r},d\u003d0;d\u003c2;d++){var m\u003df[d],g\u003di.coerceRef(t,e,p,m,\"\",\"paper\");if(\"paper\"!\u003d\u003dg)i.getFromId(p,g)._annIndices.push(e._index);if(i.coercePosition(e,p,a,g,m,.5),u){var v\u003d\"a\"+m,y\u003di.coerceRef(t,e,p,v,\"pixel\",[\"pixel\",\"paper\"]);\"pixel\"!\u003d\u003dy\u0026\u0026y!\u003d\u003dg\u0026\u0026(y\u003de[v]\u003d\"pixel\");var x\u003d\"pixel\"\u003d\u003d\u003dy?h[d]:.4;i.coercePosition(e,p,a,y,v,x)}a(m+\"anchor\"),a(m+\"shift\")}if(n.noneOrAll(t,e,[\"x\",\"y\"]),u\u0026\u0026n.noneOrAll(t,e,[\"ax\",\"ay\"]),c){var b\u003da(\"xclick\"),_\u003da(\"yclick\");e._xclick\u003dvoid 0\u003d\u003d\u003db?e.x:i.cleanPosition(b,p,e.xref),e._yclick\u003dvoid 0\u003d\u003d\u003d_?e.y:i.cleanPosition(_,p,e.yref)}}}e.exports\u003dfunction(t,e){a(t,e,{name:\"annotations\",handleItemDefaults:l})}},{\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"../../plots/cartesian/axes\":849,\"./attributes\":645,\"./common_defaults\":648}],651:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../plots/plots\"),o\u003dt(\"../../lib\"),s\u003do.strTranslate,l\u003dt(\"../../plots/cartesian/axes\"),c\u003dt(\"../color\"),u\u003dt(\"../drawing\"),f\u003dt(\"../fx\"),h\u003dt(\"../../lib/svg_text_utils\"),p\u003dt(\"../../lib/setcursor\"),d\u003dt(\"../dragelement\"),m\u003dt(\"../../plot_api/plot_template\").arrayEditor,g\u003dt(\"./draw_arrow_head\");function v(t,e){var r\u003dt._fullLayout.annotations[e]||{},n\u003dl.getFromId(t,r.xref),i\u003dl.getFromId(t,r.yref);n\u0026\u0026n.setScale(),i\u0026\u0026i.setScale(),x(t,r,e,!1,n,i)}function y(t,e,r,n,i){var a\u003di[r],o\u003di[r+\"ref\"],s\u003d-1!\u003d\u003dr.indexOf(\"y\"),c\u003d\"domain\"\u003d\u003d\u003dl.getRefType(o),u\u003ds?n.h:n.w;return t?c?a+(s?-e:e)/t._length:t.p2r(t.r2p(a)+e):a+(s?-e:e)/u}function x(t,e,r,a,v,x){var b,_,w\u003dt._fullLayout,T\u003dt._fullLayout._size,k\u003dt._context.edits;a?(b\u003d\"annotation-\"+a,_\u003da+\".annotations\"):(b\u003d\"annotation\",_\u003d\"annotations\");var M\u003dm(t.layout,_,e),A\u003dM.modifyBase,S\u003dM.modifyItem,E\u003dM.getUpdateObj;w._infolayer.selectAll(\".\"+b+\u0027[data-index\u003d\"\u0027+r+\u0027\"]\u0027).remove();var L\u003d\"clip\"+w._uid+\"_ann\"+r;if(e._input\u0026\u0026!1!\u003d\u003de.visible){var C\u003d{x:{},y:{}},P\u003d+e.textangle||0,I\u003dw._infolayer.append(\"g\").classed(b,!0).attr(\"data-index\",String(r)).style(\"opacity\",e.opacity),O\u003dI.append(\"g\").classed(\"annotation-text-g\",!0),z\u003dk[e.showarrow?\"annotationTail\":\"annotationPosition\"],D\u003de.captureevents||k.annotationText||z,R\u003dO.append(\"g\").style(\"pointer-events\",D?\"all\":null).call(p,\"pointer\").on(\"click\",(function(){t._dragging\u003d!1,t.emit(\"plotly_clickannotation\",Y(n.event))}));e.hovertext\u0026\u0026R.on(\"mouseover\",(function(){var r\u003de.hoverlabel,n\u003dr.font,i\u003dthis.getBoundingClientRect(),a\u003dt.getBoundingClientRect();f.loneHover({x0:i.left-a.left,x1:i.right-a.left,y:(i.top+i.bottom)/2-a.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:w._hoverlayer.node(),outerContainer:w._paper.node(),gd:t})})).on(\"mouseout\",(function(){f.loneUnhover(w._hoverlayer.node())}));var F\u003de.borderwidth,B\u003de.borderpad,N\u003dF+B,j\u003dR.append(\"rect\").attr(\"class\",\"bg\").style(\"stroke-width\",F+\"px\").call(c.stroke,e.bordercolor).call(c.fill,e.bgcolor),U\u003de.width||e.height,V\u003dw._topclips.selectAll(\"#\"+L).data(U?[0]:[]);V.enter().append(\"clipPath\").classed(\"annclip\",!0).attr(\"id\",L).append(\"rect\"),V.exit().remove();var q\u003de.font,H\u003dw._meta?o.templateString(e.text,w._meta):e.text,G\u003dR.append(\"text\").classed(\"annotation-text\",!0).text(H);k.annotationText?G.call(h.makeEditable,{delegate:R,gd:t}).call(W).on(\"edit\",(function(r){e.text\u003dr,this.call(W),S(\"text\",r),v\u0026\u0026v.autorange\u0026\u0026A(v._name+\".autorange\",!0),x\u0026\u0026x.autorange\u0026\u0026A(x._name+\".autorange\",!0),i.call(\"_guiRelayout\",t,E())})):G.call(W)}else n.selectAll(\"#\"+L).remove();function Y(t){var n\u003d{index:r,annotation:e._input,fullAnnotation:e,event:t};return a\u0026\u0026(n.subplotId\u003da),n}function W(r){return r.call(u.font,q).attr({\"text-anchor\":{left:\"start\",right:\"end\"}[e.align]||\"middle\"}),h.convertToTspans(r,t,X),r}function X(){var r\u003dG.selectAll(\"a\");1\u003d\u003d\u003dr.size()\u0026\u0026r.text()\u003d\u003d\u003dG.text()\u0026\u0026R.insert(\"a\",\":first-child\").attr({\"xlink:xlink:href\":r.attr(\"xlink:href\"),\"xlink:xlink:show\":r.attr(\"xlink:show\")}).style({cursor:\"pointer\"}).node().appendChild(j.node());var n\u003dR.select(\".annotation-text-math-group\"),f\u003d!n.empty(),m\u003du.bBox((f?n:G).node()),b\u003dm.width,_\u003dm.height,M\u003de.width||b,D\u003de.height||_,B\u003dMath.round(M+2*N),q\u003dMath.round(D+2*N);function H(t,e){return\"auto\"\u003d\u003d\u003de\u0026\u0026(e\u003dt\u003c1/3?\"left\":t\u003e2/3?\"right\":\"center\"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}for(var W\u003d!1,X\u003d[\"x\",\"y\"],Z\u003d0;Z\u003cX.length;Z++){var J,K,Q,$,tt,et\u003dX[Z],rt\u003de[et+\"ref\"]||et,nt\u003de[\"a\"+et+\"ref\"],it\u003d{x:v,y:x}[et],at\u003d(P+(\"x\"\u003d\u003d\u003det?0:-90))*Math.PI/180,ot\u003dB*Math.cos(at),st\u003dq*Math.sin(at),lt\u003dMath.abs(ot)+Math.abs(st),ct\u003de[et+\"anchor\"],ut\u003de[et+\"shift\"]*(\"x\"\u003d\u003d\u003det?1:-1),ft\u003dC[et],ht\u003dl.getRefType(rt);if(it\u0026\u0026\"domain\"!\u003d\u003dht){var pt\u003dit.r2fraction(e[et]);(pt\u003c0||pt\u003e1)\u0026\u0026(nt\u003d\u003d\u003drt?((pt\u003dit.r2fraction(e[\"a\"+et]))\u003c0||pt\u003e1)\u0026\u0026(W\u003d!0):W\u003d!0),J\u003dit._offset+it.r2p(e[et]),$\u003d.5}else{var dt\u003d\"domain\"\u003d\u003d\u003dht;\"x\"\u003d\u003d\u003det?(Q\u003de[et],J\u003ddt?it._offset+it._length*Q:J\u003dT.l+T.w*Q):(Q\u003d1-e[et],J\u003ddt?it._offset+it._length*Q:J\u003dT.t+T.h*Q),$\u003de.showarrow?.5:Q}if(e.showarrow){ft.head\u003dJ;var mt\u003de[\"a\"+et];if(tt\u003dot*H(.5,e.xanchor)-st*H(.5,e.yanchor),nt\u003d\u003d\u003drt){var gt\u003dl.getRefType(nt);\"domain\"\u003d\u003d\u003dgt?(\"y\"\u003d\u003d\u003det\u0026\u0026(mt\u003d1-mt),ft.tail\u003dit._offset+it._length*mt):\"paper\"\u003d\u003d\u003dgt?\"y\"\u003d\u003d\u003det?(mt\u003d1-mt,ft.tail\u003dT.t+T.h*mt):ft.tail\u003dT.l+T.w*mt:ft.tail\u003dit._offset+it.r2p(mt),K\u003dtt}else ft.tail\u003dJ+mt,K\u003dtt+mt;ft.text\u003dft.tail+tt;var vt\u003dw[\"x\"\u003d\u003d\u003det?\"width\":\"height\"];if(\"paper\"\u003d\u003d\u003drt\u0026\u0026(ft.head\u003do.constrain(ft.head,1,vt-1)),\"pixel\"\u003d\u003d\u003dnt){var yt\u003d-Math.max(ft.tail-3,ft.text),xt\u003dMath.min(ft.tail+3,ft.text)-vt;yt\u003e0?(ft.tail+\u003dyt,ft.text+\u003dyt):xt\u003e0\u0026\u0026(ft.tail-\u003dxt,ft.text-\u003dxt)}ft.tail+\u003dut,ft.head+\u003dut}else K\u003dtt\u003dlt*H($,ct),ft.text\u003dJ+tt;ft.text+\u003dut,tt+\u003dut,K+\u003dut,e[\"_\"+et+\"padplus\"]\u003dlt/2+K,e[\"_\"+et+\"padminus\"]\u003dlt/2-K,e[\"_\"+et+\"size\"]\u003dlt,e[\"_\"+et+\"shift\"]\u003dtt}if(W)R.remove();else{var bt\u003d0,_t\u003d0;if(\"left\"!\u003d\u003de.align\u0026\u0026(bt\u003d(M-b)*(\"center\"\u003d\u003d\u003de.align?.5:1)),\"top\"!\u003d\u003de.valign\u0026\u0026(_t\u003d(D-_)*(\"middle\"\u003d\u003d\u003de.valign?.5:1)),f)n.select(\"svg\").attr({x:N+bt-1,y:N+_t}).call(u.setClipUrl,U?L:null,t);else{var wt\u003dN+_t-m.top,Tt\u003dN+bt-m.left;G.call(h.positionText,Tt,wt).call(u.setClipUrl,U?L:null,t)}V.select(\"rect\").call(u.setRect,N,N,M,D),j.call(u.setRect,F/2,F/2,B-F,q-F),R.call(u.setTranslate,Math.round(C.x.text-B/2),Math.round(C.y.text-q/2)),O.attr({transform:\"rotate(\"+P+\",\"+C.x.text+\",\"+C.y.text+\")\"});var kt,Mt\u003dfunction(r,n){I.selectAll(\".annotation-arrow-g\").remove();var l\u003dC.x.head,f\u003dC.y.head,h\u003dC.x.tail+r,p\u003dC.y.tail+n,m\u003dC.x.text+r,b\u003dC.y.text+n,_\u003do.rotationXYMatrix(P,m,b),w\u003do.apply2DTransform(_),M\u003do.apply2DTransform2(_),L\u003d+j.attr(\"width\"),z\u003d+j.attr(\"height\"),D\u003dm-.5*L,F\u003dD+L,B\u003db-.5*z,N\u003dB+z,U\u003d[[D,B,D,N],[D,N,F,N],[F,N,F,B],[F,B,D,B]].map(M);if(!U.reduce((function(t,e){return t^!!o.segmentsIntersect(l,f,l+1e6,f+1e6,e[0],e[1],e[2],e[3])}),!1)){U.forEach((function(t){var e\u003do.segmentsIntersect(h,p,l,f,t[0],t[1],t[2],t[3]);e\u0026\u0026(h\u003de.x,p\u003de.y)}));var V\u003de.arrowwidth,q\u003de.arrowcolor,H\u003de.arrowside,G\u003dI.append(\"g\").style({opacity:c.opacity(q)}).classed(\"annotation-arrow-g\",!0),Y\u003dG.append(\"path\").attr(\"d\",\"M\"+h+\",\"+p+\"L\"+l+\",\"+f).style(\"stroke-width\",V+\"px\").call(c.stroke,c.rgb(q));if(g(Y,H,e),k.annotationPosition\u0026\u0026Y.node().parentNode\u0026\u0026!a){var W\u003dl,X\u003df;if(e.standoff){var Z\u003dMath.sqrt(Math.pow(l-h,2)+Math.pow(f-p,2));W+\u003de.standoff*(h-l)/Z,X+\u003de.standoff*(p-f)/Z}var J,K,Q\u003dG.append(\"path\").classed(\"annotation-arrow\",!0).classed(\"anndrag\",!0).classed(\"cursor-move\",!0).attr({d:\"M3,3H-3V-3H3ZM0,0L\"+(h-W)+\",\"+(p-X),transform:s(W,X)}).style(\"stroke-width\",V+6+\"px\").call(c.stroke,\"rgba(0,0,0,0)\").call(c.fill,\"rgba(0,0,0,0)\");d.init({element:Q.node(),gd:t,prepFn:function(){var t\u003du.getTranslate(R);J\u003dt.x,K\u003dt.y,v\u0026\u0026v.autorange\u0026\u0026A(v._name+\".autorange\",!0),x\u0026\u0026x.autorange\u0026\u0026A(x._name+\".autorange\",!0)},moveFn:function(t,r){var n\u003dw(J,K),i\u003dn[0]+t,a\u003dn[1]+r;R.call(u.setTranslate,i,a),S(\"x\",y(v,t,\"x\",T,e)),S(\"y\",y(x,r,\"y\",T,e)),e.axref\u003d\u003d\u003de.xref\u0026\u0026S(\"ax\",y(v,t,\"ax\",T,e)),e.ayref\u003d\u003d\u003de.yref\u0026\u0026S(\"ay\",y(x,r,\"ay\",T,e)),G.attr(\"transform\",s(t,r)),O.attr({transform:\"rotate(\"+P+\",\"+i+\",\"+a+\")\"})},doneFn:function(){i.call(\"_guiRelayout\",t,E());var e\u003ddocument.querySelector(\".js-notes-box-panel\");e\u0026\u0026e.redraw(e.selectedObj)}})}}};if(e.showarrow\u0026\u0026Mt(0,0),z)d.init({element:R.node(),gd:t,prepFn:function(){kt\u003dO.attr(\"transform\")},moveFn:function(t,r){var n\u003d\"pointer\";if(e.showarrow)e.axref\u003d\u003d\u003de.xref?S(\"ax\",y(v,t,\"ax\",T,e)):S(\"ax\",e.ax+t),e.ayref\u003d\u003d\u003de.yref?S(\"ay\",y(x,r,\"ay\",T.w,e)):S(\"ay\",e.ay+r),Mt(t,r);else{if(a)return;var i,o;if(v)i\u003dy(v,t,\"x\",T,e);else{var l\u003de._xsize/T.w,c\u003de.x+(e._xshift-e.xshift)/T.w-l/2;i\u003dd.align(c+t/T.w,l,0,1,e.xanchor)}if(x)o\u003dy(x,r,\"y\",T,e);else{var u\u003de._ysize/T.h,f\u003de.y-(e._yshift+e.yshift)/T.h-u/2;o\u003dd.align(f-r/T.h,u,0,1,e.yanchor)}S(\"x\",i),S(\"y\",o),v\u0026\u0026x||(n\u003dd.getCursor(v?.5:i,x?.5:o,e.xanchor,e.yanchor))}O.attr({transform:s(t,r)+kt}),p(R,n)},clickFn:function(r,n){e.captureevents\u0026\u0026t.emit(\"plotly_clickannotation\",Y(n))},doneFn:function(){p(R),i.call(\"_guiRelayout\",t,E());var e\u003ddocument.querySelector(\".js-notes-box-panel\");e\u0026\u0026e.redraw(e.selectedObj)}})}}}e.exports\u003d{draw:function(t){var e\u003dt._fullLayout;e._infolayer.selectAll(\".annotation\").remove();for(var r\u003d0;r\u003ce.annotations.length;r++)e.annotations[r].visible\u0026\u0026v(t,r);return a.previousPromises(t)},drawOne:v,drawRaw:x}},{\"../../lib\":799,\"../../lib/setcursor\":820,\"../../lib/svg_text_utils\":824,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/axes\":849,\"../../plots/plots\":913,\"../../registry\":927,\"../color\":662,\"../dragelement\":681,\"../drawing\":684,\"../fx\":702,\"./draw_arrow_head\":652,\"@plotly/d3\":58}],652:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../color\"),a\u003dt(\"./arrow_paths\"),o\u003dt(\"../../lib\"),s\u003do.strScale,l\u003do.strRotate,c\u003do.strTranslate;e.exports\u003dfunction(t,e,r){var o,u,f,h,p\u003dt.node(),d\u003da[r.arrowhead||0],m\u003da[r.startarrowhead||0],g\u003d(r.arrowwidth||1)*(r.arrowsize||1),v\u003d(r.arrowwidth||1)*(r.startarrowsize||1),y\u003de.indexOf(\"start\")\u003e\u003d0,x\u003de.indexOf(\"end\")\u003e\u003d0,b\u003dd.backoff*g+r.standoff,_\u003dm.backoff*v+r.startstandoff;if(\"line\"\u003d\u003d\u003dp.nodeName){o\u003d{x:+t.attr(\"x1\"),y:+t.attr(\"y1\")},u\u003d{x:+t.attr(\"x2\"),y:+t.attr(\"y2\")};var w\u003do.x-u.x,T\u003do.y-u.y;if(h\u003d(f\u003dMath.atan2(T,w))+Math.PI,b\u0026\u0026_\u0026\u0026b+_\u003eMath.sqrt(w*w+T*T))return void z();if(b){if(b*b\u003ew*w+T*T)return void z();var k\u003db*Math.cos(f),M\u003db*Math.sin(f);u.x+\u003dk,u.y+\u003dM,t.attr({x2:u.x,y2:u.y})}if(_){if(_*_\u003ew*w+T*T)return void z();var A\u003d_*Math.cos(f),S\u003d_*Math.sin(f);o.x-\u003dA,o.y-\u003dS,t.attr({x1:o.x,y1:o.y})}}else if(\"path\"\u003d\u003d\u003dp.nodeName){var E\u003dp.getTotalLength(),L\u003d\"\";if(E\u003cb+_)return void z();var C\u003dp.getPointAtLength(0),P\u003dp.getPointAtLength(.1);f\u003dMath.atan2(C.y-P.y,C.x-P.x),o\u003dp.getPointAtLength(Math.min(_,E)),L\u003d\"0px,\"+_+\"px,\";var I\u003dp.getPointAtLength(E),O\u003dp.getPointAtLength(E-.1);h\u003dMath.atan2(I.y-O.y,I.x-O.x),u\u003dp.getPointAtLength(Math.max(0,E-b)),L+\u003dE-(L?_+b:b)+\"px,\"+E+\"px\",t.style(\"stroke-dasharray\",L)}function z(){t.style(\"stroke-dasharray\",\"0px,100px\")}function D(e,a,o,u){e.path\u0026\u0026(e.noRotate\u0026\u0026(o\u003d0),n.select(p.parentNode).append(\"path\").attr({class:t.attr(\"class\"),d:e.path,transform:c(a.x,a.y)+l(180*o/Math.PI)+s(u)}).style({fill:i.rgb(r.arrowcolor),\"stroke-width\":0}))}y\u0026\u0026D(m,o,f,v),x\u0026\u0026D(d,u,h,g)}},{\"../../lib\":799,\"../color\":662,\"./arrow_paths\":644,\"@plotly/d3\":58}],653:[function(t,e,r){\"use strict\";var n\u003dt(\"./draw\"),i\u003dt(\"./click\");e.exports\u003d{moduleType:\"component\",name:\"annotations\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),includeBasePlot:t(\"../../plots/cartesian/include_components\")(\"annotations\"),calcAutorange:t(\"./calc_autorange\"),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:t(\"./convert_coords\")}},{\"../../plots/cartesian/include_components\":862,\"./attributes\":645,\"./calc_autorange\":646,\"./click\":647,\"./convert_coords\":649,\"./defaults\":650,\"./draw\":651}],654:[function(t,e,r){\"use strict\";var n\u003dt(\"../annotations/attributes\"),i\u003dt(\"../../plot_api/edit_types\").overrideAll,a\u003dt(\"../../plot_api/plot_template\").templatedArray;e.exports\u003di(a(\"annotation\",{visible:n.visible,x:{valType:\"any\"},y:{valType:\"any\"},z:{valType:\"any\"},ax:{valType:\"number\"},ay:{valType:\"number\"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,startarrowhead:n.startarrowhead,arrowside:n.arrowside,arrowsize:n.arrowsize,startarrowsize:n.startarrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,startstandoff:n.startstandoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents}),\"calc\",\"from-root\")},{\"../../plot_api/edit_types\":831,\"../../plot_api/plot_template\":838,\"../annotations/attributes\":645}],655:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\");function a(t,e){var r\u003de.fullSceneLayout.domain,a\u003de.fullLayout._size,o\u003d{pdata:null,type:\"linear\",autorange:!1,range:[-1/0,1/0]};t._xa\u003d{},n.extendFlat(t._xa,o),i.setConvert(t._xa),t._xa._offset\u003da.l+r.x[0]*a.w,t._xa.l2p\u003dfunction(){return.5*(1+t._pdata[0]/t._pdata[3])*a.w*(r.x[1]-r.x[0])},t._ya\u003d{},n.extendFlat(t._ya,o),i.setConvert(t._ya),t._ya._offset\u003da.t+(1-r.y[1])*a.h,t._ya.l2p\u003dfunction(){return.5*(1-t._pdata[1]/t._pdata[3])*a.h*(r.y[1]-r.y[0])}}e.exports\u003dfunction(t){for(var e\u003dt.fullSceneLayout.annotations,r\u003d0;r\u003ce.length;r++)a(e[r],t);t.fullLayout._infolayer.selectAll(\".annotation-\"+t.id).remove()}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849}],656:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../plots/array_container_defaults\"),o\u003dt(\"../annotations/common_defaults\"),s\u003dt(\"./attributes\");function l(t,e,r,a){function l(r,i){return n.coerce(t,e,s,r,i)}function c(t){var n\u003dt+\"axis\",a\u003d{_fullLayout:{}};return a._fullLayout[n]\u003dr[n],i.coercePosition(e,a,l,t,t,.5)}l(\"visible\")\u0026\u0026(o(t,e,a.fullLayout,l),c(\"x\"),c(\"y\"),c(\"z\"),n.noneOrAll(t,e,[\"x\",\"y\",\"z\"]),e.xref\u003d\"x\",e.yref\u003d\"y\",e.zref\u003d\"z\",l(\"xanchor\"),l(\"yanchor\"),l(\"xshift\"),l(\"yshift\"),e.showarrow\u0026\u0026(e.axref\u003d\"pixel\",e.ayref\u003d\"pixel\",l(\"ax\",-10),l(\"ay\",-30),n.noneOrAll(t,e,[\"ax\",\"ay\"])))}e.exports\u003dfunction(t,e,r){a(t,e,{name:\"annotations\",handleItemDefaults:l,fullLayout:r.fullLayout})}},{\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"../../plots/cartesian/axes\":849,\"../annotations/common_defaults\":648,\"./attributes\":654}],657:[function(t,e,r){\"use strict\";var n\u003dt(\"../annotations/draw\").drawRaw,i\u003dt(\"../../plots/gl3d/project\"),a\u003d[\"x\",\"y\",\"z\"];e.exports\u003dfunction(t){for(var e\u003dt.fullSceneLayout,r\u003dt.dataScale,o\u003de.annotations,s\u003d0;s\u003co.length;s++){for(var l\u003do[s],c\u003d!1,u\u003d0;u\u003c3;u++){var f\u003da[u],h\u003dl[f],p\u003de[f+\"axis\"].r2fraction(h);if(p\u003c0||p\u003e1){c\u003d!0;break}}c?t.fullLayout._infolayer.select(\".annotation-\"+t.id+\u0027[data-index\u003d\"\u0027+s+\u0027\"]\u0027).remove():(l._pdata\u003di(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},{\"../../plots/gl3d/project\":901,\"../annotations/draw\":651}],658:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\");e.exports\u003d{moduleType:\"component\",name:\"annotations3d\",schema:{subplots:{scene:{annotations:t(\"./attributes\")}}},layoutAttributes:t(\"./attributes\"),handleDefaults:t(\"./defaults\"),includeBasePlot:function(t,e){var r\u003dn.subplotsRegistry.gl3d;if(!r)return;for(var a\u003dr.attrRegex,o\u003dObject.keys(t),s\u003d0;s\u003co.length;s++){var l\u003do[s];a.test(l)\u0026\u0026(t[l].annotations||[]).length\u0026\u0026(i.pushUnique(e._basePlotModules,r),i.pushUnique(e._subplots.gl3d,l))}},convert:t(\"./convert\"),draw:t(\"./draw\")}},{\"../../lib\":799,\"../../registry\":927,\"./attributes\":654,\"./convert\":655,\"./defaults\":656,\"./draw\":657}],659:[function(t,e,r){\"use strict\";e.exports\u003dt(\"world-calendars/dist/main\"),t(\"world-calendars/dist/plus\"),t(\"world-calendars/dist/calendars/chinese\"),t(\"world-calendars/dist/calendars/coptic\"),t(\"world-calendars/dist/calendars/discworld\"),t(\"world-calendars/dist/calendars/ethiopian\"),t(\"world-calendars/dist/calendars/hebrew\"),t(\"world-calendars/dist/calendars/islamic\"),t(\"world-calendars/dist/calendars/julian\"),t(\"world-calendars/dist/calendars/mayan\"),t(\"world-calendars/dist/calendars/nanakshahi\"),t(\"world-calendars/dist/calendars/nepali\"),t(\"world-calendars/dist/calendars/persian\"),t(\"world-calendars/dist/calendars/taiwan\"),t(\"world-calendars/dist/calendars/thai\"),t(\"world-calendars/dist/calendars/ummalqura\")},{\"world-calendars/dist/calendars/chinese\":626,\"world-calendars/dist/calendars/coptic\":627,\"world-calendars/dist/calendars/discworld\":628,\"world-calendars/dist/calendars/ethiopian\":629,\"world-calendars/dist/calendars/hebrew\":630,\"world-calendars/dist/calendars/islamic\":631,\"world-calendars/dist/calendars/julian\":632,\"world-calendars/dist/calendars/mayan\":633,\"world-calendars/dist/calendars/nanakshahi\":634,\"world-calendars/dist/calendars/nepali\":635,\"world-calendars/dist/calendars/persian\":636,\"world-calendars/dist/calendars/taiwan\":637,\"world-calendars/dist/calendars/thai\":638,\"world-calendars/dist/calendars/ummalqura\":639,\"world-calendars/dist/main\":640,\"world-calendars/dist/plus\":641}],660:[function(t,e,r){\"use strict\";var n\u003dt(\"./calendars\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../constants/numerical\"),o\u003da.EPOCHJD,s\u003da.ONEDAY,l\u003d{valType:\"enumerated\",values:Object.keys(n.calendars),editType:\"calc\",dflt:\"gregorian\"},c\u003dfunction(t,e,r,n){var a\u003d{};return a[r]\u003dl,i.coerce(t,e,a,r,n)},u\u003d{d:{0:\"dd\",\"-\":\"d\"},e:{0:\"d\",\"-\":\"d\"},a:{0:\"D\",\"-\":\"D\"},A:{0:\"DD\",\"-\":\"DD\"},j:{0:\"oo\",\"-\":\"o\"},W:{0:\"ww\",\"-\":\"w\"},m:{0:\"mm\",\"-\":\"m\"},b:{0:\"M\",\"-\":\"M\"},B:{0:\"MM\",\"-\":\"MM\"},y:{0:\"yy\",\"-\":\"yy\"},Y:{0:\"yyyy\",\"-\":\"yyyy\"},U:\"##\",w:\"##\",c:{0:\"D M d %X yyyy\",\"-\":\"D M d %X yyyy\"},x:{0:\"mm/dd/yyyy\",\"-\":\"mm/dd/yyyy\"}};var f\u003d{};function h(t){var e\u003df[t];return e||(e\u003df[t]\u003dn.instance(t))}function p(t){return i.extendFlat({},l,{description:t})}function d(t){return\"Sets the calendar system to use with `\"+t+\"` date data.\"}var m\u003d{xcalendar:p(d(\"x\"))},g\u003di.extendFlat({},m,{ycalendar:p(d(\"y\"))}),v\u003di.extendFlat({},g,{zcalendar:p(d(\"z\"))}),y\u003dp([\"Sets the calendar system to use for `range` and `tick0`\",\"if this is a date axis. This does not set the calendar for\",\"interpreting data on this axis, that\u0027s specified in the trace\",\"or via the global `layout.calendar`\"].join(\" \"));e.exports\u003d{moduleType:\"component\",name:\"calendars\",schema:{traces:{scatter:g,bar:g,box:g,heatmap:g,contour:g,histogram:g,histogram2d:g,histogram2dcontour:g,scatter3d:v,surface:v,mesh3d:v,scattergl:g,ohlc:m,candlestick:m},layout:{calendar:p([\"Sets the default calendar system to use for interpreting and\",\"displaying dates throughout the plot.\"].join(\" \"))},subplots:{xaxis:{calendar:y},yaxis:{calendar:y},scene:{xaxis:{calendar:y},yaxis:{calendar:y},zaxis:{calendar:y}},polar:{radialaxis:{calendar:y}}},transforms:{filter:{valuecalendar:p([\"WARNING: All transforms are deprecated and may be removed from the API in next major version.\",\"Sets the calendar system to use for `value`, if it is a date.\"].join(\" \")),targetcalendar:p([\"WARNING: All transforms are deprecated and may be removed from the API in next major version.\",\"Sets the calendar system to use for `target`, if it is an\",\"array of dates. If `target` is a string (eg *x*) we use the\",\"corresponding trace attribute (eg `xcalendar`) if it exists,\",\"even if `targetcalendar` is provided.\"].join(\" \"))}}},layoutAttributes:l,handleDefaults:c,handleTraceDefaults:function(t,e,r,n){for(var i\u003d0;i\u003cr.length;i++)c(t,e,r[i]+\"calendar\",n.calendar)},CANONICAL_SUNDAY:{chinese:\"2000-01-02\",coptic:\"2000-01-03\",discworld:\"2000-01-03\",ethiopian:\"2000-01-05\",hebrew:\"5000-01-01\",islamic:\"1000-01-02\",julian:\"2000-01-03\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-05\",nepali:\"2000-01-05\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-04\",thai:\"2000-01-04\",ummalqura:\"1400-01-06\"},CANONICAL_TICK:{chinese:\"2000-01-01\",coptic:\"2000-01-01\",discworld:\"2000-01-01\",ethiopian:\"2000-01-01\",hebrew:\"5000-01-01\",islamic:\"1000-01-01\",julian:\"2000-01-01\",mayan:\"5000-01-01\",nanakshahi:\"1000-01-01\",nepali:\"2000-01-01\",persian:\"1000-01-01\",jalali:\"1000-01-01\",taiwan:\"1000-01-01\",thai:\"2000-01-01\",ummalqura:\"1400-01-01\"},DFLTRANGE:{chinese:[\"2000-01-01\",\"2001-01-01\"],coptic:[\"1700-01-01\",\"1701-01-01\"],discworld:[\"1800-01-01\",\"1801-01-01\"],ethiopian:[\"2000-01-01\",\"2001-01-01\"],hebrew:[\"5700-01-01\",\"5701-01-01\"],islamic:[\"1400-01-01\",\"1401-01-01\"],julian:[\"2000-01-01\",\"2001-01-01\"],mayan:[\"5200-01-01\",\"5201-01-01\"],nanakshahi:[\"0500-01-01\",\"0501-01-01\"],nepali:[\"2000-01-01\",\"2001-01-01\"],persian:[\"1400-01-01\",\"1401-01-01\"],jalali:[\"1400-01-01\",\"1401-01-01\"],taiwan:[\"0100-01-01\",\"0101-01-01\"],thai:[\"2500-01-01\",\"2501-01-01\"],ummalqura:[\"1400-01-01\",\"1401-01-01\"]},getCal:h,worldCalFmt:function(t,e,r){for(var n,i,a,l,c,f\u003dMath.floor((e+.05)/s)+o,p\u003dh(r).fromJD(f),d\u003d0;-1!\u003d\u003d(d\u003dt.indexOf(\"%\",d));)\"0\"\u003d\u003d\u003d(n\u003dt.charAt(d+1))||\"-\"\u003d\u003d\u003dn||\"_\"\u003d\u003d\u003dn?(a\u003d3,i\u003dt.charAt(d+2),\"_\"\u003d\u003d\u003dn\u0026\u0026(n\u003d\"-\")):(i\u003dn,n\u003d\"0\",a\u003d2),(l\u003du[i])?(c\u003d\"##\"\u003d\u003d\u003dl?\"##\":p.formatDate(l[n]),t\u003dt.substr(0,d)+c+t.substr(d+a),d+\u003dc.length):d+\u003da;return t}}},{\"../../constants/numerical\":775,\"../../lib\":799,\"./calendars\":659}],661:[function(t,e,r){\"use strict\";r.defaults\u003d[\"#1f77b4\",\"#ff7f0e\",\"#2ca02c\",\"#d62728\",\"#9467bd\",\"#8c564b\",\"#e377c2\",\"#7f7f7f\",\"#bcbd22\",\"#17becf\"],r.defaultLine\u003d\"#444\",r.lightLine\u003d\"#eee\",r.background\u003d\"#fff\",r.borderLine\u003d\"#BEC8D9\",r.lightFraction\u003d1e3/11},{}],662:[function(t,e,r){\"use strict\";var n\u003dt(\"tinycolor2\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../lib/array\").isTypedArray,o\u003de.exports\u003d{},s\u003dt(\"./attributes\");o.defaults\u003ds.defaults;var l\u003do.defaultLine\u003ds.defaultLine;o.lightLine\u003ds.lightLine;var c\u003do.background\u003ds.background;function u(t){if(i(t)||\"string\"!\u003dtypeof t)return t;var e\u003dt.trim();if(\"rgb\"!\u003d\u003de.substr(0,3))return t;var r\u003de.match(/^rgba?\\s*\\(([^()]*)\\)$/);if(!r)return t;var n\u003dr[1].trim().split(/\\s*[\\s,]\\s*/),a\u003d\"a\"\u003d\u003d\u003de.charAt(3)\u0026\u00264\u003d\u003d\u003dn.length;if(!a\u0026\u00263!\u003d\u003dn.length)return t;for(var o\u003d0;o\u003cn.length;o++){if(!n[o].length)return t;if(n[o]\u003dNumber(n[o]),!(n[o]\u003e\u003d0))return t;if(3\u003d\u003d\u003do)n[o]\u003e1\u0026\u0026(n[o]\u003d1);else if(n[o]\u003e\u003d1)return t}var s\u003dMath.round(255*n[0])+\", \"+Math.round(255*n[1])+\", \"+Math.round(255*n[2]);return a?\"rgba(\"+s+\", \"+n[3]+\")\":\"rgb(\"+s+\")\"}o.tinyRGB\u003dfunction(t){var e\u003dt.toRgb();return\"rgb(\"+Math.round(e.r)+\", \"+Math.round(e.g)+\", \"+Math.round(e.b)+\")\"},o.rgb\u003dfunction(t){return o.tinyRGB(n(t))},o.opacity\u003dfunction(t){return t?n(t).getAlpha():0},o.addOpacity\u003dfunction(t,e){var r\u003dn(t).toRgb();return\"rgba(\"+Math.round(r.r)+\", \"+Math.round(r.g)+\", \"+Math.round(r.b)+\", \"+e+\")\"},o.combine\u003dfunction(t,e){var r\u003dn(t).toRgb();if(1\u003d\u003d\u003dr.a)return n(t).toRgbString();var i\u003dn(e||c).toRgb(),a\u003d1\u003d\u003d\u003di.a?i:{r:255*(1-i.a)+i.r*i.a,g:255*(1-i.a)+i.g*i.a,b:255*(1-i.a)+i.b*i.a},o\u003d{r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return n(o).toRgbString()},o.contrast\u003dfunction(t,e,r){var i\u003dn(t);return 1!\u003d\u003di.getAlpha()\u0026\u0026(i\u003dn(o.combine(t,c))),(i.isDark()?e?i.lighten(e):c:r?i.darken(r):l).toString()},o.stroke\u003dfunction(t,e){var r\u003dn(e);t.style({stroke:o.tinyRGB(r),\"stroke-opacity\":r.getAlpha()})},o.fill\u003dfunction(t,e){var r\u003dn(e);t.style({fill:o.tinyRGB(r),\"fill-opacity\":r.getAlpha()})},o.clean\u003dfunction(t){if(t\u0026\u0026\"object\"\u003d\u003dtypeof t){var e,r,n,i,s\u003dObject.keys(t);for(e\u003d0;e\u003cs.length;e++)if(i\u003dt[n\u003ds[e]],\"color\"\u003d\u003d\u003dn.substr(n.length-5))if(Array.isArray(i))for(r\u003d0;r\u003ci.length;r++)i[r]\u003du(i[r]);else t[n]\u003du(i);else if(\"colorscale\"\u003d\u003d\u003dn.substr(n.length-10)\u0026\u0026Array.isArray(i))for(r\u003d0;r\u003ci.length;r++)Array.isArray(i[r])\u0026\u0026(i[r][1]\u003du(i[r][1]));else if(Array.isArray(i)){var l\u003di[0];if(!Array.isArray(l)\u0026\u0026l\u0026\u0026\"object\"\u003d\u003dtypeof l)for(r\u003d0;r\u003ci.length;r++)o.clean(i[r])}else i\u0026\u0026\"object\"\u003d\u003dtypeof i\u0026\u0026!a(i)\u0026\u0026o.clean(i)}}},{\"../../lib/array\":781,\"./attributes\":661,\"fast-isnumeric\":245,tinycolor2:594}],663:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/layout_attributes\"),i\u003dt(\"../../plots/font_attributes\"),a\u003dt(\"../../lib/extend\").extendFlat,o\u003dt(\"../../plot_api/edit_types\").overrideAll;e.exports\u003do({thicknessmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"pixels\"},thickness:{valType:\"number\",min:0,dflt:30},lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\",dflt:1.02,min:-2,max:3},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\"},xpad:{valType:\"number\",min:0,dflt:10},y:{valType:\"number\",dflt:.5,min:-2,max:3},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\"},ypad:{valType:\"number\",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:\"number\",min:0,dflt:0},bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\"},tickmode:n.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:a({},n.ticks,{dflt:\"\"}),ticklabeloverflow:a({},n.ticklabeloverflow,{}),ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\"},ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,showticklabels:n.showticklabels,tickfont:i({}),tickangle:n.tickangle,tickformat:n.tickformat,tickformatstops:n.tickformatstops,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,minexponent:n.minexponent,showexponent:n.showexponent,title:{text:{valType:\"string\"},font:i({}),side:{valType:\"enumerated\",values:[\"right\",\"top\",\"bottom\"],dflt:\"top\"}},_deprecated:{title:{valType:\"string\"},titlefont:i({}),titleside:{valType:\"enumerated\",values:[\"right\",\"top\",\"bottom\"],dflt:\"top\"}}},\"colorbars\",\"from-root\")},{\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/cartesian/layout_attributes\":864,\"../../plots/font_attributes\":878}],664:[function(t,e,r){\"use strict\";e.exports\u003d{cn:{colorbar:\"colorbar\",cbbg:\"cbbg\",cbfill:\"cbfill\",cbfills:\"cbfills\",cbline:\"cbline\",cblines:\"cblines\",cbaxis:\"cbaxis\",cbtitleunshift:\"cbtitleunshift\",cbtitle:\"cbtitle\",cboutline:\"cboutline\",crisp:\"crisp\",jsPlaceholder:\"js-placeholder\"}}},{}],665:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plot_api/plot_template\"),a\u003dt(\"../../plots/cartesian/tick_value_defaults\"),o\u003dt(\"../../plots/cartesian/tick_mark_defaults\"),s\u003dt(\"../../plots/cartesian/tick_label_defaults\"),l\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r){var c\u003di.newContainer(e,\"colorbar\"),u\u003dt.colorbar||{};function f(t,e){return n.coerce(u,c,l,t,e)}var h\u003df(\"thicknessmode\");f(\"thickness\",\"fraction\"\u003d\u003d\u003dh?30/(r.width-r.margin.l-r.margin.r):30);var p\u003df(\"lenmode\");f(\"len\",\"fraction\"\u003d\u003d\u003dp?1:r.height-r.margin.t-r.margin.b),f(\"x\"),f(\"xanchor\"),f(\"xpad\"),f(\"y\"),f(\"yanchor\"),f(\"ypad\"),n.noneOrAll(u,c,[\"x\",\"y\"]),f(\"outlinecolor\"),f(\"outlinewidth\"),f(\"bordercolor\"),f(\"borderwidth\"),f(\"bgcolor\");var d\u003df(\"ticklabelposition\");f(\"ticklabeloverflow\",-1!\u003d\u003dd.indexOf(\"inside\")?\"hide past domain\":\"hide past div\"),a(u,c,f,\"linear\");var m\u003dr.font,g\u003d{outerTicks:!1,font:m};-1!\u003d\u003dd.indexOf(\"inside\")\u0026\u0026(g.bgColor\u003d\"black\"),s(u,c,f,\"linear\",g),o(u,c,f,\"linear\",g),f(\"title.text\",r._dfltTitle.colorbar);var v\u003dc.tickfont,y\u003dn.extendFlat({},v,{color:m.color,size:n.bigFont(v.size)});n.coerceFont(f,\"title.font\",y),f(\"title.side\")}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/tick_label_defaults\":871,\"../../plots/cartesian/tick_mark_defaults\":872,\"../../plots/cartesian/tick_value_defaults\":873,\"./attributes\":663}],666:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"../../plots/plots\"),o\u003dt(\"../../registry\"),s\u003dt(\"../../plots/cartesian/axes\"),l\u003dt(\"../dragelement\"),c\u003dt(\"../../lib\"),u\u003dc.strTranslate,f\u003dt(\"../../lib/extend\").extendFlat,h\u003dt(\"../../lib/setcursor\"),p\u003dt(\"../drawing\"),d\u003dt(\"../color\"),m\u003dt(\"../titles\"),g\u003dt(\"../../lib/svg_text_utils\"),v\u003dt(\"../colorscale/helpers\").flipScale,y\u003dt(\"../../plots/cartesian/axis_defaults\"),x\u003dt(\"../../plots/cartesian/position_defaults\"),b\u003dt(\"../../plots/cartesian/layout_attributes\"),_\u003dt(\"../../constants/alignment\"),w\u003d_.LINE_SPACING,T\u003d_.FROM_TL,k\u003d_.FROM_BR,M\u003dt(\"./constants\").cn;e.exports\u003d{draw:function(t){var e\u003dt._fullLayout._infolayer.selectAll(\"g.\"+M.colorbar).data(function(t){var e,r,n,i,a\u003dt._fullLayout,o\u003dt.calcdata,s\u003d[];function l(t){return f(t,{_fillcolor:null,_line:{color:null,width:null,dash:null},_levels:{start:null,end:null,size:null},_filllevels:null,_fillgradient:null,_zrange:null})}function c(){\"function\"\u003d\u003dtypeof i.calc?i.calc(t,n,e):(e._fillgradient\u003dr.reversescale?v(r.colorscale):r.colorscale,e._zrange\u003d[r[i.min],r[i.max]])}for(var u\u003d0;u\u003co.length;u++){var h\u003do[u],p\u003d(n\u003dh[0].trace)._module.colorbar;if(!0\u003d\u003d\u003dn.visible\u0026\u0026p)for(var d\u003dArray.isArray(p),m\u003dd?p:[p],g\u003d0;g\u003cm.length;g++){var y\u003d(i\u003dm[g]).container;(r\u003dy?n[y]:n)\u0026\u0026r.showscale\u0026\u0026((e\u003dl(r.colorbar))._id\u003d\"cb\"+n.uid+(d\u0026\u0026y?\"-\"+y:\"\"),e._traceIndex\u003dn.index,e._propPrefix\u003d(y?y+\".\":\"\")+\"colorbar.\",e._meta\u003dn._meta,c(),s.push(e))}}for(var x in a._colorAxes)if((r\u003da[x]).showscale){var b\u003da._colorAxes[x];(e\u003dl(r.colorbar))._id\u003d\"cb\"+x,e._propPrefix\u003dx+\".colorbar.\",e._meta\u003da._meta,i\u003d{min:\"cmin\",max:\"cmax\"},\"heatmap\"!\u003d\u003db[0]\u0026\u0026(n\u003db[1],i.calc\u003dn._module.colorbar.calc),c(),s.push(e)}return s}(t),(function(t){return t._id}));e.enter().append(\"g\").attr(\"class\",(function(t){return t._id})).classed(M.colorbar,!0),e.each((function(e){var r\u003dn.select(this);c.ensureSingle(r,\"rect\",M.cbbg),c.ensureSingle(r,\"g\",M.cbfills),c.ensureSingle(r,\"g\",M.cblines),c.ensureSingle(r,\"g\",M.cbaxis,(function(t){t.classed(M.crisp,!0)})),c.ensureSingle(r,\"g\",M.cbtitleunshift,(function(t){t.append(\"g\").classed(M.cbtitle,!0)})),c.ensureSingle(r,\"rect\",M.cboutline);var v\u003dfunction(t,e,r){var o\u003dr._fullLayout,l\u003do._size,h\u003de._fillcolor,v\u003de._line,_\u003de.title,A\u003d_.side,S\u003de._zrange||n.extent((\"function\"\u003d\u003dtypeof h?h:v.color).domain()),E\u003d\"function\"\u003d\u003dtypeof v.color?v.color:function(){return v.color},L\u003d\"function\"\u003d\u003dtypeof h?h:function(){return h},C\u003de._levels,P\u003dfunction(t,e,r){var n,i,a\u003de._levels,o\u003d[],s\u003d[],l\u003da.end+a.size/100,c\u003da.size,u\u003d1.001*r[0]-.001*r[1],f\u003d1.001*r[1]-.001*r[0];for(i\u003d0;i\u003c1e5\u0026\u0026(n\u003da.start+i*c,!(c\u003e0?n\u003e\u003dl:n\u003c\u003dl));i++)n\u003eu\u0026\u0026n\u003cf\u0026\u0026o.push(n);if(e._fillgradient)s\u003d[0];else if(\"function\"\u003d\u003dtypeof e._fillcolor){var h\u003de._filllevels;if(h)for(l\u003dh.end+h.size/100,c\u003dh.size,i\u003d0;i\u003c1e5\u0026\u0026(n\u003dh.start+i*c,!(c\u003e0?n\u003e\u003dl:n\u003c\u003dl));i++)n\u003er[0]\u0026\u0026n\u003cr[1]\u0026\u0026s.push(n);else(s\u003do.map((function(t){return t-a.size/2}))).push(s[s.length-1]+a.size)}else e._fillcolor\u0026\u0026\"string\"\u003d\u003dtypeof e._fillcolor\u0026\u0026(s\u003d[0]);a.size\u003c0\u0026\u0026(o.reverse(),s.reverse());return{line:o,fill:s}}(0,e,S),I\u003dP.fill,O\u003dP.line,z\u003dMath.round(e.thickness*(\"fraction\"\u003d\u003d\u003de.thicknessmode?l.w:1)),D\u003dz/l.w,R\u003dMath.round(e.len*(\"fraction\"\u003d\u003d\u003de.lenmode?l.h:1)),F\u003dR/l.h,B\u003de.xpad/l.w,N\u003d(e.borderwidth+e.outlinewidth)/2,j\u003de.ypad/l.h,U\u003dMath.round(e.x*l.w+e.xpad),V\u003de.x-D*({middle:.5,right:1}[e.xanchor]||0),q\u003de.y+F*(({top:-.5,bottom:.5}[e.yanchor]||0)-.5),H\u003dMath.round(l.h*(1-q)),G\u003dH-R;e._lenFrac\u003dF,e._thickFrac\u003dD,e._xLeftFrac\u003dV,e._yBottomFrac\u003dq;var Y\u003de._axis\u003dfunction(t,e,r){var n\u003dt._fullLayout,i\u003d{type:\"linear\",range:r,tickmode:e.tickmode,nticks:e.nticks,tick0:e.tick0,dtick:e.dtick,tickvals:e.tickvals,ticktext:e.ticktext,ticks:e.ticks,ticklen:e.ticklen,tickwidth:e.tickwidth,tickcolor:e.tickcolor,showticklabels:e.showticklabels,ticklabelposition:e.ticklabelposition,ticklabeloverflow:e.ticklabeloverflow,tickfont:e.tickfont,tickangle:e.tickangle,tickformat:e.tickformat,exponentformat:e.exponentformat,minexponent:e.minexponent,separatethousands:e.separatethousands,showexponent:e.showexponent,showtickprefix:e.showtickprefix,tickprefix:e.tickprefix,showticksuffix:e.showticksuffix,ticksuffix:e.ticksuffix,title:e.title,showline:!0,anchor:\"free\",side:\"right\",position:1},a\u003d{type:\"linear\",_id:\"y\"+e._id},o\u003d{letter:\"y\",font:n.font,noHover:!0,noTickson:!0,noTicklabelmode:!0,calendar:n.calendar};function s(t,e){return c.coerce(i,a,b,t,e)}return y(i,a,s,o,n),x(i,a,s,o),a}(r,e,S);Y.position\u003de.x+B+D,-1!\u003d\u003d[\"top\",\"bottom\"].indexOf(A)\u0026\u0026(Y.title.side\u003dA,Y.titlex\u003de.x+B,Y.titley\u003dq+(\"top\"\u003d\u003d\u003d_.side?F-j:j));if(v.color\u0026\u0026\"auto\"\u003d\u003d\u003de.tickmode){Y.tickmode\u003d\"linear\",Y.tick0\u003dC.start;var W\u003dC.size,X\u003dc.constrain((H-G)/50,4,15)+1,Z\u003d(S[1]-S[0])/((e.nticks||X)*W);if(Z\u003e1){var J\u003dMath.pow(10,Math.floor(Math.log(Z)/Math.LN10));W*\u003dJ*c.roundUp(Z/J,[2,5,10]),(Math.abs(C.start)/C.size+1e-6)%1\u003c2e-6\u0026\u0026(Y.tick0\u003d0)}Y.dtick\u003dW}Y.domain\u003d[q+j,q+F-j],Y.setScale(),t.attr(\"transform\",u(Math.round(l.l),Math.round(l.t)));var K,Q\u003dt.select(\".\"+M.cbtitleunshift).attr(\"transform\",u(-Math.round(l.l),-Math.round(l.t))),$\u003dt.select(\".\"+M.cbaxis),tt\u003d0;function et(n,i){var a\u003d{propContainer:Y,propName:e._propPrefix+\"title\",traceIndex:e._traceIndex,_meta:e._meta,placeholder:o._dfltTitle.colorbar,containerGroup:t.select(\".\"+M.cbtitle)},s\u003d\"h\"\u003d\u003d\u003dn.charAt(0)?n.substr(1):\"h\"+n;t.selectAll(\".\"+s+\",.\"+s+\"-math-group\").remove(),m.draw(r,n,f(a,i||{}))}return c.syncOrAsync([a.previousPromises,function(){if(-1!\u003d\u003d[\"top\",\"bottom\"].indexOf(A)){var t,r\u003dl.l+(e.x+B)*l.w,n\u003dY.title.font.size;t\u003d\"top\"\u003d\u003d\u003dA?(1-(q+F-j))*l.h+l.t+3+.75*n:(1-(q+j))*l.h+l.t-3-.25*n,et(Y._id+\"title\",{attributes:{x:r,y:t,\"text-anchor\":\"start\"}})}},function(){if(-1!\u003d\u003d[\"top\",\"bottom\"].indexOf(A)){var a\u003dt.select(\".\"+M.cbtitle),o\u003da.select(\"text\"),f\u003d[-e.outlinewidth/2,e.outlinewidth/2],h\u003da.select(\".h\"+Y._id+\"title-math-group\").node(),d\u003d15.6;if(o.node()\u0026\u0026(d\u003dparseInt(o.node().style.fontSize,10)*w),h?(tt\u003dp.bBox(h).height)\u003ed\u0026\u0026(f[1]-\u003d(tt-d)/2):o.node()\u0026\u0026!o.classed(M.jsPlaceholder)\u0026\u0026(tt\u003dp.bBox(o.node()).height),tt){if(tt+\u003d5,\"top\"\u003d\u003d\u003dA)Y.domain[1]-\u003dtt/l.h,f[1]*\u003d-1;else{Y.domain[0]+\u003dtt/l.h;var m\u003dg.lineCount(o);f[1]+\u003d(1-m)*d}a.attr(\"transform\",u(f[0],f[1])),Y.setScale()}}t.selectAll(\".\"+M.cbfills+\",.\"+M.cblines).attr(\"transform\",u(0,Math.round(l.h*(1-Y.domain[1])))),$.attr(\"transform\",u(0,Math.round(-l.t)));var y\u003dt.select(\".\"+M.cbfills).selectAll(\"rect.\"+M.cbfill).attr(\"style\",\"\").data(I);y.enter().append(\"rect\").classed(M.cbfill,!0).style(\"stroke\",\"none\"),y.exit().remove();var x\u003dS.map(Y.c2p).map(Math.round).sort((function(t,e){return t-e}));y.each((function(t,a){var o\u003d[0\u003d\u003d\u003da?S[0]:(I[a]+I[a-1])/2,a\u003d\u003d\u003dI.length-1?S[1]:(I[a]+I[a+1])/2].map(Y.c2p).map(Math.round);o[1]\u003dc.constrain(o[1]+(o[1]\u003eo[0])?1:-1,x[0],x[1]);var s\u003dn.select(this).attr({x:U,width:Math.max(z,2),y:n.min(o),height:Math.max(n.max(o)-n.min(o),2)});if(e._fillgradient)p.gradient(s,r,e._id,\"vertical\",e._fillgradient,\"fill\");else{var l\u003dL(t).replace(\"e-\",\"\");s.attr(\"fill\",i(l).toHexString())}}));var b\u003dt.select(\".\"+M.cblines).selectAll(\"path.\"+M.cbline).data(v.color\u0026\u0026v.width?O:[]);b.enter().append(\"path\").classed(M.cbline,!0),b.exit().remove(),b.each((function(t){n.select(this).attr(\"d\",\"M\"+U+\",\"+(Math.round(Y.c2p(t))+v.width/2%1)+\"h\"+z).call(p.lineGroupStyle,v.width,E(t),v.dash)})),$.selectAll(\"g.\"+Y._id+\"tick,path\").remove();var _\u003dU+z+(e.outlinewidth||0)/2-(\"outside\"\u003d\u003d\u003de.ticks?1:0),T\u003ds.calcTicks(Y),k\u003ds.getTickSigns(Y)[2];return s.drawTicks(r,Y,{vals:\"inside\"\u003d\u003d\u003dY.ticks?s.clipEnds(Y,T):T,layer:$,path:s.makeTickPath(Y,_,k),transFn:s.makeTransTickFn(Y)}),s.drawLabels(r,Y,{vals:T,layer:$,transFn:s.makeTransTickLabelFn(Y),labelFns:s.makeLabelFns(Y,_)})},function(){if(-1\u003d\u003d\u003d[\"top\",\"bottom\"].indexOf(A)){var t\u003dY.title.font.size,e\u003dY._offset+Y._length/2,i\u003dl.l+(Y.position||0)*l.w+(\"right\"\u003d\u003d\u003dY.side?10+t*(Y.showticklabels?1:.5):-10-t*(Y.showticklabels?.5:0));et(\"h\"+Y._id+\"title\",{avoid:{selection:n.select(r).selectAll(\"g.\"+Y._id+\"tick\"),side:A,offsetLeft:l.l,offsetTop:0,maxShift:o.width},attributes:{x:i,y:e,\"text-anchor\":\"middle\"},transform:{rotate:\"-90\",offset:0}})}},a.previousPromises,function(){var n\u003dz+e.outlinewidth/2;if(-1\u003d\u003d\u003dY.ticklabelposition.indexOf(\"inside\")\u0026\u0026(n+\u003dp.bBox($.node()).width),(K\u003dQ.select(\"text\")).node()\u0026\u0026!K.classed(M.jsPlaceholder)){var i,o\u003dQ.select(\".h\"+Y._id+\"title-math-group\").node();i\u003do\u0026\u0026-1!\u003d\u003d[\"top\",\"bottom\"].indexOf(A)?p.bBox(o).width:p.bBox(Q.node()).right-U-l.l,n\u003dMath.max(n,i)}var s\u003d2*e.xpad+n+e.borderwidth+e.outlinewidth/2,c\u003dH-G;t.select(\".\"+M.cbbg).attr({x:U-e.xpad-(e.borderwidth+e.outlinewidth)/2,y:G-N,width:Math.max(s,2),height:Math.max(c+2*N,2)}).call(d.fill,e.bgcolor).call(d.stroke,e.bordercolor).style(\"stroke-width\",e.borderwidth),t.selectAll(\".\"+M.cboutline).attr({x:U,y:G+e.ypad+(\"top\"\u003d\u003d\u003dA?tt:0),width:Math.max(z,2),height:Math.max(c-2*e.ypad-tt,2)}).call(d.stroke,e.outlinecolor).style({fill:\"none\",\"stroke-width\":e.outlinewidth});var f\u003d({center:.5,right:1}[e.xanchor]||0)*s;t.attr(\"transform\",u(l.l-f,l.t));var h\u003d{},m\u003dT[e.yanchor],g\u003dk[e.yanchor];\"pixels\"\u003d\u003d\u003de.lenmode?(h.y\u003de.y,h.t\u003dc*m,h.b\u003dc*g):(h.t\u003dh.b\u003d0,h.yt\u003de.y+e.len*m,h.yb\u003de.y-e.len*g);var v\u003dT[e.xanchor],y\u003dk[e.xanchor];if(\"pixels\"\u003d\u003d\u003de.thicknessmode)h.x\u003de.x,h.l\u003ds*v,h.r\u003ds*y;else{var x\u003ds-z;h.l\u003dx*v,h.r\u003dx*y,h.xl\u003de.x-e.thickness*v,h.xr\u003de.x+e.thickness*y}a.autoMargin(r,e._id,h)}],r)}(r,e,t);v\u0026\u0026v.then\u0026\u0026(t._promises||[]).push(v),t._context.edits.colorbarPosition\u0026\u0026function(t,e,r){var n,i,a,s\u003dr._fullLayout._size;l.init({element:t.node(),gd:r,prepFn:function(){n\u003dt.attr(\"transform\"),h(t)},moveFn:function(r,o){t.attr(\"transform\",n+u(r,o)),i\u003dl.align(e._xLeftFrac+r/s.w,e._thickFrac,0,1,e.xanchor),a\u003dl.align(e._yBottomFrac-o/s.h,e._lenFrac,0,1,e.yanchor);var c\u003dl.getCursor(i,a,e.xanchor,e.yanchor);h(t,c)},doneFn:function(){if(h(t),void 0!\u003d\u003di\u0026\u0026void 0!\u003d\u003da){var n\u003d{};n[e._propPrefix+\"x\"]\u003di,n[e._propPrefix+\"y\"]\u003da,void 0!\u003d\u003de._traceIndex?o.call(\"_guiRestyle\",r,n,e._traceIndex):o.call(\"_guiRelayout\",r,n)}}})}(r,e,t)})),e.exit().each((function(e){a.autoMargin(t,e._id)})).remove(),e.order()}}},{\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/extend\":789,\"../../lib/setcursor\":820,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/axis_defaults\":851,\"../../plots/cartesian/layout_attributes\":864,\"../../plots/cartesian/position_defaults\":867,\"../../plots/plots\":913,\"../../registry\":927,\"../color\":662,\"../colorscale/helpers\":673,\"../dragelement\":681,\"../drawing\":684,\"../titles\":760,\"./constants\":664,\"@plotly/d3\":58,tinycolor2:594}],667:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t){return n.isPlainObject(t.colorbar)}},{\"../../lib\":799}],668:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"component\",name:\"colorbar\",attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),draw:t(\"./draw\").draw,hasColorbar:t(\"./has_colorbar\")}},{\"./attributes\":663,\"./defaults\":665,\"./draw\":666,\"./has_colorbar\":667}],669:[function(t,e,r){\"use strict\";var n\u003dt(\"../colorbar/attributes\"),i\u003dt(\"../../lib/regex\").counter,a\u003dt(\"./scales.js\").scales;Object.keys(a);function o(t){return\"`\"+t+\"`\"}e.exports\u003dfunction(t,e){t\u003dt||\"\";var r,s\u003d(e\u003de||{}).cLetter||\"c\",l\u003d(\"onlyIfNumerical\"in e?e.onlyIfNumerical:Boolean(t),\"noScale\"in e?e.noScale:\"marker.line\"\u003d\u003d\u003dt),c\u003d\"showScaleDflt\"in e?e.showScaleDflt:\"z\"\u003d\u003d\u003ds,u\u003d\"string\"\u003d\u003dtypeof e.colorscaleDflt?a[e.colorscaleDflt]:null,f\u003de.editTypeOverride||\"\",h\u003dt?t+\".\":\"\";\"colorAttr\"in e?(r\u003de.colorAttr,e.colorAttr):o(h+(r\u003d{z:\"z\",c:\"color\"}[s]));var p\u003ds+\"auto\",d\u003ds+\"min\",m\u003ds+\"max\",g\u003ds+\"mid\",v\u003d(o(h+p),o(h+d),o(h+m),{});v[d]\u003dv[m]\u003dvoid 0;var y\u003d{};y[p]\u003d!1;var x\u003d{};return\"color\"\u003d\u003d\u003dr\u0026\u0026(x.color\u003d{valType:\"color\",arrayOk:!0,editType:f||\"style\"},e.anim\u0026\u0026(x.color.anim\u003d!0)),x[p]\u003d{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:v},x[d]\u003d{valType:\"number\",dflt:null,editType:f||\"plot\",impliedEdits:y},x[m]\u003d{valType:\"number\",dflt:null,editType:f||\"plot\",impliedEdits:y},x[g]\u003d{valType:\"number\",dflt:null,editType:\"calc\",impliedEdits:v},x.colorscale\u003d{valType:\"colorscale\",editType:\"calc\",dflt:u,impliedEdits:{autocolorscale:!1}},x.autocolorscale\u003d{valType:\"boolean\",dflt:!1!\u003d\u003de.autoColorDflt,editType:\"calc\",impliedEdits:{colorscale:void 0}},x.reversescale\u003d{valType:\"boolean\",dflt:!1,editType:\"plot\"},l||(x.showscale\u003d{valType:\"boolean\",dflt:c,editType:\"calc\"},x.colorbar\u003dn),e.noColorAxis||(x.coloraxis\u003d{valType:\"subplotid\",regex:i(\"coloraxis\"),dflt:null,editType:\"calc\"}),x}},{\"../../lib/regex\":816,\"../colorbar/attributes\":663,\"./scales.js\":677}],670:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"./helpers\").extractOpts;e.exports\u003dfunction(t,e,r){var o,s\u003dt._fullLayout,l\u003dr.vals,c\u003dr.containerStr,u\u003dc?i.nestedProperty(e,c).get():e,f\u003da(u),h\u003d!1!\u003d\u003df.auto,p\u003df.min,d\u003df.max,m\u003df.mid,g\u003dfunction(){return i.aggNums(Math.min,null,l)},v\u003dfunction(){return i.aggNums(Math.max,null,l)};(void 0\u003d\u003d\u003dp?p\u003dg():h\u0026\u0026(p\u003du._colorAx\u0026\u0026n(p)?Math.min(p,g()):g()),void 0\u003d\u003d\u003dd?d\u003dv():h\u0026\u0026(d\u003du._colorAx\u0026\u0026n(d)?Math.max(d,v()):v()),h\u0026\u0026void 0!\u003d\u003dm\u0026\u0026(d-m\u003em-p?p\u003dm-(d-m):d-m\u003cm-p\u0026\u0026(d\u003dm+(m-p))),p\u003d\u003d\u003dd\u0026\u0026(p-\u003d.5,d+\u003d.5),f._sync(\"min\",p),f._sync(\"max\",d),f.autocolorscale)\u0026\u0026(o\u003dp*d\u003c0?s.colorscale.diverging:p\u003e\u003d0?s.colorscale.sequential:s.colorscale.sequentialminus,f._sync(\"colorscale\",o))}},{\"../../lib\":799,\"./helpers\":673,\"fast-isnumeric\":245}],671:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./helpers\").hasColorscale,a\u003dt(\"./helpers\").extractOpts;e.exports\u003dfunction(t,e){function r(t,e){var r\u003dt[\"_\"+e];void 0!\u003d\u003dr\u0026\u0026(t[e]\u003dr)}function o(t,i){var o\u003di.container?n.nestedProperty(t,i.container).get():t;if(o)if(o.coloraxis)o._colorAx\u003de[o.coloraxis];else{var s\u003da(o),l\u003ds.auto;(l||void 0\u003d\u003d\u003ds.min)\u0026\u0026r(o,i.min),(l||void 0\u003d\u003d\u003ds.max)\u0026\u0026r(o,i.max),s.autocolorscale\u0026\u0026r(o,\"colorscale\")}}for(var s\u003d0;s\u003ct.length;s++){var l\u003dt[s],c\u003dl._module.colorbar;if(c)if(Array.isArray(c))for(var u\u003d0;u\u003cc.length;u++)o(l,c[u]);else o(l,c);i(l,\"marker.line\")\u0026\u0026o(l,{container:\"marker.line\",min:\"cmin\",max:\"cmax\"})}for(var f in e._colorAxes)o(e[f],{min:\"cmin\",max:\"cmax\"})}},{\"../../lib\":799,\"./helpers\":673}],672:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../colorbar/has_colorbar\"),o\u003dt(\"../colorbar/defaults\"),s\u003dt(\"./scales\").isValid,l\u003dt(\"../../registry\").traceIs;function c(t,e){var r\u003de.slice(0,e.length-1);return e?i.nestedProperty(t,r).get()||{}:t}e.exports\u003dfunction t(e,r,u,f,h){var p\u003dh.prefix,d\u003dh.cLetter,m\u003d\"_module\"in r,g\u003dc(e,p),v\u003dc(r,p),y\u003dc(r._template||{},p)||{},x\u003dfunction(){return delete e.coloraxis,delete r.coloraxis,t(e,r,u,f,h)};if(m){var b\u003du._colorAxes||{},_\u003df(p+\"coloraxis\");if(_){var w\u003dl(r,\"contour\")\u0026\u0026i.nestedProperty(r,\"contours.coloring\").get()||\"heatmap\",T\u003db[_];return void(T?(T[2].push(x),T[0]!\u003d\u003dw\u0026\u0026(T[0]\u003d!1,i.warn([\"Ignoring coloraxis:\",_,\"setting\",\"as it is linked to incompatible colorscales.\"].join(\" \")))):b[_]\u003d[w,r,[x]])}}var k\u003dg[d+\"min\"],M\u003dg[d+\"max\"],A\u003dn(k)\u0026\u0026n(M)\u0026\u0026k\u003cM;f(p+d+\"auto\",!A)?f(p+d+\"mid\"):(f(p+d+\"min\"),f(p+d+\"max\"));var S,E,L\u003dg.colorscale,C\u003dy.colorscale;(void 0!\u003d\u003dL\u0026\u0026(S\u003d!s(L)),void 0!\u003d\u003dC\u0026\u0026(S\u003d!s(C)),f(p+\"autocolorscale\",S),f(p+\"colorscale\"),f(p+\"reversescale\"),\"marker.line.\"!\u003d\u003dp)\u0026\u0026(p\u0026\u0026m\u0026\u0026(E\u003da(g)),f(p+\"showscale\",E)\u0026\u0026(p\u0026\u0026y\u0026\u0026(v._template\u003dy),o(g,v,u)))}},{\"../../lib\":799,\"../../registry\":927,\"../colorbar/defaults\":665,\"../colorbar/has_colorbar\":667,\"./scales\":677,\"fast-isnumeric\":245}],673:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"fast-isnumeric\"),o\u003dt(\"../../lib\"),s\u003dt(\"../color\"),l\u003dt(\"./scales\").isValid;var c\u003d[\"showscale\",\"autocolorscale\",\"colorscale\",\"reversescale\",\"colorbar\"],u\u003d[\"min\",\"max\",\"mid\",\"auto\"];function f(t){var e,r,n,i\u003dt._colorAx,a\u003di||t,o\u003d{};for(r\u003d0;r\u003cc.length;r++)o[n\u003dc[r]]\u003da[n];if(i)for(e\u003d\"c\",r\u003d0;r\u003cu.length;r++)o[n\u003du[r]]\u003da[\"c\"+n];else{var s;for(r\u003d0;r\u003cu.length;r++)((s\u003d\"c\"+(n\u003du[r]))in a||(s\u003d\"z\"+n)in a)\u0026\u0026(o[n]\u003da[s]);e\u003ds.charAt(0)}return o._sync\u003dfunction(t,r){var n\u003d-1!\u003d\u003du.indexOf(t)?e+t:t;a[n]\u003da[\"_\"+n]\u003dr},o}function h(t){for(var e\u003df(t),r\u003de.min,n\u003de.max,i\u003de.reversescale?p(e.colorscale):e.colorscale,a\u003di.length,o\u003dnew Array(a),s\u003dnew Array(a),l\u003d0;l\u003ca;l++){var c\u003di[l];o[l]\u003dr+c[0]*(n-r),s[l]\u003dc[1]}return{domain:o,range:s}}function p(t){for(var e\u003dt.length,r\u003dnew Array(e),n\u003de-1,i\u003d0;n\u003e\u003d0;n--,i++){var a\u003dt[n];r[i]\u003d[1-a[0],a[1]]}return r}function d(t,e){e\u003de||{};for(var r\u003dt.domain,o\u003dt.range,l\u003do.length,c\u003dnew Array(l),u\u003d0;u\u003cl;u++){var f\u003di(o[u]).toRgb();c[u]\u003d[f.r,f.g,f.b,f.a]}var h,p\u003dn.scale.linear().domain(r).range(c).clamp(!0),d\u003de.noNumericCheck,g\u003de.returnArray;return(h\u003dd\u0026\u0026g?p:d?function(t){return m(p(t))}:g?function(t){return a(t)?p(t):i(t).isValid()?t:s.defaultLine}:function(t){return a(t)?m(p(t)):i(t).isValid()?t:s.defaultLine}).domain\u003dp.domain,h.range\u003dfunction(){return o},h}function m(t){var e\u003d{r:t[0],g:t[1],b:t[2],a:t[3]};return i(e).toRgbString()}e.exports\u003d{hasColorscale:function(t,e,r){var n\u003de?o.nestedProperty(t,e).get()||{}:t,i\u003dn[r||\"color\"],s\u003d!1;if(o.isArrayOrTypedArray(i))for(var c\u003d0;c\u003ci.length;c++)if(a(i[c])){s\u003d!0;break}return o.isPlainObject(n)\u0026\u0026(s||!0\u003d\u003d\u003dn.showscale||a(n.cmin)\u0026\u0026a(n.cmax)||l(n.colorscale)||o.isPlainObject(n.colorbar))},extractOpts:f,extractScale:h,flipScale:p,makeColorScaleFunc:d,makeColorScaleFuncFromTrace:function(t,e){return d(h(t),e)}}},{\"../../lib\":799,\"../color\":662,\"./scales\":677,\"@plotly/d3\":58,\"fast-isnumeric\":245,tinycolor2:594}],674:[function(t,e,r){\"use strict\";var n\u003dt(\"./scales\"),i\u003dt(\"./helpers\");e.exports\u003d{moduleType:\"component\",name:\"colorscale\",attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyLayoutDefaults:t(\"./layout_defaults\"),handleDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"./cross_trace_defaults\"),calc:t(\"./calc\"),scales:n.scales,defaultScale:n.defaultScale,getScale:n.get,isValidScale:n.isValid,hasColorscale:i.hasColorscale,extractOpts:i.extractOpts,extractScale:i.extractScale,flipScale:i.flipScale,makeColorScaleFunc:i.makeColorScaleFunc,makeColorScaleFuncFromTrace:i.makeColorScaleFuncFromTrace}},{\"./attributes\":669,\"./calc\":670,\"./cross_trace_defaults\":671,\"./defaults\":672,\"./helpers\":673,\"./layout_attributes\":675,\"./layout_defaults\":676,\"./scales\":677}],675:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/extend\").extendFlat,i\u003dt(\"./attributes\"),a\u003dt(\"./scales\").scales;e.exports\u003d{editType:\"calc\",colorscale:{editType:\"calc\",sequential:{valType:\"colorscale\",dflt:a.Reds,editType:\"calc\"},sequentialminus:{valType:\"colorscale\",dflt:a.Blues,editType:\"calc\"},diverging:{valType:\"colorscale\",dflt:a.RdBu,editType:\"calc\"}},coloraxis:n({_isSubplotObj:!0,editType:\"calc\"},i(\"\",{colorAttr:\"corresponding trace color array(s)\",noColorAxis:!0,showScaleDflt:!0}))}},{\"../../lib/extend\":789,\"./attributes\":669,\"./scales\":677}],676:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plot_api/plot_template\"),a\u003dt(\"./layout_attributes\"),o\u003dt(\"./defaults\");e.exports\u003dfunction(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}r(\"colorscale.sequential\"),r(\"colorscale.sequentialminus\"),r(\"colorscale.diverging\");var s,l,c\u003de._colorAxes;function u(t,e){return n.coerce(s,l,a.coloraxis,t,e)}for(var f in c){var h\u003dc[f];if(h[0])s\u003dt[f]||{},(l\u003di.newContainer(e,f,\"coloraxis\"))._name\u003df,o(s,l,e,u,{prefix:\"\",cLetter:\"c\"});else{for(var p\u003d0;p\u003ch[2].length;p++)h[2][p]();delete e._colorAxes[f]}}}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"./defaults\":672,\"./layout_attributes\":675}],677:[function(t,e,r){\"use strict\";var n\u003dt(\"tinycolor2\"),i\u003d{Greys:[[0,\"rgb(0,0,0)\"],[1,\"rgb(255,255,255)\"]],YlGnBu:[[0,\"rgb(8,29,88)\"],[.125,\"rgb(37,52,148)\"],[.25,\"rgb(34,94,168)\"],[.375,\"rgb(29,145,192)\"],[.5,\"rgb(65,182,196)\"],[.625,\"rgb(127,205,187)\"],[.75,\"rgb(199,233,180)\"],[.875,\"rgb(237,248,217)\"],[1,\"rgb(255,255,217)\"]],Greens:[[0,\"rgb(0,68,27)\"],[.125,\"rgb(0,109,44)\"],[.25,\"rgb(35,139,69)\"],[.375,\"rgb(65,171,93)\"],[.5,\"rgb(116,196,118)\"],[.625,\"rgb(161,217,155)\"],[.75,\"rgb(199,233,192)\"],[.875,\"rgb(229,245,224)\"],[1,\"rgb(247,252,245)\"]],YlOrRd:[[0,\"rgb(128,0,38)\"],[.125,\"rgb(189,0,38)\"],[.25,\"rgb(227,26,28)\"],[.375,\"rgb(252,78,42)\"],[.5,\"rgb(253,141,60)\"],[.625,\"rgb(254,178,76)\"],[.75,\"rgb(254,217,118)\"],[.875,\"rgb(255,237,160)\"],[1,\"rgb(255,255,204)\"]],Bluered:[[0,\"rgb(0,0,255)\"],[1,\"rgb(255,0,0)\"]],RdBu:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(106,137,247)\"],[.5,\"rgb(190,190,190)\"],[.6,\"rgb(220,170,132)\"],[.7,\"rgb(230,145,90)\"],[1,\"rgb(178,10,28)\"]],Reds:[[0,\"rgb(220,220,220)\"],[.2,\"rgb(245,195,157)\"],[.4,\"rgb(245,160,105)\"],[1,\"rgb(178,10,28)\"]],Blues:[[0,\"rgb(5,10,172)\"],[.35,\"rgb(40,60,190)\"],[.5,\"rgb(70,100,245)\"],[.6,\"rgb(90,120,245)\"],[.7,\"rgb(106,137,247)\"],[1,\"rgb(220,220,220)\"]],Picnic:[[0,\"rgb(0,0,255)\"],[.1,\"rgb(51,153,255)\"],[.2,\"rgb(102,204,255)\"],[.3,\"rgb(153,204,255)\"],[.4,\"rgb(204,204,255)\"],[.5,\"rgb(255,255,255)\"],[.6,\"rgb(255,204,255)\"],[.7,\"rgb(255,153,255)\"],[.8,\"rgb(255,102,204)\"],[.9,\"rgb(255,102,102)\"],[1,\"rgb(255,0,0)\"]],Rainbow:[[0,\"rgb(150,0,90)\"],[.125,\"rgb(0,0,200)\"],[.25,\"rgb(0,25,255)\"],[.375,\"rgb(0,152,255)\"],[.5,\"rgb(44,255,150)\"],[.625,\"rgb(151,255,0)\"],[.75,\"rgb(255,234,0)\"],[.875,\"rgb(255,111,0)\"],[1,\"rgb(255,0,0)\"]],Portland:[[0,\"rgb(12,51,131)\"],[.25,\"rgb(10,136,186)\"],[.5,\"rgb(242,211,56)\"],[.75,\"rgb(242,143,56)\"],[1,\"rgb(217,30,30)\"]],Jet:[[0,\"rgb(0,0,131)\"],[.125,\"rgb(0,60,170)\"],[.375,\"rgb(5,255,255)\"],[.625,\"rgb(255,255,0)\"],[.875,\"rgb(250,0,0)\"],[1,\"rgb(128,0,0)\"]],Hot:[[0,\"rgb(0,0,0)\"],[.3,\"rgb(230,0,0)\"],[.6,\"rgb(255,210,0)\"],[1,\"rgb(255,255,255)\"]],Blackbody:[[0,\"rgb(0,0,0)\"],[.2,\"rgb(230,0,0)\"],[.4,\"rgb(230,210,0)\"],[.7,\"rgb(255,255,255)\"],[1,\"rgb(160,200,255)\"]],Earth:[[0,\"rgb(0,0,130)\"],[.1,\"rgb(0,180,180)\"],[.2,\"rgb(40,210,40)\"],[.4,\"rgb(230,230,50)\"],[.6,\"rgb(120,70,20)\"],[1,\"rgb(255,255,255)\"]],Electric:[[0,\"rgb(0,0,0)\"],[.15,\"rgb(30,0,100)\"],[.4,\"rgb(120,0,100)\"],[.6,\"rgb(160,90,0)\"],[.8,\"rgb(230,200,0)\"],[1,\"rgb(255,250,220)\"]],Viridis:[[0,\"#440154\"],[.06274509803921569,\"#48186a\"],[.12549019607843137,\"#472d7b\"],[.18823529411764706,\"#424086\"],[.25098039215686274,\"#3b528b\"],[.3137254901960784,\"#33638d\"],[.3764705882352941,\"#2c728e\"],[.4392156862745098,\"#26828e\"],[.5019607843137255,\"#21918c\"],[.5647058823529412,\"#1fa088\"],[.6274509803921569,\"#28ae80\"],[.6901960784313725,\"#3fbc73\"],[.7529411764705882,\"#5ec962\"],[.8156862745098039,\"#84d44b\"],[.8784313725490196,\"#addc30\"],[.9411764705882353,\"#d8e219\"],[1,\"#fde725\"]],Cividis:[[0,\"rgb(0,32,76)\"],[.058824,\"rgb(0,42,102)\"],[.117647,\"rgb(0,52,110)\"],[.176471,\"rgb(39,63,108)\"],[.235294,\"rgb(60,74,107)\"],[.294118,\"rgb(76,85,107)\"],[.352941,\"rgb(91,95,109)\"],[.411765,\"rgb(104,106,112)\"],[.470588,\"rgb(117,117,117)\"],[.529412,\"rgb(131,129,120)\"],[.588235,\"rgb(146,140,120)\"],[.647059,\"rgb(161,152,118)\"],[.705882,\"rgb(176,165,114)\"],[.764706,\"rgb(192,177,109)\"],[.823529,\"rgb(209,191,102)\"],[.882353,\"rgb(225,204,92)\"],[.941176,\"rgb(243,219,79)\"],[1,\"rgb(255,233,69)\"]]},a\u003di.RdBu;function o(t){var e\u003d0;if(!Array.isArray(t)||t.length\u003c2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!\u003d+t[0][0]||1!\u003d+t[t.length-1][0])return!1;for(var r\u003d0;r\u003ct.length;r++){var i\u003dt[r];if(2!\u003d\u003di.length||+i[0]\u003ce||!n(i[1]).isValid())return!1;e\u003d+i[0]}return!0}e.exports\u003d{scales:i,defaultScale:a,get:function(t,e){if(e||(e\u003da),!t)return e;function r(){try{t\u003di[t]||JSON.parse(t)}catch(r){t\u003de}}return\"string\"\u003d\u003dtypeof t\u0026\u0026(r(),\"string\"\u003d\u003dtypeof t\u0026\u0026r()),o(t)?t:e},isValid:function(t){return void 0!\u003d\u003di[t]||o(t)}}},{tinycolor2:594}],678:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i){var a\u003d(t-r)/(n-r),o\u003da+e/(n-r),s\u003d(a+o)/2;return\"left\"\u003d\u003d\u003di||\"bottom\"\u003d\u003d\u003di?a:\"center\"\u003d\u003d\u003di||\"middle\"\u003d\u003d\u003di?s:\"right\"\u003d\u003d\u003di||\"top\"\u003d\u003d\u003di?o:a\u003c2/3-s?a:o\u003e4/3-s?o:s}},{}],679:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003d[[\"sw-resize\",\"s-resize\",\"se-resize\"],[\"w-resize\",\"move\",\"e-resize\"],[\"nw-resize\",\"n-resize\",\"ne-resize\"]];e.exports\u003dfunction(t,e,r,a){return t\u003d\"left\"\u003d\u003d\u003dr?0:\"center\"\u003d\u003d\u003dr?1:\"right\"\u003d\u003d\u003dr?2:n.constrain(Math.floor(3*t),0,2),e\u003d\"bottom\"\u003d\u003d\u003da?0:\"middle\"\u003d\u003d\u003da?1:\"top\"\u003d\u003d\u003da?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},{\"../../lib\":799}],680:[function(t,e,r){\"use strict\";r.selectMode\u003dfunction(t){return\"lasso\"\u003d\u003d\u003dt||\"select\"\u003d\u003d\u003dt},r.drawMode\u003dfunction(t){return\"drawclosedpath\"\u003d\u003d\u003dt||\"drawopenpath\"\u003d\u003d\u003dt||\"drawline\"\u003d\u003d\u003dt||\"drawrect\"\u003d\u003d\u003dt||\"drawcircle\"\u003d\u003d\u003dt},r.openMode\u003dfunction(t){return\"drawline\"\u003d\u003d\u003dt||\"drawopenpath\"\u003d\u003d\u003dt},r.rectMode\u003dfunction(t){return\"select\"\u003d\u003d\u003dt||\"drawline\"\u003d\u003d\u003dt||\"drawrect\"\u003d\u003d\u003dt||\"drawcircle\"\u003d\u003d\u003dt},r.freeMode\u003dfunction(t){return\"lasso\"\u003d\u003d\u003dt||\"drawclosedpath\"\u003d\u003d\u003dt||\"drawopenpath\"\u003d\u003d\u003dt},r.selectingOrDrawing\u003dfunction(t){return r.freeMode(t)||r.rectMode(t)}},{}],681:[function(t,e,r){\"use strict\";var n\u003dt(\"mouse-event-offset\"),i\u003dt(\"has-hover\"),a\u003dt(\"has-passive-events\"),o\u003dt(\"../../lib\").removeElement,s\u003dt(\"../../plots/cartesian/constants\"),l\u003de.exports\u003d{};l.align\u003dt(\"./align\"),l.getCursor\u003dt(\"./cursor\");var c\u003dt(\"./unhover\");function u(){var t\u003ddocument.createElement(\"div\");t.className\u003d\"dragcover\";var e\u003dt.style;return e.position\u003d\"fixed\",e.left\u003d0,e.right\u003d0,e.top\u003d0,e.bottom\u003d0,e.zIndex\u003d999999999,e.background\u003d\"none\",document.body.appendChild(t),t}function f(t){return n(t.changedTouches?t.changedTouches[0]:t,document.body)}l.unhover\u003dc.wrapped,l.unhoverRaw\u003dc.raw,l.init\u003dfunction(t){var e,r,n,c,h,p,d,m,g\u003dt.gd,v\u003d1,y\u003dg._context.doubleClickDelay,x\u003dt.element;g._mouseDownTime||(g._mouseDownTime\u003d0),x.style.pointerEvents\u003d\"all\",x.onmousedown\u003d_,a?(x._ontouchstart\u0026\u0026x.removeEventListener(\"touchstart\",x._ontouchstart),x._ontouchstart\u003d_,x.addEventListener(\"touchstart\",_,{passive:!1})):x.ontouchstart\u003d_;var b\u003dt.clampFn||function(t,e,r){return Math.abs(t)\u003cr\u0026\u0026(t\u003d0),Math.abs(e)\u003cr\u0026\u0026(e\u003d0),[t,e]};function _(a){g._dragged\u003d!1,g._dragging\u003d!0;var o\u003df(a);e\u003do[0],r\u003do[1],d\u003da.target,p\u003da,m\u003d2\u003d\u003d\u003da.buttons||a.ctrlKey,void 0\u003d\u003d\u003da.clientX\u0026\u0026void 0\u003d\u003d\u003da.clientY\u0026\u0026(a.clientX\u003de,a.clientY\u003dr),(n\u003d(new Date).getTime())-g._mouseDownTime\u003cy?v+\u003d1:(v\u003d1,g._mouseDownTime\u003dn),t.prepFn\u0026\u0026t.prepFn(a,e,r),i\u0026\u0026!m?(h\u003du()).style.cursor\u003dwindow.getComputedStyle(x).cursor:i||(h\u003ddocument,c\u003dwindow.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor\u003dwindow.getComputedStyle(x).cursor),document.addEventListener(\"mouseup\",T),document.addEventListener(\"touchend\",T),!1!\u003d\u003dt.dragmode\u0026\u0026(a.preventDefault(),document.addEventListener(\"mousemove\",w),document.addEventListener(\"touchmove\",w,{passive:!1}))}function w(n){n.preventDefault();var i\u003df(n),a\u003dt.minDrag||s.MINDRAG,o\u003db(i[0]-e,i[1]-r,a),c\u003do[0],u\u003do[1];(c||u)\u0026\u0026(g._dragged\u003d!0,l.unhover(g,n)),g._dragged\u0026\u0026t.moveFn\u0026\u0026!m\u0026\u0026(g._dragdata\u003d{element:x,dx:c,dy:u},t.moveFn(c,u))}function T(e){if(delete g._dragdata,!1!\u003d\u003dt.dragmode\u0026\u0026(e.preventDefault(),document.removeEventListener(\"mousemove\",w),document.removeEventListener(\"touchmove\",w)),document.removeEventListener(\"mouseup\",T),document.removeEventListener(\"touchend\",T),i?o(h):c\u0026\u0026(h.documentElement.style.cursor\u003dc,c\u003dnull),g._dragging){if(g._dragging\u003d!1,(new Date).getTime()-g._mouseDownTime\u003ey\u0026\u0026(v\u003dMath.max(v-1,1)),g._dragged)t.doneFn\u0026\u0026t.doneFn();else if(t.clickFn\u0026\u0026t.clickFn(v,p),!m){var r;try{r\u003dnew MouseEvent(\"click\",e)}catch(t){var n\u003df(e);(r\u003ddocument.createEvent(\"MouseEvents\")).initMouseEvent(\"click\",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,n[0],n[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}d.dispatchEvent(r)}g._dragging\u003d!1,g._dragged\u003d!1}else g._dragged\u003d!1}},l.coverSlip\u003du},{\"../../lib\":799,\"../../plots/cartesian/constants\":856,\"./align\":678,\"./cursor\":679,\"./unhover\":682,\"has-hover\":439,\"has-passive-events\":440,\"mouse-event-offset\":467}],682:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/events\"),i\u003dt(\"../../lib/throttle\"),a\u003dt(\"../../lib/dom\").getGraphDiv,o\u003dt(\"../fx/constants\"),s\u003de.exports\u003d{};s.wrapped\u003dfunction(t,e,r){(t\u003da(t))._fullLayout\u0026\u0026i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw\u003dfunction(t,e){var r\u003dt._fullLayout,i\u003dt._hoverdata;e||(e\u003d{}),e.target\u0026\u0026!t._dragged\u0026\u0026!1\u003d\u003d\u003dn.triggerHandler(t,\"plotly_beforehover\",e)||(r._hoverlayer.selectAll(\"g\").remove(),r._hoverlayer.selectAll(\"line\").remove(),r._hoverlayer.selectAll(\"circle\").remove(),t._hoverdata\u003dvoid 0,e.target\u0026\u0026i\u0026\u0026t.emit(\"plotly_unhover\",{event:e,points:i}))}},{\"../../lib/dom\":787,\"../../lib/events\":788,\"../../lib/throttle\":825,\"../fx/constants\":696}],683:[function(t,e,r){\"use strict\";r.dash\u003d{valType:\"string\",values:[\"solid\",\"dot\",\"dash\",\"longdash\",\"dashdot\",\"longdashdot\"],dflt:\"solid\",editType:\"style\"},r.pattern\u003d{shape:{valType:\"enumerated\",values:[\"\",\"/\",\"\\\\\",\"x\",\"-\",\"|\",\"+\",\".\"],dflt:\"\",arrayOk:!0,editType:\"style\"},fillmode:{valType:\"enumerated\",values:[\"replace\",\"overlay\"],dflt:\"replace\",editType:\"style\"},bgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgcolor:{valType:\"color\",arrayOk:!0,editType:\"style\"},fgopacity:{valType:\"number\",editType:\"style\",min:0,max:1},size:{valType:\"number\",min:0,dflt:8,arrayOk:!0,editType:\"style\"},solidity:{valType:\"number\",min:0,max:1,dflt:.3,arrayOk:!0,editType:\"style\"},editType:\"style\"}},{}],684:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"tinycolor2\"),o\u003dt(\"../../registry\"),s\u003dt(\"../color\"),l\u003dt(\"../colorscale\"),c\u003dt(\"../../lib\"),u\u003dc.strTranslate,f\u003dt(\"../../lib/svg_text_utils\"),h\u003dt(\"../../constants/xmlns_namespaces\"),p\u003dt(\"../../constants/alignment\").LINE_SPACING,d\u003dt(\"../../constants/interactions\").DESELECTDIM,m\u003dt(\"../../traces/scatter/subtypes\"),g\u003dt(\"../../traces/scatter/make_bubble_size_func\"),v\u003dt(\"../../components/fx/helpers\").appendArrayPointValue,y\u003de.exports\u003d{};y.font\u003dfunction(t,e,r,n){c.isPlainObject(e)\u0026\u0026(n\u003de.color,r\u003de.size,e\u003de.family),e\u0026\u0026t.style(\"font-family\",e),r+1\u0026\u0026t.style(\"font-size\",r+\"px\"),n\u0026\u0026t.call(s.fill,n)},y.setPosition\u003dfunction(t,e,r){t.attr(\"x\",e).attr(\"y\",r)},y.setSize\u003dfunction(t,e,r){t.attr(\"width\",e).attr(\"height\",r)},y.setRect\u003dfunction(t,e,r,n,i){t.call(y.setPosition,e,r).call(y.setSize,n,i)},y.translatePoint\u003dfunction(t,e,r,n){var a\u003dr.c2p(t.x),o\u003dn.c2p(t.y);return!!(i(a)\u0026\u0026i(o)\u0026\u0026e.node())\u0026\u0026(\"text\"\u003d\u003d\u003de.node().nodeName?e.attr(\"x\",a).attr(\"y\",o):e.attr(\"transform\",u(a,o)),!0)},y.translatePoints\u003dfunction(t,e,r){t.each((function(t){var i\u003dn.select(this);y.translatePoint(t,i,e,r)}))},y.hideOutsideRangePoint\u003dfunction(t,e,r,n,i,a){e.attr(\"display\",r.isPtWithinRange(t,i)\u0026\u0026n.isPtWithinRange(t,a)?null:\"none\")},y.hideOutsideRangePoints\u003dfunction(t,e){if(e._hasClipOnAxisFalse){var r\u003de.xaxis,i\u003de.yaxis;t.each((function(e){var a\u003de[0].trace,s\u003da.xcalendar,l\u003da.ycalendar,c\u003do.traceIs(a,\"bar-like\")?\".bartext\":\".point,.textpoint\";t.selectAll(c).each((function(t){y.hideOutsideRangePoint(t,n.select(this),r,i,s,l)}))}))}},y.crispRound\u003dfunction(t,e,r){return e\u0026\u0026i(e)?t._context.staticPlot?e:e\u003c1?1:Math.round(e):r||0},y.singleLineStyle\u003dfunction(t,e,r,n,i){e.style(\"fill\",\"none\");var a\u003d(((t||[])[0]||{}).trace||{}).line||{},o\u003dr||a.width||0,l\u003di||a.dash||\"\";s.stroke(e,n||a.color),y.dashLine(e,l,o)},y.lineGroupStyle\u003dfunction(t,e,r,i){t.style(\"fill\",\"none\").each((function(t){var a\u003d(((t||[])[0]||{}).trace||{}).line||{},o\u003de||a.width||0,l\u003di||a.dash||\"\";n.select(this).call(s.stroke,r||a.color).call(y.dashLine,l,o)}))},y.dashLine\u003dfunction(t,e,r){r\u003d+r||0,e\u003dy.dashStyle(e,r),t.style({\"stroke-dasharray\":e,\"stroke-width\":r+\"px\"})},y.dashStyle\u003dfunction(t,e){e\u003d+e||1;var r\u003dMath.max(e,3);return\"solid\"\u003d\u003d\u003dt?t\u003d\"\":\"dot\"\u003d\u003d\u003dt?t\u003dr+\"px,\"+r+\"px\":\"dash\"\u003d\u003d\u003dt?t\u003d3*r+\"px,\"+3*r+\"px\":\"longdash\"\u003d\u003d\u003dt?t\u003d5*r+\"px,\"+5*r+\"px\":\"dashdot\"\u003d\u003d\u003dt?t\u003d3*r+\"px,\"+r+\"px,\"+r+\"px,\"+r+\"px\":\"longdashdot\"\u003d\u003d\u003dt\u0026\u0026(t\u003d5*r+\"px,\"+2*r+\"px,\"+r+\"px,\"+2*r+\"px\"),t},y.singleFillStyle\u003dfunction(t){var e\u003d(((n.select(t.node()).data()[0]||[])[0]||{}).trace||{}).fillcolor;e\u0026\u0026t.call(s.fill,e)},y.fillGroupStyle\u003dfunction(t){t.style(\"stroke-width\",0).each((function(t){var e\u003dn.select(this);t[0].trace\u0026\u0026e.call(s.fill,t[0].trace.fillcolor)}))};var x\u003dt(\"./symbol_defs\");y.symbolNames\u003d[],y.symbolFuncs\u003d[],y.symbolNeedLines\u003d{},y.symbolNoDot\u003d{},y.symbolNoFill\u003d{},y.symbolList\u003d[],Object.keys(x).forEach((function(t){var e\u003dx[t],r\u003de.n;y.symbolList.push(r,String(r),t,r+100,String(r+100),t+\"-open\"),y.symbolNames[r]\u003dt,y.symbolFuncs[r]\u003de.f,e.needLine\u0026\u0026(y.symbolNeedLines[r]\u003d!0),e.noDot?y.symbolNoDot[r]\u003d!0:y.symbolList.push(r+200,String(r+200),t+\"-dot\",r+300,String(r+300),t+\"-open-dot\"),e.noFill\u0026\u0026(y.symbolNoFill[r]\u003d!0)}));var b\u003dy.symbolNames.length;function _(t,e){var r\u003dt%100;return y.symbolFuncs[r](e)+(t\u003e\u003d200?\"M0,0.5L0.5,0L0,-0.5L-0.5,0Z\":\"\")}y.symbolNumber\u003dfunction(t){if(i(t))t\u003d+t;else if(\"string\"\u003d\u003dtypeof t){var e\u003d0;t.indexOf(\"-open\")\u003e0\u0026\u0026(e\u003d100,t\u003dt.replace(\"-open\",\"\")),t.indexOf(\"-dot\")\u003e0\u0026\u0026(e+\u003d200,t\u003dt.replace(\"-dot\",\"\")),(t\u003dy.symbolNames.indexOf(t))\u003e\u003d0\u0026\u0026(t+\u003de)}return t%100\u003e\u003db||t\u003e\u003d400?0:Math.floor(Math.max(t,0))};var w\u003d{x1:1,x2:0,y1:0,y2:0},T\u003d{x1:0,x2:0,y1:1,y2:0},k\u003dn.format(\"~.1f\"),M\u003d{radial:{node:\"radialGradient\"},radialreversed:{node:\"radialGradient\",reversed:!0},horizontal:{node:\"linearGradient\",attrs:w},horizontalreversed:{node:\"linearGradient\",attrs:w,reversed:!0},vertical:{node:\"linearGradient\",attrs:T},verticalreversed:{node:\"linearGradient\",attrs:T,reversed:!0}};y.gradient\u003dfunction(t,e,r,i,o,l){for(var u\u003do.length,f\u003dM[i],h\u003dnew Array(u),p\u003d0;p\u003cu;p++)f.reversed?h[u-1-p]\u003d[k(100*(1-o[p][0])),o[p][1]]:h[p]\u003d[k(100*o[p][0]),o[p][1]];var d\u003de._fullLayout,m\u003d\"g\"+d._uid+\"-\"+r,g\u003dd._defs.select(\".gradients\").selectAll(\"#\"+m).data([i+h.join(\";\")],c.identity);g.exit().remove(),g.enter().append(f.node).each((function(){var t\u003dn.select(this);f.attrs\u0026\u0026t.attr(f.attrs),t.attr(\"id\",m);var e\u003dt.selectAll(\"stop\").data(h);e.exit().remove(),e.enter().append(\"stop\"),e.each((function(t){var e\u003da(t[1]);n.select(this).attr({offset:t[0]+\"%\",\"stop-color\":s.tinyRGB(e),\"stop-opacity\":e.getAlpha()})}))})),t.style(l,z(m,e)).style(l+\"-opacity\",null);var v\u003dfunction(t){return\".\"+t.attr(\"class\").replace(/\\s/g,\".\")},y\u003dv(n.select(t.node().parentNode))+\"\u003e\"+v(t);d._gradientUrlQueryParts[y]\u003d1},y.pattern\u003dfunction(t,e,r,i,a,o,l,u,f,h,p,d){var m\u003d\"legend\"\u003d\u003d\u003de;u\u0026\u0026(\"overlay\"\u003d\u003d\u003df?(h\u003du,p\u003ds.contrast(h)):(h\u003dvoid 0,p\u003du));var g,v,y,x,b,_,w,T,k,M,A,S\u003dr._fullLayout,E\u003d\"p\"+S._uid+\"-\"+i,L\u003d{};switch(a){case\"/\":g\u003do*Math.sqrt(2),v\u003do*Math.sqrt(2),_\u003d\"path\",L\u003d{d:y\u003d\"M-\"+g/4+\",\"+v/4+\"l\"+g/2+\",-\"+v/2+\"M0,\"+v+\"L\"+g+\",0M\"+g/4*3+\",\"+v/4*5+\"l\"+g/2+\",-\"+v/2,opacity:d,stroke:p,\"stroke-width\":(x\u003dl*o)+\"px\"};break;case\"\\\\\":g\u003do*Math.sqrt(2),v\u003do*Math.sqrt(2),_\u003d\"path\",L\u003d{d:y\u003d\"M\"+g/4*3+\",-\"+v/4+\"l\"+g/2+\",\"+v/2+\"M0,0L\"+g+\",\"+v+\"M-\"+g/4+\",\"+v/4*3+\"l\"+g/2+\",\"+v/2,opacity:d,stroke:p,\"stroke-width\":(x\u003dl*o)+\"px\"};break;case\"x\":g\u003do*Math.sqrt(2),v\u003do*Math.sqrt(2),y\u003d\"M-\"+g/4+\",\"+v/4+\"l\"+g/2+\",-\"+v/2+\"M0,\"+v+\"L\"+g+\",0M\"+g/4*3+\",\"+v/4*5+\"l\"+g/2+\",-\"+v/2+\"M\"+g/4*3+\",-\"+v/4+\"l\"+g/2+\",\"+v/2+\"M0,0L\"+g+\",\"+v+\"M-\"+g/4+\",\"+v/4*3+\"l\"+g/2+\",\"+v/2,x\u003do-o*Math.sqrt(1-l),_\u003d\"path\",L\u003d{d:y,opacity:d,stroke:p,\"stroke-width\":x+\"px\"};break;case\"|\":_\u003d\"path\",_\u003d\"path\",L\u003d{d:y\u003d\"M\"+(g\u003do)/2+\",0L\"+g/2+\",\"+(v\u003do),opacity:d,stroke:p,\"stroke-width\":(x\u003dl*o)+\"px\"};break;case\"-\":_\u003d\"path\",_\u003d\"path\",L\u003d{d:y\u003d\"M0,\"+(v\u003do)/2+\"L\"+(g\u003do)+\",\"+v/2,opacity:d,stroke:p,\"stroke-width\":(x\u003dl*o)+\"px\"};break;case\"+\":_\u003d\"path\",y\u003d\"M\"+(g\u003do)/2+\",0L\"+g/2+\",\"+(v\u003do)+\"M0,\"+v/2+\"L\"+g+\",\"+v/2,x\u003do-o*Math.sqrt(1-l),_\u003d\"path\",L\u003d{d:y,opacity:d,stroke:p,\"stroke-width\":x+\"px\"};break;case\".\":g\u003do,v\u003do,l\u003cMath.PI/4?b\u003dMath.sqrt(l*o*o/Math.PI):(w\u003dl,T\u003dMath.PI/4,k\u003d1,M\u003do/2,A\u003do/Math.sqrt(2),b\u003dM+(A-M)*(w-T)/(k-T)),_\u003d\"circle\",L\u003d{cx:g/2,cy:v/2,r:b,opacity:d,fill:p}}var C\u003d[a||\"noSh\",h||\"noBg\",p||\"noFg\",o,l].join(\";\"),P\u003dS._defs.select(\".patterns\").selectAll(\"#\"+E).data([C],c.identity);P.exit().remove(),P.enter().append(\"pattern\").each((function(){var t\u003dn.select(this);if(t.attr({id:E,width:g+\"px\",height:v+\"px\",patternUnits:\"userSpaceOnUse\",patternTransform:m?\"scale(0.8)\":\"\"}),h){var e\u003dt.selectAll(\"rect\").data([0]);e.exit().remove(),e.enter().append(\"rect\").attr({width:g+\"px\",height:v+\"px\",fill:h})}var r\u003dt.selectAll(_).data([0]);r.exit().remove(),r.enter().append(_).attr(L)})),t.style(\"fill\",z(E,r)).style(\"fill-opacity\",null),t.classed(\"pattern_filled\",!0);var I\u003d\".\"+n.select(t.node().parentNode).attr(\"class\").replace(/\\s/g,\".\")+\"\u003e.pattern_filled\";S._patternUrlQueryParts[I]\u003d1},y.initGradients\u003dfunction(t){var e\u003dt._fullLayout;c.ensureSingle(e._defs,\"g\",\"gradients\").selectAll(\"linearGradient,radialGradient\").remove(),e._gradientUrlQueryParts\u003d{}},y.initPatterns\u003dfunction(t){var e\u003dt._fullLayout;c.ensureSingle(e._defs,\"g\",\"patterns\").selectAll(\"pattern\").remove(),e._patternUrlQueryParts\u003d{}},y.getPatternAttr\u003dfunction(t,e,r){return t\u0026\u0026c.isArrayOrTypedArray(t)?e\u003ct.length?t[e]:r:t},y.pointStyle\u003dfunction(t,e,r){if(t.size()){var i\u003dy.makePointStyleFns(e);t.each((function(t){y.singlePointStyle(t,n.select(this),e,i,r)}))}},y.singlePointStyle\u003dfunction(t,e,r,n,i){var a\u003dr.marker,o\u003da.line;if(e.style(\"opacity\",n.selectedOpacityFn?n.selectedOpacityFn(t):void 0\u003d\u003d\u003dt.mo?a.opacity:t.mo),n.ms2mrc){var l;l\u003d\"various\"\u003d\u003d\u003dt.ms||\"various\"\u003d\u003d\u003da.size?3:n.ms2mrc(t.ms),t.mrc\u003dl,n.selectedSizeFn\u0026\u0026(l\u003dt.mrc\u003dn.selectedSizeFn(t));var u\u003dy.symbolNumber(t.mx||a.symbol)||0;t.om\u003du%200\u003e\u003d100,e.attr(\"d\",_(u,l))}var f,h,p,d\u003d!1;if(t.so)p\u003do.outlierwidth,h\u003do.outliercolor,f\u003da.outliercolor;else{var m\u003d(o||{}).width;p\u003d(t.mlw+1||m+1||(t.trace?(t.trace.marker.line||{}).width:0)+1)-1||0,h\u003d\"mlc\"in t?t.mlcc\u003dn.lineScale(t.mlc):c.isArrayOrTypedArray(o.color)?s.defaultLine:o.color,c.isArrayOrTypedArray(a.color)\u0026\u0026(f\u003ds.defaultLine,d\u003d!0),f\u003d\"mc\"in t?t.mcc\u003dn.markerScale(t.mc):a.color||\"rgba(0,0,0,0)\",n.selectedColorFn\u0026\u0026(f\u003dn.selectedColorFn(t))}if(t.om)e.call(s.stroke,f).style({\"stroke-width\":(p||1)+\"px\",fill:\"none\"});else{e.style(\"stroke-width\",(t.isBlank?0:p)+\"px\");var g\u003da.gradient,v\u003dt.mgt;v?d\u003d!0:v\u003dg\u0026\u0026g.type,c.isArrayOrTypedArray(v)\u0026\u0026(v\u003dv[0],M[v]||(v\u003d0));var x\u003da.pattern,b\u003dx\u0026\u0026y.getPatternAttr(x.shape,t.i,\"\");if(v\u0026\u0026\"none\"!\u003d\u003dv){var w\u003dt.mgc;w?d\u003d!0:w\u003dg.color;var T\u003dr.uid;d\u0026\u0026(T+\u003d\"-\"+t.i),y.gradient(e,i,T,v,[[0,w],[1,f]],\"fill\")}else if(b){var k\u003dy.getPatternAttr(x.bgcolor,t.i,null),A\u003dy.getPatternAttr(x.fgcolor,t.i,null),S\u003dx.fgopacity,E\u003dy.getPatternAttr(x.size,t.i,8),L\u003dy.getPatternAttr(x.solidity,t.i,.3),C\u003dt.mcc||c.isArrayOrTypedArray(x.shape)||c.isArrayOrTypedArray(x.bgcolor)||c.isArrayOrTypedArray(x.size)||c.isArrayOrTypedArray(x.solidity),P\u003dr.uid;C\u0026\u0026(P+\u003d\"-\"+t.i),y.pattern(e,\"point\",i,P,b,E,L,t.mcc,x.fillmode,k,A,S)}else s.fill(e,f);p\u0026\u0026s.stroke(e,h)}},y.makePointStyleFns\u003dfunction(t){var e\u003d{},r\u003dt.marker;return e.markerScale\u003dy.tryColorscale(r,\"\"),e.lineScale\u003dy.tryColorscale(r,\"line\"),o.traceIs(t,\"symbols\")\u0026\u0026(e.ms2mrc\u003dm.isBubble(t)?g(t):function(){return(r.size||6)/2}),t.selectedpoints\u0026\u0026c.extendFlat(e,y.makeSelectedPointStyleFns(t)),e},y.makeSelectedPointStyleFns\u003dfunction(t){var e\u003d{},r\u003dt.selected||{},n\u003dt.unselected||{},i\u003dt.marker||{},a\u003dr.marker||{},s\u003dn.marker||{},l\u003di.opacity,u\u003da.opacity,f\u003ds.opacity,h\u003dvoid 0!\u003d\u003du,p\u003dvoid 0!\u003d\u003df;(c.isArrayOrTypedArray(l)||h||p)\u0026\u0026(e.selectedOpacityFn\u003dfunction(t){var e\u003dvoid 0\u003d\u003d\u003dt.mo?i.opacity:t.mo;return t.selected?h?u:e:p?f:d*e});var m\u003di.color,g\u003da.color,v\u003ds.color;(g||v)\u0026\u0026(e.selectedColorFn\u003dfunction(t){var e\u003dt.mcc||m;return t.selected?g||e:v||e});var y\u003di.size,x\u003da.size,b\u003ds.size,_\u003dvoid 0!\u003d\u003dx,w\u003dvoid 0!\u003d\u003db;return o.traceIs(t,\"symbols\")\u0026\u0026(_||w)\u0026\u0026(e.selectedSizeFn\u003dfunction(t){var e\u003dt.mrc||y/2;return t.selected?_?x/2:e:w?b/2:e}),e},y.makeSelectedTextStyleFns\u003dfunction(t){var e\u003d{},r\u003dt.selected||{},n\u003dt.unselected||{},i\u003dt.textfont||{},a\u003dr.textfont||{},o\u003dn.textfont||{},l\u003di.color,c\u003da.color,u\u003do.color;return e.selectedTextColorFn\u003dfunction(t){var e\u003dt.tc||l;return t.selected?c||e:u||(c?e:s.addOpacity(e,d))},e},y.selectedPointStyle\u003dfunction(t,e){if(t.size()\u0026\u0026e.selectedpoints){var r\u003dy.makeSelectedPointStyleFns(e),i\u003de.marker||{},a\u003d[];r.selectedOpacityFn\u0026\u0026a.push((function(t,e){t.style(\"opacity\",r.selectedOpacityFn(e))})),r.selectedColorFn\u0026\u0026a.push((function(t,e){s.fill(t,r.selectedColorFn(e))})),r.selectedSizeFn\u0026\u0026a.push((function(t,e){var n\u003de.mx||i.symbol||0,a\u003dr.selectedSizeFn(e);t.attr(\"d\",_(y.symbolNumber(n),a)),e.mrc2\u003da})),a.length\u0026\u0026t.each((function(t){for(var e\u003dn.select(this),r\u003d0;r\u003ca.length;r++)a[r](e,t)}))}},y.tryColorscale\u003dfunction(t,e){var r\u003de?c.nestedProperty(t,e).get():t;if(r){var n\u003dr.color;if((r.colorscale||r._colorAx)\u0026\u0026c.isArrayOrTypedArray(n))return l.makeColorScaleFuncFromTrace(r)}return c.identity};var A\u003d{start:1,end:-1,middle:0,bottom:1,top:-1};function S(t,e,r,i){var a\u003dn.select(t.node().parentNode),o\u003d-1!\u003d\u003de.indexOf(\"top\")?\"top\":-1!\u003d\u003de.indexOf(\"bottom\")?\"bottom\":\"middle\",s\u003d-1!\u003d\u003de.indexOf(\"left\")?\"end\":-1!\u003d\u003de.indexOf(\"right\")?\"start\":\"middle\",l\u003di?i/.8+1:0,c\u003d(f.lineCount(t)-1)*p+1,h\u003dA[s]*l,d\u003d.75*r+A[o]*l+(A[o]-1)*c*r/2;t.attr(\"text-anchor\",s),a.attr(\"transform\",u(h,d))}function E(t,e){var r\u003dt.ts||e.textfont.size;return i(r)\u0026\u0026r\u003e0?r:0}y.textPointStyle\u003dfunction(t,e,r){if(t.size()){var i;if(e.selectedpoints){var a\u003dy.makeSelectedTextStyleFns(e);i\u003da.selectedTextColorFn}var o\u003de.texttemplate,s\u003dr._fullLayout;t.each((function(t){var a\u003dn.select(this),l\u003do?c.extractOption(t,e,\"txt\",\"texttemplate\"):c.extractOption(t,e,\"tx\",\"text\");if(l||0\u003d\u003d\u003dl){if(o){var u\u003de._module.formatLabels,h\u003du?u(t,e,s):{},p\u003d{};v(p,e,t.i);var d\u003de._meta||{};l\u003dc.texttemplateString(l,h,s._d3locale,p,t,d)}var m\u003dt.tp||e.textposition,g\u003dE(t,e),x\u003di?i(t):t.tc||e.textfont.color;a.call(y.font,t.tf||e.textfont.family,g,x).text(l).call(f.convertToTspans,r).call(S,m,g,t.mrc)}else a.remove()}))}},y.selectedTextStyle\u003dfunction(t,e){if(t.size()\u0026\u0026e.selectedpoints){var r\u003dy.makeSelectedTextStyleFns(e);t.each((function(t){var i\u003dn.select(this),a\u003dr.selectedTextColorFn(t),o\u003dt.tp||e.textposition,l\u003dE(t,e);s.fill(i,a),S(i,o,l,t.mrc2||t.mrc)}))}};function L(t,e,r,i){var a\u003dt[0]-e[0],o\u003dt[1]-e[1],s\u003dr[0]-e[0],l\u003dr[1]-e[1],c\u003dMath.pow(a*a+o*o,.25),u\u003dMath.pow(s*s+l*l,.25),f\u003d(u*u*a-c*c*s)*i,h\u003d(u*u*o-c*c*l)*i,p\u003d3*u*(c+u),d\u003d3*c*(c+u);return[[n.round(e[0]+(p\u0026\u0026f/p),2),n.round(e[1]+(p\u0026\u0026h/p),2)],[n.round(e[0]-(d\u0026\u0026f/d),2),n.round(e[1]-(d\u0026\u0026h/d),2)]]}y.smoothopen\u003dfunction(t,e){if(t.length\u003c3)return\"M\"+t.join(\"L\");var r,n\u003d\"M\"+t[0],i\u003d[];for(r\u003d1;r\u003ct.length-1;r++)i.push(L(t[r-1],t[r],t[r+1],e));for(n+\u003d\"Q\"+i[0][0]+\" \"+t[1],r\u003d2;r\u003ct.length-1;r++)n+\u003d\"C\"+i[r-2][1]+\" \"+i[r-1][0]+\" \"+t[r];return n+\u003d\"Q\"+i[t.length-3][1]+\" \"+t[t.length-1]},y.smoothclosed\u003dfunction(t,e){if(t.length\u003c3)return\"M\"+t.join(\"L\")+\"Z\";var r,n\u003d\"M\"+t[0],i\u003dt.length-1,a\u003d[L(t[i],t[0],t[1],e)];for(r\u003d1;r\u003ci;r++)a.push(L(t[r-1],t[r],t[r+1],e));for(a.push(L(t[i-1],t[i],t[0],e)),r\u003d1;r\u003c\u003di;r++)n+\u003d\"C\"+a[r-1][1]+\" \"+a[r][0]+\" \"+t[r];return n+\u003d\"C\"+a[i][1]+\" \"+a[0][0]+\" \"+t[0]+\"Z\"};var C\u003d{hv:function(t,e){return\"H\"+n.round(e[0],2)+\"V\"+n.round(e[1],2)},vh:function(t,e){return\"V\"+n.round(e[1],2)+\"H\"+n.round(e[0],2)},hvh:function(t,e){return\"H\"+n.round((t[0]+e[0])/2,2)+\"V\"+n.round(e[1],2)+\"H\"+n.round(e[0],2)},vhv:function(t,e){return\"V\"+n.round((t[1]+e[1])/2,2)+\"H\"+n.round(e[0],2)+\"V\"+n.round(e[1],2)}},P\u003dfunction(t,e){return\"L\"+n.round(e[0],2)+\",\"+n.round(e[1],2)};y.steps\u003dfunction(t){var e\u003dC[t]||P;return function(t){for(var r\u003d\"M\"+n.round(t[0][0],2)+\",\"+n.round(t[0][1],2),i\u003d1;i\u003ct.length;i++)r+\u003de(t[i-1],t[i]);return r}},y.makeTester\u003dfunction(){var t\u003dc.ensureSingleById(n.select(\"body\"),\"svg\",\"js-plotly-tester\",(function(t){t.attr(h.svgAttrs).style({position:\"absolute\",left:\"-10000px\",top:\"-10000px\",width:\"9000px\",height:\"9000px\",\"z-index\":\"1\"})})),e\u003dc.ensureSingle(t,\"path\",\"js-reference-point\",(function(t){t.attr(\"d\",\"M0,0H1V1H0Z\").style({\"stroke-width\":0,fill:\"black\"})}));y.tester\u003dt,y.testref\u003de},y.savedBBoxes\u003d{};var I\u003d0;function O(t){var e\u003dt.getAttribute(\"data-unformatted\");if(null!\u003d\u003de)return e+t.getAttribute(\"data-math\")+t.getAttribute(\"text-anchor\")+t.getAttribute(\"style\")}function z(t,e){if(!t)return null;var r\u003de._context,n\u003dr._exportedPlot?\"\":r._baseUrl||\"\";return n?\"url(\u0027\"+n+\"#\"+t+\"\u0027)\":\"url(#\"+t+\")\"}y.bBox\u003dfunction(t,e,r){var i,a,o;if(r||(r\u003dO(t)),r){if(i\u003dy.savedBBoxes[r])return c.extendFlat({},i)}else if(1\u003d\u003d\u003dt.childNodes.length){var s\u003dt.childNodes[0];if(r\u003dO(s)){var l\u003d+s.getAttribute(\"x\")||0,u\u003d+s.getAttribute(\"y\")||0,h\u003ds.getAttribute(\"transform\");if(!h){var p\u003dy.bBox(s,!1,r);return l\u0026\u0026(p.left+\u003dl,p.right+\u003dl),u\u0026\u0026(p.top+\u003du,p.bottom+\u003du),p}if(r+\u003d\"~\"+l+\"~\"+u+\"~\"+h,i\u003dy.savedBBoxes[r])return c.extendFlat({},i)}}e?a\u003dt:(o\u003dy.tester.node(),a\u003dt.cloneNode(!0),o.appendChild(a)),n.select(a).attr(\"transform\",null).call(f.positionText,0,0);var d\u003da.getBoundingClientRect(),m\u003dy.testref.node().getBoundingClientRect();e||o.removeChild(a);var g\u003d{height:d.height,width:d.width,left:d.left-m.left,top:d.top-m.top,right:d.right-m.left,bottom:d.bottom-m.top};return I\u003e\u003d1e4\u0026\u0026(y.savedBBoxes\u003d{},I\u003d0),r\u0026\u0026(y.savedBBoxes[r]\u003dg),I++,c.extendFlat({},g)},y.setClipUrl\u003dfunction(t,e,r){t.attr(\"clip-path\",z(e,r))},y.getTranslate\u003dfunction(t){var e\u003d(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\btranslate\\((-?\\d*\\.?\\d*)[^-\\d]*(-?\\d*\\.?\\d*)[^\\d].*/,(function(t,e,r){return[e,r].join(\" \")})).split(\" \");return{x:+e[0]||0,y:+e[1]||0}},y.setTranslate\u003dfunction(t,e,r){var n\u003dt.attr?\"attr\":\"getAttribute\",i\u003dt.attr?\"attr\":\"setAttribute\",a\u003dt[n](\"transform\")||\"\";return e\u003de||0,r\u003dr||0,a\u003da.replace(/(\\btranslate\\(.*?\\);?)/,\"\").trim(),a\u003d(a+\u003du(e,r)).trim(),t[i](\"transform\",a),a},y.getScale\u003dfunction(t){var e\u003d(t[t.attr?\"attr\":\"getAttribute\"](\"transform\")||\"\").replace(/.*\\bscale\\((\\d*\\.?\\d*)[^\\d]*(\\d*\\.?\\d*)[^\\d].*/,(function(t,e,r){return[e,r].join(\" \")})).split(\" \");return{x:+e[0]||1,y:+e[1]||1}},y.setScale\u003dfunction(t,e,r){var n\u003dt.attr?\"attr\":\"getAttribute\",i\u003dt.attr?\"attr\":\"setAttribute\",a\u003dt[n](\"transform\")||\"\";return e\u003de||1,r\u003dr||1,a\u003da.replace(/(\\bscale\\(.*?\\);?)/,\"\").trim(),a\u003d(a+\u003d\"scale(\"+e+\",\"+r+\")\").trim(),t[i](\"transform\",a),a};var D\u003d/\\s*sc.*/;y.setPointGroupScale\u003dfunction(t,e,r){if(e\u003de||1,r\u003dr||1,t){var n\u003d1\u003d\u003d\u003de\u0026\u00261\u003d\u003d\u003dr?\"\":\"scale(\"+e+\",\"+r+\")\";t.each((function(){var t\u003d(this.getAttribute(\"transform\")||\"\").replace(D,\"\");t\u003d(t+\u003dn).trim(),this.setAttribute(\"transform\",t)}))}};var R\u003d/translate\\([^)]*\\)\\s*$/;y.setTextPointsScale\u003dfunction(t,e,r){t\u0026\u0026t.each((function(){var t,i\u003dn.select(this),a\u003di.select(\"text\");if(a.node()){var o\u003dparseFloat(a.attr(\"x\")||0),s\u003dparseFloat(a.attr(\"y\")||0),l\u003d(i.attr(\"transform\")||\"\").match(R);t\u003d1\u003d\u003d\u003de\u0026\u00261\u003d\u003d\u003dr?[]:[u(o,s),\"scale(\"+e+\",\"+r+\")\",u(-o,-s)],l\u0026\u0026t.push(l),i.attr(\"transform\",t.join(\"\"))}}))}},{\"../../components/fx/helpers\":698,\"../../constants/alignment\":767,\"../../constants/interactions\":774,\"../../constants/xmlns_namespaces\":776,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../registry\":927,\"../../traces/scatter/make_bubble_size_func\":1231,\"../../traces/scatter/subtypes\":1239,\"../color\":662,\"../colorscale\":674,\"./symbol_defs\":685,\"@plotly/d3\":58,\"fast-isnumeric\":245,tinycolor2:594}],685:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\");e.exports\u003d{circle:{n:0,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",0A\"+e+\",\"+e+\" 0 1,1 0,-\"+e+\"A\"+e+\",\"+e+\" 0 0,1 \"+e+\",0Z\"}},square:{n:1,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",\"+e+\"H-\"+e+\"V-\"+e+\"H\"+e+\"Z\"}},diamond:{n:2,f:function(t){var e\u003dn.round(1.3*t,2);return\"M\"+e+\",0L0,\"+e+\"L-\"+e+\",0L0,-\"+e+\"Z\"}},cross:{n:3,f:function(t){var e\u003dn.round(.4*t,2),r\u003dn.round(1.2*t,2);return\"M\"+r+\",\"+e+\"H\"+e+\"V\"+r+\"H-\"+e+\"V\"+e+\"H-\"+r+\"V-\"+e+\"H-\"+e+\"V-\"+r+\"H\"+e+\"V-\"+e+\"H\"+r+\"Z\"}},x:{n:4,f:function(t){var e\u003dn.round(.8*t/Math.sqrt(2),2),r\u003d\"l\"+e+\",\"+e,i\u003d\"l\"+e+\",-\"+e,a\u003d\"l-\"+e+\",-\"+e,o\u003d\"l-\"+e+\",\"+e;return\"M0,\"+e+r+i+a+i+a+o+a+o+r+o+r+\"Z\"}},\"triangle-up\":{n:5,f:function(t){var e\u003dn.round(2*t/Math.sqrt(3),2);return\"M-\"+e+\",\"+n.round(t/2,2)+\"H\"+e+\"L0,-\"+n.round(t,2)+\"Z\"}},\"triangle-down\":{n:6,f:function(t){var e\u003dn.round(2*t/Math.sqrt(3),2);return\"M-\"+e+\",-\"+n.round(t/2,2)+\"H\"+e+\"L0,\"+n.round(t,2)+\"Z\"}},\"triangle-left\":{n:7,f:function(t){var e\u003dn.round(2*t/Math.sqrt(3),2);return\"M\"+n.round(t/2,2)+\",-\"+e+\"V\"+e+\"L-\"+n.round(t,2)+\",0Z\"}},\"triangle-right\":{n:8,f:function(t){var e\u003dn.round(2*t/Math.sqrt(3),2);return\"M-\"+n.round(t/2,2)+\",-\"+e+\"V\"+e+\"L\"+n.round(t,2)+\",0Z\"}},\"triangle-ne\":{n:9,f:function(t){var e\u003dn.round(.6*t,2),r\u003dn.round(1.2*t,2);return\"M-\"+r+\",-\"+e+\"H\"+e+\"V\"+r+\"Z\"}},\"triangle-se\":{n:10,f:function(t){var e\u003dn.round(.6*t,2),r\u003dn.round(1.2*t,2);return\"M\"+e+\",-\"+r+\"V\"+e+\"H-\"+r+\"Z\"}},\"triangle-sw\":{n:11,f:function(t){var e\u003dn.round(.6*t,2),r\u003dn.round(1.2*t,2);return\"M\"+r+\",\"+e+\"H-\"+e+\"V-\"+r+\"Z\"}},\"triangle-nw\":{n:12,f:function(t){var e\u003dn.round(.6*t,2),r\u003dn.round(1.2*t,2);return\"M-\"+e+\",\"+r+\"V-\"+e+\"H\"+r+\"Z\"}},pentagon:{n:13,f:function(t){var e\u003dn.round(.951*t,2),r\u003dn.round(.588*t,2),i\u003dn.round(-t,2),a\u003dn.round(-.309*t,2);return\"M\"+e+\",\"+a+\"L\"+r+\",\"+n.round(.809*t,2)+\"H-\"+r+\"L-\"+e+\",\"+a+\"L0,\"+i+\"Z\"}},hexagon:{n:14,f:function(t){var e\u003dn.round(t,2),r\u003dn.round(t/2,2),i\u003dn.round(t*Math.sqrt(3)/2,2);return\"M\"+i+\",-\"+r+\"V\"+r+\"L0,\"+e+\"L-\"+i+\",\"+r+\"V-\"+r+\"L0,-\"+e+\"Z\"}},hexagon2:{n:15,f:function(t){var e\u003dn.round(t,2),r\u003dn.round(t/2,2),i\u003dn.round(t*Math.sqrt(3)/2,2);return\"M-\"+r+\",\"+i+\"H\"+r+\"L\"+e+\",0L\"+r+\",-\"+i+\"H-\"+r+\"L-\"+e+\",0Z\"}},octagon:{n:16,f:function(t){var e\u003dn.round(.924*t,2),r\u003dn.round(.383*t,2);return\"M-\"+r+\",-\"+e+\"H\"+r+\"L\"+e+\",-\"+r+\"V\"+r+\"L\"+r+\",\"+e+\"H-\"+r+\"L-\"+e+\",\"+r+\"V-\"+r+\"Z\"}},star:{n:17,f:function(t){var e\u003d1.4*t,r\u003dn.round(.225*e,2),i\u003dn.round(.951*e,2),a\u003dn.round(.363*e,2),o\u003dn.round(.588*e,2),s\u003dn.round(-e,2),l\u003dn.round(-.309*e,2),c\u003dn.round(.118*e,2),u\u003dn.round(.809*e,2);return\"M\"+r+\",\"+l+\"H\"+i+\"L\"+a+\",\"+c+\"L\"+o+\",\"+u+\"L0,\"+n.round(.382*e,2)+\"L-\"+o+\",\"+u+\"L-\"+a+\",\"+c+\"L-\"+i+\",\"+l+\"H-\"+r+\"L0,\"+s+\"Z\"}},hexagram:{n:18,f:function(t){var e\u003dn.round(.66*t,2),r\u003dn.round(.38*t,2),i\u003dn.round(.76*t,2);return\"M-\"+i+\",0l-\"+r+\",-\"+e+\"h\"+i+\"l\"+r+\",-\"+e+\"l\"+r+\",\"+e+\"h\"+i+\"l-\"+r+\",\"+e+\"l\"+r+\",\"+e+\"h-\"+i+\"l-\"+r+\",\"+e+\"l-\"+r+\",-\"+e+\"h-\"+i+\"Z\"}},\"star-triangle-up\":{n:19,f:function(t){var e\u003dn.round(t*Math.sqrt(3)*.8,2),r\u003dn.round(.8*t,2),i\u003dn.round(1.6*t,2),a\u003dn.round(4*t,2),o\u003d\"A \"+a+\",\"+a+\" 0 0 1 \";return\"M-\"+e+\",\"+r+o+e+\",\"+r+o+\"0,-\"+i+o+\"-\"+e+\",\"+r+\"Z\"}},\"star-triangle-down\":{n:20,f:function(t){var e\u003dn.round(t*Math.sqrt(3)*.8,2),r\u003dn.round(.8*t,2),i\u003dn.round(1.6*t,2),a\u003dn.round(4*t,2),o\u003d\"A \"+a+\",\"+a+\" 0 0 1 \";return\"M\"+e+\",-\"+r+o+\"-\"+e+\",-\"+r+o+\"0,\"+i+o+e+\",-\"+r+\"Z\"}},\"star-square\":{n:21,f:function(t){var e\u003dn.round(1.1*t,2),r\u003dn.round(2*t,2),i\u003d\"A \"+r+\",\"+r+\" 0 0 1 \";return\"M-\"+e+\",-\"+e+i+\"-\"+e+\",\"+e+i+e+\",\"+e+i+e+\",-\"+e+i+\"-\"+e+\",-\"+e+\"Z\"}},\"star-diamond\":{n:22,f:function(t){var e\u003dn.round(1.4*t,2),r\u003dn.round(1.9*t,2),i\u003d\"A \"+r+\",\"+r+\" 0 0 1 \";return\"M-\"+e+\",0\"+i+\"0,\"+e+i+e+\",0\"+i+\"0,-\"+e+i+\"-\"+e+\",0Z\"}},\"diamond-tall\":{n:23,f:function(t){var e\u003dn.round(.7*t,2),r\u003dn.round(1.4*t,2);return\"M0,\"+r+\"L\"+e+\",0L0,-\"+r+\"L-\"+e+\",0Z\"}},\"diamond-wide\":{n:24,f:function(t){var e\u003dn.round(1.4*t,2),r\u003dn.round(.7*t,2);return\"M0,\"+r+\"L\"+e+\",0L0,-\"+r+\"L-\"+e+\",0Z\"}},hourglass:{n:25,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",\"+e+\"H-\"+e+\"L\"+e+\",-\"+e+\"H-\"+e+\"Z\"},noDot:!0},bowtie:{n:26,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",\"+e+\"V-\"+e+\"L-\"+e+\",\"+e+\"V-\"+e+\"Z\"},noDot:!0},\"circle-cross\":{n:27,f:function(t){var e\u003dn.round(t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e+\"M\"+e+\",0A\"+e+\",\"+e+\" 0 1,1 0,-\"+e+\"A\"+e+\",\"+e+\" 0 0,1 \"+e+\",0Z\"},needLine:!0,noDot:!0},\"circle-x\":{n:28,f:function(t){var e\u003dn.round(t,2),r\u003dn.round(t/Math.sqrt(2),2);return\"M\"+r+\",\"+r+\"L-\"+r+\",-\"+r+\"M\"+r+\",-\"+r+\"L-\"+r+\",\"+r+\"M\"+e+\",0A\"+e+\",\"+e+\" 0 1,1 0,-\"+e+\"A\"+e+\",\"+e+\" 0 0,1 \"+e+\",0Z\"},needLine:!0,noDot:!0},\"square-cross\":{n:29,f:function(t){var e\u003dn.round(t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e+\"M\"+e+\",\"+e+\"H-\"+e+\"V-\"+e+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"square-x\":{n:30,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",\"+e+\"L-\"+e+\",-\"+e+\"M\"+e+\",-\"+e+\"L-\"+e+\",\"+e+\"M\"+e+\",\"+e+\"H-\"+e+\"V-\"+e+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"diamond-cross\":{n:31,f:function(t){var e\u003dn.round(1.3*t,2);return\"M\"+e+\",0L0,\"+e+\"L-\"+e+\",0L0,-\"+e+\"ZM0,-\"+e+\"V\"+e+\"M-\"+e+\",0H\"+e},needLine:!0,noDot:!0},\"diamond-x\":{n:32,f:function(t){var e\u003dn.round(1.3*t,2),r\u003dn.round(.65*t,2);return\"M\"+e+\",0L0,\"+e+\"L-\"+e+\",0L0,-\"+e+\"ZM-\"+r+\",-\"+r+\"L\"+r+\",\"+r+\"M-\"+r+\",\"+r+\"L\"+r+\",-\"+r},needLine:!0,noDot:!0},\"cross-thin\":{n:33,f:function(t){var e\u003dn.round(1.4*t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e},needLine:!0,noDot:!0,noFill:!0},\"x-thin\":{n:34,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",\"+e+\"L-\"+e+\",-\"+e+\"M\"+e+\",-\"+e+\"L-\"+e+\",\"+e},needLine:!0,noDot:!0,noFill:!0},asterisk:{n:35,f:function(t){var e\u003dn.round(1.2*t,2),r\u003dn.round(.85*t,2);return\"M0,\"+e+\"V-\"+e+\"M\"+e+\",0H-\"+e+\"M\"+r+\",\"+r+\"L-\"+r+\",-\"+r+\"M\"+r+\",-\"+r+\"L-\"+r+\",\"+r},needLine:!0,noDot:!0,noFill:!0},hash:{n:36,f:function(t){var e\u003dn.round(t/2,2),r\u003dn.round(t,2);return\"M\"+e+\",\"+r+\"V-\"+r+\"m-\"+r+\",0V\"+r+\"M\"+r+\",\"+e+\"H-\"+r+\"m0,-\"+r+\"H\"+r},needLine:!0,noFill:!0},\"y-up\":{n:37,f:function(t){var e\u003dn.round(1.2*t,2),r\u003dn.round(1.6*t,2),i\u003dn.round(.8*t,2);return\"M-\"+e+\",\"+i+\"L0,0M\"+e+\",\"+i+\"L0,0M0,-\"+r+\"L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"y-down\":{n:38,f:function(t){var e\u003dn.round(1.2*t,2),r\u003dn.round(1.6*t,2),i\u003dn.round(.8*t,2);return\"M-\"+e+\",-\"+i+\"L0,0M\"+e+\",-\"+i+\"L0,0M0,\"+r+\"L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"y-left\":{n:39,f:function(t){var e\u003dn.round(1.2*t,2),r\u003dn.round(1.6*t,2),i\u003dn.round(.8*t,2);return\"M\"+i+\",\"+e+\"L0,0M\"+i+\",-\"+e+\"L0,0M-\"+r+\",0L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"y-right\":{n:40,f:function(t){var e\u003dn.round(1.2*t,2),r\u003dn.round(1.6*t,2),i\u003dn.round(.8*t,2);return\"M-\"+i+\",\"+e+\"L0,0M-\"+i+\",-\"+e+\"L0,0M\"+r+\",0L0,0\"},needLine:!0,noDot:!0,noFill:!0},\"line-ew\":{n:41,f:function(t){var e\u003dn.round(1.4*t,2);return\"M\"+e+\",0H-\"+e},needLine:!0,noDot:!0,noFill:!0},\"line-ns\":{n:42,f:function(t){var e\u003dn.round(1.4*t,2);return\"M0,\"+e+\"V-\"+e},needLine:!0,noDot:!0,noFill:!0},\"line-ne\":{n:43,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",-\"+e+\"L-\"+e+\",\"+e},needLine:!0,noDot:!0,noFill:!0},\"line-nw\":{n:44,f:function(t){var e\u003dn.round(t,2);return\"M\"+e+\",\"+e+\"L-\"+e+\",-\"+e},needLine:!0,noDot:!0,noFill:!0},\"arrow-up\":{n:45,f:function(t){var e\u003dn.round(t,2);return\"M0,0L-\"+e+\",\"+n.round(2*t,2)+\"H\"+e+\"Z\"},noDot:!0},\"arrow-down\":{n:46,f:function(t){var e\u003dn.round(t,2);return\"M0,0L-\"+e+\",-\"+n.round(2*t,2)+\"H\"+e+\"Z\"},noDot:!0},\"arrow-left\":{n:47,f:function(t){var e\u003dn.round(2*t,2),r\u003dn.round(t,2);return\"M0,0L\"+e+\",-\"+r+\"V\"+r+\"Z\"},noDot:!0},\"arrow-right\":{n:48,f:function(t){var e\u003dn.round(2*t,2),r\u003dn.round(t,2);return\"M0,0L-\"+e+\",-\"+r+\"V\"+r+\"Z\"},noDot:!0},\"arrow-bar-up\":{n:49,f:function(t){var e\u003dn.round(t,2);return\"M-\"+e+\",0H\"+e+\"M0,0L-\"+e+\",\"+n.round(2*t,2)+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"arrow-bar-down\":{n:50,f:function(t){var e\u003dn.round(t,2);return\"M-\"+e+\",0H\"+e+\"M0,0L-\"+e+\",-\"+n.round(2*t,2)+\"H\"+e+\"Z\"},needLine:!0,noDot:!0},\"arrow-bar-left\":{n:51,f:function(t){var e\u003dn.round(2*t,2),r\u003dn.round(t,2);return\"M0,-\"+r+\"V\"+r+\"M0,0L\"+e+\",-\"+r+\"V\"+r+\"Z\"},needLine:!0,noDot:!0},\"arrow-bar-right\":{n:52,f:function(t){var e\u003dn.round(2*t,2),r\u003dn.round(t,2);return\"M0,-\"+r+\"V\"+r+\"M0,0L-\"+e+\",-\"+r+\"V\"+r+\"Z\"},needLine:!0,noDot:!0}}},{\"@plotly/d3\":58}],686:[function(t,e,r){\"use strict\";e.exports\u003d{visible:{valType:\"boolean\",editType:\"calc\"},type:{valType:\"enumerated\",values:[\"percent\",\"constant\",\"sqrt\",\"data\"],editType:\"calc\"},symmetric:{valType:\"boolean\",editType:\"calc\"},array:{valType:\"data_array\",editType:\"calc\"},arrayminus:{valType:\"data_array\",editType:\"calc\"},value:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},valueminus:{valType:\"number\",min:0,dflt:10,editType:\"calc\"},traceref:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},tracerefminus:{valType:\"integer\",min:0,dflt:0,editType:\"style\"},copy_ystyle:{valType:\"boolean\",editType:\"plot\"},copy_zstyle:{valType:\"boolean\",editType:\"style\"},color:{valType:\"color\",editType:\"style\"},thickness:{valType:\"number\",min:0,dflt:2,editType:\"style\"},width:{valType:\"number\",min:0,editType:\"plot\"},editType:\"calc\",_deprecated:{opacity:{valType:\"number\",editType:\"style\"}}}},{}],687:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../../lib\"),s\u003dt(\"./compute_error\");function l(t,e,r,i){var l\u003de[\"error_\"+i]||{},c\u003d[];if(l.visible\u0026\u0026-1!\u003d\u003d[\"linear\",\"log\"].indexOf(r.type)){for(var u\u003ds(l),f\u003d0;f\u003ct.length;f++){var h\u003dt[f],p\u003dh.i;if(void 0\u003d\u003d\u003dp)p\u003df;else if(null\u003d\u003d\u003dp)continue;var d\u003dh[i];if(n(r.c2l(d))){var m\u003du(d,p);if(n(m[0])\u0026\u0026n(m[1])){var g\u003dh[i+\"s\"]\u003dd-m[0],v\u003dh[i+\"h\"]\u003dd+m[1];c.push(g,v)}}}var y\u003dr._id,x\u003de._extremes[y],b\u003da.findExtremes(r,c,o.extendFlat({tozero:x.opts.tozero},{padded:!0}));x.min\u003dx.min.concat(b.min),x.max\u003dx.max.concat(b.max)}}e.exports\u003dfunction(t){for(var e\u003dt.calcdata,r\u003d0;r\u003ce.length;r++){var n\u003de[r],o\u003dn[0].trace;if(!0\u003d\u003d\u003do.visible\u0026\u0026i.traceIs(o,\"errorBarsOK\")){var s\u003da.getFromId(t,o.xaxis),c\u003da.getFromId(t,o.yaxis);l(n,o,s,\"x\"),l(n,o,c,\"y\")}}}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"./compute_error\":688,\"fast-isnumeric\":245}],688:[function(t,e,r){\"use strict\";function n(t,e){return\"percent\"\u003d\u003d\u003dt?function(t){return Math.abs(t*e/100)}:\"constant\"\u003d\u003d\u003dt?function(){return Math.abs(e)}:\"sqrt\"\u003d\u003d\u003dt?function(t){return Math.sqrt(Math.abs(t))}:void 0}e.exports\u003dfunction(t){var e\u003dt.type,r\u003dt.symmetric;if(\"data\"\u003d\u003d\u003de){var i\u003dt.array||[];if(r)return function(t,e){var r\u003d+i[e];return[r,r]};var a\u003dt.arrayminus||[];return function(t,e){var r\u003d+i[e],n\u003d+a[e];return isNaN(r)\u0026\u0026isNaN(n)?[NaN,NaN]:[n||0,r||0]}}var o\u003dn(e,t.value),s\u003dn(e,t.valueminus);return r||void 0\u003d\u003d\u003dt.valueminus?function(t){var e\u003do(t);return[e,e]}:function(t){return[s(t),o(t)]}}},{}],689:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib\"),o\u003dt(\"../../plot_api/plot_template\"),s\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,l){var c\u003d\"error_\"+l.axis,u\u003do.newContainer(e,c),f\u003dt[c]||{};function h(t,e){return a.coerce(f,u,s,t,e)}if(!1!\u003d\u003dh(\"visible\",void 0!\u003d\u003df.array||void 0!\u003d\u003df.value||\"sqrt\"\u003d\u003d\u003df.type)){var p\u003dh(\"type\",\"array\"in f?\"data\":\"percent\"),d\u003d!0;\"sqrt\"!\u003d\u003dp\u0026\u0026(d\u003dh(\"symmetric\",!((\"data\"\u003d\u003d\u003dp?\"arrayminus\":\"valueminus\")in f))),\"data\"\u003d\u003d\u003dp?(h(\"array\"),h(\"traceref\"),d||(h(\"arrayminus\"),h(\"tracerefminus\"))):\"percent\"!\u003d\u003dp\u0026\u0026\"constant\"!\u003d\u003dp||(h(\"value\"),d||h(\"valueminus\"));var m\u003d\"copy_\"+l.inherit+\"style\";if(l.inherit)(e[\"error_\"+l.inherit]||{}).visible\u0026\u0026h(m,!(f.color||n(f.thickness)||n(f.width)));l.inherit\u0026\u0026u[m]||(h(\"color\",r),h(\"thickness\"),h(\"width\",i.traceIs(e,\"gl3d\")?0:4))}}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../registry\":927,\"./attributes\":686,\"fast-isnumeric\":245}],690:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plot_api/edit_types\").overrideAll,a\u003dt(\"./attributes\"),o\u003d{error_x:n.extendFlat({},a),error_y:n.extendFlat({},a)};delete o.error_x.copy_zstyle,delete o.error_y.copy_zstyle,delete o.error_y.copy_ystyle;var s\u003d{error_x:n.extendFlat({},a),error_y:n.extendFlat({},a),error_z:n.extendFlat({},a)};delete s.error_x.copy_ystyle,delete s.error_y.copy_ystyle,delete s.error_z.copy_ystyle,delete s.error_z.copy_zstyle,e.exports\u003d{moduleType:\"component\",name:\"errorbars\",schema:{traces:{scatter:o,bar:o,histogram:o,scatter3d:i(s,\"calc\",\"nested\"),scattergl:i(o,\"calc\",\"nested\")}},supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),makeComputeError:t(\"./compute_error\"),plot:t(\"./plot\"),style:t(\"./style\"),hoverInfo:function(t,e,r){(e.error_y||{}).visible\u0026\u0026(r.yerr\u003dt.yh-t.y,e.error_y.symmetric||(r.yerrneg\u003dt.y-t.ys));(e.error_x||{}).visible\u0026\u0026(r.xerr\u003dt.xh-t.x,e.error_x.symmetric||(r.xerrneg\u003dt.x-t.xs))}}},{\"../../lib\":799,\"../../plot_api/edit_types\":831,\"./attributes\":686,\"./calc\":687,\"./compute_error\":688,\"./defaults\":689,\"./plot\":691,\"./style\":692}],691:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../drawing\"),o\u003dt(\"../../traces/scatter/subtypes\");e.exports\u003dfunction(t,e,r,s){var l\u003dr.xaxis,c\u003dr.yaxis,u\u003ds\u0026\u0026s.duration\u003e0;e.each((function(e){var f,h\u003de[0].trace,p\u003dh.error_x||{},d\u003dh.error_y||{};h.ids\u0026\u0026(f\u003dfunction(t){return t.id});var m\u003do.hasMarkers(h)\u0026\u0026h.marker.maxdisplayed\u003e0;d.visible||p.visible||(e\u003d[]);var g\u003dn.select(this).selectAll(\"g.errorbar\").data(e,f);if(g.exit().remove(),e.length){p.visible||g.selectAll(\"path.xerror\").remove(),d.visible||g.selectAll(\"path.yerror\").remove(),g.style(\"opacity\",1);var v\u003dg.enter().append(\"g\").classed(\"errorbar\",!0);u\u0026\u0026v.style(\"opacity\",0).transition().duration(s.duration).style(\"opacity\",1),a.setClipUrl(g,r.layerClipId,t),g.each((function(t){var e\u003dn.select(this),r\u003dfunction(t,e,r){var n\u003d{x:e.c2p(t.x),y:r.c2p(t.y)};void 0!\u003d\u003dt.yh\u0026\u0026(n.yh\u003dr.c2p(t.yh),n.ys\u003dr.c2p(t.ys),i(n.ys)||(n.noYS\u003d!0,n.ys\u003dr.c2p(t.ys,!0)));void 0!\u003d\u003dt.xh\u0026\u0026(n.xh\u003de.c2p(t.xh),n.xs\u003de.c2p(t.xs),i(n.xs)||(n.noXS\u003d!0,n.xs\u003de.c2p(t.xs,!0)));return n}(t,l,c);if(!m||t.vis){var a,o\u003de.select(\"path.yerror\");if(d.visible\u0026\u0026i(r.x)\u0026\u0026i(r.yh)\u0026\u0026i(r.ys)){var f\u003dd.width;a\u003d\"M\"+(r.x-f)+\",\"+r.yh+\"h\"+2*f+\"m-\"+f+\",0V\"+r.ys,r.noYS||(a+\u003d\"m-\"+f+\",0h\"+2*f),!o.size()?o\u003de.append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").classed(\"yerror\",!0):u\u0026\u0026(o\u003do.transition().duration(s.duration).ease(s.easing)),o.attr(\"d\",a)}else o.remove();var h\u003de.select(\"path.xerror\");if(p.visible\u0026\u0026i(r.y)\u0026\u0026i(r.xh)\u0026\u0026i(r.xs)){var g\u003d(p.copy_ystyle?d:p).width;a\u003d\"M\"+r.xh+\",\"+(r.y-g)+\"v\"+2*g+\"m0,-\"+g+\"H\"+r.xs,r.noXS||(a+\u003d\"m0,-\"+g+\"v\"+2*g),!h.size()?h\u003de.append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").classed(\"xerror\",!0):u\u0026\u0026(h\u003dh.transition().duration(s.duration).ease(s.easing)),h.attr(\"d\",a)}else h.remove()}}))}}))}},{\"../../traces/scatter/subtypes\":1239,\"../drawing\":684,\"@plotly/d3\":58,\"fast-isnumeric\":245}],692:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../color\");e.exports\u003dfunction(t){t.each((function(t){var e\u003dt[0].trace,r\u003de.error_y||{},a\u003de.error_x||{},o\u003dn.select(this);o.selectAll(\"path.yerror\").style(\"stroke-width\",r.thickness+\"px\").call(i.stroke,r.color),a.copy_ystyle\u0026\u0026(a\u003dr),o.selectAll(\"path.xerror\").style(\"stroke-width\",a.thickness+\"px\").call(i.stroke,a.color)}))}},{\"../color\":662,\"@plotly/d3\":58}],693:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"./layout_attributes\").hoverlabel,a\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003d{hoverlabel:{bgcolor:a({},i.bgcolor,{arrayOk:!0}),bordercolor:a({},i.bordercolor,{arrayOk:!0}),font:n({arrayOk:!0,editType:\"none\"}),align:a({},i.align,{arrayOk:!0}),namelength:a({},i.namelength,{arrayOk:!0}),editType:\"none\"}}},{\"../../lib/extend\":789,\"../../plots/font_attributes\":878,\"./layout_attributes\":703}],694:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\");function a(t,e,r,i){i\u003di||n.identity,Array.isArray(t)\u0026\u0026(e[0][r]\u003di(t))}e.exports\u003dfunction(t){var e\u003dt.calcdata,r\u003dt._fullLayout;function o(t){return function(e){return n.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}for(var s\u003d0;s\u003ce.length;s++){var l\u003de[s],c\u003dl[0].trace;if(!i.traceIs(c,\"pie-like\")){var u\u003di.traceIs(c,\"2dMap\")?a:n.fillArray;u(c.hoverinfo,l,\"hi\",o(c)),c.hovertemplate\u0026\u0026u(c.hovertemplate,l,\"ht\"),c.hoverlabel\u0026\u0026(u(c.hoverlabel.bgcolor,l,\"hbg\"),u(c.hoverlabel.bordercolor,l,\"hbc\"),u(c.hoverlabel.font.size,l,\"hts\"),u(c.hoverlabel.font.color,l,\"htc\"),u(c.hoverlabel.font.family,l,\"htf\"),u(c.hoverlabel.namelength,l,\"hnl\"),u(c.hoverlabel.align,l,\"hta\"))}}}},{\"../../lib\":799,\"../../registry\":927}],695:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"./hover\").hover;e.exports\u003dfunction(t,e,r){var a\u003dn.getComponentMethod(\"annotations\",\"onClick\")(t,t._hoverdata);function o(){t.emit(\"plotly_click\",{points:t._hoverdata,event:e})}void 0!\u003d\u003dr\u0026\u0026i(t,e,r,!0),t._hoverdata\u0026\u0026e\u0026\u0026e.target\u0026\u0026(a\u0026\u0026a.then?a.then(o):o(),e.stopImmediatePropagation\u0026\u0026e.stopImmediatePropagation())}},{\"../../registry\":927,\"./hover\":699}],696:[function(t,e,r){\"use strict\";e.exports\u003d{YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:\"Arial, sans-serif\",HOVERMINTIME:50,HOVERID:\"-hover\"}},{}],697:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"./hoverlabel_defaults\");e.exports\u003dfunction(t,e,r,o){var s\u003dn.extendFlat({},o.hoverlabel);e.hovertemplate\u0026\u0026(s.namelength\u003d-1),a(t,e,(function(r,a){return n.coerce(t,e,i,r,a)}),s)}},{\"../../lib\":799,\"./attributes\":693,\"./hoverlabel_defaults\":700}],698:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");r.getSubplot\u003dfunction(t){return t.subplot||t.xaxis+t.yaxis||t.geo},r.isTraceInSubplots\u003dfunction(t,e){if(\"splom\"\u003d\u003d\u003dt.type){for(var n\u003dt.xaxes||[],i\u003dt.yaxes||[],a\u003d0;a\u003cn.length;a++)for(var o\u003d0;o\u003ci.length;o++)if(-1!\u003d\u003de.indexOf(n[a]+i[o]))return!0;return!1}return-1!\u003d\u003de.indexOf(r.getSubplot(t))},r.flat\u003dfunction(t,e){for(var r\u003dnew Array(t.length),n\u003d0;n\u003ct.length;n++)r[n]\u003de;return r},r.p2c\u003dfunction(t,e){for(var r\u003dnew Array(t.length),n\u003d0;n\u003ct.length;n++)r[n]\u003dt[n].p2c(e);return r},r.getDistanceFunction\u003dfunction(t,e,n,i){return\"closest\"\u003d\u003d\u003dt?i||r.quadrature(e,n):\"x\"\u003d\u003d\u003dt.charAt(0)?e:n},r.getClosest\u003dfunction(t,e,r){if(!1!\u003d\u003dr.index)r.index\u003e\u003d0\u0026\u0026r.index\u003ct.length?r.distance\u003d0:r.index\u003d!1;else for(var n\u003d0;n\u003ct.length;n++){var i\u003de(t[n]);i\u003c\u003dr.distance\u0026\u0026(r.index\u003dn,r.distance\u003di)}return r},r.inbox\u003dfunction(t,e,r){return t*e\u003c0||0\u003d\u003d\u003dt?r:1/0},r.quadrature\u003dfunction(t,e){return function(r){var n\u003dt(r),i\u003de(r);return Math.sqrt(n*n+i*i)}},r.makeEventData\u003dfunction(t,e,n){var i\u003d\"index\"in t?t.index:t.pointNumber,a\u003d{data:e._input,fullData:e,curveNumber:e.index,pointNumber:i};if(e._indexToPoints){var o\u003de._indexToPoints[i];1\u003d\u003d\u003do.length?a.pointIndex\u003do[0]:a.pointIndices\u003do}else a.pointIndex\u003di;return e._module.eventData?a\u003de._module.eventData(a,t,e,n,i):(\"xVal\"in t?a.x\u003dt.xVal:\"x\"in t\u0026\u0026(a.x\u003dt.x),\"yVal\"in t?a.y\u003dt.yVal:\"y\"in t\u0026\u0026(a.y\u003dt.y),t.xa\u0026\u0026(a.xaxis\u003dt.xa),t.ya\u0026\u0026(a.yaxis\u003dt.ya),void 0!\u003d\u003dt.zLabelVal\u0026\u0026(a.z\u003dt.zLabelVal)),r.appendArrayPointValue(a,e,i),a},r.appendArrayPointValue\u003dfunction(t,e,r){var i\u003de._arrayAttrs;if(i)for(var s\u003d0;s\u003ci.length;s++){var l\u003di[s],c\u003da(l);if(void 0\u003d\u003d\u003dt[c]){var u\u003do(n.nestedProperty(e,l).get(),r);void 0!\u003d\u003du\u0026\u0026(t[c]\u003du)}}},r.appendArrayMultiPointValues\u003dfunction(t,e,r){var i\u003de._arrayAttrs;if(i)for(var s\u003d0;s\u003ci.length;s++){var l\u003di[s],c\u003da(l);if(void 0\u003d\u003d\u003dt[c]){for(var u\u003dn.nestedProperty(e,l).get(),f\u003dnew Array(r.length),h\u003d0;h\u003cr.length;h++)f[h]\u003do(u,r[h]);t[c]\u003df}}};var i\u003d{ids:\"id\",locations:\"location\",labels:\"label\",values:\"value\",\"marker.colors\":\"color\",parents:\"parent\"};function a(t){return i[t]||t}function o(t,e){return Array.isArray(e)?Array.isArray(t)\u0026\u0026Array.isArray(t[e[0]])?t[e[0]][e[1]]:void 0:t[e]}var s\u003d{x:!0,y:!0},l\u003d{\"x unified\":!0,\"y unified\":!0};r.isUnifiedHover\u003dfunction(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026!!l[t]},r.isXYhover\u003dfunction(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026!!s[t]}},{\"../../lib\":799}],699:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"tinycolor2\"),o\u003dt(\"../../lib\"),s\u003do.strTranslate,l\u003do.strRotate,c\u003dt(\"../../lib/events\"),u\u003dt(\"../../lib/svg_text_utils\"),f\u003dt(\"../../lib/override_cursor\"),h\u003dt(\"../drawing\"),p\u003dt(\"../color\"),d\u003dt(\"../dragelement\"),m\u003dt(\"../../plots/cartesian/axes\"),g\u003dt(\"../../registry\"),v\u003dt(\"./helpers\"),y\u003dt(\"./constants\"),x\u003dt(\"../legend/defaults\"),b\u003dt(\"../legend/draw\"),_\u003dy.YANGLE,w\u003dMath.PI*_/180,T\u003d1/Math.sin(w),k\u003dMath.cos(w),M\u003dMath.sin(w),A\u003dy.HOVERARROWSIZE,S\u003dy.HOVERTEXTPAD,E\u003d{box:!0,ohlc:!0,violin:!0,candlestick:!0};function L(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa,t.ya||\"\"].join(\",\")}r.hover\u003dfunction(t,e,r,a){t\u003do.getGraphDiv(t),o.throttle(t._fullLayout._uid+y.HOVERID,y.HOVERMINTIME,(function(){!function(t,e,r,a){r||(r\u003d\"xy\");var s\u003dArray.isArray(r)?r:[r],l\u003dt._fullLayout,u\u003dl._plots||[],h\u003du[r],m\u003dl._has(\"cartesian\");if(h){var y\u003dh.overlays.map((function(t){return t.id}));s\u003ds.concat(y)}for(var x\u003ds.length,b\u003dnew Array(x),_\u003dnew Array(x),w\u003d!1,k\u003d0;k\u003cx;k++){var M\u003ds[k];if(u[M])w\u003d!0,b[k]\u003du[M].xaxis,_[k]\u003du[M].yaxis;else{if(!l[M]||!l[M]._subplot)return void o.warn(\"Unrecognized subplot: \"+M);var A\u003dl[M]._subplot;b[k]\u003dA.xaxis,_[k]\u003dA.yaxis}}var S\u003de.hovermode||l.hovermode;S\u0026\u0026!w\u0026\u0026(S\u003d\"closest\");if(-1\u003d\u003d\u003d[\"x\",\"y\",\"closest\",\"x unified\",\"y unified\"].indexOf(S)||!t.calcdata||t.querySelector(\".zoombox\")||t._dragging)return d.unhoverRaw(t,e);var C\u003dl.hoverdistance;-1\u003d\u003d\u003dC\u0026\u0026(C\u003d1/0);var I\u003dl.spikedistance;-1\u003d\u003d\u003dI\u0026\u0026(I\u003d1/0);var F,N,j,U,V,q,H,G,Y,W,X,Z,J,K\u003d[],Q\u003d[],$\u003d{hLinePoint:null,vLinePoint:null},tt\u003d!1;if(Array.isArray(e))for(S\u003d\"array\",j\u003d0;j\u003ce.length;j++)(V\u003dt.calcdata[e[j].curveNumber||0])\u0026\u0026(q\u003dV[0].trace,\"skip\"!\u003d\u003dV[0].trace.hoverinfo\u0026\u0026(Q.push(V),\"h\"\u003d\u003d\u003dq.orientation\u0026\u0026(tt\u003d!0)));else{for(U\u003d0;U\u003ct.calcdata.length;U++)V\u003dt.calcdata[U],\"skip\"!\u003d\u003d(q\u003dV[0].trace).hoverinfo\u0026\u0026v.isTraceInSubplots(q,s)\u0026\u0026(Q.push(V),\"h\"\u003d\u003d\u003dq.orientation\u0026\u0026(tt\u003d!0));var et,rt;if(!e.target)et\u003d\"xpx\"in e?e.xpx:b[0]._length/2,rt\u003d\"ypx\"in e?e.ypx:_[0]._length/2;else{if(!1\u003d\u003d\u003dc.triggerHandler(t,\"plotly_beforehover\",e))return;var nt\u003de.composedPath\u0026\u0026e.composedPath()[0];nt||(nt\u003de.target);var it\u003dnt.getBoundingClientRect();et\u003de.clientX-it.left,rt\u003de.clientY-it.top,l._calcInverseTransform(t);var at\u003do.apply3DTransform(l._invTransform)(et,rt);if(et\u003dat[0],rt\u003dat[1],et\u003c0||et\u003eb[0]._length||rt\u003c0||rt\u003e_[0]._length)return d.unhoverRaw(t,e)}if(e.pointerX\u003det+b[0]._offset,e.pointerY\u003drt+_[0]._offset,F\u003d\"xval\"in e?v.flat(s,e.xval):v.p2c(b,et),N\u003d\"yval\"in e?v.flat(s,e.yval):v.p2c(_,rt),!i(F[0])||!i(N[0]))return o.warn(\"Fx.hover failed\",e,t),d.unhoverRaw(t,e)}var ot\u003d1/0;function st(t,r){for(U\u003d0;U\u003cQ.length;U++)if((V\u003dQ[U])\u0026\u0026V[0]\u0026\u0026V[0].trace\u0026\u0026!0\u003d\u003d\u003d(q\u003dV[0].trace).visible\u0026\u00260!\u003d\u003dq._length\u0026\u0026-1\u003d\u003d\u003d[\"carpet\",\"contourcarpet\"].indexOf(q._module.name)){if(\"splom\"\u003d\u003d\u003dq.type?H\u003ds[G\u003d0]:(H\u003dv.getSubplot(q),G\u003ds.indexOf(H)),Y\u003dS,v.isUnifiedHover(Y)\u0026\u0026(Y\u003dY.charAt(0)),Z\u003d{cd:V,trace:q,xa:b[G],ya:_[G],maxHoverDistance:C,maxSpikeDistance:I,index:!1,distance:Math.min(ot,C),spikeDistance:1/0,xSpike:void 0,ySpike:void 0,color:p.defaultLine,name:q.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},l[H]\u0026\u0026(Z.subplot\u003dl[H]._subplot),l._splomScenes\u0026\u0026l._splomScenes[q.uid]\u0026\u0026(Z.scene\u003dl._splomScenes[q.uid]),J\u003dK.length,\"array\"\u003d\u003d\u003dY){var n\u003de[U];\"pointNumber\"in n?(Z.index\u003dn.pointNumber,Y\u003d\"closest\"):(Y\u003d\"\",\"xval\"in n\u0026\u0026(W\u003dn.xval,Y\u003d\"x\"),\"yval\"in n\u0026\u0026(X\u003dn.yval,Y\u003dY?\"closest\":\"y\"))}else void 0!\u003d\u003dt\u0026\u0026void 0!\u003d\u003dr?(W\u003dt,X\u003dr):(W\u003dF[G],X\u003dN[G]);if(0!\u003d\u003dC)if(q._module\u0026\u0026q._module.hoverPoints){var a\u003dq._module.hoverPoints(Z,W,X,Y,{finiteRange:!0,hoverLayer:l._hoverlayer});if(a)for(var c,u\u003d0;u\u003ca.length;u++)c\u003da[u],i(c.x0)\u0026\u0026i(c.y0)\u0026\u0026K.push(z(c,S))}else o.log(\"Unrecognized trace type in hover:\",q);if(\"closest\"\u003d\u003d\u003dS\u0026\u0026K.length\u003eJ\u0026\u0026(K.splice(0,J),ot\u003dK[0].distance),m\u0026\u00260!\u003d\u003dI\u0026\u00260\u003d\u003d\u003dK.length){Z.distance\u003dI,Z.index\u003d!1;var f\u003dq._module.hoverPoints(Z,W,X,\"closest\",{hoverLayer:l._hoverlayer});if(f\u0026\u0026(f\u003df.filter((function(t){return t.spikeDistance\u003c\u003dI}))),f\u0026\u0026f.length){var h,d\u003df.filter((function(t){return t.xa.showspikes\u0026\u0026\"hovered data\"!\u003d\u003dt.xa.spikesnap}));if(d.length){var g\u003dd[0];i(g.x0)\u0026\u0026i(g.y0)\u0026\u0026(h\u003dct(g),(!$.vLinePoint||$.vLinePoint.spikeDistance\u003eh.spikeDistance)\u0026\u0026($.vLinePoint\u003dh))}var y\u003df.filter((function(t){return t.ya.showspikes\u0026\u0026\"hovered data\"!\u003d\u003dt.ya.spikesnap}));if(y.length){var x\u003dy[0];i(x.x0)\u0026\u0026i(x.y0)\u0026\u0026(h\u003dct(x),(!$.hLinePoint||$.hLinePoint.spikeDistance\u003eh.spikeDistance)\u0026\u0026($.hLinePoint\u003dh))}}}}}function lt(t,e){for(var r,n\u003dnull,i\u003d1/0,a\u003d0;a\u003ct.length;a++)(r\u003dt[a].spikeDistance)\u003c\u003di\u0026\u0026r\u003c\u003de\u0026\u0026(n\u003dt[a],i\u003dr);return n}function ct(t){return t?{xa:t.xa,ya:t.ya,x:void 0!\u003d\u003dt.xSpike?t.xSpike:(t.x0+t.x1)/2,y:void 0!\u003d\u003dt.ySpike?t.ySpike:(t.y0+t.y1)/2,distance:t.distance,spikeDistance:t.spikeDistance,curveNumber:t.trace.index,color:t.color,pointNumber:t.index}:null}st();var ut\u003d{fullLayout:l,container:l._hoverlayer,outerContainer:l._paperdiv,event:e},ft\u003dt._spikepoints,ht\u003d{vLinePoint:$.vLinePoint,hLinePoint:$.hLinePoint};if(t._spikepoints\u003dht,m\u0026\u00260!\u003d\u003dI\u0026\u00260!\u003d\u003dK.length){var pt\u003dlt(K.filter((function(t){return t.ya.showspikes})),I);$.hLinePoint\u003dct(pt);var dt\u003dlt(K.filter((function(t){return t.xa.showspikes})),I);$.vLinePoint\u003dct(dt)}if(0\u003d\u003d\u003dK.length){var mt\u003dd.unhoverRaw(t,e);return!m||null\u003d\u003d\u003d$.hLinePoint\u0026\u0026null\u003d\u003d\u003d$.vLinePoint||R(ft)\u0026\u0026D(t,$,ut),mt}m\u0026\u0026R(ft)\u0026\u0026D(t,$,ut);var gt\u003dfunction(){K.sort((function(t,e){return t.distance-e.distance})),K\u003dfunction(t,e){for(var r\u003de.charAt(0),n\u003d[],i\u003d[],a\u003d[],o\u003d0;o\u003ct.length;o++){var s\u003dt[o];g.traceIs(s.trace,\"bar-like\")||g.traceIs(s.trace,\"box-violin\")?a.push(s):s.trace[r+\"period\"]?i.push(s):n.push(s)}return n.concat(i).concat(a)}(K,S)};if(gt(),v.isXYhover(Y)\u0026\u00260!\u003d\u003dK[0].length\u0026\u0026\"splom\"!\u003d\u003dK[0].trace.type){var vt\u003dK[0],yt\u003d(K\u003dE[vt.trace.type]?K.filter((function(t){return t.trace.index\u003d\u003d\u003dvt.trace.index})):[vt]).length,xt\u003dB(\"x\",vt,l),bt\u003dB(\"y\",vt,l);st(xt,bt);var _t,wt\u003d[],Tt\u003d{},kt\u003d0,Mt\u003dfunction(t){var e\u003dE[t.trace.type]?L(t):t.trace.index;if(Tt[e]){var r\u003dTt[e]-1,n\u003dwt[r];r\u003e0\u0026\u0026Math.abs(t.distance)\u003cMath.abs(n.distance)\u0026\u0026(wt[r]\u003dt)}else kt++,Tt[e]\u003dkt,wt.push(t)};for(_t\u003d0;_t\u003cyt;_t++)Mt(K[_t]);for(_t\u003dK.length-1;_t\u003eyt-1;_t--)Mt(K[_t]);K\u003dwt,gt()}var At\u003dt._hoverdata,St\u003d[];for(j\u003d0;j\u003cK.length;j++){var Et\u003dK[j],Lt\u003dv.makeEventData(Et,Et.trace,Et.cd);if(!1!\u003d\u003dEt.hovertemplate){var Ct\u003d!1;Et.cd[Et.index]\u0026\u0026Et.cd[Et.index].ht\u0026\u0026(Ct\u003dEt.cd[Et.index].ht),Et.hovertemplate\u003dCt||Et.trace.hovertemplate||!1}Et.eventData\u003d[Lt],St.push(Lt)}t._hoverdata\u003dSt;var Pt\u003d\"y\"\u003d\u003d\u003dS\u0026\u0026(Q.length\u003e1||K.length\u003e1)||\"closest\"\u003d\u003d\u003dS\u0026\u0026tt\u0026\u0026K.length\u003e1,It\u003dp.combine(l.plot_bgcolor||p.background,l.paper_bgcolor),Ot\u003d{hovermode:S,rotateLabels:Pt,bgColor:It,container:l._hoverlayer,outerContainer:l._paperdiv,commonLabelOpts:l.hoverlabel,hoverdistance:l.hoverdistance},zt\u003dP(K,Ot,t);v.isUnifiedHover(S)||(!function(t,e,r){var n,i,a,o,s,l,c,u\u003d0,f\u003d1,h\u003dt.size(),p\u003dnew Array(h),d\u003d0;function m(t){var e\u003dt[0],r\u003dt[t.length-1];if(i\u003de.pmin-e.pos-e.dp+e.size,a\u003dr.pos+r.dp+r.size-e.pmax,i\u003e.01){for(s\u003dt.length-1;s\u003e\u003d0;s--)t[s].dp+\u003di;n\u003d!1}if(!(a\u003c.01)){if(i\u003c-.01){for(s\u003dt.length-1;s\u003e\u003d0;s--)t[s].dp-\u003da;n\u003d!1}if(n){var c\u003d0;for(o\u003d0;o\u003ct.length;o++)(l\u003dt[o]).pos+l.dp+l.size\u003ee.pmax\u0026\u0026c++;for(o\u003dt.length-1;o\u003e\u003d0\u0026\u0026!(c\u003c\u003d0);o--)(l\u003dt[o]).pos\u003ee.pmax-1\u0026\u0026(l.del\u003d!0,c--);for(o\u003d0;o\u003ct.length\u0026\u0026!(c\u003c\u003d0);o++)if((l\u003dt[o]).pos\u003ce.pmin+1)for(l.del\u003d!0,c--,a\u003d2*l.size,s\u003dt.length-1;s\u003e\u003d0;s--)t[s].dp-\u003da;for(o\u003dt.length-1;o\u003e\u003d0\u0026\u0026!(c\u003c\u003d0);o--)(l\u003dt[o]).pos+l.dp+l.size\u003ee.pmax\u0026\u0026(l.del\u003d!0,c--)}}}t.each((function(t){var n\u003dt[e],i\u003d\"x\"\u003d\u003d\u003dn._id.charAt(0),a\u003dn.range;0\u003d\u003d\u003dd\u0026\u0026a\u0026\u0026a[0]\u003ea[1]!\u003d\u003di\u0026\u0026(f\u003d-1),p[d++]\u003d[{datum:t,traceIndex:t.trace.index,dp:0,pos:t.pos,posref:t.posref,size:t.by*(i?T:1)/2,pmin:0,pmax:i?r.width:r.height}]})),p.sort((function(t,e){return t[0].posref-e[0].posref||f*(e[0].traceIndex-t[0].traceIndex)}));for(;!n\u0026\u0026u\u003c\u003dh;){for(u++,n\u003d!0,o\u003d0;o\u003cp.length-1;){var g\u003dp[o],v\u003dp[o+1],y\u003dg[g.length-1],x\u003dv[0];if((i\u003dy.pos+y.dp+y.size-x.pos-x.dp+x.size)\u003e.01\u0026\u0026y.pmin\u003d\u003d\u003dx.pmin\u0026\u0026y.pmax\u003d\u003d\u003dx.pmax){for(s\u003dv.length-1;s\u003e\u003d0;s--)v[s].dp+\u003di;for(g.push.apply(g,v),p.splice(o+1,1),c\u003d0,s\u003dg.length-1;s\u003e\u003d0;s--)c+\u003dg[s].dp;for(a\u003dc/g.length,s\u003dg.length-1;s\u003e\u003d0;s--)g[s].dp-\u003da;n\u003d!1}else o++}p.forEach(m)}for(o\u003dp.length-1;o\u003e\u003d0;o--){var b\u003dp[o];for(s\u003db.length-1;s\u003e\u003d0;s--){var _\u003db[s],w\u003d_.datum;w.offset\u003d_.dp,w.del\u003d_.del}}}(zt,Pt?\"xa\":\"ya\",l),O(zt,Pt,l._invScaleX,l._invScaleY));if(e.target\u0026\u0026e.target.tagName){var Dt\u003dg.getComponentMethod(\"annotations\",\"hasClickToShow\")(t,St);f(n.select(e.target),Dt?\"pointer\":\"\")}if(!e.target||a||!function(t,e,r){if(!r||r.length!\u003d\u003dt._hoverdata.length)return!0;for(var n\u003dr.length-1;n\u003e\u003d0;n--){var i\u003dr[n],a\u003dt._hoverdata[n];if(i.curveNumber!\u003d\u003da.curveNumber||String(i.pointNumber)!\u003d\u003dString(a.pointNumber)||String(i.pointNumbers)!\u003d\u003dString(a.pointNumbers))return!0}return!1}(t,0,At))return;At\u0026\u0026t.emit(\"plotly_unhover\",{event:e,points:At});t.emit(\"plotly_hover\",{event:e,points:t._hoverdata,xaxes:b,yaxes:_,xvals:F,yvals:N})}(t,e,r,a)}))},r.loneHover\u003dfunction(t,e){var r\u003d!0;Array.isArray(t)||(r\u003d!1,t\u003d[t]);var i\u003dt.map((function(t){return{color:t.color||p.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,nameLength:t.nameLength,textAlign:t.textAlign,trace:t.trace||{index:0,hoverinfo:\"\"},xa:{_offset:0},ya:{_offset:0},index:0,hovertemplate:t.hovertemplate||!1,eventData:t.eventData||!1,hovertemplateLabels:t.hovertemplateLabels||!1}})),a\u003dn.select(e.container),o\u003de.outerContainer?n.select(e.outerContainer):a,s\u003d{hovermode:\"closest\",rotateLabels:!1,bgColor:e.bgColor||p.background,container:a,outerContainer:o},l\u003dP(i,s,e.gd),c\u003d0,u\u003d0;l.sort((function(t,e){return t.y0-e.y0})).each((function(t,r){var n\u003dt.y0-t.by/2;t.offset\u003dn-5\u003cc?c-n+5:0,c\u003dn+t.by+t.offset,r\u003d\u003d\u003de.anchorIndex\u0026\u0026(u\u003dt.offset)})).each((function(t){t.offset-\u003du}));var f\u003de.gd._fullLayout._invScaleX,h\u003de.gd._fullLayout._invScaleY;return O(l,s.rotateLabels,f,h),r?l:l.node()};var C\u003d/\u003cextra\u003e([\\s\\S]*)\u003c\\/extra\u003e/;function P(t,e,r){var i\u003dr._fullLayout,a\u003de.hovermode,c\u003de.rotateLabels,f\u003de.bgColor,d\u003de.container,m\u003de.outerContainer,g\u003de.commonLabelOpts||{},w\u003de.fontFamily||y.HOVERFONT,T\u003de.fontSize||y.HOVERFONTSIZE,k\u003dt[0],M\u003dk.xa,E\u003dk.ya,C\u003da.charAt(0),P\u003dk[C+\"Label\"],O\u003dm.node().getBoundingClientRect(),z\u003dO.top,D\u003dO.width,R\u003dO.height,F\u003dvoid 0!\u003d\u003dP\u0026\u0026k.distance\u003c\u003de.hoverdistance\u0026\u0026(\"x\"\u003d\u003d\u003da||\"y\"\u003d\u003d\u003da);if(F){var B,N,j\u003d!0;for(B\u003d0;B\u003ct.length;B++)if(j\u0026\u0026void 0\u003d\u003d\u003dt[B].zLabel\u0026\u0026(j\u003d!1),N\u003dt[B].hoverinfo||t[B].trace.hoverinfo){var U\u003dArray.isArray(N)?N:N.split(\"+\");if(-1\u003d\u003d\u003dU.indexOf(\"all\")\u0026\u0026-1\u003d\u003d\u003dU.indexOf(a)){F\u003d!1;break}}j\u0026\u0026(F\u003d!1)}var V\u003dd.selectAll(\"g.axistext\").data(F?[0]:[]);if(V.enter().append(\"g\").classed(\"axistext\",!0),V.exit().remove(),V.each((function(){var t\u003dn.select(this),e\u003do.ensureSingle(t,\"path\",\"\",(function(t){t.style({\"stroke-width\":\"1px\"})})),l\u003do.ensureSingle(t,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),c\u003dg.bgcolor||p.defaultLine,f\u003dg.bordercolor||p.contrast(c),d\u003dp.contrast(c),m\u003d{family:g.font.family||w,size:g.font.size||T,color:g.font.color||d};e.style({fill:c,stroke:f}),l.text(P).call(h.font,m).call(u.positionText,0,0).call(u.convertToTspans,r),t.attr(\"transform\",\"\");var v,y,x\u003dl.node().getBoundingClientRect();if(\"x\"\u003d\u003d\u003da){var b\u003d\"top\"\u003d\u003d\u003dM.side?\"-\":\"\";l.attr(\"text-anchor\",\"middle\").call(u.positionText,0,\"top\"\u003d\u003d\u003dM.side?z-x.bottom-A-S:z-x.top+A+S),v\u003dM._offset+(k.x0+k.x1)/2,y\u003dE._offset+(\"top\"\u003d\u003d\u003dM.side?0:E._length);var _\u003dx.width/2+S;v\u003c_?(v\u003d_,e.attr(\"d\",\"M-\"+(_-A)+\",0L-\"+(_-2*A)+\",\"+b+A+\"H\"+(S+x.width/2)+\"v\"+b+(2*S+x.height)+\"H-\"+_+\"V\"+b+A+\"Z\")):v\u003ei.width-_?(v\u003di.width-_,e.attr(\"d\",\"M\"+(_-A)+\",0L\"+_+\",\"+b+A+\"v\"+b+(2*S+x.height)+\"H-\"+_+\"V\"+b+A+\"H\"+(_-2*A)+\"Z\")):e.attr(\"d\",\"M0,0L\"+A+\",\"+b+A+\"H\"+(S+x.width/2)+\"v\"+b+(2*S+x.height)+\"H-\"+(S+x.width/2)+\"V\"+b+A+\"H-\"+A+\"Z\")}else{var L,C,I;\"right\"\u003d\u003d\u003dE.side?(L\u003d\"start\",C\u003d1,I\u003d\"\",v\u003dM._offset+M._length):(L\u003d\"end\",C\u003d-1,I\u003d\"-\",v\u003dM._offset),y\u003dE._offset+(k.y0+k.y1)/2,l.attr(\"text-anchor\",L),e.attr(\"d\",\"M0,0L\"+I+A+\",\"+A+\"V\"+(S+x.height/2)+\"h\"+I+(2*S+x.width)+\"V-\"+(S+x.height/2)+\"H\"+I+A+\"V-\"+A+\"Z\");var O,D\u003dx.height/2,R\u003dz-x.top-D,F\u003d\"clip\"+i._uid+\"commonlabel\"+E._id;if(v\u003cx.width+2*S+A){O\u003d\"M-\"+(A+S)+\"-\"+D+\"h-\"+(x.width-S)+\"V\"+D+\"h\"+(x.width-S)+\"Z\";var B\u003dx.width-v+S;u.positionText(l,B,R),\"end\"\u003d\u003d\u003dL\u0026\u0026l.selectAll(\"tspan\").each((function(){var t\u003dn.select(this),e\u003dh.tester.append(\"text\").text(t.text()).call(h.font,m),r\u003de.node().getBoundingClientRect();Math.round(r.width)\u003cMath.round(x.width)\u0026\u0026t.attr(\"x\",B-r.width),e.remove()}))}else u.positionText(l,C*(S+A),R),O\u003dnull;var N\u003di._topclips.selectAll(\"#\"+F).data(O?[0]:[]);N.enter().append(\"clipPath\").attr(\"id\",F).append(\"path\"),N.exit().remove(),N.select(\"path\").attr(\"d\",O),h.setClipUrl(l,O?F:null,r)}t.attr(\"transform\",s(v,y))})),v.isUnifiedHover(a)){if(d.selectAll(\"g.hovertext\").remove(),0\u003d\u003d\u003dt.length)return;var q\u003d{showlegend:!0,legend:{title:{text:P,font:i.hoverlabel.font},font:i.hoverlabel.font,bgcolor:i.hoverlabel.bgcolor,bordercolor:i.hoverlabel.bordercolor,borderwidth:1,tracegroupgap:7,traceorder:i.legend?i.legend.traceorder:void 0,orientation:\"v\"}},H\u003d{};x(q,H,r._fullData);var G\u003dH.legend;G.entries\u003d[];for(var Y\u003d0;Y\u003ct.length;Y++){var W\u003dI(t[Y],!0,a,i,P),X\u003dW[0],Z\u003dW[1],J\u003dt[Y];J.name\u003dZ,J.text\u003d\"\"!\u003d\u003dZ?Z+\" : \"+X:X;var K\u003dJ.cd[J.index];K\u0026\u0026(K.mc\u0026\u0026(J.mc\u003dK.mc),K.mcc\u0026\u0026(J.mc\u003dK.mcc),K.mlc\u0026\u0026(J.mlc\u003dK.mlc),K.mlcc\u0026\u0026(J.mlc\u003dK.mlcc),K.mlw\u0026\u0026(J.mlw\u003dK.mlw),K.mrc\u0026\u0026(J.mrc\u003dK.mrc),K.dir\u0026\u0026(J.dir\u003dK.dir)),J._distinct\u003d!0,G.entries.push([J])}G.entries.sort((function(t,e){return t[0].trace.index-e[0].trace.index})),G.layer\u003dd,G._inHover\u003d!0,b(r,G);var Q\u003dt[0],$\u003d(Q.y0+Q.y1)/2,tt\u003d(Q.x0+Q.x1)/2,et\u003dd.select(\"g.legend\"),rt\u003det.node().getBoundingClientRect();tt+\u003dM._offset,$+\u003dE._offset-rt.height/2;var nt\u003drt.width+2*S;!(tt+nt\u003c\u003dD)\u0026\u0026tt-nt\u003e\u003d0?tt-\u003dnt:tt+\u003d2*S;var it\u003drt.height+2*S,at\u003d$+it\u003e\u003dR;return it\u003c\u003dR\u0026\u0026($\u003c\u003dz?$\u003dE._offset+2*S:at\u0026\u0026($\u003dR-it)),et.attr(\"transform\",s(tt,$)),et}var ot\u003dd.selectAll(\"g.hovertext\").data(t,(function(t){return L(t)}));return ot.enter().append(\"g\").classed(\"hovertext\",!0).each((function(){var t\u003dn.select(this);t.append(\"rect\").call(p.fill,p.addOpacity(f,.8)),t.append(\"text\").classed(\"name\",!0),t.append(\"path\").style(\"stroke-width\",\"1px\"),t.append(\"text\").classed(\"nums\",!0).call(h.font,w,T)})),ot.exit().remove(),ot.each((function(t){var e\u003dn.select(this).attr(\"transform\",\"\"),o\u003dt.color;Array.isArray(o)\u0026\u0026(o\u003do[t.eventData[0].pointNumber]);var d\u003dt.bgcolor||o,m\u003dp.combine(p.opacity(d)?d:p.defaultLine,f),g\u003dp.combine(p.opacity(o)?o:p.defaultLine,f),v\u003dt.borderColor||p.contrast(m),y\u003dI(t,F,a,i,P,e),x\u003dy[0],b\u003dy[1],k\u003de.select(\"text.nums\").call(h.font,t.fontFamily||w,t.fontSize||T,t.fontColor||v).text(x).attr(\"data-notex\",1).call(u.positionText,0,0).call(u.convertToTspans,r),M\u003de.select(\"text.name\"),E\u003d0,L\u003d0;if(b\u0026\u0026b!\u003d\u003dx){M.call(h.font,t.fontFamily||w,t.fontSize||T,g).text(b).attr(\"data-notex\",1).call(u.positionText,0,0).call(u.convertToTspans,r);var C\u003dM.node().getBoundingClientRect();E\u003dC.width+2*S,L\u003dC.height+2*S}else M.remove(),e.select(\"rect\").remove();e.select(\"path\").style({fill:m,stroke:v});var O,B,N\u003dk.node().getBoundingClientRect(),j\u003dt.xa._offset+(t.x0+t.x1)/2,U\u003dt.ya._offset+(t.y0+t.y1)/2,V\u003dMath.abs(t.x1-t.x0),q\u003dMath.abs(t.y1-t.y0),H\u003dN.width+A+S+E;if(t.ty0\u003dz-N.top,t.bx\u003dN.width+2*S,t.by\u003dMath.max(N.height+2*S,L),t.anchor\u003d\"start\",t.txwidth\u003dN.width,t.tx2width\u003dE,t.offset\u003d0,c)t.pos\u003dj,O\u003dU+q/2+H\u003c\u003dR,B\u003dU-q/2-H\u003e\u003d0,\"top\"!\u003d\u003dt.idealAlign\u0026\u0026O||!B?O?(U+\u003dq/2,t.anchor\u003d\"start\"):t.anchor\u003d\"middle\":(U-\u003dq/2,t.anchor\u003d\"end\");else if(t.pos\u003dU,O\u003dj+V/2+H\u003c\u003dD,B\u003dj-V/2-H\u003e\u003d0,\"left\"!\u003d\u003dt.idealAlign\u0026\u0026O||!B)if(O)j+\u003dV/2,t.anchor\u003d\"start\";else{t.anchor\u003d\"middle\";var G\u003dH/2,Y\u003dj+G-D,W\u003dj-G;Y\u003e0\u0026\u0026(j-\u003dY),W\u003c0\u0026\u0026(j+\u003d-W)}else j-\u003dV/2,t.anchor\u003d\"end\";k.attr(\"text-anchor\",t.anchor),E\u0026\u0026M.attr(\"text-anchor\",t.anchor),e.attr(\"transform\",s(j,U)+(c?l(_):\"\"))})),ot}function I(t,e,r,n,i,a){var s\u003d\"\",l\u003d\"\";void 0!\u003d\u003dt.nameOverride\u0026\u0026(t.name\u003dt.nameOverride),t.name\u0026\u0026(t.trace._meta\u0026\u0026(t.name\u003do.templateString(t.name,t.trace._meta)),s\u003dF(t.name,t.nameLength));var c\u003dr.charAt(0),u\u003d\"x\"\u003d\u003d\u003dc?\"y\":\"x\";void 0!\u003d\u003dt.zLabel?(void 0!\u003d\u003dt.xLabel\u0026\u0026(l+\u003d\"x: \"+t.xLabel+\"\u003cbr\u003e\"),void 0!\u003d\u003dt.yLabel\u0026\u0026(l+\u003d\"y: \"+t.yLabel+\"\u003cbr\u003e\"),\"choropleth\"!\u003d\u003dt.trace.type\u0026\u0026\"choroplethmapbox\"!\u003d\u003dt.trace.type\u0026\u0026(l+\u003d(l?\"z: \":\"\")+t.zLabel)):e\u0026\u0026t[c+\"Label\"]\u003d\u003d\u003di?l\u003dt[u+\"Label\"]||\"\":void 0\u003d\u003d\u003dt.xLabel?void 0!\u003d\u003dt.yLabel\u0026\u0026\"scattercarpet\"!\u003d\u003dt.trace.type\u0026\u0026(l\u003dt.yLabel):l\u003dvoid 0\u003d\u003d\u003dt.yLabel?t.xLabel:\"(\"+t.xLabel+\", \"+t.yLabel+\")\",!t.text\u0026\u00260!\u003d\u003dt.text||Array.isArray(t.text)||(l+\u003d(l?\"\u003cbr\u003e\":\"\")+t.text),void 0!\u003d\u003dt.extraText\u0026\u0026(l+\u003d(l?\"\u003cbr\u003e\":\"\")+t.extraText),a\u0026\u0026\"\"\u003d\u003d\u003dl\u0026\u0026!t.hovertemplate\u0026\u0026(\"\"\u003d\u003d\u003ds\u0026\u0026a.remove(),l\u003ds);var f\u003dt.hovertemplate||!1;if(f){var h\u003dt.hovertemplateLabels||t;t[c+\"Label\"]!\u003d\u003di\u0026\u0026(h[c+\"other\"]\u003dh[c+\"Val\"],h[c+\"otherLabel\"]\u003dh[c+\"Label\"]),l\u003d(l\u003do.hovertemplateString(f,h,n._d3locale,t.eventData[0]||{},t.trace._meta)).replace(C,(function(e,r){return s\u003dF(r,t.nameLength),\"\"}))}return[l,s]}function O(t,e,r,i){var a\u003dfunction(t){return t*r},o\u003dfunction(t){return t*i};t.each((function(t){var r\u003dn.select(this);if(t.del)return r.remove();var i\u003dr.select(\"text.nums\"),s\u003dt.anchor,l\u003d\"end\"\u003d\u003d\u003ds?-1:1,c\u003d{start:1,end:-1,middle:0}[s],f\u003dc*(A+S),p\u003df+c*(t.txwidth+S),d\u003d0,m\u003dt.offset,g\u003d\"middle\"\u003d\u003d\u003ds;g\u0026\u0026(f-\u003dt.tx2width/2,p+\u003dt.txwidth/2+S),e\u0026\u0026(m*\u003d-M,d\u003dt.offset*k),r.select(\"path\").attr(\"d\",g?\"M-\"+a(t.bx/2+t.tx2width/2)+\",\"+o(m-t.by/2)+\"h\"+a(t.bx)+\"v\"+o(t.by)+\"h-\"+a(t.bx)+\"Z\":\"M0,0L\"+a(l*A+d)+\",\"+o(A+m)+\"v\"+o(t.by/2-A)+\"h\"+a(l*t.bx)+\"v-\"+o(t.by)+\"H\"+a(l*A+d)+\"V\"+o(m-A)+\"Z\");var v\u003dd+f,y\u003dm+t.ty0-t.by/2+S,x\u003dt.textAlign||\"auto\";\"auto\"!\u003d\u003dx\u0026\u0026(\"left\"\u003d\u003d\u003dx\u0026\u0026\"start\"!\u003d\u003ds?(i.attr(\"text-anchor\",\"start\"),v\u003dg?-t.bx/2-t.tx2width/2+S:-t.bx-S):\"right\"\u003d\u003d\u003dx\u0026\u0026\"end\"!\u003d\u003ds\u0026\u0026(i.attr(\"text-anchor\",\"end\"),v\u003dg?t.bx/2-t.tx2width/2-S:t.bx+S)),i.call(u.positionText,a(v),o(y)),t.tx2width\u0026\u0026(r.select(\"text.name\").call(u.positionText,a(p+c*S+d),o(m+t.ty0-t.by/2+S)),r.select(\"rect\").call(h.setRect,a(p+(c-1)*t.tx2width/2+d),o(m-t.by/2-1),a(t.tx2width),o(t.by+2)))}))}function z(t,e){var r\u003dt.index,n\u003dt.trace||{},a\u003dt.cd[0],s\u003dt.cd[r]||{};function l(t){return t||i(t)\u0026\u00260\u003d\u003d\u003dt}var c\u003dArray.isArray(r)?function(t,e){var i\u003do.castOption(a,r,t);return l(i)?i:o.extractOption({},n,\"\",e)}:function(t,e){return o.extractOption(s,n,t,e)};function u(e,r,n){var i\u003dc(r,n);l(i)\u0026\u0026(t[e]\u003di)}if(u(\"hoverinfo\",\"hi\",\"hoverinfo\"),u(\"bgcolor\",\"hbg\",\"hoverlabel.bgcolor\"),u(\"borderColor\",\"hbc\",\"hoverlabel.bordercolor\"),u(\"fontFamily\",\"htf\",\"hoverlabel.font.family\"),u(\"fontSize\",\"hts\",\"hoverlabel.font.size\"),u(\"fontColor\",\"htc\",\"hoverlabel.font.color\"),u(\"nameLength\",\"hnl\",\"hoverlabel.namelength\"),u(\"textAlign\",\"hta\",\"hoverlabel.align\"),t.posref\u003d\"y\"\u003d\u003d\u003de||\"closest\"\u003d\u003d\u003de\u0026\u0026\"h\"\u003d\u003d\u003dn.orientation?t.xa._offset+(t.x0+t.x1)/2:t.ya._offset+(t.y0+t.y1)/2,t.x0\u003do.constrain(t.x0,0,t.xa._length),t.x1\u003do.constrain(t.x1,0,t.xa._length),t.y0\u003do.constrain(t.y0,0,t.ya._length),t.y1\u003do.constrain(t.y1,0,t.ya._length),void 0!\u003d\u003dt.xLabelVal\u0026\u0026(t.xLabel\u003d\"xLabel\"in t?t.xLabel:m.hoverLabelText(t.xa,t.xLabelVal,n.xhoverformat),t.xVal\u003dt.xa.c2d(t.xLabelVal)),void 0!\u003d\u003dt.yLabelVal\u0026\u0026(t.yLabel\u003d\"yLabel\"in t?t.yLabel:m.hoverLabelText(t.ya,t.yLabelVal,n.yhoverformat),t.yVal\u003dt.ya.c2d(t.yLabelVal)),void 0!\u003d\u003dt.zLabelVal\u0026\u0026void 0\u003d\u003d\u003dt.zLabel\u0026\u0026(t.zLabel\u003dString(t.zLabelVal)),!(isNaN(t.xerr)||\"log\"\u003d\u003d\u003dt.xa.type\u0026\u0026t.xerr\u003c\u003d0)){var f\u003dm.tickText(t.xa,t.xa.c2l(t.xerr),\"hover\").text;void 0!\u003d\u003dt.xerrneg?t.xLabel+\u003d\" +\"+f+\" / -\"+m.tickText(t.xa,t.xa.c2l(t.xerrneg),\"hover\").text:t.xLabel+\u003d\" \\xb1 \"+f,\"x\"\u003d\u003d\u003de\u0026\u0026(t.distance+\u003d1)}if(!(isNaN(t.yerr)||\"log\"\u003d\u003d\u003dt.ya.type\u0026\u0026t.yerr\u003c\u003d0)){var h\u003dm.tickText(t.ya,t.ya.c2l(t.yerr),\"hover\").text;void 0!\u003d\u003dt.yerrneg?t.yLabel+\u003d\" +\"+h+\" / -\"+m.tickText(t.ya,t.ya.c2l(t.yerrneg),\"hover\").text:t.yLabel+\u003d\" \\xb1 \"+h,\"y\"\u003d\u003d\u003de\u0026\u0026(t.distance+\u003d1)}var p\u003dt.hoverinfo||t.trace.hoverinfo;return p\u0026\u0026\"all\"!\u003d\u003dp\u0026\u0026(-1\u003d\u003d\u003d(p\u003dArray.isArray(p)?p:p.split(\"+\")).indexOf(\"x\")\u0026\u0026(t.xLabel\u003dvoid 0),-1\u003d\u003d\u003dp.indexOf(\"y\")\u0026\u0026(t.yLabel\u003dvoid 0),-1\u003d\u003d\u003dp.indexOf(\"z\")\u0026\u0026(t.zLabel\u003dvoid 0),-1\u003d\u003d\u003dp.indexOf(\"text\")\u0026\u0026(t.text\u003dvoid 0),-1\u003d\u003d\u003dp.indexOf(\"name\")\u0026\u0026(t.name\u003dvoid 0)),t}function D(t,e,r){var n,i,o\u003dr.container,s\u003dr.fullLayout,l\u003ds._size,c\u003dr.event,u\u003d!!e.hLinePoint,f\u003d!!e.vLinePoint;if(o.selectAll(\".spikeline\").remove(),f||u){var d\u003dp.combine(s.plot_bgcolor,s.paper_bgcolor);if(u){var g,v,y\u003de.hLinePoint;n\u003dy\u0026\u0026y.xa,\"cursor\"\u003d\u003d\u003d(i\u003dy\u0026\u0026y.ya).spikesnap?(g\u003dc.pointerX,v\u003dc.pointerY):(g\u003dn._offset+y.x,v\u003di._offset+y.y);var x,b,_\u003da.readability(y.color,d)\u003c1.5?p.contrast(d):y.color,w\u003di.spikemode,T\u003di.spikethickness,k\u003di.spikecolor||_,M\u003dm.getPxPosition(t,i);if(-1!\u003d\u003dw.indexOf(\"toaxis\")||-1!\u003d\u003dw.indexOf(\"across\")){if(-1!\u003d\u003dw.indexOf(\"toaxis\")\u0026\u0026(x\u003dM,b\u003dg),-1!\u003d\u003dw.indexOf(\"across\")){var A\u003di._counterDomainMin,S\u003di._counterDomainMax;\"free\"\u003d\u003d\u003di.anchor\u0026\u0026(A\u003dMath.min(A,i.position),S\u003dMath.max(S,i.position)),x\u003dl.l+A*l.w,b\u003dl.l+S*l.w}o.insert(\"line\",\":first-child\").attr({x1:x,x2:b,y1:v,y2:v,\"stroke-width\":T,stroke:k,\"stroke-dasharray\":h.dashStyle(i.spikedash,T)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:x,x2:b,y1:v,y2:v,\"stroke-width\":T+2,stroke:d}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!\u003d\u003dw.indexOf(\"marker\")\u0026\u0026o.insert(\"circle\",\":first-child\").attr({cx:M+(\"right\"!\u003d\u003di.side?T:-T),cy:v,r:T,fill:k}).classed(\"spikeline\",!0)}if(f){var E,L,C\u003de.vLinePoint;n\u003dC\u0026\u0026C.xa,i\u003dC\u0026\u0026C.ya,\"cursor\"\u003d\u003d\u003dn.spikesnap?(E\u003dc.pointerX,L\u003dc.pointerY):(E\u003dn._offset+C.x,L\u003di._offset+C.y);var P,I,O\u003da.readability(C.color,d)\u003c1.5?p.contrast(d):C.color,z\u003dn.spikemode,D\u003dn.spikethickness,R\u003dn.spikecolor||O,F\u003dm.getPxPosition(t,n);if(-1!\u003d\u003dz.indexOf(\"toaxis\")||-1!\u003d\u003dz.indexOf(\"across\")){if(-1!\u003d\u003dz.indexOf(\"toaxis\")\u0026\u0026(P\u003dF,I\u003dL),-1!\u003d\u003dz.indexOf(\"across\")){var B\u003dn._counterDomainMin,N\u003dn._counterDomainMax;\"free\"\u003d\u003d\u003dn.anchor\u0026\u0026(B\u003dMath.min(B,n.position),N\u003dMath.max(N,n.position)),P\u003dl.t+(1-N)*l.h,I\u003dl.t+(1-B)*l.h}o.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:P,y2:I,\"stroke-width\":D,stroke:R,\"stroke-dasharray\":h.dashStyle(n.spikedash,D)}).classed(\"spikeline\",!0).classed(\"crisp\",!0),o.insert(\"line\",\":first-child\").attr({x1:E,x2:E,y1:P,y2:I,\"stroke-width\":D+2,stroke:d}).classed(\"spikeline\",!0).classed(\"crisp\",!0)}-1!\u003d\u003dz.indexOf(\"marker\")\u0026\u0026o.insert(\"circle\",\":first-child\").attr({cx:E,cy:F-(\"top\"!\u003d\u003dn.side?D:-D),r:D,fill:R}).classed(\"spikeline\",!0)}}}function R(t,e){return!e||(e.vLinePoint!\u003d\u003dt._spikepoints.vLinePoint||e.hLinePoint!\u003d\u003dt._spikepoints.hLinePoint)}function F(t,e){return u.plainText(t||\"\",{len:e,allowedTags:[\"br\",\"sub\",\"sup\",\"b\",\"i\",\"em\"]})}function B(t,e,r){var n\u003de[t+\"a\"],i\u003de[t+\"Val\"];\"category\"\u003d\u003d\u003dn.type?i\u003dn._categoriesMap[i]:\"date\"\u003d\u003d\u003dn.type\u0026\u0026(i\u003dn.d2c(i));var a\u003de.cd[e.index];return a\u0026\u0026a.t\u0026\u0026a.t.posLetter\u003d\u003d\u003dn._id\u0026\u0026(\"group\"!\u003d\u003dr.boxmode\u0026\u0026\"group\"!\u003d\u003dr.violinmode||(i+\u003da.t.dPos)),i}},{\"../../lib\":799,\"../../lib/events\":788,\"../../lib/override_cursor\":810,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"../color\":662,\"../dragelement\":681,\"../drawing\":684,\"../legend/defaults\":714,\"../legend/draw\":715,\"./constants\":696,\"./helpers\":698,\"@plotly/d3\":58,\"fast-isnumeric\":245,tinycolor2:594}],700:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../color\"),a\u003dt(\"./helpers\").isUnifiedHover;e.exports\u003dfunction(t,e,r,o){function s(t){o.font[t]||(o.font[t]\u003de.legend?e.legend.font[t]:e.font[t])}o\u003do||{},e\u0026\u0026a(e.hovermode)\u0026\u0026(o.font||(o.font\u003d{}),s(\"size\"),s(\"family\"),s(\"color\"),e.legend?(o.bgcolor||(o.bgcolor\u003di.combine(e.legend.bgcolor,e.paper_bgcolor)),o.bordercolor||(o.bordercolor\u003de.legend.bordercolor)):o.bgcolor||(o.bgcolor\u003de.paper_bgcolor)),r(\"hoverlabel.bgcolor\",o.bgcolor),r(\"hoverlabel.bordercolor\",o.bordercolor),r(\"hoverlabel.namelength\",o.namelength),n.coerceFont(r,\"hoverlabel.font\",o.font),r(\"hoverlabel.align\",o.align)}},{\"../../lib\":799,\"../color\":662,\"./helpers\":698}],701:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e){function r(r,a){return void 0!\u003d\u003de[r]?e[r]:n.coerce(t,e,i,r,a)}return r(\"clickmode\"),r(\"hovermode\")}},{\"../../lib\":799,\"./layout_attributes\":703}],702:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../dragelement\"),o\u003dt(\"./helpers\"),s\u003dt(\"./layout_attributes\"),l\u003dt(\"./hover\");e.exports\u003d{moduleType:\"component\",name:\"fx\",constants:t(\"./constants\"),schema:{layout:s},attributes:t(\"./attributes\"),layoutAttributes:s,supplyLayoutGlobalDefaults:t(\"./layout_global_defaults\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),getDistanceFunction:o.getDistanceFunction,getClosest:o.getClosest,inbox:o.inbox,quadrature:o.quadrature,appendArrayPointValue:o.appendArrayPointValue,castHoverOption:function(t,e,r){return i.castOption(t,e,\"hoverlabel.\"+r)},castHoverinfo:function(t,e,r){return i.castOption(t,r,\"hoverinfo\",(function(r){return i.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)}))},hover:l.hover,unhover:a.unhover,loneHover:l.loneHover,loneUnhover:function(t){var e\u003di.isD3Selection(t)?t:n.select(t);e.selectAll(\"g.hovertext\").remove(),e.selectAll(\".spikeline\").remove()},click:t(\"./click\")}},{\"../../lib\":799,\"../dragelement\":681,\"./attributes\":693,\"./calc\":694,\"./click\":695,\"./constants\":696,\"./defaults\":697,\"./helpers\":698,\"./hover\":699,\"./layout_attributes\":703,\"./layout_defaults\":704,\"./layout_global_defaults\":705,\"@plotly/d3\":58}],703:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\"),i\u003dt(\"../../plots/font_attributes\")({editType:\"none\"});i.family.dflt\u003dn.HOVERFONT,i.size.dflt\u003dn.HOVERFONTSIZE,e.exports\u003d{clickmode:{valType:\"flaglist\",flags:[\"event\",\"select\"],dflt:\"event\",editType:\"plot\",extras:[\"none\"]},dragmode:{valType:\"enumerated\",values:[\"zoom\",\"pan\",\"select\",\"lasso\",\"drawclosedpath\",\"drawopenpath\",\"drawline\",\"drawrect\",\"drawcircle\",\"orbit\",\"turntable\",!1],dflt:\"zoom\",editType:\"modebar\"},hovermode:{valType:\"enumerated\",values:[\"x\",\"y\",\"closest\",!1,\"x unified\",\"y unified\"],dflt:\"closest\",editType:\"modebar\"},hoverdistance:{valType:\"integer\",min:-1,dflt:20,editType:\"none\"},spikedistance:{valType:\"integer\",min:-1,dflt:-1,editType:\"none\"},hoverlabel:{bgcolor:{valType:\"color\",editType:\"none\"},bordercolor:{valType:\"color\",editType:\"none\"},font:i,align:{valType:\"enumerated\",values:[\"left\",\"right\",\"auto\"],dflt:\"auto\",editType:\"none\"},namelength:{valType:\"integer\",min:-1,dflt:15,editType:\"none\"},editType:\"none\"},selectdirection:{valType:\"enumerated\",values:[\"h\",\"v\",\"d\",\"any\"],dflt:\"any\",editType:\"none\"}}},{\"../../plots/font_attributes\":878,\"./constants\":696}],704:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\"),a\u003dt(\"./hovermode_defaults\"),o\u003dt(\"./hoverlabel_defaults\");e.exports\u003dfunction(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}a(t,e)\u0026\u0026(r(\"hoverdistance\"),r(\"spikedistance\")),\"select\"\u003d\u003d\u003dr(\"dragmode\")\u0026\u0026r(\"selectdirection\");var s\u003de._has(\"mapbox\"),l\u003de._has(\"geo\"),c\u003de._basePlotModules.length;\"zoom\"\u003d\u003d\u003de.dragmode\u0026\u0026((s||l)\u0026\u00261\u003d\u003d\u003dc||s\u0026\u0026l\u0026\u00262\u003d\u003d\u003dc)\u0026\u0026(e.dragmode\u003d\"pan\"),o(t,e,r)}},{\"../../lib\":799,\"./hoverlabel_defaults\":700,\"./hovermode_defaults\":701,\"./layout_attributes\":703}],705:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./hoverlabel_defaults\"),a\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e){i(t,e,(function(r,i){return n.coerce(t,e,a,r,i)}))}},{\"../../lib\":799,\"./hoverlabel_defaults\":700,\"./layout_attributes\":703}],706:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../lib/regex\").counter,a\u003dt(\"../../plots/domain\").attributes,o\u003dt(\"../../plots/cartesian/constants\").idRegex,s\u003dt(\"../../plot_api/plot_template\"),l\u003d{rows:{valType:\"integer\",min:1,editType:\"plot\"},roworder:{valType:\"enumerated\",values:[\"top to bottom\",\"bottom to top\"],dflt:\"top to bottom\",editType:\"plot\"},columns:{valType:\"integer\",min:1,editType:\"plot\"},subplots:{valType:\"info_array\",freeLength:!0,dimensions:2,items:{valType:\"enumerated\",values:[i(\"xy\").toString(),\"\"],editType:\"plot\"},editType:\"plot\"},xaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.x.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},yaxes:{valType:\"info_array\",freeLength:!0,items:{valType:\"enumerated\",values:[o.y.toString(),\"\"],editType:\"plot\"},editType:\"plot\"},pattern:{valType:\"enumerated\",values:[\"independent\",\"coupled\"],dflt:\"coupled\",editType:\"plot\"},xgap:{valType:\"number\",min:0,max:1,editType:\"plot\"},ygap:{valType:\"number\",min:0,max:1,editType:\"plot\"},domain:a({name:\"grid\",editType:\"plot\",noGridCell:!0},{}),xside:{valType:\"enumerated\",values:[\"bottom\",\"bottom plot\",\"top plot\",\"top\"],dflt:\"bottom plot\",editType:\"plot\"},yside:{valType:\"enumerated\",values:[\"left\",\"left plot\",\"right plot\",\"right\"],dflt:\"left plot\",editType:\"plot\"},editType:\"plot\"};function c(t,e,r){var n\u003de[r+\"axes\"],i\u003dObject.keys((t._splomAxes||{})[r]||{});return Array.isArray(n)?n:i.length?i:void 0}function u(t,e,r,n,i,a){var o\u003de(t+\"gap\",r),s\u003de(\"domain.\"+t);e(t+\"side\",n);for(var l\u003dnew Array(i),c\u003ds[0],u\u003d(s[1]-c)/(i-o),f\u003du*(1-o),h\u003d0;h\u003ci;h++){var p\u003dc+u*h;l[a?i-1-h:h]\u003d[p,p+f]}return l}function f(t,e,r,n,i){var a,o\u003dnew Array(r);function s(t,r){-1!\u003d\u003de.indexOf(r)\u0026\u0026void 0\u003d\u003d\u003dn[r]?(o[t]\u003dr,n[r]\u003dt):o[t]\u003d\"\"}if(Array.isArray(t))for(a\u003d0;a\u003cr;a++)s(a,t[a]);else for(s(0,i),a\u003d1;a\u003cr;a++)s(a,i+(a+1));return o}e.exports\u003d{moduleType:\"component\",name:\"grid\",schema:{layout:{grid:l}},layoutAttributes:l,sizeDefaults:function(t,e){var r\u003dt.grid||{},i\u003dc(e,r,\"x\"),a\u003dc(e,r,\"y\");if(t.grid||i||a){var o,f,h\u003dArray.isArray(r.subplots)\u0026\u0026Array.isArray(r.subplots[0]),p\u003dArray.isArray(i),d\u003dArray.isArray(a),m\u003dp\u0026\u0026i!\u003d\u003dr.xaxes\u0026\u0026d\u0026\u0026a!\u003d\u003dr.yaxes;h?(o\u003dr.subplots.length,f\u003dr.subplots[0].length):(d\u0026\u0026(o\u003da.length),p\u0026\u0026(f\u003di.length));var g\u003ds.newContainer(e,\"grid\"),v\u003dk(\"rows\",o),y\u003dk(\"columns\",f);if(v*y\u003e1){if(!h\u0026\u0026!p\u0026\u0026!d)\"independent\"\u003d\u003d\u003dk(\"pattern\")\u0026\u0026(h\u003d!0);g._hasSubplotGrid\u003dh;var x,b,_\u003d\"top to bottom\"\u003d\u003d\u003dk(\"roworder\"),w\u003dh?.2:.1,T\u003dh?.3:.1;m\u0026\u0026e._splomGridDflt\u0026\u0026(x\u003de._splomGridDflt.xside,b\u003de._splomGridDflt.yside),g._domains\u003d{x:u(\"x\",k,w,x,y),y:u(\"y\",k,T,b,v,_)}}else delete e.grid}function k(t,e){return n.coerce(r,g,l,t,e)}},contentDefaults:function(t,e){var r\u003de.grid;if(r\u0026\u0026r._domains){var n,i,a,o,s,l,u,h\u003dt.grid||{},p\u003de._subplots,d\u003dr._hasSubplotGrid,m\u003dr.rows,g\u003dr.columns,v\u003d\"independent\"\u003d\u003d\u003dr.pattern,y\u003dr._axisMap\u003d{};if(d){var x\u003dh.subplots||[];l\u003dr.subplots\u003dnew Array(m);var b\u003d1;for(n\u003d0;n\u003cm;n++){var _\u003dl[n]\u003dnew Array(g),w\u003dx[n]||[];for(i\u003d0;i\u003cg;i++)if(v?(s\u003d1\u003d\u003d\u003db?\"xy\":\"x\"+b+\"y\"+b,b++):s\u003dw[i],_[i]\u003d\"\",-1!\u003d\u003dp.cartesian.indexOf(s)){if(u\u003ds.indexOf(\"y\"),a\u003ds.slice(0,u),o\u003ds.slice(u),void 0!\u003d\u003dy[a]\u0026\u0026y[a]!\u003d\u003di||void 0!\u003d\u003dy[o]\u0026\u0026y[o]!\u003d\u003dn)continue;_[i]\u003ds,y[a]\u003di,y[o]\u003dn}}}else{var T\u003dc(e,h,\"x\"),k\u003dc(e,h,\"y\");r.xaxes\u003df(T,p.xaxis,g,y,\"x\"),r.yaxes\u003df(k,p.yaxis,m,y,\"y\")}var M\u003dr._anchors\u003d{},A\u003d\"top to bottom\"\u003d\u003d\u003dr.roworder;for(var S in y){var E,L,C,P\u003dS.charAt(0),I\u003dr[P+\"side\"];if(I.length\u003c8)M[S]\u003d\"free\";else if(\"x\"\u003d\u003d\u003dP){if(\"t\"\u003d\u003d\u003dI.charAt(0)\u003d\u003d\u003dA?(E\u003d0,L\u003d1,C\u003dm):(E\u003dm-1,L\u003d-1,C\u003d-1),d){var O\u003dy[S];for(n\u003dE;n!\u003d\u003dC;n+\u003dL)if((s\u003dl[n][O])\u0026\u0026(u\u003ds.indexOf(\"y\"),s.slice(0,u)\u003d\u003d\u003dS)){M[S]\u003ds.slice(u);break}}else for(n\u003dE;n!\u003d\u003dC;n+\u003dL)if(o\u003dr.yaxes[n],-1!\u003d\u003dp.cartesian.indexOf(S+o)){M[S]\u003do;break}}else if(\"l\"\u003d\u003d\u003dI.charAt(0)?(E\u003d0,L\u003d1,C\u003dg):(E\u003dg-1,L\u003d-1,C\u003d-1),d){var z\u003dy[S];for(n\u003dE;n!\u003d\u003dC;n+\u003dL)if((s\u003dl[z][n])\u0026\u0026(u\u003ds.indexOf(\"y\"),s.slice(u)\u003d\u003d\u003dS)){M[S]\u003ds.slice(0,u);break}}else for(n\u003dE;n!\u003d\u003dC;n+\u003dL)if(a\u003dr.xaxes[n],-1!\u003d\u003dp.cartesian.indexOf(a+S)){M[S]\u003da;break}}}}}},{\"../../lib\":799,\"../../lib/regex\":816,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/constants\":856,\"../../plots/domain\":877}],707:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/constants\"),i\u003dt(\"../../plot_api/plot_template\").templatedArray;t(\"../../constants/axis_placeable_objects\");e.exports\u003di(\"image\",{visible:{valType:\"boolean\",dflt:!0,editType:\"arraydraw\"},source:{valType:\"string\",editType:\"arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"arraydraw\"},sizex:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizey:{valType:\"number\",dflt:0,editType:\"arraydraw\"},sizing:{valType:\"enumerated\",values:[\"fill\",\"contain\",\"stretch\"],dflt:\"contain\",editType:\"arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},x:{valType:\"any\",dflt:0,editType:\"arraydraw\"},y:{valType:\"any\",dflt:0,editType:\"arraydraw\"},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"arraydraw\"},yanchor:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"top\",editType:\"arraydraw\"},xref:{valType:\"enumerated\",values:[\"paper\",n.idRegex.x.toString()],dflt:\"paper\",editType:\"arraydraw\"},yref:{valType:\"enumerated\",values:[\"paper\",n.idRegex.y.toString()],dflt:\"paper\",editType:\"arraydraw\"},editType:\"arraydraw\"})},{\"../../constants/axis_placeable_objects\":768,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/constants\":856}],708:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib/to_log_range\");e.exports\u003dfunction(t,e,r,a){e\u003de||{};var o\u003d\"log\"\u003d\u003d\u003dr\u0026\u0026\"linear\"\u003d\u003d\u003de.type,s\u003d\"linear\"\u003d\u003d\u003dr\u0026\u0026\"log\"\u003d\u003d\u003de.type;if(o||s)for(var l,c,u\u003dt._fullLayout.images,f\u003de._id.charAt(0),h\u003d0;h\u003cu.length;h++)if(c\u003d\"images[\"+h+\"].\",(l\u003du[h])[f+\"ref\"]\u003d\u003d\u003de._id){var p\u003dl[f],d\u003dl[\"size\"+f],m\u003dnull,g\u003dnull;if(o){m\u003di(p,e.range);var v\u003dd/Math.pow(10,m)/2;g\u003d2*Math.log(v+Math.sqrt(1+v*v))/Math.LN10}else g\u003d(m\u003dMath.pow(10,p))*(Math.pow(10,d/2)-Math.pow(10,-d/2));n(m)?n(g)||(g\u003dnull):(m\u003dnull,g\u003dnull),a(c+f,m),a(c+\"size\"+f,g)}}},{\"../../lib/to_log_range\":826,\"fast-isnumeric\":245}],709:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../plots/array_container_defaults\"),o\u003dt(\"./attributes\");function s(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}var s\u003da(\"source\");if(!a(\"visible\",!!s))return e;a(\"layer\"),a(\"xanchor\"),a(\"yanchor\"),a(\"sizex\"),a(\"sizey\"),a(\"sizing\"),a(\"opacity\");for(var l\u003d{_fullLayout:r},c\u003d[\"x\",\"y\"],u\u003d0;u\u003c2;u++){var f\u003dc[u],h\u003di.coerceRef(t,e,l,f,\"paper\",void 0);if(\"paper\"!\u003d\u003dh)i.getFromId(l,h)._imgIndices.push(e._index);i.coercePosition(e,l,a,h,f,0)}return e}e.exports\u003dfunction(t,e){a(t,e,{name:\"images\",handleItemDefaults:s})}},{\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"../../plots/cartesian/axes\":849,\"./attributes\":707}],710:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../drawing\"),a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../../plots/cartesian/axis_ids\"),s\u003dt(\"../../constants/xmlns_namespaces\");e.exports\u003dfunction(t){var e,r,l\u003dt._fullLayout,c\u003d[],u\u003d{},f\u003d[];for(r\u003d0;r\u003cl.images.length;r++){var h\u003dl.images[r];if(h.visible)if(\"below\"\u003d\u003d\u003dh.layer\u0026\u0026\"paper\"!\u003d\u003dh.xref\u0026\u0026\"paper\"!\u003d\u003dh.yref){e\u003do.ref2id(h.xref)+o.ref2id(h.yref);var p\u003dl._plots[e];if(!p){f.push(h);continue}p.mainplot\u0026\u0026(e\u003dp.mainplot.id),u[e]||(u[e]\u003d[]),u[e].push(h)}else\"above\"\u003d\u003d\u003dh.layer?c.push(h):f.push(h)}var d\u003d{left:{sizing:\"xMin\",offset:0},center:{sizing:\"xMid\",offset:-.5},right:{sizing:\"xMax\",offset:-1}},m\u003d{top:{sizing:\"YMin\",offset:0},middle:{sizing:\"YMid\",offset:-.5},bottom:{sizing:\"YMax\",offset:-1}};function g(e){var r\u003dn.select(this);if(this._imgSrc!\u003d\u003de.source)if(r.attr(\"xmlns\",s.svg),e.source\u0026\u0026\"data:\"\u003d\u003d\u003de.source.slice(0,5))r.attr(\"xlink:href\",e.source),this._imgSrc\u003de.source;else{var i\u003dnew Promise(function(t){var n\u003dnew Image;function i(){r.remove(),t()}this.img\u003dn,n.setAttribute(\"crossOrigin\",\"anonymous\"),n.onerror\u003di,n.onload\u003dfunction(){var e\u003ddocument.createElement(\"canvas\");e.width\u003dthis.width,e.height\u003dthis.height,e.getContext(\"2d\").drawImage(this,0,0);var n\u003de.toDataURL(\"image/png\");r.attr(\"xlink:href\",n),t()},r.on(\"error\",i),n.src\u003de.source,this._imgSrc\u003de.source}.bind(this));t._promises.push(i)}}function v(e){var r,o,s\u003dn.select(this),c\u003da.getFromId(t,e.xref),u\u003da.getFromId(t,e.yref),f\u003d\"domain\"\u003d\u003d\u003da.getRefType(e.xref),h\u003d\"domain\"\u003d\u003d\u003da.getRefType(e.yref),p\u003dl._size;r\u003dvoid 0!\u003d\u003dc?\"string\"\u003d\u003dtypeof e.xref\u0026\u0026f?c._length*e.sizex:Math.abs(c.l2p(e.sizex)-c.l2p(0)):e.sizex*p.w,o\u003dvoid 0!\u003d\u003du?\"string\"\u003d\u003dtypeof e.yref\u0026\u0026h?u._length*e.sizey:Math.abs(u.l2p(e.sizey)-u.l2p(0)):e.sizey*p.h;var g,v,y\u003dr*d[e.xanchor].offset,x\u003do*m[e.yanchor].offset,b\u003dd[e.xanchor].sizing+m[e.yanchor].sizing;switch(g\u003dvoid 0!\u003d\u003dc?\"string\"\u003d\u003dtypeof e.xref\u0026\u0026f?c._length*e.x+c._offset:c.r2p(e.x)+c._offset:e.x*p.w+p.l,g+\u003dy,v\u003dvoid 0!\u003d\u003du?\"string\"\u003d\u003dtypeof e.yref\u0026\u0026h?u._length*(1-e.y)+u._offset:u.r2p(e.y)+u._offset:p.h-e.y*p.h+p.t,v+\u003dx,e.sizing){case\"fill\":b+\u003d\" slice\";break;case\"stretch\":b\u003d\"none\"}s.attr({x:g,y:v,width:r,height:o,preserveAspectRatio:b,opacity:e.opacity});var _\u003d(c\u0026\u0026\"domain\"!\u003d\u003da.getRefType(e.xref)?c._id:\"\")+(u\u0026\u0026\"domain\"!\u003d\u003da.getRefType(e.yref)?u._id:\"\");i.setClipUrl(s,_?\"clip\"+l._uid+_:null,t)}var y\u003dl._imageLowerLayer.selectAll(\"image\").data(f),x\u003dl._imageUpperLayer.selectAll(\"image\").data(c);y.enter().append(\"image\"),x.enter().append(\"image\"),y.exit().remove(),x.exit().remove(),y.each((function(t){g.bind(this)(t),v.bind(this)(t)})),x.each((function(t){g.bind(this)(t),v.bind(this)(t)}));var b\u003dObject.keys(l._plots);for(r\u003d0;r\u003cb.length;r++){e\u003db[r];var _\u003dl._plots[e];if(_.imagelayer){var w\u003d_.imagelayer.selectAll(\"image\").data(u[e]||[]);w.enter().append(\"image\"),w.exit().remove(),w.each((function(t){g.bind(this)(t),v.bind(this)(t)}))}}}},{\"../../constants/xmlns_namespaces\":776,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/axis_ids\":853,\"../drawing\":684,\"@plotly/d3\":58}],711:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"component\",name:\"images\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),includeBasePlot:t(\"../../plots/cartesian/include_components\")(\"images\"),draw:t(\"./draw\"),convertCoords:t(\"./convert_coords\")}},{\"../../plots/cartesian/include_components\":862,\"./attributes\":707,\"./convert_coords\":708,\"./defaults\":709,\"./draw\":710}],712:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"../color/attributes\");e.exports\u003d{bgcolor:{valType:\"color\",editType:\"legend\"},bordercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"legend\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"legend\"},font:n({editType:\"legend\"}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"v\",editType:\"legend\"},traceorder:{valType:\"flaglist\",flags:[\"reversed\",\"grouped\"],extras:[\"normal\"],editType:\"legend\"},tracegroupgap:{valType:\"number\",min:0,dflt:10,editType:\"legend\"},itemsizing:{valType:\"enumerated\",values:[\"trace\",\"constant\"],dflt:\"trace\",editType:\"legend\"},itemwidth:{valType:\"number\",min:30,dflt:30,editType:\"legend\"},itemclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggle\",editType:\"legend\"},itemdoubleclick:{valType:\"enumerated\",values:[\"toggle\",\"toggleothers\",!1],dflt:\"toggleothers\",editType:\"legend\"},x:{valType:\"number\",min:-2,max:3,editType:\"legend\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"legend\"},y:{valType:\"number\",min:-2,max:3,editType:\"legend\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"legend\"},uirevision:{valType:\"any\",editType:\"none\"},valign:{valType:\"enumerated\",values:[\"top\",\"middle\",\"bottom\"],dflt:\"middle\",editType:\"legend\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"legend\"},font:n({editType:\"legend\"}),side:{valType:\"enumerated\",values:[\"top\",\"left\",\"top left\"],editType:\"legend\"},editType:\"legend\"},editType:\"legend\"}},{\"../../plots/font_attributes\":878,\"../color/attributes\":661}],713:[function(t,e,r){\"use strict\";e.exports\u003d{scrollBarWidth:6,scrollBarMinHeight:20,scrollBarColor:\"#808BA4\",scrollBarMargin:4,scrollBarEnterAttrs:{rx:20,ry:3,width:0,height:0},titlePad:2,itemGap:5}},{}],714:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plot_api/plot_template\"),o\u003dt(\"./attributes\"),s\u003dt(\"../../plots/layout_attributes\"),l\u003dt(\"./helpers\");e.exports\u003dfunction(t,e,r){for(var c\u003dt.legend||{},u\u003d0,f\u003d!1,h\u003d\"normal\",p\u003d0;p\u003cr.length;p++){var d\u003dr[p];d.visible\u0026\u0026((d.showlegend||d._dfltShowLegend\u0026\u0026!(d._module\u0026\u0026d._module.attributes\u0026\u0026d._module.attributes.showlegend\u0026\u0026!1\u003d\u003d\u003dd._module.attributes.showlegend.dflt))\u0026\u0026(u++,d.showlegend\u0026\u0026(f\u003d!0,(n.traceIs(d,\"pie-like\")||!0\u003d\u003d\u003dd._input.showlegend)\u0026\u0026u++)),(n.traceIs(d,\"bar\")\u0026\u0026\"stack\"\u003d\u003d\u003de.barmode||-1!\u003d\u003d[\"tonextx\",\"tonexty\"].indexOf(d.fill))\u0026\u0026(h\u003dl.isGrouped({traceorder:h})?\"grouped+reversed\":\"reversed\"),void 0!\u003d\u003dd.legendgroup\u0026\u0026\"\"!\u003d\u003dd.legendgroup\u0026\u0026(h\u003dl.isReversed({traceorder:h})?\"reversed+grouped\":\"grouped\"))}var m\u003di.coerce(t,e,s,\"showlegend\",f\u0026\u0026u\u003e1);if(!1!\u003d\u003dm||c.uirevision){var g\u003da.newContainer(e,\"legend\");if(T(\"uirevision\",e.uirevision),!1!\u003d\u003dm){T(\"bgcolor\",e.paper_bgcolor),T(\"bordercolor\"),T(\"borderwidth\");var v,y,x,b\u003di.coerceFont(T,\"font\",e.font),_\u003d\"h\"\u003d\u003d\u003dT(\"orientation\");if(_?(v\u003d0,n.getComponentMethod(\"rangeslider\",\"isVisible\")(t.xaxis)?(y\u003d1.1,x\u003d\"bottom\"):(y\u003d-.1,x\u003d\"top\")):(v\u003d1.02,y\u003d1,x\u003d\"auto\"),T(\"traceorder\",h),l.isGrouped(e.legend)\u0026\u0026T(\"tracegroupgap\"),T(\"itemsizing\"),T(\"itemwidth\"),T(\"itemclick\"),T(\"itemdoubleclick\"),T(\"x\",v),T(\"xanchor\"),T(\"y\",y),T(\"yanchor\",x),T(\"valign\"),i.noneOrAll(c,g,[\"x\",\"y\"]),T(\"title.text\")){T(\"title.side\",_?\"left\":\"top\");var w\u003di.extendFlat({},b,{size:i.bigFont(b.size)});i.coerceFont(T,\"title.font\",w)}}}function T(t,e){return i.coerce(c,g,o,t,e)}}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../plots/layout_attributes\":904,\"../../registry\":927,\"./attributes\":712,\"./helpers\":718}],715:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/plots\"),o\u003dt(\"../../registry\"),s\u003dt(\"../../lib/events\"),l\u003dt(\"../dragelement\"),c\u003dt(\"../drawing\"),u\u003dt(\"../color\"),f\u003dt(\"../../lib/svg_text_utils\"),h\u003dt(\"./handle_click\"),p\u003dt(\"./constants\"),d\u003dt(\"../../constants/alignment\"),m\u003dd.LINE_SPACING,g\u003dd.FROM_TL,v\u003dd.FROM_BR,y\u003dt(\"./get_legend_data\"),x\u003dt(\"./style\"),b\u003dt(\"./helpers\");function _(t,e,r,n,i){var a\u003dr.data()[0][0].trace,l\u003d{event:i,node:r.node(),curveNumber:a.index,expandedIndex:a._expandedIndex,data:t.data,layout:t.layout,frames:t._transitionData._frames,config:t._context,fullData:t._fullData,fullLayout:t._fullLayout};if(a._group\u0026\u0026(l.group\u003da._group),o.traceIs(a,\"pie-like\")\u0026\u0026(l.label\u003dr.datum()[0].label),!1!\u003d\u003ds.triggerHandler(t,\"plotly_legendclick\",l))if(1\u003d\u003d\u003dn)e._clickTimeout\u003dsetTimeout((function(){t._fullLayout\u0026\u0026h(r,t,n)}),t._context.doubleClickDelay);else if(2\u003d\u003d\u003dn){e._clickTimeout\u0026\u0026clearTimeout(e._clickTimeout),t._legendMouseDownTime\u003d0,!1!\u003d\u003ds.triggerHandler(t,\"plotly_legenddoubleclick\",l)\u0026\u0026h(r,t,n)}}function w(t,e,r){var n,a,s\u003dt.data()[0][0],l\u003ds.trace,u\u003do.traceIs(l,\"pie-like\"),h\u003d!r._inHover\u0026\u0026e._context.edits.legendText\u0026\u0026!u,d\u003dr._maxNameLength;s.groupTitle?(n\u003ds.groupTitle.text,a\u003ds.groupTitle.font):(a\u003dr.font,r.entries?n\u003ds.text:(n\u003du?s.label:l.name,l._meta\u0026\u0026(n\u003di.templateString(n,l._meta))));var m\u003di.ensureSingle(t,\"text\",\"legendtext\");m.attr(\"text-anchor\",\"start\").call(c.font,a).text(h?T(n,d):n);var g\u003dr.itemwidth+2*p.itemGap;f.positionText(m,g,0),h?m.call(f.makeEditable,{gd:e,text:n}).call(M,t,e,r).on(\"edit\",(function(n){this.text(T(n,d)).call(M,t,e,r);var a\u003ds.trace._fullInput||{},c\u003d{};if(o.hasTransform(a,\"groupby\")){var u\u003do.getTransformIndices(a,\"groupby\"),f\u003du[u.length-1],h\u003di.keyedContainer(a,\"transforms[\"+f+\"].styles\",\"target\",\"value.name\");h.set(s.trace._group,n),c\u003dh.constructUpdate()}else c.name\u003dn;return o.call(\"_guiRestyle\",e,c,l.index)})):M(m,t,e,r)}function T(t,e){var r\u003dMath.max(4,e);if(t\u0026\u0026t.trim().length\u003e\u003dr/2)return t;for(var n\u003dr-(t\u003dt||\"\").length;n\u003e0;n--)t+\u003d\" \";return t}function k(t,e){var r,a\u003de._context.doubleClickDelay,o\u003d1,s\u003di.ensureSingle(t,\"rect\",\"legendtoggle\",(function(t){e._context.staticPlot||t.style(\"cursor\",\"pointer\").attr(\"pointer-events\",\"all\"),t.call(u.fill,\"rgba(0,0,0,0)\")}));e._context.staticPlot||(s.on(\"mousedown\",(function(){(r\u003d(new Date).getTime())-e._legendMouseDownTime\u003ca?o+\u003d1:(o\u003d1,e._legendMouseDownTime\u003dr)})),s.on(\"mouseup\",(function(){if(!e._dragged\u0026\u0026!e._editing){var r\u003de._fullLayout.legend;(new Date).getTime()-e._legendMouseDownTime\u003ea\u0026\u0026(o\u003dMath.max(o-1,1)),_(e,r,t,o,n.event)}})))}function M(t,e,r,n,i){n._inHover\u0026\u0026t.attr(\"data-notex\",!0),f.convertToTspans(t,r,(function(){!function(t,e,r,n){var i\u003dt.data()[0][0];if(!r._inHover\u0026\u0026i\u0026\u0026!i.trace.showlegend)return void t.remove();var a\u003dt.select(\"g[class*\u003dmath-group]\"),o\u003da.node();r||(r\u003de._fullLayout.legend);var s,l\u003dr.borderwidth;s\u003d1\u003d\u003d\u003dn?r.title.font:i.groupTitle?i.groupTitle.font:r.font;var u,h,d\u003ds.size*m;if(o){var g\u003dc.bBox(o);u\u003dg.height,h\u003dg.width,1\u003d\u003d\u003dn?c.setTranslate(a,l,l+.75*u):c.setTranslate(a,0,.25*u)}else{var v\u003dt.select(1\u003d\u003d\u003dn?\".legendtitletext\":\".legendtext\"),y\u003df.lineCount(v),x\u003dv.node();if(u\u003dd*y,h\u003dx?c.bBox(x).width:0,1\u003d\u003d\u003dn)\"left\"\u003d\u003d\u003dr.title.side\u0026\u0026(h+\u003d2*p.itemGap),f.positionText(v,l+p.titlePad,l+d);else{var b\u003d2*p.itemGap+r.itemwidth;i.groupTitle\u0026\u0026(b\u003dp.itemGap,h-\u003dr.itemwidth),f.positionText(v,b,-d*((y-1)/2-.3))}}1\u003d\u003d\u003dn?(r._titleWidth\u003dh,r._titleHeight\u003du):(i.lineHeight\u003dd,i.height\u003dMath.max(u,16)+3,i.width\u003dh)}(e,r,n,i)}))}function A(t){return i.isRightAnchor(t)?\"right\":i.isCenterAnchor(t)?\"center\":\"left\"}function S(t){return i.isBottomAnchor(t)?\"bottom\":i.isMiddleAnchor(t)?\"middle\":\"top\"}e.exports\u003dfunction(t,e){return e||(e\u003dt._fullLayout.legend||{}),function(t,e){var r,s,f\u003dt._fullLayout,h\u003d\"legend\"+f._uid,d\u003de._inHover;d?(r\u003de.layer,h+\u003d\"-hover\"):r\u003df._infolayer;if(!r)return;t._legendMouseDownTime||(t._legendMouseDownTime\u003d0);if(d){if(!e.entries)return;s\u003dy(e.entries,e)}else{if(!t.calcdata)return;s\u003df.showlegend\u0026\u0026y(t.calcdata,e)}var m\u003df.hiddenlabels||[];if(!(d||f.showlegend\u0026\u0026s.length))return r.selectAll(\".legend\").remove(),f._topdefs.select(\"#\"+h).remove(),a.autoMargin(t,\"legend\");var T\u003di.ensureSingle(r,\"g\",\"legend\",(function(t){d||t.attr(\"pointer-events\",\"all\")})),E\u003di.ensureSingleById(f._topdefs,\"clipPath\",h,(function(t){t.append(\"rect\")})),L\u003di.ensureSingle(T,\"rect\",\"bg\",(function(t){t.attr(\"shape-rendering\",\"crispEdges\")}));L.call(u.stroke,e.bordercolor).call(u.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\");var C\u003di.ensureSingle(T,\"g\",\"scrollbox\"),P\u003de.title;if(e._titleWidth\u003d0,e._titleHeight\u003d0,P.text){var I\u003di.ensureSingle(C,\"text\",\"legendtitletext\");I.attr(\"text-anchor\",\"start\").call(c.font,P.font).text(P.text),M(I,C,t,e,1)}else C.selectAll(\".legendtitletext\").remove();var O\u003di.ensureSingle(T,\"rect\",\"scrollbar\",(function(t){t.attr(p.scrollBarEnterAttrs).call(u.fill,p.scrollBarColor)})),z\u003dC.selectAll(\"g.groups\").data(s);z.enter().append(\"g\").attr(\"class\",\"groups\"),z.exit().remove();var D\u003dz.selectAll(\"g.traces\").data(i.identity);D.enter().append(\"g\").attr(\"class\",\"traces\"),D.exit().remove(),D.style(\"opacity\",(function(t){var e\u003dt[0].trace;return o.traceIs(e,\"pie-like\")?-1!\u003d\u003dm.indexOf(t[0].label)?.5:1:\"legendonly\"\u003d\u003d\u003de.visible?.5:1})).each((function(){n.select(this).call(w,t,e)})).call(x,t,e).each((function(){d||n.select(this).call(k,t)})),i.syncOrAsync([a.previousPromises,function(){return function(t,e,r,i){var a\u003dt._fullLayout;i||(i\u003da.legend);var o\u003da._size,s\u003db.isVertical(i),l\u003db.isGrouped(i),u\u003di.borderwidth,f\u003d2*u,h\u003dp.itemGap,d\u003di.itemwidth+2*h,m\u003d2*(u+h),g\u003dS(i),v\u003di.y\u003c0||0\u003d\u003d\u003di.y\u0026\u0026\"top\"\u003d\u003d\u003dg,y\u003di.y\u003e1||1\u003d\u003d\u003di.y\u0026\u0026\"bottom\"\u003d\u003d\u003dg,x\u003di.tracegroupgap;i._maxHeight\u003dMath.max(v||y?a.height/2:o.h,30);var _\u003d0;i._width\u003d0,i._height\u003d0;var w\u003dfunction(t){var e\u003d0,r\u003d0,n\u003dt.title.side;n\u0026\u0026(-1!\u003d\u003dn.indexOf(\"left\")\u0026\u0026(e\u003dt._titleWidth),-1!\u003d\u003dn.indexOf(\"top\")\u0026\u0026(r\u003dt._titleHeight));return[e,r]}(i);if(s)r.each((function(t){var e\u003dt[0].height;c.setTranslate(this,u+w[0],u+w[1]+i._height+e/2+h),i._height+\u003de,i._width\u003dMath.max(i._width,t[0].width)})),_\u003dd+i._width,i._width+\u003dh+d+f,i._height+\u003dm,l\u0026\u0026(e.each((function(t,e){c.setTranslate(this,0,e*i.tracegroupgap)})),i._height+\u003d(i._lgroupsLength-1)*i.tracegroupgap);else{var T\u003dA(i),k\u003di.x\u003c0||0\u003d\u003d\u003di.x\u0026\u0026\"right\"\u003d\u003d\u003dT,M\u003di.x\u003e1||1\u003d\u003d\u003di.x\u0026\u0026\"left\"\u003d\u003d\u003dT,E\u003dy||v,L\u003da.width/2;i._maxWidth\u003dMath.max(k?E\u0026\u0026\"left\"\u003d\u003d\u003dT?o.l+o.w:L:M?E\u0026\u0026\"right\"\u003d\u003d\u003dT?o.r+o.w:L:o.w,2*d);var C\u003d0,P\u003d0;r.each((function(t){var e\u003dt[0].width+d;C\u003dMath.max(C,e),P+\u003de})),_\u003dnull;var I\u003d0;if(l){var O\u003d0,z\u003d0,D\u003d0;e.each((function(){var t\u003d0,e\u003d0;n.select(this).selectAll(\"g.traces\").each((function(r){var n\u003dr[0].height;c.setTranslate(this,w[0],w[1]+u+h+n/2+e),e+\u003dn,t\u003dMath.max(t,d+r[0].width)})),O\u003dMath.max(O,e);var r\u003dt+h;r+u+z\u003ei._maxWidth\u0026\u0026(I\u003dMath.max(I,z),z\u003d0,D+\u003dO+x,O\u003de),c.setTranslate(this,z,D),z+\u003dr})),i._width\u003dMath.max(I,z)+u,i._height\u003dD+O+m}else{var R\u003dr.size(),F\u003dP+f+(R-1)*h\u003ci._maxWidth,B\u003d0,N\u003d0,j\u003d0,U\u003d0;r.each((function(t){var e\u003dt[0].height,r\u003dd+t[0].width,n\u003d(F?r:C)+h;n+u+N-h\u003e\u003di._maxWidth\u0026\u0026(I\u003dMath.max(I,U),N\u003d0,j+\u003dB,i._height+\u003dB,B\u003d0),c.setTranslate(this,w[0]+u+N,w[1]+u+j+e/2+h),U\u003dN+r+h,N+\u003dn,B\u003dMath.max(B,e)})),F?(i._width\u003dN+f,i._height\u003dB+m):(i._width\u003dMath.max(I,U)+f,i._height+\u003dB+m)}}i._width\u003dMath.ceil(Math.max(i._width+w[0],i._titleWidth+2*(u+p.titlePad))),i._height\u003dMath.ceil(Math.max(i._height+w[1],i._titleHeight+2*(u+p.itemGap))),i._effHeight\u003dMath.min(i._height,i._maxHeight);var V\u003dt._context.edits,q\u003dV.legendText||V.legendPosition;r.each((function(t){var e\u003dn.select(this).select(\".legendtoggle\"),r\u003dt[0].height,i\u003dq?d:_||d+t[0].width;s||(i+\u003dh/2),c.setRect(e,0,-r/2,i,r)}))}(t,z,D,e)},function(){if(d||!function(t){var e\u003dt._fullLayout.legend,r\u003dA(e),n\u003dS(e);return a.autoMargin(t,\"legend\",{x:e.x,y:e.y,l:e._width*g[r],r:e._width*v[r],b:e._effHeight*v[n],t:e._effHeight*g[n]})}(t)){var s,u,m,y,x\u003df._size,b\u003de.borderwidth,w\u003dx.l+x.w*e.x-g[A(e)]*e._width,k\u003dx.t+x.h*(1-e.y)-g[S(e)]*e._effHeight;if(!d\u0026\u0026f.margin.autoexpand){var M\u003dw,P\u003dk;w\u003di.constrain(w,0,f.width-e._width),k\u003di.constrain(k,0,f.height-e._effHeight),w!\u003d\u003dM\u0026\u0026i.log(\"Constrain legend.x to make legend fit inside graph\"),k!\u003d\u003dP\u0026\u0026i.log(\"Constrain legend.y to make legend fit inside graph\")}if(d||c.setTranslate(T,w,k),O.on(\".drag\",null),T.on(\"wheel\",null),d||e._height\u003c\u003de._maxHeight||t._context.staticPlot){var I\u003de._effHeight;d\u0026\u0026(I\u003de._height),L.attr({width:e._width-b,height:I-b,x:b/2,y:b/2}),c.setTranslate(C,0,0),E.select(\"rect\").attr({width:e._width-2*b,height:I-2*b,x:b,y:b}),c.setClipUrl(C,h,t),c.setRect(O,0,0,0,0),delete e._scrollY}else{var z,D,R,F\u003dMath.max(p.scrollBarMinHeight,e._effHeight*e._effHeight/e._height),B\u003de._effHeight-F-2*p.scrollBarMargin,N\u003de._height-e._effHeight,j\u003dB/N,U\u003dMath.min(e._scrollY||0,N);L.attr({width:e._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:e._effHeight-b,x:b/2,y:b/2}),E.select(\"rect\").attr({width:e._width-2*b+p.scrollBarWidth+p.scrollBarMargin,height:e._effHeight-2*b,x:b,y:b+U}),c.setClipUrl(C,h,t),H(U,F,j),T.on(\"wheel\",(function(){H(U\u003di.constrain(e._scrollY+n.event.deltaY/B*N,0,N),F,j),0!\u003d\u003dU\u0026\u0026U!\u003d\u003dN\u0026\u0026n.event.preventDefault()}));var V\u003dn.behavior.drag().on(\"dragstart\",(function(){var t\u003dn.event.sourceEvent;z\u003d\"touchstart\"\u003d\u003d\u003dt.type?t.changedTouches[0].clientY:t.clientY,R\u003dU})).on(\"drag\",(function(){var t\u003dn.event.sourceEvent;2\u003d\u003d\u003dt.buttons||t.ctrlKey||(D\u003d\"touchmove\"\u003d\u003d\u003dt.type?t.changedTouches[0].clientY:t.clientY,H(U\u003dfunction(t,e,r){var n\u003d(r-e)/j+t;return i.constrain(n,0,N)}(R,z,D),F,j))}));O.call(V);var q\u003dn.behavior.drag().on(\"dragstart\",(function(){var t\u003dn.event.sourceEvent;\"touchstart\"\u003d\u003d\u003dt.type\u0026\u0026(z\u003dt.changedTouches[0].clientY,R\u003dU)})).on(\"drag\",(function(){var t\u003dn.event.sourceEvent;\"touchmove\"\u003d\u003d\u003dt.type\u0026\u0026(D\u003dt.changedTouches[0].clientY,H(U\u003dfunction(t,e,r){var n\u003d(e-r)/j+t;return i.constrain(n,0,N)}(R,z,D),F,j))}));C.call(q)}if(t._context.edits.legendPosition)T.classed(\"cursor-move\",!0),l.init({element:T.node(),gd:t,prepFn:function(){var t\u003dc.getTranslate(T);m\u003dt.x,y\u003dt.y},moveFn:function(t,r){var n\u003dm+t,i\u003dy+r;c.setTranslate(T,n,i),s\u003dl.align(n,0,x.l,x.l+x.w,e.xanchor),u\u003dl.align(i,0,x.t+x.h,x.t,e.yanchor)},doneFn:function(){void 0!\u003d\u003ds\u0026\u0026void 0!\u003d\u003du\u0026\u0026o.call(\"_guiRelayout\",t,{\"legend.x\":s,\"legend.y\":u})},clickFn:function(e,n){var i\u003dr.selectAll(\"g.traces\").filter((function(){var t\u003dthis.getBoundingClientRect();return n.clientX\u003e\u003dt.left\u0026\u0026n.clientX\u003c\u003dt.right\u0026\u0026n.clientY\u003e\u003dt.top\u0026\u0026n.clientY\u003c\u003dt.bottom}));i.size()\u003e0\u0026\u0026_(t,T,i,e,n)}})}function H(r,n,i){e._scrollY\u003dt._fullLayout.legend._scrollY\u003dr,c.setTranslate(C,0,-r),c.setRect(O,e._width,p.scrollBarMargin+r*i,p.scrollBarWidth,n),E.select(\"rect\").attr(\"y\",b+r)}}],t)}(t,e)}},{\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/events\":788,\"../../lib/svg_text_utils\":824,\"../../plots/plots\":913,\"../../registry\":927,\"../color\":662,\"../dragelement\":681,\"../drawing\":684,\"./constants\":713,\"./get_legend_data\":716,\"./handle_click\":717,\"./helpers\":718,\"./style\":720,\"@plotly/d3\":58}],716:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"./helpers\");e.exports\u003dfunction(t,e){var r,a,o\u003di.isGrouped(e),s\u003di.isReversed(e),l\u003d{},c\u003d[],u\u003d!1,f\u003d{},h\u003d0,p\u003d0;function d(t,r){if(\"\"!\u003d\u003dt\u0026\u0026i.isGrouped(e))-1\u003d\u003d\u003dc.indexOf(t)?(c.push(t),u\u003d!0,l[t]\u003d[r]):l[t].push(r);else{var n\u003d\"~~i\"+h;c.push(n),l[n]\u003d[r],h++}}for(r\u003d0;r\u003ct.length;r++){var m\u003dt[r],g\u003dm[0],v\u003dg.trace,y\u003dv.legendgroup;if(e._inHover||v.visible\u0026\u0026v.showlegend)if(n.traceIs(v,\"pie-like\"))for(f[y]||(f[y]\u003d{}),a\u003d0;a\u003cm.length;a++){var x\u003dm[a].label;f[y][x]||(d(y,{label:x,color:m[a].color,i:m[a].i,trace:v,pts:m[a].pts}),f[y][x]\u003d!0,p\u003dMath.max(p,(x||\"\").length))}else d(y,g),p\u003dMath.max(p,(v.name||\"\").length)}if(!c.length)return[];var b\u003d!u||!o,_\u003d[];for(r\u003d0;r\u003cc.length;r++){var w\u003dl[c[r]];b?_.push(w[0]):_.push(w)}for(b\u0026\u0026(_\u003d[_]),r\u003d0;r\u003c_.length;r++){var T\u003d1/0;for(a\u003d0;a\u003c_[r].length;a++){var k\u003d_[r][a].trace.legendrank;T\u003ek\u0026\u0026(T\u003dk)}_[r][0]._groupMinRank\u003dT,_[r][0]._preGroupSort\u003dr}var M\u003dfunction(t,e){return t.trace.legendrank-e.trace.legendrank||t._preSort-e._preSort};for(_.forEach((function(t,e){t[0]._preGroupSort\u003de})),_.sort((function(t,e){return t[0]._groupMinRank-e[0]._groupMinRank||t[0]._preGroupSort-e[0]._preGroupSort})),r\u003d0;r\u003c_.length;r++){_[r].forEach((function(t,e){t._preSort\u003de})),_[r].sort(M);var A\u003d_[r][0],S\u003dnull;for(a\u003d0;a\u003c_[r].length;a++){var E\u003d_[r][a].trace.legendgrouptitle;if(E\u0026\u0026E.text){S\u003dE;break}}for(s\u0026\u0026_[r].reverse(),S\u0026\u0026_[r].unshift({i:-1,groupTitle:S,trace:{showlegend:A.trace.showlegend}}),a\u003d0;a\u003c_[r].length;a++)_[r][a]\u003d[_[r][a]]}return e._lgroupsLength\u003d_.length,e._maxNameLength\u003dp,_}},{\"../../registry\":927,\"./helpers\":718}],717:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\"),a\u003d!0;e.exports\u003dfunction(t,e,r){var o\u003de._fullLayout;if(!e._dragged\u0026\u0026!e._editing){var s,l\u003do.legend.itemclick,c\u003do.legend.itemdoubleclick;if(1\u003d\u003d\u003dr\u0026\u0026\"toggle\"\u003d\u003d\u003dl\u0026\u0026\"toggleothers\"\u003d\u003d\u003dc\u0026\u0026a\u0026\u0026e.data\u0026\u0026e._context.showTips?(n.notifier(n._(e,\"Double-click on legend to isolate one trace\"),\"long\"),a\u003d!1):a\u003d!1,1\u003d\u003d\u003dr?s\u003dl:2\u003d\u003d\u003dr\u0026\u0026(s\u003dc),s){var u\u003do.hiddenlabels?o.hiddenlabels.slice():[],f\u003dt.data()[0][0];if(!f.groupTitle){var h,p,d,m,g,v\u003de._fullData,y\u003df.trace,x\u003dy.legendgroup,b\u003d{},_\u003d[],w\u003d[],T\u003d[];if(i.traceIs(y,\"pie-like\")){var k\u003df.label,M\u003du.indexOf(k);\"toggle\"\u003d\u003d\u003ds?-1\u003d\u003d\u003dM?u.push(k):u.splice(M,1):\"toggleothers\"\u003d\u003d\u003ds\u0026\u0026(u\u003d[],e.calcdata[0].forEach((function(t){k!\u003d\u003dt.label\u0026\u0026u.push(t.label)})),e._fullLayout.hiddenlabels\u0026\u0026e._fullLayout.hiddenlabels.length\u003d\u003d\u003du.length\u0026\u0026-1\u003d\u003d\u003dM\u0026\u0026(u\u003d[])),i.call(\"_guiRelayout\",e,\"hiddenlabels\",u)}else{var A,S\u003dx\u0026\u0026x.length,E\u003d[];if(S)for(h\u003d0;h\u003cv.length;h++)(A\u003dv[h]).visible\u0026\u0026A.legendgroup\u003d\u003d\u003dx\u0026\u0026E.push(h);if(\"toggle\"\u003d\u003d\u003ds){var L;switch(y.visible){case!0:L\u003d\"legendonly\";break;case!1:L\u003d!1;break;case\"legendonly\":L\u003d!0}if(S)for(h\u003d0;h\u003cv.length;h++)!1!\u003d\u003dv[h].visible\u0026\u0026v[h].legendgroup\u003d\u003d\u003dx\u0026\u0026B(v[h],L);else B(y,L)}else if(\"toggleothers\"\u003d\u003d\u003ds){var C,P,I,O,z\u003d!0;for(h\u003d0;h\u003cv.length;h++)if(C\u003dv[h]\u003d\u003d\u003dy,I\u003d!0!\u003d\u003dv[h].showlegend,!(C||I||(P\u003dS\u0026\u0026v[h].legendgroup\u003d\u003d\u003dx)||!0!\u003d\u003dv[h].visible||i.traceIs(v[h],\"notLegendIsolatable\"))){z\u003d!1;break}for(h\u003d0;h\u003cv.length;h++)if(!1!\u003d\u003dv[h].visible\u0026\u0026!i.traceIs(v[h],\"notLegendIsolatable\"))switch(y.visible){case\"legendonly\":B(v[h],!0);break;case!0:O\u003d!!z||\"legendonly\",C\u003dv[h]\u003d\u003d\u003dy,I\u003d!0!\u003d\u003dv[h].showlegend\u0026\u0026!v[h].legendgroup,P\u003dC||S\u0026\u0026v[h].legendgroup\u003d\u003d\u003dx,B(v[h],!(!P\u0026\u0026!I)||O)}}for(h\u003d0;h\u003cw.length;h++)if(d\u003dw[h]){var D\u003dd.constructUpdate(),R\u003dObject.keys(D);for(p\u003d0;p\u003cR.length;p++)m\u003dR[p],(b[m]\u003db[m]||[])[T[h]]\u003dD[m]}for(g\u003dObject.keys(b),h\u003d0;h\u003cg.length;h++)for(m\u003dg[h],p\u003d0;p\u003c_.length;p++)b[m].hasOwnProperty(p)||(b[m][p]\u003dvoid 0);i.call(\"_guiRestyle\",e,b,_)}}}}function F(t,e,r){var n\u003d_.indexOf(t),i\u003db[e];return i||(i\u003db[e]\u003d[]),-1\u003d\u003d\u003d_.indexOf(t)\u0026\u0026(_.push(t),n\u003d_.length-1),i[n]\u003dr,n}function B(t,e){var r\u003dt._fullInput;if(i.hasTransform(r,\"groupby\")){var a\u003dw[r.index];if(!a){var o\u003di.getTransformIndices(r,\"groupby\"),s\u003do[o.length-1];a\u003dn.keyedContainer(r,\"transforms[\"+s+\"].styles\",\"target\",\"value.visible\"),w[r.index]\u003da}var l\u003da.get(t._group);void 0\u003d\u003d\u003dl\u0026\u0026(l\u003d!0),!1!\u003d\u003dl\u0026\u0026a.set(t._group,e),T[r.index]\u003dF(r.index,\"visible\",!1!\u003d\u003dr.visible)}else{var c\u003d!1!\u003d\u003dr.visible\u0026\u0026e;F(r.index,\"visible\",c)}}}},{\"../../lib\":799,\"../../registry\":927}],718:[function(t,e,r){\"use strict\";r.isGrouped\u003dfunction(t){return-1!\u003d\u003d(t.traceorder||\"\").indexOf(\"grouped\")},r.isVertical\u003dfunction(t){return\"h\"!\u003d\u003dt.orientation},r.isReversed\u003dfunction(t){return-1!\u003d\u003d(t.traceorder||\"\").indexOf(\"reversed\")}},{}],719:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"component\",name:\"legend\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),draw:t(\"./draw\"),style:t(\"./style\")}},{\"./attributes\":712,\"./defaults\":714,\"./draw\":715,\"./style\":720}],720:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib\"),o\u003da.strTranslate,s\u003dt(\"../drawing\"),l\u003dt(\"../color\"),c\u003dt(\"../colorscale/helpers\").extractOpts,u\u003dt(\"../../traces/scatter/subtypes\"),f\u003dt(\"../../traces/pie/style_one\"),h\u003dt(\"../../traces/pie/helpers\").castOption,p\u003dt(\"./constants\");function d(t,e){return(e?\"radial\":\"horizontal\")+(t?\"\":\"reversed\")}function m(t){var e\u003dt[0].trace,r\u003de.contours,n\u003du.hasLines(e),i\u003du.hasMarkers(e),a\u003de.visible\u0026\u0026e.fill\u0026\u0026\"none\"!\u003d\u003de.fill,o\u003d!1,s\u003d!1;if(r){var l\u003dr.coloring;\"lines\"\u003d\u003d\u003dl?o\u003d!0:n\u003d\"none\"\u003d\u003d\u003dl||\"heatmap\"\u003d\u003d\u003dl||r.showlines,\"constraint\"\u003d\u003d\u003dr.type?a\u003d\"\u003d\"!\u003d\u003dr._operation:\"fill\"!\u003d\u003dl\u0026\u0026\"heatmap\"!\u003d\u003dl||(s\u003d!0)}return{showMarker:i,showLine:n,showFill:a,showGradientLine:o,showGradientFill:s,anyLine:n||o,anyFill:a||s}}function g(t,e,r){return t\u0026\u0026a.isArrayOrTypedArray(t)?e:t\u003er?r:t}e.exports\u003dfunction(t,e,r){var v\u003de._fullLayout;r||(r\u003dv.legend);var y\u003d\"constant\"\u003d\u003d\u003dr.itemsizing,x\u003dr.itemwidth,b\u003d(x+2*p.itemGap)/2,_\u003do(b,0),w\u003dfunction(t,e,r,n){var i;if(t+1)i\u003dt;else{if(!(e\u0026\u0026e.width\u003e0))return 0;i\u003de.width}return y?n:Math.min(i,r)};function T(t,a,o){var u\u003dt[0].trace,f\u003du.marker||{},h\u003df.line||{},p\u003do?u.visible\u0026\u0026u.type\u003d\u003d\u003do:i.traceIs(u,\"bar\"),d\u003dn.select(a).select(\"g.legendpoints\").selectAll(\"path.legend\"+o).data(p?[t]:[]);d.enter().append(\"path\").classed(\"legend\"+o,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",_),d.exit().remove(),d.each((function(t){var i\u003dn.select(this),a\u003dt[0],o\u003dw(a.mlw,f.line,5,2);i.style(\"stroke-width\",o+\"px\");var p\u003da.mcc;if(!r._inHover\u0026\u0026\"mc\"in a){var d\u003dc(f),m\u003dd.mid;void 0\u003d\u003d\u003dm\u0026\u0026(m\u003d(d.max+d.min)/2),p\u003ds.tryColorscale(f,\"\")(m)}var v\u003dp||a.mc||f.color,y\u003df.pattern,x\u003dy\u0026\u0026s.getPatternAttr(y.shape,0,\"\");if(x){var b\u003ds.getPatternAttr(y.bgcolor,0,null),_\u003ds.getPatternAttr(y.fgcolor,0,null),T\u003dy.fgopacity,k\u003dg(y.size,8,10),M\u003dg(y.solidity,.5,1),A\u003d\"legend-\"+u.uid;i.call(s.pattern,\"legend\",e,A,x,k,M,p,y.fillmode,b,_,T)}else i.call(l.fill,v);o\u0026\u0026l.stroke(i,a.mlc||h.color)}))}function k(t,e,r){var o\u003dt[0],s\u003do.trace,l\u003dr?s.visible\u0026\u0026s.type\u003d\u003d\u003dr:i.traceIs(s,r),c\u003dn.select(e).select(\"g.legendpoints\").selectAll(\"path.legend\"+r).data(l?[t]:[]);if(c.enter().append(\"path\").classed(\"legend\"+r,!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",_),c.exit().remove(),c.size()){var u\u003d(s.marker||{}).line,p\u003dw(h(u.width,o.pts),u,5,2),d\u003da.minExtend(s,{marker:{line:{width:p}}});d.marker.line.color\u003du.color;var m\u003da.minExtend(o,{trace:d});f(c,m,d)}}t.each((function(t){var e\u003dn.select(this),i\u003da.ensureSingle(e,\"g\",\"layers\");i.style(\"opacity\",t[0].trace.opacity);var s\u003dr.valign,l\u003dt[0].lineHeight,c\u003dt[0].height;if(\"middle\"!\u003d\u003ds\u0026\u0026l\u0026\u0026c){var u\u003d{top:1,bottom:-1}[s]*(.5*(l-c+3));i.attr(\"transform\",o(0,u))}else i.attr(\"transform\",null);i.selectAll(\"g.legendfill\").data([t]).enter().append(\"g\").classed(\"legendfill\",!0),i.selectAll(\"g.legendlines\").data([t]).enter().append(\"g\").classed(\"legendlines\",!0);var f\u003di.selectAll(\"g.legendsymbols\").data([t]);f.enter().append(\"g\").classed(\"legendsymbols\",!0),f.selectAll(\"g.legendpoints\").data([t]).enter().append(\"g\").classed(\"legendpoints\",!0)})).each((function(t){var r,i\u003dt[0].trace,o\u003d[];if(i.visible)switch(i.type){case\"histogram2d\":case\"heatmap\":o\u003d[[\"M-15,-2V4H15V-2Z\"]],r\u003d!0;break;case\"choropleth\":case\"choroplethmapbox\":o\u003d[[\"M-6,-6V6H6V-6Z\"]],r\u003d!0;break;case\"densitymapbox\":o\u003d[[\"M-6,0 a6,6 0 1,0 12,0 a 6,6 0 1,0 -12,0\"]],r\u003d\"radial\";break;case\"cone\":o\u003d[[\"M-6,2 A2,2 0 0,0 -6,6 V6L6,4Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 L6,-4Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 L6,0Z\"]],r\u003d!1;break;case\"streamtube\":o\u003d[[\"M-6,2 A2,2 0 0,0 -6,6 H6 A2,2 0 0,1 6,2 Z\"],[\"M-6,-6 A2,2 0 0,0 -6,-2 H6 A2,2 0 0,1 6,-6 Z\"],[\"M-6,-2 A2,2 0 0,0 -6,2 H6 A2,2 0 0,1 6,-2 Z\"]],r\u003d!1;break;case\"surface\":o\u003d[[\"M-6,-6 A2,3 0 0,0 -6,0 H6 A2,3 0 0,1 6,-6 Z\"],[\"M-6,1 A2,3 0 0,1 -6,6 H6 A2,3 0 0,0 6,0 Z\"]],r\u003d!0;break;case\"mesh3d\":o\u003d[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],r\u003d!1;break;case\"volume\":o\u003d[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6H6L0,6Z\"]],r\u003d!0;break;case\"isosurface\":o\u003d[[\"M-6,6H0L-6,-6Z\"],[\"M6,6H0L6,-6Z\"],[\"M-6,-6 A12,24 0 0,0 6,-6 L0,6Z\"]],r\u003d!1}var u\u003dn.select(this).select(\"g.legendpoints\").selectAll(\"path.legend3dandfriends\").data(o);u.enter().append(\"path\").classed(\"legend3dandfriends\",!0).attr(\"transform\",_).style(\"stroke-miterlimit\",1),u.exit().remove(),u.each((function(t,o){var u,f\u003dn.select(this),h\u003dc(i),p\u003dh.colorscale,m\u003dh.reversescale;if(p){if(!r){var g\u003dp.length;u\u003d0\u003d\u003d\u003do?p[m?g-1:0][1]:1\u003d\u003d\u003do?p[m?0:g-1][1]:p[Math.floor((g-1)/2)][1]}}else{var v\u003di.vertexcolor||i.facecolor||i.color;u\u003da.isArrayOrTypedArray(v)?v[o]||v[0]:v}f.attr(\"d\",t[0]),u?f.call(l.fill,u):f.call((function(t){if(t.size()){var n\u003d\"legendfill-\"+i.uid;s.gradient(t,e,n,d(m,\"radial\"\u003d\u003d\u003dr),p,\"fill\")}}))}))})).each((function(t){var e\u003dt[0].trace,r\u003d\"waterfall\"\u003d\u003d\u003de.type;if(t[0]._distinct\u0026\u0026r){var i\u003dt[0].trace[t[0].dir].marker;return t[0].mc\u003di.color,t[0].mlw\u003di.line.width,t[0].mlc\u003di.line.color,T(t,this,\"waterfall\")}var a\u003d[];e.visible\u0026\u0026r\u0026\u0026(a\u003dt[0].hasTotals?[[\"increasing\",\"M-6,-6V6H0Z\"],[\"totals\",\"M6,6H0L-6,-6H-0Z\"],[\"decreasing\",\"M6,6V-6H0Z\"]]:[[\"increasing\",\"M-6,-6V6H6Z\"],[\"decreasing\",\"M6,6V-6H-6Z\"]]);var o\u003dn.select(this).select(\"g.legendpoints\").selectAll(\"path.legendwaterfall\").data(a);o.enter().append(\"path\").classed(\"legendwaterfall\",!0).attr(\"transform\",_).style(\"stroke-miterlimit\",1),o.exit().remove(),o.each((function(t){var r\u003dn.select(this),i\u003de[t[0]].marker,a\u003dw(void 0,i.line,5,2);r.attr(\"d\",t[1]).style(\"stroke-width\",a+\"px\").call(l.fill,i.color),a\u0026\u0026r.call(l.stroke,i.line.color)}))})).each((function(t){T(t,this,\"funnel\")})).each((function(t){T(t,this)})).each((function(t){var r\u003dt[0].trace,o\u003dn.select(this).select(\"g.legendpoints\").selectAll(\"path.legendbox\").data(r.visible\u0026\u0026i.traceIs(r,\"box-violin\")?[t]:[]);o.enter().append(\"path\").classed(\"legendbox\",!0).attr(\"d\",\"M6,6H-6V-6H6Z\").attr(\"transform\",_),o.exit().remove(),o.each((function(){var t\u003dn.select(this);if(\"all\"!\u003d\u003dr.boxpoints\u0026\u0026\"all\"!\u003d\u003dr.points||0!\u003d\u003dl.opacity(r.fillcolor)||0!\u003d\u003dl.opacity((r.line||{}).color)){var i\u003dw(void 0,r.line,5,2);t.style(\"stroke-width\",i+\"px\").call(l.fill,r.fillcolor),i\u0026\u0026l.stroke(t,r.line.color)}else{var c\u003da.minExtend(r,{marker:{size:y?12:a.constrain(r.marker.size,2,16),sizeref:1,sizemin:1,sizemode:\"diameter\"}});o.call(s.pointStyle,c,e)}}))})).each((function(t){k(t,this,\"funnelarea\")})).each((function(t){k(t,this,\"pie\")})).each((function(t){var r,i,o\u003dm(t),l\u003do.showFill,f\u003do.showLine,h\u003do.showGradientLine,p\u003do.showGradientFill,g\u003do.anyFill,v\u003do.anyLine,y\u003dt[0],b\u003dy.trace,_\u003dc(b),T\u003d_.colorscale,k\u003d_.reversescale,M\u003du.hasMarkers(b)||!g?\"M5,0\":v?\"M5,-2\":\"M5,-3\",A\u003dn.select(this),S\u003dA.select(\".legendfill\").selectAll(\"path\").data(l||p?[t]:[]);if(S.enter().append(\"path\").classed(\"js-fill\",!0),S.exit().remove(),S.attr(\"d\",M+\"h\"+x+\"v6h-\"+x+\"z\").call(l?s.fillGroupStyle:function(t){if(t.size()){var r\u003d\"legendfill-\"+b.uid;s.gradient(t,e,r,d(k),T,\"fill\")}}),f||h){var E\u003dw(void 0,b.line,10,5);i\u003da.minExtend(b,{line:{width:E}}),r\u003d[a.minExtend(y,{trace:i})]}var L\u003dA.select(\".legendlines\").selectAll(\"path\").data(f||h?[r]:[]);L.enter().append(\"path\").classed(\"js-line\",!0),L.exit().remove(),L.attr(\"d\",M+(h?\"l\"+x+\",0.0001\":\"h\"+x)).call(f?s.lineGroupStyle:function(t){if(t.size()){var r\u003d\"legendline-\"+b.uid;s.lineGroupStyle(t),s.gradient(t,e,r,d(k),T,\"stroke\")}})})).each((function(t){var r,i,o\u003dm(t),l\u003do.anyFill,c\u003do.anyLine,f\u003do.showLine,h\u003do.showMarker,p\u003dt[0],d\u003dp.trace,g\u003d!h\u0026\u0026!c\u0026\u0026!l\u0026\u0026u.hasText(d);function v(t,e,r,n){var i\u003da.nestedProperty(d,t).get(),o\u003da.isArrayOrTypedArray(i)\u0026\u0026e?e(i):i;if(y\u0026\u0026o\u0026\u0026void 0!\u003d\u003dn\u0026\u0026(o\u003dn),r){if(o\u003cr[0])return r[0];if(o\u003er[1])return r[1]}return o}function x(t){return p._distinct\u0026\u0026p.index\u0026\u0026t[p.index]?t[p.index]:t[0]}if(h||g||f){var b\u003d{},w\u003d{};if(h){b.mc\u003dv(\"marker.color\",x),b.mx\u003dv(\"marker.symbol\",x),b.mo\u003dv(\"marker.opacity\",a.mean,[.2,1]),b.mlc\u003dv(\"marker.line.color\",x),b.mlw\u003dv(\"marker.line.width\",a.mean,[0,5],2),w.marker\u003d{sizeref:1,sizemin:1,sizemode:\"diameter\"};var T\u003dv(\"marker.size\",a.mean,[2,16],12);b.ms\u003dT,w.marker.size\u003dT}f\u0026\u0026(w.line\u003d{width:v(\"line.width\",x,[0,10],5)}),g\u0026\u0026(b.tx\u003d\"Aa\",b.tp\u003dv(\"textposition\",x),b.ts\u003d10,b.tc\u003dv(\"textfont.color\",x),b.tf\u003dv(\"textfont.family\",x)),r\u003d[a.minExtend(p,b)],(i\u003da.minExtend(d,w)).selectedpoints\u003dnull,i.texttemplate\u003dnull}var k\u003dn.select(this).select(\"g.legendpoints\"),M\u003dk.selectAll(\"path.scatterpts\").data(h?r:[]);M.enter().insert(\"path\",\":first-child\").classed(\"scatterpts\",!0).attr(\"transform\",_),M.exit().remove(),M.call(s.pointStyle,i,e),h\u0026\u0026(r[0].mrc\u003d3);var A\u003dk.selectAll(\"g.pointtext\").data(g?r:[]);A.enter().append(\"g\").classed(\"pointtext\",!0).append(\"text\").attr(\"transform\",_),A.exit().remove(),A.selectAll(\"text\").call(s.textPointStyle,i,e)})).each((function(t){var e\u003dt[0].trace,r\u003dn.select(this).select(\"g.legendpoints\").selectAll(\"path.legendcandle\").data(e.visible\u0026\u0026\"candlestick\"\u003d\u003d\u003de.type?[t,t]:[]);r.enter().append(\"path\").classed(\"legendcandle\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H-8M-8,6V-6H8Z\":\"M15,0H8M8,-6V6H-8Z\"})).attr(\"transform\",_).style(\"stroke-miterlimit\",1),r.exit().remove(),r.each((function(t,r){var i\u003dn.select(this),a\u003de[r?\"increasing\":\"decreasing\"],o\u003dw(void 0,a.line,5,2);i.style(\"stroke-width\",o+\"px\").call(l.fill,a.fillcolor),o\u0026\u0026l.stroke(i,a.line.color)}))})).each((function(t){var e\u003dt[0].trace,r\u003dn.select(this).select(\"g.legendpoints\").selectAll(\"path.legendohlc\").data(e.visible\u0026\u0026\"ohlc\"\u003d\u003d\u003de.type?[t,t]:[]);r.enter().append(\"path\").classed(\"legendohlc\",!0).attr(\"d\",(function(t,e){return e?\"M-15,0H0M-8,-6V0\":\"M15,0H0M8,6V0\"})).attr(\"transform\",_).style(\"stroke-miterlimit\",1),r.exit().remove(),r.each((function(t,r){var i\u003dn.select(this),a\u003de[r?\"increasing\":\"decreasing\"],o\u003dw(void 0,a.line,5,2);i.style(\"fill\",\"none\").call(s.dashLine,a.line.dash,o),o\u0026\u0026l.stroke(i,a.line.color)}))}))}},{\"../../lib\":799,\"../../registry\":927,\"../../traces/pie/helpers\":1193,\"../../traces/pie/style_one\":1199,\"../../traces/scatter/subtypes\":1239,\"../color\":662,\"../colorscale/helpers\":673,\"../drawing\":684,\"./constants\":713,\"@plotly/d3\":58}],721:[function(t,e,r){\"use strict\";t(\"./constants\");e.exports\u003d{editType:\"modebar\",orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\",editType:\"modebar\"},bgcolor:{valType:\"color\",editType:\"modebar\"},color:{valType:\"color\",editType:\"modebar\"},activecolor:{valType:\"color\",editType:\"modebar\"},uirevision:{valType:\"any\",editType:\"none\"},add:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\"},remove:{valType:\"string\",arrayOk:!0,dflt:\"\",editType:\"modebar\"}}},{\"./constants\":723}],722:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../plots/plots\"),a\u003dt(\"../../plots/cartesian/axis_ids\"),o\u003dt(\"../../fonts/ploticon\"),s\u003dt(\"../shapes/draw\").eraseActiveShape,l\u003dt(\"../../lib\"),c\u003dl._,u\u003de.exports\u003d{};function f(t,e){var r,i,o\u003de.currentTarget,s\u003do.getAttribute(\"data-attr\"),l\u003do.getAttribute(\"data-val\")||!0,c\u003dt._fullLayout,u\u003d{},f\u003da.list(t,null,!0),h\u003dc._cartesianSpikesEnabled;if(\"zoom\"\u003d\u003d\u003ds){var p,d\u003d\"in\"\u003d\u003d\u003dl?.5:2,m\u003d(1+d)/2,g\u003d(1-d)/2;for(i\u003d0;i\u003cf.length;i++)if(!(r\u003df[i]).fixedrange)if(p\u003dr._name,\"auto\"\u003d\u003d\u003dl)u[p+\".autorange\"]\u003d!0;else if(\"reset\"\u003d\u003d\u003dl){if(void 0\u003d\u003d\u003dr._rangeInitial)u[p+\".autorange\"]\u003d!0;else{var v\u003dr._rangeInitial.slice();u[p+\".range[0]\"]\u003dv[0],u[p+\".range[1]\"]\u003dv[1]}void 0!\u003d\u003dr._showSpikeInitial\u0026\u0026(u[p+\".showspikes\"]\u003dr._showSpikeInitial,\"on\"!\u003d\u003dh||r._showSpikeInitial||(h\u003d\"off\"))}else{var y\u003d[r.r2l(r.range[0]),r.r2l(r.range[1])],x\u003d[m*y[0]+g*y[1],m*y[1]+g*y[0]];u[p+\".range[0]\"]\u003dr.l2r(x[0]),u[p+\".range[1]\"]\u003dr.l2r(x[1])}}else\"hovermode\"!\u003d\u003ds||\"x\"!\u003d\u003dl\u0026\u0026\"y\"!\u003d\u003dl||(l\u003dc._isHoriz?\"y\":\"x\",o.setAttribute(\"data-val\",l)),u[s]\u003dl;c._cartesianSpikesEnabled\u003dh,n.call(\"_guiRelayout\",t,u)}function h(t,e){for(var r\u003de.currentTarget,i\u003dr.getAttribute(\"data-attr\"),a\u003dr.getAttribute(\"data-val\")||!0,o\u003dt._fullLayout._subplots.gl3d||[],s\u003d{},l\u003di.split(\".\"),c\u003d0;c\u003co.length;c++)s[o[c]+\".\"+l[1]]\u003da;var u\u003d\"pan\"\u003d\u003d\u003da?a:\"zoom\";s.dragmode\u003du,n.call(\"_guiRelayout\",t,s)}function p(t,e){for(var r\u003de.currentTarget.getAttribute(\"data-attr\"),i\u003d\"resetLastSave\"\u003d\u003d\u003dr,a\u003d\"resetDefault\"\u003d\u003d\u003dr,o\u003dt._fullLayout,s\u003do._subplots.gl3d||[],l\u003d{},c\u003d0;c\u003cs.length;c++){var u,f\u003ds[c],h\u003df+\".camera\",p\u003df+\".aspectratio\",d\u003df+\".aspectmode\",m\u003do[f]._scene;i?(l[h+\".up\"]\u003dm.viewInitial.up,l[h+\".eye\"]\u003dm.viewInitial.eye,l[h+\".center\"]\u003dm.viewInitial.center,u\u003d!0):a\u0026\u0026(l[h+\".up\"]\u003dnull,l[h+\".eye\"]\u003dnull,l[h+\".center\"]\u003dnull,u\u003d!0),u\u0026\u0026(l[p+\".x\"]\u003dm.viewInitial.aspectratio.x,l[p+\".y\"]\u003dm.viewInitial.aspectratio.y,l[p+\".z\"]\u003dm.viewInitial.aspectratio.z,l[d]\u003dm.viewInitial.aspectmode)}n.call(\"_guiRelayout\",t,l)}function d(t,e){var r\u003de.currentTarget,n\u003dr._previousVal,i\u003dt._fullLayout,a\u003di._subplots.gl3d||[],o\u003d[\"xaxis\",\"yaxis\",\"zaxis\"],s\u003d{},l\u003d{};if(n)l\u003dn,r._previousVal\u003dnull;else{for(var c\u003d0;c\u003ca.length;c++){var u\u003da[c],f\u003di[u],h\u003du+\".hovermode\";s[h]\u003df.hovermode,l[h]\u003d!1;for(var p\u003d0;p\u003c3;p++){var d\u003do[p],m\u003du+\".\"+d+\".showspikes\";l[m]\u003d!1,s[m]\u003df[d].showspikes}}r._previousVal\u003ds}return l}function m(t,e){for(var r\u003de.currentTarget,i\u003dr.getAttribute(\"data-attr\"),a\u003dr.getAttribute(\"data-val\")||!0,o\u003dt._fullLayout,s\u003do._subplots.geo||[],l\u003d0;l\u003cs.length;l++){var c\u003ds[l],u\u003do[c];if(\"zoom\"\u003d\u003d\u003di){var f\u003du.projection.scale,h\u003d\"in\"\u003d\u003d\u003da?2*f:.5*f;n.call(\"_guiRelayout\",t,c+\".projection.scale\",h)}}\"reset\"\u003d\u003d\u003di\u0026\u0026x(t,\"geo\")}function g(t){var e\u003dt._fullLayout;return!e.hovermode\u0026\u0026(e._has(\"cartesian\")?e._isHoriz?\"y\":\"x\":\"closest\")}function v(t){var e\u003dg(t);n.call(\"_guiRelayout\",t,\"hovermode\",e)}function y(t,e){for(var r\u003de.currentTarget.getAttribute(\"data-val\"),i\u003dt._fullLayout,a\u003di._subplots.mapbox||[],o\u003d{},s\u003d0;s\u003ca.length;s++){var l\u003da[s],c\u003di[l].zoom,u\u003d\"in\"\u003d\u003d\u003dr?1.05*c:c/1.05;o[l+\".zoom\"]\u003du}n.call(\"_guiRelayout\",t,o)}function x(t,e){for(var r\u003dt._fullLayout,i\u003dr._subplots[e]||[],a\u003d{},o\u003d0;o\u003ci.length;o++)for(var s\u003di[o],l\u003dr[s]._subplot.viewInitial,c\u003dObject.keys(l),u\u003d0;u\u003cc.length;u++){var f\u003dc[u];a[s+\".\"+f]\u003dl[f]}n.call(\"_guiRelayout\",t,a)}u.toImage\u003d{name:\"toImage\",title:function(t){var e\u003d(t._context.toImageButtonOptions||{}).format||\"png\";return c(t,\"png\"\u003d\u003d\u003de?\"Download plot as a png\":\"Download plot\")},icon:o.camera,click:function(t){var e\u003dt._context.toImageButtonOptions,r\u003d{format:e.format||\"png\"};l.notifier(c(t,\"Taking snapshot - this may take a few seconds\"),\"long\"),\"svg\"!\u003d\u003dr.format\u0026\u0026l.isIE()\u0026\u0026(l.notifier(c(t,\"IE only supports svg.  Changing format to svg.\"),\"long\"),r.format\u003d\"svg\"),[\"filename\",\"width\",\"height\",\"scale\"].forEach((function(t){t in e\u0026\u0026(r[t]\u003de[t])})),n.call(\"downloadImage\",t,r).then((function(e){l.notifier(c(t,\"Snapshot succeeded\")+\" - \"+e,\"long\")})).catch((function(){l.notifier(c(t,\"Sorry, there was a problem downloading your snapshot!\"),\"long\")}))}},u.sendDataToCloud\u003d{name:\"sendDataToCloud\",title:function(t){return c(t,\"Edit in Chart Studio\")},icon:o.disk,click:function(t){i.sendDataToCloud(t)}},u.editInChartStudio\u003d{name:\"editInChartStudio\",title:function(t){return c(t,\"Edit in Chart Studio\")},icon:o.pencil,click:function(t){i.sendDataToCloud(t)}},u.zoom2d\u003d{name:\"zoom2d\",_cat:\"zoom\",title:function(t){return c(t,\"Zoom\")},attr:\"dragmode\",val:\"zoom\",icon:o.zoombox,click:f},u.pan2d\u003d{name:\"pan2d\",_cat:\"pan\",title:function(t){return c(t,\"Pan\")},attr:\"dragmode\",val:\"pan\",icon:o.pan,click:f},u.select2d\u003d{name:\"select2d\",_cat:\"select\",title:function(t){return c(t,\"Box Select\")},attr:\"dragmode\",val:\"select\",icon:o.selectbox,click:f},u.lasso2d\u003d{name:\"lasso2d\",_cat:\"lasso\",title:function(t){return c(t,\"Lasso Select\")},attr:\"dragmode\",val:\"lasso\",icon:o.lasso,click:f},u.drawclosedpath\u003d{name:\"drawclosedpath\",title:function(t){return c(t,\"Draw closed freeform\")},attr:\"dragmode\",val:\"drawclosedpath\",icon:o.drawclosedpath,click:f},u.drawopenpath\u003d{name:\"drawopenpath\",title:function(t){return c(t,\"Draw open freeform\")},attr:\"dragmode\",val:\"drawopenpath\",icon:o.drawopenpath,click:f},u.drawline\u003d{name:\"drawline\",title:function(t){return c(t,\"Draw line\")},attr:\"dragmode\",val:\"drawline\",icon:o.drawline,click:f},u.drawrect\u003d{name:\"drawrect\",title:function(t){return c(t,\"Draw rectangle\")},attr:\"dragmode\",val:\"drawrect\",icon:o.drawrect,click:f},u.drawcircle\u003d{name:\"drawcircle\",title:function(t){return c(t,\"Draw circle\")},attr:\"dragmode\",val:\"drawcircle\",icon:o.drawcircle,click:f},u.eraseshape\u003d{name:\"eraseshape\",title:function(t){return c(t,\"Erase active shape\")},icon:o.eraseshape,click:s},u.zoomIn2d\u003d{name:\"zoomIn2d\",_cat:\"zoomin\",title:function(t){return c(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:f},u.zoomOut2d\u003d{name:\"zoomOut2d\",_cat:\"zoomout\",title:function(t){return c(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:f},u.autoScale2d\u003d{name:\"autoScale2d\",_cat:\"autoscale\",title:function(t){return c(t,\"Autoscale\")},attr:\"zoom\",val:\"auto\",icon:o.autoscale,click:f},u.resetScale2d\u003d{name:\"resetScale2d\",_cat:\"resetscale\",title:function(t){return c(t,\"Reset axes\")},attr:\"zoom\",val:\"reset\",icon:o.home,click:f},u.hoverClosestCartesian\u003d{name:\"hoverClosestCartesian\",_cat:\"hoverclosest\",title:function(t){return c(t,\"Show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:o.tooltip_basic,gravity:\"ne\",click:f},u.hoverCompareCartesian\u003d{name:\"hoverCompareCartesian\",_cat:\"hoverCompare\",title:function(t){return c(t,\"Compare data on hover\")},attr:\"hovermode\",val:function(t){return t._fullLayout._isHoriz?\"y\":\"x\"},icon:o.tooltip_compare,gravity:\"ne\",click:f},u.zoom3d\u003d{name:\"zoom3d\",_cat:\"zoom\",title:function(t){return c(t,\"Zoom\")},attr:\"scene.dragmode\",val:\"zoom\",icon:o.zoombox,click:h},u.pan3d\u003d{name:\"pan3d\",_cat:\"pan\",title:function(t){return c(t,\"Pan\")},attr:\"scene.dragmode\",val:\"pan\",icon:o.pan,click:h},u.orbitRotation\u003d{name:\"orbitRotation\",title:function(t){return c(t,\"Orbital rotation\")},attr:\"scene.dragmode\",val:\"orbit\",icon:o[\"3d_rotate\"],click:h},u.tableRotation\u003d{name:\"tableRotation\",title:function(t){return c(t,\"Turntable rotation\")},attr:\"scene.dragmode\",val:\"turntable\",icon:o[\"z-axis\"],click:h},u.resetCameraDefault3d\u003d{name:\"resetCameraDefault3d\",_cat:\"resetCameraDefault\",title:function(t){return c(t,\"Reset camera to default\")},attr:\"resetDefault\",icon:o.home,click:p},u.resetCameraLastSave3d\u003d{name:\"resetCameraLastSave3d\",_cat:\"resetCameraLastSave\",title:function(t){return c(t,\"Reset camera to last save\")},attr:\"resetLastSave\",icon:o.movie,click:p},u.hoverClosest3d\u003d{name:\"hoverClosest3d\",_cat:\"hoverclosest\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:function(t,e){var r\u003dd(t,e);n.call(\"_guiRelayout\",t,r)}},u.zoomInGeo\u003d{name:\"zoomInGeo\",_cat:\"zoomin\",title:function(t){return c(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:m},u.zoomOutGeo\u003d{name:\"zoomOutGeo\",_cat:\"zoomout\",title:function(t){return c(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:m},u.resetGeo\u003d{name:\"resetGeo\",_cat:\"reset\",title:function(t){return c(t,\"Reset\")},attr:\"reset\",val:null,icon:o.autoscale,click:m},u.hoverClosestGeo\u003d{name:\"hoverClosestGeo\",_cat:\"hoverclosest\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:v},u.hoverClosestGl2d\u003d{name:\"hoverClosestGl2d\",_cat:\"hoverclosest\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:v},u.hoverClosestPie\u003d{name:\"hoverClosestPie\",_cat:\"hoverclosest\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:\"closest\",icon:o.tooltip_basic,gravity:\"ne\",click:v},u.resetViewSankey\u003d{name:\"resetSankeyGroup\",title:function(t){return c(t,\"Reset view\")},icon:o.home,click:function(t){for(var e\u003d{\"node.groups\":[],\"node.x\":[],\"node.y\":[]},r\u003d0;r\u003ct._fullData.length;r++){var i\u003dt._fullData[r]._viewInitial;e[\"node.groups\"].push(i.node.groups.slice()),e[\"node.x\"].push(i.node.x.slice()),e[\"node.y\"].push(i.node.y.slice())}n.call(\"restyle\",t,e)}},u.toggleHover\u003d{name:\"toggleHover\",title:function(t){return c(t,\"Toggle show closest data on hover\")},attr:\"hovermode\",val:null,toggle:!0,icon:o.tooltip_basic,gravity:\"ne\",click:function(t,e){var r\u003dd(t,e);r.hovermode\u003dg(t),n.call(\"_guiRelayout\",t,r)}},u.resetViews\u003d{name:\"resetViews\",title:function(t){return c(t,\"Reset views\")},icon:o.home,click:function(t,e){var r\u003de.currentTarget;r.setAttribute(\"data-attr\",\"zoom\"),r.setAttribute(\"data-val\",\"reset\"),f(t,e),r.setAttribute(\"data-attr\",\"resetLastSave\"),p(t,e),x(t,\"geo\"),x(t,\"mapbox\")}},u.toggleSpikelines\u003d{name:\"toggleSpikelines\",title:function(t){return c(t,\"Toggle Spike Lines\")},icon:o.spikeline,attr:\"_cartesianSpikesEnabled\",val:\"on\",click:function(t){var e\u003dt._fullLayout,r\u003de._cartesianSpikesEnabled;e._cartesianSpikesEnabled\u003d\"on\"\u003d\u003d\u003dr?\"off\":\"on\",n.call(\"_guiRelayout\",t,function(t){for(var e\u003d\"on\"\u003d\u003d\u003dt._fullLayout._cartesianSpikesEnabled,r\u003da.list(t,null,!0),n\u003d{},i\u003d0;i\u003cr.length;i++){var o\u003dr[i];n[o._name+\".showspikes\"]\u003d!!e||o._showSpikeInitial}return n}(t))}},u.resetViewMapbox\u003d{name:\"resetViewMapbox\",_cat:\"resetView\",title:function(t){return c(t,\"Reset view\")},attr:\"reset\",icon:o.home,click:function(t){x(t,\"mapbox\")}},u.zoomInMapbox\u003d{name:\"zoomInMapbox\",_cat:\"zoomin\",title:function(t){return c(t,\"Zoom in\")},attr:\"zoom\",val:\"in\",icon:o.zoom_plus,click:y},u.zoomOutMapbox\u003d{name:\"zoomOutMapbox\",_cat:\"zoomout\",title:function(t){return c(t,\"Zoom out\")},attr:\"zoom\",val:\"out\",icon:o.zoom_minus,click:y}},{\"../../fonts/ploticon\":778,\"../../lib\":799,\"../../plots/cartesian/axis_ids\":853,\"../../plots/plots\":913,\"../../registry\":927,\"../shapes/draw\":746}],723:[function(t,e,r){\"use strict\";var n\u003dt(\"./buttons\"),i\u003dObject.keys(n),a\u003d[\"drawline\",\"drawopenpath\",\"drawclosedpath\",\"drawcircle\",\"drawrect\",\"eraseshape\"],o\u003d[\"v1hovermode\",\"hoverclosest\",\"hovercompare\",\"togglehover\",\"togglespikelines\"].concat(a),s\u003d[];i.forEach((function(t){!function(t){if(-1\u003d\u003d\u003do.indexOf(t._cat||t.name)){var e\u003dt.name,r\u003d(t._cat||t.name).toLowerCase();-1\u003d\u003d\u003ds.indexOf(e)\u0026\u0026s.push(e),-1\u003d\u003d\u003ds.indexOf(r)\u0026\u0026s.push(r)}}(n[t])})),s.sort(),e.exports\u003d{DRAW_MODES:a,backButtons:o,foreButtons:s}},{\"./buttons\":722}],724:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../color\"),a\u003dt(\"../../plot_api/plot_template\"),o\u003dt(\"./attributes\");e.exports\u003dfunction(t,e){var r\u003dt.modebar||{},s\u003da.newContainer(e,\"modebar\");function l(t,e){return n.coerce(r,s,o,t,e)}l(\"orientation\"),l(\"bgcolor\",i.addOpacity(e.paper_bgcolor,.5));var c\u003di.contrast(i.rgb(e.modebar.bgcolor));l(\"color\",i.addOpacity(c,.3)),l(\"activecolor\",i.addOpacity(c,.7)),l(\"uirevision\",e.uirevision),l(\"add\"),l(\"remove\")}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../color\":662,\"./attributes\":721}],725:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"component\",name:\"modebar\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),manage:t(\"./manage\")}},{\"./attributes\":721,\"./defaults\":724,\"./manage\":726}],726:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axis_ids\"),i\u003dt(\"../../traces/scatter/subtypes\"),a\u003dt(\"../../registry\"),o\u003dt(\"../fx/helpers\").isUnifiedHover,s\u003dt(\"./modebar\"),l\u003dt(\"./buttons\"),c\u003dt(\"./constants\").DRAW_MODES;e.exports\u003dfunction(t){var e\u003dt._fullLayout,r\u003dt._context,u\u003de._modeBar;if(r.displayModeBar||r.watermark){if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error([\"*modeBarButtonsToRemove* configuration options\",\"must be an array.\"].join(\" \"));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error([\"*modeBarButtonsToAdd* configuration options\",\"must be an array.\"].join(\" \"));var f,h\u003dr.modeBarButtons;f\u003dArray.isArray(h)\u0026\u0026h.length?function(t){for(var e\u003d0;e\u003ct.length;e++)for(var r\u003dt[e],n\u003d0;n\u003cr.length;n++){var i\u003dr[n];if(\"string\"\u003d\u003dtypeof i){if(void 0\u003d\u003d\u003dl[i])throw new Error([\"*modeBarButtons* configuration options\",\"invalid button name\"].join(\" \"));t[e][n]\u003dl[i]}}return t}(h):!r.displayModeBar\u0026\u0026r.watermark?[]:function(t){var e\u003dt._fullLayout,r\u003dt._fullData,s\u003dt._context;function u(t,e){if(\"string\"\u003d\u003dtypeof e){if(e.toLowerCase()\u003d\u003d\u003dt.toLowerCase())return!0}else{var r\u003de.name,n\u003de._cat||e.name;if(r\u003d\u003d\u003dt||n\u003d\u003d\u003dt.toLowerCase())return!0}return!1}var f\u003de.modebar.add;\"string\"\u003d\u003dtypeof f\u0026\u0026(f\u003d[f]);var h\u003de.modebar.remove;\"string\"\u003d\u003dtypeof h\u0026\u0026(h\u003d[h]);var p\u003ds.modeBarButtonsToAdd.concat(f.filter((function(t){for(var e\u003d0;e\u003cs.modeBarButtonsToRemove.length;e++)if(u(t,s.modeBarButtonsToRemove[e]))return!1;return!0}))),d\u003ds.modeBarButtonsToRemove.concat(h.filter((function(t){for(var e\u003d0;e\u003cs.modeBarButtonsToAdd.length;e++)if(u(t,s.modeBarButtonsToAdd[e]))return!1;return!0}))),m\u003de._has(\"cartesian\"),g\u003de._has(\"gl3d\"),v\u003de._has(\"geo\"),y\u003de._has(\"pie\"),x\u003de._has(\"funnelarea\"),b\u003de._has(\"gl2d\"),_\u003de._has(\"ternary\"),w\u003de._has(\"mapbox\"),T\u003de._has(\"polar\"),k\u003de._has(\"sankey\"),M\u003dfunction(t){for(var e\u003dn.list({_fullLayout:t},null,!0),r\u003d0;r\u003ce.length;r++)if(!e[r].fixedrange)return!1;return!0}(e),A\u003do(e.hovermode),S\u003d[];function E(t){if(t.length){for(var e\u003d[],r\u003d0;r\u003ct.length;r++){for(var n\u003dt[r],i\u003dl[n],a\u003di.name.toLowerCase(),o\u003d(i._cat||i.name).toLowerCase(),s\u003d!1,c\u003d0;c\u003cd.length;c++){var u\u003dd[c].toLowerCase();if(u\u003d\u003d\u003da||u\u003d\u003d\u003do){s\u003d!0;break}}s||e.push(l[n])}S.push(e)}}var L\u003d[\"toImage\"];s.showEditInChartStudio?L.push(\"editInChartStudio\"):s.showSendToCloud\u0026\u0026L.push(\"sendDataToCloud\");E(L);var C\u003d[],P\u003d[],I\u003d[],O\u003d[];(m||b||y||x||_)+v+g+w+T\u003e1?(P\u003d[\"toggleHover\"],I\u003d[\"resetViews\"]):v?(C\u003d[\"zoomInGeo\",\"zoomOutGeo\"],P\u003d[\"hoverClosestGeo\"],I\u003d[\"resetGeo\"]):g?(P\u003d[\"hoverClosest3d\"],I\u003d[\"resetCameraDefault3d\",\"resetCameraLastSave3d\"]):w?(C\u003d[\"zoomInMapbox\",\"zoomOutMapbox\"],P\u003d[\"toggleHover\"],I\u003d[\"resetViewMapbox\"]):b?P\u003d[\"hoverClosestGl2d\"]:y?P\u003d[\"hoverClosestPie\"]:k?(P\u003d[\"hoverClosestCartesian\",\"hoverCompareCartesian\"],I\u003d[\"resetViewSankey\"]):P\u003d[\"toggleHover\"];m\u0026\u0026(P\u003d[\"toggleSpikelines\",\"hoverClosestCartesian\",\"hoverCompareCartesian\"]);(function(t){for(var e\u003d0;e\u003ct.length;e++)if(!a.traceIs(t[e],\"noHover\"))return!1;return!0}(r)||A)\u0026\u0026(P\u003d[]);!m\u0026\u0026!b||M||(C\u003d[\"zoomIn2d\",\"zoomOut2d\",\"autoScale2d\"],\"resetViews\"!\u003d\u003dI[0]\u0026\u0026(I\u003d[\"resetScale2d\"]));g?O\u003d[\"zoom3d\",\"pan3d\",\"orbitRotation\",\"tableRotation\"]:(m||b)\u0026\u0026!M||_?O\u003d[\"zoom2d\",\"pan2d\"]:w||v?O\u003d[\"pan2d\"]:T\u0026\u0026(O\u003d[\"zoom2d\"]);(function(t){for(var e\u003d!1,r\u003d0;r\u003ct.length\u0026\u0026!e;r++){var n\u003dt[r];n._module\u0026\u0026n._module.selectPoints\u0026\u0026(a.traceIs(n,\"scatter-like\")?(i.hasMarkers(n)||i.hasText(n))\u0026\u0026(e\u003d!0):a.traceIs(n,\"box-violin\")\u0026\u0026\"all\"!\u003d\u003dn.boxpoints\u0026\u0026\"all\"!\u003d\u003dn.points||(e\u003d!0))}return e})(r)\u0026\u0026O.push(\"select2d\",\"lasso2d\");var z\u003d[],D\u003dfunction(t){-1\u003d\u003d\u003dz.indexOf(t)\u0026\u0026-1!\u003d\u003dP.indexOf(t)\u0026\u0026z.push(t)};if(Array.isArray(p)){for(var R\u003d[],F\u003d0;F\u003cp.length;F++){var B\u003dp[F];\"string\"\u003d\u003dtypeof B?(B\u003dB.toLowerCase(),-1!\u003d\u003dc.indexOf(B)?(e._has(\"mapbox\")||e._has(\"cartesian\"))\u0026\u0026O.push(B):\"togglespikelines\"\u003d\u003d\u003dB?D(\"toggleSpikelines\"):\"togglehover\"\u003d\u003d\u003dB?D(\"toggleHover\"):\"hovercompare\"\u003d\u003d\u003dB?D(\"hoverCompareCartesian\"):\"hoverclosest\"\u003d\u003d\u003dB?(D(\"hoverClosestCartesian\"),D(\"hoverClosestGeo\"),D(\"hoverClosest3d\"),D(\"hoverClosestGl2d\"),D(\"hoverClosestPie\")):\"v1hovermode\"\u003d\u003d\u003dB\u0026\u0026(D(\"toggleHover\"),D(\"hoverClosestCartesian\"),D(\"hoverCompareCartesian\"),D(\"hoverClosestGeo\"),D(\"hoverClosest3d\"),D(\"hoverClosestGl2d\"),D(\"hoverClosestPie\"))):R.push(B)}p\u003dR}return E(O),E(C.concat(I)),E(z),function(t,e){if(e.length)if(Array.isArray(e[0]))for(var r\u003d0;r\u003ce.length;r++)t.push(e[r]);else t.push(e);return t}(S,p)}(t),u?u.update(t,f):e._modeBar\u003ds(t,f)}else u\u0026\u0026(u.destroy(),delete e._modeBar)}},{\"../../plots/cartesian/axis_ids\":853,\"../../registry\":927,\"../../traces/scatter/subtypes\":1239,\"../fx/helpers\":698,\"./buttons\":722,\"./constants\":723,\"./modebar\":727}],727:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../lib\"),o\u003dt(\"../../fonts/ploticon\"),s\u003dnew DOMParser;function l(t){this.container\u003dt.container,this.element\u003ddocument.createElement(\"div\"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}var c\u003dl.prototype;c.update\u003dfunction(t,e){this.graphInfo\u003dt;var r\u003dthis.graphInfo._context,n\u003dthis.graphInfo._fullLayout,i\u003d\"modebar-\"+n._uid;this.element.setAttribute(\"id\",i),this._uid\u003di,this.element.className\u003d\"modebar\",\"hover\"\u003d\u003d\u003dr.displayModeBar\u0026\u0026(this.element.className+\u003d\" modebar--hover ease-bg\"),\"v\"\u003d\u003d\u003dn.modebar.orientation\u0026\u0026(this.element.className+\u003d\" vertical\",e\u003de.reverse());var o\u003dn.modebar,s\u003d\"hover\"\u003d\u003d\u003dr.displayModeBar?\".js-plotly-plot .plotly:hover \":\"\";a.deleteRelatedStyleRule(i),a.addRelatedStyleRule(i,s+\"#\"+i+\" .modebar-group\",\"background-color: \"+o.bgcolor),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn .icon path\",\"fill: \"+o.color),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn:hover .icon path\",\"fill: \"+o.activecolor),a.addRelatedStyleRule(i,\"#\"+i+\" .modebar-btn.active .icon path\",\"fill: \"+o.activecolor);var l\u003d!this.hasButtons(e),c\u003dthis.hasLogo!\u003d\u003dr.displaylogo,u\u003dthis.locale!\u003d\u003dr.locale;if(this.locale\u003dr.locale,(l||c||u)\u0026\u0026(this.removeAllButtons(),this.updateButtons(e),r.watermark||r.displaylogo)){var f\u003dthis.getLogo();r.watermark\u0026\u0026(f.className\u003df.className+\" watermark\"),\"v\"\u003d\u003d\u003dn.modebar.orientation?this.element.insertBefore(f,this.element.childNodes[0]):this.element.appendChild(f),this.hasLogo\u003d!0}this.updateActiveButton()},c.updateButtons\u003dfunction(t){var e\u003dthis;this.buttons\u003dt,this.buttonElements\u003d[],this.buttonsNames\u003d[],this.buttons.forEach((function(t){var r\u003de.createGroup();t.forEach((function(t){var n\u003dt.name;if(!n)throw new Error(\"must provide button \u0027name\u0027 in button config\");if(-1!\u003d\u003de.buttonsNames.indexOf(n))throw new Error(\"button name \u0027\"+n+\"\u0027 is taken\");e.buttonsNames.push(n);var i\u003de.createButton(t);e.buttonElements.push(i),r.appendChild(i)})),e.element.appendChild(r)}))},c.createGroup\u003dfunction(){var t\u003ddocument.createElement(\"div\");return t.className\u003d\"modebar-group\",t},c.createButton\u003dfunction(t){var e\u003dthis,r\u003ddocument.createElement(\"a\");r.setAttribute(\"rel\",\"tooltip\"),r.className\u003d\"modebar-btn\";var i\u003dt.title;void 0\u003d\u003d\u003di?i\u003dt.name:\"function\"\u003d\u003dtypeof i\u0026\u0026(i\u003di(this.graphInfo)),(i||0\u003d\u003d\u003di)\u0026\u0026r.setAttribute(\"data-title\",i),void 0!\u003d\u003dt.attr\u0026\u0026r.setAttribute(\"data-attr\",t.attr);var a\u003dt.val;if(void 0!\u003d\u003da\u0026\u0026(\"function\"\u003d\u003dtypeof a\u0026\u0026(a\u003da(this.graphInfo)),r.setAttribute(\"data-val\",a)),\"function\"!\u003dtypeof t.click)throw new Error(\"must provide button \u0027click\u0027 function in button config\");r.addEventListener(\"click\",(function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)})),r.setAttribute(\"data-toggle\",t.toggle||!1),t.toggle\u0026\u0026n.select(r).classed(\"active\",!0);var s\u003dt.icon;return\"function\"\u003d\u003dtypeof s?r.appendChild(s()):r.appendChild(this.createIcon(s||o.question)),r.setAttribute(\"data-gravity\",t.gravity||\"n\"),r},c.createIcon\u003dfunction(t){var e,r\u003di(t.height)?Number(t.height):t.ascent-t.descent,n\u003d\"http://www.w3.org/2000/svg\";if(t.path){(e\u003ddocument.createElementNS(n,\"svg\")).setAttribute(\"viewBox\",[0,0,t.width,r].join(\" \")),e.setAttribute(\"class\",\"icon\");var a\u003ddocument.createElementNS(n,\"path\");a.setAttribute(\"d\",t.path),t.transform?a.setAttribute(\"transform\",t.transform):void 0!\u003d\u003dt.ascent\u0026\u0026a.setAttribute(\"transform\",\"matrix(1 0 0 -1 0 \"+t.ascent+\")\"),e.appendChild(a)}t.svg\u0026\u0026(e\u003ds.parseFromString(t.svg,\"application/xml\").childNodes[0]);return e.setAttribute(\"height\",\"1em\"),e.setAttribute(\"width\",\"1em\"),e},c.updateActiveButton\u003dfunction(t){var e\u003dthis.graphInfo._fullLayout,r\u003dvoid 0!\u003d\u003dt?t.getAttribute(\"data-attr\"):null;this.buttonElements.forEach((function(t){var i\u003dt.getAttribute(\"data-val\")||!0,o\u003dt.getAttribute(\"data-attr\"),s\u003d\"true\"\u003d\u003d\u003dt.getAttribute(\"data-toggle\"),l\u003dn.select(t);if(s)o\u003d\u003d\u003dr\u0026\u0026l.classed(\"active\",!l.classed(\"active\"));else{var c\u003dnull\u003d\u003d\u003do?o:a.nestedProperty(e,o).get();l.classed(\"active\",c\u003d\u003d\u003di)}}))},c.hasButtons\u003dfunction(t){var e\u003dthis.buttons;if(!e)return!1;if(t.length!\u003d\u003de.length)return!1;for(var r\u003d0;r\u003ct.length;++r){if(t[r].length!\u003d\u003de[r].length)return!1;for(var n\u003d0;n\u003ct[r].length;n++)if(t[r][n].name!\u003d\u003de[r][n].name)return!1}return!0},c.getLogo\u003dfunction(){var t\u003dthis.createGroup(),e\u003ddocument.createElement(\"a\");return e.href\u003d\"https://plotly.com/\",e.target\u003d\"_blank\",e.setAttribute(\"data-title\",a._(this.graphInfo,\"Produced with Plotly\")),e.className\u003d\"modebar-btn plotlyjsicon modebar-btn--logo\",e.appendChild(this.createIcon(o.newplotlylogo)),t.appendChild(e),t},c.removeAllButtons\u003dfunction(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo\u003d!1},c.destroy\u003dfunction(){a.removeElement(this.container.querySelector(\".modebar\")),a.deleteRelatedStyleRule(this._uid)},e.exports\u003dfunction(t,e){var r\u003dt._fullLayout,i\u003dnew l({graphInfo:t,container:r._modebardiv.node(),buttons:e});return r._privateplot\u0026\u0026n.select(i.element).append(\"span\").classed(\"badge-private float--left\",!0).text(\"PRIVATE\"),i}},{\"../../fonts/ploticon\":778,\"../../lib\":799,\"@plotly/d3\":58,\"fast-isnumeric\":245}],728:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"../color/attributes\"),a\u003d(0,t(\"../../plot_api/plot_template\").templatedArray)(\"button\",{visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},step:{valType:\"enumerated\",values:[\"month\",\"year\",\"day\",\"hour\",\"minute\",\"second\",\"all\"],dflt:\"month\",editType:\"plot\"},stepmode:{valType:\"enumerated\",values:[\"backward\",\"todate\"],dflt:\"backward\",editType:\"plot\"},count:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},label:{valType:\"string\",editType:\"plot\"},editType:\"plot\"});e.exports\u003d{visible:{valType:\"boolean\",editType:\"plot\"},buttons:a,x:{valType:\"number\",min:-2,max:3,editType:\"plot\"},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\",editType:\"plot\"},y:{valType:\"number\",min:-2,max:3,editType:\"plot\"},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"bottom\",editType:\"plot\"},font:n({editType:\"plot\"}),bgcolor:{valType:\"color\",dflt:i.lightLine,editType:\"plot\"},activecolor:{valType:\"color\",editType:\"plot\"},bordercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"plot\"},borderwidth:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"}},{\"../../plot_api/plot_template\":838,\"../../plots/font_attributes\":878,\"../color/attributes\":661}],729:[function(t,e,r){\"use strict\";e.exports\u003d{yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},{}],730:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../color\"),a\u003dt(\"../../plot_api/plot_template\"),o\u003dt(\"../../plots/array_container_defaults\"),s\u003dt(\"./attributes\"),l\u003dt(\"./constants\");function c(t,e,r,i){var a\u003di.calendar;function o(r,i){return n.coerce(t,e,s.buttons,r,i)}if(o(\"visible\")){var l\u003do(\"step\");\"all\"!\u003d\u003dl\u0026\u0026(!a||\"gregorian\"\u003d\u003d\u003da||\"month\"!\u003d\u003dl\u0026\u0026\"year\"!\u003d\u003dl?o(\"stepmode\"):e.stepmode\u003d\"backward\",o(\"count\")),o(\"label\")}}e.exports\u003dfunction(t,e,r,u,f){var h\u003dt.rangeselector||{},p\u003da.newContainer(e,\"rangeselector\");function d(t,e){return n.coerce(h,p,s,t,e)}if(d(\"visible\",o(h,p,{name:\"buttons\",handleItemDefaults:c,calendar:f}).length\u003e0)){var m\u003dfunction(t,e,r){for(var n\u003dr.filter((function(r){return e[r].anchor\u003d\u003d\u003dt._id})),i\u003d0,a\u003d0;a\u003cn.length;a++){var o\u003de[n[a]].domain;o\u0026\u0026(i\u003dMath.max(o[1],i))}return[t.domain[0],i+l.yPad]}(e,r,u);d(\"x\",m[0]),d(\"y\",m[1]),n.noneOrAll(t,e,[\"x\",\"y\"]),d(\"xanchor\"),d(\"yanchor\"),n.coerceFont(d,\"font\",r.font);var g\u003dd(\"bgcolor\");d(\"activecolor\",i.contrast(g,l.lightAmount,l.darkAmount)),d(\"bordercolor\"),d(\"borderwidth\")}}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../plots/array_container_defaults\":844,\"../color\":662,\"./attributes\":728,\"./constants\":729}],731:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../plots/plots\"),o\u003dt(\"../color\"),s\u003dt(\"../drawing\"),l\u003dt(\"../../lib\"),c\u003dl.strTranslate,u\u003dt(\"../../lib/svg_text_utils\"),f\u003dt(\"../../plots/cartesian/axis_ids\"),h\u003dt(\"../../constants/alignment\"),p\u003dh.LINE_SPACING,d\u003dh.FROM_TL,m\u003dh.FROM_BR,g\u003dt(\"./constants\"),v\u003dt(\"./get_update_object\");function y(t){return t._id}function x(t,e,r){var n\u003dl.ensureSingle(t,\"rect\",\"selector-rect\",(function(t){t.attr(\"shape-rendering\",\"crispEdges\")}));n.attr({rx:g.rx,ry:g.ry}),n.call(o.stroke,e.bordercolor).call(o.fill,function(t,e){return e._isActive||e._isHovered?t.activecolor:t.bgcolor}(e,r)).style(\"stroke-width\",e.borderwidth+\"px\")}function b(t,e,r,n){l.ensureSingle(t,\"text\",\"selector-text\",(function(t){t.attr(\"text-anchor\",\"middle\")})).call(s.font,e.font).text(function(t,e){if(t.label)return e?l.templateString(t.label,e):t.label;return\"all\"\u003d\u003d\u003dt.step?\"all\":t.count+t.step.charAt(0)}(r,n._fullLayout._meta)).call((function(t){u.convertToTspans(t,n)}))}e.exports\u003dfunction(t){var e\u003dt._fullLayout._infolayer.selectAll(\".rangeselector\").data(function(t){for(var e\u003df.list(t,\"x\",!0),r\u003d[],n\u003d0;n\u003ce.length;n++){var i\u003de[n];i.rangeselector\u0026\u0026i.rangeselector.visible\u0026\u0026r.push(i)}return r}(t),y);e.enter().append(\"g\").classed(\"rangeselector\",!0),e.exit().remove(),e.style({cursor:\"pointer\",\"pointer-events\":\"all\"}),e.each((function(e){var r\u003dn.select(this),o\u003de,f\u003do.rangeselector,h\u003dr.selectAll(\"g.button\").data(l.filterVisible(f.buttons));h.enter().append(\"g\").classed(\"button\",!0),h.exit().remove(),h.each((function(e){var r\u003dn.select(this),a\u003dv(o,e);e._isActive\u003dfunction(t,e,r){if(\"all\"\u003d\u003d\u003de.step)return!0\u003d\u003d\u003dt.autorange;var n\u003dObject.keys(r);return t.range[0]\u003d\u003d\u003dr[n[0]]\u0026\u0026t.range[1]\u003d\u003d\u003dr[n[1]]}(o,e,a),r.call(x,f,e),r.call(b,f,e,t),r.on(\"click\",(function(){t._dragged||i.call(\"_guiRelayout\",t,a)})),r.on(\"mouseover\",(function(){e._isHovered\u003d!0,r.call(x,f,e)})),r.on(\"mouseout\",(function(){e._isHovered\u003d!1,r.call(x,f,e)}))})),function(t,e,r,i,o){var f\u003d0,h\u003d0,v\u003dr.borderwidth;e.each((function(){var t\u003dn.select(this).select(\".selector-text\"),e\u003dr.font.size*p,i\u003dMath.max(e*u.lineCount(t),16)+3;h\u003dMath.max(h,i)})),e.each((function(){var t\u003dn.select(this),e\u003dt.select(\".selector-rect\"),i\u003dt.select(\".selector-text\"),a\u003di.node()\u0026\u0026s.bBox(i.node()).width,o\u003dr.font.size*p,l\u003du.lineCount(i),d\u003dMath.max(a+10,g.minButtonWidth);t.attr(\"transform\",c(v+f,v)),e.attr({x:0,y:0,width:d,height:h}),u.positionText(i,d/2,h/2-(l-1)*o/2+3),f+\u003dd+5}));var y\u003dt._fullLayout._size,x\u003dy.l+y.w*r.x,b\u003dy.t+y.h*(1-r.y),_\u003d\"left\";l.isRightAnchor(r)\u0026\u0026(x-\u003df,_\u003d\"right\");l.isCenterAnchor(r)\u0026\u0026(x-\u003df/2,_\u003d\"center\");var w\u003d\"top\";l.isBottomAnchor(r)\u0026\u0026(b-\u003dh,w\u003d\"bottom\");l.isMiddleAnchor(r)\u0026\u0026(b-\u003dh/2,w\u003d\"middle\");f\u003dMath.ceil(f),h\u003dMath.ceil(h),x\u003dMath.round(x),b\u003dMath.round(b),a.autoMargin(t,i+\"-range-selector\",{x:r.x,y:r.y,l:f*d[_],r:f*m[_],b:h*m[w],t:h*d[w]}),o.attr(\"transform\",c(x,b))}(t,h,f,o._name,r)}))}},{\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axis_ids\":853,\"../../plots/plots\":913,\"../../registry\":927,\"../color\":662,\"../drawing\":684,\"./constants\":729,\"./get_update_object\":732,\"@plotly/d3\":58}],732:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\");e.exports\u003dfunction(t,e){var r\u003dt._name,i\u003d{};if(\"all\"\u003d\u003d\u003de.step)i[r+\".autorange\"]\u003d!0;else{var a\u003dfunction(t,e){var r,i\u003dt.range,a\u003dnew Date(t.r2l(i[1])),o\u003de.step,s\u003de.count;switch(e.stepmode){case\"backward\":r\u003dt.l2r(+n.time[o].utc.offset(a,-s));break;case\"todate\":var l\u003dn.time[o].utc.offset(a,-s);r\u003dt.l2r(+n.time[o].utc.ceil(l))}var c\u003di[1];return[r,c]}(t,e);i[r+\".range[0]\"]\u003da[0],i[r+\".range[1]\"]\u003da[1]}return i}},{\"@plotly/d3\":58}],733:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"component\",name:\"rangeselector\",schema:{subplots:{xaxis:{rangeselector:t(\"./attributes\")}}},layoutAttributes:t(\"./attributes\"),handleDefaults:t(\"./defaults\"),draw:t(\"./draw\")}},{\"./attributes\":728,\"./defaults\":730,\"./draw\":731}],734:[function(t,e,r){\"use strict\";var n\u003dt(\"../color/attributes\");e.exports\u003d{bgcolor:{valType:\"color\",dflt:n.background,editType:\"plot\"},bordercolor:{valType:\"color\",dflt:n.defaultLine,editType:\"plot\"},borderwidth:{valType:\"integer\",dflt:0,min:0,editType:\"plot\"},autorange:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"calc\",impliedEdits:{\"^autorange\":!1}}],editType:\"calc\",impliedEdits:{autorange:!1}},thickness:{valType:\"number\",dflt:.15,min:0,max:1,editType:\"plot\"},visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"}},{\"../color/attributes\":661}],735:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axis_ids\").list,i\u003dt(\"../../plots/cartesian/autorange\").getAutoRange,a\u003dt(\"./constants\");e.exports\u003dfunction(t){for(var e\u003dn(t,\"x\",!0),r\u003d0;r\u003ce.length;r++){var o\u003de[r],s\u003do[a.name];s\u0026\u0026s.visible\u0026\u0026s.autorange\u0026\u0026(s._input.autorange\u003d!0,s._input.range\u003ds.range\u003di(t,o))}}},{\"../../plots/cartesian/autorange\":848,\"../../plots/cartesian/axis_ids\":853,\"./constants\":736}],736:[function(t,e,r){\"use strict\";e.exports\u003d{name:\"rangeslider\",containerClassName:\"rangeslider-container\",bgClassName:\"rangeslider-bg\",rangePlotClassName:\"rangeslider-rangeplot\",maskMinClassName:\"rangeslider-mask-min\",maskMaxClassName:\"rangeslider-mask-max\",slideBoxClassName:\"rangeslider-slidebox\",grabberMinClassName:\"rangeslider-grabber-min\",grabAreaMinClassName:\"rangeslider-grabarea-min\",handleMinClassName:\"rangeslider-handle-min\",grabberMaxClassName:\"rangeslider-grabber-max\",grabAreaMaxClassName:\"rangeslider-grabarea-max\",handleMaxClassName:\"rangeslider-handle-max\",maskMinOppAxisClassName:\"rangeslider-mask-min-opp-axis\",maskMaxOppAxisClassName:\"rangeslider-mask-max-opp-axis\",maskColor:\"rgba(0,0,0,0.4)\",maskOppAxisColor:\"rgba(0,0,0,0.2)\",slideBoxFill:\"transparent\",slideBoxCursor:\"ew-resize\",grabAreaFill:\"transparent\",grabAreaCursor:\"col-resize\",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},{}],737:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plot_api/plot_template\"),a\u003dt(\"../../plots/cartesian/axis_ids\"),o\u003dt(\"./attributes\"),s\u003dt(\"./oppaxis_attributes\");e.exports\u003dfunction(t,e,r){var l\u003dt[r],c\u003de[r];if(l.rangeslider||e._requestRangeslider[c._id]){n.isPlainObject(l.rangeslider)||(l.rangeslider\u003d{});var u,f,h\u003dl.rangeslider,p\u003di.newContainer(c,\"rangeslider\");if(_(\"visible\")){_(\"bgcolor\",e.plot_bgcolor),_(\"bordercolor\"),_(\"borderwidth\"),_(\"thickness\"),_(\"autorange\",!c.isValidRange(h.range)),_(\"range\");var d\u003de._subplots;if(d)for(var m\u003dd.cartesian.filter((function(t){return t.substr(0,t.indexOf(\"y\"))\u003d\u003d\u003da.name2id(r)})).map((function(t){return t.substr(t.indexOf(\"y\"),t.length)})),g\u003dn.simpleMap(m,a.id2name),v\u003d0;v\u003cg.length;v++){var y\u003dg[v];u\u003dh[y]||{},f\u003di.newContainer(p,y,\"yaxis\");var x,b\u003de[y];u.range\u0026\u0026b.isValidRange(u.range)\u0026\u0026(x\u003d\"fixed\"),\"match\"!\u003d\u003dw(\"rangemode\",x)\u0026\u0026w(\"range\",b.range.slice())}p._input\u003dh}}function _(t,e){return n.coerce(h,p,o,t,e)}function w(t,e){return n.coerce(u,f,s,t,e)}}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/axis_ids\":853,\"./attributes\":734,\"./oppaxis_attributes\":741}],738:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../plots/plots\"),o\u003dt(\"../../lib\"),s\u003do.strTranslate,l\u003dt(\"../drawing\"),c\u003dt(\"../color\"),u\u003dt(\"../titles\"),f\u003dt(\"../../plots/cartesian\"),h\u003dt(\"../../plots/cartesian/axis_ids\"),p\u003dt(\"../dragelement\"),d\u003dt(\"../../lib/setcursor\"),m\u003dt(\"./constants\");function g(t,e,r,n){var i\u003do.ensureSingle(t,\"rect\",m.bgClassName,(function(t){t.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})})),a\u003dn.borderwidth%2\u003d\u003d0?n.borderwidth:n.borderwidth-1,c\u003d-n._offsetShift,u\u003dl.crispRound(e,n.borderwidth);i.attr({width:n._width+a,height:n._height+a,transform:s(c,c),fill:n.bgcolor,stroke:n.bordercolor,\"stroke-width\":u})}function v(t,e,r,n){var i\u003de._fullLayout;o.ensureSingleById(i._topdefs,\"clipPath\",n._clipId,(function(t){t.append(\"rect\").attr({x:0,y:0})})).select(\"rect\").attr({width:n._width,height:n._height})}function y(t,e,r,i){var s,c\u003de.calcdata,u\u003dt.selectAll(\"g.\"+m.rangePlotClassName).data(r._subplotsWith,o.identity);u.enter().append(\"g\").attr(\"class\",(function(t){return m.rangePlotClassName+\" \"+t})).call(l.setClipUrl,i._clipId,e),u.order(),u.exit().remove(),u.each((function(t,o){var l\u003dn.select(this),u\u003d0\u003d\u003d\u003do,p\u003dh.getFromId(e,t,\"y\"),d\u003dp._name,m\u003di[d],g\u003d{data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:i.range.slice(),calendar:r.calendar},width:i._width,height:i._height,margin:{t:0,b:0,l:0,r:0}},_context:e._context};r.rangebreaks\u0026\u0026(g.layout.xaxis.rangebreaks\u003dr.rangebreaks),g.layout[d]\u003d{type:p.type,domain:[0,1],range:\"match\"!\u003d\u003dm.rangemode?m.range.slice():p.range.slice(),calendar:p.calendar},p.rangebreaks\u0026\u0026(g.layout[d].rangebreaks\u003dp.rangebreaks),a.supplyDefaults(g);var v\u003dg._fullLayout.xaxis,y\u003dg._fullLayout[d];v.clearCalc(),v.setScale(),y.clearCalc(),y.setScale();var x\u003d{id:t,plotgroup:l,xaxis:v,yaxis:y,isRangePlot:!0};u?s\u003dx:(x.mainplot\u003d\"xy\",x.mainplotinfo\u003ds),f.rangePlot(e,x,function(t,e){for(var r\u003d[],n\u003d0;n\u003ct.length;n++){var i\u003dt[n],a\u003di[0].trace;a.xaxis+a.yaxis\u003d\u003d\u003de\u0026\u0026r.push(i)}return r}(c,t))}))}function x(t,e,r,n,i){(o.ensureSingle(t,\"rect\",m.maskMinClassName,(function(t){t.attr({x:0,y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"height\",n._height).call(c.fill,m.maskColor),o.ensureSingle(t,\"rect\",m.maskMaxClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"height\",n._height).call(c.fill,m.maskColor),\"match\"!\u003d\u003di.rangemode)\u0026\u0026(o.ensureSingle(t,\"rect\",m.maskMinOppAxisClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"width\",n._width).call(c.fill,m.maskOppAxisColor),o.ensureSingle(t,\"rect\",m.maskMaxOppAxisClassName,(function(t){t.attr({y:0,\"shape-rendering\":\"crispEdges\"})})).attr(\"width\",n._width).style(\"border-top\",m.maskOppBorder).call(c.fill,m.maskOppAxisColor))}function b(t,e,r,n){e._context.staticPlot||o.ensureSingle(t,\"rect\",m.slideBoxClassName,(function(t){t.attr({y:0,cursor:m.slideBoxCursor,\"shape-rendering\":\"crispEdges\"})})).attr({height:n._height,fill:m.slideBoxFill})}function _(t,e,r,n){var i\u003do.ensureSingle(t,\"g\",m.grabberMinClassName),a\u003do.ensureSingle(t,\"g\",m.grabberMaxClassName),s\u003d{x:0,width:m.handleWidth,rx:m.handleRadius,fill:c.background,stroke:c.defaultLine,\"stroke-width\":m.handleStrokeWidth,\"shape-rendering\":\"crispEdges\"},l\u003d{y:Math.round(n._height/4),height:Math.round(n._height/2)};o.ensureSingle(i,\"rect\",m.handleMinClassName,(function(t){t.attr(s)})).attr(l),o.ensureSingle(a,\"rect\",m.handleMaxClassName,(function(t){t.attr(s)})).attr(l);var u\u003d{width:m.grabAreaWidth,x:0,y:0,fill:m.grabAreaFill,cursor:e._context.staticPlot?void 0:m.grabAreaCursor};o.ensureSingle(i,\"rect\",m.grabAreaMinClassName,(function(t){t.attr(u)})).attr(\"height\",n._height),o.ensureSingle(a,\"rect\",m.grabAreaMaxClassName,(function(t){t.attr(u)})).attr(\"height\",n._height)}e.exports\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._rangeSliderData,a\u003d0;a\u003cr.length;a++){var l\u003dr[a][m.name];l._clipId\u003dl._id+\"-\"+e._uid}var c\u003de._infolayer.selectAll(\"g.\"+m.containerClassName).data(r,(function(t){return t._name}));c.exit().each((function(t){var r\u003dt[m.name];e._topdefs.select(\"#\"+r._clipId).remove()})).remove(),0!\u003d\u003dr.length\u0026\u0026(c.enter().append(\"g\").classed(m.containerClassName,!0).attr(\"pointer-events\",\"all\"),c.each((function(r){var a\u003dn.select(this),l\u003dr[m.name],c\u003de[h.id2name(r.anchor)],f\u003dl[h.id2name(r.anchor)];if(l.range){var w,T\u003do.simpleMap(l.range,r.r2l),k\u003do.simpleMap(r.range,r.r2l);w\u003dk[0]\u003ck[1]?[Math.min(T[0],k[0]),Math.max(T[1],k[1])]:[Math.max(T[0],k[0]),Math.min(T[1],k[1])],l.range\u003dl._input.range\u003do.simpleMap(w,r.l2r)}r.cleanRange(\"rangeslider.range\");var M\u003de._size,A\u003dr.domain;l._width\u003dM.w*(A[1]-A[0]);var S\u003dMath.round(M.l+M.w*A[0]),E\u003dMath.round(M.t+M.h*(1-r._counterDomainMin)+(\"bottom\"\u003d\u003d\u003dr.side?r._depth:0)+l._offsetShift+m.extraPad);a.attr(\"transform\",s(S,E)),l._rl\u003do.simpleMap(l.range,r.r2l);var L\u003dl._rl[0],C\u003dl._rl[1],P\u003dC-L;if(l.p2d\u003dfunction(t){return t/l._width*P+L},l.d2p\u003dfunction(t){return(t-L)/P*l._width},r.rangebreaks){var I\u003dr.locateBreaks(L,C);if(I.length){var O,z,D\u003d0;for(O\u003d0;O\u003cI.length;O++)D+\u003d(z\u003dI[O]).max-z.min;var R\u003dl._width/(C-L-D),F\u003d[-R*L];for(O\u003d0;O\u003cI.length;O++)z\u003dI[O],F.push(F[F.length-1]-R*(z.max-z.min));for(l.d2p\u003dfunction(t){for(var e\u003dF[0],r\u003d0;r\u003cI.length;r++){var n\u003dI[r];if(t\u003e\u003dn.max)e\u003dF[r+1];else if(t\u003cn.min)break}return e+R*t},O\u003d0;O\u003cI.length;O++)(z\u003dI[O]).pmin\u003dl.d2p(z.min),z.pmax\u003dl.d2p(z.max);l.p2d\u003dfunction(t){for(var e\u003dF[0],r\u003d0;r\u003cI.length;r++){var n\u003dI[r];if(t\u003e\u003dn.pmax)e\u003dF[r+1];else if(t\u003cn.pmin)break}return(t-e)/R}}}if(\"match\"!\u003d\u003df.rangemode){var B\u003dc.r2l(f.range[0]),N\u003dc.r2l(f.range[1])-B;l.d2pOppAxis\u003dfunction(t){return(t-B)/N*l._height}}a.call(g,t,r,l).call(v,t,r,l).call(y,t,r,l).call(x,t,r,l,f).call(b,t,r,l).call(_,t,r,l),function(t,e,r,a){if(e._context.staticPlot)return;var s\u003dt.select(\"rect.\"+m.slideBoxClassName).node(),l\u003dt.select(\"rect.\"+m.grabAreaMinClassName).node(),c\u003dt.select(\"rect.\"+m.grabAreaMaxClassName).node();function u(){var u\u003dn.event,f\u003du.target,h\u003du.clientX||u.touches[0].clientX,m\u003dh-t.node().getBoundingClientRect().left,g\u003da.d2p(r._rl[0]),v\u003da.d2p(r._rl[1]),y\u003dp.coverSlip();function x(t){var u,p,x,b\u003d+(t.clientX||t.touches[0].clientX)-h;switch(f){case s:x\u003d\"ew-resize\",u\u003dg+b,p\u003dv+b;break;case l:x\u003d\"col-resize\",u\u003dg+b,p\u003dv;break;case c:x\u003d\"col-resize\",u\u003dg,p\u003dv+b;break;default:x\u003d\"ew-resize\",u\u003dm,p\u003dm+b}if(p\u003cu){var _\u003dp;p\u003du,u\u003d_}a._pixelMin\u003du,a._pixelMax\u003dp,d(n.select(y),x),function(t,e,r,n){function a(t){return r.l2r(o.constrain(t,n._rl[0],n._rl[1]))}var s\u003da(n.p2d(n._pixelMin)),l\u003da(n.p2d(n._pixelMax));window.requestAnimationFrame((function(){i.call(\"_guiRelayout\",e,r._name+\".range\",[s,l])}))}(0,e,r,a)}function b(){y.removeEventListener(\"mousemove\",x),y.removeEventListener(\"mouseup\",b),this.removeEventListener(\"touchmove\",x),this.removeEventListener(\"touchend\",b),o.removeElement(y)}this.addEventListener(\"touchmove\",x),this.addEventListener(\"touchend\",b),y.addEventListener(\"mousemove\",x),y.addEventListener(\"mouseup\",b)}t.on(\"mousedown\",u),t.on(\"touchstart\",u)}(a,t,r,l),function(t,e,r,n,i,a){var l\u003dm.handleWidth/2;function c(t){return o.constrain(t,0,n._width)}function u(t){return o.constrain(t,0,n._height)}function f(t){return o.constrain(t,-l,n._width+l)}var h\u003dc(n.d2p(r._rl[0])),p\u003dc(n.d2p(r._rl[1]));if(t.select(\"rect.\"+m.slideBoxClassName).attr(\"x\",h).attr(\"width\",p-h),t.select(\"rect.\"+m.maskMinClassName).attr(\"width\",h),t.select(\"rect.\"+m.maskMaxClassName).attr(\"x\",p).attr(\"width\",n._width-p),\"match\"!\u003d\u003da.rangemode){var d\u003dn._height-u(n.d2pOppAxis(i._rl[1])),g\u003dn._height-u(n.d2pOppAxis(i._rl[0]));t.select(\"rect.\"+m.maskMinOppAxisClassName).attr(\"x\",h).attr(\"height\",d).attr(\"width\",p-h),t.select(\"rect.\"+m.maskMaxOppAxisClassName).attr(\"x\",h).attr(\"y\",g).attr(\"height\",n._height-g).attr(\"width\",p-h),t.select(\"rect.\"+m.slideBoxClassName).attr(\"y\",d).attr(\"height\",g-d)}var v\u003dMath.round(f(h-l))-.5,y\u003dMath.round(f(p-l))+.5;t.select(\"g.\"+m.grabberMinClassName).attr(\"transform\",s(v,.5)),t.select(\"g.\"+m.grabberMaxClassName).attr(\"transform\",s(y,.5))}(a,0,r,l,c,f),\"bottom\"\u003d\u003d\u003dr.side\u0026\u0026u.draw(t,r._id+\"title\",{propContainer:r,propName:r._name+\".title\",placeholder:e._dfltTitle.x,attributes:{x:r._offset+r._length/2,y:E+l._height+l._offsetShift+10+1.5*r.title.font.size,\"text-anchor\":\"middle\"}})})))}},{\"../../lib\":799,\"../../lib/setcursor\":820,\"../../plots/cartesian\":863,\"../../plots/cartesian/axis_ids\":853,\"../../plots/plots\":913,\"../../registry\":927,\"../color\":662,\"../dragelement\":681,\"../drawing\":684,\"../titles\":760,\"./constants\":736,\"@plotly/d3\":58}],739:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axis_ids\"),i\u003dt(\"../../lib/svg_text_utils\"),a\u003dt(\"./constants\"),o\u003dt(\"../../constants/alignment\").LINE_SPACING,s\u003da.name;function l(t){var e\u003dt\u0026\u0026t[s];return e\u0026\u0026e.visible}r.isVisible\u003dl,r.makeData\u003dfunction(t){var e\u003dn.list({_fullLayout:t},\"x\",!0),r\u003dt.margin,i\u003d[];if(!t._has(\"gl2d\"))for(var a\u003d0;a\u003ce.length;a++){var o\u003de[a];if(l(o)){i.push(o);var c\u003do[s];c._id\u003ds+o._id,c._height\u003d(t.height-r.b-r.t)*c.thickness,c._offsetShift\u003dMath.floor(c.borderwidth/2)}}t._rangeSliderData\u003di},r.autoMarginOpts\u003dfunction(t,e){var r\u003dt._fullLayout,n\u003de[s],l\u003de._id.charAt(0),c\u003d0,u\u003d0;\"bottom\"\u003d\u003d\u003de.side\u0026\u0026(c\u003de._depth,e.title.text!\u003d\u003dr._dfltTitle[l]\u0026\u0026(u\u003d1.5*e.title.font.size+10+n._offsetShift,u+\u003d(e.title.text.match(i.BR_TAG_ALL)||[]).length*e.title.font.size*o));return{x:0,y:e._counterDomainMin,l:0,r:0,t:0,b:n._height+c+Math.max(r.margin.b,u),pad:a.extraPad+2*n._offsetShift}}},{\"../../constants/alignment\":767,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axis_ids\":853,\"./constants\":736}],740:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"./oppaxis_attributes\"),o\u003dt(\"./helpers\");e.exports\u003d{moduleType:\"component\",name:\"rangeslider\",schema:{subplots:{xaxis:{rangeslider:n.extendFlat({},i,{yaxis:a})}}},layoutAttributes:t(\"./attributes\"),handleDefaults:t(\"./defaults\"),calcAutorange:t(\"./calc_autorange\"),draw:t(\"./draw\"),isVisible:o.isVisible,makeData:o.makeData,autoMarginOpts:o.autoMarginOpts}},{\"../../lib\":799,\"./attributes\":734,\"./calc_autorange\":735,\"./defaults\":737,\"./draw\":738,\"./helpers\":739,\"./oppaxis_attributes\":741}],741:[function(t,e,r){\"use strict\";e.exports\u003d{_isSubplotObj:!0,rangemode:{valType:\"enumerated\",values:[\"auto\",\"fixed\",\"match\"],dflt:\"match\",editType:\"calc\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"plot\"},{valType:\"any\",editType:\"plot\"}],editType:\"plot\"},editType:\"calc\"}},{}],742:[function(t,e,r){\"use strict\";var n\u003dt(\"../annotations/attributes\"),i\u003dt(\"../../traces/scatter/attributes\").line,a\u003dt(\"../drawing/attributes\").dash,o\u003dt(\"../../lib/extend\").extendFlat,s\u003dt(\"../../plot_api/plot_template\").templatedArray;t(\"../../constants/axis_placeable_objects\");e.exports\u003ds(\"shape\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc+arraydraw\"},type:{valType:\"enumerated\",values:[\"circle\",\"rect\",\"path\",\"line\"],editType:\"calc+arraydraw\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"arraydraw\"},xref:o({},n.xref,{}),xsizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},xanchor:{valType:\"any\",editType:\"calc+arraydraw\"},x0:{valType:\"any\",editType:\"calc+arraydraw\"},x1:{valType:\"any\",editType:\"calc+arraydraw\"},yref:o({},n.yref,{}),ysizemode:{valType:\"enumerated\",values:[\"scaled\",\"pixel\"],dflt:\"scaled\",editType:\"calc+arraydraw\"},yanchor:{valType:\"any\",editType:\"calc+arraydraw\"},y0:{valType:\"any\",editType:\"calc+arraydraw\"},y1:{valType:\"any\",editType:\"calc+arraydraw\"},path:{valType:\"string\",editType:\"calc+arraydraw\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"arraydraw\"},line:{color:o({},i.color,{editType:\"arraydraw\"}),width:o({},i.width,{editType:\"calc+arraydraw\"}),dash:o({},a,{editType:\"arraydraw\"}),editType:\"calc+arraydraw\"},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"arraydraw\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\",editType:\"arraydraw\"},editable:{valType:\"boolean\",dflt:!1,editType:\"calc+arraydraw\"},editType:\"arraydraw\"})},{\"../../constants/axis_placeable_objects\":768,\"../../lib/extend\":789,\"../../plot_api/plot_template\":838,\"../../traces/scatter/attributes\":1214,\"../annotations/attributes\":645,\"../drawing/attributes\":683}],743:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"./constants\"),o\u003dt(\"./helpers\");function s(t){return c(t.line.width,t.xsizemode,t.x0,t.x1,t.path,!1)}function l(t){return c(t.line.width,t.ysizemode,t.y0,t.y1,t.path,!0)}function c(t,e,r,i,s,l){var c\u003dt/2,u\u003dl;if(\"pixel\"\u003d\u003d\u003de){var f\u003ds?o.extractPathCoords(s,l?a.paramIsY:a.paramIsX):[r,i],h\u003dn.aggNums(Math.max,null,f),p\u003dn.aggNums(Math.min,null,f),d\u003dp\u003c0?Math.abs(p)+c:c,m\u003dh\u003e0?h+c:c;return{ppad:c,ppadplus:u?d:m,ppadminus:u?m:d}}return{ppad:c}}function u(t,e,r,n,i){var s\u003d\"category\"\u003d\u003d\u003dt.type||\"multicategory\"\u003d\u003d\u003dt.type?t.r2c:t.d2c;if(void 0!\u003d\u003de)return[s(e),s(r)];if(n){var l,c,u,f,h\u003d1/0,p\u003d-1/0,d\u003dn.match(a.segmentRE);for(\"date\"\u003d\u003d\u003dt.type\u0026\u0026(s\u003do.decodeDate(s)),l\u003d0;l\u003cd.length;l++)void 0!\u003d\u003d(c\u003di[d[l].charAt(0)].drawn)\u0026\u0026(!(u\u003dd[l].substr(1).match(a.paramRE))||u.length\u003cc||((f\u003ds(u[c]))\u003ch\u0026\u0026(h\u003df),f\u003ep\u0026\u0026(p\u003df)));return p\u003e\u003dh?[h,p]:void 0}}e.exports\u003dfunction(t){var e\u003dt._fullLayout,r\u003dn.filterVisible(e.shapes);if(r.length\u0026\u0026t._fullData.length)for(var o\u003d0;o\u003cr.length;o++){var c,f,h\u003dr[o];h._extremes\u003d{};var p\u003di.getRefType(h.xref),d\u003di.getRefType(h.yref);if(\"paper\"!\u003d\u003dh.xref\u0026\u0026\"domain\"!\u003d\u003dp){var m\u003d\"pixel\"\u003d\u003d\u003dh.xsizemode?h.xanchor:h.x0,g\u003d\"pixel\"\u003d\u003d\u003dh.xsizemode?h.xanchor:h.x1;(f\u003du(c\u003di.getFromId(t,h.xref),m,g,h.path,a.paramIsX))\u0026\u0026(h._extremes[c._id]\u003di.findExtremes(c,f,s(h)))}if(\"paper\"!\u003d\u003dh.yref\u0026\u0026\"domain\"!\u003d\u003dd){var v\u003d\"pixel\"\u003d\u003d\u003dh.ysizemode?h.yanchor:h.y0,y\u003d\"pixel\"\u003d\u003d\u003dh.ysizemode?h.yanchor:h.y1;(f\u003du(c\u003di.getFromId(t,h.yref),v,y,h.path,a.paramIsY))\u0026\u0026(h._extremes[c._id]\u003di.findExtremes(c,f,l(h)))}}}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"./constants\":744,\"./helpers\":753}],744:[function(t,e,r){\"use strict\";e.exports\u003d{segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},{}],745:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../plots/array_container_defaults\"),o\u003dt(\"./attributes\"),s\u003dt(\"./helpers\");function l(t,e,r){function a(r,i){return n.coerce(t,e,o,r,i)}if(a(\"visible\")){var l\u003da(\"path\"),c\u003da(\"type\",l?\"path\":\"rect\");\"path\"!\u003d\u003de.type\u0026\u0026delete e.path,a(\"editable\"),a(\"layer\"),a(\"opacity\"),a(\"fillcolor\"),a(\"fillrule\"),a(\"line.width\")\u0026\u0026(a(\"line.color\"),a(\"line.dash\"));for(var u\u003da(\"xsizemode\"),f\u003da(\"ysizemode\"),h\u003d[\"x\",\"y\"],p\u003d0;p\u003c2;p++){var d,m,g,v\u003dh[p],y\u003dv+\"anchor\",x\u003d\"x\"\u003d\u003d\u003dv?u:f,b\u003d{_fullLayout:r},_\u003di.coerceRef(t,e,b,v,void 0,\"paper\");if(\"range\"\u003d\u003d\u003di.getRefType(_)?((d\u003di.getFromId(b,_))._shapeIndices.push(e._index),g\u003ds.rangeToShapePosition(d),m\u003ds.shapePositionToRange(d)):m\u003dg\u003dn.identity,\"path\"!\u003d\u003dc){var w\u003dv+\"0\",T\u003dv+\"1\",k\u003dt[w],M\u003dt[T];t[w]\u003dm(t[w],!0),t[T]\u003dm(t[T],!0),\"pixel\"\u003d\u003d\u003dx?(a(w,0),a(T,10)):(i.coercePosition(e,b,a,_,w,.25),i.coercePosition(e,b,a,_,T,.75)),e[w]\u003dg(e[w]),e[T]\u003dg(e[T]),t[w]\u003dk,t[T]\u003dM}if(\"pixel\"\u003d\u003d\u003dx){var A\u003dt[y];t[y]\u003dm(t[y],!0),i.coercePosition(e,b,a,_,y,.25),e[y]\u003dg(e[y]),t[y]\u003dA}}\"path\"\u003d\u003d\u003dc?a(\"path\"):n.noneOrAll(t,e,[\"x0\",\"x1\",\"y0\",\"y1\"])}}e.exports\u003dfunction(t,e){a(t,e,{name:\"shapes\",handleItemDefaults:l})}},{\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"../../plots/cartesian/axes\":849,\"./attributes\":742,\"./helpers\":753}],746:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"./draw_newshape/helpers\").readPaths,s\u003dt(\"./draw_newshape/display_outlines\"),l\u003dt(\"../../plots/cartesian/handle_outline\").clearOutlineControllers,c\u003dt(\"../color\"),u\u003dt(\"../drawing\"),f\u003dt(\"../../plot_api/plot_template\").arrayEditor,h\u003dt(\"../dragelement\"),p\u003dt(\"../../lib/setcursor\"),d\u003dt(\"./constants\"),m\u003dt(\"./helpers\");function g(t){var e\u003dt._fullLayout;for(var r in e._shapeUpperLayer.selectAll(\"path\").remove(),e._shapeLowerLayer.selectAll(\"path\").remove(),e._plots){var n\u003de._plots[r].shapelayer;n\u0026\u0026n.selectAll(\"path\").remove()}for(var i\u003d0;i\u003ce.shapes.length;i++)e.shapes[i].visible\u0026\u0026x(t,i)}function v(t){return!!t._fullLayout._drawing}function y(t){return!t._context.edits.shapePosition}function x(t,e){t._fullLayout._paperdiv.selectAll(\u0027.shapelayer [data-index\u003d\"\u0027+e+\u0027\"]\u0027).remove();var r\u003dm.makeOptionsAndPlotinfo(t,e),l\u003dr.options,x\u003dr.plotinfo;if(l._input\u0026\u0026!1!\u003d\u003dl.visible)if(\"below\"!\u003d\u003dl.layer)k(t._fullLayout._shapeUpperLayer);else if(\"paper\"\u003d\u003d\u003dl.xref||\"paper\"\u003d\u003d\u003dl.yref)k(t._fullLayout._shapeLowerLayer);else{if(x._hadPlotinfo)k((x.mainplotinfo||x).shapelayer);else k(t._fullLayout._shapeLowerLayer)}function k(r){var k\u003d_(t,l),M\u003d{\"data-index\":e,\"fill-rule\":l.fillrule,d:k},A\u003dl.opacity,S\u003dl.fillcolor,E\u003dl.line.width?l.line.color:\"rgba(0,0,0,0)\",L\u003dl.line.width,C\u003dl.line.dash;L||!0!\u003d\u003dl.editable||(L\u003d5,C\u003d\"solid\");var P\u003d\"Z\"!\u003d\u003dk[k.length-1],I\u003dy(t)\u0026\u0026l.editable\u0026\u0026t._fullLayout._activeShapeIndex\u003d\u003d\u003de;I\u0026\u0026(S\u003dP?\"rgba(0,0,0,0)\":t._fullLayout.activeshape.fillcolor,A\u003dt._fullLayout.activeshape.opacity);var O,z\u003dr.append(\"path\").attr(M).style(\"opacity\",A).call(c.stroke,E).call(c.fill,S).call(u.dashLine,C,L);if(b(z,t,l),(I||t._context.edits.shapePosition)\u0026\u0026(O\u003df(t.layout,\"shapes\",l)),I){z.style({cursor:\"move\"});var D\u003d{element:z.node(),plotinfo:x,gd:t,editHelpers:O,isActiveShape:!0},R\u003do(k,t);s(R,z,D)}else t._context.edits.shapePosition?function(t,e,r,o,s,l){var c,f,g,y,x,T,k,M,A,S,E,L,C,P,I,O,z\u003d\"pixel\"\u003d\u003d\u003dr.xsizemode,D\u003d\"pixel\"\u003d\u003d\u003dr.ysizemode,R\u003d\"line\"\u003d\u003d\u003dr.type,F\u003d\"path\"\u003d\u003d\u003dr.type,B\u003dl.modifyItem,N\u003da.getFromId(t,r.xref),j\u003da.getRefType(r.xref),U\u003da.getFromId(t,r.yref),V\u003da.getRefType(r.yref),q\u003dm.getDataToPixel(t,N,!1,j),H\u003dm.getDataToPixel(t,U,!0,V),G\u003dm.getPixelToData(t,N,!1,j),Y\u003dm.getPixelToData(t,U,!0,V),W\u003dR?function(){var t\u003dMath.max(r.line.width,10),n\u003ds.append(\"g\").attr(\"data-index\",o);n.append(\"path\").attr(\"d\",e.attr(\"d\")).style({cursor:\"move\",\"stroke-width\":t,\"stroke-opacity\":\"0\"});var i\u003d{\"fill-opacity\":\"0\"},a\u003dMath.max(t/2,10);return n.append(\"circle\").attr({\"data-line-point\":\"start-point\",cx:z?q(r.xanchor)+r.x0:q(r.x0),cy:D?H(r.yanchor)-r.y0:H(r.y0),r:a}).style(i).classed(\"cursor-grab\",!0),n.append(\"circle\").attr({\"data-line-point\":\"end-point\",cx:z?q(r.xanchor)+r.x1:q(r.x1),cy:D?H(r.yanchor)-r.y1:H(r.y1),r:a}).style(i).classed(\"cursor-grab\",!0),n}():e,X\u003d{element:W.node(),gd:t,prepFn:function(n){if(v(t))return;z\u0026\u0026(x\u003dq(r.xanchor));D\u0026\u0026(T\u003dH(r.yanchor));\"path\"\u003d\u003d\u003dr.type?I\u003dr.path:(c\u003dz?r.x0:q(r.x0),f\u003dD?r.y0:H(r.y0),g\u003dz?r.x1:q(r.x1),y\u003dD?r.y1:H(r.y1));c\u003cg?(A\u003dc,C\u003d\"x0\",S\u003dg,P\u003d\"x1\"):(A\u003dg,C\u003d\"x1\",S\u003dc,P\u003d\"x0\");!D\u0026\u0026f\u003cy||D\u0026\u0026f\u003ey?(k\u003df,E\u003d\"y0\",M\u003dy,L\u003d\"y1\"):(k\u003dy,E\u003d\"y1\",M\u003df,L\u003d\"y0\");Z(n),Q(s,r),function(t,e,r){var n\u003de.xref,i\u003de.yref,o\u003da.getFromId(r,n),s\u003da.getFromId(r,i),l\u003d\"\";\"paper\"\u003d\u003d\u003dn||o.autorange||(l+\u003dn);\"paper\"\u003d\u003d\u003di||s.autorange||(l+\u003di);u.setClipUrl(t,l?\"clip\"+r._fullLayout._uid+l:null,r)}(e,r,t),X.moveFn\u003d\"move\"\u003d\u003d\u003dO?J:K,X.altKey\u003dn.altKey},doneFn:function(){if(v(t))return;p(e),$(s),b(e,t,r),n.call(\"_guiRelayout\",t,l.getUpdateObj())},clickFn:function(){if(v(t))return;$(s)}};function Z(r){if(v(t))O\u003dnull;else if(R)O\u003d\"path\"\u003d\u003d\u003dr.target.tagName?\"move\":\"start-point\"\u003d\u003d\u003dr.target.attributes[\"data-line-point\"].value?\"resize-over-start-point\":\"resize-over-end-point\";else{var n\u003dX.element.getBoundingClientRect(),i\u003dn.right-n.left,a\u003dn.bottom-n.top,o\u003dr.clientX-n.left,s\u003dr.clientY-n.top,l\u003d!F\u0026\u0026i\u003e10\u0026\u0026a\u003e10\u0026\u0026!r.shiftKey?h.getCursor(o/i,1-s/a):\"move\";p(e,l),O\u003dl.split(\"-\")[0]}}function J(n,i){if(\"path\"\u003d\u003d\u003dr.type){var a\u003dfunction(t){return t},o\u003da,l\u003da;z?B(\"xanchor\",r.xanchor\u003dG(x+n)):(o\u003dfunction(t){return G(q(t)+n)},N\u0026\u0026\"date\"\u003d\u003d\u003dN.type\u0026\u0026(o\u003dm.encodeDate(o))),D?B(\"yanchor\",r.yanchor\u003dY(T+i)):(l\u003dfunction(t){return Y(H(t)+i)},U\u0026\u0026\"date\"\u003d\u003d\u003dU.type\u0026\u0026(l\u003dm.encodeDate(l))),B(\"path\",r.path\u003dw(I,o,l))}else z?B(\"xanchor\",r.xanchor\u003dG(x+n)):(B(\"x0\",r.x0\u003dG(c+n)),B(\"x1\",r.x1\u003dG(g+n))),D?B(\"yanchor\",r.yanchor\u003dY(T+i)):(B(\"y0\",r.y0\u003dY(f+i)),B(\"y1\",r.y1\u003dY(y+i)));e.attr(\"d\",_(t,r)),Q(s,r)}function K(n,i){if(F){var a\u003dfunction(t){return t},o\u003da,l\u003da;z?B(\"xanchor\",r.xanchor\u003dG(x+n)):(o\u003dfunction(t){return G(q(t)+n)},N\u0026\u0026\"date\"\u003d\u003d\u003dN.type\u0026\u0026(o\u003dm.encodeDate(o))),D?B(\"yanchor\",r.yanchor\u003dY(T+i)):(l\u003dfunction(t){return Y(H(t)+i)},U\u0026\u0026\"date\"\u003d\u003d\u003dU.type\u0026\u0026(l\u003dm.encodeDate(l))),B(\"path\",r.path\u003dw(I,o,l))}else if(R){if(\"resize-over-start-point\"\u003d\u003d\u003dO){var u\u003dc+n,h\u003dD?f-i:f+i;B(\"x0\",r.x0\u003dz?u:G(u)),B(\"y0\",r.y0\u003dD?h:Y(h))}else if(\"resize-over-end-point\"\u003d\u003d\u003dO){var p\u003dg+n,d\u003dD?y-i:y+i;B(\"x1\",r.x1\u003dz?p:G(p)),B(\"y1\",r.y1\u003dD?d:Y(d))}}else{var v\u003dfunction(t){return-1!\u003d\u003dO.indexOf(t)},b\u003dv(\"n\"),j\u003dv(\"s\"),V\u003dv(\"w\"),W\u003dv(\"e\"),X\u003db?k+i:k,Z\u003dj?M+i:M,J\u003dV?A+n:A,K\u003dW?S+n:S;D\u0026\u0026(b\u0026\u0026(X\u003dk-i),j\u0026\u0026(Z\u003dM-i)),(!D\u0026\u0026Z-X\u003e10||D\u0026\u0026X-Z\u003e10)\u0026\u0026(B(E,r[E]\u003dD?X:Y(X)),B(L,r[L]\u003dD?Z:Y(Z))),K-J\u003e10\u0026\u0026(B(C,r[C]\u003dz?J:G(J)),B(P,r[P]\u003dz?K:G(K)))}e.attr(\"d\",_(t,r)),Q(s,r)}function Q(t,e){(z||D)\u0026\u0026function(){var r\u003d\"path\"!\u003d\u003de.type,n\u003dt.selectAll(\".visual-cue\").data([0]);n.enter().append(\"path\").attr({fill:\"#fff\",\"fill-rule\":\"evenodd\",stroke:\"#000\",\"stroke-width\":1}).classed(\"visual-cue\",!0);var a\u003dq(z?e.xanchor:i.midRange(r?[e.x0,e.x1]:m.extractPathCoords(e.path,d.paramIsX))),o\u003dH(D?e.yanchor:i.midRange(r?[e.y0,e.y1]:m.extractPathCoords(e.path,d.paramIsY)));if(a\u003dm.roundPositionForSharpStrokeRendering(a,1),o\u003dm.roundPositionForSharpStrokeRendering(o,1),z\u0026\u0026D){var s\u003d\"M\"+(a-1-1)+\",\"+(o-1-1)+\"h-8v2h8 v8h2v-8 h8v-2h-8 v-8h-2 Z\";n.attr(\"d\",s)}else if(z){var l\u003d\"M\"+(a-1-1)+\",\"+(o-9-1)+\"v18 h2 v-18 Z\";n.attr(\"d\",l)}else{var c\u003d\"M\"+(a-9-1)+\",\"+(o-1-1)+\"h18 v2 h-18 Z\";n.attr(\"d\",c)}}()}function $(t){t.selectAll(\".visual-cue\").remove()}h.init(X),W.node().onmousemove\u003dZ}(t,z,l,e,r,O):!0\u003d\u003d\u003dl.editable\u0026\u0026z.style(\"pointer-events\",P||c.opacity(S)*A\u003c\u003d.5?\"stroke\":\"all\");z.node().addEventListener(\"click\",(function(){return function(t,e){if(!y(t))return;var r\u003d+e.node().getAttribute(\"data-index\");if(r\u003e\u003d0){if(r\u003d\u003d\u003dt._fullLayout._activeShapeIndex)return void T(t);t._fullLayout._activeShapeIndex\u003dr,t._fullLayout._deactivateShape\u003dT,g(t)}}(t,z)}))}}function b(t,e,r){var n\u003d(r.xref+r.yref).replace(/paper/g,\"\").replace(/[xyz][1-9]* *domain/g,\"\");u.setClipUrl(t,n?\"clip\"+e._fullLayout._uid+n:null,e)}function _(t,e){var r,n,o,s,l,c,u,f,h\u003de.type,p\u003da.getRefType(e.xref),g\u003da.getRefType(e.yref),v\u003da.getFromId(t,e.xref),y\u003da.getFromId(t,e.yref),x\u003dt._fullLayout._size;if(v?\"domain\"\u003d\u003d\u003dp?n\u003dfunction(t){return v._offset+v._length*t}:(r\u003dm.shapePositionToRange(v),n\u003dfunction(t){return v._offset+v.r2p(r(t,!0))}):n\u003dfunction(t){return x.l+x.w*t},y?\"domain\"\u003d\u003d\u003dg?s\u003dfunction(t){return y._offset+y._length*(1-t)}:(o\u003dm.shapePositionToRange(y),s\u003dfunction(t){return y._offset+y.r2p(o(t,!0))}):s\u003dfunction(t){return x.t+x.h*(1-t)},\"path\"\u003d\u003d\u003dh)return v\u0026\u0026\"date\"\u003d\u003d\u003dv.type\u0026\u0026(n\u003dm.decodeDate(n)),y\u0026\u0026\"date\"\u003d\u003d\u003dy.type\u0026\u0026(s\u003dm.decodeDate(s)),function(t,e,r){var n\u003dt.path,a\u003dt.xsizemode,o\u003dt.ysizemode,s\u003dt.xanchor,l\u003dt.yanchor;return n.replace(d.segmentRE,(function(t){var n\u003d0,c\u003dt.charAt(0),u\u003dd.paramIsX[c],f\u003dd.paramIsY[c],h\u003dd.numParams[c],p\u003dt.substr(1).replace(d.paramRE,(function(t){return u[n]?t\u003d\"pixel\"\u003d\u003d\u003da?e(s)+Number(t):e(t):f[n]\u0026\u0026(t\u003d\"pixel\"\u003d\u003d\u003do?r(l)-Number(t):r(t)),++n\u003eh\u0026\u0026(t\u003d\"X\"),t}));return n\u003eh\u0026\u0026(p\u003dp.replace(/[\\s,]*X.*/,\"\"),i.log(\"Ignoring extra params in segment \"+t)),c+p}))}(e,n,s);if(\"pixel\"\u003d\u003d\u003de.xsizemode){var b\u003dn(e.xanchor);l\u003db+e.x0,c\u003db+e.x1}else l\u003dn(e.x0),c\u003dn(e.x1);if(\"pixel\"\u003d\u003d\u003de.ysizemode){var _\u003ds(e.yanchor);u\u003d_-e.y0,f\u003d_-e.y1}else u\u003ds(e.y0),f\u003ds(e.y1);if(\"line\"\u003d\u003d\u003dh)return\"M\"+l+\",\"+u+\"L\"+c+\",\"+f;if(\"rect\"\u003d\u003d\u003dh)return\"M\"+l+\",\"+u+\"H\"+c+\"V\"+f+\"H\"+l+\"Z\";var w\u003d(l+c)/2,T\u003d(u+f)/2,k\u003dMath.abs(w-l),M\u003dMath.abs(T-u),A\u003d\"A\"+k+\",\"+M,S\u003dw+k+\",\"+T;return\"M\"+S+A+\" 0 1,1 \"+(w+\",\"+(T-M))+A+\" 0 0,1 \"+S+\"Z\"}function w(t,e,r){return t.replace(d.segmentRE,(function(t){var n\u003d0,i\u003dt.charAt(0),a\u003dd.paramIsX[i],o\u003dd.paramIsY[i],s\u003dd.numParams[i];return i+t.substr(1).replace(d.paramRE,(function(t){return n\u003e\u003ds||(a[n]?t\u003de(t):o[n]\u0026\u0026(t\u003dr(t)),n++),t}))}))}function T(t){y(t)\u0026\u0026(t._fullLayout._activeShapeIndex\u003e\u003d0\u0026\u0026(l(t),delete t._fullLayout._activeShapeIndex,g(t)))}e.exports\u003d{draw:g,drawOne:x,eraseActiveShape:function(t){if(!y(t))return;l(t);var e\u003dt._fullLayout._activeShapeIndex,r\u003d(t.layout||{}).shapes||[];if(e\u003cr.length){for(var i\u003d[],a\u003d0;a\u003cr.length;a++)a!\u003d\u003de\u0026\u0026i.push(r[a]);delete t._fullLayout._activeShapeIndex,n.call(\"_guiRelayout\",t,{shapes:i})}}}},{\"../../lib\":799,\"../../lib/setcursor\":820,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/handle_outline\":860,\"../../registry\":927,\"../color\":662,\"../dragelement\":681,\"../drawing\":684,\"./constants\":744,\"./draw_newshape/display_outlines\":750,\"./draw_newshape/helpers\":751,\"./helpers\":753}],747:[function(t,e,r){\"use strict\";var n\u003dt(\"../../drawing/attributes\").dash,i\u003dt(\"../../../lib/extend\").extendFlat;e.exports\u003d{newshape:{line:{color:{valType:\"color\",editType:\"none\"},width:{valType:\"number\",min:0,dflt:4,editType:\"none\"},dash:i({},n,{dflt:\"solid\",editType:\"none\"}),editType:\"none\"},fillcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"none\"},fillrule:{valType:\"enumerated\",values:[\"evenodd\",\"nonzero\"],dflt:\"evenodd\",editType:\"none\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"none\"},layer:{valType:\"enumerated\",values:[\"below\",\"above\"],dflt:\"above\",editType:\"none\"},drawdirection:{valType:\"enumerated\",values:[\"ortho\",\"horizontal\",\"vertical\",\"diagonal\"],dflt:\"diagonal\",editType:\"none\"},editType:\"none\"},activeshape:{fillcolor:{valType:\"color\",dflt:\"rgb(255,0,255)\",editType:\"none\"},opacity:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"none\"},editType:\"none\"}}},{\"../../../lib/extend\":789,\"../../drawing/attributes\":683}],748:[function(t,e,r){\"use strict\";e.exports\u003d{CIRCLE_SIDES:32,i000:0,i090:8,i180:16,i270:24,cos45:Math.cos(Math.PI/4),sin45:Math.sin(Math.PI/4),SQRT2:Math.sqrt(2)}},{}],749:[function(t,e,r){\"use strict\";var n\u003dt(\"../../color\");e.exports\u003dfunction(t,e,r){if(r(\"newshape.drawdirection\"),r(\"newshape.layer\"),r(\"newshape.fillcolor\"),r(\"newshape.fillrule\"),r(\"newshape.opacity\"),r(\"newshape.line.width\")){var i\u003d(t||{}).plot_bgcolor||\"#FFF\";r(\"newshape.line.color\",n.contrast(i)),r(\"newshape.line.dash\")}r(\"activeshape.fillcolor\"),r(\"activeshape.opacity\")}},{\"../../color\":662}],750:[function(t,e,r){\"use strict\";var n\u003dt(\"../../dragelement\"),i\u003dt(\"../../dragelement/helpers\").drawMode,a\u003dt(\"../../../registry\"),o\u003dt(\"./constants\"),s\u003do.i000,l\u003do.i090,c\u003do.i180,u\u003do.i270,f\u003dt(\"../../../plots/cartesian/handle_outline\").clearOutlineControllers,h\u003dt(\"./helpers\"),p\u003dh.pointsShapeRectangle,d\u003dh.pointsShapeEllipse,m\u003dh.writePaths,g\u003dt(\"./newshapes\");e.exports\u003dfunction t(e,r,o,h){h||(h\u003d0);var v\u003do.gd;function y(){t(e,r,o,h++),d(e[0])\u0026\u0026x({redrawing:!0})}function x(t){o.isActiveShape\u003d!1;var e\u003dg(r,o);Object.keys(e).length\u0026\u0026a.call((t||{}).redrawing?\"relayout\":\"_guiRelayout\",v,e)}var b,_,w,T,k,M\u003do.isActiveShape,A\u003dv._fullLayout._zoomlayer,S\u003do.dragmode;(i(S)?v._fullLayout._drawing\u003d!0:v._fullLayout._activeShapeIndex\u003e\u003d0\u0026\u0026f(v),r.attr(\"d\",m(e)),M\u0026\u0026!h)\u0026\u0026(k\u003dfunction(t,e){for(var r\u003d0;r\u003ce.length;r++){var n\u003de[r];t[r]\u003d[];for(var i\u003d0;i\u003cn.length;i++){t[r][i]\u003d[];for(var a\u003d0;a\u003cn[i].length;a++)t[r][i][a]\u003dn[i][a]}}return t}([],e),function(t){b\u003d[];for(var r\u003d0;r\u003ce.length;r++){var i\u003de[r],a\u003d!p(i)\u0026\u0026d(i);b[r]\u003d[];for(var o\u003d0;o\u003ci.length;o++)if(\"Z\"!\u003d\u003di[o][0]\u0026\u0026(!a||o\u003d\u003d\u003ds||o\u003d\u003d\u003dl||o\u003d\u003d\u003dc||o\u003d\u003d\u003du)){var f\u003di[o][1],h\u003di[o][2],m\u003dt.append(\"circle\").classed(\"cursor-grab\",!0).attr(\"data-i\",r).attr(\"data-j\",o).attr(\"cx\",f).attr(\"cy\",h).attr(\"r\",4).style({\"mix-blend-mode\":\"luminosity\",fill:\"black\",stroke:\"white\",\"stroke-width\":1});b[r][o]\u003d{element:m.node(),gd:v,prepFn:E,doneFn:C,clickFn:P},n.init(b[r][o])}}}(A.append(\"g\").attr(\"class\",\"outline-controllers\")),function(){if(_\u003d[],!e.length)return;_[0]\u003d{element:r[0][0],gd:v,prepFn:O,doneFn:z},n.init(_[0])}());function E(t){w\u003d+t.srcElement.getAttribute(\"data-i\"),T\u003d+t.srcElement.getAttribute(\"data-j\"),b[w][T].moveFn\u003dL}function L(t,r){if(e.length){var n\u003dk[w][T][1],i\u003dk[w][T][2],a\u003de[w],o\u003da.length;if(p(a)){for(var s\u003d0;s\u003co;s++)if(s!\u003d\u003dT){var l\u003da[s];l[1]\u003d\u003d\u003da[T][1]\u0026\u0026(l[1]\u003dn+t),l[2]\u003d\u003d\u003da[T][2]\u0026\u0026(l[2]\u003di+r)}if(a[T][1]\u003dn+t,a[T][2]\u003di+r,!p(a))for(var c\u003d0;c\u003co;c++)for(var u\u003d0;u\u003ca[c].length;u++)a[c][u]\u003dk[w][c][u]}else a[T][1]\u003dn+t,a[T][2]\u003di+r;y()}}function C(){x()}function P(t,r){if(2\u003d\u003d\u003dt){w\u003d+r.srcElement.getAttribute(\"data-i\"),T\u003d+r.srcElement.getAttribute(\"data-j\");var n\u003de[w];p(n)||d(n)||function(){if(e.length\u0026\u0026e[w]\u0026\u0026e[w].length){for(var t\u003d[],r\u003d0;r\u003ce[w].length;r++)r!\u003d\u003dT\u0026\u0026t.push(e[w][r]);t.length\u003e1\u0026\u0026(2!\u003d\u003dt.length||\"Z\"!\u003d\u003dt[1][0])\u0026\u0026(0\u003d\u003d\u003dT\u0026\u0026(t[0][0]\u003d\"M\"),e[w]\u003dt,y(),x())}}()}}function I(t,r){!function(t,r){if(e.length)for(var n\u003d0;n\u003ce.length;n++)for(var i\u003d0;i\u003ce[n].length;i++)for(var a\u003d0;a+2\u003ce[n][i].length;a+\u003d2)e[n][i][a+1]\u003dk[n][i][a+1]+t,e[n][i][a+2]\u003dk[n][i][a+2]+r}(t,r),y()}function O(t){(w\u003d+t.srcElement.getAttribute(\"data-i\"))||(w\u003d0),_[w].moveFn\u003dI}function z(){x()}}},{\"../../../plots/cartesian/handle_outline\":860,\"../../../registry\":927,\"../../dragelement\":681,\"../../dragelement/helpers\":680,\"./constants\":748,\"./helpers\":751,\"./newshapes\":752}],751:[function(t,e,r){\"use strict\";var n\u003dt(\"parse-svg-path\"),i\u003dt(\"./constants\"),a\u003di.CIRCLE_SIDES,o\u003di.SQRT2,s\u003dt(\"../../../plots/cartesian/helpers\"),l\u003ds.p2r,c\u003ds.r2p,u\u003d[0,3,4,5,6,1,2],f\u003d[0,3,4,1,2];function h(t,e){return Math.abs(t-e)\u003c\u003d1e-6}function p(t,e){var r\u003de[1]-t[1],n\u003de[2]-t[2];return Math.sqrt(r*r+n*n)}r.writePaths\u003dfunction(t){var e\u003dt.length;if(!e)return\"M0,0Z\";for(var r\u003d\"\",n\u003d0;n\u003ce;n++)for(var i\u003dt[n].length,a\u003d0;a\u003ci;a++){var o\u003dt[n][a][0];if(\"Z\"\u003d\u003d\u003do)r+\u003d\"Z\";else for(var s\u003dt[n][a].length,l\u003d0;l\u003cs;l++){var c\u003dl;\"Q\"\u003d\u003d\u003do||\"S\"\u003d\u003d\u003do?c\u003df[l]:\"C\"\u003d\u003d\u003do\u0026\u0026(c\u003du[l]),r+\u003dt[n][a][c],l\u003e0\u0026\u0026l\u003cs-1\u0026\u0026(r+\u003d\",\")}}return r},r.readPaths\u003dfunction(t,e,r,i){var o,s,u,f\u003dn(t),h\u003d[],p\u003d-1,d\u003d0,m\u003d0,g\u003dfunction(){s\u003dd,u\u003dm};g();for(var v\u003d0;v\u003cf.length;v++){var y,x,b,_,w\u003d[],T\u003df[v][0],k\u003dT;switch(T){case\"M\":p++,h[p]\u003d[],d\u003d+f[v][1],m\u003d+f[v][2],w.push([k,d,m]),g();break;case\"Q\":case\"S\":y\u003d+f[v][1],b\u003d+f[v][2],d\u003d+f[v][3],m\u003d+f[v][4],w.push([k,d,m,y,b]);break;case\"C\":y\u003d+f[v][1],b\u003d+f[v][2],x\u003d+f[v][3],_\u003d+f[v][4],d\u003d+f[v][5],m\u003d+f[v][6],w.push([k,d,m,y,b,x,_]);break;case\"T\":case\"L\":d\u003d+f[v][1],m\u003d+f[v][2],w.push([k,d,m]);break;case\"H\":k\u003d\"L\",d\u003d+f[v][1],w.push([k,d,m]);break;case\"V\":k\u003d\"L\",m\u003d+f[v][1],w.push([k,d,m]);break;case\"A\":k\u003d\"L\";var M\u003d+f[v][1],A\u003d+f[v][2];+f[v][4]||(M\u003d-M,A\u003d-A);var S\u003dd-M,E\u003dm;for(o\u003d1;o\u003c\u003da/2;o++){var L\u003d2*Math.PI*o/a;w.push([k,S+M*Math.cos(L),E+A*Math.sin(L)])}break;case\"Z\":d\u003d\u003d\u003ds\u0026\u0026m\u003d\u003d\u003du||(d\u003ds,m\u003du,w.push([k,d,m]))}for(var C\u003d(r||{}).domain,P\u003de._fullLayout._size,I\u003dr\u0026\u0026\"pixel\"\u003d\u003d\u003dr.xsizemode,O\u003dr\u0026\u0026\"pixel\"\u003d\u003d\u003dr.ysizemode,z\u003d!1\u003d\u003d\u003di,D\u003d0;D\u003cw.length;D++){for(o\u003d0;o+2\u003c7;o+\u003d2){var R\u003dw[D][o+1],F\u003dw[D][o+2];void 0!\u003d\u003dR\u0026\u0026void 0!\u003d\u003dF\u0026\u0026(d\u003dR,m\u003dF,r\u0026\u0026(r.xaxis\u0026\u0026r.xaxis.p2r?(z\u0026\u0026(R-\u003dr.xaxis._offset),R\u003dI?c(r.xaxis,r.xanchor)+R:l(r.xaxis,R)):(z\u0026\u0026(R-\u003dP.l),C?R\u003dC.x[0]+R/P.w:R/\u003dP.w),r.yaxis\u0026\u0026r.yaxis.p2r?(z\u0026\u0026(F-\u003dr.yaxis._offset),F\u003dO?c(r.yaxis,r.yanchor)-F:l(r.yaxis,F)):(z\u0026\u0026(F-\u003dP.t),F\u003dC?C.y[1]-F/P.h:1-F/P.h)),w[D][o+1]\u003dR,w[D][o+2]\u003dF)}h[p].push(w[D].slice())}}return h},r.pointsShapeRectangle\u003dfunction(t){if(5!\u003d\u003dt.length)return!1;for(var e\u003d1;e\u003c3;e++){if(!h(t[0][e]-t[1][e],t[3][e]-t[2][e]))return!1;if(!h(t[0][e]-t[3][e],t[1][e]-t[2][e]))return!1}return!(!h(t[0][1],t[1][1])\u0026\u0026!h(t[0][1],t[3][1]))\u0026\u0026!!(p(t[0],t[1])*p(t[0],t[3]))},r.pointsShapeEllipse\u003dfunction(t){var e\u003dt.length;if(e!\u003d\u003da+1)return!1;e\u003da;for(var r\u003d0;r\u003ce;r++){var n\u003d(2*e-r)%e,i\u003d(e/2+n)%e,o\u003d(e/2+r)%e;if(!h(p(t[r],t[o]),p(t[n],t[i])))return!1}return!0},r.handleEllipse\u003dfunction(t,e,n){if(!t)return[e,n];var i\u003dr.ellipseOver({x0:e[0],y0:e[1],x1:n[0],y1:n[1]}),s\u003d(i.x1+i.x0)/2,l\u003d(i.y1+i.y0)/2,c\u003d(i.x1-i.x0)/2,u\u003d(i.y1-i.y0)/2;c||(c\u003du/\u003do),u||(u\u003dc/\u003do);for(var f\u003d[],h\u003d0;h\u003ca;h++){var p\u003d2*h*Math.PI/a;f.push([s+c*Math.cos(p),l+u*Math.sin(p)])}return f},r.ellipseOver\u003dfunction(t){var e\u003dt.x0,r\u003dt.y0,n\u003dt.x1,i\u003dt.y1,a\u003dn-e,s\u003di-r,l\u003d((e-\u003da)+n)/2,c\u003d((r-\u003ds)+i)/2;return{x0:l-(a*\u003do),y0:c-(s*\u003do),x1:l+a,y1:c+s}}},{\"../../../plots/cartesian/helpers\":861,\"./constants\":748,\"parse-svg-path\":489}],752:[function(t,e,r){\"use strict\";var n\u003dt(\"../../dragelement/helpers\"),i\u003dn.drawMode,a\u003dn.openMode,o\u003dt(\"./constants\"),s\u003do.i000,l\u003do.i090,c\u003do.i180,u\u003do.i270,f\u003do.cos45,h\u003do.sin45,p\u003dt(\"../../../plots/cartesian/helpers\"),d\u003dp.p2r,m\u003dp.r2p,g\u003dt(\"../../../plots/cartesian/handle_outline\").clearSelect,v\u003dt(\"./helpers\"),y\u003dv.readPaths,x\u003dv.writePaths,b\u003dv.ellipseOver;e.exports\u003dfunction(t,e){if(t.length){var r\u003dt[0][0];if(r){var n\u003dr.getAttribute(\"d\"),o\u003de.gd,p\u003do._fullLayout.newshape,v\u003de.plotinfo,_\u003dv.xaxis,w\u003dv.yaxis,T\u003d!!v.domain||!v.xaxis,k\u003d!!v.domain||!v.yaxis,M\u003de.isActiveShape,A\u003de.dragmode,S\u003d(o.layout||{}).shapes||[];if(!i(A)\u0026\u0026void 0!\u003d\u003dM){var E\u003do._fullLayout._activeShapeIndex;if(E\u003cS.length)switch(o._fullLayout.shapes[E].type){case\"rect\":A\u003d\"drawrect\";break;case\"circle\":A\u003d\"drawcircle\";break;case\"line\":A\u003d\"drawline\";break;case\"path\":var L\u003dS[E].path||\"\";A\u003d\"Z\"\u003d\u003d\u003dL[L.length-1]?\"drawclosedpath\":\"drawopenpath\"}}var C,P\u003da(A),I\u003dy(n,o,v,M),O\u003d{editable:!0,xref:T?\"paper\":_._id,yref:k?\"paper\":w._id,layer:p.layer,opacity:p.opacity,line:{color:p.line.color,width:p.line.width,dash:p.line.dash}};if(P||(O.fillcolor\u003dp.fillcolor,O.fillrule\u003dp.fillrule),1\u003d\u003d\u003dI.length\u0026\u0026(C\u003dI[0]),C\u0026\u0026\"drawrect\"\u003d\u003d\u003dA)O.type\u003d\"rect\",O.x0\u003dC[0][1],O.y0\u003dC[0][2],O.x1\u003dC[2][1],O.y1\u003dC[2][2];else if(C\u0026\u0026\"drawline\"\u003d\u003d\u003dA)O.type\u003d\"line\",O.x0\u003dC[0][1],O.y0\u003dC[0][2],O.x1\u003dC[1][1],O.y1\u003dC[1][2];else if(C\u0026\u0026\"drawcircle\"\u003d\u003d\u003dA){O.type\u003d\"circle\";var z\u003dC[s][1],D\u003dC[l][1],R\u003dC[c][1],F\u003dC[u][1],B\u003dC[s][2],N\u003dC[l][2],j\u003dC[c][2],U\u003dC[u][2],V\u003dv.xaxis\u0026\u0026(\"date\"\u003d\u003d\u003dv.xaxis.type||\"log\"\u003d\u003d\u003dv.xaxis.type),q\u003dv.yaxis\u0026\u0026(\"date\"\u003d\u003d\u003dv.yaxis.type||\"log\"\u003d\u003d\u003dv.yaxis.type);V\u0026\u0026(z\u003dm(v.xaxis,z),D\u003dm(v.xaxis,D),R\u003dm(v.xaxis,R),F\u003dm(v.xaxis,F)),q\u0026\u0026(B\u003dm(v.yaxis,B),N\u003dm(v.yaxis,N),j\u003dm(v.yaxis,j),U\u003dm(v.yaxis,U));var H\u003d(D+F)/2,G\u003d(B+j)/2,Y\u003db({x0:H,y0:G,x1:H+(F-D+R-z)/2*f,y1:G+(U-N+j-B)/2*h});V\u0026\u0026(Y.x0\u003dd(v.xaxis,Y.x0),Y.x1\u003dd(v.xaxis,Y.x1)),q\u0026\u0026(Y.y0\u003dd(v.yaxis,Y.y0),Y.y1\u003dd(v.yaxis,Y.y1)),O.x0\u003dY.x0,O.y0\u003dY.y0,O.x1\u003dY.x1,O.y1\u003dY.y1}else O.type\u003d\"path\",_\u0026\u0026w\u0026\u0026function(t,e,r){var n\u003d\"date\"\u003d\u003d\u003de.type,i\u003d\"date\"\u003d\u003d\u003dr.type;if(!n\u0026\u0026!i)return t;for(var a\u003d0;a\u003ct.length;a++)for(var o\u003d0;o\u003ct[a].length;o++)for(var s\u003d0;s+2\u003ct[a][o].length;s+\u003d2)n\u0026\u0026(t[a][o][s+1]\u003dt[a][o][s+1].replace(\" \",\"_\")),i\u0026\u0026(t[a][o][s+2]\u003dt[a][o][s+2].replace(\" \",\"_\"))}(I,_,w),O.path\u003dx(I),C\u003dnull;g(o);for(var W\u003de.editHelpers,X\u003d(W||{}).modifyItem,Z\u003d[],J\u003d0;J\u003cS.length;J++){var K\u003do._fullLayout.shapes[J];if(Z[J]\u003dK._input,void 0!\u003d\u003dM\u0026\u0026J\u003d\u003d\u003do._fullLayout._activeShapeIndex){var Q\u003dO;switch(K.type){case\"line\":case\"rect\":case\"circle\":X(\"x0\",Q.x0),X(\"x1\",Q.x1),X(\"y0\",Q.y0),X(\"y1\",Q.y1);break;case\"path\":X(\"path\",Q.path)}}}return void 0\u003d\u003d\u003dM?(Z.push(O),Z):W?W.getUpdateObj():{}}}}},{\"../../../plots/cartesian/handle_outline\":860,\"../../../plots/cartesian/helpers\":861,\"../../dragelement/helpers\":680,\"./constants\":748,\"./helpers\":751}],753:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\"),i\u003dt(\"../../lib\");r.rangeToShapePosition\u003dfunction(t){return\"log\"\u003d\u003d\u003dt.type?t.r2d:function(t){return t}},r.shapePositionToRange\u003dfunction(t){return\"log\"\u003d\u003d\u003dt.type?t.d2r:function(t){return t}},r.decodeDate\u003dfunction(t){return function(e){return e.replace\u0026\u0026(e\u003de.replace(\"_\",\" \")),t(e)}},r.encodeDate\u003dfunction(t){return function(e){return t(e).replace(\" \",\"_\")}},r.extractPathCoords\u003dfunction(t,e){var r\u003d[];return t.match(n.segmentRE).forEach((function(t){var a\u003de[t.charAt(0)].drawn;if(void 0!\u003d\u003da){var o\u003dt.substr(1).match(n.paramRE);!o||o.length\u003ca||r.push(i.cleanNumber(o[a]))}})),r},r.getDataToPixel\u003dfunction(t,e,n,i){var a,o\u003dt._fullLayout._size;if(e)if(\"domain\"\u003d\u003d\u003di)a\u003dfunction(t){return e._length*(n?1-t:t)+e._offset};else{var s\u003dr.shapePositionToRange(e);a\u003dfunction(t){return e._offset+e.r2p(s(t,!0))},\"date\"\u003d\u003d\u003de.type\u0026\u0026(a\u003dr.decodeDate(a))}else a\u003dn?function(t){return o.t+o.h*(1-t)}:function(t){return o.l+o.w*t};return a},r.getPixelToData\u003dfunction(t,e,n,i){var a,o\u003dt._fullLayout._size;if(e)if(\"domain\"\u003d\u003d\u003di)a\u003dfunction(t){var r\u003d(t-e._offset)/e._length;return n?1-r:r};else{var s\u003dr.rangeToShapePosition(e);a\u003dfunction(t){return s(e.p2r(t-e._offset))}}else a\u003dn?function(t){return 1-(t-o.t)/o.h}:function(t){return(t-o.l)/o.w};return a},r.roundPositionForSharpStrokeRendering\u003dfunction(t,e){var r\u003d1\u003d\u003d\u003dMath.round(e%2),n\u003dMath.round(t);return r?n+.5:n},r.makeOptionsAndPlotinfo\u003dfunction(t,e){var r\u003dt._fullLayout.shapes[e]||{},n\u003dt._fullLayout._plots[r.xref+r.yref];return!!n?n._hadPlotinfo\u003d!0:(n\u003d{},r.xref\u0026\u0026\"paper\"!\u003d\u003dr.xref\u0026\u0026(n.xaxis\u003dt._fullLayout[r.xref+\"axis\"]),r.yref\u0026\u0026\"paper\"!\u003d\u003dr.yref\u0026\u0026(n.yaxis\u003dt._fullLayout[r.yref+\"axis\"])),n.xsizemode\u003dr.xsizemode,n.ysizemode\u003dr.ysizemode,n.xanchor\u003dr.xanchor,n.yanchor\u003dr.yanchor,{options:r,plotinfo:n}}},{\"../../lib\":799,\"./constants\":744}],754:[function(t,e,r){\"use strict\";var n\u003dt(\"./draw\");e.exports\u003d{moduleType:\"component\",name:\"shapes\",layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),supplyDrawNewShapeDefaults:t(\"./draw_newshape/defaults\"),includeBasePlot:t(\"../../plots/cartesian/include_components\")(\"shapes\"),calcAutorange:t(\"./calc_autorange\"),draw:n.draw,drawOne:n.drawOne}},{\"../../plots/cartesian/include_components\":862,\"./attributes\":742,\"./calc_autorange\":743,\"./defaults\":745,\"./draw\":746,\"./draw_newshape/defaults\":749}],755:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"../../plots/pad_attributes\"),a\u003dt(\"../../lib/extend\").extendDeepAll,o\u003dt(\"../../plot_api/edit_types\").overrideAll,s\u003dt(\"../../plots/animation_attributes\"),l\u003dt(\"../../plot_api/plot_template\").templatedArray,c\u003dt(\"./constants\"),u\u003dl(\"step\",{visible:{valType:\"boolean\",dflt:!0},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\"},value:{valType:\"string\"},execute:{valType:\"boolean\",dflt:!0}});e.exports\u003do(l(\"slider\",{visible:{valType:\"boolean\",dflt:!0},active:{valType:\"number\",min:0,dflt:0},steps:u,lenmode:{valType:\"enumerated\",values:[\"fraction\",\"pixels\"],dflt:\"fraction\"},len:{valType:\"number\",min:0,dflt:1},x:{valType:\"number\",min:-2,max:3,dflt:0},pad:a(i({editType:\"arraydraw\"}),{},{t:{dflt:20}}),xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"left\"},y:{valType:\"number\",min:-2,max:3,dflt:0},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},transition:{duration:{valType:\"number\",min:0,dflt:150},easing:{valType:\"enumerated\",values:s.transition.easing.values,dflt:\"cubic-in-out\"}},currentvalue:{visible:{valType:\"boolean\",dflt:!0},xanchor:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],dflt:\"left\"},offset:{valType:\"number\",dflt:10},prefix:{valType:\"string\"},suffix:{valType:\"string\"},font:n({})},font:n({}),activebgcolor:{valType:\"color\",dflt:c.gripBgActiveColor},bgcolor:{valType:\"color\",dflt:c.railBgColor},bordercolor:{valType:\"color\",dflt:c.railBorderColor},borderwidth:{valType:\"number\",min:0,dflt:c.railBorderWidth},ticklen:{valType:\"number\",min:0,dflt:c.tickLength},tickcolor:{valType:\"color\",dflt:c.tickColor},tickwidth:{valType:\"number\",min:0,dflt:1},minorticklen:{valType:\"number\",min:0,dflt:c.minorTickLength}}),\"arraydraw\",\"from-root\")},{\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plot_api/plot_template\":838,\"../../plots/animation_attributes\":843,\"../../plots/font_attributes\":878,\"../../plots/pad_attributes\":912,\"./constants\":756}],756:[function(t,e,r){\"use strict\";e.exports\u003d{name:\"sliders\",containerClassName:\"slider-container\",groupClassName:\"slider-group\",inputAreaClass:\"slider-input-area\",railRectClass:\"slider-rail-rect\",railTouchRectClass:\"slider-rail-touch-rect\",gripRectClass:\"slider-grip-rect\",tickRectClass:\"slider-tick-rect\",inputProxyClass:\"slider-input-proxy\",labelsClass:\"slider-labels\",labelGroupClass:\"slider-label-group\",labelClass:\"slider-label\",currentValueClass:\"slider-current-value\",railHeight:5,menuIndexAttrName:\"slider-active-index\",autoMarginIdRoot:\"slider-\",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:\"#bec8d9\",railBgColor:\"#f8fafc\",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:\"#bec8d9\",gripBgColor:\"#f6f8fa\",gripBgActiveColor:\"#dbdde0\",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:\"#333\",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:\"#333\",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},{}],757:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/array_container_defaults\"),a\u003dt(\"./attributes\"),o\u003dt(\"./constants\").name,s\u003da.steps;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}for(var s\u003di(t,e,{name:\"steps\",handleItemDefaults:c}),l\u003d0,u\u003d0;u\u003cs.length;u++)s[u].visible\u0026\u0026l++;if(l\u003c2?e.visible\u003d!1:o(\"visible\")){e._stepCount\u003dl;var f\u003de._visibleSteps\u003dn.filterVisible(s);(s[o(\"active\")]||{}).visible||(e.active\u003df[0]._index),o(\"x\"),o(\"y\"),n.noneOrAll(t,e,[\"x\",\"y\"]),o(\"xanchor\"),o(\"yanchor\"),o(\"len\"),o(\"lenmode\"),o(\"pad.t\"),o(\"pad.r\"),o(\"pad.b\"),o(\"pad.l\"),n.coerceFont(o,\"font\",r.font),o(\"currentvalue.visible\")\u0026\u0026(o(\"currentvalue.xanchor\"),o(\"currentvalue.prefix\"),o(\"currentvalue.suffix\"),o(\"currentvalue.offset\"),n.coerceFont(o,\"currentvalue.font\",e.font)),o(\"transition.duration\"),o(\"transition.easing\"),o(\"bgcolor\"),o(\"activebgcolor\"),o(\"bordercolor\"),o(\"borderwidth\"),o(\"ticklen\"),o(\"tickwidth\"),o(\"tickcolor\"),o(\"minorticklen\")}}function c(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}if(\"skip\"\u003d\u003d\u003dt.method||Array.isArray(t.args)?r(\"visible\"):e.visible\u003d!1){r(\"method\"),r(\"args\");var i\u003dr(\"label\",\"step-\"+e._index);r(\"value\",i),r(\"execute\")}}e.exports\u003dfunction(t,e){i(t,e,{name:o,handleItemDefaults:l})}},{\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"./attributes\":755,\"./constants\":756}],758:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../plots/plots\"),a\u003dt(\"../color\"),o\u003dt(\"../drawing\"),s\u003dt(\"../../lib\"),l\u003ds.strTranslate,c\u003dt(\"../../lib/svg_text_utils\"),u\u003dt(\"../../plot_api/plot_template\").arrayEditor,f\u003dt(\"./constants\"),h\u003dt(\"../../constants/alignment\"),p\u003dh.LINE_SPACING,d\u003dh.FROM_TL,m\u003dh.FROM_BR;function g(t){return f.autoMarginIdRoot+t._index}function v(t){return t._index}function y(t,e){var r\u003do.tester.selectAll(\"g.\"+f.labelGroupClass).data(e._visibleSteps);r.enter().append(\"g\").classed(f.labelGroupClass,!0);var a\u003d0,l\u003d0;r.each((function(t){var r\u003d_(n.select(this),{step:t},e).node();if(r){var i\u003do.bBox(r);l\u003dMath.max(l,i.height),a\u003dMath.max(a,i.width)}})),r.remove();var u\u003de._dims\u003d{};u.inputAreaWidth\u003dMath.max(f.railWidth,f.gripHeight);var h\u003dt._fullLayout._size;u.lx\u003dh.l+h.w*e.x,u.ly\u003dh.t+h.h*(1-e.y),\"fraction\"\u003d\u003d\u003de.lenmode?u.outerLength\u003dMath.round(h.w*e.len):u.outerLength\u003de.len,u.inputAreaStart\u003d0,u.inputAreaLength\u003dMath.round(u.outerLength-e.pad.l-e.pad.r);var p\u003d(u.inputAreaLength-2*f.stepInset)/(e._stepCount-1),v\u003da+f.labelPadding;if(u.labelStride\u003dMath.max(1,Math.ceil(v/p)),u.labelHeight\u003dl,u.currentValueMaxWidth\u003d0,u.currentValueHeight\u003d0,u.currentValueTotalHeight\u003d0,u.currentValueMaxLines\u003d1,e.currentvalue.visible){var y\u003do.tester.append(\"g\");r.each((function(t){var r\u003dx(y,e,t.label),n\u003dr.node()\u0026\u0026o.bBox(r.node())||{width:0,height:0},i\u003dc.lineCount(r);u.currentValueMaxWidth\u003dMath.max(u.currentValueMaxWidth,Math.ceil(n.width)),u.currentValueHeight\u003dMath.max(u.currentValueHeight,Math.ceil(n.height)),u.currentValueMaxLines\u003dMath.max(u.currentValueMaxLines,i)})),u.currentValueTotalHeight\u003du.currentValueHeight+e.currentvalue.offset,y.remove()}u.height\u003du.currentValueTotalHeight+f.tickOffset+e.ticklen+f.labelOffset+u.labelHeight+e.pad.t+e.pad.b;var b\u003d\"left\";s.isRightAnchor(e)\u0026\u0026(u.lx-\u003du.outerLength,b\u003d\"right\"),s.isCenterAnchor(e)\u0026\u0026(u.lx-\u003du.outerLength/2,b\u003d\"center\");var w\u003d\"top\";s.isBottomAnchor(e)\u0026\u0026(u.ly-\u003du.height,w\u003d\"bottom\"),s.isMiddleAnchor(e)\u0026\u0026(u.ly-\u003du.height/2,w\u003d\"middle\"),u.outerLength\u003dMath.ceil(u.outerLength),u.height\u003dMath.ceil(u.height),u.lx\u003dMath.round(u.lx),u.ly\u003dMath.round(u.ly);var T\u003d{y:e.y,b:u.height*m[w],t:u.height*d[w]};\"fraction\"\u003d\u003d\u003de.lenmode?(T.l\u003d0,T.xl\u003de.x-e.len*d[b],T.r\u003d0,T.xr\u003de.x+e.len*m[b]):(T.x\u003de.x,T.l\u003du.outerLength*d[b],T.r\u003du.outerLength*m[b]),i.autoMargin(t,g(e),T)}function x(t,e,r){if(e.currentvalue.visible){var n,i,a\u003de._dims;switch(e.currentvalue.xanchor){case\"right\":n\u003da.inputAreaLength-f.currentValueInset-a.currentValueMaxWidth,i\u003d\"left\";break;case\"center\":n\u003d.5*a.inputAreaLength,i\u003d\"middle\";break;default:n\u003df.currentValueInset,i\u003d\"left\"}var l\u003ds.ensureSingle(t,\"text\",f.labelClass,(function(t){t.attr({\"text-anchor\":i,\"data-notex\":1})})),u\u003de.currentvalue.prefix?e.currentvalue.prefix:\"\";if(\"string\"\u003d\u003dtypeof r)u+\u003dr;else{var h\u003de.steps[e.active].label,d\u003de._gd._fullLayout._meta;d\u0026\u0026(h\u003ds.templateString(h,d)),u+\u003dh}e.currentvalue.suffix\u0026\u0026(u+\u003de.currentvalue.suffix),l.call(o.font,e.currentvalue.font).text(u).call(c.convertToTspans,e._gd);var m\u003dc.lineCount(l),g\u003d(a.currentValueMaxLines+1-m)*e.currentvalue.font.size*p;return c.positionText(l,n,g),l}}function b(t,e,r){s.ensureSingle(t,\"rect\",f.gripRectClass,(function(n){n.call(M,e,t,r).style(\"pointer-events\",\"all\")})).attr({width:f.gripWidth,height:f.gripHeight,rx:f.gripRadius,ry:f.gripRadius}).call(a.stroke,r.bordercolor).call(a.fill,r.bgcolor).style(\"stroke-width\",r.borderwidth+\"px\")}function _(t,e,r){var n\u003ds.ensureSingle(t,\"text\",f.labelClass,(function(t){t.attr({\"text-anchor\":\"middle\",\"data-notex\":1})})),i\u003de.step.label,a\u003dr._gd._fullLayout._meta;return a\u0026\u0026(i\u003ds.templateString(i,a)),n.call(o.font,r.font).text(i).call(c.convertToTspans,r._gd),n}function w(t,e){var r\u003ds.ensureSingle(t,\"g\",f.labelsClass),i\u003de._dims,a\u003dr.selectAll(\"g.\"+f.labelGroupClass).data(i.labelSteps);a.enter().append(\"g\").classed(f.labelGroupClass,!0),a.exit().remove(),a.each((function(t){var r\u003dn.select(this);r.call(_,t,e),o.setTranslate(r,E(e,t.fraction),f.tickOffset+e.ticklen+e.font.size*p+f.labelOffset+i.currentValueTotalHeight)}))}function T(t,e,r,n,i){var a\u003dMath.round(n*(r._stepCount-1)),o\u003dr._visibleSteps[a]._index;o!\u003d\u003dr.active\u0026\u0026k(t,e,r,o,!0,i)}function k(t,e,r,n,a,o){var s\u003dr.active;r.active\u003dn,u(t.layout,f.name,r).applyUpdate(\"active\",n);var l\u003dr.steps[r.active];e.call(S,r,o),e.call(x,r),t.emit(\"plotly_sliderchange\",{slider:r,step:r.steps[r.active],interaction:a,previousActive:s}),l\u0026\u0026l.method\u0026\u0026a\u0026\u0026(e._nextMethod?(e._nextMethod.step\u003dl,e._nextMethod.doCallback\u003da,e._nextMethod.doTransition\u003do):(e._nextMethod\u003d{step:l,doCallback:a,doTransition:o},e._nextMethodRaf\u003dwindow.requestAnimationFrame((function(){var r\u003de._nextMethod.step;r.method\u0026\u0026(r.execute\u0026\u0026i.executeAPICommand(t,r.method,r.args),e._nextMethod\u003dnull,e._nextMethodRaf\u003dnull)}))))}function M(t,e,r){var i\u003dr.node(),o\u003dn.select(e);function s(){return r.data()[0]}t.on(\"mousedown\",(function(){var t\u003ds();e.emit(\"plotly_sliderstart\",{slider:t});var l\u003dr.select(\".\"+f.gripRectClass);n.event.stopPropagation(),n.event.preventDefault(),l.call(a.fill,t.activebgcolor);var c\u003dL(t,n.mouse(i)[0]);T(e,r,t,c,!0),t._dragging\u003d!0,o.on(\"mousemove\",(function(){var t\u003ds(),a\u003dL(t,n.mouse(i)[0]);T(e,r,t,a,!1)})),o.on(\"mouseup\",(function(){var t\u003ds();t._dragging\u003d!1,l.call(a.fill,t.bgcolor),o.on(\"mouseup\",null),o.on(\"mousemove\",null),e.emit(\"plotly_sliderend\",{slider:t,step:t.steps[t.active]})}))}))}function A(t,e){var r\u003dt.selectAll(\"rect.\"+f.tickRectClass).data(e._visibleSteps),i\u003de._dims;r.enter().append(\"rect\").classed(f.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+\"px\",\"shape-rendering\":\"crispEdges\"}),r.each((function(t,r){var s\u003dr%i.labelStride\u003d\u003d0,l\u003dn.select(this);l.attr({height:s?e.ticklen:e.minorticklen}).call(a.fill,e.tickcolor),o.setTranslate(l,E(e,r/(e._stepCount-1))-.5*e.tickwidth,(s?f.tickOffset:f.minorTickOffset)+i.currentValueTotalHeight)}))}function S(t,e,r){for(var n\u003dt.select(\"rect.\"+f.gripRectClass),i\u003d0,a\u003d0;a\u003ce._stepCount;a++)if(e._visibleSteps[a]._index\u003d\u003d\u003de.active){i\u003da;break}var o\u003dE(e,i/(e._stepCount-1));if(!e._invokingCommand){var s\u003dn;r\u0026\u0026e.transition.duration\u003e0\u0026\u0026(s\u003ds.transition().duration(e.transition.duration).ease(e.transition.easing)),s.attr(\"transform\",l(o-.5*f.gripWidth,e._dims.currentValueTotalHeight))}}function E(t,e){var r\u003dt._dims;return r.inputAreaStart+f.stepInset+(r.inputAreaLength-2*f.stepInset)*Math.min(1,Math.max(0,e))}function L(t,e){var r\u003dt._dims;return Math.min(1,Math.max(0,(e-f.stepInset-r.inputAreaStart)/(r.inputAreaLength-2*f.stepInset-2*r.inputAreaStart)))}function C(t,e,r){var n\u003dr._dims,i\u003ds.ensureSingle(t,\"rect\",f.railTouchRectClass,(function(n){n.call(M,e,t,r).style(\"pointer-events\",\"all\")}));i.attr({width:n.inputAreaLength,height:Math.max(n.inputAreaWidth,f.tickOffset+r.ticklen+n.labelHeight)}).call(a.fill,r.bgcolor).attr(\"opacity\",0),o.setTranslate(i,0,n.currentValueTotalHeight)}function P(t,e){var r\u003de._dims,n\u003dr.inputAreaLength-2*f.railInset,i\u003ds.ensureSingle(t,\"rect\",f.railRectClass);i.attr({width:n,height:f.railWidth,rx:f.railRadius,ry:f.railRadius,\"shape-rendering\":\"crispEdges\"}).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\"),o.setTranslate(i,f.railInset,.5*(r.inputAreaWidth-f.railWidth)+r.currentValueTotalHeight)}e.exports\u003dfunction(t){var e\u003dt._fullLayout,r\u003dfunction(t,e){for(var r\u003dt[f.name],n\u003d[],i\u003d0;i\u003cr.length;i++){var a\u003dr[i];a.visible\u0026\u0026(a._gd\u003de,n.push(a))}return n}(e,t),a\u003de._infolayer.selectAll(\"g.\"+f.containerClassName).data(r.length\u003e0?[0]:[]);function s(e){e._commandObserver\u0026\u0026(e._commandObserver.remove(),delete e._commandObserver),i.autoMargin(t,g(e))}if(a.enter().append(\"g\").classed(f.containerClassName,!0).style(\"cursor\",\"ew-resize\"),a.exit().each((function(){n.select(this).selectAll(\"g.\"+f.groupClassName).each(s)})).remove(),0!\u003d\u003dr.length){var l\u003da.selectAll(\"g.\"+f.groupClassName).data(r,v);l.enter().append(\"g\").classed(f.groupClassName,!0),l.exit().each(s).remove();for(var c\u003d0;c\u003cr.length;c++){var u\u003dr[c];y(t,u)}l.each((function(e){var r\u003dn.select(this);!function(t){var e\u003dt._dims;e.labelSteps\u003d[];for(var r\u003dt._stepCount,n\u003d0;n\u003cr;n+\u003de.labelStride)e.labelSteps.push({fraction:n/(r-1),step:t._visibleSteps[n]})}(e),i.manageCommandObserver(t,e,e._visibleSteps,(function(e){var n\u003dr.data()[0];n.active!\u003d\u003de.index\u0026\u0026(n._dragging||k(t,r,n,e.index,!1,!0))})),function(t,e,r){(r.steps[r.active]||{}).visible||(r.active\u003dr._visibleSteps[0]._index);e.call(x,r).call(P,r).call(w,r).call(A,r).call(C,t,r).call(b,t,r);var n\u003dr._dims;o.setTranslate(e,n.lx+r.pad.l,n.ly+r.pad.t),e.call(S,r,!1),e.call(x,r)}(t,n.select(this),e)}))}}},{\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plot_api/plot_template\":838,\"../../plots/plots\":913,\"../color\":662,\"../drawing\":684,\"./constants\":756,\"@plotly/d3\":58}],759:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\");e.exports\u003d{moduleType:\"component\",name:n.name,layoutAttributes:t(\"./attributes\"),supplyLayoutDefaults:t(\"./defaults\"),draw:t(\"./draw\")}},{\"./attributes\":755,\"./constants\":756,\"./defaults\":757,\"./draw\":758}],760:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../plots/plots\"),o\u003dt(\"../../registry\"),s\u003dt(\"../../lib\"),l\u003ds.strTranslate,c\u003dt(\"../drawing\"),u\u003dt(\"../color\"),f\u003dt(\"../../lib/svg_text_utils\"),h\u003dt(\"../../constants/interactions\"),p\u003dt(\"../../constants/alignment\").OPPOSITE_SIDE,d\u003d/ [XY][0-9]* /;e.exports\u003d{draw:function(t,e,r){var m,g\u003dr.propContainer,v\u003dr.propName,y\u003dr.placeholder,x\u003dr.traceIndex,b\u003dr.avoid||{},_\u003dr.attributes,w\u003dr.transform,T\u003dr.containerGroup,k\u003dt._fullLayout,M\u003d1,A\u003d!1,S\u003dg.title,E\u003d(S\u0026\u0026S.text?S.text:\"\").trim(),L\u003dS\u0026\u0026S.font?S.font:{},C\u003dL.family,P\u003dL.size,I\u003dL.color;\"title.text\"\u003d\u003d\u003dv?m\u003d\"titleText\":-1!\u003d\u003dv.indexOf(\"axis\")?m\u003d\"axisTitleText\":v.indexOf(!0)\u0026\u0026(m\u003d\"colorbarTitleText\");var O\u003dt._context.edits[m];\"\"\u003d\u003d\u003dE?M\u003d0:E.replace(d,\" % \")\u003d\u003d\u003dy.replace(d,\" % \")\u0026\u0026(M\u003d.2,A\u003d!0,O||(E\u003d\"\")),r._meta?E\u003ds.templateString(E,r._meta):k._meta\u0026\u0026(E\u003ds.templateString(E,k._meta));var z\u003dE||O;T||(T\u003ds.ensureSingle(k._infolayer,\"g\",\"g-\"+e));var D\u003dT.selectAll(\"text\").data(z?[0]:[]);if(D.enter().append(\"text\"),D.text(E).attr(\"class\",e),D.exit().remove(),!z)return T;function R(t){s.syncOrAsync([F,B],t)}function F(e){var r;return w?(r\u003d\"\",w.rotate\u0026\u0026(r+\u003d\"rotate(\"+[w.rotate,_.x,_.y]+\")\"),w.offset\u0026\u0026(r+\u003dl(0,w.offset))):r\u003dnull,e.attr(\"transform\",r),e.style({\"font-family\":C,\"font-size\":n.round(P,2)+\"px\",fill:u.rgb(I),opacity:M*u.opacity(I),\"font-weight\":a.fontWeight}).attr(_).call(f.convertToTspans,t),a.previousPromises(t)}function B(t){var e\u003dn.select(t.node().parentNode);if(b\u0026\u0026b.selection\u0026\u0026b.side\u0026\u0026E){e.attr(\"transform\",null);var r\u003dp[b.side],a\u003d\"left\"\u003d\u003d\u003db.side||\"top\"\u003d\u003d\u003db.side?-1:1,o\u003di(b.pad)?b.pad:2,u\u003dc.bBox(e.node()),f\u003d{left:0,top:0,right:k.width,bottom:k.height},h\u003db.maxShift||a*(f[b.side]-u[b.side]),d\u003d0;if(h\u003c0)d\u003dh;else{var m\u003db.offsetLeft||0,g\u003db.offsetTop||0;u.left-\u003dm,u.right-\u003dm,u.top-\u003dg,u.bottom-\u003dg,b.selection.each((function(){var t\u003dc.bBox(this);s.bBoxIntersect(u,t,o)\u0026\u0026(d\u003dMath.max(d,a*(t[b.side]-u[r])+o))})),d\u003dMath.min(h,d)}if(d\u003e0||h\u003c0){var v\u003d{left:[-d,0],right:[d,0],top:[0,-d],bottom:[0,d]}[b.side];e.attr(\"transform\",l(v[0],v[1]))}}}return D.call(R),O\u0026\u0026(E?D.on(\".opacity\",null):(M\u003d0,A\u003d!0,D.text(y).on(\"mouseover.opacity\",(function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style(\"opacity\",1)})).on(\"mouseout.opacity\",(function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style(\"opacity\",0)}))),D.call(f.makeEditable,{gd:t}).on(\"edit\",(function(e){void 0!\u003d\u003dx?o.call(\"_guiRestyle\",t,v,e,x):o.call(\"_guiRelayout\",t,v,e)})).on(\"cancel\",(function(){this.text(this.attr(\"data-unformatted\")).call(R)})).on(\"input\",(function(t){this.text(t||\" \").call(f.positionText,_.x,_.y)}))),D.classed(\"js-placeholder\",A),T}}},{\"../../constants/alignment\":767,\"../../constants/interactions\":774,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/plots\":913,\"../../registry\":927,\"../color\":662,\"../drawing\":684,\"@plotly/d3\":58,\"fast-isnumeric\":245}],761:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"../color/attributes\"),a\u003dt(\"../../lib/extend\").extendFlat,o\u003dt(\"../../plot_api/edit_types\").overrideAll,s\u003dt(\"../../plots/pad_attributes\"),l\u003dt(\"../../plot_api/plot_template\").templatedArray,c\u003dl(\"button\",{visible:{valType:\"boolean\"},method:{valType:\"enumerated\",values:[\"restyle\",\"relayout\",\"animate\",\"update\",\"skip\"],dflt:\"restyle\"},args:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},args2:{valType:\"info_array\",freeLength:!0,items:[{valType:\"any\"},{valType:\"any\"},{valType:\"any\"}]},label:{valType:\"string\",dflt:\"\"},execute:{valType:\"boolean\",dflt:!0}});e.exports\u003do(l(\"updatemenu\",{_arrayAttrRegexps:[/^updatemenus\\[(0|[1-9][0-9]+)\\]\\.buttons/],visible:{valType:\"boolean\"},type:{valType:\"enumerated\",values:[\"dropdown\",\"buttons\"],dflt:\"dropdown\"},direction:{valType:\"enumerated\",values:[\"left\",\"right\",\"up\",\"down\"],dflt:\"down\"},active:{valType:\"integer\",min:-1,dflt:0},showactive:{valType:\"boolean\",dflt:!0},buttons:c,x:{valType:\"number\",min:-2,max:3,dflt:-.05},xanchor:{valType:\"enumerated\",values:[\"auto\",\"left\",\"center\",\"right\"],dflt:\"right\"},y:{valType:\"number\",min:-2,max:3,dflt:1},yanchor:{valType:\"enumerated\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],dflt:\"top\"},pad:a(s({editType:\"arraydraw\"}),{}),font:n({}),bgcolor:{valType:\"color\"},bordercolor:{valType:\"color\",dflt:i.borderLine},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"arraydraw\"}}),\"arraydraw\",\"from-root\")},{\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plot_api/plot_template\":838,\"../../plots/font_attributes\":878,\"../../plots/pad_attributes\":912,\"../color/attributes\":661}],762:[function(t,e,r){\"use strict\";e.exports\u003d{name:\"updatemenus\",containerClassName:\"updatemenu-container\",headerGroupClassName:\"updatemenu-header-group\",headerClassName:\"updatemenu-header\",headerArrowClassName:\"updatemenu-header-arrow\",dropdownButtonGroupClassName:\"updatemenu-dropdown-button-group\",dropdownButtonClassName:\"updatemenu-dropdown-button\",buttonClassName:\"updatemenu-button\",itemRectClassName:\"updatemenu-item-rect\",itemTextClassName:\"updatemenu-item-text\",menuIndexAttrName:\"updatemenu-active-index\",autoMarginIdRoot:\"updatemenu-\",blankHeaderOpts:{label:\"  \"},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:\"#F4FAFF\",hoverColor:\"#F4FAFF\",arrowSymbol:{left:\"\\u25c4\",right:\"\\u25ba\",up:\"\\u25b2\",down:\"\\u25bc\"}}},{}],763:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/array_container_defaults\"),a\u003dt(\"./attributes\"),o\u003dt(\"./constants\").name,s\u003da.buttons;function l(t,e,r){function o(r,i){return n.coerce(t,e,a,r,i)}o(\"visible\",i(t,e,{name:\"buttons\",handleItemDefaults:c}).length\u003e0)\u0026\u0026(o(\"active\"),o(\"direction\"),o(\"type\"),o(\"showactive\"),o(\"x\"),o(\"y\"),n.noneOrAll(t,e,[\"x\",\"y\"]),o(\"xanchor\"),o(\"yanchor\"),o(\"pad.t\"),o(\"pad.r\"),o(\"pad.b\"),o(\"pad.l\"),n.coerceFont(o,\"font\",r.font),o(\"bgcolor\",r.paper_bgcolor),o(\"bordercolor\"),o(\"borderwidth\"))}function c(t,e){function r(r,i){return n.coerce(t,e,s,r,i)}r(\"visible\",\"skip\"\u003d\u003d\u003dt.method||Array.isArray(t.args))\u0026\u0026(r(\"method\"),r(\"args\"),r(\"args2\"),r(\"label\"),r(\"execute\"))}e.exports\u003dfunction(t,e){i(t,e,{name:o,handleItemDefaults:l})}},{\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"./attributes\":761,\"./constants\":762}],764:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../plots/plots\"),a\u003dt(\"../color\"),o\u003dt(\"../drawing\"),s\u003dt(\"../../lib\"),l\u003dt(\"../../lib/svg_text_utils\"),c\u003dt(\"../../plot_api/plot_template\").arrayEditor,u\u003dt(\"../../constants/alignment\").LINE_SPACING,f\u003dt(\"./constants\"),h\u003dt(\"./scrollbox\");function p(t){return t._index}function d(t,e){return+t.attr(f.menuIndexAttrName)\u003d\u003d\u003de._index}function m(t,e,r,n,i,a,o,s){e.active\u003do,c(t.layout,f.name,e).applyUpdate(\"active\",o),\"buttons\"\u003d\u003d\u003de.type?v(t,n,null,null,e):\"dropdown\"\u003d\u003d\u003de.type\u0026\u0026(i.attr(f.menuIndexAttrName,\"-1\"),g(t,n,i,a,e),s||v(t,n,i,a,e))}function g(t,e,r,n,i){var a\u003ds.ensureSingle(e,\"g\",f.headerClassName,(function(t){t.style(\"pointer-events\",\"all\")})),l\u003di._dims,c\u003di.active,u\u003di.buttons[c]||f.blankHeaderOpts,h\u003d{y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},p\u003d{width:l.headerWidth,height:l.headerHeight};a.call(y,i,u,t).call(A,i,h,p),s.ensureSingle(e,\"text\",f.headerArrowClassName,(function(t){t.attr(\"text-anchor\",\"end\").call(o.font,i.font).text(f.arrowSymbol[i.direction])})).attr({x:l.headerWidth-f.arrowOffsetX+i.pad.l,y:l.headerHeight/2+f.textOffsetY+i.pad.t}),a.on(\"click\",(function(){r.call(S,String(d(r,i)?-1:i._index)),v(t,e,r,n,i)})),a.on(\"mouseover\",(function(){a.call(w)})),a.on(\"mouseout\",(function(){a.call(T,i)})),o.setTranslate(e,l.lx,l.ly)}function v(t,e,r,a,o){r||(r\u003de).attr(\"pointer-events\",\"all\");var l\u003dfunction(t){return-1\u003d\u003d+t.attr(f.menuIndexAttrName)}(r)\u0026\u0026\"buttons\"!\u003d\u003do.type?[]:o.buttons,c\u003d\"dropdown\"\u003d\u003d\u003do.type?f.dropdownButtonClassName:f.buttonClassName,u\u003dr.selectAll(\"g.\"+c).data(s.filterVisible(l)),h\u003du.enter().append(\"g\").classed(c,!0),p\u003du.exit();\"dropdown\"\u003d\u003d\u003do.type?(h.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\"),p.transition().attr(\"opacity\",\"0\").remove()):p.remove();var d\u003d0,g\u003d0,v\u003do._dims,x\u003d-1!\u003d\u003d[\"up\",\"down\"].indexOf(o.direction);\"dropdown\"\u003d\u003d\u003do.type\u0026\u0026(x?g\u003dv.headerHeight+f.gapButtonHeader:d\u003dv.headerWidth+f.gapButtonHeader),\"dropdown\"\u003d\u003d\u003do.type\u0026\u0026\"up\"\u003d\u003d\u003do.direction\u0026\u0026(g\u003d-f.gapButtonHeader+f.gapButton-v.openHeight),\"dropdown\"\u003d\u003d\u003do.type\u0026\u0026\"left\"\u003d\u003d\u003do.direction\u0026\u0026(d\u003d-f.gapButtonHeader+f.gapButton-v.openWidth);var b\u003d{x:v.lx+d+o.pad.l,y:v.ly+g+o.pad.t,yPad:f.gapButton,xPad:f.gapButton,index:0},k\u003d{l:b.x+o.borderwidth,t:b.y+o.borderwidth};u.each((function(s,l){var c\u003dn.select(this);c.call(y,o,s,t).call(A,o,b),c.on(\"click\",(function(){n.event.defaultPrevented||(s.execute\u0026\u0026(s.args2\u0026\u0026o.active\u003d\u003d\u003dl?(m(t,o,0,e,r,a,-1),i.executeAPICommand(t,s.method,s.args2)):(m(t,o,0,e,r,a,l),i.executeAPICommand(t,s.method,s.args))),t.emit(\"plotly_buttonclicked\",{menu:o,button:s,active:o.active}))})),c.on(\"mouseover\",(function(){c.call(w)})),c.on(\"mouseout\",(function(){c.call(T,o),u.call(_,o)}))})),u.call(_,o),x?(k.w\u003dMath.max(v.openWidth,v.headerWidth),k.h\u003db.y-k.t):(k.w\u003db.x-k.l,k.h\u003dMath.max(v.openHeight,v.headerHeight)),k.direction\u003do.direction,a\u0026\u0026(u.size()?function(t,e,r,n,i,a){var o,s,l,c\u003di.direction,u\u003d\"up\"\u003d\u003d\u003dc||\"down\"\u003d\u003d\u003dc,h\u003di._dims,p\u003di.active;if(u)for(s\u003d0,l\u003d0;l\u003cp;l++)s+\u003dh.heights[l]+f.gapButton;else for(o\u003d0,l\u003d0;l\u003cp;l++)o+\u003dh.widths[l]+f.gapButton;n.enable(a,o,s),n.hbar\u0026\u0026n.hbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\");n.vbar\u0026\u0026n.vbar.attr(\"opacity\",\"0\").transition().attr(\"opacity\",\"1\")}(0,0,0,a,o,k):function(t){var e\u003d!!t.hbar,r\u003d!!t.vbar;e\u0026\u0026t.hbar.transition().attr(\"opacity\",\"0\").each(\"end\",(function(){e\u003d!1,r||t.disable()}));r\u0026\u0026t.vbar.transition().attr(\"opacity\",\"0\").each(\"end\",(function(){r\u003d!1,e||t.disable()}))}(a))}function y(t,e,r,n){t.call(x,e).call(b,e,r,n)}function x(t,e){s.ensureSingle(t,\"rect\",f.itemRectClassName,(function(t){t.attr({rx:f.rx,ry:f.ry,\"shape-rendering\":\"crispEdges\"})})).call(a.stroke,e.bordercolor).call(a.fill,e.bgcolor).style(\"stroke-width\",e.borderwidth+\"px\")}function b(t,e,r,n){var i\u003ds.ensureSingle(t,\"text\",f.itemTextClassName,(function(t){t.attr({\"text-anchor\":\"start\",\"data-notex\":1})})),a\u003dr.label,c\u003dn._fullLayout._meta;c\u0026\u0026(a\u003ds.templateString(a,c)),i.call(o.font,e.font).text(a).call(l.convertToTspans,n)}function _(t,e){var r\u003de.active;t.each((function(t,i){var o\u003dn.select(this);i\u003d\u003d\u003dr\u0026\u0026e.showactive\u0026\u0026o.select(\"rect.\"+f.itemRectClassName).call(a.fill,f.activeColor)}))}function w(t){t.select(\"rect.\"+f.itemRectClassName).call(a.fill,f.hoverColor)}function T(t,e){t.select(\"rect.\"+f.itemRectClassName).call(a.fill,e.bgcolor)}function k(t,e){var r\u003de._dims\u003d{width1:0,height1:0,heights:[],widths:[],totalWidth:0,totalHeight:0,openWidth:0,openHeight:0,lx:0,ly:0},a\u003do.tester.selectAll(\"g.\"+f.dropdownButtonClassName).data(s.filterVisible(e.buttons));a.enter().append(\"g\").classed(f.dropdownButtonClassName,!0);var c\u003d-1!\u003d\u003d[\"up\",\"down\"].indexOf(e.direction);a.each((function(i,a){var s\u003dn.select(this);s.call(y,e,i,t);var h\u003ds.select(\".\"+f.itemTextClassName),p\u003dh.node()\u0026\u0026o.bBox(h.node()).width,d\u003dMath.max(p+f.textPadX,f.minWidth),m\u003de.font.size*u,g\u003dl.lineCount(h),v\u003dMath.max(m*g,f.minHeight)+f.textOffsetY;v\u003dMath.ceil(v),d\u003dMath.ceil(d),r.widths[a]\u003dd,r.heights[a]\u003dv,r.height1\u003dMath.max(r.height1,v),r.width1\u003dMath.max(r.width1,d),c?(r.totalWidth\u003dMath.max(r.totalWidth,d),r.openWidth\u003dr.totalWidth,r.totalHeight+\u003dv+f.gapButton,r.openHeight+\u003dv+f.gapButton):(r.totalWidth+\u003dd+f.gapButton,r.openWidth+\u003dd+f.gapButton,r.totalHeight\u003dMath.max(r.totalHeight,v),r.openHeight\u003dr.totalHeight)})),c?r.totalHeight-\u003df.gapButton:r.totalWidth-\u003df.gapButton,r.headerWidth\u003dr.width1+f.arrowPadX,r.headerHeight\u003dr.height1,\"dropdown\"\u003d\u003d\u003de.type\u0026\u0026(c?(r.width1+\u003df.arrowPadX,r.totalHeight\u003dr.height1):r.totalWidth\u003dr.width1,r.totalWidth+\u003df.arrowPadX),a.remove();var h\u003dr.totalWidth+e.pad.l+e.pad.r,p\u003dr.totalHeight+e.pad.t+e.pad.b,d\u003dt._fullLayout._size;r.lx\u003dd.l+d.w*e.x,r.ly\u003dd.t+d.h*(1-e.y);var m\u003d\"left\";s.isRightAnchor(e)\u0026\u0026(r.lx-\u003dh,m\u003d\"right\"),s.isCenterAnchor(e)\u0026\u0026(r.lx-\u003dh/2,m\u003d\"center\");var g\u003d\"top\";s.isBottomAnchor(e)\u0026\u0026(r.ly-\u003dp,g\u003d\"bottom\"),s.isMiddleAnchor(e)\u0026\u0026(r.ly-\u003dp/2,g\u003d\"middle\"),r.totalWidth\u003dMath.ceil(r.totalWidth),r.totalHeight\u003dMath.ceil(r.totalHeight),r.lx\u003dMath.round(r.lx),r.ly\u003dMath.round(r.ly),i.autoMargin(t,M(e),{x:e.x,y:e.y,l:h*({right:1,center:.5}[m]||0),r:h*({left:1,center:.5}[m]||0),b:p*({top:1,middle:.5}[g]||0),t:p*({bottom:1,middle:.5}[g]||0)})}function M(t){return f.autoMarginIdRoot+t._index}function A(t,e,r,n){n\u003dn||{};var i\u003dt.select(\".\"+f.itemRectClassName),a\u003dt.select(\".\"+f.itemTextClassName),s\u003de.borderwidth,c\u003dr.index,h\u003de._dims;o.setTranslate(t,s+r.x,s+r.y);var p\u003d-1!\u003d\u003d[\"up\",\"down\"].indexOf(e.direction),d\u003dn.height||(p?h.heights[c]:h.height1);i.attr({x:0,y:0,width:n.width||(p?h.width1:h.widths[c]),height:d});var m\u003de.font.size*u,g\u003d(l.lineCount(a)-1)*m/2;l.positionText(a,f.textOffsetX,d/2-g+f.textOffsetY),p?r.y+\u003dh.heights[c]+r.yPad:r.x+\u003dh.widths[c]+r.xPad,r.index++}function S(t,e){t.attr(f.menuIndexAttrName,e||\"-1\").selectAll(\"g.\"+f.dropdownButtonClassName).remove()}e.exports\u003dfunction(t){var e\u003dt._fullLayout,r\u003ds.filterVisible(e[f.name]);function a(e){i.autoMargin(t,M(e))}var o\u003de._menulayer.selectAll(\"g.\"+f.containerClassName).data(r.length\u003e0?[0]:[]);if(o.enter().append(\"g\").classed(f.containerClassName,!0).style(\"cursor\",\"pointer\"),o.exit().each((function(){n.select(this).selectAll(\"g.\"+f.headerGroupClassName).each(a)})).remove(),0!\u003d\u003dr.length){var l\u003do.selectAll(\"g.\"+f.headerGroupClassName).data(r,p);l.enter().append(\"g\").classed(f.headerGroupClassName,!0);for(var c\u003ds.ensureSingle(o,\"g\",f.dropdownButtonGroupClassName,(function(t){t.style(\"pointer-events\",\"all\")})),u\u003d0;u\u003cr.length;u++){var y\u003dr[u];k(t,y)}var x\u003d\"updatemenus\"+e._uid,b\u003dnew h(t,c,x);l.enter().size()\u0026\u0026(c.node().parentNode.appendChild(c.node()),c.call(S)),l.exit().each((function(t){c.call(S),a(t)})).remove(),l.each((function(e){var r\u003dn.select(this),a\u003d\"dropdown\"\u003d\u003d\u003de.type?c:null;i.manageCommandObserver(t,e,e.buttons,(function(n){m(t,e,e.buttons[n.index],r,a,b,n.index,!0)})),\"dropdown\"\u003d\u003d\u003de.type?(g(t,r,c,b,e),d(c,e)\u0026\u0026v(t,r,c,b,e)):v(t,r,null,null,e)}))}}},{\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plot_api/plot_template\":838,\"../../plots/plots\":913,\"../color\":662,\"../drawing\":684,\"./constants\":762,\"./scrollbox\":766,\"@plotly/d3\":58}],765:[function(t,e,r){arguments[4][759][0].apply(r,arguments)},{\"./attributes\":761,\"./constants\":762,\"./defaults\":763,\"./draw\":764,dup:759}],766:[function(t,e,r){\"use strict\";e.exports\u003ds;var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../color\"),a\u003dt(\"../drawing\"),o\u003dt(\"../../lib\");function s(t,e,r){this.gd\u003dt,this.container\u003de,this.id\u003dr,this.position\u003dnull,this.translateX\u003dnull,this.translateY\u003dnull,this.hbar\u003dnull,this.vbar\u003dnull,this.bg\u003dthis.container.selectAll(\"rect.scrollbox-bg\").data([0]),this.bg.exit().on(\".drag\",null).on(\"wheel\",null).remove(),this.bg.enter().append(\"rect\").classed(\"scrollbox-bg\",!0).style(\"pointer-events\",\"all\").attr({opacity:0,x:0,y:0,width:0,height:0})}s.barWidth\u003d2,s.barLength\u003d20,s.barRadius\u003d2,s.barPad\u003d1,s.barColor\u003d\"#808BA4\",s.prototype.enable\u003dfunction(t,e,r){var o\u003dthis.gd._fullLayout,l\u003do.width,c\u003do.height;this.position\u003dt;var u,f,h,p,d\u003dthis.position.l,m\u003dthis.position.w,g\u003dthis.position.t,v\u003dthis.position.h,y\u003dthis.position.direction,x\u003d\"down\"\u003d\u003d\u003dy,b\u003d\"left\"\u003d\u003d\u003dy,_\u003d\"up\"\u003d\u003d\u003dy,w\u003dm,T\u003dv;x||b||\"right\"\u003d\u003d\u003dy||_||(this.position.direction\u003d\"down\",x\u003d!0),x||_?(f\u003d(u\u003dd)+w,x?(h\u003dg,T\u003d(p\u003dMath.min(h+T,c))-h):T\u003d(p\u003dg+T)-(h\u003dMath.max(p-T,0))):(p\u003d(h\u003dg)+T,b?w\u003d(f\u003dd+w)-(u\u003dMath.max(f-w,0)):(u\u003dd,w\u003d(f\u003dMath.min(u+w,l))-u)),this._box\u003d{l:u,t:h,w:w,h:T};var k\u003dm\u003ew,M\u003ds.barLength+2*s.barPad,A\u003ds.barWidth+2*s.barPad,S\u003dd,E\u003dg+v;E+A\u003ec\u0026\u0026(E\u003dc-A);var L\u003dthis.container.selectAll(\"rect.scrollbar-horizontal\").data(k?[0]:[]);L.exit().on(\".drag\",null).remove(),L.enter().append(\"rect\").classed(\"scrollbar-horizontal\",!0).call(i.fill,s.barColor),k?(this.hbar\u003dL.attr({rx:s.barRadius,ry:s.barRadius,x:S,y:E,width:M,height:A}),this._hbarXMin\u003dS+M/2,this._hbarTranslateMax\u003dw-M):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var C\u003dv\u003eT,P\u003ds.barWidth+2*s.barPad,I\u003ds.barLength+2*s.barPad,O\u003dd+m,z\u003dg;O+P\u003el\u0026\u0026(O\u003dl-P);var D\u003dthis.container.selectAll(\"rect.scrollbar-vertical\").data(C?[0]:[]);D.exit().on(\".drag\",null).remove(),D.enter().append(\"rect\").classed(\"scrollbar-vertical\",!0).call(i.fill,s.barColor),C?(this.vbar\u003dD.attr({rx:s.barRadius,ry:s.barRadius,x:O,y:z,width:P,height:I}),this._vbarYMin\u003dz+I/2,this._vbarTranslateMax\u003dT-I):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var R\u003dthis.id,F\u003du-.5,B\u003dC?f+P+.5:f+.5,N\u003dh-.5,j\u003dk?p+A+.5:p+.5,U\u003do._topdefs.selectAll(\"#\"+R).data(k||C?[0]:[]);if(U.exit().remove(),U.enter().append(\"clipPath\").attr(\"id\",R).append(\"rect\"),k||C?(this._clipRect\u003dU.select(\"rect\").attr({x:Math.floor(F),y:Math.floor(N),width:Math.ceil(B)-Math.floor(F),height:Math.ceil(j)-Math.floor(N)}),this.container.call(a.setClipUrl,R,this.gd),this.bg.attr({x:d,y:g,width:m,height:v})):(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),k||C){var V\u003dn.behavior.drag().on(\"dragstart\",(function(){n.event.sourceEvent.preventDefault()})).on(\"drag\",this._onBoxDrag.bind(this));this.container.on(\"wheel\",null).on(\"wheel\",this._onBoxWheel.bind(this)).on(\".drag\",null).call(V);var q\u003dn.behavior.drag().on(\"dragstart\",(function(){n.event.sourceEvent.preventDefault(),n.event.sourceEvent.stopPropagation()})).on(\"drag\",this._onBarDrag.bind(this));k\u0026\u0026this.hbar.on(\".drag\",null).call(q),C\u0026\u0026this.vbar.on(\".drag\",null).call(q)}this.setTranslate(e,r)},s.prototype.disable\u003dfunction(){(this.hbar||this.vbar)\u0026\u0026(this.bg.attr({width:0,height:0}),this.container.on(\"wheel\",null).on(\".drag\",null).call(a.setClipUrl,null),delete this._clipRect),this.hbar\u0026\u0026(this.hbar.on(\".drag\",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar\u0026\u0026(this.vbar.on(\".drag\",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},s.prototype._onBoxDrag\u003dfunction(){var t\u003dthis.translateX,e\u003dthis.translateY;this.hbar\u0026\u0026(t-\u003dn.event.dx),this.vbar\u0026\u0026(e-\u003dn.event.dy),this.setTranslate(t,e)},s.prototype._onBoxWheel\u003dfunction(){var t\u003dthis.translateX,e\u003dthis.translateY;this.hbar\u0026\u0026(t+\u003dn.event.deltaY),this.vbar\u0026\u0026(e+\u003dn.event.deltaY),this.setTranslate(t,e)},s.prototype._onBarDrag\u003dfunction(){var t\u003dthis.translateX,e\u003dthis.translateY;if(this.hbar){var r\u003dt+this._hbarXMin,i\u003dr+this._hbarTranslateMax;t\u003d(o.constrain(n.event.x,r,i)-r)/(i-r)*(this.position.w-this._box.w)}if(this.vbar){var a\u003de+this._vbarYMin,s\u003da+this._vbarTranslateMax;e\u003d(o.constrain(n.event.y,a,s)-a)/(s-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},s.prototype.setTranslate\u003dfunction(t,e){var r\u003dthis.position.w-this._box.w,n\u003dthis.position.h-this._box.h;if(t\u003do.constrain(t||0,0,r),e\u003do.constrain(e||0,0,n),this.translateX\u003dt,this.translateY\u003de,this.container.call(a.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect\u0026\u0026this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i\u003dt/r;this.hbar.call(a.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var s\u003de/n;this.vbar.call(a.setTranslate,t,e+s*this._vbarTranslateMax)}}},{\"../../lib\":799,\"../color\":662,\"../drawing\":684,\"@plotly/d3\":58}],767:[function(t,e,r){\"use strict\";e.exports\u003d{FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},FROM_BR:{left:1,center:.5,right:0,bottom:0,middle:.5,top:1},LINE_SPACING:1.3,CAP_SHIFT:.7,MID_SHIFT:.35,OPPOSITE_SIDE:{left:\"right\",right:\"left\",top:\"bottom\",bottom:\"top\"}}},{}],768:[function(t,e,r){\"use strict\";e.exports\u003d{axisRefDescription:function(t,e,r){return[\"If set to a\",t,\"axis id (e.g. *\"+t+\"* or\",\"*\"+t+\"2*), the `\"+t+\"` position refers to a\",t,\"coordinate. If set to *paper*, the `\"+t+\"`\",\"position refers to the distance from the\",e,\"of the plotting\",\"area in normalized coordinates where *0* (*1*) corresponds to the\",e,\"(\"+r+\"). If set to a\",t,\"axis ID followed by\",\"*domain* (separated by a space), the position behaves like for\",\"*paper*, but refers to the distance in fractions of the domain\",\"length from the\",e,\"of the domain of that axis: e.g.,\",\"*\"+t+\"2 domain* refers to the domain of the second\",t,\" axis and a\",t,\"position of 0.5 refers to the\",\"point between the\",e,\"and the\",r,\"of the domain of the\",\"second\",t,\"axis.\"].join(\" \")}}},{}],769:[function(t,e,r){\"use strict\";e.exports\u003d{INCREASING:{COLOR:\"#3D9970\",SYMBOL:\"\\u25b2\"},DECREASING:{COLOR:\"#FF4136\",SYMBOL:\"\\u25bc\"}}},{}],770:[function(t,e,r){\"use strict\";e.exports\u003d{FORMAT_LINK:\"https://github.com/d3/d3-3.x-api-reference/blob/master/Formatting.md#d3_format\",DATE_FORMAT_LINK:\"https://github.com/d3/d3-time-format#locale_format\"}},{}],771:[function(t,e,r){\"use strict\";e.exports\u003d{COMPARISON_OPS:[\"\u003d\",\"!\u003d\",\"\u003c\",\"\u003e\u003d\",\"\u003e\",\"\u003c\u003d\"],COMPARISON_OPS2:[\"\u003d\",\"\u003c\",\"\u003e\u003d\",\"\u003e\",\"\u003c\u003d\"],INTERVAL_OPS:[\"[]\",\"()\",\"[)\",\"(]\",\"][\",\")(\",\"](\",\")[\"],SET_OPS:[\"{}\",\"}{\"],CONSTRAINT_REDUCTION:{\"\u003d\":\"\u003d\",\"\u003c\":\"\u003c\",\"\u003c\u003d\":\"\u003c\",\"\u003e\":\"\u003e\",\"\u003e\u003d\":\"\u003e\",\"[]\":\"[]\",\"()\":\"[]\",\"[)\":\"[]\",\"(]\":\"[]\",\"][\":\"][\",\")(\":\"][\",\"](\":\"][\",\")[\":\"][\"}}},{}],772:[function(t,e,r){\"use strict\";e.exports\u003d{solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},{}],773:[function(t,e,r){\"use strict\";e.exports\u003d{circle:\"\\u25cf\",\"circle-open\":\"\\u25cb\",square:\"\\u25a0\",\"square-open\":\"\\u25a1\",diamond:\"\\u25c6\",\"diamond-open\":\"\\u25c7\",cross:\"+\",x:\"\\u274c\"}},{}],774:[function(t,e,r){\"use strict\";e.exports\u003d{SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DESELECTDIM:.2}},{}],775:[function(t,e,r){\"use strict\";e.exports\u003d{BADNUM:void 0,FP_SAFE:1e-4*Number.MAX_VALUE,ONEMAXYEAR:316224e5,ONEAVGYEAR:315576e5,ONEMINYEAR:31536e6,ONEMAXQUARTER:79488e5,ONEAVGQUARTER:78894e5,ONEMINQUARTER:76896e5,ONEMAXMONTH:26784e5,ONEAVGMONTH:26298e5,ONEMINMONTH:24192e5,ONEWEEK:6048e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:.999999,LOG_CLIP:10,MINUS_SIGN:\"\\u2212\"}},{}],776:[function(t,e,r){\"use strict\";r.xmlns\u003d\"http://www.w3.org/2000/xmlns/\",r.svg\u003d\"http://www.w3.org/2000/svg\",r.xlink\u003d\"http://www.w3.org/1999/xlink\",r.svgAttrs\u003d{xmlns:r.svg,\"xmlns:xlink\":r.xlink}},{}],777:[function(t,e,r){\"use strict\";r.version\u003dt(\"./version\").version,t(\"native-promise-only\"),t(\"../build/plotcss\");for(var n\u003dt(\"./registry\"),i\u003dr.register\u003dn.register,a\u003dt(\"./plot_api\"),o\u003dObject.keys(a),s\u003d0;s\u003co.length;s++){var l\u003do[s];\"_\"!\u003d\u003dl.charAt(0)\u0026\u0026(r[l]\u003da[l]),i({moduleType:\"apiMethod\",name:l,fn:a[l]})}i(t(\"./traces/scatter\")),i([t(\"./components/legend\"),t(\"./components/fx\"),t(\"./components/annotations\"),t(\"./components/annotations3d\"),t(\"./components/shapes\"),t(\"./components/images\"),t(\"./components/updatemenus\"),t(\"./components/sliders\"),t(\"./components/rangeslider\"),t(\"./components/rangeselector\"),t(\"./components/grid\"),t(\"./components/errorbars\"),t(\"./components/colorscale\"),t(\"./components/colorbar\"),t(\"./components/modebar\")]),i([t(\"./locale-en\"),t(\"./locale-en-us\")]),window.PlotlyLocales\u0026\u0026Array.isArray(window.PlotlyLocales)\u0026\u0026(i(window.PlotlyLocales),delete window.PlotlyLocales),r.Icons\u003dt(\"./fonts/ploticon\");var c\u003dt(\"./components/fx\"),u\u003dt(\"./plots/plots\");r.Plots\u003d{resize:u.resize,graphJson:u.graphJson,sendDataToCloud:u.sendDataToCloud},r.Fx\u003d{hover:c.hover,unhover:c.unhover,loneHover:c.loneHover,loneUnhover:c.loneUnhover},r.Snapshot\u003dt(\"./snapshot\"),r.PlotSchema\u003dt(\"./plot_api/plot_schema\")},{\"../build/plotcss\":1,\"./components/annotations\":653,\"./components/annotations3d\":658,\"./components/colorbar\":668,\"./components/colorscale\":674,\"./components/errorbars\":690,\"./components/fx\":702,\"./components/grid\":706,\"./components/images\":711,\"./components/legend\":719,\"./components/modebar\":725,\"./components/rangeselector\":733,\"./components/rangeslider\":740,\"./components/shapes\":754,\"./components/sliders\":759,\"./components/updatemenus\":765,\"./fonts/ploticon\":778,\"./locale-en\":829,\"./locale-en-us\":828,\"./plot_api\":833,\"./plot_api/plot_schema\":837,\"./plots/plots\":913,\"./registry\":927,\"./snapshot\":932,\"./traces/scatter\":1226,\"./version\":1400,\"native-promise-only\":470}],778:[function(t,e,r){\"use strict\";e.exports\u003d{undo:{width:857.1,height:1e3,path:\"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z\",transform:\"matrix(1 0 0 -1 0 850)\"},home:{width:928.6,height:1e3,path:\"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"camera-retro\":{width:1e3,height:1e3,path:\"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoombox:{width:1e3,height:1e3,path:\"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z\",transform:\"matrix(1 0 0 -1 0 850)\"},pan:{width:1e3,height:1e3,path:\"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_plus:{width:875,height:1e3,path:\"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},zoom_minus:{width:875,height:1e3,path:\"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z\",transform:\"matrix(1 0 0 -1 0 850)\"},autoscale:{width:1e3,height:1e3,path:\"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_basic:{width:1500,height:1e3,path:\"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},tooltip_compare:{width:1125,height:1e3,path:\"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z\",transform:\"matrix(1 0 0 -1 0 850)\"},plotlylogo:{width:1542,height:1e3,path:\"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"z-axis\":{width:1e3,height:1e3,path:\"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z\",transform:\"matrix(1 0 0 -1 0 850)\"},\"3d_rotate\":{width:1e3,height:1e3,path:\"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z\",transform:\"matrix(1 0 0 -1 0 850)\"},camera:{width:1e3,height:1e3,path:\"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z\",transform:\"matrix(1 0 0 -1 0 850)\"},movie:{width:1e3,height:1e3,path:\"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z\",transform:\"matrix(1 0 0 -1 0 850)\"},question:{width:857.1,height:1e3,path:\"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z\",transform:\"matrix(1 0 0 -1 0 850)\"},disk:{width:857.1,height:1e3,path:\"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z\",transform:\"matrix(1 0 0 -1 0 850)\"},drawopenpath:{width:70,height:70,path:\"M33.21,85.65a7.31,7.31,0,0,1-2.59-.48c-8.16-3.11-9.27-19.8-9.88-41.3-.1-3.58-.19-6.68-.35-9-.15-2.1-.67-3.48-1.43-3.79-2.13-.88-7.91,2.32-12,5.86L3,32.38c1.87-1.64,11.55-9.66,18.27-6.9,2.13.87,4.75,3.14,5.17,9,.17,2.43.26,5.59.36,9.25a224.17,224.17,0,0,0,1.5,23.4c1.54,10.76,4,12.22,4.48,12.4.84.32,2.79-.46,5.76-3.59L43,80.07C41.53,81.57,37.68,85.64,33.21,85.65ZM74.81,69a11.34,11.34,0,0,0,6.09-6.72L87.26,44.5,74.72,32,56.9,38.35c-2.37.86-5.57,3.42-6.61,6L38.65,72.14l8.42,8.43ZM55,46.27a7.91,7.91,0,0,1,3.64-3.17l14.8-5.3,8,8L76.11,60.6l-.06.19a6.37,6.37,0,0,1-3,3.43L48.25,74.59,44.62,71Zm16.57,7.82A6.9,6.9,0,1,0,64.64,61,6.91,6.91,0,0,0,71.54,54.09Zm-4.05,0a2.85,2.85,0,1,1-2.85-2.85A2.86,2.86,0,0,1,67.49,54.09Zm-4.13,5.22L60.5,56.45,44.26,72.7l2.86,2.86ZM97.83,35.67,84.14,22l-8.57,8.57L89.26,44.24Zm-13.69-8,8,8-2.85,2.85-8-8Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawclosedpath:{width:90,height:90,path:\"M88.41,21.12a26.56,26.56,0,0,0-36.18,0l-2.07,2-2.07-2a26.57,26.57,0,0,0-36.18,0,23.74,23.74,0,0,0,0,34.8L48,90.12a3.22,3.22,0,0,0,4.42,0l36-34.21a23.73,23.73,0,0,0,0-34.79ZM84,51.24,50.16,83.35,16.35,51.25a17.28,17.28,0,0,1,0-25.47,20,20,0,0,1,27.3,0l4.29,4.07a3.23,3.23,0,0,0,4.44,0l4.29-4.07a20,20,0,0,1,27.3,0,17.27,17.27,0,0,1,0,25.46ZM66.76,47.68h-33v6.91h33ZM53.35,35H46.44V68h6.91Z\",transform:\"matrix(1 0 0 1 -5 -5)\"},lasso:{width:1031,height:1e3,path:\"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z\",transform:\"matrix(1 0 0 -1 0 850)\"},selectbox:{width:1e3,height:1e3,path:\"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z\",transform:\"matrix(1 0 0 -1 0 850)\"},drawline:{width:70,height:70,path:\"M60.64,62.3a11.29,11.29,0,0,0,6.09-6.72l6.35-17.72L60.54,25.31l-17.82,6.4c-2.36.86-5.57,3.41-6.6,6L24.48,65.5l8.42,8.42ZM40.79,39.63a7.89,7.89,0,0,1,3.65-3.17l14.79-5.31,8,8L61.94,54l-.06.19a6.44,6.44,0,0,1-3,3.43L34.07,68l-3.62-3.63Zm16.57,7.81a6.9,6.9,0,1,0-6.89,6.9A6.9,6.9,0,0,0,57.36,47.44Zm-4,0a2.86,2.86,0,1,1-2.85-2.85A2.86,2.86,0,0,1,53.32,47.44Zm-4.13,5.22L46.33,49.8,30.08,66.05l2.86,2.86ZM83.65,29,70,15.34,61.4,23.9,75.09,37.59ZM70,21.06l8,8-2.84,2.85-8-8ZM87,80.49H10.67V87H87Z\",transform:\"matrix(1 0 0 1 -15 -15)\"},drawrect:{width:80,height:80,path:\"M78,22V79H21V22H78m9-9H12V88H87V13ZM68,46.22H31V54H68ZM53,32H45.22V69H53Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},drawcircle:{width:80,height:80,path:\"M50,84.72C26.84,84.72,8,69.28,8,50.3S26.84,15.87,50,15.87,92,31.31,92,50.3,73.16,84.72,50,84.72Zm0-60.59c-18.6,0-33.74,11.74-33.74,26.17S31.4,76.46,50,76.46,83.74,64.72,83.74,50.3,68.6,24.13,50,24.13Zm17.15,22h-34v7.11h34Zm-13.8-13H46.24v34h7.11Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},eraseshape:{width:80,height:80,path:\"M82.77,78H31.85L6,49.57,31.85,21.14H82.77a8.72,8.72,0,0,1,8.65,8.77V69.24A8.72,8.72,0,0,1,82.77,78ZM35.46,69.84H82.77a.57.57,0,0,0,.49-.6V29.91a.57.57,0,0,0-.49-.61H35.46L17,49.57Zm32.68-34.7-24,24,5,5,24-24Zm-19,.53-5,5,24,24,5-5Z\",transform:\"matrix(1 0 0 1 -10 -10)\"},spikeline:{width:1e3,height:1e3,path:\"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z\",transform:\"matrix(1.5 0 0 -1.5 0 850)\"},pencil:{width:1792,height:1792,path:\"M491 1536l91-91-235-235-91 91v107h128v128h107zm523-928q0-22-22-22-10 0-17 7l-542 542q-7 7-7 17 0 22 22 22 10 0 17-7l542-542q7-7 7-17zm-54-192l416 416-832 832h-416v-416zm683 96q0 53-37 90l-166 166-416-416 166-165q36-38 90-38 53 0 91 38l235 234q37 39 37 91z\",transform:\"matrix(1 0 0 1 0 1)\"},newplotlylogo:{name:\"newplotlylogo\",svg:\"\u003csvg xmlns\u003d\u0027http://www.w3.org/2000/svg\u0027 viewBox\u003d\u00270 0 132 132\u0027\u003e\u003cdefs\u003e\u003cstyle\u003e.cls-1 {fill: #3f4f75;} .cls-2 {fill: #80cfbe;} .cls-3 {fill: #fff;}\u003c/style\u003e\u003c/defs\u003e\u003ctitle\u003eplotly-logomark\u003c/title\u003e\u003cg id\u003d\u0027symbol\u0027\u003e\u003crect class\u003d\u0027cls-1\u0027 width\u003d\u0027132\u0027 height\u003d\u0027132\u0027 rx\u003d\u00276\u0027 ry\u003d\u00276\u0027/\u003e\u003ccircle class\u003d\u0027cls-2\u0027 cx\u003d\u002778\u0027 cy\u003d\u002754\u0027 r\u003d\u00276\u0027/\u003e\u003ccircle class\u003d\u0027cls-2\u0027 cx\u003d\u0027102\u0027 cy\u003d\u002730\u0027 r\u003d\u00276\u0027/\u003e\u003ccircle class\u003d\u0027cls-2\u0027 cx\u003d\u002778\u0027 cy\u003d\u002730\u0027 r\u003d\u00276\u0027/\u003e\u003ccircle class\u003d\u0027cls-2\u0027 cx\u003d\u002754\u0027 cy\u003d\u002730\u0027 r\u003d\u00276\u0027/\u003e\u003ccircle class\u003d\u0027cls-2\u0027 cx\u003d\u002730\u0027 cy\u003d\u002730\u0027 r\u003d\u00276\u0027/\u003e\u003ccircle class\u003d\u0027cls-2\u0027 cx\u003d\u002730\u0027 cy\u003d\u002754\u0027 r\u003d\u00276\u0027/\u003e\u003cpath class\u003d\u0027cls-3\u0027 d\u003d\u0027M30,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,30,72Z\u0027/\u003e\u003cpath class\u003d\u0027cls-3\u0027 d\u003d\u0027M78,72a6,6,0,0,0-6,6v24a6,6,0,0,0,12,0V78A6,6,0,0,0,78,72Z\u0027/\u003e\u003cpath class\u003d\u0027cls-3\u0027 d\u003d\u0027M54,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,54,48Z\u0027/\u003e\u003cpath class\u003d\u0027cls-3\u0027 d\u003d\u0027M102,48a6,6,0,0,0-6,6v48a6,6,0,0,0,12,0V54A6,6,0,0,0,102,48Z\u0027/\u003e\u003c/g\u003e\u003c/svg\u003e\"}}},{}],779:[function(t,e,r){\"use strict\";r.isLeftAnchor\u003dfunction(t){return\"left\"\u003d\u003d\u003dt.xanchor||\"auto\"\u003d\u003d\u003dt.xanchor\u0026\u0026t.x\u003c\u003d1/3},r.isCenterAnchor\u003dfunction(t){return\"center\"\u003d\u003d\u003dt.xanchor||\"auto\"\u003d\u003d\u003dt.xanchor\u0026\u0026t.x\u003e1/3\u0026\u0026t.x\u003c2/3},r.isRightAnchor\u003dfunction(t){return\"right\"\u003d\u003d\u003dt.xanchor||\"auto\"\u003d\u003d\u003dt.xanchor\u0026\u0026t.x\u003e\u003d2/3},r.isTopAnchor\u003dfunction(t){return\"top\"\u003d\u003d\u003dt.yanchor||\"auto\"\u003d\u003d\u003dt.yanchor\u0026\u0026t.y\u003e\u003d2/3},r.isMiddleAnchor\u003dfunction(t){return\"middle\"\u003d\u003d\u003dt.yanchor||\"auto\"\u003d\u003d\u003dt.yanchor\u0026\u0026t.y\u003e1/3\u0026\u0026t.y\u003c2/3},r.isBottomAnchor\u003dfunction(t){return\"bottom\"\u003d\u003d\u003dt.yanchor||\"auto\"\u003d\u003d\u003dt.yanchor\u0026\u0026t.y\u003c\u003d1/3}},{}],780:[function(t,e,r){\"use strict\";var n\u003dt(\"./mod\"),i\u003dn.mod,a\u003dn.modHalf,o\u003dMath.PI,s\u003d2*o;function l(t){return Math.abs(t[1]-t[0])\u003es-1e-14}function c(t,e){return a(e-t,s)}function u(t,e){if(l(e))return!0;var r,n;e[0]\u003ce[1]?(r\u003de[0],n\u003de[1]):(r\u003de[1],n\u003de[0]),(r\u003di(r,s))\u003e(n\u003di(n,s))\u0026\u0026(n+\u003ds);var a\u003di(t,s),o\u003da+s;return a\u003e\u003dr\u0026\u0026a\u003c\u003dn||o\u003e\u003dr\u0026\u0026o\u003c\u003dn}function f(t,e,r,n,i,a,c){i\u003di||0,a\u003da||0;var u,f,h,p,d,m\u003dl([r,n]);function g(t,e){return[t*Math.cos(e)+i,a-t*Math.sin(e)]}m?(u\u003d0,f\u003do,h\u003ds):r\u003cn?(u\u003dr,h\u003dn):(u\u003dn,h\u003dr),t\u003ce?(p\u003dt,d\u003de):(p\u003de,d\u003dt);var v,y\u003dMath.abs(h-u)\u003c\u003do?0:1;function x(t,e,r){return\"A\"+[t,t]+\" \"+[0,y,r]+\" \"+g(t,e)}return m?v\u003dnull\u003d\u003d\u003dp?\"M\"+g(d,u)+x(d,f,0)+x(d,h,0)+\"Z\":\"M\"+g(p,u)+x(p,f,0)+x(p,h,0)+\"ZM\"+g(d,u)+x(d,f,1)+x(d,h,1)+\"Z\":null\u003d\u003d\u003dp?(v\u003d\"M\"+g(d,u)+x(d,h,0),c\u0026\u0026(v+\u003d\"L0,0Z\")):v\u003d\"M\"+g(p,u)+\"L\"+g(d,u)+x(d,h,0)+\"L\"+g(p,h)+x(p,u,1)+\"Z\",v}e.exports\u003d{deg2rad:function(t){return t/180*o},rad2deg:function(t){return t/o*180},angleDelta:c,angleDist:function(t,e){return Math.abs(c(t,e))},isFullCircle:l,isAngleInsideSector:u,isPtInsideSector:function(t,e,r,n){return!!u(e,n)\u0026\u0026(r[0]\u003cr[1]?(i\u003dr[0],a\u003dr[1]):(i\u003dr[1],a\u003dr[0]),t\u003e\u003di\u0026\u0026t\u003c\u003da);var i,a},pathArc:function(t,e,r,n,i){return f(null,t,e,r,n,i,0)},pathSector:function(t,e,r,n,i){return f(null,t,e,r,n,i,1)},pathAnnulus:function(t,e,r,n,i,a){return f(t,e,r,n,i,a,1)}}},{\"./mod\":806}],781:[function(t,e,r){\"use strict\";var n\u003dArray.isArray,i\u003dArrayBuffer,a\u003dDataView;function o(t){return i.isView(t)\u0026\u0026!(t instanceof a)}function s(t){return n(t)||o(t)}function l(t,e,r){if(s(t)){if(s(t[0])){for(var n\u003dr,i\u003d0;i\u003ct.length;i++)n\u003de(n,t[i].length);return n}return t.length}return 0}r.isTypedArray\u003do,r.isArrayOrTypedArray\u003ds,r.isArray1D\u003dfunction(t){return!s(t[0])},r.ensureArray\u003dfunction(t,e){return n(t)||(t\u003d[]),t.length\u003de,t},r.concat\u003dfunction(){var t,e,r,i,a,o,s,l,c\u003d[],u\u003d!0,f\u003d0;for(r\u003d0;r\u003carguments.length;r++)(o\u003d(i\u003darguments[r]).length)\u0026\u0026(e?c.push(i):(e\u003di,a\u003do),n(i)?t\u003d!1:(u\u003d!1,f?t!\u003d\u003di.constructor\u0026\u0026(t\u003d!1):t\u003di.constructor),f+\u003do);if(!f)return[];if(!c.length)return e;if(u)return e.concat.apply(e,c);if(t){for((s\u003dnew t(f)).set(e),r\u003d0;r\u003cc.length;r++)i\u003dc[r],s.set(i,a),a+\u003di.length;return s}for(s\u003dnew Array(f),l\u003d0;l\u003ce.length;l++)s[l]\u003de[l];for(r\u003d0;r\u003cc.length;r++){for(i\u003dc[r],l\u003d0;l\u003ci.length;l++)s[a+l]\u003di[l];a+\u003dl}return s},r.maxRowLength\u003dfunction(t){return l(t,Math.max,0)},r.minRowLength\u003dfunction(t){return l(t,Math.min,1/0)}},{}],782:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../constants/numerical\").BADNUM,a\u003d/^[\u0027\"%,$#\\s\u0027]+|[, ]|[\u0027\"%,$#\\s\u0027]+$/g;e.exports\u003dfunction(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026(t\u003dt.replace(a,\"\")),n(t)?Number(t):i}},{\"../constants/numerical\":775,\"fast-isnumeric\":245}],783:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt._fullLayout;e._glcanvas\u0026\u0026e._glcanvas.size()\u0026\u0026e._glcanvas.each((function(t){t.regl\u0026\u0026t.regl.clear({color:!0,depth:!0})}))}},{}],784:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){t._responsiveChartHandler\u0026\u0026(window.removeEventListener(\"resize\",t._responsiveChartHandler),delete t._responsiveChartHandler)}},{}],785:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"../plots/attributes\"),o\u003dt(\"../components/colorscale/scales\"),s\u003dt(\"../components/color\"),l\u003dt(\"../constants/interactions\").DESELECTDIM,c\u003dt(\"./nested_property\"),u\u003dt(\"./regex\").counter,f\u003dt(\"./mod\").modHalf,h\u003dt(\"./array\").isArrayOrTypedArray;function p(t,e){var n\u003dr.valObjectMeta[e.valType];if(e.arrayOk\u0026\u0026h(t))return!0;if(n.validateFunction)return n.validateFunction(t,e);var i\u003d{},a\u003di,o\u003d{set:function(t){a\u003dt}};return n.coerceFunction(t,o,i,e),a!\u003d\u003di}r.valObjectMeta\u003d{data_array:{coerceFunction:function(t,e,r){h(t)?e.set(t):void 0!\u003d\u003dr\u0026\u0026e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber\u0026\u0026(t\u003d+t),-1\u003d\u003d\u003dn.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber\u0026\u0026(t\u003d+t);for(var r\u003de.values,n\u003d0;n\u003cr.length;n++){var i\u003dString(r[n]);if(\"/\"\u003d\u003d\u003di.charAt(0)\u0026\u0026\"/\"\u003d\u003d\u003di.charAt(i.length-1)){if(new RegExp(i.substr(1,i.length-2)).test(t))return!0}else if(t\u003d\u003d\u003dr[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0\u003d\u003d\u003dt||!1\u003d\u003d\u003dt?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,i){!n(t)||void 0!\u003d\u003di.min\u0026\u0026t\u003ci.min||void 0!\u003d\u003di.max\u0026\u0026t\u003ei.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!\u003d\u003di.min\u0026\u0026t\u003ci.min||void 0!\u003d\u003di.max\u0026\u0026t\u003ei.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if(\"string\"!\u003dtypeof t){var i\u003d\"number\"\u003d\u003dtypeof t;!0!\u003d\u003dn.strict\u0026\u0026i?e.set(String(t)):e.set(r)}else n.noBlank\u0026\u0026!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorlist:{coerceFunction:function(t,e,r){Array.isArray(t)\u0026\u0026t.length\u0026\u0026t.every((function(t){return i(t).isValid()}))?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o.get(t,r))}},angle:{coerceFunction:function(t,e,r){\"auto\"\u003d\u003d\u003dt?e.set(\"auto\"):n(t)?e.set(f(+t,360)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r,n){var i\u003dn.regex||u(r);\"string\"\u003d\u003dtypeof t\u0026\u0026i.test(t)?e.set(t):e.set(r)},validateFunction:function(t,e){var r\u003de.dflt;return t\u003d\u003d\u003dr||\"string\"\u003d\u003dtypeof t\u0026\u0026!!u(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if(\"string\"\u003d\u003dtypeof t)if(-1\u003d\u003d\u003d(n.extras||[]).indexOf(t)){for(var i\u003dt.split(\"+\"),a\u003d0;a\u003ci.length;){var o\u003di[a];-1\u003d\u003d\u003dn.flags.indexOf(o)||i.indexOf(o)\u003ca?i.splice(a,1):a++}i.length?e.set(i.join(\"+\")):e.set(r)}else e.set(t);else e.set(r)}},any:{coerceFunction:function(t,e,r){void 0\u003d\u003d\u003dt?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,e,n,i){function a(t,e,n){var i,a\u003d{set:function(t){i\u003dt}};return void 0\u003d\u003d\u003dn\u0026\u0026(n\u003de.dflt),r.valObjectMeta[e.valType].coerceFunction(t,a,n,e),i}var o\u003d2\u003d\u003d\u003di.dimensions||\"1-2\"\u003d\u003d\u003di.dimensions\u0026\u0026Array.isArray(t)\u0026\u0026Array.isArray(t[0]);if(Array.isArray(t)){var s,l,c,u,f,h,p\u003di.items,d\u003d[],m\u003dArray.isArray(p),g\u003dm\u0026\u0026o\u0026\u0026Array.isArray(p[0]),v\u003do\u0026\u0026m\u0026\u0026!g,y\u003dm\u0026\u0026!v?p.length:t.length;if(n\u003dArray.isArray(n)?n:[],o)for(s\u003d0;s\u003cy;s++)for(d[s]\u003d[],c\u003dArray.isArray(t[s])?t[s]:[],f\u003dv?p.length:m?p[s].length:c.length,l\u003d0;l\u003cf;l++)u\u003dv?p[l]:m?p[s][l]:p,void 0!\u003d\u003d(h\u003da(c[l],u,(n[s]||[])[l]))\u0026\u0026(d[s][l]\u003dh);else for(s\u003d0;s\u003cy;s++)void 0!\u003d\u003d(h\u003da(t[s],m?p[s]:p,n[s]))\u0026\u0026(d[s]\u003dh);e.set(d)}else e.set(n)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var r\u003de.items,n\u003dArray.isArray(r),i\u003d2\u003d\u003d\u003de.dimensions;if(!e.freeLength\u0026\u0026t.length!\u003d\u003dr.length)return!1;for(var a\u003d0;a\u003ct.length;a++)if(i){if(!Array.isArray(t[a])||!e.freeLength\u0026\u0026t[a].length!\u003d\u003dr[a].length)return!1;for(var o\u003d0;o\u003ct[a].length;o++)if(!p(t[a][o],n?r[a][o]:r))return!1}else if(!p(t[a],n?r[a]:r))return!1;return!0}}},r.coerce\u003dfunction(t,e,n,i,a){var o\u003dc(n,i).get(),s\u003dc(t,i),l\u003dc(e,i),u\u003ds.get(),f\u003de._template;if(void 0\u003d\u003d\u003du\u0026\u0026f\u0026\u0026(u\u003dc(f,i).get(),f\u003d0),void 0\u003d\u003d\u003da\u0026\u0026(a\u003do.dflt),o.arrayOk\u0026\u0026h(u))return l.set(u),u;var d\u003dr.valObjectMeta[o.valType].coerceFunction;d(u,l,a,o);var m\u003dl.get();return f\u0026\u0026m\u003d\u003d\u003da\u0026\u0026!p(u,o)\u0026\u0026(d(u\u003dc(f,i).get(),l,a,o),m\u003dl.get()),m},r.coerce2\u003dfunction(t,e,n,i,a){var o\u003dc(t,i),s\u003dr.coerce(t,e,n,i,a),l\u003do.get();return null!\u003dl\u0026\u0026s},r.coerceFont\u003dfunction(t,e,r){var n\u003d{};return r\u003dr||{},n.family\u003dt(e+\".family\",r.family),n.size\u003dt(e+\".size\",r.size),n.color\u003dt(e+\".color\",r.color),n},r.coercePattern\u003dfunction(t,e,r,n){if(t(e+\".shape\")){t(e+\".solidity\"),t(e+\".size\");var i\u003d\"overlay\"\u003d\u003d\u003dt(e+\".fillmode\");if(!n){var a\u003dt(e+\".bgcolor\",i?r:void 0);t(e+\".fgcolor\",i?s.contrast(a):r)}t(e+\".fgopacity\",i?.5:1)}},r.coerceHoverinfo\u003dfunction(t,e,n){var i,o\u003de._module.attributes,s\u003do.hoverinfo?o:a,l\u003ds.hoverinfo;if(1\u003d\u003d\u003dn._dataLength){var c\u003d\"all\"\u003d\u003d\u003dl.dflt?l.flags.slice():l.dflt.split(\"+\");c.splice(c.indexOf(\"name\"),1),i\u003dc.join(\"+\")}return r.coerce(t,e,s,\"hoverinfo\",i)},r.coerceSelectionMarkerOpacity\u003dfunction(t,e){if(t.marker){var r,n,i\u003dt.marker.opacity;if(void 0!\u003d\u003di)h(i)||t.selected||t.unselected||(r\u003di,n\u003dl*i),e(\"selected.marker.opacity\",r),e(\"unselected.marker.opacity\",n)}},r.validate\u003dp},{\"../components/color\":662,\"../components/colorscale/scales\":677,\"../constants/interactions\":774,\"../plots/attributes\":845,\"./array\":781,\"./mod\":806,\"./nested_property\":807,\"./regex\":816,\"fast-isnumeric\":245,tinycolor2:594}],786:[function(t,e,r){\"use strict\";var n,i,a\u003dt(\"d3-time-format\").timeFormat,o\u003dt(\"fast-isnumeric\"),s\u003dt(\"./loggers\"),l\u003dt(\"./mod\").mod,c\u003dt(\"../constants/numerical\"),u\u003dc.BADNUM,f\u003dc.ONEDAY,h\u003dc.ONEHOUR,p\u003dc.ONEMIN,d\u003dc.ONESEC,m\u003dc.EPOCHJD,g\u003dt(\"../registry\"),v\u003dt(\"d3-time-format\").utcFormat,y\u003d/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\d)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,x\u003d/^\\s*(-?\\d\\d\\d\\d|\\d\\d)(-(\\d?\\di?)(-(\\d?\\d)([ Tt]([01]?\\d|2[0-3])(:([0-5]\\d)(:([0-5]\\d(\\.\\d+)?))?(Z|z|[+\\-]\\d\\d(:?\\d\\d)?)?)?)?)?)?\\s*$/m,b\u003d(new Date).getFullYear()-70;function _(t){return t\u0026\u0026g.componentsRegistry.calendars\u0026\u0026\"string\"\u003d\u003dtypeof t\u0026\u0026\"gregorian\"!\u003d\u003dt}function w(t,e){return String(t+Math.pow(10,e)).substr(1)}r.dateTick0\u003dfunction(t,e){var n\u003dfunction(t,e){return _(t)?e?g.getComponentMethod(\"calendars\",\"CANONICAL_SUNDAY\")[t]:g.getComponentMethod(\"calendars\",\"CANONICAL_TICK\")[t]:e?\"2000-01-02\":\"2000-01-01\"}(t,!!e);if(e\u003c2)return n;var i\u003dr.dateTime2ms(n,t);return i+\u003df*(e-1),r.ms2DateTime(i,0,t)},r.dfltRange\u003dfunction(t){return _(t)?g.getComponentMethod(\"calendars\",\"DFLTRANGE\")[t]:[\"2000-01-01\",\"2001-01-01\"]},r.isJSDate\u003dfunction(t){return\"object\"\u003d\u003dtypeof t\u0026\u0026null!\u003d\u003dt\u0026\u0026\"function\"\u003d\u003dtypeof t.getTime},r.dateTime2ms\u003dfunction(t,e){if(r.isJSDate(t)){var a\u003dt.getTimezoneOffset()*p,o\u003d(t.getUTCMinutes()-t.getMinutes())*p+(t.getUTCSeconds()-t.getSeconds())*d+(t.getUTCMilliseconds()-t.getMilliseconds());if(o){var s\u003d3*p;a\u003da-s/2+l(o-a+s/2,s)}return(t\u003dNumber(t)-a)\u003e\u003dn\u0026\u0026t\u003c\u003di?t:u}if(\"string\"!\u003dtypeof t\u0026\u0026\"number\"!\u003dtypeof t)return u;t\u003dString(t);var c\u003d_(e),v\u003dt.charAt(0);!c||\"G\"!\u003d\u003dv\u0026\u0026\"g\"!\u003d\u003dv||(t\u003dt.substr(1),e\u003d\"\");var w\u003dc\u0026\u0026\"chinese\"\u003d\u003d\u003de.substr(0,7),T\u003dt.match(w?x:y);if(!T)return u;var k\u003dT[1],M\u003dT[3]||\"1\",A\u003dNumber(T[5]||1),S\u003dNumber(T[7]||0),E\u003dNumber(T[9]||0),L\u003dNumber(T[11]||0);if(c){if(2\u003d\u003d\u003dk.length)return u;var C;k\u003dNumber(k);try{var P\u003dg.getComponentMethod(\"calendars\",\"getCal\")(e);if(w){var I\u003d\"i\"\u003d\u003d\u003dM.charAt(M.length-1);M\u003dparseInt(M,10),C\u003dP.newDate(k,P.toMonthIndex(k,M,I),A)}else C\u003dP.newDate(k,Number(M),A)}catch(t){return u}return C?(C.toJD()-m)*f+S*h+E*p+L*d:u}k\u003d2\u003d\u003d\u003dk.length?(Number(k)+2e3-b)%100+b:Number(k),M-\u003d1;var O\u003dnew Date(Date.UTC(2e3,M,A,S,E));return O.setUTCFullYear(k),O.getUTCMonth()!\u003d\u003dM||O.getUTCDate()!\u003d\u003dA?u:O.getTime()+L*d},n\u003dr.MIN_MS\u003dr.dateTime2ms(\"-9999\"),i\u003dr.MAX_MS\u003dr.dateTime2ms(\"9999-12-31 23:59:59.9999\"),r.isDateTime\u003dfunction(t,e){return r.dateTime2ms(t,e)!\u003d\u003du};var T\u003d90*f,k\u003d3*h,M\u003d5*p;function A(t,e,r,n,i){if((e||r||n||i)\u0026\u0026(t+\u003d\" \"+w(e,2)+\":\"+w(r,2),(n||i)\u0026\u0026(t+\u003d\":\"+w(n,2),i))){for(var a\u003d4;i%10\u003d\u003d0;)a-\u003d1,i/\u003d10;t+\u003d\".\"+w(i,a)}return t}r.ms2DateTime\u003dfunction(t,e,r){if(\"number\"!\u003dtypeof t||!(t\u003e\u003dn\u0026\u0026t\u003c\u003di))return u;e||(e\u003d0);var a,o,s,c,y,x,b\u003dMath.floor(10*l(t+.05,1)),w\u003dMath.round(t-b/10);if(_(r)){var S\u003dMath.floor(w/f)+m,E\u003dMath.floor(l(t,f));try{a\u003dg.getComponentMethod(\"calendars\",\"getCal\")(r).fromJD(S).formatDate(\"yyyy-mm-dd\")}catch(t){a\u003dv(\"G%Y-%m-%d\")(new Date(w))}if(\"-\"\u003d\u003d\u003da.charAt(0))for(;a.length\u003c11;)a\u003d\"-0\"+a.substr(1);else for(;a.length\u003c10;)a\u003d\"0\"+a;o\u003de\u003cT?Math.floor(E/h):0,s\u003de\u003cT?Math.floor(E%h/p):0,c\u003de\u003ck?Math.floor(E%p/d):0,y\u003de\u003cM?E%d*10+b:0}else x\u003dnew Date(w),a\u003dv(\"%Y-%m-%d\")(x),o\u003de\u003cT?x.getUTCHours():0,s\u003de\u003cT?x.getUTCMinutes():0,c\u003de\u003ck?x.getUTCSeconds():0,y\u003de\u003cM?10*x.getUTCMilliseconds()+b:0;return A(a,o,s,c,y)},r.ms2DateTimeLocal\u003dfunction(t){if(!(t\u003e\u003dn+f\u0026\u0026t\u003c\u003di-f))return u;var e\u003dMath.floor(10*l(t+.05,1)),r\u003dnew Date(Math.round(t-e/10));return A(a(\"%Y-%m-%d\")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},r.cleanDate\u003dfunction(t,e,n){if(t\u003d\u003d\u003du)return e;if(r.isJSDate(t)||\"number\"\u003d\u003dtypeof t\u0026\u0026isFinite(t)){if(_(n))return s.error(\"JS Dates and milliseconds are incompatible with world calendars\",t),e;if(!(t\u003dr.ms2DateTimeLocal(+t))\u0026\u0026void 0!\u003d\u003de)return e}else if(!r.isDateTime(t,n))return s.error(\"unrecognized date\",t),e;return t};var S\u003d/%\\d?f/g,E\u003d/%h/g,L\u003d{1:\"1\",2:\"1\",3:\"2\",4:\"2\"};function C(t,e,r,n){t\u003dt.replace(S,(function(t){var r\u003dMath.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,\"\")||\"0\"}));var i\u003dnew Date(Math.floor(e+.05));if(t\u003dt.replace(E,(function(){return L[r(\"%q\")(i)]})),_(n))try{t\u003dg.getComponentMethod(\"calendars\",\"worldCalFmt\")(t,e,n)}catch(t){return\"Invalid\"}return r(t)(i)}var P\u003d[59,59.9,59.99,59.999,59.9999];r.formatDate\u003dfunction(t,e,r,n,i,a){if(i\u003d_(i)\u0026\u0026i,!e)if(\"y\"\u003d\u003d\u003dr)e\u003da.year;else if(\"m\"\u003d\u003d\u003dr)e\u003da.month;else{if(\"d\"!\u003d\u003dr)return function(t,e){var r\u003dl(t+.05,f),n\u003dw(Math.floor(r/h),2)+\":\"+w(l(Math.floor(r/p),60),2);if(\"M\"!\u003d\u003de){o(e)||(e\u003d0);var i\u003d(100+Math.min(l(t/d,60),P[e])).toFixed(e).substr(1);e\u003e0\u0026\u0026(i\u003di.replace(/0+$/,\"\").replace(/[\\.]$/,\"\")),n+\u003d\":\"+i}return n}(t,r)+\"\\n\"+C(a.dayMonthYear,t,n,i);e\u003da.dayMonth+\"\\n\"+a.year}return C(e,t,n,i)};var I\u003d3*f;r.incrementMonth\u003dfunction(t,e,r){r\u003d_(r)\u0026\u0026r;var n\u003dl(t,f);if(t\u003dMath.round(t-n),r)try{var i\u003dMath.round(t/f)+m,a\u003dg.getComponentMethod(\"calendars\",\"getCal\")(r),o\u003da.fromJD(i);return e%12?a.add(o,e,\"m\"):a.add(o,e/12,\"y\"),(o.toJD()-m)*f+n}catch(e){s.error(\"invalid ms \"+t+\" in calendar \"+r)}var c\u003dnew Date(t+I);return c.setUTCMonth(c.getUTCMonth()+e)+n-I},r.findExactDates\u003dfunction(t,e){for(var r,n,i\u003d0,a\u003d0,s\u003d0,l\u003d0,c\u003d_(e)\u0026\u0026g.getComponentMethod(\"calendars\",\"getCal\")(e),u\u003d0;u\u003ct.length;u++)if(n\u003dt[u],o(n)){if(!(n%f))if(c)try{1\u003d\u003d\u003d(r\u003dc.fromJD(n/f+m)).day()?1\u003d\u003d\u003dr.month()?i++:a++:s++}catch(t){}else 1\u003d\u003d\u003d(r\u003dnew Date(n)).getUTCDate()?0\u003d\u003d\u003dr.getUTCMonth()?i++:a++:s++}else l++;s+\u003da+\u003di;var h\u003dt.length-l;return{exactYears:i/h,exactMonths:a/h,exactDays:s/h}}},{\"../constants/numerical\":775,\"../registry\":927,\"./loggers\":803,\"./mod\":806,\"d3-time-format\":172,\"fast-isnumeric\":245}],787:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"./loggers\"),a\u003dt(\"./matrix\"),o\u003dt(\"gl-mat4\");function s(t){var e\u003dt\u0026\u0026t.parentNode;e\u0026\u0026e.removeChild(t)}function l(t,e,r){var n\u003d\"plotly.js-style-\"+t,a\u003ddocument.getElementById(n);a||((a\u003ddocument.createElement(\"style\")).setAttribute(\"id\",n),a.appendChild(document.createTextNode(\"\")),document.head.appendChild(a));var o\u003da.sheet;o.insertRule?o.insertRule(e+\"{\"+r+\"}\",0):o.addRule?o.addRule(e,r,0):i.warn(\"addStyleRule failed\")}function c(t){var e\u003dwindow.getComputedStyle(t,null),r\u003de.getPropertyValue(\"-webkit-transform\")||e.getPropertyValue(\"-moz-transform\")||e.getPropertyValue(\"-ms-transform\")||e.getPropertyValue(\"-o-transform\")||e.getPropertyValue(\"transform\");return\"none\"\u003d\u003d\u003dr?null:r.replace(\"matrix\",\"\").replace(\"3d\",\"\").slice(1,-1).split(\",\").map((function(t){return+t}))}function u(t){for(var e\u003d[];f(t);)e.push(t),t\u003dt.parentNode;return e}function f(t){return t\u0026\u0026(t instanceof Element||t instanceof HTMLElement)}e.exports\u003d{getGraphDiv:function(t){var e;if(\"string\"\u003d\u003dtypeof t){if(null\u003d\u003d\u003d(e\u003ddocument.getElementById(t)))throw new Error(\"No DOM element with id \u0027\"+t+\"\u0027 exists on the page.\");return e}if(null\u003d\u003dt)throw new Error(\"DOM element provided is null or undefined\");return t},isPlotDiv:function(t){var e\u003dn.select(t);return e.node()instanceof HTMLElement\u0026\u0026e.size()\u0026\u0026e.classed(\"js-plotly-plot\")},removeElement:s,addStyleRule:function(t,e){l(\"global\",t,e)},addRelatedStyleRule:l,deleteRelatedStyleRule:function(t){var e\u003d\"plotly.js-style-\"+t,r\u003ddocument.getElementById(e);r\u0026\u0026s(r)},getFullTransformMatrix:function(t){var e\u003du(t),r\u003d[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];return e.forEach((function(t){var e\u003dc(t);if(e){var n\u003da.convertCssMatrix(e);r\u003do.multiply(r,r,n)}})),r},getElementTransformMatrix:c,getElementAndAncestors:u,equalDomRects:function(t,e){return t\u0026\u0026e\u0026\u0026t.x\u003d\u003d\u003de.x\u0026\u0026t.y\u003d\u003d\u003de.y\u0026\u0026t.top\u003d\u003d\u003de.top\u0026\u0026t.left\u003d\u003d\u003de.left\u0026\u0026t.right\u003d\u003d\u003de.right\u0026\u0026t.bottom\u003d\u003d\u003de.bottom}}},{\"./loggers\":803,\"./matrix\":805,\"@plotly/d3\":58,\"gl-mat4\":294}],788:[function(t,e,r){\"use strict\";var n\u003dt(\"events\").EventEmitter,i\u003d{init:function(t){if(t._ev instanceof n)return t;var e\u003dnew n,r\u003dnew n;return t._ev\u003de,t._internalEv\u003dr,t.on\u003de.on.bind(e),t.once\u003de.once.bind(e),t.removeListener\u003de.removeListener.bind(e),t.removeAllListeners\u003de.removeAllListeners.bind(e),t._internalOn\u003dr.on.bind(r),t._internalOnce\u003dr.once.bind(r),t._removeInternalListener\u003dr.removeListener.bind(r),t._removeAllInternalListeners\u003dr.removeAllListeners.bind(r),t.emit\u003dfunction(n,i){\"undefined\"!\u003dtypeof jQuery\u0026\u0026jQuery(t).trigger(n,i),e.emit(n,i),r.emit(n,i)},t},triggerHandler:function(t,e,r){var n,i;\"undefined\"!\u003dtypeof jQuery\u0026\u0026(n\u003djQuery(t).triggerHandler(e,r));var a\u003dt._ev;if(!a)return n;var o,s\u003da._events[e];if(!s)return n;function l(t){return t.listener?(a.removeListener(e,t.listener),t.fired?void 0:(t.fired\u003d!0,t.listener.apply(a,[r]))):t.apply(a,[r])}for(s\u003dArray.isArray(s)?s:[s],o\u003d0;o\u003cs.length-1;o++)l(s[o]);return i\u003dl(s[o]),void 0!\u003d\u003dn?n:i},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};e.exports\u003di},{events:116}],789:[function(t,e,r){\"use strict\";var n\u003dt(\"./is_plain_object.js\"),i\u003dArray.isArray;function a(t,e,r,o){var s,l,c,u,f,h,p\u003dt[0],d\u003dt.length;if(2\u003d\u003d\u003dd\u0026\u0026i(p)\u0026\u0026i(t[1])\u0026\u00260\u003d\u003d\u003dp.length){if(function(t,e){var r,n;for(r\u003d0;r\u003ct.length;r++){if(null!\u003d\u003d(n\u003dt[r])\u0026\u0026\"object\"\u003d\u003dtypeof n)return!1;void 0!\u003d\u003dn\u0026\u0026(e[r]\u003dn)}return!0}(t[1],p))return p;p.splice(0,p.length)}for(var m\u003d1;m\u003cd;m++)for(l in s\u003dt[m])c\u003dp[l],u\u003ds[l],o\u0026\u0026i(u)?p[l]\u003du:e\u0026\u0026u\u0026\u0026(n(u)||(f\u003di(u)))?(f?(f\u003d!1,h\u003dc\u0026\u0026i(c)?c:[]):h\u003dc\u0026\u0026n(c)?c:{},p[l]\u003da([h,u],e,r,o)):(void 0!\u003d\u003du||r)\u0026\u0026(p[l]\u003du);return p}r.extendFlat\u003dfunction(){return a(arguments,!1,!1,!1)},r.extendDeep\u003dfunction(){return a(arguments,!0,!1,!1)},r.extendDeepAll\u003dfunction(){return a(arguments,!0,!0,!1)},r.extendDeepNoArrays\u003dfunction(){return a(arguments,!0,!1,!0)}},{\"./is_plain_object.js\":800}],790:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003d{},r\u003d[],n\u003d0,i\u003d0;i\u003ct.length;i++){var a\u003dt[i];1!\u003d\u003de[a]\u0026\u0026(e[a]\u003d1,r[n++]\u003da)}return r}},{}],791:[function(t,e,r){\"use strict\";function n(t){return!0\u003d\u003d\u003dt.visible}function i(t){var e\u003dt[0].trace;return!0\u003d\u003d\u003de.visible\u0026\u00260!\u003d\u003de._length}e.exports\u003dfunction(t){for(var e,r\u003d(e\u003dt,Array.isArray(e)\u0026\u0026Array.isArray(e[0])\u0026\u0026e[0][0]\u0026\u0026e[0][0].trace?i:n),a\u003d[],o\u003d0;o\u003ct.length;o++){var s\u003dt[o];r(s)\u0026\u0026a.push(s)}return a}},{}],792:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"country-regex\"),a\u003dt(\"@turf/area\"),o\u003dt(\"@turf/centroid\"),s\u003dt(\"@turf/bbox\"),l\u003dt(\"./identity\"),c\u003dt(\"./loggers\"),u\u003dt(\"./is_plain_object\"),f\u003dt(\"./nested_property\"),h\u003dt(\"./polygon\"),p\u003dObject.keys(i),d\u003d{\"ISO-3\":l,\"USA-states\":l,\"country names\":function(t){for(var e\u003d0;e\u003cp.length;e++){var r\u003dp[e];if(new RegExp(i[r]).test(t.trim().toLowerCase()))return r}return c.log(\"Unrecognized country name: \"+t+\".\"),!1}};function m(t){var e\u003dt.geojson,r\u003dwindow.PlotlyGeoAssets||{},n\u003d\"string\"\u003d\u003dtypeof e?r[e]:e;return u(n)?n:(c.error(\"Oops ... something went wrong when fetching \"+e),!1)}e.exports\u003d{locationToFeature:function(t,e,r){if(!e||\"string\"!\u003dtypeof e)return!1;var n,i,a,o\u003dd[t](e);if(o){if(\"USA-states\"\u003d\u003d\u003dt)for(n\u003d[],a\u003d0;a\u003cr.length;a++)(i\u003dr[a]).properties\u0026\u0026i.properties.gu\u0026\u0026\"USA\"\u003d\u003d\u003di.properties.gu\u0026\u0026n.push(i);else n\u003dr;for(a\u003d0;a\u003cn.length;a++)if((i\u003dn[a]).id\u003d\u003d\u003do)return i;c.log([\"Location with id\",o,\"does not have a matching topojson feature at this resolution.\"].join(\" \"))}return!1},feature2polygons:function(t){var e,r,n,i,a\u003dt.geometry,o\u003da.coordinates,s\u003dt.id,l\u003d[];function c(t){for(var e\u003d0;e\u003ct.length-1;e++)if(t[e][0]\u003e0\u0026\u0026t[e+1][0]\u003c0)return e;return null}switch(e\u003d\"RUS\"\u003d\u003d\u003ds||\"FJI\"\u003d\u003d\u003ds?function(t){var e;if(null\u003d\u003d\u003dc(t))e\u003dt;else for(e\u003dnew Array(t.length),i\u003d0;i\u003ct.length;i++)e[i]\u003d[t[i][0]\u003c0?t[i][0]+360:t[i][0],t[i][1]];l.push(h.tester(e))}:\"ATA\"\u003d\u003d\u003ds?function(t){var e\u003dc(t);if(null\u003d\u003d\u003de)return l.push(h.tester(t));var r\u003dnew Array(t.length+1),n\u003d0;for(i\u003d0;i\u003ct.length;i++)i\u003ee?r[n++]\u003d[t[i][0]+360,t[i][1]]:i\u003d\u003d\u003de?(r[n++]\u003dt[i],r[n++]\u003d[t[i][0],-90]):r[n++]\u003dt[i];var a\u003dh.tester(r);a.pts.pop(),l.push(a)}:function(t){l.push(h.tester(t))},a.type){case\"MultiPolygon\":for(r\u003d0;r\u003co.length;r++)for(n\u003d0;n\u003co[r].length;n++)e(o[r][n]);break;case\"Polygon\":for(r\u003d0;r\u003co.length;r++)e(o[r])}return l},getTraceGeojson:m,extractTraceFeature:function(t){var e\u003dt[0].trace,r\u003dm(e);if(!r)return!1;var n,i\u003d{},s\u003d[];for(n\u003d0;n\u003ce._length;n++){var l\u003dt[n];(l.loc||0\u003d\u003d\u003dl.loc)\u0026\u0026(i[l.loc]\u003dl)}function u(t){var r\u003df(t,e.featureidkey||\"id\").get(),n\u003di[r];if(n){var l\u003dt.geometry;if(\"Polygon\"\u003d\u003d\u003dl.type||\"MultiPolygon\"\u003d\u003d\u003dl.type){var u\u003d{type:\"Feature\",id:r,geometry:l,properties:{}};u.properties.ct\u003dfunction(t){var e,r\u003dt.geometry;if(\"MultiPolygon\"\u003d\u003d\u003dr.type)for(var n\u003dr.coordinates,i\u003d0,s\u003d0;s\u003cn.length;s++){var l\u003d{type:\"Polygon\",coordinates:n[s]},c\u003da.default(l);c\u003ei\u0026\u0026(i\u003dc,e\u003dl)}else e\u003dr;return o.default(e).geometry.coordinates}(u),n.fIn\u003dt,n.fOut\u003du,s.push(u)}else c.log([\"Location\",n.loc,\"does not have a valid GeoJSON geometry.\",\"Traces with locationmode *geojson-id* only support\",\"*Polygon* and *MultiPolygon* geometries.\"].join(\" \"))}delete i[r]}switch(r.type){case\"FeatureCollection\":var h\u003dr.features;for(n\u003d0;n\u003ch.length;n++)u(h[n]);break;case\"Feature\":u(r);break;default:return c.warn([\"Invalid GeoJSON type\",(r.type||\"none\")+\".\",\"Traces with locationmode *geojson-id* only support\",\"*FeatureCollection* and *Feature* types.\"].join(\" \")),!1}for(var p in i)c.log([\"Location *\"+p+\"*\",\"does not have a matching feature with id-key\",\"*\"+e.featureidkey+\"*.\"].join(\" \"));return s},fetchTraceGeoData:function(t){var e\u003dwindow.PlotlyGeoAssets||{},r\u003d[];function i(t){return new Promise((function(r,i){n.json(t,(function(n,a){if(n){delete e[t];var o\u003d404\u003d\u003d\u003dn.status?\u0027GeoJSON at URL \"\u0027+t+\u0027\" does not exist.\u0027:\"Unexpected error while fetching from \"+t;return i(new Error(o))}return e[t]\u003da,r(a)}))}))}function a(t){return new Promise((function(r,n){var i\u003d0,a\u003dsetInterval((function(){return e[t]\u0026\u0026\"pending\"!\u003d\u003de[t]?(clearInterval(a),r(e[t])):i\u003e100?(clearInterval(a),n(\"Unexpected error while fetching from \"+t)):void i++}),50)}))}for(var o\u003d0;o\u003ct.length;o++){var s\u003dt[o][0].trace.geojson;\"string\"\u003d\u003dtypeof s\u0026\u0026(e[s]?\"pending\"\u003d\u003d\u003de[s]\u0026\u0026r.push(a(s)):(e[s]\u003d\"pending\",r.push(i(s))))}return r},computeBbox:function(t){return s.default(t)}}},{\"./identity\":797,\"./is_plain_object\":800,\"./loggers\":803,\"./nested_property\":807,\"./polygon\":811,\"@plotly/d3\":58,\"@turf/area\":61,\"@turf/bbox\":64,\"@turf/centroid\":67,\"country-regex\":145}],793:[function(t,e,r){\"use strict\";var n\u003dt(\"../constants/numerical\").BADNUM;r.calcTraceToLineCoords\u003dfunction(t){for(var e\u003dt[0].trace.connectgaps,r\u003d[],i\u003d[],a\u003d0;a\u003ct.length;a++){var o\u003dt[a].lonlat;o[0]!\u003d\u003dn?i.push(o):!e\u0026\u0026i.length\u003e0\u0026\u0026(r.push(i),i\u003d[])}return i.length\u003e0\u0026\u0026r.push(i),r},r.makeLine\u003dfunction(t){return 1\u003d\u003d\u003dt.length?{type:\"LineString\",coordinates:t[0]}:{type:\"MultiLineString\",coordinates:t}},r.makePolygon\u003dfunction(t){if(1\u003d\u003d\u003dt.length)return{type:\"Polygon\",coordinates:t};for(var e\u003dnew Array(t.length),r\u003d0;r\u003ct.length;r++)e[r]\u003d[t[r]];return{type:\"MultiPolygon\",coordinates:e}},r.makeBlank\u003dfunction(){return{type:\"Point\",coordinates:[]}}},{\"../constants/numerical\":775}],794:[function(t,e,r){\"use strict\";var n,i,a,o\u003dt(\"./mod\").mod;function s(t,e,r,n,i,a,o,s){var l\u003dr-t,c\u003di-t,u\u003do-i,f\u003dn-e,h\u003da-e,p\u003ds-a,d\u003dl*p-u*f;if(0\u003d\u003d\u003dd)return null;var m\u003d(c*p-u*h)/d,g\u003d(c*f-l*h)/d;return g\u003c0||g\u003e1||m\u003c0||m\u003e1?null:{x:t+l*m,y:e+f*m}}function l(t,e,r,n,i){var a\u003dn*t+i*e;if(a\u003c0)return n*n+i*i;if(a\u003er){var o\u003dn-t,s\u003di-e;return o*o+s*s}var l\u003dn*e-i*t;return l*l/r}r.segmentsIntersect\u003ds,r.segmentDistance\u003dfunction(t,e,r,n,i,a,o,c){if(s(t,e,r,n,i,a,o,c))return 0;var u\u003dr-t,f\u003dn-e,h\u003do-i,p\u003dc-a,d\u003du*u+f*f,m\u003dh*h+p*p,g\u003dMath.min(l(u,f,d,i-t,a-e),l(u,f,d,o-t,c-e),l(h,p,m,t-i,e-a),l(h,p,m,r-i,n-a));return Math.sqrt(g)},r.getTextLocation\u003dfunction(t,e,r,s){if(t\u003d\u003d\u003di\u0026\u0026s\u003d\u003d\u003da||(n\u003d{},i\u003dt,a\u003ds),n[r])return n[r];var l\u003dt.getPointAtLength(o(r-s/2,e)),c\u003dt.getPointAtLength(o(r+s/2,e)),u\u003dMath.atan((c.y-l.y)/(c.x-l.x)),f\u003dt.getPointAtLength(o(r,e)),h\u003d{x:(4*f.x+l.x+c.x)/6,y:(4*f.y+l.y+c.y)/6,theta:u};return n[r]\u003dh,h},r.clearLocationCache\u003dfunction(){i\u003dnull},r.getVisibleSegment\u003dfunction(t,e,r){var n,i,a\u003de.left,o\u003de.right,s\u003de.top,l\u003de.bottom,c\u003d0,u\u003dt.getTotalLength(),f\u003du;function h(e){var r\u003dt.getPointAtLength(e);0\u003d\u003d\u003de?n\u003dr:e\u003d\u003d\u003du\u0026\u0026(i\u003dr);var c\u003dr.x\u003ca?a-r.x:r.x\u003eo?r.x-o:0,f\u003dr.y\u003cs?s-r.y:r.y\u003el?r.y-l:0;return Math.sqrt(c*c+f*f)}for(var p\u003dh(c);p;){if((c+\u003dp+r)\u003ef)return;p\u003dh(c)}for(p\u003dh(f);p;){if(c\u003e(f-\u003dp+r))return;p\u003dh(f)}return{min:c,max:f,len:f-c,total:u,isClosed:0\u003d\u003d\u003dc\u0026\u0026f\u003d\u003d\u003du\u0026\u0026Math.abs(n.x-i.x)\u003c.1\u0026\u0026Math.abs(n.y-i.y)\u003c.1}},r.findPointOnPath\u003dfunction(t,e,r,n){for(var i,a,o,s\u003d(n\u003dn||{}).pathLength||t.getTotalLength(),l\u003dn.tolerance||.001,c\u003dn.iterationLimit||30,u\u003dt.getPointAtLength(0)[r]\u003et.getPointAtLength(s)[r]?-1:1,f\u003d0,h\u003d0,p\u003ds;f\u003cc;){if(i\u003d(h+p)/2,o\u003d(a\u003dt.getPointAtLength(i))[r]-e,Math.abs(o)\u003cl)return a;u*o\u003e0?p\u003di:h\u003di,f++}return a}},{\"./mod\":806}],795:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"color-normalize\"),o\u003dt(\"../components/colorscale\"),s\u003dt(\"../components/color/attributes\").defaultLine,l\u003dt(\"./array\").isArrayOrTypedArray,c\u003da(s);function u(t,e){var r\u003dt;return r[3]*\u003de,r}function f(t){if(n(t))return c;var e\u003da(t);return e.length?e:c}function h(t){return n(t)?t:1}e.exports\u003d{formatColor:function(t,e,r){var n,i,s,p,d,m\u003dt.color,g\u003dl(m),v\u003dl(e),y\u003do.extractOpts(t),x\u003d[];if(n\u003dvoid 0!\u003d\u003dy.colorscale?o.makeColorScaleFuncFromTrace(t):f,i\u003dg?function(t,e){return void 0\u003d\u003d\u003dt[e]?c:a(n(t[e]))}:f,s\u003dv?function(t,e){return void 0\u003d\u003d\u003dt[e]?1:h(t[e])}:h,g||v)for(var b\u003d0;b\u003cr;b++)p\u003di(m,b),d\u003ds(e,b),x[b]\u003du(p,d);else x\u003du(a(m),e);return x},parseColorScale:function(t){var e\u003do.extractOpts(t),r\u003de.colorscale;return e.reversescale\u0026\u0026(r\u003do.flipScale(e.colorscale)),r.map((function(t){var e\u003dt[0],r\u003di(t[1]).toRgb();return{index:e,rgb:[r.r,r.g,r.b,r.a]}}))}}},{\"../components/color/attributes\":661,\"../components/colorscale\":674,\"./array\":781,\"color-normalize\":131,\"fast-isnumeric\":245,tinycolor2:594}],796:[function(t,e,r){\"use strict\";var n\u003dt(\"./identity\");function i(t){return[t]}e.exports\u003d{keyFun:function(t){return t.key},repeat:i,descend:n,wrap:i,unwrap:function(t){return t[0]}}},{\"./identity\":797}],797:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return t}},{}],798:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){if(!e)return t;var r\u003d1/Math.abs(e),n\u003dr\u003e1?(r*t+r*e)/r:t+e,i\u003dString(n).length;if(i\u003e16){var a\u003dString(e).length;if(i\u003e\u003dString(t).length+a){var o\u003dparseFloat(n).toPrecision(12);-1\u003d\u003d\u003do.indexOf(\"e+\")\u0026\u0026(n\u003d+o)}}return n}},{}],799:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"d3-time-format\").utcFormat,a\u003dt(\"fast-isnumeric\"),o\u003dt(\"../constants/numerical\"),s\u003do.FP_SAFE,l\u003d-s,c\u003do.BADNUM,u\u003de.exports\u003d{};u.nestedProperty\u003dt(\"./nested_property\"),u.keyedContainer\u003dt(\"./keyed_container\"),u.relativeAttr\u003dt(\"./relative_attr\"),u.isPlainObject\u003dt(\"./is_plain_object\"),u.toLogRange\u003dt(\"./to_log_range\"),u.relinkPrivateKeys\u003dt(\"./relink_private\");var f\u003dt(\"./array\");u.isTypedArray\u003df.isTypedArray,u.isArrayOrTypedArray\u003df.isArrayOrTypedArray,u.isArray1D\u003df.isArray1D,u.ensureArray\u003df.ensureArray,u.concat\u003df.concat,u.maxRowLength\u003df.maxRowLength,u.minRowLength\u003df.minRowLength;var h\u003dt(\"./mod\");u.mod\u003dh.mod,u.modHalf\u003dh.modHalf;var p\u003dt(\"./coerce\");u.valObjectMeta\u003dp.valObjectMeta,u.coerce\u003dp.coerce,u.coerce2\u003dp.coerce2,u.coerceFont\u003dp.coerceFont,u.coercePattern\u003dp.coercePattern,u.coerceHoverinfo\u003dp.coerceHoverinfo,u.coerceSelectionMarkerOpacity\u003dp.coerceSelectionMarkerOpacity,u.validate\u003dp.validate;var d\u003dt(\"./dates\");u.dateTime2ms\u003dd.dateTime2ms,u.isDateTime\u003dd.isDateTime,u.ms2DateTime\u003dd.ms2DateTime,u.ms2DateTimeLocal\u003dd.ms2DateTimeLocal,u.cleanDate\u003dd.cleanDate,u.isJSDate\u003dd.isJSDate,u.formatDate\u003dd.formatDate,u.incrementMonth\u003dd.incrementMonth,u.dateTick0\u003dd.dateTick0,u.dfltRange\u003dd.dfltRange,u.findExactDates\u003dd.findExactDates,u.MIN_MS\u003dd.MIN_MS,u.MAX_MS\u003dd.MAX_MS;var m\u003dt(\"./search\");u.findBin\u003dm.findBin,u.sorterAsc\u003dm.sorterAsc,u.sorterDes\u003dm.sorterDes,u.distinctVals\u003dm.distinctVals,u.roundUp\u003dm.roundUp,u.sort\u003dm.sort,u.findIndexOfMin\u003dm.findIndexOfMin;var g\u003dt(\"./stats\");u.aggNums\u003dg.aggNums,u.len\u003dg.len,u.mean\u003dg.mean,u.median\u003dg.median,u.midRange\u003dg.midRange,u.variance\u003dg.variance,u.stdev\u003dg.stdev,u.interp\u003dg.interp;var v\u003dt(\"./matrix\");u.init2dArray\u003dv.init2dArray,u.transposeRagged\u003dv.transposeRagged,u.dot\u003dv.dot,u.translationMatrix\u003dv.translationMatrix,u.rotationMatrix\u003dv.rotationMatrix,u.rotationXYMatrix\u003dv.rotationXYMatrix,u.apply3DTransform\u003dv.apply3DTransform,u.apply2DTransform\u003dv.apply2DTransform,u.apply2DTransform2\u003dv.apply2DTransform2,u.convertCssMatrix\u003dv.convertCssMatrix,u.inverseTransformMatrix\u003dv.inverseTransformMatrix;var y\u003dt(\"./angles\");u.deg2rad\u003dy.deg2rad,u.rad2deg\u003dy.rad2deg,u.angleDelta\u003dy.angleDelta,u.angleDist\u003dy.angleDist,u.isFullCircle\u003dy.isFullCircle,u.isAngleInsideSector\u003dy.isAngleInsideSector,u.isPtInsideSector\u003dy.isPtInsideSector,u.pathArc\u003dy.pathArc,u.pathSector\u003dy.pathSector,u.pathAnnulus\u003dy.pathAnnulus;var x\u003dt(\"./anchor_utils\");u.isLeftAnchor\u003dx.isLeftAnchor,u.isCenterAnchor\u003dx.isCenterAnchor,u.isRightAnchor\u003dx.isRightAnchor,u.isTopAnchor\u003dx.isTopAnchor,u.isMiddleAnchor\u003dx.isMiddleAnchor,u.isBottomAnchor\u003dx.isBottomAnchor;var b\u003dt(\"./geometry2d\");u.segmentsIntersect\u003db.segmentsIntersect,u.segmentDistance\u003db.segmentDistance,u.getTextLocation\u003db.getTextLocation,u.clearLocationCache\u003db.clearLocationCache,u.getVisibleSegment\u003db.getVisibleSegment,u.findPointOnPath\u003db.findPointOnPath;var _\u003dt(\"./extend\");u.extendFlat\u003d_.extendFlat,u.extendDeep\u003d_.extendDeep,u.extendDeepAll\u003d_.extendDeepAll,u.extendDeepNoArrays\u003d_.extendDeepNoArrays;var w\u003dt(\"./loggers\");u.log\u003dw.log,u.warn\u003dw.warn,u.error\u003dw.error;var T\u003dt(\"./regex\");u.counterRegex\u003dT.counter;var k\u003dt(\"./throttle\");u.throttle\u003dk.throttle,u.throttleDone\u003dk.done,u.clearThrottle\u003dk.clear;var M\u003dt(\"./dom\");function A(t){var e\u003d{};for(var r in t)for(var n\u003dt[r],i\u003d0;i\u003cn.length;i++)e[n[i]]\u003d+r;return e}u.getGraphDiv\u003dM.getGraphDiv,u.isPlotDiv\u003dM.isPlotDiv,u.removeElement\u003dM.removeElement,u.addStyleRule\u003dM.addStyleRule,u.addRelatedStyleRule\u003dM.addRelatedStyleRule,u.deleteRelatedStyleRule\u003dM.deleteRelatedStyleRule,u.getFullTransformMatrix\u003dM.getFullTransformMatrix,u.getElementTransformMatrix\u003dM.getElementTransformMatrix,u.getElementAndAncestors\u003dM.getElementAndAncestors,u.equalDomRects\u003dM.equalDomRects,u.clearResponsive\u003dt(\"./clear_responsive\"),u.preserveDrawingBuffer\u003dt(\"./preserve_drawing_buffer\"),u.makeTraceGroups\u003dt(\"./make_trace_groups\"),u._\u003dt(\"./localize\"),u.notifier\u003dt(\"./notifier\"),u.filterUnique\u003dt(\"./filter_unique\"),u.filterVisible\u003dt(\"./filter_visible\"),u.pushUnique\u003dt(\"./push_unique\"),u.increment\u003dt(\"./increment\"),u.cleanNumber\u003dt(\"./clean_number\"),u.ensureNumber\u003dfunction(t){return a(t)?(t\u003dNumber(t))\u003es||t\u003cl?c:t:c},u.isIndex\u003dfunction(t,e){return!(void 0!\u003d\u003de\u0026\u0026t\u003e\u003de)\u0026\u0026(a(t)\u0026\u0026t\u003e\u003d0\u0026\u0026t%1\u003d\u003d0)},u.noop\u003dt(\"./noop\"),u.identity\u003dt(\"./identity\"),u.repeat\u003dfunction(t,e){for(var r\u003dnew Array(e),n\u003d0;n\u003ce;n++)r[n]\u003dt;return r},u.swapAttrs\u003dfunction(t,e,r,n){r||(r\u003d\"x\"),n||(n\u003d\"y\");for(var i\u003d0;i\u003ce.length;i++){var a\u003de[i],o\u003du.nestedProperty(t,a.replace(\"?\",r)),s\u003du.nestedProperty(t,a.replace(\"?\",n)),l\u003do.get();o.set(s.get()),s.set(l)}},u.raiseToTop\u003dfunction(t){t.parentNode.appendChild(t)},u.cancelTransition\u003dfunction(t){return t.transition().duration(0)},u.constrain\u003dfunction(t,e,r){return e\u003er?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},u.bBoxIntersect\u003dfunction(t,e,r){return r\u003dr||0,t.left\u003c\u003de.right+r\u0026\u0026e.left\u003c\u003dt.right+r\u0026\u0026t.top\u003c\u003de.bottom+r\u0026\u0026e.top\u003c\u003dt.bottom+r},u.simpleMap\u003dfunction(t,e,r,n,i){for(var a\u003dt.length,o\u003dnew Array(a),s\u003d0;s\u003ca;s++)o[s]\u003de(t[s],r,n,i);return o},u.randstr\u003dfunction t(e,r,n,i){if(n||(n\u003d16),void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d24),r\u003c\u003d0)return\"0\";var a,o,s\u003dMath.log(Math.pow(2,r))/Math.log(n),l\u003d\"\";for(a\u003d2;s\u003d\u003d\u003d1/0;a*\u003d2)s\u003dMath.log(Math.pow(2,r/a))/Math.log(n)*a;var c\u003ds-Math.floor(s);for(a\u003d0;a\u003cMath.floor(s);a++)l\u003dMath.floor(Math.random()*n).toString(n)+l;c\u0026\u0026(o\u003dMath.pow(n,c),l\u003dMath.floor(Math.random()*o).toString(n)+l);var f\u003dparseInt(l,n);return e\u0026\u0026e[l]||f!\u003d\u003d1/0\u0026\u0026f\u003e\u003dMath.pow(2,r)?i\u003e10?(u.warn(\"randstr failed uniqueness\"),l):t(e,r,n,(i||0)+1):l},u.OptionControl\u003dfunction(t,e){t||(t\u003d{}),e||(e\u003d\"opt\");var r\u003d{optionList:[],_newoption:function(n){n[e]\u003dt,r[n.name]\u003dn,r.optionList.push(n)}};return r[\"_\"+e]\u003dt,r},u.smooth\u003dfunction(t,e){if((e\u003dMath.round(e)||0)\u003c2)return t;var r,n,i,a,o\u003dt.length,s\u003d2*o,l\u003d2*e-1,c\u003dnew Array(l),u\u003dnew Array(o);for(r\u003d0;r\u003cl;r++)c[r]\u003d(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r\u003d0;r\u003co;r++){for(a\u003d0,n\u003d0;n\u003cl;n++)(i\u003dr+n+1-e)\u003c-o?i-\u003ds*Math.round(i/s):i\u003e\u003ds\u0026\u0026(i-\u003ds*Math.floor(i/s)),i\u003c0?i\u003d-1-i:i\u003e\u003do\u0026\u0026(i\u003ds-1-i),a+\u003dt[i]*c[n];u[r]\u003da}return u},u.syncOrAsync\u003dfunction(t,e,r){var n;function i(){return u.syncOrAsync(t,e,r)}for(;t.length;)if((n\u003d(0,t.splice(0,1)[0])(e))\u0026\u0026n.then)return n.then(i).then(void 0,u.promiseError);return r\u0026\u0026r(e)},u.stripTrailingSlash\u003dfunction(t){return\"/\"\u003d\u003d\u003dt.substr(-1)?t.substr(0,t.length-1):t},u.noneOrAll\u003dfunction(t,e,r){if(t){var n,i\u003d!1,a\u003d!0;for(n\u003d0;n\u003cr.length;n++)null!\u003dt[r[n]]?i\u003d!0:a\u003d!1;if(i\u0026\u0026!a)for(n\u003d0;n\u003cr.length;n++)t[r[n]]\u003de[r[n]]}},u.mergeArray\u003dfunction(t,e,r,n){var i\u003d\"function\"\u003d\u003dtypeof n;if(u.isArrayOrTypedArray(t))for(var a\u003dMath.min(t.length,e.length),o\u003d0;o\u003ca;o++){var s\u003dt[o];e[o][r]\u003di?n(s):s}},u.mergeArrayCastPositive\u003dfunction(t,e,r){return u.mergeArray(t,e,r,(function(t){var e\u003d+t;return isFinite(e)\u0026\u0026e\u003e0?e:0}))},u.fillArray\u003dfunction(t,e,r,n){if(n\u003dn||u.identity,u.isArrayOrTypedArray(t))for(var i\u003d0;i\u003ce.length;i++)e[i][r]\u003dn(t[i])},u.castOption\u003dfunction(t,e,r,n){n\u003dn||u.identity;var i\u003du.nestedProperty(t,r).get();return u.isArrayOrTypedArray(i)?Array.isArray(e)\u0026\u0026u.isArrayOrTypedArray(i[e[0]])?n(i[e[0]][e[1]]):n(i[e]):i},u.extractOption\u003dfunction(t,e,r,n){if(r in t)return t[r];var i\u003du.nestedProperty(e,n).get();return Array.isArray(i)?void 0:i},u.tagSelected\u003dfunction(t,e,r){var n,i,a\u003de.selectedpoints,o\u003de._indexToPoints;o\u0026\u0026(n\u003dA(o));for(var s\u003d0;s\u003ca.length;s++){var l\u003da[s];if(u.isIndex(l)||u.isArrayOrTypedArray(l)\u0026\u0026u.isIndex(l[0])\u0026\u0026u.isIndex(l[1])){var c\u003dn?n[l]:l,f\u003dr?r[c]:c;void 0!\u003d\u003d(i\u003df)\u0026\u0026i\u003ct.length\u0026\u0026(t[f].selected\u003d1)}}},u.selIndices2selPoints\u003dfunction(t){var e\u003dt.selectedpoints,r\u003dt._indexToPoints;if(r){for(var n\u003dA(r),i\u003d[],a\u003d0;a\u003ce.length;a++){var o\u003de[a];if(u.isIndex(o)){var s\u003dn[o];u.isIndex(s)\u0026\u0026i.push(s)}}return i}return e},u.getTargetArray\u003dfunction(t,e){var r\u003de.target;if(\"string\"\u003d\u003dtypeof r\u0026\u0026r){var n\u003du.nestedProperty(t,r).get();return!!Array.isArray(n)\u0026\u0026n}return!!Array.isArray(r)\u0026\u0026r},u.minExtend\u003dfunction(t,e){var r\u003d{};\"object\"!\u003dtypeof e\u0026\u0026(e\u003d{});var n,i,a,o\u003dObject.keys(t);for(n\u003d0;n\u003co.length;n++)a\u003dt[i\u003do[n]],\"_\"!\u003d\u003di.charAt(0)\u0026\u0026\"function\"!\u003dtypeof a\u0026\u0026(\"module\"\u003d\u003d\u003di?r[i]\u003da:Array.isArray(a)?r[i]\u003d\"colorscale\"\u003d\u003d\u003di?a.slice():a.slice(0,3):u.isTypedArray(a)?r[i]\u003da.subarray(0,3):r[i]\u003da\u0026\u0026\"object\"\u003d\u003dtypeof a?u.minExtend(t[i],e[i]):a);for(o\u003dObject.keys(e),n\u003d0;n\u003co.length;n++)\"object\"\u003d\u003dtypeof(a\u003de[i\u003do[n]])\u0026\u0026i in r\u0026\u0026\"object\"\u003d\u003dtypeof r[i]||(r[i]\u003da);return r},u.titleCase\u003dfunction(t){return t.charAt(0).toUpperCase()+t.substr(1)},u.containsAny\u003dfunction(t,e){for(var r\u003d0;r\u003ce.length;r++)if(-1!\u003d\u003dt.indexOf(e[r]))return!0;return!1},u.isIE\u003dfunction(){return void 0!\u003d\u003dwindow.navigator.msSaveBlob};var S\u003d/Version\\/[\\d\\.]+.*Safari/;u.isSafari\u003dfunction(){return S.test(window.navigator.userAgent)};var E\u003d/iPad|iPhone|iPod/;u.isIOS\u003dfunction(){return E.test(window.navigator.userAgent)};var L\u003d/Firefox\\/(\\d+)\\.\\d+/;u.getFirefoxVersion\u003dfunction(){var t\u003dL.exec(window.navigator.userAgent);if(t\u0026\u00262\u003d\u003d\u003dt.length){var e\u003dparseInt(t[1]);if(!isNaN(e))return e}return null},u.isD3Selection\u003dfunction(t){return t instanceof n.selection},u.ensureSingle\u003dfunction(t,e,r,n){var i\u003dt.select(e+(r?\".\"+r:\"\"));if(i.size())return i;var a\u003dt.append(e);return r\u0026\u0026a.classed(r,!0),n\u0026\u0026a.call(n),a},u.ensureSingleById\u003dfunction(t,e,r,n){var i\u003dt.select(e+\"#\"+r);if(i.size())return i;var a\u003dt.append(e).attr(\"id\",r);return n\u0026\u0026a.call(n),a},u.objectFromPath\u003dfunction(t,e){for(var r,n\u003dt.split(\".\"),i\u003dr\u003d{},a\u003d0;a\u003cn.length;a++){var o\u003dn[a],s\u003dnull,l\u003dn[a].match(/(.*)\\[([0-9]+)\\]/);l?(o\u003dl[1],s\u003dl[2],r\u003dr[o]\u003d[],a\u003d\u003d\u003dn.length-1?r[s]\u003de:r[s]\u003d{},r\u003dr[s]):(a\u003d\u003d\u003dn.length-1?r[o]\u003de:r[o]\u003d{},r\u003dr[o])}return i};var C\u003d/^([^\\[\\.]+)\\.(.+)?/,P\u003d/^([^\\.]+)\\[([0-9]+)\\](\\.)?(.+)?/;u.expandObjectPaths\u003dfunction(t){var e,r,n,i,a,o,s;if(\"object\"\u003d\u003dtypeof t\u0026\u0026!Array.isArray(t))for(r in t)t.hasOwnProperty(r)\u0026\u0026((e\u003dr.match(C))?(i\u003dt[r],n\u003de[1],delete t[r],t[n]\u003du.extendDeepNoArrays(t[n]||{},u.objectFromPath(r,u.expandObjectPaths(i))[n])):(e\u003dr.match(P))?(i\u003dt[r],n\u003de[1],a\u003dparseInt(e[2]),delete t[r],t[n]\u003dt[n]||[],\".\"\u003d\u003d\u003de[3]?(s\u003de[4],o\u003dt[n][a]\u003dt[n][a]||{},u.extendDeepNoArrays(o,u.objectFromPath(s,u.expandObjectPaths(i)))):t[n][a]\u003du.expandObjectPaths(i)):t[r]\u003du.expandObjectPaths(t[r]));return t},u.numSeparate\u003dfunction(t,e,r){if(r||(r\u003d!1),\"string\"!\u003dtypeof e||0\u003d\u003d\u003de.length)throw new Error(\"Separator string required for formatting!\");\"number\"\u003d\u003dtypeof t\u0026\u0026(t\u003dString(t));var n\u003d/(\\d+)(\\d{3})/,i\u003de.charAt(0),a\u003de.charAt(1),o\u003dt.split(\".\"),s\u003do[0],l\u003do.length\u003e1?i+o[1]:\"\";if(a\u0026\u0026(o.length\u003e1||s.length\u003e4||r))for(;n.test(s);)s\u003ds.replace(n,\"$1\"+a+\"$2\");return s+l},u.TEMPLATE_STRING_REGEX\u003d/%{([^\\s%{}:]*)([:|\\|][^}]*)?}/g;var I\u003d/^\\w*$/;u.templateString\u003dfunction(t,e){var r\u003d{};return t.replace(u.TEMPLATE_STRING_REGEX,(function(t,n){var i;return I.test(n)?i\u003de[n]:(r[n]\u003dr[n]||u.nestedProperty(e,n).get,i\u003dr[n]()),u.isValidTextValue(i)?i:\"\"}))};var O\u003d{max:10,count:0,name:\"hovertemplate\"};u.hovertemplateString\u003dfunction(){return R.apply(O,arguments)};var z\u003d{max:10,count:0,name:\"texttemplate\"};u.texttemplateString\u003dfunction(){return R.apply(z,arguments)};var D\u003d/^[:|\\|]/;function R(t,e,r){var a\u003dthis,o\u003darguments;e||(e\u003d{});var s\u003d{};return t.replace(u.TEMPLATE_STRING_REGEX,(function(t,l,c){var f,h,p,d\u003d\"_xother\"\u003d\u003d\u003dl||\"_yother\"\u003d\u003d\u003dl,m\u003d\"_xother_\"\u003d\u003d\u003dl||\"_yother_\"\u003d\u003d\u003dl,g\u003d\"xother_\"\u003d\u003d\u003dl||\"yother_\"\u003d\u003d\u003dl,v\u003d\"xother\"\u003d\u003d\u003dl||\"yother\"\u003d\u003d\u003dl||d||g||m,y\u003dl;if((d||m)\u0026\u0026(y\u003dy.substring(1)),(g||m)\u0026\u0026(y\u003dy.substring(0,y.length-1)),v){if(void 0\u003d\u003d\u003d(f\u003de[y]))return\"\"}else for(p\u003d3;p\u003co.length;p++)if(h\u003do[p]){if(h.hasOwnProperty(y)){f\u003dh[y];break}if(I.test(y)||(f\u003du.nestedProperty(h,y).get(),(f\u003ds[y]||u.nestedProperty(h,y).get())\u0026\u0026(s[y]\u003df)),void 0!\u003d\u003df)break}if(void 0\u003d\u003d\u003df\u0026\u0026a)return a.count\u003ca.max\u0026\u0026(u.warn(\"Variable \u0027\"+y+\"\u0027 in \"+a.name+\" could not be found!\"),f\u003dt),a.count\u003d\u003d\u003da.max\u0026\u0026u.warn(\"Too many \"+a.name+\" warnings - additional warnings will be suppressed\"),a.count++,t;if(c){var x;if(\":\"\u003d\u003d\u003dc[0]\u0026\u0026(f\u003d(x\u003dr?r.numberFormat:n.format)(c.replace(D,\"\"))(f)),\"|\"\u003d\u003d\u003dc[0]){x\u003dr?r.timeFormat:i;var b\u003du.dateTime2ms(f);f\u003du.formatDate(b,c.replace(D,\"\"),!1,x)}}else{var _\u003dy+\"Label\";e.hasOwnProperty(_)\u0026\u0026(f\u003de[_])}return v\u0026\u0026(f\u003d\"(\"+f+\")\",(d||m)\u0026\u0026(f\u003d\" \"+f),(g||m)\u0026\u0026(f+\u003d\" \")),f}))}u.subplotSort\u003dfunction(t,e){for(var r\u003dMath.min(t.length,e.length)+1,n\u003d0,i\u003d0,a\u003d0;a\u003cr;a++){var o\u003dt.charCodeAt(a)||0,s\u003de.charCodeAt(a)||0,l\u003do\u003e\u003d48\u0026\u0026o\u003c\u003d57,c\u003ds\u003e\u003d48\u0026\u0026s\u003c\u003d57;if(l\u0026\u0026(n\u003d10*n+o-48),c\u0026\u0026(i\u003d10*i+s-48),!l||!c){if(n!\u003d\u003di)return n-i;if(o!\u003d\u003ds)return o-s}}return i-n};var F\u003d2e9;u.seedPseudoRandom\u003dfunction(){F\u003d2e9},u.pseudoRandom\u003dfunction(){var t\u003dF;return F\u003d(69069*F+1)%4294967296,Math.abs(F-t)\u003c429496729?u.pseudoRandom():F/4294967296},u.fillText\u003dfunction(t,e,r){var n\u003dArray.isArray(r)?function(t){r.push(t)}:function(t){r.text\u003dt},i\u003du.extractOption(t,e,\"htx\",\"hovertext\");if(u.isValidTextValue(i))return n(i);var a\u003du.extractOption(t,e,\"tx\",\"text\");return u.isValidTextValue(a)?n(a):void 0},u.isValidTextValue\u003dfunction(t){return t||0\u003d\u003d\u003dt},u.formatPercent\u003dfunction(t,e){e\u003de||0;for(var r\u003d(Math.round(100*t*Math.pow(10,e))*Math.pow(.1,e)).toFixed(e)+\"%\",n\u003d0;n\u003ce;n++)-1!\u003d\u003dr.indexOf(\".\")\u0026\u0026(r\u003d(r\u003dr.replace(\"0%\",\"%\")).replace(\".%\",\"%\"));return r},u.isHidden\u003dfunction(t){var e\u003dwindow.getComputedStyle(t).display;return!e||\"none\"\u003d\u003d\u003de},u.strTranslate\u003dfunction(t,e){return t||e?\"translate(\"+t+\",\"+e+\")\":\"\"},u.strRotate\u003dfunction(t){return t?\"rotate(\"+t+\")\":\"\"},u.strScale\u003dfunction(t){return 1!\u003d\u003dt?\"scale(\"+t+\")\":\"\"},u.getTextTransform\u003dfunction(t){var e\u003dt.noCenter,r\u003dt.textX,n\u003dt.textY,i\u003dt.targetX,a\u003dt.targetY,o\u003dt.anchorX||0,s\u003dt.anchorY||0,l\u003dt.rotate,c\u003dt.scale;return c?c\u003e1\u0026\u0026(c\u003d1):c\u003d0,u.strTranslate(i-c*(r+o),a-c*(n+s))+u.strScale(c)+(l?\"rotate(\"+l+(e?\"\":\" \"+r+\" \"+n)+\")\":\"\")},u.ensureUniformFontSize\u003dfunction(t,e){var r\u003du.extendFlat({},e);return r.size\u003dMath.max(e.size,t._fullLayout.uniformtext.minsize||0),r},u.join2\u003dfunction(t,e,r){var n\u003dt.length;return n\u003e1?t.slice(0,-1).join(e)+r+t[n-1]:t.join(e)},u.bigFont\u003dfunction(t){return Math.round(1.2*t)};var B\u003du.getFirefoxVersion(),N\u003dnull!\u003d\u003dB\u0026\u0026B\u003c86;u.getPositionFromD3Event\u003dfunction(){return N?[n.event.layerX,n.event.layerY]:[n.event.offsetX,n.event.offsetY]}},{\"../constants/numerical\":775,\"./anchor_utils\":779,\"./angles\":780,\"./array\":781,\"./clean_number\":782,\"./clear_responsive\":784,\"./coerce\":785,\"./dates\":786,\"./dom\":787,\"./extend\":789,\"./filter_unique\":790,\"./filter_visible\":791,\"./geometry2d\":794,\"./identity\":797,\"./increment\":798,\"./is_plain_object\":800,\"./keyed_container\":801,\"./localize\":802,\"./loggers\":803,\"./make_trace_groups\":804,\"./matrix\":805,\"./mod\":806,\"./nested_property\":807,\"./noop\":808,\"./notifier\":809,\"./preserve_drawing_buffer\":813,\"./push_unique\":814,\"./regex\":816,\"./relative_attr\":817,\"./relink_private\":818,\"./search\":819,\"./stats\":822,\"./throttle\":825,\"./to_log_range\":826,\"@plotly/d3\":58,\"d3-time-format\":172,\"fast-isnumeric\":245}],800:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return window\u0026\u0026window.process\u0026\u0026window.process.versions?\"[object Object]\"\u003d\u003d\u003dObject.prototype.toString.call(t):\"[object Object]\"\u003d\u003d\u003dObject.prototype.toString.call(t)\u0026\u0026Object.getPrototypeOf(t).hasOwnProperty(\"hasOwnProperty\")}},{}],801:[function(t,e,r){\"use strict\";var n\u003dt(\"./nested_property\"),i\u003d/^\\w*$/;e.exports\u003dfunction(t,e,r,a){var o,s,l;r\u003dr||\"name\",a\u003da||\"value\";var c\u003d{};e\u0026\u0026e.length?(l\u003dn(t,e),s\u003dl.get()):s\u003dt,e\u003de||\"\";var u\u003d{};if(s)for(o\u003d0;o\u003cs.length;o++)u[s[o][r]]\u003do;var f\u003di.test(a),h\u003d{set:function(t,e){var i\u003dnull\u003d\u003d\u003de?4:0;if(!s){if(!l||4\u003d\u003d\u003di)return;s\u003d[],l.set(s)}var o\u003du[t];if(void 0\u003d\u003d\u003do){if(4\u003d\u003d\u003di)return;i|\u003d3,o\u003ds.length,u[t]\u003do}else e!\u003d\u003d(f?s[o][a]:n(s[o],a).get())\u0026\u0026(i|\u003d2);var p\u003ds[o]\u003ds[o]||{};return p[r]\u003dt,f?p[a]\u003de:n(p,a).set(e),null!\u003d\u003de\u0026\u0026(i\u0026\u003d-5),c[o]\u003dc[o]|i,h},get:function(t){if(s){var e\u003du[t];return void 0\u003d\u003d\u003de?void 0:f?s[e][a]:n(s[e],a).get()}},rename:function(t,e){var n\u003du[t];return void 0\u003d\u003d\u003dn||(c[n]\u003d1|c[n],u[e]\u003dn,delete u[t],s[n][r]\u003de),h},remove:function(t){var e\u003du[t];if(void 0\u003d\u003d\u003de)return h;var i\u003ds[e];if(Object.keys(i).length\u003e2)return c[e]\u003d2|c[e],h.set(t,null);if(f){for(o\u003de;o\u003cs.length;o++)c[o]\u003d3|c[o];for(o\u003de;o\u003cs.length;o++)u[s[o][r]]--;s.splice(e,1),delete u[t]}else n(i,a).set(null),c[e]\u003d6|c[e];return h},constructUpdate:function(){for(var t,i,o\u003d{},l\u003dObject.keys(c),u\u003d0;u\u003cl.length;u++)i\u003dl[u],t\u003de+\"[\"+i+\"]\",s[i]?(1\u0026c[i]\u0026\u0026(o[t+\".\"+r]\u003ds[i][r]),2\u0026c[i]\u0026\u0026(o[t+\".\"+a]\u003df?4\u0026c[i]?null:s[i][a]:4\u0026c[i]?null:n(s[i],a).get())):o[t]\u003dnull;return o}};return h}},{\"./nested_property\":807}],802:[function(t,e,r){\"use strict\";var n\u003dt(\"../registry\");e.exports\u003dfunction(t,e){for(var r\u003dt._context.locale,i\u003d0;i\u003c2;i++){for(var a\u003dt._context.locales,o\u003d0;o\u003c2;o++){var s\u003d(a[r]||{}).dictionary;if(s){var l\u003ds[e];if(l)return l}a\u003dn.localeRegistry}var c\u003dr.split(\"-\")[0];if(c\u003d\u003d\u003dr)break;r\u003dc}return e}},{\"../registry\":927}],803:[function(t,e,r){\"use strict\";var n\u003dt(\"../plot_api/plot_config\").dfltConfig,i\u003dt(\"./notifier\"),a\u003de.exports\u003d{};a.log\u003dfunction(){var t;if(n.logging\u003e1){var e\u003d[\"LOG:\"];for(t\u003d0;t\u003carguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging\u003e1){var r\u003d[];for(t\u003d0;t\u003carguments.length;t++)r.push(arguments[t]);i(r.join(\"\u003cbr\u003e\"),\"long\")}},a.warn\u003dfunction(){var t;if(n.logging\u003e0){var e\u003d[\"WARN:\"];for(t\u003d0;t\u003carguments.length;t++)e.push(arguments[t]);console.trace.apply(console,e)}if(n.notifyOnLogging\u003e0){var r\u003d[];for(t\u003d0;t\u003carguments.length;t++)r.push(arguments[t]);i(r.join(\"\u003cbr\u003e\"),\"stick\")}},a.error\u003dfunction(){var t;if(n.logging\u003e0){var e\u003d[\"ERROR:\"];for(t\u003d0;t\u003carguments.length;t++)e.push(arguments[t]);console.error.apply(console,e)}if(n.notifyOnLogging\u003e0){var r\u003d[];for(t\u003d0;t\u003carguments.length;t++)r.push(arguments[t]);i(r.join(\"\u003cbr\u003e\"),\"stick\")}}},{\"../plot_api/plot_config\":836,\"./notifier\":809}],804:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\");e.exports\u003dfunction(t,e,r){var i\u003dt.selectAll(\"g.\"+r.replace(/\\s/g,\".\")).data(e,(function(t){return t[0].trace.uid}));i.exit().remove(),i.enter().append(\"g\").attr(\"class\",r),i.order();var a\u003dt.classed(\"rangeplot\")?\"nodeRangePlot3\":\"node3\";return i.each((function(t){t[0][a]\u003dn.select(this)})),i}},{\"@plotly/d3\":58}],805:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-mat4\");r.init2dArray\u003dfunction(t,e){for(var r\u003dnew Array(t),n\u003d0;n\u003ct;n++)r[n]\u003dnew Array(e);return r},r.transposeRagged\u003dfunction(t){var e,r,n\u003d0,i\u003dt.length;for(e\u003d0;e\u003ci;e++)n\u003dMath.max(n,t[e].length);var a\u003dnew Array(n);for(e\u003d0;e\u003cn;e++)for(a[e]\u003dnew Array(i),r\u003d0;r\u003ci;r++)a[e][r]\u003dt[r][e];return a},r.dot\u003dfunction(t,e){if(!t.length||!e.length||t.length!\u003d\u003de.length)return null;var n,i,a\u003dt.length;if(t[0].length)for(n\u003dnew Array(a),i\u003d0;i\u003ca;i++)n[i]\u003dr.dot(t[i],e);else if(e[0].length){var o\u003dr.transposeRagged(e);for(n\u003dnew Array(o.length),i\u003d0;i\u003co.length;i++)n[i]\u003dr.dot(t,o[i])}else for(n\u003d0,i\u003d0;i\u003ca;i++)n+\u003dt[i]*e[i];return n},r.translationMatrix\u003dfunction(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},r.rotationMatrix\u003dfunction(t){var e\u003dt*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},r.rotationXYMatrix\u003dfunction(t,e,n){return r.dot(r.dot(r.translationMatrix(e,n),r.rotationMatrix(t)),r.translationMatrix(-e,-n))},r.apply3DTransform\u003dfunction(t){return function(){var e\u003darguments,n\u003d1\u003d\u003d\u003darguments.length?e[0]:[e[0],e[1],e[2]||0];return r.dot(t,[n[0],n[1],n[2],1]).slice(0,3)}},r.apply2DTransform\u003dfunction(t){return function(){var e\u003darguments;3\u003d\u003d\u003de.length\u0026\u0026(e\u003de[0]);var n\u003d1\u003d\u003d\u003darguments.length?e[0]:[e[0],e[1]];return r.dot(t,[n[0],n[1],1]).slice(0,2)}},r.apply2DTransform2\u003dfunction(t){var e\u003dr.apply2DTransform(t);return function(t){return e(t.slice(0,2)).concat(e(t.slice(2,4)))}},r.convertCssMatrix\u003dfunction(t){if(t){var e\u003dt.length;if(16\u003d\u003d\u003de)return t;if(6\u003d\u003d\u003de)return[t[0],t[1],0,0,t[2],t[3],0,0,0,0,1,0,t[4],t[5],0,1]}return[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]},r.inverseTransformMatrix\u003dfunction(t){var e\u003d[];return n.invert(e,t),[[e[0],e[1],e[2],e[3]],[e[4],e[5],e[6],e[7]],[e[8],e[9],e[10],e[11]],[e[12],e[13],e[14],e[15]]]}},{\"gl-mat4\":294}],806:[function(t,e,r){\"use strict\";e.exports\u003d{mod:function(t,e){var r\u003dt%e;return r\u003c0?r+e:r},modHalf:function(t,e){return Math.abs(t)\u003ee/2?t-Math.round(t/e)*e:t}}},{}],807:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"./array\").isArrayOrTypedArray;function a(t,e){return function(){var r,n,o,s,l,c\u003dt;for(s\u003d0;s\u003ce.length-1;s++){if(-1\u003d\u003d\u003d(r\u003de[s])){for(n\u003d!0,o\u003d[],l\u003d0;l\u003cc.length;l++)o[l]\u003da(c[l],e.slice(s+1))(),o[l]!\u003d\u003do[0]\u0026\u0026(n\u003d!1);return n?o[0]:o}if(\"number\"\u003d\u003dtypeof r\u0026\u0026!i(c))return;if(\"object\"!\u003dtypeof(c\u003dc[r])||null\u003d\u003d\u003dc)return}if(\"object\"\u003d\u003dtypeof c\u0026\u0026null!\u003d\u003dc\u0026\u0026null!\u003d\u003d(o\u003dc[e[s]]))return o}}e.exports\u003dfunction(t,e){if(n(e))e\u003dString(e);else if(\"string\"!\u003dtypeof e||\"[-1]\"\u003d\u003d\u003de.substr(e.length-4))throw\"bad property string\";for(var r,i,o,s\u003d0,c\u003de.split(\".\");s\u003cc.length;){if(r\u003dString(c[s]).match(/^([^\\[\\]]*)((\\[\\-?[0-9]*\\])+)$/)){if(r[1])c[s]\u003dr[1];else{if(0!\u003d\u003ds)throw\"bad property string\";c.splice(0,1)}for(i\u003dr[2].substr(1,r[2].length-2).split(\"][\"),o\u003d0;o\u003ci.length;o++)s++,c.splice(s,0,Number(i[o]))}s++}return\"object\"!\u003dtypeof t?function(t,e,r){return{set:function(){throw\"bad container\"},get:function(){},astr:e,parts:r,obj:t}}(t,e,c):{set:l(t,c,e),get:a(t,c),astr:e,parts:c,obj:t}};var o\u003d/(^|\\.)args\\[/;function s(t,e){return void 0\u003d\u003d\u003dt||null\u003d\u003d\u003dt\u0026\u0026!e.match(o)}function l(t,e,r){return function(n){var a,o,l\u003dt,h\u003d\"\",p\u003d[[t,h]],d\u003ds(n,r);for(o\u003d0;o\u003ce.length-1;o++){if(\"number\"\u003d\u003dtypeof(a\u003de[o])\u0026\u0026!i(l))throw\"array index but container is not an array\";if(-1\u003d\u003d\u003da){if(d\u003d!u(l,e.slice(o+1),n,r))break;return}if(!f(l,a,e[o+1],d))break;if(\"object\"!\u003dtypeof(l\u003dl[a])||null\u003d\u003d\u003dl)throw\"container is not an object\";h\u003dc(h,a),p.push([l,h])}if(d){if(o\u003d\u003d\u003de.length-1\u0026\u0026(delete l[e[o]],Array.isArray(l)\u0026\u0026+e[o]\u003d\u003dl.length-1))for(;l.length\u0026\u0026void 0\u003d\u003d\u003dl[l.length-1];)l.pop()}else l[e[o]]\u003dn}}function c(t,e){var r\u003de;return n(e)?r\u003d\"[\"+e+\"]\":t\u0026\u0026(r\u003d\".\"+e),t+r}function u(t,e,r,n){var a,o\u003di(r),c\u003d!0,u\u003dr,h\u003dn.replace(\"-1\",0),p\u003d!o\u0026\u0026s(r,h),d\u003de[0];for(a\u003d0;a\u003ct.length;a++)h\u003dn.replace(\"-1\",a),o\u0026\u0026(p\u003ds(u\u003dr[a%r.length],h)),p\u0026\u0026(c\u003d!1),f(t,a,d,p)\u0026\u0026l(t[a],e,n.replace(\"-1\",a))(u);return c}function f(t,e,r,n){if(void 0\u003d\u003d\u003dt[e]){if(n)return!1;t[e]\u003d\"number\"\u003d\u003dtypeof r?[]:{}}return!0}},{\"./array\":781,\"fast-isnumeric\":245}],808:[function(t,e,r){\"use strict\";e.exports\u003dfunction(){}},{}],809:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003d[];e.exports\u003dfunction(t,e){if(-1\u003d\u003d\u003da.indexOf(t)){a.push(t);var r\u003d1e3;i(e)?r\u003de:\"long\"\u003d\u003d\u003de\u0026\u0026(r\u003d3e3);var o\u003dn.select(\"body\").selectAll(\".plotly-notifier\").data([0]);o.enter().append(\"div\").classed(\"plotly-notifier\",!0),o.selectAll(\".notifier-note\").data(a).enter().append(\"div\").classed(\"notifier-note\",!0).style(\"opacity\",0).each((function(t){var i\u003dn.select(this);i.append(\"button\").classed(\"notifier-close\",!0).html(\"\u0026times;\").on(\"click\",(function(){i.transition().call(s)}));for(var a\u003di.append(\"p\"),o\u003dt.split(/\u003cbr\\s*\\/?\u003e/g),l\u003d0;l\u003co.length;l++)l\u0026\u0026a.append(\"br\"),a.append(\"span\").text(o[l]);\"stick\"\u003d\u003d\u003de?i.transition().duration(350).style(\"opacity\",1):i.transition().duration(700).style(\"opacity\",1).transition().delay(r).call(s)}))}function s(t){t.duration(700).style(\"opacity\",0).each(\"end\",(function(t){var e\u003da.indexOf(t);-1!\u003d\u003de\u0026\u0026a.splice(e,1),n.select(this).remove()}))}}},{\"@plotly/d3\":58,\"fast-isnumeric\":245}],810:[function(t,e,r){\"use strict\";var n\u003dt(\"./setcursor\"),i\u003d\"data-savedcursor\";e.exports\u003dfunction(t,e){var r\u003dt.attr(i);if(e){if(!r){for(var a\u003d(t.attr(\"class\")||\"\").split(\" \"),o\u003d0;o\u003ca.length;o++){var s\u003da[o];0\u003d\u003d\u003ds.indexOf(\"cursor-\")\u0026\u0026t.attr(i,s.substr(7)).classed(s,!1)}t.attr(i)||t.attr(i,\"!!\")}n(t,e)}else r\u0026\u0026(t.attr(i,null),\"!!\"\u003d\u003d\u003dr?n(t):n(t,r))}},{\"./setcursor\":820}],811:[function(t,e,r){\"use strict\";var n\u003dt(\"./matrix\").dot,i\u003dt(\"../constants/numerical\").BADNUM,a\u003de.exports\u003d{};a.tester\u003dfunction(t){var e,r\u003dt.slice(),n\u003dr[0][0],a\u003dn,o\u003dr[0][1],s\u003do;for(r.push(r[0]),e\u003d1;e\u003cr.length;e++)n\u003dMath.min(n,r[e][0]),a\u003dMath.max(a,r[e][0]),o\u003dMath.min(o,r[e][1]),s\u003dMath.max(s,r[e][1]);var l,c\u003d!1;5\u003d\u003d\u003dr.length\u0026\u0026(r[0][0]\u003d\u003d\u003dr[1][0]?r[2][0]\u003d\u003d\u003dr[3][0]\u0026\u0026r[0][1]\u003d\u003d\u003dr[3][1]\u0026\u0026r[1][1]\u003d\u003d\u003dr[2][1]\u0026\u0026(c\u003d!0,l\u003dfunction(t){return t[0]\u003d\u003d\u003dr[0][0]}):r[0][1]\u003d\u003d\u003dr[1][1]\u0026\u0026r[2][1]\u003d\u003d\u003dr[3][1]\u0026\u0026r[0][0]\u003d\u003d\u003dr[3][0]\u0026\u0026r[1][0]\u003d\u003d\u003dr[2][0]\u0026\u0026(c\u003d!0,l\u003dfunction(t){return t[1]\u003d\u003d\u003dr[0][1]}));var u\u003d!0,f\u003dr[0];for(e\u003d1;e\u003cr.length;e++)if(f[0]!\u003d\u003dr[e][0]||f[1]!\u003d\u003dr[e][1]){u\u003d!1;break}return{xmin:n,xmax:a,ymin:o,ymax:s,pts:r,contains:c?function(t,e){var r\u003dt[0],c\u003dt[1];return!(r\u003d\u003d\u003di||r\u003cn||r\u003ea||c\u003d\u003d\u003di||c\u003co||c\u003es)\u0026\u0026(!e||!l(t))}:function(t,e){var l\u003dt[0],c\u003dt[1];if(l\u003d\u003d\u003di||l\u003cn||l\u003ea||c\u003d\u003d\u003di||c\u003co||c\u003es)return!1;var u,f,h,p,d,m\u003dr.length,g\u003dr[0][0],v\u003dr[0][1],y\u003d0;for(u\u003d1;u\u003cm;u++)if(f\u003dg,h\u003dv,g\u003dr[u][0],v\u003dr[u][1],!(l\u003c(p\u003dMath.min(f,g))||l\u003eMath.max(f,g)||c\u003eMath.max(h,v)))if(c\u003cMath.min(h,v))l!\u003d\u003dp\u0026\u0026y++;else{if(c\u003d\u003d\u003d(d\u003dg\u003d\u003d\u003df?c:h+(l-f)*(v-h)/(g-f)))return 1!\u003d\u003du||!e;c\u003c\u003dd\u0026\u0026l!\u003d\u003dp\u0026\u0026y++}return y%2\u003d\u003d1},isRect:c,degenerate:u}},a.isSegmentBent\u003dfunction(t,e,r,i){var a,o,s,l\u003dt[e],c\u003d[t[r][0]-l[0],t[r][1]-l[1]],u\u003dn(c,c),f\u003dMath.sqrt(u),h\u003d[-c[1]/f,c[0]/f];for(a\u003de+1;a\u003cr;a++)if(o\u003d[t[a][0]-l[0],t[a][1]-l[1]],(s\u003dn(o,c))\u003c0||s\u003eu||Math.abs(n(o,h))\u003ei)return!0;return!1},a.filter\u003dfunction(t,e){var r\u003d[t[0]],n\u003d0,i\u003d0;function o(o){t.push(o);var s\u003dr.length,l\u003dn;r.splice(i+1);for(var c\u003dl+1;c\u003ct.length;c++)(c\u003d\u003d\u003dt.length-1||a.isSegmentBent(t,l,c+1,e))\u0026\u0026(r.push(t[c]),r.length\u003cs-2\u0026\u0026(n\u003dc,i\u003dr.length-1),l\u003dc)}t.length\u003e1\u0026\u0026o(t.pop());return{addPt:o,raw:t,filtered:r}}},{\"../constants/numerical\":775,\"./matrix\":805}],812:[function(t,e,r){(function(r){(function(){\"use strict\";var n\u003dt(\"./show_no_webgl_msg\"),i\u003dt(\"regl\");e.exports\u003dfunction(t,e){var a\u003dt._fullLayout,o\u003d!0;return a._glcanvas.each((function(n){if(!n.regl\u0026\u0026(!n.pick||a._has(\"parcoords\"))){try{n.regl\u003di({canvas:this,attributes:{antialias:!n.pick,preserveDrawingBuffer:!0},pixelRatio:t._context.plotGlPixelRatio||r.devicePixelRatio,extensions:e||[]})}catch(t){o\u003d!1}n.regl||(o\u003d!1),o\u0026\u0026this.addEventListener(\"webglcontextlost\",(function(e){t\u0026\u0026t.emit\u0026\u0026t.emit(\"plotly_webglcontextlost\",{event:e,layer:n.key})}),!1)}})),o||n({container:a._glcontainer.node()}),o}}).call(this)}).call(this,\"undefined\"!\u003dtypeof global?global:\"undefined\"!\u003dtypeof self?self:\"undefined\"!\u003dtypeof window?window:{})},{\"./show_no_webgl_msg\":821,regl:536}],813:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"is-mobile\");e.exports\u003dfunction(t){var e;if(\"string\"!\u003dtypeof(e\u003dt\u0026\u0026t.hasOwnProperty(\"userAgent\")?t.userAgent:function(){var t;\"undefined\"!\u003dtypeof navigator\u0026\u0026(t\u003dnavigator.userAgent);t\u0026\u0026t.headers\u0026\u0026\"string\"\u003d\u003dtypeof t.headers[\"user-agent\"]\u0026\u0026(t\u003dt.headers[\"user-agent\"]);return t}()))return!0;var r\u003di({ua:{headers:{\"user-agent\":e}},tablet:!0,featureDetect:!1});if(!r)for(var a\u003de.split(\" \"),o\u003d1;o\u003ca.length;o++){if(-1!\u003d\u003da[o].indexOf(\"Safari\"))for(var s\u003do-1;s\u003e-1;s--){var l\u003da[s];if(\"Version/\"\u003d\u003d\u003dl.substr(0,8)){var c\u003dl.substr(8).split(\".\")[0];if(n(c)\u0026\u0026(c\u003d+c),c\u003e\u003d13)return!0}}}return r}},{\"fast-isnumeric\":245,\"is-mobile\":451}],814:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){if(e instanceof RegExp){for(var r\u003de.toString(),n\u003d0;n\u003ct.length;n++)if(t[n]instanceof RegExp\u0026\u0026t[n].toString()\u003d\u003d\u003dr)return t;t.push(e)}else!e\u0026\u00260!\u003d\u003de||-1!\u003d\u003dt.indexOf(e)||t.push(e);return t}},{}],815:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plot_api/plot_config\").dfltConfig;var a\u003d{add:function(t,e,r,n,a){var o,s;t.undoQueue\u003dt.undoQueue||{index:0,queue:[],sequence:!1},s\u003dt.undoQueue.index,t.autoplay?t.undoQueue.inSequence||(t.autoplay\u003d!1):(!t.undoQueue.sequence||t.undoQueue.beginSequence?(o\u003d{undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+\u003d1):o\u003dt.undoQueue.queue[s-1],t.undoQueue.beginSequence\u003d!1,o\u0026\u0026(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(a)),t.undoQueue.queue.length\u003ei.queueLength\u0026\u0026(t.undoQueue.queue.shift(),t.undoQueue.index--))},startSequence:function(t){t.undoQueue\u003dt.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence\u003d!0,t.undoQueue.beginSequence\u003d!0},stopSequence:function(t){t.undoQueue\u003dt.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence\u003d!1,t.undoQueue.beginSequence\u003d!1},undo:function(t){var e,r;if(!(void 0\u003d\u003d\u003dt.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index\u003c\u003d0)){for(t.undoQueue.index--,e\u003dt.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence\u003d!0,r\u003d0;r\u003ce.undo.calls.length;r++)a.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence\u003d!1,t.autoplay\u003d!1}},redo:function(t){var e,r;if(!(void 0\u003d\u003d\u003dt.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index\u003e\u003dt.undoQueue.queue.length)){for(e\u003dt.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence\u003d!0,r\u003d0;r\u003ce.redo.calls.length;r++)a.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence\u003d!1,t.autoplay\u003d!1,t.undoQueue.index++}}};a.plotDo\u003dfunction(t,e,r){t.autoplay\u003d!0,r\u003dfunction(t,e){for(var r,i\u003d[],a\u003d0;a\u003ce.length;a++)r\u003de[a],i[a]\u003dr\u003d\u003d\u003dt?r:\"object\"\u003d\u003dtypeof r?Array.isArray(r)?n.extendDeep([],r):n.extendDeepAll({},r):r;return i}(t,r),e.apply(null,r)},e.exports\u003da},{\"../lib\":799,\"../plot_api/plot_config\":836}],816:[function(t,e,r){\"use strict\";r.counter\u003dfunction(t,e,r,n){var i\u003d(e||\"\")+(r?\"\":\"$\"),a\u003d!1\u003d\u003d\u003dn?\"\":\"^\";return\"xy\"\u003d\u003d\u003dt?new RegExp(a+\"x([2-9]|[1-9][0-9]+)?y([2-9]|[1-9][0-9]+)?\"+i):new RegExp(a+t+\"([2-9]|[1-9][0-9]+)?\"+i)}},{}],817:[function(t,e,r){\"use strict\";var n\u003d/^(.*)(\\.[^\\.\\[\\]]+|\\[\\d\\])$/,i\u003d/^[^\\.\\[\\]]+$/;e.exports\u003dfunction(t,e){for(;e;){var r\u003dt.match(n);if(r)t\u003dr[1];else{if(!t.match(i))throw new Error(\"bad relativeAttr call:\"+[t,e]);t\u003d\"\"}if(\"^\"!\u003d\u003de.charAt(0))break;e\u003de.slice(1)}return t\u0026\u0026\"[\"!\u003d\u003de.charAt(0)?t+\".\"+e:t+e}},{}],818:[function(t,e,r){\"use strict\";var n\u003dt(\"./array\").isArrayOrTypedArray,i\u003dt(\"./is_plain_object\");e.exports\u003dfunction t(e,r){for(var a in r){var o\u003dr[a],s\u003de[a];if(s!\u003d\u003do)if(\"_\"\u003d\u003d\u003da.charAt(0)||\"function\"\u003d\u003dtypeof o){if(a in e)continue;e[a]\u003do}else if(n(o)\u0026\u0026n(s)\u0026\u0026i(o[0])){if(\"customdata\"\u003d\u003d\u003da||\"ids\"\u003d\u003d\u003da)continue;for(var l\u003dMath.min(o.length,s.length),c\u003d0;c\u003cl;c++)s[c]!\u003d\u003do[c]\u0026\u0026i(o[c])\u0026\u0026i(s[c])\u0026\u0026t(s[c],o[c])}else i(o)\u0026\u0026i(s)\u0026\u0026(t(s,o),Object.keys(s).length||delete e[a])}}},{\"./array\":781,\"./is_plain_object\":800}],819:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"./loggers\"),a\u003dt(\"./identity\"),o\u003dt(\"../constants/numerical\").BADNUM;function s(t,e){return t\u003ce}function l(t,e){return t\u003c\u003de}function c(t,e){return t\u003ee}function u(t,e){return t\u003e\u003de}r.findBin\u003dfunction(t,e,r){if(n(e.start))return r?Math.ceil((t-e.start)/e.size-1e-9)-1:Math.floor((t-e.start)/e.size+1e-9);var a,o,f\u003d0,h\u003de.length,p\u003d0,d\u003dh\u003e1?(e[h-1]-e[0])/(h-1):1;for(o\u003dd\u003e\u003d0?r?s:l:r?u:c,t+\u003d1e-9*d*(r?-1:1)*(d\u003e\u003d0?1:-1);f\u003ch\u0026\u0026p++\u003c100;)o(e[a\u003dMath.floor((f+h)/2)],t)?f\u003da+1:h\u003da;return p\u003e90\u0026\u0026i.log(\"Long binary search...\"),f-1},r.sorterAsc\u003dfunction(t,e){return t-e},r.sorterDes\u003dfunction(t,e){return e-t},r.distinctVals\u003dfunction(t){var e,n\u003dt.slice();for(n.sort(r.sorterAsc),e\u003dn.length-1;e\u003e-1\u0026\u0026n[e]\u003d\u003d\u003do;e--);for(var i,a\u003dn[e]-n[0]||1,s\u003da/(e||1)/1e4,l\u003d[],c\u003d0;c\u003c\u003de;c++){var u\u003dn[c],f\u003du-i;void 0\u003d\u003d\u003di?(l.push(u),i\u003du):f\u003es\u0026\u0026(a\u003dMath.min(a,f),l.push(u),i\u003du)}return{vals:l,minDiff:a}},r.roundUp\u003dfunction(t,e,r){for(var n,i\u003d0,a\u003de.length-1,o\u003d0,s\u003dr?0:1,l\u003dr?1:0,c\u003dr?Math.ceil:Math.floor;i\u003ca\u0026\u0026o++\u003c100;)e[n\u003dc((i+a)/2)]\u003c\u003dt?i\u003dn+s:a\u003dn-l;return e[i]},r.sort\u003dfunction(t,e){for(var r\u003d0,n\u003d0,i\u003d1;i\u003ct.length;i++){var a\u003de(t[i],t[i-1]);if(a\u003c0?r\u003d1:a\u003e0\u0026\u0026(n\u003d1),r\u0026\u0026n)return t.sort(e)}return n?t:t.reverse()},r.findIndexOfMin\u003dfunction(t,e){e\u003de||a;for(var r,n\u003d1/0,i\u003d0;i\u003ct.length;i++){var o\u003de(t[i]);o\u003cn\u0026\u0026(n\u003do,r\u003di)}return r}},{\"../constants/numerical\":775,\"./identity\":797,\"./loggers\":803,\"fast-isnumeric\":245}],820:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){(t.attr(\"class\")||\"\").split(\" \").forEach((function(e){0\u003d\u003d\u003de.indexOf(\"cursor-\")\u0026\u0026t.classed(e,!1)})),e\u0026\u0026t.classed(\"cursor-\"+e,!0)}},{}],821:[function(t,e,r){\"use strict\";var n\u003dt(\"../components/color\"),i\u003dfunction(){};e.exports\u003dfunction(t){for(var e in t)\"function\"\u003d\u003dtypeof t[e]\u0026\u0026(t[e]\u003di);t.destroy\u003dfunction(){t.container.parentNode.removeChild(t.container)};var r\u003ddocument.createElement(\"div\");r.className\u003d\"no-webgl\",r.style.cursor\u003d\"pointer\",r.style.fontSize\u003d\"24px\",r.style.color\u003dn.defaults[0],r.style.position\u003d\"absolute\",r.style.left\u003dr.style.top\u003d\"0px\",r.style.width\u003dr.style.height\u003d\"100%\",r.style[\"background-color\"]\u003dn.lightLine,r.style[\"z-index\"]\u003d30;var a\u003ddocument.createElement(\"p\");return a.textContent\u003d\"WebGL is not supported by your browser - visit https://get.webgl.org for more info\",a.style.position\u003d\"relative\",a.style.top\u003d\"50%\",a.style.left\u003d\"50%\",a.style.height\u003d\"30%\",a.style.width\u003d\"50%\",a.style.margin\u003d\"-15% 0 0 -25%\",r.appendChild(a),t.container.appendChild(r),t.container.style.background\u003d\"#FFFFFF\",t.container.onclick\u003dfunction(){window.open(\"https://get.webgl.org\")},!1}},{\"../components/color\":662}],822:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"./array\").isArrayOrTypedArray;r.aggNums\u003dfunction(t,e,a,o){var s,l;if((!o||o\u003ea.length)\u0026\u0026(o\u003da.length),n(e)||(e\u003d!1),i(a[0])){for(l\u003dnew Array(o),s\u003d0;s\u003co;s++)l[s]\u003dr.aggNums(t,e,a[s]);a\u003dl}for(s\u003d0;s\u003co;s++)n(e)?n(a[s])\u0026\u0026(e\u003dt(+e,+a[s])):e\u003da[s];return e},r.len\u003dfunction(t){return r.aggNums((function(t){return t+1}),0,t)},r.mean\u003dfunction(t,e){return e||(e\u003dr.len(t)),r.aggNums((function(t,e){return t+e}),0,t)/e},r.midRange\u003dfunction(t){if(void 0!\u003d\u003dt\u0026\u00260!\u003d\u003dt.length)return(r.aggNums(Math.max,null,t)+r.aggNums(Math.min,null,t))/2},r.variance\u003dfunction(t,e,i){return e||(e\u003dr.len(t)),n(i)||(i\u003dr.mean(t,e)),r.aggNums((function(t,e){return t+Math.pow(e-i,2)}),0,t)/e},r.stdev\u003dfunction(t,e,n){return Math.sqrt(r.variance(t,e,n))},r.median\u003dfunction(t){var e\u003dt.slice().sort();return r.interp(e,.5)},r.interp\u003dfunction(t,e){if(!n(e))throw\"n should be a finite number\";if((e\u003de*t.length-.5)\u003c0)return t[0];if(e\u003et.length-1)return t[t.length-1];var r\u003de%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},{\"./array\":781,\"fast-isnumeric\":245}],823:[function(t,e,r){\"use strict\";var n\u003dt(\"color-normalize\");e.exports\u003dfunction(t){return t?n(t):[0,0,0,1]}},{\"color-normalize\":131}],824:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../lib\"),a\u003di.strTranslate,o\u003dt(\"../constants/xmlns_namespaces\"),s\u003dt(\"../constants/alignment\").LINE_SPACING;function l(t,e){return t.node().getBoundingClientRect()[e]}var c\u003d/([^$]*)([$]+[^$]*[$]+)([^$]*)/;r.convertToTspans\u003dfunction(t,e,A){var S\u003dt.text(),L\u003d!t.attr(\"data-notex\")\u0026\u0026\"undefined\"!\u003dtypeof MathJax\u0026\u0026S.match(c),C\u003dn.select(t.node().parentNode);if(!C.empty()){var P\u003dt.attr(\"class\")?t.attr(\"class\").split(\" \")[0]:\"text\";return P+\u003d\"-math\",C.selectAll(\"svg.\"+P).remove(),C.selectAll(\"g.\"+P+\"-group\").remove(),t.style(\"display\",null).attr({\"data-unformatted\":S,\"data-math\":\"N\"}),L?(e\u0026\u0026e._promises||[]).push(new Promise((function(e){t.style(\"display\",\"none\");var r\u003dparseInt(t.node().style.fontSize,10),o\u003d{fontSize:r};!function(t,e,r){var a,o,s,l;MathJax.Hub.Queue((function(){return o\u003di.extendDeepAll({},MathJax.Hub.config),s\u003dMathJax.Hub.processSectionDelay,void 0!\u003d\u003dMathJax.Hub.processSectionDelay\u0026\u0026(MathJax.Hub.processSectionDelay\u003d0),MathJax.Hub.Config({messageStyle:\"none\",tex2jax:{inlineMath:[[\"$\",\"$\"],[\"\\\\(\",\"\\\\)\"]]},displayAlign:\"left\"})}),(function(){if(\"SVG\"!\u003d\u003d(a\u003dMathJax.Hub.config.menuSettings.renderer))return MathJax.Hub.setRenderer(\"SVG\")}),(function(){var r\u003d\"math-output-\"+i.randstr({},64);return l\u003dn.select(\"body\").append(\"div\").attr({id:r}).style({visibility:\"hidden\",position:\"absolute\"}).style({\"font-size\":e.fontSize+\"px\"}).text(t.replace(u,\"\\\\lt \").replace(f,\"\\\\gt \")),MathJax.Hub.Typeset(l.node())}),(function(){var e\u003dn.select(\"body\").select(\"#MathJax_SVG_glyphs\");if(l.select(\".MathJax_SVG\").empty()||!l.select(\"svg\").node())i.log(\"There was an error in the tex syntax.\",t),r();else{var o\u003dl.select(\"svg\").node().getBoundingClientRect();r(l.select(\".MathJax_SVG\"),e,o)}if(l.remove(),\"SVG\"!\u003d\u003da)return MathJax.Hub.setRenderer(a)}),(function(){return void 0!\u003d\u003ds\u0026\u0026(MathJax.Hub.processSectionDelay\u003ds),MathJax.Hub.Config(o)}))}(L[2],o,(function(n,i,o){C.selectAll(\"svg.\"+P).remove(),C.selectAll(\"g.\"+P+\"-group\").remove();var s\u003dn\u0026\u0026n.select(\"svg\");if(!s||!s.node())return I(),void e();var c\u003dC.append(\"g\").classed(P+\"-group\",!0).attr({\"pointer-events\":\"none\",\"data-unformatted\":S,\"data-math\":\"Y\"});c.node().appendChild(s.node()),i\u0026\u0026i.node()\u0026\u0026s.node().insertBefore(i.node().cloneNode(!0),s.node().firstChild),s.attr({class:P,height:o.height,preserveAspectRatio:\"xMinYMin meet\"}).style({overflow:\"visible\",\"pointer-events\":\"none\"});var u\u003dt.node().style.fill||\"black\",f\u003ds.select(\"g\");f.attr({fill:u,stroke:u});var h\u003dl(f,\"width\"),p\u003dl(f,\"height\"),d\u003d+t.attr(\"x\")-h*{start:0,middle:.5,end:1}[t.attr(\"text-anchor\")||\"start\"],m\u003d-(r||l(t,\"height\"))/4;\"y\"\u003d\u003d\u003dP[0]?(c.attr({transform:\"rotate(\"+[-90,+t.attr(\"x\"),+t.attr(\"y\")]+\")\"+a(-h/2,m-p/2)}),s.attr({x:+t.attr(\"x\"),y:+t.attr(\"y\")})):\"l\"\u003d\u003d\u003dP[0]?s.attr({x:t.attr(\"x\"),y:m-p/2}):\"a\"\u003d\u003d\u003dP[0]\u0026\u00260!\u003d\u003dP.indexOf(\"atitle\")?s.attr({x:0,y:m}):s.attr({x:d,y:+t.attr(\"y\")+m-p/2}),A\u0026\u0026A.call(t,c),e(c)}))}))):I(),t}function I(){C.empty()||(P\u003dt.attr(\"class\")+\"-math\",C.select(\"svg.\"+P).remove()),t.text(\"\").style(\"white-space\",\"pre\"),function(t,e){e\u003de.replace(g,\" \");var r,a\u003d!1,l\u003d[],c\u003d-1;function u(){c++;var e\u003ddocument.createElementNS(o.svg,\"tspan\");n.select(e).attr({class:\"line\",dy:c*s+\"em\"}),t.appendChild(e),r\u003de;var i\u003dl;if(l\u003d[{node:e}],i.length\u003e1)for(var a\u003d1;a\u003ci.length;a++)f(i[a])}function f(t){var e,i\u003dt.type,a\u003d{};if(\"a\"\u003d\u003d\u003di){e\u003d\"a\";var s\u003dt.target,c\u003dt.href,u\u003dt.popup;c\u0026\u0026(a\u003d{\"xlink:xlink:show\":\"_blank\"\u003d\u003d\u003ds||\"_\"!\u003d\u003ds.charAt(0)?\"new\":\"replace\",target:s,\"xlink:xlink:href\":c},u\u0026\u0026(a.onclick\u003d\u0027window.open(this.href.baseVal,this.target.baseVal,\"\u0027+u+\u0027\");return false;\u0027))}else e\u003d\"tspan\";t.style\u0026\u0026(a.style\u003dt.style);var f\u003ddocument.createElementNS(o.svg,e);if(\"sup\"\u003d\u003d\u003di||\"sub\"\u003d\u003d\u003di){A(r,\"\\u200b\"),r.appendChild(f);var h\u003ddocument.createElementNS(o.svg,\"tspan\");A(h,\"\\u200b\"),n.select(h).attr(\"dy\",d[i]),a.dy\u003dp[i],r.appendChild(f),r.appendChild(h)}else r.appendChild(f);n.select(f).attr(a),r\u003dt.node\u003df,l.push(t)}function A(t,e){t.appendChild(document.createTextNode(e))}function S(t){if(1!\u003d\u003dl.length){var n\u003dl.pop();t!\u003d\u003dn.type\u0026\u0026i.log(\"Start tag \u003c\"+n.type+\"\u003e doesnt match end tag \u003c\"+t+\"\u003e. Pretending it did match.\",e),r\u003dl[l.length-1].node}else i.log(\"Ignoring unexpected end tag \u003c/\"+t+\"\u003e.\",e)}x.test(e)?u():(r\u003dt,l\u003d[{node:t}]);for(var L\u003de.split(v),C\u003d0;C\u003cL.length;C++){var P\u003dL[C],I\u003dP.match(y),O\u003dI\u0026\u0026I[2].toLowerCase(),z\u003dh[O];if(\"br\"\u003d\u003d\u003dO)u();else if(void 0\u003d\u003d\u003dz)A(r,E(P));else if(I[1])S(O);else{var D\u003dI[4],R\u003d{type:O},F\u003dk(D,b);if(F?(F\u003dF.replace(M,\"$1 fill:\"),z\u0026\u0026(F+\u003d\";\"+z)):z\u0026\u0026(F\u003dz),F\u0026\u0026(R.style\u003dF),\"a\"\u003d\u003d\u003dO){a\u003d!0;var B\u003dk(D,_);if(B){var N\u003ddocument.createElement(\"a\");N.href\u003dB,-1!\u003d\u003dm.indexOf(N.protocol)\u0026\u0026(R.href\u003dencodeURI(decodeURI(B)),R.target\u003dk(D,w)||\"_blank\",R.popup\u003dk(D,T))}}f(R)}}return a}(t.node(),S)\u0026\u0026t.style(\"pointer-events\",\"all\"),r.positionText(t),A\u0026\u0026A.call(t)}};var u\u003d/(\u003c|\u0026lt;|\u0026#60;)/g,f\u003d/(\u003e|\u0026gt;|\u0026#62;)/g;var h\u003d{sup:\"font-size:70%\",sub:\"font-size:70%\",b:\"font-weight:bold\",i:\"font-style:italic\",a:\"cursor:pointer\",span:\"\",em:\"font-style:italic;font-weight:bold\"},p\u003d{sub:\"0.3em\",sup:\"-0.6em\"},d\u003d{sub:\"-0.21em\",sup:\"0.42em\"},m\u003d[\"http:\",\"https:\",\"mailto:\",\"\",void 0,\":\"],g\u003dr.NEWLINES\u003d/(\\r\\n?|\\n)/g,v\u003d/(\u003c[^\u003c\u003e]*\u003e)/,y\u003d/\u003c(\\/?)([^ \u003e]*)(\\s+(.*))?\u003e/i,x\u003d/\u003cbr(\\s+.*)?\u003e/i;r.BR_TAG_ALL\u003d/\u003cbr(\\s+.*)?\u003e/gi;var b\u003d/(^|[\\s\"\u0027])style\\s*\u003d\\s*(\"([^\"]*);?\"|\u0027([^\u0027]*);?\u0027)/i,_\u003d/(^|[\\s\"\u0027])href\\s*\u003d\\s*(\"([^\"]*)\"|\u0027([^\u0027]*)\u0027)/i,w\u003d/(^|[\\s\"\u0027])target\\s*\u003d\\s*(\"([^\"\\s]*)\"|\u0027([^\u0027\\s]*)\u0027)/i,T\u003d/(^|[\\s\"\u0027])popup\\s*\u003d\\s*(\"([\\w\u003d,]*)\"|\u0027([\\w\u003d,]*)\u0027)/i;function k(t,e){if(!t)return null;var r\u003dt.match(e),n\u003dr\u0026\u0026(r[3]||r[4]);return n\u0026\u0026E(n)}var M\u003d/(^|;)\\s*color:/;r.plainText\u003dfunction(t,e){for(var r\u003dvoid 0!\u003d\u003d(e\u003de||{}).len\u0026\u0026-1!\u003d\u003de.len?e.len:1/0,n\u003dvoid 0!\u003d\u003de.allowedTags?e.allowedTags:[\"br\"],i\u003d\"...\".length,a\u003dt.split(v),o\u003d[],s\u003d\"\",l\u003d0,c\u003d0;c\u003ca.length;c++){var u\u003da[c],f\u003du.match(y),h\u003df\u0026\u0026f[2].toLowerCase();if(h)-1!\u003d\u003dn.indexOf(h)\u0026\u0026(o.push(u),s\u003dh);else{var p\u003du.length;if(l+p\u003cr)o.push(u),l+\u003dp;else if(l\u003cr){var d\u003dr-l;s\u0026\u0026(\"br\"!\u003d\u003ds||d\u003c\u003di||p\u003c\u003di)\u0026\u0026o.pop(),r\u003ei?o.push(u.substr(0,d-i)+\"...\"):o.push(u.substr(0,d));break}s\u003d\"\"}}return o.join(\"\")};var A\u003d{mu:\"\\u03bc\",amp:\"\u0026\",lt:\"\u003c\",gt:\"\u003e\",nbsp:\"\\xa0\",times:\"\\xd7\",plusmn:\"\\xb1\",deg:\"\\xb0\"},S\u003d/\u0026(#\\d+|#x[\\da-fA-F]+|[a-z]+);/g;function E(t){return t.replace(S,(function(t,e){return(\"#\"\u003d\u003d\u003de.charAt(0)?function(t){if(t\u003e1114111)return;var e\u003dString.fromCodePoint;if(e)return e(t);var r\u003dString.fromCharCode;return t\u003c\u003d65535?r(t):r(55232+(t\u003e\u003e10),t%1024+56320)}(\"x\"\u003d\u003d\u003de.charAt(1)?parseInt(e.substr(2),16):parseInt(e.substr(1),10)):A[e])||t}))}function L(t,e,r){var n,a,o,s\u003dr.horizontalAlign,l\u003dr.verticalAlign||\"top\",c\u003dt.node().getBoundingClientRect(),u\u003de.node().getBoundingClientRect();return a\u003d\"bottom\"\u003d\u003d\u003dl?function(){return c.bottom-n.height}:\"middle\"\u003d\u003d\u003dl?function(){return c.top+(c.height-n.height)/2}:function(){return c.top},o\u003d\"right\"\u003d\u003d\u003ds?function(){return c.right-n.width}:\"center\"\u003d\u003d\u003ds?function(){return c.left+(c.width-n.width)/2}:function(){return c.left},function(){n\u003dthis.node().getBoundingClientRect();var t\u003do()-u.left,e\u003da()-u.top,s\u003dr.gd||{};if(r.gd){s._fullLayout._calcInverseTransform(s);var l\u003di.apply3DTransform(s._fullLayout._invTransform)(t,e);t\u003dl[0],e\u003dl[1]}return this.style({top:e+\"px\",left:t+\"px\",\"z-index\":1e3}),this}}r.convertEntities\u003dE,r.sanitizeHTML\u003dfunction(t){t\u003dt.replace(g,\" \");for(var e\u003ddocument.createElement(\"p\"),r\u003de,i\u003d[],a\u003dt.split(v),o\u003d0;o\u003ca.length;o++){var s\u003da[o],l\u003ds.match(y),c\u003dl\u0026\u0026l[2].toLowerCase();if(c in h)if(l[1])i.length\u0026\u0026(r\u003di.pop());else{var u\u003dl[4],f\u003dk(u,b),p\u003df?{style:f}:{};if(\"a\"\u003d\u003d\u003dc){var d\u003dk(u,_);if(d){var x\u003ddocument.createElement(\"a\");if(x.href\u003dd,-1!\u003d\u003dm.indexOf(x.protocol)){p.href\u003dencodeURI(decodeURI(d));var T\u003dk(u,w);T\u0026\u0026(p.target\u003dT)}}}var M\u003ddocument.createElement(c);r.appendChild(M),n.select(M).attr(p),r\u003dM,i.push(M)}else r.appendChild(document.createTextNode(E(s)))}return e.innerHTML},r.lineCount\u003dfunction(t){return t.selectAll(\"tspan.line\").size()||1},r.positionText\u003dfunction(t,e,r){return t.each((function(){var t\u003dn.select(this);function i(e,r){return void 0\u003d\u003d\u003dr?null\u003d\u003d\u003d(r\u003dt.attr(e))\u0026\u0026(t.attr(e,0),r\u003d0):t.attr(e,r),r}var a\u003di(\"x\",e),o\u003di(\"y\",r);\"text\"\u003d\u003d\u003dthis.nodeName\u0026\u0026t.selectAll(\"tspan.line\").attr({x:a,y:o})}))};r.makeTextShadow\u003dfunction(t){var e\u003d\"1px \",r\u003d\"1px \",n\u003d\"1px \";return e+r+n+t+\", -\"+e+\"-\"+r+n+t+\", \"+e+\"-\"+r+n+t+\", -\"+e+r+n+t},r.makeEditable\u003dfunction(t,e){var r\u003de.gd,i\u003de.delegate,a\u003dn.dispatch(\"edit\",\"input\",\"cancel\"),o\u003di||t;if(t.style({\"pointer-events\":i?\"none\":\"all\"}),1!\u003d\u003dt.size())throw new Error(\"boo\");function s(){!function(){var i\u003dn.select(r).select(\".svg-container\"),o\u003di.append(\"div\"),s\u003dt.node().style,c\u003dparseFloat(s.fontSize||12),u\u003de.text;void 0\u003d\u003d\u003du\u0026\u0026(u\u003dt.attr(\"data-unformatted\"));o.classed(\"plugin-editable editable\",!0).style({position:\"absolute\",\"font-family\":s.fontFamily||\"Arial\",\"font-size\":c,color:e.fill||s.fill||\"black\",opacity:1,\"background-color\":e.background||\"transparent\",outline:\"#ffffff33 1px solid\",margin:[-c/8+1,0,0,-1].join(\"px \")+\"px\",padding:\"0\",\"box-sizing\":\"border-box\"}).attr({contenteditable:!0}).text(u).call(L(t,i,e)).on(\"blur\",(function(){r._editing\u003d!1,t.text(this.textContent).style({opacity:1});var e,i\u003dn.select(this).attr(\"class\");(e\u003di?\".\"+i.split(\" \")[0]+\"-math-group\":\"[class*\u003d-math-group]\")\u0026\u0026n.select(t.node().parentNode).select(e).style({opacity:0});var o\u003dthis.textContent;n.select(this).transition().duration(0).remove(),n.select(document).on(\"mouseup\",null),a.edit.call(t,o)})).on(\"focus\",(function(){var t\u003dthis;r._editing\u003d!0,n.select(document).on(\"mouseup\",(function(){if(n.event.target\u003d\u003d\u003dt)return!1;document.activeElement\u003d\u003d\u003do.node()\u0026\u0026o.node().blur()}))})).on(\"keyup\",(function(){27\u003d\u003d\u003dn.event.which?(r._editing\u003d!1,t.style({opacity:1}),n.select(this).style({opacity:0}).on(\"blur\",(function(){return!1})).transition().remove(),a.cancel.call(t,this.textContent)):(a.input.call(t,this.textContent),n.select(this).call(L(t,i,e)))})).on(\"keydown\",(function(){13\u003d\u003d\u003dn.event.which\u0026\u0026this.blur()})).call(l)}(),t.style({opacity:0});var i,s\u003do.attr(\"class\");(i\u003ds?\".\"+s.split(\" \")[0]+\"-math-group\":\"[class*\u003d-math-group]\")\u0026\u0026n.select(t.node().parentNode).select(i).style({opacity:0})}function l(t){var e\u003dt.node(),r\u003ddocument.createRange();r.selectNodeContents(e);var n\u003dwindow.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}return e.immediate?s():o.on(\"click\",s),n.rebind(t,a,\"on\")}},{\"../constants/alignment\":767,\"../constants/xmlns_namespaces\":776,\"../lib\":799,\"@plotly/d3\":58}],825:[function(t,e,r){\"use strict\";var n\u003d{};function i(t){t\u0026\u0026null!\u003d\u003dt.timer\u0026\u0026(clearTimeout(t.timer),t.timer\u003dnull)}r.throttle\u003dfunction(t,e,r){var a\u003dn[t],o\u003dDate.now();if(!a){for(var s in n)n[s].ts\u003co-6e4\u0026\u0026delete n[s];a\u003dn[t]\u003d{ts:0,timer:null}}function l(){r(),a.ts\u003dDate.now(),a.onDone\u0026\u0026(a.onDone(),a.onDone\u003dnull)}i(a),o\u003ea.ts+e?l():a.timer\u003dsetTimeout((function(){l(),a.timer\u003dnull}),e)},r.done\u003dfunction(t){var e\u003dn[t];return e\u0026\u0026e.timer?new Promise((function(t){var r\u003de.onDone;e.onDone\u003dfunction(){r\u0026\u0026r(),t(),e.onDone\u003dnull}})):Promise.resolve()},r.clear\u003dfunction(t){if(t)i(n[t]),delete n[t];else for(var e in n)r.clear(e)}},{}],826:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\");e.exports\u003dfunction(t,e){if(t\u003e0)return Math.log(t)/Math.LN10;var r\u003dMath.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r\u003dMath.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},{\"fast-isnumeric\":245}],827:[function(t,e,r){\"use strict\";var n\u003de.exports\u003d{},i\u003dt(\"../plots/geo/constants\").locationmodeToLayer,a\u003dt(\"topojson-client\").feature;n.getTopojsonName\u003dfunction(t){return[t.scope.replace(/ /g,\"-\"),\"_\",t.resolution.toString(),\"m\"].join(\"\")},n.getTopojsonPath\u003dfunction(t,e){return t+e+\".json\"},n.getTopojsonFeatures\u003dfunction(t,e){var r\u003di[t.locationmode],n\u003de.objects[r];return a(e,n).features}},{\"../plots/geo/constants\":880,\"topojson-client\":597}],828:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"locale\",name:\"en-US\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colorscale title\"},format:{date:\"%m/%d/%Y\"}}},{}],829:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"locale\",name:\"en\",dictionary:{\"Click to enter Colorscale title\":\"Click to enter Colourscale title\"},format:{days:[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],shortDays:[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],months:[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],shortMonths:[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"],periods:[\"AM\",\"PM\"],dateTime:\"%a %b %e %X %Y\",date:\"%d/%m/%Y\",time:\"%H:%M:%S\",decimal:\".\",thousands:\",\",grouping:[3],currency:[\"$\",\"\"],year:\"%Y\",month:\"%b %Y\",dayMonth:\"%b %-d\",dayMonthYear:\"%b %-d, %Y\"}}},{}],830:[function(t,e,r){\"use strict\";var n\u003dt(\"../registry\");e.exports\u003dfunction(t){for(var e,r,i\u003dn.layoutArrayContainers,a\u003dn.layoutArrayRegexes,o\u003dt.split(\"[\")[0],s\u003d0;s\u003ca.length;s++)if((r\u003dt.match(a[s]))\u0026\u00260\u003d\u003d\u003dr.index){e\u003dr[0];break}if(e||(e\u003di[i.indexOf(o)]),!e)return!1;var l\u003dt.substr(e.length);return l?!!(r\u003dl.match(/^\\[(0|[1-9][0-9]*)\\](\\.(.+))?$/))\u0026\u0026{array:e,index:Number(r[1]),property:r[3]||\"\"}:{array:e,index:\"\",property:\"\"}}},{\"../registry\":927}],831:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dn.extendFlat,a\u003dn.isPlainObject,o\u003d{valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"clearAxisTypes\",\"plot\",\"style\",\"markerSize\",\"colorbars\"]},s\u003d{valType:\"flaglist\",extras:[\"none\"],flags:[\"calc\",\"plot\",\"legend\",\"ticks\",\"axrange\",\"layoutstyle\",\"modebar\",\"camera\",\"arraydraw\",\"colorbars\"]},l\u003do.flags.slice().concat([\"fullReplot\"]),c\u003ds.flags.slice().concat(\"layoutReplot\");function u(t){for(var e\u003d{},r\u003d0;r\u003ct.length;r++)e[t[r]]\u003d!1;return e}function f(t,e,r){var n\u003di({},t);for(var o in n){var s\u003dn[o];a(s)\u0026\u0026(n[o]\u003dh(s,e,r,o))}return\"from-root\"\u003d\u003d\u003dr\u0026\u0026(n.editType\u003de),n}function h(t,e,r,n){if(t.valType){var a\u003di({},t);if(a.editType\u003de,Array.isArray(t.items)){a.items\u003dnew Array(t.items.length);for(var o\u003d0;o\u003ct.items.length;o++)a.items[o]\u003dh(t.items[o],e,\"from-root\")}return a}return f(t,e,\"_\"\u003d\u003d\u003dn.charAt(0)?\"nested\":\"from-root\")}e.exports\u003d{traces:o,layout:s,traceFlags:function(){return u(l)},layoutFlags:function(){return u(c)},update:function(t,e){var r\u003de.editType;if(r\u0026\u0026\"none\"!\u003d\u003dr)for(var n\u003dr.split(\"+\"),i\u003d0;i\u003cn.length;i++)t[n[i]]\u003d!0},overrideAll:f}},{\"../lib\":799}],832:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"gl-mat4/fromQuat\"),a\u003dt(\"../registry\"),o\u003dt(\"../lib\"),s\u003dt(\"../plots/plots\"),l\u003dt(\"../plots/cartesian/axis_ids\"),c\u003dt(\"../components/color\"),u\u003dl.cleanId,f\u003dl.getFromTrace,h\u003da.traceIs;function p(t,e){var r\u003dt[e],n\u003de.charAt(0);r\u0026\u0026\"paper\"!\u003d\u003dr\u0026\u0026(t[e]\u003du(r,n,!0))}function d(t){function e(e,r){var n\u003dt[e],i\u003dt.title\u0026\u0026t.title[r];n\u0026\u0026!i\u0026\u0026(t.title||(t.title\u003d{}),t.title[r]\u003dt[e],delete t[e])}t\u0026\u0026(\"string\"!\u003dtypeof t.title\u0026\u0026\"number\"!\u003dtypeof t.title||(t.title\u003d{text:t.title}),e(\"titlefont\",\"font\"),e(\"titleposition\",\"position\"),e(\"titleside\",\"side\"),e(\"titleoffset\",\"offset\"))}function m(t){if(!o.isPlainObject(t))return!1;var e\u003dt.name;return delete t.name,delete t.showlegend,(\"string\"\u003d\u003dtypeof e||\"number\"\u003d\u003dtypeof e)\u0026\u0026String(e)}function g(t,e,r,n){if(r\u0026\u0026!n)return t;if(n\u0026\u0026!r)return e;if(!t.trim())return e;if(!e.trim())return t;var i,a\u003dMath.min(t.length,e.length);for(i\u003d0;i\u003ca\u0026\u0026t.charAt(i)\u003d\u003d\u003de.charAt(i);i++);return t.substr(0,i).trim()}function v(t){var e\u003d\"middle\",r\u003d\"center\";return\"string\"\u003d\u003dtypeof t\u0026\u0026(-1!\u003d\u003dt.indexOf(\"top\")?e\u003d\"top\":-1!\u003d\u003dt.indexOf(\"bottom\")\u0026\u0026(e\u003d\"bottom\"),-1!\u003d\u003dt.indexOf(\"left\")?r\u003d\"left\":-1!\u003d\u003dt.indexOf(\"right\")\u0026\u0026(r\u003d\"right\")),e+\" \"+r}function y(t,e){return e in t\u0026\u0026\"object\"\u003d\u003dtypeof t[e]\u0026\u00260\u003d\u003d\u003dObject.keys(t[e]).length}r.clearPromiseQueue\u003dfunction(t){Array.isArray(t._promises)\u0026\u0026t._promises.length\u003e0\u0026\u0026o.log(\"Clearing previous rejected promises from queue.\"),t._promises\u003d[]},r.cleanLayout\u003dfunction(t){var e,n;t||(t\u003d{}),t.xaxis1\u0026\u0026(t.xaxis||(t.xaxis\u003dt.xaxis1),delete t.xaxis1),t.yaxis1\u0026\u0026(t.yaxis||(t.yaxis\u003dt.yaxis1),delete t.yaxis1),t.scene1\u0026\u0026(t.scene||(t.scene\u003dt.scene1),delete t.scene1);var a\u003d(s.subplotsRegistry.cartesian||{}).attrRegex,l\u003d(s.subplotsRegistry.polar||{}).attrRegex,f\u003d(s.subplotsRegistry.ternary||{}).attrRegex,h\u003d(s.subplotsRegistry.gl3d||{}).attrRegex,m\u003dObject.keys(t);for(e\u003d0;e\u003cm.length;e++){var g\u003dm[e];if(a\u0026\u0026a.test(g)){var v\u003dt[g];v.anchor\u0026\u0026\"free\"!\u003d\u003dv.anchor\u0026\u0026(v.anchor\u003du(v.anchor)),v.overlaying\u0026\u0026(v.overlaying\u003du(v.overlaying)),v.type||(v.isdate?v.type\u003d\"date\":v.islog?v.type\u003d\"log\":!1\u003d\u003d\u003dv.isdate\u0026\u0026!1\u003d\u003d\u003dv.islog\u0026\u0026(v.type\u003d\"linear\")),\"withzero\"!\u003d\u003dv.autorange\u0026\u0026\"tozero\"!\u003d\u003dv.autorange||(v.autorange\u003d!0,v.rangemode\u003d\"tozero\"),delete v.islog,delete v.isdate,delete v.categories,y(v,\"domain\")\u0026\u0026delete v.domain,void 0!\u003d\u003dv.autotick\u0026\u0026(void 0\u003d\u003d\u003dv.tickmode\u0026\u0026(v.tickmode\u003dv.autotick?\"auto\":\"linear\"),delete v.autotick),d(v)}else if(l\u0026\u0026l.test(g)){d(t[g].radialaxis)}else if(f\u0026\u0026f.test(g)){var x\u003dt[g];d(x.aaxis),d(x.baxis),d(x.caxis)}else if(h\u0026\u0026h.test(g)){var b\u003dt[g],_\u003db.cameraposition;if(Array.isArray(_)\u0026\u00264\u003d\u003d\u003d_[0].length){var w\u003d_[0],T\u003d_[1],k\u003d_[2],M\u003di([],w),A\u003d[];for(n\u003d0;n\u003c3;++n)A[n]\u003dT[n]+k*M[2+4*n];b.camera\u003d{eye:{x:A[0],y:A[1],z:A[2]},center:{x:T[0],y:T[1],z:T[2]},up:{x:0,y:0,z:1}},delete b.cameraposition}d(b.xaxis),d(b.yaxis),d(b.zaxis)}}var S\u003dArray.isArray(t.annotations)?t.annotations.length:0;for(e\u003d0;e\u003cS;e++){var E\u003dt.annotations[e];o.isPlainObject(E)\u0026\u0026(E.ref\u0026\u0026(\"paper\"\u003d\u003d\u003dE.ref?(E.xref\u003d\"paper\",E.yref\u003d\"paper\"):\"data\"\u003d\u003d\u003dE.ref\u0026\u0026(E.xref\u003d\"x\",E.yref\u003d\"y\"),delete E.ref),p(E,\"xref\"),p(E,\"yref\"))}var L\u003dArray.isArray(t.shapes)?t.shapes.length:0;for(e\u003d0;e\u003cL;e++){var C\u003dt.shapes[e];o.isPlainObject(C)\u0026\u0026(p(C,\"xref\"),p(C,\"yref\"))}var P\u003dArray.isArray(t.images)?t.images.length:0;for(e\u003d0;e\u003cP;e++){var I\u003dt.images[e];o.isPlainObject(I)\u0026\u0026(p(I,\"xref\"),p(I,\"yref\"))}var O\u003dt.legend;return O\u0026\u0026(O.x\u003e3?(O.x\u003d1.02,O.xanchor\u003d\"left\"):O.x\u003c-2\u0026\u0026(O.x\u003d-.02,O.xanchor\u003d\"right\"),O.y\u003e3?(O.y\u003d1.02,O.yanchor\u003d\"bottom\"):O.y\u003c-2\u0026\u0026(O.y\u003d-.02,O.yanchor\u003d\"top\")),d(t),\"rotate\"\u003d\u003d\u003dt.dragmode\u0026\u0026(t.dragmode\u003d\"orbit\"),c.clean(t),t.template\u0026\u0026t.template.layout\u0026\u0026r.cleanLayout(t.template.layout),t},r.cleanData\u003dfunction(t){for(var e\u003d0;e\u003ct.length;e++){var n,i\u003dt[e];if(\"histogramy\"\u003d\u003d\u003di.type\u0026\u0026\"xbins\"in i\u0026\u0026!(\"ybins\"in i)\u0026\u0026(i.ybins\u003di.xbins,delete i.xbins),i.error_y\u0026\u0026\"opacity\"in i.error_y){var l\u003dc.defaults,f\u003di.error_y.color||(h(i,\"bar\")?c.defaultLine:l[e%l.length]);i.error_y.color\u003dc.addOpacity(c.rgb(f),c.opacity(f)*i.error_y.opacity),delete i.error_y.opacity}if(\"bardir\"in i\u0026\u0026(\"h\"!\u003d\u003di.bardir||!h(i,\"bar\")\u0026\u0026\"histogram\"!\u003d\u003di.type.substr(0,9)||(i.orientation\u003d\"h\",r.swapXYData(i)),delete i.bardir),\"histogramy\"\u003d\u003d\u003di.type\u0026\u0026r.swapXYData(i),\"histogramx\"!\u003d\u003di.type\u0026\u0026\"histogramy\"!\u003d\u003di.type||(i.type\u003d\"histogram\"),\"scl\"in i\u0026\u0026!(\"colorscale\"in i)\u0026\u0026(i.colorscale\u003di.scl,delete i.scl),\"reversescl\"in i\u0026\u0026!(\"reversescale\"in i)\u0026\u0026(i.reversescale\u003di.reversescl,delete i.reversescl),i.xaxis\u0026\u0026(i.xaxis\u003du(i.xaxis,\"x\")),i.yaxis\u0026\u0026(i.yaxis\u003du(i.yaxis,\"y\")),h(i,\"gl3d\")\u0026\u0026i.scene\u0026\u0026(i.scene\u003ds.subplotsRegistry.gl3d.cleanId(i.scene)),!h(i,\"pie-like\")\u0026\u0026!h(i,\"bar-like\"))if(Array.isArray(i.textposition))for(n\u003d0;n\u003ci.textposition.length;n++)i.textposition[n]\u003dv(i.textposition[n]);else i.textposition\u0026\u0026(i.textposition\u003dv(i.textposition));var p\u003da.getModule(i);if(p\u0026\u0026p.colorbar){var x\u003dp.colorbar.container,b\u003dx?i[x]:i;b\u0026\u0026b.colorscale\u0026\u0026(\"YIGnBu\"\u003d\u003d\u003db.colorscale\u0026\u0026(b.colorscale\u003d\"YlGnBu\"),\"YIOrRd\"\u003d\u003d\u003db.colorscale\u0026\u0026(b.colorscale\u003d\"YlOrRd\"))}if(\"surface\"\u003d\u003d\u003di.type\u0026\u0026o.isPlainObject(i.contours)){var _\u003d[\"x\",\"y\",\"z\"];for(n\u003d0;n\u003c_.length;n++){var w\u003di.contours[_[n]];o.isPlainObject(w)\u0026\u0026(w.highlightColor\u0026\u0026(w.highlightcolor\u003dw.highlightColor,delete w.highlightColor),w.highlightWidth\u0026\u0026(w.highlightwidth\u003dw.highlightWidth,delete w.highlightWidth))}}if(\"candlestick\"\u003d\u003d\u003di.type||\"ohlc\"\u003d\u003d\u003di.type){var T\u003d!1!\u003d\u003d(i.increasing||{}).showlegend,k\u003d!1!\u003d\u003d(i.decreasing||{}).showlegend,M\u003dm(i.increasing),A\u003dm(i.decreasing);if(!1!\u003d\u003dM\u0026\u0026!1!\u003d\u003dA){var S\u003dg(M,A,T,k);S\u0026\u0026(i.name\u003dS)}else!M\u0026\u0026!A||i.name||(i.name\u003dM||A)}if(Array.isArray(i.transforms)){var E\u003di.transforms;for(n\u003d0;n\u003cE.length;n++){var L\u003dE[n];if(o.isPlainObject(L))switch(L.type){case\"filter\":L.filtersrc\u0026\u0026(L.target\u003dL.filtersrc,delete L.filtersrc),L.calendar\u0026\u0026(L.valuecalendar||(L.valuecalendar\u003dL.calendar),delete L.calendar);break;case\"groupby\":if(L.styles\u003dL.styles||L.style,L.styles\u0026\u0026!Array.isArray(L.styles)){var C\u003dL.styles,P\u003dObject.keys(C);L.styles\u003d[];for(var I\u003d0;I\u003cP.length;I++)L.styles.push({target:P[I],value:C[P[I]]})}}}}y(i,\"line\")\u0026\u0026delete i.line,\"marker\"in i\u0026\u0026(y(i.marker,\"line\")\u0026\u0026delete i.marker.line,y(i,\"marker\")\u0026\u0026delete i.marker),c.clean(i),i.autobinx\u0026\u0026(delete i.autobinx,delete i.xbins),i.autobiny\u0026\u0026(delete i.autobiny,delete i.ybins),d(i),i.colorbar\u0026\u0026d(i.colorbar),i.marker\u0026\u0026i.marker.colorbar\u0026\u0026d(i.marker.colorbar),i.line\u0026\u0026i.line.colorbar\u0026\u0026d(i.line.colorbar),i.aaxis\u0026\u0026d(i.aaxis),i.baxis\u0026\u0026d(i.baxis)}},r.swapXYData\u003dfunction(t){var e;if(o.swapAttrs(t,[\"?\",\"?0\",\"d?\",\"?bins\",\"nbins?\",\"autobin?\",\"?src\",\"error_?\"]),Array.isArray(t.z)\u0026\u0026Array.isArray(t.z[0])\u0026\u0026(t.transpose?delete t.transpose:t.transpose\u003d!0),t.error_x\u0026\u0026t.error_y){var r\u003dt.error_y,n\u003d\"copy_ystyle\"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);o.swapAttrs(t,[\"error_?.copy_ystyle\"]),n\u0026\u0026o.swapAttrs(t,[\"error_?.color\",\"error_?.thickness\",\"error_?.width\"])}if(\"string\"\u003d\u003dtypeof t.hoverinfo){var i\u003dt.hoverinfo.split(\"+\");for(e\u003d0;e\u003ci.length;e++)\"x\"\u003d\u003d\u003di[e]?i[e]\u003d\"y\":\"y\"\u003d\u003d\u003di[e]\u0026\u0026(i[e]\u003d\"x\");t.hoverinfo\u003di.join(\"+\")}},r.coerceTraceIndices\u003dfunction(t,e){if(n(e))return[e];if(!Array.isArray(e)||!e.length)return t.data.map((function(t,e){return e}));if(Array.isArray(e)){for(var r\u003d[],i\u003d0;i\u003ce.length;i++)o.isIndex(e[i],t.data.length)?r.push(e[i]):o.warn(\"trace index (\",e[i],\") is not a number or is out of bounds\");return r}return e},r.manageArrayContainers\u003dfunction(t,e,r){var i\u003dt.obj,a\u003dt.parts,s\u003da.length,l\u003da[s-1],c\u003dn(l);if(c\u0026\u0026null\u003d\u003d\u003de){var u\u003da.slice(0,s-1).join(\".\");o.nestedProperty(i,u).get().splice(l,1)}else c\u0026\u0026void 0\u003d\u003d\u003dt.get()?(void 0\u003d\u003d\u003dt.get()\u0026\u0026(r[t.astr]\u003dnull),t.set(e)):t.set(e)};var x\u003d/(\\.[^\\[\\]\\.]+|\\[[^\\[\\]\\.]+\\])$/;function b(t){var e\u003dt.search(x);if(e\u003e0)return t.substr(0,e)}r.hasParent\u003dfunction(t,e){for(var r\u003db(e);r;){if(r in t)return!0;r\u003db(r)}return!1};var _\u003d[\"x\",\"y\",\"z\"];r.clearAxisTypes\u003dfunction(t,e,r){for(var n\u003d0;n\u003ce.length;n++)for(var i\u003dt._fullData[n],a\u003d0;a\u003c3;a++){var s\u003df(t,i,_[a]);if(s\u0026\u0026\"log\"!\u003d\u003ds.type){var l\u003ds._name,c\u003ds._id.substr(1);if(\"scene\"\u003d\u003d\u003dc.substr(0,5)){if(void 0!\u003d\u003dr[c])continue;l\u003dc+\".\"+l}var u\u003dl+\".type\";void 0\u003d\u003d\u003dr[l]\u0026\u0026void 0\u003d\u003d\u003dr[u]\u0026\u0026o.nestedProperty(t.layout,u).set(null)}}}},{\"../components/color\":662,\"../lib\":799,\"../plots/cartesian/axis_ids\":853,\"../plots/plots\":913,\"../registry\":927,\"fast-isnumeric\":245,\"gl-mat4/fromQuat\":284}],833:[function(t,e,r){\"use strict\";var n\u003dt(\"./plot_api\");r._doPlot\u003dn._doPlot,r.newPlot\u003dn.newPlot,r.restyle\u003dn.restyle,r.relayout\u003dn.relayout,r.redraw\u003dn.redraw,r.update\u003dn.update,r._guiRestyle\u003dn._guiRestyle,r._guiRelayout\u003dn._guiRelayout,r._guiUpdate\u003dn._guiUpdate,r._storeDirectGUIEdit\u003dn._storeDirectGUIEdit,r.react\u003dn.react,r.extendTraces\u003dn.extendTraces,r.prependTraces\u003dn.prependTraces,r.addTraces\u003dn.addTraces,r.deleteTraces\u003dn.deleteTraces,r.moveTraces\u003dn.moveTraces,r.purge\u003dn.purge,r.addFrames\u003dn.addFrames,r.deleteFrames\u003dn.deleteFrames,r.animate\u003dn.animate,r.setPlotConfig\u003dn.setPlotConfig,r.toImage\u003dt(\"./to_image\"),r.validate\u003dt(\"./validate\"),r.downloadImage\u003dt(\"../snapshot/download\");var i\u003dt(\"./template_api\");r.makeTemplate\u003di.makeTemplate,r.validateTemplate\u003di.validateTemplate},{\"../snapshot/download\":929,\"./plot_api\":835,\"./template_api\":840,\"./to_image\":841,\"./validate\":842}],834:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib/is_plain_object\"),i\u003dt(\"../lib/noop\"),a\u003dt(\"../lib/loggers\"),o\u003dt(\"../lib/search\").sorterAsc,s\u003dt(\"../registry\");r.containerArrayMatch\u003dt(\"./container_array_match\");var l\u003dr.isAddVal\u003dfunction(t){return\"add\"\u003d\u003d\u003dt||n(t)},c\u003dr.isRemoveVal\u003dfunction(t){return null\u003d\u003d\u003dt||\"remove\"\u003d\u003d\u003dt};r.applyContainerArrayChanges\u003dfunction(t,e,r,n,u){var f\u003de.astr,h\u003ds.getComponentMethod(f,\"supplyLayoutDefaults\"),p\u003ds.getComponentMethod(f,\"draw\"),d\u003ds.getComponentMethod(f,\"drawOne\"),m\u003dn.replot||n.recalc||h\u003d\u003d\u003di||p\u003d\u003d\u003di,g\u003dt.layout,v\u003dt._fullLayout;if(r[\"\"]){Object.keys(r).length\u003e1\u0026\u0026a.warn(\"Full array edits are incompatible with other edits\",f);var y\u003dr[\"\"][\"\"];if(c(y))e.set(null);else{if(!Array.isArray(y))return a.warn(\"Unrecognized full array edit value\",f,y),!0;e.set(y)}return!m\u0026\u0026(h(g,v),p(t),!0)}var x,b,_,w,T,k,M,A,S\u003dObject.keys(r).map(Number).sort(o),E\u003de.get(),L\u003dE||[],C\u003du(v,f).get(),P\u003d[],I\u003d-1,O\u003dL.length;for(x\u003d0;x\u003cS.length;x++)if(w\u003dr[_\u003dS[x]],T\u003dObject.keys(w),k\u003dw[\"\"],M\u003dl(k),_\u003c0||_\u003eL.length-(M?0:1))a.warn(\"index out of range\",f,_);else if(void 0!\u003d\u003dk)T.length\u003e1\u0026\u0026a.warn(\"Insertion \u0026 removal are incompatible with edits to the same index.\",f,_),c(k)?P.push(_):M?(\"add\"\u003d\u003d\u003dk\u0026\u0026(k\u003d{}),L.splice(_,0,k),C\u0026\u0026C.splice(_,0,{})):a.warn(\"Unrecognized full object edit value\",f,_,k),-1\u003d\u003d\u003dI\u0026\u0026(I\u003d_);else for(b\u003d0;b\u003cT.length;b++)A\u003df+\"[\"+_+\"].\",u(L[_],T[b],A).set(w[T[b]]);for(x\u003dP.length-1;x\u003e\u003d0;x--)L.splice(P[x],1),C\u0026\u0026C.splice(P[x],1);if(L.length?E||e.set(L):e.set(null),m)return!1;if(h(g,v),d!\u003d\u003di){var z;if(-1\u003d\u003d\u003dI)z\u003dS;else{for(O\u003dMath.max(L.length,O),z\u003d[],x\u003d0;x\u003cS.length\u0026\u0026!((_\u003dS[x])\u003e\u003dI);x++)z.push(_);for(x\u003dI;x\u003cO;x++)z.push(x)}for(x\u003d0;x\u003cz.length;x++)d(t,z[x])}else p(t);return!0}},{\"../lib/is_plain_object\":800,\"../lib/loggers\":803,\"../lib/noop\":808,\"../lib/search\":819,\"../registry\":927,\"./container_array_match\":830}],835:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"has-hover\"),o\u003dt(\"../lib\"),s\u003do.nestedProperty,l\u003dt(\"../lib/events\"),c\u003dt(\"../lib/queue\"),u\u003dt(\"../registry\"),f\u003dt(\"./plot_schema\"),h\u003dt(\"../plots/plots\"),p\u003dt(\"../plots/cartesian/axes\"),d\u003dt(\"../components/drawing\"),m\u003dt(\"../components/color\"),g\u003dt(\"../plots/cartesian/graph_interact\").initInteractions,v\u003dt(\"../constants/xmlns_namespaces\"),y\u003dt(\"../plots/cartesian/select\").clearSelect,x\u003dt(\"./plot_config\").dfltConfig,b\u003dt(\"./manage_arrays\"),_\u003dt(\"./helpers\"),w\u003dt(\"./subroutines\"),T\u003dt(\"./edit_types\"),k\u003dt(\"../plots/cartesian/constants\").AX_NAME_PATTERN,M\u003d0;function A(t){var e\u003dt._fullLayout;e._redrawFromAutoMarginCount?e._redrawFromAutoMarginCount--:t.emit(\"plotly_afterplot\")}function S(t,e){try{t._fullLayout._paper.style(\"background\",e)}catch(t){o.error(t)}}function E(t,e){S(t,m.combine(e,\"white\"))}function L(t,e){if(!t._context){t._context\u003do.extendDeep({},x);var r\u003dn.select(\"base\");t._context._baseUrl\u003dr.size()\u0026\u0026r.attr(\"href\")?window.location.href.split(\"#\")[0]:\"\"}var i,s,l,c\u003dt._context;if(e){for(s\u003dObject.keys(e),i\u003d0;i\u003cs.length;i++)\"editable\"!\u003d\u003d(l\u003ds[i])\u0026\u0026\"edits\"!\u003d\u003dl\u0026\u0026l in c\u0026\u0026(\"setBackground\"\u003d\u003d\u003dl\u0026\u0026\"opaque\"\u003d\u003d\u003de[l]?c[l]\u003dE:c[l]\u003de[l]);e.plot3dPixelRatio\u0026\u0026!c.plotGlPixelRatio\u0026\u0026(c.plotGlPixelRatio\u003dc.plot3dPixelRatio);var u\u003de.editable;if(void 0!\u003d\u003du)for(c.editable\u003du,s\u003dObject.keys(c.edits),i\u003d0;i\u003cs.length;i++)c.edits[s[i]]\u003du;if(e.edits)for(s\u003dObject.keys(e.edits),i\u003d0;i\u003cs.length;i++)(l\u003ds[i])in c.edits\u0026\u0026(c.edits[l]\u003de.edits[l]);c._exportedPlot\u003de._exportedPlot}c.staticPlot\u0026\u0026(c.editable\u003d!1,c.edits\u003d{},c.autosizable\u003d!1,c.scrollZoom\u003d!1,c.doubleClick\u003d!1,c.showTips\u003d!1,c.showLink\u003d!1,c.displayModeBar\u003d!1),\"hover\"!\u003d\u003dc.displayModeBar||a||(c.displayModeBar\u003d!0),\"transparent\"!\u003d\u003dc.setBackground\u0026\u0026\"function\"\u003d\u003dtypeof c.setBackground||(c.setBackground\u003dS),c._hasZeroHeight\u003dc._hasZeroHeight||0\u003d\u003d\u003dt.clientHeight,c._hasZeroWidth\u003dc._hasZeroWidth||0\u003d\u003d\u003dt.clientWidth;var f\u003dc.scrollZoom,h\u003dc._scrollZoom\u003d{};if(!0\u003d\u003d\u003df)h.cartesian\u003d1,h.gl3d\u003d1,h.geo\u003d1,h.mapbox\u003d1;else if(\"string\"\u003d\u003dtypeof f){var p\u003df.split(\"+\");for(i\u003d0;i\u003cp.length;i++)h[p[i]]\u003d1}else!1!\u003d\u003df\u0026\u0026(h.gl3d\u003d1,h.geo\u003d1,h.mapbox\u003d1)}function C(t,e){var r,n,i\u003de+1,a\u003d[];for(r\u003d0;r\u003ct.length;r++)(n\u003dt[r])\u003c0?a.push(i+n):a.push(n);return a}function P(t,e,r){var n,i;for(n\u003d0;n\u003ce.length;n++){if((i\u003de[n])!\u003d\u003dparseInt(i,10))throw new Error(\"all values in \"+r+\" must be integers\");if(i\u003e\u003dt.data.length||i\u003c-t.data.length)throw new Error(r+\" must be valid indices for gd.data.\");if(e.indexOf(i,n+1)\u003e-1||i\u003e\u003d0\u0026\u0026e.indexOf(-t.data.length+i)\u003e-1||i\u003c0\u0026\u0026e.indexOf(t.data.length+i)\u003e-1)throw new Error(\"each index in \"+r+\" must be unique.\")}}function I(t,e,r){if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array.\");if(void 0\u003d\u003d\u003de)throw new Error(\"currentIndices is a required argument.\");if(Array.isArray(e)||(e\u003d[e]),P(t,e,\"currentIndices\"),void 0\u003d\u003d\u003dr||Array.isArray(r)||(r\u003d[r]),void 0!\u003d\u003dr\u0026\u0026P(t,r,\"newIndices\"),void 0!\u003d\u003dr\u0026\u0026e.length!\u003d\u003dr.length)throw new Error(\"current and new indices must be of equal length.\")}function O(t,e,r,n,a){!function(t,e,r,n){var i\u003do.isPlainObject(n);if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array\");if(!o.isPlainObject(e))throw new Error(\"update must be a key:value object\");if(void 0\u003d\u003d\u003dr)throw new Error(\"indices must be an integer or array of integers\");for(var a in P(t,r,\"indices\"),e){if(!Array.isArray(e[a])||e[a].length!\u003d\u003dr.length)throw new Error(\"attribute \"+a+\" must be an array of length equal to indices array length\");if(i\u0026\u0026(!(a in n)||!Array.isArray(n[a])||n[a].length!\u003d\u003de[a].length))throw new Error(\"when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object\")}}(t,e,r,n);for(var l\u003dfunction(t,e,r,n){var a,l,c,u,f,h\u003do.isPlainObject(n),p\u003d[];for(var d in Array.isArray(r)||(r\u003d[r]),r\u003dC(r,t.data.length-1),e)for(var m\u003d0;m\u003cr.length;m++){if(a\u003dt.data[r[m]],l\u003d(c\u003ds(a,d)).get(),u\u003de[d][m],!o.isArrayOrTypedArray(u))throw new Error(\"attribute: \"+d+\" index: \"+m+\" must be an array\");if(!o.isArrayOrTypedArray(l))throw new Error(\"cannot extend missing or non-array attribute: \"+d);if(l.constructor!\u003d\u003du.constructor)throw new Error(\"cannot extend array with an array of a different type: \"+d);f\u003dh?n[d][m]:n,i(f)||(f\u003d-1),p.push({prop:c,target:l,insert:u,maxp:Math.floor(f)})}return p}(t,e,r,n),c\u003d{},u\u003d{},f\u003d0;f\u003cl.length;f++){var h\u003dl[f].prop,p\u003dl[f].maxp,d\u003da(l[f].target,l[f].insert,p);h.set(d[0]),Array.isArray(c[h.astr])||(c[h.astr]\u003d[]),c[h.astr].push(d[1]),Array.isArray(u[h.astr])||(u[h.astr]\u003d[]),u[h.astr].push(l[f].target.length)}return{update:c,maxPoints:u}}function z(t,e){var r\u003dnew t.constructor(t.length+e.length);return r.set(t),r.set(e,t.length),r}function D(t,e,n,i){t\u003do.getGraphDiv(t),_.clearPromiseQueue(t);var a\u003d{};if(\"string\"\u003d\u003dtypeof e)a[e]\u003dn;else{if(!o.isPlainObject(e))return o.warn(\"Restyle fail.\",e,n,i),Promise.reject();a\u003do.extendFlat({},e),void 0\u003d\u003d\u003di\u0026\u0026(i\u003dn)}Object.keys(a).length\u0026\u0026(t.changed\u003d!0);var s\u003d_.coerceTraceIndices(t,i),l\u003dN(t,a,s),u\u003dl.flags;u.calc\u0026\u0026(t.calcdata\u003dvoid 0),u.clearAxisTypes\u0026\u0026_.clearAxisTypes(t,s,{});var f\u003d[];u.fullReplot?f.push(r._doPlot):(f.push(h.previousPromises),h.supplyDefaults(t),u.markerSize\u0026\u0026(h.doCalcdata(t),q(f)),u.style\u0026\u0026f.push(w.doTraceStyle),u.colorbars\u0026\u0026f.push(w.doColorBars),f.push(A)),f.push(h.rehover,h.redrag),c.add(t,D,[t,l.undoit,l.traces],D,[t,l.redoit,l.traces]);var p\u003do.syncOrAsync(f,t);return p\u0026\u0026p.then||(p\u003dPromise.resolve()),p.then((function(){return t.emit(\"plotly_restyle\",l.eventData),t}))}function R(t){return void 0\u003d\u003d\u003dt?null:t}function F(t,e){return e?function(e,r,n){var i\u003ds(e,r),a\u003di.set;return i.set\u003dfunction(e){B((n||\"\")+r,i.get(),e,t),a(e)},i}:s}function B(t,e,r,n){if(Array.isArray(e)||Array.isArray(r))for(var i\u003dArray.isArray(e)?e:[],a\u003dArray.isArray(r)?r:[],s\u003dMath.max(i.length,a.length),l\u003d0;l\u003cs;l++)B(t+\"[\"+l+\"]\",i[l],a[l],n);else if(o.isPlainObject(e)||o.isPlainObject(r)){var c\u003do.isPlainObject(e)?e:{},u\u003do.isPlainObject(r)?r:{},f\u003do.extendFlat({},c,u);for(var h in f)B(t+\".\"+h,c[h],u[h],n)}else void 0\u003d\u003d\u003dn[t]\u0026\u0026(n[t]\u003dR(e))}function N(t,e,r){var n,i\u003dt._fullLayout,a\u003dt._fullData,l\u003dt.data,c\u003di._guiEditing,d\u003dF(i._preGUI,c),m\u003do.extendDeepAll({},e);j(e);var g,v\u003dT.traceFlags(),y\u003d{},x\u003d{};function b(){return r.map((function(){}))}function w(t){var e\u003dp.id2name(t);-1\u003d\u003d\u003dg.indexOf(e)\u0026\u0026g.push(e)}function k(t){return\"LAYOUT\"+t+\".autorange\"}function M(t){return\"LAYOUT\"+t+\".range\"}function A(t){for(var e\u003dt;e\u003ca.length;e++)if(a[e]._input\u003d\u003d\u003dl[t])return a[e]}function S(n,a,o){if(Array.isArray(n))n.forEach((function(t){S(t,a,o)}));else if(!(n in e)\u0026\u0026!_.hasParent(e,n)){var s;if(\"LAYOUT\"\u003d\u003d\u003dn.substr(0,6))s\u003dd(t.layout,n.replace(\"LAYOUT\",\"\"));else{var u\u003dr[o];s\u003dF(i._tracePreGUI[A(u)._fullInput.uid],c)(l[u],n)}n in x||(x[n]\u003db()),void 0\u003d\u003d\u003dx[n][o]\u0026\u0026(x[n][o]\u003dR(s.get())),void 0!\u003d\u003da\u0026\u0026s.set(a)}}function E(t){return function(e){return a[e][t]}}function L(t){return function(e,n){return!1\u003d\u003d\u003de?a[r[n]][t]:null}}for(var C in e){if(_.hasParent(e,C))throw new Error(\"cannot set \"+C+\" and a parent attribute simultaneously\");var P,I,O,z,D,B,N\u003de[C];if(\"autobinx\"!\u003d\u003dC\u0026\u0026\"autobiny\"!\u003d\u003dC||(C\u003dC.charAt(C.length-1)+\"bins\",N\u003dArray.isArray(N)?N.map(L(C)):!1\u003d\u003d\u003dN?r.map(E(C)):null),y[C]\u003dN,\"LAYOUT\"!\u003d\u003dC.substr(0,6)){for(x[C]\u003db(),n\u003d0;n\u003cr.length;n++){if(P\u003dl[r[n]],I\u003dA(r[n]),z\u003d(O\u003dF(i._tracePreGUI[I._fullInput.uid],c)(P,C)).get(),void 0!\u003d\u003d(D\u003dArray.isArray(N)?N[n%N.length]:N)){var U\u003dO.parts[O.parts.length-1],V\u003dC.substr(0,C.length-U.length-1),q\u003dV?V+\".\":\"\",H\u003dV?s(I,V).get():I;if((B\u003df.getTraceValObject(I,O.parts))\u0026\u0026B.impliedEdits\u0026\u0026null!\u003d\u003dD)for(var G in B.impliedEdits)S(o.relativeAttr(C,G),B.impliedEdits[G],n);else if(\"thicknessmode\"!\u003d\u003dU\u0026\u0026\"lenmode\"!\u003d\u003dU||z\u003d\u003d\u003dD||\"fraction\"!\u003d\u003dD\u0026\u0026\"pixels\"!\u003d\u003dD||!H){if(\"type\"\u003d\u003d\u003dC\u0026\u0026(\"pie\"\u003d\u003d\u003dD!\u003d(\"pie\"\u003d\u003d\u003dz)||\"funnelarea\"\u003d\u003d\u003dD!\u003d(\"funnelarea\"\u003d\u003d\u003dz))){var Y\u003d\"x\",W\u003d\"y\";\"bar\"!\u003d\u003dD\u0026\u0026\"bar\"!\u003d\u003dz||\"h\"!\u003d\u003dP.orientation||(Y\u003d\"y\",W\u003d\"x\"),o.swapAttrs(P,[\"?\",\"?src\"],\"labels\",Y),o.swapAttrs(P,[\"d?\",\"?0\"],\"label\",Y),o.swapAttrs(P,[\"?\",\"?src\"],\"values\",W),\"pie\"\u003d\u003d\u003dz||\"funnelarea\"\u003d\u003d\u003dz?(s(P,\"marker.color\").set(s(P,\"marker.colors\").get()),i._pielayer.selectAll(\"g.trace\").remove()):u.traceIs(P,\"cartesian\")\u0026\u0026s(P,\"marker.colors\").set(s(P,\"marker.color\").get())}}else{var X\u003di._size,Z\u003dH.orient,J\u003d\"top\"\u003d\u003d\u003dZ||\"bottom\"\u003d\u003d\u003dZ;if(\"thicknessmode\"\u003d\u003d\u003dU){var K\u003dJ?X.h:X.w;S(q+\"thickness\",H.thickness*(\"fraction\"\u003d\u003d\u003dD?1/K:K),n)}else{var Q\u003dJ?X.w:X.h;S(q+\"len\",H.len*(\"fraction\"\u003d\u003d\u003dD?1/Q:Q),n)}}x[C][n]\u003dR(z);if(-1!\u003d\u003d[\"swapxy\",\"swapxyaxes\",\"orientation\",\"orientationaxes\"].indexOf(C)){if(\"orientation\"\u003d\u003d\u003dC){O.set(D);var $\u003dP.x\u0026\u0026!P.y?\"h\":\"v\";if((O.get()||$)\u003d\u003d\u003dI.orientation)continue}else\"orientationaxes\"\u003d\u003d\u003dC\u0026\u0026(P.orientation\u003d{v:\"h\",h:\"v\"}[I.orientation]);_.swapXYData(P),v.calc\u003dv.clearAxisTypes\u003d!0}else-1!\u003d\u003dh.dataArrayContainers.indexOf(O.parts[0])?(_.manageArrayContainers(O,D,x),v.calc\u003d!0):(B?B.arrayOk\u0026\u0026!u.traceIs(I,\"regl\")\u0026\u0026(o.isArrayOrTypedArray(D)||o.isArrayOrTypedArray(z))?v.calc\u003d!0:T.update(v,B):v.calc\u003d!0,O.set(D))}}if(-1!\u003d\u003d[\"swapxyaxes\",\"orientationaxes\"].indexOf(C)\u0026\u0026p.swap(t,r),\"orientationaxes\"\u003d\u003d\u003dC){var tt\u003ds(t.layout,\"hovermode\"),et\u003dtt.get();\"x\"\u003d\u003d\u003det?tt.set(\"y\"):\"y\"\u003d\u003d\u003det?tt.set(\"x\"):\"x unified\"\u003d\u003d\u003det?tt.set(\"y unified\"):\"y unified\"\u003d\u003d\u003det\u0026\u0026tt.set(\"x unified\")}if(-1!\u003d\u003d[\"orientation\",\"type\"].indexOf(C)){for(g\u003d[],n\u003d0;n\u003cr.length;n++){var rt\u003dl[r[n]];u.traceIs(rt,\"cartesian\")\u0026\u0026(w(rt.xaxis||\"x\"),w(rt.yaxis||\"y\"))}S(g.map(k),!0,0),S(g.map(M),[0,1],0)}}else O\u003dd(t.layout,C.replace(\"LAYOUT\",\"\")),x[C]\u003d[R(O.get())],O.set(Array.isArray(N)?N[0]:N),v.calc\u003d!0}return(v.calc||v.plot)\u0026\u0026(v.fullReplot\u003d!0),{flags:v,undoit:x,redoit:y,traces:r,eventData:o.extendDeepNoArrays([],[m,r])}}function j(t){var e,r,n,i\u003do.counterRegex(\"axis\",\".title\",!1,!1),a\u003d/colorbar\\.title$/,s\u003dObject.keys(t);for(e\u003d0;e\u003cs.length;e++)r\u003ds[e],n\u003dt[r],\"title\"!\u003d\u003dr\u0026\u0026!i.test(r)\u0026\u0026!a.test(r)||\"string\"!\u003dtypeof n\u0026\u0026\"number\"!\u003dtypeof n?r.indexOf(\"titlefont\")\u003e-1?l(r,r.replace(\"titlefont\",\"title.font\")):r.indexOf(\"titleposition\")\u003e-1?l(r,r.replace(\"titleposition\",\"title.position\")):r.indexOf(\"titleside\")\u003e-1?l(r,r.replace(\"titleside\",\"title.side\")):r.indexOf(\"titleoffset\")\u003e-1\u0026\u0026l(r,r.replace(\"titleoffset\",\"title.offset\")):l(r,r.replace(\"title\",\"title.text\"));function l(e,r){t[r]\u003dt[e],delete t[e]}}function U(t,e,r){t\u003do.getGraphDiv(t),_.clearPromiseQueue(t);var n\u003d{};if(\"string\"\u003d\u003dtypeof e)n[e]\u003dr;else{if(!o.isPlainObject(e))return o.warn(\"Relayout fail.\",e,r),Promise.reject();n\u003do.extendFlat({},e)}Object.keys(n).length\u0026\u0026(t.changed\u003d!0);var i\u003dW(t,n),a\u003di.flags;a.calc\u0026\u0026(t.calcdata\u003dvoid 0);var s\u003d[h.previousPromises];a.layoutReplot?s.push(w.layoutReplot):Object.keys(n).length\u0026\u0026(V(t,a,i)||h.supplyDefaults(t),a.legend\u0026\u0026s.push(w.doLegend),a.layoutstyle\u0026\u0026s.push(w.layoutStyles),a.axrange\u0026\u0026q(s,i.rangesAltered),a.ticks\u0026\u0026s.push(w.doTicksRelayout),a.modebar\u0026\u0026s.push(w.doModeBar),a.camera\u0026\u0026s.push(w.doCamera),a.colorbars\u0026\u0026s.push(w.doColorBars),s.push(A)),s.push(h.rehover,h.redrag),c.add(t,U,[t,i.undoit],U,[t,i.redoit]);var l\u003do.syncOrAsync(s,t);return l\u0026\u0026l.then||(l\u003dPromise.resolve(t)),l.then((function(){return t.emit(\"plotly_relayout\",i.eventData),t}))}function V(t,e,r){var n\u003dt._fullLayout;if(!e.axrange)return!1;for(var i in e)if(\"axrange\"!\u003d\u003di\u0026\u0026e[i])return!1;for(var a in r.rangesAltered){var o\u003dp.id2name(a),s\u003dt.layout[o],l\u003dn[o];if(l.autorange\u003ds.autorange,s.range\u0026\u0026(l.range\u003ds.range.slice()),l.cleanRange(),l._matchGroup)for(var c in l._matchGroup)if(c!\u003d\u003da){var u\u003dn[p.id2name(c)];u.autorange\u003dl.autorange,u.range\u003dl.range.slice(),u._input.range\u003dl.range.slice()}}return!0}function q(t,e){var r\u003de?function(t){var r\u003d[],n\u003d!0;for(var i in e){var a\u003dp.getFromId(t,i);if(r.push(i),-1!\u003d\u003d(a.ticklabelposition||\"\").indexOf(\"inside\")\u0026\u0026a._anchorAxis\u0026\u0026r.push(a._anchorAxis._id),a._matchGroup)for(var o in a._matchGroup)e[o]||r.push(o);a.automargin\u0026\u0026(n\u003d!1)}return p.draw(t,r,{skipTitle:n})}:function(t){return p.draw(t,\"redraw\")};t.push(y,w.doAutoRangeAndConstraints,r,w.drawData,w.finalDraw)}var H\u003d/^[xyz]axis[0-9]*\\.range(\\[[0|1]\\])?$/,G\u003d/^[xyz]axis[0-9]*\\.autorange$/,Y\u003d/^[xyz]axis[0-9]*\\.domain(\\[[0|1]\\])?$/;function W(t,e){var r,n,i,a\u003dt.layout,l\u003dt._fullLayout,c\u003dl._guiEditing,h\u003dF(l._preGUI,c),d\u003dObject.keys(e),m\u003dp.list(t),g\u003do.extendDeepAll({},e),v\u003d{};for(j(e),d\u003dObject.keys(e),n\u003d0;n\u003cd.length;n++)if(0\u003d\u003d\u003dd[n].indexOf(\"allaxes\")){for(i\u003d0;i\u003cm.length;i++){var y\u003dm[i]._id.substr(1),x\u003d-1!\u003d\u003dy.indexOf(\"scene\")?y+\".\":\"\",w\u003dd[n].replace(\"allaxes\",x+m[i]._name);e[w]||(e[w]\u003de[d[n]])}delete e[d[n]]}var M\u003dT.layoutFlags(),A\u003d{},S\u003d{};function E(t,r){if(Array.isArray(t))t.forEach((function(t){E(t,r)}));else if(!(t in e)\u0026\u0026!_.hasParent(e,t)){var n\u003dh(a,t);t in S||(S[t]\u003dR(n.get())),void 0!\u003d\u003dr\u0026\u0026n.set(r)}}var L,C\u003d{};function P(t){var e\u003dp.name2id(t.split(\".\")[0]);return C[e]\u003d1,e}for(var I in e){if(_.hasParent(e,I))throw new Error(\"cannot set \"+I+\" and a parent attribute simultaneously\");for(var O\u003dh(a,I),z\u003de[I],D\u003dO.parts.length-1;D\u003e0\u0026\u0026\"string\"!\u003dtypeof O.parts[D];)D--;var B\u003dO.parts[D],N\u003dO.parts[D-1]+\".\"+B,U\u003dO.parts.slice(0,D).join(\".\"),V\u003ds(t.layout,U).get(),q\u003ds(l,U).get(),W\u003dO.get();if(void 0!\u003d\u003dz){A[I]\u003dz,S[I]\u003d\"reverse\"\u003d\u003d\u003dB?z:R(W);var Z\u003df.getLayoutValObject(l,O.parts);if(Z\u0026\u0026Z.impliedEdits\u0026\u0026null!\u003d\u003dz)for(var J in Z.impliedEdits)E(o.relativeAttr(I,J),Z.impliedEdits[J]);if(-1!\u003d\u003d[\"width\",\"height\"].indexOf(I))if(z){E(\"autosize\",null);var K\u003d\"height\"\u003d\u003d\u003dI?\"width\":\"height\";E(K,l[K])}else l[I]\u003dt._initialAutoSize[I];else if(\"autosize\"\u003d\u003d\u003dI)E(\"width\",z?null:l.width),E(\"height\",z?null:l.height);else if(N.match(H))P(N),s(l,U+\"._inputRange\").set(null);else if(N.match(G)){P(N),s(l,U+\"._inputRange\").set(null);var Q\u003ds(l,U).get();Q._inputDomain\u0026\u0026(Q._input.domain\u003dQ._inputDomain.slice())}else N.match(Y)\u0026\u0026s(l,U+\"._inputDomain\").set(null);if(\"type\"\u003d\u003d\u003dB){L\u003dV;var $\u003d\"linear\"\u003d\u003d\u003dq.type\u0026\u0026\"log\"\u003d\u003d\u003dz,tt\u003d\"log\"\u003d\u003d\u003dq.type\u0026\u0026\"linear\"\u003d\u003d\u003dz;if($||tt){if(L\u0026\u0026L.range)if(q.autorange)$\u0026\u0026(L.range\u003dL.range[1]\u003eL.range[0]?[1,2]:[2,1]);else{var et\u003dL.range[0],rt\u003dL.range[1];$?(et\u003c\u003d0\u0026\u0026rt\u003c\u003d0\u0026\u0026E(U+\".autorange\",!0),et\u003c\u003d0?et\u003drt/1e6:rt\u003c\u003d0\u0026\u0026(rt\u003det/1e6),E(U+\".range[0]\",Math.log(et)/Math.LN10),E(U+\".range[1]\",Math.log(rt)/Math.LN10)):(E(U+\".range[0]\",Math.pow(10,et)),E(U+\".range[1]\",Math.pow(10,rt)))}else E(U+\".autorange\",!0);Array.isArray(l._subplots.polar)\u0026\u0026l._subplots.polar.length\u0026\u0026l[O.parts[0]]\u0026\u0026\"radialaxis\"\u003d\u003d\u003dO.parts[1]\u0026\u0026delete l[O.parts[0]]._subplot.viewInitial[\"radialaxis.range\"],u.getComponentMethod(\"annotations\",\"convertCoords\")(t,q,z,E),u.getComponentMethod(\"images\",\"convertCoords\")(t,q,z,E)}else E(U+\".autorange\",!0),E(U+\".range\",null);s(l,U+\"._inputRange\").set(null)}else if(B.match(k)){var nt\u003ds(l,I).get(),it\u003d(z||{}).type;it\u0026\u0026\"-\"!\u003d\u003dit||(it\u003d\"linear\"),u.getComponentMethod(\"annotations\",\"convertCoords\")(t,nt,it,E),u.getComponentMethod(\"images\",\"convertCoords\")(t,nt,it,E)}var at\u003db.containerArrayMatch(I);if(at){r\u003dat.array,n\u003dat.index;var ot\u003dat.property,st\u003dZ||{editType:\"calc\"};\"\"!\u003d\u003dn\u0026\u0026\"\"\u003d\u003d\u003dot\u0026\u0026(b.isAddVal(z)?S[I]\u003dnull:b.isRemoveVal(z)?S[I]\u003d(s(a,r).get()||[])[n]:o.warn(\"unrecognized full object value\",e)),T.update(M,st),v[r]||(v[r]\u003d{});var lt\u003dv[r][n];lt||(lt\u003dv[r][n]\u003d{}),lt[ot]\u003dz,delete e[I]}else\"reverse\"\u003d\u003d\u003dB?(V.range?V.range.reverse():(E(U+\".autorange\",!0),V.range\u003d[1,0]),q.autorange?M.calc\u003d!0:M.plot\u003d!0):(l._has(\"scatter-like\")\u0026\u0026l._has(\"regl\")\u0026\u0026\"dragmode\"\u003d\u003d\u003dI\u0026\u0026(\"lasso\"\u003d\u003d\u003dz||\"select\"\u003d\u003d\u003dz)\u0026\u0026\"lasso\"!\u003d\u003dW\u0026\u0026\"select\"!\u003d\u003dW||l._has(\"gl2d\")?M.plot\u003d!0:Z?T.update(M,Z):M.calc\u003d!0,O.set(z))}}for(r in v){b.applyContainerArrayChanges(t,h(a,r),v[r],M,h)||(M.plot\u003d!0)}for(var ct in C){var ut\u003d(L\u003dp.getFromId(t,ct))\u0026\u0026L._constraintGroup;if(ut)for(var ft in M.calc\u003d!0,ut)C[ft]||(p.getFromId(t,ft)._constraintShrinkable\u003d!0)}return(X(t)||e.height||e.width)\u0026\u0026(M.plot\u003d!0),(M.plot||M.calc)\u0026\u0026(M.layoutReplot\u003d!0),{flags:M,rangesAltered:C,undoit:S,redoit:A,eventData:g}}function X(t){var e\u003dt._fullLayout,r\u003de.width,n\u003de.height;return t.layout.autosize\u0026\u0026h.plotAutoSize(t,t.layout,e),e.width!\u003d\u003dr||e.height!\u003d\u003dn}function Z(t,e,n,i){t\u003do.getGraphDiv(t),_.clearPromiseQueue(t),o.isPlainObject(e)||(e\u003d{}),o.isPlainObject(n)||(n\u003d{}),Object.keys(e).length\u0026\u0026(t.changed\u003d!0),Object.keys(n).length\u0026\u0026(t.changed\u003d!0);var a\u003d_.coerceTraceIndices(t,i),s\u003dN(t,o.extendFlat({},e),a),l\u003ds.flags,u\u003dW(t,o.extendFlat({},n)),f\u003du.flags;(l.calc||f.calc)\u0026\u0026(t.calcdata\u003dvoid 0),l.clearAxisTypes\u0026\u0026_.clearAxisTypes(t,a,n);var p\u003d[];f.layoutReplot?p.push(w.layoutReplot):l.fullReplot?p.push(r._doPlot):(p.push(h.previousPromises),V(t,f,u)||h.supplyDefaults(t),l.style\u0026\u0026p.push(w.doTraceStyle),(l.colorbars||f.colorbars)\u0026\u0026p.push(w.doColorBars),f.legend\u0026\u0026p.push(w.doLegend),f.layoutstyle\u0026\u0026p.push(w.layoutStyles),f.axrange\u0026\u0026q(p,u.rangesAltered),f.ticks\u0026\u0026p.push(w.doTicksRelayout),f.modebar\u0026\u0026p.push(w.doModeBar),f.camera\u0026\u0026p.push(w.doCamera),p.push(A)),p.push(h.rehover,h.redrag),c.add(t,Z,[t,s.undoit,u.undoit,s.traces],Z,[t,s.redoit,u.redoit,s.traces]);var d\u003do.syncOrAsync(p,t);return d\u0026\u0026d.then||(d\u003dPromise.resolve(t)),d.then((function(){return t.emit(\"plotly_update\",{data:s.eventData,layout:u.eventData}),t}))}function J(t){return function(e){e._fullLayout._guiEditing\u003d!0;var r\u003dt.apply(null,arguments);return e._fullLayout._guiEditing\u003d!1,r}}var K\u003d[{pattern:/^hiddenlabels/,attr:\"legend.uirevision\"},{pattern:/^((x|y)axis\\d*)\\.((auto)?range|title\\.text)/},{pattern:/axis\\d*\\.showspikes$/,attr:\"modebar.uirevision\"},{pattern:/(hover|drag)mode$/,attr:\"modebar.uirevision\"},{pattern:/^(scene\\d*)\\.camera/},{pattern:/^(geo\\d*)\\.(projection|center|fitbounds)/},{pattern:/^(ternary\\d*\\.[abc]axis)\\.(min|title\\.text)$/},{pattern:/^(polar\\d*\\.radialaxis)\\.((auto)?range|angle|title\\.text)/},{pattern:/^(polar\\d*\\.angularaxis)\\.rotation/},{pattern:/^(mapbox\\d*)\\.(center|zoom|bearing|pitch)/},{pattern:/^legend\\.(x|y)$/,attr:\"editrevision\"},{pattern:/^(shapes|annotations)/,attr:\"editrevision\"},{pattern:/^title\\.text$/,attr:\"editrevision\"}],Q\u003d[{pattern:/^selectedpoints$/,attr:\"selectionrevision\"},{pattern:/(^|value\\.)visible$/,attr:\"legend.uirevision\"},{pattern:/^dimensions\\[\\d+\\]\\.constraintrange/},{pattern:/^node\\.(x|y|groups)/},{pattern:/^level$/},{pattern:/(^|value\\.)name$/},{pattern:/colorbar\\.title\\.text$/},{pattern:/colorbar\\.(x|y)$/,attr:\"editrevision\"}];function $(t,e){for(var r\u003d0;r\u003ce.length;r++){var n\u003de[r],i\u003dt.match(n.pattern);if(i)return{head:i[1],attr:n.attr}}}function tt(t,e){var r\u003ds(e,t).get();if(void 0!\u003d\u003dr)return r;var n\u003dt.split(\".\");for(n.pop();n.length\u003e1;)if(n.pop(),void 0!\u003d\u003d(r\u003ds(e,n.join(\".\")+\".uirevision\").get()))return r;return e.uirevision}function et(t,e){for(var r\u003d0;r\u003ce.length;r++)if(e[r]._fullInput.uid\u003d\u003d\u003dt)return r;return-1}function rt(t,e,r){for(var n\u003d0;n\u003ce.length;n++)if(e[n].uid\u003d\u003d\u003dt)return n;return!e[r]||e[r].uid?-1:r}function nt(t,e){var r\u003do.isPlainObject(t),n\u003dArray.isArray(t);return r||n?(r\u0026\u0026o.isPlainObject(e)||n\u0026\u0026Array.isArray(e))\u0026\u0026JSON.stringify(t)\u003d\u003d\u003dJSON.stringify(e):t\u003d\u003d\u003de}function it(t,e,r,n){var i,a,l,c\u003dn.getValObject,u\u003dn.flags,f\u003dn.immutable,h\u003dn.inArray,p\u003dn.arrayIndex;function d(){var t\u003di.editType;h\u0026\u0026-1!\u003d\u003dt.indexOf(\"arraydraw\")?o.pushUnique(u.arrays[h],p):(T.update(u,i),\"none\"!\u003d\u003dt\u0026\u0026u.nChanges++,n.transition\u0026\u0026i.anim\u0026\u0026u.nChangesAnim++,(H.test(l)||G.test(l))\u0026\u0026(u.rangesAltered[r[0]]\u003d1),Y.test(l)\u0026\u0026s(e,\"_inputDomain\").set(null),\"datarevision\"\u003d\u003d\u003da\u0026\u0026(u.newDataRevision\u003d1))}function m(t){return\"data_array\"\u003d\u003d\u003dt.valType||t.arrayOk}for(a in t){if(u.calc\u0026\u0026!n.transition)return;var g\u003dt[a],v\u003de[a],y\u003dr.concat(a);if(l\u003dy.join(\".\"),\"_\"!\u003d\u003da.charAt(0)\u0026\u0026\"function\"!\u003dtypeof g\u0026\u0026g!\u003d\u003dv){if((\"tick0\"\u003d\u003d\u003da||\"dtick\"\u003d\u003d\u003da)\u0026\u0026\"geo\"!\u003d\u003dr[0]){var x\u003de.tickmode;if(\"auto\"\u003d\u003d\u003dx||\"array\"\u003d\u003d\u003dx||!x)continue}if((\"range\"!\u003d\u003da||!e.autorange)\u0026\u0026(\"zmin\"!\u003d\u003da\u0026\u0026\"zmax\"!\u003d\u003da||\"contourcarpet\"!\u003d\u003de.type)\u0026\u0026(i\u003dc(y))\u0026\u0026(!i._compareAsJSON||JSON.stringify(g)!\u003d\u003dJSON.stringify(v))){var b,_\u003di.valType,w\u003dm(i),k\u003dArray.isArray(g),M\u003dArray.isArray(v);if(k\u0026\u0026M){var A\u003d\"_input_\"+a,S\u003dt[A],E\u003de[A];if(Array.isArray(S)\u0026\u0026S\u003d\u003d\u003dE)continue}if(void 0\u003d\u003d\u003dv)w\u0026\u0026k?u.calc\u003d!0:d();else if(i._isLinkedToArray){var L\u003d[],C\u003d!1;h||(u.arrays[a]\u003dL);var P\u003dMath.min(g.length,v.length),I\u003dMath.max(g.length,v.length);if(P!\u003d\u003dI){if(\"arraydraw\"!\u003d\u003di.editType){d();continue}C\u003d!0}for(b\u003d0;b\u003cP;b++)it(g[b],v[b],y.concat(b),o.extendFlat({inArray:a,arrayIndex:b},n));if(C)for(b\u003dP;b\u003cI;b++)L.push(b)}else!_\u0026\u0026o.isPlainObject(g)?it(g,v,y,n):w?k\u0026\u0026M?(f\u0026\u0026(u.calc\u003d!0),(f||n.newDataRevision)\u0026\u0026d()):k!\u003d\u003dM?u.calc\u003d!0:d():k\u0026\u0026M\u0026\u0026g.length\u003d\u003d\u003dv.length\u0026\u0026String(g)\u003d\u003d\u003dString(v)||d()}}}for(a in e)if(!(a in t)\u0026\u0026\"_\"!\u003d\u003da.charAt(0)\u0026\u0026\"function\"!\u003dtypeof e[a]){if(m(i\u003dc(r.concat(a)))\u0026\u0026Array.isArray(e[a]))return void(u.calc\u003d!0);d()}}function at(t){var e\u003dt._fullLayout,r\u003dt.getBoundingClientRect();if(!o.equalDomRects(r,e._lastBBox)){var n\u003de._invTransform\u003do.inverseTransformMatrix(o.getFullTransformMatrix(t));e._invScaleX\u003dMath.sqrt(n[0][0]*n[0][0]+n[0][1]*n[0][1]+n[0][2]*n[0][2]),e._invScaleY\u003dMath.sqrt(n[1][0]*n[1][0]+n[1][1]*n[1][1]+n[1][2]*n[1][2]),e._lastBBox\u003dr}}r.animate\u003dfunction(t,e,r){if(t\u003do.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t+\". It\u0027s likely that you\u0027ve failed to create a plot before animating it. For more details, see https://plotly.com/javascript/animations/\");var n\u003dt._transitionData;n._frameQueue||(n._frameQueue\u003d[]);var i\u003d(r\u003dh.supplyAnimationDefaults(r)).transition,a\u003dr.frame;function s(t){return Array.isArray(i)?t\u003e\u003di.length?i[0]:i[t]:i}function l(t){return Array.isArray(a)?t\u003e\u003da.length?a[0]:a[t]:a}function c(t,e){var r\u003d0;return function(){if(t\u0026\u0026++r\u003d\u003d\u003de)return t()}}return void 0\u003d\u003d\u003dn._frameWaitingCnt\u0026\u0026(n._frameWaitingCnt\u003d0),new Promise((function(a,u){function f(){n._currentFrame\u0026\u0026n._currentFrame.onComplete\u0026\u0026n._currentFrame.onComplete();var e\u003dn._currentFrame\u003dn._frameQueue.shift();if(e){var r\u003de.name?e.name.toString():null;t._fullLayout._currentFrame\u003dr,n._lastFrameAt\u003dDate.now(),n._timeToNext\u003de.frameOpts.duration,h.transition(t,e.frame.data,e.frame.layout,_.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then((function(){e.onComplete\u0026\u0026e.onComplete()})),t.emit(\"plotly_animatingframe\",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else t.emit(\"plotly_animated\"),window.cancelAnimationFrame(n._animationRaf),n._animationRaf\u003dnull}function p(){t.emit(\"plotly_animating\"),n._lastFrameAt\u003d-1/0,n._timeToNext\u003d0,n._runningTransitions\u003d0,n._currentFrame\u003dnull;var e\u003dfunction(){n._animationRaf\u003dwindow.requestAnimationFrame(e),Date.now()-n._lastFrameAt\u003en._timeToNext\u0026\u0026f()};e()}var d,m,g\u003d0;function v(t){return Array.isArray(i)?g\u003e\u003di.length?t.transitionOpts\u003di[g]:t.transitionOpts\u003di[0]:t.transitionOpts\u003di,g++,t}var y\u003d[],x\u003dnull\u003d\u003de,b\u003dArray.isArray(e);if(!x\u0026\u0026!b\u0026\u0026o.isPlainObject(e))y.push({type:\"object\",data:v(o.extendFlat({},e))});else if(x||-1!\u003d\u003d[\"string\",\"number\"].indexOf(typeof e))for(d\u003d0;d\u003cn._frames.length;d++)(m\u003dn._frames[d])\u0026\u0026(x||String(m.group)\u003d\u003d\u003dString(e))\u0026\u0026y.push({type:\"byname\",name:String(m.name),data:v({name:m.name})});else if(b)for(d\u003d0;d\u003ce.length;d++){var w\u003de[d];-1!\u003d\u003d[\"number\",\"string\"].indexOf(typeof w)?(w\u003dString(w),y.push({type:\"byname\",name:w,data:v({name:w})})):o.isPlainObject(w)\u0026\u0026y.push({type:\"object\",data:v(o.extendFlat({},w))})}for(d\u003d0;d\u003cy.length;d++)if(\"byname\"\u003d\u003d\u003d(m\u003dy[d]).type\u0026\u0026!n._frameHash[m.data.name])return o.warn(\u0027animate failure: frame not found: \"\u0027+m.data.name+\u0027\"\u0027),void u();-1!\u003d\u003d[\"next\",\"immediate\"].indexOf(r.mode)\u0026\u0026function(){if(0!\u003d\u003dn._frameQueue.length){for(;n._frameQueue.length;){var e\u003dn._frameQueue.pop();e.onInterrupt\u0026\u0026e.onInterrupt()}t.emit(\"plotly_animationinterrupted\",[])}}(),\"reverse\"\u003d\u003d\u003dr.direction\u0026\u0026y.reverse();var T\u003dt._fullLayout._currentFrame;if(T\u0026\u0026r.fromcurrent){var k\u003d-1;for(d\u003d0;d\u003cy.length;d++)if(\"byname\"\u003d\u003d\u003d(m\u003dy[d]).type\u0026\u0026m.name\u003d\u003d\u003dT){k\u003dd;break}if(k\u003e0\u0026\u0026k\u003cy.length-1){var M\u003d[];for(d\u003d0;d\u003cy.length;d++)m\u003dy[d],(\"byname\"!\u003d\u003dy[d].type||d\u003ek)\u0026\u0026M.push(m);y\u003dM}}y.length\u003e0?function(e){if(0!\u003d\u003de.length){for(var i\u003d0;i\u003ce.length;i++){var o;o\u003d\"byname\"\u003d\u003d\u003de[i].type?h.computeFrame(t,e[i].name):e[i].data;var f\u003dl(i),d\u003ds(i);d.duration\u003dMath.min(d.duration,f.duration);var m\u003d{frame:o,name:e[i].name,frameOpts:f,transitionOpts:d};i\u003d\u003d\u003de.length-1\u0026\u0026(m.onComplete\u003dc(a,2),m.onInterrupt\u003du),n._frameQueue.push(m)}\"immediate\"\u003d\u003d\u003dr.mode\u0026\u0026(n._lastFrameAt\u003d-1/0),n._animationRaf||p()}}(y):(t.emit(\"plotly_animated\"),a())}))},r.addFrames\u003dfunction(t,e,r){if(t\u003do.getGraphDiv(t),null\u003d\u003de)return Promise.resolve();if(!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t+\". It\u0027s likely that you\u0027ve failed to create a plot before adding frames. For more details, see https://plotly.com/javascript/animations/\");var n,i,a,s,l\u003dt._transitionData._frames,u\u003dt._transitionData._frameHash;if(!Array.isArray(e))throw new Error(\"addFrames failure: frameList must be an Array of frame definitions\"+e);var f\u003dl.length+2*e.length,p\u003d[],d\u003d{};for(n\u003de.length-1;n\u003e\u003d0;n--)if(o.isPlainObject(e[n])){var m\u003de[n].name,g\u003d(u[m]||d[m]||{}).name,v\u003de[n].name,y\u003du[g]||d[g];g\u0026\u0026v\u0026\u0026\"number\"\u003d\u003dtypeof v\u0026\u0026y\u0026\u0026M\u003c5\u0026\u0026(M++,o.warn(\u0027addFrames: overwriting frame \"\u0027+(u[g]||d[g]).name+\u0027\" with a frame whose name of type \"number\" also equates to \"\u0027+g+\u0027\". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.\u0027),5\u003d\u003d\u003dM\u0026\u0026o.warn(\"addFrames: This API call has yielded too many of these warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.\")),d[m]\u003d{name:m},p.push({frame:h.supplyFrameDefaults(e[n]),index:r\u0026\u0026void 0!\u003d\u003dr[n]\u0026\u0026null!\u003d\u003dr[n]?r[n]:f+n})}p.sort((function(t,e){return t.index\u003ee.index?-1:t.index\u003ce.index?1:0}));var x\u003d[],b\u003d[],_\u003dl.length;for(n\u003dp.length-1;n\u003e\u003d0;n--){if(\"number\"\u003d\u003dtypeof(i\u003dp[n].frame).name\u0026\u0026o.warn(\"Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings\"),!i.name)for(;u[i.name\u003d\"frame \"+t._transitionData._counter++];);if(u[i.name]){for(a\u003d0;a\u003cl.length\u0026\u0026(l[a]||{}).name!\u003d\u003di.name;a++);x.push({type:\"replace\",index:a,value:i}),b.unshift({type:\"replace\",index:a,value:l[a]})}else s\u003dMath.max(0,Math.min(p[n].index,_)),x.push({type:\"insert\",index:s,value:i}),b.unshift({type:\"delete\",index:s}),_++}var w\u003dh.modifyFrames,T\u003dh.modifyFrames,k\u003d[t,b],A\u003d[t,x];return c\u0026\u0026c.add(t,w,k,T,A),h.modifyFrames(t,x)},r.deleteFrames\u003dfunction(t,e){if(t\u003do.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t);var r,n,i\u003dt._transitionData._frames,a\u003d[],s\u003d[];if(!e)for(e\u003d[],r\u003d0;r\u003ci.length;r++)e.push(r);for((e\u003de.slice()).sort(),r\u003de.length-1;r\u003e\u003d0;r--)n\u003de[r],a.push({type:\"delete\",index:n}),s.unshift({type:\"insert\",index:n,value:i[n]});var l\u003dh.modifyFrames,u\u003dh.modifyFrames,f\u003d[t,s],p\u003d[t,a];return c\u0026\u0026c.add(t,l,f,u,p),h.modifyFrames(t,a)},r.addTraces\u003dfunction t(e,n,i){e\u003do.getGraphDiv(e);var a,s,l\u003d[],u\u003dr.deleteTraces,f\u003dt,h\u003d[e,l],p\u003d[e,n];for(function(t,e,r){var n,i;if(!Array.isArray(t.data))throw new Error(\"gd.data must be an array.\");if(void 0\u003d\u003d\u003de)throw new Error(\"traces must be defined.\");for(Array.isArray(e)||(e\u003d[e]),n\u003d0;n\u003ce.length;n++)if(\"object\"!\u003dtypeof(i\u003de[n])||Array.isArray(i)||null\u003d\u003d\u003di)throw new Error(\"all values in traces array must be non-array objects\");if(void 0\u003d\u003d\u003dr||Array.isArray(r)||(r\u003d[r]),void 0!\u003d\u003dr\u0026\u0026r.length!\u003d\u003de.length)throw new Error(\"if indices is specified, traces.length must equal indices.length\")}(e,n,i),Array.isArray(n)||(n\u003d[n]),n\u003dn.map((function(t){return o.extendFlat({},t)})),_.cleanData(n),a\u003d0;a\u003cn.length;a++)e.data.push(n[a]);for(a\u003d0;a\u003cn.length;a++)l.push(-n.length+a);if(void 0\u003d\u003d\u003di)return s\u003dr.redraw(e),c.add(e,u,h,f,p),s;Array.isArray(i)||(i\u003d[i]);try{I(e,l,i)}catch(t){throw e.data.splice(e.data.length-n.length,n.length),t}return c.startSequence(e),c.add(e,u,h,f,p),s\u003dr.moveTraces(e,l,i),c.stopSequence(e),s},r.deleteTraces\u003dfunction t(e,n){e\u003do.getGraphDiv(e);var i,a,s\u003d[],l\u003dr.addTraces,u\u003dt,f\u003d[e,s,n],h\u003d[e,n];if(void 0\u003d\u003d\u003dn)throw new Error(\"indices must be an integer or array of integers.\");for(Array.isArray(n)||(n\u003d[n]),P(e,n,\"indices\"),(n\u003dC(n,e.data.length-1)).sort(o.sorterDes),i\u003d0;i\u003cn.length;i+\u003d1)a\u003de.data.splice(n[i],1)[0],s.push(a);var p\u003dr.redraw(e);return c.add(e,l,f,u,h),p},r.extendTraces\u003dfunction t(e,n,i,a){function s(t,e,r){var n,i;if(o.isTypedArray(t))if(r\u003c0){var a\u003dnew t.constructor(0),s\u003dz(t,e);r\u003c0?(n\u003ds,i\u003da):(n\u003da,i\u003ds)}else if(n\u003dnew t.constructor(r),i\u003dnew t.constructor(t.length+e.length-r),r\u003d\u003d\u003de.length)n.set(e),i.set(t);else if(r\u003ce.length){var l\u003de.length-r;n.set(e.subarray(l)),i.set(t),i.set(e.subarray(0,l),t.length)}else{var c\u003dr-e.length,u\u003dt.length-c;n.set(t.subarray(u)),n.set(e,c),i.set(t.subarray(0,u))}else n\u003dt.concat(e),i\u003dr\u003e\u003d0\u0026\u0026r\u003cn.length?n.splice(0,n.length-r):[];return[n,i]}var l\u003dO(e\u003do.getGraphDiv(e),n,i,a,s),u\u003dr.redraw(e),f\u003d[e,l.update,i,l.maxPoints];return c.add(e,r.prependTraces,f,t,arguments),u},r.moveTraces\u003dfunction t(e,n,i){var a,s\u003d[],l\u003d[],u\u003dt,f\u003dt,h\u003d[e\u003do.getGraphDiv(e),i,n],p\u003d[e,n,i];if(I(e,n,i),n\u003dArray.isArray(n)?n:[n],void 0\u003d\u003d\u003di)for(i\u003d[],a\u003d0;a\u003cn.length;a++)i.push(-n.length+a);for(i\u003dArray.isArray(i)?i:[i],n\u003dC(n,e.data.length-1),i\u003dC(i,e.data.length-1),a\u003d0;a\u003ce.data.length;a++)-1\u003d\u003d\u003dn.indexOf(a)\u0026\u0026s.push(e.data[a]);for(a\u003d0;a\u003cn.length;a++)l.push({newIndex:i[a],trace:e.data[n[a]]});for(l.sort((function(t,e){return t.newIndex-e.newIndex})),a\u003d0;a\u003cl.length;a+\u003d1)s.splice(l[a].newIndex,0,l[a].trace);e.data\u003ds;var d\u003dr.redraw(e);return c.add(e,u,h,f,p),d},r.prependTraces\u003dfunction t(e,n,i,a){function s(t,e,r){var n,i;if(o.isTypedArray(t))if(r\u003c\u003d0){var a\u003dnew t.constructor(0),s\u003dz(e,t);r\u003c0?(n\u003ds,i\u003da):(n\u003da,i\u003ds)}else if(n\u003dnew t.constructor(r),i\u003dnew t.constructor(t.length+e.length-r),r\u003d\u003d\u003de.length)n.set(e),i.set(t);else if(r\u003ce.length){var l\u003de.length-r;n.set(e.subarray(0,l)),i.set(e.subarray(l)),i.set(t,l)}else{var c\u003dr-e.length;n.set(e),n.set(t.subarray(0,c),e.length),i.set(t.subarray(c))}else n\u003de.concat(t),i\u003dr\u003e\u003d0\u0026\u0026r\u003cn.length?n.splice(r,n.length):[];return[n,i]}var l\u003dO(e\u003do.getGraphDiv(e),n,i,a,s),u\u003dr.redraw(e),f\u003d[e,l.update,i,l.maxPoints];return c.add(e,r.extendTraces,f,t,arguments),u},r.newPlot\u003dfunction(t,e,n,i){return t\u003do.getGraphDiv(t),h.cleanPlot([],{},t._fullData||[],t._fullLayout||{}),h.purge(t),r._doPlot(t,e,n,i)},r._doPlot\u003dfunction(t,e,i,a){var s;if(t\u003do.getGraphDiv(t),l.init(t),o.isPlainObject(e)){var c\u003de;e\u003dc.data,i\u003dc.layout,a\u003dc.config,s\u003dc.frames}if(!1\u003d\u003d\u003dl.triggerHandler(t,\"plotly_beforeplot\",[e,i,a]))return Promise.reject();e||i||o.isPlotDiv(t)||o.warn(\"Calling _doPlot as if redrawing but this container doesn\u0027t yet have a plot.\",t),L(t,a),i||(i\u003d{}),n.select(t).classed(\"js-plotly-plot\",!0),d.makeTester(),Array.isArray(t._promises)||(t._promises\u003d[]);var f\u003d0\u003d\u003d\u003d(t.data||[]).length\u0026\u0026Array.isArray(e);Array.isArray(e)\u0026\u0026(_.cleanData(e),f?t.data\u003de:t.data.push.apply(t.data,e),t.empty\u003d!1),t.layout\u0026\u0026!f||(t.layout\u003d_.cleanLayout(i)),h.supplyDefaults(t);var m\u003dt._fullLayout,y\u003dm._has(\"cartesian\");m._replotting\u003d!0,(f||m._shouldCreateBgLayer)\u0026\u0026(!function(t){var e\u003dn.select(t),r\u003dt._fullLayout;if(r._calcInverseTransform\u003dat,r._calcInverseTransform(t),r._container\u003de.selectAll(\".plot-container\").data([0]),r._container.enter().insert(\"div\",\":first-child\").classed(\"plot-container\",!0).classed(\"plotly\",!0),r._paperdiv\u003dr._container.selectAll(\".svg-container\").data([0]),r._paperdiv.enter().append(\"div\").classed(\"user-select-none\",!0).classed(\"svg-container\",!0).style(\"position\",\"relative\"),r._glcontainer\u003dr._paperdiv.selectAll(\".gl-container\").data([{}]),r._glcontainer.enter().append(\"div\").classed(\"gl-container\",!0),r._paperdiv.selectAll(\".main-svg\").remove(),r._paperdiv.select(\".modebar-container\").remove(),r._paper\u003dr._paperdiv.insert(\"svg\",\":first-child\").classed(\"main-svg\",!0),r._toppaper\u003dr._paperdiv.append(\"svg\").classed(\"main-svg\",!0),r._modebardiv\u003dr._paperdiv.append(\"div\"),delete r._modeBar,r._hoverpaper\u003dr._paperdiv.append(\"svg\").classed(\"main-svg\",!0),!r._uid){var i\u003d{};n.selectAll(\"defs\").each((function(){this.id\u0026\u0026(i[this.id.split(\"-\")[1]]\u003d1)})),r._uid\u003do.randstr(i)}r._paperdiv.selectAll(\".main-svg\").attr(v.svgAttrs),r._defs\u003dr._paper.append(\"defs\").attr(\"id\",\"defs-\"+r._uid),r._clips\u003dr._defs.append(\"g\").classed(\"clips\",!0),r._topdefs\u003dr._toppaper.append(\"defs\").attr(\"id\",\"topdefs-\"+r._uid),r._topclips\u003dr._topdefs.append(\"g\").classed(\"clips\",!0),r._bgLayer\u003dr._paper.append(\"g\").classed(\"bglayer\",!0),r._draggers\u003dr._paper.append(\"g\").classed(\"draglayer\",!0);var a\u003dr._paper.append(\"g\").classed(\"layer-below\",!0);r._imageLowerLayer\u003da.append(\"g\").classed(\"imagelayer\",!0),r._shapeLowerLayer\u003da.append(\"g\").classed(\"shapelayer\",!0),r._cartesianlayer\u003dr._paper.append(\"g\").classed(\"cartesianlayer\",!0),r._polarlayer\u003dr._paper.append(\"g\").classed(\"polarlayer\",!0),r._ternarylayer\u003dr._paper.append(\"g\").classed(\"ternarylayer\",!0),r._geolayer\u003dr._paper.append(\"g\").classed(\"geolayer\",!0),r._funnelarealayer\u003dr._paper.append(\"g\").classed(\"funnelarealayer\",!0),r._pielayer\u003dr._paper.append(\"g\").classed(\"pielayer\",!0),r._iciclelayer\u003dr._paper.append(\"g\").classed(\"iciclelayer\",!0),r._treemaplayer\u003dr._paper.append(\"g\").classed(\"treemaplayer\",!0),r._sunburstlayer\u003dr._paper.append(\"g\").classed(\"sunburstlayer\",!0),r._indicatorlayer\u003dr._toppaper.append(\"g\").classed(\"indicatorlayer\",!0),r._glimages\u003dr._paper.append(\"g\").classed(\"glimages\",!0);var s\u003dr._toppaper.append(\"g\").classed(\"layer-above\",!0);r._imageUpperLayer\u003ds.append(\"g\").classed(\"imagelayer\",!0),r._shapeUpperLayer\u003ds.append(\"g\").classed(\"shapelayer\",!0),r._infolayer\u003dr._toppaper.append(\"g\").classed(\"infolayer\",!0),r._menulayer\u003dr._toppaper.append(\"g\").classed(\"menulayer\",!0),r._zoomlayer\u003dr._toppaper.append(\"g\").classed(\"zoomlayer\",!0),r._hoverlayer\u003dr._hoverpaper.append(\"g\").classed(\"hoverlayer\",!0),r._modebardiv.classed(\"modebar-container\",!0).style(\"position\",\"absolute\").style(\"top\",\"0px\").style(\"right\",\"0px\"),t.emit(\"plotly_framework\")}(t),m._shouldCreateBgLayer\u0026\u0026delete m._shouldCreateBgLayer),d.initGradients(t),d.initPatterns(t),f\u0026\u0026p.saveShowSpikeInitial(t);var x\u003d!t.calcdata||t.calcdata.length!\u003d\u003d(t._fullData||[]).length;x\u0026\u0026h.doCalcdata(t);for(var b\u003d0;b\u003ct.calcdata.length;b++)t.calcdata[b][0].trace\u003dt._fullData[b];t._context.responsive?t._responsiveChartHandler||(t._responsiveChartHandler\u003dfunction(){o.isHidden(t)||h.resize(t)},window.addEventListener(\"resize\",t._responsiveChartHandler)):o.clearResponsive(t);var T\u003do.extendFlat({},m._size),k\u003d0;function M(){if(h.clearAutoMarginIds(t),w.drawMarginPushers(t),p.allowAutoMargin(t),m._has(\"pie\"))for(var e\u003dt._fullData,r\u003d0;r\u003ce.length;r++){var n\u003de[r];\"pie\"\u003d\u003d\u003dn.type\u0026\u0026n.automargin\u0026\u0026h.allowAutoMargin(t,\"pie.\"+n.uid+\".automargin\")}return h.doAutoMargin(t),h.previousPromises(t)}function S(){t._transitioning||(w.doAutoRangeAndConstraints(t),f\u0026\u0026p.saveRangeInitial(t),u.getComponentMethod(\"rangeslider\",\"calcAutorange\")(t))}var E\u003d[h.previousPromises,function(){if(s)return r.addFrames(t,s)},function e(){for(var r\u003dm._basePlotModules,n\u003d0;n\u003cr.length;n++)r[n].drawFramework\u0026\u0026r[n].drawFramework(t);if(!m._glcanvas\u0026\u0026m._has(\"gl\")\u0026\u0026(m._glcanvas\u003dm._glcontainer.selectAll(\".gl-canvas\").data([{key:\"contextLayer\",context:!0,pick:!1},{key:\"focusLayer\",context:!1,pick:!1},{key:\"pickLayer\",context:!1,pick:!0}],(function(t){return t.key})),m._glcanvas.enter().append(\"canvas\").attr(\"class\",(function(t){return\"gl-canvas gl-canvas-\"+t.key.replace(\"Layer\",\"\")})).style({position:\"absolute\",top:0,left:0,overflow:\"visible\",\"pointer-events\":\"none\"})),m._glcanvas){m._glcanvas.attr(\"width\",m.width).attr(\"height\",m.height);var i\u003dm._glcanvas.data()[0].regl;if(i\u0026\u0026(Math.floor(m.width)!\u003d\u003di._gl.drawingBufferWidth||Math.floor(m.height)!\u003d\u003di._gl.drawingBufferHeight)){var a\u003d\"WebGL context buffer and canvas dimensions do not match due to browser/WebGL bug.\";if(!k)return o.log(a+\" Clearing graph and plotting again.\"),h.cleanPlot([],{},t._fullData,m),h.supplyDefaults(t),m\u003dt._fullLayout,h.doCalcdata(t),k++,e();o.error(a)}}return\"h\"\u003d\u003d\u003dm.modebar.orientation?m._modebardiv.style(\"height\",null).style(\"width\",\"100%\"):m._modebardiv.style(\"width\",null).style(\"height\",m.height+\"px\"),h.previousPromises(t)},M,function(){if(h.didMarginChange(T,m._size))return o.syncOrAsync([M,w.layoutStyles],t)}];y\u0026\u0026E.push((function(){if(x)return o.syncOrAsync([u.getComponentMethod(\"shapes\",\"calcAutorange\"),u.getComponentMethod(\"annotations\",\"calcAutorange\"),S],t);S()})),E.push(w.layoutStyles),y\u0026\u0026E.push((function(){return p.draw(t,f?\"\":\"redraw\")}),(function(t){t._fullLayout._insideTickLabelsAutorange\u0026\u0026U(t,t._fullLayout._insideTickLabelsAutorange).then((function(){t._fullLayout._insideTickLabelsAutorange\u003dvoid 0}))})),E.push(w.drawData,w.finalDraw,g,h.addLinks,h.rehover,h.redrag,h.doAutoMargin,(function(t){t._fullLayout._insideTickLabelsAutorange\u0026\u0026f\u0026\u0026p.saveRangeInitial(t,!0)}),h.previousPromises);var C\u003do.syncOrAsync(E,t);return C\u0026\u0026C.then||(C\u003dPromise.resolve()),C.then((function(){return A(t),t}))},r.purge\u003dfunction(t){var e\u003d(t\u003do.getGraphDiv(t))._fullLayout||{},r\u003dt._fullData||[];return h.cleanPlot([],{},r,e),h.purge(t),l.purge(t),e._container\u0026\u0026e._container.remove(),delete t._context,t},r.react\u003dfunction(t,e,n,i){var a,l;t\u003do.getGraphDiv(t),_.clearPromiseQueue(t);var c\u003dt._fullData,p\u003dt._fullLayout;if(o.isPlotDiv(t)\u0026\u0026c\u0026\u0026p){if(o.isPlainObject(e)){var d\u003de;e\u003dd.data,n\u003dd.layout,i\u003dd.config,a\u003dd.frames}var m\u003d!1;if(i){var g\u003do.extendDeep({},t._context);t._context\u003dvoid 0,L(t,i),m\u003dfunction t(e,r){var n;for(n in e)if(\"_\"!\u003d\u003dn.charAt(0)){var i\u003de[n],a\u003dr[n];if(i!\u003d\u003da)if(o.isPlainObject(i)\u0026\u0026o.isPlainObject(a)){if(t(i,a))return!0}else{if(!Array.isArray(i)||!Array.isArray(a))return!0;if(i.length!\u003d\u003da.length)return!0;for(var s\u003d0;s\u003ci.length;s++)if(i[s]!\u003d\u003da[s]){if(!o.isPlainObject(i[s])||!o.isPlainObject(a[s]))return!0;if(t(i[s],a[s]))return!0}}}}(g,t._context)}t.data\u003de||[],_.cleanData(t.data),t.layout\u003dn||{},_.cleanLayout(t.layout),function(t,e,r,n){var i,a,l,c,u,f,h,p,d\u003dn._preGUI,m\u003d[],g\u003d{};for(i in d){if(u\u003d$(i,K)){if(a\u003du.attr||u.head+\".uirevision\",(c\u003d(l\u003ds(n,a).get())\u0026\u0026tt(a,e))\u0026\u0026c\u003d\u003d\u003dl\u0026\u0026(null\u003d\u003d\u003d(f\u003dd[i])\u0026\u0026(f\u003dvoid 0),nt(p\u003d(h\u003ds(e,i)).get(),f))){void 0\u003d\u003d\u003dp\u0026\u0026\"autorange\"\u003d\u003d\u003di.substr(i.length-9)\u0026\u0026m.push(i.substr(0,i.length-10)),h.set(R(s(n,i).get()));continue}}else o.warn(\"unrecognized GUI edit: \"+i);delete d[i],\"range[\"\u003d\u003d\u003di.substr(i.length-8,6)\u0026\u0026(g[i.substr(0,i.length-9)]\u003d1)}for(var v\u003d0;v\u003cm.length;v++){var y\u003dm[v];if(g[y]){var x\u003ds(e,y).get();x\u0026\u0026delete x.autorange}}var b\u003dn._tracePreGUI;for(var _ in b){var w,T\u003db[_],k\u003dnull;for(i in T){if(!k){var M\u003det(_,r);if(M\u003c0){delete b[_];break}var A\u003drt(_,t,(w\u003dr[M]._fullInput).index);if(A\u003c0){delete b[_];break}k\u003dt[A]}if(u\u003d$(i,Q)){if(u.attr?c\u003d(l\u003ds(n,u.attr).get())\u0026\u0026tt(u.attr,e):(l\u003dw.uirevision,void 0\u003d\u003d\u003d(c\u003dk.uirevision)\u0026\u0026(c\u003de.uirevision)),c\u0026\u0026c\u003d\u003d\u003dl\u0026\u0026(null\u003d\u003d\u003d(f\u003dT[i])\u0026\u0026(f\u003dvoid 0),nt(p\u003d(h\u003ds(k,i)).get(),f))){h.set(R(s(w,i).get()));continue}}else o.warn(\"unrecognized GUI edit: \"+i+\" in trace uid \"+_);delete T[i]}}}(t.data,t.layout,c,p),h.supplyDefaults(t,{skipUpdateCalc:!0});var v\u003dt._fullData,y\u003dt._fullLayout,x\u003dvoid 0\u003d\u003d\u003dy.datarevision,b\u003dy.transition,k\u003dfunction(t,e,r,n,i){var a\u003dT.layoutFlags();function o(t){return f.getLayoutValObject(r,t)}a.arrays\u003d{},a.rangesAltered\u003d{},a.nChanges\u003d0,a.nChangesAnim\u003d0,it(e,r,[],{getValObject:o,flags:a,immutable:n,transition:i,gd:t}),(a.plot||a.calc)\u0026\u0026(a.layoutReplot\u003d!0);i\u0026\u0026a.nChanges\u0026\u0026a.nChangesAnim\u0026\u0026(a.anim\u003da.nChanges\u003d\u003d\u003da.nChangesAnim?\"all\":\"some\");return a}(t,p,y,x,b),M\u003dk.newDataRevision,S\u003dfunction(t,e,r,n,i,a){var o\u003de.length\u003d\u003d\u003dr.length;if(!i\u0026\u0026!o)return{fullReplot:!0,calc:!0};var s,l,c\u003dT.traceFlags();c.arrays\u003d{},c.nChanges\u003d0,c.nChangesAnim\u003d0;var u\u003d{getValObject:function(t){var e\u003df.getTraceValObject(l,t);return!l._module.animatable\u0026\u0026e.anim\u0026\u0026(e.anim\u003d!1),e},flags:c,immutable:n,transition:i,newDataRevision:a,gd:t},p\u003d{};for(s\u003d0;s\u003ce.length;s++)if(r[s]){if(l\u003dr[s]._fullInput,h.hasMakesDataTransform(l)\u0026\u0026(l\u003dr[s]),p[l.uid])continue;p[l.uid]\u003d1,it(e[s]._fullInput,l,[],u)}(c.calc||c.plot)\u0026\u0026(c.fullReplot\u003d!0);i\u0026\u0026c.nChanges\u0026\u0026c.nChangesAnim\u0026\u0026(c.anim\u003dc.nChanges\u003d\u003d\u003dc.nChangesAnim\u0026\u0026o?\"all\":\"some\");return c}(t,c,v,x,b,M);if(X(t)\u0026\u0026(k.layoutReplot\u003d!0),S.calc||k.calc){t.calcdata\u003dvoid 0;for(var E\u003dObject.getOwnPropertyNames(y),C\u003d0;C\u003cE.length;C++){var P\u003dE[C],I\u003dP.substring(0,5);if(\"xaxis\"\u003d\u003d\u003dI||\"yaxis\"\u003d\u003d\u003dI){var O\u003dy[P]._emptyCategories;O\u0026\u0026O()}}}else h.supplyDefaultsUpdateCalc(t.calcdata,v);var z\u003d[];if(a\u0026\u0026(t._transitionData\u003d{},h.createTransitionData(t),z.push((function(){return r.addFrames(t,a)}))),y.transition\u0026\u0026!m\u0026\u0026(S.anim||k.anim))k.ticks\u0026\u0026z.push(w.doTicksRelayout),h.doCalcdata(t),w.doAutoRangeAndConstraints(t),z.push((function(){return h.transitionFromReact(t,S,k,p)}));else if(S.fullReplot||k.layoutReplot||m)t._fullLayout._skipDefaults\u003d!0,z.push(r._doPlot);else{for(var D in k.arrays){var F\u003dk.arrays[D];if(F.length){var B\u003du.getComponentMethod(D,\"drawOne\");if(B!\u003d\u003do.noop)for(var N\u003d0;N\u003cF.length;N++)B(t,F[N]);else{var j\u003du.getComponentMethod(D,\"draw\");if(j\u003d\u003d\u003do.noop)throw new Error(\"cannot draw components: \"+D);j(t)}}}z.push(h.previousPromises),S.style\u0026\u0026z.push(w.doTraceStyle),(S.colorbars||k.colorbars)\u0026\u0026z.push(w.doColorBars),k.legend\u0026\u0026z.push(w.doLegend),k.layoutstyle\u0026\u0026z.push(w.layoutStyles),k.axrange\u0026\u0026q(z),k.ticks\u0026\u0026z.push(w.doTicksRelayout),k.modebar\u0026\u0026z.push(w.doModeBar),k.camera\u0026\u0026z.push(w.doCamera),z.push(A)}z.push(h.rehover,h.redrag),(l\u003do.syncOrAsync(z,t))\u0026\u0026l.then||(l\u003dPromise.resolve(t))}else l\u003dr.newPlot(t,e,n,i);return l.then((function(){return t.emit(\"plotly_react\",{data:e,layout:n}),t}))},r.redraw\u003dfunction(t){if(t\u003do.getGraphDiv(t),!o.isPlotDiv(t))throw new Error(\"This element is not a Plotly plot: \"+t);return _.cleanData(t.data),_.cleanLayout(t.layout),t.calcdata\u003dvoid 0,r._doPlot(t).then((function(){return t.emit(\"plotly_redraw\"),t}))},r.relayout\u003dU,r.restyle\u003dD,r.setPlotConfig\u003dfunction(t){return o.extendFlat(x,t)},r.update\u003dZ,r._guiRelayout\u003dJ(U),r._guiRestyle\u003dJ(D),r._guiUpdate\u003dJ(Z),r._storeDirectGUIEdit\u003dfunction(t,e,r){for(var n in r){B(n,s(t,n).get(),r[n],e)}}},{\"../components/color\":662,\"../components/drawing\":684,\"../constants/xmlns_namespaces\":776,\"../lib\":799,\"../lib/events\":788,\"../lib/queue\":815,\"../plots/cartesian/axes\":849,\"../plots/cartesian/constants\":856,\"../plots/cartesian/graph_interact\":859,\"../plots/cartesian/select\":869,\"../plots/plots\":913,\"../registry\":927,\"./edit_types\":831,\"./helpers\":832,\"./manage_arrays\":834,\"./plot_config\":836,\"./plot_schema\":837,\"./subroutines\":839,\"@plotly/d3\":58,\"fast-isnumeric\":245,\"has-hover\":439}],836:[function(t,e,r){\"use strict\";var n\u003d{staticPlot:{valType:\"boolean\",dflt:!1},plotlyServerURL:{valType:\"string\",dflt:\"\"},editable:{valType:\"boolean\",dflt:!1},edits:{annotationPosition:{valType:\"boolean\",dflt:!1},annotationTail:{valType:\"boolean\",dflt:!1},annotationText:{valType:\"boolean\",dflt:!1},axisTitleText:{valType:\"boolean\",dflt:!1},colorbarPosition:{valType:\"boolean\",dflt:!1},colorbarTitleText:{valType:\"boolean\",dflt:!1},legendPosition:{valType:\"boolean\",dflt:!1},legendText:{valType:\"boolean\",dflt:!1},shapePosition:{valType:\"boolean\",dflt:!1},titleText:{valType:\"boolean\",dflt:!1}},autosizable:{valType:\"boolean\",dflt:!1},responsive:{valType:\"boolean\",dflt:!1},fillFrame:{valType:\"boolean\",dflt:!1},frameMargins:{valType:\"number\",dflt:0,min:0,max:.5},scrollZoom:{valType:\"flaglist\",flags:[\"cartesian\",\"gl3d\",\"geo\",\"mapbox\"],extras:[!0,!1],dflt:\"gl3d+geo+mapbox\"},doubleClick:{valType:\"enumerated\",values:[!1,\"reset\",\"autosize\",\"reset+autosize\"],dflt:\"reset+autosize\"},doubleClickDelay:{valType:\"number\",dflt:300,min:0},showAxisDragHandles:{valType:\"boolean\",dflt:!0},showAxisRangeEntryBoxes:{valType:\"boolean\",dflt:!0},showTips:{valType:\"boolean\",dflt:!0},showLink:{valType:\"boolean\",dflt:!1},linkText:{valType:\"string\",dflt:\"Edit chart\",noBlank:!0},sendData:{valType:\"boolean\",dflt:!0},showSources:{valType:\"any\",dflt:!1},displayModeBar:{valType:\"enumerated\",values:[\"hover\",!0,!1],dflt:\"hover\"},showSendToCloud:{valType:\"boolean\",dflt:!1},showEditInChartStudio:{valType:\"boolean\",dflt:!1},modeBarButtonsToRemove:{valType:\"any\",dflt:[]},modeBarButtonsToAdd:{valType:\"any\",dflt:[]},modeBarButtons:{valType:\"any\",dflt:!1},toImageButtonOptions:{valType:\"any\",dflt:{}},displaylogo:{valType:\"boolean\",dflt:!0},watermark:{valType:\"boolean\",dflt:!1},plotGlPixelRatio:{valType:\"number\",dflt:2,min:1,max:4},setBackground:{valType:\"any\",dflt:\"transparent\"},topojsonURL:{valType:\"string\",noBlank:!0,dflt:\"https://cdn.plot.ly/\"},mapboxAccessToken:{valType:\"string\",dflt:null},logging:{valType:\"integer\",min:0,max:2,dflt:1},notifyOnLogging:{valType:\"integer\",min:0,max:2,dflt:0},queueLength:{valType:\"integer\",min:0,dflt:0},globalTransforms:{valType:\"any\",dflt:[]},locale:{valType:\"string\",dflt:\"en-US\"},locales:{valType:\"any\",dflt:{}}},i\u003d{};!function t(e,r){for(var n in e){var i\u003de[n];i.valType?r[n]\u003di.dflt:(r[n]||(r[n]\u003d{}),t(i,r[n]))}}(n,i),e.exports\u003d{configAttributes:n,dfltConfig:i}},{}],837:[function(t,e,r){\"use strict\";var n\u003dt(\"../registry\"),i\u003dt(\"../lib\"),a\u003dt(\"../plots/attributes\"),o\u003dt(\"../plots/layout_attributes\"),s\u003dt(\"../plots/frame_attributes\"),l\u003dt(\"../plots/animation_attributes\"),c\u003dt(\"./plot_config\").configAttributes,u\u003dt(\"./edit_types\"),f\u003di.extendDeepAll,h\u003di.isPlainObject,p\u003di.isArrayOrTypedArray,d\u003di.nestedProperty,m\u003di.valObjectMeta,g\u003d[\"_isSubplotObj\",\"_isLinkedToArray\",\"_arrayAttrRegexps\",\"_deprecated\"];function v(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(y(e[r]))r++;else if(r\u003ce.length)return!1;for(;r\u003ce.length;r++){var n\u003dt[e[r]];if(!h(n))break;if(t\u003dn,r\u003d\u003d\u003de.length-1)break;if(t._isLinkedToArray){if(!y(e[++r]))return!1}else if(\"info_array\"\u003d\u003d\u003dt.valType){var i\u003de[++r];if(!y(i))return!1;var a\u003dt.items;if(Array.isArray(a)){if(i\u003e\u003da.length)return!1;if(2\u003d\u003d\u003dt.dimensions){if(r++,e.length\u003d\u003d\u003dr)return t;var o\u003de[r];if(!y(o))return!1;t\u003da[i][o]}else t\u003da[i]}else t\u003da}}return t}function y(t){return t\u003d\u003d\u003dMath.round(t)\u0026\u0026t\u003e\u003d0}function x(){var t,e,r\u003d{};for(t in f(r,o),n.subplotsRegistry){if((e\u003dn.subplotsRegistry[t]).layoutAttributes)if(Array.isArray(e.attr))for(var i\u003d0;i\u003ce.attr.length;i++)w(r,e,e.attr[i]);else w(r,e,\"subplot\"\u003d\u003d\u003de.attr?e.name:e.attr)}for(t in n.componentsRegistry){var a\u003d(e\u003dn.componentsRegistry[t]).schema;if(a\u0026\u0026(a.subplots||a.layout)){var s\u003da.subplots;if(s\u0026\u0026s.xaxis\u0026\u0026!s.yaxis)for(var l in s.xaxis)delete r.yaxis[l]}else\"colorscale\"\u003d\u003d\u003de.name?f(r,e.layoutAttributes):e.layoutAttributes\u0026\u0026T(r,e.layoutAttributes,e.name)}return{layoutAttributes:_(r)}}function b(){var t\u003d{frames:f({},s)};return _(t),t.frames}function _(t){return function(t){r.crawl(t,(function(t,e,n){r.isValObject(t)?!0!\u003d\u003dt.arrayOk\u0026\u0026\"data_array\"!\u003d\u003dt.valType||(n[e+\"src\"]\u003d{valType:\"string\",editType:\"none\"}):h(t)\u0026\u0026(t.role\u003d\"object\")}))}(t),function(t){r.crawl(t,(function(t,e,r){if(t){var n\u003dt._isLinkedToArray;n\u0026\u0026(delete t._isLinkedToArray,r[e]\u003d{items:{}},r[e].items[n]\u003dt,r[e].role\u003d\"object\")}}))}(t),function(t){!function t(e){for(var r in e)if(h(e[r]))t(e[r]);else if(Array.isArray(e[r]))for(var n\u003d0;n\u003ce[r].length;n++)t(e[r][n]);else e[r]instanceof RegExp\u0026\u0026(e[r]\u003de[r].toString())}(t)}(t),t}function w(t,e,r){var n\u003dd(t,r),i\u003df({},e.layoutAttributes);i._isSubplotObj\u003d!0,n.set(i)}function T(t,e,r){var n\u003dd(t,r);n.set(f(n.get()||{},e))}r.IS_SUBPLOT_OBJ\u003d\"_isSubplotObj\",r.IS_LINKED_TO_ARRAY\u003d\"_isLinkedToArray\",r.DEPRECATED\u003d\"_deprecated\",r.UNDERSCORE_ATTRS\u003dg,r.get\u003dfunction(){var t\u003d{};n.allTypes.forEach((function(e){t[e]\u003dfunction(t){var e,i;e\u003dn.modules[t]._module,i\u003de.basePlotModule;var o\u003d{type:null},s\u003df({},a),l\u003df({},e.attributes);r.crawl(l,(function(t,e,r,n,i){d(s,i).set(void 0),void 0\u003d\u003d\u003dt\u0026\u0026d(l,i).set(void 0)})),f(o,s),n.traceIs(t,\"noOpacity\")\u0026\u0026delete o.opacity;n.traceIs(t,\"showLegend\")||(delete o.showlegend,delete o.legendgroup);n.traceIs(t,\"noHover\")\u0026\u0026(delete o.hoverinfo,delete o.hoverlabel);e.selectPoints||delete o.selectedpoints;f(o,l),i.attributes\u0026\u0026f(o,i.attributes);o.type\u003dt;var c\u003d{meta:e.meta||{},categories:e.categories||{},animatable:Boolean(e.animatable),type:t,attributes:_(o)};if(e.layoutAttributes){var u\u003d{};f(u,e.layoutAttributes),c.layoutAttributes\u003d_(u)}e.animatable||r.crawl(c,(function(t){r.isValObject(t)\u0026\u0026\"anim\"in t\u0026\u0026delete t.anim}));return c}(e)}));var e\u003d{};return Object.keys(n.transformsRegistry).forEach((function(t){e[t]\u003dfunction(t){var e\u003dn.transformsRegistry[t],r\u003df({},e.attributes);return Object.keys(n.componentsRegistry).forEach((function(e){var i\u003dn.componentsRegistry[e];i.schema\u0026\u0026i.schema.transforms\u0026\u0026i.schema.transforms[t]\u0026\u0026Object.keys(i.schema.transforms[t]).forEach((function(e){T(r,i.schema.transforms[t][e],e)}))})),{attributes:_(r)}}(t)})),{defs:{valObjects:m,metaKeys:g.concat([\"description\",\"role\",\"editType\",\"impliedEdits\"]),editType:{traces:u.traces,layout:u.layout},impliedEdits:{}},traces:t,layout:x(),transforms:e,frames:b(),animation:_(l),config:_(c)}},r.crawl\u003dfunction(t,e,n,i){var a\u003dn||0;i\u003di||\"\",Object.keys(t).forEach((function(n){var o\u003dt[n];if(-1\u003d\u003d\u003dg.indexOf(n)){var s\u003d(i?i+\".\":\"\")+n;e(o,n,t,a,s),r.isValObject(o)||h(o)\u0026\u0026\"impliedEdits\"!\u003d\u003dn\u0026\u0026r.crawl(o,e,a+1,s)}}))},r.isValObject\u003dfunction(t){return t\u0026\u0026void 0!\u003d\u003dt.valType},r.findArrayAttributes\u003dfunction(t){var e,n,i\u003d[],o\u003d[],s\u003d[];function l(t,r,a,l){o\u003do.slice(0,l).concat([r]),s\u003ds.slice(0,l).concat([t\u0026\u0026t._isLinkedToArray]),t\u0026\u0026(\"data_array\"\u003d\u003d\u003dt.valType||!0\u003d\u003d\u003dt.arrayOk)\u0026\u0026!(\"colorbar\"\u003d\u003d\u003do[l-1]\u0026\u0026(\"ticktext\"\u003d\u003d\u003dr||\"tickvals\"\u003d\u003d\u003dr))\u0026\u0026function t(e,r,a){var l\u003de[o[r]],c\u003da+o[r];if(r\u003d\u003d\u003do.length-1)p(l)\u0026\u0026i.push(n+c);else if(s[r]){if(Array.isArray(l))for(var u\u003d0;u\u003cl.length;u++)h(l[u])\u0026\u0026t(l[u],r+1,c+\"[\"+u+\"].\")}else h(l)\u0026\u0026t(l,r+1,c+\".\")}(e,0,\"\")}e\u003dt,n\u003d\"\",r.crawl(a,l),t._module\u0026\u0026t._module.attributes\u0026\u0026r.crawl(t._module.attributes,l);var c\u003dt.transforms;if(c)for(var u\u003d0;u\u003cc.length;u++){var f\u003dc[u],d\u003df._module;d\u0026\u0026(n\u003d\"transforms[\"+u+\"].\",e\u003df,r.crawl(d.attributes,l))}return i},r.getTraceValObject\u003dfunction(t,e){var r,i,o\u003de[0],s\u003d1;if(\"transforms\"\u003d\u003d\u003do){if(1\u003d\u003d\u003de.length)return a.transforms;var l\u003dt.transforms;if(!Array.isArray(l)||!l.length)return!1;var c\u003de[1];if(!y(c)||c\u003e\u003dl.length)return!1;i\u003d(r\u003d(n.transformsRegistry[l[c].type]||{}).attributes)\u0026\u0026r[e[2]],s\u003d3}else{var u\u003dt._module;if(u||(u\u003d(n.modules[t.type||a.type.dflt]||{})._module),!u)return!1;if(!(i\u003d(r\u003du.attributes)\u0026\u0026r[o])){var f\u003du.basePlotModule;f\u0026\u0026f.attributes\u0026\u0026(i\u003df.attributes[o])}i||(i\u003da[o])}return v(i,e,s)},r.getLayoutValObject\u003dfunction(t,e){return v(function(t,e){var r,i,a,s,l\u003dt._basePlotModules;if(l){var c;for(r\u003d0;r\u003cl.length;r++){if((a\u003dl[r]).attrRegex\u0026\u0026a.attrRegex.test(e)){if(a.layoutAttrOverrides)return a.layoutAttrOverrides;!c\u0026\u0026a.layoutAttributes\u0026\u0026(c\u003da.layoutAttributes)}var u\u003da.baseLayoutAttrOverrides;if(u\u0026\u0026e in u)return u[e]}if(c)return c}var f\u003dt._modules;if(f)for(r\u003d0;r\u003cf.length;r++)if((s\u003df[r].layoutAttributes)\u0026\u0026e in s)return s[e];for(i in n.componentsRegistry){if(\"colorscale\"\u003d\u003d\u003d(a\u003dn.componentsRegistry[i]).name\u0026\u00260\u003d\u003d\u003de.indexOf(\"coloraxis\"))return a.layoutAttributes[e];if(!a.schema\u0026\u0026e\u003d\u003d\u003da.name)return a.layoutAttributes}return e in o\u0026\u0026o[e]}(t,e[0]),e,1)}},{\"../lib\":799,\"../plots/animation_attributes\":843,\"../plots/attributes\":845,\"../plots/frame_attributes\":879,\"../plots/layout_attributes\":904,\"../registry\":927,\"./edit_types\":831,\"./plot_config\":836}],838:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plots/attributes\"),a\u003d{name:{valType:\"string\",editType:\"none\"}};function o(t){return t\u0026\u0026\"string\"\u003d\u003dtypeof t}function s(t){var e\u003dt.length-1;return\"s\"!\u003d\u003dt.charAt(e)\u0026\u0026n.warn(\"bad argument to arrayDefaultKey: \"+t),t.substr(0,t.length-1)+\"defaults\"}a.templateitemname\u003d{valType:\"string\",editType:\"calc\"},r.templatedArray\u003dfunction(t,e){return e._isLinkedToArray\u003dt,e.name\u003da.name,e.templateitemname\u003da.templateitemname,e},r.traceTemplater\u003dfunction(t){var e,r,a\u003d{};for(e in t)r\u003dt[e],Array.isArray(r)\u0026\u0026r.length\u0026\u0026(a[e]\u003d0);return{newTrace:function(o){var s\u003d{type:e\u003dn.coerce(o,{},i,\"type\"),_template:null};if(e in a){r\u003dt[e];var l\u003da[e]%r.length;a[e]++,s._template\u003dr[l]}return s}}},r.newContainer\u003dfunction(t,e,r){var i\u003dt._template,a\u003di\u0026\u0026(i[e]||r\u0026\u0026i[r]);return n.isPlainObject(a)||(a\u003dnull),t[e]\u003d{_template:a}},r.arrayTemplater\u003dfunction(t,e,r){var n\u003dt._template,i\u003dn\u0026\u0026n[s(e)],a\u003dn\u0026\u0026n[e];Array.isArray(a)\u0026\u0026a.length||(a\u003d[]);var l\u003d{};return{newItem:function(t){var e\u003d{name:t.name,_input:t},n\u003de.templateitemname\u003dt.templateitemname;if(!o(n))return e._template\u003di,e;for(var s\u003d0;s\u003ca.length;s++){var c\u003da[s];if(c.name\u003d\u003d\u003dn)return l[n]\u003d1,e._template\u003dc,e}return e[r]\u003dt[r]||!1,e._template\u003d!1,e},defaultItems:function(){for(var t\u003d[],e\u003d0;e\u003ca.length;e++){var r\u003da[e],n\u003dr.name;if(o(n)\u0026\u0026!l[n]){var i\u003d{_template:r,name:n,_input:{_templateitemname:n}};i.templateitemname\u003dr.templateitemname,t.push(i),l[n]\u003d1}}return t}}},r.arrayDefaultKey\u003ds,r.arrayEditor\u003dfunction(t,e,r){var i\u003d(n.nestedProperty(t,e).get()||[]).length,a\u003dr._index,o\u003da\u003e\u003di\u0026\u0026(r._input||{})._templateitemname;o\u0026\u0026(a\u003di);var s,l\u003de+\"[\"+a+\"]\";function c(){s\u003d{},o\u0026\u0026(s[l]\u003d{},s[l].templateitemname\u003do)}function u(t,e){o?n.nestedProperty(s[l],t).set(e):s[l+\".\"+t]\u003de}function f(){var t\u003ds;return c(),t}return c(),{modifyBase:function(t,e){s[t]\u003de},modifyItem:u,getUpdateObj:f,applyUpdate:function(e,r){e\u0026\u0026u(e,r);var i\u003df();for(var a in i)n.nestedProperty(t,a).set(i[a])}}}},{\"../lib\":799,\"../plots/attributes\":845}],839:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../registry\"),a\u003dt(\"../plots/plots\"),o\u003dt(\"../lib\"),s\u003dt(\"../lib/clear_gl_canvases\"),l\u003dt(\"../components/color\"),c\u003dt(\"../components/drawing\"),u\u003dt(\"../components/titles\"),f\u003dt(\"../components/modebar\"),h\u003dt(\"../plots/cartesian/axes\"),p\u003dt(\"../constants/alignment\"),d\u003dt(\"../plots/cartesian/constraints\"),m\u003dd.enforce,g\u003dd.clean,v\u003dt(\"../plots/cartesian/autorange\").doAutoRange;function y(t,e,r){for(var n\u003d0;n\u003cr.length;n++){var i\u003dr[n][0],a\u003dr[n][1];if(!(i[0]\u003e\u003dt[1]||i[1]\u003c\u003dt[0])\u0026\u0026(a[0]\u003ce[1]\u0026\u0026a[1]\u003ee[0]))return!0}return!1}function x(t){var e,i,s,u,d,m,g\u003dt._fullLayout,v\u003dg._size,x\u003dv.p,_\u003dh.list(t,\"\",!0);if(g._paperdiv.style({width:t._context.responsive\u0026\u0026g.autosize\u0026\u0026!t._context._hasZeroWidth\u0026\u0026!t.layout.width?\"100%\":g.width+\"px\",height:t._context.responsive\u0026\u0026g.autosize\u0026\u0026!t._context._hasZeroHeight\u0026\u0026!t.layout.height?\"100%\":g.height+\"px\"}).selectAll(\".main-svg\").call(c.setSize,g.width,g.height),t._context.setBackground(t,g.paper_bgcolor),r.drawMainTitle(t),f.manage(t),!g._has(\"cartesian\"))return a.previousPromises(t);function T(t,e,r){var n\u003dt._lw/2;return\"x\"\u003d\u003d\u003dt._id.charAt(0)?e?\"top\"\u003d\u003d\u003dr?e._offset-x-n:e._offset+e._length+x+n:v.t+v.h*(1-(t.position||0))+n%1:e?\"right\"\u003d\u003d\u003dr?e._offset+e._length+x+n:e._offset-x-n:v.l+v.w*(t.position||0)+n%1}for(e\u003d0;e\u003c_.length;e++){var k\u003d(u\u003d_[e])._anchorAxis;u._linepositions\u003d{},u._lw\u003dc.crispRound(t,u.linewidth,1),u._mainLinePosition\u003dT(u,k,u.side),u._mainMirrorPosition\u003du.mirror\u0026\u0026k?T(u,k,p.OPPOSITE_SIDE[u.side]):null}var M\u003d[],A\u003d[],S\u003d[],E\u003d1\u003d\u003d\u003dl.opacity(g.paper_bgcolor)\u0026\u00261\u003d\u003d\u003dl.opacity(g.plot_bgcolor)\u0026\u0026g.paper_bgcolor\u003d\u003d\u003dg.plot_bgcolor;for(i in g._plots)if((s\u003dg._plots[i]).mainplot)s.bg\u0026\u0026s.bg.remove(),s.bg\u003dvoid 0;else{var L\u003ds.xaxis.domain,C\u003ds.yaxis.domain,P\u003ds.plotgroup;if(y(L,C,S)){var I\u003dP.node(),O\u003ds.bg\u003do.ensureSingle(P,\"rect\",\"bg\");I.insertBefore(O.node(),I.childNodes[0]),A.push(i)}else P.select(\"rect.bg\").remove(),S.push([L,C]),E||(M.push(i),A.push(i))}var z,D,R,F,B,N,j,U,V,q,H,G,Y,W\u003dg._bgLayer.selectAll(\".bg\").data(M);for(W.enter().append(\"rect\").classed(\"bg\",!0),W.exit().remove(),W.each((function(t){g._plots[t].bg\u003dn.select(this)})),e\u003d0;e\u003cA.length;e++)s\u003dg._plots[A[e]],d\u003ds.xaxis,m\u003ds.yaxis,s.bg\u0026\u0026void 0!\u003d\u003dd._offset\u0026\u0026void 0!\u003d\u003dm._offset\u0026\u0026s.bg.call(c.setRect,d._offset-x,m._offset-x,d._length+2*x,m._length+2*x).call(l.fill,g.plot_bgcolor).style(\"stroke-width\",0);if(!g._hasOnlyLargeSploms)for(i in g._plots){s\u003dg._plots[i],d\u003ds.xaxis,m\u003ds.yaxis;var X,Z,J\u003ds.clipId\u003d\"clip\"+g._uid+i+\"plot\",K\u003do.ensureSingleById(g._clips,\"clipPath\",J,(function(t){t.classed(\"plotclip\",!0).append(\"rect\")}));s.clipRect\u003dK.select(\"rect\").attr({width:d._length,height:m._length}),c.setTranslate(s.plot,d._offset,m._offset),s._hasClipOnAxisFalse?(X\u003dnull,Z\u003dJ):(X\u003dJ,Z\u003dnull),c.setClipUrl(s.plot,X,t),s.layerClipId\u003dZ}function Q(t){return\"M\"+z+\",\"+t+\"H\"+D}function $(t){return\"M\"+d._offset+\",\"+t+\"h\"+d._length}function tt(t){return\"M\"+t+\",\"+U+\"V\"+j}function et(t){return\"M\"+t+\",\"+m._offset+\"v\"+m._length}function rt(t,e,r){if(!t.showline||i!\u003d\u003dt._mainSubplot)return\"\";if(!t._anchorAxis)return r(t._mainLinePosition);var n\u003de(t._mainLinePosition);return t.mirror\u0026\u0026(n+\u003de(t._mainMirrorPosition)),n}for(i in g._plots){s\u003dg._plots[i],d\u003ds.xaxis,m\u003ds.yaxis;var nt\u003d\"M0,0\";b(d,i)\u0026\u0026(B\u003dw(d,\"left\",m,_),z\u003dd._offset-(B?x+B:0),N\u003dw(d,\"right\",m,_),D\u003dd._offset+d._length+(N?x+N:0),R\u003dT(d,m,\"bottom\"),F\u003dT(d,m,\"top\"),!(Y\u003d!d._anchorAxis||i!\u003d\u003dd._mainSubplot)||\"allticks\"!\u003d\u003dd.mirror\u0026\u0026\"all\"!\u003d\u003dd.mirror||(d._linepositions[i]\u003d[R,F]),nt\u003drt(d,Q,$),Y\u0026\u0026d.showline\u0026\u0026(\"all\"\u003d\u003d\u003dd.mirror||\"allticks\"\u003d\u003d\u003dd.mirror)\u0026\u0026(nt+\u003dQ(R)+Q(F)),s.xlines.style(\"stroke-width\",d._lw+\"px\").call(l.stroke,d.showline?d.linecolor:\"rgba(0,0,0,0)\")),s.xlines.attr(\"d\",nt);var it\u003d\"M0,0\";b(m,i)\u0026\u0026(H\u003dw(m,\"bottom\",d,_),j\u003dm._offset+m._length+(H?x:0),G\u003dw(m,\"top\",d,_),U\u003dm._offset-(G?x:0),V\u003dT(m,d,\"left\"),q\u003dT(m,d,\"right\"),!(Y\u003d!m._anchorAxis||i!\u003d\u003dm._mainSubplot)||\"allticks\"!\u003d\u003dm.mirror\u0026\u0026\"all\"!\u003d\u003dm.mirror||(m._linepositions[i]\u003d[V,q]),it\u003drt(m,tt,et),Y\u0026\u0026m.showline\u0026\u0026(\"all\"\u003d\u003d\u003dm.mirror||\"allticks\"\u003d\u003d\u003dm.mirror)\u0026\u0026(it+\u003dtt(V)+tt(q)),s.ylines.style(\"stroke-width\",m._lw+\"px\").call(l.stroke,m.showline?m.linecolor:\"rgba(0,0,0,0)\")),s.ylines.attr(\"d\",it)}return h.makeClipPaths(t),a.previousPromises(t)}function b(t,e){return(t.ticks||t.showline)\u0026\u0026(e\u003d\u003d\u003dt._mainSubplot||\"all\"\u003d\u003d\u003dt.mirror||\"allticks\"\u003d\u003d\u003dt.mirror)}function _(t,e,r){if(!r.showline||!r._lw)return!1;if(\"all\"\u003d\u003d\u003dr.mirror||\"allticks\"\u003d\u003d\u003dr.mirror)return!0;var n\u003dr._anchorAxis;if(!n)return!1;var i\u003dp.FROM_BL[e];return r.side\u003d\u003d\u003de?n.domain[i]\u003d\u003d\u003dt.domain[i]:r.mirror\u0026\u0026n.domain[1-i]\u003d\u003d\u003dt.domain[1-i]}function w(t,e,r,n){if(_(t,e,r))return r._lw;for(var i\u003d0;i\u003cn.length;i++){var a\u003dn[i];if(a._mainAxis\u003d\u003d\u003dr._mainAxis\u0026\u0026_(t,e,a))return a._lw}return 0}function T(t,e){var r\u003dt.title,n\u003dt._size,i\u003d0;switch(\"start\"\u003d\u003d\u003de?i\u003dr.pad.l:\"end\"\u003d\u003d\u003de\u0026\u0026(i\u003d-r.pad.r),r.xref){case\"paper\":return n.l+n.w*r.x+i;case\"container\":default:return t.width*r.x+i}}function k(t,e){var r\u003dt.title,n\u003dt._size,i\u003d0;if(\"0em\"!\u003d\u003de\u0026\u0026e?e\u003d\u003d\u003dp.CAP_SHIFT+\"em\"\u0026\u0026(i\u003dr.pad.t):i\u003d-r.pad.b,\"auto\"\u003d\u003d\u003dr.y)return n.t/2;switch(r.yref){case\"paper\":return n.t+n.h-n.h*r.y+i;case\"container\":default:return t.height-t.height*r.y+i}}r.layoutStyles\u003dfunction(t){return o.syncOrAsync([a.doAutoMargin,x],t)},r.drawMainTitle\u003dfunction(t){var e\u003dt._fullLayout,r\u003dfunction(t){var e\u003dt.title,r\u003d\"middle\";o.isRightAnchor(e)?r\u003d\"end\":o.isLeftAnchor(e)\u0026\u0026(r\u003d\"start\");return r}(e),n\u003dfunction(t){var e\u003dt.title,r\u003d\"0em\";o.isTopAnchor(e)?r\u003dp.CAP_SHIFT+\"em\":o.isMiddleAnchor(e)\u0026\u0026(r\u003dp.MID_SHIFT+\"em\");return r}(e);u.draw(t,\"gtitle\",{propContainer:e,propName:\"title.text\",placeholder:e._dfltTitle.plot,attributes:{x:T(e,r),y:k(e,n),\"text-anchor\":r,dy:n}})},r.doTraceStyle\u003dfunction(t){var e,n\u003dt.calcdata,o\u003d[];for(e\u003d0;e\u003cn.length;e++){var l\u003dn[e],c\u003dl[0]||{},u\u003dc.trace||{},f\u003du._module||{},h\u003df.arraysToCalcdata;h\u0026\u0026h(l,u);var p\u003df.editStyle;p\u0026\u0026o.push({fn:p,cd0:c})}if(o.length){for(e\u003d0;e\u003co.length;e++){var d\u003do[e];d.fn(t,d.cd0)}s(t),r.redrawReglTraces(t)}return a.style(t),i.getComponentMethod(\"legend\",\"draw\")(t),a.previousPromises(t)},r.doColorBars\u003dfunction(t){return i.getComponentMethod(\"colorbar\",\"draw\")(t),a.previousPromises(t)},r.layoutReplot\u003dfunction(t){var e\u003dt.layout;return t.layout\u003dvoid 0,i.call(\"_doPlot\",t,\"\",e)},r.doLegend\u003dfunction(t){return i.getComponentMethod(\"legend\",\"draw\")(t),a.previousPromises(t)},r.doTicksRelayout\u003dfunction(t){return h.draw(t,\"redraw\"),t._fullLayout._hasOnlyLargeSploms\u0026\u0026(i.subplotsRegistry.splom.updateGrid(t),s(t),r.redrawReglTraces(t)),r.drawMainTitle(t),a.previousPromises(t)},r.doModeBar\u003dfunction(t){var e\u003dt._fullLayout;f.manage(t);for(var r\u003d0;r\u003ce._basePlotModules.length;r++){var n\u003de._basePlotModules[r].updateFx;n\u0026\u0026n(t)}return a.previousPromises(t)},r.doCamera\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._subplots.gl3d,n\u003d0;n\u003cr.length;n++){var i\u003de[r[n]];i._scene.setViewport(i)}},r.drawData\u003dfunction(t){var e\u003dt._fullLayout;s(t);for(var n\u003de._basePlotModules,o\u003d0;o\u003cn.length;o++)n[o].plot(t);return r.redrawReglTraces(t),a.style(t),i.getComponentMethod(\"shapes\",\"draw\")(t),i.getComponentMethod(\"annotations\",\"draw\")(t),i.getComponentMethod(\"images\",\"draw\")(t),e._replotting\u003d!1,a.previousPromises(t)},r.redrawReglTraces\u003dfunction(t){var e\u003dt._fullLayout;if(e._has(\"regl\")){var r,n,i\u003dt._fullData,a\u003d[],s\u003d[];for(e._hasOnlyLargeSploms\u0026\u0026e._splomGrid.draw(),r\u003d0;r\u003ci.length;r++){var l\u003di[r];!0\u003d\u003d\u003dl.visible\u0026\u00260!\u003d\u003dl._length\u0026\u0026(\"splom\"\u003d\u003d\u003dl.type?e._splomScenes[l.uid].draw():\"scattergl\"\u003d\u003d\u003dl.type?o.pushUnique(a,l.xaxis+l.yaxis):\"scatterpolargl\"\u003d\u003d\u003dl.type\u0026\u0026o.pushUnique(s,l.subplot))}for(r\u003d0;r\u003ca.length;r++)(n\u003de._plots[a[r]])._scene\u0026\u0026n._scene.draw();for(r\u003d0;r\u003cs.length;r++)(n\u003de[s[r]]._subplot)._scene\u0026\u0026n._scene.draw()}},r.doAutoRangeAndConstraints\u003dfunction(t){for(var e,r\u003dh.list(t,\"\",!0),n\u003d{},i\u003d0;i\u003cr.length;i++)if(!n[(e\u003dr[i])._id]){n[e._id]\u003d1,g(t,e),v(t,e);var a\u003de._matchGroup;if(a)for(var o in a){var s\u003dh.getFromId(t,o);v(t,s,e.range),n[o]\u003d1}}m(t)},r.finalDraw\u003dfunction(t){i.getComponentMethod(\"rangeslider\",\"draw\")(t),i.getComponentMethod(\"rangeselector\",\"draw\")(t)},r.drawMarginPushers\u003dfunction(t){i.getComponentMethod(\"legend\",\"draw\")(t),i.getComponentMethod(\"rangeselector\",\"draw\")(t),i.getComponentMethod(\"sliders\",\"draw\")(t),i.getComponentMethod(\"updatemenus\",\"draw\")(t),i.getComponentMethod(\"colorbar\",\"draw\")(t)}},{\"../components/color\":662,\"../components/drawing\":684,\"../components/modebar\":725,\"../components/titles\":760,\"../constants/alignment\":767,\"../lib\":799,\"../lib/clear_gl_canvases\":783,\"../plots/cartesian/autorange\":848,\"../plots/cartesian/axes\":849,\"../plots/cartesian/constraints\":857,\"../plots/plots\":913,\"../registry\":927,\"@plotly/d3\":58}],840:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dn.isPlainObject,a\u003dt(\"./plot_schema\"),o\u003dt(\"../plots/plots\"),s\u003dt(\"../plots/attributes\"),l\u003dt(\"./plot_template\"),c\u003dt(\"./plot_config\").dfltConfig;function u(t,e){t\u003dn.extendDeep({},t);var r,a,o\u003dObject.keys(t).sort();function s(e,r,n){if(i(r)\u0026\u0026i(e))u(e,r);else if(Array.isArray(r)\u0026\u0026Array.isArray(e)){var o\u003dl.arrayTemplater({_template:t},n);for(a\u003d0;a\u003cr.length;a++){var s\u003dr[a],c\u003do.newItem(s)._template;c\u0026\u0026u(c,s)}var f\u003do.defaultItems();for(a\u003d0;a\u003cf.length;a++)r.push(f[a]._template);for(a\u003d0;a\u003cr.length;a++)delete r[a].templateitemname}}for(r\u003d0;r\u003co.length;r++){var c\u003do[r],h\u003dt[c];if(c in e?s(h,e[c],c):e[c]\u003dh,f(c)\u003d\u003d\u003dc)for(var p in e){var d\u003df(p);p\u003d\u003d\u003dd||d!\u003d\u003dc||p in t||s(h,e[p],c)}}}function f(t){return t.replace(/[0-9]+$/,\"\")}function h(t,e,r,a,o){var s\u003do\u0026\u0026r(o);for(var c in t){var u\u003dt[c],p\u003dm(t,c,a),d\u003dm(t,c,o),g\u003dr(d);if(!g){var v\u003df(c);v!\u003d\u003dc\u0026\u0026(g\u003dr(d\u003dm(t,v,o)))}if((!s||s!\u003d\u003dg)\u0026\u0026!(!g||g._noTemplating||\"data_array\"\u003d\u003d\u003dg.valType||g.arrayOk\u0026\u0026Array.isArray(u)))if(!g.valType\u0026\u0026i(u))h(u,e,r,p,d);else if(g._isLinkedToArray\u0026\u0026Array.isArray(u))for(var y\u003d!1,x\u003d0,b\u003d{},_\u003d0;_\u003cu.length;_++){var w\u003du[_];if(i(w)){var T\u003dw.name;if(T)b[T]||(h(w,e,r,m(u,x,p),m(u,x,d)),x++,b[T]\u003d1);else if(!y){var k\u003dm(t,l.arrayDefaultKey(c),a),M\u003dm(u,x,p);h(w,e,r,M,m(u,x,d));var A\u003dn.nestedProperty(e,M);n.nestedProperty(e,k).set(A.get()),A.set(null),y\u003d!0}}}else{n.nestedProperty(e,p).set(u)}}}function p(t,e){return a.getLayoutValObject(t,n.nestedProperty({},e).parts)}function d(t,e){return a.getTraceValObject(t,n.nestedProperty({},e).parts)}function m(t,e,r){return r?Array.isArray(t)?r+\"[\"+e+\"]\":r+\".\"+e:e}function g(t){for(var e\u003d0;e\u003ct.length;e++)if(i(t[e]))return!0}function v(t){var e;switch(t.code){case\"data\":e\u003d\"The template has no key data.\";break;case\"layout\":e\u003d\"The template has no key layout.\";break;case\"missing\":e\u003dt.path?\"There are no templates for item \"+t.path+\" with name \"+t.templateitemname:\"There are no templates for trace \"+t.index+\", of type \"+t.traceType+\".\";break;case\"unused\":e\u003dt.path?\"The template item at \"+t.path+\" was not used in constructing the plot.\":t.dataCount?\"Some of the templates of type \"+t.traceType+\" were not used. The template has \"+t.templateCount+\" traces, the data only has \"+t.dataCount+\" of this type.\":\"The template has \"+t.templateCount+\" traces of type \"+t.traceType+\" but there are none in the data.\";break;case\"reused\":e\u003d\"Some of the templates of type \"+t.traceType+\" were used more than once. The template has \"+t.templateCount+\" traces, the data has \"+t.dataCount+\" of this type.\"}return t.msg\u003de,t}r.makeTemplate\u003dfunction(t){t\u003dn.isPlainObject(t)?t:n.getGraphDiv(t),t\u003dn.extendDeep({_context:c},{data:t.data,layout:t.layout}),o.supplyDefaults(t);var e\u003dt.data||[],r\u003dt.layout||{};r._basePlotModules\u003dt._fullLayout._basePlotModules,r._modules\u003dt._fullLayout._modules;var a\u003d{data:{},layout:{}};e.forEach((function(t){var e\u003d{};h(t,e,d.bind(null,t));var r\u003dn.coerce(t,{},s,\"type\"),i\u003da.data[r];i||(i\u003da.data[r]\u003d[]),i.push(e)})),h(r,a.layout,p.bind(null,r)),delete a.layout.template;var l\u003dr.template;if(i(l)){var f,m,g,v,y,x,b\u003dl.layout;i(b)\u0026\u0026u(b,a.layout);var _\u003dl.data;if(i(_)){for(m in a.data)if(g\u003d_[m],Array.isArray(g)){for(x\u003d(y\u003da.data[m]).length,v\u003dg.length,f\u003d0;f\u003cx;f++)u(g[f%v],y[f]);for(f\u003dx;f\u003cv;f++)y.push(n.extendDeep({},g[f]))}for(m in _)m in a.data||(a.data[m]\u003dn.extendDeep([],_[m]))}}return a},r.validateTemplate\u003dfunction(t,e){var r\u003dn.extendDeep({},{_context:c,data:t.data,layout:t.layout}),a\u003dr.layout||{};i(e)||(e\u003da.template||{});var s\u003de.layout,l\u003de.data,u\u003d[];r.layout\u003da,r.layout.template\u003de,o.supplyDefaults(r);var h\u003dr._fullLayout,p\u003dr._fullData,d\u003d{};if(i(s)?(!function t(e,r){for(var n in e)if(\"_\"!\u003d\u003dn.charAt(0)\u0026\u0026i(e[n])){var a,o\u003df(n),s\u003d[];for(a\u003d0;a\u003cr.length;a++)s.push(m(e,n,r[a])),o!\u003d\u003dn\u0026\u0026s.push(m(e,o,r[a]));for(a\u003d0;a\u003cs.length;a++)d[s[a]]\u003d1;t(e[n],s)}}(h,[\"layout\"]),function t(e,r){for(var n in e)if(-1\u003d\u003d\u003dn.indexOf(\"defaults\")\u0026\u0026i(e[n])){var a\u003dm(e,n,r);d[a]?t(e[n],a):u.push({code:\"unused\",path:a})}}(s,\"layout\")):u.push({code:\"layout\"}),i(l)){for(var y,x\u003d{},b\u003d0;b\u003cp.length;b++){var _\u003dp[b];x[y\u003d_.type]\u003d(x[y]||0)+1,_._fullInput._template||u.push({code:\"missing\",index:_._fullInput.index,traceType:y})}for(y in l){var w\u003dl[y].length,T\u003dx[y]||0;w\u003eT?u.push({code:\"unused\",traceType:y,templateCount:w,dataCount:T}):T\u003ew\u0026\u0026u.push({code:\"reused\",traceType:y,templateCount:w,dataCount:T})}}else u.push({code:\"data\"});if(function t(e,r){for(var n in e)if(\"_\"!\u003d\u003dn.charAt(0)){var a\u003de[n],o\u003dm(e,n,r);i(a)?(Array.isArray(e)\u0026\u0026!1\u003d\u003d\u003da._template\u0026\u0026a.templateitemname\u0026\u0026u.push({code:\"missing\",path:o,templateitemname:a.templateitemname}),t(a,o)):Array.isArray(a)\u0026\u0026g(a)\u0026\u0026t(a,o)}}({data:p,layout:h},\"\"),u.length)return u.map(v)}},{\"../lib\":799,\"../plots/attributes\":845,\"../plots/plots\":913,\"./plot_config\":836,\"./plot_schema\":837,\"./plot_template\":838}],841:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"./plot_api\"),a\u003dt(\"../plots/plots\"),o\u003dt(\"../lib\"),s\u003dt(\"../snapshot/helpers\"),l\u003dt(\"../snapshot/tosvg\"),c\u003dt(\"../snapshot/svgtoimg\"),u\u003dt(\"../version\").version,f\u003d{format:{valType:\"enumerated\",values:[\"png\",\"jpeg\",\"webp\",\"svg\",\"full-json\"],dflt:\"png\"},width:{valType:\"number\",min:1},height:{valType:\"number\",min:1},scale:{valType:\"number\",min:0,dflt:1},setBackground:{valType:\"any\",dflt:!1},imageDataOnly:{valType:\"boolean\",dflt:!1}};e.exports\u003dfunction(t,e){var r,h,p,d;function m(t){return!(t in e)||o.validate(e[t],f[t])}if(e\u003de||{},o.isPlainObject(t)?(r\u003dt.data||[],h\u003dt.layout||{},p\u003dt.config||{},d\u003d{}):(t\u003do.getGraphDiv(t),r\u003do.extendDeep([],t.data),h\u003do.extendDeep({},t.layout),p\u003dt._context,d\u003dt._fullLayout||{}),!m(\"width\")\u0026\u0026null!\u003d\u003de.width||!m(\"height\")\u0026\u0026null!\u003d\u003de.height)throw new Error(\"Height and width should be pixel values.\");if(!m(\"format\"))throw new Error(\"Export format is not \"+o.join2(f.format.values,\", \",\" or \")+\".\");var g\u003d{};function v(t,r){return o.coerce(e,g,f,t,r)}var y\u003dv(\"format\"),x\u003dv(\"width\"),b\u003dv(\"height\"),_\u003dv(\"scale\"),w\u003dv(\"setBackground\"),T\u003dv(\"imageDataOnly\"),k\u003ddocument.createElement(\"div\");k.style.position\u003d\"absolute\",k.style.left\u003d\"-5000px\",document.body.appendChild(k);var M\u003do.extendFlat({},h);x?M.width\u003dx:null\u003d\u003d\u003de.width\u0026\u0026n(d.width)\u0026\u0026(M.width\u003dd.width),b?M.height\u003db:null\u003d\u003d\u003de.height\u0026\u0026n(d.height)\u0026\u0026(M.height\u003dd.height);var A\u003do.extendFlat({},p,{_exportedPlot:!0,staticPlot:!0,setBackground:w}),S\u003ds.getRedrawFunc(k);function E(){return new Promise((function(t){setTimeout(t,s.getDelay(k._fullLayout))}))}function L(){return new Promise((function(t,e){var r\u003dl(k,y,_),n\u003dk._fullLayout.width,f\u003dk._fullLayout.height;function h(){i.purge(k),document.body.removeChild(k)}if(\"full-json\"\u003d\u003d\u003dy){var p\u003da.graphJson(k,!1,\"keepdata\",\"object\",!0,!0);return p.version\u003du,p\u003dJSON.stringify(p),h(),t(T?p:s.encodeJSON(p))}if(h(),\"svg\"\u003d\u003d\u003dy)return t(T?r:s.encodeSVG(r));var d\u003ddocument.createElement(\"canvas\");d.id\u003do.randstr(),c({format:y,width:n,height:f,scale:_,canvas:d,svg:r,promise:!0}).then(t).catch(e)}))}return new Promise((function(t,e){i.newPlot(k,r,M,A).then(S).then(E).then(L).then((function(e){t(function(t){return T?t.replace(s.IMAGE_URL_PREFIX,\"\"):t}(e))})).catch((function(t){e(t)}))}))}},{\"../lib\":799,\"../plots/plots\":913,\"../snapshot/helpers\":931,\"../snapshot/svgtoimg\":933,\"../snapshot/tosvg\":935,\"../version\":1400,\"./plot_api\":835,\"fast-isnumeric\":245}],842:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plots/plots\"),a\u003dt(\"./plot_schema\"),o\u003dt(\"./plot_config\").dfltConfig,s\u003dn.isPlainObject,l\u003dArray.isArray,c\u003dn.isArrayOrTypedArray;function u(t,e,r,i,a,o){o\u003do||[];for(var f\u003dObject.keys(t),h\u003d0;h\u003cf.length;h++){var p\u003df[h];if(\"transforms\"!\u003d\u003dp){var v\u003do.slice();v.push(p);var y\u003dt[p],x\u003de[p],b\u003dg(r,p),_\u003d(b||{}).valType,w\u003d\"info_array\"\u003d\u003d\u003d_,T\u003d\"colorscale\"\u003d\u003d\u003d_,k\u003d(b||{}).items;if(m(r,p))if(s(y)\u0026\u0026s(x)\u0026\u0026\"any\"!\u003d\u003d_)u(y,x,b,i,a,v);else if(w\u0026\u0026l(y)){y.length\u003ex.length\u0026\u0026i.push(d(\"unused\",a,v.concat(x.length)));var M,A,S,E,L,C\u003dx.length,P\u003dArray.isArray(k);if(P\u0026\u0026(C\u003dMath.min(C,k.length)),2\u003d\u003d\u003db.dimensions)for(A\u003d0;A\u003cC;A++)if(l(y[A])){y[A].length\u003ex[A].length\u0026\u0026i.push(d(\"unused\",a,v.concat(A,x[A].length)));var I\u003dx[A].length;for(M\u003d0;M\u003c(P?Math.min(I,k[A].length):I);M++)S\u003dP?k[A][M]:k,E\u003dy[A][M],L\u003dx[A][M],n.validate(E,S)?L!\u003d\u003dE\u0026\u0026L!\u003d\u003d+E\u0026\u0026i.push(d(\"dynamic\",a,v.concat(A,M),E,L)):i.push(d(\"value\",a,v.concat(A,M),E))}else i.push(d(\"array\",a,v.concat(A),y[A]));else for(A\u003d0;A\u003cC;A++)S\u003dP?k[A]:k,E\u003dy[A],L\u003dx[A],n.validate(E,S)?L!\u003d\u003dE\u0026\u0026L!\u003d\u003d+E\u0026\u0026i.push(d(\"dynamic\",a,v.concat(A),E,L)):i.push(d(\"value\",a,v.concat(A),E))}else if(b.items\u0026\u0026!w\u0026\u0026l(y)){var O,z,D\u003dk[Object.keys(k)[0]],R\u003d[];for(O\u003d0;O\u003cx.length;O++){var F\u003dx[O]._index||O;if((z\u003dv.slice()).push(F),s(y[F])\u0026\u0026s(x[O])){R.push(F);var B\u003dy[F],N\u003dx[O];s(B)\u0026\u0026!1!\u003d\u003dB.visible\u0026\u0026!1\u003d\u003d\u003dN.visible?i.push(d(\"invisible\",a,z)):u(B,N,D,i,a,z)}}for(O\u003d0;O\u003cy.length;O++)(z\u003dv.slice()).push(O),s(y[O])?-1\u003d\u003d\u003dR.indexOf(O)\u0026\u0026i.push(d(\"unused\",a,z)):i.push(d(\"object\",a,z,y[O]))}else!s(y)\u0026\u0026s(x)?i.push(d(\"object\",a,v,y)):c(y)||!c(x)||w||T?p in e?n.validate(y,b)?\"enumerated\"\u003d\u003d\u003db.valType\u0026\u0026(b.coerceNumber\u0026\u0026y!\u003d\u003d+x||y!\u003d\u003dx)\u0026\u0026i.push(d(\"dynamic\",a,v,y,x)):i.push(d(\"value\",a,v,y)):i.push(d(\"unused\",a,v,y)):i.push(d(\"array\",a,v,y));else i.push(d(\"schema\",a,v))}}return i}function f(t,e){for(var r\u003dt.layout.layoutAttributes,i\u003d0;i\u003ce.length;i++){var a\u003de[i],o\u003dt.traces[a.type],s\u003do.layoutAttributes;s\u0026\u0026(a.subplot?n.extendFlat(r[o.attributes.subplot.dflt],s):n.extendFlat(r,s))}return r}e.exports\u003dfunction(t,e){void 0\u003d\u003d\u003dt\u0026\u0026(t\u003d[]),void 0\u003d\u003d\u003de\u0026\u0026(e\u003d{});var r,c,h\u003da.get(),p\u003d[],m\u003d{_context:n.extendFlat({},o)};l(t)?(m.data\u003dn.extendDeep([],t),r\u003dt):(m.data\u003d[],r\u003d[],p.push(d(\"array\",\"data\"))),s(e)?(m.layout\u003dn.extendDeep({},e),c\u003de):(m.layout\u003d{},c\u003d{},arguments.length\u003e1\u0026\u0026p.push(d(\"object\",\"layout\"))),i.supplyDefaults(m);for(var g\u003dm._fullData,v\u003dr.length,y\u003d0;y\u003cv;y++){var x\u003dr[y],b\u003d[\"data\",y];if(s(x)){var _\u003dg[y],w\u003d_.type,T\u003dh.traces[w].attributes;T.type\u003d{valType:\"enumerated\",values:[w]},!1\u003d\u003d\u003d_.visible\u0026\u0026!1!\u003d\u003dx.visible\u0026\u0026p.push(d(\"invisible\",b)),u(x,_,T,p,b);var k\u003dx.transforms,M\u003d_.transforms;if(k){l(k)||p.push(d(\"array\",b,[\"transforms\"])),b.push(\"transforms\");for(var A\u003d0;A\u003ck.length;A++){var S\u003d[\"transforms\",A],E\u003dk[A].type;if(s(k[A])){var L\u003dh.transforms[E]?h.transforms[E].attributes:{};L.type\u003d{valType:\"enumerated\",values:Object.keys(h.transforms)},u(k[A],M[A],L,p,b,S)}else p.push(d(\"object\",b,S))}}}else p.push(d(\"object\",b))}var C\u003dm._fullLayout,P\u003df(h,g);return u(c,C,P,p,\"layout\"),0\u003d\u003d\u003dp.length?void 0:p};var h\u003d{object:function(t,e){return(\"layout\"\u003d\u003d\u003dt\u0026\u0026\"\"\u003d\u003d\u003de?\"The layout argument\":\"data\"\u003d\u003d\u003dt[0]\u0026\u0026\"\"\u003d\u003d\u003de?\"Trace \"+t[1]+\" in the data argument\":p(t)+\"key \"+e)+\" must be linked to an object container\"},array:function(t,e){return(\"data\"\u003d\u003d\u003dt?\"The data argument\":p(t)+\"key \"+e)+\" must be linked to an array container\"},schema:function(t,e){return p(t)+\"key \"+e+\" is not part of the schema\"},unused:function(t,e,r){var n\u003ds(r)?\"container\":\"key\";return p(t)+n+\" \"+e+\" did not get coerced\"},dynamic:function(t,e,r,n){return[p(t)+\"key\",e,\"(set to \u0027\"+r+\"\u0027)\",\"got reset to\",\"\u0027\"+n+\"\u0027\",\"during defaults.\"].join(\" \")},invisible:function(t,e){return(e?p(t)+\"item \"+e:\"Trace \"+t[1])+\" got defaulted to be not visible\"},value:function(t,e,r){return[p(t)+\"key \"+e,\"is set to an invalid value (\"+r+\")\"].join(\" \")}};function p(t){return l(t)?\"In data trace \"+t[1]+\", \":\"In \"+t+\", \"}function d(t,e,r,i,a){var o,s;r\u003dr||\"\",l(e)?(o\u003de[0],s\u003de[1]):(o\u003de,s\u003dnull);var c\u003dfunction(t){if(!l(t))return String(t);for(var e\u003d\"\",r\u003d0;r\u003ct.length;r++){var n\u003dt[r];\"number\"\u003d\u003dtypeof n?e\u003de.substr(0,e.length-1)+\"[\"+n+\"]\":e+\u003dn,r\u003ct.length-1\u0026\u0026(e+\u003d\".\")}return e}(r),u\u003dh[t](e,c,i,a);return n.log(u),{code:t,container:o,trace:s,path:r,astr:c,msg:u}}function m(t,e){var r\u003dy(e),n\u003dr.keyMinusId,i\u003dr.id;return!!(n in t\u0026\u0026t[n]._isSubplotObj\u0026\u0026i)||e in t}function g(t,e){return e in t?t[e]:t[y(e).keyMinusId]}var v\u003dn.counterRegex(\"([a-z]+)\");function y(t){var e\u003dt.match(v);return{keyMinusId:e\u0026\u0026e[1],id:e\u0026\u0026e[2]}}},{\"../lib\":799,\"../plots/plots\":913,\"./plot_config\":836,\"./plot_schema\":837}],843:[function(t,e,r){\"use strict\";e.exports\u003d{mode:{valType:\"enumerated\",dflt:\"afterall\",values:[\"immediate\",\"next\",\"afterall\"]},direction:{valType:\"enumerated\",values:[\"forward\",\"reverse\"],dflt:\"forward\"},fromcurrent:{valType:\"boolean\",dflt:!1},frame:{duration:{valType:\"number\",min:0,dflt:500},redraw:{valType:\"boolean\",dflt:!0}},transition:{duration:{valType:\"number\",min:0,dflt:500,editType:\"none\"},easing:{valType:\"enumerated\",dflt:\"cubic-in-out\",values:[\"linear\",\"quad\",\"cubic\",\"sin\",\"exp\",\"circle\",\"elastic\",\"back\",\"bounce\",\"linear-in\",\"quad-in\",\"cubic-in\",\"sin-in\",\"exp-in\",\"circle-in\",\"elastic-in\",\"back-in\",\"bounce-in\",\"linear-out\",\"quad-out\",\"cubic-out\",\"sin-out\",\"exp-out\",\"circle-out\",\"elastic-out\",\"back-out\",\"bounce-out\",\"linear-in-out\",\"quad-in-out\",\"cubic-in-out\",\"sin-in-out\",\"exp-in-out\",\"circle-in-out\",\"elastic-in-out\",\"back-in-out\",\"bounce-in-out\"],editType:\"none\"},ordering:{valType:\"enumerated\",values:[\"layout first\",\"traces first\"],dflt:\"layout first\",editType:\"none\"}}}},{}],844:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plot_api/plot_template\");e.exports\u003dfunction(t,e,r){var a,o,s\u003dr.name,l\u003dr.inclusionAttr||\"visible\",c\u003de[s],u\u003dn.isArrayOrTypedArray(t[s])?t[s]:[],f\u003de[s]\u003d[],h\u003di.arrayTemplater(e,s,l);for(a\u003d0;a\u003cu.length;a++){var p\u003du[a];n.isPlainObject(p)?o\u003dh.newItem(p):(o\u003dh.newItem({}))[l]\u003d!1,o._index\u003da,!1!\u003d\u003do[l]\u0026\u0026r.handleItemDefaults(p,o,e,r),f.push(o)}var d\u003dh.defaultItems();for(a\u003d0;a\u003cd.length;a++)(o\u003dd[a])._index\u003df.length,r.handleItemDefaults({},o,e,r,{}),f.push(o);if(n.isArrayOrTypedArray(c)){var m\u003dMath.min(c.length,f.length);for(a\u003d0;a\u003cm;a++)n.relinkPrivateKeys(f[a],c[a])}return f}},{\"../lib\":799,\"../plot_api/plot_template\":838}],845:[function(t,e,r){\"use strict\";var n\u003dt(\"./font_attributes\"),i\u003dt(\"../components/fx/attributes\");e.exports\u003d{type:{valType:\"enumerated\",values:[],dflt:\"scatter\",editType:\"calc+clearAxisTypes\",_noTemplating:!0},visible:{valType:\"enumerated\",values:[!0,!1,\"legendonly\"],dflt:!0,editType:\"calc\"},showlegend:{valType:\"boolean\",dflt:!0,editType:\"style\"},legendgroup:{valType:\"string\",dflt:\"\",editType:\"style\"},legendgrouptitle:{text:{valType:\"string\",dflt:\"\",editType:\"style\"},font:n({editType:\"style\"}),editType:\"style\"},legendrank:{valType:\"number\",dflt:1e3,editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,editType:\"style\"},name:{valType:\"string\",editType:\"style\"},uid:{valType:\"string\",editType:\"plot\",anim:!0},ids:{valType:\"data_array\",editType:\"calc\",anim:!0},customdata:{valType:\"data_array\",editType:\"calc\"},meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},selectedpoints:{valType:\"any\",editType:\"calc\"},hoverinfo:{valType:\"flaglist\",flags:[\"x\",\"y\",\"z\",\"text\",\"name\"],extras:[\"all\",\"none\",\"skip\"],arrayOk:!0,dflt:\"all\",editType:\"none\"},hoverlabel:i.hoverlabel,stream:{token:{valType:\"string\",noBlank:!0,strict:!0,editType:\"calc\"},maxpoints:{valType:\"number\",min:0,max:1e4,dflt:500,editType:\"calc\"},editType:\"calc\"},transforms:{_isLinkedToArray:\"transform\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"}}},{\"../components/fx/attributes\":693,\"./font_attributes\":878}],846:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003di.dateTime2ms,o\u003di.incrementMonth,s\u003dt(\"../../constants/numerical\").ONEAVGMONTH;e.exports\u003dfunction(t,e,r,i){if(\"date\"!\u003d\u003de.type)return i;var l\u003dt[r+\"periodalignment\"];if(!l)return i;var c,u\u003dt[r+\"period\"];if(n(u)){if((u\u003d+u)\u003c\u003d0)return i}else if(\"string\"\u003d\u003dtypeof u\u0026\u0026\"M\"\u003d\u003d\u003du.charAt(0)){var f\u003d+u.substring(1);if(!(f\u003e0\u0026\u0026Math.round(f)\u003d\u003d\u003df))return i;c\u003df}for(var h\u003de.calendar,p\u003d\"start\"\u003d\u003d\u003dl,d\u003d\"end\"\u003d\u003d\u003dl,m\u003dt[r+\"period0\"],g\u003da(m,h)||0,v\u003d[],y\u003di.length,x\u003d0;x\u003cy;x++){var b,_,w,T\u003di[x];if(c){for(b\u003dMath.round((T-g)/(c*s)),w\u003do(g,c*b,h);w\u003eT;)w\u003do(w,-c,h);for(;w\u003c\u003dT;)w\u003do(w,c,h);_\u003do(w,-c,h)}else{for(w\u003dg+(b\u003dMath.round((T-g)/u))*u;w\u003eT;)w-\u003du;for(;w\u003c\u003dT;)w+\u003du;_\u003dw-u}v[x]\u003dp?_:d?w:(_+w)/2}return v}},{\"../../constants/numerical\":775,\"../../lib\":799,\"fast-isnumeric\":245}],847:[function(t,e,r){\"use strict\";e.exports\u003d{xaxis:{valType:\"subplotid\",dflt:\"x\",editType:\"calc+clearAxisTypes\"},yaxis:{valType:\"subplotid\",dflt:\"y\",editType:\"calc+clearAxisTypes\"}}},{}],848:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../lib\"),o\u003dt(\"../../constants/numerical\").FP_SAFE,s\u003dt(\"../../registry\"),l\u003dt(\"../../components/drawing\"),c\u003dt(\"./axis_ids\"),u\u003dc.getFromId,f\u003dc.isLinked;function h(t,e){var r,n,i\u003d[],o\u003dt._fullLayout,s\u003dd(o,e,0),l\u003dd(o,e,1),c\u003dm(t,e),u\u003dc.min,f\u003dc.max;if(0\u003d\u003d\u003du.length||0\u003d\u003d\u003df.length)return a.simpleMap(e.range,e.r2l);var h\u003du[0].val,g\u003df[0].val;for(r\u003d1;r\u003cu.length\u0026\u0026h\u003d\u003d\u003dg;r++)h\u003dMath.min(h,u[r].val);for(r\u003d1;r\u003cf.length\u0026\u0026h\u003d\u003d\u003dg;r++)g\u003dMath.max(g,f[r].val);var v\u003d!1;if(e.range){var y\u003da.simpleMap(e.range,e.r2l);v\u003dy[1]\u003cy[0]}\"reversed\"\u003d\u003d\u003de.autorange\u0026\u0026(v\u003d!0,e.autorange\u003d!0);var x,b,_,w,T,k,M\u003de.rangemode,A\u003d\"tozero\"\u003d\u003d\u003dM,S\u003d\"nonnegative\"\u003d\u003d\u003dM,E\u003de._length,L\u003dE/10,C\u003d0;for(r\u003d0;r\u003cu.length;r++)for(x\u003du[r],n\u003d0;n\u003cf.length;n++)(k\u003d(b\u003df[n]).val-x.val-p(e,x.val,b.val))\u003e0\u0026\u0026((T\u003dE-s(x)-l(b))\u003eL?k/T\u003eC\u0026\u0026(_\u003dx,w\u003db,C\u003dk/T):k/E\u003eC\u0026\u0026(_\u003d{val:x.val,nopad:1},w\u003d{val:b.val,nopad:1},C\u003dk/E));if(h\u003d\u003d\u003dg){var P\u003dh-1,I\u003dh+1;if(A)if(0\u003d\u003d\u003dh)i\u003d[0,1];else{var O\u003d(h\u003e0?f:u).reduce((function(t,e){return Math.max(t,l(e))}),0),z\u003dh/(1-Math.min(.5,O/E));i\u003dh\u003e0?[0,z]:[z,0]}else i\u003dS?[Math.max(0,P),Math.max(1,I)]:[P,I]}else A?(_.val\u003e\u003d0\u0026\u0026(_\u003d{val:0,nopad:1}),w.val\u003c\u003d0\u0026\u0026(w\u003d{val:0,nopad:1})):S\u0026\u0026(_.val-C*s(_)\u003c0\u0026\u0026(_\u003d{val:0,nopad:1}),w.val\u003c\u003d0\u0026\u0026(w\u003d{val:1,nopad:1})),C\u003d(w.val-_.val-p(e,x.val,b.val))/(E-s(_)-l(w)),i\u003d[_.val-C*s(_),w.val+C*l(w)];return v\u0026\u0026i.reverse(),a.simpleMap(i,e.l2r||Number)}function p(t,e,r){var n\u003d0;if(t.rangebreaks)for(var i\u003dt.locateBreaks(e,r),a\u003d0;a\u003ci.length;a++){var o\u003di[a];n+\u003do.max-o.min}return n}function d(t,e,r){var i\u003d.05*e._length,o\u003de._anchorAxis||{};if(-1!\u003d\u003d(e.ticklabelposition||\"\").indexOf(\"inside\")||-1!\u003d\u003d(o.ticklabelposition||\"\").indexOf(\"inside\")){var s\u003d\"reversed\"\u003d\u003d\u003de.autorange;if(!s){var c\u003da.simpleMap(e.range,e.r2l);s\u003dc[1]\u003cc[0]}s\u0026\u0026(r\u003d!r)}var u\u003d0;return f(t,e._id)||(u\u003dfunction(t,e,r){var i\u003d0,o\u003d\"x\"\u003d\u003d\u003de._id.charAt(0);for(var s in t._plots){var c\u003dt._plots[s];if(e._id\u003d\u003d\u003dc.xaxis._id||e._id\u003d\u003d\u003dc.yaxis._id){var u\u003d(o?c.yaxis:c.xaxis)||{};if(-1!\u003d\u003d(u.ticklabelposition||\"\").indexOf(\"inside\")\u0026\u0026(!r\u0026\u0026(\"left\"\u003d\u003d\u003du.side||\"bottom\"\u003d\u003d\u003du.side)||r\u0026\u0026(\"top\"\u003d\u003d\u003du.side||\"right\"\u003d\u003d\u003du.side))){if(u._vals){var f\u003da.deg2rad(u._tickAngles[u._id+\"tick\"]||0),h\u003dMath.abs(Math.cos(f)),p\u003dMath.abs(Math.sin(f));if(!u._vals[0].bb){var d\u003du._id+\"tick\";u._selections[d].each((function(t){var e\u003dn.select(this);e.select(\".text-math-group\").empty()\u0026\u0026(t.bb\u003dl.bBox(e.node()))}))}for(var m\u003d0;m\u003cu._vals.length;m++){var g\u003du._vals[m].bb;if(g){var v\u003d6+g.width,y\u003d6+g.height;i\u003dMath.max(i,o?Math.max(v*h,y*p):Math.max(y*h,v*p))}}}\"inside\"\u003d\u003d\u003du.ticks\u0026\u0026\"inside\"\u003d\u003d\u003du.ticklabelposition\u0026\u0026(i+\u003du.ticklen||0)}}}return i}(t,e,r)),i\u003dMath.max(u,i),\"domain\"\u003d\u003d\u003de.constrain\u0026\u0026e._inputDomain\u0026\u0026(i*\u003d(e._inputDomain[1]-e._inputDomain[0])/(e.domain[1]-e.domain[0])),function(t){return t.nopad?0:t.pad+(t.extrapad?i:u)}}e.exports\u003d{getAutoRange:h,makePadFn:d,doAutoRange:function(t,e,r){if(e.setScale(),e.autorange){e.range\u003dr?r.slice():h(t,e),e._r\u003de.range.slice(),e._rl\u003da.simpleMap(e._r,e.r2l);var n\u003de._input,i\u003d{};i[e._attr+\".range\"]\u003de.range,i[e._attr+\".autorange\"]\u003de.autorange,s.call(\"_storeDirectGUIEdit\",t.layout,t._fullLayout._preGUI,i),n.range\u003de.range.slice(),n.autorange\u003de.autorange}var o\u003de._anchorAxis;if(o\u0026\u0026o.rangeslider){var l\u003do.rangeslider[e._name];l\u0026\u0026\"auto\"\u003d\u003d\u003dl.rangemode\u0026\u0026(l.range\u003dh(t,e)),o._input.rangeslider[e._name]\u003da.extendFlat({},l)}},findExtremes:function(t,e,r){r||(r\u003d{});t._m||t.setScale();var n,a,s,l,c,u,f,h,p,d\u003d[],m\u003d[],y\u003de.length,b\u003dr.padded||!1,_\u003dr.tozero\u0026\u0026(\"linear\"\u003d\u003d\u003dt.type||\"-\"\u003d\u003d\u003dt.type),w\u003d\"log\"\u003d\u003d\u003dt.type,T\u003d!1,k\u003dr.vpadLinearized||!1;function M(t){if(Array.isArray(t))return T\u003d!0,function(e){return Math.max(Number(t[e]||0),0)};var e\u003dMath.max(Number(t||0),0);return function(){return e}}var A\u003dM((t._m\u003e0?r.ppadplus:r.ppadminus)||r.ppad||0),S\u003dM((t._m\u003e0?r.ppadminus:r.ppadplus)||r.ppad||0),E\u003dM(r.vpadplus||r.vpad),L\u003dM(r.vpadminus||r.vpad);if(!T){if(h\u003d1/0,p\u003d-1/0,w)for(n\u003d0;n\u003cy;n++)(a\u003de[n])\u003ch\u0026\u0026a\u003e0\u0026\u0026(h\u003da),a\u003ep\u0026\u0026a\u003co\u0026\u0026(p\u003da);else for(n\u003d0;n\u003cy;n++)(a\u003de[n])\u003ch\u0026\u0026a\u003e-o\u0026\u0026(h\u003da),a\u003ep\u0026\u0026a\u003co\u0026\u0026(p\u003da);e\u003d[h,p],y\u003d2}var C\u003d{tozero:_,extrapad:b};function P(r){s\u003de[r],i(s)\u0026\u0026(u\u003dA(r),f\u003dS(r),k?(l\u003dt.c2l(s)-L(r),c\u003dt.c2l(s)+E(r)):(h\u003ds-L(r),p\u003ds+E(r),w\u0026\u0026h\u003cp/10\u0026\u0026(h\u003dp/10),l\u003dt.c2l(h),c\u003dt.c2l(p)),_\u0026\u0026(l\u003dMath.min(0,l),c\u003dMath.max(0,c)),x(l)\u0026\u0026g(d,l,f,C),x(c)\u0026\u0026v(m,c,u,C))}var I\u003dMath.min(6,y);for(n\u003d0;n\u003cI;n++)P(n);for(n\u003dy-1;n\u003e\u003dI;n--)P(n);return{min:d,max:m,opts:r}},concatExtremes:m};function m(t,e,r){var n,i,a,o\u003de._id,s\u003dt._fullData,l\u003dt._fullLayout,c\u003d[],f\u003d[];function h(t,e){for(n\u003d0;n\u003ce.length;n++){var r\u003dt[e[n]],s\u003d(r._extremes||{})[o];if(!0\u003d\u003d\u003dr.visible\u0026\u0026s){for(i\u003d0;i\u003cs.min.length;i++)a\u003ds.min[i],g(c,a.val,a.pad,{extrapad:a.extrapad});for(i\u003d0;i\u003cs.max.length;i++)a\u003ds.max[i],v(f,a.val,a.pad,{extrapad:a.extrapad})}}}if(h(s,e._traceIndices),h(l.annotations||[],e._annIndices||[]),h(l.shapes||[],e._shapeIndices||[]),e._matchGroup\u0026\u0026!r)for(var p in e._matchGroup)if(p!\u003d\u003de._id){var d\u003du(t,p),y\u003dm(t,d,!0),x\u003de._length/d._length;for(i\u003d0;i\u003cy.min.length;i++)a\u003dy.min[i],g(c,a.val,a.pad*x,{extrapad:a.extrapad});for(i\u003d0;i\u003cy.max.length;i++)a\u003dy.max[i],v(f,a.val,a.pad*x,{extrapad:a.extrapad})}return{min:c,max:f}}function g(t,e,r,n){y(t,e,r,n,b)}function v(t,e,r,n){y(t,e,r,n,_)}function y(t,e,r,n,i){for(var a\u003dn.tozero,o\u003dn.extrapad,s\u003d!0,l\u003d0;l\u003ct.length\u0026\u0026s;l++){var c\u003dt[l];if(i(c.val,e)\u0026\u0026c.pad\u003e\u003dr\u0026\u0026(c.extrapad||!o)){s\u003d!1;break}i(e,c.val)\u0026\u0026c.pad\u003c\u003dr\u0026\u0026(o||!c.extrapad)\u0026\u0026(t.splice(l,1),l--)}if(s){var u\u003da\u0026\u00260\u003d\u003d\u003de;t.push({val:e,pad:u?0:r,extrapad:!u\u0026\u0026o})}}function x(t){return i(t)\u0026\u0026Math.abs(t)\u003co}function b(t,e){return t\u003c\u003de}function _(t,e){return t\u003e\u003de}},{\"../../components/drawing\":684,\"../../constants/numerical\":775,\"../../lib\":799,\"../../registry\":927,\"./axis_ids\":853,\"@plotly/d3\":58,\"fast-isnumeric\":245}],849:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../plots/plots\"),o\u003dt(\"../../registry\"),s\u003dt(\"../../lib\"),l\u003ds.strTranslate,c\u003dt(\"../../lib/svg_text_utils\"),u\u003dt(\"../../components/titles\"),f\u003dt(\"../../components/color\"),h\u003dt(\"../../components/drawing\"),p\u003dt(\"./layout_attributes\"),d\u003dt(\"./clean_ticks\"),m\u003dt(\"../../constants/numerical\"),g\u003dm.ONEMAXYEAR,v\u003dm.ONEAVGYEAR,y\u003dm.ONEMINYEAR,x\u003dm.ONEMAXQUARTER,b\u003dm.ONEAVGQUARTER,_\u003dm.ONEMINQUARTER,w\u003dm.ONEMAXMONTH,T\u003dm.ONEAVGMONTH,k\u003dm.ONEMINMONTH,M\u003dm.ONEWEEK,A\u003dm.ONEDAY,S\u003dA/2,E\u003dm.ONEHOUR,L\u003dm.ONEMIN,C\u003dm.ONESEC,P\u003dm.MINUS_SIGN,I\u003dm.BADNUM,O\u003d{K:\"zeroline\"},z\u003d{K:\"gridline\",L:\"path\"},D\u003d{K:\"tick\",L:\"path\"},R\u003d{K:\"tick\",L:\"text\"},F\u003dt(\"../../constants/alignment\"),B\u003dF.MID_SHIFT,N\u003dF.CAP_SHIFT,j\u003dF.LINE_SPACING,U\u003dF.OPPOSITE_SIDE,V\u003de.exports\u003d{};V.setConvert\u003dt(\"./set_convert\");var q\u003dt(\"./axis_autotype\"),H\u003dt(\"./axis_ids\"),G\u003dH.idSort,Y\u003dH.isLinked;V.id2name\u003dH.id2name,V.name2id\u003dH.name2id,V.cleanId\u003dH.cleanId,V.list\u003dH.list,V.listIds\u003dH.listIds,V.getFromId\u003dH.getFromId,V.getFromTrace\u003dH.getFromTrace;var W\u003dt(\"./autorange\");V.getAutoRange\u003dW.getAutoRange,V.findExtremes\u003dW.findExtremes;function X(t){var e\u003d1e-4*(t[1]-t[0]);return[t[0]-e,t[1]+e]}V.coerceRef\u003dfunction(t,e,r,n,i,a){var o\u003dn.charAt(n.length-1),l\u003dr._fullLayout._subplots[o+\"axis\"],c\u003dn+\"ref\",u\u003d{};return i||(i\u003dl[0]||(\"string\"\u003d\u003dtypeof a?a:a[0])),a||(a\u003di),l\u003dl.concat(l.map((function(t){return t+\" domain\"}))),u[c]\u003d{valType:\"enumerated\",values:l.concat(a?\"string\"\u003d\u003dtypeof a?[a]:a:[]),dflt:i},s.coerce(t,e,u,c)},V.getRefType\u003dfunction(t){return void 0\u003d\u003d\u003dt?t:\"paper\"\u003d\u003d\u003dt?\"paper\":\"pixel\"\u003d\u003d\u003dt?\"pixel\":/( domain)$/.test(t)?\"domain\":\"range\"},V.coercePosition\u003dfunction(t,e,r,n,i,a){var o,l;if(\"range\"!\u003d\u003dV.getRefType(n))o\u003ds.ensureNumber,l\u003dr(i,a);else{var c\u003dV.getFromId(e,n);l\u003dr(i,a\u003dc.fraction2r(a)),o\u003dc.cleanPos}t[i]\u003do(l)},V.cleanPosition\u003dfunction(t,e,r){return(\"paper\"\u003d\u003d\u003dr||\"pixel\"\u003d\u003d\u003dr?s.ensureNumber:V.getFromId(e,r).cleanPos)(t)},V.redrawComponents\u003dfunction(t,e){e\u003de||V.listIds(t);var r\u003dt._fullLayout;function n(n,i,a,s){for(var l\u003do.getComponentMethod(n,i),c\u003d{},u\u003d0;u\u003ce.length;u++)for(var f\u003dr[V.id2name(e[u])][a],h\u003d0;h\u003cf.length;h++){var p\u003df[h];if(!c[p]\u0026\u0026(l(t,p),c[p]\u003d1,s))return}}n(\"annotations\",\"drawOne\",\"_annIndices\"),n(\"shapes\",\"drawOne\",\"_shapeIndices\"),n(\"images\",\"draw\",\"_imgIndices\",!0)};var Z\u003dV.getDataConversions\u003dfunction(t,e,r,n){var i,a\u003d\"x\"\u003d\u003d\u003dr||\"y\"\u003d\u003d\u003dr||\"z\"\u003d\u003d\u003dr?r:n;if(Array.isArray(a)){if(i\u003d{type:q(n,void 0,{autotypenumbers:t._fullLayout.autotypenumbers}),_categories:[]},V.setConvert(i),\"category\"\u003d\u003d\u003di.type)for(var o\u003d0;o\u003cn.length;o++)i.d2c(n[o])}else i\u003dV.getFromTrace(t,e,a);return i?{d2c:i.d2c,c2d:i.c2d}:\"ids\"\u003d\u003d\u003da?{d2c:K,c2d:K}:{d2c:J,c2d:J}};function J(t){return+t}function K(t){return String(t)}function Q(t){return+t.substring(1)}V.getDataToCoordFunc\u003dfunction(t,e,r,n){return Z(t,e,r,n).d2c},V.counterLetter\u003dfunction(t){var e\u003dt.charAt(0);return\"x\"\u003d\u003d\u003de?\"y\":\"y\"\u003d\u003d\u003de?\"x\":void 0},V.minDtick\u003dfunction(t,e,r,n){-1\u003d\u003d\u003d[\"log\",\"category\",\"multicategory\"].indexOf(t.type)\u0026\u0026n?void 0\u003d\u003d\u003dt._minDtick?(t._minDtick\u003de,t._forceTick0\u003dr):t._minDtick\u0026\u0026((t._minDtick/e+1e-6)%1\u003c2e-6\u0026\u0026((r-t._forceTick0)/e%1+1.000001)%1\u003c2e-6?(t._minDtick\u003de,t._forceTick0\u003dr):((e/t._minDtick+1e-6)%1\u003e2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1\u003e2e-6)\u0026\u0026(t._minDtick\u003d0)):t._minDtick\u003d0},V.saveRangeInitial\u003dfunction(t,e){for(var r\u003dV.list(t,\"\",!0),n\u003d!1,i\u003d0;i\u003cr.length;i++){var a\u003dr[i],o\u003dvoid 0\u003d\u003d\u003da._rangeInitial,s\u003do||!(a.range[0]\u003d\u003d\u003da._rangeInitial[0]\u0026\u0026a.range[1]\u003d\u003d\u003da._rangeInitial[1]);(o\u0026\u0026!1\u003d\u003d\u003da.autorange||e\u0026\u0026s)\u0026\u0026(a._rangeInitial\u003da.range.slice(),n\u003d!0)}return n},V.saveShowSpikeInitial\u003dfunction(t,e){for(var r\u003dV.list(t,\"\",!0),n\u003d!1,i\u003d\"on\",a\u003d0;a\u003cr.length;a++){var o\u003dr[a],s\u003dvoid 0\u003d\u003d\u003do._showSpikeInitial,l\u003ds||!(o.showspikes\u003d\u003d\u003do._showspikes);(s||e\u0026\u0026l)\u0026\u0026(o._showSpikeInitial\u003do.showspikes,n\u003d!0),\"on\"!\u003d\u003di||o.showspikes||(i\u003d\"off\")}return t._fullLayout._cartesianSpikesEnabled\u003di,n},V.autoBin\u003dfunction(t,e,r,n,a,o){var l,c\u003ds.aggNums(Math.min,null,t),u\u003ds.aggNums(Math.max,null,t);if(\"category\"\u003d\u003d\u003de.type||\"multicategory\"\u003d\u003d\u003de.type)return{start:c-.5,end:u+.5,size:Math.max(1,Math.round(o)||1),_dataSpan:u-c};if(a||(a\u003de.calendar),l\u003d\"log\"\u003d\u003d\u003de.type?{type:\"linear\",range:[c,u]}:{type:e.type,range:s.simpleMap([c,u],e.c2r,0,a),calendar:a},V.setConvert(l),o\u003do\u0026\u0026d.dtick(o,l.type))l.dtick\u003do,l.tick0\u003dd.tick0(void 0,l.type,a);else{var f;if(r)f\u003d(u-c)/r;else{var h\u003ds.distinctVals(t),p\u003dMath.pow(10,Math.floor(Math.log(h.minDiff)/Math.LN10)),m\u003dp*s.roundUp(h.minDiff/p,[.9,1.9,4.9,9.9],!0);f\u003dMath.max(m,2*s.stdev(t)/Math.pow(t.length,n?.25:.4)),i(f)||(f\u003d1)}V.autoTicks(l,f)}var g,v\u003dl.dtick,y\u003dV.tickIncrement(V.tickFirst(l),v,\"reverse\",a);if(\"number\"\u003d\u003dtypeof v)g\u003d(y\u003dfunction(t,e,r,n,a){var o\u003d0,s\u003d0,l\u003d0,c\u003d0;function u(e){return(1+100*(e-t)/r.dtick)%100\u003c2}for(var f\u003d0;f\u003ce.length;f++)e[f]%1\u003d\u003d0?l++:i(e[f])||c++,u(e[f])\u0026\u0026o++,u(e[f]+r.dtick/2)\u0026\u0026s++;var h\u003de.length-c;if(l\u003d\u003d\u003dh\u0026\u0026\"date\"!\u003d\u003dr.type)r.dtick\u003c1?t\u003dn-.5*r.dtick:(t-\u003d.5)+r.dtick\u003cn\u0026\u0026(t+\u003dr.dtick);else if(s\u003c.1*h\u0026\u0026(o\u003e.3*h||u(n)||u(a))){var p\u003dr.dtick/2;t+\u003dt+p\u003cn?p:-p}return t}(y,t,l,c,u))+(1+Math.floor((u-y)/v))*v;else for(\"M\"\u003d\u003d\u003dl.dtick.charAt(0)\u0026\u0026(y\u003dfunction(t,e,r,n,i){var a\u003ds.findExactDates(e,i);if(a.exactDays\u003e.8){var o\u003dNumber(r.substr(1));a.exactYears\u003e.8\u0026\u0026o%12\u003d\u003d0?t\u003dV.tickIncrement(t,\"M6\",\"reverse\")+1.5*A:a.exactMonths\u003e.8?t\u003dV.tickIncrement(t,\"M1\",\"reverse\")+15.5*A:t-\u003dS;var l\u003dV.tickIncrement(t,r);if(l\u003c\u003dn)return l}return t}(y,t,v,c,a)),g\u003dy,0;g\u003c\u003du;)g\u003dV.tickIncrement(g,v,!1,a);return{start:e.c2r(y,0,a),end:e.c2r(g,0,a),size:v,_dataSpan:u-c}},V.prepTicks\u003dfunction(t,e){var r\u003ds.simpleMap(t.range,t.r2l,void 0,void 0,e);if(t._dtickInit\u003dt.dtick,t._tick0Init\u003dt.tick0,\"auto\"\u003d\u003d\u003dt.tickmode||!t.dtick){var n,a\u003dt.nticks;a||(\"category\"\u003d\u003d\u003dt.type||\"multicategory\"\u003d\u003d\u003dt.type?(n\u003dt.tickfont?s.bigFont(t.tickfont.size||12):15,a\u003dt._length/n):(n\u003d\"y\"\u003d\u003d\u003dt._id.charAt(0)?40:80,a\u003ds.constrain(t._length/n,4,9)+1),\"radialaxis\"\u003d\u003d\u003dt._name\u0026\u0026(a*\u003d2)),\"array\"\u003d\u003d\u003dt.tickmode\u0026\u0026(a*\u003d100),t._roughDTick\u003dMath.abs(r[1]-r[0])/a,V.autoTicks(t,t._roughDTick),t._minDtick\u003e0\u0026\u0026t.dtick\u003c2*t._minDtick\u0026\u0026(t.dtick\u003dt._minDtick,t.tick0\u003dt.l2r(t._forceTick0))}\"period\"\u003d\u003d\u003dt.ticklabelmode\u0026\u0026function(t){var e;function r(){return!(i(t.dtick)||\"M\"!\u003d\u003dt.dtick.charAt(0))}var n\u003dr(),a\u003dV.getTickFormat(t);if(a){var o\u003dt._dtickInit!\u003d\u003dt.dtick;/%[fLQsSMX]/.test(a)||(/%[HI]/.test(a)?(e\u003dE,o\u0026\u0026!n\u0026\u0026t.dtick\u003cE\u0026\u0026(t.dtick\u003dE)):/%p/.test(a)?(e\u003dS,o\u0026\u0026!n\u0026\u0026t.dtick\u003cS\u0026\u0026(t.dtick\u003dS)):/%[Aadejuwx]/.test(a)?(e\u003dA,o\u0026\u0026!n\u0026\u0026t.dtick\u003cA\u0026\u0026(t.dtick\u003dA)):/%[UVW]/.test(a)?(e\u003dM,o\u0026\u0026!n\u0026\u0026t.dtick\u003cM\u0026\u0026(t.dtick\u003dM)):/%[Bbm]/.test(a)?(e\u003dT,o\u0026\u0026(n?Q(t.dtick)\u003c1:t.dtick\u003ck)\u0026\u0026(t.dtick\u003d\"M1\")):/%[q]/.test(a)?(e\u003db,o\u0026\u0026(n?Q(t.dtick)\u003c3:t.dtick\u003c_)\u0026\u0026(t.dtick\u003d\"M3\")):/%[Yy]/.test(a)\u0026\u0026(e\u003dv,o\u0026\u0026(n?Q(t.dtick)\u003c12:t.dtick\u003cy)\u0026\u0026(t.dtick\u003d\"M12\")))}(n\u003dr())\u0026\u0026t.tick0\u003d\u003d\u003dt._dowTick0\u0026\u0026(t.tick0\u003dt._rawTick0);t._definedDelta\u003de}(t),t.tick0||(t.tick0\u003d\"date\"\u003d\u003d\u003dt.type?\"2000-01-01\":0),\"date\"\u003d\u003d\u003dt.type\u0026\u0026t.dtick\u003c.1\u0026\u0026(t.dtick\u003d.1),st(t)},V.calcTicks\u003dfunction(t,e){V.prepTicks(t,e);var r\u003ds.simpleMap(t.range,t.r2l,void 0,void 0,e);if(\"array\"\u003d\u003d\u003dt.tickmode)return function(t){var e\u003dt.tickvals,r\u003dt.ticktext,n\u003dnew Array(e.length),i\u003dX(s.simpleMap(t.range,t.r2l)),a\u003dMath.min(i[0],i[1]),o\u003dMath.max(i[0],i[1]),l\u003d0;Array.isArray(r)||(r\u003d[]);var c\u003d\"category\"\u003d\u003d\u003dt.type?t.d2l_noadd:t.d2l;\"log\"\u003d\u003d\u003dt.type\u0026\u0026\"L\"!\u003d\u003dString(t.dtick).charAt(0)\u0026\u0026(t.dtick\u003d\"L\"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1));for(var u\u003d0;u\u003ce.length;u++){var f\u003dc(e[u]);f\u003ea\u0026\u0026f\u003co\u0026\u0026(void 0\u003d\u003d\u003dr[u]?n[l]\u003dV.tickText(t,f):n[l]\u003dlt(t,f,String(r[u])),l++)}l\u003ce.length\u0026\u0026n.splice(l,e.length-l);t.rangebreaks\u0026\u0026(n\u003dn.filter((function(e){return t.maskBreaks(e.x)!\u003d\u003dI})));return n}(t);var n\u003dX(r),a\u003dn[0],o\u003dn[1],l\u003dr[1]\u003cr[0],c\u003dMath.min(r[0],r[1]),u\u003dMath.max(r[0],r[1]),f\u003d\"log\"\u003d\u003d\u003dt.type\u0026\u0026!(i(t.dtick)||\"L\"\u003d\u003d\u003dt.dtick.charAt(0)),h\u003d\"period\"\u003d\u003d\u003dt.ticklabelmode;if(t._tmin\u003dV.tickFirst(t,e),t._tmin\u003ca!\u003d\u003dl)return[];\"category\"!\u003d\u003dt.type\u0026\u0026\"multicategory\"!\u003d\u003dt.type||(o\u003dl?Math.max(-.5,o):Math.min(t._categories.length-.5,o));var p\u003dt._tmin;t.rangebreaks\u0026\u0026t._tick0Init!\u003d\u003dt.tick0\u0026\u0026(p\u003dAt(p,t),l||(p\u003dV.tickIncrement(p,t.dtick,!l,t.calendar))),h\u0026\u0026(p\u003dV.tickIncrement(p,t.dtick,!l,t.calendar));for(var d,m\u003dMath.max(1e3,t._length||0),L\u003d[],C\u003dnull;l?p\u003e\u003do:p\u003c\u003do;p\u003dV.tickIncrement(p,t.dtick,l,t.calendar)){if(t.rangebreaks\u0026\u0026!l){if(p\u003ca)continue;if(t.maskBreaks(p)\u003d\u003d\u003dI\u0026\u0026At(p,t)\u003e\u003du)break}if(L.length\u003em||p\u003d\u003d\u003dC)break;C\u003dp;var P\u003d!1;f\u0026\u0026p!\u003d\u003d(0|p)\u0026\u0026(P\u003d!0),L.push({minor:P,value:p})}if(h\u0026\u0026function(t,e,r){for(var n\u003d0;n\u003ct.length;n++){var i\u003dt[n].value,a\u003dn,o\u003dn+1;n\u003ct.length-1?(a\u003dn,o\u003dn+1):n\u003e0?(a\u003dn-1,o\u003dn):(a\u003dn,o\u003dn);var s,l\u003dt[a].value,c\u003dt[o].value,u\u003dMath.abs(c-l),f\u003dr||u,h\u003d0;f\u003e\u003dy?h\u003du\u003e\u003dy\u0026\u0026u\u003c\u003dg?u:v:r\u003d\u003d\u003db\u0026\u0026f\u003e\u003d_?h\u003du\u003e\u003d_\u0026\u0026u\u003c\u003dx?u:b:f\u003e\u003dk?h\u003du\u003e\u003dk\u0026\u0026u\u003c\u003dw?u:T:r\u003d\u003d\u003dM\u0026\u0026f\u003e\u003dM?h\u003dM:f\u003e\u003dA?h\u003dA:r\u003d\u003d\u003dS\u0026\u0026f\u003e\u003dS?h\u003dS:r\u003d\u003d\u003dE\u0026\u0026f\u003e\u003dE\u0026\u0026(h\u003dE),h\u003e\u003du\u0026\u0026(h\u003du,s\u003d!0);var p\u003di+h;if(e.rangebreaks\u0026\u0026h\u003e0){for(var d\u003d0,m\u003d0;m\u003c84;m++){var L\u003d(m+.5)/84;e.maskBreaks(i*(1-L)+L*p)!\u003d\u003dI\u0026\u0026d++}(h*\u003dd/84)||(t[n].drop\u003d!0),s\u0026\u0026u\u003eM\u0026\u0026(h\u003du)}(h\u003e0||0\u003d\u003d\u003dn)\u0026\u0026(t[n].periodX\u003di+h/2)}}(L,t,t._definedDelta),t.rangebreaks){var O\u003d\"y\"\u003d\u003d\u003dt._id.charAt(0),z\u003d1;\"auto\"\u003d\u003d\u003dt.tickmode\u0026\u0026(z\u003dt.tickfont?t.tickfont.size:12);var D\u003dNaN;for(d\u003dL.length-1;d\u003e-1;d--)if(L[d].drop)L.splice(d,1);else{L[d].value\u003dAt(L[d].value,t);var R\u003dt.c2p(L[d].value);(O?D\u003eR-z:D\u003cR+z)?L.splice(l?d+1:d,1):D\u003dR}}Mt(t)\u0026\u0026360\u003d\u003d\u003dMath.abs(r[1]-r[0])\u0026\u0026L.pop(),t._tmax\u003d(L[L.length-1]||{}).value,t._prevDateHead\u003d\"\",t._inCalcTicks\u003d!0;var F,B,N\u003d[];for(d\u003d0;d\u003cL.length;d++){var j\u003dL[d].minor,U\u003dL[d].value;F\u003dV.tickText(t,U,!1,j),void 0!\u003d\u003d(B\u003dL[d].periodX)\u0026\u0026(F.periodX\u003dB,(B\u003eu||B\u003cc)\u0026\u0026(B\u003eu\u0026\u0026(F.periodX\u003du),B\u003cc\u0026\u0026(F.periodX\u003dc),F.text\u003d\" \",t._prevDateHead\u003d\"\")),N.push(F)}return t._inCalcTicks\u003d!1,N};var $\u003d[2,5,10],tt\u003d[1,2,3,6,12],et\u003d[1,2,5,10,15,30],rt\u003d[1,2,3,7,14],nt\u003d[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],it\u003d[-.301,0,.301,.699,1],at\u003d[15,30,45,90,180];function ot(t,e,r){return e*s.roundUp(t/e,r)}function st(t){var e\u003dt.dtick;if(t._tickexponent\u003d0,i(e)||\"string\"\u003d\u003dtypeof e||(e\u003d1),\"category\"!\u003d\u003dt.type\u0026\u0026\"multicategory\"!\u003d\u003dt.type||(t._tickround\u003dnull),\"date\"\u003d\u003d\u003dt.type){var r\u003dt.r2l(t.tick0),n\u003dt.l2r(r).replace(/(^-|i)/g,\"\"),a\u003dn.length;if(\"M\"\u003d\u003d\u003dString(e).charAt(0))a\u003e10||\"01-01\"!\u003d\u003dn.substr(5)?t._tickround\u003d\"d\":t._tickround\u003d+e.substr(1)%12\u003d\u003d0?\"y\":\"m\";else if(e\u003e\u003dA\u0026\u0026a\u003c\u003d10||e\u003e\u003d15*A)t._tickround\u003d\"d\";else if(e\u003e\u003dL\u0026\u0026a\u003c\u003d16||e\u003e\u003dE)t._tickround\u003d\"M\";else if(e\u003e\u003dC\u0026\u0026a\u003c\u003d19||e\u003e\u003dL)t._tickround\u003d\"S\";else{var o\u003dt.l2r(r+e).replace(/^-/,\"\").length;t._tickround\u003dMath.max(a,o)-20,t._tickround\u003c0\u0026\u0026(t._tickround\u003d4)}}else if(i(e)||\"L\"\u003d\u003d\u003de.charAt(0)){var s\u003dt.range.map(t.r2d||Number);i(e)||(e\u003dNumber(e.substr(1))),t._tickround\u003d2-Math.floor(Math.log(e)/Math.LN10+.01);var l\u003dMath.max(Math.abs(s[0]),Math.abs(s[1])),c\u003dMath.floor(Math.log(l)/Math.LN10+.01),u\u003dvoid 0\u003d\u003d\u003dt.minexponent?3:t.minexponent;Math.abs(c)\u003eu\u0026\u0026(ut(t.exponentformat)\u0026\u0026!ft(c)?t._tickexponent\u003d3*Math.round((c-1)/3):t._tickexponent\u003dc)}else t._tickround\u003dnull}function lt(t,e,r){var n\u003dt.tickfont||{};return{x:e,dx:0,dy:0,text:r||\"\",fontSize:n.size,font:n.family,fontColor:n.color}}V.autoTicks\u003dfunction(t,e){var r;function n(t){return Math.pow(t,Math.floor(Math.log(e)/Math.LN10))}if(\"date\"\u003d\u003d\u003dt.type){t.tick0\u003ds.dateTick0(t.calendar,0);var a\u003d2*e;if(a\u003ev)e/\u003dv,r\u003dn(10),t.dtick\u003d\"M\"+12*ot(e,r,$);else if(a\u003eT)e/\u003dT,t.dtick\u003d\"M\"+ot(e,1,tt);else if(a\u003eA){t.dtick\u003dot(e,A,t._hasDayOfWeekBreaks?[1,2,7,14]:rt);var o\u003dV.getTickFormat(t),l\u003d\"period\"\u003d\u003d\u003dt.ticklabelmode;l\u0026\u0026(t._rawTick0\u003dt.tick0),/%[uVW]/.test(o)?t.tick0\u003ds.dateTick0(t.calendar,2):t.tick0\u003ds.dateTick0(t.calendar,1),l\u0026\u0026(t._dowTick0\u003dt.tick0)}else a\u003eE?t.dtick\u003dot(e,E,tt):a\u003eL?t.dtick\u003dot(e,L,et):a\u003eC?t.dtick\u003dot(e,C,et):(r\u003dn(10),t.dtick\u003dot(e,r,$))}else if(\"log\"\u003d\u003d\u003dt.type){t.tick0\u003d0;var c\u003ds.simpleMap(t.range,t.r2l);if(e\u003e.7)t.dtick\u003dMath.ceil(e);else if(Math.abs(c[1]-c[0])\u003c1){var u\u003d1.5*Math.abs((c[1]-c[0])/e);e\u003dMath.abs(Math.pow(10,c[1])-Math.pow(10,c[0]))/u,r\u003dn(10),t.dtick\u003d\"L\"+ot(e,r,$)}else t.dtick\u003de\u003e.3?\"D2\":\"D1\"}else\"category\"\u003d\u003d\u003dt.type||\"multicategory\"\u003d\u003d\u003dt.type?(t.tick0\u003d0,t.dtick\u003dMath.ceil(Math.max(e,1))):Mt(t)?(t.tick0\u003d0,r\u003d1,t.dtick\u003dot(e,r,at)):(t.tick0\u003d0,r\u003dn(10),t.dtick\u003dot(e,r,$));if(0\u003d\u003d\u003dt.dtick\u0026\u0026(t.dtick\u003d1),!i(t.dtick)\u0026\u0026\"string\"!\u003dtypeof t.dtick){var f\u003dt.dtick;throw t.dtick\u003d1,\"ax.dtick error: \"+String(f)}},V.tickIncrement\u003dfunction(t,e,r,a){var o\u003dr?-1:1;if(i(e))return s.increment(t,o*e);var l\u003de.charAt(0),c\u003do*Number(e.substr(1));if(\"M\"\u003d\u003d\u003dl)return s.incrementMonth(t,c,a);if(\"L\"\u003d\u003d\u003dl)return Math.log(Math.pow(10,t)+c)/Math.LN10;if(\"D\"\u003d\u003d\u003dl){var u\u003d\"D2\"\u003d\u003d\u003de?it:nt,f\u003dt+.01*o,h\u003ds.roundUp(s.mod(f,1),u,r);return Math.floor(f)+Math.log(n.round(Math.pow(10,h),1))/Math.LN10}throw\"unrecognized dtick \"+String(e)},V.tickFirst\u003dfunction(t,e){var r\u003dt.r2l||Number,a\u003ds.simpleMap(t.range,r,void 0,void 0,e),o\u003da[1]\u003ca[0],l\u003do?Math.floor:Math.ceil,c\u003dX(a)[0],u\u003dt.dtick,f\u003dr(t.tick0);if(i(u)){var h\u003dl((c-f)/u)*u+f;return\"category\"!\u003d\u003dt.type\u0026\u0026\"multicategory\"!\u003d\u003dt.type||(h\u003ds.constrain(h,0,t._categories.length-1)),h}var p\u003du.charAt(0),d\u003dNumber(u.substr(1));if(\"M\"\u003d\u003d\u003dp){for(var m,g,v,y\u003d0,x\u003df;y\u003c10;){if(((m\u003dV.tickIncrement(x,u,o,t.calendar))-c)*(x-c)\u003c\u003d0)return o?Math.min(x,m):Math.max(x,m);g\u003d(c-(x+m)/2)/(m-x),v\u003dp+(Math.abs(Math.round(g))||1)*d,x\u003dV.tickIncrement(x,v,g\u003c0?!o:o,t.calendar),y++}return s.error(\"tickFirst did not converge\",t),x}if(\"L\"\u003d\u003d\u003dp)return Math.log(l((Math.pow(10,c)-f)/d)*d+f)/Math.LN10;if(\"D\"\u003d\u003d\u003dp){var b\u003d\"D2\"\u003d\u003d\u003du?it:nt,_\u003ds.roundUp(s.mod(c,1),b,o);return Math.floor(c)+Math.log(n.round(Math.pow(10,_),1))/Math.LN10}throw\"unrecognized dtick \"+String(u)},V.tickText\u003dfunction(t,e,r,n){var a,o\u003dlt(t,e),l\u003d\"array\"\u003d\u003d\u003dt.tickmode,c\u003dr||l,u\u003dt.type,f\u003d\"category\"\u003d\u003d\u003du?t.d2l_noadd:t.d2l;if(l\u0026\u0026Array.isArray(t.ticktext)){var h\u003ds.simpleMap(t.range,t.r2l),p\u003d(Math.abs(h[1]-h[0])-(t._lBreaks||0))/1e4;for(a\u003d0;a\u003ct.ticktext.length\u0026\u0026!(Math.abs(e-f(t.tickvals[a]))\u003cp);a++);if(a\u003ct.ticktext.length)return o.text\u003dString(t.ticktext[a]),o}function d(n){if(void 0\u003d\u003d\u003dn)return!0;if(r)return\"none\"\u003d\u003d\u003dn;var i\u003d{first:t._tmin,last:t._tmax}[n];return\"all\"!\u003d\u003dn\u0026\u0026e!\u003d\u003di}var m\u003dr?\"never\":\"none\"!\u003d\u003dt.exponentformat\u0026\u0026d(t.showexponent)?\"hide\":\"\";if(\"date\"\u003d\u003d\u003du?function(t,e,r,n){var a\u003dt._tickround,o\u003dr\u0026\u0026t.hoverformat||V.getTickFormat(t);n\u0026\u0026(a\u003di(a)?4:{y:\"m\",m:\"d\",d:\"M\",M:\"S\",S:4}[a]);var l,c\u003ds.formatDate(e.x,o,a,t._dateFormat,t.calendar,t._extraFormat),u\u003dc.indexOf(\"\\n\");-1!\u003d\u003du\u0026\u0026(l\u003dc.substr(u+1),c\u003dc.substr(0,u));n\u0026\u0026(\"00:00:00\"\u003d\u003d\u003dc||\"00:00\"\u003d\u003d\u003dc?(c\u003dl,l\u003d\"\"):8\u003d\u003d\u003dc.length\u0026\u0026(c\u003dc.replace(/:00$/,\"\")));if(l)if(r)\"d\"\u003d\u003d\u003da?c+\u003d\", \"+l:c\u003dl+(c?\", \"+c:\"\");else if(t._inCalcTicks\u0026\u0026t._prevDateHead\u003d\u003d\u003dl){var f\u003dSt(t),h\u003dt._realSide||t.side;(!f\u0026\u0026\"top\"\u003d\u003d\u003dh||f\u0026\u0026\"bottom\"\u003d\u003d\u003dh)\u0026\u0026(c+\u003d\"\u003cbr\u003e \")}else t._prevDateHead\u003dl,c+\u003d\"\u003cbr\u003e\"+l;e.text\u003dc}(t,o,r,c):\"log\"\u003d\u003d\u003du?function(t,e,r,n,a){var o\u003dt.dtick,l\u003de.x,c\u003dt.tickformat,u\u003d\"string\"\u003d\u003dtypeof o\u0026\u0026o.charAt(0);\"never\"\u003d\u003d\u003da\u0026\u0026(a\u003d\"\");n\u0026\u0026\"L\"!\u003d\u003du\u0026\u0026(o\u003d\"L3\",u\u003d\"L\");if(c||\"L\"\u003d\u003d\u003du)e.text\u003dht(Math.pow(10,l),t,a,n);else if(i(o)||\"D\"\u003d\u003d\u003du\u0026\u0026s.mod(l+.01,1)\u003c.1){var f\u003dMath.round(l),h\u003dMath.abs(f),p\u003dt.exponentformat;\"power\"\u003d\u003d\u003dp||ut(p)\u0026\u0026ft(f)?(e.text\u003d0\u003d\u003d\u003df?1:1\u003d\u003d\u003df?\"10\":\"10\u003csup\u003e\"+(f\u003e1?\"\":P)+h+\"\u003c/sup\u003e\",e.fontSize*\u003d1.25):(\"e\"\u003d\u003d\u003dp||\"E\"\u003d\u003d\u003dp)\u0026\u0026h\u003e2?e.text\u003d\"1\"+p+(f\u003e0?\"+\":P)+h:(e.text\u003dht(Math.pow(10,l),t,\"\",\"fakehover\"),\"D1\"\u003d\u003d\u003do\u0026\u0026\"y\"\u003d\u003d\u003dt._id.charAt(0)\u0026\u0026(e.dy-\u003de.fontSize/6))}else{if(\"D\"!\u003d\u003du)throw\"unrecognized dtick \"+String(o);e.text\u003dString(Math.round(Math.pow(10,s.mod(l,1)))),e.fontSize*\u003d.75}if(\"D1\"\u003d\u003d\u003dt.dtick){var d\u003dString(e.text).charAt(0);\"0\"!\u003d\u003dd\u0026\u0026\"1\"!\u003d\u003dd||(\"y\"\u003d\u003d\u003dt._id.charAt(0)?e.dx-\u003de.fontSize/4:(e.dy+\u003de.fontSize/2,e.dx+\u003d(t.range[1]\u003et.range[0]?1:-1)*e.fontSize*(l\u003c0?.5:.25)))}}(t,o,0,c,m):\"category\"\u003d\u003d\u003du?function(t,e){var r\u003dt._categories[Math.round(e.x)];void 0\u003d\u003d\u003dr\u0026\u0026(r\u003d\"\");e.text\u003dString(r)}(t,o):\"multicategory\"\u003d\u003d\u003du?function(t,e,r){var n\u003dMath.round(e.x),i\u003dt._categories[n]||[],a\u003dvoid 0\u003d\u003d\u003di[1]?\"\":String(i[1]),o\u003dvoid 0\u003d\u003d\u003di[0]?\"\":String(i[0]);r?e.text\u003do+\" - \"+a:(e.text\u003da,e.text2\u003do)}(t,o,r):Mt(t)?function(t,e,r,n,i){if(\"radians\"!\u003d\u003dt.thetaunit||r)e.text\u003dht(e.x,t,i,n);else{var a\u003de.x/180;if(0\u003d\u003d\u003da)e.text\u003d\"0\";else{var o\u003dfunction(t){function e(t,e){return Math.abs(t-e)\u003c\u003d1e-6}var r\u003dfunction(t){for(var r\u003d1;!e(Math.round(t*r)/r,t);)r*\u003d10;return r}(t),n\u003dt*r,i\u003dMath.abs(function t(r,n){return e(n,0)?r:t(n,r%n)}(n,r));return[Math.round(n/i),Math.round(r/i)]}(a);if(o[1]\u003e\u003d100)e.text\u003dht(s.deg2rad(e.x),t,i,n);else{var l\u003de.x\u003c0;1\u003d\u003d\u003do[1]?1\u003d\u003d\u003do[0]?e.text\u003d\"\\u03c0\":e.text\u003do[0]+\"\\u03c0\":e.text\u003d[\"\u003csup\u003e\",o[0],\"\u003c/sup\u003e\",\"\\u2044\",\"\u003csub\u003e\",o[1],\"\u003c/sub\u003e\",\"\\u03c0\"].join(\"\"),l\u0026\u0026(e.text\u003dP+e.text)}}}}(t,o,r,c,m):function(t,e,r,n,i){\"never\"\u003d\u003d\u003di?i\u003d\"\":\"all\"\u003d\u003d\u003dt.showexponent\u0026\u0026Math.abs(e.x/t.dtick)\u003c1e-6\u0026\u0026(i\u003d\"hide\");e.text\u003dht(e.x,t,i,n)}(t,o,0,c,m),n||(t.tickprefix\u0026\u0026!d(t.showtickprefix)\u0026\u0026(o.text\u003dt.tickprefix+o.text),t.ticksuffix\u0026\u0026!d(t.showticksuffix)\u0026\u0026(o.text+\u003dt.ticksuffix)),\"boundaries\"\u003d\u003d\u003dt.tickson||t.showdividers){var g\u003dfunction(e){var r\u003dt.l2p(e);return r\u003e\u003d0\u0026\u0026r\u003c\u003dt._length?e:null};o.xbnd\u003d[g(o.x-.5),g(o.x+t.dtick-.5)]}return o},V.hoverLabelText\u003dfunction(t,e,r){r\u0026\u0026(t\u003ds.extendFlat({},t,{hoverformat:r}));var n\u003dArray.isArray(e)?e[0]:e,i\u003dArray.isArray(e)?e[1]:void 0;if(void 0!\u003d\u003di\u0026\u0026i!\u003d\u003dn)return V.hoverLabelText(t,n,r)+\" - \"+V.hoverLabelText(t,i,r);var a\u003d\"log\"\u003d\u003d\u003dt.type\u0026\u0026n\u003c\u003d0,o\u003dV.tickText(t,t.c2l(a?-n:n),\"hover\").text;return a?0\u003d\u003d\u003dn?\"0\":P+o:o};var ct\u003d[\"f\",\"p\",\"n\",\"\\u03bc\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\"];function ut(t){return\"SI\"\u003d\u003d\u003dt||\"B\"\u003d\u003d\u003dt}function ft(t){return t\u003e14||t\u003c-15}function ht(t,e,r,n){var a\u003dt\u003c0,o\u003de._tickround,l\u003dr||e.exponentformat||\"B\",c\u003de._tickexponent,u\u003dV.getTickFormat(e),f\u003de.separatethousands;if(n){var h\u003d{exponentformat:l,minexponent:e.minexponent,dtick:\"none\"\u003d\u003d\u003de.showexponent?e.dtick:i(t)\u0026\u0026Math.abs(t)||1,range:\"none\"\u003d\u003d\u003de.showexponent?e.range.map(e.r2d):[0,t||1]};st(h),o\u003d(Number(h._tickround)||0)+4,c\u003dh._tickexponent,e.hoverformat\u0026\u0026(u\u003de.hoverformat)}if(u)return e._numFormat(u)(t).replace(/-/g,P);var p,d\u003dMath.pow(10,-o)/2;if(\"none\"\u003d\u003d\u003dl\u0026\u0026(c\u003d0),(t\u003dMath.abs(t))\u003cd)t\u003d\"0\",a\u003d!1;else{if(t+\u003dd,c\u0026\u0026(t*\u003dMath.pow(10,-c),o+\u003dc),0\u003d\u003d\u003do)t\u003dString(Math.floor(t));else if(o\u003c0){t\u003d(t\u003dString(Math.round(t))).substr(0,t.length+o);for(var m\u003do;m\u003c0;m++)t+\u003d\"0\"}else{var g\u003d(t\u003dString(t)).indexOf(\".\")+1;g\u0026\u0026(t\u003dt.substr(0,g+o).replace(/\\.?0+$/,\"\"))}t\u003ds.numSeparate(t,e._separators,f)}c\u0026\u0026\"hide\"!\u003d\u003dl\u0026\u0026(ut(l)\u0026\u0026ft(c)\u0026\u0026(l\u003d\"power\"),p\u003dc\u003c0?P+-c:\"power\"!\u003d\u003dl?\"+\"+c:String(c),\"e\"\u003d\u003d\u003dl||\"E\"\u003d\u003d\u003dl?t+\u003dl+p:\"power\"\u003d\u003d\u003dl?t+\u003d\"\\xd710\u003csup\u003e\"+p+\"\u003c/sup\u003e\":\"B\"\u003d\u003d\u003dl\u0026\u00269\u003d\u003d\u003dc?t+\u003d\"B\":ut(l)\u0026\u0026(t+\u003dct[c/3+5]));return a?P+t:t}function pt(t,e){for(var r\u003d[],n\u003d{},i\u003d0;i\u003ce.length;i++){var a\u003de[i];n[a.text2]?n[a.text2].push(a.x):n[a.text2]\u003d[a.x]}for(var o in n)r.push(lt(t,s.interp(n[o],.5),o));return r}function dt(t){return void 0!\u003d\u003dt.periodX?t.periodX:t.x}function mt(t){return[t.text,t.x,t.axInfo,t.font,t.fontSize,t.fontColor].join(\"_\")}function gt(t){var e\u003dt.title.font.size,r\u003d(t.title.text.match(c.BR_TAG_ALL)||[]).length;return t.title.hasOwnProperty(\"standoff\")?r?e*(N+r*j):e*N:r?e*(r+1)*j:e}function vt(t,e){var r\u003dt.l2p(e);return r\u003e1\u0026\u0026r\u003ct._length-1}function yt(t){var e\u003dn.select(t),r\u003de.select(\".text-math-group\");return r.empty()?e.select(\"text\"):r}function xt(t){return t._id+\".automargin\"}function bt(t){return xt(t)+\".mirror\"}function _t(t){return t._id+\".rangeslider\"}function wt(t,e){for(var r\u003d0;r\u003ce.length;r++)-1\u003d\u003d\u003dt.indexOf(e[r])\u0026\u0026t.push(e[r])}function Tt(t,e,r){var n,i,a\u003d[],o\u003d[],l\u003dt.layout;for(n\u003d0;n\u003ce.length;n++)a.push(V.getFromId(t,e[n]));for(n\u003d0;n\u003cr.length;n++)o.push(V.getFromId(t,r[n]));var c\u003dObject.keys(p),u\u003d[\"anchor\",\"domain\",\"overlaying\",\"position\",\"side\",\"tickangle\",\"editType\"],f\u003d[\"linear\",\"log\"];for(n\u003d0;n\u003cc.length;n++){var h\u003dc[n],d\u003da[0][h],m\u003do[0][h],g\u003d!0,v\u003d!1,y\u003d!1;if(\"_\"!\u003d\u003dh.charAt(0)\u0026\u0026\"function\"!\u003dtypeof d\u0026\u0026-1\u003d\u003d\u003du.indexOf(h)){for(i\u003d1;i\u003ca.length\u0026\u0026g;i++){var x\u003da[i][h];\"type\"\u003d\u003d\u003dh\u0026\u0026-1!\u003d\u003df.indexOf(d)\u0026\u0026-1!\u003d\u003df.indexOf(x)\u0026\u0026d!\u003d\u003dx?v\u003d!0:x!\u003d\u003dd\u0026\u0026(g\u003d!1)}for(i\u003d1;i\u003co.length\u0026\u0026g;i++){var b\u003do[i][h];\"type\"\u003d\u003d\u003dh\u0026\u0026-1!\u003d\u003df.indexOf(m)\u0026\u0026-1!\u003d\u003df.indexOf(b)\u0026\u0026m!\u003d\u003db?y\u003d!0:o[i][h]!\u003d\u003dm\u0026\u0026(g\u003d!1)}g\u0026\u0026(v\u0026\u0026(l[a[0]._name].type\u003d\"linear\"),y\u0026\u0026(l[o[0]._name].type\u003d\"linear\"),kt(l,h,a,o,t._fullLayout._dfltTitle))}}for(n\u003d0;n\u003ct._fullLayout.annotations.length;n++){var _\u003dt._fullLayout.annotations[n];-1!\u003d\u003de.indexOf(_.xref)\u0026\u0026-1!\u003d\u003dr.indexOf(_.yref)\u0026\u0026s.swapAttrs(l.annotations[n],[\"?\"])}}function kt(t,e,r,n,i){var a,o\u003ds.nestedProperty,l\u003do(t[r[0]._name],e).get(),c\u003do(t[n[0]._name],e).get();for(\"title\"\u003d\u003d\u003de\u0026\u0026(l\u0026\u0026l.text\u003d\u003d\u003di.x\u0026\u0026(l.text\u003di.y),c\u0026\u0026c.text\u003d\u003d\u003di.y\u0026\u0026(c.text\u003di.x)),a\u003d0;a\u003cr.length;a++)o(t,r[a]._name+\".\"+e).set(c);for(a\u003d0;a\u003cn.length;a++)o(t,n[a]._name+\".\"+e).set(l)}function Mt(t){return\"angularaxis\"\u003d\u003d\u003dt._id}function At(t,e){for(var r\u003de._rangebreaks.length,n\u003d0;n\u003cr;n++){var i\u003de._rangebreaks[n];if(t\u003e\u003di.min\u0026\u0026t\u003ci.max)return i.max}return t}function St(t){return-1!\u003d\u003d(t.ticklabelposition||\"\").indexOf(\"inside\")}function Et(t,e){St(t._anchorAxis||{})\u0026\u0026t._hideCounterAxisInsideTickLabels\u0026\u0026t._hideCounterAxisInsideTickLabels(e)}V.getTickFormat\u003dfunction(t){var e,r,n,i,a,o,s,l;function c(t){return\"string\"!\u003dtypeof t?t:Number(t.replace(\"M\",\"\"))*T}function u(t,e){var r\u003d[\"L\",\"D\"];if(typeof t\u003d\u003dtypeof e){if(\"number\"\u003d\u003dtypeof t)return t-e;var n\u003dr.indexOf(t.charAt(0)),i\u003dr.indexOf(e.charAt(0));return n\u003d\u003d\u003di?Number(t.replace(/(L|D)/g,\"\"))-Number(e.replace(/(L|D)/g,\"\")):n-i}return\"number\"\u003d\u003dtypeof t?1:-1}function f(t,e){var r\u003dnull\u003d\u003d\u003de[0],n\u003dnull\u003d\u003d\u003de[1],i\u003du(t,e[0])\u003e\u003d0,a\u003du(t,e[1])\u003c\u003d0;return(r||i)\u0026\u0026(n||a)}if(t.tickformatstops\u0026\u0026t.tickformatstops.length\u003e0)switch(t.type){case\"date\":case\"linear\":for(e\u003d0;e\u003ct.tickformatstops.length;e++)if((n\u003dt.tickformatstops[e]).enabled\u0026\u0026(i\u003dt.dtick,a\u003dn.dtickrange,o\u003dvoid 0,s\u003dvoid 0,l\u003dvoid 0,o\u003dc||function(t){return t},s\u003da[0],l\u003da[1],(!s\u0026\u0026\"number\"!\u003dtypeof s||o(s)\u003c\u003do(i))\u0026\u0026(!l\u0026\u0026\"number\"!\u003dtypeof l||o(l)\u003e\u003do(i)))){r\u003dn;break}break;case\"log\":for(e\u003d0;e\u003ct.tickformatstops.length;e++)if((n\u003dt.tickformatstops[e]).enabled\u0026\u0026f(t.dtick,n.dtickrange)){r\u003dn;break}}return r?r.value:t.tickformat},V.getSubplots\u003dfunction(t,e){var r\u003dt._fullLayout._subplots,n\u003dr.cartesian.concat(r.gl2d||[]),i\u003de?V.findSubplotsWithAxis(n,e):n;return i.sort((function(t,e){var r\u003dt.substr(1).split(\"y\"),n\u003de.substr(1).split(\"y\");return r[0]\u003d\u003d\u003dn[0]?+r[1]-+n[1]:+r[0]-+n[0]})),i},V.findSubplotsWithAxis\u003dfunction(t,e){for(var r\u003dnew RegExp(\"x\"\u003d\u003d\u003de._id.charAt(0)?\"^\"+e._id+\"y\":e._id+\"$\"),n\u003d[],i\u003d0;i\u003ct.length;i++){var a\u003dt[i];r.test(a)\u0026\u0026n.push(a)}return n},V.makeClipPaths\u003dfunction(t){var e\u003dt._fullLayout;if(!e._hasOnlyLargeSploms){var r,i,a\u003d{_offset:0,_length:e.width,_id:\"\"},o\u003d{_offset:0,_length:e.height,_id:\"\"},s\u003dV.list(t,\"x\",!0),l\u003dV.list(t,\"y\",!0),c\u003d[];for(r\u003d0;r\u003cs.length;r++)for(c.push({x:s[r],y:o}),i\u003d0;i\u003cl.length;i++)0\u003d\u003d\u003dr\u0026\u0026c.push({x:a,y:l[i]}),c.push({x:s[r],y:l[i]});var u\u003de._clips.selectAll(\".axesclip\").data(c,(function(t){return t.x._id+t.y._id}));u.enter().append(\"clipPath\").classed(\"axesclip\",!0).attr(\"id\",(function(t){return\"clip\"+e._uid+t.x._id+t.y._id})).append(\"rect\"),u.exit().remove(),u.each((function(t){n.select(this).select(\"rect\").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})}))}},V.draw\u003dfunction(t,e,r){var n\u003dt._fullLayout;\"redraw\"\u003d\u003d\u003de\u0026\u0026n._paper.selectAll(\"g.subplot\").each((function(t){var e\u003dt[0],r\u003dn._plots[e];if(r){var i\u003dr.xaxis,a\u003dr.yaxis;r.xaxislayer.selectAll(\".\"+i._id+\"tick\").remove(),r.yaxislayer.selectAll(\".\"+a._id+\"tick\").remove(),r.xaxislayer.selectAll(\".\"+i._id+\"tick2\").remove(),r.yaxislayer.selectAll(\".\"+a._id+\"tick2\").remove(),r.xaxislayer.selectAll(\".\"+i._id+\"divider\").remove(),r.yaxislayer.selectAll(\".\"+a._id+\"divider\").remove(),r.gridlayer\u0026\u0026r.gridlayer.selectAll(\"path\").remove(),r.zerolinelayer\u0026\u0026r.zerolinelayer.selectAll(\"path\").remove(),n._infolayer.select(\".g-\"+i._id+\"title\").remove(),n._infolayer.select(\".g-\"+a._id+\"title\").remove()}}));var i\u003de\u0026\u0026\"redraw\"!\u003d\u003de?e:V.listIds(t);return s.syncOrAsync(i.map((function(e){return function(){if(e){var n\u003dV.getFromId(t,e),i\u003dV.drawOne(t,n,r);return n._r\u003dn.range.slice(),n._rl\u003ds.simpleMap(n._r,n.r2l),i}}})))},V.drawOne\u003dfunction(t,e,r){var n,i,l;r\u003dr||{},e.setScale();var c\u003dt._fullLayout,p\u003de._id,d\u003dp.charAt(0),m\u003dV.counterLetter(p),g\u003dc._plots[e._mainSubplot];if(g){var v\u003dg[d+\"axislayer\"],y\u003de._mainLinePosition,x\u003de._mainMirrorPosition,b\u003de._vals\u003dV.calcTicks(e),_\u003d[e.mirror,y,x].join(\"_\");for(n\u003d0;n\u003cb.length;n++)b[n].axInfo\u003d_;e._selections\u003d{},e._tickAngles\u0026\u0026(e._prevTickAngles\u003de._tickAngles),e._tickAngles\u003d{},e._depth\u003dnull;var w\u003d{};if(e.visible){var T,k,M\u003dV.makeTransTickFn(e),A\u003dV.makeTransTickLabelFn(e),S\u003d\"inside\"\u003d\u003d\u003de.ticks,E\u003d\"outside\"\u003d\u003d\u003de.ticks;if(\"boundaries\"\u003d\u003d\u003de.tickson){var L\u003dfunction(t,e){var r,n\u003d[],i\u003dfunction(t,e){var r\u003dt.xbnd[e];null!\u003d\u003dr\u0026\u0026n.push(s.extendFlat({},t,{x:r}))};if(e.length){for(r\u003d0;r\u003ce.length;r++)i(e[r],0);i(e[r-1],1)}return n}(0,b);k\u003dV.clipEnds(e,L),T\u003dS?k:L}else k\u003dV.clipEnds(e,b),T\u003dS\u0026\u0026\"period\"!\u003d\u003de.ticklabelmode?k:b;var C\u003de._gridVals\u003dk,P\u003dfunction(t,e){var r,n,i\u003d[],a\u003de.length\u0026\u0026e[e.length-1].x\u003ce[0].x,o\u003dfunction(t,e){var r\u003dt.xbnd[e];null!\u003d\u003dr\u0026\u0026i.push(s.extendFlat({},t,{x:r}))};if(t.showdividers\u0026\u0026e.length){for(r\u003d0;r\u003ce.length;r++){var l\u003de[r];l.text2!\u003d\u003dn\u0026\u0026o(l,a?1:0),n\u003dl.text2}o(e[r-1],a?0:1)}return i}(e,b);if(!c._hasOnlyLargeSploms){var I\u003de._subplotsWith,O\u003d{};for(n\u003d0;n\u003cI.length;n++){i\u003dI[n];var z\u003d(l\u003dc._plots[i])[m+\"axis\"],D\u003dz._mainAxis._id;if(!O[D]){O[D]\u003d1;var R\u003d\"x\"\u003d\u003d\u003dd?\"M0,\"+z._offset+\"v\"+z._length:\"M\"+z._offset+\",0h\"+z._length;V.drawGrid(t,e,{vals:C,counterAxis:z,layer:l.gridlayer.select(\".\"+p),path:R,transFn:M}),V.drawZeroLine(t,e,{counterAxis:z,layer:l.zerolinelayer,path:R,transFn:M})}}}var F\u003dV.getTickSigns(e),B\u003d[];if(e.ticks){var N,q,H,G\u003dV.makeTickPath(e,y,F[2]);if(e._anchorAxis\u0026\u0026e.mirror\u0026\u0026!0!\u003d\u003de.mirror?(N\u003dV.makeTickPath(e,x,F[3]),q\u003dG+N):(N\u003d\"\",q\u003dG),e.showdividers\u0026\u0026E\u0026\u0026\"boundaries\"\u003d\u003d\u003de.tickson){var Y\u003d{};for(n\u003d0;n\u003cP.length;n++)Y[P[n].x]\u003d1;H\u003dfunction(t){return Y[t.x]?N:q}}else H\u003dq;V.drawTicks(t,e,{vals:T,layer:v,path:H,transFn:M}),\"allticks\"\u003d\u003d\u003de.mirror\u0026\u0026(B\u003dObject.keys(e._linepositions||{}))}for(n\u003d0;n\u003cB.length;n++){i\u003dB[n],l\u003dc._plots[i];var W\u003de._linepositions[i]||[],X\u003dV.makeTickPath(e,W[0],F[0])+V.makeTickPath(e,W[1],F[1]);V.drawTicks(t,e,{vals:T,layer:l[d+\"axislayer\"],path:X,transFn:M})}var Z\u003d[];if(Z.push((function(){return V.drawLabels(t,e,{vals:b,layer:v,plotinfo:l,transFn:A,labelFns:V.makeLabelFns(e,y)})})),\"multicategory\"\u003d\u003d\u003de.type){var J\u003d{x:2,y:10}[d];Z.push((function(){var r\u003d{x:\"height\",y:\"width\"}[d],n\u003dQ()[r]+J+(e._tickAngles[p+\"tick\"]?e.tickfont.size*j:0);return V.drawLabels(t,e,{vals:pt(e,b),layer:v,cls:p+\"tick2\",repositionOnUpdate:!0,secondary:!0,transFn:M,labelFns:V.makeLabelFns(e,y+n*F[4])})})),Z.push((function(){return e._depth\u003dF[4]*(Q(\"tick2\")[e.side]-y),function(t,e,r){var n\u003de._id+\"divider\",i\u003dr.vals,a\u003dr.layer.selectAll(\"path.\"+n).data(i,mt);a.exit().remove(),a.enter().insert(\"path\",\":first-child\").classed(n,1).classed(\"crisp\",1).call(f.stroke,e.dividercolor).style(\"stroke-width\",h.crispRound(t,e.dividerwidth,1)+\"px\"),a.attr(\"transform\",r.transFn).attr(\"d\",r.path)}(t,e,{vals:P,layer:v,path:V.makeTickPath(e,y,F[4],e._depth),transFn:M})}))}else e.title.hasOwnProperty(\"standoff\")\u0026\u0026Z.push((function(){e._depth\u003dF[4]*(Q()[e.side]-y)}));var K\u003do.getComponentMethod(\"rangeslider\",\"isVisible\")(e);return Z.push((function(){var r,n,i,s,l\u003de.side.charAt(0),u\u003dU[e.side].charAt(0),f\u003dV.getPxPosition(t,e),h\u003dE?e.ticklen:0;if((e.automargin||K)\u0026\u0026(\"multicategory\"\u003d\u003d\u003de.type?r\u003dQ(\"tick2\"):(r\u003dQ(),\"x\"\u003d\u003d\u003dd\u0026\u0026\"b\"\u003d\u003d\u003dl\u0026\u0026(e._depth\u003dMath.max(r.width\u003e0?r.bottom-f:0,h)))),e.automargin){n\u003d{x:0,y:0,r:0,l:0,t:0,b:0};var p\u003d[0,1];if(\"x\"\u003d\u003d\u003dd){if(\"b\"\u003d\u003d\u003dl?n[l]\u003de._depth:(n[l]\u003de._depth\u003dMath.max(r.width\u003e0?f-r.top:0,h),p.reverse()),r.width\u003e0){var g\u003dr.right-(e._offset+e._length);g\u003e0\u0026\u0026(n.xr\u003d1,n.r\u003dg);var v\u003de._offset-r.left;v\u003e0\u0026\u0026(n.xl\u003d0,n.l\u003dv)}}else if(\"l\"\u003d\u003d\u003dl?n[l]\u003de._depth\u003dMath.max(r.height\u003e0?f-r.left:0,h):(n[l]\u003de._depth\u003dMath.max(r.height\u003e0?r.right-f:0,h),p.reverse()),r.height\u003e0){var y\u003dr.bottom-(e._offset+e._length);y\u003e0\u0026\u0026(n.yb\u003d0,n.b\u003dy);var x\u003de._offset-r.top;x\u003e0\u0026\u0026(n.yt\u003d1,n.t\u003dx)}n[m]\u003d\"free\"\u003d\u003d\u003de.anchor?e.position:e._anchorAxis.domain[p[0]],e.title.text!\u003d\u003dc._dfltTitle[d]\u0026\u0026(n[l]+\u003dgt(e)+(e.title.standoff||0)),e.mirror\u0026\u0026\"free\"!\u003d\u003de.anchor\u0026\u0026((i\u003d{x:0,y:0,r:0,l:0,t:0,b:0})[u]\u003de.linewidth,e.mirror\u0026\u0026!0!\u003d\u003de.mirror\u0026\u0026(i[u]+\u003dh),!0\u003d\u003d\u003de.mirror||\"ticks\"\u003d\u003d\u003de.mirror?i[m]\u003de._anchorAxis.domain[p[1]]:\"all\"!\u003d\u003de.mirror\u0026\u0026\"allticks\"!\u003d\u003de.mirror||(i[m]\u003d[e._counterDomainMin,e._counterDomainMax][p[1]]))}K\u0026\u0026(s\u003do.getComponentMethod(\"rangeslider\",\"autoMarginOpts\")(t,e)),a.autoMargin(t,xt(e),n),a.autoMargin(t,bt(e),i),a.autoMargin(t,_t(e),s)})),r.skipTitle||K\u0026\u0026\"bottom\"\u003d\u003d\u003de.side||Z.push((function(){return function(t,e){var r,n\u003dt._fullLayout,i\u003de._id,a\u003di.charAt(0),o\u003de.title.font.size;if(e.title.hasOwnProperty(\"standoff\"))r\u003de._depth+e.title.standoff+gt(e);else{var s\u003dSt(e);if(\"multicategory\"\u003d\u003d\u003de.type)r\u003de._depth;else{var l\u003d1.5*o;s\u0026\u0026(l\u003d.5*o,\"outside\"\u003d\u003d\u003de.ticks\u0026\u0026(l+\u003de.ticklen)),r\u003d10+l+(e.linewidth?e.linewidth-1:0)}s||(r+\u003d\"x\"\u003d\u003d\u003da?\"top\"\u003d\u003d\u003de.side?o*(e.showticklabels?1:0):o*(e.showticklabels?1.5:.5):\"right\"\u003d\u003d\u003de.side?o*(e.showticklabels?1:.5):o*(e.showticklabels?.5:0))}var c,f,p,d,m\u003dV.getPxPosition(t,e);\"x\"\u003d\u003d\u003da?(f\u003de._offset+e._length/2,p\u003d\"top\"\u003d\u003d\u003de.side?m-r:m+r):(p\u003de._offset+e._length/2,f\u003d\"right\"\u003d\u003d\u003de.side?m+r:m-r,c\u003d{rotate:\"-90\",offset:0});if(\"multicategory\"!\u003d\u003de.type){var g\u003de._selections[e._id+\"tick\"];if(d\u003d{selection:g,side:e.side},g\u0026\u0026g.node()\u0026\u0026g.node().parentNode){var v\u003dh.getTranslate(g.node().parentNode);d.offsetLeft\u003dv.x,d.offsetTop\u003dv.y}e.title.hasOwnProperty(\"standoff\")\u0026\u0026(d.pad\u003d0)}return u.draw(t,i+\"title\",{propContainer:e,propName:e._name+\".title.text\",placeholder:n._dfltTitle[a],avoid:d,transform:c,attributes:{x:f,y:p,\"text-anchor\":\"middle\"}})}(t,e)})),s.syncOrAsync(Z)}}function Q(t){var r\u003dp+(t||\"tick\");return w[r]||(w[r]\u003dfunction(t,e){var r,n,i,a;t._selections[e].size()?(r\u003d1/0,n\u003d-1/0,i\u003d1/0,a\u003d-1/0,t._selections[e].each((function(){var t\u003dyt(this),e\u003dh.bBox(t.node().parentNode);r\u003dMath.min(r,e.top),n\u003dMath.max(n,e.bottom),i\u003dMath.min(i,e.left),a\u003dMath.max(a,e.right)}))):(r\u003d0,n\u003d0,i\u003d0,a\u003d0);return{top:r,bottom:n,left:i,right:a,height:n-r,width:a-i}}(e,r)),w[r]}},V.getTickSigns\u003dfunction(t){var e\u003dt._id.charAt(0),r\u003d{x:\"top\",y:\"right\"}[e],n\u003dt.side\u003d\u003d\u003dr?1:-1,i\u003d[-1,1,n,-n];return\"inside\"!\u003d\u003dt.ticks\u003d\u003d(\"x\"\u003d\u003d\u003de)\u0026\u0026(i\u003di.map((function(t){return-t}))),t.side\u0026\u0026i.push({l:-1,t:-1,r:1,b:1}[t.side.charAt(0)]),i},V.makeTransTickFn\u003dfunction(t){return\"x\"\u003d\u003d\u003dt._id.charAt(0)?function(e){return l(t._offset+t.l2p(e.x),0)}:function(e){return l(0,t._offset+t.l2p(e.x))}},V.makeTransTickLabelFn\u003dfunction(t){var e\u003dfunction(t){var e\u003dt.ticklabelposition||\"\",r\u003dfunction(t){return-1!\u003d\u003de.indexOf(t)},n\u003dr(\"top\"),i\u003dr(\"left\"),a\u003dr(\"right\"),o\u003dr(\"bottom\"),s\u003dr(\"inside\"),l\u003do||i||n||a;if(!l\u0026\u0026!s)return[0,0];var c\u003dt.side,u\u003dl?(t.tickwidth||0)/2:0,f\u003d3,h\u003dt.tickfont?t.tickfont.size:12;(o||n)\u0026\u0026(u+\u003dh*N,f+\u003d(t.linewidth||0)/2);(i||a)\u0026\u0026(u+\u003d(t.linewidth||0)/2,f+\u003d3);s\u0026\u0026\"top\"\u003d\u003d\u003dc\u0026\u0026(f-\u003dh*(1-N));(i||n)\u0026\u0026(u\u003d-u);\"bottom\"!\u003d\u003dc\u0026\u0026\"right\"!\u003d\u003dc||(f\u003d-f);return[l?u:0,s?f:0]}(t),r\u003de[0],n\u003de[1];return\"x\"\u003d\u003d\u003dt._id.charAt(0)?function(e){return l(r+t._offset+t.l2p(dt(e)),n)}:function(e){return l(n,r+t._offset+t.l2p(dt(e)))}},V.makeTickPath\u003dfunction(t,e,r,n){n\u003dvoid 0!\u003d\u003dn?n:t.ticklen;var i\u003dt._id.charAt(0),a\u003d(t.linewidth||1)/2;return\"x\"\u003d\u003d\u003di?\"M0,\"+(e+a*r)+\"v\"+n*r:\"M\"+(e+a*r)+\",0h\"+n*r},V.makeLabelFns\u003dfunction(t,e,r){var n\u003dt.ticklabelposition||\"\",a\u003dfunction(t){return-1!\u003d\u003dn.indexOf(t)},o\u003da(\"top\"),l\u003da(\"left\"),c\u003da(\"right\"),u\u003da(\"bottom\")||l||o||c,f\u003da(\"inside\"),h\u003d\"inside\"\u003d\u003d\u003dn\u0026\u0026\"inside\"\u003d\u003d\u003dt.ticks||!f\u0026\u0026\"outside\"\u003d\u003d\u003dt.ticks\u0026\u0026\"boundaries\"!\u003d\u003dt.tickson,p\u003d0,d\u003d0,m\u003dh?t.ticklen:0;if(f?m*\u003d-1:u\u0026\u0026(m\u003d0),h\u0026\u0026(p+\u003dm,r)){var g\u003ds.deg2rad(r);p\u003dm*Math.cos(g)+1,d\u003dm*Math.sin(g)}t.showticklabels\u0026\u0026(h||t.showline)\u0026\u0026(p+\u003d.2*t.tickfont.size);var v,y,x,b,_,w\u003d{labelStandoff:p+\u003d(t.linewidth||1)/2*(f?-1:1),labelShift:d},T\u003d0,k\u003dt.side,M\u003dt._id.charAt(0),A\u003dt.tickangle;if(\"x\"\u003d\u003d\u003dM)b\u003d(_\u003d!f\u0026\u0026\"bottom\"\u003d\u003d\u003dk||f\u0026\u0026\"top\"\u003d\u003d\u003dk)?1:-1,f\u0026\u0026(b*\u003d-1),v\u003dd*b,y\u003de+p*b,x\u003d_?1:-.2,90\u003d\u003d\u003dMath.abs(A)\u0026\u0026(f?x+\u003dB:x\u003d-90\u003d\u003d\u003dA\u0026\u0026\"bottom\"\u003d\u003d\u003dk?N:90\u003d\u003d\u003dA\u0026\u0026\"top\"\u003d\u003d\u003dk?B:.5,T\u003dB/2*(A/90)),w.xFn\u003dfunction(t){return t.dx+v+T*t.fontSize},w.yFn\u003dfunction(t){return t.dy+y+t.fontSize*x},w.anchorFn\u003dfunction(t,e){if(u){if(l)return\"end\";if(c)return\"start\"}return i(e)\u0026\u00260!\u003d\u003de\u0026\u0026180!\u003d\u003de?e*b\u003c0!\u003d\u003df?\"end\":\"start\":\"middle\"},w.heightFn\u003dfunction(e,r,n){return r\u003c-60||r\u003e60?-.5*n:\"top\"\u003d\u003d\u003dt.side!\u003d\u003df?-n:0};else if(\"y\"\u003d\u003d\u003dM){if(b\u003d(_\u003d!f\u0026\u0026\"left\"\u003d\u003d\u003dk||f\u0026\u0026\"right\"\u003d\u003d\u003dk)?1:-1,f\u0026\u0026(b*\u003d-1),v\u003dp,y\u003dd*b,x\u003d0,f||90!\u003d\u003dMath.abs(A)||(x\u003d-90\u003d\u003d\u003dA\u0026\u0026\"left\"\u003d\u003d\u003dk||90\u003d\u003d\u003dA\u0026\u0026\"right\"\u003d\u003d\u003dk?N:.5),f){var S\u003di(A)?+A:0;if(0!\u003d\u003dS){var E\u003ds.deg2rad(S);T\u003dMath.abs(Math.sin(E))*N*b,x\u003d0}}w.xFn\u003dfunction(t){return t.dx+e-(v+t.fontSize*x)*b+T*t.fontSize},w.yFn\u003dfunction(t){return t.dy+y+t.fontSize*B},w.anchorFn\u003dfunction(t,e){return i(e)\u0026\u002690\u003d\u003d\u003dMath.abs(e)?\"middle\":_?\"end\":\"start\"},w.heightFn\u003dfunction(e,r,n){return\"right\"\u003d\u003d\u003dt.side\u0026\u0026(r*\u003d-1),r\u003c-30?-n:r\u003c30?-.5*n:0}}return w},V.drawTicks\u003dfunction(t,e,r){r\u003dr||{};var n\u003de._id+\"tick\",i\u003dr.vals;\"period\"\u003d\u003d\u003de.ticklabelmode\u0026\u0026(i\u003di.slice()).shift();var a\u003dr.layer.selectAll(\"path.\"+n).data(e.ticks?i:[],mt);a.exit().remove(),a.enter().append(\"path\").classed(n,1).classed(\"ticks\",1).classed(\"crisp\",!1!\u003d\u003dr.crisp).call(f.stroke,e.tickcolor).style(\"stroke-width\",h.crispRound(t,e.tickwidth,1)+\"px\").attr(\"d\",r.path).style(\"display\",null),Et(e,[D]),a.attr(\"transform\",r.transFn)},V.drawGrid\u003dfunction(t,e,r){r\u003dr||{};var n\u003de._id+\"grid\",i\u003dr.vals,a\u003dr.counterAxis;if(!1\u003d\u003d\u003de.showgrid)i\u003d[];else if(a\u0026\u0026V.shouldShowZeroLine(t,e,a))for(var o\u003d\"array\"\u003d\u003d\u003de.tickmode,s\u003d0;s\u003ci.length;s++){var l\u003di[s].x;if(o?!l:Math.abs(l)\u003ce.dtick/100){if(i\u003di.slice(0,s).concat(i.slice(s+1)),!o)break;s--}}var c\u003dr.layer.selectAll(\"path.\"+n).data(i,mt);c.exit().remove(),c.enter().append(\"path\").classed(n,1).classed(\"crisp\",!1!\u003d\u003dr.crisp),e._gw\u003dh.crispRound(t,e.gridwidth,1),c.attr(\"transform\",r.transFn).attr(\"d\",r.path).call(f.stroke,e.gridcolor||\"#ddd\").style(\"stroke-width\",e._gw+\"px\").style(\"display\",null),Et(e,[z]),\"function\"\u003d\u003dtypeof r.path\u0026\u0026c.attr(\"d\",r.path)},V.drawZeroLine\u003dfunction(t,e,r){r\u003dr||r;var n\u003de._id+\"zl\",i\u003dV.shouldShowZeroLine(t,e,r.counterAxis),a\u003dr.layer.selectAll(\"path.\"+n).data(i?[{x:0,id:e._id}]:[]);a.exit().remove(),a.enter().append(\"path\").classed(n,1).classed(\"zl\",1).classed(\"crisp\",!1!\u003d\u003dr.crisp).each((function(){r.layer.selectAll(\"path\").sort((function(t,e){return G(t.id,e.id)}))})),a.attr(\"transform\",r.transFn).attr(\"d\",r.path).call(f.stroke,e.zerolinecolor||f.defaultLine).style(\"stroke-width\",h.crispRound(t,e.zerolinewidth,e._gw||1)+\"px\").style(\"display\",null),Et(e,[O])},V.drawLabels\u003dfunction(t,e,r){r\u003dr||{};var a\u003dt._fullLayout,o\u003de._id,u\u003do.charAt(0),f\u003dr.cls||o+\"tick\",p\u003dr.vals,d\u003dr.labelFns,m\u003dr.secondary?0:e.tickangle,g\u003d(e._prevTickAngles||{})[f],v\u003dr.layer.selectAll(\"g.\"+f).data(e.showticklabels?p:[],mt),y\u003d[];function x(t,a){t.each((function(t){var o\u003dn.select(this),s\u003do.select(\".text-math-group\"),u\u003dd.anchorFn(t,a),f\u003dr.transFn.call(o.node(),t)+(i(a)\u0026\u00260!\u003d+a?\" rotate(\"+a+\",\"+d.xFn(t)+\",\"+(d.yFn(t)-t.fontSize/2)+\")\":\"\"),p\u003dc.lineCount(o),m\u003dj*t.fontSize,g\u003dd.heightFn(t,i(a)?+a:0,(p-1)*m);if(g\u0026\u0026(f+\u003dl(0,g)),s.empty()){var v\u003do.select(\"text\");v.attr({transform:f,\"text-anchor\":u}),v.style(\"opacity\",1),e._adjustTickLabelsOverflow\u0026\u0026e._adjustTickLabelsOverflow()}else{var y\u003dh.bBox(s.node()).width*{end:-.5,start:.5}[u];s.attr(\"transform\",f+l(y,0))}}))}v.enter().append(\"g\").classed(f,1).append(\"text\").attr(\"text-anchor\",\"middle\").each((function(e){var r\u003dn.select(this),i\u003dt._promises.length;r.call(c.positionText,d.xFn(e),d.yFn(e)).call(h.font,e.font,e.fontSize,e.fontColor).text(e.text).call(c.convertToTspans,t),t._promises[i]?y.push(t._promises.pop().then((function(){x(r,m)}))):x(r,m)})),Et(e,[R]),v.exit().remove(),r.repositionOnUpdate\u0026\u0026v.each((function(t){n.select(this).select(\"text\").call(c.positionText,d.xFn(t),d.yFn(t))})),e._adjustTickLabelsOverflow\u003dfunction(){var r\u003de.ticklabeloverflow;if(r\u0026\u0026\"allow\"!\u003d\u003dr){var i\u003d-1!\u003d\u003dr.indexOf(\"hide\"),o\u003d\"x\"\u003d\u003d\u003de._id.charAt(0),l\u003d0,c\u003do?t._fullLayout.width:t._fullLayout.height;if(-1!\u003d\u003dr.indexOf(\"domain\")){var u\u003ds.simpleMap(e.range,e.r2l);l\u003de.l2p(u[0])+e._offset,c\u003de.l2p(u[1])+e._offset}var f\u003dMath.min(l,c),p\u003dMath.max(l,c),d\u003de.side,m\u003d1/0,g\u003d-1/0;for(var y in v.each((function(t){var r\u003dn.select(this);if(r.select(\".text-math-group\").empty()){var a\u003dh.bBox(r.node()),s\u003d0;o?(a.right\u003ep||a.left\u003cf)\u0026\u0026(s\u003d1):(a.bottom\u003ep||a.top+(e.tickangle?0:t.fontSize/4)\u003cf)\u0026\u0026(s\u003d1);var l\u003dr.select(\"text\");s?i\u0026\u0026l.style(\"opacity\",0):(l.style(\"opacity\",1),m\u003d\"bottom\"\u003d\u003d\u003dd||\"right\"\u003d\u003d\u003dd?Math.min(m,o?a.top:a.left):-1/0,g\u003d\"top\"\u003d\u003d\u003dd||\"left\"\u003d\u003d\u003dd?Math.max(g,o?a.bottom:a.right):1/0)}})),a._plots){var x\u003da._plots[y];if(e._id\u003d\u003d\u003dx.xaxis._id||e._id\u003d\u003d\u003dx.yaxis._id){var b\u003do?x.yaxis:x.xaxis;b\u0026\u0026(b[\"_visibleLabelMin_\"+e._id]\u003dm,b[\"_visibleLabelMax_\"+e._id]\u003dg)}}}},e._hideCounterAxisInsideTickLabels\u003dfunction(t){var r\u003d\"x\"\u003d\u003d\u003de._id.charAt(0),i\u003d[];for(var o in a._plots){var s\u003da._plots[o];e._id!\u003d\u003ds.xaxis._id\u0026\u0026e._id!\u003d\u003ds.yaxis._id||i.push(r?s.yaxis:s.xaxis)}i.forEach((function(r,i){r\u0026\u0026St(r)\u0026\u0026(t||[O,z,D,R]).forEach((function(t){var o\u003d\"tick\"\u003d\u003d\u003dt.K\u0026\u0026\"text\"\u003d\u003d\u003dt.L\u0026\u0026\"period\"\u003d\u003d\u003de.ticklabelmode,s\u003da._plots[e._mainSubplot];(t.K\u003d\u003d\u003dO.K?s.zerolinelayer.selectAll(\".\"+e._id+\"zl\"):t.K\u003d\u003d\u003dz.K?s.gridlayer.selectAll(\".\"+e._id):s[e._id.charAt(0)+\"axislayer\"]).each((function(){var a\u003dn.select(this);t.L\u0026\u0026(a\u003da.selectAll(t.L)),a.each((function(a){var s\u003de.l2p(o?dt(a):a.x)+e._offset,l\u003dn.select(this);s\u003ce[\"_visibleLabelMax_\"+r._id]\u0026\u0026s\u003ee[\"_visibleLabelMin_\"+r._id]?l.style(\"display\",\"none\"):\"tick\"!\u003d\u003dt.K||i||l.style(\"display\",null)}))}))}))}))},x(v,g+1?g:m);var b\u003dnull;e._selections\u0026\u0026(e._selections[f]\u003dv);var _\u003d[function(){return y.length\u0026\u0026Promise.all(y)}];e.automargin\u0026\u0026a._redrawFromAutoMarginCount\u0026\u002690\u003d\u003d\u003dg?(b\u003d90,_.push((function(){x(v,g)}))):_.push((function(){if(x(v,m),p.length\u0026\u0026\"x\"\u003d\u003d\u003du\u0026\u0026!i(m)\u0026\u0026(\"log\"!\u003d\u003de.type||\"D\"!\u003d\u003dString(e.dtick).charAt(0))){b\u003d0;var t,n\u003d0,a\u003d[];if(v.each((function(t){n\u003dMath.max(n,t.fontSize);var r\u003de.l2p(t.x),i\u003dyt(this),o\u003dh.bBox(i.node());a.push({top:0,bottom:10,height:10,left:r-o.width/2,right:r+o.width/2+2,width:o.width+2})})),\"boundaries\"!\u003d\u003de.tickson\u0026\u0026!e.showdividers||r.secondary){var o\u003dp.length,l\u003dMath.abs((p[o-1].x-p[0].x)*e._m)/(o-1),c\u003de.ticklabelposition||\"\",f\u003dfunction(t){return-1!\u003d\u003dc.indexOf(t)},d\u003df(\"top\"),g\u003df(\"left\"),y\u003df(\"right\"),_\u003df(\"bottom\")||g||d||y?(e.tickwidth||0)+6:0,w\u003dl\u003c2.5*n||\"multicategory\"\u003d\u003d\u003de.type;for(t\u003d0;t\u003ca.length-1;t++)if(s.bBoxIntersect(a[t],a[t+1],_)){b\u003dw?90:30;break}}else{var T\u003d2;for(e.ticks\u0026\u0026(T+\u003de.tickwidth/2),t\u003d0;t\u003ca.length;t++){var k\u003dp[t].xbnd,M\u003da[t];if(null!\u003d\u003dk[0]\u0026\u0026M.left-e.l2p(k[0])\u003cT||null!\u003d\u003dk[1]\u0026\u0026e.l2p(k[1])-M.right\u003cT){b\u003d90;break}}}b\u0026\u0026x(v,b)}})),e._tickAngles\u0026\u0026_.push((function(){e._tickAngles[f]\u003dnull\u003d\u003d\u003db?i(m)?m:0:b}));var w\u003de._anchorAxis;w\u0026\u0026w.autorange\u0026\u0026St(e)\u0026\u0026!Y(a,e._id)\u0026\u0026(a._insideTickLabelsAutorange||(a._insideTickLabelsAutorange\u003d{}),a._insideTickLabelsAutorange[w._name+\".autorange\"]\u003dw.autorange,_.push((function(){v.each((function(t,r){var n\u003dyt(this);n.select(\".text-math-group\").empty()\u0026\u0026(e._vals[r].bb\u003dh.bBox(n.node()))}))})));var T\u003ds.syncOrAsync(_);return T\u0026\u0026T.then\u0026\u0026t._promises.push(T),T},V.getPxPosition\u003dfunction(t,e){var r,n\u003dt._fullLayout._size,i\u003de._id.charAt(0),a\u003de.side;return\"free\"!\u003d\u003de.anchor?r\u003de._anchorAxis:\"x\"\u003d\u003d\u003di?r\u003d{_offset:n.t+(1-(e.position||0))*n.h,_length:0}:\"y\"\u003d\u003d\u003di\u0026\u0026(r\u003d{_offset:n.l+(e.position||0)*n.w,_length:0}),\"top\"\u003d\u003d\u003da||\"left\"\u003d\u003d\u003da?r._offset:\"bottom\"\u003d\u003d\u003da||\"right\"\u003d\u003d\u003da?r._offset+r._length:void 0},V.shouldShowZeroLine\u003dfunction(t,e,r){var n\u003ds.simpleMap(e.range,e.r2l);return n[0]*n[1]\u003c\u003d0\u0026\u0026e.zeroline\u0026\u0026(\"linear\"\u003d\u003d\u003de.type||\"-\"\u003d\u003d\u003de.type)\u0026\u0026!(e.rangebreaks\u0026\u0026e.maskBreaks(0)\u003d\u003d\u003dI)\u0026\u0026(vt(e,0)||!function(t,e,r,n){var i\u003dr._mainAxis;if(!i)return;var a\u003dt._fullLayout,o\u003de._id.charAt(0),s\u003dV.counterLetter(e._id),l\u003de._offset+(Math.abs(n[0])\u003cMath.abs(n[1])\u003d\u003d(\"x\"\u003d\u003d\u003do)?0:e._length);function c(t){if(!t.showline||!t.linewidth)return!1;var r\u003dMath.max((t.linewidth+e.zerolinewidth)/2,1);function n(t){return\"number\"\u003d\u003dtypeof t\u0026\u0026Math.abs(t-l)\u003cr}if(n(t._mainLinePosition)||n(t._mainMirrorPosition))return!0;var i\u003dt._linepositions||{};for(var a in i)if(n(i[a][0])||n(i[a][1]))return!0}var u\u003da._plots[r._mainSubplot];if(!(u.mainplotinfo||u).overlays.length)return c(r);for(var f\u003dV.list(t,s),h\u003d0;h\u003cf.length;h++){var p\u003df[h];if(p._mainAxis\u003d\u003d\u003di\u0026\u0026c(p))return!0}}(t,e,r,n)||function(t,e){for(var r\u003dt._fullData,n\u003de._mainSubplot,i\u003de._id.charAt(0),a\u003d0;a\u003cr.length;a++){var s\u003dr[a];if(!0\u003d\u003d\u003ds.visible\u0026\u0026s.xaxis+s.yaxis\u003d\u003d\u003dn){if(o.traceIs(s,\"bar-like\")\u0026\u0026s.orientation\u003d\u003d\u003d{x:\"h\",y:\"v\"}[i])return!0;if(s.fill\u0026\u0026s.fill.charAt(s.fill.length-1)\u003d\u003d\u003di)return!0}}return!1}(t,e))},V.clipEnds\u003dfunction(t,e){return e.filter((function(e){return vt(t,e.x)}))},V.allowAutoMargin\u003dfunction(t){for(var e\u003dV.list(t,\"\",!0),r\u003d0;r\u003ce.length;r++){var n\u003de[r];n.automargin\u0026\u0026(a.allowAutoMargin(t,xt(n)),n.mirror\u0026\u0026a.allowAutoMargin(t,bt(n))),o.getComponentMethod(\"rangeslider\",\"isVisible\")(n)\u0026\u0026a.allowAutoMargin(t,_t(n))}},V.swap\u003dfunction(t,e){for(var r\u003dfunction(t,e){var r,n,i\u003d[];for(r\u003d0;r\u003ce.length;r++){var a\u003d[],o\u003dt._fullData[e[r]].xaxis,s\u003dt._fullData[e[r]].yaxis;if(o\u0026\u0026s){for(n\u003d0;n\u003ci.length;n++)-1\u003d\u003d\u003di[n].x.indexOf(o)\u0026\u0026-1\u003d\u003d\u003di[n].y.indexOf(s)||a.push(n);if(a.length){var l,c\u003di[a[0]];if(a.length\u003e1)for(n\u003d1;n\u003ca.length;n++)l\u003di[a[n]],wt(c.x,l.x),wt(c.y,l.y);wt(c.x,[o]),wt(c.y,[s])}else i.push({x:[o],y:[s]})}}return i}(t,e),n\u003d0;n\u003cr.length;n++)Tt(t,r[n].x,r[n].y)}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../components/titles\":760,\"../../constants/alignment\":767,\"../../constants/numerical\":775,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/plots\":913,\"../../registry\":927,\"./autorange\":848,\"./axis_autotype\":850,\"./axis_ids\":853,\"./clean_ticks\":855,\"./layout_attributes\":864,\"./set_convert\":870,\"@plotly/d3\":58,\"fast-isnumeric\":245}],850:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../constants/numerical\").BADNUM,o\u003di.isArrayOrTypedArray,s\u003di.isDateTime,l\u003di.cleanNumber,c\u003dMath.round;function u(t,e){return e?n(t):\"number\"\u003d\u003dtypeof t}function f(t){return Math.max(1,(t-1)/1e3)}e.exports\u003dfunction(t,e,r){var i\u003dt,h\u003dr.noMultiCategory;if(o(i)\u0026\u0026!i.length)return\"-\";if(!h\u0026\u0026function(t){return o(t[0])\u0026\u0026o(t[1])}(i))return\"multicategory\";if(h\u0026\u0026Array.isArray(i[0])){for(var p\u003d[],d\u003d0;d\u003ci.length;d++)if(o(i[d]))for(var m\u003d0;m\u003ci[d].length;m++)p.push(i[d][m]);i\u003dp}if(function(t,e){for(var r\u003dt.length,i\u003df(r),a\u003d0,o\u003d0,l\u003d{},u\u003d0;u\u003cr;u+\u003di){var h\u003dc(u),p\u003dt[h],d\u003dString(p);l[d]||(l[d]\u003d1,s(p,e)\u0026\u0026a++,n(p)\u0026\u0026o++)}return a\u003e2*o}(i,e))return\"date\";var g\u003d\"strict\"!\u003d\u003dr.autotypenumbers;return function(t,e){for(var r\u003dt.length,n\u003df(r),i\u003d0,o\u003d0,s\u003d{},u\u003d0;u\u003cr;u+\u003dn){var h\u003dc(u),p\u003dt[h],d\u003dString(p);if(!s[d]){s[d]\u003d1;var m\u003dtypeof p;\"boolean\"\u003d\u003d\u003dm?o++:(e?l(p)!\u003d\u003da:\"number\"\u003d\u003d\u003dm)?i++:\"string\"\u003d\u003d\u003dm\u0026\u0026o++}}return o\u003e2*i}(i,g)?\"category\":function(t,e){for(var r\u003dt.length,n\u003d0;n\u003cr;n++)if(u(t[n],e))return!0;return!1}(i,g)?\"linear\":\"-\"}},{\"../../constants/numerical\":775,\"../../lib\":799,\"fast-isnumeric\":245}],851:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib\"),o\u003dt(\"../array_container_defaults\"),s\u003dt(\"./layout_attributes\"),l\u003dt(\"./tick_value_defaults\"),c\u003dt(\"./tick_mark_defaults\"),u\u003dt(\"./tick_label_defaults\"),f\u003dt(\"./category_order_defaults\"),h\u003dt(\"./line_grid_defaults\"),p\u003dt(\"./set_convert\"),d\u003dt(\"./constants\").WEEKDAY_PATTERN,m\u003dt(\"./constants\").HOUR_PATTERN;function g(t,e,r){function i(r,n){return a.coerce(t,e,s.rangebreaks,r,n)}if(i(\"enabled\")){var o\u003di(\"bounds\");if(o\u0026\u0026o.length\u003e\u003d2){var l,c,u\u003d\"\";if(2\u003d\u003d\u003do.length)for(l\u003d0;l\u003c2;l++)if(c\u003dy(o[l])){u\u003dd;break}var f\u003di(\"pattern\",u);if(f\u003d\u003d\u003dd)for(l\u003d0;l\u003c2;l++)(c\u003dy(o[l]))\u0026\u0026(e.bounds[l]\u003do[l]\u003dc-1);if(f)for(l\u003d0;l\u003c2;l++)switch(c\u003do[l],f){case d:if(!n(c))return void(e.enabled\u003d!1);if((c\u003d+c)!\u003d\u003dMath.floor(c)||c\u003c0||c\u003e\u003d7)return void(e.enabled\u003d!1);e.bounds[l]\u003do[l]\u003dc;break;case m:if(!n(c))return void(e.enabled\u003d!1);if((c\u003d+c)\u003c0||c\u003e24)return void(e.enabled\u003d!1);e.bounds[l]\u003do[l]\u003dc}if(!1\u003d\u003d\u003dr.autorange){var h\u003dr.range;if(h[0]\u003ch[1]){if(o[0]\u003ch[0]\u0026\u0026o[1]\u003eh[1])return void(e.enabled\u003d!1)}else if(o[0]\u003eh[0]\u0026\u0026o[1]\u003ch[1])return void(e.enabled\u003d!1)}}else{var p\u003di(\"values\");if(!p||!p.length)return void(e.enabled\u003d!1);i(\"dvalue\")}}}e.exports\u003dfunction(t,e,r,n,m){var v,y\u003dn.letter,x\u003dn.font||{},b\u003dn.splomStash||{},_\u003dr(\"visible\",!n.visibleDflt),w\u003de._template||{},T\u003de.type||w.type||\"-\";\"date\"\u003d\u003d\u003dT\u0026\u0026(i.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\",n.calendar),n.noTicklabelmode||(v\u003dr(\"ticklabelmode\")));var k\u003d\"\";n.noTicklabelposition\u0026\u0026\"multicategory\"!\u003d\u003dT||(k\u003da.coerce(t,e,{ticklabelposition:{valType:\"enumerated\",dflt:\"outside\",values:\"period\"\u003d\u003d\u003dv?[\"outside\",\"inside\"]:\"x\"\u003d\u003d\u003dy?[\"outside\",\"inside\",\"outside left\",\"inside left\",\"outside right\",\"inside right\"]:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside bottom\",\"inside bottom\"]}},\"ticklabelposition\")),n.noTicklabeloverflow||r(\"ticklabeloverflow\",-1!\u003d\u003dk.indexOf(\"inside\")?\"hide past domain\":\"category\"\u003d\u003d\u003dT||\"multicategory\"\u003d\u003d\u003dT?\"allow\":\"hide past div\"),p(e,m);var M\u003d!e.isValidRange(t.range);M\u0026\u0026n.reverseDflt\u0026\u0026(M\u003d\"reversed\"),!r(\"autorange\",M)||\"linear\"!\u003d\u003dT\u0026\u0026\"-\"!\u003d\u003dT||r(\"rangemode\"),r(\"range\"),e.cleanRange(),f(t,e,r,n),\"category\"\u003d\u003d\u003dT||n.noHover||r(\"hoverformat\");var A\u003dr(\"color\"),S\u003dA!\u003d\u003ds.color.dflt?A:x.color,E\u003db.label||m._dfltTitle[y];if(u(t,e,r,T,n,{pass:1}),!_)return e;r(\"title.text\",E),a.coerceFont(r,\"title.font\",{family:x.family,size:a.bigFont(x.size),color:S}),l(t,e,r,T),u(t,e,r,T,n,{pass:2}),c(t,e,r,n),h(t,e,r,{dfltColor:A,bgColor:n.bgColor,showGrid:n.showGrid,attributes:s}),(e.showline||e.ticks)\u0026\u0026r(\"mirror\"),n.automargin\u0026\u0026r(\"automargin\");var L,C\u003d\"multicategory\"\u003d\u003d\u003dT;n.noTickson||\"category\"!\u003d\u003dT\u0026\u0026!C||!e.ticks\u0026\u0026!e.showgrid||(C\u0026\u0026(L\u003d\"boundaries\"),\"boundaries\"\u003d\u003d\u003dr(\"tickson\",L)\u0026\u0026delete e.ticklabelposition);C\u0026\u0026(r(\"showdividers\")\u0026\u0026(r(\"dividercolor\"),r(\"dividerwidth\")));if(\"date\"\u003d\u003d\u003dT)if(o(t,e,{name:\"rangebreaks\",inclusionAttr:\"enabled\",handleItemDefaults:g}),e.rangebreaks.length){for(var P\u003d0;P\u003ce.rangebreaks.length;P++)if(e.rangebreaks[P].pattern\u003d\u003d\u003dd){e._hasDayOfWeekBreaks\u003d!0;break}if(p(e,m),m._has(\"scattergl\")||m._has(\"splom\"))for(var I\u003d0;I\u003cn.data.length;I++){var O\u003dn.data[I];\"scattergl\"!\u003d\u003dO.type\u0026\u0026\"splom\"!\u003d\u003dO.type||(O.visible\u003d!1,a.warn(O.type+\" traces do not work on axes with rangebreaks. Setting trace \"+O.index+\" to `visible: false`.\"))}}else delete e.rangebreaks;return e};var v\u003d{sun:1,mon:2,tue:3,wed:4,thu:5,fri:6,sat:7};function y(t){if(\"string\"\u003d\u003dtypeof t)return v[t.substr(0,3).toLowerCase()]}},{\"../../lib\":799,\"../../registry\":927,\"../array_container_defaults\":844,\"./category_order_defaults\":854,\"./constants\":856,\"./layout_attributes\":864,\"./line_grid_defaults\":866,\"./set_convert\":870,\"./tick_label_defaults\":871,\"./tick_mark_defaults\":872,\"./tick_value_defaults\":873,\"fast-isnumeric\":245}],852:[function(t,e,r){\"use strict\";var n\u003dt(\"../../constants/docs\"),i\u003dn.FORMAT_LINK,a\u003dn.DATE_FORMAT_LINK;function o(t,e){return[\"Sets the \"+t+\" formatting rule\"+(e?\"for `\"+e+\"` \":\"\"),\"using d3 formatting mini-languages\",\"which are very similar to those in Python. For numbers, see: \"+i+\".\"].join(\" \")}function s(t,e){return o(t,e)+[\" And for dates see: \"+a+\".\",\"We add two items to d3\u0027s date formatter:\",\"*%h* for half of the year as a decimal number as well as\",\"*%{n}f* for fractional seconds\",\"with n digits. For example, *2016-10-13 09:15:23.456* with tickformat\",\"*%H~%M~%S.%2f* would display *09~15~23.46*\"].join(\" \")}e.exports\u003d{axisHoverFormat:function(t,e){return{valType:\"string\",dflt:\"\",editType:\"none\",description:(e?o:s)(\"hover text\",t)+[\"By default the values are formatted using \"+(e?\"generic number format\":\"`\"+t+\"axis.hoverformat`\")+\".\"].join(\" \")}},descriptionOnlyNumbers:o,descriptionWithDates:s}},{\"../../constants/docs\":770}],853:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"./constants\");function a(t,e){if(e\u0026\u0026e.length)for(var r\u003d0;r\u003ce.length;r++)if(e[r][t])return!0;return!1}r.id2name\u003dfunction(t){if(\"string\"\u003d\u003dtypeof t\u0026\u0026t.match(i.AX_ID_PATTERN)){var e\u003dt.split(\" \")[0].substr(1);return\"1\"\u003d\u003d\u003de\u0026\u0026(e\u003d\"\"),t.charAt(0)+\"axis\"+e}},r.name2id\u003dfunction(t){if(t.match(i.AX_NAME_PATTERN)){var e\u003dt.substr(5);return\"1\"\u003d\u003d\u003de\u0026\u0026(e\u003d\"\"),t.charAt(0)+e}},r.cleanId\u003dfunction(t,e,r){var n\u003d/( domain)$/.test(t);if(\"string\"\u003d\u003dtypeof t\u0026\u0026t.match(i.AX_ID_PATTERN)\u0026\u0026(!e||t.charAt(0)\u003d\u003d\u003de)\u0026\u0026(!n||r)){var a\u003dt.split(\" \")[0].substr(1).replace(/^0+/,\"\");return\"1\"\u003d\u003d\u003da\u0026\u0026(a\u003d\"\"),t.charAt(0)+a+(n\u0026\u0026r?\" domain\":\"\")}},r.list\u003dfunction(t,e,n){var i\u003dt._fullLayout;if(!i)return[];var a,o\u003dr.listIds(t,e),s\u003dnew Array(o.length);for(a\u003d0;a\u003co.length;a++){var l\u003do[a];s[a]\u003di[l.charAt(0)+\"axis\"+l.substr(1)]}if(!n){var c\u003di._subplots.gl3d||[];for(a\u003d0;a\u003cc.length;a++){var u\u003di[c[a]];e?s.push(u[e+\"axis\"]):s.push(u.xaxis,u.yaxis,u.zaxis)}}return s},r.listIds\u003dfunction(t,e){var r\u003dt._fullLayout;if(!r)return[];var n\u003dr._subplots;return e?n[e+\"axis\"]:n.xaxis.concat(n.yaxis)},r.getFromId\u003dfunction(t,e,n){var i\u003dt._fullLayout;return e\u003dvoid 0\u003d\u003d\u003de||\"string\"!\u003dtypeof e?e:e.replace(\" domain\",\"\"),\"x\"\u003d\u003d\u003dn?e\u003de.replace(/y[0-9]*/,\"\"):\"y\"\u003d\u003d\u003dn\u0026\u0026(e\u003de.replace(/x[0-9]*/,\"\")),i[r.id2name(e)]},r.getFromTrace\u003dfunction(t,e,i){var a\u003dt._fullLayout,o\u003dnull;if(n.traceIs(e,\"gl3d\")){var s\u003de.scene;\"scene\"\u003d\u003d\u003ds.substr(0,5)\u0026\u0026(o\u003da[s][i+\"axis\"])}else o\u003dr.getFromId(t,e[i+\"axis\"]||i);return o},r.idSort\u003dfunction(t,e){var r\u003dt.charAt(0),n\u003de.charAt(0);return r!\u003d\u003dn?r\u003en?1:-1:+(t.substr(1)||1)-+(e.substr(1)||1)},r.ref2id\u003dfunction(t){return!!/^[xyz]/.test(t)\u0026\u0026t.split(\" \")[0]},r.isLinked\u003dfunction(t,e){return a(e,t._axisMatchGroups)||a(e,t._axisConstraintGroups)}},{\"../../registry\":927,\"./constants\":856}],854:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n){if(\"category\"\u003d\u003d\u003de.type){var i,a\u003dt.categoryarray,o\u003dArray.isArray(a)\u0026\u0026a.length\u003e0;o\u0026\u0026(i\u003d\"array\");var s,l\u003dr(\"categoryorder\",i);\"array\"\u003d\u003d\u003dl\u0026\u0026(s\u003dr(\"categoryarray\")),o||\"array\"!\u003d\u003dl||(l\u003de.categoryorder\u003d\"trace\"),\"trace\"\u003d\u003d\u003dl?e._initialCategories\u003d[]:\"array\"\u003d\u003d\u003dl?e._initialCategories\u003ds.slice():(s\u003dfunction(t,e){var r,n,i,a\u003de.dataAttr||t._id.charAt(0),o\u003d{};if(e.axData)r\u003de.axData;else for(r\u003d[],n\u003d0;n\u003ce.data.length;n++){var s\u003de.data[n];s[a+\"axis\"]\u003d\u003d\u003dt._id\u0026\u0026r.push(s)}for(n\u003d0;n\u003cr.length;n++){var l\u003dr[n][a];for(i\u003d0;i\u003cl.length;i++){var c\u003dl[i];null!\u003dc\u0026\u0026(o[c]\u003d1)}}return Object.keys(o)}(e,n).sort(),\"category ascending\"\u003d\u003d\u003dl?e._initialCategories\u003ds:\"category descending\"\u003d\u003d\u003dl\u0026\u0026(e._initialCategories\u003ds.reverse()))}}},{}],855:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../constants/numerical\"),o\u003da.ONEDAY,s\u003da.ONEWEEK;r.dtick\u003dfunction(t,e){var r\u003d\"log\"\u003d\u003d\u003de,i\u003d\"date\"\u003d\u003d\u003de,a\u003d\"category\"\u003d\u003d\u003de,s\u003di?o:1;if(!t)return s;if(n(t))return(t\u003dNumber(t))\u003c\u003d0?s:a?Math.max(1,Math.round(t)):i?Math.max(.1,t):t;if(\"string\"!\u003dtypeof t||!i\u0026\u0026!r)return s;var l\u003dt.charAt(0),c\u003dt.substr(1);return(c\u003dn(c)?Number(c):0)\u003c\u003d0||!(i\u0026\u0026\"M\"\u003d\u003d\u003dl\u0026\u0026c\u003d\u003d\u003dMath.round(c)||r\u0026\u0026\"L\"\u003d\u003d\u003dl||r\u0026\u0026\"D\"\u003d\u003d\u003dl\u0026\u0026(1\u003d\u003d\u003dc||2\u003d\u003d\u003dc))?s:t},r.tick0\u003dfunction(t,e,r,a){return\"date\"\u003d\u003d\u003de?i.cleanDate(t,i.dateTick0(r,a%s\u003d\u003d0?1:0)):\"D1\"!\u003d\u003da\u0026\u0026\"D2\"!\u003d\u003da?n(t)?Number(t):0:void 0}},{\"../../constants/numerical\":775,\"../../lib\":799,\"fast-isnumeric\":245}],856:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/regex\").counter;e.exports\u003d{idRegex:{x:n(\"x\",\"( domain)?\"),y:n(\"y\",\"( domain)?\")},attrRegex:n(\"[xy]axis\"),xAxisMatch:n(\"xaxis\"),yAxisMatch:n(\"yaxis\"),AX_ID_PATTERN:/^[xyz][0-9]*( domain)?$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,SUBPLOT_PATTERN:/^x([0-9]*)y([0-9]*)$/,HOUR_PATTERN:\"hour\",WEEKDAY_PATTERN:\"day of week\",MINDRAG:8,MINSELECT:12,MINZOOM:20,DRAGGERSIZE:20,BENDPX:1.5,REDRAWDELAY:50,SELECTDELAY:100,SELECTID:\"-select\",DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:[\"imagelayer\",\"heatmaplayer\",\"contourcarpetlayer\",\"contourlayer\",\"funnellayer\",\"waterfalllayer\",\"barlayer\",\"carpetlayer\",\"violinlayer\",\"boxlayer\",\"ohlclayer\",\"scattercarpetlayer\",\"scatterlayer\"],clipOnAxisFalseQuery:[\".scatterlayer\",\".barlayer\",\".funnellayer\",\".waterfalllayer\"],layerValue2layerClass:{\"above traces\":\"above\",\"below traces\":\"below\"}}},{\"../../lib/regex\":816}],857:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./autorange\"),a\u003dt(\"./axis_ids\").id2name,o\u003dt(\"./layout_attributes\"),s\u003dt(\"./scale_zoom\"),l\u003dt(\"./set_convert\"),c\u003dt(\"../../constants/numerical\").ALMOST_EQUAL,u\u003dt(\"../../constants/alignment\").FROM_BL;function f(t,e,r){var i\u003dr.axIds,s\u003dr.layoutOut,l\u003dr.hasImage,c\u003ds._axisConstraintGroups,u\u003ds._axisMatchGroups,f\u003de._id,m\u003df.charAt(0),g\u003d((s._splomAxes||{})[m]||{})[f]||{},v\u003de._id,y\u003d\"x\"\u003d\u003d\u003dv.charAt(0);function x(r,i){return n.coerce(t,e,o,r,i)}e._matchGroup\u003dnull,e._constraintGroup\u003dnull,x(\"constrain\",l?\"domain\":\"range\"),n.coerce(t,e,{constraintoward:{valType:\"enumerated\",values:y?[\"left\",\"center\",\"right\"]:[\"bottom\",\"middle\",\"top\"],dflt:y?\"center\":\"middle\"}},\"constraintoward\");var b,_,w\u003de.type,T\u003d[];for(b\u003d0;b\u003ci.length;b++){if((_\u003di[b])!\u003d\u003dv)s[a(_)].type\u003d\u003d\u003dw\u0026\u0026T.push(_)}var k\u003dp(c,v);if(k){var M\u003d[];for(b\u003d0;b\u003cT.length;b++)k[_\u003dT[b]]||M.push(_);T\u003dM}var A,S,E\u003dT.length;E\u0026\u0026(t.matches||g.matches)\u0026\u0026(A\u003dn.coerce(t,e,{matches:{valType:\"enumerated\",values:T,dflt:-1!\u003d\u003dT.indexOf(g.matches)?g.matches:void 0}},\"matches\"));var L\u003dl\u0026\u0026!y?e.anchor:void 0;if(E\u0026\u0026!A\u0026\u0026(t.scaleanchor||L)\u0026\u0026(S\u003dn.coerce(t,e,{scaleanchor:{valType:\"enumerated\",values:T}},\"scaleanchor\",L)),A){e._matchGroup\u003dd(u,v,A,1);var C\u003ds[a(A)],P\u003dh(s,e)/h(s,C);y!\u003d\u003d(\"x\"\u003d\u003d\u003dA.charAt(0))\u0026\u0026(P\u003d(y?\"x\":\"y\")+P),d(c,v,A,P)}else t.matches\u0026\u0026-1!\u003d\u003di.indexOf(t.matches)\u0026\u0026n.warn(\"ignored \"+e._name+\u0027.matches: \"\u0027+t.matches+\u0027\" to avoid an infinite loop\u0027);if(S){var I\u003dx(\"scaleratio\");I||(I\u003de.scaleratio\u003d1),d(c,v,S,I)}else t.scaleanchor\u0026\u0026-1!\u003d\u003di.indexOf(t.scaleanchor)\u0026\u0026n.warn(\"ignored \"+e._name+\u0027.scaleanchor: \"\u0027+t.scaleanchor+\u0027\" to avoid either an infinite loop and possibly inconsistent scaleratios, or because this axis declares a *matches* constraint.\u0027)}function h(t,e){var r\u003de.domain;return r||(r\u003dt[a(e.overlaying)].domain),r[1]-r[0]}function p(t,e){for(var r\u003d0;r\u003ct.length;r++)if(t[r][e])return t[r];return null}function d(t,e,r,n){var i,a,o,s,l,c\u003dp(t,e);null\u003d\u003d\u003dc?((c\u003d{})[e]\u003d1,l\u003dt.length,t.push(c)):l\u003dt.indexOf(c);var u\u003dObject.keys(c);for(i\u003d0;i\u003ct.length;i++)if(o\u003dt[i],i!\u003d\u003dl\u0026\u0026o[r]){var f\u003do[r];for(a\u003d0;a\u003cu.length;a++)o[s\u003du[a]]\u003dm(f,m(n,c[s]));return void t.splice(l,1)}if(1!\u003d\u003dn)for(a\u003d0;a\u003cu.length;a++){var h\u003du[a];c[h]\u003dm(n,c[h])}c[r]\u003d1}function m(t,e){var r,n,i\u003d\"\",a\u003d\"\";\"string\"\u003d\u003dtypeof t\u0026\u0026(r\u003d(i\u003dt.match(/^[xy]*/)[0]).length,t\u003d+t.substr(r)),\"string\"\u003d\u003dtypeof e\u0026\u0026(n\u003d(a\u003de.match(/^[xy]*/)[0]).length,e\u003d+e.substr(n));var o\u003dt*e;return r||n?r\u0026\u0026n\u0026\u0026i.charAt(0)!\u003d\u003da.charAt(0)?r\u003d\u003d\u003dn?o:(r\u003en?i.substr(n):a.substr(r))+o:i+a+t*e:o}function g(t,e){for(var r\u003de._size,n\u003dr.h/r.w,i\u003d{},a\u003dObject.keys(t),o\u003d0;o\u003ca.length;o++){var s\u003da[o],l\u003dt[s];if(\"string\"\u003d\u003dtypeof l){var c\u003dl.match(/^[xy]*/)[0],u\u003dc.length;l\u003d+l.substr(u);for(var f\u003d\"y\"\u003d\u003d\u003dc.charAt(0)?n:1/n,h\u003d0;h\u003cu;h++)l*\u003df}i[s]\u003dl}return i}function v(t,e){var r\u003dt._inputDomain,n\u003du[t.constraintoward],i\u003dr[0]+(r[1]-r[0])*n;t.domain\u003dt._input.domain\u003d[i+(r[0]-i)/e,i+(r[1]-i)/e],t.setScale()}r.handleDefaults\u003dfunction(t,e,r){var i,o,s,c,u,h,p,d,m\u003dr.axIds,g\u003dr.axHasImage,v\u003de._axisConstraintGroups\u003d[],y\u003de._axisMatchGroups\u003d[];for(i\u003d0;i\u003cm.length;i++)f(u\u003dt[c\u003da(m[i])],h\u003de[c],{axIds:m,layoutOut:e,hasImage:g[c]});function x(t,r){for(i\u003d0;i\u003ct.length;i++)for(s in o\u003dt[i])e[a(s)][r]\u003do}for(x(y,\"_matchGroup\"),i\u003d0;i\u003cv.length;i++)for(s in o\u003dv[i])if((h\u003de[a(s)]).fixedrange){for(var b in o){var _\u003da(b);!1\u003d\u003d\u003d(t[_]||{}).fixedrange\u0026\u0026n.warn(\"fixedrange was specified as false for axis \"+_+\" but was overridden because another axis in its constraint group has fixedrange true\"),e[_].fixedrange\u003d!0}break}for(i\u003d0;i\u003cv.length;){for(s in o\u003dv[i]){(h\u003de[a(s)])._matchGroup\u0026\u0026Object.keys(h._matchGroup).length\u003d\u003d\u003dObject.keys(o).length\u0026\u0026(v.splice(i,1),i--);break}i++}x(v,\"_constraintGroup\");var w\u003d[\"constrain\",\"range\",\"autorange\",\"rangemode\",\"rangebreaks\",\"categoryorder\",\"categoryarray\"],T\u003d!1,k\u003d!1;function M(){d\u003dh[p],\"rangebreaks\"\u003d\u003d\u003dp\u0026\u0026(k\u003dh._hasDayOfWeekBreaks)}for(i\u003d0;i\u003cy.length;i++){o\u003dy[i];for(var A\u003d0;A\u003cw.length;A++){var S;for(s in p\u003dw[A],d\u003dnull,o)if(u\u003dt[c\u003da(s)],h\u003de[c],p in h){if(!h.matches\u0026\u0026(S\u003dh,p in u)){M();break}null\u003d\u003d\u003dd\u0026\u0026p in u\u0026\u0026M()}if(\"range\"\u003d\u003d\u003dp\u0026\u0026d\u0026\u0026(T\u003d!0),\"autorange\"\u003d\u003d\u003dp\u0026\u0026null\u003d\u003d\u003dd\u0026\u0026T\u0026\u0026(d\u003d!1),null\u003d\u003d\u003dd\u0026\u0026p in S\u0026\u0026(d\u003dS[p]),null!\u003d\u003dd)for(s in o)(h\u003de[a(s)])[p]\u003d\"range\"\u003d\u003d\u003dp?d.slice():d,\"rangebreaks\"\u003d\u003d\u003dp\u0026\u0026(h._hasDayOfWeekBreaks\u003dk,l(h,e))}}},r.enforce\u003dfunction(t){var e,r,n,o,l,u,f,h,p\u003dt._fullLayout,d\u003dp._axisConstraintGroups||[];for(e\u003d0;e\u003cd.length;e++){n\u003dg(d[e],p);var m\u003dObject.keys(n),y\u003d1/0,x\u003d0,b\u003d1/0,_\u003d{},w\u003d{},T\u003d!1;for(r\u003d0;r\u003cm.length;r++)w[o\u003dm[r]]\u003dl\u003dp[a(o)],l._inputDomain?l.domain\u003dl._inputDomain.slice():l._inputDomain\u003dl.domain.slice(),l._inputRange||(l._inputRange\u003dl.range.slice()),l.setScale(),_[o]\u003du\u003dMath.abs(l._m)/n[o],y\u003dMath.min(y,u),\"domain\"!\u003d\u003dl.constrain\u0026\u0026l._constraintShrinkable||(b\u003dMath.min(b,u)),delete l._constraintShrinkable,x\u003dMath.max(x,u),\"domain\"\u003d\u003d\u003dl.constrain\u0026\u0026(T\u003d!0);if(!(y\u003ec*x)||T)for(r\u003d0;r\u003cm.length;r++)if(u\u003d_[o\u003dm[r]],f\u003d(l\u003dw[o]).constrain,u!\u003d\u003db||\"domain\"\u003d\u003d\u003df)if(h\u003du/b,\"range\"\u003d\u003d\u003df)s(l,h);else{var k\u003dl._inputDomain,M\u003d(l.domain[1]-l.domain[0])/(k[1]-k[0]),A\u003d(l.r2l(l.range[1])-l.r2l(l.range[0]))/(l.r2l(l._inputRange[1])-l.r2l(l._inputRange[0]));if((h/\u003dM)*A\u003c1){l.domain\u003dl._input.domain\u003dk.slice(),s(l,h);continue}if(A\u003c1\u0026\u0026(l.range\u003dl._input.range\u003dl._inputRange.slice(),h*\u003dA),l.autorange){var S\u003dl.r2l(l.range[0]),E\u003dl.r2l(l.range[1]),L\u003d(S+E)/2,C\u003dL,P\u003dL,I\u003dMath.abs(E-L),O\u003dL-I*h*1.0001,z\u003dL+I*h*1.0001,D\u003di.makePadFn(p,l,0),R\u003di.makePadFn(p,l,1);v(l,h);var F,B,N\u003dMath.abs(l._m),j\u003di.concatExtremes(t,l),U\u003dj.min,V\u003dj.max;for(B\u003d0;B\u003cU.length;B++)(F\u003dU[B].val-D(U[B])/N)\u003eO\u0026\u0026F\u003cC\u0026\u0026(C\u003dF);for(B\u003d0;B\u003cV.length;B++)(F\u003dV[B].val+R(V[B])/N)\u003cz\u0026\u0026F\u003eP\u0026\u0026(P\u003dF);h/\u003d(P-C)/(2*I),C\u003dl.l2r(C),P\u003dl.l2r(P),l.range\u003dl._input.range\u003dS\u003cE?[C,P]:[P,C]}v(l,h)}}},r.getAxisGroup\u003dfunction(t,e){for(var r\u003dt._axisMatchGroups,n\u003d0;n\u003cr.length;n++){if(r[n][e])return\"g\"+n}return e},r.clean\u003dfunction(t,e){if(e._inputDomain){for(var r\u003d!1,n\u003de._id,i\u003dt._fullLayout._axisConstraintGroups,a\u003d0;a\u003ci.length;a++)if(i[a][n]){r\u003d!0;break}r\u0026\u0026\"domain\"\u003d\u003d\u003de.constrain||(e._input.domain\u003de.domain\u003de._inputDomain,delete e._inputDomain)}}},{\"../../constants/alignment\":767,\"../../constants/numerical\":775,\"../../lib\":799,\"./autorange\":848,\"./axis_ids\":853,\"./layout_attributes\":864,\"./scale_zoom\":868,\"./set_convert\":870}],858:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"has-passive-events\"),o\u003dt(\"../../registry\"),s\u003dt(\"../../lib\"),l\u003ds.strTranslate,c\u003dt(\"../../lib/svg_text_utils\"),u\u003dt(\"../../components/color\"),f\u003dt(\"../../components/drawing\"),h\u003dt(\"../../components/fx\"),p\u003dt(\"./axes\"),d\u003dt(\"../../lib/setcursor\"),m\u003dt(\"../../components/dragelement\"),g\u003dt(\"../../components/dragelement/helpers\"),v\u003dg.selectingOrDrawing,y\u003dg.freeMode,x\u003dt(\"../../constants/alignment\").FROM_TL,b\u003dt(\"../../lib/clear_gl_canvases\"),_\u003dt(\"../../plot_api/subroutines\").redrawReglTraces,w\u003dt(\"../plots\"),T\u003dt(\"./axis_ids\").getFromId,k\u003dt(\"./select\").prepSelect,M\u003dt(\"./select\").clearSelect,A\u003dt(\"./select\").selectOnClick,S\u003dt(\"./scale_zoom\"),E\u003dt(\"./constants\"),L\u003dE.MINDRAG,C\u003dE.MINZOOM,P\u003d!0;function I(t,e,r,n){var i\u003ds.ensureSingle(t.draglayer,e,r,(function(e){e.classed(\"drag\",!0).style({fill:\"transparent\",\"stroke-width\":0}).attr(\"data-subplot\",t.id)}));return i.call(d,n),i.node()}function O(t,e,r,i,a,o,s){var l\u003dI(t,\"rect\",e,r);return n.select(l).call(f.setRect,i,a,o,s),l}function z(t,e){for(var r\u003d0;r\u003ct.length;r++)if(!t[r].fixedrange)return e;return\"\"}function D(t,e,r,n,i){for(var a\u003d0;a\u003ct.length;a++){var o\u003dt[a];if(!o.fixedrange)if(o.rangebreaks){var s\u003d\"y\"\u003d\u003d\u003do._id.charAt(0),l\u003ds?1-e:e,c\u003ds?1-r:r;n[o._name+\".range[0]\"]\u003do.l2r(o.p2l(l*o._length)),n[o._name+\".range[1]\"]\u003do.l2r(o.p2l(c*o._length))}else{var u\u003do._rl[0],f\u003do._rl[1]-u;n[o._name+\".range[0]\"]\u003do.l2r(u+f*e),n[o._name+\".range[1]\"]\u003do.l2r(u+f*r)}}if(i\u0026\u0026i.length){var h\u003d(e+(1-r))/2;D(i,h,1-h,n,[])}}function R(t,e){for(var r\u003d0;r\u003ct.length;r++){var n\u003dt[r];if(!n.fixedrange)if(n.rangebreaks){var i\u003dn._length,a\u003d(n.p2l(0+e)-n.p2l(0)+(n.p2l(i+e)-n.p2l(i)))/2;n.range\u003d[n.l2r(n._rl[0]-a),n.l2r(n._rl[1]-a)]}else n.range\u003d[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)]}}function F(t){return 1-(t\u003e\u003d0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function B(t,e,r,n,i){return t.append(\"path\").attr(\"class\",\"zoombox\").style({fill:e\u003e.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"transform\",l(r,n)).attr(\"d\",i+\"Z\")}function N(t,e,r){return t.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:u.background,stroke:u.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"transform\",l(e,r)).attr(\"d\",\"M0,0Z\")}function j(t,e,r,n,i,a){t.attr(\"d\",n+\"M\"+r.l+\",\"+r.t+\"v\"+r.h+\"h\"+r.w+\"v-\"+r.h+\"h-\"+r.w+\"Z\"),U(t,e,i,a)}function U(t,e,r,n){r||(t.transition().style(\"fill\",n\u003e.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),e.transition().style(\"opacity\",1).duration(200))}function V(t){n.select(t).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}function q(t){P\u0026\u0026t.data\u0026\u0026t._context.showTips\u0026\u0026(s.notifier(s._(t,\"Double-click to zoom back out\"),\"long\"),P\u003d!1)}function H(t){var e\u003dMath.floor(Math.min(t.b-t.t,t.r-t.l,C)/2);return\"M\"+(t.l-3.5)+\",\"+(t.t-.5+e)+\"h3v\"+-e+\"h\"+e+\"v-3h-\"+(e+3)+\"ZM\"+(t.r+3.5)+\",\"+(t.t-.5+e)+\"h-3v\"+-e+\"h\"+-e+\"v-3h\"+(e+3)+\"ZM\"+(t.r+3.5)+\",\"+(t.b+.5-e)+\"h-3v\"+e+\"h\"+-e+\"v3h\"+(e+3)+\"ZM\"+(t.l-3.5)+\",\"+(t.b+.5-e)+\"h3v\"+e+\"h\"+e+\"v3h-\"+(e+3)+\"Z\"}function G(t,e,r,n,i){for(var a,o,l,c,u\u003d!1,f\u003d{},h\u003d{},p\u003d(i||{}).xaHash,d\u003d(i||{}).yaHash,m\u003d0;m\u003ce.length;m++){var g\u003de[m];for(a in r)if(g[a]){for(l in g)i\u0026\u0026(p[l]||d[l])||(\"x\"\u003d\u003d\u003dl.charAt(0)?r:n)[l]||(f[l]\u003da);for(o in n)i\u0026\u0026(p[o]||d[o])||!g[o]||(u\u003d!0)}for(o in n)if(g[o])for(c in g)i\u0026\u0026(p[c]||d[c])||(\"x\"\u003d\u003d\u003dc.charAt(0)?r:n)[c]||(h[c]\u003do)}u\u0026\u0026(s.extendFlat(f,h),h\u003d{});var v\u003d{},y\u003d[];for(l in f){var x\u003dT(t,l);y.push(x),v[x._id]\u003dx}var b\u003d{},_\u003d[];for(c in h){var w\u003dT(t,c);_.push(w),b[w._id]\u003dw}return{xaHash:v,yaHash:b,xaxes:y,yaxes:_,xLinks:f,yLinks:h,isSubplotConstrained:u}}function Y(t,e){if(a){var r\u003dvoid 0!\u003d\u003dt.onwheel?\"wheel\":\"mousewheel\";t._onwheel\u0026\u0026t.removeEventListener(r,t._onwheel),t._onwheel\u003de,t.addEventListener(r,e,{passive:!1})}else void 0!\u003d\u003dt.onwheel?t.onwheel\u003de:void 0!\u003d\u003dt.onmousewheel?t.onmousewheel\u003de:t.isAddedWheelEvent||(t.isAddedWheelEvent\u003d!0,t.addEventListener(\"wheel\",e,{passive:!1}))}function W(t){var e\u003d[];for(var r in t)e.push(t[r]);return e}e.exports\u003d{makeDragBox:function(t,e,r,a,l,u,d,g){var P,I,U,X,Z,J,K,Q,$,tt,et,rt,nt,it,at,ot,st,lt,ct,ut,ft,ht,pt,dt\u003dt._fullLayout._zoomlayer,mt\u003dd+g\u003d\u003d\u003d\"nsew\",gt\u003d1\u003d\u003d\u003d(d+g).length;function vt(){if(P\u003de.xaxis,I\u003de.yaxis,$\u003dP._length,tt\u003dI._length,K\u003dP._offset,Q\u003dI._offset,(U\u003d{})[P._id]\u003dP,(X\u003d{})[I._id]\u003dI,d\u0026\u0026g)for(var r\u003de.overlays,n\u003d0;n\u003cr.length;n++){var i\u003dr[n].xaxis;U[i._id]\u003di;var a\u003dr[n].yaxis;X[a._id]\u003da}Z\u003dW(U),J\u003dW(X),nt\u003dz(Z,g),it\u003dz(J,d),at\u003d!it\u0026\u0026!nt,rt\u003dG(t,t._fullLayout._axisMatchGroups,U,X);var o\u003d(et\u003dG(t,t._fullLayout._axisConstraintGroups,U,X,rt)).isSubplotConstrained||rt.isSubplotConstrained;ot\u003dg||o,st\u003dd||o;var s\u003dt._fullLayout;lt\u003ds._has(\"scattergl\"),ct\u003ds._has(\"splom\"),ut\u003ds._has(\"svg\")}vt();var yt\u003dfunction(t,e,r){if(!t)return\"pointer\";if(\"nsew\"\u003d\u003d\u003dt)return r?\"\":\"pan\"\u003d\u003d\u003de?\"move\":\"crosshair\";return t.toLowerCase()+\"-resize\"}(it+nt,t._fullLayout.dragmode,mt),xt\u003dO(e,d+g+\"drag\",yt,r,a,l,u);if(at\u0026\u0026!mt)return xt.onmousedown\u003dnull,xt.style.pointerEvents\u003d\"none\",xt;var bt,_t,wt,Tt,kt,Mt,At,St,Et,Lt,Ct\u003d{element:xt,gd:t,plotinfo:e};function Pt(){Ct.plotinfo.selection\u003d!1,M(t)}function It(t,r){var i\u003dCt.gd;if(i._fullLayout._activeShapeIndex\u003e\u003d0)i._fullLayout._deactivateShape(i);else{var a\u003di._fullLayout.clickmode;if(V(i),2!\u003d\u003dt||gt||qt(),mt)a.indexOf(\"select\")\u003e-1\u0026\u0026A(r,i,Z,J,e.id,Ct),a.indexOf(\"event\")\u003e-1\u0026\u0026h.click(i,r,e.id);else if(1\u003d\u003d\u003dt\u0026\u0026gt){var s\u003dd?I:P,l\u003d\"s\"\u003d\u003d\u003dd||\"w\"\u003d\u003d\u003dg?0:1,u\u003ds._name+\".range[\"+l+\"]\",f\u003dfunction(t,e){var r,i\u003dt.range[e],a\u003dMath.abs(i-t.range[1-e]);return\"date\"\u003d\u003d\u003dt.type?i:\"log\"\u003d\u003d\u003dt.type?(r\u003dMath.ceil(Math.max(0,-Math.log(a)/Math.LN10))+3,n.format(\".\"+r+\"g\")(Math.pow(10,i))):(r\u003dMath.floor(Math.log(Math.abs(i))/Math.LN10)-Math.floor(Math.log(a)/Math.LN10)+4,n.format(\".\"+String(r)+\"g\")(i))}(s,l),p\u003d\"left\",m\u003d\"middle\";if(s.fixedrange)return;d?(m\u003d\"n\"\u003d\u003d\u003dd?\"top\":\"bottom\",\"right\"\u003d\u003d\u003ds.side\u0026\u0026(p\u003d\"right\")):\"e\"\u003d\u003d\u003dg\u0026\u0026(p\u003d\"right\"),i._context.showAxisRangeEntryBoxes\u0026\u0026n.select(xt).call(c.makeEditable,{gd:i,immediate:!0,background:i._fullLayout.paper_bgcolor,text:String(f),fill:s.tickfont?s.tickfont.color:\"#444\",horizontalAlign:p,verticalAlign:m}).on(\"edit\",(function(t){var e\u003ds.d2r(t);void 0!\u003d\u003de\u0026\u0026o.call(\"_guiRelayout\",i,u,e)}))}}}function Ot(e,r){if(t._transitioningWithDuration)return!1;var n\u003dMath.max(0,Math.min($,ht*e+bt)),i\u003dMath.max(0,Math.min(tt,pt*r+_t)),a\u003dMath.abs(n-bt),o\u003dMath.abs(i-_t);function s(){At\u003d\"\",wt.r\u003dwt.l,wt.t\u003dwt.b,Et.attr(\"d\",\"M0,0Z\")}if(wt.l\u003dMath.min(bt,n),wt.r\u003dMath.max(bt,n),wt.t\u003dMath.min(_t,i),wt.b\u003dMath.max(_t,i),et.isSubplotConstrained)a\u003eC||o\u003eC?(At\u003d\"xy\",a/$\u003eo/tt?(o\u003da*tt/$,_t\u003ei?wt.t\u003d_t-o:wt.b\u003d_t+o):(a\u003do*$/tt,bt\u003en?wt.l\u003dbt-a:wt.r\u003dbt+a),Et.attr(\"d\",H(wt))):s();else if(rt.isSubplotConstrained)if(a\u003eC||o\u003eC){At\u003d\"xy\";var l\u003dMath.min(wt.l/$,(tt-wt.b)/tt),c\u003dMath.max(wt.r/$,(tt-wt.t)/tt);wt.l\u003dl*$,wt.r\u003dc*$,wt.b\u003d(1-l)*tt,wt.t\u003d(1-c)*tt,Et.attr(\"d\",H(wt))}else s();else!it||o\u003cMath.min(Math.max(.6*a,L),C)?a\u003cL||!nt?s():(wt.t\u003d0,wt.b\u003dtt,At\u003d\"x\",Et.attr(\"d\",function(t,e){return\"M\"+(t.l-.5)+\",\"+(e-C-.5)+\"h-3v\"+(2*C+1)+\"h3ZM\"+(t.r+.5)+\",\"+(e-C-.5)+\"h3v\"+(2*C+1)+\"h-3Z\"}(wt,_t))):!nt||a\u003cMath.min(.6*o,C)?(wt.l\u003d0,wt.r\u003d$,At\u003d\"y\",Et.attr(\"d\",function(t,e){return\"M\"+(e-C-.5)+\",\"+(t.t-.5)+\"v-3h\"+(2*C+1)+\"v3ZM\"+(e-C-.5)+\",\"+(t.b+.5)+\"v3h\"+(2*C+1)+\"v-3Z\"}(wt,bt))):(At\u003d\"xy\",Et.attr(\"d\",H(wt)));wt.w\u003dwt.r-wt.l,wt.h\u003dwt.b-wt.t,At\u0026\u0026(Lt\u003d!0),t._dragged\u003dLt,j(St,Et,wt,kt,Mt,Tt),zt(),t.emit(\"plotly_relayouting\",ft),Mt\u003d!0}function zt(){ft\u003d{},\"xy\"!\u003d\u003dAt\u0026\u0026\"x\"!\u003d\u003dAt||(D(Z,wt.l/$,wt.r/$,ft,et.xaxes),Ut(\"x\",ft)),\"xy\"!\u003d\u003dAt\u0026\u0026\"y\"!\u003d\u003dAt||(D(J,(tt-wt.b)/tt,(tt-wt.t)/tt,ft,et.yaxes),Ut(\"y\",ft))}function Dt(){zt(),V(t),Ht(),q(t)}Ct.prepFn\u003dfunction(e,r,n){var a\u003dCt.dragmode,o\u003dt._fullLayout.dragmode;o!\u003d\u003da\u0026\u0026(Ct.dragmode\u003do),vt(),ht\u003dt._fullLayout._invScaleX,pt\u003dt._fullLayout._invScaleY,at||(mt?e.shiftKey?\"pan\"\u003d\u003d\u003do?o\u003d\"zoom\":v(o)||(o\u003d\"pan\"):e.ctrlKey\u0026\u0026(o\u003d\"pan\"):o\u003d\"pan\"),y(o)?Ct.minDrag\u003d1:Ct.minDrag\u003dvoid 0,v(o)?(Ct.xaxes\u003dZ,Ct.yaxes\u003dJ,k(e,r,n,Ct,o)):(Ct.clickFn\u003dIt,v(a)\u0026\u0026Pt(),at||(\"zoom\"\u003d\u003d\u003do?(Ct.moveFn\u003dOt,Ct.doneFn\u003dDt,Ct.minDrag\u003d1,function(e,r,n){var a\u003dxt.getBoundingClientRect();bt\u003dr-a.left,_t\u003dn-a.top,t._fullLayout._calcInverseTransform(t);var o\u003ds.apply3DTransform(t._fullLayout._invTransform)(bt,_t);bt\u003do[0],_t\u003do[1],wt\u003d{l:bt,r:bt,w:0,t:_t,b:_t,h:0},Tt\u003dt._hmpixcount?t._hmlumcount/t._hmpixcount:i(t._fullLayout.plot_bgcolor).getLuminance(),Mt\u003d!1,At\u003d\"xy\",Lt\u003d!1,St\u003dB(dt,Tt,K,Q,kt\u003d\"M0,0H\"+$+\"V\"+tt+\"H0V0\"),Et\u003dN(dt,K,Q)}(0,r,n)):\"pan\"\u003d\u003d\u003do\u0026\u0026(Ct.moveFn\u003djt,Ct.doneFn\u003dHt))),t._fullLayout._redrag\u003dfunction(){var e\u003dt._dragdata;if(e\u0026\u0026e.element\u003d\u003d\u003dxt){var r\u003dt._fullLayout.dragmode;v(r)||(vt(),Gt([0,0,$,tt]),Ct.moveFn(e.dx,e.dy))}}},m.init(Ct);var Rt\u003d[0,0,$,tt],Ft\u003dnull,Bt\u003dE.REDRAWDELAY,Nt\u003de.mainplot?t._fullLayout._plots[e.mainplot]:e;function jt(e,r){if(e*\u003dht,r*\u003dpt,!t._transitioningWithDuration){if(t._fullLayout._replotting\u003d!0,\"ew\"\u003d\u003d\u003dnt||\"ns\"\u003d\u003d\u003dit){var n\u003dnt?-e:0,i\u003dit?-r:0;if(rt.isSubplotConstrained){if(nt\u0026\u0026it){var a\u003d(e/$-r/tt)/2;n\u003d-(e\u003da*$),i\u003d-(r\u003d-a*tt)}it?n\u003d-i*$/tt:i\u003d-n*tt/$}return nt\u0026\u0026(R(Z,e),Ut(\"x\")),it\u0026\u0026(R(J,r),Ut(\"y\")),Gt([n,i,$,tt]),Vt(),void t.emit(\"plotly_relayouting\",ft)}var o,s,l\u003d\"w\"\u003d\u003d\u003dnt\u003d\u003d(\"n\"\u003d\u003d\u003dit)?1:-1;if(nt\u0026\u0026it\u0026\u0026(et.isSubplotConstrained||rt.isSubplotConstrained)){var c\u003d(e/$+l*r/tt)/2;e\u003dc*$,r\u003dl*c*tt}if(\"w\"\u003d\u003d\u003dnt?e\u003dp(Z,0,e):\"e\"\u003d\u003d\u003dnt?e\u003dp(Z,1,-e):nt||(e\u003d0),\"n\"\u003d\u003d\u003dit?r\u003dp(J,1,r):\"s\"\u003d\u003d\u003dit?r\u003dp(J,0,-r):it||(r\u003d0),o\u003d\"w\"\u003d\u003d\u003dnt?e:0,s\u003d\"n\"\u003d\u003d\u003dit?r:0,et.isSubplotConstrained\u0026\u0026!rt.isSubplotConstrained||rt.isSubplotConstrained\u0026\u0026nt\u0026\u0026it\u0026\u0026l\u003e0){var u;if(rt.isSubplotConstrained||!nt\u0026\u00261\u003d\u003d\u003dit.length){for(u\u003d0;u\u003cZ.length;u++)Z[u].range\u003dZ[u]._r.slice(),S(Z[u],1-r/tt);o\u003d(e\u003dr*$/tt)/2}if(rt.isSubplotConstrained||!it\u0026\u00261\u003d\u003d\u003dnt.length){for(u\u003d0;u\u003cJ.length;u++)J[u].range\u003dJ[u]._r.slice(),S(J[u],1-e/$);s\u003d(r\u003de*tt/$)/2}}rt.isSubplotConstrained\u0026\u0026it||Ut(\"x\"),rt.isSubplotConstrained\u0026\u0026nt||Ut(\"y\");var f\u003d$-e,h\u003dtt-r;!rt.isSubplotConstrained||nt\u0026\u0026it||(nt?(s\u003do?0:e*tt/$,h\u003df*tt/$):(o\u003ds?0:r*$/tt,f\u003dh*$/tt)),Gt([o,s,f,h]),Vt(),t.emit(\"plotly_relayouting\",ft)}function p(t,e,r){for(var n,i,a\u003d1-e,o\u003d0;o\u003ct.length;o++){var s\u003dt[o];if(!s.fixedrange){n\u003ds,i\u003ds._rl[a]+(s._rl[e]-s._rl[a])/F(r/s._length);var l\u003ds.l2r(i);!1!\u003d\u003dl\u0026\u0026void 0!\u003d\u003dl\u0026\u0026(s.range[e]\u003dl)}}return n._length*(n._rl[e]-i)/(n._rl[e]-n._rl[a])}}function Ut(t,e){for(var r\u003drt.isSubplotConstrained?{x:J,y:Z}[t]:rt[t+\"axes\"],n\u003drt.isSubplotConstrained?{x:Z,y:J}[t]:[],i\u003d0;i\u003cr.length;i++){var a\u003dr[i],o\u003da._id,s\u003drt.xLinks[o]||rt.yLinks[o],l\u003dn[0]||U[s]||X[s];l\u0026\u0026(e?(e[a._name+\".range[0]\"]\u003de[l._name+\".range[0]\"],e[a._name+\".range[1]\"]\u003de[l._name+\".range[1]\"]):a.range\u003dl.range.slice())}}function Vt(){var e,r\u003d[];function n(t){for(e\u003d0;e\u003ct.length;e++)t[e].fixedrange||r.push(t[e]._id)}for(ot\u0026\u0026(n(Z),n(et.xaxes),n(rt.xaxes)),st\u0026\u0026(n(J),n(et.yaxes),n(rt.yaxes)),ft\u003d{},e\u003d0;e\u003cr.length;e++){var i\u003dr[e],a\u003dT(t,i);p.drawOne(t,a,{skipTitle:!0}),ft[a._name+\".range[0]\"]\u003da.range[0],ft[a._name+\".range[1]\"]\u003da.range[1]}p.redrawComponents(t,r)}function qt(){if(!t._transitioningWithDuration){var e\u003dt._context.doubleClick,r\u003d[];nt\u0026\u0026(r\u003dr.concat(Z)),it\u0026\u0026(r\u003dr.concat(J)),rt.xaxes\u0026\u0026(r\u003dr.concat(rt.xaxes)),rt.yaxes\u0026\u0026(r\u003dr.concat(rt.yaxes));var n,i,a,s\u003d{};if(\"reset+autosize\"\u003d\u003d\u003de)for(e\u003d\"autosize\",i\u003d0;i\u003cr.length;i++)if((n\u003dr[i])._rangeInitial\u0026\u0026(n.range[0]!\u003d\u003dn._rangeInitial[0]||n.range[1]!\u003d\u003dn._rangeInitial[1])||!n._rangeInitial\u0026\u0026!n.autorange){e\u003d\"reset\";break}if(\"autosize\"\u003d\u003d\u003de)for(i\u003d0;i\u003cr.length;i++)(n\u003dr[i]).fixedrange||(s[n._name+\".autorange\"]\u003d!0);else if(\"reset\"\u003d\u003d\u003de)for((nt||et.isSubplotConstrained)\u0026\u0026(r\u003dr.concat(et.xaxes)),it\u0026\u0026!et.isSubplotConstrained\u0026\u0026(r\u003dr.concat(et.yaxes)),et.isSubplotConstrained\u0026\u0026(nt?it||(r\u003dr.concat(J)):r\u003dr.concat(Z)),i\u003d0;i\u003cr.length;i++)(n\u003dr[i]).fixedrange||(n._rangeInitial?(a\u003dn._rangeInitial,s[n._name+\".range[0]\"]\u003da[0],s[n._name+\".range[1]\"]\u003da[1]):s[n._name+\".autorange\"]\u003d!0);t.emit(\"plotly_doubleclick\",null),o.call(\"_guiRelayout\",t,s)}}function Ht(){Gt([0,0,$,tt]),s.syncOrAsync([w.previousPromises,function(){t._fullLayout._replotting\u003d!1,o.call(\"_guiRelayout\",t,ft)}],t)}function Gt(e){var r,n,i,a,l\u003dt._fullLayout,c\u003dl._plots,u\u003dl._subplots.cartesian;if(ct\u0026\u0026o.subplotsRegistry.splom.drag(t),lt)for(r\u003d0;r\u003cu.length;r++)if(i\u003d(n\u003dc[u[r]]).xaxis,a\u003dn.yaxis,n._scene){var h\u003ds.simpleMap(i.range,i.r2l),p\u003ds.simpleMap(a.range,a.r2l);n._scene.update({range:[h[0],p[0],h[1],p[1]]})}if((ct||lt)\u0026\u0026(b(t),_(t)),ut){var m\u003de[2]/P._length,v\u003de[3]/I._length;for(r\u003d0;r\u003cu.length;r++){i\u003d(n\u003dc[u[r]]).xaxis,a\u003dn.yaxis;var y,x,w,T,k\u003d(ot||rt.isSubplotConstrained)\u0026\u0026!i.fixedrange\u0026\u0026U[i._id],M\u003d(st||rt.isSubplotConstrained)\u0026\u0026!a.fixedrange\u0026\u0026X[a._id];if(k?(y\u003dm,w\u003dg||rt.isSubplotConstrained?e[0]:Xt(i,y)):rt.xaHash[i._id]?(y\u003dm,w\u003de[0]*i._length/P._length):rt.yaHash[i._id]?(y\u003dv,w\u003d\"ns\"\u003d\u003d\u003dit?-e[1]*i._length/I._length:Xt(i,y,{n:\"top\",s:\"bottom\"}[it])):w\u003dWt(i,y\u003dYt(i,m,v)),M?(x\u003dv,T\u003dd||rt.isSubplotConstrained?e[1]:Xt(a,x)):rt.yaHash[a._id]?(x\u003dv,T\u003de[1]*a._length/I._length):rt.xaHash[a._id]?(x\u003dm,T\u003d\"ew\"\u003d\u003d\u003dnt?-e[0]*a._length/P._length:Xt(a,x,{e:\"right\",w:\"left\"}[nt])):T\u003dWt(a,x\u003dYt(a,m,v)),y||x){y||(y\u003d1),x||(x\u003d1);var A\u003di._offset-w/y,S\u003da._offset-T/x;n.clipRect.call(f.setTranslate,w,T).call(f.setScale,y,x),n.plot.call(f.setTranslate,A,S).call(f.setScale,1/y,1/x),y\u003d\u003d\u003dn.xScaleFactor\u0026\u0026x\u003d\u003d\u003dn.yScaleFactor||(f.setPointGroupScale(n.zoomScalePts,y,x),f.setTextPointsScale(n.zoomScaleTxt,y,x)),f.hideOutsideRangePoints(n.clipOnAxisFalseTraces,n),n.xScaleFactor\u003dy,n.yScaleFactor\u003dx}}}}function Yt(t,e,r){return t.fixedrange?0:ot\u0026\u0026et.xaHash[t._id]?e:st\u0026\u0026(et.isSubplotConstrained?et.xaHash:et.yaHash)[t._id]?r:0}function Wt(t,e){return e?(t.range\u003dt._r.slice(),S(t,e),Xt(t,e)):0}function Xt(t,e,r){return t._length*(1-e)*x[r||t.constraintoward||\"middle\"]}return d.length*g.length!\u003d1\u0026\u0026Y(xt,(function(e){if(t._context._scrollZoom.cartesian||t._fullLayout._enablescrollzoom){if(Pt(),t._transitioningWithDuration)return e.preventDefault(),void e.stopPropagation();vt(),clearTimeout(Ft);var r\u003d-e.deltaY;if(isFinite(r)||(r\u003de.wheelDelta/10),isFinite(r)){var n,i\u003dMath.exp(-Math.min(Math.max(r,-20),20)/200),a\u003dNt.draglayer.select(\".nsewdrag\").node().getBoundingClientRect(),o\u003d(e.clientX-a.left)/a.width,l\u003d(a.bottom-e.clientY)/a.height;if(ot){for(g||(o\u003d.5),n\u003d0;n\u003cZ.length;n++)c(Z[n],o,i);Ut(\"x\"),Rt[2]*\u003di,Rt[0]+\u003dRt[2]*o*(1/i-1)}if(st){for(d||(l\u003d.5),n\u003d0;n\u003cJ.length;n++)c(J[n],l,i);Ut(\"y\"),Rt[3]*\u003di,Rt[1]+\u003dRt[3]*(1-l)*(1/i-1)}Gt(Rt),Vt(),t.emit(\"plotly_relayouting\",ft),Ft\u003dsetTimeout((function(){t._fullLayout\u0026\u0026(Rt\u003d[0,0,$,tt],Ht())}),Bt),e.preventDefault()}else s.log(\"Did not find wheel motion attributes: \",e)}function c(t,e,r){if(!t.fixedrange){var n\u003ds.simpleMap(t.range,t.r2l),i\u003dn[0]+(n[1]-n[0])*e;t.range\u003dn.map((function(e){return t.l2r(i+(e-i)*r)}))}}})),xt},makeDragger:I,makeRectDragger:O,makeZoombox:B,makeCorners:N,updateZoombox:j,xyCorners:H,transitionZoombox:U,removeZoombox:V,showDoubleClickNotifier:q,attachWheelEventHandler:Y}},{\"../../components/color\":662,\"../../components/dragelement\":681,\"../../components/dragelement/helpers\":680,\"../../components/drawing\":684,\"../../components/fx\":702,\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/clear_gl_canvases\":783,\"../../lib/setcursor\":820,\"../../lib/svg_text_utils\":824,\"../../plot_api/subroutines\":839,\"../../registry\":927,\"../plots\":913,\"./axes\":849,\"./axis_ids\":853,\"./constants\":856,\"./scale_zoom\":868,\"./select\":869,\"@plotly/d3\":58,\"has-passive-events\":440,tinycolor2:594}],859:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/fx\"),a\u003dt(\"../../components/dragelement\"),o\u003dt(\"../../lib/setcursor\"),s\u003dt(\"./dragbox\").makeDragBox,l\u003dt(\"./constants\").DRAGGERSIZE;r.initInteractions\u003dfunction(t){var e\u003dt._fullLayout;if(t._context.staticPlot)n.select(t).selectAll(\".drag\").remove();else if(e._has(\"cartesian\")||e._has(\"splom\")){Object.keys(e._plots||{}).sort((function(t,r){if((e._plots[t].mainplot\u0026\u0026!0)\u003d\u003d\u003d(e._plots[r].mainplot\u0026\u0026!0)){var n\u003dt.split(\"y\"),i\u003dr.split(\"y\");return n[0]\u003d\u003d\u003di[0]?Number(n[1]||1)-Number(i[1]||1):Number(n[0]||1)-Number(i[0]||1)}return e._plots[t].mainplot?1:-1})).forEach((function(r){var n\u003de._plots[r],o\u003dn.xaxis,c\u003dn.yaxis;if(!n.mainplot){var u\u003ds(t,n,o._offset,c._offset,o._length,c._length,\"ns\",\"ew\");u.onmousemove\u003dfunction(e){t._fullLayout._rehover\u003dfunction(){t._fullLayout._hoversubplot\u003d\u003d\u003dr\u0026\u0026t._fullLayout._plots[r]\u0026\u0026i.hover(t,e,r)},i.hover(t,e,r),t._fullLayout._lasthover\u003du,t._fullLayout._hoversubplot\u003dr},u.onmouseout\u003dfunction(e){t._dragging||(t._fullLayout._hoversubplot\u003dnull,a.unhover(t,e))},t._context.showAxisDragHandles\u0026\u0026(s(t,n,o._offset-l,c._offset-l,l,l,\"n\",\"w\"),s(t,n,o._offset+o._length,c._offset-l,l,l,\"n\",\"e\"),s(t,n,o._offset-l,c._offset+c._length,l,l,\"s\",\"w\"),s(t,n,o._offset+o._length,c._offset+c._length,l,l,\"s\",\"e\"))}if(t._context.showAxisDragHandles){if(r\u003d\u003d\u003do._mainSubplot){var f\u003do._mainLinePosition;\"top\"\u003d\u003d\u003do.side\u0026\u0026(f-\u003dl),s(t,n,o._offset+.1*o._length,f,.8*o._length,l,\"\",\"ew\"),s(t,n,o._offset,f,.1*o._length,l,\"\",\"w\"),s(t,n,o._offset+.9*o._length,f,.1*o._length,l,\"\",\"e\")}if(r\u003d\u003d\u003dc._mainSubplot){var h\u003dc._mainLinePosition;\"right\"!\u003d\u003dc.side\u0026\u0026(h-\u003dl),s(t,n,h,c._offset+.1*c._length,l,.8*c._length,\"ns\",\"\"),s(t,n,h,c._offset+.9*c._length,l,.1*c._length,\"s\",\"\"),s(t,n,h,c._offset,l,.1*c._length,\"n\",\"\")}}}));var o\u003de._hoverlayer.node();o.onmousemove\u003dfunction(r){r.target\u003dt._fullLayout._lasthover,i.hover(t,r,e._hoversubplot)},o.onclick\u003dfunction(e){e.target\u003dt._fullLayout._lasthover,i.click(t,e)},o.onmousedown\u003dfunction(e){t._fullLayout._lasthover.onmousedown(e)},r.updateFx(t)}},r.updateFx\u003dfunction(t){var e\u003dt._fullLayout,r\u003d\"pan\"\u003d\u003d\u003de.dragmode?\"move\":\"crosshair\";o(e._draggers,r)}},{\"../../components/dragelement\":681,\"../../components/fx\":702,\"../../lib/setcursor\":820,\"./constants\":856,\"./dragbox\":858,\"@plotly/d3\":58}],860:[function(t,e,r){\"use strict\";e.exports\u003d{clearOutlineControllers:function(t){var e\u003dt._fullLayout._zoomlayer;e\u0026\u0026e.selectAll(\".outline-controllers\").remove()},clearSelect:function(t){var e\u003dt._fullLayout._zoomlayer;e\u0026\u0026e.selectAll(\".select-outline\").remove(),t._fullLayout._drawing\u003d!1}}},{}],861:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").strTranslate;function i(t,e){switch(t.type){case\"log\":return t.p2d(e);case\"date\":return t.p2r(e,0,t.calendar);default:return t.p2r(e)}}e.exports\u003d{p2r:i,r2p:function(t,e){switch(t.type){case\"log\":return t.d2p(e);case\"date\":return t.r2p(e,0,t.calendar);default:return t.r2p(e)}},axValue:function(t){var e\u003d\"y\"\u003d\u003d\u003dt._id.charAt(0)?1:0;return function(r){return i(t,r[e])}},getTransform:function(t){return n(t.xaxis._offset,t.yaxis._offset)}}},{\"../../lib\":799}],862:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"./axis_ids\");e.exports\u003dfunction(t){return function(e,r){var o\u003de[t];if(Array.isArray(o))for(var s\u003dn.subplotsRegistry.cartesian,l\u003ds.idRegex,c\u003dr._subplots,u\u003dc.xaxis,f\u003dc.yaxis,h\u003dc.cartesian,p\u003dr._has(\"cartesian\")||r._has(\"gl2d\"),d\u003d0;d\u003co.length;d++){var m\u003do[d];if(i.isPlainObject(m)){var g\u003da.cleanId(m.xref,\"x\",!1),v\u003da.cleanId(m.yref,\"y\",!1),y\u003dl.x.test(g),x\u003dl.y.test(v);if(y||x){p||i.pushUnique(r._basePlotModules,s);var b\u003d!1;y\u0026\u0026-1\u003d\u003d\u003du.indexOf(g)\u0026\u0026(u.push(g),b\u003d!0),x\u0026\u0026-1\u003d\u003d\u003df.indexOf(v)\u0026\u0026(f.push(v),b\u003d!0),b\u0026\u0026y\u0026\u0026x\u0026\u0026h.push(g+v)}}}}}},{\"../../lib\":799,\"../../registry\":927,\"./axis_ids\":853}],863:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib\"),o\u003dt(\"../plots\"),s\u003dt(\"../../components/drawing\"),l\u003dt(\"../get_data\").getModuleCalcData,c\u003dt(\"./axis_ids\"),u\u003dt(\"./constants\"),f\u003dt(\"../../constants/xmlns_namespaces\"),h\u003da.ensureSingle;function p(t,e,r){return a.ensureSingle(t,e,r,(function(t){t.datum(r)}))}function d(t,e,r,a,o){for(var c,f,h,p\u003du.traceLayerClasses,d\u003dt._fullLayout,m\u003dd._modules,g\u003d[],v\u003d[],y\u003d0;y\u003cm.length;y++){var x\u003d(c\u003dm[y]).name,b\u003di.modules[x].categories;if(b.svg){var _\u003dc.layerName||x+\"layer\",w\u003dc.plot;h\u003d(f\u003dl(r,w))[0],r\u003df[1],h.length\u0026\u0026g.push({i:p.indexOf(_),className:_,plotMethod:w,cdModule:h}),b.zoomScale\u0026\u0026v.push(\".\"+_)}}g.sort((function(t,e){return t.i-e.i}));var T\u003de.plot.selectAll(\"g.mlayer\").data(g,(function(t){return t.className}));if(T.enter().append(\"g\").attr(\"class\",(function(t){return t.className})).classed(\"mlayer\",!0).classed(\"rangeplot\",e.isRangePlot),T.exit().remove(),T.order(),T.each((function(r){var i\u003dn.select(this),l\u003dr.className;r.plotMethod(t,e,r.cdModule,i,a,o),-1\u003d\u003d\u003du.clipOnAxisFalseQuery.indexOf(\".\"+l)\u0026\u0026s.setClipUrl(i,e.layerClipId,t)})),d._has(\"scattergl\")\u0026\u0026(c\u003di.getModule(\"scattergl\"),h\u003dl(r,c)[0],c.plot(t,e,h)),!t._context.staticPlot\u0026\u0026(e._hasClipOnAxisFalse\u0026\u0026(e.clipOnAxisFalseTraces\u003de.plot.selectAll(u.clipOnAxisFalseQuery.join(\",\")).selectAll(\".trace\")),v.length)){var k\u003de.plot.selectAll(v.join(\",\")).selectAll(\".trace\");e.zoomScalePts\u003dk.selectAll(\"path.point\"),e.zoomScaleTxt\u003dk.selectAll(\".textpoint\")}}function m(t,e){var r\u003de.plotgroup,n\u003de.id,i\u003du.layerValue2layerClass[e.xaxis.layer],a\u003du.layerValue2layerClass[e.yaxis.layer],o\u003dt._fullLayout._hasOnlyLargeSploms;if(e.mainplot){var s\u003de.mainplotinfo,l\u003ds.plotgroup,f\u003dn+\"-x\",d\u003dn+\"-y\";e.gridlayer\u003ds.gridlayer,e.zerolinelayer\u003ds.zerolinelayer,h(s.overlinesBelow,\"path\",f),h(s.overlinesBelow,\"path\",d),h(s.overaxesBelow,\"g\",f),h(s.overaxesBelow,\"g\",d),e.plot\u003dh(s.overplot,\"g\",n),h(s.overlinesAbove,\"path\",f),h(s.overlinesAbove,\"path\",d),h(s.overaxesAbove,\"g\",f),h(s.overaxesAbove,\"g\",d),e.xlines\u003dl.select(\".overlines-\"+i).select(\".\"+f),e.ylines\u003dl.select(\".overlines-\"+a).select(\".\"+d),e.xaxislayer\u003dl.select(\".overaxes-\"+i).select(\".\"+f),e.yaxislayer\u003dl.select(\".overaxes-\"+a).select(\".\"+d)}else if(o)e.xlines\u003dh(r,\"path\",\"xlines-above\"),e.ylines\u003dh(r,\"path\",\"ylines-above\"),e.xaxislayer\u003dh(r,\"g\",\"xaxislayer-above\"),e.yaxislayer\u003dh(r,\"g\",\"yaxislayer-above\");else{var m\u003dh(r,\"g\",\"layer-subplot\");e.shapelayer\u003dh(m,\"g\",\"shapelayer\"),e.imagelayer\u003dh(m,\"g\",\"imagelayer\"),e.gridlayer\u003dh(r,\"g\",\"gridlayer\"),e.zerolinelayer\u003dh(r,\"g\",\"zerolinelayer\"),h(r,\"path\",\"xlines-below\"),h(r,\"path\",\"ylines-below\"),e.overlinesBelow\u003dh(r,\"g\",\"overlines-below\"),h(r,\"g\",\"xaxislayer-below\"),h(r,\"g\",\"yaxislayer-below\"),e.overaxesBelow\u003dh(r,\"g\",\"overaxes-below\"),e.plot\u003dh(r,\"g\",\"plot\"),e.overplot\u003dh(r,\"g\",\"overplot\"),e.xlines\u003dh(r,\"path\",\"xlines-above\"),e.ylines\u003dh(r,\"path\",\"ylines-above\"),e.overlinesAbove\u003dh(r,\"g\",\"overlines-above\"),h(r,\"g\",\"xaxislayer-above\"),h(r,\"g\",\"yaxislayer-above\"),e.overaxesAbove\u003dh(r,\"g\",\"overaxes-above\"),e.xlines\u003dr.select(\".xlines-\"+i),e.ylines\u003dr.select(\".ylines-\"+a),e.xaxislayer\u003dr.select(\".xaxislayer-\"+i),e.yaxislayer\u003dr.select(\".yaxislayer-\"+a)}o||(p(e.gridlayer,\"g\",e.xaxis._id),p(e.gridlayer,\"g\",e.yaxis._id),e.gridlayer.selectAll(\"g\").map((function(t){return t[0]})).sort(c.idSort)),e.xlines.style(\"fill\",\"none\").classed(\"crisp\",!0),e.ylines.style(\"fill\",\"none\").classed(\"crisp\",!0)}function g(t,e){if(t){var r\u003d{};for(var i in t.each((function(t){var i\u003dt[0];n.select(this).remove(),v(i,e),r[i]\u003d!0})),e._plots)for(var a\u003de._plots[i].overlays||[],o\u003d0;o\u003ca.length;o++){var s\u003da[o];r[s.id]\u0026\u0026s.plot.selectAll(\".trace\").remove()}}}function v(t,e){e._draggers.selectAll(\"g.\"+t).remove(),e._defs.select(\"#clip\"+e._uid+t+\"plot\").remove()}r.name\u003d\"cartesian\",r.attr\u003d[\"xaxis\",\"yaxis\"],r.idRoot\u003d[\"x\",\"y\"],r.idRegex\u003du.idRegex,r.attrRegex\u003du.attrRegex,r.attributes\u003dt(\"./attributes\"),r.layoutAttributes\u003dt(\"./layout_attributes\"),r.supplyLayoutDefaults\u003dt(\"./layout_defaults\"),r.transitionAxes\u003dt(\"./transition_axes\"),r.finalizeSubplots\u003dfunction(t,e){var r,n,i,o\u003de._subplots,s\u003do.xaxis,l\u003do.yaxis,f\u003do.cartesian,h\u003df.concat(o.gl2d||[]),p\u003d{},d\u003d{};for(r\u003d0;r\u003ch.length;r++){var m\u003dh[r].split(\"y\");p[m[0]]\u003d1,d[\"y\"+m[1]]\u003d1}for(r\u003d0;r\u003cs.length;r++)p[n\u003ds[r]]||(i\u003d(t[c.id2name(n)]||{}).anchor,u.idRegex.y.test(i)||(i\u003d\"y\"),f.push(n+i),h.push(n+i),d[i]||(d[i]\u003d1,a.pushUnique(l,i)));for(r\u003d0;r\u003cl.length;r++)d[i\u003dl[r]]||(n\u003d(t[c.id2name(i)]||{}).anchor,u.idRegex.x.test(n)||(n\u003d\"x\"),f.push(n+i),h.push(n+i),p[n]||(p[n]\u003d1,a.pushUnique(s,n)));if(!h.length){for(var g in n\u003d\"\",i\u003d\"\",t){if(u.attrRegex.test(g))\"x\"\u003d\u003d\u003dg.charAt(0)?(!n||+g.substr(5)\u003c+n.substr(5))\u0026\u0026(n\u003dg):(!i||+g.substr(5)\u003c+i.substr(5))\u0026\u0026(i\u003dg)}n\u003dn?c.name2id(n):\"x\",i\u003di?c.name2id(i):\"y\",s.push(n),l.push(i),f.push(n+i)}},r.plot\u003dfunction(t,e,r,n){var i,a\u003dt._fullLayout,o\u003da._subplots.cartesian,s\u003dt.calcdata;if(!Array.isArray(e))for(e\u003d[],i\u003d0;i\u003cs.length;i++)e.push(i);for(i\u003d0;i\u003co.length;i++){for(var l,c\u003do[i],u\u003da._plots[c],f\u003d[],h\u003d0;h\u003cs.length;h++){var p\u003ds[h],m\u003dp[0].trace;m.xaxis+m.yaxis\u003d\u003d\u003dc\u0026\u0026((-1!\u003d\u003de.indexOf(m.index)||m.carpet)\u0026\u0026(l\u0026\u0026l[0].trace.xaxis+l[0].trace.yaxis\u003d\u003d\u003dc\u0026\u0026-1!\u003d\u003d[\"tonextx\",\"tonexty\",\"tonext\"].indexOf(m.fill)\u0026\u0026-1\u003d\u003d\u003df.indexOf(l)\u0026\u0026f.push(l),f.push(p)),l\u003dp)}d(t,u,f,r,n)}},r.clean\u003dfunction(t,e,r,n){var i,a,o,s\u003dn._plots||{},l\u003de._plots||{},u\u003dn._subplots||{};if(n._hasOnlyLargeSploms\u0026\u0026!e._hasOnlyLargeSploms)for(o in s)(i\u003ds[o]).plotgroup\u0026\u0026i.plotgroup.remove();var f\u003dn._has\u0026\u0026n._has(\"gl\"),h\u003de._has\u0026\u0026e._has(\"gl\");if(f\u0026\u0026!h)for(o in s)(i\u003ds[o])._scene\u0026\u0026i._scene.destroy();if(u.xaxis\u0026\u0026u.yaxis){var p\u003dc.listIds({_fullLayout:n});for(a\u003d0;a\u003cp.length;a++){var d\u003dp[a];e[c.id2name(d)]||n._infolayer.selectAll(\".g-\"+d+\"title\").remove()}}var m\u003dn._has\u0026\u0026n._has(\"cartesian\"),y\u003de._has\u0026\u0026e._has(\"cartesian\");if(m\u0026\u0026!y)g(n._cartesianlayer.selectAll(\".subplot\"),n),n._defs.selectAll(\".axesclip\").remove(),delete n._axisConstraintGroups,delete n._axisMatchGroups;else if(u.cartesian)for(a\u003d0;a\u003cu.cartesian.length;a++){var x\u003du.cartesian[a];if(!l[x]){var b\u003d\".\"+x+\",.\"+x+\"-x,.\"+x+\"-y\";n._cartesianlayer.selectAll(b).remove(),v(x,n)}}},r.drawFramework\u003dfunction(t){var e\u003dt._fullLayout,r\u003dfunction(t){var e,r,n,i,a,o,s\u003dt._fullLayout,l\u003ds._subplots.cartesian,c\u003dl.length,u\u003d[],f\u003d[];for(e\u003d0;e\u003cc;e++){n\u003dl[e],i\u003ds._plots[n],a\u003di.xaxis,o\u003di.yaxis;var h\u003da._mainAxis,p\u003do._mainAxis,d\u003dh._id+p._id,m\u003ds._plots[d];i.overlays\u003d[],d!\u003d\u003dn\u0026\u0026m?(i.mainplot\u003dd,i.mainplotinfo\u003dm,f.push(n)):(i.mainplot\u003dvoid 0,i.mainplotinfo\u003dvoid 0,u.push(n))}for(e\u003d0;e\u003cf.length;e++)n\u003df[e],(i\u003ds._plots[n]).mainplotinfo.overlays.push(i);var g\u003du.concat(f),v\u003dnew Array(c);for(e\u003d0;e\u003cc;e++){n\u003dg[e],i\u003ds._plots[n],a\u003di.xaxis,o\u003di.yaxis;var y\u003d[n,a.layer,o.layer,a.overlaying||\"\",o.overlaying||\"\"];for(r\u003d0;r\u003ci.overlays.length;r++)y.push(i.overlays[r].id);v[e]\u003dy}return v}(t),i\u003de._cartesianlayer.selectAll(\".subplot\").data(r,String);i.enter().append(\"g\").attr(\"class\",(function(t){return\"subplot \"+t[0]})),i.order(),i.exit().call(g,e),i.each((function(r){var i\u003dr[0],a\u003de._plots[i];a.plotgroup\u003dn.select(this),m(t,a),a.draglayer\u003dh(e._draggers,\"g\",i)}))},r.rangePlot\u003dfunction(t,e,r){m(t,e),d(t,e,r),o.style(t)},r.toSVG\u003dfunction(t){var e\u003dt._fullLayout._glimages,r\u003dn.select(t).selectAll(\".svg-container\");r.filter((function(t,e){return e\u003d\u003d\u003dr.size()-1})).selectAll(\".gl-canvas-context, .gl-canvas-focus\").each((function(){var t\u003dthis.toDataURL(\"image/png\");e.append(\"svg:image\").attr({xmlns:f.svg,\"xlink:href\":t,preserveAspectRatio:\"none\",x:0,y:0,width:this.width,height:this.height})}))},r.updateFx\u003dt(\"./graph_interact\").updateFx},{\"../../components/drawing\":684,\"../../constants/xmlns_namespaces\":776,\"../../lib\":799,\"../../registry\":927,\"../get_data\":887,\"../plots\":913,\"./attributes\":847,\"./axis_ids\":853,\"./constants\":856,\"./graph_interact\":859,\"./layout_attributes\":864,\"./layout_defaults\":865,\"./transition_axes\":874,\"@plotly/d3\":58}],864:[function(t,e,r){\"use strict\";var n\u003dt(\"../font_attributes\"),i\u003dt(\"../../components/color/attributes\"),a\u003dt(\"../../components/drawing/attributes\").dash,o\u003dt(\"../../lib/extend\").extendFlat,s\u003dt(\"../../plot_api/plot_template\").templatedArray,l\u003dt(\"../../plots/cartesian/axis_format_attributes\").descriptionWithDates,c\u003dt(\"../../constants/numerical\").ONEDAY,u\u003dt(\"./constants\"),f\u003du.HOUR_PATTERN,h\u003du.WEEKDAY_PATTERN;e.exports\u003d{visible:{valType:\"boolean\",editType:\"plot\"},color:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},title:{text:{valType:\"string\",editType:\"ticks\"},font:n({editType:\"ticks\"}),standoff:{valType:\"number\",min:0,editType:\"ticks\"},editType:\"ticks\"},type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"log\",\"date\",\"category\",\"multicategory\"],dflt:\"-\",editType:\"calc\",_noTemplating:!0},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},autorange:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],dflt:!0,editType:\"axrange\",impliedEdits:{\"range[0]\":void 0,\"range[1]\":void 0}},rangemode:{valType:\"enumerated\",values:[\"normal\",\"tozero\",\"nonnegative\"],dflt:\"normal\",editType:\"plot\"},range:{valType:\"info_array\",items:[{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0},{valType:\"any\",editType:\"axrange\",impliedEdits:{\"^autorange\":!1},anim:!0}],editType:\"axrange\",impliedEdits:{autorange:!1},anim:!0},fixedrange:{valType:\"boolean\",dflt:!1,editType:\"calc\"},scaleanchor:{valType:\"enumerated\",values:[u.idRegex.x.toString(),u.idRegex.y.toString()],editType:\"plot\"},scaleratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},constrain:{valType:\"enumerated\",values:[\"range\",\"domain\"],editType:\"plot\"},constraintoward:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\",\"top\",\"middle\",\"bottom\"],editType:\"plot\"},matches:{valType:\"enumerated\",values:[u.idRegex.x.toString(),u.idRegex.y.toString()],editType:\"calc\"},rangebreaks:s(\"rangebreak\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},bounds:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},pattern:{valType:\"enumerated\",values:[h,f,\"\"],editType:\"calc\"},values:{valType:\"info_array\",freeLength:!0,editType:\"calc\",items:{valType:\"any\",editType:\"calc\"}},dvalue:{valType:\"number\",editType:\"calc\",min:0,dflt:c},editType:\"calc\"}),tickmode:{valType:\"enumerated\",values:[\"auto\",\"linear\",\"array\"],editType:\"ticks\",impliedEdits:{tick0:void 0,dtick:void 0}},nticks:{valType:\"integer\",min:0,dflt:0,editType:\"ticks\"},tick0:{valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},dtick:{valType:\"any\",editType:\"ticks\",impliedEdits:{tickmode:\"linear\"}},tickvals:{valType:\"data_array\",editType:\"ticks\"},ticktext:{valType:\"data_array\",editType:\"ticks\"},ticks:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"\"],editType:\"ticks\"},tickson:{valType:\"enumerated\",values:[\"labels\",\"boundaries\"],dflt:\"labels\",editType:\"ticks\"},ticklabelmode:{valType:\"enumerated\",values:[\"instant\",\"period\"],dflt:\"instant\",editType:\"ticks\"},ticklabelposition:{valType:\"enumerated\",values:[\"outside\",\"inside\",\"outside top\",\"inside top\",\"outside left\",\"inside left\",\"outside right\",\"inside right\",\"outside bottom\",\"inside bottom\"],dflt:\"outside\",editType:\"calc\"},ticklabeloverflow:{valType:\"enumerated\",values:[\"allow\",\"hide past div\",\"hide past domain\"],editType:\"calc\"},mirror:{valType:\"enumerated\",values:[!0,\"ticks\",!1,\"all\",\"allticks\"],dflt:!1,editType:\"ticks+layoutstyle\"},ticklen:{valType:\"number\",min:0,dflt:5,editType:\"ticks\"},tickwidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks\"},tickcolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},showticklabels:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},automargin:{valType:\"boolean\",dflt:!1,editType:\"ticks\"},showspikes:{valType:\"boolean\",dflt:!1,editType:\"modebar\"},spikecolor:{valType:\"color\",dflt:null,editType:\"none\"},spikethickness:{valType:\"number\",dflt:3,editType:\"none\"},spikedash:o({},a,{dflt:\"dash\",editType:\"none\"}),spikemode:{valType:\"flaglist\",flags:[\"toaxis\",\"across\",\"marker\"],dflt:\"toaxis\",editType:\"none\"},spikesnap:{valType:\"enumerated\",values:[\"data\",\"cursor\",\"hovered data\"],dflt:\"hovered data\",editType:\"none\"},tickfont:n({editType:\"ticks\"}),tickangle:{valType:\"angle\",dflt:\"auto\",editType:\"ticks\"},tickprefix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showtickprefix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},ticksuffix:{valType:\"string\",dflt:\"\",editType:\"ticks\"},showticksuffix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},showexponent:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"ticks\"},exponentformat:{valType:\"enumerated\",values:[\"none\",\"e\",\"E\",\"power\",\"SI\",\"B\"],dflt:\"B\",editType:\"ticks\"},minexponent:{valType:\"number\",dflt:3,min:0,editType:\"ticks\"},separatethousands:{valType:\"boolean\",dflt:!1,editType:\"ticks\"},tickformat:{valType:\"string\",dflt:\"\",editType:\"ticks\",description:l(\"tick label\")},tickformatstops:s(\"tickformatstop\",{enabled:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dtickrange:{valType:\"info_array\",items:[{valType:\"any\",editType:\"ticks\"},{valType:\"any\",editType:\"ticks\"}],editType:\"ticks\"},value:{valType:\"string\",dflt:\"\",editType:\"ticks\"},editType:\"ticks\"}),hoverformat:{valType:\"string\",dflt:\"\",editType:\"none\",description:l(\"hover text\")},showline:{valType:\"boolean\",dflt:!1,editType:\"ticks+layoutstyle\"},linecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"layoutstyle\"},linewidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks+layoutstyle\"},showgrid:{valType:\"boolean\",editType:\"ticks\"},gridcolor:{valType:\"color\",dflt:i.lightLine,editType:\"ticks\"},gridwidth:{valType:\"number\",min:0,dflt:1,editType:\"ticks\"},zeroline:{valType:\"boolean\",editType:\"ticks\"},zerolinecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},zerolinewidth:{valType:\"number\",dflt:1,editType:\"ticks\"},showdividers:{valType:\"boolean\",dflt:!0,editType:\"ticks\"},dividercolor:{valType:\"color\",dflt:i.defaultLine,editType:\"ticks\"},dividerwidth:{valType:\"number\",dflt:1,editType:\"ticks\"},anchor:{valType:\"enumerated\",values:[\"free\",u.idRegex.x.toString(),u.idRegex.y.toString()],editType:\"plot\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"left\",\"right\"],editType:\"plot\"},overlaying:{valType:\"enumerated\",values:[\"free\",u.idRegex.x.toString(),u.idRegex.y.toString()],editType:\"plot\"},layer:{valType:\"enumerated\",values:[\"above traces\",\"below traces\"],dflt:\"above traces\",editType:\"plot\"},domain:{valType:\"info_array\",items:[{valType:\"number\",min:0,max:1,editType:\"plot\"},{valType:\"number\",min:0,max:1,editType:\"plot\"}],dflt:[0,1],editType:\"plot\"},position:{valType:\"number\",min:0,max:1,dflt:0,editType:\"plot\"},categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\",\"total ascending\",\"total descending\",\"min ascending\",\"min descending\",\"max ascending\",\"max descending\",\"sum ascending\",\"sum descending\",\"mean ascending\",\"mean descending\",\"median ascending\",\"median descending\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\",_deprecated:{autotick:{valType:\"boolean\",editType:\"ticks\"},title:{valType:\"string\",editType:\"ticks\"},titlefont:n({editType:\"ticks\"})}}},{\"../../components/color/attributes\":661,\"../../components/drawing/attributes\":683,\"../../constants/numerical\":775,\"../../lib/extend\":789,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/axis_format_attributes\":852,\"../font_attributes\":878,\"./constants\":856}],865:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../components/fx/helpers\").isUnifiedHover,o\u003dt(\"../../components/fx/hovermode_defaults\"),s\u003dt(\"../../plot_api/plot_template\"),l\u003dt(\"../layout_attributes\"),c\u003dt(\"./layout_attributes\"),u\u003dt(\"./type_defaults\"),f\u003dt(\"./axis_defaults\"),h\u003dt(\"./constraints\"),p\u003dt(\"./position_defaults\"),d\u003dt(\"./axis_ids\"),m\u003dd.id2name,g\u003dd.name2id,v\u003dt(\"./constants\").AX_ID_PATTERN,y\u003dt(\"../../registry\"),x\u003dy.traceIs,b\u003dy.getComponentMethod;function _(t,e,r){Array.isArray(t[e])?t[e].push(r):t[e]\u003d[r]}e.exports\u003dfunction(t,e,r){var y,w,T\u003de.autotypenumbers,k\u003d{},M\u003d{},A\u003d{},S\u003d{},E\u003d{},L\u003d{},C\u003d{},P\u003d{},I\u003d{},O\u003d{};for(y\u003d0;y\u003cr.length;y++){var z\u003dr[y];if(x(z,\"cartesian\")||x(z,\"gl2d\")){var D,R;if(z.xaxis)D\u003dm(z.xaxis),_(k,D,z);else if(z.xaxes)for(w\u003d0;w\u003cz.xaxes.length;w++)_(k,m(z.xaxes[w]),z);if(z.yaxis)R\u003dm(z.yaxis),_(k,R,z);else if(z.yaxes)for(w\u003d0;w\u003cz.yaxes.length;w++)_(k,m(z.yaxes[w]),z);if(\"funnel\"\u003d\u003d\u003dz.type?\"h\"\u003d\u003d\u003dz.orientation?(D\u0026\u0026(M[D]\u003d!0),R\u0026\u0026(C[R]\u003d!0)):R\u0026\u0026(A[R]\u003d!0):\"image\"\u003d\u003d\u003dz.type?(R\u0026\u0026(P[R]\u003d!0),D\u0026\u0026(P[D]\u003d!0)):(R\u0026\u0026(E[R]\u003d!0,L[R]\u003d!0),x(z,\"carpet\")\u0026\u0026(\"carpet\"!\u003d\u003dz.type||z._cheater)||D\u0026\u0026(S[D]\u003d!0)),\"carpet\"\u003d\u003d\u003dz.type\u0026\u0026z._cheater\u0026\u0026D\u0026\u0026(M[D]\u003d!0),x(z,\"2dMap\")\u0026\u0026(I[D]\u003d!0,I[R]\u003d!0),x(z,\"oriented\"))O[\"h\"\u003d\u003d\u003dz.orientation?R:D]\u003d!0}}var F\u003de._subplots,B\u003dF.xaxis,N\u003dF.yaxis,j\u003dn.simpleMap(B,m),U\u003dn.simpleMap(N,m),V\u003dj.concat(U),q\u003di.background;B.length\u0026\u0026N.length\u0026\u0026(q\u003dn.coerce(t,e,l,\"plot_bgcolor\"));var H,G,Y,W,X,Z\u003di.combine(q,e.paper_bgcolor);function J(){var t\u003dk[H]||[];X._traceIndices\u003dt.map((function(t){return t._expandedIndex})),X._annIndices\u003d[],X._shapeIndices\u003d[],X._imgIndices\u003d[],X._subplotsWith\u003d[],X._counterAxes\u003d[],X._name\u003dX._attr\u003dH,X._id\u003dG}function K(t,e){return n.coerce(W,X,c,t,e)}function Q(t,e){return n.coerce2(W,X,c,t,e)}function $(t){return\"x\"\u003d\u003d\u003dt?N:B}function tt(e,r){for(var n\u003d\"x\"\u003d\u003d\u003de?j:U,i\u003d[],a\u003d0;a\u003cn.length;a++){var o\u003dn[a];o\u003d\u003d\u003dr||(t[o]||{}).overlaying||i.push(g(o))}return i}var et\u003d{x:$(\"x\"),y:$(\"y\")},rt\u003det.x.concat(et.y),nt\u003d{},it\u003d[];function at(){var t\u003dW.matches;v.test(t)\u0026\u0026-1\u003d\u003d\u003drt.indexOf(t)\u0026\u0026(nt[t]\u003dW.type,it\u003dObject.keys(nt))}var ot\u003do(t,e),st\u003da(ot);for(y\u003d0;y\u003cV.length;y++){H\u003dV[y],G\u003dg(H),Y\u003dH.charAt(0),n.isPlainObject(t[H])||(t[H]\u003d{}),W\u003dt[H],X\u003ds.newContainer(e,H,Y+\"axis\"),J();var lt\u003d\"x\"\u003d\u003d\u003dY\u0026\u0026!S[H]\u0026\u0026M[H]||\"y\"\u003d\u003d\u003dY\u0026\u0026!E[H]\u0026\u0026A[H],ct\u003d\"y\"\u003d\u003d\u003dY\u0026\u0026(!L[H]\u0026\u0026C[H]||P[H]),ut\u003d{letter:Y,font:e.font,outerTicks:I[H],showGrid:!O[H],data:k[H]||[],bgColor:Z,calendar:e.calendar,automargin:!0,visibleDflt:lt,reverseDflt:ct,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Y]||{})[G]};K(\"uirevision\",e.uirevision),u(W,X,K,ut),f(W,X,K,ut,e);var ft\u003dst\u0026\u0026Y\u003d\u003d\u003dot.charAt(0),ht\u003dQ(\"spikecolor\",st?X.color:void 0),pt\u003dQ(\"spikethickness\",st?1.5:void 0),dt\u003dQ(\"spikedash\",st?\"dot\":void 0),mt\u003dQ(\"spikemode\",st?\"across\":void 0),gt\u003dQ(\"spikesnap\");K(\"showspikes\",!!(ft||ht||pt||dt||mt||gt))||(delete X.spikecolor,delete X.spikethickness,delete X.spikedash,delete X.spikemode,delete X.spikesnap),p(W,X,K,{letter:Y,counterAxes:et[Y],overlayableAxes:tt(Y,H),grid:e.grid}),K(\"title.standoff\"),at(),X._input\u003dW}for(y\u003d0;y\u003cit.length;){G\u003dit[y++],Y\u003d(H\u003dm(G)).charAt(0),n.isPlainObject(t[H])||(t[H]\u003d{}),W\u003dt[H],X\u003ds.newContainer(e,H,Y+\"axis\"),J();var vt\u003d{letter:Y,font:e.font,outerTicks:I[H],showGrid:!O[H],data:[],bgColor:Z,calendar:e.calendar,automargin:!0,visibleDflt:!1,reverseDflt:!1,autotypenumbersDflt:T,splomStash:((e._splomAxes||{})[Y]||{})[G]};K(\"uirevision\",e.uirevision),X.type\u003dnt[G]||\"linear\",f(W,X,K,vt,e),p(W,X,K,{letter:Y,counterAxes:et[Y],overlayableAxes:tt(Y,H),grid:e.grid}),K(\"fixedrange\"),at(),X._input\u003dW}var yt\u003db(\"rangeslider\",\"handleDefaults\"),xt\u003db(\"rangeselector\",\"handleDefaults\");for(y\u003d0;y\u003cj.length;y++)H\u003dj[y],W\u003dt[H],X\u003de[H],yt(t,e,H),\"date\"\u003d\u003d\u003dX.type\u0026\u0026xt(W,X,e,U,X.calendar),K(\"fixedrange\");for(y\u003d0;y\u003cU.length;y++){H\u003dU[y],W\u003dt[H],X\u003de[H];var bt\u003de[m(X.anchor)];K(\"fixedrange\",b(\"rangeslider\",\"isVisible\")(bt))}h.handleDefaults(t,e,{axIds:rt.concat(it).sort(d.idSort),axHasImage:P})}},{\"../../components/color\":662,\"../../components/fx/helpers\":698,\"../../components/fx/hovermode_defaults\":701,\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../registry\":927,\"../layout_attributes\":904,\"./axis_defaults\":851,\"./axis_ids\":853,\"./constants\":856,\"./constraints\":857,\"./layout_attributes\":864,\"./position_defaults\":867,\"./type_defaults\":875}],866:[function(t,e,r){\"use strict\";var n\u003dt(\"tinycolor2\").mix,i\u003dt(\"../../components/color/attributes\").lightFraction,a\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r,o){var s\u003d(o\u003do||{}).dfltColor;function l(r,n){return a.coerce2(t,e,o.attributes,r,n)}var c\u003dl(\"linecolor\",s),u\u003dl(\"linewidth\");r(\"showline\",o.showLine||!!c||!!u)||(delete e.linecolor,delete e.linewidth);var f\u003dl(\"gridcolor\",n(s,o.bgColor,o.blend||i).toRgbString()),h\u003dl(\"gridwidth\");if(r(\"showgrid\",o.showGrid||!!f||!!h)||(delete e.gridcolor,delete e.gridwidth),!o.noZeroLine){var p\u003dl(\"zerolinecolor\",s),d\u003dl(\"zerolinewidth\");r(\"zeroline\",o.showGrid||!!p||!!d)||(delete e.zerolinecolor,delete e.zerolinewidth)}}},{\"../../components/color/attributes\":661,\"../../lib\":799,tinycolor2:594}],867:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r,a){var o,s,l,c,u\u003da.counterAxes||[],f\u003da.overlayableAxes||[],h\u003da.letter,p\u003da.grid;p\u0026\u0026(s\u003dp._domains[h][p._axisMap[e._id]],o\u003dp._anchors[e._id],s\u0026\u0026(l\u003dp[h+\"side\"].split(\" \")[0],c\u003dp.domain[h][\"right\"\u003d\u003d\u003dl||\"top\"\u003d\u003d\u003dl?1:0])),s\u003ds||[0,1],o\u003do||(n(t.position)?\"free\":u[0]||\"free\"),l\u003dl||(\"x\"\u003d\u003d\u003dh?\"bottom\":\"left\"),c\u003dc||0,\"free\"\u003d\u003d\u003di.coerce(t,e,{anchor:{valType:\"enumerated\",values:[\"free\"].concat(u),dflt:o}},\"anchor\")\u0026\u0026r(\"position\",c),i.coerce(t,e,{side:{valType:\"enumerated\",values:\"x\"\u003d\u003d\u003dh?[\"bottom\",\"top\"]:[\"left\",\"right\"],dflt:l}},\"side\");var d\u003d!1;if(f.length\u0026\u0026(d\u003di.coerce(t,e,{overlaying:{valType:\"enumerated\",values:[!1].concat(f),dflt:!1}},\"overlaying\")),!d){var m\u003dr(\"domain\",s);m[0]\u003em[1]-1/4096\u0026\u0026(e.domain\u003ds),i.noneOrAll(t.domain,e.domain,s)}return r(\"layer\"),e}},{\"../../lib\":799,\"fast-isnumeric\":245}],868:[function(t,e,r){\"use strict\";var n\u003dt(\"../../constants/alignment\").FROM_BL;e.exports\u003dfunction(t,e,r){void 0\u003d\u003d\u003dr\u0026\u0026(r\u003dn[t.constraintoward||\"center\"]);var i\u003d[t.r2l(t.range[0]),t.r2l(t.range[1])],a\u003di[0]+(i[1]-i[0])*r;t.range\u003dt._input.range\u003d[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)],t.setScale()}},{\"../../constants/alignment\":767}],869:[function(t,e,r){\"use strict\";var n\u003dt(\"polybooljs\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../components/drawing\").dashStyle,o\u003dt(\"../../components/color\"),s\u003dt(\"../../components/fx\"),l\u003dt(\"../../components/fx/helpers\").makeEventData,c\u003dt(\"../../components/dragelement/helpers\"),u\u003dc.freeMode,f\u003dc.rectMode,h\u003dc.drawMode,p\u003dc.openMode,d\u003dc.selectMode,m\u003dt(\"../../components/shapes/draw_newshape/display_outlines\"),g\u003dt(\"../../components/shapes/draw_newshape/helpers\").handleEllipse,v\u003dt(\"../../components/shapes/draw_newshape/newshapes\"),y\u003dt(\"../../lib\"),x\u003dt(\"../../lib/polygon\"),b\u003dt(\"../../lib/throttle\"),_\u003dt(\"./axis_ids\").getFromId,w\u003dt(\"../../lib/clear_gl_canvases\"),T\u003dt(\"../../plot_api/subroutines\").redrawReglTraces,k\u003dt(\"./constants\"),M\u003dk.MINSELECT,A\u003dx.filter,S\u003dx.tester,E\u003dt(\"./handle_outline\").clearSelect,L\u003dt(\"./helpers\"),C\u003dL.p2r,P\u003dL.axValue,I\u003dL.getTransform;function O(t,e,r,n,i,a,o){var s,l,c,u,f,h,d,g,v,y\u003de._hoverdata,x\u003de._fullLayout.clickmode.indexOf(\"event\")\u003e-1,b\u003d[];if(function(t){return t\u0026\u0026Array.isArray(t)\u0026\u0026!0!\u003d\u003dt[0].hoverOnBox}(y)){F(t,e,a);var _\u003dfunction(t,e){var r,n,i\u003dt[0],a\u003d-1,o\u003d[];for(n\u003d0;n\u003ce.length;n++)if(r\u003de[n],i.fullData._expandedIndex\u003d\u003d\u003dr.cd[0].trace._expandedIndex){if(!0\u003d\u003d\u003di.hoverOnBox)break;void 0!\u003d\u003di.pointNumber?a\u003di.pointNumber:void 0!\u003d\u003di.binNumber\u0026\u0026(a\u003di.binNumber,o\u003di.pointNumbers);break}return{pointNumber:a,pointNumbers:o,searchInfo:r}}(y,s\u003dN(e,r,n,i));if(_.pointNumbers.length\u003e0?function(t,e){var r,n,i,a\u003d[];for(i\u003d0;i\u003ct.length;i++)(r\u003dt[i]).cd[0].trace.selectedpoints\u0026\u0026r.cd[0].trace.selectedpoints.length\u003e0\u0026\u0026a.push(r);if(1\u003d\u003d\u003da.length\u0026\u0026a[0]\u003d\u003d\u003de.searchInfo\u0026\u0026(n\u003de.searchInfo.cd[0].trace).selectedpoints.length\u003d\u003d\u003de.pointNumbers.length){for(i\u003d0;i\u003ce.pointNumbers.length;i++)if(n.selectedpoints.indexOf(e.pointNumbers[i])\u003c0)return!1;return!0}return!1}(s,_):function(t){var e,r,n,i\u003d0;for(n\u003d0;n\u003ct.length;n++)if(e\u003dt[n],(r\u003de.cd[0].trace).selectedpoints){if(r.selectedpoints.length\u003e1)return!1;if((i+\u003dr.selectedpoints.length)\u003e1)return!1}return 1\u003d\u003d\u003di}(s)\u0026\u0026(h\u003dj(_))){for(o\u0026\u0026o.remove(),v\u003d0;v\u003cs.length;v++)(l\u003ds[v])._module.selectPoints(l,!1);U(e,s),B(a),x\u0026\u0026e.emit(\"plotly_deselect\",null)}else{for(d\u003dt.shiftKey\u0026\u0026(void 0!\u003d\u003dh?h:j(_)),c\u003dfunction(t,e,r){return{pointNumber:t,searchInfo:e,subtract:r}}(_.pointNumber,_.searchInfo,d),u\u003dR(a.selectionDefs.concat([c])),v\u003d0;v\u003cs.length;v++)if(f\u003dV(s[v]._module.selectPoints(s[v],u),s[v]),b.length)for(var w\u003d0;w\u003cf.length;w++)b.push(f[w]);else b\u003df;if(U(e,s,g\u003d{points:b}),c\u0026\u0026a\u0026\u0026a.selectionDefs.push(c),o){var T\u003da.mergedPolygons,k\u003dp(a.dragmode);m(q(T,k),o,a)}x\u0026\u0026e.emit(\"plotly_selected\",g)}}}function z(t){return\"pointNumber\"in t\u0026\u0026\"searchInfo\"in t}function D(t){return{xmin:0,xmax:0,ymin:0,ymax:0,pts:[],contains:function(e,r,n,i){var a\u003dt.searchInfo.cd[0].trace._expandedIndex;return i.cd[0].trace._expandedIndex\u003d\u003d\u003da\u0026\u0026n\u003d\u003d\u003dt.pointNumber},isRect:!1,degenerate:!1,subtract:t.subtract}}function R(t){for(var e\u003d[],r\u003dz(t[0])?0:t[0][0][0],n\u003dr,i\u003dz(t[0])?0:t[0][0][1],a\u003di,o\u003d0;o\u003ct.length;o++)if(z(t[o]))e.push(D(t[o]));else{var s\u003dx.tester(t[o]);s.subtract\u003dt[o].subtract,e.push(s),r\u003dMath.min(r,s.xmin),n\u003dMath.max(n,s.xmax),i\u003dMath.min(i,s.ymin),a\u003dMath.max(a,s.ymax)}return{xmin:r,xmax:n,ymin:i,ymax:a,pts:[],contains:function(t,r,n,i){for(var a\u003d!1,o\u003d0;o\u003ce.length;o++)e[o].contains(t,r,n,i)\u0026\u0026(a\u003d!1\u003d\u003d\u003de[o].subtract);return a},isRect:!1,degenerate:!1}}function F(t,e,r){e._fullLayout._drawing\u003d!1;var n\u003de._fullLayout,i\u003dr.plotinfo,a\u003dr.dragmode,o\u003dn._lastSelectedSubplot\u0026\u0026n._lastSelectedSubplot\u003d\u003d\u003di.id,s\u003d(t.shiftKey||t.altKey)\u0026\u0026!(h(a)\u0026\u0026p(a));o\u0026\u0026s\u0026\u0026i.selection\u0026\u0026i.selection.selectionDefs\u0026\u0026!r.selectionDefs?(r.selectionDefs\u003di.selection.selectionDefs,r.mergedPolygons\u003di.selection.mergedPolygons):s\u0026\u0026i.selection||B(r),o||(E(e),n._lastSelectedSubplot\u003di.id)}function B(t){var e\u003dt.dragmode,r\u003dt.plotinfo,n\u003dt.gd;if(n._fullLayout._activeShapeIndex\u003e\u003d0\u0026\u0026n._fullLayout._deactivateShape(n),h(e)){var a\u003dn._fullLayout._zoomlayer.selectAll(\".select-outline-\"+r.id);if(a\u0026\u0026n._fullLayout._drawing){var o\u003dv(a,t);o\u0026\u0026i.call(\"_guiRelayout\",n,{shapes:o}),n._fullLayout._drawing\u003d!1}}r.selection\u003d{},r.selection.selectionDefs\u003dt.selectionDefs\u003d[],r.selection.mergedPolygons\u003dt.mergedPolygons\u003d[]}function N(t,e,r,n){var i,a,o,s\u003d[],l\u003de.map((function(t){return t._id})),c\u003dr.map((function(t){return t._id}));for(o\u003d0;o\u003ct.calcdata.length;o++)if(!0\u003d\u003d\u003d(a\u003d(i\u003dt.calcdata[o])[0].trace).visible\u0026\u0026a._module\u0026\u0026a._module.selectPoints)if(!n||a.subplot!\u003d\u003dn\u0026\u0026a.geo!\u003d\u003dn)if(\"splom\"\u003d\u003d\u003da.type\u0026\u0026a._xaxes[l[0]]\u0026\u0026a._yaxes[c[0]]){var u\u003dh(a._module,i,e[0],r[0]);u.scene\u003dt._fullLayout._splomScenes[a.uid],s.push(u)}else if(\"sankey\"\u003d\u003d\u003da.type){var f\u003dh(a._module,i,e[0],r[0]);s.push(f)}else{if(-1\u003d\u003d\u003dl.indexOf(a.xaxis))continue;if(-1\u003d\u003d\u003dc.indexOf(a.yaxis))continue;s.push(h(a._module,i,_(t,a.xaxis),_(t,a.yaxis)))}else s.push(h(a._module,i,e[0],r[0]));return s;function h(t,e,r,n){return{_module:t,cd:e,xaxis:r,yaxis:n}}}function j(t){var e\u003dt.searchInfo.cd[0].trace,r\u003dt.pointNumber,n\u003dt.pointNumbers,i\u003dn.length\u003e0?n[0]:r;return!!e.selectedpoints\u0026\u0026e.selectedpoints.indexOf(i)\u003e-1}function U(t,e,r){var n,a,o,s;for(n\u003d0;n\u003ce.length;n++){var l\u003de[n].cd[0].trace._fullInput,c\u003dt._fullLayout._tracePreGUI[l.uid]||{};void 0\u003d\u003d\u003dc.selectedpoints\u0026\u0026(c.selectedpoints\u003dl._input.selectedpoints||null)}if(r){var u\u003dr.points||[];for(n\u003d0;n\u003ce.length;n++)(s\u003de[n].cd[0].trace)._input.selectedpoints\u003ds._fullInput.selectedpoints\u003d[],s._fullInput!\u003d\u003ds\u0026\u0026(s.selectedpoints\u003d[]);for(n\u003d0;n\u003cu.length;n++){var f\u003du[n],h\u003df.data,p\u003df.fullData;f.pointIndices?([].push.apply(h.selectedpoints,f.pointIndices),s._fullInput!\u003d\u003ds\u0026\u0026[].push.apply(p.selectedpoints,f.pointIndices)):(h.selectedpoints.push(f.pointIndex),s._fullInput!\u003d\u003ds\u0026\u0026p.selectedpoints.push(f.pointIndex))}}else for(n\u003d0;n\u003ce.length;n++)delete(s\u003de[n].cd[0].trace).selectedpoints,delete s._input.selectedpoints,s._fullInput!\u003d\u003ds\u0026\u0026delete s._fullInput.selectedpoints;var d\u003d!1;for(n\u003d0;n\u003ce.length;n++){s\u003d(o\u003d(a\u003de[n]).cd)[0].trace,i.traceIs(s,\"regl\")\u0026\u0026(d\u003d!0);var m\u003da._module,g\u003dm.styleOnSelect||m.style;g\u0026\u0026(g(t,o,o[0].node3),o[0].nodeRangePlot3\u0026\u0026g(t,o,o[0].nodeRangePlot3))}d\u0026\u0026(w(t),T(t))}function V(t,e){if(Array.isArray(t))for(var r\u003de.cd,n\u003de.cd[0].trace,i\u003d0;i\u003ct.length;i++)t[i]\u003dl(t[i],n,r);return t}function q(t,e){for(var r\u003d[],n\u003d0;n\u003ct.length;n++){r[n]\u003d[];for(var i\u003d0;i\u003ct[n].length;i++){r[n][i]\u003d[],r[n][i][0]\u003di?\"L\":\"M\";for(var a\u003d0;a\u003ct[n][i].length;a++)r[n][i].push(t[n][i][a])}e||r[n].push([\"Z\",r[n][0][1],r[n][0][2]])}return r}e.exports\u003d{prepSelect:function(t,e,r,i,l){var c\u003du(l),v\u003df(l),x\u003dp(l),_\u003dh(l),w\u003dd(l),T\u003d\"drawcircle\"\u003d\u003d\u003dl,E\u003d\"drawline\"\u003d\u003d\u003dl||T,L\u003di.gd,z\u003dL._fullLayout,D\u003dz._zoomlayer,j\u003di.element.getBoundingClientRect(),H\u003di.plotinfo,G\u003dI(H),Y\u003de-j.left,W\u003dr-j.top;z._calcInverseTransform(L);var X\u003dy.apply3DTransform(z._invTransform)(Y,W);Y\u003dX[0],W\u003dX[1];var Z,J,K,Q,$,tt,et,rt\u003dz._invScaleX,nt\u003dz._invScaleY,it\u003dY,at\u003dW,ot\u003d\"M\"+Y+\",\"+W,st\u003di.xaxes[0]._length,lt\u003di.yaxes[0]._length,ct\u003di.xaxes.concat(i.yaxes),ut\u003dt.altKey\u0026\u0026!(h(l)\u0026\u0026x);F(t,L,i),c\u0026\u0026(Z\u003dA([[Y,W]],k.BENDPX));var ft\u003dD.selectAll(\"path.select-outline-\"+H.id).data(_?[0]:[1,2]),ht\u003dz.newshape;ft.enter().append(\"path\").attr(\"class\",(function(t){return\"select-outline select-outline-\"+t+\" select-outline-\"+H.id})).style(_?{opacity:ht.opacity/2,fill:x?void 0:ht.fillcolor,stroke:ht.line.color,\"stroke-dasharray\":a(ht.line.dash,ht.line.width),\"stroke-width\":ht.line.width+\"px\"}:{}).attr(\"fill-rule\",ht.fillrule).classed(\"cursor-move\",!!_).attr(\"transform\",G).attr(\"d\",ot+\"Z\");var pt,dt\u003dD.append(\"path\").attr(\"class\",\"zoombox-corners\").style({fill:o.background,stroke:o.defaultLine,\"stroke-width\":1}).attr(\"transform\",G).attr(\"d\",\"M0,0Z\"),mt\u003dz._uid+k.SELECTID,gt\u003d[],vt\u003dN(L,i.xaxes,i.yaxes,i.subplot);function yt(t,e){return t-e}pt\u003dH.fillRangeItems?H.fillRangeItems:v?function(t,e){var r\u003dt.range\u003d{};for($\u003d0;$\u003cct.length;$++){var n\u003dct[$],i\u003dn._id.charAt(0);r[n._id]\u003d[C(n,e[i+\"min\"]),C(n,e[i+\"max\"])].sort(yt)}}:function(t,e,r){var n\u003dt.lassoPoints\u003d{};for($\u003d0;$\u003cct.length;$++){var i\u003dct[$];n[i._id]\u003dr.filtered.map(P(i))}},i.moveFn\u003dfunction(t,e){it\u003dMath.max(0,Math.min(st,rt*t+Y)),at\u003dMath.max(0,Math.min(lt,nt*e+W));var r\u003dMath.abs(it-Y),a\u003dMath.abs(at-W);if(v){var o,s,l;if(w){var u\u003dz.selectdirection;switch(o\u003d\"any\"\u003d\u003d\u003du?a\u003cMath.min(.6*r,M)?\"h\":r\u003cMath.min(.6*a,M)?\"v\":\"d\":u){case\"h\":s\u003dT?lt/2:0,l\u003dlt;break;case\"v\":s\u003dT?st/2:0,l\u003dst}}if(_)switch(z.newshape.drawdirection){case\"vertical\":o\u003d\"h\",s\u003dT?lt/2:0,l\u003dlt;break;case\"horizontal\":o\u003d\"v\",s\u003dT?st/2:0,l\u003dst;break;case\"ortho\":r\u003ca?(o\u003d\"h\",s\u003dW,l\u003dat):(o\u003d\"v\",s\u003dY,l\u003dit);break;default:o\u003d\"d\"}\"h\"\u003d\u003d\u003do?((Q\u003dE?g(T,[it,s],[it,l]):[[Y,s],[Y,l],[it,l],[it,s]]).xmin\u003dE?it:Math.min(Y,it),Q.xmax\u003dE?it:Math.max(Y,it),Q.ymin\u003dMath.min(s,l),Q.ymax\u003dMath.max(s,l),dt.attr(\"d\",\"M\"+Q.xmin+\",\"+(W-M)+\"h-4v\"+2*M+\"h4ZM\"+(Q.xmax-1)+\",\"+(W-M)+\"h4v\"+2*M+\"h-4Z\")):\"v\"\u003d\u003d\u003do?((Q\u003dE?g(T,[s,at],[l,at]):[[s,W],[s,at],[l,at],[l,W]]).xmin\u003dMath.min(s,l),Q.xmax\u003dMath.max(s,l),Q.ymin\u003dE?at:Math.min(W,at),Q.ymax\u003dE?at:Math.max(W,at),dt.attr(\"d\",\"M\"+(Y-M)+\",\"+Q.ymin+\"v-4h\"+2*M+\"v4ZM\"+(Y-M)+\",\"+(Q.ymax-1)+\"v4h\"+2*M+\"v-4Z\")):\"d\"\u003d\u003d\u003do\u0026\u0026((Q\u003dE?g(T,[Y,W],[it,at]):[[Y,W],[Y,at],[it,at],[it,W]]).xmin\u003dMath.min(Y,it),Q.xmax\u003dMath.max(Y,it),Q.ymin\u003dMath.min(W,at),Q.ymax\u003dMath.max(W,at),dt.attr(\"d\",\"M0,0Z\"))}else c\u0026\u0026(Z.addPt([it,at]),Q\u003dZ.filtered);i.selectionDefs\u0026\u0026i.selectionDefs.length?(K\u003dfunction(t,e,r){if(r)return n.difference({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions;return n.union({regions:t,inverted:!1},{regions:[e],inverted:!1}).regions}(i.mergedPolygons,Q,ut),Q.subtract\u003dut,J\u003dR(i.selectionDefs.concat([Q]))):(K\u003d[Q],J\u003dS(Q)),m(q(K,x),ft,i),w\u0026\u0026b.throttle(mt,k.SELECTDELAY,(function(){var t;gt\u003d[];var e,r\u003d[];for($\u003d0;$\u003cvt.length;$++)if(e\u003d(tt\u003dvt[$])._module.selectPoints(tt,J),r.push(e),t\u003dV(e,tt),gt.length)for(var n\u003d0;n\u003ct.length;n++)gt.push(t[n]);else gt\u003dt;U(L,vt,et\u003d{points:gt}),pt(et,Q,Z),i.gd.emit(\"plotly_selecting\",et)}))},i.clickFn\u003dfunction(t,e){if(dt.remove(),L._fullLayout._activeShapeIndex\u003e\u003d0)L._fullLayout._deactivateShape(L);else if(!_){var r\u003dz.clickmode;b.done(mt).then((function(){if(b.clear(mt),2\u003d\u003d\u003dt){for(ft.remove(),$\u003d0;$\u003cvt.length;$++)(tt\u003dvt[$])._module.selectPoints(tt,!1);U(L,vt),B(i),L.emit(\"plotly_deselect\",null)}else r.indexOf(\"select\")\u003e-1\u0026\u0026O(e,L,i.xaxes,i.yaxes,i.subplot,i,ft),\"event\"\u003d\u003d\u003dr\u0026\u0026L.emit(\"plotly_selected\",void 0);s.click(L,e)})).catch(y.error)}},i.doneFn\u003dfunction(){dt.remove(),b.done(mt).then((function(){b.clear(mt),i.gd.emit(\"plotly_selected\",et),Q\u0026\u0026i.selectionDefs\u0026\u0026(Q.subtract\u003dut,i.selectionDefs.push(Q),i.mergedPolygons.length\u003d0,[].push.apply(i.mergedPolygons,K)),i.doneFnCompleted\u0026\u0026i.doneFnCompleted(gt)})).catch(y.error),_\u0026\u0026B(i)}},clearSelect:E,clearSelectionsCache:B,selectOnClick:O}},{\"../../components/color\":662,\"../../components/dragelement/helpers\":680,\"../../components/drawing\":684,\"../../components/fx\":702,\"../../components/fx/helpers\":698,\"../../components/shapes/draw_newshape/display_outlines\":750,\"../../components/shapes/draw_newshape/helpers\":751,\"../../components/shapes/draw_newshape/newshapes\":752,\"../../lib\":799,\"../../lib/clear_gl_canvases\":783,\"../../lib/polygon\":811,\"../../lib/throttle\":825,\"../../plot_api/subroutines\":839,\"../../registry\":927,\"./axis_ids\":853,\"./constants\":856,\"./handle_outline\":860,\"./helpers\":861,polybooljs:500}],870:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"d3-time-format\").utcFormat,a\u003dt(\"fast-isnumeric\"),o\u003dt(\"../../lib\"),s\u003do.cleanNumber,l\u003do.ms2DateTime,c\u003do.dateTime2ms,u\u003do.ensureNumber,f\u003do.isArrayOrTypedArray,h\u003dt(\"../../constants/numerical\"),p\u003dh.FP_SAFE,d\u003dh.BADNUM,m\u003dh.LOG_CLIP,g\u003dh.ONEWEEK,v\u003dh.ONEDAY,y\u003dh.ONEHOUR,x\u003dh.ONEMIN,b\u003dh.ONESEC,_\u003dt(\"./axis_ids\"),w\u003dt(\"./constants\"),T\u003dw.HOUR_PATTERN,k\u003dw.WEEKDAY_PATTERN;function M(t){return Math.pow(10,t)}function A(t){return null!\u003dt}e.exports\u003dfunction(t,e){e\u003de||{};var r\u003dt._id||\"x\",h\u003dr.charAt(0);function S(e,r){if(e\u003e0)return Math.log(e)/Math.LN10;if(e\u003c\u003d0\u0026\u0026r\u0026\u0026t.range\u0026\u00262\u003d\u003d\u003dt.range.length){var n\u003dt.range[0],i\u003dt.range[1];return.5*(n+i-2*m*Math.abs(n-i))}return d}function E(e,r,n,i){if((i||{}).msUTC\u0026\u0026a(e))return+e;var s\u003dc(e,n||t.calendar);if(s\u003d\u003d\u003dd){if(!a(e))return d;e\u003d+e;var l\u003dMath.floor(10*o.mod(e+.05,1)),u\u003dMath.round(e-l/10);s\u003dc(new Date(u))+l/10}return s}function L(e,r,n){return l(e,r,n||t.calendar)}function C(e){return t._categories[Math.round(e)]}function P(e){if(A(e)){if(void 0\u003d\u003d\u003dt._categoriesMap\u0026\u0026(t._categoriesMap\u003d{}),void 0!\u003d\u003dt._categoriesMap[e])return t._categoriesMap[e];t._categories.push(\"number\"\u003d\u003dtypeof e?String(e):e);var r\u003dt._categories.length-1;return t._categoriesMap[e]\u003dr,r}return d}function I(e){if(t._categoriesMap)return t._categoriesMap[e]}function O(t){var e\u003dI(t);return void 0!\u003d\u003de?e:a(t)?+t:void 0}function z(t){return a(t)?+t:I(t)}function D(t,e,r){return n.round(r+e*t,2)}function R(t,e,r){return(t-r)/e}var F\u003dfunction(e){return a(e)?D(e,t._m,t._b):d},B\u003dfunction(e){return R(e,t._m,t._b)};if(t.rangebreaks){var N\u003d\"y\"\u003d\u003d\u003dh;F\u003dfunction(e){if(!a(e))return d;var r\u003dt._rangebreaks.length;if(!r)return D(e,t._m,t._b);var n\u003dN;t.range[0]\u003et.range[1]\u0026\u0026(n\u003d!n);for(var i\u003dn?-1:1,o\u003di*e,s\u003d0,l\u003d0;l\u003cr;l++){var c\u003di*t._rangebreaks[l].min,u\u003di*t._rangebreaks[l].max;if(o\u003cc)break;if(!(o\u003eu)){s\u003do\u003c(c+u)/2?l:l+1;break}s\u003dl+1}var f\u003dt._B[s]||0;return isFinite(f)?D(e,t._m2,f):0},B\u003dfunction(e){var r\u003dt._rangebreaks.length;if(!r)return R(e,t._m,t._b);for(var n\u003d0,i\u003d0;i\u003cr\u0026\u0026!(e\u003ct._rangebreaks[i].pmin);i++)e\u003et._rangebreaks[i].pmax\u0026\u0026(n\u003di+1);return R(e,t._m2,t._B[n])}}t.c2l\u003d\"log\"\u003d\u003d\u003dt.type?S:u,t.l2c\u003d\"log\"\u003d\u003d\u003dt.type?M:u,t.l2p\u003dF,t.p2l\u003dB,t.c2p\u003d\"log\"\u003d\u003d\u003dt.type?function(t,e){return F(S(t,e))}:F,t.p2c\u003d\"log\"\u003d\u003d\u003dt.type?function(t){return M(B(t))}:B,-1!\u003d\u003d[\"linear\",\"-\"].indexOf(t.type)?(t.d2r\u003dt.r2d\u003dt.d2c\u003dt.r2c\u003dt.d2l\u003dt.r2l\u003ds,t.c2d\u003dt.c2r\u003dt.l2d\u003dt.l2r\u003du,t.d2p\u003dt.r2p\u003dfunction(e){return t.l2p(s(e))},t.p2d\u003dt.p2r\u003dB,t.cleanPos\u003du):\"log\"\u003d\u003d\u003dt.type?(t.d2r\u003dt.d2l\u003dfunction(t,e){return S(s(t),e)},t.r2d\u003dt.r2c\u003dfunction(t){return M(s(t))},t.d2c\u003dt.r2l\u003ds,t.c2d\u003dt.l2r\u003du,t.c2r\u003dS,t.l2d\u003dM,t.d2p\u003dfunction(e,r){return t.l2p(t.d2r(e,r))},t.p2d\u003dfunction(t){return M(B(t))},t.r2p\u003dfunction(e){return t.l2p(s(e))},t.p2r\u003dB,t.cleanPos\u003du):\"date\"\u003d\u003d\u003dt.type?(t.d2r\u003dt.r2d\u003do.identity,t.d2c\u003dt.r2c\u003dt.d2l\u003dt.r2l\u003dE,t.c2d\u003dt.c2r\u003dt.l2d\u003dt.l2r\u003dL,t.d2p\u003dt.r2p\u003dfunction(e,r,n){return t.l2p(E(e,0,n))},t.p2d\u003dt.p2r\u003dfunction(t,e,r){return L(B(t),e,r)},t.cleanPos\u003dfunction(e){return o.cleanDate(e,d,t.calendar)}):\"category\"\u003d\u003d\u003dt.type?(t.d2c\u003dt.d2l\u003dP,t.r2d\u003dt.c2d\u003dt.l2d\u003dC,t.d2r\u003dt.d2l_noadd\u003dO,t.r2c\u003dfunction(e){var r\u003dz(e);return void 0!\u003d\u003dr?r:t.fraction2r(.5)},t.l2r\u003dt.c2r\u003du,t.r2l\u003dz,t.d2p\u003dfunction(e){return t.l2p(t.r2c(e))},t.p2d\u003dfunction(t){return C(B(t))},t.r2p\u003dt.d2p,t.p2r\u003dB,t.cleanPos\u003dfunction(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026\"\"!\u003d\u003dt?t:u(t)}):\"multicategory\"\u003d\u003d\u003dt.type\u0026\u0026(t.r2d\u003dt.c2d\u003dt.l2d\u003dC,t.d2r\u003dt.d2l_noadd\u003dO,t.r2c\u003dfunction(e){var r\u003dO(e);return void 0!\u003d\u003dr?r:t.fraction2r(.5)},t.r2c_just_indices\u003dI,t.l2r\u003dt.c2r\u003du,t.r2l\u003dO,t.d2p\u003dfunction(e){return t.l2p(t.r2c(e))},t.p2d\u003dfunction(t){return C(B(t))},t.r2p\u003dt.d2p,t.p2r\u003dB,t.cleanPos\u003dfunction(t){return Array.isArray(t)||\"string\"\u003d\u003dtypeof t\u0026\u0026\"\"!\u003d\u003dt?t:u(t)},t.setupMultiCategory\u003dfunction(n){var i,a,s\u003dt._traceIndices,l\u003dt._matchGroup;if(l\u0026\u00260\u003d\u003d\u003dt._categories.length)for(var c in l)if(c!\u003d\u003dr){var u\u003de[_.id2name(c)];s\u003ds.concat(u._traceIndices)}var p\u003d[[0,{}],[0,{}]],d\u003d[];for(i\u003d0;i\u003cs.length;i++){var m\u003dn[s[i]];if(h in m){var g\u003dm[h],v\u003dm._length||o.minRowLength(g);if(f(g[0])\u0026\u0026f(g[1]))for(a\u003d0;a\u003cv;a++){var y\u003dg[0][a],x\u003dg[1][a];A(y)\u0026\u0026A(x)\u0026\u0026(d.push([y,x]),y in p[0][1]||(p[0][1][y]\u003dp[0][0]++),x in p[1][1]||(p[1][1][x]\u003dp[1][0]++))}}}for(d.sort((function(t,e){var r\u003dp[0][1],n\u003dr[t[0]]-r[e[0]];if(n)return n;var i\u003dp[1][1];return i[t[1]]-i[e[1]]})),i\u003d0;i\u003cd.length;i++)P(d[i])}),t.fraction2r\u003dfunction(e){var r\u003dt.r2l(t.range[0]),n\u003dt.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction\u003dfunction(e){var r\u003dt.r2l(t.range[0]),n\u003dt.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.cleanRange\u003dfunction(e,r){r||(r\u003d{}),e||(e\u003d\"range\");var n,i,s\u003do.nestedProperty(t,e).get();if(i\u003d(i\u003d\"date\"\u003d\u003d\u003dt.type?o.dfltRange(t.calendar):\"y\"\u003d\u003d\u003dh?w.DFLTRANGEY:r.dfltRange||w.DFLTRANGEX).slice(),\"tozero\"!\u003d\u003dt.rangemode\u0026\u0026\"nonnegative\"!\u003d\u003dt.rangemode||(i[0]\u003d0),s\u0026\u00262\u003d\u003d\u003ds.length)for(\"date\"!\u003d\u003dt.type||t.autorange||(s[0]\u003do.cleanDate(s[0],d,t.calendar),s[1]\u003do.cleanDate(s[1],d,t.calendar)),n\u003d0;n\u003c2;n++)if(\"date\"\u003d\u003d\u003dt.type){if(!o.isDateTime(s[n],t.calendar)){t[e]\u003di;break}if(t.r2l(s[0])\u003d\u003d\u003dt.r2l(s[1])){var l\u003do.constrain(t.r2l(s[0]),o.MIN_MS+1e3,o.MAX_MS-1e3);s[0]\u003dt.l2r(l-1e3),s[1]\u003dt.l2r(l+1e3);break}}else{if(!a(s[n])){if(!a(s[1-n])){t[e]\u003di;break}s[n]\u003ds[1-n]*(n?10:.1)}if(s[n]\u003c-p?s[n]\u003d-p:s[n]\u003ep\u0026\u0026(s[n]\u003dp),s[0]\u003d\u003d\u003ds[1]){var c\u003dMath.max(1,Math.abs(1e-6*s[0]));s[0]-\u003dc,s[1]+\u003dc}}else o.nestedProperty(t,e).set(i)},t.setScale\u003dfunction(r){var n\u003de._size;if(t.overlaying){var i\u003d_.getFromId({_fullLayout:e},t.overlaying);t.domain\u003di.domain}var a\u003dr\u0026\u0026t._r?\"_r\":\"range\",o\u003dt.calendar;t.cleanRange(a);var s,l,c\u003dt.r2l(t[a][0],o),u\u003dt.r2l(t[a][1],o),f\u003d\"y\"\u003d\u003d\u003dh;if((f?(t._offset\u003dn.t+(1-t.domain[1])*n.h,t._length\u003dn.h*(t.domain[1]-t.domain[0]),t._m\u003dt._length/(c-u),t._b\u003d-t._m*u):(t._offset\u003dn.l+t.domain[0]*n.w,t._length\u003dn.w*(t.domain[1]-t.domain[0]),t._m\u003dt._length/(u-c),t._b\u003d-t._m*c),t._rangebreaks\u003d[],t._lBreaks\u003d0,t._m2\u003d0,t._B\u003d[],t.rangebreaks)\u0026\u0026(t._rangebreaks\u003dt.locateBreaks(Math.min(c,u),Math.max(c,u)),t._rangebreaks.length)){for(s\u003d0;s\u003ct._rangebreaks.length;s++)l\u003dt._rangebreaks[s],t._lBreaks+\u003dMath.abs(l.max-l.min);var p\u003df;c\u003eu\u0026\u0026(p\u003d!p),p\u0026\u0026t._rangebreaks.reverse();var d\u003dp?-1:1;for(t._m2\u003dd*t._length/(Math.abs(u-c)-t._lBreaks),t._B.push(-t._m2*(f?u:c)),s\u003d0;s\u003ct._rangebreaks.length;s++)l\u003dt._rangebreaks[s],t._B.push(t._B[t._B.length-1]-d*t._m2*(l.max-l.min));for(s\u003d0;s\u003ct._rangebreaks.length;s++)(l\u003dt._rangebreaks[s]).pmin\u003dF(l.min),l.pmax\u003dF(l.max)}if(!isFinite(t._m)||!isFinite(t._b)||t._length\u003c0)throw e._replotting\u003d!1,new Error(\"Something went wrong with axis scaling\")},t.maskBreaks\u003dfunction(e){var r,n,i,a,l,c\u003dt.rangebreaks||[];c._cachedPatterns||(c._cachedPatterns\u003dc.map((function(e){return e.enabled\u0026\u0026e.bounds?o.simpleMap(e.bounds,e.pattern?s:t.d2c):null}))),c._cachedValues||(c._cachedValues\u003dc.map((function(e){return e.enabled\u0026\u0026e.values?o.simpleMap(e.values,t.d2c).sort(o.sorterAsc):null})));for(var u\u003d0;u\u003cc.length;u++){var f\u003dc[u];if(f.enabled)if(f.bounds){var h\u003df.pattern;switch(n\u003d(r\u003dc._cachedPatterns[u])[0],i\u003dr[1],h){case k:a\u003d(l\u003dnew Date(e)).getUTCDay(),n\u003ei\u0026\u0026(i+\u003d7,a\u003cn\u0026\u0026(a+\u003d7));break;case T:a\u003d(l\u003dnew Date(e)).getUTCHours()+(l.getUTCMinutes()/60+l.getUTCSeconds()/3600+l.getUTCMilliseconds()/36e5),n\u003ei\u0026\u0026(i+\u003d24,a\u003cn\u0026\u0026(a+\u003d24));break;case\"\":a\u003de}if(a\u003e\u003dn\u0026\u0026a\u003ci)return d}else for(var p\u003dc._cachedValues[u],m\u003d0;m\u003cp.length;m++)if(i\u003d(n\u003dp[m])+f.dvalue,e\u003e\u003dn\u0026\u0026e\u003ci)return d}return e},t.locateBreaks\u003dfunction(e,r){var n,i,a,l,c\u003d[];if(!t.rangebreaks)return c;var u\u003dt.rangebreaks.slice().sort((function(t,e){return t.pattern\u003d\u003d\u003dk\u0026\u0026e.pattern\u003d\u003d\u003dT?-1:e.pattern\u003d\u003d\u003dk\u0026\u0026t.pattern\u003d\u003d\u003dT?1:0})),f\u003dfunction(t,n){if((t\u003do.constrain(t,e,r))!\u003d\u003d(n\u003do.constrain(n,e,r))){for(var i\u003d!0,a\u003d0;a\u003cc.length;a++){var s\u003dc[a];t\u003cs.max\u0026\u0026n\u003e\u003ds.min\u0026\u0026(t\u003cs.min\u0026\u0026(s.min\u003dt),n\u003es.max\u0026\u0026(s.max\u003dn),i\u003d!1)}i\u0026\u0026c.push({min:t,max:n})}};for(n\u003d0;n\u003cu.length;n++){var h\u003du[n];if(h.enabled)if(h.bounds){var p\u003de,d\u003dr;h.pattern\u0026\u0026(p\u003dMath.floor(p)),a\u003d(i\u003do.simpleMap(h.bounds,h.pattern?s:t.r2l))[0],l\u003di[1];var m,_,w\u003dnew Date(p);switch(h.pattern){case k:_\u003dg,m\u003d(l-a+(l\u003ca?7:0))*v,p+\u003da*v-(w.getUTCDay()*v+w.getUTCHours()*y+w.getUTCMinutes()*x+w.getUTCSeconds()*b+w.getUTCMilliseconds());break;case T:_\u003dv,m\u003d(l-a+(l\u003ca?24:0))*y,p+\u003da*y-(w.getUTCHours()*y+w.getUTCMinutes()*x+w.getUTCSeconds()*b+w.getUTCMilliseconds());break;default:p\u003dMath.min(i[0],i[1]),m\u003d_\u003d(d\u003dMath.max(i[0],i[1]))-p}for(var M\u003dp;M\u003cd;M+\u003d_)f(M,M+m)}else for(var A\u003do.simpleMap(h.values,t.d2c),S\u003d0;S\u003cA.length;S++)f(a\u003dA[S],l\u003da+h.dvalue)}return c.sort((function(t,e){return t.min-e.min})),c},t.makeCalcdata\u003dfunction(e,r,n){var i,a,s,l,c\u003dt.type,u\u003d\"date\"\u003d\u003d\u003dc\u0026\u0026e[r+\"calendar\"];if(r in e){if(i\u003de[r],l\u003de._length||o.minRowLength(i),o.isTypedArray(i)\u0026\u0026(\"linear\"\u003d\u003d\u003dc||\"log\"\u003d\u003d\u003dc)){if(l\u003d\u003d\u003di.length)return i;if(i.subarray)return i.subarray(0,l)}if(\"multicategory\"\u003d\u003d\u003dc)return function(t,e){for(var r\u003dnew Array(e),n\u003d0;n\u003ce;n++){var i\u003d(t[0]||[])[n],a\u003d(t[1]||[])[n];r[n]\u003dI([i,a])}return r}(i,l);for(a\u003dnew Array(l),s\u003d0;s\u003cl;s++)a[s]\u003dt.d2c(i[s],0,u,n)}else{var f\u003dr+\"0\"in e?t.d2c(e[r+\"0\"],0,u):0,h\u003de[\"d\"+r]?Number(e[\"d\"+r]):1;for(i\u003de[{x:\"y\",y:\"x\"}[r]],l\u003de._length||i.length,a\u003dnew Array(l),s\u003d0;s\u003cl;s++)a[s]\u003df+s*h}if(t.rangebreaks)for(s\u003d0;s\u003cl;s++)a[s]\u003dt.maskBreaks(a[s]);return a},t.isValidRange\u003dfunction(e){return Array.isArray(e)\u0026\u00262\u003d\u003d\u003de.length\u0026\u0026a(t.r2l(e[0]))\u0026\u0026a(t.r2l(e[1]))},t.isPtWithinRange\u003dfunction(e,r){var n\u003dt.c2l(e[h],null,r),i\u003dt.r2l(t.range[0]),a\u003dt.r2l(t.range[1]);return i\u003ca?i\u003c\u003dn\u0026\u0026n\u003c\u003da:a\u003c\u003dn\u0026\u0026n\u003c\u003di},t._emptyCategories\u003dfunction(){t._categories\u003d[],t._categoriesMap\u003d{}},t.clearCalc\u003dfunction(){var r\u003dt._matchGroup;if(r){var n\u003dnull,i\u003dnull;for(var a in r){var o\u003de[_.id2name(a)];if(o._categories){n\u003do._categories,i\u003do._categoriesMap;break}}n\u0026\u0026i?(t._categories\u003dn,t._categoriesMap\u003di):t._emptyCategories()}else t._emptyCategories();if(t._initialCategories)for(var s\u003d0;s\u003ct._initialCategories.length;s++)P(t._initialCategories[s])},t.sortByInitialCategories\u003dfunction(){var n\u003d[];if(t._emptyCategories(),t._initialCategories)for(var i\u003d0;i\u003ct._initialCategories.length;i++)P(t._initialCategories[i]);n\u003dn.concat(t._traceIndices);var a\u003dt._matchGroup;for(var o in a)if(r!\u003d\u003do){var s\u003de[_.id2name(o)];s._categories\u003dt._categories,s._categoriesMap\u003dt._categoriesMap,n\u003dn.concat(s._traceIndices)}return n};var j\u003de._d3locale;\"date\"\u003d\u003d\u003dt.type\u0026\u0026(t._dateFormat\u003dj?j.timeFormat:i,t._extraFormat\u003de._extraFormat),t._separators\u003de.separators,t._numFormat\u003dj?j.numberFormat:n.format,delete t._minDtick,delete t._forceTick0}},{\"../../constants/numerical\":775,\"../../lib\":799,\"./axis_ids\":853,\"./constants\":856,\"@plotly/d3\":58,\"d3-time-format\":172,\"fast-isnumeric\":245}],871:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\").contrast,a\u003dt(\"./layout_attributes\"),o\u003dt(\"../array_container_defaults\");function s(t){var e\u003d[\"showexponent\",\"showtickprefix\",\"showticksuffix\"].filter((function(e){return void 0!\u003d\u003dt[e]}));if(e.every((function(r){return t[r]\u003d\u003d\u003dt[e[0]]}))||1\u003d\u003d\u003de.length)return t[e[0]]}function l(t,e){function r(r,i){return n.coerce(t,e,a.tickformatstops,r,i)}r(\"enabled\")\u0026\u0026(r(\"dtickrange\"),r(\"value\"))}e.exports\u003dfunction(t,e,r,c,u,f){f\u0026\u00261!\u003d\u003df.pass||function(t,e,r,n,i){var a\u003ds(t);r(\"tickprefix\")\u0026\u0026r(\"showtickprefix\",a);r(\"ticksuffix\",i.tickSuffixDflt)\u0026\u0026r(\"showticksuffix\",a)}(t,0,r,0,u),f\u0026\u00262!\u003d\u003df.pass||function(t,e,r,c,u){var f\u003ds(t);r(\"tickprefix\")\u0026\u0026r(\"showtickprefix\",f);r(\"ticksuffix\",u.tickSuffixDflt)\u0026\u0026r(\"showticksuffix\",f);if(r(\"showticklabels\")){var h\u003du.font||{},p\u003de.color,d\u003d-1!\u003d\u003d(e.ticklabelposition||\"\").indexOf(\"inside\")?i(u.bgColor):p\u0026\u0026p!\u003d\u003da.color.dflt?p:h.color;if(n.coerceFont(r,\"tickfont\",{family:h.family,size:h.size,color:d}),r(\"tickangle\"),\"category\"!\u003d\u003dc){var m\u003dr(\"tickformat\");o(t,e,{name:\"tickformatstops\",inclusionAttr:\"enabled\",handleItemDefaults:l}),e.tickformatstops.length||delete e.tickformatstops,m||\"date\"\u003d\u003d\u003dc||(r(\"showexponent\",f),r(\"exponentformat\"),r(\"minexponent\"),r(\"separatethousands\"))}}}(t,e,r,c,u)}},{\"../../components/color\":662,\"../../lib\":799,\"../array_container_defaults\":844,\"./layout_attributes\":864}],872:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e,r,a){var o\u003dn.coerce2(t,e,i,\"ticklen\"),s\u003dn.coerce2(t,e,i,\"tickwidth\"),l\u003dn.coerce2(t,e,i,\"tickcolor\",e.color);r(\"ticks\",a.outerTicks||o||s||l?\"outside\":\"\")||(delete e.ticklen,delete e.tickwidth,delete e.tickcolor)}},{\"../../lib\":799,\"./layout_attributes\":864}],873:[function(t,e,r){\"use strict\";var n\u003dt(\"./clean_ticks\"),i\u003dt(\"../../lib\").isArrayOrTypedArray;e.exports\u003dfunction(t,e,r,a){function o(r){var n\u003dt[r];return void 0!\u003d\u003dn?n:(e._template||{})[r]}var s\u003do(\"tick0\"),l\u003do(\"dtick\"),c\u003do(\"tickvals\"),u\u003dr(\"tickmode\",i(c)?\"array\":l?\"linear\":\"auto\");if(\"auto\"\u003d\u003d\u003du)r(\"nticks\");else if(\"linear\"\u003d\u003d\u003du){var f\u003de.dtick\u003dn.dtick(l,a);e.tick0\u003dn.tick0(s,a,e.calendar,f)}else if(\"multicategory\"!\u003d\u003da){void 0\u003d\u003d\u003dr(\"tickvals\")?e.tickmode\u003d\"auto\":r(\"ticktext\")}}},{\"../../lib\":799,\"./clean_ticks\":855}],874:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib\"),o\u003dt(\"../../components/drawing\"),s\u003dt(\"./axes\");e.exports\u003dfunction(t,e,r,l){var c\u003dt._fullLayout;if(0!\u003d\u003de.length){var u,f,h,p;l\u0026\u0026(u\u003dl());var d\u003dn.ease(r.easing);return t._transitionData._interruptCallbacks.push((function(){return window.cancelAnimationFrame(p),p\u003dnull,function(){for(var r\u003d{},n\u003d0;n\u003ce.length;n++){var a\u003de[n],o\u003da.plotinfo.xaxis,s\u003da.plotinfo.yaxis;a.xr0\u0026\u0026(r[o._name+\".range\"]\u003da.xr0.slice()),a.yr0\u0026\u0026(r[s._name+\".range\"]\u003da.yr0.slice())}return i.call(\"relayout\",t,r).then((function(){for(var t\u003d0;t\u003ce.length;t++)m(e[t].plotinfo)}))}()})),f\u003dDate.now(),p\u003dwindow.requestAnimationFrame((function n(){h\u003dDate.now();for(var a\u003dMath.min(1,(h-f)/r.duration),o\u003dd(a),s\u003d0;s\u003ce.length;s++)g(e[s],o);h-f\u003er.duration?(!function(){for(var r\u003d{},n\u003d0;n\u003ce.length;n++){var a\u003de[n],o\u003da.plotinfo.xaxis,s\u003da.plotinfo.yaxis;a.xr1\u0026\u0026(r[o._name+\".range\"]\u003da.xr1.slice()),a.yr1\u0026\u0026(r[s._name+\".range\"]\u003da.yr1.slice())}u\u0026\u0026u(),i.call(\"relayout\",t,r).then((function(){for(var t\u003d0;t\u003ce.length;t++)m(e[t].plotinfo)}))}(),p\u003dwindow.cancelAnimationFrame(n)):p\u003dwindow.requestAnimationFrame(n)})),Promise.resolve()}function m(t){var e\u003dt.xaxis,r\u003dt.yaxis;c._defs.select(\"#\"+t.clipId+\"\u003e rect\").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n\u003dt.plot.selectAll(\".scatterlayer .trace\");n.selectAll(\".point\").call(o.setPointGroupScale,1,1),n.selectAll(\".textpoint\").call(o.setTextPointsScale,1,1),n.call(o.hideOutsideRangePoints,t)}function g(e,r){var n\u003de.plotinfo,i\u003dn.xaxis,l\u003dn.yaxis,c\u003di._length,u\u003dl._length,f\u003d!!e.xr1,h\u003d!!e.yr1,p\u003d[];if(f){var d\u003da.simpleMap(e.xr0,i.r2l),m\u003da.simpleMap(e.xr1,i.r2l),g\u003dd[1]-d[0],v\u003dm[1]-m[0];p[0]\u003d(d[0]*(1-r)+r*m[0]-d[0])/(d[1]-d[0])*c,p[2]\u003dc*(1-r+r*v/g),i.range[0]\u003di.l2r(d[0]*(1-r)+r*m[0]),i.range[1]\u003di.l2r(d[1]*(1-r)+r*m[1])}else p[0]\u003d0,p[2]\u003dc;if(h){var y\u003da.simpleMap(e.yr0,l.r2l),x\u003da.simpleMap(e.yr1,l.r2l),b\u003dy[1]-y[0],_\u003dx[1]-x[0];p[1]\u003d(y[1]*(1-r)+r*x[1]-y[1])/(y[0]-y[1])*u,p[3]\u003du*(1-r+r*_/b),l.range[0]\u003di.l2r(y[0]*(1-r)+r*x[0]),l.range[1]\u003dl.l2r(y[1]*(1-r)+r*x[1])}else p[1]\u003d0,p[3]\u003du;s.drawOne(t,i,{skipTitle:!0}),s.drawOne(t,l,{skipTitle:!0}),s.redrawComponents(t,[i._id,l._id]);var w\u003df?c/p[2]:1,T\u003dh?u/p[3]:1,k\u003df?p[0]:0,M\u003dh?p[1]:0,A\u003df?p[0]/p[2]*c:0,S\u003dh?p[1]/p[3]*u:0,E\u003di._offset-A,L\u003dl._offset-S;n.clipRect.call(o.setTranslate,k,M).call(o.setScale,1/w,1/T),n.plot.call(o.setTranslate,E,L).call(o.setScale,w,T),o.setPointGroupScale(n.zoomScalePts,1/w,1/T),o.setTextPointsScale(n.zoomScaleTxt,1/w,1/T)}s.redrawComponents(t)}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../registry\":927,\"./axes\":849,\"@plotly/d3\":58}],875:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\").traceIs,i\u003dt(\"./axis_autotype\");function a(t){return{v:\"x\",h:\"y\"}[t.orientation||\"v\"]}function o(t,e){var r\u003da(t),i\u003dn(t,\"box-violin\"),o\u003dn(t._fullInput||{},\"candlestick\");return i\u0026\u0026!o\u0026\u0026e\u003d\u003d\u003dr\u0026\u0026void 0\u003d\u003d\u003dt[r]\u0026\u0026void 0\u003d\u003d\u003dt[r+\"0\"]}e.exports\u003dfunction(t,e,r,s){r(\"autotypenumbers\",s.autotypenumbersDflt),\"-\"\u003d\u003d\u003dr(\"type\",(s.splomStash||{}).type)\u0026\u0026(!function(t,e){if(\"-\"!\u003d\u003dt.type)return;var r,s\u003dt._id,l\u003ds.charAt(0);-1!\u003d\u003ds.indexOf(\"scene\")\u0026\u0026(s\u003dl);var c\u003dfunction(t,e,r){for(var n\u003d0;n\u003ct.length;n++){var i\u003dt[n];if(\"splom\"\u003d\u003d\u003di.type\u0026\u0026i._length\u003e0\u0026\u0026(i[\"_\"+r+\"axes\"]||{})[e])return i;if((i[r+\"axis\"]||r)\u003d\u003d\u003de){if(o(i,r))return i;if((i[r]||[]).length||i[r+\"0\"])return i}}}(e,s,l);if(!c)return;if(\"histogram\"\u003d\u003d\u003dc.type\u0026\u0026l\u003d\u003d\u003d{v:\"y\",h:\"x\"}[c.orientation||\"v\"])return void(t.type\u003d\"linear\");var u\u003dl+\"calendar\",f\u003dc[u],h\u003d{noMultiCategory:!n(c,\"cartesian\")||n(c,\"noMultiCategory\")};\"box\"\u003d\u003d\u003dc.type\u0026\u0026c._hasPreCompStats\u0026\u0026l\u003d\u003d\u003d{h:\"x\",v:\"y\"}[c.orientation||\"v\"]\u0026\u0026(h.noMultiCategory\u003d!0);if(h.autotypenumbers\u003dt.autotypenumbers,o(c,l)){var p\u003da(c),d\u003d[];for(r\u003d0;r\u003ce.length;r++){var m\u003de[r];n(m,\"box-violin\")\u0026\u0026(m[l+\"axis\"]||l)\u003d\u003d\u003ds\u0026\u0026(void 0!\u003d\u003dm[p]?d.push(m[p][0]):void 0!\u003d\u003dm.name?d.push(m.name):d.push(\"text\"),m[u]!\u003d\u003df\u0026\u0026(f\u003dvoid 0))}t.type\u003di(d,f,h)}else if(\"splom\"\u003d\u003d\u003dc.type){var g\u003dc.dimensions[c._axesDim[s]];g.visible\u0026\u0026(t.type\u003di(g.values,f,h))}else t.type\u003di(c[l]||[c[l+\"0\"]],f,h)}(e,s.data),\"-\"\u003d\u003d\u003de.type?e.type\u003d\"linear\":t.type\u003de.type)}},{\"../../registry\":927,\"./axis_autotype\":850}],876:[function(t,e,r){\"use strict\";var n\u003dt(\"../registry\"),i\u003dt(\"../lib\");function a(t,e,r){var n,a,o,s\u003d!1;if(\"data\"\u003d\u003d\u003de.type)n\u003dt._fullData[null!\u003d\u003de.traces?e.traces[0]:0];else{if(\"layout\"!\u003d\u003de.type)return!1;n\u003dt._fullLayout}return a\u003di.nestedProperty(n,e.prop).get(),(o\u003dr[e.type]\u003dr[e.type]||{}).hasOwnProperty(e.prop)\u0026\u0026o[e.prop]!\u003d\u003da\u0026\u0026(s\u003d!0),o[e.prop]\u003da,{changed:s,value:a}}function o(t,e){var r\u003d[],n\u003de[0],a\u003d{};if(\"string\"\u003d\u003dtypeof n)a[n]\u003de[1];else{if(!i.isPlainObject(n))return r;a\u003dn}return l(a,(function(t,e,n){r.push({type:\"layout\",prop:t,value:n})}),\"\",0),r}function s(t,e){var r,n,a,o,s\u003d[];if(n\u003de[0],a\u003de[1],r\u003de[2],o\u003d{},\"string\"\u003d\u003dtypeof n)o[n]\u003da;else{if(!i.isPlainObject(n))return s;o\u003dn,void 0\u003d\u003d\u003dr\u0026\u0026(r\u003da)}return void 0\u003d\u003d\u003dr\u0026\u0026(r\u003dnull),l(o,(function(e,n,i){var a,o;if(Array.isArray(i)){o\u003di.slice();var l\u003dMath.min(o.length,t.data.length);r\u0026\u0026(l\u003dMath.min(l,r.length)),a\u003d[];for(var c\u003d0;c\u003cl;c++)a[c]\u003dr?r[c]:c}else o\u003di,a\u003dr?r.slice():null;if(null\u003d\u003d\u003da)Array.isArray(o)\u0026\u0026(o\u003do[0]);else if(Array.isArray(a)){if(!Array.isArray(o)){var u\u003do;o\u003d[];for(var f\u003d0;f\u003ca.length;f++)o[f]\u003du}o.length\u003dMath.min(a.length,o.length)}s.push({type:\"data\",prop:e,traces:a,value:o})}),\"\",0),s}function l(t,e,r,n){Object.keys(t).forEach((function(a){var o\u003dt[a];if(\"_\"!\u003d\u003da[0]){var s\u003dr+(n\u003e0?\".\":\"\")+a;i.isPlainObject(o)?l(o,e,s,n+1):e(s,a,o)}}))}r.manageCommandObserver\u003dfunction(t,e,n,o){var s\u003d{},l\u003d!0;e\u0026\u0026e._commandObserver\u0026\u0026(s\u003de._commandObserver),s.cache||(s.cache\u003d{}),s.lookupTable\u003d{};var c\u003dr.hasSimpleAPICommandBindings(t,n,s.lookupTable);if(e\u0026\u0026e._commandObserver){if(c)return s;if(e._commandObserver.remove)return e._commandObserver.remove(),e._commandObserver\u003dnull,s}if(c){a(t,c,s.cache),s.check\u003dfunction(){if(l){var e\u003da(t,c,s.cache);return e.changed\u0026\u0026o\u0026\u0026void 0!\u003d\u003ds.lookupTable[e.value]\u0026\u0026(s.disable(),Promise.resolve(o({value:e.value,type:c.type,prop:c.prop,traces:c.traces,index:s.lookupTable[e.value]})).then(s.enable,s.enable)),e.changed}};for(var u\u003d[\"plotly_relayout\",\"plotly_redraw\",\"plotly_restyle\",\"plotly_update\",\"plotly_animatingframe\",\"plotly_afterplot\"],f\u003d0;f\u003cu.length;f++)t._internalOn(u[f],s.check);s.remove\u003dfunction(){for(var e\u003d0;e\u003cu.length;e++)t._removeInternalListener(u[e],s.check)}}else i.log(\"Unable to automatically bind plot updates to API command\"),s.lookupTable\u003d{},s.remove\u003dfunction(){};return s.disable\u003dfunction(){l\u003d!1},s.enable\u003dfunction(){l\u003d!0},e\u0026\u0026(e._commandObserver\u003ds),s},r.hasSimpleAPICommandBindings\u003dfunction(t,e,n){var i,a,o\u003de.length;for(i\u003d0;i\u003co;i++){var s,l\u003de[i],c\u003dl.method,u\u003dl.args;if(Array.isArray(u)||(u\u003d[]),!c)return!1;var f\u003dr.computeAPICommandBindings(t,c,u);if(1!\u003d\u003df.length)return!1;if(a){if((s\u003df[0]).type!\u003d\u003da.type)return!1;if(s.prop!\u003d\u003da.prop)return!1;if(Array.isArray(a.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var h\u003d0;h\u003ca.traces.length;h++)if(a.traces[h]!\u003d\u003ds.traces[h])return!1}else if(s.prop!\u003d\u003da.prop)return!1}else a\u003df[0],Array.isArray(a.traces)\u0026\u0026a.traces.sort();var p\u003d(s\u003df[0]).value;if(Array.isArray(p)){if(1!\u003d\u003dp.length)return!1;p\u003dp[0]}n\u0026\u0026(n[p]\u003di)}return a},r.executeAPICommand\u003dfunction(t,e,r){if(\"skip\"\u003d\u003d\u003de)return Promise.resolve();var a\u003dn.apiMethodRegistry[e],o\u003d[t];Array.isArray(r)||(r\u003d[]);for(var s\u003d0;s\u003cr.length;s++)o.push(r[s]);return a.apply(null,o).catch((function(t){return i.warn(\"API call to Plotly.\"+e+\" rejected.\",t),Promise.reject(t)}))},r.computeAPICommandBindings\u003dfunction(t,e,r){var n;switch(Array.isArray(r)||(r\u003d[]),e){case\"restyle\":n\u003ds(t,r);break;case\"relayout\":n\u003do(t,r);break;case\"update\":n\u003ds(t,[r[0],r[2]]).concat(o(t,[r[1]]));break;case\"animate\":n\u003dfunction(t,e){return Array.isArray(e[0])\u0026\u00261\u003d\u003d\u003de[0].length\u0026\u0026-1!\u003d\u003d[\"string\",\"number\"].indexOf(typeof e[0][0])?[{type:\"layout\",prop:\"_currentFrame\",value:e[0][0].toString()}]:[]}(0,r);break;default:n\u003d[]}return n}},{\"../lib\":799,\"../registry\":927}],877:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib/extend\").extendFlat;r.attributes\u003dfunction(t,e){e\u003de||{};var r\u003d{valType:\"info_array\",editType:(t\u003dt||{}).editType,items:[{valType:\"number\",min:0,max:1,editType:t.editType},{valType:\"number\",min:0,max:1,editType:t.editType}],dflt:[0,1]},i\u003d(t.name\u0026\u0026t.name,t.trace,e.description\u0026\u0026e.description,{x:n({},r,{}),y:n({},r,{}),editType:t.editType});return t.noGridCell||(i.row\u003d{valType:\"integer\",min:0,dflt:0,editType:t.editType},i.column\u003d{valType:\"integer\",min:0,dflt:0,editType:t.editType}),i},r.defaults\u003dfunction(t,e,r,n){var i\u003dn\u0026\u0026n.x||[0,1],a\u003dn\u0026\u0026n.y||[0,1],o\u003de.grid;if(o){var s\u003dr(\"domain.column\");void 0!\u003d\u003ds\u0026\u0026(s\u003co.columns?i\u003do._domains.x[s]:delete t.domain.column);var l\u003dr(\"domain.row\");void 0!\u003d\u003dl\u0026\u0026(l\u003co.rows?a\u003do._domains.y[l]:delete t.domain.row)}var c\u003dr(\"domain.x\",i),u\u003dr(\"domain.y\",a);c[0]\u003cc[1]||(t.domain.x\u003di.slice()),u[0]\u003cu[1]||(t.domain.y\u003da.slice())}},{\"../lib/extend\":789}],878:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.editType,r\u003dt.colorEditType;void 0\u003d\u003d\u003dr\u0026\u0026(r\u003de);var n\u003d{family:{valType:\"string\",noBlank:!0,strict:!0,editType:e},size:{valType:\"number\",min:1,editType:e},color:{valType:\"color\",editType:r},editType:e};return t.arrayOk\u0026\u0026(n.family.arrayOk\u003d!0,n.size.arrayOk\u003d!0,n.color.arrayOk\u003d!0),n}},{}],879:[function(t,e,r){\"use strict\";e.exports\u003d{_isLinkedToArray:\"frames_entry\",group:{valType:\"string\"},name:{valType:\"string\"},traces:{valType:\"any\"},baseframe:{valType:\"string\"},data:{valType:\"any\"},layout:{valType:\"any\"}}},{}],880:[function(t,e,r){\"use strict\";r.projNames\u003d{equirectangular:\"equirectangular\",mercator:\"mercator\",orthographic:\"orthographic\",\"natural earth\":\"naturalEarth\",kavrayskiy7:\"kavrayskiy7\",miller:\"miller\",robinson:\"robinson\",eckert4:\"eckert4\",\"azimuthal equal area\":\"azimuthalEqualArea\",\"azimuthal equidistant\":\"azimuthalEquidistant\",\"conic equal area\":\"conicEqualArea\",\"conic conformal\":\"conicConformal\",\"conic equidistant\":\"conicEquidistant\",gnomonic:\"gnomonic\",stereographic:\"stereographic\",mollweide:\"mollweide\",hammer:\"hammer\",\"transverse mercator\":\"transverseMercator\",\"albers usa\":\"albersUsa\",\"winkel tripel\":\"winkel3\",aitoff:\"aitoff\",sinusoidal:\"sinusoidal\"},r.axesNames\u003d[\"lonaxis\",\"lataxis\"],r.lonaxisSpan\u003d{orthographic:180,\"azimuthal equal area\":360,\"azimuthal equidistant\":360,\"conic conformal\":180,gnomonic:160,stereographic:180,\"transverse mercator\":180,\"*\":360},r.lataxisSpan\u003d{\"conic conformal\":150,stereographic:179.5,\"*\":180},r.scopeDefaults\u003d{world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:\"equirectangular\",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:\"albers usa\"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:\"conic conformal\",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:\"mercator\",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:\"mercator\",projRotate:[0,0,0]},\"north america\":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:\"conic conformal\",projRotate:[-100,0,0],projParallels:[29.5,45.5]},\"south america\":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:\"mercator\",projRotate:[0,0,0]}},r.clipPad\u003d.001,r.precision\u003d.1,r.landColor\u003d\"#F0DC82\",r.waterColor\u003d\"#3399FF\",r.locationmodeToLayer\u003d{\"ISO-3\":\"countries\",\"USA-states\":\"subunits\",\"country names\":\"countries\"},r.sphereSVG\u003d{type:\"Sphere\"},r.fillLayers\u003d{ocean:1,land:1,lakes:1},r.lineLayers\u003d{subunits:1,countries:1,coastlines:1,rivers:1,frame:1},r.layers\u003d[\"bg\",\"ocean\",\"land\",\"lakes\",\"subunits\",\"countries\",\"coastlines\",\"rivers\",\"lataxis\",\"lonaxis\",\"frame\",\"backplot\",\"frontplot\"],r.layersForChoropleth\u003d[\"bg\",\"ocean\",\"land\",\"subunits\",\"countries\",\"coastlines\",\"lataxis\",\"lonaxis\",\"frame\",\"backplot\",\"rivers\",\"lakes\",\"frontplot\"],r.layerNameToAdjective\u003d{ocean:\"ocean\",land:\"land\",lakes:\"lake\",subunits:\"subunit\",countries:\"country\",coastlines:\"coastline\",rivers:\"river\",frame:\"frame\"}},{}],881:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib\"),o\u003da.strTranslate,s\u003dt(\"../../components/color\"),l\u003dt(\"../../components/drawing\"),c\u003dt(\"../../components/fx\"),u\u003dt(\"../plots\"),f\u003dt(\"../cartesian/axes\"),h\u003dt(\"../cartesian/autorange\").getAutoRange,p\u003dt(\"../../components/dragelement\"),d\u003dt(\"../cartesian/select\").prepSelect,m\u003dt(\"../cartesian/select\").clearSelect,g\u003dt(\"../cartesian/select\").selectOnClick,v\u003dt(\"./zoom\"),y\u003dt(\"./constants\"),x\u003dt(\"../../lib/geo_location_utils\"),b\u003dt(\"../../lib/topojson_utils\"),_\u003dt(\"topojson-client\").feature;function w(t){this.id\u003dt.id,this.graphDiv\u003dt.graphDiv,this.container\u003dt.container,this.topojsonURL\u003dt.topojsonURL,this.isStatic\u003dt.staticPlot,this.topojsonName\u003dnull,this.topojson\u003dnull,this.projection\u003dnull,this.scope\u003dnull,this.viewInitial\u003dnull,this.fitScale\u003dnull,this.bounds\u003dnull,this.midPt\u003dnull,this.hasChoropleth\u003d!1,this.traceHash\u003d{},this.layers\u003d{},this.basePaths\u003d{},this.dataPaths\u003d{},this.dataPoints\u003d{},this.clipDef\u003dnull,this.clipRect\u003dnull,this.bgRect\u003dnull,this.makeFramework()}t(\"./projections\")(n);var T\u003dw.prototype;function k(t,e){var r\u003dy.clipPad,n\u003dt[0]+r,i\u003dt[1]-r,a\u003de[0]+r,o\u003de[1]-r;n\u003e0\u0026\u0026i\u003c0\u0026\u0026(i+\u003d360);var s\u003d(i-n)/4;return{type:\"Polygon\",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}e.exports\u003dfunction(t){return new w(t)},T.plot\u003dfunction(t,e,r){var n\u003dthis,i\u003de[this.id],a\u003d[],o\u003d!1;for(var s in y.layerNameToAdjective)if(\"frame\"!\u003d\u003ds\u0026\u0026i[\"show\"+s]){o\u003d!0;break}for(var l\u003d0;l\u003ct.length;l++)if(t[0][0].trace.locationmode){o\u003d!0;break}if(o){var c\u003db.getTopojsonName(i);null!\u003d\u003dn.topojson\u0026\u0026c\u003d\u003d\u003dn.topojsonName||(n.topojsonName\u003dc,void 0\u003d\u003d\u003dPlotlyGeoAssets.topojson[n.topojsonName]\u0026\u0026a.push(n.fetchTopojson()))}a\u003da.concat(x.fetchTraceGeoData(t)),r.push(new Promise((function(r,i){Promise.all(a).then((function(){n.topojson\u003dPlotlyGeoAssets.topojson[n.topojsonName],n.update(t,e),r()})).catch(i)})))},T.fetchTopojson\u003dfunction(){var t\u003dthis,e\u003db.getTopojsonPath(t.topojsonURL,t.topojsonName);return new Promise((function(r,i){n.json(e,(function(n,a){if(n)return 404\u003d\u003d\u003dn.status?i(new Error([\"plotly.js could not find topojson file at\",e,\".\",\"Make sure the *topojsonURL* plot config option\",\"is set properly.\"].join(\" \"))):i(new Error([\"unexpected error while fetching topojson file at\",e].join(\" \")));PlotlyGeoAssets.topojson[t.topojsonName]\u003da,r()}))}))},T.update\u003dfunction(t,e){var r\u003de[this.id];this.hasChoropleth\u003d!1;for(var n\u003d0;n\u003ct.length;n++){var i\u003dt[n],a\u003di[0].trace;\"choropleth\"\u003d\u003d\u003da.type\u0026\u0026(this.hasChoropleth\u003d!0),!0\u003d\u003d\u003da.visible\u0026\u0026a._length\u003e0\u0026\u0026a._module.calcGeoJSON(i,e)}if(!this.updateProjection(t,e)){this.viewInitial\u0026\u0026this.scope\u003d\u003d\u003dr.scope||this.saveViewInitial(r),this.scope\u003dr.scope,this.updateBaseLayers(e,r),this.updateDims(e,r),this.updateFx(e,r),u.generalUpdatePerTraceModule(this.graphDiv,this,t,r);var o\u003dthis.layers.frontplot.select(\".scatterlayer\");this.dataPoints.point\u003do.selectAll(\".point\"),this.dataPoints.text\u003do.selectAll(\"text\"),this.dataPaths.line\u003do.selectAll(\".js-line\");var s\u003dthis.layers.backplot.select(\".choroplethlayer\");this.dataPaths.choropleth\u003ds.selectAll(\"path\"),this.render()}},T.updateProjection\u003dfunction(t,e){var r\u003dthis.graphDiv,o\u003de[this.id],s\u003de._size,l\u003do.domain,c\u003do.projection,u\u003do.lonaxis,f\u003do.lataxis,p\u003du._ax,d\u003df._ax,m\u003dthis.projection\u003dfunction(t){for(var e\u003dt.projection.type,r\u003dn.geo[y.projNames[e]](),i\u003dt._isClipped?y.lonaxisSpan[e]/2:null,a\u003d[\"center\",\"rotate\",\"parallels\",\"clipExtent\"],o\u003dfunction(t){return t?r:[]},s\u003d0;s\u003ca.length;s++){var l\u003da[s];\"function\"!\u003dtypeof r[l]\u0026\u0026(r[l]\u003do)}r.isLonLatOverEdges\u003dfunction(t){if(null\u003d\u003d\u003dr(t))return!0;if(i){var e\u003dr.rotate();return n.geo.distance(t,[-e[0],-e[1]])\u003ei*Math.PI/180}return!1},r.getPath\u003dfunction(){return n.geo.path().projection(r)},r.getBounds\u003dfunction(t){return r.getPath().bounds(t)},r.fitExtent\u003dfunction(t,e){var n\u003dt[1][0]-t[0][0],i\u003dt[1][1]-t[0][1],a\u003dr.clipExtent\u0026\u0026r.clipExtent();r.scale(150).translate([0,0]),a\u0026\u0026r.clipExtent(null);var o\u003dr.getBounds(e),s\u003dMath.min(n/(o[1][0]-o[0][0]),i/(o[1][1]-o[0][1])),l\u003d+t[0][0]+(n-s*(o[1][0]+o[0][0]))/2,c\u003d+t[0][1]+(i-s*(o[1][1]+o[0][1]))/2;return a\u0026\u0026r.clipExtent(a),r.scale(150*s).translate([l,c])},r.precision(y.precision),i\u0026\u0026r.clipAngle(i-y.clipPad);return r}(o),g\u003d[[s.l+s.w*l.x[0],s.t+s.h*(1-l.y[1])],[s.l+s.w*l.x[1],s.t+s.h*(1-l.y[0])]],v\u003do.center||{},x\u003dc.rotation||{},b\u003du.range||[],_\u003df.range||[];if(o.fitbounds){p._length\u003dg[1][0]-g[0][0],d._length\u003dg[1][1]-g[0][1],p.range\u003dh(r,p),d.range\u003dh(r,d);var w\u003d(p.range[0]+p.range[1])/2,T\u003d(d.range[0]+d.range[1])/2;if(o._isScoped)v\u003d{lon:w,lat:T};else if(o._isClipped){v\u003d{lon:w,lat:T},x\u003d{lon:w,lat:T,roll:x.roll};var M\u003dc.type,A\u003dy.lonaxisSpan[M]/2||180,S\u003dy.lataxisSpan[M]/2||90;b\u003d[w-A,w+A],_\u003d[T-S,T+S]}else v\u003d{lon:w,lat:T},x\u003d{lon:w,lat:x.lat,roll:x.roll}}m.center([v.lon-x.lon,v.lat-x.lat]).rotate([-x.lon,-x.lat,x.roll]).parallels(c.parallels);var E\u003dk(b,_);m.fitExtent(g,E);var L\u003dthis.bounds\u003dm.getBounds(E),C\u003dthis.fitScale\u003dm.scale(),P\u003dm.translate();if(!isFinite(L[0][0])||!isFinite(L[0][1])||!isFinite(L[1][0])||!isFinite(L[1][1])||isNaN(P[0])||isNaN(P[0])){for(var I\u003d[\"fitbounds\",\"projection.rotation\",\"center\",\"lonaxis.range\",\"lataxis.range\"],O\u003d\"Invalid geo settings, relayout\u0027ing to default view.\",z\u003d{},D\u003d0;D\u003cI.length;D++)z[this.id+\".\"+I[D]]\u003dnull;return this.viewInitial\u003dnull,a.warn(O),r._promises.push(i.call(\"relayout\",r,z)),O}if(o.fitbounds){var R\u003dm.getBounds(k(p.range,d.range)),F\u003dMath.min((L[1][0]-L[0][0])/(R[1][0]-R[0][0]),(L[1][1]-L[0][1])/(R[1][1]-R[0][1]));isFinite(F)?m.scale(F*C):a.warn(\"Something went wrong during\"+this.id+\"fitbounds computations.\")}else m.scale(c.scale*C);var B\u003dthis.midPt\u003d[(L[0][0]+L[1][0])/2,(L[0][1]+L[1][1])/2];if(m.translate([P[0]+(B[0]-P[0]),P[1]+(B[1]-P[1])]).clipExtent(L),o._isAlbersUsa){var N\u003dm([v.lon,v.lat]),j\u003dm.translate();m.translate([j[0]-(N[0]-j[0]),j[1]-(N[1]-j[1])])}},T.updateBaseLayers\u003dfunction(t,e){var r\u003dthis,i\u003dr.topojson,a\u003dr.layers,o\u003dr.basePaths;function c(t){return\"lonaxis\"\u003d\u003d\u003dt||\"lataxis\"\u003d\u003d\u003dt}function u(t){return Boolean(y.lineLayers[t])}function h(t){return Boolean(y.fillLayers[t])}var p\u003d(this.hasChoropleth?y.layersForChoropleth:y.layers).filter((function(t){return u(t)||h(t)?e[\"show\"+t]:!c(t)||e[t].showgrid})),d\u003dr.framework.selectAll(\".layer\").data(p,String);d.exit().each((function(t){delete a[t],delete o[t],n.select(this).remove()})),d.enter().append(\"g\").attr(\"class\",(function(t){return\"layer \"+t})).each((function(t){var e\u003da[t]\u003dn.select(this);\"bg\"\u003d\u003d\u003dt?r.bgRect\u003de.append(\"rect\").style(\"pointer-events\",\"all\"):c(t)?o[t]\u003de.append(\"path\").style(\"fill\",\"none\"):\"backplot\"\u003d\u003d\u003dt?e.append(\"g\").classed(\"choroplethlayer\",!0):\"frontplot\"\u003d\u003d\u003dt?e.append(\"g\").classed(\"scatterlayer\",!0):u(t)?o[t]\u003de.append(\"path\").style(\"fill\",\"none\").style(\"stroke-miterlimit\",2):h(t)\u0026\u0026(o[t]\u003de.append(\"path\").style(\"stroke\",\"none\"))})),d.order(),d.each((function(r){var n\u003do[r],a\u003dy.layerNameToAdjective[r];\"frame\"\u003d\u003d\u003dr?n.datum(y.sphereSVG):u(r)||h(r)?n.datum(_(i,i.objects[r])):c(r)\u0026\u0026n.datum(function(t,e,r){var n,i,a,o\u003de[t],s\u003dy.scopeDefaults[e.scope];\"lonaxis\"\u003d\u003d\u003dt?(n\u003ds.lonaxisRange,i\u003ds.lataxisRange,a\u003dfunction(t,e){return[t,e]}):\"lataxis\"\u003d\u003d\u003dt\u0026\u0026(n\u003ds.lataxisRange,i\u003ds.lonaxisRange,a\u003dfunction(t,e){return[e,t]});var l\u003d{type:\"linear\",range:[n[0],n[1]-1e-6],tick0:o.tick0,dtick:o.dtick};f.setConvert(l,r);var c\u003df.calcTicks(l);e.isScoped||\"lonaxis\"!\u003d\u003dt||c.pop();for(var u\u003dc.length,h\u003dnew Array(u),p\u003d0;p\u003cu;p++)for(var d\u003dc[p].x,m\u003dh[p]\u003d[],g\u003di[0];g\u003ci[1]+2.5;g+\u003d2.5)m.push(a(d,g));return{type:\"MultiLineString\",coordinates:h}}(r,e,t)).call(s.stroke,e[r].gridcolor).call(l.dashLine,\"\",e[r].gridwidth),u(r)?n.call(s.stroke,e[a+\"color\"]).call(l.dashLine,\"\",e[a+\"width\"]):h(r)\u0026\u0026n.call(s.fill,e[a+\"color\"])}))},T.updateDims\u003dfunction(t,e){var r\u003dthis.bounds,n\u003d(e.framewidth||0)/2,i\u003dr[0][0]-n,a\u003dr[0][1]-n,o\u003dr[1][0]-i+n,c\u003dr[1][1]-a+n;l.setRect(this.clipRect,i,a,o,c),this.bgRect.call(l.setRect,i,a,o,c).call(s.fill,e.bgcolor),this.xaxis._offset\u003di,this.xaxis._length\u003do,this.yaxis._offset\u003da,this.yaxis._length\u003dc},T.updateFx\u003dfunction(t,e){var r\u003dthis,o\u003dr.graphDiv,s\u003dr.bgRect,l\u003dt.dragmode,u\u003dt.clickmode;if(!r.isStatic){var f;\"select\"\u003d\u003d\u003dl?f\u003dfunction(t,e){(t.range\u003d{})[r.id]\u003d[y([e.xmin,e.ymin]),y([e.xmax,e.ymax])]}:\"lasso\"\u003d\u003d\u003dl\u0026\u0026(f\u003dfunction(t,e,n){(t.lassoPoints\u003d{})[r.id]\u003dn.filtered.map(y)});var h\u003d{element:r.bgRect.node(),gd:o,plotinfo:{id:r.id,xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:f},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id,clickFn:function(t){2\u003d\u003d\u003dt\u0026\u0026m(o)}};\"pan\"\u003d\u003d\u003dl?(s.node().onmousedown\u003dnull,s.call(v(r,e)),s.on(\"dblclick.zoom\",(function(){var t\u003dr.viewInitial,e\u003d{};for(var n in t)e[r.id+\".\"+n]\u003dt[n];i.call(\"_guiRelayout\",o,e),o.emit(\"plotly_doubleclick\",null)})),o._context._scrollZoom.geo||s.on(\"wheel.zoom\",null)):\"select\"!\u003d\u003dl\u0026\u0026\"lasso\"!\u003d\u003dl||(s.on(\".zoom\",null),h.prepFn\u003dfunction(t,e,r){d(t,e,r,h,l)},p.init(h)),s.on(\"mousemove\",(function(){var t\u003dr.projection.invert(a.getPositionFromD3Event());if(!t||isNaN(t[0])||isNaN(t[1]))return p.unhover(o,n.event);r.xaxis.p2c\u003dfunction(){return t[0]},r.yaxis.p2c\u003dfunction(){return t[1]},c.hover(o,n.event,r.id)})),s.on(\"mouseout\",(function(){o._dragging||p.unhover(o,n.event)})),s.on(\"click\",(function(){\"select\"!\u003d\u003dl\u0026\u0026\"lasso\"!\u003d\u003dl\u0026\u0026(u.indexOf(\"select\")\u003e-1\u0026\u0026g(n.event,o,[r.xaxis],[r.yaxis],r.id,h),u.indexOf(\"event\")\u003e-1\u0026\u0026c.click(o,n.event))}))}function y(t){return r.projection.invert([t[0]+r.xaxis._offset,t[1]+r.yaxis._offset])}},T.makeFramework\u003dfunction(){var t\u003dthis,e\u003dt.graphDiv,r\u003de._fullLayout,i\u003d\"clip\"+r._uid+t.id;t.clipDef\u003dr._clips.append(\"clipPath\").attr(\"id\",i),t.clipRect\u003dt.clipDef.append(\"rect\"),t.framework\u003dn.select(t.container).append(\"g\").attr(\"class\",\"geo \"+t.id).call(l.setClipUrl,i,e),t.project\u003dfunction(e){var r\u003dt.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis\u003d{_id:\"x\",c2p:function(e){return t.project(e)[0]}},t.yaxis\u003d{_id:\"y\",c2p:function(e){return t.project(e)[1]}},t.mockAxis\u003d{type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},f.setConvert(t.mockAxis,r)},T.saveViewInitial\u003dfunction(t){var e,r\u003dt.center||{},n\u003dt.projection,i\u003dn.rotation||{};this.viewInitial\u003d{fitbounds:t.fitbounds,\"projection.scale\":n.scale},e\u003dt._isScoped?{\"center.lon\":r.lon,\"center.lat\":r.lat}:t._isClipped?{\"projection.rotation.lon\":i.lon,\"projection.rotation.lat\":i.lat}:{\"center.lon\":r.lon,\"center.lat\":r.lat,\"projection.rotation.lon\":i.lon},a.extendFlat(this.viewInitial,e)},T.render\u003dfunction(){var t,e\u003dthis.projection,r\u003de.getPath();function n(t){var r\u003de(t.lonlat);return r?o(r[0],r[1]):null}function i(t){return e.isLonLatOverEdges(t.lonlat)?\"none\":null}for(t in this.basePaths)this.basePaths[t].attr(\"d\",r);for(t in this.dataPaths)this.dataPaths[t].attr(\"d\",(function(t){return r(t.geojson)}));for(t in this.dataPoints)this.dataPoints[t].attr(\"display\",i).attr(\"transform\",n)}},{\"../../components/color\":662,\"../../components/dragelement\":681,\"../../components/drawing\":684,\"../../components/fx\":702,\"../../lib\":799,\"../../lib/geo_location_utils\":792,\"../../lib/topojson_utils\":827,\"../../registry\":927,\"../cartesian/autorange\":848,\"../cartesian/axes\":849,\"../cartesian/select\":869,\"../plots\":913,\"./constants\":880,\"./projections\":885,\"./zoom\":886,\"@plotly/d3\":58,\"topojson-client\":597}],882:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/get_data\").getSubplotCalcData,i\u003dt(\"../../lib\").counterRegex,a\u003dt(\"./geo\"),o\u003d\"geo\",s\u003di(o),l\u003d{};l.geo\u003d{valType:\"subplotid\",dflt:o,editType:\"calc\"},e.exports\u003d{attr:o,name:o,idRoot:o,idRegex:s,attrRegex:s,attributes:l,layoutAttributes:t(\"./layout_attributes\"),supplyLayoutDefaults:t(\"./layout_defaults\"),plot:function(t){for(var e\u003dt._fullLayout,r\u003dt.calcdata,i\u003de._subplots.geo,s\u003d0;s\u003ci.length;s++){var l\u003di[s],c\u003dn(r,o,l),u\u003de[l]._subplot;u||(u\u003da({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot\u003du),u.plot(c,e,t._promises)}},updateFx:function(t){for(var e\u003dt._fullLayout,r\u003de._subplots.geo,n\u003d0;n\u003cr.length;n++){var i\u003de[r[n]];i._subplot.updateFx(e,i)}},clean:function(t,e,r,n){for(var i\u003dn._subplots.geo||[],a\u003d0;a\u003ci.length;a++){var o\u003di[a],s\u003dn[o]._subplot;!e[o]\u0026\u0026s\u0026\u0026(s.framework.remove(),s.clipDef.remove())}}}},{\"../../lib\":799,\"../../plots/get_data\":887,\"./geo\":881,\"./layout_attributes\":883,\"./layout_defaults\":884}],883:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color/attributes\"),i\u003dt(\"../domain\").attributes,a\u003dt(\"./constants\"),o\u003dt(\"../../plot_api/edit_types\").overrideAll,s\u003d{range:{valType:\"info_array\",items:[{valType:\"number\"},{valType:\"number\"}]},showgrid:{valType:\"boolean\",dflt:!1},tick0:{valType:\"number\",dflt:0},dtick:{valType:\"number\"},gridcolor:{valType:\"color\",dflt:n.lightLine},gridwidth:{valType:\"number\",min:0,dflt:1}};(e.exports\u003do({domain:i({name:\"geo\"},{}),fitbounds:{valType:\"enumerated\",values:[!1,\"locations\",\"geojson\"],dflt:!1,editType:\"plot\"},resolution:{valType:\"enumerated\",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:\"enumerated\",values:Object.keys(a.scopeDefaults),dflt:\"world\"},projection:{type:{valType:\"enumerated\",values:Object.keys(a.projNames)},rotation:{lon:{valType:\"number\"},lat:{valType:\"number\"},roll:{valType:\"number\"}},parallels:{valType:\"info_array\",items:[{valType:\"number\"},{valType:\"number\"}]},scale:{valType:\"number\",min:0,dflt:1}},center:{lon:{valType:\"number\"},lat:{valType:\"number\"}},visible:{valType:\"boolean\",dflt:!0},showcoastlines:{valType:\"boolean\"},coastlinecolor:{valType:\"color\",dflt:n.defaultLine},coastlinewidth:{valType:\"number\",min:0,dflt:1},showland:{valType:\"boolean\",dflt:!1},landcolor:{valType:\"color\",dflt:a.landColor},showocean:{valType:\"boolean\",dflt:!1},oceancolor:{valType:\"color\",dflt:a.waterColor},showlakes:{valType:\"boolean\",dflt:!1},lakecolor:{valType:\"color\",dflt:a.waterColor},showrivers:{valType:\"boolean\",dflt:!1},rivercolor:{valType:\"color\",dflt:a.waterColor},riverwidth:{valType:\"number\",min:0,dflt:1},showcountries:{valType:\"boolean\"},countrycolor:{valType:\"color\",dflt:n.defaultLine},countrywidth:{valType:\"number\",min:0,dflt:1},showsubunits:{valType:\"boolean\"},subunitcolor:{valType:\"color\",dflt:n.defaultLine},subunitwidth:{valType:\"number\",min:0,dflt:1},showframe:{valType:\"boolean\"},framecolor:{valType:\"color\",dflt:n.defaultLine},framewidth:{valType:\"number\",min:0,dflt:1},bgcolor:{valType:\"color\",dflt:n.background},lonaxis:s,lataxis:s},\"plot\",\"from-root\")).uirevision\u003d{valType:\"any\",editType:\"none\"}},{\"../../components/color/attributes\":661,\"../../plot_api/edit_types\":831,\"../domain\":877,\"./constants\":880}],884:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../subplot_defaults\"),a\u003dt(\"../get_data\").getSubplotData,o\u003dt(\"./constants\"),s\u003dt(\"./layout_attributes\"),l\u003do.axesNames;function c(t,e,r,i){var s\u003da(i.fullData,\"geo\",i.id).map((function(t){return t._expandedIndex})),c\u003dr(\"resolution\"),u\u003dr(\"scope\"),f\u003do.scopeDefaults[u],h\u003dr(\"projection.type\",f.projType),p\u003de._isAlbersUsa\u003d\"albers usa\"\u003d\u003d\u003dh;p\u0026\u0026(u\u003de.scope\u003d\"usa\");var d\u003de._isScoped\u003d\"world\"!\u003d\u003du,m\u003de._isConic\u003d-1!\u003d\u003dh.indexOf(\"conic\"),g\u003de._isClipped\u003d!!o.lonaxisSpan[h];if(!1\u003d\u003d\u003dt.visible){var v\u003dn.extendDeep({},e._template);v.showcoastlines\u003d!1,v.showcountries\u003d!1,v.showframe\u003d!1,v.showlakes\u003d!1,v.showland\u003d!1,v.showocean\u003d!1,v.showrivers\u003d!1,v.showsubunits\u003d!1,v.lonaxis\u0026\u0026(v.lonaxis.showgrid\u003d!1),v.lataxis\u0026\u0026(v.lataxis.showgrid\u003d!1),e._template\u003dv}for(var y\u003dr(\"visible\"),x\u003d0;x\u003cl.length;x++){var b,_\u003dl[x],w\u003d[30,10][x];if(d)b\u003df[_+\"Range\"];else{var T\u003do[_+\"Span\"],k\u003d(T[h]||T[\"*\"])/2,M\u003dr(\"projection.rotation.\"+_.substr(0,3),f.projRotate[x]);b\u003d[M-k,M+k]}var A\u003dr(_+\".range\",b);r(_+\".tick0\"),r(_+\".dtick\",w),r(_+\".showgrid\",!!y\u0026\u0026void 0)\u0026\u0026(r(_+\".gridcolor\"),r(_+\".gridwidth\")),e[_]._ax\u003d{type:\"linear\",_id:_.slice(0,3),_traceIndices:s,setScale:n.identity,c2l:n.identity,r2l:n.identity,autorange:!0,range:A.slice(),_m:1,_input:{}}}var S\u003de.lonaxis.range,E\u003de.lataxis.range,L\u003dS[0],C\u003dS[1];L\u003e0\u0026\u0026C\u003c0\u0026\u0026(C+\u003d360);var P,I,O,z\u003d(L+C)/2;if(!p){var D\u003dd?f.projRotate:[z,0,0];P\u003dr(\"projection.rotation.lon\",D[0]),r(\"projection.rotation.lat\",D[1]),r(\"projection.rotation.roll\",D[2]),r(\"showcoastlines\",!d\u0026\u0026y)\u0026\u0026(r(\"coastlinecolor\"),r(\"coastlinewidth\")),r(\"showocean\",!!y\u0026\u0026void 0)\u0026\u0026r(\"oceancolor\")}(p?(I\u003d-96.6,O\u003d38.7):(I\u003dd?z:P,O\u003d(E[0]+E[1])/2),r(\"center.lon\",I),r(\"center.lat\",O),m)\u0026\u0026r(\"projection.parallels\",f.projParallels||[0,60]);r(\"projection.scale\"),r(\"showland\",!!y\u0026\u0026void 0)\u0026\u0026r(\"landcolor\"),r(\"showlakes\",!!y\u0026\u0026void 0)\u0026\u0026r(\"lakecolor\"),r(\"showrivers\",!!y\u0026\u0026void 0)\u0026\u0026(r(\"rivercolor\"),r(\"riverwidth\")),r(\"showcountries\",d\u0026\u0026\"usa\"!\u003d\u003du\u0026\u0026y)\u0026\u0026(r(\"countrycolor\"),r(\"countrywidth\")),(\"usa\"\u003d\u003d\u003du||\"north america\"\u003d\u003d\u003du\u0026\u002650\u003d\u003d\u003dc)\u0026\u0026(r(\"showsubunits\",y),r(\"subunitcolor\"),r(\"subunitwidth\")),d||r(\"showframe\",y)\u0026\u0026(r(\"framecolor\"),r(\"framewidth\")),r(\"bgcolor\"),r(\"fitbounds\")\u0026\u0026(delete e.projection.scale,d?(delete e.center.lon,delete e.center.lat):g?(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon,delete e.projection.rotation.lat,delete e.lonaxis.range,delete e.lataxis.range):(delete e.center.lon,delete e.center.lat,delete e.projection.rotation.lon))}e.exports\u003dfunction(t,e,r){i(t,e,r,{type:\"geo\",attributes:s,handleDefaults:c,fullData:r,partition:\"y\"})}},{\"../../lib\":799,\"../get_data\":887,\"../subplot_defaults\":921,\"./constants\":880,\"./layout_attributes\":883}],885:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){function e(t,e){return{type:\"Feature\",id:t.id,properties:t.properties,geometry:r(t.geometry,e)}}function r(e,n){if(!e)return null;if(\"GeometryCollection\"\u003d\u003d\u003de.type)return{type:\"GeometryCollection\",geometries:object.geometries.map((function(t){return r(t,n)}))};if(!c.hasOwnProperty(e.type))return null;var i\u003dc[e.type];return t.geo.stream(e,n(i)),i.result()}t.geo.project\u003dfunction(t,e){var i\u003de.stream;if(!i)throw new Error(\"not yet supported\");return(t\u0026\u0026n.hasOwnProperty(t.type)?n[t.type]:r)(t,i)};var n\u003d{Feature:e,FeatureCollection:function(t,r){return{type:\"FeatureCollection\",features:t.features.map((function(t){return e(t,r)}))}}},i\u003d[],a\u003d[],o\u003d{point:function(t,e){i.push([t,e])},result:function(){var t\u003di.length?i.length\u003c2?{type:\"Point\",coordinates:i[0]}:{type:\"MultiPoint\",coordinates:i}:null;return i\u003d[],t}},s\u003d{lineStart:u,point:function(t,e){i.push([t,e])},lineEnd:function(){i.length\u0026\u0026(a.push(i),i\u003d[])},result:function(){var t\u003da.length?a.length\u003c2?{type:\"LineString\",coordinates:a[0]}:{type:\"MultiLineString\",coordinates:a}:null;return a\u003d[],t}},l\u003d{polygonStart:u,lineStart:u,point:function(t,e){i.push([t,e])},lineEnd:function(){var t\u003di.length;if(t){do{i.push(i[0].slice())}while(++t\u003c4);a.push(i),i\u003d[]}},polygonEnd:u,result:function(){if(!a.length)return null;var t\u003d[],e\u003d[];return a.forEach((function(r){!function(t){if((e\u003dt.length)\u003c4)return!1;var e,r\u003d0,n\u003dt[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];for(;++r\u003ce;)n+\u003dt[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n\u003c\u003d0}(r)?e.push(r):t.push([r])})),e.forEach((function(e){var r\u003de[0];t.some((function(t){if(function(t,e){for(var r\u003de[0],n\u003de[1],i\u003d!1,a\u003d0,o\u003dt.length,s\u003do-1;a\u003co;s\u003da++){var l\u003dt[a],c\u003dl[0],u\u003dl[1],f\u003dt[s],h\u003df[0],p\u003df[1];u\u003en^p\u003en\u0026\u0026r\u003c(h-c)*(n-u)/(p-u)+c\u0026\u0026(i\u003d!i)}return i}(t[0],r))return t.push(e),!0}))||t.push([e])})),a\u003d[],t.length?t.length\u003e1?{type:\"MultiPolygon\",coordinates:t}:{type:\"Polygon\",coordinates:t[0]}:null}},c\u003d{Point:o,MultiPoint:o,LineString:s,MultiLineString:s,Polygon:l,MultiPolygon:l,Sphere:l};function u(){}var f\u003d1e-6,h\u003dMath.PI,p\u003dh/2,d\u003d(Math.sqrt(h),h/180),m\u003d180/h;function g(t){return t\u003e1?p:t\u003c-1?-p:Math.asin(t)}function v(t){return t\u003e1?0:t\u003c-1?h:Math.acos(t)}var y\u003dt.geo.projection,x\u003dt.geo.projectionMutator;function b(t,e){var r\u003d(2+p)*Math.sin(e);e/\u003d2;for(var n\u003d0,i\u003d1/0;n\u003c10\u0026\u0026Math.abs(i)\u003ef;n++){var a\u003dMath.cos(e);e-\u003di\u003d(e+Math.sin(e)*(a+2)-r)/(2*a*(1+a))}return[2/Math.sqrt(h*(4+h))*t*(1+Math.cos(e)),2*Math.sqrt(h/(4+h))*Math.sin(e)]}t.geo.interrupt\u003dfunction(e){var r,n\u003d[[[[-h,0],[0,p],[h,0]]],[[[-h,0],[0,-p],[h,0]]]];function i(t,r){for(var i\u003dr\u003c0?-1:1,a\u003dn[+(r\u003c0)],o\u003d0,s\u003da.length-1;o\u003cs\u0026\u0026t\u003ea[o][2][0];++o);var l\u003de(t-a[o][1][0],r);return l[0]+\u003de(a[o][1][0],i*r\u003ei*a[o][0][1]?a[o][0][1]:r)[0],l}function a(){r\u003dn.map((function(t){return t.map((function(t){var r,n\u003de(t[0][0],t[0][1])[0],i\u003de(t[2][0],t[2][1])[0],a\u003de(t[1][0],t[0][1])[1],o\u003de(t[1][0],t[1][1])[1];return a\u003eo\u0026\u0026(r\u003da,a\u003do,o\u003dr),[[n,a],[i,o]]}))}))}e.invert\u0026\u0026(i.invert\u003dfunction(t,a){for(var o\u003dr[+(a\u003c0)],s\u003dn[+(a\u003c0)],l\u003d0,u\u003do.length;l\u003cu;++l){var f\u003do[l];if(f[0][0]\u003c\u003dt\u0026\u0026t\u003cf[1][0]\u0026\u0026f[0][1]\u003c\u003da\u0026\u0026a\u003cf[1][1]){var h\u003de.invert(t-e(s[l][1][0],0)[0],a);return h[0]+\u003ds[l][1][0],c(i(h[0],h[1]),[t,a])?h:null}}});var o\u003dt.geo.projection(i),s\u003do.stream;function l(t,e){for(var r,n,i,a\u003d-1,o\u003dt.length,s\u003dt[0],l\u003d[];++a\u003co;){n\u003d((r\u003dt[a])[0]-s[0])/e,i\u003d(r[1]-s[1])/e;for(var c\u003d0;c\u003ce;++c)l.push([s[0]+c*n,s[1]+c*i]);s\u003dr}return l.push(r),l}function c(t,e){return Math.abs(t[0]-e[0])\u003cf\u0026\u0026Math.abs(t[1]-e[1])\u003cf}return o.stream\u003dfunction(e){var r\u003do.rotate(),i\u003ds(e),a\u003d(o.rotate([0,0]),s(e));return o.rotate(r),i.sphere\u003dfunction(){t.geo.stream(function(){for(var e\u003d1e-6,r\u003d[],i\u003d0,a\u003dn[0].length;i\u003ca;++i){var o\u003d180*(p\u003dn[0][i])[0][0]/h,s\u003d180*p[0][1]/h,c\u003d180*p[1][1]/h,u\u003d180*p[2][0]/h,f\u003d180*p[2][1]/h;r.push(l([[o+e,s+e],[o+e,c-e],[u-e,c-e],[u-e,f+e]],30))}for(i\u003dn[1].length-1;i\u003e\u003d0;--i){var p;o\u003d180*(p\u003dn[1][i])[0][0]/h,s\u003d180*p[0][1]/h,c\u003d180*p[1][1]/h,u\u003d180*p[2][0]/h,f\u003d180*p[2][1]/h;r.push(l([[u-e,f-e],[u-e,c+e],[o+e,c+e],[o+e,s-e]],30))}return{type:\"Polygon\",coordinates:[t.merge(r)]}}(),a)},i},o.lobes\u003dfunction(t){return arguments.length?(n\u003dt.map((function(t){return t.map((function(t){return[[t[0][0]*h/180,t[0][1]*h/180],[t[1][0]*h/180,t[1][1]*h/180],[t[2][0]*h/180,t[2][1]*h/180]]}))})),a(),o):n.map((function(t){return t.map((function(t){return[[180*t[0][0]/h,180*t[0][1]/h],[180*t[1][0]/h,180*t[1][1]/h],[180*t[2][0]/h,180*t[2][1]/h]]}))}))},o},b.invert\u003dfunction(t,e){var r\u003d.5*e*Math.sqrt((4+h)/h),n\u003dg(r),i\u003dMath.cos(n);return[t/(2/Math.sqrt(h*(4+h))*(1+i)),g((n+r*(i+2))/(2+p))]},(t.geo.eckert4\u003dfunction(){return y(b)}).raw\u003db;var _\u003dt.geo.azimuthalEqualArea.raw;function w(t,e){if(arguments.length\u003c2\u0026\u0026(e\u003dt),1\u003d\u003d\u003de)return _;if(e\u003d\u003d\u003d1/0)return T;function r(r,n){var i\u003d_(r/e,n);return i[0]*\u003dt,i}return r.invert\u003dfunction(r,n){var i\u003d_.invert(r/t,n);return i[0]*\u003de,i},r}function T(t,e){return[t*Math.cos(e)/Math.cos(e/\u003d2),2*Math.sin(e)]}function k(t,e){return[3*t/(2*h)*Math.sqrt(h*h/3-e*e),e]}function M(t,e){return[t,1.25*Math.log(Math.tan(h/4+.4*e))]}function A(t){return function(e){var r,n\u003dt*Math.sin(e),i\u003d30;do{e-\u003dr\u003d(e+Math.sin(e)-n)/(1+Math.cos(e))}while(Math.abs(r)\u003ef\u0026\u0026--i\u003e0);return e/2}}T.invert\u003dfunction(t,e){var r\u003d2*g(e/2);return[t*Math.cos(r/2)/Math.cos(r),r]},(t.geo.hammer\u003dfunction(){var t\u003d2,e\u003dx(w),r\u003de(t);return r.coefficient\u003dfunction(r){return arguments.length?e(t\u003d+r):t},r}).raw\u003dw,k.invert\u003dfunction(t,e){return[2/3*h*t/Math.sqrt(h*h/3-e*e),e]},(t.geo.kavrayskiy7\u003dfunction(){return y(k)}).raw\u003dk,M.invert\u003dfunction(t,e){return[t,2.5*Math.atan(Math.exp(.8*e))-.625*h]},(t.geo.miller\u003dfunction(){return y(M)}).raw\u003dM,A(h);var S\u003dfunction(t,e,r){var n\u003dA(r);function i(r,i){return[t*r*Math.cos(i\u003dn(i)),e*Math.sin(i)]}return i.invert\u003dfunction(n,i){var a\u003dg(i/e);return[n/(t*Math.cos(a)),g((2*a+Math.sin(2*a))/r)]},i}(Math.SQRT2/p,Math.SQRT2,h);function E(t,e){var r\u003de*e,n\u003dr*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}(t.geo.mollweide\u003dfunction(){return y(S)}).raw\u003dS,E.invert\u003dfunction(t,e){var r,n\u003de,i\u003d25;do{var a\u003dn*n,o\u003da*a;n-\u003dr\u003d(n*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(Math.abs(r)\u003ef\u0026\u0026--i\u003e0);return[t/(.8707+(a\u003dn*n)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),n]},(t.geo.naturalEarth\u003dfunction(){return y(E)}).raw\u003dE;var L\u003d[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];function C(t,e){var r,n\u003dMath.min(18,36*Math.abs(e)/h),i\u003dMath.floor(n),a\u003dn-i,o\u003d(r\u003dL[i])[0],s\u003dr[1],l\u003d(r\u003dL[++i])[0],c\u003dr[1],u\u003d(r\u003dL[Math.min(19,++i)])[0],f\u003dr[1];return[t*(l+a*(u-o)/2+a*a*(u-2*l+o)/2),(e\u003e0?p:-p)*(c+a*(f-s)/2+a*a*(f-2*c+s)/2)]}function P(t,e){return[t*Math.cos(e),e]}function I(t,e){var r,n\u003dMath.cos(e),i\u003d(r\u003dv(n*Math.cos(t/\u003d2)))?r/Math.sin(r):1;return[2*n*Math.sin(t)*i,Math.sin(e)*i]}function O(t,e){var r\u003dI(t,e);return[(r[0]+t/p)/2,(r[1]+e)/2]}L.forEach((function(t){t[1]*\u003d1.0144})),C.invert\u003dfunction(t,e){var r\u003de/p,n\u003d90*r,i\u003dMath.min(18,Math.abs(n/5)),a\u003dMath.max(0,Math.floor(i));do{var o\u003dL[a][1],s\u003dL[a+1][1],l\u003dL[Math.min(19,a+2)][1],c\u003dl-o,u\u003dl-2*s+o,f\u003d2*(Math.abs(r)-s)/c,h\u003du/c,g\u003df*(1-h*f*(1-2*h*f));if(g\u003e\u003d0||1\u003d\u003d\u003da){n\u003d(e\u003e\u003d0?5:-5)*(g+i);var v,y\u003d50;do{g\u003d(i\u003dMath.min(18,Math.abs(n)/5))-(a\u003dMath.floor(i)),o\u003dL[a][1],s\u003dL[a+1][1],l\u003dL[Math.min(19,a+2)][1],n-\u003d(v\u003d(e\u003e\u003d0?p:-p)*(s+g*(l-o)/2+g*g*(l-2*s+o)/2)-e)*m}while(Math.abs(v)\u003e1e-12\u0026\u0026--y\u003e0);break}}while(--a\u003e\u003d0);var x\u003dL[a][0],b\u003dL[a+1][0],_\u003dL[Math.min(19,a+2)][0];return[t/(b+g*(_-x)/2+g*g*(_-2*b+x)/2),n*d]},(t.geo.robinson\u003dfunction(){return y(C)}).raw\u003dC,P.invert\u003dfunction(t,e){return[t/Math.cos(e),e]},(t.geo.sinusoidal\u003dfunction(){return y(P)}).raw\u003dP,I.invert\u003dfunction(t,e){if(!(t*t+4*e*e\u003eh*h+f)){var r\u003dt,n\u003de,i\u003d25;do{var a,o\u003dMath.sin(r),s\u003dMath.sin(r/2),l\u003dMath.cos(r/2),c\u003dMath.sin(n),u\u003dMath.cos(n),p\u003dMath.sin(2*n),d\u003dc*c,m\u003du*u,g\u003ds*s,y\u003d1-m*l*l,x\u003dy?v(u*l)*Math.sqrt(a\u003d1/y):a\u003d0,b\u003d2*x*u*s-t,_\u003dx*c-e,w\u003da*(m*g+x*u*l*d),T\u003da*(.5*o*p-2*x*c*s),k\u003d.25*a*(p*s-x*c*m*o),M\u003da*(d*l+x*g*u),A\u003dT*k-M*w;if(!A)break;var S\u003d(_*T-b*M)/A,E\u003d(b*k-_*w)/A;r-\u003dS,n-\u003dE}while((Math.abs(S)\u003ef||Math.abs(E)\u003ef)\u0026\u0026--i\u003e0);return[r,n]}},(t.geo.aitoff\u003dfunction(){return y(I)}).raw\u003dI,O.invert\u003dfunction(t,e){var r\u003dt,n\u003de,i\u003d25;do{var a,o\u003dMath.cos(n),s\u003dMath.sin(n),l\u003dMath.sin(2*n),c\u003ds*s,u\u003do*o,h\u003dMath.sin(r),d\u003dMath.cos(r/2),m\u003dMath.sin(r/2),g\u003dm*m,y\u003d1-u*d*d,x\u003dy?v(o*d)*Math.sqrt(a\u003d1/y):a\u003d0,b\u003d.5*(2*x*o*m+r/p)-t,_\u003d.5*(x*s+n)-e,w\u003d.5*a*(u*g+x*o*d*c)+.5/p,T\u003da*(h*l/4-x*s*m),k\u003d.125*a*(l*m-x*s*u*h),M\u003d.5*a*(c*d+x*g*o)+.5,A\u003dT*k-M*w,S\u003d(_*T-b*M)/A,E\u003d(b*k-_*w)/A;r-\u003dS,n-\u003dE}while((Math.abs(S)\u003ef||Math.abs(E)\u003ef)\u0026\u0026--i\u003e0);return[r,n]},(t.geo.winkel3\u003dfunction(){return y(O)}).raw\u003dO}},{}],886:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../registry\"),o\u003dMath.PI/180,s\u003d180/Math.PI,l\u003d{cursor:\"pointer\"},c\u003d{cursor:\"auto\"};function u(t,e){return n.behavior.zoom().translate(e.translate()).scale(e.scale())}function f(t,e,r){var n\u003dt.id,o\u003dt.graphDiv,s\u003do.layout,l\u003ds[n],c\u003do._fullLayout,u\u003dc[n],f\u003d{},h\u003d{};function p(t,e){f[n+\".\"+t]\u003di.nestedProperty(l,t).get(),a.call(\"_storeDirectGUIEdit\",s,c._preGUI,f);var r\u003di.nestedProperty(u,t);r.get()!\u003d\u003de\u0026\u0026(r.set(e),i.nestedProperty(l,t).set(e),h[n+\".\"+t]\u003de)}r(p),p(\"projection.scale\",e.scale()/t.fitScale),p(\"fitbounds\",!1),o.emit(\"plotly_relayout\",h)}function h(t,e){var r\u003du(0,e);function i(r){var n\u003de.invert(t.midPt);r(\"center.lon\",n[0]),r(\"center.lat\",n[1])}return r.on(\"zoomstart\",(function(){n.select(this).style(l)})).on(\"zoom\",(function(){e.scale(n.event.scale).translate(n.event.translate),t.render();var r\u003de.invert(t.midPt);t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.center.lon\":r[0],\"geo.center.lat\":r[1]})})).on(\"zoomend\",(function(){n.select(this).style(c),f(t,e,i)})),r}function p(t,e){var r,i,a,o,s,h,p,d,m,g\u003du(0,e);function v(t){return e.invert(t)}function y(r){var n\u003de.rotate(),i\u003de.invert(t.midPt);r(\"projection.rotation.lon\",-n[0]),r(\"center.lon\",i[0]),r(\"center.lat\",i[1])}return g.on(\"zoomstart\",(function(){n.select(this).style(l),r\u003dn.mouse(this),i\u003de.rotate(),a\u003de.translate(),o\u003di,s\u003dv(r)})).on(\"zoom\",(function(){if(h\u003dn.mouse(this),function(t){var r\u003dv(t);if(!r)return!0;var n\u003de(r);return Math.abs(n[0]-t[0])\u003e2||Math.abs(n[1]-t[1])\u003e2}(r))return g.scale(e.scale()),void g.translate(e.translate());e.scale(n.event.scale),e.translate([a[0],n.event.translate[1]]),s?v(h)\u0026\u0026(d\u003dv(h),p\u003d[o[0]+(d[0]-s[0]),i[1],i[2]],e.rotate(p),o\u003dp):s\u003dv(r\u003dh),m\u003d!0,t.render();var l\u003de.rotate(),c\u003de.invert(t.midPt);t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.center.lon\":c[0],\"geo.center.lat\":c[1],\"geo.projection.rotation.lon\":-l[0]})})).on(\"zoomend\",(function(){n.select(this).style(c),m\u0026\u0026f(t,e,y)})),g}function d(t,e){var r,i\u003d{r:e.rotate(),k:e.scale()},a\u003du(0,e),o\u003dfunction(t){var e\u003d0,r\u003darguments.length,i\u003d[];for(;++e\u003cr;)i.push(arguments[e]);var a\u003dn.dispatch.apply(null,i);return a.of\u003dfunction(e,r){return function(i){var o;try{o\u003di.sourceEvent\u003dn.event,i.target\u003dt,n.event\u003di,a[i.type].apply(e,r)}finally{n.event\u003do}}},a}(a,\"zoomstart\",\"zoom\",\"zoomend\"),s\u003d0,h\u003da.on;function p(t){s++||t({type:\"zoomstart\"})}function d(t){t({type:\"zoom\"})}function b(t){--s||t({type:\"zoomend\"})}function _(t){var r\u003de.rotate();t(\"projection.rotation.lon\",-r[0]),t(\"projection.rotation.lat\",-r[1])}return a.on(\"zoomstart\",(function(){n.select(this).style(l);var t\u003dn.mouse(this),s\u003de.rotate(),c\u003ds,u\u003de.translate(),f\u003dg(s);r\u003dm(e,t),h.call(a,\"zoom\",(function(){var a\u003dn.mouse(this);if(e.scale(i.k\u003dn.event.scale),r){if(m(e,a)){e.rotate(s).translate(u);var l\u003dm(e,a),h\u003dy(r,l),p\u003dT(v(f,h)),g\u003di.r\u003dx(p,r,c);isFinite(g[0])\u0026\u0026isFinite(g[1])\u0026\u0026isFinite(g[2])||(g\u003dc),e.rotate(g),c\u003dg}}else r\u003dm(e,t\u003da);d(o.of(this,arguments))})),p(o.of(this,arguments))})).on(\"zoomend\",(function(){n.select(this).style(c),h.call(a,\"zoom\",null),b(o.of(this,arguments)),f(t,e,_)})).on(\"zoom.redraw\",(function(){t.render();var r\u003de.rotate();t.graphDiv.emit(\"plotly_relayouting\",{\"geo.projection.scale\":e.scale()/t.fitScale,\"geo.projection.rotation.lon\":-r[0],\"geo.projection.rotation.lat\":-r[1]})})),n.rebind(a,o,\"on\")}function m(t,e){var r\u003dt.invert(e);return r\u0026\u0026isFinite(r[0])\u0026\u0026isFinite(r[1])\u0026\u0026function(t){var e\u003dt[0]*o,r\u003dt[1]*o,n\u003dMath.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}(r)}function g(t){var e\u003d.5*t[0]*o,r\u003d.5*t[1]*o,n\u003d.5*t[2]*o,i\u003dMath.sin(e),a\u003dMath.cos(e),s\u003dMath.sin(r),l\u003dMath.cos(r),c\u003dMath.sin(n),u\u003dMath.cos(n);return[a*l*u+i*s*c,i*l*u-a*s*c,a*s*u+i*l*c,a*l*c-i*s*u]}function v(t,e){var r\u003dt[0],n\u003dt[1],i\u003dt[2],a\u003dt[3],o\u003de[0],s\u003de[1],l\u003de[2],c\u003de[3];return[r*o-n*s-i*l-a*c,r*s+n*o+i*c-a*l,r*l-n*c+i*o+a*s,r*c+n*l-i*s+a*o]}function y(t,e){if(t\u0026\u0026e){var r\u003dfunction(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}(t,e),n\u003dMath.sqrt(k(r,r)),i\u003d.5*Math.acos(Math.max(-1,Math.min(1,k(t,e)))),a\u003dMath.sin(i)/n;return n\u0026\u0026[Math.cos(i),r[2]*a,-r[1]*a,r[0]*a]}}function x(t,e,r){var n\u003dw(e,2,t[0]);n\u003dw(n,1,t[1]),n\u003dw(n,0,t[2]-r[2]);var i,a,o\u003de[0],l\u003de[1],c\u003de[2],u\u003dn[0],f\u003dn[1],h\u003dn[2],p\u003dMath.atan2(l,o)*s,d\u003dMath.sqrt(o*o+l*l);Math.abs(f)\u003ed?(a\u003d(f\u003e0?90:-90)-p,i\u003d0):(a\u003dMath.asin(f/d)*s-p,i\u003dMath.sqrt(d*d-f*f));var m\u003d180-a-2*p,g\u003d(Math.atan2(h,u)-Math.atan2(c,i))*s,v\u003d(Math.atan2(h,u)-Math.atan2(c,-i))*s;return b(r[0],r[1],a,g)\u003c\u003db(r[0],r[1],m,v)?[a,g,r[2]]:[m,v,r[2]]}function b(t,e,r,n){var i\u003d_(r-t),a\u003d_(n-e);return Math.sqrt(i*i+a*a)}function _(t){return(t%360+540)%360-180}function w(t,e,r){var n\u003dr*o,i\u003dt.slice(),a\u003d0\u003d\u003d\u003de?1:0,s\u003d2\u003d\u003d\u003de?1:2,l\u003dMath.cos(n),c\u003dMath.sin(n);return i[a]\u003dt[a]*l-t[s]*c,i[s]\u003dt[s]*l+t[a]*c,i}function T(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*s,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*s,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*s]}function k(t,e){for(var r\u003d0,n\u003d0,i\u003dt.length;n\u003ci;++n)r+\u003dt[n]*e[n];return r}e.exports\u003dfunction(t,e){var r\u003dt.projection;return(e._isScoped?h:e._isClipped?d:p)(t,r)}},{\"../../lib\":799,\"../../registry\":927,\"@plotly/d3\":58}],887:[function(t,e,r){\"use strict\";var n\u003dt(\"../registry\"),i\u003dt(\"./cartesian/constants\").SUBPLOT_PATTERN;r.getSubplotCalcData\u003dfunction(t,e,r){var i\u003dn.subplotsRegistry[e];if(!i)return[];for(var a\u003di.attr,o\u003d[],s\u003d0;s\u003ct.length;s++){var l\u003dt[s];l[0].trace[a]\u003d\u003d\u003dr\u0026\u0026o.push(l)}return o},r.getModuleCalcData\u003dfunction(t,e){var r,i\u003d[],a\u003d[];if(!(r\u003d\"string\"\u003d\u003dtypeof e?n.getModule(e).plot:\"function\"\u003d\u003dtypeof e?e:e.plot))return[i,t];for(var o\u003d0;o\u003ct.length;o++){var s\u003dt[o],l\u003ds[0].trace;!0\u003d\u003d\u003dl.visible\u0026\u00260!\u003d\u003dl._length\u0026\u0026(l._module.plot\u003d\u003d\u003dr?i.push(s):a.push(s))}return[i,a]},r.getSubplotData\u003dfunction(t,e,r){if(!n.subplotsRegistry[e])return[];var a,o,s,l\u003dn.subplotsRegistry[e].attr,c\u003d[];if(\"gl2d\"\u003d\u003d\u003de){var u\u003dr.match(i);o\u003d\"x\"+u[1],s\u003d\"y\"+u[2]}for(var f\u003d0;f\u003ct.length;f++)a\u003dt[f],\"gl2d\"\u003d\u003d\u003de\u0026\u0026n.traceIs(a,\"gl2d\")?a[l[0]]\u003d\u003d\u003do\u0026\u0026a[l[1]]\u003d\u003d\u003ds\u0026\u0026c.push(a):a[l]\u003d\u003d\u003dr\u0026\u0026c.push(a);return c}},{\"../registry\":927,\"./cartesian/constants\":856}],888:[function(t,e,r){\"use strict\";var n\u003dt(\"mouse-change\"),i\u003dt(\"mouse-wheel\"),a\u003dt(\"mouse-event-offset\"),o\u003dt(\"../cartesian/constants\"),s\u003dt(\"has-passive-events\");function l(t,e){this.element\u003dt,this.plot\u003de,this.mouseListener\u003dnull,this.wheelListener\u003dnull,this.lastInputTime\u003dDate.now(),this.lastPos\u003d[0,0],this.boxEnabled\u003d!1,this.boxInited\u003d!1,this.boxStart\u003d[0,0],this.boxEnd\u003d[0,0],this.dragStart\u003d[0,0]}e.exports\u003dfunction(t){var e\u003dt.mouseContainer,r\u003dt.glplot,c\u003dnew l(e,r);function u(){t.xaxis.autorange\u003d!1,t.yaxis.autorange\u003d!1}function f(e,n,i){var a,s,l\u003dt.calcDataBox(),f\u003dr.viewBox,h\u003dc.lastPos[0],p\u003dc.lastPos[1],d\u003do.MINDRAG*r.pixelRatio,m\u003do.MINZOOM*r.pixelRatio;function g(e,r,n){var i\u003dMath.min(r,n),a\u003dMath.max(r,n);i!\u003d\u003da?(l[e]\u003di,l[e+2]\u003da,c.dataBox\u003dl,t.setRanges(l)):(t.selectBox.selectBox\u003d[0,0,1,1],t.glplot.setDirty())}switch(n*\u003dr.pixelRatio,i*\u003dr.pixelRatio,i\u003df[3]-f[1]-i,t.fullLayout.dragmode){case\"zoom\":if(e){var v\u003dn/(f[2]-f[0])*(l[2]-l[0])+l[0],y\u003di/(f[3]-f[1])*(l[3]-l[1])+l[1];c.boxInited||(c.boxStart[0]\u003dv,c.boxStart[1]\u003dy,c.dragStart[0]\u003dn,c.dragStart[1]\u003di),c.boxEnd[0]\u003dv,c.boxEnd[1]\u003dy,c.boxInited\u003d!0,c.boxEnabled||c.boxStart[0]\u003d\u003d\u003dc.boxEnd[0]\u0026\u0026c.boxStart[1]\u003d\u003d\u003dc.boxEnd[1]||(c.boxEnabled\u003d!0);var x\u003dMath.abs(c.dragStart[0]-n)\u003cm,b\u003dMath.abs(c.dragStart[1]-i)\u003cm;if(!function(){for(var e\u003dt.graphDiv._fullLayout._axisConstraintGroups,r\u003dt.xaxis._id,n\u003dt.yaxis._id,i\u003d0;i\u003ce.length;i++)if(-1!\u003d\u003de[i][r]){if(-1!\u003d\u003de[i][n])return!0;break}return!1}()||x\u0026\u0026b)x\u0026\u0026(c.boxEnd[0]\u003dc.boxStart[0]),b\u0026\u0026(c.boxEnd[1]\u003dc.boxStart[1]);else{a\u003dc.boxEnd[0]-c.boxStart[0],s\u003dc.boxEnd[1]-c.boxStart[1];var _\u003d(l[3]-l[1])/(l[2]-l[0]);Math.abs(a*_)\u003eMath.abs(s)?(c.boxEnd[1]\u003dc.boxStart[1]+Math.abs(a)*_*(s\u003e\u003d0?1:-1),c.boxEnd[1]\u003cl[1]?(c.boxEnd[1]\u003dl[1],c.boxEnd[0]\u003dc.boxStart[0]+(l[1]-c.boxStart[1])/Math.abs(_)):c.boxEnd[1]\u003el[3]\u0026\u0026(c.boxEnd[1]\u003dl[3],c.boxEnd[0]\u003dc.boxStart[0]+(l[3]-c.boxStart[1])/Math.abs(_))):(c.boxEnd[0]\u003dc.boxStart[0]+Math.abs(s)/_*(a\u003e\u003d0?1:-1),c.boxEnd[0]\u003cl[0]?(c.boxEnd[0]\u003dl[0],c.boxEnd[1]\u003dc.boxStart[1]+(l[0]-c.boxStart[0])*Math.abs(_)):c.boxEnd[0]\u003el[2]\u0026\u0026(c.boxEnd[0]\u003dl[2],c.boxEnd[1]\u003dc.boxStart[1]+(l[2]-c.boxStart[0])*Math.abs(_)))}}else c.boxEnabled?(a\u003dc.boxStart[0]!\u003d\u003dc.boxEnd[0],s\u003dc.boxStart[1]!\u003d\u003dc.boxEnd[1],a||s?(a\u0026\u0026(g(0,c.boxStart[0],c.boxEnd[0]),t.xaxis.autorange\u003d!1),s\u0026\u0026(g(1,c.boxStart[1],c.boxEnd[1]),t.yaxis.autorange\u003d!1),t.relayoutCallback()):t.glplot.setDirty(),c.boxEnabled\u003d!1,c.boxInited\u003d!1):c.boxInited\u0026\u0026(c.boxInited\u003d!1);break;case\"pan\":c.boxEnabled\u003d!1,c.boxInited\u003d!1,e?(c.panning||(c.dragStart[0]\u003dn,c.dragStart[1]\u003di),Math.abs(c.dragStart[0]-n)\u003cd\u0026\u0026(n\u003dc.dragStart[0]),Math.abs(c.dragStart[1]-i)\u003cd\u0026\u0026(i\u003dc.dragStart[1]),a\u003d(h-n)*(l[2]-l[0])/(r.viewBox[2]-r.viewBox[0]),s\u003d(p-i)*(l[3]-l[1])/(r.viewBox[3]-r.viewBox[1]),l[0]+\u003da,l[2]+\u003da,l[1]+\u003ds,l[3]+\u003ds,t.setRanges(l),c.panning\u003d!0,c.lastInputTime\u003dDate.now(),u(),t.cameraChanged(),t.handleAnnotations()):c.panning\u0026\u0026(c.panning\u003d!1,t.relayoutCallback())}c.lastPos[0]\u003dn,c.lastPos[1]\u003di}return c.mouseListener\u003dn(e,f),e.addEventListener(\"touchstart\",(function(t){var r\u003da(t.changedTouches[0],e);f(0,r[0],r[1]),f(1,r[0],r[1]),t.preventDefault()}),!!s\u0026\u0026{passive:!1}),e.addEventListener(\"touchmove\",(function(t){t.preventDefault();var r\u003da(t.changedTouches[0],e);f(1,r[0],r[1]),t.preventDefault()}),!!s\u0026\u0026{passive:!1}),e.addEventListener(\"touchend\",(function(t){f(0,c.lastPos[0],c.lastPos[1]),t.preventDefault()}),!!s\u0026\u0026{passive:!1}),c.wheelListener\u003di(e,(function(e,n){if(!t.scrollZoom)return!1;var i\u003dt.calcDataBox(),a\u003dr.viewBox,o\u003dc.lastPos[0],s\u003dc.lastPos[1],l\u003dMath.exp(5*n/(a[3]-a[1])),f\u003do/(a[2]-a[0])*(i[2]-i[0])+i[0],h\u003ds/(a[3]-a[1])*(i[3]-i[1])+i[1];return i[0]\u003d(i[0]-f)*l+f,i[2]\u003d(i[2]-f)*l+f,i[1]\u003d(i[1]-h)*l+h,i[3]\u003d(i[3]-h)*l+h,t.setRanges(i),c.lastInputTime\u003dDate.now(),u(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0}),!0),c}},{\"../cartesian/constants\":856,\"has-passive-events\":440,\"mouse-change\":466,\"mouse-event-offset\":467,\"mouse-wheel\":469}],889:[function(t,e,r){\"use strict\";var n\u003dt(\"../cartesian/axes\"),i\u003dt(\"../../lib/str2rgbarray\");function a(t){this.scene\u003dt,this.gl\u003dt.gl,this.pixelRatio\u003dt.pixelRatio,this.screenBox\u003d[0,0,1,1],this.viewBox\u003d[0,0,1,1],this.dataBox\u003d[-1,-1,1,1],this.borderLineEnable\u003d[!1,!1,!1,!1],this.borderLineWidth\u003d[1,1,1,1],this.borderLineColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks\u003d[[],[]],this.tickEnable\u003d[!0,!0,!1,!1],this.tickPad\u003d[15,15,15,15],this.tickAngle\u003d[0,0,0,0],this.tickColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength\u003d[0,0,0,0],this.tickMarkWidth\u003d[0,0,0,0],this.tickMarkColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels\u003d[\"x\",\"y\"],this.labelEnable\u003d[!0,!0,!1,!1],this.labelAngle\u003d[0,Math.PI/2,0,3*Math.PI/2],this.labelPad\u003d[15,15,15,15],this.labelSize\u003d[12,12],this.labelFont\u003d[\"sans-serif\",\"sans-serif\"],this.labelColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title\u003d\"\",this.titleEnable\u003d!0,this.titleCenter\u003d[0,0,0,0],this.titleAngle\u003d0,this.titleColor\u003d[0,0,0,1],this.titleFont\u003d\"sans-serif\",this.titleSize\u003d18,this.gridLineEnable\u003d[!0,!0],this.gridLineColor\u003d[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth\u003d[1,1],this.zeroLineEnable\u003d[!0,!0],this.zeroLineWidth\u003d[1,1],this.zeroLineColor\u003d[[0,0,0,1],[0,0,0,1]],this.borderColor\u003d[0,0,0,0],this.backgroundColor\u003d[0,0,0,0],this.static\u003dthis.scene.staticPlot}var o\u003da.prototype,s\u003d[\"xaxis\",\"yaxis\"];o.merge\u003dfunction(t){var e,r,n,a,o,l,c,u,f,h,p;for(this.titleEnable\u003d!1,this.backgroundColor\u003di(t.plot_bgcolor),h\u003d0;h\u003c2;++h){var d\u003d(e\u003ds[h]).charAt(0);for(n\u003d(r\u003dt[this.scene[e]._name]).title.text\u003d\u003d\u003dthis.scene.fullLayout._dfltTitle[d]?\"\":r.title.text,p\u003d0;p\u003c\u003d2;p+\u003d2)this.labelEnable[h+p]\u003d!1,this.labels[h+p]\u003dn,this.labelColor[h+p]\u003di(r.title.font.color),this.labelFont[h+p]\u003dr.title.font.family,this.labelSize[h+p]\u003dr.title.font.size,this.labelPad[h+p]\u003dthis.getLabelPad(e,r),this.tickEnable[h+p]\u003d!1,this.tickColor[h+p]\u003di((r.tickfont||{}).color),this.tickAngle[h+p]\u003d\"auto\"\u003d\u003d\u003dr.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[h+p]\u003dthis.getTickPad(r),this.tickMarkLength[h+p]\u003d0,this.tickMarkWidth[h+p]\u003dr.tickwidth||0,this.tickMarkColor[h+p]\u003di(r.tickcolor),this.borderLineEnable[h+p]\u003d!1,this.borderLineColor[h+p]\u003di(r.linecolor),this.borderLineWidth[h+p]\u003dr.linewidth||0;c\u003dthis.hasSharedAxis(r),o\u003dthis.hasAxisInDfltPos(e,r)\u0026\u0026!c,l\u003dthis.hasAxisInAltrPos(e,r)\u0026\u0026!c,a\u003dr.mirror||!1,u\u003dc?-1!\u003d\u003dString(a).indexOf(\"all\"):!!a,f\u003dc?\"allticks\"\u003d\u003d\u003da:-1!\u003d\u003dString(a).indexOf(\"ticks\"),o?this.labelEnable[h]\u003d!0:l\u0026\u0026(this.labelEnable[h+2]\u003d!0),o?this.tickEnable[h]\u003dr.showticklabels:l\u0026\u0026(this.tickEnable[h+2]\u003dr.showticklabels),(o||u)\u0026\u0026(this.borderLineEnable[h]\u003dr.showline),(l||u)\u0026\u0026(this.borderLineEnable[h+2]\u003dr.showline),(o||f)\u0026\u0026(this.tickMarkLength[h]\u003dthis.getTickMarkLength(r)),(l||f)\u0026\u0026(this.tickMarkLength[h+2]\u003dthis.getTickMarkLength(r)),this.gridLineEnable[h]\u003dr.showgrid,this.gridLineColor[h]\u003di(r.gridcolor),this.gridLineWidth[h]\u003dr.gridwidth,this.zeroLineEnable[h]\u003dr.zeroline,this.zeroLineColor[h]\u003di(r.zerolinecolor),this.zeroLineWidth[h]\u003dr.zerolinewidth}},o.hasSharedAxis\u003dfunction(t){var e\u003dthis.scene,r\u003de.fullLayout._subplots.gl2d;return 0!\u003d\u003dn.findSubplotsWithAxis(r,t).indexOf(e.id)},o.hasAxisInDfltPos\u003dfunction(t,e){var r\u003de.side;return\"xaxis\"\u003d\u003d\u003dt?\"bottom\"\u003d\u003d\u003dr:\"yaxis\"\u003d\u003d\u003dt?\"left\"\u003d\u003d\u003dr:void 0},o.hasAxisInAltrPos\u003dfunction(t,e){var r\u003de.side;return\"xaxis\"\u003d\u003d\u003dt?\"top\"\u003d\u003d\u003dr:\"yaxis\"\u003d\u003d\u003dt?\"right\"\u003d\u003d\u003dr:void 0},o.getLabelPad\u003dfunction(t,e){var r\u003de.title.font.size,n\u003de.showticklabels;return\"xaxis\"\u003d\u003d\u003dt?\"top\"\u003d\u003d\u003de.side?r*(1.5+(n?1:0))-10:r*(1.5+(n?.5:0))-10:\"yaxis\"\u003d\u003d\u003dt?\"right\"\u003d\u003d\u003de.side?10+r*(1.5+(n?1:.5)):10+r*(1.5+(n?.5:0)):void 0},o.getTickPad\u003dfunction(t){return\"outside\"\u003d\u003d\u003dt.ticks?10+t.ticklen:15},o.getTickMarkLength\u003dfunction(t){if(!t.ticks)return 0;var e\u003dt.ticklen;return\"inside\"\u003d\u003d\u003dt.ticks?-e:e},e.exports\u003dfunction(t){return new a(t)}},{\"../../lib/str2rgbarray\":823,\"../cartesian/axes\":849}],890:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plot_api/edit_types\").overrideAll,i\u003dt(\"./scene2d\"),a\u003dt(\"../layout_attributes\"),o\u003dt(\"../../constants/xmlns_namespaces\"),s\u003dt(\"../cartesian/constants\"),l\u003dt(\"../cartesian\"),c\u003dt(\"../../components/fx/layout_attributes\"),u\u003dt(\"../get_data\").getSubplotData;r.name\u003d\"gl2d\",r.attr\u003d[\"xaxis\",\"yaxis\"],r.idRoot\u003d[\"x\",\"y\"],r.idRegex\u003ds.idRegex,r.attrRegex\u003ds.attrRegex,r.attributes\u003dt(\"../cartesian/attributes\"),r.supplyLayoutDefaults\u003dfunction(t,e,r){e._has(\"cartesian\")||l.supplyLayoutDefaults(t,e,r)},r.layoutAttrOverrides\u003dn(l.layoutAttributes,\"plot\",\"from-root\"),r.baseLayoutAttrOverrides\u003dn({plot_bgcolor:a.plot_bgcolor,hoverlabel:c.hoverlabel},\"plot\",\"nested\"),r.plot\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003dt._fullData,n\u003de._subplots.gl2d,a\u003d0;a\u003cn.length;a++){var o\u003dn[a],s\u003de._plots[o],l\u003du(r,\"gl2d\",o),c\u003ds._scene2d;void 0\u003d\u003d\u003dc\u0026\u0026(c\u003dnew i({id:o,graphDiv:t,container:t.querySelector(\".gl-container\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),s._scene2d\u003dc),c.plot(l,t.calcdata,e,t.layout)}},r.clean\u003dfunction(t,e,r,n){for(var i\u003dn._subplots.gl2d||[],a\u003d0;a\u003ci.length;a++){var o\u003di[a],s\u003dn._plots[o];if(s._scene2d){var c\u003du(t,\"gl2d\",o);0\u003d\u003d\u003dc.length\u0026\u0026(s._scene2d.destroy(),delete n._plots[o])}}l.clean.apply(this,arguments)},r.drawFramework\u003dfunction(t){t._context.staticPlot||l.drawFramework(t)},r.toSVG\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._subplots.gl2d,n\u003d0;n\u003cr.length;n++){var i\u003de._plots[r[n]]._scene2d,a\u003di.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:o.svg,\"xlink:href\":a,x:0,y:0,width:\"100%\",height:\"100%\",preserveAspectRatio:\"none\"}),i.destroy()}},r.updateFx\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._subplots.gl2d,n\u003d0;n\u003cr.length;n++){e._plots[r[n]]._scene2d.updateFx(e.dragmode)}}},{\"../../components/fx/layout_attributes\":703,\"../../constants/xmlns_namespaces\":776,\"../../plot_api/edit_types\":831,\"../cartesian\":863,\"../cartesian/attributes\":847,\"../cartesian/constants\":856,\"../get_data\":887,\"../layout_attributes\":904,\"./scene2d\":891}],891:[function(t,e,r){\"use strict\";var n,i,a\u003dt(\"../../registry\"),o\u003dt(\"../../plots/cartesian/axes\"),s\u003dt(\"../../components/fx\"),l\u003dt(\"gl-plot2d\"),c\u003dt(\"gl-spikes2d\"),u\u003dt(\"gl-select-box\"),f\u003dt(\"webgl-context\"),h\u003dt(\"./convert\"),p\u003dt(\"./camera\"),d\u003dt(\"../../lib/show_no_webgl_msg\"),m\u003dt(\"../cartesian/constraints\"),g\u003dm.enforce,v\u003dm.clean,y\u003dt(\"../cartesian/autorange\").doAutoRange,x\u003dt(\"../../components/dragelement/helpers\"),b\u003dx.drawMode,_\u003dx.selectMode,w\u003d[\"xaxis\",\"yaxis\"],T\u003dt(\"../cartesian/constants\").SUBPLOT_PATTERN;function k(t,e){this.container\u003dt.container,this.graphDiv\u003dt.graphDiv,this.pixelRatio\u003dt.plotGlPixelRatio||window.devicePixelRatio,this.id\u003dt.id,this.staticPlot\u003d!!t.staticPlot,this.scrollZoom\u003dthis.graphDiv._context._scrollZoom.cartesian,this.fullData\u003dnull,this.updateRefs(e),this.makeFramework(),this.stopped||(this.glplotOptions\u003dh(this),this.glplotOptions.merge(e),this.glplot\u003dl(this.glplotOptions),this.camera\u003dp(this),this.traces\u003d{},this.spikes\u003dc(this.glplot),this.selectBox\u003du(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState\u003d0,this.pickResult\u003dnull,this.isMouseOver\u003d!0,this.stopped\u003d!1,this.redraw\u003dthis.draw.bind(this),this.redraw())}e.exports\u003dk;var M\u003dk.prototype;M.makeFramework\u003dfunction(){if(this.staticPlot){if(!(i||(n\u003ddocument.createElement(\"canvas\"),i\u003df({canvas:n,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\"Error creating static canvas/context for image server\");this.canvas\u003dn,this.gl\u003di}else{var t\u003dthis.container.querySelector(\".gl-canvas-focus\"),e\u003df({canvas:t,preserveDrawingBuffer:!0,premultipliedAlpha:!0});if(!e)return d(this),void(this.stopped\u003d!0);this.canvas\u003dt,this.gl\u003de}var r\u003dthis.canvas;r.style.width\u003d\"100%\",r.style.height\u003d\"100%\",r.style.position\u003d\"absolute\",r.style.top\u003d\"0px\",r.style.left\u003d\"0px\",r.style[\"pointer-events\"]\u003d\"none\",this.updateSize(r);var a\u003dthis.svgContainer\u003ddocument.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");a.style.position\u003d\"absolute\",a.style.top\u003da.style.left\u003d\"0px\",a.style.width\u003da.style.height\u003d\"100%\",a.style[\"z-index\"]\u003d20,a.style[\"pointer-events\"]\u003d\"none\";var o\u003dthis.mouseContainer\u003ddocument.createElement(\"div\");o.style.position\u003d\"absolute\",o.style[\"pointer-events\"]\u003d\"auto\",this.pickCanvas\u003dthis.container.querySelector(\".gl-canvas-pick\");var s\u003dthis.container;s.appendChild(a),s.appendChild(o);var l\u003dthis;o.addEventListener(\"mouseout\",(function(){l.isMouseOver\u003d!1,l.unhover()})),o.addEventListener(\"mouseover\",(function(){l.isMouseOver\u003d!0}))},M.toImage\u003dfunction(t){t||(t\u003d\"png\"),this.stopped\u003d!0,this.staticPlot\u0026\u0026this.container.appendChild(n),this.updateSize(this.canvas);var e\u003dthis.glplot.gl,r\u003de.drawingBufferWidth,i\u003de.drawingBufferHeight;e.clearColor(1,1,1,0),e.clear(e.COLOR_BUFFER_BIT|e.DEPTH_BUFFER_BIT),this.glplot.setDirty(),this.glplot.draw(),e.bindFramebuffer(e.FRAMEBUFFER,null);var a\u003dnew Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a);for(var o\u003d0,s\u003di-1;o\u003cs;++o,--s)for(var l\u003d0;l\u003cr;++l)for(var c\u003d0;c\u003c4;++c){var u\u003da[4*(r*o+l)+c];a[4*(r*o+l)+c]\u003da[4*(r*s+l)+c],a[4*(r*s+l)+c]\u003du}var f\u003ddocument.createElement(\"canvas\");f.width\u003dr,f.height\u003di;var h,p\u003df.getContext(\"2d\"),d\u003dp.createImageData(r,i);switch(d.data.set(a),p.putImageData(d,0,0),t){case\"jpeg\":h\u003df.toDataURL(\"image/jpeg\");break;case\"webp\":h\u003df.toDataURL(\"image/webp\");break;default:h\u003df.toDataURL(\"image/png\")}return this.staticPlot\u0026\u0026this.container.removeChild(n),h},M.updateSize\u003dfunction(t){t||(t\u003dthis.canvas);var e\u003dthis.pixelRatio,r\u003dthis.fullLayout,n\u003dr.width,i\u003dr.height,a\u003d0|Math.ceil(e*n),o\u003d0|Math.ceil(e*i);return t.width\u003d\u003d\u003da\u0026\u0026t.height\u003d\u003d\u003do||(t.width\u003da,t.height\u003do),t},M.computeTickMarks\u003dfunction(){this.xaxis.setScale(),this.yaxis.setScale();for(var t\u003d[o.calcTicks(this.xaxis),o.calcTicks(this.yaxis)],e\u003d0;e\u003c2;++e)for(var r\u003d0;r\u003ct[e].length;++r)t[e][r].text\u003dt[e][r].text+\"\";return t},M.updateRefs\u003dfunction(t){this.fullLayout\u003dt;var e\u003dthis.id.match(T),r\u003d\"xaxis\"+e[1],n\u003d\"yaxis\"+e[2];this.xaxis\u003dthis.fullLayout[r],this.yaxis\u003dthis.fullLayout[n]},M.relayoutCallback\u003dfunction(){var t\u003dthis.graphDiv,e\u003dthis.xaxis,r\u003dthis.yaxis,n\u003dt.layout,i\u003d{},o\u003di[e._name+\".range\"]\u003de.range.slice(),s\u003di[r._name+\".range\"]\u003dr.range.slice();i[e._name+\".autorange\"]\u003de.autorange,i[r._name+\".autorange\"]\u003dr.autorange,a.call(\"_storeDirectGUIEdit\",t.layout,t._fullLayout._preGUI,i);var l\u003dn[e._name];l.range\u003do,l.autorange\u003de.autorange;var c\u003dn[r._name];c.range\u003ds,c.autorange\u003dr.autorange,i.lastInputTime\u003dthis.camera.lastInputTime,t.emit(\"plotly_relayout\",i)},M.cameraChanged\u003dfunction(){var t\u003dthis.camera;this.glplot.setDataBox(this.calcDataBox());var e\u003dthis.computeTickMarks();(function(t,e){for(var r\u003d0;r\u003c2;++r){var n\u003dt[r],i\u003de[r];if(n.length!\u003d\u003di.length)return!0;for(var a\u003d0;a\u003cn.length;++a)if(n[a].x!\u003d\u003di[a].x)return!0}return!1})(e,this.glplotOptions.ticks)\u0026\u0026(this.glplotOptions.ticks\u003de,this.glplotOptions.dataBox\u003dt.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},M.handleAnnotations\u003dfunction(){for(var t\u003dthis.graphDiv,e\u003dthis.fullLayout.annotations,r\u003d0;r\u003ce.length;r++){var n\u003de[r];n.xref\u003d\u003d\u003dthis.xaxis._id\u0026\u0026n.yref\u003d\u003d\u003dthis.yaxis._id\u0026\u0026a.getComponentMethod(\"annotations\",\"drawOne\")(t,r)}},M.destroy\u003dfunction(){if(this.glplot){var t\u003dthis.traces;t\u0026\u0026Object.keys(t).map((function(e){t[e].dispose(),delete t[e]})),this.glplot.dispose(),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData\u003dnull,this.glplot\u003dnull,this.stopped\u003d!0,this.camera.mouseListener.enabled\u003d!1,this.mouseContainer.removeEventListener(\"wheel\",this.camera.wheelListener),this.camera\u003dnull}},M.plot\u003dfunction(t,e,r){var n\u003dthis.glplot;this.updateRefs(r),this.xaxis.clearCalc(),this.yaxis.clearCalc(),this.updateTraces(t,e),this.updateFx(r.dragmode);var i\u003dr.width,a\u003dr.height;this.updateSize(this.canvas);var o\u003dthis.glplotOptions;o.merge(r),o.screenBox\u003d[0,0,i,a];var s\u003d{_fullLayout:{_axisConstraintGroups:r._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis,_size:r._size}};v(s,this.xaxis),v(s,this.yaxis);var l,c,u\u003dr._size,f\u003dthis.xaxis.domain,h\u003dthis.yaxis.domain;for(o.viewBox\u003d[u.l+f[0]*u.w,u.b+h[0]*u.h,i-u.r-(1-f[1])*u.w,a-u.t-(1-h[1])*u.h],this.mouseContainer.style.width\u003du.w*(f[1]-f[0])+\"px\",this.mouseContainer.style.height\u003du.h*(h[1]-h[0])+\"px\",this.mouseContainer.height\u003du.h*(h[1]-h[0]),this.mouseContainer.style.left\u003du.l+f[0]*u.w+\"px\",this.mouseContainer.style.top\u003du.t+(1-h[1])*u.h+\"px\",c\u003d0;c\u003c2;++c)(l\u003dthis[w[c]])._length\u003do.viewBox[c+2]-o.viewBox[c],y(this.graphDiv,l),l.setScale();g(s),o.ticks\u003dthis.computeTickMarks(),o.dataBox\u003dthis.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},M.calcDataBox\u003dfunction(){var t\u003dthis.xaxis,e\u003dthis.yaxis,r\u003dt.range,n\u003de.range,i\u003dt.r2l,a\u003de.r2l;return[i(r[0]),a(n[0]),i(r[1]),a(n[1])]},M.setRanges\u003dfunction(t){var e\u003dthis.xaxis,r\u003dthis.yaxis,n\u003de.l2r,i\u003dr.l2r;e.range\u003d[n(t[0]),n(t[2])],r.range\u003d[i(t[1]),i(t[3])]},M.updateTraces\u003dfunction(t,e){var r,n,i,a\u003dObject.keys(this.traces);this.fullData\u003dt;t:for(r\u003d0;r\u003ca.length;r++){var o\u003da[r],s\u003dthis.traces[o];for(n\u003d0;n\u003ct.length;n++)if((i\u003dt[n]).uid\u003d\u003d\u003do\u0026\u0026i.type\u003d\u003d\u003ds.type)continue t;s.dispose(),delete this.traces[o]}for(r\u003d0;r\u003ct.length;r++){i\u003dt[r];var l\u003de[r],c\u003dthis.traces[i.uid];c?c.update(i,l):(c\u003di._module.plot(this,i,l),this.traces[i.uid]\u003dc)}this.glplot.objects.sort((function(t,e){return t._trace.index-e._trace.index}))},M.updateFx\u003dfunction(t){_(t)||b(t)?(this.pickCanvas.style[\"pointer-events\"]\u003d\"none\",this.mouseContainer.style[\"pointer-events\"]\u003d\"none\"):(this.pickCanvas.style[\"pointer-events\"]\u003d\"auto\",this.mouseContainer.style[\"pointer-events\"]\u003d\"auto\"),this.mouseContainer.style.cursor\u003d\"pan\"\u003d\u003d\u003dt?\"move\":\"zoom\"\u003d\u003d\u003dt?\"crosshair\":null},M.emitPointAction\u003dfunction(t,e){for(var r,n\u003dt.trace.uid,i\u003dt.pointIndex,a\u003d0;a\u003cthis.fullData.length;a++)this.fullData[a].uid\u003d\u003d\u003dn\u0026\u0026(r\u003dthis.fullData[a]);var o\u003d{x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:i,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};s.appendArrayPointValue(o,r,i),this.graphDiv.emit(e,{points:[o]})},M.draw\u003dfunction(){if(!this.stopped){requestAnimationFrame(this.redraw);var t\u003dthis.glplot,e\u003dthis.camera,r\u003de.mouseListener,n\u003d1\u003d\u003d\u003dthis.lastButtonState\u0026\u00260\u003d\u003d\u003dr.buttons,i\u003dthis.fullLayout;this.lastButtonState\u003dr.buttons,this.cameraChanged();var a,o\u003dr.x*t.pixelRatio,l\u003dthis.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled\u0026\u0026\"zoom\"\u003d\u003d\u003di.dragmode){this.selectBox.enabled\u003d!0;for(var c\u003dthis.selectBox.selectBox\u003d[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],u\u003d0;u\u003c2;u++)e.boxStart[u]\u003d\u003d\u003de.boxEnd[u]\u0026\u0026(c[u]\u003dt.dataBox[u],c[u+2]\u003dt.dataBox[u+2]);t.setDirty()}else if(!e.panning\u0026\u0026this.isMouseOver){this.selectBox.enabled\u003d!1;var f\u003di._size,h\u003dthis.xaxis.domain,p\u003dthis.yaxis.domain,d\u003d(a\u003dt.pick(o/t.pixelRatio+f.l+h[0]*f.w,l/t.pixelRatio-(f.t+(1-p[1])*f.h)))\u0026\u0026a.object._trace.handlePick(a);if(d\u0026\u0026n\u0026\u0026this.emitPointAction(d,\"plotly_click\"),a\u0026\u0026\"skip\"!\u003d\u003da.object._trace.hoverinfo\u0026\u0026i.hovermode\u0026\u0026d\u0026\u0026(!this.lastPickResult||this.lastPickResult.traceUid!\u003d\u003dd.trace.uid||this.lastPickResult.dataCoord[0]!\u003d\u003dd.dataCoord[0]||this.lastPickResult.dataCoord[1]!\u003d\u003dd.dataCoord[1])){var m\u003dd;this.lastPickResult\u003d{traceUid:d.trace?d.trace.uid:null,dataCoord:d.dataCoord.slice()},this.spikes.update({center:a.dataCoord}),m.screenCoord\u003d[((t.viewBox[2]-t.viewBox[0])*(a.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(a.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(d,\"plotly_hover\");var g\u003dthis.fullData[m.trace.index]||{},v\u003dm.pointIndex,y\u003ds.castHoverinfo(g,i,v);if(y\u0026\u0026\"all\"!\u003d\u003dy){var x\u003dy.split(\"+\");-1\u003d\u003d\u003dx.indexOf(\"x\")\u0026\u0026(m.traceCoord[0]\u003dvoid 0),-1\u003d\u003d\u003dx.indexOf(\"y\")\u0026\u0026(m.traceCoord[1]\u003dvoid 0),-1\u003d\u003d\u003dx.indexOf(\"z\")\u0026\u0026(m.traceCoord[2]\u003dvoid 0),-1\u003d\u003d\u003dx.indexOf(\"text\")\u0026\u0026(m.textLabel\u003dvoid 0),-1\u003d\u003d\u003dx.indexOf(\"name\")\u0026\u0026(m.name\u003dvoid 0)}s.loneHover({x:m.screenCoord[0],y:m.screenCoord[1],xLabel:this.hoverFormatter(\"xaxis\",m.traceCoord[0]),yLabel:this.hoverFormatter(\"yaxis\",m.traceCoord[1]),zLabel:m.traceCoord[2],text:m.textLabel,name:m.name,color:s.castHoverOption(g,v,\"bgcolor\")||m.color,borderColor:s.castHoverOption(g,v,\"bordercolor\"),fontFamily:s.castHoverOption(g,v,\"font.family\"),fontSize:s.castHoverOption(g,v,\"font.size\"),fontColor:s.castHoverOption(g,v,\"font.color\"),nameLength:s.castHoverOption(g,v,\"namelength\"),textAlign:s.castHoverOption(g,v,\"align\")},{container:this.svgContainer,gd:this.graphDiv})}}a||this.unhover(),t.draw()}},M.unhover\u003dfunction(){this.lastPickResult\u0026\u0026(this.spikes.update({}),this.lastPickResult\u003dnull,this.graphDiv.emit(\"plotly_unhover\"),s.loneUnhover(this.svgContainer))},M.hoverFormatter\u003dfunction(t,e){if(void 0!\u003d\u003de){var r\u003dthis[t];return o.tickText(r,r.c2l(e),\"hover\").text}}},{\"../../components/dragelement/helpers\":680,\"../../components/fx\":702,\"../../lib/show_no_webgl_msg\":821,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"../cartesian/autorange\":848,\"../cartesian/constants\":856,\"../cartesian/constraints\":857,\"./camera\":888,\"./convert\":889,\"gl-plot2d\":318,\"gl-select-box\":333,\"gl-spikes2d\":342,\"webgl-context\":625}],892:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plot_api/edit_types\").overrideAll,i\u003dt(\"../../components/fx/layout_attributes\"),a\u003dt(\"./scene\"),o\u003dt(\"../get_data\").getSubplotData,s\u003dt(\"../../lib\"),l\u003dt(\"../../constants/xmlns_namespaces\");r.name\u003d\"gl3d\",r.attr\u003d\"scene\",r.idRoot\u003d\"scene\",r.idRegex\u003dr.attrRegex\u003ds.counterRegex(\"scene\"),r.attributes\u003dt(\"./layout/attributes\"),r.layoutAttributes\u003dt(\"./layout/layout_attributes\"),r.baseLayoutAttrOverrides\u003dn({hoverlabel:i.hoverlabel},\"plot\",\"nested\"),r.supplyLayoutDefaults\u003dt(\"./layout/defaults\"),r.plot\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003dt._fullData,n\u003de._subplots.gl3d,i\u003d0;i\u003cn.length;i++){var s\u003dn[i],l\u003do(r,\"gl3d\",s),c\u003de[s],u\u003dc.camera,f\u003dc._scene;f||(f\u003dnew a({id:s,graphDiv:t,container:t.querySelector(\".gl-container\"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio,camera:u},e),c._scene\u003df),f.viewInitial||(f.viewInitial\u003d{up:{x:u.up.x,y:u.up.y,z:u.up.z},eye:{x:u.eye.x,y:u.eye.y,z:u.eye.z},center:{x:u.center.x,y:u.center.y,z:u.center.z}}),f.plot(l,e,t.layout)}},r.clean\u003dfunction(t,e,r,n){for(var i\u003dn._subplots.gl3d||[],a\u003d0;a\u003ci.length;a++){var o\u003di[a];!e[o]\u0026\u0026n[o]._scene\u0026\u0026(n[o]._scene.destroy(),n._infolayer\u0026\u0026n._infolayer.selectAll(\".annotation-\"+o).remove())}},r.toSVG\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._subplots.gl3d,n\u003de._size,i\u003d0;i\u003cr.length;i++){var a\u003de[r[i]],o\u003da.domain,s\u003da._scene,c\u003ds.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:l.svg,\"xlink:href\":c,x:n.l+n.w*o.x[0],y:n.t+n.h*(1-o.y[1]),width:n.w*(o.x[1]-o.x[0]),height:n.h*(o.y[1]-o.y[0]),preserveAspectRatio:\"none\"}),s.destroy()}},r.cleanId\u003dfunction(t){if(t.match(/^scene[0-9]*$/)){var e\u003dt.substr(5);return\"1\"\u003d\u003d\u003de\u0026\u0026(e\u003d\"\"),\"scene\"+e}},r.updateFx\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._subplots.gl3d,n\u003d0;n\u003cr.length;n++){e[r[n]]._scene.updateFx(e.dragmode,e.hovermode)}}},{\"../../components/fx/layout_attributes\":703,\"../../constants/xmlns_namespaces\":776,\"../../lib\":799,\"../../plot_api/edit_types\":831,\"../get_data\":887,\"./layout/attributes\":893,\"./layout/defaults\":897,\"./layout/layout_attributes\":898,\"./scene\":902}],893:[function(t,e,r){\"use strict\";e.exports\u003d{scene:{valType:\"subplotid\",dflt:\"scene\",editType:\"calc+clearAxisTypes\"}}},{}],894:[function(t,e,r){\"use strict\";var n\u003dt(\"../../../components/color\"),i\u003dt(\"../../cartesian/layout_attributes\"),a\u003dt(\"../../../lib/extend\").extendFlat,o\u003dt(\"../../../plot_api/edit_types\").overrideAll;e.exports\u003do({visible:i.visible,showspikes:{valType:\"boolean\",dflt:!0},spikesides:{valType:\"boolean\",dflt:!0},spikethickness:{valType:\"number\",min:0,dflt:2},spikecolor:{valType:\"color\",dflt:n.defaultLine},showbackground:{valType:\"boolean\",dflt:!1},backgroundcolor:{valType:\"color\",dflt:\"rgba(204, 204, 204, 0.5)\"},showaxeslabels:{valType:\"boolean\",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:{text:i.title.text,font:i.title.font},type:a({},i.type,{values:[\"-\",\"linear\",\"log\",\"date\",\"category\"]}),autotypenumbers:i.autotypenumbers,autorange:i.autorange,rangemode:i.rangemode,range:a({},i.range,{items:[{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}}],anim:!1}),tickmode:i.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickformat:i.tickformat,tickformatstops:i.tickformatstops,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:\"rgb(204, 204, 204)\"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth,_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}},\"plot\",\"from-root\")},{\"../../../components/color\":662,\"../../../lib/extend\":789,\"../../../plot_api/edit_types\":831,\"../../cartesian/layout_attributes\":864}],895:[function(t,e,r){\"use strict\";var n\u003dt(\"tinycolor2\").mix,i\u003dt(\"../../../lib\"),a\u003dt(\"../../../plot_api/plot_template\"),o\u003dt(\"./axis_attributes\"),s\u003dt(\"../../cartesian/type_defaults\"),l\u003dt(\"../../cartesian/axis_defaults\"),c\u003d[\"xaxis\",\"yaxis\",\"zaxis\"];e.exports\u003dfunction(t,e,r){var u,f;function h(t,e){return i.coerce(u,f,o,t,e)}for(var p\u003d0;p\u003cc.length;p++){var d\u003dc[p];u\u003dt[d]||{},(f\u003da.newContainer(e,d))._id\u003dd[0]+r.scene,f._name\u003dd,s(u,f,h,r),l(u,f,h,{font:r.font,letter:d[0],data:r.data,showGrid:!0,noTickson:!0,noTicklabelmode:!0,noTicklabelposition:!0,noTicklabeloverflow:!0,bgColor:r.bgColor,calendar:r.calendar},r.fullLayout),h(\"gridcolor\",n(f.color,r.bgColor,13600/187).toRgbString()),h(\"title.text\",d[0]),f.setScale\u003di.noop,h(\"showspikes\")\u0026\u0026(h(\"spikesides\"),h(\"spikethickness\"),h(\"spikecolor\",f.color)),h(\"showaxeslabels\"),h(\"showbackground\")\u0026\u0026h(\"backgroundcolor\")}}},{\"../../../lib\":799,\"../../../plot_api/plot_template\":838,\"../../cartesian/axis_defaults\":851,\"../../cartesian/type_defaults\":875,\"./axis_attributes\":894,tinycolor2:594}],896:[function(t,e,r){\"use strict\";var n\u003dt(\"../../../lib/str2rgbarray\"),i\u003dt(\"../../../lib\"),a\u003d[\"xaxis\",\"yaxis\",\"zaxis\"];function o(){this.bounds\u003d[[-10,-10,-10],[10,10,10]],this.ticks\u003d[[],[],[]],this.tickEnable\u003d[!0,!0,!0],this.tickFont\u003d[\"sans-serif\",\"sans-serif\",\"sans-serif\"],this.tickSize\u003d[12,12,12],this.tickAngle\u003d[0,0,0],this.tickColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad\u003d[18,18,18],this.labels\u003d[\"x\",\"y\",\"z\"],this.labelEnable\u003d[!0,!0,!0],this.labelFont\u003d[\"Open Sans\",\"Open Sans\",\"Open Sans\"],this.labelSize\u003d[20,20,20],this.labelColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad\u003d[30,30,30],this.lineEnable\u003d[!0,!0,!0],this.lineMirror\u003d[!1,!1,!1],this.lineWidth\u003d[1,1,1],this.lineColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable\u003d[!0,!0,!0],this.lineTickMirror\u003d[!1,!1,!1],this.lineTickLength\u003d[10,10,10],this.lineTickWidth\u003d[1,1,1],this.lineTickColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable\u003d[!0,!0,!0],this.gridWidth\u003d[1,1,1],this.gridColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable\u003d[!0,!0,!0],this.zeroLineColor\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth\u003d[2,2,2],this.backgroundEnable\u003d[!0,!0,!0],this.backgroundColor\u003d[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad\u003dthis.tickPad.slice(),this._defaultLabelPad\u003dthis.labelPad.slice(),this._defaultLineTickLength\u003dthis.lineTickLength.slice()}o.prototype.merge\u003dfunction(t,e){for(var r\u003d0;r\u003c3;++r){var o\u003de[a[r]];o.visible?(this.labels[r]\u003dt._meta?i.templateString(o.title.text,t._meta):o.title.text,\"font\"in o.title\u0026\u0026(o.title.font.color\u0026\u0026(this.labelColor[r]\u003dn(o.title.font.color)),o.title.font.family\u0026\u0026(this.labelFont[r]\u003do.title.font.family),o.title.font.size\u0026\u0026(this.labelSize[r]\u003do.title.font.size)),\"showline\"in o\u0026\u0026(this.lineEnable[r]\u003do.showline),\"linecolor\"in o\u0026\u0026(this.lineColor[r]\u003dn(o.linecolor)),\"linewidth\"in o\u0026\u0026(this.lineWidth[r]\u003do.linewidth),\"showgrid\"in o\u0026\u0026(this.gridEnable[r]\u003do.showgrid),\"gridcolor\"in o\u0026\u0026(this.gridColor[r]\u003dn(o.gridcolor)),\"gridwidth\"in o\u0026\u0026(this.gridWidth[r]\u003do.gridwidth),\"log\"\u003d\u003d\u003do.type?this.zeroEnable[r]\u003d!1:\"zeroline\"in o\u0026\u0026(this.zeroEnable[r]\u003do.zeroline),\"zerolinecolor\"in o\u0026\u0026(this.zeroLineColor[r]\u003dn(o.zerolinecolor)),\"zerolinewidth\"in o\u0026\u0026(this.zeroLineWidth[r]\u003do.zerolinewidth),\"ticks\"in o\u0026\u0026o.ticks?this.lineTickEnable[r]\u003d!0:this.lineTickEnable[r]\u003d!1,\"ticklen\"in o\u0026\u0026(this.lineTickLength[r]\u003dthis._defaultLineTickLength[r]\u003do.ticklen),\"tickcolor\"in o\u0026\u0026(this.lineTickColor[r]\u003dn(o.tickcolor)),\"tickwidth\"in o\u0026\u0026(this.lineTickWidth[r]\u003do.tickwidth),\"tickangle\"in o\u0026\u0026(this.tickAngle[r]\u003d\"auto\"\u003d\u003d\u003do.tickangle?-3600:Math.PI*-o.tickangle/180),\"showticklabels\"in o\u0026\u0026(this.tickEnable[r]\u003do.showticklabels),\"tickfont\"in o\u0026\u0026(o.tickfont.color\u0026\u0026(this.tickColor[r]\u003dn(o.tickfont.color)),o.tickfont.family\u0026\u0026(this.tickFont[r]\u003do.tickfont.family),o.tickfont.size\u0026\u0026(this.tickSize[r]\u003do.tickfont.size)),\"mirror\"in o?-1!\u003d\u003d[\"ticks\",\"all\",\"allticks\"].indexOf(o.mirror)?(this.lineTickMirror[r]\u003d!0,this.lineMirror[r]\u003d!0):!0\u003d\u003d\u003do.mirror?(this.lineTickMirror[r]\u003d!1,this.lineMirror[r]\u003d!0):(this.lineTickMirror[r]\u003d!1,this.lineMirror[r]\u003d!1):this.lineMirror[r]\u003d!1,\"showbackground\"in o\u0026\u0026!1!\u003d\u003do.showbackground?(this.backgroundEnable[r]\u003d!0,this.backgroundColor[r]\u003dn(o.backgroundcolor)):this.backgroundEnable[r]\u003d!1):(this.tickEnable[r]\u003d!1,this.labelEnable[r]\u003d!1,this.lineEnable[r]\u003d!1,this.lineTickEnable[r]\u003d!1,this.gridEnable[r]\u003d!1,this.zeroEnable[r]\u003d!1,this.backgroundEnable[r]\u003d!1)}},e.exports\u003dfunction(t,e){var r\u003dnew o;return r.merge(t,e),r}},{\"../../../lib\":799,\"../../../lib/str2rgbarray\":823}],897:[function(t,e,r){\"use strict\";var n\u003dt(\"../../../lib\"),i\u003dt(\"../../../components/color\"),a\u003dt(\"../../../registry\"),o\u003dt(\"../../subplot_defaults\"),s\u003dt(\"./axis_defaults\"),l\u003dt(\"./layout_attributes\"),c\u003dt(\"../../get_data\").getSubplotData;function u(t,e,r,n){for(var o\u003dr(\"bgcolor\"),l\u003di.combine(o,n.paper_bgcolor),u\u003d[\"up\",\"center\",\"eye\"],f\u003d0;f\u003cu.length;f++)r(\"camera.\"+u[f]+\".x\"),r(\"camera.\"+u[f]+\".y\"),r(\"camera.\"+u[f]+\".z\");r(\"camera.projection.type\");var h\u003d!!r(\"aspectratio.x\")\u0026\u0026!!r(\"aspectratio.y\")\u0026\u0026!!r(\"aspectratio.z\"),p\u003dr(\"aspectmode\",h?\"manual\":\"auto\");h||(t.aspectratio\u003de.aspectratio\u003d{x:1,y:1,z:1},\"manual\"\u003d\u003d\u003dp\u0026\u0026(e.aspectmode\u003d\"auto\"),t.aspectmode\u003de.aspectmode);var d\u003dc(n.fullData,\"gl3d\",n.id);s(t,e,{font:n.font,scene:n.id,data:d,bgColor:l,calendar:n.calendar,autotypenumbersDflt:n.autotypenumbersDflt,fullLayout:n.fullLayout}),a.getComponentMethod(\"annotations3d\",\"handleDefaults\")(t,e,n);var m\u003dn.getDfltFromLayout(\"dragmode\");if(!1!\u003d\u003dm\u0026\u0026!m)if(m\u003d\"orbit\",t.camera\u0026\u0026t.camera.up){var g\u003dt.camera.up.x,v\u003dt.camera.up.y,y\u003dt.camera.up.z;0!\u003d\u003dy\u0026\u0026(g\u0026\u0026v\u0026\u0026y?y/Math.sqrt(g*g+v*v+y*y)\u003e.999\u0026\u0026(m\u003d\"turntable\"):m\u003d\"turntable\")}else m\u003d\"turntable\";r(\"dragmode\",m),r(\"hovermode\",n.getDfltFromLayout(\"hovermode\"))}e.exports\u003dfunction(t,e,r){var i\u003de._basePlotModules.length\u003e1;o(t,e,r,{type:\"gl3d\",attributes:l,handleDefaults:u,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:function(e){if(!i)return n.validate(t[e],l[e])?t[e]:void 0},autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},{\"../../../components/color\":662,\"../../../lib\":799,\"../../../registry\":927,\"../../get_data\":887,\"../../subplot_defaults\":921,\"./axis_defaults\":895,\"./layout_attributes\":898}],898:[function(t,e,r){\"use strict\";var n\u003dt(\"./axis_attributes\"),i\u003dt(\"../../domain\").attributes,a\u003dt(\"../../../lib/extend\").extendFlat,o\u003dt(\"../../../lib\").counterRegex;function s(t,e,r){return{x:{valType:\"number\",dflt:t,editType:\"camera\"},y:{valType:\"number\",dflt:e,editType:\"camera\"},z:{valType:\"number\",dflt:r,editType:\"camera\"},editType:\"camera\"}}e.exports\u003d{_arrayAttrRegexps:[o(\"scene\",\".annotations\",!0)],bgcolor:{valType:\"color\",dflt:\"rgba(0,0,0,0)\",editType:\"plot\"},camera:{up:a(s(0,0,1),{}),center:a(s(0,0,0),{}),eye:a(s(1.25,1.25,1.25),{}),projection:{type:{valType:\"enumerated\",values:[\"perspective\",\"orthographic\"],dflt:\"perspective\",editType:\"calc\"},editType:\"calc\"},editType:\"camera\"},domain:i({name:\"scene\",editType:\"plot\"}),aspectmode:{valType:\"enumerated\",values:[\"auto\",\"cube\",\"data\",\"manual\"],dflt:\"auto\",editType:\"plot\",impliedEdits:{\"aspectratio.x\":void 0,\"aspectratio.y\":void 0,\"aspectratio.z\":void 0}},aspectratio:{x:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},y:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},z:{valType:\"number\",min:0,editType:\"plot\",impliedEdits:{\"^aspectmode\":\"manual\"}},editType:\"plot\",impliedEdits:{aspectmode:\"manual\"}},xaxis:n,yaxis:n,zaxis:n,dragmode:{valType:\"enumerated\",values:[\"orbit\",\"turntable\",\"zoom\",\"pan\",!1],editType:\"plot\"},hovermode:{valType:\"enumerated\",values:[\"closest\",!1],dflt:\"closest\",editType:\"modebar\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"plot\",_deprecated:{cameraposition:{valType:\"info_array\",editType:\"camera\"}}}},{\"../../../lib\":799,\"../../../lib/extend\":789,\"../../domain\":877,\"./axis_attributes\":894}],899:[function(t,e,r){\"use strict\";var n\u003dt(\"../../../lib/str2rgbarray\"),i\u003d[\"xaxis\",\"yaxis\",\"zaxis\"];function a(){this.enabled\u003d[!0,!0,!0],this.colors\u003d[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides\u003d[!0,!0,!0],this.lineWidth\u003d[1,1,1]}a.prototype.merge\u003dfunction(t){for(var e\u003d0;e\u003c3;++e){var r\u003dt[i[e]];r.visible?(this.enabled[e]\u003dr.showspikes,this.colors[e]\u003dn(r.spikecolor),this.drawSides[e]\u003dr.spikesides,this.lineWidth[e]\u003dr.spikethickness):(this.enabled[e]\u003d!1,this.drawSides[e]\u003d!1)}},e.exports\u003dfunction(t){var e\u003dnew a;return e.merge(t),e}},{\"../../../lib/str2rgbarray\":823}],900:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003dt.axesOptions,r\u003dt.glplot.axesPixels,s\u003dt.fullSceneLayout,l\u003d[[],[],[]],c\u003d0;c\u003c3;++c){var u\u003ds[a[c]];if(u._length\u003d(r[c].hi-r[c].lo)*r[c].pixelsPerDataUnit/t.dataScale[c],Math.abs(u._length)\u003d\u003d\u003d1/0||isNaN(u._length))l[c]\u003d[];else{u._input_range\u003du.range.slice(),u.range[0]\u003dr[c].lo/t.dataScale[c],u.range[1]\u003dr[c].hi/t.dataScale[c],u._m\u003d1/(t.dataScale[c]*r[c].pixelsPerDataUnit),u.range[0]\u003d\u003d\u003du.range[1]\u0026\u0026(u.range[0]-\u003d1,u.range[1]+\u003d1);var f\u003du.tickmode;if(\"auto\"\u003d\u003d\u003du.tickmode){u.tickmode\u003d\"linear\";var h\u003du.nticks||i.constrain(u._length/40,4,9);n.autoTicks(u,Math.abs(u.range[1]-u.range[0])/h)}for(var p\u003dn.calcTicks(u,{msUTC:!0}),d\u003d0;d\u003cp.length;++d)p[d].x\u003dp[d].x*t.dataScale[c],\"date\"\u003d\u003d\u003du.type\u0026\u0026(p[d].text\u003dp[d].text.replace(/\\\u003cbr\\\u003e/g,\" \"));l[c]\u003dp,u.tickmode\u003df}}e.ticks\u003dl;for(c\u003d0;c\u003c3;++c){o[c]\u003d.5*(t.glplot.bounds[0][c]+t.glplot.bounds[1][c]);for(d\u003d0;d\u003c2;++d)e.bounds[d][c]\u003dt.glplot.bounds[d][c]}t.contourLevels\u003dfunction(t){for(var e\u003dnew Array(3),r\u003d0;r\u003c3;++r){for(var n\u003dt[r],i\u003dnew Array(n.length),a\u003d0;a\u003cn.length;++a)i[a]\u003dn[a].x;e[r]\u003di}return e}(l)};var n\u003dt(\"../../cartesian/axes\"),i\u003dt(\"../../../lib\"),a\u003d[\"xaxis\",\"yaxis\",\"zaxis\"],o\u003d[0,0,0]},{\"../../../lib\":799,\"../../cartesian/axes\":849}],901:[function(t,e,r){\"use strict\";function n(t,e){var r,n,i\u003d[0,0,0,0];for(r\u003d0;r\u003c4;++r)for(n\u003d0;n\u003c4;++n)i[n]+\u003dt[4*r+n]*e[r];return i}e.exports\u003dfunction(t,e){return n(t.projection,n(t.view,n(t.model,[e[0],e[1],e[2],1])))}},{}],902:[function(t,e,r){\"use strict\";var n,i,a\u003dt(\"gl-plot3d\"),o\u003da.createCamera,s\u003da.createScene,l\u003dt(\"webgl-context\"),c\u003dt(\"has-passive-events\"),u\u003dt(\"../../registry\"),f\u003dt(\"../../lib\"),h\u003df.preserveDrawingBuffer(),p\u003dt(\"../../plots/cartesian/axes\"),d\u003dt(\"../../components/fx\"),m\u003dt(\"../../lib/str2rgbarray\"),g\u003dt(\"../../lib/show_no_webgl_msg\"),v\u003dt(\"./project\"),y\u003dt(\"./layout/convert\"),x\u003dt(\"./layout/spikes\"),b\u003dt(\"./layout/tick_marks\");function _(t,e){var r\u003ddocument.createElement(\"div\"),n\u003dt.container;this.graphDiv\u003dt.graphDiv;var i\u003ddocument.createElementNS(\"http://www.w3.org/2000/svg\",\"svg\");i.style.position\u003d\"absolute\",i.style.top\u003di.style.left\u003d\"0px\",i.style.width\u003di.style.height\u003d\"100%\",i.style[\"z-index\"]\u003d20,i.style[\"pointer-events\"]\u003d\"none\",r.appendChild(i),this.svgContainer\u003di,r.id\u003dt.id,r.style.position\u003d\"absolute\",r.style.top\u003dr.style.left\u003d\"0px\",r.style.width\u003dr.style.height\u003d\"100%\",n.appendChild(r),this.fullLayout\u003de,this.id\u003dt.id||\"scene\",this.fullSceneLayout\u003de[this.id],this.plotArgs\u003d[[],{},{}],this.axesOptions\u003dy(e,e[this.id]),this.spikeOptions\u003dx(e[this.id]),this.container\u003dr,this.staticMode\u003d!!t.staticPlot,this.pixelRatio\u003dthis.pixelRatio||t.plotGlPixelRatio||2,this.dataScale\u003d[1,1,1],this.contourLevels\u003d[[],[],[]],this.convertAnnotations\u003du.getComponentMethod(\"annotations3d\",\"convert\"),this.drawAnnotations\u003du.getComponentMethod(\"annotations3d\",\"draw\"),this.initializeGLPlot()}var w\u003d_.prototype;w.prepareOptions\u003dfunction(){var t\u003d{canvas:this.canvas,gl:this.gl,glOptions:{preserveDrawingBuffer:h,premultipliedAlpha:!0,antialias:!0},container:this.container,axes:this.axesOptions,spikes:this.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1,cameraObject:this.camera,pixelRatio:this.pixelRatio};if(this.staticMode){if(!(i||(n\u003ddocument.createElement(\"canvas\"),i\u003dl({canvas:n,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error(\"error creating static canvas/context for image server\");t.gl\u003di,t.canvas\u003dn}return t};var T\u003d!0;w.tryCreatePlot\u003dfunction(){var t\u003dthis.prepareOptions(),e\u003d!0;try{this.glplot\u003ds(t)}catch(r){if(this.staticMode||!T||h)e\u003d!1;else{f.warn([\"webgl setup failed possibly due to\",\"false preserveDrawingBuffer config.\",\"The mobile/tablet device may not be detected by is-mobile module.\",\"Enabling preserveDrawingBuffer in second attempt to create webgl scene...\"].join(\" \"));try{h\u003dt.glOptions.preserveDrawingBuffer\u003d!0,this.glplot\u003ds(t)}catch(r){h\u003dt.glOptions.preserveDrawingBuffer\u003d!1,e\u003d!1}}}return T\u003d!1,e},w.initializeGLCamera\u003dfunction(){var t\u003dthis.fullSceneLayout.camera,e\u003d\"orthographic\"\u003d\u003d\u003dt.projection.type;this.camera\u003do(this.container,{center:[t.center.x,t.center.y,t.center.z],eye:[t.eye.x,t.eye.y,t.eye.z],up:[t.up.x,t.up.y,t.up.z],_ortho:e,zoomMin:.01,zoomMax:100,mode:\"orbit\"})},w.initializeGLPlot\u003dfunction(){var t\u003dthis;if(t.initializeGLCamera(),!t.tryCreatePlot())return g(t);t.traces\u003d{},t.make4thDimension();var e\u003dt.graphDiv,r\u003de.layout,n\u003dfunction(){var e\u003d{};return t.isCameraChanged(r)\u0026\u0026(e[t.id+\".camera\"]\u003dt.getCamera()),t.isAspectChanged(r)\u0026\u0026(e[t.id+\".aspectratio\"]\u003dt.glplot.getAspectratio(),\"manual\"!\u003d\u003dr[t.id].aspectmode\u0026\u0026(t.fullSceneLayout.aspectmode\u003dr[t.id].aspectmode\u003de[t.id+\".aspectmode\"]\u003d\"manual\")),e},i\u003dfunction(t){if(!1!\u003d\u003dt.fullSceneLayout.dragmode){var e\u003dn();t.saveLayout(r),t.graphDiv.emit(\"plotly_relayout\",e)}};return t.glplot.canvas\u0026\u0026(t.glplot.canvas.addEventListener(\"mouseup\",(function(){i(t)})),t.glplot.canvas.addEventListener(\"wheel\",(function(r){if(e._context._scrollZoom.gl3d){if(t.camera._ortho){var n\u003dr.deltaX\u003er.deltaY?1.1:1/1.1,a\u003dt.glplot.getAspectratio();t.glplot.setAspectratio({x:n*a.x,y:n*a.y,z:n*a.z})}i(t)}}),!!c\u0026\u0026{passive:!1}),t.glplot.canvas.addEventListener(\"mousemove\",(function(){if(!1!\u003d\u003dt.fullSceneLayout.dragmode\u0026\u00260!\u003d\u003dt.camera.mouseListener.buttons){var e\u003dn();t.graphDiv.emit(\"plotly_relayouting\",e)}})),t.staticMode||t.glplot.canvas.addEventListener(\"webglcontextlost\",(function(r){e\u0026\u0026e.emit\u0026\u0026e.emit(\"plotly_webglcontextlost\",{event:r,layer:t.id})}),!1)),t.glplot.oncontextloss\u003dfunction(){t.recoverContext()},t.glplot.onrender\u003dfunction(){t.render()},!0},w.render\u003dfunction(){var t,e\u003dthis,r\u003de.graphDiv,n\u003de.svgContainer,i\u003de.container.getBoundingClientRect();r._fullLayout._calcInverseTransform(r);var a\u003dr._fullLayout._invScaleX,o\u003dr._fullLayout._invScaleY,s\u003di.width*a,l\u003di.height*o;n.setAttributeNS(null,\"viewBox\",\"0 0 \"+s+\" \"+l),n.setAttributeNS(null,\"width\",s),n.setAttributeNS(null,\"height\",l),b(e),e.glplot.axes.update(e.axesOptions);for(var c,u\u003dObject.keys(e.traces),h\u003dnull,m\u003de.glplot.selection,g\u003d0;g\u003cu.length;++g)\"skip\"!\u003d\u003d(t\u003de.traces[u[g]]).data.hoverinfo\u0026\u0026t.handlePick(m)\u0026\u0026(h\u003dt),t.setContourLevels\u0026\u0026t.setContourLevels();function y(t,r,n){var i\u003de.fullSceneLayout[t+\"axis\"];return\"log\"!\u003d\u003di.type\u0026\u0026(r\u003di.d2l(r)),p.hoverLabelText(i,r,n)}if(null!\u003d\u003dh){var x\u003dv(e.glplot.cameraParams,m.dataCoordinate);t\u003dh.data;var _,w\u003dr._fullData[t.index],T\u003dm.index,k\u003d{xLabel:y(\"x\",m.traceCoordinate[0],t.xhoverformat),yLabel:y(\"y\",m.traceCoordinate[1],t.yhoverformat),zLabel:y(\"z\",m.traceCoordinate[2],t.zhoverformat)},M\u003dd.castHoverinfo(w,e.fullLayout,T),A\u003d(M||\"\").split(\"+\"),S\u003dM\u0026\u0026\"all\"\u003d\u003d\u003dM;w.hovertemplate||S||(-1\u003d\u003d\u003dA.indexOf(\"x\")\u0026\u0026(k.xLabel\u003dvoid 0),-1\u003d\u003d\u003dA.indexOf(\"y\")\u0026\u0026(k.yLabel\u003dvoid 0),-1\u003d\u003d\u003dA.indexOf(\"z\")\u0026\u0026(k.zLabel\u003dvoid 0),-1\u003d\u003d\u003dA.indexOf(\"text\")\u0026\u0026(m.textLabel\u003dvoid 0),-1\u003d\u003d\u003dA.indexOf(\"name\")\u0026\u0026(h.name\u003dvoid 0));var E\u003d[];\"cone\"\u003d\u003d\u003dt.type||\"streamtube\"\u003d\u003d\u003dt.type?(k.uLabel\u003dy(\"x\",m.traceCoordinate[3],t.uhoverformat),(S||-1!\u003d\u003dA.indexOf(\"u\"))\u0026\u0026E.push(\"u: \"+k.uLabel),k.vLabel\u003dy(\"y\",m.traceCoordinate[4],t.vhoverformat),(S||-1!\u003d\u003dA.indexOf(\"v\"))\u0026\u0026E.push(\"v: \"+k.vLabel),k.wLabel\u003dy(\"z\",m.traceCoordinate[5],t.whoverformat),(S||-1!\u003d\u003dA.indexOf(\"w\"))\u0026\u0026E.push(\"w: \"+k.wLabel),k.normLabel\u003dm.traceCoordinate[6].toPrecision(3),(S||-1!\u003d\u003dA.indexOf(\"norm\"))\u0026\u0026E.push(\"norm: \"+k.normLabel),\"streamtube\"\u003d\u003d\u003dt.type\u0026\u0026(k.divergenceLabel\u003dm.traceCoordinate[7].toPrecision(3),(S||-1!\u003d\u003dA.indexOf(\"divergence\"))\u0026\u0026E.push(\"divergence: \"+k.divergenceLabel)),m.textLabel\u0026\u0026E.push(m.textLabel),_\u003dE.join(\"\u003cbr\u003e\")):\"isosurface\"\u003d\u003d\u003dt.type||\"volume\"\u003d\u003d\u003dt.type?(k.valueLabel\u003dp.hoverLabelText(e._mockAxis,e._mockAxis.d2l(m.traceCoordinate[3]),t.valuehoverformat),E.push(\"value: \"+k.valueLabel),m.textLabel\u0026\u0026E.push(m.textLabel),_\u003dE.join(\"\u003cbr\u003e\")):_\u003dm.textLabel;var L\u003d{x:m.traceCoordinate[0],y:m.traceCoordinate[1],z:m.traceCoordinate[2],data:w._input,fullData:w,curveNumber:w.index,pointNumber:T};d.appendArrayPointValue(L,w,T),t._module.eventData\u0026\u0026(L\u003dw._module.eventData(L,m,w,{},T));var C\u003d{points:[L]};e.fullSceneLayout.hovermode\u0026\u0026d.loneHover({trace:w,x:(.5+.5*x[0]/x[3])*s,y:(.5-.5*x[1]/x[3])*l,xLabel:k.xLabel,yLabel:k.yLabel,zLabel:k.zLabel,text:_,name:h.name,color:d.castHoverOption(w,T,\"bgcolor\")||h.color,borderColor:d.castHoverOption(w,T,\"bordercolor\"),fontFamily:d.castHoverOption(w,T,\"font.family\"),fontSize:d.castHoverOption(w,T,\"font.size\"),fontColor:d.castHoverOption(w,T,\"font.color\"),nameLength:d.castHoverOption(w,T,\"namelength\"),textAlign:d.castHoverOption(w,T,\"align\"),hovertemplate:f.castOption(w,T,\"hovertemplate\"),hovertemplateLabels:f.extendFlat({},L,k),eventData:[L]},{container:n,gd:r}),m.buttons\u0026\u0026m.distance\u003c5?r.emit(\"plotly_click\",C):r.emit(\"plotly_hover\",C),c\u003dC}else d.loneUnhover(n),r.emit(\"plotly_unhover\",c);e.drawAnnotations(e)},w.recoverContext\u003dfunction(){var t\u003dthis;t.glplot.dispose();var e\u003dfunction(){t.glplot.gl.isContextLost()?requestAnimationFrame(e):t.initializeGLPlot()?t.plot.apply(t,t.plotArgs):f.error(\"Catastrophic and unrecoverable WebGL error. Context lost.\")};requestAnimationFrame(e)};var k\u003d[\"xaxis\",\"yaxis\",\"zaxis\"];function M(t,e,r){for(var n\u003dt.fullSceneLayout,i\u003d0;i\u003c3;i++){var a\u003dk[i],o\u003da.charAt(0),s\u003dn[a],l\u003de[o],c\u003de[o+\"calendar\"],u\u003de[\"_\"+o+\"length\"];if(f.isArrayOrTypedArray(l))for(var h,p\u003d0;p\u003c(u||l.length);p++)if(f.isArrayOrTypedArray(l[p]))for(var d\u003d0;d\u003cl[p].length;++d)h\u003ds.d2l(l[p][d],0,c),!isNaN(h)\u0026\u0026isFinite(h)\u0026\u0026(r[0][i]\u003dMath.min(r[0][i],h),r[1][i]\u003dMath.max(r[1][i],h));else h\u003ds.d2l(l[p],0,c),!isNaN(h)\u0026\u0026isFinite(h)\u0026\u0026(r[0][i]\u003dMath.min(r[0][i],h),r[1][i]\u003dMath.max(r[1][i],h));else r[0][i]\u003dMath.min(r[0][i],0),r[1][i]\u003dMath.max(r[1][i],u-1)}}w.plot\u003dfunction(t,e,r){if(this.plotArgs\u003d[t,e,r],!this.glplot.contextLost){var n,i,a,o,s,l,c\u003de[this.id],u\u003dr[this.id];this.fullLayout\u003de,this.fullSceneLayout\u003dc,this.axesOptions.merge(e,c),this.spikeOptions.merge(c),this.setViewport(c),this.updateFx(c.dragmode,c.hovermode),this.camera.enableWheel\u003dthis.graphDiv._context._scrollZoom.gl3d,this.glplot.setClearColor(m(c.bgcolor)),this.setConvert(s),t?Array.isArray(t)||(t\u003d[t]):t\u003d[];var f\u003d[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(a\u003d0;a\u003ct.length;++a)!0\u003d\u003d\u003d(n\u003dt[a]).visible\u0026\u00260!\u003d\u003dn._length\u0026\u0026M(this,n,f);!function(t,e){for(var r\u003dt.fullSceneLayout,n\u003dr.annotations||[],i\u003d0;i\u003c3;i++)for(var a\u003dk[i],o\u003da.charAt(0),s\u003dr[a],l\u003d0;l\u003cn.length;l++){var c\u003dn[l];if(c.visible){var u\u003ds.r2l(c[o]);!isNaN(u)\u0026\u0026isFinite(u)\u0026\u0026(e[0][i]\u003dMath.min(e[0][i],u),e[1][i]\u003dMath.max(e[1][i],u))}}}(this,f);var h\u003d[1,1,1];for(o\u003d0;o\u003c3;++o)f[1][o]\u003d\u003d\u003df[0][o]?h[o]\u003d1:h[o]\u003d1/(f[1][o]-f[0][o]);for(this.dataScale\u003dh,this.convertAnnotations(this),a\u003d0;a\u003ct.length;++a)!0\u003d\u003d\u003d(n\u003dt[a]).visible\u0026\u00260!\u003d\u003dn._length\u0026\u0026((i\u003dthis.traces[n.uid])?i.data.type\u003d\u003d\u003dn.type?i.update(n):(i.dispose(),i\u003dn._module.plot(this,n),this.traces[n.uid]\u003di):(i\u003dn._module.plot(this,n),this.traces[n.uid]\u003di),i.name\u003dn.name);var p\u003dObject.keys(this.traces);t:for(a\u003d0;a\u003cp.length;++a){for(o\u003d0;o\u003ct.length;++o)if(t[o].uid\u003d\u003d\u003dp[a]\u0026\u0026!0\u003d\u003d\u003dt[o].visible\u0026\u00260!\u003d\u003dt[o]._length)continue t;(i\u003dthis.traces[p[a]]).dispose(),delete this.traces[p[a]]}this.glplot.objects.sort((function(t,e){return t._trace.data.index-e._trace.data.index}));var d,g\u003d[[0,0,0],[0,0,0]],v\u003d[],y\u003d{};for(a\u003d0;a\u003c3;++a){if((l\u003d(s\u003dc[k[a]]).type)in y?(y[l].acc*\u003dh[a],y[l].count+\u003d1):y[l]\u003d{acc:h[a],count:1},s.autorange){g[0][a]\u003d1/0,g[1][a]\u003d-1/0;var x\u003dthis.glplot.objects,b\u003dthis.fullSceneLayout.annotations||[],_\u003ds._name.charAt(0);for(o\u003d0;o\u003cx.length;o++){var w\u003dx[o],T\u003dw.bounds,A\u003dw._trace.data._pad||0;\"ErrorBars\"\u003d\u003d\u003dw.constructor.name\u0026\u0026s._lowerLogErrorBound?g[0][a]\u003dMath.min(g[0][a],s._lowerLogErrorBound):g[0][a]\u003dMath.min(g[0][a],T[0][a]/h[a]-A),g[1][a]\u003dMath.max(g[1][a],T[1][a]/h[a]+A)}for(o\u003d0;o\u003cb.length;o++){var S\u003db[o];if(S.visible){var E\u003ds.r2l(S[_]);g[0][a]\u003dMath.min(g[0][a],E),g[1][a]\u003dMath.max(g[1][a],E)}}if(\"rangemode\"in s\u0026\u0026\"tozero\"\u003d\u003d\u003ds.rangemode\u0026\u0026(g[0][a]\u003dMath.min(g[0][a],0),g[1][a]\u003dMath.max(g[1][a],0)),g[0][a]\u003eg[1][a])g[0][a]\u003d-1,g[1][a]\u003d1;else{var L\u003dg[1][a]-g[0][a];g[0][a]-\u003dL/32,g[1][a]+\u003dL/32}if(\"reversed\"\u003d\u003d\u003ds.autorange){var C\u003dg[0][a];g[0][a]\u003dg[1][a],g[1][a]\u003dC}}else{var P\u003ds.range;g[0][a]\u003ds.r2l(P[0]),g[1][a]\u003ds.r2l(P[1])}g[0][a]\u003d\u003d\u003dg[1][a]\u0026\u0026(g[0][a]-\u003d1,g[1][a]+\u003d1),v[a]\u003dg[1][a]-g[0][a],this.glplot.setBounds(a,{min:g[0][a]*h[a],max:g[1][a]*h[a]})}var I\u003dc.aspectmode;if(\"cube\"\u003d\u003d\u003dI)d\u003d[1,1,1];else if(\"manual\"\u003d\u003d\u003dI){var O\u003dc.aspectratio;d\u003d[O.x,O.y,O.z]}else{if(\"auto\"!\u003d\u003dI\u0026\u0026\"data\"!\u003d\u003dI)throw new Error(\"scene.js aspectRatio was not one of the enumerated types\");var z\u003d[1,1,1];for(a\u003d0;a\u003c3;++a){var D\u003dy[l\u003d(s\u003dc[k[a]]).type];z[a]\u003dMath.pow(D.acc,1/D.count)/h[a]}d\u003d\"data\"\u003d\u003d\u003dI||Math.max.apply(null,z)/Math.min.apply(null,z)\u003c\u003d4?z:[1,1,1]}c.aspectratio.x\u003du.aspectratio.x\u003dd[0],c.aspectratio.y\u003du.aspectratio.y\u003dd[1],c.aspectratio.z\u003du.aspectratio.z\u003dd[2],this.glplot.setAspectratio(c.aspectratio),this.viewInitial.aspectratio||(this.viewInitial.aspectratio\u003d{x:c.aspectratio.x,y:c.aspectratio.y,z:c.aspectratio.z}),this.viewInitial.aspectmode||(this.viewInitial.aspectmode\u003dc.aspectmode);var R\u003dc.domain||null,F\u003de._size||null;if(R\u0026\u0026F){var B\u003dthis.container.style;B.position\u003d\"absolute\",B.left\u003dF.l+R.x[0]*F.w+\"px\",B.top\u003dF.t+(1-R.y[1])*F.h+\"px\",B.width\u003dF.w*(R.x[1]-R.x[0])+\"px\",B.height\u003dF.h*(R.y[1]-R.y[0])+\"px\"}this.glplot.redraw()}},w.destroy\u003dfunction(){this.glplot\u0026\u0026(this.camera.mouseListener.enabled\u003d!1,this.container.removeEventListener(\"wheel\",this.camera.wheelListener),this.camera\u003dnull,this.glplot.dispose(),this.container.parentNode.removeChild(this.container),this.glplot\u003dnull)},w.getCamera\u003dfunction(){var t;return this.camera.view.recalcMatrix(this.camera.view.lastT()),{up:{x:(t\u003dthis.camera).up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]},projection:{type:!0\u003d\u003d\u003dt._ortho?\"orthographic\":\"perspective\"}}},w.setViewport\u003dfunction(t){var e,r\u003dt.camera;this.camera.lookAt.apply(this,[[(e\u003dr).eye.x,e.eye.y,e.eye.z],[e.center.x,e.center.y,e.center.z],[e.up.x,e.up.y,e.up.z]]),this.glplot.setAspectratio(t.aspectratio),\"orthographic\"\u003d\u003d\u003dr.projection.type!\u003d\u003dthis.camera._ortho\u0026\u0026(this.glplot.redraw(),this.glplot.clearRGBA(),this.glplot.dispose(),this.initializeGLPlot())},w.isCameraChanged\u003dfunction(t){var e\u003dthis.getCamera(),r\u003df.nestedProperty(t,this.id+\".camera\").get();function n(t,e,r,n){var i\u003d[\"up\",\"center\",\"eye\"],a\u003d[\"x\",\"y\",\"z\"];return e[i[r]]\u0026\u0026t[i[r]][a[n]]\u003d\u003d\u003de[i[r]][a[n]]}var i\u003d!1;if(void 0\u003d\u003d\u003dr)i\u003d!0;else{for(var a\u003d0;a\u003c3;a++)for(var o\u003d0;o\u003c3;o++)if(!n(e,r,a,o)){i\u003d!0;break}(!r.projection||e.projection\u0026\u0026e.projection.type!\u003d\u003dr.projection.type)\u0026\u0026(i\u003d!0)}return i},w.isAspectChanged\u003dfunction(t){var e\u003dthis.glplot.getAspectratio(),r\u003df.nestedProperty(t,this.id+\".aspectratio\").get();return void 0\u003d\u003d\u003dr||r.x!\u003d\u003de.x||r.y!\u003d\u003de.y||r.z!\u003d\u003de.z},w.saveLayout\u003dfunction(t){var e,r,n,i,a,o,s\u003dthis.fullLayout,l\u003dthis.isCameraChanged(t),c\u003dthis.isAspectChanged(t),h\u003dl||c;if(h){var p\u003d{};if(l\u0026\u0026(e\u003dthis.getCamera(),n\u003d(r\u003df.nestedProperty(t,this.id+\".camera\")).get(),p[this.id+\".camera\"]\u003dn),c\u0026\u0026(i\u003dthis.glplot.getAspectratio(),o\u003d(a\u003df.nestedProperty(t,this.id+\".aspectratio\")).get(),p[this.id+\".aspectratio\"]\u003do),u.call(\"_storeDirectGUIEdit\",t,s._preGUI,p),l)r.set(e),f.nestedProperty(s,this.id+\".camera\").set(e);if(c)a.set(i),f.nestedProperty(s,this.id+\".aspectratio\").set(i),this.glplot.redraw()}return h},w.updateFx\u003dfunction(t,e){var r\u003dthis.camera;if(r)if(\"orbit\"\u003d\u003d\u003dt)r.mode\u003d\"orbit\",r.keyBindingMode\u003d\"rotate\";else if(\"turntable\"\u003d\u003d\u003dt){r.up\u003d[0,0,1],r.mode\u003d\"turntable\",r.keyBindingMode\u003d\"rotate\";var n\u003dthis.graphDiv,i\u003dn._fullLayout,a\u003dthis.fullSceneLayout.camera,o\u003da.up.x,s\u003da.up.y,l\u003da.up.z;if(l/Math.sqrt(o*o+s*s+l*l)\u003c.999){var c\u003dthis.id+\".camera.up\",h\u003d{x:0,y:0,z:1},p\u003d{};p[c]\u003dh;var d\u003dn.layout;u.call(\"_storeDirectGUIEdit\",d,i._preGUI,p),a.up\u003dh,f.nestedProperty(d,c).set(h)}}else r.keyBindingMode\u003dt;this.fullSceneLayout.hovermode\u003de},w.toImage\u003dfunction(t){t||(t\u003d\"png\"),this.staticMode\u0026\u0026this.container.appendChild(n),this.glplot.redraw();var e\u003dthis.glplot.gl,r\u003de.drawingBufferWidth,i\u003de.drawingBufferHeight;e.bindFramebuffer(e.FRAMEBUFFER,null);var a\u003dnew Uint8Array(r*i*4);e.readPixels(0,0,r,i,e.RGBA,e.UNSIGNED_BYTE,a),function(t,e,r){for(var n\u003d0,i\u003dr-1;n\u003ci;++n,--i)for(var a\u003d0;a\u003ce;++a)for(var o\u003d0;o\u003c4;++o){var s\u003d4*(e*n+a)+o,l\u003d4*(e*i+a)+o,c\u003dt[s];t[s]\u003dt[l],t[l]\u003dc}}(a,r,i),function(t,e,r){for(var n\u003d0;n\u003cr;++n)for(var i\u003d0;i\u003ce;++i){var a\u003d4*(e*n+i),o\u003dt[a+3];if(o\u003e0)for(var s\u003d255/o,l\u003d0;l\u003c3;++l)t[a+l]\u003dMath.min(s*t[a+l],255)}}(a,r,i);var o\u003ddocument.createElement(\"canvas\");o.width\u003dr,o.height\u003di;var s,l\u003do.getContext(\"2d\"),c\u003dl.createImageData(r,i);switch(c.data.set(a),l.putImageData(c,0,0),t){case\"jpeg\":s\u003do.toDataURL(\"image/jpeg\");break;case\"webp\":s\u003do.toDataURL(\"image/webp\");break;default:s\u003do.toDataURL(\"image/png\")}return this.staticMode\u0026\u0026this.container.removeChild(n),s},w.setConvert\u003dfunction(){for(var t\u003d0;t\u003c3;t++){var e\u003dthis.fullSceneLayout[k[t]];p.setConvert(e,this.fullLayout),e.setScale\u003df.noop}},w.make4thDimension\u003dfunction(){var t\u003dthis.graphDiv._fullLayout;this._mockAxis\u003d{type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},p.setConvert(this._mockAxis,t)},e.exports\u003d_},{\"../../components/fx\":702,\"../../lib\":799,\"../../lib/show_no_webgl_msg\":821,\"../../lib/str2rgbarray\":823,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"./layout/convert\":896,\"./layout/spikes\":899,\"./layout/tick_marks\":900,\"./project\":901,\"gl-plot3d\":322,\"has-passive-events\":440,\"webgl-context\":625}],903:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n){n\u003dn||t.length;for(var i\u003dnew Array(n),a\u003d0;a\u003cn;a++)i[a]\u003d[t[a],e[a],r[a]];return i}},{}],904:[function(t,e,r){\"use strict\";var n\u003dt(\"./font_attributes\"),i\u003dt(\"./animation_attributes\"),a\u003dt(\"../components/color/attributes\"),o\u003dt(\"../components/shapes/draw_newshape/attributes\"),s\u003dt(\"./pad_attributes\"),l\u003dt(\"../lib/extend\").extendFlat,c\u003dn({editType:\"calc\"});c.family.dflt\u003d\u0027\"Open Sans\", verdana, arial, sans-serif\u0027,c.size.dflt\u003d12,c.color.dflt\u003da.defaultLine,e.exports\u003d{font:c,title:{text:{valType:\"string\",editType:\"layoutstyle\"},font:n({editType:\"layoutstyle\"}),xref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},yref:{valType:\"enumerated\",dflt:\"container\",values:[\"container\",\"paper\"],editType:\"layoutstyle\"},x:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"layoutstyle\"},y:{valType:\"number\",min:0,max:1,dflt:\"auto\",editType:\"layoutstyle\"},xanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"left\",\"center\",\"right\"],editType:\"layoutstyle\"},yanchor:{valType:\"enumerated\",dflt:\"auto\",values:[\"auto\",\"top\",\"middle\",\"bottom\"],editType:\"layoutstyle\"},pad:l(s({editType:\"layoutstyle\"}),{}),editType:\"layoutstyle\"},uniformtext:{mode:{valType:\"enumerated\",values:[!1,\"hide\",\"show\"],dflt:!1,editType:\"plot\"},minsize:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"plot\"},autosize:{valType:\"boolean\",dflt:!1,editType:\"none\"},width:{valType:\"number\",min:10,dflt:700,editType:\"plot\"},height:{valType:\"number\",min:10,dflt:450,editType:\"plot\"},margin:{l:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},r:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},t:{valType:\"number\",min:0,dflt:100,editType:\"plot\"},b:{valType:\"number\",min:0,dflt:80,editType:\"plot\"},pad:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},autoexpand:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},computed:{valType:\"any\",editType:\"none\"},paper_bgcolor:{valType:\"color\",dflt:a.background,editType:\"plot\"},plot_bgcolor:{valType:\"color\",dflt:a.background,editType:\"layoutstyle\"},autotypenumbers:{valType:\"enumerated\",values:[\"convert types\",\"strict\"],dflt:\"convert types\",editType:\"calc\"},separators:{valType:\"string\",editType:\"plot\"},hidesources:{valType:\"boolean\",dflt:!1,editType:\"plot\"},showlegend:{valType:\"boolean\",editType:\"legend\"},colorway:{valType:\"colorlist\",dflt:a.defaults,editType:\"calc\"},datarevision:{valType:\"any\",editType:\"calc\"},uirevision:{valType:\"any\",editType:\"none\"},editrevision:{valType:\"any\",editType:\"none\"},selectionrevision:{valType:\"any\",editType:\"none\"},template:{valType:\"any\",editType:\"calc\"},newshape:o.newshape,activeshape:o.activeshape,meta:{valType:\"any\",arrayOk:!0,editType:\"plot\"},transition:l({},i.transition,{editType:\"none\"}),_deprecated:{title:{valType:\"string\",editType:\"layoutstyle\"},titlefont:n({editType:\"layoutstyle\"})}}},{\"../components/color/attributes\":661,\"../components/shapes/draw_newshape/attributes\":747,\"../lib/extend\":789,\"./animation_attributes\":843,\"./font_attributes\":878,\"./pad_attributes\":912}],905:[function(t,e,r){\"use strict\";var n\u003d\u0027\\xa9 \u003ca target\u003d\"_blank\" href\u003d\"https://www.openstreetmap.org/copyright\"\u003eOpenStreetMap\u003c/a\u003e contributors\u0027,i\u003d[\u0027\\xa9 \u003ca target\u003d\"_blank\" href\u003d\"https://carto.com/\"\u003eCarto\u003c/a\u003e\u0027,n].join(\" \"),a\u003d[\u0027Map tiles by \u003ca target\u003d\"_blank\" href\u003d\"https://stamen.com\"\u003eStamen Design\u003c/a\u003e\u0027,\u0027under \u003ca target\u003d\"_blank\" href\u003d\"https://creativecommons.org/licenses/by/3.0\"\u003eCC BY 3.0\u003c/a\u003e\u0027,\"|\",\u0027Data by \u003ca target\u003d\"_blank\" href\u003d\"https://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e contributors\u0027,\u0027under \u003ca target\u003d\"_blank\" href\u003d\"https://www.openstreetmap.org/copyright\"\u003eODbL\u003c/a\u003e\u0027].join(\" \"),o\u003d{\"open-street-map\":{id:\"osm\",version:8,sources:{\"plotly-osm-tiles\":{type:\"raster\",attribution:n,tiles:[\"https://a.tile.openstreetmap.org/{z}/{x}/{y}.png\",\"https://b.tile.openstreetmap.org/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-osm-tiles\",type:\"raster\",source:\"plotly-osm-tiles\",minzoom:0,maxzoom:22}]},\"white-bg\":{id:\"white-bg\",version:8,sources:{},layers:[{id:\"white-bg\",type:\"background\",paint:{\"background-color\":\"#FFFFFF\"},minzoom:0,maxzoom:22}]},\"carto-positron\":{id:\"carto-positron\",version:8,sources:{\"plotly-carto-positron\":{type:\"raster\",attribution:i,tiles:[\"https://cartodb-basemaps-c.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-carto-positron\",type:\"raster\",source:\"plotly-carto-positron\",minzoom:0,maxzoom:22}]},\"carto-darkmatter\":{id:\"carto-darkmatter\",version:8,sources:{\"plotly-carto-darkmatter\":{type:\"raster\",attribution:i,tiles:[\"https://cartodb-basemaps-c.global.ssl.fastly.net/dark_all/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-carto-darkmatter\",type:\"raster\",source:\"plotly-carto-darkmatter\",minzoom:0,maxzoom:22}]},\"stamen-terrain\":{id:\"stamen-terrain\",version:8,sources:{\"plotly-stamen-terrain\":{type:\"raster\",attribution:a,tiles:[\"https://stamen-tiles.a.ssl.fastly.net/terrain/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-terrain\",type:\"raster\",source:\"plotly-stamen-terrain\",minzoom:0,maxzoom:22}]},\"stamen-toner\":{id:\"stamen-toner\",version:8,sources:{\"plotly-stamen-toner\":{type:\"raster\",attribution:a,tiles:[\"https://stamen-tiles.a.ssl.fastly.net/toner/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-toner\",type:\"raster\",source:\"plotly-stamen-toner\",minzoom:0,maxzoom:22}]},\"stamen-watercolor\":{id:\"stamen-watercolor\",version:8,sources:{\"plotly-stamen-watercolor\":{type:\"raster\",attribution:[\u0027Map tiles by \u003ca target\u003d\"_blank\" href\u003d\"https://stamen.com\"\u003eStamen Design\u003c/a\u003e\u0027,\u0027under \u003ca target\u003d\"_blank\" href\u003d\"https://creativecommons.org/licenses/by/3.0\"\u003eCC BY 3.0\u003c/a\u003e\u0027,\"|\",\u0027Data by \u003ca target\u003d\"_blank\" href\u003d\"https://openstreetmap.org\"\u003eOpenStreetMap\u003c/a\u003e contributors\u0027,\u0027under \u003ca target\u003d\"_blank\" href\u003d\"https://creativecommons.org/licenses/by-sa/3.0\"\u003eCC BY SA\u003c/a\u003e\u0027].join(\" \"),tiles:[\"https://stamen-tiles.a.ssl.fastly.net/watercolor/{z}/{x}/{y}.png\"],tileSize:256}},layers:[{id:\"plotly-stamen-watercolor\",type:\"raster\",source:\"plotly-stamen-watercolor\",minzoom:0,maxzoom:22}]}},s\u003dObject.keys(o);e.exports\u003d{requiredVersion:\"1.10.1\",styleUrlPrefix:\"mapbox://styles/mapbox/\",styleUrlSuffix:\"v9\",styleValuesMapbox:[\"basic\",\"streets\",\"outdoors\",\"light\",\"dark\",\"satellite\",\"satellite-streets\"],styleValueDflt:\"basic\",stylesNonMapbox:o,styleValuesNonMapbox:s,traceLayerPrefix:\"plotly-trace-layer-\",layoutLayerPrefix:\"plotly-layout-layer-\",wrongVersionErrorMsg:[\"Your custom plotly.js bundle is not using the correct mapbox-gl version\",\"Please install mapbox-gl@1.10.1.\"].join(\"\\n\"),noAccessTokenErrorMsg:[\"Missing Mapbox access token.\",\"Mapbox trace type require a Mapbox access token to be registered.\",\"For example:\",\"  Plotly.newPlot(gd, data, layout, { mapboxAccessToken: \u0027my-access-token\u0027 });\",\"More info here: https://www.mapbox.com/help/define-access-token/\"].join(\"\\n\"),missingStyleErrorMsg:[\"No valid mapbox style found, please set `mapbox.style` to one of:\",s.join(\", \"),\"or register a Mapbox access token to use a Mapbox-served style.\"].join(\"\\n\"),multipleTokensErrorMsg:[\"Set multiple mapbox access token across different mapbox subplot,\",\"using first token found as mapbox-gl does not allow multipleaccess tokens on the same page.\"].join(\"\\n\"),mapOnErrorMsg:\"Mapbox error.\",mapboxLogo:{path0:\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\",path1:\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\",path2:\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\",polygon:\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34\"},styleRules:{map:\"overflow:hidden;position:relative;\",\"missing-css\":\"display:none;\",canary:\"background-color:salmon;\",\"ctrl-bottom-left\":\"position: absolute; pointer-events: none; z-index: 2; bottom: 0; left: 0;\",\"ctrl-bottom-right\":\"position: absolute; pointer-events: none; z-index: 2; right: 0; bottom: 0;\",ctrl:\"clear: both; pointer-events: auto; transform: translate(0, 0);\",\"ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner\":\"display: none;\",\"ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner\":\"display: block; margin-top:2px\",\"ctrl-attrib.mapboxgl-compact:hover\":\"padding: 2px 24px 2px 4px; visibility: visible; margin-top: 6px;\",\"ctrl-attrib.mapboxgl-compact::after\":\u0027content: \"\"; cursor: pointer; position: absolute; background-image: url(\\\u0027data:image/svg+xml;charset\u003dutf-8,%3Csvg viewBox\u003d\"0 0 20 20\" xmlns\u003d\"http://www.w3.org/2000/svg\"%3E %3Cpath fill\u003d\"%23333333\" fill-rule\u003d\"evenodd\" d\u003d\"M4,10a6,6 0 1,0 12,0a6,6 0 1,0 -12,0 M9,7a1,1 0 1,0 2,0a1,1 0 1,0 -2,0 M9,10a1,1 0 1,1 2,0l0,3a1,1 0 1,1 -2,0\"/%3E %3C/svg%3E\\\u0027); background-color: rgba(255, 255, 255, 0.5); width: 24px; height: 24px; box-sizing: border-box; border-radius: 12px;\u0027,\"ctrl-attrib.mapboxgl-compact\":\"min-height: 20px; padding: 0; margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px;\",\"ctrl-bottom-right \u003e .mapboxgl-ctrl-attrib.mapboxgl-compact::after\":\"bottom: 0; right: 0\",\"ctrl-bottom-left \u003e .mapboxgl-ctrl-attrib.mapboxgl-compact::after\":\"bottom: 0; left: 0\",\"ctrl-bottom-left .mapboxgl-ctrl\":\"margin: 0 0 10px 10px; float: left;\",\"ctrl-bottom-right .mapboxgl-ctrl\":\"margin: 0 10px 10px 0; float: right;\",\"ctrl-attrib\":\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\",\"ctrl-attrib a\":\"color: rgba(0, 0, 0, 0.75); text-decoration: none; font-size: 12px\",\"ctrl-attrib a:hover\":\"color: inherit; text-decoration: underline;\",\"ctrl-attrib .mapbox-improve-map\":\"font-weight: bold; margin-left: 2px;\",\"attrib-empty\":\"display: none;\",\"ctrl-logo\":\u0027display:block; width: 21px; height: 21px; background-image: url(\\\u0027data:image/svg+xml;charset\u003dutf-8,%3C?xml version\u003d\"1.0\" encoding\u003d\"utf-8\"?%3E %3Csvg version\u003d\"1.1\" id\u003d\"Layer_1\" xmlns\u003d\"http://www.w3.org/2000/svg\" xmlns:xlink\u003d\"http://www.w3.org/1999/xlink\" x\u003d\"0px\" y\u003d\"0px\" viewBox\u003d\"0 0 21 21\" style\u003d\"enable-background:new 0 0 21 21;\" xml:space\u003d\"preserve\"%3E%3Cg transform\u003d\"translate(0,0.01)\"%3E%3Cpath d\u003d\"m 10.5,1.24 c -5.11,0 -9.25,4.15 -9.25,9.25 0,5.1 4.15,9.25 9.25,9.25 5.1,0 9.25,-4.15 9.25,-9.25 0,-5.11 -4.14,-9.25 -9.25,-9.25 z m 4.39,11.53 c -1.93,1.93 -4.78,2.31 -6.7,2.31 -0.7,0 -1.41,-0.05 -2.1,-0.16 0,0 -1.02,-5.64 2.14,-8.81 0.83,-0.83 1.95,-1.28 3.13,-1.28 1.27,0 2.49,0.51 3.39,1.42 1.84,1.84 1.89,4.75 0.14,6.52 z\" style\u003d\"opacity:0.9;fill:%23ffffff;enable-background:new\" class\u003d\"st0\"/%3E%3Cpath d\u003d\"M 10.5,-0.01 C 4.7,-0.01 0,4.7 0,10.49 c 0,5.79 4.7,10.5 10.5,10.5 5.8,0 10.5,-4.7 10.5,-10.5 C 20.99,4.7 16.3,-0.01 10.5,-0.01 Z m 0,19.75 c -5.11,0 -9.25,-4.15 -9.25,-9.25 0,-5.1 4.14,-9.26 9.25,-9.26 5.11,0 9.25,4.15 9.25,9.25 0,5.13 -4.14,9.26 -9.25,9.26 z\" style\u003d\"opacity:0.35;enable-background:new\" class\u003d\"st1\"/%3E%3Cpath d\u003d\"M 14.74,6.25 C 12.9,4.41 9.98,4.35 8.23,6.1 5.07,9.27 6.09,14.91 6.09,14.91 c 0,0 5.64,1.02 8.81,-2.14 C 16.64,11 16.59,8.09 14.74,6.25 Z m -2.27,4.09 -0.91,1.87 -0.9,-1.87 -1.86,-0.91 1.86,-0.9 0.9,-1.87 0.91,1.87 1.86,0.9 z\" style\u003d\"opacity:0.35;enable-background:new\" class\u003d\"st1\"/%3E%3Cpolygon points\u003d\"11.56,12.21 10.66,10.34 8.8,9.43 10.66,8.53 11.56,6.66 12.47,8.53 14.33,9.43 12.47,10.34 \" style\u003d\"opacity:0.9;fill:%23ffffff;enable-background:new\" class\u003d\"st0\"/%3E%3C/g%3E%3C/svg%3E\\\u0027)\u0027}}},{}],906:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e){var r\u003dt.split(\" \"),i\u003dr[0],a\u003dr[1],o\u003dn.isArrayOrTypedArray(e)?n.mean(e):e,s\u003d.5+o/100,l\u003d1.5+o/100,c\u003d[\"\",\"\"],u\u003d[0,0];switch(i){case\"top\":c[0]\u003d\"top\",u[1]\u003d-l;break;case\"bottom\":c[0]\u003d\"bottom\",u[1]\u003dl}switch(a){case\"left\":c[1]\u003d\"right\",u[0]\u003d-s;break;case\"right\":c[1]\u003d\"left\",u[0]\u003ds}return{anchor:c[0]\u0026\u0026c[1]?c.join(\"-\"):c[0]?c[0]:c[1]?c[1]:\"center\",offset:u}}},{\"../../lib\":799}],907:[function(t,e,r){\"use strict\";var n\u003dt(\"mapbox-gl/dist/mapbox-gl-unminified\"),i\u003dt(\"../../lib\"),a\u003di.strTranslate,o\u003di.strScale,s\u003dt(\"../../plots/get_data\").getSubplotCalcData,l\u003dt(\"../../constants/xmlns_namespaces\"),c\u003dt(\"@plotly/d3\"),u\u003dt(\"../../components/drawing\"),f\u003dt(\"../../lib/svg_text_utils\"),h\u003dt(\"./mapbox\"),p\u003dr.constants\u003dt(\"./constants\");function d(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026(-1!\u003d\u003dp.styleValuesMapbox.indexOf(t)||0\u003d\u003d\u003dt.indexOf(\"mapbox://\"))}r.name\u003d\"mapbox\",r.attr\u003d\"subplot\",r.idRoot\u003d\"mapbox\",r.idRegex\u003dr.attrRegex\u003di.counterRegex(\"mapbox\"),r.attributes\u003d{subplot:{valType:\"subplotid\",dflt:\"mapbox\",editType:\"calc\"}},r.layoutAttributes\u003dt(\"./layout_attributes\"),r.supplyLayoutDefaults\u003dt(\"./layout_defaults\"),r.plot\u003dfunction(t){var e\u003dt._fullLayout,r\u003dt.calcdata,a\u003de._subplots.mapbox;if(n.version!\u003d\u003dp.requiredVersion)throw new Error(p.wrongVersionErrorMsg);var o\u003dfunction(t,e){var r\u003dt._fullLayout;if(\"\"\u003d\u003d\u003dt._context.mapboxAccessToken)return\"\";for(var n\u003d[],a\u003d[],o\u003d!1,s\u003d!1,l\u003d0;l\u003ce.length;l++){var c\u003dr[e[l]],u\u003dc.accesstoken;d(c.style)\u0026\u0026(u?i.pushUnique(n,u):(d(c._input.style)\u0026\u0026(i.error(\"Uses Mapbox map style, but did not set an access token.\"),o\u003d!0),s\u003d!0)),u\u0026\u0026i.pushUnique(a,u)}if(s){var f\u003do?p.noAccessTokenErrorMsg:p.missingStyleErrorMsg;throw i.error(f),new Error(f)}return n.length?(n.length\u003e1\u0026\u0026i.warn(p.multipleTokensErrorMsg),n[0]):(a.length\u0026\u0026i.log([\"Listed mapbox access token(s)\",a.join(\",\"),\"but did not use a Mapbox map style, ignoring token(s).\"].join(\" \")),\"\")}(t,a);n.accessToken\u003do;for(var l\u003d0;l\u003ca.length;l++){var c\u003da[l],u\u003ds(r,\"mapbox\",c),f\u003de[c],m\u003df._subplot;m||(m\u003dnew h(t,c),e[c]._subplot\u003dm),m.viewInitial||(m.viewInitial\u003d{center:i.extendFlat({},f.center),zoom:f.zoom,bearing:f.bearing,pitch:f.pitch}),m.plot(u,e,t._promises)}},r.clean\u003dfunction(t,e,r,n){for(var i\u003dn._subplots.mapbox||[],a\u003d0;a\u003ci.length;a++){var o\u003di[a];!e[o]\u0026\u0026n[o]._subplot\u0026\u0026n[o]._subplot.destroy()}},r.toSVG\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._subplots.mapbox,n\u003de._size,i\u003d0;i\u003cr.length;i++){var s\u003de[r[i]],h\u003ds.domain,d\u003ds._subplot.toImage(\"png\");e._glimages.append(\"svg:image\").attr({xmlns:l.svg,\"xlink:href\":d,x:n.l+n.w*h.x[0],y:n.t+n.h*(1-h.y[1]),width:n.w*(h.x[1]-h.x[0]),height:n.h*(h.y[1]-h.y[0]),preserveAspectRatio:\"none\"});var m\u003dc.select(s._subplot.div);if(!(null\u003d\u003d\u003dm.select(\".mapboxgl-ctrl-logo\").node().offsetParent)){var g\u003de._glimages.append(\"g\");g.attr(\"transform\",a(n.l+n.w*h.x[0]+10,n.t+n.h*(1-h.y[0])-31)),g.append(\"path\").attr(\"d\",p.mapboxLogo.path0).style({opacity:.9,fill:\"#ffffff\",\"enable-background\":\"new\"}),g.append(\"path\").attr(\"d\",p.mapboxLogo.path1).style(\"opacity\",.35).style(\"enable-background\",\"new\"),g.append(\"path\").attr(\"d\",p.mapboxLogo.path2).style(\"opacity\",.35).style(\"enable-background\",\"new\"),g.append(\"polygon\").attr(\"points\",p.mapboxLogo.polygon).style({opacity:.9,fill:\"#ffffff\",\"enable-background\":\"new\"})}var v\u003dm.select(\".mapboxgl-ctrl-attrib\").text().replace(\"Improve this map\",\"\"),y\u003de._glimages.append(\"g\"),x\u003dy.append(\"text\");x.text(v).classed(\"static-attribution\",!0).attr({\"font-size\":12,\"font-family\":\"Arial\",color:\"rgba(0, 0, 0, 0.75)\",\"text-anchor\":\"end\",\"data-unformatted\":v});var b\u003du.bBox(x.node()),_\u003dn.w*(h.x[1]-h.x[0]);if(b.width\u003e_/2){var w\u003dv.split(\"|\").join(\"\u003cbr\u003e\");x.text(w).attr(\"data-unformatted\",w).call(f.convertToTspans,t),b\u003du.bBox(x.node())}x.attr(\"transform\",a(-3,8-b.height)),y.insert(\"rect\",\".static-attribution\").attr({x:-b.width-6,y:-b.height-3,width:b.width+6,height:b.height+3,fill:\"rgba(255, 255, 255, 0.75)\"});var T\u003d1;b.width+6\u003e_\u0026\u0026(T\u003d_/(b.width+6));var k\u003d[n.l+n.w*h.x[1],n.t+n.h*(1-h.y[0])];y.attr(\"transform\",a(k[0],k[1])+o(T))}},r.updateFx\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003de._subplots.mapbox,n\u003d0;n\u003cr.length;n++){e[r[n]]._subplot.updateFx(e)}}},{\"../../components/drawing\":684,\"../../constants/xmlns_namespaces\":776,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/get_data\":887,\"./constants\":905,\"./layout_attributes\":909,\"./layout_defaults\":910,\"./mapbox\":911,\"@plotly/d3\":58,\"mapbox-gl/dist/mapbox-gl-unminified\":457}],908:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../lib/svg_text_utils\").sanitizeHTML,a\u003dt(\"./convert_text_opts\"),o\u003dt(\"./constants\");function s(t,e){this.subplot\u003dt,this.uid\u003dt.uid+\"-\"+e,this.index\u003de,this.idSource\u003d\"source-\"+this.uid,this.idLayer\u003do.layoutLayerPrefix+this.uid,this.sourceType\u003dnull,this.source\u003dnull,this.layerType\u003dnull,this.below\u003dnull,this.visible\u003d!1}var l\u003ds.prototype;function c(t){if(!t.visible)return!1;var e\u003dt.source;if(Array.isArray(e)\u0026\u0026e.length\u003e0){for(var r\u003d0;r\u003ce.length;r++)if(\"string\"!\u003dtypeof e[r]||0\u003d\u003d\u003de[r].length)return!1;return!0}return n.isPlainObject(e)||\"string\"\u003d\u003dtypeof e\u0026\u0026e.length\u003e0}function u(t){var e\u003d{},r\u003d{};switch(t.type){case\"circle\":n.extendFlat(r,{\"circle-radius\":t.circle.radius,\"circle-color\":t.color,\"circle-opacity\":t.opacity});break;case\"line\":n.extendFlat(r,{\"line-width\":t.line.width,\"line-color\":t.color,\"line-opacity\":t.opacity,\"line-dasharray\":t.line.dash});break;case\"fill\":n.extendFlat(r,{\"fill-color\":t.color,\"fill-outline-color\":t.fill.outlinecolor,\"fill-opacity\":t.opacity});break;case\"symbol\":var i\u003dt.symbol,o\u003da(i.textposition,i.iconsize);n.extendFlat(e,{\"icon-image\":i.icon+\"-15\",\"icon-size\":i.iconsize/10,\"text-field\":i.text,\"text-size\":i.textfont.size,\"text-anchor\":o.anchor,\"text-offset\":o.offset,\"symbol-placement\":i.placement}),n.extendFlat(r,{\"icon-color\":t.color,\"text-color\":i.textfont.color,\"text-opacity\":t.opacity});break;case\"raster\":n.extendFlat(r,{\"raster-fade-duration\":0,\"raster-opacity\":t.opacity})}return{layout:e,paint:r}}l.update\u003dfunction(t){this.visible?this.needsNewImage(t)?this.updateImage(t):this.needsNewSource(t)?(this.removeLayer(),this.updateSource(t),this.updateLayer(t)):this.needsNewLayer(t)?this.updateLayer(t):this.updateStyle(t):(this.updateSource(t),this.updateLayer(t)),this.visible\u003dc(t)},l.needsNewImage\u003dfunction(t){return this.subplot.map.getSource(this.idSource)\u0026\u0026\"image\"\u003d\u003d\u003dthis.sourceType\u0026\u0026\"image\"\u003d\u003d\u003dt.sourcetype\u0026\u0026(this.source!\u003d\u003dt.source||JSON.stringify(this.coordinates)!\u003d\u003dJSON.stringify(t.coordinates))},l.needsNewSource\u003dfunction(t){return this.sourceType!\u003d\u003dt.sourcetype||JSON.stringify(this.source)!\u003d\u003dJSON.stringify(t.source)||this.layerType!\u003d\u003dt.type},l.needsNewLayer\u003dfunction(t){return this.layerType!\u003d\u003dt.type||this.below!\u003d\u003dthis.subplot.belowLookup[\"layout-\"+this.index]},l.lookupBelow\u003dfunction(){return this.subplot.belowLookup[\"layout-\"+this.index]},l.updateImage\u003dfunction(t){this.subplot.map.getSource(this.idSource).updateImage({url:t.source,coordinates:t.coordinates});var e\u003dthis.findFollowingMapboxLayerId(this.lookupBelow());null!\u003d\u003de\u0026\u0026this.subplot.map.moveLayer(this.idLayer,e)},l.updateSource\u003dfunction(t){var e\u003dthis.subplot.map;if(e.getSource(this.idSource)\u0026\u0026e.removeSource(this.idSource),this.sourceType\u003dt.sourcetype,this.source\u003dt.source,c(t)){var r\u003dfunction(t){var e,r\u003dt.sourcetype,n\u003dt.source,a\u003d{type:r};\"geojson\"\u003d\u003d\u003dr?e\u003d\"data\":\"vector\"\u003d\u003d\u003dr?e\u003d\"string\"\u003d\u003dtypeof n?\"url\":\"tiles\":\"raster\"\u003d\u003d\u003dr?(e\u003d\"tiles\",a.tileSize\u003d256):\"image\"\u003d\u003d\u003dr\u0026\u0026(e\u003d\"url\",a.coordinates\u003dt.coordinates);a[e]\u003dn,t.sourceattribution\u0026\u0026(a.attribution\u003di(t.sourceattribution));return a}(t);e.addSource(this.idSource,r)}},l.findFollowingMapboxLayerId\u003dfunction(t){if(\"traces\"\u003d\u003d\u003dt)for(var e\u003dthis.subplot.getMapLayers(),r\u003d0;r\u003ce.length;r++){var n\u003de[r].id;if(\"string\"\u003d\u003dtypeof n\u0026\u00260\u003d\u003d\u003dn.indexOf(o.traceLayerPrefix)){t\u003dn;break}}return t},l.updateLayer\u003dfunction(t){var e\u003dthis.subplot,r\u003du(t),n\u003dthis.lookupBelow(),i\u003dthis.findFollowingMapboxLayerId(n);this.removeLayer(),c(t)\u0026\u0026e.addLayer({id:this.idLayer,source:this.idSource,\"source-layer\":t.sourcelayer||\"\",type:t.type,minzoom:t.minzoom,maxzoom:t.maxzoom,layout:r.layout,paint:r.paint},i),this.layerType\u003dt.type,this.below\u003dn},l.updateStyle\u003dfunction(t){if(c(t)){var e\u003du(t);this.subplot.setOptions(this.idLayer,\"setLayoutProperty\",e.layout),this.subplot.setOptions(this.idLayer,\"setPaintProperty\",e.paint)}},l.removeLayer\u003dfunction(){var t\u003dthis.subplot.map;t.getLayer(this.idLayer)\u0026\u0026t.removeLayer(this.idLayer)},l.dispose\u003dfunction(){var t\u003dthis.subplot.map;t.getLayer(this.idLayer)\u0026\u0026t.removeLayer(this.idLayer),t.getSource(this.idSource)\u0026\u0026t.removeSource(this.idSource)},e.exports\u003dfunction(t,e,r){var n\u003dnew s(t,e);return n.update(r),n}},{\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"./constants\":905,\"./convert_text_opts\":906}],909:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\").defaultLine,a\u003dt(\"../domain\").attributes,o\u003dt(\"../font_attributes\"),s\u003dt(\"../../traces/scatter/attributes\").textposition,l\u003dt(\"../../plot_api/edit_types\").overrideAll,c\u003dt(\"../../plot_api/plot_template\").templatedArray,u\u003dt(\"./constants\"),f\u003do({});f.family.dflt\u003d\"Open Sans Regular, Arial Unicode MS Regular\",(e.exports\u003dl({_arrayAttrRegexps:[n.counterRegex(\"mapbox\",\".layers\",!0)],domain:a({name:\"mapbox\"}),accesstoken:{valType:\"string\",noBlank:!0,strict:!0},style:{valType:\"any\",values:u.styleValuesMapbox.concat(u.styleValuesNonMapbox),dflt:u.styleValueDflt},center:{lon:{valType:\"number\",dflt:0},lat:{valType:\"number\",dflt:0}},zoom:{valType:\"number\",dflt:1},bearing:{valType:\"number\",dflt:0},pitch:{valType:\"number\",dflt:0},layers:c(\"layer\",{visible:{valType:\"boolean\",dflt:!0},sourcetype:{valType:\"enumerated\",values:[\"geojson\",\"vector\",\"raster\",\"image\"],dflt:\"geojson\"},source:{valType:\"any\"},sourcelayer:{valType:\"string\",dflt:\"\"},sourceattribution:{valType:\"string\"},type:{valType:\"enumerated\",values:[\"circle\",\"line\",\"fill\",\"symbol\",\"raster\"],dflt:\"circle\"},coordinates:{valType:\"any\"},below:{valType:\"string\"},color:{valType:\"color\",dflt:i},opacity:{valType:\"number\",min:0,max:1,dflt:1},minzoom:{valType:\"number\",min:0,max:24,dflt:0},maxzoom:{valType:\"number\",min:0,max:24,dflt:24},circle:{radius:{valType:\"number\",dflt:15}},line:{width:{valType:\"number\",dflt:2},dash:{valType:\"data_array\"}},fill:{outlinecolor:{valType:\"color\",dflt:i}},symbol:{icon:{valType:\"string\",dflt:\"marker\"},iconsize:{valType:\"number\",dflt:10},text:{valType:\"string\",dflt:\"\"},placement:{valType:\"enumerated\",values:[\"point\",\"line\",\"line-center\"],dflt:\"point\"},textfont:f,textposition:n.extendFlat({},s,{arrayOk:!1})}})},\"plot\",\"from-root\")).uirevision\u003d{valType:\"any\",editType:\"none\"}},{\"../../components/color\":662,\"../../lib\":799,\"../../plot_api/edit_types\":831,\"../../plot_api/plot_template\":838,\"../../traces/scatter/attributes\":1214,\"../domain\":877,\"../font_attributes\":878,\"./constants\":905}],910:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../subplot_defaults\"),a\u003dt(\"../array_container_defaults\"),o\u003dt(\"./layout_attributes\");function s(t,e,r,n){r(\"accesstoken\",n.accessToken),r(\"style\"),r(\"center.lon\"),r(\"center.lat\"),r(\"zoom\"),r(\"bearing\"),r(\"pitch\"),a(t,e,{name:\"layers\",handleItemDefaults:l}),e._input\u003dt}function l(t,e){function r(r,i){return n.coerce(t,e,o.layers,r,i)}if(r(\"visible\")){var i,a\u003dr(\"sourcetype\"),s\u003d\"raster\"\u003d\u003d\u003da||\"image\"\u003d\u003d\u003da;r(\"source\"),r(\"sourceattribution\"),\"vector\"\u003d\u003d\u003da\u0026\u0026r(\"sourcelayer\"),\"image\"\u003d\u003d\u003da\u0026\u0026r(\"coordinates\"),s\u0026\u0026(i\u003d\"raster\");var l\u003dr(\"type\",i);s\u0026\u0026\"raster\"!\u003d\u003dl\u0026\u0026(l\u003de.type\u003d\"raster\",n.log(\"Source types *raster* and *image* must drawn *raster* layer type.\")),r(\"below\"),r(\"color\"),r(\"opacity\"),r(\"minzoom\"),r(\"maxzoom\"),\"circle\"\u003d\u003d\u003dl\u0026\u0026r(\"circle.radius\"),\"line\"\u003d\u003d\u003dl\u0026\u0026(r(\"line.width\"),r(\"line.dash\")),\"fill\"\u003d\u003d\u003dl\u0026\u0026r(\"fill.outlinecolor\"),\"symbol\"\u003d\u003d\u003dl\u0026\u0026(r(\"symbol.icon\"),r(\"symbol.iconsize\"),r(\"symbol.text\"),n.coerceFont(r,\"symbol.textfont\"),r(\"symbol.textposition\"),r(\"symbol.placement\"))}}e.exports\u003dfunction(t,e,r){i(t,e,r,{type:\"mapbox\",attributes:o,handleDefaults:s,partition:\"y\",accessToken:e._mapboxAccessToken})}},{\"../../lib\":799,\"../array_container_defaults\":844,\"../subplot_defaults\":921,\"./layout_attributes\":909}],911:[function(t,e,r){\"use strict\";var n\u003dt(\"mapbox-gl/dist/mapbox-gl-unminified\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../lib/geo_location_utils\"),o\u003dt(\"../../registry\"),s\u003dt(\"../cartesian/axes\"),l\u003dt(\"../../components/dragelement\"),c\u003dt(\"../../components/fx\"),u\u003dt(\"../../components/dragelement/helpers\"),f\u003du.rectMode,h\u003du.drawMode,p\u003du.selectMode,d\u003dt(\"../cartesian/select\").prepSelect,m\u003dt(\"../cartesian/select\").clearSelect,g\u003dt(\"../cartesian/select\").clearSelectionsCache,v\u003dt(\"../cartesian/select\").selectOnClick,y\u003dt(\"./constants\"),x\u003dt(\"./layers\");function b(t,e){this.id\u003de,this.gd\u003dt;var r\u003dt._fullLayout,n\u003dt._context;this.container\u003dr._glcontainer.node(),this.isStatic\u003dn.staticPlot,this.uid\u003dr._uid+\"-\"+this.id,this.div\u003dnull,this.xaxis\u003dnull,this.yaxis\u003dnull,this.createFramework(r),this.map\u003dnull,this.accessToken\u003dnull,this.styleObj\u003dnull,this.traceHash\u003d{},this.layerList\u003d[],this.belowLookup\u003d{},this.dragging\u003d!1,this.wheeling\u003d!1}var _\u003db.prototype;_.plot\u003dfunction(t,e,r){var n,i\u003dthis,a\u003de[i.id];i.map\u0026\u0026a.accesstoken!\u003d\u003di.accessToken\u0026\u0026(i.map.remove(),i.map\u003dnull,i.styleObj\u003dnull,i.traceHash\u003d{},i.layerList\u003d[]),n\u003di.map?new Promise((function(r,n){i.updateMap(t,e,r,n)})):new Promise((function(r,n){i.createMap(t,e,r,n)})),r.push(n)},_.createMap\u003dfunction(t,e,r,i){var o\u003dthis,s\u003de[o.id],l\u003do.styleObj\u003dT(s.style);o.accessToken\u003ds.accesstoken;var c\u003do.map\u003dnew n.Map({container:o.div,style:l.style,center:M(s.center),zoom:s.zoom,bearing:s.bearing,pitch:s.pitch,interactive:!o.isStatic,preserveDrawingBuffer:o.isStatic,doubleClickZoom:!1,boxZoom:!1,attributionControl:!1}).addControl(new n.AttributionControl({compact:!0}));c._canvas.style.left\u003d\"0px\",c._canvas.style.top\u003d\"0px\",o.rejectOnError(i),o.isStatic||o.initFx(t,e);var u\u003d[];u.push(new Promise((function(t){c.once(\"load\",t)}))),u\u003du.concat(a.fetchTraceGeoData(t)),Promise.all(u).then((function(){o.fillBelowLookup(t,e),o.updateData(t),o.updateLayout(e),o.resolveOnRender(r)})).catch(i)},_.updateMap\u003dfunction(t,e,r,n){var i\u003dthis,o\u003di.map,s\u003de[this.id];i.rejectOnError(n);var l\u003d[],c\u003dT(s.style);JSON.stringify(i.styleObj)!\u003d\u003dJSON.stringify(c)\u0026\u0026(i.styleObj\u003dc,o.setStyle(c.style),i.traceHash\u003d{},l.push(new Promise((function(t){o.once(\"styledata\",t)})))),l\u003dl.concat(a.fetchTraceGeoData(t)),Promise.all(l).then((function(){i.fillBelowLookup(t,e),i.updateData(t),i.updateLayout(e),i.resolveOnRender(r)})).catch(n)},_.fillBelowLookup\u003dfunction(t,e){var r,n,i\u003de[this.id].layers,a\u003dthis.belowLookup\u003d{},o\u003d!1;for(r\u003d0;r\u003ct.length;r++){var s\u003dt[r][0].trace,l\u003ds._module;\"string\"\u003d\u003dtypeof s.below?n\u003ds.below:l.getBelow\u0026\u0026(n\u003dl.getBelow(s,this)),\"\"\u003d\u003d\u003dn\u0026\u0026(o\u003d!0),a[\"trace-\"+s.uid]\u003dn||\"\"}for(r\u003d0;r\u003ci.length;r++){var c\u003di[r];n\u003d\"string\"\u003d\u003dtypeof c.below?c.below:o?\"traces\":\"\",a[\"layout-\"+r]\u003dn}var u,f,h\u003d{};for(u in a)h[n\u003da[u]]?h[n].push(u):h[n]\u003d[u];for(n in h){var p\u003dh[n];if(p.length\u003e1)for(r\u003d0;r\u003cp.length;r++)0\u003d\u003d\u003d(u\u003dp[r]).indexOf(\"trace-\")?(f\u003du.split(\"trace-\")[1],this.traceHash[f]\u0026\u0026(this.traceHash[f].below\u003dnull)):0\u003d\u003d\u003du.indexOf(\"layout-\")\u0026\u0026(f\u003du.split(\"layout-\")[1],this.layerList[f]\u0026\u0026(this.layerList[f].below\u003dnull))}};var w\u003d{choroplethmapbox:0,densitymapbox:1,scattermapbox:2};function T(t){var e\u003d{};return i.isPlainObject(t)?(e.id\u003dt.id,e.style\u003dt):\"string\"\u003d\u003dtypeof t?(e.id\u003dt,-1!\u003d\u003dy.styleValuesMapbox.indexOf(t)?e.style\u003dk(t):y.stylesNonMapbox[t]?e.style\u003dy.stylesNonMapbox[t]:e.style\u003dt):(e.id\u003dy.styleValueDflt,e.style\u003dk(y.styleValueDflt)),e.transition\u003d{duration:0,delay:0},e}function k(t){return y.styleUrlPrefix+t+\"-\"+y.styleUrlSuffix}function M(t){return[t.lon,t.lat]}_.updateData\u003dfunction(t){var e,r,n,i,a\u003dthis.traceHash,o\u003dt.slice().sort((function(t,e){return w[t[0].trace.type]-w[e[0].trace.type]}));for(n\u003d0;n\u003co.length;n++){var s\u003do[n],l\u003d!1;(e\u003da[(r\u003ds[0].trace).uid])\u0026\u0026(e.type\u003d\u003d\u003dr.type?(e.update(s),l\u003d!0):e.dispose()),!l\u0026\u0026r._module\u0026\u0026(a[r.uid]\u003dr._module.plot(this,s))}var c\u003dObject.keys(a);t:for(n\u003d0;n\u003cc.length;n++){var u\u003dc[n];for(i\u003d0;i\u003ct.length;i++)if(u\u003d\u003d\u003d(r\u003dt[i][0].trace).uid)continue t;(e\u003da[u]).dispose(),delete a[u]}},_.updateLayout\u003dfunction(t){var e\u003dthis.map,r\u003dt[this.id];this.dragging||this.wheeling||(e.setCenter(M(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch)),this.updateLayers(t),this.updateFramework(t),this.updateFx(t),this.map.resize(),this.gd._context._scrollZoom.mapbox?e.scrollZoom.enable():e.scrollZoom.disable()},_.resolveOnRender\u003dfunction(t){var e\u003dthis.map;e.on(\"render\",(function r(){e.loaded()\u0026\u0026(e.off(\"render\",r),setTimeout(t,10))}))},_.rejectOnError\u003dfunction(t){var e\u003dthis.map;function r(){t(new Error(y.mapOnErrorMsg))}e.once(\"error\",r),e.once(\"style.error\",r),e.once(\"source.error\",r),e.once(\"tile.error\",r),e.once(\"layer.error\",r)},_.createFramework\u003dfunction(t){var e\u003dthis,r\u003de.div\u003ddocument.createElement(\"div\");r.id\u003de.uid,r.style.position\u003d\"absolute\",e.container.appendChild(r),e.xaxis\u003d{_id:\"x\",c2p:function(t){return e.project(t).x}},e.yaxis\u003d{_id:\"y\",c2p:function(t){return e.project(t).y}},e.updateFramework(t),e.mockAxis\u003d{type:\"linear\",showexponent:\"all\",exponentformat:\"B\"},s.setConvert(e.mockAxis,t)},_.initFx\u003dfunction(t,e){var r\u003dthis,n\u003dr.gd,i\u003dr.map;function a(){c.loneUnhover(e._hoverlayer)}function s(){var t\u003dr.getView();n.emit(\"plotly_relayouting\",r.getViewEditsWithDerived(t))}i.on(\"moveend\",(function(t){if(r.map){var e\u003dn._fullLayout;if(t.originalEvent||r.wheeling){var i\u003de[r.id];o.call(\"_storeDirectGUIEdit\",n.layout,e._preGUI,r.getViewEdits(i));var a\u003dr.getView();i._input.center\u003di.center\u003da.center,i._input.zoom\u003di.zoom\u003da.zoom,i._input.bearing\u003di.bearing\u003da.bearing,i._input.pitch\u003di.pitch\u003da.pitch,n.emit(\"plotly_relayout\",r.getViewEditsWithDerived(a))}t.originalEvent\u0026\u0026\"mouseup\"\u003d\u003d\u003dt.originalEvent.type?r.dragging\u003d!1:r.wheeling\u0026\u0026(r.wheeling\u003d!1),e._rehover\u0026\u0026e._rehover()}})),i.on(\"wheel\",(function(){r.wheeling\u003d!0})),i.on(\"mousemove\",(function(t){var e\u003dr.div.getBoundingClientRect(),a\u003d[t.originalEvent.offsetX,t.originalEvent.offsetY];t.target.getBoundingClientRect\u003dfunction(){return e},r.xaxis.p2c\u003dfunction(){return i.unproject(a).lng},r.yaxis.p2c\u003dfunction(){return i.unproject(a).lat},n._fullLayout._rehover\u003dfunction(){n._fullLayout._hoversubplot\u003d\u003d\u003dr.id\u0026\u0026n._fullLayout[r.id]\u0026\u0026c.hover(n,t,r.id)},c.hover(n,t,r.id),n._fullLayout._hoversubplot\u003dr.id})),i.on(\"dragstart\",(function(){r.dragging\u003d!0,a()})),i.on(\"zoomstart\",a),i.on(\"mouseout\",(function(){n._fullLayout._hoversubplot\u003dnull})),i.on(\"drag\",s),i.on(\"zoom\",s),i.on(\"dblclick\",(function(){var t\u003dn._fullLayout[r.id];o.call(\"_storeDirectGUIEdit\",n.layout,n._fullLayout._preGUI,r.getViewEdits(t));var e\u003dr.viewInitial;i.setCenter(M(e.center)),i.setZoom(e.zoom),i.setBearing(e.bearing),i.setPitch(e.pitch);var a\u003dr.getView();t._input.center\u003dt.center\u003da.center,t._input.zoom\u003dt.zoom\u003da.zoom,t._input.bearing\u003dt.bearing\u003da.bearing,t._input.pitch\u003dt.pitch\u003da.pitch,n.emit(\"plotly_doubleclick\",null),n.emit(\"plotly_relayout\",r.getViewEditsWithDerived(a))})),r.clearSelect\u003dfunction(){g(r.dragOptions),m(r.dragOptions.gd)},r.onClickInPanFn\u003dfunction(t){return function(e){var i\u003dn._fullLayout.clickmode;i.indexOf(\"select\")\u003e-1\u0026\u0026v(e.originalEvent,n,[r.xaxis],[r.yaxis],r.id,t),i.indexOf(\"event\")\u003e-1\u0026\u0026c.click(n,e.originalEvent)}}},_.updateFx\u003dfunction(t){var e\u003dthis,r\u003de.map,n\u003de.gd;if(!e.isStatic){var a,o\u003dt.dragmode;a\u003df(o)?function(t,r){(t.range\u003d{})[e.id]\u003d[c([r.xmin,r.ymin]),c([r.xmax,r.ymax])]}:function(t,r,n){(t.lassoPoints\u003d{})[e.id]\u003dn.filtered.map(c)};var s\u003de.dragOptions;e.dragOptions\u003di.extendDeep(s||{},{dragmode:t.dragmode,element:e.div,gd:n,plotinfo:{id:e.id,domain:t[e.id].domain,xaxis:e.xaxis,yaxis:e.yaxis,fillRangeItems:a},xaxes:[e.xaxis],yaxes:[e.yaxis],subplot:e.id}),r.off(\"click\",e.onClickInPanHandler),p(o)||h(o)?(r.dragPan.disable(),r.on(\"zoomstart\",e.clearSelect),e.dragOptions.prepFn\u003dfunction(t,r,n){d(t,r,n,e.dragOptions,o)},l.init(e.dragOptions)):(r.dragPan.enable(),r.off(\"zoomstart\",e.clearSelect),e.div.onmousedown\u003dnull,e.onClickInPanHandler\u003de.onClickInPanFn(e.dragOptions),r.on(\"click\",e.onClickInPanHandler))}function c(t){var r\u003de.map.unproject(t);return[r.lng,r.lat]}},_.updateFramework\u003dfunction(t){var e\u003dt[this.id].domain,r\u003dt._size,n\u003dthis.div.style;n.width\u003dr.w*(e.x[1]-e.x[0])+\"px\",n.height\u003dr.h*(e.y[1]-e.y[0])+\"px\",n.left\u003dr.l+e.x[0]*r.w+\"px\",n.top\u003dr.t+(1-e.y[1])*r.h+\"px\",this.xaxis._offset\u003dr.l+e.x[0]*r.w,this.xaxis._length\u003dr.w*(e.x[1]-e.x[0]),this.yaxis._offset\u003dr.t+(1-e.y[1])*r.h,this.yaxis._length\u003dr.h*(e.y[1]-e.y[0])},_.updateLayers\u003dfunction(t){var e,r\u003dt[this.id].layers,n\u003dthis.layerList;if(r.length!\u003d\u003dn.length){for(e\u003d0;e\u003cn.length;e++)n[e].dispose();for(n\u003dthis.layerList\u003d[],e\u003d0;e\u003cr.length;e++)n.push(x(this,e,r[e]))}else for(e\u003d0;e\u003cr.length;e++)n[e].update(r[e])},_.destroy\u003dfunction(){this.map\u0026\u0026(this.map.remove(),this.map\u003dnull,this.container.removeChild(this.div))},_.toImage\u003dfunction(){return this.map.stop(),this.map.getCanvas().toDataURL()},_.setOptions\u003dfunction(t,e,r){for(var n in r)this.map[e](t,n,r[n])},_.getMapLayers\u003dfunction(){return this.map.getStyle().layers},_.addLayer\u003dfunction(t,e){var r\u003dthis.map;if(\"string\"\u003d\u003dtypeof e){if(\"\"\u003d\u003d\u003de)return void r.addLayer(t,e);for(var n\u003dthis.getMapLayers(),a\u003d0;a\u003cn.length;a++)if(e\u003d\u003d\u003dn[a].id)return void r.addLayer(t,e);i.warn([\"Trying to add layer with *below* value\",e,\"referencing a layer that does not exist\",\"or that does not yet exist.\"].join(\" \"))}r.addLayer(t)},_.project\u003dfunction(t){return this.map.project(new n.LngLat(t[0],t[1]))},_.getView\u003dfunction(){var t\u003dthis.map,e\u003dt.getCenter(),r\u003d{lon:e.lng,lat:e.lat},n\u003dt.getCanvas(),i\u003dn.width,a\u003dn.height;return{center:r,zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch(),_derived:{coordinates:[t.unproject([0,0]).toArray(),t.unproject([i,0]).toArray(),t.unproject([i,a]).toArray(),t.unproject([0,a]).toArray()]}}},_.getViewEdits\u003dfunction(t){for(var e\u003dthis.id,r\u003d[\"center\",\"zoom\",\"bearing\",\"pitch\"],n\u003d{},i\u003d0;i\u003cr.length;i++){var a\u003dr[i];n[e+\".\"+a]\u003dt[a]}return n},_.getViewEditsWithDerived\u003dfunction(t){var e\u003dthis.id,r\u003dthis.getViewEdits(t);return r[e+\"._derived\"]\u003dt._derived,r},e.exports\u003db},{\"../../components/dragelement\":681,\"../../components/dragelement/helpers\":680,\"../../components/fx\":702,\"../../lib\":799,\"../../lib/geo_location_utils\":792,\"../../registry\":927,\"../cartesian/axes\":849,\"../cartesian/select\":869,\"./constants\":905,\"./layers\":908,\"mapbox-gl/dist/mapbox-gl-unminified\":457}],912:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){var e\u003dt.editType;return{t:{valType:\"number\",dflt:0,editType:e},r:{valType:\"number\",dflt:0,editType:e},b:{valType:\"number\",dflt:0,editType:e},l:{valType:\"number\",dflt:0,editType:e},editType:e}}},{}],913:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"d3-time-format\").timeFormatLocale,a\u003dt(\"fast-isnumeric\"),o\u003dt(\"../registry\"),s\u003dt(\"../plot_api/plot_schema\"),l\u003dt(\"../plot_api/plot_template\"),c\u003dt(\"../lib\"),u\u003dt(\"../components/color\"),f\u003dt(\"../constants/numerical\").BADNUM,h\u003dt(\"./cartesian/axis_ids\"),p\u003dt(\"./cartesian/handle_outline\").clearSelect,d\u003dt(\"./animation_attributes\"),m\u003dt(\"./frame_attributes\"),g\u003dt(\"../plots/get_data\").getModuleCalcData,v\u003dc.relinkPrivateKeys,y\u003dc._,x\u003de.exports\u003d{};c.extendFlat(x,o),x.attributes\u003dt(\"./attributes\"),x.attributes.type.values\u003dx.allTypes,x.fontAttrs\u003dt(\"./font_attributes\"),x.layoutAttributes\u003dt(\"./layout_attributes\"),x.fontWeight\u003d\"normal\";var b\u003dx.transformsRegistry,_\u003dt(\"./command\");x.executeAPICommand\u003d_.executeAPICommand,x.computeAPICommandBindings\u003d_.computeAPICommandBindings,x.manageCommandObserver\u003d_.manageCommandObserver,x.hasSimpleAPICommandBindings\u003d_.hasSimpleAPICommandBindings,x.redrawText\u003dfunction(t){return t\u003dc.getGraphDiv(t),new Promise((function(e){setTimeout((function(){t._fullLayout\u0026\u0026(o.getComponentMethod(\"annotations\",\"draw\")(t),o.getComponentMethod(\"legend\",\"draw\")(t),o.getComponentMethod(\"colorbar\",\"draw\")(t),e(x.previousPromises(t)))}),300)}))},x.resize\u003dfunction(t){var e;t\u003dc.getGraphDiv(t);var r\u003dnew Promise((function(r,n){t\u0026\u0026!c.isHidden(t)||n(new Error(\"Resize must be passed a displayed plot div element.\")),t._redrawTimer\u0026\u0026clearTimeout(t._redrawTimer),t._resolveResize\u0026\u0026(e\u003dt._resolveResize),t._resolveResize\u003dr,t._redrawTimer\u003dsetTimeout((function(){if(!t.layout||t.layout.width\u0026\u0026t.layout.height||c.isHidden(t))r(t);else{delete t.layout.width,delete t.layout.height;var e\u003dt.changed;t.autoplay\u003d!0,o.call(\"relayout\",t,{autosize:!0}).then((function(){t.changed\u003de,t._resolveResize\u003d\u003d\u003dr\u0026\u0026(delete t._resolveResize,r(t))}))}}),100)}));return e\u0026\u0026e(r),r},x.previousPromises\u003dfunction(t){if((t._promises||[]).length)return Promise.all(t._promises).then((function(){t._promises\u003d[]}))},x.addLinks\u003dfunction(t){if(t._context.showLink||t._context.showSources){var e\u003dt._fullLayout,r\u003dc.ensureSingle(e._paper,\"text\",\"js-plot-link-container\",(function(t){t.style({\"font-family\":\u0027\"Open Sans\", Arial, sans-serif\u0027,\"font-size\":\"12px\",fill:u.defaultLine,\"pointer-events\":\"all\"}).each((function(){var t\u003dn.select(this);t.append(\"tspan\").classed(\"js-link-to-tool\",!0),t.append(\"tspan\").classed(\"js-link-spacer\",!0),t.append(\"tspan\").classed(\"js-sourcelinks\",!0)}))})),i\u003dr.node(),a\u003d{y:e._paper.attr(\"height\")-9};document.body.contains(i)\u0026\u0026i.getComputedTextLength()\u003e\u003de.width-20?(a[\"text-anchor\"]\u003d\"start\",a.x\u003d5):(a[\"text-anchor\"]\u003d\"end\",a.x\u003de._paper.attr(\"width\")-7),r.attr(a);var o\u003dr.select(\".js-link-to-tool\"),s\u003dr.select(\".js-link-spacer\"),l\u003dr.select(\".js-sourcelinks\");t._context.showSources\u0026\u0026t._context.showSources(t),t._context.showLink\u0026\u0026function(t,e){e.text(\"\");var r\u003de.append(\"a\").attr({\"xlink:xlink:href\":\"#\",class:\"link--impt link--embedview\",\"font-weight\":\"bold\"}).text(t._context.linkText+\" \"+String.fromCharCode(187));if(t._context.sendData)r.on(\"click\",(function(){x.sendDataToCloud(t)}));else{var n\u003dwindow.location.pathname.split(\"/\"),i\u003dwindow.location.search;r.attr({\"xlink:xlink:show\":\"new\",\"xlink:xlink:href\":\"/\"+n[2].split(\".\")[0]+\"/\"+n[1]+i})}}(t,o),s.text(o.text()\u0026\u0026l.text()?\" - \":\"\")}},x.sendDataToCloud\u003dfunction(t){var e\u003d(window.PLOTLYENV||{}).BASE_URL||t._context.plotlyServerURL;if(e){t.emit(\"plotly_beforeexport\");var r\u003dn.select(t).append(\"div\").attr(\"id\",\"hiddenform\").style(\"display\",\"none\"),i\u003dr.append(\"form\").attr({action:e+\"/external\",method:\"post\",target:\"_blank\"});return i.append(\"input\").attr({type:\"text\",name:\"data\"}).node().value\u003dx.graphJson(t,!1,\"keepdata\"),i.node().submit(),r.remove(),t.emit(\"plotly_afterexport\"),!1}};var w\u003d[\"days\",\"shortDays\",\"months\",\"shortMonths\",\"periods\",\"dateTime\",\"date\",\"time\",\"decimal\",\"thousands\",\"grouping\",\"currency\"],T\u003d[\"year\",\"month\",\"dayMonth\",\"dayMonthYear\"];function k(t,e){var r\u003dt._context.locale;r||(r\u003d\"en-US\");var n\u003d!1,i\u003d{};function a(t){for(var r\u003d!0,a\u003d0;a\u003ce.length;a++){var o\u003de[a];i[o]||(t[o]?i[o]\u003dt[o]:r\u003d!1)}r\u0026\u0026(n\u003d!0)}for(var s\u003d0;s\u003c2;s++){for(var l\u003dt._context.locales,c\u003d0;c\u003c2;c++){var u\u003d(l[r]||{}).format;if(u\u0026\u0026(a(u),n))break;l\u003do.localeRegistry}var f\u003dr.split(\"-\")[0];if(n||f\u003d\u003d\u003dr)break;r\u003df}return n||a(o.localeRegistry.en.format),i}function M(t,e){var r\u003d{_fullLayout:e},n\u003d\"x\"\u003d\u003d\u003dt._id.charAt(0),i\u003dt._mainAxis._anchorAxis,a\u003d\"\",o\u003d\"\",s\u003d\"\";if(i\u0026\u0026(s\u003di._mainAxis._id,a\u003dn?t._id+s:s+t._id),!a||!e._plots[a]){a\u003d\"\";for(var l\u003dt._counterAxes,c\u003d0;c\u003cl.length;c++){var u\u003dl[c],f\u003dn?t._id+u:u+t._id;o||(o\u003df);var p\u003dh.getFromId(r,u);if(s\u0026\u0026p.overlaying\u003d\u003d\u003ds){a\u003df;break}}}return a||o}function A(t){var e\u003dt.transforms;if(Array.isArray(e)\u0026\u0026e.length)for(var r\u003d0;r\u003ce.length;r++){var n\u003de[r],i\u003dn._module||b[n.type];if(i\u0026\u0026i.makesData)return!0}return!1}function S(t,e,r,n){for(var i\u003dt.transforms,a\u003d[t],o\u003d0;o\u003ci.length;o++){var s\u003di[o],l\u003db[s.type];l\u0026\u0026l.transform\u0026\u0026(a\u003dl.transform(a,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return a}function E(t){return\"string\"\u003d\u003dtypeof t\u0026\u0026\"px\"\u003d\u003d\u003dt.substr(t.length-2)\u0026\u0026parseFloat(t)}function L(t){var e\u003dt.margin;if(!t._size){var r\u003dt._size\u003d{l:Math.round(e.l),r:Math.round(e.r),t:Math.round(e.t),b:Math.round(e.b),p:Math.round(e.pad)};r.w\u003dMath.round(t.width)-r.l-r.r,r.h\u003dMath.round(t.height)-r.t-r.b}t._pushmargin||(t._pushmargin\u003d{}),t._pushmarginIds||(t._pushmarginIds\u003d{})}x.supplyDefaults\u003dfunction(t,e){var r\u003de\u0026\u0026e.skipUpdateCalc,a\u003dt._fullLayout||{};if(a._skipDefaults)delete a._skipDefaults;else{var s,l\u003dt._fullLayout\u003d{},u\u003dt.layout||{},f\u003dt._fullData||[],h\u003dt._fullData\u003d[],d\u003dt.data||[],m\u003dt.calcdata||[],g\u003dt._context||{};t._transitionData||x.createTransitionData(t),l._dfltTitle\u003d{plot:y(t,\"Click to enter Plot title\"),x:y(t,\"Click to enter X axis title\"),y:y(t,\"Click to enter Y axis title\"),colorbar:y(t,\"Click to enter Colorscale title\"),annotation:y(t,\"new text\")},l._traceWord\u003dy(t,\"trace\");var b\u003dk(t,w);if(l._mapboxAccessToken\u003dg.mapboxAccessToken,a._initialAutoSizeIsDone){var _\u003da.width,M\u003da.height;x.supplyLayoutGlobalDefaults(u,l,b),u.width||(l.width\u003d_),u.height||(l.height\u003dM),x.sanitizeMargins(l)}else{x.supplyLayoutGlobalDefaults(u,l,b);var A\u003d!u.width||!u.height,S\u003dl.autosize,E\u003dg.autosizable;A\u0026\u0026(S||E)?x.plotAutoSize(t,u,l):A\u0026\u0026x.sanitizeMargins(l),!S\u0026\u0026A\u0026\u0026(u.width\u003dl.width,u.height\u003dl.height)}l._d3locale\u003dfunction(t,e){return t.decimal\u003de.charAt(0),t.thousands\u003de.charAt(1),{numberFormat:n.locale(t).numberFormat,timeFormat:i(t).utcFormat}}(b,l.separators),l._extraFormat\u003dk(t,T),l._initialAutoSizeIsDone\u003d!0,l._dataLength\u003dd.length,l._modules\u003d[],l._visibleModules\u003d[],l._basePlotModules\u003d[];var C\u003dl._subplots\u003dfunction(){var t,e,r\u003do.collectableSubplotTypes,n\u003d{};if(!r){r\u003d[];var i\u003do.subplotsRegistry;for(var a in i){var s\u003di[a].attr;if(s\u0026\u0026(r.push(a),Array.isArray(s)))for(e\u003d0;e\u003cs.length;e++)c.pushUnique(r,s[e])}}for(t\u003d0;t\u003cr.length;t++)n[r[t]]\u003d[];return n}(),P\u003dl._splomAxes\u003d{x:{},y:{}},I\u003dl._splomSubplots\u003d{};l._splomGridDflt\u003d{},l._scatterStackOpts\u003d{},l._firstScatter\u003d{},l._alignmentOpts\u003d{},l._colorAxes\u003d{},l._requestRangeslider\u003d{},l._traceUids\u003dfunction(t,e){var r,n,i\u003de.length,a\u003d[];for(r\u003d0;r\u003ct.length;r++){var o\u003dt[r]._fullInput;o!\u003d\u003dn\u0026\u0026a.push(o),n\u003do}var s\u003da.length,l\u003dnew Array(i),u\u003d{};function f(t,e){l[e]\u003dt,u[t]\u003d1}function h(t,e){if(t\u0026\u0026\"string\"\u003d\u003dtypeof t\u0026\u0026!u[t])return f(t,e),!0}for(r\u003d0;r\u003ci;r++){var p\u003de[r].uid;\"number\"\u003d\u003dtypeof p\u0026\u0026(p\u003dString(p)),h(p,r)||(r\u003cs\u0026\u0026h(a[r].uid,r)||f(c.randstr(u),r))}return l}(f,d),l._globalTransforms\u003d(t._context||{}).globalTransforms,x.supplyDataDefaults(d,h,u,l);var O\u003dObject.keys(P.x),z\u003dObject.keys(P.y);if(O.length\u003e1\u0026\u0026z.length\u003e1){for(o.getComponentMethod(\"grid\",\"sizeDefaults\")(u,l),s\u003d0;s\u003cO.length;s++)c.pushUnique(C.xaxis,O[s]);for(s\u003d0;s\u003cz.length;s++)c.pushUnique(C.yaxis,z[s]);for(var D in I)c.pushUnique(C.cartesian,D)}if(l._has\u003dx._hasPlotType.bind(l),f.length\u003d\u003d\u003dh.length)for(s\u003d0;s\u003ch.length;s++)v(h[s],f[s]);x.supplyLayoutModuleDefaults(u,l,h,t._transitionData);var R\u003dl._visibleModules,F\u003d[];for(s\u003d0;s\u003cR.length;s++){var B\u003dR[s].crossTraceDefaults;B\u0026\u0026c.pushUnique(F,B)}for(s\u003d0;s\u003cF.length;s++)F[s](h,l);l._hasOnlyLargeSploms\u003d1\u003d\u003d\u003dl._basePlotModules.length\u0026\u0026\"splom\"\u003d\u003d\u003dl._basePlotModules[0].name\u0026\u0026O.length\u003e15\u0026\u0026z.length\u003e15\u0026\u00260\u003d\u003d\u003dl.shapes.length\u0026\u00260\u003d\u003d\u003dl.images.length,x.linkSubplots(h,l,f,a),x.cleanPlot(h,l,f,a);var N\u003d!(!a._has||!a._has(\"gl2d\")),j\u003d!(!l._has||!l._has(\"gl2d\")),U\u003d!(!a._has||!a._has(\"cartesian\"))||N,V\u003d!(!l._has||!l._has(\"cartesian\"))||j;U\u0026\u0026!V?a._bgLayer.remove():V\u0026\u0026!U\u0026\u0026(l._shouldCreateBgLayer\u003d!0),a._zoomlayer\u0026\u0026!t._dragging\u0026\u0026p({_fullLayout:a}),function(t,e){var r,n\u003d[];e.meta\u0026\u0026(r\u003de._meta\u003d{meta:e.meta,layout:{meta:e.meta}});for(var i\u003d0;i\u003ct.length;i++){var a\u003dt[i];a.meta?n[a.index]\u003da._meta\u003d{meta:a.meta}:e.meta\u0026\u0026(a._meta\u003d{meta:e.meta}),e.meta\u0026\u0026(a._meta.layout\u003d{meta:e.meta})}n.length\u0026\u0026(r||(r\u003de._meta\u003d{}),r.data\u003dn)}(h,l),v(l,a),o.getComponentMethod(\"colorscale\",\"crossTraceDefaults\")(h,l),l._preGUI||(l._preGUI\u003d{}),l._tracePreGUI||(l._tracePreGUI\u003d{});var q,H\u003dl._tracePreGUI,G\u003d{};for(q in H)G[q]\u003d\"old\";for(s\u003d0;s\u003ch.length;s++)G[q\u003dh[s]._fullInput.uid]||(H[q]\u003d{}),G[q]\u003d\"new\";for(q in G)\"old\"\u003d\u003d\u003dG[q]\u0026\u0026delete H[q];L(l),o.getComponentMethod(\"rangeslider\",\"makeData\")(l),r||m.length!\u003d\u003dh.length||x.supplyDefaultsUpdateCalc(m,h)}},x.supplyDefaultsUpdateCalc\u003dfunction(t,e){for(var r\u003d0;r\u003ce.length;r++){var n\u003de[r],i\u003d(t[r]||[])[0];if(i\u0026\u0026i.trace){var a\u003di.trace;if(a._hasCalcTransform){var o,s,l,u\u003da._arrayAttrs;for(o\u003d0;o\u003cu.length;o++)s\u003du[o],l\u003dc.nestedProperty(a,s).get().slice(),c.nestedProperty(n,s).set(l)}i.trace\u003dn}}},x.createTransitionData\u003dfunction(t){t._transitionData||(t._transitionData\u003d{}),t._transitionData._frames||(t._transitionData._frames\u003d[]),t._transitionData._frameHash||(t._transitionData._frameHash\u003d{}),t._transitionData._counter||(t._transitionData._counter\u003d0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks\u003d[])},x._hasPlotType\u003dfunction(t){var e,r\u003dthis._basePlotModules||[];for(e\u003d0;e\u003cr.length;e++)if(r[e].name\u003d\u003d\u003dt)return!0;var n\u003dthis._modules||[];for(e\u003d0;e\u003cn.length;e++){var i\u003dn[e].name;if(i\u003d\u003d\u003dt)return!0;var a\u003do.modules[i];if(a\u0026\u0026a.categories[t])return!0}return!1},x.cleanPlot\u003dfunction(t,e,r,n){var i,a,o\u003dn._basePlotModules||[];for(i\u003d0;i\u003co.length;i++){var s\u003do[i];s.clean\u0026\u0026s.clean(t,e,r,n)}var l\u003dn._has\u0026\u0026n._has(\"gl\"),c\u003de._has\u0026\u0026e._has(\"gl\");l\u0026\u0026!c\u0026\u0026void 0!\u003d\u003dn._glcontainer\u0026\u0026(n._glcontainer.selectAll(\".gl-canvas\").remove(),n._glcontainer.selectAll(\".no-webgl\").remove(),n._glcanvas\u003dnull);var u\u003d!!n._infolayer;t:for(i\u003d0;i\u003cr.length;i++){var f\u003dr[i].uid;for(a\u003d0;a\u003ct.length;a++){if(f\u003d\u003d\u003dt[a].uid)continue t}u\u0026\u0026n._infolayer.select(\".cb\"+f).remove()}},x.linkSubplots\u003dfunction(t,e,r,n){var i,a,s\u003dn._plots||{},l\u003de._plots\u003d{},u\u003de._subplots,f\u003d{_fullData:t,_fullLayout:e},p\u003du.cartesian.concat(u.gl2d||[]);for(i\u003d0;i\u003cp.length;i++){var d,m\u003dp[i],g\u003ds[m],v\u003dh.getFromId(f,m,\"x\"),y\u003dh.getFromId(f,m,\"y\");for(g?d\u003dl[m]\u003dg:(d\u003dl[m]\u003d{}).id\u003dm,v._counterAxes.push(y._id),y._counterAxes.push(v._id),v._subplotsWith.push(m),y._subplotsWith.push(m),d.xaxis\u003dv,d.yaxis\u003dy,d._hasClipOnAxisFalse\u003d!1,a\u003d0;a\u003ct.length;a++){var x\u003dt[a];if(x.xaxis\u003d\u003d\u003dd.xaxis._id\u0026\u0026x.yaxis\u003d\u003d\u003dd.yaxis._id\u0026\u0026!1\u003d\u003d\u003dx.cliponaxis){d._hasClipOnAxisFalse\u003d!0;break}}}var b,_\u003dh.list(f,null,!0);for(i\u003d0;i\u003c_.length;i++){var w\u003dnull;(b\u003d_[i]).overlaying\u0026\u0026(w\u003dh.getFromId(f,b.overlaying))\u0026\u0026w.overlaying\u0026\u0026(b.overlaying\u003d!1,w\u003dnull),b._mainAxis\u003dw||b,w\u0026\u0026(b.domain\u003dw.domain.slice()),b._anchorAxis\u003d\"free\"\u003d\u003d\u003db.anchor?null:h.getFromId(f,b.anchor)}for(i\u003d0;i\u003c_.length;i++)if((b\u003d_[i])._counterAxes.sort(h.idSort),b._subplotsWith.sort(c.subplotSort),b._mainSubplot\u003dM(b,e),b._counterAxes.length\u0026\u0026(b.spikemode\u0026\u0026-1!\u003d\u003db.spikemode.indexOf(\"across\")||b.automargin\u0026\u0026b.mirror\u0026\u0026\"free\"!\u003d\u003db.anchor||o.getComponentMethod(\"rangeslider\",\"isVisible\")(b))){var T\u003d1,k\u003d0;for(a\u003d0;a\u003cb._counterAxes.length;a++){var A\u003dh.getFromId(f,b._counterAxes[a]);T\u003dMath.min(T,A.domain[0]),k\u003dMath.max(k,A.domain[1])}T\u003ck\u0026\u0026(b._counterDomainMin\u003dT,b._counterDomainMax\u003dk)}},x.clearExpandedTraceDefaultColors\u003dfunction(t){var e,r,n;for(r\u003d[],(e\u003dt._module._colorAttrs)||(t._module._colorAttrs\u003de\u003d[],s.crawl(t._module.attributes,(function(t,n,i,a){r[a]\u003dn,r.length\u003da+1,\"color\"\u003d\u003d\u003dt.valType\u0026\u0026void 0\u003d\u003d\u003dt.dflt\u0026\u0026e.push(r.join(\".\"))}))),n\u003d0;n\u003ce.length;n++){c.nestedProperty(t,\"_input.\"+e[n]).get()||c.nestedProperty(t,e[n]).set(null)}},x.supplyDataDefaults\u003dfunction(t,e,r,n){var i,a,s,u\u003dn._modules,f\u003dn._visibleModules,h\u003dn._basePlotModules,p\u003d0,d\u003d0;function m(t){e.push(t);var r\u003dt._module;r\u0026\u0026(c.pushUnique(u,r),!0\u003d\u003d\u003dt.visible\u0026\u0026c.pushUnique(f,r),c.pushUnique(h,t._module.basePlotModule),p++,!1!\u003d\u003dt._input.visible\u0026\u0026d++)}n._transformModules\u003d[];var g\u003d{},y\u003d[],b\u003d(r.template||{}).data||{},_\u003dl.traceTemplater(b);for(i\u003d0;i\u003ct.length;i++){if(s\u003dt[i],(a\u003d_.newTrace(s)).uid\u003dn._traceUids[i],x.supplyTraceDefaults(s,a,d,n,i),a.index\u003di,a._input\u003ds,a._expandedIndex\u003dp,a.transforms\u0026\u0026a.transforms.length)for(var w\u003d!1!\u003d\u003ds.visible\u0026\u0026!1\u003d\u003d\u003da.visible,T\u003dS(a,e,r,n),k\u003d0;k\u003cT.length;k++){var M\u003dT[k],A\u003d{_template:a._template,type:a.type,uid:a.uid+k};w\u0026\u0026!1\u003d\u003d\u003dM.visible\u0026\u0026delete M.visible,x.supplyTraceDefaults(M,A,p,n,i),v(A,M),A.index\u003di,A._input\u003ds,A._fullInput\u003da,A._expandedIndex\u003dp,A._expandedInput\u003dM,m(A)}else a._fullInput\u003da,a._expandedInput\u003da,m(a);o.traceIs(a,\"carpetAxis\")\u0026\u0026(g[a.carpet]\u003da),o.traceIs(a,\"carpetDependent\")\u0026\u0026y.push(i)}for(i\u003d0;i\u003cy.length;i++)if((a\u003de[y[i]]).visible){var E\u003dg[a.carpet];a._carpet\u003dE,E\u0026\u0026E.visible?(a.xaxis\u003dE.xaxis,a.yaxis\u003dE.yaxis):a.visible\u003d!1}},x.supplyAnimationDefaults\u003dfunction(t){var e;t\u003dt||{};var r\u003d{};function n(e,n){return c.coerce(t||{},r,d,e,n)}if(n(\"mode\"),n(\"direction\"),n(\"fromcurrent\"),Array.isArray(t.frame))for(r.frame\u003d[],e\u003d0;e\u003ct.frame.length;e++)r.frame[e]\u003dx.supplyAnimationFrameDefaults(t.frame[e]||{});else r.frame\u003dx.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(r.transition\u003d[],e\u003d0;e\u003ct.transition.length;e++)r.transition[e]\u003dx.supplyAnimationTransitionDefaults(t.transition[e]||{});else r.transition\u003dx.supplyAnimationTransitionDefaults(t.transition||{});return r},x.supplyAnimationFrameDefaults\u003dfunction(t){var e\u003d{};function r(r,n){return c.coerce(t||{},e,d.frame,r,n)}return r(\"duration\"),r(\"redraw\"),e},x.supplyAnimationTransitionDefaults\u003dfunction(t){var e\u003d{};function r(r,n){return c.coerce(t||{},e,d.transition,r,n)}return r(\"duration\"),r(\"easing\"),e},x.supplyFrameDefaults\u003dfunction(t){var e\u003d{};function r(r,n){return c.coerce(t,e,m,r,n)}return r(\"group\"),r(\"name\"),r(\"traces\"),r(\"baseframe\"),r(\"data\"),r(\"layout\"),e},x.supplyTraceDefaults\u003dfunction(t,e,r,n,i){var a,s\u003dn.colorway||u.defaults,l\u003ds[r%s.length];function f(r,n){return c.coerce(t,e,x.attributes,r,n)}var h\u003df(\"visible\");f(\"type\"),f(\"name\",n._traceWord+\" \"+i),f(\"uirevision\",n.uirevision);var p\u003dx.getModule(e);if(e._module\u003dp,p){var d\u003dp.basePlotModule,m\u003dd.attr,g\u003dd.attributes;if(m\u0026\u0026g){var v\u003dn._subplots,y\u003d\"\";if(h||\"gl2d\"!\u003d\u003dd.name){if(Array.isArray(m))for(a\u003d0;a\u003cm.length;a++){var b\u003dm[a],_\u003dc.coerce(t,e,g,b);v[b]\u0026\u0026c.pushUnique(v[b],_),y+\u003d_}else y\u003dc.coerce(t,e,g,m);v[d.name]\u0026\u0026c.pushUnique(v[d.name],y)}}}if(h){if(f(\"customdata\"),f(\"ids\"),f(\"meta\"),o.traceIs(e,\"showLegend\"))c.coerce(t,e,p.attributes.showlegend?p.attributes:x.attributes,\"showlegend\"),f(\"legendgroup\"),f(\"legendgrouptitle.text\")\u0026\u0026c.coerceFont(f,\"legendgrouptitle.font\",c.extendFlat({},n.font,{size:Math.round(1.1*n.font.size)})),f(\"legendrank\"),e._dfltShowLegend\u003d!0;else e._dfltShowLegend\u003d!1;p\u0026\u0026p.supplyDefaults(t,e,l,n),o.traceIs(e,\"noOpacity\")||f(\"opacity\"),o.traceIs(e,\"notLegendIsolatable\")\u0026\u0026(e.visible\u003d!!e.visible),o.traceIs(e,\"noHover\")||(e.hovertemplate||c.coerceHoverinfo(t,e,n),\"parcats\"!\u003d\u003de.type\u0026\u0026o.getComponentMethod(\"fx\",\"supplyDefaults\")(t,e,l,n)),p\u0026\u0026p.selectPoints\u0026\u0026f(\"selectedpoints\"),x.supplyTransformDefaults(t,e,n)}return e},x.hasMakesDataTransform\u003dA,x.supplyTransformDefaults\u003dfunction(t,e,r){if(e._length||A(t)){var n\u003dr._globalTransforms||[],i\u003dr._transformModules||[];if(Array.isArray(t.transforms)||0!\u003d\u003dn.length)for(var a\u003dt.transforms||[],o\u003dn.concat(a),s\u003de.transforms\u003d[],l\u003d0;l\u003co.length;l++){var u,f\u003do[l],h\u003df.type,p\u003db[h],d\u003d!(f._module\u0026\u0026f._module\u003d\u003d\u003dp),m\u003dp\u0026\u0026\"function\"\u003d\u003dtypeof p.transform;p||c.warn(\"Unrecognized transform type \"+h+\".\"),p\u0026\u0026p.supplyDefaults\u0026\u0026(d||m)?((u\u003dp.supplyDefaults(f,e,r,t)).type\u003dh,u._module\u003dp,c.pushUnique(i,p)):u\u003dc.extendFlat({},f),s.push(u)}}},x.supplyLayoutGlobalDefaults\u003dfunction(t,e,r){function n(r,n){return c.coerce(t,e,x.layoutAttributes,r,n)}var i\u003dt.template;c.isPlainObject(i)\u0026\u0026(e.template\u003di,e._template\u003di.layout,e._dataTemplate\u003di.data),n(\"autotypenumbers\");var a\u003dc.coerceFont(n,\"font\");n(\"title.text\",e._dfltTitle.plot),c.coerceFont(n,\"title.font\",{family:a.family,size:Math.round(1.4*a.size),color:a.color}),n(\"title.xref\"),n(\"title.yref\"),n(\"title.x\"),n(\"title.y\"),n(\"title.xanchor\"),n(\"title.yanchor\"),n(\"title.pad.t\"),n(\"title.pad.r\"),n(\"title.pad.b\"),n(\"title.pad.l\"),n(\"uniformtext.mode\")\u0026\u0026n(\"uniformtext.minsize\"),n(\"autosize\",!(t.width\u0026\u0026t.height)),n(\"width\"),n(\"height\"),n(\"margin.l\"),n(\"margin.r\"),n(\"margin.t\"),n(\"margin.b\"),n(\"margin.pad\"),n(\"margin.autoexpand\"),t.width\u0026\u0026t.height\u0026\u0026x.sanitizeMargins(e),o.getComponentMethod(\"grid\",\"sizeDefaults\")(t,e),n(\"paper_bgcolor\"),n(\"separators\",r.decimal+r.thousands),n(\"hidesources\"),n(\"colorway\"),n(\"datarevision\");var s\u003dn(\"uirevision\");n(\"editrevision\",s),n(\"selectionrevision\",s),o.getComponentMethod(\"modebar\",\"supplyLayoutDefaults\")(t,e),o.getComponentMethod(\"shapes\",\"supplyDrawNewShapeDefaults\")(t,e,n),n(\"meta\"),c.isPlainObject(t.transition)\u0026\u0026(n(\"transition.duration\"),n(\"transition.easing\"),n(\"transition.ordering\")),o.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\"),o.getComponentMethod(\"fx\",\"supplyLayoutGlobalDefaults\")(t,e,n)},x.plotAutoSize\u003dfunction(t,e,r){var n,i,o\u003dt._context||{},s\u003do.frameMargins,l\u003dc.isPlotDiv(t);if(l\u0026\u0026t.emit(\"plotly_autosize\"),o.fillFrame)n\u003dwindow.innerWidth,i\u003dwindow.innerHeight,document.body.style.overflow\u003d\"hidden\";else{var u\u003dl?window.getComputedStyle(t):{};if(n\u003dE(u.width)||E(u.maxWidth)||r.width,i\u003dE(u.height)||E(u.maxHeight)||r.height,a(s)\u0026\u0026s\u003e0){var f\u003d1-2*s;n\u003dMath.round(f*n),i\u003dMath.round(f*i)}}var h\u003dx.layoutAttributes.width.min,p\u003dx.layoutAttributes.height.min;n\u003ch\u0026\u0026(n\u003dh),i\u003cp\u0026\u0026(i\u003dp);var d\u003d!e.width\u0026\u0026Math.abs(r.width-n)\u003e1,m\u003d!e.height\u0026\u0026Math.abs(r.height-i)\u003e1;(m||d)\u0026\u0026(d\u0026\u0026(r.width\u003dn),m\u0026\u0026(r.height\u003di)),t._initialAutoSize||(t._initialAutoSize\u003d{width:n,height:i}),x.sanitizeMargins(r)},x.supplyLayoutModuleDefaults\u003dfunction(t,e,r,n){var i,a,s,l\u003do.componentsRegistry,u\u003de._basePlotModules,f\u003do.subplotsRegistry.cartesian;for(i in l)(s\u003dl[i]).includeBasePlot\u0026\u0026s.includeBasePlot(t,e);for(var h in u.length||u.push(f),e._has(\"cartesian\")\u0026\u0026(o.getComponentMethod(\"grid\",\"contentDefaults\")(t,e),f.finalizeSubplots(t,e)),e._subplots)e._subplots[h].sort(c.subplotSort);for(a\u003d0;a\u003cu.length;a++)(s\u003du[a]).supplyLayoutDefaults\u0026\u0026s.supplyLayoutDefaults(t,e,r);var p\u003de._modules;for(a\u003d0;a\u003cp.length;a++)(s\u003dp[a]).supplyLayoutDefaults\u0026\u0026s.supplyLayoutDefaults(t,e,r);var d\u003de._transformModules;for(a\u003d0;a\u003cd.length;a++)(s\u003dd[a]).supplyLayoutDefaults\u0026\u0026s.supplyLayoutDefaults(t,e,r,n);for(i in l)(s\u003dl[i]).supplyLayoutDefaults\u0026\u0026s.supplyLayoutDefaults(t,e,r)},x.purge\u003dfunction(t){var e\u003dt._fullLayout||{};void 0!\u003d\u003de._glcontainer\u0026\u0026(e._glcontainer.selectAll(\".gl-canvas\").remove(),e._glcontainer.remove(),e._glcanvas\u003dnull),e._modeBar\u0026\u0026e._modeBar.destroy(),t._transitionData\u0026\u0026(t._transitionData._interruptCallbacks\u0026\u0026(t._transitionData._interruptCallbacks.length\u003d0),t._transitionData._animationRaf\u0026\u0026window.cancelAnimationFrame(t._transitionData._animationRaf)),c.clearThrottle(),c.clearResponsive(t),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t._hmlumcount,delete t._hmpixcount,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._dragdata,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners\u0026\u0026t.removeAllListeners()},x.style\u003dfunction(t){var e,r\u003dt._fullLayout._visibleModules,n\u003d[];for(e\u003d0;e\u003cr.length;e++){var i\u003dr[e];i.style\u0026\u0026c.pushUnique(n,i.style)}for(e\u003d0;e\u003cn.length;e++)n[e](t)},x.sanitizeMargins\u003dfunction(t){if(t\u0026\u0026t.margin){var e,r\u003dt.width,n\u003dt.height,i\u003dt.margin,a\u003dr-(i.l+i.r),o\u003dn-(i.t+i.b);a\u003c0\u0026\u0026(e\u003d(r-1)/(i.l+i.r),i.l\u003dMath.floor(e*i.l),i.r\u003dMath.floor(e*i.r)),o\u003c0\u0026\u0026(e\u003d(n-1)/(i.t+i.b),i.t\u003dMath.floor(e*i.t),i.b\u003dMath.floor(e*i.b))}},x.clearAutoMarginIds\u003dfunction(t){t._fullLayout._pushmarginIds\u003d{}},x.allowAutoMargin\u003dfunction(t,e){t._fullLayout._pushmarginIds[e]\u003d1};x.autoMargin\u003dfunction(t,e,r){var n\u003dt._fullLayout,i\u003dn.width,a\u003dn.height,o\u003dn.margin,s\u003dc.constrain(i-o.l-o.r,2,64),l\u003dc.constrain(a-o.t-o.b,2,64),u\u003dMath.max(0,i-s),f\u003dMath.max(0,a-l),h\u003dn._pushmargin,p\u003dn._pushmarginIds;if(!1!\u003d\u003do.autoexpand){if(r){var d\u003dr.pad;if(void 0\u003d\u003d\u003dd\u0026\u0026(d\u003dMath.min(12,o.l,o.r,o.t,o.b)),u){var m\u003d(r.l+r.r)/u;m\u003e1\u0026\u0026(r.l/\u003dm,r.r/\u003dm)}if(f){var g\u003d(r.t+r.b)/f;g\u003e1\u0026\u0026(r.t/\u003dg,r.b/\u003dg)}var v\u003dvoid 0!\u003d\u003dr.xl?r.xl:r.x,y\u003dvoid 0!\u003d\u003dr.xr?r.xr:r.x,b\u003dvoid 0!\u003d\u003dr.yt?r.yt:r.y,_\u003dvoid 0!\u003d\u003dr.yb?r.yb:r.y;h[e]\u003d{l:{val:v,size:r.l+d},r:{val:y,size:r.r+d},b:{val:_,size:r.b+d},t:{val:b,size:r.t+d}},p[e]\u003d1}else delete h[e],delete p[e];if(!n._replotting)return x.doAutoMargin(t)}},x.doAutoMargin\u003dfunction(t){var e\u003dt._fullLayout,r\u003de.width,n\u003de.height;e._size||(e._size\u003d{}),L(e);var i\u003de._size,s\u003de.margin,l\u003dc.extendFlat({},i),u\u003ds.l,f\u003ds.r,p\u003ds.t,d\u003ds.b,m\u003de._pushmargin,g\u003de._pushmarginIds;if(!1!\u003d\u003de.margin.autoexpand){for(var v in m)g[v]||delete m[v];for(var y in m.base\u003d{l:{val:0,size:u},r:{val:1,size:f},t:{val:1,size:p},b:{val:0,size:d}},m){var b\u003dm[y].l||{},_\u003dm[y].b||{},w\u003db.val,T\u003db.size,k\u003d_.val,M\u003d_.size;for(var A in m){if(a(T)\u0026\u0026m[A].r){var S\u003dm[A].r.val,E\u003dm[A].r.size;if(S\u003ew){var C\u003d(T*S+(E-r)*w)/(S-w),P\u003d(E*(1-w)+(T-r)*(1-S))/(S-w);C+P\u003eu+f\u0026\u0026(u\u003dC,f\u003dP)}}if(a(M)\u0026\u0026m[A].t){var I\u003dm[A].t.val,O\u003dm[A].t.size;if(I\u003ek){var z\u003d(M*I+(O-n)*k)/(I-k),D\u003d(O*(1-k)+(M-n)*(1-I))/(I-k);z+D\u003ed+p\u0026\u0026(d\u003dz,p\u003dD)}}}}}var R\u003dc.constrain(r-s.l-s.r,2,64),F\u003dc.constrain(n-s.t-s.b,2,64),B\u003dMath.max(0,r-R),N\u003dMath.max(0,n-F);if(B){var j\u003d(u+f)/B;j\u003e1\u0026\u0026(u/\u003dj,f/\u003dj)}if(N){var U\u003d(d+p)/N;U\u003e1\u0026\u0026(d/\u003dU,p/\u003dU)}if(i.l\u003dMath.round(u),i.r\u003dMath.round(f),i.t\u003dMath.round(p),i.b\u003dMath.round(d),i.p\u003dMath.round(s.pad),i.w\u003dMath.round(r)-i.l-i.r,i.h\u003dMath.round(n)-i.t-i.b,!e._replotting\u0026\u0026x.didMarginChange(l,i)){\"_redrawFromAutoMarginCount\"in e?e._redrawFromAutoMarginCount++:e._redrawFromAutoMarginCount\u003d1;var V\u003d3*(1+Object.keys(g).length);if(e._redrawFromAutoMarginCount\u003cV)return o.call(\"_doPlot\",t);e._size\u003dl,c.warn(\"Too many auto-margin redraws.\")}!function(t){var e\u003dh.list(t,\"\",!0);[\"_adjustTickLabelsOverflow\",\"_hideCounterAxisInsideTickLabels\"].forEach((function(t){for(var r\u003d0;r\u003ce.length;r++){var n\u003de[r][t];n\u0026\u0026n()}}))}(t)};var C\u003d[\"l\",\"r\",\"t\",\"b\",\"p\",\"w\",\"h\"];function P(t,e,r){var n\u003d!1;var i\u003d[x.previousPromises,function(){if(t._transitionData)return t._transitioning\u003d!1,function(t){var e\u003dPromise.resolve();if(!t)return e;for(;t.length;)e\u003de.then(t.shift());return e}(t._transitionData._interruptCallbacks)},r.prepareFn,x.rehover,function(){return t.emit(\"plotly_transitioning\",[]),new Promise((function(i){t._transitioning\u003d!0,e.duration\u003e0\u0026\u0026(t._transitioningWithDuration\u003d!0),t._transitionData._interruptCallbacks.push((function(){n\u003d!0})),r.redraw\u0026\u0026t._transitionData._interruptCallbacks.push((function(){return o.call(\"redraw\",t)})),t._transitionData._interruptCallbacks.push((function(){t.emit(\"plotly_transitioninterrupted\",[])}));var a\u003d0,s\u003d0;function l(){return a++,function(){s++,n||s!\u003d\u003da||function(e){if(!t._transitionData)return;(function(t){if(t)for(;t.length;)t.shift()})(t._transitionData._interruptCallbacks),Promise.resolve().then((function(){if(r.redraw)return o.call(\"redraw\",t)})).then((function(){t._transitioning\u003d!1,t._transitioningWithDuration\u003d!1,t.emit(\"plotly_transitioned\",[])})).then(e)}(i)}}r.runFn(l),setTimeout(l())}))}],a\u003dc.syncOrAsync(i,t);return a\u0026\u0026a.then||(a\u003dPromise.resolve()),a.then((function(){return t}))}x.didMarginChange\u003dfunction(t,e){for(var r\u003d0;r\u003cC.length;r++){var n\u003dC[r],i\u003dt[n],o\u003de[n];if(!a(i)||Math.abs(o-i)\u003e1)return!0}return!1},x.graphJson\u003dfunction(t,e,r,n,i,a){(i\u0026\u0026e\u0026\u0026!t._fullData||i\u0026\u0026!e\u0026\u0026!t._fullLayout)\u0026\u0026x.supplyDefaults(t);var o\u003di?t._fullData:t.data,s\u003di?t._fullLayout:t.layout,l\u003d(t._transitionData||{})._frames;function u(t,e){if(\"function\"\u003d\u003dtypeof t)return e?\"_function_\":null;if(c.isPlainObject(t)){var n,i\u003d{};return Object.keys(t).sort().forEach((function(a){if(-1\u003d\u003d\u003d[\"_\",\"[\"].indexOf(a.charAt(0)))if(\"function\"!\u003dtypeof t[a]){if(\"keepdata\"\u003d\u003d\u003dr){if(\"src\"\u003d\u003d\u003da.substr(a.length-3))return}else if(\"keepstream\"\u003d\u003d\u003dr){if(\"string\"\u003d\u003dtypeof(n\u003dt[a+\"src\"])\u0026\u0026n.indexOf(\":\")\u003e0\u0026\u0026!c.isPlainObject(t.stream))return}else if(\"keepall\"!\u003d\u003dr\u0026\u0026\"string\"\u003d\u003dtypeof(n\u003dt[a+\"src\"])\u0026\u0026n.indexOf(\":\")\u003e0)return;i[a]\u003du(t[a],e)}else e\u0026\u0026(i[a]\u003d\"_function\")})),i}return Array.isArray(t)?t.map((function(t){return u(t,e)})):c.isTypedArray(t)?c.simpleMap(t,c.identity):c.isJSDate(t)?c.ms2DateTimeLocal(+t):t}var f\u003d{data:(o||[]).map((function(t){var r\u003du(t);return e\u0026\u0026delete r.fit,r}))};if(!e\u0026\u0026(f.layout\u003du(s),i)){var h\u003ds._size;f.layout.computed\u003d{margin:{b:h.b,l:h.l,r:h.r,t:h.t}}}return l\u0026\u0026(f.frames\u003du(l)),a\u0026\u0026(f.config\u003du(t._context,!0)),\"object\"\u003d\u003d\u003dn?f:JSON.stringify(f)},x.modifyFrames\u003dfunction(t,e){var r,n,i,a\u003dt._transitionData._frames,o\u003dt._transitionData._frameHash;for(r\u003d0;r\u003ce.length;r++)switch((n\u003de[r]).type){case\"replace\":i\u003dn.value;var s\u003d(a[n.index]||{}).name,l\u003di.name;a[n.index]\u003do[l]\u003di,l!\u003d\u003ds\u0026\u0026(delete o[s],o[l]\u003di);break;case\"insert\":o[(i\u003dn.value).name]\u003di,a.splice(n.index,0,i);break;case\"delete\":delete o[(i\u003da[n.index]).name],a.splice(n.index,1)}return Promise.resolve()},x.computeFrame\u003dfunction(t,e){var r,n,i,a,o\u003dt._transitionData._frameHash;if(!e)throw new Error(\"computeFrame must be given a string frame name\");var s\u003do[e.toString()];if(!s)return!1;for(var l\u003d[s],c\u003d[s.name];s.baseframe\u0026\u0026(s\u003do[s.baseframe.toString()])\u0026\u0026-1\u003d\u003d\u003dc.indexOf(s.name);)l.push(s),c.push(s.name);for(var u\u003d{};s\u003dl.pop();)if(s.layout\u0026\u0026(u.layout\u003dx.extendLayout(u.layout,s.layout)),s.data){if(u.data||(u.data\u003d[]),!(n\u003ds.traces))for(n\u003d[],r\u003d0;r\u003cs.data.length;r++)n[r]\u003dr;for(u.traces||(u.traces\u003d[]),r\u003d0;r\u003cs.data.length;r++)null!\u003d(i\u003dn[r])\u0026\u0026(-1\u003d\u003d\u003d(a\u003du.traces.indexOf(i))\u0026\u0026(a\u003du.data.length,u.traces[a]\u003di),u.data[a]\u003dx.extendTrace(u.data[a],s.data[r]))}return u},x.recomputeFrameHash\u003dfunction(t){for(var e\u003dt._transitionData._frameHash\u003d{},r\u003dt._transitionData._frames,n\u003d0;n\u003cr.length;n++){var i\u003dr[n];i\u0026\u0026i.name\u0026\u0026(e[i.name]\u003di)}},x.extendObjectWithContainers\u003dfunction(t,e,r){var n,i,a,o,s,l,u,f\u003dc.extendDeepNoArrays({},e||{}),h\u003dc.expandObjectPaths(f),p\u003d{};if(r\u0026\u0026r.length)for(a\u003d0;a\u003cr.length;a++)void 0\u003d\u003d\u003d(i\u003d(n\u003dc.nestedProperty(h,r[a])).get())?c.nestedProperty(p,r[a]).set(null):(n.set(null),c.nestedProperty(p,r[a]).set(i));if(t\u003dc.extendDeepNoArrays(t||{},h),r\u0026\u0026r.length)for(a\u003d0;a\u003cr.length;a++)if(l\u003dc.nestedProperty(p,r[a]).get()){for(u\u003d(s\u003dc.nestedProperty(t,r[a])).get(),Array.isArray(u)||(u\u003d[],s.set(u)),o\u003d0;o\u003cl.length;o++){var d\u003dl[o];u[o]\u003dnull\u003d\u003d\u003dd?null:x.extendObjectWithContainers(u[o],d)}s.set(u)}return t},x.dataArrayContainers\u003d[\"transforms\",\"dimensions\"],x.layoutArrayContainers\u003do.layoutArrayContainers,x.extendTrace\u003dfunction(t,e){return x.extendObjectWithContainers(t,e,x.dataArrayContainers)},x.extendLayout\u003dfunction(t,e){return x.extendObjectWithContainers(t,e,x.layoutArrayContainers)},x.transition\u003dfunction(t,e,r,n,i,a){var o\u003d{redraw:i.redraw},s\u003d{},l\u003d[];return o.prepareFn\u003dfunction(){for(var i\u003dArray.isArray(e)?e.length:0,a\u003dn.slice(0,i),o\u003d0;o\u003ca.length;o++){var u\u003da[o],f\u003dt._fullData[u]._module;if(f){if(f.animatable){var h\u003df.basePlotModule.name;s[h]||(s[h]\u003d[]),s[h].push(u)}t.data[a[o]]\u003dx.extendTrace(t.data[a[o]],e[o])}}var p\u003dc.expandObjectPaths(c.extendDeepNoArrays({},r)),d\u003d/^[xy]axis[0-9]*$/;for(var m in p)d.test(m)\u0026\u0026delete p[m].range;x.extendLayout(t.layout,p),delete t.calcdata,x.supplyDefaults(t),x.doCalcdata(t);var g\u003dc.expandObjectPaths(r);if(g){var v\u003dt._fullLayout._plots;for(var y in v){var b\u003dv[y],_\u003db.xaxis,w\u003db.yaxis,T\u003d_.range.slice(),k\u003dw.range.slice(),M\u003dnull,A\u003dnull,S\u003dnull,E\u003dnull;Array.isArray(g[_._name+\".range\"])?M\u003dg[_._name+\".range\"].slice():Array.isArray((g[_._name]||{}).range)\u0026\u0026(M\u003dg[_._name].range.slice()),Array.isArray(g[w._name+\".range\"])?A\u003dg[w._name+\".range\"].slice():Array.isArray((g[w._name]||{}).range)\u0026\u0026(A\u003dg[w._name].range.slice()),T\u0026\u0026M\u0026\u0026(_.r2l(T[0])!\u003d\u003d_.r2l(M[0])||_.r2l(T[1])!\u003d\u003d_.r2l(M[1]))\u0026\u0026(S\u003d{xr0:T,xr1:M}),k\u0026\u0026A\u0026\u0026(w.r2l(k[0])!\u003d\u003dw.r2l(A[0])||w.r2l(k[1])!\u003d\u003dw.r2l(A[1]))\u0026\u0026(E\u003d{yr0:k,yr1:A}),(S||E)\u0026\u0026l.push(c.extendFlat({plotinfo:b},S,E))}}return Promise.resolve()},o.runFn\u003dfunction(e){var n,i,o\u003dt._fullLayout._basePlotModules,u\u003dl.length;if(r)for(i\u003d0;i\u003co.length;i++)o[i].transitionAxes\u0026\u0026o[i].transitionAxes(t,l,a,e);for(var f in u?((n\u003dc.extendFlat({},a)).duration\u003d0,delete s.cartesian):n\u003da,s){var h\u003ds[f];t._fullData[h[0]]._module.basePlotModule.plot(t,h,n,e)}},P(t,a,o)},x.transitionFromReact\u003dfunction(t,e,r,n){var i\u003dt._fullLayout,a\u003di.transition,o\u003d{},s\u003d[];return o.prepareFn\u003dfunction(){var t\u003di._plots;for(var a in o.redraw\u003d!1,\"some\"\u003d\u003d\u003de.anim\u0026\u0026(o.redraw\u003d!0),\"some\"\u003d\u003d\u003dr.anim\u0026\u0026(o.redraw\u003d!0),t){var l\u003dt[a],u\u003dl.xaxis,f\u003dl.yaxis,h\u003dn[u._name].range.slice(),p\u003dn[f._name].range.slice(),d\u003du.range.slice(),m\u003df.range.slice();u.setScale(),f.setScale();var g\u003dnull,v\u003dnull;u.r2l(h[0])\u003d\u003d\u003du.r2l(d[0])\u0026\u0026u.r2l(h[1])\u003d\u003d\u003du.r2l(d[1])||(g\u003d{xr0:h,xr1:d}),f.r2l(p[0])\u003d\u003d\u003df.r2l(m[0])\u0026\u0026f.r2l(p[1])\u003d\u003d\u003df.r2l(m[1])||(v\u003d{yr0:p,yr1:m}),(g||v)\u0026\u0026s.push(c.extendFlat({plotinfo:l},g,v))}return Promise.resolve()},o.runFn\u003dfunction(r){for(var n,i,o,l\u003dt._fullData,u\u003dt._fullLayout._basePlotModules,f\u003d[],h\u003d0;h\u003cl.length;h++)f.push(h);function p(){if(t._fullLayout)for(var e\u003d0;e\u003cu.length;e++)u[e].transitionAxes\u0026\u0026u[e].transitionAxes(t,s,n,r)}function d(){if(t._fullLayout)for(var e\u003d0;e\u003cu.length;e++)u[e].plot(t,o,i,r)}s.length\u0026\u0026e.anim?\"traces first\"\u003d\u003d\u003da.ordering?(n\u003dc.extendFlat({},a,{duration:0}),o\u003df,i\u003da,setTimeout(p,a.duration),d()):(n\u003da,o\u003dnull,i\u003dc.extendFlat({},a,{duration:0}),setTimeout(d,n.duration),p()):s.length?(n\u003da,p()):e.anim\u0026\u0026(o\u003df,i\u003da,d())},P(t,a,o)},x.doCalcdata\u003dfunction(t,e){var r,n,i,a,l\u003dh.list(t),u\u003dt._fullData,p\u003dt._fullLayout,d\u003dnew Array(u.length),m\u003d(t.calcdata||[]).slice();for(t.calcdata\u003dd,p._numBoxes\u003d0,p._numViolins\u003d0,p._violinScaleGroupStats\u003d{},t._hmpixcount\u003d0,t._hmlumcount\u003d0,p._piecolormap\u003d{},p._sunburstcolormap\u003d{},p._treemapcolormap\u003d{},p._iciclecolormap\u003d{},p._funnelareacolormap\u003d{},i\u003d0;i\u003cu.length;i++)Array.isArray(e)\u0026\u0026-1\u003d\u003d\u003de.indexOf(i)\u0026\u0026(d[i]\u003dm[i]);for(i\u003d0;i\u003cu.length;i++)(r\u003du[i])._arrayAttrs\u003ds.findArrayAttributes(r),r._extremes\u003d{};var g\u003dp._subplots.polar||[];for(i\u003d0;i\u003cg.length;i++)l.push(p[g[i]].radialaxis,p[g[i]].angularaxis);for(var v in p._colorAxes){var y\u003dp[v];!1!\u003d\u003dy.cauto\u0026\u0026(delete y.cmin,delete y.cmax)}var x\u003d!1;function _(e){if(r\u003du[e],n\u003dr._module,!0\u003d\u003d\u003dr.visible\u0026\u0026r.transforms){if(n\u0026\u0026n.calc){var i\u003dn.calc(t,r);i[0]\u0026\u0026i[0].t\u0026\u0026i[0].t._scene\u0026\u0026delete i[0].t._scene.dirty}for(a\u003d0;a\u003cr.transforms.length;a++){var o\u003dr.transforms[a];(n\u003db[o.type])\u0026\u0026n.calcTransform\u0026\u0026(r._hasCalcTransform\u003d!0,x\u003d!0,n.calcTransform(t,r,o))}}}function w(e,i){if(r\u003du[e],!!(n\u003dr._module).isContainer\u003d\u003d\u003di){var o\u003d[];if(!0\u003d\u003d\u003dr.visible\u0026\u00260!\u003d\u003dr._length){delete r._indexToPoints;var s\u003dr.transforms||[];for(a\u003ds.length-1;a\u003e\u003d0;a--)if(s[a].enabled){r._indexToPoints\u003ds[a]._indexToPoints;break}n\u0026\u0026n.calc\u0026\u0026(o\u003dn.calc(t,r))}Array.isArray(o)\u0026\u0026o[0]||(o\u003d[{x:f,y:f}]),o[0].t||(o[0].t\u003d{}),o[0].trace\u003dr,d[e]\u003do}}for(O(l,u,p),i\u003d0;i\u003cu.length;i++)w(i,!0);for(i\u003d0;i\u003cu.length;i++)_(i);for(x\u0026\u0026O(l,u,p),i\u003d0;i\u003cu.length;i++)w(i,!0);for(i\u003d0;i\u003cu.length;i++)w(i,!1);z(t);var T\u003dfunction(t,e){var r,n,i,a,s,l\u003d[];function u(t,r,n){var i\u003dr._id.charAt(0);if(\"histogram2dcontour\"\u003d\u003d\u003dt){var a\u003dr._counterAxes[0],o\u003dh.getFromId(e,a),s\u003d\"x\"\u003d\u003d\u003di||\"x\"\u003d\u003d\u003da\u0026\u0026\"category\"\u003d\u003d\u003do.type,l\u003d\"y\"\u003d\u003d\u003di||\"y\"\u003d\u003d\u003da\u0026\u0026\"category\"\u003d\u003d\u003do.type;return function(t,e){return 0\u003d\u003d\u003dt||0\u003d\u003d\u003de||s\u0026\u0026t\u003d\u003d\u003dn[e].length-1||l\u0026\u0026e\u003d\u003d\u003dn.length-1?-1:(\"y\"\u003d\u003d\u003di?e:t)-1}}return function(t,e){return\"y\"\u003d\u003d\u003di?e:t}}var f\u003d{min:function(t){return c.aggNums(Math.min,null,t)},max:function(t){return c.aggNums(Math.max,null,t)},sum:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},total:function(t){return c.aggNums((function(t,e){return t+e}),null,t)},mean:function(t){return c.mean(t)},median:function(t){return c.median(t)}};for(r\u003d0;r\u003ct.length;r++){var p\u003dt[r];if(\"category\"\u003d\u003d\u003dp.type){var d\u003dp.categoryorder.match(I);if(d){var m\u003dd[1],g\u003dd[2],v\u003dp._id.charAt(0),y\u003d\"x\"\u003d\u003d\u003dv,x\u003d[];for(n\u003d0;n\u003cp._categories.length;n++)x.push([p._categories[n],[]]);for(n\u003d0;n\u003cp._traceIndices.length;n++){var b\u003dp._traceIndices[n],_\u003de._fullData[b];if(!0\u003d\u003d\u003d_.visible){var w\u003d_.type;o.traceIs(_,\"histogram\")\u0026\u0026(delete _._xautoBinFinished,delete _._yautoBinFinished);var T\u003d\"splom\"\u003d\u003d\u003dw,k\u003d\"scattergl\"\u003d\u003d\u003dw,M\u003de.calcdata[b];for(i\u003d0;i\u003cM.length;i++){var A,S,E\u003dM[i];if(T){var L\u003d_._axesDim[p._id];if(!y){var C\u003d_._diag[L][0];C\u0026\u0026(p\u003de._fullLayout[h.id2name(C)])}var P\u003dE.trace.dimensions[L].values;for(a\u003d0;a\u003cP.length;a++)for(A\u003dp._categoriesMap[P[a]],s\u003d0;s\u003cE.trace.dimensions.length;s++)if(s!\u003d\u003dL){var O\u003dE.trace.dimensions[s];x[A][1].push(O.values[a])}}else if(k){for(a\u003d0;a\u003cE.t.x.length;a++)y?(A\u003dE.t.x[a],S\u003dE.t.y[a]):(A\u003dE.t.y[a],S\u003dE.t.x[a]),x[A][1].push(S);E.t\u0026\u0026E.t._scene\u0026\u0026delete E.t._scene.dirty}else if(E.hasOwnProperty(\"z\")){S\u003dE.z;var z\u003du(_.type,p,S);for(a\u003d0;a\u003cS.length;a++)for(s\u003d0;s\u003cS[a].length;s++)(A\u003dz(s,a))+1\u0026\u0026x[A][1].push(S[a][s])}else for(void 0\u003d\u003d\u003d(A\u003dE.p)\u0026\u0026(A\u003dE[v]),void 0\u003d\u003d\u003d(S\u003dE.s)\u0026\u0026(S\u003dE.v),void 0\u003d\u003d\u003dS\u0026\u0026(S\u003dy?E.y:E.x),Array.isArray(S)||(S\u003dvoid 0\u003d\u003d\u003dS?[]:[S]),a\u003d0;a\u003cS.length;a++)x[A][1].push(S[a])}}}p._categoriesValue\u003dx;var D\u003d[];for(n\u003d0;n\u003cx.length;n++)D.push([x[n][0],f[m](x[n][1])]);D.sort((function(t,e){return t[1]-e[1]})),p._categoriesAggregatedValue\u003dD,p._initialCategories\u003dD.map((function(t){return t[0]})),\"descending\"\u003d\u003d\u003dg\u0026\u0026p._initialCategories.reverse(),l\u003dl.concat(p.sortByInitialCategories())}}}return l}(l,t);if(T.length){for(p._numBoxes\u003d0,p._numViolins\u003d0,i\u003d0;i\u003cT.length;i++)w(T[i],!0);for(i\u003d0;i\u003cT.length;i++)w(T[i],!1);z(t)}o.getComponentMethod(\"fx\",\"calc\")(t),o.getComponentMethod(\"errorbars\",\"calc\")(t)};var I\u003d/(total|sum|min|max|mean|median) (ascending|descending)/;function O(t,e,r){var n\u003d{};function i(t){t.clearCalc(),\"multicategory\"\u003d\u003d\u003dt.type\u0026\u0026t.setupMultiCategory(e),n[t._id]\u003d1}c.simpleMap(t,i);for(var a\u003dr._axisMatchGroups||[],o\u003d0;o\u003ca.length;o++)for(var s in a[o])n[s]||i(r[h.id2name(s)])}function z(t){var e,r,n,i\u003dt._fullLayout,a\u003di._visibleModules,o\u003d{};for(r\u003d0;r\u003ca.length;r++){var s\u003da[r],l\u003ds.crossTraceCalc;if(l){var u\u003ds.basePlotModule.name;o[u]?c.pushUnique(o[u],l):o[u]\u003d[l]}}for(n in o){var f\u003do[n],h\u003di._subplots[n];if(Array.isArray(h))for(e\u003d0;e\u003ch.length;e++){var p\u003dh[e],d\u003d\"cartesian\"\u003d\u003d\u003dn?i._plots[p]:i[p];for(r\u003d0;r\u003cf.length;r++)f[r](t,d,p)}else for(r\u003d0;r\u003cf.length;r++)f[r](t)}}x.rehover\u003dfunction(t){t._fullLayout._rehover\u0026\u0026t._fullLayout._rehover()},x.redrag\u003dfunction(t){t._fullLayout._redrag\u0026\u0026t._fullLayout._redrag()},x.generalUpdatePerTraceModule\u003dfunction(t,e,r,n){var i,a\u003de.traceHash,o\u003d{};for(i\u003d0;i\u003cr.length;i++){var s\u003dr[i],l\u003ds[0].trace;l.visible\u0026\u0026(o[l.type]\u003do[l.type]||[],o[l.type].push(s))}for(var u in a)if(!o[u]){var f\u003da[u][0];f[0].trace.visible\u003d!1,o[u]\u003d[f]}for(var h in o){var p\u003do[h];p[0][0].trace._module.plot(t,e,c.filterVisible(p),n)}e.traceHash\u003do},x.plotBasePlot\u003dfunction(t,e,r,n,i){var a\u003do.getModule(t),s\u003dg(e.calcdata,a)[0];a.plot(e,s,n,i)},x.cleanBasePlot\u003dfunction(t,e,r,n,i){var a\u003di._has\u0026\u0026i._has(t),o\u003dr._has\u0026\u0026r._has(t);a\u0026\u0026!o\u0026\u0026i[\"_\"+t+\"layer\"].selectAll(\"g.trace\").remove()}},{\"../components/color\":662,\"../constants/numerical\":775,\"../lib\":799,\"../plot_api/plot_schema\":837,\"../plot_api/plot_template\":838,\"../plots/get_data\":887,\"../registry\":927,\"./animation_attributes\":843,\"./attributes\":845,\"./cartesian/axis_ids\":853,\"./cartesian/handle_outline\":860,\"./command\":876,\"./font_attributes\":878,\"./frame_attributes\":879,\"./layout_attributes\":904,\"@plotly/d3\":58,\"d3-time-format\":172,\"fast-isnumeric\":245}],914:[function(t,e,r){\"use strict\";e.exports\u003d{attr:\"subplot\",name:\"polar\",axisNames:[\"angularaxis\",\"radialaxis\"],axisName2dataArray:{angularaxis:\"theta\",radialaxis:\"r\"},layerNames:[\"draglayer\",\"plotbg\",\"backplot\",\"angular-grid\",\"radial-grid\",\"frontplot\",\"angular-line\",\"radial-line\",\"angular-axis\",\"radial-axis\"],radialDragBoxSize:50,angularDragBoxSize:30,cornerLen:25,cornerHalfWidth:2,MINDRAG:8,MINZOOM:20,OFFEDGE:20}},{}],915:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../lib/polygon\").tester,a\u003dn.findIndexOfMin,o\u003dn.isAngleInsideSector,s\u003dn.angleDelta,l\u003dn.angleDist;function c(t,e,r,n){var i,a,o\u003dn[0],s\u003dn[1],l\u003df(Math.sin(e)-Math.sin(t)),c\u003df(Math.cos(e)-Math.cos(t)),u\u003dMath.tan(r),h\u003df(1/u),p\u003dl/c,d\u003ds-p*o;return h?l\u0026\u0026c?a\u003du*(i\u003dd/(u-p)):c?(i\u003ds*h,a\u003ds):(i\u003do,a\u003do*u):l\u0026\u0026c?(i\u003d0,a\u003dd):c?(i\u003d0,a\u003ds):i\u003da\u003dNaN,[i,a]}function u(t,e,r,i){return n.isFullCircle([e,r])?function(t,e){var r,n\u003de.length,i\u003dnew Array(n+1);for(r\u003d0;r\u003cn;r++){var a\u003de[r];i[r]\u003d[t*Math.cos(a),t*Math.sin(a)]}return i[r]\u003di[0].slice(),i}(t,i):function(t,e,r,i){var s,u,f\u003di.length,h\u003d[];function p(e){return[t*Math.cos(e),t*Math.sin(e)]}function d(t,e,r){return c(t,e,r,p(t))}function m(t){return n.mod(t,f)}function g(t){return o(t,[e,r])}var v\u003da(i,(function(t){return g(t)?l(t,e):1/0})),y\u003dd(i[v],i[m(v-1)],e);for(h.push(y),s\u003dv,u\u003d0;u\u003cf;s++,u++){var x\u003di[m(s)];if(!g(x))break;h.push(p(x))}var b\u003da(i,(function(t){return g(t)?l(t,r):1/0})),_\u003dd(i[b],i[m(b+1)],r);return h.push(_),h.push([0,0]),h.push(h[0].slice()),h}(t,e,r,i)}function f(t){return Math.abs(t)\u003e1e-10?t:0}function h(t,e,r){e\u003de||0,r\u003dr||0;for(var n\u003dt.length,i\u003dnew Array(n),a\u003d0;a\u003cn;a++){var o\u003dt[a];i[a]\u003d[e+o[0],r-o[1]]}return i}e.exports\u003d{isPtInsidePolygon:function(t,e,r,n,a){if(!o(e,n))return!1;var s,l;r[0]\u003cr[1]?(s\u003dr[0],l\u003dr[1]):(s\u003dr[1],l\u003dr[0]);var c\u003di(u(s,n[0],n[1],a)),f\u003di(u(l,n[0],n[1],a)),h\u003d[t*Math.cos(e),t*Math.sin(e)];return f.contains(h)\u0026\u0026!c.contains(h)},findPolygonOffset:function(t,e,r,n){for(var i\u003d1/0,a\u003d1/0,o\u003du(t,e,r,n),s\u003d0;s\u003co.length;s++){var l\u003do[s];i\u003dMath.min(i,l[0]),a\u003dMath.min(a,-l[1])}return[i,a]},findEnclosingVertexAngles:function(t,e){var r\u003da(e,(function(e){var r\u003ds(e,t);return r\u003e0?r:1/0})),i\u003dn.mod(r+1,e.length);return[e[r],e[i]]},findIntersectionXY:c,findXYatLength:function(t,e,r,n){var i\u003d-e*r,a\u003de*e+1,o\u003d2*(e*i-r),s\u003di*i+r*r-t*t,l\u003dMath.sqrt(o*o-4*a*s),c\u003d(-o+l)/(2*a),u\u003d(-o-l)/(2*a);return[[c,e*c+i+n],[u,e*u+i+n]]},clampTiny:f,pathPolygon:function(t,e,r,n,i,a){return\"M\"+h(u(t,e,r,n),i,a).join(\"L\")},pathPolygonAnnulus:function(t,e,r,n,i,a,o){var s,l;t\u003ce?(s\u003dt,l\u003de):(s\u003de,l\u003dt);var c\u003dh(u(s,r,n,i),a,o);return\"M\"+h(u(l,r,n,i),a,o).reverse().join(\"L\")+\"M\"+c.join(\"L\")}}},{\"../../lib\":799,\"../../lib/polygon\":811}],916:[function(t,e,r){\"use strict\";var n\u003dt(\"../get_data\").getSubplotCalcData,i\u003dt(\"../../lib\").counterRegex,a\u003dt(\"./polar\"),o\u003dt(\"./constants\"),s\u003do.attr,l\u003do.name,c\u003di(l),u\u003d{};u[s]\u003d{valType:\"subplotid\",dflt:l,editType:\"calc\"},e.exports\u003d{attr:s,name:l,idRoot:l,idRegex:c,attrRegex:c,attributes:u,layoutAttributes:t(\"./layout_attributes\"),supplyLayoutDefaults:t(\"./layout_defaults\"),plot:function(t){for(var e\u003dt._fullLayout,r\u003dt.calcdata,i\u003de._subplots[l],o\u003d0;o\u003ci.length;o++){var s\u003di[o],c\u003dn(r,l,s),u\u003de[s]._subplot;u||(u\u003da(t,s),e[s]._subplot\u003du),u.plot(c,e,t._promises)}},clean:function(t,e,r,n){for(var i\u003dn._subplots[l]||[],a\u003dn._has\u0026\u0026n._has(\"gl\"),o\u003de._has\u0026\u0026e._has(\"gl\"),s\u003da\u0026\u0026!o,c\u003d0;c\u003ci.length;c++){var u\u003di[c],f\u003dn[u]._subplot;if(!e[u]\u0026\u0026f)for(var h in f.framework.remove(),f.layers[\"radial-axis-title\"].remove(),f.clipPaths)f.clipPaths[h].remove();s\u0026\u0026f._scene\u0026\u0026(f._scene.destroy(),f._scene\u003dnull)}},toSVG:t(\"../cartesian\").toSVG}},{\"../../lib\":799,\"../cartesian\":863,\"../get_data\":887,\"./constants\":914,\"./layout_attributes\":917,\"./layout_defaults\":918,\"./polar\":919}],917:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color/attributes\"),i\u003dt(\"../cartesian/layout_attributes\"),a\u003dt(\"../domain\").attributes,o\u003dt(\"../../lib\").extendFlat,s\u003dt(\"../../plot_api/edit_types\").overrideAll,l\u003ds({color:i.color,showline:o({},i.showline,{dflt:!0}),linecolor:i.linecolor,linewidth:i.linewidth,showgrid:o({},i.showgrid,{dflt:!0}),gridcolor:i.gridcolor,gridwidth:i.gridwidth},\"plot\",\"from-root\"),c\u003ds({tickmode:i.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,showtickprefix:i.showtickprefix,tickprefix:i.tickprefix,showticksuffix:i.showticksuffix,ticksuffix:i.ticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,minexponent:i.minexponent,separatethousands:i.separatethousands,tickfont:i.tickfont,tickangle:i.tickangle,tickformat:i.tickformat,tickformatstops:i.tickformatstops,layer:i.layer},\"plot\",\"from-root\"),u\u003d{visible:o({},i.visible,{dflt:!0}),type:o({},i.type,{values:[\"-\",\"linear\",\"log\",\"date\",\"category\"]}),autotypenumbers:i.autotypenumbers,autorange:o({},i.autorange,{editType:\"plot\"}),rangemode:{valType:\"enumerated\",values:[\"tozero\",\"nonnegative\",\"normal\"],dflt:\"tozero\",editType:\"calc\"},range:o({},i.range,{items:[{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}},{valType:\"any\",editType:\"plot\",impliedEdits:{\"^autorange\":!1}}],editType:\"plot\"}),categoryorder:i.categoryorder,categoryarray:i.categoryarray,angle:{valType:\"angle\",editType:\"plot\"},side:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"],dflt:\"clockwise\",editType:\"plot\"},title:{text:o({},i.title.text,{editType:\"plot\",dflt:\"\"}),font:o({},i.title.font,{editType:\"plot\"}),editType:\"plot\"},hoverformat:i.hoverformat,uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\",_deprecated:{title:i._deprecated.title,titlefont:i._deprecated.titlefont}};o(u,l,c);var f\u003d{visible:o({},i.visible,{dflt:!0}),type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"category\"],dflt:\"-\",editType:\"calc\",_noTemplating:!0},autotypenumbers:i.autotypenumbers,categoryorder:i.categoryorder,categoryarray:i.categoryarray,thetaunit:{valType:\"enumerated\",values:[\"radians\",\"degrees\"],dflt:\"degrees\",editType:\"calc\"},period:{valType:\"number\",editType:\"calc\",min:0},direction:{valType:\"enumerated\",values:[\"counterclockwise\",\"clockwise\"],dflt:\"counterclockwise\",editType:\"calc\"},rotation:{valType:\"angle\",editType:\"calc\"},hoverformat:i.hoverformat,uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\"};o(f,l,c),e.exports\u003d{domain:a({name:\"polar\",editType:\"plot\"}),sector:{valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],dflt:[0,360],editType:\"plot\"},hole:{valType:\"number\",min:0,max:1,dflt:0,editType:\"plot\"},bgcolor:{valType:\"color\",editType:\"plot\",dflt:n.background},radialaxis:u,angularaxis:f,gridshape:{valType:\"enumerated\",values:[\"circular\",\"linear\"],dflt:\"circular\",editType:\"plot\"},uirevision:{valType:\"any\",editType:\"none\"},editType:\"calc\"}},{\"../../components/color/attributes\":661,\"../../lib\":799,\"../../plot_api/edit_types\":831,\"../cartesian/layout_attributes\":864,\"../domain\":877}],918:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../plot_api/plot_template\"),o\u003dt(\"../subplot_defaults\"),s\u003dt(\"../get_data\").getSubplotData,l\u003dt(\"../cartesian/tick_value_defaults\"),c\u003dt(\"../cartesian/tick_mark_defaults\"),u\u003dt(\"../cartesian/tick_label_defaults\"),f\u003dt(\"../cartesian/category_order_defaults\"),h\u003dt(\"../cartesian/line_grid_defaults\"),p\u003dt(\"../cartesian/axis_autotype\"),d\u003dt(\"./layout_attributes\"),m\u003dt(\"./set_convert\"),g\u003dt(\"./constants\"),v\u003dg.axisNames;function y(t,e,r,o){var p\u003dr(\"bgcolor\");o.bgColor\u003di.combine(p,o.paper_bgcolor);var y\u003dr(\"sector\");r(\"hole\");var b,_\u003ds(o.fullData,g.name,o.id),w\u003do.layoutOut;function T(t,e){return r(b+\".\"+t,e)}for(var k\u003d0;k\u003cv.length;k++){b\u003dv[k],n.isPlainObject(t[b])||(t[b]\u003d{});var M\u003dt[b],A\u003da.newContainer(e,b);A._id\u003dA._name\u003db,A._attr\u003do.id+\".\"+b,A._traceIndices\u003d_.map((function(t){return t._expandedIndex}));var S\u003dg.axisName2dataArray[b],E\u003dx(M,A,T,_,S,o);f(M,A,T,{axData:_,dataAttr:S});var L,C,P\u003dT(\"visible\");switch(m(A,e,w),T(\"uirevision\",e.uirevision),P\u0026\u0026(C\u003d(L\u003dT(\"color\"))\u003d\u003d\u003dM.color?L:o.font.color),A._m\u003d1,b){case\"radialaxis\":var I\u003dT(\"autorange\",!A.isValidRange(M.range));M.autorange\u003dI,!I||\"linear\"!\u003d\u003dE\u0026\u0026\"-\"!\u003d\u003dE||T(\"rangemode\"),\"reversed\"\u003d\u003d\u003dI\u0026\u0026(A._m\u003d-1),T(\"range\"),A.cleanRange(\"range\",{dfltRange:[0,1]}),P\u0026\u0026(T(\"side\"),T(\"angle\",y[0]),T(\"title.text\"),n.coerceFont(T,\"title.font\",{family:o.font.family,size:n.bigFont(o.font.size),color:C}));break;case\"angularaxis\":if(\"date\"\u003d\u003d\u003dE){n.log(\"Polar plots do not support date angular axes yet.\");for(var O\u003d0;O\u003c_.length;O++)_[O].visible\u003d!1;E\u003dM.type\u003dA.type\u003d\"linear\"}T(\"linear\"\u003d\u003d\u003dE?\"thetaunit\":\"period\");var z\u003dT(\"direction\");T(\"rotation\",{counterclockwise:0,clockwise:90}[z])}if(P)l(M,A,T,A.type),u(M,A,T,A.type,{tickSuffixDflt:\"degrees\"\u003d\u003d\u003dA.thetaunit?\"\\xb0\":void 0}),c(M,A,T,{outerTicks:!0}),T(\"showticklabels\")\u0026\u0026(n.coerceFont(T,\"tickfont\",{family:o.font.family,size:o.font.size,color:C}),T(\"tickangle\"),T(\"tickformat\")),h(M,A,T,{dfltColor:L,bgColor:o.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:d[b]}),T(\"layer\");\"category\"!\u003d\u003dE\u0026\u0026T(\"hoverformat\"),A._input\u003dM}\"category\"\u003d\u003d\u003de.angularaxis.type\u0026\u0026r(\"gridshape\")}function x(t,e,r,n,i,a){var o\u003dr(\"autotypenumbers\",a.autotypenumbersDflt);if(\"-\"\u003d\u003d\u003dr(\"type\")){for(var s,l\u003d0;l\u003cn.length;l++)if(n[l].visible){s\u003dn[l];break}s\u0026\u0026s[i]\u0026\u0026(e.type\u003dp(s[i],\"gregorian\",{noMultiCategory:!0,autotypenumbers:o})),\"-\"\u003d\u003d\u003de.type?e.type\u003d\"linear\":t.type\u003de.type}return e.type}e.exports\u003dfunction(t,e,r){o(t,e,r,{type:g.name,attributes:d,handleDefaults:y,font:e.font,autotypenumbersDflt:e.autotypenumbers,paper_bgcolor:e.paper_bgcolor,fullData:r,layoutOut:e})}},{\"../../components/color\":662,\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../cartesian/axis_autotype\":850,\"../cartesian/category_order_defaults\":854,\"../cartesian/line_grid_defaults\":866,\"../cartesian/tick_label_defaults\":871,\"../cartesian/tick_mark_defaults\":872,\"../cartesian/tick_value_defaults\":873,\"../get_data\":887,\"../subplot_defaults\":921,\"./constants\":914,\"./layout_attributes\":917,\"./set_convert\":920}],919:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"../../registry\"),o\u003dt(\"../../lib\"),s\u003do.strRotate,l\u003do.strTranslate,c\u003dt(\"../../components/color\"),u\u003dt(\"../../components/drawing\"),f\u003dt(\"../plots\"),h\u003dt(\"../../plots/cartesian/axes\"),p\u003dt(\"../cartesian/set_convert\"),d\u003dt(\"./set_convert\"),m\u003dt(\"../cartesian/autorange\").doAutoRange,g\u003dt(\"../cartesian/dragbox\"),v\u003dt(\"../../components/dragelement\"),y\u003dt(\"../../components/fx\"),x\u003dt(\"../../components/titles\"),b\u003dt(\"../cartesian/select\").prepSelect,_\u003dt(\"../cartesian/select\").selectOnClick,w\u003dt(\"../cartesian/select\").clearSelect,T\u003dt(\"../../lib/setcursor\"),k\u003dt(\"../../lib/clear_gl_canvases\"),M\u003dt(\"../../plot_api/subroutines\").redrawReglTraces,A\u003dt(\"../../constants/alignment\").MID_SHIFT,S\u003dt(\"./constants\"),E\u003dt(\"./helpers\"),L\u003do._,C\u003do.mod,P\u003do.deg2rad,I\u003do.rad2deg;function O(t,e){this.id\u003de,this.gd\u003dt,this._hasClipOnAxisFalse\u003dnull,this.vangles\u003dnull,this.radialAxisAngle\u003dnull,this.traceHash\u003d{},this.layers\u003d{},this.clipPaths\u003d{},this.clipIds\u003d{},this.viewInitial\u003d{};var r\u003dt._fullLayout,n\u003d\"clip\"+r._uid+e;this.clipIds.forTraces\u003dn+\"-for-traces\",this.clipPaths.forTraces\u003dr._clips.append(\"clipPath\").attr(\"id\",this.clipIds.forTraces),this.clipPaths.forTraces.append(\"path\"),this.framework\u003dr._polarlayer.append(\"g\").attr(\"class\",e),this.radialTickLayout\u003dnull,this.angularTickLayout\u003dnull}var z\u003dO.prototype;function D(t){var e\u003dt.ticks+String(t.ticklen)+String(t.showticklabels);return\"side\"in t\u0026\u0026(e+\u003dt.side),e}function R(t,e){return e[o.findIndexOfMin(e,(function(e){return o.angleDist(t,e)}))]}function F(t,e,r){return e?(t.attr(\"display\",null),t.attr(r)):t\u0026\u0026t.attr(\"display\",\"none\"),t}e.exports\u003dfunction(t,e){return new O(t,e)},z.plot\u003dfunction(t,e){var r\u003de[this.id];this._hasClipOnAxisFalse\u003d!1;for(var n\u003d0;n\u003ct.length;n++){if(!1\u003d\u003d\u003dt[n][0].trace.cliponaxis){this._hasClipOnAxisFalse\u003d!0;break}}this.updateLayers(e,r),this.updateLayout(e,r),f.generalUpdatePerTraceModule(this.gd,this,t,r),this.updateFx(e,r)},z.updateLayers\u003dfunction(t,e){var r\u003dthis.layers,i\u003de.radialaxis,a\u003de.angularaxis,o\u003dS.layerNames,s\u003do.indexOf(\"frontplot\"),l\u003do.slice(0,s),c\u003d\"below traces\"\u003d\u003d\u003da.layer,u\u003d\"below traces\"\u003d\u003d\u003di.layer;c\u0026\u0026l.push(\"angular-line\"),u\u0026\u0026l.push(\"radial-line\"),c\u0026\u0026l.push(\"angular-axis\"),u\u0026\u0026l.push(\"radial-axis\"),l.push(\"frontplot\"),c||l.push(\"angular-line\"),u||l.push(\"radial-line\"),c||l.push(\"angular-axis\"),u||l.push(\"radial-axis\");var f\u003dthis.framework.selectAll(\".polarsublayer\").data(l,String);f.enter().append(\"g\").attr(\"class\",(function(t){return\"polarsublayer \"+t})).each((function(t){var e\u003dr[t]\u003dn.select(this);switch(t){case\"frontplot\":e.append(\"g\").classed(\"barlayer\",!0),e.append(\"g\").classed(\"scatterlayer\",!0);break;case\"backplot\":e.append(\"g\").classed(\"maplayer\",!0);break;case\"plotbg\":r.bg\u003de.append(\"path\");break;case\"radial-grid\":case\"angular-grid\":e.style(\"fill\",\"none\");break;case\"radial-line\":e.append(\"line\").style(\"fill\",\"none\");break;case\"angular-line\":e.append(\"path\").style(\"fill\",\"none\")}})),f.order()},z.updateLayout\u003dfunction(t,e){var r\u003dthis.layers,n\u003dt._size,i\u003de.radialaxis,a\u003de.angularaxis,o\u003de.domain.x,s\u003de.domain.y;this.xOffset\u003dn.l+n.w*o[0],this.yOffset\u003dn.t+n.h*(1-s[1]);var f\u003dthis.xLength\u003dn.w*(o[1]-o[0]),h\u003dthis.yLength\u003dn.h*(s[1]-s[0]),p\u003de.sector;this.sectorInRad\u003dp.map(P);var d,m,g,v,y,x\u003dthis.sectorBBox\u003dfunction(t){var e,r,n,i,a\u003dt[0],o\u003dt[1]-a,s\u003dC(a,360),l\u003ds+o,c\u003dMath.cos(P(s)),u\u003dMath.sin(P(s)),f\u003dMath.cos(P(l)),h\u003dMath.sin(P(l));i\u003ds\u003c\u003d90\u0026\u0026l\u003e\u003d90||s\u003e90\u0026\u0026l\u003e\u003d450?1:u\u003c\u003d0\u0026\u0026h\u003c\u003d0?0:Math.max(u,h);e\u003ds\u003c\u003d180\u0026\u0026l\u003e\u003d180||s\u003e180\u0026\u0026l\u003e\u003d540?-1:c\u003e\u003d0\u0026\u0026f\u003e\u003d0?0:Math.min(c,f);r\u003ds\u003c\u003d270\u0026\u0026l\u003e\u003d270||s\u003e270\u0026\u0026l\u003e\u003d630?-1:u\u003e\u003d0\u0026\u0026h\u003e\u003d0?0:Math.min(u,h);n\u003dl\u003e\u003d360?1:c\u003c\u003d0\u0026\u0026f\u003c\u003d0?0:Math.max(c,f);return[e,r,n,i]}(p),b\u003dx[2]-x[0],_\u003dx[3]-x[1],w\u003dh/f,T\u003dMath.abs(_/b);w\u003eT?(d\u003df,y\u003d(h-(m\u003df*T))/n.h/2,g\u003d[o[0],o[1]],v\u003d[s[0]+y,s[1]-y]):(m\u003dh,y\u003d(f-(d\u003dh/T))/n.w/2,g\u003d[o[0]+y,o[1]-y],v\u003d[s[0],s[1]]),this.xLength2\u003dd,this.yLength2\u003dm,this.xDomain2\u003dg,this.yDomain2\u003dv;var k\u003dthis.xOffset2\u003dn.l+n.w*g[0],M\u003dthis.yOffset2\u003dn.t+n.h*(1-v[1]),A\u003dthis.radius\u003dd/b,S\u003dthis.innerRadius\u003de.hole*A,E\u003dthis.cx\u003dk-A*x[0],L\u003dthis.cy\u003dM+A*x[3],I\u003dthis.cxx\u003dE-k,O\u003dthis.cyy\u003dL-M;this.radialAxis\u003dthis.mockAxis(t,e,i,{_id:\"x\",side:{counterclockwise:\"top\",clockwise:\"bottom\"}[i.side],_realSide:i.side,domain:[S/n.w,A/n.w]}),this.angularAxis\u003dthis.mockAxis(t,e,a,{side:\"right\",domain:[0,Math.PI],autorange:!1}),this.doAutoRange(t,e),this.updateAngularAxis(t,e),this.updateRadialAxis(t,e),this.updateRadialAxisTitle(t,e),this.xaxis\u003dthis.mockCartesianAxis(t,e,{_id:\"x\",domain:g}),this.yaxis\u003dthis.mockCartesianAxis(t,e,{_id:\"y\",domain:v});var z\u003dthis.pathSubplot();this.clipPaths.forTraces.select(\"path\").attr(\"d\",z).attr(\"transform\",l(I,O)),r.frontplot.attr(\"transform\",l(k,M)).call(u.setClipUrl,this._hasClipOnAxisFalse?null:this.clipIds.forTraces,this.gd),r.bg.attr(\"d\",z).attr(\"transform\",l(E,L)).call(c.fill,e.bgcolor)},z.mockAxis\u003dfunction(t,e,r,n){var i\u003do.extendFlat({},r,n);return d(i,e,t),i},z.mockCartesianAxis\u003dfunction(t,e,r){var n\u003dthis,i\u003dr._id,a\u003do.extendFlat({type:\"linear\"},r);p(a,t);var s\u003d{x:[0,2],y:[1,3]};return a.setRange\u003dfunction(){var t\u003dn.sectorBBox,r\u003ds[i],o\u003dn.radialAxis._rl,l\u003d(o[1]-o[0])/(1-e.hole);a.range\u003d[t[r[0]]*l,t[r[1]]*l]},a.isPtWithinRange\u003d\"x\"\u003d\u003d\u003di?function(t){return n.isPtInside(t)}:function(){return!0},a.setRange(),a.setScale(),a},z.doAutoRange\u003dfunction(t,e){var r\u003dthis.gd,n\u003dthis.radialAxis,i\u003de.radialaxis;n.setScale(),m(r,n);var a\u003dn.range;i.range\u003da.slice(),i._input.range\u003da.slice(),n._rl\u003d[n.r2l(a[0],null,\"gregorian\"),n.r2l(a[1],null,\"gregorian\")]},z.updateRadialAxis\u003dfunction(t,e){var r\u003dthis,n\u003dr.gd,i\u003dr.layers,a\u003dr.radius,u\u003dr.innerRadius,f\u003dr.cx,p\u003dr.cy,d\u003de.radialaxis,m\u003dC(e.sector[0],360),g\u003dr.radialAxis,v\u003du\u003ca;r.fillViewInitialKey(\"radialaxis.angle\",d.angle),r.fillViewInitialKey(\"radialaxis.range\",g.range.slice()),g.setGeometry(),\"auto\"\u003d\u003d\u003dg.tickangle\u0026\u0026m\u003e90\u0026\u0026m\u003c\u003d270\u0026\u0026(g.tickangle\u003d180);var y\u003dfunction(t){return l(g.l2p(t.x)+u,0)},x\u003dD(d);if(r.radialTickLayout!\u003d\u003dx\u0026\u0026(i[\"radial-axis\"].selectAll(\".xtick\").remove(),r.radialTickLayout\u003dx),v){g.setScale();var b\u003dh.calcTicks(g),_\u003dh.clipEnds(g,b),w\u003dh.getTickSigns(g)[2];h.drawTicks(n,g,{vals:b,layer:i[\"radial-axis\"],path:h.makeTickPath(g,0,w),transFn:y,crisp:!1}),h.drawGrid(n,g,{vals:_,layer:i[\"radial-grid\"],path:function(t){return r.pathArc(g.r2p(t.x)+u)},transFn:o.noop,crisp:!1}),h.drawLabels(n,g,{vals:b,layer:i[\"radial-axis\"],transFn:y,labelFns:h.makeLabelFns(g,0)})}var T\u003dr.radialAxisAngle\u003dr.vangles?I(R(P(d.angle),r.vangles)):d.angle,k\u003dl(f,p),M\u003dk+s(-T);F(i[\"radial-axis\"],v\u0026\u0026(d.showticklabels||d.ticks),{transform:M}),F(i[\"radial-grid\"],v\u0026\u0026d.showgrid,{transform:k}),F(i[\"radial-line\"].select(\"line\"),v\u0026\u0026d.showline,{x1:u,y1:0,x2:a,y2:0,transform:M}).attr(\"stroke-width\",d.linewidth).call(c.stroke,d.linecolor)},z.updateRadialAxisTitle\u003dfunction(t,e,r){var n\u003dthis.gd,i\u003dthis.radius,a\u003dthis.cx,o\u003dthis.cy,s\u003de.radialaxis,l\u003dthis.id+\"title\",c\u003dvoid 0!\u003d\u003dr?r:this.radialAxisAngle,f\u003dP(c),h\u003dMath.cos(f),p\u003dMath.sin(f),d\u003d0;if(s.title){var m\u003du.bBox(this.layers[\"radial-axis\"].node()).height,g\u003ds.title.font.size;d\u003d\"counterclockwise\"\u003d\u003d\u003ds.side?-m-.4*g:m+.8*g}this.layers[\"radial-axis-title\"]\u003dx.draw(n,l,{propContainer:s,propName:this.id+\".radialaxis.title\",placeholder:L(n,\"Click to enter radial axis title\"),attributes:{x:a+i/2*h+d*p,y:o-i/2*p+d*h,\"text-anchor\":\"middle\"},transform:{rotate:-c}})},z.updateAngularAxis\u003dfunction(t,e){var r\u003dthis,n\u003dr.gd,i\u003dr.layers,a\u003dr.radius,u\u003dr.innerRadius,f\u003dr.cx,p\u003dr.cy,d\u003de.angularaxis,m\u003dr.angularAxis;r.fillViewInitialKey(\"angularaxis.rotation\",d.rotation),m.setGeometry(),m.setScale();var g\u003dfunction(t){return m.t2g(t.x)};\"linear\"\u003d\u003d\u003dm.type\u0026\u0026\"radians\"\u003d\u003d\u003dm.thetaunit\u0026\u0026(m.tick0\u003dI(m.tick0),m.dtick\u003dI(m.dtick));var v\u003dfunction(t){return l(f+a*Math.cos(t),p-a*Math.sin(t))},y\u003dh.makeLabelFns(m,0).labelStandoff,x\u003d{xFn:function(t){var e\u003dg(t);return Math.cos(e)*y},yFn:function(t){var e\u003dg(t),r\u003dMath.sin(e)\u003e0?.2:1;return-Math.sin(e)*(y+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*A)},anchorFn:function(t){var e\u003dg(t),r\u003dMath.cos(e);return Math.abs(r)\u003c.1?\"middle\":r\u003e0?\"start\":\"end\"},heightFn:function(t,e,r){var n\u003dg(t);return-.5*(1+Math.sin(n))*r}},b\u003dD(d);r.angularTickLayout!\u003d\u003db\u0026\u0026(i[\"angular-axis\"].selectAll(\".\"+m._id+\"tick\").remove(),r.angularTickLayout\u003db);var _,w\u003dh.calcTicks(m);if(\"linear\"\u003d\u003d\u003de.gridshape?(_\u003dw.map(g),o.angleDelta(_[0],_[1])\u003c0\u0026\u0026(_\u003d_.slice().reverse())):_\u003dnull,r.vangles\u003d_,\"category\"\u003d\u003d\u003dm.type\u0026\u0026(w\u003dw.filter((function(t){return o.isAngleInsideSector(g(t),r.sectorInRad)}))),m.visible){var T\u003d\"inside\"\u003d\u003d\u003dm.ticks?-1:1,k\u003d(m.linewidth||1)/2;h.drawTicks(n,m,{vals:w,layer:i[\"angular-axis\"],path:\"M\"+T*k+\",0h\"+T*m.ticklen,transFn:function(t){var e\u003dg(t);return v(e)+s(-I(e))},crisp:!1}),h.drawGrid(n,m,{vals:w,layer:i[\"angular-grid\"],path:function(t){var e\u003dg(t),r\u003dMath.cos(e),n\u003dMath.sin(e);return\"M\"+[f+u*r,p-u*n]+\"L\"+[f+a*r,p-a*n]},transFn:o.noop,crisp:!1}),h.drawLabels(n,m,{vals:w,layer:i[\"angular-axis\"],repositionOnUpdate:!0,transFn:function(t){return v(g(t))},labelFns:x})}F(i[\"angular-line\"].select(\"path\"),d.showline,{d:r.pathSubplot(),transform:l(f,p)}).attr(\"stroke-width\",d.linewidth).call(c.stroke,d.linecolor)},z.updateFx\u003dfunction(t,e){this.gd._context.staticPlot||(this.updateAngularDrag(t),this.updateRadialDrag(t,e,0),this.updateRadialDrag(t,e,1),this.updateMainDrag(t))},z.updateMainDrag\u003dfunction(t){var e,r,s\u003dthis,c\u003ds.gd,u\u003ds.layers,f\u003dt._zoomlayer,h\u003dS.MINZOOM,p\u003dS.OFFEDGE,d\u003ds.radius,m\u003ds.innerRadius,x\u003ds.cx,T\u003ds.cy,k\u003ds.cxx,M\u003ds.cyy,A\u003ds.sectorInRad,L\u003ds.vangles,C\u003ds.radialAxis,P\u003dE.clampTiny,I\u003dE.findXYatLength,O\u003dE.findEnclosingVertexAngles,z\u003dS.cornerHalfWidth,D\u003dS.cornerLen/2,R\u003dg.makeDragger(u,\"path\",\"maindrag\",\"crosshair\");n.select(R).attr(\"d\",s.pathSubplot()).attr(\"transform\",l(x,T));var F,B,N,j,U,V,q,H,G,Y\u003d{element:R,gd:c,subplot:s.id,plotinfo:{id:s.id,xaxis:s.xaxis,yaxis:s.yaxis},xaxes:[s.xaxis],yaxes:[s.yaxis]};function W(t,e){return Math.sqrt(t*t+e*e)}function X(t,e){return W(t-k,e-M)}function Z(t,e){return Math.atan2(M-e,t-k)}function J(t,e){return[t*Math.cos(e),t*Math.sin(-e)]}function K(t,e){if(0\u003d\u003d\u003dt)return s.pathSector(2*z);var r\u003dD/t,n\u003de-r,i\u003de+r,a\u003dMath.max(0,Math.min(t,d)),o\u003da-z,l\u003da+z;return\"M\"+J(o,n)+\"A\"+[o,o]+\" 0,0,0 \"+J(o,i)+\"L\"+J(l,i)+\"A\"+[l,l]+\" 0,0,1 \"+J(l,n)+\"Z\"}function Q(t,e,r){if(0\u003d\u003d\u003dt)return s.pathSector(2*z);var n,i,a\u003dJ(t,e),o\u003dJ(t,r),l\u003dP((a[0]+o[0])/2),c\u003dP((a[1]+o[1])/2);if(l\u0026\u0026c){var u\u003dc/l,f\u003d-1/u,h\u003dI(z,u,l,c);n\u003dI(D,f,h[0][0],h[0][1]),i\u003dI(D,f,h[1][0],h[1][1])}else{var p,d;c?(p\u003dD,d\u003dz):(p\u003dz,d\u003dD),n\u003d[[l-p,c-d],[l+p,c-d]],i\u003d[[l-p,c+d],[l+p,c+d]]}return\"M\"+n.join(\"L\")+\"L\"+i.reverse().join(\"L\")+\"Z\"}function $(t,e){return e\u003dMath.max(Math.min(e,d),m),t\u003cp?t\u003d0:d-t\u003cp?t\u003dd:e\u003cp?e\u003d0:d-e\u003cp\u0026\u0026(e\u003dd),Math.abs(e-t)\u003eh?(t\u003ce?(N\u003dt,j\u003de):(N\u003de,j\u003dt),!0):(N\u003dnull,j\u003dnull,!1)}function tt(t,e){t\u003dt||U,e\u003de||\"M0,0Z\",H.attr(\"d\",t),G.attr(\"d\",e),g.transitionZoombox(H,G,V,q),V\u003d!0;var r\u003d{};at(r),c.emit(\"plotly_relayouting\",r)}function et(t,n){var i,a,o\u003dF+(t*\u003de),l\u003dB+(n*\u003dr),c\u003dX(F,B),u\u003dMath.min(X(o,l),d),f\u003dZ(F,B);$(c,u)\u0026\u0026(i\u003dU+s.pathSector(j),N\u0026\u0026(i+\u003ds.pathSector(N)),a\u003dK(N,f)+K(j,f)),tt(i,a)}function rt(t,e,r,n){var i\u003dE.findIntersectionXY(r,n,r,[t-k,M-e]);return W(i[0],i[1])}function nt(t,e){var r,n,i\u003dF+t,a\u003dB+e,o\u003dZ(F,B),l\u003dZ(i,a),c\u003dO(o,L),u\u003dO(l,L);$(rt(F,B,c[0],c[1]),Math.min(rt(i,a,u[0],u[1]),d))\u0026\u0026(r\u003dU+s.pathSector(j),N\u0026\u0026(r+\u003ds.pathSector(N)),n\u003d[Q(N,c[0],c[1]),Q(j,c[0],c[1])].join(\" \")),tt(r,n)}function it(){if(g.removeZoombox(c),null!\u003d\u003dN\u0026\u0026null!\u003d\u003dj){var t\u003d{};at(t),g.showDoubleClickNotifier(c),a.call(\"_guiRelayout\",c,t)}}function at(t){var e\u003dC._rl,r\u003d(e[1]-e[0])/(1-m/d)/d,n\u003d[e[0]+(N-m)*r,e[0]+(j-m)*r];t[s.id+\".radialaxis.range\"]\u003dn}function ot(t,e){var r\u003dc._fullLayout.clickmode;if(g.removeZoombox(c),2\u003d\u003d\u003dt){var n\u003d{};for(var i in s.viewInitial)n[s.id+\".\"+i]\u003ds.viewInitial[i];c.emit(\"plotly_doubleclick\",null),a.call(\"_guiRelayout\",c,n)}r.indexOf(\"select\")\u003e-1\u0026\u00261\u003d\u003d\u003dt\u0026\u0026_(e,c,[s.xaxis],[s.yaxis],s.id,Y),r.indexOf(\"event\")\u003e-1\u0026\u0026y.click(c,e,s.id)}Y.prepFn\u003dfunction(t,n,a){var l\u003dc._fullLayout.dragmode,u\u003dR.getBoundingClientRect();c._fullLayout._calcInverseTransform(c);var h\u003dc._fullLayout._invTransform;e\u003dc._fullLayout._invScaleX,r\u003dc._fullLayout._invScaleY;var p\u003do.apply3DTransform(h)(n-u.left,a-u.top);if(F\u003dp[0],B\u003dp[1],L){var m\u003dE.findPolygonOffset(d,A[0],A[1],L);F+\u003dk+m[0],B+\u003dM+m[1]}switch(l){case\"zoom\":Y.moveFn\u003dL?nt:et,Y.clickFn\u003dot,Y.doneFn\u003dit,function(){N\u003dnull,j\u003dnull,U\u003ds.pathSubplot(),V\u003d!1;var t\u003dc._fullLayout[s.id];q\u003di(t.bgcolor).getLuminance(),(H\u003dg.makeZoombox(f,q,x,T,U)).attr(\"fill-rule\",\"evenodd\"),G\u003dg.makeCorners(f,x,T),w(c)}();break;case\"select\":case\"lasso\":b(t,n,a,Y,l)}},R.onmousemove\u003dfunction(t){y.hover(c,t,s.id),c._fullLayout._lasthover\u003dR,c._fullLayout._hoversubplot\u003ds.id},R.onmouseout\u003dfunction(t){c._dragging||v.unhover(c,t)},v.init(Y)},z.updateRadialDrag\u003dfunction(t,e,r){var i\u003dthis,c\u003di.gd,u\u003di.layers,f\u003di.radius,h\u003di.innerRadius,p\u003di.cx,d\u003di.cy,m\u003di.radialAxis,y\u003dS.radialDragBoxSize,x\u003dy/2;if(m.visible){var b,_,T,A\u003dP(i.radialAxisAngle),E\u003dm._rl,L\u003dE[0],C\u003dE[1],O\u003dE[r],z\u003d.75*(E[1]-E[0])/(1-e.hole)/f;r?(b\u003dp+(f+x)*Math.cos(A),_\u003dd-(f+x)*Math.sin(A),T\u003d\"radialdrag\"):(b\u003dp+(h-x)*Math.cos(A),_\u003dd-(h-x)*Math.sin(A),T\u003d\"radialdrag-inner\");var D,B,N,j\u003dg.makeRectDragger(u,T,\"crosshair\",-x,-x,y,y),U\u003d{element:j,gd:c};F(n.select(j),m.visible\u0026\u0026h\u003cf,{transform:l(b,_)}),U.prepFn\u003dfunction(){D\u003dnull,B\u003dnull,N\u003dnull,U.moveFn\u003dV,U.doneFn\u003dq,w(c)},U.clampFn\u003dfunction(t,e){return Math.sqrt(t*t+e*e)\u003cS.MINDRAG\u0026\u0026(t\u003d0,e\u003d0),[t,e]},v.init(U)}function V(t,e){if(D)D(t,e);else{var n\u003d[t,-e],a\u003d[Math.cos(A),Math.sin(A)],s\u003dMath.abs(o.dot(n,a)/Math.sqrt(o.dot(n,n)));isNaN(s)||(D\u003ds\u003c.5?H:G)}var l\u003d{};!function(t){null!\u003d\u003dB?t[i.id+\".radialaxis.angle\"]\u003dB:null!\u003d\u003dN\u0026\u0026(t[i.id+\".radialaxis.range[\"+r+\"]\"]\u003dN)}(l),c.emit(\"plotly_relayouting\",l)}function q(){null!\u003d\u003dB?a.call(\"_guiRelayout\",c,i.id+\".radialaxis.angle\",B):null!\u003d\u003dN\u0026\u0026a.call(\"_guiRelayout\",c,i.id+\".radialaxis.range[\"+r+\"]\",N)}function H(t,e){if(0!\u003d\u003dr){var n\u003db+t,a\u003d_+e;B\u003dMath.atan2(d-a,n-p),i.vangles\u0026\u0026(B\u003dR(B,i.vangles)),B\u003dI(B);var o\u003dl(p,d)+s(-B);u[\"radial-axis\"].attr(\"transform\",o),u[\"radial-line\"].select(\"line\").attr(\"transform\",o);var c\u003di.gd._fullLayout,f\u003dc[i.id];i.updateRadialAxisTitle(c,f,B)}}function G(t,e){var n\u003do.dot([t,-e],[Math.cos(A),Math.sin(A)]);if(N\u003dO-z*n,z\u003e0\u003d\u003d(r?N\u003eL:N\u003cC)){var s\u003dc._fullLayout,l\u003ds[i.id];m.range[r]\u003dN,m._rl[r]\u003dN,i.updateRadialAxis(s,l),i.xaxis.setRange(),i.xaxis.setScale(),i.yaxis.setRange(),i.yaxis.setScale();var u\u003d!1;for(var f in i.traceHash){var h\u003di.traceHash[f],p\u003do.filterVisible(h);h[0][0].trace._module.plot(c,i,p,l),a.traceIs(f,\"gl\")\u0026\u0026p.length\u0026\u0026(u\u003d!0)}u\u0026\u0026(k(c),M(c))}else N\u003dnull}},z.updateAngularDrag\u003dfunction(t){var e\u003dthis,r\u003de.gd,i\u003de.layers,c\u003de.radius,f\u003de.angularAxis,h\u003de.cx,p\u003de.cy,d\u003de.cxx,m\u003de.cyy,y\u003dS.angularDragBoxSize,x\u003dg.makeDragger(i,\"path\",\"angulardrag\",\"move\"),b\u003d{element:x,gd:r};function _(t,e){return Math.atan2(m+y-e,t-d-y)}n.select(x).attr(\"d\",e.pathAnnulus(c,c+y)).attr(\"transform\",l(h,p)).call(T,\"move\");var A,E,L,C,P,O,z\u003di.frontplot.select(\".scatterlayer\").selectAll(\".trace\"),D\u003dz.selectAll(\".point\"),R\u003dz.selectAll(\".textpoint\");function F(c,g){var v\u003de.gd._fullLayout,y\u003dv[e.id],x\u003d_(A+c*t._invScaleX,E+g*t._invScaleY),b\u003dI(x-O);if(C\u003dL+b,i.frontplot.attr(\"transform\",l(e.xOffset2,e.yOffset2)+s([-b,d,m])),e.vangles){P\u003de.radialAxisAngle+b;var w\u003dl(h,p)+s(-b),T\u003dl(h,p)+s(-P);i.bg.attr(\"transform\",w),i[\"radial-grid\"].attr(\"transform\",w),i[\"radial-axis\"].attr(\"transform\",T),i[\"radial-line\"].select(\"line\").attr(\"transform\",T),e.updateRadialAxisTitle(v,y,P)}else e.clipPaths.forTraces.select(\"path\").attr(\"transform\",l(d,m)+s(b));D.each((function(){var t\u003dn.select(this),e\u003du.getTranslate(t);t.attr(\"transform\",l(e.x,e.y)+s([b]))})),R.each((function(){var t\u003dn.select(this),e\u003dt.select(\"text\"),r\u003du.getTranslate(t);t.attr(\"transform\",s([b,e.attr(\"x\"),e.attr(\"y\")])+l(r.x,r.y))})),f.rotation\u003do.modHalf(C,360),e.updateAngularAxis(v,y),e._hasClipOnAxisFalse\u0026\u0026!o.isFullCircle(e.sectorInRad)\u0026\u0026z.call(u.hideOutsideRangePoints,e);var S\u003d!1;for(var F in e.traceHash)if(a.traceIs(F,\"gl\")){var N\u003de.traceHash[F],j\u003do.filterVisible(N);N[0][0].trace._module.plot(r,e,j,y),j.length\u0026\u0026(S\u003d!0)}S\u0026\u0026(k(r),M(r));var U\u003d{};B(U),r.emit(\"plotly_relayouting\",U)}function B(t){t[e.id+\".angularaxis.rotation\"]\u003dC,e.vangles\u0026\u0026(t[e.id+\".radialaxis.angle\"]\u003dP)}function N(){R.select(\"text\").attr(\"transform\",null);var t\u003d{};B(t),a.call(\"_guiRelayout\",r,t)}b.prepFn\u003dfunction(n,i,a){var s\u003dt[e.id];L\u003ds.angularaxis.rotation;var l\u003dx.getBoundingClientRect();A\u003di-l.left,E\u003da-l.top,r._fullLayout._calcInverseTransform(r);var c\u003do.apply3DTransform(t._invTransform)(A,E);A\u003dc[0],E\u003dc[1],O\u003d_(A,E),b.moveFn\u003dF,b.doneFn\u003dN,w(r)},e.vangles\u0026\u0026!o.isFullCircle(e.sectorInRad)\u0026\u0026(b.prepFn\u003do.noop,T(n.select(x),null)),v.init(b)},z.isPtInside\u003dfunction(t){var e\u003dthis.sectorInRad,r\u003dthis.vangles,n\u003dthis.angularAxis.c2g(t.theta),i\u003dthis.radialAxis,a\u003di.c2l(t.r),s\u003di._rl;return(r?E.isPtInsidePolygon:o.isPtInsideSector)(a,n,s,e,r)},z.pathArc\u003dfunction(t){var e\u003dthis.sectorInRad,r\u003dthis.vangles;return(r?E.pathPolygon:o.pathArc)(t,e[0],e[1],r)},z.pathSector\u003dfunction(t){var e\u003dthis.sectorInRad,r\u003dthis.vangles;return(r?E.pathPolygon:o.pathSector)(t,e[0],e[1],r)},z.pathAnnulus\u003dfunction(t,e){var r\u003dthis.sectorInRad,n\u003dthis.vangles;return(n?E.pathPolygonAnnulus:o.pathAnnulus)(t,e,r[0],r[1],n)},z.pathSubplot\u003dfunction(){var t\u003dthis.innerRadius,e\u003dthis.radius;return t?this.pathAnnulus(t,e):this.pathSector(e)},z.fillViewInitialKey\u003dfunction(t,e){t in this.viewInitial||(this.viewInitial[t]\u003de)}},{\"../../components/color\":662,\"../../components/dragelement\":681,\"../../components/drawing\":684,\"../../components/fx\":702,\"../../components/titles\":760,\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/clear_gl_canvases\":783,\"../../lib/setcursor\":820,\"../../plot_api/subroutines\":839,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"../cartesian/autorange\":848,\"../cartesian/dragbox\":858,\"../cartesian/select\":869,\"../cartesian/set_convert\":870,\"../plots\":913,\"./constants\":914,\"./helpers\":915,\"./set_convert\":920,\"@plotly/d3\":58,tinycolor2:594}],920:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../cartesian/set_convert\"),a\u003dn.deg2rad,o\u003dn.rad2deg;e.exports\u003dfunction(t,e,r){switch(i(t,r),t._id){case\"x\":case\"radialaxis\":!function(t,e){var r\u003de._subplot;t.setGeometry\u003dfunction(){var e\u003dt._rl[0],n\u003dt._rl[1],i\u003dr.innerRadius,a\u003d(r.radius-i)/(n-e),o\u003di/a,s\u003de\u003en?function(t){return t\u003c\u003d0}:function(t){return t\u003e\u003d0};t.c2g\u003dfunction(r){var n\u003dt.c2l(r)-e;return(s(n)?n:0)+o},t.g2c\u003dfunction(r){return t.l2c(r+e-o)},t.g2p\u003dfunction(t){return t*a},t.c2p\u003dfunction(e){return t.g2p(t.c2g(e))}}}(t,e);break;case\"angularaxis\":!function(t,e){var r\u003dt.type;if(\"linear\"\u003d\u003d\u003dr){var i\u003dt.d2c,s\u003dt.c2d;t.d2c\u003dfunction(t,e){return function(t,e){return\"degrees\"\u003d\u003d\u003de?a(t):t}(i(t),e)},t.c2d\u003dfunction(t,e){return s(function(t,e){return\"degrees\"\u003d\u003d\u003de?o(t):t}(t,e))}}t.makeCalcdata\u003dfunction(e,i){var a,o,s\u003de[i],l\u003de._length,c\u003dfunction(r){return t.d2c(r,e.thetaunit)};if(s){if(n.isTypedArray(s)\u0026\u0026\"linear\"\u003d\u003d\u003dr){if(l\u003d\u003d\u003ds.length)return s;if(s.subarray)return s.subarray(0,l)}for(a\u003dnew Array(l),o\u003d0;o\u003cl;o++)a[o]\u003dc(s[o])}else{var u\u003di+\"0\",f\u003d\"d\"+i,h\u003du in e?c(e[u]):0,p\u003de[f]?c(e[f]):(t.period||2*Math.PI)/l;for(a\u003dnew Array(l),o\u003d0;o\u003cl;o++)a[o]\u003dh+o*p}return a},t.setGeometry\u003dfunction(){var i,s,l,c,u\u003de.sector,f\u003du.map(a),h\u003d{clockwise:-1,counterclockwise:1}[t.direction],p\u003da(t.rotation),d\u003dfunction(t){return h*t+p},m\u003dfunction(t){return(t-p)/h};switch(r){case\"linear\":s\u003di\u003dn.identity,c\u003da,l\u003do,t.range\u003dn.isFullCircle(f)?[u[0],u[0]+360]:f.map(m).map(o);break;case\"category\":var g\u003dt._categories.length,v\u003dt.period?Math.max(t.period,g):g;0\u003d\u003d\u003dv\u0026\u0026(v\u003d1),s\u003dc\u003dfunction(t){return 2*t*Math.PI/v},i\u003dl\u003dfunction(t){return t*v/Math.PI/2},t.range\u003d[0,v]}t.c2g\u003dfunction(t){return d(s(t))},t.g2c\u003dfunction(t){return i(m(t))},t.t2g\u003dfunction(t){return d(c(t))},t.g2t\u003dfunction(t){return l(m(t))}}}(t,e)}}},{\"../../lib\":799,\"../cartesian/set_convert\":870}],921:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plot_api/plot_template\"),a\u003dt(\"./domain\").defaults;e.exports\u003dfunction(t,e,r,o){var s,l,c\u003do.type,u\u003do.attributes,f\u003do.handleDefaults,h\u003do.partition||\"x\",p\u003de._subplots[c],d\u003dp.length,m\u003dd\u0026\u0026p[0].replace(/\\d+$/,\"\");function g(t,e){return n.coerce(s,l,u,t,e)}for(var v\u003d0;v\u003cd;v++){var y\u003dp[v];s\u003dt[y]?t[y]:t[y]\u003d{},l\u003di.newContainer(e,y,m),g(\"uirevision\",e.uirevision);var x\u003d{};x[h]\u003d[v/d,(v+1)/d],a(l,e,g,x),o.id\u003dy,f(s,l,g,o)}}},{\"../lib\":799,\"../plot_api/plot_template\":838,\"./domain\":877}],922:[function(t,e,r){\"use strict\";var n\u003dt(\"../constants/docs\");n.FORMAT_LINK,n.DATE_FORMAT_LINK;function i(t){var e\u003dt.description?\" \"+t.description:\"\",r\u003dt.keys||[];if(r.length\u003e0){for(var n\u003d[],i\u003d0;i\u003cr.length;i++)n[i]\u003d\"`\"+r[i]+\"`\";e+\u003d\"Finally, the template string has access to \",e\u003d1\u003d\u003d\u003dr.length?\"variable \"+n[0]:\"variables \"+n.slice(0,-1).join(\", \")+\" and \"+n.slice(-1)+\".\"}return e}r.hovertemplateAttrs\u003dfunction(t,e){t\u003dt||{};i(e\u003de||{});var r\u003d{valType:\"string\",dflt:\"\",editType:t.editType||\"none\"};return!1!\u003d\u003dt.arrayOk\u0026\u0026(r.arrayOk\u003d!0),r},r.texttemplateAttrs\u003dfunction(t,e){t\u003dt||{};i(e\u003de||{});var r\u003d{valType:\"string\",dflt:\"\",editType:t.editType||\"calc\"};return!1!\u003d\u003dt.arrayOk\u0026\u0026(r.arrayOk\u003d!0),r}},{\"../constants/docs\":770}],923:[function(t,e,r){\"use strict\";var n\u003dt(\"./ternary\"),i\u003dt(\"../../plots/get_data\").getSubplotCalcData,a\u003dt(\"../../lib\").counterRegex;r.name\u003d\"ternary\";var o\u003dr.attr\u003d\"subplot\";r.idRoot\u003d\"ternary\",r.idRegex\u003dr.attrRegex\u003da(\"ternary\"),(r.attributes\u003d{})[o]\u003d{valType:\"subplotid\",dflt:\"ternary\",editType:\"calc\"},r.layoutAttributes\u003dt(\"./layout_attributes\"),r.supplyLayoutDefaults\u003dt(\"./layout_defaults\"),r.plot\u003dfunction(t){for(var e\u003dt._fullLayout,r\u003dt.calcdata,a\u003de._subplots.ternary,o\u003d0;o\u003ca.length;o++){var s\u003da[o],l\u003di(r,\"ternary\",s),c\u003de[s]._subplot;c||(c\u003dnew n({id:s,graphDiv:t,container:e._ternarylayer.node()},e),e[s]._subplot\u003dc),c.plot(l,e,t._promises)}},r.clean\u003dfunction(t,e,r,n){for(var i\u003dn._subplots.ternary||[],a\u003d0;a\u003ci.length;a++){var o\u003di[a],s\u003dn[o]._subplot;!e[o]\u0026\u0026s\u0026\u0026(s.plotContainer.remove(),s.clipDef.remove(),s.clipDefRelative.remove(),s.layers[\"a-title\"].remove(),s.layers[\"b-title\"].remove(),s.layers[\"c-title\"].remove())}}},{\"../../lib\":799,\"../../plots/get_data\":887,\"./layout_attributes\":924,\"./layout_defaults\":925,\"./ternary\":926}],924:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color/attributes\"),i\u003dt(\"../domain\").attributes,a\u003dt(\"../cartesian/layout_attributes\"),o\u003dt(\"../../plot_api/edit_types\").overrideAll,s\u003dt(\"../../lib/extend\").extendFlat,l\u003d{title:{text:a.title.text,font:a.title.font},color:a.color,tickmode:a.tickmode,nticks:s({},a.nticks,{dflt:6,min:1}),tick0:a.tick0,dtick:a.dtick,tickvals:a.tickvals,ticktext:a.ticktext,ticks:a.ticks,ticklen:a.ticklen,tickwidth:a.tickwidth,tickcolor:a.tickcolor,showticklabels:a.showticklabels,showtickprefix:a.showtickprefix,tickprefix:a.tickprefix,showticksuffix:a.showticksuffix,ticksuffix:a.ticksuffix,showexponent:a.showexponent,exponentformat:a.exponentformat,minexponent:a.minexponent,separatethousands:a.separatethousands,tickfont:a.tickfont,tickangle:a.tickangle,tickformat:a.tickformat,tickformatstops:a.tickformatstops,hoverformat:a.hoverformat,showline:s({},a.showline,{dflt:!0}),linecolor:a.linecolor,linewidth:a.linewidth,showgrid:s({},a.showgrid,{dflt:!0}),gridcolor:a.gridcolor,gridwidth:a.gridwidth,layer:a.layer,min:{valType:\"number\",dflt:0,min:0},_deprecated:{title:a._deprecated.title,titlefont:a._deprecated.titlefont}},c\u003de.exports\u003do({domain:i({name:\"ternary\"}),bgcolor:{valType:\"color\",dflt:n.background},sum:{valType:\"number\",dflt:1,min:0},aaxis:l,baxis:l,caxis:l},\"plot\",\"from-root\");c.uirevision\u003d{valType:\"any\",editType:\"none\"},c.aaxis.uirevision\u003dc.baxis.uirevision\u003dc.caxis.uirevision\u003d{valType:\"any\",editType:\"none\"}},{\"../../components/color/attributes\":661,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../cartesian/layout_attributes\":864,\"../domain\":877}],925:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"../../plot_api/plot_template\"),a\u003dt(\"../../lib\"),o\u003dt(\"../subplot_defaults\"),s\u003dt(\"../cartesian/tick_label_defaults\"),l\u003dt(\"../cartesian/tick_mark_defaults\"),c\u003dt(\"../cartesian/tick_value_defaults\"),u\u003dt(\"../cartesian/line_grid_defaults\"),f\u003dt(\"./layout_attributes\"),h\u003d[\"aaxis\",\"baxis\",\"caxis\"];function p(t,e,r,a){var o,s,l,c\u003dr(\"bgcolor\"),u\u003dr(\"sum\");a.bgColor\u003dn.combine(c,a.paper_bgcolor);for(var f\u003d0;f\u003ch.length;f++)s\u003dt[o\u003dh[f]]||{},(l\u003di.newContainer(e,o))._name\u003do,d(s,l,a,e);var p\u003de.aaxis,m\u003de.baxis,g\u003de.caxis;p.min+m.min+g.min\u003e\u003du\u0026\u0026(p.min\u003d0,m.min\u003d0,g.min\u003d0,t.aaxis\u0026\u0026delete t.aaxis.min,t.baxis\u0026\u0026delete t.baxis.min,t.caxis\u0026\u0026delete t.caxis.min)}function d(t,e,r,n){var i\u003df[e._name];function o(r,n){return a.coerce(t,e,i,r,n)}o(\"uirevision\",n.uirevision),e.type\u003d\"linear\";var h\u003do(\"color\"),p\u003dh!\u003d\u003di.color.dflt?h:r.font.color,d\u003de._name.charAt(0).toUpperCase(),m\u003d\"Component \"+d,g\u003do(\"title.text\",m);e._hovertitle\u003dg\u003d\u003d\u003dm?g:d,a.coerceFont(o,\"title.font\",{family:r.font.family,size:a.bigFont(r.font.size),color:p}),o(\"min\"),c(t,e,o,\"linear\"),s(t,e,o,\"linear\",{}),l(t,e,o,{outerTicks:!0}),o(\"showticklabels\")\u0026\u0026(a.coerceFont(o,\"tickfont\",{family:r.font.family,size:r.font.size,color:p}),o(\"tickangle\"),o(\"tickformat\")),u(t,e,o,{dfltColor:h,bgColor:r.bgColor,blend:60,showLine:!0,showGrid:!0,noZeroLine:!0,attributes:i}),o(\"hoverformat\"),o(\"layer\")}e.exports\u003dfunction(t,e,r){o(t,e,r,{type:\"ternary\",attributes:f,handleDefaults:p,font:e.font,paper_bgcolor:e.paper_bgcolor})}},{\"../../components/color\":662,\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../cartesian/line_grid_defaults\":866,\"../cartesian/tick_label_defaults\":871,\"../cartesian/tick_mark_defaults\":872,\"../cartesian/tick_value_defaults\":873,\"../subplot_defaults\":921,\"./layout_attributes\":924}],926:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"../../registry\"),o\u003dt(\"../../lib\"),s\u003do.strTranslate,l\u003do._,c\u003dt(\"../../components/color\"),u\u003dt(\"../../components/drawing\"),f\u003dt(\"../cartesian/set_convert\"),h\u003dt(\"../../lib/extend\").extendFlat,p\u003dt(\"../plots\"),d\u003dt(\"../cartesian/axes\"),m\u003dt(\"../../components/dragelement\"),g\u003dt(\"../../components/fx\"),v\u003dt(\"../../components/dragelement/helpers\"),y\u003dv.freeMode,x\u003dv.rectMode,b\u003dt(\"../../components/titles\"),_\u003dt(\"../cartesian/select\").prepSelect,w\u003dt(\"../cartesian/select\").selectOnClick,T\u003dt(\"../cartesian/select\").clearSelect,k\u003dt(\"../cartesian/select\").clearSelectionsCache,M\u003dt(\"../cartesian/constants\");function A(t,e){this.id\u003dt.id,this.graphDiv\u003dt.graphDiv,this.init(e),this.makeFramework(e),this.aTickLayout\u003dnull,this.bTickLayout\u003dnull,this.cTickLayout\u003dnull}e.exports\u003dA;var S\u003dA.prototype;S.init\u003dfunction(t){this.container\u003dt._ternarylayer,this.defs\u003dt._defs,this.layoutId\u003dt._uid,this.traceHash\u003d{},this.layers\u003d{}},S.plot\u003dfunction(t,e){var r\u003de[this.id],n\u003de._size;this._hasClipOnAxisFalse\u003d!1;for(var i\u003d0;i\u003ct.length;i++){if(!1\u003d\u003d\u003dt[i][0].trace.cliponaxis){this._hasClipOnAxisFalse\u003d!0;break}}this.updateLayers(r),this.adjustLayout(r,n),p.generalUpdatePerTraceModule(this.graphDiv,this,t,r),this.layers.plotbg.select(\"path\").call(c.fill,r.bgcolor)},S.makeFramework\u003dfunction(t){var e\u003dthis.graphDiv,r\u003dt[this.id],n\u003dthis.clipId\u003d\"clip\"+this.layoutId+this.id,i\u003dthis.clipIdRelative\u003d\"clip-relative\"+this.layoutId+this.id;this.clipDef\u003do.ensureSingleById(t._clips,\"clipPath\",n,(function(t){t.append(\"path\").attr(\"d\",\"M0,0Z\")})),this.clipDefRelative\u003do.ensureSingleById(t._clips,\"clipPath\",i,(function(t){t.append(\"path\").attr(\"d\",\"M0,0Z\")})),this.plotContainer\u003do.ensureSingle(this.container,\"g\",this.id),this.updateLayers(r),u.setClipUrl(this.layers.backplot,n,e),u.setClipUrl(this.layers.grids,n,e)},S.updateLayers\u003dfunction(t){var e\u003dthis.layers,r\u003d[\"draglayer\",\"plotbg\",\"backplot\",\"grids\"];\"below traces\"\u003d\u003d\u003dt.aaxis.layer\u0026\u0026r.push(\"aaxis\",\"aline\"),\"below traces\"\u003d\u003d\u003dt.baxis.layer\u0026\u0026r.push(\"baxis\",\"bline\"),\"below traces\"\u003d\u003d\u003dt.caxis.layer\u0026\u0026r.push(\"caxis\",\"cline\"),r.push(\"frontplot\"),\"above traces\"\u003d\u003d\u003dt.aaxis.layer\u0026\u0026r.push(\"aaxis\",\"aline\"),\"above traces\"\u003d\u003d\u003dt.baxis.layer\u0026\u0026r.push(\"baxis\",\"bline\"),\"above traces\"\u003d\u003d\u003dt.caxis.layer\u0026\u0026r.push(\"caxis\",\"cline\");var i\u003dthis.plotContainer.selectAll(\"g.toplevel\").data(r,String),a\u003d[\"agrid\",\"bgrid\",\"cgrid\"];i.enter().append(\"g\").attr(\"class\",(function(t){return\"toplevel \"+t})).each((function(t){var r\u003dn.select(this);e[t]\u003dr,\"frontplot\"\u003d\u003d\u003dt?r.append(\"g\").classed(\"scatterlayer\",!0):\"backplot\"\u003d\u003d\u003dt?r.append(\"g\").classed(\"maplayer\",!0):\"plotbg\"\u003d\u003d\u003dt?r.append(\"path\").attr(\"d\",\"M0,0Z\"):\"aline\"\u003d\u003d\u003dt||\"bline\"\u003d\u003d\u003dt||\"cline\"\u003d\u003d\u003dt?r.append(\"path\"):\"grids\"\u003d\u003d\u003dt\u0026\u0026a.forEach((function(t){e[t]\u003dr.append(\"g\").classed(\"grid \"+t,!0)}))})),i.order()};var E\u003dMath.sqrt(4/3);S.adjustLayout\u003dfunction(t,e){var r,n,i,a,o,l,p\u003dthis,d\u003dt.domain,m\u003d(d.x[0]+d.x[1])/2,g\u003d(d.y[0]+d.y[1])/2,v\u003dd.x[1]-d.x[0],y\u003dd.y[1]-d.y[0],x\u003dv*e.w,b\u003dy*e.h,_\u003dt.sum,w\u003dt.aaxis.min,T\u003dt.baxis.min,k\u003dt.caxis.min;x\u003eE*b?i\u003d(a\u003db)*E:a\u003d(i\u003dx)/E,o\u003dv*i/x,l\u003dy*a/b,r\u003de.l+e.w*m-i/2,n\u003de.t+e.h*(1-g)-a/2,p.x0\u003dr,p.y0\u003dn,p.w\u003di,p.h\u003da,p.sum\u003d_,p.xaxis\u003d{type:\"linear\",range:[w+2*k-_,_-w-2*T],domain:[m-o/2,m+o/2],_id:\"x\"},f(p.xaxis,p.graphDiv._fullLayout),p.xaxis.setScale(),p.xaxis.isPtWithinRange\u003dfunction(t){return t.a\u003e\u003dp.aaxis.range[0]\u0026\u0026t.a\u003c\u003dp.aaxis.range[1]\u0026\u0026t.b\u003e\u003dp.baxis.range[1]\u0026\u0026t.b\u003c\u003dp.baxis.range[0]\u0026\u0026t.c\u003e\u003dp.caxis.range[1]\u0026\u0026t.c\u003c\u003dp.caxis.range[0]},p.yaxis\u003d{type:\"linear\",range:[w,_-T-k],domain:[g-l/2,g+l/2],_id:\"y\"},f(p.yaxis,p.graphDiv._fullLayout),p.yaxis.setScale(),p.yaxis.isPtWithinRange\u003dfunction(){return!0};var M\u003dp.yaxis.domain[0],A\u003dp.aaxis\u003dh({},t.aaxis,{range:[w,_-T-k],side:\"left\",tickangle:(+t.aaxis.tickangle||0)-30,domain:[M,M+l*E],anchor:\"free\",position:0,_id:\"y\",_length:i});f(A,p.graphDiv._fullLayout),A.setScale();var S\u003dp.baxis\u003dh({},t.baxis,{range:[_-w-k,T],side:\"bottom\",domain:p.xaxis.domain,anchor:\"free\",position:0,_id:\"x\",_length:i});f(S,p.graphDiv._fullLayout),S.setScale();var L\u003dp.caxis\u003dh({},t.caxis,{range:[_-w-T,k],side:\"right\",tickangle:(+t.caxis.tickangle||0)+30,domain:[M,M+l*E],anchor:\"free\",position:0,_id:\"y\",_length:i});f(L,p.graphDiv._fullLayout),L.setScale();var C\u003d\"M\"+r+\",\"+(n+a)+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";p.clipDef.select(\"path\").attr(\"d\",C),p.layers.plotbg.select(\"path\").attr(\"d\",C);var P\u003d\"M0,\"+a+\"h\"+i+\"l-\"+i/2+\",-\"+a+\"Z\";p.clipDefRelative.select(\"path\").attr(\"d\",P);var I\u003ds(r,n);p.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",I),p.clipDefRelative.select(\"path\").attr(\"transform\",null);var O\u003ds(r-S._offset,n+a);p.layers.baxis.attr(\"transform\",O),p.layers.bgrid.attr(\"transform\",O);var z\u003ds(r+i/2,n)+\"rotate(30)\"+s(0,-A._offset);p.layers.aaxis.attr(\"transform\",z),p.layers.agrid.attr(\"transform\",z);var D\u003ds(r+i/2,n)+\"rotate(-30)\"+s(0,-L._offset);p.layers.caxis.attr(\"transform\",D),p.layers.cgrid.attr(\"transform\",D),p.drawAxes(!0),p.layers.aline.select(\"path\").attr(\"d\",A.showline?\"M\"+r+\",\"+(n+a)+\"l\"+i/2+\",-\"+a:\"M0,0\").call(c.stroke,A.linecolor||\"#000\").style(\"stroke-width\",(A.linewidth||0)+\"px\"),p.layers.bline.select(\"path\").attr(\"d\",S.showline?\"M\"+r+\",\"+(n+a)+\"h\"+i:\"M0,0\").call(c.stroke,S.linecolor||\"#000\").style(\"stroke-width\",(S.linewidth||0)+\"px\"),p.layers.cline.select(\"path\").attr(\"d\",L.showline?\"M\"+(r+i/2)+\",\"+n+\"l\"+i/2+\",\"+a:\"M0,0\").call(c.stroke,L.linecolor||\"#000\").style(\"stroke-width\",(L.linewidth||0)+\"px\"),p.graphDiv._context.staticPlot||p.initInteractions(),u.setClipUrl(p.layers.frontplot,p._hasClipOnAxisFalse?null:p.clipId,p.graphDiv)},S.drawAxes\u003dfunction(t){var e\u003dthis.graphDiv,r\u003dthis.id.substr(7)+\"title\",n\u003dthis.layers,i\u003dthis.aaxis,a\u003dthis.baxis,o\u003dthis.caxis;if(this.drawAx(i),this.drawAx(a),this.drawAx(o),t){var s\u003dMath.max(i.showticklabels?i.tickfont.size/2:0,(o.showticklabels?.75*o.tickfont.size:0)+(\"outside\"\u003d\u003d\u003do.ticks?.87*o.ticklen:0)),c\u003d(a.showticklabels?a.tickfont.size:0)+(\"outside\"\u003d\u003d\u003da.ticks?a.ticklen:0)+3;n[\"a-title\"]\u003db.draw(e,\"a\"+r,{propContainer:i,propName:this.id+\".aaxis.title\",placeholder:l(e,\"Click to enter Component A title\"),attributes:{x:this.x0+this.w/2,y:this.y0-i.title.font.size/3-s,\"text-anchor\":\"middle\"}}),n[\"b-title\"]\u003db.draw(e,\"b\"+r,{propContainer:a,propName:this.id+\".baxis.title\",placeholder:l(e,\"Click to enter Component B title\"),attributes:{x:this.x0-c,y:this.y0+this.h+.83*a.title.font.size+c,\"text-anchor\":\"middle\"}}),n[\"c-title\"]\u003db.draw(e,\"c\"+r,{propContainer:o,propName:this.id+\".caxis.title\",placeholder:l(e,\"Click to enter Component C title\"),attributes:{x:this.x0+this.w+c,y:this.y0+this.h+.83*o.title.font.size+c,\"text-anchor\":\"middle\"}})}},S.drawAx\u003dfunction(t){var e,r\u003dthis.graphDiv,n\u003dt._name,i\u003dn.charAt(0),a\u003dt._id,s\u003dthis.layers[n],l\u003di+\"tickLayout\",c\u003d(e\u003dt).ticks+String(e.ticklen)+String(e.showticklabels);this[l]!\u003d\u003dc\u0026\u0026(s.selectAll(\".\"+a+\"tick\").remove(),this[l]\u003dc),t.setScale();var u\u003dd.calcTicks(t),f\u003dd.clipEnds(t,u),h\u003dd.makeTransTickFn(t),p\u003dd.getTickSigns(t)[2],m\u003do.deg2rad(30),g\u003dp*(t.linewidth||1)/2,v\u003dp*t.ticklen,y\u003dthis.w,x\u003dthis.h,b\u003d\"b\"\u003d\u003d\u003di?\"M0,\"+g+\"l\"+Math.sin(m)*v+\",\"+Math.cos(m)*v:\"M\"+g+\",0l\"+Math.cos(m)*v+\",\"+-Math.sin(m)*v,_\u003d{a:\"M0,0l\"+x+\",-\"+y/2,b:\"M0,0l-\"+y/2+\",-\"+x,c:\"M0,0l-\"+x+\",\"+y/2}[i];d.drawTicks(r,t,{vals:\"inside\"\u003d\u003d\u003dt.ticks?f:u,layer:s,path:b,transFn:h,crisp:!1}),d.drawGrid(r,t,{vals:f,layer:this.layers[i+\"grid\"],path:_,transFn:h,crisp:!1}),d.drawLabels(r,t,{vals:u,layer:s,transFn:h,labelFns:d.makeLabelFns(t,0,30)})};var L\u003dM.MINZOOM/2+.87,C\u003d\"m-0.87,.5h\"+L+\"v3h-\"+(L+5.2)+\"l\"+(L/2+2.6)+\",-\"+(.87*L+4.5)+\"l2.6,1.5l-\"+L/2+\",\"+.87*L+\"Z\",P\u003d\"m0.87,.5h-\"+L+\"v3h\"+(L+5.2)+\"l-\"+(L/2+2.6)+\",-\"+(.87*L+4.5)+\"l-2.6,1.5l\"+L/2+\",\"+.87*L+\"Z\",I\u003d\"m0,1l\"+L/2+\",\"+.87*L+\"l2.6,-1.5l-\"+(L/2+2.6)+\",-\"+(.87*L+4.5)+\"l-\"+(L/2+2.6)+\",\"+(.87*L+4.5)+\"l2.6,1.5l\"+L/2+\",-\"+.87*L+\"Z\",O\u003d!0;function z(t){n.select(t).selectAll(\".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners\").remove()}S.clearSelect\u003dfunction(){k(this.dragOptions),T(this.dragOptions.gd)},S.initInteractions\u003dfunction(){var t,e,r,n,f,h,p,d,v,b,T,k,A\u003dthis,S\u003dA.layers.plotbg.select(\"path\").node(),L\u003dA.graphDiv,D\u003dL._fullLayout._zoomlayer;function R(t){var e\u003d{};return e[A.id+\".aaxis.min\"]\u003dt.a,e[A.id+\".baxis.min\"]\u003dt.b,e[A.id+\".caxis.min\"]\u003dt.c,e}function F(t,e){var r\u003dL._fullLayout.clickmode;z(L),2\u003d\u003d\u003dt\u0026\u0026(L.emit(\"plotly_doubleclick\",null),a.call(\"_guiRelayout\",L,R({a:0,b:0,c:0}))),r.indexOf(\"select\")\u003e-1\u0026\u00261\u003d\u003d\u003dt\u0026\u0026w(e,L,[A.xaxis],[A.yaxis],A.id,A.dragOptions),r.indexOf(\"event\")\u003e-1\u0026\u0026g.click(L,e,A.id)}function B(t,e){return 1-e/A.h}function N(t,e){return 1-(t+(A.h-e)/Math.sqrt(3))/A.w}function j(t,e){return(t-(A.h-e)/Math.sqrt(3))/A.w}function U(i,a){var o\u003dr+i*t,s\u003dn+a*e,l\u003dMath.max(0,Math.min(1,B(0,n),B(0,s))),c\u003dMath.max(0,Math.min(1,N(r,n),N(o,s))),u\u003dMath.max(0,Math.min(1,j(r,n),j(o,s))),m\u003d(l/2+u)*A.w,g\u003d(1-l/2-c)*A.w,y\u003d(m+g)/2,x\u003dg-m,_\u003d(1-l)*A.h,w\u003d_-x/E;x\u003cM.MINZOOM?(p\u003df,T.attr(\"d\",v),k.attr(\"d\",\"M0,0Z\")):(p\u003d{a:f.a+l*h,b:f.b+c*h,c:f.c+u*h},T.attr(\"d\",v+\"M\"+m+\",\"+_+\"H\"+g+\"L\"+y+\",\"+w+\"L\"+m+\",\"+_+\"Z\"),k.attr(\"d\",\"M\"+r+\",\"+n+\"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2ZM\"+m+\",\"+_+C+\"M\"+g+\",\"+_+P+\"M\"+y+\",\"+w+I)),b||(T.transition().style(\"fill\",d\u003e.2?\"rgba(0,0,0,0.4)\":\"rgba(255,255,255,0.3)\").duration(200),k.transition().style(\"opacity\",1).duration(200),b\u003d!0),L.emit(\"plotly_relayouting\",R(p))}function V(){z(L),p!\u003d\u003df\u0026\u0026(a.call(\"_guiRelayout\",L,R(p)),O\u0026\u0026L.data\u0026\u0026L._context.showTips\u0026\u0026(o.notifier(l(L,\"Double-click to zoom back out\"),\"long\"),O\u003d!1))}function q(t,e){var r\u003dt/A.xaxis._m,n\u003de/A.yaxis._m,i\u003d[(p\u003d{a:f.a-n,b:f.b+(r+n)/2,c:f.c-(r-n)/2}).a,p.b,p.c].sort(o.sorterAsc),a\u003di.indexOf(p.a),l\u003di.indexOf(p.b),c\u003di.indexOf(p.c);i[0]\u003c0\u0026\u0026(i[1]+i[0]/2\u003c0?(i[2]+\u003di[0]+i[1],i[0]\u003di[1]\u003d0):(i[2]+\u003di[0]/2,i[1]+\u003di[0]/2,i[0]\u003d0),p\u003d{a:i[a],b:i[l],c:i[c]},e\u003d(f.a-p.a)*A.yaxis._m,t\u003d(f.c-p.c-f.b+p.b)*A.xaxis._m);var h\u003ds(A.x0+t,A.y0+e);A.plotContainer.selectAll(\".scatterlayer,.maplayer\").attr(\"transform\",h);var d\u003ds(-t,-e);A.clipDefRelative.select(\"path\").attr(\"transform\",d),A.aaxis.range\u003d[p.a,A.sum-p.b-p.c],A.baxis.range\u003d[A.sum-p.a-p.c,p.b],A.caxis.range\u003d[A.sum-p.a-p.b,p.c],A.drawAxes(!1),A._hasClipOnAxisFalse\u0026\u0026A.plotContainer.select(\".scatterlayer\").selectAll(\".trace\").call(u.hideOutsideRangePoints,A),L.emit(\"plotly_relayouting\",R(p))}function H(){a.call(\"_guiRelayout\",L,R(p))}this.dragOptions\u003d{element:S,gd:L,plotinfo:{id:A.id,domain:L._fullLayout[A.id].domain,xaxis:A.xaxis,yaxis:A.yaxis},subplot:A.id,prepFn:function(a,l,u){A.dragOptions.xaxes\u003d[A.xaxis],A.dragOptions.yaxes\u003d[A.yaxis],t\u003dL._fullLayout._invScaleX,e\u003dL._fullLayout._invScaleY;var m\u003dA.dragOptions.dragmode\u003dL._fullLayout.dragmode;y(m)?A.dragOptions.minDrag\u003d1:A.dragOptions.minDrag\u003dvoid 0,\"zoom\"\u003d\u003d\u003dm?(A.dragOptions.moveFn\u003dU,A.dragOptions.clickFn\u003dF,A.dragOptions.doneFn\u003dV,function(t,e,a){var l\u003dS.getBoundingClientRect();r\u003de-l.left,n\u003da-l.top,L._fullLayout._calcInverseTransform(L);var u\u003dL._fullLayout._invTransform,m\u003do.apply3DTransform(u)(r,n);r\u003dm[0],n\u003dm[1],f\u003d{a:A.aaxis.range[0],b:A.baxis.range[1],c:A.caxis.range[1]},p\u003df,h\u003dA.aaxis.range[1]-f.a,d\u003di(A.graphDiv._fullLayout[A.id].bgcolor).getLuminance(),v\u003d\"M0,\"+A.h+\"L\"+A.w/2+\", 0L\"+A.w+\",\"+A.h+\"Z\",b\u003d!1,T\u003dD.append(\"path\").attr(\"class\",\"zoombox\").attr(\"transform\",s(A.x0,A.y0)).style({fill:d\u003e.2?\"rgba(0,0,0,0)\":\"rgba(255,255,255,0)\",\"stroke-width\":0}).attr(\"d\",v),k\u003dD.append(\"path\").attr(\"class\",\"zoombox-corners\").attr(\"transform\",s(A.x0,A.y0)).style({fill:c.background,stroke:c.defaultLine,\"stroke-width\":1,opacity:0}).attr(\"d\",\"M0,0Z\"),A.clearSelect(L)}(0,l,u)):\"pan\"\u003d\u003d\u003dm?(A.dragOptions.moveFn\u003dq,A.dragOptions.clickFn\u003dF,A.dragOptions.doneFn\u003dH,f\u003d{a:A.aaxis.range[0],b:A.baxis.range[1],c:A.caxis.range[1]},p\u003df,A.clearSelect(L)):(x(m)||y(m))\u0026\u0026_(a,l,u,A.dragOptions,m)}},S.onmousemove\u003dfunction(t){g.hover(L,t,A.id),L._fullLayout._lasthover\u003dS,L._fullLayout._hoversubplot\u003dA.id},S.onmouseout\u003dfunction(t){L._dragging||m.unhover(L,t)},m.init(this.dragOptions)}},{\"../../components/color\":662,\"../../components/dragelement\":681,\"../../components/dragelement/helpers\":680,\"../../components/drawing\":684,\"../../components/fx\":702,\"../../components/titles\":760,\"../../lib\":799,\"../../lib/extend\":789,\"../../registry\":927,\"../cartesian/axes\":849,\"../cartesian/constants\":856,\"../cartesian/select\":869,\"../cartesian/set_convert\":870,\"../plots\":913,\"@plotly/d3\":58,tinycolor2:594}],927:[function(t,e,r){\"use strict\";var n\u003dt(\"./lib/loggers\"),i\u003dt(\"./lib/noop\"),a\u003dt(\"./lib/push_unique\"),o\u003dt(\"./lib/is_plain_object\"),s\u003dt(\"./lib/dom\").addStyleRule,l\u003dt(\"./lib/extend\"),c\u003dt(\"./plots/attributes\"),u\u003dt(\"./plots/layout_attributes\"),f\u003dl.extendFlat,h\u003dl.extendDeepAll;function p(t){var e\u003dt.name,i\u003dt.categories,a\u003dt.meta;if(r.modules[e])n.log(\"Type \"+e+\" already registered\");else{r.subplotsRegistry[t.basePlotModule.name]||function(t){var e\u003dt.name;if(r.subplotsRegistry[e])return void n.log(\"Plot type \"+e+\" already registered.\");for(var i in v(t),r.subplotsRegistry[e]\u003dt,r.componentsRegistry)b(i,t.name)}(t.basePlotModule);for(var o\u003d{},l\u003d0;l\u003ci.length;l++)o[i[l]]\u003d!0,r.allCategories[i[l]]\u003d!0;for(var c in r.modules[e]\u003d{_module:t,categories:o},a\u0026\u0026Object.keys(a).length\u0026\u0026(r.modules[e].meta\u003da),r.allTypes.push(e),r.componentsRegistry)y(c,e);t.layoutAttributes\u0026\u0026f(r.traceLayoutAttributes,t.layoutAttributes);var u\u003dt.basePlotModule,h\u003du.name;if(\"mapbox\"\u003d\u003d\u003dh){var p\u003du.constants.styleRules;for(var d in p)s(\".js-plotly-plot .plotly .mapboxgl-\"+d,p[d])}\"geo\"!\u003d\u003dh\u0026\u0026\"mapbox\"!\u003d\u003dh||void 0\u003d\u003d\u003dtypeof window||void 0!\u003d\u003dwindow.PlotlyGeoAssets||(window.PlotlyGeoAssets\u003d{topojson:{}})}}function d(t){if(\"string\"!\u003dtypeof t.name)throw new Error(\"Component module *name* must be a string.\");var e\u003dt.name;for(var n in r.componentsRegistry[e]\u003dt,t.layoutAttributes\u0026\u0026(t.layoutAttributes._isLinkedToArray\u0026\u0026a(r.layoutArrayContainers,e),v(t)),r.modules)y(e,n);for(var i in r.subplotsRegistry)b(e,i);for(var o in r.transformsRegistry)x(e,o);t.schema\u0026\u0026t.schema.layout\u0026\u0026h(u,t.schema.layout)}function m(t){if(\"string\"!\u003dtypeof t.name)throw new Error(\"Transform module *name* must be a string.\");var e\u003d\"Transform module \"+t.name,i\u003d\"function\"\u003d\u003dtypeof t.transform,a\u003d\"function\"\u003d\u003dtypeof t.calcTransform;if(!i\u0026\u0026!a)throw new Error(e+\" is missing a *transform* or *calcTransform* method.\");for(var s in i\u0026\u0026a\u0026\u0026n.log([e+\" has both a *transform* and *calcTransform* methods.\",\"Please note that all *transform* methods are executed\",\"before all *calcTransform* methods.\"].join(\" \")),o(t.attributes)||n.log(e+\" registered without an *attributes* object.\"),\"function\"!\u003dtypeof t.supplyDefaults\u0026\u0026n.log(e+\" registered without a *supplyDefaults* method.\"),r.transformsRegistry[t.name]\u003dt,r.componentsRegistry)x(s,t.name)}function g(t){var e\u003dt.name,n\u003de.split(\"-\")[0],i\u003dt.dictionary,a\u003dt.format,o\u003di\u0026\u0026Object.keys(i).length,s\u003da\u0026\u0026Object.keys(a).length,l\u003dr.localeRegistry,c\u003dl[e];if(c||(l[e]\u003dc\u003d{}),n!\u003d\u003de){var u\u003dl[n];u||(l[n]\u003du\u003d{}),o\u0026\u0026u.dictionary\u003d\u003d\u003dc.dictionary\u0026\u0026(u.dictionary\u003di),s\u0026\u0026u.format\u003d\u003d\u003dc.format\u0026\u0026(u.format\u003da)}o\u0026\u0026(c.dictionary\u003di),s\u0026\u0026(c.format\u003da)}function v(t){if(t.layoutAttributes){var e\u003dt.layoutAttributes._arrayAttrRegexps;if(e)for(var n\u003d0;n\u003ce.length;n++)a(r.layoutArrayRegexes,e[n])}}function y(t,e){var n\u003dr.componentsRegistry[t].schema;if(n\u0026\u0026n.traces){var i\u003dn.traces[e];i\u0026\u0026h(r.modules[e]._module.attributes,i)}}function x(t,e){var n\u003dr.componentsRegistry[t].schema;if(n\u0026\u0026n.transforms){var i\u003dn.transforms[e];i\u0026\u0026h(r.transformsRegistry[e].attributes,i)}}function b(t,e){var n\u003dr.componentsRegistry[t].schema;if(n\u0026\u0026n.subplots){var i\u003dr.subplotsRegistry[e],a\u003di.layoutAttributes,o\u003d\"subplot\"\u003d\u003d\u003di.attr?i.name:i.attr;Array.isArray(o)\u0026\u0026(o\u003do[0]);var s\u003dn.subplots[o];a\u0026\u0026s\u0026\u0026h(a,s)}}function _(t){return\"object\"\u003d\u003dtypeof t\u0026\u0026(t\u003dt.type),t}r.modules\u003d{},r.allCategories\u003d{},r.allTypes\u003d[],r.subplotsRegistry\u003d{},r.transformsRegistry\u003d{},r.componentsRegistry\u003d{},r.layoutArrayContainers\u003d[],r.layoutArrayRegexes\u003d[],r.traceLayoutAttributes\u003d{},r.localeRegistry\u003d{},r.apiMethodRegistry\u003d{},r.collectableSubplotTypes\u003dnull,r.register\u003dfunction(t){if(r.collectableSubplotTypes\u003dnull,!t)throw new Error(\"No argument passed to Plotly.register.\");t\u0026\u0026!Array.isArray(t)\u0026\u0026(t\u003d[t]);for(var e\u003d0;e\u003ct.length;e++){var n\u003dt[e];if(!n)throw new Error(\"Invalid module was attempted to be registered!\");switch(n.moduleType){case\"trace\":p(n);break;case\"transform\":m(n);break;case\"component\":d(n);break;case\"locale\":g(n);break;case\"apiMethod\":var i\u003dn.name;r.apiMethodRegistry[i]\u003dn.fn;break;default:throw new Error(\"Invalid module was attempted to be registered!\")}}},r.getModule\u003dfunction(t){var e\u003dr.modules[_(t)];return!!e\u0026\u0026e._module},r.traceIs\u003dfunction(t,e){if(\"various\"\u003d\u003d\u003d(t\u003d_(t)))return!1;var i\u003dr.modules[t];return i||(t\u0026\u0026n.log(\"Unrecognized trace type \"+t+\".\"),i\u003dr.modules[c.type.dflt]),!!i.categories[e]},r.getTransformIndices\u003dfunction(t,e){for(var r\u003d[],n\u003dt.transforms||[],i\u003d0;i\u003cn.length;i++)n[i].type\u003d\u003d\u003de\u0026\u0026r.push(i);return r},r.hasTransform\u003dfunction(t,e){for(var r\u003dt.transforms||[],n\u003d0;n\u003cr.length;n++)if(r[n].type\u003d\u003d\u003de)return!0;return!1},r.getComponentMethod\u003dfunction(t,e){var n\u003dr.componentsRegistry[t];return n\u0026\u0026n[e]||i},r.call\u003dfunction(){var t\u003darguments[0],e\u003d[].slice.call(arguments,1);return r.apiMethodRegistry[t].apply(null,e)}},{\"./lib/dom\":787,\"./lib/extend\":789,\"./lib/is_plain_object\":800,\"./lib/loggers\":803,\"./lib/noop\":808,\"./lib/push_unique\":814,\"./plots/attributes\":845,\"./plots/layout_attributes\":904}],928:[function(t,e,r){\"use strict\";var n\u003dt(\"../registry\"),i\u003dt(\"../lib\"),a\u003di.extendFlat,o\u003di.extendDeep;function s(t){var e;switch(t){case\"themes__thumb\":e\u003d{autosize:!0,width:150,height:150,title:{text:\"\"},showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case\"thumbnail\":e\u003d{title:{text:\"\"},hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:\"\",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e\u003d{}}return e}e.exports\u003dfunction(t,e){var r,i,l\u003dt.data,c\u003dt.layout,u\u003do([],l),f\u003do({},c,s(e.tileClass)),h\u003dt._context||{};if(e.width\u0026\u0026(f.width\u003de.width),e.height\u0026\u0026(f.height\u003de.height),\"thumbnail\"\u003d\u003d\u003de.tileClass||\"themes__thumb\"\u003d\u003d\u003de.tileClass){f.annotations\u003d[];var p\u003dObject.keys(f);for(r\u003d0;r\u003cp.length;r++)i\u003dp[r],[\"xaxis\",\"yaxis\",\"zaxis\"].indexOf(i.slice(0,5))\u003e-1\u0026\u0026(f[p[r]].title\u003d{text:\"\"});for(r\u003d0;r\u003cu.length;r++){var d\u003du[r];d.showscale\u003d!1,d.marker\u0026\u0026(d.marker.showscale\u003d!1),n.traceIs(d,\"pie-like\")\u0026\u0026(d.textposition\u003d\"none\")}}if(Array.isArray(e.annotations))for(r\u003d0;r\u003ce.annotations.length;r++)f.annotations.push(e.annotations[r]);var m\u003dObject.keys(f).filter((function(t){return t.match(/^scene\\d*$/)}));if(m.length){var g\u003d{};for(\"thumbnail\"\u003d\u003d\u003de.tileClass\u0026\u0026(g\u003d{title:{text:\"\"},showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r\u003d0;r\u003cm.length;r++){var v\u003df[m[r]];v.xaxis||(v.xaxis\u003d{}),v.yaxis||(v.yaxis\u003d{}),v.zaxis||(v.zaxis\u003d{}),a(v.xaxis,g),a(v.yaxis,g),a(v.zaxis,g),v._scene\u003dnull}}var y\u003ddocument.createElement(\"div\");e.tileClass\u0026\u0026(y.className\u003de.tileClass);var x\u003d{gd:y,td:y,layout:f,data:u,config:{staticPlot:void 0\u003d\u003d\u003de.staticPlot||e.staticPlot,plotGlPixelRatio:void 0\u003d\u003d\u003de.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:h.mapboxAccessToken}};return\"transparent\"!\u003d\u003de.setBackground\u0026\u0026(x.config.setBackground\u003de.setBackground||\"opaque\"),x.gd.defaultLayout\u003ds(e.tileClass),x}},{\"../lib\":799,\"../registry\":927}],929:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plot_api/to_image\"),a\u003dt(\"./filesaver\"),o\u003dt(\"./helpers\");e.exports\u003dfunction(t,e){var r;return n.isPlainObject(t)||(r\u003dn.getGraphDiv(t)),(e\u003de||{}).format\u003de.format||\"png\",e.width\u003de.width||null,e.height\u003de.height||null,e.imageDataOnly\u003d!0,new Promise((function(s,l){r\u0026\u0026r._snapshotInProgress\u0026\u0026l(new Error(\"Snapshotting already in progress.\")),n.isIE()\u0026\u0026\"svg\"!\u003d\u003de.format\u0026\u0026l(new Error(o.MSG_IE_BAD_FORMAT)),r\u0026\u0026(r._snapshotInProgress\u003d!0);var c\u003di(t,e),u\u003de.filename||t.fn||\"newplot\";u+\u003d\".\"+e.format.replace(\"-\",\".\"),c.then((function(t){return r\u0026\u0026(r._snapshotInProgress\u003d!1),a(t,u,e.format)})).then((function(t){s(t)})).catch((function(t){r\u0026\u0026(r._snapshotInProgress\u003d!1),l(t)}))}))}},{\"../lib\":799,\"../plot_api/to_image\":841,\"./filesaver\":930,\"./helpers\":931}],930:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"./helpers\");e.exports\u003dfunction(t,e,r){var a\u003ddocument.createElement(\"a\"),o\u003d\"download\"in a;return new Promise((function(s,l){var c,u;if(n.isSafari()){var f\u003d\"svg\"\u003d\u003d\u003dr?\",\":\";base64,\";return i.octetStream(f+encodeURIComponent(t)),s(e)}return n.isIE()?(c\u003di.createBlob(t,\"svg\"),window.navigator.msSaveBlob(c,e),c\u003dnull,s(e)):o?(c\u003di.createBlob(t,r),u\u003di.createObjectURL(c),a.href\u003du,a.download\u003de,document.body.appendChild(a),a.click(),document.body.removeChild(a),i.revokeObjectURL(u),c\u003dnull,s(e)):void l(new Error(\"download error\"))}))}},{\"../lib\":799,\"./helpers\":931}],931:[function(t,e,r){\"use strict\";var n\u003dt(\"../registry\");r.getDelay\u003dfunction(t){return t._has\u0026\u0026(t._has(\"gl3d\")||t._has(\"gl2d\")||t._has(\"mapbox\"))?500:0},r.getRedrawFunc\u003dfunction(t){return function(){n.getComponentMethod(\"colorbar\",\"draw\")(t)}},r.encodeSVG\u003dfunction(t){return\"data:image/svg+xml,\"+encodeURIComponent(t)},r.encodeJSON\u003dfunction(t){return\"data:application/json,\"+encodeURIComponent(t)};var i\u003dwindow.URL||window.webkitURL;r.createObjectURL\u003dfunction(t){return i.createObjectURL(t)},r.revokeObjectURL\u003dfunction(t){return i.revokeObjectURL(t)},r.createBlob\u003dfunction(t,e){if(\"svg\"\u003d\u003d\u003de)return new window.Blob([t],{type:\"image/svg+xml;charset\u003dutf-8\"});if(\"full-json\"\u003d\u003d\u003de)return new window.Blob([t],{type:\"application/json;charset\u003dutf-8\"});var r\u003dfunction(t){for(var e\u003dt.length,r\u003dnew ArrayBuffer(e),n\u003dnew Uint8Array(r),i\u003d0;i\u003ce;i++)n[i]\u003dt.charCodeAt(i);return r}(window.atob(t));return new window.Blob([r],{type:\"image/\"+e})},r.octetStream\u003dfunction(t){document.location.href\u003d\"data:application/octet-stream\"+t},r.IMAGE_URL_PREFIX\u003d/^data:image\\/\\w+;base64,/,r.MSG_IE_BAD_FORMAT\u003d\"Sorry IE does not support downloading from canvas. Try {format:\u0027svg\u0027} instead.\"},{\"../registry\":927}],932:[function(t,e,r){\"use strict\";var n\u003dt(\"./helpers\"),i\u003d{getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:t(\"./cloneplot\"),toSVG:t(\"./tosvg\"),svgToImg:t(\"./svgtoimg\"),toImage:t(\"./toimage\"),downloadImage:t(\"./download\")};e.exports\u003di},{\"./cloneplot\":928,\"./download\":929,\"./helpers\":931,\"./svgtoimg\":933,\"./toimage\":934,\"./tosvg\":935}],933:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"events\").EventEmitter,a\u003dt(\"./helpers\");e.exports\u003dfunction(t){var e\u003dt.emitter||new i,r\u003dnew Promise((function(i,o){var s\u003dwindow.Image,l\u003dt.svg,c\u003dt.format||\"png\";if(n.isIE()\u0026\u0026\"svg\"!\u003d\u003dc){var u\u003dnew Error(a.MSG_IE_BAD_FORMAT);return o(u),t.promise?r:e.emit(\"error\",u)}var f,h,p\u003dt.canvas,d\u003dt.scale||1,m\u003dt.width||300,g\u003dt.height||150,v\u003dd*m,y\u003dd*g,x\u003dp.getContext(\"2d\"),b\u003dnew s;\"svg\"\u003d\u003d\u003dc||n.isSafari()?h\u003da.encodeSVG(l):(f\u003da.createBlob(l,\"svg\"),h\u003da.createObjectURL(f)),p.width\u003dv,p.height\u003dy,b.onload\u003dfunction(){var r;switch(f\u003dnull,a.revokeObjectURL(h),\"svg\"!\u003d\u003dc\u0026\u0026x.drawImage(b,0,0,v,y),c){case\"jpeg\":r\u003dp.toDataURL(\"image/jpeg\");break;case\"png\":r\u003dp.toDataURL(\"image/png\");break;case\"webp\":r\u003dp.toDataURL(\"image/webp\");break;case\"svg\":r\u003dh;break;default:var n\u003d\"Image format is not jpeg, png, svg or webp.\";if(o(new Error(n)),!t.promise)return e.emit(\"error\",n)}i(r),t.promise||e.emit(\"success\",r)},b.onerror\u003dfunction(r){if(f\u003dnull,a.revokeObjectURL(h),o(r),!t.promise)return e.emit(\"error\",r)},b.src\u003dh}));return t.promise?r:e}},{\"../lib\":799,\"./helpers\":931,events:116}],934:[function(t,e,r){\"use strict\";var n\u003dt(\"events\").EventEmitter,i\u003dt(\"../registry\"),a\u003dt(\"../lib\"),o\u003dt(\"./helpers\"),s\u003dt(\"./cloneplot\"),l\u003dt(\"./tosvg\"),c\u003dt(\"./svgtoimg\");e.exports\u003dfunction(t,e){var r\u003dnew n,u\u003ds(t,{format:\"png\"}),f\u003du.gd;f.style.position\u003d\"absolute\",f.style.left\u003d\"-5000px\",document.body.appendChild(f);var h\u003do.getRedrawFunc(f);return i.call(\"_doPlot\",f,u.data,u.layout,u.config).then(h).then((function(){var t\u003do.getDelay(f._fullLayout);setTimeout((function(){var t\u003dl(f),n\u003ddocument.createElement(\"canvas\");n.id\u003da.randstr(),(r\u003dc({format:e.format,width:f._fullLayout.width,height:f._fullLayout.height,canvas:n,emitter:r,svg:t})).clean\u003dfunction(){f\u0026\u0026document.body.removeChild(f)}}),t)})).catch((function(t){r.emit(\"error\",t)})),r}},{\"../lib\":799,\"../registry\":927,\"./cloneplot\":928,\"./helpers\":931,\"./svgtoimg\":933,\"./tosvg\":935,events:116}],935:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../lib\"),a\u003dt(\"../components/drawing\"),o\u003dt(\"../components/color\"),s\u003dt(\"../constants/xmlns_namespaces\"),l\u003d/\"/g,c\u003dnew RegExp(\u0027(\"TOBESTRIPPED)|(TOBESTRIPPED\")\u0027,\"g\");e.exports\u003dfunction(t,e,r){var u,f,h\u003dt._fullLayout,p\u003dh._paper,d\u003dh._toppaper,m\u003dh.width,g\u003dh.height;p.insert(\"rect\",\":first-child\").call(a.setRect,0,0,m,g).call(o.fill,h.paper_bgcolor);var v\u003dh._basePlotModules||[];for(u\u003d0;u\u003cv.length;u++){var y\u003dv[u];y.toSVG\u0026\u0026y.toSVG(t)}if(d){var x\u003dd.node().childNodes,b\u003dArray.prototype.slice.call(x);for(u\u003d0;u\u003cb.length;u++){var _\u003db[u];_.childNodes.length\u0026\u0026p.node().appendChild(_)}}h._draggers\u0026\u0026h._draggers.remove(),p.node().style.background\u003d\"\",p.selectAll(\"text\").attr({\"data-unformatted\":null,\"data-math\":null}).each((function(){var t\u003dn.select(this);if(\"hidden\"!\u003d\u003dthis.style.visibility\u0026\u0026\"none\"!\u003d\u003dthis.style.display){t.style({visibility:null,display:null});var e\u003dthis.style.fontFamily;e\u0026\u0026-1!\u003d\u003de.indexOf(\u0027\"\u0027)\u0026\u0026t.style(\"font-family\",e.replace(l,\"TOBESTRIPPED\"))}else t.remove()}));var w\u003d[];if(h._gradientUrlQueryParts)for(f in h._gradientUrlQueryParts)w.push(f);if(h._patternUrlQueryParts)for(f in h._patternUrlQueryParts)w.push(f);w.length\u0026\u0026p.selectAll(w.join(\",\")).each((function(){var t\u003dn.select(this),e\u003dthis.style.fill;e\u0026\u0026-1!\u003d\u003de.indexOf(\"url(\")\u0026\u0026t.style(\"fill\",e.replace(l,\"TOBESTRIPPED\"));var r\u003dthis.style.stroke;r\u0026\u0026-1!\u003d\u003dr.indexOf(\"url(\")\u0026\u0026t.style(\"stroke\",r.replace(l,\"TOBESTRIPPED\"))})),\"pdf\"!\u003d\u003de\u0026\u0026\"eps\"!\u003d\u003de||p.selectAll(\"#MathJax_SVG_glyphs path\").attr(\"stroke-width\",0),p.node().setAttributeNS(s.xmlns,\"xmlns\",s.svg),p.node().setAttributeNS(s.xmlns,\"xmlns:xlink\",s.xlink),\"svg\"\u003d\u003d\u003de\u0026\u0026r\u0026\u0026(p.attr(\"width\",r*m),p.attr(\"height\",r*g),p.attr(\"viewBox\",\"0 0 \"+m+\" \"+g));var T\u003d(new window.XMLSerializer).serializeToString(p.node());return T\u003dfunction(t){var e\u003dn.select(\"body\").append(\"div\").style({display:\"none\"}).html(\"\"),r\u003dt.replace(/(\u0026[^;]*;)/gi,(function(t){return\"\u0026lt;\"\u003d\u003d\u003dt?\"\u0026#60;\":\"\u0026rt;\"\u003d\u003d\u003dt?\"\u0026#62;\":-1!\u003d\u003dt.indexOf(\"\u003c\")||-1!\u003d\u003dt.indexOf(\"\u003e\")?\"\":e.html(t).text()}));return e.remove(),r}(T),T\u003d(T\u003dT.replace(/\u0026(?!\\w+;|\\#[0-9]+;| \\#x[0-9A-F]+;)/g,\"\u0026amp;\")).replace(c,\"\u0027\"),i.isIE()\u0026\u0026(T\u003d(T\u003d(T\u003dT.replace(/\"/gi,\"\u0027\")).replace(/(\\(\u0027#)([^\u0027]*)(\u0027\\))/gi,\u0027(\"#$2\")\u0027)).replace(/(\\\\\u0027)/gi,\u0027\"\u0027)),T}},{\"../components/color\":662,\"../components/drawing\":684,\"../constants/xmlns_namespaces\":776,\"../lib\":799,\"@plotly/d3\":58}],936:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e){for(var r\u003d0;r\u003ct.length;r++)t[r].i\u003dr;n.mergeArray(e.text,t,\"tx\"),n.mergeArray(e.hovertext,t,\"htx\");var i\u003de.marker;if(i){n.mergeArray(i.opacity,t,\"mo\",!0),n.mergeArray(i.color,t,\"mc\");var a\u003di.line;a\u0026\u0026(n.mergeArray(a.color,t,\"mlc\"),n.mergeArrayCastPositive(a.width,t,\"mlw\"))}}},{\"../../lib\":799}],937:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/attributes\"),i\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,s\u003dt(\"../../components/colorscale/attributes\"),l\u003dt(\"../../plots/font_attributes\"),c\u003dt(\"./constants\"),u\u003dt(\"../../components/drawing/attributes\").pattern,f\u003dt(\"../../lib/extend\").extendFlat,h\u003dl({editType:\"calc\",arrayOk:!0,colorEditType:\"style\"}),p\u003df({},n.marker.line.width,{dflt:0}),d\u003df({width:p,editType:\"calc\"},s(\"marker.line\")),m\u003df({line:d,editType:\"calc\"},s(\"marker\"),{opacity:{valType:\"number\",arrayOk:!0,dflt:1,min:0,max:1,editType:\"style\"},pattern:u});e.exports\u003d{x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),text:n.text,texttemplate:o({editType:\"plot\"},{keys:c.eventDataKeys}),hovertext:n.hovertext,hovertemplate:a({},{keys:c.eventDataKeys}),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"auto\",arrayOk:!0,editType:\"calc\"},insidetextanchor:{valType:\"enumerated\",values:[\"end\",\"middle\",\"start\"],dflt:\"end\",editType:\"plot\"},textangle:{valType:\"angle\",dflt:\"auto\",editType:\"plot\"},textfont:f({},h,{}),insidetextfont:f({},h,{}),outsidetextfont:f({},h,{}),constraintext:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"both\",\"none\"],dflt:\"both\",editType:\"calc\"},cliponaxis:f({},n.cliponaxis,{}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},base:{valType:\"any\",dflt:null,arrayOk:!0,editType:\"calc\"},offset:{valType:\"number\",dflt:null,arrayOk:!0,editType:\"calc\"},width:{valType:\"number\",dflt:null,min:0,arrayOk:!0,editType:\"calc\"},marker:m,offsetgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},alignmentgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},selected:{marker:{opacity:n.selected.marker.opacity,color:n.selected.marker.color,editType:\"style\"},textfont:n.selected.textfont,editType:\"style\"},unselected:{marker:{opacity:n.unselected.marker.opacity,color:n.unselected.marker.color,editType:\"style\"},textfont:n.unselected.textfont,editType:\"style\"},_deprecated:{bardir:{valType:\"enumerated\",editType:\"calc\",values:[\"v\",\"h\"]}}}},{\"../../components/colorscale/attributes\":669,\"../../components/drawing/attributes\":683,\"../../lib/extend\":789,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/font_attributes\":878,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214,\"./constants\":939}],938:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../plots/cartesian/align_period\"),a\u003dt(\"../../components/colorscale/helpers\").hasColorscale,o\u003dt(\"../../components/colorscale/calc\"),s\u003dt(\"./arrays_to_calcdata\"),l\u003dt(\"../scatter/calc_selection\");e.exports\u003dfunction(t,e){var r,c,u,f,h\u003dn.getFromId(t,e.xaxis||\"x\"),p\u003dn.getFromId(t,e.yaxis||\"y\"),d\u003d{msUTC:!(!e.base\u0026\u00260!\u003d\u003de.base)};\"h\"\u003d\u003d\u003de.orientation?(r\u003dh.makeCalcdata(e,\"x\",d),u\u003dp.makeCalcdata(e,\"y\"),c\u003di(e,p,\"y\",u),f\u003d!!e.yperiodalignment):(r\u003dp.makeCalcdata(e,\"y\",d),u\u003dh.makeCalcdata(e,\"x\"),c\u003di(e,h,\"x\",u),f\u003d!!e.xperiodalignment);for(var m\u003dMath.min(c.length,r.length),g\u003dnew Array(m),v\u003d0;v\u003cm;v++)g[v]\u003d{p:c[v],s:r[v]},f\u0026\u0026(g[v].orig_p\u003du[v]),e.ids\u0026\u0026(g[v].id\u003dString(e.ids[v]));return a(e,\"marker\")\u0026\u0026o(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),a(e,\"marker.line\")\u0026\u0026o(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),s(g,e),l(g,e),g}},{\"../../components/colorscale/calc\":670,\"../../components/colorscale/helpers\":673,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849,\"../scatter/calc_selection\":1216,\"./arrays_to_calcdata\":936}],939:[function(t,e,r){\"use strict\";e.exports\u003d{TEXTPAD:3,eventDataKeys:[\"value\",\"label\"]}},{}],940:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\").isArrayOrTypedArray,a\u003dt(\"../../constants/numerical\").BADNUM,o\u003dt(\"../../registry\"),s\u003dt(\"../../plots/cartesian/axes\"),l\u003dt(\"../../plots/cartesian/constraints\").getAxisGroup,c\u003dt(\"./sieve.js\");function u(t,e,r,o,u){if(o.length){var b,_,w,T;switch(function(t,e){var r,a;for(r\u003d0;r\u003ce.length;r++){var o,s\u003de[r],l\u003ds[0].trace,c\u003d\"funnel\"\u003d\u003d\u003dl.type?l._base:l.base,u\u003d\"h\"\u003d\u003d\u003dl.orientation?l.xcalendar:l.ycalendar,f\u003d\"category\"\u003d\u003d\u003dt.type||\"multicategory\"\u003d\u003d\u003dt.type?function(){return null}:t.d2c;if(i(c)){for(a\u003d0;a\u003cMath.min(c.length,s.length);a++)o\u003df(c[a],0,u),n(o)?(s[a].b\u003d+o,s[a].hasB\u003d1):s[a].b\u003d0;for(;a\u003cs.length;a++)s[a].b\u003d0}else{o\u003df(c,0,u);var h\u003dn(o);for(o\u003dh?o:0,a\u003d0;a\u003cs.length;a++)s[a].b\u003do,h\u0026\u0026(s[a].hasB\u003d1)}}}(r,o),u.mode){case\"overlay\":f(e,r,o,u);break;case\"group\":for(b\u003d[],_\u003d[],w\u003d0;w\u003co.length;w++)void 0\u003d\u003d\u003d(T\u003do[w])[0].trace.offset?_.push(T):b.push(T);_.length\u0026\u0026function(t,e,r,n,i){var o\u003dnew c(n,{posAxis:e,sepNegVal:!1,overlapNoMerge:!i.norm});(function(t,e,r,n){for(var i\u003dt._fullLayout,a\u003dr.positions,o\u003dr.distinctPositions,s\u003dr.minDiff,c\u003dr.traces,u\u003dc.length,f\u003da.length!\u003d\u003do.length,h\u003ds*(1-n.gap),g\u003dl(i,e._id)+c[0][0].trace.orientation,v\u003di._alignmentOpts[g]||{},y\u003d0;y\u003cu;y++){var x,b,_\u003dc[y],w\u003d_[0].trace,T\u003dv[w.alignmentgroup]||{},k\u003dObject.keys(T.offsetGroups||{}).length,M\u003d(x\u003dk?h/k:f?h/u:h)*(1-(n.groupgap||0));b\u003dk?((2*w._offsetIndex+1-k)*x-M)/2:f?((2*y+1-u)*x-M)/2:-M/2;var A\u003d_[0].t;A.barwidth\u003dM,A.poffset\u003db,A.bargroupwidth\u003dh,A.bardelta\u003ds}r.binWidth\u003dc[0][0].t.barwidth/100,p(r),d(e,r),m(e,r,f)})(t,e,o,i),function(t,e){for(var r\u003dt.traces,n\u003d0;n\u003cr.length;n++){var i\u003dr[n];if(void 0\u003d\u003d\u003di[0].trace.base)for(var o\u003dnew c([i],{posAxis:e,sepNegVal:!0,overlapNoMerge:!0}),s\u003d0;s\u003ci.length;s++){var l\u003di[s];if(l.p!\u003d\u003da){var u\u003do.put(l.p,l.b+l.s);u\u0026\u0026(l.b\u003du)}}}}(o,e),i.norm?(v(o),y(r,o,i)):g(r,o)}(t,e,r,_,u),b.length\u0026\u0026f(e,r,b,u);break;case\"stack\":case\"relative\":for(b\u003d[],_\u003d[],w\u003d0;w\u003co.length;w++)void 0\u003d\u003d\u003d(T\u003do[w])[0].trace.base?_.push(T):b.push(T);_.length\u0026\u0026function(t,e,r,n,i){var o\u003dnew c(n,{posAxis:e,sepNegVal:\"relative\"\u003d\u003d\u003di.mode,overlapNoMerge:!(i.norm||\"stack\"\u003d\u003d\u003di.mode||\"relative\"\u003d\u003d\u003di.mode)});h(e,o,i),function(t,e,r){var n,i,o,l,c,u,f\u003dx(t),h\u003de.traces;for(l\u003d0;l\u003ch.length;l++)if(n\u003dh[l],\"funnel\"\u003d\u003d\u003d(i\u003dn[0].trace).type)for(c\u003d0;c\u003cn.length;c++)(u\u003dn[c]).s!\u003d\u003da\u0026\u0026e.put(u.p,-.5*u.s);for(l\u003d0;l\u003ch.length;l++){n\u003dh[l],i\u003dn[0].trace,o\u003d\"funnel\"\u003d\u003d\u003di.type;var p\u003d[];for(c\u003d0;c\u003cn.length;c++)if((u\u003dn[c]).s!\u003d\u003da){var d;d\u003do?u.s:u.s+u.b;var m\u003de.put(u.p,d),g\u003dm+d;u.b\u003dm,u[f]\u003dg,r.norm||(p.push(g),u.hasB\u0026\u0026p.push(m))}r.norm||(i._extremes[t._id]\u003ds.findExtremes(t,p,{tozero:!0,padded:!0}))}}(r,o,i);for(var l\u003d0;l\u003cn.length;l++)for(var u\u003dn[l],f\u003d0;f\u003cu.length;f++){var p\u003du[f];if(p.s!\u003d\u003da)p.b+p.s\u003d\u003d\u003do.get(p.p,p.s)\u0026\u0026(p._outmost\u003d!0)}i.norm\u0026\u0026y(r,o,i)}(0,e,r,_,u),b.length\u0026\u0026f(e,r,b,u)}!function(t,e){var r,i,a,o\u003dx(e),s\u003d{},l\u003d1/0,c\u003d-1/0;for(r\u003d0;r\u003ct.length;r++)for(a\u003dt[r],i\u003d0;i\u003ca.length;i++){var u\u003da[i].p;n(u)\u0026\u0026(l\u003dMath.min(l,u),c\u003dMath.max(c,u))}var f\u003d1e4/(c-l),h\u003ds.round\u003dfunction(t){return String(Math.round(f*(t-l)))};for(r\u003d0;r\u003ct.length;r++){(a\u003dt[r])[0].t.extents\u003ds;var p\u003da[0].t.poffset,d\u003dArray.isArray(p);for(i\u003d0;i\u003ca.length;i++){var m\u003da[i],g\u003dm[o]-m.w/2;if(n(g)){var v\u003dm[o]+m.w/2,y\u003dh(m.p);s[y]?s[y]\u003d[Math.min(g,s[y][0]),Math.max(v,s[y][1])]:s[y]\u003d[g,v]}m.p0\u003dm.p+(d?p[i]:p),m.p1\u003dm.p0+m.w,m.s0\u003dm.b,m.s1\u003dm.s0+m.s}}}(o,e)}}function f(t,e,r,n){for(var i\u003d0;i\u003cr.length;i++){var a\u003dr[i],o\u003dnew c([a],{posAxis:t,sepNegVal:!1,overlapNoMerge:!n.norm});h(t,o,n),n.norm?(v(o),y(e,o,n)):g(e,o)}}function h(t,e,r){for(var n\u003de.minDiff,i\u003de.traces,a\u003dn*(1-r.gap),o\u003da*(1-(r.groupgap||0)),s\u003d-o/2,l\u003d0;l\u003ci.length;l++){var c\u003di[l][0].t;c.barwidth\u003do,c.poffset\u003ds,c.bargroupwidth\u003da,c.bardelta\u003dn}e.binWidth\u003di[0][0].t.barwidth/100,p(e),d(t,e),m(t,e)}function p(t){var e,r,a\u003dt.traces;for(e\u003d0;e\u003ca.length;e++){var o,s\u003da[e],l\u003ds[0],c\u003dl.trace,u\u003dl.t,f\u003dc._offset||c.offset,h\u003du.poffset;if(i(f)){for(o\u003dArray.prototype.slice.call(f,0,s.length),r\u003d0;r\u003co.length;r++)n(o[r])||(o[r]\u003dh);for(r\u003do.length;r\u003cs.length;r++)o.push(h);u.poffset\u003do}else void 0!\u003d\u003df\u0026\u0026(u.poffset\u003df);var p\u003dc._width||c.width,d\u003du.barwidth;if(i(p)){var m\u003dArray.prototype.slice.call(p,0,s.length);for(r\u003d0;r\u003cm.length;r++)n(m[r])||(m[r]\u003dd);for(r\u003dm.length;r\u003cs.length;r++)m.push(d);if(u.barwidth\u003dm,void 0\u003d\u003d\u003df){for(o\u003d[],r\u003d0;r\u003cs.length;r++)o.push(h+(d-m[r])/2);u.poffset\u003do}}else void 0!\u003d\u003dp\u0026\u0026(u.barwidth\u003dp,void 0\u003d\u003d\u003df\u0026\u0026(u.poffset\u003dh+(d-p)/2))}}function d(t,e){for(var r\u003de.traces,n\u003dx(t),i\u003d0;i\u003cr.length;i++)for(var a\u003dr[i],o\u003da[0].t,s\u003do.poffset,l\u003dArray.isArray(s),c\u003do.barwidth,u\u003dArray.isArray(c),f\u003d0;f\u003ca.length;f++){var h\u003da[f],p\u003dh.w\u003du?c[f]:c;h[n]\u003dh.p+(l?s[f]:s)+p/2}}function m(t,e,r){var n\u003de.traces,i\u003de.minDiff/2;s.minDtick(t,e.minDiff,e.distinctPositions[0],r);for(var a\u003d0;a\u003cn.length;a++){var o,l,c,u,f\u003dn[a],h\u003df[0],p\u003dh.trace,d\u003d[];for(u\u003d0;u\u003cf.length;u++)l\u003d(o\u003df[u]).p-i,c\u003do.p+i,d.push(l,c);if(p.width||p.offset){var m\u003dh.t,g\u003dm.poffset,v\u003dm.barwidth,y\u003dArray.isArray(g),x\u003dArray.isArray(v);for(u\u003d0;u\u003cf.length;u++){o\u003df[u];var b\u003dy?g[u]:g,_\u003dx?v[u]:v;c\u003d(l\u003do.p+b)+_,d.push(l,c)}}p._extremes[t._id]\u003ds.findExtremes(t,d,{padded:!1})}}function g(t,e){for(var r\u003de.traces,n\u003dx(t),i\u003d0;i\u003cr.length;i++){for(var a\u003dr[i],o\u003da[0].trace,l\u003d[],c\u003d!1,u\u003d0;u\u003ca.length;u++){var f\u003da[u],h\u003df.b,p\u003dh+f.s;f[n]\u003dp,l.push(p),f.hasB\u0026\u0026l.push(h),f.hasB\u0026\u0026f.b||(c\u003d!0)}o._extremes[t._id]\u003ds.findExtremes(t,l,{tozero:c,padded:!0})}}function v(t){for(var e\u003dt.traces,r\u003d0;r\u003ce.length;r++)for(var n\u003de[r],i\u003d0;i\u003cn.length;i++){var o\u003dn[i];o.s!\u003d\u003da\u0026\u0026t.put(o.p,o.b+o.s)}}function y(t,e,r){var i\u003de.traces,o\u003dx(t),l\u003d\"fraction\"\u003d\u003d\u003dr.norm?1:100,c\u003dl/1e9,u\u003dt.l2c(t.c2l(0)),f\u003d\"stack\"\u003d\u003d\u003dr.mode?l:u;function h(e){return n(t.c2l(e))\u0026\u0026(e\u003cu-c||e\u003ef+c||!n(u))}for(var p\u003d0;p\u003ci.length;p++){for(var d\u003di[p],m\u003dd[0].trace,g\u003d[],v\u003d!1,y\u003d!1,b\u003d0;b\u003cd.length;b++){var _\u003dd[b];if(_.s!\u003d\u003da){var w\u003dMath.abs(l/e.get(_.p,_.s));_.b*\u003dw,_.s*\u003dw;var T\u003d_.b,k\u003dT+_.s;_[o]\u003dk,g.push(k),y\u003dy||h(k),_.hasB\u0026\u0026(g.push(T),y\u003dy||h(T)),_.hasB\u0026\u0026_.b||(v\u003d!0)}}m._extremes[t._id]\u003ds.findExtremes(t,g,{tozero:v,padded:y})}}function x(t){return t._id.charAt(0)}e.exports\u003d{crossTraceCalc:function(t,e){for(var r\u003de.xaxis,n\u003de.yaxis,i\u003dt._fullLayout,a\u003dt._fullData,s\u003dt.calcdata,l\u003d[],c\u003d[],f\u003d0;f\u003ca.length;f++){var h\u003da[f];if(!0\u003d\u003d\u003dh.visible\u0026\u0026o.traceIs(h,\"bar\")\u0026\u0026h.xaxis\u003d\u003d\u003dr._id\u0026\u0026h.yaxis\u003d\u003d\u003dn._id\u0026\u0026(\"h\"\u003d\u003d\u003dh.orientation?l.push(s[f]):c.push(s[f]),h._computePh))for(var p\u003dt.calcdata[f],d\u003d0;d\u003cp.length;d++)\"function\"\u003d\u003dtypeof p[d].ph0\u0026\u0026(p[d].ph0\u003dp[d].ph0()),\"function\"\u003d\u003dtypeof p[d].ph1\u0026\u0026(p[d].ph1\u003dp[d].ph1())}var m\u003d{xCat:\"category\"\u003d\u003d\u003dr.type||\"multicategory\"\u003d\u003d\u003dr.type,yCat:\"category\"\u003d\u003d\u003dn.type||\"multicategory\"\u003d\u003d\u003dn.type,mode:i.barmode,norm:i.barnorm,gap:i.bargap,groupgap:i.bargroupgap};u(t,r,n,c,m),u(t,n,r,l,m)},setGroupPositions:u}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/constraints\":857,\"../../registry\":927,\"./sieve.js\":950,\"fast-isnumeric\":245}],941:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../registry\"),o\u003dt(\"../scatter/xy_defaults\"),s\u003dt(\"../scatter/period_defaults\"),l\u003dt(\"./style_defaults\"),c\u003dt(\"../../plots/cartesian/constraints\").getAxisGroup,u\u003dt(\"./attributes\"),f\u003dn.coerceFont;function h(t,e,r,n){var i\u003de.orientation,a\u003de[{v:\"x\",h:\"y\"}[i]+\"axis\"],o\u003dc(r,a)+i,s\u003dr._alignmentOpts||{},l\u003dn(\"alignmentgroup\"),u\u003ds[o];u||(u\u003ds[o]\u003d{});var f\u003du[l];f?f.traces.push(e):f\u003du[l]\u003d{traces:[e],alignmentIndex:Object.keys(u).length,offsetGroups:{}};var h\u003dn(\"offsetgroup\"),p\u003df.offsetGroups,d\u003dp[h];h\u0026\u0026(d||(d\u003dp[h]\u003d{offsetIndex:Object.keys(p).length}),e._offsetIndex\u003dd.offsetIndex)}function p(t,e,r,i,a,o){var s\u003d!(!1\u003d\u003d\u003d(o\u003do||{}).moduleHasSelected),l\u003d!(!1\u003d\u003d\u003do.moduleHasUnselected),c\u003d!(!1\u003d\u003d\u003do.moduleHasConstrain),u\u003d!(!1\u003d\u003d\u003do.moduleHasCliponaxis),h\u003d!(!1\u003d\u003d\u003do.moduleHasTextangle),p\u003d!(!1\u003d\u003d\u003do.moduleHasInsideanchor),d\u003d!!o.hasPathbar,m\u003dArray.isArray(a)||\"auto\"\u003d\u003d\u003da,g\u003dm||\"inside\"\u003d\u003d\u003da,v\u003dm||\"outside\"\u003d\u003d\u003da;if(g||v){var y\u003df(i,\"textfont\",r.font),x\u003dn.extendFlat({},y),b\u003d!(t.textfont\u0026\u0026t.textfont.color);if(b\u0026\u0026delete x.color,f(i,\"insidetextfont\",x),d){var _\u003dn.extendFlat({},y);b\u0026\u0026delete _.color,f(i,\"pathbar.textfont\",_)}v\u0026\u0026f(i,\"outsidetextfont\",y),s\u0026\u0026i(\"selected.textfont.color\"),l\u0026\u0026i(\"unselected.textfont.color\"),c\u0026\u0026i(\"constraintext\"),u\u0026\u0026i(\"cliponaxis\"),h\u0026\u0026i(\"textangle\"),i(\"texttemplate\")}g\u0026\u0026p\u0026\u0026i(\"insidetextanchor\")}e.exports\u003d{supplyDefaults:function(t,e,r,c){function f(r,i){return n.coerce(t,e,u,r,i)}if(o(t,e,c,f)){s(t,e,c,f),f(\"xhoverformat\"),f(\"yhoverformat\"),f(\"orientation\",e.x\u0026\u0026!e.y?\"h\":\"v\"),f(\"base\"),f(\"offset\"),f(\"width\"),f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\");var h\u003df(\"textposition\");p(t,e,c,f,h,{moduleHasSelected:!0,moduleHasUnselected:!0,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),l(t,e,f,r,c);var d\u003d(e.marker.line||{}).color,m\u003da.getComponentMethod(\"errorbars\",\"supplyDefaults\");m(t,e,d||i.defaultLine,{axis:\"y\"}),m(t,e,d||i.defaultLine,{axis:\"x\",inherit:\"y\"}),n.coerceSelectionMarkerOpacity(e,f)}else e.visible\u003d!1},crossTraceDefaults:function(t,e){var r;function i(t){return n.coerce(r._input,r,u,t)}if(\"group\"\u003d\u003d\u003de.barmode)for(var a\u003d0;a\u003ct.length;a++)\"bar\"\u003d\u003d\u003d(r\u003dt[a]).type\u0026\u0026(r._input,h(0,r,e,i))},handleGroupingDefaults:h,handleText:p}},{\"../../components/color\":662,\"../../lib\":799,\"../../plots/cartesian/constraints\":857,\"../../registry\":927,\"../scatter/period_defaults\":1234,\"../scatter/xy_defaults\":1241,\"./attributes\":937,\"./style_defaults\":952}],942:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){return t.x\u003d\"xVal\"in e?e.xVal:e.x,t.y\u003d\"yVal\"in e?e.yVal:e.y,e.xa\u0026\u0026(t.xaxis\u003de.xa),e.ya\u0026\u0026(t.yaxis\u003de.ya),\"h\"\u003d\u003d\u003dr.orientation?(t.label\u003dt.y,t.value\u003dt.x):(t.label\u003dt.x,t.value\u003dt.y),t}},{}],943:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"../../lib\").isArrayOrTypedArray;r.coerceString\u003dfunction(t,e,r){if(\"string\"\u003d\u003dtypeof e){if(e||!t.noBlank)return e}else if((\"number\"\u003d\u003dtypeof e||!0\u003d\u003d\u003de)\u0026\u0026!t.strict)return String(e);return void 0!\u003d\u003dr?r:t.dflt},r.coerceNumber\u003dfunction(t,e,r){if(n(e)){e\u003d+e;var i\u003dt.min,a\u003dt.max;if(!(void 0!\u003d\u003di\u0026\u0026e\u003ci||void 0!\u003d\u003da\u0026\u0026e\u003ea))return e}return void 0!\u003d\u003dr?r:t.dflt},r.coerceColor\u003dfunction(t,e,r){return i(e).isValid()?e:void 0!\u003d\u003dr?r:t.dflt},r.coerceEnumerated\u003dfunction(t,e,r){return t.coerceNumber\u0026\u0026(e\u003d+e),-1!\u003d\u003dt.values.indexOf(e)?e:void 0!\u003d\u003dr?r:t.dflt},r.getValue\u003dfunction(t,e){var r;return Array.isArray(t)?e\u003ct.length\u0026\u0026(r\u003dt[e]):r\u003dt,r},r.getLineWidth\u003dfunction(t,e){return 0\u003ce.mlw?e.mlw:a(t.marker.line.width)?0:t.marker.line.width}},{\"../../lib\":799,\"fast-isnumeric\":245,tinycolor2:594}],944:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/fx\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../../lib\").fillText,s\u003dt(\"./helpers\").getLineWidth,l\u003dt(\"../../plots/cartesian/axes\").hoverLabelText,c\u003dt(\"../../constants/numerical\").BADNUM;function u(t,e,r,i,a){var s,u,f,h,p,d,m,g\u003dt.cd,v\u003dg[0].trace,y\u003dg[0].t,x\u003d\"closest\"\u003d\u003d\u003di,b\u003d\"waterfall\"\u003d\u003d\u003dv.type,_\u003dt.maxHoverDistance,w\u003dt.maxSpikeDistance;\"h\"\u003d\u003d\u003dv.orientation?(s\u003dr,u\u003de,f\u003d\"y\",h\u003d\"x\",p\u003dI,d\u003dC):(s\u003de,u\u003dr,f\u003d\"x\",h\u003d\"y\",d\u003dI,p\u003dC);var T\u003dv[f+\"period\"];function k(t){return A(t,-1)}function M(t){return A(t,1)}function A(t,e){return T?t.p+e*Math.abs(t.p-t.orig_p):t[f]+e*t.w/2}var S\u003dx||T?k:function(t){return Math.min(k(t),t.p-y.bardelta/2)},E\u003dx||T?M:function(t){return Math.max(M(t),t.p+y.bardelta/2)};function L(t,e,r){return a.finiteRange\u0026\u0026(r\u003d0),n.inbox(t-s,e-s,r+Math.min(1,Math.abs(e-t)/m)-1)}function C(t){return L(S(t),E(t),_)}function P(t){var e\u003dt[h];if(b){var r\u003dMath.abs(t.rawS)||0;u\u003e0?e+\u003dr:u\u003c0\u0026\u0026(e-\u003dr)}return e}function I(t){var e\u003du,r\u003dt.b,i\u003dP(t);return n.inbox(r-e,i-e,_+(i-e)/(i-r)-1)}var O\u003dt[f+\"a\"],z\u003dt[h+\"a\"];m\u003dMath.abs(O.r2c(O.range[1])-O.r2c(O.range[0]));var D\u003dn.getDistanceFunction(i,p,d,(function(t){return(p(t)+d(t))/2}));if(n.getClosest(g,D,t),!1!\u003d\u003dt.index\u0026\u0026g[t.index].p!\u003d\u003dc){x||(S\u003dfunction(t){return Math.min(k(t),t.p-y.bargroupwidth/2)},E\u003dfunction(t){return Math.max(M(t),t.p+y.bargroupwidth/2)});var R\u003dg[t.index],F\u003dv.base?R.b+R.s:R.s;t[h+\"0\"]\u003dt[h+\"1\"]\u003dz.c2p(R[h],!0),t[h+\"LabelVal\"]\u003dF;var B\u003dy.extents[y.extents.round(R.p)];t[f+\"0\"]\u003dO.c2p(x?S(R):B[0],!0),t[f+\"1\"]\u003dO.c2p(x?E(R):B[1],!0);var N\u003dvoid 0!\u003d\u003dR.orig_p;return t[f+\"LabelVal\"]\u003dN?R.orig_p:R.p,t.labelLabel\u003dl(O,t[f+\"LabelVal\"],v[f+\"hoverformat\"]),t.valueLabel\u003dl(z,t[h+\"LabelVal\"],v[h+\"hoverformat\"]),t.baseLabel\u003dl(z,R.b,v[h+\"hoverformat\"]),t.spikeDistance\u003d(function(t){var e\u003du,r\u003dt.b,i\u003dP(t);return n.inbox(r-e,i-e,w+(i-e)/(i-r)-1)}(R)+function(t){return L(k(t),M(t),w)}(R))/2,t[f+\"Spike\"]\u003dO.c2p(R.p,!0),o(R,v,t),t.hovertemplate\u003dv.hovertemplate,t}}function f(t,e){var r\u003de.mcc||t.marker.color,n\u003de.mlcc||t.marker.line.color,i\u003ds(t,e);return a.opacity(r)?r:a.opacity(n)\u0026\u0026i?n:void 0}e.exports\u003d{hoverPoints:function(t,e,r,n,a){var o\u003du(t,e,r,n,a);if(o){var s\u003do.cd,l\u003ds[0].trace,c\u003ds[o.index];return o.color\u003df(l,c),i.getComponentMethod(\"errorbars\",\"hoverInfo\")(c,l,o),[o]}},hoverOnBars:u,getTraceColor:f}},{\"../../components/color\":662,\"../../components/fx\":702,\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"./helpers\":943}],945:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\").crossTraceCalc,colorbar:t(\"../scatter/marker_colorbar\"),arraysToCalcdata:t(\"./arrays_to_calcdata\"),plot:t(\"./plot\").plot,style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\").hoverPoints,eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"bar\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"oriented\",\"errorBarsOK\",\"showLegend\",\"zoomScale\"],animatable:!0,meta:{}}},{\"../../plots/cartesian\":863,\"../scatter/marker_colorbar\":1232,\"./arrays_to_calcdata\":936,\"./attributes\":937,\"./calc\":938,\"./cross_trace_calc\":940,\"./defaults\":941,\"./event_data\":942,\"./hover\":944,\"./layout_attributes\":946,\"./layout_defaults\":947,\"./plot\":948,\"./select\":949,\"./style\":951}],946:[function(t,e,r){\"use strict\";e.exports\u003d{barmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\",\"relative\"],dflt:\"group\",editType:\"calc\"},barnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},bargap:{valType:\"number\",min:0,max:1,editType:\"calc\"},bargroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},{}],947:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../lib\"),o\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e,r){function s(r,n){return a.coerce(t,e,o,r,n)}for(var l\u003d!1,c\u003d!1,u\u003d!1,f\u003d{},h\u003ds(\"barmode\"),p\u003d0;p\u003cr.length;p++){var d\u003dr[p];if(n.traceIs(d,\"bar\")\u0026\u0026d.visible){if(l\u003d!0,\"group\"\u003d\u003d\u003dh){var m\u003dd.xaxis+d.yaxis;f[m]\u0026\u0026(u\u003d!0),f[m]\u003d!0}if(d.visible\u0026\u0026\"histogram\"\u003d\u003d\u003dd.type)\"category\"!\u003d\u003di.getFromId({_fullLayout:e},d[\"v\"\u003d\u003d\u003dd.orientation?\"xaxis\":\"yaxis\"]).type\u0026\u0026(c\u003d!0)}}l?(\"overlay\"!\u003d\u003dh\u0026\u0026s(\"barnorm\"),s(\"bargap\",c\u0026\u0026!u?0:.2),s(\"bargroupgap\")):delete e.barmode}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"./layout_attributes\":946}],948:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../lib\"),o\u003dt(\"../../lib/svg_text_utils\"),s\u003dt(\"../../components/color\"),l\u003dt(\"../../components/drawing\"),c\u003dt(\"../../registry\"),u\u003dt(\"../../plots/cartesian/axes\").tickText,f\u003dt(\"./uniform_text\"),h\u003df.recordMinTextSize,p\u003df.clearMinTextSize,d\u003dt(\"./style\"),m\u003dt(\"./helpers\"),g\u003dt(\"./constants\"),v\u003dt(\"./attributes\"),y\u003dv.text,x\u003dv.textposition,b\u003dt(\"../../components/fx/helpers\").appendArrayPointValue,_\u003dg.TEXTPAD;function w(t){return t.id}function T(t){if(t.ids)return w}function k(t,e){return t\u003ce?1:-1}function M(t,e,r,n){var i;return!e.uniformtext.mode\u0026\u0026A(r)?(n\u0026\u0026(i\u003dn()),t.transition().duration(r.duration).ease(r.easing).each(\"end\",(function(){i\u0026\u0026i()})).each(\"interrupt\",(function(){i\u0026\u0026i()}))):t}function A(t){return t\u0026\u0026t.duration\u003e0}function S(t){return\"auto\"\u003d\u003d\u003dt?0:t}function E(t,e){var r\u003dMath.PI/180*e,n\u003dMath.abs(Math.sin(r)),i\u003dMath.abs(Math.cos(r));return{x:t.width*i+t.height*n,y:t.width*n+t.height*i}}function L(t,e,r,n,i,a){var o\u003d!!a.isHorizontal,s\u003d!!a.constrained,l\u003da.angle||0,c\u003da.anchor||\"end\",u\u003d\"end\"\u003d\u003d\u003dc,f\u003d\"start\"\u003d\u003d\u003dc,h\u003d((a.leftToRight||0)+1)/2,p\u003d1-h,d\u003di.width,m\u003di.height,g\u003dMath.abs(e-t),v\u003dMath.abs(n-r),y\u003dg\u003e2*_\u0026\u0026v\u003e2*_?_:0;g-\u003d2*y,v-\u003d2*y;var x\u003dS(l);\"auto\"!\u003d\u003dl||d\u003c\u003dg\u0026\u0026m\u003c\u003dv||!(d\u003eg||m\u003ev)||(d\u003ev||m\u003eg)\u0026\u0026d\u003cm\u003d\u003dg\u003cv||(x+\u003d90);var b\u003dE(i,x),w\u003d1;s\u0026\u0026(w\u003dMath.min(1,g/b.x,v/b.y));var T\u003di.left*p+i.right*h,M\u003d(i.top+i.bottom)/2,A\u003d(t+_)*p+(e-_)*h,L\u003d(r+n)/2,C\u003d0,P\u003d0;if(f||u){var I\u003d(o?b.x:b.y)/2,O\u003do?k(t,e):k(r,n);o?f?(A\u003dt+O*y,C\u003d-O*I):(A\u003de-O*y,C\u003dO*I):f?(L\u003dr+O*y,P\u003d-O*I):(L\u003dn-O*y,P\u003dO*I)}return{textX:T,textY:M,targetX:A,targetY:L,anchorX:C,anchorY:P,scale:w,rotate:x}}e.exports\u003d{plot:function(t,e,r,f,g,v){var w\u003de.xaxis,C\u003de.yaxis,P\u003dt._fullLayout;g||(g\u003d{mode:P.barmode,norm:P.barmode,gap:P.bargap,groupgap:P.bargroupgap},p(\"bar\",P));var I\u003da.makeTraceGroups(f,r,\"trace bars\").each((function(r){var c\u003dn.select(this),f\u003dr[0].trace,p\u003d\"waterfall\"\u003d\u003d\u003df.type,I\u003d\"funnel\"\u003d\u003d\u003df.type,O\u003d\"bar\"\u003d\u003d\u003df.type||I,z\u003d0;p\u0026\u0026f.connector.visible\u0026\u0026\"between\"\u003d\u003d\u003df.connector.mode\u0026\u0026(z\u003df.connector.line.width/2);var D\u003d\"h\"\u003d\u003d\u003df.orientation,R\u003dA(g),F\u003da.ensureSingle(c,\"g\",\"points\"),B\u003dT(f),N\u003dF.selectAll(\"g.point\").data(a.identity,B);N.enter().append(\"g\").classed(\"point\",!0),N.exit().remove(),N.each((function(c,p){var T,A,I\u003dn.select(this),F\u003dfunction(t,e,r,n){var i\u003d[],a\u003d[],o\u003dn?e:r,s\u003dn?r:e;return i[0]\u003do.c2p(t.s0,!0),a[0]\u003ds.c2p(t.p0,!0),i[1]\u003do.c2p(t.s1,!0),a[1]\u003ds.c2p(t.p1,!0),n?[i,a]:[a,i]}(c,w,C,D),B\u003dF[0][0],N\u003dF[0][1],j\u003dF[1][0],U\u003dF[1][1],V\u003d0\u003d\u003d(D?N-B:U-j);if(V\u0026\u0026O\u0026\u0026m.getLineWidth(f,c)\u0026\u0026(V\u003d!1),V||(V\u003d!(i(B)\u0026\u0026i(N)\u0026\u0026i(j)\u0026\u0026i(U))),c.isBlank\u003dV,V\u0026\u0026(D?N\u003dB:U\u003dj),z\u0026\u0026!V\u0026\u0026(D?(B-\u003dk(B,N)*z,N+\u003dk(B,N)*z):(j-\u003dk(j,U)*z,U+\u003dk(j,U)*z)),\"waterfall\"\u003d\u003d\u003df.type){if(!V){var q\u003df[c.dir].marker;T\u003dq.line.width,A\u003dq.color}}else T\u003dm.getLineWidth(f,c),A\u003dc.mc||f.marker.color;function H(t){var e\u003dn.round(T/2%1,2);return 0\u003d\u003d\u003dg.gap\u0026\u00260\u003d\u003d\u003dg.groupgap?n.round(Math.round(t)-e,2):t}if(!t._context.staticPlot){var G\u003ds.opacity(A)\u003c1||T\u003e.01?H:function(t,e,r){return r\u0026\u0026t\u003d\u003d\u003de?t:Math.abs(t-e)\u003e\u003d2?H(t):t\u003ee?Math.ceil(t):Math.floor(t)};B\u003dG(B,N,D),N\u003dG(N,B,D),j\u003dG(j,U,!D),U\u003dG(U,j,!D)}var Y\u003dM(a.ensureSingle(I,\"path\"),P,g,v);if(Y.style(\"vector-effect\",\"non-scaling-stroke\").attr(\"d\",isNaN((N-B)*(U-j))||V\u0026\u0026t._context.staticPlot?\"M0,0Z\":\"M\"+B+\",\"+j+\"V\"+U+\"H\"+N+\"V\"+j+\"Z\").call(l.setClipUrl,e.layerClipId,t),!P.uniformtext.mode\u0026\u0026R){var W\u003dl.makePointStyleFns(f);l.singlePointStyle(c,Y,f,W,t)}!function(t,e,r,n,i,s,c,f,p,g,v){var w,T\u003de.xaxis,A\u003de.yaxis,C\u003dt._fullLayout;function P(e,r,n){return a.ensureSingle(e,\"text\").text(r).attr({class:\"bartext bartext-\"+w,\"text-anchor\":\"middle\",\"data-notex\":1}).call(l.font,n).call(o.convertToTspans,t)}var I\u003dn[0].trace,O\u003d\"h\"\u003d\u003d\u003dI.orientation,z\u003dfunction(t,e,r,n,i){var o,s\u003de[0].trace;o\u003ds.texttemplate?function(t,e,r,n,i){var o\u003de[0].trace,s\u003da.castOption(o,r,\"texttemplate\");if(!s)return\"\";var l,c,f,h,p\u003d\"waterfall\"\u003d\u003d\u003do.type,d\u003d\"funnel\"\u003d\u003d\u003do.type;\"h\"\u003d\u003d\u003do.orientation?(l\u003d\"y\",c\u003di,f\u003d\"x\",h\u003dn):(l\u003d\"x\",c\u003dn,f\u003d\"y\",h\u003di);function m(t){return u(h,h.c2l(t),!0).text}var g\u003de[r],v\u003d{};v.label\u003dg.p,v.labelLabel\u003dv[l+\"Label\"]\u003d(y\u003dg.p,u(c,c.c2l(y),!0).text);var y;var x\u003da.castOption(o,g.i,\"text\");(0\u003d\u003d\u003dx||x)\u0026\u0026(v.text\u003dx);v.value\u003dg.s,v.valueLabel\u003dv[f+\"Label\"]\u003dm(g.s);var _\u003d{};b(_,o,g.i),p\u0026\u0026(v.delta\u003d+g.rawS||g.s,v.deltaLabel\u003dm(v.delta),v.final\u003dg.v,v.finalLabel\u003dm(v.final),v.initial\u003dv.final-v.delta,v.initialLabel\u003dm(v.initial));d\u0026\u0026(v.value\u003dg.s,v.valueLabel\u003dm(v.value),v.percentInitial\u003dg.begR,v.percentInitialLabel\u003da.formatPercent(g.begR),v.percentPrevious\u003dg.difR,v.percentPreviousLabel\u003da.formatPercent(g.difR),v.percentTotal\u003dg.sumR,v.percenTotalLabel\u003da.formatPercent(g.sumR));var w\u003da.castOption(o,g.i,\"customdata\");w\u0026\u0026(v.customdata\u003dw);return a.texttemplateString(s,v,t._d3locale,_,v,o._meta||{})}(t,e,r,n,i):s.textinfo?function(t,e,r,n){var i\u003dt[0].trace,o\u003d\"h\"\u003d\u003d\u003di.orientation,s\u003d\"waterfall\"\u003d\u003d\u003di.type,l\u003d\"funnel\"\u003d\u003d\u003di.type;function c(t){return u(o?r:n,+t,!0).text}var f,h\u003di.textinfo,p\u003dt[e],d\u003dh.split(\"+\"),m\u003d[],g\u003dfunction(t){return-1!\u003d\u003dd.indexOf(t)};g(\"label\")\u0026\u0026m.push((v\u003dt[e].p,u(o?n:r,v,!0).text));var v;g(\"text\")\u0026\u0026(0\u003d\u003d\u003d(f\u003da.castOption(i,p.i,\"text\"))||f)\u0026\u0026m.push(f);if(s){var y\u003d+p.rawS||p.s,x\u003dp.v,b\u003dx-y;g(\"initial\")\u0026\u0026m.push(c(b)),g(\"delta\")\u0026\u0026m.push(c(y)),g(\"final\")\u0026\u0026m.push(c(x))}if(l){g(\"value\")\u0026\u0026m.push(c(p.s));var _\u003d0;g(\"percent initial\")\u0026\u0026_++,g(\"percent previous\")\u0026\u0026_++,g(\"percent total\")\u0026\u0026_++;var w\u003d_\u003e1;g(\"percent initial\")\u0026\u0026(f\u003da.formatPercent(p.begR),w\u0026\u0026(f+\u003d\" of initial\"),m.push(f)),g(\"percent previous\")\u0026\u0026(f\u003da.formatPercent(p.difR),w\u0026\u0026(f+\u003d\" of previous\"),m.push(f)),g(\"percent total\")\u0026\u0026(f\u003da.formatPercent(p.sumR),w\u0026\u0026(f+\u003d\" of total\"),m.push(f))}return m.join(\"\u003cbr\u003e\")}(e,r,n,i):m.getValue(s.text,r);return m.coerceString(y,o)}(C,n,i,T,A);w\u003dfunction(t,e){var r\u003dm.getValue(t.textposition,e);return m.coerceEnumerated(x,r)}(I,i);var D\u003d\"stack\"\u003d\u003d\u003dg.mode||\"relative\"\u003d\u003d\u003dg.mode,R\u003dn[i],F\u003d!D||R._outmost;if(!z||\"none\"\u003d\u003d\u003dw||(R.isBlank||s\u003d\u003d\u003dc||f\u003d\u003d\u003dp)\u0026\u0026(\"auto\"\u003d\u003d\u003dw||\"inside\"\u003d\u003d\u003dw))return void r.select(\"text\").remove();var B\u003dC.font,N\u003dd.getBarColor(n[i],I),j\u003dd.getInsideTextFont(I,i,B,N),U\u003dd.getOutsideTextFont(I,i,B),V\u003dr.datum();O?\"log\"\u003d\u003d\u003dT.type\u0026\u0026V.s0\u003c\u003d0\u0026\u0026(s\u003dT.range[0]\u003cT.range[1]?0:T._length):\"log\"\u003d\u003d\u003dA.type\u0026\u0026V.s0\u003c\u003d0\u0026\u0026(f\u003dA.range[0]\u003cA.range[1]?A._length:0);var q,H,G,Y,W,X\u003dMath.abs(c-s)-2*_,Z\u003dMath.abs(p-f)-2*_;\"outside\"\u003d\u003d\u003dw\u0026\u0026(F||R.hasB||(w\u003d\"inside\"));if(\"auto\"\u003d\u003d\u003dw)if(F){w\u003d\"inside\",W\u003da.ensureUniformFontSize(t,j),q\u003dP(r,z,W),H\u003dl.bBox(q.node()),G\u003dH.width,Y\u003dH.height;var J\u003dG\u003c\u003dX\u0026\u0026Y\u003c\u003dZ,K\u003dG\u003c\u003dZ\u0026\u0026Y\u003c\u003dX,Q\u003dO?X\u003e\u003dG*(Z/Y):Z\u003e\u003dY*(X/G);G\u003e0\u0026\u0026Y\u003e0\u0026\u0026(J||K||Q)?w\u003d\"inside\":(w\u003d\"outside\",q.remove(),q\u003dnull)}else w\u003d\"inside\";if(!q){W\u003da.ensureUniformFontSize(t,\"outside\"\u003d\u003d\u003dw?U:j);var $\u003d(q\u003dP(r,z,W)).attr(\"transform\");if(q.attr(\"transform\",\"\"),H\u003dl.bBox(q.node()),G\u003dH.width,Y\u003dH.height,q.attr(\"transform\",$),G\u003c\u003d0||Y\u003c\u003d0)return void q.remove()}var tt,et,rt\u003dI.textangle;\"outside\"\u003d\u003d\u003dw?(et\u003d\"both\"\u003d\u003d\u003dI.constraintext||\"outside\"\u003d\u003d\u003dI.constraintext,tt\u003dfunction(t,e,r,n,i,a){var o,s\u003d!!a.isHorizontal,l\u003d!!a.constrained,c\u003da.angle||0,u\u003di.width,f\u003di.height,h\u003dMath.abs(e-t),p\u003dMath.abs(n-r);o\u003ds?p\u003e2*_?_:0:h\u003e2*_?_:0;var d\u003d1;l\u0026\u0026(d\u003ds?Math.min(1,p/f):Math.min(1,h/u));var m\u003dS(c),g\u003dE(i,m),v\u003d(s?g.x:g.y)/2,y\u003d(i.left+i.right)/2,x\u003d(i.top+i.bottom)/2,b\u003d(t+e)/2,w\u003d(r+n)/2,T\u003d0,M\u003d0,A\u003ds?k(e,t):k(r,n);s?(b\u003de-A*o,T\u003dA*v):(w\u003dn+A*o,M\u003d-A*v);return{textX:y,textY:x,targetX:b,targetY:w,anchorX:T,anchorY:M,scale:d,rotate:m}}(s,c,f,p,H,{isHorizontal:O,constrained:et,angle:rt})):(et\u003d\"both\"\u003d\u003d\u003dI.constraintext||\"inside\"\u003d\u003d\u003dI.constraintext,tt\u003dL(s,c,f,p,H,{isHorizontal:O,constrained:et,angle:rt,anchor:I.insidetextanchor}));tt.fontSize\u003dW.size,h(I.type,tt,C),R.transform\u003dtt,M(q,C,g,v).attr(\"transform\",a.getTextTransform(tt))}(t,e,I,r,p,B,N,j,U,g,v),e.layerClipId\u0026\u0026l.hideOutsideRangePoint(c,I.select(\"text\"),w,C,f.xcalendar,f.ycalendar)}));var j\u003d!1\u003d\u003d\u003df.cliponaxis;l.setClipUrl(c,j?null:e.layerClipId,t)}));c.getComponentMethod(\"errorbars\",\"plot\")(t,I,e,g)},toMoveInsideBar:L}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../components/fx/helpers\":698,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"./attributes\":937,\"./constants\":939,\"./helpers\":943,\"./style\":951,\"./uniform_text\":953,\"@plotly/d3\":58,\"fast-isnumeric\":245}],949:[function(t,e,r){\"use strict\";function n(t,e,r,n,i){var a\u003de.c2p(n?t.s0:t.p0,!0),o\u003de.c2p(n?t.s1:t.p1,!0),s\u003dr.c2p(n?t.p0:t.s0,!0),l\u003dr.c2p(n?t.p1:t.s1,!0);return i?[(a+o)/2,(s+l)/2]:n?[o,(s+l)/2]:[(a+o)/2,l]}e.exports\u003dfunction(t,e){var r,i\u003dt.cd,a\u003dt.xaxis,o\u003dt.yaxis,s\u003di[0].trace,l\u003d\"funnel\"\u003d\u003d\u003ds.type,c\u003d\"h\"\u003d\u003d\u003ds.orientation,u\u003d[];if(!1\u003d\u003d\u003de)for(r\u003d0;r\u003ci.length;r++)i[r].selected\u003d0;else for(r\u003d0;r\u003ci.length;r++){var f\u003di[r],h\u003d\"ct\"in f?f.ct:n(f,a,o,c,l);e.contains(h,!1,r,t)?(u.push({pointNumber:r,x:a.c2d(f.x),y:o.c2d(f.y)}),f.selected\u003d1):f.selected\u003d0}return u}},{}],950:[function(t,e,r){\"use strict\";e.exports\u003da;var n\u003dt(\"../../lib\").distinctVals,i\u003dt(\"../../constants/numerical\").BADNUM;function a(t,e){this.traces\u003dt,this.sepNegVal\u003de.sepNegVal,this.overlapNoMerge\u003de.overlapNoMerge;for(var r\u003d1/0,a\u003d[],o\u003d0;o\u003ct.length;o++){for(var s\u003dt[o],l\u003d0;l\u003cs.length;l++){var c\u003ds[l];c.p!\u003d\u003di\u0026\u0026a.push(c.p)}s[0]\u0026\u0026s[0].width1\u0026\u0026(r\u003dMath.min(s[0].width1,r))}this.positions\u003da;var u\u003dn(a);this.distinctPositions\u003du.vals,1\u003d\u003d\u003du.vals.length\u0026\u0026r!\u003d\u003d1/0?this.minDiff\u003dr:this.minDiff\u003dMath.min(u.minDiff,r);var f\u003d(e.posAxis||{}).type;\"category\"!\u003d\u003df\u0026\u0026\"multicategory\"!\u003d\u003df||(this.minDiff\u003d1),this.binWidth\u003dthis.minDiff,this.bins\u003d{}}a.prototype.put\u003dfunction(t,e){var r\u003dthis.getLabel(t,e),n\u003dthis.bins[r]||0;return this.bins[r]\u003dn+e,n},a.prototype.get\u003dfunction(t,e){var r\u003dthis.getLabel(t,e);return this.bins[r]||0},a.prototype.getLabel\u003dfunction(t,e){return(e\u003c0\u0026\u0026this.sepNegVal?\"v\":\"^\")+(this.overlapNoMerge?t:Math.round(t/this.binWidth))}},{\"../../constants/numerical\":775,\"../../lib\":799}],951:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../lib\"),s\u003dt(\"../../registry\"),l\u003dt(\"./uniform_text\").resizeText,c\u003dt(\"./attributes\"),u\u003dc.textfont,f\u003dc.insidetextfont,h\u003dc.outsidetextfont,p\u003dt(\"./helpers\");function d(t,e,r){a.pointStyle(t.selectAll(\"path\"),e,r),m(t,e,r)}function m(t,e,r){t.selectAll(\"text\").each((function(t){var i\u003dn.select(this),s\u003do.ensureUniformFontSize(r,g(i,t,e,r));a.font(i,s)}))}function g(t,e,r,n){var i\u003dn._fullLayout.font,a\u003dr.textfont;if(t.classed(\"bartext-inside\")){var o\u003d_(e,r);a\u003dy(r,e.i,i,o)}else t.classed(\"bartext-outside\")\u0026\u0026(a\u003dx(r,e.i,i));return a}function v(t,e,r){return b(u,t.textfont,e,r)}function y(t,e,r,n){var a\u003dv(t,e,r);return(void 0\u003d\u003d\u003dt._input.textfont||void 0\u003d\u003d\u003dt._input.textfont.color||Array.isArray(t.textfont.color)\u0026\u0026void 0\u003d\u003d\u003dt.textfont.color[e])\u0026\u0026(a\u003d{color:i.contrast(n),family:a.family,size:a.size}),b(f,t.insidetextfont,e,a)}function x(t,e,r){var n\u003dv(t,e,r);return b(h,t.outsidetextfont,e,n)}function b(t,e,r,n){e\u003de||{};var i\u003dp.getValue(e.family,r),a\u003dp.getValue(e.size,r),o\u003dp.getValue(e.color,r);return{family:p.coerceString(t.family,i,n.family),size:p.coerceNumber(t.size,a,n.size),color:p.coerceColor(t.color,o,n.color)}}function _(t,e){return\"waterfall\"\u003d\u003d\u003de.type?e[t.dir].marker.color:t.mcc||t.mc||e.marker.color}e.exports\u003d{style:function(t){var e\u003dn.select(t).selectAll(\"g.barlayer\").selectAll(\"g.trace\");l(t,e,\"bar\");var r\u003de.size(),i\u003dt._fullLayout;e.style(\"opacity\",(function(t){return t[0].trace.opacity})).each((function(t){(\"stack\"\u003d\u003d\u003di.barmode\u0026\u0026r\u003e1||0\u003d\u003d\u003di.bargap\u0026\u00260\u003d\u003d\u003di.bargroupgap\u0026\u0026!t[0].trace.marker.line.width)\u0026\u0026n.select(this).attr(\"shape-rendering\",\"crispEdges\")})),e.selectAll(\"g.points\").each((function(e){d(n.select(this),e[0].trace,t)})),s.getComponentMethod(\"errorbars\",\"style\")(e)},styleTextPoints:m,styleOnSelect:function(t,e,r){var i\u003de[0].trace;i.selectedpoints?function(t,e,r){a.selectedPointStyle(t.selectAll(\"path\"),e),function(t,e,r){t.each((function(t){var i,s\u003dn.select(this);if(t.selected){i\u003do.ensureUniformFontSize(r,g(s,t,e,r));var l\u003de.selected.textfont\u0026\u0026e.selected.textfont.color;l\u0026\u0026(i.color\u003dl),a.font(s,i)}else a.selectedTextStyle(s,e)}))}(t.selectAll(\"text\"),e,r)}(r,i,t):(d(r,i,t),s.getComponentMethod(\"errorbars\",\"style\")(r))},getInsideTextFont:y,getOutsideTextFont:x,getBarColor:_,resizeText:l}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../lib\":799,\"../../registry\":927,\"./attributes\":937,\"./helpers\":943,\"./uniform_text\":953,\"@plotly/d3\":58}],952:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"../../components/colorscale/helpers\").hasColorscale,a\u003dt(\"../../components/colorscale/defaults\"),o\u003dt(\"../../lib\").coercePattern;e.exports\u003dfunction(t,e,r,s,l){var c\u003dr(\"marker.color\",s),u\u003di(t,\"marker\");u\u0026\u0026a(t,e,l,r,{prefix:\"marker.\",cLetter:\"c\"}),r(\"marker.line.color\",n.defaultLine),i(t,\"marker.line\")\u0026\u0026a(t,e,l,r,{prefix:\"marker.line.\",cLetter:\"c\"}),r(\"marker.line.width\"),r(\"marker.opacity\"),o(r,\"marker.pattern\",c,u),r(\"selected.marker.color\"),r(\"unselected.marker.color\")}},{\"../../components/color\":662,\"../../components/colorscale/defaults\":672,\"../../components/colorscale/helpers\":673,\"../../lib\":799}],953:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\");function a(t){return\"_\"+t+\"Text_minsize\"}e.exports\u003d{recordMinTextSize:function(t,e,r){if(r.uniformtext.mode){var n\u003da(t),i\u003dr.uniformtext.minsize,o\u003de.scale*e.fontSize;e.hide\u003do\u003ci,r[n]\u003dr[n]||1/0,e.hide||(r[n]\u003dMath.min(r[n],Math.max(o,i)))}},clearMinTextSize:function(t,e){e[a(t)]\u003dvoid 0},resizeText:function(t,e,r){var a\u003dt._fullLayout,o\u003da[\"_\"+r+\"Text_minsize\"];if(o){var s,l\u003d\"hide\"\u003d\u003d\u003da.uniformtext.mode;switch(r){case\"funnelarea\":case\"pie\":case\"sunburst\":s\u003d\"g.slice\";break;case\"treemap\":case\"icicle\":s\u003d\"g.slice, g.pathbar\";break;default:s\u003d\"g.points \u003e g.point\"}e.selectAll(s).each((function(t){var e\u003dt.transform;e\u0026\u0026(e.scale\u003dl\u0026\u0026e.hide?0:o/e.fontSize,n.select(this).select(\"text\").attr(\"transform\",i.getTextTransform(e)))}))}}}},{\"../../lib\":799,\"@plotly/d3\":58}],954:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../../lib/extend\").extendFlat,a\u003dt(\"../scatterpolar/attributes\"),o\u003dt(\"../bar/attributes\");e.exports\u003d{r:a.r,theta:a.theta,r0:a.r0,dr:a.dr,theta0:a.theta0,dtheta:a.dtheta,thetaunit:a.thetaunit,base:i({},o.base,{}),offset:i({},o.offset,{}),width:i({},o.width,{}),text:i({},o.text,{}),hovertext:i({},o.hovertext,{}),marker:o.marker,hoverinfo:a.hoverinfo,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{\"../../lib/extend\":789,\"../../plots/template_attributes\":922,\"../bar/attributes\":937,\"../scatterpolar/attributes\":1288}],955:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/helpers\").hasColorscale,i\u003dt(\"../../components/colorscale/calc\"),a\u003dt(\"../bar/arrays_to_calcdata\"),o\u003dt(\"../bar/cross_trace_calc\").setGroupPositions,s\u003dt(\"../scatter/calc_selection\"),l\u003dt(\"../../registry\").traceIs,c\u003dt(\"../../lib\").extendFlat;e.exports\u003d{calc:function(t,e){for(var r\u003dt._fullLayout,o\u003de.subplot,l\u003dr[o].radialaxis,c\u003dr[o].angularaxis,u\u003dl.makeCalcdata(e,\"r\"),f\u003dc.makeCalcdata(e,\"theta\"),h\u003de._length,p\u003dnew Array(h),d\u003du,m\u003df,g\u003d0;g\u003ch;g++)p[g]\u003d{p:m[g],s:d[g]};function v(t){var r\u003de[t];void 0!\u003d\u003dr\u0026\u0026(e[\"_\"+t]\u003dArray.isArray(r)?c.makeCalcdata(e,t):c.d2c(r,e.thetaunit))}return\"linear\"\u003d\u003d\u003dc.type\u0026\u0026(v(\"width\"),v(\"offset\")),n(e,\"marker\")\u0026\u0026i(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),n(e,\"marker.line\")\u0026\u0026i(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}),a(p,e),s(p,e),p},crossTraceCalc:function(t,e,r){for(var n\u003dt.calcdata,i\u003d[],a\u003d0;a\u003cn.length;a++){var s\u003dn[a],u\u003ds[0].trace;!0\u003d\u003d\u003du.visible\u0026\u0026l(u,\"bar\")\u0026\u0026u.subplot\u003d\u003d\u003dr\u0026\u0026i.push(s)}var f\u003dc({},e.radialaxis,{_id:\"x\"}),h\u003de.angularaxis;o(t,h,f,i,{mode:e.barmode,norm:e.barnorm,gap:e.bargap,groupgap:e.bargroupgap})}}},{\"../../components/colorscale/calc\":670,\"../../components/colorscale/helpers\":673,\"../../lib\":799,\"../../registry\":927,\"../bar/arrays_to_calcdata\":936,\"../bar/cross_trace_calc\":940,\"../scatter/calc_selection\":1216}],956:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatterpolar/defaults\").handleRThetaDefaults,a\u003dt(\"../bar/style_defaults\"),o\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,s,l)?(l(\"thetaunit\"),l(\"base\"),l(\"offset\"),l(\"width\"),l(\"text\"),l(\"hovertext\"),l(\"hovertemplate\"),a(t,e,l,r,s),n.coerceSelectionMarkerOpacity(e,l)):e.visible\u003d!1}},{\"../../lib\":799,\"../bar/style_defaults\":952,\"../scatterpolar/defaults\":1290,\"./attributes\":954}],957:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/fx\"),i\u003dt(\"../../lib\"),a\u003dt(\"../bar/hover\").getTraceColor,o\u003di.fillText,s\u003dt(\"../scatterpolar/hover\").makeHoverPointText,l\u003dt(\"../../plots/polar/helpers\").isPtInsidePolygon;e.exports\u003dfunction(t,e,r){var c\u003dt.cd,u\u003dc[0].trace,f\u003dt.subplot,h\u003df.radialAxis,p\u003df.angularAxis,d\u003df.vangles,m\u003dd?l:i.isPtInsideSector,g\u003dt.maxHoverDistance,v\u003dp._period||2*Math.PI,y\u003dMath.abs(h.g2p(Math.sqrt(e*e+r*r))),x\u003dMath.atan2(r,e);h.range[0]\u003eh.range[1]\u0026\u0026(x+\u003dMath.PI);if(n.getClosest(c,(function(t){return m(y,x,[t.rp0,t.rp1],[t.thetag0,t.thetag1],d)?g+Math.min(1,Math.abs(t.thetag1-t.thetag0)/v)-1+(t.rp1-y)/(t.rp1-t.rp0)-1:1/0}),t),!1!\u003d\u003dt.index){var b\u003dc[t.index];t.x0\u003dt.x1\u003db.ct[0],t.y0\u003dt.y1\u003db.ct[1];var _\u003di.extendFlat({},b,{r:b.s,theta:b.p});return o(b,u,t),s(_,u,f,t),t.hovertemplate\u003du.hovertemplate,t.color\u003da(u,b),t.xLabelVal\u003dt.yLabelVal\u003dvoid 0,b.s\u003c0\u0026\u0026(t.idealAlign\u003d\"left\"),[t]}}},{\"../../components/fx\":702,\"../../lib\":799,\"../../plots/polar/helpers\":915,\"../bar/hover\":944,\"../scatterpolar/hover\":1292}],958:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"barpolar\",basePlotModule:t(\"../../plots/polar\"),categories:[\"polar\",\"bar\",\"showLegend\"],attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"../scatterpolar/format_labels\"),style:t(\"../bar/style\").style,styleOnSelect:t(\"../bar/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../bar/select\"),meta:{}}},{\"../../plots/polar\":916,\"../bar/select\":949,\"../bar/style\":951,\"../scatter/marker_colorbar\":1232,\"../scatterpolar/format_labels\":1291,\"./attributes\":954,\"./calc\":955,\"./defaults\":956,\"./hover\":957,\"./layout_attributes\":959,\"./layout_defaults\":960,\"./plot\":961}],959:[function(t,e,r){\"use strict\";e.exports\u003d{barmode:{valType:\"enumerated\",values:[\"stack\",\"overlay\"],dflt:\"stack\",editType:\"calc\"},bargap:{valType:\"number\",dflt:.1,min:0,max:1,editType:\"calc\"}}},{}],960:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e,r){var a,o\u003d{};function s(r,o){return n.coerce(t[a]||{},e[a],i,r,o)}for(var l\u003d0;l\u003cr.length;l++){var c\u003dr[l];\"barpolar\"\u003d\u003d\u003dc.type\u0026\u0026!0\u003d\u003d\u003dc.visible\u0026\u0026(o[a\u003dc.subplot]||(s(\"barmode\"),s(\"bargap\"),o[a]\u003d1))}}},{\"../../lib\":799,\"./layout_attributes\":959}],961:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../lib\"),o\u003dt(\"../../components/drawing\"),s\u003dt(\"../../plots/polar/helpers\");e.exports\u003dfunction(t,e,r){var l\u003de.xaxis,c\u003de.yaxis,u\u003de.radialAxis,f\u003de.angularAxis,h\u003dfunction(t){var e\u003dt.cxx,r\u003dt.cyy;if(t.vangles)return function(n,i,o,l){var c,u;a.angleDelta(o,l)\u003e0?(c\u003do,u\u003dl):(c\u003dl,u\u003do);var f\u003d[s.findEnclosingVertexAngles(c,t.vangles)[0],(c+u)/2,s.findEnclosingVertexAngles(u,t.vangles)[1]];return s.pathPolygonAnnulus(n,i,c,u,f,e,r)};return function(t,n,i,o){return a.pathAnnulus(t,n,i,o,e,r)}}(e),p\u003de.layers.frontplot.select(\"g.barlayer\");a.makeTraceGroups(p,r,\"trace bars\").each((function(){var r\u003dn.select(this),s\u003da.ensureSingle(r,\"g\",\"points\").selectAll(\"g.point\").data(a.identity);s.enter().append(\"g\").style(\"vector-effect\",\"non-scaling-stroke\").style(\"stroke-miterlimit\",2).classed(\"point\",!0),s.exit().remove(),s.each((function(t){var e,r\u003dn.select(this),o\u003dt.rp0\u003du.c2p(t.s0),s\u003dt.rp1\u003du.c2p(t.s1),p\u003dt.thetag0\u003df.c2g(t.p0),d\u003dt.thetag1\u003df.c2g(t.p1);if(i(o)\u0026\u0026i(s)\u0026\u0026i(p)\u0026\u0026i(d)\u0026\u0026o!\u003d\u003ds\u0026\u0026p!\u003d\u003dd){var m\u003du.c2g(t.s1),g\u003d(p+d)/2;t.ct\u003d[l.c2p(m*Math.cos(g)),c.c2p(m*Math.sin(g))],e\u003dh(o,s,p,d)}else e\u003d\"M0,0Z\";a.ensureSingle(r,\"path\").attr(\"d\",e)})),o.setClipUrl(r,e._hasClipOnAxisFalse?e.clipIds.forTraces:null,t)}))}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../plots/polar/helpers\":915,\"@plotly/d3\":58,\"fast-isnumeric\":245}],962:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/attributes\"),i\u003dt(\"../bar/attributes\"),a\u003dt(\"../../components/color/attributes\"),o\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,s\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,l\u003dt(\"../../lib/extend\").extendFlat,c\u003dn.marker,u\u003dc.line;e.exports\u003d{y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},x0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},y0:{valType:\"any\",editType:\"calc+clearAxisTypes\"},dx:{valType:\"number\",editType:\"calc\"},dy:{valType:\"number\",editType:\"calc\"},xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),name:{valType:\"string\",editType:\"calc+clearAxisTypes\"},q1:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},median:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},q3:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},lowerfence:{valType:\"data_array\",editType:\"calc\"},upperfence:{valType:\"data_array\",editType:\"calc\"},notched:{valType:\"boolean\",editType:\"calc\"},notchwidth:{valType:\"number\",min:0,max:.5,dflt:.25,editType:\"calc\"},notchspan:{valType:\"data_array\",editType:\"calc\"},boxpoints:{valType:\"enumerated\",values:[\"all\",\"outliers\",\"suspectedoutliers\",!1],editType:\"calc\"},jitter:{valType:\"number\",min:0,max:1,editType:\"calc\"},pointpos:{valType:\"number\",min:-2,max:2,editType:\"calc\"},boxmean:{valType:\"enumerated\",values:[!0,\"sd\",!1],editType:\"calc\"},mean:{valType:\"data_array\",editType:\"calc\"},sd:{valType:\"data_array\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc+clearAxisTypes\"},quartilemethod:{valType:\"enumerated\",values:[\"linear\",\"exclusive\",\"inclusive\"],dflt:\"linear\",editType:\"calc\"},width:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},marker:{outliercolor:{valType:\"color\",dflt:\"rgba(0, 0, 0, 0)\",editType:\"style\"},symbol:l({},c.symbol,{arrayOk:!1,editType:\"plot\"}),opacity:l({},c.opacity,{arrayOk:!1,dflt:1,editType:\"style\"}),size:l({},c.size,{arrayOk:!1,editType:\"calc\"}),color:l({},c.color,{arrayOk:!1,editType:\"style\"}),line:{color:l({},u.color,{arrayOk:!1,dflt:a.defaultLine,editType:\"style\"}),width:l({},u.width,{arrayOk:!1,dflt:0,editType:\"style\"}),outliercolor:{valType:\"color\",editType:\"style\"},outlierwidth:{valType:\"number\",min:0,dflt:1,editType:\"style\"},editType:\"style\"},editType:\"plot\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:n.fillcolor,whiskerwidth:{valType:\"number\",min:0,max:1,dflt:.5,editType:\"calc\"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup,selected:{marker:n.selected.marker,editType:\"style\"},unselected:{marker:n.unselected.marker,editType:\"style\"},text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),hovertemplate:s({}),hoveron:{valType:\"flaglist\",flags:[\"boxes\",\"points\"],dflt:\"boxes+points\",editType:\"style\"}}},{\"../../components/color/attributes\":661,\"../../lib/extend\":789,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../bar/attributes\":937,\"../scatter/attributes\":1214}],963:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../plots/cartesian/align_period\"),o\u003dt(\"../../lib\"),s\u003dt(\"../../constants/numerical\").BADNUM,l\u003do._;e.exports\u003dfunction(t,e){var r,c,y,x,b,_,w,T\u003dt._fullLayout,k\u003di.getFromId(t,e.xaxis||\"x\"),M\u003di.getFromId(t,e.yaxis||\"y\"),A\u003d[],S\u003d\"violin\"\u003d\u003d\u003de.type?\"_numViolins\":\"_numBoxes\";\"h\"\u003d\u003d\u003de.orientation?(y\u003dk,x\u003d\"x\",b\u003dM,_\u003d\"y\",w\u003d!!e.yperiodalignment):(y\u003dM,x\u003d\"y\",b\u003dk,_\u003d\"x\",w\u003d!!e.xperiodalignment);var E,L,C,P,I,O,z\u003dfunction(t,e,r,i){var s,l\u003de+\"0\"in t,c\u003d\"d\"+e in t;if(e in t||l\u0026\u0026c){var u\u003dr.makeCalcdata(t,e);return[a(t,r,e,u),u]}s\u003dl?t[e+\"0\"]:\"name\"in t\u0026\u0026(\"category\"\u003d\u003d\u003dr.type||n(t.name)\u0026\u0026-1!\u003d\u003d[\"linear\",\"log\"].indexOf(r.type)||o.isDateTime(t.name)\u0026\u0026\"date\"\u003d\u003d\u003dr.type)?t.name:i;for(var f\u003d\"multicategory\"\u003d\u003d\u003dr.type?r.r2c_just_indices(s):r.d2c(s,0,t[e+\"calendar\"]),h\u003dt._length,p\u003dnew Array(h),d\u003d0;d\u003ch;d++)p[d]\u003df;return[p]}(e,_,b,T[S]),D\u003dz[0],R\u003dz[1],F\u003do.distinctVals(D,b),B\u003dF.vals,N\u003dF.minDiff/2,j\u003d\"all\"\u003d\u003d\u003d(e.boxpoints||e.points)?o.identity:function(t){return t.v\u003cE.lf||t.v\u003eE.uf};if(e._hasPreCompStats){var U\u003de[x],V\u003dfunction(t){return y.d2c((e[t]||[])[r])},q\u003d1/0,H\u003d-1/0;for(r\u003d0;r\u003ce._length;r++){var G\u003dD[r];if(n(G)){if((E\u003d{}).pos\u003dE[_]\u003dG,w\u0026\u0026R\u0026\u0026(E.orig_p\u003dR[r]),E.q1\u003dV(\"q1\"),E.med\u003dV(\"median\"),E.q3\u003dV(\"q3\"),L\u003d[],U\u0026\u0026o.isArrayOrTypedArray(U[r]))for(c\u003d0;c\u003cU[r].length;c++)(O\u003dy.d2c(U[r][c]))!\u003d\u003ds\u0026\u0026(u(I\u003d{v:O,i:[r,c]},e,[r,c]),L.push(I));if(E.pts\u003dL.sort(f),P\u003d(C\u003dE[x]\u003dL.map(h)).length,E.med!\u003d\u003ds\u0026\u0026E.q1!\u003d\u003ds\u0026\u0026E.q3!\u003d\u003ds\u0026\u0026E.med\u003e\u003dE.q1\u0026\u0026E.q3\u003e\u003dE.med){var Y\u003dV(\"lowerfence\");E.lf\u003dY!\u003d\u003ds\u0026\u0026Y\u003c\u003dE.q1?Y:p(E,C,P);var W\u003dV(\"upperfence\");E.uf\u003dW!\u003d\u003ds\u0026\u0026W\u003e\u003dE.q3?W:d(E,C,P);var X\u003dV(\"mean\");E.mean\u003dX!\u003d\u003ds?X:P?o.mean(C,P):(E.q1+E.q3)/2;var Z\u003dV(\"sd\");E.sd\u003dX!\u003d\u003ds\u0026\u0026Z\u003e\u003d0?Z:P?o.stdev(C,P,E.mean):E.q3-E.q1,E.lo\u003dm(E),E.uo\u003dg(E);var J\u003dV(\"notchspan\");J\u003dJ!\u003d\u003ds\u0026\u0026J\u003e0?J:v(E,P),E.ln\u003dE.med-J,E.un\u003dE.med+J;var K\u003dE.lf,Q\u003dE.uf;e.boxpoints\u0026\u0026C.length\u0026\u0026(K\u003dMath.min(K,C[0]),Q\u003dMath.max(Q,C[P-1])),e.notched\u0026\u0026(K\u003dMath.min(K,E.ln),Q\u003dMath.max(Q,E.un)),E.min\u003dK,E.max\u003dQ}else{var $;o.warn([\"Invalid input - make sure that q1 \u003c\u003d median \u003c\u003d q3\",\"q1 \u003d \"+E.q1,\"median \u003d \"+E.med,\"q3 \u003d \"+E.q3].join(\"\\n\")),$\u003dE.med!\u003d\u003ds?E.med:E.q1!\u003d\u003ds?E.q3!\u003d\u003ds?(E.q1+E.q3)/2:E.q1:E.q3!\u003d\u003ds?E.q3:0,E.med\u003d$,E.q1\u003dE.q3\u003d$,E.lf\u003dE.uf\u003d$,E.mean\u003dE.sd\u003d$,E.ln\u003dE.un\u003d$,E.min\u003dE.max\u003d$}q\u003dMath.min(q,E.min),H\u003dMath.max(H,E.max),E.pts2\u003dL.filter(j),A.push(E)}}e._extremes[y._id]\u003di.findExtremes(y,[q,H],{padded:!0})}else{var tt\u003dy.makeCalcdata(e,x),et\u003dfunction(t,e){for(var r\u003dt.length,n\u003dnew Array(r+1),i\u003d0;i\u003cr;i++)n[i]\u003dt[i]-e;return n[r]\u003dt[r-1]+e,n}(B,N),rt\u003dB.length,nt\u003dfunction(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;r++)e[r]\u003d[];return e}(rt);for(r\u003d0;r\u003ce._length;r++)if(O\u003dtt[r],n(O)){var it\u003do.findBin(D[r],et);it\u003e\u003d0\u0026\u0026it\u003crt\u0026\u0026(u(I\u003d{v:O,i:r},e,r),nt[it].push(I))}var at\u003d1/0,ot\u003d-1/0,st\u003de.quartilemethod,lt\u003d\"exclusive\"\u003d\u003d\u003dst,ct\u003d\"inclusive\"\u003d\u003d\u003dst;for(r\u003d0;r\u003crt;r++)if(nt[r].length\u003e0){var ut,ft;if((E\u003d{}).pos\u003dE[_]\u003dB[r],L\u003dE.pts\u003dnt[r].sort(f),P\u003d(C\u003dE[x]\u003dL.map(h)).length,E.min\u003dC[0],E.max\u003dC[P-1],E.mean\u003do.mean(C,P),E.sd\u003do.stdev(C,P,E.mean),E.med\u003do.interp(C,.5),P%2\u0026\u0026(lt||ct))lt?(ut\u003dC.slice(0,P/2),ft\u003dC.slice(P/2+1)):ct\u0026\u0026(ut\u003dC.slice(0,P/2+1),ft\u003dC.slice(P/2)),E.q1\u003do.interp(ut,.5),E.q3\u003do.interp(ft,.5);else E.q1\u003do.interp(C,.25),E.q3\u003do.interp(C,.75);E.lf\u003dp(E,C,P),E.uf\u003dd(E,C,P),E.lo\u003dm(E),E.uo\u003dg(E);var ht\u003dv(E,P);E.ln\u003dE.med-ht,E.un\u003dE.med+ht,at\u003dMath.min(at,E.ln),ot\u003dMath.max(ot,E.un),E.pts2\u003dL.filter(j),A.push(E)}e._extremes[y._id]\u003di.findExtremes(y,e.notched?tt.concat([at,ot]):tt,{padded:!0})}return function(t,e){if(o.isArrayOrTypedArray(e.selectedpoints))for(var r\u003d0;r\u003ct.length;r++){for(var n\u003dt[r].pts||[],i\u003d{},a\u003d0;a\u003cn.length;a++)i[n[a].i]\u003da;o.tagSelected(n,e,i)}}(A,e),A.length\u003e0?(A[0].t\u003d{num:T[S],dPos:N,posLetter:_,valLetter:x,labels:{med:l(t,\"median:\"),min:l(t,\"min:\"),q1:l(t,\"q1:\"),q3:l(t,\"q3:\"),max:l(t,\"max:\"),mean:\"sd\"\u003d\u003d\u003de.boxmean?l(t,\"mean \\xb1 \\u03c3:\"):l(t,\"mean:\"),lf:l(t,\"lower fence:\"),uf:l(t,\"upper fence:\")}},T[S]++,A):[{t:{empty:!0}}]};var c\u003d{text:\"tx\",hovertext:\"htx\"};function u(t,e,r){for(var n in c)o.isArrayOrTypedArray(e[n])\u0026\u0026(Array.isArray(r)?o.isArrayOrTypedArray(e[n][r[0]])\u0026\u0026(t[c[n]]\u003de[n][r[0]][r[1]]):t[c[n]]\u003de[n][r])}function f(t,e){return t.v-e.v}function h(t){return t.v}function p(t,e,r){return 0\u003d\u003d\u003dr?t.q1:Math.min(t.q1,e[Math.min(o.findBin(2.5*t.q1-1.5*t.q3,e,!0)+1,r-1)])}function d(t,e,r){return 0\u003d\u003d\u003dr?t.q3:Math.max(t.q3,e[Math.max(o.findBin(2.5*t.q3-1.5*t.q1,e),0)])}function m(t){return 4*t.q1-3*t.q3}function g(t){return 4*t.q3-3*t.q1}function v(t,e){return 0\u003d\u003d\u003de?0:1.57*(t.q3-t.q1)/Math.sqrt(e)}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849,\"fast-isnumeric\":245}],964:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/cartesian/constraints\").getAxisGroup,o\u003d[\"v\",\"h\"];function s(t,e,r,o){var s,l,c,u\u003de.calcdata,f\u003de._fullLayout,h\u003do._id,p\u003dh.charAt(0),d\u003d[],m\u003d0;for(s\u003d0;s\u003cr.length;s++)for(c\u003du[r[s]],l\u003d0;l\u003cc.length;l++)d.push(o.c2l(c[l].pos,!0)),m+\u003d(c[l].pts2||[]).length;if(d.length){var g\u003di.distinctVals(d);\"category\"!\u003d\u003do.type\u0026\u0026\"multicategory\"!\u003d\u003do.type||(g.minDiff\u003d1);var v\u003dg.minDiff/2;n.minDtick(o,g.minDiff,g.vals[0],!0);var y\u003df[\"violin\"\u003d\u003d\u003dt?\"_numViolins\":\"_numBoxes\"],x\u003d\"group\"\u003d\u003d\u003df[t+\"mode\"]\u0026\u0026y\u003e1,b\u003d1-f[t+\"gap\"],_\u003d1-f[t+\"groupgap\"];for(s\u003d0;s\u003cr.length;s++){var w,T,k,M,A,S,E\u003d(c\u003du[r[s]])[0].trace,L\u003dc[0].t,C\u003dE.width,P\u003dE.side;if(C)w\u003dT\u003dM\u003dC/2,k\u003d0;else if(w\u003dv,x){var I\u003da(f,o._id)+E.orientation,O\u003d(f._alignmentOpts[I]||{})[E.alignmentgroup]||{},z\u003dObject.keys(O.offsetGroups||{}).length,D\u003dz||y;T\u003dw*b*_/D,k\u003d2*w*(((z?E._offsetIndex:L.num)+.5)/D-.5)*b,M\u003dw*b/D}else T\u003dw*b*_,k\u003d0,M\u003dw;L.dPos\u003dw,L.bPos\u003dk,L.bdPos\u003dT,L.wHover\u003dM;var R,F,B,N,j,U,V\u003dk+T,q\u003dBoolean(C);if(\"positive\"\u003d\u003d\u003dP?(A\u003dw*(C?1:.5),R\u003dV,S\u003dR\u003dk):\"negative\"\u003d\u003d\u003dP?(A\u003dR\u003dk,S\u003dw*(C?1:.5),F\u003dV):(A\u003dS\u003dw,R\u003dF\u003dV),(E.boxpoints||E.points)\u0026\u0026m\u003e0){var H\u003dE.pointpos,G\u003dE.jitter,Y\u003dE.marker.size/2,W\u003d0;H+G\u003e\u003d0\u0026\u0026((W\u003dV*(H+G))\u003eA?(q\u003d!0,j\u003dY,B\u003dW):W\u003eR\u0026\u0026(j\u003dY,B\u003dA)),W\u003c\u003dA\u0026\u0026(B\u003dA);var X\u003d0;H-G\u003c\u003d0\u0026\u0026((X\u003d-V*(H-G))\u003eS?(q\u003d!0,U\u003dY,N\u003dX):X\u003eF\u0026\u0026(U\u003dY,N\u003dS)),X\u003c\u003dS\u0026\u0026(N\u003dS)}else B\u003dA,N\u003dS;var Z\u003dnew Array(c.length);for(l\u003d0;l\u003cc.length;l++)Z[l]\u003dc[l].pos;E._extremes[h]\u003dn.findExtremes(o,Z,{padded:q,vpadminus:N,vpadplus:B,vpadLinearized:!0,ppadminus:{x:U,y:j}[p],ppadplus:{x:j,y:U}[p]})}}}e.exports\u003d{crossTraceCalc:function(t,e){for(var r\u003dt.calcdata,n\u003de.xaxis,i\u003de.yaxis,a\u003d0;a\u003co.length;a++){for(var l\u003do[a],c\u003d\"h\"\u003d\u003d\u003dl?i:n,u\u003d[],f\u003d0;f\u003cr.length;f++){var h\u003dr[f],p\u003dh[0].t,d\u003dh[0].trace;!0!\u003d\u003dd.visible||\"box\"!\u003d\u003dd.type\u0026\u0026\"candlestick\"!\u003d\u003dd.type||p.empty||(d.orientation||\"v\")!\u003d\u003dl||d.xaxis!\u003d\u003dn._id||d.yaxis!\u003d\u003di._id||u.push(f)}s(\"box\",t,u,c)}},setPositionOffset:s}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/constraints\":857}],965:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../scatter/period_defaults\"),s\u003dt(\"../bar/defaults\").handleGroupingDefaults,l\u003dt(\"../../plots/cartesian/axis_autotype\"),c\u003dt(\"./attributes\");function u(t,e,r,a){function o(t){var e\u003d0;return t\u0026\u0026t.length\u0026\u0026(e+\u003d1,n.isArrayOrTypedArray(t[0])\u0026\u0026t[0].length\u0026\u0026(e+\u003d1)),e}function s(e){return n.validate(t[e],c[e])}var u,f\u003dr(\"y\"),h\u003dr(\"x\");if(\"box\"\u003d\u003d\u003de.type){var p\u003dr(\"q1\"),d\u003dr(\"median\"),m\u003dr(\"q3\");e._hasPreCompStats\u003dp\u0026\u0026p.length\u0026\u0026d\u0026\u0026d.length\u0026\u0026m\u0026\u0026m.length,u\u003dMath.min(n.minRowLength(p),n.minRowLength(d),n.minRowLength(m))}var g,v,y\u003do(f),x\u003do(h),b\u003dy\u0026\u0026n.minRowLength(f),_\u003dx\u0026\u0026n.minRowLength(h),w\u003da.calendar,T\u003d{autotypenumbers:a.autotypenumbers};if(e._hasPreCompStats)switch(String(x)+String(y)){case\"00\":var k\u003ds(\"x0\")||s(\"dx\");g\u003d(s(\"y0\")||s(\"dy\"))\u0026\u0026!k?\"h\":\"v\",v\u003du;break;case\"10\":g\u003d\"v\",v\u003dMath.min(u,_);break;case\"20\":g\u003d\"h\",v\u003dMath.min(u,h.length);break;case\"01\":g\u003d\"h\",v\u003dMath.min(u,b);break;case\"02\":g\u003d\"v\",v\u003dMath.min(u,f.length);break;case\"12\":g\u003d\"v\",v\u003dMath.min(u,_,f.length);break;case\"21\":g\u003d\"h\",v\u003dMath.min(u,h.length,b);break;case\"11\":v\u003d0;break;case\"22\":var M,A\u003d!1;for(M\u003d0;M\u003ch.length;M++)if(\"category\"\u003d\u003d\u003dl(h[M],w,T)){A\u003d!0;break}if(A)g\u003d\"v\",v\u003dMath.min(u,_,f.length);else{for(M\u003d0;M\u003cf.length;M++)if(\"category\"\u003d\u003d\u003dl(f[M],w,T)){A\u003d!0;break}A?(g\u003d\"h\",v\u003dMath.min(u,h.length,b)):(g\u003d\"v\",v\u003dMath.min(u,_,f.length))}}else y\u003e0?(g\u003d\"v\",v\u003dx\u003e0?Math.min(_,b):Math.min(b)):x\u003e0?(g\u003d\"h\",v\u003dMath.min(_)):v\u003d0;if(v){e._length\u003dv;var S\u003dr(\"orientation\",g);e._hasPreCompStats?\"v\"\u003d\u003d\u003dS\u0026\u00260\u003d\u003d\u003dx?(r(\"x0\",0),r(\"dx\",1)):\"h\"\u003d\u003d\u003dS\u0026\u00260\u003d\u003d\u003dy\u0026\u0026(r(\"y0\",0),r(\"dy\",1)):\"v\"\u003d\u003d\u003dS\u0026\u00260\u003d\u003d\u003dx?r(\"x0\"):\"h\"\u003d\u003d\u003dS\u0026\u00260\u003d\u003d\u003dy\u0026\u0026r(\"y0\"),i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],a)}else e.visible\u003d!1}function f(t,e,r,i){var a\u003di.prefix,o\u003dn.coerce2(t,e,c,\"marker.outliercolor\"),s\u003dr(\"marker.line.outliercolor\"),l\u003d\"outliers\";e._hasPreCompStats?l\u003d\"all\":(o||s)\u0026\u0026(l\u003d\"suspectedoutliers\");var u\u003dr(a+\"points\",l);u?(r(\"jitter\",\"all\"\u003d\u003d\u003du?.3:0),r(\"pointpos\",\"all\"\u003d\u003d\u003du?-1.5:0),r(\"marker.symbol\"),r(\"marker.opacity\"),r(\"marker.size\"),r(\"marker.color\",e.line.color),r(\"marker.line.color\"),r(\"marker.line.width\"),\"suspectedoutliers\"\u003d\u003d\u003du\u0026\u0026(r(\"marker.line.outliercolor\",e.marker.color),r(\"marker.line.outlierwidth\")),r(\"selected.marker.color\"),r(\"unselected.marker.color\"),r(\"selected.marker.size\"),r(\"unselected.marker.size\"),r(\"text\"),r(\"hovertext\")):delete e.marker;var f\u003dr(\"hoveron\");\"all\"!\u003d\u003df\u0026\u0026-1\u003d\u003d\u003df.indexOf(\"points\")||r(\"hovertemplate\"),n.coerceSelectionMarkerOpacity(e,r)}e.exports\u003d{supplyDefaults:function(t,e,r,i){function s(r,i){return n.coerce(t,e,c,r,i)}if(u(t,e,s,i),!1!\u003d\u003de.visible){o(t,e,i,s),s(\"xhoverformat\"),s(\"yhoverformat\");var l\u003de._hasPreCompStats;l\u0026\u0026(s(\"lowerfence\"),s(\"upperfence\")),s(\"line.color\",(t.marker||{}).color||r),s(\"line.width\"),s(\"fillcolor\",a.addOpacity(e.line.color,.5));var h\u003d!1;if(l){var p\u003ds(\"mean\"),d\u003ds(\"sd\");p\u0026\u0026p.length\u0026\u0026(h\u003d!0,d\u0026\u0026d.length\u0026\u0026(h\u003d\"sd\"))}s(\"boxmean\",h),s(\"whiskerwidth\"),s(\"width\"),s(\"quartilemethod\");var m\u003d!1;if(l){var g\u003ds(\"notchspan\");g\u0026\u0026g.length\u0026\u0026(m\u003d!0)}else n.validate(t.notchwidth,c.notchwidth)\u0026\u0026(m\u003d!0);s(\"notched\",m)\u0026\u0026s(\"notchwidth\"),f(t,e,s,{prefix:\"box\"})}},crossTraceDefaults:function(t,e){var r,i;function a(t){return n.coerce(i._input,i,c,t)}for(var o\u003d0;o\u003ct.length;o++){var l\u003d(i\u003dt[o]).type;\"box\"!\u003d\u003dl\u0026\u0026\"violin\"!\u003d\u003dl||(r\u003di._input,\"group\"\u003d\u003d\u003de[l+\"mode\"]\u0026\u0026s(r,i,e,a))}},handleSampleDefaults:u,handlePointsDefaults:f}},{\"../../components/color\":662,\"../../lib\":799,\"../../plots/cartesian/axis_autotype\":850,\"../../registry\":927,\"../bar/defaults\":941,\"../scatter/period_defaults\":1234,\"./attributes\":962}],966:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return e.hoverOnBox\u0026\u0026(t.hoverOnBox\u003de.hoverOnBox),\"xVal\"in e\u0026\u0026(t.x\u003de.xVal),\"yVal\"in e\u0026\u0026(t.y\u003de.yVal),e.xa\u0026\u0026(t.xaxis\u003de.xa),e.ya\u0026\u0026(t.yaxis\u003de.ya),t}},{}],967:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/fx\"),o\u003dt(\"../../components/color\"),s\u003di.fillText;function l(t,e,r,s){var l,c,u,f,h,p,d,m,g,v,y,x,b,_,w\u003dt.cd,T\u003dt.xa,k\u003dt.ya,M\u003dw[0].trace,A\u003dw[0].t,S\u003d\"violin\"\u003d\u003d\u003dM.type,E\u003d[],L\u003dA.bdPos,C\u003dA.wHover,P\u003dfunction(t){return u.c2l(t.pos)+A.bPos-u.c2l(p)};S\u0026\u0026\"both\"!\u003d\u003dM.side?(\"positive\"\u003d\u003d\u003dM.side\u0026\u0026(g\u003dfunction(t){var e\u003dP(t);return a.inbox(e,e+C,v)},x\u003dL,b\u003d0),\"negative\"\u003d\u003d\u003dM.side\u0026\u0026(g\u003dfunction(t){var e\u003dP(t);return a.inbox(e-C,e,v)},x\u003d0,b\u003dL)):(g\u003dfunction(t){var e\u003dP(t);return a.inbox(e-C,e+C,v)},x\u003db\u003dL),_\u003dS?function(t){return a.inbox(t.span[0]-h,t.span[1]-h,v)}:function(t){return a.inbox(t.min-h,t.max-h,v)},\"h\"\u003d\u003d\u003dM.orientation?(h\u003de,p\u003dr,d\u003d_,m\u003dg,l\u003d\"y\",u\u003dk,c\u003d\"x\",f\u003dT):(h\u003dr,p\u003de,d\u003dg,m\u003d_,l\u003d\"x\",u\u003dT,c\u003d\"y\",f\u003dk);var I\u003dMath.min(1,L/Math.abs(u.r2c(u.range[1])-u.r2c(u.range[0])));function O(t){return(d(t)+m(t))/2}v\u003dt.maxHoverDistance-I,y\u003dt.maxSpikeDistance-I;var z\u003da.getDistanceFunction(s,d,m,O);if(a.getClosest(w,z,t),!1\u003d\u003d\u003dt.index)return[];var D\u003dw[t.index],R\u003dM.line.color,F\u003d(M.marker||{}).color;o.opacity(R)\u0026\u0026M.line.width?t.color\u003dR:o.opacity(F)\u0026\u0026M.boxpoints?t.color\u003dF:t.color\u003dM.fillcolor,t[l+\"0\"]\u003du.c2p(D.pos+A.bPos-b,!0),t[l+\"1\"]\u003du.c2p(D.pos+A.bPos+x,!0),t[l+\"LabelVal\"]\u003dvoid 0!\u003d\u003dD.orig_p?D.orig_p:D.pos;var B\u003dl+\"Spike\";t.spikeDistance\u003dO(D)*y/v,t[B]\u003du.c2p(D.pos,!0);var N\u003d{},j\u003d[\"med\",\"q1\",\"q3\",\"min\",\"max\"];(M.boxmean||(M.meanline||{}).visible)\u0026\u0026j.push(\"mean\"),(M.boxpoints||M.points)\u0026\u0026j.push(\"lf\",\"uf\");for(var U\u003d0;U\u003cj.length;U++){var V\u003dj[U];if(V in D\u0026\u0026!(D[V]in N)){N[D[V]]\u003d!0;var q\u003dD[V],H\u003df.c2p(q,!0),G\u003di.extendFlat({},t);G.attr\u003dV,G[c+\"0\"]\u003dG[c+\"1\"]\u003dH,G[c+\"LabelVal\"]\u003dq,G[c+\"Label\"]\u003d(A.labels?A.labels[V]+\" \":\"\")+n.hoverLabelText(f,q,M[c+\"hoverformat\"]),G.hoverOnBox\u003d!0,\"mean\"\u003d\u003d\u003dV\u0026\u0026\"sd\"in D\u0026\u0026\"sd\"\u003d\u003d\u003dM.boxmean\u0026\u0026(G[c+\"err\"]\u003dD.sd),t.name\u003d\"\",t.spikeDistance\u003dvoid 0,t[B]\u003dvoid 0,G.hovertemplate\u003d!1,E.push(G)}}return E}function c(t,e,r){for(var n,o,l,c\u003dt.cd,u\u003dt.xa,f\u003dt.ya,h\u003dc[0].trace,p\u003du.c2p(e),d\u003df.c2p(r),m\u003da.quadrature((function(t){var e\u003dMath.max(3,t.mrc||0);return Math.max(Math.abs(u.c2p(t.x)-p)-e,1-3/e)}),(function(t){var e\u003dMath.max(3,t.mrc||0);return Math.max(Math.abs(f.c2p(t.y)-d)-e,1-3/e)})),g\u003d!1,v\u003d0;v\u003cc.length;v++){o\u003dc[v];for(var y\u003d0;y\u003c(o.pts||[]).length;y++){var x\u003dm(l\u003do.pts[y]);x\u003c\u003dt.distance\u0026\u0026(t.distance\u003dx,g\u003d[v,y])}}if(!g)return!1;l\u003d(o\u003dc[g[0]]).pts[g[1]];var b\u003du.c2p(l.x,!0),_\u003df.c2p(l.y,!0),w\u003dl.mrc||1;n\u003di.extendFlat({},t,{index:l.i,color:(h.marker||{}).color,name:h.name,x0:b-w,x1:b+w,y0:_-w,y1:_+w,spikeDistance:t.distance,hovertemplate:h.hovertemplate});var T,k\u003do.orig_p,M\u003dvoid 0!\u003d\u003dk?k:o.pos;return\"h\"\u003d\u003d\u003dh.orientation?(T\u003df,n.xLabelVal\u003dl.x,n.yLabelVal\u003dM):(T\u003du,n.xLabelVal\u003dM,n.yLabelVal\u003dl.y),n[T._id.charAt(0)+\"Spike\"]\u003dT.c2p(o.pos,!0),s(l,h,n),n}e.exports\u003d{hoverPoints:function(t,e,r,n){var i,a\u003dt.cd[0].trace.hoveron,o\u003d[];return-1!\u003d\u003da.indexOf(\"boxes\")\u0026\u0026(o\u003do.concat(l(t,e,r,n))),-1!\u003d\u003da.indexOf(\"points\")\u0026\u0026(i\u003dc(t,e,r)),\"closest\"\u003d\u003d\u003dn?i?[i]:o:i?(o.push(i),o):o},hoverOnBoxes:l,hoverOnPoints:c}},{\"../../components/color\":662,\"../../components/fx\":702,\"../../lib\":799,\"../../plots/cartesian/axes\":849}],968:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\").supplyLayoutDefaults,calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\").crossTraceCalc,plot:t(\"./plot\").plot,style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\").hoverPoints,eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"box\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"boxLayout\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":863,\"./attributes\":962,\"./calc\":963,\"./cross_trace_calc\":964,\"./defaults\":965,\"./event_data\":966,\"./hover\":967,\"./layout_attributes\":969,\"./layout_defaults\":970,\"./plot\":971,\"./select\":972,\"./style\":973}],969:[function(t,e,r){\"use strict\";e.exports\u003d{boxmode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"overlay\",editType:\"calc\"},boxgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"},boxgroupgap:{valType:\"number\",min:0,max:1,dflt:.3,editType:\"calc\"}}},{}],970:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"./layout_attributes\");function o(t,e,r,i,a){for(var o\u003da+\"Layout\",s\u003d!1,l\u003d0;l\u003cr.length;l++){var c\u003dr[l];if(n.traceIs(c,o)){s\u003d!0;break}}s\u0026\u0026(i(a+\"mode\"),i(a+\"gap\"),i(a+\"groupgap\"))}e.exports\u003d{supplyLayoutDefaults:function(t,e,r){o(0,0,r,(function(r,n){return i.coerce(t,e,a,r,n)}),\"box\")},_supply:o}},{\"../../lib\":799,\"../../registry\":927,\"./layout_attributes\":969}],971:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\");function o(t,e,r,a){var o,s,l\u003d\"h\"\u003d\u003d\u003dr.orientation,c\u003de.val,u\u003de.pos,f\u003d!!u.rangebreaks,h\u003da.bPos,p\u003da.wdPos||0,d\u003da.bPosPxOffset||0,m\u003dr.whiskerwidth||0,g\u003dr.notched||!1,v\u003dg?1-2*r.notchwidth:1;Array.isArray(a.bdPos)?(o\u003da.bdPos[0],s\u003da.bdPos[1]):(o\u003da.bdPos,s\u003da.bdPos);var y\u003dt.selectAll(\"path.box\").data(\"violin\"!\u003d\u003dr.type||r.box.visible?i.identity:[]);y.enter().append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").attr(\"class\",\"box\"),y.exit().remove(),y.each((function(t){if(t.empty)return\"M0,0Z\";var e\u003du.c2l(t.pos+h,!0),a\u003du.l2p(e-o)+d,y\u003du.l2p(e+s)+d,x\u003df?(a+y)/2:u.l2p(e)+d,b\u003dr.whiskerwidth,_\u003df?a*b+(1-b)*x:u.l2p(e-p)+d,w\u003df?y*b+(1-b)*x:u.l2p(e+p)+d,T\u003du.l2p(e-o*v)+d,k\u003du.l2p(e+s*v)+d,M\u003dc.c2p(t.q1,!0),A\u003dc.c2p(t.q3,!0),S\u003di.constrain(c.c2p(t.med,!0),Math.min(M,A)+1,Math.max(M,A)-1),E\u003dvoid 0\u003d\u003d\u003dt.lf||!1\u003d\u003d\u003dr.boxpoints,L\u003dc.c2p(E?t.min:t.lf,!0),C\u003dc.c2p(E?t.max:t.uf,!0),P\u003dc.c2p(t.ln,!0),I\u003dc.c2p(t.un,!0);l?n.select(this).attr(\"d\",\"M\"+S+\",\"+T+\"V\"+k+\"M\"+M+\",\"+a+\"V\"+y+(g?\"H\"+P+\"L\"+S+\",\"+k+\"L\"+I+\",\"+y:\"\")+\"H\"+A+\"V\"+a+(g?\"H\"+I+\"L\"+S+\",\"+T+\"L\"+P+\",\"+a:\"\")+\"ZM\"+M+\",\"+x+\"H\"+L+\"M\"+A+\",\"+x+\"H\"+C+(0\u003d\u003d\u003dm?\"\":\"M\"+L+\",\"+_+\"V\"+w+\"M\"+C+\",\"+_+\"V\"+w)):n.select(this).attr(\"d\",\"M\"+T+\",\"+S+\"H\"+k+\"M\"+a+\",\"+M+\"H\"+y+(g?\"V\"+P+\"L\"+k+\",\"+S+\"L\"+y+\",\"+I:\"\")+\"V\"+A+\"H\"+a+(g?\"V\"+I+\"L\"+T+\",\"+S+\"L\"+a+\",\"+P:\"\")+\"ZM\"+x+\",\"+M+\"V\"+L+\"M\"+x+\",\"+A+\"V\"+C+(0\u003d\u003d\u003dm?\"\":\"M\"+_+\",\"+L+\"H\"+w+\"M\"+_+\",\"+C+\"H\"+w))}))}function s(t,e,r,n){var o\u003de.x,s\u003de.y,l\u003dn.bdPos,c\u003dn.bPos,u\u003dr.boxpoints||r.points;i.seedPseudoRandom();var f\u003dt.selectAll(\"g.points\").data(u?function(t){return t.forEach((function(t){t.t\u003dn,t.trace\u003dr})),t}:[]);f.enter().append(\"g\").attr(\"class\",\"points\"),f.exit().remove();var h\u003df.selectAll(\"path\").data((function(t){var e,n,a\u003dt.pts2,o\u003dMath.max((t.max-t.min)/10,t.q3-t.q1),s\u003d1e-9*o,f\u003d.01*o,h\u003d[],p\u003d0;if(r.jitter){if(0\u003d\u003d\u003do)for(p\u003d1,h\u003dnew Array(a.length),e\u003d0;e\u003ca.length;e++)h[e]\u003d1;else for(e\u003d0;e\u003ca.length;e++){var d\u003dMath.max(0,e-5),m\u003da[d].v,g\u003dMath.min(a.length-1,e+5),v\u003da[g].v;\"all\"!\u003d\u003du\u0026\u0026(a[e].v\u003ct.lf?v\u003dMath.min(v,t.lf):m\u003dMath.max(m,t.uf));var y\u003dMath.sqrt(f*(g-d)/(v-m+s))||0;y\u003di.constrain(Math.abs(y),0,1),h.push(y),p\u003dMath.max(y,p)}n\u003d2*r.jitter/(p||1)}for(e\u003d0;e\u003ca.length;e++){var x\u003da[e],b\u003dx.v,_\u003dr.jitter?n*h[e]*(i.pseudoRandom()-.5):0,w\u003dt.pos+c+l*(r.pointpos+_);\"h\"\u003d\u003d\u003dr.orientation?(x.y\u003dw,x.x\u003db):(x.x\u003dw,x.y\u003db),\"suspectedoutliers\"\u003d\u003d\u003du\u0026\u0026b\u003ct.uo\u0026\u0026b\u003et.lo\u0026\u0026(x.so\u003d!0)}return a}));h.enter().append(\"path\").classed(\"point\",!0),h.exit().remove(),h.call(a.translatePoints,o,s)}function l(t,e,r,a){var o,s,l\u003de.val,c\u003de.pos,u\u003d!!c.rangebreaks,f\u003da.bPos,h\u003da.bPosPxOffset||0,p\u003dr.boxmean||(r.meanline||{}).visible;Array.isArray(a.bdPos)?(o\u003da.bdPos[0],s\u003da.bdPos[1]):(o\u003da.bdPos,s\u003da.bdPos);var d\u003dt.selectAll(\"path.mean\").data(\"box\"\u003d\u003d\u003dr.type\u0026\u0026r.boxmean||\"violin\"\u003d\u003d\u003dr.type\u0026\u0026r.box.visible\u0026\u0026r.meanline.visible?i.identity:[]);d.enter().append(\"path\").attr(\"class\",\"mean\").style({fill:\"none\",\"vector-effect\":\"non-scaling-stroke\"}),d.exit().remove(),d.each((function(t){var e\u003dc.c2l(t.pos+f,!0),i\u003dc.l2p(e-o)+h,a\u003dc.l2p(e+s)+h,d\u003du?(i+a)/2:c.l2p(e)+h,m\u003dl.c2p(t.mean,!0),g\u003dl.c2p(t.mean-t.sd,!0),v\u003dl.c2p(t.mean+t.sd,!0);\"h\"\u003d\u003d\u003dr.orientation?n.select(this).attr(\"d\",\"M\"+m+\",\"+i+\"V\"+a+(\"sd\"\u003d\u003d\u003dp?\"m0,0L\"+g+\",\"+d+\"L\"+m+\",\"+i+\"L\"+v+\",\"+d+\"Z\":\"\")):n.select(this).attr(\"d\",\"M\"+i+\",\"+m+\"H\"+a+(\"sd\"\u003d\u003d\u003dp?\"m0,0L\"+d+\",\"+g+\"L\"+i+\",\"+m+\"L\"+d+\",\"+v+\"Z\":\"\"))}))}e.exports\u003d{plot:function(t,e,r,a){var c\u003de.xaxis,u\u003de.yaxis;i.makeTraceGroups(a,r,\"trace boxes\").each((function(t){var e,r,i\u003dn.select(this),a\u003dt[0],f\u003da.t,h\u003da.trace;(f.wdPos\u003df.bdPos*h.whiskerwidth,!0!\u003d\u003dh.visible||f.empty)?i.remove():(\"h\"\u003d\u003d\u003dh.orientation?(e\u003du,r\u003dc):(e\u003dc,r\u003du),o(i,{pos:e,val:r},h,f),s(i,{x:c,y:u},h,f),l(i,{pos:e,val:r},h,f))}))},plotBoxAndWhiskers:o,plotPoints:s,plotBoxMean:l}},{\"../../components/drawing\":684,\"../../lib\":799,\"@plotly/d3\":58}],972:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r,n,i\u003dt.cd,a\u003dt.xaxis,o\u003dt.yaxis,s\u003d[];if(!1\u003d\u003d\u003de)for(r\u003d0;r\u003ci.length;r++)for(n\u003d0;n\u003c(i[r].pts||[]).length;n++)i[r].pts[n].selected\u003d0;else for(r\u003d0;r\u003ci.length;r++)for(n\u003d0;n\u003c(i[r].pts||[]).length;n++){var l\u003di[r].pts[n],c\u003da.c2p(l.x),u\u003do.c2p(l.y);e.contains([c,u],null,l.i,t)?(s.push({pointNumber:l.i,x:a.c2d(l.x),y:o.c2d(l.y)}),l.selected\u003d1):l.selected\u003d0}return s}},{}],973:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../components/drawing\");e.exports\u003d{style:function(t,e,r){var o\u003dr||n.select(t).selectAll(\"g.trace.boxes\");o.style(\"opacity\",(function(t){return t[0].trace.opacity})),o.each((function(e){var r\u003dn.select(this),o\u003de[0].trace,s\u003do.line.width;function l(t,e,r,n){t.style(\"stroke-width\",e+\"px\").call(i.stroke,r).call(i.fill,n)}var c\u003dr.selectAll(\"path.box\");if(\"candlestick\"\u003d\u003d\u003do.type)c.each((function(t){if(!t.empty){var e\u003dn.select(this),r\u003do[t.dir];l(e,r.line.width,r.line.color,r.fillcolor),e.style(\"opacity\",o.selectedpoints\u0026\u0026!t.selected?.3:1)}}));else{l(c,s,o.line.color,o.fillcolor),r.selectAll(\"path.mean\").style({\"stroke-width\":s,\"stroke-dasharray\":2*s+\"px,\"+s+\"px\"}).call(i.stroke,o.line.color);var u\u003dr.selectAll(\"path.point\");a.pointStyle(u,o,t)}}))},styleOnSelect:function(t,e,r){var n\u003de[0].trace,i\u003dr.selectAll(\"path.point\");n.selectedpoints?a.selectedPointStyle(i,n):a.pointStyle(i,n,t)}}},{\"../../components/color\":662,\"../../components/drawing\":684,\"@plotly/d3\":58}],974:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").extendFlat,i\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,a\u003dt(\"../ohlc/attributes\"),o\u003dt(\"../box/attributes\");function s(t){return{line:{color:n({},o.line.color,{dflt:t}),width:o.line.width,editType:\"style\"},fillcolor:o.fillcolor,editType:\"style\"}}e.exports\u003d{xperiod:a.xperiod,xperiod0:a.xperiod0,xperiodalignment:a.xperiodalignment,xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:n({},o.line.width,{}),editType:\"style\"},increasing:s(a.increasing.line.color.dflt),decreasing:s(a.decreasing.line.color.dflt),text:a.text,hovertext:a.hovertext,whiskerwidth:n({},o.whiskerwidth,{dflt:0}),hoverlabel:a.hoverlabel}},{\"../../lib\":799,\"../../plots/cartesian/axis_format_attributes\":852,\"../box/attributes\":962,\"../ohlc/attributes\":1160}],975:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../plots/cartesian/align_period\"),o\u003dt(\"../ohlc/calc\").calcCommon;function s(t,e,r,n){return{min:r,q1:Math.min(t,n),med:n,q3:Math.max(t,n),max:e}}e.exports\u003dfunction(t,e){var r\u003dt._fullLayout,l\u003di.getFromId(t,e.xaxis),c\u003di.getFromId(t,e.yaxis),u\u003dl.makeCalcdata(e,\"x\"),f\u003da(e,l,\"x\",u),h\u003do(t,e,u,f,c,s);return h.length?(n.extendFlat(h[0].t,{num:r._numBoxes,dPos:n.distinctVals(f).minDiff/2,posLetter:\"x\",valLetter:\"y\"}),r._numBoxes++,h):[{t:{empty:!0}}]}},{\"../../lib\":799,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849,\"../ohlc/calc\":1161}],976:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../ohlc/ohlc_defaults\"),o\u003dt(\"../scatter/period_defaults\"),s\u003dt(\"./attributes\");function l(t,e,r,n){var a\u003dr(n+\".line.color\");r(n+\".line.width\",e.line.width),r(n+\".fillcolor\",i.addOpacity(a,.5))}e.exports\u003dfunction(t,e,r,i){function c(r,i){return n.coerce(t,e,s,r,i)}a(t,e,c,i)?(o(t,e,i,c,{x:!0}),c(\"xhoverformat\"),c(\"yhoverformat\"),c(\"line.width\"),l(t,e,c,\"increasing\"),l(t,e,c,\"decreasing\"),c(\"text\"),c(\"hovertext\"),c(\"whiskerwidth\"),i._requestRangeslider[e.xaxis]\u003d!0):e.visible\u003d!1}},{\"../../components/color\":662,\"../../lib\":799,\"../ohlc/ohlc_defaults\":1165,\"../scatter/period_defaults\":1234,\"./attributes\":974}],977:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"candlestick\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"showLegend\",\"candlestick\",\"boxLayout\"],meta:{},attributes:t(\"./attributes\"),layoutAttributes:t(\"../box/layout_attributes\"),supplyLayoutDefaults:t(\"../box/layout_defaults\").supplyLayoutDefaults,crossTraceCalc:t(\"../box/cross_trace_calc\").crossTraceCalc,supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"../box/plot\").plot,layerName:\"boxlayer\",style:t(\"../box/style\").style,hoverPoints:t(\"../ohlc/hover\").hoverPoints,selectPoints:t(\"../ohlc/select\")}},{\"../../plots/cartesian\":863,\"../box/cross_trace_calc\":964,\"../box/layout_attributes\":969,\"../box/layout_defaults\":970,\"../box/plot\":971,\"../box/style\":973,\"../ohlc/hover\":1163,\"../ohlc/select\":1167,\"./attributes\":974,\"./calc\":975,\"./defaults\":976}],978:[function(t,e,r){\"use strict\";var n\u003dt(\"./axis_defaults\"),i\u003dt(\"../../plot_api/plot_template\");e.exports\u003dfunction(t,e,r,a,o){a(\"a\")||(a(\"da\"),a(\"a0\")),a(\"b\")||(a(\"db\"),a(\"b0\")),function(t,e,r,a){[\"aaxis\",\"baxis\"].forEach((function(o){var s\u003do.charAt(0),l\u003dt[o]||{},c\u003di.newContainer(e,o),u\u003d{tickfont:\"x\",id:s+\"axis\",letter:s,font:e.font,name:o,data:t[s],calendar:e.calendar,dfltColor:a,bgColor:r.paper_bgcolor,autotypenumbersDflt:r.autotypenumbers,fullLayout:r};n(l,c,u),c._categories\u003dc._categories||[],t[o]||\"-\"\u003d\u003d\u003dl.type||(t[o]\u003d{type:l.type})}))}(t,e,r,o)}},{\"../../plot_api/plot_template\":838,\"./axis_defaults\":983}],979:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isArrayOrTypedArray;e.exports\u003dfunction(t){return function t(e,r){if(!n(e)||r\u003e\u003d10)return null;for(var i\u003d1/0,a\u003d-1/0,o\u003de.length,s\u003d0;s\u003co;s++){var l\u003de[s];if(n(l)){var c\u003dt(l,r+1);c\u0026\u0026(i\u003dMath.min(c[0],i),a\u003dMath.max(c[1],a))}else i\u003dMath.min(l,i),a\u003dMath.max(l,a)}return[i,a]}(t,0)}},{\"../../lib\":799}],980:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"./axis_attributes\"),a\u003dt(\"../../components/color/attributes\"),o\u003dn({editType:\"calc\"});o.family.dflt\u003d\u0027\"Open Sans\", verdana, arial, sans-serif\u0027,o.size.dflt\u003d12,o.color.dflt\u003da.defaultLine,e.exports\u003d{carpet:{valType:\"string\",editType:\"calc\"},x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},a:{valType:\"data_array\",editType:\"calc\"},a0:{valType:\"number\",dflt:0,editType:\"calc\"},da:{valType:\"number\",dflt:1,editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},b0:{valType:\"number\",dflt:0,editType:\"calc\"},db:{valType:\"number\",dflt:1,editType:\"calc\"},cheaterslope:{valType:\"number\",dflt:1,editType:\"calc\"},aaxis:i,baxis:i,font:o,color:{valType:\"color\",dflt:a.defaultLine,editType:\"plot\"},transforms:void 0}},{\"../../components/color/attributes\":661,\"../../plots/font_attributes\":878,\"./axis_attributes\":982}],981:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isArrayOrTypedArray;e.exports\u003dfunction(t,e,r,i){var a,o,s,l,c,u,f,h,p,d,m,g,v,y\u003dn(r)?\"a\":\"b\",x\u003d(\"a\"\u003d\u003d\u003dy?t.aaxis:t.baxis).smoothing,b\u003d\"a\"\u003d\u003d\u003dy?t.a2i:t.b2j,_\u003d\"a\"\u003d\u003d\u003dy?r:i,w\u003d\"a\"\u003d\u003d\u003dy?i:r,T\u003d\"a\"\u003d\u003d\u003dy?e.a.length:e.b.length,k\u003d\"a\"\u003d\u003d\u003dy?e.b.length:e.a.length,M\u003dMath.floor(\"a\"\u003d\u003d\u003dy?t.b2j(w):t.a2i(w)),A\u003d\"a\"\u003d\u003d\u003dy?function(e){return t.evalxy([],e,M)}:function(e){return t.evalxy([],M,e)};x\u0026\u0026(s\u003dMath.max(0,Math.min(k-2,M)),l\u003dM-s,o\u003d\"a\"\u003d\u003d\u003dy?function(e,r){return t.dxydi([],e,s,r,l)}:function(e,r){return t.dxydj([],s,e,l,r)});var S\u003db(_[0]),E\u003db(_[1]),L\u003dS\u003cE?1:-1,C\u003d1e-8*(E-S),P\u003dL\u003e0?Math.floor:Math.ceil,I\u003dL\u003e0?Math.ceil:Math.floor,O\u003dL\u003e0?Math.min:Math.max,z\u003dL\u003e0?Math.max:Math.min,D\u003dP(S+C),R\u003dI(E-C),F\u003d[[f\u003dA(S)]];for(a\u003dD;a*L\u003cR*L;a+\u003dL)c\u003d[],m\u003dz(S,a),v\u003d(g\u003dO(E,a+L))-m,u\u003dMath.max(0,Math.min(T-2,Math.floor(.5*(m+g)))),h\u003dA(g),x\u0026\u0026(p\u003do(u,m-u),d\u003do(u,g-u),c.push([f[0]+p[0]/3*v,f[1]+p[1]/3*v]),c.push([h[0]-d[0]/3*v,h[1]-d[1]/3*v])),c.push(h),F.push(c),f\u003dh;return F}},{\"../../lib\":799}],982:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"../../components/color/attributes\"),a\u003dt(\"../../plots/cartesian/layout_attributes\"),o\u003dt(\"../../plots/cartesian/axis_format_attributes\").descriptionWithDates,s\u003dt(\"../../plot_api/edit_types\").overrideAll;e.exports\u003d{color:{valType:\"color\",editType:\"calc\"},smoothing:{valType:\"number\",dflt:1,min:0,max:1.3,editType:\"calc\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"calc\"},font:n({editType:\"calc\"}),offset:{valType:\"number\",dflt:10,editType:\"calc\"},editType:\"calc\"},type:{valType:\"enumerated\",values:[\"-\",\"linear\",\"date\",\"category\"],dflt:\"-\",editType:\"calc\"},autotypenumbers:a.autotypenumbers,autorange:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],dflt:!0,editType:\"calc\"},rangemode:{valType:\"enumerated\",values:[\"normal\",\"tozero\",\"nonnegative\"],dflt:\"normal\",editType:\"calc\"},range:{valType:\"info_array\",editType:\"calc\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}]},fixedrange:{valType:\"boolean\",dflt:!1,editType:\"calc\"},cheatertype:{valType:\"enumerated\",values:[\"index\",\"value\"],dflt:\"value\",editType:\"calc\"},tickmode:{valType:\"enumerated\",values:[\"linear\",\"array\"],dflt:\"array\",editType:\"calc\"},nticks:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},tickvals:{valType:\"data_array\",editType:\"calc\"},ticktext:{valType:\"data_array\",editType:\"calc\"},showticklabels:{valType:\"enumerated\",values:[\"start\",\"end\",\"both\",\"none\"],dflt:\"start\",editType:\"calc\"},tickfont:n({editType:\"calc\"}),tickangle:{valType:\"angle\",dflt:\"auto\",editType:\"calc\"},tickprefix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showtickprefix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},ticksuffix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showticksuffix:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},showexponent:{valType:\"enumerated\",values:[\"all\",\"first\",\"last\",\"none\"],dflt:\"all\",editType:\"calc\"},exponentformat:{valType:\"enumerated\",values:[\"none\",\"e\",\"E\",\"power\",\"SI\",\"B\"],dflt:\"B\",editType:\"calc\"},minexponent:{valType:\"number\",dflt:3,min:0,editType:\"calc\"},separatethousands:{valType:\"boolean\",dflt:!1,editType:\"calc\"},tickformat:{valType:\"string\",dflt:\"\",editType:\"calc\",description:o(\"tick label\")},tickformatstops:s(a.tickformatstops,\"calc\",\"from-root\"),categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},labelpadding:{valType:\"integer\",dflt:10,editType:\"calc\"},labelprefix:{valType:\"string\",editType:\"calc\"},labelsuffix:{valType:\"string\",dflt:\"\",editType:\"calc\"},showline:{valType:\"boolean\",dflt:!1,editType:\"calc\"},linecolor:{valType:\"color\",dflt:i.defaultLine,editType:\"calc\"},linewidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},gridcolor:{valType:\"color\",editType:\"calc\"},gridwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},showgrid:{valType:\"boolean\",dflt:!0,editType:\"calc\"},minorgridcount:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},minorgridwidth:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},minorgridcolor:{valType:\"color\",dflt:i.lightLine,editType:\"calc\"},startline:{valType:\"boolean\",editType:\"calc\"},startlinecolor:{valType:\"color\",editType:\"calc\"},startlinewidth:{valType:\"number\",dflt:1,editType:\"calc\"},endline:{valType:\"boolean\",editType:\"calc\"},endlinewidth:{valType:\"number\",dflt:1,editType:\"calc\"},endlinecolor:{valType:\"color\",editType:\"calc\"},tick0:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},dtick:{valType:\"number\",min:0,dflt:1,editType:\"calc\"},arraytick0:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},arraydtick:{valType:\"integer\",min:1,dflt:1,editType:\"calc\"},_deprecated:{title:{valType:\"string\",editType:\"calc\"},titlefont:n({editType:\"calc\"}),titleoffset:{valType:\"number\",dflt:10,editType:\"calc\"}},editType:\"calc\"}},{\"../../components/color/attributes\":661,\"../../plot_api/edit_types\":831,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/cartesian/layout_attributes\":864,\"../../plots/font_attributes\":878}],983:[function(t,e,r){\"use strict\";var n\u003dt(\"./attributes\"),i\u003dt(\"../../components/color\").addOpacity,a\u003dt(\"../../registry\"),o\u003dt(\"../../lib\"),s\u003dt(\"../../plots/cartesian/tick_value_defaults\"),l\u003dt(\"../../plots/cartesian/tick_label_defaults\"),c\u003dt(\"../../plots/cartesian/category_order_defaults\"),u\u003dt(\"../../plots/cartesian/set_convert\"),f\u003dt(\"../../plots/cartesian/axis_autotype\");e.exports\u003dfunction(t,e,r){var h\u003dr.letter,p\u003dr.font||{},d\u003dn[h+\"axis\"];function m(r,n){return o.coerce(t,e,d,r,n)}function g(r,n){return o.coerce2(t,e,d,r,n)}r.name\u0026\u0026(e._name\u003dr.name,e._id\u003dr.name),m(\"autotypenumbers\",r.autotypenumbersDflt);var v\u003dm(\"type\");(\"-\"\u003d\u003d\u003dv\u0026\u0026(r.data\u0026\u0026function(t,e){if(\"-\"!\u003d\u003dt.type)return;var r\u003dt._id.charAt(0),n\u003dt[r+\"calendar\"];t.type\u003df(e,n,{autotypenumbers:t.autotypenumbers})}(e,r.data),\"-\"\u003d\u003d\u003de.type?e.type\u003d\"linear\":v\u003dt.type\u003de.type),m(\"smoothing\"),m(\"cheatertype\"),m(\"showticklabels\"),m(\"labelprefix\",h+\" \u003d \"),m(\"labelsuffix\"),m(\"showtickprefix\"),m(\"showticksuffix\"),m(\"separatethousands\"),m(\"tickformat\"),m(\"exponentformat\"),m(\"minexponent\"),m(\"showexponent\"),m(\"categoryorder\"),m(\"tickmode\"),m(\"tickvals\"),m(\"ticktext\"),m(\"tick0\"),m(\"dtick\"),\"array\"\u003d\u003d\u003de.tickmode\u0026\u0026(m(\"arraytick0\"),m(\"arraydtick\")),m(\"labelpadding\"),e._hovertitle\u003dh,\"date\"\u003d\u003d\u003dv)\u0026\u0026a.getComponentMethod(\"calendars\",\"handleDefaults\")(t,e,\"calendar\",r.calendar);u(e,r.fullLayout),e.c2p\u003do.identity;var y\u003dm(\"color\",r.dfltColor),x\u003dy\u003d\u003d\u003dt.color?y:p.color;m(\"title.text\")\u0026\u0026(o.coerceFont(m,\"title.font\",{family:p.family,size:o.bigFont(p.size),color:x}),m(\"title.offset\")),m(\"tickangle\"),m(\"autorange\",!e.isValidRange(t.range))\u0026\u0026m(\"rangemode\"),m(\"range\"),e.cleanRange(),m(\"fixedrange\"),s(t,e,m,v),l(t,e,m,v,r),c(t,e,m,{data:r.data,dataAttr:h});var b\u003dg(\"gridcolor\",i(y,.3)),_\u003dg(\"gridwidth\"),w\u003dm(\"showgrid\");w||(delete e.gridcolor,delete e.gridwidth);var T\u003dg(\"startlinecolor\",y),k\u003dg(\"startlinewidth\",_);m(\"startline\",e.showgrid||!!T||!!k)||(delete e.startlinecolor,delete e.startlinewidth);var M\u003dg(\"endlinecolor\",y),A\u003dg(\"endlinewidth\",_);return m(\"endline\",e.showgrid||!!M||!!A)||(delete e.endlinecolor,delete e.endlinewidth),w?(m(\"minorgridcount\"),m(\"minorgridwidth\",_),m(\"minorgridcolor\",i(b,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridWidth),\"none\"\u003d\u003d\u003de.showticklabels\u0026\u0026(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.minexponent,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,m(\"tickmode\"),e}},{\"../../components/color\":662,\"../../lib\":799,\"../../plots/cartesian/axis_autotype\":850,\"../../plots/cartesian/category_order_defaults\":854,\"../../plots/cartesian/set_convert\":870,\"../../plots/cartesian/tick_label_defaults\":871,\"../../plots/cartesian/tick_value_defaults\":873,\"../../registry\":927,\"./attributes\":980}],984:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../lib\").isArray1D,a\u003dt(\"./cheater_basis\"),o\u003dt(\"./array_minmax\"),s\u003dt(\"./calc_gridlines\"),l\u003dt(\"./calc_labels\"),c\u003dt(\"./calc_clippath\"),u\u003dt(\"../heatmap/clean_2d_array\"),f\u003dt(\"./smooth_fill_2d_array\"),h\u003dt(\"../heatmap/convert_column_xyz\"),p\u003dt(\"./set_convert\");e.exports\u003dfunction(t,e){var r\u003dn.getFromId(t,e.xaxis),d\u003dn.getFromId(t,e.yaxis),m\u003de.aaxis,g\u003de.baxis,v\u003de.x,y\u003de.y,x\u003d[];v\u0026\u0026i(v)\u0026\u0026x.push(\"x\"),y\u0026\u0026i(y)\u0026\u0026x.push(\"y\"),x.length\u0026\u0026h(e,m,g,\"a\",\"b\",x);var b\u003de._a\u003de._a||e.a,_\u003de._b\u003de._b||e.b;v\u003de._x||e.x,y\u003de._y||e.y;var w\u003d{};if(e._cheater){var T\u003d\"index\"\u003d\u003d\u003dm.cheatertype?b.length:b,k\u003d\"index\"\u003d\u003d\u003dg.cheatertype?_.length:_;v\u003da(T,k,e.cheaterslope)}e._x\u003dv\u003du(v),e._y\u003dy\u003du(y),f(v,b,_),f(y,b,_),p(e),e.setScale();var M\u003do(v),A\u003do(y),S\u003d.5*(M[1]-M[0]),E\u003d.5*(M[1]+M[0]),L\u003d.5*(A[1]-A[0]),C\u003d.5*(A[1]+A[0]);return M\u003d[E-1.3*S,E+1.3*S],A\u003d[C-1.3*L,C+1.3*L],e._extremes[r._id]\u003dn.findExtremes(r,M,{padded:!0}),e._extremes[d._id]\u003dn.findExtremes(d,A,{padded:!0}),s(e,\"a\",\"b\"),s(e,\"b\",\"a\"),l(e,m),l(e,g),w.clipsegments\u003dc(e._xctrl,e._yctrl,m,g),w.x\u003dv,w.y\u003dy,w.a\u003db,w.b\u003d_,[w]}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../heatmap/clean_2d_array\":1083,\"../heatmap/convert_column_xyz\":1085,\"./array_minmax\":979,\"./calc_clippath\":985,\"./calc_gridlines\":986,\"./calc_labels\":987,\"./cheater_basis\":989,\"./set_convert\":1002,\"./smooth_fill_2d_array\":1003}],985:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n){var i,a,o,s\u003d[],l\u003d!!r.smoothing,c\u003d!!n.smoothing,u\u003dt[0].length-1,f\u003dt.length-1;for(i\u003d0,a\u003d[],o\u003d[];i\u003c\u003du;i++)a[i]\u003dt[0][i],o[i]\u003de[0][i];for(s.push({x:a,y:o,bicubic:l}),i\u003d0,a\u003d[],o\u003d[];i\u003c\u003df;i++)a[i]\u003dt[i][u],o[i]\u003de[i][u];for(s.push({x:a,y:o,bicubic:c}),i\u003du,a\u003d[],o\u003d[];i\u003e\u003d0;i--)a[u-i]\u003dt[f][i],o[u-i]\u003de[f][i];for(s.push({x:a,y:o,bicubic:l}),i\u003df,a\u003d[],o\u003d[];i\u003e\u003d0;i--)a[f-i]\u003dt[i][0],o[f-i]\u003de[i][0];return s.push({x:a,y:o,bicubic:c}),s}},{}],986:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003dfunction(t,e,r){var a,o,s,l,c,u,f,h,p,d,m,g,v,y,x\u003dt[\"_\"+e],b\u003dt[e+\"axis\"],_\u003db._gridlines\u003d[],w\u003db._minorgridlines\u003d[],T\u003db._boundarylines\u003d[],k\u003dt[\"_\"+r],M\u003dt[r+\"axis\"];\"array\"\u003d\u003d\u003db.tickmode\u0026\u0026(b.tickvals\u003dx.slice());var A\u003dt._xctrl,S\u003dt._yctrl,E\u003dA[0].length,L\u003dA.length,C\u003dt._a.length,P\u003dt._b.length;n.prepTicks(b),\"array\"\u003d\u003d\u003db.tickmode\u0026\u0026delete b.tickvals;var I\u003db.smoothing?3:1;function O(n){var i,a,o,s,l,c,u,f,p,d,m,g,v\u003d[],y\u003d[],x\u003d{};if(\"b\"\u003d\u003d\u003de)for(a\u003dt.b2j(n),o\u003dMath.floor(Math.max(0,Math.min(P-2,a))),s\u003da-o,x.length\u003dP,x.crossLength\u003dC,x.xy\u003dfunction(e){return t.evalxy([],e,a)},x.dxy\u003dfunction(e,r){return t.dxydi([],e,o,r,s)},i\u003d0;i\u003cC;i++)c\u003dMath.min(C-2,i),u\u003di-c,f\u003dt.evalxy([],i,a),M.smoothing\u0026\u0026i\u003e0\u0026\u0026(p\u003dt.dxydi([],i-1,o,0,s),v.push(l[0]+p[0]/3),y.push(l[1]+p[1]/3),d\u003dt.dxydi([],i-1,o,1,s),v.push(f[0]-d[0]/3),y.push(f[1]-d[1]/3)),v.push(f[0]),y.push(f[1]),l\u003df;else for(i\u003dt.a2i(n),c\u003dMath.floor(Math.max(0,Math.min(C-2,i))),u\u003di-c,x.length\u003dC,x.crossLength\u003dP,x.xy\u003dfunction(e){return t.evalxy([],i,e)},x.dxy\u003dfunction(e,r){return t.dxydj([],c,e,u,r)},a\u003d0;a\u003cP;a++)o\u003dMath.min(P-2,a),s\u003da-o,f\u003dt.evalxy([],i,a),M.smoothing\u0026\u0026a\u003e0\u0026\u0026(m\u003dt.dxydj([],c,a-1,u,0),v.push(l[0]+m[0]/3),y.push(l[1]+m[1]/3),g\u003dt.dxydj([],c,a-1,u,1),v.push(f[0]-g[0]/3),y.push(f[1]-g[1]/3)),v.push(f[0]),y.push(f[1]),l\u003df;return x.axisLetter\u003de,x.axis\u003db,x.crossAxis\u003dM,x.value\u003dn,x.constvar\u003dr,x.index\u003dh,x.x\u003dv,x.y\u003dy,x.smoothing\u003dM.smoothing,x}function z(n){var i,a,o,s,l,c\u003d[],u\u003d[],f\u003d{};if(f.length\u003dx.length,f.crossLength\u003dk.length,\"b\"\u003d\u003d\u003de)for(o\u003dMath.max(0,Math.min(P-2,n)),l\u003dMath.min(1,Math.max(0,n-o)),f.xy\u003dfunction(e){return t.evalxy([],e,n)},f.dxy\u003dfunction(e,r){return t.dxydi([],e,o,r,l)},i\u003d0;i\u003cE;i++)c[i]\u003dA[n*I][i],u[i]\u003dS[n*I][i];else for(a\u003dMath.max(0,Math.min(C-2,n)),s\u003dMath.min(1,Math.max(0,n-a)),f.xy\u003dfunction(e){return t.evalxy([],n,e)},f.dxy\u003dfunction(e,r){return t.dxydj([],a,e,s,r)},i\u003d0;i\u003cL;i++)c[i]\u003dA[i][n*I],u[i]\u003dS[i][n*I];return f.axisLetter\u003de,f.axis\u003db,f.crossAxis\u003dM,f.value\u003dx[n],f.constvar\u003dr,f.index\u003dn,f.x\u003dc,f.y\u003du,f.smoothing\u003dM.smoothing,f}if(\"array\"\u003d\u003d\u003db.tickmode){for(l\u003d5e-15,u\u003d(c\u003d[Math.floor((x.length-1-b.arraytick0)/b.arraydtick*(1+l)),Math.ceil(-b.arraytick0/b.arraydtick/(1+l))].sort((function(t,e){return t-e})))[0]-1,f\u003dc[1]+1,h\u003du;h\u003cf;h++)(o\u003db.arraytick0+b.arraydtick*h)\u003c0||o\u003ex.length-1||_.push(i(z(o),{color:b.gridcolor,width:b.gridwidth}));for(h\u003du;h\u003cf;h++)if(s\u003db.arraytick0+b.arraydtick*h,m\u003dMath.min(s+b.arraydtick,x.length-1),!(s\u003c0||s\u003ex.length-1||m\u003c0||m\u003ex.length-1))for(g\u003dx[s],v\u003dx[m],a\u003d0;a\u003cb.minorgridcount;a++)(y\u003dm-s)\u003c\u003d0||(d\u003dg+(v-g)*(a+1)/(b.minorgridcount+1)*(b.arraydtick/y))\u003cx[0]||d\u003ex[x.length-1]||w.push(i(O(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline\u0026\u0026T.push(i(z(0),{color:b.startlinecolor,width:b.startlinewidth})),b.endline\u0026\u0026T.push(i(z(x.length-1),{color:b.endlinecolor,width:b.endlinewidth}))}else{for(l\u003d5e-15,u\u003d(c\u003d[Math.floor((x[x.length-1]-b.tick0)/b.dtick*(1+l)),Math.ceil((x[0]-b.tick0)/b.dtick/(1+l))].sort((function(t,e){return t-e})))[0],f\u003dc[1],h\u003du;h\u003c\u003df;h++)p\u003db.tick0+b.dtick*h,_.push(i(O(p),{color:b.gridcolor,width:b.gridwidth}));for(h\u003du-1;h\u003cf+1;h++)for(p\u003db.tick0+b.dtick*h,a\u003d0;a\u003cb.minorgridcount;a++)(d\u003dp+b.dtick*(a+1)/(b.minorgridcount+1))\u003cx[0]||d\u003ex[x.length-1]||w.push(i(O(d),{color:b.minorgridcolor,width:b.minorgridwidth}));b.startline\u0026\u0026T.push(i(O(x[0]),{color:b.startlinecolor,width:b.startlinewidth})),b.endline\u0026\u0026T.push(i(O(x[x.length-1]),{color:b.endlinecolor,width:b.endlinewidth}))}}},{\"../../lib/extend\":789,\"../../plots/cartesian/axes\":849}],987:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003dfunction(t,e){var r,a,o,s\u003de._labels\u003d[],l\u003de._gridlines;for(r\u003d0;r\u003cl.length;r++)o\u003dl[r],-1!\u003d\u003d[\"start\",\"both\"].indexOf(e.showticklabels)\u0026\u0026(a\u003dn.tickText(e,o.value),i(a,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0\u003d\u003d\u003dr,isLast:r\u003d\u003d\u003dl.length-1}),s.push(a)),-1!\u003d\u003d[\"end\",\"both\"].indexOf(e.showticklabels)\u0026\u0026(a\u003dn.tickText(e,o.value),i(a,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0\u003d\u003d\u003dr,isLast:r\u003d\u003d\u003dl.length-1}),s.push(a))}},{\"../../lib/extend\":789,\"../../plots/cartesian/axes\":849}],988:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n){var i\u003dt[0]-e[0],a\u003dt[1]-e[1],o\u003dr[0]-e[0],s\u003dr[1]-e[1],l\u003dMath.pow(i*i+a*a,.25),c\u003dMath.pow(o*o+s*s,.25),u\u003d(c*c*i-l*l*o)*n,f\u003d(c*c*a-l*l*s)*n,h\u003dc*(l+c)*3,p\u003dl*(l+c)*3;return[[e[0]+(h\u0026\u0026u/h),e[1]+(h\u0026\u0026f/h)],[e[0]-(p\u0026\u0026u/p),e[1]-(p\u0026\u0026f/p)]]}},{}],989:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isArrayOrTypedArray;e.exports\u003dfunction(t,e,r){var i,a,o,s,l,c,u\u003d[],f\u003dn(t)?t.length:t,h\u003dn(e)?e.length:e,p\u003dn(t)?t:null,d\u003dn(e)?e:null;p\u0026\u0026(o\u003d(p.length-1)/(p[p.length-1]-p[0])/(f-1)),d\u0026\u0026(s\u003d(d.length-1)/(d[d.length-1]-d[0])/(h-1));var m\u003d1/0,g\u003d-1/0;for(a\u003d0;a\u003ch;a++)for(u[a]\u003d[],l\u003dd?(d[a]-d[0])*s:a/(h-1),i\u003d0;i\u003cf;i++)c\u003d(p?(p[i]-p[0])*o:i/(f-1))-l*r,m\u003dMath.min(c,m),g\u003dMath.max(c,g),u[a][i]\u003dc;var v\u003d1/(g-m),y\u003d-m*v;for(a\u003d0;a\u003ch;a++)for(i\u003d0;i\u003cf;i++)u[a][i]\u003dv*u[a][i]+y;return u}},{\"../../lib\":799}],990:[function(t,e,r){\"use strict\";var n\u003dt(\"./catmull_rom\"),i\u003dt(\"../../lib\").ensureArray;function a(t,e,r){var n\u003d-.5*r[0]+1.5*e[0],i\u003d-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*i+t[1])/3]}e.exports\u003dfunction(t,e,r,o,s,l){var c,u,f,h,p,d,m,g,v,y,x\u003dr[0].length,b\u003dr.length,_\u003ds?3*x-2:x,w\u003dl?3*b-2:b;for(t\u003di(t,w),e\u003di(e,w),f\u003d0;f\u003cw;f++)t[f]\u003di(t[f],_),e[f]\u003di(e[f],_);for(u\u003d0,h\u003d0;u\u003cb;u++,h+\u003dl?3:1)for(p\u003dt[h],d\u003de[h],m\u003dr[u],g\u003do[u],c\u003d0,f\u003d0;c\u003cx;c++,f+\u003ds?3:1)p[f]\u003dm[c],d[f]\u003dg[c];if(s)for(u\u003d0,h\u003d0;u\u003cb;u++,h+\u003dl?3:1){for(c\u003d1,f\u003d3;c\u003cx-1;c++,f+\u003d3)v\u003dn([r[u][c-1],o[u][c-1]],[r[u][c],o[u][c]],[r[u][c+1],o[u][c+1]],s),t[h][f-1]\u003dv[0][0],e[h][f-1]\u003dv[0][1],t[h][f+1]\u003dv[1][0],e[h][f+1]\u003dv[1][1];y\u003da([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]\u003dy[0],e[h][1]\u003dy[1],y\u003da([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]\u003dy[0],e[h][_-2]\u003dy[1]}if(l)for(f\u003d0;f\u003c_;f++){for(h\u003d3;h\u003cw-3;h+\u003d3)v\u003dn([t[h-3][f],e[h-3][f]],[t[h][f],e[h][f]],[t[h+3][f],e[h+3][f]],l),t[h-1][f]\u003dv[0][0],e[h-1][f]\u003dv[0][1],t[h+1][f]\u003dv[1][0],e[h+1][f]\u003dv[1][1];y\u003da([t[0][f],e[0][f]],[t[2][f],e[2][f]],[t[3][f],e[3][f]]),t[1][f]\u003dy[0],e[1][f]\u003dy[1],y\u003da([t[w-1][f],e[w-1][f]],[t[w-3][f],e[w-3][f]],[t[w-4][f],e[w-4][f]]),t[w-2][f]\u003dy[0],e[w-2][f]\u003dy[1]}if(s\u0026\u0026l)for(h\u003d1;h\u003cw;h+\u003d(h+1)%3\u003d\u003d0?2:1){for(f\u003d3;f\u003c_-3;f+\u003d3)v\u003dn([t[h][f-3],e[h][f-3]],[t[h][f],e[h][f]],[t[h][f+3],e[h][f+3]],s),t[h][f-1]\u003d.5*(t[h][f-1]+v[0][0]),e[h][f-1]\u003d.5*(e[h][f-1]+v[0][1]),t[h][f+1]\u003d.5*(t[h][f+1]+v[1][0]),e[h][f+1]\u003d.5*(e[h][f+1]+v[1][1]);y\u003da([t[h][0],e[h][0]],[t[h][2],e[h][2]],[t[h][3],e[h][3]]),t[h][1]\u003d.5*(t[h][1]+y[0]),e[h][1]\u003d.5*(e[h][1]+y[1]),y\u003da([t[h][_-1],e[h][_-1]],[t[h][_-3],e[h][_-3]],[t[h][_-4],e[h][_-4]]),t[h][_-2]\u003d.5*(t[h][_-2]+y[0]),e[h][_-2]\u003d.5*(e[h][_-2]+y[1])}return[t,e]}},{\"../../lib\":799,\"./catmull_rom\":988}],991:[function(t,e,r){\"use strict\";e.exports\u003d{RELATIVE_CULL_TOLERANCE:1e-6}},{}],992:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){return e\u0026\u0026r?function(e,r,n,i,a){var o,s,l,c,u,f;e||(e\u003d[]),r*\u003d3,n*\u003d3;var h\u003di*i,p\u003d1-i,d\u003dp*p,m\u003dp*i*2,g\u003d-3*d,v\u003d3*(d-m),y\u003d3*(m-h),x\u003d3*h,b\u003da*a,_\u003db*a,w\u003d1-a,T\u003dw*w,k\u003dT*w;for(f\u003d0;f\u003ct.length;f++)o\u003dg*(u\u003dt[f])[n][r]+v*u[n][r+1]+y*u[n][r+2]+x*u[n][r+3],s\u003dg*u[n+1][r]+v*u[n+1][r+1]+y*u[n+1][r+2]+x*u[n+1][r+3],l\u003dg*u[n+2][r]+v*u[n+2][r+1]+y*u[n+2][r+2]+x*u[n+2][r+3],c\u003dg*u[n+3][r]+v*u[n+3][r+1]+y*u[n+3][r+2]+x*u[n+3][r+3],e[f]\u003dk*o+3*(T*a*s+w*b*l)+_*c;return e}:e?function(e,r,n,i,a){var o,s,l,c;e||(e\u003d[]),r*\u003d3;var u\u003di*i,f\u003d1-i,h\u003df*f,p\u003df*i*2,d\u003d-3*h,m\u003d3*(h-p),g\u003d3*(p-u),v\u003d3*u,y\u003d1-a;for(l\u003d0;l\u003ct.length;l++)o\u003dd*(c\u003dt[l])[n][r]+m*c[n][r+1]+g*c[n][r+2]+v*c[n][r+3],s\u003dd*c[n+1][r]+m*c[n+1][r+1]+g*c[n+1][r+2]+v*c[n+1][r+3],e[l]\u003dy*o+a*s;return e}:r?function(e,r,n,i,a){var o,s,l,c,u,f;e||(e\u003d[]),n*\u003d3;var h\u003da*a,p\u003dh*a,d\u003d1-a,m\u003dd*d,g\u003dm*d;for(u\u003d0;u\u003ct.length;u++)o\u003d(f\u003dt[u])[n][r+1]-f[n][r],s\u003df[n+1][r+1]-f[n+1][r],l\u003df[n+2][r+1]-f[n+2][r],c\u003df[n+3][r+1]-f[n+3][r],e[u]\u003dg*o+3*(m*a*s+d*h*l)+p*c;return e}:function(e,r,n,i,a){var o,s,l,c;e||(e\u003d[]);var u\u003d1-a;for(l\u003d0;l\u003ct.length;l++)o\u003d(c\u003dt[l])[n][r+1]-c[n][r],s\u003dc[n+1][r+1]-c[n+1][r],e[l]\u003du*o+a*s;return e}}},{}],993:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){return e\u0026\u0026r?function(e,r,n,i,a){var o,s,l,c,u,f;e||(e\u003d[]),r*\u003d3,n*\u003d3;var h\u003di*i,p\u003dh*i,d\u003d1-i,m\u003dd*d,g\u003dm*d,v\u003da*a,y\u003d1-a,x\u003dy*y,b\u003dy*a*2,_\u003d-3*x,w\u003d3*(x-b),T\u003d3*(b-v),k\u003d3*v;for(f\u003d0;f\u003ct.length;f++)o\u003d_*(u\u003dt[f])[n][r]+w*u[n+1][r]+T*u[n+2][r]+k*u[n+3][r],s\u003d_*u[n][r+1]+w*u[n+1][r+1]+T*u[n+2][r+1]+k*u[n+3][r+1],l\u003d_*u[n][r+2]+w*u[n+1][r+2]+T*u[n+2][r+2]+k*u[n+3][r+2],c\u003d_*u[n][r+3]+w*u[n+1][r+3]+T*u[n+2][r+3]+k*u[n+3][r+3],e[f]\u003dg*o+3*(m*i*s+d*h*l)+p*c;return e}:e?function(e,r,n,i,a){var o,s,l,c,u,f;e||(e\u003d[]),r*\u003d3;var h\u003da*a,p\u003dh*a,d\u003d1-a,m\u003dd*d,g\u003dm*d;for(u\u003d0;u\u003ct.length;u++)o\u003d(f\u003dt[u])[n+1][r]-f[n][r],s\u003df[n+1][r+1]-f[n][r+1],l\u003df[n+1][r+2]-f[n][r+2],c\u003df[n+1][r+3]-f[n][r+3],e[u]\u003dg*o+3*(m*a*s+d*h*l)+p*c;return e}:r?function(e,r,n,i,a){var o,s,l,c;e||(e\u003d[]),n*\u003d3;var u\u003d1-i,f\u003da*a,h\u003d1-a,p\u003dh*h,d\u003dh*a*2,m\u003d-3*p,g\u003d3*(p-d),v\u003d3*(d-f),y\u003d3*f;for(l\u003d0;l\u003ct.length;l++)o\u003dm*(c\u003dt[l])[n][r]+g*c[n+1][r]+v*c[n+2][r]+y*c[n+3][r],s\u003dm*c[n][r+1]+g*c[n+1][r+1]+v*c[n+2][r+1]+y*c[n+3][r+1],e[l]\u003du*o+i*s;return e}:function(e,r,n,i,a){var o,s,l,c;e||(e\u003d[]);var u\u003d1-i;for(l\u003d0;l\u003ct.length;l++)o\u003d(c\u003dt[l])[n+1][r]-c[n][r],s\u003dc[n+1][r+1]-c[n][r+1],e[l]\u003du*o+i*s;return e}}},{}],994:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i){var a\u003de-2,o\u003dr-2;return n\u0026\u0026i?function(e,r,n){var i,s,l,c,u,f;e||(e\u003d[]);var h\u003dMath.max(0,Math.min(Math.floor(r),a)),p\u003dMath.max(0,Math.min(Math.floor(n),o)),d\u003dMath.max(0,Math.min(1,r-h)),m\u003dMath.max(0,Math.min(1,n-p));h*\u003d3,p*\u003d3;var g\u003dd*d,v\u003dg*d,y\u003d1-d,x\u003dy*y,b\u003dx*y,_\u003dm*m,w\u003d_*m,T\u003d1-m,k\u003dT*T,M\u003dk*T;for(f\u003d0;f\u003ct.length;f++)i\u003db*(u\u003dt[f])[p][h]+3*(x*d*u[p][h+1]+y*g*u[p][h+2])+v*u[p][h+3],s\u003db*u[p+1][h]+3*(x*d*u[p+1][h+1]+y*g*u[p+1][h+2])+v*u[p+1][h+3],l\u003db*u[p+2][h]+3*(x*d*u[p+2][h+1]+y*g*u[p+2][h+2])+v*u[p+2][h+3],c\u003db*u[p+3][h]+3*(x*d*u[p+3][h+1]+y*g*u[p+3][h+2])+v*u[p+3][h+3],e[f]\u003dM*i+3*(k*m*s+T*_*l)+w*c;return e}:n?function(e,r,n){e||(e\u003d[]);var i,s,l,c,u,f,h\u003dMath.max(0,Math.min(Math.floor(r),a)),p\u003dMath.max(0,Math.min(Math.floor(n),o)),d\u003dMath.max(0,Math.min(1,r-h)),m\u003dMath.max(0,Math.min(1,n-p));h*\u003d3;var g\u003dd*d,v\u003dg*d,y\u003d1-d,x\u003dy*y,b\u003dx*y,_\u003d1-m;for(u\u003d0;u\u003ct.length;u++)i\u003d_*(f\u003dt[u])[p][h]+m*f[p+1][h],s\u003d_*f[p][h+1]+m*f[p+1][h+1],l\u003d_*f[p][h+2]+m*f[p+1][h+1],c\u003d_*f[p][h+3]+m*f[p+1][h+1],e[u]\u003db*i+3*(x*d*s+y*g*l)+v*c;return e}:i?function(e,r,n){e||(e\u003d[]);var i,s,l,c,u,f,h\u003dMath.max(0,Math.min(Math.floor(r),a)),p\u003dMath.max(0,Math.min(Math.floor(n),o)),d\u003dMath.max(0,Math.min(1,r-h)),m\u003dMath.max(0,Math.min(1,n-p));p*\u003d3;var g\u003dm*m,v\u003dg*m,y\u003d1-m,x\u003dy*y,b\u003dx*y,_\u003d1-d;for(u\u003d0;u\u003ct.length;u++)i\u003d_*(f\u003dt[u])[p][h]+d*f[p][h+1],s\u003d_*f[p+1][h]+d*f[p+1][h+1],l\u003d_*f[p+2][h]+d*f[p+2][h+1],c\u003d_*f[p+3][h]+d*f[p+3][h+1],e[u]\u003db*i+3*(x*m*s+y*g*l)+v*c;return e}:function(e,r,n){e||(e\u003d[]);var i,s,l,c,u\u003dMath.max(0,Math.min(Math.floor(r),a)),f\u003dMath.max(0,Math.min(Math.floor(n),o)),h\u003dMath.max(0,Math.min(1,r-u)),p\u003dMath.max(0,Math.min(1,n-f)),d\u003d1-p,m\u003d1-h;for(l\u003d0;l\u003ct.length;l++)i\u003dm*(c\u003dt[l])[f][u]+h*c[f][u+1],s\u003dm*c[f+1][u]+h*c[f+1][u+1],e[l]\u003dd*i+p*s;return e}}},{}],995:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./xy_defaults\"),a\u003dt(\"./ab_defaults\"),o\u003dt(\"./attributes\"),s\u003dt(\"../../components/color/attributes\");e.exports\u003dfunction(t,e,r,l){function c(r,i){return n.coerce(t,e,o,r,i)}e._clipPathId\u003d\"clip\"+e.uid+\"carpet\";var u\u003dc(\"color\",s.defaultLine);(n.coerceFont(c,\"font\"),c(\"carpet\"),a(t,e,l,c,u),e.a\u0026\u0026e.b)?(e.a.length\u003c3\u0026\u0026(e.aaxis.smoothing\u003d0),e.b.length\u003c3\u0026\u0026(e.baxis.smoothing\u003d0),i(t,e,c)||(e.visible\u003d!1),e._cheater\u0026\u0026c(\"cheaterslope\")):e.visible\u003d!1}},{\"../../components/color/attributes\":661,\"../../lib\":799,\"./ab_defaults\":978,\"./attributes\":980,\"./xy_defaults\":1004}],996:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),plot:t(\"./plot\"),calc:t(\"./calc\"),animatable:!0,isContainer:!0,moduleType:\"trace\",name:\"carpet\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"carpet\",\"carpetAxis\",\"notLegendIsolatable\",\"noMultiCategory\",\"noHover\",\"noSortingByValue\"],meta:{}}},{\"../../plots/cartesian\":863,\"./attributes\":980,\"./calc\":984,\"./defaults\":995,\"./plot\":1001}],997:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){for(var r,n\u003dt._fullData.length,i\u003d0;i\u003cn;i++){var a\u003dt._fullData[i];if(a.index!\u003d\u003de.index\u0026\u0026(\"carpet\"\u003d\u003d\u003da.type\u0026\u0026(r||(r\u003da),a.carpet\u003d\u003d\u003de.carpet)))return a}return r}},{}],998:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){if(0\u003d\u003d\u003dt.length)return\"\";var n,i\u003d[],a\u003dr?3:1;for(n\u003d0;n\u003ct.length;n+\u003da)i.push(t[n]+\",\"+e[n]),r\u0026\u0026n\u003ct.length-a\u0026\u0026(i.push(\"C\"),i.push([t[n+1]+\",\"+e[n+1],t[n+2]+\",\"+e[n+2]+\" \"].join(\" \")));return i.join(r?\"\":\"L\")}},{}],999:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isArrayOrTypedArray;e.exports\u003dfunction(t,e,r){var i;for(n(t)?t.length\u003ee.length\u0026\u0026(t\u003dt.slice(0,e.length)):t\u003d[],i\u003d0;i\u003ce.length;i++)t[i]\u003dr(e[i]);return t}},{\"../../lib\":799}],1e3:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i,a){var o\u003di[0]*t.dpdx(e),s\u003di[1]*t.dpdy(r),l\u003d1,c\u003d1;if(a){var u\u003dMath.sqrt(i[0]*i[0]+i[1]*i[1]),f\u003dMath.sqrt(a[0]*a[0]+a[1]*a[1]),h\u003d(i[0]*a[0]+i[1]*a[1])/u/f;c\u003dMath.max(0,h)}var p\u003d180*Math.atan2(s,o)/Math.PI;return p\u003c-90?(p+\u003d180,l\u003d-l):p\u003e90\u0026\u0026(p-\u003d180,l\u003d-l),{angle:p,flip:l,p:t.c2p(n,e,r),offsetMultplier:c}}},{}],1001:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"./map_1d_array\"),o\u003dt(\"./makepath\"),s\u003dt(\"./orient_text\"),l\u003dt(\"../../lib/svg_text_utils\"),c\u003dt(\"../../lib\"),u\u003dc.strRotate,f\u003dc.strTranslate,h\u003dt(\"../../constants/alignment\");function p(t,e,r,i,s,l){var c\u003d\"const-\"+s+\"-lines\",u\u003dr.selectAll(\".\"+c).data(l);u.enter().append(\"path\").classed(c,!0).style(\"vector-effect\",\"non-scaling-stroke\"),u.each((function(r){var i\u003dr,s\u003di.x,l\u003di.y,c\u003da([],s,t.c2p),u\u003da([],l,e.c2p),f\u003d\"M\"+o(c,u,i.smoothing);n.select(this).attr(\"d\",f).style(\"stroke-width\",i.width).style(\"stroke\",i.color).style(\"fill\",\"none\")})),u.exit().remove()}function d(t,e,r,a,o,c,h,p){var d\u003dc.selectAll(\"text.\"+p).data(h);d.enter().append(\"text\").classed(p,!0);var m\u003d0,g\u003d{};return d.each((function(o,c){var h;if(\"auto\"\u003d\u003d\u003do.axis.tickangle)h\u003ds(a,e,r,o.xy,o.dxy);else{var p\u003d(o.axis.tickangle+180)*Math.PI/180;h\u003ds(a,e,r,o.xy,[Math.cos(p),Math.sin(p)])}c||(g\u003d{angle:h.angle,flip:h.flip});var d\u003d(o.endAnchor?-1:1)*h.flip,v\u003dn.select(this).attr({\"text-anchor\":d\u003e0?\"start\":\"end\",\"data-notex\":1}).call(i.font,o.font).text(o.text).call(l.convertToTspans,t),y\u003di.bBox(this);v.attr(\"transform\",f(h.p[0],h.p[1])+u(h.angle)+f(o.axis.labelpadding*d,.3*y.height)),m\u003dMath.max(m,y.width+o.axis.labelpadding)})),d.exit().remove(),g.maxExtent\u003dm,g}e.exports\u003dfunction(t,e,r,i){var l\u003de.xaxis,u\u003de.yaxis,f\u003dt._fullLayout._clips;c.makeTraceGroups(i,r,\"trace\").each((function(e){var r\u003dn.select(this),i\u003de[0],h\u003di.trace,m\u003dh.aaxis,g\u003dh.baxis,y\u003dc.ensureSingle(r,\"g\",\"minorlayer\"),x\u003dc.ensureSingle(r,\"g\",\"majorlayer\"),b\u003dc.ensureSingle(r,\"g\",\"boundarylayer\"),_\u003dc.ensureSingle(r,\"g\",\"labellayer\");r.style(\"opacity\",h.opacity),p(l,u,x,m,\"a\",m._gridlines),p(l,u,x,g,\"b\",g._gridlines),p(l,u,y,m,\"a\",m._minorgridlines),p(l,u,y,g,\"b\",g._minorgridlines),p(l,u,b,m,\"a-boundary\",m._boundarylines),p(l,u,b,g,\"b-boundary\",g._boundarylines);var w\u003dd(t,l,u,h,i,_,m._labels,\"a-label\"),T\u003dd(t,l,u,h,i,_,g._labels,\"b-label\");!function(t,e,r,n,i,a,o,l){var u,f,h,p,d\u003dc.aggNums(Math.min,null,r.a),m\u003dc.aggNums(Math.max,null,r.a),g\u003dc.aggNums(Math.min,null,r.b),y\u003dc.aggNums(Math.max,null,r.b);u\u003d.5*(d+m),f\u003dg,h\u003dr.ab2xy(u,f,!0),p\u003dr.dxyda_rough(u,f),void 0\u003d\u003d\u003do.angle\u0026\u0026c.extendFlat(o,s(r,i,a,h,r.dxydb_rough(u,f)));v(t,e,r,n,h,p,r.aaxis,i,a,o,\"a-title\"),u\u003dd,f\u003d.5*(g+y),h\u003dr.ab2xy(u,f,!0),p\u003dr.dxydb_rough(u,f),void 0\u003d\u003d\u003dl.angle\u0026\u0026c.extendFlat(l,s(r,i,a,h,r.dxyda_rough(u,f)));v(t,e,r,n,h,p,r.baxis,i,a,l,\"b-title\")}(t,_,h,i,l,u,w,T),function(t,e,r,n,i){var s,l,u,f,h\u003dr.select(\"#\"+t._clipPathId);h.size()||(h\u003dr.append(\"clipPath\").classed(\"carpetclip\",!0));var p\u003dc.ensureSingle(h,\"path\",\"carpetboundary\"),d\u003de.clipsegments,m\u003d[];for(f\u003d0;f\u003cd.length;f++)s\u003dd[f],l\u003da([],s.x,n.c2p),u\u003da([],s.y,i.c2p),m.push(o(l,u,s.bicubic));var g\u003d\"M\"+m.join(\"L\")+\"Z\";h.attr(\"id\",t._clipPathId),p.attr(\"d\",g)}(h,i,f,l,u)}))};var m\u003dh.LINE_SPACING,g\u003d(1-h.MID_SHIFT)/m+1;function v(t,e,r,a,o,c,h,p,d,v,y){var x\u003d[];h.title.text\u0026\u0026x.push(h.title.text);var b\u003de.selectAll(\"text.\"+y).data(x),_\u003dv.maxExtent;b.enter().append(\"text\").classed(y,!0),b.each((function(){var e\u003ds(r,p,d,o,c);-1\u003d\u003d\u003d[\"start\",\"both\"].indexOf(h.showticklabels)\u0026\u0026(_\u003d0);var a\u003dh.title.font.size;_+\u003da+h.title.offset;var y\u003d(v.angle+(v.flip\u003c0?180:0)-e.angle+450)%360,x\u003dy\u003e90\u0026\u0026y\u003c270,b\u003dn.select(this);b.text(h.title.text).call(l.convertToTspans,t),x\u0026\u0026(_\u003d(-l.lineCount(b)+g)*m*a-_),b.attr(\"transform\",f(e.p[0],e.p[1])+u(e.angle)+f(0,_)).attr(\"text-anchor\",\"middle\").call(i.font,h.title.font)})),b.exit().remove()}},{\"../../components/drawing\":684,\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"./makepath\":998,\"./map_1d_array\":999,\"./orient_text\":1e3,\"@plotly/d3\":58}],1002:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\"),i\u003dt(\"../../lib/search\").findBin,a\u003dt(\"./compute_control_points\"),o\u003dt(\"./create_spline_evaluator\"),s\u003dt(\"./create_i_derivative_evaluator\"),l\u003dt(\"./create_j_derivative_evaluator\");e.exports\u003dfunction(t){var e\u003dt._a,r\u003dt._b,c\u003de.length,u\u003dr.length,f\u003dt.aaxis,h\u003dt.baxis,p\u003de[0],d\u003de[c-1],m\u003dr[0],g\u003dr[u-1],v\u003de[e.length-1]-e[0],y\u003dr[r.length-1]-r[0],x\u003dv*n.RELATIVE_CULL_TOLERANCE,b\u003dy*n.RELATIVE_CULL_TOLERANCE;p-\u003dx,d+\u003dx,m-\u003db,g+\u003db,t.isVisible\u003dfunction(t,e){return t\u003ep\u0026\u0026t\u003cd\u0026\u0026e\u003em\u0026\u0026e\u003cg},t.isOccluded\u003dfunction(t,e){return t\u003cp||t\u003ed||e\u003cm||e\u003eg},t.setScale\u003dfunction(){var e\u003dt._x,r\u003dt._y,n\u003da(t._xctrl,t._yctrl,e,r,f.smoothing,h.smoothing);t._xctrl\u003dn[0],t._yctrl\u003dn[1],t.evalxy\u003do([t._xctrl,t._yctrl],c,u,f.smoothing,h.smoothing),t.dxydi\u003ds([t._xctrl,t._yctrl],f.smoothing,h.smoothing),t.dxydj\u003dl([t._xctrl,t._yctrl],f.smoothing,h.smoothing)},t.i2a\u003dfunction(t){var r\u003dMath.max(0,Math.floor(t[0]),c-2),n\u003dt[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b\u003dfunction(t){var e\u003dMath.max(0,Math.floor(t[1]),c-2),n\u003dt[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab\u003dfunction(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i\u003dfunction(t){var r\u003dMath.max(0,Math.min(i(t,e),c-2)),n\u003de[r],a\u003de[r+1];return Math.max(0,Math.min(c-1,r+(t-n)/(a-n)))},t.b2j\u003dfunction(t){var e\u003dMath.max(0,Math.min(i(t,r),u-2)),n\u003dr[e],a\u003dr[e+1];return Math.max(0,Math.min(u-1,e+(t-n)/(a-n)))},t.ab2ij\u003dfunction(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c\u003dfunction(e,r){return t.evalxy([],e,r)},t.ab2xy\u003dfunction(n,i,a){if(!a\u0026\u0026(n\u003ce[0]||n\u003ee[c-1]|i\u003cr[0]||i\u003er[u-1]))return[!1,!1];var o\u003dt.a2i(n),s\u003dt.b2j(i),l\u003dt.evalxy([],o,s);if(a){var f,h,p,d,m\u003d0,g\u003d0,v\u003d[];n\u003ce[0]?(f\u003d0,h\u003d0,m\u003d(n-e[0])/(e[1]-e[0])):n\u003ee[c-1]?(f\u003dc-2,h\u003d1,m\u003d(n-e[c-1])/(e[c-1]-e[c-2])):h\u003do-(f\u003dMath.max(0,Math.min(c-2,Math.floor(o)))),i\u003cr[0]?(p\u003d0,d\u003d0,g\u003d(i-r[0])/(r[1]-r[0])):i\u003er[u-1]?(p\u003du-2,d\u003d1,g\u003d(i-r[u-1])/(r[u-1]-r[u-2])):d\u003ds-(p\u003dMath.max(0,Math.min(u-2,Math.floor(s)))),m\u0026\u0026(t.dxydi(v,f,p,h,d),l[0]+\u003dv[0]*m,l[1]+\u003dv[1]*m),g\u0026\u0026(t.dxydj(v,f,p,h,d),l[0]+\u003dv[0]*g,l[1]+\u003dv[1]*g)}return l},t.c2p\u003dfunction(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x\u003dfunction(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi\u003dfunction(t){var r\u003dMath.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj\u003dfunction(t){var e\u003dMath.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda\u003dfunction(e,r,n,i){var a\u003dt.dxydi(null,e,r,n,i),o\u003dt.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb\u003dfunction(e,r,n,i){var a\u003dt.dxydj(null,e,r,n,i),o\u003dt.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough\u003dfunction(e,r,n){var i\u003dv*(n||.1),a\u003dt.ab2xy(e+i,r,!0),o\u003dt.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough\u003dfunction(e,r,n){var i\u003dy*(n||.1),a\u003dt.ab2xy(e,r+i,!0),o\u003dt.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx\u003dfunction(t){return t._m},t.dpdy\u003dfunction(t){return t._m}}},{\"../../lib/search\":819,\"./compute_control_points\":990,\"./constants\":991,\"./create_i_derivative_evaluator\":992,\"./create_j_derivative_evaluator\":993,\"./create_spline_evaluator\":994}],1003:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r){var i,a,o,s\u003d[],l\u003d[],c\u003dt[0].length,u\u003dt.length;function f(e,r){var n,i\u003d0,a\u003d0;return e\u003e0\u0026\u0026void 0!\u003d\u003d(n\u003dt[r][e-1])\u0026\u0026(a++,i+\u003dn),e\u003cc-1\u0026\u0026void 0!\u003d\u003d(n\u003dt[r][e+1])\u0026\u0026(a++,i+\u003dn),r\u003e0\u0026\u0026void 0!\u003d\u003d(n\u003dt[r-1][e])\u0026\u0026(a++,i+\u003dn),r\u003cu-1\u0026\u0026void 0!\u003d\u003d(n\u003dt[r+1][e])\u0026\u0026(a++,i+\u003dn),i/Math.max(1,a)}var h,p,d,m,g,v,y,x,b,_,w,T\u003d0;for(i\u003d0;i\u003cc;i++)for(a\u003d0;a\u003cu;a++)void 0\u003d\u003d\u003dt[a][i]\u0026\u0026(s.push(i),l.push(a),t[a][i]\u003df(i,a)),T\u003dMath.max(T,Math.abs(t[a][i]));if(!s.length)return t;var k\u003d0,M\u003d0,A\u003ds.length;do{for(k\u003d0,o\u003d0;o\u003cA;o++){i\u003ds[o],a\u003dl[o];var S,E,L,C,P,I,O\u003d0,z\u003d0;0\u003d\u003d\u003di?(L\u003de[P\u003dMath.min(c-1,2)],C\u003de[1],S\u003dt[a][P],z+\u003d(E\u003dt[a][1])+(E-S)*(e[0]-C)/(C-L),O++):i\u003d\u003d\u003dc-1\u0026\u0026(L\u003de[P\u003dMath.max(0,c-3)],C\u003de[c-2],S\u003dt[a][P],z+\u003d(E\u003dt[a][c-2])+(E-S)*(e[c-1]-C)/(C-L),O++),(0\u003d\u003d\u003di||i\u003d\u003d\u003dc-1)\u0026\u0026a\u003e0\u0026\u0026a\u003cu-1\u0026\u0026(h\u003dr[a+1]-r[a],z+\u003d((p\u003dr[a]-r[a-1])*t[a+1][i]+h*t[a-1][i])/(p+h),O++),0\u003d\u003d\u003da?(L\u003dr[I\u003dMath.min(u-1,2)],C\u003dr[1],S\u003dt[I][i],z+\u003d(E\u003dt[1][i])+(E-S)*(r[0]-C)/(C-L),O++):a\u003d\u003d\u003du-1\u0026\u0026(L\u003dr[I\u003dMath.max(0,u-3)],C\u003dr[u-2],S\u003dt[I][i],z+\u003d(E\u003dt[u-2][i])+(E-S)*(r[u-1]-C)/(C-L),O++),(0\u003d\u003d\u003da||a\u003d\u003d\u003du-1)\u0026\u0026i\u003e0\u0026\u0026i\u003cc-1\u0026\u0026(h\u003de[i+1]-e[i],z+\u003d((p\u003de[i]-e[i-1])*t[a][i+1]+h*t[a][i-1])/(p+h),O++),O?z/\u003dO:(d\u003de[i+1]-e[i],m\u003de[i]-e[i-1],x\u003d(g\u003dr[a+1]-r[a])*(v\u003dr[a]-r[a-1])*(g+v),z\u003d((y\u003dd*m*(d+m))*(v*t[a+1][i]+g*t[a-1][i])+x*(m*t[a][i+1]+d*t[a][i-1]))/(x*(m+d)+y*(v+g))),k+\u003d(_\u003d(b\u003dz-t[a][i])/T)*_,w\u003dO?0:.85,t[a][i]+\u003db*(1+w)}k\u003dMath.sqrt(k)}while(M++\u003c100\u0026\u0026k\u003e1e-5);return n.log(\"Smoother converged to\",k,\"after\",M,\"iterations\"),t}},{\"../../lib\":799}],1004:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isArray1D;e.exports\u003dfunction(t,e,r){var i\u003dr(\"x\"),a\u003di\u0026\u0026i.length,o\u003dr(\"y\"),s\u003do\u0026\u0026o.length;if(!a\u0026\u0026!s)return!1;if(e._cheater\u003d!i,a\u0026\u0026!n(i)||s\u0026\u0026!n(o))e._length\u003dnull;else{var l\u003da?i.length:1/0;s\u0026\u0026(l\u003dMath.min(l,o.length)),e.a\u0026\u0026e.a.length\u0026\u0026(l\u003dMath.min(l,e.a.length)),e.b\u0026\u0026e.b.length\u0026\u0026(l\u003dMath.min(l,e.b.length)),e._length\u003dl}return!0}},{\"../../lib\":799}],1005:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../scattergeo/attributes\"),a\u003dt(\"../../components/colorscale/attributes\"),o\u003dt(\"../../plots/attributes\"),s\u003dt(\"../../components/color/attributes\").defaultLine,l\u003dt(\"../../lib/extend\").extendFlat,c\u003di.marker.line;e.exports\u003dl({locations:{valType:\"data_array\",editType:\"calc\"},locationmode:i.locationmode,z:{valType:\"data_array\",editType:\"calc\"},geojson:l({},i.geojson,{}),featureidkey:i.featureidkey,text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),marker:{line:{color:l({},c.color,{dflt:s}),width:l({},c.width,{dflt:1}),editType:\"calc\"},opacity:{valType:\"number\",arrayOk:!0,min:0,max:1,dflt:1,editType:\"style\"},editType:\"calc\"},selected:{marker:{opacity:i.selected.marker.opacity,editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:i.unselected.marker.opacity,editType:\"plot\"},editType:\"plot\"},hoverinfo:l({},o.hoverinfo,{editType:\"calc\",flags:[\"location\",\"z\",\"text\",\"name\"]}),hovertemplate:n(),showlegend:l({},o.showlegend,{dflt:!1})},a(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/color/attributes\":661,\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"../scattergeo/attributes\":1256}],1006:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../constants/numerical\").BADNUM,a\u003dt(\"../../components/colorscale/calc\"),o\u003dt(\"../scatter/arrays_to_calcdata\"),s\u003dt(\"../scatter/calc_selection\");function l(t){return t\u0026\u0026\"string\"\u003d\u003dtypeof t}e.exports\u003dfunction(t,e){var r,c\u003de._length,u\u003dnew Array(c);r\u003de.geojson?function(t){return l(t)||n(t)}:l;for(var f\u003d0;f\u003cc;f++){var h\u003du[f]\u003d{},p\u003de.locations[f],d\u003de.z[f];r(p)\u0026\u0026n(d)?(h.loc\u003dp,h.z\u003dd):(h.loc\u003dnull,h.z\u003di),h.index\u003df}return o(u,e),a(t,e,{vals:e.z,containerStr:\"\",cLetter:\"z\"}),s(u,e),u}},{\"../../components/colorscale/calc\":670,\"../../constants/numerical\":775,\"../scatter/arrays_to_calcdata\":1213,\"../scatter/calc_selection\":1216,\"fast-isnumeric\":245}],1007:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/defaults\"),a\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l\u003ds(\"locations\"),c\u003ds(\"z\");if(l\u0026\u0026l.length\u0026\u0026n.isArrayOrTypedArray(c)\u0026\u0026c.length){e._length\u003dMath.min(l.length,c.length);var u,f\u003ds(\"geojson\");(\"string\"\u003d\u003dtypeof f\u0026\u0026\"\"!\u003d\u003df||n.isPlainObject(f))\u0026\u0026(u\u003d\"geojson-id\"),\"geojson-id\"\u003d\u003d\u003ds(\"locationmode\",u)\u0026\u0026s(\"featureidkey\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"marker.line.width\")\u0026\u0026s(\"marker.line.color\"),s(\"marker.opacity\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"}),n.coerceSelectionMarkerOpacity(e,s)}else e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"./attributes\":1005}],1008:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i){t.location\u003de.location,t.z\u003de.z;var a\u003dn[i];return a.fIn\u0026\u0026a.fIn.properties\u0026\u0026(t.properties\u003da.fIn.properties),t.ct\u003da.ct,t}},{}],1009:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../lib\").fillText;e.exports\u003dfunction(t,e,r){var o,s,l,c,u\u003dt.cd,f\u003du[0].trace,h\u003dt.subplot,p\u003d[e,r],d\u003d[e+360,r];for(s\u003d0;s\u003cu.length;s++)if(c\u003d!1,(o\u003du[s])._polygons){for(l\u003d0;l\u003co._polygons.length;l++)o._polygons[l].contains(p)\u0026\u0026(c\u003d!c),o._polygons[l].contains(d)\u0026\u0026(c\u003d!c);if(c)break}if(c\u0026\u0026o)return t.x0\u003dt.x1\u003dt.xa.c2p(o.ct),t.y0\u003dt.y1\u003dt.ya.c2p(o.ct),t.index\u003do.index,t.location\u003do.loc,t.z\u003do.z,t.zLabel\u003dn.tickText(h.mockAxis,h.mockAxis.c2l(o.z),\"hover\").text,t.hovertemplate\u003do.hovertemplate,function(t,e,r){if(e.hovertemplate)return;var n\u003dr.hi||e.hoverinfo,o\u003dString(r.loc),s\u003d\"all\"\u003d\u003d\u003dn?i.hoverinfo.flags:n.split(\"+\"),l\u003d-1!\u003d\u003ds.indexOf(\"name\"),c\u003d-1!\u003d\u003ds.indexOf(\"location\"),u\u003d-1!\u003d\u003ds.indexOf(\"z\"),f\u003d-1!\u003d\u003ds.indexOf(\"text\"),h\u003d[];!l\u0026\u0026c?t.nameOverride\u003do:(l\u0026\u0026(t.nameOverride\u003de.name),c\u0026\u0026h.push(o));u\u0026\u0026h.push(t.zLabel);f\u0026\u0026a(r,e,h);t.extraText\u003dh.join(\"\u003cbr\u003e\")}(t,f,o),[t]}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"./attributes\":1005}],1010:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),calc:t(\"./calc\"),calcGeoJSON:t(\"./plot\").calcGeoJSON,plot:t(\"./plot\").plot,style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"choropleth\",basePlotModule:t(\"../../plots/geo\"),categories:[\"geo\",\"noOpacity\",\"showLegend\"],meta:{}}},{\"../../plots/geo\":882,\"../heatmap/colorbar\":1084,\"./attributes\":1005,\"./calc\":1006,\"./defaults\":1007,\"./event_data\":1008,\"./hover\":1009,\"./plot\":1011,\"./select\":1012,\"./style\":1013}],1011:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../lib/geo_location_utils\"),o\u003dt(\"../../lib/topojson_utils\").getTopojsonFeatures,s\u003dt(\"../../plots/cartesian/autorange\").findExtremes,l\u003dt(\"./style\").style;e.exports\u003d{calcGeoJSON:function(t,e){for(var r\u003dt[0].trace,n\u003de[r.geo],i\u003dn._subplot,l\u003dr.locationmode,c\u003dr._length,u\u003d\"geojson-id\"\u003d\u003d\u003dl?a.extractTraceFeature(t):o(r,i.topojson),f\u003d[],h\u003d[],p\u003d0;p\u003cc;p++){var d\u003dt[p],m\u003d\"geojson-id\"\u003d\u003d\u003dl?d.fOut:a.locationToFeature(l,d.loc,u);if(m){d.geojson\u003dm,d.ct\u003dm.properties.ct,d._polygons\u003da.feature2polygons(m);var g\u003da.computeBbox(m);f.push(g[0],g[2]),h.push(g[1],g[3])}else d.geojson\u003dnull}if(\"geojson\"\u003d\u003d\u003dn.fitbounds\u0026\u0026\"geojson-id\"\u003d\u003d\u003dl){var v\u003da.computeBbox(a.getTraceGeojson(r));f\u003d[v[0],v[2]],h\u003d[v[1],v[3]]}var y\u003d{padded:!0};r._extremes.lon\u003ds(n.lonaxis._ax,f,y),r._extremes.lat\u003ds(n.lataxis._ax,h,y)},plot:function(t,e,r){var a\u003de.layers.backplot.select(\".choroplethlayer\");i.makeTraceGroups(a,r,\"trace choropleth\").each((function(e){var r\u003dn.select(this).selectAll(\"path.choroplethlocation\").data(i.identity);r.enter().append(\"path\").classed(\"choroplethlocation\",!0),r.exit().remove(),l(t,e)}))}}},{\"../../lib\":799,\"../../lib/geo_location_utils\":792,\"../../lib/topojson_utils\":827,\"../../plots/cartesian/autorange\":848,\"./style\":1013,\"@plotly/d3\":58}],1012:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r,n,i,a,o,s\u003dt.cd,l\u003dt.xaxis,c\u003dt.yaxis,u\u003d[];if(!1\u003d\u003d\u003de)for(r\u003d0;r\u003cs.length;r++)s[r].selected\u003d0;else for(r\u003d0;r\u003cs.length;r++)(i\u003d(n\u003ds[r]).ct)\u0026\u0026(a\u003dl.c2p(i),o\u003dc.c2p(i),e.contains([a,o],null,r,t)?(u.push({pointNumber:r,lon:i[0],lat:i[1]}),n.selected\u003d1):n.selected\u003d0);return u}},{}],1013:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../components/colorscale\");function s(t,e){var r\u003de[0].trace,s\u003de[0].node3.selectAll(\".choroplethlocation\"),l\u003dr.marker||{},c\u003dl.line||{},u\u003do.makeColorScaleFuncFromTrace(r);s.each((function(t){n.select(this).attr(\"fill\",u(t.z)).call(i.stroke,t.mlc||c.color).call(a.dashLine,\"\",t.mlw||c.width||0).style(\"opacity\",l.opacity)})),a.selectedPointStyle(s,r,t)}e.exports\u003d{style:function(t,e){e\u0026\u0026s(t,e)},styleOnSelect:function(t,e){var r\u003de[0].node3,n\u003de[0].trace;n.selectedpoints?a.selectedPointStyle(r.selectAll(\".choroplethlocation\"),n,t):s(t,e)}}},{\"../../components/color\":662,\"../../components/colorscale\":674,\"../../components/drawing\":684,\"@plotly/d3\":58}],1014:[function(t,e,r){\"use strict\";var n\u003dt(\"../choropleth/attributes\"),i\u003dt(\"../../components/colorscale/attributes\"),a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../../plots/attributes\"),s\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003ds({locations:{valType:\"data_array\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},geojson:{valType:\"any\",editType:\"calc\"},featureidkey:s({},n.featureidkey,{}),below:{valType:\"string\",editType:\"plot\"},text:n.text,hovertext:n.hovertext,marker:{line:{color:s({},n.marker.line.color,{editType:\"plot\"}),width:s({},n.marker.line.width,{editType:\"plot\"}),editType:\"calc\"},opacity:s({},n.marker.opacity,{editType:\"plot\"}),editType:\"calc\"},selected:{marker:{opacity:s({},n.selected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},unselected:{marker:{opacity:s({},n.unselected.marker.opacity,{editType:\"plot\"}),editType:\"plot\"},editType:\"plot\"},hoverinfo:n.hoverinfo,hovertemplate:a({},{keys:[\"properties\"]}),showlegend:s({},o.showlegend,{dflt:!1})},i(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"../choropleth/attributes\":1005}],1015:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/colorscale\"),o\u003dt(\"../../components/drawing\"),s\u003dt(\"../../lib/geojson_utils\").makeBlank,l\u003dt(\"../../lib/geo_location_utils\");function c(t){var e,r\u003dt[0].trace,n\u003dr._opts;if(r.selectedpoints){for(var a\u003do.makeSelectedPointStyleFns(r),s\u003d0;s\u003ct.length;s++){var l\u003dt[s];l.fOut\u0026\u0026(l.fOut.properties.mo2\u003da.selectedOpacityFn(l))}e\u003d{type:\"identity\",property:\"mo2\"}}else e\u003di.isArrayOrTypedArray(r.marker.opacity)?{type:\"identity\",property:\"mo\"}:r.marker.opacity;return i.extendFlat(n.fill.paint,{\"fill-opacity\":e}),i.extendFlat(n.line.paint,{\"line-opacity\":e}),n}e.exports\u003d{convert:function(t){var e\u003dt[0].trace,r\u003d!0\u003d\u003d\u003de.visible\u0026\u00260!\u003d\u003de._length,o\u003d{layout:{visibility:\"none\"},paint:{}},u\u003d{layout:{visibility:\"none\"},paint:{}},f\u003de._opts\u003d{fill:o,line:u,geojson:s()};if(!r)return f;var h\u003dl.extractTraceFeature(t);if(!h)return f;var p,d,m,g\u003da.makeColorScaleFuncFromTrace(e),v\u003de.marker,y\u003dv.line||{};i.isArrayOrTypedArray(v.opacity)\u0026\u0026(p\u003dfunction(t){var e\u003dt.mo;return n(e)?+i.constrain(e,0,1):0}),i.isArrayOrTypedArray(y.color)\u0026\u0026(d\u003dfunction(t){return t.mlc}),i.isArrayOrTypedArray(y.width)\u0026\u0026(m\u003dfunction(t){return t.mlw});for(var x\u003d0;x\u003ct.length;x++){var b\u003dt[x],_\u003db.fOut;if(_){var w\u003d_.properties;w.fc\u003dg(b.z),p\u0026\u0026(w.mo\u003dp(b)),d\u0026\u0026(w.mlc\u003dd(b)),m\u0026\u0026(w.mlw\u003dm(b)),b.ct\u003dw.ct,b._polygons\u003dl.feature2polygons(_)}}var T\u003dp?{type:\"identity\",property:\"mo\"}:v.opacity;return i.extendFlat(o.paint,{\"fill-color\":{type:\"identity\",property:\"fc\"},\"fill-opacity\":T}),i.extendFlat(u.paint,{\"line-color\":d?{type:\"identity\",property:\"mlc\"}:y.color,\"line-width\":m?{type:\"identity\",property:\"mlw\"}:y.width,\"line-opacity\":T}),o.layout.visibility\u003d\"visible\",u.layout.visibility\u003d\"visible\",f.geojson\u003d{type:\"FeatureCollection\",features:h},c(t),f},convertOnSelect:c}},{\"../../components/colorscale\":674,\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/geo_location_utils\":792,\"../../lib/geojson_utils\":793,\"fast-isnumeric\":245}],1016:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/defaults\"),a\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l\u003ds(\"locations\"),c\u003ds(\"z\"),u\u003ds(\"geojson\");n.isArrayOrTypedArray(l)\u0026\u0026l.length\u0026\u0026n.isArrayOrTypedArray(c)\u0026\u0026c.length\u0026\u0026(\"string\"\u003d\u003dtypeof u\u0026\u0026\"\"!\u003d\u003du||n.isPlainObject(u))?(s(\"featureidkey\"),e._length\u003dMath.min(l.length,c.length),s(\"below\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"marker.line.width\")\u0026\u0026s(\"marker.line.color\"),s(\"marker.opacity\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"}),n.coerceSelectionMarkerOpacity(e,s)):e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"./attributes\":1014}],1017:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),calc:t(\"../choropleth/calc\"),plot:t(\"./plot\"),hoverPoints:t(\"../choropleth/hover\"),eventData:t(\"../choropleth/event_data\"),selectPoints:t(\"../choropleth/select\"),styleOnSelect:function(t,e){e\u0026\u0026e[0].trace._glTrace.updateOnSelect(e)},getBelow:function(t,e){for(var r\u003de.getMapLayers(),n\u003dr.length-2;n\u003e\u003d0;n--){var i\u003dr[n].id;if(\"string\"\u003d\u003dtypeof i\u0026\u00260\u003d\u003d\u003di.indexOf(\"water\"))for(var a\u003dn+1;a\u003cr.length;a++)if(\"string\"\u003d\u003dtypeof(i\u003dr[a].id)\u0026\u0026-1\u003d\u003d\u003di.indexOf(\"plotly-\"))return i}},moduleType:\"trace\",name:\"choroplethmapbox\",basePlotModule:t(\"../../plots/mapbox\"),categories:[\"mapbox\",\"gl\",\"noOpacity\",\"showLegend\"],meta:{hr_name:\"choropleth_mapbox\"}}},{\"../../plots/mapbox\":907,\"../choropleth/calc\":1006,\"../choropleth/event_data\":1008,\"../choropleth/hover\":1009,\"../choropleth/select\":1012,\"../heatmap/colorbar\":1084,\"./attributes\":1014,\"./defaults\":1016,\"./plot\":1018}],1018:[function(t,e,r){\"use strict\";var n\u003dt(\"./convert\").convert,i\u003dt(\"./convert\").convertOnSelect,a\u003dt(\"../../plots/mapbox/constants\").traceLayerPrefix;function o(t,e){this.type\u003d\"choroplethmapbox\",this.subplot\u003dt,this.uid\u003de,this.sourceId\u003d\"source-\"+e,this.layerList\u003d[[\"fill\",a+e+\"-fill\"],[\"line\",a+e+\"-line\"]],this.below\u003dnull}var s\u003do.prototype;s.update\u003dfunction(t){this._update(n(t))},s.updateOnSelect\u003dfunction(t){this._update(i(t))},s._update\u003dfunction(t){var e\u003dthis.subplot,r\u003dthis.layerList,n\u003de.belowLookup[\"trace-\"+this.uid];e.map.getSource(this.sourceId).setData(t.geojson),n!\u003d\u003dthis.below\u0026\u0026(this._removeLayers(),this._addLayers(t,n),this.below\u003dn);for(var i\u003d0;i\u003cr.length;i++){var a\u003dr[i],o\u003da[0],s\u003da[1],l\u003dt[o];e.setOptions(s,\"setLayoutProperty\",l.layout),\"visible\"\u003d\u003d\u003dl.layout.visibility\u0026\u0026e.setOptions(s,\"setPaintProperty\",l.paint)}},s._addLayers\u003dfunction(t,e){for(var r\u003dthis.subplot,n\u003dthis.layerList,i\u003dthis.sourceId,a\u003d0;a\u003cn.length;a++){var o\u003dn[a],s\u003do[0],l\u003dt[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},s._removeLayers\u003dfunction(){for(var t\u003dthis.subplot.map,e\u003dthis.layerList,r\u003de.length-1;r\u003e\u003d0;r--)t.removeLayer(e[r][1])},s.dispose\u003dfunction(){var t\u003dthis.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports\u003dfunction(t,e){var r\u003de[0].trace,i\u003dnew o(t,r.uid),a\u003di.sourceId,s\u003dn(e),l\u003di.below\u003dt.belowLookup[\"trace-\"+r.uid];return t.map.addSource(a,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),e[0].trace._glTrace\u003di,i}},{\"../../plots/mapbox/constants\":905,\"./convert\":1015}],1019:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/attributes\"),i\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../mesh3d/attributes\"),s\u003dt(\"../../plots/attributes\"),l\u003dt(\"../../lib/extend\").extendFlat,c\u003d{x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},u:{valType:\"data_array\",editType:\"calc\"},v:{valType:\"data_array\",editType:\"calc\"},w:{valType:\"data_array\",editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"scaled\",\"absolute\"],editType:\"calc\",dflt:\"scaled\"},sizeref:{valType:\"number\",editType:\"calc\",min:0},anchor:{valType:\"enumerated\",editType:\"calc\",values:[\"tip\",\"tail\",\"cm\",\"center\"],dflt:\"cm\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertemplate:a({editType:\"calc\"},{keys:[\"norm\"]}),uhoverformat:i(\"u\",1),vhoverformat:i(\"v\",1),whoverformat:i(\"w\",1),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),showlegend:l({},s.showlegend,{dflt:!1})};l(c,n(\"\",{colorAttr:\"u/v/w norm\",showScaleDflt:!0,editTypeOverride:\"calc\"}));[\"opacity\",\"lightposition\",\"lighting\"].forEach((function(t){c[t]\u003do[t]})),c.hoverinfo\u003dl({},s.hoverinfo,{editType:\"calc\",flags:[\"x\",\"y\",\"z\",\"u\",\"v\",\"w\",\"norm\",\"text\",\"name\"],dflt:\"x+y+z+norm+text+name\"}),c.transforms\u003dvoid 0,e.exports\u003dc},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../mesh3d/attributes\":1155}],1020:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/calc\");e.exports\u003dfunction(t,e){for(var r\u003de.u,i\u003de.v,a\u003de.w,o\u003dMath.min(e.x.length,e.y.length,e.z.length,r.length,i.length,a.length),s\u003d-1/0,l\u003d1/0,c\u003d0;c\u003co;c++){var u\u003dr[c],f\u003di[c],h\u003da[c],p\u003dMath.sqrt(u*u+f*f+h*h);s\u003dMath.max(s,p),l\u003dMath.min(l,p)}e._len\u003do,e._normMax\u003ds,n(t,e,{vals:[l,s],containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":670}],1021:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-cone3d\"),i\u003dt(\"gl-cone3d\").createConeMesh,a\u003dt(\"../../lib\").simpleMap,o\u003dt(\"../../lib/gl_format_color\").parseColorScale,s\u003dt(\"../../components/colorscale\").extractOpts,l\u003dt(\"../../plots/gl3d/zip3\");function c(t,e){this.scene\u003dt,this.uid\u003de,this.mesh\u003dnull,this.data\u003dnull}var u\u003dc.prototype;u.handlePick\u003dfunction(t){if(t.object\u003d\u003d\u003dthis.mesh){var e\u003dt.index\u003dt.data.index,r\u003dthis.data.x[e],n\u003dthis.data.y[e],i\u003dthis.data.z[e],a\u003dthis.data.u[e],o\u003dthis.data.v[e],s\u003dthis.data.w[e];t.traceCoordinate\u003d[r,n,i,a,o,s,Math.sqrt(a*a+o*o+s*s)];var l\u003dthis.data.hovertext||this.data.text;return Array.isArray(l)\u0026\u0026void 0!\u003d\u003dl[e]?t.textLabel\u003dl[e]:l\u0026\u0026(t.textLabel\u003dl),!0}};var f\u003d{xaxis:0,yaxis:1,zaxis:2},h\u003d{tip:1,tail:0,cm:.25,center:.5},p\u003d{tip:1,tail:1,cm:.75,center:.5};function d(t,e){var r\u003dt.fullSceneLayout,i\u003dt.dataScale,c\u003d{};function u(t,e){var n\u003dr[e],o\u003di[f[e]];return a(t,(function(t){return n.d2l(t)*o}))}c.vectors\u003dl(u(e.u,\"xaxis\"),u(e.v,\"yaxis\"),u(e.w,\"zaxis\"),e._len),c.positions\u003dl(u(e.x,\"xaxis\"),u(e.y,\"yaxis\"),u(e.z,\"zaxis\"),e._len);var d\u003ds(e);c.colormap\u003do(e),c.vertexIntensityBounds\u003d[d.min/e._normMax,d.max/e._normMax],c.coneOffset\u003dh[e.anchor],\"scaled\"\u003d\u003d\u003de.sizemode?c.coneSize\u003de.sizeref||.5:c.coneSize\u003de.sizeref\u0026\u0026e._normMax?e.sizeref/e._normMax:.5;var m\u003dn(c),g\u003de.lightposition;return m.lightPosition\u003d[g.x,g.y,g.z],m.ambient\u003de.lighting.ambient,m.diffuse\u003de.lighting.diffuse,m.specular\u003de.lighting.specular,m.roughness\u003de.lighting.roughness,m.fresnel\u003de.lighting.fresnel,m.opacity\u003de.opacity,e._pad\u003dp[e.anchor]*m.vectorScale*m.coneScale*e._normMax,m}u.update\u003dfunction(t){this.data\u003dt;var e\u003dd(this.scene,t);this.mesh.update(e)},u.dispose\u003dfunction(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports\u003dfunction(t,e){var r\u003dt.glplot.gl,n\u003dd(t,e),a\u003di(r,n),o\u003dnew c(t,e.uid);return o.mesh\u003da,o.data\u003de,a._trace\u003do,t.glplot.add(a),o}},{\"../../components/colorscale\":674,\"../../lib\":799,\"../../lib/gl_format_color\":795,\"../../plots/gl3d/zip3\":903,\"gl-cone3d\":264}],1022:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/defaults\"),a\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l\u003ds(\"u\"),c\u003ds(\"v\"),u\u003ds(\"w\"),f\u003ds(\"x\"),h\u003ds(\"y\"),p\u003ds(\"z\");l\u0026\u0026l.length\u0026\u0026c\u0026\u0026c.length\u0026\u0026u\u0026\u0026u.length\u0026\u0026f\u0026\u0026f.length\u0026\u0026h\u0026\u0026h.length\u0026\u0026p\u0026\u0026p.length?(s(\"sizeref\"),s(\"sizemode\"),s(\"anchor\"),s(\"lighting.ambient\"),s(\"lighting.diffuse\"),s(\"lighting.specular\"),s(\"lighting.roughness\"),s(\"lighting.fresnel\"),s(\"lightposition.x\"),s(\"lightposition.y\"),s(\"lightposition.z\"),i(t,e,o,s,{prefix:\"\",cLetter:\"c\"}),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"uhoverformat\"),s(\"vhoverformat\"),s(\"whoverformat\"),s(\"xhoverformat\"),s(\"yhoverformat\"),s(\"zhoverformat\"),e._length\u003dnull):e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"./attributes\":1019}],1023:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"cone\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:{min:\"cmin\",max:\"cmax\"},calc:t(\"./calc\"),plot:t(\"./convert\"),eventData:function(t,e){return t.norm\u003de.traceCoordinate[6],t},meta:{}}},{\"../../plots/gl3d\":892,\"./attributes\":1019,\"./calc\":1020,\"./convert\":1021,\"./defaults\":1022}],1024:[function(t,e,r){\"use strict\";var n\u003dt(\"../heatmap/attributes\"),i\u003dt(\"../scatter/attributes\"),a\u003dt(\"../../plots/cartesian/axis_format_attributes\"),o\u003da.axisHoverFormat,s\u003da.descriptionOnlyNumbers,l\u003dt(\"../../components/colorscale/attributes\"),c\u003dt(\"../../components/drawing/attributes\").dash,u\u003dt(\"../../plots/font_attributes\"),f\u003dt(\"../../lib/extend\").extendFlat,h\u003dt(\"../../constants/filter_ops\"),p\u003dh.COMPARISON_OPS2,d\u003dh.INTERVAL_OPS,m\u003di.line;e.exports\u003df({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,text:n.text,hovertext:n.hovertext,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),zhoverformat:o(\"z\",1),hovertemplate:n.hovertemplate,hoverongaps:n.hoverongaps,connectgaps:f({},n.connectgaps,{}),fillcolor:{valType:\"color\",editType:\"calc\"},autocontour:{valType:\"boolean\",dflt:!0,editType:\"calc\",impliedEdits:{\"contours.start\":void 0,\"contours.end\":void 0,\"contours.size\":void 0}},ncontours:{valType:\"integer\",dflt:15,min:1,editType:\"calc\"},contours:{type:{valType:\"enumerated\",values:[\"levels\",\"constraint\"],dflt:\"levels\",editType:\"calc\"},start:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},end:{valType:\"number\",dflt:null,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},size:{valType:\"number\",dflt:null,min:0,editType:\"plot\",impliedEdits:{\"^autocontour\":!1}},coloring:{valType:\"enumerated\",values:[\"fill\",\"heatmap\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:{valType:\"boolean\",dflt:!0,editType:\"plot\"},showlabels:{valType:\"boolean\",dflt:!1,editType:\"plot\"},labelfont:u({editType:\"plot\",colorEditType:\"style\"}),labelformat:{valType:\"string\",dflt:\"\",editType:\"plot\",description:s(\"contour label\")},operation:{valType:\"enumerated\",values:[].concat(p).concat(d),dflt:\"\u003d\",editType:\"calc\"},value:{valType:\"any\",dflt:0,editType:\"calc\"},editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:f({},m.color,{editType:\"style+colorbars\"}),width:{valType:\"number\",min:0,editType:\"style+colorbars\"},dash:c,smoothing:f({},m.smoothing,{}),editType:\"plot\"}},l(\"\",{cLetter:\"z\",autoColorDflt:!1,editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":669,\"../../components/drawing/attributes\":683,\"../../constants/filter_ops\":771,\"../../lib/extend\":789,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/font_attributes\":878,\"../heatmap/attributes\":1081,\"../scatter/attributes\":1214}],1025:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale\"),i\u003dt(\"../heatmap/calc\"),a\u003dt(\"./set_contours\"),o\u003dt(\"./end_plus\");e.exports\u003dfunction(t,e){var r\u003di(t,e),s\u003dr[0].z;a(e,s);var l,c\u003de.contours,u\u003dn.extractOpts(e);if(\"heatmap\"\u003d\u003d\u003dc.coloring\u0026\u0026u.auto\u0026\u0026!1\u003d\u003d\u003de.autocontour){var f\u003dc.start,h\u003do(c),p\u003dc.size||1,d\u003dMath.floor((h-f)/p)+1;isFinite(p)||(p\u003d1,d\u003d1);var m\u003df-p/2;l\u003d[m,m+d*p]}else l\u003ds;return n.calc(t,e,{vals:l,cLetter:\"z\"}),r}},{\"../../components/colorscale\":674,\"../heatmap/calc\":1082,\"./end_plus\":1035,\"./set_contours\":1043}],1026:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r,n\u003dt[0],i\u003dn.z;switch(e.type){case\"levels\":var a\u003dMath.min(i[0][0],i[0][1]);for(r\u003d0;r\u003ct.length;r++){var o\u003dt[r];o.prefixBoundary\u003d!o.edgepaths.length\u0026\u0026(a\u003eo.level||o.starts.length\u0026\u0026a\u003d\u003d\u003do.level)}break;case\"constraint\":if(n.prefixBoundary\u003d!1,n.edgepaths.length)return;var s\u003dn.x.length,l\u003dn.y.length,c\u003d-1/0,u\u003d1/0;for(r\u003d0;r\u003cl;r++)u\u003dMath.min(u,i[r][0]),u\u003dMath.min(u,i[r][s-1]),c\u003dMath.max(c,i[r][0]),c\u003dMath.max(c,i[r][s-1]);for(r\u003d1;r\u003cs-1;r++)u\u003dMath.min(u,i[0][r]),u\u003dMath.min(u,i[l-1][r]),c\u003dMath.max(c,i[0][r]),c\u003dMath.max(c,i[l-1][r]);var f,h,p\u003de.value;switch(e._operation){case\"\u003e\":p\u003ec\u0026\u0026(n.prefixBoundary\u003d!0);break;case\"\u003c\":(p\u003cu||n.starts.length\u0026\u0026p\u003d\u003d\u003du)\u0026\u0026(n.prefixBoundary\u003d!0);break;case\"[]\":f\u003dMath.min(p[0],p[1]),((h\u003dMath.max(p[0],p[1]))\u003cu||f\u003ec||n.starts.length\u0026\u0026h\u003d\u003d\u003du)\u0026\u0026(n.prefixBoundary\u003d!0);break;case\"][\":f\u003dMath.min(p[0],p[1]),h\u003dMath.max(p[0],p[1]),f\u003cu\u0026\u0026h\u003ec\u0026\u0026(n.prefixBoundary\u003d!0)}}}},{}],1027:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale\"),i\u003dt(\"./make_color_map\"),a\u003dt(\"./end_plus\");e.exports\u003d{min:\"zmin\",max:\"zmax\",calc:function(t,e,r){var o\u003de.contours,s\u003de.line,l\u003do.size||1,c\u003do.coloring,u\u003di(e,{isColorbar:!0});if(\"heatmap\"\u003d\u003d\u003dc){var f\u003dn.extractOpts(e);r._fillgradient\u003df.reversescale?n.flipScale(f.colorscale):f.colorscale,r._zrange\u003d[f.min,f.max]}else\"fill\"\u003d\u003d\u003dc\u0026\u0026(r._fillcolor\u003du);r._line\u003d{color:\"lines\"\u003d\u003d\u003dc?u:s.color,width:!1!\u003d\u003do.showlines?s.width:0,dash:s.dash},r._levels\u003d{start:o.start,end:a(o),size:l}}}},{\"../../components/colorscale\":674,\"./end_plus\":1035,\"./make_color_map\":1040}],1028:[function(t,e,r){\"use strict\";e.exports\u003d{BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},{}],1029:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"./label_defaults\"),a\u003dt(\"../../components/color\"),o\u003da.addOpacity,s\u003da.opacity,l\u003dt(\"../../constants/filter_ops\"),c\u003dl.CONSTRAINT_REDUCTION,u\u003dl.COMPARISON_OPS2;e.exports\u003dfunction(t,e,r,a,l,f){var h,p,d,m\u003de.contours,g\u003dr(\"contours.operation\");(m._operation\u003dc[g],function(t,e){var r;-1\u003d\u003d\u003du.indexOf(e.operation)?(t(\"contours.value\",[0,1]),Array.isArray(e.value)?e.value.length\u003e2?e.value\u003de.value.slice(2):0\u003d\u003d\u003de.length?e.value\u003d[0,1]:e.length\u003c2?(r\u003dparseFloat(e.value[0]),e.value\u003d[r,r+1]):e.value\u003d[parseFloat(e.value[0]),parseFloat(e.value[1])]:n(e.value)\u0026\u0026(r\u003dparseFloat(e.value),e.value\u003d[r,r+1])):(t(\"contours.value\",0),n(e.value)||(Array.isArray(e.value)?e.value\u003dparseFloat(e.value[0]):e.value\u003d0))}(r,m),\"\u003d\"\u003d\u003d\u003dg?h\u003dm.showlines\u003d!0:(h\u003dr(\"contours.showlines\"),d\u003dr(\"fillcolor\",o((t.line||{}).color||l,.5))),h)\u0026\u0026(p\u003dr(\"line.color\",d\u0026\u0026s(d)?o(e.fillcolor,1):l),r(\"line.width\",2),r(\"line.dash\"));r(\"line.smoothing\"),i(r,a,p,f)}},{\"../../components/color\":662,\"../../constants/filter_ops\":771,\"./label_defaults\":1039,\"fast-isnumeric\":245}],1030:[function(t,e,r){\"use strict\";var n\u003dt(\"../../constants/filter_ops\"),i\u003dt(\"fast-isnumeric\");function a(t,e){var r,a\u003dArray.isArray(e);function o(t){return i(t)?+t:null}return-1!\u003d\u003dn.COMPARISON_OPS2.indexOf(t)?r\u003do(a?e[0]:e):-1!\u003d\u003dn.INTERVAL_OPS.indexOf(t)?r\u003da?[o(e[0]),o(e[1])]:[o(e),o(e)]:-1!\u003d\u003dn.SET_OPS.indexOf(t)\u0026\u0026(r\u003da?e.map(o):[o(e)]),r}function o(t){return function(e){e\u003da(t,e);var r\u003dMath.min(e[0],e[1]),n\u003dMath.max(e[0],e[1]);return{start:r,end:n,size:n-r}}}function s(t){return function(e){return{start:e\u003da(t,e),end:1/0,size:1/0}}}e.exports\u003d{\"[]\":o(\"[]\"),\"][\":o(\"][\"),\"\u003e\":s(\"\u003e\"),\"\u003c\":s(\"\u003c\"),\"\u003d\":s(\"\u003d\")}},{\"../../constants/filter_ops\":771,\"fast-isnumeric\":245}],1031:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n){var i\u003dn(\"contours.start\"),a\u003dn(\"contours.end\"),o\u003d!1\u003d\u003d\u003di||!1\u003d\u003d\u003da,s\u003dr(\"contours.size\");!(o?e.autocontour\u003d!0:r(\"autocontour\",!1))\u0026\u0026s||r(\"ncontours\")}},{}],1032:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");function i(t){return n.extendFlat({},t,{edgepaths:n.extendDeep([],t.edgepaths),paths:n.extendDeep([],t.paths),starts:n.extendDeep([],t.starts)})}e.exports\u003dfunction(t,e){var r,a,o,s\u003dfunction(t){return t.reverse()},l\u003dfunction(t){return t};switch(e){case\"\u003d\":case\"\u003c\":return t;case\"\u003e\":for(1!\u003d\u003dt.length\u0026\u0026n.warn(\"Contour data invalid for the specified inequality operation.\"),a\u003dt[0],r\u003d0;r\u003ca.edgepaths.length;r++)a.edgepaths[r]\u003ds(a.edgepaths[r]);for(r\u003d0;r\u003ca.paths.length;r++)a.paths[r]\u003ds(a.paths[r]);for(r\u003d0;r\u003ca.starts.length;r++)a.starts[r]\u003ds(a.starts[r]);return t;case\"][\":var c\u003ds;s\u003dl,l\u003dc;case\"[]\":for(2!\u003d\u003dt.length\u0026\u0026n.warn(\"Contour data invalid for the specified inequality range operation.\"),a\u003di(t[0]),o\u003di(t[1]),r\u003d0;r\u003ca.edgepaths.length;r++)a.edgepaths[r]\u003ds(a.edgepaths[r]);for(r\u003d0;r\u003ca.paths.length;r++)a.paths[r]\u003ds(a.paths[r]);for(r\u003d0;r\u003ca.starts.length;r++)a.starts[r]\u003ds(a.starts[r]);for(;o.edgepaths.length;)a.edgepaths.push(l(o.edgepaths.shift()));for(;o.paths.length;)a.paths.push(l(o.paths.shift()));for(;o.starts.length;)a.starts.push(l(o.starts.shift()));return[a]}}},{\"../../lib\":799}],1033:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../heatmap/xyz_defaults\"),a\u003dt(\"../scatter/period_defaults\"),o\u003dt(\"./constraint_defaults\"),s\u003dt(\"./contours_defaults\"),l\u003dt(\"./style_defaults\"),c\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,u){function f(r,i){return n.coerce(t,e,c,r,i)}if(i(t,e,f,u)){a(t,e,u,f),f(\"xhoverformat\"),f(\"yhoverformat\"),f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\"),f(\"hoverongaps\");var h\u003d\"constraint\"\u003d\u003d\u003df(\"contours.type\");f(\"connectgaps\",n.isArray1D(e.z)),h?o(t,e,f,u,r):(s(t,e,f,(function(r){return n.coerce2(t,e,c,r)})),l(t,e,f,u))}else e.visible\u003d!1}},{\"../../lib\":799,\"../heatmap/xyz_defaults\":1095,\"../scatter/period_defaults\":1234,\"./attributes\":1024,\"./constraint_defaults\":1029,\"./contours_defaults\":1031,\"./style_defaults\":1045}],1034:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./constraint_mapping\"),a\u003dt(\"./end_plus\");e.exports\u003dfunction(t,e,r){for(var o\u003d\"constraint\"\u003d\u003d\u003dt.type?i[t._operation](t.value):t,s\u003do.size,l\u003d[],c\u003da(o),u\u003dr.trace._carpetTrace,f\u003du?{xaxis:u.aaxis,yaxis:u.baxis,x:r.a,y:r.b}:{xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y},h\u003do.start;h\u003cc;h+\u003ds)if(l.push(n.extendFlat({level:h,crossings:{},starts:[],edgepaths:[],paths:[],z:r.z,smoothing:r.trace.line.smoothing},f)),l.length\u003e1e3){n.warn(\"Too many contours, clipping at 1000\",t);break}return l}},{\"../../lib\":799,\"./constraint_mapping\":1030,\"./end_plus\":1035}],1035:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){return t.end+t.size/1e6}},{}],1036:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./constants\");function a(t,e,r,n){return Math.abs(t[0]-e[0])\u003cr\u0026\u0026Math.abs(t[1]-e[1])\u003cn}function o(t,e,r,o,l){var c,u\u003de.join(\",\"),f\u003dt.crossings[u],h\u003dfunction(t,e,r){var n\u003d0,a\u003d0;t\u003e20\u0026\u0026e?208\u003d\u003d\u003dt||1114\u003d\u003d\u003dt?n\u003d0\u003d\u003d\u003dr[0]?1:-1:a\u003d0\u003d\u003d\u003dr[1]?1:-1:-1!\u003d\u003di.BOTTOMSTART.indexOf(t)?a\u003d1:-1!\u003d\u003di.LEFTSTART.indexOf(t)?n\u003d1:-1!\u003d\u003di.TOPSTART.indexOf(t)?a\u003d-1:n\u003d-1;return[n,a]}(f,r,e),p\u003d[s(t,e,[-h[0],-h[1]])],d\u003dt.z.length,m\u003dt.z[0].length,g\u003de.slice(),v\u003dh.slice();for(c\u003d0;c\u003c1e4;c++){if(f\u003e20?(f\u003di.CHOOSESADDLE[f][(h[0]||h[1])\u003c0?0:1],t.crossings[u]\u003di.SADDLEREMAINDER[f]):delete t.crossings[u],!(h\u003di.NEWDELTA[f])){n.log(\"Found bad marching index:\",f,e,t.level);break}p.push(s(t,e,h)),e[0]+\u003dh[0],e[1]+\u003dh[1],u\u003de.join(\",\"),a(p[p.length-1],p[p.length-2],o,l)\u0026\u0026p.pop();var y\u003dh[0]\u0026\u0026(e[0]\u003c0||e[0]\u003em-2)||h[1]\u0026\u0026(e[1]\u003c0||e[1]\u003ed-2);if(e[0]\u003d\u003d\u003dg[0]\u0026\u0026e[1]\u003d\u003d\u003dg[1]\u0026\u0026h[0]\u003d\u003d\u003dv[0]\u0026\u0026h[1]\u003d\u003d\u003dv[1]||r\u0026\u0026y)break;f\u003dt.crossings[u]}1e4\u003d\u003d\u003dc\u0026\u0026n.log(\"Infinite loop in contour?\");var x,b,_,w,T,k,M,A,S,E,L,C,P,I,O,z\u003da(p[0],p[p.length-1],o,l),D\u003d0,R\u003d.2*t.smoothing,F\u003d[],B\u003d0;for(c\u003d1;c\u003cp.length;c++)C\u003dp[c],P\u003dp[c-1],I\u003dvoid 0,O\u003dvoid 0,I\u003dC[2]-P[2],O\u003dC[3]-P[3],D+\u003dM\u003dMath.sqrt(I*I+O*O),F.push(M);var N\u003dD/F.length*R;function j(t){return p[t%p.length]}for(c\u003dp.length-2;c\u003e\u003dB;c--)if((x\u003dF[c])\u003cN){for(_\u003d0,b\u003dc-1;b\u003e\u003dB\u0026\u0026x+F[b]\u003cN;b--)x+\u003dF[b];if(z\u0026\u0026c\u003d\u003d\u003dp.length-2)for(_\u003d0;_\u003cb\u0026\u0026x+F[_]\u003cN;_++)x+\u003dF[_];T\u003dc-b+_+1,k\u003dMath.floor((c+b+_+2)/2),w\u003dz||c!\u003d\u003dp.length-2?z||-1!\u003d\u003db?T%2?j(k):[(j(k)[0]+j(k+1)[0])/2,(j(k)[1]+j(k+1)[1])/2]:p[0]:p[p.length-1],p.splice(b+1,c-b+1,w),c\u003db+1,_\u0026\u0026(B\u003d_),z\u0026\u0026(c\u003d\u003d\u003dp.length-2?p[_]\u003dp[p.length-1]:0\u003d\u003d\u003dc\u0026\u0026(p[p.length-1]\u003dp[0]))}for(p.splice(0,B),c\u003d0;c\u003cp.length;c++)p[c].length\u003d2;if(!(p.length\u003c2))if(z)p.pop(),t.paths.push(p);else{r||n.log(\"Unclosed interior contour?\",t.level,g.join(\",\"),p.join(\"L\"));var U\u003d!1;for(A\u003d0;A\u003ct.edgepaths.length;A++)if(E\u003dt.edgepaths[A],!U\u0026\u0026a(E[0],p[p.length-1],o,l)){p.pop(),U\u003d!0;var V\u003d!1;for(S\u003d0;S\u003ct.edgepaths.length;S++)if(a((L\u003dt.edgepaths[S])[L.length-1],p[0],o,l)){V\u003d!0,p.shift(),t.edgepaths.splice(A,1),S\u003d\u003d\u003dA?t.paths.push(p.concat(L)):(S\u003eA\u0026\u0026S--,t.edgepaths[S]\u003dL.concat(p,E));break}V||(t.edgepaths[A]\u003dp.concat(E))}for(A\u003d0;A\u003ct.edgepaths.length\u0026\u0026!U;A++)a((E\u003dt.edgepaths[A])[E.length-1],p[0],o,l)\u0026\u0026(p.shift(),t.edgepaths[A]\u003dE.concat(p),U\u003d!0);U||t.edgepaths.push(p)}}function s(t,e,r){var n\u003de[0]+Math.max(r[0],0),i\u003de[1]+Math.max(r[1],0),a\u003dt.z[i][n],o\u003dt.xaxis,s\u003dt.yaxis;if(r[1]){var l\u003d(t.level-a)/(t.z[i][n+1]-a);return[o.c2p((1-l)*t.x[n]+l*t.x[n+1],!0),s.c2p(t.y[i],!0),n+l,i]}var c\u003d(t.level-a)/(t.z[i+1][n]-a);return[o.c2p(t.x[n],!0),s.c2p((1-c)*t.y[i]+c*t.y[i+1],!0),n,i+c]}e.exports\u003dfunction(t,e,r){var i,a,s,l;for(e\u003de||.01,r\u003dr||.01,a\u003d0;a\u003ct.length;a++){for(s\u003dt[a],l\u003d0;l\u003cs.starts.length;l++)o(s,s.starts[l],\"edge\",e,r);for(i\u003d0;Object.keys(s.crossings).length\u0026\u0026i\u003c1e4;)i++,o(s,Object.keys(s.crossings)[0].split(\",\").map(Number),void 0,e,r);1e4\u003d\u003d\u003di\u0026\u0026n.log(\"Infinite loop in contour?\")}}},{\"../../lib\":799,\"./constants\":1028}],1037:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"../heatmap/hover\");e.exports\u003dfunction(t,e,r,a,o){o||(o\u003d{}),o.isContour\u003d!0;var s\u003di(t,e,r,a,o);return s\u0026\u0026s.forEach((function(t){var e\u003dt.trace;\"constraint\"\u003d\u003d\u003de.contours.type\u0026\u0026(e.fillcolor\u0026\u0026n.opacity(e.fillcolor)?t.color\u003dn.addOpacity(e.fillcolor,1):e.contours.showlines\u0026\u0026n.opacity(e.line.color)\u0026\u0026(t.color\u003dn.addOpacity(e.line.color,1)))})),s}},{\"../../components/color\":662,\"../heatmap/hover\":1088}],1038:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\").plot,style:t(\"./style\"),colorbar:t(\"./colorbar\"),hoverPoints:t(\"./hover\"),moduleType:\"trace\",name:\"contour\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":863,\"./attributes\":1024,\"./calc\":1025,\"./colorbar\":1027,\"./defaults\":1033,\"./hover\":1037,\"./plot\":1042,\"./style\":1044}],1039:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r,i){if(i||(i\u003d{}),t(\"contours.showlabels\")){var a\u003de.font;n.coerceFont(t,\"contours.labelfont\",{family:a.family,size:a.size,color:r}),t(\"contours.labelformat\")}!1!\u003d\u003di.hasHover\u0026\u0026t(\"zhoverformat\")}},{\"../../lib\":799}],1040:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/colorscale\"),a\u003dt(\"./end_plus\");e.exports\u003dfunction(t){var e\u003dt.contours,r\u003de.start,o\u003da(e),s\u003de.size||1,l\u003dMath.floor((o-r)/s)+1,c\u003d\"lines\"\u003d\u003d\u003de.coloring?0:1,u\u003di.extractOpts(t);isFinite(s)||(s\u003d1,l\u003d1);var f,h,p\u003du.reversescale?i.flipScale(u.colorscale):u.colorscale,d\u003dp.length,m\u003dnew Array(d),g\u003dnew Array(d);if(\"heatmap\"\u003d\u003d\u003de.coloring){var v\u003du.min,y\u003du.max;for(h\u003d0;h\u003cd;h++)f\u003dp[h],m[h]\u003df[0]*(y-v)+v,g[h]\u003df[1];var x\u003dn.extent([v,y,e.start,e.start+s*(l-1)]),b\u003dx[v\u003cy?0:1],_\u003dx[v\u003cy?1:0];b!\u003d\u003dv\u0026\u0026(m.splice(0,0,b),g.splice(0,0,g[0])),_!\u003d\u003dy\u0026\u0026(m.push(_),g.push(g[g.length-1]))}else for(h\u003d0;h\u003cd;h++)f\u003dp[h],m[h]\u003d(f[0]*(l+c-1)-c/2)*s+r,g[h]\u003df[1];return i.makeColorScaleFunc({domain:m,range:g},{noNumericCheck:!0})}},{\"../../components/colorscale\":674,\"./end_plus\":1035,\"@plotly/d3\":58}],1041:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\");function i(t,e){var r\u003d(e[0][0]\u003et?0:1)+(e[0][1]\u003et?0:2)+(e[1][1]\u003et?0:4)+(e[1][0]\u003et?0:8);return 5\u003d\u003d\u003dr||10\u003d\u003d\u003dr?t\u003e(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5\u003d\u003d\u003dr?713:1114:5\u003d\u003d\u003dr?104:208:15\u003d\u003d\u003dr?0:r}e.exports\u003dfunction(t){var e,r,a,o,s,l,c,u,f,h\u003dt[0].z,p\u003dh.length,d\u003dh[0].length,m\u003d2\u003d\u003d\u003dp||2\u003d\u003d\u003dd;for(r\u003d0;r\u003cp-1;r++)for(o\u003d[],0\u003d\u003d\u003dr\u0026\u0026(o\u003do.concat(n.BOTTOMSTART)),r\u003d\u003d\u003dp-2\u0026\u0026(o\u003do.concat(n.TOPSTART)),e\u003d0;e\u003cd-1;e++)for(a\u003do.slice(),0\u003d\u003d\u003de\u0026\u0026(a\u003da.concat(n.LEFTSTART)),e\u003d\u003d\u003dd-2\u0026\u0026(a\u003da.concat(n.RIGHTSTART)),s\u003de+\",\"+r,l\u003d[[h[r][e],h[r][e+1]],[h[r+1][e],h[r+1][e+1]]],f\u003d0;f\u003ct.length;f++)(c\u003di((u\u003dt[f]).level,l))\u0026\u0026(u.crossings[s]\u003dc,-1!\u003d\u003da.indexOf(c)\u0026\u0026(u.starts.push([e,r]),m\u0026\u0026-1!\u003d\u003da.indexOf(c,a.indexOf(c)+1)\u0026\u0026u.starts.push([e,r])))}},{\"./constants\":1028}],1042:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../components/colorscale\"),s\u003dt(\"../../lib/svg_text_utils\"),l\u003dt(\"../../plots/cartesian/axes\"),c\u003dt(\"../../plots/cartesian/set_convert\"),u\u003dt(\"../heatmap/plot\"),f\u003dt(\"./make_crossings\"),h\u003dt(\"./find_all_paths\"),p\u003dt(\"./empty_pathinfo\"),d\u003dt(\"./convert_to_constraints\"),m\u003dt(\"./close_boundaries\"),g\u003dt(\"./constants\"),v\u003dg.LABELOPTIMIZER;function y(t,e){var r,n,o,s,l,c,u,f\u003d\"\",h\u003d0,p\u003dt.edgepaths.map((function(t,e){return e})),d\u003d!0;function m(t){return Math.abs(t[1]-e[2][1])\u003c.01}function g(t){return Math.abs(t[0]-e[0][0])\u003c.01}function v(t){return Math.abs(t[0]-e[2][0])\u003c.01}for(;p.length;){for(c\u003da.smoothopen(t.edgepaths[h],t.smoothing),f+\u003dd?c:c.replace(/^M/,\"L\"),p.splice(p.indexOf(h),1),r\u003dt.edgepaths[h][t.edgepaths[h].length-1],s\u003d-1,o\u003d0;o\u003c4;o++){if(!r){i.log(\"Missing end?\",h,t);break}for(u\u003dr,Math.abs(u[1]-e[0][1])\u003c.01\u0026\u0026!v(r)?n\u003de[1]:g(r)?n\u003de[0]:m(r)?n\u003de[3]:v(r)\u0026\u0026(n\u003de[2]),l\u003d0;l\u003ct.edgepaths.length;l++){var y\u003dt.edgepaths[l][0];Math.abs(r[0]-n[0])\u003c.01?Math.abs(r[0]-y[0])\u003c.01\u0026\u0026(y[1]-r[1])*(n[1]-y[1])\u003e\u003d0\u0026\u0026(n\u003dy,s\u003dl):Math.abs(r[1]-n[1])\u003c.01?Math.abs(r[1]-y[1])\u003c.01\u0026\u0026(y[0]-r[0])*(n[0]-y[0])\u003e\u003d0\u0026\u0026(n\u003dy,s\u003dl):i.log(\"endpt to newendpt is not vert. or horz.\",r,n,y)}if(r\u003dn,s\u003e\u003d0)break;f+\u003d\"L\"+n}if(s\u003d\u003d\u003dt.edgepaths.length){i.log(\"unclosed perimeter path\");break}h\u003ds,(d\u003d-1\u003d\u003d\u003dp.indexOf(h))\u0026\u0026(h\u003dp[0],f+\u003d\"Z\")}for(h\u003d0;h\u003ct.paths.length;h++)f+\u003da.smoothclosed(t.paths[h],t.smoothing);return f}function x(t,e,r,n){var a\u003de.width/2,o\u003de.height/2,s\u003dt.x,l\u003dt.y,c\u003dt.theta,u\u003dMath.cos(c)*a,f\u003dMath.sin(c)*a,h\u003d(s\u003en.center?n.right-s:s-n.left)/(u+Math.abs(Math.sin(c)*o)),p\u003d(l\u003en.middle?n.bottom-l:l-n.top)/(Math.abs(f)+Math.cos(c)*o);if(h\u003c1||p\u003c1)return 1/0;var d\u003dv.EDGECOST*(1/(h-1)+1/(p-1));d+\u003dv.ANGLECOST*c*c;for(var m\u003ds-u,g\u003dl-f,y\u003ds+u,x\u003dl+f,b\u003d0;b\u003cr.length;b++){var _\u003dr[b],w\u003dMath.cos(_.theta)*_.width/2,T\u003dMath.sin(_.theta)*_.width/2,k\u003d2*i.segmentDistance(m,g,y,x,_.x-w,_.y-T,_.x+w,_.y+T)/(e.height+_.height),M\u003d_.level\u003d\u003d\u003de.level,A\u003dM?v.SAMELEVELDISTANCE:1;if(k\u003c\u003dA)return 1/0;d+\u003dv.NEIGHBORCOST*(M?v.SAMELEVELFACTOR:1)/(k-A)}return d}function b(t){var e,r,n\u003dt.trace._emptypoints,i\u003d[],a\u003dt.z.length,o\u003dt.z[0].length,s\u003d[];for(e\u003d0;e\u003co;e++)s.push(1);for(e\u003d0;e\u003ca;e++)i.push(s.slice());for(e\u003d0;e\u003cn.length;e++)i[(r\u003dn[e])[0]][r[1]]\u003d0;return t.zmask\u003di,i}r.plot\u003dfunction(t,e,o,s){var l\u003de.xaxis,c\u003de.yaxis;i.makeTraceGroups(s,o,\"contour\").each((function(o){var s\u003dn.select(this),v\u003do[0],x\u003dv.trace,_\u003dv.x,w\u003dv.y,T\u003dx.contours,k\u003dp(T,e,v),M\u003di.ensureSingle(s,\"g\",\"heatmapcoloring\"),A\u003d[];\"heatmap\"\u003d\u003d\u003dT.coloring\u0026\u0026(A\u003d[o]),u(t,e,A,M),f(k),h(k);var S\u003dl.c2p(_[0],!0),E\u003dl.c2p(_[_.length-1],!0),L\u003dc.c2p(w[0],!0),C\u003dc.c2p(w[w.length-1],!0),P\u003d[[S,C],[E,C],[E,L],[S,L]],I\u003dk;\"constraint\"\u003d\u003d\u003dT.type\u0026\u0026(I\u003dd(k,T._operation)),function(t,e,r){var n\u003di.ensureSingle(t,\"g\",\"contourbg\").selectAll(\"path\").data(\"fill\"\u003d\u003d\u003dr.coloring?[0]:[]);n.enter().append(\"path\"),n.exit().remove(),n.attr(\"d\",\"M\"+e.join(\"L\")+\"Z\").style(\"stroke\",\"none\")}(s,P,T),function(t,e,r,a){var o\u003d\"fill\"\u003d\u003d\u003da.coloring||\"constraint\"\u003d\u003d\u003da.type\u0026\u0026\"\u003d\"!\u003d\u003da._operation,s\u003d\"M\"+r.join(\"L\")+\"Z\";o\u0026\u0026m(e,a);var l\u003di.ensureSingle(t,\"g\",\"contourfill\").selectAll(\"path\").data(o?e:[]);l.enter().append(\"path\"),l.exit().remove(),l.each((function(t){var e\u003d(t.prefixBoundary?s:\"\")+y(t,r);e?n.select(this).attr(\"d\",e).style(\"stroke\",\"none\"):n.select(this).remove()}))}(s,I,P,T),function(t,e,o,s,l){var c\u003di.ensureSingle(t,\"g\",\"contourlines\"),u\u003d!1!\u003d\u003dl.showlines,f\u003dl.showlabels,h\u003du\u0026\u0026f,p\u003dr.createLines(c,u||f,e),d\u003dr.createLineClip(c,h,o,s.trace.uid),m\u003dt.selectAll(\"g.contourlabels\").data(f?[0]:[]);if(m.exit().remove(),m.enter().append(\"g\").classed(\"contourlabels\",!0),f){var v\u003d[],y\u003d[];i.clearLocationCache();var x\u003dr.labelFormatter(o,s),b\u003da.tester.append(\"text\").attr(\"data-notex\",1).call(a.font,l.labelfont),_\u003de[0].xaxis,w\u003de[0].yaxis,T\u003d_._length,k\u003dw._length,M\u003d_.range,A\u003dw.range,S\u003di.aggNums(Math.min,null,s.x),E\u003di.aggNums(Math.max,null,s.x),L\u003di.aggNums(Math.min,null,s.y),C\u003di.aggNums(Math.max,null,s.y),P\u003dMath.max(_.c2p(S,!0),0),I\u003dMath.min(_.c2p(E,!0),T),O\u003dMath.max(w.c2p(C,!0),0),z\u003dMath.min(w.c2p(L,!0),k),D\u003d{};M[0]\u003cM[1]?(D.left\u003dP,D.right\u003dI):(D.left\u003dI,D.right\u003dP),A[0]\u003cA[1]?(D.top\u003dO,D.bottom\u003dz):(D.top\u003dz,D.bottom\u003dO),D.middle\u003d(D.top+D.bottom)/2,D.center\u003d(D.left+D.right)/2,v.push([[D.left,D.top],[D.right,D.top],[D.right,D.bottom],[D.left,D.bottom]]);var R\u003dMath.sqrt(T*T+k*k),F\u003dg.LABELDISTANCE*R/Math.max(1,e.length/g.LABELINCREASE);p.each((function(t){var e\u003dr.calcTextOpts(t.level,x,b,o);n.select(this).selectAll(\"path\").each((function(){var t\u003di.getVisibleSegment(this,D,e.height/2);if(t\u0026\u0026!(t.len\u003c(e.width+e.height)*g.LABELMIN))for(var n\u003dMath.min(Math.ceil(t.len/F),g.LABELMAX),a\u003d0;a\u003cn;a++){var o\u003dr.findBestTextLocation(this,t,e,y,D);if(!o)break;r.addLabelData(o,e,y,v)}}))})),b.remove(),r.drawLabels(m,y,o,d,h?v:null)}f\u0026\u0026!u\u0026\u0026p.remove()}(s,k,t,v,T),function(t,e,r,n,o){var s\u003dn.trace,l\u003dr._fullLayout._clips,c\u003d\"clip\"+s.uid,u\u003dl.selectAll(\"#\"+c).data(s.connectgaps?[]:[0]);if(u.enter().append(\"clipPath\").classed(\"contourclip\",!0).attr(\"id\",c),u.exit().remove(),!1\u003d\u003d\u003ds.connectgaps){var p\u003d{level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:b(n),smoothing:0};f([p]),h([p]),m([p],{type:\"levels\"}),i.ensureSingle(u,\"path\",\"\").attr(\"d\",(p.prefixBoundary?\"M\"+o.join(\"L\")+\"Z\":\"\")+y(p,o))}else c\u003dnull;a.setClipUrl(t,c,r)}(s,e,t,v,P)}))},r.createLines\u003dfunction(t,e,r){var n\u003dr[0].smoothing,i\u003dt.selectAll(\"g.contourlevel\").data(e?r:[]);if(i.exit().remove(),i.enter().append(\"g\").classed(\"contourlevel\",!0),e){var o\u003di.selectAll(\"path.openline\").data((function(t){return t.pedgepaths||t.edgepaths}));o.exit().remove(),o.enter().append(\"path\").classed(\"openline\",!0),o.attr(\"d\",(function(t){return a.smoothopen(t,n)})).style(\"stroke-miterlimit\",1).style(\"vector-effect\",\"non-scaling-stroke\");var s\u003di.selectAll(\"path.closedline\").data((function(t){return t.ppaths||t.paths}));s.exit().remove(),s.enter().append(\"path\").classed(\"closedline\",!0),s.attr(\"d\",(function(t){return a.smoothclosed(t,n)})).style(\"stroke-miterlimit\",1).style(\"vector-effect\",\"non-scaling-stroke\")}return i},r.createLineClip\u003dfunction(t,e,r,n){var i\u003de?\"clipline\"+n:null,o\u003dr._fullLayout._clips.selectAll(\"#\"+i).data(e?[0]:[]);return o.exit().remove(),o.enter().append(\"clipPath\").classed(\"contourlineclip\",!0).attr(\"id\",i),a.setClipUrl(t,i,r),o},r.labelFormatter\u003dfunction(t,e){var r\u003dt._fullLayout,n\u003de.trace,i\u003dn.contours,a\u003d{type:\"linear\",_id:\"ycontour\",showexponent:\"all\",exponentformat:\"B\"};if(i.labelformat)a.tickformat\u003di.labelformat,c(a,r);else{var s\u003do.extractOpts(n);if(s\u0026\u0026s.colorbar\u0026\u0026s.colorbar._axis)a\u003ds.colorbar._axis;else{if(\"constraint\"\u003d\u003d\u003di.type){var u\u003di.value;Array.isArray(u)?a.range\u003d[u[0],u[u.length-1]]:a.range\u003d[u,u]}else a.range\u003d[i.start,i.end],a.nticks\u003d(i.end-i.start)/i.size;a.range[0]\u003d\u003d\u003da.range[1]\u0026\u0026(a.range[1]+\u003da.range[0]||1),a.nticks||(a.nticks\u003d1e3),c(a,r),l.prepTicks(a),a._tmin\u003dnull,a._tmax\u003dnull}}return function(t){return l.tickText(a,t).text}},r.calcTextOpts\u003dfunction(t,e,r,n){var i\u003de(t);r.text(i).call(s.convertToTspans,n);var o\u003dr.node(),l\u003da.bBox(o,!0);return{text:i,width:l.width,height:l.height,fontSize:+o.style[\"font-size\"].replace(\"px\",\"\"),level:t,dy:(l.top+l.bottom)/2}},r.findBestTextLocation\u003dfunction(t,e,r,n,a){var o,s,l,c,u,f\u003dr.width;e.isClosed?(s\u003de.len/v.INITIALSEARCHPOINTS,o\u003de.min+s/2,l\u003de.max):(s\u003d(e.len-f)/(v.INITIALSEARCHPOINTS+1),o\u003de.min+s+f/2,l\u003de.max-(s+f)/2);for(var h\u003d1/0,p\u003d0;p\u003cv.ITERATIONS;p++){for(var d\u003do;d\u003cl;d+\u003ds){var m\u003di.getTextLocation(t,e.total,d,f),g\u003dx(m,r,n,a);g\u003ch\u0026\u0026(h\u003dg,u\u003dm,c\u003dd)}if(h\u003e2*v.MAXCOST)break;p\u0026\u0026(s/\u003d2),l\u003d(o\u003dc-s/2)+1.5*s}if(h\u003c\u003dv.MAXCOST)return u},r.addLabelData\u003dfunction(t,e,r,n){var i\u003de.fontSize,a\u003de.width+i/3,o\u003dMath.max(0,e.height-i/3),s\u003dt.x,l\u003dt.y,c\u003dt.theta,u\u003dMath.sin(c),f\u003dMath.cos(c),h\u003dfunction(t,e){return[s+t*f-e*u,l+t*u+e*f]},p\u003d[h(-a/2,-o/2),h(-a/2,o/2),h(a/2,o/2),h(a/2,-o/2)];r.push({text:e.text,x:s,y:l,dy:e.dy,theta:c,level:e.level,width:a,height:o}),n.push(p)},r.drawLabels\u003dfunction(t,e,r,a,o){var l\u003dt.selectAll(\"text\").data(e,(function(t){return t.text+\",\"+t.x+\",\"+t.y+\",\"+t.theta}));if(l.exit().remove(),l.enter().append(\"text\").attr({\"data-notex\":1,\"text-anchor\":\"middle\"}).each((function(t){var e\u003dt.x+Math.sin(t.theta)*t.dy,i\u003dt.y-Math.cos(t.theta)*t.dy;n.select(this).text(t.text).attr({x:e,y:i,transform:\"rotate(\"+180*t.theta/Math.PI+\" \"+e+\" \"+i+\")\"}).call(s.convertToTspans,r)})),o){for(var c\u003d\"\",u\u003d0;u\u003co.length;u++)c+\u003d\"M\"+o[u].join(\"L\")+\"Z\";i.ensureSingle(a,\"path\",\"\").attr(\"d\",c)}}},{\"../../components/colorscale\":674,\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/set_convert\":870,\"../heatmap/plot\":1092,\"./close_boundaries\":1026,\"./constants\":1028,\"./convert_to_constraints\":1032,\"./empty_pathinfo\":1034,\"./find_all_paths\":1036,\"./make_crossings\":1041,\"@plotly/d3\":58}],1043:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../lib\");function a(t,e,r){var i\u003d{type:\"linear\",range:[t,e]};return n.autoTicks(i,(e-t)/(r||15)),i}e.exports\u003dfunction(t,e){var r\u003dt.contours;if(t.autocontour){var o\u003dt.zmin,s\u003dt.zmax;(t.zauto||void 0\u003d\u003d\u003do)\u0026\u0026(o\u003di.aggNums(Math.min,null,e)),(t.zauto||void 0\u003d\u003d\u003ds)\u0026\u0026(s\u003di.aggNums(Math.max,null,e));var l\u003da(o,s,t.ncontours);r.size\u003dl.dtick,r.start\u003dn.tickFirst(l),l.range.reverse(),r.end\u003dn.tickFirst(l),r.start\u003d\u003d\u003do\u0026\u0026(r.start+\u003dr.size),r.end\u003d\u003d\u003ds\u0026\u0026(r.end-\u003dr.size),r.start\u003er.end\u0026\u0026(r.start\u003dr.end\u003d(r.start+r.end)/2),t._input.contours||(t._input.contours\u003d{}),i.extendFlat(t._input.contours,{start:r.start,end:r.end,size:r.size}),t._input.autocontour\u003d!0}else if(\"constraint\"!\u003d\u003dr.type){var c,u\u003dr.start,f\u003dr.end,h\u003dt._input.contours;if(u\u003ef\u0026\u0026(r.start\u003dh.start\u003df,f\u003dr.end\u003dh.end\u003du,u\u003dr.start),!(r.size\u003e0))c\u003du\u003d\u003d\u003df?1:a(u,f,t.ncontours).dtick,h.size\u003dr.size\u003dc}}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849}],1044:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"../heatmap/style\"),o\u003dt(\"./make_color_map\");e.exports\u003dfunction(t){var e\u003dn.select(t).selectAll(\"g.contour\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.each((function(t){var e\u003dn.select(this),r\u003dt[0].trace,a\u003dr.contours,s\u003dr.line,l\u003da.size||1,c\u003da.start,u\u003d\"constraint\"\u003d\u003d\u003da.type,f\u003d!u\u0026\u0026\"lines\"\u003d\u003d\u003da.coloring,h\u003d!u\u0026\u0026\"fill\"\u003d\u003d\u003da.coloring,p\u003df||h?o(r):null;e.selectAll(\"g.contourlevel\").each((function(t){n.select(this).selectAll(\"path\").call(i.lineGroupStyle,s.width,f?p(t.level):s.color,s.dash)}));var d\u003da.labelfont;if(e.selectAll(\"g.contourlabels text\").each((function(t){i.font(n.select(this),{family:d.family,size:d.size,color:d.color||(f?p(t.level):s.color)})})),u)e.selectAll(\"g.contourfill path\").style(\"fill\",r.fillcolor);else if(h){var m;e.selectAll(\"g.contourfill path\").style(\"fill\",(function(t){return void 0\u003d\u003d\u003dm\u0026\u0026(m\u003dt.level),p(t.level+.5*l)})),void 0\u003d\u003d\u003dm\u0026\u0026(m\u003dc),e.selectAll(\"g.contourbg path\").style(\"fill\",p(m-.5*l))}})),a(t)}},{\"../../components/drawing\":684,\"../heatmap/style\":1093,\"./make_color_map\":1040,\"@plotly/d3\":58}],1045:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/defaults\"),i\u003dt(\"./label_defaults\");e.exports\u003dfunction(t,e,r,a,o){var s,l\u003dr(\"contours.coloring\"),c\u003d\"\";\"fill\"\u003d\u003d\u003dl\u0026\u0026(s\u003dr(\"contours.showlines\")),!1!\u003d\u003ds\u0026\u0026(\"lines\"!\u003d\u003dl\u0026\u0026(c\u003dr(\"line.color\",\"#000\")),r(\"line.width\",.5),r(\"line.dash\")),\"none\"!\u003d\u003dl\u0026\u0026(!0!\u003d\u003dt.showlegend\u0026\u0026(e.showlegend\u003d!1),e._dfltShowLegend\u003d!1,n(t,e,a,r,{prefix:\"\",cLetter:\"z\"})),r(\"line.smoothing\"),i(r,a,c,o)}},{\"../../components/colorscale/defaults\":672,\"./label_defaults\":1039}],1046:[function(t,e,r){\"use strict\";var n\u003dt(\"../heatmap/attributes\"),i\u003dt(\"../contour/attributes\"),a\u003dt(\"../../components/colorscale/attributes\"),o\u003dt(\"../../lib/extend\").extendFlat,s\u003di.contours;e.exports\u003do({carpet:{valType:\"string\",editType:\"calc\"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,hovertext:n.hovertext,transpose:n.transpose,atype:n.xtype,btype:n.ytype,fillcolor:i.fillcolor,autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:s.type,start:s.start,end:s.end,size:s.size,coloring:{valType:\"enumerated\",values:[\"fill\",\"lines\",\"none\"],dflt:\"fill\",editType:\"calc\"},showlines:s.showlines,showlabels:s.showlabels,labelfont:s.labelfont,labelformat:s.labelformat,operation:s.operation,value:s.value,editType:\"calc\",impliedEdits:{autocontour:!1}},line:{color:i.line.color,width:i.line.width,dash:i.line.dash,smoothing:i.line.smoothing,editType:\"plot\"},transforms:void 0},a(\"\",{cLetter:\"z\",autoColorDflt:!1}))},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../contour/attributes\":1024,\"../heatmap/attributes\":1081}],1047:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/calc\"),i\u003dt(\"../../lib\"),a\u003dt(\"../heatmap/convert_column_xyz\"),o\u003dt(\"../heatmap/clean_2d_array\"),s\u003dt(\"../heatmap/interp2d\"),l\u003dt(\"../heatmap/find_empties\"),c\u003dt(\"../heatmap/make_bound_array\"),u\u003dt(\"./defaults\"),f\u003dt(\"../carpet/lookup_carpetid\"),h\u003dt(\"../contour/set_contours\");e.exports\u003dfunction(t,e){var r\u003de._carpetTrace\u003df(t,e);if(r\u0026\u0026r.visible\u0026\u0026\"legendonly\"!\u003d\u003dr.visible){if(!e.a||!e.b){var p\u003dt.data[r.index],d\u003dt.data[e.index];d.a||(d.a\u003dp.a),d.b||(d.b\u003dp.b),u(d,e,e._defaultColor,t._fullLayout)}var m\u003dfunction(t,e){var r,u,f,h,p,d,m,g\u003de._carpetTrace,v\u003dg.aaxis,y\u003dg.baxis;v._minDtick\u003d0,y._minDtick\u003d0,i.isArray1D(e.z)\u0026\u0026a(e,v,y,\"a\",\"b\",[\"z\"]);r\u003de._a\u003de._a||e.a,h\u003de._b\u003de._b||e.b,r\u003dr?v.makeCalcdata(e,\"_a\"):[],h\u003dh?y.makeCalcdata(e,\"_b\"):[],u\u003de.a0||0,f\u003de.da||1,p\u003de.b0||0,d\u003de.db||1,m\u003de._z\u003do(e._z||e.z,e.transpose),e._emptypoints\u003dl(m),s(m,e._emptypoints);var x\u003di.maxRowLength(m),b\u003d\"scaled\"\u003d\u003d\u003de.xtype?\"\":r,_\u003dc(e,b,u,f,x,v),w\u003d\"scaled\"\u003d\u003d\u003de.ytype?\"\":h,T\u003dc(e,w,p,d,m.length,y),k\u003d{a:_,b:T,z:m};\"levels\"\u003d\u003d\u003de.contours.type\u0026\u0026\"none\"!\u003d\u003de.contours.coloring\u0026\u0026n(t,e,{vals:m,containerStr:\"\",cLetter:\"z\"});return[k]}(t,e);return h(e,e._z),m}}},{\"../../components/colorscale/calc\":670,\"../../lib\":799,\"../carpet/lookup_carpetid\":997,\"../contour/set_contours\":1043,\"../heatmap/clean_2d_array\":1083,\"../heatmap/convert_column_xyz\":1085,\"../heatmap/find_empties\":1087,\"../heatmap/interp2d\":1090,\"../heatmap/make_bound_array\":1091,\"./defaults\":1048}],1048:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../heatmap/xyz_defaults\"),a\u003dt(\"./attributes\"),o\u003dt(\"../contour/constraint_defaults\"),s\u003dt(\"../contour/contours_defaults\"),l\u003dt(\"../contour/style_defaults\");e.exports\u003dfunction(t,e,r,c){function u(r,i){return n.coerce(t,e,a,r,i)}if(u(\"carpet\"),t.a\u0026\u0026t.b){if(!i(t,e,u,c,\"a\",\"b\"))return void(e.visible\u003d!1);u(\"text\"),\"constraint\"\u003d\u003d\u003du(\"contours.type\")?o(t,e,u,c,r,{hasHover:!1}):(s(t,e,u,(function(r){return n.coerce2(t,e,a,r)})),l(t,e,u,c,{hasHover:!1}))}else e._defaultColor\u003dr,e._length\u003dnull}},{\"../../lib\":799,\"../contour/constraint_defaults\":1029,\"../contour/contours_defaults\":1031,\"../contour/style_defaults\":1045,\"../heatmap/xyz_defaults\":1095,\"./attributes\":1046}],1049:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../contour/colorbar\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../contour/style\"),moduleType:\"trace\",name:\"contourcarpet\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"carpet\",\"contour\",\"symbols\",\"showLegend\",\"hasLines\",\"carpetDependent\",\"noHover\",\"noSortingByValue\"],meta:{}}},{\"../../plots/cartesian\":863,\"../contour/colorbar\":1027,\"../contour/style\":1044,\"./attributes\":1046,\"./calc\":1047,\"./defaults\":1048,\"./plot\":1050}],1050:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../carpet/map_1d_array\"),a\u003dt(\"../carpet/makepath\"),o\u003dt(\"../../components/drawing\"),s\u003dt(\"../../lib\"),l\u003dt(\"../contour/make_crossings\"),c\u003dt(\"../contour/find_all_paths\"),u\u003dt(\"../contour/plot\"),f\u003dt(\"../contour/constants\"),h\u003dt(\"../contour/convert_to_constraints\"),p\u003dt(\"../contour/empty_pathinfo\"),d\u003dt(\"../contour/close_boundaries\"),m\u003dt(\"../carpet/lookup_carpetid\"),g\u003dt(\"../carpet/axis_aligned_line\");function v(t,e,r){var n\u003dt.getPointAtLength(e),i\u003dt.getPointAtLength(r),a\u003di.x-n.x,o\u003di.y-n.y,s\u003dMath.sqrt(a*a+o*o);return[a/s,o/s]}function y(t){var e\u003dMath.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function x(t,e){var r\u003dMath.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}e.exports\u003dfunction(t,e,r,b){var _\u003de.xaxis,w\u003de.yaxis;s.makeTraceGroups(b,r,\"contour\").each((function(r){var b\u003dn.select(this),T\u003dr[0],k\u003dT.trace,M\u003dk._carpetTrace\u003dm(t,k),A\u003dt.calcdata[M.index][0];if(M.visible\u0026\u0026\"legendonly\"!\u003d\u003dM.visible){var S\u003dT.a,E\u003dT.b,L\u003dk.contours,C\u003dp(L,e,T),P\u003d\"constraint\"\u003d\u003d\u003dL.type,I\u003dL._operation,O\u003dP?\"\u003d\"\u003d\u003d\u003dI?\"lines\":\"fill\":L.coloring,z\u003d[[S[0],E[E.length-1]],[S[S.length-1],E[E.length-1]],[S[S.length-1],E[0]],[S[0],E[0]]];l(C);var D\u003d1e-8*(S[S.length-1]-S[0]),R\u003d1e-8*(E[E.length-1]-E[0]);c(C,D,R);var F,B,N,j,U\u003dC;\"constraint\"\u003d\u003d\u003dL.type\u0026\u0026(U\u003dh(C,I)),function(t,e){var r,n,i,a,o,s,l,c,u;for(r\u003d0;r\u003ct.length;r++){for(a\u003dt[r],o\u003da.pedgepaths\u003d[],s\u003da.ppaths\u003d[],n\u003d0;n\u003ca.edgepaths.length;n++){for(u\u003da.edgepaths[n],l\u003d[],i\u003d0;i\u003cu.length;i++)l[i]\u003de(u[i]);o.push(l)}for(n\u003d0;n\u003ca.paths.length;n++){for(u\u003da.paths[n],c\u003d[],i\u003d0;i\u003cu.length;i++)c[i]\u003de(u[i]);s.push(c)}}}(C,H);var V\u003d[];for(j\u003dA.clipsegments.length-1;j\u003e\u003d0;j--)F\u003dA.clipsegments[j],B\u003di([],F.x,_.c2p),N\u003di([],F.y,w.c2p),B.reverse(),N.reverse(),V.push(a(B,N,F.bicubic));var q\u003d\"M\"+V.join(\"L\")+\"Z\";!function(t,e,r,n,o,l){var c,u,f,h,p\u003ds.ensureSingle(t,\"g\",\"contourbg\").selectAll(\"path\").data(\"fill\"!\u003d\u003dl||o?[]:[0]);p.enter().append(\"path\"),p.exit().remove();var d\u003d[];for(h\u003d0;h\u003ce.length;h++)c\u003de[h],u\u003di([],c.x,r.c2p),f\u003di([],c.y,n.c2p),d.push(a(u,f,c.bicubic));p.attr(\"d\",\"M\"+d.join(\"L\")+\"Z\").style(\"stroke\",\"none\")}(b,A.clipsegments,_,w,P,O),function(t,e,r,i,a,l,c,u,f,h,p){var m\u003d\"fill\"\u003d\u003d\u003dh;m\u0026\u0026d(a,t.contours);var v\u003ds.ensureSingle(e,\"g\",\"contourfill\").selectAll(\"path\").data(m?a:[]);v.enter().append(\"path\"),v.exit().remove(),v.each((function(t){var e\u003d(t.prefixBoundary?p:\"\")+function(t,e,r,n,i,a,l,c){var u,f,h,p,d,m,v,y\u003d\"\",x\u003de.edgepaths.map((function(t,e){return e})),b\u003d!0,_\u003d1e-4*Math.abs(r[0][0]-r[2][0]),w\u003d1e-4*Math.abs(r[0][1]-r[2][1]);function T(t){return Math.abs(t[1]-r[0][1])\u003cw}function k(t){return Math.abs(t[1]-r[2][1])\u003cw}function M(t){return Math.abs(t[0]-r[0][0])\u003c_}function A(t){return Math.abs(t[0]-r[2][0])\u003c_}function S(t,e){var r,n,o,s,u\u003d\"\";for(T(t)\u0026\u0026!A(t)||k(t)\u0026\u0026!M(t)?(s\u003di.aaxis,o\u003dg(i,a,[t[0],e[0]],.5*(t[1]+e[1]))):(s\u003di.baxis,o\u003dg(i,a,.5*(t[0]+e[0]),[t[1],e[1]])),r\u003d1;r\u003co.length;r++)for(u+\u003ds.smoothing?\"C\":\"L\",n\u003d0;n\u003co[r].length;n++){var f\u003do[r][n];u+\u003d[l.c2p(f[0]),c.c2p(f[1])]+\" \"}return u}u\u003d0,f\u003dnull;for(;x.length;){var E\u003de.edgepaths[u][0];for(f\u0026\u0026(y+\u003dS(f,E)),v\u003do.smoothopen(e.edgepaths[u].map(n),e.smoothing),y+\u003db?v:v.replace(/^M/,\"L\"),x.splice(x.indexOf(u),1),f\u003de.edgepaths[u][e.edgepaths[u].length-1],d\u003d-1,p\u003d0;p\u003c4;p++){if(!f){s.log(\"Missing end?\",u,e);break}for(T(f)\u0026\u0026!A(f)?h\u003dr[1]:M(f)?h\u003dr[0]:k(f)?h\u003dr[3]:A(f)\u0026\u0026(h\u003dr[2]),m\u003d0;m\u003ce.edgepaths.length;m++){var L\u003de.edgepaths[m][0];Math.abs(f[0]-h[0])\u003c_?Math.abs(f[0]-L[0])\u003c_\u0026\u0026(L[1]-f[1])*(h[1]-L[1])\u003e\u003d0\u0026\u0026(h\u003dL,d\u003dm):Math.abs(f[1]-h[1])\u003cw?Math.abs(f[1]-L[1])\u003cw\u0026\u0026(L[0]-f[0])*(h[0]-L[0])\u003e\u003d0\u0026\u0026(h\u003dL,d\u003dm):s.log(\"endpt to newendpt is not vert. or horz.\",f,h,L)}if(d\u003e\u003d0)break;y+\u003dS(f,h),f\u003dh}if(d\u003d\u003d\u003de.edgepaths.length){s.log(\"unclosed perimeter path\");break}u\u003dd,(b\u003d-1\u003d\u003d\u003dx.indexOf(u))\u0026\u0026(u\u003dx[0],y+\u003dS(f,h)+\"Z\",f\u003dnull)}for(u\u003d0;u\u003ce.paths.length;u++)y+\u003do.smoothclosed(e.paths[u].map(n),e.smoothing);return y}(0,t,l,c,u,f,r,i);e?n.select(this).attr(\"d\",e).style(\"stroke\",\"none\"):n.select(this).remove()}))}(k,b,_,w,U,z,H,M,A,O,q),function(t,e,r,i,a,l,c){var h\u003ds.ensureSingle(t,\"g\",\"contourlines\"),p\u003d!1!\u003d\u003da.showlines,d\u003da.showlabels,m\u003dp\u0026\u0026d,g\u003du.createLines(h,p||d,e),b\u003du.createLineClip(h,m,r,i.trace.uid),_\u003dt.selectAll(\"g.contourlabels\").data(d?[0]:[]);if(_.exit().remove(),_.enter().append(\"g\").classed(\"contourlabels\",!0),d){var w\u003dl.xaxis,T\u003dl.yaxis,k\u003dw._length,M\u003dT._length,A\u003d[[[0,0],[k,0],[k,M],[0,M]]],S\u003d[];s.clearLocationCache();var E\u003du.labelFormatter(r,i),L\u003do.tester.append(\"text\").attr(\"data-notex\",1).call(o.font,a.labelfont),C\u003d{left:0,right:k,center:k/2,top:0,bottom:M,middle:M/2},P\u003dMath.sqrt(k*k+M*M),I\u003df.LABELDISTANCE*P/Math.max(1,e.length/f.LABELINCREASE);g.each((function(t){var e\u003du.calcTextOpts(t.level,E,L,r);n.select(this).selectAll(\"path\").each((function(r){var n\u003ds.getVisibleSegment(this,C,e.height/2);if(n\u0026\u0026(function(t,e,r,n,i,a){for(var o,s\u003d0;s\u003cr.pedgepaths.length;s++)e\u003d\u003d\u003dr.pedgepaths[s]\u0026\u0026(o\u003dr.edgepaths[s]);if(!o)return;var l\u003di.a[0],c\u003di.a[i.a.length-1],u\u003di.b[0],f\u003di.b[i.b.length-1];function h(t,e){var r,n\u003d0;return(Math.abs(t[0]-l)\u003c.1||Math.abs(t[0]-c)\u003c.1)\u0026\u0026(r\u003dy(i.dxydb_rough(t[0],t[1],.1)),n\u003dMath.max(n,a*x(e,r)/2)),(Math.abs(t[1]-u)\u003c.1||Math.abs(t[1]-f)\u003c.1)\u0026\u0026(r\u003dy(i.dxyda_rough(t[0],t[1],.1)),n\u003dMath.max(n,a*x(e,r)/2)),n}var p\u003dv(t,0,1),d\u003dv(t,n.total,n.total-1),m\u003dh(o[0],p),g\u003dn.total-h(o[o.length-1],d);n.min\u003cm\u0026\u0026(n.min\u003dm);n.max\u003eg\u0026\u0026(n.max\u003dg);n.len\u003dn.max-n.min}(this,r,t,n,c,e.height),!(n.len\u003c(e.width+e.height)*f.LABELMIN)))for(var i\u003dMath.min(Math.ceil(n.len/I),f.LABELMAX),a\u003d0;a\u003ci;a++){var o\u003du.findBestTextLocation(this,n,e,S,C);if(!o)break;u.addLabelData(o,e,S,A)}}))})),L.remove(),u.drawLabels(_,S,r,b,m?A:null)}d\u0026\u0026!p\u0026\u0026g.remove()}(b,C,t,T,L,e,M),o.setClipUrl(b,M._clipPathId,t)}function H(t){var e\u003dM.ab2xy(t[0],t[1],!0);return[_.c2p(e[0]),w.c2p(e[1])]}}))}},{\"../../components/drawing\":684,\"../../lib\":799,\"../carpet/axis_aligned_line\":981,\"../carpet/lookup_carpetid\":997,\"../carpet/makepath\":998,\"../carpet/map_1d_array\":999,\"../contour/close_boundaries\":1026,\"../contour/constants\":1028,\"../contour/convert_to_constraints\":1032,\"../contour/empty_pathinfo\":1034,\"../contour/find_all_paths\":1036,\"../contour/make_crossings\":1041,\"../contour/plot\":1042,\"@plotly/d3\":58}],1051:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/attributes\"),i\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,a\u003dt(\"../../plots/attributes\"),o\u003dt(\"../scattermapbox/attributes\"),s\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003ds({lon:o.lon,lat:o.lat,z:{valType:\"data_array\",editType:\"calc\"},radius:{valType:\"number\",editType:\"plot\",arrayOk:!0,min:1,dflt:30},below:{valType:\"string\",editType:\"plot\"},text:o.text,hovertext:o.hovertext,hoverinfo:s({},a.hoverinfo,{flags:[\"lon\",\"lat\",\"z\",\"text\",\"name\"]}),hovertemplate:i(),showlegend:s({},a.showlegend,{dflt:!1})},n(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"../scattermapbox/attributes\":1279}],1052:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\").isArrayOrTypedArray,a\u003dt(\"../../constants/numerical\").BADNUM,o\u003dt(\"../../components/colorscale/calc\"),s\u003dt(\"../../lib\")._;e.exports\u003dfunction(t,e){for(var r\u003de._length,l\u003dnew Array(r),c\u003de.z,u\u003di(c)\u0026\u0026c.length,f\u003d0;f\u003cr;f++){var h\u003dl[f]\u003d{},p\u003de.lon[f],d\u003de.lat[f];if(h.lonlat\u003dn(p)\u0026\u0026n(d)?[+p,+d]:[a,a],u){var m\u003dc[f];h.z\u003dn(m)?m:a}}return o(t,e,{vals:u?c:[0,1],containerStr:\"\",cLetter:\"z\"}),r\u0026\u0026(l[0].t\u003d{labels:{lat:s(t,\"lat:\")+\" \",lon:s(t,\"lon:\")+\" \"}}),l}},{\"../../components/colorscale/calc\":670,\"../../constants/numerical\":775,\"../../lib\":799,\"fast-isnumeric\":245}],1053:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../../components/colorscale\"),s\u003dt(\"../../constants/numerical\").BADNUM,l\u003dt(\"../../lib/geojson_utils\").makeBlank;e.exports\u003dfunction(t){var e\u003dt[0].trace,r\u003d!0\u003d\u003d\u003de.visible\u0026\u00260!\u003d\u003de._length,c\u003de._opts\u003d{heatmap:{layout:{visibility:\"none\"},paint:{}},geojson:l()};if(!r)return c;var u,f\u003d[],h\u003de.z,p\u003de.radius,d\u003di.isArrayOrTypedArray(h)\u0026\u0026h.length,m\u003di.isArrayOrTypedArray(p);for(u\u003d0;u\u003ct.length;u++){var g\u003dt[u],v\u003dg.lonlat;if(v[0]!\u003d\u003ds){var y\u003d{};if(d){var x\u003dg.z;y.z\u003dx!\u003d\u003ds?x:0}m\u0026\u0026(y.r\u003dn(p[u])\u0026\u0026p[u]\u003e0?+p[u]:0),f.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:v},properties:y})}}var b\u003do.extractOpts(e),_\u003db.reversescale?o.flipScale(b.colorscale):b.colorscale,w\u003d_[0][1],T\u003d[\"interpolate\",[\"linear\"],[\"heatmap-density\"],0,a.opacity(w)\u003c1?w:a.addOpacity(w,0)];for(u\u003d1;u\u003c_.length;u++)T.push(_[u][0],_[u][1]);var k\u003d[\"interpolate\",[\"linear\"],[\"get\",\"z\"],b.min,0,b.max,1];return i.extendFlat(c.heatmap.paint,{\"heatmap-weight\":d?k:1/(b.max-b.min),\"heatmap-color\":T,\"heatmap-radius\":m?{type:\"identity\",property:\"r\"}:e.radius,\"heatmap-opacity\":e.opacity}),c.geojson\u003d{type:\"FeatureCollection\",features:f},c.heatmap.layout.visibility\u003d\"visible\",c}},{\"../../components/color\":662,\"../../components/colorscale\":674,\"../../constants/numerical\":775,\"../../lib\":799,\"../../lib/geojson_utils\":793,\"fast-isnumeric\":245}],1054:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/defaults\"),a\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l\u003ds(\"lon\")||[],c\u003ds(\"lat\")||[],u\u003dMath.min(l.length,c.length);u?(e._length\u003du,s(\"z\"),s(\"radius\"),s(\"below\"),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),i(t,e,o,s,{prefix:\"\",cLetter:\"z\"})):e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"./attributes\":1051}],1055:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return t.lon\u003de.lon,t.lat\u003de.lat,t.z\u003de.z,t}},{}],1056:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../scattermapbox/hover\").hoverPoints,a\u003dt(\"../scattermapbox/hover\").getExtraText;e.exports\u003dfunction(t,e,r){var o\u003di(t,e,r);if(o){var s\u003do[0],l\u003ds.cd,c\u003dl[0].trace,u\u003dl[s.index];if(delete s.color,\"z\"in u){var f\u003ds.subplot.mockAxis;s.z\u003du.z,s.zLabel\u003dn.tickText(f,f.c2l(u.z),\"hover\").text}return s.extraText\u003da(c,u,l[0].t.labels),[s]}}},{\"../../plots/cartesian/axes\":849,\"../scattermapbox/hover\":1284}],1057:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),formatLabels:t(\"../scattermapbox/format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),getBelow:function(t,e){for(var r\u003de.getMapLayers(),n\u003d0;n\u003cr.length;n++){var i\u003dr[n],a\u003di.id;if(\"symbol\"\u003d\u003d\u003di.type\u0026\u0026\"string\"\u003d\u003dtypeof a\u0026\u0026-1\u003d\u003d\u003da.indexOf(\"plotly-\"))return a}},moduleType:\"trace\",name:\"densitymapbox\",basePlotModule:t(\"../../plots/mapbox\"),categories:[\"mapbox\",\"gl\",\"showLegend\"],meta:{hr_name:\"density_mapbox\"}}},{\"../../plots/mapbox\":907,\"../heatmap/colorbar\":1084,\"../scattermapbox/format_labels\":1283,\"./attributes\":1051,\"./calc\":1052,\"./defaults\":1054,\"./event_data\":1055,\"./hover\":1056,\"./plot\":1058}],1058:[function(t,e,r){\"use strict\";var n\u003dt(\"./convert\"),i\u003dt(\"../../plots/mapbox/constants\").traceLayerPrefix;function a(t,e){this.type\u003d\"densitymapbox\",this.subplot\u003dt,this.uid\u003de,this.sourceId\u003d\"source-\"+e,this.layerList\u003d[[\"heatmap\",i+e+\"-heatmap\"]],this.below\u003dnull}var o\u003da.prototype;o.update\u003dfunction(t){var e\u003dthis.subplot,r\u003dthis.layerList,i\u003dn(t),a\u003de.belowLookup[\"trace-\"+this.uid];e.map.getSource(this.sourceId).setData(i.geojson),a!\u003d\u003dthis.below\u0026\u0026(this._removeLayers(),this._addLayers(i,a),this.below\u003da);for(var o\u003d0;o\u003cr.length;o++){var s\u003dr[o],l\u003ds[0],c\u003ds[1],u\u003di[l];e.setOptions(c,\"setLayoutProperty\",u.layout),\"visible\"\u003d\u003d\u003du.layout.visibility\u0026\u0026e.setOptions(c,\"setPaintProperty\",u.paint)}},o._addLayers\u003dfunction(t,e){for(var r\u003dthis.subplot,n\u003dthis.layerList,i\u003dthis.sourceId,a\u003d0;a\u003cn.length;a++){var o\u003dn[a],s\u003do[0],l\u003dt[s];r.addLayer({type:s,id:o[1],source:i,layout:l.layout,paint:l.paint},e)}},o._removeLayers\u003dfunction(){for(var t\u003dthis.subplot.map,e\u003dthis.layerList,r\u003de.length-1;r\u003e\u003d0;r--)t.removeLayer(e[r][1])},o.dispose\u003dfunction(){var t\u003dthis.subplot.map;this._removeLayers(),t.removeSource(this.sourceId)},e.exports\u003dfunction(t,e){var r\u003de[0].trace,i\u003dnew a(t,r.uid),o\u003di.sourceId,s\u003dn(e),l\u003di.below\u003dt.belowLookup[\"trace-\"+r.uid];return t.map.addSource(o,{type:\"geojson\",data:s.geojson}),i._addLayers(s,l),i}},{\"../../plots/mapbox/constants\":905,\"./convert\":1053}],1059:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e){for(var r\u003d0;r\u003ct.length;r++)t[r].i\u003dr;n.mergeArray(e.text,t,\"tx\"),n.mergeArray(e.hovertext,t,\"htx\");var i\u003de.marker;if(i){n.mergeArray(i.opacity,t,\"mo\"),n.mergeArray(i.color,t,\"mc\");var a\u003di.line;a\u0026\u0026(n.mergeArray(a.color,t,\"mlc\"),n.mergeArrayCastPositive(a.width,t,\"mlw\"))}}},{\"../../lib\":799}],1060:[function(t,e,r){\"use strict\";var n,i\u003dt(\"../bar/attributes\"),a\u003dt(\"../scatter/attributes\").line,o\u003dt(\"../../plots/attributes\"),s\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,l\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,c\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,u\u003dt(\"./constants\"),f\u003dt(\"../../lib/extend\").extendFlat,h\u003dt(\"../../components/color\");e.exports\u003d{x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:s(\"x\"),yhoverformat:s(\"y\"),hovertext:i.hovertext,hovertemplate:l({},{keys:u.eventDataKeys}),hoverinfo:f({},o.hoverinfo,{flags:[\"name\",\"x\",\"y\",\"text\",\"percent initial\",\"percent previous\",\"percent total\"]}),textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"percent initial\",\"percent previous\",\"percent total\",\"value\"],extras:[\"none\"],editType:\"plot\",arrayOk:!1},texttemplate:c({editType:\"plot\"},{keys:u.eventDataKeys.concat([\"label\",\"value\"])}),text:i.text,textposition:i.textposition,insidetextanchor:f({},i.insidetextanchor,{dflt:\"middle\"}),textangle:f({},i.textangle,{dflt:0}),textfont:i.textfont,insidetextfont:i.insidetextfont,outsidetextfont:i.outsidetextfont,constraintext:i.constraintext,cliponaxis:i.cliponaxis,orientation:f({},i.orientation,{}),offset:f({},i.offset,{arrayOk:!1}),width:f({},i.width,{arrayOk:!1}),marker:(n\u003df({},i.marker),delete n.pattern,n),connector:{fillcolor:{valType:\"color\",editType:\"style\"},line:{color:f({},a.color,{dflt:h.defaultLine}),width:f({},a.width,{dflt:0,editType:\"plot\"}),dash:a.dash,editType:\"style\"},visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},offsetgroup:i.offsetgroup,alignmentgroup:i.alignmentgroup}},{\"../../components/color\":662,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../bar/attributes\":937,\"../scatter/attributes\":1214,\"./constants\":1062}],1061:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../plots/cartesian/align_period\"),a\u003dt(\"./arrays_to_calcdata\"),o\u003dt(\"../scatter/calc_selection\"),s\u003dt(\"../../constants/numerical\").BADNUM;function l(t){return t\u003d\u003d\u003ds?0:t}e.exports\u003dfunction(t,e){var r,c,u,f,h,p,d\u003dn.getFromId(t,e.xaxis||\"x\"),m\u003dn.getFromId(t,e.yaxis||\"y\");\"h\"\u003d\u003d\u003de.orientation?(r\u003dd.makeCalcdata(e,\"x\"),u\u003dm.makeCalcdata(e,\"y\"),c\u003di(e,m,\"y\",u),p\u003d!!e.yperiodalignment):(r\u003dm.makeCalcdata(e,\"y\"),u\u003dd.makeCalcdata(e,\"x\"),c\u003di(e,d,\"x\",u),p\u003d!!e.xperiodalignment);var g,v\u003dMath.min(c.length,r.length),y\u003dnew Array(v);for(e._base\u003d[],f\u003d0;f\u003cv;f++){r[f]\u003c0\u0026\u0026(r[f]\u003ds);var x\u003d!1;r[f]!\u003d\u003ds\u0026\u0026f+1\u003cv\u0026\u0026r[f+1]!\u003d\u003ds\u0026\u0026(x\u003d!0),h\u003dy[f]\u003d{p:c[f],s:r[f],cNext:x},e._base[f]\u003d-.5*h.s,p\u0026\u0026(y[f].orig_p\u003du[f]),e.ids\u0026\u0026(h.id\u003dString(e.ids[f])),0\u003d\u003d\u003df\u0026\u0026(y[0].vTotal\u003d0),y[0].vTotal+\u003dl(h.s),h.begR\u003dl(h.s)/l(y[0].s)}for(f\u003d0;f\u003cv;f++)(h\u003dy[f]).s!\u003d\u003ds\u0026\u0026(h.sumR\u003dh.s/y[0].vTotal,h.difR\u003dvoid 0!\u003d\u003dg?h.s/g:1,g\u003dh.s);return a(y,e),o(y,e),y}},{\"../../constants/numerical\":775,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849,\"../scatter/calc_selection\":1216,\"./arrays_to_calcdata\":1059}],1062:[function(t,e,r){\"use strict\";e.exports\u003d{eventDataKeys:[\"percentInitial\",\"percentPrevious\",\"percentTotal\"]}},{}],1063:[function(t,e,r){\"use strict\";var n\u003dt(\"../bar/cross_trace_calc\").setGroupPositions;e.exports\u003dfunction(t,e){var r,i,a\u003dt._fullLayout,o\u003dt._fullData,s\u003dt.calcdata,l\u003de.xaxis,c\u003de.yaxis,u\u003d[],f\u003d[],h\u003d[];for(i\u003d0;i\u003co.length;i++){var p\u003do[i],d\u003d\"h\"\u003d\u003d\u003dp.orientation;!0\u003d\u003d\u003dp.visible\u0026\u0026p.xaxis\u003d\u003d\u003dl._id\u0026\u0026p.yaxis\u003d\u003d\u003dc._id\u0026\u0026\"funnel\"\u003d\u003d\u003dp.type\u0026\u0026(r\u003ds[i],d?h.push(r):f.push(r),u.push(r))}var m\u003d{mode:a.funnelmode,norm:a.funnelnorm,gap:a.funnelgap,groupgap:a.funnelgroupgap};for(n(t,l,c,f,m),n(t,c,l,h,m),i\u003d0;i\u003cu.length;i++){r\u003du[i];for(var g\u003d0;g\u003cr.length;g++)g+1\u003cr.length\u0026\u0026(r[g].nextP0\u003dr[g+1].p0,r[g].nextS0\u003dr[g+1].s0,r[g].nextP1\u003dr[g+1].p1,r[g].nextS1\u003dr[g+1].s1)}}},{\"../bar/cross_trace_calc\":940}],1064:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../bar/defaults\").handleGroupingDefaults,a\u003dt(\"../bar/defaults\").handleText,o\u003dt(\"../scatter/xy_defaults\"),s\u003dt(\"../scatter/period_defaults\"),l\u003dt(\"./attributes\"),c\u003dt(\"../../components/color\");e.exports\u003d{supplyDefaults:function(t,e,r,i){function u(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,u)){s(t,e,i,u),u(\"xhoverformat\"),u(\"yhoverformat\"),u(\"orientation\",e.y\u0026\u0026!e.x?\"v\":\"h\"),u(\"offset\"),u(\"width\");var f\u003du(\"text\");u(\"hovertext\"),u(\"hovertemplate\");var h\u003du(\"textposition\");a(t,e,i,u,h,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\"none\"\u003d\u003d\u003de.textposition||e.texttemplate||u(\"textinfo\",Array.isArray(f)?\"text+value\":\"value\");var p\u003du(\"marker.color\",r);if(u(\"marker.line.color\",c.defaultLine),u(\"marker.line.width\"),u(\"connector.visible\"))u(\"connector.fillcolor\",function(t){var e\u003dn.isArrayOrTypedArray(t)?\"#000\":t;return c.addOpacity(e,.5*c.opacity(e))}(p)),u(\"connector.line.width\")\u0026\u0026(u(\"connector.line.color\"),u(\"connector.line.dash\"))}else e.visible\u003d!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if(\"group\"\u003d\u003d\u003de.funnelmode)for(var s\u003d0;s\u003ct.length;s++)r\u003d(a\u003dt[s])._input,i(r,a,e,o)}}},{\"../../components/color\":662,\"../../lib\":799,\"../bar/defaults\":941,\"../scatter/period_defaults\":1234,\"../scatter/xy_defaults\":1241,\"./attributes\":1060}],1065:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return t.x\u003d\"xVal\"in e?e.xVal:e.x,t.y\u003d\"yVal\"in e?e.yVal:e.y,\"percentInitial\"in e\u0026\u0026(t.percentInitial\u003de.percentInitial),\"percentPrevious\"in e\u0026\u0026(t.percentPrevious\u003de.percentPrevious),\"percentTotal\"in e\u0026\u0026(t.percentTotal\u003de.percentTotal),e.xa\u0026\u0026(t.xaxis\u003de.xa),e.ya\u0026\u0026(t.yaxis\u003de.ya),t}},{}],1066:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\").opacity,i\u003dt(\"../bar/hover\").hoverOnBars,a\u003dt(\"../../lib\").formatPercent;e.exports\u003dfunction(t,e,r,o,s){var l\u003di(t,e,r,o,s);if(l){var c\u003dl.cd,u\u003dc[0].trace,f\u003d\"h\"\u003d\u003d\u003du.orientation,h\u003dc[l.index];l[(f?\"x\":\"y\")+\"LabelVal\"]\u003dh.s,l.percentInitial\u003dh.begR,l.percentInitialLabel\u003da(h.begR,1),l.percentPrevious\u003dh.difR,l.percentPreviousLabel\u003da(h.difR,1),l.percentTotal\u003dh.sumR,l.percentTotalLabel\u003da(h.sumR,1);var p\u003dh.hi||u.hoverinfo,d\u003d[];if(p\u0026\u0026\"none\"!\u003d\u003dp\u0026\u0026\"skip\"!\u003d\u003dp){var m\u003d\"all\"\u003d\u003d\u003dp,g\u003dp.split(\"+\"),v\u003dfunction(t){return m||-1!\u003d\u003dg.indexOf(t)};v(\"percent initial\")\u0026\u0026d.push(l.percentInitialLabel+\" of initial\"),v(\"percent previous\")\u0026\u0026d.push(l.percentPreviousLabel+\" of previous\"),v(\"percent total\")\u0026\u0026d.push(l.percentTotalLabel+\" of total\")}return l.extraText\u003dd.join(\"\u003cbr\u003e\"),l.color\u003dfunction(t,e){var r\u003dt.marker,i\u003de.mc||r.color,a\u003de.mlc||r.line.color,o\u003de.mlw||r.line.width;if(n(i))return i;if(n(a)\u0026\u0026o)return a}(u,h),[l]}}},{\"../../components/color\":662,\"../../lib\":799,\"../bar/hover\":944}],1067:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\"),plot:t(\"./plot\"),style:t(\"./style\").style,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"../bar/select\"),moduleType:\"trace\",name:\"funnel\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"oriented\",\"showLegend\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":863,\"../bar/select\":949,\"./attributes\":1060,\"./calc\":1061,\"./cross_trace_calc\":1063,\"./defaults\":1064,\"./event_data\":1065,\"./hover\":1066,\"./layout_attributes\":1068,\"./layout_defaults\":1069,\"./plot\":1070,\"./style\":1071}],1068:[function(t,e,r){\"use strict\";e.exports\u003d{funnelmode:{valType:\"enumerated\",values:[\"stack\",\"group\",\"overlay\"],dflt:\"stack\",editType:\"calc\"},funnelgap:{valType:\"number\",min:0,max:1,editType:\"calc\"},funnelgroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},{}],1069:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e,r){var a\u003d!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s\u003d0;s\u003cr.length;s++){var l\u003dr[s];if(l.visible\u0026\u0026\"funnel\"\u003d\u003d\u003dl.type){a\u003d!0;break}}a\u0026\u0026(o(\"funnelmode\"),o(\"funnelgap\",.2),o(\"funnelgroupgap\"))}},{\"../../lib\":799,\"./layout_attributes\":1068}],1070:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../constants/numerical\").BADNUM,s\u003dt(\"../bar/plot\"),l\u003dt(\"../bar/uniform_text\").clearMinTextSize;function c(t,e,r,n){var i\u003d[],a\u003d[],o\u003dn?e:r,s\u003dn?r:e;return i[0]\u003do.c2p(t.s0,!0),a[0]\u003ds.c2p(t.p0,!0),i[1]\u003do.c2p(t.s1,!0),a[1]\u003ds.c2p(t.p1,!0),i[2]\u003do.c2p(t.nextS0,!0),a[2]\u003ds.c2p(t.nextP0,!0),i[3]\u003do.c2p(t.nextS1,!0),a[3]\u003ds.c2p(t.nextP1,!0),n?[i,a]:[a,i]}e.exports\u003dfunction(t,e,r,u){var f\u003dt._fullLayout;l(\"funnel\",f),function(t,e,r,s){var l\u003de.xaxis,u\u003de.yaxis;i.makeTraceGroups(s,r,\"trace bars\").each((function(r){var s\u003dn.select(this),f\u003dr[0].trace,h\u003di.ensureSingle(s,\"g\",\"regions\");if(f.connector\u0026\u0026f.connector.visible){var p\u003d\"h\"\u003d\u003d\u003df.orientation,d\u003dh.selectAll(\"g.region\").data(i.identity);d.enter().append(\"g\").classed(\"region\",!0),d.exit().remove();var m\u003dd.size();d.each((function(r,s){if(s\u003d\u003d\u003dm-1||r.cNext){var f\u003dc(r,l,u,p),h\u003df[0],d\u003df[1],g\u003d\"\";h[0]!\u003d\u003do\u0026\u0026d[0]!\u003d\u003do\u0026\u0026h[1]!\u003d\u003do\u0026\u0026d[1]!\u003d\u003do\u0026\u0026h[2]!\u003d\u003do\u0026\u0026d[2]!\u003d\u003do\u0026\u0026h[3]!\u003d\u003do\u0026\u0026d[3]!\u003d\u003do\u0026\u0026(g+\u003dp?\"M\"+h[0]+\",\"+d[1]+\"L\"+h[2]+\",\"+d[2]+\"H\"+h[3]+\"L\"+h[1]+\",\"+d[1]+\"Z\":\"M\"+h[1]+\",\"+d[1]+\"L\"+h[2]+\",\"+d[3]+\"V\"+d[2]+\"L\"+h[1]+\",\"+d[0]+\"Z\"),\"\"\u003d\u003d\u003dg\u0026\u0026(g\u003d\"M0,0Z\"),i.ensureSingle(n.select(this),\"path\").attr(\"d\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else h.remove()}))}(t,e,r,u),function(t,e,r,o){var s\u003de.xaxis,l\u003de.yaxis;i.makeTraceGroups(o,r,\"trace bars\").each((function(r){var o\u003dn.select(this),u\u003dr[0].trace,f\u003di.ensureSingle(o,\"g\",\"lines\");if(u.connector\u0026\u0026u.connector.visible\u0026\u0026u.connector.line.width){var h\u003d\"h\"\u003d\u003d\u003du.orientation,p\u003df.selectAll(\"g.line\").data(i.identity);p.enter().append(\"g\").classed(\"line\",!0),p.exit().remove();var d\u003dp.size();p.each((function(r,o){if(o\u003d\u003d\u003dd-1||r.cNext){var u\u003dc(r,s,l,h),f\u003du[0],p\u003du[1],m\u003d\"\";void 0!\u003d\u003df[3]\u0026\u0026void 0!\u003d\u003dp[3]\u0026\u0026(h?(m+\u003d\"M\"+f[0]+\",\"+p[1]+\"L\"+f[2]+\",\"+p[2],m+\u003d\"M\"+f[1]+\",\"+p[1]+\"L\"+f[3]+\",\"+p[2]):(m+\u003d\"M\"+f[1]+\",\"+p[1]+\"L\"+f[2]+\",\"+p[3],m+\u003d\"M\"+f[1]+\",\"+p[0]+\"L\"+f[2]+\",\"+p[2])),\"\"\u003d\u003d\u003dm\u0026\u0026(m\u003d\"M0,0Z\"),i.ensureSingle(n.select(this),\"path\").attr(\"d\",m).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,u),s.plot(t,e,r,u,{mode:f.funnelmode,norm:f.funnelmode,gap:f.funnelgap,groupgap:f.funnelgroupgap})}},{\"../../components/drawing\":684,\"../../constants/numerical\":775,\"../../lib\":799,\"../bar/plot\":948,\"../bar/uniform_text\":953,\"@plotly/d3\":58}],1071:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../../constants/interactions\").DESELECTDIM,s\u003dt(\"../bar/style\"),l\u003dt(\"../bar/uniform_text\").resizeText,c\u003ds.styleTextPoints;e.exports\u003d{style:function(t,e,r){var s\u003dr||n.select(t).selectAll(\"g.funnellayer\").selectAll(\"g.trace\");l(t,s,\"funnel\"),s.style(\"opacity\",(function(t){return t[0].trace.opacity})),s.each((function(e){var r\u003dn.select(this),s\u003de[0].trace;r.selectAll(\".point \u003e path\").each((function(t){if(!t.isBlank){var e\u003ds.marker;n.select(this).call(a.fill,t.mc||e.color).call(a.stroke,t.mlc||e.line.color).call(i.dashLine,e.line.dash,t.mlw||e.line.width).style(\"opacity\",s.selectedpoints\u0026\u0026!t.selected?o:1)}})),c(r,s,t),r.selectAll(\".regions\").each((function(){n.select(this).selectAll(\"path\").style(\"stroke-width\",0).call(a.fill,s.connector.fillcolor)})),r.selectAll(\".lines\").each((function(){var t\u003ds.connector.line;i.lineGroupStyle(n.select(this).selectAll(\"path\"),t.width,t.color,t.dash)}))}))}}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../constants/interactions\":774,\"../bar/style\":951,\"../bar/uniform_text\":953,\"@plotly/d3\":58}],1072:[function(t,e,r){\"use strict\";var n\u003dt(\"../pie/attributes\"),i\u003dt(\"../../plots/attributes\"),a\u003dt(\"../../plots/domain\").attributes,o\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,s\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,l\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003d{labels:n.labels,label0:n.label0,dlabel:n.dlabel,values:n.values,marker:{colors:n.marker.colors,line:{color:l({},n.marker.line.color,{dflt:null}),width:l({},n.marker.line.width,{dflt:1}),editType:\"calc\"},editType:\"calc\"},text:n.text,hovertext:n.hovertext,scalegroup:l({},n.scalegroup,{}),textinfo:l({},n.textinfo,{flags:[\"label\",\"text\",\"value\",\"percent\"]}),texttemplate:s({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),hoverinfo:l({},i.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:o({},{keys:[\"label\",\"color\",\"value\",\"text\",\"percent\"]}),textposition:l({},n.textposition,{values:[\"inside\",\"none\"],dflt:\"inside\"}),textfont:n.textfont,insidetextfont:n.insidetextfont,title:{text:n.title.text,font:n.title.font,position:l({},n.title.position,{values:[\"top left\",\"top center\",\"top right\"],dflt:\"top center\"}),editType:\"plot\"},domain:a({name:\"funnelarea\",trace:!0,editType:\"calc\"}),aspectratio:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},baseratio:{valType:\"number\",min:0,max:1,dflt:.333,editType:\"plot\"}}},{\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/domain\":877,\"../../plots/template_attributes\":922,\"../pie/attributes\":1188}],1073:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/plots\");r.name\u003d\"funnelarea\",r.plot\u003dfunction(t,e,i,a){n.plotBasePlot(r.name,t,e,i,a)},r.clean\u003dfunction(t,e,i,a){n.cleanBasePlot(r.name,t,e,i,a)}},{\"../../plots/plots\":913}],1074:[function(t,e,r){\"use strict\";var n\u003dt(\"../pie/calc\");e.exports\u003d{calc:function(t,e){return n.calc(t,e)},crossTraceCalc:function(t){n.crossTraceCalc(t,{type:\"funnelarea\"})}}},{\"../pie/calc\":1190}],1075:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../plots/domain\").defaults,o\u003dt(\"../bar/defaults\").handleText,s\u003dt(\"../pie/defaults\").handleLabelsAndValues;e.exports\u003dfunction(t,e,r,l){function c(r,a){return n.coerce(t,e,i,r,a)}var u\u003dc(\"labels\"),f\u003dc(\"values\"),h\u003ds(u,f),p\u003dh.len;if(e._hasLabels\u003dh.hasLabels,e._hasValues\u003dh.hasValues,!e._hasLabels\u0026\u0026e._hasValues\u0026\u0026(c(\"label0\"),c(\"dlabel\")),p){e._length\u003dp,c(\"marker.line.width\")\u0026\u0026c(\"marker.line.color\",l.paper_bgcolor),c(\"marker.colors\"),c(\"scalegroup\");var d,m\u003dc(\"text\"),g\u003dc(\"texttemplate\");if(g||(d\u003dc(\"textinfo\",Array.isArray(m)?\"text+percent\":\"percent\")),c(\"hovertext\"),c(\"hovertemplate\"),g||d\u0026\u0026\"none\"!\u003d\u003dd){var v\u003dc(\"textposition\");o(t,e,l,c,v,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1})}a(e,l,c),c(\"title.text\")\u0026\u0026(c(\"title.position\"),n.coerceFont(c,\"title.font\",l.font)),c(\"aspectratio\"),c(\"baseratio\")}else e.visible\u003d!1}},{\"../../lib\":799,\"../../plots/domain\":877,\"../bar/defaults\":941,\"../pie/defaults\":1191,\"./attributes\":1072}],1076:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"funnelarea\",basePlotModule:t(\"./base_plot\"),categories:[\"pie-like\",\"funnelarea\",\"showLegend\"],attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\"),style:t(\"./style\"),styleOne:t(\"../pie/style_one\"),meta:{}}},{\"../pie/style_one\":1199,\"./attributes\":1072,\"./base_plot\":1073,\"./calc\":1074,\"./defaults\":1075,\"./layout_attributes\":1077,\"./layout_defaults\":1078,\"./plot\":1079,\"./style\":1080}],1077:[function(t,e,r){\"use strict\";var n\u003dt(\"../pie/layout_attributes\").hiddenlabels;e.exports\u003d{hiddenlabels:n,funnelareacolorway:{valType:\"colorlist\",editType:\"calc\"},extendfunnelareacolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{\"../pie/layout_attributes\":1195}],1078:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"hiddenlabels\"),r(\"funnelareacolorway\",e.colorway),r(\"extendfunnelareacolors\")}},{\"../../lib\":799,\"./layout_attributes\":1077}],1079:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"../../lib\"),o\u003da.strScale,s\u003da.strTranslate,l\u003dt(\"../../lib/svg_text_utils\"),c\u003dt(\"../bar/plot\").toMoveInsideBar,u\u003dt(\"../bar/uniform_text\"),f\u003du.recordMinTextSize,h\u003du.clearMinTextSize,p\u003dt(\"../pie/helpers\"),d\u003dt(\"../pie/plot\"),m\u003dd.attachFxHandlers,g\u003dd.determineInsideTextFont,v\u003dd.layoutAreas,y\u003dd.prerenderTitles,x\u003dd.positionTitleOutside,b\u003dd.formatSliceLabel;function _(t,e){return\"l\"+(e[0]-t[0])+\",\"+(e[1]-t[1])}e.exports\u003dfunction(t,e){var r\u003dt._fullLayout;h(\"funnelarea\",r),y(e,t),v(e,r._size),a.makeTraceGroups(r._funnelarealayer,e,\"trace\").each((function(e){var u\u003dn.select(this),h\u003de[0],d\u003dh.trace;!function(t){if(!t.length)return;var e\u003dt[0],r\u003de.trace,n\u003dr.aspectratio,i\u003dr.baseratio;i\u003e.999\u0026\u0026(i\u003d.999);var a,o\u003dMath.pow(i,2),s\u003de.vTotal,l\u003ds,c\u003ds*o/(1-o)/s;function u(){var t,e\u003d{x:t\u003dMath.sqrt(c),y:-t};return[e.x,e.y]}var f,h,p\u003d[];for(p.push(u()),f\u003dt.length-1;f\u003e-1;f--)if(!(h\u003dt[f]).hidden){var d\u003dh.v/l;c+\u003dd,p.push(u())}var m\u003d1/0,g\u003d-1/0;for(f\u003d0;f\u003cp.length;f++)a\u003dp[f],m\u003dMath.min(m,a[1]),g\u003dMath.max(g,a[1]);for(f\u003d0;f\u003cp.length;f++)p[f][1]-\u003d(g+m)/2;var v\u003dp[p.length-1][0],y\u003de.r,x\u003d(g-m)/2,b\u003dy/v,_\u003dy/x*n;for(e.r\u003d_*x,f\u003d0;f\u003cp.length;f++)p[f][0]*\u003db,p[f][1]*\u003d_;var w\u003d[-(a\u003dp[0])[0],a[1]],T\u003d[a[0],a[1]],k\u003d0;for(f\u003dt.length-1;f\u003e-1;f--)if(!(h\u003dt[f]).hidden){var M\u003dp[k+\u003d1][0],A\u003dp[k][1];h.TL\u003d[-M,A],h.TR\u003d[M,A],h.BL\u003dw,h.BR\u003dT,h.pxmid\u003d(S\u003dh.TR,E\u003dh.BR,[.5*(S[0]+E[0]),.5*(S[1]+E[1])]),w\u003dh.TL,T\u003dh.TR}var S,E}(e),u.each((function(){var u\u003dn.select(this).selectAll(\"g.slice\").data(e);u.enter().append(\"g\").classed(\"slice\",!0),u.exit().remove(),u.each((function(o,s){if(o.hidden)n.select(this).selectAll(\"path,g\").remove();else{o.pointNumber\u003do.i,o.curveNumber\u003dd.index;var u\u003dh.cx,v\u003dh.cy,y\u003dn.select(this),x\u003dy.selectAll(\"path.surface\").data([o]);x.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":\"all\"}),y.call(m,t,e);var w\u003d\"M\"+(u+o.TR[0])+\",\"+(v+o.TR[1])+_(o.TR,o.BR)+_(o.BR,o.BL)+_(o.BL,o.TL)+\"Z\";x.attr(\"d\",w),b(t,o,h);var T\u003dp.castOption(d.textposition,o.pts),k\u003dy.selectAll(\"g.slicetext\").data(o.text\u0026\u0026\"none\"!\u003d\u003dT?[0]:[]);k.enter().append(\"g\").classed(\"slicetext\",!0),k.exit().remove(),k.each((function(){var h\u003da.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),p\u003da.ensureUniformFontSize(t,g(d,o,r.font));h.text(o.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,p).call(l.convertToTspans,t);var m,y,x,b\u003di.bBox(h.node()),_\u003dMath.min(o.BL[1],o.BR[1])+v,w\u003dMath.max(o.TL[1],o.TR[1])+v;y\u003dMath.max(o.TL[0],o.BL[0])+u,x\u003dMath.min(o.TR[0],o.BR[0])+u,(m\u003dc(y,x,_,w,b,{isHorizontal:!0,constrained:!0,angle:0,anchor:\"middle\"})).fontSize\u003dp.size,f(d.type,m,r),e[s].transform\u003dm,h.attr(\"transform\",a.getTextTransform(m))}))}}));var v\u003dn.select(this).selectAll(\"g.titletext\").data(d.title.text?[0]:[]);v.enter().append(\"g\").classed(\"titletext\",!0),v.exit().remove(),v.each((function(){var e\u003da.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),c\u003dd.title.text;d._meta\u0026\u0026(c\u003da.templateString(c,d._meta)),e.text(c).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(i.font,d.title.font).call(l.convertToTspans,t);var u\u003dx(h,r._size);e.attr(\"transform\",s(u.x,u.y)+o(Math.min(1,u.scale))+s(u.tx,u.ty))}))}))}))}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../bar/plot\":948,\"../bar/uniform_text\":953,\"../pie/helpers\":1193,\"../pie/plot\":1197,\"@plotly/d3\":58}],1080:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../pie/style_one\"),a\u003dt(\"../bar/uniform_text\").resizeText;e.exports\u003dfunction(t){var e\u003dt._fullLayout._funnelarealayer.selectAll(\".trace\");a(t,e,\"funnelarea\"),e.each((function(t){var e\u003dt[0].trace,r\u003dn.select(this);r.style({opacity:e.opacity}),r.selectAll(\"path.surface\").each((function(t){n.select(this).call(i,t,e)}))}))}},{\"../bar/uniform_text\":953,\"../pie/style_one\":1199,\"@plotly/d3\":58}],1081:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/attributes\"),i\u003dt(\"../../plots/attributes\"),a\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,o\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,s\u003dt(\"../../components/colorscale/attributes\"),l\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003dl({z:{valType:\"data_array\",editType:\"calc\"},x:l({},n.x,{impliedEdits:{xtype:\"array\"}}),x0:l({},n.x0,{impliedEdits:{xtype:\"scaled\"}}),dx:l({},n.dx,{impliedEdits:{xtype:\"scaled\"}}),y:l({},n.y,{impliedEdits:{ytype:\"array\"}}),y0:l({},n.y0,{impliedEdits:{ytype:\"scaled\"}}),dy:l({},n.dy,{impliedEdits:{ytype:\"scaled\"}}),xperiod:l({},n.xperiod,{impliedEdits:{xtype:\"scaled\"}}),yperiod:l({},n.yperiod,{impliedEdits:{ytype:\"scaled\"}}),xperiod0:l({},n.xperiod0,{impliedEdits:{xtype:\"scaled\"}}),yperiod0:l({},n.yperiod0,{impliedEdits:{ytype:\"scaled\"}}),xperiodalignment:l({},n.xperiodalignment,{impliedEdits:{xtype:\"scaled\"}}),yperiodalignment:l({},n.yperiodalignment,{impliedEdits:{ytype:\"scaled\"}}),text:{valType:\"data_array\",editType:\"calc\"},hovertext:{valType:\"data_array\",editType:\"calc\"},transpose:{valType:\"boolean\",dflt:!1,editType:\"calc\"},xtype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},ytype:{valType:\"enumerated\",values:[\"array\",\"scaled\"],editType:\"calc+clearAxisTypes\"},zsmooth:{valType:\"enumerated\",values:[\"fast\",\"best\",!1],dflt:!1,editType:\"calc\"},hoverongaps:{valType:\"boolean\",dflt:!0,editType:\"none\"},connectgaps:{valType:\"boolean\",editType:\"calc\"},xgap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},ygap:{valType:\"number\",dflt:0,min:0,editType:\"plot\"},xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),zhoverformat:a(\"z\",1),hovertemplate:o(),showlegend:l({},i.showlegend,{dflt:!1})},{transforms:void 0},s(\"\",{cLetter:\"z\",autoColorDflt:!1}))},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214}],1082:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../../plots/cartesian/align_period\"),s\u003dt(\"../histogram2d/calc\"),l\u003dt(\"../../components/colorscale/calc\"),c\u003dt(\"./convert_column_xyz\"),u\u003dt(\"./clean_2d_array\"),f\u003dt(\"./interp2d\"),h\u003dt(\"./find_empties\"),p\u003dt(\"./make_bound_array\"),d\u003dt(\"../../constants/numerical\").BADNUM;function m(t){for(var e\u003d[],r\u003dt.length,n\u003d0;n\u003cr;n++){var i\u003dt[n];i!\u003d\u003dd\u0026\u0026e.push(i)}return e}e.exports\u003dfunction(t,e){var r,g,v,y,x,b,_,w,T,k,M,A\u003da.getFromId(t,e.xaxis||\"x\"),S\u003da.getFromId(t,e.yaxis||\"y\"),E\u003dn.traceIs(e,\"contour\"),L\u003dn.traceIs(e,\"histogram\"),C\u003dn.traceIs(e,\"gl2d\"),P\u003dE?\"best\":e.zsmooth;if(A._minDtick\u003d0,S._minDtick\u003d0,L)y\u003d(M\u003ds(t,e)).orig_x,r\u003dM.x,g\u003dM.x0,v\u003dM.dx,w\u003dM.orig_y,x\u003dM.y,b\u003dM.y0,_\u003dM.dy,T\u003dM.z;else{var I\u003de.z;i.isArray1D(I)?(c(e,A,S,\"x\",\"y\",[\"z\"]),r\u003de._x,x\u003de._y,I\u003de._z):(y\u003de.x?A.makeCalcdata(e,\"x\"):[],w\u003de.y?S.makeCalcdata(e,\"y\"):[],r\u003do(e,A,\"x\",y),x\u003do(e,S,\"y\",w),e._x\u003dr,e._y\u003dx),g\u003de.x0,v\u003de.dx,b\u003de.y0,_\u003de.dy,T\u003du(I,e,A,S)}function O(t){P\u003de._input.zsmooth\u003de.zsmooth\u003d!1,i.warn(\u0027cannot use zsmooth: \"fast\": \u0027+t)}if((A.rangebreaks||S.rangebreaks)\u0026\u0026(T\u003dfunction(t,e,r){for(var n\u003d[],i\u003d-1,a\u003d0;a\u003cr.length;a++)if(e[a]!\u003d\u003dd){i++,n[i]\u003d[];for(var o\u003d0;o\u003cr[a].length;o++)t[o]!\u003d\u003dd\u0026\u0026n[i].push(r[a][o])}return n}(r,x,T),L||(r\u003dm(r),x\u003dm(x),e._x\u003dr,e._y\u003dx)),L||!E\u0026\u0026!e.connectgaps||(e._emptypoints\u003dh(T),f(T,e._emptypoints)),\"fast\"\u003d\u003d\u003dP)if(\"log\"\u003d\u003d\u003dA.type||\"log\"\u003d\u003d\u003dS.type)O(\"log axis found\");else if(!L){if(r.length){var z\u003d(r[r.length-1]-r[0])/(r.length-1),D\u003dMath.abs(z/100);for(k\u003d0;k\u003cr.length-1;k++)if(Math.abs(r[k+1]-r[k]-z)\u003eD){O(\"x scale is not linear\");break}}if(x.length\u0026\u0026\"fast\"\u003d\u003d\u003dP){var R\u003d(x[x.length-1]-x[0])/(x.length-1),F\u003dMath.abs(R/100);for(k\u003d0;k\u003cx.length-1;k++)if(Math.abs(x[k+1]-x[k]-R)\u003eF){O(\"y scale is not linear\");break}}}var B\u003di.maxRowLength(T),N\u003d\"scaled\"\u003d\u003d\u003de.xtype?\"\":r,j\u003dp(e,N,g,v,B,A),U\u003d\"scaled\"\u003d\u003d\u003de.ytype?\"\":x,V\u003dp(e,U,b,_,T.length,S);C||(e._extremes[A._id]\u003da.findExtremes(A,j),e._extremes[S._id]\u003da.findExtremes(S,V));var q\u003d{x:j,y:V,z:T,text:e._text||e.text,hovertext:e._hovertext||e.hovertext};if(e.xperiodalignment\u0026\u0026y\u0026\u0026(q.orig_x\u003dy),e.yperiodalignment\u0026\u0026w\u0026\u0026(q.orig_y\u003dw),N\u0026\u0026N.length\u003d\u003d\u003dj.length-1\u0026\u0026(q.xCenter\u003dN),U\u0026\u0026U.length\u003d\u003d\u003dV.length-1\u0026\u0026(q.yCenter\u003dU),L\u0026\u0026(q.xRanges\u003dM.xRanges,q.yRanges\u003dM.yRanges,q.pts\u003dM.pts),E||l(t,e,{vals:T,cLetter:\"z\"}),E\u0026\u0026e.contours\u0026\u0026\"heatmap\"\u003d\u003d\u003de.contours.coloring){var H\u003d{type:\"contour\"\u003d\u003d\u003de.type?\"heatmap\":\"histogram2d\",xcalendar:e.xcalendar,ycalendar:e.ycalendar};q.xfill\u003dp(H,N,g,v,B,A),q.yfill\u003dp(H,U,b,_,T.length,S)}return[q]}},{\"../../components/colorscale/calc\":670,\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"../histogram2d/calc\":1114,\"./clean_2d_array\":1083,\"./convert_column_xyz\":1085,\"./find_empties\":1087,\"./interp2d\":1090,\"./make_bound_array\":1091}],1083:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../constants/numerical\").BADNUM;e.exports\u003dfunction(t,e,r,o){var s,l,c,u,f,h;function p(t){if(n(t))return+t}if(e\u0026\u0026e.transpose){for(s\u003d0,f\u003d0;f\u003ct.length;f++)s\u003dMath.max(s,t[f].length);if(0\u003d\u003d\u003ds)return!1;c\u003dfunction(t){return t.length},u\u003dfunction(t,e,r){return(t[r]||[])[e]}}else s\u003dt.length,c\u003dfunction(t,e){return t[e].length},u\u003dfunction(t,e,r){return(t[e]||[])[r]};var d\u003dfunction(t,e,r){return e\u003d\u003d\u003da||r\u003d\u003d\u003da?a:u(t,e,r)};function m(t){if(e\u0026\u0026\"carpet\"!\u003d\u003de.type\u0026\u0026\"contourcarpet\"!\u003d\u003de.type\u0026\u0026t\u0026\u0026\"category\"\u003d\u003d\u003dt.type\u0026\u0026e[\"_\"+t._id.charAt(0)].length){var r\u003dt._id.charAt(0),n\u003d{},o\u003de[\"_\"+r+\"CategoryMap\"]||e[r];for(f\u003d0;f\u003co.length;f++)n[o[f]]\u003df;return function(e){var r\u003dn[t._categories[e]];return r+1?r:a}}return i.identity}var g\u003dm(r),v\u003dm(o);o\u0026\u0026\"category\"\u003d\u003d\u003do.type\u0026\u0026(s\u003do._categories.length);var y\u003dnew Array(s);for(f\u003d0;f\u003cs;f++)for(l\u003dr\u0026\u0026\"category\"\u003d\u003d\u003dr.type?r._categories.length:c(t,f),y[f]\u003dnew Array(l),h\u003d0;h\u003cl;h++)y[f][h]\u003dp(d(t,v(f),g(h)));return y}},{\"../../constants/numerical\":775,\"../../lib\":799,\"fast-isnumeric\":245}],1084:[function(t,e,r){\"use strict\";e.exports\u003d{min:\"zmin\",max:\"zmax\"}},{}],1085:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../constants/numerical\").BADNUM,a\u003dt(\"../../plots/cartesian/align_period\");e.exports\u003dfunction(t,e,r,o,s,l){var c\u003dt._length,u\u003de.makeCalcdata(t,o),f\u003dr.makeCalcdata(t,s);u\u003da(t,e,o,u),f\u003da(t,r,s,f);var h,p,d,m,g\u003dt.text,v\u003dvoid 0!\u003d\u003dg\u0026\u0026n.isArray1D(g),y\u003dt.hovertext,x\u003dvoid 0!\u003d\u003dy\u0026\u0026n.isArray1D(y),b\u003dn.distinctVals(u),_\u003db.vals,w\u003dn.distinctVals(f),T\u003dw.vals,k\u003d[],M\u003dT.length,A\u003d_.length;for(h\u003d0;h\u003cl.length;h++)k[h]\u003dn.init2dArray(M,A);v\u0026\u0026(d\u003dn.init2dArray(M,A)),x\u0026\u0026(m\u003dn.init2dArray(M,A));var S\u003dn.init2dArray(M,A);for(h\u003d0;h\u003cc;h++)if(u[h]!\u003d\u003di\u0026\u0026f[h]!\u003d\u003di){var E\u003dn.findBin(u[h]+b.minDiff/2,_),L\u003dn.findBin(f[h]+w.minDiff/2,T);for(p\u003d0;p\u003cl.length;p++){var C\u003dt[l[p]];k[p][L][E]\u003dC[h],S[L][E]\u003dh}v\u0026\u0026(d[L][E]\u003dg[h]),x\u0026\u0026(m[L][E]\u003dy[h])}for(t[\"_\"+o]\u003d_,t[\"_\"+s]\u003dT,p\u003d0;p\u003cl.length;p++)t[\"_\"+l[p]]\u003dk[p];v\u0026\u0026(t._text\u003dd),x\u0026\u0026(t._hovertext\u003dm),e\u0026\u0026\"category\"\u003d\u003d\u003de.type\u0026\u0026(t[\"_\"+o+\"CategoryMap\"]\u003d_.map((function(t){return e._categories[t]}))),r\u0026\u0026\"category\"\u003d\u003d\u003dr.type\u0026\u0026(t[\"_\"+s+\"CategoryMap\"]\u003dT.map((function(t){return r._categories[t]}))),t._after2before\u003dS}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/align_period\":846}],1086:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./xyz_defaults\"),a\u003dt(\"../scatter/period_defaults\"),o\u003dt(\"./style_defaults\"),s\u003dt(\"../../components/colorscale/defaults\"),l\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,c){function u(r,i){return n.coerce(t,e,l,r,i)}i(t,e,u,c)?(a(t,e,c,u),u(\"xhoverformat\"),u(\"yhoverformat\"),u(\"text\"),u(\"hovertext\"),u(\"hovertemplate\"),o(t,e,u,c),u(\"hoverongaps\"),u(\"connectgaps\",n.isArray1D(e.z)\u0026\u0026!1!\u003d\u003de.zsmooth),s(t,e,c,u,{prefix:\"\",cLetter:\"z\"})):e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"../scatter/period_defaults\":1234,\"./attributes\":1081,\"./style_defaults\":1094,\"./xyz_defaults\":1095}],1087:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").maxRowLength;e.exports\u003dfunction(t){var e,r,i,a,o,s,l,c,u\u003d[],f\u003d{},h\u003d[],p\u003dt[0],d\u003d[],m\u003d[0,0,0],g\u003dn(t);for(r\u003d0;r\u003ct.length;r++)for(e\u003dd,d\u003dp,p\u003dt[r+1]||[],i\u003d0;i\u003cg;i++)void 0\u003d\u003d\u003dd[i]\u0026\u0026((s\u003d(void 0!\u003d\u003dd[i-1]?1:0)+(void 0!\u003d\u003dd[i+1]?1:0)+(void 0!\u003d\u003de[i]?1:0)+(void 0!\u003d\u003dp[i]?1:0))?(0\u003d\u003d\u003dr\u0026\u0026s++,0\u003d\u003d\u003di\u0026\u0026s++,r\u003d\u003d\u003dt.length-1\u0026\u0026s++,i\u003d\u003d\u003dd.length-1\u0026\u0026s++,s\u003c4\u0026\u0026(f[[r,i]]\u003d[r,i,s]),u.push([r,i,s])):h.push([r,i]));for(;h.length;){for(l\u003d{},c\u003d!1,o\u003dh.length-1;o\u003e\u003d0;o--)(s\u003d((f[[(r\u003d(a\u003dh[o])[0])-1,i\u003da[1]]]||m)[2]+(f[[r+1,i]]||m)[2]+(f[[r,i-1]]||m)[2]+(f[[r,i+1]]||m)[2])/20)\u0026\u0026(l[a]\u003d[r,i,s],h.splice(o,1),c\u003d!0);if(!c)throw\"findEmpties iterated with no new neighbors\";for(a in l)f[a]\u003dl[a],u.push(l[a])}return u.sort((function(t,e){return e[2]-t[2]}))}},{\"../../lib\":799}],1088:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/fx\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../../components/colorscale\").extractOpts;e.exports\u003dfunction(t,e,r,s,l){l||(l\u003d{});var c,u,f,h,p\u003dl.isContour,d\u003dt.cd[0],m\u003dd.trace,g\u003dt.xa,v\u003dt.ya,y\u003dd.x,x\u003dd.y,b\u003dd.z,_\u003dd.xCenter,w\u003dd.yCenter,T\u003dd.zmask,k\u003dm.zhoverformat,M\u003dy,A\u003dx;if(!1!\u003d\u003dt.index){try{f\u003dMath.round(t.index[1]),h\u003dMath.round(t.index[0])}catch(e){return void i.error(\"Error hovering on heatmap, pointNumber must be [row,col], found:\",t.index)}if(f\u003c0||f\u003e\u003db[0].length||h\u003c0||h\u003eb.length)return}else{if(n.inbox(e-y[0],e-y[y.length-1],0)\u003e0||n.inbox(r-x[0],r-x[x.length-1],0)\u003e0)return;if(p){var S;for(M\u003d[2*y[0]-y[1]],S\u003d1;S\u003cy.length;S++)M.push((y[S]+y[S-1])/2);for(M.push([2*y[y.length-1]-y[y.length-2]]),A\u003d[2*x[0]-x[1]],S\u003d1;S\u003cx.length;S++)A.push((x[S]+x[S-1])/2);A.push([2*x[x.length-1]-x[x.length-2]])}f\u003dMath.max(0,Math.min(M.length-2,i.findBin(e,M))),h\u003dMath.max(0,Math.min(A.length-2,i.findBin(r,A)))}var E,L,C\u003dg.c2p(y[f]),P\u003dg.c2p(y[f+1]),I\u003dv.c2p(x[h]),O\u003dv.c2p(x[h+1]);p?(E\u003dd.orig_x||y,L\u003dd.orig_y||x,P\u003dC,c\u003dE[f],O\u003dI,u\u003dL[h]):(E\u003dd.orig_x||_||y,L\u003dd.orig_y||w||x,c\u003d_?E[f]:(E[f]+E[f+1])/2,u\u003dw?L[h]:(L[h]+L[h+1])/2,g\u0026\u0026\"category\"\u003d\u003d\u003dg.type\u0026\u0026(c\u003dy[f]),v\u0026\u0026\"category\"\u003d\u003d\u003dv.type\u0026\u0026(u\u003dx[h]),m.zsmooth\u0026\u0026(C\u003dP\u003dg.c2p(c),I\u003dO\u003dv.c2p(u)));var z\u003db[h][f];if(T\u0026\u0026!T[h][f]\u0026\u0026(z\u003dvoid 0),void 0!\u003d\u003dz||m.hoverongaps){var D;Array.isArray(d.hovertext)\u0026\u0026Array.isArray(d.hovertext[h])?D\u003dd.hovertext[h][f]:Array.isArray(d.text)\u0026\u0026Array.isArray(d.text[h])\u0026\u0026(D\u003dd.text[h][f]);var R\u003do(m),F\u003d{type:\"linear\",range:[R.min,R.max],hoverformat:k,_separators:g._separators,_numFormat:g._numFormat},B\u003da.tickText(F,z,\"hover\").text;return[i.extendFlat(t,{index:m._after2before?m._after2before[h][f]:[h,f],distance:t.maxHoverDistance,spikeDistance:t.maxSpikeDistance,x0:C,x1:P,y0:I,y1:O,xLabelVal:c,yLabelVal:u,zLabelVal:z,zLabel:B,text:D})]}}},{\"../../components/colorscale\":674,\"../../components/fx\":702,\"../../lib\":799,\"../../plots/cartesian/axes\":849}],1089:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),colorbar:t(\"./colorbar\"),style:t(\"./style\"),hoverPoints:t(\"./hover\"),moduleType:\"trace\",name:\"heatmap\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":863,\"./attributes\":1081,\"./calc\":1082,\"./colorbar\":1084,\"./defaults\":1086,\"./hover\":1088,\"./plot\":1092,\"./style\":1093}],1090:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003d[[-1,0],[1,0],[0,-1],[0,1]];function a(t){return.5-.25*Math.min(1,.5*t)}function o(t,e,r){var n,a,o,s,l,c,u,f,h,p,d,m,g,v\u003d0;for(s\u003d0;s\u003ce.length;s++){for(a\u003d(n\u003de[s])[0],o\u003dn[1],d\u003dt[a][o],p\u003d0,h\u003d0,l\u003d0;l\u003c4;l++)(u\u003dt[a+(c\u003di[l])[0]])\u0026\u0026void 0!\u003d\u003d(f\u003du[o+c[1]])\u0026\u0026(0\u003d\u003d\u003dp?m\u003dg\u003df:(m\u003dMath.min(m,f),g\u003dMath.max(g,f)),h++,p+\u003df);if(0\u003d\u003d\u003dh)throw\"iterateInterp2d order is wrong: no defined neighbors\";t[a][o]\u003dp/h,void 0\u003d\u003d\u003dd?h\u003c4\u0026\u0026(v\u003d1):(t[a][o]\u003d(1+r)*t[a][o]-r*d,g\u003em\u0026\u0026(v\u003dMath.max(v,Math.abs(t[a][o]-d)/(g-m))))}return v}e.exports\u003dfunction(t,e){var r,i\u003d1;for(o(t,e),r\u003d0;r\u003ce.length\u0026\u0026!(e[r][2]\u003c4);r++);for(e\u003de.slice(r),r\u003d0;r\u003c100\u0026\u0026i\u003e.01;r++)i\u003do(t,e,a(i));return i\u003e.01\u0026\u0026n.log(\"interp2d didn\u0027t converge quickly\",i),t}},{\"../../lib\":799}],1091:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\").isArrayOrTypedArray;e.exports\u003dfunction(t,e,r,a,o,s){var l,c,u,f\u003d[],h\u003dn.traceIs(t,\"contour\"),p\u003dn.traceIs(t,\"histogram\"),d\u003dn.traceIs(t,\"gl2d\");if(i(e)\u0026\u0026e.length\u003e1\u0026\u0026!p\u0026\u0026\"category\"!\u003d\u003ds.type){var m\u003de.length;if(!(m\u003c\u003do))return h?e.slice(0,o):e.slice(0,o+1);if(h||d)f\u003de.slice(0,o);else if(1\u003d\u003d\u003do)f\u003d[e[0]-.5,e[0]+.5];else{for(f\u003d[1.5*e[0]-.5*e[1]],u\u003d1;u\u003cm;u++)f.push(.5*(e[u-1]+e[u]));f.push(1.5*e[m-1]-.5*e[m-2])}if(m\u003co){var g\u003df[f.length-1],v\u003dg-f[f.length-2];for(u\u003dm;u\u003co;u++)g+\u003dv,f.push(g)}}else{var y\u003dt[s._id.charAt(0)+\"calendar\"];if(p)l\u003ds.r2c(r,0,y);else if(i(e)\u0026\u00261\u003d\u003d\u003de.length)l\u003de[0];else if(void 0\u003d\u003d\u003dr)l\u003d0;else{l\u003d(\"log\"\u003d\u003d\u003ds.type?s.d2c:s.r2c)(r,0,y)}for(c\u003da||1,u\u003dh||d?0:-.5;u\u003co;u++)f.push(l+c*u)}return f}},{\"../../lib\":799,\"../../registry\":927}],1092:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"../../registry\"),o\u003dt(\"../../lib\"),s\u003dt(\"../../components/colorscale\").makeColorScaleFuncFromTrace,l\u003dt(\"../../constants/xmlns_namespaces\");function c(t,e){var r\u003de.length-2,n\u003do.constrain(o.findBin(t,e),0,r),i\u003de[n],a\u003de[n+1],s\u003do.constrain(n+(t-i)/(a-i)-.5,0,r),l\u003dMath.round(s),c\u003dMath.abs(s-l);return s\u0026\u0026s!\u003d\u003dr\u0026\u0026c?{bin0:l,frac:c,bin1:Math.round(l+c/(s-l))}:{bin0:l,bin1:l,frac:0}}function u(t,e){var r\u003de.length-1,n\u003do.constrain(o.findBin(t,e),0,r),i\u003de[n],a\u003d(t-i)/(e[n+1]-i)||0;return a\u003c\u003d0?{bin0:n,bin1:n,frac:0}:a\u003c.5?{bin0:n,bin1:n+1,frac:a}:{bin0:n+1,bin1:n,frac:1-a}}function f(t,e,r){t[e]\u003dr[0],t[e+1]\u003dr[1],t[e+2]\u003dr[2],t[e+3]\u003dMath.round(255*r[3])}e.exports\u003dfunction(t,e,r,h){var p\u003de.xaxis,d\u003de.yaxis;o.makeTraceGroups(h,r,\"hm\").each((function(e){var r,h,m,g,v,y,x\u003dn.select(this),b\u003de[0],_\u003db.trace,w\u003db.z,T\u003db.x,k\u003db.y,M\u003db.xCenter,A\u003db.yCenter,S\u003da.traceIs(_,\"contour\"),E\u003dS?\"best\":_.zsmooth,L\u003dw.length,C\u003do.maxRowLength(w),P\u003d!1,I\u003d!1;for(y\u003d0;void 0\u003d\u003d\u003dr\u0026\u0026y\u003cT.length-1;)r\u003dp.c2p(T[y]),y++;for(y\u003dT.length-1;void 0\u003d\u003d\u003dh\u0026\u0026y\u003e0;)h\u003dp.c2p(T[y]),y--;for(h\u003cr\u0026\u0026(m\u003dh,h\u003dr,r\u003dm,P\u003d!0),y\u003d0;void 0\u003d\u003d\u003dg\u0026\u0026y\u003ck.length-1;)g\u003dd.c2p(k[y]),y++;for(y\u003dk.length-1;void 0\u003d\u003d\u003dv\u0026\u0026y\u003e0;)v\u003dd.c2p(k[y]),y--;if(v\u003cg\u0026\u0026(m\u003dg,g\u003dv,v\u003dm,I\u003d!0),S\u0026\u0026(M\u003dT,A\u003dk,T\u003db.xfill,k\u003db.yfill),\"fast\"!\u003d\u003dE){var O\u003d\"best\"\u003d\u003d\u003dE?0:.5;r\u003dMath.max(-O*p._length,r),h\u003dMath.min((1+O)*p._length,h),g\u003dMath.max(-O*d._length,g),v\u003dMath.min((1+O)*d._length,v)}var z\u003dMath.round(h-r),D\u003dMath.round(v-g);if(z\u003c\u003d0||D\u003c\u003d0){x.selectAll(\"image\").data([]).exit().remove()}else{var R,F;\"fast\"\u003d\u003d\u003dE?(R\u003dC,F\u003dL):(R\u003dz,F\u003dD);var B\u003ddocument.createElement(\"canvas\");B.width\u003dR,B.height\u003dF;var N,j,U\u003dB.getContext(\"2d\"),V\u003ds(_,{noNumericCheck:!0,returnArray:!0});\"fast\"\u003d\u003d\u003dE?(N\u003dP?function(t){return C-1-t}:o.identity,j\u003dI?function(t){return L-1-t}:o.identity):(N\u003dfunction(t){return o.constrain(Math.round(p.c2p(T[t])-r),0,z)},j\u003dfunction(t){return o.constrain(Math.round(d.c2p(k[t])-g),0,D)});var q,H,G,Y,W,X\u003dj(0),Z\u003d[X,X],J\u003dP?0:1,K\u003dI?0:1,Q\u003d0,$\u003d0,tt\u003d0,et\u003d0;if(E){var rt,nt\u003d0;try{rt\u003dnew Uint8Array(z*D*4)}catch(t){rt\u003dnew Array(z*D*4)}if(\"best\"\u003d\u003d\u003dE){var it,at,ot,st\u003dM||T,lt\u003dA||k,ct\u003dnew Array(st.length),ut\u003dnew Array(lt.length),ft\u003dnew Array(z),ht\u003dM?u:c,pt\u003dA?u:c;for(y\u003d0;y\u003cst.length;y++)ct[y]\u003dMath.round(p.c2p(st[y])-r);for(y\u003d0;y\u003clt.length;y++)ut[y]\u003dMath.round(d.c2p(lt[y])-g);for(y\u003d0;y\u003cz;y++)ft[y]\u003dht(y,ct);for(H\u003d0;H\u003cD;H++)for(at\u003dw[(it\u003dpt(H,ut)).bin0],ot\u003dw[it.bin1],y\u003d0;y\u003cz;y++,nt+\u003d4)f(rt,nt,W\u003dkt(at,ot,ft[y],it))}else for(H\u003d0;H\u003cL;H++)for(Y\u003dw[H],Z\u003dj(H),y\u003d0;y\u003cz;y++)W\u003dTt(Y[y],1),f(rt,nt\u003d4*(Z*z+N(y)),W);var dt\u003dU.createImageData(z,D);try{dt.data.set(rt)}catch(t){var mt\u003ddt.data,gt\u003dmt.length;for(H\u003d0;H\u003cgt;H++)mt[H]\u003drt[H]}U.putImageData(dt,0,0)}else{var vt\u003d_.xgap,yt\u003d_.ygap,xt\u003dMath.floor(vt/2),bt\u003dMath.floor(yt/2);for(H\u003d0;H\u003cL;H++)if(Y\u003dw[H],Z.reverse(),Z[K]\u003dj(H+1),Z[0]!\u003d\u003dZ[1]\u0026\u0026void 0!\u003d\u003dZ[0]\u0026\u0026void 0!\u003d\u003dZ[1])for(q\u003d[G\u003dN(0),G],y\u003d0;y\u003cC;y++)q.reverse(),q[J]\u003dN(y+1),q[0]!\u003d\u003dq[1]\u0026\u0026void 0!\u003d\u003dq[0]\u0026\u0026void 0!\u003d\u003dq[1]\u0026\u0026(W\u003dTt(Y[y],(q[1]-q[0])*(Z[1]-Z[0])),U.fillStyle\u003d\"rgba(\"+W.join(\",\")+\")\",U.fillRect(q[0]+xt,Z[0]+bt,q[1]-q[0]-vt,Z[1]-Z[0]-yt))}$\u003dMath.round($/Q),tt\u003dMath.round(tt/Q),et\u003dMath.round(et/Q);var _t\u003di(\"rgb(\"+$+\",\"+tt+\",\"+et+\")\");t._hmpixcount\u003d(t._hmpixcount||0)+Q,t._hmlumcount\u003d(t._hmlumcount||0)+Q*_t.getLuminance();var wt\u003dx.selectAll(\"image\").data(e);wt.enter().append(\"svg:image\").attr({xmlns:l.svg,preserveAspectRatio:\"none\"}),wt.attr({height:D,width:z,x:r,y:g,\"xlink:href\":B.toDataURL(\"image/png\")})}function Tt(t,e){if(void 0!\u003d\u003dt){var r\u003dV(t);return r[0]\u003dMath.round(r[0]),r[1]\u003dMath.round(r[1]),r[2]\u003dMath.round(r[2]),Q+\u003de,$+\u003dr[0]*e,tt+\u003dr[1]*e,et+\u003dr[2]*e,r}return[0,0,0,0]}function kt(t,e,r,n){var i\u003dt[r.bin0];if(void 0\u003d\u003d\u003di)return Tt(void 0,1);var a,o\u003dt[r.bin1],s\u003de[r.bin0],l\u003de[r.bin1],c\u003do-i||0,u\u003ds-i||0;return a\u003dvoid 0\u003d\u003d\u003do?void 0\u003d\u003d\u003dl?0:void 0\u003d\u003d\u003ds?2*(l-i):2*(2*l-s-i)/3:void 0\u003d\u003d\u003dl?void 0\u003d\u003d\u003ds?0:2*(2*i-o-s)/3:void 0\u003d\u003d\u003ds?2*(2*l-o-i)/3:l+i-o-s,Tt(i+r.frac*c+n.frac*(u+r.frac*a))}}))}},{\"../../components/colorscale\":674,\"../../constants/xmlns_namespaces\":776,\"../../lib\":799,\"../../registry\":927,\"@plotly/d3\":58,tinycolor2:594}],1093:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\");e.exports\u003dfunction(t){n.select(t).selectAll(\".hm image\").style(\"opacity\",(function(t){return t.trace.opacity}))}},{\"@plotly/d3\":58}],1094:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){!1\u003d\u003d\u003dr(\"zsmooth\")\u0026\u0026(r(\"xgap\"),r(\"ygap\")),r(\"zhoverformat\")}},{}],1095:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../registry\");function o(t,e){var r\u003de(t);return\"scaled\"\u003d\u003d\u003d(r?e(t+\"type\",\"array\"):\"scaled\")\u0026\u0026(e(t+\"0\"),e(\"d\"+t)),r}e.exports\u003dfunction(t,e,r,s,l,c){var u,f,h\u003dr(\"z\");if(l\u003dl||\"x\",c\u003dc||\"y\",void 0\u003d\u003d\u003dh||!h.length)return 0;if(i.isArray1D(t.z)){u\u003dr(l),f\u003dr(c);var p\u003di.minRowLength(u),d\u003di.minRowLength(f);if(0\u003d\u003d\u003dp||0\u003d\u003d\u003dd)return 0;e._length\u003dMath.min(p,d,h.length)}else{if(u\u003do(l,r),f\u003do(c,r),!function(t){for(var e,r\u003d!0,a\u003d!1,o\u003d!1,s\u003d0;s\u003ct.length;s++){if(e\u003dt[s],!i.isArrayOrTypedArray(e)){r\u003d!1;break}e.length\u003e0\u0026\u0026(a\u003d!0);for(var l\u003d0;l\u003ce.length;l++)if(n(e[l])){o\u003d!0;break}}return r\u0026\u0026a\u0026\u0026o}(h))return 0;r(\"transpose\"),e._length\u003dnull}return\"heatmapgl\"\u003d\u003d\u003dt.type||a.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[l,c],s),!0}},{\"../../lib\":799,\"../../registry\":927,\"fast-isnumeric\":245}],1096:[function(t,e,r){\"use strict\";for(var n\u003dt(\"../heatmap/attributes\"),i\u003dt(\"../../components/colorscale/attributes\"),a\u003dt(\"../../lib/extend\").extendFlat,o\u003dt(\"../../plot_api/edit_types\").overrideAll,s\u003d[\"z\",\"x\",\"x0\",\"dx\",\"y\",\"y0\",\"dy\",\"text\",\"transpose\",\"xtype\",\"ytype\"],l\u003d{},c\u003d0;c\u003cs.length;c++){var u\u003ds[c];l[u]\u003dn[u]}l.zsmooth\u003d{valType:\"enumerated\",values:[\"fast\",!1],dflt:\"fast\",editType:\"calc\"},a(l,i(\"\",{cLetter:\"z\",autoColorDflt:!1})),e.exports\u003do(l,\"calc\",\"nested\")},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../heatmap/attributes\":1081}],1097:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-heatmap2d\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../lib/str2rgbarray\");function o(t,e){this.scene\u003dt,this.uid\u003de,this.type\u003d\"heatmapgl\",this.name\u003d\"\",this.hoverinfo\u003d\"all\",this.xData\u003d[],this.yData\u003d[],this.zData\u003d[],this.textLabels\u003d[],this.idToIndex\u003d[],this.bounds\u003d[0,0,0,0],this.options\u003d{zsmooth:\"fast\",z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap\u003dn(t.glplot,this.options),this.heatmap._trace\u003dthis}var s\u003do.prototype;s.handlePick\u003dfunction(t){var e\u003dthis.options,r\u003de.shape,n\u003dt.pointId,i\u003dn%r[0],a\u003dMath.floor(n/r[0]),o\u003dn;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[i],e.y[a],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[a,i],hoverinfo:this.hoverinfo}},s.update\u003dfunction(t,e){var r\u003de[0];this.index\u003dt.index,this.name\u003dt.name,this.hoverinfo\u003dt.hoverinfo;var n\u003dr.z;this.options.z\u003d[].concat.apply([],n);var o\u003dn[0].length,s\u003dn.length;this.options.shape\u003d[o,s],this.options.x\u003dr.x,this.options.y\u003dr.y,this.options.zsmooth\u003dt.zsmooth;var l\u003dfunction(t){for(var e\u003dt.colorscale,r\u003dt.zmin,n\u003dt.zmax,i\u003de.length,o\u003dnew Array(i),s\u003dnew Array(4*i),l\u003d0;l\u003ci;l++){var c\u003de[l],u\u003da(c[1]);o[l]\u003dr+c[0]*(n-r);for(var f\u003d0;f\u003c4;f++)s[4*l+f]\u003du[f]}return{colorLevels:o,colorValues:s}}(t);this.options.colorLevels\u003dl.colorLevels,this.options.colorValues\u003dl.colorValues,this.textLabels\u003d[].concat.apply([],t.text),this.heatmap.update(this.options);var c,u,f\u003dthis.scene.xaxis,h\u003dthis.scene.yaxis;!1\u003d\u003d\u003dt.zsmooth\u0026\u0026(c\u003d{ppad:r.x[1]-r.x[0]},u\u003d{ppad:r.y[1]-r.y[0]}),t._extremes[f._id]\u003di.findExtremes(f,r.x,c),t._extremes[h._id]\u003di.findExtremes(h,r.y,u)},s.dispose\u003dfunction(){this.heatmap.dispose()},e.exports\u003dfunction(t,e,r){var n\u003dnew o(t,e.uid);return n.update(e,r),n}},{\"../../lib/str2rgbarray\":823,\"../../plots/cartesian/axes\":849,\"gl-heatmap2d\":274}],1098:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../heatmap/xyz_defaults\"),a\u003dt(\"../../components/colorscale/defaults\"),o\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,l,s)?(l(\"text\"),l(\"zsmooth\"),a(t,e,s,l,{prefix:\"\",cLetter:\"z\"})):e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"../heatmap/xyz_defaults\":1095,\"./attributes\":1096}],1099:[function(t,e,r){\"use strict\";[\"*heatmapgl* trace is deprecated!\",\"Please consider switching to the *heatmap* or *image* trace types.\",\"Alternatively you could contribute/sponsor rewriting this trace type\",\"based on cartesian features and using regl framework.\"].join(\" \");e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../heatmap/colorbar\"),calc:t(\"../heatmap/calc\"),plot:t(\"./convert\"),moduleType:\"trace\",name:\"heatmapgl\",basePlotModule:t(\"../../plots/gl2d\"),categories:[\"gl\",\"gl2d\",\"2dMap\"],meta:{}}},{\"../../plots/gl2d\":890,\"../heatmap/calc\":1082,\"../heatmap/colorbar\":1084,\"./attributes\":1096,\"./convert\":1097,\"./defaults\":1098}],1100:[function(t,e,r){\"use strict\";var n\u003dt(\"../bar/attributes\"),i\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"./bin_attributes\"),s\u003dt(\"./constants\"),l\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003d{x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),orientation:n.orientation,histfunc:{valType:\"enumerated\",values:[\"count\",\"sum\",\"avg\",\"min\",\"max\"],dflt:\"count\",editType:\"calc\"},histnorm:{valType:\"enumerated\",values:[\"\",\"percent\",\"probability\",\"density\",\"probability density\"],dflt:\"\",editType:\"calc\"},cumulative:{enabled:{valType:\"boolean\",dflt:!1,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"increasing\",\"decreasing\"],dflt:\"increasing\",editType:\"calc\"},currentbin:{valType:\"enumerated\",values:[\"include\",\"exclude\",\"half\"],dflt:\"include\",editType:\"calc\"},editType:\"calc\"},nbinsx:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},xbins:o(\"x\",!0),nbinsy:{valType:\"integer\",min:0,dflt:0,editType:\"calc\"},ybins:o(\"y\",!0),autobinx:{valType:\"boolean\",dflt:null,editType:\"calc\"},autobiny:{valType:\"boolean\",dflt:null,editType:\"calc\"},bingroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertemplate:a({},{keys:s.eventDataKeys}),marker:n.marker,offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,_deprecated:{bardir:n._deprecated.bardir}}},{\"../../lib/extend\":789,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../bar/attributes\":937,\"./bin_attributes\":1102,\"./constants\":1106}],1101:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){for(var r\u003dt.length,n\u003d0,i\u003d0;i\u003cr;i++)e[i]?(t[i]/\u003de[i],n+\u003dt[i]):t[i]\u003dnull;return n}},{}],1102:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return{start:{valType:\"any\",editType:\"calc\"},end:{valType:\"any\",editType:\"calc\"},size:{valType:\"any\",editType:\"calc\"},editType:\"calc\"}}},{}],1103:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\");e.exports\u003d{count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,i){var a\u003di[e];return n(a)?(a\u003dNumber(a),r[t]+\u003da,a):0},avg:function(t,e,r,i,a){var o\u003di[e];return n(o)\u0026\u0026(o\u003dNumber(o),r[t]+\u003do,a[t]++),0},min:function(t,e,r,i){var a\u003di[e];if(n(a)){if(a\u003dNumber(a),!n(r[t]))return r[t]\u003da,a;if(r[t]\u003ea){var o\u003da-r[t];return r[t]\u003da,o}}return 0},max:function(t,e,r,i){var a\u003di[e];if(n(a)){if(a\u003dNumber(a),!n(r[t]))return r[t]\u003da,a;if(r[t]\u003ca){var o\u003da-r[t];return r[t]\u003da,o}}return 0}}},{\"fast-isnumeric\":245}],1104:[function(t,e,r){\"use strict\";var n\u003dt(\"../../constants/numerical\"),i\u003dn.ONEAVGYEAR,a\u003dn.ONEAVGMONTH,o\u003dn.ONEDAY,s\u003dn.ONEHOUR,l\u003dn.ONEMIN,c\u003dn.ONESEC,u\u003dt(\"../../plots/cartesian/axes\").tickIncrement;function f(t,e,r,n){if(t*e\u003c\u003d0)return 1/0;for(var i\u003dMath.abs(e-t),a\u003d\"date\"\u003d\u003d\u003dr.type,o\u003dh(i,a),s\u003d0;s\u003c10;s++){var l\u003dh(80*o,a);if(o\u003d\u003d\u003dl)break;if(!p(l,t,e,a,r,n))break;o\u003dl}return o}function h(t,e){return e\u0026\u0026t\u003ec?t\u003eo?t\u003e1.1*i?i:t\u003e1.1*a?a:o:t\u003es?s:t\u003el?l:c:Math.pow(10,Math.floor(Math.log(t)/Math.LN10))}function p(t,e,r,n,a,s){if(n\u0026\u0026t\u003eo){var l\u003dd(e,a,s),c\u003dd(r,a,s),u\u003dt\u003d\u003d\u003di?0:1;return l[u]!\u003d\u003dc[u]}return Math.floor(r/t)-Math.floor(e/t)\u003e.1}function d(t,e,r){var n\u003de.c2d(t,i,r).split(\"-\");return\"\"\u003d\u003d\u003dn[0]\u0026\u0026(n.unshift(),n[0]\u003d\"-\"+n[0]),n}e.exports\u003dfunction(t,e,r,n,a){var s,l,c\u003d-1.1*e,h\u003d-.1*e,p\u003dt-h,d\u003dr[0],m\u003dr[1],g\u003dMath.min(f(d+h,d+p,n,a),f(m+h,m+p,n,a)),v\u003dMath.min(f(d+c,d+h,n,a),f(m+c,m+h,n,a));if(g\u003ev\u0026\u0026v\u003cMath.abs(m-d)/4e3?(s\u003dg,l\u003d!1):(s\u003dMath.min(g,v),l\u003d!0),\"date\"\u003d\u003d\u003dn.type\u0026\u0026s\u003eo){var y\u003ds\u003d\u003d\u003di?1:6,x\u003ds\u003d\u003d\u003di?\"M12\":\"M1\";return function(e,r){var o\u003dn.c2d(e,i,a),s\u003do.indexOf(\"-\",y);s\u003e0\u0026\u0026(o\u003do.substr(0,s));var c\u003dn.d2c(o,0,a);if(c\u003ce){var f\u003du(c,x,!1,a);(c+f)/2\u003ce+t\u0026\u0026(c\u003df)}return r\u0026\u0026l?u(c,x,!0,a):c}}return function(e,r){var n\u003ds*Math.round(e/s);return n+s/10\u003ce\u0026\u0026n+.9*s\u003ce+t\u0026\u0026(n+\u003ds),r\u0026\u0026l\u0026\u0026(n-\u003ds),n}}},{\"../../constants/numerical\":775,\"../../plots/cartesian/axes\":849}],1105:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../registry\"),o\u003dt(\"../../plots/cartesian/axes\"),s\u003dt(\"../bar/arrays_to_calcdata\"),l\u003dt(\"./bin_functions\"),c\u003dt(\"./norm_functions\"),u\u003dt(\"./average\"),f\u003dt(\"./bin_label_vals\");function h(t,e,r,s,l){var c,u,f,p,d,m,g,v\u003ds+\"bins\",y\u003dt._fullLayout,x\u003de[\"_\"+s+\"bingroup\"],b\u003dy._histogramBinOpts[x],_\u003d\"overlay\"\u003d\u003d\u003dy.barmode,w\u003dfunction(t){return r.r2c(t,0,p)},T\u003dfunction(t){return r.c2r(t,0,p)},k\u003d\"date\"\u003d\u003d\u003dr.type?function(t){return t||0\u003d\u003d\u003dt?i.cleanDate(t,null,p):null}:function(t){return n(t)?Number(t):null};function M(t,e,r){e[t+\"Found\"]?(e[t]\u003dk(e[t]),null\u003d\u003d\u003de[t]\u0026\u0026(e[t]\u003dr[t])):(m[t]\u003de[t]\u003dr[t],i.nestedProperty(u[0],v+\".\"+t).set(r[t]))}if(e[\"_\"+s+\"autoBinFinished\"])delete e[\"_\"+s+\"autoBinFinished\"];else{u\u003db.traces;var A\u003d[],S\u003d!0,E\u003d!1,L\u003d!1;for(c\u003d0;c\u003cu.length;c++)if((f\u003du[c]).visible){var C\u003db.dirs[c];d\u003df[\"_\"+C+\"pos0\"]\u003dr.makeCalcdata(f,C),A\u003di.concat(A,d),delete f[\"_\"+s+\"autoBinFinished\"],!0\u003d\u003d\u003de.visible\u0026\u0026(S?S\u003d!1:(delete f._autoBin,f[\"_\"+s+\"autoBinFinished\"]\u003d1),a.traceIs(f,\"2dMap\")\u0026\u0026(E\u003d!0),\"histogram2dcontour\"\u003d\u003d\u003df.type\u0026\u0026(L\u003d!0))}p\u003du[0][s+\"calendar\"];var P\u003do.autoBin(A,r,b.nbins,E,p,b.sizeFound\u0026\u0026b.size),I\u003du[0]._autoBin\u003d{};if(m\u003dI[b.dirs[0]]\u003d{},L\u0026\u0026(b.size||(P.start\u003dT(o.tickIncrement(w(P.start),P.size,!0,p))),void 0\u003d\u003d\u003db.end\u0026\u0026(P.end\u003dT(o.tickIncrement(w(P.end),P.size,!1,p)))),_\u0026\u0026!a.traceIs(e,\"2dMap\")\u0026\u00260\u003d\u003d\u003dP._dataSpan\u0026\u0026\"category\"!\u003d\u003dr.type\u0026\u0026\"multicategory\"!\u003d\u003dr.type){if(l)return[P,d,!0];P\u003dfunction(t,e,r,n,a){var o,s,l,c\u003dt._fullLayout,u\u003dfunction(t,e){for(var r\u003de.xaxis,n\u003de.yaxis,i\u003de.orientation,a\u003d[],o\u003dt._fullData,s\u003d0;s\u003co.length;s++){var l\u003do[s];\"histogram\"\u003d\u003d\u003dl.type\u0026\u0026!0\u003d\u003d\u003dl.visible\u0026\u0026l.orientation\u003d\u003d\u003di\u0026\u0026l.xaxis\u003d\u003d\u003dr\u0026\u0026l.yaxis\u003d\u003d\u003dn\u0026\u0026a.push(l)}return a}(t,e),f\u003d!1,p\u003d1/0,d\u003d[e];for(o\u003d0;o\u003cu.length;o++)if((s\u003du[o])\u003d\u003d\u003de)f\u003d!0;else if(f){var m\u003dh(t,s,r,n,!0),g\u003dm[0],v\u003dm[2];s[\"_\"+n+\"autoBinFinished\"]\u003d1,s[\"_\"+n+\"pos0\"]\u003dm[1],v?d.push(s):p\u003dMath.min(p,g.size)}else l\u003dc._histogramBinOpts[s[\"_\"+n+\"bingroup\"]],p\u003dMath.min(p,l.size||s[a].size);var y\u003dnew Array(d.length);for(o\u003d0;o\u003cd.length;o++)for(var x\u003dd[o][\"_\"+n+\"pos0\"],b\u003d0;b\u003cx.length;b++)if(void 0!\u003d\u003dx[b]){y[o]\u003dx[b];break}isFinite(p)||(p\u003di.distinctVals(y).minDiff);for(o\u003d0;o\u003cd.length;o++){var _\u003d(s\u003dd[o])[n+\"calendar\"],w\u003d{start:r.c2r(y[o]-p/2,0,_),end:r.c2r(y[o]+p/2,0,_),size:p};s._input[a]\u003ds[a]\u003dw,(l\u003dc._histogramBinOpts[s[\"_\"+n+\"bingroup\"]])\u0026\u0026i.extendFlat(l,w)}return e[a]}(t,e,r,s,v)}(g\u003df.cumulative||{}).enabled\u0026\u0026\"include\"!\u003d\u003dg.currentbin\u0026\u0026(\"decreasing\"\u003d\u003d\u003dg.direction?P.start\u003dT(o.tickIncrement(w(P.start),P.size,!0,p)):P.end\u003dT(o.tickIncrement(w(P.end),P.size,!1,p))),b.size\u003dP.size,b.sizeFound||(m.size\u003dP.size,i.nestedProperty(u[0],v+\".size\").set(P.size)),M(\"start\",b,P),M(\"end\",b,P)}d\u003de[\"_\"+s+\"pos0\"],delete e[\"_\"+s+\"pos0\"];var O\u003de._input[v]||{},z\u003di.extendFlat({},b),D\u003db.start,R\u003dr.r2l(O.start),F\u003dvoid 0!\u003d\u003dR;if((b.startFound||F)\u0026\u0026R!\u003d\u003dr.r2l(D)){var B\u003dF?R:i.aggNums(Math.min,null,d),N\u003d{type:\"category\"\u003d\u003d\u003dr.type||\"multicategory\"\u003d\u003d\u003dr.type?\"linear\":r.type,r2l:r.r2l,dtick:b.size,tick0:D,calendar:p,range:[B,o.tickIncrement(B,b.size,!1,p)].map(r.l2r)},j\u003do.tickFirst(N);j\u003er.r2l(B)\u0026\u0026(j\u003do.tickIncrement(j,b.size,!0,p)),z.start\u003dr.l2r(j),F||i.nestedProperty(e,v+\".start\").set(z.start)}var U\u003db.end,V\u003dr.r2l(O.end),q\u003dvoid 0!\u003d\u003dV;if((b.endFound||q)\u0026\u0026V!\u003d\u003dr.r2l(U)){var H\u003dq?V:i.aggNums(Math.max,null,d);z.end\u003dr.l2r(H),q||i.nestedProperty(e,v+\".start\").set(z.end)}var G\u003d\"autobin\"+s;return!1\u003d\u003d\u003de._input[G]\u0026\u0026(e._input[v]\u003di.extendFlat({},e[v]||{}),delete e._input[G],delete e[G]),[z,d]}e.exports\u003d{calc:function(t,e){var r,a,p,d,m\u003d[],g\u003d[],v\u003do.getFromId(t,\"h\"\u003d\u003d\u003de.orientation?e.yaxis:e.xaxis),y\u003d\"h\"\u003d\u003d\u003de.orientation?\"y\":\"x\",x\u003d{x:\"y\",y:\"x\"}[y],b\u003de[y+\"calendar\"],_\u003de.cumulative,w\u003dh(t,e,v,y),T\u003dw[0],k\u003dw[1],M\u003d\"string\"\u003d\u003dtypeof T.size,A\u003d[],S\u003dM?A:T,E\u003d[],L\u003d[],C\u003d[],P\u003d0,I\u003de.histnorm,O\u003de.histfunc,z\u003d-1!\u003d\u003dI.indexOf(\"density\");_.enabled\u0026\u0026z\u0026\u0026(I\u003dI.replace(/ ?density$/,\"\"),z\u003d!1);var D,R\u003d\"max\"\u003d\u003d\u003dO||\"min\"\u003d\u003d\u003dO?null:0,F\u003dl.count,B\u003dc[I],N\u003d!1,j\u003dfunction(t){return v.r2c(t,0,b)};for(i.isArrayOrTypedArray(e[x])\u0026\u0026\"count\"!\u003d\u003dO\u0026\u0026(D\u003de[x],N\u003d\"avg\"\u003d\u003d\u003dO,F\u003dl[O]),r\u003dj(T.start),p\u003dj(T.end)+(r-o.tickIncrement(r,T.size,!1,b))/1e6;r\u003cp\u0026\u0026m.length\u003c1e6\u0026\u0026(a\u003do.tickIncrement(r,T.size,!1,b),m.push((r+a)/2),g.push(R),C.push([]),A.push(r),z\u0026\u0026E.push(1/(a-r)),N\u0026\u0026L.push(0),!(a\u003c\u003dr));)r\u003da;A.push(r),M||\"date\"!\u003d\u003dv.type||(S\u003d{start:j(S.start),end:j(S.end),size:S.size}),t._fullLayout._roundFnOpts||(t._fullLayout._roundFnOpts\u003d{});var U\u003de[\"_\"+y+\"bingroup\"],V\u003d{leftGap:1/0,rightGap:1/0};U\u0026\u0026(t._fullLayout._roundFnOpts[U]||(t._fullLayout._roundFnOpts[U]\u003dV),V\u003dt._fullLayout._roundFnOpts[U]);var q,H\u003dg.length,G\u003d!0,Y\u003dV.leftGap,W\u003dV.rightGap,X\u003d{};for(r\u003d0;r\u003ck.length;r++){var Z\u003dk[r];(d\u003di.findBin(Z,S))\u003e\u003d0\u0026\u0026d\u003cH\u0026\u0026(P+\u003dF(d,r,g,D,L),G\u0026\u0026C[d].length\u0026\u0026Z!\u003d\u003dk[C[d][0]]\u0026\u0026(G\u003d!1),C[d].push(r),X[r]\u003dd,Y\u003dMath.min(Y,Z-A[d]),W\u003dMath.min(W,A[d+1]-Z))}V.leftGap\u003dY,V.rightGap\u003dW,G||(q\u003dfunction(e,r){return function(){var n\u003dt._fullLayout._roundFnOpts[U];return f(n.leftGap,n.rightGap,A,v,b)(e,r)}}),N\u0026\u0026(P\u003du(g,L)),B\u0026\u0026B(g,P,E),_.enabled\u0026\u0026function(t,e,r){var n,i,a;function o(e){a\u003dt[e],t[e]/\u003d2}function s(e){i\u003dt[e],t[e]\u003da+i/2,a+\u003di}if(\"half\"\u003d\u003d\u003dr)if(\"increasing\"\u003d\u003d\u003de)for(o(0),n\u003d1;n\u003ct.length;n++)s(n);else for(o(t.length-1),n\u003dt.length-2;n\u003e\u003d0;n--)s(n);else if(\"increasing\"\u003d\u003d\u003de){for(n\u003d1;n\u003ct.length;n++)t[n]+\u003dt[n-1];\"exclude\"\u003d\u003d\u003dr\u0026\u0026(t.unshift(0),t.pop())}else{for(n\u003dt.length-2;n\u003e\u003d0;n--)t[n]+\u003dt[n+1];\"exclude\"\u003d\u003d\u003dr\u0026\u0026(t.push(0),t.shift())}}(g,_.direction,_.currentbin);var J\u003dMath.min(m.length,g.length),K\u003d[],Q\u003d0,$\u003dJ-1;for(r\u003d0;r\u003cJ;r++)if(g[r]){Q\u003dr;break}for(r\u003dJ-1;r\u003e\u003dQ;r--)if(g[r]){$\u003dr;break}for(r\u003dQ;r\u003c\u003d$;r++)if(n(m[r])\u0026\u0026n(g[r])){var tt\u003d{p:m[r],s:g[r],b:0};_.enabled||(tt.pts\u003dC[r],G?tt.ph0\u003dtt.ph1\u003dC[r].length?k[C[r][0]]:m[r]:(e._computePh\u003d!0,tt.ph0\u003dq(A[r]),tt.ph1\u003dq(A[r+1],!0))),K.push(tt)}return 1\u003d\u003d\u003dK.length\u0026\u0026(K[0].width1\u003do.tickIncrement(K[0].p,T.size,!1,b)-K[0].p),s(K,e),i.isArrayOrTypedArray(e.selectedpoints)\u0026\u0026i.tagSelected(K,e,X),K},calcAllAutoBins:h}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../../registry\":927,\"../bar/arrays_to_calcdata\":936,\"./average\":1101,\"./bin_functions\":1103,\"./bin_label_vals\":1104,\"./norm_functions\":1112,\"fast-isnumeric\":245}],1106:[function(t,e,r){\"use strict\";e.exports\u003d{eventDataKeys:[\"binNumber\"]}},{}],1107:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axis_ids\"),a\u003dt(\"../../registry\").traceIs,o\u003dt(\"../bar/defaults\").handleGroupingDefaults,s\u003dn.nestedProperty,l\u003dt(\"../../plots/cartesian/constraints\").getAxisGroup,c\u003d[{aStr:{x:\"xbins.start\",y:\"ybins.start\"},name:\"start\"},{aStr:{x:\"xbins.end\",y:\"ybins.end\"},name:\"end\"},{aStr:{x:\"xbins.size\",y:\"ybins.size\"},name:\"size\"},{aStr:{x:\"nbinsx\",y:\"nbinsy\"},name:\"nbins\"}],u\u003d[\"x\",\"y\"];e.exports\u003dfunction(t,e){var r,f,h,p,d,m,g,v\u003de._histogramBinOpts\u003d{},y\u003d[],x\u003d{},b\u003d[];function _(t,e){return n.coerce(r._input,r,r._module.attributes,t,e)}function w(t){return\"v\"\u003d\u003d\u003dt.orientation?\"x\":\"y\"}function T(t,r,a){var o\u003dt.uid+\"__\"+a;r||(r\u003do);var s\u003dfunction(t,r){return i.getFromTrace({_fullLayout:e},t,r).type}(t,a),l\u003dt[a+\"calendar\"]||\"\",c\u003dv[r],u\u003d!0;c\u0026\u0026(s\u003d\u003d\u003dc.axType\u0026\u0026l\u003d\u003d\u003dc.calendar?(u\u003d!1,c.traces.push(t),c.dirs.push(a)):(r\u003do,s!\u003d\u003dc.axType\u0026\u0026n.warn([\"Attempted to group the bins of trace\",t.index,\"set on a\",\"type:\"+s,\"axis\",\"with bins on\",\"type:\"+c.axType,\"axis.\"].join(\" \")),l!\u003d\u003dc.calendar\u0026\u0026n.warn([\"Attempted to group the bins of trace\",t.index,\"set with a\",l,\"calendar\",\"with bins\",c.calendar?\"on a \"+c.calendar+\" calendar\":\"w/o a set calendar\"].join(\" \")))),u\u0026\u0026(v[r]\u003d{traces:[t],dirs:[a],axType:s,calendar:t[a+\"calendar\"]||\"\"}),t[\"_\"+a+\"bingroup\"]\u003dr}for(d\u003d0;d\u003ct.length;d++)r\u003dt[d],a(r,\"histogram\")\u0026\u0026(y.push(r),delete r._xautoBinFinished,delete r._yautoBinFinished,a(r,\"2dMap\")||o(r._input,r,e,_));var k\u003de._alignmentOpts||{};for(d\u003d0;d\u003cy.length;d++){if(r\u003dy[d],h\u003d\"\",!a(r,\"2dMap\")){if(p\u003dw(r),\"group\"\u003d\u003d\u003de.barmode\u0026\u0026r.alignmentgroup){var M\u003dr[p+\"axis\"],A\u003dl(e,M)+r.orientation;(k[A]||{})[r.alignmentgroup]\u0026\u0026(h\u003dA)}h||\"overlay\"\u003d\u003d\u003de.barmode||(h\u003dl(e,r.xaxis)+l(e,r.yaxis)+w(r))}h?(x[h]||(x[h]\u003d[]),x[h].push(r)):b.push(r)}for(h in x)if(1!\u003d\u003d(f\u003dx[h]).length){var S\u003d!1;for(f.length\u0026\u0026(r\u003df[0],S\u003d_(\"bingroup\")),h\u003dS||h,d\u003d0;d\u003cf.length;d++){var E\u003d(r\u003df[d])._input.bingroup;E\u0026\u0026E!\u003d\u003dh\u0026\u0026n.warn([\"Trace\",r.index,\"must match\",\"within bingroup\",h+\".\",\"Ignoring its bingroup:\",E,\"setting.\"].join(\" \")),r.bingroup\u003dh,T(r,h,w(r))}}else b.push(f[0]);for(d\u003d0;d\u003cb.length;d++){r\u003db[d];var L\u003d_(\"bingroup\");if(a(r,\"2dMap\"))for(g\u003d0;g\u003c2;g++){var C\u003d_((p\u003du[g])+\"bingroup\",L?L+\"__\"+p:null);T(r,C,p)}else T(r,L,w(r))}for(h in v){var P\u003dv[h];for(f\u003dP.traces,m\u003d0;m\u003cc.length;m++){var I,O,z\u003dc[m],D\u003dz.name;if(\"nbins\"!\u003d\u003dD||!P.sizeFound){for(d\u003d0;d\u003cf.length;d++){if(r\u003df[d],p\u003dP.dirs[d],I\u003dz.aStr[p],void 0!\u003d\u003ds(r._input,I).get()){P[D]\u003d_(I),P[D+\"Found\"]\u003d!0;break}(O\u003d(r._autoBin||{})[p]||{})[D]\u0026\u0026s(r,I).set(O[D])}if(\"start\"\u003d\u003d\u003dD||\"end\"\u003d\u003d\u003dD)for(;d\u003cf.length;d++)(r\u003df[d])[\"_\"+p+\"bingroup\"]\u0026\u0026_(I,(O\u003d(r._autoBin||{})[p]||{})[D]);\"nbins\"!\u003d\u003dD||P.sizeFound||P.nbinsFound||(r\u003df[0],P[D]\u003d_(I))}}}}},{\"../../lib\":799,\"../../plots/cartesian/axis_ids\":853,\"../../plots/cartesian/constraints\":857,\"../../registry\":927,\"../bar/defaults\":941}],1108:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../bar/style_defaults\"),s\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,l){function c(r,n){return i.coerce(t,e,s,r,n)}var u\u003dc(\"x\"),f\u003dc(\"y\");c(\"cumulative.enabled\")\u0026\u0026(c(\"cumulative.direction\"),c(\"cumulative.currentbin\")),c(\"text\"),c(\"hovertext\"),c(\"hovertemplate\"),c(\"xhoverformat\"),c(\"yhoverformat\");var h\u003dc(\"orientation\",f\u0026\u0026!u?\"h\":\"v\"),p\u003d\"v\"\u003d\u003d\u003dh?\"x\":\"y\",d\u003d\"v\"\u003d\u003d\u003dh?\"y\":\"x\",m\u003du\u0026\u0026f?Math.min(i.minRowLength(u)\u0026\u0026i.minRowLength(f)):i.minRowLength(e[p]||[]);if(m){e._length\u003dm,n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],l),e[d]\u0026\u0026c(\"histfunc\"),c(\"histnorm\"),c(\"autobin\"+p),o(t,e,c,r,l),i.coerceSelectionMarkerOpacity(e,c);var g\u003d(e.marker.line||{}).color,v\u003dn.getComponentMethod(\"errorbars\",\"supplyDefaults\");v(t,e,g||a.defaultLine,{axis:\"y\"}),v(t,e,g||a.defaultLine,{axis:\"x\",inherit:\"y\"})}else e.visible\u003d!1}},{\"../../components/color\":662,\"../../lib\":799,\"../../registry\":927,\"../bar/style_defaults\":952,\"./attributes\":1100}],1109:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i){if(t.x\u003d\"xVal\"in e?e.xVal:e.x,t.y\u003d\"yVal\"in e?e.yVal:e.y,\"zLabelVal\"in e\u0026\u0026(t.z\u003de.zLabelVal),e.xa\u0026\u0026(t.xaxis\u003de.xa),e.ya\u0026\u0026(t.yaxis\u003de.ya),!(r.cumulative||{}).enabled){var a,o\u003dArray.isArray(i)?n[0].pts[i[0]][i[1]]:n[i].pts;if(t.pointNumbers\u003do,t.binNumber\u003dt.pointNumber,delete t.pointNumber,delete t.pointIndex,r._indexToPoints){a\u003d[];for(var s\u003d0;s\u003co.length;s++)a\u003da.concat(r._indexToPoints[o[s]])}else a\u003do;t.pointIndices\u003da}return t}},{}],1110:[function(t,e,r){\"use strict\";var n\u003dt(\"../bar/hover\").hoverPoints,i\u003dt(\"../../plots/cartesian/axes\").hoverLabelText;e.exports\u003dfunction(t,e,r,a,o){var s\u003dn(t,e,r,a,o);if(s){var l\u003d(t\u003ds[0]).cd[t.index],c\u003dt.cd[0].trace;if(!c.cumulative.enabled){var u\u003d\"h\"\u003d\u003d\u003dc.orientation?\"y\":\"x\";t[u+\"Label\"]\u003di(t[u+\"a\"],[l.ph0,l.ph1],c[u+\"hoverformat\"])}return s}}},{\"../../plots/cartesian/axes\":849,\"../bar/hover\":944}],1111:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),layoutAttributes:t(\"../bar/layout_attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"./cross_trace_defaults\"),supplyLayoutDefaults:t(\"../bar/layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"../bar/cross_trace_calc\").crossTraceCalc,plot:t(\"../bar/plot\").plot,layerName:\"barlayer\",style:t(\"../bar/style\").style,styleOnSelect:t(\"../bar/style\").styleOnSelect,colorbar:t(\"../scatter/marker_colorbar\"),hoverPoints:t(\"./hover\"),selectPoints:t(\"../bar/select\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"histogram\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"bar\",\"histogram\",\"oriented\",\"errorBarsOK\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":863,\"../bar/cross_trace_calc\":940,\"../bar/layout_attributes\":946,\"../bar/layout_defaults\":947,\"../bar/plot\":948,\"../bar/select\":949,\"../bar/style\":951,\"../scatter/marker_colorbar\":1232,\"./attributes\":1100,\"./calc\":1105,\"./cross_trace_defaults\":1107,\"./defaults\":1108,\"./event_data\":1109,\"./hover\":1110}],1112:[function(t,e,r){\"use strict\";e.exports\u003d{percent:function(t,e){for(var r\u003dt.length,n\u003d100/e,i\u003d0;i\u003cr;i++)t[i]*\u003dn},probability:function(t,e){for(var r\u003dt.length,n\u003d0;n\u003cr;n++)t[n]/\u003de},density:function(t,e,r,n){var i\u003dt.length;n\u003dn||1;for(var a\u003d0;a\u003ci;a++)t[a]*\u003dr[a]*n},\"probability density\":function(t,e,r,n){var i\u003dt.length;n\u0026\u0026(e/\u003dn);for(var a\u003d0;a\u003ci;a++)t[a]*\u003dr[a]/e}}},{}],1113:[function(t,e,r){\"use strict\";var n\u003dt(\"../histogram/attributes\"),i\u003dt(\"../histogram/bin_attributes\"),a\u003dt(\"../heatmap/attributes\"),o\u003dt(\"../../plots/attributes\"),s\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,l\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,c\u003dt(\"../../components/colorscale/attributes\"),u\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003du({x:n.x,y:n.y,z:{valType:\"data_array\",editType:\"calc\"},marker:{color:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"},histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:i(\"x\"),nbinsy:n.nbinsy,ybins:i(\"y\"),autobinx:n.autobinx,autobiny:n.autobiny,bingroup:u({},n.bingroup,{}),xbingroup:u({},n.bingroup,{}),ybingroup:u({},n.bingroup,{}),xgap:a.xgap,ygap:a.ygap,zsmooth:a.zsmooth,xhoverformat:s(\"x\"),yhoverformat:s(\"y\"),zhoverformat:s(\"z\",1),hovertemplate:l({},{keys:\"z\"}),showlegend:u({},o.showlegend,{dflt:!1})},c(\"\",{cLetter:\"z\",autoColorDflt:!1}))},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../heatmap/attributes\":1081,\"../histogram/attributes\":1100,\"../histogram/bin_attributes\":1102}],1114:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../histogram/bin_functions\"),o\u003dt(\"../histogram/norm_functions\"),s\u003dt(\"../histogram/average\"),l\u003dt(\"../histogram/bin_label_vals\"),c\u003dt(\"../histogram/calc\").calcAllAutoBins;function u(t,e,r,n){var i,a\u003dnew Array(t);if(n)for(i\u003d0;i\u003ct;i++)a[i]\u003d1/(e[i+1]-e[i]);else{var o\u003d1/r;for(i\u003d0;i\u003ct;i++)a[i]\u003do}return a}function f(t,e){return{start:t(e.start),end:t(e.end),size:e.size}}function h(t,e,r,n,i,a){var o,s\u003dt.length-1,c\u003dnew Array(s),u\u003dl(r,n,t,i,a);for(o\u003d0;o\u003cs;o++){var f\u003d(e||[])[o];c[o]\u003dvoid 0\u003d\u003d\u003df?[u(t[o]),u(t[o+1],!0)]:[f,f]}return c}e.exports\u003dfunction(t,e){var r,l,p,d,m\u003di.getFromId(t,e.xaxis),g\u003di.getFromId(t,e.yaxis),v\u003de.xcalendar,y\u003de.ycalendar,x\u003dfunction(t){return m.r2c(t,0,v)},b\u003dfunction(t){return g.r2c(t,0,y)},_\u003dc(t,e,m,\"x\"),w\u003d_[0],T\u003d_[1],k\u003dc(t,e,g,\"y\"),M\u003dk[0],A\u003dk[1],S\u003de._length;T.length\u003eS\u0026\u0026T.splice(S,T.length-S),A.length\u003eS\u0026\u0026A.splice(S,A.length-S);var E\u003d[],L\u003d[],C\u003d[],P\u003d\"string\"\u003d\u003dtypeof w.size,I\u003d\"string\"\u003d\u003dtypeof M.size,O\u003d[],z\u003d[],D\u003dP?O:w,R\u003dI?z:M,F\u003d0,B\u003d[],N\u003d[],j\u003de.histnorm,U\u003de.histfunc,V\u003d-1!\u003d\u003dj.indexOf(\"density\"),q\u003d\"max\"\u003d\u003d\u003dU||\"min\"\u003d\u003d\u003dU?null:0,H\u003da.count,G\u003do[j],Y\u003d!1,W\u003d[],X\u003d[],Z\u003d\"z\"in e?e.z:\"marker\"in e\u0026\u0026Array.isArray(e.marker.color)?e.marker.color:\"\";Z\u0026\u0026\"count\"!\u003d\u003dU\u0026\u0026(Y\u003d\"avg\"\u003d\u003d\u003dU,H\u003da[U]);var J\u003dw.size,K\u003dx(w.start),Q\u003dx(w.end)+(K-i.tickIncrement(K,J,!1,v))/1e6;for(r\u003dK;r\u003cQ;r\u003di.tickIncrement(r,J,!1,v))L.push(q),O.push(r),Y\u0026\u0026C.push(0);O.push(r);var $,tt\u003dL.length,et\u003d(r-K)/tt,rt\u003d($\u003dK+et/2,m.c2r($,0,v)),nt\u003dM.size,it\u003db(M.start),at\u003db(M.end)+(it-i.tickIncrement(it,nt,!1,y))/1e6;for(r\u003dit;r\u003cat;r\u003di.tickIncrement(r,nt,!1,y)){E.push(L.slice()),z.push(r);var ot\u003dnew Array(tt);for(l\u003d0;l\u003ctt;l++)ot[l]\u003d[];N.push(ot),Y\u0026\u0026B.push(C.slice())}z.push(r);var st\u003dE.length,lt\u003d(r-it)/st,ct\u003dfunction(t){return g.c2r(t,0,y)}(it+lt/2);V\u0026\u0026(W\u003du(L.length,D,et,P),X\u003du(E.length,R,lt,I)),P||\"date\"!\u003d\u003dm.type||(D\u003df(x,D)),I||\"date\"!\u003d\u003dg.type||(R\u003df(b,R));var ut\u003d!0,ft\u003d!0,ht\u003dnew Array(tt),pt\u003dnew Array(st),dt\u003d1/0,mt\u003d1/0,gt\u003d1/0,vt\u003d1/0;for(r\u003d0;r\u003cS;r++){var yt\u003dT[r],xt\u003dA[r];p\u003dn.findBin(yt,D),d\u003dn.findBin(xt,R),p\u003e\u003d0\u0026\u0026p\u003ctt\u0026\u0026d\u003e\u003d0\u0026\u0026d\u003cst\u0026\u0026(F+\u003dH(p,r,E[d],Z,B[d]),N[d][p].push(r),ut\u0026\u0026(void 0\u003d\u003d\u003dht[p]?ht[p]\u003dyt:ht[p]!\u003d\u003dyt\u0026\u0026(ut\u003d!1)),ft\u0026\u0026(void 0\u003d\u003d\u003dpt[d]?pt[d]\u003dxt:pt[d]!\u003d\u003dxt\u0026\u0026(ft\u003d!1)),dt\u003dMath.min(dt,yt-O[p]),mt\u003dMath.min(mt,O[p+1]-yt),gt\u003dMath.min(gt,xt-z[d]),vt\u003dMath.min(vt,z[d+1]-xt))}if(Y)for(d\u003d0;d\u003cst;d++)F+\u003ds(E[d],B[d]);if(G)for(d\u003d0;d\u003cst;d++)G(E[d],F,W,X[d]);return{x:T,xRanges:h(O,ut\u0026\u0026ht,dt,mt,m,v),x0:rt,dx:et,y:A,yRanges:h(z,ft\u0026\u0026pt,gt,vt,g,y),y0:ct,dy:lt,z:E,pts:N}}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../histogram/average\":1101,\"../histogram/bin_functions\":1103,\"../histogram/bin_label_vals\":1104,\"../histogram/calc\":1105,\"../histogram/norm_functions\":1112}],1115:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./sample_defaults\"),a\u003dt(\"../heatmap/style_defaults\"),o\u003dt(\"../../components/colorscale/defaults\"),s\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,l){function c(r,i){return n.coerce(t,e,s,r,i)}i(t,e,c,l),!1!\u003d\u003de.visible\u0026\u0026(a(t,e,c,l),o(t,e,l,c,{prefix:\"\",cLetter:\"z\"}),c(\"hovertemplate\"),c(\"xhoverformat\"),c(\"yhoverformat\"))}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"../heatmap/style_defaults\":1094,\"./attributes\":1113,\"./sample_defaults\":1118}],1116:[function(t,e,r){\"use strict\";var n\u003dt(\"../heatmap/hover\"),i\u003dt(\"../../plots/cartesian/axes\").hoverLabelText;e.exports\u003dfunction(t,e,r,a,o){var s\u003dn(t,e,r,a,o);if(s){var l\u003d(t\u003ds[0]).index,c\u003dl[0],u\u003dl[1],f\u003dt.cd[0],h\u003df.trace,p\u003df.xRanges[u],d\u003df.yRanges[c];return t.xLabel\u003di(t.xa,[p[0],p[1]],h.xhoverformat),t.yLabel\u003di(t.ya,[d[0],d[1]],h.yhoverformat),s}}},{\"../../plots/cartesian/axes\":849,\"../heatmap/hover\":1088}],1117:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../histogram/cross_trace_defaults\"),calc:t(\"../heatmap/calc\"),plot:t(\"../heatmap/plot\"),layerName:\"heatmaplayer\",colorbar:t(\"../heatmap/colorbar\"),style:t(\"../heatmap/style\"),hoverPoints:t(\"./hover\"),eventData:t(\"../histogram/event_data\"),moduleType:\"trace\",name:\"histogram2d\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"histogram\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":863,\"../heatmap/calc\":1082,\"../heatmap/colorbar\":1084,\"../heatmap/plot\":1092,\"../heatmap/style\":1093,\"../histogram/cross_trace_defaults\":1107,\"../histogram/event_data\":1109,\"./attributes\":1113,\"./defaults\":1115,\"./hover\":1116}],1118:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r,a){var o\u003dr(\"x\"),s\u003dr(\"y\"),l\u003di.minRowLength(o),c\u003di.minRowLength(s);l\u0026\u0026c?(e._length\u003dMath.min(l,c),n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],a),(r(\"z\")||r(\"marker.color\"))\u0026\u0026r(\"histfunc\"),r(\"histnorm\"),r(\"autobinx\"),r(\"autobiny\")):e.visible\u003d!1}},{\"../../lib\":799,\"../../registry\":927}],1119:[function(t,e,r){\"use strict\";var n\u003dt(\"../histogram2d/attributes\"),i\u003dt(\"../contour/attributes\"),a\u003dt(\"../../components/colorscale/attributes\"),o\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,s\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003ds({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,nbinsx:n.nbinsx,xbins:n.xbins,nbinsy:n.nbinsy,ybins:n.ybins,autobinx:n.autobinx,autobiny:n.autobiny,bingroup:n.bingroup,xbingroup:n.xbingroup,ybingroup:n.ybingroup,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:{color:i.line.color,width:s({},i.line.width,{dflt:.5}),dash:i.line.dash,smoothing:i.line.smoothing,editType:\"plot\"},xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),zhoverformat:o(\"z\",1),hovertemplate:n.hovertemplate},a(\"\",{cLetter:\"z\",editTypeOverride:\"calc\"}))},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/cartesian/axis_format_attributes\":852,\"../contour/attributes\":1024,\"../histogram2d/attributes\":1113}],1120:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../histogram2d/sample_defaults\"),a\u003dt(\"../contour/contours_defaults\"),o\u003dt(\"../contour/style_defaults\"),s\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,l){function c(r,i){return n.coerce(t,e,s,r,i)}i(t,e,c,l),!1!\u003d\u003de.visible\u0026\u0026(a(t,e,c,(function(r){return n.coerce2(t,e,s,r)})),o(t,e,c,l),c(\"hovertemplate\"),c(\"xhoverformat\"),c(\"yhoverformat\"))}},{\"../../lib\":799,\"../contour/contours_defaults\":1031,\"../contour/style_defaults\":1045,\"../histogram2d/sample_defaults\":1118,\"./attributes\":1119}],1121:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../histogram/cross_trace_defaults\"),calc:t(\"../contour/calc\"),plot:t(\"../contour/plot\").plot,layerName:\"contourlayer\",style:t(\"../contour/style\"),colorbar:t(\"../contour/colorbar\"),hoverPoints:t(\"../contour/hover\"),moduleType:\"trace\",name:\"histogram2dcontour\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"contour\",\"histogram\",\"showLegend\"],meta:{}}},{\"../../plots/cartesian\":863,\"../contour/calc\":1025,\"../contour/colorbar\":1027,\"../contour/hover\":1037,\"../contour/plot\":1042,\"../contour/style\":1044,\"../histogram/cross_trace_defaults\":1107,\"./attributes\":1119,\"./defaults\":1120}],1122:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,a\u003dt(\"../../components/colorscale/attributes\"),o\u003dt(\"../../plots/domain\").attributes,s\u003dt(\"../pie/attributes\"),l\u003dt(\"../sunburst/attributes\"),c\u003dt(\"../treemap/attributes\"),u\u003dt(\"../treemap/constants\"),f\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003d{labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\",editType:\"plot\"},flip:c.tiling.flip,pad:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"calc\"},marker:f({colors:l.marker.colors,line:l.marker.line,editType:\"calc\"},a(\"marker\",{colorAttr:\"colors\",anim:!1})),leaf:l.leaf,pathbar:c.pathbar,text:s.text,textinfo:l.textinfo,texttemplate:i({editType:\"plot\"},{keys:u.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:u.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:c.outsidetextfont,textposition:c.textposition,sort:s.sort,root:l.root,domain:o({name:\"icicle\",trace:!0,editType:\"calc\"})}},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/domain\":877,\"../../plots/template_attributes\":922,\"../pie/attributes\":1188,\"../sunburst/attributes\":1326,\"../treemap/attributes\":1352,\"../treemap/constants\":1355}],1123:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/plots\");r.name\u003d\"icicle\",r.plot\u003dfunction(t,e,i,a){n.plotBasePlot(r.name,t,e,i,a)},r.clean\u003dfunction(t,e,i,a){n.cleanBasePlot(r.name,t,e,i,a)}},{\"../../plots/plots\":913}],1124:[function(t,e,r){\"use strict\";var n\u003dt(\"../sunburst/calc\");r.calc\u003dfunction(t,e){return n.calc(t,e)},r.crossTraceCalc\u003dfunction(t){return n._runCrossTraceCalc(\"icicle\",t)}},{\"../sunburst/calc\":1328}],1125:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../../plots/domain\").defaults,s\u003dt(\"../bar/defaults\").handleText,l\u003dt(\"../bar/constants\").TEXTPAD,c\u003dt(\"../../components/colorscale\"),u\u003dc.hasColorscale,f\u003dc.handleDefaults;e.exports\u003dfunction(t,e,r,c){function h(r,a){return n.coerce(t,e,i,r,a)}var p\u003dh(\"labels\"),d\u003dh(\"parents\");if(p\u0026\u0026p.length\u0026\u0026d\u0026\u0026d.length){var m\u003dh(\"values\");m\u0026\u0026m.length?h(\"branchvalues\"):h(\"count\"),h(\"level\"),h(\"maxdepth\"),h(\"tiling.orientation\"),h(\"tiling.flip\"),h(\"tiling.pad\");var g\u003dh(\"text\");h(\"texttemplate\"),e.texttemplate||h(\"textinfo\",Array.isArray(g)?\"text+label\":\"label\"),h(\"hovertext\"),h(\"hovertemplate\");var v\u003dh(\"pathbar.visible\");s(t,e,c,h,\"auto\",{hasPathbar:v,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),h(\"textposition\"),h(\"marker.line.width\")\u0026\u0026h(\"marker.line.color\",c.paper_bgcolor),h(\"marker.colors\");var y\u003de._hasColorscale\u003du(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis;y\u0026\u0026f(t,e,c,h,{prefix:\"marker.\",cLetter:\"c\"}),h(\"leaf.opacity\",y?1:.7),e._hovered\u003d{marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},v\u0026\u0026(h(\"pathbar.thickness\",e.pathbar.textfont.size+2*l),h(\"pathbar.side\"),h(\"pathbar.edgeshape\")),h(\"sort\"),h(\"root.color\"),o(e,c,h),e._length\u003dnull}else e.visible\u003d!1}},{\"../../components/color\":662,\"../../components/colorscale\":674,\"../../lib\":799,\"../../plots/domain\":877,\"../bar/constants\":939,\"../bar/defaults\":941,\"./attributes\":1122}],1126:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../lib/svg_text_utils\"),s\u003dt(\"./partition\"),l\u003dt(\"./style\").styleOne,c\u003dt(\"../treemap/constants\"),u\u003dt(\"../sunburst/helpers\"),f\u003dt(\"../sunburst/fx\"),h\u003dt(\"../sunburst/plot\").formatSliceLabel;e.exports\u003dfunction(t,e,r,p,d){var m\u003dd.width,g\u003dd.height,v\u003dd.viewX,y\u003dd.viewY,x\u003dd.pathSlice,b\u003dd.toMoveInsideSlice,_\u003dd.strTransform,w\u003dd.hasTransition,T\u003dd.handleSlicesExit,k\u003dd.makeUpdateSliceInterpolator,M\u003dd.makeUpdateTextInterpolator,A\u003dd.prevEntry,S\u003dt._fullLayout,E\u003de[0].trace,L\u003d-1!\u003d\u003dE.textposition.indexOf(\"left\"),C\u003d-1!\u003d\u003dE.textposition.indexOf(\"right\"),P\u003d-1!\u003d\u003dE.textposition.indexOf(\"bottom\"),I\u003ds(r,[m,g],{flipX:E.tiling.flip.indexOf(\"x\")\u003e-1,flipY:E.tiling.flip.indexOf(\"y\")\u003e-1,orientation:E.tiling.orientation,pad:{inner:E.tiling.pad},maxDepth:E._maxDepth}).descendants(),O\u003d1/0,z\u003d-1/0;I.forEach((function(t){var e\u003dt.depth;e\u003e\u003dE._maxDepth?(t.x0\u003dt.x1\u003d(t.x0+t.x1)/2,t.y0\u003dt.y1\u003d(t.y0+t.y1)/2):(O\u003dMath.min(O,e),z\u003dMath.max(z,e))})),p\u003dp.data(I,u.getPtId),E._maxVisibleLayers\u003disFinite(z)?z-O+1:0,p.enter().append(\"g\").classed(\"slice\",!0),T(p,!1,{},[m,g],x),p.order();var D\u003dnull;if(w\u0026\u0026A){var R\u003du.getPtId(A);p.each((function(t){null\u003d\u003d\u003dD\u0026\u0026u.getPtId(t)\u003d\u003d\u003dR\u0026\u0026(D\u003d{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var F\u003dfunction(){return D||{x0:0,x1:m,y0:0,y1:g}},B\u003dp;return w\u0026\u0026(B\u003dB.transition().each(\"end\",(function(){var e\u003dn.select(this);u.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),B.each((function(s){s._hoverX\u003dv(s.x1-E.tiling.pad),s._hoverY\u003dy(P?s.y1-E.tiling.pad/2:s.y0+E.tiling.pad/2);var p\u003dn.select(this),d\u003di.ensureSingle(p,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",\"all\")}));w?d.transition().attrTween(\"d\",(function(t){var e\u003dk(t,!1,F(),[m,g],{orientation:E.tiling.orientation,flipX:E.tiling.flip.indexOf(\"x\")\u003e-1,flipY:E.tiling.flip.indexOf(\"y\")\u003e-1});return function(t){return x(e(t))}})):d.attr(\"d\",x),p.call(f,r,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{isTransitioning:t._transitioning}),d.call(l,s,E,{hovered:!1}),s.x0\u003d\u003d\u003ds.x1||s.y0\u003d\u003d\u003ds.y1?s._text\u003d\"\":s._text\u003dh(s,r,E,e,S)||\"\";var T\u003di.ensureSingle(p,\"g\",\"slicetext\"),A\u003di.ensureSingle(T,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),I\u003di.ensureUniformFontSize(t,u.determineTextFont(E,s,S.font));A.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",C?\"end\":L?\"start\":\"middle\").call(a.font,I).call(o.convertToTspans,t),s.textBB\u003da.bBox(A.node()),s.transform\u003db(s,{fontSize:I.size}),s.transform.fontSize\u003dI.size,w?A.transition().attrTween(\"transform\",(function(t){var e\u003dM(t,!1,F(),[m,g]);return function(t){return _(e(t))}})):A.attr(\"transform\",_(s))})),D}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../sunburst/fx\":1331,\"../sunburst/helpers\":1332,\"../sunburst/plot\":1336,\"../treemap/constants\":1355,\"./partition\":1130,\"./style\":1132,\"@plotly/d3\":58}],1127:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"icicle\",basePlotModule:t(\"./base_plot\"),categories:[],animatable:!0,attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\"),style:t(\"./style\").style,colorbar:t(\"../scatter/marker_colorbar\"),meta:{}}},{\"../scatter/marker_colorbar\":1232,\"./attributes\":1122,\"./base_plot\":1123,\"./calc\":1124,\"./defaults\":1125,\"./layout_attributes\":1128,\"./layout_defaults\":1129,\"./plot\":1131,\"./style\":1132}],1128:[function(t,e,r){\"use strict\";e.exports\u003d{iciclecolorway:{valType:\"colorlist\",editType:\"calc\"},extendiciclecolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{}],1129:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"iciclecolorway\",e.colorway),r(\"extendiciclecolors\")}},{\"../../lib\":799,\"./layout_attributes\":1128}],1130:[function(t,e,r){\"use strict\";var n\u003dt(\"d3-hierarchy\"),i\u003dt(\"../treemap/flip_tree\");e.exports\u003dfunction(t,e,r){var a\u003dr.flipX,o\u003dr.flipY,s\u003d\"h\"\u003d\u003d\u003dr.orientation,l\u003dr.maxDepth,c\u003de[0],u\u003de[1];l\u0026\u0026(c\u003d(t.height+1)*e[0]/Math.min(t.height+1,l),u\u003d(t.height+1)*e[1]/Math.min(t.height+1,l));var f\u003dn.partition().padding(r.pad.inner).size(s?[e[1],c]:[e[0],u])(t);return(s||a||o)\u0026\u0026i(f,e,{swapXY:s,flipX:a,flipY:o}),f}},{\"../treemap/flip_tree\":1360,\"d3-hierarchy\":167}],1131:[function(t,e,r){\"use strict\";var n\u003dt(\"../treemap/draw\"),i\u003dt(\"./draw_descendants\");e.exports\u003dfunction(t,e,r,a){return n(t,e,r,a,{type:\"icicle\",drawDescendants:i})}},{\"../treemap/draw\":1357,\"./draw_descendants\":1126}],1132:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../lib\"),o\u003dt(\"../bar/uniform_text\").resizeText;function s(t,e,r){var n\u003de.data.data,o\u003d!e.children,s\u003dn.i,l\u003da.castOption(r,s,\"marker.line.color\")||i.defaultLine,c\u003da.castOption(r,s,\"marker.line.width\")||0;t.style(\"stroke-width\",c).call(i.fill,n.color).call(i.stroke,l).style(\"opacity\",o?r.leaf.opacity:null)}e.exports\u003d{style:function(t){var e\u003dt._fullLayout._iciclelayer.selectAll(\".trace\");o(t,e,\"icicle\"),e.each((function(t){var e\u003dn.select(this),r\u003dt[0].trace;e.style(\"opacity\",r.opacity),e.selectAll(\"path.surface\").each((function(t){n.select(this).call(s,t,r)}))}))},styleOne:s}},{\"../../components/color\":662,\"../../lib\":799,\"../bar/uniform_text\":953,\"@plotly/d3\":58}],1133:[function(t,e,r){\"use strict\";for(var n\u003dt(\"../../plots/attributes\"),i\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,a\u003dt(\"../../lib/extend\").extendFlat,o\u003dt(\"./constants\").colormodel,s\u003d[\"rgb\",\"rgba\",\"rgba256\",\"hsl\",\"hsla\"],l\u003d[],c\u003d[],u\u003d0;u\u003cs.length;u++){var f\u003do[s[u]];l.push(\"For the `\"+s[u]+\"` colormodel, it is [\"+(f.zminDflt||f.min).join(\", \")+\"].\"),c.push(\"For the `\"+s[u]+\"` colormodel, it is [\"+(f.zmaxDflt||f.max).join(\", \")+\"].\")}e.exports\u003da({source:{valType:\"string\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},colormodel:{valType:\"enumerated\",values:s,editType:\"calc\"},zsmooth:{valType:\"enumerated\",values:[\"fast\",!1],dflt:!1,editType:\"plot\"},zmin:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\"},zmax:{valType:\"info_array\",items:[{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"},{valType:\"number\",editType:\"calc\"}],editType:\"calc\"},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dx:{valType:\"number\",dflt:1,editType:\"calc\"},dy:{valType:\"number\",dflt:1,editType:\"calc\"},text:{valType:\"data_array\",editType:\"plot\"},hovertext:{valType:\"data_array\",editType:\"plot\"},hoverinfo:a({},n.hoverinfo,{flags:[\"x\",\"y\",\"z\",\"color\",\"name\",\"text\"],dflt:\"x+y+z+text+name\"}),hovertemplate:i({},{keys:[\"z\",\"color\",\"colormodel\"]}),transforms:void 0})},{\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"./constants\":1135}],1134:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./constants\"),a\u003dt(\"fast-isnumeric\"),o\u003dt(\"../../plots/cartesian/axes\"),s\u003dt(\"../../lib\").maxRowLength,l\u003dt(\"./helpers\").getImageSize;function c(t,e,r,i){return function(a){return n.constrain((a-t)*e,r,i)}}function u(t,e){return function(r){return n.constrain(r,t,e)}}e.exports\u003dfunction(t,e){var r,n;if(e._hasZ)r\u003de.z.length,n\u003ds(e.z);else if(e._hasSource){var f\u003dl(e.source);r\u003df.height,n\u003df.width}var h,p\u003do.getFromId(t,e.xaxis||\"x\"),d\u003do.getFromId(t,e.yaxis||\"y\"),m\u003dp.d2c(e.x0)-e.dx/2,g\u003dd.d2c(e.y0)-e.dy/2,v\u003d[m,m+n*e.dx],y\u003d[g,g+r*e.dy];if(p\u0026\u0026\"log\"\u003d\u003d\u003dp.type)for(h\u003d0;h\u003cn;h++)v.push(m+h*e.dx);if(d\u0026\u0026\"log\"\u003d\u003d\u003dd.type)for(h\u003d0;h\u003cr;h++)y.push(g+h*e.dy);return e._extremes[p._id]\u003do.findExtremes(p,v),e._extremes[d._id]\u003do.findExtremes(d,y),e._scaler\u003dfunction(t){var e\u003di.colormodel[t.colormodel],r\u003d(e.colormodel||t.colormodel).length;t._sArray\u003d[];for(var n\u003d0;n\u003cr;n++)e.min[n]!\u003d\u003dt.zmin[n]||e.max[n]!\u003d\u003dt.zmax[n]?t._sArray.push(c(t.zmin[n],(e.max[n]-e.min[n])/(t.zmax[n]-t.zmin[n]),e.min[n],e.max[n])):t._sArray.push(u(e.min[n],e.max[n]));return function(e){for(var n\u003de.slice(0,r),i\u003d0;i\u003cr;i++){var o\u003dn[i];if(!a(o))return!1;n[i]\u003dt._sArray[i](o)}return n}}(e),[{x0:m,y0:g,z:e.z,w:n,h:r}]}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"./constants\":1135,\"./helpers\":1138,\"fast-isnumeric\":245}],1135:[function(t,e,r){\"use strict\";e.exports\u003d{colormodel:{rgb:{min:[0,0,0],max:[255,255,255],fmt:function(t){return t.slice(0,3)},suffix:[\"\",\"\",\"\"]},rgba:{min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},rgba256:{colormodel:\"rgba\",zminDflt:[0,0,0,0],zmaxDflt:[255,255,255,255],min:[0,0,0,0],max:[255,255,255,1],fmt:function(t){return t.slice(0,4)},suffix:[\"\",\"\",\"\",\"\"]},hsl:{min:[0,0,0],max:[360,100,100],fmt:function(t){var e\u003dt.slice(0,3);return e[1]\u003de[1]+\"%\",e[2]\u003de[2]+\"%\",e},suffix:[\"\\xb0\",\"%\",\"%\"]},hsla:{min:[0,0,0,0],max:[360,100,100,1],fmt:function(t){var e\u003dt.slice(0,4);return e[1]\u003de[1]+\"%\",e[2]\u003de[2]+\"%\",e},suffix:[\"\\xb0\",\"%\",\"%\",\"\"]}},pixelatedStyle:[\"image-rendering: optimizeSpeed\",\"image-rendering: -moz-crisp-edges\",\"image-rendering: -o-crisp-edges\",\"image-rendering: -webkit-optimize-contrast\",\"image-rendering: optimize-contrast\",\"image-rendering: crisp-edges\",\"image-rendering: pixelated\",\"\"].join(\"; \")}},{}],1136:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"./constants\"),o\u003dt(\"../../snapshot/helpers\").IMAGE_URL_PREFIX;e.exports\u003dfunction(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"source\"),e.source\u0026\u0026!e.source.match(o)\u0026\u0026delete e.source,e._hasSource\u003d!!e.source;var s,l\u003dr(\"z\");(e._hasZ\u003d!(void 0\u003d\u003d\u003dl||!l.length||!l[0]||!l[0].length),e._hasZ||e._hasSource)?(r(\"x0\"),r(\"y0\"),r(\"dx\"),r(\"dy\"),e._hasZ?(r(\"colormodel\",\"rgb\"),r(\"zmin\",(s\u003da.colormodel[e.colormodel]).zminDflt||s.min),r(\"zmax\",s.zmaxDflt||s.max)):e._hasSource\u0026\u0026(e.colormodel\u003d\"rgba256\",s\u003da.colormodel[e.colormodel],e.zmin\u003ds.zminDflt,e.zmax\u003ds.zmaxDflt),r(\"zsmooth\"),r(\"text\"),r(\"hovertext\"),r(\"hovertemplate\"),e._length\u003dnull):e.visible\u003d!1}},{\"../../lib\":799,\"../../snapshot/helpers\":931,\"./attributes\":1133,\"./constants\":1135}],1137:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return\"xVal\"in e\u0026\u0026(t.x\u003de.xVal),\"yVal\"in e\u0026\u0026(t.y\u003de.yVal),e.xa\u0026\u0026(t.xaxis\u003de.xa),e.ya\u0026\u0026(t.yaxis\u003de.ya),t.color\u003de.color,t.colormodel\u003de.trace.colormodel,t.z||(t.z\u003de.color),t}},{}],1138:[function(t,e,r){\"use strict\";var n\u003dt(\"probe-image-size/sync\"),i\u003dt(\"../../snapshot/helpers\").IMAGE_URL_PREFIX,a\u003dt(\"buffer/\").Buffer;r.getImageSize\u003dfunction(t){var e\u003dt.replace(i,\"\"),r\u003dnew a(e,\"base64\");return n(r)}},{\"../../snapshot/helpers\":931,\"buffer/\":117,\"probe-image-size/sync\":523}],1139:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/fx\"),i\u003dt(\"../../lib\"),a\u003dt(\"./constants\");e.exports\u003dfunction(t,e,r){var o\u003dt.cd[0],s\u003do.trace,l\u003dt.xa,c\u003dt.ya;if(!(n.inbox(e-o.x0,e-(o.x0+o.w*s.dx),0)\u003e0||n.inbox(r-o.y0,r-(o.y0+o.h*s.dy),0)\u003e0)){var u,f\u003dMath.floor((e-o.x0)/s.dx),h\u003dMath.floor(Math.abs(r-o.y0)/s.dy);if(s._hasZ?u\u003do.z[h][f]:s._hasSource\u0026\u0026(u\u003ds._canvas.el.getContext(\"2d\").getImageData(f,h,1,1).data),u){var p,d\u003do.hi||s.hoverinfo;if(d){var m\u003dd.split(\"+\");-1!\u003d\u003dm.indexOf(\"all\")\u0026\u0026(m\u003d[\"color\"]),-1!\u003d\u003dm.indexOf(\"color\")\u0026\u0026(p\u003d!0)}var g,v\u003da.colormodel[s.colormodel],y\u003dv.colormodel||s.colormodel,x\u003dy.length,b\u003ds._scaler(u),_\u003dv.suffix,w\u003d[];(s.hovertemplate||p)\u0026\u0026(w.push(\"[\"+[b[0]+_[0],b[1]+_[1],b[2]+_[2]].join(\", \")),4\u003d\u003d\u003dx\u0026\u0026w.push(\", \"+b[3]+_[3]),w.push(\"]\"),w\u003dw.join(\"\"),t.extraText\u003dy.toUpperCase()+\": \"+w),Array.isArray(s.hovertext)\u0026\u0026Array.isArray(s.hovertext[h])?g\u003ds.hovertext[h][f]:Array.isArray(s.text)\u0026\u0026Array.isArray(s.text[h])\u0026\u0026(g\u003ds.text[h][f]);var T\u003dc.c2p(o.y0+(h+.5)*s.dy),k\u003do.x0+(f+.5)*s.dx,M\u003do.y0+(h+.5)*s.dy,A\u003d\"[\"+u.slice(0,s.colormodel.length).join(\", \")+\"]\";return[i.extendFlat(t,{index:[h,f],x0:l.c2p(o.x0+f*s.dx),x1:l.c2p(o.x0+(f+1)*s.dx),y0:T,y1:T,color:b,xVal:k,xLabelVal:k,yVal:M,yLabelVal:M,zLabelVal:A,text:g,hovertemplateLabels:{zLabel:A,colorLabel:w,\"color[0]Label\":b[0]+_[0],\"color[1]Label\":b[1]+_[1],\"color[2]Label\":b[2]+_[2],\"color[3]Label\":b[3]+_[3]}})]}}}},{\"../../components/fx\":702,\"../../lib\":799,\"./constants\":1135}],1140:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"./style\"),hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"image\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"2dMap\",\"noSortingByValue\"],animatable:!1,meta:{}}},{\"../../plots/cartesian\":863,\"./attributes\":1133,\"./calc\":1134,\"./defaults\":1136,\"./event_data\":1137,\"./hover\":1139,\"./plot\":1141,\"./style\":1142}],1141:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003di.strTranslate,o\u003dt(\"../../constants/xmlns_namespaces\"),s\u003dt(\"./constants\"),l\u003di.isIOS()||i.isSafari()||i.isIE();e.exports\u003dfunction(t,e,r,c){var u\u003de.xaxis,f\u003de.yaxis,h\u003d!(l||t._context._exportedPlot);i.makeTraceGroups(c,r,\"im\").each((function(e){var r\u003dn.select(this),l\u003de[0],c\u003dl.trace,p\u003d(\"fast\"\u003d\u003d\u003dc.zsmooth||!1\u003d\u003d\u003dc.zsmooth\u0026\u0026h)\u0026\u0026!c._hasZ\u0026\u0026c._hasSource\u0026\u0026\"linear\"\u003d\u003d\u003du.type\u0026\u0026\"linear\"\u003d\u003d\u003df.type;c._realImage\u003dp;var d,m,g,v,y,x,b\u003dl.z,_\u003dl.x0,w\u003dl.y0,T\u003dl.w,k\u003dl.h,M\u003dc.dx,A\u003dc.dy;for(x\u003d0;void 0\u003d\u003d\u003dd\u0026\u0026x\u003cT;)d\u003du.c2p(_+x*M),x++;for(x\u003dT;void 0\u003d\u003d\u003dm\u0026\u0026x\u003e0;)m\u003du.c2p(_+x*M),x--;for(x\u003d0;void 0\u003d\u003d\u003dv\u0026\u0026x\u003ck;)v\u003df.c2p(w+x*A),x++;for(x\u003dk;void 0\u003d\u003d\u003dy\u0026\u0026x\u003e0;)y\u003df.c2p(w+x*A),x--;if(m\u003cd\u0026\u0026(g\u003dm,m\u003dd,d\u003dg),y\u003cv\u0026\u0026(g\u003dv,v\u003dy,y\u003dg),!p){d\u003dMath.max(-.5*u._length,d),m\u003dMath.min(1.5*u._length,m),v\u003dMath.max(-.5*f._length,v),y\u003dMath.min(1.5*f._length,y)}var S\u003dMath.round(m-d),E\u003dMath.round(y-v);if(S\u003c\u003d0||E\u003c\u003d0){r.selectAll(\"image\").data([]).exit().remove()}else{var L\u003dr.selectAll(\"image\").data([e]);L.enter().append(\"svg:image\").attr({xmlns:o.svg,preserveAspectRatio:\"none\"}),L.exit().remove();var C\u003d!1\u003d\u003d\u003dc.zsmooth?s.pixelatedStyle:\"\";if(p){var P\u003di.simpleMap(u.range,u.r2l),I\u003di.simpleMap(f.range,f.r2l),O\u003dP[1]\u003cP[0],z\u003dI[1]\u003eI[0];if(O||z){var D\u003dd+S/2,R\u003dv+E/2;C+\u003d\"transform:\"+a(D+\"px\",R+\"px\")+\"scale(\"+(O?-1:1)+\",\"+(z?-1:1)+\")\"+a(-D+\"px\",-R+\"px\")+\";\"}}L.attr(\"style\",C);var F\u003dnew Promise((function(t){if(c._hasZ)t();else if(c._hasSource)if(c._canvas\u0026\u0026c._canvas.el.width\u003d\u003d\u003dT\u0026\u0026c._canvas.el.height\u003d\u003d\u003dk\u0026\u0026c._canvas.source\u003d\u003d\u003dc.source)t();else{var e\u003ddocument.createElement(\"canvas\");e.width\u003dT,e.height\u003dk;var r\u003de.getContext(\"2d\");c._image\u003dc._image||new Image;var n\u003dc._image;n.onload\u003dfunction(){r.drawImage(n,0,0),c._canvas\u003d{el:e,source:c.source},t()},n.setAttribute(\"src\",c.source)}})).then((function(){var t;if(c._hasZ)t\u003dB((function(t,e){return b[e][t]})).toDataURL(\"image/png\");else if(c._hasSource)if(p)t\u003dc.source;else{var e\u003dc._canvas.el.getContext(\"2d\").getImageData(0,0,T,k).data;t\u003dB((function(t,r){var n\u003d4*(r*T+t);return[e[n],e[n+1],e[n+2],e[n+3]]})).toDataURL(\"image/png\")}L.attr({\"xlink:href\":t,height:E,width:S,x:d,y:v})}));t._promises.push(F)}function B(t){var e\u003ddocument.createElement(\"canvas\");e.width\u003dS,e.height\u003dE;var r,n\u003de.getContext(\"2d\"),a\u003dfunction(t){return i.constrain(Math.round(u.c2p(_+t*M)-d),0,S)},o\u003dfunction(t){return i.constrain(Math.round(f.c2p(w+t*A)-v),0,E)},h\u003ds.colormodel[c.colormodel],p\u003dh.colormodel||c.colormodel,m\u003dh.fmt;for(x\u003d0;x\u003cl.w;x++){var g\u003da(x),y\u003da(x+1);if(y!\u003d\u003dg\u0026\u0026!isNaN(y)\u0026\u0026!isNaN(g))for(var b\u003d0;b\u003cl.h;b++){var T\u003do(b),k\u003do(b+1);k\u003d\u003d\u003dT||isNaN(k)||isNaN(T)||!t(x,b)||(r\u003dc._scaler(t(x,b)),n.fillStyle\u003dr?p+\"(\"+m(r).join(\",\")+\")\":\"rgba(0,0,0,0)\",n.fillRect(g,T,y-g,k-T))}}return e}}))}},{\"../../constants/xmlns_namespaces\":776,\"../../lib\":799,\"./constants\":1135,\"@plotly/d3\":58}],1142:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\");e.exports\u003dfunction(t){n.select(t).selectAll(\".im image\").style(\"opacity\",(function(t){return t[0].trace.opacity}))}},{\"@plotly/d3\":58}],1143:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/extend\").extendFlat,i\u003dt(\"../../lib/extend\").extendDeep,a\u003dt(\"../../plot_api/edit_types\").overrideAll,o\u003dt(\"../../plots/font_attributes\"),s\u003dt(\"../../components/color/attributes\"),l\u003dt(\"../../plots/domain\").attributes,c\u003dt(\"../../plots/cartesian/layout_attributes\"),u\u003dt(\"../../plot_api/plot_template\").templatedArray,f\u003dt(\"../../constants/delta.js\"),h\u003dt(\"../../plots/cartesian/axis_format_attributes\").descriptionOnlyNumbers,p\u003do({editType:\"plot\",colorEditType:\"plot\"}),d\u003d{color:{valType:\"color\",editType:\"plot\"},line:{color:{valType:\"color\",dflt:s.defaultLine,editType:\"plot\"},width:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},editType:\"calc\"},thickness:{valType:\"number\",min:0,max:1,dflt:1,editType:\"plot\"},editType:\"calc\"},m\u003d{valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},g\u003du(\"step\",i({},d,{range:m}));e.exports\u003d{mode:{valType:\"flaglist\",editType:\"calc\",flags:[\"number\",\"delta\",\"gauge\"],dflt:\"number\"},value:{valType:\"number\",editType:\"calc\",anim:!0},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],editType:\"plot\"},domain:l({name:\"indicator\",trace:!0,editType:\"calc\"}),title:{text:{valType:\"string\",editType:\"plot\"},align:{valType:\"enumerated\",values:[\"left\",\"center\",\"right\"],editType:\"plot\"},font:n({},p,{}),editType:\"plot\"},number:{valueformat:{valType:\"string\",dflt:\"\",editType:\"plot\",description:h(\"value\")},font:n({},p,{}),prefix:{valType:\"string\",dflt:\"\",editType:\"plot\"},suffix:{valType:\"string\",dflt:\"\",editType:\"plot\"},editType:\"plot\"},delta:{reference:{valType:\"number\",editType:\"calc\"},position:{valType:\"enumerated\",values:[\"top\",\"bottom\",\"left\",\"right\"],dflt:\"bottom\",editType:\"plot\"},relative:{valType:\"boolean\",editType:\"plot\",dflt:!1},valueformat:{valType:\"string\",editType:\"plot\",description:h(\"value\")},increasing:{symbol:{valType:\"string\",dflt:f.INCREASING.SYMBOL,editType:\"plot\"},color:{valType:\"color\",dflt:f.INCREASING.COLOR,editType:\"plot\"},editType:\"plot\"},decreasing:{symbol:{valType:\"string\",dflt:f.DECREASING.SYMBOL,editType:\"plot\"},color:{valType:\"color\",dflt:f.DECREASING.COLOR,editType:\"plot\"},editType:\"plot\"},font:n({},p,{}),editType:\"calc\"},gauge:{shape:{valType:\"enumerated\",editType:\"plot\",dflt:\"angular\",values:[\"angular\",\"bullet\"]},bar:i({},d,{color:{dflt:\"green\"}}),bgcolor:{valType:\"color\",editType:\"plot\"},bordercolor:{valType:\"color\",dflt:s.defaultLine,editType:\"plot\"},borderwidth:{valType:\"number\",min:0,dflt:1,editType:\"plot\"},axis:a({range:m,visible:n({},c.visible,{dflt:!0}),tickmode:c.tickmode,nticks:c.nticks,tick0:c.tick0,dtick:c.dtick,tickvals:c.tickvals,ticktext:c.ticktext,ticks:n({},c.ticks,{dflt:\"outside\"}),ticklen:c.ticklen,tickwidth:c.tickwidth,tickcolor:c.tickcolor,showticklabels:c.showticklabels,tickfont:o({}),tickangle:c.tickangle,tickformat:c.tickformat,tickformatstops:c.tickformatstops,tickprefix:c.tickprefix,showtickprefix:c.showtickprefix,ticksuffix:c.ticksuffix,showticksuffix:c.showticksuffix,separatethousands:c.separatethousands,exponentformat:c.exponentformat,minexponent:c.minexponent,showexponent:c.showexponent,editType:\"plot\"},\"plot\"),steps:g,threshold:{line:{color:n({},d.line.color,{}),width:n({},d.line.width,{dflt:1}),editType:\"plot\"},thickness:n({},d.thickness,{dflt:.85}),value:{valType:\"number\",editType:\"calc\",dflt:!1},editType:\"plot\"},editType:\"plot\"}}},{\"../../components/color/attributes\":661,\"../../constants/delta.js\":769,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/cartesian/layout_attributes\":864,\"../../plots/domain\":877,\"../../plots/font_attributes\":878}],1144:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/plots\");r.name\u003d\"indicator\",r.plot\u003dfunction(t,e,i,a){n.plotBasePlot(r.name,t,e,i,a)},r.clean\u003dfunction(t,e,i,a){n.cleanBasePlot(r.name,t,e,i,a)}},{\"../../plots/plots\":913}],1145:[function(t,e,r){\"use strict\";e.exports\u003d{calc:function(t,e){var r\u003d[],n\u003de.value;\"number\"!\u003dtypeof e._lastValue\u0026\u0026(e._lastValue\u003de.value);var i\u003de._lastValue,a\u003di;return e._hasDelta\u0026\u0026\"number\"\u003d\u003dtypeof e.delta.reference\u0026\u0026(a\u003de.delta.reference),r[0]\u003d{y:n,lastY:i,delta:n-a,relativeDelta:(n-a)/a},r}}},{}],1146:[function(t,e,r){\"use strict\";e.exports\u003d{defaultNumberFontSize:80,bulletNumberDomainSize:.25,bulletPadding:.025,innerRadius:.75,valueThickness:.5,titlePadding:5,horizontalPadding:10}},{}],1147:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../plots/domain\").defaults,o\u003dt(\"../../plot_api/plot_template\"),s\u003dt(\"../../plots/array_container_defaults\"),l\u003dt(\"./constants.js\"),c\u003dt(\"../../plots/cartesian/tick_value_defaults\"),u\u003dt(\"../../plots/cartesian/tick_mark_defaults\"),f\u003dt(\"../../plots/cartesian/tick_label_defaults\");function h(t,e){function r(r,a){return n.coerce(t,e,i.gauge.steps,r,a)}r(\"color\"),r(\"line.color\"),r(\"line.width\"),r(\"range\"),r(\"thickness\")}e.exports\u003d{supplyDefaults:function(t,e,r,p){function d(r,a){return n.coerce(t,e,i,r,a)}a(e,p,d),d(\"mode\"),e._hasNumber\u003d-1!\u003d\u003de.mode.indexOf(\"number\"),e._hasDelta\u003d-1!\u003d\u003de.mode.indexOf(\"delta\"),e._hasGauge\u003d-1!\u003d\u003de.mode.indexOf(\"gauge\");var m\u003dd(\"value\");e._range\u003d[0,\"number\"\u003d\u003dtypeof m?1.5*m:1];var g,v,y,x,b,_,w\u003dnew Array(2);function T(t,e){return n.coerce(y,x,i.gauge,t,e)}function k(t,e){return n.coerce(b,_,i.gauge.axis,t,e)}if(e._hasNumber\u0026\u0026(d(\"number.valueformat\"),d(\"number.font.color\",p.font.color),d(\"number.font.family\",p.font.family),d(\"number.font.size\"),void 0\u003d\u003d\u003de.number.font.size\u0026\u0026(e.number.font.size\u003dl.defaultNumberFontSize,w[0]\u003d!0),d(\"number.prefix\"),d(\"number.suffix\"),g\u003de.number.font.size),e._hasDelta\u0026\u0026(d(\"delta.font.color\",p.font.color),d(\"delta.font.family\",p.font.family),d(\"delta.font.size\"),void 0\u003d\u003d\u003de.delta.font.size\u0026\u0026(e.delta.font.size\u003d(e._hasNumber?.5:1)*(g||l.defaultNumberFontSize),w[1]\u003d!0),d(\"delta.reference\",e.value),d(\"delta.relative\"),d(\"delta.valueformat\",e.delta.relative?\"2%\":\"\"),d(\"delta.increasing.symbol\"),d(\"delta.increasing.color\"),d(\"delta.decreasing.symbol\"),d(\"delta.decreasing.color\"),d(\"delta.position\"),v\u003de.delta.font.size),e._scaleNumbers\u003d(!e._hasNumber||w[0])\u0026\u0026(!e._hasDelta||w[1])||!1,d(\"title.font.color\",p.font.color),d(\"title.font.family\",p.font.family),d(\"title.font.size\",.25*(g||v||l.defaultNumberFontSize)),d(\"title.text\"),e._hasGauge){(y\u003dt.gauge)||(y\u003d{}),x\u003do.newContainer(e,\"gauge\"),T(\"shape\"),(e._isBullet\u003d\"bullet\"\u003d\u003d\u003de.gauge.shape)||d(\"title.align\",\"center\"),(e._isAngular\u003d\"angular\"\u003d\u003d\u003de.gauge.shape)||d(\"align\",\"center\"),T(\"bgcolor\",p.paper_bgcolor),T(\"borderwidth\"),T(\"bordercolor\"),T(\"bar.color\"),T(\"bar.line.color\"),T(\"bar.line.width\"),T(\"bar.thickness\",l.valueThickness*(\"bullet\"\u003d\u003d\u003de.gauge.shape?.5:1)),s(y,x,{name:\"steps\",handleItemDefaults:h}),T(\"threshold.value\"),T(\"threshold.thickness\"),T(\"threshold.line.width\"),T(\"threshold.line.color\"),b\u003d{},y\u0026\u0026(b\u003dy.axis||{}),_\u003do.newContainer(x,\"axis\"),k(\"visible\"),e._range\u003dk(\"range\",e._range);var M\u003d{outerTicks:!0};c(b,_,k,\"linear\"),f(b,_,k,\"linear\",M),u(b,_,k,M)}else d(\"title.align\",\"center\"),d(\"align\",\"center\"),e._isAngular\u003de._isBullet\u003d!1;e._length\u003dnull}}},{\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../plots/array_container_defaults\":844,\"../../plots/cartesian/tick_label_defaults\":871,\"../../plots/cartesian/tick_mark_defaults\":872,\"../../plots/cartesian/tick_value_defaults\":873,\"../../plots/domain\":877,\"./attributes\":1143,\"./constants.js\":1146}],1148:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"indicator\",basePlotModule:t(\"./base_plot\"),categories:[\"svg\",\"noOpacity\",\"noHover\"],animatable:!0,attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,calc:t(\"./calc\").calc,plot:t(\"./plot\"),meta:{}}},{\"./attributes\":1143,\"./base_plot\":1144,\"./calc\":1145,\"./defaults\":1147,\"./plot\":1149}],1149:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003di.strScale,o\u003di.strTranslate,s\u003di.rad2deg,l\u003dt(\"../../constants/alignment\").MID_SHIFT,c\u003dt(\"../../components/drawing\"),u\u003dt(\"./constants\"),f\u003dt(\"../../lib/svg_text_utils\"),h\u003dt(\"../../plots/cartesian/axes\"),p\u003dt(\"../../plots/cartesian/axis_defaults\"),d\u003dt(\"../../plots/cartesian/position_defaults\"),m\u003dt(\"../../plots/cartesian/layout_attributes\"),g\u003dt(\"../../components/color\"),v\u003d{left:\"start\",center:\"middle\",right:\"end\"},y\u003d{left:0,center:.5,right:1},x\u003d/[yzafpn\\xb5mkMGTPEZY]/;function b(t){return t\u0026\u0026t.duration\u003e0}function _(t){t.each((function(t){g.stroke(n.select(this),t.line.color)})).each((function(t){g.fill(n.select(this),t.color)})).style(\"stroke-width\",(function(t){return t.line.width}))}function w(t,e,r){var n\u003dt._fullLayout,a\u003di.extendFlat({type:\"linear\",ticks:\"outside\",range:r,showline:!0},e),o\u003d{type:\"linear\",_id:\"x\"+e._id},s\u003d{letter:\"x\",font:n.font,noHover:!0,noTickson:!0};function l(t,e){return i.coerce(a,o,m,t,e)}return p(a,o,l,s,n),d(a,o,l,s),o}function T(t,e,r){return[Math.min(e/t.width,r/t.height),t,e+\"x\"+r]}function k(t,e,r,i){var a\u003ddocument.createElementNS(\"http://www.w3.org/2000/svg\",\"text\"),o\u003dn.select(a);return o.text(t).attr(\"x\",0).attr(\"y\",0).attr(\"text-anchor\",r).attr(\"data-unformatted\",t).call(f.convertToTspans,i).call(c.font,e),c.bBox(o.node())}function M(t,e,r,n,a,o){var s\u003d\"_cache\"+e;t[s]\u0026\u0026t[s].key\u003d\u003d\u003da||(t[s]\u003d{key:a,value:r});var l\u003di.aggNums(o,null,[t[s].value,n],2);return t[s].value\u003dl,l}e.exports\u003dfunction(t,e,r,p){var d,m\u003dt._fullLayout;b(r)\u0026\u0026p\u0026\u0026(d\u003dp()),i.makeTraceGroups(m._indicatorlayer,e,\"trace\").each((function(e){var p,A,S,E,L,C\u003de[0].trace,P\u003dn.select(this),I\u003dC._hasGauge,O\u003dC._isAngular,z\u003dC._isBullet,D\u003dC.domain,R\u003d{w:m._size.w*(D.x[1]-D.x[0]),h:m._size.h*(D.y[1]-D.y[0]),l:m._size.l+m._size.w*D.x[0],r:m._size.r+m._size.w*(1-D.x[1]),t:m._size.t+m._size.h*(1-D.y[1]),b:m._size.b+m._size.h*D.y[0]},F\u003dR.l+R.w/2,B\u003dR.t+R.h/2,N\u003dMath.min(R.w/2,R.h),j\u003du.innerRadius*N,U\u003dC.align||\"center\";if(A\u003dB,I){if(O\u0026\u0026(p\u003dF,A\u003dB+N/2,S\u003dfunction(t){return function(t,e){var r\u003dMath.sqrt(t.width/2*(t.width/2)+t.height*t.height);return[e/r,t,e]}(t,.9*j)}),z){var V\u003du.bulletPadding,q\u003d1-u.bulletNumberDomainSize+V;p\u003dR.l+(q+(1-q)*y[U])*R.w,S\u003dfunction(t){return T(t,(u.bulletNumberDomainSize-V)*R.w,R.h)}}}else p\u003dR.l+y[U]*R.w,S\u003dfunction(t){return T(t,R.w,R.h)};!function(t,e,r,s){var l,u,p,d\u003dr[0].trace,m\u003ds.numbersX,_\u003ds.numbersY,T\u003dd.align||\"center\",A\u003dv[T],S\u003ds.transitionOpts,E\u003ds.onComplete,L\u003di.ensureSingle(e,\"g\",\"numbers\"),C\u003d[];d._hasNumber\u0026\u0026C.push(\"number\");d._hasDelta\u0026\u0026(C.push(\"delta\"),\"left\"\u003d\u003d\u003dd.delta.position\u0026\u0026C.reverse());var P\u003dL.selectAll(\"text\").data(C);function I(e,r,n,i){if(!e.match(\"s\")||n\u003e\u003d0\u003d\u003di\u003e\u003d0||r(n).slice(-1).match(x)||r(i).slice(-1).match(x))return r;var a\u003de.slice().replace(\"s\",\"f\").replace(/\\d+/,(function(t){return parseInt(t)-1})),o\u003dw(t,{tickformat:a});return function(t){return Math.abs(t)\u003c1?h.tickText(o,t).text:r(t)}}P.enter().append(\"text\"),P.attr(\"text-anchor\",(function(){return A})).attr(\"class\",(function(t){return t})).attr(\"x\",null).attr(\"y\",null).attr(\"dx\",null).attr(\"dy\",null),P.exit().remove();var O,z\u003dd.mode+d.align;d._hasDelta\u0026\u0026(O\u003dfunction(){var e\u003dw(t,{tickformat:d.delta.valueformat},d._range);e.setScale(),h.prepTicks(e);var i\u003dfunction(t){return h.tickText(e,t).text},a\u003dfunction(t){return d.delta.relative?t.relativeDelta:t.delta},o\u003dfunction(t,e){return 0\u003d\u003d\u003dt||\"number\"!\u003dtypeof t||isNaN(t)?\"-\":(t\u003e0?d.delta.increasing.symbol:d.delta.decreasing.symbol)+e(t)},s\u003dfunction(t){return t.delta\u003e\u003d0?d.delta.increasing.color:d.delta.decreasing.color};void 0\u003d\u003d\u003dd._deltaLastValue\u0026\u0026(d._deltaLastValue\u003da(r[0]));var l\u003dL.select(\"text.delta\");function p(){l.text(o(a(r[0]),i)).call(g.fill,s(r[0])).call(f.convertToTspans,t)}return l.call(c.font,d.delta.font).call(g.fill,s({delta:d._deltaLastValue})),b(S)?l.transition().duration(S.duration).ease(S.easing).tween(\"text\",(function(){var t\u003dn.select(this),e\u003da(r[0]),l\u003dd._deltaLastValue,c\u003dI(d.delta.valueformat,i,l,e),u\u003dn.interpolateNumber(l,e);return d._deltaLastValue\u003de,function(e){t.text(o(u(e),c)),t.call(g.fill,s({delta:u(e)}))}})).each(\"end\",(function(){p(),E\u0026\u0026E()})).each(\"interrupt\",(function(){p(),E\u0026\u0026E()})):p(),u\u003dk(o(a(r[0]),i),d.delta.font,A,t),l}(),z+\u003dd.delta.position+d.delta.font.size+d.delta.font.family+d.delta.valueformat,z+\u003dd.delta.increasing.symbol+d.delta.decreasing.symbol,p\u003du);d._hasNumber\u0026\u0026(!function(){var e\u003dw(t,{tickformat:d.number.valueformat},d._range);e.setScale(),h.prepTicks(e);var i\u003dfunction(t){return h.tickText(e,t).text},a\u003dd.number.suffix,o\u003dd.number.prefix,s\u003dL.select(\"text.number\");function u(){var e\u003d\"number\"\u003d\u003dtypeof r[0].y?o+i(r[0].y)+a:\"-\";s.text(e).call(c.font,d.number.font).call(f.convertToTspans,t)}b(S)?s.transition().duration(S.duration).ease(S.easing).each(\"end\",(function(){u(),E\u0026\u0026E()})).each(\"interrupt\",(function(){u(),E\u0026\u0026E()})).attrTween(\"text\",(function(){var t\u003dn.select(this),e\u003dn.interpolateNumber(r[0].lastY,r[0].y);d._lastValue\u003dr[0].y;var s\u003dI(d.number.valueformat,i,r[0].lastY,r[0].y);return function(r){t.text(o+s(e(r))+a)}})):u(),l\u003dk(o+i(r[0].y)+a,d.number.font,A,t)}(),z+\u003dd.number.font.size+d.number.font.family+d.number.valueformat+d.number.suffix+d.number.prefix,p\u003dl);if(d._hasDelta\u0026\u0026d._hasNumber){var D,R,F\u003d[(l.left+l.right)/2,(l.top+l.bottom)/2],B\u003d[(u.left+u.right)/2,(u.top+u.bottom)/2],N\u003d.75*d.delta.font.size;\"left\"\u003d\u003d\u003dd.delta.position\u0026\u0026(D\u003dM(d,\"deltaPos\",0,-1*(l.width*y[d.align]+u.width*(1-y[d.align])+N),z,Math.min),R\u003dF[1]-B[1],p\u003d{width:l.width+u.width+N,height:Math.max(l.height,u.height),left:u.left+D,right:l.right,top:Math.min(l.top,u.top+R),bottom:Math.max(l.bottom,u.bottom+R)}),\"right\"\u003d\u003d\u003dd.delta.position\u0026\u0026(D\u003dM(d,\"deltaPos\",0,l.width*(1-y[d.align])+u.width*y[d.align]+N,z,Math.max),R\u003dF[1]-B[1],p\u003d{width:l.width+u.width+N,height:Math.max(l.height,u.height),left:l.left,right:u.right+D,top:Math.min(l.top,u.top+R),bottom:Math.max(l.bottom,u.bottom+R)}),\"bottom\"\u003d\u003d\u003dd.delta.position\u0026\u0026(D\u003dnull,R\u003du.height,p\u003d{width:Math.max(l.width,u.width),height:l.height+u.height,left:Math.min(l.left,u.left),right:Math.max(l.right,u.right),top:l.bottom-l.height,bottom:l.bottom+u.height}),\"top\"\u003d\u003d\u003dd.delta.position\u0026\u0026(D\u003dnull,R\u003dl.top,p\u003d{width:Math.max(l.width,u.width),height:l.height+u.height,left:Math.min(l.left,u.left),right:Math.max(l.right,u.right),top:l.bottom-l.height-u.height,bottom:l.bottom}),O.attr({dx:D,dy:R})}(d._hasNumber||d._hasDelta)\u0026\u0026L.attr(\"transform\",(function(){var t\u003ds.numbersScaler(p);z+\u003dt[2];var e,r\u003dM(d,\"numbersScale\",1,t[0],z,Math.min);d._scaleNumbers||(r\u003d1),e\u003dd._isAngular?_-r*p.bottom:_-r*(p.top+p.bottom)/2,d._numbersTop\u003dr*p.top+e;var n\u003dp[T];\"center\"\u003d\u003d\u003dT\u0026\u0026(n\u003d(p.left+p.right)/2);var i\u003dm-r*n;return i\u003dM(d,\"numbersTranslate\",0,i,z,Math.max),o(i,e)+a(r)}))}(t,P,e,{numbersX:p,numbersY:A,numbersScaler:S,transitionOpts:r,onComplete:d}),I\u0026\u0026(E\u003d{range:C.gauge.axis.range,color:C.gauge.bgcolor,line:{color:C.gauge.bordercolor,width:0},thickness:1},L\u003d{range:C.gauge.axis.range,color:\"rgba(0, 0, 0, 0)\",line:{color:C.gauge.bordercolor,width:C.gauge.borderwidth},thickness:1});var H\u003dP.selectAll(\"g.angular\").data(O?e:[]);H.exit().remove();var G\u003dP.selectAll(\"g.angularaxis\").data(O?e:[]);G.exit().remove(),O\u0026\u0026function(t,e,r,i){var a,c,u,f,p\u003dr[0].trace,d\u003di.size,m\u003di.radius,g\u003di.innerRadius,v\u003di.gaugeBg,y\u003di.gaugeOutline,x\u003d[d.l+d.w/2,d.t+d.h/2+m/2],T\u003di.gauge,k\u003di.layer,M\u003di.transitionOpts,A\u003di.onComplete,S\u003dMath.PI/2;function E(t){var e\u003dp.gauge.axis.range[0],r\u003d(t-e)/(p.gauge.axis.range[1]-e)*Math.PI-S;return r\u003c-S?-S:r\u003eS?S:r}function L(t){return n.svg.arc().innerRadius((g+m)/2-t/2*(m-g)).outerRadius((g+m)/2+t/2*(m-g)).startAngle(-S)}function C(t){t.attr(\"d\",(function(t){return L(t.thickness).startAngle(E(t.range[0])).endAngle(E(t.range[1]))()}))}T.enter().append(\"g\").classed(\"angular\",!0),T.attr(\"transform\",o(x[0],x[1])),k.enter().append(\"g\").classed(\"angularaxis\",!0).classed(\"crisp\",!0),k.selectAll(\"g.xangularaxistick,path,text\").remove(),(a\u003dw(t,p.gauge.axis)).type\u003d\"linear\",a.range\u003dp.gauge.axis.range,a._id\u003d\"xangularaxis\",a.ticklabeloverflow\u003d\"allow\",a.setScale();var P\u003dfunction(t){return(a.range[0]-t.x)/(a.range[1]-a.range[0])*Math.PI+Math.PI},I\u003d{},O\u003dh.makeLabelFns(a,0).labelStandoff;I.xFn\u003dfunction(t){var e\u003dP(t);return Math.cos(e)*O},I.yFn\u003dfunction(t){var e\u003dP(t),r\u003dMath.sin(e)\u003e0?.2:1;return-Math.sin(e)*(O+t.fontSize*r)+Math.abs(Math.cos(e))*(t.fontSize*l)},I.anchorFn\u003dfunction(t){var e\u003dP(t),r\u003dMath.cos(e);return Math.abs(r)\u003c.1?\"middle\":r\u003e0?\"start\":\"end\"},I.heightFn\u003dfunction(t,e,r){var n\u003dP(t);return-.5*(1+Math.sin(n))*r};var z\u003dfunction(t){return o(x[0]+m*Math.cos(t),x[1]-m*Math.sin(t))};u\u003dfunction(t){return z(P(t))};if(c\u003dh.calcTicks(a),f\u003dh.getTickSigns(a)[2],a.visible){f\u003d\"inside\"\u003d\u003d\u003da.ticks?-1:1;var D\u003d(a.linewidth||1)/2;h.drawTicks(t,a,{vals:c,layer:k,path:\"M\"+f*D+\",0h\"+f*a.ticklen,transFn:function(t){var e\u003dP(t);return z(e)+\"rotate(\"+-s(e)+\")\"}}),h.drawLabels(t,a,{vals:c,layer:k,transFn:u,labelFns:I})}var R\u003d[v].concat(p.gauge.steps),F\u003dT.selectAll(\"g.bg-arc\").data(R);F.enter().append(\"g\").classed(\"bg-arc\",!0).append(\"path\"),F.select(\"path\").call(C).call(_),F.exit().remove();var B\u003dL(p.gauge.bar.thickness),N\u003dT.selectAll(\"g.value-arc\").data([p.gauge.bar]);N.enter().append(\"g\").classed(\"value-arc\",!0).append(\"path\");var j\u003dN.select(\"path\");b(M)?(j.transition().duration(M.duration).ease(M.easing).each(\"end\",(function(){A\u0026\u0026A()})).each(\"interrupt\",(function(){A\u0026\u0026A()})).attrTween(\"d\",(U\u003dB,V\u003dE(r[0].lastY),q\u003dE(r[0].y),function(){var t\u003dn.interpolate(V,q);return function(e){return U.endAngle(t(e))()}})),p._lastValue\u003dr[0].y):j.attr(\"d\",\"number\"\u003d\u003dtypeof r[0].y?B.endAngle(E(r[0].y)):\"M0,0Z\");var U,V,q;j.call(_),N.exit().remove(),R\u003d[];var H\u003dp.gauge.threshold.value;(H||0\u003d\u003d\u003dH)\u0026\u0026R.push({range:[H,H],color:p.gauge.threshold.color,line:{color:p.gauge.threshold.line.color,width:p.gauge.threshold.line.width},thickness:p.gauge.threshold.thickness});var G\u003dT.selectAll(\"g.threshold-arc\").data(R);G.enter().append(\"g\").classed(\"threshold-arc\",!0).append(\"path\"),G.select(\"path\").call(C).call(_),G.exit().remove();var Y\u003dT.selectAll(\"g.gauge-outline\").data([y]);Y.enter().append(\"g\").classed(\"gauge-outline\",!0).append(\"path\"),Y.select(\"path\").call(C).call(_),Y.exit().remove()}(t,0,e,{radius:N,innerRadius:j,gauge:H,layer:G,size:R,gaugeBg:E,gaugeOutline:L,transitionOpts:r,onComplete:d});var Y\u003dP.selectAll(\"g.bullet\").data(z?e:[]);Y.exit().remove();var W\u003dP.selectAll(\"g.bulletaxis\").data(z?e:[]);W.exit().remove(),z\u0026\u0026function(t,e,r,n){var i,a,s,l,c,f\u003dr[0].trace,p\u003dn.gauge,d\u003dn.layer,m\u003dn.gaugeBg,v\u003dn.gaugeOutline,y\u003dn.size,x\u003df.domain,T\u003dn.transitionOpts,k\u003dn.onComplete;p.enter().append(\"g\").classed(\"bullet\",!0),p.attr(\"transform\",o(y.l,y.t)),d.enter().append(\"g\").classed(\"bulletaxis\",!0).classed(\"crisp\",!0),d.selectAll(\"g.xbulletaxistick,path,text\").remove();var M\u003dy.h,A\u003df.gauge.bar.thickness*M,S\u003dx.x[0],E\u003dx.x[0]+(x.x[1]-x.x[0])*(f._hasNumber||f._hasDelta?1-u.bulletNumberDomainSize:1);(i\u003dw(t,f.gauge.axis))._id\u003d\"xbulletaxis\",i.domain\u003d[S,E],i.setScale(),a\u003dh.calcTicks(i),s\u003dh.makeTransTickFn(i),l\u003dh.getTickSigns(i)[2],c\u003dy.t+y.h,i.visible\u0026\u0026(h.drawTicks(t,i,{vals:\"inside\"\u003d\u003d\u003di.ticks?h.clipEnds(i,a):a,layer:d,path:h.makeTickPath(i,c,l),transFn:s}),h.drawLabels(t,i,{vals:a,layer:d,transFn:s,labelFns:h.makeLabelFns(i,c)}));function L(t){t.attr(\"width\",(function(t){return Math.max(0,i.c2p(t.range[1])-i.c2p(t.range[0]))})).attr(\"x\",(function(t){return i.c2p(t.range[0])})).attr(\"y\",(function(t){return.5*(1-t.thickness)*M})).attr(\"height\",(function(t){return t.thickness*M}))}var C\u003d[m].concat(f.gauge.steps),P\u003dp.selectAll(\"g.bg-bullet\").data(C);P.enter().append(\"g\").classed(\"bg-bullet\",!0).append(\"rect\"),P.select(\"rect\").call(L).call(_),P.exit().remove();var I\u003dp.selectAll(\"g.value-bullet\").data([f.gauge.bar]);I.enter().append(\"g\").classed(\"value-bullet\",!0).append(\"rect\"),I.select(\"rect\").attr(\"height\",A).attr(\"y\",(M-A)/2).call(_),b(T)?I.select(\"rect\").transition().duration(T.duration).ease(T.easing).each(\"end\",(function(){k\u0026\u0026k()})).each(\"interrupt\",(function(){k\u0026\u0026k()})).attr(\"width\",Math.max(0,i.c2p(Math.min(f.gauge.axis.range[1],r[0].y)))):I.select(\"rect\").attr(\"width\",\"number\"\u003d\u003dtypeof r[0].y?Math.max(0,i.c2p(Math.min(f.gauge.axis.range[1],r[0].y))):0);I.exit().remove();var O\u003dr.filter((function(){return f.gauge.threshold.value||0\u003d\u003d\u003df.gauge.threshold.value})),z\u003dp.selectAll(\"g.threshold-bullet\").data(O);z.enter().append(\"g\").classed(\"threshold-bullet\",!0).append(\"line\"),z.select(\"line\").attr(\"x1\",i.c2p(f.gauge.threshold.value)).attr(\"x2\",i.c2p(f.gauge.threshold.value)).attr(\"y1\",(1-f.gauge.threshold.thickness)/2*M).attr(\"y2\",(1-(1-f.gauge.threshold.thickness)/2)*M).call(g.stroke,f.gauge.threshold.line.color).style(\"stroke-width\",f.gauge.threshold.line.width),z.exit().remove();var D\u003dp.selectAll(\"g.gauge-outline\").data([v]);D.enter().append(\"g\").classed(\"gauge-outline\",!0).append(\"rect\"),D.select(\"rect\").call(L).call(_),D.exit().remove()}(t,0,e,{gauge:Y,layer:W,size:R,gaugeBg:E,gaugeOutline:L,transitionOpts:r,onComplete:d});var X\u003dP.selectAll(\"text.title\").data(e);X.exit().remove(),X.enter().append(\"text\").classed(\"title\",!0),X.attr(\"text-anchor\",(function(){return z?v.right:v[C.title.align]})).text(C.title.text).call(c.font,C.title.font).call(f.convertToTspans,t),X.attr(\"transform\",(function(){var t,e\u003dR.l+R.w*y[C.title.align],r\u003du.titlePadding,n\u003dc.bBox(X.node());if(I){if(O)if(C.gauge.axis.visible)t\u003dc.bBox(G.node()).top-r-n.bottom;else t\u003dR.t+R.h/2-N/2-n.bottom-r;z\u0026\u0026(t\u003dA-(n.top+n.bottom)/2,e\u003dR.l-u.bulletPadding*R.w)}else t\u003dC._numbersTop-r-n.bottom;return o(e,t)}))}))}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/axis_defaults\":851,\"../../plots/cartesian/layout_attributes\":864,\"../../plots/cartesian/position_defaults\":867,\"./constants\":1146,\"@plotly/d3\":58}],1150:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/attributes\"),i\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../mesh3d/attributes\"),s\u003dt(\"../../plots/attributes\"),l\u003dt(\"../../lib/extend\").extendFlat,c\u003dt(\"../../plot_api/edit_types\").overrideAll;var u\u003de.exports\u003dc(l({x:{valType:\"data_array\"},y:{valType:\"data_array\"},z:{valType:\"data_array\"},value:{valType:\"data_array\"},isomin:{valType:\"number\"},isomax:{valType:\"number\"},surface:{show:{valType:\"boolean\",dflt:!0},count:{valType:\"integer\",dflt:2,min:1},fill:{valType:\"number\",min:0,max:1,dflt:1},pattern:{valType:\"flaglist\",flags:[\"A\",\"B\",\"C\",\"D\",\"E\"],extras:[\"all\",\"odd\",\"even\"],dflt:\"all\"}},spaceframe:{show:{valType:\"boolean\",dflt:!1},fill:{valType:\"number\",min:0,max:1,dflt:.15}},slices:{x:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}},y:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}},z:{show:{valType:\"boolean\",dflt:!1},locations:{valType:\"data_array\",dflt:[]},fill:{valType:\"number\",min:0,max:1,dflt:1}}},caps:{x:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}},y:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}},z:{show:{valType:\"boolean\",dflt:!0},fill:{valType:\"number\",min:0,max:1,dflt:1}}},text:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertemplate:a(),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),valuehoverformat:i(\"value\",1),showlegend:l({},s.showlegend,{dflt:!1})},n(\"\",{colorAttr:\"`value`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{opacity:o.opacity,lightposition:o.lightposition,lighting:o.lighting,flatshading:o.flatshading,contour:o.contour,hoverinfo:l({},s.hoverinfo)}),\"calc\",\"nested\");u.flatshading.dflt\u003d!0,u.lighting.facenormalsepsilon.dflt\u003d0,u.x.editType\u003du.y.editType\u003du.z.editType\u003du.value.editType\u003d\"calc+clearAxisTypes\",u.transforms\u003dvoid 0},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../mesh3d/attributes\":1155}],1151:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/calc\"),i\u003dt(\"../streamtube/calc\").processGrid,a\u003dt(\"../streamtube/calc\").filter;e.exports\u003dfunction(t,e){e._len\u003dMath.min(e.x.length,e.y.length,e.z.length,e.value.length),e._x\u003da(e.x,e._len),e._y\u003da(e.y,e._len),e._z\u003da(e.z,e._len),e._value\u003da(e.value,e._len);var r\u003di(e);e._gridFill\u003dr.fill,e._Xs\u003dr.Xs,e._Ys\u003dr.Ys,e._Zs\u003dr.Zs,e._len\u003dr.len;for(var o\u003d1/0,s\u003d-1/0,l\u003d0;l\u003ce._len;l++){var c\u003de._value[l];o\u003dMath.min(o,c),s\u003dMath.max(s,c)}e._minValues\u003do,e._maxValues\u003ds,e._vMin\u003dvoid 0\u003d\u003d\u003de.isomin||null\u003d\u003d\u003de.isomin?o:e.isomin,e._vMax\u003dvoid 0\u003d\u003d\u003de.isomax||null\u003d\u003d\u003de.isomin?s:e.isomax,n(t,e,{vals:[e._vMin,e._vMax],containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":670,\"../streamtube/calc\":1322}],1152:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-mesh3d\"),i\u003dt(\"../../lib/gl_format_color\").parseColorScale,a\u003dt(\"../../lib/str2rgbarray\"),o\u003dt(\"../../components/colorscale\").extractOpts,s\u003dt(\"../../plots/gl3d/zip3\"),l\u003dfunction(t,e){for(var r\u003de.length-1;r\u003e0;r--){var n\u003dMath.min(e[r],e[r-1]),i\u003dMath.max(e[r],e[r-1]);if(i\u003en\u0026\u0026n\u003ct\u0026\u0026t\u003c\u003di)return{id:r,distRatio:(i-t)/(i-n)}}return{id:0,distRatio:0}};function c(t,e,r){this.scene\u003dt,this.uid\u003dr,this.mesh\u003de,this.name\u003d\"\",this.data\u003dnull,this.showContour\u003d!1}var u\u003dc.prototype;u.handlePick\u003dfunction(t){if(t.object\u003d\u003d\u003dthis.mesh){var e\u003dt.data.index,r\u003dthis.data._meshX[e],n\u003dthis.data._meshY[e],i\u003dthis.data._meshZ[e],a\u003dthis.data._Ys.length,o\u003dthis.data._Zs.length,s\u003dl(r,this.data._Xs).id,c\u003dl(n,this.data._Ys).id,u\u003dl(i,this.data._Zs).id,f\u003dt.index\u003du+o*c+o*a*s;t.traceCoordinate\u003d[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h\u003dthis.data.hovertext||this.data.text;return Array.isArray(h)\u0026\u0026void 0!\u003d\u003dh[f]?t.textLabel\u003dh[f]:h\u0026\u0026(t.textLabel\u003dh),!0}},u.update\u003dfunction(t){var e\u003dthis.scene,r\u003de.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data\u003dh(t);var l\u003d{positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},c\u003do(t);l.vertexIntensity\u003dt._meshIntensity,l.vertexIntensityBounds\u003d[c.min,c.max],l.colormap\u003di(t),this.mesh.update(l)},u.dispose\u003dfunction(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()};var f\u003d[\"xyz\",\"xzy\",\"yxz\",\"yzx\",\"zxy\",\"zyx\"];function h(t){t._meshI\u003d[],t._meshJ\u003d[],t._meshK\u003d[];var e,r,n,i,a,o,s,c\u003dt.surface.show,u\u003dt.spaceframe.show,h\u003dt.surface.fill,p\u003dt.spaceframe.fill,d\u003d!1,m\u003d!1,g\u003d0,v\u003dt._Xs,y\u003dt._Ys,x\u003dt._Zs,b\u003dv.length,_\u003dy.length,w\u003dx.length,T\u003df.indexOf(t._gridFill.replace(/-/g,\"\").replace(/\\+/g,\"\")),k\u003dfunction(t,e,r){switch(T){case 5:return r+w*e+w*_*t;case 4:return r+w*t+w*b*e;case 3:return e+_*r+_*w*t;case 2:return e+_*t+_*b*r;case 1:return t+b*r+b*w*e;default:return t+b*e+b*_*r}},M\u003dt._minValues,A\u003dt._maxValues,S\u003dt._vMin,E\u003dt._vMax;function L(t,e,s){for(var l\u003do.length,c\u003dr;c\u003cl;c++)if(t\u003d\u003d\u003dn[c]\u0026\u0026e\u003d\u003d\u003di[c]\u0026\u0026s\u003d\u003d\u003da[c])return c;return-1}function C(){r\u003de}function P(){n\u003d[],i\u003d[],a\u003d[],o\u003d[],e\u003d0,C()}function I(t,r,s,l){return n.push(t),i.push(r),a.push(s),o.push(l),++e-1}function O(t,e,r){for(var n\u003d[],i\u003d0;i\u003ct.length;i++)n[i]\u003dt[i]*(1-r)+r*e[i];return n}function z(t){s\u003dt}function D(t,e){return\"all\"\u003d\u003d\u003dt||null\u003d\u003d\u003dt||t.indexOf(e)\u003e-1}function R(t,e){return null\u003d\u003d\u003dt?e:t}function F(e,r,n){C();var i,a,o,l\u003d[r],c\u003d[n];if(s\u003e\u003d1)l\u003d[r],c\u003d[n];else if(s\u003e0){var u\u003dfunction(t,e){var r\u003dt[0],n\u003dt[1],i\u003dt[2],a\u003dfunction(t,e,r){for(var n\u003d[],i\u003d0;i\u003ct.length;i++)n[i]\u003d(t[i]+e[i]+r[i])/3;return n}(r,n,i),o\u003dMath.sqrt(1-s),l\u003dO(a,r,o),c\u003dO(a,n,o),u\u003dO(a,i,o),f\u003de[0],h\u003de[1],p\u003de[2];return{xyzv:[[r,n,c],[c,l,r],[n,i,u],[u,c,n],[i,r,l],[l,u,i]],abc:[[f,h,-1],[-1,-1,f],[h,p,-1],[-1,-1,h],[p,f,-1],[-1,-1,p]]}}(r,n);l\u003du.xyzv,c\u003du.abc}for(var f\u003d0;f\u003cl.length;f++){r\u003dl[f],n\u003dc[f];for(var h\u003d[],p\u003d0;p\u003c3;p++){var d\u003dr[p][0],m\u003dr[p][1],v\u003dr[p][2],y\u003dr[p][3],x\u003dn[p]\u003e-1?n[p]:L(d,m,v);h[p]\u003dx\u003e-1?x:I(d,m,v,R(e,y))}i\u003dh[0],a\u003dh[1],o\u003dh[2],t._meshI.push(i),t._meshJ.push(a),t._meshK.push(o),++g}}function B(t,e,r,n){var i\u003dt[3];i\u003cr\u0026\u0026(i\u003dr),i\u003en\u0026\u0026(i\u003dn);for(var a\u003d(t[3]-i)/(t[3]-e[3]+1e-9),o\u003d[],s\u003d0;s\u003c4;s++)o[s]\u003d(1-a)*t[s]+a*e[s];return o}function N(t,e,r){return t\u003e\u003de\u0026\u0026t\u003c\u003dr}function j(t){var e\u003d.001*(E-S);return t\u003e\u003dS-e\u0026\u0026t\u003c\u003dE+e}function U(e){for(var r\u003d[],n\u003d0;n\u003c4;n++){var i\u003de[n];r.push([t._x[i],t._y[i],t._z[i],t._value[i]])}return r}function V(t,e,r,n,i,a){a||(a\u003d1),r\u003d[-1,-1,-1];var o\u003d!1,s\u003d[N(e[0][3],n,i),N(e[1][3],n,i),N(e[2][3],n,i)];if(!s[0]\u0026\u0026!s[1]\u0026\u0026!s[2])return!1;var l\u003dfunction(t,e,r){return j(e[0][3])\u0026\u0026j(e[1][3])\u0026\u0026j(e[2][3])?(F(t,e,r),!0):a\u003c3\u0026\u0026V(t,e,r,S,E,++a)};if(s[0]\u0026\u0026s[1]\u0026\u0026s[2])return l(t,e,r)||o;var c\u003d!1;return[[0,1,2],[2,0,1],[1,2,0]].forEach((function(a){if(s[a[0]]\u0026\u0026s[a[1]]\u0026\u0026!s[a[2]]){var u\u003de[a[0]],f\u003de[a[1]],h\u003de[a[2]],p\u003dB(h,u,n,i),d\u003dB(h,f,n,i);o\u003dl(t,[d,p,u],[-1,-1,r[a[0]]])||o,o\u003dl(t,[u,f,d],[r[a[0]],r[a[1]],-1])||o,c\u003d!0}})),c||[[0,1,2],[1,2,0],[2,0,1]].forEach((function(a){if(s[a[0]]\u0026\u0026!s[a[1]]\u0026\u0026!s[a[2]]){var u\u003de[a[0]],f\u003de[a[1]],h\u003de[a[2]],p\u003dB(f,u,n,i),d\u003dB(h,u,n,i);o\u003dl(t,[d,p,u],[-1,-1,r[a[0]]])||o,c\u003d!0}})),o}function q(t,e,r,n){var i\u003d!1,a\u003dU(e),o\u003d[N(a[0][3],r,n),N(a[1][3],r,n),N(a[2][3],r,n),N(a[3][3],r,n)];if(!(o[0]||o[1]||o[2]||o[3]))return i;if(o[0]\u0026\u0026o[1]\u0026\u0026o[2]\u0026\u0026o[3])return m\u0026\u0026(i\u003dfunction(t,e,r){var n\u003dfunction(n,i,a){F(t,[e[n],e[i],e[a]],[r[n],r[i],r[a]])};n(0,1,2),n(3,0,1),n(2,3,0),n(1,2,3)}(t,a,e)||i),i;var s\u003d!1;return[[0,1,2,3],[3,0,1,2],[2,3,0,1],[1,2,3,0]].forEach((function(l){if(o[l[0]]\u0026\u0026o[l[1]]\u0026\u0026o[l[2]]\u0026\u0026!o[l[3]]){var c\u003da[l[0]],u\u003da[l[1]],f\u003da[l[2]],h\u003da[l[3]];if(m)i\u003dF(t,[c,u,f],[e[l[0]],e[l[1]],e[l[2]]])||i;else{var p\u003dB(h,c,r,n),d\u003dB(h,u,r,n),g\u003dB(h,f,r,n);i\u003dF(null,[p,d,g],[-1,-1,-1])||i}s\u003d!0}})),s?i:([[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2],[0,2,3,1],[1,3,2,0]].forEach((function(l){if(o[l[0]]\u0026\u0026o[l[1]]\u0026\u0026!o[l[2]]\u0026\u0026!o[l[3]]){var c\u003da[l[0]],u\u003da[l[1]],f\u003da[l[2]],h\u003da[l[3]],p\u003dB(f,c,r,n),d\u003dB(f,u,r,n),g\u003dB(h,u,r,n),v\u003dB(h,c,r,n);m?(i\u003dF(t,[c,v,p],[e[l[0]],-1,-1])||i,i\u003dF(t,[u,d,g],[e[l[1]],-1,-1])||i):i\u003dfunction(t,e,r){var n\u003dfunction(n,i,a){F(t,[e[n],e[i],e[a]],[r[n],r[i],r[a]])};n(0,1,2),n(2,3,0)}(null,[p,d,g,v],[-1,-1,-1,-1])||i,s\u003d!0}})),s||[[0,1,2,3],[1,2,3,0],[2,3,0,1],[3,0,1,2]].forEach((function(l){if(o[l[0]]\u0026\u0026!o[l[1]]\u0026\u0026!o[l[2]]\u0026\u0026!o[l[3]]){var c\u003da[l[0]],u\u003da[l[1]],f\u003da[l[2]],h\u003da[l[3]],p\u003dB(u,c,r,n),d\u003dB(f,c,r,n),g\u003dB(h,c,r,n);m?(i\u003dF(t,[c,p,d],[e[l[0]],-1,-1])||i,i\u003dF(t,[c,d,g],[e[l[0]],-1,-1])||i,i\u003dF(t,[c,g,p],[e[l[0]],-1,-1])||i):i\u003dF(null,[p,d,g],[-1,-1,-1])||i,s\u003d!0}})),i)}function H(t,e,r,n,i,a,o,s,l,c,u){var f\u003d!1;return d\u0026\u0026(D(t,\"A\")\u0026\u0026(f\u003dq(null,[e,r,n,a],c,u)||f),D(t,\"B\")\u0026\u0026(f\u003dq(null,[r,n,i,l],c,u)||f),D(t,\"C\")\u0026\u0026(f\u003dq(null,[r,a,o,l],c,u)||f),D(t,\"D\")\u0026\u0026(f\u003dq(null,[n,a,s,l],c,u)||f),D(t,\"E\")\u0026\u0026(f\u003dq(null,[r,n,a,l],c,u)||f)),m\u0026\u0026(f\u003dq(t,[r,n,a,l],c,u)||f),f}function G(t,e,r,n,i,a,o,s){return[!0\u003d\u003d\u003ds[0]||V(t,U([e,r,n]),[e,r,n],a,o),!0\u003d\u003d\u003ds[1]||V(t,U([n,i,e]),[n,i,e],a,o)]}function Y(t,e,r,n,i,a,o,s,l){return s?G(t,e,r,i,n,a,o,l):G(t,r,i,n,e,a,o,l)}function W(t,e,r,n,i,a,o){var s,l,c,u,f\u003d!1,h\u003dfunction(){f\u003dV(t,[s,l,c],[-1,-1,-1],i,a)||f,f\u003dV(t,[c,u,s],[-1,-1,-1],i,a)||f},p\u003do[0],d\u003do[1],m\u003do[2];return p\u0026\u0026(s\u003dO(U([k(e,r-0,n-0)])[0],U([k(e-1,r-0,n-0)])[0],p),l\u003dO(U([k(e,r-0,n-1)])[0],U([k(e-1,r-0,n-1)])[0],p),c\u003dO(U([k(e,r-1,n-1)])[0],U([k(e-1,r-1,n-1)])[0],p),u\u003dO(U([k(e,r-1,n-0)])[0],U([k(e-1,r-1,n-0)])[0],p),h()),d\u0026\u0026(s\u003dO(U([k(e-0,r,n-0)])[0],U([k(e-0,r-1,n-0)])[0],d),l\u003dO(U([k(e-0,r,n-1)])[0],U([k(e-0,r-1,n-1)])[0],d),c\u003dO(U([k(e-1,r,n-1)])[0],U([k(e-1,r-1,n-1)])[0],d),u\u003dO(U([k(e-1,r,n-0)])[0],U([k(e-1,r-1,n-0)])[0],d),h()),m\u0026\u0026(s\u003dO(U([k(e-0,r-0,n)])[0],U([k(e-0,r-0,n-1)])[0],m),l\u003dO(U([k(e-0,r-1,n)])[0],U([k(e-0,r-1,n-1)])[0],m),c\u003dO(U([k(e-1,r-1,n)])[0],U([k(e-1,r-1,n-1)])[0],m),u\u003dO(U([k(e-1,r-0,n)])[0],U([k(e-1,r-0,n-1)])[0],m),h()),f}function X(t,e,r,n,i,a,o,s,l,c,u,f){var h\u003dt;return f?(d\u0026\u0026\"even\"\u003d\u003d\u003dt\u0026\u0026(h\u003dnull),H(h,e,r,n,i,a,o,s,l,c,u)):(d\u0026\u0026\"odd\"\u003d\u003d\u003dt\u0026\u0026(h\u003dnull),H(h,l,s,o,a,i,n,r,e,c,u))}function Z(t,e,r,n,i){for(var a\u003d[],o\u003d0,s\u003d0;s\u003ce.length;s++)for(var l\u003de[s],c\u003d1;c\u003cw;c++)for(var u\u003d1;u\u003c_;u++)a.push(Y(t,k(l,u-1,c-1),k(l,u-1,c),k(l,u,c-1),k(l,u,c),r,n,(l+u+c)%2,i\u0026\u0026i[o]?i[o]:[])),o++;return a}function J(t,e,r,n,i){for(var a\u003d[],o\u003d0,s\u003d0;s\u003ce.length;s++)for(var l\u003de[s],c\u003d1;c\u003cb;c++)for(var u\u003d1;u\u003cw;u++)a.push(Y(t,k(c-1,l,u-1),k(c,l,u-1),k(c-1,l,u),k(c,l,u),r,n,(c+l+u)%2,i\u0026\u0026i[o]?i[o]:[])),o++;return a}function K(t,e,r,n,i){for(var a\u003d[],o\u003d0,s\u003d0;s\u003ce.length;s++)for(var l\u003de[s],c\u003d1;c\u003c_;c++)for(var u\u003d1;u\u003cb;u++)a.push(Y(t,k(u-1,c-1,l),k(u-1,c,l),k(u,c-1,l),k(u,c,l),r,n,(u+c+l)%2,i\u0026\u0026i[o]?i[o]:[])),o++;return a}function Q(t,e,r){for(var n\u003d1;n\u003cw;n++)for(var i\u003d1;i\u003c_;i++)for(var a\u003d1;a\u003cb;a++)X(t,k(a-1,i-1,n-1),k(a-1,i-1,n),k(a-1,i,n-1),k(a-1,i,n),k(a,i-1,n-1),k(a,i-1,n),k(a,i,n-1),k(a,i,n),e,r,(a+i+n)%2)}function $(t,e,r){d\u003d!0,Q(t,e,r),d\u003d!1}function tt(t,e,r,n,i,a){for(var o\u003d[],s\u003d0,l\u003d0;l\u003ce.length;l++)for(var c\u003de[l],u\u003d1;u\u003cw;u++)for(var f\u003d1;f\u003c_;f++)o.push(W(t,c,f,u,r,n,i[l],a\u0026\u0026a[s]\u0026\u0026a[s])),s++;return o}function et(t,e,r,n,i,a){for(var o\u003d[],s\u003d0,l\u003d0;l\u003ce.length;l++)for(var c\u003de[l],u\u003d1;u\u003cb;u++)for(var f\u003d1;f\u003cw;f++)o.push(W(t,u,c,f,r,n,i[l],a\u0026\u0026a[s]\u0026\u0026a[s])),s++;return o}function rt(t,e,r,n,i,a){for(var o\u003d[],s\u003d0,l\u003d0;l\u003ce.length;l++)for(var c\u003de[l],u\u003d1;u\u003c_;u++)for(var f\u003d1;f\u003cb;f++)o.push(W(t,f,u,c,r,n,i[l],a\u0026\u0026a[s]\u0026\u0026a[s])),s++;return o}function nt(t,e){for(var r\u003d[],n\u003dt;n\u003ce;n++)r.push(n);return r}return function(){if(P(),function(){for(var e\u003d0;e\u003cb;e++)for(var r\u003d0;r\u003c_;r++)for(var n\u003d0;n\u003cw;n++){var i\u003dk(e,r,n);I(t._x[i],t._y[i],t._z[i],t._value[i])}}(),u\u0026\u0026p\u0026\u0026(z(p),m\u003d!0,Q(null,S,E),m\u003d!1),c\u0026\u0026h){z(h);for(var e\u003dt.surface.pattern,r\u003dt.surface.count,s\u003d0;s\u003cr;s++){var f\u003d1\u003d\u003d\u003dr?.5:s/(r-1),d\u003d(1-f)*S+f*E,T\u003dMath.abs(d-M)\u003eMath.abs(d-A)?[M,d]:[d,A];$(e,T[0],T[1])}}var L\u003d[[Math.min(S,A),Math.max(S,A)],[Math.min(M,E),Math.max(M,E)]];[\"x\",\"y\",\"z\"].forEach((function(e){for(var r\u003d[],n\u003d0;n\u003cL.length;n++){var i\u003d0,a\u003dL[n][0],o\u003dL[n][1],s\u003dt.slices[e];if(s.show\u0026\u0026s.fill){z(s.fill);var c\u003d[],u\u003d[],f\u003d[];if(s.locations.length)for(var h\u003d0;h\u003cs.locations.length;h++){var p\u003dl(s.locations[h],\"x\"\u003d\u003d\u003de?v:\"y\"\u003d\u003d\u003de?y:x);0\u003d\u003d\u003dp.distRatio?c.push(p.id):p.id\u003e0\u0026\u0026(u.push(p.id),\"x\"\u003d\u003d\u003de?f.push([p.distRatio,0,0]):\"y\"\u003d\u003d\u003de?f.push([0,p.distRatio,0]):f.push([0,0,p.distRatio]))}else c\u003dnt(1,\"x\"\u003d\u003d\u003de?b-1:\"y\"\u003d\u003d\u003de?_-1:w-1);u.length\u003e0\u0026\u0026(r[i]\u003d\"x\"\u003d\u003d\u003de?tt(null,u,a,o,f,r[i]):\"y\"\u003d\u003d\u003de?et(null,u,a,o,f,r[i]):rt(null,u,a,o,f,r[i]),i++),c.length\u003e0\u0026\u0026(r[i]\u003d\"x\"\u003d\u003d\u003de?Z(null,c,a,o,r[i]):\"y\"\u003d\u003d\u003de?J(null,c,a,o,r[i]):K(null,c,a,o,r[i]),i++)}var d\u003dt.caps[e];d.show\u0026\u0026d.fill\u0026\u0026(z(d.fill),r[i]\u003d\"x\"\u003d\u003d\u003de?Z(null,[0,b-1],a,o,r[i]):\"y\"\u003d\u003d\u003de?J(null,[0,_-1],a,o,r[i]):K(null,[0,w-1],a,o,r[i]),i++)}})),0\u003d\u003d\u003dg\u0026\u0026P(),t._meshX\u003dn,t._meshY\u003di,t._meshZ\u003da,t._meshIntensity\u003do,t._Xs\u003dv,t._Ys\u003dy,t._Zs\u003dx}(),t}e.exports\u003d{findNearestOnAxis:l,generateIsoMeshes:h,createIsosurfaceTrace:function(t,e){var r\u003dt.glplot.gl,i\u003dn({gl:r}),a\u003dnew c(t,i,e.uid);return i._trace\u003da,a.update(e),t.glplot.add(i),a}}},{\"../../components/colorscale\":674,\"../../lib/gl_format_color\":795,\"../../lib/str2rgbarray\":823,\"../../plots/gl3d/zip3\":903,\"gl-mesh3d\":311}],1153:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\"),a\u003dt(\"./attributes\"),o\u003dt(\"../../components/colorscale/defaults\");function s(t,e,r,n,a){var s\u003da(\"isomin\"),l\u003da(\"isomax\");null!\u003dl\u0026\u0026null!\u003ds\u0026\u0026s\u003el\u0026\u0026(e.isomin\u003dnull,e.isomax\u003dnull);var c\u003da(\"x\"),u\u003da(\"y\"),f\u003da(\"z\"),h\u003da(\"value\");c\u0026\u0026c.length\u0026\u0026u\u0026\u0026u.length\u0026\u0026f\u0026\u0026f.length\u0026\u0026h\u0026\u0026h.length?(i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],n),a(\"valuehoverformat\"),[\"x\",\"y\",\"z\"].forEach((function(t){a(t+\"hoverformat\");var e\u003d\"caps.\"+t;a(e+\".show\")\u0026\u0026a(e+\".fill\");var r\u003d\"slices.\"+t;a(r+\".show\")\u0026\u0026(a(r+\".fill\"),a(r+\".locations\"))})),a(\"spaceframe.show\")\u0026\u0026a(\"spaceframe.fill\"),a(\"surface.show\")\u0026\u0026(a(\"surface.count\"),a(\"surface.fill\"),a(\"surface.pattern\")),a(\"contour.show\")\u0026\u0026(a(\"contour.color\"),a(\"contour.width\")),[\"text\",\"hovertext\",\"hovertemplate\",\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lighting.vertexnormalsepsilon\",\"lighting.facenormalsepsilon\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"flatshading\",\"opacity\"].forEach((function(t){a(t)})),o(t,e,n,a,{prefix:\"\",cLetter:\"c\"}),e._length\u003dnull):e.visible\u003d!1}e.exports\u003d{supplyDefaults:function(t,e,r,i){s(t,e,r,i,(function(r,i){return n.coerce(t,e,a,r,i)}))},supplyIsoDefaults:s}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"../../registry\":927,\"./attributes\":1150}],1154:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,calc:t(\"./calc\"),colorbar:{min:\"cmin\",max:\"cmax\"},plot:t(\"./convert\").createIsosurfaceTrace,moduleType:\"trace\",name:\"isosurface\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":892,\"./attributes\":1150,\"./calc\":1151,\"./convert\":1152,\"./defaults\":1153}],1155:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/attributes\"),i\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../surface/attributes\"),s\u003dt(\"../../plots/attributes\"),l\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003dl({x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},i:{valType:\"data_array\",editType:\"calc\"},j:{valType:\"data_array\",editType:\"calc\"},k:{valType:\"data_array\",editType:\"calc\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertemplate:a({editType:\"calc\"}),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),delaunayaxis:{valType:\"enumerated\",values:[\"x\",\"y\",\"z\"],dflt:\"z\",editType:\"calc\"},alphahull:{valType:\"number\",dflt:-1,editType:\"calc\"},intensity:{valType:\"data_array\",editType:\"calc\"},intensitymode:{valType:\"enumerated\",values:[\"vertex\",\"cell\"],dflt:\"vertex\",editType:\"calc\"},color:{valType:\"color\",editType:\"calc\"},vertexcolor:{valType:\"data_array\",editType:\"calc\"},facecolor:{valType:\"data_array\",editType:\"calc\"},transforms:void 0},n(\"\",{colorAttr:\"`intensity`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{opacity:o.opacity,flatshading:{valType:\"boolean\",dflt:!1,editType:\"calc\"},contour:{show:l({},o.contours.x.show,{}),color:o.contours.x.color,width:o.contours.x.width,editType:\"calc\"},lightposition:{x:l({},o.lightposition.x,{dflt:1e5}),y:l({},o.lightposition.y,{dflt:1e5}),z:l({},o.lightposition.z,{dflt:0}),editType:\"calc\"},lighting:l({vertexnormalsepsilon:{valType:\"number\",min:0,max:1,dflt:1e-12,editType:\"calc\"},facenormalsepsilon:{valType:\"number\",min:0,max:1,dflt:1e-6,editType:\"calc\"},editType:\"calc\"},o.lighting),hoverinfo:l({},s.hoverinfo,{editType:\"calc\"}),showlegend:l({},s.showlegend,{dflt:!1})})},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../surface/attributes\":1338}],1156:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/calc\");e.exports\u003dfunction(t,e){e.intensity\u0026\u0026n(t,e,{vals:e.intensity,containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":670}],1157:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-mesh3d\"),i\u003dt(\"delaunay-triangulate\"),a\u003dt(\"alpha-shape\"),o\u003dt(\"convex-hull\"),s\u003dt(\"../../lib/gl_format_color\").parseColorScale,l\u003dt(\"../../lib/str2rgbarray\"),c\u003dt(\"../../components/colorscale\").extractOpts,u\u003dt(\"../../plots/gl3d/zip3\");function f(t,e,r){this.scene\u003dt,this.uid\u003dr,this.mesh\u003de,this.name\u003d\"\",this.color\u003d\"#fff\",this.data\u003dnull,this.showContour\u003d!1}var h\u003df.prototype;function p(t){for(var e\u003d[],r\u003dt.length,n\u003d0;n\u003cr;n++)e[n]\u003dl(t[n]);return e}function d(t,e,r,n){for(var i\u003d[],a\u003de.length,o\u003d0;o\u003ca;o++)i[o]\u003dt.d2l(e[o],0,n)*r;return i}function m(t){for(var e\u003d[],r\u003dt.length,n\u003d0;n\u003cr;n++)e[n]\u003dMath.round(t[n]);return e}function g(t,e){for(var r\u003dt.length,n\u003d0;n\u003cr;n++)if(t[n]\u003c\u003d-.5||t[n]\u003e\u003de-.5)return!1;return!0}h.handlePick\u003dfunction(t){if(t.object\u003d\u003d\u003dthis.mesh){var e\u003dt.index\u003dt.data.index;t.data._cellCenter?t.traceCoordinate\u003dt.data.dataCoordinate:t.traceCoordinate\u003d[this.data.x[e],this.data.y[e],this.data.z[e]];var r\u003dthis.data.hovertext||this.data.text;return Array.isArray(r)\u0026\u0026void 0!\u003d\u003dr[e]?t.textLabel\u003dr[e]:r\u0026\u0026(t.textLabel\u003dr),!0}},h.update\u003dfunction(t){var e\u003dthis.scene,r\u003de.fullSceneLayout;this.data\u003dt;var n,f\u003dt.x.length,h\u003du(d(r.xaxis,t.x,e.dataScale[0],t.xcalendar),d(r.yaxis,t.y,e.dataScale[1],t.ycalendar),d(r.zaxis,t.z,e.dataScale[2],t.zcalendar));if(t.i\u0026\u0026t.j\u0026\u0026t.k){if(t.i.length!\u003d\u003dt.j.length||t.j.length!\u003d\u003dt.k.length||!g(t.i,f)||!g(t.j,f)||!g(t.k,f))return;n\u003du(m(t.i),m(t.j),m(t.k))}else n\u003d0\u003d\u003d\u003dt.alphahull?o(h):t.alphahull\u003e0?a(t.alphahull,h):function(t,e){for(var r\u003d[\"x\",\"y\",\"z\"].indexOf(t),n\u003d[],a\u003de.length,o\u003d0;o\u003ca;o++)n[o]\u003d[e[o][(r+1)%3],e[o][(r+2)%3]];return i(n)}(t.delaunayaxis,h);var v\u003d{positions:h,cells:n,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:l(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};if(t.intensity){var y\u003dc(t);this.color\u003d\"#fff\";var x\u003dt.intensitymode;v[x+\"Intensity\"]\u003dt.intensity,v[x+\"IntensityBounds\"]\u003d[y.min,y.max],v.colormap\u003ds(t)}else t.vertexcolor?(this.color\u003dt.vertexcolor[0],v.vertexColors\u003dp(t.vertexcolor)):t.facecolor?(this.color\u003dt.facecolor[0],v.cellColors\u003dp(t.facecolor)):(this.color\u003dt.color,v.meshColor\u003dl(t.color));this.mesh.update(v)},h.dispose\u003dfunction(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports\u003dfunction(t,e){var r\u003dt.glplot.gl,i\u003dn({gl:r}),a\u003dnew f(t,i,e.uid);return i._trace\u003da,a.update(e),t.glplot.add(i),a}},{\"../../components/colorscale\":674,\"../../lib/gl_format_color\":795,\"../../lib/str2rgbarray\":823,\"../../plots/gl3d/zip3\":903,\"alpha-shape\":75,\"convex-hull\":141,\"delaunay-triangulate\":176,\"gl-mesh3d\":311}],1158:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/colorscale/defaults\"),o\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,s){function l(r,n){return i.coerce(t,e,o,r,n)}function c(t){var e\u003dt.map((function(t){var e\u003dl(t);return e\u0026\u0026i.isArrayOrTypedArray(e)?e:null}));return e.every((function(t){return t\u0026\u0026t.length\u003d\u003d\u003de[0].length}))\u0026\u0026e}c([\"x\",\"y\",\"z\"])?(c([\"i\",\"j\",\"k\"]),(!e.i||e.j\u0026\u0026e.k)\u0026\u0026(!e.j||e.k\u0026\u0026e.i)\u0026\u0026(!e.k||e.i\u0026\u0026e.j)?(n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],s),[\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lighting.vertexnormalsepsilon\",\"lighting.facenormalsepsilon\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"flatshading\",\"alphahull\",\"delaunayaxis\",\"opacity\"].forEach((function(t){l(t)})),l(\"contour.show\")\u0026\u0026(l(\"contour.color\"),l(\"contour.width\")),\"intensity\"in t?(l(\"intensity\"),l(\"intensitymode\"),a(t,e,s,l,{prefix:\"\",cLetter:\"c\"})):(e.showscale\u003d!1,\"facecolor\"in t?l(\"facecolor\"):\"vertexcolor\"in t?l(\"vertexcolor\"):l(\"color\",r)),l(\"text\"),l(\"hovertext\"),l(\"hovertemplate\"),l(\"xhoverformat\"),l(\"yhoverformat\"),l(\"zhoverformat\"),e._length\u003dnull):e.visible\u003d!1):e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"../../registry\":927,\"./attributes\":1155}],1159:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),colorbar:{min:\"cmin\",max:\"cmax\"},plot:t(\"./convert\"),moduleType:\"trace\",name:\"mesh3d\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":892,\"./attributes\":1155,\"./calc\":1156,\"./convert\":1157,\"./defaults\":1158}],1160:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").extendFlat,i\u003dt(\"../scatter/attributes\"),a\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,o\u003dt(\"../../components/drawing/attributes\").dash,s\u003dt(\"../../components/fx/attributes\"),l\u003dt(\"../../constants/delta.js\"),c\u003dl.INCREASING.COLOR,u\u003dl.DECREASING.COLOR,f\u003di.line;function h(t){return{line:{color:n({},f.color,{dflt:t}),width:f.width,dash:o,editType:\"style\"},editType:\"style\"}}e.exports\u003d{xperiod:i.xperiod,xperiod0:i.xperiod0,xperiodalignment:i.xperiodalignment,xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},open:{valType:\"data_array\",editType:\"calc\"},high:{valType:\"data_array\",editType:\"calc\"},low:{valType:\"data_array\",editType:\"calc\"},close:{valType:\"data_array\",editType:\"calc\"},line:{width:n({},f.width,{}),dash:n({},o,{}),editType:\"style\"},increasing:h(c),decreasing:h(u),text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},tickwidth:{valType:\"number\",min:0,max:.5,dflt:.3,editType:\"calc\"},hoverlabel:n({},s.hoverlabel,{split:{valType:\"boolean\",dflt:!1,editType:\"style\"}})}},{\"../../components/drawing/attributes\":683,\"../../components/fx/attributes\":693,\"../../constants/delta.js\":769,\"../../lib\":799,\"../../plots/cartesian/axis_format_attributes\":852,\"../scatter/attributes\":1214}],1161:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dn._,a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../../plots/cartesian/align_period\"),s\u003dt(\"../../constants/numerical\").BADNUM;function l(t,e,r,n){return{o:t,h:e,l:r,c:n}}function c(t,e,r,o,l,c){for(var u\u003dl.makeCalcdata(e,\"open\"),f\u003dl.makeCalcdata(e,\"high\"),h\u003dl.makeCalcdata(e,\"low\"),p\u003dl.makeCalcdata(e,\"close\"),d\u003dArray.isArray(e.text),m\u003dArray.isArray(e.hovertext),g\u003d!0,v\u003dnull,y\u003d!!e.xperiodalignment,x\u003d[],b\u003d0;b\u003co.length;b++){var _\u003do[b],w\u003du[b],T\u003df[b],k\u003dh[b],M\u003dp[b];if(_!\u003d\u003ds\u0026\u0026w!\u003d\u003ds\u0026\u0026T!\u003d\u003ds\u0026\u0026k!\u003d\u003ds\u0026\u0026M!\u003d\u003ds){M\u003d\u003d\u003dw?null!\u003d\u003dv\u0026\u0026M!\u003d\u003dv\u0026\u0026(g\u003dM\u003ev):g\u003dM\u003ew,v\u003dM;var A\u003dc(w,T,k,M);A.pos\u003d_,A.yc\u003d(w+M)/2,A.i\u003db,A.dir\u003dg?\"increasing\":\"decreasing\",A.x\u003dA.pos,A.y\u003d[k,T],y\u0026\u0026(A.orig_p\u003dr[b]),d\u0026\u0026(A.tx\u003de.text[b]),m\u0026\u0026(A.htx\u003de.hovertext[b]),x.push(A)}else x.push({pos:_,empty:!0})}return e._extremes[l._id]\u003da.findExtremes(l,n.concat(h,f),{padded:!0}),x.length\u0026\u0026(x[0].t\u003d{labels:{open:i(t,\"open:\")+\" \",high:i(t,\"high:\")+\" \",low:i(t,\"low:\")+\" \",close:i(t,\"close:\")+\" \"}}),x}e.exports\u003d{calc:function(t,e){var r\u003da.getFromId(t,e.xaxis),i\u003da.getFromId(t,e.yaxis),s\u003dfunction(t,e,r){var i\u003dr._minDiff;if(!i){var a,s\u003dt._fullData,l\u003d[];for(i\u003d1/0,a\u003d0;a\u003cs.length;a++){var c\u003ds[a];if(\"ohlc\"\u003d\u003d\u003dc.type\u0026\u0026!0\u003d\u003d\u003dc.visible\u0026\u0026c.xaxis\u003d\u003d\u003de._id){l.push(c);var u\u003de.makeCalcdata(c,\"x\");c._origX\u003du;var f\u003do(r,e,\"x\",u);c._xcalc\u003df;var h\u003dn.distinctVals(f).minDiff;h\u0026\u0026isFinite(h)\u0026\u0026(i\u003dMath.min(i,h))}}for(i\u003d\u003d\u003d1/0\u0026\u0026(i\u003d1),a\u003d0;a\u003cl.length;a++)l[a]._minDiff\u003di}return i*r.tickwidth}(t,r,e),u\u003de._minDiff;e._minDiff\u003dnull;var f\u003de._origX;e._origX\u003dnull;var h\u003de._xcalc;e._xcalc\u003dnull;var p\u003dc(t,e,f,h,i,l);return e._extremes[r._id]\u003da.findExtremes(r,h,{vpad:u/2}),p.length?(n.extendFlat(p[0].t,{wHover:u/2,tickLen:s}),p):[{t:{empty:!0}}]},calcCommon:c}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849}],1162:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./ohlc_defaults\"),a\u003dt(\"../scatter/period_defaults\"),o\u003dt(\"./attributes\");function s(t,e,r,n){r(n+\".line.color\"),r(n+\".line.width\",e.line.width),r(n+\".line.dash\",e.line.dash)}e.exports\u003dfunction(t,e,r,l){function c(r,i){return n.coerce(t,e,o,r,i)}i(t,e,c,l)?(a(t,e,l,c,{x:!0}),c(\"xhoverformat\"),c(\"yhoverformat\"),c(\"line.width\"),c(\"line.dash\"),s(t,e,c,\"increasing\"),s(t,e,c,\"decreasing\"),c(\"text\"),c(\"hovertext\"),c(\"tickwidth\"),l._requestRangeslider[e.xaxis]\u003d!0):e.visible\u003d!1}},{\"../../lib\":799,\"../scatter/period_defaults\":1234,\"./attributes\":1160,\"./ohlc_defaults\":1165}],1163:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/fx\"),o\u003dt(\"../../components/color\"),s\u003dt(\"../../lib\").fillText,l\u003dt(\"../../constants/delta.js\"),c\u003d{increasing:l.INCREASING.SYMBOL,decreasing:l.DECREASING.SYMBOL};function u(t,e,r,n){var i,s,l\u003dt.cd,c\u003dt.xa,u\u003dl[0].trace,f\u003dl[0].t,h\u003du.type,p\u003d\"ohlc\"\u003d\u003d\u003dh?\"l\":\"min\",d\u003d\"ohlc\"\u003d\u003d\u003dh?\"h\":\"max\",m\u003df.bPos||0,g\u003df.bdPos||f.tickLen,v\u003df.wHover,y\u003dMath.min(1,g/Math.abs(c.r2c(c.range[1])-c.r2c(c.range[0])));function x(t){var r\u003dfunction(t){return t.pos+m-e}(t);return a.inbox(r-v,r+v,i)}function b(t){var e\u003dt[p],n\u003dt[d];return e\u003d\u003d\u003dn||a.inbox(e-r,n-r,i)}function _(t){return(x(t)+b(t))/2}i\u003dt.maxHoverDistance-y,s\u003dt.maxSpikeDistance-y;var w\u003da.getDistanceFunction(n,x,b,_);if(a.getClosest(l,w,t),!1\u003d\u003d\u003dt.index)return null;var T\u003dl[t.index];if(T.empty)return null;var k\u003du[T.dir],M\u003dk.line.color;return o.opacity(M)\u0026\u0026k.line.width?t.color\u003dM:t.color\u003dk.fillcolor,t.x0\u003dc.c2p(T.pos+m-g,!0),t.x1\u003dc.c2p(T.pos+m+g,!0),t.xLabelVal\u003dvoid 0!\u003d\u003dT.orig_p?T.orig_p:T.pos,t.spikeDistance\u003d_(T)*s/i,t.xSpike\u003dc.c2p(T.pos,!0),t}function f(t,e,r,a){var o\u003dt.cd,s\u003dt.ya,l\u003do[0].trace,c\u003do[0].t,f\u003d[],h\u003du(t,e,r,a);if(!h)return[];var p\u003do[h.index].hi||l.hoverinfo,d\u003dp.split(\"+\");if(!(\"all\"\u003d\u003d\u003dp||-1!\u003d\u003dd.indexOf(\"y\")))return[];for(var m\u003d[\"high\",\"open\",\"close\",\"low\"],g\u003d{},v\u003d0;v\u003cm.length;v++){var y,x\u003dm[v],b\u003dl[x][h.index],_\u003ds.c2p(b,!0);b in g?(y\u003dg[b]).yLabel+\u003d\"\u003cbr\u003e\"+c.labels[x]+n.hoverLabelText(s,b,l.yhoverformat):((y\u003di.extendFlat({},h)).y0\u003dy.y1\u003d_,y.yLabelVal\u003db,y.yLabel\u003dc.labels[x]+n.hoverLabelText(s,b,l.yhoverformat),y.name\u003d\"\",f.push(y),g[b]\u003dy)}return f}function h(t,e,r,i){var a\u003dt.cd,o\u003dt.ya,l\u003da[0].trace,f\u003da[0].t,h\u003du(t,e,r,i);if(!h)return[];var p\u003da[h.index],d\u003dh.index\u003dp.i,m\u003dp.dir;function g(t){return f.labels[t]+n.hoverLabelText(o,l[t][d],l.yhoverformat)}var v\u003dp.hi||l.hoverinfo,y\u003dv.split(\"+\"),x\u003d\"all\"\u003d\u003d\u003dv,b\u003dx||-1!\u003d\u003dy.indexOf(\"y\"),_\u003dx||-1!\u003d\u003dy.indexOf(\"text\"),w\u003db?[g(\"open\"),g(\"high\"),g(\"low\"),g(\"close\")+\"  \"+c[m]]:[];return _\u0026\u0026s(p,l,w),h.extraText\u003dw.join(\"\u003cbr\u003e\"),h.y0\u003dh.y1\u003do.c2p(p.yc,!0),[h]}e.exports\u003d{hoverPoints:function(t,e,r,n){return t.cd[0].trace.hoverlabel.split?f(t,e,r,n):h(t,e,r,n)},hoverSplit:f,hoverOnPoints:h}},{\"../../components/color\":662,\"../../components/fx\":702,\"../../constants/delta.js\":769,\"../../lib\":799,\"../../plots/cartesian/axes\":849}],1164:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"ohlc\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"showLegend\"],meta:{},attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\").calc,plot:t(\"./plot\"),style:t(\"./style\"),hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"./select\")}},{\"../../plots/cartesian\":863,\"./attributes\":1160,\"./calc\":1161,\"./defaults\":1162,\"./hover\":1163,\"./plot\":1166,\"./select\":1167,\"./style\":1168}],1165:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r,a){var o\u003dr(\"x\"),s\u003dr(\"open\"),l\u003dr(\"high\"),c\u003dr(\"low\"),u\u003dr(\"close\");if(r(\"hoverlabel.split\"),n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\"],a),s\u0026\u0026l\u0026\u0026c\u0026\u0026u){var f\u003dMath.min(s.length,l.length,c.length,u.length);return o\u0026\u0026(f\u003dMath.min(f,i.minRowLength(o))),e._length\u003df,f}}},{\"../../lib\":799,\"../../registry\":927}],1166:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r,a){var o\u003de.yaxis,s\u003de.xaxis,l\u003d!!s.rangebreaks;i.makeTraceGroups(a,r,\"trace ohlc\").each((function(t){var e\u003dn.select(this),r\u003dt[0],a\u003dr.t;if(!0!\u003d\u003dr.trace.visible||a.empty)e.remove();else{var c\u003da.tickLen,u\u003de.selectAll(\"path\").data(i.identity);u.enter().append(\"path\"),u.exit().remove(),u.attr(\"d\",(function(t){if(t.empty)return\"M0,0Z\";var e\u003ds.c2p(t.pos-c,!0),r\u003ds.c2p(t.pos+c,!0),n\u003dl?(e+r)/2:s.c2p(t.pos,!0);return\"M\"+e+\",\"+o.c2p(t.o,!0)+\"H\"+n+\"M\"+n+\",\"+o.c2p(t.h,!0)+\"V\"+o.c2p(t.l,!0)+\"M\"+r+\",\"+o.c2p(t.c,!0)+\"H\"+n}))}}))}},{\"../../lib\":799,\"@plotly/d3\":58}],1167:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r,n\u003dt.cd,i\u003dt.xaxis,a\u003dt.yaxis,o\u003d[],s\u003dn[0].t.bPos||0;if(!1\u003d\u003d\u003de)for(r\u003d0;r\u003cn.length;r++)n[r].selected\u003d0;else for(r\u003d0;r\u003cn.length;r++){var l\u003dn[r];e.contains([i.c2p(l.pos+s),a.c2p(l.yc)],null,l.i,t)?(o.push({pointNumber:l.i,x:i.c2d(l.pos),y:a.c2d(l.yc)}),l.selected\u003d1):l.selected\u003d0}return o}},{}],1168:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"../../components/color\");e.exports\u003dfunction(t,e,r){var o\u003dr||n.select(t).selectAll(\"g.ohlclayer\").selectAll(\"g.trace\");o.style(\"opacity\",(function(t){return t[0].trace.opacity})),o.each((function(t){var e\u003dt[0].trace;n.select(this).selectAll(\"path\").each((function(t){if(!t.empty){var r\u003de[t.dir].line;n.select(this).style(\"fill\",\"none\").call(a.stroke,r.color).call(i.dashLine,r.dash,r.width).style(\"opacity\",e.selectedpoints\u0026\u0026!t.selected?.3:1)}}))}))}},{\"../../components/color\":662,\"../../components/drawing\":684,\"@plotly/d3\":58}],1169:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/extend\").extendFlat,i\u003dt(\"../../plots/attributes\"),a\u003dt(\"../../plots/font_attributes\"),o\u003dt(\"../../components/colorscale/attributes\"),s\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,l\u003dt(\"../../plots/domain\").attributes,c\u003dn({editType:\"calc\"},o(\"line\",{editTypeOverride:\"calc\"}),{shape:{valType:\"enumerated\",values:[\"linear\",\"hspline\"],dflt:\"linear\",editType:\"plot\"},hovertemplate:s({editType:\"plot\",arrayOk:!1},{keys:[\"count\",\"probability\"]})});e.exports\u003d{domain:l({name:\"parcats\",trace:!0,editType:\"calc\"}),hoverinfo:n({},i.hoverinfo,{flags:[\"count\",\"probability\"],editType:\"plot\",arrayOk:!1}),hoveron:{valType:\"enumerated\",values:[\"category\",\"color\",\"dimension\"],dflt:\"category\",editType:\"plot\"},hovertemplate:s({editType:\"plot\",arrayOk:!1},{keys:[\"count\",\"probability\",\"category\",\"categorycount\",\"colorcount\",\"bandcolorcount\"]}),arrangement:{valType:\"enumerated\",values:[\"perpendicular\",\"freeform\",\"fixed\"],dflt:\"perpendicular\",editType:\"plot\"},bundlecolors:{valType:\"boolean\",dflt:!0,editType:\"plot\"},sortpaths:{valType:\"enumerated\",values:[\"forward\",\"backward\"],dflt:\"forward\",editType:\"plot\"},labelfont:a({editType:\"calc\"}),tickfont:a({editType:\"calc\"}),dimensions:{_isLinkedToArray:\"dimension\",label:{valType:\"string\",editType:\"calc\"},categoryorder:{valType:\"enumerated\",values:[\"trace\",\"category ascending\",\"category descending\",\"array\"],dflt:\"trace\",editType:\"calc\"},categoryarray:{valType:\"data_array\",editType:\"calc\"},ticktext:{valType:\"data_array\",editType:\"calc\"},values:{valType:\"data_array\",dflt:[],editType:\"calc\"},displayindex:{valType:\"integer\",editType:\"calc\"},editType:\"calc\",visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"}},line:c,counts:{valType:\"number\",min:0,dflt:1,arrayOk:!0,editType:\"calc\"},customdata:void 0,hoverlabel:void 0,ids:void 0,legendgroup:void 0,legendrank:void 0,opacity:void 0,selectedpoints:void 0,showlegend:void 0}},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/domain\":877,\"../../plots/font_attributes\":878,\"../../plots/template_attributes\":922}],1170:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/get_data\").getModuleCalcData,i\u003dt(\"./plot\");r.name\u003d\"parcats\",r.plot\u003dfunction(t,e,r,a){var o\u003dn(t.calcdata,\"parcats\");if(o.length){var s\u003do[0];i(t,s,r,a)}},r.clean\u003dfunction(t,e,r,n){var i\u003dn._has\u0026\u0026n._has(\"parcats\"),a\u003de._has\u0026\u0026e._has(\"parcats\");i\u0026\u0026!a\u0026\u0026n._paperdiv.selectAll(\".parcats\").remove()}},{\"../../plots/get_data\":887,\"./plot\":1175}],1171:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/gup\").wrap,i\u003dt(\"../../components/colorscale/helpers\").hasColorscale,a\u003dt(\"../../components/colorscale/calc\"),o\u003dt(\"../../lib/filter_unique.js\"),s\u003dt(\"../../components/drawing\"),l\u003dt(\"../../lib\"),c\u003dt(\"fast-isnumeric\");function u(t,e,r){t.valueInds.push(e),t.count+\u003dr}function f(t,e,r){return{categoryInds:t,color:e,rawColor:r,valueInds:[],count:0}}function h(t,e,r){t.valueInds.push(e),t.count+\u003dr}e.exports\u003dfunction(t,e){var r\u003dl.filterVisible(e.dimensions);if(0\u003d\u003d\u003dr.length)return[];var p,d,m,g\u003dr.map((function(t){var e;if(\"trace\"\u003d\u003d\u003dt.categoryorder)e\u003dnull;else if(\"array\"\u003d\u003d\u003dt.categoryorder)e\u003dt.categoryarray;else{e\u003do(t.values);for(var r\u003d!0,n\u003d0;n\u003ce.length;n++)if(!c(e[n])){r\u003d!1;break}e.sort(r?l.sorterAsc:void 0),\"category descending\"\u003d\u003d\u003dt.categoryorder\u0026\u0026(e\u003de.reverse())}return function(t,e){e\u003dnull\u003d\u003de?[]:e.map((function(t){return t}));var r\u003d{},n\u003d{},i\u003d[];e.forEach((function(t,e){r[t]\u003d0,n[t]\u003de}));for(var a\u003d0;a\u003ct.length;a++){var o,s\u003dt[a];void 0\u003d\u003d\u003dr[s]?(r[s]\u003d1,o\u003de.push(s)-1,n[s]\u003do):(r[s]++,o\u003dn[s]),i.push(o)}var l\u003de.map((function(t){return r[t]}));return{uniqueValues:e,uniqueCounts:l,inds:i}}(t.values,e)}));p\u003dl.isArrayOrTypedArray(e.counts)?e.counts:[e.counts],function(t){var e;if(function(t){for(var e\u003dnew Array(t.length),r\u003d0;r\u003ct.length;r++){if(t[r]\u003c0||t[r]\u003e\u003dt.length)return!1;if(void 0!\u003d\u003de[t[r]])return!1;e[t[r]]\u003d!0}return!0}(t.map((function(t){return t.displayindex}))))for(e\u003d0;e\u003ct.length;e++)t[e]._displayindex\u003dt[e].displayindex;else for(e\u003d0;e\u003ct.length;e++)t[e]._displayindex\u003de}(r),r.forEach((function(t,e){!function(t,e){t._categoryarray\u003de.uniqueValues,null\u003d\u003d\u003dt.ticktext||void 0\u003d\u003d\u003dt.ticktext?t._ticktext\u003d[]:t._ticktext\u003dt.ticktext.slice();for(var r\u003dt._ticktext.length;r\u003ce.uniqueValues.length;r++)t._ticktext.push(e.uniqueValues[r])}(t,g[e])}));var v,y\u003de.line;y?(i(e,\"line\")\u0026\u0026a(t,e,{vals:e.line.color,containerStr:\"line\",cLetter:\"c\"}),v\u003ds.tryColorscale(y)):v\u003dl.identity;var x,b,_,w,T,k\u003dr[0].values.length,M\u003d{},A\u003dg.map((function(t){return t.inds}));for(m\u003d0,x\u003d0;x\u003ck;x++){var S\u003d[];for(b\u003d0;b\u003cA.length;b++)S.push(A[b][x]);d\u003dp[x%p.length],m+\u003dd;var E\u003d(_\u003dx,w\u003dvoid 0,T\u003dvoid 0,l.isArrayOrTypedArray(y.color)?T\u003dw\u003dy.color[_%y.color.length]:w\u003dy.color,{color:v(w),rawColor:T}),L\u003dS+\"-\"+E.rawColor;void 0\u003d\u003d\u003dM[L]\u0026\u0026(M[L]\u003df(S,E.color,E.rawColor)),h(M[L],x,d)}var C,P\u003dr.map((function(t,e){return function(t,e,r,n,i){return{dimensionInd:t,containerInd:e,displayInd:r,dimensionLabel:n,count:i,categories:[],dragX:null}}(e,t._index,t._displayindex,t.label,m)}));for(x\u003d0;x\u003ck;x++)for(d\u003dp[x%p.length],b\u003d0;b\u003cP.length;b++){var I\u003dP[b].containerInd,O\u003dg[b].inds[x],z\u003dP[b].categories;if(void 0\u003d\u003d\u003dz[O]){var D\u003de.dimensions[I]._categoryarray[O],R\u003de.dimensions[I]._ticktext[O];z[O]\u003d{dimensionInd:b,categoryInd:C\u003dO,categoryValue:D,displayInd:C,categoryLabel:R,valueInds:[],count:0,dragY:null}}u(z[O],x,d)}return n(function(t,e,r){var n\u003dt.map((function(t){return t.categories.length})).reduce((function(t,e){return Math.max(t,e)}));return{dimensions:t,paths:e,trace:void 0,maxCats:n,count:r}}(P,M,m))}},{\"../../components/colorscale/calc\":670,\"../../components/colorscale/helpers\":673,\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/filter_unique.js\":790,\"../../lib/gup\":796,\"fast-isnumeric\":245}],1172:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/helpers\").hasColorscale,a\u003dt(\"../../components/colorscale/defaults\"),o\u003dt(\"../../plots/domain\").defaults,s\u003dt(\"../../plots/array_container_defaults\"),l\u003dt(\"./attributes\"),c\u003dt(\"../parcoords/merge_length\");function u(t,e){function r(r,i){return n.coerce(t,e,l.dimensions,r,i)}var i\u003dr(\"values\"),a\u003dr(\"visible\");if(i\u0026\u0026i.length||(a\u003de.visible\u003d!1),a){r(\"label\"),r(\"displayindex\",e._index);var o,s\u003dt.categoryarray,c\u003dArray.isArray(s)\u0026\u0026s.length\u003e0;c\u0026\u0026(o\u003d\"array\");var u\u003dr(\"categoryorder\",o);\"array\"\u003d\u003d\u003du?(r(\"categoryarray\"),r(\"ticktext\")):(delete t.categoryarray,delete t.ticktext),c||\"array\"!\u003d\u003du||(e.categoryorder\u003d\"trace\")}}e.exports\u003dfunction(t,e,r,f){function h(r,i){return n.coerce(t,e,l,r,i)}var p\u003ds(t,e,{name:\"dimensions\",handleItemDefaults:u}),d\u003dfunction(t,e,r,o,s){s(\"line.shape\"),s(\"line.hovertemplate\");var l\u003ds(\"line.color\",o.colorway[0]);if(i(t,\"line\")\u0026\u0026n.isArrayOrTypedArray(l)){if(l.length)return s(\"line.colorscale\"),a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}),l.length;e.line.color\u003dr}return 1/0}(t,e,r,f,h);o(e,f,h),Array.isArray(p)\u0026\u0026p.length||(e.visible\u003d!1),c(e,p,\"values\",d),h(\"hoveron\"),h(\"hovertemplate\"),h(\"arrangement\"),h(\"bundlecolors\"),h(\"sortpaths\"),h(\"counts\");var m\u003d{family:f.font.family,size:Math.round(f.font.size),color:f.font.color};n.coerceFont(h,\"labelfont\",m);var g\u003d{family:f.font.family,size:Math.round(f.font.size/1.2),color:f.font.color};n.coerceFont(h,\"tickfont\",g)}},{\"../../components/colorscale/defaults\":672,\"../../components/colorscale/helpers\":673,\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"../../plots/domain\":877,\"../parcoords/merge_length\":1185,\"./attributes\":1169}],1173:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),colorbar:{container:\"line\",min:\"cmin\",max:\"cmax\"},moduleType:\"trace\",name:\"parcats\",basePlotModule:t(\"./base_plot\"),categories:[\"noOpacity\"],meta:{}}},{\"./attributes\":1169,\"./base_plot\":1170,\"./calc\":1171,\"./defaults\":1172,\"./plot\":1175}],1174:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../plot_api/plot_api\"),a\u003dt(\"../../components/fx\"),o\u003dt(\"../../lib\"),s\u003do.strTranslate,l\u003dt(\"../../components/drawing\"),c\u003dt(\"tinycolor2\"),u\u003dt(\"../../lib/svg_text_utils\");function f(t,e,r,i){var a\u003dt.map(R.bind(0,e,r)),c\u003di.selectAll(\"g.parcatslayer\").data([null]);c.enter().append(\"g\").attr(\"class\",\"parcatslayer\").style(\"pointer-events\",\"all\");var f\u003dc.selectAll(\"g.trace.parcats\").data(a,h),v\u003df.enter().append(\"g\").attr(\"class\",\"trace parcats\");f.attr(\"transform\",(function(t){return s(t.x,t.y)})),v.append(\"g\").attr(\"class\",\"paths\");var y\u003df.select(\"g.paths\").selectAll(\"path.path\").data((function(t){return t.paths}),h);y.attr(\"fill\",(function(t){return t.model.color}));var _\u003dy.enter().append(\"path\").attr(\"class\",\"path\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.model.color})).attr(\"fill-opacity\",0);b(_),y.attr(\"d\",(function(t){return t.svgD})),_.empty()||y.sort(d),y.exit().remove(),y.on(\"mouseover\",m).on(\"mouseout\",g).on(\"click\",x),v.append(\"g\").attr(\"class\",\"dimensions\");var k\u003df.select(\"g.dimensions\").selectAll(\"g.dimension\").data((function(t){return t.dimensions}),h);k.enter().append(\"g\").attr(\"class\",\"dimension\"),k.attr(\"transform\",(function(t){return s(t.x,0)})),k.exit().remove();var M\u003dk.selectAll(\"g.category\").data((function(t){return t.categories}),h),A\u003dM.enter().append(\"g\").attr(\"class\",\"category\");M.attr(\"transform\",(function(t){return s(0,t.y)})),A.append(\"rect\").attr(\"class\",\"catrect\").attr(\"pointer-events\",\"none\"),M.select(\"rect.catrect\").attr(\"fill\",\"none\").attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})),w(A);var S\u003dM.selectAll(\"rect.bandrect\").data((function(t){return t.bands}),h);S.each((function(){o.raiseToTop(this)})),S.attr(\"fill\",(function(t){return t.color}));var O\u003dS.enter().append(\"rect\").attr(\"class\",\"bandrect\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.color})).attr(\"fill-opacity\",0);S.attr(\"fill\",(function(t){return t.color})).attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})).attr(\"y\",(function(t){return t.y})).attr(\"cursor\",(function(t){return\"fixed\"\u003d\u003d\u003dt.parcatsViewModel.arrangement?\"default\":\"perpendicular\"\u003d\u003d\u003dt.parcatsViewModel.arrangement?\"ns-resize\":\"move\"})),T(O),S.exit().remove(),A.append(\"text\").attr(\"class\",\"catlabel\").attr(\"pointer-events\",\"none\");var z\u003de._fullLayout.paper_bgcolor;M.select(\"text.catlabel\").attr(\"text-anchor\",(function(t){return p(t)?\"start\":\"end\"})).attr(\"alignment-baseline\",\"middle\").style(\"text-shadow\",u.makeTextShadow(z)).style(\"fill\",\"rgb(0, 0, 0)\").attr(\"x\",(function(t){return p(t)?t.width+5:-5})).attr(\"y\",(function(t){return t.height/2})).text((function(t){return t.model.categoryLabel})).each((function(t){l.font(n.select(this),t.parcatsViewModel.categorylabelfont),u.convertToTspans(n.select(this),e)})),A.append(\"text\").attr(\"class\",\"dimlabel\"),M.select(\"text.dimlabel\").attr(\"text-anchor\",\"middle\").attr(\"alignment-baseline\",\"baseline\").attr(\"cursor\",(function(t){return\"fixed\"\u003d\u003d\u003dt.parcatsViewModel.arrangement?\"default\":\"ew-resize\"})).attr(\"x\",(function(t){return t.width/2})).attr(\"y\",-5).text((function(t,e){return 0\u003d\u003d\u003de?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})).each((function(t){l.font(n.select(this),t.parcatsViewModel.labelfont)})),M.selectAll(\"rect.bandrect\").on(\"mouseover\",E).on(\"mouseout\",L),M.exit().remove(),k.call(n.behavior.drag().origin((function(t){return{x:t.x,y:0}})).on(\"dragstart\",C).on(\"drag\",P).on(\"dragend\",I)),f.each((function(t){t.traceSelection\u003dn.select(this),t.pathSelection\u003dn.select(this).selectAll(\"g.paths\").selectAll(\"path.path\"),t.dimensionSelection\u003dn.select(this).selectAll(\"g.dimensions\").selectAll(\"g.dimension\")})),f.exit().remove()}function h(t){return t.key}function p(t){var e\u003dt.parcatsViewModel.dimensions.length,r\u003dt.parcatsViewModel.dimensions[e-1].model.dimensionInd;return t.model.dimensionInd\u003d\u003d\u003dr}function d(t,e){return t.model.rawColor\u003ee.model.rawColor?1:t.model.rawColor\u003ce.model.rawColor?-1:0}function m(t){if(!t.parcatsViewModel.dragDimension\u0026\u0026-1\u003d\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){o.raiseToTop(this),_(n.select(this));var e\u003dv(t),r\u003dy(t);if(t.parcatsViewModel.graphDiv.emit(\"plotly_hover\",{points:e,event:n.event,constraints:r}),-1\u003d\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"none\")){var i,s,l,u\u003dn.mouse(this)[0],f\u003dt.parcatsViewModel.graphDiv,h\u003dt.parcatsViewModel.trace,p\u003df._fullLayout,d\u003dp._paperdiv.node().getBoundingClientRect(),m\u003dt.parcatsViewModel.graphDiv.getBoundingClientRect();for(l\u003d0;l\u003ct.leftXs.length-1;l++)if(t.leftXs[l]+t.dimWidths[l]-2\u003c\u003du\u0026\u0026u\u003c\u003dt.leftXs[l+1]+2){var g\u003dt.parcatsViewModel.dimensions[l],x\u003dt.parcatsViewModel.dimensions[l+1];i\u003d(g.x+g.width+x.x)/2,s\u003d(t.topYs[l]+t.topYs[l+1]+t.height)/2;break}var b\u003dt.parcatsViewModel.x+i,w\u003dt.parcatsViewModel.y+s,T\u003dc.mostReadable(t.model.color,[\"black\",\"white\"]),k\u003dt.model.count,M\u003dk/t.parcatsViewModel.model.count,A\u003d{countLabel:k,probabilityLabel:M.toFixed(3)},S\u003d[];-1!\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"count\")\u0026\u0026S.push([\"Count:\",A.countLabel].join(\" \")),-1!\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")\u0026\u0026S.push([\"P:\",A.probabilityLabel].join(\" \"));var E\u003dS.join(\"\u003cbr\u003e\"),L\u003dn.mouse(f)[0];a.loneHover({trace:h,x:b-d.left+m.left,y:w-d.top+m.top,text:E,color:t.model.color,borderColor:\"black\",fontFamily:\u0027Monaco, \"Courier New\", monospace\u0027,fontSize:10,fontColor:T,idealAlign:L\u003cb?\"right\":\"left\",hovertemplate:(h.line||{}).hovertemplate,hovertemplateLabels:A,eventData:[{data:h._input,fullData:h,count:k,probability:M}]},{container:p._hoverlayer.node(),outerContainer:p._paper.node(),gd:f})}}}function g(t){if(!t.parcatsViewModel.dragDimension\u0026\u0026(b(n.select(this)),a.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()),t.parcatsViewModel.pathSelection.sort(d),-1\u003d\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"skip\"))){var e\u003dv(t),r\u003dy(t);t.parcatsViewModel.graphDiv.emit(\"plotly_unhover\",{points:e,event:n.event,constraints:r})}}function v(t){for(var e\u003d[],r\u003dO(t.parcatsViewModel),n\u003d0;n\u003ct.model.valueInds.length;n++){var i\u003dt.model.valueInds[n];e.push({curveNumber:r,pointNumber:i})}return e}function y(t){for(var e\u003d{},r\u003dt.parcatsViewModel.model.dimensions,n\u003d0;n\u003cr.length;n++){var i\u003dr[n],a\u003di.categories[t.model.categoryInds[n]];e[i.containerInd]\u003da.categoryValue}return void 0!\u003d\u003dt.model.rawColor\u0026\u0026(e.color\u003dt.model.rawColor),e}function x(t){if(-1\u003d\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){var e\u003dv(t),r\u003dy(t);t.parcatsViewModel.graphDiv.emit(\"plotly_click\",{points:e,event:n.event,constraints:r})}}function b(t){t.attr(\"fill\",(function(t){return t.model.color})).attr(\"fill-opacity\",.6).attr(\"stroke\",\"lightgray\").attr(\"stroke-width\",.2).attr(\"stroke-opacity\",1)}function _(t){t.attr(\"fill-opacity\",.8).attr(\"stroke\",(function(t){return c.mostReadable(t.model.color,[\"black\",\"white\"])})).attr(\"stroke-width\",.3)}function w(t){t.select(\"rect.catrect\").attr(\"stroke\",\"black\").attr(\"stroke-width\",1).attr(\"stroke-opacity\",1)}function T(t){t.attr(\"stroke\",\"black\").attr(\"stroke-width\",.2).attr(\"stroke-opacity\",1).attr(\"fill-opacity\",1)}function k(t){var e\u003dt.parcatsViewModel.pathSelection,r\u003dt.categoryViewModel.model.dimensionInd,n\u003dt.categoryViewModel.model.categoryInd;return e.filter((function(e){return e.model.categoryInds[r]\u003d\u003d\u003dn\u0026\u0026e.model.color\u003d\u003d\u003dt.color}))}function M(t,e,r){var i\u003dn.select(t).datum(),a\u003di.categoryViewModel.model,o\u003di.parcatsViewModel.graphDiv,s\u003dn.select(t.parentNode).selectAll(\"rect.bandrect\"),l\u003d[];s.each((function(t){k(t).each((function(t){Array.prototype.push.apply(l,v(t))}))}));var c\u003d{};c[a.dimensionInd]\u003da.categoryValue,o.emit(e,{points:l,event:r,constraints:c})}function A(t,e,r){var i\u003dn.select(t).datum(),a\u003di.categoryViewModel.model,o\u003di.parcatsViewModel.graphDiv,s\u003dk(i),l\u003d[];s.each((function(t){Array.prototype.push.apply(l,v(t))}));var c\u003d{};c[a.dimensionInd]\u003da.categoryValue,void 0!\u003d\u003di.rawColor\u0026\u0026(c.color\u003di.rawColor),o.emit(e,{points:l,event:r,constraints:c})}function S(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o\u003dt._fullLayout._invScaleX,s\u003dt._fullLayout._invScaleY,l\u003dn.select(r.parentNode).select(\"rect.catrect\"),c\u003dl.node().getBoundingClientRect(),u\u003dl.datum(),f\u003du.parcatsViewModel,h\u003df.model.dimensions[u.model.dimensionInd],p\u003df.trace,d\u003dc.top+c.height/2;f.dimensions.length\u003e1\u0026\u0026h.displayInd\u003d\u003d\u003df.dimensions.length-1?(i\u003dc.left,a\u003d\"left\"):(i\u003dc.left+c.width,a\u003d\"right\");var m\u003du.model.count,g\u003du.model.categoryLabel,v\u003dm/u.parcatsViewModel.model.count,y\u003d{countLabel:m,categoryLabel:g,probabilityLabel:v.toFixed(3)},x\u003d[];-1!\u003d\u003du.parcatsViewModel.hoverinfoItems.indexOf(\"count\")\u0026\u0026x.push([\"Count:\",y.countLabel].join(\" \")),-1!\u003d\u003du.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")\u0026\u0026x.push([\"P(\"+y.categoryLabel+\"):\",y.probabilityLabel].join(\" \"));var b\u003dx.join(\"\u003cbr\u003e\");return{trace:p,x:o*(i-e.left),y:s*(d-e.top),text:b,color:\"lightgray\",borderColor:\"black\",fontFamily:\u0027Monaco, \"Courier New\", monospace\u0027,fontSize:12,fontColor:\"black\",idealAlign:a,hovertemplate:p.hovertemplate,hovertemplateLabels:y,eventData:[{data:p._input,fullData:p,count:m,category:g,probability:v}]}}function E(t){if(!t.parcatsViewModel.dragDimension\u0026\u0026-1\u003d\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")){if(n.mouse(this)[1]\u003c-1)return;var e,r\u003dt.parcatsViewModel.graphDiv,i\u003dr._fullLayout,s\u003di._paperdiv.node().getBoundingClientRect(),l\u003dt.parcatsViewModel.hoveron;if(\"color\"\u003d\u003d\u003dl?(!function(t){var e\u003dn.select(t).datum(),r\u003dk(e);_(r),r.each((function(){o.raiseToTop(this)})),n.select(t.parentNode).selectAll(\"rect.bandrect\").filter((function(t){return t.color\u003d\u003d\u003de.color})).each((function(){o.raiseToTop(this),n.select(this).attr(\"stroke\",\"black\").attr(\"stroke-width\",1.5)}))}(this),A(this,\"plotly_hover\",n.event)):(!function(t){n.select(t.parentNode).selectAll(\"rect.bandrect\").each((function(t){var e\u003dk(t);_(e),e.each((function(){o.raiseToTop(this)}))})),n.select(t.parentNode).select(\"rect.catrect\").attr(\"stroke\",\"black\").attr(\"stroke-width\",2.5)}(this),M(this,\"plotly_hover\",n.event)),-1\u003d\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"none\"))\"category\"\u003d\u003d\u003dl?e\u003dS(r,s,this):\"color\"\u003d\u003d\u003dl?e\u003dfunction(t,e,r){t._fullLayout._calcInverseTransform(t);var i,a,o\u003dt._fullLayout._invScaleX,s\u003dt._fullLayout._invScaleY,l\u003dr.getBoundingClientRect(),u\u003dn.select(r).datum(),f\u003du.categoryViewModel,h\u003df.parcatsViewModel,p\u003dh.model.dimensions[f.model.dimensionInd],d\u003dh.trace,m\u003dl.y+l.height/2;h.dimensions.length\u003e1\u0026\u0026p.displayInd\u003d\u003d\u003dh.dimensions.length-1?(i\u003dl.left,a\u003d\"left\"):(i\u003dl.left+l.width,a\u003d\"right\");var g\u003df.model.categoryLabel,v\u003du.parcatsViewModel.model.count,y\u003d0;u.categoryViewModel.bands.forEach((function(t){t.color\u003d\u003d\u003du.color\u0026\u0026(y+\u003dt.count)}));var x\u003df.model.count,b\u003d0;h.pathSelection.each((function(t){t.model.color\u003d\u003d\u003du.color\u0026\u0026(b+\u003dt.model.count)}));var _\u003dy/v,w\u003dy/b,T\u003dy/x,k\u003d{countLabel:v,categoryLabel:g,probabilityLabel:_.toFixed(3)},M\u003d[];-1!\u003d\u003df.parcatsViewModel.hoverinfoItems.indexOf(\"count\")\u0026\u0026M.push([\"Count:\",k.countLabel].join(\" \")),-1!\u003d\u003df.parcatsViewModel.hoverinfoItems.indexOf(\"probability\")\u0026\u0026(M.push(\"P(color \\u2229 \"+g+\"): \"+k.probabilityLabel),M.push(\"P(\"+g+\" | color): \"+w.toFixed(3)),M.push(\"P(color | \"+g+\"): \"+T.toFixed(3)));var A\u003dM.join(\"\u003cbr\u003e\"),S\u003dc.mostReadable(u.color,[\"black\",\"white\"]);return{trace:d,x:o*(i-e.left),y:s*(m-e.top),text:A,color:u.color,borderColor:\"black\",fontFamily:\u0027Monaco, \"Courier New\", monospace\u0027,fontColor:S,fontSize:10,idealAlign:a,hovertemplate:d.hovertemplate,hovertemplateLabels:k,eventData:[{data:d._input,fullData:d,category:g,count:v,probability:_,categorycount:x,colorcount:b,bandcolorcount:y}]}}(r,s,this):\"dimension\"\u003d\u003d\u003dl\u0026\u0026(e\u003dfunction(t,e,r){var i\u003d[];return n.select(r.parentNode.parentNode).selectAll(\"g.category\").select(\"rect.catrect\").each((function(){i.push(S(t,e,this))})),i}(r,s,this)),e\u0026\u0026a.loneHover(e,{container:i._hoverlayer.node(),outerContainer:i._paper.node(),gd:r})}}function L(t){var e\u003dt.parcatsViewModel;if(!e.dragDimension\u0026\u0026(b(e.pathSelection),w(e.dimensionSelection.selectAll(\"g.category\")),T(e.dimensionSelection.selectAll(\"g.category\").selectAll(\"rect.bandrect\")),a.loneUnhover(e.graphDiv._fullLayout._hoverlayer.node()),e.pathSelection.sort(d),-1\u003d\u003d\u003de.hoverinfoItems.indexOf(\"skip\"))){\"color\"\u003d\u003d\u003dt.parcatsViewModel.hoveron?A(this,\"plotly_unhover\",n.event):M(this,\"plotly_unhover\",n.event)}}function C(t){\"fixed\"!\u003d\u003dt.parcatsViewModel.arrangement\u0026\u0026(t.dragDimensionDisplayInd\u003dt.model.displayInd,t.initialDragDimensionDisplayInds\u003dt.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),t.dragHasMoved\u003d!1,t.dragCategoryDisplayInd\u003dnull,n.select(this).selectAll(\"g.category\").select(\"rect.catrect\").each((function(e){var r\u003dn.mouse(this)[0],i\u003dn.mouse(this)[1];-2\u003c\u003dr\u0026\u0026r\u003c\u003de.width+2\u0026\u0026-2\u003c\u003di\u0026\u0026i\u003c\u003de.height+2\u0026\u0026(t.dragCategoryDisplayInd\u003de.model.displayInd,t.initialDragCategoryDisplayInds\u003dt.model.categories.map((function(t){return t.displayInd})),e.model.dragY\u003de.y,o.raiseToTop(this.parentNode),n.select(this.parentNode).selectAll(\"rect.bandrect\").each((function(e){e.y\u003ci\u0026\u0026i\u003c\u003de.y+e.height\u0026\u0026(t.potentialClickBand\u003dthis)})))})),t.parcatsViewModel.dragDimension\u003dt,a.loneUnhover(t.parcatsViewModel.graphDiv._fullLayout._hoverlayer.node()))}function P(t){if(\"fixed\"!\u003d\u003dt.parcatsViewModel.arrangement\u0026\u0026(t.dragHasMoved\u003d!0,null!\u003d\u003dt.dragDimensionDisplayInd)){var e\u003dt.dragDimensionDisplayInd,r\u003de-1,i\u003de+1,a\u003dt.parcatsViewModel.dimensions[e];if(null!\u003d\u003dt.dragCategoryDisplayInd){var o\u003da.categories[t.dragCategoryDisplayInd];o.model.dragY+\u003dn.event.dy;var s\u003do.model.dragY,l\u003do.model.displayInd,c\u003da.categories,u\u003dc[l-1],f\u003dc[l+1];void 0!\u003d\u003du\u0026\u0026s\u003cu.y+u.height/2\u0026\u0026(o.model.displayInd\u003du.model.displayInd,u.model.displayInd\u003dl),void 0!\u003d\u003df\u0026\u0026s+o.height\u003ef.y+f.height/2\u0026\u0026(o.model.displayInd\u003df.model.displayInd,f.model.displayInd\u003dl),t.dragCategoryDisplayInd\u003do.model.displayInd}if(null\u003d\u003d\u003dt.dragCategoryDisplayInd||\"freeform\"\u003d\u003d\u003dt.parcatsViewModel.arrangement){a.model.dragX\u003dn.event.x;var h\u003dt.parcatsViewModel.dimensions[r],p\u003dt.parcatsViewModel.dimensions[i];void 0!\u003d\u003dh\u0026\u0026a.model.dragX\u003ch.x+h.width\u0026\u0026(a.model.displayInd\u003dh.model.displayInd,h.model.displayInd\u003de),void 0!\u003d\u003dp\u0026\u0026a.model.dragX+a.width\u003ep.x\u0026\u0026(a.model.displayInd\u003dp.model.displayInd,p.model.displayInd\u003dt.dragDimensionDisplayInd),t.dragDimensionDisplayInd\u003da.model.displayInd}N(t.parcatsViewModel),B(t.parcatsViewModel),D(t.parcatsViewModel),z(t.parcatsViewModel)}}function I(t){if(\"fixed\"!\u003d\u003dt.parcatsViewModel.arrangement\u0026\u0026null!\u003d\u003dt.dragDimensionDisplayInd){n.select(this).selectAll(\"text\").attr(\"font-weight\",\"normal\");var e\u003d{},r\u003dO(t.parcatsViewModel),a\u003dt.parcatsViewModel.model.dimensions.map((function(t){return t.displayInd})),o\u003dt.initialDragDimensionDisplayInds.some((function(t,e){return t!\u003d\u003da[e]}));o\u0026\u0026a.forEach((function(r,n){var i\u003dt.parcatsViewModel.model.dimensions[n].containerInd;e[\"dimensions[\"+i+\"].displayindex\"]\u003dr}));var s\u003d!1;if(null!\u003d\u003dt.dragCategoryDisplayInd){var l\u003dt.model.categories.map((function(t){return t.displayInd}));if(s\u003dt.initialDragCategoryDisplayInds.some((function(t,e){return t!\u003d\u003dl[e]}))){var c\u003dt.model.categories.slice().sort((function(t,e){return t.displayInd-e.displayInd})),u\u003dc.map((function(t){return t.categoryValue})),f\u003dc.map((function(t){return t.categoryLabel}));e[\"dimensions[\"+t.model.containerInd+\"].categoryarray\"]\u003d[u],e[\"dimensions[\"+t.model.containerInd+\"].ticktext\"]\u003d[f],e[\"dimensions[\"+t.model.containerInd+\"].categoryorder\"]\u003d\"array\"}}if(-1\u003d\u003d\u003dt.parcatsViewModel.hoverinfoItems.indexOf(\"skip\")\u0026\u0026!t.dragHasMoved\u0026\u0026t.potentialClickBand\u0026\u0026(\"color\"\u003d\u003d\u003dt.parcatsViewModel.hoveron?A(t.potentialClickBand,\"plotly_click\",n.event.sourceEvent):M(t.potentialClickBand,\"plotly_click\",n.event.sourceEvent)),t.model.dragX\u003dnull,null!\u003d\u003dt.dragCategoryDisplayInd)t.parcatsViewModel.dimensions[t.dragDimensionDisplayInd].categories[t.dragCategoryDisplayInd].model.dragY\u003dnull,t.dragCategoryDisplayInd\u003dnull;t.dragDimensionDisplayInd\u003dnull,t.parcatsViewModel.dragDimension\u003dnull,t.dragHasMoved\u003dnull,t.potentialClickBand\u003dnull,N(t.parcatsViewModel),B(t.parcatsViewModel),n.transition().duration(300).ease(\"cubic-in-out\").each((function(){D(t.parcatsViewModel,!0),z(t.parcatsViewModel,!0)})).each(\"end\",(function(){(o||s)\u0026\u0026i.restyle(t.parcatsViewModel.graphDiv,e,[r])}))}}function O(t){for(var e,r\u003dt.graphDiv._fullData,n\u003d0;n\u003cr.length;n++)if(t.key\u003d\u003d\u003dr[n].uid){e\u003dn;break}return e}function z(t,e){var r;void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1),t.pathSelection.data((function(t){return t.paths}),h),(r\u003dt.pathSelection,e?r.transition():r).attr(\"d\",(function(t){return t.svgD}))}function D(t,e){function r(t){return e?t.transition():t}void 0\u003d\u003d\u003de\u0026\u0026(e\u003d!1),t.dimensionSelection.data((function(t){return t.dimensions}),h);var i\u003dt.dimensionSelection.selectAll(\"g.category\").data((function(t){return t.categories}),h);r(t.dimensionSelection).attr(\"transform\",(function(t){return s(t.x,0)})),r(i).attr(\"transform\",(function(t){return s(0,t.y)})),i.select(\".dimlabel\").text((function(t,e){return 0\u003d\u003d\u003de?t.parcatsViewModel.model.dimensions[t.model.dimensionInd].dimensionLabel:null})),i.select(\".catlabel\").attr(\"text-anchor\",(function(t){return p(t)?\"start\":\"end\"})).attr(\"x\",(function(t){return p(t)?t.width+5:-5})).each((function(t){var e,r;p(t)?(e\u003dt.width+5,r\u003d\"start\"):(e\u003d-5,r\u003d\"end\"),n.select(this).selectAll(\"tspan\").attr(\"x\",e).attr(\"text-anchor\",r)}));var a\u003di.selectAll(\"rect.bandrect\").data((function(t){return t.bands}),h),l\u003da.enter().append(\"rect\").attr(\"class\",\"bandrect\").attr(\"cursor\",\"move\").attr(\"stroke-opacity\",0).attr(\"fill\",(function(t){return t.color})).attr(\"fill-opacity\",0);a.attr(\"fill\",(function(t){return t.color})).attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})).attr(\"y\",(function(t){return t.y})),T(l),a.each((function(){o.raiseToTop(this)})),a.exit().remove()}function R(t,e,r){var n,i\u003dr[0],a\u003de.margin||{l:80,r:80,t:100,b:80},o\u003di.trace,s\u003do.domain,l\u003de.width,c\u003de.height,u\u003dMath.floor(l*(s.x[1]-s.x[0])),f\u003dMath.floor(c*(s.y[1]-s.y[0])),h\u003ds.x[0]*l+a.l,p\u003de.height-s.y[1]*e.height+a.t,d\u003do.line.shape;n\u003d\"all\"\u003d\u003d\u003do.hoverinfo?[\"count\",\"probability\"]:(o.hoverinfo||\"\").split(\"+\");var m\u003d{trace:o,key:o.uid,model:i,x:h,y:p,width:u,height:f,hoveron:o.hoveron,hoverinfoItems:n,arrangement:o.arrangement,bundlecolors:o.bundlecolors,sortpaths:o.sortpaths,labelfont:o.labelfont,categorylabelfont:o.tickfont,pathShape:d,dragDimension:null,margin:a,paths:[],dimensions:[],graphDiv:t,traceSelection:null,pathSelection:null,dimensionSelection:null};return i.dimensions\u0026\u0026(N(m),B(m)),m}function F(t,e,r,i,a){var o,s,l\u003d[],c\u003d[];for(s\u003d0;s\u003cr.length-1;s++)o\u003dn.interpolateNumber(r[s]+t[s],t[s+1]),l.push(o(a)),c.push(o(1-a));var u\u003d\"M \"+t[0]+\",\"+e[0];for(u+\u003d\"l\"+r[0]+\",0 \",s\u003d1;s\u003cr.length;s++)u+\u003d\"C\"+l[s-1]+\",\"+e[s-1]+\" \"+c[s-1]+\",\"+e[s]+\" \"+t[s]+\",\"+e[s],u+\u003d\"l\"+r[s]+\",0 \";for(u+\u003d\"l0,\"+i+\" \",u+\u003d\"l -\"+r[r.length-1]+\",0 \",s\u003dr.length-2;s\u003e\u003d0;s--)u+\u003d\"C\"+c[s]+\",\"+(e[s+1]+i)+\" \"+l[s]+\",\"+(e[s]+i)+\" \"+(t[s]+r[s])+\",\"+(e[s]+i),u+\u003d\"l-\"+r[s]+\",0 \";return u+\u003d\"Z\"}function B(t){var e\u003dt.dimensions,r\u003dt.model,n\u003de.map((function(t){return t.categories.map((function(t){return t.y}))})),i\u003dt.model.dimensions.map((function(t){return t.categories.map((function(t){return t.displayInd}))})),a\u003dt.model.dimensions.map((function(t){return t.displayInd})),o\u003dt.dimensions.map((function(t){return t.model.dimensionInd})),s\u003de.map((function(t){return t.x})),l\u003de.map((function(t){return t.width})),c\u003d[];for(var u in r.paths)r.paths.hasOwnProperty(u)\u0026\u0026c.push(r.paths[u]);function f(t){var e\u003dt.categoryInds.map((function(t,e){return i[e][t]}));return o.map((function(t){return e[t]}))}c.sort((function(e,r){var n\u003df(e),i\u003df(r);return\"backward\"\u003d\u003d\u003dt.sortpaths\u0026\u0026(n.reverse(),i.reverse()),n.push(e.valueInds[0]),i.push(r.valueInds[0]),t.bundlecolors\u0026\u0026(n.unshift(e.rawColor),i.unshift(r.rawColor)),n\u003ci?-1:n\u003ei?1:0}));for(var h\u003dnew Array(c.length),p\u003de[0].model.count,d\u003de[0].categories.map((function(t){return t.height})).reduce((function(t,e){return t+e})),m\u003d0;m\u003cc.length;m++){var g,v\u003dc[m];g\u003dp\u003e0?d*(v.count/p):0;for(var y,x\u003dnew Array(n.length),b\u003d0;b\u003cv.categoryInds.length;b++){var _\u003dv.categoryInds[b],w\u003di[b][_],T\u003da[b];x[T]\u003dn[T][w],n[T][w]+\u003dg;var k\u003dt.dimensions[T].categories[w],M\u003dk.bands.length,A\u003dk.bands[M-1];if(void 0\u003d\u003d\u003dA||v.rawColor!\u003d\u003dA.rawColor){var S\u003dvoid 0\u003d\u003d\u003dA?0:A.y+A.height;k.bands.push({key:S,color:v.color,rawColor:v.rawColor,height:g,width:k.width,count:v.count,y:S,categoryViewModel:k,parcatsViewModel:t})}else{var E\u003dk.bands[M-1];E.height+\u003dg,E.count+\u003dv.count}}y\u003d\"hspline\"\u003d\u003d\u003dt.pathShape?F(s,x,l,g,.5):F(s,x,l,g,0),h[m]\u003d{key:v.valueInds[0],model:v,height:g,leftXs:s,topYs:x,dimWidths:l,svgD:y,parcatsViewModel:t}}t.paths\u003dh}function N(t){var e\u003dt.model.dimensions.map((function(t){return{displayInd:t.displayInd,dimensionInd:t.dimensionInd}}));e.sort((function(t,e){return t.displayInd-e.displayInd}));var r\u003d[];for(var n in e){var i\u003de[n].dimensionInd,a\u003dt.model.dimensions[i];r.push(j(t,a))}t.dimensions\u003dr}function j(t,e){var r,n\u003dt.model.dimensions.length,i\u003de.displayInd;r\u003d40+(n\u003e1?(t.width-80-16)/(n-1):0)*i;var a,o,s,l,c,u\u003d[],f\u003dt.model.maxCats,h\u003de.categories.length,p\u003de.count,d\u003dt.height-8*(f-1),m\u003d8*(f-h)/2,g\u003de.categories.map((function(t){return{displayInd:t.displayInd,categoryInd:t.categoryInd}}));for(g.sort((function(t,e){return t.displayInd-e.displayInd})),c\u003d0;c\u003ch;c++)l\u003dg[c].categoryInd,o\u003de.categories[l],a\u003dp\u003e0?o.count/p*d:0,s\u003d{key:o.valueInds[0],model:o,width:16,height:a,y:null!\u003d\u003do.dragY?o.dragY:m,bands:[],parcatsViewModel:t},m\u003dm+a+8,u.push(s);return{key:e.dimensionInd,x:null!\u003d\u003de.dragX?e.dragX:r,y:0,width:16,model:e,categories:u,parcatsViewModel:t,dragCategoryDisplayInd:null,dragDimensionDisplayInd:null,initialDragDimensionDisplayInds:null,initialDragCategoryDisplayInds:null,dragHasMoved:null,potentialClickBand:null}}e.exports\u003dfunction(t,e,r,n){f(r,t,n,e)}},{\"../../components/drawing\":684,\"../../components/fx\":702,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plot_api/plot_api\":835,\"@plotly/d3\":58,tinycolor2:594}],1175:[function(t,e,r){\"use strict\";var n\u003dt(\"./parcats\");e.exports\u003dfunction(t,e,r,i){var a\u003dt._fullLayout,o\u003da._paper,s\u003da._size;n(t,o,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},r,i)}},{\"./parcats\":1174}],1176:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/attributes\"),i\u003dt(\"../../plots/cartesian/layout_attributes\"),a\u003dt(\"../../plots/font_attributes\"),o\u003dt(\"../../plots/domain\").attributes,s\u003dt(\"../../lib/extend\").extendFlat,l\u003dt(\"../../plot_api/plot_template\").templatedArray;e.exports\u003d{domain:o({name:\"parcoords\",trace:!0,editType:\"plot\"}),labelangle:{valType:\"angle\",dflt:0,editType:\"plot\"},labelside:{valType:\"enumerated\",values:[\"top\",\"bottom\"],dflt:\"top\",editType:\"plot\"},labelfont:a({editType:\"plot\"}),tickfont:a({editType:\"plot\"}),rangefont:a({editType:\"plot\"}),dimensions:l(\"dimension\",{label:{valType:\"string\",editType:\"plot\"},tickvals:s({},i.tickvals,{editType:\"plot\"}),ticktext:s({},i.ticktext,{editType:\"plot\"}),tickformat:s({},i.tickformat,{editType:\"plot\"}),visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},range:{valType:\"info_array\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},constraintrange:{valType:\"info_array\",freeLength:!0,dimensions:\"1-2\",items:[{valType:\"number\",editType:\"plot\"},{valType:\"number\",editType:\"plot\"}],editType:\"plot\"},multiselect:{valType:\"boolean\",dflt:!0,editType:\"plot\"},values:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"}),line:s({editType:\"calc\"},n(\"line\",{colorscaleDflt:\"Viridis\",autoColorDflt:!1,editTypeOverride:\"calc\"}))}},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/layout_attributes\":864,\"../../plots/domain\":877,\"../../plots/font_attributes\":878}],1177:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\"),i\u003dt(\"@plotly/d3\"),a\u003dt(\"../../lib/gup\").keyFun,o\u003dt(\"../../lib/gup\").repeat,s\u003dt(\"../../lib\").sorterAsc,l\u003dt(\"../../lib\").strTranslate,c\u003dn.bar.snapRatio;function u(t,e){return t*(1-c)+e*c}var f\u003dn.bar.snapClose;function h(t,e){return t*(1-f)+e*f}function p(t,e,r,n){if(function(t,e){for(var r\u003d0;r\u003ce.length;r++)if(t\u003e\u003de[r][0]\u0026\u0026t\u003c\u003de[r][1])return!0;return!1}(r,n))return r;var i\u003dt?-1:1,a\u003d0,o\u003de.length-1;if(i\u003c0){var s\u003da;a\u003do,o\u003ds}for(var l\u003de[a],c\u003dl,f\u003da;i*f\u003ci*o;f+\u003di){var p\u003df+i,d\u003de[p];if(i*r\u003ci*h(l,d))return u(l,c);if(i*r\u003ci*d||p\u003d\u003d\u003do)return u(d,l);c\u003dl,l\u003dd}}function d(t){t.attr(\"x\",-n.bar.captureWidth/2).attr(\"width\",n.bar.captureWidth)}function m(t){t.attr(\"visibility\",\"visible\").style(\"visibility\",\"visible\").attr(\"fill\",\"yellow\").attr(\"opacity\",0)}function g(t){if(!t.brush.filterSpecified)return\"0,\"+t.height;for(var e,r,n,i\u003dv(t.brush.filter.getConsolidated(),t.height),a\u003d[0],o\u003di.length?i[0][0]:null,s\u003d0;s\u003ci.length;s++)r\u003d(e\u003di[s])[1]-e[0],a.push(o),a.push(r),(n\u003ds+1)\u003ci.length\u0026\u0026(o\u003di[n][0]-e[1]);return a.push(t.height),a}function v(t,e){return t.map((function(t){return t.map((function(t){return Math.max(0,t*e)})).sort(s)}))}function y(){i.select(document.body).style(\"cursor\",null)}function x(t){t.attr(\"stroke-dasharray\",g)}function b(t,e){var r\u003di.select(t).selectAll(\".highlight, .highlight-shadow\");x(e?r.transition().duration(n.bar.snapDuration).each(\"end\",e):r)}function _(t,e){var r,i\u003dt.brush,a\u003dNaN,o\u003d{};if(i.filterSpecified){var s\u003dt.height,l\u003di.filter.getConsolidated(),c\u003dv(l,s),u\u003dNaN,f\u003dNaN,h\u003dNaN;for(r\u003d0;r\u003c\u003dc.length;r++){var p\u003dc[r];if(p\u0026\u0026p[0]\u003c\u003de\u0026\u0026e\u003c\u003dp[1]){u\u003dr;break}if(f\u003dr?r-1:NaN,p\u0026\u0026p[0]\u003ee){h\u003dr;break}}if(a\u003du,isNaN(a)\u0026\u0026(a\u003disNaN(f)||isNaN(h)?isNaN(f)?h:f:e-c[f][1]\u003cc[h][0]-e?f:h),!isNaN(a)){var d\u003dc[a],m\u003dfunction(t,e){var r\u003dn.bar.handleHeight;if(!(e\u003et[1]+r||e\u003ct[0]-r))return e\u003e\u003d.9*t[1]+.1*t[0]?\"n\":e\u003c\u003d.9*t[0]+.1*t[1]?\"s\":\"ns\"}(d,e);m\u0026\u0026(o.interval\u003dl[a],o.intervalPix\u003dd,o.region\u003dm)}}if(t.ordinal\u0026\u0026!o.region){var g\u003dt.unitTickvals,y\u003dt.unitToPaddedPx.invert(e);for(r\u003d0;r\u003cg.length;r++){var x\u003d[.25*g[Math.max(r-1,0)]+.75*g[r],.25*g[Math.min(r+1,g.length-1)]+.75*g[r]];if(y\u003e\u003dx[0]\u0026\u0026y\u003c\u003dx[1]){o.clickableOrdinalRange\u003dx;break}}}return o}function w(t,e){i.event.sourceEvent.stopPropagation();var r\u003de.height-i.mouse(t)[1]-2*n.verticalPadding,a\u003de.brush.svgBrush;a.wasDragged\u003d!0,a._dragging\u003d!0,a.grabbingBar?a.newExtent\u003d[r-a.grabPoint,r+a.barLength-a.grabPoint].map(e.unitToPaddedPx.invert):a.newExtent\u003d[a.startExtent,e.unitToPaddedPx.invert(r)].sort(s),e.brush.filterSpecified\u003d!0,a.extent\u003da.stayingIntervals.concat([a.newExtent]),a.brushCallback(e),b(t.parentNode)}function T(t,e){var r\u003d_(e,e.height-i.mouse(t)[1]-2*n.verticalPadding),a\u003d\"crosshair\";r.clickableOrdinalRange?a\u003d\"pointer\":r.region\u0026\u0026(a\u003dr.region+\"-resize\"),i.select(document.body).style(\"cursor\",a)}function k(t){t.on(\"mousemove\",(function(t){i.event.preventDefault(),t.parent.inBrushDrag||T(this,t)})).on(\"mouseleave\",(function(t){t.parent.inBrushDrag||y()})).call(i.behavior.drag().on(\"dragstart\",(function(t){!function(t,e){i.event.sourceEvent.stopPropagation();var r\u003de.height-i.mouse(t)[1]-2*n.verticalPadding,a\u003de.unitToPaddedPx.invert(r),o\u003de.brush,s\u003d_(e,r),l\u003ds.interval,c\u003do.svgBrush;if(c.wasDragged\u003d!1,c.grabbingBar\u003d\"ns\"\u003d\u003d\u003ds.region,c.grabbingBar){var u\u003dl.map(e.unitToPaddedPx);c.grabPoint\u003dr-u[0]-n.verticalPadding,c.barLength\u003du[1]-u[0]}c.clickableOrdinalRange\u003ds.clickableOrdinalRange,c.stayingIntervals\u003de.multiselect\u0026\u0026o.filterSpecified?o.filter.getConsolidated():[],l\u0026\u0026(c.stayingIntervals\u003dc.stayingIntervals.filter((function(t){return t[0]!\u003d\u003dl[0]\u0026\u0026t[1]!\u003d\u003dl[1]}))),c.startExtent\u003ds.region?l[\"s\"\u003d\u003d\u003ds.region?1:0]:a,e.parent.inBrushDrag\u003d!0,c.brushStartCallback()}(this,t)})).on(\"drag\",(function(t){w(this,t)})).on(\"dragend\",(function(t){!function(t,e){var r\u003de.brush,n\u003dr.filter,a\u003dr.svgBrush;a._dragging||(T(t,e),w(t,e),e.brush.svgBrush.wasDragged\u003d!1),a._dragging\u003d!1,i.event.sourceEvent.stopPropagation();var o\u003da.grabbingBar;if(a.grabbingBar\u003d!1,a.grabLocation\u003dvoid 0,e.parent.inBrushDrag\u003d!1,y(),!a.wasDragged)return a.wasDragged\u003dvoid 0,a.clickableOrdinalRange?r.filterSpecified\u0026\u0026e.multiselect?a.extent.push(a.clickableOrdinalRange):(a.extent\u003d[a.clickableOrdinalRange],r.filterSpecified\u003d!0):o?(a.extent\u003da.stayingIntervals,0\u003d\u003d\u003da.extent.length\u0026\u0026A(r)):A(r),a.brushCallback(e),b(t.parentNode),void a.brushEndCallback(r.filterSpecified?n.getConsolidated():[]);var s\u003dfunction(){n.set(n.getConsolidated())};if(e.ordinal){var l\u003de.unitTickvals;l[l.length-1]\u003cl[0]\u0026\u0026l.reverse(),a.newExtent\u003d[p(0,l,a.newExtent[0],a.stayingIntervals),p(1,l,a.newExtent[1],a.stayingIntervals)];var c\u003da.newExtent[1]\u003ea.newExtent[0];a.extent\u003da.stayingIntervals.concat(c?[a.newExtent]:[]),a.extent.length||A(r),a.brushCallback(e),c?b(t.parentNode,s):(s(),b(t.parentNode))}else s();a.brushEndCallback(r.filterSpecified?n.getConsolidated():[])}(this,t)})))}function M(t,e){return t[0]-e[0]}function A(t){t.filterSpecified\u003d!1,t.svgBrush.extent\u003d[[-1/0,1/0]]}function S(t){for(var e,r\u003dt.slice(),n\u003d[],i\u003dr.shift();i;){for(e\u003di.slice();(i\u003dr.shift())\u0026\u0026i[0]\u003c\u003de[1];)e[1]\u003dMath.max(e[1],i[1]);n.push(e)}return 1\u003d\u003d\u003dn.length\u0026\u0026n[0][0]\u003en[0][1]\u0026\u0026(n\u003d[]),n}e.exports\u003d{makeBrush:function(t,e,r,n,i,a){var o,l\u003dfunction(){var t,e,r\u003d[];return{set:function(n){1\u003d\u003d\u003d(r\u003dn.map((function(t){return t.slice().sort(s)})).sort(M)).length\u0026\u0026r[0][0]\u003d\u003d\u003d-1/0\u0026\u0026r[0][1]\u003d\u003d\u003d1/0\u0026\u0026(r\u003d[[0,-1]]),t\u003dS(r),e\u003dr.reduce((function(t,e){return[Math.min(t[0],e[0]),Math.max(t[1],e[1])]}),[1/0,-1/0])},get:function(){return r.slice()},getConsolidated:function(){return t},getBounds:function(){return e}}}();return l.set(r),{filter:l,filterSpecified:e,svgBrush:{extent:[],brushStartCallback:n,brushCallback:(o\u003di,function(t){var e\u003dt.brush,r\u003dfunction(t){return t.svgBrush.extent.map((function(t){return t.slice()}))}(e).slice();e.filter.set(r),o()}),brushEndCallback:a}}},ensureAxisBrush:function(t,e){var r\u003dt.selectAll(\".\"+n.cn.axisBrush).data(o,a);r.enter().append(\"g\").classed(n.cn.axisBrush,!0),function(t,e){var r\u003dt.selectAll(\".background\").data(o);r.enter().append(\"rect\").classed(\"background\",!0).call(d).call(m).style(\"pointer-events\",\"auto\").attr(\"transform\",l(0,n.verticalPadding)),r.call(k).attr(\"height\",(function(t){return t.height-n.verticalPadding}));var i\u003dt.selectAll(\".highlight-shadow\").data(o);i.enter().append(\"line\").classed(\"highlight-shadow\",!0).attr(\"x\",-n.bar.width/2).attr(\"stroke-width\",n.bar.width+n.bar.strokeWidth).attr(\"stroke\",e).attr(\"opacity\",n.bar.strokeOpacity).attr(\"stroke-linecap\",\"butt\"),i.attr(\"y1\",(function(t){return t.height})).call(x);var a\u003dt.selectAll(\".highlight\").data(o);a.enter().append(\"line\").classed(\"highlight\",!0).attr(\"x\",-n.bar.width/2).attr(\"stroke-width\",n.bar.width-n.bar.strokeWidth).attr(\"stroke\",n.bar.fillColor).attr(\"opacity\",n.bar.fillOpacity).attr(\"stroke-linecap\",\"butt\"),a.attr(\"y1\",(function(t){return t.height})).call(x)}(r,e)},cleanRanges:function(t,e){if(Array.isArray(t[0])?(t\u003dt.map((function(t){return t.sort(s)})),t\u003de.multiselect?S(t.sort(M)):[t[0]]):t\u003d[t.sort(s)],e.tickvals){var r\u003de.tickvals.slice().sort(s);if(!(t\u003dt.map((function(t){var e\u003d[p(0,r,t[0],[]),p(1,r,t[1],[])];if(e[1]\u003ee[0])return e})).filter((function(t){return t}))).length)return}return t.length\u003e1?t:t[0]}}},{\"../../lib\":799,\"../../lib/gup\":796,\"./constants\":1180,\"@plotly/d3\":58}],1178:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../plots/get_data\").getModuleCalcData,a\u003dt(\"./plot\"),o\u003dt(\"../../constants/xmlns_namespaces\");r.name\u003d\"parcoords\",r.plot\u003dfunction(t){var e\u003di(t.calcdata,\"parcoords\")[0];e.length\u0026\u0026a(t,e)},r.clean\u003dfunction(t,e,r,n){var i\u003dn._has\u0026\u0026n._has(\"parcoords\"),a\u003de._has\u0026\u0026e._has(\"parcoords\");i\u0026\u0026!a\u0026\u0026(n._paperdiv.selectAll(\".parcoords\").remove(),n._glimages.selectAll(\"*\").remove())},r.toSVG\u003dfunction(t){var e\u003dt._fullLayout._glimages,r\u003dn.select(t).selectAll(\".svg-container\");r.filter((function(t,e){return e\u003d\u003d\u003dr.size()-1})).selectAll(\".gl-canvas-context, .gl-canvas-focus\").each((function(){var t\u003dthis.toDataURL(\"image/png\");e.append(\"svg:image\").attr({xmlns:o.svg,\"xlink:href\":t,preserveAspectRatio:\"none\",x:0,y:0,width:this.width,height:this.height})})),window.setTimeout((function(){n.selectAll(\"#filterBarPattern\").attr(\"id\",\"filterBarPattern\")}),60)}},{\"../../constants/xmlns_namespaces\":776,\"../../plots/get_data\":887,\"./plot\":1187,\"@plotly/d3\":58}],1179:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isArrayOrTypedArray,i\u003dt(\"../../components/colorscale\"),a\u003dt(\"../../lib/gup\").wrap;e.exports\u003dfunction(t,e){var r,o;return i.hasColorscale(e,\"line\")\u0026\u0026n(e.line.color)?(r\u003de.line.color,o\u003di.extractOpts(e.line).colorscale,i.calc(t,e,{vals:r,containerStr:\"line\",cLetter:\"c\"})):(r\u003dfunction(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;r++)e[r]\u003d.5;return e}(e._length),o\u003d[[0,e.line.color],[1,e.line.color]]),a({lineColor:r,cscale:o})}},{\"../../components/colorscale\":674,\"../../lib\":799,\"../../lib/gup\":796}],1180:[function(t,e,r){\"use strict\";e.exports\u003d{maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,layers:[\"contextLineLayer\",\"focusLineLayer\",\"pickLineLayer\"],axisTitleOffset:28,axisExtentOffset:10,deselectedLineColor:\"#777\",bar:{width:4,captureWidth:10,fillColor:\"magenta\",fillOpacity:1,snapDuration:150,snapRatio:.25,snapClose:.01,strokeOpacity:1,strokeWidth:1,handleHeight:8,handleOpacity:1,handleOverlap:0},cn:{axisExtentText:\"axis-extent-text\",parcoordsLineLayers:\"parcoords-line-layers\",parcoordsLineLayer:\"parcoords-lines\",parcoords:\"parcoords\",parcoordsControlView:\"parcoords-control-view\",yAxis:\"y-axis\",axisOverlays:\"axis-overlays\",axis:\"axis\",axisHeading:\"axis-heading\",axisTitle:\"axis-title\",axisExtent:\"axis-extent\",axisExtentTop:\"axis-extent-top\",axisExtentTopText:\"axis-extent-top-text\",axisExtentBottom:\"axis-extent-bottom\",axisExtentBottomText:\"axis-extent-bottom-text\",axisBrush:\"axis-brush\"},id:{filterBarPattern:\"filter-bar-pattern\"}}},{}],1181:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/helpers\").hasColorscale,a\u003dt(\"../../components/colorscale/defaults\"),o\u003dt(\"../../plots/domain\").defaults,s\u003dt(\"../../plots/array_container_defaults\"),l\u003dt(\"../../plots/cartesian/axes\"),c\u003dt(\"./attributes\"),u\u003dt(\"./axisbrush\"),f\u003dt(\"./constants\").maxDimensionCount,h\u003dt(\"./merge_length\");function p(t,e,r,i){function a(r,i){return n.coerce(t,e,c.dimensions,r,i)}var o\u003da(\"values\"),s\u003da(\"visible\");if(o\u0026\u0026o.length||(s\u003de.visible\u003d!1),s){a(\"label\"),a(\"tickvals\"),a(\"ticktext\"),a(\"tickformat\");var f\u003da(\"range\");e._ax\u003d{_id:\"y\",type:\"linear\",showexponent:\"all\",exponentformat:\"B\",range:f},l.setConvert(e._ax,i.layout),a(\"multiselect\");var h\u003da(\"constraintrange\");h\u0026\u0026(e.constraintrange\u003du.cleanRanges(h,e))}}e.exports\u003dfunction(t,e,r,l){function u(r,i){return n.coerce(t,e,c,r,i)}var d\u003dt.dimensions;Array.isArray(d)\u0026\u0026d.length\u003ef\u0026\u0026(n.log(\"parcoords traces support up to \"+f+\" dimensions at the moment\"),d.splice(f));var m\u003ds(t,e,{name:\"dimensions\",layout:l,handleItemDefaults:p}),g\u003dfunction(t,e,r,o,s){var l\u003ds(\"line.color\",r);if(i(t,\"line\")\u0026\u0026n.isArrayOrTypedArray(l)){if(l.length)return s(\"line.colorscale\"),a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}),l.length;e.line.color\u003dr}return 1/0}(t,e,r,l,u);o(e,l,u),Array.isArray(m)\u0026\u0026m.length||(e.visible\u003d!1),h(e,m,\"values\",g);var v\u003d{family:l.font.family,size:Math.round(l.font.size/1.2),color:l.font.color};n.coerceFont(u,\"labelfont\",v),n.coerceFont(u,\"tickfont\",v),n.coerceFont(u,\"rangefont\",v),u(\"labelangle\"),u(\"labelside\")}},{\"../../components/colorscale/defaults\":672,\"../../components/colorscale/helpers\":673,\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"../../plots/cartesian/axes\":849,\"../../plots/domain\":877,\"./attributes\":1176,\"./axisbrush\":1177,\"./constants\":1180,\"./merge_length\":1185}],1182:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isTypedArray;r.convertTypedArray\u003dfunction(t){return n(t)?Array.prototype.slice.call(t):t},r.isOrdinal\u003dfunction(t){return!!t.tickvals},r.isVisible\u003dfunction(t){return t.visible||!(\"visible\"in t)}},{\"../../lib\":799}],1183:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),colorbar:{container:\"line\",min:\"cmin\",max:\"cmax\"},moduleType:\"trace\",name:\"parcoords\",basePlotModule:t(\"./base_plot\"),categories:[\"gl\",\"regl\",\"noOpacity\",\"noHover\"],meta:{}}},{\"./attributes\":1176,\"./base_plot\":1178,\"./calc\":1179,\"./defaults\":1181,\"./plot\":1187}],1184:[function(t,e,r){\"use strict\";var n\u003dt(\"glslify\"),i\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nattribute vec4 p01_04, p05_08, p09_12, p13_16,\\n               p17_20, p21_24, p25_28, p29_32,\\n               p33_36, p37_40, p41_44, p45_48,\\n               p49_52, p53_56, p57_60, colors;\\n\\nuniform mat4 dim0A, dim1A, dim0B, dim1B, dim0C, dim1C, dim0D, dim1D,\\n             loA, hiA, loB, hiB, loC, hiC, loD, hiD;\\n\\nuniform vec2 resolution, viewBoxPos, viewBoxSize;\\nuniform sampler2D mask, palette;\\nuniform float maskHeight;\\nuniform float drwLayer; // 0: context, 1: focus, 2: pick\\nuniform vec4 contextColor;\\n\\nbool isPick    \u003d (drwLayer \u003e 1.5);\\nbool isContext \u003d (drwLayer \u003c 0.5);\\n\\nconst vec4 ZEROS \u003d vec4(0.0, 0.0, 0.0, 0.0);\\nconst vec4 UNITS \u003d vec4(1.0, 1.0, 1.0, 1.0);\\n\\nfloat val(mat4 p, mat4 v) {\\n    return dot(matrixCompMult(p, v) * UNITS, UNITS);\\n}\\n\\nfloat axisY(float ratio, mat4 A, mat4 B, mat4 C, mat4 D) {\\n    float y1 \u003d val(A, dim0A) + val(B, dim0B) + val(C, dim0C) + val(D, dim0D);\\n    float y2 \u003d val(A, dim1A) + val(B, dim1B) + val(C, dim1C) + val(D, dim1D);\\n    return y1 * (1.0 - ratio) + y2 * ratio;\\n}\\n\\nint iMod(int a, int b) {\\n    return a - b * (a / b);\\n}\\n\\nbool fOutside(float p, float lo, float hi) {\\n    return (lo \u003c hi) \u0026\u0026 (lo \u003e p || p \u003e hi);\\n}\\n\\nbool vOutside(vec4 p, vec4 lo, vec4 hi) {\\n    return (\\n        fOutside(p[0], lo[0], hi[0]) ||\\n        fOutside(p[1], lo[1], hi[1]) ||\\n        fOutside(p[2], lo[2], hi[2]) ||\\n        fOutside(p[3], lo[3], hi[3])\\n    );\\n}\\n\\nbool mOutside(mat4 p, mat4 lo, mat4 hi) {\\n    return (\\n        vOutside(p[0], lo[0], hi[0]) ||\\n        vOutside(p[1], lo[1], hi[1]) ||\\n        vOutside(p[2], lo[2], hi[2]) ||\\n        vOutside(p[3], lo[3], hi[3])\\n    );\\n}\\n\\nbool outsideBoundingBox(mat4 A, mat4 B, mat4 C, mat4 D) {\\n    return mOutside(A, loA, hiA) ||\\n           mOutside(B, loB, hiB) ||\\n           mOutside(C, loC, hiC) ||\\n           mOutside(D, loD, hiD);\\n}\\n\\nbool outsideRasterMask(mat4 A, mat4 B, mat4 C, mat4 D) {\\n    mat4 pnts[4];\\n    pnts[0] \u003d A;\\n    pnts[1] \u003d B;\\n    pnts[2] \u003d C;\\n    pnts[3] \u003d D;\\n\\n    for(int i \u003d 0; i \u003c 4; ++i) {\\n        for(int j \u003d 0; j \u003c 4; ++j) {\\n            for(int k \u003d 0; k \u003c 4; ++k) {\\n                if(0 \u003d\u003d iMod(\\n                    int(255.0 * texture2D(mask,\\n                        vec2(\\n                            (float(i * 2 + j / 2) + 0.5) / 8.0,\\n                            (pnts[i][j][k] * (maskHeight - 1.0) + 1.0) / maskHeight\\n                        ))[3]\\n                    ) / int(pow(2.0, float(iMod(j * 4 + k, 8)))),\\n                    2\\n                )) return true;\\n            }\\n        }\\n    }\\n    return false;\\n}\\n\\nvec4 position(bool isContext, float v, mat4 A, mat4 B, mat4 C, mat4 D) {\\n    float x \u003d 0.5 * sign(v) + 0.5;\\n    float y \u003d axisY(x, A, B, C, D);\\n    float z \u003d 1.0 - abs(v);\\n\\n    z +\u003d isContext ? 0.0 : 2.0 * float(\\n        outsideBoundingBox(A, B, C, D) ||\\n        outsideRasterMask(A, B, C, D)\\n    );\\n\\n    return vec4(\\n        2.0 * (vec2(x, y) * viewBoxSize + viewBoxPos) / resolution - 1.0,\\n        z,\\n        1.0\\n    );\\n}\\n\\nvoid main() {\\n    mat4 A \u003d mat4(p01_04, p05_08, p09_12, p13_16);\\n    mat4 B \u003d mat4(p17_20, p21_24, p25_28, p29_32);\\n    mat4 C \u003d mat4(p33_36, p37_40, p41_44, p45_48);\\n    mat4 D \u003d mat4(p49_52, p53_56, p57_60, ZEROS);\\n\\n    float v \u003d colors[3];\\n\\n    gl_Position \u003d position(isContext, v, A, B, C, D);\\n\\n    fragColor \u003d\\n        isContext ? vec4(contextColor) :\\n        isPick ? vec4(colors.rgb, 1.0) : texture2D(palette, vec2(abs(v), 0.5));\\n}\\n\"]),a\u003dn([\"precision highp float;\\n#define GLSLIFY 1\\n\\nvarying vec4 fragColor;\\n\\nvoid main() {\\n    gl_FragColor \u003d fragColor;\\n}\\n\"]),o\u003dt(\"./constants\").maxDimensionCount,s\u003dt(\"../../lib\"),l\u003dnew Uint8Array(4),c\u003dnew Uint8Array(4),u\u003d{shape:[256,1],format:\"rgba\",type:\"uint8\",mag:\"nearest\",min:\"nearest\"};function f(t,e,r,n,i){var a\u003dt._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,r,n,i),t.clear({color:[0,0,0,0],depth:1})}function h(t,e,r,n,i,a){var o\u003da.key;r.drawCompleted||(!function(t){t.read({x:0,y:0,width:1,height:1,data:l})}(t),r.drawCompleted\u003d!0),function s(l){var c\u003dMath.min(n,i-l*n);0\u003d\u003d\u003dl\u0026\u0026(window.cancelAnimationFrame(r.currentRafs[o]),delete r.currentRafs[o],f(t,a.scissorX,a.scissorY,a.scissorWidth,a.viewBoxSize[1])),r.clearOnly||(a.count\u003d2*c,a.offset\u003d2*l*n,e(a),l*n+c\u003ci\u0026\u0026(r.currentRafs[o]\u003dwindow.requestAnimationFrame((function(){s(l+1)}))),r.drawCompleted\u003d!1)}(0)}function p(t,e){for(var r\u003dnew Array(256),n\u003d0;n\u003c256;n++)r[n]\u003dt(n/255).concat(e);return r}function d(t,e){return(t\u003e\u003e\u003e8*e)%256/255}function m(t,e,r){for(var n\u003dnew Array(8*e),i\u003d0,a\u003d0;a\u003ce;a++)for(var o\u003d0;o\u003c2;o++)for(var s\u003d0;s\u003c4;s++){var l\u003d4*t+s,c\u003dr[64*a+l];63\u003d\u003d\u003dl\u0026\u00260\u003d\u003d\u003do\u0026\u0026(c*\u003d-1),n[i++]\u003dc}return n}function g(t){var e\u003d\"0\"+t;return e.substr(e.length-2)}function v(t){return t\u003co?\"p\"+g(t+1)+\"_\"+g(t+4):\"colors\"}function y(t,e,r,n,i,a,o,l,c,u,f,h,p){for(var d\u003d[[],[]],m\u003d0;m\u003c64;m++)d[0][m]\u003dm\u003d\u003d\u003di?1:0,d[1][m]\u003dm\u003d\u003d\u003da?1:0;var g\u003dt.lines.canvasOverdrag,v\u003dt.domain,y\u003dt.canvasWidth,x\u003dt.canvasHeight,b\u003dt.deselectedLines.color;return s.extendFlat({key:f,resolution:[y,x],viewBoxPos:[o+g,l],viewBoxSize:[c,u],i0:i,i1:a,dim0A:d[0].slice(0,16),dim0B:d[0].slice(16,32),dim0C:d[0].slice(32,48),dim0D:d[0].slice(48,64),dim1A:d[1].slice(0,16),dim1B:d[1].slice(16,32),dim1C:d[1].slice(32,48),dim1D:d[1].slice(48,64),drwLayer:h,contextColor:[b[0]/255,b[1]/255,b[2]/255,b[3]\u003c1?b[3]:Math.max(1/255,Math.pow(1/t.lines.color.length,1/3))],scissorX:(n\u003d\u003d\u003de?0:o+g)+(t.pad.l-g)+t.layoutWidth*v.x[0],scissorWidth:(n\u003d\u003d\u003dr?y-o+g:c+.5)+(n\u003d\u003d\u003de?o+g:0),scissorY:l+t.pad.b+t.layoutHeight*v.y[0],scissorHeight:u,viewportX:t.pad.l-g+t.layoutWidth*v.x[0],viewportY:t.pad.b+t.layoutHeight*v.y[0],viewportWidth:y,viewportHeight:x},p)}function x(t){var e\u003dMath.max(0,Math.floor(2047*t[0]),0),r\u003dMath.min(2047,Math.ceil(2047*t[1]),2047);return[Math.min(e,r),Math.max(e,r)]}e.exports\u003dfunction(t,e){var r,n,l,g,b,_\u003de.context,w\u003de.pick,T\u003de.regl,k\u003d{currentRafs:{},drawCompleted:!0,clearOnly:!1},M\u003dfunction(t){for(var e\u003d{},r\u003d0;r\u003c\u003do;r+\u003d4)e[v(r)]\u003dt.buffer({usage:\"dynamic\",type:\"float\",data:new Uint8Array(0)});return e}(T),A\u003dT.texture(u),S\u003d[];L(e);var E\u003dT({profile:!1,blend:{enable:_,func:{srcRGB:\"src alpha\",dstRGB:\"one minus src alpha\",srcAlpha:1,dstAlpha:1},equation:{rgb:\"add\",alpha:\"add\"},color:[0,0,0,0]},depth:{enable:!_,mask:!0,func:\"less\",range:[0,1]},cull:{enable:!0,face:\"back\"},scissor:{enable:!0,box:{x:T.prop(\"scissorX\"),y:T.prop(\"scissorY\"),width:T.prop(\"scissorWidth\"),height:T.prop(\"scissorHeight\")}},viewport:{x:T.prop(\"viewportX\"),y:T.prop(\"viewportY\"),width:T.prop(\"viewportWidth\"),height:T.prop(\"viewportHeight\")},dither:!1,vert:i,frag:a,primitive:\"lines\",lineWidth:1,attributes:M,uniforms:{resolution:T.prop(\"resolution\"),viewBoxPos:T.prop(\"viewBoxPos\"),viewBoxSize:T.prop(\"viewBoxSize\"),dim0A:T.prop(\"dim0A\"),dim1A:T.prop(\"dim1A\"),dim0B:T.prop(\"dim0B\"),dim1B:T.prop(\"dim1B\"),dim0C:T.prop(\"dim0C\"),dim1C:T.prop(\"dim1C\"),dim0D:T.prop(\"dim0D\"),dim1D:T.prop(\"dim1D\"),loA:T.prop(\"loA\"),hiA:T.prop(\"hiA\"),loB:T.prop(\"loB\"),hiB:T.prop(\"hiB\"),loC:T.prop(\"loC\"),hiC:T.prop(\"hiC\"),loD:T.prop(\"loD\"),hiD:T.prop(\"hiD\"),palette:A,contextColor:T.prop(\"contextColor\"),mask:T.prop(\"maskTexture\"),drwLayer:T.prop(\"drwLayer\"),maskHeight:T.prop(\"maskHeight\")},offset:T.prop(\"offset\"),count:T.prop(\"count\")});function L(t){r\u003dt.model,n\u003dt.viewModel,l\u003dn.dimensions.slice(),g\u003dl[0]?l[0].values.length:0;var e\u003dr.lines,i\u003dw?e.color.map((function(t,r){return r/e.color.length})):e.color,a\u003dfunction(t,e,r){for(var n,i\u003dnew Array(t*(o+4)),a\u003d0,s\u003d0;s\u003ct;s++){for(var l\u003d0;l\u003co;l++)i[a++]\u003dl\u003ce.length?e[l].paddedUnitValues[s]:.5;i[a++]\u003dd(s,2),i[a++]\u003dd(s,1),i[a++]\u003dd(s,0),i[a++]\u003d(n\u003dr[s],Math.max(1e-6,Math.min(.999999,n)))}return i}(g,l,i);!function(t,e,r){for(var n\u003d0;n\u003c\u003do;n+\u003d4)t[v(n)](m(n/4,e,r))}(M,g,a),_||w||(A\u003dT.texture(s.extendFlat({data:p(r.unitToColor,255)},u)))}return{render:function(t,e,n){var i,a,o,s\u003dt.length,c\u003d1/0,u\u003d-1/0;for(i\u003d0;i\u003cs;i++)t[i].dim0.canvasX\u003cc\u0026\u0026(c\u003dt[i].dim0.canvasX,a\u003di),t[i].dim1.canvasX\u003eu\u0026\u0026(u\u003dt[i].dim1.canvasX,o\u003di);0\u003d\u003d\u003ds\u0026\u0026f(T,0,0,r.canvasWidth,r.canvasHeight);var p\u003dfunction(t){var e,r,n,i\u003d[[],[]];for(n\u003d0;n\u003c64;n++){var a\u003d!t\u0026\u0026n\u003cl.length?l[n].brush.filter.getBounds():[-1/0,1/0];i[0][n]\u003da[0],i[1][n]\u003da[1]}var o\u003dnew Array(16384);for(e\u003d0;e\u003c16384;e++)o[e]\u003d255;if(!t)for(e\u003d0;e\u003cl.length;e++){var s\u003de%8,c\u003d(e-s)/8,u\u003dMath.pow(2,s),f\u003dl[e].brush.filter.get();if(!(f.length\u003c2)){var h\u003dx(f[0])[1];for(r\u003d1;r\u003cf.length;r++){var p\u003dx(f[r]);for(n\u003dh+1;n\u003cp[0];n++)o[8*n+c]\u0026\u003d~u;h\u003dMath.max(h,p[1])}}}var d\u003d{shape:[8,2048],format:\"alpha\",type:\"uint8\",mag:\"nearest\",min:\"nearest\",data:o};return b?b(d):b\u003dT.texture(d),{maskTexture:b,maskHeight:2048,loA:i[0].slice(0,16),loB:i[0].slice(16,32),loC:i[0].slice(32,48),loD:i[0].slice(48,64),hiA:i[1].slice(0,16),hiB:i[1].slice(16,32),hiC:i[1].slice(32,48),hiD:i[1].slice(48,64)}}(_);for(i\u003d0;i\u003cs;i++){var d\u003dt[i],m\u003dd.dim0.crossfilterDimensionIndex,v\u003dd.dim1.crossfilterDimensionIndex,M\u003dd.canvasX,A\u003dd.canvasY,L\u003dM+d.panelSizeX;if(e||!S[m]||S[m][0]!\u003d\u003dM||S[m][1]!\u003d\u003dL){S[m]\u003d[M,L];var C\u003dy(r,a,o,i,m,v,M,A,d.panelSizeX,d.panelSizeY,d.dim0.crossfilterDimensionIndex,_?0:w?2:1,p);k.clearOnly\u003dn;var P\u003de?r.lines.blockLineCount:g;h(T,E,k,P,g,C)}}},readPixel:function(t,e){return T.read({x:t,y:e,width:1,height:1,data:c}),c},readPixels:function(t,e,r,n){var i\u003dnew Uint8Array(4*r*n);return T.read({x:t,y:e,width:r,height:n,data:i}),i},destroy:function(){for(var e in t.style[\"pointer-events\"]\u003d\"none\",A.destroy(),b\u0026\u0026b.destroy(),M)M[e].destroy()},update:L}}},{\"../../lib\":799,\"./constants\":1180,glslify:438}],1185:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n){var i,a;for(n||(n\u003d1/0),i\u003d0;i\u003ce.length;i++)(a\u003de[i]).visible\u0026\u0026(n\u003dMath.min(n,a[r].length));for(n\u003d\u003d\u003d1/0\u0026\u0026(n\u003d0),t._length\u003dn,i\u003d0;i\u003ce.length;i++)(a\u003de[i]).visible\u0026\u0026(a._length\u003dn);return n}},{}],1186:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"color-rgba\"),a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../../lib\"),s\u003do.strRotate,l\u003do.strTranslate,c\u003dt(\"../../lib/svg_text_utils\"),u\u003dt(\"../../components/drawing\"),f\u003dt(\"../../components/colorscale\"),h\u003dt(\"../../lib/gup\"),p\u003dh.keyFun,d\u003dh.repeat,m\u003dh.unwrap,g\u003dt(\"./helpers\"),v\u003dt(\"./constants\"),y\u003dt(\"./axisbrush\"),x\u003dt(\"./lines\");function b(t,e,r){return o.aggNums(t,null,e,r)}function _(t,e){return T(b(Math.min,t,e),b(Math.max,t,e))}function w(t){var e\u003dt.range;return e?T(e[0],e[1]):_(t.values,t._length)}function T(t,e){return!isNaN(t)\u0026\u0026isFinite(t)||(t\u003d0),!isNaN(e)\u0026\u0026isFinite(e)||(e\u003d0),t\u003d\u003d\u003de\u0026\u0026(0\u003d\u003d\u003dt?(t-\u003d1,e+\u003d1):(t*\u003d.9,e*\u003d1.1)),[t,e]}function k(t,e,r,i,a){var o,s,l\u003dw(r);return i?n.scale.ordinal().domain(i.map((o\u003dn.format(r.tickformat),s\u003da,s?function(t,e){var r\u003ds[e];return null\u003d\u003dr?o(t):r}:o))).range(i.map((function(r){var n\u003d(r-l[0])/(l[1]-l[0]);return t-e+n*(2*e-t)}))):n.scale.linear().domain(l).range([t-e,e])}function M(t){if(t.tickvals){var e\u003dw(t);return n.scale.ordinal().domain(t.tickvals).range(t.tickvals.map((function(t){return(t-e[0])/(e[1]-e[0])})))}}function A(t){var e\u003dt.map((function(t){return t[0]})),r\u003dt.map((function(t){var e\u003di(t[1]);return n.rgb(\"rgb(\"+e[0]+\",\"+e[1]+\",\"+e[2]+\")\")})),a\u003d\"rgb\".split(\"\").map((function(t){return n.scale.linear().clamp(!0).domain(e).range(r.map((i\u003dt,function(t){return t[i]})));var i}));return function(t){return a.map((function(e){return e(t)}))}}function S(t){return t.dimensions.some((function(t){return t.brush.filterSpecified}))}function E(t,e,r){var a\u003dm(e),s\u003da.trace,l\u003dg.convertTypedArray(a.lineColor),c\u003ds.line,u\u003d{color:i(v.deselectedLineColor)},h\u003df.extractOpts(c),p\u003dh.reversescale?f.flipScale(a.cscale):a.cscale,d\u003ds.domain,y\u003ds.dimensions,x\u003dt.width,b\u003ds.labelangle,_\u003ds.labelside,T\u003ds.labelfont,k\u003ds.tickfont,M\u003ds.rangefont,S\u003do.extendDeepNoArrays({},c,{color:l.map(n.scale.linear().domain(w({values:l,range:[h.min,h.max],_length:s._length}))),blockLineCount:v.blockLineCount,canvasOverdrag:v.overdrag*v.canvasPixelRatio}),E\u003dMath.floor(x*(d.x[1]-d.x[0])),L\u003dMath.floor(t.height*(d.y[1]-d.y[0])),C\u003dt.margin||{l:80,r:80,t:100,b:80},P\u003dE,I\u003dL;return{key:r,colCount:y.filter(g.isVisible).length,dimensions:y,tickDistance:v.tickDistance,unitToColor:A(p),lines:S,deselectedLines:u,labelAngle:b,labelSide:_,labelFont:T,tickFont:k,rangeFont:M,layoutWidth:x,layoutHeight:t.height,domain:d,translateX:d.x[0]*x,translateY:t.height-d.y[1]*t.height,pad:C,canvasWidth:P*v.canvasPixelRatio+2*S.canvasOverdrag,canvasHeight:I*v.canvasPixelRatio,width:P,height:I,canvasPixelRatio:v.canvasPixelRatio}}function L(t,e,r){var i\u003dr.width,a\u003dr.height,s\u003dr.dimensions,l\u003dr.canvasPixelRatio,c\u003dfunction(t){return i*t/Math.max(1,r.colCount-1)},u\u003dv.verticalPadding/a,f\u003dfunction(t,e){return n.scale.linear().range([e,t-e])}(a,v.verticalPadding),h\u003d{key:r.key,xScale:c,model:r,inBrushDrag:!1},p\u003d{};return h.dimensions\u003ds.filter(g.isVisible).map((function(i,s){var d\u003dfunction(t,e){return n.scale.linear().domain(w(t)).range([e,1-e])}(i,u),m\u003dp[i.label];p[i.label]\u003d(m||0)+1;var x\u003di.label+(m?\"__\"+m:\"\"),b\u003di.constraintrange,_\u003db\u0026\u0026b.length;_\u0026\u0026!Array.isArray(b[0])\u0026\u0026(b\u003d[b]);var T\u003d_?b.map((function(t){return t.map(d)})):[[-1/0,1/0]],A\u003di.values;A.length\u003ei._length\u0026\u0026(A\u003dA.slice(0,i._length));var E,L\u003di.tickvals;function C(t,e){return{val:t,text:E[e]}}function P(t,e){return t.val-e.val}if(Array.isArray(L)\u0026\u0026L.length){E\u003di.ticktext,Array.isArray(E)\u0026\u0026E.length?E.length\u003eL.length?E\u003dE.slice(0,L.length):L.length\u003eE.length\u0026\u0026(L\u003dL.slice(0,E.length)):E\u003dL.map(n.format(i.tickformat));for(var I\u003d1;I\u003cL.length;I++)if(L[I]\u003cL[I-1]){for(var O\u003dL.map(C).sort(P),z\u003d0;z\u003cL.length;z++)L[z]\u003dO[z].val,E[z]\u003dO[z].text;break}}else L\u003dvoid 0;return A\u003dg.convertTypedArray(A),{key:x,label:i.label,tickFormat:i.tickformat,tickvals:L,ticktext:E,ordinal:g.isOrdinal(i),multiselect:i.multiselect,xIndex:s,crossfilterDimensionIndex:s,visibleIndex:i._index,height:a,values:A,paddedUnitValues:A.map(d),unitTickvals:L\u0026\u0026L.map(d),xScale:c,x:c(s),canvasX:c(s)*l,unitToPaddedPx:f,domainScale:k(a,v.verticalPadding,i,L,E),ordinalScale:M(i),parent:h,model:r,brush:y.makeBrush(t,_,T,(function(){t.linePickActive(!1)}),(function(){var e\u003dh;e.focusLayer\u0026\u0026e.focusLayer.render(e.panels,!0);var r\u003dS(e);!t.contextShown()\u0026\u0026r?(e.contextLayer\u0026\u0026e.contextLayer.render(e.panels,!0),t.contextShown(!0)):t.contextShown()\u0026\u0026!r\u0026\u0026(e.contextLayer\u0026\u0026e.contextLayer.render(e.panels,!0,!0),t.contextShown(!1))}),(function(r){if(h.focusLayer.render(h.panels,!0),h.pickLayer\u0026\u0026h.pickLayer.render(h.panels,!0),t.linePickActive(!0),e\u0026\u0026e.filterChanged){var n\u003dd.invert,a\u003dr.map((function(t){return t.map(n).sort(o.sorterAsc)})).sort((function(t,e){return t[0]-e[0]}));e.filterChanged(h.key,i._index,a)}}))}})),h}function C(t){t.classed(v.cn.axisExtentText,!0).attr(\"text-anchor\",\"middle\").style(\"cursor\",\"default\")}function P(t,e){var r\u003d\"top\"\u003d\u003d\u003de?1:-1,n\u003dt*Math.PI/180;return{dir:r,dx:Math.sin(n),dy:Math.cos(n),degrees:t}}function I(t,e){for(var r\u003de.panels||(e.panels\u003d[]),n\u003dt.data(),i\u003d0;i\u003cn.length-1;i++){var a\u003dr[i]||(r[i]\u003d{}),o\u003dn[i],s\u003dn[i+1];a.dim0\u003do,a.dim1\u003ds,a.canvasX\u003do.canvasX,a.panelSizeX\u003ds.canvasX-o.canvasX,a.panelSizeY\u003de.model.canvasHeight,a.y\u003d0,a.canvasY\u003d0}}function O(t,e){return a.tickText(t._ax,e,!1).text}function z(t,e){if(t.ordinal)return\"\";var r\u003dt.domainScale.domain(),n\u003dr[e?r.length-1:0];return O(t.model.dimensions[t.visibleIndex],n)}e.exports\u003dfunction(t,e,r,i){var f\u003dt._fullLayout,h\u003df._toppaper,b\u003df._glcontainer,w\u003dt._fullLayout.paper_bgcolor;!function(t){for(var e\u003d0;e\u003ct.length;e++)for(var r\u003d0;r\u003ct[e].length;r++)for(var n\u003dt[e][r].trace,i\u003dn.dimensions,o\u003d0;o\u003ci.length;o++){var s\u003di[o].values,l\u003di[o]._ax;l\u0026\u0026(l.range?l.range\u003dT(l.range[0],l.range[1]):l.range\u003d_(s,n._length),l.dtick||(l.dtick\u003d.01*(Math.abs(l.range[1]-l.range[0])||1)),l.tickformat\u003di[o].tickformat,a.calcTicks(l),l.cleanRange())}}(e);var k,M,A\u003d(k\u003d!0,M\u003d!1,{linePickActive:function(t){return arguments.length?k\u003d!!t:k},contextShown:function(t){return arguments.length?M\u003d!!t:M}}),D\u003de.filter((function(t){return m(t).trace.visible})).map(E.bind(0,r)).map(L.bind(0,A,i));b.each((function(t,e){return o.extendFlat(t,D[e])}));var R\u003db.selectAll(\".gl-canvas\").each((function(t){t.viewModel\u003dD[0],t.viewModel.paperColor\u003dw,t.model\u003dt.viewModel?t.viewModel.model:null})),F\u003dnull;R.filter((function(t){return t.pick})).style(\"pointer-events\",\"auto\").on(\"mousemove\",(function(t){if(A.linePickActive()\u0026\u0026t.lineLayer\u0026\u0026i\u0026\u0026i.hover){var e\u003dn.event,r\u003dthis.width,a\u003dthis.height,o\u003dn.mouse(this),s\u003do[0],l\u003do[1];if(s\u003c0||l\u003c0||s\u003e\u003dr||l\u003e\u003da)return;var c\u003dt.lineLayer.readPixel(s,a-1-l),u\u003d0!\u003d\u003dc[3],f\u003du?c[2]+256*(c[1]+256*c[0]):null,h\u003d{x:s,y:l,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:f};f!\u003d\u003dF\u0026\u0026(u?i.hover(h):i.unhover\u0026\u0026i.unhover(h),F\u003df)}})),R.style(\"opacity\",(function(t){return t.pick?0:1})),h.style(\"background\",\"rgba(255, 255, 255, 0)\");var B\u003dh.selectAll(\".\"+v.cn.parcoords).data(D,p);B.exit().remove(),B.enter().append(\"g\").classed(v.cn.parcoords,!0).style(\"shape-rendering\",\"crispEdges\").style(\"pointer-events\",\"none\"),B.attr(\"transform\",(function(t){return l(t.model.translateX,t.model.translateY)}));var N\u003dB.selectAll(\".\"+v.cn.parcoordsControlView).data(d,p);N.enter().append(\"g\").classed(v.cn.parcoordsControlView,!0),N.attr(\"transform\",(function(t){return l(t.model.pad.l,t.model.pad.t)}));var j\u003dN.selectAll(\".\"+v.cn.yAxis).data((function(t){return t.dimensions}),p);j.enter().append(\"g\").classed(v.cn.yAxis,!0),N.each((function(t){I(j,t)})),R.each((function(t){if(t.viewModel){!t.lineLayer||i?t.lineLayer\u003dx(this,t):t.lineLayer.update(t),(t.key||0\u003d\u003d\u003dt.key)\u0026\u0026(t.viewModel[t.key]\u003dt.lineLayer);var e\u003d!t.context||i;t.lineLayer.render(t.viewModel.panels,e)}})),j.attr(\"transform\",(function(t){return l(t.xScale(t.xIndex),0)})),j.call(n.behavior.drag().origin((function(t){return t})).on(\"drag\",(function(t){var e\u003dt.parent;A.linePickActive(!1),t.x\u003dMath.max(-v.overdrag,Math.min(t.model.width+v.overdrag,n.event.x)),t.canvasX\u003dt.x*t.model.canvasPixelRatio,j.sort((function(t,e){return t.x-e.x})).each((function(e,r){e.xIndex\u003dr,e.x\u003dt\u003d\u003d\u003de?e.x:e.xScale(e.xIndex),e.canvasX\u003de.x*e.model.canvasPixelRatio})),I(j,e),j.filter((function(e){return 0!\u003d\u003dMath.abs(t.xIndex-e.xIndex)})).attr(\"transform\",(function(t){return l(t.xScale(t.xIndex),0)})),n.select(this).attr(\"transform\",l(t.x,0)),j.each((function(r,n,i){i\u003d\u003d\u003dt.parent.key\u0026\u0026(e.dimensions[n]\u003dr)})),e.contextLayer\u0026\u0026e.contextLayer.render(e.panels,!1,!S(e)),e.focusLayer.render\u0026\u0026e.focusLayer.render(e.panels)})).on(\"dragend\",(function(t){var e\u003dt.parent;t.x\u003dt.xScale(t.xIndex),t.canvasX\u003dt.x*t.model.canvasPixelRatio,I(j,e),n.select(this).attr(\"transform\",(function(t){return l(t.x,0)})),e.contextLayer\u0026\u0026e.contextLayer.render(e.panels,!1,!S(e)),e.focusLayer\u0026\u0026e.focusLayer.render(e.panels),e.pickLayer\u0026\u0026e.pickLayer.render(e.panels,!0),A.linePickActive(!0),i\u0026\u0026i.axesMoved\u0026\u0026i.axesMoved(e.key,e.dimensions.map((function(t){return t.crossfilterDimensionIndex})))}))),j.exit().remove();var U\u003dj.selectAll(\".\"+v.cn.axisOverlays).data(d,p);U.enter().append(\"g\").classed(v.cn.axisOverlays,!0),U.selectAll(\".\"+v.cn.axis).remove();var V\u003dU.selectAll(\".\"+v.cn.axis).data(d,p);V.enter().append(\"g\").classed(v.cn.axis,!0),V.each((function(t){var e\u003dt.model.height/t.model.tickDistance,r\u003dt.domainScale,i\u003dr.domain();n.select(this).call(n.svg.axis().orient(\"left\").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?i:null).tickFormat((function(e){return g.isOrdinal(t)?e:O(t.model.dimensions[t.visibleIndex],e)})).scale(r)),u.font(V.selectAll(\"text\"),t.model.tickFont)})),V.selectAll(\".domain, .tick\u003eline\").attr(\"fill\",\"none\").attr(\"stroke\",\"black\").attr(\"stroke-opacity\",.25).attr(\"stroke-width\",\"1px\"),V.selectAll(\"text\").style(\"text-shadow\",c.makeTextShadow(w)).style(\"cursor\",\"default\");var q\u003dU.selectAll(\".\"+v.cn.axisHeading).data(d,p);q.enter().append(\"g\").classed(v.cn.axisHeading,!0);var H\u003dq.selectAll(\".\"+v.cn.axisTitle).data(d,p);H.enter().append(\"text\").classed(v.cn.axisTitle,!0).attr(\"text-anchor\",\"middle\").style(\"cursor\",\"ew-resize\").style(\"pointer-events\",\"auto\"),H.text((function(t){return t.label})).each((function(e){var r\u003dn.select(this);u.font(r,e.model.labelFont),c.convertToTspans(r,t)})).attr(\"transform\",(function(t){var e\u003dP(t.model.labelAngle,t.model.labelSide),r\u003dv.axisTitleOffset;return(e.dir\u003e0?\"\":l(0,2*r+t.model.height))+s(e.degrees)+l(-r*e.dx,-r*e.dy)})).attr(\"text-anchor\",(function(t){var e\u003dP(t.model.labelAngle,t.model.labelSide);return 2*Math.abs(e.dx)\u003eMath.abs(e.dy)?e.dir*e.dx\u003c0?\"start\":\"end\":\"middle\"}));var G\u003dU.selectAll(\".\"+v.cn.axisExtent).data(d,p);G.enter().append(\"g\").classed(v.cn.axisExtent,!0);var Y\u003dG.selectAll(\".\"+v.cn.axisExtentTop).data(d,p);Y.enter().append(\"g\").classed(v.cn.axisExtentTop,!0),Y.attr(\"transform\",l(0,-v.axisExtentOffset));var W\u003dY.selectAll(\".\"+v.cn.axisExtentTopText).data(d,p);W.enter().append(\"text\").classed(v.cn.axisExtentTopText,!0).call(C),W.text((function(t){return z(t,!0)})).each((function(t){u.font(n.select(this),t.model.rangeFont)}));var X\u003dG.selectAll(\".\"+v.cn.axisExtentBottom).data(d,p);X.enter().append(\"g\").classed(v.cn.axisExtentBottom,!0),X.attr(\"transform\",(function(t){return l(0,t.model.height+v.axisExtentOffset)}));var Z\u003dX.selectAll(\".\"+v.cn.axisExtentBottomText).data(d,p);Z.enter().append(\"text\").classed(v.cn.axisExtentBottomText,!0).attr(\"dy\",\"0.75em\").call(C),Z.text((function(t){return z(t,!1)})).each((function(t){u.font(n.select(this),t.model.rangeFont)})),y.ensureAxisBrush(U,w)}},{\"../../components/colorscale\":674,\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/gup\":796,\"../../lib/svg_text_utils\":824,\"../../plots/cartesian/axes\":849,\"./axisbrush\":1177,\"./constants\":1180,\"./helpers\":1182,\"./lines\":1184,\"@plotly/d3\":58,\"color-rgba\":133}],1187:[function(t,e,r){\"use strict\";var n\u003dt(\"./parcoords\"),i\u003dt(\"../../lib/prepare_regl\"),a\u003dt(\"./helpers\").isVisible;function o(t,e,r){var n\u003de.indexOf(r),i\u003dt.indexOf(n);return-1\u003d\u003d\u003di\u0026\u0026(i+\u003de.length),i}e.exports\u003dfunction(t,e){var r\u003dt._fullLayout;if(i(t)){var s\u003d{},l\u003d{},c\u003d{},u\u003d{},f\u003dr._size;e.forEach((function(e,r){var n\u003de[0].trace;c[r]\u003dn.index;var i\u003du[r]\u003dn._fullInput.index;s[r]\u003dt.data[i].dimensions,l[r]\u003dt.data[i].dimensions.slice()}));n(t,e,{width:f.w,height:f.h,margin:{t:f.t,r:f.r,b:f.b,l:f.l}},{filterChanged:function(e,n,i){var a\u003dl[e][n],o\u003di.map((function(t){return t.slice()})),s\u003d\"dimensions[\"+n+\"].constraintrange\",f\u003dr._tracePreGUI[t._fullData[c[e]]._fullInput.uid];if(void 0\u003d\u003d\u003df[s]){var h\u003da.constraintrange;f[s]\u003dh||null}var p\u003dt._fullData[c[e]].dimensions[n];o.length?(1\u003d\u003d\u003do.length\u0026\u0026(o\u003do[0]),a.constraintrange\u003do,p.constraintrange\u003do.slice(),o\u003d[o]):(delete a.constraintrange,delete p.constraintrange,o\u003dnull);var d\u003d{};d[s]\u003do,t.emit(\"plotly_restyle\",[d,[u[e]]])},hover:function(e){t.emit(\"plotly_hover\",e)},unhover:function(e){t.emit(\"plotly_unhover\",e)},axesMoved:function(e,r){var n\u003dfunction(t,e){return function(r,n){return o(t,e,r)-o(t,e,n)}}(r,l[e].filter(a));s[e].sort(n),l[e].filter((function(t){return!a(t)})).sort((function(t){return l[e].indexOf(t)})).forEach((function(t){s[e].splice(s[e].indexOf(t),1),s[e].splice(l[e].indexOf(t),0,t)})),t.emit(\"plotly_restyle\",[{dimensions:[s[e]]},[u[e]]])}})}}},{\"../../lib/prepare_regl\":812,\"./helpers\":1182,\"./parcoords\":1186}],1188:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/attributes\"),i\u003dt(\"../../plots/domain\").attributes,a\u003dt(\"../../plots/font_attributes\"),o\u003dt(\"../../components/color/attributes\"),s\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,l\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,c\u003dt(\"../../lib/extend\").extendFlat,u\u003da({editType:\"plot\",arrayOk:!0,colorEditType:\"plot\"});e.exports\u003d{labels:{valType:\"data_array\",editType:\"calc\"},label0:{valType:\"number\",dflt:0,editType:\"calc\"},dlabel:{valType:\"number\",dflt:1,editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc\"},marker:{colors:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:o.defaultLine,arrayOk:!0,editType:\"style\"},width:{valType:\"number\",min:0,dflt:0,arrayOk:!0,editType:\"style\"},editType:\"calc\"},editType:\"calc\"},text:{valType:\"data_array\",editType:\"plot\"},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"value\",\"percent\"],extras:[\"none\"],editType:\"calc\"},hoverinfo:c({},n.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"percent\",\"name\"]}),hovertemplate:s({},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),texttemplate:l({editType:\"plot\"},{keys:[\"label\",\"color\",\"value\",\"percent\",\"text\"]}),textposition:{valType:\"enumerated\",values:[\"inside\",\"outside\",\"auto\",\"none\"],dflt:\"auto\",arrayOk:!0,editType:\"plot\"},textfont:c({},u,{}),insidetextorientation:{valType:\"enumerated\",values:[\"horizontal\",\"radial\",\"tangential\",\"auto\"],dflt:\"auto\",editType:\"plot\"},insidetextfont:c({},u,{}),outsidetextfont:c({},u,{}),automargin:{valType:\"boolean\",dflt:!1,editType:\"plot\"},title:{text:{valType:\"string\",dflt:\"\",editType:\"plot\"},font:c({},u,{}),position:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle center\",\"bottom left\",\"bottom center\",\"bottom right\"],editType:\"plot\"},editType:\"plot\"},domain:i({name:\"pie\",trace:!0,editType:\"calc\"}),hole:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},sort:{valType:\"boolean\",dflt:!0,editType:\"calc\"},direction:{valType:\"enumerated\",values:[\"clockwise\",\"counterclockwise\"],dflt:\"counterclockwise\",editType:\"calc\"},rotation:{valType:\"number\",min:-360,max:360,dflt:0,editType:\"calc\"},pull:{valType:\"number\",min:0,max:1,dflt:0,arrayOk:!0,editType:\"calc\"},_deprecated:{title:{valType:\"string\",dflt:\"\",editType:\"calc\"},titlefont:c({},u,{}),titleposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle center\",\"bottom left\",\"bottom center\",\"bottom right\"],editType:\"calc\"}}}},{\"../../components/color/attributes\":661,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/domain\":877,\"../../plots/font_attributes\":878,\"../../plots/template_attributes\":922}],1189:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/plots\");r.name\u003d\"pie\",r.plot\u003dfunction(t,e,i,a){n.plotBasePlot(r.name,t,e,i,a)},r.clean\u003dfunction(t,e,i,a){n.cleanBasePlot(r.name,t,e,i,a)}},{\"../../plots/plots\":913}],1190:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"tinycolor2\"),a\u003dt(\"../../components/color\"),o\u003d{};function s(t){return function(e,r){return!!e\u0026\u0026(!!(e\u003di(e)).isValid()\u0026\u0026(e\u003da.addOpacity(e,e.getAlpha()),t[r]||(t[r]\u003de),e))}}function l(t,e){var r,n\u003dJSON.stringify(t),a\u003de[n];if(!a){for(a\u003dt.slice(),r\u003d0;r\u003ct.length;r++)a.push(i(t[r]).lighten(20).toHexString());for(r\u003d0;r\u003ct.length;r++)a.push(i(t[r]).darken(20).toHexString());e[n]\u003da}return a}e.exports\u003d{calc:function(t,e){var r,i,a\u003d[],o\u003dt._fullLayout,l\u003do.hiddenlabels||[],c\u003de.labels,u\u003de.marker.colors||[],f\u003de.values,h\u003de._length,p\u003de._hasValues\u0026\u0026h;if(e.dlabel)for(c\u003dnew Array(h),r\u003d0;r\u003ch;r++)c[r]\u003dString(e.label0+r*e.dlabel);var d\u003d{},m\u003ds(o[\"_\"+e.type+\"colormap\"]),g\u003d0,v\u003d!1;for(r\u003d0;r\u003ch;r++){var y,x,b;if(p){if(y\u003df[r],!n(y))continue;if((y\u003d+y)\u003c0)continue}else y\u003d1;void 0!\u003d\u003d(x\u003dc[r])\u0026\u0026\"\"!\u003d\u003dx||(x\u003dr);var _\u003dd[x\u003dString(x)];void 0\u003d\u003d\u003d_?(d[x]\u003da.length,(b\u003d-1!\u003d\u003dl.indexOf(x))||(g+\u003dy),a.push({v:y,label:x,color:m(u[r],x),i:r,pts:[r],hidden:b})):(v\u003d!0,(i\u003da[_]).v+\u003dy,i.pts.push(r),i.hidden||(g+\u003dy),!1\u003d\u003d\u003di.color\u0026\u0026u[r]\u0026\u0026(i.color\u003dm(u[r],x)))}return(\"funnelarea\"\u003d\u003d\u003de.type?v:e.sort)\u0026\u0026a.sort((function(t,e){return e.v-t.v})),a[0]\u0026\u0026(a[0].vTotal\u003dg),a},crossTraceCalc:function(t,e){var r\u003d(e||{}).type;r||(r\u003d\"pie\");var n\u003dt._fullLayout,i\u003dt.calcdata,a\u003dn[r+\"colorway\"],s\u003dn[\"_\"+r+\"colormap\"];n[\"extend\"+r+\"colors\"]\u0026\u0026(a\u003dl(a,o));for(var c\u003d0,u\u003d0;u\u003ci.length;u++){var f\u003di[u];if(f[0].trace.type\u003d\u003d\u003dr)for(var h\u003d0;h\u003cf.length;h++){var p\u003df[h];!1\u003d\u003d\u003dp.color\u0026\u0026(s[p.label]?p.color\u003ds[p.label]:(s[p.label]\u003dp.color\u003da[c%a.length],c++))}}},makePullColorFn:s,generateExtendedColors:l}},{\"../../components/color\":662,\"fast-isnumeric\":245,tinycolor2:594}],1191:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"./attributes\"),o\u003dt(\"../../plots/domain\").defaults,s\u003dt(\"../bar/defaults\").handleText;function l(t,e){var r\u003dArray.isArray(t),a\u003di.isArrayOrTypedArray(e),o\u003dMath.min(r?t.length:1/0,a?e.length:1/0);if(isFinite(o)||(o\u003d0),o\u0026\u0026a){for(var s,l\u003d0;l\u003co;l++){var c\u003de[l];if(n(c)\u0026\u0026c\u003e0){s\u003d!0;break}}s||(o\u003d0)}return{hasLabels:r,hasValues:a,len:o}}e.exports\u003d{handleLabelsAndValues:l,supplyDefaults:function(t,e,r,n){function c(r,n){return i.coerce(t,e,a,r,n)}var u\u003dl(c(\"labels\"),c(\"values\")),f\u003du.len;if(e._hasLabels\u003du.hasLabels,e._hasValues\u003du.hasValues,!e._hasLabels\u0026\u0026e._hasValues\u0026\u0026(c(\"label0\"),c(\"dlabel\")),f){e._length\u003df,c(\"marker.line.width\")\u0026\u0026c(\"marker.line.color\"),c(\"marker.colors\"),c(\"scalegroup\");var h,p\u003dc(\"text\"),d\u003dc(\"texttemplate\");if(d||(h\u003dc(\"textinfo\",Array.isArray(p)?\"text+percent\":\"percent\")),c(\"hovertext\"),c(\"hovertemplate\"),d||h\u0026\u0026\"none\"!\u003d\u003dh){var m\u003dc(\"textposition\");s(t,e,n,c,m,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),(Array.isArray(m)||\"auto\"\u003d\u003d\u003dm||\"outside\"\u003d\u003d\u003dm)\u0026\u0026c(\"automargin\"),(\"inside\"\u003d\u003d\u003dm||\"auto\"\u003d\u003d\u003dm||Array.isArray(m))\u0026\u0026c(\"insidetextorientation\")}o(e,n,c);var g\u003dc(\"hole\");if(c(\"title.text\")){var v\u003dc(\"title.position\",g?\"middle center\":\"top center\");g||\"middle center\"!\u003d\u003dv||(e.title.position\u003d\"top center\"),i.coerceFont(c,\"title.font\",n.font)}c(\"sort\"),c(\"direction\"),c(\"rotation\"),c(\"pull\")}else e.visible\u003d!1}}},{\"../../lib\":799,\"../../plots/domain\":877,\"../bar/defaults\":941,\"./attributes\":1188,\"fast-isnumeric\":245}],1192:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/fx/helpers\").appendArrayMultiPointValues;e.exports\u003dfunction(t,e){var r\u003d{curveNumber:e.index,pointNumbers:t.pts,data:e._input,fullData:e,label:t.label,color:t.color,value:t.v,percent:t.percent,text:t.text,v:t.v};return 1\u003d\u003d\u003dt.pts.length\u0026\u0026(r.pointNumber\u003dr.i\u003dt.pts[0]),n(r,e,t.pts),\"funnelarea\"\u003d\u003d\u003de.type\u0026\u0026(delete r.v,delete r.i),r}},{\"../../components/fx/helpers\":698}],1193:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");function i(t){return-1!\u003d\u003dt.indexOf(\"e\")?t.replace(/[.]?0+e/,\"e\"):-1!\u003d\u003dt.indexOf(\".\")?t.replace(/[.]?0+$/,\"\"):t}r.formatPiePercent\u003dfunction(t,e){var r\u003di((100*t).toPrecision(3));return n.numSeparate(r,e)+\"%\"},r.formatPieValue\u003dfunction(t,e){var r\u003di(t.toPrecision(10));return n.numSeparate(r,e)},r.getFirstFilled\u003dfunction(t,e){if(Array.isArray(t))for(var r\u003d0;r\u003ce.length;r++){var n\u003dt[e[r]];if(n||0\u003d\u003d\u003dn||\"\"\u003d\u003d\u003dn)return n}},r.castOption\u003dfunction(t,e){return Array.isArray(t)?r.getFirstFilled(t,e):t||void 0},r.getRotationAngle\u003dfunction(t){return(\"auto\"\u003d\u003d\u003dt?0:t)*Math.PI/180}},{\"../../lib\":799}],1194:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),layoutAttributes:t(\"./layout_attributes\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\").plot,style:t(\"./style\"),styleOne:t(\"./style_one\"),moduleType:\"trace\",name:\"pie\",basePlotModule:t(\"./base_plot\"),categories:[\"pie-like\",\"pie\",\"showLegend\"],meta:{}}},{\"./attributes\":1188,\"./base_plot\":1189,\"./calc\":1190,\"./defaults\":1191,\"./layout_attributes\":1195,\"./layout_defaults\":1196,\"./plot\":1197,\"./style\":1198,\"./style_one\":1199}],1195:[function(t,e,r){\"use strict\";e.exports\u003d{hiddenlabels:{valType:\"data_array\",editType:\"calc\"},piecolorway:{valType:\"colorlist\",editType:\"calc\"},extendpiecolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{}],1196:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"hiddenlabels\"),r(\"piecolorway\",e.colorway),r(\"extendpiecolors\")}},{\"../../lib\":799,\"./layout_attributes\":1195}],1197:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../plots/plots\"),a\u003dt(\"../../components/fx\"),o\u003dt(\"../../components/color\"),s\u003dt(\"../../components/drawing\"),l\u003dt(\"../../lib\"),c\u003dl.strScale,u\u003dl.strTranslate,f\u003dt(\"../../lib/svg_text_utils\"),h\u003dt(\"../bar/uniform_text\"),p\u003dh.recordMinTextSize,d\u003dh.clearMinTextSize,m\u003dt(\"../bar/constants\").TEXTPAD,g\u003dt(\"./helpers\"),v\u003dt(\"./event_data\"),y\u003dt(\"../../lib\").isValidTextValue;function x(t,e,r){var i\u003dr[0],o\u003di.trace,s\u003di.cx,c\u003di.cy;\"_hasHoverLabel\"in o||(o._hasHoverLabel\u003d!1),\"_hasHoverEvent\"in o||(o._hasHoverEvent\u003d!1),t.on(\"mouseover\",(function(t){var r\u003de._fullLayout,u\u003de._fullData[o.index];if(!e._dragging\u0026\u0026!1!\u003d\u003dr.hovermode){var f\u003du.hoverinfo;if(Array.isArray(f)\u0026\u0026(f\u003da.castHoverinfo({hoverinfo:[g.castOption(f,t.pts)],_module:o._module},r,0)),\"all\"\u003d\u003d\u003df\u0026\u0026(f\u003d\"label+text+value+percent+name\"),u.hovertemplate||\"none\"!\u003d\u003df\u0026\u0026\"skip\"!\u003d\u003df\u0026\u0026f){var h\u003dt.rInscribed||0,p\u003ds+t.pxmid[0]*(1-h),d\u003dc+t.pxmid[1]*(1-h),m\u003dr.separators,y\u003d[];if(f\u0026\u0026-1!\u003d\u003df.indexOf(\"label\")\u0026\u0026y.push(t.label),t.text\u003dg.castOption(u.hovertext||u.text,t.pts),f\u0026\u0026-1!\u003d\u003df.indexOf(\"text\")){var x\u003dt.text;l.isValidTextValue(x)\u0026\u0026y.push(x)}t.value\u003dt.v,t.valueLabel\u003dg.formatPieValue(t.v,m),f\u0026\u0026-1!\u003d\u003df.indexOf(\"value\")\u0026\u0026y.push(t.valueLabel),t.percent\u003dt.v/i.vTotal,t.percentLabel\u003dg.formatPiePercent(t.percent,m),f\u0026\u0026-1!\u003d\u003df.indexOf(\"percent\")\u0026\u0026y.push(t.percentLabel);var b\u003du.hoverlabel,_\u003db.font;a.loneHover({trace:o,x0:p-h*i.r,x1:p+h*i.r,y:d,text:y.join(\"\u003cbr\u003e\"),name:u.hovertemplate||-1!\u003d\u003df.indexOf(\"name\")?u.name:void 0,idealAlign:t.pxmid[0]\u003c0?\"left\":\"right\",color:g.castOption(b.bgcolor,t.pts)||t.color,borderColor:g.castOption(b.bordercolor,t.pts),fontFamily:g.castOption(_.family,t.pts),fontSize:g.castOption(_.size,t.pts),fontColor:g.castOption(_.color,t.pts),nameLength:g.castOption(b.namelength,t.pts),textAlign:g.castOption(b.align,t.pts),hovertemplate:g.castOption(u.hovertemplate,t.pts),hovertemplateLabels:t,eventData:[v(t,u)]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:e}),o._hasHoverLabel\u003d!0}o._hasHoverEvent\u003d!0,e.emit(\"plotly_hover\",{points:[v(t,u)],event:n.event})}})),t.on(\"mouseout\",(function(t){var r\u003de._fullLayout,i\u003de._fullData[o.index],s\u003dn.select(this).datum();o._hasHoverEvent\u0026\u0026(t.originalEvent\u003dn.event,e.emit(\"plotly_unhover\",{points:[v(s,i)],event:n.event}),o._hasHoverEvent\u003d!1),o._hasHoverLabel\u0026\u0026(a.loneUnhover(r._hoverlayer.node()),o._hasHoverLabel\u003d!1)})),t.on(\"click\",(function(t){var r\u003de._fullLayout,i\u003de._fullData[o.index];e._dragging||!1\u003d\u003d\u003dr.hovermode||(e._hoverdata\u003d[v(t,i)],a.click(e,n.event))}))}function b(t,e,r){var n\u003dg.castOption(t.insidetextfont.color,e.pts);!n\u0026\u0026t._input.textfont\u0026\u0026(n\u003dg.castOption(t._input.textfont.color,e.pts));var i\u003dg.castOption(t.insidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,a\u003dg.castOption(t.insidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size;return{color:n||o.contrast(e.color),family:i,size:a}}function _(t,e){for(var r,n,i\u003d0;i\u003ct.length;i++)if((n\u003d(r\u003dt[i][0]).trace).title.text){var a\u003dn.title.text;n._meta\u0026\u0026(a\u003dl.templateString(a,n._meta));var o\u003ds.tester.append(\"text\").attr(\"data-notex\",1).text(a).call(s.font,n.title.font).call(f.convertToTspans,e),c\u003ds.bBox(o.node(),!0);r.titleBox\u003d{width:c.width,height:c.height},o.remove()}}function w(t,e,r){var n\u003dr.r||e.rpx1,i\u003de.rInscribed;if(e.startangle\u003d\u003d\u003de.stopangle)return{rCenter:1-i,scale:0,rotate:0,textPosAngle:0};var a,o\u003de.ring,s\u003d1\u003d\u003d\u003do\u0026\u0026Math.abs(e.startangle-e.stopangle)\u003d\u003d\u003d2*Math.PI,l\u003de.halfangle,c\u003de.midangle,u\u003dr.trace.insidetextorientation,f\u003d\"horizontal\"\u003d\u003d\u003du,h\u003d\"tangential\"\u003d\u003d\u003du,p\u003d\"radial\"\u003d\u003d\u003du,d\u003d\"auto\"\u003d\u003d\u003du,m\u003d[];if(!d){var g,v\u003dfunction(r,i){if(function(t,e){var r\u003dt.startangle,n\u003dt.stopangle;return r\u003ee\u0026\u0026e\u003en||r\u003ce\u0026\u0026e\u003cn}(e,r)){var s\u003dMath.abs(r-e.startangle),l\u003dMath.abs(r-e.stopangle),c\u003ds\u003cl?s:l;(a\u003d\"tan\"\u003d\u003d\u003di?k(t,n,o,c,0):T(t,n,o,c,Math.PI/2)).textPosAngle\u003dr,m.push(a)}};if(f||h){for(g\u003d4;g\u003e\u003d-4;g-\u003d2)v(Math.PI*g,\"tan\");for(g\u003d4;g\u003e\u003d-4;g-\u003d2)v(Math.PI*(g+1),\"tan\")}if(f||p){for(g\u003d4;g\u003e\u003d-4;g-\u003d2)v(Math.PI*(g+1.5),\"rad\");for(g\u003d4;g\u003e\u003d-4;g-\u003d2)v(Math.PI*(g+.5),\"rad\")}}if(s||d||f){var y\u003dMath.sqrt(t.width*t.width+t.height*t.height);if((a\u003d{scale:i*n*2/y,rCenter:1-i,rotate:0}).textPosAngle\u003d(e.startangle+e.stopangle)/2,a.scale\u003e\u003d1)return a;m.push(a)}(d||p)\u0026\u0026((a\u003dT(t,n,o,l,c)).textPosAngle\u003d(e.startangle+e.stopangle)/2,m.push(a)),(d||h)\u0026\u0026((a\u003dk(t,n,o,l,c)).textPosAngle\u003d(e.startangle+e.stopangle)/2,m.push(a));for(var x\u003d0,b\u003d0,_\u003d0;_\u003cm.length;_++){var w\u003dm[_].scale;if(b\u003cw\u0026\u0026(b\u003dw,x\u003d_),!d\u0026\u0026b\u003e\u003d1)break}return m[x]}function T(t,e,r,n,i){e\u003dMath.max(0,e-2*m);var a\u003dt.width/t.height,o\u003dS(a,n,e,r);return{scale:2*o/t.height,rCenter:M(a,o/e),rotate:A(i)}}function k(t,e,r,n,i){e\u003dMath.max(0,e-2*m);var a\u003dt.height/t.width,o\u003dS(a,n,e,r);return{scale:2*o/t.width,rCenter:M(a,o/e),rotate:A(i+Math.PI/2)}}function M(t,e){return Math.cos(e)-t*e}function A(t){return(180/Math.PI*t+720)%180-90}function S(t,e,r,n){var i\u003dt+1/(2*Math.tan(e));return r*Math.min(1/(Math.sqrt(i*i+.5)+i),n/(Math.sqrt(t*t+n/2)+t))}function E(t,e){return t.v!\u003d\u003de.vTotal||e.trace.hole?Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2):1}function L(t,e){var r\u003de.pxmid[0],n\u003de.pxmid[1],i\u003dt.width/2,a\u003dt.height/2;return r\u003c0\u0026\u0026(i*\u003d-1),n\u003c0\u0026\u0026(a*\u003d-1),{scale:1,rCenter:1,rotate:0,x:i+Math.abs(a)*(i\u003e0?1:-1)/2,y:a/(1+r*r/(n*n)),outside:!0}}function C(t,e){var r,n,i,a\u003dt.trace,o\u003d{x:t.cx,y:t.cy},s\u003d{tx:0,ty:0};s.ty+\u003da.title.font.size,i\u003dI(a),-1!\u003d\u003da.title.position.indexOf(\"top\")?(o.y-\u003d(1+i)*t.r,s.ty-\u003dt.titleBox.height):-1!\u003d\u003da.title.position.indexOf(\"bottom\")\u0026\u0026(o.y+\u003d(1+i)*t.r);var l,c,u\u003d(l\u003dt.r,c\u003dt.trace.aspectratio,l/(void 0\u003d\u003d\u003dc?1:c)),f\u003de.w*(a.domain.x[1]-a.domain.x[0])/2;return-1!\u003d\u003da.title.position.indexOf(\"left\")?(f+\u003du,o.x-\u003d(1+i)*u,s.tx+\u003dt.titleBox.width/2):-1!\u003d\u003da.title.position.indexOf(\"center\")?f*\u003d2:-1!\u003d\u003da.title.position.indexOf(\"right\")\u0026\u0026(f+\u003du,o.x+\u003d(1+i)*u,s.tx-\u003dt.titleBox.width/2),r\u003df/t.titleBox.width,n\u003dP(t,e)/t.titleBox.height,{x:o.x,y:o.y,scale:Math.min(r,n),tx:s.tx,ty:s.ty}}function P(t,e){var r\u003dt.trace,n\u003de.h*(r.domain.y[1]-r.domain.y[0]);return Math.min(t.titleBox.height,n/2)}function I(t){var e,r\u003dt.pull;if(!r)return 0;if(Array.isArray(r))for(r\u003d0,e\u003d0;e\u003ct.pull.length;e++)t.pull[e]\u003er\u0026\u0026(r\u003dt.pull[e]);return r}function O(t,e){for(var r\u003d[],n\u003d0;n\u003ct.length;n++){var i\u003dt[n][0],a\u003di.trace,o\u003da.domain,s\u003de.w*(o.x[1]-o.x[0]),l\u003de.h*(o.y[1]-o.y[0]);a.title.text\u0026\u0026\"middle center\"!\u003d\u003da.title.position\u0026\u0026(l-\u003dP(i,e));var c\u003ds/2,u\u003dl/2;\"funnelarea\"!\u003d\u003da.type||a.scalegroup||(u/\u003da.aspectratio),i.r\u003dMath.min(c,u)/(1+I(a)),i.cx\u003de.l+e.w*(a.domain.x[1]+a.domain.x[0])/2,i.cy\u003de.t+e.h*(1-a.domain.y[0])-l/2,a.title.text\u0026\u0026-1!\u003d\u003da.title.position.indexOf(\"bottom\")\u0026\u0026(i.cy-\u003dP(i,e)),a.scalegroup\u0026\u0026-1\u003d\u003d\u003dr.indexOf(a.scalegroup)\u0026\u0026r.push(a.scalegroup)}!function(t,e){for(var r,n,i,a\u003d0;a\u003ce.length;a++){var o\u003d1/0,s\u003de[a];for(n\u003d0;n\u003ct.length;n++)if(r\u003dt[n][0],(i\u003dr.trace).scalegroup\u003d\u003d\u003ds){var l;if(\"pie\"\u003d\u003d\u003di.type)l\u003dr.r*r.r;else if(\"funnelarea\"\u003d\u003d\u003di.type){var c,u;i.aspectratio\u003e1?(c\u003dr.r,u\u003dc/i.aspectratio):(u\u003dr.r,c\u003du*i.aspectratio),c*\u003d(1+i.baseratio)/2,l\u003dc*u}o\u003dMath.min(o,l/r.vTotal)}for(n\u003d0;n\u003ct.length;n++)if(r\u003dt[n][0],(i\u003dr.trace).scalegroup\u003d\u003d\u003ds){var f\u003do*r.vTotal;\"funnelarea\"\u003d\u003d\u003di.type\u0026\u0026(f/\u003d(1+i.baseratio)/2,f/\u003di.aspectratio),r.r\u003dMath.sqrt(f)}}}(t,r)}function z(t,e){return[t*Math.sin(e),-t*Math.cos(e)]}function D(t,e,r){var n\u003dt._fullLayout,i\u003dr.trace,a\u003di.texttemplate,o\u003di.textinfo;if(!a\u0026\u0026o\u0026\u0026\"none\"!\u003d\u003do){var s,c\u003do.split(\"+\"),u\u003dfunction(t){return-1!\u003d\u003dc.indexOf(t)},f\u003du(\"label\"),h\u003du(\"text\"),p\u003du(\"value\"),d\u003du(\"percent\"),m\u003dn.separators;if(s\u003df?[e.label]:[],h){var v\u003dg.getFirstFilled(i.text,e.pts);y(v)\u0026\u0026s.push(v)}p\u0026\u0026s.push(g.formatPieValue(e.v,m)),d\u0026\u0026s.push(g.formatPiePercent(e.v/r.vTotal,m)),e.text\u003ds.join(\"\u003cbr\u003e\")}if(a){var x\u003dl.castOption(i,e.i,\"texttemplate\");if(x){var b\u003dfunction(t){return{label:t.label,value:t.v,valueLabel:g.formatPieValue(t.v,n.separators),percent:t.v/r.vTotal,percentLabel:g.formatPiePercent(t.v/r.vTotal,n.separators),color:t.color,text:t.text,customdata:l.castOption(i,t.i,\"customdata\")}}(e),_\u003dg.getFirstFilled(i.text,e.pts);(y(_)||\"\"\u003d\u003d\u003d_)\u0026\u0026(b.text\u003d_),e.text\u003dl.texttemplateString(x,b,t._fullLayout._d3locale,b,i._meta||{})}else e.text\u003d\"\"}}function R(t,e){var r\u003dt.rotate*Math.PI/180,n\u003dMath.cos(r),i\u003dMath.sin(r),a\u003d(e.left+e.right)/2,o\u003d(e.top+e.bottom)/2;t.textX\u003da*n-o*i,t.textY\u003da*i+o*n,t.noCenter\u003d!0}e.exports\u003d{plot:function(t,e){var r\u003dt._fullLayout,a\u003dr._size;d(\"pie\",r),_(e,t),O(e,a);var h\u003dl.makeTraceGroups(r._pielayer,e,\"trace\").each((function(e){var h\u003dn.select(this),d\u003de[0],m\u003dd.trace;!function(t){var e,r,n,i\u003dt[0],a\u003di.r,o\u003di.trace,s\u003dg.getRotationAngle(o.rotation),l\u003d2*Math.PI/i.vTotal,c\u003d\"px0\",u\u003d\"px1\";if(\"counterclockwise\"\u003d\u003d\u003do.direction){for(e\u003d0;e\u003ct.length\u0026\u0026t[e].hidden;e++);if(e\u003d\u003d\u003dt.length)return;s+\u003dl*t[e].v,l*\u003d-1,c\u003d\"px1\",u\u003d\"px0\"}for(n\u003dz(a,s),e\u003d0;e\u003ct.length;e++)(r\u003dt[e]).hidden||(r[c]\u003dn,r.startangle\u003ds,s+\u003dl*r.v/2,r.pxmid\u003dz(a,s),r.midangle\u003ds,s+\u003dl*r.v/2,n\u003dz(a,s),r.stopangle\u003ds,r[u]\u003dn,r.largeArc\u003dr.v\u003ei.vTotal/2?1:0,r.halfangle\u003dMath.PI*Math.min(r.v/i.vTotal,.5),r.ring\u003d1-o.hole,r.rInscribed\u003dE(r,i))}(e),h.attr(\"stroke-linejoin\",\"round\"),h.each((function(){var v\u003dn.select(this).selectAll(\"g.slice\").data(e);v.enter().append(\"g\").classed(\"slice\",!0),v.exit().remove();var y\u003d[[[],[]],[[],[]]],_\u003d!1;v.each((function(i,a){if(i.hidden)n.select(this).selectAll(\"path,g\").remove();else{i.pointNumber\u003di.i,i.curveNumber\u003dm.index,y[i.pxmid[1]\u003c0?0:1][i.pxmid[0]\u003c0?0:1].push(i);var o\u003dd.cx,c\u003dd.cy,u\u003dn.select(this),h\u003du.selectAll(\"path.surface\").data([i]);if(h.enter().append(\"path\").classed(\"surface\",!0).style({\"pointer-events\":\"all\"}),u.call(x,t,e),m.pull){var v\u003d+g.castOption(m.pull,i.pts)||0;v\u003e0\u0026\u0026(o+\u003dv*i.pxmid[0],c+\u003dv*i.pxmid[1])}i.cxFinal\u003do,i.cyFinal\u003dc;var T\u003dm.hole;if(i.v\u003d\u003d\u003dd.vTotal){var k\u003d\"M\"+(o+i.px0[0])+\",\"+(c+i.px0[1])+C(i.px0,i.pxmid,!0,1)+C(i.pxmid,i.px0,!0,1)+\"Z\";T?h.attr(\"d\",\"M\"+(o+T*i.px0[0])+\",\"+(c+T*i.px0[1])+C(i.px0,i.pxmid,!1,T)+C(i.pxmid,i.px0,!1,T)+\"Z\"+k):h.attr(\"d\",k)}else{var M\u003dC(i.px0,i.px1,!0,1);if(T){var A\u003d1-T;h.attr(\"d\",\"M\"+(o+T*i.px1[0])+\",\"+(c+T*i.px1[1])+C(i.px1,i.px0,!1,T)+\"l\"+A*i.px0[0]+\",\"+A*i.px0[1]+M+\"Z\")}else h.attr(\"d\",\"M\"+o+\",\"+c+\"l\"+i.px0[0]+\",\"+i.px0[1]+M+\"Z\")}D(t,i,d);var S\u003dg.castOption(m.textposition,i.pts),E\u003du.selectAll(\"g.slicetext\").data(i.text\u0026\u0026\"none\"!\u003d\u003dS?[0]:[]);E.enter().append(\"g\").classed(\"slicetext\",!0),E.exit().remove(),E.each((function(){var u\u003dl.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),h\u003dl.ensureUniformFontSize(t,\"outside\"\u003d\u003d\u003dS?function(t,e,r){var n\u003dg.castOption(t.outsidetextfont.color,e.pts)||g.castOption(t.textfont.color,e.pts)||r.color,i\u003dg.castOption(t.outsidetextfont.family,e.pts)||g.castOption(t.textfont.family,e.pts)||r.family,a\u003dg.castOption(t.outsidetextfont.size,e.pts)||g.castOption(t.textfont.size,e.pts)||r.size;return{color:n,family:i,size:a}}(m,i,r.font):b(m,i,r.font));u.text(i.text).attr({class:\"slicetext\",transform:\"\",\"text-anchor\":\"middle\"}).call(s.font,h).call(f.convertToTspans,t);var v,y\u003ds.bBox(u.node());if(\"outside\"\u003d\u003d\u003dS)v\u003dL(y,i);else if(v\u003dw(y,i,d),\"auto\"\u003d\u003d\u003dS\u0026\u0026v.scale\u003c1){var x\u003dl.ensureUniformFontSize(t,m.outsidetextfont);u.call(s.font,x),v\u003dL(y\u003ds.bBox(u.node()),i)}var T\u003dv.textPosAngle,k\u003dvoid 0\u003d\u003d\u003dT?i.pxmid:z(d.r,T);if(v.targetX\u003do+k[0]*v.rCenter+(v.x||0),v.targetY\u003dc+k[1]*v.rCenter+(v.y||0),R(v,y),v.outside){var M\u003dv.targetY;i.yLabelMin\u003dM-y.height/2,i.yLabelMid\u003dM,i.yLabelMax\u003dM+y.height/2,i.labelExtraX\u003d0,i.labelExtraY\u003d0,_\u003d!0}v.fontSize\u003dh.size,p(m.type,v,r),e[a].transform\u003dv,u.attr(\"transform\",l.getTextTransform(v))}))}function C(t,e,r,n){var a\u003dn*(e[0]-t[0]),o\u003dn*(e[1]-t[1]);return\"a\"+n*d.r+\",\"+n*d.r+\" 0 \"+i.largeArc+(r?\" 1 \":\" 0 \")+a+\",\"+o}}));var T\u003dn.select(this).selectAll(\"g.titletext\").data(m.title.text?[0]:[]);if(T.enter().append(\"g\").classed(\"titletext\",!0),T.exit().remove(),T.each((function(){var e,r\u003dl.ensureSingle(n.select(this),\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),i\u003dm.title.text;m._meta\u0026\u0026(i\u003dl.templateString(i,m._meta)),r.text(i).attr({class:\"titletext\",transform:\"\",\"text-anchor\":\"middle\"}).call(s.font,m.title.font).call(f.convertToTspans,t),e\u003d\"middle center\"\u003d\u003d\u003dm.title.position?function(t){var e\u003dMath.sqrt(t.titleBox.width*t.titleBox.width+t.titleBox.height*t.titleBox.height);return{x:t.cx,y:t.cy,scale:t.trace.hole*t.r*2/e,tx:0,ty:-t.titleBox.height/2+t.trace.title.font.size}}(d):C(d,a),r.attr(\"transform\",u(e.x,e.y)+c(Math.min(1,e.scale))+u(e.tx,e.ty))})),_\u0026\u0026function(t,e){var r,n,i,a,o,s,l,c,u,f,h,p,d;function m(t,e){return t.pxmid[1]-e.pxmid[1]}function v(t,e){return e.pxmid[1]-t.pxmid[1]}function y(t,r){r||(r\u003d{});var i,c,u,h,p\u003dr.labelExtraY+(n?r.yLabelMax:r.yLabelMin),d\u003dn?t.yLabelMin:t.yLabelMax,m\u003dn?t.yLabelMax:t.yLabelMin,v\u003dt.cyFinal+o(t.px0[1],t.px1[1]),y\u003dp-d;if(y*l\u003e0\u0026\u0026(t.labelExtraY\u003dy),Array.isArray(e.pull))for(c\u003d0;c\u003cf.length;c++)(u\u003df[c])\u003d\u003d\u003dt||(g.castOption(e.pull,t.pts)||0)\u003e\u003d(g.castOption(e.pull,u.pts)||0)||((t.pxmid[1]-u.pxmid[1])*l\u003e0?(y\u003du.cyFinal+o(u.px0[1],u.px1[1])-d-t.labelExtraY)*l\u003e0\u0026\u0026(t.labelExtraY+\u003dy):(m+t.labelExtraY-v)*l\u003e0\u0026\u0026(i\u003d3*s*Math.abs(c-f.indexOf(t)),(h\u003du.cxFinal+a(u.px0[0],u.px1[0])+i-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*s\u003e0\u0026\u0026(t.labelExtraX+\u003dh)))}for(n\u003d0;n\u003c2;n++)for(i\u003dn?m:v,o\u003dn?Math.max:Math.min,l\u003dn?1:-1,r\u003d0;r\u003c2;r++){for(a\u003dr?Math.max:Math.min,s\u003dr?1:-1,(c\u003dt[n][r]).sort(i),u\u003dt[1-n][r],f\u003du.concat(c),p\u003d[],h\u003d0;h\u003cc.length;h++)void 0!\u003d\u003dc[h].yLabelMid\u0026\u0026p.push(c[h]);for(d\u003d!1,h\u003d0;n\u0026\u0026h\u003cu.length;h++)if(void 0!\u003d\u003du[h].yLabelMid){d\u003du[h];break}for(h\u003d0;h\u003cp.length;h++){var x\u003dh\u0026\u0026p[h-1];d\u0026\u0026!h\u0026\u0026(x\u003dd),y(p[h],x)}}}(y,m),function(t,e){t.each((function(t){var r\u003dn.select(this);if(t.labelExtraX||t.labelExtraY){var i\u003dr.select(\"g.slicetext text\");t.transform.targetX+\u003dt.labelExtraX,t.transform.targetY+\u003dt.labelExtraY,i.attr(\"transform\",l.getTextTransform(t.transform));var a\u003dt.cxFinal+t.pxmid[0],s\u003d\"M\"+a+\",\"+(t.cyFinal+t.pxmid[1]),c\u003d(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]\u003c0?-1:1)/4;if(t.labelExtraX){var u\u003dt.labelExtraX*t.pxmid[1]/t.pxmid[0],f\u003dt.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(u)\u003eMath.abs(f)?s+\u003d\"l\"+f*t.pxmid[0]/t.pxmid[1]+\",\"+f+\"H\"+(a+t.labelExtraX+c):s+\u003d\"l\"+t.labelExtraX+\",\"+u+\"v\"+(f-u)+\"h\"+c}else s+\u003d\"V\"+(t.yLabelMid+t.labelExtraY)+\"h\"+c;l.ensureSingle(r,\"path\",\"textline\").call(o.stroke,e.outsidetextfont.color).attr({\"stroke-width\":Math.min(2,e.outsidetextfont.size/8),d:s,fill:\"none\"})}else r.select(\"path.textline\").remove()}))}(v,m),_\u0026\u0026m.automargin){var k\u003ds.bBox(h.node()),M\u003dm.domain,A\u003da.w*(M.x[1]-M.x[0]),S\u003da.h*(M.y[1]-M.y[0]),E\u003d(.5*A-d.r)/a.w,P\u003d(.5*S-d.r)/a.h;i.autoMargin(t,\"pie.\"+m.uid+\".automargin\",{xl:M.x[0]-E,xr:M.x[1]+E,yb:M.y[0]-P,yt:M.y[1]+P,l:Math.max(d.cx-d.r-k.left,0),r:Math.max(k.right-(d.cx+d.r),0),b:Math.max(k.bottom-(d.cy+d.r),0),t:Math.max(d.cy-d.r-k.top,0),pad:5})}}))}));setTimeout((function(){h.selectAll(\"tspan\").each((function(){var t\u003dn.select(this);t.attr(\"dy\")\u0026\u0026t.attr(\"dy\",t.attr(\"dy\"))}))}),0)},formatSliceLabel:D,transformInsideText:w,determineInsideTextFont:b,positionTitleOutside:C,prerenderTitles:_,layoutAreas:O,attachFxHandlers:x,computeTransform:R}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../components/fx\":702,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../../plots/plots\":913,\"../bar/constants\":939,\"../bar/uniform_text\":953,\"./event_data\":1192,\"./helpers\":1193,\"@plotly/d3\":58}],1198:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"./style_one\"),a\u003dt(\"../bar/uniform_text\").resizeText;e.exports\u003dfunction(t){var e\u003dt._fullLayout._pielayer.selectAll(\".trace\");a(t,e,\"pie\"),e.each((function(t){var e\u003dt[0].trace,r\u003dn.select(this);r.style({opacity:e.opacity}),r.selectAll(\"path.surface\").each((function(t){n.select(this).call(i,t,e)}))}))}},{\"../bar/uniform_text\":953,\"./style_one\":1199,\"@plotly/d3\":58}],1199:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"./helpers\").castOption;e.exports\u003dfunction(t,e,r){var a\u003dr.marker.line,o\u003di(a.color,e.pts)||n.defaultLine,s\u003di(a.width,e.pts)||0;t.style(\"stroke-width\",s).call(n.fill,e.color).call(n.stroke,o)}},{\"../../components/color\":662,\"./helpers\":1193}],1200:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/attributes\");e.exports\u003d{x:n.x,y:n.y,xy:{valType:\"data_array\",editType:\"calc\"},indices:{valType:\"data_array\",editType:\"calc\"},xbounds:{valType:\"data_array\",editType:\"calc\"},ybounds:{valType:\"data_array\",editType:\"calc\"},text:n.text,marker:{color:{valType:\"color\",arrayOk:!1,editType:\"calc\"},opacity:{valType:\"number\",min:0,max:1,dflt:1,arrayOk:!1,editType:\"calc\"},blend:{valType:\"boolean\",dflt:null,editType:\"calc\"},sizemin:{valType:\"number\",min:.1,max:2,dflt:.5,editType:\"calc\"},sizemax:{valType:\"number\",min:.1,dflt:20,editType:\"calc\"},border:{color:{valType:\"color\",arrayOk:!1,editType:\"calc\"},arearatio:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},transforms:void 0}},{\"../scatter/attributes\":1214}],1201:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-pointcloud2d\"),i\u003dt(\"../../lib/str2rgbarray\"),a\u003dt(\"../../plots/cartesian/autorange\").findExtremes,o\u003dt(\"../scatter/get_trace_color\");function s(t,e){this.scene\u003dt,this.uid\u003de,this.type\u003d\"pointcloud\",this.pickXData\u003d[],this.pickYData\u003d[],this.xData\u003d[],this.yData\u003d[],this.textLabels\u003d[],this.color\u003d\"rgb(0, 0, 0)\",this.name\u003d\"\",this.hoverinfo\u003d\"all\",this.idToIndex\u003dnew Int32Array(0),this.bounds\u003d[0,0,0,0],this.pointcloudOptions\u003d{positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud\u003dn(t.glplot,this.pointcloudOptions),this.pointcloud._trace\u003dthis}var l\u003ds.prototype;l.handlePick\u003dfunction(t){var e\u003dthis.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},l.update\u003dfunction(t){this.index\u003dt.index,this.textLabels\u003dt.text,this.name\u003dt.name,this.hoverinfo\u003dt.hoverinfo,this.bounds\u003d[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color\u003do(t,{})},l.updateFast\u003dfunction(t){var e,r,n,o,s,l,c\u003dthis.xData\u003dthis.pickXData\u003dt.x,u\u003dthis.yData\u003dthis.pickYData\u003dt.y,f\u003dthis.pickXYData\u003dt.xy,h\u003dt.xbounds\u0026\u0026t.ybounds,p\u003dt.indices,d\u003dthis.bounds;if(f){if(n\u003df,e\u003df.length\u003e\u003e\u003e1,h)d[0]\u003dt.xbounds[0],d[2]\u003dt.xbounds[1],d[1]\u003dt.ybounds[0],d[3]\u003dt.ybounds[1];else for(l\u003d0;l\u003ce;l++)o\u003dn[2*l],s\u003dn[2*l+1],o\u003cd[0]\u0026\u0026(d[0]\u003do),o\u003ed[2]\u0026\u0026(d[2]\u003do),s\u003cd[1]\u0026\u0026(d[1]\u003ds),s\u003ed[3]\u0026\u0026(d[3]\u003ds);if(p)r\u003dp;else for(r\u003dnew Int32Array(e),l\u003d0;l\u003ce;l++)r[l]\u003dl}else for(e\u003dc.length,n\u003dnew Float32Array(2*e),r\u003dnew Int32Array(e),l\u003d0;l\u003ce;l++)o\u003dc[l],s\u003du[l],r[l]\u003dl,n[2*l]\u003do,n[2*l+1]\u003ds,o\u003cd[0]\u0026\u0026(d[0]\u003do),o\u003ed[2]\u0026\u0026(d[2]\u003do),s\u003cd[1]\u0026\u0026(d[1]\u003ds),s\u003ed[3]\u0026\u0026(d[3]\u003ds);this.idToIndex\u003dr,this.pointcloudOptions.idToIndex\u003dr,this.pointcloudOptions.positions\u003dn;var m\u003di(t.marker.color),g\u003di(t.marker.border.color),v\u003dt.opacity*t.marker.opacity;m[3]*\u003dv,this.pointcloudOptions.color\u003dm;var y\u003dt.marker.blend;if(null\u003d\u003d\u003dy){y\u003dc.length\u003c100||u.length\u003c100}this.pointcloudOptions.blend\u003dy,g[3]*\u003dv,this.pointcloudOptions.borderColor\u003dg;var x\u003dt.marker.sizemin,b\u003dMath.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin\u003dx,this.pointcloudOptions.sizeMax\u003db,this.pointcloudOptions.areaRatio\u003dt.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions);var _\u003dthis.scene.xaxis,w\u003dthis.scene.yaxis,T\u003db/2||.5;t._extremes[_._id]\u003da(_,[d[0],d[2]],{ppad:T}),t._extremes[w._id]\u003da(w,[d[1],d[3]],{ppad:T})},l.dispose\u003dfunction(){this.pointcloud.dispose()},e.exports\u003dfunction(t,e){var r\u003dnew s(t,e.uid);return r.update(e),r}},{\"../../lib/str2rgbarray\":823,\"../../plots/cartesian/autorange\":848,\"../scatter/get_trace_color\":1224,\"gl-pointcloud2d\":324}],1202:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}a(\"x\"),a(\"y\"),a(\"xbounds\"),a(\"ybounds\"),t.xy\u0026\u0026t.xy instanceof Float32Array\u0026\u0026(e.xy\u003dt.xy),t.indices\u0026\u0026t.indices instanceof Int32Array\u0026\u0026(e.indices\u003dt.indices),a(\"text\"),a(\"marker.color\",r),a(\"marker.opacity\"),a(\"marker.blend\"),a(\"marker.sizemin\"),a(\"marker.sizemax\"),a(\"marker.border.color\",r),a(\"marker.border.arearatio\"),e._length\u003dnull}},{\"../../lib\":799,\"./attributes\":1200}],1203:[function(t,e,r){\"use strict\";[\"*pointcloud* trace is deprecated!\",\"Please consider switching to the *scattergl* trace type.\"].join(\" \");e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"../scatter3d/calc\"),plot:t(\"./convert\"),moduleType:\"trace\",name:\"pointcloud\",basePlotModule:t(\"../../plots/gl2d\"),categories:[\"gl\",\"gl2d\",\"showLegend\"],meta:{}}},{\"../../plots/gl2d\":890,\"../scatter3d/calc\":1243,\"./attributes\":1200,\"./convert\":1201,\"./defaults\":1202}],1204:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/font_attributes\"),i\u003dt(\"../../plots/attributes\"),a\u003dt(\"../../components/color/attributes\"),o\u003dt(\"../../components/fx/attributes\"),s\u003dt(\"../../plots/domain\").attributes,l\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,c\u003dt(\"../../components/colorscale/attributes\"),u\u003dt(\"../../plot_api/plot_template\").templatedArray,f\u003dt(\"../../plots/cartesian/axis_format_attributes\").descriptionOnlyNumbers,h\u003dt(\"../../lib/extend\").extendFlat,p\u003dt(\"../../plot_api/edit_types\").overrideAll;(e.exports\u003dp({hoverinfo:h({},i.hoverinfo,{flags:[],arrayOk:!1}),hoverlabel:o.hoverlabel,domain:s({name:\"sankey\",trace:!0}),orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],dflt:\"h\"},valueformat:{valType:\"string\",dflt:\".3s\",description:f(\"value\")},valuesuffix:{valType:\"string\",dflt:\"\"},arrangement:{valType:\"enumerated\",values:[\"snap\",\"perpendicular\",\"freeform\",\"fixed\"],dflt:\"snap\"},textfont:n({}),customdata:void 0,node:{label:{valType:\"data_array\",dflt:[]},groups:{valType:\"info_array\",impliedEdits:{x:[],y:[]},dimensions:2,freeLength:!0,dflt:[],items:{valType:\"number\",editType:\"calc\"}},x:{valType:\"data_array\",dflt:[]},y:{valType:\"data_array\",dflt:[]},color:{valType:\"color\",arrayOk:!0},customdata:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\"number\",min:0,dflt:.5,arrayOk:!0}},pad:{valType:\"number\",arrayOk:!1,min:0,dflt:20},thickness:{valType:\"number\",arrayOk:!1,min:1,dflt:20},hoverinfo:{valType:\"enumerated\",values:[\"all\",\"none\",\"skip\"],dflt:\"all\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\"value\",\"label\"]})},link:{label:{valType:\"data_array\",dflt:[]},color:{valType:\"color\",arrayOk:!0},customdata:{valType:\"data_array\",editType:\"calc\"},line:{color:{valType:\"color\",dflt:a.defaultLine,arrayOk:!0},width:{valType:\"number\",min:0,dflt:0,arrayOk:!0}},source:{valType:\"data_array\",dflt:[]},target:{valType:\"data_array\",dflt:[]},value:{valType:\"data_array\",dflt:[]},hoverinfo:{valType:\"enumerated\",values:[\"all\",\"none\",\"skip\"],dflt:\"all\"},hoverlabel:o.hoverlabel,hovertemplate:l({},{keys:[\"value\",\"label\"]}),colorscales:u(\"concentrationscales\",{editType:\"calc\",label:{valType:\"string\",editType:\"calc\",dflt:\"\"},cmax:{valType:\"number\",editType:\"calc\",dflt:1},cmin:{valType:\"number\",editType:\"calc\",dflt:0},colorscale:h(c().colorscale,{dflt:[[0,\"white\"],[1,\"black\"]]})})}},\"calc\",\"nested\")).transforms\u003dvoid 0},{\"../../components/color/attributes\":661,\"../../components/colorscale/attributes\":669,\"../../components/fx/attributes\":693,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plot_api/plot_template\":838,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/domain\":877,\"../../plots/font_attributes\":878,\"../../plots/template_attributes\":922}],1205:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plot_api/edit_types\").overrideAll,i\u003dt(\"../../plots/get_data\").getModuleCalcData,a\u003dt(\"./plot\"),o\u003dt(\"../../components/fx/layout_attributes\"),s\u003dt(\"../../lib/setcursor\"),l\u003dt(\"../../components/dragelement\"),c\u003dt(\"../../plots/cartesian/select\").prepSelect,u\u003dt(\"../../lib\"),f\u003dt(\"../../registry\");function h(t,e){var r\u003dt._fullData[e],n\u003dt._fullLayout,i\u003dn.dragmode,a\u003d\"pan\"\u003d\u003d\u003dn.dragmode?\"move\":\"crosshair\",o\u003dr._bgRect;if(\"pan\"!\u003d\u003di\u0026\u0026\"zoom\"!\u003d\u003di){s(o,a);var h\u003d{_id:\"x\",c2p:u.identity,_offset:r._sankey.translateX,_length:r._sankey.width},p\u003d{_id:\"y\",c2p:u.identity,_offset:r._sankey.translateY,_length:r._sankey.height},d\u003d{gd:t,element:o.node(),plotinfo:{id:e,xaxis:h,yaxis:p,fillRangeItems:u.noop},subplot:e,xaxes:[h],yaxes:[p],doneFnCompleted:function(r){var n,i\u003dt._fullData[e],a\u003di.node.groups.slice(),o\u003d[];function s(t){for(var e\u003di._sankey.graph.nodes,r\u003d0;r\u003ce.length;r++)if(e[r].pointNumber\u003d\u003d\u003dt)return e[r]}for(var l\u003d0;l\u003cr.length;l++){var c\u003ds(r[l].pointNumber);if(c)if(c.group){for(var u\u003d0;u\u003cc.childrenNodes.length;u++)o.push(c.childrenNodes[u].pointNumber);a[c.pointNumber-i.node._count]\u003d!1}else o.push(c.pointNumber)}n\u003da.filter(Boolean).concat([o]),f.call(\"_guiRestyle\",t,{\"node.groups\":[n]},e)},prepFn:function(t,e,r){c(t,e,r,d,i)}};l.init(d)}}r.name\u003d\"sankey\",r.baseLayoutAttrOverrides\u003dn({hoverlabel:o.hoverlabel},\"plot\",\"nested\"),r.plot\u003dfunction(t){var e\u003di(t.calcdata,\"sankey\")[0];a(t,e),r.updateFx(t)},r.clean\u003dfunction(t,e,r,n){var i\u003dn._has\u0026\u0026n._has(\"sankey\"),a\u003de._has\u0026\u0026e._has(\"sankey\");i\u0026\u0026!a\u0026\u0026(n._paperdiv.selectAll(\".sankey\").remove(),n._paperdiv.selectAll(\".bgsankey\").remove())},r.updateFx\u003dfunction(t){for(var e\u003d0;e\u003ct._fullData.length;e++)h(t,e)}},{\"../../components/dragelement\":681,\"../../components/fx/layout_attributes\":703,\"../../lib\":799,\"../../lib/setcursor\":820,\"../../plot_api/edit_types\":831,\"../../plots/cartesian/select\":869,\"../../plots/get_data\":887,\"../../registry\":927,\"./plot\":1210}],1206:[function(t,e,r){\"use strict\";var n\u003dt(\"strongly-connected-components\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../lib/gup\").wrap,o\u003di.isArrayOrTypedArray,s\u003di.isIndex,l\u003dt(\"../../components/colorscale\");function c(t){var e,r\u003dt.node,a\u003dt.link,c\u003d[],u\u003do(a.color),f\u003do(a.customdata),h\u003d{},p\u003d{},d\u003da.colorscales.length;for(e\u003d0;e\u003cd;e++){var m\u003da.colorscales[e],g\u003dl.extractScale(m,{cLetter:\"c\"}),v\u003dl.makeColorScaleFunc(g);p[m.label]\u003dv}var y\u003d0;for(e\u003d0;e\u003ca.value.length;e++)a.source[e]\u003ey\u0026\u0026(y\u003da.source[e]),a.target[e]\u003ey\u0026\u0026(y\u003da.target[e]);var x,b\u003dy+1;t.node._count\u003db;var _\u003dt.node.groups,w\u003d{};for(e\u003d0;e\u003c_.length;e++){var T\u003d_[e];for(x\u003d0;x\u003cT.length;x++){var k\u003dT[x],M\u003db+e;w.hasOwnProperty(k)?i.warn(\"Node \"+k+\" is already part of a group.\"):w[k]\u003dM}}var A\u003d{source:[],target:[]};for(e\u003d0;e\u003ca.value.length;e++){var S\u003da.value[e],E\u003da.source[e],L\u003da.target[e];if(S\u003e0\u0026\u0026s(E,b)\u0026\u0026s(L,b)\u0026\u0026(!w.hasOwnProperty(E)||!w.hasOwnProperty(L)||w[E]!\u003d\u003dw[L])){w.hasOwnProperty(L)\u0026\u0026(L\u003dw[L]),w.hasOwnProperty(E)\u0026\u0026(E\u003dw[E]),L\u003d+L,h[E\u003d+E]\u003dh[L]\u003d!0;var C\u003d\"\";a.label\u0026\u0026a.label[e]\u0026\u0026(C\u003da.label[e]);var P\u003dnull;C\u0026\u0026p.hasOwnProperty(C)\u0026\u0026(P\u003dp[C]),c.push({pointNumber:e,label:C,color:u?a.color[e]:a.color,customdata:f?a.customdata[e]:a.customdata,concentrationscale:P,source:E,target:L,value:+S}),A.source.push(E),A.target.push(L)}}var I\u003db+_.length,O\u003do(r.color),z\u003do(r.customdata),D\u003d[];for(e\u003d0;e\u003cI;e++)if(h[e]){var R\u003dr.label[e];D.push({group:e\u003eb-1,childrenNodes:[],pointNumber:e,label:R,color:O?r.color[e]:r.color,customdata:z?r.customdata[e]:r.customdata})}var F\u003d!1;return function(t,e,r){for(var a\u003di.init2dArray(t,0),o\u003d0;o\u003cMath.min(e.length,r.length);o++)if(i.isIndex(e[o],t)\u0026\u0026i.isIndex(r[o],t)){if(e[o]\u003d\u003d\u003dr[o])return!0;a[e[o]].push(r[o])}return n(a).components.some((function(t){return t.length\u003e1}))}(I,A.source,A.target)\u0026\u0026(F\u003d!0),{circular:F,links:c,nodes:D,groups:_,groupLookup:w}}e.exports\u003dfunction(t,e){var r\u003dc(e);return a({circular:r.circular,_nodes:r.nodes,_links:r.links,_groups:r.groups,_groupLookup:r.groupLookup})}},{\"../../components/colorscale\":674,\"../../lib\":799,\"../../lib/gup\":796,\"strongly-connected-components\":586}],1207:[function(t,e,r){\"use strict\";e.exports\u003d{nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:\"linear\",cn:{sankey:\"sankey\",sankeyLinks:\"sankey-links\",sankeyLink:\"sankey-link\",sankeyNodeSet:\"sankey-node-set\",sankeyNode:\"sankey-node\",nodeRect:\"node-rect\",nodeLabel:\"node-label\"}}},{}],1208:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../components/color\"),o\u003dt(\"tinycolor2\"),s\u003dt(\"../../plots/domain\").defaults,l\u003dt(\"../../components/fx/hoverlabel_defaults\"),c\u003dt(\"../../plot_api/plot_template\"),u\u003dt(\"../../plots/array_container_defaults\");function f(t,e){function r(r,a){return n.coerce(t,e,i.link.colorscales,r,a)}r(\"label\"),r(\"cmin\"),r(\"cmax\"),r(\"colorscale\")}e.exports\u003dfunction(t,e,r,h){function p(r,a){return n.coerce(t,e,i,r,a)}var d\u003dn.extendDeep(h.hoverlabel,t.hoverlabel),m\u003dt.node,g\u003dc.newContainer(e,\"node\");function v(t,e){return n.coerce(m,g,i.node,t,e)}v(\"label\"),v(\"groups\"),v(\"x\"),v(\"y\"),v(\"pad\"),v(\"thickness\"),v(\"line.color\"),v(\"line.width\"),v(\"hoverinfo\",t.hoverinfo),l(m,g,v,d),v(\"hovertemplate\");var y\u003dh.colorway;v(\"color\",g.label.map((function(t,e){return a.addOpacity(function(t){return y[t%y.length]}(e),.8)}))),v(\"customdata\");var x\u003dt.link||{},b\u003dc.newContainer(e,\"link\");function _(t,e){return n.coerce(x,b,i.link,t,e)}_(\"label\"),_(\"source\"),_(\"target\"),_(\"value\"),_(\"line.color\"),_(\"line.width\"),_(\"hoverinfo\",t.hoverinfo),l(x,b,_,d),_(\"hovertemplate\");var w,T\u003do(h.paper_bgcolor).getLuminance()\u003c.333?\"rgba(255, 255, 255, 0.6)\":\"rgba(0, 0, 0, 0.2)\";_(\"color\",n.repeat(T,b.value.length)),_(\"customdata\"),u(x,b,{name:\"colorscales\",handleItemDefaults:f}),s(e,h,p),p(\"orientation\"),p(\"valueformat\"),p(\"valuesuffix\"),g.x.length\u0026\u0026g.y.length\u0026\u0026(w\u003d\"freeform\"),p(\"arrangement\",w),n.coerceFont(p,\"textfont\",n.extendFlat({},h.font)),e._length\u003dnull}},{\"../../components/color\":662,\"../../components/fx/hoverlabel_defaults\":700,\"../../lib\":799,\"../../plot_api/plot_template\":838,\"../../plots/array_container_defaults\":844,\"../../plots/domain\":877,\"./attributes\":1204,tinycolor2:594}],1209:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),moduleType:\"trace\",name:\"sankey\",basePlotModule:t(\"./base_plot\"),selectPoints:t(\"./select.js\"),categories:[\"noOpacity\"],meta:{}}},{\"./attributes\":1204,\"./base_plot\":1205,\"./calc\":1206,\"./defaults\":1208,\"./plot\":1210,\"./select.js\":1212}],1210:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"./render\"),a\u003dt(\"../../components/fx\"),o\u003dt(\"../../components/color\"),s\u003dt(\"../../lib\"),l\u003dt(\"./constants\").cn,c\u003ds._;function u(t){return\"\"!\u003d\u003dt}function f(t,e){return t.filter((function(t){return t.key\u003d\u003d\u003de.traceId}))}function h(t,e){n.select(t).select(\"path\").style(\"fill-opacity\",e),n.select(t).select(\"rect\").style(\"fill-opacity\",e)}function p(t){n.select(t).select(\"text.name\").style(\"fill\",\"black\")}function d(t){return function(e){return-1!\u003d\u003dt.node.sourceLinks.indexOf(e.link)||-1!\u003d\u003dt.node.targetLinks.indexOf(e.link)}}function m(t){return function(e){return-1!\u003d\u003de.node.sourceLinks.indexOf(t.link)||-1!\u003d\u003de.node.targetLinks.indexOf(t.link)}}function g(t,e,r){e\u0026\u0026r\u0026\u0026f(r,e).selectAll(\".\"+l.sankeyLink).filter(d(e)).call(y.bind(0,e,r,!1))}function v(t,e,r){e\u0026\u0026r\u0026\u0026f(r,e).selectAll(\".\"+l.sankeyLink).filter(d(e)).call(x.bind(0,e,r,!1))}function y(t,e,r,n){var i\u003dn.datum().link.label;n.style(\"fill-opacity\",(function(t){if(!t.link.concentrationscale)return.4})),i\u0026\u0026f(e,t).selectAll(\".\"+l.sankeyLink).filter((function(t){return t.link.label\u003d\u003d\u003di})).style(\"fill-opacity\",(function(t){if(!t.link.concentrationscale)return.4})),r\u0026\u0026f(e,t).selectAll(\".\"+l.sankeyNode).filter(m(t)).call(g)}function x(t,e,r,n){var i\u003dn.datum().link.label;n.style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),i\u0026\u0026f(e,t).selectAll(\".\"+l.sankeyLink).filter((function(t){return t.link.label\u003d\u003d\u003di})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),r\u0026\u0026f(e,t).selectAll(l.sankeyNode).filter(m(t)).call(v)}function b(t,e){var r\u003dt.hoverlabel||{},n\u003ds.nestedProperty(r,e).get();return!Array.isArray(n)\u0026\u0026n}e.exports\u003dfunction(t,e){for(var r\u003dt._fullLayout,s\u003dr._paper,f\u003dr._size,d\u003d0;d\u003ct._fullData.length;d++)if(t._fullData[d].visible\u0026\u0026t._fullData[d].type\u003d\u003d\u003dl.sankey\u0026\u0026!t._fullData[d]._viewInitial){var m\u003dt._fullData[d].node;t._fullData[d]._viewInitial\u003d{node:{groups:m.groups.slice(),x:m.x.slice(),y:m.y.slice()}}}var _\u003dc(t,\"source:\")+\" \",w\u003dc(t,\"target:\")+\" \",T\u003dc(t,\"concentration:\")+\" \",k\u003dc(t,\"incoming flow count:\")+\" \",M\u003dc(t,\"outgoing flow count:\")+\" \";i(t,s,e,{width:f.w,height:f.h,margin:{t:f.t,r:f.r,b:f.b,l:f.l}},{linkEvents:{hover:function(e,r,i){!1!\u003d\u003dt._fullLayout.hovermode\u0026\u0026(n.select(e).call(y.bind(0,r,i,!0)),\"skip\"!\u003d\u003dr.link.trace.link.hoverinfo\u0026\u0026(r.link.fullData\u003dr.link.trace,t.emit(\"plotly_hover\",{event:n.event,points:[r.link]})))},follow:function(e,i){if(!1!\u003d\u003dt._fullLayout.hovermode){var s\u003di.link.trace.link;if(\"none\"!\u003d\u003ds.hoverinfo\u0026\u0026\"skip\"!\u003d\u003ds.hoverinfo){for(var l\u003d[],c\u003d0,f\u003d0;f\u003ci.flow.links.length;f++){var d\u003di.flow.links[f];if(\"closest\"!\u003d\u003dt._fullLayout.hovermode||i.link.pointNumber\u003d\u003d\u003dd.pointNumber){i.link.pointNumber\u003d\u003d\u003dd.pointNumber\u0026\u0026(c\u003df),d.fullData\u003dd.trace,s\u003di.link.trace.link;var m\u003dv(d),g\u003d{valueLabel:n.format(i.valueFormat)(d.value)+i.valueSuffix};l.push({x:m[0],y:m[1],name:g.valueLabel,text:[d.label||\"\",_+d.source.label,w+d.target.label,d.concentrationscale?T+n.format(\"%0.2f\")(d.flow.labelConcentration):\"\"].filter(u).join(\"\u003cbr\u003e\"),color:b(s,\"bgcolor\")||o.addOpacity(d.color,1),borderColor:b(s,\"bordercolor\"),fontFamily:b(s,\"font.family\"),fontSize:b(s,\"font.size\"),fontColor:b(s,\"font.color\"),nameLength:b(s,\"namelength\"),textAlign:b(s,\"align\"),idealAlign:n.event.x\u003cm[0]?\"right\":\"left\",hovertemplate:s.hovertemplate,hovertemplateLabels:g,eventData:[d]})}}a.loneHover(l,{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t,anchorIndex:c}).each((function(){i.link.concentrationscale||h(this,.65),p(this)}))}}function v(t){var e,r;t.circular?(e\u003d(t.circularPathData.leftInnerExtent+t.circularPathData.rightInnerExtent)/2,r\u003dt.circularPathData.verticalFullExtent):(e\u003d(t.source.x1+t.target.x0)/2,r\u003d(t.y0+t.y1)/2);var n\u003d[e,r];return\"v\"\u003d\u003d\u003dt.trace.orientation\u0026\u0026n.reverse(),n[0]+\u003di.parent.translateX,n[1]+\u003di.parent.translateY,n}},unhover:function(e,i,o){!1!\u003d\u003dt._fullLayout.hovermode\u0026\u0026(n.select(e).call(x.bind(0,i,o,!0)),\"skip\"!\u003d\u003di.link.trace.link.hoverinfo\u0026\u0026(i.link.fullData\u003di.link.trace,t.emit(\"plotly_unhover\",{event:n.event,points:[i.link]})),a.loneUnhover(r._hoverlayer.node()))},select:function(e,r){var i\u003dr.link;i.originalEvent\u003dn.event,t._hoverdata\u003d[i],a.click(t,{target:!0})}},nodeEvents:{hover:function(e,r,i){!1!\u003d\u003dt._fullLayout.hovermode\u0026\u0026(n.select(e).call(g,r,i),\"skip\"!\u003d\u003dr.node.trace.node.hoverinfo\u0026\u0026(r.node.fullData\u003dr.node.trace,t.emit(\"plotly_hover\",{event:n.event,points:[r.node]})))},follow:function(e,i){if(!1!\u003d\u003dt._fullLayout.hovermode){var o\u003di.node.trace.node;if(\"none\"!\u003d\u003do.hoverinfo\u0026\u0026\"skip\"!\u003d\u003do.hoverinfo){var s\u003dn.select(e).select(\".\"+l.nodeRect),c\u003dt._fullLayout._paperdiv.node().getBoundingClientRect(),f\u003ds.node().getBoundingClientRect(),d\u003df.left-2-c.left,m\u003df.right+2-c.left,g\u003df.top+f.height/4-c.top,v\u003d{valueLabel:n.format(i.valueFormat)(i.node.value)+i.valueSuffix};i.node.fullData\u003di.node.trace,t._fullLayout._calcInverseTransform(t);var y\u003dt._fullLayout._invScaleX,x\u003dt._fullLayout._invScaleY,_\u003da.loneHover({x0:y*d,x1:y*m,y:x*g,name:n.format(i.valueFormat)(i.node.value)+i.valueSuffix,text:[i.node.label,k+i.node.targetLinks.length,M+i.node.sourceLinks.length].filter(u).join(\"\u003cbr\u003e\"),color:b(o,\"bgcolor\")||i.tinyColorHue,borderColor:b(o,\"bordercolor\"),fontFamily:b(o,\"font.family\"),fontSize:b(o,\"font.size\"),fontColor:b(o,\"font.color\"),nameLength:b(o,\"namelength\"),textAlign:b(o,\"align\"),idealAlign:\"left\",hovertemplate:o.hovertemplate,hovertemplateLabels:v,eventData:[i.node]},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});h(_,.85),p(_)}}},unhover:function(e,i,o){!1!\u003d\u003dt._fullLayout.hovermode\u0026\u0026(n.select(e).call(v,i,o),\"skip\"!\u003d\u003di.node.trace.node.hoverinfo\u0026\u0026(i.node.fullData\u003di.node.trace,t.emit(\"plotly_unhover\",{event:n.event,points:[i.node]})),a.loneUnhover(r._hoverlayer.node()))},select:function(e,r,i){var o\u003dr.node;o.originalEvent\u003dn.event,t._hoverdata\u003d[o],n.select(e).call(v,r,i),a.click(t,{target:!0})}}})}},{\"../../components/color\":662,\"../../components/fx\":702,\"../../lib\":799,\"./constants\":1207,\"./render\":1211,\"@plotly/d3\":58}],1211:[function(t,e,r){\"use strict\";var n\u003dt(\"d3-force\"),i\u003dt(\"d3-interpolate\").interpolateNumber,a\u003dt(\"@plotly/d3\"),o\u003dt(\"@plotly/d3-sankey\"),s\u003dt(\"@plotly/d3-sankey-circular\"),l\u003dt(\"./constants\"),c\u003dt(\"tinycolor2\"),u\u003dt(\"../../components/color\"),f\u003dt(\"../../components/drawing\"),h\u003dt(\"../../lib\"),p\u003dh.strTranslate,d\u003dh.strRotate,m\u003dt(\"../../lib/gup\"),g\u003dm.keyFun,v\u003dm.repeat,y\u003dm.unwrap,x\u003dt(\"../../lib/svg_text_utils\"),b\u003dt(\"../../registry\"),_\u003dt(\"../../constants/alignment\"),w\u003d_.CAP_SHIFT,T\u003d_.LINE_SPACING;function k(t,e,r){var n,i\u003dy(e),a\u003di.trace,u\u003da.domain,f\u003d\"h\"\u003d\u003d\u003da.orientation,p\u003da.node.pad,d\u003da.node.thickness,m\u003dt.width*(u.x[1]-u.x[0]),g\u003dt.height*(u.y[1]-u.y[0]),v\u003di._nodes,x\u003di._links,b\u003di.circular;(n\u003db?s.sankeyCircular().circularLinkGap(0):o.sankey()).iterations(l.sankeyIterations).size(f?[m,g]:[g,m]).nodeWidth(d).nodePadding(p).nodeId((function(t){return t.pointNumber})).nodes(v).links(x);var _,w,T,k\u003dn();for(var M in n.nodePadding()\u003cp\u0026\u0026h.warn(\"node.pad was reduced to \",n.nodePadding(),\" to fit within the figure.\"),i._groupLookup){var A,S\u003dparseInt(i._groupLookup[M]);for(_\u003d0;_\u003ck.nodes.length;_++)if(k.nodes[_].pointNumber\u003d\u003d\u003dS){A\u003dk.nodes[_];break}if(A){var E\u003d{pointNumber:parseInt(M),x0:A.x0,x1:A.x1,y0:A.y0,y1:A.y1,partOfGroup:!0,sourceLinks:[],targetLinks:[]};k.nodes.unshift(E),A.childrenNodes.unshift(E)}}if(function(){for(_\u003d0;_\u003ck.nodes.length;_++){var t,e,r\u003dk.nodes[_],n\u003d{};for(w\u003d0;w\u003cr.targetLinks.length;w++)t\u003d(e\u003dr.targetLinks[w]).source.pointNumber+\":\"+e.target.pointNumber,n.hasOwnProperty(t)||(n[t]\u003d[]),n[t].push(e);var i\u003dObject.keys(n);for(w\u003d0;w\u003ci.length;w++){var a\u003dn[t\u003di[w]],o\u003d0,s\u003d{};for(T\u003d0;T\u003ca.length;T++)s[(e\u003da[T]).label]||(s[e.label]\u003d0),s[e.label]+\u003de.value,o+\u003de.value;for(T\u003d0;T\u003ca.length;T++)(e\u003da[T]).flow\u003d{value:o,labelConcentration:s[e.label]/o,concentration:e.value/o,links:a},e.concentrationscale\u0026\u0026(e.color\u003dc(e.concentrationscale(e.flow.labelConcentration)))}var l\u003d0;for(w\u003d0;w\u003cr.sourceLinks.length;w++)l+\u003dr.sourceLinks[w].value;for(w\u003d0;w\u003cr.sourceLinks.length;w++)(e\u003dr.sourceLinks[w]).concentrationOut\u003de.value/l;var u\u003d0;for(w\u003d0;w\u003cr.targetLinks.length;w++)u+\u003dr.targetLinks[w].value;for(w\u003d0;w\u003cr.targetLinks.length;w++)(e\u003dr.targetLinks[w]).concenrationIn\u003de.value/u}}(),a.node.x.length\u0026\u0026a.node.y.length){for(_\u003d0;_\u003cMath.min(a.node.x.length,a.node.y.length,k.nodes.length);_++)if(a.node.x[_]\u0026\u0026a.node.y[_]){var L\u003d[a.node.x[_]*m,a.node.y[_]*g];k.nodes[_].x0\u003dL[0]-d/2,k.nodes[_].x1\u003dL[0]+d/2;var C\u003dk.nodes[_].y1-k.nodes[_].y0;k.nodes[_].y0\u003dL[1]-C/2,k.nodes[_].y1\u003dL[1]+C/2}if(\"snap\"\u003d\u003d\u003da.arrangement)!function(t){t.forEach((function(t){var e,r,n,i\u003d0,a\u003dt.length;for(t.sort((function(t,e){return t.y0-e.y0})),n\u003d0;n\u003ca;++n)(e\u003dt[n]).y0\u003e\u003di||(r\u003di-e.y0)\u003e1e-6\u0026\u0026(e.y0+\u003dr,e.y1+\u003dr),i\u003de.y1+p}))}(function(t){var e,r,n\u003dt.map((function(t,e){return{x0:t.x0,index:e}})).sort((function(t,e){return t.x0-e.x0})),i\u003d[],a\u003d-1,o\u003d-1/0;for(_\u003d0;_\u003cn.length;_++){var s\u003dt[n[_].index];s.x0\u003eo+d\u0026\u0026(a+\u003d1,e\u003ds.x0),o\u003ds.x0,i[a]||(i[a]\u003d[]),i[a].push(s),r\u003de-s.x0,s.x0+\u003dr,s.x1+\u003dr}return i}(v\u003dk.nodes));n.update(k)}return{circular:b,key:r,trace:a,guid:h.randstr(),horizontal:f,width:m,height:g,nodePad:a.node.pad,nodeLineColor:a.node.line.color,nodeLineWidth:a.node.line.width,linkLineColor:a.link.line.color,linkLineWidth:a.link.line.width,valueFormat:a.valueformat,valueSuffix:a.valuesuffix,textFont:a.textfont,translateX:u.x[0]*t.width+t.margin.l,translateY:t.height-u.y[1]*t.height+t.margin.t,dragParallel:f?g:m,dragPerpendicular:f?m:g,arrangement:a.arrangement,sankey:n,graph:k,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}function M(t,e,r){var n\u003dc(e.color),i\u003de.source.label+\"|\"+e.target.label+\"__\"+r;return e.trace\u003dt.trace,e.curveNumber\u003dt.trace.index,{circular:t.circular,key:i,traceId:t.key,pointNumber:e.pointNumber,link:e,tinyColorHue:u.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkPath:A,linkLineColor:t.linkLineColor,linkLineWidth:t.linkLineWidth,valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,parent:t,interactionState:t.interactionState,flow:e.flow}}function A(){return function(t){if(t.link.circular)return e\u003dt.link,r\u003de.width/2,n\u003de.circularPathData,\"top\"\u003d\u003d\u003de.circularLinkType?\"M \"+n.targetX+\" \"+(n.targetY+r)+\" L\"+n.rightInnerExtent+\" \"+(n.targetY+r)+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightSmallArcRadius+r)+\" 0 0 1 \"+(n.rightFullExtent-r)+\" \"+(n.targetY-n.rightSmallArcRadius)+\"L\"+(n.rightFullExtent-r)+\" \"+n.verticalRightInnerExtent+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightLargeArcRadius+r)+\" 0 0 1 \"+n.rightInnerExtent+\" \"+(n.verticalFullExtent-r)+\"L\"+n.leftInnerExtent+\" \"+(n.verticalFullExtent-r)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftLargeArcRadius+r)+\" 0 0 1 \"+(n.leftFullExtent+r)+\" \"+n.verticalLeftInnerExtent+\"L\"+(n.leftFullExtent+r)+\" \"+(n.sourceY-n.leftSmallArcRadius)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftSmallArcRadius+r)+\" 0 0 1 \"+n.leftInnerExtent+\" \"+(n.sourceY+r)+\"L\"+n.sourceX+\" \"+(n.sourceY+r)+\"L\"+n.sourceX+\" \"+(n.sourceY-r)+\"L\"+n.leftInnerExtent+\" \"+(n.sourceY-r)+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftSmallArcRadius-r)+\" 0 0 0 \"+(n.leftFullExtent-r)+\" \"+(n.sourceY-n.leftSmallArcRadius)+\"L\"+(n.leftFullExtent-r)+\" \"+n.verticalLeftInnerExtent+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftLargeArcRadius-r)+\" 0 0 0 \"+n.leftInnerExtent+\" \"+(n.verticalFullExtent+r)+\"L\"+n.rightInnerExtent+\" \"+(n.verticalFullExtent+r)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightLargeArcRadius-r)+\" 0 0 0 \"+(n.rightFullExtent+r)+\" \"+n.verticalRightInnerExtent+\"L\"+(n.rightFullExtent+r)+\" \"+(n.targetY-n.rightSmallArcRadius)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightSmallArcRadius-r)+\" 0 0 0 \"+n.rightInnerExtent+\" \"+(n.targetY-r)+\"L\"+n.targetX+\" \"+(n.targetY-r)+\"Z\":\"M \"+n.targetX+\" \"+(n.targetY-r)+\" L\"+n.rightInnerExtent+\" \"+(n.targetY-r)+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightSmallArcRadius+r)+\" 0 0 0 \"+(n.rightFullExtent-r)+\" \"+(n.targetY+n.rightSmallArcRadius)+\"L\"+(n.rightFullExtent-r)+\" \"+n.verticalRightInnerExtent+\"A\"+(n.rightLargeArcRadius+r)+\" \"+(n.rightLargeArcRadius+r)+\" 0 0 0 \"+n.rightInnerExtent+\" \"+(n.verticalFullExtent+r)+\"L\"+n.leftInnerExtent+\" \"+(n.verticalFullExtent+r)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftLargeArcRadius+r)+\" 0 0 0 \"+(n.leftFullExtent+r)+\" \"+n.verticalLeftInnerExtent+\"L\"+(n.leftFullExtent+r)+\" \"+(n.sourceY+n.leftSmallArcRadius)+\"A\"+(n.leftLargeArcRadius+r)+\" \"+(n.leftSmallArcRadius+r)+\" 0 0 0 \"+n.leftInnerExtent+\" \"+(n.sourceY-r)+\"L\"+n.sourceX+\" \"+(n.sourceY-r)+\"L\"+n.sourceX+\" \"+(n.sourceY+r)+\"L\"+n.leftInnerExtent+\" \"+(n.sourceY+r)+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftSmallArcRadius-r)+\" 0 0 1 \"+(n.leftFullExtent-r)+\" \"+(n.sourceY+n.leftSmallArcRadius)+\"L\"+(n.leftFullExtent-r)+\" \"+n.verticalLeftInnerExtent+\"A\"+(n.leftLargeArcRadius-r)+\" \"+(n.leftLargeArcRadius-r)+\" 0 0 1 \"+n.leftInnerExtent+\" \"+(n.verticalFullExtent-r)+\"L\"+n.rightInnerExtent+\" \"+(n.verticalFullExtent-r)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightLargeArcRadius-r)+\" 0 0 1 \"+(n.rightFullExtent+r)+\" \"+n.verticalRightInnerExtent+\"L\"+(n.rightFullExtent+r)+\" \"+(n.targetY+n.rightSmallArcRadius)+\"A\"+(n.rightLargeArcRadius-r)+\" \"+(n.rightSmallArcRadius-r)+\" 0 0 1 \"+n.rightInnerExtent+\" \"+(n.targetY+r)+\"L\"+n.targetX+\" \"+(n.targetY+r)+\"Z\";var e,r,n,a\u003dt.link.source.x1,o\u003dt.link.target.x0,s\u003di(a,o),l\u003ds(.5),c\u003ds(.5),u\u003dt.link.y0-t.link.width/2,f\u003dt.link.y0+t.link.width/2,h\u003dt.link.y1-t.link.width/2,p\u003dt.link.y1+t.link.width/2;return\"M\"+a+\",\"+u+\"C\"+l+\",\"+u+\" \"+c+\",\"+h+\" \"+o+\",\"+h+\"L\"+o+\",\"+p+\"C\"+c+\",\"+p+\" \"+l+\",\"+f+\" \"+a+\",\"+f+\"Z\"}}function S(t,e){var r\u003dc(e.color),n\u003dl.nodePadAcross,i\u003dt.nodePad/2;e.dx\u003de.x1-e.x0,e.dy\u003de.y1-e.y0;var a\u003de.dx,o\u003dMath.max(.5,e.dy),s\u003d\"node_\"+e.pointNumber;return e.group\u0026\u0026(s\u003dh.randstr()),e.trace\u003dt.trace,e.curveNumber\u003dt.trace.index,{index:e.pointNumber,key:s,partOfGroup:e.partOfGroup||!1,group:e.group,traceId:t.key,trace:t.trace,node:e,nodePad:t.nodePad,nodeLineColor:t.nodeLineColor,nodeLineWidth:t.nodeLineWidth,textFont:t.textFont,size:t.horizontal?t.height:t.width,visibleWidth:Math.ceil(a),visibleHeight:o,zoneX:-n,zoneY:-i,zoneWidth:a+2*n,zoneHeight:o+2*i,labelY:t.horizontal?e.dy/2+1:e.dx/2+1,left:1\u003d\u003d\u003de.originalLayer,sizeAcross:t.width,forceLayouts:t.forceLayouts,horizontal:t.horizontal,darkBackground:r.getBrightness()\u003c\u003d128,tinyColorHue:u.tinyRGB(r),tinyColorAlpha:r.getAlpha(),valueFormat:t.valueFormat,valueSuffix:t.valueSuffix,sankey:t.sankey,graph:t.graph,arrangement:t.arrangement,uniqueNodeLabelPathId:[t.guid,t.key,s].join(\"_\"),interactionState:t.interactionState,figure:t}}function E(t){t.attr(\"transform\",(function(t){return p(t.node.x0.toFixed(3),t.node.y0.toFixed(3))}))}function L(t){t.call(E)}function C(t,e){t.call(L),e.attr(\"d\",A())}function P(t){t.attr(\"width\",(function(t){return t.node.x1-t.node.x0})).attr(\"height\",(function(t){return t.visibleHeight}))}function I(t){return t.link.width\u003e1||t.linkLineWidth\u003e0}function O(t){return p(t.translateX,t.translateY)+(t.horizontal?\"matrix(1 0 0 1 0 0)\":\"matrix(0 1 1 0 0 0)\")}function z(t,e,r){t.on(\".basic\",null).on(\"mouseover.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.hover(this,t,e),t.interactionState.hovered\u003d[this,t])})).on(\"mousemove.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.follow(this,t),t.interactionState.hovered\u003d[this,t])})).on(\"mouseout.basic\",(function(t){t.interactionState.dragInProgress||t.partOfGroup||(r.unhover(this,t,e),t.interactionState.hovered\u003d!1)})).on(\"click.basic\",(function(t){t.interactionState.hovered\u0026\u0026(r.unhover(this,t,e),t.interactionState.hovered\u003d!1),t.interactionState.dragInProgress||t.partOfGroup||r.select(this,t,e)}))}function D(t,e,r,i){var o\u003da.behavior.drag().origin((function(t){return{x:t.node.x0+t.visibleWidth/2,y:t.node.y0+t.visibleHeight/2}})).on(\"dragstart\",(function(a){if(\"fixed\"!\u003d\u003da.arrangement\u0026\u0026(h.ensureSingle(i._fullLayout._infolayer,\"g\",\"dragcover\",(function(t){i._fullLayout._dragCover\u003dt})),h.raiseToTop(this),a.interactionState.dragInProgress\u003da.node,F(a.node),a.interactionState.hovered\u0026\u0026(r.nodeEvents.unhover.apply(0,a.interactionState.hovered),a.interactionState.hovered\u003d!1),\"snap\"\u003d\u003d\u003da.arrangement)){var o\u003da.traceId+\"|\"+a.key;a.forceLayouts[o]?a.forceLayouts[o].alpha(1):function(t,e,r,i){!function(t){for(var e\u003d0;e\u003ct.length;e++)t[e].y\u003d(t[e].y0+t[e].y1)/2,t[e].x\u003d(t[e].x0+t[e].x1)/2}(r.graph.nodes);var a\u003dr.graph.nodes.filter((function(t){return t.originalX\u003d\u003d\u003dr.node.originalX})).filter((function(t){return!t.partOfGroup}));r.forceLayouts[e]\u003dn.forceSimulation(a).alphaDecay(0).force(\"collide\",n.forceCollide().radius((function(t){return t.dy/2+r.nodePad/2})).strength(1).iterations(l.forceIterations)).force(\"constrain\",function(t,e,r,n){return function(){for(var t\u003d0,i\u003d0;i\u003cr.length;i++){var a\u003dr[i];a\u003d\u003d\u003dn.interactionState.dragInProgress?(a.x\u003da.lastDraggedX,a.y\u003da.lastDraggedY):(a.vx\u003d(a.originalX-a.x)/l.forceTicksPerFrame,a.y\u003dMath.min(n.size-a.dy/2,Math.max(a.dy/2,a.y))),t\u003dMath.max(t,Math.abs(a.vx),Math.abs(a.vy))}!n.interactionState.dragInProgress\u0026\u0026t\u003c.1\u0026\u0026n.forceLayouts[e].alpha()\u003e0\u0026\u0026n.forceLayouts[e].alpha(0)}}(0,e,a,r)).stop()}(0,o,a),function(t,e,r,n,i){window.requestAnimationFrame((function a(){var o;for(o\u003d0;o\u003cl.forceTicksPerFrame;o++)r.forceLayouts[n].tick();if(function(t){for(var e\u003d0;e\u003ct.length;e++)t[e].y0\u003dt[e].y-t[e].dy/2,t[e].y1\u003dt[e].y0+t[e].dy,t[e].x0\u003dt[e].x-t[e].dx/2,t[e].x1\u003dt[e].x0+t[e].dx}(r.graph.nodes),r.sankey.update(r.graph),C(t.filter(B(r)),e),r.forceLayouts[n].alpha()\u003e0)window.requestAnimationFrame(a);else{var s\u003dr.node.originalX;r.node.x0\u003ds-r.visibleWidth/2,r.node.x1\u003ds+r.visibleWidth/2,R(r,i)}}))}(t,e,a,o,i)}})).on(\"drag\",(function(r){if(\"fixed\"!\u003d\u003dr.arrangement){var n\u003da.event.x,i\u003da.event.y;\"snap\"\u003d\u003d\u003dr.arrangement?(r.node.x0\u003dn-r.visibleWidth/2,r.node.x1\u003dn+r.visibleWidth/2,r.node.y0\u003di-r.visibleHeight/2,r.node.y1\u003di+r.visibleHeight/2):(\"freeform\"\u003d\u003d\u003dr.arrangement\u0026\u0026(r.node.x0\u003dn-r.visibleWidth/2,r.node.x1\u003dn+r.visibleWidth/2),i\u003dMath.max(0,Math.min(r.size-r.visibleHeight/2,i)),r.node.y0\u003di-r.visibleHeight/2,r.node.y1\u003di+r.visibleHeight/2),F(r.node),\"snap\"!\u003d\u003dr.arrangement\u0026\u0026(r.sankey.update(r.graph),C(t.filter(B(r)),e))}})).on(\"dragend\",(function(t){if(\"fixed\"!\u003d\u003dt.arrangement){t.interactionState.dragInProgress\u003d!1;for(var e\u003d0;e\u003ct.node.childrenNodes.length;e++)t.node.childrenNodes[e].x\u003dt.node.x,t.node.childrenNodes[e].y\u003dt.node.y;\"snap\"!\u003d\u003dt.arrangement\u0026\u0026R(t,i)}}));t.on(\".drag\",null).call(o)}function R(t,e){for(var r\u003d[],n\u003d[],i\u003d0;i\u003ct.graph.nodes.length;i++){var a\u003d(t.graph.nodes[i].x0+t.graph.nodes[i].x1)/2,o\u003d(t.graph.nodes[i].y0+t.graph.nodes[i].y1)/2;r.push(a/t.figure.width),n.push(o/t.figure.height)}b.call(\"_guiRestyle\",e,{\"node.x\":[r],\"node.y\":[n]},t.trace.index).then((function(){e._fullLayout._dragCover\u0026\u0026e._fullLayout._dragCover.remove()}))}function F(t){t.lastDraggedX\u003dt.x0+t.dx/2,t.lastDraggedY\u003dt.y0+t.dy/2}function B(t){return function(e){return e.node.originalX\u003d\u003d\u003dt.node.originalX}}e.exports\u003dfunction(t,e,r,n,i){var o\u003d!1;h.ensureSingle(t._fullLayout._infolayer,\"g\",\"first-render\",(function(){o\u003d!0}));var s\u003dt._fullLayout._dragCover,m\u003dr.filter((function(t){return y(t).trace.visible})).map(k.bind(null,n)),b\u003de.selectAll(\".\"+l.cn.sankey).data(m,g);b.exit().remove(),b.enter().append(\"g\").classed(l.cn.sankey,!0).style(\"box-sizing\",\"content-box\").style(\"position\",\"absolute\").style(\"left\",0).style(\"shape-rendering\",\"geometricPrecision\").style(\"pointer-events\",\"auto\").attr(\"transform\",O),b.each((function(e,r){t._fullData[r]._sankey\u003de;var n\u003d\"bgsankey-\"+e.trace.uid+\"-\"+r;h.ensureSingle(t._fullLayout._draggers,\"rect\",n),t._fullData[r]._bgRect\u003da.select(\".\"+n),t._fullData[r]._bgRect.style(\"pointer-events\",\"all\").attr(\"width\",e.width).attr(\"height\",e.height).attr(\"x\",e.translateX).attr(\"y\",e.translateY).classed(\"bgsankey\",!0).style({fill:\"transparent\",\"stroke-width\":0})})),b.transition().ease(l.ease).duration(l.duration).attr(\"transform\",O);var _\u003db.selectAll(\".\"+l.cn.sankeyLinks).data(v,g);_.enter().append(\"g\").classed(l.cn.sankeyLinks,!0).style(\"fill\",\"none\");var L\u003d_.selectAll(\".\"+l.cn.sankeyLink).data((function(t){return t.graph.links.filter((function(t){return t.value})).map(M.bind(null,t))}),g);L.enter().append(\"path\").classed(l.cn.sankeyLink,!0).call(z,b,i.linkEvents),L.style(\"stroke\",(function(t){return I(t)?u.tinyRGB(c(t.linkLineColor)):t.tinyColorHue})).style(\"stroke-opacity\",(function(t){return I(t)?u.opacity(t.linkLineColor):t.tinyColorAlpha})).style(\"fill\",(function(t){return t.tinyColorHue})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})).style(\"stroke-width\",(function(t){return I(t)?t.linkLineWidth:1})).attr(\"d\",A()),L.style(\"opacity\",(function(){return t._context.staticPlot||o||s?1:0})).transition().ease(l.ease).duration(l.duration).style(\"opacity\",1),L.exit().transition().ease(l.ease).duration(l.duration).style(\"opacity\",0).remove();var C\u003db.selectAll(\".\"+l.cn.sankeyNodeSet).data(v,g);C.enter().append(\"g\").classed(l.cn.sankeyNodeSet,!0),C.style(\"cursor\",(function(t){switch(t.arrangement){case\"fixed\":return\"default\";case\"perpendicular\":return\"ns-resize\";default:return\"move\"}}));var R\u003dC.selectAll(\".\"+l.cn.sankeyNode).data((function(t){var e\u003dt.graph.nodes;return function(t){var e,r\u003d[];for(e\u003d0;e\u003ct.length;e++)t[e].originalX\u003d(t[e].x0+t[e].x1)/2,t[e].originalY\u003d(t[e].y0+t[e].y1)/2,-1\u003d\u003d\u003dr.indexOf(t[e].originalX)\u0026\u0026r.push(t[e].originalX);for(r.sort((function(t,e){return t-e})),e\u003d0;e\u003ct.length;e++)t[e].originalLayerIndex\u003dr.indexOf(t[e].originalX),t[e].originalLayer\u003dt[e].originalLayerIndex/(r.length-1)}(e),e.map(S.bind(null,t))}),g);R.enter().append(\"g\").classed(l.cn.sankeyNode,!0).call(E).style(\"opacity\",(function(e){return!t._context.staticPlot\u0026\u0026!o||e.partOfGroup?0:1})),R.call(z,b,i.nodeEvents).call(D,L,i,t),R.transition().ease(l.ease).duration(l.duration).call(E).style(\"opacity\",(function(t){return t.partOfGroup?0:1})),R.exit().transition().ease(l.ease).duration(l.duration).style(\"opacity\",0).remove();var F\u003dR.selectAll(\".\"+l.cn.nodeRect).data(v);F.enter().append(\"rect\").classed(l.cn.nodeRect,!0).call(P),F.style(\"stroke-width\",(function(t){return t.nodeLineWidth})).style(\"stroke\",(function(t){return u.tinyRGB(c(t.nodeLineColor))})).style(\"stroke-opacity\",(function(t){return u.opacity(t.nodeLineColor)})).style(\"fill\",(function(t){return t.tinyColorHue})).style(\"fill-opacity\",(function(t){return t.tinyColorAlpha})),F.transition().ease(l.ease).duration(l.duration).call(P);var B\u003dR.selectAll(\".\"+l.cn.nodeLabel).data(v);B.enter().append(\"text\").classed(l.cn.nodeLabel,!0).style(\"cursor\",\"default\"),B.attr(\"data-notex\",1).text((function(t){return t.node.label})).each((function(e){var r\u003da.select(this);f.font(r,e.textFont),x.convertToTspans(r,t)})).style(\"text-shadow\",x.makeTextShadow(t._fullLayout.paper_bgcolor)).attr(\"text-anchor\",(function(t){return t.horizontal\u0026\u0026t.left?\"end\":\"start\"})).attr(\"transform\",(function(t){var e\u003da.select(this),r\u003dx.lineCount(e),n\u003dt.textFont.size*((r-1)*T-w),i\u003dt.nodeLineWidth/2+3,o\u003d((t.horizontal?t.visibleHeight:t.visibleWidth)-n)/2;t.horizontal\u0026\u0026(t.left?i\u003d-i:i+\u003dt.visibleWidth);var s\u003dt.horizontal?\"\":\"scale(-1,1)\"+d(90);return p(t.horizontal?i:o,t.horizontal?o:i)+s})),B.transition().ease(l.ease).duration(l.duration)}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../constants/alignment\":767,\"../../lib\":799,\"../../lib/gup\":796,\"../../lib/svg_text_utils\":824,\"../../registry\":927,\"./constants\":1207,\"@plotly/d3\":58,\"@plotly/d3-sankey\":57,\"@plotly/d3-sankey-circular\":56,\"d3-force\":166,\"d3-interpolate\":168,tinycolor2:594}],1212:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){for(var r\u003d[],n\u003dt.cd[0].trace,i\u003dn._sankey.graph.nodes,a\u003d0;a\u003ci.length;a++){var o\u003di[a];if(!o.partOfGroup){var s\u003d[(o.x0+o.x1)/2,(o.y0+o.y1)/2];\"v\"\u003d\u003d\u003dn.orientation\u0026\u0026s.reverse(),e\u0026\u0026e.contains(s,!1,a,t)\u0026\u0026r.push({pointNumber:o.pointNumber})}}return r}},{}],1213:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e){for(var r\u003d0;r\u003ct.length;r++)t[r].i\u003dr;n.mergeArray(e.text,t,\"tx\"),n.mergeArray(e.texttemplate,t,\"txt\"),n.mergeArray(e.hovertext,t,\"htx\"),n.mergeArray(e.customdata,t,\"data\"),n.mergeArray(e.textposition,t,\"tp\"),e.textfont\u0026\u0026(n.mergeArrayCastPositive(e.textfont.size,t,\"ts\"),n.mergeArray(e.textfont.color,t,\"tc\"),n.mergeArray(e.textfont.family,t,\"tf\"));var i\u003de.marker;if(i){n.mergeArrayCastPositive(i.size,t,\"ms\"),n.mergeArrayCastPositive(i.opacity,t,\"mo\"),n.mergeArray(i.symbol,t,\"mx\"),n.mergeArray(i.color,t,\"mc\");var a\u003di.line;i.line\u0026\u0026(n.mergeArray(a.color,t,\"mlc\"),n.mergeArrayCastPositive(a.width,t,\"mlw\"));var o\u003di.gradient;o\u0026\u0026\"none\"!\u003d\u003do.type\u0026\u0026(n.mergeArray(o.type,t,\"mgt\"),n.mergeArray(o.color,t,\"mgc\"))}}},{\"../../lib\":799}],1214:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,i\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../../components/colorscale/attributes\"),s\u003dt(\"../../plots/font_attributes\"),l\u003dt(\"../../components/drawing/attributes\").dash,c\u003dt(\"../../components/drawing\"),u\u003dt(\"./constants\"),f\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003d{x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},x0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dx:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\",anim:!0},y0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\",anim:!0},dy:{valType:\"number\",dflt:1,editType:\"calc\",anim:!0},xperiod:{valType:\"any\",dflt:0,editType:\"calc\"},yperiod:{valType:\"any\",dflt:0,editType:\"calc\"},xperiod0:{valType:\"any\",editType:\"calc\"},yperiod0:{valType:\"any\",editType:\"calc\"},xperiodalignment:{valType:\"enumerated\",values:[\"start\",\"middle\",\"end\"],dflt:\"middle\",editType:\"calc\"},yperiodalignment:{valType:\"enumerated\",values:[\"start\",\"middle\",\"end\"],dflt:\"middle\",editType:\"calc\"},xhoverformat:n(\"x\"),yhoverformat:n(\"y\"),stackgroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},orientation:{valType:\"enumerated\",values:[\"v\",\"h\"],editType:\"calc\"},groupnorm:{valType:\"enumerated\",values:[\"\",\"fraction\",\"percent\"],dflt:\"\",editType:\"calc\"},stackgaps:{valType:\"enumerated\",values:[\"infer zero\",\"interpolate\"],dflt:\"infer zero\",editType:\"calc\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"calc\"},texttemplate:i({},{}),hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0,editType:\"style\"},mode:{valType:\"flaglist\",flags:[\"lines\",\"markers\",\"text\"],extras:[\"none\"],editType:\"calc\"},hoveron:{valType:\"flaglist\",flags:[\"points\",\"fills\"],editType:\"style\"},hovertemplate:a({},{keys:u.eventDataKeys}),line:{color:{valType:\"color\",editType:\"style\",anim:!0},width:{valType:\"number\",min:0,dflt:2,editType:\"style\",anim:!0},shape:{valType:\"enumerated\",values:[\"linear\",\"spline\",\"hv\",\"vh\",\"hvh\",\"vhv\"],dflt:\"linear\",editType:\"plot\"},smoothing:{valType:\"number\",min:0,max:1.3,dflt:1,editType:\"plot\"},dash:f({},l,{editType:\"style\"}),simplify:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},connectgaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},cliponaxis:{valType:\"boolean\",dflt:!0,editType:\"plot\"},fill:{valType:\"enumerated\",values:[\"none\",\"tozeroy\",\"tozerox\",\"tonexty\",\"tonextx\",\"toself\",\"tonext\"],editType:\"calc\"},fillcolor:{valType:\"color\",editType:\"style\",anim:!0},marker:f({symbol:{valType:\"enumerated\",values:c.symbolList,dflt:\"circle\",arrayOk:!0,editType:\"style\"},opacity:{valType:\"number\",min:0,max:1,arrayOk:!0,editType:\"style\",anim:!0},size:{valType:\"number\",min:0,dflt:6,arrayOk:!0,editType:\"calc\",anim:!0},maxdisplayed:{valType:\"number\",min:0,dflt:0,editType:\"plot\"},sizeref:{valType:\"number\",dflt:1,editType:\"calc\"},sizemin:{valType:\"number\",min:0,dflt:0,editType:\"calc\"},sizemode:{valType:\"enumerated\",values:[\"diameter\",\"area\"],dflt:\"diameter\",editType:\"calc\"},line:f({width:{valType:\"number\",min:0,arrayOk:!0,editType:\"style\",anim:!0},editType:\"calc\"},o(\"marker.line\",{anim:!0})),gradient:{type:{valType:\"enumerated\",values:[\"radial\",\"horizontal\",\"vertical\",\"none\"],arrayOk:!0,dflt:\"none\",editType:\"calc\"},color:{valType:\"color\",arrayOk:!0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},o(\"marker\",{anim:!0})),selected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},unselected:{marker:{opacity:{valType:\"number\",min:0,max:1,editType:\"style\"},color:{valType:\"color\",editType:\"style\"},size:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},textfont:{color:{valType:\"color\",editType:\"style\"},editType:\"style\"},editType:\"style\"},textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\"],dflt:\"middle center\",arrayOk:!0,editType:\"calc\"},textfont:s({editType:\"calc\",colorEditType:\"style\",arrayOk:!0})}},{\"../../components/colorscale/attributes\":669,\"../../components/drawing\":684,\"../../components/drawing/attributes\":683,\"../../lib/extend\":789,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/font_attributes\":878,\"../../plots/template_attributes\":922,\"./constants\":1218}],1215:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../../plots/cartesian/align_period\"),s\u003dt(\"../../constants/numerical\").BADNUM,l\u003dt(\"./subtypes\"),c\u003dt(\"./colorscale_calc\"),u\u003dt(\"./arrays_to_calcdata\"),f\u003dt(\"./calc_selection\");function h(t,e,r,n,i,o,s){var c\u003de._length,u\u003dt._fullLayout,f\u003dr._id,h\u003dn._id,p\u003du._firstScatter[m(e)]\u003d\u003d\u003de.uid,d\u003d(g(e,u,r,n)||{}).orientation,v\u003de.fill;r._minDtick\u003d0,n._minDtick\u003d0;var y\u003d{padded:!0},x\u003d{padded:!0};s\u0026\u0026(y.ppad\u003dx.ppad\u003ds);var b\u003dc\u003c2||i[0]!\u003d\u003di[c-1]||o[0]!\u003d\u003do[c-1];b\u0026\u0026(\"tozerox\"\u003d\u003d\u003dv||\"tonextx\"\u003d\u003d\u003dv\u0026\u0026(p||\"h\"\u003d\u003d\u003dd))?y.tozero\u003d!0:(e.error_y||{}).visible||\"tonexty\"!\u003d\u003dv\u0026\u0026\"tozeroy\"!\u003d\u003dv\u0026\u0026(l.hasMarkers(e)||l.hasText(e))||(y.padded\u003d!1,y.ppad\u003d0),b\u0026\u0026(\"tozeroy\"\u003d\u003d\u003dv||\"tonexty\"\u003d\u003d\u003dv\u0026\u0026(p||\"v\"\u003d\u003d\u003dd))?x.tozero\u003d!0:\"tonextx\"!\u003d\u003dv\u0026\u0026\"tozerox\"!\u003d\u003dv||(x.padded\u003d!1),f\u0026\u0026(e._extremes[f]\u003da.findExtremes(r,i,y)),h\u0026\u0026(e._extremes[h]\u003da.findExtremes(n,o,x))}function p(t,e){if(l.hasMarkers(t)){var r,n\u003dt.marker,o\u003d1.6*(t.marker.sizeref||1);if(r\u003d\"area\"\u003d\u003d\u003dt.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/o),3)}:function(t){return Math.max((t||0)/o,3)},i.isArrayOrTypedArray(n.size)){var s\u003d{type:\"linear\"};a.setConvert(s);for(var c\u003ds.makeCalcdata(t.marker,\"size\"),u\u003dnew Array(e),f\u003d0;f\u003ce;f++)u[f]\u003dr(c[f]);return u}return r(n.size)}}function d(t,e){var r\u003dm(e),n\u003dt._firstScatter;n[r]||(n[r]\u003de.uid)}function m(t){var e\u003dt.stackgroup;return t.xaxis+t.yaxis+t.type+(e?\"-\"+e:\"\")}function g(t,e,r,n){var i\u003dt.stackgroup;if(i){var a\u003de._scatterStackOpts[r._id+n._id][i],o\u003d\"v\"\u003d\u003d\u003da.orientation?n:r;return\"linear\"\u003d\u003d\u003do.type||\"log\"\u003d\u003d\u003do.type?a:void 0}}e.exports\u003d{calc:function(t,e){var r,l,m,v,y,x,b\u003dt._fullLayout,_\u003da.getFromId(t,e.xaxis||\"x\"),w\u003da.getFromId(t,e.yaxis||\"y\"),T\u003d_.makeCalcdata(e,\"x\"),k\u003dw.makeCalcdata(e,\"y\"),M\u003do(e,_,\"x\",T),A\u003do(e,w,\"y\",k),S\u003de._length,E\u003dnew Array(S),L\u003de.ids,C\u003dg(e,b,_,w),P\u003d!1;d(b,e);var I,O\u003d\"x\",z\u003d\"y\";C?(i.pushUnique(C.traceIndices,e._expandedIndex),(r\u003d\"v\"\u003d\u003d\u003dC.orientation)?(z\u003d\"s\",I\u003d\"x\"):(O\u003d\"s\",I\u003d\"y\"),y\u003d\"interpolate\"\u003d\u003d\u003dC.stackgaps):h(t,e,_,w,M,A,p(e,S));var D\u003d!!e.xperiodalignment,R\u003d!!e.yperiodalignment;for(l\u003d0;l\u003cS;l++){var F\u003dE[l]\u003d{},B\u003dn(M[l]),N\u003dn(A[l]);B\u0026\u0026N?(F[O]\u003dM[l],F[z]\u003dA[l],D\u0026\u0026(F.orig_x\u003dT[l]),R\u0026\u0026(F.orig_y\u003dk[l])):C\u0026\u0026(r?B:N)?(F[I]\u003dr?M[l]:A[l],F.gap\u003d!0,y?(F.s\u003ds,P\u003d!0):F.s\u003d0):F[O]\u003dF[z]\u003ds,L\u0026\u0026(F.id\u003dString(L[l]))}if(u(E,e),c(t,e),f(E,e),C){for(l\u003d0;l\u003cE.length;)E[l][I]\u003d\u003d\u003ds?E.splice(l,1):l++;if(i.sort(E,(function(t,e){return t[I]-e[I]||t.i-e.i})),P){for(l\u003d0;l\u003cE.length-1\u0026\u0026E[l].gap;)l++;for((x\u003dE[l].s)||(x\u003dE[l].s\u003d0),m\u003d0;m\u003cl;m++)E[m].s\u003dx;for(v\u003dE.length-1;v\u003el\u0026\u0026E[v].gap;)v--;for(x\u003dE[v].s,m\u003dE.length-1;m\u003ev;m--)E[m].s\u003dx;for(;l\u003cv;)if(E[++l].gap){for(m\u003dl+1;E[m].gap;)m++;for(var j\u003dE[l-1][I],U\u003dE[l-1].s,V\u003d(E[m].s-U)/(E[m][I]-j);l\u003cm;)E[l].s\u003dU+(E[l][I]-j)*V,l++}}}return E},calcMarkerSize:p,calcAxisExpansion:h,setFirstScatter:d,getStackOpts:g}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849,\"./arrays_to_calcdata\":1213,\"./calc_selection\":1216,\"./colorscale_calc\":1217,\"./subtypes\":1239,\"fast-isnumeric\":245}],1216:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e){n.isArrayOrTypedArray(e.selectedpoints)\u0026\u0026n.tagSelected(t,e)}},{\"../../lib\":799}],1217:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/helpers\").hasColorscale,i\u003dt(\"../../components/colorscale/calc\"),a\u003dt(\"./subtypes\");e.exports\u003dfunction(t,e){a.hasLines(e)\u0026\u0026n(e,\"line\")\u0026\u0026i(t,e,{vals:e.line.color,containerStr:\"line\",cLetter:\"c\"}),a.hasMarkers(e)\u0026\u0026(n(e,\"marker\")\u0026\u0026i(t,e,{vals:e.marker.color,containerStr:\"marker\",cLetter:\"c\"}),n(e,\"marker.line\")\u0026\u0026i(t,e,{vals:e.marker.line.color,containerStr:\"marker.line\",cLetter:\"c\"}))}},{\"../../components/colorscale/calc\":670,\"../../components/colorscale/helpers\":673,\"./subtypes\":1239}],1218:[function(t,e,r){\"use strict\";e.exports\u003d{PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20,eventDataKeys:[]}},{}],1219:[function(t,e,r){\"use strict\";var n\u003dt(\"./calc\");function i(t,e,r,n,i,a,o){i[n]\u003d!0;var s\u003d{i:null,gap:!0,s:0};if(s[o]\u003dr,t.splice(e,0,s),e\u0026\u0026r\u003d\u003d\u003dt[e-1][o]){var l\u003dt[e-1];s.s\u003dl.s,s.i\u003dl.i,s.gap\u003dl.gap}else a\u0026\u0026(s.s\u003dfunction(t,e,r,n){var i\u003dt[e-1],a\u003dt[e+1];return a?i?i.s+(a.s-i.s)*(r-i[n])/(a[n]-i[n]):a.s:i.s}(t,e,r,o));e||(t[0].t\u003dt[1].t,t[0].trace\u003dt[1].trace,delete t[1].t,delete t[1].trace)}e.exports\u003dfunction(t,e){var r\u003de.xaxis,a\u003de.yaxis,o\u003dr._id+a._id,s\u003dt._fullLayout._scatterStackOpts[o];if(s){var l,c,u,f,h,p,d,m,g,v,y,x,b,_,w,T\u003dt.calcdata;for(var k in s){var M\u003d(v\u003ds[k]).traceIndices;if(M.length){for(y\u003d\"interpolate\"\u003d\u003d\u003dv.stackgaps,x\u003dv.groupnorm,\"v\"\u003d\u003d\u003dv.orientation?(b\u003d\"x\",_\u003d\"y\"):(b\u003d\"y\",_\u003d\"x\"),w\u003dnew Array(M.length),l\u003d0;l\u003cw.length;l++)w[l]\u003d!1;p\u003dT[M[0]];var A\u003dnew Array(p.length);for(l\u003d0;l\u003cp.length;l++)A[l]\u003dp[l][b];for(l\u003d1;l\u003cM.length;l++){for(h\u003dT[M[l]],c\u003du\u003d0;c\u003ch.length;c++){for(d\u003dh[c][b];d\u003eA[u]\u0026\u0026u\u003cA.length;u++)i(h,c,A[u],l,w,y,b),c++;if(d!\u003d\u003dA[u]){for(f\u003d0;f\u003cl;f++)i(T[M[f]],u,d,f,w,y,b);A.splice(u,0,d)}u++}for(;u\u003cA.length;u++)i(h,c,A[u],l,w,y,b),c++}var S\u003dA.length;for(c\u003d0;c\u003cp.length;c++){for(m\u003dp[c][_]\u003dp[c].s,l\u003d1;l\u003cM.length;l++)(h\u003dT[M[l]])[0].trace._rawLength\u003dh[0].trace._length,h[0].trace._length\u003dS,m+\u003dh[c].s,h[c][_]\u003dm;if(x)for(g\u003d(\"fraction\"\u003d\u003d\u003dx?m:m/100)||1,l\u003d0;l\u003cM.length;l++){var E\u003dT[M[l]][c];E[_]/\u003dg,E.sNorm\u003dE.s/g}}for(l\u003d0;l\u003cM.length;l++){var L\u003d(h\u003dT[M[l]])[0].trace,C\u003dn.calcMarkerSize(L,L._rawLength),P\u003dArray.isArray(C);if(C\u0026\u0026w[l]||P){var I\u003dC;for(C\u003dnew Array(S),c\u003d0;c\u003cS;c++)C[c]\u003dh[c].gap?0:P?I[h[c].i]:I}var O\u003dnew Array(S),z\u003dnew Array(S);for(c\u003d0;c\u003cS;c++)O[c]\u003dh[c].x,z[c]\u003dh[c].y;n.calcAxisExpansion(t,L,r,a,O,z,C),h[0].t.orientation\u003dv.orientation}}}}}},{\"./calc\":1215}],1220:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t){for(var e\u003d0;e\u003ct.length;e++){var r\u003dt[e];if(\"scatter\"\u003d\u003d\u003dr.type){var n\u003dr.fill;if(\"none\"!\u003d\u003dn\u0026\u0026\"toself\"!\u003d\u003dn\u0026\u0026(r.opacity\u003dvoid 0,\"tonexty\"\u003d\u003d\u003dn||\"tonextx\"\u003d\u003d\u003dn))for(var i\u003de-1;i\u003e\u003d0;i--){var a\u003dt[i];if(\"scatter\"\u003d\u003d\u003da.type\u0026\u0026a.xaxis\u003d\u003d\u003dr.xaxis\u0026\u0026a.yaxis\u003d\u003d\u003dr.yaxis){a.opacity\u003dvoid 0;break}}}}}},{}],1221:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\"),a\u003dt(\"./attributes\"),o\u003dt(\"./constants\"),s\u003dt(\"./subtypes\"),l\u003dt(\"./xy_defaults\"),c\u003dt(\"./period_defaults\"),u\u003dt(\"./stack_defaults\"),f\u003dt(\"./marker_defaults\"),h\u003dt(\"./line_defaults\"),p\u003dt(\"./line_shape_defaults\"),d\u003dt(\"./text_defaults\"),m\u003dt(\"./fillcolor_defaults\");e.exports\u003dfunction(t,e,r,g){function v(r,i){return n.coerce(t,e,a,r,i)}var y\u003dl(t,e,g,v);if(y||(e.visible\u003d!1),e.visible){c(t,e,g,v),v(\"xhoverformat\"),v(\"yhoverformat\");var x\u003du(t,e,g,v),b\u003d!x\u0026\u0026y\u003co.PTS_LINESONLY?\"lines+markers\":\"lines\";v(\"text\"),v(\"hovertext\"),v(\"mode\",b),s.hasLines(e)\u0026\u0026(h(t,e,r,g,v),p(t,e,v),v(\"connectgaps\"),v(\"line.simplify\")),s.hasMarkers(e)\u0026\u0026f(t,e,r,g,v,{gradient:!0}),s.hasText(e)\u0026\u0026(v(\"texttemplate\"),d(t,e,g,v));var _\u003d[];(s.hasMarkers(e)||s.hasText(e))\u0026\u0026(v(\"cliponaxis\"),v(\"marker.maxdisplayed\"),_.push(\"points\")),v(\"fill\",x?x.fillDflt:\"none\"),\"none\"!\u003d\u003de.fill\u0026\u0026(m(t,e,r,v),s.hasLines(e)||p(t,e,v));var w\u003d(e.line||{}).color,T\u003d(e.marker||{}).color;\"tonext\"!\u003d\u003de.fill\u0026\u0026\"toself\"!\u003d\u003de.fill||_.push(\"fills\"),v(\"hoveron\",_.join(\"+\")||\"points\"),\"fills\"!\u003d\u003de.hoveron\u0026\u0026v(\"hovertemplate\");var k\u003di.getComponentMethod(\"errorbars\",\"supplyDefaults\");k(t,e,w||T||r,{axis:\"y\"}),k(t,e,w||T||r,{axis:\"x\",inherit:\"y\"}),n.coerceSelectionMarkerOpacity(e,v)}}},{\"../../lib\":799,\"../../registry\":927,\"./attributes\":1214,\"./constants\":1218,\"./fillcolor_defaults\":1222,\"./line_defaults\":1227,\"./line_shape_defaults\":1229,\"./marker_defaults\":1233,\"./period_defaults\":1234,\"./stack_defaults\":1237,\"./subtypes\":1239,\"./text_defaults\":1240,\"./xy_defaults\":1241}],1222:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"../../lib\").isArrayOrTypedArray;e.exports\u003dfunction(t,e,r,a){var o\u003d!1;if(e.marker){var s\u003de.marker.color,l\u003d(e.marker.line||{}).color;s\u0026\u0026!i(s)?o\u003ds:l\u0026\u0026!i(l)\u0026\u0026(o\u003dl)}a(\"fillcolor\",n.addOpacity((e.line||{}).color||o||r,.5))}},{\"../../components/color\":662,\"../../lib\":799}],1223:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\");e.exports\u003dfunction(t,e,r){var i\u003d{},a\u003d{_fullLayout:r},o\u003dn.getFromTrace(a,e,\"x\"),s\u003dn.getFromTrace(a,e,\"y\");return i.xLabel\u003dn.tickText(o,o.c2l(t.x),!0).text,i.yLabel\u003dn.tickText(s,s.c2l(t.y),!0).text,i}},{\"../../plots/cartesian/axes\":849}],1224:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"./subtypes\");e.exports\u003dfunction(t,e){var r,a;if(\"lines\"\u003d\u003d\u003dt.mode)return(r\u003dt.line.color)\u0026\u0026n.opacity(r)?r:t.fillcolor;if(\"none\"\u003d\u003d\u003dt.mode)return t.fill?t.fillcolor:\"\";var o\u003de.mcc||(t.marker||{}).color,s\u003de.mlcc||((t.marker||{}).line||{}).color;return(a\u003do\u0026\u0026n.opacity(o)?o:s\u0026\u0026n.opacity(s)\u0026\u0026(e.mlw||((t.marker||{}).line||{}).width)?s:\"\")?n.opacity(a)\u003c.3?n.addOpacity(a,.3):a:(r\u003d(t.line||{}).color)\u0026\u0026n.opacity(r)\u0026\u0026i.hasLines(t)\u0026\u0026t.line.width?r:t.fillcolor}},{\"../../components/color\":662,\"./subtypes\":1239}],1225:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/fx\"),a\u003dt(\"../../registry\"),o\u003dt(\"./get_trace_color\"),s\u003dt(\"../../components/color\"),l\u003dn.fillText;e.exports\u003dfunction(t,e,r,c){var u\u003dt.cd,f\u003du[0].trace,h\u003dt.xa,p\u003dt.ya,d\u003dh.c2p(e),m\u003dp.c2p(r),g\u003d[d,m],v\u003df.hoveron||\"\",y\u003d-1!\u003d\u003df.mode.indexOf(\"markers\")?3:.5;if(-1!\u003d\u003dv.indexOf(\"points\")){var x\u003dfunction(t){var e\u003dMath.max(y,t.mrc||0),r\u003dh.c2p(t.x)-d,n\u003dp.c2p(t.y)-m;return Math.max(Math.sqrt(r*r+n*n)-e,1-y/e)},b\u003di.getDistanceFunction(c,(function(t){var e\u003dMath.max(3,t.mrc||0),r\u003d1-1/e,n\u003dMath.abs(h.c2p(t.x)-d);return void 0!\u003d\u003dt.orig_x\u0026\u0026(n+\u003dh.c2p(t.orig_x)-h.c2p(t.x)),n\u003ce?r*n/e:n-e+r}),(function(t){var e\u003dMath.max(3,t.mrc||0),r\u003d1-1/e,n\u003dMath.abs(p.c2p(t.y)-m);return void 0!\u003d\u003dt.orig_y\u0026\u0026(n+\u003dp.c2p(t.orig_y)-p.c2p(t.y)),n\u003ce?r*n/e:n-e+r}),x);if(i.getClosest(u,b,t),!1!\u003d\u003dt.index){var _\u003du[t.index],w\u003dh.c2p(_.x,!0),T\u003dp.c2p(_.y,!0),k\u003d_.mrc||1;t.index\u003d_.i;var M\u003du[0].t.orientation,A\u003dM\u0026\u0026(_.sNorm||_.s),S\u003d\"h\"\u003d\u003d\u003dM?A:void 0!\u003d\u003d_.orig_x?_.orig_x:_.x,E\u003d\"v\"\u003d\u003d\u003dM?A:void 0!\u003d\u003d_.orig_y?_.orig_y:_.y;return n.extendFlat(t,{color:o(f,_),x0:w-k,x1:w+k,xLabelVal:S,y0:T-k,y1:T+k,yLabelVal:E,spikeDistance:x(_),hovertemplate:f.hovertemplate}),l(_,f,t),a.getComponentMethod(\"errorbars\",\"hoverInfo\")(_,f,t),[t]}}if(-1!\u003d\u003dv.indexOf(\"fills\")\u0026\u0026f._polygons){var L,C,P,I,O,z,D,R,F,B\u003df._polygons,N\u003d[],j\u003d!1,U\u003d1/0,V\u003d-1/0,q\u003d1/0,H\u003d-1/0;for(L\u003d0;L\u003cB.length;L++)(P\u003dB[L]).contains(g)\u0026\u0026(j\u003d!j,N.push(P),q\u003dMath.min(q,P.ymin),H\u003dMath.max(H,P.ymax));if(j){var G\u003d((q\u003dMath.max(q,0))+(H\u003dMath.min(H,p._length)))/2;for(L\u003d0;L\u003cN.length;L++)for(I\u003dN[L].pts,C\u003d1;C\u003cI.length;C++)(R\u003dI[C-1][1])\u003eG!\u003d(F\u003dI[C][1])\u003e\u003dG\u0026\u0026(z\u003dI[C-1][0],D\u003dI[C][0],F-R\u0026\u0026(O\u003dz+(D-z)*(G-R)/(F-R),U\u003dMath.min(U,O),V\u003dMath.max(V,O)));U\u003dMath.max(U,0),V\u003dMath.min(V,h._length);var Y\u003ds.defaultLine;return s.opacity(f.fillcolor)?Y\u003df.fillcolor:s.opacity((f.line||{}).color)\u0026\u0026(Y\u003df.line.color),n.extendFlat(t,{distance:t.maxHoverDistance,x0:U,x1:V,y0:G,y1:G,color:Y,hovertemplate:!1}),delete t.index,f.text\u0026\u0026!Array.isArray(f.text)?t.text\u003dString(f.text):t.text\u003df.name,[t]}}}},{\"../../components/color\":662,\"../../components/fx\":702,\"../../lib\":799,\"../../registry\":927,\"./get_trace_color\":1224}],1226:[function(t,e,r){\"use strict\";var n\u003dt(\"./subtypes\");e.exports\u003d{hasLines:n.hasLines,hasMarkers:n.hasMarkers,hasText:n.hasText,isBubble:n.isBubble,attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"./cross_trace_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./cross_trace_calc\"),arraysToCalcdata:t(\"./arrays_to_calcdata\"),plot:t(\"./plot\"),colorbar:t(\"./marker_colorbar\"),formatLabels:t(\"./format_labels\"),style:t(\"./style\").style,styleOnSelect:t(\"./style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"./select\"),animatable:!0,moduleType:\"trace\",name:\"scatter\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"symbols\",\"errorBarsOK\",\"showLegend\",\"scatter-like\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":863,\"./arrays_to_calcdata\":1213,\"./attributes\":1214,\"./calc\":1215,\"./cross_trace_calc\":1219,\"./cross_trace_defaults\":1220,\"./defaults\":1221,\"./format_labels\":1223,\"./hover\":1225,\"./marker_colorbar\":1232,\"./plot\":1235,\"./select\":1236,\"./style\":1238,\"./subtypes\":1239}],1227:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").isArrayOrTypedArray,i\u003dt(\"../../components/colorscale/helpers\").hasColorscale,a\u003dt(\"../../components/colorscale/defaults\");e.exports\u003dfunction(t,e,r,o,s,l){var c\u003d(t.marker||{}).color;(s(\"line.color\",r),i(t,\"line\"))?a(t,e,o,s,{prefix:\"line.\",cLetter:\"c\"}):s(\"line.color\",!n(c)\u0026\u0026c||r);s(\"line.width\"),(l||{}).noDash||s(\"line.dash\")}},{\"../../components/colorscale/defaults\":672,\"../../components/colorscale/helpers\":673,\"../../lib\":799}],1228:[function(t,e,r){\"use strict\";var n\u003dt(\"../../constants/numerical\"),i\u003dn.BADNUM,a\u003dn.LOG_CLIP,o\u003da+.5,s\u003da-.5,l\u003dt(\"../../lib\"),c\u003dl.segmentsIntersect,u\u003dl.constrain,f\u003dt(\"./constants\");e.exports\u003dfunction(t,e){var r,n,a,h,p,d,m,g,v,y,x,b,_,w,T,k,M,A,S\u003de.xaxis,E\u003de.yaxis,L\u003d\"log\"\u003d\u003d\u003dS.type,C\u003d\"log\"\u003d\u003d\u003dE.type,P\u003dS._length,I\u003dE._length,O\u003de.connectGaps,z\u003de.baseTolerance,D\u003de.shape,R\u003d\"linear\"\u003d\u003d\u003dD,F\u003de.fill\u0026\u0026\"none\"!\u003d\u003de.fill,B\u003d[],N\u003df.minTolerance,j\u003dt.length,U\u003dnew Array(j),V\u003d0;function q(r){var n\u003dt[r];if(!n)return!1;var a\u003de.linearized?S.l2p(n.x):S.c2p(n.x),l\u003de.linearized?E.l2p(n.y):E.c2p(n.y);if(a\u003d\u003d\u003di){if(L\u0026\u0026(a\u003dS.c2p(n.x,!0)),a\u003d\u003d\u003di)return!1;C\u0026\u0026l\u003d\u003d\u003di\u0026\u0026(a*\u003dMath.abs(S._m*I*(S._m\u003e0?o:s)/(E._m*P*(E._m\u003e0?o:s)))),a*\u003d1e3}if(l\u003d\u003d\u003di){if(C\u0026\u0026(l\u003dE.c2p(n.y,!0)),l\u003d\u003d\u003di)return!1;l*\u003d1e3}return[a,l]}function H(t,e,r,n){var i\u003dr-t,a\u003dn-e,o\u003d.5-t,s\u003d.5-e,l\u003di*i+a*a,c\u003di*o+a*s;if(c\u003e0\u0026\u0026c\u003cl){var u\u003do*a-s*i;if(u*u\u003cl)return!0}}function G(t,e){var r\u003dt[0]/P,n\u003dt[1]/I,i\u003dMath.max(0,-r,r-1,-n,n-1);return i\u0026\u0026void 0!\u003d\u003dM\u0026\u0026H(r,n,M,A)\u0026\u0026(i\u003d0),i\u0026\u0026e\u0026\u0026H(r,n,e[0]/P,e[1]/I)\u0026\u0026(i\u003d0),(1+f.toleranceGrowth*i)*z}function Y(t,e){var r\u003dt[0]-e[0],n\u003dt[1]-e[1];return Math.sqrt(r*r+n*n)}var W,X,Z,J,K,Q,$,tt\u003df.maxScreensAway,et\u003d-P*tt,rt\u003dP*(1+tt),nt\u003d-I*tt,it\u003dI*(1+tt),at\u003d[[et,nt,rt,nt],[rt,nt,rt,it],[rt,it,et,it],[et,it,et,nt]];function ot(t){if(t[0]\u003cet||t[0]\u003ert||t[1]\u003cnt||t[1]\u003eit)return[u(t[0],et,rt),u(t[1],nt,it)]}function st(t,e){return t[0]\u003d\u003d\u003de[0]\u0026\u0026(t[0]\u003d\u003d\u003det||t[0]\u003d\u003d\u003drt)||(t[1]\u003d\u003d\u003de[1]\u0026\u0026(t[1]\u003d\u003d\u003dnt||t[1]\u003d\u003d\u003dit)||void 0)}function lt(t,e,r){return function(n,i){var a\u003dot(n),o\u003dot(i),s\u003d[];if(a\u0026\u0026o\u0026\u0026st(a,o))return s;a\u0026\u0026s.push(a),o\u0026\u0026s.push(o);var c\u003d2*l.constrain((n[t]+i[t])/2,e,r)-((a||n)[t]+(o||i)[t]);c\u0026\u0026((a\u0026\u0026o?c\u003e0\u003d\u003da[t]\u003eo[t]?a:o:a||o)[t]+\u003dc);return s}}function ct(t){var e\u003dt[0],r\u003dt[1],n\u003de\u003d\u003d\u003dU[V-1][0],i\u003dr\u003d\u003d\u003dU[V-1][1];if(!n||!i)if(V\u003e1){var a\u003de\u003d\u003d\u003dU[V-2][0],o\u003dr\u003d\u003d\u003dU[V-2][1];n\u0026\u0026(e\u003d\u003d\u003det||e\u003d\u003d\u003drt)\u0026\u0026a?o?V--:U[V-1]\u003dt:i\u0026\u0026(r\u003d\u003d\u003dnt||r\u003d\u003d\u003dit)\u0026\u0026o?a?V--:U[V-1]\u003dt:U[V++]\u003dt}else U[V++]\u003dt}function ut(t){U[V-1][0]!\u003d\u003dt[0]\u0026\u0026U[V-1][1]!\u003d\u003dt[1]\u0026\u0026ct([Z,J]),ct(t),K\u003dnull,Z\u003dJ\u003d0}function ft(t){if(M\u003dt[0]/P,A\u003dt[1]/I,W\u003dt[0]\u003cet?et:t[0]\u003ert?rt:0,X\u003dt[1]\u003cnt?nt:t[1]\u003eit?it:0,W||X){if(V)if(K){var e\u003d$(K,t);e.length\u003e1\u0026\u0026(ut(e[0]),U[V++]\u003de[1])}else Q\u003d$(U[V-1],t)[0],U[V++]\u003dQ;else U[V++]\u003d[W||t[0],X||t[1]];var r\u003dU[V-1];W\u0026\u0026X\u0026\u0026(r[0]!\u003d\u003dW||r[1]!\u003d\u003dX)?(K\u0026\u0026(Z!\u003d\u003dW\u0026\u0026J!\u003d\u003dX?ct(Z\u0026\u0026J?(n\u003dK,a\u003d(i\u003dt)[0]-n[0],o\u003d(i[1]-n[1])/a,(n[1]*i[0]-i[1]*n[0])/a\u003e0?[o\u003e0?et:rt,it]:[o\u003e0?rt:et,nt]):[Z||W,J||X]):Z\u0026\u0026J\u0026\u0026ct([Z,J])),ct([W,X])):Z-W\u0026\u0026J-X\u0026\u0026ct([W||Z,X||J]),K\u003dt,Z\u003dW,J\u003dX}else K\u0026\u0026ut($(K,t)[0]),U[V++]\u003dt;var n,i,a,o}for(\"linear\"\u003d\u003d\u003dD||\"spline\"\u003d\u003d\u003dD?$\u003dfunction(t,e){for(var r\u003d[],n\u003d0,i\u003d0;i\u003c4;i++){var a\u003dat[i],o\u003dc(t[0],t[1],e[0],e[1],a[0],a[1],a[2],a[3]);o\u0026\u0026(!n||Math.abs(o.x-r[0][0])\u003e1||Math.abs(o.y-r[0][1])\u003e1)\u0026\u0026(o\u003d[o.x,o.y],n\u0026\u0026Y(o,t)\u003cY(r[0],t)?r.unshift(o):r.push(o),n++)}return r}:\"hv\"\u003d\u003d\u003dD||\"vh\"\u003d\u003d\u003dD?$\u003dfunction(t,e){var r\u003d[],n\u003dot(t),i\u003dot(e);return n\u0026\u0026i\u0026\u0026st(n,i)||(n\u0026\u0026r.push(n),i\u0026\u0026r.push(i)),r}:\"hvh\"\u003d\u003d\u003dD?$\u003dlt(0,et,rt):\"vhv\"\u003d\u003d\u003dD\u0026\u0026($\u003dlt(1,nt,it)),r\u003d0;r\u003cj;r++)if(n\u003dq(r)){for(V\u003d0,K\u003dnull,ft(n),r++;r\u003cj;r++){if(!(h\u003dq(r))){if(O)continue;break}if(R\u0026\u0026e.simplify){var ht\u003dq(r+1);if(y\u003dY(h,n),F\u0026\u0026(0\u003d\u003d\u003dV||V\u003d\u003d\u003dj-1)||!(y\u003cG(h,ht)*N)){for(g\u003d[(h[0]-n[0])/y,(h[1]-n[1])/y],p\u003dn,x\u003dy,b\u003dw\u003dT\u003d0,m\u003d!1,a\u003dh,r++;r\u003ct.length;r++){if(d\u003dht,ht\u003dq(r+1),!d){if(O)continue;break}if(k\u003d(v\u003d[d[0]-n[0],d[1]-n[1]])[0]*g[1]-v[1]*g[0],w\u003dMath.min(w,k),(T\u003dMath.max(T,k))-w\u003eG(d,ht))break;a\u003dd,(_\u003dv[0]*g[0]+v[1]*g[1])\u003ex?(x\u003d_,h\u003dd,m\u003d!1):_\u003cb\u0026\u0026(b\u003d_,p\u003dd,m\u003d!0)}if(m?(ft(h),a!\u003d\u003dp\u0026\u0026ft(p)):(p!\u003d\u003dn\u0026\u0026ft(p),a!\u003d\u003dh\u0026\u0026ft(h)),ft(a),r\u003e\u003dt.length||!d)break;ft(d),n\u003dd}}else ft(h)}K\u0026\u0026ct([Z||K[0],J||K[1]]),B.push(U.slice(0,V))}return B}},{\"../../constants/numerical\":775,\"../../lib\":799,\"./constants\":1218}],1229:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r){\"spline\"\u003d\u003d\u003dr(\"line.shape\")\u0026\u0026r(\"line.smoothing\")}},{}],1230:[function(t,e,r){\"use strict\";var n\u003d{tonextx:1,tonexty:1,tonext:1};e.exports\u003dfunction(t,e,r){var i,a,o,s,l,c\u003d{},u\u003d!1,f\u003d-1,h\u003d0,p\u003d-1;for(a\u003d0;a\u003cr.length;a++)(o\u003d(i\u003dr[a][0].trace).stackgroup||\"\")?o in c?l\u003dc[o]:(l\u003dc[o]\u003dh,h++):i.fill in n\u0026\u0026p\u003e\u003d0?l\u003dp:(l\u003dp\u003dh,h++),l\u003cf\u0026\u0026(u\u003d!0),i._groupIndex\u003df\u003dl;var d\u003dr.slice();u\u0026\u0026d.sort((function(t,e){var r\u003dt[0].trace,n\u003de[0].trace;return r._groupIndex-n._groupIndex||r.index-n.index}));var m\u003d{};for(a\u003d0;a\u003cd.length;a++)o\u003d(i\u003dd[a][0].trace).stackgroup||\"\",!0\u003d\u003d\u003di.visible?(i._nexttrace\u003dnull,i.fill in n\u0026\u0026(s\u003dm[o],i._prevtrace\u003ds||null,s\u0026\u0026(s._nexttrace\u003di)),i._ownfill\u003di.fill\u0026\u0026(\"tozero\"\u003d\u003d\u003di.fill.substr(0,6)||\"toself\"\u003d\u003d\u003di.fill||\"to\"\u003d\u003d\u003di.fill.substr(0,2)\u0026\u0026!i._prevtrace),m[o]\u003di):i._prevtrace\u003di._nexttrace\u003di._ownfill\u003dnull;return d}},{}],1231:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\");e.exports\u003dfunction(t){var e\u003dt.marker,r\u003de.sizeref||1,i\u003de.sizemin||0,a\u003d\"area\"\u003d\u003d\u003de.sizemode?function(t){return Math.sqrt(t/r)}:function(t){return t/r};return function(t){var e\u003da(t/2);return n(e)\u0026\u0026e\u003e0?Math.max(e,i):0}}},{\"fast-isnumeric\":245}],1232:[function(t,e,r){\"use strict\";e.exports\u003d{container:\"marker\",min:\"cmin\",max:\"cmax\"}},{}],1233:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"../../components/colorscale/helpers\").hasColorscale,a\u003dt(\"../../components/colorscale/defaults\"),o\u003dt(\"./subtypes\");e.exports\u003dfunction(t,e,r,s,l,c){var u\u003do.isBubble(t),f\u003d(t.line||{}).color;(c\u003dc||{},f\u0026\u0026(r\u003df),l(\"marker.symbol\"),l(\"marker.opacity\",u?.7:1),l(\"marker.size\"),l(\"marker.color\",r),i(t,\"marker\")\u0026\u0026a(t,e,s,l,{prefix:\"marker.\",cLetter:\"c\"}),c.noSelect||(l(\"selected.marker.color\"),l(\"unselected.marker.color\"),l(\"selected.marker.size\"),l(\"unselected.marker.size\")),c.noLine||(l(\"marker.line.color\",f\u0026\u0026!Array.isArray(f)\u0026\u0026e.marker.color!\u003d\u003df?f:u?n.background:n.defaultLine),i(t,\"marker.line\")\u0026\u0026a(t,e,s,l,{prefix:\"marker.line.\",cLetter:\"c\"}),l(\"marker.line.width\",u?1:0)),u\u0026\u0026(l(\"marker.sizeref\"),l(\"marker.sizemin\"),l(\"marker.sizemode\")),c.gradient)\u0026\u0026(\"none\"!\u003d\u003dl(\"marker.gradient.type\")\u0026\u0026l(\"marker.gradient.color\"))}},{\"../../components/color\":662,\"../../components/colorscale/defaults\":672,\"../../components/colorscale/helpers\":673,\"./subtypes\":1239}],1234:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\").dateTick0,i\u003dt(\"../../constants/numerical\").ONEWEEK;function a(t,e){return n(e,t%i\u003d\u003d0?1:0)}e.exports\u003dfunction(t,e,r,n,i){if(i||(i\u003d{x:!0,y:!0}),i.x){var o\u003dn(\"xperiod\");o\u0026\u0026(n(\"xperiod0\",a(o,e.xcalendar)),n(\"xperiodalignment\"))}if(i.y){var s\u003dn(\"yperiod\");s\u0026\u0026(n(\"yperiod0\",a(s,e.ycalendar)),n(\"yperiodalignment\"))}}},{\"../../constants/numerical\":775,\"../../lib\":799}],1235:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib\"),o\u003da.ensureSingle,s\u003da.identity,l\u003dt(\"../../components/drawing\"),c\u003dt(\"./subtypes\"),u\u003dt(\"./line_points\"),f\u003dt(\"./link_traces\"),h\u003dt(\"../../lib/polygon\").tester;function p(t,e,r,f,p,d,m){var g;!function(t,e,r,i,o){var s\u003dr.xaxis,l\u003dr.yaxis,u\u003dn.extent(a.simpleMap(s.range,s.r2c)),f\u003dn.extent(a.simpleMap(l.range,l.r2c)),h\u003di[0].trace;if(!c.hasMarkers(h))return;var p\u003dh.marker.maxdisplayed;if(0\u003d\u003d\u003dp)return;var d\u003di.filter((function(t){return t.x\u003e\u003du[0]\u0026\u0026t.x\u003c\u003du[1]\u0026\u0026t.y\u003e\u003df[0]\u0026\u0026t.y\u003c\u003df[1]})),m\u003dMath.ceil(d.length/p),g\u003d0;o.forEach((function(t,r){var n\u003dt[0].trace;c.hasMarkers(n)\u0026\u0026n.marker.maxdisplayed\u003e0\u0026\u0026r\u003ce\u0026\u0026g++}));var v\u003dMath.round(g*m/3+Math.floor(g/3)*m/7.1);i.forEach((function(t){delete t.vis})),d.forEach((function(t,e){0\u003d\u003d\u003dMath.round((e+v)%m)\u0026\u0026(t.vis\u003d!0)}))}(0,e,r,f,p);var v\u003d!!m\u0026\u0026m.duration\u003e0;function y(t){return v?t.transition():t}var x\u003dr.xaxis,b\u003dr.yaxis,_\u003df[0].trace,w\u003d_.line,T\u003dn.select(d),k\u003do(T,\"g\",\"errorbars\"),M\u003do(T,\"g\",\"lines\"),A\u003do(T,\"g\",\"points\"),S\u003do(T,\"g\",\"text\");if(i.getComponentMethod(\"errorbars\",\"plot\")(t,k,r,m),!0\u003d\u003d\u003d_.visible){var E,L;y(T).style(\"opacity\",_.opacity);var C\u003d_.fill.charAt(_.fill.length-1);\"x\"!\u003d\u003dC\u0026\u0026\"y\"!\u003d\u003dC\u0026\u0026(C\u003d\"\"),f[0][r.isRangePlot?\"nodeRangePlot3\":\"node3\"]\u003dT;var P,I,O\u003d\"\",z\u003d[],D\u003d_._prevtrace;D\u0026\u0026(O\u003dD._prevRevpath||\"\",L\u003dD._nextFill,z\u003dD._polygons);var R,F,B,N,j,U,V,q\u003d\"\",H\u003d\"\",G\u003d[],Y\u003da.noop;if(E\u003d_._ownFill,c.hasLines(_)||\"none\"!\u003d\u003d_.fill){for(L\u0026\u0026L.datum(f),-1!\u003d\u003d[\"hv\",\"vh\",\"hvh\",\"vhv\"].indexOf(w.shape)?(R\u003dl.steps(w.shape),F\u003dl.steps(w.shape.split(\"\").reverse().join(\"\"))):R\u003dF\u003d\"spline\"\u003d\u003d\u003dw.shape?function(t){var e\u003dt[t.length-1];return t.length\u003e1\u0026\u0026t[0][0]\u003d\u003d\u003de[0]\u0026\u0026t[0][1]\u003d\u003d\u003de[1]?l.smoothclosed(t.slice(1),w.smoothing):l.smoothopen(t,w.smoothing)}:function(t){return\"M\"+t.join(\"L\")},B\u003dfunction(t){return F(t.reverse())},G\u003du(f,{xaxis:x,yaxis:b,connectGaps:_.connectgaps,baseTolerance:Math.max(w.width||1,3)/4,shape:w.shape,simplify:w.simplify,fill:_.fill}),V\u003d_._polygons\u003dnew Array(G.length),g\u003d0;g\u003cG.length;g++)_._polygons[g]\u003dh(G[g]);G.length\u0026\u0026(N\u003dG[0][0],U\u003d(j\u003dG[G.length-1])[j.length-1]),Y\u003dfunction(t){return function(e){if(P\u003dR(e),I\u003dB(e),q?C?(q+\u003d\"L\"+P.substr(1),H\u003dI+\"L\"+H.substr(1)):(q+\u003d\"Z\"+P,H\u003dI+\"Z\"+H):(q\u003dP,H\u003dI),c.hasLines(_)\u0026\u0026e.length\u003e1){var r\u003dn.select(this);if(r.datum(f),t)y(r.style(\"opacity\",0).attr(\"d\",P).call(l.lineGroupStyle)).style(\"opacity\",1);else{var i\u003dy(r);i.attr(\"d\",P),l.singleLineStyle(f,i)}}}}}var W\u003dM.selectAll(\".js-line\").data(G);y(W.exit()).style(\"opacity\",0).remove(),W.each(Y(!1)),W.enter().append(\"path\").classed(\"js-line\",!0).style(\"vector-effect\",\"non-scaling-stroke\").call(l.lineGroupStyle).each(Y(!0)),l.setClipUrl(W,r.layerClipId,t),G.length?(E?(E.datum(f),N\u0026\u0026U\u0026\u0026(C?(\"y\"\u003d\u003d\u003dC?N[1]\u003dU[1]\u003db.c2p(0,!0):\"x\"\u003d\u003d\u003dC\u0026\u0026(N[0]\u003dU[0]\u003dx.c2p(0,!0)),y(E).attr(\"d\",\"M\"+U+\"L\"+N+\"L\"+q.substr(1)).call(l.singleFillStyle)):y(E).attr(\"d\",q+\"Z\").call(l.singleFillStyle))):L\u0026\u0026(\"tonext\"\u003d\u003d\u003d_.fill.substr(0,6)\u0026\u0026q\u0026\u0026O?(\"tonext\"\u003d\u003d\u003d_.fill?y(L).attr(\"d\",q+\"Z\"+O+\"Z\").call(l.singleFillStyle):y(L).attr(\"d\",q+\"L\"+O.substr(1)+\"Z\").call(l.singleFillStyle),_._polygons\u003d_._polygons.concat(z)):(Z(L),_._polygons\u003dnull)),_._prevRevpath\u003dH,_._prevPolygons\u003dV):(E?Z(E):L\u0026\u0026Z(L),_._polygons\u003d_._prevRevpath\u003d_._prevPolygons\u003dnull),A.datum(f),S.datum(f),function(e,i,a){var o,u\u003da[0].trace,f\u003dc.hasMarkers(u),h\u003dc.hasText(u),p\u003dtt(u),d\u003det,m\u003det;if(f||h){var g\u003ds,_\u003du.stackgroup,w\u003d_\u0026\u0026\"infer zero\"\u003d\u003d\u003dt._fullLayout._scatterStackOpts[x._id+b._id][_].stackgaps;u.marker.maxdisplayed||u._needsCull?g\u003dw?K:J:_\u0026\u0026!w\u0026\u0026(g\u003dQ),f\u0026\u0026(d\u003dg),h\u0026\u0026(m\u003dg)}var T,k\u003d(o\u003de.selectAll(\"path.point\").data(d,p)).enter().append(\"path\").classed(\"point\",!0);v\u0026\u0026k.call(l.pointStyle,u,t).call(l.translatePoints,x,b).style(\"opacity\",0).transition().style(\"opacity\",1),o.order(),f\u0026\u0026(T\u003dl.makePointStyleFns(u)),o.each((function(e){var i\u003dn.select(this),a\u003dy(i);l.translatePoint(e,a,x,b)?(l.singlePointStyle(e,a,u,T,t),r.layerClipId\u0026\u0026l.hideOutsideRangePoint(e,a,x,b,u.xcalendar,u.ycalendar),u.customdata\u0026\u0026i.classed(\"plotly-customdata\",null!\u003d\u003de.data\u0026\u0026void 0!\u003d\u003de.data)):a.remove()})),v?o.exit().transition().style(\"opacity\",0).remove():o.exit().remove(),(o\u003di.selectAll(\"g\").data(m,p)).enter().append(\"g\").classed(\"textpoint\",!0).append(\"text\"),o.order(),o.each((function(t){var e\u003dn.select(this),i\u003dy(e.select(\"text\"));l.translatePoint(t,i,x,b)?r.layerClipId\u0026\u0026l.hideOutsideRangePoint(t,e,x,b,u.xcalendar,u.ycalendar):e.remove()})),o.selectAll(\"text\").call(l.textPointStyle,u,t).each((function(t){var e\u003dx.c2p(t.x),r\u003db.c2p(t.y);n.select(this).selectAll(\"tspan.line\").each((function(){y(n.select(this)).attr({x:e,y:r})}))})),o.exit().remove()}(A,S,f);var X\u003d!1\u003d\u003d\u003d_.cliponaxis?null:r.layerClipId;l.setClipUrl(A,X,t),l.setClipUrl(S,X,t)}function Z(t){y(t).attr(\"d\",\"M0,0Z\")}function J(t){return t.filter((function(t){return!t.gap\u0026\u0026t.vis}))}function K(t){return t.filter((function(t){return t.vis}))}function Q(t){return t.filter((function(t){return!t.gap}))}function $(t){return t.id}function tt(t){if(t.ids)return $}function et(){return!1}}e.exports\u003dfunction(t,e,r,i,a,c){var u,h,d\u003d!a,m\u003d!!a\u0026\u0026a.duration\u003e0,g\u003df(t,e,r);((u\u003di.selectAll(\"g.trace\").data(g,(function(t){return t[0].trace.uid}))).enter().append(\"g\").attr(\"class\",(function(t){return\"trace scatter trace\"+t[0].trace.uid})).style(\"stroke-miterlimit\",2),u.order(),function(t,e,r){e.each((function(e){var i\u003do(n.select(this),\"g\",\"fills\");l.setClipUrl(i,r.layerClipId,t);var a\u003de[0].trace,c\u003d[];a._ownfill\u0026\u0026c.push(\"_ownFill\"),a._nexttrace\u0026\u0026c.push(\"_nextFill\");var u\u003di.selectAll(\"g\").data(c,s);u.enter().append(\"g\"),u.exit().each((function(t){a[t]\u003dnull})).remove(),u.order().each((function(t){a[t]\u003do(n.select(this),\"path\",\"js-fill\")}))}))}(t,u,e),m)?(c\u0026\u0026(h\u003dc()),n.transition().duration(a.duration).ease(a.easing).each(\"end\",(function(){h\u0026\u0026h()})).each(\"interrupt\",(function(){h\u0026\u0026h()})).each((function(){i.selectAll(\"g.trace\").each((function(r,n){p(t,n,e,r,g,this,a)}))}))):u.each((function(r,n){p(t,n,e,r,g,this,a)}));d\u0026\u0026u.exit().remove(),i.selectAll(\"path:not([d])\").remove()}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/polygon\":811,\"../../registry\":927,\"./line_points\":1228,\"./link_traces\":1230,\"./subtypes\":1239,\"@plotly/d3\":58}],1236:[function(t,e,r){\"use strict\";var n\u003dt(\"./subtypes\");e.exports\u003dfunction(t,e){var r,i,a,o,s\u003dt.cd,l\u003dt.xaxis,c\u003dt.yaxis,u\u003d[],f\u003ds[0].trace;if(!n.hasMarkers(f)\u0026\u0026!n.hasText(f))return[];if(!1\u003d\u003d\u003de)for(r\u003d0;r\u003cs.length;r++)s[r].selected\u003d0;else for(r\u003d0;r\u003cs.length;r++)i\u003ds[r],a\u003dl.c2p(i.x),o\u003dc.c2p(i.y),null!\u003d\u003di.i\u0026\u0026e.contains([a,o],!1,r,t)?(u.push({pointNumber:i.i,x:l.c2d(i.x),y:c.c2d(i.y)}),i.selected\u003d1):i.selected\u003d0;return u}},{\"./subtypes\":1239}],1237:[function(t,e,r){\"use strict\";var n\u003d[\"orientation\",\"groupnorm\",\"stackgaps\"];e.exports\u003dfunction(t,e,r,i){var a\u003dr._scatterStackOpts,o\u003di(\"stackgroup\");if(o){var s\u003de.xaxis+e.yaxis,l\u003da[s];l||(l\u003da[s]\u003d{});var c\u003dl[o],u\u003d!1;c?c.traces.push(e):(c\u003dl[o]\u003d{traceIndices:[],traces:[e]},u\u003d!0);for(var f\u003d{orientation:e.x\u0026\u0026!e.y?\"h\":\"v\"},h\u003d0;h\u003cn.length;h++){var p\u003dn[h],d\u003dp+\"Found\";if(!c[d]){var m\u003dvoid 0!\u003d\u003dt[p],g\u003d\"orientation\"\u003d\u003d\u003dp;if((m||u)\u0026\u0026(c[p]\u003di(p,f[p]),g\u0026\u0026(c.fillDflt\u003d\"h\"\u003d\u003d\u003dc[p]?\"tonextx\":\"tonexty\"),m\u0026\u0026(c[d]\u003d!0,!u\u0026\u0026(delete c.traces[0][p],g))))for(var v\u003d0;v\u003cc.traces.length-1;v++){var y\u003dc.traces[v];y._input.fill!\u003d\u003dy.fill\u0026\u0026(y.fill\u003dc.fillDflt)}}}return c}}},{}],1238:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"../../registry\");function o(t,e,r){i.pointStyle(t.selectAll(\"path.point\"),e,r)}function s(t,e,r){i.textPointStyle(t.selectAll(\"text\"),e,r)}e.exports\u003d{style:function(t){var e\u003dn.select(t).selectAll(\"g.trace.scatter\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.selectAll(\"g.points\").each((function(e){o(n.select(this),e.trace||e[0].trace,t)})),e.selectAll(\"g.text\").each((function(e){s(n.select(this),e.trace||e[0].trace,t)})),e.selectAll(\"g.trace path.js-line\").call(i.lineGroupStyle),e.selectAll(\"g.trace path.js-fill\").call(i.fillGroupStyle),a.getComponentMethod(\"errorbars\",\"style\")(e)},stylePoints:o,styleText:s,styleOnSelect:function(t,e,r){var n\u003de[0].trace;n.selectedpoints?(i.selectedPointStyle(r.selectAll(\"path.point\"),n),i.selectedTextStyle(r.selectAll(\"text\"),n)):(o(r,n,t),s(r,n,t))}}},{\"../../components/drawing\":684,\"../../registry\":927,\"@plotly/d3\":58}],1239:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003d{hasLines:function(t){return t.visible\u0026\u0026t.mode\u0026\u0026-1!\u003d\u003dt.mode.indexOf(\"lines\")},hasMarkers:function(t){return t.visible\u0026\u0026(t.mode\u0026\u0026-1!\u003d\u003dt.mode.indexOf(\"markers\")||\"splom\"\u003d\u003d\u003dt.type)},hasText:function(t){return t.visible\u0026\u0026t.mode\u0026\u0026-1!\u003d\u003dt.mode.indexOf(\"text\")},isBubble:function(t){return n.isPlainObject(t.marker)\u0026\u0026n.isArrayOrTypedArray(t.marker.size)}}},{\"../../lib\":799}],1240:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e,r,i,a){a\u003da||{},i(\"textposition\"),n.coerceFont(i,\"textfont\",r.font),a.noSelect||(i(\"selected.textfont.color\"),i(\"unselected.textfont.color\"))}},{\"../../lib\":799}],1241:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\");e.exports\u003dfunction(t,e,r,a){var o,s\u003da(\"x\"),l\u003da(\"y\");if(i.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\"],r),s){var c\u003dn.minRowLength(s);l?o\u003dMath.min(c,n.minRowLength(l)):(o\u003dc,a(\"y0\"),a(\"dy\"))}else{if(!l)return 0;o\u003dn.minRowLength(l),a(\"x0\"),a(\"dx\")}return e._length\u003do,o}},{\"../../lib\":799,\"../../registry\":927}],1242:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/attributes\"),i\u003dt(\"../../components/colorscale/attributes\"),a\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,o\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,s\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,l\u003dt(\"../../plots/attributes\"),c\u003dt(\"../../constants/gl3d_dashes\"),u\u003dt(\"../../constants/gl3d_markers\"),f\u003dt(\"../../lib/extend\").extendFlat,h\u003dt(\"../../plot_api/edit_types\").overrideAll,p\u003dn.line,d\u003dn.marker,m\u003dd.line,g\u003df({width:p.width,dash:{valType:\"enumerated\",values:Object.keys(c),dflt:\"solid\"}},i(\"line\"));var v\u003de.exports\u003dh({x:n.x,y:n.y,z:{valType:\"data_array\"},text:f({},n.text,{}),texttemplate:s({},{}),hovertext:f({},n.hovertext,{}),hovertemplate:o(),xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),zhoverformat:a(\"z\"),mode:f({},n.mode,{dflt:\"lines+markers\"}),surfaceaxis:{valType:\"enumerated\",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:\"color\"},projection:{x:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}},y:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}},z:{show:{valType:\"boolean\",dflt:!1},opacity:{valType:\"number\",min:0,max:1,dflt:1},scale:{valType:\"number\",min:0,max:10,dflt:2/3}}},connectgaps:n.connectgaps,line:g,marker:f({symbol:{valType:\"enumerated\",values:Object.keys(u),dflt:\"circle\",arrayOk:!0},size:f({},d.size,{dflt:8}),sizeref:d.sizeref,sizemin:d.sizemin,sizemode:d.sizemode,opacity:f({},d.opacity,{arrayOk:!1}),colorbar:d.colorbar,line:f({width:f({},m.width,{arrayOk:!1})},i(\"marker.line\"))},i(\"marker\")),textposition:f({},n.textposition,{dflt:\"top center\"}),textfont:{color:n.textfont.color,size:n.textfont.size,family:f({},n.textfont.family,{arrayOk:!1})},hoverinfo:f({},l.hoverinfo)},\"calc\",\"nested\");v.x.editType\u003dv.y.editType\u003dv.z.editType\u003d\"calc+clearAxisTypes\"},{\"../../components/colorscale/attributes\":669,\"../../constants/gl3d_dashes\":772,\"../../constants/gl3d_markers\":773,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214}],1243:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/arrays_to_calcdata\"),i\u003dt(\"../scatter/colorscale_calc\");e.exports\u003dfunction(t,e){var r\u003d[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),i(t,e),r}},{\"../scatter/arrays_to_calcdata\":1213,\"../scatter/colorscale_calc\":1217}],1244:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\");function i(t,e,r,i){if(!e||!e.visible)return null;for(var a\u003dn.getComponentMethod(\"errorbars\",\"makeComputeError\")(e),o\u003dnew Array(t.length),s\u003d0;s\u003ct.length;s++){var l\u003da(+t[s],s);if(\"log\"\u003d\u003d\u003di.type){var c\u003di.c2l(t[s]),u\u003dt[s]-l[0],f\u003dt[s]+l[1];if(o[s]\u003d[(i.c2l(u,!0)-c)*r,(i.c2l(f,!0)-c)*r],u\u003e0){var h\u003di.c2l(u);i._lowerLogErrorBound||(i._lowerLogErrorBound\u003dh),i._lowerErrorBound\u003dMath.min(i._lowerLogErrorBound,h)}}else o[s]\u003d[-l[0]*r,l[1]*r]}return o}e.exports\u003dfunction(t,e,r){var n\u003d[i(t.x,t.error_x,e[0],r.xaxis),i(t.y,t.error_y,e[1],r.yaxis),i(t.z,t.error_z,e[2],r.zaxis)],a\u003dfunction(t){for(var e\u003d0;e\u003ct.length;e++)if(t[e])return t[e].length;return 0}(n);if(0\u003d\u003d\u003da)return null;for(var o\u003dnew Array(a),s\u003d0;s\u003ca;s++){for(var l\u003d[[0,0,0],[0,0,0]],c\u003d0;c\u003c3;c++)if(n[c])for(var u\u003d0;u\u003c2;u++)l[u][c]\u003dn[c][s][u];o[s]\u003dl}return o}},{\"../../registry\":927}],1245:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-line3d\"),i\u003dt(\"gl-scatter3d\"),a\u003dt(\"gl-error3d\"),o\u003dt(\"gl-mesh3d\"),s\u003dt(\"delaunay-triangulate\"),l\u003dt(\"../../lib\"),c\u003dt(\"../../lib/str2rgbarray\"),u\u003dt(\"../../lib/gl_format_color\").formatColor,f\u003dt(\"../scatter/make_bubble_size_func\"),h\u003dt(\"../../constants/gl3d_dashes\"),p\u003dt(\"../../constants/gl3d_markers\"),d\u003dt(\"../../plots/cartesian/axes\"),m\u003dt(\"../../components/fx/helpers\").appendArrayPointValue,g\u003dt(\"./calc_errors\");function v(t,e){this.scene\u003dt,this.uid\u003de,this.linePlot\u003dnull,this.scatterPlot\u003dnull,this.errorBars\u003dnull,this.textMarkers\u003dnull,this.delaunayMesh\u003dnull,this.color\u003dnull,this.mode\u003d\"\",this.dataPoints\u003d[],this.axesBounds\u003d[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels\u003dnull,this.data\u003dnull}var y\u003dv.prototype;function x(t){return null\u003d\u003dt?0:t.indexOf(\"left\")\u003e-1?-1:t.indexOf(\"right\")\u003e-1?1:0}function b(t){return null\u003d\u003dt?0:t.indexOf(\"top\")\u003e-1?-1:t.indexOf(\"bottom\")\u003e-1?1:0}function _(t,e){return e(4*t)}function w(t){return p[t]}function T(t,e,r,n,i){var a\u003dnull;if(l.isArrayOrTypedArray(t)){a\u003d[];for(var o\u003d0;o\u003ce;o++)void 0\u003d\u003d\u003dt[o]?a[o]\u003dn:a[o]\u003dr(t[o],i)}else a\u003dr(t,l.identity);return a}function k(t,e){var r,n,i,a,o,s,h\u003d[],p\u003dt.fullSceneLayout,v\u003dt.dataScale,y\u003dp.xaxis,k\u003dp.yaxis,M\u003dp.zaxis,A\u003de.marker,S\u003de.line,E\u003de.x||[],L\u003de.y||[],C\u003de.z||[],P\u003dE.length,I\u003de.xcalendar,O\u003de.ycalendar,z\u003de.zcalendar;for(o\u003d0;o\u003cP;o++)r\u003dy.d2l(E[o],0,I)*v[0],n\u003dk.d2l(L[o],0,O)*v[1],i\u003dM.d2l(C[o],0,z)*v[2],h[o]\u003d[r,n,i];if(Array.isArray(e.text))s\u003de.text;else if(void 0!\u003d\u003de.text)for(s\u003dnew Array(P),o\u003d0;o\u003cP;o++)s[o]\u003de.text;function D(t,e){var r\u003dp[t];return d.tickText(r,r.d2l(e),!0).text}var R\u003de.texttemplate;if(R){var F\u003dt.fullLayout._d3locale,B\u003dArray.isArray(R),N\u003dB?Math.min(R.length,P):P,j\u003dB?function(t){return R[t]}:function(){return R};for(s\u003dnew Array(N),o\u003d0;o\u003cN;o++){var U\u003d{x:E[o],y:L[o],z:C[o]},V\u003d{xLabel:D(\"xaxis\",E[o]),yLabel:D(\"yaxis\",L[o]),zLabel:D(\"zaxis\",C[o])},q\u003d{};m(q,e,o);var H\u003de._meta||{};s[o]\u003dl.texttemplateString(j(o),V,F,q,U,H)}}if(a\u003d{position:h,mode:e.mode,text:s},\"line\"in e\u0026\u0026(a.lineColor\u003du(S,1,P),a.lineWidth\u003dS.width,a.lineDashes\u003dS.dash),\"marker\"in e){var G\u003df(e);a.scatterColor\u003du(A,1,P),a.scatterSize\u003dT(A.size,P,_,20,G),a.scatterMarker\u003dT(A.symbol,P,w,\"\\u25cf\"),a.scatterLineWidth\u003dA.line.width,a.scatterLineColor\u003du(A.line,1,P),a.scatterAngle\u003d0}\"textposition\"in e\u0026\u0026(a.textOffset\u003dfunction(t){var e\u003d[0,0];if(Array.isArray(t))for(var r\u003d0;r\u003ct.length;r++)e[r]\u003d[0,0],t[r]\u0026\u0026(e[r][0]\u003dx(t[r]),e[r][1]\u003db(t[r]));else e[0]\u003dx(t),e[1]\u003db(t);return e}(e.textposition),a.textColor\u003du(e.textfont,1,P),a.textSize\u003dT(e.textfont.size,P,l.identity,12),a.textFont\u003de.textfont.family,a.textAngle\u003d0);var Y\u003d[\"x\",\"y\",\"z\"];for(a.project\u003d[!1,!1,!1],a.projectScale\u003d[1,1,1],a.projectOpacity\u003d[1,1,1],o\u003d0;o\u003c3;++o){var W\u003de.projection[Y[o]];(a.project[o]\u003dW.show)\u0026\u0026(a.projectOpacity[o]\u003dW.opacity,a.projectScale[o]\u003dW.scale)}a.errorBounds\u003dg(e,v,p);var X\u003dfunction(t){for(var e\u003d[0,0,0],r\u003d[[0,0,0],[0,0,0],[0,0,0]],n\u003d[1,1,1],i\u003d0;i\u003c3;i++){var a\u003dt[i];a\u0026\u0026!1!\u003d\u003da.copy_zstyle\u0026\u0026!1!\u003d\u003dt[2].visible\u0026\u0026(a\u003dt[2]),a\u0026\u0026a.visible\u0026\u0026(e[i]\u003da.width/2,r[i]\u003dc(a.color),n[i]\u003da.thickness)}return{capSize:e,color:r,lineWidth:n}}([e.error_x,e.error_y,e.error_z]);return a.errorColor\u003dX.color,a.errorLineWidth\u003dX.lineWidth,a.errorCapSize\u003dX.capSize,a.delaunayAxis\u003de.surfaceaxis,a.delaunayColor\u003dc(e.surfacecolor),a}function M(t){if(l.isArrayOrTypedArray(t)){var e\u003dt[0];return l.isArrayOrTypedArray(e)\u0026\u0026(t\u003de),\"rgb(\"+t.slice(0,3).map((function(t){return Math.round(255*t)}))+\")\"}return null}function A(t){return l.isArrayOrTypedArray(t)?4\u003d\u003d\u003dt.length\u0026\u0026\"number\"\u003d\u003dtypeof t[0]?M(t):t.map(M):null}y.handlePick\u003dfunction(t){if(t.object\u0026\u0026(t.object\u003d\u003d\u003dthis.linePlot||t.object\u003d\u003d\u003dthis.delaunayMesh||t.object\u003d\u003d\u003dthis.textMarkers||t.object\u003d\u003d\u003dthis.scatterPlot)){var e\u003dt.index\u003dt.data.index;return t.object.highlight\u0026\u0026t.object.highlight(null),this.scatterPlot\u0026\u0026(t.object\u003dthis.scatterPlot,this.scatterPlot.highlight(t.data)),t.textLabel\u003d\"\",this.textLabels\u0026\u0026(Array.isArray(this.textLabels)?(this.textLabels[e]||0\u003d\u003d\u003dthis.textLabels[e])\u0026\u0026(t.textLabel\u003dthis.textLabels[e]):t.textLabel\u003dthis.textLabels),t.traceCoordinate\u003d[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},y.update\u003dfunction(t){var e,r,l,c,u\u003dthis.scene.glplot.gl,f\u003dh.solid;this.data\u003dt;var p\u003dk(this.scene,t);\"mode\"in p\u0026\u0026(this.mode\u003dp.mode),\"lineDashes\"in p\u0026\u0026p.lineDashes in h\u0026\u0026(f\u003dh[p.lineDashes]),this.color\u003dA(p.scatterColor)||A(p.lineColor),this.dataPoints\u003dp.position,e\u003d{gl:this.scene.glplot.gl,position:p.position,color:p.lineColor,lineWidth:p.lineWidth||1,dashes:f[0],dashScale:f[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!\u003d\u003dthis.mode.indexOf(\"lines\")?this.linePlot?this.linePlot.update(e):(this.linePlot\u003dn(e),this.linePlot._trace\u003dthis,this.scene.glplot.add(this.linePlot)):this.linePlot\u0026\u0026(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot\u003dnull);var d\u003dt.opacity;if(t.marker\u0026\u0026t.marker.opacity\u0026\u0026(d*\u003dt.marker.opacity),r\u003d{gl:this.scene.glplot.gl,position:p.position,color:p.scatterColor,size:p.scatterSize,glyph:p.scatterMarker,opacity:d,orthographic:!0,lineWidth:p.scatterLineWidth,lineColor:p.scatterLineColor,project:p.project,projectScale:p.projectScale,projectOpacity:p.projectOpacity},-1!\u003d\u003dthis.mode.indexOf(\"markers\")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot\u003di(r),this.scatterPlot._trace\u003dthis,this.scatterPlot.highlightScale\u003d1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot\u0026\u0026(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot\u003dnull),c\u003d{gl:this.scene.glplot.gl,position:p.position,glyph:p.text,color:p.textColor,size:p.textSize,angle:p.textAngle,alignment:p.textOffset,font:p.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels\u003dt.hovertext||t.text,-1!\u003d\u003dthis.mode.indexOf(\"text\")?this.textMarkers?this.textMarkers.update(c):(this.textMarkers\u003di(c),this.textMarkers._trace\u003dthis,this.textMarkers.highlightScale\u003d1,this.scene.glplot.add(this.textMarkers)):this.textMarkers\u0026\u0026(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers\u003dnull),l\u003d{gl:this.scene.glplot.gl,position:p.position,color:p.errorColor,error:p.errorBounds,lineWidth:p.errorLineWidth,capSize:p.errorCapSize,opacity:t.opacity},this.errorBars?p.errorBounds?this.errorBars.update(l):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars\u003dnull):p.errorBounds\u0026\u0026(this.errorBars\u003da(l),this.errorBars._trace\u003dthis,this.scene.glplot.add(this.errorBars)),p.delaunayAxis\u003e\u003d0){var m\u003dfunction(t,e,r){var n,i\u003d(r+1)%3,a\u003d(r+2)%3,o\u003d[],l\u003d[];for(n\u003d0;n\u003ct.length;++n){var c\u003dt[n];!isNaN(c[i])\u0026\u0026isFinite(c[i])\u0026\u0026!isNaN(c[a])\u0026\u0026isFinite(c[a])\u0026\u0026(o.push([c[i],c[a]]),l.push(n))}var u\u003ds(o);for(n\u003d0;n\u003cu.length;++n)for(var f\u003du[n],h\u003d0;h\u003cf.length;++h)f[h]\u003dl[f[h]];return{positions:t,cells:u,meshColor:e}}(p.position,p.delaunayColor,p.delaunayAxis);m.opacity\u003dt.opacity,this.delaunayMesh?this.delaunayMesh.update(m):(m.gl\u003du,this.delaunayMesh\u003do(m),this.delaunayMesh._trace\u003dthis,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh\u0026\u0026(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh\u003dnull)},y.dispose\u003dfunction(){this.linePlot\u0026\u0026(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot\u0026\u0026(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars\u0026\u0026(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers\u0026\u0026(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh\u0026\u0026(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},e.exports\u003dfunction(t,e){var r\u003dnew v(t,e.uid);return r.update(e),r}},{\"../../components/fx/helpers\":698,\"../../constants/gl3d_dashes\":772,\"../../constants/gl3d_markers\":773,\"../../lib\":799,\"../../lib/gl_format_color\":795,\"../../lib/str2rgbarray\":823,\"../../plots/cartesian/axes\":849,\"../scatter/make_bubble_size_func\":1231,\"./calc_errors\":1244,\"delaunay-triangulate\":176,\"gl-error3d\":269,\"gl-line3d\":277,\"gl-mesh3d\":311,\"gl-scatter3d\":330}],1246:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../scatter/subtypes\"),o\u003dt(\"../scatter/marker_defaults\"),s\u003dt(\"../scatter/line_defaults\"),l\u003dt(\"../scatter/text_defaults\"),c\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,u){function f(r,n){return i.coerce(t,e,c,r,n)}if(function(t,e,r,i){var a\u003d0,o\u003dr(\"x\"),s\u003dr(\"y\"),l\u003dr(\"z\");n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],i),o\u0026\u0026s\u0026\u0026l\u0026\u0026(a\u003dMath.min(o.length,s.length,l.length),e._length\u003de._xlength\u003de._ylength\u003de._zlength\u003da);return a}(t,e,f,u)){f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\"),f(\"xhoverformat\"),f(\"yhoverformat\"),f(\"zhoverformat\"),f(\"mode\"),a.hasLines(e)\u0026\u0026(f(\"connectgaps\"),s(t,e,r,u,f)),a.hasMarkers(e)\u0026\u0026o(t,e,r,u,f,{noSelect:!0}),a.hasText(e)\u0026\u0026(f(\"texttemplate\"),l(t,e,u,f,{noSelect:!0}));var h\u003d(e.line||{}).color,p\u003d(e.marker||{}).color;f(\"surfaceaxis\")\u003e\u003d0\u0026\u0026f(\"surfacecolor\",h||p);for(var d\u003d[\"x\",\"y\",\"z\"],m\u003d0;m\u003c3;++m){var g\u003d\"projection.\"+d[m];f(g+\".show\")\u0026\u0026(f(g+\".opacity\"),f(g+\".scale\"))}var v\u003dn.getComponentMethod(\"errorbars\",\"supplyDefaults\");v(t,e,h||p||r,{axis:\"z\"}),v(t,e,h||p||r,{axis:\"y\",inherit:\"z\"}),v(t,e,h||p||r,{axis:\"x\",inherit:\"z\"})}else e.visible\u003d!1}},{\"../../lib\":799,\"../../registry\":927,\"../scatter/line_defaults\":1227,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"./attributes\":1242}],1247:[function(t,e,r){\"use strict\";e.exports\u003d{plot:t(\"./convert\"),attributes:t(\"./attributes\"),markerSymbols:t(\"../../constants/gl3d_markers\"),supplyDefaults:t(\"./defaults\"),colorbar:[{container:\"marker\",min:\"cmin\",max:\"cmax\"},{container:\"line\",min:\"cmin\",max:\"cmax\"}],calc:t(\"./calc\"),moduleType:\"trace\",name:\"scatter3d\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../constants/gl3d_markers\":773,\"../../plots/gl3d\":892,\"./attributes\":1242,\"./calc\":1243,\"./convert\":1245,\"./defaults\":1246}],1248:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/attributes\"),i\u003dt(\"../../plots/attributes\"),a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,s\u003dt(\"../../components/colorscale/attributes\"),l\u003dt(\"../../lib/extend\").extendFlat,c\u003dn.marker,u\u003dn.line,f\u003dc.line;e.exports\u003d{carpet:{valType:\"string\",editType:\"calc\"},a:{valType:\"data_array\",editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},mode:l({},n.mode,{dflt:\"markers\"}),text:l({},n.text,{}),texttemplate:o({editType:\"plot\"},{keys:[\"a\",\"b\",\"text\"]}),hovertext:l({},n.hovertext,{}),line:{color:u.color,width:u.width,dash:u.dash,shape:l({},u.shape,{values:[\"linear\",\"spline\"]}),smoothing:u.smoothing,editType:\"calc\"},connectgaps:n.connectgaps,fill:l({},n.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:n.fillcolor,marker:l({symbol:c.symbol,opacity:c.opacity,maxdisplayed:c.maxdisplayed,size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,line:l({width:f.width,editType:\"calc\"},s(\"marker.line\")),gradient:c.gradient,editType:\"calc\"},s(\"marker\")),textfont:n.textfont,textposition:n.textposition,selected:n.selected,unselected:n.unselected,hoverinfo:l({},i.hoverinfo,{flags:[\"a\",\"b\",\"text\",\"name\"]}),hoveron:n.hoveron,hovertemplate:a()}},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214}],1249:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../scatter/colorscale_calc\"),a\u003dt(\"../scatter/arrays_to_calcdata\"),o\u003dt(\"../scatter/calc_selection\"),s\u003dt(\"../scatter/calc\").calcMarkerSize,l\u003dt(\"../carpet/lookup_carpetid\");e.exports\u003dfunction(t,e){var r\u003de._carpetTrace\u003dl(t,e);if(r\u0026\u0026r.visible\u0026\u0026\"legendonly\"!\u003d\u003dr.visible){var c;e.xaxis\u003dr.xaxis,e.yaxis\u003dr.yaxis;var u,f,h\u003de._length,p\u003dnew Array(h),d\u003d!1;for(c\u003d0;c\u003ch;c++)if(u\u003de.a[c],f\u003de.b[c],n(u)\u0026\u0026n(f)){var m\u003dr.ab2xy(+u,+f,!0),g\u003dr.isVisible(+u,+f);g||(d\u003d!0),p[c]\u003d{x:m[0],y:m[1],a:u,b:f,vis:g}}else p[c]\u003d{x:!1,y:!1};return e._needsCull\u003dd,p[0].carpet\u003dr,p[0].trace\u003de,s(e,h),i(t,e),a(p,e),o(p,e),p}}},{\"../carpet/lookup_carpetid\":997,\"../scatter/arrays_to_calcdata\":1213,\"../scatter/calc\":1215,\"../scatter/calc_selection\":1216,\"../scatter/colorscale_calc\":1217,\"fast-isnumeric\":245}],1250:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/constants\"),a\u003dt(\"../scatter/subtypes\"),o\u003dt(\"../scatter/marker_defaults\"),s\u003dt(\"../scatter/line_defaults\"),l\u003dt(\"../scatter/line_shape_defaults\"),c\u003dt(\"../scatter/text_defaults\"),u\u003dt(\"../scatter/fillcolor_defaults\"),f\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}p(\"carpet\"),e.xaxis\u003d\"x\",e.yaxis\u003d\"y\";var d\u003dp(\"a\"),m\u003dp(\"b\"),g\u003dMath.min(d.length,m.length);if(g){e._length\u003dg,p(\"text\"),p(\"texttemplate\"),p(\"hovertext\"),p(\"mode\",g\u003ci.PTS_LINESONLY?\"lines+markers\":\"lines\"),a.hasLines(e)\u0026\u0026(s(t,e,r,h,p),l(t,e,p),p(\"connectgaps\")),a.hasMarkers(e)\u0026\u0026o(t,e,r,h,p,{gradient:!0}),a.hasText(e)\u0026\u0026c(t,e,h,p);var v\u003d[];(a.hasMarkers(e)||a.hasText(e))\u0026\u0026(p(\"marker.maxdisplayed\"),v.push(\"points\")),p(\"fill\"),\"none\"!\u003d\u003de.fill\u0026\u0026(u(t,e,r,p),a.hasLines(e)||l(t,e,p)),\"tonext\"!\u003d\u003de.fill\u0026\u0026\"toself\"!\u003d\u003de.fill||v.push(\"fills\"),\"fills\"!\u003d\u003dp(\"hoveron\",v.join(\"+\")||\"points\")\u0026\u0026p(\"hovertemplate\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible\u003d!1}},{\"../../lib\":799,\"../scatter/constants\":1218,\"../scatter/fillcolor_defaults\":1222,\"../scatter/line_defaults\":1227,\"../scatter/line_shape_defaults\":1229,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"./attributes\":1248}],1251:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i){var a\u003dn[i];return t.a\u003da.a,t.b\u003da.b,t.y\u003da.y,t}},{}],1252:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){var r\u003d{},n\u003de._carpet,i\u003dn.ab2ij([t.a,t.b]),a\u003dMath.floor(i[0]),o\u003di[0]-a,s\u003dMath.floor(i[1]),l\u003di[1]-s,c\u003dn.evalxy([],a,s,o,l);return r.yLabel\u003dc[1].toFixed(3),r}},{}],1253:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/hover\"),i\u003dt(\"../../lib\").fillText;e.exports\u003dfunction(t,e,r,a){var o\u003dn(t,e,r,a);if(o\u0026\u0026!1!\u003d\u003do[0].index){var s\u003do[0];if(void 0\u003d\u003d\u003ds.index){var l\u003d1-s.y0/t.ya._length,c\u003dt.xa._length,u\u003dc*l/2,f\u003dc-u;return s.x0\u003dMath.max(Math.min(s.x0,f),u),s.x1\u003dMath.max(Math.min(s.x1,f),u),o}var h\u003ds.cd[s.index];s.a\u003dh.a,s.b\u003dh.b,s.xLabelVal\u003dvoid 0,s.yLabelVal\u003dvoid 0;var p\u003ds.trace,d\u003dp._carpet,m\u003dp._module.formatLabels(h,p);s.yLabel\u003dm.yLabel,delete s.text;var g\u003d[];if(!p.hovertemplate){var v\u003d(h.hi||p.hoverinfo).split(\"+\");-1!\u003d\u003dv.indexOf(\"all\")\u0026\u0026(v\u003d[\"a\",\"b\",\"text\"]),-1!\u003d\u003dv.indexOf(\"a\")\u0026\u0026y(d.aaxis,h.a),-1!\u003d\u003dv.indexOf(\"b\")\u0026\u0026y(d.baxis,h.b),g.push(\"y: \"+s.yLabel),-1!\u003d\u003dv.indexOf(\"text\")\u0026\u0026i(h,p,g),s.extraText\u003dg.join(\"\u003cbr\u003e\")}return o}function y(t,e){var r;r\u003dt.labelprefix\u0026\u0026t.labelprefix.length\u003e0?t.labelprefix.replace(/ \u003d $/,\"\"):t._hovertitle,g.push(r+\": \"+e.toFixed(3)+t.labelsuffix)}}},{\"../../lib\":799,\"../scatter/hover\":1225}],1254:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../scatter/style\").style,styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../scatter/select\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"scattercarpet\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"svg\",\"carpet\",\"symbols\",\"showLegend\",\"carpetDependent\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":863,\"../scatter/marker_colorbar\":1232,\"../scatter/select\":1236,\"../scatter/style\":1238,\"./attributes\":1248,\"./calc\":1249,\"./defaults\":1250,\"./event_data\":1251,\"./format_labels\":1252,\"./hover\":1253,\"./plot\":1255}],1255:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/plot\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../../components/drawing\");e.exports\u003dfunction(t,e,r,o){var s,l,c,u\u003dr[0][0].carpet,f\u003d{xaxis:i.getFromId(t,u.xaxis||\"x\"),yaxis:i.getFromId(t,u.yaxis||\"y\"),plot:e.plot};for(n(t,f,r,o),s\u003d0;s\u003cr.length;s++)l\u003dr[s][0].trace,c\u003do.selectAll(\"g.trace\"+l.uid+\" .js-line\"),a.setClipUrl(c,r[s][0].carpet._clipPathId,t)}},{\"../../components/drawing\":684,\"../../plots/cartesian/axes\":849,\"../scatter/plot\":1235}],1256:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,a\u003dt(\"../scatter/attributes\"),o\u003dt(\"../../plots/attributes\"),s\u003dt(\"../../components/colorscale/attributes\"),l\u003dt(\"../../components/drawing/attributes\").dash,c\u003dt(\"../../lib/extend\").extendFlat,u\u003dt(\"../../plot_api/edit_types\").overrideAll,f\u003da.marker,h\u003da.line,p\u003df.line;e.exports\u003du({lon:{valType:\"data_array\"},lat:{valType:\"data_array\"},locations:{valType:\"data_array\"},locationmode:{valType:\"enumerated\",values:[\"ISO-3\",\"USA-states\",\"country names\",\"geojson-id\"],dflt:\"ISO-3\"},geojson:{valType:\"any\",editType:\"calc\"},featureidkey:{valType:\"string\",editType:\"calc\",dflt:\"id\"},mode:c({},a.mode,{dflt:\"markers\"}),text:c({},a.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"lat\",\"lon\",\"location\",\"text\"]}),hovertext:c({},a.hovertext,{}),textfont:a.textfont,textposition:a.textposition,line:{color:h.color,width:h.width,dash:l},connectgaps:a.connectgaps,marker:c({symbol:f.symbol,opacity:f.opacity,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,colorbar:f.colorbar,line:c({width:p.width},s(\"marker.line\")),gradient:f.gradient},s(\"marker\")),fill:{valType:\"enumerated\",values:[\"none\",\"toself\"],dflt:\"none\"},fillcolor:a.fillcolor,selected:a.selected,unselected:a.unselected,hoverinfo:c({},o.hoverinfo,{flags:[\"lon\",\"lat\",\"location\",\"text\",\"name\"]}),hovertemplate:n()},\"calc\",\"nested\")},{\"../../components/colorscale/attributes\":669,\"../../components/drawing/attributes\":683,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214}],1257:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../constants/numerical\").BADNUM,a\u003dt(\"../scatter/colorscale_calc\"),o\u003dt(\"../scatter/arrays_to_calcdata\"),s\u003dt(\"../scatter/calc_selection\"),l\u003dt(\"../../lib\")._;function c(t){return t\u0026\u0026\"string\"\u003d\u003dtypeof t}e.exports\u003dfunction(t,e){var r,u\u003dArray.isArray(e.locations),f\u003du?e.locations.length:e._length,h\u003dnew Array(f);r\u003de.geojson?function(t){return c(t)||n(t)}:c;for(var p\u003d0;p\u003cf;p++){var d\u003dh[p]\u003d{};if(u){var m\u003de.locations[p];d.loc\u003dr(m)?m:null}else{var g\u003de.lon[p],v\u003de.lat[p];n(g)\u0026\u0026n(v)?d.lonlat\u003d[+g,+v]:d.lonlat\u003d[i,i]}}return o(h,e),a(t,e),s(h,e),f\u0026\u0026(h[0].t\u003d{labels:{lat:l(t,\"lat:\")+\" \",lon:l(t,\"lon:\")+\" \"}}),h}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../scatter/arrays_to_calcdata\":1213,\"../scatter/calc_selection\":1216,\"../scatter/colorscale_calc\":1217,\"fast-isnumeric\":245}],1258:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/subtypes\"),a\u003dt(\"../scatter/marker_defaults\"),o\u003dt(\"../scatter/line_defaults\"),s\u003dt(\"../scatter/text_defaults\"),l\u003dt(\"../scatter/fillcolor_defaults\"),c\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,u){function f(r,i){return n.coerce(t,e,c,r,i)}var h,p\u003df(\"locations\");if(p\u0026\u0026p.length){var d,m\u003df(\"geojson\");(\"string\"\u003d\u003dtypeof m\u0026\u0026\"\"!\u003d\u003dm||n.isPlainObject(m))\u0026\u0026(d\u003d\"geojson-id\"),\"geojson-id\"\u003d\u003d\u003df(\"locationmode\",d)\u0026\u0026f(\"featureidkey\"),h\u003dp.length}else{var g\u003df(\"lon\")||[],v\u003df(\"lat\")||[];h\u003dMath.min(g.length,v.length)}h?(e._length\u003dh,f(\"text\"),f(\"hovertext\"),f(\"hovertemplate\"),f(\"mode\"),i.hasLines(e)\u0026\u0026(o(t,e,r,u,f),f(\"connectgaps\")),i.hasMarkers(e)\u0026\u0026a(t,e,r,u,f,{gradient:!0}),i.hasText(e)\u0026\u0026(f(\"texttemplate\"),s(t,e,u,f)),f(\"fill\"),\"none\"!\u003d\u003de.fill\u0026\u0026l(t,e,r,f),n.coerceSelectionMarkerOpacity(e,f)):e.visible\u003d!1}},{\"../../lib\":799,\"../scatter/fillcolor_defaults\":1222,\"../scatter/line_defaults\":1227,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"./attributes\":1256}],1259:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i){t.lon\u003de.lon,t.lat\u003de.lat,t.location\u003de.loc?e.loc:null;var a\u003dn[i];return a.fIn\u0026\u0026a.fIn.properties\u0026\u0026(t.properties\u003da.fIn.properties),t}},{}],1260:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\");e.exports\u003dfunction(t,e,r){var i\u003d{},a\u003dr[e.geo]._subplot.mockAxis,o\u003dt.lonlat;return i.lonLabel\u003dn.tickText(a,a.c2l(o[0]),!0).text,i.latLabel\u003dn.tickText(a,a.c2l(o[1]),!0).text,i}},{\"../../plots/cartesian/axes\":849}],1261:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/fx\"),i\u003dt(\"../../constants/numerical\").BADNUM,a\u003dt(\"../scatter/get_trace_color\"),o\u003dt(\"../../lib\").fillText,s\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r){var l\u003dt.cd,c\u003dl[0].trace,u\u003dt.xa,f\u003dt.ya,h\u003dt.subplot,p\u003dh.projection.isLonLatOverEdges,d\u003dh.project;if(n.getClosest(l,(function(t){var n\u003dt.lonlat;if(n[0]\u003d\u003d\u003di)return 1/0;if(p(n))return 1/0;var a\u003dd(n),o\u003dd([e,r]),s\u003dMath.abs(a[0]-o[0]),l\u003dMath.abs(a[1]-o[1]),c\u003dMath.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-c,1-3/c)}),t),!1!\u003d\u003dt.index){var m\u003dl[t.index],g\u003dm.lonlat,v\u003d[u.c2p(g),f.c2p(g)],y\u003dm.mrc||1;t.x0\u003dv[0]-y,t.x1\u003dv[0]+y,t.y0\u003dv[1]-y,t.y1\u003dv[1]+y,t.loc\u003dm.loc,t.lon\u003dg[0],t.lat\u003dg[1];var x\u003d{};x[c.geo]\u003d{_subplot:h};var b\u003dc._module.formatLabels(m,c,x);return t.lonLabel\u003db.lonLabel,t.latLabel\u003db.latLabel,t.color\u003da(c,m),t.extraText\u003dfunction(t,e,r,n){if(t.hovertemplate)return;var i\u003de.hi||t.hoverinfo,a\u003d\"all\"\u003d\u003d\u003di?s.hoverinfo.flags:i.split(\"+\"),l\u003d-1!\u003d\u003da.indexOf(\"location\")\u0026\u0026Array.isArray(t.locations),c\u003d-1!\u003d\u003da.indexOf(\"lon\"),u\u003d-1!\u003d\u003da.indexOf(\"lat\"),f\u003d-1!\u003d\u003da.indexOf(\"text\"),h\u003d[];function p(t){return t+\"\\xb0\"}l?h.push(e.loc):c\u0026\u0026u?h.push(\"(\"+p(r.latLabel)+\", \"+p(r.lonLabel)+\")\"):c?h.push(n.lon+p(r.lonLabel)):u\u0026\u0026h.push(n.lat+p(r.latLabel));f\u0026\u0026o(e,t,h);return h.join(\"\u003cbr\u003e\")}(c,m,t,l[0].t.labels),t.hovertemplate\u003dc.hovertemplate,[t]}}},{\"../../components/fx\":702,\"../../constants/numerical\":775,\"../../lib\":799,\"../scatter/get_trace_color\":1224,\"./attributes\":1256}],1262:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),calcGeoJSON:t(\"./plot\").calcGeoJSON,plot:t(\"./plot\").plot,style:t(\"./style\"),styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),moduleType:\"trace\",name:\"scattergeo\",basePlotModule:t(\"../../plots/geo\"),categories:[\"geo\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../plots/geo\":882,\"../scatter/marker_colorbar\":1232,\"../scatter/style\":1238,\"./attributes\":1256,\"./calc\":1257,\"./defaults\":1258,\"./event_data\":1259,\"./format_labels\":1260,\"./hover\":1261,\"./plot\":1263,\"./select\":1264,\"./style\":1265}],1263:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../lib/topojson_utils\").getTopojsonFeatures,o\u003dt(\"../../lib/geojson_utils\"),s\u003dt(\"../../lib/geo_location_utils\"),l\u003dt(\"../../plots/cartesian/autorange\").findExtremes,c\u003dt(\"../../constants/numerical\").BADNUM,u\u003dt(\"../scatter/calc\").calcMarkerSize,f\u003dt(\"../scatter/subtypes\"),h\u003dt(\"./style\");e.exports\u003d{calcGeoJSON:function(t,e){var r,n,i\u003dt[0].trace,o\u003de[i.geo],f\u003do._subplot,h\u003di._length;if(Array.isArray(i.locations)){var p\u003di.locationmode,d\u003d\"geojson-id\"\u003d\u003d\u003dp?s.extractTraceFeature(t):a(i,f.topojson);for(r\u003d0;r\u003ch;r++){n\u003dt[r];var m\u003d\"geojson-id\"\u003d\u003d\u003dp?n.fOut:s.locationToFeature(p,n.loc,d);n.lonlat\u003dm?m.properties.ct:[c,c]}}var g,v,y\u003d{padded:!0};if(\"geojson\"\u003d\u003d\u003do.fitbounds\u0026\u0026\"geojson-id\"\u003d\u003d\u003di.locationmode){var x\u003ds.computeBbox(s.getTraceGeojson(i));g\u003d[x[0],x[2]],v\u003d[x[1],x[3]]}else{for(g\u003dnew Array(h),v\u003dnew Array(h),r\u003d0;r\u003ch;r++)n\u003dt[r],g[r]\u003dn.lonlat[0],v[r]\u003dn.lonlat[1];y.ppad\u003du(i,h)}i._extremes.lon\u003dl(o.lonaxis._ax,g,y),i._extremes.lat\u003dl(o.lataxis._ax,v,y)},plot:function(t,e,r){var a\u003de.layers.frontplot.select(\".scatterlayer\"),s\u003di.makeTraceGroups(a,r,\"trace scattergeo\");function l(t,e){t.lonlat[0]\u003d\u003d\u003dc\u0026\u0026n.select(e).remove()}s.selectAll(\"*\").remove(),s.each((function(e){var r\u003dn.select(this),a\u003de[0].trace;if(f.hasLines(a)||\"none\"!\u003d\u003da.fill){var s\u003do.calcTraceToLineCoords(e),c\u003d\"none\"!\u003d\u003da.fill?o.makePolygon(s):o.makeLine(s);r.selectAll(\"path.js-line\").data([{geojson:c,trace:a}]).enter().append(\"path\").classed(\"js-line\",!0).style(\"stroke-miterlimit\",2)}f.hasMarkers(a)\u0026\u0026r.selectAll(\"path.point\").data(i.identity).enter().append(\"path\").classed(\"point\",!0).each((function(t){l(t,this)})),f.hasText(a)\u0026\u0026r.selectAll(\"g\").data(i.identity).enter().append(\"g\").append(\"text\").each((function(t){l(t,this)})),h(t,e)}))}}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../lib/geo_location_utils\":792,\"../../lib/geojson_utils\":793,\"../../lib/topojson_utils\":827,\"../../plots/cartesian/autorange\":848,\"../scatter/calc\":1215,\"../scatter/subtypes\":1239,\"./style\":1265,\"@plotly/d3\":58}],1264:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/subtypes\"),i\u003dt(\"../../constants/numerical\").BADNUM;e.exports\u003dfunction(t,e){var r,a,o,s,l,c\u003dt.cd,u\u003dt.xaxis,f\u003dt.yaxis,h\u003d[],p\u003dc[0].trace;if(!n.hasMarkers(p)\u0026\u0026!n.hasText(p))return[];if(!1\u003d\u003d\u003de)for(l\u003d0;l\u003cc.length;l++)c[l].selected\u003d0;else for(l\u003d0;l\u003cc.length;l++)(a\u003d(r\u003dc[l]).lonlat)[0]!\u003d\u003di\u0026\u0026(o\u003du.c2p(a),s\u003df.c2p(a),e.contains([o,s],null,l,t)?(h.push({pointNumber:l,lon:a[0],lat:a[1]}),r.selected\u003d1):r.selected\u003d0);return h}},{\"../../constants/numerical\":775,\"../scatter/subtypes\":1239}],1265:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../scatter/style\"),s\u003do.stylePoints,l\u003do.styleText;e.exports\u003dfunction(t,e){e\u0026\u0026function(t,e){var r\u003de[0].trace,o\u003de[0].node3;o.style(\"opacity\",e[0].trace.opacity),s(o,r,t),l(o,r,t),o.selectAll(\"path.js-line\").style(\"fill\",\"none\").each((function(t){var e\u003dn.select(this),r\u003dt.trace,o\u003dr.line||{};e.call(a.stroke,o.color).call(i.dashLine,o.dash||\"\",o.width||0),\"none\"!\u003d\u003dr.fill\u0026\u0026e.call(a.fill,r.fillcolor)}))}(t,e)}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../scatter/style\":1238,\"@plotly/d3\":58}],1266:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/attributes\"),i\u003dt(\"../scatter/attributes\"),a\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,o\u003dt(\"../../components/colorscale/attributes\"),s\u003dt(\"../../lib/extend\").extendFlat,l\u003dt(\"../../plot_api/edit_types\").overrideAll,c\u003dt(\"./constants\").DASHES,u\u003di.line,f\u003di.marker,h\u003df.line,p\u003de.exports\u003dl({x:i.x,x0:i.x0,dx:i.dx,y:i.y,y0:i.y0,dy:i.dy,xperiod:i.xperiod,yperiod:i.yperiod,xperiod0:i.xperiod0,yperiod0:i.yperiod0,xperiodalignment:i.xperiodalignment,yperiodalignment:i.yperiodalignment,xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),text:i.text,hovertext:i.hovertext,textposition:i.textposition,textfont:i.textfont,mode:{valType:\"flaglist\",flags:[\"lines\",\"markers\",\"text\"],extras:[\"none\"]},line:{color:u.color,width:u.width,shape:{valType:\"enumerated\",values:[\"linear\",\"hv\",\"vh\",\"hvh\",\"vhv\"],dflt:\"linear\",editType:\"plot\"},dash:{valType:\"enumerated\",values:Object.keys(c),dflt:\"solid\"}},marker:s({},o(\"marker\"),{symbol:f.symbol,size:f.size,sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:f.opacity,colorbar:f.colorbar,line:s({},o(\"marker.line\"),{width:h.width})}),connectgaps:i.connectgaps,fill:s({},i.fill,{dflt:\"none\"}),fillcolor:i.fillcolor,selected:{marker:i.selected.marker,textfont:i.selected.textfont},unselected:{marker:i.unselected.marker,textfont:i.unselected.textfont},opacity:n.opacity},\"calc\",\"nested\");p.x.editType\u003dp.y.editType\u003dp.x0.editType\u003dp.y0.editType\u003d\"calc+clearAxisTypes\",p.hovertemplate\u003di.hovertemplate,p.texttemplate\u003di.texttemplate},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../scatter/attributes\":1214,\"./constants\":1268}],1267:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/point-cluster\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/cartesian/axis_ids\"),o\u003dt(\"../../plots/cartesian/autorange\").findExtremes,s\u003dt(\"../../plots/cartesian/align_period\"),l\u003dt(\"../scatter/calc\"),c\u003dl.calcMarkerSize,u\u003dl.calcAxisExpansion,f\u003dl.setFirstScatter,h\u003dt(\"../scatter/colorscale_calc\"),p\u003dt(\"./convert\"),d\u003dt(\"./scene_update\"),m\u003dt(\"../../constants/numerical\").BADNUM,g\u003dt(\"./constants\").TOO_MANY_POINTS;function v(t,e,r){var n\u003dt._extremes[e._id],i\u003do(e,r._bnds,{padded:!0});n.min\u003dn.min.concat(i.min),n.max\u003dn.max.concat(i.max)}e.exports\u003dfunction(t,e){var r,o\u003dt._fullLayout,l\u003da.getFromId(t,e.xaxis),y\u003da.getFromId(t,e.yaxis),x\u003do._plots[e.xaxis+e.yaxis],b\u003de._length,_\u003db\u003e\u003dg,w\u003d2*b,T\u003d{},k\u003dl.makeCalcdata(e,\"x\"),M\u003dy.makeCalcdata(e,\"y\"),A\u003ds(e,l,\"x\",k),S\u003ds(e,y,\"y\",M);e._x\u003dA,e._y\u003dS,e.xperiodalignment\u0026\u0026(e._origX\u003dk),e.yperiodalignment\u0026\u0026(e._origY\u003dM);var E\u003dnew Array(w),L\u003dnew Array(b);for(r\u003d0;r\u003cb;r++)E[2*r]\u003dA[r]\u003d\u003d\u003dm?NaN:A[r],E[2*r+1]\u003dS[r]\u003d\u003d\u003dm?NaN:S[r],L[r]\u003dr;if(\"log\"\u003d\u003d\u003dl.type)for(r\u003d0;r\u003cw;r+\u003d2)E[r]\u003dl.c2l(E[r]);if(\"log\"\u003d\u003d\u003dy.type)for(r\u003d1;r\u003cw;r+\u003d2)E[r]\u003dy.c2l(E[r]);_\u0026\u0026\"log\"!\u003d\u003dl.type\u0026\u0026\"log\"!\u003d\u003dy.type?T.tree\u003dn(E):T.ids\u003dL,h(t,e);var C,P\u003dfunction(t,e,r,n,a,o){var s\u003dp.style(t,r);s.marker\u0026\u0026(s.marker.positions\u003dn);s.line\u0026\u0026n.length\u003e1\u0026\u0026i.extendFlat(s.line,p.linePositions(t,r,n));if(s.errorX||s.errorY){var l\u003dp.errorBarPositions(t,r,n,a,o);s.errorX\u0026\u0026i.extendFlat(s.errorX,l.x),s.errorY\u0026\u0026i.extendFlat(s.errorY,l.y)}s.text\u0026\u0026(i.extendFlat(s.text,{positions:n},p.textPosition(t,r,s.text,s.marker)),i.extendFlat(s.textSel,{positions:n},p.textPosition(t,r,s.text,s.markerSel)),i.extendFlat(s.textUnsel,{positions:n},p.textPosition(t,r,s.text,s.markerUnsel)));return s}(t,0,e,E,A,S),I\u003dd(t,x);return f(o,e),_?P.marker\u0026\u0026(C\u003d2*(P.marker.sizeAvg||Math.max(P.marker.size,3))):C\u003dc(e,b),u(t,e,l,y,A,S,C),P.errorX\u0026\u0026v(e,l,P.errorX),P.errorY\u0026\u0026v(e,y,P.errorY),P.fill\u0026\u0026!I.fill2d\u0026\u0026(I.fill2d\u003d!0),P.marker\u0026\u0026!I.scatter2d\u0026\u0026(I.scatter2d\u003d!0),P.line\u0026\u0026!I.line2d\u0026\u0026(I.line2d\u003d!0),!P.errorX\u0026\u0026!P.errorY||I.error2d||(I.error2d\u003d!0),P.text\u0026\u0026!I.glText\u0026\u0026(I.glText\u003d!0),P.marker\u0026\u0026(P.marker.snap\u003db),I.lineOptions.push(P.line),I.errorXOptions.push(P.errorX),I.errorYOptions.push(P.errorY),I.fillOptions.push(P.fill),I.markerOptions.push(P.marker),I.markerSelectedOptions.push(P.markerSel),I.markerUnselectedOptions.push(P.markerUnsel),I.textOptions.push(P.text),I.textSelectedOptions.push(P.textSel),I.textUnselectedOptions.push(P.textUnsel),I.selectBatch.push([]),I.unselectBatch.push([]),T._scene\u003dI,T.index\u003dI.count,T.x\u003dA,T.y\u003dS,T.positions\u003dE,I.count++,[{x:!1,y:!1,t:T,trace:e}]}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/autorange\":848,\"../../plots/cartesian/axis_ids\":853,\"../scatter/calc\":1215,\"../scatter/colorscale_calc\":1217,\"./constants\":1268,\"./convert\":1269,\"./scene_update\":1277,\"@plotly/point-cluster\":59}],1268:[function(t,e,r){\"use strict\";e.exports\u003d{TOO_MANY_POINTS:1e5,SYMBOL_SDF_SIZE:200,SYMBOL_SIZE:20,SYMBOL_STROKE:1,DOT_RE:/-dot/,OPEN_RE:/-open/,DASHES:{solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}}},{}],1269:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"svg-path-sdf\"),a\u003dt(\"color-normalize\"),o\u003dt(\"../../registry\"),s\u003dt(\"../../lib\"),l\u003dt(\"../../components/drawing\"),c\u003dt(\"../../plots/cartesian/axis_ids\"),u\u003dt(\"../../lib/gl_format_color\").formatColor,f\u003dt(\"../scatter/subtypes\"),h\u003dt(\"../scatter/make_bubble_size_func\"),p\u003dt(\"./helpers\"),d\u003dt(\"./constants\"),m\u003dt(\"../../constants/interactions\").DESELECTDIM,g\u003d{start:1,left:1,end:-1,right:-1,middle:0,center:0,bottom:1,top:-1},v\u003dt(\"../../components/fx/helpers\").appendArrayPointValue;function y(t,e){var r,i\u003dt._fullLayout,a\u003de._length,o\u003de.textfont,l\u003de.textposition,c\u003dArray.isArray(l)?l:[l],u\u003do.color,f\u003do.size,h\u003do.family,p\u003d{},d\u003de.texttemplate;if(d){p.text\u003d[];var m\u003di._d3locale,g\u003dArray.isArray(d),y\u003dg?Math.min(d.length,a):a,x\u003dg?function(t){return d[t]}:function(){return d};for(r\u003d0;r\u003cy;r++){var b\u003d{i:r},_\u003de._module.formatLabels(b,e,i),w\u003d{};v(w,e,r);var T\u003de._meta||{};p.text.push(s.texttemplateString(x(r),_,m,w,b,T))}}else Array.isArray(e.text)\u0026\u0026e.text.length\u003ca?p.text\u003de.text.slice():p.text\u003de.text;if(Array.isArray(p.text))for(r\u003dp.text.length;r\u003ca;r++)p.text[r]\u003d\"\";for(p.opacity\u003de.opacity,p.font\u003d{},p.align\u003d[],p.baseline\u003d[],r\u003d0;r\u003cc.length;r++){var k\u003dc[r].split(/\\s+/);switch(k[1]){case\"left\":p.align.push(\"right\");break;case\"right\":p.align.push(\"left\");break;default:p.align.push(k[1])}switch(k[0]){case\"top\":p.baseline.push(\"bottom\");break;case\"bottom\":p.baseline.push(\"top\");break;default:p.baseline.push(k[0])}}if(Array.isArray(u))for(p.color\u003dnew Array(a),r\u003d0;r\u003ca;r++)p.color[r]\u003du[r];else p.color\u003du;if(s.isArrayOrTypedArray(f)||Array.isArray(h))for(p.font\u003dnew Array(a),r\u003d0;r\u003ca;r++){var M\u003dp.font[r]\u003d{};M.size\u003ds.isTypedArray(f)?f[r]:Array.isArray(f)?n(f[r])?f[r]:0:f,M.family\u003dArray.isArray(h)?h[r]:h}else p.font\u003d{size:f,family:h};return p}function x(t){var e,r,n\u003dt._length,i\u003dt.marker,o\u003d{},l\u003ds.isArrayOrTypedArray(i.symbol),c\u003ds.isArrayOrTypedArray(i.color),f\u003ds.isArrayOrTypedArray(i.line.color),d\u003ds.isArrayOrTypedArray(i.opacity),m\u003ds.isArrayOrTypedArray(i.size),g\u003ds.isArrayOrTypedArray(i.line.width);if(l||(r\u003dp.isOpenSymbol(i.symbol)),l||c||f||d){o.colors\u003dnew Array(n),o.borderColors\u003dnew Array(n);var v\u003du(i,i.opacity,n),y\u003du(i.line,i.opacity,n);if(!Array.isArray(y[0])){var x\u003dy;for(y\u003dArray(n),e\u003d0;e\u003cn;e++)y[e]\u003dx}if(!Array.isArray(v[0])){var b\u003dv;for(v\u003dArray(n),e\u003d0;e\u003cn;e++)v[e]\u003db}for(o.colors\u003dv,o.borderColors\u003dy,e\u003d0;e\u003cn;e++){if(l){var _\u003di.symbol[e];r\u003dp.isOpenSymbol(_)}r\u0026\u0026(y[e]\u003dv[e].slice(),v[e]\u003dv[e].slice(),v[e][3]\u003d0)}o.opacity\u003dt.opacity}else r?(o.color\u003da(i.color,\"uint8\"),o.color[3]\u003d0,o.borderColor\u003da(i.color,\"uint8\")):(o.color\u003da(i.color,\"uint8\"),o.borderColor\u003da(i.line.color,\"uint8\")),o.opacity\u003dt.opacity*i.opacity;if(l)for(o.markers\u003dnew Array(n),e\u003d0;e\u003cn;e++)o.markers[e]\u003dE(i.symbol[e]);else o.marker\u003dE(i.symbol);var w,T\u003dh(t);if(m||g){var k,M\u003do.sizes\u003dnew Array(n),A\u003do.borderSizes\u003dnew Array(n),S\u003d0;if(m){for(e\u003d0;e\u003cn;e++)M[e]\u003dT(i.size[e]),S+\u003dM[e];k\u003dS/n}else for(w\u003dT(i.size),e\u003d0;e\u003cn;e++)M[e]\u003dw;if(g)for(e\u003d0;e\u003cn;e++)A[e]\u003di.line.width[e]/2;else for(w\u003di.line.width/2,e\u003d0;e\u003cn;e++)A[e]\u003dw;o.sizeAvg\u003dk}else o.size\u003dT(i\u0026\u0026i.size||10),o.borderSizes\u003dT(i.line.width);return o}function b(t,e){var r\u003dt.marker,n\u003d{};return e?(e.marker\u0026\u0026e.marker.symbol?n\u003dx(s.extendFlat({},r,e.marker)):e.marker\u0026\u0026(e.marker.size\u0026\u0026(n.size\u003de.marker.size/2),e.marker.color\u0026\u0026(n.colors\u003de.marker.color),void 0!\u003d\u003de.marker.opacity\u0026\u0026(n.opacity\u003de.marker.opacity)),n):n}function _(t,e,r){var n\u003d{};if(!r)return n;if(r.textfont){var i\u003d{opacity:1,text:e.text,texttemplate:e.texttemplate,textposition:e.textposition,textfont:s.extendFlat({},e.textfont)};r.textfont\u0026\u0026s.extendFlat(i.textfont,r.textfont),n\u003dy(t,i)}return n}function w(t,e){var r\u003d{capSize:2*e.width,lineWidth:e.thickness,color:e.color};return e.copy_ystyle\u0026\u0026(r\u003dt.error_y),r}var T\u003dd.SYMBOL_SDF_SIZE,k\u003dd.SYMBOL_SIZE,M\u003dd.SYMBOL_STROKE,A\u003d{},S\u003dl.symbolFuncs[0](.05*k);function E(t){if(\"circle\"\u003d\u003d\u003dt)return null;var e,r,n\u003dl.symbolNumber(t),a\u003dl.symbolFuncs[n%100],o\u003d!!l.symbolNoDot[n%100],s\u003d!!l.symbolNoFill[n%100],c\u003dp.isDotSymbol(t);return A[t]?A[t]:(e\u003dc\u0026\u0026!o?a(1.1*k)+S:a(k),r\u003di(e,{w:T,h:T,viewBox:[-k,-k,k,k],stroke:s?M:-M}),A[t]\u003dr,r||null)}e.exports\u003d{style:function(t,e){var r,n\u003d{marker:void 0,markerSel:void 0,markerUnsel:void 0,line:void 0,fill:void 0,errorX:void 0,errorY:void 0,text:void 0,textSel:void 0,textUnsel:void 0};if(!0!\u003d\u003de.visible)return n;if(f.hasText(e)\u0026\u0026(n.text\u003dy(t,e),n.textSel\u003d_(t,e,e.selected),n.textUnsel\u003d_(t,e,e.unselected)),f.hasMarkers(e)\u0026\u0026(n.marker\u003dx(e),n.markerSel\u003db(e,e.selected),n.markerUnsel\u003db(e,e.unselected),!e.unselected\u0026\u0026s.isArrayOrTypedArray(e.marker.opacity))){var i\u003de.marker.opacity;for(n.markerUnsel.opacity\u003dnew Array(i.length),r\u003d0;r\u003ci.length;r++)n.markerUnsel.opacity[r]\u003dm*i[r]}if(f.hasLines(e)){n.line\u003d{overlay:!0,thickness:e.line.width,color:e.line.color,opacity:e.opacity};var a\u003d(d.DASHES[e.line.dash]||[1]).slice();for(r\u003d0;r\u003ca.length;++r)a[r]*\u003de.line.width;n.line.dashes\u003da}return e.error_x\u0026\u0026e.error_x.visible\u0026\u0026(n.errorX\u003dw(e,e.error_x)),e.error_y\u0026\u0026e.error_y.visible\u0026\u0026(n.errorY\u003dw(e,e.error_y)),e.fill\u0026\u0026\"none\"!\u003d\u003de.fill\u0026\u0026(n.fill\u003d{closed:!0,fill:e.fillcolor,thickness:0}),n},markerStyle:x,markerSelection:b,linePositions:function(t,e,r){var n,i,a\u003dr.length,o\u003da/2;if(f.hasLines(e)\u0026\u0026o)if(\"hv\"\u003d\u003d\u003de.line.shape){for(n\u003d[],i\u003d0;i\u003co-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i+2],r[2*i+1]));n.push(r[a-2],r[a-1])}else if(\"hvh\"\u003d\u003d\u003de.line.shape){for(n\u003d[],i\u003d0;i\u003co-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var s\u003d(r[2*i]+r[2*i+2])/2;n.push(r[2*i],r[2*i+1],s,r[2*i+1],s,r[2*i+3])}n.push(r[a-2],r[a-1])}else if(\"vhv\"\u003d\u003d\u003de.line.shape){for(n\u003d[],i\u003d0;i\u003co-1;i++)if(isNaN(r[2*i])||isNaN(r[2*i+1])||isNaN(r[2*i+2])||isNaN(r[2*i+3]))isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+1]),n.push(NaN,NaN);else{var l\u003d(r[2*i+1]+r[2*i+3])/2;n.push(r[2*i],r[2*i+1],r[2*i],l,r[2*i+2],l)}n.push(r[a-2],r[a-1])}else if(\"vh\"\u003d\u003d\u003de.line.shape){for(n\u003d[],i\u003d0;i\u003co-1;i++)isNaN(r[2*i])||isNaN(r[2*i+1])?n.push(NaN,NaN,NaN,NaN):(n.push(r[2*i],r[2*i+1]),isNaN(r[2*i+2])||isNaN(r[2*i+3])?n.push(NaN,NaN):n.push(r[2*i],r[2*i+3]));n.push(r[a-2],r[a-1])}else n\u003dr;var c\u003d!1;for(i\u003d0;i\u003cn.length;i++)if(isNaN(n[i])){c\u003d!0;break}var u\u003dc||n.length\u003ed.TOO_MANY_POINTS||f.hasMarkers(e)?\"rect\":\"round\";if(c\u0026\u0026e.connectgaps){var h\u003dn[0],p\u003dn[1];for(i\u003d0;i\u003cn.length;i+\u003d2)isNaN(n[i])||isNaN(n[i+1])?(n[i]\u003dh,n[i+1]\u003dp):(h\u003dn[i],p\u003dn[i+1])}return{join:u,positions:n}},errorBarPositions:function(t,e,r,i,a){var s\u003do.getComponentMethod(\"errorbars\",\"makeComputeError\"),l\u003dc.getFromId(t,e.xaxis),u\u003dc.getFromId(t,e.yaxis),f\u003dr.length/2,h\u003d{};function p(t,i){var a\u003di._id.charAt(0),o\u003de[\"error_\"+a];if(o\u0026\u0026o.visible\u0026\u0026(\"linear\"\u003d\u003d\u003di.type||\"log\"\u003d\u003d\u003di.type)){for(var l\u003ds(o),c\u003d{x:0,y:1}[a],u\u003d{x:[0,1,2,3],y:[2,3,0,1]}[a],p\u003dnew Float64Array(4*f),d\u003d1/0,m\u003d-1/0,g\u003d0,v\u003d0;g\u003cf;g++,v+\u003d4){var y\u003dt[g];if(n(y)){var x\u003dr[2*g+c],b\u003dl(y,g),_\u003db[0],w\u003db[1];if(n(_)\u0026\u0026n(w)){var T\u003dy-_,k\u003dy+w;p[v+u[0]]\u003dx-i.c2l(T),p[v+u[1]]\u003di.c2l(k)-x,p[v+u[2]]\u003d0,p[v+u[3]]\u003d0,d\u003dMath.min(d,y-_),m\u003dMath.max(m,y+w)}}}h[a]\u003d{positions:r,errors:p,_bnds:[d,m]}}}return p(i,l),p(a,u),h},textPosition:function(t,e,r,n){var i,a\u003de._length,o\u003d{};if(f.hasMarkers(e)){var s\u003dr.font,l\u003dr.align,c\u003dr.baseline;for(o.offset\u003dnew Array(a),i\u003d0;i\u003ca;i++){var u\u003dn.sizes?n.sizes[i]:n.size,h\u003dArray.isArray(s)?s[i].size:s.size,p\u003dArray.isArray(l)?l.length\u003e1?l[i]:l[0]:l,d\u003dArray.isArray(c)?c.length\u003e1?c[i]:c[0]:c,m\u003dg[p],v\u003dg[d],y\u003du?u/.8+1:0,x\u003d-v*y-.5*v;o.offset[i]\u003d[m*y/h,x/h]}}return o}}},{\"../../components/drawing\":684,\"../../components/fx/helpers\":698,\"../../constants/interactions\":774,\"../../lib\":799,\"../../lib/gl_format_color\":795,\"../../plots/cartesian/axis_ids\":853,\"../../registry\":927,\"../scatter/make_bubble_size_func\":1231,\"../scatter/subtypes\":1239,\"./constants\":1268,\"./helpers\":1273,\"color-normalize\":131,\"fast-isnumeric\":245,\"svg-path-sdf\":591}],1270:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../registry\"),a\u003dt(\"./helpers\"),o\u003dt(\"./attributes\"),s\u003dt(\"../scatter/constants\"),l\u003dt(\"../scatter/subtypes\"),c\u003dt(\"../scatter/xy_defaults\"),u\u003dt(\"../scatter/period_defaults\"),f\u003dt(\"../scatter/marker_defaults\"),h\u003dt(\"../scatter/line_defaults\"),p\u003dt(\"../scatter/fillcolor_defaults\"),d\u003dt(\"../scatter/text_defaults\");e.exports\u003dfunction(t,e,r,m){function g(r,i){return n.coerce(t,e,o,r,i)}var v\u003d!!t.marker\u0026\u0026a.isOpenSymbol(t.marker.symbol),y\u003dl.isBubble(t),x\u003dc(t,e,m,g);if(x){u(t,e,m,g),g(\"xhoverformat\"),g(\"yhoverformat\");var b\u003dx\u003cs.PTS_LINESONLY?\"lines+markers\":\"lines\";g(\"text\"),g(\"hovertext\"),g(\"hovertemplate\"),g(\"mode\",b),l.hasLines(e)\u0026\u0026(g(\"connectgaps\"),h(t,e,r,m,g),g(\"line.shape\")),l.hasMarkers(e)\u0026\u0026(f(t,e,r,m,g),g(\"marker.line.width\",v||y?1:0)),l.hasText(e)\u0026\u0026(g(\"texttemplate\"),d(t,e,m,g));var _\u003d(e.line||{}).color,w\u003d(e.marker||{}).color;g(\"fill\"),\"none\"!\u003d\u003de.fill\u0026\u0026p(t,e,r,g);var T\u003di.getComponentMethod(\"errorbars\",\"supplyDefaults\");T(t,e,_||w||r,{axis:\"y\"}),T(t,e,_||w||r,{axis:\"x\",inherit:\"y\"}),n.coerceSelectionMarkerOpacity(e,g)}else e.visible\u003d!1}},{\"../../lib\":799,\"../../registry\":927,\"../scatter/constants\":1218,\"../scatter/fillcolor_defaults\":1222,\"../scatter/line_defaults\":1227,\"../scatter/marker_defaults\":1233,\"../scatter/period_defaults\":1234,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"../scatter/xy_defaults\":1241,\"./attributes\":1266,\"./helpers\":1273}],1271:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../constants/interactions\").DESELECTDIM;e.exports\u003d{styleTextSelection:function(t){var e,r,o\u003dt[0],s\u003do.trace,l\u003do.t,c\u003dl._scene,u\u003dl.index,f\u003dc.selectBatch[u],h\u003dc.unselectBatch[u],p\u003dc.textOptions[u],d\u003dc.textSelectedOptions[u]||{},m\u003dc.textUnselectedOptions[u]||{},g\u003dn.extendFlat({},p);if(f.length||h.length){var v\u003dd.color,y\u003dm.color,x\u003dp.color,b\u003dArray.isArray(x);for(g.color\u003dnew Array(s._length),e\u003d0;e\u003cf.length;e++)r\u003df[e],g.color[r]\u003dv||(b?x[r]:x);for(e\u003d0;e\u003ch.length;e++){r\u003dh[e];var _\u003db?x[r]:x;g.color[r]\u003dy||(v?_:i.addOpacity(_,a))}}c.glText[u].update(g)}}},{\"../../components/color\":662,\"../../constants/interactions\":774,\"../../lib\":799}],1272:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/format_labels\");e.exports\u003dfunction(t,e,r){var i\u003dt.i;return\"x\"in t||(t.x\u003de._x[i]),\"y\"in t||(t.y\u003de._y[i]),n(t,e,r)}},{\"../scatter/format_labels\":1223}],1273:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\");r.isOpenSymbol\u003dfunction(t){return\"string\"\u003d\u003dtypeof t?n.OPEN_RE.test(t):t%200\u003e100},r.isDotSymbol\u003dfunction(t){return\"string\"\u003d\u003dtypeof t?n.DOT_RE.test(t):t\u003e200}},{\"./constants\":1268}],1274:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../scatter/get_trace_color\");function o(t,e,r,o){var s\u003dt.xa,l\u003dt.ya,c\u003dt.distance,u\u003dt.dxy,f\u003dt.index,h\u003d{pointNumber:f,x:e[f],y:r[f]};h.tx\u003dArray.isArray(o.text)?o.text[f]:o.text,h.htx\u003dArray.isArray(o.hovertext)?o.hovertext[f]:o.hovertext,h.data\u003dArray.isArray(o.customdata)?o.customdata[f]:o.customdata,h.tp\u003dArray.isArray(o.textposition)?o.textposition[f]:o.textposition;var p\u003do.textfont;p\u0026\u0026(h.ts\u003di.isArrayOrTypedArray(p.size)?p.size[f]:p.size,h.tc\u003dArray.isArray(p.color)?p.color[f]:p.color,h.tf\u003dArray.isArray(p.family)?p.family[f]:p.family);var d\u003do.marker;d\u0026\u0026(h.ms\u003di.isArrayOrTypedArray(d.size)?d.size[f]:d.size,h.mo\u003di.isArrayOrTypedArray(d.opacity)?d.opacity[f]:d.opacity,h.mx\u003di.isArrayOrTypedArray(d.symbol)?d.symbol[f]:d.symbol,h.mc\u003di.isArrayOrTypedArray(d.color)?d.color[f]:d.color);var m\u003dd\u0026\u0026d.line;m\u0026\u0026(h.mlc\u003dArray.isArray(m.color)?m.color[f]:m.color,h.mlw\u003di.isArrayOrTypedArray(m.width)?m.width[f]:m.width);var g\u003dd\u0026\u0026d.gradient;g\u0026\u0026\"none\"!\u003d\u003dg.type\u0026\u0026(h.mgt\u003dArray.isArray(g.type)?g.type[f]:g.type,h.mgc\u003dArray.isArray(g.color)?g.color[f]:g.color);var v\u003ds.c2p(h.x,!0),y\u003dl.c2p(h.y,!0),x\u003dh.mrc||1,b\u003do.hoverlabel;b\u0026\u0026(h.hbg\u003dArray.isArray(b.bgcolor)?b.bgcolor[f]:b.bgcolor,h.hbc\u003dArray.isArray(b.bordercolor)?b.bordercolor[f]:b.bordercolor,h.hts\u003di.isArrayOrTypedArray(b.font.size)?b.font.size[f]:b.font.size,h.htc\u003dArray.isArray(b.font.color)?b.font.color[f]:b.font.color,h.htf\u003dArray.isArray(b.font.family)?b.font.family[f]:b.font.family,h.hnl\u003di.isArrayOrTypedArray(b.namelength)?b.namelength[f]:b.namelength);var _\u003do.hoverinfo;_\u0026\u0026(h.hi\u003dArray.isArray(_)?_[f]:_);var w\u003do.hovertemplate;w\u0026\u0026(h.ht\u003dArray.isArray(w)?w[f]:w);var T\u003d{};T[t.index]\u003dh;var k\u003do._origX,M\u003do._origY,A\u003di.extendFlat({},t,{color:a(o,h),x0:v-x,x1:v+x,xLabelVal:k?k[f]:h.x,y0:y-x,y1:y+x,yLabelVal:M?M[f]:h.y,cd:T,distance:c,spikeDistance:u,hovertemplate:h.ht});return h.htx?A.text\u003dh.htx:h.tx?A.text\u003dh.tx:o.text\u0026\u0026(A.text\u003do.text),i.fillText(h,o,A),n.getComponentMethod(\"errorbars\",\"hoverInfo\")(h,o,A),A}e.exports\u003d{hoverPoints:function(t,e,r,n){var i,a,s,l,c,u,f,h,p,d\u003dt.cd,m\u003dd[0].t,g\u003dd[0].trace,v\u003dt.xa,y\u003dt.ya,x\u003dm.x,b\u003dm.y,_\u003dv.c2p(e),w\u003dy.c2p(r),T\u003dt.distance;if(m.tree){var k\u003dv.p2c(_-T),M\u003dv.p2c(_+T),A\u003dy.p2c(w-T),S\u003dy.p2c(w+T);i\u003d\"x\"\u003d\u003d\u003dn?m.tree.range(Math.min(k,M),Math.min(y._rl[0],y._rl[1]),Math.max(k,M),Math.max(y._rl[0],y._rl[1])):m.tree.range(Math.min(k,M),Math.min(A,S),Math.max(k,M),Math.max(A,S))}else i\u003dm.ids;var E\u003dT;if(\"x\"\u003d\u003d\u003dn)for(c\u003d0;c\u003ci.length;c++)s\u003dx[i[c]],u\u003dMath.abs(v.c2p(s)-_),g._origX\u0026\u0026void 0!\u003d\u003dg._origX[c]\u0026\u0026(u+\u003dv.c2p(g._origX[c])-v.c2p(s)),u\u003cE\u0026\u0026(E\u003du,f\u003dy.c2p(b[i[c]])-w,g._origY\u0026\u0026void 0!\u003d\u003dg._origY[c]\u0026\u0026(f+\u003dy.c2p(g._origY[c])-y.c2p(l)),p\u003dMath.sqrt(u*u+f*f),a\u003di[c]);else for(c\u003di.length-1;c\u003e-1;c--)s\u003dx[i[c]],l\u003db[i[c]],u\u003dv.c2p(s)-_,f\u003dy.c2p(l)-w,(h\u003dMath.sqrt(u*u+f*f))\u003cE\u0026\u0026(E\u003dp\u003dh,a\u003di[c]);return t.index\u003da,t.distance\u003dE,t.dxy\u003dp,void 0\u003d\u003d\u003da?[t]:[o(t,x,b,g)]},calcHover:o}},{\"../../lib\":799,\"../../registry\":927,\"../scatter/get_trace_color\":1224}],1275:[function(t,e,r){\"use strict\";var n\u003dt(\"./hover\");e.exports\u003d{moduleType:\"trace\",name:\"scattergl\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"gl\",\"regl\",\"cartesian\",\"symbols\",\"errorBarsOK\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../scatter/cross_trace_defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:n.hoverPoints,selectPoints:t(\"./select\"),meta:{}}},{\"../../plots/cartesian\":863,\"../scatter/cross_trace_defaults\":1220,\"../scatter/marker_colorbar\":1232,\"./attributes\":1266,\"./calc\":1267,\"./defaults\":1270,\"./format_labels\":1272,\"./hover\":1274,\"./plot\":1276,\"./select\":1278}],1276:[function(t,e,r){\"use strict\";var n\u003dt(\"regl-scatter2d\"),i\u003dt(\"regl-line2d\"),a\u003dt(\"regl-error2d\"),o\u003dt(\"gl-text\"),s\u003dt(\"../../lib\"),l\u003dt(\"../../components/dragelement/helpers\").selectMode,c\u003dt(\"../../lib/prepare_regl\"),u\u003dt(\"../scatter/subtypes\"),f\u003dt(\"../scatter/link_traces\"),h\u003dt(\"./edit_style\").styleTextSelection;function p(t,e,r){var n\u003dt._size,i\u003dt.width,a\u003dt.height;return[n.l+e.domain[0]*n.w,n.b+r.domain[0]*n.h,i-n.r-(1-e.domain[1])*n.w,a-n.t-(1-r.domain[1])*n.h]}e.exports\u003dfunction(t,e,r){if(r.length){var d,m,g\u003dt._fullLayout,v\u003de._scene,y\u003de.xaxis,x\u003de.yaxis;if(v)if(c(t,[\"ANGLE_instanced_arrays\",\"OES_element_index_uint\"])){var b\u003dv.count,_\u003dg._glcanvas.data()[0].regl;if(f(t,e,r),v.dirty){if(!0\u003d\u003d\u003dv.error2d\u0026\u0026(v.error2d\u003da(_)),!0\u003d\u003d\u003dv.line2d\u0026\u0026(v.line2d\u003di(_)),!0\u003d\u003d\u003dv.scatter2d\u0026\u0026(v.scatter2d\u003dn(_,{constPointSize:!0})),!0\u003d\u003d\u003dv.fill2d\u0026\u0026(v.fill2d\u003di(_)),!0\u003d\u003d\u003dv.glText)for(v.glText\u003dnew Array(b),d\u003d0;d\u003cb;d++)v.glText[d]\u003dnew o(_);if(v.glText){if(b\u003ev.glText.length){var w\u003db-v.glText.length;for(d\u003d0;d\u003cw;d++)v.glText.push(new o(_))}else if(b\u003cv.glText.length){var T\u003dv.glText.length-b;v.glText.splice(b,T).forEach((function(t){t.destroy()}))}for(d\u003d0;d\u003cb;d++)v.glText[d].update(v.textOptions[d])}if(v.line2d\u0026\u0026(v.line2d.update(v.lineOptions),v.lineOptions\u003dv.lineOptions.map((function(t){if(t\u0026\u0026t.positions){for(var e\u003dt.positions,r\u003d0;r\u003ce.length\u0026\u0026(isNaN(e[r])||isNaN(e[r+1]));)r+\u003d2;for(var n\u003de.length-2;n\u003er\u0026\u0026(isNaN(e[n])||isNaN(e[n+1]));)n-\u003d2;t.positions\u003de.slice(r,n+2)}return t})),v.line2d.update(v.lineOptions)),v.error2d){var k\u003d(v.errorXOptions||[]).concat(v.errorYOptions||[]);v.error2d.update(k)}v.scatter2d\u0026\u0026v.scatter2d.update(v.markerOptions),v.fillOrder\u003ds.repeat(null,b),v.fill2d\u0026\u0026(v.fillOptions\u003dv.fillOptions.map((function(t,e){var n\u003dr[e];if(t\u0026\u0026n\u0026\u0026n[0]\u0026\u0026n[0].trace){var i,a,o\u003dn[0],s\u003do.trace,l\u003do.t,c\u003dv.lineOptions[e],u\u003d[];s._ownfill\u0026\u0026u.push(e),s._nexttrace\u0026\u0026u.push(e+1),u.length\u0026\u0026(v.fillOrder[e]\u003du);var f,h,p\u003d[],d\u003dc\u0026\u0026c.positions||l.positions;if(\"tozeroy\"\u003d\u003d\u003ds.fill){for(f\u003d0;f\u003cd.length\u0026\u0026isNaN(d[f+1]);)f+\u003d2;for(h\u003dd.length-2;h\u003ef\u0026\u0026isNaN(d[h+1]);)h-\u003d2;0!\u003d\u003dd[f+1]\u0026\u0026(p\u003d[d[f],0]),p\u003dp.concat(d.slice(f,h+2)),0!\u003d\u003dd[h+1]\u0026\u0026(p\u003dp.concat([d[h],0]))}else if(\"tozerox\"\u003d\u003d\u003ds.fill){for(f\u003d0;f\u003cd.length\u0026\u0026isNaN(d[f]);)f+\u003d2;for(h\u003dd.length-2;h\u003ef\u0026\u0026isNaN(d[h]);)h-\u003d2;0!\u003d\u003dd[f]\u0026\u0026(p\u003d[0,d[f+1]]),p\u003dp.concat(d.slice(f,h+2)),0!\u003d\u003dd[h]\u0026\u0026(p\u003dp.concat([0,d[h+1]]))}else if(\"toself\"\u003d\u003d\u003ds.fill||\"tonext\"\u003d\u003d\u003ds.fill){for(p\u003d[],i\u003d0,t.splitNull\u003d!0,a\u003d0;a\u003cd.length;a+\u003d2)(isNaN(d[a])||isNaN(d[a+1]))\u0026\u0026((p\u003dp.concat(d.slice(i,a))).push(d[i],d[i+1]),p.push(null,null),i\u003da+2);p\u003dp.concat(d.slice(i)),i\u0026\u0026p.push(d[i],d[i+1])}else{var m\u003ds._nexttrace;if(m){var g\u003dv.lineOptions[e+1];if(g){var y\u003dg.positions;if(\"tonexty\"\u003d\u003d\u003ds.fill){for(p\u003dd.slice(),e\u003dMath.floor(y.length/2);e--;){var x\u003dy[2*e],b\u003dy[2*e+1];isNaN(x)||isNaN(b)||p.push(x,b)}t.fill\u003dm.fillcolor}}}}if(s._prevtrace\u0026\u0026\"tonext\"\u003d\u003d\u003ds._prevtrace.fill){var _\u003dv.lineOptions[e-1].positions,w\u003dp.length/2,T\u003d[i\u003dw];for(a\u003d0;a\u003c_.length;a+\u003d2)(isNaN(_[a])||isNaN(_[a+1]))\u0026\u0026(T.push(a/2+w+1),i\u003da+2);p\u003dp.concat(_),t.hole\u003dT}return t.fillmode\u003ds.fill,t.opacity\u003ds.opacity,t.positions\u003dp,t}})),v.fill2d.update(v.fillOptions))}var M\u003dg.dragmode,A\u003dl(M),S\u003dg.clickmode.indexOf(\"select\")\u003e-1;for(d\u003d0;d\u003cb;d++){var E\u003dr[d][0],L\u003dE.trace,C\u003dE.t,P\u003dC.index,I\u003dL._length,O\u003dC.x,z\u003dC.y;if(L.selectedpoints||A||S){if(A||(A\u003d!0),L.selectedpoints){var D\u003dv.selectBatch[P]\u003ds.selIndices2selPoints(L),R\u003d{};for(m\u003d0;m\u003cD.length;m++)R[D[m]]\u003d1;var F\u003d[];for(m\u003d0;m\u003cI;m++)R[m]||F.push(m);v.unselectBatch[P]\u003dF}var B\u003dC.xpx\u003dnew Array(I),N\u003dC.ypx\u003dnew Array(I);for(m\u003d0;m\u003cI;m++)B[m]\u003dy.c2p(O[m]),N[m]\u003dx.c2p(z[m])}else C.xpx\u003dC.ypx\u003dnull}if(A){if(v.select2d||(v.select2d\u003dn(g._glcanvas.data()[1].regl)),v.scatter2d){var j\u003dnew Array(b);for(d\u003d0;d\u003cb;d++)j[d]\u003dv.selectBatch[d].length||v.unselectBatch[d].length?v.markerUnselectedOptions[d]:{};v.scatter2d.update(j)}v.select2d\u0026\u0026(v.select2d.update(v.markerOptions),v.select2d.update(v.markerSelectedOptions)),v.glText\u0026\u0026r.forEach((function(t){var e\u003d((t||[])[0]||{}).trace||{};u.hasText(e)\u0026\u0026h(t)}))}else v.scatter2d\u0026\u0026v.scatter2d.update(v.markerOptions);var U\u003d{viewport:p(g,y,x),range:[(y._rl||y.range)[0],(x._rl||x.range)[0],(y._rl||y.range)[1],(x._rl||x.range)[1]]},V\u003ds.repeat(U,v.count);v.fill2d\u0026\u0026v.fill2d.update(V),v.line2d\u0026\u0026v.line2d.update(V),v.error2d\u0026\u0026v.error2d.update(V.concat(V)),v.scatter2d\u0026\u0026v.scatter2d.update(V),v.select2d\u0026\u0026v.select2d.update(V),v.glText\u0026\u0026v.glText.forEach((function(t){t.update(U)}))}else v.init()}}},{\"../../components/dragelement/helpers\":680,\"../../lib\":799,\"../../lib/prepare_regl\":812,\"../scatter/link_traces\":1230,\"../scatter/subtypes\":1239,\"./edit_style\":1271,\"gl-text\":351,\"regl-error2d\":532,\"regl-line2d\":533,\"regl-scatter2d\":534}],1277:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e){var r\u003de._scene,i\u003d{count:0,dirty:!0,lineOptions:[],fillOptions:[],markerOptions:[],markerSelectedOptions:[],markerUnselectedOptions:[],errorXOptions:[],errorYOptions:[],textOptions:[],textSelectedOptions:[],textUnselectedOptions:[],selectBatch:[],unselectBatch:[]},a\u003d{fill2d:!1,scatter2d:!1,error2d:!1,line2d:!1,glText:!1,select2d:!1};return e._scene||((r\u003de._scene\u003d{}).init\u003dfunction(){n.extendFlat(r,a,i)},r.init(),r.update\u003dfunction(t){var e\u003dn.repeat(t,r.count);if(r.fill2d\u0026\u0026r.fill2d.update(e),r.scatter2d\u0026\u0026r.scatter2d.update(e),r.line2d\u0026\u0026r.line2d.update(e),r.error2d\u0026\u0026r.error2d.update(e.concat(e)),r.select2d\u0026\u0026r.select2d.update(e),r.glText)for(var i\u003d0;i\u003cr.count;i++)r.glText[i].update(t)},r.draw\u003dfunction(){for(var t\u003dr.count,e\u003dr.fill2d,i\u003dr.error2d,a\u003dr.line2d,o\u003dr.scatter2d,s\u003dr.glText,l\u003dr.select2d,c\u003dr.selectBatch,u\u003dr.unselectBatch,f\u003d0;f\u003ct;f++){if(e\u0026\u0026r.fillOrder[f]\u0026\u0026e.draw(r.fillOrder[f]),a\u0026\u0026r.lineOptions[f]\u0026\u0026a.draw(f),i\u0026\u0026(r.errorXOptions[f]\u0026\u0026i.draw(f),r.errorYOptions[f]\u0026\u0026i.draw(f+t)),o\u0026\u0026r.markerOptions[f])if(u[f].length){var h\u003dn.repeat([],r.count);h[f]\u003du[f],o.draw(h)}else c[f].length||o.draw(f);s[f]\u0026\u0026r.textOptions[f]\u0026\u0026s[f].render()}l\u0026\u0026l.draw(c),r.dirty\u003d!1},r.destroy\u003dfunction(){r.fill2d\u0026\u0026r.fill2d.destroy\u0026\u0026r.fill2d.destroy(),r.scatter2d\u0026\u0026r.scatter2d.destroy\u0026\u0026r.scatter2d.destroy(),r.error2d\u0026\u0026r.error2d.destroy\u0026\u0026r.error2d.destroy(),r.line2d\u0026\u0026r.line2d.destroy\u0026\u0026r.line2d.destroy(),r.select2d\u0026\u0026r.select2d.destroy\u0026\u0026r.select2d.destroy(),r.glText\u0026\u0026r.glText.forEach((function(t){t.destroy\u0026\u0026t.destroy()})),r.lineOptions\u003dnull,r.fillOptions\u003dnull,r.markerOptions\u003dnull,r.markerSelectedOptions\u003dnull,r.markerUnselectedOptions\u003dnull,r.errorXOptions\u003dnull,r.errorYOptions\u003dnull,r.textOptions\u003dnull,r.textSelectedOptions\u003dnull,r.textUnselectedOptions\u003dnull,r.selectBatch\u003dnull,r.unselectBatch\u003dnull,e._scene\u003dnull}),r.dirty||n.extendFlat(r,i),r}},{\"../../lib\":799}],1278:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/subtypes\"),i\u003dt(\"./edit_style\").styleTextSelection;e.exports\u003dfunction(t,e){var r\u003dt.cd,a\u003dt.xaxis,o\u003dt.yaxis,s\u003d[],l\u003dr[0].trace,c\u003dr[0].t,u\u003dl._length,f\u003dc.x,h\u003dc.y,p\u003dc._scene,d\u003dc.index;if(!p)return s;var m\u003dn.hasText(l),g\u003dn.hasMarkers(l),v\u003d!g\u0026\u0026!m;if(!0!\u003d\u003dl.visible||v)return s;var y\u003d[],x\u003d[];if(!1!\u003d\u003de\u0026\u0026!e.degenerate)for(var b\u003d0;b\u003cu;b++)e.contains([c.xpx[b],c.ypx[b]],!1,b,t)?(y.push(b),s.push({pointNumber:b,x:a.c2d(f[b]),y:o.c2d(h[b])})):x.push(b);if(g){var _\u003dp.scatter2d;if(y.length||x.length){if(!p.selectBatch[d].length\u0026\u0026!p.unselectBatch[d].length){var w\u003dnew Array(p.count);w[d]\u003dp.markerUnselectedOptions[d],_.update.apply(_,w)}}else{var T\u003dnew Array(p.count);T[d]\u003dp.markerOptions[d],_.update.apply(_,T)}}return p.selectBatch[d]\u003dy,p.unselectBatch[d]\u003dx,m\u0026\u0026i(r),s}},{\"../scatter/subtypes\":1239,\"./edit_style\":1271}],1279:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,a\u003dt(\"../scattergeo/attributes\"),o\u003dt(\"../scatter/attributes\"),s\u003dt(\"../../plots/mapbox/layout_attributes\"),l\u003dt(\"../../plots/attributes\"),c\u003dt(\"../../components/colorscale/attributes\"),u\u003dt(\"../../lib/extend\").extendFlat,f\u003dt(\"../../plot_api/edit_types\").overrideAll,h\u003da.line,p\u003da.marker;e.exports\u003df({lon:a.lon,lat:a.lat,mode:u({},o.mode,{dflt:\"markers\"}),text:u({},o.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"lat\",\"lon\",\"text\"]}),hovertext:u({},o.hovertext,{}),line:{color:h.color,width:h.width},connectgaps:o.connectgaps,marker:u({symbol:{valType:\"string\",dflt:\"circle\",arrayOk:!0},angle:{valType:\"number\",dflt:\"auto\",arrayOk:!0},allowoverlap:{valType:\"boolean\",dflt:!1},opacity:p.opacity,size:p.size,sizeref:p.sizeref,sizemin:p.sizemin,sizemode:p.sizemode},c(\"marker\")),fill:a.fill,fillcolor:o.fillcolor,textfont:s.layers.symbol.textfont,textposition:s.layers.symbol.textposition,below:{valType:\"string\"},selected:{marker:o.selected.marker},unselected:{marker:o.unselected.marker},hoverinfo:u({},l.hoverinfo,{flags:[\"lon\",\"lat\",\"text\",\"name\"]}),hovertemplate:n()},\"calc\",\"nested\")},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/attributes\":845,\"../../plots/mapbox/layout_attributes\":909,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214,\"../scattergeo/attributes\":1256}],1280:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../constants/numerical\").BADNUM,o\u003dt(\"../../lib/geojson_utils\"),s\u003dt(\"../../components/colorscale\"),l\u003dt(\"../../components/drawing\"),c\u003dt(\"../scatter/make_bubble_size_func\"),u\u003dt(\"../scatter/subtypes\"),f\u003dt(\"../../plots/mapbox/convert_text_opts\"),h\u003dt(\"../../components/fx/helpers\").appendArrayPointValue,p\u003dt(\"../../lib/svg_text_utils\").NEWLINES,d\u003dt(\"../../lib/svg_text_utils\").BR_TAG_ALL;function m(){return{geojson:o.makeBlank(),layout:{visibility:\"none\"},paint:{}}}function g(t,e){return i.isArrayOrTypedArray(t)?e?function(e){return n(t[e])?+t[e]:0}:function(e){return t[e]}:t?function(){return t}:v}function v(){return\"\"}function y(t){return t[0]\u003d\u003d\u003da}e.exports\u003dfunction(t,e){var r,a\u003de[0].trace,x\u003d!0\u003d\u003d\u003da.visible\u0026\u00260!\u003d\u003da._length,b\u003d\"none\"!\u003d\u003da.fill,_\u003du.hasLines(a),w\u003du.hasMarkers(a),T\u003du.hasText(a),k\u003dw\u0026\u0026\"circle\"\u003d\u003d\u003da.marker.symbol,M\u003dw\u0026\u0026\"circle\"!\u003d\u003da.marker.symbol,A\u003dm(),S\u003dm(),E\u003dm(),L\u003dm(),C\u003d{fill:A,line:S,circle:E,symbol:L};if(!x)return C;if((b||_)\u0026\u0026(r\u003do.calcTraceToLineCoords(e)),b\u0026\u0026(A.geojson\u003do.makePolygon(r),A.layout.visibility\u003d\"visible\",i.extendFlat(A.paint,{\"fill-color\":a.fillcolor})),_\u0026\u0026(S.geojson\u003do.makeLine(r),S.layout.visibility\u003d\"visible\",i.extendFlat(S.paint,{\"line-width\":a.line.width,\"line-color\":a.line.color,\"line-opacity\":a.opacity})),k){var P\u003dfunction(t){var e,r,a,o,u\u003dt[0].trace,f\u003du.marker,h\u003du.selectedpoints,p\u003di.isArrayOrTypedArray(f.color),d\u003di.isArrayOrTypedArray(f.size),m\u003di.isArrayOrTypedArray(f.opacity);function g(t){return u.opacity*t}p\u0026\u0026(r\u003ds.hasColorscale(u,\"marker\")?s.makeColorScaleFuncFromTrace(f):i.identity);d\u0026\u0026(a\u003dc(u));m\u0026\u0026(o\u003dfunction(t){return g(n(t)?+i.constrain(t,0,1):0)});var v,x\u003d[];for(e\u003d0;e\u003ct.length;e++){var b\u003dt[e],_\u003db.lonlat;if(!y(_)){var w\u003d{};r\u0026\u0026(w.mcc\u003db.mcc\u003dr(b.mc)),a\u0026\u0026(w.mrc\u003db.mrc\u003da(b.ms)),o\u0026\u0026(w.mo\u003do(b.mo)),h\u0026\u0026(w.selected\u003db.selected||0),x.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:_},properties:w})}}if(h)for(v\u003dl.makeSelectedPointStyleFns(u),e\u003d0;e\u003cx.length;e++){var T\u003dx[e].properties;v.selectedOpacityFn\u0026\u0026(T.mo\u003dg(v.selectedOpacityFn(T))),v.selectedColorFn\u0026\u0026(T.mcc\u003dv.selectedColorFn(T)),v.selectedSizeFn\u0026\u0026(T.mrc\u003dv.selectedSizeFn(T))}return{geojson:{type:\"FeatureCollection\",features:x},mcc:p||v\u0026\u0026v.selectedColorFn?{type:\"identity\",property:\"mcc\"}:f.color,mrc:d||v\u0026\u0026v.selectedSizeFn?{type:\"identity\",property:\"mrc\"}:(k\u003df.size,k/2),mo:m||v\u0026\u0026v.selectedOpacityFn?{type:\"identity\",property:\"mo\"}:g(f.opacity)};var k}(e);E.geojson\u003dP.geojson,E.layout.visibility\u003d\"visible\",i.extendFlat(E.paint,{\"circle-color\":P.mcc,\"circle-radius\":P.mrc,\"circle-opacity\":P.mo})}if((M||T)\u0026\u0026(L.geojson\u003dfunction(t,e){for(var r\u003de._fullLayout,n\u003dt[0].trace,a\u003dn.marker||{},o\u003da.symbol,s\u003da.angle,l\u003d\"circle\"!\u003d\u003do?g(o):v,c\u003d\"auto\"!\u003d\u003ds?g(s,!0):v,f\u003du.hasText(n)?g(n.text):v,m\u003d[],x\u003d0;x\u003ct.length;x++){var b\u003dt[x];if(!y(b.lonlat)){var _,w\u003dn.texttemplate;if(w){var T\u003dArray.isArray(w)?w[x]||\"\":w,k\u003dn._module.formatLabels(b,n,r),M\u003d{};h(M,n,b.i);var A\u003dn._meta||{};_\u003di.texttemplateString(T,k,r._d3locale,M,b,A)}else _\u003df(x);_\u0026\u0026(_\u003d_.replace(p,\"\").replace(d,\"\\n\")),m.push({type:\"Feature\",geometry:{type:\"Point\",coordinates:b.lonlat},properties:{symbol:l(x),angle:c(x),text:_}})}}return{type:\"FeatureCollection\",features:m}}(e,t),i.extendFlat(L.layout,{visibility:\"visible\",\"icon-image\":\"{symbol}-15\",\"text-field\":\"{text}\"}),M\u0026\u0026(i.extendFlat(L.layout,{\"icon-size\":a.marker.size/10}),\"angle\"in a.marker\u0026\u0026\"auto\"!\u003d\u003da.marker.angle\u0026\u0026i.extendFlat(L.layout,{\"icon-rotate\":{type:\"identity\",property:\"angle\"},\"icon-rotation-alignment\":\"map\"}),L.layout[\"icon-allow-overlap\"]\u003da.marker.allowoverlap,i.extendFlat(L.paint,{\"icon-opacity\":a.opacity*a.marker.opacity,\"icon-color\":a.marker.color})),T)){var I\u003d(a.marker||{}).size,O\u003df(a.textposition,I);i.extendFlat(L.layout,{\"text-size\":a.textfont.size,\"text-anchor\":O.anchor,\"text-offset\":O.offset}),i.extendFlat(L.paint,{\"text-color\":a.textfont.color,\"text-opacity\":a.opacity})}return C}},{\"../../components/colorscale\":674,\"../../components/drawing\":684,\"../../components/fx/helpers\":698,\"../../constants/numerical\":775,\"../../lib\":799,\"../../lib/geojson_utils\":793,\"../../lib/svg_text_utils\":824,\"../../plots/mapbox/convert_text_opts\":906,\"../scatter/make_bubble_size_func\":1231,\"../scatter/subtypes\":1239,\"fast-isnumeric\":245}],1281:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/subtypes\"),a\u003dt(\"../scatter/marker_defaults\"),o\u003dt(\"../scatter/line_defaults\"),s\u003dt(\"../scatter/text_defaults\"),l\u003dt(\"../scatter/fillcolor_defaults\"),c\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,u){function f(r,i){return n.coerce(t,e,c,r,i)}if(function(t,e,r){var n\u003dr(\"lon\")||[],i\u003dr(\"lat\")||[],a\u003dMath.min(n.length,i.length);return e._length\u003da,a}(0,e,f)){if(f(\"text\"),f(\"texttemplate\"),f(\"hovertext\"),f(\"hovertemplate\"),f(\"mode\"),f(\"below\"),i.hasLines(e)\u0026\u0026(o(t,e,r,u,f,{noDash:!0}),f(\"connectgaps\")),i.hasMarkers(e)){a(t,e,r,u,f,{noLine:!0}),f(\"marker.allowoverlap\"),f(\"marker.angle\");var h\u003de.marker;\"circle\"!\u003d\u003dh.symbol\u0026\u0026(n.isArrayOrTypedArray(h.size)\u0026\u0026(h.size\u003dh.size[0]),n.isArrayOrTypedArray(h.color)\u0026\u0026(h.color\u003dh.color[0]))}i.hasText(e)\u0026\u0026s(t,e,u,f,{noSelect:!0}),f(\"fill\"),\"none\"!\u003d\u003de.fill\u0026\u0026l(t,e,r,f),n.coerceSelectionMarkerOpacity(e,f)}else e.visible\u003d!1}},{\"../../lib\":799,\"../scatter/fillcolor_defaults\":1222,\"../scatter/line_defaults\":1227,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"./attributes\":1279}],1282:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return t.lon\u003de.lon,t.lat\u003de.lat,t}},{}],1283:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\");e.exports\u003dfunction(t,e,r){var i\u003d{},a\u003dr[e.subplot]._subplot.mockAxis,o\u003dt.lonlat;return i.lonLabel\u003dn.tickText(a,a.c2l(o[0]),!0).text,i.latLabel\u003dn.tickText(a,a.c2l(o[1]),!0).text,i}},{\"../../plots/cartesian/axes\":849}],1284:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/fx\"),i\u003dt(\"../../lib\"),a\u003dt(\"../scatter/get_trace_color\"),o\u003di.fillText,s\u003dt(\"../../constants/numerical\").BADNUM;function l(t,e,r){if(!t.hovertemplate){var n\u003d(e.hi||t.hoverinfo).split(\"+\"),i\u003d-1!\u003d\u003dn.indexOf(\"all\"),a\u003d-1!\u003d\u003dn.indexOf(\"lon\"),s\u003d-1!\u003d\u003dn.indexOf(\"lat\"),l\u003de.lonlat,c\u003d[];return i||a\u0026\u0026s?c.push(\"(\"+u(l[1])+\", \"+u(l[0])+\")\"):a?c.push(r.lon+u(l[0])):s\u0026\u0026c.push(r.lat+u(l[1])),(i||-1!\u003d\u003dn.indexOf(\"text\"))\u0026\u0026o(e,t,c),c.join(\"\u003cbr\u003e\")}function u(t){return t+\"\\xb0\"}}e.exports\u003d{hoverPoints:function(t,e,r){var o\u003dt.cd,c\u003do[0].trace,u\u003dt.xa,f\u003dt.ya,h\u003dt.subplot,p\u003d360*(e\u003e\u003d0?Math.floor((e+180)/360):Math.ceil((e-180)/360)),d\u003de-p;if(n.getClosest(o,(function(t){var e\u003dt.lonlat;if(e[0]\u003d\u003d\u003ds)return 1/0;var n\u003di.modHalf(e[0],360),a\u003de[1],o\u003dh.project([n,a]),l\u003do.x-u.c2p([d,a]),c\u003do.y-f.c2p([n,r]),p\u003dMath.max(3,t.mrc||0);return Math.max(Math.sqrt(l*l+c*c)-p,1-3/p)}),t),!1!\u003d\u003dt.index){var m\u003do[t.index],g\u003dm.lonlat,v\u003d[i.modHalf(g[0],360)+p,g[1]],y\u003du.c2p(v),x\u003df.c2p(v),b\u003dm.mrc||1;t.x0\u003dy-b,t.x1\u003dy+b,t.y0\u003dx-b,t.y1\u003dx+b;var _\u003d{};_[c.subplot]\u003d{_subplot:h};var w\u003dc._module.formatLabels(m,c,_);return t.lonLabel\u003dw.lonLabel,t.latLabel\u003dw.latLabel,t.color\u003da(c,m),t.extraText\u003dl(c,m,o[0].t.labels),t.hovertemplate\u003dc.hovertemplate,[t]}},getExtraText:l}},{\"../../components/fx\":702,\"../../constants/numerical\":775,\"../../lib\":799,\"../scatter/get_trace_color\":1224}],1285:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"../scattergeo/calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\").hoverPoints,eventData:t(\"./event_data\"),selectPoints:t(\"./select\"),styleOnSelect:function(t,e){e\u0026\u0026e[0].trace._glTrace.update(e)},moduleType:\"trace\",name:\"scattermapbox\",basePlotModule:t(\"../../plots/mapbox\"),categories:[\"mapbox\",\"gl\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../plots/mapbox\":907,\"../scatter/marker_colorbar\":1232,\"../scattergeo/calc\":1257,\"./attributes\":1279,\"./defaults\":1281,\"./event_data\":1282,\"./format_labels\":1283,\"./hover\":1284,\"./plot\":1286,\"./select\":1287}],1286:[function(t,e,r){\"use strict\";var n\u003dt(\"./convert\"),i\u003dt(\"../../plots/mapbox/constants\").traceLayerPrefix,a\u003d[\"fill\",\"line\",\"circle\",\"symbol\"];function o(t,e){this.type\u003d\"scattermapbox\",this.subplot\u003dt,this.uid\u003de,this.sourceIds\u003d{fill:\"source-\"+e+\"-fill\",line:\"source-\"+e+\"-line\",circle:\"source-\"+e+\"-circle\",symbol:\"source-\"+e+\"-symbol\"},this.layerIds\u003d{fill:i+e+\"-fill\",line:i+e+\"-line\",circle:i+e+\"-circle\",symbol:i+e+\"-symbol\"},this.below\u003dnull}var s\u003do.prototype;s.addSource\u003dfunction(t,e){this.subplot.map.addSource(this.sourceIds[t],{type:\"geojson\",data:e.geojson})},s.setSourceData\u003dfunction(t,e){this.subplot.map.getSource(this.sourceIds[t]).setData(e.geojson)},s.addLayer\u003dfunction(t,e,r){this.subplot.addLayer({type:t,id:this.layerIds[t],source:this.sourceIds[t],layout:e.layout,paint:e.paint},r)},s.update\u003dfunction(t){var e,r,i,o\u003dthis.subplot,s\u003do.map,l\u003dn(o.gd,t),c\u003do.belowLookup[\"trace-\"+this.uid];if(c!\u003d\u003dthis.below){for(e\u003da.length-1;e\u003e\u003d0;e--)r\u003da[e],s.removeLayer(this.layerIds[r]);for(e\u003d0;e\u003ca.length;e++)i\u003dl[r\u003da[e]],this.addLayer(r,i,c);this.below\u003dc}for(e\u003d0;e\u003ca.length;e++)i\u003dl[r\u003da[e]],o.setOptions(this.layerIds[r],\"setLayoutProperty\",i.layout),\"visible\"\u003d\u003d\u003di.layout.visibility\u0026\u0026(this.setSourceData(r,i),o.setOptions(this.layerIds[r],\"setPaintProperty\",i.paint));t[0].trace._glTrace\u003dthis},s.dispose\u003dfunction(){for(var t\u003dthis.subplot.map,e\u003da.length-1;e\u003e\u003d0;e--){var r\u003da[e];t.removeLayer(this.layerIds[r]),t.removeSource(this.sourceIds[r])}},e.exports\u003dfunction(t,e){for(var r\u003de[0].trace,i\u003dnew o(t,r.uid),s\u003dn(t.gd,e),l\u003di.below\u003dt.belowLookup[\"trace-\"+r.uid],c\u003d0;c\u003ca.length;c++){var u\u003da[c],f\u003ds[u];i.addSource(u,f),i.addLayer(u,f,l)}return e[0].trace._glTrace\u003di,i}},{\"../../plots/mapbox/constants\":905,\"./convert\":1280}],1287:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/subtypes\"),a\u003dt(\"../../constants/numerical\").BADNUM;e.exports\u003dfunction(t,e){var r,o\u003dt.cd,s\u003dt.xaxis,l\u003dt.yaxis,c\u003d[],u\u003do[0].trace;if(!i.hasMarkers(u))return[];if(!1\u003d\u003d\u003de)for(r\u003d0;r\u003co.length;r++)o[r].selected\u003d0;else for(r\u003d0;r\u003co.length;r++){var f\u003do[r],h\u003df.lonlat;if(h[0]!\u003d\u003da){var p\u003d[n.modHalf(h[0],360),h[1]],d\u003d[s.c2p(p),l.c2p(p)];e.contains(d,null,r,t)?(c.push({pointNumber:r,lon:h[0],lat:h[1]}),f.selected\u003d1):f.selected\u003d0}}return c}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../scatter/subtypes\":1239}],1288:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,a\u003dt(\"../../lib/extend\").extendFlat,o\u003dt(\"../scatter/attributes\"),s\u003dt(\"../../plots/attributes\"),l\u003do.line;e.exports\u003d{mode:o.mode,r:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},theta:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},r0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dr:{valType:\"number\",dflt:1,editType:\"calc\"},theta0:{valType:\"any\",dflt:0,editType:\"calc+clearAxisTypes\"},dtheta:{valType:\"number\",editType:\"calc\"},thetaunit:{valType:\"enumerated\",values:[\"radians\",\"degrees\",\"gradians\"],dflt:\"degrees\",editType:\"calc+clearAxisTypes\"},text:o.text,texttemplate:i({editType:\"plot\"},{keys:[\"r\",\"theta\",\"text\"]}),hovertext:o.hovertext,line:{color:l.color,width:l.width,dash:l.dash,shape:a({},l.shape,{values:[\"linear\",\"spline\"]}),smoothing:l.smoothing,editType:\"calc\"},connectgaps:o.connectgaps,marker:o.marker,cliponaxis:a({},o.cliponaxis,{dflt:!1}),textposition:o.textposition,textfont:o.textfont,fill:a({},o.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:o.fillcolor,hoverinfo:a({},s.hoverinfo,{flags:[\"r\",\"theta\",\"text\",\"name\"]}),hoveron:o.hoveron,hovertemplate:n(),selected:o.selected,unselected:o.unselected}},{\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214}],1289:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../../constants/numerical\").BADNUM,a\u003dt(\"../../plots/cartesian/axes\"),o\u003dt(\"../scatter/colorscale_calc\"),s\u003dt(\"../scatter/arrays_to_calcdata\"),l\u003dt(\"../scatter/calc_selection\"),c\u003dt(\"../scatter/calc\").calcMarkerSize;e.exports\u003dfunction(t,e){for(var r\u003dt._fullLayout,u\u003de.subplot,f\u003dr[u].radialaxis,h\u003dr[u].angularaxis,p\u003df.makeCalcdata(e,\"r\"),d\u003dh.makeCalcdata(e,\"theta\"),m\u003de._length,g\u003dnew Array(m),v\u003d0;v\u003cm;v++){var y\u003dp[v],x\u003dd[v],b\u003dg[v]\u003d{};n(y)\u0026\u0026n(x)?(b.r\u003dy,b.theta\u003dx):b.r\u003di}var _\u003dc(e,m);return e._extremes.x\u003da.findExtremes(f,p,{ppad:_}),o(t,e),s(g,e),l(g,e),g}},{\"../../constants/numerical\":775,\"../../plots/cartesian/axes\":849,\"../scatter/arrays_to_calcdata\":1213,\"../scatter/calc\":1215,\"../scatter/calc_selection\":1216,\"../scatter/colorscale_calc\":1217,\"fast-isnumeric\":245}],1290:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/subtypes\"),a\u003dt(\"../scatter/marker_defaults\"),o\u003dt(\"../scatter/line_defaults\"),s\u003dt(\"../scatter/line_shape_defaults\"),l\u003dt(\"../scatter/text_defaults\"),c\u003dt(\"../scatter/fillcolor_defaults\"),u\u003dt(\"../scatter/constants\").PTS_LINESONLY,f\u003dt(\"./attributes\");function h(t,e,r,n){var i,a\u003dn(\"r\"),o\u003dn(\"theta\");if(a)o?i\u003dMath.min(a.length,o.length):(i\u003da.length,n(\"theta0\"),n(\"dtheta\"));else{if(!o)return 0;i\u003de.theta.length,n(\"r0\"),n(\"dr\")}return e._length\u003di,i}e.exports\u003d{handleRThetaDefaults:h,supplyDefaults:function(t,e,r,p){function d(r,i){return n.coerce(t,e,f,r,i)}var m\u003dh(t,e,p,d);if(m){d(\"thetaunit\"),d(\"mode\",m\u003cu?\"lines+markers\":\"lines\"),d(\"text\"),d(\"hovertext\"),\"fills\"!\u003d\u003de.hoveron\u0026\u0026d(\"hovertemplate\"),i.hasLines(e)\u0026\u0026(o(t,e,r,p,d),s(t,e,d),d(\"connectgaps\")),i.hasMarkers(e)\u0026\u0026a(t,e,r,p,d,{gradient:!0}),i.hasText(e)\u0026\u0026(d(\"texttemplate\"),l(t,e,p,d));var g\u003d[];(i.hasMarkers(e)||i.hasText(e))\u0026\u0026(d(\"cliponaxis\"),d(\"marker.maxdisplayed\"),g.push(\"points\")),d(\"fill\"),\"none\"!\u003d\u003de.fill\u0026\u0026(c(t,e,r,d),i.hasLines(e)||s(t,e,d)),\"tonext\"!\u003d\u003de.fill\u0026\u0026\"toself\"!\u003d\u003de.fill||g.push(\"fills\"),d(\"hoveron\",g.join(\"+\")||\"points\"),n.coerceSelectionMarkerOpacity(e,d)}else e.visible\u003d!1}}},{\"../../lib\":799,\"../scatter/constants\":1218,\"../scatter/fillcolor_defaults\":1222,\"../scatter/line_defaults\":1227,\"../scatter/line_shape_defaults\":1229,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"./attributes\":1288}],1291:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\");e.exports\u003dfunction(t,e,r){var a,o,s\u003d{},l\u003dr[e.subplot]._subplot;l?(a\u003dl.radialAxis,o\u003dl.angularAxis):(a\u003d(l\u003dr[e.subplot]).radialaxis,o\u003dl.angularaxis);var c\u003da.c2l(t.r);s.rLabel\u003di.tickText(a,c,!0).text;var u\u003d\"degrees\"\u003d\u003d\u003do.thetaunit?n.rad2deg(t.theta):t.theta;return s.thetaLabel\u003di.tickText(o,u,!0).text,s}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849}],1292:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/hover\");function i(t,e,r,n){var i\u003dr.radialAxis,a\u003dr.angularAxis;i._hovertitle\u003d\"r\",a._hovertitle\u003d\"\\u03b8\";var o\u003d{};o[e.subplot]\u003d{_subplot:r};var s\u003de._module.formatLabels(t,e,o);n.rLabel\u003ds.rLabel,n.thetaLabel\u003ds.thetaLabel;var l\u003dt.hi||e.hoverinfo,c\u003d[];function u(t,e){c.push(t._hovertitle+\": \"+e)}if(!e.hovertemplate){var f\u003dl.split(\"+\");-1!\u003d\u003df.indexOf(\"all\")\u0026\u0026(f\u003d[\"r\",\"theta\",\"text\"]),-1!\u003d\u003df.indexOf(\"r\")\u0026\u0026u(i,n.rLabel),-1!\u003d\u003df.indexOf(\"theta\")\u0026\u0026u(a,n.thetaLabel),-1!\u003d\u003df.indexOf(\"text\")\u0026\u0026n.text\u0026\u0026(c.push(n.text),delete n.text),n.extraText\u003dc.join(\"\u003cbr\u003e\")}}e.exports\u003d{hoverPoints:function(t,e,r,a){var o\u003dn(t,e,r,a);if(o\u0026\u0026!1!\u003d\u003do[0].index){var s\u003do[0];if(void 0\u003d\u003d\u003ds.index)return o;var l\u003dt.subplot,c\u003ds.cd[s.index],u\u003ds.trace;if(l.isPtInside(c))return s.xLabelVal\u003dvoid 0,s.yLabelVal\u003dvoid 0,i(c,u,l,s),s.hovertemplate\u003du.hovertemplate,o}},makeHoverPointText:i}},{\"../scatter/hover\":1225}],1293:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"scatterpolar\",basePlotModule:t(\"../../plots/polar\"),categories:[\"polar\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../scatter/style\").style,styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"../scatter/select\"),meta:{}}},{\"../../plots/polar\":916,\"../scatter/marker_colorbar\":1232,\"../scatter/select\":1236,\"../scatter/style\":1238,\"./attributes\":1288,\"./calc\":1289,\"./defaults\":1290,\"./format_labels\":1291,\"./hover\":1292,\"./plot\":1294}],1294:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/plot\"),i\u003dt(\"../../constants/numerical\").BADNUM;e.exports\u003dfunction(t,e,r){for(var a\u003de.layers.frontplot.select(\"g.scatterlayer\"),o\u003d{xaxis:e.xaxis,yaxis:e.yaxis,plot:e.framework,layerClipId:e._hasClipOnAxisFalse?e.clipIds.forTraces:null},s\u003de.radialAxis,l\u003de.angularAxis,c\u003d0;c\u003cr.length;c++)for(var u\u003dr[c],f\u003d0;f\u003cu.length;f++){var h\u003du[f],p\u003dh.r;if(p\u003d\u003d\u003di)h.x\u003dh.y\u003di;else{var d\u003ds.c2g(p),m\u003dl.c2g(h.theta);h.x\u003dd*Math.cos(m),h.y\u003dd*Math.sin(m)}}n(t,o,r,a)}},{\"../../constants/numerical\":775,\"../scatter/plot\":1235}],1295:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatterpolar/attributes\"),i\u003dt(\"../scattergl/attributes\"),a\u003dt(\"../../plots/template_attributes\").texttemplateAttrs;e.exports\u003d{mode:n.mode,r:n.r,theta:n.theta,r0:n.r0,dr:n.dr,theta0:n.theta0,dtheta:n.dtheta,thetaunit:n.thetaunit,text:n.text,texttemplate:a({editType:\"plot\"},{keys:[\"r\",\"theta\",\"text\"]}),hovertext:n.hovertext,hovertemplate:n.hovertemplate,line:i.line,connectgaps:i.connectgaps,marker:i.marker,fill:i.fill,fillcolor:i.fillcolor,textposition:i.textposition,textfont:i.textfont,hoverinfo:n.hoverinfo,selected:n.selected,unselected:n.unselected}},{\"../../plots/template_attributes\":922,\"../scattergl/attributes\":1266,\"../scatterpolar/attributes\":1288}],1296:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/colorscale_calc\"),i\u003dt(\"../scatter/calc\").calcMarkerSize,a\u003dt(\"../scattergl/convert\"),o\u003dt(\"../../plots/cartesian/axes\"),s\u003dt(\"../scattergl/constants\").TOO_MANY_POINTS;e.exports\u003dfunction(t,e){var r\u003dt._fullLayout,l\u003de.subplot,c\u003dr[l].radialaxis,u\u003dr[l].angularaxis,f\u003de._r\u003dc.makeCalcdata(e,\"r\"),h\u003de._theta\u003du.makeCalcdata(e,\"theta\"),p\u003de._length,d\u003d{};p\u003cf.length\u0026\u0026(f\u003df.slice(0,p)),p\u003ch.length\u0026\u0026(h\u003dh.slice(0,p)),d.r\u003df,d.theta\u003dh,n(t,e);var m,g\u003dd.opts\u003da.style(t,e);return p\u003cs?m\u003di(e,p):g.marker\u0026\u0026(m\u003d2*(g.marker.sizeAvg||Math.max(g.marker.size,3))),e._extremes.x\u003do.findExtremes(c,f,{ppad:m}),[{x:!1,y:!1,t:d,trace:e}]}},{\"../../plots/cartesian/axes\":849,\"../scatter/calc\":1215,\"../scatter/colorscale_calc\":1217,\"../scattergl/constants\":1268,\"../scattergl/convert\":1269}],1297:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/subtypes\"),a\u003dt(\"../scatterpolar/defaults\").handleRThetaDefaults,o\u003dt(\"../scatter/marker_defaults\"),s\u003dt(\"../scatter/line_defaults\"),l\u003dt(\"../scatter/text_defaults\"),c\u003dt(\"../scatter/fillcolor_defaults\"),u\u003dt(\"../scatter/constants\").PTS_LINESONLY,f\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d\u003da(t,e,h,p);d?(p(\"thetaunit\"),p(\"mode\",d\u003cu?\"lines+markers\":\"lines\"),p(\"text\"),p(\"hovertext\"),\"fills\"!\u003d\u003de.hoveron\u0026\u0026p(\"hovertemplate\"),i.hasLines(e)\u0026\u0026(s(t,e,r,h,p),p(\"connectgaps\")),i.hasMarkers(e)\u0026\u0026o(t,e,r,h,p),i.hasText(e)\u0026\u0026(p(\"texttemplate\"),l(t,e,h,p)),p(\"fill\"),\"none\"!\u003d\u003de.fill\u0026\u0026c(t,e,r,p),n.coerceSelectionMarkerOpacity(e,p)):e.visible\u003d!1}},{\"../../lib\":799,\"../scatter/constants\":1218,\"../scatter/fillcolor_defaults\":1222,\"../scatter/line_defaults\":1227,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"../scatterpolar/defaults\":1290,\"./attributes\":1295}],1298:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatterpolar/format_labels\");e.exports\u003dfunction(t,e,r){var i\u003dt.i;return\"r\"in t||(t.r\u003de._r[i]),\"theta\"in t||(t.theta\u003de._theta[i]),n(t,e,r)}},{\"../scatterpolar/format_labels\":1291}],1299:[function(t,e,r){\"use strict\";var n\u003dt(\"../scattergl/hover\"),i\u003dt(\"../scatterpolar/hover\").makeHoverPointText;e.exports\u003d{hoverPoints:function(t,e,r,a){var o\u003dt.cd[0].t,s\u003do.r,l\u003do.theta,c\u003dn.hoverPoints(t,e,r,a);if(c\u0026\u0026!1!\u003d\u003dc[0].index){var u\u003dc[0];if(void 0\u003d\u003d\u003du.index)return c;var f\u003dt.subplot,h\u003du.cd[u.index],p\u003du.trace;if(h.r\u003ds[u.index],h.theta\u003dl[u.index],f.isPtInside(h))return u.xLabelVal\u003dvoid 0,u.yLabelVal\u003dvoid 0,i(h,p,f,u),c}}}},{\"../scattergl/hover\":1274,\"../scatterpolar/hover\":1292}],1300:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"scatterpolargl\",basePlotModule:t(\"../../plots/polar\"),categories:[\"gl\",\"regl\",\"polar\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"../scattergl/select\"),meta:{}}},{\"../../plots/polar\":916,\"../scatter/marker_colorbar\":1232,\"../scattergl/select\":1278,\"./attributes\":1295,\"./calc\":1296,\"./defaults\":1297,\"./format_labels\":1298,\"./hover\":1299,\"./plot\":1301}],1301:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/point-cluster\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../scattergl/plot\"),o\u003dt(\"../scattergl/scene_update\"),s\u003dt(\"../scattergl/convert\"),l\u003dt(\"../../lib\"),c\u003dt(\"../scattergl/constants\").TOO_MANY_POINTS;e.exports\u003dfunction(t,e,r){if(r.length){var u\u003de.radialAxis,f\u003de.angularAxis,h\u003do(t,e);return r.forEach((function(r){if(r\u0026\u0026r[0]\u0026\u0026r[0].trace){var a,o\u003dr[0],p\u003do.trace,d\u003do.t,m\u003dp._length,g\u003dd.r,v\u003dd.theta,y\u003dd.opts,x\u003dg.slice(),b\u003dv.slice();for(a\u003d0;a\u003cg.length;a++)e.isPtInside({r:g[a],theta:v[a]})||(x[a]\u003dNaN,b[a]\u003dNaN);var _\u003dnew Array(2*m),w\u003dArray(m),T\u003dArray(m);for(a\u003d0;a\u003cm;a++){var k,M,A\u003dx[a];if(i(A)){var S\u003du.c2g(A),E\u003df.c2g(b[a],p.thetaunit);k\u003dS*Math.cos(E),M\u003dS*Math.sin(E)}else k\u003dM\u003dNaN;w[a]\u003d_[2*a]\u003dk,T[a]\u003d_[2*a+1]\u003dM}d.tree\u003dn(_),y.marker\u0026\u0026m\u003e\u003dc\u0026\u0026(y.marker.cluster\u003dd.tree),y.marker\u0026\u0026(y.markerSel.positions\u003dy.markerUnsel.positions\u003dy.marker.positions\u003d_),y.line\u0026\u0026_.length\u003e1\u0026\u0026l.extendFlat(y.line,s.linePositions(t,p,_)),y.text\u0026\u0026(l.extendFlat(y.text,{positions:_},s.textPosition(t,p,y.text,y.marker)),l.extendFlat(y.textSel,{positions:_},s.textPosition(t,p,y.text,y.markerSel)),l.extendFlat(y.textUnsel,{positions:_},s.textPosition(t,p,y.text,y.markerUnsel))),y.fill\u0026\u0026!h.fill2d\u0026\u0026(h.fill2d\u003d!0),y.marker\u0026\u0026!h.scatter2d\u0026\u0026(h.scatter2d\u003d!0),y.line\u0026\u0026!h.line2d\u0026\u0026(h.line2d\u003d!0),y.text\u0026\u0026!h.glText\u0026\u0026(h.glText\u003d!0),h.lineOptions.push(y.line),h.fillOptions.push(y.fill),h.markerOptions.push(y.marker),h.markerSelectedOptions.push(y.markerSel),h.markerUnselectedOptions.push(y.markerUnsel),h.textOptions.push(y.text),h.textSelectedOptions.push(y.textSel),h.textUnselectedOptions.push(y.textUnsel),h.selectBatch.push([]),h.unselectBatch.push([]),d.x\u003dw,d.y\u003dT,d.rawx\u003dw,d.rawy\u003dT,d.r\u003dg,d.theta\u003dv,d.positions\u003d_,d._scene\u003dh,d.index\u003dh.count,h.count++}})),a(t,e,r)}}},{\"../../lib\":799,\"../scattergl/constants\":1268,\"../scattergl/convert\":1269,\"../scattergl/plot\":1276,\"../scattergl/scene_update\":1277,\"@plotly/point-cluster\":59,\"fast-isnumeric\":245}],1302:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,a\u003dt(\"../scatter/attributes\"),o\u003dt(\"../../plots/attributes\"),s\u003dt(\"../../components/colorscale/attributes\"),l\u003dt(\"../../components/drawing/attributes\").dash,c\u003dt(\"../../lib/extend\").extendFlat,u\u003da.marker,f\u003da.line,h\u003du.line;e.exports\u003d{a:{valType:\"data_array\",editType:\"calc\"},b:{valType:\"data_array\",editType:\"calc\"},c:{valType:\"data_array\",editType:\"calc\"},sum:{valType:\"number\",dflt:0,min:0,editType:\"calc\"},mode:c({},a.mode,{dflt:\"markers\"}),text:c({},a.text,{}),texttemplate:i({editType:\"plot\"},{keys:[\"a\",\"b\",\"c\",\"text\"]}),hovertext:c({},a.hovertext,{}),line:{color:f.color,width:f.width,dash:l,shape:c({},f.shape,{values:[\"linear\",\"spline\"]}),smoothing:f.smoothing,editType:\"calc\"},connectgaps:a.connectgaps,cliponaxis:a.cliponaxis,fill:c({},a.fill,{values:[\"none\",\"toself\",\"tonext\"],dflt:\"none\"}),fillcolor:a.fillcolor,marker:c({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:c({width:h.width,editType:\"calc\"},s(\"marker.line\")),gradient:u.gradient,editType:\"calc\"},s(\"marker\")),textfont:a.textfont,textposition:a.textposition,selected:a.selected,unselected:a.unselected,hoverinfo:c({},o.hoverinfo,{flags:[\"a\",\"b\",\"c\",\"text\",\"name\"]}),hoveron:a.hoveron,hovertemplate:n()}},{\"../../components/colorscale/attributes\":669,\"../../components/drawing/attributes\":683,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214}],1303:[function(t,e,r){\"use strict\";var n\u003dt(\"fast-isnumeric\"),i\u003dt(\"../scatter/colorscale_calc\"),a\u003dt(\"../scatter/arrays_to_calcdata\"),o\u003dt(\"../scatter/calc_selection\"),s\u003dt(\"../scatter/calc\").calcMarkerSize,l\u003d[\"a\",\"b\",\"c\"],c\u003d{a:[\"b\",\"c\"],b:[\"a\",\"c\"],c:[\"a\",\"b\"]};e.exports\u003dfunction(t,e){var r,u,f,h,p,d,m\u003dt._fullLayout[e.subplot].sum,g\u003de.sum||m,v\u003d{a:e.a,b:e.b,c:e.c};for(r\u003d0;r\u003cl.length;r++)if(!v[f\u003dl[r]]){for(p\u003dv[c[f][0]],d\u003dv[c[f][1]],h\u003dnew Array(p.length),u\u003d0;u\u003cp.length;u++)h[u]\u003dg-p[u]-d[u];v[f]\u003dh}var y,x,b,_,w,T,k\u003de._length,M\u003dnew Array(k);for(r\u003d0;r\u003ck;r++)y\u003dv.a[r],x\u003dv.b[r],b\u003dv.c[r],n(y)\u0026\u0026n(x)\u0026\u0026n(b)?(1!\u003d\u003d(_\u003dm/((y\u003d+y)+(x\u003d+x)+(b\u003d+b)))\u0026\u0026(y*\u003d_,x*\u003d_,b*\u003d_),T\u003dy,w\u003db-x,M[r]\u003d{x:w,y:T,a:y,b:x,c:b}):M[r]\u003d{x:!1,y:!1};return s(e,k),i(t,e),a(M,e),o(M,e),M}},{\"../scatter/arrays_to_calcdata\":1213,\"../scatter/calc\":1215,\"../scatter/calc_selection\":1216,\"../scatter/colorscale_calc\":1217,\"fast-isnumeric\":245}],1304:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/constants\"),a\u003dt(\"../scatter/subtypes\"),o\u003dt(\"../scatter/marker_defaults\"),s\u003dt(\"../scatter/line_defaults\"),l\u003dt(\"../scatter/line_shape_defaults\"),c\u003dt(\"../scatter/text_defaults\"),u\u003dt(\"../scatter/fillcolor_defaults\"),f\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,h){function p(r,i){return n.coerce(t,e,f,r,i)}var d,m\u003dp(\"a\"),g\u003dp(\"b\"),v\u003dp(\"c\");if(m?(d\u003dm.length,g?(d\u003dMath.min(d,g.length),v\u0026\u0026(d\u003dMath.min(d,v.length))):d\u003dv?Math.min(d,v.length):0):g\u0026\u0026v\u0026\u0026(d\u003dMath.min(g.length,v.length)),d){e._length\u003dd,p(\"sum\"),p(\"text\"),p(\"hovertext\"),\"fills\"!\u003d\u003de.hoveron\u0026\u0026p(\"hovertemplate\"),p(\"mode\",d\u003ci.PTS_LINESONLY?\"lines+markers\":\"lines\"),a.hasLines(e)\u0026\u0026(s(t,e,r,h,p),l(t,e,p),p(\"connectgaps\")),a.hasMarkers(e)\u0026\u0026o(t,e,r,h,p,{gradient:!0}),a.hasText(e)\u0026\u0026(p(\"texttemplate\"),c(t,e,h,p));var y\u003d[];(a.hasMarkers(e)||a.hasText(e))\u0026\u0026(p(\"cliponaxis\"),p(\"marker.maxdisplayed\"),y.push(\"points\")),p(\"fill\"),\"none\"!\u003d\u003de.fill\u0026\u0026(u(t,e,r,p),a.hasLines(e)||l(t,e,p)),\"tonext\"!\u003d\u003de.fill\u0026\u0026\"toself\"!\u003d\u003de.fill||y.push(\"fills\"),p(\"hoveron\",y.join(\"+\")||\"points\"),n.coerceSelectionMarkerOpacity(e,p)}else e.visible\u003d!1}},{\"../../lib\":799,\"../scatter/constants\":1218,\"../scatter/fillcolor_defaults\":1222,\"../scatter/line_defaults\":1227,\"../scatter/line_shape_defaults\":1229,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scatter/text_defaults\":1240,\"./attributes\":1302}],1305:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e,r,n,i){if(e.xa\u0026\u0026(t.xaxis\u003de.xa),e.ya\u0026\u0026(t.yaxis\u003de.ya),n[i]){var a\u003dn[i];t.a\u003da.a,t.b\u003da.b,t.c\u003da.c}else t.a\u003de.a,t.b\u003de.b,t.c\u003de.c;return t}},{}],1306:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\");e.exports\u003dfunction(t,e,r){var i\u003d{},a\u003dr[e.subplot]._subplot;return i.aLabel\u003dn.tickText(a.aaxis,t.a,!0).text,i.bLabel\u003dn.tickText(a.baxis,t.b,!0).text,i.cLabel\u003dn.tickText(a.caxis,t.c,!0).text,i}},{\"../../plots/cartesian/axes\":849}],1307:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/hover\");e.exports\u003dfunction(t,e,r,i){var a\u003dn(t,e,r,i);if(a\u0026\u0026!1!\u003d\u003da[0].index){var o\u003da[0];if(void 0\u003d\u003d\u003do.index){var s\u003d1-o.y0/t.ya._length,l\u003dt.xa._length,c\u003dl*s/2,u\u003dl-c;return o.x0\u003dMath.max(Math.min(o.x0,u),c),o.x1\u003dMath.max(Math.min(o.x1,u),c),a}var f\u003do.cd[o.index],h\u003do.trace,p\u003do.subplot;o.a\u003df.a,o.b\u003df.b,o.c\u003df.c,o.xLabelVal\u003dvoid 0,o.yLabelVal\u003dvoid 0;var d\u003d{};d[h.subplot]\u003d{_subplot:p};var m\u003dh._module.formatLabels(f,h,d);o.aLabel\u003dm.aLabel,o.bLabel\u003dm.bLabel,o.cLabel\u003dm.cLabel;var g\u003df.hi||h.hoverinfo,v\u003d[];if(!h.hovertemplate){var y\u003dg.split(\"+\");-1!\u003d\u003dy.indexOf(\"all\")\u0026\u0026(y\u003d[\"a\",\"b\",\"c\"]),-1!\u003d\u003dy.indexOf(\"a\")\u0026\u0026x(p.aaxis,o.aLabel),-1!\u003d\u003dy.indexOf(\"b\")\u0026\u0026x(p.baxis,o.bLabel),-1!\u003d\u003dy.indexOf(\"c\")\u0026\u0026x(p.caxis,o.cLabel)}return o.extraText\u003dv.join(\"\u003cbr\u003e\"),o.hovertemplate\u003dh.hovertemplate,a}function x(t,e){v.push(t._hovertitle+\": \"+e)}}},{\"../scatter/hover\":1225}],1308:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),formatLabels:t(\"./format_labels\"),calc:t(\"./calc\"),plot:t(\"./plot\"),style:t(\"../scatter/style\").style,styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../scatter/select\"),eventData:t(\"./event_data\"),moduleType:\"trace\",name:\"scatterternary\",basePlotModule:t(\"../../plots/ternary\"),categories:[\"ternary\",\"symbols\",\"showLegend\",\"scatter-like\"],meta:{}}},{\"../../plots/ternary\":923,\"../scatter/marker_colorbar\":1232,\"../scatter/select\":1236,\"../scatter/style\":1238,\"./attributes\":1302,\"./calc\":1303,\"./defaults\":1304,\"./event_data\":1305,\"./format_labels\":1306,\"./hover\":1307,\"./plot\":1309}],1309:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/plot\");e.exports\u003dfunction(t,e,r){var i\u003de.plotContainer;i.select(\".scatterlayer\").selectAll(\"*\").remove();var a\u003d{xaxis:e.xaxis,yaxis:e.yaxis,plot:i,layerClipId:e._hasClipOnAxisFalse?e.clipIdRelative:null},o\u003de.layers.frontplot.select(\"g.scatterlayer\");n(t,a,r,o)}},{\"../scatter/plot\":1235}],1310:[function(t,e,r){\"use strict\";var n\u003dt(\"../scatter/attributes\"),i\u003dt(\"../../components/colorscale/attributes\"),a\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,o\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,s\u003dt(\"../scattergl/attributes\"),l\u003dt(\"../../plots/cartesian/constants\").idRegex,c\u003dt(\"../../plot_api/plot_template\").templatedArray,u\u003dt(\"../../lib/extend\").extendFlat,f\u003dn.marker,h\u003df.line,p\u003du(i(\"marker.line\",{editTypeOverride:\"calc\"}),{width:u({},h.width,{editType:\"calc\"}),editType:\"calc\"}),d\u003du(i(\"marker\"),{symbol:f.symbol,size:u({},f.size,{editType:\"markerSize\"}),sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:f.opacity,colorbar:f.colorbar,line:p,editType:\"calc\"});function m(t){return{valType:\"info_array\",freeLength:!0,editType:\"calc\",items:{valType:\"subplotid\",regex:l[t],editType:\"plot\"}}}d.color.editType\u003dd.cmin.editType\u003dd.cmax.editType\u003d\"style\",e.exports\u003d{dimensions:c(\"dimension\",{visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},label:{valType:\"string\",editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},axis:{type:{valType:\"enumerated\",values:[\"linear\",\"log\",\"date\",\"category\"],editType:\"calc+clearAxisTypes\"},matches:{valType:\"boolean\",dflt:!1,editType:\"calc\"},editType:\"calc+clearAxisTypes\"},editType:\"calc+clearAxisTypes\"}),text:u({},s.text,{}),hovertext:u({},s.hovertext,{}),hovertemplate:o(),xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),marker:d,xaxes:m(\"x\"),yaxes:m(\"y\"),diagonal:{visible:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"},showupperhalf:{valType:\"boolean\",dflt:!0,editType:\"calc\"},showlowerhalf:{valType:\"boolean\",dflt:!0,editType:\"calc\"},selected:{marker:s.selected.marker,editType:\"calc\"},unselected:{marker:s.unselected.marker,editType:\"calc\"},opacity:s.opacity}},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/plot_template\":838,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/cartesian/constants\":856,\"../../plots/template_attributes\":922,\"../scatter/attributes\":1214,\"../scattergl/attributes\":1266}],1311:[function(t,e,r){\"use strict\";var n\u003dt(\"regl-line2d\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../lib/prepare_regl\"),o\u003dt(\"../../plots/get_data\").getModuleCalcData,s\u003dt(\"../../plots/cartesian\"),l\u003dt(\"../../plots/cartesian/axis_ids\").getFromId,c\u003dt(\"../../plots/cartesian/axes\").shouldShowZeroLine;function u(t,e,r){for(var n\u003dr.matrixOptions.data.length,i\u003de._visibleDims,a\u003dr.viewOpts.ranges\u003dnew Array(n),o\u003d0;o\u003ci.length;o++){var s\u003di[o],c\u003da[o]\u003dnew Array(4),u\u003dl(t,e._diag[s][0]);u\u0026\u0026(c[0]\u003du.r2l(u.range[0]),c[2]\u003du.r2l(u.range[1]));var f\u003dl(t,e._diag[s][1]);f\u0026\u0026(c[1]\u003df.r2l(f.range[0]),c[3]\u003df.r2l(f.range[1]))}r.selectBatch.length||r.unselectBatch.length?r.matrix.update({ranges:a},{ranges:a}):r.matrix.update({ranges:a})}function f(t){var e\u003dt._fullLayout,r\u003de._glcanvas.data()[0].regl,i\u003de._splomGrid;i||(i\u003de._splomGrid\u003dn(r)),i.update(function(t){var e,r\u003dt._fullLayout,n\u003dr._size,i\u003d[0,0,r.width,r.height],a\u003d{};function o(t,e,r,n,o,s){var l\u003de[t+\"color\"],c\u003de[t+\"width\"],u\u003dString(l+c);u in a?a[u].data.push(NaN,NaN,r,n,o,s):a[u]\u003d{data:[r,n,o,s],join:\"rect\",thickness:c,color:l,viewport:i,range:i,overlay:!1}}for(e in r._splomSubplots){var s,l,u\u003dr._plots[e],f\u003du.xaxis,h\u003du.yaxis,p\u003df._gridVals,d\u003dh._gridVals,m\u003dn.b+h.domain[0]*n.h,g\u003d-h._m,v\u003d-g*h.r2l(h.range[0],h.calendar);if(f.showgrid)for(e\u003d0;e\u003cp.length;e++)s\u003df._offset+f.l2p(p[e].x),o(\"grid\",f,s,m,s,m+h._length);if(h.showgrid)for(e\u003d0;e\u003cd.length;e++)l\u003dm+v+g*d[e].x,o(\"grid\",h,f._offset,l,f._offset+f._length,l);c(t,f,h)\u0026\u0026(s\u003df._offset+f.l2p(0),o(\"zeroline\",f,s,m,s,m+h._length)),c(t,h,f)\u0026\u0026(l\u003dm+v+0,o(\"zeroline\",h,f._offset,l,f._offset+f._length,l))}var y\u003d[];for(e in a)y.push(a[e]);return y}(t))}e.exports\u003d{name:\"splom\",attr:s.attr,attrRegex:s.attrRegex,layoutAttributes:s.layoutAttributes,supplyLayoutDefaults:s.supplyLayoutDefaults,drawFramework:s.drawFramework,plot:function(t){var e\u003dt._fullLayout,r\u003di.getModule(\"splom\"),n\u003do(t.calcdata,r)[0];a(t,[\"ANGLE_instanced_arrays\",\"OES_element_index_uint\"])\u0026\u0026(e._hasOnlyLargeSploms\u0026\u0026f(t),r.plot(t,{},n))},drag:function(t){var e\u003dt.calcdata,r\u003dt._fullLayout;r._hasOnlyLargeSploms\u0026\u0026f(t);for(var n\u003d0;n\u003ce.length;n++){var i\u003de[n][0].trace,a\u003dr._splomScenes[i.uid];\"splom\"\u003d\u003d\u003di.type\u0026\u0026a\u0026\u0026a.matrix\u0026\u0026u(t,i,a)}},updateGrid:f,clean:function(t,e,r,n){var i,a\u003d{};if(n._splomScenes){for(i\u003d0;i\u003ct.length;i++){var o\u003dt[i];\"splom\"\u003d\u003d\u003do.type\u0026\u0026(a[o.uid]\u003d1)}for(i\u003d0;i\u003cr.length;i++){var l\u003dr[i];if(!a[l.uid]){var c\u003dn._splomScenes[l.uid];c\u0026\u0026c.destroy\u0026\u0026c.destroy(),n._splomScenes[l.uid]\u003dnull,delete n._splomScenes[l.uid]}}}0\u003d\u003d\u003dObject.keys(n._splomScenes||{}).length\u0026\u0026delete n._splomScenes,n._splomGrid\u0026\u0026!e._hasOnlyLargeSploms\u0026\u0026n._hasOnlyLargeSploms\u0026\u0026(n._splomGrid.destroy(),n._splomGrid\u003dnull,delete n._splomGrid),s.clean(t,e,r,n)},updateFx:s.updateFx,toSVG:s.toSVG}},{\"../../lib/prepare_regl\":812,\"../../plots/cartesian\":863,\"../../plots/cartesian/axes\":849,\"../../plots/cartesian/axis_ids\":853,\"../../plots/get_data\":887,\"../../registry\":927,\"regl-line2d\":533}],1312:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axis_ids\"),a\u003dt(\"../scatter/calc\").calcMarkerSize,o\u003dt(\"../scatter/calc\").calcAxisExpansion,s\u003dt(\"../scatter/colorscale_calc\"),l\u003dt(\"../scattergl/convert\").markerSelection,c\u003dt(\"../scattergl/convert\").markerStyle,u\u003dt(\"./scene_update\"),f\u003dt(\"../../constants/numerical\").BADNUM,h\u003dt(\"../scattergl/constants\").TOO_MANY_POINTS;e.exports\u003dfunction(t,e){var r,p,d,m,g,v,y\u003de.dimensions,x\u003de._length,b\u003d{},_\u003db.cdata\u003d[],w\u003db.data\u003d[],T\u003de._visibleDims\u003d[];function k(t,r){for(var i\u003dt.makeCalcdata({v:r.values,vcalendar:e.calendar},\"v\"),a\u003d0;a\u003ci.length;a++)i[a]\u003di[a]\u003d\u003d\u003df?NaN:i[a];_.push(i),w.push(\"log\"\u003d\u003d\u003dt.type?n.simpleMap(i,t.c2l):i)}for(r\u003d0;r\u003cy.length;r++)if((d\u003dy[r]).visible){if(m\u003di.getFromId(t,e._diag[r][0]),g\u003di.getFromId(t,e._diag[r][1]),m\u0026\u0026g\u0026\u0026m.type!\u003d\u003dg.type){n.log(\"Skipping splom dimension \"+r+\" with conflicting axis types\");continue}m?(k(m,d),g\u0026\u0026\"category\"\u003d\u003d\u003dg.type\u0026\u0026(g._categories\u003dm._categories.slice())):k(g,d),T.push(r)}for(s(t,e),n.extendFlat(b,c(e)),v\u003d_.length*x\u003eh?2*(b.sizeAvg||Math.max(b.size,3)):a(e,x),p\u003d0;p\u003cT.length;p++)d\u003dy[r\u003dT[p]],m\u003di.getFromId(t,e._diag[r][0])||{},g\u003di.getFromId(t,e._diag[r][1])||{},o(t,e,m,g,_[p],_[p],v);var M\u003du(t,e);return M.matrix||(M.matrix\u003d!0),M.matrixOptions\u003db,M.selectedOptions\u003dl(e,e.selected),M.unselectedOptions\u003dl(e,e.unselected),[{x:!1,y:!1,t:{},trace:e}]}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/axis_ids\":853,\"../scatter/calc\":1215,\"../scatter/colorscale_calc\":1217,\"../scattergl/constants\":1268,\"../scattergl/convert\":1269,\"./scene_update\":1319}],1313:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/array_container_defaults\"),a\u003dt(\"./attributes\"),o\u003dt(\"../scatter/subtypes\"),s\u003dt(\"../scatter/marker_defaults\"),l\u003dt(\"../parcoords/merge_length\"),c\u003dt(\"../scattergl/helpers\").isOpenSymbol;function u(t,e){function r(r,i){return n.coerce(t,e,a.dimensions,r,i)}r(\"label\");var i\u003dr(\"values\");i\u0026\u0026i.length?r(\"visible\"):e.visible\u003d!1,r(\"axis.type\"),r(\"axis.matches\")}e.exports\u003dfunction(t,e,r,f){function h(r,i){return n.coerce(t,e,a,r,i)}var p\u003di(t,e,{name:\"dimensions\",handleItemDefaults:u}),d\u003dh(\"diagonal.visible\"),m\u003dh(\"showupperhalf\"),g\u003dh(\"showlowerhalf\");if(l(e,p,\"values\")\u0026\u0026(d||m||g)){h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"xhoverformat\"),h(\"yhoverformat\"),s(t,e,r,f,h);var v\u003dc(e.marker.symbol),y\u003do.isBubble(e);h(\"marker.line.width\",v||y?1:0),function(t,e,r,n){var i,a,o\u003de.dimensions,s\u003do.length,l\u003de.showupperhalf,c\u003de.showlowerhalf,u\u003de.diagonal.visible,f\u003dnew Array(s),h\u003dnew Array(s);for(i\u003d0;i\u003cs;i++){var p\u003di?i+1:\"\";f[i]\u003d\"x\"+p,h[i]\u003d\"y\"+p}var d\u003dn(\"xaxes\",f),m\u003dn(\"yaxes\",h),g\u003de._diag\u003dnew Array(s);e._xaxes\u003d{},e._yaxes\u003d{};var v\u003d[],y\u003d[];function x(t,n,i,a){if(t){var o\u003dt.charAt(0),s\u003dr._splomAxes[o];if(e[\"_\"+o+\"axes\"][t]\u003d1,a.push(t),!(t in s)){var l\u003ds[t]\u003d{};i\u0026\u0026(l.label\u003di.label||\"\",i.visible\u0026\u0026i.axis\u0026\u0026(i.axis.type\u0026\u0026(l.type\u003di.axis.type),i.axis.matches\u0026\u0026(l.matches\u003dn)))}}}var b\u003d!u\u0026\u0026!c,_\u003d!u\u0026\u0026!l;for(e._axesDim\u003d{},i\u003d0;i\u003cs;i++){var w\u003do[i],T\u003d0\u003d\u003d\u003di,k\u003di\u003d\u003d\u003ds-1,M\u003dT\u0026\u0026b||k\u0026\u0026_?void 0:d[i],A\u003dT\u0026\u0026_||k\u0026\u0026b?void 0:m[i];x(M,A,w,v),x(A,M,w,y),g[i]\u003d[M,A],e._axesDim[M]\u003di,e._axesDim[A]\u003di}for(i\u003d0;i\u003cv.length;i++)for(a\u003d0;a\u003cy.length;a++){var S\u003dv[i]+y[a];i\u003ea\u0026\u0026l||i\u003ca\u0026\u0026c?r._splomSubplots[S]\u003d1:i!\u003d\u003da||!u\u0026\u0026c\u0026\u0026l||(r._splomSubplots[S]\u003d1)}(!c||!u\u0026\u0026l\u0026\u0026c)\u0026\u0026(r._splomGridDflt.xside\u003d\"bottom\",r._splomGridDflt.yside\u003d\"left\")}(0,e,f,h),n.coerceSelectionMarkerOpacity(e,h)}else e.visible\u003d!1}},{\"../../lib\":799,\"../../plots/array_container_defaults\":844,\"../parcoords/merge_length\":1185,\"../scatter/marker_defaults\":1233,\"../scatter/subtypes\":1239,\"../scattergl/helpers\":1273,\"./attributes\":1310}],1314:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/colorscale_calc\"),a\u003dt(\"../scattergl/convert\").markerStyle;e.exports\u003dfunction(t,e){var r\u003de.trace,o\u003dt._fullLayout._splomScenes[r.uid];if(o){i(t,r),n.extendFlat(o.matrixOptions,a(r));var s\u003dn.extendFlat({},o.matrixOptions,o.viewOpts);o.matrix.update(s,null)}}},{\"../../lib\":799,\"../scatter/colorscale_calc\":1217,\"../scattergl/convert\":1269}],1315:[function(t,e,r){\"use strict\";r.getDimIndex\u003dfunction(t,e){for(var r\u003de._id,n\u003d{x:0,y:1}[r.charAt(0)],i\u003dt._visibleDims,a\u003d0;a\u003ci.length;a++){var o\u003di[a];if(t._diag[o][n]\u003d\u003d\u003dr)return a}return!1}},{}],1316:[function(t,e,r){\"use strict\";var n\u003dt(\"./helpers\"),i\u003dt(\"../scattergl/hover\").calcHover;e.exports\u003d{hoverPoints:function(t,e,r){var a\u003dt.cd[0].trace,o\u003dt.scene.matrixOptions.cdata,s\u003dt.xa,l\u003dt.ya,c\u003ds.c2p(e),u\u003dl.c2p(r),f\u003dt.distance,h\u003dn.getDimIndex(a,s),p\u003dn.getDimIndex(a,l);if(!1\u003d\u003d\u003dh||!1\u003d\u003d\u003dp)return[t];for(var d,m,g\u003do[h],v\u003do[p],y\u003df,x\u003d0;x\u003cg.length;x++){var b\u003dg[x],_\u003dv[x],w\u003ds.c2p(b)-c,T\u003dl.c2p(_)-u,k\u003dMath.sqrt(w*w+T*T);k\u003cy\u0026\u0026(y\u003dm\u003dk,d\u003dx)}return t.index\u003dd,t.distance\u003dy,t.dxy\u003dm,void 0\u003d\u003d\u003dd?[t]:[i(t,g,v,a)]}}},{\"../scattergl/hover\":1274,\"./helpers\":1315}],1317:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../components/grid\");e.exports\u003d{moduleType:\"trace\",name:\"splom\",basePlotModule:t(\"./base_plot\"),categories:[\"gl\",\"regl\",\"cartesian\",\"symbols\",\"showLegend\",\"scatter-like\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:t(\"../scatter/marker_colorbar\"),calc:t(\"./calc\"),plot:t(\"./plot\"),hoverPoints:t(\"./hover\").hoverPoints,selectPoints:t(\"./select\"),editStyle:t(\"./edit_style\"),meta:{}},n.register(i)},{\"../../components/grid\":706,\"../../registry\":927,\"../scatter/marker_colorbar\":1232,\"./attributes\":1310,\"./base_plot\":1311,\"./calc\":1312,\"./defaults\":1313,\"./edit_style\":1314,\"./hover\":1316,\"./plot\":1318,\"./select\":1320}],1318:[function(t,e,r){\"use strict\";var n\u003dt(\"regl-splom\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../plots/cartesian/axis_ids\"),o\u003dt(\"../../components/dragelement/helpers\").selectMode;function s(t,e){var r,s,l,c,u,f\u003dt._fullLayout,h\u003df._size,p\u003de.trace,d\u003de.t,m\u003df._splomScenes[p.uid],g\u003dm.matrixOptions,v\u003dg.cdata,y\u003df._glcanvas.data()[0].regl,x\u003df.dragmode;if(0!\u003d\u003dv.length){g.lower\u003dp.showupperhalf,g.upper\u003dp.showlowerhalf,g.diagonal\u003dp.diagonal.visible;var b\u003dp._visibleDims,_\u003dv.length,w\u003dm.viewOpts\u003d{};for(w.ranges\u003dnew Array(_),w.domains\u003dnew Array(_),u\u003d0;u\u003cb.length;u++){l\u003db[u];var T\u003dw.ranges[u]\u003dnew Array(4),k\u003dw.domains[u]\u003dnew Array(4);(r\u003da.getFromId(t,p._diag[l][0]))\u0026\u0026(T[0]\u003dr._rl[0],T[2]\u003dr._rl[1],k[0]\u003dr.domain[0],k[2]\u003dr.domain[1]),(s\u003da.getFromId(t,p._diag[l][1]))\u0026\u0026(T[1]\u003ds._rl[0],T[3]\u003ds._rl[1],k[1]\u003ds.domain[0],k[3]\u003ds.domain[1])}w.viewport\u003d[h.l,h.b,h.w+h.l,h.h+h.b],!0\u003d\u003d\u003dm.matrix\u0026\u0026(m.matrix\u003dn(y));var M\u003df.clickmode.indexOf(\"select\")\u003e-1,A\u003d!0;if(o(x)||!!p.selectedpoints||M){var S\u003dp._length;if(p.selectedpoints){m.selectBatch\u003dp.selectedpoints;var E\u003dp.selectedpoints,L\u003d{};for(l\u003d0;l\u003cE.length;l++)L[E[l]]\u003d!0;var C\u003d[];for(l\u003d0;l\u003cS;l++)L[l]||C.push(l);m.unselectBatch\u003dC}var P\u003dd.xpx\u003dnew Array(_),I\u003dd.ypx\u003dnew Array(_);for(u\u003d0;u\u003cb.length;u++){if(l\u003db[u],r\u003da.getFromId(t,p._diag[l][0]))for(P[u]\u003dnew Array(S),c\u003d0;c\u003cS;c++)P[u][c]\u003dr.c2p(v[u][c]);if(s\u003da.getFromId(t,p._diag[l][1]))for(I[u]\u003dnew Array(S),c\u003d0;c\u003cS;c++)I[u][c]\u003ds.c2p(v[u][c])}if(m.selectBatch.length||m.unselectBatch.length){var O\u003di.extendFlat({},g,m.unselectedOptions,w),z\u003di.extendFlat({},g,m.selectedOptions,w);m.matrix.update(O,z),A\u003d!1}}else d.xpx\u003dd.ypx\u003dnull;if(A){var D\u003di.extendFlat({},g,w);m.matrix.update(D,null)}}}e.exports\u003dfunction(t,e,r){if(r.length)for(var n\u003d0;n\u003cr.length;n++)s(t,r[n][0])}},{\"../../components/dragelement/helpers\":680,\"../../lib\":799,\"../../plots/cartesian/axis_ids\":853,\"regl-splom\":535}],1319:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\");e.exports\u003dfunction(t,e){var r\u003dt._fullLayout,i\u003de.uid,a\u003dr._splomScenes;a||(a\u003dr._splomScenes\u003d{});var o\u003d{dirty:!0,selectBatch:[],unselectBatch:[]},s\u003da[e.uid];return s||((s\u003da[i]\u003dn.extendFlat({},o,{matrix:!1,selectBatch:[],unselectBatch:[]})).draw\u003dfunction(){s.matrix\u0026\u0026s.matrix.draw\u0026\u0026(s.selectBatch.length||s.unselectBatch.length?s.matrix.draw(s.unselectBatch,s.selectBatch):s.matrix.draw()),s.dirty\u003d!1},s.destroy\u003dfunction(){s.matrix\u0026\u0026s.matrix.destroy\u0026\u0026s.matrix.destroy(),s.matrixOptions\u003dnull,s.selectBatch\u003dnull,s.unselectBatch\u003dnull,s\u003dnull}),s.dirty||n.extendFlat(s,o),s}},{\"../../lib\":799}],1320:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../scatter/subtypes\"),a\u003dt(\"./helpers\");e.exports\u003dfunction(t,e){var r\u003dt.cd,o\u003dr[0].trace,s\u003dr[0].t,l\u003dt.scene,c\u003dl.matrixOptions.cdata,u\u003dt.xaxis,f\u003dt.yaxis,h\u003d[];if(!l)return h;var p\u003d!i.hasMarkers(o)\u0026\u0026!i.hasText(o);if(!0!\u003d\u003do.visible||p)return h;var d\u003da.getDimIndex(o,u),m\u003da.getDimIndex(o,f);if(!1\u003d\u003d\u003dd||!1\u003d\u003d\u003dm)return h;var g\u003ds.xpx[d],v\u003ds.ypx[m],y\u003dc[d],x\u003dc[m],b\u003d[],_\u003d[];if(!1!\u003d\u003de\u0026\u0026!e.degenerate)for(var w\u003d0;w\u003cy.length;w++)e.contains([g[w],v[w]],null,w,t)?(b.push(w),h.push({pointNumber:w,x:y[w],y:x[w]})):_.push(w);var T\u003dl.matrixOptions;return b.length||_.length?l.selectBatch.length||l.unselectBatch.length||l.matrix.update(l.unselectedOptions,n.extendFlat({},T,l.selectedOptions,l.viewOpts)):l.matrix.update(T,null),l.selectBatch\u003db,l.unselectBatch\u003d_,h}},{\"../../lib\":799,\"../scatter/subtypes\":1239,\"./helpers\":1315}],1321:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/attributes\"),i\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,a\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,o\u003dt(\"../mesh3d/attributes\"),s\u003dt(\"../../plots/attributes\"),l\u003dt(\"../../lib/extend\").extendFlat,c\u003d{x:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},y:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},z:{valType:\"data_array\",editType:\"calc+clearAxisTypes\"},u:{valType:\"data_array\",editType:\"calc\"},v:{valType:\"data_array\",editType:\"calc\"},w:{valType:\"data_array\",editType:\"calc\"},starts:{x:{valType:\"data_array\",editType:\"calc\"},y:{valType:\"data_array\",editType:\"calc\"},z:{valType:\"data_array\",editType:\"calc\"},editType:\"calc\"},maxdisplayed:{valType:\"integer\",min:0,dflt:1e3,editType:\"calc\"},sizeref:{valType:\"number\",editType:\"calc\",min:0,dflt:1},text:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertext:{valType:\"string\",dflt:\"\",editType:\"calc\"},hovertemplate:a({editType:\"calc\"},{keys:[\"tubex\",\"tubey\",\"tubez\",\"tubeu\",\"tubev\",\"tubew\",\"norm\",\"divergence\"]}),uhoverformat:i(\"u\",1),vhoverformat:i(\"v\",1),whoverformat:i(\"w\",1),xhoverformat:i(\"x\"),yhoverformat:i(\"y\"),zhoverformat:i(\"z\"),showlegend:l({},s.showlegend,{dflt:!1})};l(c,n(\"\",{colorAttr:\"u/v/w norm\",showScaleDflt:!0,editTypeOverride:\"calc\"}));[\"opacity\",\"lightposition\",\"lighting\"].forEach((function(t){c[t]\u003do[t]})),c.hoverinfo\u003dl({},s.hoverinfo,{editType:\"calc\",flags:[\"x\",\"y\",\"z\",\"u\",\"v\",\"w\",\"norm\",\"divergence\",\"text\",\"name\"],dflt:\"x+y+z+norm+text+name\"}),c.transforms\u003dvoid 0,e.exports\u003dc},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../mesh3d/attributes\":1155}],1322:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/calc\");function a(t){var e,r,i,a,s,l,c,u,f,h,p,d,m\u003dt._x,g\u003dt._y,v\u003dt._z,y\u003dt._len,x\u003d-1/0,b\u003d1/0,_\u003d-1/0,w\u003d1/0,T\u003d-1/0,k\u003d1/0,M\u003d\"\";for(y\u0026\u0026(c\u003dm[0],f\u003dg[0],p\u003dv[0]),y\u003e1\u0026\u0026(u\u003dm[y-1],h\u003dg[y-1],d\u003dv[y-1]),e\u003d0;e\u003cy;e++)x\u003dMath.max(x,m[e]),b\u003dMath.min(b,m[e]),_\u003dMath.max(_,g[e]),w\u003dMath.min(w,g[e]),T\u003dMath.max(T,v[e]),k\u003dMath.min(k,v[e]),a||m[e]\u003d\u003d\u003dc||(a\u003d!0,M+\u003d\"x\"),s||g[e]\u003d\u003d\u003df||(s\u003d!0,M+\u003d\"y\"),l||v[e]\u003d\u003d\u003dp||(l\u003d!0,M+\u003d\"z\");a||(M+\u003d\"x\"),s||(M+\u003d\"y\"),l||(M+\u003d\"z\");var A\u003do(t._x),S\u003do(t._y),E\u003do(t._z);M\u003d(M\u003d(M\u003dM.replace(\"x\",(c\u003eu?\"-\":\"+\")+\"x\")).replace(\"y\",(f\u003eh?\"-\":\"+\")+\"y\")).replace(\"z\",(p\u003ed?\"-\":\"+\")+\"z\");var L\u003dfunction(){y\u003d0,A\u003d[],S\u003d[],E\u003d[]};(!y||y\u003cA.length*S.length*E.length)\u0026\u0026L();var C\u003dfunction(t){return\"x\"\u003d\u003d\u003dt?m:\"y\"\u003d\u003d\u003dt?g:v},P\u003dfunction(t){return\"x\"\u003d\u003d\u003dt?A:\"y\"\u003d\u003d\u003dt?S:E},I\u003dfunction(t){return t[y-1]\u003ct[0]?-1:1},O\u003dC(M[1]),z\u003dC(M[3]),D\u003dC(M[5]),R\u003dP(M[1]).length,F\u003dP(M[3]).length,B\u003dP(M[5]).length,N\u003d!1,j\u003dfunction(t,e,r){return R*(F*t+e)+r},U\u003dI(C(M[1])),V\u003dI(C(M[3])),q\u003dI(C(M[5]));for(e\u003d0;e\u003cB-1;e++){for(r\u003d0;r\u003cF-1;r++){for(i\u003d0;i\u003cR-1;i++){var H\u003dj(e,r,i),G\u003dj(e,r,i+1),Y\u003dj(e,r+1,i),W\u003dj(e+1,r,i);if(O[H]*U\u003cO[G]*U\u0026\u0026z[H]*V\u003cz[Y]*V\u0026\u0026D[H]*q\u003cD[W]*q||(N\u003d!0),N)break}if(N)break}if(N)break}return N\u0026\u0026(n.warn(\"Encountered arbitrary coordinates! Unable to input data grid.\"),L()),{xMin:b,yMin:w,zMin:k,xMax:x,yMax:_,zMax:T,Xs:A,Ys:S,Zs:E,len:y,fill:M}}function o(t){return n.distinctVals(t).vals}function s(t,e){if(void 0\u003d\u003d\u003de\u0026\u0026(e\u003dt.length),n.isTypedArray(t))return t.subarray(0,e);for(var r\u003d[],i\u003d0;i\u003ce;i++)r[i]\u003d+t[i];return r}e.exports\u003d{calc:function(t,e){e._len\u003dMath.min(e.u.length,e.v.length,e.w.length,e.x.length,e.y.length,e.z.length),e._u\u003ds(e.u,e._len),e._v\u003ds(e.v,e._len),e._w\u003ds(e.w,e._len),e._x\u003ds(e.x,e._len),e._y\u003ds(e.y,e._len),e._z\u003ds(e.z,e._len);var r\u003da(e);e._gridFill\u003dr.fill,e._Xs\u003dr.Xs,e._Ys\u003dr.Ys,e._Zs\u003dr.Zs,e._len\u003dr.len;var n,o,l,c\u003d0;e.starts\u0026\u0026(n\u003ds(e.starts.x||[]),o\u003ds(e.starts.y||[]),l\u003ds(e.starts.z||[]),c\u003dMath.min(n.length,o.length,l.length)),e._startsX\u003dn||[],e._startsY\u003do||[],e._startsZ\u003dl||[];var u,f\u003d0,h\u003d1/0;for(u\u003d0;u\u003ce._len;u++){var p\u003de._u[u],d\u003de._v[u],m\u003de._w[u],g\u003dMath.sqrt(p*p+d*d+m*m);f\u003dMath.max(f,g),h\u003dMath.min(h,g)}for(i(t,e,{vals:[h,f],containerStr:\"\",cLetter:\"c\"}),u\u003d0;u\u003cc;u++){var v\u003dn[u];r.xMax\u003dMath.max(r.xMax,v),r.xMin\u003dMath.min(r.xMin,v);var y\u003do[u];r.yMax\u003dMath.max(r.yMax,y),r.yMin\u003dMath.min(r.yMin,y);var x\u003dl[u];r.zMax\u003dMath.max(r.zMax,x),r.zMin\u003dMath.min(r.zMin,x)}e._slen\u003dc,e._normMax\u003df,e._xbnds\u003d[r.xMin,r.xMax],e._ybnds\u003d[r.yMin,r.yMax],e._zbnds\u003d[r.zMin,r.zMax]},filter:s,processGrid:a}},{\"../../components/colorscale/calc\":670,\"../../lib\":799}],1323:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-streamtube3d\"),i\u003dn.createTubeMesh,a\u003dt(\"../../lib\"),o\u003dt(\"../../lib/gl_format_color\").parseColorScale,s\u003dt(\"../../components/colorscale\").extractOpts,l\u003dt(\"../../plots/gl3d/zip3\"),c\u003d{xaxis:0,yaxis:1,zaxis:2};function u(t,e){this.scene\u003dt,this.uid\u003de,this.mesh\u003dnull,this.data\u003dnull}var f\u003du.prototype;function h(t){var e\u003dt.length;return e\u003e2?t.slice(1,e-1):2\u003d\u003d\u003de?[(t[0]+t[1])/2]:t}function p(t){var e\u003dt.length;return 1\u003d\u003d\u003de?[.5,.5]:[t[1]-t[0],t[e-1]-t[e-2]]}function d(t,e){var r\u003dt.fullSceneLayout,i\u003dt.dataScale,u\u003de._len,f\u003d{};function d(t,e){var n\u003dr[e],o\u003di[c[e]];return a.simpleMap(t,(function(t){return n.d2l(t)*o}))}if(f.vectors\u003dl(d(e._u,\"xaxis\"),d(e._v,\"yaxis\"),d(e._w,\"zaxis\"),u),!u)return{positions:[],cells:[]};var m\u003dd(e._Xs,\"xaxis\"),g\u003dd(e._Ys,\"yaxis\"),v\u003dd(e._Zs,\"zaxis\");if(f.meshgrid\u003d[m,g,v],f.gridFill\u003de._gridFill,e._slen)f.startingPositions\u003dl(d(e._startsX,\"xaxis\"),d(e._startsY,\"yaxis\"),d(e._startsZ,\"zaxis\"));else{for(var y\u003dg[0],x\u003dh(m),b\u003dh(v),_\u003dnew Array(x.length*b.length),w\u003d0,T\u003d0;T\u003cx.length;T++)for(var k\u003d0;k\u003cb.length;k++)_[w++]\u003d[x[T],y,b[k]];f.startingPositions\u003d_}f.colormap\u003do(e),f.tubeSize\u003de.sizeref,f.maxLength\u003de.maxdisplayed;var M\u003dd(e._xbnds,\"xaxis\"),A\u003dd(e._ybnds,\"yaxis\"),S\u003dd(e._zbnds,\"zaxis\"),E\u003dp(m),L\u003dp(g),C\u003dp(v),P\u003d[[M[0]-E[0],A[0]-L[0],S[0]-C[0]],[M[1]+E[1],A[1]+L[1],S[1]+C[1]]],I\u003dn(f,P),O\u003ds(e);I.vertexIntensityBounds\u003d[O.min/e._normMax,O.max/e._normMax];var z\u003de.lightposition;return I.lightPosition\u003d[z.x,z.y,z.z],I.ambient\u003de.lighting.ambient,I.diffuse\u003de.lighting.diffuse,I.specular\u003de.lighting.specular,I.roughness\u003de.lighting.roughness,I.fresnel\u003de.lighting.fresnel,I.opacity\u003de.opacity,e._pad\u003dI.tubeScale*e.sizeref*2,I}f.handlePick\u003dfunction(t){var e\u003dthis.scene.fullSceneLayout,r\u003dthis.scene.dataScale;function n(t,n){var i\u003de[n],a\u003dr[c[n]];return i.l2c(t)/a}if(t.object\u003d\u003d\u003dthis.mesh){var i\u003dt.data.position,a\u003dt.data.velocity;return t.traceCoordinate\u003d[n(i[0],\"xaxis\"),n(i[1],\"yaxis\"),n(i[2],\"zaxis\"),n(a[0],\"xaxis\"),n(a[1],\"yaxis\"),n(a[2],\"zaxis\"),t.data.intensity*this.data._normMax,t.data.divergence],t.textLabel\u003dthis.data.hovertext||this.data.text,!0}},f.update\u003dfunction(t){this.data\u003dt;var e\u003dd(this.scene,t);this.mesh.update(e)},f.dispose\u003dfunction(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports\u003dfunction(t,e){var r\u003dt.glplot.gl,n\u003dd(t,e),a\u003di(r,n),o\u003dnew u(t,e.uid);return o.mesh\u003da,o.data\u003de,a._trace\u003do,t.glplot.add(a),o}},{\"../../components/colorscale\":674,\"../../lib\":799,\"../../lib/gl_format_color\":795,\"../../plots/gl3d/zip3\":903,\"gl-streamtube3d\":348}],1324:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/colorscale/defaults\"),a\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l\u003ds(\"u\"),c\u003ds(\"v\"),u\u003ds(\"w\"),f\u003ds(\"x\"),h\u003ds(\"y\"),p\u003ds(\"z\");l\u0026\u0026l.length\u0026\u0026c\u0026\u0026c.length\u0026\u0026u\u0026\u0026u.length\u0026\u0026f\u0026\u0026f.length\u0026\u0026h\u0026\u0026h.length\u0026\u0026p\u0026\u0026p.length?(s(\"starts.x\"),s(\"starts.y\"),s(\"starts.z\"),s(\"maxdisplayed\"),s(\"sizeref\"),s(\"lighting.ambient\"),s(\"lighting.diffuse\"),s(\"lighting.specular\"),s(\"lighting.roughness\"),s(\"lighting.fresnel\"),s(\"lightposition.x\"),s(\"lightposition.y\"),s(\"lightposition.z\"),i(t,e,o,s,{prefix:\"\",cLetter:\"c\"}),s(\"text\"),s(\"hovertext\"),s(\"hovertemplate\"),s(\"uhoverformat\"),s(\"vhoverformat\"),s(\"whoverformat\"),s(\"xhoverformat\"),s(\"yhoverformat\"),s(\"zhoverformat\"),e._length\u003dnull):e.visible\u003d!1}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"./attributes\":1321}],1325:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"streamtube\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),colorbar:{min:\"cmin\",max:\"cmax\"},calc:t(\"./calc\").calc,plot:t(\"./convert\"),eventData:function(t,e){return t.tubex\u003dt.x,t.tubey\u003dt.y,t.tubez\u003dt.z,t.tubeu\u003de.traceCoordinate[3],t.tubev\u003de.traceCoordinate[4],t.tubew\u003de.traceCoordinate[5],t.norm\u003de.traceCoordinate[6],t.divergence\u003de.traceCoordinate[7],delete t.x,delete t.y,delete t.z,t},meta:{}}},{\"../../plots/gl3d\":892,\"./attributes\":1321,\"./calc\":1322,\"./convert\":1323,\"./defaults\":1324}],1326:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/attributes\"),i\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,a\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,o\u003dt(\"../../components/colorscale/attributes\"),s\u003dt(\"../../plots/domain\").attributes,l\u003dt(\"../pie/attributes\"),c\u003dt(\"./constants\"),u\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003d{labels:{valType:\"data_array\",editType:\"calc\"},parents:{valType:\"data_array\",editType:\"calc\"},values:{valType:\"data_array\",editType:\"calc\"},branchvalues:{valType:\"enumerated\",values:[\"remainder\",\"total\"],dflt:\"remainder\",editType:\"calc\"},count:{valType:\"flaglist\",flags:[\"branches\",\"leaves\"],dflt:\"leaves\",editType:\"calc\"},level:{valType:\"any\",editType:\"plot\",anim:!0},maxdepth:{valType:\"integer\",editType:\"plot\",dflt:-1},marker:u({colors:{valType:\"data_array\",editType:\"calc\"},line:{color:u({},l.marker.line.color,{dflt:null}),width:u({},l.marker.line.width,{dflt:1}),editType:\"calc\"},editType:\"calc\"},o(\"marker\",{colorAttr:\"colors\",anim:!1})),leaf:{opacity:{valType:\"number\",editType:\"style\",min:0,max:1},editType:\"plot\"},text:l.text,textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"value\",\"current path\",\"percent root\",\"percent entry\",\"percent parent\"],extras:[\"none\"],editType:\"plot\"},texttemplate:a({editType:\"plot\"},{keys:c.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:l.hovertext,hoverinfo:u({},n.hoverinfo,{flags:[\"label\",\"text\",\"value\",\"name\",\"current path\",\"percent root\",\"percent entry\",\"percent parent\"],dflt:\"label+text+value+name\"}),hovertemplate:i({},{keys:c.eventDataKeys}),textfont:l.textfont,insidetextorientation:l.insidetextorientation,insidetextfont:l.insidetextfont,outsidetextfont:u({},l.outsidetextfont,{}),rotation:{valType:\"angle\",dflt:0,editType:\"plot\"},sort:l.sort,root:{color:{valType:\"color\",editType:\"calc\",dflt:\"rgba(0,0,0,0)\"},editType:\"calc\"},domain:s({name:\"sunburst\",trace:!0,editType:\"calc\"})}},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/domain\":877,\"../../plots/template_attributes\":922,\"../pie/attributes\":1188,\"./constants\":1329}],1327:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/plots\");r.name\u003d\"sunburst\",r.plot\u003dfunction(t,e,i,a){n.plotBasePlot(r.name,t,e,i,a)},r.clean\u003dfunction(t,e,i,a){n.cleanBasePlot(r.name,t,e,i,a)}},{\"../../plots/plots\":913}],1328:[function(t,e,r){\"use strict\";var n\u003dt(\"d3-hierarchy\"),i\u003dt(\"fast-isnumeric\"),a\u003dt(\"../../lib\"),o\u003dt(\"../../components/colorscale\").makeColorScaleFuncFromTrace,s\u003dt(\"../pie/calc\").makePullColorFn,l\u003dt(\"../pie/calc\").generateExtendedColors,c\u003dt(\"../../components/colorscale\").calc,u\u003dt(\"../../constants/numerical\").ALMOST_EQUAL,f\u003d{},h\u003d{},p\u003d{};r.calc\u003dfunction(t,e){var r,l,f,h,p,d,m\u003dt._fullLayout,g\u003de.ids,v\u003da.isArrayOrTypedArray(g),y\u003de.labels,x\u003de.parents,b\u003de.values,_\u003da.isArrayOrTypedArray(b),w\u003d[],T\u003d{},k\u003d{},M\u003dfunction(t){return t||\"number\"\u003d\u003dtypeof t},A\u003dfunction(t){return!_||i(b[t])\u0026\u0026b[t]\u003e\u003d0};v?(r\u003dMath.min(g.length,x.length),l\u003dfunction(t){return M(g[t])\u0026\u0026A(t)},f\u003dfunction(t){return String(g[t])}):(r\u003dMath.min(y.length,x.length),l\u003dfunction(t){return M(y[t])\u0026\u0026A(t)},f\u003dfunction(t){return String(y[t])}),_\u0026\u0026(r\u003dMath.min(r,b.length));for(var S\u003d0;S\u003cr;S++)if(l(S)){var E\u003df(S),L\u003dM(x[S])?String(x[S]):\"\",C\u003d{i:S,id:E,pid:L,label:M(y[S])?String(y[S]):\"\"};_\u0026\u0026(C.v\u003d+b[S]),w.push(C),p\u003dE,T[h\u003dL]?T[h].push(p):T[h]\u003d[p],k[p]\u003d1}if(T[\"\"]){if(T[\"\"].length\u003e1){for(var P\u003da.randstr(),I\u003d0;I\u003cw.length;I++)\"\"\u003d\u003d\u003dw[I].pid\u0026\u0026(w[I].pid\u003dP);w.unshift({hasMultipleRoots:!0,id:P,pid:\"\",label:\"\"})}}else{var O,z\u003d[];for(O in T)k[O]||z.push(O);if(1!\u003d\u003dz.length)return a.warn([\"Multiple implied roots, cannot build\",e.type,\"hierarchy of\",e.name+\".\",\"These roots include:\",z.join(\", \")].join(\" \"));O\u003dz[0],w.unshift({hasImpliedRoot:!0,id:O,pid:\"\",label:O})}try{d\u003dn.stratify().id((function(t){return t.id})).parentId((function(t){return t.pid}))(w)}catch(t){return a.warn([\"Failed to build\",e.type,\"hierarchy of\",e.name+\".\",\"Error:\",t.message].join(\" \"))}var D\u003dn.hierarchy(d),R\u003d!1;if(_)switch(e.branchvalues){case\"remainder\":D.sum((function(t){return t.data.v}));break;case\"total\":D.each((function(t){var r\u003dt.data.data,n\u003dr.v;if(t.children){var i\u003dt.children.reduce((function(t,e){return t+e.data.data.v}),0);if((r.hasImpliedRoot||r.hasMultipleRoots)\u0026\u0026(n\u003di),n\u003ci*u)return R\u003d!0,a.warn([\"Total value for node\",t.data.data.id,\"of\",e.name,\"is smaller than the sum of its children.\",\"\\nparent value \u003d\",n,\"\\nchildren sum \u003d\",i].join(\" \"))}t.value\u003dn}))}else!function t(e,r,n){var i\u003d0,a\u003de.children;if(a){for(var o\u003da.length,s\u003d0;s\u003co;s++)i+\u003dt(a[s],r,n);n.branches\u0026\u0026i++}else n.leaves\u0026\u0026i++;e.value\u003de.data.data.value\u003di,r._values||(r._values\u003d[]);return r._values[e.data.data.i]\u003di,i}(D,e,{branches:-1!\u003d\u003de.count.indexOf(\"branches\"),leaves:-1!\u003d\u003de.count.indexOf(\"leaves\")});if(!R){var F,B;e.sort\u0026\u0026D.sort((function(t,e){return e.value-t.value}));var N\u003de.marker.colors||[],j\u003d!!N.length;return e._hasColorscale?(j||(N\u003d_?e.values:e._values),c(t,e,{vals:N,containerStr:\"marker\",cLetter:\"c\"}),B\u003do(e.marker)):F\u003ds(m[\"_\"+e.type+\"colormap\"]),D.each((function(t){var r\u003dt.data.data;r.color\u003de._hasColorscale?B(N[r.i]):F(N[r.i],r.id)})),w[0].hierarchy\u003dD,w}},r._runCrossTraceCalc\u003dfunction(t,e){var r\u003de._fullLayout,n\u003de.calcdata,i\u003dr[t+\"colorway\"],a\u003dr[\"_\"+t+\"colormap\"];r[\"extend\"+t+\"colors\"]\u0026\u0026(i\u003dl(i,\"icicle\"\u003d\u003d\u003dt?p:\"treemap\"\u003d\u003d\u003dt?h:f));var o,s\u003d0;function c(t){var e\u003dt.data.data,r\u003de.id;!1\u003d\u003d\u003de.color\u0026\u0026(a[r]?e.color\u003da[r]:t.parent?t.parent.parent?e.color\u003dt.parent.data.data.color:(a[r]\u003de.color\u003di[s%i.length],s++):e.color\u003do)}for(var u\u003d0;u\u003cn.length;u++){var d\u003dn[u][0];d.trace.type\u003d\u003d\u003dt\u0026\u0026d.hierarchy\u0026\u0026(o\u003dd.trace.root.color,d.hierarchy.each(c))}},r.crossTraceCalc\u003dfunction(t){return r._runCrossTraceCalc(\"sunburst\",t)}},{\"../../components/colorscale\":674,\"../../constants/numerical\":775,\"../../lib\":799,\"../pie/calc\":1190,\"d3-hierarchy\":167,\"fast-isnumeric\":245}],1329:[function(t,e,r){\"use strict\";e.exports\u003d{CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\"linear\",eventDataKeys:[\"currentPath\",\"root\",\"entry\",\"percentRoot\",\"percentEntry\",\"percentParent\"]}},{}],1330:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../plots/domain\").defaults,o\u003dt(\"../bar/defaults\").handleText,s\u003dt(\"../../components/colorscale\"),l\u003ds.hasColorscale,c\u003ds.handleDefaults;e.exports\u003dfunction(t,e,r,s){function u(r,a){return n.coerce(t,e,i,r,a)}var f\u003du(\"labels\"),h\u003du(\"parents\");if(f\u0026\u0026f.length\u0026\u0026h\u0026\u0026h.length){var p\u003du(\"values\");p\u0026\u0026p.length?u(\"branchvalues\"):u(\"count\"),u(\"level\"),u(\"maxdepth\"),u(\"marker.line.width\")\u0026\u0026u(\"marker.line.color\",s.paper_bgcolor),u(\"marker.colors\");var d\u003de._hasColorscale\u003dl(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis;d\u0026\u0026c(t,e,s,u,{prefix:\"marker.\",cLetter:\"c\"}),u(\"leaf.opacity\",d?1:.7);var m\u003du(\"text\");u(\"texttemplate\"),e.texttemplate||u(\"textinfo\",Array.isArray(m)?\"text+label\":\"label\"),u(\"hovertext\"),u(\"hovertemplate\");o(t,e,s,u,\"auto\",{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),u(\"insidetextorientation\"),u(\"sort\"),u(\"rotation\"),u(\"root.color\"),a(e,s,u),e._length\u003dnull}else e.visible\u003d!1}},{\"../../components/colorscale\":674,\"../../lib\":799,\"../../plots/domain\":877,\"../bar/defaults\":941,\"./attributes\":1326}],1331:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../registry\"),a\u003dt(\"../../components/fx/helpers\").appendArrayPointValue,o\u003dt(\"../../components/fx\"),s\u003dt(\"../../lib\"),l\u003dt(\"../../lib/events\"),c\u003dt(\"./helpers\"),u\u003dt(\"../pie/helpers\").formatPieValue;function f(t,e,r){for(var n\u003dt.data.data,i\u003d{curveNumber:e.index,pointNumber:n.i,data:e._input,fullData:e},o\u003d0;o\u003cr.length;o++){var s\u003dr[o];s in t\u0026\u0026(i[s]\u003dt[s])}return\"parentString\"in t\u0026\u0026!c.isHierarchyRoot(t)\u0026\u0026(i.parent\u003dt.parentString),a(i,e,n.i),i}e.exports\u003dfunction(t,e,r,a,h){var p\u003da[0],d\u003dp.trace,m\u003dp.hierarchy,g\u003d\"sunburst\"\u003d\u003d\u003dd.type,v\u003d\"treemap\"\u003d\u003d\u003dd.type||\"icicle\"\u003d\u003d\u003dd.type;\"_hasHoverLabel\"in d||(d._hasHoverLabel\u003d!1),\"_hasHoverEvent\"in d||(d._hasHoverEvent\u003d!1);t.on(\"mouseover\",(function(i){var a\u003dr._fullLayout;if(!r._dragging\u0026\u0026!1!\u003d\u003da.hovermode){var l\u003dr._fullData[d.index],y\u003di.data.data,x\u003dy.i,b\u003dc.isHierarchyRoot(i),_\u003dc.getParent(m,i),w\u003dc.getValue(i),T\u003dfunction(t){return s.castOption(l,x,t)},k\u003dT(\"hovertemplate\"),M\u003do.castHoverinfo(l,a,x),A\u003da.separators;if(k||M\u0026\u0026\"none\"!\u003d\u003dM\u0026\u0026\"skip\"!\u003d\u003dM){var S,E;g\u0026\u0026(S\u003dp.cx+i.pxmid[0]*(1-i.rInscribed),E\u003dp.cy+i.pxmid[1]*(1-i.rInscribed)),v\u0026\u0026(S\u003di._hoverX,E\u003di._hoverY);var L,C\u003d{},P\u003d[],I\u003d[],O\u003dfunction(t){return-1!\u003d\u003dP.indexOf(t)};M\u0026\u0026(P\u003d\"all\"\u003d\u003d\u003dM?l._module.attributes.hoverinfo.flags:M.split(\"+\")),C.label\u003dy.label,O(\"label\")\u0026\u0026C.label\u0026\u0026I.push(C.label),y.hasOwnProperty(\"v\")\u0026\u0026(C.value\u003dy.v,C.valueLabel\u003du(C.value,A),O(\"value\")\u0026\u0026I.push(C.valueLabel)),C.currentPath\u003di.currentPath\u003dc.getPath(i.data),O(\"current path\")\u0026\u0026!b\u0026\u0026I.push(C.currentPath);var z\u003d[],D\u003dfunction(){-1\u003d\u003d\u003dz.indexOf(L)\u0026\u0026(I.push(L),z.push(L))};C.percentParent\u003di.percentParent\u003dw/c.getValue(_),C.parent\u003di.parentString\u003dc.getPtLabel(_),O(\"percent parent\")\u0026\u0026(L\u003dc.formatPercent(C.percentParent,A)+\" of \"+C.parent,D()),C.percentEntry\u003di.percentEntry\u003dw/c.getValue(e),C.entry\u003di.entry\u003dc.getPtLabel(e),!O(\"percent entry\")||b||i.onPathbar||(L\u003dc.formatPercent(C.percentEntry,A)+\" of \"+C.entry,D()),C.percentRoot\u003di.percentRoot\u003dw/c.getValue(m),C.root\u003di.root\u003dc.getPtLabel(m),O(\"percent root\")\u0026\u0026!b\u0026\u0026(L\u003dc.formatPercent(C.percentRoot,A)+\" of \"+C.root,D()),C.text\u003dT(\"hovertext\")||T(\"text\"),O(\"text\")\u0026\u0026(L\u003dC.text,s.isValidTextValue(L)\u0026\u0026I.push(L));var R\u003d{trace:l,y:E,text:I.join(\"\u003cbr\u003e\"),name:k||O(\"name\")?l.name:void 0,color:T(\"hoverlabel.bgcolor\")||y.color,borderColor:T(\"hoverlabel.bordercolor\"),fontFamily:T(\"hoverlabel.font.family\"),fontSize:T(\"hoverlabel.font.size\"),fontColor:T(\"hoverlabel.font.color\"),nameLength:T(\"hoverlabel.namelength\"),textAlign:T(\"hoverlabel.align\"),hovertemplate:k,hovertemplateLabels:C,eventData:[f(i,l,h.eventDataKeys)]};g\u0026\u0026(R.x0\u003dS-i.rInscribed*i.rpx1,R.x1\u003dS+i.rInscribed*i.rpx1,R.idealAlign\u003di.pxmid[0]\u003c0?\"left\":\"right\"),v\u0026\u0026(R.x\u003dS,R.idealAlign\u003dS\u003c0?\"left\":\"right\"),o.loneHover(R,{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:r}),d._hasHoverLabel\u003d!0}if(v){var F\u003dt.select(\"path.surface\");h.styleOne(F,i,l,{hovered:!0})}d._hasHoverEvent\u003d!0,r.emit(\"plotly_hover\",{points:[f(i,l,h.eventDataKeys)],event:n.event})}})),t.on(\"mouseout\",(function(e){var i\u003dr._fullLayout,a\u003dr._fullData[d.index],s\u003dn.select(this).datum();if(d._hasHoverEvent\u0026\u0026(e.originalEvent\u003dn.event,r.emit(\"plotly_unhover\",{points:[f(s,a,h.eventDataKeys)],event:n.event}),d._hasHoverEvent\u003d!1),d._hasHoverLabel\u0026\u0026(o.loneUnhover(i._hoverlayer.node()),d._hasHoverLabel\u003d!1),v){var l\u003dt.select(\"path.surface\");h.styleOne(l,s,a,{hovered:!1})}})),t.on(\"click\",(function(t){var e\u003dr._fullLayout,a\u003dr._fullData[d.index],s\u003dg\u0026\u0026(c.isHierarchyRoot(t)||c.isLeaf(t)),u\u003dc.getPtId(t),p\u003dc.isEntry(t)?c.findEntryWithChild(m,u):c.findEntryWithLevel(m,u),v\u003dc.getPtId(p),y\u003d{points:[f(t,a,h.eventDataKeys)],event:n.event};s||(y.nextLevel\u003dv);var x\u003dl.triggerHandler(r,\"plotly_\"+d.type+\"click\",y);if(!1!\u003d\u003dx\u0026\u0026e.hovermode\u0026\u0026(r._hoverdata\u003d[f(t,a,h.eventDataKeys)],o.click(r,n.event)),!s\u0026\u0026!1!\u003d\u003dx\u0026\u0026!r._dragging\u0026\u0026!r._transitioning){i.call(\"_storeDirectGUIEdit\",a,e._tracePreGUI[a.uid],{level:a.level});var b\u003d{data:[{level:v}],traces:[d.index]},_\u003d{frame:{redraw:!1,duration:h.transitionTime},transition:{duration:h.transitionTime,easing:h.transitionEasing},mode:\"immediate\",fromcurrent:!0};o.loneUnhover(e._hoverlayer.node()),i.call(\"animate\",r,b,_)}}))}},{\"../../components/fx\":702,\"../../components/fx/helpers\":698,\"../../lib\":799,\"../../lib/events\":788,\"../../registry\":927,\"../pie/helpers\":1193,\"./helpers\":1332,\"@plotly/d3\":58}],1332:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../lib/setcursor\"),o\u003dt(\"../pie/helpers\");function s(t){return t.data.data.pid}r.findEntryWithLevel\u003dfunction(t,e){var n;return e\u0026\u0026t.eachAfter((function(t){if(r.getPtId(t)\u003d\u003d\u003de)return n\u003dt.copy()})),n||t},r.findEntryWithChild\u003dfunction(t,e){var n;return t.eachAfter((function(t){for(var i\u003dt.children||[],a\u003d0;a\u003ci.length;a++){var o\u003di[a];if(r.getPtId(o)\u003d\u003d\u003de)return n\u003dt.copy()}})),n||t},r.isEntry\u003dfunction(t){return!t.parent},r.isLeaf\u003dfunction(t){return!t.children},r.getPtId\u003dfunction(t){return t.data.data.id},r.getPtLabel\u003dfunction(t){return t.data.data.label},r.getValue\u003dfunction(t){return t.value},r.isHierarchyRoot\u003dfunction(t){return\"\"\u003d\u003d\u003ds(t)},r.setSliceCursor\u003dfunction(t,e,n){var i\u003dn.isTransitioning;if(!i){var o\u003dt.datum();i\u003dn.hideOnRoot\u0026\u0026r.isHierarchyRoot(o)||n.hideOnLeaves\u0026\u0026r.isLeaf(o)}a(t,i?null:\"pointer\")},r.getInsideTextFontKey\u003dfunction(t,e,r,i,a){var o\u003d(a||{}).onPathbar?\"pathbar.textfont\":\"insidetextfont\",s\u003dr.data.data.i;return n.castOption(e,s,o+\".\"+t)||n.castOption(e,s,\"textfont.\"+t)||i.size},r.getOutsideTextFontKey\u003dfunction(t,e,r,i){var a\u003dr.data.data.i;return n.castOption(e,a,\"outsidetextfont.\"+t)||n.castOption(e,a,\"textfont.\"+t)||i.size},r.isOutsideText\u003dfunction(t,e){return!t._hasColorscale\u0026\u0026r.isHierarchyRoot(e)},r.determineTextFont\u003dfunction(t,e,a,o){return r.isOutsideText(t,e)?function(t,e,n){return{color:r.getOutsideTextFontKey(\"color\",t,e,n),family:r.getOutsideTextFontKey(\"family\",t,e,n),size:r.getOutsideTextFontKey(\"size\",t,e,n)}}(t,e,a):function(t,e,a,o){var s\u003d(o||{}).onPathbar,l\u003de.data.data,c\u003dl.i,u\u003dn.castOption(t,c,(s?\"pathbar.textfont\":\"insidetextfont\")+\".color\");return!u\u0026\u0026t._input.textfont\u0026\u0026(u\u003dn.castOption(t._input,c,\"textfont.color\")),{color:u||i.contrast(l.color),family:r.getInsideTextFontKey(\"family\",t,e,a,o),size:r.getInsideTextFontKey(\"size\",t,e,a,o)}}(t,e,a,o)},r.hasTransition\u003dfunction(t){return!!(t\u0026\u0026t.duration\u003e0)},r.getMaxDepth\u003dfunction(t){return t.maxdepth\u003e\u003d0?t.maxdepth:1/0},r.isHeader\u003dfunction(t,e){return!(r.isLeaf(t)||t.depth\u003d\u003d\u003de._maxDepth-1)},r.getParent\u003dfunction(t,e){return r.findEntryWithLevel(t,s(e))},r.listPath\u003dfunction(t,e){var n\u003dt.parent;if(!n)return[];var i\u003de?[n.data[e]]:[n];return r.listPath(n,e).concat(i)},r.getPath\u003dfunction(t){return r.listPath(t,\"label\").join(\"/\")+\"/\"},r.formatValue\u003do.formatPieValue,r.formatPercent\u003dfunction(t,e){var r\u003dn.formatPercent(t,0);return\"0%\"\u003d\u003d\u003dr\u0026\u0026(r\u003do.formatPiePercent(t,e)),r}},{\"../../components/color\":662,\"../../lib\":799,\"../../lib/setcursor\":820,\"../pie/helpers\":1193}],1333:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"sunburst\",basePlotModule:t(\"./base_plot\"),categories:[],animatable:!0,attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\").plot,style:t(\"./style\").style,colorbar:t(\"../scatter/marker_colorbar\"),meta:{}}},{\"../scatter/marker_colorbar\":1232,\"./attributes\":1326,\"./base_plot\":1327,\"./calc\":1328,\"./defaults\":1330,\"./layout_attributes\":1334,\"./layout_defaults\":1335,\"./plot\":1336,\"./style\":1337}],1334:[function(t,e,r){\"use strict\";e.exports\u003d{sunburstcolorway:{valType:\"colorlist\",editType:\"calc\"},extendsunburstcolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{}],1335:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"sunburstcolorway\",e.colorway),r(\"extendsunburstcolors\")}},{\"../../lib\":799,\"./layout_attributes\":1334}],1336:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"d3-hierarchy\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../lib\"),s\u003dt(\"../../lib/svg_text_utils\"),l\u003dt(\"../bar/uniform_text\"),c\u003dl.recordMinTextSize,u\u003dl.clearMinTextSize,f\u003dt(\"../pie/plot\"),h\u003dt(\"../pie/helpers\").getRotationAngle,p\u003df.computeTransform,d\u003df.transformInsideText,m\u003dt(\"./style\").styleOne,g\u003dt(\"../bar/style\").resizeText,v\u003dt(\"./fx\"),y\u003dt(\"./constants\"),x\u003dt(\"./helpers\");function b(t,e,l,u){var f\u003dt._fullLayout,g\u003d!f.uniformtext.mode\u0026\u0026x.hasTransition(u),b\u003dn.select(l).selectAll(\"g.slice\"),w\u003de[0],T\u003dw.trace,k\u003dw.hierarchy,M\u003dx.findEntryWithLevel(k,T.level),A\u003dx.getMaxDepth(T),S\u003df._size,E\u003dT.domain,L\u003dS.w*(E.x[1]-E.x[0]),C\u003dS.h*(E.y[1]-E.y[0]),P\u003d.5*Math.min(L,C),I\u003dw.cx\u003dS.l+S.w*(E.x[1]+E.x[0])/2,O\u003dw.cy\u003dS.t+S.h*(1-E.y[0])-C/2;if(!M)return b.remove();var z\u003dnull,D\u003d{};g\u0026\u0026b.each((function(t){D[x.getPtId(t)]\u003d{rpx0:t.rpx0,rpx1:t.rpx1,x0:t.x0,x1:t.x1,transform:t.transform},!z\u0026\u0026x.isEntry(t)\u0026\u0026(z\u003dt)}));var R\u003dfunction(t){return i.partition().size([2*Math.PI,t.height+1])(t)}(M).descendants(),F\u003dM.height+1,B\u003d0,N\u003dA;w.hasMultipleRoots\u0026\u0026x.isHierarchyRoot(M)\u0026\u0026(R\u003dR.slice(1),F-\u003d1,B\u003d1,N+\u003d1),R\u003dR.filter((function(t){return t.y1\u003c\u003dN}));var j\u003dh(T.rotation);j\u0026\u0026R.forEach((function(t){t.x0+\u003dj,t.x1+\u003dj}));var U\u003dMath.min(F,A),V\u003dfunction(t){return(t-B)/U*P},q\u003dfunction(t,e){return[t*Math.cos(e),-t*Math.sin(e)]},H\u003dfunction(t){return o.pathAnnulus(t.rpx0,t.rpx1,t.x0,t.x1,I,O)},G\u003dfunction(t){return I+_(t)[0]*(t.transform.rCenter||0)+(t.transform.x||0)},Y\u003dfunction(t){return O+_(t)[1]*(t.transform.rCenter||0)+(t.transform.y||0)};(b\u003db.data(R,x.getPtId)).enter().append(\"g\").classed(\"slice\",!0),g?b.exit().transition().each((function(){var t\u003dn.select(this);t.select(\"path.surface\").transition().attrTween(\"d\",(function(t){var e\u003dfunction(t){var e,r\u003dx.getPtId(t),i\u003dD[r],a\u003dD[x.getPtId(M)];if(a){var o\u003d(t.x1\u003ea.x1?2*Math.PI:0)+j;e\u003dt.rpx1\u003ca.rpx1?{rpx0:0,rpx1:0}:{x0:o,x1:o}}else{var s,l\u003dx.getPtId(t.parent);b.each((function(t){if(x.getPtId(t)\u003d\u003d\u003dl)return s\u003dt}));var c,u\u003ds.children;u.forEach((function(t,e){if(x.getPtId(t)\u003d\u003d\u003dr)return c\u003de}));var f\u003du.length,h\u003dn.interpolate(s.x0,s.x1);e\u003d{rpx0:P,rpx1:P,x0:h(c/f),x1:h((c+1)/f)}}return n.interpolate(i,e)}(t);return function(t){return H(e(t))}})),t.select(\"g.slicetext\").attr(\"opacity\",0)})).remove():b.exit().remove(),b.order();var W\u003dnull;if(g\u0026\u0026z){var X\u003dx.getPtId(z);b.each((function(t){null\u003d\u003d\u003dW\u0026\u0026x.getPtId(t)\u003d\u003d\u003dX\u0026\u0026(W\u003dt.x1)}))}var Z\u003db;function J(t){var e\u003dt.parent,r\u003dD[x.getPtId(e)],i\u003d{};if(r){var a\u003de.children,o\u003da.indexOf(t),s\u003da.length,l\u003dn.interpolate(r.x0,r.x1);i.x0\u003dl(o/s),i.x1\u003dl(o/s)}else i.x0\u003di.x1\u003d0;return i}g\u0026\u0026(Z\u003dZ.transition().each(\"end\",(function(){var e\u003dn.select(this);x.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:!1})}))),Z.each((function(i){var l\u003dn.select(this),u\u003do.ensureSingle(l,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",\"all\")}));i.rpx0\u003dV(i.y0),i.rpx1\u003dV(i.y1),i.xmid\u003d(i.x0+i.x1)/2,i.pxmid\u003dq(i.rpx1,i.xmid),i.midangle\u003d-(i.xmid-Math.PI/2),i.startangle\u003d-(i.x0-Math.PI/2),i.stopangle\u003d-(i.x1-Math.PI/2),i.halfangle\u003d.5*Math.min(o.angleDelta(i.x0,i.x1)||Math.PI,Math.PI),i.ring\u003d1-i.rpx0/i.rpx1,i.rInscribed\u003dfunction(t){return 0\u003d\u003d\u003dt.rpx0\u0026\u0026o.isFullCircle([t.x0,t.x1])?1:Math.max(0,Math.min(1/(1+1/Math.sin(t.halfangle)),t.ring/2))}(i),g?u.transition().attrTween(\"d\",(function(t){var e\u003dfunction(t){var e,r\u003dD[x.getPtId(t)],i\u003d{x0:t.x0,x1:t.x1,rpx0:t.rpx0,rpx1:t.rpx1};if(r)e\u003dr;else if(z)if(t.parent)if(W){var a\u003d(t.x1\u003eW?2*Math.PI:0)+j;e\u003d{x0:a,x1:a}}else e\u003d{rpx0:P,rpx1:P},o.extendFlat(e,J(t));else e\u003d{rpx0:0,rpx1:0};else e\u003d{x0:j,x1:j};return n.interpolate(e,i)}(t);return function(t){return H(e(t))}})):u.attr(\"d\",H),l.call(v,M,t,e,{eventDataKeys:y.eventDataKeys,transitionTime:y.CLICK_TRANSITION_TIME,transitionEasing:y.CLICK_TRANSITION_EASING}).call(x.setSliceCursor,t,{hideOnRoot:!0,hideOnLeaves:!0,isTransitioning:t._transitioning}),u.call(m,i,T);var h\u003do.ensureSingle(l,\"g\",\"slicetext\"),b\u003do.ensureSingle(h,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),_\u003do.ensureUniformFontSize(t,x.determineTextFont(T,i,f.font));b.text(r.formatSliceLabel(i,M,T,e,f)).classed(\"slicetext\",!0).attr(\"text-anchor\",\"middle\").call(a.font,_).call(s.convertToTspans,t);var k\u003da.bBox(b.node());i.transform\u003dd(k,i,w),i.transform.targetX\u003dG(i),i.transform.targetY\u003dY(i);var A\u003dfunction(t,e){var r\u003dt.transform;return p(r,e),r.fontSize\u003d_.size,c(T.type,r,f),o.getTextTransform(r)};g?b.transition().attrTween(\"transform\",(function(t){var e\u003dfunction(t){var e,r\u003dD[x.getPtId(t)],i\u003dt.transform;if(r)e\u003dr;else if(e\u003d{rpx1:t.rpx1,transform:{textPosAngle:i.textPosAngle,scale:0,rotate:i.rotate,rCenter:i.rCenter,x:i.x,y:i.y}},z)if(t.parent)if(W){var a\u003dt.x1\u003eW?2*Math.PI:0;e.x0\u003de.x1\u003da}else o.extendFlat(e,J(t));else e.x0\u003de.x1\u003dj;else e.x0\u003de.x1\u003dj;var s\u003dn.interpolate(e.transform.textPosAngle,t.transform.textPosAngle),l\u003dn.interpolate(e.rpx1,t.rpx1),u\u003dn.interpolate(e.x0,t.x0),h\u003dn.interpolate(e.x1,t.x1),p\u003dn.interpolate(e.transform.scale,i.scale),d\u003dn.interpolate(e.transform.rotate,i.rotate),m\u003d0\u003d\u003d\u003di.rCenter?3:0\u003d\u003d\u003de.transform.rCenter?1/3:1,g\u003dn.interpolate(e.transform.rCenter,i.rCenter);return function(t){var e\u003dl(t),r\u003du(t),n\u003dh(t),a\u003dfunction(t){return g(Math.pow(t,m))}(t),o\u003d{pxmid:q(e,(r+n)/2),rpx1:e,transform:{textPosAngle:s(t),rCenter:a,x:i.x,y:i.y}};return c(T.type,i,f),{transform:{targetX:G(o),targetY:Y(o),scale:p(t),rotate:d(t),rCenter:a}}}}(t);return function(t){return A(e(t),k)}})):b.attr(\"transform\",A(i,k))}))}function _(t){return e\u003dt.rpx1,r\u003dt.transform.textPosAngle,[e*Math.sin(r),-e*Math.cos(r)];var e,r}r.plot\u003dfunction(t,e,r,i){var a,o,s\u003dt._fullLayout,l\u003ds._sunburstlayer,c\u003d!r,f\u003d!s.uniformtext.mode\u0026\u0026x.hasTransition(r);(u(\"sunburst\",s),(a\u003dl.selectAll(\"g.trace.sunburst\").data(e,(function(t){return t[0].trace.uid}))).enter().append(\"g\").classed(\"trace\",!0).classed(\"sunburst\",!0).attr(\"stroke-linejoin\",\"round\"),a.order(),f)?(i\u0026\u0026(o\u003di()),n.transition().duration(r.duration).ease(r.easing).each(\"end\",(function(){o\u0026\u0026o()})).each(\"interrupt\",(function(){o\u0026\u0026o()})).each((function(){l.selectAll(\"g.trace\").each((function(e){b(t,e,this,r)}))}))):(a.each((function(e){b(t,e,this,r)})),s.uniformtext.mode\u0026\u0026g(t,s._sunburstlayer.selectAll(\".trace\"),\"sunburst\"));c\u0026\u0026a.exit().remove()},r.formatSliceLabel\u003dfunction(t,e,r,n,i){var a\u003dr.texttemplate,s\u003dr.textinfo;if(!(a||s\u0026\u0026\"none\"!\u003d\u003ds))return\"\";var l\u003di.separators,c\u003dn[0],u\u003dt.data.data,f\u003dc.hierarchy,h\u003dx.isHierarchyRoot(t),p\u003dx.getParent(f,t),d\u003dx.getValue(t);if(!a){var m,g\u003ds.split(\"+\"),v\u003dfunction(t){return-1!\u003d\u003dg.indexOf(t)},y\u003d[];if(v(\"label\")\u0026\u0026u.label\u0026\u0026y.push(u.label),u.hasOwnProperty(\"v\")\u0026\u0026v(\"value\")\u0026\u0026y.push(x.formatValue(u.v,l)),!h){v(\"current path\")\u0026\u0026y.push(x.getPath(t.data));var b\u003d0;v(\"percent parent\")\u0026\u0026b++,v(\"percent entry\")\u0026\u0026b++,v(\"percent root\")\u0026\u0026b++;var _\u003db\u003e1;if(b){var w,T\u003dfunction(t){m\u003dx.formatPercent(w,l),_\u0026\u0026(m+\u003d\" of \"+t),y.push(m)};v(\"percent parent\")\u0026\u0026!h\u0026\u0026(w\u003dd/x.getValue(p),T(\"parent\")),v(\"percent entry\")\u0026\u0026(w\u003dd/x.getValue(e),T(\"entry\")),v(\"percent root\")\u0026\u0026(w\u003dd/x.getValue(f),T(\"root\"))}}return v(\"text\")\u0026\u0026(m\u003do.castOption(r,u.i,\"text\"),o.isValidTextValue(m)\u0026\u0026y.push(m)),y.join(\"\u003cbr\u003e\")}var k\u003do.castOption(r,u.i,\"texttemplate\");if(!k)return\"\";var M\u003d{};u.label\u0026\u0026(M.label\u003du.label),u.hasOwnProperty(\"v\")\u0026\u0026(M.value\u003du.v,M.valueLabel\u003dx.formatValue(u.v,l)),M.currentPath\u003dx.getPath(t.data),h||(M.percentParent\u003dd/x.getValue(p),M.percentParentLabel\u003dx.formatPercent(M.percentParent,l),M.parent\u003dx.getPtLabel(p)),M.percentEntry\u003dd/x.getValue(e),M.percentEntryLabel\u003dx.formatPercent(M.percentEntry,l),M.entry\u003dx.getPtLabel(e),M.percentRoot\u003dd/x.getValue(f),M.percentRootLabel\u003dx.formatPercent(M.percentRoot,l),M.root\u003dx.getPtLabel(f),u.hasOwnProperty(\"color\")\u0026\u0026(M.color\u003du.color);var A\u003do.castOption(r,u.i,\"text\");return(o.isValidTextValue(A)||\"\"\u003d\u003d\u003dA)\u0026\u0026(M.text\u003dA),M.customdata\u003do.castOption(r,u.i,\"customdata\"),o.texttemplateString(k,M,i._d3locale,M,r._meta||{})}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../bar/style\":951,\"../bar/uniform_text\":953,\"../pie/helpers\":1193,\"../pie/plot\":1197,\"./constants\":1329,\"./fx\":1331,\"./helpers\":1332,\"./style\":1337,\"@plotly/d3\":58,\"d3-hierarchy\":167}],1337:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../lib\"),o\u003dt(\"../bar/uniform_text\").resizeText;function s(t,e,r){var n\u003de.data.data,o\u003d!e.children,s\u003dn.i,l\u003da.castOption(r,s,\"marker.line.color\")||i.defaultLine,c\u003da.castOption(r,s,\"marker.line.width\")||0;t.style(\"stroke-width\",c).call(i.fill,n.color).call(i.stroke,l).style(\"opacity\",o?r.leaf.opacity:null)}e.exports\u003d{style:function(t){var e\u003dt._fullLayout._sunburstlayer.selectAll(\".trace\");o(t,e,\"sunburst\"),e.each((function(t){var e\u003dn.select(this),r\u003dt[0].trace;e.style(\"opacity\",r.opacity),e.selectAll(\"path.surface\").each((function(t){n.select(this).call(s,t,r)}))}))},styleOne:s}},{\"../../components/color\":662,\"../../lib\":799,\"../bar/uniform_text\":953,\"@plotly/d3\":58}],1338:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/color\"),i\u003dt(\"../../components/colorscale/attributes\"),a\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,o\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,s\u003dt(\"../../plots/attributes\"),l\u003dt(\"../../lib/extend\").extendFlat,c\u003dt(\"../../plot_api/edit_types\").overrideAll;function u(t){return{show:{valType:\"boolean\",dflt:!1},start:{valType:\"number\",dflt:null,editType:\"plot\"},end:{valType:\"number\",dflt:null,editType:\"plot\"},size:{valType:\"number\",dflt:null,min:0,editType:\"plot\"},project:{x:{valType:\"boolean\",dflt:!1},y:{valType:\"boolean\",dflt:!1},z:{valType:\"boolean\",dflt:!1}},color:{valType:\"color\",dflt:n.defaultLine},usecolormap:{valType:\"boolean\",dflt:!1},width:{valType:\"number\",min:1,max:16,dflt:2},highlight:{valType:\"boolean\",dflt:!0},highlightcolor:{valType:\"color\",dflt:n.defaultLine},highlightwidth:{valType:\"number\",min:1,max:16,dflt:2}}}var f\u003de.exports\u003dc(l({z:{valType:\"data_array\"},x:{valType:\"data_array\"},y:{valType:\"data_array\"},text:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertext:{valType:\"string\",dflt:\"\",arrayOk:!0},hovertemplate:o(),xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),zhoverformat:a(\"z\"),connectgaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},surfacecolor:{valType:\"data_array\"}},i(\"\",{colorAttr:\"z or surfacecolor\",showScaleDflt:!0,autoColorDflt:!1,editTypeOverride:\"calc\"}),{contours:{x:u(),y:u(),z:u()},hidesurface:{valType:\"boolean\",dflt:!1},lightposition:{x:{valType:\"number\",min:-1e5,max:1e5,dflt:10},y:{valType:\"number\",min:-1e5,max:1e5,dflt:1e4},z:{valType:\"number\",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:\"number\",min:0,max:1,dflt:.8},diffuse:{valType:\"number\",min:0,max:1,dflt:.8},specular:{valType:\"number\",min:0,max:2,dflt:.05},roughness:{valType:\"number\",min:0,max:1,dflt:.5},fresnel:{valType:\"number\",min:0,max:5,dflt:.2}},opacity:{valType:\"number\",min:0,max:1,dflt:1},opacityscale:{valType:\"any\",editType:\"calc\"},_deprecated:{zauto:l({},i.zauto,{}),zmin:l({},i.zmin,{}),zmax:l({},i.zmax,{})},hoverinfo:l({},s.hoverinfo),showlegend:l({},s.showlegend,{dflt:!1})}),\"calc\",\"nested\");f.x.editType\u003df.y.editType\u003df.z.editType\u003d\"calc+clearAxisTypes\",f.transforms\u003dvoid 0},{\"../../components/color\":662,\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922}],1339:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/calc\");e.exports\u003dfunction(t,e){e.surfacecolor?n(t,e,{vals:e.surfacecolor,containerStr:\"\",cLetter:\"c\"}):n(t,e,{vals:e.z,containerStr:\"\",cLetter:\"c\"})}},{\"../../components/colorscale/calc\":670}],1340:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-surface3d\"),i\u003dt(\"ndarray\"),a\u003dt(\"ndarray-linear-interpolate\").d2,o\u003dt(\"../heatmap/interp2d\"),s\u003dt(\"../heatmap/find_empties\"),l\u003dt(\"../../lib\").isArrayOrTypedArray,c\u003dt(\"../../lib/gl_format_color\").parseColorScale,u\u003dt(\"../../lib/str2rgbarray\"),f\u003dt(\"../../components/colorscale\").extractOpts;function h(t,e,r){this.scene\u003dt,this.uid\u003dr,this.surface\u003de,this.data\u003dnull,this.showContour\u003d[!1,!1,!1],this.contourStart\u003d[null,null,null],this.contourEnd\u003d[null,null,null],this.contourSize\u003d[0,0,0],this.minValues\u003d[1/0,1/0,1/0],this.maxValues\u003d[-1/0,-1/0,-1/0],this.dataScaleX\u003d1,this.dataScaleY\u003d1,this.refineData\u003d!0,this.objectOffset\u003d[0,0,0]}var p\u003dh.prototype;p.getXat\u003dfunction(t,e,r,n){var i\u003dl(this.data.x)?l(this.data.x[0])?this.data.x[e][t]:this.data.x[t]:t;return void 0\u003d\u003d\u003dr?i:n.d2l(i,0,r)},p.getYat\u003dfunction(t,e,r,n){var i\u003dl(this.data.y)?l(this.data.y[0])?this.data.y[e][t]:this.data.y[e]:e;return void 0\u003d\u003d\u003dr?i:n.d2l(i,0,r)},p.getZat\u003dfunction(t,e,r,n){var i\u003dthis.data.z[e][t];return null\u003d\u003d\u003di\u0026\u0026this.data.connectgaps\u0026\u0026this.data._interpolatedZ\u0026\u0026(i\u003dthis.data._interpolatedZ[e][t]),void 0\u003d\u003d\u003dr?i:n.d2l(i,0,r)},p.handlePick\u003dfunction(t){if(t.object\u003d\u003d\u003dthis.surface){var e\u003d(t.data.index[0]-1)/this.dataScaleX-1,r\u003d(t.data.index[1]-1)/this.dataScaleY-1,n\u003dMath.max(Math.min(Math.round(e),this.data.z[0].length-1),0),i\u003dMath.max(Math.min(Math.round(r),this.data._ylength-1),0);t.index\u003d[n,i],t.traceCoordinate\u003d[this.getXat(n,i),this.getYat(n,i),this.getZat(n,i)],t.dataCoordinate\u003d[this.getXat(n,i,this.data.xcalendar,this.scene.fullSceneLayout.xaxis),this.getYat(n,i,this.data.ycalendar,this.scene.fullSceneLayout.yaxis),this.getZat(n,i,this.data.zcalendar,this.scene.fullSceneLayout.zaxis)];for(var a\u003d0;a\u003c3;a++){var o\u003dt.dataCoordinate[a];null!\u003do\u0026\u0026(t.dataCoordinate[a]*\u003dthis.scene.dataScale[a])}var s\u003dthis.data.hovertext||this.data.text;return Array.isArray(s)\u0026\u0026s[i]\u0026\u0026void 0!\u003d\u003ds[i][n]?t.textLabel\u003ds[i][n]:t.textLabel\u003ds||\"\",t.data.dataCoordinate\u003dt.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position\u003dt.dataCoordinate,!0}};var d\u003d[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1013,1019,1021,1031,1033,1039,1049,1051,1061,1063,1069,1087,1091,1093,1097,1103,1109,1117,1123,1129,1151,1153,1163,1171,1181,1187,1193,1201,1213,1217,1223,1229,1231,1237,1249,1259,1277,1279,1283,1289,1291,1297,1301,1303,1307,1319,1321,1327,1361,1367,1373,1381,1399,1409,1423,1427,1429,1433,1439,1447,1451,1453,1459,1471,1481,1483,1487,1489,1493,1499,1511,1523,1531,1543,1549,1553,1559,1567,1571,1579,1583,1597,1601,1607,1609,1613,1619,1621,1627,1637,1657,1663,1667,1669,1693,1697,1699,1709,1721,1723,1733,1741,1747,1753,1759,1777,1783,1787,1789,1801,1811,1823,1831,1847,1861,1867,1871,1873,1877,1879,1889,1901,1907,1913,1931,1933,1949,1951,1973,1979,1987,1993,1997,1999,2003,2011,2017,2027,2029,2039,2053,2063,2069,2081,2083,2087,2089,2099,2111,2113,2129,2131,2137,2141,2143,2153,2161,2179,2203,2207,2213,2221,2237,2239,2243,2251,2267,2269,2273,2281,2287,2293,2297,2309,2311,2333,2339,2341,2347,2351,2357,2371,2377,2381,2383,2389,2393,2399,2411,2417,2423,2437,2441,2447,2459,2467,2473,2477,2503,2521,2531,2539,2543,2549,2551,2557,2579,2591,2593,2609,2617,2621,2633,2647,2657,2659,2663,2671,2677,2683,2687,2689,2693,2699,2707,2711,2713,2719,2729,2731,2741,2749,2753,2767,2777,2789,2791,2797,2801,2803,2819,2833,2837,2843,2851,2857,2861,2879,2887,2897,2903,2909,2917,2927,2939,2953,2957,2963,2969,2971,2999];function m(t,e){if(t\u003ce)return 0;for(var r\u003d0;0\u003d\u003d\u003dMath.floor(t%e);)t/\u003de,r++;return r}function g(t){for(var e\u003d[],r\u003d0;r\u003cd.length;r++){var n\u003dd[r];e.push(m(t,n))}return e}function v(t){for(var e\u003dg(t),r\u003dt,n\u003d0;n\u003cd.length;n++)if(e[n]\u003e0){r\u003dd[n];break}return r}function y(t,e){if(!(t\u003c1||e\u003c1)){for(var r\u003dg(t),n\u003dg(e),i\u003d1,a\u003d0;a\u003cd.length;a++)i*\u003dMath.pow(d[a],Math.max(r[a],n[a]));return i}}p.calcXnums\u003dfunction(t){var e,r\u003d[];for(e\u003d1;e\u003ct;e++){var n\u003dthis.getXat(e-1,0),i\u003dthis.getXat(e,0);r[e-1]\u003di!\u003d\u003dn\u0026\u0026null!\u003dn\u0026\u0026null!\u003di?Math.abs(i-n):0}var a\u003d0;for(e\u003d1;e\u003ct;e++)a+\u003dr[e-1];for(e\u003d1;e\u003ct;e++)0\u003d\u003d\u003dr[e-1]?r[e-1]\u003d1:r[e-1]\u003dMath.round(a/r[e-1]);return r},p.calcYnums\u003dfunction(t){var e,r\u003d[];for(e\u003d1;e\u003ct;e++){var n\u003dthis.getYat(0,e-1),i\u003dthis.getYat(0,e);r[e-1]\u003di!\u003d\u003dn\u0026\u0026null!\u003dn\u0026\u0026null!\u003di?Math.abs(i-n):0}var a\u003d0;for(e\u003d1;e\u003ct;e++)a+\u003dr[e-1];for(e\u003d1;e\u003ct;e++)0\u003d\u003d\u003dr[e-1]?r[e-1]\u003d1:r[e-1]\u003dMath.round(a/r[e-1]);return r};var x\u003d[1,2,4,6,12,24,36,48,60,120,180,240,360,720,840,1260],b\u003dx[9],_\u003dx[13];function w(t,e,r){var n\u003dr[8]+r[2]*e[0]+r[5]*e[1];return t[0]\u003d(r[6]+r[0]*e[0]+r[3]*e[1])/n,t[1]\u003d(r[7]+r[1]*e[0]+r[4]*e[1])/n,t}function T(t,e,r){return function(t,e,r,n){for(var i\u003d[0,0],o\u003dt.shape[0],s\u003dt.shape[1],l\u003d0;l\u003co;l++)for(var c\u003d0;c\u003cs;c++)r(i,[l,c],n),t.set(l,c,a(e,i[0],i[1]))}(t,e,w,r),t}function k(t,e){for(var r\u003d!1,n\u003d0;n\u003ct.length;n++)if(e\u003d\u003d\u003dt[n]){r\u003d!0;break}!1\u003d\u003d\u003dr\u0026\u0026t.push(e)}p.estimateScale\u003dfunction(t,e){for(var r\u003d1+function(t){if(0!\u003d\u003dt.length){for(var e\u003d1,r\u003d0;r\u003ct.length;r++)e\u003dy(e,t[r]);return e}}(0\u003d\u003d\u003de?this.calcXnums(t):this.calcYnums(t));r\u003cb;)r*\u003d2;for(;r\u003e_;)r--,r/\u003dv(r),++r\u003cb\u0026\u0026(r\u003d_);var n\u003dMath.round(r/t);return n\u003e1?n:1},p.refineCoords\u003dfunction(t){for(var e\u003dthis.dataScaleX,r\u003dthis.dataScaleY,n\u003dt[0].shape[0],a\u003dt[0].shape[1],o\u003d0|Math.floor(t[0].shape[0]*e+1),s\u003d0|Math.floor(t[0].shape[1]*r+1),l\u003d1+n+1,c\u003d1+a+1,u\u003di(new Float32Array(l*c),[l,c]),f\u003d[1/e,0,0,0,1/r,0,0,0,1],h\u003d0;h\u003ct.length;++h){this.surface.padField(u,t[h]);var p\u003di(new Float32Array(o*s),[o,s]);T(p,u,f),t[h]\u003dp}},p.setContourLevels\u003dfunction(){var t,e,r,n\u003d[[],[],[]],i\u003d[!1,!1,!1],a\u003d!1;for(t\u003d0;t\u003c3;++t)if(this.showContour[t]\u0026\u0026(a\u003d!0,this.contourSize[t]\u003e0\u0026\u0026null!\u003d\u003dthis.contourStart[t]\u0026\u0026null!\u003d\u003dthis.contourEnd[t]\u0026\u0026this.contourEnd[t]\u003ethis.contourStart[t]))for(i[t]\u003d!0,e\u003dthis.contourStart[t];e\u003cthis.contourEnd[t];e+\u003dthis.contourSize[t])r\u003de*this.scene.dataScale[t],k(n[t],r);if(a){var o\u003d[[],[],[]];for(t\u003d0;t\u003c3;++t)this.showContour[t]\u0026\u0026(o[t]\u003di[t]?n[t]:this.scene.contourLevels[t]);this.surface.update({levels:o})}},p.update\u003dfunction(t){var e,r,n,a,l\u003dthis.scene,h\u003dl.fullSceneLayout,p\u003dthis.surface,d\u003dc(t),m\u003dl.dataScale,g\u003dt.z[0].length,v\u003dt._ylength,y\u003dl.contourLevels;this.data\u003dt;var x\u003d[];for(e\u003d0;e\u003c3;e++)for(x[e]\u003d[],r\u003d0;r\u003cg;r++)x[e][r]\u003d[];for(r\u003d0;r\u003cg;r++)for(n\u003d0;n\u003cv;n++)x[0][r][n]\u003dthis.getXat(r,n,t.xcalendar,h.xaxis),x[1][r][n]\u003dthis.getYat(r,n,t.ycalendar,h.yaxis),x[2][r][n]\u003dthis.getZat(r,n,t.zcalendar,h.zaxis);if(t.connectgaps)for(t._emptypoints\u003ds(x[2]),o(x[2],t._emptypoints),t._interpolatedZ\u003d[],r\u003d0;r\u003cg;r++)for(t._interpolatedZ[r]\u003d[],n\u003d0;n\u003cv;n++)t._interpolatedZ[r][n]\u003dx[2][r][n];for(e\u003d0;e\u003c3;e++)for(r\u003d0;r\u003cg;r++)for(n\u003d0;n\u003cv;n++)null\u003d\u003d(a\u003dx[e][r][n])?x[e][r][n]\u003dNaN:a\u003dx[e][r][n]*\u003dm[e];for(e\u003d0;e\u003c3;e++)for(r\u003d0;r\u003cg;r++)for(n\u003d0;n\u003cv;n++)null!\u003d(a\u003dx[e][r][n])\u0026\u0026(this.minValues[e]\u003ea\u0026\u0026(this.minValues[e]\u003da),this.maxValues[e]\u003ca\u0026\u0026(this.maxValues[e]\u003da));for(e\u003d0;e\u003c3;e++)this.objectOffset[e]\u003d.5*(this.minValues[e]+this.maxValues[e]);for(e\u003d0;e\u003c3;e++)for(r\u003d0;r\u003cg;r++)for(n\u003d0;n\u003cv;n++)null!\u003d(a\u003dx[e][r][n])\u0026\u0026(x[e][r][n]-\u003dthis.objectOffset[e]);var b\u003d[i(new Float32Array(g*v),[g,v]),i(new Float32Array(g*v),[g,v]),i(new Float32Array(g*v),[g,v])];for(e\u003d0;e\u003c3;e++)for(r\u003d0;r\u003cg;r++)for(n\u003d0;n\u003cv;n++)b[e].set(r,n,x[e][r][n]);x\u003d[];var w\u003d{colormap:d,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacityscale:t.opacityscale,opacity:t.opacity},T\u003df(t);if(w.intensityBounds\u003d[T.min,T.max],t.surfacecolor){var k\u003di(new Float32Array(g*v),[g,v]);for(r\u003d0;r\u003cg;r++)for(n\u003d0;n\u003cv;n++)k.set(r,n,t.surfacecolor[n][r]);b.push(k)}else w.intensityBounds[0]*\u003dm[2],w.intensityBounds[1]*\u003dm[2];(_\u003cb[0].shape[0]||_\u003cb[0].shape[1])\u0026\u0026(this.refineData\u003d!1),!0\u003d\u003d\u003dthis.refineData\u0026\u0026(this.dataScaleX\u003dthis.estimateScale(b[0].shape[0],0),this.dataScaleY\u003dthis.estimateScale(b[0].shape[1],1),1\u003d\u003d\u003dthis.dataScaleX\u0026\u00261\u003d\u003d\u003dthis.dataScaleY||this.refineCoords(b)),t.surfacecolor\u0026\u0026(w.intensity\u003db.pop());var M\u003d[!0,!0,!0],A\u003d[\"x\",\"y\",\"z\"];for(e\u003d0;e\u003c3;++e){var S\u003dt.contours[A[e]];M[e]\u003dS.highlight,w.showContour[e]\u003dS.show||S.highlight,w.showContour[e]\u0026\u0026(w.contourProject[e]\u003d[S.project.x,S.project.y,S.project.z],S.show?(this.showContour[e]\u003d!0,w.levels[e]\u003dy[e],p.highlightColor[e]\u003dw.contourColor[e]\u003du(S.color),S.usecolormap?p.highlightTint[e]\u003dw.contourTint[e]\u003d0:p.highlightTint[e]\u003dw.contourTint[e]\u003d1,w.contourWidth[e]\u003dS.width,this.contourStart[e]\u003dS.start,this.contourEnd[e]\u003dS.end,this.contourSize[e]\u003dS.size):(this.showContour[e]\u003d!1,this.contourStart[e]\u003dnull,this.contourEnd[e]\u003dnull,this.contourSize[e]\u003d0),S.highlight\u0026\u0026(w.dynamicColor[e]\u003du(S.highlightcolor),w.dynamicWidth[e]\u003dS.highlightwidth))}(function(t){var e\u003dt[0].rgb,r\u003dt[t.length-1].rgb;return e[0]\u003d\u003d\u003dr[0]\u0026\u0026e[1]\u003d\u003d\u003dr[1]\u0026\u0026e[2]\u003d\u003d\u003dr[2]\u0026\u0026e[3]\u003d\u003d\u003dr[3]})(d)\u0026\u0026(w.vertexColor\u003d!0),w.objectOffset\u003dthis.objectOffset,w.coords\u003db,p.update(w),p.visible\u003dt.visible,p.enableDynamic\u003dM,p.enableHighlight\u003dM,p.snapToData\u003d!0,\"lighting\"in t\u0026\u0026(p.ambientLight\u003dt.lighting.ambient,p.diffuseLight\u003dt.lighting.diffuse,p.specularLight\u003dt.lighting.specular,p.roughness\u003dt.lighting.roughness,p.fresnel\u003dt.lighting.fresnel),\"lightposition\"in t\u0026\u0026(p.lightPosition\u003d[t.lightposition.x,t.lightposition.y,t.lightposition.z])},p.dispose\u003dfunction(){this.scene.glplot.remove(this.surface),this.surface.dispose()},e.exports\u003dfunction(t,e){var r\u003dt.glplot.gl,i\u003dn({gl:r}),a\u003dnew h(t,i,e.uid);return i._trace\u003da,a.update(e),t.glplot.add(i),a}},{\"../../components/colorscale\":674,\"../../lib\":799,\"../../lib/gl_format_color\":795,\"../../lib/str2rgbarray\":823,\"../heatmap/find_empties\":1087,\"../heatmap/interp2d\":1090,\"gl-surface3d\":350,ndarray:479,\"ndarray-linear-interpolate\":473}],1341:[function(t,e,r){\"use strict\";var n\u003dt(\"../../registry\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/colorscale/defaults\"),o\u003dt(\"./attributes\");function s(t,e,r,n){var i\u003dn(\"opacityscale\");\"max\"\u003d\u003d\u003di?e.opacityscale\u003d[[0,.1],[1,1]]:\"min\"\u003d\u003d\u003di?e.opacityscale\u003d[[0,1],[1,.1]]:\"extremes\"\u003d\u003d\u003di?e.opacityscale\u003dfunction(t,e){for(var r\u003d[],n\u003d0;n\u003c32;n++){var i\u003dn/31,a\u003de+(1-e)*(1-Math.pow(Math.sin(t*i*Math.PI),2));r.push([i,Math.max(0,Math.min(1,a))])}return r}(1,.1):function(t){var e\u003d0;if(!Array.isArray(t)||t.length\u003c2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!\u003d+t[0][0]||1!\u003d+t[t.length-1][0])return!1;for(var r\u003d0;r\u003ct.length;r++){var n\u003dt[r];if(2!\u003d\u003dn.length||+n[0]\u003ce)return!1;e\u003d+n[0]}return!0}(i)||(e.opacityscale\u003dvoid 0)}function l(t,e,r){e in t\u0026\u0026!(r in t)\u0026\u0026(t[r]\u003dt[e])}e.exports\u003d{supplyDefaults:function(t,e,r,c){var u,f;function h(r,n){return i.coerce(t,e,o,r,n)}var p\u003dh(\"x\"),d\u003dh(\"y\"),m\u003dh(\"z\");if(!m||!m.length||p\u0026\u0026p.length\u003c1||d\u0026\u0026d.length\u003c1)e.visible\u003d!1;else{e._xlength\u003dArray.isArray(p)\u0026\u0026i.isArrayOrTypedArray(p[0])?m.length:m[0].length,e._ylength\u003dm.length,n.getComponentMethod(\"calendars\",\"handleTraceDefaults\")(t,e,[\"x\",\"y\",\"z\"],c),h(\"text\"),h(\"hovertext\"),h(\"hovertemplate\"),h(\"xhoverformat\"),h(\"yhoverformat\"),h(\"zhoverformat\"),[\"lighting.ambient\",\"lighting.diffuse\",\"lighting.specular\",\"lighting.roughness\",\"lighting.fresnel\",\"lightposition.x\",\"lightposition.y\",\"lightposition.z\",\"hidesurface\",\"connectgaps\",\"opacity\"].forEach((function(t){h(t)}));var g\u003dh(\"surfacecolor\"),v\u003d[\"x\",\"y\",\"z\"];for(u\u003d0;u\u003c3;++u){var y\u003d\"contours.\"+v[u],x\u003dh(y+\".show\"),b\u003dh(y+\".highlight\");if(x||b)for(f\u003d0;f\u003c3;++f)h(y+\".project.\"+v[f]);x\u0026\u0026(h(y+\".color\"),h(y+\".width\"),h(y+\".usecolormap\")),b\u0026\u0026(h(y+\".highlightcolor\"),h(y+\".highlightwidth\")),h(y+\".start\"),h(y+\".end\"),h(y+\".size\")}g||(l(t,\"zmin\",\"cmin\"),l(t,\"zmax\",\"cmax\"),l(t,\"zauto\",\"cauto\")),a(t,e,c,h,{prefix:\"\",cLetter:\"c\"}),s(t,e,c,h),e._length\u003dnull}},opacityscaleDefaults:s}},{\"../../components/colorscale/defaults\":672,\"../../lib\":799,\"../../registry\":927,\"./attributes\":1338}],1342:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,colorbar:{min:\"cmin\",max:\"cmax\"},calc:t(\"./calc\"),plot:t(\"./convert\"),moduleType:\"trace\",name:\"surface\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"2dMap\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":892,\"./attributes\":1338,\"./calc\":1339,\"./convert\":1340,\"./defaults\":1341}],1343:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/annotations/attributes\"),i\u003dt(\"../../lib/extend\").extendFlat,a\u003dt(\"../../plot_api/edit_types\").overrideAll,o\u003dt(\"../../plots/font_attributes\"),s\u003dt(\"../../plots/domain\").attributes,l\u003dt(\"../../plots/cartesian/axis_format_attributes\").descriptionOnlyNumbers;(e.exports\u003da({domain:s({name:\"table\",trace:!0}),columnwidth:{valType:\"number\",arrayOk:!0,dflt:null},columnorder:{valType:\"data_array\"},header:{values:{valType:\"data_array\",dflt:[]},format:{valType:\"data_array\",dflt:[],description:l(\"cell value\")},prefix:{valType:\"string\",arrayOk:!0,dflt:null},suffix:{valType:\"string\",arrayOk:!0,dflt:null},height:{valType:\"number\",dflt:28},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\"number\",arrayOk:!0,dflt:1},color:{valType:\"color\",arrayOk:!0,dflt:\"grey\"}},fill:{color:{valType:\"color\",arrayOk:!0,dflt:\"white\"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:\"data_array\",dflt:[]},format:{valType:\"data_array\",dflt:[],description:l(\"cell value\")},prefix:{valType:\"string\",arrayOk:!0,dflt:null},suffix:{valType:\"string\",arrayOk:!0,dflt:null},height:{valType:\"number\",dflt:20},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:\"number\",arrayOk:!0,dflt:1},color:{valType:\"color\",arrayOk:!0,dflt:\"grey\"}},fill:{color:{valType:\"color\",arrayOk:!0,dflt:\"white\"}},font:i({},o({arrayOk:!0}))}},\"calc\",\"from-root\")).transforms\u003dvoid 0},{\"../../components/annotations/attributes\":645,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/domain\":877,\"../../plots/font_attributes\":878}],1344:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/get_data\").getModuleCalcData,i\u003dt(\"./plot\");r.name\u003d\"table\",r.plot\u003dfunction(t){var e\u003dn(t.calcdata,\"table\")[0];e.length\u0026\u0026i(t,e)},r.clean\u003dfunction(t,e,r,n){var i\u003dn._has\u0026\u0026n._has(\"table\"),a\u003de._has\u0026\u0026e._has(\"table\");i\u0026\u0026!a\u0026\u0026n._paperdiv.selectAll(\".table\").remove()}},{\"../../plots/get_data\":887,\"./plot\":1351}],1345:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/gup\").wrap;e.exports\u003dfunction(){return n({})}},{\"../../lib/gup\":796}],1346:[function(t,e,r){\"use strict\";e.exports\u003d{cellPad:8,columnExtentOffset:10,columnTitleOffset:28,emptyHeaderHeight:16,latexCheck:/^\\$.*\\$$/,goldenRatio:1.618,lineBreaker:\"\u003cbr\u003e\",maxDimensionCount:60,overdrag:45,releaseTransitionDuration:120,releaseTransitionEase:\"cubic-out\",scrollbarCaptureWidth:18,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,scrollbarOffset:5,scrollbarWidth:8,transitionDuration:100,transitionEase:\"cubic-out\",uplift:5,wrapSpacer:\" \",wrapSplitCharacter:\" \",cn:{table:\"table\",tableControlView:\"table-control-view\",scrollBackground:\"scroll-background\",yColumn:\"y-column\",columnBlock:\"column-block\",scrollAreaClip:\"scroll-area-clip\",scrollAreaClipRect:\"scroll-area-clip-rect\",columnBoundary:\"column-boundary\",columnBoundaryClippath:\"column-boundary-clippath\",columnBoundaryRect:\"column-boundary-rect\",columnCells:\"column-cells\",columnCell:\"column-cell\",cellRect:\"cell-rect\",cellText:\"cell-text\",cellTextHolder:\"cell-text-holder\",scrollbarKit:\"scrollbar-kit\",scrollbar:\"scrollbar\",scrollbarSlider:\"scrollbar-slider\",scrollbarGlyph:\"scrollbar-glyph\",scrollbarCaptureZone:\"scrollbar-capture-zone\"}}},{}],1347:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\"),i\u003dt(\"../../lib/extend\").extendFlat,a\u003dt(\"fast-isnumeric\");function o(t){if(Array.isArray(t)){for(var e\u003d0,r\u003d0;r\u003ct.length;r++)e\u003dMath.max(e,o(t[r]));return e}return t}function s(t,e){return t+e}function l(t){var e,r\u003dt.slice(),n\u003d1/0,i\u003d0;for(e\u003d0;e\u003cr.length;e++)Array.isArray(r[e])||(r[e]\u003d[r[e]]),n\u003dMath.min(n,r[e].length),i\u003dMath.max(i,r[e].length);if(n!\u003d\u003di)for(e\u003d0;e\u003cr.length;e++){var a\u003di-r[e].length;a\u0026\u0026(r[e]\u003dr[e].concat(c(a)))}return r}function c(t){for(var e\u003dnew Array(t),r\u003d0;r\u003ct;r++)e[r]\u003d\"\";return e}function u(t){return t.calcdata.columns.reduce((function(e,r){return r.xIndex\u003ct.xIndex?e+r.columnWidth:e}),0)}function f(t,e){return Object.keys(t).map((function(r){return i({},t[r],{auxiliaryBlocks:e})}))}function h(t,e){for(var r,n\u003d{},i\u003d0,a\u003d0,o\u003d{firstRowIndex:null,lastRowIndex:null,rows:[]},s\u003d0,l\u003d0,c\u003d0;c\u003ct.length;c++)r\u003dt[c],o.rows.push({rowIndex:c,rowHeight:r}),((a+\u003dr)\u003e\u003de||c\u003d\u003d\u003dt.length-1)\u0026\u0026(n[i]\u003do,o.key\u003dl++,o.firstRowIndex\u003ds,o.lastRowIndex\u003dc,o\u003d{firstRowIndex:null,lastRowIndex:null,rows:[]},i+\u003da,s\u003dc+1,a\u003d0);return n}e.exports\u003dfunction(t,e){var r\u003dl(e.cells.values),p\u003dfunction(t){return t.slice(e.header.values.length,t.length)},d\u003dl(e.header.values);d.length\u0026\u0026!d[0].length\u0026\u0026(d[0]\u003d[\"\"],d\u003dl(d));var m\u003dd.concat(p(r).map((function(){return c((d[0]||[\"\"]).length)}))),g\u003de.domain,v\u003dMath.floor(t._fullLayout._size.w*(g.x[1]-g.x[0])),y\u003dMath.floor(t._fullLayout._size.h*(g.y[1]-g.y[0])),x\u003de.header.values.length?m[0].map((function(){return e.header.height})):[n.emptyHeaderHeight],b\u003dr.length?r[0].map((function(){return e.cells.height})):[],_\u003dx.reduce(s,0),w\u003dh(b,y-_+n.uplift),T\u003df(h(x,_),[]),k\u003df(w,T),M\u003d{},A\u003de._fullInput.columnorder.concat(p(r.map((function(t,e){return e})))),S\u003dm.map((function(t,r){var n\u003dArray.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:e.columnwidth;return a(n)?Number(n):1})),E\u003dS.reduce(s,0);S\u003dS.map((function(t){return t/E*v}));var L\u003dMath.max(o(e.header.line.width),o(e.cells.line.width)),C\u003d{key:e.uid+t._context.staticPlot,translateX:g.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-g.y[1]),size:t._fullLayout._size,width:v,maxLineWidth:L,height:y,columnOrder:A,groupHeight:y,rowBlocks:k,headerRowBlocks:T,scrollY:0,cells:i({},e.cells,{values:r}),headerCells:i({},e.header,{values:m}),gdColumns:m.map((function(t){return t[0]})),gdColumnsOriginalOrder:m.map((function(t){return t[0]})),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:m.map((function(t,e){var r\u003dM[t];return M[t]\u003d(r||0)+1,{key:t+\"__\"+M[t],label:t,specIndex:e,xIndex:A[e],xScale:u,x:void 0,calcdata:void 0,columnWidth:S[e]}}))};return C.columns.forEach((function(t){t.calcdata\u003dC,t.x\u003du(t)})),C}},{\"../../lib/extend\":789,\"./constants\":1346,\"fast-isnumeric\":245}],1348:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib/extend\").extendFlat;r.splitToPanels\u003dfunction(t){var e\u003d[0,0],r\u003dn({},t,{key:\"header\",type:\"header\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:n({},t.calcdata,{cells:t.calcdata.headerCells})});return[n({},t,{key:\"cells1\",type:\"cells\",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),n({},t,{key:\"cells2\",type:\"cells\",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},r.splitToCells\u003dfunction(t){var e\u003dfunction(t){var e\u003dt.rowBlocks[t.page],r\u003de?e.rows[0].rowIndex:0,n\u003de?r+e.rows.length:0;return[r,n]}(t);return(t.values||[]).slice(e[0],e[1]).map((function(r,n){return{keyWithinBlock:n+(\"string\"\u003d\u003dtypeof r\u0026\u0026r.match(/[\u003c$\u0026\u003e ]/)?\"_keybuster_\"+Math.random():\"\"),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}}))}},{\"../../lib/extend\":789}],1349:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../plots/domain\").defaults;e.exports\u003dfunction(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(e,o,s),s(\"columnwidth\"),s(\"header.values\"),s(\"header.format\"),s(\"header.align\"),s(\"header.prefix\"),s(\"header.suffix\"),s(\"header.height\"),s(\"header.line.width\"),s(\"header.line.color\"),s(\"header.fill.color\"),n.coerceFont(s,\"header.font\",n.extendFlat({},o.font)),function(t,e){for(var r\u003dt.columnorder||[],n\u003dt.header.values.length,i\u003dr.slice(0,n),a\u003di.slice().sort((function(t,e){return t-e})),o\u003di.map((function(t){return a.indexOf(t)})),s\u003do.length;s\u003cn;s++)o.push(s);e(\"columnorder\",o)}(e,s),s(\"cells.values\"),s(\"cells.format\"),s(\"cells.align\"),s(\"cells.prefix\"),s(\"cells.suffix\"),s(\"cells.height\"),s(\"cells.line.width\"),s(\"cells.line.color\"),s(\"cells.fill.color\"),n.coerceFont(s,\"cells.font\",n.extendFlat({},o.font)),e._length\u003dnull}},{\"../../lib\":799,\"../../plots/domain\":877,\"./attributes\":1343}],1350:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"./calc\"),plot:t(\"./plot\"),moduleType:\"trace\",name:\"table\",basePlotModule:t(\"./base_plot\"),categories:[\"noOpacity\"],meta:{}}},{\"./attributes\":1343,\"./base_plot\":1344,\"./calc\":1345,\"./defaults\":1349,\"./plot\":1351}],1351:[function(t,e,r){\"use strict\";var n\u003dt(\"./constants\"),i\u003dt(\"@plotly/d3\"),a\u003dt(\"../../lib/gup\"),o\u003dt(\"../../components/drawing\"),s\u003dt(\"../../lib/svg_text_utils\"),l\u003dt(\"../../lib\").raiseToTop,c\u003dt(\"../../lib\").strTranslate,u\u003dt(\"../../lib\").cancelTransition,f\u003dt(\"./data_preparation_helper\"),h\u003dt(\"./data_split_helpers\"),p\u003dt(\"../../components/color\");function d(t){return Math.ceil(t.calcdata.maxLineWidth/2)}function m(t,e){return\"clip\"+t._fullLayout._uid+\"_scrollAreaBottomClip_\"+e.key}function g(t,e){return\"clip\"+t._fullLayout._uid+\"_columnBoundaryClippath_\"+e.calcdata.key+\"_\"+e.specIndex}function v(t){return[].concat.apply([],t.map((function(t){return t}))).map((function(t){return t.__data__}))}function y(t,e,r){var o\u003dt.selectAll(\".\"+n.cn.scrollbarKit).data(a.repeat,a.keyFun);o.enter().append(\"g\").classed(n.cn.scrollbarKit,!0).style(\"shape-rendering\",\"geometricPrecision\"),o.each((function(t){var e\u003dt.scrollbarState;e.totalHeight\u003dfunction(t){var e\u003dt.rowBlocks;return z(e,e.length-1)+(e.length?D(e[e.length-1],1/0):1)}(t),e.scrollableAreaHeight\u003dt.groupHeight-A(t),e.currentlyVisibleHeight\u003dMath.min(e.totalHeight,e.scrollableAreaHeight),e.ratio\u003de.currentlyVisibleHeight/e.totalHeight,e.barLength\u003dMath.max(e.ratio*e.currentlyVisibleHeight,n.goldenRatio*n.scrollbarWidth),e.barWiggleRoom\u003de.currentlyVisibleHeight-e.barLength,e.wiggleRoom\u003dMath.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY\u003d0\u003d\u003d\u003de.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY\u003de.topY+e.barLength,e.dragMultiplier\u003de.wiggleRoom/e.barWiggleRoom})).attr(\"transform\",(function(t){var e\u003dt.width+n.scrollbarWidth/2+n.scrollbarOffset;return c(e,A(t))}));var s\u003do.selectAll(\".\"+n.cn.scrollbar).data(a.repeat,a.keyFun);s.enter().append(\"g\").classed(n.cn.scrollbar,!0);var l\u003ds.selectAll(\".\"+n.cn.scrollbarSlider).data(a.repeat,a.keyFun);l.enter().append(\"g\").classed(n.cn.scrollbarSlider,!0),l.attr(\"transform\",(function(t){return c(0,t.scrollbarState.topY||0)}));var u\u003dl.selectAll(\".\"+n.cn.scrollbarGlyph).data(a.repeat,a.keyFun);u.enter().append(\"line\").classed(n.cn.scrollbarGlyph,!0).attr(\"stroke\",\"black\").attr(\"stroke-width\",n.scrollbarWidth).attr(\"stroke-linecap\",\"round\").attr(\"y1\",n.scrollbarWidth/2),u.attr(\"y2\",(function(t){return t.scrollbarState.barLength-n.scrollbarWidth/2})).attr(\"stroke-opacity\",(function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4})),u.transition().delay(0).duration(0),u.transition().delay(n.scrollbarHideDelay).duration(n.scrollbarHideDuration).attr(\"stroke-opacity\",0);var f\u003ds.selectAll(\".\"+n.cn.scrollbarCaptureZone).data(a.repeat,a.keyFun);f.enter().append(\"line\").classed(n.cn.scrollbarCaptureZone,!0).attr(\"stroke\",\"white\").attr(\"stroke-opacity\",.01).attr(\"stroke-width\",n.scrollbarCaptureWidth).attr(\"stroke-linecap\",\"butt\").attr(\"y1\",0).on(\"mousedown\",(function(r){var n\u003di.event.y,a\u003dthis.getBoundingClientRect(),o\u003dr.scrollbarState,s\u003dn-a.top,l\u003di.scale.linear().domain([0,o.scrollableAreaHeight]).range([0,o.totalHeight]).clamp(!0);o.topY\u003c\u003ds\u0026\u0026s\u003c\u003do.bottomY||E(e,t,null,l(s-o.barLength/2))(r)})).call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress\u003d!0,t})).on(\"drag\",E(e,t)).on(\"dragend\",(function(){}))),f.attr(\"y2\",(function(t){return t.scrollbarState.scrollableAreaHeight})),e._context.staticPlot\u0026\u0026(u.remove(),f.remove())}function x(t,e,r,s){var l\u003dfunction(t){var e\u003dt.selectAll(\".\"+n.cn.columnCell).data(h.splitToCells,(function(t){return t.keyWithinBlock}));return e.enter().append(\"g\").classed(n.cn.columnCell,!0),e.exit().remove(),e}(function(t){var e\u003dt.selectAll(\".\"+n.cn.columnCells).data(a.repeat,a.keyFun);return e.enter().append(\"g\").classed(n.cn.columnCells,!0),e.exit().remove(),e}(r));!function(t){t.each((function(t,e){var r\u003dt.calcdata.cells.font,n\u003dt.column.specIndex,i\u003d{size:w(r.size,n,e),color:w(r.color,n,e),family:w(r.family,n,e)};t.rowNumber\u003dt.key,t.align\u003dw(t.calcdata.cells.align,n,e),t.cellBorderWidth\u003dw(t.calcdata.cells.line.width,n,e),t.font\u003di}))}(l),function(t){t.attr(\"width\",(function(t){return t.column.columnWidth})).attr(\"stroke-width\",(function(t){return t.cellBorderWidth})).each((function(t){var e\u003di.select(this);p.stroke(e,w(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),p.fill(e,w(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))}))}(function(t){var e\u003dt.selectAll(\".\"+n.cn.cellRect).data(a.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"rect\").classed(n.cn.cellRect,!0),e}(l));var c\u003dfunction(t){var e\u003dt.selectAll(\".\"+n.cn.cellText).data(a.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"text\").classed(n.cn.cellText,!0).style(\"cursor\",(function(){return\"auto\"})).on(\"mousedown\",(function(){i.event.stopPropagation()})),e}(function(t){var e\u003dt.selectAll(\".\"+n.cn.cellTextHolder).data(a.repeat,(function(t){return t.keyWithinBlock}));return e.enter().append(\"g\").classed(n.cn.cellTextHolder,!0).style(\"shape-rendering\",\"geometricPrecision\"),e}(l));!function(t){t.each((function(t){o.font(i.select(this),t.font)}))}(c),b(c,e,s,t),O(l)}function b(t,e,r,a){t.text((function(t){var e\u003dt.column.specIndex,r\u003dt.rowNumber,a\u003dt.value,o\u003d\"string\"\u003d\u003dtypeof a,s\u003do\u0026\u0026a.match(/\u003cbr\u003e/i),l\u003d!o||s;t.mayHaveMarkup\u003do\u0026\u0026a.match(/[\u003c\u0026\u003e]/);var c,u\u003d\"string\"\u003d\u003dtypeof(c\u003da)\u0026\u0026c.match(n.latexCheck);t.latex\u003du;var f,h,p\u003du?\"\":w(t.calcdata.cells.prefix,e,r)||\"\",d\u003du?\"\":w(t.calcdata.cells.suffix,e,r)||\"\",m\u003du?null:w(t.calcdata.cells.format,e,r)||null,g\u003dp+(m?i.format(m)(t.value):t.value)+d;if(t.wrappingNeeded\u003d!t.wrapped\u0026\u0026!l\u0026\u0026!u\u0026\u0026(f\u003d_(g)),t.cellHeightMayIncrease\u003ds||u||t.mayHaveMarkup||(void 0\u003d\u003d\u003df?_(g):f),t.needsConvertToTspans\u003dt.mayHaveMarkup||t.wrappingNeeded||t.latex,t.wrappingNeeded){var v\u003d(\" \"\u003d\u003d\u003dn.wrapSplitCharacter?g.replace(/\u003ca href\u003d/gi,\"\u003ca_href\u003d\"):g).split(n.wrapSplitCharacter),y\u003d\" \"\u003d\u003d\u003dn.wrapSplitCharacter?v.map((function(t){return t.replace(/\u003ca_href\u003d/gi,\"\u003ca href\u003d\")})):v;t.fragments\u003dy.map((function(t){return{text:t,width:null}})),t.fragments.push({fragment:n.wrapSpacer,width:null}),h\u003dy.join(n.lineBreaker)+n.lineBreaker+n.wrapSpacer}else delete t.fragments,h\u003dg;return h})).attr(\"dy\",(function(t){return t.needsConvertToTspans?0:\"0.75em\"})).each((function(t){var o\u003di.select(this),l\u003dt.wrappingNeeded?C:P;t.needsConvertToTspans?s.convertToTspans(o,a,l(r,this,e,a,t)):i.select(this.parentNode).attr(\"transform\",(function(t){return c(I(t),n.cellPad)})).attr(\"text-anchor\",(function(t){return{left:\"start\",center:\"middle\",right:\"end\"}[t.align]}))}))}function _(t){return-1!\u003d\u003dt.indexOf(n.wrapSplitCharacter)}function w(t,e,r){if(Array.isArray(t)){var n\u003dt[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function T(t,e,r){t.transition().ease(n.releaseTransitionEase).duration(n.releaseTransitionDuration).attr(\"transform\",c(e.x,r))}function k(t){return\"cells\"\u003d\u003d\u003dt.type}function M(t){return\"header\"\u003d\u003d\u003dt.type}function A(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce((function(t,e){return t+D(e,1/0)}),0)}function S(t,e,r){var n\u003dv(e)[0];if(void 0!\u003d\u003dn){var i\u003dn.rowBlocks,a\u003dn.calcdata,o\u003dz(i,i.length),s\u003dn.calcdata.groupHeight-A(n),l\u003da.scrollY\u003dMath.max(0,Math.min(o-s,a.scrollY)),u\u003dfunction(t,e,r){for(var n\u003d[],i\u003d0,a\u003d0;a\u003ct.length;a++){for(var o\u003dt[a],s\u003do.rows,l\u003d0,c\u003d0;c\u003cs.length;c++)l+\u003ds[c].rowHeight;o.allRowsHeight\u003dl;e\u003ci+l\u0026\u0026e+r\u003ei\u0026\u0026n.push(a),i+\u003dl}return n}(i,l,s);1\u003d\u003d\u003du.length\u0026\u0026(u[0]\u003d\u003d\u003di.length-1?u.unshift(u[0]-1):u.push(u[0]+1)),u[0]%2\u0026\u0026u.reverse(),e.each((function(t,e){t.page\u003du[e],t.scrollY\u003dl})),e.attr(\"transform\",(function(t){var e\u003dz(t.rowBlocks,t.page)-t.scrollY;return c(0,e)})),t\u0026\u0026(L(t,r,e,u,n.prevPages,n,0),L(t,r,e,u,n.prevPages,n,1),y(r,t))}}function E(t,e,r,a){return function(o){var s\u003do.calcdata?o.calcdata:o,l\u003de.filter((function(t){return s.key\u003d\u003d\u003dt.key})),c\u003dr||s.scrollbarState.dragMultiplier,u\u003ds.scrollY;s.scrollY\u003dvoid 0\u003d\u003d\u003da?s.scrollY+c*i.event.dy:a;var f\u003dl.selectAll(\".\"+n.cn.yColumn).selectAll(\".\"+n.cn.columnBlock).filter(k);return S(t,f,l),s.scrollY\u003d\u003d\u003du}}function L(t,e,r,n,i,a,o){n[o]!\u003d\u003di[o]\u0026\u0026(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]\u003dsetTimeout((function(){var a\u003dr.filter((function(t,e){return e\u003d\u003d\u003do\u0026\u0026n[e]!\u003d\u003di[e]}));x(t,e,a,r),i[o]\u003dn[o]})))}function C(t,e,r,a){return function(){var o\u003di.select(e.parentNode);o.each((function(t){var e\u003dt.fragments;o.selectAll(\"tspan.line\").each((function(t,r){e[r].width\u003dthis.getComputedTextLength()}));var r,i,a\u003de[e.length-1].width,s\u003de.slice(0,-1),l\u003d[],c\u003d0,u\u003dt.column.columnWidth-2*n.cellPad;for(t.value\u003d\"\";s.length;)c+(i\u003d(r\u003ds.shift()).width+a)\u003eu\u0026\u0026(t.value+\u003dl.join(n.wrapSpacer)+n.lineBreaker,l\u003d[],c\u003d0),l.push(r.text),c+\u003di;c\u0026\u0026(t.value+\u003dl.join(n.wrapSpacer)),t.wrapped\u003d!0})),o.selectAll(\"tspan.line\").remove(),b(o.select(\".\"+n.cn.cellText),r,t,a),i.select(e.parentNode.parentNode).call(O)}}function P(t,e,r,a,o){return function(){if(!o.settledY){var s\u003di.select(e.parentNode),l\u003dF(o),u\u003do.key-l.firstRowIndex,f\u003dl.rows[u].rowHeight,h\u003do.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*n.cellPad:f,p\u003dMath.max(h,f);p-l.rows[u].rowHeight\u0026\u0026(l.rows[u].rowHeight\u003dp,t.selectAll(\".\"+n.cn.columnCell).call(O),S(null,t.filter(k),0),y(r,a,!0)),s.attr(\"transform\",(function(){var t\u003dthis.parentNode.getBoundingClientRect(),e\u003di.select(this.parentNode).select(\".\"+n.cn.cellRect).node().getBoundingClientRect(),r\u003dthis.transform.baseVal.consolidate(),a\u003de.top-t.top+(r?r.matrix.f:n.cellPad);return c(I(o,i.select(this.parentNode).select(\".\"+n.cn.cellTextHolder).node().getBoundingClientRect().width),a)})),o.settledY\u003d!0}}}function I(t,e){switch(t.align){case\"left\":return n.cellPad;case\"right\":return t.column.columnWidth-(e||0)-n.cellPad;case\"center\":return(t.column.columnWidth-(e||0))/2;default:return n.cellPad}}function O(t){t.attr(\"transform\",(function(t){var e\u003dt.rowBlocks[0].auxiliaryBlocks.reduce((function(t,e){return t+D(e,1/0)}),0),r\u003dD(F(t),t.key);return c(0,r+e)})).selectAll(\".\"+n.cn.cellRect).attr(\"height\",(function(t){return(e\u003dF(t),r\u003dt.key,e.rows[r-e.firstRowIndex]).rowHeight;var e,r}))}function z(t,e){for(var r\u003d0,n\u003de-1;n\u003e\u003d0;n--)r+\u003dR(t[n]);return r}function D(t,e){for(var r\u003d0,n\u003d0;n\u003ct.rows.length\u0026\u0026t.rows[n].rowIndex\u003ce;n++)r+\u003dt.rows[n].rowHeight;return r}function R(t){var e\u003dt.allRowsHeight;if(void 0!\u003d\u003de)return e;for(var r\u003d0,n\u003d0;n\u003ct.rows.length;n++)r+\u003dt.rows[n].rowHeight;return t.allRowsHeight\u003dr,r}function F(t){return t.rowBlocks[t.page]}e.exports\u003dfunction(t,e){var r\u003d!t._context.staticPlot,s\u003dt._fullLayout._paper.selectAll(\".\"+n.cn.table).data(e.map((function(e){var r\u003da.unwrap(e).trace;return f(t,r)})),a.keyFun);s.exit().remove(),s.enter().append(\"g\").classed(n.cn.table,!0).attr(\"overflow\",\"visible\").style(\"box-sizing\",\"content-box\").style(\"position\",\"absolute\").style(\"left\",0).style(\"overflow\",\"visible\").style(\"shape-rendering\",\"crispEdges\").style(\"pointer-events\",\"all\"),s.attr(\"width\",(function(t){return t.width+t.size.l+t.size.r})).attr(\"height\",(function(t){return t.height+t.size.t+t.size.b})).attr(\"transform\",(function(t){return c(t.translateX,t.translateY)}));var p\u003ds.selectAll(\".\"+n.cn.tableControlView).data(a.repeat,a.keyFun),b\u003dp.enter().append(\"g\").classed(n.cn.tableControlView,!0).style(\"box-sizing\",\"content-box\");if(r){var _\u003d\"onwheel\"in document?\"wheel\":\"mousewheel\";b.on(\"mousemove\",(function(e){p.filter((function(t){return e\u003d\u003d\u003dt})).call(y,t)})).on(_,(function(e){if(!e.scrollbarState.wheeling){e.scrollbarState.wheeling\u003d!0;var r\u003de.scrollY+i.event.deltaY;E(t,p,null,r)(e)||(i.event.stopPropagation(),i.event.preventDefault()),e.scrollbarState.wheeling\u003d!1}})).call(y,t,!0)}p.attr(\"transform\",(function(t){return c(t.size.l,t.size.t)}));var w\u003dp.selectAll(\".\"+n.cn.scrollBackground).data(a.repeat,a.keyFun);w.enter().append(\"rect\").classed(n.cn.scrollBackground,!0).attr(\"fill\",\"none\"),w.attr(\"width\",(function(t){return t.width})).attr(\"height\",(function(t){return t.height})),p.each((function(e){o.setClipUrl(i.select(this),m(t,e),t)}));var A\u003dp.selectAll(\".\"+n.cn.yColumn).data((function(t){return t.columns}),a.keyFun);A.enter().append(\"g\").classed(n.cn.yColumn,!0),A.exit().remove(),A.attr(\"transform\",(function(t){return c(t.x,0)})),r\u0026\u0026A.call(i.behavior.drag().origin((function(e){return T(i.select(this),e,-n.uplift),l(this),e.calcdata.columnDragInProgress\u003d!0,y(p.filter((function(t){return e.calcdata.key\u003d\u003d\u003dt.key})),t),e})).on(\"drag\",(function(t){var e\u003di.select(this),r\u003dfunction(e){return(t\u003d\u003d\u003de?i.event.x:e.x)+e.columnWidth/2};t.x\u003dMath.max(-n.overdrag,Math.min(t.calcdata.width+n.overdrag-t.columnWidth,i.event.x)),v(A).filter((function(e){return e.calcdata.key\u003d\u003d\u003dt.calcdata.key})).sort((function(t,e){return r(t)-r(e)})).forEach((function(e,r){e.xIndex\u003dr,e.x\u003dt\u003d\u003d\u003de?e.x:e.xScale(e)})),A.filter((function(e){return t!\u003d\u003de})).transition().ease(n.transitionEase).duration(n.transitionDuration).attr(\"transform\",(function(t){return c(t.x,0)})),e.call(u).attr(\"transform\",c(t.x,-n.uplift))})).on(\"dragend\",(function(e){var r\u003di.select(this),n\u003de.calcdata;e.x\u003de.xScale(e),e.calcdata.columnDragInProgress\u003d!1,T(r,e,0),function(t,e,r){var n\u003de.gdColumnsOriginalOrder;e.gdColumns.sort((function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]})),e.columnorder\u003dr,t.emit(\"plotly_restyle\")}(t,n,n.columns.map((function(t){return t.xIndex})))}))),A.each((function(e){o.setClipUrl(i.select(this),g(t,e),t)}));var L\u003dA.selectAll(\".\"+n.cn.columnBlock).data(h.splitToPanels,a.keyFun);L.enter().append(\"g\").classed(n.cn.columnBlock,!0).attr(\"id\",(function(t){return t.key})),L.style(\"cursor\",(function(t){return t.dragHandle?\"ew-resize\":t.calcdata.scrollbarState.barWiggleRoom?\"ns-resize\":\"default\"}));var C\u003dL.filter(M),P\u003dL.filter(k);r\u0026\u0026P.call(i.behavior.drag().origin((function(t){return i.event.stopPropagation(),t})).on(\"drag\",E(t,p,-1)).on(\"dragend\",(function(){}))),x(t,p,C,L),x(t,p,P,L);var I\u003dp.selectAll(\".\"+n.cn.scrollAreaClip).data(a.repeat,a.keyFun);I.enter().append(\"clipPath\").classed(n.cn.scrollAreaClip,!0).attr(\"id\",(function(e){return m(t,e)}));var O\u003dI.selectAll(\".\"+n.cn.scrollAreaClipRect).data(a.repeat,a.keyFun);O.enter().append(\"rect\").classed(n.cn.scrollAreaClipRect,!0).attr(\"x\",-n.overdrag).attr(\"y\",-n.uplift).attr(\"fill\",\"none\"),O.attr(\"width\",(function(t){return t.width+2*n.overdrag})).attr(\"height\",(function(t){return t.height+n.uplift})),A.selectAll(\".\"+n.cn.columnBoundary).data(a.repeat,a.keyFun).enter().append(\"g\").classed(n.cn.columnBoundary,!0);var z\u003dA.selectAll(\".\"+n.cn.columnBoundaryClippath).data(a.repeat,a.keyFun);z.enter().append(\"clipPath\").classed(n.cn.columnBoundaryClippath,!0),z.attr(\"id\",(function(e){return g(t,e)}));var D\u003dz.selectAll(\".\"+n.cn.columnBoundaryRect).data(a.repeat,a.keyFun);D.enter().append(\"rect\").classed(n.cn.columnBoundaryRect,!0).attr(\"fill\",\"none\"),D.attr(\"width\",(function(t){return t.columnWidth+2*d(t)})).attr(\"height\",(function(t){return t.calcdata.height+2*d(t)+n.uplift})).attr(\"x\",(function(t){return-d(t)})).attr(\"y\",(function(t){return-d(t)})),S(null,P,p)}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/gup\":796,\"../../lib/svg_text_utils\":824,\"./constants\":1346,\"./data_preparation_helper\":1347,\"./data_split_helpers\":1348,\"@plotly/d3\":58}],1352:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,i\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,a\u003dt(\"../../components/colorscale/attributes\"),o\u003dt(\"../../plots/domain\").attributes,s\u003dt(\"../pie/attributes\"),l\u003dt(\"../sunburst/attributes\"),c\u003dt(\"./constants\"),u\u003dt(\"../../lib/extend\").extendFlat;e.exports\u003d{labels:l.labels,parents:l.parents,values:l.values,branchvalues:l.branchvalues,count:l.count,level:l.level,maxdepth:l.maxdepth,tiling:{packing:{valType:\"enumerated\",values:[\"squarify\",\"binary\",\"dice\",\"slice\",\"slice-dice\",\"dice-slice\"],dflt:\"squarify\",editType:\"plot\"},squarifyratio:{valType:\"number\",min:1,dflt:1,editType:\"plot\"},flip:{valType:\"flaglist\",flags:[\"x\",\"y\"],dflt:\"\",editType:\"plot\"},pad:{valType:\"number\",min:0,dflt:3,editType:\"plot\"},editType:\"calc\"},marker:u({pad:{t:{valType:\"number\",min:0,editType:\"plot\"},l:{valType:\"number\",min:0,editType:\"plot\"},r:{valType:\"number\",min:0,editType:\"plot\"},b:{valType:\"number\",min:0,editType:\"plot\"},editType:\"calc\"},colors:l.marker.colors,depthfade:{valType:\"enumerated\",values:[!0,!1,\"reversed\"],editType:\"style\"},line:l.marker.line,editType:\"calc\"},a(\"marker\",{colorAttr:\"colors\",anim:!1})),pathbar:{visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},side:{valType:\"enumerated\",values:[\"top\",\"bottom\"],dflt:\"top\",editType:\"plot\"},edgeshape:{valType:\"enumerated\",values:[\"\u003e\",\"\u003c\",\"|\",\"/\",\"\\\\\"],dflt:\"\u003e\",editType:\"plot\"},thickness:{valType:\"number\",min:12,editType:\"plot\"},textfont:u({},s.textfont,{}),editType:\"calc\"},text:s.text,textinfo:l.textinfo,texttemplate:i({editType:\"plot\"},{keys:c.eventDataKeys.concat([\"label\",\"value\"])}),hovertext:s.hovertext,hoverinfo:l.hoverinfo,hovertemplate:n({},{keys:c.eventDataKeys}),textfont:s.textfont,insidetextfont:s.insidetextfont,outsidetextfont:u({},s.outsidetextfont,{}),textposition:{valType:\"enumerated\",values:[\"top left\",\"top center\",\"top right\",\"middle left\",\"middle center\",\"middle right\",\"bottom left\",\"bottom center\",\"bottom right\"],dflt:\"top left\",editType:\"plot\"},sort:s.sort,root:l.root,domain:o({name:\"treemap\",trace:!0,editType:\"calc\"})}},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plots/domain\":877,\"../../plots/template_attributes\":922,\"../pie/attributes\":1188,\"../sunburst/attributes\":1326,\"./constants\":1355}],1353:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/plots\");r.name\u003d\"treemap\",r.plot\u003dfunction(t,e,i,a){n.plotBasePlot(r.name,t,e,i,a)},r.clean\u003dfunction(t,e,i,a){n.cleanBasePlot(r.name,t,e,i,a)}},{\"../../plots/plots\":913}],1354:[function(t,e,r){\"use strict\";var n\u003dt(\"../sunburst/calc\");r.calc\u003dfunction(t,e){return n.calc(t,e)},r.crossTraceCalc\u003dfunction(t){return n._runCrossTraceCalc(\"treemap\",t)}},{\"../sunburst/calc\":1328}],1355:[function(t,e,r){\"use strict\";e.exports\u003d{CLICK_TRANSITION_TIME:750,CLICK_TRANSITION_EASING:\"poly\",eventDataKeys:[\"currentPath\",\"root\",\"entry\",\"percentRoot\",\"percentEntry\",\"percentParent\"],gapWithPathbar:1}},{}],1356:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../../plots/domain\").defaults,s\u003dt(\"../bar/defaults\").handleText,l\u003dt(\"../bar/constants\").TEXTPAD,c\u003dt(\"../../components/colorscale\"),u\u003dc.hasColorscale,f\u003dc.handleDefaults;e.exports\u003dfunction(t,e,r,c){function h(r,a){return n.coerce(t,e,i,r,a)}var p\u003dh(\"labels\"),d\u003dh(\"parents\");if(p\u0026\u0026p.length\u0026\u0026d\u0026\u0026d.length){var m\u003dh(\"values\");m\u0026\u0026m.length?h(\"branchvalues\"):h(\"count\"),h(\"level\"),h(\"maxdepth\"),\"squarify\"\u003d\u003d\u003dh(\"tiling.packing\")\u0026\u0026h(\"tiling.squarifyratio\"),h(\"tiling.flip\"),h(\"tiling.pad\");var g\u003dh(\"text\");h(\"texttemplate\"),e.texttemplate||h(\"textinfo\",Array.isArray(g)?\"text+label\":\"label\"),h(\"hovertext\"),h(\"hovertemplate\");var v\u003dh(\"pathbar.visible\");s(t,e,c,h,\"auto\",{hasPathbar:v,moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!1,moduleHasCliponaxis:!1,moduleHasTextangle:!1,moduleHasInsideanchor:!1}),h(\"textposition\");var y\u003d-1!\u003d\u003de.textposition.indexOf(\"bottom\");h(\"marker.line.width\")\u0026\u0026h(\"marker.line.color\",c.paper_bgcolor);var x\u003dh(\"marker.colors\");(e._hasColorscale\u003du(t,\"marker\",\"colors\")||(t.marker||{}).coloraxis)?f(t,e,c,h,{prefix:\"marker.\",cLetter:\"c\"}):h(\"marker.depthfade\",!(x||[]).length);var b\u003d2*e.textfont.size;h(\"marker.pad.t\",y?b/4:b),h(\"marker.pad.l\",b/4),h(\"marker.pad.r\",b/4),h(\"marker.pad.b\",y?b:b/4),e._hovered\u003d{marker:{line:{width:2,color:a.contrast(c.paper_bgcolor)}}},v\u0026\u0026(h(\"pathbar.thickness\",e.pathbar.textfont.size+2*l),h(\"pathbar.side\"),h(\"pathbar.edgeshape\")),h(\"sort\"),h(\"root.color\"),o(e,c,h),e._length\u003dnull}else e.visible\u003d!1}},{\"../../components/color\":662,\"../../components/colorscale\":674,\"../../lib\":799,\"../../plots/domain\":877,\"../bar/constants\":939,\"../bar/defaults\":941,\"./attributes\":1352}],1357:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../sunburst/helpers\"),a\u003dt(\"../bar/uniform_text\").clearMinTextSize,o\u003dt(\"../bar/style\").resizeText,s\u003dt(\"./plot_one\");e.exports\u003dfunction(t,e,r,l,c){var u,f,h\u003dc.type,p\u003dc.drawDescendants,d\u003dt._fullLayout,m\u003dd[\"_\"+h+\"layer\"],g\u003d!r;(a(h,d),(u\u003dm.selectAll(\"g.trace.\"+h).data(e,(function(t){return t[0].trace.uid}))).enter().append(\"g\").classed(\"trace\",!0).classed(h,!0),u.order(),!d.uniformtext.mode\u0026\u0026i.hasTransition(r))?(l\u0026\u0026(f\u003dl()),n.transition().duration(r.duration).ease(r.easing).each(\"end\",(function(){f\u0026\u0026f()})).each(\"interrupt\",(function(){f\u0026\u0026f()})).each((function(){m.selectAll(\"g.trace\").each((function(e){s(t,e,this,r,p)}))}))):(u.each((function(e){s(t,e,this,r,p)})),d.uniformtext.mode\u0026\u0026o(t,m.selectAll(\".trace\"),h));g\u0026\u0026u.exit().remove()}},{\"../bar/style\":951,\"../bar/uniform_text\":953,\"../sunburst/helpers\":1332,\"./plot_one\":1366,\"@plotly/d3\":58}],1358:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../lib/svg_text_utils\"),s\u003dt(\"./partition\"),l\u003dt(\"./style\").styleOne,c\u003dt(\"./constants\"),u\u003dt(\"../sunburst/helpers\"),f\u003dt(\"../sunburst/fx\");e.exports\u003dfunction(t,e,r,h,p){var d\u003dp.barDifY,m\u003dp.width,g\u003dp.height,v\u003dp.viewX,y\u003dp.viewY,x\u003dp.pathSlice,b\u003dp.toMoveInsideSlice,_\u003dp.strTransform,w\u003dp.hasTransition,T\u003dp.handleSlicesExit,k\u003dp.makeUpdateSliceInterpolator,M\u003dp.makeUpdateTextInterpolator,A\u003d{},S\u003dt._fullLayout,E\u003de[0],L\u003dE.trace,C\u003dE.hierarchy,P\u003dm/L._entryDepth,I\u003du.listPath(r.data,\"id\"),O\u003ds(C.copy(),[m,g],{packing:\"dice\",pad:{inner:0,top:0,left:0,right:0,bottom:0}}).descendants();(O\u003dO.filter((function(t){var e\u003dI.indexOf(t.data.id);return-1!\u003d\u003de\u0026\u0026(t.x0\u003dP*e,t.x1\u003dP*(e+1),t.y0\u003dd,t.y1\u003dd+g,t.onPathbar\u003d!0,!0)}))).reverse(),(h\u003dh.data(O,u.getPtId)).enter().append(\"g\").classed(\"pathbar\",!0),T(h,!0,A,[m,g],x),h.order();var z\u003dh;w\u0026\u0026(z\u003dz.transition().each(\"end\",(function(){var e\u003dn.select(this);u.setSliceCursor(e,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:!1})}))),z.each((function(s){s._hoverX\u003dv(s.x1-Math.min(m,g)/2),s._hoverY\u003dy(s.y1-g/2);var h\u003dn.select(this),p\u003di.ensureSingle(h,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",\"all\")}));w?p.transition().attrTween(\"d\",(function(t){var e\u003dk(t,!0,A,[m,g]);return function(t){return x(e(t))}})):p.attr(\"d\",x),h.call(f,r,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{hideOnRoot:!1,hideOnLeaves:!1,isTransitioning:t._transitioning}),p.call(l,s,L,{hovered:!1}),s._text\u003d(u.getPtLabel(s)||\"\").split(\"\u003cbr\u003e\").join(\" \")||\"\";var d\u003di.ensureSingle(h,\"g\",\"slicetext\"),T\u003di.ensureSingle(d,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),E\u003di.ensureUniformFontSize(t,u.determineTextFont(L,s,S.font,{onPathbar:!0}));T.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",\"start\").call(a.font,E).call(o.convertToTspans,t),s.textBB\u003da.bBox(T.node()),s.transform\u003db(s,{fontSize:E.size,onPathbar:!0}),s.transform.fontSize\u003dE.size,w?T.transition().attrTween(\"transform\",(function(t){var e\u003dM(t,!0,A,[m,g]);return function(t){return _(e(t))}})):T.attr(\"transform\",_(s))}))}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../sunburst/fx\":1331,\"../sunburst/helpers\":1332,\"./constants\":1355,\"./partition\":1364,\"./style\":1367,\"@plotly/d3\":58}],1359:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../lib/svg_text_utils\"),s\u003dt(\"./partition\"),l\u003dt(\"./style\").styleOne,c\u003dt(\"./constants\"),u\u003dt(\"../sunburst/helpers\"),f\u003dt(\"../sunburst/fx\"),h\u003dt(\"../sunburst/plot\").formatSliceLabel;e.exports\u003dfunction(t,e,r,p,d){var m\u003dd.width,g\u003dd.height,v\u003dd.viewX,y\u003dd.viewY,x\u003dd.pathSlice,b\u003dd.toMoveInsideSlice,_\u003dd.strTransform,w\u003dd.hasTransition,T\u003dd.handleSlicesExit,k\u003dd.makeUpdateSliceInterpolator,M\u003dd.makeUpdateTextInterpolator,A\u003dd.prevEntry,S\u003dt._fullLayout,E\u003de[0].trace,L\u003d-1!\u003d\u003dE.textposition.indexOf(\"left\"),C\u003d-1!\u003d\u003dE.textposition.indexOf(\"right\"),P\u003d-1!\u003d\u003dE.textposition.indexOf(\"bottom\"),I\u003d!P\u0026\u0026!E.marker.pad.t||P\u0026\u0026!E.marker.pad.b,O\u003ds(r,[m,g],{packing:E.tiling.packing,squarifyratio:E.tiling.squarifyratio,flipX:E.tiling.flip.indexOf(\"x\")\u003e-1,flipY:E.tiling.flip.indexOf(\"y\")\u003e-1,pad:{inner:E.tiling.pad,top:E.marker.pad.t,left:E.marker.pad.l,right:E.marker.pad.r,bottom:E.marker.pad.b}}).descendants(),z\u003d1/0,D\u003d-1/0;O.forEach((function(t){var e\u003dt.depth;e\u003e\u003dE._maxDepth?(t.x0\u003dt.x1\u003d(t.x0+t.x1)/2,t.y0\u003dt.y1\u003d(t.y0+t.y1)/2):(z\u003dMath.min(z,e),D\u003dMath.max(D,e))})),p\u003dp.data(O,u.getPtId),E._maxVisibleLayers\u003disFinite(D)?D-z+1:0,p.enter().append(\"g\").classed(\"slice\",!0),T(p,!1,{},[m,g],x),p.order();var R\u003dnull;if(w\u0026\u0026A){var F\u003du.getPtId(A);p.each((function(t){null\u003d\u003d\u003dR\u0026\u0026u.getPtId(t)\u003d\u003d\u003dF\u0026\u0026(R\u003d{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})}))}var B\u003dfunction(){return R||{x0:0,x1:m,y0:0,y1:g}},N\u003dp;return w\u0026\u0026(N\u003dN.transition().each(\"end\",(function(){var e\u003dn.select(this);u.setSliceCursor(e,t,{hideOnRoot:!0,hideOnLeaves:!1,isTransitioning:!1})}))),N.each((function(s){var p\u003du.isHeader(s,E);s._hoverX\u003dv(s.x1-E.marker.pad.r),s._hoverY\u003dy(P?s.y1-E.marker.pad.b/2:s.y0+E.marker.pad.t/2);var d\u003dn.select(this),T\u003di.ensureSingle(d,\"path\",\"surface\",(function(t){t.style(\"pointer-events\",\"all\")}));w?T.transition().attrTween(\"d\",(function(t){var e\u003dk(t,!1,B(),[m,g]);return function(t){return x(e(t))}})):T.attr(\"d\",x),d.call(f,r,t,e,{styleOne:l,eventDataKeys:c.eventDataKeys,transitionTime:c.CLICK_TRANSITION_TIME,transitionEasing:c.CLICK_TRANSITION_EASING}).call(u.setSliceCursor,t,{isTransitioning:t._transitioning}),T.call(l,s,E,{hovered:!1}),s.x0\u003d\u003d\u003ds.x1||s.y0\u003d\u003d\u003ds.y1?s._text\u003d\"\":s._text\u003dp?I?\"\":u.getPtLabel(s)||\"\":h(s,r,E,e,S)||\"\";var A\u003di.ensureSingle(d,\"g\",\"slicetext\"),O\u003di.ensureSingle(A,\"text\",\"\",(function(t){t.attr(\"data-notex\",1)})),z\u003di.ensureUniformFontSize(t,u.determineTextFont(E,s,S.font));O.text(s._text||\" \").classed(\"slicetext\",!0).attr(\"text-anchor\",C?\"end\":L||p?\"start\":\"middle\").call(a.font,z).call(o.convertToTspans,t),s.textBB\u003da.bBox(O.node()),s.transform\u003db(s,{fontSize:z.size,isHeader:p}),s.transform.fontSize\u003dz.size,w?O.transition().attrTween(\"transform\",(function(t){var e\u003dM(t,!1,B(),[m,g]);return function(t){return _(e(t))}})):O.attr(\"transform\",_(s))})),R}},{\"../../components/drawing\":684,\"../../lib\":799,\"../../lib/svg_text_utils\":824,\"../sunburst/fx\":1331,\"../sunburst/helpers\":1332,\"../sunburst/plot\":1336,\"./constants\":1355,\"./partition\":1364,\"./style\":1367,\"@plotly/d3\":58}],1360:[function(t,e,r){\"use strict\";e.exports\u003dfunction t(e,r,n){var i;n.swapXY\u0026\u0026(i\u003de.x0,e.x0\u003de.y0,e.y0\u003di,i\u003de.x1,e.x1\u003de.y1,e.y1\u003di),n.flipX\u0026\u0026(i\u003de.x0,e.x0\u003dr[0]-e.x1,e.x1\u003dr[0]-i),n.flipY\u0026\u0026(i\u003de.y0,e.y0\u003dr[1]-e.y1,e.y1\u003dr[1]-i);var a\u003de.children;if(a)for(var o\u003d0;o\u003ca.length;o++)t(a[o],r,n)}},{}],1361:[function(t,e,r){\"use strict\";e.exports\u003d{moduleType:\"trace\",name:\"treemap\",basePlotModule:t(\"./base_plot\"),categories:[],animatable:!0,attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\").calc,crossTraceCalc:t(\"./calc\").crossTraceCalc,plot:t(\"./plot\"),style:t(\"./style\").style,colorbar:t(\"../scatter/marker_colorbar\"),meta:{}}},{\"../scatter/marker_colorbar\":1232,\"./attributes\":1352,\"./base_plot\":1353,\"./calc\":1354,\"./defaults\":1356,\"./layout_attributes\":1362,\"./layout_defaults\":1363,\"./plot\":1365,\"./style\":1367}],1362:[function(t,e,r){\"use strict\";e.exports\u003d{treemapcolorway:{valType:\"colorlist\",editType:\"calc\"},extendtreemapcolors:{valType:\"boolean\",dflt:!0,editType:\"calc\"}}},{}],1363:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e){function r(r,a){return n.coerce(t,e,i,r,a)}r(\"treemapcolorway\",e.colorway),r(\"extendtreemapcolors\")}},{\"../../lib\":799,\"./layout_attributes\":1362}],1364:[function(t,e,r){\"use strict\";var n\u003dt(\"d3-hierarchy\"),i\u003dt(\"./flip_tree\");e.exports\u003dfunction(t,e,r){var a,o\u003dr.flipX,s\u003dr.flipY,l\u003d\"dice-slice\"\u003d\u003d\u003dr.packing,c\u003dr.pad[s?\"bottom\":\"top\"],u\u003dr.pad[o?\"right\":\"left\"],f\u003dr.pad[o?\"left\":\"right\"],h\u003dr.pad[s?\"top\":\"bottom\"];l\u0026\u0026(a\u003du,u\u003dc,c\u003da,a\u003df,f\u003dh,h\u003da);var p\u003dn.treemap().tile(function(t,e){switch(t){case\"squarify\":return n.treemapSquarify.ratio(e);case\"binary\":return n.treemapBinary;case\"dice\":return n.treemapDice;case\"slice\":return n.treemapSlice;default:return n.treemapSliceDice}}(r.packing,r.squarifyratio)).paddingInner(r.pad.inner).paddingLeft(u).paddingRight(f).paddingTop(c).paddingBottom(h).size(l?[e[1],e[0]]:e)(t);return(l||o||s)\u0026\u0026i(p,e,{swapXY:l,flipX:o,flipY:s}),p}},{\"./flip_tree\":1360,\"d3-hierarchy\":167}],1365:[function(t,e,r){\"use strict\";var n\u003dt(\"./draw\"),i\u003dt(\"./draw_descendants\");e.exports\u003dfunction(t,e,r,a){return n(t,e,r,a,{type:\"treemap\",drawDescendants:i})}},{\"./draw\":1357,\"./draw_descendants\":1359}],1366:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../sunburst/helpers\"),a\u003dt(\"../../lib\"),o\u003dt(\"../bar/constants\").TEXTPAD,s\u003dt(\"../bar/plot\").toMoveInsideBar,l\u003dt(\"../bar/uniform_text\").recordMinTextSize,c\u003dt(\"./constants\"),u\u003dt(\"./draw_ancestors\");function f(t){return i.isHierarchyRoot(t)?\"\":i.getPtId(t)}e.exports\u003dfunction(t,e,r,h,p){var d\u003dt._fullLayout,m\u003de[0],g\u003dm.trace,v\u003d\"icicle\"\u003d\u003d\u003dg.type,y\u003dm.hierarchy,x\u003di.findEntryWithLevel(y,g.level),b\u003dn.select(r),_\u003db.selectAll(\"g.pathbar\"),w\u003db.selectAll(\"g.slice\");if(!x)return _.remove(),void w.remove();var T\u003di.isHierarchyRoot(x),k\u003d!d.uniformtext.mode\u0026\u0026i.hasTransition(h),M\u003di.getMaxDepth(g),A\u003dd._size,S\u003dg.domain,E\u003dA.w*(S.x[1]-S.x[0]),L\u003dA.h*(S.y[1]-S.y[0]),C\u003dE,P\u003dg.pathbar.thickness,I\u003dg.marker.line.width+c.gapWithPathbar,O\u003dg.pathbar.visible?g.pathbar.side.indexOf(\"bottom\")\u003e-1?L+I:-(P+I):0,z\u003d{x0:C,x1:C,y0:O,y1:O+P},D\u003dfunction(t,e,r){var n\u003dg.tiling.pad,i\u003dfunction(t){return t-n\u003c\u003de.x0},a\u003dfunction(t){return t+n\u003e\u003de.x1},o\u003dfunction(t){return t-n\u003c\u003de.y0},s\u003dfunction(t){return t+n\u003e\u003de.y1};return t.x0\u003d\u003d\u003de.x0\u0026\u0026t.x1\u003d\u003d\u003de.x1\u0026\u0026t.y0\u003d\u003d\u003de.y0\u0026\u0026t.y1\u003d\u003d\u003de.y1?{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1}:{x0:i(t.x0-n)?0:a(t.x0-n)?r[0]:t.x0,x1:i(t.x1+n)?0:a(t.x1+n)?r[0]:t.x1,y0:o(t.y0-n)?0:s(t.y0-n)?r[1]:t.y0,y1:o(t.y1+n)?0:s(t.y1+n)?r[1]:t.y1}},R\u003dnull,F\u003d{},B\u003d{},N\u003dnull,j\u003dfunction(t,e){return e?F[f(t)]:B[f(t)]},U\u003dfunction(t,e,r,n){if(e)return F[f(y)]||z;var i\u003dB[g.level]||r;return function(t){return t.data.depth-x.data.depth\u003cM}(t)?D(t,i,n):{}};m.hasMultipleRoots\u0026\u0026T\u0026\u0026M++,g._maxDepth\u003dM,g._backgroundColor\u003dd.paper_bgcolor,g._entryDepth\u003dx.data.depth,g._atRootLevel\u003dT;var V\u003d-E/2+A.l+A.w*(S.x[1]+S.x[0])/2,q\u003d-L/2+A.t+A.h*(1-(S.y[1]+S.y[0])/2),H\u003dfunction(t){return V+t},G\u003dfunction(t){return q+t},Y\u003dG(0),W\u003dH(0),X\u003dfunction(t){return W+t},Z\u003dfunction(t){return Y+t};function J(t,e){return t+\",\"+e}var K\u003dX(0),Q\u003dfunction(t){t.x\u003dMath.max(K,t.x)},$\u003dg.pathbar.edgeshape,tt\u003dfunction(t,e){var r\u003dt.x0,n\u003dt.x1,i\u003dt.y0,a\u003dt.y1,c\u003dt.textBB,u\u003dfunction(t){return-1!\u003d\u003dg.textposition.indexOf(t)},f\u003du(\"bottom\"),h\u003du(\"top\")||e.isHeader\u0026\u0026!f?\"start\":f?\"end\":\"middle\",p\u003du(\"right\"),m\u003du(\"left\")||e.onPathbar?-1:p?1:0,y\u003dg[v?\"tiling\":\"marker\"].pad;if(e.isHeader){if((r+\u003d(v?y:y.l)-o)\u003e\u003d(n-\u003d(v?y:y.r)-o)){var x\u003d(r+n)/2;r\u003dx,n\u003dx}var b;f?i\u003c(b\u003da-(v?y:y.b))\u0026\u0026b\u003ca\u0026\u0026(i\u003db):i\u003c(b\u003di+(v?y:y.t))\u0026\u0026b\u003ca\u0026\u0026(a\u003db)}var _\u003ds(r,n,i,a,c,{isHorizontal:!1,constrained:!0,angle:0,anchor:h,leftToRight:m});return _.fontSize\u003de.fontSize,_.targetX\u003dH(_.targetX),_.targetY\u003dG(_.targetY),isNaN(_.targetX)||isNaN(_.targetY)?{}:(r!\u003d\u003dn\u0026\u0026i!\u003d\u003da\u0026\u0026l(g.type,_,d),{scale:_.scale,rotate:_.rotate,textX:_.textX,textY:_.textY,anchorX:_.anchorX,anchorY:_.anchorY,targetX:_.targetX,targetY:_.targetY})},et\u003dfunction(t,e){for(var r,n\u003d0,i\u003dt;!r\u0026\u0026n\u003cM;)n++,(i\u003di.parent)?r\u003dj(i,e):n\u003dM;return r||{}},rt\u003dfunction(t,e,r,i,o){var s,l\u003dj(t,e);if(l)s\u003dl;else if(e)s\u003dz;else if(R)if(t.parent){var c\u003dN||r;c\u0026\u0026!e?s\u003dD(t,c,i):(s\u003d{},a.extendFlat(s,et(t,e)))}else s\u003da.extendFlat({},t),v\u0026\u0026(\"h\"\u003d\u003d\u003do.orientation?o.flipX?s.x0\u003dt.x1:s.x1\u003d0:o.flipY?s.y0\u003dt.y1:s.y1\u003d0);else s\u003d{};return n.interpolate(s,{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1})},nt\u003dfunction(t,e,r,o){var s\u003dj(t,e),c\u003d{},u\u003dU(t,e,r,o);a.extendFlat(c,{transform:tt({x0:u.x0,x1:u.x1,y0:u.y0,y1:u.y1,textBB:t.textBB,_text:t._text},{isHeader:i.isHeader(t,g)})}),s?c\u003ds:t.parent\u0026\u0026a.extendFlat(c,et(t,e));var f\u003dt.transform;return t.x0!\u003d\u003dt.x1\u0026\u0026t.y0!\u003d\u003dt.y1\u0026\u0026l(g.type,f,d),n.interpolate(c,{transform:{scale:f.scale,rotate:f.rotate,textX:f.textX,textY:f.textY,anchorX:f.anchorX,anchorY:f.anchorY,targetX:f.targetX,targetY:f.targetY}})},it\u003dfunction(t,e,r,i,a){var o\u003di[0],s\u003di[1];k?t.exit().transition().each((function(){var t\u003dn.select(this);t.select(\"path.surface\").transition().attrTween(\"d\",(function(t){var r\u003dfunction(t,e,r,i){var a,o\u003dj(t,e);if(e)a\u003dz;else{var s\u003dj(x,e);a\u003ds?D(t,s,i):{}}return n.interpolate(o,a)}(t,e,0,[o,s]);return function(t){return a(r(t))}})),t.select(\"g.slicetext\").attr(\"opacity\",0)})).remove():t.exit().remove()},at\u003dfunction(t){var e\u003dt.transform;return t.x0!\u003d\u003dt.x1\u0026\u0026t.y0!\u003d\u003dt.y1\u0026\u0026l(g.type,e,d),a.getTextTransform({textX:e.textX,textY:e.textY,anchorX:e.anchorX,anchorY:e.anchorY,targetX:e.targetX,targetY:e.targetY,scale:e.scale,rotate:e.rotate})};k\u0026\u0026(_.each((function(t){F[f(t)]\u003d{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform\u0026\u0026(F[f(t)].transform\u003d{textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate})})),w.each((function(t){B[f(t)]\u003d{x0:t.x0,x1:t.x1,y0:t.y0,y1:t.y1},t.transform\u0026\u0026(B[f(t)].transform\u003d{textX:t.transform.textX,textY:t.transform.textY,anchorX:t.transform.anchorX,anchorY:t.transform.anchorY,targetX:t.transform.targetX,targetY:t.transform.targetY,scale:t.transform.scale,rotate:t.transform.rotate}),!R\u0026\u0026i.isEntry(t)\u0026\u0026(R\u003dt)}))),N\u003dp(t,e,x,w,{width:E,height:L,viewX:H,viewY:G,pathSlice:function(t){var e\u003dH(t.x0),r\u003dH(t.x1),n\u003dG(t.y0),i\u003dG(t.y1),a\u003dr-e,o\u003di-n;if(!a||!o)return\"\";return\"M\"+J(e,n+0)+\"L\"+J(r-0,n)+\"L\"+J(r,i-0)+\"L\"+J(e+0,i)+\"Z\"},toMoveInsideSlice:tt,prevEntry:R,makeUpdateSliceInterpolator:rt,makeUpdateTextInterpolator:nt,handleSlicesExit:it,hasTransition:k,strTransform:at}),g.pathbar.visible?u(t,e,x,_,{barDifY:O,width:C,height:P,viewX:X,viewY:Z,pathSlice:function(t){var e\u003dX(Math.max(Math.min(t.x0,t.x0),0)),r\u003dX(Math.min(Math.max(t.x1,t.x1),C)),n\u003dZ(t.y0),i\u003dZ(t.y1),a\u003dP/2,o\u003d{},s\u003d{};o.x\u003de,s.x\u003dr,o.y\u003ds.y\u003d(n+i)/2;var l\u003d{x:e,y:n},c\u003d{x:r,y:n},u\u003d{x:r,y:i},f\u003d{x:e,y:i};return\"\u003e\"\u003d\u003d\u003d$?(l.x-\u003da,c.x-\u003da,u.x-\u003da,f.x-\u003da):\"/\"\u003d\u003d\u003d$?(u.x-\u003da,f.x-\u003da,o.x-\u003da/2,s.x-\u003da/2):\"\\\\\"\u003d\u003d\u003d$?(l.x-\u003da,c.x-\u003da,o.x-\u003da/2,s.x-\u003da/2):\"\u003c\"\u003d\u003d\u003d$\u0026\u0026(o.x-\u003da,s.x-\u003da),Q(l),Q(f),Q(o),Q(c),Q(u),Q(s),\"M\"+J(l.x,l.y)+\"L\"+J(c.x,c.y)+\"L\"+J(s.x,s.y)+\"L\"+J(u.x,u.y)+\"L\"+J(f.x,f.y)+\"L\"+J(o.x,o.y)+\"Z\"},toMoveInsideSlice:tt,makeUpdateSliceInterpolator:rt,makeUpdateTextInterpolator:nt,handleSlicesExit:it,hasTransition:k,strTransform:at}):_.remove()}},{\"../../lib\":799,\"../bar/constants\":939,\"../bar/plot\":948,\"../bar/uniform_text\":953,\"../sunburst/helpers\":1332,\"./constants\":1355,\"./draw_ancestors\":1358,\"@plotly/d3\":58}],1367:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../../lib\"),o\u003dt(\"../sunburst/helpers\"),s\u003dt(\"../bar/uniform_text\").resizeText;function l(t,e,r,n){var s,l,c\u003d(n||{}).hovered,u\u003de.data.data,f\u003du.i,h\u003du.color,p\u003do.isHierarchyRoot(e),d\u003d1;if(c)s\u003dr._hovered.marker.line.color,l\u003dr._hovered.marker.line.width;else if(p\u0026\u0026h\u003d\u003d\u003dr.root.color)d\u003d100,s\u003d\"rgba(0,0,0,0)\",l\u003d0;else if(s\u003da.castOption(r,f,\"marker.line.color\")||i.defaultLine,l\u003da.castOption(r,f,\"marker.line.width\")||0,!r._hasColorscale\u0026\u0026!e.onPathbar){var m\u003dr.marker.depthfade;if(m){var g,v\u003di.combine(i.addOpacity(r._backgroundColor,.75),h);if(!0\u003d\u003d\u003dm){var y\u003do.getMaxDepth(r);g\u003disFinite(y)?o.isLeaf(e)?0:r._maxVisibleLayers-(e.data.depth-r._entryDepth):e.data.height+1}else g\u003de.data.depth-r._entryDepth,r._atRootLevel||g++;if(g\u003e0)for(var x\u003d0;x\u003cg;x++){var b\u003d.5*x/g;h\u003di.combine(i.addOpacity(v,b),h)}}}t.style(\"stroke-width\",l).call(i.fill,h).call(i.stroke,s).style(\"opacity\",d)}e.exports\u003d{style:function(t){var e\u003dt._fullLayout._treemaplayer.selectAll(\".trace\");s(t,e,\"treemap\"),e.each((function(t){var e\u003dn.select(this),r\u003dt[0].trace;e.style(\"opacity\",r.opacity),e.selectAll(\"path.surface\").each((function(t){n.select(this).call(l,t,r,{hovered:!1})}))}))},styleOne:l}},{\"../../components/color\":662,\"../../lib\":799,\"../bar/uniform_text\":953,\"../sunburst/helpers\":1332,\"@plotly/d3\":58}],1368:[function(t,e,r){\"use strict\";var n\u003dt(\"../box/attributes\"),i\u003dt(\"../../lib/extend\").extendFlat,a\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat;e.exports\u003d{y:n.y,x:n.x,x0:n.x0,y0:n.y0,xhoverformat:a(\"x\"),yhoverformat:a(\"y\"),name:i({},n.name,{}),orientation:i({},n.orientation,{}),bandwidth:{valType:\"number\",min:0,editType:\"calc\"},scalegroup:{valType:\"string\",dflt:\"\",editType:\"calc\"},scalemode:{valType:\"enumerated\",values:[\"width\",\"count\"],dflt:\"width\",editType:\"calc\"},spanmode:{valType:\"enumerated\",values:[\"soft\",\"hard\",\"manual\"],dflt:\"soft\",editType:\"calc\"},span:{valType:\"info_array\",items:[{valType:\"any\",editType:\"calc\"},{valType:\"any\",editType:\"calc\"}],editType:\"calc\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,dflt:2,editType:\"style\"},editType:\"plot\"},fillcolor:n.fillcolor,points:i({},n.boxpoints,{}),jitter:i({},n.jitter,{}),pointpos:i({},n.pointpos,{}),width:i({},n.width,{}),marker:n.marker,text:n.text,hovertext:n.hovertext,hovertemplate:n.hovertemplate,box:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},width:{valType:\"number\",min:0,max:1,dflt:.25,editType:\"plot\"},fillcolor:{valType:\"color\",editType:\"style\"},line:{color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"style\"},editType:\"plot\"},meanline:{visible:{valType:\"boolean\",dflt:!1,editType:\"plot\"},color:{valType:\"color\",editType:\"style\"},width:{valType:\"number\",min:0,editType:\"style\"},editType:\"plot\"},side:{valType:\"enumerated\",values:[\"both\",\"positive\",\"negative\"],dflt:\"both\",editType:\"calc\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup,selected:n.selected,unselected:n.unselected,hoveron:{valType:\"flaglist\",flags:[\"violins\",\"points\",\"kde\"],dflt:\"violins+points+kde\",extras:[\"all\"],editType:\"style\"}}},{\"../../lib/extend\":789,\"../../plots/cartesian/axis_format_attributes\":852,\"../box/attributes\":962}],1369:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../box/calc\"),o\u003dt(\"./helpers\"),s\u003dt(\"../../constants/numerical\").BADNUM;function l(t,e,r){var i\u003de.max-e.min;if(!i)return t.bandwidth?t.bandwidth:0;if(t.bandwidth)return Math.max(t.bandwidth,i/1e4);var a\u003dr.length,o\u003dn.stdev(r,a-1,e.mean);return Math.max(function(t,e,r){return 1.059*Math.min(e,r/1.349)*Math.pow(t,-.2)}(a,o,e.q3-e.q1),i/100)}function c(t,e,r,n){var a,o\u003dt.spanmode,l\u003dt.span||[],c\u003d[e.min,e.max],u\u003d[e.min-2*n,e.max+2*n];function f(n){var i\u003dl[n],a\u003d\"multicategory\"\u003d\u003d\u003dr.type?r.r2c(i):r.d2c(i,0,t[e.valLetter+\"calendar\"]);return a\u003d\u003d\u003ds?u[n]:a}var h\u003d{type:\"linear\",range:a\u003d\"soft\"\u003d\u003d\u003do?u:\"hard\"\u003d\u003d\u003do?c:[f(0),f(1)]};return i.setConvert(h),h.cleanRange(),a}e.exports\u003dfunction(t,e){var r\u003da(t,e);if(r[0].t.empty)return r;for(var s\u003dt._fullLayout,u\u003di.getFromId(t,e[\"h\"\u003d\u003d\u003de.orientation?\"xaxis\":\"yaxis\"]),f\u003d1/0,h\u003d-1/0,p\u003d0,d\u003d0,m\u003d0;m\u003cr.length;m++){var g\u003dr[m],v\u003dg.pts.map(o.extractVal),y\u003dg.bandwidth\u003dl(e,g,v),x\u003dg.span\u003dc(e,g,u,y);if(g.min\u003d\u003d\u003dg.max\u0026\u00260\u003d\u003d\u003dy)x\u003dg.span\u003d[g.min,g.max],g.density\u003d[{v:1,t:x[0]}],g.bandwidth\u003dy,p\u003dMath.max(p,1);else{var b\u003dx[1]-x[0],_\u003dMath.ceil(b/(y/3)),w\u003db/_;if(!isFinite(w)||!isFinite(_))return n.error(\"Something went wrong with computing the violin span\"),r[0].t.empty\u003d!0,r;var T\u003do.makeKDE(g,e,v);g.density\u003dnew Array(_);for(var k\u003d0,M\u003dx[0];M\u003cx[1]+w/2;k++,M+\u003dw){var A\u003dT(M);g.density[k]\u003d{v:A,t:M},p\u003dMath.max(p,A)}}d\u003dMath.max(d,v.length),f\u003dMath.min(f,x[0]),h\u003dMath.max(h,x[1])}var S\u003di.findExtremes(u,[f,h],{padded:!0});if(e._extremes[u._id]\u003dS,e.width)r[0].t.maxKDE\u003dp;else{var E\u003ds._violinScaleGroupStats,L\u003de.scalegroup,C\u003dE[L];C?(C.maxKDE\u003dMath.max(C.maxKDE,p),C.maxCount\u003dMath.max(C.maxCount,d)):E[L]\u003d{maxKDE:p,maxCount:d}}return r[0].t.labels.kde\u003dn._(t,\"kde:\"),r}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../box/calc\":963,\"./helpers\":1372}],1370:[function(t,e,r){\"use strict\";var n\u003dt(\"../box/cross_trace_calc\").setPositionOffset,i\u003d[\"v\",\"h\"];e.exports\u003dfunction(t,e){for(var r\u003dt.calcdata,a\u003de.xaxis,o\u003de.yaxis,s\u003d0;s\u003ci.length;s++){for(var l\u003di[s],c\u003d\"h\"\u003d\u003d\u003dl?o:a,u\u003d[],f\u003d0;f\u003cr.length;f++){var h\u003dr[f],p\u003dh[0].t,d\u003dh[0].trace;!0!\u003d\u003dd.visible||\"violin\"!\u003d\u003dd.type||p.empty||d.orientation!\u003d\u003dl||d.xaxis!\u003d\u003da._id||d.yaxis!\u003d\u003do._id||u.push(f)}n(\"violin\",t,u,c)}}},{\"../box/cross_trace_calc\":964}],1371:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../box/defaults\"),o\u003dt(\"./attributes\");e.exports\u003dfunction(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}function c(r,i){return n.coerce2(t,e,o,r,i)}if(a.handleSampleDefaults(t,e,l,s),!1!\u003d\u003de.visible){l(\"bandwidth\"),l(\"side\"),l(\"width\")||(l(\"scalegroup\",e.name),l(\"scalemode\"));var u,f\u003dl(\"span\");Array.isArray(f)\u0026\u0026(u\u003d\"manual\"),l(\"spanmode\",u);var h\u003dl(\"line.color\",(t.marker||{}).color||r),p\u003dl(\"line.width\"),d\u003dl(\"fillcolor\",i.addOpacity(e.line.color,.5));a.handlePointsDefaults(t,e,l,{prefix:\"\"});var m\u003dc(\"box.width\"),g\u003dc(\"box.fillcolor\",d),v\u003dc(\"box.line.color\",h),y\u003dc(\"box.line.width\",p);l(\"box.visible\",Boolean(m||g||v||y))||(e.box\u003d{visible:!1});var x\u003dc(\"meanline.color\",h),b\u003dc(\"meanline.width\",p);l(\"meanline.visible\",Boolean(x||b))||(e.meanline\u003d{visible:!1})}}},{\"../../components/color\":662,\"../../lib\":799,\"../box/defaults\":965,\"./attributes\":1368}],1372:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dfunction(t){return 1/Math.sqrt(2*Math.PI)*Math.exp(-.5*t*t)};r.makeKDE\u003dfunction(t,e,r){var n\u003dr.length,a\u003di,o\u003dt.bandwidth,s\u003d1/(n*o);return function(t){for(var e\u003d0,i\u003d0;i\u003cn;i++)e+\u003da((t-r[i])/o);return s*e}},r.getPositionOnKdePath\u003dfunction(t,e,r){var i,a;\"h\"\u003d\u003d\u003de.orientation?(i\u003d\"y\",a\u003d\"x\"):(i\u003d\"x\",a\u003d\"y\");var o\u003dn.findPointOnPath(t.path,r,a,{pathLength:t.pathLength}),s\u003dt.posCenterPx,l\u003do[i];return[l,\"both\"\u003d\u003d\u003de.side?2*s-l:s]},r.getKdeValue\u003dfunction(t,e,n){var i\u003dt.pts.map(r.extractVal);return r.makeKDE(t,e,i)(n)/t.posDensityScale},r.extractVal\u003dfunction(t){return t.v}},{\"../../lib\":799}],1373:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../../plots/cartesian/axes\"),a\u003dt(\"../box/hover\"),o\u003dt(\"./helpers\");e.exports\u003dfunction(t,e,r,s,l){l||(l\u003d{});var c,u,f\u003dl.hoverLayer,h\u003dt.cd,p\u003dh[0].trace,d\u003dp.hoveron,m\u003d-1!\u003d\u003dd.indexOf(\"violins\"),g\u003d-1!\u003d\u003dd.indexOf(\"kde\"),v\u003d[];if(m||g){var y\u003da.hoverOnBoxes(t,e,r,s);if(g\u0026\u0026y.length\u003e0){var x,b,_,w,T,k\u003dt.xa,M\u003dt.ya;\"h\"\u003d\u003d\u003dp.orientation?(T\u003de,x\u003d\"y\",_\u003dM,b\u003d\"x\",w\u003dk):(T\u003dr,x\u003d\"x\",_\u003dk,b\u003d\"y\",w\u003dM);var A\u003dh[t.index];if(T\u003e\u003dA.span[0]\u0026\u0026T\u003c\u003dA.span[1]){var S\u003dn.extendFlat({},t),E\u003dw.c2p(T,!0),L\u003do.getKdeValue(A,p,T),C\u003do.getPositionOnKdePath(A,p,E),P\u003d_._offset,I\u003d_._length;S[x+\"0\"]\u003dC[0],S[x+\"1\"]\u003dC[1],S[b+\"0\"]\u003dS[b+\"1\"]\u003dE,S[b+\"Label\"]\u003db+\": \"+i.hoverLabelText(w,T,p[b+\"hoverformat\"])+\", \"+h[0].t.labels.kde+\" \"+L.toFixed(3),S.spikeDistance\u003dy[0].spikeDistance;var O\u003dx+\"Spike\";S[O]\u003dy[0][O],y[0].spikeDistance\u003dvoid 0,y[0][O]\u003dvoid 0,S.hovertemplate\u003d!1,v.push(S),(u\u003d{stroke:t.color})[x+\"1\"]\u003dn.constrain(P+C[0],P,P+I),u[x+\"2\"]\u003dn.constrain(P+C[1],P,P+I),u[b+\"1\"]\u003du[b+\"2\"]\u003dw._offset+E}}m\u0026\u0026(v\u003dv.concat(y))}-1!\u003d\u003dd.indexOf(\"points\")\u0026\u0026(c\u003da.hoverOnPoints(t,e,r));var z\u003df.selectAll(\".violinline-\"+p.uid).data(u?[0]:[]);return z.enter().append(\"line\").classed(\"violinline-\"+p.uid,!0).attr(\"stroke-width\",1.5),z.exit().remove(),z.attr(u),\"closest\"\u003d\u003d\u003ds?c?[c]:v:c?(v.push(c),v):v}},{\"../../lib\":799,\"../../plots/cartesian/axes\":849,\"../box/hover\":967,\"./helpers\":1372}],1374:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\"),crossTraceDefaults:t(\"../box/defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\"),plot:t(\"./plot\"),style:t(\"./style\"),styleOnSelect:t(\"../scatter/style\").styleOnSelect,hoverPoints:t(\"./hover\"),selectPoints:t(\"../box/select\"),moduleType:\"trace\",name:\"violin\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"cartesian\",\"svg\",\"symbols\",\"oriented\",\"box-violin\",\"showLegend\",\"violinLayout\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":863,\"../box/defaults\":965,\"../box/select\":972,\"../scatter/style\":1238,\"./attributes\":1368,\"./calc\":1369,\"./cross_trace_calc\":1370,\"./defaults\":1371,\"./hover\":1373,\"./layout_attributes\":1375,\"./layout_defaults\":1376,\"./plot\":1377,\"./style\":1378}],1375:[function(t,e,r){\"use strict\";var n\u003dt(\"../box/layout_attributes\"),i\u003dt(\"../../lib\").extendFlat;e.exports\u003d{violinmode:i({},n.boxmode,{}),violingap:i({},n.boxgap,{}),violingroupgap:i({},n.boxgroupgap,{})}},{\"../../lib\":799,\"../box/layout_attributes\":969}],1376:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\"),a\u003dt(\"../box/layout_defaults\");e.exports\u003dfunction(t,e,r){a._supply(t,e,r,(function(r,a){return n.coerce(t,e,i,r,a)}),\"violin\")}},{\"../../lib\":799,\"../box/layout_defaults\":970,\"./layout_attributes\":1375}],1377:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../box/plot\"),s\u003dt(\"../scatter/line_points\"),l\u003dt(\"./helpers\");e.exports\u003dfunction(t,e,r,c){var u\u003dt._fullLayout,f\u003de.xaxis,h\u003de.yaxis;function p(t){var e\u003ds(t,{xaxis:f,yaxis:h,connectGaps:!0,baseTolerance:.75,shape:\"spline\",simplify:!0,linearized:!0});return a.smoothopen(e[0],1)}i.makeTraceGroups(c,r,\"trace violins\").each((function(t){var r\u003dn.select(this),a\u003dt[0],s\u003da.t,c\u003da.trace;if(!0!\u003d\u003dc.visible||s.empty)r.remove();else{var d\u003ds.bPos,m\u003ds.bdPos,g\u003de[s.valLetter+\"axis\"],v\u003de[s.posLetter+\"axis\"],y\u003d\"both\"\u003d\u003d\u003dc.side,x\u003dy||\"positive\"\u003d\u003d\u003dc.side,b\u003dy||\"negative\"\u003d\u003d\u003dc.side,_\u003dr.selectAll(\"path.violin\").data(i.identity);_.enter().append(\"path\").style(\"vector-effect\",\"non-scaling-stroke\").attr(\"class\",\"violin\"),_.exit().remove(),_.each((function(t){var e,r,i,a,o,l,f,h,_\u003dn.select(this),w\u003dt.density,T\u003dw.length,k\u003dv.c2l(t.pos+d,!0),M\u003dv.l2p(k);if(c.width)e\u003ds.maxKDE/m;else{var A\u003du._violinScaleGroupStats[c.scalegroup];e\u003d\"count\"\u003d\u003d\u003dc.scalemode?A.maxKDE/m*(A.maxCount/t.pts.length):A.maxKDE/m}if(x){for(f\u003dnew Array(T),o\u003d0;o\u003cT;o++)(h\u003df[o]\u003d{})[s.posLetter]\u003dk+w[o].v/e,h[s.valLetter]\u003dg.c2l(w[o].t,!0);r\u003dp(f)}if(b){for(f\u003dnew Array(T),l\u003d0,o\u003dT-1;l\u003cT;l++,o--)(h\u003df[l]\u003d{})[s.posLetter]\u003dk-w[o].v/e,h[s.valLetter]\u003dg.c2l(w[o].t,!0);i\u003dp(f)}if(y)a\u003dr+\"L\"+i.substr(1)+\"Z\";else{var S\u003d[M,g.c2p(w[0].t)],E\u003d[M,g.c2p(w[T-1].t)];\"h\"\u003d\u003d\u003dc.orientation\u0026\u0026(S.reverse(),E.reverse()),a\u003dx?\"M\"+S+\"L\"+r.substr(1)+\"L\"+E:\"M\"+E+\"L\"+i.substr(1)+\"L\"+S}_.attr(\"d\",a),t.posCenterPx\u003dM,t.posDensityScale\u003de*m,t.path\u003d_.node(),t.pathLength\u003dt.path.getTotalLength()/(y?2:1)}));var w,T,k,M\u003dc.box,A\u003dM.width,S\u003d(M.line||{}).width;y?(w\u003dm*A,T\u003d0):x?(w\u003d[0,m*A/2],T\u003dS*{x:1,y:-1}[s.posLetter]):(w\u003d[m*A/2,0],T\u003dS*{x:-1,y:1}[s.posLetter]),o.plotBoxAndWhiskers(r,{pos:v,val:g},c,{bPos:d,bdPos:w,bPosPxOffset:T}),o.plotBoxMean(r,{pos:v,val:g},c,{bPos:d,bdPos:w,bPosPxOffset:T}),!c.box.visible\u0026\u0026c.meanline.visible\u0026\u0026(k\u003di.identity);var E\u003dr.selectAll(\"path.meanline\").data(k||[]);E.enter().append(\"path\").attr(\"class\",\"meanline\").style(\"fill\",\"none\").style(\"vector-effect\",\"non-scaling-stroke\"),E.exit().remove(),E.each((function(t){var e\u003dg.c2p(t.mean,!0),r\u003dl.getPositionOnKdePath(t,c,e);n.select(this).attr(\"d\",\"h\"\u003d\u003d\u003dc.orientation?\"M\"+e+\",\"+r[0]+\"V\"+r[1]:\"M\"+r[0]+\",\"+e+\"H\"+r[1])})),o.plotPoints(r,{x:f,y:h},c,s)}}))}},{\"../../components/drawing\":684,\"../../lib\":799,\"../box/plot\":971,\"../scatter/line_points\":1228,\"./helpers\":1372,\"@plotly/d3\":58}],1378:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/color\"),a\u003dt(\"../scatter/style\").stylePoints;e.exports\u003dfunction(t){var e\u003dn.select(t).selectAll(\"g.trace.violins\");e.style(\"opacity\",(function(t){return t[0].trace.opacity})),e.each((function(e){var r\u003de[0].trace,o\u003dn.select(this),s\u003dr.box||{},l\u003ds.line||{},c\u003dr.meanline||{},u\u003dc.width;o.selectAll(\"path.violin\").style(\"stroke-width\",r.line.width+\"px\").call(i.stroke,r.line.color).call(i.fill,r.fillcolor),o.selectAll(\"path.box\").style(\"stroke-width\",l.width+\"px\").call(i.stroke,l.color).call(i.fill,s.fillcolor);var f\u003d{\"stroke-width\":u+\"px\",\"stroke-dasharray\":2*u+\"px,\"+u+\"px\"};o.selectAll(\"path.mean\").style(f).call(i.stroke,c.color),o.selectAll(\"path.meanline\").style(f).call(i.stroke,c.color),a(o,r,t)}))}},{\"../../components/color\":662,\"../scatter/style\":1238,\"@plotly/d3\":58}],1379:[function(t,e,r){\"use strict\";var n\u003dt(\"../../components/colorscale/attributes\"),i\u003dt(\"../isosurface/attributes\"),a\u003dt(\"../surface/attributes\"),o\u003dt(\"../../plots/attributes\"),s\u003dt(\"../../lib/extend\").extendFlat,l\u003dt(\"../../plot_api/edit_types\").overrideAll,c\u003de.exports\u003dl(s({x:i.x,y:i.y,z:i.z,value:i.value,isomin:i.isomin,isomax:i.isomax,surface:i.surface,spaceframe:{show:{valType:\"boolean\",dflt:!1},fill:{valType:\"number\",min:0,max:1,dflt:1}},slices:i.slices,caps:i.caps,text:i.text,hovertext:i.hovertext,xhoverformat:i.xhoverformat,yhoverformat:i.yhoverformat,zhoverformat:i.zhoverformat,valuehoverformat:i.valuehoverformat,hovertemplate:i.hovertemplate},n(\"\",{colorAttr:\"`value`\",showScaleDflt:!0,editTypeOverride:\"calc\"}),{colorbar:i.colorbar,opacity:i.opacity,opacityscale:a.opacityscale,lightposition:i.lightposition,lighting:i.lighting,flatshading:i.flatshading,contour:i.contour,hoverinfo:s({},o.hoverinfo),showlegend:s({},o.showlegend,{dflt:!1})}),\"calc\",\"nested\");c.x.editType\u003dc.y.editType\u003dc.z.editType\u003dc.value.editType\u003d\"calc+clearAxisTypes\",c.transforms\u003dvoid 0},{\"../../components/colorscale/attributes\":669,\"../../lib/extend\":789,\"../../plot_api/edit_types\":831,\"../../plots/attributes\":845,\"../isosurface/attributes\":1150,\"../surface/attributes\":1338}],1380:[function(t,e,r){\"use strict\";var n\u003dt(\"gl-mesh3d\"),i\u003dt(\"../../lib/gl_format_color\").parseColorScale,a\u003dt(\"../../lib/str2rgbarray\"),o\u003dt(\"../../components/colorscale\").extractOpts,s\u003dt(\"../../plots/gl3d/zip3\"),l\u003dt(\"../isosurface/convert\").findNearestOnAxis,c\u003dt(\"../isosurface/convert\").generateIsoMeshes;function u(t,e,r){this.scene\u003dt,this.uid\u003dr,this.mesh\u003de,this.name\u003d\"\",this.data\u003dnull,this.showContour\u003d!1}var f\u003du.prototype;f.handlePick\u003dfunction(t){if(t.object\u003d\u003d\u003dthis.mesh){var e\u003dt.data.index,r\u003dthis.data._meshX[e],n\u003dthis.data._meshY[e],i\u003dthis.data._meshZ[e],a\u003dthis.data._Ys.length,o\u003dthis.data._Zs.length,s\u003dl(r,this.data._Xs).id,c\u003dl(n,this.data._Ys).id,u\u003dl(i,this.data._Zs).id,f\u003dt.index\u003du+o*c+o*a*s;t.traceCoordinate\u003d[this.data._meshX[f],this.data._meshY[f],this.data._meshZ[f],this.data._value[f]];var h\u003dthis.data.hovertext||this.data.text;return Array.isArray(h)\u0026\u0026void 0!\u003d\u003dh[f]?t.textLabel\u003dh[f]:h\u0026\u0026(t.textLabel\u003dh),!0}},f.update\u003dfunction(t){var e\u003dthis.scene,r\u003de.fullSceneLayout;function n(t,e,r,n){return e.map((function(e){return t.d2l(e,0,n)*r}))}this.data\u003dc(t);var l\u003d{positions:s(n(r.xaxis,t._meshX,e.dataScale[0],t.xcalendar),n(r.yaxis,t._meshY,e.dataScale[1],t.ycalendar),n(r.zaxis,t._meshZ,e.dataScale[2],t.zcalendar)),cells:s(t._meshI,t._meshJ,t._meshK),lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,opacityscale:t.opacityscale,contourEnable:t.contour.show,contourColor:a(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading},u\u003do(t);l.vertexIntensity\u003dt._meshIntensity,l.vertexIntensityBounds\u003d[u.min,u.max],l.colormap\u003di(t),this.mesh.update(l)},f.dispose\u003dfunction(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports\u003dfunction(t,e){var r\u003dt.glplot.gl,i\u003dn({gl:r}),a\u003dnew u(t,i,e.uid);return i._trace\u003da,a.update(e),t.glplot.add(i),a}},{\"../../components/colorscale\":674,\"../../lib/gl_format_color\":795,\"../../lib/str2rgbarray\":823,\"../../plots/gl3d/zip3\":903,\"../isosurface/convert\":1152,\"gl-mesh3d\":311}],1381:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./attributes\"),a\u003dt(\"../isosurface/defaults\").supplyIsoDefaults,o\u003dt(\"../surface/defaults\").opacityscaleDefaults;e.exports\u003dfunction(t,e,r,s){function l(r,a){return n.coerce(t,e,i,r,a)}a(t,e,r,s,l),o(t,e,s,l)}},{\"../../lib\":799,\"../isosurface/defaults\":1153,\"../surface/defaults\":1341,\"./attributes\":1379}],1382:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),supplyDefaults:t(\"./defaults\"),calc:t(\"../isosurface/calc\"),colorbar:{min:\"cmin\",max:\"cmax\"},plot:t(\"./convert\"),moduleType:\"trace\",name:\"volume\",basePlotModule:t(\"../../plots/gl3d\"),categories:[\"gl3d\",\"showLegend\"],meta:{}}},{\"../../plots/gl3d\":892,\"../isosurface/calc\":1151,\"./attributes\":1379,\"./convert\":1380,\"./defaults\":1381}],1383:[function(t,e,r){\"use strict\";var n\u003dt(\"../bar/attributes\"),i\u003dt(\"../scatter/attributes\").line,a\u003dt(\"../../plots/attributes\"),o\u003dt(\"../../plots/cartesian/axis_format_attributes\").axisHoverFormat,s\u003dt(\"../../plots/template_attributes\").hovertemplateAttrs,l\u003dt(\"../../plots/template_attributes\").texttemplateAttrs,c\u003dt(\"./constants\"),u\u003dt(\"../../lib/extend\").extendFlat,f\u003dt(\"../../components/color\");function h(t){return{marker:{color:u({},n.marker.color,{arrayOk:!1,editType:\"style\"}),line:{color:u({},n.marker.line.color,{arrayOk:!1,editType:\"style\"}),width:u({},n.marker.line.width,{arrayOk:!1,editType:\"style\"}),editType:\"style\"},editType:\"style\"},editType:\"style\"}}e.exports\u003d{measure:{valType:\"data_array\",dflt:[],editType:\"calc\"},base:{valType:\"number\",dflt:null,arrayOk:!1,editType:\"calc\"},x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,xperiod:n.xperiod,yperiod:n.yperiod,xperiod0:n.xperiod0,yperiod0:n.yperiod0,xperiodalignment:n.xperiodalignment,yperiodalignment:n.yperiodalignment,xhoverformat:o(\"x\"),yhoverformat:o(\"y\"),hovertext:n.hovertext,hovertemplate:s({},{keys:c.eventDataKeys}),hoverinfo:u({},a.hoverinfo,{flags:[\"name\",\"x\",\"y\",\"text\",\"initial\",\"delta\",\"final\"]}),textinfo:{valType:\"flaglist\",flags:[\"label\",\"text\",\"initial\",\"delta\",\"final\"],extras:[\"none\"],editType:\"plot\",arrayOk:!1},texttemplate:l({editType:\"plot\"},{keys:c.eventDataKeys.concat([\"label\"])}),text:n.text,textposition:n.textposition,insidetextanchor:n.insidetextanchor,textangle:n.textangle,textfont:n.textfont,insidetextfont:n.insidetextfont,outsidetextfont:n.outsidetextfont,constraintext:n.constraintext,cliponaxis:n.cliponaxis,orientation:n.orientation,offset:n.offset,width:n.width,increasing:h(),decreasing:h(),totals:h(),connector:{line:{color:u({},i.color,{dflt:f.defaultLine}),width:u({},i.width,{editType:\"plot\"}),dash:i.dash,editType:\"plot\"},mode:{valType:\"enumerated\",values:[\"spanning\",\"between\"],dflt:\"between\",editType:\"plot\"},visible:{valType:\"boolean\",dflt:!0,editType:\"plot\"},editType:\"plot\"},offsetgroup:n.offsetgroup,alignmentgroup:n.alignmentgroup}},{\"../../components/color\":662,\"../../lib/extend\":789,\"../../plots/attributes\":845,\"../../plots/cartesian/axis_format_attributes\":852,\"../../plots/template_attributes\":922,\"../bar/attributes\":937,\"../scatter/attributes\":1214,\"./constants\":1385}],1384:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\"),i\u003dt(\"../../plots/cartesian/align_period\"),a\u003dt(\"../../lib\").mergeArray,o\u003dt(\"../scatter/calc_selection\"),s\u003dt(\"../../constants/numerical\").BADNUM;function l(t){return\"a\"\u003d\u003d\u003dt||\"absolute\"\u003d\u003d\u003dt}function c(t){return\"t\"\u003d\u003d\u003dt||\"total\"\u003d\u003d\u003dt}e.exports\u003dfunction(t,e){var r,u,f,h,p\u003dn.getFromId(t,e.xaxis||\"x\"),d\u003dn.getFromId(t,e.yaxis||\"y\");\"h\"\u003d\u003d\u003de.orientation?(r\u003dp.makeCalcdata(e,\"x\"),f\u003dd.makeCalcdata(e,\"y\"),u\u003di(e,d,\"y\",f),h\u003d!!e.yperiodalignment):(r\u003dd.makeCalcdata(e,\"y\"),f\u003dp.makeCalcdata(e,\"x\"),u\u003di(e,p,\"x\",f),h\u003d!!e.xperiodalignment);for(var m,g\u003dMath.min(u.length,r.length),v\u003dnew Array(g),y\u003d0,x\u003d!1,b\u003d0;b\u003cg;b++){var _\u003dr[b]||0,w\u003d!1;(r[b]!\u003d\u003ds||c(e.measure[b])||l(e.measure[b]))\u0026\u0026b+1\u003cg\u0026\u0026(r[b+1]!\u003d\u003ds||c(e.measure[b+1])||l(e.measure[b+1]))\u0026\u0026(w\u003d!0);var T\u003dv[b]\u003d{i:b,p:u[b],s:_,rawS:_,cNext:w};l(e.measure[b])?(y\u003dT.s,T.isSum\u003d!0,T.dir\u003d\"totals\",T.s\u003dy):c(e.measure[b])?(T.isSum\u003d!0,T.dir\u003d\"totals\",T.s\u003dy):(T.isSum\u003d!1,T.dir\u003dT.rawS\u003c0?\"decreasing\":\"increasing\",m\u003dT.s,T.s\u003dy+m,y+\u003dm),\"totals\"\u003d\u003d\u003dT.dir\u0026\u0026(x\u003d!0),h\u0026\u0026(v[b].orig_p\u003df[b]),e.ids\u0026\u0026(T.id\u003dString(e.ids[b])),T.v\u003d(e.base||0)+y}return v.length\u0026\u0026(v[0].hasTotals\u003dx),a(e.text,v,\"tx\"),a(e.hovertext,v,\"htx\"),o(v,e),v}},{\"../../constants/numerical\":775,\"../../lib\":799,\"../../plots/cartesian/align_period\":846,\"../../plots/cartesian/axes\":849,\"../scatter/calc_selection\":1216}],1385:[function(t,e,r){\"use strict\";e.exports\u003d{eventDataKeys:[\"initial\",\"delta\",\"final\"]}},{}],1386:[function(t,e,r){\"use strict\";var n\u003dt(\"../bar/cross_trace_calc\").setGroupPositions;e.exports\u003dfunction(t,e){var r,i,a\u003dt._fullLayout,o\u003dt._fullData,s\u003dt.calcdata,l\u003de.xaxis,c\u003de.yaxis,u\u003d[],f\u003d[],h\u003d[];for(i\u003d0;i\u003co.length;i++){var p\u003do[i];!0\u003d\u003d\u003dp.visible\u0026\u0026p.xaxis\u003d\u003d\u003dl._id\u0026\u0026p.yaxis\u003d\u003d\u003dc._id\u0026\u0026\"waterfall\"\u003d\u003d\u003dp.type\u0026\u0026(r\u003ds[i],\"h\"\u003d\u003d\u003dp.orientation?h.push(r):f.push(r),u.push(r))}var d\u003d{mode:a.waterfallmode,norm:a.waterfallnorm,gap:a.waterfallgap,groupgap:a.waterfallgroupgap};for(n(t,l,c,f,d),n(t,c,l,h,d),i\u003d0;i\u003cu.length;i++){r\u003du[i];for(var m\u003d0;m\u003cr.length;m++){var g\u003dr[m];!1\u003d\u003d\u003dg.isSum\u0026\u0026(g.s0+\u003d0\u003d\u003d\u003dm?0:r[m-1].s),m+1\u003cr.length\u0026\u0026(r[m].nextP0\u003dr[m+1].p0,r[m].nextS0\u003dr[m+1].s0)}}}},{\"../bar/cross_trace_calc\":940}],1387:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"../bar/defaults\").handleGroupingDefaults,a\u003dt(\"../bar/defaults\").handleText,o\u003dt(\"../scatter/xy_defaults\"),s\u003dt(\"../scatter/period_defaults\"),l\u003dt(\"./attributes\"),c\u003dt(\"../../components/color\"),u\u003dt(\"../../constants/delta.js\"),f\u003du.INCREASING.COLOR,h\u003du.DECREASING.COLOR;function p(t,e,r){t(e+\".marker.color\",r),t(e+\".marker.line.color\",c.defaultLine),t(e+\".marker.line.width\")}e.exports\u003d{supplyDefaults:function(t,e,r,i){function c(r,i){return n.coerce(t,e,l,r,i)}if(o(t,e,i,c)){s(t,e,i,c),c(\"xhoverformat\"),c(\"yhoverformat\"),c(\"measure\"),c(\"orientation\",e.x\u0026\u0026!e.y?\"h\":\"v\"),c(\"base\"),c(\"offset\"),c(\"width\"),c(\"text\"),c(\"hovertext\"),c(\"hovertemplate\");var u\u003dc(\"textposition\");if(a(t,e,i,c,u,{moduleHasSelected:!1,moduleHasUnselected:!1,moduleHasConstrain:!0,moduleHasCliponaxis:!0,moduleHasTextangle:!0,moduleHasInsideanchor:!0}),\"none\"!\u003d\u003de.textposition\u0026\u0026(c(\"texttemplate\"),e.texttemplate||c(\"textinfo\")),p(c,\"increasing\",f),p(c,\"decreasing\",h),p(c,\"totals\",\"#4499FF\"),c(\"connector.visible\"))c(\"connector.mode\"),c(\"connector.line.width\")\u0026\u0026(c(\"connector.line.color\"),c(\"connector.line.dash\"))}else e.visible\u003d!1},crossTraceDefaults:function(t,e){var r,a;function o(t){return n.coerce(a._input,a,l,t)}if(\"group\"\u003d\u003d\u003de.waterfallmode)for(var s\u003d0;s\u003ct.length;s++)r\u003d(a\u003dt[s])._input,i(r,a,e,o)}}},{\"../../components/color\":662,\"../../constants/delta.js\":769,\"../../lib\":799,\"../bar/defaults\":941,\"../scatter/period_defaults\":1234,\"../scatter/xy_defaults\":1241,\"./attributes\":1383}],1388:[function(t,e,r){\"use strict\";e.exports\u003dfunction(t,e){return t.x\u003d\"xVal\"in e?e.xVal:e.x,t.y\u003d\"yVal\"in e?e.yVal:e.y,\"initial\"in e\u0026\u0026(t.initial\u003de.initial),\"delta\"in e\u0026\u0026(t.delta\u003de.delta),\"final\"in e\u0026\u0026(t.final\u003de.final),e.xa\u0026\u0026(t.xaxis\u003de.xa),e.ya\u0026\u0026(t.yaxis\u003de.ya),t}},{}],1389:[function(t,e,r){\"use strict\";var n\u003dt(\"../../plots/cartesian/axes\").hoverLabelText,i\u003dt(\"../../components/color\").opacity,a\u003dt(\"../bar/hover\").hoverOnBars,o\u003dt(\"../../constants/delta.js\"),s\u003do.INCREASING.SYMBOL,l\u003do.DECREASING.SYMBOL;e.exports\u003dfunction(t,e,r,o,c){var u\u003da(t,e,r,o,c);if(u){var f\u003du.cd,h\u003df[0].trace,p\u003d\"h\"\u003d\u003d\u003dh.orientation,d\u003dp?\"x\":\"y\",m\u003dp?t.xa:t.ya,g\u003df[u.index],v\u003dg.isSum?g.b+g.s:g.rawS;if(!g.isSum){u.initial\u003dg.b+g.s-v,u.delta\u003dv,u.final\u003du.initial+u.delta;var y\u003dk(Math.abs(u.delta));u.deltaLabel\u003dv\u003c0?\"(\"+y+\")\":y,u.finalLabel\u003dk(u.final),u.initialLabel\u003dk(u.initial)}var x\u003dg.hi||h.hoverinfo,b\u003d[];if(x\u0026\u0026\"none\"!\u003d\u003dx\u0026\u0026\"skip\"!\u003d\u003dx){var _\u003d\"all\"\u003d\u003d\u003dx,w\u003dx.split(\"+\"),T\u003dfunction(t){return _||-1!\u003d\u003dw.indexOf(t)};g.isSum||(!T(\"final\")||T(p?\"x\":\"y\")||b.push(u.finalLabel),T(\"delta\")\u0026\u0026(v\u003c0?b.push(u.deltaLabel+\" \"+l):b.push(u.deltaLabel+\" \"+s)),T(\"initial\")\u0026\u0026b.push(\"Initial: \"+u.initialLabel))}return b.length\u0026\u0026(u.extraText\u003db.join(\"\u003cbr\u003e\")),u.color\u003dfunction(t,e){var r\u003dt[e.dir].marker,n\u003dr.color,a\u003dr.line.color,o\u003dr.line.width;if(i(n))return n;if(i(a)\u0026\u0026o)return a}(h,g),[u]}function k(t){return n(m,t,h[d+\"hoverformat\"])}}},{\"../../components/color\":662,\"../../constants/delta.js\":769,\"../../plots/cartesian/axes\":849,\"../bar/hover\":944}],1390:[function(t,e,r){\"use strict\";e.exports\u003d{attributes:t(\"./attributes\"),layoutAttributes:t(\"./layout_attributes\"),supplyDefaults:t(\"./defaults\").supplyDefaults,crossTraceDefaults:t(\"./defaults\").crossTraceDefaults,supplyLayoutDefaults:t(\"./layout_defaults\"),calc:t(\"./calc\"),crossTraceCalc:t(\"./cross_trace_calc\"),plot:t(\"./plot\"),style:t(\"./style\").style,hoverPoints:t(\"./hover\"),eventData:t(\"./event_data\"),selectPoints:t(\"../bar/select\"),moduleType:\"trace\",name:\"waterfall\",basePlotModule:t(\"../../plots/cartesian\"),categories:[\"bar-like\",\"cartesian\",\"svg\",\"oriented\",\"showLegend\",\"zoomScale\"],meta:{}}},{\"../../plots/cartesian\":863,\"../bar/select\":949,\"./attributes\":1383,\"./calc\":1384,\"./cross_trace_calc\":1386,\"./defaults\":1387,\"./event_data\":1388,\"./hover\":1389,\"./layout_attributes\":1391,\"./layout_defaults\":1392,\"./plot\":1393,\"./style\":1394}],1391:[function(t,e,r){\"use strict\";e.exports\u003d{waterfallmode:{valType:\"enumerated\",values:[\"group\",\"overlay\"],dflt:\"group\",editType:\"calc\"},waterfallgap:{valType:\"number\",min:0,max:1,editType:\"calc\"},waterfallgroupgap:{valType:\"number\",min:0,max:1,dflt:0,editType:\"calc\"}}},{}],1392:[function(t,e,r){\"use strict\";var n\u003dt(\"../../lib\"),i\u003dt(\"./layout_attributes\");e.exports\u003dfunction(t,e,r){var a\u003d!1;function o(r,a){return n.coerce(t,e,i,r,a)}for(var s\u003d0;s\u003cr.length;s++){var l\u003dr[s];if(l.visible\u0026\u0026\"waterfall\"\u003d\u003d\u003dl.type){a\u003d!0;break}}a\u0026\u0026(o(\"waterfallmode\"),o(\"waterfallgap\",.2),o(\"waterfallgroupgap\"))}},{\"../../lib\":799,\"./layout_attributes\":1391}],1393:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../lib\"),a\u003dt(\"../../components/drawing\"),o\u003dt(\"../../constants/numerical\").BADNUM,s\u003dt(\"../bar/plot\"),l\u003dt(\"../bar/uniform_text\").clearMinTextSize;e.exports\u003dfunction(t,e,r,c){var u\u003dt._fullLayout;l(\"waterfall\",u),s.plot(t,e,r,c,{mode:u.waterfallmode,norm:u.waterfallmode,gap:u.waterfallgap,groupgap:u.waterfallgroupgap}),function(t,e,r,s){var l\u003de.xaxis,c\u003de.yaxis;i.makeTraceGroups(s,r,\"trace bars\").each((function(r){var s\u003dn.select(this),u\u003dr[0].trace,f\u003di.ensureSingle(s,\"g\",\"lines\");if(u.connector\u0026\u0026u.connector.visible){var h\u003d\"h\"\u003d\u003d\u003du.orientation,p\u003du.connector.mode,d\u003df.selectAll(\"g.line\").data(i.identity);d.enter().append(\"g\").classed(\"line\",!0),d.exit().remove();var m\u003dd.size();d.each((function(r,s){if(s\u003d\u003d\u003dm-1||r.cNext){var u\u003dfunction(t,e,r,n){var i\u003d[],a\u003d[],o\u003dn?e:r,s\u003dn?r:e;return i[0]\u003do.c2p(t.s0,!0),a[0]\u003ds.c2p(t.p0,!0),i[1]\u003do.c2p(t.s1,!0),a[1]\u003ds.c2p(t.p1,!0),i[2]\u003do.c2p(t.nextS0,!0),a[2]\u003ds.c2p(t.nextP0,!0),n?[i,a]:[a,i]}(r,l,c,h),f\u003du[0],d\u003du[1],g\u003d\"\";f[0]!\u003d\u003do\u0026\u0026d[0]!\u003d\u003do\u0026\u0026f[1]!\u003d\u003do\u0026\u0026d[1]!\u003d\u003do\u0026\u0026(\"spanning\"\u003d\u003d\u003dp\u0026\u0026!r.isSum\u0026\u0026s\u003e0\u0026\u0026(g+\u003dh?\"M\"+f[0]+\",\"+d[1]+\"V\"+d[0]:\"M\"+f[1]+\",\"+d[0]+\"H\"+f[0]),\"between\"!\u003d\u003dp\u0026\u0026(r.isSum||s\u003cm-1)\u0026\u0026(g+\u003dh?\"M\"+f[1]+\",\"+d[0]+\"V\"+d[1]:\"M\"+f[0]+\",\"+d[1]+\"H\"+f[1]),f[2]!\u003d\u003do\u0026\u0026d[2]!\u003d\u003do\u0026\u0026(g+\u003dh?\"M\"+f[1]+\",\"+d[1]+\"V\"+d[2]:\"M\"+f[1]+\",\"+d[1]+\"H\"+f[2])),\"\"\u003d\u003d\u003dg\u0026\u0026(g\u003d\"M0,0Z\"),i.ensureSingle(n.select(this),\"path\").attr(\"d\",g).call(a.setClipUrl,e.layerClipId,t)}}))}else f.remove()}))}(t,e,r,c)}},{\"../../components/drawing\":684,\"../../constants/numerical\":775,\"../../lib\":799,\"../bar/plot\":948,\"../bar/uniform_text\":953,\"@plotly/d3\":58}],1394:[function(t,e,r){\"use strict\";var n\u003dt(\"@plotly/d3\"),i\u003dt(\"../../components/drawing\"),a\u003dt(\"../../components/color\"),o\u003dt(\"../../constants/interactions\").DESELECTDIM,s\u003dt(\"../bar/style\"),l\u003dt(\"../bar/uniform_text\").resizeText,c\u003ds.styleTextPoints;e.exports\u003d{style:function(t,e,r){var s\u003dr||n.select(t).selectAll(\"g.waterfalllayer\").selectAll(\"g.trace\");l(t,s,\"waterfall\"),s.style(\"opacity\",(function(t){return t[0].trace.opacity})),s.each((function(e){var r\u003dn.select(this),s\u003de[0].trace;r.selectAll(\".point \u003e path\").each((function(t){if(!t.isBlank){var e\u003ds[t.dir].marker;n.select(this).call(a.fill,e.color).call(a.stroke,e.line.color).call(i.dashLine,e.line.dash,e.line.width).style(\"opacity\",s.selectedpoints\u0026\u0026!t.selected?o:1)}})),c(r,s,t),r.selectAll(\".lines\").each((function(){var t\u003ds.connector.line;i.lineGroupStyle(n.select(this).selectAll(\"path\"),t.width,t.color,t.dash)}))}))}}},{\"../../components/color\":662,\"../../components/drawing\":684,\"../../constants/interactions\":774,\"../bar/style\":951,\"../bar/uniform_text\":953,\"@plotly/d3\":58}],1395:[function(t,e,r){\"use strict\";var n\u003dt(\"../plots/cartesian/axes\"),i\u003dt(\"../lib\"),a\u003dt(\"../plot_api/plot_schema\"),o\u003dt(\"./helpers\").pointsAccessorFunction,s\u003dt(\"../constants/numerical\").BADNUM;r.moduleType\u003d\"transform\",r.name\u003d\"aggregate\";var l\u003dr.attributes\u003d{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},groups:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},aggregations:{_isLinkedToArray:\"aggregation\",target:{valType:\"string\",editType:\"calc\"},func:{valType:\"enumerated\",values:[\"count\",\"sum\",\"avg\",\"median\",\"mode\",\"rms\",\"stddev\",\"min\",\"max\",\"first\",\"last\",\"change\",\"range\"],dflt:\"first\",editType:\"calc\"},funcmode:{valType:\"enumerated\",values:[\"sample\",\"population\"],dflt:\"sample\",editType:\"calc\"},enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},editType:\"calc\"},editType:\"calc\"},c\u003dl.aggregations;function u(t,e,r,a){if(a.enabled){for(var o\u003da.target,l\u003di.nestedProperty(e,o),c\u003dl.get(),u\u003dfunction(t,e){var r\u003dt.func,n\u003de.d2c,a\u003de.c2d;switch(r){case\"count\":return f;case\"first\":return h;case\"last\":return p;case\"sum\":return function(t,e){for(var r\u003d0,i\u003d0;i\u003ce.length;i++){var o\u003dn(t[e[i]]);o!\u003d\u003ds\u0026\u0026(r+\u003do)}return a(r)};case\"avg\":return function(t,e){for(var r\u003d0,i\u003d0,o\u003d0;o\u003ce.length;o++){var l\u003dn(t[e[o]]);l!\u003d\u003ds\u0026\u0026(r+\u003dl,i++)}return i?a(r/i):s};case\"min\":return function(t,e){for(var r\u003d1/0,i\u003d0;i\u003ce.length;i++){var o\u003dn(t[e[i]]);o!\u003d\u003ds\u0026\u0026(r\u003dMath.min(r,o))}return r\u003d\u003d\u003d1/0?s:a(r)};case\"max\":return function(t,e){for(var r\u003d-1/0,i\u003d0;i\u003ce.length;i++){var o\u003dn(t[e[i]]);o!\u003d\u003ds\u0026\u0026(r\u003dMath.max(r,o))}return r\u003d\u003d\u003d-1/0?s:a(r)};case\"range\":return function(t,e){for(var r\u003d1/0,i\u003d-1/0,o\u003d0;o\u003ce.length;o++){var l\u003dn(t[e[o]]);l!\u003d\u003ds\u0026\u0026(r\u003dMath.min(r,l),i\u003dMath.max(i,l))}return i\u003d\u003d\u003d-1/0||r\u003d\u003d\u003d1/0?s:a(i-r)};case\"change\":return function(t,e){var r\u003dn(t[e[0]]),i\u003dn(t[e[e.length-1]]);return r\u003d\u003d\u003ds||i\u003d\u003d\u003ds?s:a(i-r)};case\"median\":return function(t,e){for(var r\u003d[],o\u003d0;o\u003ce.length;o++){var l\u003dn(t[e[o]]);l!\u003d\u003ds\u0026\u0026r.push(l)}if(!r.length)return s;r.sort(i.sorterAsc);var c\u003d(r.length-1)/2;return a((r[Math.floor(c)]+r[Math.ceil(c)])/2)};case\"mode\":return function(t,e){for(var r\u003d{},i\u003d0,o\u003ds,l\u003d0;l\u003ce.length;l++){var c\u003dn(t[e[l]]);if(c!\u003d\u003ds){var u\u003dr[c]\u003d(r[c]||0)+1;u\u003ei\u0026\u0026(i\u003du,o\u003dc)}}return i?a(o):s};case\"rms\":return function(t,e){for(var r\u003d0,i\u003d0,o\u003d0;o\u003ce.length;o++){var l\u003dn(t[e[o]]);l!\u003d\u003ds\u0026\u0026(r+\u003dl*l,i++)}return i?a(Math.sqrt(r/i)):s};case\"stddev\":return function(e,r){var i,a\u003d0,o\u003d0,l\u003d1,c\u003ds;for(i\u003d0;i\u003cr.length\u0026\u0026c\u003d\u003d\u003ds;i++)c\u003dn(e[r[i]]);if(c\u003d\u003d\u003ds)return s;for(;i\u003cr.length;i++){var u\u003dn(e[r[i]]);if(u!\u003d\u003ds){var f\u003du-c;a+\u003df,o+\u003df*f,l++}}var h\u003d\"sample\"\u003d\u003d\u003dt.funcmode?l-1:l;return h?Math.sqrt((o-a*a/l)/h):0}}}(a,n.getDataConversions(t,e,o,c)),d\u003dnew Array(r.length),m\u003d0;m\u003cr.length;m++)d[m]\u003du(c,r[m]);l.set(d),\"count\"\u003d\u003d\u003da.func\u0026\u0026i.pushUnique(e._arrayAttrs,o)}}function f(t,e){return e.length}function h(t,e){return t[e[0]]}function p(t,e){return t[e[e.length-1]]}r.supplyDefaults\u003dfunction(t,e){var r,n\u003d{};function o(e,r){return i.coerce(t,n,l,e,r)}if(!o(\"enabled\"))return n;var s\u003da.findArrayAttributes(e),u\u003d{};for(r\u003d0;r\u003cs.length;r++)u[s[r]]\u003d1;var f\u003do(\"groups\");if(!Array.isArray(f)){if(!u[f])return n.enabled\u003d!1,n;u[f]\u003d0}var h,p\u003dt.aggregations||[],d\u003dn.aggregations\u003dnew Array(p.length);function m(t,e){return i.coerce(p[r],h,c,t,e)}for(r\u003d0;r\u003cp.length;r++){h\u003d{_index:r};var g\u003dm(\"target\"),v\u003dm(\"func\");m(\"enabled\")\u0026\u0026g\u0026\u0026(u[g]||\"count\"\u003d\u003d\u003dv\u0026\u0026void 0\u003d\u003d\u003du[g])?(\"stddev\"\u003d\u003d\u003dv\u0026\u0026m(\"funcmode\"),u[g]\u003d0,d[r]\u003dh):d[r]\u003d{enabled:!1,_index:r}}for(r\u003d0;r\u003cs.length;r++)u[s[r]]\u0026\u0026d.push({target:s[r],func:c.func.dflt,enabled:!0,_index:-1});return n},r.calcTransform\u003dfunction(t,e,r){if(r.enabled){var n\u003dr.groups,a\u003di.getTargetArray(e,{target:n});if(a){var s,l,c,f,h\u003d{},p\u003d{},d\u003d[],m\u003do(e.transforms,r),g\u003da.length;for(e._length\u0026\u0026(g\u003dMath.min(g,e._length)),s\u003d0;s\u003cg;s++)void 0\u003d\u003d\u003d(c\u003dh[l\u003da[s]])?(h[l]\u003dd.length,f\u003d[s],d.push(f),p[h[l]]\u003dm(s)):(d[c].push(s),p[h[l]]\u003d(p[h[l]]||[]).concat(m(s)));r._indexToPoints\u003dp;var v\u003dr.aggregations;for(s\u003d0;s\u003cv.length;s++)u(t,e,d,v[s]);\"string\"\u003d\u003dtypeof n\u0026\u0026u(t,e,d,{target:n,func:\"first\",enabled:!0}),e._length\u003dd.length}}}},{\"../constants/numerical\":775,\"../lib\":799,\"../plot_api/plot_schema\":837,\"../plots/cartesian/axes\":849,\"./helpers\":1398}],1396:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../registry\"),a\u003dt(\"../plots/cartesian/axes\"),o\u003dt(\"./helpers\").pointsAccessorFunction,s\u003dt(\"../constants/filter_ops\"),l\u003ds.COMPARISON_OPS,c\u003ds.INTERVAL_OPS,u\u003ds.SET_OPS;r.moduleType\u003d\"transform\",r.name\u003d\"filter\",r.attributes\u003d{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},target:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},operation:{valType:\"enumerated\",values:[].concat(l).concat(c).concat(u),dflt:\"\u003d\",editType:\"calc\"},value:{valType:\"any\",dflt:0,editType:\"calc\"},preservegaps:{valType:\"boolean\",dflt:!1,editType:\"calc\"},editType:\"calc\"},r.supplyDefaults\u003dfunction(t){var e\u003d{};function a(i,a){return n.coerce(t,e,r.attributes,i,a)}if(a(\"enabled\")){var o\u003da(\"target\");if(n.isArrayOrTypedArray(o)\u0026\u00260\u003d\u003d\u003do.length)return e.enabled\u003d!1,e;a(\"preservegaps\"),a(\"operation\"),a(\"value\");var s\u003di.getComponentMethod(\"calendars\",\"handleDefaults\");s(t,e,\"valuecalendar\",null),s(t,e,\"targetcalendar\",null)}return e},r.calcTransform\u003dfunction(t,e,r){if(r.enabled){var i\u003dn.getTargetArray(e,r);if(i){var s\u003dr.target,f\u003di.length;e._length\u0026\u0026(f\u003dMath.min(f,e._length));var h\u003dr.targetcalendar,p\u003de._arrayAttrs,d\u003dr.preservegaps;if(\"string\"\u003d\u003dtypeof s){var m\u003dn.nestedProperty(e,s+\"calendar\").get();m\u0026\u0026(h\u003dm)}var g,v,y\u003dfunction(t,e,r){var n\u003dt.operation,i\u003dt.value,a\u003dArray.isArray(i);function o(t){return-1!\u003d\u003dt.indexOf(n)}var s,f\u003dfunction(r){return e(r,0,t.valuecalendar)},h\u003dfunction(t){return e(t,0,r)};o(l)?s\u003df(a?i[0]:i):o(c)?s\u003da?[f(i[0]),f(i[1])]:[f(i),f(i)]:o(u)\u0026\u0026(s\u003da?i.map(f):[f(i)]);switch(n){case\"\u003d\":return function(t){return h(t)\u003d\u003d\u003ds};case\"!\u003d\":return function(t){return h(t)!\u003d\u003ds};case\"\u003c\":return function(t){return h(t)\u003cs};case\"\u003c\u003d\":return function(t){return h(t)\u003c\u003ds};case\"\u003e\":return function(t){return h(t)\u003es};case\"\u003e\u003d\":return function(t){return h(t)\u003e\u003ds};case\"[]\":return function(t){var e\u003dh(t);return e\u003e\u003ds[0]\u0026\u0026e\u003c\u003ds[1]};case\"()\":return function(t){var e\u003dh(t);return e\u003es[0]\u0026\u0026e\u003cs[1]};case\"[)\":return function(t){var e\u003dh(t);return e\u003e\u003ds[0]\u0026\u0026e\u003cs[1]};case\"(]\":return function(t){var e\u003dh(t);return e\u003es[0]\u0026\u0026e\u003c\u003ds[1]};case\"][\":return function(t){var e\u003dh(t);return e\u003c\u003ds[0]||e\u003e\u003ds[1]};case\")(\":return function(t){var e\u003dh(t);return e\u003cs[0]||e\u003es[1]};case\"](\":return function(t){var e\u003dh(t);return e\u003c\u003ds[0]||e\u003es[1]};case\")[\":return function(t){var e\u003dh(t);return e\u003cs[0]||e\u003e\u003ds[1]};case\"{}\":return function(t){return-1!\u003d\u003ds.indexOf(h(t))};case\"}{\":return function(t){return-1\u003d\u003d\u003ds.indexOf(h(t))}}}(r,a.getDataToCoordFunc(t,e,s,i),h),x\u003d{},b\u003d{},_\u003d0;d?(g\u003dfunction(t){x[t.astr]\u003dn.extendDeep([],t.get()),t.set(new Array(f))},v\u003dfunction(t,e){var r\u003dx[t.astr][e];t.get()[e]\u003dr}):(g\u003dfunction(t){x[t.astr]\u003dn.extendDeep([],t.get()),t.set([])},v\u003dfunction(t,e){var r\u003dx[t.astr][e];t.get().push(r)}),k(g);for(var w\u003do(e.transforms,r),T\u003d0;T\u003cf;T++){y(i[T])?(k(v,T),b[_++]\u003dw(T)):d\u0026\u0026_++}r._indexToPoints\u003db,e._length\u003d_}}function k(t,r){for(var i\u003d0;i\u003cp.length;i++){t(n.nestedProperty(e,p[i]),r)}}}},{\"../constants/filter_ops\":771,\"../lib\":799,\"../plots/cartesian/axes\":849,\"../registry\":927,\"./helpers\":1398}],1397:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plot_api/plot_schema\"),a\u003dt(\"../plots/plots\"),o\u003dt(\"./helpers\").pointsAccessorFunction;function s(t,e){var r,s,l,c,u,f,h,p,d,m,g\u003de.transform,v\u003de.transformIndex,y\u003dt.transforms[v].groups,x\u003do(t.transforms,g);if(!n.isArrayOrTypedArray(y)||0\u003d\u003d\u003dy.length)return[t];var b\u003dn.filterUnique(y),_\u003dnew Array(b.length),w\u003dy.length,T\u003di.findArrayAttributes(t),k\u003dg.styles||[],M\u003d{};for(r\u003d0;r\u003ck.length;r++)M[k[r].target]\u003dk[r].value;g.styles\u0026\u0026(m\u003dn.keyedContainer(g,\"styles\",\"target\",\"value.name\"));var A\u003d{},S\u003d{};for(r\u003d0;r\u003cb.length;r++){A[f\u003db[r]]\u003dr,S[f]\u003d0,(h\u003d_[r]\u003dn.extendDeepNoArrays({},t))._group\u003df,h.transforms[v]._indexToPoints\u003d{};var E\u003dnull;for(m\u0026\u0026(E\u003dm.get(f)),h.name\u003dE||\"\"\u003d\u003d\u003dE?E:n.templateString(g.nameformat,{trace:t.name,group:f}),p\u003dh.transforms,h.transforms\u003d[],s\u003d0;s\u003cp.length;s++)h.transforms[s]\u003dn.extendDeepNoArrays({},p[s]);for(s\u003d0;s\u003cT.length;s++)n.nestedProperty(h,T[s]).set([])}for(l\u003d0;l\u003cT.length;l++){for(c\u003dT[l],s\u003d0,d\u003d[];s\u003cb.length;s++)d[s]\u003dn.nestedProperty(_[s],c).get();for(u\u003dn.nestedProperty(t,c).get(),s\u003d0;s\u003cw;s++)d[A[y[s]]].push(u[s])}for(s\u003d0;s\u003cw;s++){(h\u003d_[A[y[s]]]).transforms[v]._indexToPoints[S[y[s]]]\u003dx(s),S[y[s]]++}for(r\u003d0;r\u003cb.length;r++)f\u003db[r],h\u003d_[r],a.clearExpandedTraceDefaultColors(h),h\u003dn.extendDeepNoArrays(h,M[f]||{});return _}r.moduleType\u003d\"transform\",r.name\u003d\"groupby\",r.attributes\u003d{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},groups:{valType:\"data_array\",dflt:[],editType:\"calc\"},nameformat:{valType:\"string\",editType:\"calc\"},styles:{_isLinkedToArray:\"style\",target:{valType:\"string\",editType:\"calc\"},value:{valType:\"any\",dflt:{},editType:\"calc\",_compareAsJSON:!0},editType:\"calc\"},editType:\"calc\"},r.supplyDefaults\u003dfunction(t,e,i){var a,o\u003d{};function s(e,i){return n.coerce(t,o,r.attributes,e,i)}if(!s(\"enabled\"))return o;s(\"groups\"),s(\"nameformat\",i._dataLength\u003e1?\"%{group} (%{trace})\":\"%{group}\");var l\u003dt.styles,c\u003do.styles\u003d[];if(l)for(a\u003d0;a\u003cl.length;a++){var u\u003dc[a]\u003d{};n.coerce(l[a],c[a],r.attributes.styles,\"target\");var f\u003dn.coerce(l[a],c[a],r.attributes.styles,\"value\");n.isPlainObject(f)?u.value\u003dn.extendDeep({},f):f\u0026\u0026delete u.value}return o},r.transform\u003dfunction(t,e){var r,n,i,a\u003d[];for(n\u003d0;n\u003ct.length;n++)for(r\u003ds(t[n],e),i\u003d0;i\u003cr.length;i++)a.push(r[i]);return a}},{\"../lib\":799,\"../plot_api/plot_schema\":837,\"../plots/plots\":913,\"./helpers\":1398}],1398:[function(t,e,r){\"use strict\";r.pointsAccessorFunction\u003dfunction(t,e){for(var r,n,i\u003d0;i\u003ct.length\u0026\u0026(r\u003dt[i])!\u003d\u003de;i++)r._indexToPoints\u0026\u0026!1!\u003d\u003dr.enabled\u0026\u0026(n\u003dr._indexToPoints);return n?function(t){return n[t]}:function(t){return[t]}}},{}],1399:[function(t,e,r){\"use strict\";var n\u003dt(\"../lib\"),i\u003dt(\"../plots/cartesian/axes\"),a\u003dt(\"./helpers\").pointsAccessorFunction,o\u003dt(\"../constants/numerical\").BADNUM;r.moduleType\u003d\"transform\",r.name\u003d\"sort\",r.attributes\u003d{enabled:{valType:\"boolean\",dflt:!0,editType:\"calc\"},target:{valType:\"string\",strict:!0,noBlank:!0,arrayOk:!0,dflt:\"x\",editType:\"calc\"},order:{valType:\"enumerated\",values:[\"ascending\",\"descending\"],dflt:\"ascending\",editType:\"calc\"},editType:\"calc\"},r.supplyDefaults\u003dfunction(t){var e\u003d{};function i(i,a){return n.coerce(t,e,r.attributes,i,a)}return i(\"enabled\")\u0026\u0026(i(\"target\"),i(\"order\")),e},r.calcTransform\u003dfunction(t,e,r){if(r.enabled){var s\u003dn.getTargetArray(e,r);if(s){var l\u003dr.target,c\u003ds.length;e._length\u0026\u0026(c\u003dMath.min(c,e._length));var u,f,h\u003de._arrayAttrs,p\u003dfunction(t,e,r,n){var i,a\u003dnew Array(n),s\u003dnew Array(n);for(i\u003d0;i\u003cn;i++)a[i]\u003d{v:e[i],i:i};for(a.sort(function(t,e){switch(t.order){case\"ascending\":return function(t,r){var n\u003de(t.v),i\u003de(r.v);return n\u003d\u003d\u003do?1:i\u003d\u003d\u003do?-1:n-i};case\"descending\":return function(t,r){var n\u003de(t.v),i\u003de(r.v);return n\u003d\u003d\u003do?1:i\u003d\u003d\u003do?-1:i-n}}}(t,r)),i\u003d0;i\u003cn;i++)s[i]\u003da[i].i;return s}(r,s,i.getDataToCoordFunc(t,e,l,s),c),d\u003da(e.transforms,r),m\u003d{};for(u\u003d0;u\u003ch.length;u++){var g\u003dn.nestedProperty(e,h[u]),v\u003dg.get(),y\u003dnew Array(c);for(f\u003d0;f\u003cc;f++)y[f]\u003dv[p[f]];g.set(y)}for(f\u003d0;f\u003cc;f++)m[f]\u003dd(p[f]);r._indexToPoints\u003dm,e._length\u003dc}}}},{\"../constants/numerical\":775,\"../lib\":799,\"../plots/cartesian/axes\":849,\"./helpers\":1398}],1400:[function(t,e,r){\"use strict\";r.version\u003d\"2.2.0\"},{}]},{},[27])(27)}));\u003c/script\u003e                \u003cdiv id\u003d\"2e15c8bd-d998-46bf-8f69-b9c324164c9b\" class\u003d\"plotly-graph-div\" style\u003d\"height:100%; width:100%;\"\u003e\u003c/div\u003e            \u003cscript type\u003d\"text/javascript\"\u003e                                    window.PLOTLYENV\u003dwindow.PLOTLYENV || {};                                    if (document.getElementById(\"2e15c8bd-d998-46bf-8f69-b9c324164c9b\")) {                    Plotly.newPlot(                        \"2e15c8bd-d998-46bf-8f69-b9c324164c9b\",                        [{\"type\":\"scatter\",\"y\":[2,1,4,3]},{\"type\":\"bar\",\"y\":[1,4,3,2]}],                        {\"template\":{\"data\":{\"bar\":[{\"error_x\":{\"color\":\"#2a3f5f\"},\"error_y\":{\"color\":\"#2a3f5f\"},\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"bar\"}],\"barpolar\":[{\"marker\":{\"line\":{\"color\":\"#E5ECF6\",\"width\":0.5},\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"barpolar\"}],\"carpet\":[{\"aaxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"baxis\":{\"endlinecolor\":\"#2a3f5f\",\"gridcolor\":\"white\",\"linecolor\":\"white\",\"minorgridcolor\":\"white\",\"startlinecolor\":\"#2a3f5f\"},\"type\":\"carpet\"}],\"choropleth\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"choropleth\"}],\"contour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"contour\"}],\"contourcarpet\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"contourcarpet\"}],\"heatmap\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmap\"}],\"heatmapgl\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"heatmapgl\"}],\"histogram\":[{\"marker\":{\"pattern\":{\"fillmode\":\"overlay\",\"size\":10,\"solidity\":0.2}},\"type\":\"histogram\"}],\"histogram2d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2d\"}],\"histogram2dcontour\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"histogram2dcontour\"}],\"mesh3d\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"type\":\"mesh3d\"}],\"parcoords\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"parcoords\"}],\"pie\":[{\"automargin\":true,\"type\":\"pie\"}],\"scatter\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter\"}],\"scatter3d\":[{\"line\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatter3d\"}],\"scattercarpet\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattercarpet\"}],\"scattergeo\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergeo\"}],\"scattergl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattergl\"}],\"scattermapbox\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scattermapbox\"}],\"scatterpolar\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolar\"}],\"scatterpolargl\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterpolargl\"}],\"scatterternary\":[{\"marker\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"type\":\"scatterternary\"}],\"surface\":[{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"},\"colorscale\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"type\":\"surface\"}],\"table\":[{\"cells\":{\"fill\":{\"color\":\"#EBF0F8\"},\"line\":{\"color\":\"white\"}},\"header\":{\"fill\":{\"color\":\"#C8D4E3\"},\"line\":{\"color\":\"white\"}},\"type\":\"table\"}]},\"layout\":{\"annotationdefaults\":{\"arrowcolor\":\"#2a3f5f\",\"arrowhead\":0,\"arrowwidth\":1},\"autotypenumbers\":\"strict\",\"coloraxis\":{\"colorbar\":{\"outlinewidth\":0,\"ticks\":\"\"}},\"colorscale\":{\"diverging\":[[0,\"#8e0152\"],[0.1,\"#c51b7d\"],[0.2,\"#de77ae\"],[0.3,\"#f1b6da\"],[0.4,\"#fde0ef\"],[0.5,\"#f7f7f7\"],[0.6,\"#e6f5d0\"],[0.7,\"#b8e186\"],[0.8,\"#7fbc41\"],[0.9,\"#4d9221\"],[1,\"#276419\"]],\"sequential\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]],\"sequentialminus\":[[0.0,\"#0d0887\"],[0.1111111111111111,\"#46039f\"],[0.2222222222222222,\"#7201a8\"],[0.3333333333333333,\"#9c179e\"],[0.4444444444444444,\"#bd3786\"],[0.5555555555555556,\"#d8576b\"],[0.6666666666666666,\"#ed7953\"],[0.7777777777777778,\"#fb9f3a\"],[0.8888888888888888,\"#fdca26\"],[1.0,\"#f0f921\"]]},\"colorway\":[\"#636efa\",\"#EF553B\",\"#00cc96\",\"#ab63fa\",\"#FFA15A\",\"#19d3f3\",\"#FF6692\",\"#B6E880\",\"#FF97FF\",\"#FECB52\"],\"font\":{\"color\":\"#2a3f5f\"},\"geo\":{\"bgcolor\":\"white\",\"lakecolor\":\"white\",\"landcolor\":\"#E5ECF6\",\"showlakes\":true,\"showland\":true,\"subunitcolor\":\"white\"},\"hoverlabel\":{\"align\":\"left\"},\"hovermode\":\"closest\",\"mapbox\":{\"style\":\"light\"},\"paper_bgcolor\":\"white\",\"plot_bgcolor\":\"#E5ECF6\",\"polar\":{\"angularaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"radialaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"scene\":{\"xaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"yaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"},\"zaxis\":{\"backgroundcolor\":\"#E5ECF6\",\"gridcolor\":\"white\",\"gridwidth\":2,\"linecolor\":\"white\",\"showbackground\":true,\"ticks\":\"\",\"zerolinecolor\":\"white\"}},\"shapedefaults\":{\"line\":{\"color\":\"#2a3f5f\"}},\"ternary\":{\"aaxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"baxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"},\"bgcolor\":\"#E5ECF6\",\"caxis\":{\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\"}},\"title\":{\"x\":0.05},\"xaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2},\"yaxis\":{\"automargin\":true,\"gridcolor\":\"white\",\"linecolor\":\"white\",\"ticks\":\"\",\"title\":{\"standoff\":15},\"zerolinecolor\":\"white\",\"zerolinewidth\":2}}},\"title\":{\"text\":\"Hello Figure\"}},                        {\"responsive\": true}                    )                };                            \u003c/script\u003e        \u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e\n"
          }
        ]
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1627795866313_860474115",
      "id": "paragraph_1627795866313_860474115",
      "dateCreated": "2021-08-01 05:31:06.313",
      "dateStarted": "2021-08-01 05:31:26.520",
      "dateFinished": "2021-08-01 05:31:32.941",
      "status": "FINISHED"
    },
    {
      "text": "%python.ipython\n",
      "user": "anonymous",
      "dateUpdated": "2021-08-01 05:31:26.520",
      "progress": 0,
      "config": {},
      "settings": {
        "params": {},
        "forms": {}
      },
      "apps": [],
      "runtimeInfos": {},
      "progressUpdateIntervalMs": 500,
      "jobName": "paragraph_1627795886520_751874539",
      "id": "paragraph_1627795886520_751874539",
      "dateCreated": "2021-08-01 05:31:26.520",
      "status": "READY"
    }
  ],
  "name": "2. IPython Visualization Tutorial",
  "id": "2F1S9ZY8Z",
  "defaultInterpreterGroup": "spark",
  "version": "0.9.0-SNAPSHOT",
  "noteParams": {},
  "noteForms": {},
  "angularObjects": {},
  "config": {
    "isZeppelinNotebookCronEnable": false
  },
  "info": {}
}