diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..bfd7ac53df9f103f6dc8853738c63fd364445fde
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,20 @@
+# Configuration for known file extensions
+[*.{css,js,json,less,md,py,rst,sass,scss,xml,yaml,yml}]
+charset = utf-8
+end_of_line = lf
+indent_size = 4
+indent_style = space
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{json,yml,yaml,rst,md}]
+indent_size = 2
+
+# Do not configure editor for libs and autogenerated content
+[{*/static/{lib,src/lib}/**,*/static/description/index.html,*/readme/../README.rst}]
+charset = unset
+end_of_line = unset
+indent_size = unset
+indent_style = unset
+insert_final_newline = false
+trim_trailing_whitespace = false
diff --git a/.eslintrc.yml b/.eslintrc.yml
new file mode 100644
index 0000000000000000000000000000000000000000..88f2881b4c128fc4762338a8f420272c44cc29ef
--- /dev/null
+++ b/.eslintrc.yml
@@ -0,0 +1,180 @@
+env:
+  browser: true
+
+# See https://github.com/OCA/odoo-community.org/issues/37#issuecomment-470686449
+parserOptions:
+  ecmaVersion: 2017
+
+# Globals available in Odoo that shouldn't produce errorings
+globals:
+  _: readonly
+  $: readonly
+  fuzzy: readonly
+  jQuery: readonly
+  moment: readonly
+  odoo: readonly
+  openerp: readonly
+  Promise: readonly
+
+# Styling is handled by Prettier, so we only need to enable AST rules;
+# see https://github.com/OCA/maintainer-quality-tools/pull/618#issuecomment-558576890
+rules:
+  accessor-pairs: warn
+  array-callback-return: warn
+  callback-return: warn
+  capitalized-comments:
+    - warn
+    - always
+    - ignoreConsecutiveComments: true
+      ignoreInlineComments: true
+  complexity:
+    - warn
+    - 15
+  constructor-super: warn
+  dot-notation: warn
+  eqeqeq: warn
+  global-require: warn
+  handle-callback-err: warn
+  id-blacklist: warn
+  id-match: warn
+  init-declarations: error
+  max-depth: warn
+  max-nested-callbacks: warn
+  max-statements-per-line: warn
+  no-alert: warn
+  no-array-constructor: warn
+  no-caller: warn
+  no-case-declarations: warn
+  no-class-assign: warn
+  no-cond-assign: error
+  no-const-assign: error
+  no-constant-condition: warn
+  no-control-regex: warn
+  no-debugger: error
+  no-delete-var: warn
+  no-div-regex: warn
+  no-dupe-args: error
+  no-dupe-class-members: error
+  no-dupe-keys: error
+  no-duplicate-case: error
+  no-duplicate-imports: error
+  no-else-return: warn
+  no-empty-character-class: warn
+  no-empty-function: error
+  no-empty-pattern: error
+  no-empty: warn
+  no-eq-null: error
+  no-eval: error
+  no-ex-assign: error
+  no-extend-native: warn
+  no-extra-bind: warn
+  no-extra-boolean-cast: warn
+  no-extra-label: warn
+  no-fallthrough: warn
+  no-func-assign: error
+  no-global-assign: error
+  no-implicit-coercion:
+    - warn
+    - allow: ["~"]
+  no-implicit-globals: warn
+  no-implied-eval: warn
+  no-inline-comments: warn
+  no-inner-declarations: warn
+  no-invalid-regexp: warn
+  no-irregular-whitespace: warn
+  no-iterator: warn
+  no-label-var: warn
+  no-labels: warn
+  no-lone-blocks: warn
+  no-lonely-if: error
+  no-mixed-requires: error
+  no-multi-str: warn
+  no-native-reassign: error
+  no-negated-condition: warn
+  no-negated-in-lhs: error
+  no-new-func: warn
+  no-new-object: warn
+  no-new-require: warn
+  no-new-symbol: warn
+  no-new-wrappers: warn
+  no-new: warn
+  no-obj-calls: warn
+  no-octal-escape: warn
+  no-octal: warn
+  no-param-reassign: warn
+  no-path-concat: warn
+  no-process-env: warn
+  no-process-exit: warn
+  no-proto: warn
+  no-prototype-builtins: warn
+  no-redeclare: warn
+  no-regex-spaces: warn
+  no-restricted-globals: warn
+  no-restricted-imports: warn
+  no-restricted-modules: warn
+  no-restricted-syntax: warn
+  no-return-assign: error
+  no-script-url: warn
+  no-self-assign: warn
+  no-self-compare: warn
+  no-sequences: warn
+  no-shadow-restricted-names: warn
+  no-shadow: warn
+  no-sparse-arrays: warn
+  no-sync: warn
+  no-this-before-super: warn
+  no-throw-literal: warn
+  no-undef-init: warn
+  no-undef: error
+  no-unmodified-loop-condition: warn
+  no-unneeded-ternary: error
+  no-unreachable: error
+  no-unsafe-finally: error
+  no-unused-expressions: error
+  no-unused-labels: error
+  no-unused-vars: error
+  no-use-before-define: error
+  no-useless-call: warn
+  no-useless-computed-key: warn
+  no-useless-concat: warn
+  no-useless-constructor: warn
+  no-useless-escape: warn
+  no-useless-rename: warn
+  no-void: warn
+  no-with: warn
+  operator-assignment: [error, always]
+  prefer-const: warn
+  radix: warn
+  require-yield: warn
+  sort-imports: warn
+  spaced-comment: [error, always]
+  strict: [error, function]
+  use-isnan: error
+  valid-jsdoc:
+    - warn
+    - prefer:
+        arg: param
+        argument: param
+        augments: extends
+        constructor: class
+        exception: throws
+        func: function
+        method: function
+        prop: property
+        return: returns
+        virtual: abstract
+        yield: yields
+      preferType:
+        array: Array
+        bool: Boolean
+        boolean: Boolean
+        number: Number
+        object: Object
+        str: String
+        string: String
+      requireParamDescription: false
+      requireReturn: false
+      requireReturnDescription: false
+      requireReturnType: false
+  valid-typeof: warn
+  yoda: warn
diff --git a/.flake8 b/.flake8
new file mode 100644
index 0000000000000000000000000000000000000000..e397e8ed4e3e7f7fe7785dd391bb80aa6d85575e
--- /dev/null
+++ b/.flake8
@@ -0,0 +1,12 @@
+[flake8]
+max-line-length = 88
+max-complexity = 16
+# B = bugbear
+# B9 = bugbear opinionated (incl line length)
+select = C,E,F,W,B,B9
+# E203: whitespace before ':' (black behaviour)
+# E501: flake8 line length (covered by bugbear B950)
+# W503: line break before binary operator (black behaviour)
+ignore = E203,E501,W503
+per-file-ignores=
+    __init__.py:F401
diff --git a/.gitignore b/.gitignore
index 75bb2042901930f807a588241612a29dd75e34d5..818770fb1bdc0a144e924c9a5940f0b035df8a0d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,75 @@
-.*
-*.pyc
-!.gitignore
+# Byte-compiled / optimized / DLL files
+__pycache__/
+*.py[cod]
+/.venv
+/.pytest_cache
+
+# C extensions
+*.so
+
+# Distribution / packaging
+.Python
+env/
+bin/
+build/
+develop-eggs/
+dist/
+eggs/
+lib/
+lib64/
+parts/
+sdist/
+var/
+*.egg-info/
+.installed.cfg
+*.egg
+*.eggs
+
+# Installer logs
+pip-log.txt
+pip-delete-this-directory.txt
+
+# Unit test / coverage reports
+htmlcov/
+.tox/
+.coverage
+.cache
+nosetests.xml
+coverage.xml
+
+# Translations
+*.mo
+
+# Pycharm
+.idea
+
+# Eclipse
+.settings
+
+# Visual Studio cache/options directory
+.vs/
+.vscode
+
+# OSX Files
+.DS_Store
+
+# Django stuff:
+*.log
+
+# Mr Developer
+.mr.developer.cfg
+.project
+.pydevproject
+
+# Rope
+.ropeproject
+
+# Sphinx documentation
+docs/_build/
+
+# Backup files
+*~
+*.swp
+
+# OCA rules
+!static/lib/
diff --git a/.isort.cfg b/.isort.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..0ec187efd1bf802844749f508cda0c8f138970f9
--- /dev/null
+++ b/.isort.cfg
@@ -0,0 +1,13 @@
+[settings]
+; see https://github.com/psf/black
+multi_line_output=3
+include_trailing_comma=True
+force_grid_wrap=0
+combine_as_imports=True
+use_parentheses=True
+line_length=88
+known_odoo=odoo
+known_odoo_addons=odoo.addons
+sections=FUTURE,STDLIB,THIRDPARTY,ODOO,ODOO_ADDONS,FIRSTPARTY,LOCALFOLDER
+default_section=THIRDPARTY
+ensure_newline_before_comments = True
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..cb8b5ef27a4408c9767c962d0f4e70fb99715061
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,123 @@
+exclude: |
+  (?x)
+  # NOT INSTALLABLE ADDONS
+  # END NOT INSTALLABLE ADDONS
+  # Files and folders generated by bots, to avoid loops
+  ^setup/|/static/description/index\.html$|
+  # We don't want to mess with tool-generated files
+  .svg$|/tests/([^/]+/)?cassettes/|
+  # Library files can have extraneous formatting (even minimized)
+  /static/(src/)?lib/|
+  # Repos using Sphinx to generate docs don't need prettying
+  ^docs/_templates/.*\.html$|
+  # You don't usually want a bot to modify your legal texts
+  (LICENSE.*|COPYING.*)
+default_language_version:
+  python: python3
+  node: "14.13.0"
+repos:
+  - repo: local
+    hooks:
+      # These files are most likely copier diff rejection junks; if found,
+      # review them manually, fix the problem (if needed) and remove them
+      - id: forbidden-files
+        name: forbidden files
+        entry: found forbidden files; remove them
+        language: fail
+        files: "\\.rej$"
+  - repo: https://github.com/oca/maintainer-tools
+    rev: ab1d7f6
+    hooks:
+      # update the NOT INSTALLABLE ADDONS section above
+      - id: oca-update-pre-commit-excluded-addons
+  - repo: https://github.com/myint/autoflake
+    rev: v1.4
+    hooks:
+      - id: autoflake
+        args:
+          - --expand-star-imports
+          - --ignore-init-module-imports
+          - --in-place
+          - --remove-all-unused-imports
+          - --remove-duplicate-keys
+          - --remove-unused-variables
+  - repo: https://github.com/psf/black
+    rev: 20.8b1
+    hooks:
+      - id: black
+  - repo: https://github.com/pre-commit/mirrors-prettier
+    rev: v2.1.2
+    hooks:
+      - id: prettier
+        name: prettier (with plugin-xml)
+        additional_dependencies:
+          - "prettier@2.1.2"
+          - "@prettier/plugin-xml@0.12.0"
+        args:
+          - --plugin=@prettier/plugin-xml
+        files: \.(css|htm|html|js|json|jsx|less|md|scss|toml|ts|xml|yaml|yml)$
+  - repo: https://github.com/pre-commit/mirrors-eslint
+    rev: v7.8.1
+    hooks:
+      - id: eslint
+        verbose: true
+        args:
+          - --color
+          - --fix
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v3.2.0
+    hooks:
+      - id: trailing-whitespace
+        # exclude autogenerated files
+        exclude: /README\.rst$|\.pot?$
+      - id: end-of-file-fixer
+        # exclude autogenerated files
+        exclude: /README\.rst$|\.pot?$
+      - id: debug-statements
+      - id: fix-encoding-pragma
+        args: ["--remove"]
+      - id: check-case-conflict
+      - id: check-docstring-first
+      - id: check-executables-have-shebangs
+      - id: check-merge-conflict
+        # exclude files where underlines are not distinguishable from merge conflicts
+        exclude: /README\.rst$|^docs/.*\.rst$
+      - id: check-symlinks
+      - id: check-xml
+      - id: mixed-line-ending
+        args: ["--fix=lf"]
+  - repo: https://github.com/asottile/pyupgrade
+    rev: v2.7.2
+    hooks:
+      - id: pyupgrade
+        args: ["--keep-percent-format"]
+  - repo: https://github.com/PyCQA/isort
+    rev: 5.5.1
+    hooks:
+      - id: isort
+        name: isort except __init__.py
+        args:
+          - --settings=.
+        exclude: /__init__\.py$
+  - repo: https://gitlab.com/PyCQA/flake8
+    rev: 3.8.3
+    hooks:
+      - id: flake8
+        name: flake8
+        additional_dependencies: ["flake8-bugbear==20.1.4"]
+  - repo: https://github.com/PyCQA/pylint
+    rev: pylint-2.5.3
+    hooks:
+      - id: pylint
+        name: pylint with optional checks
+        args:
+          - --rcfile=.pylintrc
+          - --exit-zero
+        verbose: true
+        additional_dependencies: &pylint_deps
+          - pylint-odoo==3.5.0
+      - id: pylint
+        name: pylint with mandatory checks
+        args:
+          - --rcfile=.pylintrc-mandatory
+        additional_dependencies: *pylint_deps
diff --git a/.prettierrc.yml b/.prettierrc.yml
new file mode 100644
index 0000000000000000000000000000000000000000..5b6d4b361ace92f3877993bf2848fac190d8fab6
--- /dev/null
+++ b/.prettierrc.yml
@@ -0,0 +1,8 @@
+# Defaults for all prettier-supported languages.
+# Prettier will complete this with settings from .editorconfig file.
+bracketSpacing: false
+printWidth: 88
+proseWrap: always
+semi: true
+trailingComma: "es5"
+xmlWhitespaceSensitivity: "strict"
diff --git a/.pylintrc b/.pylintrc
new file mode 100644
index 0000000000000000000000000000000000000000..c3d0a5c839baeee21312961c56158de4936fdc91
--- /dev/null
+++ b/.pylintrc
@@ -0,0 +1,88 @@
+[MASTER]
+load-plugins=pylint_odoo
+score=n
+
+[ODOOLINT]
+readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
+manifest_required_authors=Le Filament
+manifest_required_keys=license
+manifest_deprecated_keys=description,active
+license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
+valid_odoo_versions=14.0
+
+[MESSAGES CONTROL]
+disable=all
+
+# This .pylintrc contains optional AND mandatory checks and is meant to be
+# loaded in an IDE to have it check everything, in the hope this will make
+# optional checks more visible to contributors who otherwise never look at a
+# green travis to see optional checks that failed.
+# .pylintrc-mandatory containing only mandatory checks is used the pre-commit
+# config as a blocking check.
+
+enable=anomalous-backslash-in-string,
+    api-one-deprecated,
+    api-one-multi-together,
+    assignment-from-none,
+    attribute-deprecated,
+    class-camelcase,
+    dangerous-default-value,
+    dangerous-view-replace-wo-priority,
+    development-status-allowed,
+    duplicate-id-csv,
+    duplicate-key,
+    duplicate-xml-fields,
+    duplicate-xml-record-id,
+    eval-referenced,
+    eval-used,
+    incoherent-interpreter-exec-perm,
+    license-allowed,
+    manifest-author-string,
+    manifest-deprecated-key,
+    manifest-required-author,
+    manifest-required-key,
+    manifest-version-format,
+    method-compute,
+    method-inverse,
+    method-required-super,
+    method-search,
+    openerp-exception-warning,
+    pointless-statement,
+    pointless-string-statement,
+    print-used,
+    redundant-keyword-arg,
+    redundant-modulename-xml,
+    reimported,
+    relative-import,
+    return-in-init,
+    rst-syntax-error,
+    sql-injection,
+    too-few-format-args,
+    translation-field,
+    translation-required,
+    unreachable,
+    use-vim-comment,
+    wrong-tabs-instead-of-spaces,
+    xml-syntax-error,
+    # messages that do not cause the lint step to fail
+    consider-merging-classes-inherited,
+    create-user-wo-reset-password,
+    dangerous-filter-wo-user,
+    deprecated-module,
+    file-not-used,
+    invalid-commit,
+    missing-manifest-dependency,
+    missing-newline-extrafiles,
+    # missing-readme,
+    no-utf8-coding-comment,
+    odoo-addons-relative-import,
+    old-api7-method-defined,
+    redefined-builtin,
+    too-complex,
+    unnecessary-utf8-coding-comment
+
+
+[REPORTS]
+msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
+output-format=colorized
+reports=no
diff --git a/.pylintrc-mandatory b/.pylintrc-mandatory
new file mode 100644
index 0000000000000000000000000000000000000000..43ea23947166ff8080219007cfae43ec54a28f8e
--- /dev/null
+++ b/.pylintrc-mandatory
@@ -0,0 +1,64 @@
+[MASTER]
+load-plugins=pylint_odoo
+score=n
+
+[ODOOLINT]
+readme_template_url="https://github.com/OCA/maintainer-tools/blob/master/template/module/README.rst"
+manifest_required_authors=Le Filament
+manifest_required_keys=license
+manifest_deprecated_keys=description,active
+license_allowed=AGPL-3,GPL-2,GPL-2 or any later version,GPL-3,GPL-3 or any later version,LGPL-3
+valid_odoo_versions=14.0
+
+[MESSAGES CONTROL]
+disable=all
+
+enable=anomalous-backslash-in-string,
+    api-one-deprecated,
+    api-one-multi-together,
+    assignment-from-none,
+    attribute-deprecated,
+    class-camelcase,
+    dangerous-default-value,
+    dangerous-view-replace-wo-priority,
+    development-status-allowed,
+    duplicate-id-csv,
+    duplicate-key,
+    duplicate-xml-fields,
+    duplicate-xml-record-id,
+    eval-referenced,
+    eval-used,
+    incoherent-interpreter-exec-perm,
+    license-allowed,
+    manifest-author-string,
+    manifest-deprecated-key,
+    manifest-required-author,
+    manifest-required-key,
+    manifest-version-format,
+    method-compute,
+    method-inverse,
+    method-required-super,
+    method-search,
+    openerp-exception-warning,
+    pointless-statement,
+    pointless-string-statement,
+    print-used,
+    redundant-keyword-arg,
+    redundant-modulename-xml,
+    reimported,
+    relative-import,
+    return-in-init,
+    rst-syntax-error,
+    sql-injection,
+    too-few-format-args,
+    translation-field,
+    translation-required,
+    unreachable,
+    use-vim-comment,
+    wrong-tabs-instead-of-spaces,
+    xml-syntax-error
+
+[REPORTS]
+msg-template={path}:{line}: [{msg_id}({symbol}), {obj}] {msg}
+output-format=colorized
+reports=no
diff --git a/README.rst b/README.rst
index 87aee71fe0c9f3790d260e11ccff0551a93a8537..3e0600b14fbd5d2c08cd5fe14265807a5830a235 100644
--- a/README.rst
+++ b/README.rst
@@ -7,7 +7,7 @@
 Le Filament - Tableaux de Bord
 ==============================
 
-Affichage de tableaux de bord : 
+Affichage de tableaux de bord :
  - suivi annuel Factures/Commandes/Pipe et Trésorerie
  - tableau des performances mensuelles
  - graphe de la tésorerie sur 1 an glissant
@@ -30,4 +30,4 @@ Maintainer ----------
    :alt: Le Filament
    :target: https://le-filament.com
 
-This module is maintained by Le Filament
\ No newline at end of file
+This module is maintained by Le Filament
diff --git a/__manifest__.py b/__manifest__.py
index b4fb4ba559b0beee0a6f687c4cc21944f99c3ee1..43e10caefd9e7027612385268c9e2276504c352e 100644
--- a/__manifest__.py
+++ b/__manifest__.py
@@ -2,36 +2,23 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 {
-    'name': "Le Filament - Tableau de Bord",
-
-    'summary': """
-        Rapports Le Filament""",
-
-    'description': """
-        Tableaux de Bord Le Filament
-
-        Affichage de tableaux de bord :
-         - suivi annuel Factures/Commandes/Pipe et Trésorerie
-         - tableau des performances mensuelles
-         - graphe de la tésorerie sur 1 an glissant
-         - prévisionnel de la trésorerie sur 6 mois
-
-    """,
-    'author': "LE FILAMENT",
-    'category': 'dashboard',
-    'website': "https://le-filament.com",
-    'version': '14.0.1.0.0',
-    'license': 'AGPL-3',
-    'depends': ['account', 'crm', 'hr_expense', 'sale'],
-    'data': [
-        'security/lefilament_dashboard_security.xml',
-        'security/ir.model.access.csv',
-        'views/assets.xml',
-        'views/views.xml',
-        'views/schedule.xml',
-        'data/ir_module_category.xml'
+    "name": "Le Filament - Tableau de Bord",
+    "summary": "Rapports Le Filament",
+    "author": "Le Filament",
+    "category": "dashboard",
+    "website": "https://le-filament.com",
+    "version": "14.0.1.0.0",
+    "license": "AGPL-3",
+    "depends": ["account", "crm", "hr_expense", "sale"],
+    "data": [
+        "security/lefilament_dashboard_security.xml",
+        "security/ir.model.access.csv",
+        "views/assets.xml",
+        "views/views.xml",
+        "views/schedule.xml",
+        "data/ir_module_category.xml",
     ],
-    'qweb': [
-        'static/src/xml/*.xml',
+    "qweb": [
+        "static/src/xml/*.xml",
     ],
 }
diff --git a/data/ir_module_category.xml b/data/ir_module_category.xml
index f772ab7fa05bac72fc1aef63caa0f7d07472ffb1..33396edca10d09b1cf61479e7f03b019d07a8f59 100644
--- a/data/ir_module_category.xml
+++ b/data/ir_module_category.xml
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-	<data>
-	  <record model="ir.module.category" id="module_category_dashboard">
-	    <field name="name">Dashboard</field>
-	    <field name="description">Show main company dashboard</field>
-	    <field name="sequence">30</field>
-	  </record>
-	</data>
+  <data>
+    <record model="ir.module.category" id="module_category_dashboard">
+      <field name="name">Dashboard</field>
+      <field name="description">Show main company dashboard</field>
+      <field name="sequence">30</field>
+    </record>
+  </data>
 </odoo>
diff --git a/models/hr_employee.py b/models/hr_employee.py
index a6fb569e5016d123454d00f6121d8c8c9a77a9ed..ca73e8ca057a951d506ce9a8e729dee3479e6f8d 100644
--- a/models/hr_employee.py
+++ b/models/hr_employee.py
@@ -1,10 +1,10 @@
 # © 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import models, fields
+from odoo import fields, models
 
 
-class hr_employee(models.Model):
+class HrEmployee(models.Model):
     _name = "hr.employee"
     _inherit = "hr.employee"
 
diff --git a/models/lefilament_tdb.py b/models/lefilament_tdb.py
index d7473f745ef59eaf1489b9ab1dc8eaa9bedd9502..b8dd2902dd4954161a0b5baaa664b8403e3ab0e4 100644
--- a/models/lefilament_tdb.py
+++ b/models/lefilament_tdb.py
@@ -2,10 +2,10 @@
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
 from datetime import datetime
-from dateutil.relativedelta import relativedelta
 
-from odoo import models, fields, api
+from dateutil.relativedelta import relativedelta
 
+from odoo import api, fields, models
 from odoo.fields import Date
 
 
@@ -14,27 +14,24 @@ class LeFilamentTdb(models.Model):
     _description = "Le Filament Dashboard"
     _order = "date_tdb desc"
 
-    name = fields.Char('Mois', compute='get_month', store=True)
-    date_tdb = fields.Date('Date',
-                           required=True,
-                           default=Date.context_today,
-                           store=True)
-    ca_mois = fields.Float('Facturé', compute="dashboard_values", store=True)
-    cmd_mois = fields.Float('Commandes',
-                            compute="dashboard_values",
-                            store=True)
-    pipe_mois = fields.Float('Pipe', compute="dashboard_values", store=True)
-    treso = fields.Float('Trésorerie', compute="dashboard_values", store=True)
-    variation = fields.Float('Variation',
-                             compute="dashboard_values",
-                             store=True)
-    charges = fields.Float('Décaissé', compute="dashboard_values", store=True)
-    encaisse = fields.Float('Encaissé', compute="dashboard_values", store=True)
-    charges_fixes = fields.Float('Charges Fixes', default=10000)
-    runway = fields.Float('Runway', compute="runway_value")
-
-    @api.depends('date_tdb')
-    def dashboard_values(self):
+    name = fields.Char("Mois", compute="_compute_get_month", store=True)
+    date_tdb = fields.Date(
+        "Date", required=True, default=Date.context_today, store=True
+    )
+    ca_mois = fields.Float("Facturé", compute="compute_dashboard_values", store=True)
+    cmd_mois = fields.Float("Commandes", compute="compute_dashboard_values", store=True)
+    pipe_mois = fields.Float("Pipe", compute="compute_dashboard_values", store=True)
+    treso = fields.Float("Trésorerie", compute="compute_dashboard_values", store=True)
+    variation = fields.Float(
+        "Variation", compute="compute_dashboard_values", store=True
+    )
+    charges = fields.Float("Décaissé", compute="compute_dashboard_values", store=True)
+    encaisse = fields.Float("Encaissé", compute="compute_dashboard_values", store=True)
+    charges_fixes = fields.Float("Charges Fixes", default=10000)
+    runway = fields.Float("Runway", compute="_compute_runway_value")
+
+    @api.depends("date_tdb")
+    def compute_dashboard_values(self):
         for record in self:
             if record.date_tdb:
                 date_tdb = Date.from_string(record.date_tdb)
@@ -47,8 +44,8 @@ class LeFilamentTdb(models.Model):
                     AND (move_type = 'out_invoice' OR move_type = 'out_refund') \
                     AND date >= date_trunc('month', %s) \
                     AND date < date_trunc('month', %s + interval '1' month);",
-                    (date_tdb, date_tdb)
-                    )
+                    (date_tdb, date_tdb),
+                )
                 ca_mois = self.env.cr.fetchone()[0]
 
                 # COMMANDES TOTAL
@@ -59,45 +56,48 @@ class LeFilamentTdb(models.Model):
                     AND date_order >= date_trunc('month', %s) \
                     AND date_order < date_trunc('month', %s \
                     + interval '1' month);",
-                    (date_tdb, date_tdb)
-                    )
+                    (date_tdb, date_tdb),
+                )
                 cmd_mois = self.env.cr.fetchone()[0]
 
                 # Trésorerie
                 self.env.cr.execute(
-                    "SELECT SUM(amount) \
-                    FROM account_bank_statement_line \
+                    "SELECT SUM(amount_total_signed) \
+                    FROM account_move \
                     WHERE date < date_trunc('month', %s \
-                    + interval '1' month);",
-                    (date_tdb,)
-                    )
+                    + interval '1' month) \
+                    AND statement_line_id is not NULL;",
+                    (date_tdb,),
+                )
                 treso_total = self.env.cr.fetchone()[0]
                 # CHARGES
                 self.env.cr.execute(
-                    "SELECT SUM(amount) \
-                    FROM account_bank_statement_line \
-                    WHERE amount < 0 \
+                    "SELECT SUM(amount_total_signed) \
+                    FROM account_move \
+                    WHERE amount_total_signed < 0 \
                     AND date >= date_trunc('month', %s) \
-                    AND date < date_trunc('month', %s + interval '1' month);",
-                    (date_tdb, date_tdb)
-                    )
+                    AND date < date_trunc('month', %s + interval '1' month) \
+                    AND statement_line_id is not NULL;",
+                    (date_tdb, date_tdb),
+                )
                 charges = self.env.cr.fetchone()[0]
                 # ENCAISSE
                 self.env.cr.execute(
-                    "SELECT SUM(amount) \
-                    FROM account_bank_statement_line \
-                    WHERE amount > 0 \
+                    "SELECT SUM(amount_total_signed) \
+                    FROM account_move \
+                    WHERE amount_total_signed > 0 \
                     AND date >= date_trunc('month', %s) \
-                    AND date < date_trunc('month', %s + interval '1' month);",
-                    (date_tdb, date_tdb)
-                    )
+                    AND date < date_trunc('month', %s + interval '1' month) \
+                    AND statement_line_id is not NULL;",
+                    (date_tdb, date_tdb),
+                )
                 encaisse = self.env.cr.fetchone()[0]
 
                 # CHARGES FIXES
                 self.env.cr.execute(
                     "SELECT charges_fixes \
                     FROM res_company"
-                    )
+                )
                 charges_fixes = self.env.cr.fetchone()[0]
 
                 # PIPE
@@ -105,7 +105,7 @@ class LeFilamentTdb(models.Model):
                     "SELECT SUM(expected_revenue * probability / 100) \
                     FROM crm_lead \
                     WHERE active = True"
-                    )
+                )
                 pipe = self.env.cr.fetchone()[0]
 
                 if not encaisse:
@@ -122,33 +122,38 @@ class LeFilamentTdb(models.Model):
                 record.charges_fixes = charges_fixes
                 record.pipe_mois = pipe
 
-    @api.depends('charges_fixes', 'treso')
-    def runway_value(self):
+    @api.depends("charges_fixes", "treso")
+    def _compute_runway_value(self):
         for record in self:
             if record.charges_fixes:
                 record.runway = record.treso / record.charges_fixes
+            else:
+                record.runway = 0
 
-    @api.depends('date_tdb')
-    def get_month(self):
+    @api.depends("date_tdb")
+    def _compute_get_month(self):
         for record in self:
-            months = ['Janv',
-                      'Fév',
-                      'Mars',
-                      'Avr',
-                      'Mai',
-                      'Juin',
-                      'Juil',
-                      'Août',
-                      'Sept',
-                      'Oct',
-                      'Nov',
-                      'Dec']
-            record.name = months[record.date_tdb.month-1] \
-                + " " + str(record.date_tdb.year)
+            months = [
+                "Janv",
+                "Fév",
+                "Mars",
+                "Avr",
+                "Mai",
+                "Juin",
+                "Juil",
+                "Août",
+                "Sept",
+                "Oct",
+                "Nov",
+                "Dec",
+            ]
+            record.name = (
+                months[record.date_tdb.month - 1] + " " + str(record.date_tdb.year)
+            )
 
     @api.model
     def _new_data(self):
-        self.create({'date_tdb': Date.today()})
+        self.create({"date_tdb": Date.today()})
 
     @api.model
     def retrieve_datas_dashboard(self):
@@ -156,37 +161,39 @@ class LeFilamentTdb(models.Model):
         fiscal_date = datetime(
             datetime.now().year,
             int(self.env.company.fiscalyear_last_month),
-            int(self.env.company.fiscalyear_last_day)
-            )
+            int(self.env.company.fiscalyear_last_day),
+        )
         if datetime.now() > fiscal_date:
             fiscal_year = "'" + Date.to_string(fiscal_date) + "'"
-            fiscal_year_next = "'" + Date.to_string(
-                fiscal_date + relativedelta(years=1)) + "'"
+            fiscal_year_next = (
+                "'" + Date.to_string(fiscal_date + relativedelta(years=1)) + "'"
+            )
         else:
-            fiscal_year = "'" + Date.to_string(
-                fiscal_date - relativedelta(years=1)) + "'"
+            fiscal_year = (
+                "'" + Date.to_string(fiscal_date - relativedelta(years=1)) + "'"
+            )
             fiscal_year_next = "'" + Date.to_string(fiscal_date) + "'"
 
         # Prepare values
         res = {
-            'facture': 0,
-            'commandes': 0,
-            'pipe': 0,
-            'pipe_win': 0,
-            'pipe_to_win': 0,
-            'pipe_n1': 0,
-            'tresorerie': 0,
-            'entree': 0,
-            'sortie': 0,
-            'variation': 0,
-            'target': 0,
-            'cca': 0,
-            'capital': 0,
-            'date_maj': 0,
-            'a_encaisser': 0,
-            'a_payer': 0,
-            'fiscal_year': fiscal_year,
-            'fiscal_year_next': fiscal_year_next,
+            "facture": 0,
+            "commandes": 0,
+            "pipe": 0,
+            "pipe_win": 0,
+            "pipe_to_win": 0,
+            "pipe_n1": 0,
+            "tresorerie": 0,
+            "entree": 0,
+            "sortie": 0,
+            "variation": 0,
+            "target": 0,
+            "cca": 0,
+            "capital": 0,
+            "date_maj": 0,
+            "a_encaisser": 0,
+            "a_payer": 0,
+            "fiscal_year": fiscal_year,
+            "fiscal_year_next": fiscal_year_next,
         }
 
         self._cr.execute(
@@ -233,20 +240,23 @@ class LeFilamentTdb(models.Model):
                     FROM account_bank_statement
                     ORDER BY ID DESC LIMIT 1
                 ) AS date_maj,
-                (SELECT SUM(amount)
-                    FROM account_bank_statement_line
+                (SELECT SUM(amount_total_signed)
+                    FROM account_move
+                    WHERE statement_line_id is NOT NULL
                 ) AS tresorerie,
-                (SELECT SUM(amount)
-                    FROM account_bank_statement_line
-                    WHERE amount > 0 AND date > %s
+                (SELECT SUM(amount_total_signed)
+                    FROM account_move
+                    WHERE amount_total_signed > 0 AND date > %s
+                    AND statement_line_id is NOT NULL
                 ) AS entree,
-                (SELECT SUM(amount)
-                    FROM account_bank_statement_line
-                    WHERE amount < 0 AND date > %s
+                (SELECT SUM(amount_total_signed)
+                    FROM account_move
+                    WHERE amount_total_signed < 0 AND date > %s
+                    AND statement_line_id is NOT NULL
                 ) AS sortie,
-                (SELECT SUM(amount)
-                    FROM account_bank_statement_line
-                    WHERE date > %s
+                (SELECT SUM(amount_total_signed)
+                    FROM account_move
+                    WHERE date > %s AND statement_line_id is NOT NULL
                 ) AS variation,
                 (SELECT SUM(e.total_amount)
                     FROM hr_expense_sheet es, hr_expense e
@@ -259,16 +269,18 @@ class LeFilamentTdb(models.Model):
                     WHERE invoice_status = 'to invoice'
                 ) AS commandes;
             """
-            % (fiscal_year,
-               fiscal_year_next,
-               fiscal_year_next,
-               fiscal_year_next,
-               fiscal_year_next,
-               fiscal_year_next,
-               fiscal_year,
-               fiscal_year,
-               fiscal_year)
+            % (
+                fiscal_year,
+                fiscal_year_next,
+                fiscal_year_next,
+                fiscal_year_next,
+                fiscal_year_next,
+                fiscal_year_next,
+                fiscal_year,
+                fiscal_year,
+                fiscal_year,
             )
+        )
         datas = self._cr.dictfetchall()
 
         self._cr.execute("SELECT ca_target FROM res_company;")
@@ -277,38 +289,38 @@ class LeFilamentTdb(models.Model):
         self._cr.execute("SELECT sum(capital) AS capital FROM hr_employee;")
         capital = self._cr.dictfetchall()
 
-        if datas[0]['facture']:
-            res['facture'] += datas[0]['facture']
-        if datas[0]['a_encaisser']:
-            res['a_encaisser'] += datas[0]['a_encaisser']
-        if datas[0]['a_payer']:
-            res['a_payer'] += datas[0]['a_payer']
-        if datas[0]['pipe']:
-            res['pipe'] += datas[0]['pipe']
-        if datas[0]['pipe_win']:
-            res['pipe_win'] += datas[0]['pipe_win']
-        if datas[0]['pipe_to_win']:
-            res['pipe_to_win'] += datas[0]['pipe_to_win']
-        if datas[0]['pipe_n1']:
-            res['pipe_n1'] += datas[0]['pipe_n1']
-        if datas[0]['tresorerie']:
-            res['tresorerie'] += datas[0]['tresorerie']
-        if datas[0]['date_maj']:
-            res['date_maj'] = datas[0]['date_maj']
-        if datas[0]['entree']:
-            res['entree'] += datas[0]['entree']
-        if datas[0]['sortie']:
-            res['sortie'] += datas[0]['sortie']
-        if datas[0]['variation']:
-            res['variation'] += datas[0]['variation']
-        if datas[0]['commandes']:
-            res['commandes'] += datas[0]['commandes']
-        if datas[0]['cca']:
-            res['cca'] += datas[0]['cca']
-        if ca_target[0]['ca_target']:
-            res['target'] += ca_target[0]['ca_target']
-        if capital[0]['capital']:
-            res['capital'] += capital[0]['capital']
+        if datas[0]["facture"]:
+            res["facture"] += datas[0]["facture"]
+        if datas[0]["a_encaisser"]:
+            res["a_encaisser"] += datas[0]["a_encaisser"]
+        if datas[0]["a_payer"]:
+            res["a_payer"] += datas[0]["a_payer"]
+        if datas[0]["pipe"]:
+            res["pipe"] += datas[0]["pipe"]
+        if datas[0]["pipe_win"]:
+            res["pipe_win"] += datas[0]["pipe_win"]
+        if datas[0]["pipe_to_win"]:
+            res["pipe_to_win"] += datas[0]["pipe_to_win"]
+        if datas[0]["pipe_n1"]:
+            res["pipe_n1"] += datas[0]["pipe_n1"]
+        if datas[0]["tresorerie"]:
+            res["tresorerie"] += datas[0]["tresorerie"]
+        if datas[0]["date_maj"]:
+            res["date_maj"] = datas[0]["date_maj"]
+        if datas[0]["entree"]:
+            res["entree"] += datas[0]["entree"]
+        if datas[0]["sortie"]:
+            res["sortie"] += datas[0]["sortie"]
+        if datas[0]["variation"]:
+            res["variation"] += datas[0]["variation"]
+        if datas[0]["commandes"]:
+            res["commandes"] += datas[0]["commandes"]
+        if datas[0]["cca"]:
+            res["cca"] += datas[0]["cca"]
+        if ca_target[0]["ca_target"]:
+            res["target"] += ca_target[0]["ca_target"]
+        if capital[0]["capital"]:
+            res["capital"] += capital[0]["capital"]
 
         return res
 
@@ -317,14 +329,17 @@ class LeFilamentTdb(models.Model):
         self._cr.execute(
             """
             SELECT to_char(date_trunc('month', date),'YYYY-MM') AS mois,
-                SUM(CASE WHEN amount > 0 THEN amount ELSE 0 END) AS entree,
-                SUM(CASE WHEN amount < 0 THEN amount ELSE 0 END) AS sortie,
-                SUM(amount) AS variation
-            FROM account_bank_statement_line
+                SUM(CASE WHEN amount_total_signed > 0
+                    THEN amount_total_signed ELSE 0 END) AS entree,
+                SUM(CASE WHEN amount_total_signed < 0
+                    THEN amount_total_signed ELSE 0 END) AS sortie,
+                SUM(amount_total_signed) AS variation
+            FROM account_move
+            WHERE statement_line_id is not NULL
             GROUP BY date_trunc('month', date)
             ORDER BY date_trunc('month', date);
             """
-            )
+        )
         tresorerie = self._cr.dictfetchall()
 
         self._cr.execute(
@@ -338,27 +353,28 @@ class LeFilamentTdb(models.Model):
                 ) AS cca,
                 (SELECT SUM(capital) AS capital FROM hr_employee) AS capital;
             """
-            )
+        )
         fonds_propres = self._cr.dictfetchall()[0]
 
-        if not fonds_propres['cca']:
-            fonds_propres['cca'] = 0
+        if not fonds_propres["cca"]:
+            fonds_propres["cca"] = 0
 
-        return {'tresorerie': tresorerie, 'fonds_propres': fonds_propres}
+        return {"tresorerie": tresorerie, "fonds_propres": fonds_propres}
 
     @api.model
     def previ_tresorerie(self):
         self._cr.execute(
             """
             SELECT to_char(date_trunc('month', date),'YYYY-MM') AS mois,
-                SUM(SUM(amount)) OVER (
+                SUM(SUM(amount_total_signed)) OVER (
                     ORDER BY date_trunc('month', date)
                 ) AS treso
-            FROM account_bank_statement_line
+            FROM account_move
+            WHERE statement_line_id is not NULL
             GROUP BY date_trunc('month', date)
             ORDER BY date_trunc('month', date) DESC LIMIT 6;
             """
-            )
+        )
         tresorerie = self._cr.dictfetchall()
 
         self._cr.execute(
@@ -372,7 +388,7 @@ class LeFilamentTdb(models.Model):
                 ) as cca,
                 (SELECT SUM(capital) AS capital FROM hr_employee) AS capital;
             """
-            )
+        )
         fonds_propres = self._cr.dictfetchall()[0]
 
         self._cr.execute(
@@ -391,7 +407,7 @@ class LeFilamentTdb(models.Model):
             GROUP BY date_trunc('month', invoice_date_due)
             ORDER BY date_trunc('month', invoice_date_due);
             """
-            )
+        )
         factures = self._cr.dictfetchall()
 
         self._cr.execute(
@@ -403,7 +419,7 @@ class LeFilamentTdb(models.Model):
             GROUP BY periode
             ORDER BY periode;
             """
-            )
+        )
         charges_periode = self._cr.dictfetchall()
 
         self._cr.execute(
@@ -414,16 +430,16 @@ class LeFilamentTdb(models.Model):
             WHERE periode = '1'
             GROUP BY date_trunc('month', date);
             """
-            )
+        )
         charges_fixes = self._cr.dictfetchall()
 
-        if not fonds_propres['cca']:
-            fonds_propres['cca'] = 0
+        if not fonds_propres["cca"]:
+            fonds_propres["cca"] = 0
 
         return {
-            'tresorerie': tresorerie,
-            'fonds_propres': fonds_propres,
-            'factures': factures,
-            'charges_fixes': charges_fixes,
-            'charges_periode': charges_periode,
-            }
+            "tresorerie": tresorerie,
+            "fonds_propres": fonds_propres,
+            "factures": factures,
+            "charges_fixes": charges_fixes,
+            "charges_periode": charges_periode,
+        }
diff --git a/models/res_company.py b/models/res_company.py
index e100ca75eb9cae0a8a59655779c6193c48140947..b89844ebfd4f73822ab434cfe2122797993257f3 100644
--- a/models/res_company.py
+++ b/models/res_company.py
@@ -1,32 +1,28 @@
 # © 2019 Le Filament (<http://www.le-filament.com>)
 # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-from odoo import models, fields
+from odoo import fields, models
 
 
-class res_company(models.Model):
+class ResCompany(models.Model):
     _inherit = "res.company"
 
     ca_target = fields.Integer("Objectif Chiffre d'Affaire")
-    charges_fixes = fields.Integer('Charges Fixes')
-    previ_treso_ids = fields.One2many('previ.treso',
-                                      'company_id',
-                                      'Prévisionnel')
+    charges_fixes = fields.Integer("Charges Fixes")
+    previ_treso_ids = fields.One2many("previ.treso", "company_id", "Prévisionnel")
 
 
-class previ_treso(models.Model):
+class PreviTreso(models.Model):
     _name = "previ.treso"
     _description = "Previsionnel de tresorerie"
-    _order = 'name'
+    _order = "name"
 
     company_id = fields.Many2one(
-        'res.company',
-        'Company',
-        default=lambda self: self.env.user.company.id)
-    name = fields.Char('Nom')
+        "res.company", "Company", default=lambda self: self.env.user.company.id
+    )
+    name = fields.Char("Nom")
     periode = fields.Selection(
-        [('12', 'Mensuel'), ('3', 'Trimestriel'), ('1', 'Annuel')],
-        srting='Période'
-        )
-    date = fields.Date('Date')
-    montant = fields.Float('Montant')
+        [("12", "Mensuel"), ("3", "Trimestriel"), ("1", "Annuel")], string="Période"
+    )
+    date = fields.Date("Date")
+    montant = fields.Float("Montant")
diff --git a/security/lefilament_dashboard_security.xml b/security/lefilament_dashboard_security.xml
index 5aeff45c677a4d77e9e7984ec1e4b48ab1ae3a0d..a305afe1d7980039e827ecd1adc09e8e0943ae60 100644
--- a/security/lefilament_dashboard_security.xml
+++ b/security/lefilament_dashboard_security.xml
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
-	<data noupdate="0">
+  <data noupdate="0">
 
-		<!-- Définition des groupes utilisateurs -->
+    <!-- Définition des groupes utilisateurs -->
         <record id="group_dashboard" model="res.groups">
             <field name="name">Voir les tableaux de bord</field>
-            <field name="category_id" ref="base.module_category_dashboard"/>
-            <field name="implied_ids" eval="[(4, ref('base.group_user'))]"/>
+            <field name="category_id" ref="base.module_category_dashboard" />
+            <field name="implied_ids" eval="[(4, ref('base.group_user'))]" />
         </record>
 
-	</data>
-</odoo>
\ No newline at end of file
+  </data>
+</odoo>
diff --git a/static/src/css/lefilament_tdb.css b/static/src/css/lefilament_tdb.css
index 2b0a2faffacb9f00ec6ad896b3683b1434422cef..ea7f94a096942424d59e6c0fd3c1df5f4e6a002b 100644
--- a/static/src/css/lefilament_tdb.css
+++ b/static/src/css/lefilament_tdb.css
@@ -1,40 +1,107 @@
+.positive {
+    color: #2ecc71;
+}
+.negative {
+    color: #e74c3c;
+}
 
-.positive { color: #2ECC71; }
-.negative { color: #E74C3C; }
-
-.yeardashboard { padding: 20px; min-height: 100%; max-width: 1600px; margin: 0 auto; }
+.yeardashboard {
+    padding: 20px;
+    min-height: 100%;
+    max-width: 1600px;
+    margin: 0 auto;
+}
 
-.yeardashboard h3 { margin: 10px 0px; font-size: 20px; font-weight: 400; border-bottom: 1px solid #ddd; color: #5E6975; }
+.yeardashboard h3 {
+    margin: 10px 0px;
+    font-size: 20px;
+    font-weight: 400;
+    border-bottom: 1px solid #ddd;
+    color: #5e6975;
+}
 
-.card { color: #73879C; margin: 10px 0; }
-.card a { color: inherit; }
-.card-number a { color: inherit; }
-.card-half { float: left; width: 50%; }
+.card {
+    color: #73879c;
+    margin: 10px 0;
+}
+.card a {
+    color: inherit;
+}
+.card-number a {
+    color: inherit;
+}
+.card-half {
+    float: left;
+    width: 50%;
+}
 
-p.card-maj {     margin: 0px; font-size: 10px; font-style: italic; font-weight: 300; }
+p.card-maj {
+    margin: 0px;
+    font-size: 10px;
+    font-style: italic;
+    font-weight: 300;
+}
 
-.card-number { font-size: 30px; font-weight: 300; margin: 0!important; font-family: "Helvetica Neue", Helvetica, "Open Sans", Arial, sans-serif; }
-.card-tab { 
-	background-color: #fff;
-	color: #73879C; 
-	padding: 20px; 
-	margin: 0px 0 10px; 
-	border-left: 1px solid rgba(0, 0, 0, 0.125);
-	border-right: 1px solid rgba(0, 0, 0, 0.125);
-	border-bottom: 1px solid rgba(0, 0, 0, 0.125);
+.card-number {
+    font-size: 30px;
+    font-weight: 300;
+    margin: 0 !important;
+    font-family: "Helvetica Neue", Helvetica, "Open Sans", Arial, sans-serif;
+}
+.card-tab {
+    background-color: #fff;
+    color: #73879c;
+    padding: 20px;
+    margin: 0px 0 10px;
+    border-left: 1px solid rgba(0, 0, 0, 0.125);
+    border-right: 1px solid rgba(0, 0, 0, 0.125);
+    border-bottom: 1px solid rgba(0, 0, 0, 0.125);
+}
+.tresorerie .card-number {
+    font-size: 20px;
+    font-weight: 300;
 }
-.tresorerie .card-number { font-size: 20px; font-weight: 300; }
 
-.card.card-cca { -webkit-flex-direction: row; flex-direction: row; }
-.card-cca-half { width: 50%; }
+.card.card-cca {
+    -webkit-flex-direction: row;
+    flex-direction: row;
+}
+.card-cca-half {
+    width: 50%;
+}
 
-#commandes, #facture_non_encaisse, #pipe, #facture, #fournisseur, #releve { cursor: pointer; }
+#commandes,
+#facture_non_encaisse,
+#pipe,
+#facture,
+#fournisseur,
+#releve {
+    cursor: pointer;
+}
 
-.ca_target { font-size: 18px; }
+.ca_target {
+    font-size: 18px;
+}
 
 /* ProgressBar */
-canvas { width: 100%; }
+canvas {
+    width: 100%;
+}
 /* Legende ProgressBar */
-.table-legend { width: 100%; max-width: 100%; margin: 10px 0; border-collapse: separate; border-spacing: 8px; font-size: 11px; }
-.table-legend .nb { text-align: right; }
-.table-legend-total td { border-top: 1px solid #eee; border-bottom: : 1px solid #eee; font-weight: 700; padding: 2px 0; }
+.table-legend {
+    width: 100%;
+    max-width: 100%;
+    margin: 10px 0;
+    border-collapse: separate;
+    border-spacing: 8px;
+    font-size: 11px;
+}
+.table-legend .nb {
+    text-align: right;
+}
+.table-legend-total td {
+    border-top: 1px solid #eee;
+    border-bottom: 1px solid #eee;
+    font-weight: 700;
+    padding: 2px 0;
+}
diff --git a/static/src/js/dashboard_year.js b/static/src/js/dashboard_year.js
index a7aa59c86da2164af2f100f003ce1d0fb3220c52..f7f099f117f4cad8ca9c812b6ca7c3e96bf9215f 100644
--- a/static/src/js/dashboard_year.js
+++ b/static/src/js/dashboard_year.js
@@ -1,348 +1,428 @@
- // © 2019 Le Filament (<http://www.le-filament.com>)
- // License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-
-odoo.define('lefilament_tdb.dashboard_year', function (require) {
-	"use strict";
-
-	var core = require('web.core');
-	var session = require('web.session');
-	var AbstractAction = require('web.AbstractAction');
-	var QWeb = core.qweb;
-
-	var YearDashboardView = AbstractAction.extend({
-	    template: 'YearDashboard',
-
-	    events: {
-	        'click #facture': function(e) {
-	        	var fiscalyear = e.target.dataset.fiscalyear;
-	        	this.facture(fiscalyear);
-	        },
-	        'click #facture_non_encaisse': function() {
-	        	this.facture_non_encaisse();
-	        },
-	        'click #commandes': function() {
-	        	this.commandes();
-	        },
-	        'click #pipe_link': function(e) {
-	        	var fiscalyearnext = e.target.dataset.fiscalyearnext;
-	        	this.pipe(fiscalyearnext);
-	        },
-	        'click #pipe_n1_link': function(e) {
-	        	var fiscalyearnext = e.target.dataset.fiscalyearnext;
-	        	this.pipe_n1(fiscalyearnext);
-	        },
-	        'click #fournisseur_link': function() {
-	        	this.fournisseur();
-	        },
-	        'click #releve': function() {
-	        	this.releve();
-	        },
-	    },
-
-	    init: function() {
-	      var result = this._super.apply(this, arguments);
-	      return result;
-	    },
-
-	    willStart: function() {
-	        var deferred = new jQuery.Deferred();
-	        var self = this;
-	        this.values = {};
-	        this.progess = 0;
-
-	        var invoice_view_id = this._rpc({
-				    model: 'ir.model.data',
-				    method: 'xmlid_to_res_id',
-				    args: ['account.view_move_form'],
-				}).then(function(results) {
-	        		self.invoice_view_id = results;
-	        	});
-
-	        var pipe_view_id = this._rpc({
-				    model: 'ir.model.data',
-				    method: 'xmlid_to_res_id',
-				    args: ['crm.crm_case_form_view_oppor'],
-				}).then(function(results) {
-	        		self.pipe_view_id = results;
-	        	});
-
-	        this._rpc({
-				    model: 'lefilament.dashboard',
-				    method: 'retrieve_datas_dashboard',
-				    args: [],
-				})
-                .then(function(results) {
-                    self.values = results;
-
-                    self.pfact2 = (self.values.facture);
-					self.pcomm2 = (self.values.commandes);
-					self.ppipe2_win = (self.values.pipe_win);
-					self.ppipe2_to_win = (self.values.pipe_to_win);
-
-                    if (self.values.target > 0) {
-                    	self.pfact = (self.values.facture / self.values.target * 100).toFixed(0);
-                    	self.pcomm = (self.values.commandes / self.values.target * 100).toFixed(0);
-						self.ppipe_win = (self.values.pipe_win / self.values.target * 100).toFixed(0);
-						self.ppipe_to_win = (self.values.pipe_to_win / self.values.target * 100).toFixed(0);
-						self.ptarg = 100-self.pfact-self.pcomm-self.ppipe_win-self.ppipe_to_win;
-						self.ptarg2 = self.values.target -self.pfact2-self.pcomm2-self.ppipe2_to_win-self.ppipe2_win;
-						self.total = ((self.values.facture + self.values.commandes + self.values.pipe_win) / self.values.target * 100).toFixed(0);
-                    } else {
-                    	self.pfact = 'n/a';
-                    	self.pcomm = 'n/a';
-						self.ppipe_win = 'n/a';
-						self.ppipe_to_win = 'n/a';
-						self.ptarg = 'n/a';
-						self.ptarg2 = 'n/a';
-						self.total = 'n/a';
-                    }
-					
-					
-					self.total2 = self.pfact2 + self.pcomm2 + self.ppipe2_win
-
-					self.target = self.values.target
-                    
-                    deferred.resolve();
-                });
-	          return jQuery.when(this._super.apply(this, arguments),deferred);
-	    },
-
-	    start: function() {
-	    	return this.render_chart();
-	    },
-
-	    render_chart: function(chart) {
-	    	self = this;
-
-			/////////////////////////////////////////
+// © 2019 Le Filament (<http://www.le-filament.com>)
+// License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
+
+odoo.define("lefilament_tdb.dashboard_year", function (require) {
+    "use strict";
+
+    var core = require("web.core");
+    var session = require("web.session");
+    var AbstractAction = require("web.AbstractAction");
+
+    var YearDashboardView = AbstractAction.extend({
+        template: "YearDashboard",
+        jsLibs: ["/web/static/lib/Chart/Chart.js"],
+        events: {
+            "click #facture": function (e) {
+                var fiscalyear = e.target.dataset.fiscalyear;
+                this.facture(fiscalyear);
+            },
+            "click #facture_non_encaisse": function () {
+                this.facture_non_encaisse();
+            },
+            "click #commandes": function () {
+                this.commandes();
+            },
+            "click #pipe_link": function (e) {
+                var fiscalyearnext = e.target.dataset.fiscalyearnext;
+                this.pipe(fiscalyearnext);
+            },
+            "click #pipe_n1_link": function (e) {
+                var fiscalyearnext = e.target.dataset.fiscalyearnext;
+                this.pipe_n1(fiscalyearnext);
+            },
+            "click #fournisseur_link": function () {
+                this.fournisseur();
+            },
+            "click #releve": function () {
+                this.releve();
+            },
+        },
+
+        init: function () {
+            var result = this._super.apply(this, arguments);
+            return result;
+        },
+
+        willStart: function () {
+            var deferred = new jQuery.Deferred();
+            var self = this;
+            this.values = {};
+            this.progess = 0;
+
+            this._rpc({
+                model: "ir.model.data",
+                method: "xmlid_to_res_id",
+                args: ["account.view_move_form"],
+            }).then(function (results) {
+                self.invoice_view_id = results;
+            });
+
+            this._rpc({
+                model: "ir.model.data",
+                method: "xmlid_to_res_id",
+                args: ["crm.crm_case_form_view_oppor"],
+            }).then(function (results) {
+                self.pipe_view_id = results;
+            });
+
+            this._rpc({
+                model: "lefilament.dashboard",
+                method: "retrieve_datas_dashboard",
+                args: [],
+            }).then(function (results) {
+                self.values = results;
+
+                self.pfact2 = self.values.facture;
+                self.pcomm2 = self.values.commandes;
+                self.ppipe2_win = self.values.pipe_win;
+                self.ppipe2_to_win = self.values.pipe_to_win;
+
+                if (self.values.target > 0) {
+                    self.pfact = (
+                        (self.values.facture / self.values.target) *
+                        100
+                    ).toFixed(0);
+                    self.pcomm = (
+                        (self.values.commandes / self.values.target) *
+                        100
+                    ).toFixed(0);
+                    self.ppipe_win = (
+                        (self.values.pipe_win / self.values.target) *
+                        100
+                    ).toFixed(0);
+                    self.ppipe_to_win = (
+                        (self.values.pipe_to_win / self.values.target) *
+                        100
+                    ).toFixed(0);
+                    self.ptarg =
+                        100 -
+                        self.pfact -
+                        self.pcomm -
+                        self.ppipe_win -
+                        self.ppipe_to_win;
+                    self.ptarg2 =
+                        self.values.target -
+                        self.pfact2 -
+                        self.pcomm2 -
+                        self.ppipe2_to_win -
+                        self.ppipe2_win;
+                    self.total = (
+                        ((self.values.facture +
+                            self.values.commandes +
+                            self.values.pipe_win) /
+                            self.values.target) *
+                        100
+                    ).toFixed(0);
+                } else {
+                    self.pfact = "n/a";
+                    self.pcomm = "n/a";
+                    self.ppipe_win = "n/a";
+                    self.ppipe_to_win = "n/a";
+                    self.ptarg = "n/a";
+                    self.ptarg2 = "n/a";
+                    self.total = "n/a";
+                }
+
+                self.total2 = self.pfact2 + self.pcomm2 + self.ppipe2_win;
+
+                self.target = self.values.target;
+
+                deferred.resolve();
+            });
+            return jQuery.when(this._super.apply(this, arguments), deferred);
+        },
+
+        start: function () {
+            return this.render_chart();
+        },
+
+        render_chart: function () {
+            // ///////////////////////////////////////
             //    Etat d'avancement -> Bar Chart   //
-            /////////////////////////////////////////
-            
-            this.ctx = this.$el.find('#target')[0].getContext('2d');
+            // ///////////////////////////////////////
+
+            this.ctx = this.$el.find("#target")[0].getContext("2d");
 
             var ptarg = this.ptarg;
             var max_xaxis = 100;
 
-            if (this.ptarg < 0 ) {
-            	ptarg = 0;
-            	max_xaxis = 100 - this.ptarg;
+            if (this.ptarg < 0) {
+                ptarg = 0;
+                max_xaxis = 100 - this.ptarg;
             }
-	    		
-   			var dataset_stacked = [
-		        { label: 'Facturé', data: [this.pfact], backgroundColor: '#8ED8A2', },
-		        { label: 'Commandes', data: [this.pcomm], backgroundColor: '#F6DCA2', },
-		        { label: 'Gagné', data: [this.ppipe_win], backgroundColor: '#F6CCA2', },
-		        { label: 'Pipe', data: [this.ppipe_to_win], backgroundColor: '#F6ACA2', },
-		        { label: 'To Do', data: [ptarg], backgroundColor: '#eee', },
-		        ];
-
-		    var label = 'Année ' + moment(Date.now()).format('YYYY');
-
-		    this.targetData = {
-	            labels : [label],
-	            datasets : dataset_stacked
-	        };
-
-            var options = { 
-            	responsive: true,
-            	legend: {
-            		display: false,
-            	},
-            	layout: { 
-            		padding: { left:0, right: 0, bottom: 20, top: 20, },
-            	},
-            	scales: {
-		            xAxes: [{
-		                stacked: true,
-		                scaleShowLabels: false,
-                        display : true ,
-                        ticks: {
-		                    max: max_xaxis,
-		                    stepSize: 25,
-		                    fontSize: 9,
-		                    fontColor: '#999',
-		                    callback: function(value, index, values) {
-		                        return value + '%';
-		                    },
-		                },
-		                gridLines: {
-		                	zeroLineColor: 'rgba(0, 0, 0, 0.1)',
-		                	drawBorder: false,
-		                	tickMarkLength: 2,
-		                },
-		            }],
-                    yAxes: [{
+
+            var dataset_stacked = [
+                {label: "Facturé", data: [this.pfact], backgroundColor: "#8ED8A2"},
+                {label: "Commandes", data: [this.pcomm], backgroundColor: "#F6DCA2"},
+                {label: "Gagné", data: [this.ppipe_win], backgroundColor: "#F6CCA2"},
+                {label: "Pipe", data: [this.ppipe_to_win], backgroundColor: "#F6ACA2"},
+                {label: "To Do", data: [ptarg], backgroundColor: "#eee"},
+            ];
+
+            var label = "Année " + moment(Date.now()).format("YYYY");
+
+            this.targetData = {
+                labels: [label],
+                datasets: dataset_stacked,
+            };
+
+            var options = {
+                responsive: true,
+                legend: {
+                    display: false,
+                },
+                layout: {
+                    padding: {left: 0, right: 0, bottom: 20, top: 20},
+                },
+                scales: {
+                    xAxes: [
+                        {
                             stacked: true,
                             scaleShowLabels: false,
-                            display : false ,
-                        }]
-		        },
-		        tooltips: {
-		        	backgroundColor: 'rgba(255,255,255,0.8)',
-		        	titleFontStyle: 'normal',
-		        	titleFontColor: '#999',
-		        	bodyFontColor: '#777',
-		        	callbacks: {
-	                    label: function(tooltipItems, data) { 
-	                        return (tooltipItems.xLabel * self.target  / 100000).toLocaleString('fr', { maximumFractionDigits: 2 }) + ' K€';
-	                    }
-	                }
-		        },
-		        responsive: true,
-            }
-
-            var myLineChart = new Chart(this.ctx, { type: 'horizontalBar', data: this.targetData, options } );
-
-	    },
-
-	    render_monetary: function(value) {
-	        value = value.toLocaleString('fr', { maximumFractionDigits: 0 }) + ' €';
-	        return value;
-	    },
-	    render_keur: function(value) {
-	        value = (value/ 1000).toLocaleString('fr', { maximumFractionDigits: 0 }) + ' K€';
-	        return value;
-	    },
-	    render_percent: function(value) {
-	        value = value.toLocaleString('fr', { maximumFractionDigits: 1 }) + ' %';
-	        return value;
-	    },
-	    render_date: function(value) {
-	    	var dateFormat = new Date(value);
-            var new_value = moment(dateFormat).format('Do MMM YYYY');
-            return new_value;
-	    },
-	    render_monetary_color: function(value) {
-	        if (value >= 0)
-	          value = '<span class="positive">'+value.toLocaleString('fr', { maximumFractionDigits: 0 }) + ' €</span>';
-	        else
-	          value = '<span class="negative">'+value.toLocaleString('fr', { maximumFractionDigits: 0 }) + ' €</span>';
-	        
-	        return value;
-	    },
-
-	    facture: function(fiscalyear) {
-	    	var self = this;
-	    	var context = { 'user_id': session.uid, }
-
-        	var action = ({
-            	type: 'ir.actions.act_window',
-             	res_model: 'account.move',
-            	view_mode: 'tree,form',
-            	views: [[false, 'list'], [false, 'pivot'], [false, 'graph'], [self.invoice_view_id, 'form']],
-            	domain: [['state','in',['open','paid']],['type','in',['out_invoice', 'out_refund']],['date_invoice','>=',fiscalyear]],
-            	target:'current',
-            	name: 'Facturé',
-            	context: context
-        	})
-
-        	this.do_action(action);
-	    },
-	    commandes: function() {
-	    	var self = this;
-	    	var context = { 'user_id': session.uid, }
-
-        	var action = ({
-            	type: 'ir.actions.act_window',
-             	res_model: 'sale.order',
-            	view_mode: 'tree,form',
-            	views: [[false, 'list'], [false, 'form']],
-            	domain: [['invoice_status','=','to invoice']],
-            	target:'current',
-            	name: 'Commandes en cours',
-            	context: context
-        	})
-
-        	this.do_action(action);
-	    },
-	    pipe: function(fiscalyearnext) {
-	    	var self = this;
-	    	var context = { 'user_id': session.uid, }
-
-        	var action = ({
-            	type: 'ir.actions.act_window',
-             	res_model: 'crm.lead',
-            	view_mode: 'tree,form',
-            	views: [[false, 'kanban'], [false, 'list'], [this.pipe_view_id, 'form']],
-            	domain: ['|',['date_deadline','<=', fiscalyearnext],['date_deadline','=', null], ['type','=','opportunity'] ],
-            	target:'current',
-            	name: 'Pipe',
-            	context: context
-        	})
-
-        	this.do_action(action);
-	    },
-	    pipe_n1: function(fiscalyearnext) {
-	    	var self = this;
-	    	var context = { 'user_id': session.uid, }
-
-        	var action = ({
-            	type: 'ir.actions.act_window',
-             	res_model: 'crm.lead',
-            	view_mode: 'kanban,tree,form',
-            	views: [[false, 'kanban'], [false, 'list'], [this.pipe_view_id, 'form']],
-            	domain: [['type','=','opportunity'],['date_deadline','>', fiscalyearnext]],
-            	target:'current',
-            	name: 'Pipe',
-            	context: context
-        	})
-
-        	this.do_action(action);
-	    },
-	    facture_non_encaisse: function() {
-	    	var self = this;
-	    	var context = { 'user_id': session.uid, }
-
-        	var action = ({
-            	type: 'ir.actions.act_window',
-             	res_model: 'account.move',
-            	view_mode: 'tree,form',
-            	views: [[false, 'list'], [false, 'pivot'], [false, 'graph'], [self.invoice_view_id, 'form']],
-            	domain: [['state','=','open'],['type','=','out_invoice']],
-            	target:'current',
-            	name: 'Factures en cours',
-            	context: context
-        	})
-
-        	this.do_action(action);
-	    },
-	    fournisseur: function() {
-	    	var self = this;
-	    	var context = { 'user_id': session.uid, }
-
-        	var action = ({
-            	type: 'ir.actions.act_window',
-             	res_model: 'account.move',
-            	view_mode: 'tree,form',
-            	views: [[false, 'list'], [false, 'form']],
-            	domain: [['state','=','open'],['type','=','in_invoice']],
-            	target:'current',
-            	name: 'Factures fournisseurs en cours',
-            	context: context
-        	})
-
-        	this.do_action(action);
-	    },
-	    releve: function() {
-	    	var self = this;
-	    	var context = { 'user_id': session.uid, }
-
-        	var action = ({
-            	type: 'ir.actions.act_window',
-             	res_model: 'account.bank.statement',
-            	view_mode: 'tree,form',
-            	views: [[false, 'list'], [false, 'form']],
-            	target:'current',
-            	name: 'Relevés en cours',
-            	context: context
-        	})
-
-        	this.do_action(action);
-	    },
-	});
-
-	core.action_registry.add('lefilament_tdb.dashboard_year', YearDashboardView);
-
-
+                            display: true,
+                            ticks: {
+                                max: max_xaxis,
+                                stepSize: 25,
+                                fontSize: 9,
+                                fontColor: "#999",
+                                callback: function (value) {
+                                    return value + "%";
+                                },
+                            },
+                            gridLines: {
+                                zeroLineColor: "rgba(0, 0, 0, 0.1)",
+                                drawBorder: false,
+                                tickMarkLength: 2,
+                            },
+                        },
+                    ],
+                    yAxes: [
+                        {
+                            stacked: true,
+                            scaleShowLabels: false,
+                            display: false,
+                        },
+                    ],
+                },
+                tooltips: {
+                    backgroundColor: "rgba(255,255,255,0.8)",
+                    titleFontStyle: "normal",
+                    titleFontColor: "#999",
+                    bodyFontColor: "#777",
+                    callbacks: {
+                        label: function (tooltipItems) {
+                            return (
+                                (
+                                    (tooltipItems.xLabel * self.target) /
+                                    100000
+                                ).toLocaleString("fr", {maximumFractionDigits: 2}) +
+                                " K€"
+                            );
+                        },
+                    },
+                },
+            };
+
+            this.chart = new Chart(this.ctx, {
+                type: "horizontalBar",
+                data: this.targetData,
+                options,
+            });
+        },
+
+        render_monetary: function (value) {
+            var res = value.toLocaleString("fr", {maximumFractionDigits: 0}) + " €";
+            return res;
+        },
+        render_keur: function (value) {
+            var res =
+                (value / 1000).toLocaleString("fr", {maximumFractionDigits: 0}) + " K€";
+            return res;
+        },
+        render_percent: function (value) {
+            var res = value.toLocaleString("fr", {maximumFractionDigits: 1}) + " %";
+            return res;
+        },
+        render_date: function (value) {
+            var dateFormat = new Date(value);
+            var res = moment(dateFormat).format("Do MMM YYYY");
+            return res;
+        },
+        render_monetary_color: function (value) {
+            if (value >= 0)
+                var res =
+                    '<span class="positive">' +
+                    value.toLocaleString("fr", {maximumFractionDigits: 0}) +
+                    " €</span>";
+            else
+                var res =
+                    '<span class="negative">' +
+                    value.toLocaleString("fr", {maximumFractionDigits: 0}) +
+                    " €</span>";
+
+            return res;
+        },
+
+        facture: function (fiscalyear) {
+            var self = this;
+            var context = {user_id: session.uid};
+
+            var action = {
+                type: "ir.actions.act_window",
+                res_model: "account.move",
+                view_mode: "tree,form",
+                views: [
+                    [false, "list"],
+                    [false, "pivot"],
+                    [false, "graph"],
+                    [self.invoice_view_id, "form"],
+                ],
+                domain: [
+                    ["state", "=", "posted"],
+                    ["move_type", "in", ["out_invoice", "out_refund"]],
+                    ["invoice_date", ">=", fiscalyear],
+                ],
+                target: "current",
+                name: "Facturé",
+                context: context,
+            };
+
+            this.do_action(action);
+        },
+        commandes: function () {
+            var context = {user_id: session.uid};
+
+            var action = {
+                type: "ir.actions.act_window",
+                res_model: "sale.order",
+                view_mode: "tree,form",
+                views: [
+                    [false, "list"],
+                    [false, "form"],
+                ],
+                domain: [["invoice_status", "=", "to invoice"]],
+                target: "current",
+                name: "Commandes en cours",
+                context: context,
+            };
+
+            this.do_action(action);
+        },
+        pipe: function (fiscalyearnext) {
+            var context = {user_id: session.uid};
+
+            var action = {
+                type: "ir.actions.act_window",
+                res_model: "crm.lead",
+                view_mode: "tree,form",
+                views: [
+                    [false, "kanban"],
+                    [false, "list"],
+                    [this.pipe_view_id, "form"],
+                ],
+                domain: [
+                    "|",
+                    ["date_deadline", "<=", fiscalyearnext],
+                    ["date_deadline", "=", null],
+                    ["type", "=", "opportunity"],
+                ],
+                target: "current",
+                name: "Pipe",
+                context: context,
+            };
+
+            this.do_action(action);
+        },
+        pipe_n1: function (fiscalyearnext) {
+            var context = {user_id: session.uid};
+
+            var action = {
+                type: "ir.actions.act_window",
+                res_model: "crm.lead",
+                view_mode: "kanban,tree,form",
+                views: [
+                    [false, "kanban"],
+                    [false, "list"],
+                    [this.pipe_view_id, "form"],
+                ],
+                domain: [
+                    ["type", "=", "opportunity"],
+                    ["date_deadline", ">", fiscalyearnext],
+                ],
+                target: "current",
+                name: "Pipe",
+                context: context,
+            };
+
+            this.do_action(action);
+        },
+        facture_non_encaisse: function () {
+            var context = {user_id: session.uid};
+
+            var action = {
+                type: "ir.actions.act_window",
+                res_model: "account.move",
+                view_mode: "tree,form",
+                views: [
+                    [false, "list"],
+                    [false, "pivot"],
+                    [false, "graph"],
+                    [self.invoice_view_id, "form"],
+                ],
+                domain: [
+                    ["state", "=", "posted"],
+                    ["payment_state", "in", ["not_paid", "in_payment", "partial"]],
+                    ["move_type", "=", "out_invoice"],
+                ],
+                target: "current",
+                name: "Factures en cours",
+                context: context,
+            };
+
+            this.do_action(action);
+        },
+        fournisseur: function () {
+            var context = {user_id: session.uid};
+
+            var action = {
+                type: "ir.actions.act_window",
+                res_model: "account.move",
+                view_mode: "tree,form",
+                views: [
+                    [false, "list"],
+                    [false, "form"],
+                ],
+                domain: [
+                    ["state", "=", "posted"],
+                    ["payment_state", "in", ["not_paid", "in_payment", "partial"]],
+                    ["move_type", "=", "in_invoice"],
+                ],
+                target: "current",
+                name: "Factures fournisseurs en cours",
+                context: context,
+            };
+
+            this.do_action(action);
+        },
+        releve: function () {
+            var context = {user_id: session.uid};
+
+            var action = {
+                type: "ir.actions.act_window",
+                res_model: "account.bank.statement",
+                view_mode: "tree,form",
+                views: [
+                    [false, "list"],
+                    [false, "form"],
+                ],
+                target: "current",
+                name: "Relevés en cours",
+                context: context,
+            };
+
+            this.do_action(action);
+        },
+    });
+
+    core.action_registry.add("lefilament_tdb.dashboard_year", YearDashboardView);
 });
-
diff --git a/static/src/js/previ_tresorerie.js b/static/src/js/previ_tresorerie.js
index 6d6ef1981094bc523f11589504907bf2e8c244a2..3cd0838d53f220adbae8f0ecb328a71ef6ddc7fd 100644
--- a/static/src/js/previ_tresorerie.js
+++ b/static/src/js/previ_tresorerie.js
@@ -1,191 +1,274 @@
 // © 2017 Le Filament (<http://www.le-filament.com>)
 // License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-odoo.define('lefilament_tdb.previ_tresorerie', function (require) {
-	"use strict";
-
-	var core = require('web.core');
-	var session = require('web.session');
-	var AbstractAction = require('web.AbstractAction');
-
-
-	var TresorerieView = AbstractAction.extend({
-	    template: 'Tresorerie',
-
-	    init: function() {
-	      var result = this._super.apply(this, arguments);
-	      return result;
-	    },
-
-	    willStart: function() {
-	        var deferred = new jQuery.Deferred();
-	        var self = this;
-	        this.values = {};
-	        
-	        this._rpc({
-				    model: 'lefilament.dashboard',
-				    method: 'previ_tresorerie',
-				    args: [ ],
-				}).then(function(results) {
-	        		self.values = results;
-                    deferred.resolve();
-	        	});
-	        return jQuery.when(this._super.apply(this, arguments),deferred);
-	    },
-
-	    start: function() {
-	    	return this.render_chart();
-	    },
-
-	    render_chart: function(chart) {
-	    	self = this;
-
-			/////////////////////////////////////////
+odoo.define("lefilament_tdb.previ_tresorerie", function (require) {
+    "use strict";
+
+    var core = require("web.core");
+    var AbstractAction = require("web.AbstractAction");
+
+    var TresorerieView = AbstractAction.extend({
+        template: "Tresorerie",
+        jsLibs: ["/web/static/lib/Chart/Chart.js"],
+
+        init: function () {
+            var result = this._super.apply(this, arguments);
+            return result;
+        },
+
+        willStart: function () {
+            var deferred = new jQuery.Deferred();
+            var self = this;
+            this.values = {};
+
+            this._rpc({
+                model: "lefilament.dashboard",
+                method: "previ_tresorerie",
+                args: [],
+            }).then(function (results) {
+                self.values = results;
+                deferred.resolve();
+            });
+            return jQuery.when(this._super.apply(this, arguments), deferred);
+        },
+
+        start: function () {
+            return this.render_chart();
+        },
+
+        render_chart: function () {
+            // ///////////////////////////////////////
             //      Trésorerie  -> Bar Chart       //
-            /////////////////////////////////////////
-            this.ctx = this.$el.find('#tresorerie')[0].getContext('2d');
+            // ///////////////////////////////////////
+            this.ctx = this.$el.find("#tresorerie")[0].getContext("2d");
 
             var labels = [];
             var data_months = [];
             var data_year = [];
             var month = moment().month();
             for (var i = -5; i < 7; i++) {
-            	labels.push(moment().month(month + i).format("MMM YYYY"));
-            	data_months.push(moment().month(month + i).format("MM"));
-            	data_year.push(moment().month(month + i).format("YYYY-MM"));
+                labels.push(
+                    moment()
+                        .month(month + i)
+                        .format("MMM YYYY")
+                );
+                data_months.push(
+                    moment()
+                        .month(month + i)
+                        .format("MM")
+                );
+                data_year.push(
+                    moment()
+                        .month(month + i)
+                        .format("YYYY-MM")
+                );
             }
             var treso_r = this.reverse_array(this.values.tresorerie);
             var treso_r_length = treso_r.length;
 
-            if (treso_r_length < 7 ) {
-            	for (var i = 0; i < 6 - treso_r_length ; i++) {
-            		treso_r.unshift( { 'treso': null, } );
-            	}
+            if (treso_r_length < 7) {
+                for (var j = 0; j < 6 - treso_r_length; j++) {
+                    treso_r.unshift({treso: null});
+                }
             }
 
             var treso = [];
             var cca = [];
             var fonds_propres = [];
-            
+
             var charges_an = 0;
             var charges_fixes_an = [];
             var charges_fixes = [];
-            
+
             var client = 0;
             var f_client = [];
             var fournisseur = 0;
             var f_fournisseur = [];
 
             var previsionnel = [];
-            
-
-            for (var i = 0; i < 12 ; i++) {
-            	// CCA + Fonds Propres
-            	cca.push(this.values.fonds_propres.cca);
-            	fonds_propres.push(this.values.fonds_propres.cca+this.values.fonds_propres.capital);
-            	
-            	// Trésorerie
-            	if (treso_r[i]) { treso.push(treso_r[i].treso); }
-
-            	console.log(treso_r);
-            	console.log(this.values.charges_periode);
-
-            	// Calcul des factures
-            	_.each( this.values.factures, function(value, key) {
-	            	if (value.mois == data_year[i] ) {
-	           			client = value.f_client; 
-	           			fournisseur = value.f_fournisseur;         		
-	            	}
-	            });
-            	if ( client != 0 ) { f_client.push(client); client = 0; } else { f_client.push(0); }
-            	if ( fournisseur != 0 ) { f_fournisseur.push(fournisseur); fournisseur = 0; } else { f_fournisseur.push(0); }
-            	
-            	// Calcul des fixes annuelles
-            	_.each( this.values.charges_fixes, function(value, key) {
-	            	if (value.mois == data_year[i] ) {
-	           			charges_an = value.sum;
-	            	}
-	            });
-            	if ( charges_an != 0 ) { charges_fixes_an.push(charges_an); charges_an = 0; } else { charges_fixes_an.push(0); }
-
-            	// Calcul charges fixes
-            	if ( i < 5 ) { charges_fixes.push(null); }
-            	else if ( i == 5 ) { charges_fixes.push(treso_r[5].treso); }
-            	else {
-            		// Trimestres
-            		if (this.values.charges_periode.length > 0 ) {
-	            		if (['01', '04', '07', '10'].indexOf(data_months[i]) >= 0) {
-	            			charges_fixes.push( this.values.charges_periode[0].sum + this.values.charges_periode[1].sum );
-	            		} else {
-            				charges_fixes.push( this.values.charges_periode[1].sum );
-            			}
-            		} else {
-            			charges_fixes.push( null );
-            		}
-            	}
-            	
+
+            for (var k = 0; k < 12; k++) {
+                // CCA + Fonds Propres
+                cca.push(this.values.fonds_propres.cca);
+                fonds_propres.push(
+                    this.values.fonds_propres.cca + this.values.fonds_propres.capital
+                );
+
+                // Trésorerie
+                if (treso_r[k]) {
+                    treso.push(treso_r[k].treso);
+                }
+
+                console.log(treso_r);
+                console.log(this.values.charges_periode);
+
+                // Calcul des factures
+                _.each(this.values.factures, function (value) {
+                    if (value.mois === data_year[k]) {
+                        client = value.f_client;
+                        fournisseur = value.f_fournisseur;
+                    }
+                });
+                if (client !== 0) {
+                    f_client.push(client);
+                    client = 0;
+                } else {
+                    f_client.push(0);
+                }
+                if (fournisseur !== 0) {
+                    f_fournisseur.push(fournisseur);
+                    fournisseur = 0;
+                } else {
+                    f_fournisseur.push(0);
+                }
+
+                // Calcul des fixes annuelles
+                _.each(this.values.charges_fixes, function (value) {
+                    if (value.mois === data_year[k]) {
+                        charges_an = value.sum;
+                    }
+                });
+                if (charges_an !== 0) {
+                    charges_fixes_an.push(charges_an);
+                    charges_an = 0;
+                } else {
+                    charges_fixes_an.push(0);
+                }
+
+                // Calcul charges fixes
+                if (k < 5) {
+                    charges_fixes.push(null);
+                } else if (k === 5) {
+                    charges_fixes.push(treso_r[5].treso);
+                } else {
+                    // Trimestres
+                    if (this.values.charges_periode.length > 0) {
+                        if (["01", "04", "07", "10"].indexOf(data_months[k]) >= 0) {
+                            charges_fixes.push(
+                                this.values.charges_periode[0].sum +
+                                    this.values.charges_periode[1].sum
+                            );
+                        } else {
+                            charges_fixes.push(this.values.charges_periode[1].sum);
+                        }
+                    } else {
+                        charges_fixes.push(null);
+                    }
+                }
             }
 
-            for (var i = 0; i < 12 ; i++) {
-            	if (i > 4 ) {
-            		previsionnel.push( previsionnel[i-1] + charges_fixes[i] + f_client[i] - f_fournisseur[i] + charges_fixes_an[i]);
-            	} else { 
-            		previsionnel.push(null); 
-            	}
+            for (var l = 0; l < 12; l++) {
+                if (l > 4) {
+                    previsionnel.push(
+                        previsionnel[l - 1] +
+                            charges_fixes[l] +
+                            f_client[l] -
+                            f_fournisseur[l] +
+                            charges_fixes_an[l]
+                    );
+                } else {
+                    previsionnel.push(null);
+                }
             }
-            
-   			var datasets = [
-   				{ label: 'Trésorerie', data: treso, backgroundColor: 'rgba(94, 142, 213, 0.08)',borderColor: '#5E8ED5', },
-   				{ label: 'Prévisionnel', data: previsionnel, backgroundColor: 'transparent',borderColor: 'rgba(94,142,213,0.6)', borderDash: [5,5] },
-   				{ label: 'Client', data: f_client, backgroundColor: 'transparent',borderColor: '#51d2b7', borderWidth: 1.5, radius: 1, },
-   				{ label: 'Fournisseur', data: f_fournisseur, backgroundColor: 'transparent',borderColor: '#FCA7B3', borderWidth: 1.5, radius: 1, },
-   				{ label: 'CCA', data: cca, backgroundColor: 'transparent',borderColor: '#FFDFA9', borderWidth: 1.5, radius: 0, },
-   				{ label: 'Fonds Propres', data: fonds_propres, backgroundColor: 'transparent',borderColor: '#A2BFEA', borderWidth: 1.5, radius: 0, },
-		        ];
-
-		    var options = {
-			        scales: {
-			            yAxes: [{
-			                ticks: {
-			                    beginAtZero:true,
-			                }
-			            }]
-			        },
-			        tooltips: {
-		        	backgroundColor: 'rgba(255,255,255,0.8)',
-		        	titleFontStyle: 'normal',
-		        	titleFontColor: '#999',
-		        	bodyFontColor: '#777',
-		        	callbacks: {
-	                    label: function(tooltipItems, data) { 
-	                        return ' ' + (tooltipItems.yLabel / 1000).toLocaleString('fr', { maximumFractionDigits: 1 }) + ' k€';
-	                    }
-	                }
-		        },
-		        responsive: true,
-			    }
-
-		    this.targetData = {
-	            labels : labels,
-	            datasets : datasets
-	        };
-
-            var myChart = new Chart(this.ctx, { type: 'line', data: this.targetData, options: options } );
-
-	    },
-	    reverse_array: function(array) {
-	    	var tabLength = array.length - 1;
-	    	var new_array = [];
-	    	for (var i = tabLength; i > -1; i--) {
-	    		new_array.push(array[i]);
-	    	}
-	    	return new_array;
-	    },
-
-	});
-
-	core.action_registry.add('lefilament_tdb.previ_tresorerie', TresorerieView);
 
+            var datasets = [
+                {
+                    label: "Trésorerie",
+                    data: treso,
+                    backgroundColor: "rgba(94, 142, 213, 0.08)",
+                    borderColor: "#5E8ED5",
+                },
+                {
+                    label: "Prévisionnel",
+                    data: previsionnel,
+                    backgroundColor: "transparent",
+                    borderColor: "rgba(94,142,213,0.6)",
+                    borderDash: [5, 5],
+                },
+                {
+                    label: "Client",
+                    data: f_client,
+                    backgroundColor: "transparent",
+                    borderColor: "#51d2b7",
+                    borderWidth: 1.5,
+                    radius: 1,
+                },
+                {
+                    label: "Fournisseur",
+                    data: f_fournisseur,
+                    backgroundColor: "transparent",
+                    borderColor: "#FCA7B3",
+                    borderWidth: 1.5,
+                    radius: 1,
+                },
+                {
+                    label: "CCA",
+                    data: cca,
+                    backgroundColor: "transparent",
+                    borderColor: "#FFDFA9",
+                    borderWidth: 1.5,
+                    radius: 0,
+                },
+                {
+                    label: "Fonds Propres",
+                    data: fonds_propres,
+                    backgroundColor: "transparent",
+                    borderColor: "#A2BFEA",
+                    borderWidth: 1.5,
+                    radius: 0,
+                },
+            ];
 
-});
+            var options = {
+                scales: {
+                    yAxes: [
+                        {
+                            ticks: {
+                                beginAtZero: true,
+                            },
+                        },
+                    ],
+                },
+                tooltips: {
+                    backgroundColor: "rgba(255,255,255,0.8)",
+                    titleFontStyle: "normal",
+                    titleFontColor: "#999",
+                    bodyFontColor: "#777",
+                    callbacks: {
+                        label: function (tooltipItems) {
+                            return (
+                                " " +
+                                (tooltipItems.yLabel / 1000).toLocaleString("fr", {
+                                    maximumFractionDigits: 1,
+                                }) +
+                                " k€"
+                            );
+                        },
+                    },
+                },
+                responsive: true,
+            };
+
+            this.targetData = {
+                labels: labels,
+                datasets: datasets,
+            };
 
+            this.chart = new Chart(this.ctx, {
+                type: "line",
+                data: this.targetData,
+                options: options,
+            });
+        },
+        reverse_array: function (array) {
+            var tabLength = array.length - 1;
+            var new_array = [];
+            for (var m = tabLength; m > -1; m--) {
+                new_array.push(array[m]);
+            }
+            return new_array;
+        },
+    });
+
+    core.action_registry.add("lefilament_tdb.previ_tresorerie", TresorerieView);
+});
diff --git a/static/src/js/tresorerie.js b/static/src/js/tresorerie.js
index 693235317cbeedf2fa092c4a6ea73f1cdd133a5f..a1f6d7837d5e6b0c0c1c9be7622dfebe836a233b 100644
--- a/static/src/js/tresorerie.js
+++ b/static/src/js/tresorerie.js
@@ -1,128 +1,174 @@
 // © 2019 Le Filament (<http://www.le-filament.com>)
 // License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
 
-odoo.define('lefilament_tdb.tresorerie', function (require) {
-	"use strict";
-
-	var core = require('web.core');
-	var session = require('web.session');
-	var AbstractAction = require('web.AbstractAction');
-
-	var TresorerieView = AbstractAction.extend({
-	    template: 'Tresorerie',
-
-	    init: function() {
-	      var result = this._super.apply(this, arguments);
-	      return result;
-	    },
-
-	    willStart: function() {
-	        var deferred = new jQuery.Deferred();
-	        var self = this;
-	        this.values = {};
-
-	        this._rpc({
-				    model: 'lefilament.dashboard',
-				    method: 'tresorerie',
-				    args: [ ],
-				}).then(function(results) {
-	        		self.values = results;
-                    deferred.resolve();
-	        	});
-
-		    return jQuery.when(this._super.apply(this, arguments),deferred);
-	    },
-
-	    start: function() {
-	    	return this.render_chart();
-	    },
-
-	    render_chart: function(chart) {
-	    	self = this;
-
-			/////////////////////////////////////////
+odoo.define("lefilament_tdb.tresorerie", function (require) {
+    "use strict";
+
+    var core = require("web.core");
+    var AbstractAction = require("web.AbstractAction");
+
+    var TresorerieView = AbstractAction.extend({
+        template: "Tresorerie",
+        jsLibs: ["/web/static/lib/Chart/Chart.js"],
+
+        init: function () {
+            var result = this._super.apply(this, arguments);
+            return result;
+        },
+
+        willStart: function () {
+            var deferred = new jQuery.Deferred();
+            var self = this;
+            this.values = {};
+
+            this._rpc({
+                model: "lefilament.dashboard",
+                method: "tresorerie",
+                args: [],
+            }).then(function (results) {
+                self.values = results;
+                deferred.resolve();
+            });
+
+            return jQuery.when(this._super.apply(this, arguments), deferred);
+        },
+
+        start: function () {
+            return this.render_chart();
+        },
+
+        render_chart: function () {
+            // ///////////////////////////////////////
             //      Trésorerie  -> Bar Chart       //
-            /////////////////////////////////////////
-            this.ctx = this.$el.find('#tresorerie')[0].getContext('2d');
+            // ///////////////////////////////////////
+            this.ctx = this.$el.find("#tresorerie")[0].getContext("2d");
 
             var entree = [];
             var sortie = [];
             var variation = [];
             var treso = [];
             var cca = [];
-            var fonds_propres = []
+            var fonds_propres = [];
             var labels = [];
             var minTab = 11;
 
             var tabLength = this.values.tresorerie.length - 1;
 
-            if ( tabLength < 12 ) {
-            	minTab = tabLength;
+            if (tabLength < 12) {
+                minTab = tabLength;
             }
 
-            _.each(this.values.tresorerie, function(value, key) {
-            	if (key == 0 ) {
-            		treso.push(value.variation);
-            	} else {
-            		var amount = treso[key-1] + value.variation;
-            		treso.push(amount);
-            	}
-            	
+            _.each(this.values.tresorerie, function (value, key) {
+                if (key === 0) {
+                    treso.push(value.variation);
+                } else {
+                    var amount = treso[key - 1] + value.variation;
+                    treso.push(amount);
+                }
             });
-            
-            for (var i = (tabLength-minTab); i < tabLength+1 ; i++) {
-            	entree.push(this.values.tresorerie[i].entree);
-            	sortie.push(this.values.tresorerie[i].sortie * (-1) );
-            	variation.push(this.values.tresorerie[i].variation);
-            	cca.push(this.values.fonds_propres.cca);
-            	fonds_propres.push(this.values.fonds_propres.cca+this.values.fonds_propres.capital);
-            	labels.push(moment(this.values.tresorerie[i].mois).format('MMM YYYY'));
+
+            for (var i = tabLength - minTab; i < tabLength + 1; i++) {
+                entree.push(this.values.tresorerie[i].entree);
+                sortie.push(this.values.tresorerie[i].sortie * -1);
+                variation.push(this.values.tresorerie[i].variation);
+                cca.push(this.values.fonds_propres.cca);
+                fonds_propres.push(
+                    this.values.fonds_propres.cca + this.values.fonds_propres.capital
+                );
+                labels.push(moment(this.values.tresorerie[i].mois).format("MMM YYYY"));
             }
-            
-   			var datasets = [
-   				{ label: 'Trésorerie', data: treso.slice(tabLength-11, tabLength+1), backgroundColor: 'transparent',borderColor: '#5E8ED5', },
-   				{ label: 'CCA', data: cca, backgroundColor: 'transparent',borderColor: '#FFA063', borderWidth: 1.5, radius: 0, },
-   				{ label: 'Fonds Propres', data: fonds_propres, backgroundColor: 'transparent',borderColor: '#FCA7B3', borderWidth: 1.5, radius: 0, },
-   				{ label: 'Variation', data: variation, backgroundColor: 'rgba(255, 197, 98, 0.3)',borderColor: '#FFC562', borderWidth: 1, radius: 1, },
-		        { label: 'Entrées', data: entree, backgroundColor: 'rgba(81, 210, 183, 0.3)', borderColor: '#51d2b7', borderWidth: 1, radius: 1, },
-		        { label: 'Sorties', data: sortie, backgroundColor: 'rgba(249, 96, 117, 0.3)', borderColor: '#F96075', borderWidth: 1, radius: 1, },
-		        ];
-
-		    var options = {
-			        scales: {
-			            yAxes: [{
-			                ticks: {
-			                    beginAtZero:true,
-			                }
-			            }]
-			        },
-			        tooltips: {
-		        	backgroundColor: 'rgba(255,255,255,0.8)',
-		        	titleFontStyle: 'normal',
-		        	titleFontColor: '#999',
-		        	bodyFontColor: '#777',
-		        	callbacks: {
-	                    label: function(tooltipItems, data) { 
-	                        return ' ' + (tooltipItems.yLabel / 1000).toLocaleString('fr', { maximumFractionDigits: 1 }) + ' k€';
-	                    }
-	                }
-		        },
-		        responsive: true,
-			    }
-
-		    this.targetData = {
-	            labels : labels,
-	            datasets : datasets
-	        };
-
-            var myLineChart = new Chart(this.ctx, { type: 'line', data: this.targetData, options: options } );
-
-	    },
-
-	});
-
-	core.action_registry.add('lefilament_tdb.tresorerie', TresorerieView);
 
+            var datasets = [
+                {
+                    label: "Trésorerie",
+                    data: treso.slice(tabLength - 11, tabLength + 1),
+                    backgroundColor: "transparent",
+                    borderColor: "#5E8ED5",
+                },
+                {
+                    label: "CCA",
+                    data: cca,
+                    backgroundColor: "transparent",
+                    borderColor: "#FFA063",
+                    borderWidth: 1.5,
+                    radius: 0,
+                },
+                {
+                    label: "Fonds Propres",
+                    data: fonds_propres,
+                    backgroundColor: "transparent",
+                    borderColor: "#FCA7B3",
+                    borderWidth: 1.5,
+                    radius: 0,
+                },
+                {
+                    label: "Variation",
+                    data: variation,
+                    backgroundColor: "rgba(255, 197, 98, 0.3)",
+                    borderColor: "#FFC562",
+                    borderWidth: 1,
+                    radius: 1,
+                },
+                {
+                    label: "Entrées",
+                    data: entree,
+                    backgroundColor: "rgba(81, 210, 183, 0.3)",
+                    borderColor: "#51d2b7",
+                    borderWidth: 1,
+                    radius: 1,
+                },
+                {
+                    label: "Sorties",
+                    data: sortie,
+                    backgroundColor: "rgba(249, 96, 117, 0.3)",
+                    borderColor: "#F96075",
+                    borderWidth: 1,
+                    radius: 1,
+                },
+            ];
+
+            var options = {
+                scales: {
+                    yAxes: [
+                        {
+                            ticks: {
+                                beginAtZero: true,
+                            },
+                        },
+                    ],
+                },
+                tooltips: {
+                    backgroundColor: "rgba(255,255,255,0.8)",
+                    titleFontStyle: "normal",
+                    titleFontColor: "#999",
+                    bodyFontColor: "#777",
+                    callbacks: {
+                        label: function (tooltipItems) {
+                            return (
+                                " " +
+                                (tooltipItems.yLabel / 1000).toLocaleString("fr", {
+                                    maximumFractionDigits: 1,
+                                }) +
+                                " k€"
+                            );
+                        },
+                    },
+                },
+                responsive: true,
+            };
+
+            this.targetData = {
+                labels: labels,
+                datasets: datasets,
+            };
+
+            this.chart = new Chart(this.ctx, {
+                type: "line",
+                data: this.targetData,
+                options: options,
+            });
+        },
+    });
 
+    core.action_registry.add("lefilament_tdb.tresorerie", TresorerieView);
 });
-
diff --git a/static/src/lib/chart.js b/static/src/lib/chart.js
deleted file mode 100644
index 3e939369fcb871af56c00f1b7463f0e09f7edfb6..0000000000000000000000000000000000000000
--- a/static/src/lib/chart.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/*!
- * Chart.js
- * http://chartjs.org/
- * Version: 2.6.0
- *
- * Copyright 2017 Nick Downie
- * Released under the MIT license
- * https://github.com/chartjs/Chart.js/blob/master/LICENSE.md
- */
-!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Chart=t()}}(function(){return function t(e,n,i){function a(r,l){if(!n[r]){if(!e[r]){var s="function"==typeof require&&require;if(!l&&s)return s(r,!0);if(o)return o(r,!0);var u=new Error("Cannot find module '"+r+"'");throw u.code="MODULE_NOT_FOUND",u}var d=n[r]={exports:{}};e[r][0].call(d.exports,function(t){var n=e[r][1][t];return a(n?n:t)},d,d.exports,t,e,n,i)}return n[r].exports}for(var o="function"==typeof require&&require,r=0;r<i.length;r++)a(i[r]);return a}({1:[function(t,e,n){},{}],2:[function(t,e,n){function i(t){if(t){var e=/^#([a-fA-F0-9]{3})$/,n=/^#([a-fA-F0-9]{6})$/,i=/^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,a=/^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/,o=/(\w+)/,r=[0,0,0],l=1,s=t.match(e);if(s){s=s[1];for(var u=0;u<r.length;u++)r[u]=parseInt(s[u]+s[u],16)}else if(s=t.match(n)){s=s[1];for(var u=0;u<r.length;u++)r[u]=parseInt(s.slice(2*u,2*u+2),16)}else if(s=t.match(i)){for(var u=0;u<r.length;u++)r[u]=parseInt(s[u+1]);l=parseFloat(s[4])}else if(s=t.match(a)){for(var u=0;u<r.length;u++)r[u]=Math.round(2.55*parseFloat(s[u+1]));l=parseFloat(s[4])}else if(s=t.match(o)){if("transparent"==s[1])return[0,0,0,0];if(r=y[s[1]],!r)return}for(var u=0;u<r.length;u++)r[u]=b(r[u],0,255);return l=l||0==l?b(l,0,1):1,r[3]=l,r}}function a(t){if(t){var e=/^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),o=b(parseFloat(n[2]),0,100),r=b(parseFloat(n[3]),0,100),l=b(isNaN(i)?1:i,0,1);return[a,o,r,l]}}}function o(t){if(t){var e=/^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/,n=t.match(e);if(n){var i=parseFloat(n[4]),a=b(parseInt(n[1]),0,360),o=b(parseFloat(n[2]),0,100),r=b(parseFloat(n[3]),0,100),l=b(isNaN(i)?1:i,0,1);return[a,o,r,l]}}}function r(t){var e=i(t);return e&&e.slice(0,3)}function l(t){var e=a(t);return e&&e.slice(0,3)}function s(t){var e=i(t);return e?e[3]:(e=a(t))?e[3]:(e=o(t))?e[3]:void 0}function u(t){return"#"+x(t[0])+x(t[1])+x(t[2])}function d(t,e){return e<1||t[3]&&t[3]<1?c(t,e):"rgb("+t[0]+", "+t[1]+", "+t[2]+")"}function c(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"rgba("+t[0]+", "+t[1]+", "+t[2]+", "+e+")"}function h(t,e){if(e<1||t[3]&&t[3]<1)return f(t,e);var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgb("+n+"%, "+i+"%, "+a+"%)"}function f(t,e){var n=Math.round(t[0]/255*100),i=Math.round(t[1]/255*100),a=Math.round(t[2]/255*100);return"rgba("+n+"%, "+i+"%, "+a+"%, "+(e||t[3]||1)+")"}function g(t,e){return e<1||t[3]&&t[3]<1?p(t,e):"hsl("+t[0]+", "+t[1]+"%, "+t[2]+"%)"}function p(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hsla("+t[0]+", "+t[1]+"%, "+t[2]+"%, "+e+")"}function m(t,e){return void 0===e&&(e=void 0!==t[3]?t[3]:1),"hwb("+t[0]+", "+t[1]+"%, "+t[2]+"%"+(void 0!==e&&1!==e?", "+e:"")+")"}function v(t){return k[t.slice(0,3)]}function b(t,e,n){return Math.min(Math.max(e,t),n)}function x(t){var e=t.toString(16).toUpperCase();return e.length<2?"0"+e:e}var y=t(6);e.exports={getRgba:i,getHsla:a,getRgb:r,getHsl:l,getHwb:o,getAlpha:s,hexString:u,rgbString:d,rgbaString:c,percentString:h,percentaString:f,hslString:g,hslaString:p,hwbString:m,keyword:v};var k={};for(var w in y)k[y[w]]=w},{6:6}],3:[function(t,e,n){var i=t(5),a=t(2),o=function(t){if(t instanceof o)return t;if(!(this instanceof o))return new o(t);this.valid=!1,this.values={rgb:[0,0,0],hsl:[0,0,0],hsv:[0,0,0],hwb:[0,0,0],cmyk:[0,0,0,0],alpha:1};var e;"string"==typeof t?(e=a.getRgba(t),e?this.setValues("rgb",e):(e=a.getHsla(t))?this.setValues("hsl",e):(e=a.getHwb(t))&&this.setValues("hwb",e)):"object"==typeof t&&(e=t,void 0!==e.r||void 0!==e.red?this.setValues("rgb",e):void 0!==e.l||void 0!==e.lightness?this.setValues("hsl",e):void 0!==e.v||void 0!==e.value?this.setValues("hsv",e):void 0!==e.w||void 0!==e.whiteness?this.setValues("hwb",e):void 0===e.c&&void 0===e.cyan||this.setValues("cmyk",e))};o.prototype={isValid:function(){return this.valid},rgb:function(){return this.setSpace("rgb",arguments)},hsl:function(){return this.setSpace("hsl",arguments)},hsv:function(){return this.setSpace("hsv",arguments)},hwb:function(){return this.setSpace("hwb",arguments)},cmyk:function(){return this.setSpace("cmyk",arguments)},rgbArray:function(){return this.values.rgb},hslArray:function(){return this.values.hsl},hsvArray:function(){return this.values.hsv},hwbArray:function(){var t=this.values;return 1!==t.alpha?t.hwb.concat([t.alpha]):t.hwb},cmykArray:function(){return this.values.cmyk},rgbaArray:function(){var t=this.values;return t.rgb.concat([t.alpha])},hslaArray:function(){var t=this.values;return t.hsl.concat([t.alpha])},alpha:function(t){return void 0===t?this.values.alpha:(this.setValues("alpha",t),this)},red:function(t){return this.setChannel("rgb",0,t)},green:function(t){return this.setChannel("rgb",1,t)},blue:function(t){return this.setChannel("rgb",2,t)},hue:function(t){return t&&(t%=360,t=t<0?360+t:t),this.setChannel("hsl",0,t)},saturation:function(t){return this.setChannel("hsl",1,t)},lightness:function(t){return this.setChannel("hsl",2,t)},saturationv:function(t){return this.setChannel("hsv",1,t)},whiteness:function(t){return this.setChannel("hwb",1,t)},blackness:function(t){return this.setChannel("hwb",2,t)},value:function(t){return this.setChannel("hsv",2,t)},cyan:function(t){return this.setChannel("cmyk",0,t)},magenta:function(t){return this.setChannel("cmyk",1,t)},yellow:function(t){return this.setChannel("cmyk",2,t)},black:function(t){return this.setChannel("cmyk",3,t)},hexString:function(){return a.hexString(this.values.rgb)},rgbString:function(){return a.rgbString(this.values.rgb,this.values.alpha)},rgbaString:function(){return a.rgbaString(this.values.rgb,this.values.alpha)},percentString:function(){return a.percentString(this.values.rgb,this.values.alpha)},hslString:function(){return a.hslString(this.values.hsl,this.values.alpha)},hslaString:function(){return a.hslaString(this.values.hsl,this.values.alpha)},hwbString:function(){return a.hwbString(this.values.hwb,this.values.alpha)},keyword:function(){return a.keyword(this.values.rgb,this.values.alpha)},rgbNumber:function(){var t=this.values.rgb;return t[0]<<16|t[1]<<8|t[2]},luminosity:function(){for(var t=this.values.rgb,e=[],n=0;n<t.length;n++){var i=t[n]/255;e[n]=i<=.03928?i/12.92:Math.pow((i+.055)/1.055,2.4)}return.2126*e[0]+.7152*e[1]+.0722*e[2]},contrast:function(t){var e=this.luminosity(),n=t.luminosity();return e>n?(e+.05)/(n+.05):(n+.05)/(e+.05)},level:function(t){var e=this.contrast(t);return e>=7.1?"AAA":e>=4.5?"AA":""},dark:function(){var t=this.values.rgb,e=(299*t[0]+587*t[1]+114*t[2])/1e3;return e<128},light:function(){return!this.dark()},negate:function(){for(var t=[],e=0;e<3;e++)t[e]=255-this.values.rgb[e];return this.setValues("rgb",t),this},lighten:function(t){var e=this.values.hsl;return e[2]+=e[2]*t,this.setValues("hsl",e),this},darken:function(t){var e=this.values.hsl;return e[2]-=e[2]*t,this.setValues("hsl",e),this},saturate:function(t){var e=this.values.hsl;return e[1]+=e[1]*t,this.setValues("hsl",e),this},desaturate:function(t){var e=this.values.hsl;return e[1]-=e[1]*t,this.setValues("hsl",e),this},whiten:function(t){var e=this.values.hwb;return e[1]+=e[1]*t,this.setValues("hwb",e),this},blacken:function(t){var e=this.values.hwb;return e[2]+=e[2]*t,this.setValues("hwb",e),this},greyscale:function(){var t=this.values.rgb,e=.3*t[0]+.59*t[1]+.11*t[2];return this.setValues("rgb",[e,e,e]),this},clearer:function(t){var e=this.values.alpha;return this.setValues("alpha",e-e*t),this},opaquer:function(t){var e=this.values.alpha;return this.setValues("alpha",e+e*t),this},rotate:function(t){var e=this.values.hsl,n=(e[0]+t)%360;return e[0]=n<0?360+n:n,this.setValues("hsl",e),this},mix:function(t,e){var n=this,i=t,a=void 0===e?.5:e,o=2*a-1,r=n.alpha()-i.alpha(),l=((o*r===-1?o:(o+r)/(1+o*r))+1)/2,s=1-l;return this.rgb(l*n.red()+s*i.red(),l*n.green()+s*i.green(),l*n.blue()+s*i.blue()).alpha(n.alpha()*a+i.alpha()*(1-a))},toJSON:function(){return this.rgb()},clone:function(){var t,e,n=new o,i=this.values,a=n.values;for(var r in i)i.hasOwnProperty(r)&&(t=i[r],e={}.toString.call(t),"[object Array]"===e?a[r]=t.slice(0):"[object Number]"===e?a[r]=t:console.error("unexpected color value:",t));return n}},o.prototype.spaces={rgb:["red","green","blue"],hsl:["hue","saturation","lightness"],hsv:["hue","saturation","value"],hwb:["hue","whiteness","blackness"],cmyk:["cyan","magenta","yellow","black"]},o.prototype.maxes={rgb:[255,255,255],hsl:[360,100,100],hsv:[360,100,100],hwb:[360,100,100],cmyk:[100,100,100,100]},o.prototype.getValues=function(t){for(var e=this.values,n={},i=0;i<t.length;i++)n[t.charAt(i)]=e[t][i];return 1!==e.alpha&&(n.a=e.alpha),n},o.prototype.setValues=function(t,e){var n,a=this.values,o=this.spaces,r=this.maxes,l=1;if(this.valid=!0,"alpha"===t)l=e;else if(e.length)a[t]=e.slice(0,t.length),l=e[t.length];else if(void 0!==e[t.charAt(0)]){for(n=0;n<t.length;n++)a[t][n]=e[t.charAt(n)];l=e.a}else if(void 0!==e[o[t][0]]){var s=o[t];for(n=0;n<t.length;n++)a[t][n]=e[s[n]];l=e.alpha}if(a.alpha=Math.max(0,Math.min(1,void 0===l?a.alpha:l)),"alpha"===t)return!1;var u;for(n=0;n<t.length;n++)u=Math.max(0,Math.min(r[t][n],a[t][n])),a[t][n]=Math.round(u);for(var d in o)d!==t&&(a[d]=i[t][d](a[t]));return!0},o.prototype.setSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n),this)},o.prototype.setChannel=function(t,e,n){var i=this.values[t];return void 0===n?i[e]:n===i[e]?this:(i[e]=n,this.setValues(t,i),this)},"undefined"!=typeof window&&(window.Color=o),e.exports=o},{2:2,5:5}],4:[function(t,e,n){function i(t){var e,n,i,a=t[0]/255,o=t[1]/255,r=t[2]/255,l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=(l+s)/2,n=s==l?0:i<=.5?u/(s+l):u/(2-s-l),[e,100*n,100*i]}function a(t){var e,n,i,a=t[0],o=t[1],r=t[2],l=Math.min(a,o,r),s=Math.max(a,o,r),u=s-l;return n=0==s?0:u/s*1e3/10,s==l?e=0:a==s?e=(o-r)/u:o==s?e=2+(r-a)/u:r==s&&(e=4+(a-o)/u),e=Math.min(60*e,360),e<0&&(e+=360),i=s/255*1e3/10,[e,n,i]}function o(t){var e=t[0],n=t[1],a=t[2],o=i(t)[0],r=1/255*Math.min(e,Math.min(n,a)),a=1-1/255*Math.max(e,Math.max(n,a));return[o,100*r,100*a]}function l(t){var e,n,i,a,o=t[0]/255,r=t[1]/255,l=t[2]/255;return a=Math.min(1-o,1-r,1-l),e=(1-o-a)/(1-a)||0,n=(1-r-a)/(1-a)||0,i=(1-l-a)/(1-a)||0,[100*e,100*n,100*i,100*a]}function s(t){return Z[JSON.stringify(t)]}function u(t){var e=t[0]/255,n=t[1]/255,i=t[2]/255;e=e>.04045?Math.pow((e+.055)/1.055,2.4):e/12.92,n=n>.04045?Math.pow((n+.055)/1.055,2.4):n/12.92,i=i>.04045?Math.pow((i+.055)/1.055,2.4):i/12.92;var a=.4124*e+.3576*n+.1805*i,o=.2126*e+.7152*n+.0722*i,r=.0193*e+.1192*n+.9505*i;return[100*a,100*o,100*r]}function d(t){var e,n,i,a=u(t),o=a[0],r=a[1],l=a[2];return o/=95.047,r/=100,l/=108.883,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,l=l>.008856?Math.pow(l,1/3):7.787*l+16/116,e=116*r-16,n=500*(o-r),i=200*(r-l),[e,n,i]}function c(t){return B(d(t))}function h(t){var e,n,i,a,o,r=t[0]/360,l=t[1]/100,s=t[2]/100;if(0==l)return o=255*s,[o,o,o];n=s<.5?s*(1+l):s+l-s*l,e=2*s-n,a=[0,0,0];for(var u=0;u<3;u++)i=r+1/3*-(u-1),i<0&&i++,i>1&&i--,o=6*i<1?e+6*(n-e)*i:2*i<1?n:3*i<2?e+(n-e)*(2/3-i)*6:e,a[u]=255*o;return a}function f(t){var e,n,i=t[0],a=t[1]/100,o=t[2]/100;return 0===o?[0,0,0]:(o*=2,a*=o<=1?o:2-o,n=(o+a)/2,e=2*a/(o+a),[i,100*e,100*n])}function p(t){return o(h(t))}function m(t){return l(h(t))}function v(t){return s(h(t))}function x(t){var e=t[0]/60,n=t[1]/100,i=t[2]/100,a=Math.floor(e)%6,o=e-Math.floor(e),r=255*i*(1-n),l=255*i*(1-n*o),s=255*i*(1-n*(1-o)),i=255*i;switch(a){case 0:return[i,s,r];case 1:return[l,i,r];case 2:return[r,i,s];case 3:return[r,l,i];case 4:return[s,r,i];case 5:return[i,r,l]}}function y(t){var e,n,i=t[0],a=t[1]/100,o=t[2]/100;return n=(2-a)*o,e=a*o,e/=n<=1?n:2-n,e=e||0,n/=2,[i,100*e,100*n]}function k(t){return o(x(t))}function w(t){return l(x(t))}function M(t){return s(x(t))}function S(t){var e,n,i,a,o=t[0]/360,l=t[1]/100,s=t[2]/100,u=l+s;switch(u>1&&(l/=u,s/=u),e=Math.floor(6*o),n=1-s,i=6*o-e,0!=(1&e)&&(i=1-i),a=l+i*(n-l),e){default:case 6:case 0:r=n,g=a,b=l;break;case 1:r=a,g=n,b=l;break;case 2:r=l,g=n,b=a;break;case 3:r=l,g=a,b=n;break;case 4:r=a,g=l,b=n;break;case 5:r=n,g=l,b=a}return[255*r,255*g,255*b]}function C(t){return i(S(t))}function D(t){return a(S(t))}function I(t){return l(S(t))}function A(t){return s(S(t))}function P(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100,l=t[3]/100;return e=1-Math.min(1,a*(1-l)+l),n=1-Math.min(1,o*(1-l)+l),i=1-Math.min(1,r*(1-l)+l),[255*e,255*n,255*i]}function _(t){return i(P(t))}function T(t){return a(P(t))}function F(t){return o(P(t))}function R(t){return s(P(t))}function L(t){var e,n,i,a=t[0]/100,o=t[1]/100,r=t[2]/100;return e=3.2406*a+o*-1.5372+r*-.4986,n=a*-.9689+1.8758*o+.0415*r,i=.0557*a+o*-.204+1.057*r,e=e>.0031308?1.055*Math.pow(e,1/2.4)-.055:e*=12.92,n=n>.0031308?1.055*Math.pow(n,1/2.4)-.055:n*=12.92,i=i>.0031308?1.055*Math.pow(i,1/2.4)-.055:i*=12.92,e=Math.min(Math.max(0,e),1),n=Math.min(Math.max(0,n),1),i=Math.min(Math.max(0,i),1),[255*e,255*n,255*i]}function V(t){var e,n,i,a=t[0],o=t[1],r=t[2];return a/=95.047,o/=100,r/=108.883,a=a>.008856?Math.pow(a,1/3):7.787*a+16/116,o=o>.008856?Math.pow(o,1/3):7.787*o+16/116,r=r>.008856?Math.pow(r,1/3):7.787*r+16/116,e=116*o-16,n=500*(a-o),i=200*(o-r),[e,n,i]}function O(t){return B(V(t))}function z(t){var e,n,i,a,o=t[0],r=t[1],l=t[2];return o<=8?(n=100*o/903.3,a=7.787*(n/100)+16/116):(n=100*Math.pow((o+16)/116,3),a=Math.pow(n/100,1/3)),e=e/95.047<=.008856?e=95.047*(r/500+a-16/116)/7.787:95.047*Math.pow(r/500+a,3),i=i/108.883<=.008859?i=108.883*(a-l/200-16/116)/7.787:108.883*Math.pow(a-l/200,3),[e,n,i]}function B(t){var e,n,i,a=t[0],o=t[1],r=t[2];return e=Math.atan2(r,o),n=360*e/2/Math.PI,n<0&&(n+=360),i=Math.sqrt(o*o+r*r),[a,i,n]}function W(t){return L(z(t))}function N(t){var e,n,i,a=t[0],o=t[1],r=t[2];return i=r/360*2*Math.PI,e=o*Math.cos(i),n=o*Math.sin(i),[a,e,n]}function E(t){return z(N(t))}function H(t){return W(N(t))}function q(t){return J[t]}function j(t){return i(q(t))}function Y(t){return a(q(t))}function U(t){return o(q(t))}function X(t){return l(q(t))}function K(t){return d(q(t))}function G(t){return u(q(t))}e.exports={rgb2hsl:i,rgb2hsv:a,rgb2hwb:o,rgb2cmyk:l,rgb2keyword:s,rgb2xyz:u,rgb2lab:d,rgb2lch:c,hsl2rgb:h,hsl2hsv:f,hsl2hwb:p,hsl2cmyk:m,hsl2keyword:v,hsv2rgb:x,hsv2hsl:y,hsv2hwb:k,hsv2cmyk:w,hsv2keyword:M,hwb2rgb:S,hwb2hsl:C,hwb2hsv:D,hwb2cmyk:I,hwb2keyword:A,cmyk2rgb:P,cmyk2hsl:_,cmyk2hsv:T,cmyk2hwb:F,cmyk2keyword:R,keyword2rgb:q,keyword2hsl:j,keyword2hsv:Y,keyword2hwb:U,keyword2cmyk:X,keyword2lab:K,keyword2xyz:G,xyz2rgb:L,xyz2lab:V,xyz2lch:O,lab2xyz:z,lab2rgb:W,lab2lch:B,lch2lab:N,lch2xyz:E,lch2rgb:H};var J={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]},Z={};for(var Q in J)Z[JSON.stringify(J[Q])]=Q},{}],5:[function(t,e,n){var i=t(4),a=function(){return new u};for(var o in i){a[o+"Raw"]=function(t){return function(e){return"number"==typeof e&&(e=Array.prototype.slice.call(arguments)),i[t](e)}}(o);var r=/(\w+)2(\w+)/.exec(o),l=r[1],s=r[2];a[l]=a[l]||{},a[l][s]=a[o]=function(t){return function(e){"number"==typeof e&&(e=Array.prototype.slice.call(arguments));var n=i[t](e);if("string"==typeof n||void 0===n)return n;for(var a=0;a<n.length;a++)n[a]=Math.round(n[a]);return n}}(o)}var u=function(){this.convs={}};u.prototype.routeSpace=function(t,e){var n=e[0];return void 0===n?this.getValues(t):("number"==typeof n&&(n=Array.prototype.slice.call(e)),this.setValues(t,n))},u.prototype.setValues=function(t,e){return this.space=t,this.convs={},this.convs[t]=e,this},u.prototype.getValues=function(t){var e=this.convs[t];if(!e){var n=this.space,i=this.convs[n];e=a[n][t](i),this.convs[t]=e}return e},["rgb","hsl","hsv","cmyk","keyword"].forEach(function(t){u.prototype[t]=function(e){return this.routeSpace(t,arguments)}}),e.exports=a},{4:4}],6:[function(t,e,n){e.exports={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]}},{}],7:[function(t,e,n){var i=t(28)();t(26)(i),t(40)(i),t(22)(i),t(25)(i),t(30)(i),t(21)(i),t(23)(i),t(24)(i),t(29)(i),t(32)(i),t(33)(i),t(31)(i),t(27)(i),t(34)(i),t(35)(i),t(36)(i),t(37)(i),t(38)(i),t(46)(i),t(44)(i),t(45)(i),t(47)(i),t(48)(i),t(49)(i),t(15)(i),t(16)(i),t(17)(i),t(18)(i),t(19)(i),t(20)(i),t(8)(i),t(9)(i),t(10)(i),t(11)(i),t(12)(i),t(13)(i),t(14)(i);var a=[];a.push(t(41)(i),t(42)(i),t(43)(i)),i.plugins.register(a),e.exports=i,"undefined"!=typeof window&&(window.Chart=i)},{10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,19:19,20:20,21:21,22:22,23:23,24:24,25:25,26:26,27:27,28:28,29:29,30:30,31:31,32:32,33:33,34:34,35:35,36:36,37:37,38:38,40:40,41:41,42:42,43:43,44:44,45:45,46:46,47:47,48:48,49:49,8:8,9:9}],8:[function(t,e,n){"use strict";e.exports=function(t){t.Bar=function(e,n){return n.type="bar",new t(e,n)}}},{}],9:[function(t,e,n){"use strict";e.exports=function(t){t.Bubble=function(e,n){return n.type="bubble",new t(e,n)}}},{}],10:[function(t,e,n){"use strict";e.exports=function(t){t.Doughnut=function(e,n){return n.type="doughnut",new t(e,n)}}},{}],11:[function(t,e,n){"use strict";e.exports=function(t){t.Line=function(e,n){return n.type="line",new t(e,n)}}},{}],12:[function(t,e,n){"use strict";e.exports=function(t){t.PolarArea=function(e,n){return n.type="polarArea",new t(e,n)}}},{}],13:[function(t,e,n){"use strict";e.exports=function(t){t.Radar=function(e,n){return n.type="radar",new t(e,n)}}},{}],14:[function(t,e,n){"use strict";e.exports=function(t){var e={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-1"}],yAxes:[{type:"linear",position:"left",id:"y-axis-1"}]},tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}};t.defaults.scatter=e,t.controllers.scatter=t.controllers.line,t.Scatter=function(e,n){return n.type="scatter",new t(e,n)}}},{}],15:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bar={hover:{mode:"label"},scales:{xAxes:[{type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}],yAxes:[{type:"linear"}]}},t.controllers.bar=t.DatasetController.extend({dataElementType:t.elements.Rectangle,initialize:function(){var e,n=this;t.DatasetController.prototype.initialize.apply(n,arguments),e=n.getMeta(),e.stack=n.getDataset().stack,e.bar=!0},update:function(t){var e,n,i=this,a=i.getMeta().data;for(i._ruler=i.getRuler(),e=0,n=a.length;e<n;++e)i.updateElement(a[e],e,t)},updateElement:function(t,n,i){var a=this,o=a.chart,r=a.getMeta(),l=a.getDataset(),s=t.custom||{},u=o.options.elements.rectangle;t._xScale=a.getScaleForId(r.xAxisID),t._yScale=a.getScaleForId(r.yAxisID),t._datasetIndex=a.index,t._index=n,t._model={datasetLabel:l.label,label:o.data.labels[n],borderSkipped:s.borderSkipped?s.borderSkipped:u.borderSkipped,backgroundColor:s.backgroundColor?s.backgroundColor:e.getValueAtIndexOrDefault(l.backgroundColor,n,u.backgroundColor),borderColor:s.borderColor?s.borderColor:e.getValueAtIndexOrDefault(l.borderColor,n,u.borderColor),borderWidth:s.borderWidth?s.borderWidth:e.getValueAtIndexOrDefault(l.borderWidth,n,u.borderWidth)},a.updateElementGeometry(t,n,i),t.pivot()},updateElementGeometry:function(t,e,n){var i=this,a=t._model,o=i.getValueScale(),r=o.getBasePixel(),l=o.isHorizontal(),s=i._ruler||i.getRuler(),u=i.calculateBarValuePixels(i.index,e),d=i.calculateBarIndexPixels(i.index,e,s);a.horizontal=l,a.base=n?r:u.base,a.x=l?n?r:u.head:d.center,a.y=l?d.center:n?r:u.head,a.height=l?d.size:void 0,a.width=l?void 0:d.size},getValueScaleId:function(){return this.getMeta().yAxisID},getIndexScaleId:function(){return this.getMeta().xAxisID},getValueScale:function(){return this.getScaleForId(this.getValueScaleId())},getIndexScale:function(){return this.getScaleForId(this.getIndexScaleId())},getStackCount:function(t){var e,n,i=this,a=i.chart,o=i.getIndexScale(),r=o.options.stacked,l=void 0===t?a.data.datasets.length:t+1,s=[];for(e=0;e<l;++e)n=a.getDatasetMeta(e),n.bar&&a.isDatasetVisible(e)&&(r===!1||r===!0&&s.indexOf(n.stack)===-1||void 0===r&&(void 0===n.stack||s.indexOf(n.stack)===-1))&&s.push(n.stack);return s.length},getStackIndex:function(t){return this.getStackCount(t)-1},getRuler:function(){var t=this,n=t.getIndexScale(),i=n.options,a=t.getStackCount(),o=n.isHorizontal()?n.width:n.height,r=o/n.ticks.length,l=r*i.categoryPercentage,s=l/a,u=s*i.barPercentage;return u=Math.min(e.getValueOrDefault(i.barThickness,u),e.getValueOrDefault(i.maxBarThickness,1/0)),{stackCount:a,tickSize:r,categorySize:l,categorySpacing:r-l,fullBarSize:s,barSize:u,barSpacing:s-u,scale:n}},calculateBarValuePixels:function(t,e){var n,i,a,o,r,l,s=this,u=s.chart,d=s.getMeta(),c=s.getValueScale(),h=u.data.datasets,f=Number(h[t].data[e]),g=c.options.stacked,p=d.stack,m=0;if(g||void 0===g&&void 0!==p)for(n=0;n<t;++n)i=u.getDatasetMeta(n),i.bar&&i.stack===p&&i.controller.getValueScaleId()===c.id&&u.isDatasetVisible(n)&&(a=Number(h[n].data[e]),(f<0&&a<0||f>=0&&a>0)&&(m+=a));return o=c.getPixelForValue(m),r=c.getPixelForValue(m+f),l=(r-o)/2,{size:l,base:o,head:r,center:r+l/2}},calculateBarIndexPixels:function(t,e,n){var i=this,a=n.scale,o=i.chart.isCombo,r=i.getStackIndex(t),l=a.getPixelForValue(null,e,t,o),s=n.barSize;return l-=o?n.tickSize/2:0,l+=n.fullBarSize*r,l+=n.categorySpacing/2,l+=n.barSpacing/2,{size:s,base:l,head:l+s,center:l+s/2}},draw:function(){var t,n=this,i=n.chart,a=n.getMeta().data,o=n.getDataset(),r=a.length,l=0;for(e.canvas.clipArea(i.ctx,i.chartArea);l<r;++l)t=o.data[l],null===t||void 0===t||isNaN(t)||a[l].draw();e.canvas.unclipArea(i.ctx)},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},o=t._model;o.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.hoverBackgroundColor,i,e.getHoverColor(o.backgroundColor)),o.borderColor=a.hoverBorderColor?a.hoverBorderColor:e.getValueAtIndexOrDefault(n.hoverBorderColor,i,e.getHoverColor(o.borderColor)),o.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:e.getValueAtIndexOrDefault(n.hoverBorderWidth,i,o.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},o=t._model,r=this.chart.options.elements.rectangle;o.backgroundColor=a.backgroundColor?a.backgroundColor:e.getValueAtIndexOrDefault(n.backgroundColor,i,r.backgroundColor),o.borderColor=a.borderColor?a.borderColor:e.getValueAtIndexOrDefault(n.borderColor,i,r.borderColor),o.borderWidth=a.borderWidth?a.borderWidth:e.getValueAtIndexOrDefault(n.borderWidth,i,r.borderWidth)}}),t.defaults.horizontalBar={hover:{mode:"label"},scales:{xAxes:[{type:"linear",position:"bottom"}],yAxes:[{position:"left",type:"category",categoryPercentage:.8,barPercentage:.9,gridLines:{offsetGridLines:!0}}]},elements:{rectangle:{borderSkipped:"left"}},tooltips:{callbacks:{title:function(t,e){var n="";return t.length>0&&(t[0].yLabel?n=t[0].yLabel:e.labels.length>0&&t[0].index<e.labels.length&&(n=e.labels[t[0].index])),n},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n+": "+t.xLabel}}}},t.controllers.horizontalBar=t.controllers.bar.extend({getValueScaleId:function(){return this.getMeta().xAxisID},getIndexScaleId:function(){return this.getMeta().yAxisID}})}},{}],16:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.bubble={hover:{mode:"single"},scales:{xAxes:[{type:"linear",position:"bottom",id:"x-axis-0"}],yAxes:[{type:"linear",position:"left",id:"y-axis-0"}]},tooltips:{callbacks:{title:function(){return""},label:function(t,e){var n=e.datasets[t.datasetIndex].label||"",i=e.datasets[t.datasetIndex].data[t.index];return n+": ("+t.xLabel+", "+t.yLabel+", "+i.r+")"}}}},t.controllers.bubble=t.DatasetController.extend({dataElementType:t.elements.Point,update:function(t){var n=this,i=n.getMeta(),a=i.data;e.each(a,function(e,i){n.updateElement(e,i,t)})},updateElement:function(n,i,a){var o=this,r=o.getMeta(),l=o.getScaleForId(r.xAxisID),s=o.getScaleForId(r.yAxisID),u=n.custom||{},d=o.getDataset(),c=d.data[i],h=o.chart.options.elements.point,f=o.index;e.extend(n,{_xScale:l,_yScale:s,_datasetIndex:f,_index:i,_model:{x:a?l.getPixelForDecimal(.5):l.getPixelForValue("object"==typeof c?c:NaN,i,f,o.chart.isCombo),y:a?s.getBasePixel():s.getPixelForValue(c,i,f),radius:a?0:u.radius?u.radius:o.getRadius(c),hitRadius:u.hitRadius?u.hitRadius:e.getValueAtIndexOrDefault(d.hitRadius,i,h.hitRadius)}}),t.DatasetController.prototype.removeHoverStyle.call(o,n,h);var g=n._model;g.skip=u.skip?u.skip:isNaN(g.x)||isNaN(g.y),n.pivot()},getRadius:function(t){return t.r||this.chart.options.elements.point.radius},setHoverStyle:function(n){var i=this;t.DatasetController.prototype.setHoverStyle.call(i,n);var a=i.chart.data.datasets[n._datasetIndex],o=n._index,r=n.custom||{},l=n._model;
-l.radius=r.hoverRadius?r.hoverRadius:e.getValueAtIndexOrDefault(a.hoverRadius,o,i.chart.options.elements.point.hoverRadius)+i.getRadius(a.data[o])},removeHoverStyle:function(e){var n=this;t.DatasetController.prototype.removeHoverStyle.call(n,e,n.chart.options.elements.point);var i=n.chart.data.datasets[e._datasetIndex].data[e._index],a=e.custom||{},o=e._model;o.radius=a.radius?a.radius:n.getRadius(i)}})}},{}],17:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults;n.doughnut={animation:{animateRotate:!0,animateScale:!1},aspectRatio:1,hover:{mode:"single"},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var o=0;o<i[0].data.length;++o)e.push('<li><span style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var o=t.getDatasetMeta(0),r=n.datasets[0],l=o.data[a],s=l&&l.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=s.backgroundColor?s.backgroundColor:u(r.backgroundColor,a,d.backgroundColor),h=s.borderColor?s.borderColor:u(r.borderColor,a,d.borderColor),f=s.borderWidth?s.borderWidth:u(r.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(r.data[a])||o.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)a=r.getDatasetMeta(n),a.data[o]&&(a.data[o].hidden=!a.data[o].hidden);r.update()}},cutoutPercentage:50,rotation:Math.PI*-.5,circumference:2*Math.PI,tooltips:{callbacks:{title:function(){return""},label:function(t,n){var i=n.labels[t.index],a=": "+n.datasets[t.datasetIndex].data[t.index];return e.isArray(i)?(i=i.slice(),i[0]+=a):i+=a,i}}}},n.pie=e.clone(n.doughnut),e.extend(n.pie,{cutoutPercentage:0}),t.controllers.doughnut=t.controllers.pie=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,getRingIndex:function(t){for(var e=0,n=0;n<t;++n)this.chart.isDatasetVisible(n)&&++e;return e},update:function(t){var n=this,i=n.chart,a=i.chartArea,o=i.options,r=o.elements.arc,l=a.right-a.left-r.borderWidth,s=a.bottom-a.top-r.borderWidth,u=Math.min(l,s),d={x:0,y:0},c=n.getMeta(),h=o.cutoutPercentage,f=o.circumference;if(f<2*Math.PI){var g=o.rotation%(2*Math.PI);g+=2*Math.PI*(g>=Math.PI?-1:g<-Math.PI?1:0);var p=g+f,m={x:Math.cos(g),y:Math.sin(g)},v={x:Math.cos(p),y:Math.sin(p)},b=g<=0&&0<=p||g<=2*Math.PI&&2*Math.PI<=p,x=g<=.5*Math.PI&&.5*Math.PI<=p||g<=2.5*Math.PI&&2.5*Math.PI<=p,y=g<=-Math.PI&&-Math.PI<=p||g<=Math.PI&&Math.PI<=p,k=g<=.5*-Math.PI&&.5*-Math.PI<=p||g<=1.5*Math.PI&&1.5*Math.PI<=p,w=h/100,M={x:y?-1:Math.min(m.x*(m.x<0?1:w),v.x*(v.x<0?1:w)),y:k?-1:Math.min(m.y*(m.y<0?1:w),v.y*(v.y<0?1:w))},S={x:b?1:Math.max(m.x*(m.x>0?1:w),v.x*(v.x>0?1:w)),y:x?1:Math.max(m.y*(m.y>0?1:w),v.y*(v.y>0?1:w))},C={width:.5*(S.x-M.x),height:.5*(S.y-M.y)};u=Math.min(l/C.width,s/C.height),d={x:(S.x+M.x)*-.5,y:(S.y+M.y)*-.5}}i.borderWidth=n.getMaxBorderWidth(c.data),i.outerRadius=Math.max((u-i.borderWidth)/2,0),i.innerRadius=Math.max(h?i.outerRadius/100*h:0,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),i.offsetX=d.x*i.outerRadius,i.offsetY=d.y*i.outerRadius,c.total=n.calculateTotal(),n.outerRadius=i.outerRadius-i.radiusLength*n.getRingIndex(n.index),n.innerRadius=Math.max(n.outerRadius-i.radiusLength,0),e.each(c.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){var a=this,o=a.chart,r=o.chartArea,l=o.options,s=l.animation,u=(r.left+r.right)/2,d=(r.top+r.bottom)/2,c=l.rotation,h=l.rotation,f=a.getDataset(),g=i&&s.animateRotate?0:t.hidden?0:a.calculateCircumference(f.data[n])*(l.circumference/(2*Math.PI)),p=i&&s.animateScale?0:a.innerRadius,m=i&&s.animateScale?0:a.outerRadius,v=e.getValueAtIndexOrDefault;e.extend(t,{_datasetIndex:a.index,_index:n,_model:{x:u+o.offsetX,y:d+o.offsetY,startAngle:c,endAngle:h,circumference:g,outerRadius:m,innerRadius:p,label:v(f.label,n,o.data.labels[n])}});var b=t._model;this.removeHoverStyle(t),i&&s.animateRotate||(0===n?b.startAngle=l.rotation:b.startAngle=a.getMeta().data[n-1]._model.endAngle,b.endAngle=b.startAngle+b.circumference),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},calculateTotal:function(){var t,n=this.getDataset(),i=this.getMeta(),a=0;return e.each(i.data,function(e,i){t=n.data[i],isNaN(t)||e.hidden||(a+=Math.abs(t))}),a},calculateCircumference:function(t){var e=this.getMeta().total;return e>0&&!isNaN(t)?2*Math.PI*(t/e):0},getMaxBorderWidth:function(t){for(var e,n,i=0,a=this.index,o=t.length,r=0;r<o;r++)e=t[r]._model?t[r]._model.borderWidth:0,n=t[r]._chart?t[r]._chart.config.data.datasets[a].hoverBorderWidth:0,i=e>i?e:i,i=n>i?n:i;return i}})}},{}],18:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return n.getValueOrDefault(t.showLine,e.showLines)}var n=t.helpers;t.defaults.line={showLines:!0,spanGaps:!1,hover:{mode:"label"},scales:{xAxes:[{type:"category",id:"x-axis-0"}],yAxes:[{type:"linear",id:"y-axis-0"}]}},t.controllers.line=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,update:function(t){var i,a,o,r=this,l=r.getMeta(),s=l.dataset,u=l.data||[],d=r.chart.options,c=d.elements.line,h=r.getScaleForId(l.yAxisID),f=r.getDataset(),g=e(f,d);for(g&&(o=s.custom||{},void 0!==f.tension&&void 0===f.lineTension&&(f.lineTension=f.tension),s._scale=h,s._datasetIndex=r.index,s._children=u,s._model={spanGaps:f.spanGaps?f.spanGaps:d.spanGaps,tension:o.tension?o.tension:n.getValueOrDefault(f.lineTension,c.tension),backgroundColor:o.backgroundColor?o.backgroundColor:f.backgroundColor||c.backgroundColor,borderWidth:o.borderWidth?o.borderWidth:f.borderWidth||c.borderWidth,borderColor:o.borderColor?o.borderColor:f.borderColor||c.borderColor,borderCapStyle:o.borderCapStyle?o.borderCapStyle:f.borderCapStyle||c.borderCapStyle,borderDash:o.borderDash?o.borderDash:f.borderDash||c.borderDash,borderDashOffset:o.borderDashOffset?o.borderDashOffset:f.borderDashOffset||c.borderDashOffset,borderJoinStyle:o.borderJoinStyle?o.borderJoinStyle:f.borderJoinStyle||c.borderJoinStyle,fill:o.fill?o.fill:void 0!==f.fill?f.fill:c.fill,steppedLine:o.steppedLine?o.steppedLine:n.getValueOrDefault(f.steppedLine,c.stepped),cubicInterpolationMode:o.cubicInterpolationMode?o.cubicInterpolationMode:n.getValueOrDefault(f.cubicInterpolationMode,c.cubicInterpolationMode)},s.pivot()),i=0,a=u.length;i<a;++i)r.updateElement(u[i],i,t);for(g&&0!==s._model.tension&&r.updateBezierControlPoints(),i=0,a=u.length;i<a;++i)u[i].pivot()},getPointBackgroundColor:function(t,e){var i=this.chart.options.elements.point.backgroundColor,a=this.getDataset(),o=t.custom||{};return o.backgroundColor?i=o.backgroundColor:a.pointBackgroundColor?i=n.getValueAtIndexOrDefault(a.pointBackgroundColor,e,i):a.backgroundColor&&(i=a.backgroundColor),i},getPointBorderColor:function(t,e){var i=this.chart.options.elements.point.borderColor,a=this.getDataset(),o=t.custom||{};return o.borderColor?i=o.borderColor:a.pointBorderColor?i=n.getValueAtIndexOrDefault(a.pointBorderColor,e,i):a.borderColor&&(i=a.borderColor),i},getPointBorderWidth:function(t,e){var i=this.chart.options.elements.point.borderWidth,a=this.getDataset(),o=t.custom||{};return isNaN(o.borderWidth)?isNaN(a.pointBorderWidth)?isNaN(a.borderWidth)||(i=a.borderWidth):i=n.getValueAtIndexOrDefault(a.pointBorderWidth,e,i):i=o.borderWidth,i},updateElement:function(t,e,i){var a,o,r=this,l=r.getMeta(),s=t.custom||{},u=r.getDataset(),d=r.index,c=u.data[e],h=r.getScaleForId(l.yAxisID),f=r.getScaleForId(l.xAxisID),g=r.chart.options.elements.point,p=r.chart.data.labels||[],m=1===p.length||1===u.data.length||r.chart.isCombo;void 0!==u.radius&&void 0===u.pointRadius&&(u.pointRadius=u.radius),void 0!==u.hitRadius&&void 0===u.pointHitRadius&&(u.pointHitRadius=u.hitRadius),a=f.getPixelForValue("object"==typeof c?c:NaN,e,d,m),o=i?h.getBasePixel():r.calculatePointY(c,e,d),t._xScale=f,t._yScale=h,t._datasetIndex=d,t._index=e,t._model={x:a,y:o,skip:s.skip||isNaN(a)||isNaN(o),radius:s.radius||n.getValueAtIndexOrDefault(u.pointRadius,e,g.radius),pointStyle:s.pointStyle||n.getValueAtIndexOrDefault(u.pointStyle,e,g.pointStyle),backgroundColor:r.getPointBackgroundColor(t,e),borderColor:r.getPointBorderColor(t,e),borderWidth:r.getPointBorderWidth(t,e),tension:l.dataset._model?l.dataset._model.tension:0,steppedLine:!!l.dataset._model&&l.dataset._model.steppedLine,hitRadius:s.hitRadius||n.getValueAtIndexOrDefault(u.pointHitRadius,e,g.hitRadius)}},calculatePointY:function(t,e,n){var i,a,o,r=this,l=r.chart,s=r.getMeta(),u=r.getScaleForId(s.yAxisID),d=0,c=0;if(u.options.stacked){for(i=0;i<n;i++)if(a=l.data.datasets[i],o=l.getDatasetMeta(i),"line"===o.type&&o.yAxisID===u.id&&l.isDatasetVisible(i)){var h=Number(u.getRightValue(a.data[e]));h<0?c+=h||0:d+=h||0}var f=Number(u.getRightValue(t));return f<0?u.getPixelForValue(c+f):u.getPixelForValue(d+f)}return u.getPixelForValue(t)},updateBezierControlPoints:function(){function t(t,e,n){return Math.max(Math.min(t,n),e)}var e,i,a,o,r,l=this,s=l.getMeta(),u=l.chart.chartArea,d=s.data||[];if(s.dataset._model.spanGaps&&(d=d.filter(function(t){return!t._model.skip})),"monotone"===s.dataset._model.cubicInterpolationMode)n.splineCurveMonotone(d);else for(e=0,i=d.length;e<i;++e)a=d[e],o=a._model,r=n.splineCurve(n.previousItem(d,e)._model,o,n.nextItem(d,e)._model,s.dataset._model.tension),o.controlPointPreviousX=r.previous.x,o.controlPointPreviousY=r.previous.y,o.controlPointNextX=r.next.x,o.controlPointNextY=r.next.y;if(l.chart.options.elements.line.capBezierPoints)for(e=0,i=d.length;e<i;++e)o=d[e]._model,o.controlPointPreviousX=t(o.controlPointPreviousX,u.left,u.right),o.controlPointPreviousY=t(o.controlPointPreviousY,u.top,u.bottom),o.controlPointNextX=t(o.controlPointNextX,u.left,u.right),o.controlPointNextY=t(o.controlPointNextY,u.top,u.bottom)},draw:function(){var n=this,i=n.chart,a=n.getMeta(),o=a.data||[],r=i.chartArea,l=o.length,s=0;for(t.canvasHelpers.clipArea(i.ctx,r),e(n.getDataset(),i.options)&&a.dataset.draw(),t.canvasHelpers.unclipArea(i.ctx);s<l;++s)o[s].draw(r)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t._index,a=t.custom||{},o=t._model;o.radius=a.hoverRadius||n.getValueAtIndexOrDefault(e.pointHoverRadius,i,this.chart.options.elements.point.hoverRadius),o.backgroundColor=a.hoverBackgroundColor||n.getValueAtIndexOrDefault(e.pointHoverBackgroundColor,i,n.getHoverColor(o.backgroundColor)),o.borderColor=a.hoverBorderColor||n.getValueAtIndexOrDefault(e.pointHoverBorderColor,i,n.getHoverColor(o.borderColor)),o.borderWidth=a.hoverBorderWidth||n.getValueAtIndexOrDefault(e.pointHoverBorderWidth,i,o.borderWidth)},removeHoverStyle:function(t){var e=this,i=e.chart.data.datasets[t._datasetIndex],a=t._index,o=t.custom||{},r=t._model;void 0!==i.radius&&void 0===i.pointRadius&&(i.pointRadius=i.radius),r.radius=o.radius||n.getValueAtIndexOrDefault(i.pointRadius,a,e.chart.options.elements.point.radius),r.backgroundColor=e.getPointBackgroundColor(t,a),r.borderColor=e.getPointBorderColor(t,a),r.borderWidth=e.getPointBorderWidth(t,a)}})}},{}],19:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.polarArea={scale:{type:"radialLinear",angleLines:{display:!1},gridLines:{circular:!0},pointLabels:{display:!1},ticks:{beginAtZero:!0}},animation:{animateRotate:!0,animateScale:!0},startAngle:-.5*Math.PI,aspectRatio:1,legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');var n=t.data,i=n.datasets,a=n.labels;if(i.length)for(var o=0;o<i[0].data.length;++o)e.push('<li><span style="background-color:'+i[0].backgroundColor[o]+'"></span>'),a[o]&&e.push(a[o]),e.push("</li>");return e.push("</ul>"),e.join("")},legend:{labels:{generateLabels:function(t){var n=t.data;return n.labels.length&&n.datasets.length?n.labels.map(function(i,a){var o=t.getDatasetMeta(0),r=n.datasets[0],l=o.data[a],s=l.custom||{},u=e.getValueAtIndexOrDefault,d=t.options.elements.arc,c=s.backgroundColor?s.backgroundColor:u(r.backgroundColor,a,d.backgroundColor),h=s.borderColor?s.borderColor:u(r.borderColor,a,d.borderColor),f=s.borderWidth?s.borderWidth:u(r.borderWidth,a,d.borderWidth);return{text:i,fillStyle:c,strokeStyle:h,lineWidth:f,hidden:isNaN(r.data[a])||o.data[a].hidden,index:a}}):[]}},onClick:function(t,e){var n,i,a,o=e.index,r=this.chart;for(n=0,i=(r.data.datasets||[]).length;n<i;++n)a=r.getDatasetMeta(n),a.data[o].hidden=!a.data[o].hidden;r.update()}},tooltips:{callbacks:{title:function(){return""},label:function(t,e){return e.labels[t.index]+": "+t.yLabel}}}},t.controllers.polarArea=t.DatasetController.extend({dataElementType:t.elements.Arc,linkScales:e.noop,update:function(t){var n=this,i=n.chart,a=i.chartArea,o=n.getMeta(),r=i.options,l=r.elements.arc,s=Math.min(a.right-a.left,a.bottom-a.top);i.outerRadius=Math.max((s-l.borderWidth/2)/2,0),i.innerRadius=Math.max(r.cutoutPercentage?i.outerRadius/100*r.cutoutPercentage:1,0),i.radiusLength=(i.outerRadius-i.innerRadius)/i.getVisibleDatasetCount(),n.outerRadius=i.outerRadius-i.radiusLength*n.index,n.innerRadius=n.outerRadius-i.radiusLength,o.count=n.countVisibleElements(),e.each(o.data,function(e,i){n.updateElement(e,i,t)})},updateElement:function(t,n,i){for(var a=this,o=a.chart,r=a.getDataset(),l=o.options,s=l.animation,u=o.scale,d=e.getValueAtIndexOrDefault,c=o.data.labels,h=a.calculateCircumference(r.data[n]),f=u.xCenter,g=u.yCenter,p=0,m=a.getMeta(),v=0;v<n;++v)isNaN(r.data[v])||m.data[v].hidden||++p;var b=l.startAngle,x=t.hidden?0:u.getDistanceFromCenterForValue(r.data[n]),y=b+h*p,k=y+(t.hidden?0:h),w=s.animateScale?0:u.getDistanceFromCenterForValue(r.data[n]);e.extend(t,{_datasetIndex:a.index,_index:n,_scale:u,_model:{x:f,y:g,innerRadius:0,outerRadius:i?w:x,startAngle:i&&s.animateRotate?b:y,endAngle:i&&s.animateRotate?b:k,label:d(c,n,c[n])}}),a.removeHoverStyle(t),t.pivot()},removeHoverStyle:function(e){t.DatasetController.prototype.removeHoverStyle.call(this,e,this.chart.options.elements.arc)},countVisibleElements:function(){var t=this.getDataset(),n=this.getMeta(),i=0;return e.each(n.data,function(e,n){isNaN(t.data[n])||e.hidden||i++}),i},calculateCircumference:function(t){var e=this.getMeta().count;return e>0&&!isNaN(t)?2*Math.PI/e:0}})}},{}],20:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.radar={aspectRatio:1,scale:{type:"radialLinear"},elements:{line:{tension:0}}},t.controllers.radar=t.DatasetController.extend({datasetElementType:t.elements.Line,dataElementType:t.elements.Point,linkScales:e.noop,update:function(t){var n=this,i=n.getMeta(),a=i.dataset,o=i.data,r=a.custom||{},l=n.getDataset(),s=n.chart.options.elements.line,u=n.chart.scale;void 0!==l.tension&&void 0===l.lineTension&&(l.lineTension=l.tension),e.extend(i.dataset,{_datasetIndex:n.index,_scale:u,_children:o,_loop:!0,_model:{tension:r.tension?r.tension:e.getValueOrDefault(l.lineTension,s.tension),backgroundColor:r.backgroundColor?r.backgroundColor:l.backgroundColor||s.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:l.borderWidth||s.borderWidth,borderColor:r.borderColor?r.borderColor:l.borderColor||s.borderColor,fill:r.fill?r.fill:void 0!==l.fill?l.fill:s.fill,borderCapStyle:r.borderCapStyle?r.borderCapStyle:l.borderCapStyle||s.borderCapStyle,borderDash:r.borderDash?r.borderDash:l.borderDash||s.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:l.borderDashOffset||s.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:l.borderJoinStyle||s.borderJoinStyle}}),i.dataset.pivot(),e.each(o,function(e,i){n.updateElement(e,i,t)},n),n.updateBezierControlPoints()},updateElement:function(t,n,i){var a=this,o=t.custom||{},r=a.getDataset(),l=a.chart.scale,s=a.chart.options.elements.point,u=l.getPointPositionForValue(n,r.data[n]);void 0!==r.radius&&void 0===r.pointRadius&&(r.pointRadius=r.radius),void 0!==r.hitRadius&&void 0===r.pointHitRadius&&(r.pointHitRadius=r.hitRadius),e.extend(t,{_datasetIndex:a.index,_index:n,_scale:l,_model:{x:i?l.xCenter:u.x,y:i?l.yCenter:u.y,tension:o.tension?o.tension:e.getValueOrDefault(r.lineTension,a.chart.options.elements.line.tension),radius:o.radius?o.radius:e.getValueAtIndexOrDefault(r.pointRadius,n,s.radius),backgroundColor:o.backgroundColor?o.backgroundColor:e.getValueAtIndexOrDefault(r.pointBackgroundColor,n,s.backgroundColor),borderColor:o.borderColor?o.borderColor:e.getValueAtIndexOrDefault(r.pointBorderColor,n,s.borderColor),borderWidth:o.borderWidth?o.borderWidth:e.getValueAtIndexOrDefault(r.pointBorderWidth,n,s.borderWidth),pointStyle:o.pointStyle?o.pointStyle:e.getValueAtIndexOrDefault(r.pointStyle,n,s.pointStyle),hitRadius:o.hitRadius?o.hitRadius:e.getValueAtIndexOrDefault(r.pointHitRadius,n,s.hitRadius)}}),t._model.skip=o.skip?o.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,n=this.getMeta();e.each(n.data,function(i,a){var o=i._model,r=e.splineCurve(e.previousItem(n.data,a,!0)._model,o,e.nextItem(n.data,a,!0)._model,o.tension);o.controlPointPreviousX=Math.max(Math.min(r.previous.x,t.right),t.left),o.controlPointPreviousY=Math.max(Math.min(r.previous.y,t.bottom),t.top),o.controlPointNextX=Math.max(Math.min(r.next.x,t.right),t.left),o.controlPointNextY=Math.max(Math.min(r.next.y,t.bottom),t.top),i.pivot()})},setHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,o=t._model;o.radius=i.hoverRadius?i.hoverRadius:e.getValueAtIndexOrDefault(n.pointHoverRadius,a,this.chart.options.elements.point.hoverRadius),o.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:e.getValueAtIndexOrDefault(n.pointHoverBackgroundColor,a,e.getHoverColor(o.backgroundColor)),o.borderColor=i.hoverBorderColor?i.hoverBorderColor:e.getValueAtIndexOrDefault(n.pointHoverBorderColor,a,e.getHoverColor(o.borderColor)),o.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:e.getValueAtIndexOrDefault(n.pointHoverBorderWidth,a,o.borderWidth)},removeHoverStyle:function(t){var n=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},a=t._index,o=t._model,r=this.chart.options.elements.point;o.radius=i.radius?i.radius:e.getValueAtIndexOrDefault(n.pointRadius,a,r.radius),o.backgroundColor=i.backgroundColor?i.backgroundColor:e.getValueAtIndexOrDefault(n.pointBackgroundColor,a,r.backgroundColor),o.borderColor=i.borderColor?i.borderColor:e.getValueAtIndexOrDefault(n.pointBorderColor,a,r.borderColor),o.borderWidth=i.borderWidth?i.borderWidth:e.getValueAtIndexOrDefault(n.pointBorderWidth,a,r.borderWidth)}})}},{}],21:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.animation={duration:1e3,easing:"easeOutQuart",onProgress:e.noop,onComplete:e.noop},t.Animation=t.Element.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,n,i){var a,o,r=this.animations;for(e.chart=t,i||(t.animating=!0),a=0,o=r.length;a<o;++a)if(r[a].chart===t)return void(r[a]=e);r.push(e),1===r.length&&this.requestAnimationFrame()},cancelAnimation:function(t){var n=e.findIndex(this.animations,function(e){return e.chart===t});n!==-1&&(this.animations.splice(n,1),t.animating=!1)},requestAnimationFrame:function(){var t=this;null===t.request&&(t.request=e.requestAnimFrame.call(window,function(){t.request=null,t.startDigest()}))},startDigest:function(){var t=this,e=Date.now(),n=0;t.dropFrames>1&&(n=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1),t.advance(1+n);var i=Date.now();t.dropFrames+=(i-e)/t.frameDuration,t.animations.length>0&&t.requestAnimationFrame()},advance:function(t){for(var n,i,a=this.animations,o=0;o<a.length;)n=a[o],i=n.chart,n.currentStep=(n.currentStep||0)+t,n.currentStep=Math.min(n.currentStep,n.numSteps),e.callback(n.render,[i,n],i),e.callback(n.onAnimationProgress,[n],i),n.currentStep>=n.numSteps?(e.callback(n.onAnimationComplete,[n],i),i.animating=!1,a.splice(o,1)):++o}},Object.defineProperty(t.Animation.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(t.Animation.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}})}},{}],22:[function(t,e,n){"use strict";e.exports=function(t){var e=t.canvasHelpers={};e.drawPoint=function(e,n,i,a,o){var r,l,s,u,d,c;if("object"==typeof n&&(r=n.toString(),"[object HTMLImageElement]"===r||"[object HTMLCanvasElement]"===r))return void e.drawImage(n,a-n.width/2,o-n.height/2,n.width,n.height);if(!(isNaN(i)||i<=0)){switch(n){default:e.beginPath(),e.arc(a,o,i,0,2*Math.PI),e.closePath(),e.fill();break;case"triangle":e.beginPath(),l=3*i/Math.sqrt(3),d=l*Math.sqrt(3)/2,e.moveTo(a-l/2,o+d/3),e.lineTo(a+l/2,o+d/3),e.lineTo(a,o-2*d/3),e.closePath(),e.fill();break;case"rect":c=1/Math.SQRT2*i,e.beginPath(),e.fillRect(a-c,o-c,2*c,2*c),e.strokeRect(a-c,o-c,2*c,2*c);break;case"rectRounded":var h=i/Math.SQRT2,f=a-h,g=o-h,p=Math.SQRT2*i;t.helpers.drawRoundedRectangle(e,f,g,p,p,i/2),e.fill();break;case"rectRot":c=1/Math.SQRT2*i,e.beginPath(),e.moveTo(a-c,o),e.lineTo(a,o+c),e.lineTo(a+c,o),e.lineTo(a,o-c),e.closePath(),e.fill();break;case"cross":e.beginPath(),e.moveTo(a,o+i),e.lineTo(a,o-i),e.moveTo(a-i,o),e.lineTo(a+i,o),e.closePath();break;case"crossRot":e.beginPath(),s=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-s,o-u),e.lineTo(a+s,o+u),e.moveTo(a-s,o+u),e.lineTo(a+s,o-u),e.closePath();break;case"star":e.beginPath(),e.moveTo(a,o+i),e.lineTo(a,o-i),e.moveTo(a-i,o),e.lineTo(a+i,o),s=Math.cos(Math.PI/4)*i,u=Math.sin(Math.PI/4)*i,e.moveTo(a-s,o-u),e.lineTo(a+s,o+u),e.moveTo(a-s,o+u),e.lineTo(a+s,o-u),e.closePath();break;case"line":e.beginPath(),e.moveTo(a-i,o),e.lineTo(a+i,o),e.closePath();break;case"dash":e.beginPath(),e.moveTo(a,o),e.lineTo(a+i,o),e.closePath()}e.stroke()}},e.clipArea=function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},e.unclipArea=function(t){t.restore()},e.lineTo=function(t,e,n,i){return n.steppedLine?("after"===n.steppedLine?t.lineTo(e.x,n.y):t.lineTo(n.x,e.y),void t.lineTo(n.x,n.y)):n.tension?void t.bezierCurveTo(i?e.controlPointPreviousX:e.controlPointNextX,i?e.controlPointPreviousY:e.controlPointNextY,i?n.controlPointNextX:n.controlPointPreviousX,i?n.controlPointNextY:n.controlPointPreviousY,n.x,n.y):void t.lineTo(n.x,n.y)},t.helpers.canvas=e}},{}],23:[function(t,e,n){"use strict";e.exports=function(t){function e(e){e=e||{};var n=e.data=e.data||{};return n.datasets=n.datasets||[],n.labels=n.labels||[],e.options=a.configMerge(t.defaults.global,t.defaults[e.type],e.options||{}),e}function n(t){var e=t.options;e.scale?t.scale.options=e.scale:e.scales&&e.scales.xAxes.concat(e.scales.yAxes).forEach(function(e){t.scales[e.id].options=e}),t.tooltip._options=e.tooltips}function i(t){return"top"===t||"bottom"===t}var a=t.helpers,o=t.plugins,r=t.platform;t.types={},t.instances={},t.controllers={},a.extend(t.prototype,{construct:function(n,i){var o=this;i=e(i);var l=r.acquireContext(n,i),s=l&&l.canvas,u=s&&s.height,d=s&&s.width;return o.id=a.uid(),o.ctx=l,o.canvas=s,o.config=i,o.width=d,o.height=u,o.aspectRatio=u?d/u:null,o.options=i.options,o._bufferedRender=!1,o.chart=o,o.controller=o,t.instances[o.id]=o,Object.defineProperty(o,"data",{get:function(){return o.config.data},set:function(t){o.config.data=t}}),l&&s?(o.initialize(),void o.update()):void console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return o.notify(t,"beforeInit"),a.retinaScale(t),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildScales(),t.initToolTip(),o.notify(t,"afterInit"),t},clear:function(){return a.clear(this),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,n=e.options,i=e.canvas,r=n.maintainAspectRatio&&e.aspectRatio||null,l=Math.floor(a.getMaximumWidth(i)),s=Math.floor(r?l/r:a.getMaximumHeight(i));if((e.width!==l||e.height!==s)&&(i.width=e.width=l,i.height=e.height=s,i.style.width=l+"px",i.style.height=s+"px",a.retinaScale(e),!t)){var u={width:l,height:s};o.notify(e,"resize",[u]),e.options.onResize&&e.options.onResize(e,u),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},n=t.scale;a.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),a.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),n&&(n.id=n.id||"scale")},buildScales:function(){var e=this,n=e.options,o=e.scales={},r=[];n.scales&&(r=r.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),n.scale&&r.push({options:n.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),a.each(r,function(n){var r=n.options,l=a.getValueOrDefault(r.type,n.dtype),s=t.scaleService.getScaleConstructor(l);if(s){i(r.position)!==i(n.dposition)&&(r.position=n.dposition);var u=new s({id:r.id,options:r,ctx:e.ctx,chart:e});o[u.id]=u,n.isDefault&&(e.scale=u)}}),t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,n=[],i=[];if(a.each(e.data.datasets,function(a,o){var r=e.getDatasetMeta(o);if(r.type||(r.type=a.type||e.config.type),n.push(r.type),r.controller)r.controller.updateIndex(o);else{var l=t.controllers[r.type];if(void 0===l)throw new Error('"'+r.type+'" is not a chart type.');r.controller=new l(e,o),i.push(r.controller)}},e),n.length>1)for(var o=1;o<n.length;o++)if(n[o]!==n[o-1]){e.isCombo=!0;break}return i},resetElements:function(){var t=this;a.each(t.data.datasets,function(e,n){t.getDatasetMeta(n).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(t,e){var i=this;if(n(i),o.notify(i,"beforeUpdate")!==!1){i.tooltip._data=i.data;var r=i.buildOrUpdateControllers();a.each(i.data.datasets,function(t,e){i.getDatasetMeta(e).controller.buildOrUpdateElements()},i),i.updateLayout(),a.each(r,function(t){t.reset()}),i.updateDatasets(),o.notify(i,"afterUpdate"),i._bufferedRender?i._bufferedRequest={lazy:e,duration:t}:i.render(t,e)}},updateLayout:function(){var e=this;o.notify(e,"beforeLayout")!==!1&&(t.layoutService.update(this,this.width,this.height),o.notify(e,"afterScaleUpdate"),o.notify(e,"afterLayout"))},updateDatasets:function(){var t=this;if(o.notify(t,"beforeDatasetsUpdate")!==!1){for(var e=0,n=t.data.datasets.length;e<n;++e)t.updateDataset(e);o.notify(t,"afterDatasetsUpdate")}},updateDataset:function(t){var e=this,n=e.getDatasetMeta(t),i={meta:n,index:t};o.notify(e,"beforeDatasetUpdate",[i])!==!1&&(n.controller.update(),o.notify(e,"afterDatasetUpdate",[i]))},render:function(e,n){var i=this;if(o.notify(i,"beforeRender")!==!1){var r=i.options.animation,l=function(t){o.notify(i,"afterRender"),a.callback(r&&r.onComplete,[t],i)};if(r&&("undefined"!=typeof e&&0!==e||"undefined"==typeof e&&0!==r.duration)){var s=new t.Animation({numSteps:(e||r.duration)/16.66,easing:r.easing,render:function(t,e){var n=a.easingEffects[e.easing],i=e.currentStep,o=i/e.numSteps;t.draw(n(o),o,i)},onAnimationProgress:r.onProgress,onAnimationComplete:l});t.animationService.addAnimation(i,s,e,n)}else i.draw(),l(new t.Animation({numSteps:0,chart:i}));return i}},draw:function(t){var e=this;e.clear(),void 0!==t&&null!==t||(t=1),e.transition(t),o.notify(e,"beforeDraw",[t])!==!1&&(a.each(e.boxes,function(t){t.draw(e.chartArea)},e),e.scale&&e.scale.draw(),e.drawDatasets(t),e.tooltip.draw(),o.notify(e,"afterDraw",[t]))},transition:function(t){for(var e=this,n=0,i=(e.data.datasets||[]).length;n<i;++n)e.isDatasetVisible(n)&&e.getDatasetMeta(n).controller.transition(t);e.tooltip.transition(t)},drawDatasets:function(t){var e=this;if(o.notify(e,"beforeDatasetsDraw",[t])!==!1){for(var n=(e.data.datasets||[]).length-1;n>=0;--n)e.isDatasetVisible(n)&&e.drawDataset(n,t);o.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var n=this,i=n.getDatasetMeta(t),a={meta:i,index:t,easingValue:e};o.notify(n,"beforeDatasetDraw",[a])!==!1&&(i.controller.draw(e),o.notify(n,"afterDatasetDraw",[a]))},getElementAtEvent:function(e){return t.Interaction.modes.single(this,e)},getElementsAtEvent:function(e){return t.Interaction.modes.label(this,e,{intersect:!0})},getElementsAtXAxis:function(e){return t.Interaction.modes["x-axis"](this,e,{intersect:!0})},getElementsAtEventForMode:function(e,n,i){var a=t.Interaction.modes[n];return"function"==typeof a?a(this,e,i):[]},getDatasetAtEvent:function(e){return t.Interaction.modes.dataset(this,e,{intersect:!0})},getDatasetMeta:function(t){var e=this,n=e.data.datasets[t];n._meta||(n._meta={});var i=n._meta[e.id];return i||(i=n._meta[e.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,n=this.data.datasets.length;e<n;++e)this.isDatasetVisible(e)&&t++;return t},isDatasetVisible:function(t){var e=this.getDatasetMeta(t);return"boolean"==typeof e.hidden?!e.hidden:!this.data.datasets[t].hidden},generateLegend:function(){return this.options.legendCallback(this)},destroy:function(){var e,n,i,l=this,s=l.canvas;for(l.stop(),n=0,i=l.data.datasets.length;n<i;++n)e=l.getDatasetMeta(n),e.controller&&(e.controller.destroy(),e.controller=null);s&&(l.unbindEvents(),a.clear(l),r.releaseContext(l.ctx),l.canvas=null,l.ctx=null),o.notify(l,"destroy"),delete t.instances[l.id]},toBase64Image:function(){return this.canvas.toDataURL.apply(this.canvas,arguments)},initToolTip:function(){var e=this;e.tooltip=new t.Tooltip({_chart:e,_chartInstance:e,_data:e.data,_options:e.options.tooltips},e),e.tooltip.initialize()},bindEvents:function(){var t=this,e=t._listeners={},n=function(){t.eventHandler.apply(t,arguments)};a.each(t.options.events,function(i){r.addEventListener(t,i,n),e[i]=n}),t.options.responsive&&(n=function(){t.resize()},r.addEventListener(t,"resize",n),e.resize=n)},unbindEvents:function(){var t=this,e=t._listeners;e&&(delete t._listeners,a.each(e,function(e,n){r.removeEventListener(t,n,e)}))},updateHoverStyle:function(t,e,n){var i,a,o,r=n?"setHoverStyle":"removeHoverStyle";for(a=0,o=t.length;a<o;++a)i=t[a],i&&this.getDatasetMeta(i._datasetIndex).controller[r](i)},eventHandler:function(t){var e=this,n=e.tooltip;if(o.notify(e,"beforeEvent",[t])!==!1){e._bufferedRender=!0,e._bufferedRequest=null;var i=e.handleEvent(t);i|=n&&n.handleEvent(t),o.notify(e,"afterEvent",[t]);var a=e._bufferedRequest;return a?e.render(a.duration,a.lazy):i&&!e.animating&&(e.stop(),e.render(e.options.hover.animationDuration,!0)),e._bufferedRender=!1,e._bufferedRequest=null,e}},handleEvent:function(t){var e=this,n=e.options||{},i=n.hover,o=!1;return e.lastActive=e.lastActive||[],"mouseout"===t.type?e.active=[]:e.active=e.getElementsAtEventForMode(t,i.mode,i),i.onHover&&i.onHover.call(e,t.native,e.active),"mouseup"!==t.type&&"click"!==t.type||n.onClick&&n.onClick.call(e,t.native,e.active),e.lastActive.length&&e.updateHoverStyle(e.lastActive,i.mode,!1),e.active.length&&i.mode&&e.updateHoverStyle(e.active,i.mode,!0),o=!a.arrayEquals(e.active,e.lastActive),e.lastActive=e.active,o}}),t.Controller=t}},{}],24:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t._chartjs?void t._chartjs.listeners.push(e):(Object.defineProperty(t,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[e]}}),void a.forEach(function(e){var n="onData"+e.charAt(0).toUpperCase()+e.slice(1),a=t[e];Object.defineProperty(t,e,{configurable:!0,enumerable:!1,value:function(){var e=Array.prototype.slice.call(arguments),o=a.apply(this,e);return i.each(t._chartjs.listeners,function(t){"function"==typeof t[n]&&t[n].apply(t,e)}),o}})}))}function n(t,e){var n=t._chartjs;if(n){var i=n.listeners,o=i.indexOf(e);
-o!==-1&&i.splice(o,1),i.length>0||(a.forEach(function(e){delete t[e]}),delete t._chartjs)}}var i=t.helpers,a=["push","pop","shift","splice","unshift"];t.DatasetController=function(t,e){this.initialize(t,e)},i.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){var n=this;n.chart=t,n.index=e,n.linkScales(),n.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),n=t.getDataset();null===e.xAxisID&&(e.xAxisID=n.xAxisID||t.chart.options.scales.xAxes[0].id),null===e.yAxisID&&(e.yAxisID=n.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&n(this._data,this)},createMetaDataset:function(){var t=this,e=t.datasetElementType;return e&&new e({_chart:t.chart,_datasetIndex:t.index})},createMetaData:function(t){var e=this,n=e.dataElementType;return n&&new n({_chart:e.chart,_datasetIndex:e.index,_index:t})},addElements:function(){var t,e,n=this,i=n.getMeta(),a=n.getDataset().data||[],o=i.data;for(t=0,e=a.length;t<e;++t)o[t]=o[t]||n.createMetaData(t);i.dataset=i.dataset||n.createMetaDataset()},addElementAndReset:function(t){var e=this.createMetaData(t);this.getMeta().data.splice(t,0,e),this.updateElement(e,t,!0)},buildOrUpdateElements:function(){var t=this,i=t.getDataset(),a=i.data||(i.data=[]);t._data!==a&&(t._data&&n(t._data,t),e(a,t),t._data=a),t.resyncElements()},update:i.noop,transition:function(t){for(var e=this.getMeta(),n=e.data||[],i=n.length,a=0;a<i;++a)n[a].transition(t);e.dataset&&e.dataset.transition(t)},draw:function(){var t=this.getMeta(),e=t.data||[],n=e.length,i=0;for(t.dataset&&t.dataset.draw();i<n;++i)e[i].draw()},removeHoverStyle:function(t,e){var n=this.chart.data.datasets[t._datasetIndex],a=t._index,o=t.custom||{},r=i.getValueAtIndexOrDefault,l=t._model;l.backgroundColor=o.backgroundColor?o.backgroundColor:r(n.backgroundColor,a,e.backgroundColor),l.borderColor=o.borderColor?o.borderColor:r(n.borderColor,a,e.borderColor),l.borderWidth=o.borderWidth?o.borderWidth:r(n.borderWidth,a,e.borderWidth)},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],n=t._index,a=t.custom||{},o=i.getValueAtIndexOrDefault,r=i.getHoverColor,l=t._model;l.backgroundColor=a.hoverBackgroundColor?a.hoverBackgroundColor:o(e.hoverBackgroundColor,n,r(l.backgroundColor)),l.borderColor=a.hoverBorderColor?a.hoverBorderColor:o(e.hoverBorderColor,n,r(l.borderColor)),l.borderWidth=a.hoverBorderWidth?a.hoverBorderWidth:o(e.hoverBorderWidth,n,l.borderWidth)},resyncElements:function(){var t=this,e=t.getMeta(),n=t.getDataset().data,i=e.data.length,a=n.length;a<i?e.data.splice(a,i-a):a>i&&t.insertElements(i,a-i)},insertElements:function(t,e){for(var n=0;n<e;++n)this.addElementAndReset(t+n)},onDataPush:function(){this.insertElements(this.getDataset().data.length-1,arguments.length)},onDataPop:function(){this.getMeta().data.pop()},onDataShift:function(){this.getMeta().data.shift()},onDataSplice:function(t,e){this.getMeta().data.splice(t,e),this.insertElements(t,arguments.length-2)},onDataUnshift:function(){this.insertElements(0,arguments.length)}}),t.DatasetController.extend=i.inherits}},{}],25:[function(t,e,n){"use strict";var i=t(3);e.exports=function(t){function e(t,e,n,a){var o,r,l,s,u,d,c,h,f,g=Object.keys(n);for(o=0,r=g.length;o<r;++o)if(l=g[o],d=n[l],e.hasOwnProperty(l)||(e[l]=d),s=e[l],s!==d&&"_"!==l[0]){if(t.hasOwnProperty(l)||(t[l]=s),u=t[l],c=typeof d,c===typeof u)if("string"===c){if(h=i(u),h.valid&&(f=i(d),f.valid)){e[l]=f.mix(h,a).rgbString();continue}}else if("number"===c&&isFinite(u)&&isFinite(d)){e[l]=u+(d-u)*a;continue}e[l]=d}}var n=t.helpers;t.elements={},t.Element=function(t){n.extend(this,t),this.initialize.apply(this,arguments)},n.extend(t.Element.prototype,{initialize:function(){this.hidden=!1},pivot:function(){var t=this;return t._view||(t._view=n.clone(t._model)),t._start={},t},transition:function(t){var n=this,i=n._model,a=n._start,o=n._view;return i&&1!==t?(o||(o=n._view={}),a||(a=n._start={}),e(a,o,i,t),n):(n._view=i,n._start=null,n)},tooltipPosition:function(){return{x:this._model.x,y:this._model.y}},hasValue:function(){return n.isNumber(this._model.x)&&n.isNumber(this._model.y)}}),t.Element.extend=n.inherits}},{3:3}],26:[function(t,e,n){"use strict";var i=t(3);e.exports=function(t){function e(t,e,n){var i;return"string"==typeof t?(i=parseInt(t,10),t.indexOf("%")!==-1&&(i=i/100*e.parentNode[n])):i=t,i}function n(t){return void 0!==t&&null!==t&&"none"!==t}function a(t,i,a){var o=document.defaultView,r=t.parentNode,l=o.getComputedStyle(t)[i],s=o.getComputedStyle(r)[i],u=n(l),d=n(s),c=Number.POSITIVE_INFINITY;return u||d?Math.min(u?e(l,t,a):c,d?e(s,r,a):c):"none"}var o=t.helpers={};o.each=function(t,e,n,i){var a,r;if(o.isArray(t))if(r=t.length,i)for(a=r-1;a>=0;a--)e.call(n,t[a],a);else for(a=0;a<r;a++)e.call(n,t[a],a);else if("object"==typeof t){var l=Object.keys(t);for(r=l.length,a=0;a<r;a++)e.call(n,t[l[a]],l[a])}},o.clone=function(t){var e={};return o.each(t,function(t,n){o.isArray(t)?e[n]=t.slice(0):"object"==typeof t&&null!==t?e[n]=o.clone(t):e[n]=t}),e},o.extend=function(t){for(var e=function(e,n){t[n]=e},n=1,i=arguments.length;n<i;n++)o.each(arguments[n],e);return t},o.configMerge=function(e){var n=o.clone(e);return o.each(Array.prototype.slice.call(arguments,1),function(e){o.each(e,function(e,i){var a=n.hasOwnProperty(i),r=a?n[i]:{};"scales"===i?n[i]=o.scaleMerge(r,e):"scale"===i?n[i]=o.configMerge(r,t.scaleService.getScaleDefaults(e.type),e):!a||"object"!=typeof r||o.isArray(r)||null===r||"object"!=typeof e||o.isArray(e)?n[i]=e:n[i]=o.configMerge(r,e)})}),n},o.scaleMerge=function(e,n){var i=o.clone(e);return o.each(n,function(e,n){"xAxes"===n||"yAxes"===n?i.hasOwnProperty(n)?o.each(e,function(e,a){var r=o.getValueOrDefault(e.type,"xAxes"===n?"category":"linear"),l=t.scaleService.getScaleDefaults(r);a>=i[n].length||!i[n][a].type?i[n].push(o.configMerge(l,e)):e.type&&e.type!==i[n][a].type?i[n][a]=o.configMerge(i[n][a],l,e):i[n][a]=o.configMerge(i[n][a],e)}):(i[n]=[],o.each(e,function(e){var a=o.getValueOrDefault(e.type,"xAxes"===n?"category":"linear");i[n].push(o.configMerge(t.scaleService.getScaleDefaults(a),e))})):i.hasOwnProperty(n)&&"object"==typeof i[n]&&null!==i[n]&&"object"==typeof e?i[n]=o.configMerge(i[n],e):i[n]=e}),i},o.getValueAtIndexOrDefault=function(t,e,n){return void 0===t||null===t?n:o.isArray(t)?e<t.length?t[e]:n:t},o.getValueOrDefault=function(t,e){return void 0===t?e:t},o.indexOf=Array.prototype.indexOf?function(t,e){return t.indexOf(e)}:function(t,e){for(var n=0,i=t.length;n<i;++n)if(t[n]===e)return n;return-1},o.where=function(t,e){if(o.isArray(t)&&Array.prototype.filter)return t.filter(e);var n=[];return o.each(t,function(t){e(t)&&n.push(t)}),n},o.findIndex=Array.prototype.findIndex?function(t,e,n){return t.findIndex(e,n)}:function(t,e,n){n=void 0===n?t:n;for(var i=0,a=t.length;i<a;++i)if(e.call(n,t[i],i,t))return i;return-1},o.findNextWhere=function(t,e,n){void 0!==n&&null!==n||(n=-1);for(var i=n+1;i<t.length;i++){var a=t[i];if(e(a))return a}},o.findPreviousWhere=function(t,e,n){void 0!==n&&null!==n||(n=t.length);for(var i=n-1;i>=0;i--){var a=t[i];if(e(a))return a}},o.inherits=function(t){var e=this,n=t&&t.hasOwnProperty("constructor")?t.constructor:function(){return e.apply(this,arguments)},i=function(){this.constructor=n};return i.prototype=e.prototype,n.prototype=new i,n.extend=o.inherits,t&&o.extend(n.prototype,t),n.__super__=e.prototype,n},o.noop=function(){},o.uid=function(){var t=0;return function(){return t++}}(),o.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.almostEquals=function(t,e,n){return Math.abs(t-e)<n},o.almostWhole=function(t,e){var n=Math.round(t);return n-e<t&&n+e>t},o.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},o.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},o.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return t=+t,0===t||isNaN(t)?t:t>0?1:-1},o.log10=Math.log10?function(t){return Math.log10(t)}:function(t){return Math.log(t)/Math.LN10},o.toRadians=function(t){return t*(Math.PI/180)},o.toDegrees=function(t){return t*(180/Math.PI)},o.getAngleFromPoint=function(t,e){var n=e.x-t.x,i=e.y-t.y,a=Math.sqrt(n*n+i*i),o=Math.atan2(i,n);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},o.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},o.aliasPixel=function(t){return t%2===0?0:.5},o.splineCurve=function(t,e,n,i){var a=t.skip?e:t,o=e,r=n.skip?e:n,l=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),s=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),u=l/(l+s),d=s/(l+s);u=isNaN(u)?0:u,d=isNaN(d)?0:d;var c=i*u,h=i*d;return{previous:{x:o.x-c*(r.x-a.x),y:o.y-c*(r.y-a.y)},next:{x:o.x+h*(r.x-a.x),y:o.y+h*(r.y-a.y)}}},o.EPSILON=Number.EPSILON||1e-14,o.splineCurveMonotone=function(t){var e,n,i,a,r=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),l=r.length;for(e=0;e<l;++e)if(i=r[e],!i.model.skip){if(n=e>0?r[e-1]:null,a=e<l-1?r[e+1]:null,a&&!a.model.skip){var s=a.model.x-i.model.x;i.deltaK=0!==s?(a.model.y-i.model.y)/s:0}!n||n.model.skip?i.mK=i.deltaK:!a||a.model.skip?i.mK=n.deltaK:this.sign(n.deltaK)!==this.sign(i.deltaK)?i.mK=0:i.mK=(n.deltaK+i.deltaK)/2}var u,d,c,h;for(e=0;e<l-1;++e)i=r[e],a=r[e+1],i.model.skip||a.model.skip||(o.almostEquals(i.deltaK,0,this.EPSILON)?i.mK=a.mK=0:(u=i.mK/i.deltaK,d=a.mK/i.deltaK,h=Math.pow(u,2)+Math.pow(d,2),h<=9||(c=3/Math.sqrt(h),i.mK=u*c*i.deltaK,a.mK=d*c*i.deltaK)));var f;for(e=0;e<l;++e)i=r[e],i.model.skip||(n=e>0?r[e-1]:null,a=e<l-1?r[e+1]:null,n&&!n.model.skip&&(f=(i.model.x-n.model.x)/3,i.model.controlPointPreviousX=i.model.x-f,i.model.controlPointPreviousY=i.model.y-f*i.mK),a&&!a.model.skip&&(f=(a.model.x-i.model.x)/3,i.model.controlPointNextX=i.model.x+f,i.model.controlPointNextY=i.model.y+f*i.mK))},o.nextItem=function(t,e,n){return n?e>=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},o.previousItem=function(t,e,n){return n?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},o.niceNum=function(t,e){var n,i=Math.floor(o.log10(t)),a=t/Math.pow(10,i);return n=e?a<1.5?1:a<3?2:a<7?5:10:a<=1?1:a<=2?2:a<=5?5:10,n*Math.pow(10,i)};var r=o.easingEffects={linear:function(t){return t},easeInQuad:function(t){return t*t},easeOutQuad:function(t){return-1*t*(t-2)},easeInOutQuad:function(t){return(t/=.5)<1?.5*t*t:-.5*(--t*(t-2)-1)},easeInCubic:function(t){return t*t*t},easeOutCubic:function(t){return 1*((t=t/1-1)*t*t+1)},easeInOutCubic:function(t){return(t/=.5)<1?.5*t*t*t:.5*((t-=2)*t*t+2)},easeInQuart:function(t){return t*t*t*t},easeOutQuart:function(t){return-1*((t=t/1-1)*t*t*t-1)},easeInOutQuart:function(t){return(t/=.5)<1?.5*t*t*t*t:-.5*((t-=2)*t*t*t-2)},easeInQuint:function(t){return 1*(t/=1)*t*t*t*t},easeOutQuint:function(t){return 1*((t=t/1-1)*t*t*t*t+1)},easeInOutQuint:function(t){return(t/=.5)<1?.5*t*t*t*t*t:.5*((t-=2)*t*t*t*t+2)},easeInSine:function(t){return-1*Math.cos(t/1*(Math.PI/2))+1},easeOutSine:function(t){return 1*Math.sin(t/1*(Math.PI/2))},easeInOutSine:function(t){return-.5*(Math.cos(Math.PI*t/1)-1)},easeInExpo:function(t){return 0===t?1:1*Math.pow(2,10*(t/1-1))},easeOutExpo:function(t){return 1===t?1:1*(-Math.pow(2,-10*t/1)+1)},easeInOutExpo:function(t){return 0===t?0:1===t?1:(t/=.5)<1?.5*Math.pow(2,10*(t-1)):.5*(-Math.pow(2,-10*--t)+2)},easeInCirc:function(t){return t>=1?t:-1*(Math.sqrt(1-(t/=1)*t)-1)},easeOutCirc:function(t){return 1*Math.sqrt(1-(t=t/1-1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),-(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)))},easeOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:1===(t/=1)?1:(n||(n=.3),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),i*Math.pow(2,-10*t)*Math.sin((1*t-e)*(2*Math.PI)/n)+1)},easeInOutElastic:function(t){var e=1.70158,n=0,i=1;return 0===t?0:2===(t/=.5)?1:(n||(n=1*(.3*1.5)),i<Math.abs(1)?(i=1,e=n/4):e=n/(2*Math.PI)*Math.asin(1/i),t<1?-.5*(i*Math.pow(2,10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)):i*Math.pow(2,-10*(t-=1))*Math.sin((1*t-e)*(2*Math.PI)/n)*.5+1)},easeInBack:function(t){var e=1.70158;return 1*(t/=1)*t*((e+1)*t-e)},easeOutBack:function(t){var e=1.70158;return 1*((t=t/1-1)*t*((e+1)*t+e)+1)},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?.5*(t*t*(((e*=1.525)+1)*t-e)):.5*((t-=2)*t*(((e*=1.525)+1)*t+e)+2)},easeInBounce:function(t){return 1-r.easeOutBounce(1-t)},easeOutBounce:function(t){return(t/=1)<1/2.75?1*(7.5625*t*t):t<2/2.75?1*(7.5625*(t-=1.5/2.75)*t+.75):t<2.5/2.75?1*(7.5625*(t-=2.25/2.75)*t+.9375):1*(7.5625*(t-=2.625/2.75)*t+.984375)},easeInOutBounce:function(t){return t<.5?.5*r.easeInBounce(2*t):.5*r.easeOutBounce(2*t-1)+.5}};o.requestAnimFrame=function(){return"undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)}}(),o.getRelativePosition=function(t,e){var n,i,a=t.originalEvent||t,r=t.currentTarget||t.srcElement,l=r.getBoundingClientRect(),s=a.touches;s&&s.length>0?(n=s[0].clientX,i=s[0].clientY):(n=a.clientX,i=a.clientY);var u=parseFloat(o.getStyle(r,"padding-left")),d=parseFloat(o.getStyle(r,"padding-top")),c=parseFloat(o.getStyle(r,"padding-right")),h=parseFloat(o.getStyle(r,"padding-bottom")),f=l.right-l.left-u-c,g=l.bottom-l.top-d-h;return n=Math.round((n-l.left-u)/f*r.width/e.currentDevicePixelRatio),i=Math.round((i-l.top-d)/g*r.height/e.currentDevicePixelRatio),{x:n,y:i}},o.addEvent=function(t,e,n){t.addEventListener?t.addEventListener(e,n):t.attachEvent?t.attachEvent("on"+e,n):t["on"+e]=n},o.removeEvent=function(t,e,n){t.removeEventListener?t.removeEventListener(e,n,!1):t.detachEvent?t.detachEvent("on"+e,n):t["on"+e]=o.noop},o.getConstraintWidth=function(t){return a(t,"max-width","clientWidth")},o.getConstraintHeight=function(t){return a(t,"max-height","clientHeight")},o.getMaximumWidth=function(t){var e=t.parentNode,n=parseInt(o.getStyle(e,"padding-left"),10),i=parseInt(o.getStyle(e,"padding-right"),10),a=e.clientWidth-n-i,r=o.getConstraintWidth(t);return isNaN(r)?a:Math.min(a,r)},o.getMaximumHeight=function(t){var e=t.parentNode,n=parseInt(o.getStyle(e,"padding-top"),10),i=parseInt(o.getStyle(e,"padding-bottom"),10),a=e.clientHeight-n-i,r=o.getConstraintHeight(t);return isNaN(r)?a:Math.min(a,r)},o.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},o.retinaScale=function(t){var e=t.currentDevicePixelRatio=window.devicePixelRatio||1;if(1!==e){var n=t.canvas,i=t.height,a=t.width;n.height=i*e,n.width=a*e,t.ctx.scale(e,e),n.style.height=i+"px",n.style.width=a+"px"}},o.clear=function(t){t.ctx.clearRect(0,0,t.width,t.height)},o.fontString=function(t,e,n){return e+" "+t+"px "+n},o.longestText=function(t,e,n,i){i=i||{};var a=i.data=i.data||{},r=i.garbageCollect=i.garbageCollect||[];i.font!==e&&(a=i.data={},r=i.garbageCollect=[],i.font=e),t.font=e;var l=0;o.each(n,function(e){void 0!==e&&null!==e&&o.isArray(e)!==!0?l=o.measureText(t,a,r,l,e):o.isArray(e)&&o.each(e,function(e){void 0===e||null===e||o.isArray(e)||(l=o.measureText(t,a,r,l,e))})});var s=r.length/2;if(s>n.length){for(var u=0;u<s;u++)delete a[r[u]];r.splice(0,s)}return l},o.measureText=function(t,e,n,i,a){var o=e[a];return o||(o=e[a]=t.measureText(a).width,n.push(a)),o>i&&(i=o),i},o.numberOfLabelLines=function(t){var e=1;return o.each(t,function(t){o.isArray(t)&&t.length>e&&(e=t.length)}),e},o.drawRoundedRectangle=function(t,e,n,i,a,o){t.beginPath(),t.moveTo(e+o,n),t.lineTo(e+i-o,n),t.quadraticCurveTo(e+i,n,e+i,n+o),t.lineTo(e+i,n+a-o),t.quadraticCurveTo(e+i,n+a,e+i-o,n+a),t.lineTo(e+o,n+a),t.quadraticCurveTo(e,n+a,e,n+a-o),t.lineTo(e,n+o),t.quadraticCurveTo(e,n,e+o,n),t.closePath()},o.color=i?function(e){return e instanceof CanvasGradient&&(e=t.defaults.global.defaultColor),i(e)}:function(t){return console.error("Color.js not found!"),t},o.isArray=Array.isArray?function(t){return Array.isArray(t)}:function(t){return"[object Array]"===Object.prototype.toString.call(t)},o.arrayEquals=function(t,e){var n,i,a,r;if(!t||!e||t.length!==e.length)return!1;for(n=0,i=t.length;n<i;++n)if(a=t[n],r=e[n],a instanceof Array&&r instanceof Array){if(!o.arrayEquals(a,r))return!1}else if(a!==r)return!1;return!0},o.callback=function(t,e,n){t&&"function"==typeof t.call&&t.apply(n,e)},o.getHoverColor=function(t){return t instanceof CanvasPattern?t:o.color(t).saturate(.5).darken(.1).rgbString()},o.callCallback=o.callback}},{3:3}],27:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.native?{x:t.x,y:t.y}:r.getRelativePosition(t,e)}function n(t,e){var n,i,a,o,r,l=t.data.datasets;for(i=0,o=l.length;i<o;++i)if(t.isDatasetVisible(i))for(n=t.getDatasetMeta(i),a=0,r=n.data.length;a<r;++a){var s=n.data[a];s._view.skip||e(s)}}function i(t,e){var i=[];return n(t,function(t){t.inRange(e.x,e.y)&&i.push(t)}),i}function a(t,e,i,a){var o=Number.POSITIVE_INFINITY,l=[];return a||(a=r.distanceBetweenPoints),n(t,function(t){if(!i||t.inRange(e.x,e.y)){var n=t.getCenterPoint(),r=a(e,n);r<o?(l=[t],o=r):r===o&&l.push(t)}}),l}function o(t,n,o){var r=e(n,t),l=function(t,e){return Math.abs(t.x-e.x)},s=o.intersect?i(t,r):a(t,r,!1,l),u=[];return s.length?(t.data.datasets.forEach(function(e,n){if(t.isDatasetVisible(n)){var i=t.getDatasetMeta(n),a=i.data[s[0]._index];a&&!a._view.skip&&u.push(a)}}),u):[]}var r=t.helpers;t.Interaction={modes:{single:function(t,i){var a=e(i,t),o=[];return n(t,function(t){if(t.inRange(a.x,a.y))return o.push(t),o}),o.slice(0,1)},label:o,index:o,dataset:function(t,n,o){var r=e(n,t),l=o.intersect?i(t,r):a(t,r,!1);return l.length>0&&(l=t.getDatasetMeta(l[0]._datasetIndex).data),l},"x-axis":function(t,e){return o(t,e,!0)},point:function(t,n){var a=e(n,t);return i(t,a)},nearest:function(t,n,i){var o=e(n,t),r=a(t,o,i.intersect);return r.length>1&&r.sort(function(t,e){var n=t.getArea(),i=e.getArea(),a=n-i;return 0===a&&(a=t._datasetIndex-e._datasetIndex),a}),r.slice(0,1)},x:function(t,i,a){var o=e(i,t),r=[],l=!1;return n(t,function(t){t.inXRange(o.x)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),a.intersect&&!l&&(r=[]),r},y:function(t,i,a){var o=e(i,t),r=[],l=!1;return n(t,function(t){t.inYRange(o.y)&&r.push(t),t.inRange(o.x,o.y)&&(l=!0)}),a.intersect&&!l&&(r=[]),r}}}}},{}],28:[function(t,e,n){"use strict";e.exports=function(){var t=function(t,e){return this.construct(t,e),this};return t.defaults={global:{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},legendCallback:function(t){var e=[];e.push('<ul class="'+t.id+'-legend">');for(var n=0;n<t.data.datasets.length;n++)e.push('<li><span style="background-color:'+t.data.datasets[n].backgroundColor+'"></span>'),t.data.datasets[n].label&&e.push(t.data.datasets[n].label),e.push("</li>");return e.push("</ul>"),e.join("")}}},t.Chart=t,t}},{}],29:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return i.where(t,function(t){return t.position===e})}function n(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,n){var i=e?n:t,a=e?t:n;return i.weight===a.weight?i._tmpIndex_-a._tmpIndex_:i.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}var i=t.helpers;t.layoutService={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var n=t.boxes?t.boxes.indexOf(e):-1;n!==-1&&t.boxes.splice(n,1)},configure:function(t,e,n){for(var i,a=["fullWidth","position","weight"],o=a.length,r=0;r<o;++r)i=a[r],n.hasOwnProperty(i)&&(e[i]=n[i])},update:function(t,a,o){function r(t){var e,n=t.isHorizontal();n?(e=t.update(t.fullWidth?k:I,D),A-=e.height):(e=t.update(C,S),I-=e.width),P.push({horizontal:n,minSize:e,box:t})}function l(t){var e=i.findNextWhere(P,function(e){return e.box===t});if(e)if(t.isHorizontal()){var n={left:Math.max(L,_),right:Math.max(V,T),top:0,bottom:0};t.update(t.fullWidth?k:I,w/2,n)}else t.update(e.minSize.width,A)}function s(t){var e=i.findNextWhere(P,function(e){return e.box===t}),n={left:0,right:0,top:O,bottom:z};e&&t.update(e.minSize.width,A,n)}function u(t){t.isHorizontal()?(t.left=t.fullWidth?h:L,t.right=t.fullWidth?a-f:L+I,t.top=q,t.bottom=q+t.height,q=t.bottom):(t.left=H,t.right=H+t.width,t.top=O,t.bottom=O+A,H=t.right)}if(t){var d=t.options.layout,c=d?d.padding:null,h=0,f=0,g=0,p=0;isNaN(c)?(h=c.left||0,f=c.right||0,g=c.top||0,p=c.bottom||0):(h=c,f=c,g=c,p=c);var m=e(t.boxes,"left"),v=e(t.boxes,"right"),b=e(t.boxes,"top"),x=e(t.boxes,"bottom"),y=e(t.boxes,"chartArea");n(m,!0),n(v,!1),n(b,!0),n(x,!1);var k=a-h-f,w=o-g-p,M=k/2,S=w/2,C=(a-M)/(m.length+v.length),D=(o-S)/(b.length+x.length),I=k,A=w,P=[];i.each(m.concat(v,b,x),r);var _=0,T=0,F=0,R=0;i.each(b.concat(x),function(t){if(t.getPadding){var e=t.getPadding();_=Math.max(_,e.left),T=Math.max(T,e.right)}}),i.each(m.concat(v),function(t){if(t.getPadding){var e=t.getPadding();F=Math.max(F,e.top),R=Math.max(R,e.bottom)}});var L=h,V=f,O=g,z=p;i.each(m.concat(v),l),i.each(m,function(t){L+=t.width}),i.each(v,function(t){V+=t.width}),i.each(b.concat(x),l),i.each(b,function(t){O+=t.height}),i.each(x,function(t){z+=t.height}),i.each(m.concat(v),s),L=h,V=f,O=g,z=p,i.each(m,function(t){L+=t.width}),i.each(v,function(t){V+=t.width}),i.each(b,function(t){O+=t.height}),i.each(x,function(t){z+=t.height});var B=Math.max(_-L,0);L+=B,V+=Math.max(T-V,0);var W=Math.max(F-O,0);O+=W,z+=Math.max(R-z,0);var N=o-O-z,E=a-L-V;E===I&&N===A||(i.each(m,function(t){t.height=N}),i.each(v,function(t){t.height=N}),i.each(b,function(t){t.fullWidth||(t.width=E)}),i.each(x,function(t){t.fullWidth||(t.width=E)}),A=N,I=E);var H=h+B,q=g+W;i.each(m.concat(b),u),H+=I,q+=A,i.each(v,u),i.each(x,u),t.chartArea={left:L,top:O,right:L+I,bottom:O+A},i.each(y,function(e){e.left=t.chartArea.left,e.top=t.chartArea.top,e.right=t.chartArea.right,e.bottom=t.chartArea.bottom,e.update(I,A)})}}}}},{}],30:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.defaults.global.plugins={},t.plugins={_plugins:[],_cacheId:0,register:function(t){var e=this._plugins;[].concat(t).forEach(function(t){e.indexOf(t)===-1&&e.push(t)}),this._cacheId++},unregister:function(t){var e=this._plugins;[].concat(t).forEach(function(t){var n=e.indexOf(t);n!==-1&&e.splice(n,1)}),this._cacheId++},clear:function(){this._plugins=[],this._cacheId++},count:function(){return this._plugins.length},getAll:function(){return this._plugins},notify:function(t,e,n){var i,a,o,r,l,s=this.descriptors(t),u=s.length;for(i=0;i<u;++i)if(a=s[i],o=a.plugin,l=o[e],"function"==typeof l&&(r=[t].concat(n||[]),r.push(a.options),l.apply(o,r)===!1))return!1;return!0},descriptors:function(n){var i=n._plugins||(n._plugins={});if(i.id===this._cacheId)return i.descriptors;var a=[],o=[],r=n&&n.config||{},l=t.defaults.global.plugins,s=r.options&&r.options.plugins||{};return this._plugins.concat(r.plugins||[]).forEach(function(t){var n=a.indexOf(t);if(n===-1){var i=t.id,r=s[i];r!==!1&&(r===!0&&(r=e.clone(l[i])),a.push(t),o.push({plugin:t,options:r||{}}))}}),i.descriptors=o,i.id=this._cacheId,o}},t.pluginService=t.plugins,t.PluginBase=t.Element.extend({})}},{}],31:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e,n){return i.isArray(e)?i.longestText(t,n,e):t.measureText(e).width}function n(e){var n=i.getValueOrDefault,a=t.defaults.global,o=n(e.fontSize,a.defaultFontSize),r=n(e.fontStyle,a.defaultFontStyle),l=n(e.fontFamily,a.defaultFontFamily);return{size:o,style:r,family:l,font:i.fontString(o,r,l)}}var i=t.helpers;t.defaults.scale={display:!0,position:"left",gridLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1,drawBorder:!0,drawOnChartArea:!0,drawTicks:!0,tickMarkLength:10,zeroLineWidth:1,zeroLineColor:"rgba(0,0,0,0.25)",zeroLineBorderDash:[],zeroLineBorderDashOffset:0,offsetGridLines:!1,borderDash:[],borderDashOffset:0},scaleLabel:{labelString:"",display:!1},ticks:{beginAtZero:!1,minRotation:0,maxRotation:50,mirror:!1,padding:0,reverse:!1,display:!0,autoSkip:!0,autoSkipPadding:0,labelOffset:0,callback:t.Ticks.formatters.values}},t.Scale=t.Element.extend({getPadding:function(){var t=this;return{left:t.paddingLeft||0,top:t.paddingTop||0,right:t.paddingRight||0,bottom:t.paddingBottom||0}},beforeUpdate:function(){i.callback(this.options.beforeUpdate,[this])},update:function(t,e,n){var a=this;return a.beforeUpdate(),a.maxWidth=t,a.maxHeight=e,a.margins=i.extend({left:0,right:0,top:0,bottom:0},n),a.longestTextCache=a.longestTextCache||{},a.beforeSetDimensions(),a.setDimensions(),a.afterSetDimensions(),a.beforeDataLimits(),a.determineDataLimits(),a.afterDataLimits(),a.beforeBuildTicks(),a.buildTicks(),a.afterBuildTicks(),a.beforeTickToLabelConversion(),a.convertTicksToLabels(),a.afterTickToLabelConversion(),a.beforeCalculateTickRotation(),a.calculateTickRotation(),a.afterCalculateTickRotation(),a.beforeFit(),a.fit(),a.afterFit(),a.afterUpdate(),a.minSize},afterUpdate:function(){i.callback(this.options.afterUpdate,[this])},beforeSetDimensions:function(){i.callback(this.options.beforeSetDimensions,[this])},setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0},afterSetDimensions:function(){i.callback(this.options.afterSetDimensions,[this])},beforeDataLimits:function(){i.callback(this.options.beforeDataLimits,[this])},determineDataLimits:i.noop,afterDataLimits:function(){i.callback(this.options.afterDataLimits,[this])},beforeBuildTicks:function(){i.callback(this.options.beforeBuildTicks,[this])},buildTicks:i.noop,afterBuildTicks:function(){i.callback(this.options.afterBuildTicks,[this])},beforeTickToLabelConversion:function(){i.callback(this.options.beforeTickToLabelConversion,[this])},convertTicksToLabels:function(){var t=this,e=t.options.ticks;t.ticks=t.ticks.map(e.userCallback||e.callback)},afterTickToLabelConversion:function(){i.callback(this.options.afterTickToLabelConversion,[this])},beforeCalculateTickRotation:function(){i.callback(this.options.beforeCalculateTickRotation,[this])},calculateTickRotation:function(){var t=this,e=t.ctx,a=t.options.ticks,o=n(a);e.font=o.font;var r=a.minRotation||0;if(t.options.display&&t.isHorizontal())for(var l,s,u=i.longestText(e,o.font,t.ticks,t.longestTextCache),d=u,c=t.getPixelForTick(1)-t.getPixelForTick(0)-6;d>c&&r<a.maxRotation;){var h=i.toRadians(r);if(l=Math.cos(h),s=Math.sin(h),s*u>t.maxHeight){r--;break}r++,d=l*u}t.labelRotation=r},afterCalculateTickRotation:function(){i.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){i.callback(this.options.beforeFit,[this])},fit:function(){var t=this,a=t.minSize={width:0,height:0},o=t.options,r=o.ticks,l=o.scaleLabel,s=o.gridLines,u=o.display,d=t.isHorizontal(),c=n(r),h=1.5*n(l).size,f=o.gridLines.tickMarkLength;if(d?a.width=t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:a.width=u&&s.drawTicks?f:0,d?a.height=u&&s.drawTicks?f:0:a.height=t.maxHeight,l.display&&u&&(d?a.height+=h:a.width+=h),r.display&&u){var g=i.longestText(t.ctx,c.font,t.ticks,t.longestTextCache),p=i.numberOfLabelLines(t.ticks),m=.5*c.size;if(d){t.longestLabelWidth=g;var v=i.toRadians(t.labelRotation),b=Math.cos(v),x=Math.sin(v),y=x*g+c.size*p+m*p;a.height=Math.min(t.maxHeight,a.height+y),t.ctx.font=c.font;var k=t.ticks[0],w=e(t.ctx,k,c.font),M=t.ticks[t.ticks.length-1],S=e(t.ctx,M,c.font);0!==t.labelRotation?(t.paddingLeft="bottom"===o.position?b*w+3:b*m+3,t.paddingRight="bottom"===o.position?b*m+3:b*S+3):(t.paddingLeft=w/2+3,t.paddingRight=S/2+3)}else r.mirror?g=0:g+=t.options.ticks.padding,a.width=Math.min(t.maxWidth,a.width+g),t.paddingTop=c.size/2,t.paddingBottom=c.size/2}t.handleMargins(),t.width=a.width,t.height=a.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){i.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){return null===t||"undefined"==typeof t?NaN:"number"!=typeof t||isFinite(t)?"object"==typeof t?t instanceof Date||t.isValid?t:this.getRightValue(this.isHorizontal()?t.x:t.y):t:NaN},getLabelForIndex:i.noop,getPixelForValue:i.noop,getValueForPixel:i.noop,getPixelForTick:function(t,e){var n=this;if(n.isHorizontal()){var i=n.width-(n.paddingLeft+n.paddingRight),a=i/Math.max(n.ticks.length-(n.options.gridLines.offsetGridLines?0:1),1),o=a*t+n.paddingLeft;e&&(o+=a/2);var r=n.left+Math.round(o);return r+=n.isFullWidth()?n.margins.left:0}var l=n.height-(n.paddingTop+n.paddingBottom);return n.top+t*(l/(n.ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var n=e.width-(e.paddingLeft+e.paddingRight),i=n*t+e.paddingLeft,a=e.left+Math.round(i);return a+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this,e=t.min,n=t.max;return t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0},draw:function(e){var a=this,o=a.options;if(o.display){var r,l,s=a.ctx,u=t.defaults.global,d=o.ticks,c=o.gridLines,h=o.scaleLabel,f=0!==a.labelRotation,g=d.autoSkip,p=a.isHorizontal();d.maxTicksLimit&&(l=d.maxTicksLimit);var m=i.getValueOrDefault(d.fontColor,u.defaultFontColor),v=n(d),b=c.drawTicks?c.tickMarkLength:0,x=i.getValueOrDefault(h.fontColor,u.defaultFontColor),y=n(h),k=i.toRadians(a.labelRotation),w=Math.cos(k),M=a.longestLabelWidth*w;s.fillStyle=m;var S=[];if(p){if(r=!1,(M+d.autoSkipPadding)*a.ticks.length>a.width-(a.paddingLeft+a.paddingRight)&&(r=1+Math.floor((M+d.autoSkipPadding)*a.ticks.length/(a.width-(a.paddingLeft+a.paddingRight)))),l&&a.ticks.length>l)for(;!r||a.ticks.length/(r||1)>l;)r||(r=1),r+=1;g||(r=!1)}var C="right"===o.position?a.left:a.right-b,D="right"===o.position?a.left+b:a.right,I="bottom"===o.position?a.top:a.bottom-b,A="bottom"===o.position?a.top+b:a.bottom;if(i.each(a.ticks,function(t,n){if(void 0!==t&&null!==t){var l=a.ticks.length===n+1,s=r>1&&n%r>0||n%r===0&&n+r>=a.ticks.length;if((!s||l)&&void 0!==t&&null!==t){var h,g,m,v;n===("undefined"!=typeof a.zeroLineIndex?a.zeroLineIndex:0)?(h=c.zeroLineWidth,g=c.zeroLineColor,m=c.zeroLineBorderDash,v=c.zeroLineBorderDashOffset):(h=i.getValueAtIndexOrDefault(c.lineWidth,n),g=i.getValueAtIndexOrDefault(c.color,n),m=i.getValueOrDefault(c.borderDash,u.borderDash),v=i.getValueOrDefault(c.borderDashOffset,u.borderDashOffset));var x,y,w,M,P,_,T,F,R,L,V="middle",O="middle";if(p){"bottom"===o.position?(O=f?"middle":"top",V=f?"right":"center",L=a.top+b):(O=f?"middle":"bottom",V=f?"left":"center",L=a.bottom-b);var z=a.getPixelForTick(n)+i.aliasPixel(h);R=a.getPixelForTick(n,c.offsetGridLines)+d.labelOffset,x=w=P=T=z,y=I,M=A,_=e.top,F=e.bottom}else{var B,W="left"===o.position,N=d.padding;d.mirror?(V=W?"left":"right",B=N):(V=W?"right":"left",
-B=b+N),R=W?a.right-B:a.left+B;var E=a.getPixelForTick(n);E+=i.aliasPixel(h),L=a.getPixelForTick(n,c.offsetGridLines),x=C,w=D,P=e.left,T=e.right,y=M=_=F=E}S.push({tx1:x,ty1:y,tx2:w,ty2:M,x1:P,y1:_,x2:T,y2:F,labelX:R,labelY:L,glWidth:h,glColor:g,glBorderDash:m,glBorderDashOffset:v,rotation:-1*k,label:t,textBaseline:O,textAlign:V})}}}),i.each(S,function(t){if(c.display&&(s.save(),s.lineWidth=t.glWidth,s.strokeStyle=t.glColor,s.setLineDash&&(s.setLineDash(t.glBorderDash),s.lineDashOffset=t.glBorderDashOffset),s.beginPath(),c.drawTicks&&(s.moveTo(t.tx1,t.ty1),s.lineTo(t.tx2,t.ty2)),c.drawOnChartArea&&(s.moveTo(t.x1,t.y1),s.lineTo(t.x2,t.y2)),s.stroke(),s.restore()),d.display){s.save(),s.translate(t.labelX,t.labelY),s.rotate(t.rotation),s.font=v.font,s.textBaseline=t.textBaseline,s.textAlign=t.textAlign;var e=t.label;if(i.isArray(e))for(var n=0,a=0;n<e.length;++n)s.fillText(""+e[n],0,a),a+=1.5*v.size;else s.fillText(e,0,0);s.restore()}}),h.display){var P,_,T=0;if(p)P=a.left+(a.right-a.left)/2,_="bottom"===o.position?a.bottom-y.size/2:a.top+y.size/2;else{var F="left"===o.position;P=F?a.left+y.size/2:a.right-y.size/2,_=a.top+(a.bottom-a.top)/2,T=F?-.5*Math.PI:.5*Math.PI}s.save(),s.translate(P,_),s.rotate(T),s.textAlign="center",s.textBaseline="middle",s.fillStyle=x,s.font=y.font,s.fillText(h.labelString,0,0),s.restore()}if(c.drawBorder){s.lineWidth=i.getValueAtIndexOrDefault(c.lineWidth,0),s.strokeStyle=i.getValueAtIndexOrDefault(c.color,0);var R=a.left,L=a.right,V=a.top,O=a.bottom,z=i.aliasPixel(s.lineWidth);p?(V=O="top"===o.position?a.bottom:a.top,V+=z,O+=z):(R=L="left"===o.position?a.right:a.left,R+=z,L+=z),s.beginPath(),s.moveTo(R,V),s.lineTo(L,O),s.stroke()}}}})}},{}],32:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.scaleService={constructors:{},defaults:{},registerScaleType:function(t,n,i){this.constructors[t]=n,this.defaults[t]=e.clone(i)},getScaleConstructor:function(t){return this.constructors.hasOwnProperty(t)?this.constructors[t]:void 0},getScaleDefaults:function(n){return this.defaults.hasOwnProperty(n)?e.scaleMerge(t.defaults.scale,this.defaults[n]):{}},updateScaleDefaults:function(t,n){var i=this.defaults;i.hasOwnProperty(t)&&(i[t]=e.extend(i[t],n))},addScalesToLayout:function(n){e.each(n.scales,function(e){e.fullWidth=e.options.fullWidth,e.position=e.options.position,e.weight=e.options.weight,t.layoutService.addBox(n,e)})}}}},{}],33:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers;t.Ticks={generators:{linear:function(t,n){var i,a=[];if(t.stepSize&&t.stepSize>0)i=t.stepSize;else{var o=e.niceNum(n.max-n.min,!1);i=e.niceNum(o/(t.maxTicks-1),!0)}var r=Math.floor(n.min/i)*i,l=Math.ceil(n.max/i)*i;t.min&&t.max&&t.stepSize&&e.almostWhole((t.max-t.min)/t.stepSize,i/1e3)&&(r=t.min,l=t.max);var s=(l-r)/i;s=e.almostEquals(s,Math.round(s),i/1e3)?Math.round(s):Math.ceil(s),a.push(void 0!==t.min?t.min:r);for(var u=1;u<s;++u)a.push(r+u*i);return a.push(void 0!==t.max?t.max:l),a},logarithmic:function(t,n){var i,a,o=[],r=e.getValueOrDefault,l=r(t.min,Math.pow(10,Math.floor(e.log10(n.min)))),s=Math.floor(e.log10(n.max)),u=Math.ceil(n.max/Math.pow(10,s));0===l?(i=Math.floor(e.log10(n.minNotZero)),a=Math.floor(n.minNotZero/Math.pow(10,i)),o.push(l),l=a*Math.pow(10,i)):(i=Math.floor(e.log10(l)),a=Math.floor(l/Math.pow(10,i)));do o.push(l),++a,10===a&&(a=1,++i),l=a*Math.pow(10,i);while(i<s||i===s&&a<u);var d=r(t.max,l);return o.push(d),o}},formatters:{values:function(t){return e.isArray(t)?t:""+t},linear:function(t,n,i){var a=i.length>3?i[2]-i[1]:i[1]-i[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var o=e.log10(Math.abs(a)),r="";if(0!==t){var l=-1*Math.floor(o);l=Math.max(Math.min(l,20),0),r=t.toFixed(l)}else r="0";return r},logarithmic:function(t,n,i){var a=t/Math.pow(10,Math.floor(e.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===n||n===i.length-1?t.toExponential():""}}}}},{}],34:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){var n=s.color(t);return n.alpha(e*n.alpha()).rgbaString()}function n(t,e){return e&&(s.isArray(e)?Array.prototype.push.apply(t,e):t.push(e)),t}function i(t){var e=t._xScale,n=t._yScale||t._scale,i=t._index,a=t._datasetIndex;return{xLabel:e?e.getLabelForIndex(i,a):"",yLabel:n?n.getLabelForIndex(i,a):"",index:i,datasetIndex:a,x:t._model.x,y:t._model.y}}function a(e){var n=t.defaults.global,i=s.getValueOrDefault;return{xPadding:e.xPadding,yPadding:e.yPadding,xAlign:e.xAlign,yAlign:e.yAlign,bodyFontColor:e.bodyFontColor,_bodyFontFamily:i(e.bodyFontFamily,n.defaultFontFamily),_bodyFontStyle:i(e.bodyFontStyle,n.defaultFontStyle),_bodyAlign:e.bodyAlign,bodyFontSize:i(e.bodyFontSize,n.defaultFontSize),bodySpacing:e.bodySpacing,titleFontColor:e.titleFontColor,_titleFontFamily:i(e.titleFontFamily,n.defaultFontFamily),_titleFontStyle:i(e.titleFontStyle,n.defaultFontStyle),titleFontSize:i(e.titleFontSize,n.defaultFontSize),_titleAlign:e.titleAlign,titleSpacing:e.titleSpacing,titleMarginBottom:e.titleMarginBottom,footerFontColor:e.footerFontColor,_footerFontFamily:i(e.footerFontFamily,n.defaultFontFamily),_footerFontStyle:i(e.footerFontStyle,n.defaultFontStyle),footerFontSize:i(e.footerFontSize,n.defaultFontSize),_footerAlign:e.footerAlign,footerSpacing:e.footerSpacing,footerMarginTop:e.footerMarginTop,caretSize:e.caretSize,cornerRadius:e.cornerRadius,backgroundColor:e.backgroundColor,opacity:0,legendColorBackground:e.multiKeyBackground,displayColors:e.displayColors,borderColor:e.borderColor,borderWidth:e.borderWidth}}function o(t,e){var n=t._chart.ctx,i=2*e.yPadding,a=0,o=e.body,r=o.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);r+=e.beforeBody.length+e.afterBody.length;var l=e.title.length,u=e.footer.length,d=e.titleFontSize,c=e.bodyFontSize,h=e.footerFontSize;i+=l*d,i+=l?(l-1)*e.titleSpacing:0,i+=l?e.titleMarginBottom:0,i+=r*c,i+=r?(r-1)*e.bodySpacing:0,i+=u?e.footerMarginTop:0,i+=u*h,i+=u?(u-1)*e.footerSpacing:0;var f=0,g=function(t){a=Math.max(a,n.measureText(t).width+f)};return n.font=s.fontString(d,e._titleFontStyle,e._titleFontFamily),s.each(e.title,g),n.font=s.fontString(c,e._bodyFontStyle,e._bodyFontFamily),s.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?c+2:0,s.each(o,function(t){s.each(t.before,g),s.each(t.lines,g),s.each(t.after,g)}),f=0,n.font=s.fontString(h,e._footerFontStyle,e._footerFontFamily),s.each(e.footer,g),a+=2*e.xPadding,{width:a,height:i}}function r(t,e){var n=t._model,i=t._chart,a=t._chart.chartArea,o="center",r="center";n.y<e.height?r="top":n.y>i.height-e.height&&(r="bottom");var l,s,u,d,c,h=(a.left+a.right)/2,f=(a.top+a.bottom)/2;"center"===r?(l=function(t){return t<=h},s=function(t){return t>h}):(l=function(t){return t<=e.width/2},s=function(t){return t>=i.width-e.width/2}),u=function(t){return t+e.width>i.width},d=function(t){return t-e.width<0},c=function(t){return t<=f?"top":"bottom"},l(n.x)?(o="left",u(n.x)&&(o="center",r=c(n.y))):s(n.x)&&(o="right",d(n.x)&&(o="center",r=c(n.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:o,yAlign:g.yAlign?g.yAlign:r}}function l(t,e,n){var i=t.x,a=t.y,o=t.caretSize,r=t.caretPadding,l=t.cornerRadius,s=n.xAlign,u=n.yAlign,d=o+r,c=l+r;return"right"===s?i-=e.width:"center"===s&&(i-=e.width/2),"top"===u?a+=d:a-="bottom"===u?e.height+d:e.height/2,"center"===u?"left"===s?i+=d:"right"===s&&(i-=d):"left"===s?i-=c:"right"===s&&(i+=c),{x:i,y:a}}var s=t.helpers;t.defaults.global.tooltips={enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:s.noop,title:function(t,e){var n="",i=e.labels,a=i?i.length:0;if(t.length>0){var o=t[0];o.xLabel?n=o.xLabel:a>0&&o.index<a&&(n=i[o.index])}return n},afterTitle:s.noop,beforeBody:s.noop,beforeLabel:s.noop,label:function(t,e){var n=e.datasets[t.datasetIndex].label||"";return n&&(n+=": "),n+=t.yLabel},labelColor:function(t,e){var n=e.getDatasetMeta(t.datasetIndex),i=n.data[t.index],a=i._view;return{borderColor:a.borderColor,backgroundColor:a.backgroundColor}},afterLabel:s.noop,afterBody:s.noop,beforeFooter:s.noop,footer:s.noop,afterFooter:s.noop}},t.Tooltip=t.Element.extend({initialize:function(){this._model=a(this._options)},getTitle:function(){var t=this,e=t._options,i=e.callbacks,a=i.beforeTitle.apply(t,arguments),o=i.title.apply(t,arguments),r=i.afterTitle.apply(t,arguments),l=[];return l=n(l,a),l=n(l,o),l=n(l,r)},getBeforeBody:function(){var t=this._options.callbacks.beforeBody.apply(this,arguments);return s.isArray(t)?t:void 0!==t?[t]:[]},getBody:function(t,e){var i=this,a=i._options.callbacks,o=[];return s.each(t,function(t){var r={before:[],lines:[],after:[]};n(r.before,a.beforeLabel.call(i,t,e)),n(r.lines,a.label.call(i,t,e)),n(r.after,a.afterLabel.call(i,t,e)),o.push(r)}),o},getAfterBody:function(){var t=this._options.callbacks.afterBody.apply(this,arguments);return s.isArray(t)?t:void 0!==t?[t]:[]},getFooter:function(){var t=this,e=t._options.callbacks,i=e.beforeFooter.apply(t,arguments),a=e.footer.apply(t,arguments),o=e.afterFooter.apply(t,arguments),r=[];return r=n(r,i),r=n(r,a),r=n(r,o)},update:function(e){var n,u,d=this,c=d._options,h=d._model,f=d._model=a(c),g=d._active,p=d._data,m={xAlign:h.xAlign,yAlign:h.yAlign},v={x:h.x,y:h.y},b={width:h.width,height:h.height},x={x:h.caretX,y:h.caretY};if(g.length){f.opacity=1;var y=[];x=t.Tooltip.positioners[c.position](g,d._eventPosition);var k=[];for(n=0,u=g.length;n<u;++n)k.push(i(g[n]));c.filter&&(k=k.filter(function(t){return c.filter(t,p)})),c.itemSort&&(k=k.sort(function(t,e){return c.itemSort(t,e,p)})),s.each(k,function(t){y.push(c.callbacks.labelColor.call(d,t,d._chart))}),f.title=d.getTitle(k,p),f.beforeBody=d.getBeforeBody(k,p),f.body=d.getBody(k,p),f.afterBody=d.getAfterBody(k,p),f.footer=d.getFooter(k,p),f.x=Math.round(x.x),f.y=Math.round(x.y),f.caretPadding=c.caretPadding,f.labelColors=y,f.dataPoints=k,b=o(this,f),m=r(this,b),v=l(f,b,m)}else f.opacity=0;return f.xAlign=m.xAlign,f.yAlign=m.yAlign,f.x=v.x,f.y=v.y,f.width=b.width,f.height=b.height,f.caretX=x.x,f.caretY=x.y,d._model=f,e&&c.custom&&c.custom.call(d,f),d},drawCaret:function(t,e){var n=this._chart.ctx,i=this._view,a=this.getCaretPosition(t,e,i);n.lineTo(a.x1,a.y1),n.lineTo(a.x2,a.y2),n.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,n){var i,a,o,r,l,s,u=n.caretSize,d=n.cornerRadius,c=n.xAlign,h=n.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===h)l=g+m/2,"left"===c?(i=f,a=i-u,o=i,r=l+u,s=l-u):(i=f+p,a=i+u,o=i,r=l-u,s=l+u);else if("left"===c?(a=f+d+u,i=a-u,o=a+u):"right"===c?(a=f+p-d-u,i=a-u,o=a+u):(a=f+p/2,i=a-u,o=a+u),"top"===h)r=g,l=r-u,s=r;else{r=g+m,l=r+u,s=r;var v=o;o=i,i=v}return{x1:i,x2:a,x3:o,y1:r,y2:l,y3:s}},drawTitle:function(t,n,i,a){var o=n.title;if(o.length){i.textAlign=n._titleAlign,i.textBaseline="top";var r=n.titleFontSize,l=n.titleSpacing;i.fillStyle=e(n.titleFontColor,a),i.font=s.fontString(r,n._titleFontStyle,n._titleFontFamily);var u,d;for(u=0,d=o.length;u<d;++u)i.fillText(o[u],t.x,t.y),t.y+=r+l,u+1===o.length&&(t.y+=n.titleMarginBottom-l)}},drawBody:function(t,n,i,a){var o=n.bodyFontSize,r=n.bodySpacing,l=n.body;i.textAlign=n._bodyAlign,i.textBaseline="top";var u=e(n.bodyFontColor,a);i.fillStyle=u,i.font=s.fontString(o,n._bodyFontStyle,n._bodyFontFamily);var d=0,c=function(e){i.fillText(e,t.x+d,t.y),t.y+=o+r};s.each(n.beforeBody,c);var h=n.displayColors;d=h?o+2:0,s.each(l,function(r,l){s.each(r.before,c),s.each(r.lines,function(r){h&&(i.fillStyle=e(n.legendColorBackground,a),i.fillRect(t.x,t.y,o,o),i.strokeStyle=e(n.labelColors[l].borderColor,a),i.strokeRect(t.x,t.y,o,o),i.fillStyle=e(n.labelColors[l].backgroundColor,a),i.fillRect(t.x+1,t.y+1,o-2,o-2),i.fillStyle=u),c(r)}),s.each(r.after,c)}),d=0,s.each(n.afterBody,c),t.y-=r},drawFooter:function(t,n,i,a){var o=n.footer;o.length&&(t.y+=n.footerMarginTop,i.textAlign=n._footerAlign,i.textBaseline="top",i.fillStyle=e(n.footerFontColor,a),i.font=s.fontString(n.footerFontSize,n._footerFontStyle,n._footerFontFamily),s.each(o,function(e){i.fillText(e,t.x,t.y),t.y+=n.footerFontSize+n.footerSpacing}))},drawBackground:function(t,n,i,a,o){i.fillStyle=e(n.backgroundColor,o),i.strokeStyle=e(n.borderColor,o),i.lineWidth=n.borderWidth;var r=n.xAlign,l=n.yAlign,s=t.x,u=t.y,d=a.width,c=a.height,h=n.cornerRadius;i.beginPath(),i.moveTo(s+h,u),"top"===l&&this.drawCaret(t,a),i.lineTo(s+d-h,u),i.quadraticCurveTo(s+d,u,s+d,u+h),"center"===l&&"right"===r&&this.drawCaret(t,a),i.lineTo(s+d,u+c-h),i.quadraticCurveTo(s+d,u+c,s+d-h,u+c),"bottom"===l&&this.drawCaret(t,a),i.lineTo(s+h,u+c),i.quadraticCurveTo(s,u+c,s,u+c-h),"center"===l&&"left"===r&&this.drawCaret(t,a),i.lineTo(s,u+h),i.quadraticCurveTo(s,u,s+h,u),i.closePath(),i.fill(),n.borderWidth>0&&i.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var n={width:e.width,height:e.height},i={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(this.drawBackground(i,e,t,n,a),i.x+=e.xPadding,i.y+=e.yPadding,this.drawTitle(i,e,t,a),this.drawBody(i,e,t,a),this.drawFooter(i,e,t,a))}},handleEvent:function(t){var e=this,n=e._options,i=!1;if(e._lastActive=e._lastActive||[],"mouseout"===t.type?e._active=[]:e._active=e._chart.getElementsAtEventForMode(t,n.mode,n),i=!s.arrayEquals(e._active,e._lastActive),!i)return!1;if(e._lastActive=e._active,n.enabled||n.custom){e._eventPosition={x:t.x,y:t.y};var a=e._model;e.update(!0),e.pivot(),i|=a.x!==e._model.x||a.y!==e._model.y}return i}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var e,n,i=0,a=0,o=0;for(e=0,n=t.length;e<n;++e){var r=t[e];if(r&&r.hasValue()){var l=r.tooltipPosition();i+=l.x,a+=l.y,++o}}return{x:Math.round(i/o),y:Math.round(a/o)}},nearest:function(t,e){var n,i,a,o=e.x,r=e.y,l=Number.POSITIVE_INFINITY;for(i=0,a=t.length;i<a;++i){var u=t[i];if(u&&u.hasValue()){var d=u.getCenterPoint(),c=s.distanceBetweenPoints(e,d);c<l&&(l=c,n=u)}}if(n){var h=n.tooltipPosition();o=h.x,r=h.y}return{x:o,y:r}}}}},{}],35:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults.global;n.elements.arc={backgroundColor:n.defaultColor,borderColor:"#fff",borderWidth:2},t.elements.Arc=t.Element.extend({inLabelRange:function(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hoverRadius,2)},inRange:function(t,n){var i=this._view;if(i){for(var a=e.getAngleFromPoint(i,{x:t,y:n}),o=a.angle,r=a.distance,l=i.startAngle,s=i.endAngle;s<l;)s+=2*Math.PI;for(;o>s;)o-=2*Math.PI;for(;o<l;)o+=2*Math.PI;var u=o>=l&&o<=s,d=r>=i.innerRadius&&r<=i.outerRadius;return u&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,n=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,n=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*n,y:t.y+Math.sin(e)*n}},draw:function(){var t=this._chart.ctx,e=this._view,n=e.startAngle,i=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,n,i),t.arc(e.x,e.y,e.innerRadius,i,n,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})}},{}],36:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=t.defaults.global;t.defaults.global.elements.line={tension:.4,backgroundColor:n.defaultColor,borderWidth:3,borderColor:n.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0},t.elements.Line=t.Element.extend({draw:function(){var t,i,a,o,r=this,l=r._view,s=r._chart.ctx,u=l.spanGaps,d=r._children.slice(),c=n.elements.line,h=-1;for(r._loop&&d.length&&d.push(d[0]),s.save(),s.lineCap=l.borderCapStyle||c.borderCapStyle,s.setLineDash&&s.setLineDash(l.borderDash||c.borderDash),s.lineDashOffset=l.borderDashOffset||c.borderDashOffset,s.lineJoin=l.borderJoinStyle||c.borderJoinStyle,s.lineWidth=l.borderWidth||c.borderWidth,s.strokeStyle=l.borderColor||n.defaultColor,s.beginPath(),h=-1,t=0;t<d.length;++t)i=d[t],a=e.previousItem(d,t),o=i._view,0===t?o.skip||(s.moveTo(o.x,o.y),h=t):(a=h===-1?a:d[h],o.skip||(h!==t-1&&!u||h===-1?s.moveTo(o.x,o.y):e.canvas.lineTo(s,a._view,i._view),h=t));s.stroke(),s.restore()}})}},{}],37:[function(t,e,n){"use strict";e.exports=function(t){function e(t){var e=this._view;return!!e&&Math.pow(t-e.x,2)<Math.pow(e.radius+e.hitRadius,2)}function n(t){var e=this._view;return!!e&&Math.pow(t-e.y,2)<Math.pow(e.radius+e.hitRadius,2)}var i=t.helpers,a=t.defaults.global,o=a.defaultColor;a.elements.point={radius:3,pointStyle:"circle",backgroundColor:o,borderWidth:1,borderColor:o,hitRadius:1,hoverRadius:4,hoverBorderWidth:1},t.elements.Point=t.Element.extend({inRange:function(t,e){var n=this._view;return!!n&&Math.pow(t-n.x,2)+Math.pow(e-n.y,2)<Math.pow(n.hitRadius+n.radius,2)},inLabelRange:e,inXRange:e,inYRange:n,getCenterPoint:function(){var t=this._view;return{x:t.x,y:t.y}},getArea:function(){return Math.PI*Math.pow(this._view.radius,2)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y,padding:t.radius+t.borderWidth}},draw:function(e){var n=this._view,r=this._model,l=this._chart.ctx,s=n.pointStyle,u=n.radius,d=n.x,c=n.y,h=t.helpers.color,f=1.01,g=0;n.skip||(l.strokeStyle=n.borderColor||o,l.lineWidth=i.getValueOrDefault(n.borderWidth,a.elements.point.borderWidth),l.fillStyle=n.backgroundColor||o,void 0!==e&&(r.x<e.left||e.right*f<r.x||r.y<e.top||e.bottom*f<r.y)&&(r.x<e.left?g=(d-r.x)/(e.left-r.x):e.right*f<r.x?g=(r.x-d)/(r.x-e.right):r.y<e.top?g=(c-r.y)/(e.top-r.y):e.bottom*f<r.y&&(g=(r.y-c)/(r.y-e.bottom)),g=Math.round(100*g)/100,l.strokeStyle=h(l.strokeStyle).alpha(g).rgbString(),l.fillStyle=h(l.fillStyle).alpha(g).rgbString()),t.canvasHelpers.drawPoint(l,s,u,d,c))}})}},{}],38:[function(t,e,n){"use strict";e.exports=function(t){function e(t){return void 0!==t._view.width}function n(t){var n,i,a,o,r=t._view;if(e(t)){var l=r.width/2;n=r.x-l,i=r.x+l,a=Math.min(r.y,r.base),o=Math.max(r.y,r.base)}else{var s=r.height/2;n=Math.min(r.x,r.base),i=Math.max(r.x,r.base),a=r.y-s,o=r.y+s}return{left:n,top:a,right:i,bottom:o}}var i=t.defaults.global;i.elements.rectangle={backgroundColor:i.defaultColor,borderWidth:0,borderColor:i.defaultColor,borderSkipped:"bottom"},t.elements.Rectangle=t.Element.extend({draw:function(){function t(t){return v[(x+t)%4]}var e,n,i,a,o,r,l,s=this._chart.ctx,u=this._view,d=u.borderWidth;if(u.horizontal?(e=u.base,n=u.x,i=u.y-u.height/2,a=u.y+u.height/2,o=n>e?1:-1,r=1,l=u.borderSkipped||"left"):(e=u.x-u.width/2,n=u.x+u.width/2,i=u.y,a=u.base,o=1,r=a>i?1:-1,l=u.borderSkipped||"bottom"),d){var c=Math.min(Math.abs(e-n),Math.abs(i-a));d=d>c?c:d;var h=d/2,f=e+("left"!==l?h*o:0),g=n+("right"!==l?-h*o:0),p=i+("top"!==l?h*r:0),m=a+("bottom"!==l?-h*r:0);f!==g&&(i=p,a=m),p!==m&&(e=f,n=g)}s.beginPath(),s.fillStyle=u.backgroundColor,s.strokeStyle=u.borderColor,s.lineWidth=d;var v=[[e,a],[e,i],[n,i],[n,a]],b=["bottom","left","top","right"],x=b.indexOf(l,0);x===-1&&(x=0);var y=t(0);s.moveTo(y[0],y[1]);for(var k=1;k<4;k++)y=t(k),s.lineTo(y[0],y[1]);s.fill(),d&&s.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var i=!1;if(this._view){var a=n(this);i=t>=a.left&&t<=a.right&&e>=a.top&&e<=a.bottom}return i},inLabelRange:function(t,i){var a=this;if(!a._view)return!1;var o=!1,r=n(a);return o=e(a)?t>=r.left&&t<=r.right:i>=r.top&&i<=r.bottom},inXRange:function(t){var e=n(this);return t>=e.left&&t<=e.right},inYRange:function(t){var e=n(this);return t>=e.top&&t<=e.bottom},getCenterPoint:function(){var t,n,i=this._view;return e(this)?(t=i.x,n=(i.y+i.base)/2):(t=(i.x+i.base)/2,n=i.y),{x:t,y:n}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})}},{}],39:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){var n=s.getStyle(t,e),i=n&&n.match(/^(\d+)(\.\d+)?px$/);return i?Number(i[1]):void 0}function n(t,n){var i=t.style,a=t.getAttribute("height"),o=t.getAttribute("width");if(t._chartjs={initial:{height:a,width:o,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===o||""===o){var r=e(t,"width");void 0!==r&&(t.width=r)}if(null===a||""===a)if(""===t.style.height)t.height=t.width/(n.options.aspectRatio||2);else{var l=e(t,"height");void 0!==r&&(t.height=l)}return t}function i(t,e,n,i,a){return{type:t,chart:e,native:a||null,x:void 0!==n?n:null,y:void 0!==i?i:null}}function a(t,e){var n=u[t.type]||t.type,a=s.getRelativePosition(t,e);return i(n,e,a.x,a.y,t)}function o(t){var e=document.createElement("iframe");return e.className="chartjs-hidden-iframe",e.style.cssText="display:block;overflow:hidden;border:0;margin:0;top:0;left:0;bottom:0;right:0;height:100%;width:100%;position:absolute;pointer-events:none;z-index:-1;",e.tabIndex=-1,s.addEvent(e,"load",function(){s.addEvent(e.contentWindow||e,"resize",t),t()}),e}function r(t,e,n){var a=t._chartjs={ticking:!1},r=function(){a.ticking||(a.ticking=!0,s.requestAnimFrame.call(window,function(){if(a.resizer)return a.ticking=!1,e(i("resize",n))}))};a.resizer=o(r),t.insertBefore(a.resizer,t.firstChild)}function l(t){if(t&&t._chartjs){var e=t._chartjs.resizer;e&&(e.parentNode.removeChild(e),t._chartjs.resizer=null),delete t._chartjs}}var s=t.helpers,u={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"};return{acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(n(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e._chartjs){var n=e._chartjs.initial;["height","width"].forEach(function(t){var i=n[t];void 0===i||null===i?e.removeAttribute(t):e.setAttribute(t,i)}),s.each(n.style||{},function(t,n){e.style[n]=t}),e.width=e.width,delete e._chartjs}},addEventListener:function(t,e,n){var i=t.canvas;if("resize"===e)return void r(i.parentNode,n,t);var o=n._chartjs||(n._chartjs={}),l=o.proxies||(o.proxies={}),u=l[t.id+"_"+e]=function(e){n(a(e,t))};s.addEvent(i,e,u)},removeEventListener:function(t,e,n){var i=t.canvas;if("resize"===e)return void l(i.parentNode,n);var a=n._chartjs||{},o=a.proxies||{},r=o[t.id+"_"+e];r&&s.removeEvent(i,e,r)}}}},{}],40:[function(t,e,n){"use strict";var i=t(39);e.exports=function(t){t.platform={acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},t.helpers.extend(t.platform,i(t))}},{39:39}],41:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e,n){var i,a=t._model||{},o=a.fill;if(void 0===o&&(o=!!a.backgroundColor),o===!1||null===o)return!1;if(o===!0)return"origin";if(i=parseFloat(o,10),isFinite(i)&&Math.floor(i)===i)return"-"!==o[0]&&"+"!==o[0]||(i=e+i),!(i===e||i<0||i>=n)&&i;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function n(t){var e,n=t.el._model||{},i=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===n.scaleBottom?i.bottom:n.scaleBottom:"end"===a?o=void 0===n.scaleTop?i.top:n.scaleTop:void 0!==n.scaleZero?o=n.scaleZero:i.getBasePosition?o=i.getBasePosition():i.getBasePixel&&(o=i.getBasePixel()),void 0!==o&&null!==o){if(void 0!==o.x&&void 0!==o.y)return o;if("number"==typeof o&&isFinite(o))return e=i.isHorizontal(),{x:e?o:null,y:e?null:o}}return null}function i(t,e,n){var i,a=t[e],o=a.fill,r=[e];if(!n)return o;for(;o!==!1&&r.indexOf(o)===-1;){if(!isFinite(o))return o;if(i=t[o],!i)return!1;if(i.visible)return o;r.push(o),o=i.fill}return!1}function a(t){var e=t.fill,n="dataset";return e===!1?null:(isFinite(e)||(n="boundary"),d[n](t))}function o(t){return t&&!t.skip}function r(t,e,n,i,a){var o;if(i&&a){for(t.moveTo(e[0].x,e[0].y),o=1;o<i;++o)u.canvas.lineTo(t,e[o-1],e[o]);for(t.lineTo(n[a-1].x,n[a-1].y),o=a-1;o>0;--o)u.canvas.lineTo(t,n[o],n[o-1],!0)}}function l(t,e,n,i,a,l){var s,u,d,c,h,f,g,p=e.length,m=i.spanGaps,v=[],b=[],x=0,y=0;for(t.beginPath(),s=0,u=p+!!l;s<u;++s)d=s%p,c=e[d]._view,h=n(c,d,i),f=o(c),g=o(h),f&&g?(x=v.push(c),y=b.push(h)):x&&y&&(m?(f&&v.push(c),g&&b.push(h)):(r(t,v,b,x,y),x=y=0,v=[],b=[]));r(t,v,b,x,y),t.closePath(),t.fillStyle=a,t.fill()}t.defaults.global.plugins.filler={propagate:!0};var s=t.defaults,u=t.helpers,d={dataset:function(t){var e=t.fill,n=t.chart,i=n.getDatasetMeta(e),a=i&&n.isDatasetVisible(e),o=a&&i.dataset._children||[];return o.length?function(t,e){return o[e]._view||null}:null},boundary:function(t){var e=t.boundary,n=e?e.x:null,i=e?e.y:null;return function(t){return{x:null===n?t.x:n,y:null===i?t.y:i}}}};return{id:"filler",afterDatasetsUpdate:function(o,r){var l,s,u,d,c=(o.data.datasets||[]).length,h=r.propagate,f=[];for(s=0;s<c;++s)l=o.getDatasetMeta(s),u=l.dataset,d=null,u&&u._model&&u instanceof t.elements.Line&&(d={visible:o.isDatasetVisible(s),fill:e(u,s,c),chart:o,el:u}),l.$filler=d,f.push(d);for(s=0;s<c;++s)d=f[s],d&&(d.fill=i(f,s,h),d.boundary=n(d),d.mapper=a(d))},beforeDatasetDraw:function(t,e){var n=e.meta.$filler;if(n){var i=n.el,a=i._view,o=i._children||[],r=n.mapper,u=a.backgroundColor||s.global.defaultColor;r&&u&&o.length&&l(t.ctx,o,r,a,u,i._loop)}}}}},{}],42:[function(t,e,n){"use strict";e.exports=function(t){function e(t,e){return t.usePointStyle?e*Math.SQRT2:t.boxWidth}function n(e,n){var i=new t.Legend({ctx:e.ctx,options:n,chart:e});a.configure(e,i,n),a.addBox(e,i),e.legend=i}var i=t.helpers,a=t.layoutService,o=i.noop;return t.defaults.global.legend={display:!0,position:"top",fullWidth:!0,reverse:!1,weight:1e3,onClick:function(t,e){var n=e.datasetIndex,i=this.chart,a=i.getDatasetMeta(n);a.hidden=null===a.hidden?!i.data.datasets[n].hidden:null,i.update()},onHover:null,labels:{boxWidth:40,padding:10,generateLabels:function(t){var e=t.data;return i.isArray(e.datasets)?e.datasets.map(function(e,n){return{text:e.label,fillStyle:i.isArray(e.backgroundColor)?e.backgroundColor[0]:e.backgroundColor,hidden:!t.isDatasetVisible(n),lineCap:e.borderCapStyle,lineDash:e.borderDash,lineDashOffset:e.borderDashOffset,lineJoin:e.borderJoinStyle,lineWidth:e.borderWidth,strokeStyle:e.borderColor,pointStyle:e.pointStyle,datasetIndex:n}},this):[]}}},t.Legend=t.Element.extend({initialize:function(t){i.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:o,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:o,beforeSetDimensions:o,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:o,beforeBuildLabels:o,buildLabels:function(){var t=this,e=t.options.labels,n=e.generateLabels.call(t,t.chart);e.filter&&(n=n.filter(function(n){return e.filter(n,t.chart.data)})),t.options.reverse&&n.reverse(),t.legendItems=n},afterBuildLabels:o,beforeFit:o,fit:function(){var n=this,a=n.options,o=a.labels,r=a.display,l=n.ctx,s=t.defaults.global,u=i.getValueOrDefault,d=u(o.fontSize,s.defaultFontSize),c=u(o.fontStyle,s.defaultFontStyle),h=u(o.fontFamily,s.defaultFontFamily),f=i.fontString(d,c,h),g=n.legendHitBoxes=[],p=n.minSize,m=n.isHorizontal();if(m?(p.width=n.maxWidth,p.height=r?10:0):(p.width=r?10:0,p.height=n.maxHeight),r)if(l.font=f,m){var v=n.lineWidths=[0],b=n.legendItems.length?d+o.padding:0;l.textAlign="left",l.textBaseline="top",i.each(n.legendItems,function(t,i){var a=e(o,d),r=a+d/2+l.measureText(t.text).width;v[v.length-1]+r+o.padding>=n.width&&(b+=d+o.padding,v[v.length]=n.left),g[i]={left:0,top:0,width:r,height:d},v[v.length-1]+=r+o.padding}),p.height+=b}else{var x=o.padding,y=n.columnWidths=[],k=o.padding,w=0,M=0,S=d+x;i.each(n.legendItems,function(t,n){var i=e(o,d),a=i+d/2+l.measureText(t.text).width;M+S>p.height&&(k+=w+o.padding,y.push(w),w=0,M=0),w=Math.max(w,a),M+=S,g[n]={left:0,top:0,width:a,height:d}}),k+=w,y.push(w),p.width+=k}n.width=p.width,n.height=p.height},afterFit:o,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var n=this,a=n.options,o=a.labels,r=t.defaults.global,l=r.elements.line,s=n.width,u=n.lineWidths;if(a.display){var d,c=n.ctx,h=i.getValueOrDefault,f=h(o.fontColor,r.defaultFontColor),g=h(o.fontSize,r.defaultFontSize),p=h(o.fontStyle,r.defaultFontStyle),m=h(o.fontFamily,r.defaultFontFamily),v=i.fontString(g,p,m);c.textAlign="left",c.textBaseline="top",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=v;var b=e(o,g),x=n.legendHitBoxes,y=function(e,n,i){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(i.fillStyle,r.defaultColor),c.lineCap=h(i.lineCap,l.borderCapStyle),c.lineDashOffset=h(i.lineDashOffset,l.borderDashOffset),c.lineJoin=h(i.lineJoin,l.borderJoinStyle),c.lineWidth=h(i.lineWidth,l.borderWidth),c.strokeStyle=h(i.strokeStyle,r.defaultColor);var o=0===h(i.lineWidth,l.borderWidth);if(c.setLineDash&&c.setLineDash(h(i.lineDash,l.borderDash)),a.labels&&a.labels.usePointStyle){var s=g*Math.SQRT2/2,u=s/Math.SQRT2,d=e+u,f=n+u;t.canvasHelpers.drawPoint(c,i.pointStyle,s,d,f)}else o||c.strokeRect(e,n,b,g),c.fillRect(e,n,b,g);c.restore()}},k=function(t,e,n,i){c.fillText(n.text,b+g/2+t,e),n.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(b+g/2+t,e+g/2),c.lineTo(b+g/2+t+i,e+g/2),c.stroke())},w=n.isHorizontal();d=w?{x:n.left+(s-u[0])/2,y:n.top+o.padding,line:0}:{x:n.left+o.padding,y:n.top+o.padding,line:0};var M=g+o.padding;i.each(n.legendItems,function(t,e){var i=c.measureText(t.text).width,a=b+g/2+i,r=d.x,l=d.y;w?r+a>=s&&(l=d.y+=M,d.line++,r=d.x=n.left+(s-u[d.line])/2):l+M>n.bottom&&(r=d.x=r+n.columnWidths[d.line]+o.padding,l=d.y=n.top+o.padding,d.line++),y(r,l,t),x[e].left=r,x[e].top=l,k(r,l,t,i),w?d.x+=a+o.padding:d.y+=M})}},handleEvent:function(t){var e=this,n=e.options,i="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===i){if(!n.onHover)return}else{if("click"!==i)return;if(!n.onClick)return}var o=t.x,r=t.y;if(o>=e.left&&o<=e.right&&r>=e.top&&r<=e.bottom)for(var l=e.legendHitBoxes,s=0;s<l.length;++s){var u=l[s];if(o>=u.left&&o<=u.left+u.width&&r>=u.top&&r<=u.top+u.height){if("click"===i){n.onClick.call(e,t.native,e.legendItems[s]),a=!0;break}if("mousemove"===i){n.onHover.call(e,t.native,e.legendItems[s]),a=!0;break}}}return a}}),{id:"legend",beforeInit:function(t){var e=t.options.legend;e&&n(t,e)},beforeUpdate:function(e){var o=e.options.legend,r=e.legend;o?(o=i.configMerge(t.defaults.global.legend,o),r?(a.configure(e,r,o),r.options=o):n(e,o)):r&&(a.removeBox(e,r),delete e.legend)},afterEvent:function(t,e){var n=t.legend;n&&n.handleEvent(e)}}}},{}],43:[function(t,e,n){"use strict";e.exports=function(t){function e(e,n){var a=new t.Title({ctx:e.ctx,options:n,chart:e});i.configure(e,a,n),i.addBox(e,a),e.titleBlock=a}var n=t.helpers,i=t.layoutService,a=n.noop;return t.defaults.global.title={display:!1,position:"top",fullWidth:!0,weight:2e3,fontStyle:"bold",padding:10,text:""},t.Title=t.Element.extend({initialize:function(t){var e=this;n.extend(e,t),e.legendHitBoxes=[];
-},beforeUpdate:a,update:function(t,e,n){var i=this;return i.beforeUpdate(),i.maxWidth=t,i.maxHeight=e,i.margins=n,i.beforeSetDimensions(),i.setDimensions(),i.afterSetDimensions(),i.beforeBuildLabels(),i.buildLabels(),i.afterBuildLabels(),i.beforeFit(),i.fit(),i.afterFit(),i.afterUpdate(),i.minSize},afterUpdate:a,beforeSetDimensions:a,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:a,beforeBuildLabels:a,buildLabels:a,afterBuildLabels:a,beforeFit:a,fit:function(){var e=this,i=n.getValueOrDefault,a=e.options,o=t.defaults.global,r=a.display,l=i(a.fontSize,o.defaultFontSize),s=e.minSize;e.isHorizontal()?(s.width=e.maxWidth,s.height=r?l+2*a.padding:0):(s.width=r?l+2*a.padding:0,s.height=e.maxHeight),e.width=s.width,e.height=s.height},afterFit:a,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var e=this,i=e.ctx,a=n.getValueOrDefault,o=e.options,r=t.defaults.global;if(o.display){var l,s,u,d=a(o.fontSize,r.defaultFontSize),c=a(o.fontStyle,r.defaultFontStyle),h=a(o.fontFamily,r.defaultFontFamily),f=n.fontString(d,c,h),g=0,p=e.top,m=e.left,v=e.bottom,b=e.right;i.fillStyle=a(o.fontColor,r.defaultFontColor),i.font=f,e.isHorizontal()?(l=m+(b-m)/2,s=p+(v-p)/2,u=b-m):(l="left"===o.position?m+d/2:b-d/2,s=p+(v-p)/2,u=v-p,g=Math.PI*("left"===o.position?-.5:.5)),i.save(),i.translate(l,s),i.rotate(g),i.textAlign="center",i.textBaseline="middle",i.fillText(o.text,0,0,u),i.restore()}}}),{id:"title",beforeInit:function(t){var n=t.options.title;n&&e(t,n)},beforeUpdate:function(a){var o=a.options.title,r=a.titleBlock;o?(o=n.configMerge(t.defaults.global.title,o),r?(i.configure(a,r,o),r.options=o):e(a,o)):r&&(t.layoutService.removeBox(a,r),delete a.titleBlock)}}}},{}],44:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"bottom"},i=t.Scale.extend({getLabels:function(){var t=this.chart.data;return(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels},determineDataLimits:function(){var t=this,n=t.getLabels();t.minIndex=0,t.maxIndex=n.length-1;var i;void 0!==t.options.ticks.min&&(i=e.indexOf(n,t.options.ticks.min),t.minIndex=i!==-1?i:t.minIndex),void 0!==t.options.ticks.max&&(i=e.indexOf(n,t.options.ticks.max),t.maxIndex=i!==-1?i:t.maxIndex),t.min=n[t.minIndex],t.max=n[t.maxIndex]},buildTicks:function(){var t=this,e=t.getLabels();t.ticks=0===t.minIndex&&t.maxIndex===e.length-1?e:e.slice(t.minIndex,t.maxIndex+1)},getLabelForIndex:function(t,e){var n=this,i=n.chart.data,a=n.isHorizontal();return i.yLabels&&!a?n.getRightValue(i.datasets[e].data[t]):n.ticks[t-n.minIndex]},getPixelForValue:function(t,e,n,i){var a,o=this,r=Math.max(o.maxIndex+1-o.minIndex-(o.options.gridLines.offsetGridLines?0:1),1);if(void 0!==t&&null!==t&&(a=o.isHorizontal()?t.x:t.y),void 0!==a||void 0!==t&&isNaN(e)){var l=o.getLabels();t=a||t;var s=l.indexOf(t);e=s!==-1?s:e}if(o.isHorizontal()){var u=o.width/r,d=u*(e-o.minIndex);return(o.options.gridLines.offsetGridLines&&i||o.maxIndex===o.minIndex&&i)&&(d+=u/2),o.left+Math.round(d)}var c=o.height/r,h=c*(e-o.minIndex);return o.options.gridLines.offsetGridLines&&i&&(h+=c/2),o.top+Math.round(h)},getPixelForTick:function(t,e){return this.getPixelForValue(this.ticks[t],t+this.minIndex,null,e)},getValueForPixel:function(t){var e,n=this,i=Math.max(n.ticks.length-(n.options.gridLines.offsetGridLines?0:1),1),a=n.isHorizontal(),o=(a?n.width:n.height)/i;return t-=a?n.left:n.top,n.options.gridLines.offsetGridLines&&(t-=o/2),e=t<=0?0:Math.round(t/o)},getBasePixel:function(){return this.bottom}});t.scaleService.registerScaleType("category",i,n)}},{}],45:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"left",ticks:{callback:t.Ticks.formatters.linear}},i=t.LinearScaleBase.extend({determineDataLimits:function(){function t(t){return l?t.xAxisID===n.id:t.yAxisID===n.id}var n=this,i=n.options,a=n.chart,o=a.data,r=o.datasets,l=n.isHorizontal(),s=0,u=1;n.min=null,n.max=null;var d=i.stacked;if(void 0===d&&e.each(r,function(e,n){if(!d){var i=a.getDatasetMeta(n);a.isDatasetVisible(n)&&t(i)&&void 0!==i.stack&&(d=!0)}}),i.stacked||d){var c={};e.each(r,function(o,r){var l=a.getDatasetMeta(r),s=[l.type,void 0===i.stacked&&void 0===l.stack?r:"",l.stack].join(".");void 0===c[s]&&(c[s]={positiveValues:[],negativeValues:[]});var u=c[s].positiveValues,d=c[s].negativeValues;a.isDatasetVisible(r)&&t(l)&&e.each(o.data,function(t,e){var a=+n.getRightValue(t);isNaN(a)||l.data[e].hidden||(u[e]=u[e]||0,d[e]=d[e]||0,i.relativePoints?u[e]=100:a<0?d[e]+=a:u[e]+=a)})}),e.each(c,function(t){var i=t.positiveValues.concat(t.negativeValues),a=e.min(i),o=e.max(i);n.min=null===n.min?a:Math.min(n.min,a),n.max=null===n.max?o:Math.max(n.max,o)})}else e.each(r,function(i,o){var r=a.getDatasetMeta(o);a.isDatasetVisible(o)&&t(r)&&e.each(i.data,function(t,e){var i=+n.getRightValue(t);isNaN(i)||r.data[e].hidden||(null===n.min?n.min=i:i<n.min&&(n.min=i),null===n.max?n.max=i:i>n.max&&(n.max=i))})});n.min=isFinite(n.min)?n.min:s,n.max=isFinite(n.max)?n.max:u,this.handleTickRangeOptions()},getTickLimit:function(){var n,i=this,a=i.options.ticks;if(i.isHorizontal())n=Math.min(a.maxTicksLimit?a.maxTicksLimit:11,Math.ceil(i.width/50));else{var o=e.getValueOrDefault(a.fontSize,t.defaults.global.defaultFontSize);n=Math.min(a.maxTicksLimit?a.maxTicksLimit:11,Math.ceil(i.height/(2*o)))}return n},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e,n=this,i=n.start,a=+n.getRightValue(t),o=n.end-i;return n.isHorizontal()?(e=n.left+n.width/o*(a-i),Math.round(e)):(e=n.bottom-n.height/o*(a-i),Math.round(e))},getValueForPixel:function(t){var e=this,n=e.isHorizontal(),i=n?e.width:e.height,a=(n?t-e.left:e.bottom-t)/i;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType("linear",i,n)}},{}],46:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n=e.noop;t.LinearScaleBase=t.Scale.extend({handleTickRangeOptions:function(){var t=this,n=t.options,i=n.ticks;if(i.beginAtZero){var a=e.sign(t.min),o=e.sign(t.max);a<0&&o<0?t.max=0:a>0&&o>0&&(t.min=0)}void 0!==i.min?t.min=i.min:void 0!==i.suggestedMin&&(null===t.min?t.min=i.suggestedMin:t.min=Math.min(t.min,i.suggestedMin)),void 0!==i.max?t.max=i.max:void 0!==i.suggestedMax&&(null===t.max?t.max=i.suggestedMax:t.max=Math.max(t.max,i.suggestedMax)),t.min===t.max&&(t.max++,i.beginAtZero||t.min--)},getTickLimit:n,handleDirectionalChanges:n,buildTicks:function(){var n=this,i=n.options,a=i.ticks,o=n.getTickLimit();o=Math.max(2,o);var r={maxTicks:o,min:a.min,max:a.max,stepSize:e.getValueOrDefault(a.fixedStepSize,a.stepSize)},l=n.ticks=t.Ticks.generators.linear(r,n);n.handleDirectionalChanges(),n.max=e.max(l),n.min=e.min(l),a.reverse?(l.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){var e=this;e.ticksAsNumbers=e.ticks.slice(),e.zeroLineIndex=e.ticks.indexOf(0),t.Scale.prototype.convertTicksToLabels.call(e)}})}},{}],47:[function(t,e,n){"use strict";e.exports=function(t){var e=t.helpers,n={position:"left",ticks:{callback:t.Ticks.formatters.logarithmic}},i=t.Scale.extend({determineDataLimits:function(){function t(t){return u?t.xAxisID===n.id:t.yAxisID===n.id}var n=this,i=n.options,a=i.ticks,o=n.chart,r=o.data,l=r.datasets,s=e.getValueOrDefault,u=n.isHorizontal();n.min=null,n.max=null,n.minNotZero=null;var d=i.stacked;if(void 0===d&&e.each(l,function(e,n){if(!d){var i=o.getDatasetMeta(n);o.isDatasetVisible(n)&&t(i)&&void 0!==i.stack&&(d=!0)}}),i.stacked||d){var c={};e.each(l,function(a,r){var l=o.getDatasetMeta(r),s=[l.type,void 0===i.stacked&&void 0===l.stack?r:"",l.stack].join(".");o.isDatasetVisible(r)&&t(l)&&(void 0===c[s]&&(c[s]=[]),e.each(a.data,function(t,e){var a=c[s],o=+n.getRightValue(t);isNaN(o)||l.data[e].hidden||(a[e]=a[e]||0,i.relativePoints?a[e]=100:a[e]+=o)}))}),e.each(c,function(t){var i=e.min(t),a=e.max(t);n.min=null===n.min?i:Math.min(n.min,i),n.max=null===n.max?a:Math.max(n.max,a)})}else e.each(l,function(i,a){var r=o.getDatasetMeta(a);o.isDatasetVisible(a)&&t(r)&&e.each(i.data,function(t,e){var i=+n.getRightValue(t);isNaN(i)||r.data[e].hidden||(null===n.min?n.min=i:i<n.min&&(n.min=i),null===n.max?n.max=i:i>n.max&&(n.max=i),0!==i&&(null===n.minNotZero||i<n.minNotZero)&&(n.minNotZero=i))})});n.min=s(a.min,n.min),n.max=s(a.max,n.max),n.min===n.max&&(0!==n.min&&null!==n.min?(n.min=Math.pow(10,Math.floor(e.log10(n.min))-1),n.max=Math.pow(10,Math.floor(e.log10(n.max))+1)):(n.min=1,n.max=10))},buildTicks:function(){var n=this,i=n.options,a=i.ticks,o={min:a.min,max:a.max},r=n.ticks=t.Ticks.generators.logarithmic(o,n);n.isHorizontal()||r.reverse(),n.max=e.max(r),n.min=e.min(r),a.reverse?(r.reverse(),n.start=n.max,n.end=n.min):(n.start=n.min,n.end=n.max)},convertTicksToLabels:function(){this.tickValues=this.ticks.slice(),t.Scale.prototype.convertTicksToLabels.call(this)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForTick:function(t){return this.getPixelForValue(this.tickValues[t])},getPixelForValue:function(t){var n,i,a,o=this,r=o.start,l=+o.getRightValue(t),s=o.options,u=s.ticks;return o.isHorizontal()?(a=e.log10(o.end)-e.log10(r),0===l?i=o.left:(n=o.width,i=o.left+n/a*(e.log10(l)-e.log10(r)))):(n=o.height,0!==r||u.reverse?0===o.end&&u.reverse?(a=e.log10(o.start)-e.log10(o.minNotZero),i=l===o.end?o.top:l===o.minNotZero?o.top+.02*n:o.top+.02*n+.98*n/a*(e.log10(l)-e.log10(o.minNotZero))):0===l?i=u.reverse?o.top:o.bottom:(a=e.log10(o.end)-e.log10(r),n=o.height,i=o.bottom-n/a*(e.log10(l)-e.log10(r))):(a=e.log10(o.end)-e.log10(o.minNotZero),i=l===r?o.bottom:l===o.minNotZero?o.bottom-.02*n:o.bottom-.02*n-.98*n/a*(e.log10(l)-e.log10(o.minNotZero)))),i},getValueForPixel:function(t){var n,i,a=this,o=e.log10(a.end)-e.log10(a.start);return a.isHorizontal()?(i=a.width,n=a.start*Math.pow(10,(t-a.left)*o/i)):(i=a.height,n=Math.pow(10,(a.bottom-t)*o/i)/a.start),n}});t.scaleService.registerScaleType("logarithmic",i,n)}},{}],48:[function(t,e,n){"use strict";e.exports=function(t){function e(t){var e=t.options;return e.angleLines.display||e.pointLabels.display?t.chart.data.labels.length:0}function n(t){var e=t.options.pointLabels,n=f.getValueOrDefault(e.fontSize,g.defaultFontSize),i=f.getValueOrDefault(e.fontStyle,g.defaultFontStyle),a=f.getValueOrDefault(e.fontFamily,g.defaultFontFamily),o=f.fontString(n,i,a);return{size:n,style:i,family:a,font:o}}function i(t,e,n){return f.isArray(n)?{w:f.longestText(t,t.font,n),h:n.length*e+1.5*(n.length-1)*e}:{w:t.measureText(n).width,h:e}}function a(t,e,n,i,a){return t===i||t===a?{start:e-n/2,end:e+n/2}:t<i||t>a?{start:e-n-5,end:e}:{start:e,end:e+n+5}}function o(t){var o,r,l,s=n(t),u=Math.min(t.height/2,t.width/2),d={r:t.width,l:0,t:t.height,b:0},c={};t.ctx.font=s.font,t._pointLabelSizes=[];var h=e(t);for(o=0;o<h;o++){l=t.getPointPosition(o,u),r=i(t.ctx,s.size,t.pointLabels[o]||""),t._pointLabelSizes[o]=r;var g=t.getIndexAngle(o),p=f.toDegrees(g)%360,m=a(p,l.x,r.w,0,180),v=a(p,l.y,r.h,90,270);m.start<d.l&&(d.l=m.start,c.l=g),m.end>d.r&&(d.r=m.end,c.r=g),v.start<d.t&&(d.t=v.start,c.t=g),v.end>d.b&&(d.b=v.end,c.b=g)}t.setReductions(u,d,c)}function r(t){var e=Math.min(t.height/2,t.width/2);t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0)}function l(t){return 0===t||180===t?"center":t<180?"left":"right"}function s(t,e,n,i){if(f.isArray(e))for(var a=n.y,o=1.5*i,r=0;r<e.length;++r)t.fillText(e[r],n.x,a),a+=o;else t.fillText(e,n.x,n.y)}function u(t,e,n){90===t||270===t?n.y-=e.h/2:(t>270||t<90)&&(n.y-=e.h)}function d(t){var i=t.ctx,a=f.getValueOrDefault,o=t.options,r=o.angleLines,d=o.pointLabels;i.lineWidth=r.lineWidth,i.strokeStyle=r.color;var c=t.getDistanceFromCenterForValue(o.reverse?t.min:t.max),h=n(t);i.textBaseline="top";for(var p=e(t)-1;p>=0;p--){if(r.display){var m=t.getPointPosition(p,c);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(m.x,m.y),i.stroke(),i.closePath()}if(d.display){var v=t.getPointPosition(p,c+5),b=a(d.fontColor,g.defaultFontColor);i.font=h.font,i.fillStyle=b;var x=t.getIndexAngle(p),y=f.toDegrees(x);i.textAlign=l(y),u(y,t._pointLabelSizes[p],v),s(i,t.pointLabels[p]||"",v,h.size)}}}function c(t,n,i,a){var o=t.ctx;if(o.strokeStyle=f.getValueAtIndexOrDefault(n.color,a-1),o.lineWidth=f.getValueAtIndexOrDefault(n.lineWidth,a-1),t.options.gridLines.circular)o.beginPath(),o.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),o.closePath(),o.stroke();else{var r=e(t);if(0===r)return;o.beginPath();var l=t.getPointPosition(0,i);o.moveTo(l.x,l.y);for(var s=1;s<r;s++)l=t.getPointPosition(s,i),o.lineTo(l.x,l.y);o.closePath(),o.stroke()}}function h(t){return f.isNumber(t)?t:0}var f=t.helpers,g=t.defaults.global,p={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,color:"rgba(0, 0, 0, 0.1)",lineWidth:1},gridLines:{circular:!1},ticks:{showLabelBackdrop:!0,backdropColor:"rgba(255,255,255,0.75)",backdropPaddingY:2,backdropPaddingX:2,callback:t.Ticks.formatters.linear},pointLabels:{display:!0,fontSize:10,callback:function(t){return t}}},m=t.LinearScaleBase.extend({setDimensions:function(){var t=this,e=t.options,n=e.ticks;t.width=t.maxWidth,t.height=t.maxHeight,t.xCenter=Math.round(t.width/2),t.yCenter=Math.round(t.height/2);var i=f.min([t.height,t.width]),a=f.getValueOrDefault(n.fontSize,g.defaultFontSize);t.drawingArea=e.display?i/2-(a/2+n.backdropPaddingY):i/2},determineDataLimits:function(){var t=this,e=t.chart,n=Number.POSITIVE_INFINITY,i=Number.NEGATIVE_INFINITY;f.each(e.data.datasets,function(a,o){if(e.isDatasetVisible(o)){var r=e.getDatasetMeta(o);f.each(a.data,function(e,a){var o=+t.getRightValue(e);isNaN(o)||r.data[a].hidden||(n=Math.min(o,n),i=Math.max(o,i))})}}),t.min=n===Number.POSITIVE_INFINITY?0:n,t.max=i===Number.NEGATIVE_INFINITY?0:i,t.handleTickRangeOptions()},getTickLimit:function(){var t=this.options.ticks,e=f.getValueOrDefault(t.fontSize,g.defaultFontSize);return Math.min(t.maxTicksLimit?t.maxTicksLimit:11,Math.ceil(this.drawingArea/(1.5*e)))},convertTicksToLabels:function(){var e=this;t.LinearScaleBase.prototype.convertTicksToLabels.call(e),e.pointLabels=e.chart.data.labels.map(e.options.pointLabels.callback,e)},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},fit:function(){this.options.pointLabels.display?o(this):r(this)},setReductions:function(t,e,n){var i=this,a=e.l/Math.sin(n.l),o=Math.max(e.r-i.width,0)/Math.sin(n.r),r=-e.t/Math.cos(n.t),l=-Math.max(e.b-i.height,0)/Math.cos(n.b);a=h(a),o=h(o),r=h(r),l=h(l),i.drawingArea=Math.min(Math.round(t-(a+o)/2),Math.round(t-(r+l)/2)),i.setCenterPoint(a,o,r,l)},setCenterPoint:function(t,e,n,i){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,l=n+a.drawingArea,s=a.height-i-a.drawingArea;a.xCenter=Math.round((r+o)/2+a.left),a.yCenter=Math.round((l+s)/2+a.top)},getIndexAngle:function(t){var n=2*Math.PI/e(this),i=this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0,a=i*Math.PI*2/360;return t*n+a},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var n=e.drawingArea/(e.max-e.min);return e.options.reverse?(e.max-t)*n:(t-e.min)*n},getPointPosition:function(t,e){var n=this,i=n.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+n.xCenter,y:Math.round(Math.sin(i)*e)+n.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this,e=t.min,n=t.max;return t.getPointPositionForValue(0,t.beginAtZero?0:e<0&&n<0?n:e>0&&n>0?e:0)},draw:function(){var t=this,e=t.options,n=e.gridLines,i=e.ticks,a=f.getValueOrDefault;if(e.display){var o=t.ctx,r=a(i.fontSize,g.defaultFontSize),l=a(i.fontStyle,g.defaultFontStyle),s=a(i.fontFamily,g.defaultFontFamily),u=f.fontString(r,l,s);f.each(t.ticks,function(l,s){if(s>0||e.reverse){var d=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]),h=t.yCenter-d;if(n.display&&0!==s&&c(t,n,d,s),i.display){var f=a(i.fontColor,g.defaultFontColor);if(o.font=u,i.showLabelBackdrop){var p=o.measureText(l).width;o.fillStyle=i.backdropColor,o.fillRect(t.xCenter-p/2-i.backdropPaddingX,h-r/2-i.backdropPaddingY,p+2*i.backdropPaddingX,r+2*i.backdropPaddingY)}o.textAlign="center",o.textBaseline="middle",o.fillStyle=f,o.fillText(l,t.xCenter,h)}}}),(e.angleLines.display||e.pointLabels.display)&&d(t)}}});t.scaleService.registerScaleType("radialLinear",m,p)}},{}],49:[function(t,e,n){"use strict";var i=t(1);i="function"==typeof i?i:window.moment,e.exports=function(t){function e(t,e){var n=t.options.time;if("string"==typeof n.parser)return i(e,n.parser);if("function"==typeof n.parser)return n.parser(e);if("function"==typeof e.getMonth||"number"==typeof e)return i(e);if(e.isValid&&e.isValid())return e;var a=n.format;return"string"!=typeof a&&a.call?(console.warn("options.time.format is deprecated and replaced by options.time.parser."),a(e)):i(e,a)}function n(t,e,n,i){for(var a,o=Object.keys(l),r=o.length,s=o.indexOf(t);s<r;s++){a=o[s];var u=l[a],d=u.steps&&u.steps[u.steps.length-1]||u.maxStep;if(void 0===d||Math.ceil((n-e)/(d*u.size))<=i)break}return a}function a(t,e,n,i){var a=l[n],o=a.size,r=Math.ceil((e-t)/o),s=1,u=e-t;if(a.steps)for(var d=a.steps.length,c=0;c<d&&r>i;c++)s=a.steps[c],r=Math.ceil(u/(o*s));else for(;r>i&&i>0;)++s,r=Math.ceil(u/(o*s));return s}function o(t,e,n){var a=[];if(t.maxTicks){var o=t.stepSize;a.push(void 0!==t.min?t.min:n.min);for(var r=i(n.min);r.add(o,t.unit).valueOf()<n.max;)a.push(r.valueOf());var l=t.max||n.max;a[a.length-1]!==l&&a.push(l)}return a}var r=t.helpers,l={millisecond:{size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{size:1e3,steps:[1,2,5,10,30]},minute:{size:6e4,steps:[1,2,5,10,30]},hour:{size:36e5,steps:[1,2,3,6,12]},day:{size:864e5,steps:[1,2,5]},week:{size:6048e5,maxStep:4},month:{size:2628e6,maxStep:3},quarter:{size:7884e6,maxStep:4},year:{size:3154e7,maxStep:!1}},s={position:"bottom",time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm:ss a",hour:"MMM D, hA",day:"ll",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"}},ticks:{autoSkip:!1}};t.Ticks.generators.time=function(t,e){var n,a,r=t.isoWeekday;return"week"===t.unit&&r!==!1?(n=i(e.min).startOf("isoWeek").isoWeekday(r).valueOf(),a=i(e.max).startOf("isoWeek").isoWeekday(r),e.max-a>0&&a.add(1,"week"),a=a.valueOf()):(n=i(e.min).startOf(t.unit).valueOf(),a=i(e.max).startOf(t.unit),e.max-a>0&&a.add(1,t.unit),a=a.valueOf()),o(t,e,{min:n,max:a})};var u=t.Scale.extend({initialize:function(){if(!i)throw new Error("Chart.js - Moment.js could not be found! You must include it before Chart.js to use the time scale. Download at https://momentjs.com");t.Scale.prototype.initialize.call(this)},determineDataLimits:function(){var t,n=this,i=n.options.time,a=Number.MAX_SAFE_INTEGER,o=Number.MIN_SAFE_INTEGER,l=n.chart.data,s={labels:[],datasets:[]};r.each(l.labels,function(r,l){var u=e(n,r);u.isValid()&&(i.round&&u.startOf(i.round),t=u.valueOf(),a=Math.min(t,a),o=Math.max(t,o),s.labels[l]=t)}),r.each(l.datasets,function(l,u){var d=[];"object"==typeof l.data[0]&&null!==l.data[0]&&n.chart.isDatasetVisible(u)?r.each(l.data,function(r,l){var s=e(n,n.getRightValue(r));s.isValid()&&(i.round&&s.startOf(i.round),t=s.valueOf(),a=Math.min(t,a),o=Math.max(t,o),d[l]=t)}):d=s.labels.slice(),s.datasets[u]=d}),n.dataMin=a,n.dataMax=o,n._parsedData=s},buildTicks:function(){var i,o,l=this,s=l.options.time,u=l.dataMin,d=l.dataMax;if(s.min){var c=e(l,s.min);s.round&&c.round(s.round),i=c.valueOf()}s.max&&(o=e(l,s.max).valueOf());var h=l.getLabelCapacity(i||u),f=s.unit||n(s.minUnit,i||u,o||d,h);l.displayFormat=s.displayFormats[f];var g=s.stepSize||a(i||u,o||d,f,h);l.ticks=t.Ticks.generators.time({maxTicks:h,min:i,max:o,stepSize:g,unit:f,isoWeekday:s.isoWeekday},{min:u,max:d}),l.max=r.max(l.ticks),l.min=r.min(l.ticks)},getLabelForIndex:function(t,n){var i=this,a=i.chart.data.labels&&t<i.chart.data.labels.length?i.chart.data.labels[t]:"",o=i.chart.data.datasets[n].data[t];return null!==o&&"object"==typeof o&&(a=i.getRightValue(o)),i.options.time.tooltipFormat&&(a=e(i,a).format(i.options.time.tooltipFormat)),a},tickFormatFunction:function(t,e,n){var i=t.format(this.displayFormat),a=this.options.ticks,o=r.getValueOrDefault(a.callback,a.userCallback);return o?o(i,e,n):i},convertTicksToLabels:function(){var t=this;t.ticksAsTimestamps=t.ticks,t.ticks=t.ticks.map(function(t){return i(t)}).map(t.tickFormatFunction,t)},getPixelForOffset:function(t){var e=this,n=e.max-e.min,i=n?(t-e.min)/n:0;if(e.isHorizontal()){var a=e.width*i;return e.left+Math.round(a)}var o=e.height*i;return e.top+Math.round(o)},getPixelForValue:function(t,n,i){var a=this,o=null;if(void 0!==n&&void 0!==i&&(o=a._parsedData.datasets[i][n]),null===o&&(t&&t.isValid||(t=e(a,a.getRightValue(t))),t&&t.isValid&&t.isValid()&&(o=t.valueOf())),null!==o)return a.getPixelForOffset(o)},getPixelForTick:function(t){return this.getPixelForOffset(this.ticksAsTimestamps[t])},getValueForPixel:function(t){var e=this,n=e.isHorizontal()?e.width:e.height,a=(t-(e.isHorizontal()?e.left:e.top))/n;return i(e.min+a*(e.max-e.min))},getLabelWidth:function(e){var n=this,i=n.options.ticks,a=n.ctx.measureText(e).width,o=Math.cos(r.toRadians(i.maxRotation)),l=Math.sin(r.toRadians(i.maxRotation)),s=r.getValueOrDefault(i.fontSize,t.defaults.global.defaultFontSize);return a*o+s*l},getLabelCapacity:function(t){var e=this;e.displayFormat=e.options.time.displayFormats.millisecond;var n=e.tickFormatFunction(i(t),0,[]),a=e.getLabelWidth(n),o=e.isHorizontal()?e.width:e.height,r=o/a;return r}});t.scaleService.registerScaleType("time",u,s)}},{1:1}]},{},[7])(7)});
\ No newline at end of file
diff --git a/static/src/xml/lefilament_tdb.xml b/static/src/xml/lefilament_tdb.xml
index c3843c7c7021d3b702eda6396a55b1bffc19227e..658359d1c6560b8f5d3cc172577074a952fa867a 100644
--- a/static/src/xml/lefilament_tdb.xml
+++ b/static/src/xml/lefilament_tdb.xml
@@ -1,226 +1,264 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" ?>
 <!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <templates xml:space="preserve">
 
-	<t t-name="YearDashboard">
-		<div class="yeardashboard">
-			<div class="row">
-				<!-- COLONNE 1 -->
-				<div class="col-xs-12 col-sm-6 col-md-4">
-					<h3>En Cours</h3>
-					<!-- Facturé -->
-					<div class="col-xs-12">
-						<div class="card">
-							<div class="card-body">
-								<h5 class="card-title">Facturé</h5>
-								<p class="card-number">
-									<a id="facture" t-attf-data-fiscalyear="#{widget.values.fiscal_year}" >
-										<t t-esc="widget.render_monetary(widget.values.facture)"></t>
-									</a>
-								</p>
-							</div>
-						</div>
-					</div>
-					<!-- Commandes -->
-					<div class="col-xs-12">
-						<div class="card">
-							<div class="card-body">
-								<h5 class="card-title">Commandes en cours</h5>
-								<p class="card-number">
-									<a id="commandes">
-										<t t-esc="widget.render_monetary(widget.values.commandes)"></t>
-									</a>
-								</p>
-							</div>
-						</div>
-					</div>
-					<!-- Pipe -->
-					<div class="col-xs-12 dashboard-tab">
-						<ul class="nav nav-tabs" id="myTab1">
-							<li class="nav-item">
-								<a class="nav-link active" data-toggle="tab" href="#pipe">Pipe</a>
-							</li>
-							<li class="nav-item">
-								<a class="nav-link" data-toggle="tab" href="#pipe_n1">Pipe N+1</a>
-							</li>
-						</ul>
-						<div class="tab-content card-tab" id="myTab1Content">
-							<div id="pipe" class="tab-pane fade show active in">
-								<p class="card-number">
-									<a id="pipe_link" t-attf-data-fiscalyearnext="#{widget.values.fiscal_year_next}" >
-										<t t-esc="widget.render_monetary(widget.values.pipe)"></t>
-									</a>
-								</p>
-							</div>
-							<div id="pipe_n1" class="tab-pane fade">
-								<p class="card-number">
-									<a id="pipe_n1_link" t-attf-data-fiscalyearnext="#{widget.values.fiscal_year_next}" >									
-										<t t-esc="widget.render_monetary(widget.values.pipe_n1)"></t>
-									</a>
-								</p>
-							</div>
-						</div>
-					</div>
-				</div>
-				<!-- COLONNE 2 -->
-				<div class="col-xs-12 col-sm-6 col-md-4">
-					<h3>Objectif</h3>
-					<div class="col-xs-12">
-						<div class="card">
-							<div class="card-body">
-								<h5 class="card-title">Target</h5>
-								<p class="card-number">
-									<t t-esc="widget.render_monetary(widget.values.target)"></t>
-								</p>
-								<canvas id="target" width="auto" height="125"></canvas>
-								<!-- <div id="hchart" ></div> -->
-								<table class="table-legend">
-									<tr>
-										<td style="background-color: #8ED8A2; width: 20px;"></td>
-										<td>Facturé</td>
-										<td class="nb"><t t-esc="widget.render_percent(widget.pfact)"></t></td>
-										<td class="nb"><t t-esc="widget.render_keur(widget.pfact2)"></t></td>
-									</tr>
-									<tr>
-										<td style="background-color: #F6DCA2; width: 20px;"></td>
-										<td>Commandes</td>
-										<td class="nb"><t t-esc="widget.render_percent(widget.pcomm)"></t></td>
-										<td class="nb"><t t-esc="widget.render_keur(widget.pcomm2)"></t></td>
-									</tr>
-									<tr>
-										<td style="background-color: #F6CCA2; width: 20px;"></td>
-										<td>Pipe Gagné</td>
-										<td class="nb"><t t-esc="widget.render_percent(widget.ppipe_win)"></t></td>
-										<td class="nb"><t t-esc="widget.render_keur(widget.ppipe2_win)"></t></td>
-									</tr>
-									<tr class="table-legend-total">
-										<td style="width: 20px;"></td>
-										<td>Total</td>
-										<td class="nb"><t t-esc="widget.render_percent(widget.total)"></t></td>
-										<td class="nb"><t t-esc="widget.render_keur(widget.total2)"></t></td>
-									</tr>
-									<tr>
-										<td style="width: 20px;"></td>
-										<td></td>
-										<td class="nb"></td>
-										<td class="nb"></td>
-									</tr>
-									<tr>
-										<td style="background-color: #F6ACA2; width: 20px;"></td>
-										<td>Pipe</td>
-										<td class="nb"><t t-esc="widget.render_percent(widget.ppipe_to_win)"></t></td>
-										<td class="nb"><t t-esc="widget.render_keur(widget.ppipe2_to_win)"></t></td>
-									</tr>
-									<tr>
-										<td style="background-color: #eee; width: 20px;"></td>
-										<td>To Do</td>
-										<td class="nb"><t t-esc="widget.render_percent(widget.ptarg)"></t></td>
-										<td class="nb"><t t-esc="widget.render_keur(widget.ptarg2)"></t></td>
-									</tr>
-								</table>
-							</div>
-						</div>
-					</div>
-				</div>
-				<!-- COLONNE 3 -->
-				<div class="col-xs-12 col-sm-6 col-md-4 tresorerie">
-					<h3>Trésorerie</h3>
-					<!-- Tréso -->
-					<div class="col-xs-12">
-						<div class="card">
-							<div class="card-body">
-							<h5 class="card-title">Trésorerie</h5>
-								<p class="card-maj">Denière mise à jour le <t t-esc="widget.render_date(widget.values.date_maj)"></t></p>
-								<p class="card-number">
-									<a id="releve">
-										<strong><t t-esc="widget.render_monetary(widget.values.tresorerie)"></t></strong>
-									</a>
-								</p>
-							</div>
-						</div>
-					</div>
-					<!-- Non encaissé / Du -->
-					<div class="col-xs-12 dashboard-tab">
-						<ul class="nav nav-tabs" id="tab3">
-							<li class="nav-item">
-								<a class="nav-link active" data-toggle="tab" href="#non_encaisse">Facturé non encaissé</a>
-							</li>
-							<li class="nav-item">
-								<a class="nav-link" data-toggle="tab" href="#fournisseur">Fournisseurs</a>
-							</li>
-						</ul>
-						<div class="tab-content card-tab" id="myTab3Content">
-							<div id="non_encaisse" class="tab-pane fade show active in">
-								<p class="card-number">
-									<a id="facture_non_encaisse">
-										<t t-esc="widget.render_monetary(widget.values.a_encaisser)"></t>
-									</a>
-								</p>
-							</div>
-							<div id="fournisseur" class="tab-pane fade">
-								<p class="card-number">
-									<a id="fournisseur_link">
-										<t t-esc="widget.render_monetary(widget.values.a_payer)"></t>
-									</a>
-								</p>
-							</div>
-						</div>
-					</div>
-					<!-- Variation -->
-					<div class="col-xs-12 dashboard-tab">
-						<ul class="nav nav-tabs" id="myTab2">
-							<li class="nav-item">
-								<a class="nav-link active" data-toggle="tab" href="#variation">Variation</a>
-							</li>
-							<li class="nav-item">
-								<a class="nav-link" data-toggle="tab" href="#e_s">Entrées/Sorties</a>
-							</li>
-						</ul>
-						<div class="tab-content card-tab" id="myTab2Content">
-							<div id="variation" class="tab-pane fade show active in">
-								<p class="card-number">
-									<t t-raw="widget.render_monetary_color(widget.values.variation)"></t>
-								</p>
-							</div>
-							<div id="e_s" class="tab-pane fade">
-								<div class="card-half">
-									<h5 class="card-title">Encaissé</h5>
-									<p class="card-number">
-										<t t-esc="widget.render_monetary(widget.values.entree)"></t>
-									</p>
-								</div>
-								<div class="card-half">
-									<h5 class="card-title">Sorties</h5>
-									<p class="card-number">
-										<t t-esc="widget.render_monetary(widget.values.sortie)"></t>
-									</p>
-								</div>
-								<div class="clearfix"></div>
-							</div>
-						</div>
-					</div>
-					<!-- <div class="col-xs-12">
-						<div class="card card-cca">
-							<div class="card-body">
-								<div class="card-cca-half">
-									<h5 class="card-title">CCA en cours</h5>
-									<p class="card-number">
-										<t t-raw="widget.render_monetary(widget.values.cca)"></t>
-									</p>
-								</div>
-								<div class="card-cca-half">
-									<h5 class="card-title">Capital Social</h5>
-									<p class="card-number">
-										<t t-raw="widget.render_monetary(widget.values.capital)"></t>
-									</p>
-								</div>
-							</div>
-						</div>
-					</div> -->
-				</div>
-			</div>
-		</div>
-	</t>
+  <t t-name="YearDashboard">
+    <div class="yeardashboard">
+      <div class="row">
+        <!-- COLONNE 1 -->
+        <div class="col-xs-12 col-sm-6 col-md-4">
+          <h3>En Cours</h3>
+          <!-- Facturé -->
+          <div class="col-xs-12">
+            <div class="card">
+              <div class="card-body">
+                <h5 class="card-title">Facturé</h5>
+                <p class="card-number">
+                  <a id="facture" t-attf-data-fiscalyear="#{widget.values.fiscal_year}">
+                    <t t-esc="widget.render_monetary(widget.values.facture)" />
+                  </a>
+                </p>
+              </div>
+            </div>
+          </div>
+          <!-- Commandes -->
+          <div class="col-xs-12">
+            <div class="card">
+              <div class="card-body">
+                <h5 class="card-title">Commandes en cours</h5>
+                <p class="card-number">
+                  <a id="commandes">
+                    <t t-esc="widget.render_monetary(widget.values.commandes)" />
+                  </a>
+                </p>
+              </div>
+            </div>
+          </div>
+          <!-- Pipe -->
+          <div class="col-xs-12 dashboard-tab">
+            <ul class="nav nav-tabs" id="myTab1">
+              <li class="nav-item">
+                <a class="nav-link active" data-toggle="tab" href="#pipe">Pipe</a>
+              </li>
+              <li class="nav-item">
+                <a class="nav-link" data-toggle="tab" href="#pipe_n1">Pipe N+1</a>
+              </li>
+            </ul>
+            <div class="tab-content card-tab" id="myTab1Content">
+              <div id="pipe" class="tab-pane fade show active in">
+                <p class="card-number">
+                  <a
+                                        id="pipe_link"
+                                        t-attf-data-fiscalyearnext="#{widget.values.fiscal_year_next}"
+                                    >
+                    <t t-esc="widget.render_monetary(widget.values.pipe)" />
+                  </a>
+                </p>
+              </div>
+              <div id="pipe_n1" class="tab-pane fade">
+                <p class="card-number">
+                  <a
+                                        id="pipe_n1_link"
+                                        t-attf-data-fiscalyearnext="#{widget.values.fiscal_year_next}"
+                                    >
+                    <t t-esc="widget.render_monetary(widget.values.pipe_n1)" />
+                  </a>
+                </p>
+              </div>
+            </div>
+          </div>
+        </div>
+        <!-- COLONNE 2 -->
+        <div class="col-xs-12 col-sm-6 col-md-4">
+          <h3>Objectif</h3>
+          <div class="col-xs-12">
+            <div class="card">
+              <div class="card-body">
+                <h5 class="card-title">Target</h5>
+                <p class="card-number">
+                  <t t-esc="widget.render_monetary(widget.values.target)" />
+                </p>
+                <canvas id="target" width="auto" height="125" />
+                <!-- <div id="hchart" ></div> -->
+                <table class="table-legend">
+                  <tr>
+                    <td style="background-color: #8ED8A2; width: 20px;" />
+                    <td>Facturé</td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_percent(widget.pfact)"
+                                            /></td>
+                    <td class="nb"><t t-esc="widget.render_keur(widget.pfact2)" /></td>
+                  </tr>
+                  <tr>
+                    <td style="background-color: #F6DCA2; width: 20px;" />
+                    <td>Commandes</td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_percent(widget.pcomm)"
+                                            /></td>
+                    <td class="nb"><t t-esc="widget.render_keur(widget.pcomm2)" /></td>
+                  </tr>
+                  <tr>
+                    <td style="background-color: #F6CCA2; width: 20px;" />
+                    <td>Pipe Gagné</td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_percent(widget.ppipe_win)"
+                                            /></td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_keur(widget.ppipe2_win)"
+                                            /></td>
+                  </tr>
+                  <tr class="table-legend-total">
+                    <td style="width: 20px;" />
+                    <td>Total</td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_percent(widget.total)"
+                                            /></td>
+                    <td class="nb"><t t-esc="widget.render_keur(widget.total2)" /></td>
+                  </tr>
+                  <tr>
+                    <td style="width: 20px;" />
+                    <td />
+                    <td class="nb" />
+                    <td class="nb" />
+                  </tr>
+                  <tr>
+                    <td style="background-color: #F6ACA2; width: 20px;" />
+                    <td>Pipe</td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_percent(widget.ppipe_to_win)"
+                                            /></td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_keur(widget.ppipe2_to_win)"
+                                            /></td>
+                  </tr>
+                  <tr>
+                    <td style="background-color: #eee; width: 20px;" />
+                    <td>To Do</td>
+                    <td class="nb"><t
+                                                t-esc="widget.render_percent(widget.ptarg)"
+                                            /></td>
+                    <td class="nb"><t t-esc="widget.render_keur(widget.ptarg2)" /></td>
+                  </tr>
+                </table>
+              </div>
+            </div>
+          </div>
+        </div>
+        <!-- COLONNE 3 -->
+        <div class="col-xs-12 col-sm-6 col-md-4 tresorerie">
+          <h3>Trésorerie</h3>
+          <!-- Tréso -->
+          <div class="col-xs-12">
+            <div class="card">
+              <div class="card-body">
+              <h5 class="card-title">Trésorerie</h5>
+                <p class="card-maj">Denière mise à jour le <t
+                                        t-esc="widget.render_date(widget.values.date_maj)"
+                                    /></p>
+                <p class="card-number">
+                  <a id="releve">
+                    <strong><t
+                                                t-esc="widget.render_monetary(widget.values.tresorerie)"
+                                            /></strong>
+                  </a>
+                </p>
+              </div>
+            </div>
+          </div>
+          <!-- Non encaissé / Du -->
+          <div class="col-xs-12 dashboard-tab">
+            <ul class="nav nav-tabs" id="tab3">
+              <li class="nav-item">
+                <a
+                                    class="nav-link active"
+                                    data-toggle="tab"
+                                    href="#non_encaisse"
+                                >Facturé non encaissé</a>
+              </li>
+              <li class="nav-item">
+                <a
+                                    class="nav-link"
+                                    data-toggle="tab"
+                                    href="#fournisseur"
+                                >Fournisseurs</a>
+              </li>
+            </ul>
+            <div class="tab-content card-tab" id="myTab3Content">
+              <div id="non_encaisse" class="tab-pane fade show active in">
+                <p class="card-number">
+                  <a id="facture_non_encaisse">
+                    <t t-esc="widget.render_monetary(widget.values.a_encaisser)" />
+                  </a>
+                </p>
+              </div>
+              <div id="fournisseur" class="tab-pane fade">
+                <p class="card-number">
+                  <a id="fournisseur_link">
+                    <t t-esc="widget.render_monetary(widget.values.a_payer)" />
+                  </a>
+                </p>
+              </div>
+            </div>
+          </div>
+          <!-- Variation -->
+          <div class="col-xs-12 dashboard-tab">
+            <ul class="nav nav-tabs" id="myTab2">
+              <li class="nav-item">
+                <a
+                                    class="nav-link active"
+                                    data-toggle="tab"
+                                    href="#variation"
+                                >Variation</a>
+              </li>
+              <li class="nav-item">
+                <a class="nav-link" data-toggle="tab" href="#e_s">Entrées/Sorties</a>
+              </li>
+            </ul>
+            <div class="tab-content card-tab" id="myTab2Content">
+              <div id="variation" class="tab-pane fade show active in">
+                <p class="card-number">
+                  <t t-raw="widget.render_monetary_color(widget.values.variation)" />
+                </p>
+              </div>
+              <div id="e_s" class="tab-pane fade">
+                <div class="card-half">
+                  <h5 class="card-title">Encaissé</h5>
+                  <p class="card-number">
+                    <t t-esc="widget.render_monetary(widget.values.entree)" />
+                  </p>
+                </div>
+                <div class="card-half">
+                  <h5 class="card-title">Sorties</h5>
+                  <p class="card-number">
+                    <t t-esc="widget.render_monetary(widget.values.sortie)" />
+                  </p>
+                </div>
+                <div class="clearfix" />
+              </div>
+            </div>
+          </div>
+          <!-- <div class="col-xs-12">
+            <div class="card card-cca">
+              <div class="card-body">
+                <div class="card-cca-half">
+                  <h5 class="card-title">CCA en cours</h5>
+                  <p class="card-number">
+                    <t t-raw="widget.render_monetary(widget.values.cca)"></t>
+                  </p>
+                </div>
+                <div class="card-cca-half">
+                  <h5 class="card-title">Capital Social</h5>
+                  <p class="card-number">
+                    <t t-raw="widget.render_monetary(widget.values.capital)"></t>
+                  </p>
+                </div>
+              </div>
+            </div>
+          </div> -->
+        </div>
+      </div>
+    </div>
+  </t>
 
 </templates>
diff --git a/static/src/xml/lefilament_treso.xml b/static/src/xml/lefilament_treso.xml
index 577205309cd86fece4935659a874017ddb35e38a..bb04b7787310d5628e0e7be7498a9f4b5717a357 100644
--- a/static/src/xml/lefilament_treso.xml
+++ b/static/src/xml/lefilament_treso.xml
@@ -1,21 +1,21 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="UTF-8" ?>
 <!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <templates xml:space="preserve">
 
 
-	<t t-name="Tresorerie">
+    <t t-name="Tresorerie">
 
-			<div class="card">
-				<div class="card-body">
-					<p class="card-number">
-						Trésorerie sur 12 mois
-					</p>
-					<hr/>
-					<canvas id="tresorerie" width="auto" height="100"></canvas>
-				</div>
-			</div>
+        <div class="card">
+            <div class="card-body">
+                <p class="card-number">
+                    Trésorerie sur 12 mois
+                </p>
+                <hr />
+                <canvas id="tresorerie" width="auto" height="100" />
+            </div>
+        </div>
 
-	</t>
+    </t>
 
 </templates>
diff --git a/views/assets.xml b/views/assets.xml
index cc567894c9403ebc39eaa0913f12acbed35679cb..aa3657ebb6a71a1bd0a00c3b9364466bcd754bbb 100644
--- a/views/assets.xml
+++ b/views/assets.xml
@@ -1,19 +1,30 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
     <data>
-        
+
         <template id="lefilament_tdb_assets_backend" inherit_id="web.assets_backend">
             <xpath expr="." position="inside">
 
-                <link href="/lefilament_tdb/static/src/css/lefilament_tdb.css" rel="stylesheet" />
+                <link
+                    href="/lefilament_tdb/static/src/css/lefilament_tdb.css"
+                    rel="stylesheet"
+                />
+
+                <script
+                    type="text/javascript"
+                    src="/lefilament_tdb/static/src/js/dashboard_year.js"
+                />
+                <script
+                    type="text/javascript"
+                    src="/lefilament_tdb/static/src/js/tresorerie.js"
+                />
+                <script
+                    type="text/javascript"
+                    src="/lefilament_tdb/static/src/js/previ_tresorerie.js"
+                />
 
-                <script type="text/javascript" src="/lefilament_tdb/static/src/lib/chart.js"></script>
-                <script type="text/javascript" src="/lefilament_tdb/static/src/js/dashboard_year.js"></script>
-                <script type="text/javascript" src="/lefilament_tdb/static/src/js/tresorerie.js"></script>
-                <script type="text/javascript" src="/lefilament_tdb/static/src/js/previ_tresorerie.js"></script>
-                
             </xpath>
         </template>
 
diff --git a/views/schedule.xml b/views/schedule.xml
index b62f4b1dabec89b45a3128cb1e7b40e2bff9f293..08af0799a9e444c6c902d70d640ce2802746caaf 100644
--- a/views/schedule.xml
+++ b/views/schedule.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
@@ -10,8 +10,8 @@
             <field name="interval_number">1</field>
             <field name="interval_type">months</field>
             <field name="numbercall">-1</field>
-            <field name="doall" eval="True"/>
-            <field name="nextcall" >2017-01-31 23:10:00</field>
+            <field name="doall" eval="True" />
+            <field name="nextcall">2017-01-31 23:10:00</field>
             <field name="model_id" ref="model_lefilament_dashboard" />
             <field name="code">model._new_data()</field>
             <field name="state">code</field>
diff --git a/views/views.xml b/views/views.xml
index 1dbc32425d97d9053f96d6b710d364d1497b65bb..2c6dad59f5a5b092189763bf6b337070c50276d6 100644
--- a/views/views.xml
+++ b/views/views.xml
@@ -1,17 +1,20 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8" ?>
 <!-- Copyright 2017 Le Filament (<https://www.le-filament.com>)
      License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). -->
 <odoo>
     <data>
 
-        <record id="lefilament_dashboard_action" model="ir.actions.act_window" >
+        <record id="lefilament_dashboard_action" model="ir.actions.act_window">
             <field name="name">Dashboard - Le Filament</field>
             <field name="res_model">lefilament.dashboard</field>
             <field name="view_mode">tree,graph,form,pivot</field>
         </record>
 
 
-        <record id="lefilament_dashboard_variables_action" model="ir.actions.act_window" >
+        <record
+            id="lefilament_dashboard_variables_action"
+            model="ir.actions.act_window"
+        >
             <field name="name">Variables Dashboard Le Filament</field>
             <field name="res_model">res.company</field>
             <field name="res_id">1</field>
@@ -21,7 +24,7 @@
         <record id="action_year_page" model="ir.actions.client">
             <field name="name">Rapport Annuel</field>
             <field name="tag">lefilament_tdb.dashboard_year</field>
-            <field name="binding_model_id" ref="model_lefilament_dashboard"/>
+            <field name="binding_model_id" ref="model_lefilament_dashboard" />
             <field name="binding_type">action</field>
         </record>
 
@@ -29,7 +32,7 @@
             <field name="name">Trésorerie</field>
             <field name="tag">lefilament_tdb.tresorerie</field>
             <field name="target">new</field>
-            <field name="binding_model_id" ref="model_lefilament_dashboard"/>
+            <field name="binding_model_id" ref="model_lefilament_dashboard" />
             <field name="binding_type">action</field>
         </record>
 
@@ -37,28 +40,68 @@
             <field name="name">Trésorerie</field>
             <field name="tag">lefilament_tdb.previ_tresorerie</field>
             <field name="target">current</field>
-            <field name="binding_model_id" ref="model_lefilament_dashboard"/>
+            <field name="binding_model_id" ref="model_lefilament_dashboard" />
             <field name="binding_type">action</field>
         </record>
 
-        <menuitem 
-            id="lefilament_dashboard_menu" 
-            name="Dashboard" 
-            sequence="10" 
+        <menuitem
+            id="lefilament_dashboard_menu"
+            name="Dashboard"
+            sequence="10"
             groups="group_dashboard"
             web_icon="lefilament_tdb,static/description/icon_menu.png"
         />
-        
-        <menuitem id="lefilament_dashboard_report" parent="lefilament_dashboard_menu" name="Rapports" sequence="1"/>
-             
-        <menuitem id="lefilament_dashboard_report_year" parent="lefilament_dashboard_report" name="Annuel" sequence="1" action="action_year_page" />
-        <menuitem id="lefilament_tresorerie" parent="lefilament_dashboard_report" name="Tréso" sequence="3" action="action_tresorerie" />
-        <menuitem id="lefilament_previ_tresorerie" parent="lefilament_dashboard_report" name="Prévi Tréso" sequence="3" action="action_previ_tresorerie" />
-        
-        <menuitem id="lefilament_dashboard_conf" parent="lefilament_dashboard_menu" name="Configuration" sequence="10"/>
-        <menuitem id="lefilament_dashboard_datas" parent="lefilament_dashboard_conf" name="Données" action="lefilament_dashboard_action" sequence="10"/>
-        <menuitem id="lefilament_dashboard_variables" parent="lefilament_dashboard_conf" name="Variables" action="lefilament_dashboard_variables_action" sequence="10"/>
-        
+
+        <menuitem
+            id="lefilament_dashboard_report"
+            parent="lefilament_dashboard_menu"
+            name="Rapports"
+            sequence="1"
+        />
+
+        <menuitem
+            id="lefilament_dashboard_report_year"
+            parent="lefilament_dashboard_report"
+            name="Annuel"
+            sequence="1"
+            action="action_year_page"
+        />
+        <menuitem
+            id="lefilament_tresorerie"
+            parent="lefilament_dashboard_report"
+            name="Tréso"
+            sequence="3"
+            action="action_tresorerie"
+        />
+        <menuitem
+            id="lefilament_previ_tresorerie"
+            parent="lefilament_dashboard_report"
+            name="Prévi Tréso"
+            sequence="3"
+            action="action_previ_tresorerie"
+        />
+
+        <menuitem
+            id="lefilament_dashboard_conf"
+            parent="lefilament_dashboard_menu"
+            name="Configuration"
+            sequence="10"
+        />
+        <menuitem
+            id="lefilament_dashboard_datas"
+            parent="lefilament_dashboard_conf"
+            name="Données"
+            action="lefilament_dashboard_action"
+            sequence="10"
+        />
+        <menuitem
+            id="lefilament_dashboard_variables"
+            parent="lefilament_dashboard_conf"
+            name="Variables"
+            action="lefilament_dashboard_variables_action"
+            sequence="10"
+        />
+
 
         <record id="lefilament_dashboard_tree" model="ir.ui.view">
             <field name="name">Le Filament Dashboard Treeview</field>
@@ -70,9 +113,9 @@
                     <field name="ca_mois" sum="Chiffre d'Affaire" />
                     <field name="pipe_mois" avg="pipe" />
                     <field name="treso" avg="Treso" />
-                    <field name="variation" avg="Variation"  />
-                    <field name="charges" avg="Décaissé"  />
-                    <field name="encaisse" avg="Encaissé"  />
+                    <field name="variation" avg="Variation" />
+                    <field name="charges" avg="Décaissé" />
+                    <field name="encaisse" avg="Encaissé" />
                     <field name="charges_fixes" />
                     <field name="runway" />
                 </tree>
@@ -85,8 +128,8 @@
             <field name="type">pivot</field>
             <field name="arch" type="xml">
                  <graph string="TDB Le Filament">
-                      <field name="ca_mois" type="measure"  />
-                      <field name="pipe_mois" type="measure"  />
+                      <field name="ca_mois" type="measure" />
+                      <field name="pipe_mois" type="measure" />
                       <field name="date_tdb" type="row" />
                 </graph>
             </field>
@@ -110,7 +153,12 @@
             <field name="arch" type="xml">
                 <form string="Liste des Mois">
                     <header>
-                        <button string="MaJ Valeurs" type="object" name="dashboard_values" class="oe_highlight"/>
+                        <button
+                            string="MaJ Valeurs"
+                            type="object"
+                            name="compute_dashboard_values"
+                            class="oe_highlight"
+                        />
                     </header>
                     <div class="container">
                         <div class="col-xs-12 tdb_form">
@@ -127,19 +175,19 @@
                             <group>
                                 <field name="ca_mois" widget="monetary" />
                                 <field name="cmd_mois" widget="monetary" />
-                                <field name="pipe_mois"  widget="monetary" />
+                                <field name="pipe_mois" widget="monetary" />
                             </group>
                         </div>
                         <div class="col-xs-6 tdb_form">
                             <h3>Trésorerie</h3>
                             <hr />
                             <group>
-                                <field name="treso"  widget="monetary" />
-                                <field name="variation"  widget="monetary"  />
-                                <field name="charges"  widget="monetary"  />
-                                <field name="encaisse"  widget="monetary"  />
-                                <field name="charges_fixes"  widget="monetary"  />
-                                <field name="runway"  widget="monetary"  />
+                                <field name="treso" widget="monetary" />
+                                <field name="variation" widget="monetary" />
+                                <field name="charges" widget="monetary" />
+                                <field name="encaisse" widget="monetary" />
+                                <field name="charges_fixes" widget="monetary" />
+                                <field name="runway" widget="monetary" />
                             </group>
                         </div>
                     </div>
@@ -153,12 +201,31 @@
             <field name="model">lefilament.dashboard</field>
             <field name="arch" type="xml">
                 <search>
-                    <filter string="Cette année" name="this_year" domain="[ ('date_tdb', '&gt;=', (context_today()-relativedelta(years=0)).strftime('%Y-01-01')),]" />
-                    <filter string="L'année dernière" name="last_year" domain="[ ('date_tdb', '&gt;=', (context_today()-relativedelta(years=1)).strftime('%Y-01-01')), ('date_tdb', '&lt;=', (context_today()-relativedelta(years=1)).strftime('%Y-12-31'))]" />
-                    
+                    <field name="name" />
+                    <filter
+                        string="Cette année"
+                        name="this_year"
+                        domain="[ ('date_tdb', '&gt;=', (context_today()-relativedelta(years=0)).strftime('%Y-01-01')),]"
+                    />
+                    <filter
+                        string="L'année dernière"
+                        name="last_year"
+                        domain="[ ('date_tdb', '&gt;=', (context_today()-relativedelta(years=1)).strftime('%Y-01-01')), ('date_tdb', '&lt;=', (context_today()-relativedelta(years=1)).strftime('%Y-12-31'))]"
+                    />
+
                     <group expand="0" name="group_by" string="Group By">
-                        <filter string="Trimestre" name="trimestre" context="{'group_by':'date_tdb:quarter'}" domain="[]"/>
-                        <filter string="An" name="an" context="{'group_by':'date_tdb:year'}" domain="[]"/>
+                        <filter
+                            string="Trimestre"
+                            name="trimestre"
+                            context="{'group_by':'date_tdb:quarter'}"
+                            domain="[]"
+                        />
+                        <filter
+                            string="An"
+                            name="an"
+                            context="{'group_by':'date_tdb:year'}"
+                            domain="[]"
+                        />
                     </group>
                 </search>
             </field>
@@ -168,21 +235,21 @@
         <record id="view_form_lefilament_company_form_inherited" model="ir.ui.view">
             <field name="name">res.company.form.tdb</field>
             <field name="model">res.company</field>
-            <field name="inherit_id" ref="base.view_company_form"/>
+            <field name="inherit_id" ref="base.view_company_form" />
             <field name="arch" type="xml">
                 <xpath expr="//page[1]" position="after">
                     <page name="tdb" string="Tableau de Bord">
                         <group>
-                            <group srting="Données Annuelles">
-                                <field name="ca_target" /> 
+                            <group string="Données Annuelles">
+                                <field name="ca_target" />
                             </group>
-                            <group srting="Données Mensuelles">
-                                <field name="charges_fixes" /> 
+                            <group string="Données Mensuelles">
+                                <field name="charges_fixes" />
                             </group>
                         </group>
                     </page>
                     <page name="tdb" string="Prévisonnel">
-                        <field name="previ_treso_ids" /> 
+                        <field name="previ_treso_ids" />
                     </page>
                 </xpath>
             </field>
@@ -192,7 +259,7 @@
         <record id="view_form_lefilament_emplyee_form_inherited" model="ir.ui.view">
             <field name="name">hr.employee.form.tdb</field>
             <field name="model">hr.employee</field>
-            <field name="inherit_id" ref="hr.view_employee_form"/>
+            <field name="inherit_id" ref="hr.view_employee_form" />
             <field name="arch" type="xml">
                 <xpath expr="//field[@name='work_phone']" position="after">
                         <field name="capital" />
@@ -213,7 +280,7 @@
                 </tree>
             </field>
         </record>
-        
+
 
     </data>
 </odoo>